@datagrok/bio 1.2.0 → 1.3.1
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/detectors.js +200 -1
- package/dist/package-test.js +406 -87
- package/dist/package.js +351 -9
- package/package.json +3 -3
- package/src/package-test.ts +7 -4
- package/src/package.ts +9 -0
- package/src/tests/{Palettes.test.ts → Palettes-test.ts} +2 -2
- package/src/tests/WebLogo-test.ts +127 -0
- package/src/tests/detectors-test.ts +166 -0
- package/{test-Bio-3109311545e4-fcd6a7f5.html → test-Bio-69a4761f6044-51a4ab35.html} +2 -2
- package/src/tests/WebLogo.test.ts +0 -132
package/dist/package.js
CHANGED
|
@@ -410,6 +410,51 @@ class UnknownSeqPalettes extends _seq_palettes__WEBPACK_IMPORTED_MODULE_0__.SeqP
|
|
|
410
410
|
|
|
411
411
|
/***/ }),
|
|
412
412
|
|
|
413
|
+
/***/ "./node_modules/@datagrok-libraries/bio/src/vd-regions.js":
|
|
414
|
+
/*!****************************************************************!*\
|
|
415
|
+
!*** ./node_modules/@datagrok-libraries/bio/src/vd-regions.js ***!
|
|
416
|
+
\****************************************************************/
|
|
417
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
418
|
+
|
|
419
|
+
"use strict";
|
|
420
|
+
__webpack_require__.r(__webpack_exports__);
|
|
421
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
422
|
+
/* harmony export */ "VdRegion": () => (/* binding */ VdRegion),
|
|
423
|
+
/* harmony export */ "VdRegionType": () => (/* binding */ VdRegionType)
|
|
424
|
+
/* harmony export */ });
|
|
425
|
+
// Data structures for V-Domain regions of antibodies
|
|
426
|
+
var VdRegionType;
|
|
427
|
+
(function (VdRegionType) {
|
|
428
|
+
VdRegionType["Unknown"] = "unknown";
|
|
429
|
+
VdRegionType["FR"] = "framework";
|
|
430
|
+
VdRegionType["CDR"] = "cdr";
|
|
431
|
+
})(VdRegionType || (VdRegionType = {}));
|
|
432
|
+
/** Describes V-DOMAIN (IG and TR) region (of multiple alignment)
|
|
433
|
+
* https://www.imgt.org/IMGTScientificChart/Numbering/IMGTIGVLsuperfamily.html
|
|
434
|
+
*/
|
|
435
|
+
class VdRegion {
|
|
436
|
+
/**
|
|
437
|
+
* start and position are strings because they correspond to position names as column names in ANARCI output
|
|
438
|
+
* @param {VdRegionType} type Type of the region
|
|
439
|
+
* @param {string} name Name of the region
|
|
440
|
+
* @param {string} chain
|
|
441
|
+
* @param {string} order
|
|
442
|
+
* @param {string} positionStartName Region start position (inclusive)
|
|
443
|
+
* @param {string} positionEndName Region end position (inclusive)
|
|
444
|
+
*/
|
|
445
|
+
constructor(type, name, chain, order, positionStartName, positionEndName) {
|
|
446
|
+
this.type = type;
|
|
447
|
+
this.name = name;
|
|
448
|
+
this.chain = chain;
|
|
449
|
+
this.order = order;
|
|
450
|
+
this.positionStartName = positionStartName;
|
|
451
|
+
this.positionEndName = positionEndName;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmQtcmVnaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZkLXJlZ2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBRXJELE1BQU0sQ0FBTixJQUFZLFlBSVg7QUFKRCxXQUFZLFlBQVk7SUFDdEIsbUNBQW1CLENBQUE7SUFDbkIsZ0NBQWdCLENBQUE7SUFDaEIsMkJBQVcsQ0FBQTtBQUNiLENBQUMsRUFKVyxZQUFZLEtBQVosWUFBWSxRQUl2QjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFRbkI7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLElBQWtCLEVBQUUsSUFBWSxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQ3hFLGlCQUF5QixFQUFFLGVBQXVCO1FBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBEYXRhIHN0cnVjdHVyZXMgZm9yIFYtRG9tYWluIHJlZ2lvbnMgb2YgYW50aWJvZGllc1xuXG5leHBvcnQgZW51bSBWZFJlZ2lvblR5cGUge1xuICBVbmtub3duID0gJ3Vua25vd24nLFxuICBGUiA9ICdmcmFtZXdvcmsnLFxuICBDRFIgPSAnY2RyJyxcbn1cblxuLyoqIERlc2NyaWJlcyBWLURPTUFJTiAoSUcgYW5kIFRSKSByZWdpb24gKG9mIG11bHRpcGxlIGFsaWdubWVudClcbiAqIGh0dHBzOi8vd3d3LmltZ3Qub3JnL0lNR1RTY2llbnRpZmljQ2hhcnQvTnVtYmVyaW5nL0lNR1RJR1ZMc3VwZXJmYW1pbHkuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgVmRSZWdpb24ge1xuICB0eXBlOiBWZFJlZ2lvblR5cGU7XG4gIG5hbWU6IHN0cmluZztcbiAgY2hhaW46IHN0cmluZztcbiAgb3JkZXI6IG51bWJlcjtcbiAgcG9zaXRpb25TdGFydE5hbWU6IHN0cmluZztcbiAgcG9zaXRpb25FbmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHN0YXJ0IGFuZCBwb3NpdGlvbiBhcmUgc3RyaW5ncyBiZWNhdXNlIHRoZXkgY29ycmVzcG9uZCB0byBwb3NpdGlvbiBuYW1lcyBhcyBjb2x1bW4gbmFtZXMgaW4gQU5BUkNJIG91dHB1dFxuICAgKiBAcGFyYW0ge1ZkUmVnaW9uVHlwZX0gdHlwZSAgVHlwZSBvZiB0aGUgcmVnaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICBOYW1lIG9mIHRoZSByZWdpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYWluXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb25TdGFydE5hbWUgIFJlZ2lvbiBzdGFydCBwb3NpdGlvbiAoaW5jbHVzaXZlKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb25FbmROYW1lICBSZWdpb24gZW5kIHBvc2l0aW9uIChpbmNsdXNpdmUpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0eXBlOiBWZFJlZ2lvblR5cGUsIG5hbWU6IHN0cmluZywgY2hhaW46IHN0cmluZywgb3JkZXI6IG51bWJlcixcbiAgICBwb3NpdGlvblN0YXJ0TmFtZTogc3RyaW5nLCBwb3NpdGlvbkVuZE5hbWU6IHN0cmluZykge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmNoYWluID0gY2hhaW47XG4gICAgdGhpcy5vcmRlciA9IG9yZGVyO1xuICAgIHRoaXMucG9zaXRpb25TdGFydE5hbWUgPSBwb3NpdGlvblN0YXJ0TmFtZTtcbiAgICB0aGlzLnBvc2l0aW9uRW5kTmFtZSA9IHBvc2l0aW9uRW5kTmFtZTtcbiAgfVxufVxuIl19
|
|
455
|
+
|
|
456
|
+
/***/ }),
|
|
457
|
+
|
|
413
458
|
/***/ "./node_modules/@datagrok-libraries/bio/src/viewers/web-logo.js":
|
|
414
459
|
/*!**********************************************************************!*\
|
|
415
460
|
!*** ./node_modules/@datagrok-libraries/bio/src/viewers/web-logo.js ***!
|
|
@@ -480,6 +525,7 @@ class PositionInfo {
|
|
|
480
525
|
class WebLogo extends datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.JsViewer {
|
|
481
526
|
constructor() {
|
|
482
527
|
super();
|
|
528
|
+
this.viewerId = -1;
|
|
483
529
|
this.initialized = false;
|
|
484
530
|
// private readonly colorScheme: ColorScheme = ColorSchemes[NucleotidesWebLogo.residuesSet];
|
|
485
531
|
this.cp = null;
|
|
@@ -492,6 +538,9 @@ class WebLogo extends datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.JsViewer {
|
|
|
492
538
|
this.positionNames = [];
|
|
493
539
|
this.startPosition = -1;
|
|
494
540
|
this.endPosition = -1;
|
|
541
|
+
this.viewSubs = [];
|
|
542
|
+
this.viewerId = WebLogo.viewerCount;
|
|
543
|
+
WebLogo.viewerCount += 1;
|
|
495
544
|
this.textBaseline = 'top';
|
|
496
545
|
this._positionWidth = this.positionWidth = this.float('positionWidth', 16 /*,
|
|
497
546
|
{editor: 'slider', min: 4, max: 64, postfix: 'px'}*/);
|
|
@@ -540,9 +589,9 @@ class WebLogo extends datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.JsViewer {
|
|
|
540
589
|
return [jPos, null, null];
|
|
541
590
|
return [jPos, monomer, position.freq[monomer]];
|
|
542
591
|
};
|
|
543
|
-
this.canvas.
|
|
544
|
-
};
|
|
545
|
-
this.
|
|
592
|
+
// this.subs.push(rxjs.fromEvent<MouseEvent>(this.canvas, 'mouseover').subscribe((e: MouseEvent) => {
|
|
593
|
+
// }));
|
|
594
|
+
this.viewSubs.push(rxjs__WEBPACK_IMPORTED_MODULE_3__.fromEvent(this.canvas, 'mousemove').subscribe((e) => {
|
|
546
595
|
if (!this.canvas)
|
|
547
596
|
return;
|
|
548
597
|
const args = e;
|
|
@@ -558,7 +607,7 @@ class WebLogo extends datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.JsViewer {
|
|
|
558
607
|
datagrok_api_ui__WEBPACK_IMPORTED_MODULE_0__.tooltip.hide();
|
|
559
608
|
}
|
|
560
609
|
}));
|
|
561
|
-
this.
|
|
610
|
+
this.viewSubs.push(rxjs__WEBPACK_IMPORTED_MODULE_3__.fromEvent(this.canvas, 'mousedown').subscribe((e) => {
|
|
562
611
|
if (!this.canvas || e.button != 0)
|
|
563
612
|
return;
|
|
564
613
|
const args = e;
|
|
@@ -572,7 +621,7 @@ class WebLogo extends datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.JsViewer {
|
|
|
572
621
|
});
|
|
573
622
|
}
|
|
574
623
|
}));
|
|
575
|
-
this.
|
|
624
|
+
this.viewSubs.push(datagrok_api_ui__WEBPACK_IMPORTED_MODULE_0__.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this)));
|
|
576
625
|
this.root.append(this.host);
|
|
577
626
|
// this.root.appendChild(this.slider.root);
|
|
578
627
|
this.render(true);
|
|
@@ -675,8 +724,13 @@ class WebLogo extends datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.JsViewer {
|
|
|
675
724
|
}
|
|
676
725
|
}
|
|
677
726
|
onTableAttached() {
|
|
727
|
+
const _super = Object.create(null, {
|
|
728
|
+
onTableAttached: { get: () => super.onTableAttached }
|
|
729
|
+
});
|
|
678
730
|
return __awaiter(this, void 0, void 0, function* () {
|
|
679
|
-
|
|
731
|
+
const dataFrameTxt = this.dataFrame ? 'data' : 'null';
|
|
732
|
+
console.debug(`bio: WebLogo<${this.viewerId}>.onTableAttached( dataFrame = ${dataFrameTxt} ) start`);
|
|
733
|
+
_super.onTableAttached.call(this);
|
|
680
734
|
this.updateSeqCol();
|
|
681
735
|
if (this.dataFrame !== void 0) {
|
|
682
736
|
this.subs.push(this.dataFrame.selection.onChanged.subscribe((_) => this.render()));
|
|
@@ -686,6 +740,24 @@ class WebLogo extends datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.JsViewer {
|
|
|
686
740
|
}));
|
|
687
741
|
}
|
|
688
742
|
yield this.init();
|
|
743
|
+
console.debug(`bio: WebLogo<${this.viewerId}>.onTableAttached() end`);
|
|
744
|
+
});
|
|
745
|
+
}
|
|
746
|
+
detach() {
|
|
747
|
+
const _super = Object.create(null, {
|
|
748
|
+
detach: { get: () => super.detach }
|
|
749
|
+
});
|
|
750
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
751
|
+
const dataFrameTxt = `${this.dataFrame ? 'data' : 'null'}`;
|
|
752
|
+
console.debug(`bio: WebLogo<${this.viewerId}>.onTableAttached( dataFrame = ${dataFrameTxt} ) start`);
|
|
753
|
+
_super.detach.call(this);
|
|
754
|
+
this.viewSubs.forEach((sub) => sub.unsubscribe());
|
|
755
|
+
this.host.remove();
|
|
756
|
+
this.canvas = undefined;
|
|
757
|
+
this.msgHost = undefined;
|
|
758
|
+
this.host = undefined;
|
|
759
|
+
this.initialized = false;
|
|
760
|
+
console.debug(`bio: WebLogo<${this.viewerId}>.onTableAttached() end`);
|
|
689
761
|
});
|
|
690
762
|
}
|
|
691
763
|
_nullSequence(fillerResidue = 'X') {
|
|
@@ -732,7 +804,7 @@ class WebLogo extends datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.JsViewer {
|
|
|
732
804
|
}
|
|
733
805
|
//#endregion
|
|
734
806
|
const maxHeight = this.canvas.height - this.axisHeight;
|
|
735
|
-
// console.debug(`WebLogo._calculate() maxHeight=${maxHeight}.`);
|
|
807
|
+
// console.debug(`WebLogo<${this.viewerId}>._calculate() maxHeight=${maxHeight}.`);
|
|
736
808
|
//#region Calculate screen
|
|
737
809
|
for (let jPos = 0; jPos < this.Length; jPos++) {
|
|
738
810
|
const freq = this.positions[jPos].freq;
|
|
@@ -1003,6 +1075,7 @@ class WebLogo extends datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.JsViewer {
|
|
|
1003
1075
|
}
|
|
1004
1076
|
}
|
|
1005
1077
|
WebLogo.residuesSet = 'nucleotides';
|
|
1078
|
+
WebLogo.viewerCount = -1;
|
|
1006
1079
|
WebLogo.splitRe = /\[(\w+)\]|(\w)|(-)/g;
|
|
1007
1080
|
/** Only some of the synonyms. These were obtained from the clustered oligopeptide dataset. */
|
|
1008
1081
|
WebLogo.aaSynonyms = {
|
|
@@ -1011,7 +1084,7 @@ WebLogo.aaSynonyms = {
|
|
|
1011
1084
|
'[MeG]': 'G',
|
|
1012
1085
|
'[MeF]': 'F',
|
|
1013
1086
|
};
|
|
1014
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWxvZ28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWItbG9nby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUN2RSxPQUFPLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFDL0YsT0FBTyxFQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBaUJqRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsVUFBUyxLQUFpQjtJQUN4RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMxQyxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDO0FBRUYsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVMsQ0FBUyxFQUFFLENBQVM7SUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxJ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R0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUlNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFXO1FBQzFDLCtCQUErQjtRQUMvQixNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUM1RSxJQUFJLElBQVksQ0FBQztZQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtvQkFDM0IsSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNO29CQUNMLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2lCQUMvRDthQUNGO2lCQUFNO2dCQUNMLElBQUksR0FBRyxDQUFDLENBQUM7YUFDVjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFYixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O0FBL25CYSxtQkFBVyxHQUFHLGFBQWEsQ0FBQztBQTBtQjNCLGVBQU8sR0FBRyxxQkFBcUIsQ0FBQztBQXVCL0MsOEZBQThGO0FBQy9FLGtCQUFVLEdBQStCO0lBQ3RELFNBQVMsRUFBRSxHQUFHO0lBQ2QsT0FBTyxFQUFFLEdBQUc7SUFDWixPQUFPLEVBQUUsR0FBRztJQUNaLE9BQU8sRUFBRSxHQUFHO0NBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1ZlY3Rvcn0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHt2ZWN0b3JMZW5ndGgsIHZlY3RvckRvdFByb2R1Y3R9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zJztcbmltcG9ydCB7QW1pbm9hY2lkcywgQW1pbm9hY2lkc1BhbGV0dGVzfSBmcm9tICcuLi9hbWlub2FjaWRzJztcbmltcG9ydCB7TnVjbGVvdGlkZXMsIE51Y2xlb3RpZGVzUGFsZXR0ZXN9IGZyb20gJy4uL251Y2xlb3RpZGVzJztcbmltcG9ydCB7VW5rbm93blNlcVBhbGV0dGUsIFVua25vd25TZXFQYWxldHRlc30gZnJvbSAnLi4vdW5rbm93bic7XG5pbXBvcnQge1NlcVBhbGV0dGV9IGZyb20gJy4uL3NlcS1wYWxldHRlcyc7XG5cbmRlY2xhcmUgbW9kdWxlICdkYXRhZ3Jvay1hcGkvc3JjL2dyaWQnIHtcbiAgaW50ZXJmYWNlIFJlY3Qge1xuICAgIGNvbnRhaW5zKHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbjtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MQ2FudmFzRWxlbWVudCB7XG4gICAgZ2V0Q3Vyc29yUG9zaXRpb24oZXZlbnQ6IE1vdXNlRXZlbnQpOiBERy5Qb2ludDtcbiAgfVxufVxuXG50eXBlIE1vbm9tZXJGcmVxcyA9IHsgW206IHN0cmluZ106IG51bWJlciB9O1xuXG5IVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuZ2V0Q3Vyc29yUG9zaXRpb24gPSBmdW5jdGlvbihldmVudDogTW91c2VFdmVudCk6IERHLlBvaW50IHtcbiAgY29uc3QgcmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiBuZXcgREcuUG9pbnQoZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wKTtcbn07XG5cbkRHLlJlY3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24oeDogbnVtYmVyLCB5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRoaXMubGVmdCA8PSB4ICYmIHggPD0gdGhpcy5yaWdodCAmJiB0aGlzLnRvcCA8PSB5ICYmIHkgPD0gdGhpcy5ib3R0b207XG59O1xuXG5leHBvcnQgY2xhc3MgUG9zaXRpb25Nb25vbWVySW5mbyB7XG4gIC8qKiBTZXF1ZW5jZXMgY291bnQgd2l0aCBtb25vbWVyIGluIHBvc2l0aW9uXG4gICAqL1xuICBjb3VudDogbnVtYmVyO1xuXG4gIC8qKiBSZW1lbWJlciBzY3JlZW4gY29vcmRzIHJlY3RcbiAgICovXG4gIGJvdW5kczogREcuUmVjdDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLmJvdW5kcyA9IG5ldyBERy5SZWN0KDAsIDAsIDAsIDApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQb3NpdGlvbkluZm8ge1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBmcmVxOiB7IFttOiBzdHJpbmddOiBQb3NpdGlvbk1vbm9tZXJJbmZvIH07XG4gIHJvd0NvdW50OiBudW1iZXI7XG5cbiAgLyoqIGZyZXEgPSB7fSwgcm93Q291bnQgPSAwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgcG9zaXRpb24gKCcxMTFBJywgJzExMS4xJywgZXRjKVxuICAgKi9cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmZyZXEgPSB7fTtcbiAgICB0aGlzLnJvd0NvdW50ID0gMDtcbiAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBXZWJMb2dvIGV4dGVuZHMgREcuSnNWaWV3ZXIge1xuICBwdWJsaWMgc3RhdGljIHJlc2lkdWVzU2V0ID0gJ251Y2xlb3RpZGVzJztcblxuICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gcHJpdmF0ZSByZWFkb25seSBjb2xvclNjaGVtZTogQ29sb3JTY2hlbWUgPSBDb2xvclNjaGVtZXNbTnVjbGVvdGlkZXNXZWJMb2dvLnJlc2lkdWVzU2V0XTtcbiAgcHJvdGVjdGVkIGNwOiBTZXFQYWxldHRlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBob3N0PzogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgbXNnSG9zdD86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIGNhbnZhcz86IEhUTUxDYW52YXNFbGVtZW50O1xuICBwcml2YXRlIHNsaWRlcj86IERHLlJhbmdlU2xpZGVyO1xuICBwcml2YXRlIHRleHRCYXNlbGluZTogQ2FudmFzVGV4dEJhc2VsaW5lO1xuXG4gIHByaXZhdGUgYXhpc0hlaWdodDogbnVtYmVyID0gMTI7XG5cbiAgcHJpdmF0ZSBzZXFDb2w6IERHLkNvbHVtbjxzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG4gIC8vIHByaXZhdGUgbWF4TGVuZ3RoOiBudW1iZXIgPSAxMDA7XG4gIHByaXZhdGUgcG9zaXRpb25zOiBQb3NpdGlvbkluZm9bXSA9IFtdO1xuXG4gIHByaXZhdGUgcm93c01hc2tlZDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSByb3dzTnVsbDogbnVtYmVyID0gMDtcblxuICAvLyBWaWV3ZXIncyBwcm9wZXJ0aWVzIChsaWtlbHkgdGhleSBzaG91bGQgYmUgcHVibGljIHNvIHRoYXQgdGhleSBjYW4gYmUgc2V0IG91dHNpZGUpXG4gIHByaXZhdGUgX3Bvc2l0aW9uV2lkdGg6IG51bWJlcjtcbiAgcHVibGljIHBvc2l0aW9uV2lkdGg6IG51bWJlcjtcbiAgcHVibGljIG1pbkhlaWdodDogbnVtYmVyO1xuICBwdWJsaWMgbWF4SGVpZ2h0OiBudW1iZXI7XG4gIHB1YmxpYyBjb25zaWRlck51bGxTZXF1ZW5jZXM6IGJvb2xlYW47XG4gIHB1YmxpYyBzZXF1ZW5jZUNvbHVtbk5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBzdGFydFBvc2l0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIGVuZFBvc2l0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIGZpeFdpZHRoOiBib29sZWFuO1xuICBwdWJsaWMgdmVydGljYWxBbGlnbm1lbnQ6IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBob3Jpem9udGFsQWxpZ25tZW50OiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaWMgZml0QXJlYTogYm9vbGVhbjtcbiAgcHVibGljIHNocmlua0VtcHR5VGFpbDogYm9vbGVhbjtcblxuICBwcml2YXRlIHBvc2l0aW9uTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSBzdGFydFBvc2l0aW9uOiBudW1iZXIgPSAtMTtcblxuICBwcml2YXRlIGVuZFBvc2l0aW9uOiBudW1iZXIgPSAtMTtcblxuICAvKiogRm9yIHN0YXJ0UG9zaXRpb24gZXF1YWxzIHRvIGVuZFBvc2l0aW9uIExlbmd0aCBpcyAxICovXG4gIHByaXZhdGUgZ2V0IExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UG9zaXRpb24gPD0gdGhpcy5lbmRQb3NpdGlvbiA/IHRoaXMuZW5kUG9zaXRpb24gLSB0aGlzLnN0YXJ0UG9zaXRpb24gKyAxIDogMDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnRleHRCYXNlbGluZSA9ICd0b3AnO1xuXG4gICAgdGhpcy5fcG9zaXRpb25XaWR0aCA9IHRoaXMucG9zaXRpb25XaWR0aCA9IHRoaXMuZmxvYXQoJ3Bvc2l0aW9uV2lkdGgnLCAxNi8qLFxuICAgICAge2VkaXRvcjogJ3NsaWRlcicsIG1pbjogNCwgbWF4OiA2NCwgcG9zdGZpeDogJ3B4J30qLyk7XG4gICAgdGhpcy5taW5IZWlnaHQgPSB0aGlzLmZsb2F0KCdtaW5IZWlnaHQnLCA1MC8qLFxuICAgICAge2VkaXRvcjogJ3NsaWRlcicsIG1pbjogMjUsIG1heDogMjUwLCBwb3N0Zml4OiAncHgnfSovKTtcbiAgICB0aGlzLm1heEhlaWdodCA9IHRoaXMuZmxvYXQoJ21heEhlaWdodCcsIDEwMC8qLFxuICAgICAge2VkaXRvcjogJ3NsaWRlcicsIG1pbjogMjUsIG1heDogNTAwLCBwb3N0Zml4OiAncHgnfSovKTtcblxuICAgIHRoaXMuY29uc2lkZXJOdWxsU2VxdWVuY2VzID0gdGhpcy5ib29sKCdjb25zaWRlck51bGxTZXF1ZW5jZXMnLCBmYWxzZSk7XG4gICAgdGhpcy5zZXF1ZW5jZUNvbHVtbk5hbWUgPSB0aGlzLnN0cmluZygnc2VxdWVuY2VDb2x1bW5OYW1lJywgbnVsbCk7XG5cbiAgICB0aGlzLnN0YXJ0UG9zaXRpb25OYW1lID0gdGhpcy5zdHJpbmcoJ3N0YXJ0UG9zaXRpb25OYW1lJywgbnVsbCk7XG4gICAgdGhpcy5lbmRQb3NpdGlvbk5hbWUgPSB0aGlzLnN0cmluZygnZW5kUG9zaXRpb25OYW1lJywgbnVsbCk7XG5cbiAgICB0aGlzLmZpeFdpZHRoID0gdGhpcy5ib29sKCdmaXhXaWR0aCcsIGZhbHNlKTtcblxuICAgIHRoaXMudmVydGljYWxBbGlnbm1lbnQgPSB0aGlzLnN0cmluZygndmVydGljYWxBbGlnbm1lbnQnLCAnbWlkZGxlJyxcbiAgICAgIHtjaG9pY2VzOiBbJ3RvcCcsICdtaWRkbGUnLCAnYm90dG9tJ119KTtcbiAgICB0aGlzLmhvcml6b250YWxBbGlnbm1lbnQgPSB0aGlzLnN0cmluZygnaG9yaXpvbnRhbEFsaWdubWVudCcsICdjZW50ZXInLFxuICAgICAge2Nob2ljZXM6IFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXX0pO1xuICAgIHRoaXMuZml0QXJlYSA9IHRoaXMuYm9vbCgnZml0QXJlYScsIHRydWUpO1xuICAgIHRoaXMuc2hyaW5rRW1wdHlUYWlsID0gdGhpcy5ib29sKCdzaHJpbmtFbXB0eVRhaWwnLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgY29uc29sZS5lcnJvcignV2ViTG9nbyBzZWNvbmQgaW5pdGlhbGl6YXRpb24hJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5oZWxwVXJsID0gJy9oZWxwL3Zpc3VhbGl6ZS92aWV3ZXJzL3dlYi1sb2dvLm1kJztcblxuICAgIHRoaXMubXNnSG9zdCA9IHVpLmRpdignTm8gbWVzc2FnZScpO1xuICAgIHRoaXMubXNnSG9zdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgdGhpcy5jYW52YXMgPSB1aS5jYW52YXMoKTtcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9ICcxMDAlJztcblxuICAgIHRoaXMuaG9zdCA9IHVpLmRpdihbdGhpcy5tc2dIb3N0LCB0aGlzLmNhbnZhc10pO1xuXG4gICAgLy8gdGhpcy5zbGlkZXIgPSB1aS5yYW5nZVNsaWRlcigwLCAyMCwgMiwgNSk7XG4gICAgLy8gdGhpcy5zbGlkZXIucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAvLyB0aGlzLnNsaWRlci5yb290LnN0eWxlLmhlaWdodCA9ICcxMnB4JztcblxuICAgIGNvbnN0IGdldE1vbm9tZXIgPSAocDogREcuUG9pbnQpOiBbbnVtYmVyLCBzdHJpbmcgfCBudWxsLCBQb3NpdGlvbk1vbm9tZXJJbmZvIHwgbnVsbF0gPT4ge1xuICAgICAgY29uc3QgalBvcyA9IE1hdGguZmxvb3IocC54IC8gdGhpcy5fcG9zaXRpb25XaWR0aCk7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zW2pQb3NdO1xuXG4gICAgICBpZiAocG9zaXRpb24gPT09IHZvaWQgMClcbiAgICAgICAgcmV0dXJuIFtqUG9zLCBudWxsLCBudWxsXTtcblxuICAgICAgY29uc3QgbW9ub21lcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gT2JqZWN0LmtleXMocG9zaXRpb24uZnJlcSlcbiAgICAgICAgLmZpbmQoKG0pID0+IHBvc2l0aW9uLmZyZXFbbV0uYm91bmRzLmNvbnRhaW5zKHAueCwgcC55KSk7XG4gICAgICBpZiAobW9ub21lciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gW2pQb3MsIG51bGwsIG51bGxdO1xuXG4gICAgICByZXR1cm4gW2pQb3MsIG1vbm9tZXIsIHBvc2l0aW9uLmZyZXFbbW9ub21lcl1dO1xuICAgIH07XG5cbiAgICB0aGlzLmNhbnZhcy5vbm1vdXNlb3ZlciA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG5cbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzLnB1c2gocnhqcy5mcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jYW52YXMpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgY29uc3QgYXJncyA9IGUgYXMgTW91c2VFdmVudDtcbiAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIodGhpcy5jYW52YXMuZ2V0Q3Vyc29yUG9zaXRpb24oYXJncykpO1xuXG4gICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgbW9ub21lcikge1xuICAgICAgICB1aS50b29sdGlwLnNob3dSb3dHcm91cCh0aGlzLmRhdGFGcmFtZSwgKGlSb3cpID0+IHtcbiAgICAgICAgICBjb25zdCBzZXEgPSB0aGlzLnNlcUNvbCEuZ2V0KGlSb3cpO1xuICAgICAgICAgIGNvbnN0IHNlcU0gPSBzZXEgPyBXZWJMb2dvLnNwbGl0U2VxVG9Nb25vbWVycyhzZXEpW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdIDogbnVsbDtcbiAgICAgICAgICByZXR1cm4gc2VxTSA9PT0gbW9ub21lciAmJiB0aGlzLmRhdGFGcmFtZS5maWx0ZXIuZ2V0KGlSb3cpO1xuICAgICAgICB9LCBhcmdzLnggKyAxNiwgYXJncy55ICsgMTYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdWkudG9vbHRpcC5oaWRlKCk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdWJzLnB1c2gocnhqcy5mcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZWRvd24nKS5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgZS5idXR0b24gIT0gMClcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjb25zdCBhcmdzID0gZSBhcyBNb3VzZUV2ZW50O1xuICAgICAgY29uc3QgW2pQb3MsIG1vbm9tZXJdID0gZ2V0TW9ub21lcih0aGlzLmNhbnZhcy5nZXRDdXJzb3JQb3NpdGlvbihhcmdzKSk7XG5cbiAgICAgIC8vIHByZXZlbnRzIGRlc2VsZWN0IGFsbCByb3dzIGlmIHdlIG1pc3MgbW9ub21lciBib3VuZHNcbiAgICAgIGlmICh0aGlzLmRhdGFGcmFtZSAmJiB0aGlzLnNlcUNvbCAmJiBtb25vbWVyKSB7XG4gICAgICAgIHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5pbml0KChpUm93KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VxID0gdGhpcy5zZXFDb2whLmdldChpUm93KTtcbiAgICAgICAgICBjb25zdCBzZXFNID0gc2VxID8gV2ViTG9nby5zcGxpdFNlcVRvTW9ub21lcnMoc2VxKVt0aGlzLnN0YXJ0UG9zaXRpb24gKyBqUG9zXSA6IG51bGw7XG4gICAgICAgICAgcmV0dXJuIHNlcU0gPT09IG1vbm9tZXIgJiYgdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldChpUm93KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdWJzLnB1c2godWkub25TaXplQ2hhbmdlZCh0aGlzLnJvb3QpLnN1YnNjcmliZSh0aGlzLnJvb3RPblNpemVDaGFuZ2VkLmJpbmQodGhpcykpKTtcblxuICAgIHRoaXMucm9vdC5hcHBlbmQodGhpcy5ob3N0KTtcbiAgICAvLyB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5zbGlkZXIucm9vdCk7XG5cbiAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcm9vdE9uU2l6ZUNoYW5nZWQoYXJnczogYW55KSB7XG4gICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG5cbiAgICAvLyBjb25zb2xlLmRlYnVnKGBXZWJMb2dvLm9uUm9vdFNpemVDaGFuZ2VkKCkgYCArXG4gICAgLy8gICBgcm9vdC53aWR0aD0ke3RoaXMucm9vdC5jbGllbnRXaWR0aH0sIHJvb3QuaGVpZ2h0PSR7dGhpcy5yb290LmNsaWVudEhlaWdodH0sIGAgK1xuICAgIC8vICAgYGNhbnZhcy53aWR0aD0ke3RoaXMuY2FudmFzLndpZHRofSwgY2FudmFzLmhlaWdodD0ke3RoaXMuY2FudmFzLmhlaWdodH0gLmApO1xuICB9XG5cbiAgLyoqIEFzc2lnbnMge0BsaW5rIHNlcUNvbH0gYW5kIHtAbGluayBjcH0gYmFzZWQgb24ge0BsaW5rIHNlcXVlbmNlQ29sdW1uTmFtZX0gYW5kIGNhbGxzIHtAbGluayByZW5kZXJ9KCkuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVNlcUNvbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhRnJhbWUpIHtcbiAgICAgIHRoaXMuc2VxQ29sID0gdGhpcy5zZXF1ZW5jZUNvbHVtbk5hbWUgPyB0aGlzLmRhdGFGcmFtZS5jb2wodGhpcy5zZXF1ZW5jZUNvbHVtbk5hbWUpIDogbnVsbDtcbiAgICAgIGlmICh0aGlzLnNlcUNvbCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2VxQ29sID0gdGhpcy5waWNrVXBTZXFDb2wodGhpcy5kYXRhRnJhbWUpO1xuICAgICAgICB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSA9IHRoaXMuc2VxQ29sID8gdGhpcy5zZXFDb2wubmFtZSA6IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZXFDb2wpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgdGhpcy5jcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZSh0aGlzLnNlcUNvbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zdGFydFBvc2l0aW9uID0gLTE7XG4gICAgICAgIHRoaXMuZW5kUG9zaXRpb24gPSAtMTtcbiAgICAgICAgdGhpcy5jcCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VxQ29sKVxuICAgICAgcmV0dXJuO1xuXG4gICAgbGV0IGNhdGVnb3JpZXM6IChzdHJpbmcgfCBudWxsKSBbXTtcbiAgICBpZiAodGhpcy5zaHJpbmtFbXB0eVRhaWwpIHtcbiAgICAgIGNvbnN0IGluZGljZXM6IEludDMyQXJyYXkgPSB0aGlzLmRhdGFGcmFtZS5maWx0ZXIuZ2V0U2VsZWN0ZWRJbmRleGVzKCk7XG4gICAgICBjYXRlZ29yaWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KFxuICAgICAgICBBcnJheS5mcm9tKEFycmF5KGluZGljZXMubGVuZ3RoKS5rZXlzKCkpLm1hcCgoaTogbnVtYmVyKSA9PiB0aGlzLnNlcUNvbCEuZ2V0KGluZGljZXNbaV0pKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXRlZ29yaWVzID0gdGhpcy5zZXFDb2wuY2F0ZWdvcmllcztcbiAgICB9XG4gICAgY29uc3QgbWF4TGVuZ3RoID0gY2F0ZWdvcmllcy5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4uY2F0ZWdvcmllcy5tYXAoXG4gICAgICAocykgPT4gcyAhPT0gbnVsbCA/IFdlYkxvZ28uc3BsaXRTZXFUb01vbm9tZXJzKHMpLmxlbmd0aCA6IDApKSA6IDA7XG5cbiAgICAvLyBHZXQgcG9zaXRpb24gbmFtZXMgZnJvbSBkYXRhIGNvbHVtbiB0YWcgJ3Bvc2l0aW9uTmFtZXMnXG4gICAgY29uc3QgcG9zaXRpb25OYW1lc1R4dCA9IHRoaXMuc2VxQ29sLmdldFRhZygncG9zaXRpb25OYW1lcycpO1xuICAgIC8vIEZhbGxiYWNrIGlmICdwb3NpdGlvbk5hbWVzJyB0YWcgaXMgbm90IHByb3ZpZGVkXG4gICAgdGhpcy5wb3NpdGlvbk5hbWVzID0gcG9zaXRpb25OYW1lc1R4dCA/IHBvc2l0aW9uTmFtZXNUeHQuc3BsaXQoJywgJykubWFwKChuKSA9PiBuLnRyaW0oKSkgOlxuICAgICAgWy4uLkFycmF5KG1heExlbmd0aCkua2V5cygpXS5tYXAoKGpQb3MpID0+IGAke2pQb3MgKyAxfWApO1xuXG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gKHRoaXMuc3RhcnRQb3NpdGlvbk5hbWUgJiYgdGhpcy5wb3NpdGlvbk5hbWVzICYmXG4gICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5jbHVkZXModGhpcy5zdGFydFBvc2l0aW9uTmFtZSkpID9cbiAgICAgIHRoaXMucG9zaXRpb25OYW1lcy5pbmRleE9mKHRoaXMuc3RhcnRQb3NpdGlvbk5hbWUpIDogMDtcbiAgICB0aGlzLmVuZFBvc2l0aW9uID0gKHRoaXMuZW5kUG9zaXRpb25OYW1lICYmIHRoaXMucG9zaXRpb25OYW1lcyAmJlxuICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzLmluY2x1ZGVzKHRoaXMuZW5kUG9zaXRpb25OYW1lKSkgP1xuICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzLmluZGV4T2YodGhpcy5lbmRQb3NpdGlvbk5hbWUpIDogKG1heExlbmd0aCAtIDEpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5OiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgIC8vIGNvbnNvbGUuZGVidWcoYFdlYkxvZ28ub25Qcm9wZXJ0eUNoYW5nZWQoICR7cHJvcGVydHkubmFtZX0gPSAnJyB9KWApO1xuICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5KTtcblxuICAgIHN3aXRjaCAocHJvcGVydHkubmFtZSkge1xuICAgIGNhc2UgJ2NvbnNpZGVyTnVsbFNlcXVlbmNlcyc6XG4gICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlcXVlbmNlQ29sdW1uTmFtZSc6XG4gICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc3RhcnRQb3NpdGlvbk5hbWUnOlxuICAgICAgdGhpcy51cGRhdGVTZXFDb2woKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZFBvc2l0aW9uTmFtZSc6XG4gICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncG9zaXRpb25XaWR0aCc6XG4gICAgICB0aGlzLl9wb3NpdGlvbldpZHRoID0gdGhpcy5wb3NpdGlvbldpZHRoO1xuICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdtaW5IZWlnaHQnOlxuICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdtYXhIZWlnaHQnOlxuICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaXhXaWR0aCc6XG4gICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZlcnRpY2FsQWxpZ25tZW50JzpcbiAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaG9yaXpvbnRhbEFsaWdubWVudCc6XG4gICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpdEFyZWEnOlxuICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzaHJpbmtFbXB0eVRhaWwnOlxuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnMoKTtcbiAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9uVGFibGVBdHRhY2hlZCgpIHtcbiAgICAvLyBjb25zb2xlLmRlYnVnKGBXZWJMb2dvLm9uVGFibGVBdHRhY2hlZCggZGF0YUZyYW1lID0gJHt0aGlzLmRhdGFGcmFtZSA/ICdkYXRhJyA6ICdudWxsJ30gKWApO1xuICAgIHRoaXMudXBkYXRlU2VxQ29sKCk7XG5cbiAgICBpZiAodGhpcy5kYXRhRnJhbWUgIT09IHZvaWQgMCkge1xuICAgICAgdGhpcy5zdWJzLnB1c2godGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKF8pID0+IHRoaXMucmVuZGVyKCkpKTtcbiAgICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuZGF0YUZyYW1lLmZpbHRlci5vbkNoYW5nZWQuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zKCk7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX251bGxTZXF1ZW5jZShmaWxsZXJSZXNpZHVlID0gJ1gnKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jb25zaWRlck51bGxTZXF1ZW5jZXMpXG4gICAgICByZXR1cm4gbmV3IEFycmF5KHRoaXMuTGVuZ3RoKS5maWxsKGZpbGxlclJlc2lkdWUpLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jYWxjdWxhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmNhbnZhcyB8fCAhdGhpcy5ob3N0IHx8ICF0aGlzLnNlcUNvbCB8fCAhdGhpcy5kYXRhRnJhbWUpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLmNhbGNTaXplKCk7XG5cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBBcnJheSh0aGlzLkxlbmd0aCk7XG4gICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICBjb25zdCBwb3NOYW1lOiBzdHJpbmcgPSB0aGlzLnBvc2l0aW9uTmFtZXNbdGhpcy5zdGFydFBvc2l0aW9uICsgalBvc107XG4gICAgICB0aGlzLnBvc2l0aW9uc1tqUG9zXSA9IG5ldyBQb3NpdGlvbkluZm8ocG9zTmFtZSk7XG4gICAgfVxuXG4gICAgLy8gMjAyMi0wNS0wNSBhc2thbGtpbiBpbnN0cnVjdGVkIHRvIHNob3cgV2ViTG9nbyBiYXNlZCBvbiBmaWx0ZXIgKG5vdCBzZWxlY3Rpb24pXG4gICAgY29uc3QgaW5kaWNlcyA9IHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAvLyBjb25zdCBpbmRpY2VzID0gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnRydWVDb3VudCA+IDAgPyB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRJbmRleGVzKCkgOlxuICAgIC8vICAgdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldFNlbGVjdGVkSW5kZXhlcygpO1xuXG4gICAgdGhpcy5yb3dzTWFza2VkID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgdGhpcy5yb3dzTnVsbCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGkgb2YgaW5kaWNlcykge1xuICAgICAgbGV0IHM6IHN0cmluZyA9IDxzdHJpbmc+KHRoaXMuc2VxQ29sLmdldChpKSk7XG5cbiAgICAgIGlmICghcykge1xuICAgICAgICBzID0gdGhpcy5fbnVsbFNlcXVlbmNlKCk7XG4gICAgICAgICsrdGhpcy5yb3dzTnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VxTTogc3RyaW5nW10gPSBXZWJMb2dvLnNwbGl0U2VxVG9Nb25vbWVycyhzKTtcbiAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICBjb25zdCBwbUluZm8gPSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxO1xuICAgICAgICBjb25zdCBtOiBzdHJpbmcgPSBzZXFNW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdIHx8ICctJztcbiAgICAgICAgaWYgKCEobSBpbiBwbUluZm8pKVxuICAgICAgICAgIHBtSW5mb1ttXSA9IG5ldyBQb3NpdGlvbk1vbm9tZXJJbmZvKCk7XG4gICAgICAgIHBtSW5mb1ttXS5jb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vI3JlZ2lvbiBQb2xpc2ggZnJlcSBjb3VudHNcbiAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgIC8vIGRlbGV0ZSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxWyctJ107XG5cbiAgICAgIHRoaXMucG9zaXRpb25zW2pQb3NdLnJvd0NvdW50ID0gMDtcbiAgICAgIGZvciAoY29uc3QgbSBpbiB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxKVxuICAgICAgICB0aGlzLnBvc2l0aW9uc1tqUG9zXS5yb3dDb3VudCArPSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxW21dLmNvdW50O1xuICAgIH1cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAtIHRoaXMuYXhpc0hlaWdodDtcbiAgICAvLyBjb25zb2xlLmRlYnVnKGBXZWJMb2dvLl9jYWxjdWxhdGUoKSBtYXhIZWlnaHQ9JHttYXhIZWlnaHR9LmApO1xuXG4gICAgLy8jcmVnaW9uIENhbGN1bGF0ZSBzY3JlZW5cbiAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgIGNvbnN0IGZyZXE6IHsgW2M6IHN0cmluZ106IFBvc2l0aW9uTW9ub21lckluZm8gfSA9IHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXE7XG4gICAgICBjb25zdCByb3dDb3VudCA9IHRoaXMucG9zaXRpb25zW2pQb3NdLnJvd0NvdW50O1xuXG4gICAgICBsZXQgeTogbnVtYmVyID0gdGhpcy5heGlzSGVpZ2h0O1xuXG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoZnJlcSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYVswXSAhPT0gJy0nICYmIGJbMF0gIT09ICctJylcbiAgICAgICAgICByZXR1cm4gYlsxXS5jb3VudCAtIGFbMV0uY291bnQ7XG4gICAgICAgIGVsc2UgaWYgKGFbMF0gPT09ICctJyAmJiBiWzBdID09PSAnLScpXG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgaWYgKGFbMF0gPT09ICctJylcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGVsc2UgLyogKGJbMF0gPT09ICctJykgKi9cbiAgICAgICAgICByZXR1cm4gKzE7XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBjb25zdCBwbUluZm86IFBvc2l0aW9uTW9ub21lckluZm8gPSBlbnRyeVsxXTtcbiAgICAgICAgLy8gY29uc3QgbTogc3RyaW5nID0gZW50cnlbMF07XG4gICAgICAgIGNvbnN0IGg6IG51bWJlciA9IG1heEhlaWdodCAqIHBtSW5mby5jb3VudCAvIHJvd0NvdW50O1xuXG4gICAgICAgIHBtSW5mby5ib3VuZHMgPSBuZXcgREcuUmVjdChqUG9zICogdGhpcy5fcG9zaXRpb25XaWR0aCwgeSwgdGhpcy5fcG9zaXRpb25XaWR0aCwgaCk7XG4gICAgICAgIHkgKz0gaDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG4gIH1cblxuICAvLyByZWZsZWN0IGNoYW5nZXMgbWFkZSB0byBmaWx0ZXIvc2VsZWN0aW9uXG4gIHJlbmRlcihyZWNhbGMgPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMubXNnSG9zdCkge1xuICAgICAgaWYgKHRoaXMuc2VxQ29sICYmICF0aGlzLmNwKSB7XG4gICAgICAgIHRoaXMubXNnSG9zdCEuaW5uZXJUZXh0ID0gYFVua25vd24gcGFsZXR0ZSAoY29sdW1uIHNlbVR5cGU6ICcke3RoaXMuc2VxQ29sLnNlbVR5cGV9JykuYDtcbiAgICAgICAgdGhpcy5tc2dIb3N0IS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1zZ0hvc3QhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhbnZhcyB8fCAhdGhpcy5zZXFDb2wgfHwgIXRoaXMuZGF0YUZyYW1lIHx8ICF0aGlzLmNwKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgZyA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgaWYgKCFnKSByZXR1cm47XG5cbiAgICBpZiAocmVjYWxjKVxuICAgICAgdGhpcy5fY2FsY3VsYXRlKCk7XG5cbiAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgZy5maWxsU3R5bGUgPSAnd2hpdGUnO1xuICAgIGcuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gICAgZy50ZXh0QmFzZWxpbmUgPSB0aGlzLnRleHRCYXNlbGluZTtcblxuICAgIC8vIFByZXZlbnRzIGRpdmlzaW9uIGJ5IHplcm8gb24gTGVuZ3RoID0gMFxuICAgIGlmICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IC0xIHx8IHRoaXMuZW5kUG9zaXRpb24gPT09IC0xKVxuICAgICAgcmV0dXJuO1xuXG4gICAgLy8jcmVnaW9uIFBsb3QgcG9zaXRpb25OYW1lc1xuICAgIGcucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICBnLmZpbGxTdHlsZSA9ICdibGFjayc7XG4gICAgZy50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICBnLmZvbnQgPSAnMTBweCBSb2JvdG8sIFJvYm90byBMb2NhbCwgc2Fucy1zZXJpZic7XG4gICAgY29uc3QgcG9zTmFtZU1heFdpZHRoID0gTWF0aC5tYXgoLi4udGhpcy5wb3NpdGlvbnMubWFwKChwb3MpID0+IGcubWVhc3VyZVRleHQocG9zLm5hbWUpLndpZHRoKSk7XG4gICAgY29uc3QgaFNjYWxlID0gcG9zTmFtZU1heFdpZHRoIDwgKHRoaXMuX3Bvc2l0aW9uV2lkdGggLSAyKSA/IDEgOiAodGhpcy5fcG9zaXRpb25XaWR0aCAtIDIpIC8gcG9zTmFtZU1heFdpZHRoO1xuXG4gICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICBjb25zdCBwb3M6IFBvc2l0aW9uSW5mbyA9IHRoaXMucG9zaXRpb25zW2pQb3NdO1xuICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgZy5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIGhTY2FsZSwgMCwgMCwgMSxcbiAgICAgICAgalBvcyAqIHRoaXMuX3Bvc2l0aW9uV2lkdGggKyB0aGlzLl9wb3NpdGlvbldpZHRoIC8gMiwgMCk7XG4gICAgICBnLmZpbGxUZXh0KHBvcy5uYW1lLCAwLCAwKTtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uIFBsb3QgcG9zaXRpb25OYW1lc1xuXG4gICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICBmb3IgKGNvbnN0IFttb25vbWVyLCBwbUluZm9dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXEpKSB7XG4gICAgICAgIGlmIChtb25vbWVyICE9PSAnLScpIHtcbiAgICAgICAgICBjb25zdCBiID0gcG1JbmZvLmJvdW5kcztcblxuICAgICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9ICcxNnB4IFJvYm90bywgUm9ib3RvIExvY2FsLCBzYW5zLXNlcmlmJztcbiAgICAgICAgICAvLyBIYWNrcyB0byBzY2FsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyB0byB0YXJnZXQgcmVjdGFuZ2xlXG4gICAgICAgICAgY29uc3QgdXBwZXJjYXNlTGV0dGVyQXNjZW50ID0gMC4yNTtcbiAgICAgICAgICBjb25zdCB1cHBlcmNhc2VMZXR0ZXJIZWlnaHQgPSAxMi4yO1xuXG4gICAgICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAnbGlnaHRncmF5JztcbiAgICAgICAgICBnLmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgZy5yZWN0KGIubGVmdCwgYi50b3AsIGIud2lkdGgsIGIuaGVpZ2h0KTtcbiAgICAgICAgICBnLmZpbGxTdHlsZSA9IHRoaXMuY3AuZ2V0KG1vbm9tZXIpID8/IHRoaXMuY3AuZ2V0KCdvdGhlcicpO1xuICAgICAgICAgIGcudGV4dEFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgIGcuZm9udCA9IGZvbnRTdHlsZTtcbiAgICAgICAgICAvL2cuZmlsbFJlY3QoYi5sZWZ0LCBiLnRvcCwgYi53aWR0aCwgYi5oZWlnaHQpO1xuICAgICAgICAgIGNvbnN0IG1UbTogVGV4dE1ldHJpY3MgPSBnLm1lYXN1cmVUZXh0KG1vbm9tZXIpO1xuXG4gICAgICAgICAgLy8gaWYgKG1NLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50ICE9IDApXG4gICAgICAgICAgLy8gICBjb25zb2xlLmRlYnVnKGBtOiAke219LCBtTS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudDogJHttTS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudH1gKTtcblxuICAgICAgICAgIGcuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgYi53aWR0aCAvIG1UbS53aWR0aCwgMCwgMCwgYi5oZWlnaHQgLyB1cHBlcmNhc2VMZXR0ZXJIZWlnaHQsXG4gICAgICAgICAgICBiLmxlZnQsIGIudG9wKTtcbiAgICAgICAgICBnLmZpbGxUZXh0KG1vbm9tZXIsIDAsIC11cHBlcmNhc2VMZXR0ZXJBc2NlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxjU2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FudmFzIHx8ICF0aGlzLmhvc3QpXG4gICAgICByZXR1cm47XG5cbiAgICBsZXQgd2lkdGg6IG51bWJlciA9IHRoaXMuTGVuZ3RoICogdGhpcy5wb3NpdGlvbldpZHRoO1xuICAgIGxldCBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLm1heEhlaWdodCwgTWF0aC5tYXgodGhpcy5taW5IZWlnaHQsIHRoaXMucm9vdC5jbGllbnRIZWlnaHQpKTtcblxuICAgIGlmICh0aGlzLmZpdEFyZWEpIHtcbiAgICAgIGNvbnN0IHhTY2FsZTogbnVtYmVyID0gdGhpcy5yb290LmNsaWVudEhlaWdodCAvIGhlaWdodDtcbiAgICAgIGNvbnN0IHlTY2FsZTogbnVtYmVyID0gdGhpcy5yb290LmNsaWVudFdpZHRoIC8gd2lkdGg7XG4gICAgICBjb25zdCBzY2FsZSA9IE1hdGgubWF4KDEsIE1hdGgubWluKHhTY2FsZSwgeVNjYWxlKSk7XG4gICAgICB3aWR0aCA9IHdpZHRoICogc2NhbGU7XG4gICAgICBoZWlnaHQgPSBoZWlnaHQgKiBzY2FsZTtcbiAgICAgIHRoaXMuX3Bvc2l0aW9uV2lkdGggPSB0aGlzLnBvc2l0aW9uV2lkdGggKiBzY2FsZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuXG4gICAgLy8gY29uc3QgY2FudmFzSGVpZ2h0OiBudW1iZXIgPSB3aWR0aCA+IHRoaXMucm9vdC5jbGllbnRXaWR0aCA/IGhlaWdodCAtIDggOiBoZWlnaHQ7XG4gICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLCBgJHtoZWlnaHR9cHhgKTtcbiAgICBjb25zdCBjYW52YXNIZWlnaHQ6IG51bWJlciA9IHRoaXMuaG9zdC5jbGllbnRIZWlnaHQ7XG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICAgIHRoaXMuY2FudmFzLnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLCBgJHtjYW52YXNIZWlnaHR9cHhgKTtcblxuICAgIC8vIEFkanVzdCBob3N0IGFuZCByb290IHdpZHRoXG4gICAgaWYgKHRoaXMuZml4V2lkdGgpIHtcbiAgICAgIC8vIGZ1bGwgd2lkdGggZm9yIGNhbnZhcyBob3N0IGFuZCByb290XG4gICAgICB0aGlzLnJvb3Quc3R5bGUud2lkdGggPSB0aGlzLmhvc3Quc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgICB0aGlzLnJvb3Quc3R5bGUuaGVpZ2h0IC8qPSB0aGlzLmhvc3Quc3R5bGUuaGVpZ2h0Ki8gPSBgJHtoZWlnaHR9cHhgO1xuICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFsbG93IHNjcm9sbCBjYW52YXMgaW4gcm9vdFxuICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgdGhpcy5ob3N0LnN0eWxlLm92ZXJmbG93WCA9ICdhdXRvIWltcG9ydGFudCc7XG4gICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywgbnVsbCk7XG5cbiAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgndGV4dC1hbGlnbicsIHRoaXMuaG9yaXpvbnRhbEFsaWdubWVudCk7XG5cbiAgICAgIC8vIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgbGV0IGhvc3RUb3BNYXJnaW4gPSAwO1xuICAgICAgc3dpdGNoICh0aGlzLnZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICBob3N0VG9wTWFyZ2luID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICBob3N0VG9wTWFyZ2luID0gTWF0aC5tYXgoMCwgKHRoaXMucm9vdC5jbGllbnRIZWlnaHQgLSBoZWlnaHQpIC8gMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgaG9zdFRvcE1hcmdpbiA9IE1hdGgubWF4KDAsIHRoaXMucm9vdC5jbGllbnRIZWlnaHQgLSBoZWlnaHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWFyZ2luLXRvcCcsIGAke2hvc3RUb3BNYXJnaW59cHhgLCAnaW1wb3J0YW50Jyk7XG5cbiAgICAgIGlmICh0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IDwgaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7dGhpcy5yb290LmNsaWVudEhlaWdodH1weGApO1xuICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93LXknLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcbiAgICAvLyAgIGB0aGlzLnJvb3Quc3R5bGUuaGVpZ2h0ID0gJHt0aGlzLnJvb3Quc3R5bGUuaGVpZ2h0fVxcbmAgK1xuICAgIC8vICAgYHRoaXMucm9vdC5jbGllbnRIZWlnaHQgPSAke3RoaXMucm9vdC5jbGllbnRIZWlnaHR9XFxuYCArXG4gICAgLy8gICBgdGhpcy5ob3N0LnN0eWxlLmhlaWdodCA9ICR7dGhpcy5ob3N0LnN0eWxlLmhlaWdodH1cXG5gICtcbiAgICAvLyAgIGB0aGlzLmhvc3QuY2xpZW50SGVpZ2h0ID0gJHt0aGlzLmhvc3QuY2xpZW50SGVpZ2h0fVxcbmAgK1xuICAgIC8vICAgJ1xcbicgK1xuICAgIC8vICAgYHRoaXMuY2FudmFzLmhlaWdodCAgICAgICA9ICR7dGhpcy5jYW52YXMuaGVpZ2h0fVxcbmAgK1xuICAgIC8vICAgYHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodCA9ICR7dGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0fWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7REcuQ29sdW1ufSBzZXFDb2wgQ29sdW1uIHRvIGxvb2sgZm9yIGEgcGFsZXR0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gIG1pbkxlbmd0aCBtaW5pbXVtIGxlbmd0aCBvZiBzZXF1ZW5jZSB0byBkZXRlY3QgcGFsZXR0ZSAoZW1wdHkgc3RyaW5ncyBhcmUgYWxsb3dlZClcbiAgICogQHJldHVybiB7U2VxUGFsZXR0ZX0gUGFsZXR0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbHBoYWJldCBvZiB0aGUgc2VxdWVuY2VzIGluIHRoZSBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcGlja1VwUGFsZXR0ZShzZXFDb2w6IERHLkNvbHVtbiwgbWluTGVuZ3RoOiBudW1iZXIgPSA1KTogU2VxUGFsZXR0ZSB7XG4gICAgbGV0IHJlczogU2VxUGFsZXR0ZSB8IG51bGwgPSBudWxsO1xuICAgIHN3aXRjaCAoc2VxQ29sLnNlbVR5cGUpIHtcbiAgICBjYXNlIEFtaW5vYWNpZHMuU2VtVHlwZU11bHRpcGxlQWxpZ25tZW50OlxuICAgICAgcmVzID0gQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE51Y2xlb3RpZGVzLlNlbVR5cGVNdWx0aXBsZUFsaWdubWVudDpcbiAgICAgIHJlcyA9IE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGFscGhhYmV0RnJlcXM6IE1vbm9tZXJGcmVxcyA9IFdlYkxvZ28uZ2V0QWxwaGFiZXRGcmVxcyhzZXFDb2wsIG1pbkxlbmd0aCk7XG5cbiAgICBjb25zdCBhbHBoYWJldENhbmRpZGF0ZXM6IFtTZXQ8c3RyaW5nPiwgU2VxUGFsZXR0ZV1bXSA9IFtcbiAgICAgIFtuZXcgU2V0KE9iamVjdC5rZXlzKE51Y2xlb3RpZGVzLk5hbWVzKSksIE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtXSxcbiAgICAgIFtuZXcgU2V0KE9iamVjdC5rZXlzKEFtaW5vYWNpZHMuTmFtZXMpKSwgQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHNdLFxuICAgIF07XG4gICAgLy8gQ2FsY3VsYXRlIGxpa2VsaWhvb2RzIGZvciBhbHBoYWJldF9jYW5kaWRhdGVzXG4gICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzU2ltOiBudW1iZXJbXSA9IGFscGhhYmV0Q2FuZGlkYXRlcy5tYXAoXG4gICAgICAoYykgPT4gV2ViTG9nby5nZXRBbHBoYWJldFNpbWlsYXJpdHkoYWxwaGFiZXRGcmVxcywgY1swXSkpO1xuICAgIGNvbnN0IG1heENvcyA9IE1hdGgubWF4KC4uLmFscGhhYmV0Q2FuZGlkYXRlc1NpbSk7XG4gICAgaWYgKG1heENvcyA+IDAuNjUpXG4gICAgICByZXMgPSBhbHBoYWJldENhbmRpZGF0ZXNbYWxwaGFiZXRDYW5kaWRhdGVzU2ltLmluZGV4T2YobWF4Q29zKV1bMV07XG4gICAgZWxzZVxuICAgICAgcmVzID0gVW5rbm93blNlcVBhbGV0dGVzLkNvbG9yO1xuXG4gICAgLy8gaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgIC8vICAgLy8gVGhlIGFscGhhYmV0IG9mIG51Y2xlb3RpZGVzIGlzIGEgc21hbGxlciBzZXQsIHNvIHdlIGNoZWNrIGl0IGZpcnN0LlxuICAgIC8vICAgY29uc3QgYWxwaGFiZXQgPSB7Li4uTnVjbGVvdGlkZXMuTmFtZXMsIC4uLnsnLSc6ICdnYXAnfX07XG4gICAgLy8gICByZXMgPSBERy5EZXRlY3Rvci5zYW1wbGVDYXRlZ29yaWVzKHNlcUNvbCwgKHNlcSkgPT4ge1xuICAgIC8vICAgICByZXR1cm4gIXNlcSB8fCAoc2VxLmxlbmd0aCA+IG1pbkxlbmd0aCAmJiB0aGlzLnNwbGl0U2VxVG9Nb25vbWVycyhzZXEpLmV2ZXJ5KChuKSA9PiBuIGluIGFscGhhYmV0KSk7XG4gICAgLy8gICB9LCAxKSA/IE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtIDogbnVsbDtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgIC8vICAgLy8gQW5kIHRoZW4gY2hlY2sgZm9yIGFtaW5vIGFjaWQncyBhbHBoYWJldC5cbiAgICAvLyAgIGNvbnN0IGFscGhhYmV0ID0gey4uLkFtaW5vYWNpZHMuTmFtZXMsIC4uLnsnLSc6ICdnYXAnfX07XG4gICAgLy8gICByZXMgPSBERy5EZXRlY3Rvci5zYW1wbGVDYXRlZ29yaWVzKHNlcUNvbCwgKHNlcSkgPT4ge1xuICAgIC8vICAgICByZXR1cm4gIXNlcSB8fCAoc2VxLmxlbmd0aCA+IG1pbkxlbmd0aCAmJiB0aGlzLnNwbGl0U2VxVG9Nb25vbWVycyhzZXEpLmV2ZXJ5KChuKSA9PiBuIGluIGFscGhhYmV0KSk7XG4gICAgLy8gICB9LCAxKSA/IEFtaW5vYWNpZHNQYWxldHRlcy5Hcm9rR3JvdXBzIDogbnVsbDtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgIC8vICAgcmVzID0gVW5rbm93blNlcVBhbGV0dGVzLkNvbG9yO1xuICAgIC8vIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRBbHBoYWJldEZyZXFzKHNlcUNvbDogREcuQ29sdW1uLCBtaW5MZW5ndGg6IG51bWJlciA9IDApOiBNb25vbWVyRnJlcXMge1xuICAgIGNvbnN0IHJlczogTW9ub21lckZyZXFzID0ge307XG4gICAgZm9yIChjb25zdCBzZXEgb2Ygc2VxQ29sLmNhdGVnb3JpZXMpIHtcbiAgICAgIGNvbnN0IG1TZXE6IHN0cmluZ1tdID0gV2ViTG9nby5zcGxpdFNlcVRvTW9ub21lcnMoc2VxKTtcbiAgICAgIGlmIChtU2VxLmxlbmd0aCA+IG1pbkxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbVNlcSkge1xuICAgICAgICAgIGlmICghKG0gaW4gcmVzKSlcbiAgICAgICAgICAgIHJlc1ttXSA9IDA7XG4gICAgICAgICAgcmVzW21dICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0QWxwaGFiZXRTaW1pbGFyaXR5KGZyZXE6IE1vbm9tZXJGcmVxcywgYWxwaGFiZXQ6IFNldDxzdHJpbmc+LCBnYXBTeW1ib2w6IHN0cmluZyA9ICctJyk6IG51bWJlciB7XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQ8c3RyaW5nPihbLi4ubmV3IFNldChPYmplY3Qua2V5cyhmcmVxKSksIC4uLmFscGhhYmV0XSk7XG4gICAga2V5cy5kZWxldGUoZ2FwU3ltYm9sKTtcblxuICAgIGNvbnN0IGZyZXFBOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGFscGhhYmV0QTogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG0gb2Yga2V5cykge1xuICAgICAgZnJlcUEucHVzaChtIGluIGZyZXEgPyBmcmVxW21dIDogMCk7XG4gICAgICBhbHBoYWJldEEucHVzaChhbHBoYWJldC5oYXMobSkgPyAxIDogMCk7XG4gICAgfVxuICAgIC8qIFRoZXJlIHdlcmUgYSBmZXcgaWRlYXM6IGNoaS1zcXVhcmVkLCBwZWFyc29uIGNvcnJlbGF0aW9uICh2YXJpYW5jZT8pLCBzY2FsYXIgcHJvZHVjdCAqL1xuICAgIGNvbnN0IGZyZXFWOiBWZWN0b3IgPSBuZXcgVmVjdG9yKGZyZXFBKTtcbiAgICBjb25zdCBhbHBoYWJldFY6IFZlY3RvciA9IG5ldyBWZWN0b3IoYWxwaGFiZXRBKTtcbiAgICBjb25zdCBjb3M6IG51bWJlciA9IHZlY3RvckRvdFByb2R1Y3QoZnJlcVYsIGFscGhhYmV0VikgLyAodmVjdG9yTGVuZ3RoKGZyZXFWKSAqIHZlY3Rvckxlbmd0aChhbHBoYWJldFYpKTtcbiAgICByZXR1cm4gY29zO1xuICB9XG5cbiAgLyoqIEZpcnN0IHRyeSB0byBmaW5kIGNvbHVtbiB3aXRoIHNlbVR5cGUgJ2FsaWduZWRTZXF1ZW5jZScuXG4gICAqIE5leHQgbG9vayBmb3IgY29sdW1uIHdpdGggZGF0YSBhbHBoYWJldCBjb3JyZXNwb25kaW5nIHRvIGFueSBvZiB0aGUga25vd24gcGFsZXR0ZXMuXG4gICAqIEBwYXJhbSB7REcuRGF0YUZyYW1lfSBkYXRhRnJhbWVcbiAgICogQHJldHVybiB7REcuQ29sdW1ufSBUaGUgY29sdW1uIHdlIHdlcmUgbG9va2luZyBmb3Igb3IgbnVsbFxuICAgKi9cbiAgcHJpdmF0ZSBwaWNrVXBTZXFDb2woZGF0YUZyYW1lOiBERy5EYXRhRnJhbWUpOiBERy5Db2x1bW4gfCBudWxsIHtcbiAgICBsZXQgcmVzOiBERy5Db2x1bW4gfCBudWxsID0gZGF0YUZyYW1lLmNvbHVtbnMuYnlTZW1UeXBlKCdhbGlnbmVkU2VxdWVuY2UnKTtcbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIGRhdGFGcmFtZS5jb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGNwID0gV2ViTG9nby5waWNrVXBQYWxldHRlKGNvbCBhcyBERy5Db2x1bW4sIDUpO1xuICAgICAgICBpZiAoY3AgIT09IG51bGwgJiYgIShjcCBpbnN0YW5jZW9mIFVua25vd25TZXFQYWxldHRlKSkge1xuICAgICAgICAgIHJlcyA9IGNvbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc3BsaXRSZSA9IC9cXFsoXFx3KylcXF18KFxcdyl8KC0pL2c7XG5cbiAgcHVibGljIHN0YXRpYyBzcGxpdFNlcVRvTW9ub21lcnMoc2VxOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gVE9ETzogVXNlIHNlcXVlbmNlIHNlcGFyYXRvclxuICAgIGNvbnN0IHJlczogc3RyaW5nW10gPSB3dShzZXEudG9TdHJpbmcoKS5tYXRjaEFsbChXZWJMb2dvLnNwbGl0UmUpKS5tYXAoKG1hKSA9PiB7XG4gICAgICBsZXQgbVJlczogc3RyaW5nO1xuICAgICAgY29uc3QgbSA9IG1hWzBdO1xuICAgICAgaWYgKG0ubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAobSBpbiBXZWJMb2dvLmFhU3lub255bXMpIHtcbiAgICAgICAgICBtUmVzID0gV2ViTG9nby5hYVN5bm9ueW1zW21dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1SZXMgPSAnJztcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKGBMb25nIG1vbm9tZXIgJyR7bX0nIGhhcyBub3QgYSBzaG9ydCBzeW5vbnltLmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtUmVzID0gbTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtUmVzO1xuICAgIH0pLnRvQXJyYXkoKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKiogT25seSBzb21lIG9mIHRoZSBzeW5vbnltcy4gVGhlc2Ugd2VyZSBvYnRhaW5lZCBmcm9tIHRoZSBjbHVzdGVyZWQgb2xpZ29wZXB0aWRlIGRhdGFzZXQuICovXG4gIHByaXZhdGUgc3RhdGljIGFhU3lub255bXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICdbTWVObGVdJzogJ0wnLCAvLyBObGUgLSBub3JsZXVjaW5lXG4gICAgJ1tNZUFdJzogJ0EnLFxuICAgICdbTWVHXSc6ICdHJyxcbiAgICAnW01lRl0nOiAnRicsXG4gIH07XG59XG4iXX0=
|
|
1087
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWxvZ28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWItbG9nby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUN2RSxPQUFPLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFDL0YsT0FBTyxFQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBa0JqRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsVUFBUyxLQUFpQjtJQUN4RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMxQyxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDO0FBRUYsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVMsQ0FBUyxFQUFFLENBQVM7SUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxJ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QztJQUlNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFXO1FBQzFDLCtCQUErQjtRQUMvQixNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUM1RSxJQUFJLElBQVksQ0FBQztZQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtvQkFDM0IsSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNO29CQUNMLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2lCQUMvRDthQUNGO2lCQUFNO2dCQUNMLElBQUksR0FBRyxDQUFDLENBQUM7YUFDVjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFYixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O0FBenBCYSxtQkFBVyxHQUFHLGFBQWEsQ0FBQztBQUMzQixtQkFBVyxHQUFXLENBQUMsQ0FBQyxDQUFDO0FBbW9CekIsZUFBTyxHQUFHLHFCQUFxQixDQUFDO0FBdUIvQyw4RkFBOEY7QUFDL0Usa0JBQVUsR0FBK0I7SUFDdEQsU0FBUyxFQUFFLEdBQUc7SUFDZCxPQUFPLEVBQUUsR0FBRztJQUNaLE9BQU8sRUFBRSxHQUFHO0lBQ1osT0FBTyxFQUFFLEdBQUc7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuaW1wb3J0IHd1IGZyb20gJ3d1JztcbmltcG9ydCAqIGFzIHJ4anMgZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7VmVjdG9yfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQge3ZlY3Rvckxlbmd0aCwgdmVjdG9yRG90UHJvZHVjdH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHtBbWlub2FjaWRzLCBBbWlub2FjaWRzUGFsZXR0ZXN9IGZyb20gJy4uL2FtaW5vYWNpZHMnO1xuaW1wb3J0IHtOdWNsZW90aWRlcywgTnVjbGVvdGlkZXNQYWxldHRlc30gZnJvbSAnLi4vbnVjbGVvdGlkZXMnO1xuaW1wb3J0IHtVbmtub3duU2VxUGFsZXR0ZSwgVW5rbm93blNlcVBhbGV0dGVzfSBmcm9tICcuLi91bmtub3duJztcbmltcG9ydCB7U2VxUGFsZXR0ZX0gZnJvbSAnLi4vc2VxLXBhbGV0dGVzJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuZGVjbGFyZSBtb2R1bGUgJ2RhdGFncm9rLWFwaS9zcmMvZ3JpZCcge1xuICBpbnRlcmZhY2UgUmVjdCB7XG4gICAgY29udGFpbnMoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBib29sZWFuO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxDYW52YXNFbGVtZW50IHtcbiAgICBnZXRDdXJzb3JQb3NpdGlvbihldmVudDogTW91c2VFdmVudCk6IERHLlBvaW50O1xuICB9XG59XG5cbnR5cGUgTW9ub21lckZyZXFzID0geyBbbTogc3RyaW5nXTogbnVtYmVyIH07XG5cbkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5nZXRDdXJzb3JQb3NpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50OiBNb3VzZUV2ZW50KTogREcuUG9pbnQge1xuICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIG5ldyBERy5Qb2ludChldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0LCBldmVudC5jbGllbnRZIC0gcmVjdC50b3ApO1xufTtcblxuREcuUmVjdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbih4OiBudW1iZXIsIHk6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gdGhpcy5sZWZ0IDw9IHggJiYgeCA8PSB0aGlzLnJpZ2h0ICYmIHRoaXMudG9wIDw9IHkgJiYgeSA8PSB0aGlzLmJvdHRvbTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQb3NpdGlvbk1vbm9tZXJJbmZvIHtcbiAgLyoqIFNlcXVlbmNlcyBjb3VudCB3aXRoIG1vbm9tZXIgaW4gcG9zaXRpb25cbiAgICovXG4gIGNvdW50OiBudW1iZXI7XG5cbiAgLyoqIFJlbWVtYmVyIHNjcmVlbiBjb29yZHMgcmVjdFxuICAgKi9cbiAgYm91bmRzOiBERy5SZWN0O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY291bnQgPSAwO1xuICAgIHRoaXMuYm91bmRzID0gbmV3IERHLlJlY3QoMCwgMCwgMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uSW5mbyB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIGZyZXE6IHsgW206IHN0cmluZ106IFBvc2l0aW9uTW9ub21lckluZm8gfTtcbiAgcm93Q291bnQ6IG51bWJlcjtcblxuICAvKiogZnJlcSA9IHt9LCByb3dDb3VudCA9IDBcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBwb3NpdGlvbiAoJzExMUEnLCAnMTExLjEnLCBldGMpXG4gICAqL1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuZnJlcSA9IHt9O1xuICAgIHRoaXMucm93Q291bnQgPSAwO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXZWJMb2dvIGV4dGVuZHMgREcuSnNWaWV3ZXIge1xuICBwdWJsaWMgc3RhdGljIHJlc2lkdWVzU2V0ID0gJ251Y2xlb3RpZGVzJztcbiAgcHJpdmF0ZSBzdGF0aWMgdmlld2VyQ291bnQ6IG51bWJlciA9IC0xO1xuXG4gIHByaXZhdGUgdmlld2VySWQ6IG51bWJlciA9IC0xO1xuICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gcHJpdmF0ZSByZWFkb25seSBjb2xvclNjaGVtZTogQ29sb3JTY2hlbWUgPSBDb2xvclNjaGVtZXNbTnVjbGVvdGlkZXNXZWJMb2dvLnJlc2lkdWVzU2V0XTtcbiAgcHJvdGVjdGVkIGNwOiBTZXFQYWxldHRlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBob3N0PzogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgbXNnSG9zdD86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIGNhbnZhcz86IEhUTUxDYW52YXNFbGVtZW50O1xuICBwcml2YXRlIHNsaWRlcj86IERHLlJhbmdlU2xpZGVyO1xuICBwcml2YXRlIHRleHRCYXNlbGluZTogQ2FudmFzVGV4dEJhc2VsaW5lO1xuXG4gIHByaXZhdGUgYXhpc0hlaWdodDogbnVtYmVyID0gMTI7XG5cbiAgcHJpdmF0ZSBzZXFDb2w6IERHLkNvbHVtbjxzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG4gIC8vIHByaXZhdGUgbWF4TGVuZ3RoOiBudW1iZXIgPSAxMDA7XG4gIHByaXZhdGUgcG9zaXRpb25zOiBQb3NpdGlvbkluZm9bXSA9IFtdO1xuXG4gIHByaXZhdGUgcm93c01hc2tlZDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSByb3dzTnVsbDogbnVtYmVyID0gMDtcblxuICAvLyBWaWV3ZXIncyBwcm9wZXJ0aWVzIChsaWtlbHkgdGhleSBzaG91bGQgYmUgcHVibGljIHNvIHRoYXQgdGhleSBjYW4gYmUgc2V0IG91dHNpZGUpXG4gIHByaXZhdGUgX3Bvc2l0aW9uV2lkdGg6IG51bWJlcjtcbiAgcHVibGljIHBvc2l0aW9uV2lkdGg6IG51bWJlcjtcbiAgcHVibGljIG1pbkhlaWdodDogbnVtYmVyO1xuICBwdWJsaWMgbWF4SGVpZ2h0OiBudW1iZXI7XG4gIHB1YmxpYyBjb25zaWRlck51bGxTZXF1ZW5jZXM6IGJvb2xlYW47XG4gIHB1YmxpYyBzZXF1ZW5jZUNvbHVtbk5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBzdGFydFBvc2l0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIGVuZFBvc2l0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIGZpeFdpZHRoOiBib29sZWFuO1xuICBwdWJsaWMgdmVydGljYWxBbGlnbm1lbnQ6IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBob3Jpem9udGFsQWxpZ25tZW50OiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaWMgZml0QXJlYTogYm9vbGVhbjtcbiAgcHVibGljIHNocmlua0VtcHR5VGFpbDogYm9vbGVhbjtcblxuICBwcml2YXRlIHBvc2l0aW9uTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSBzdGFydFBvc2l0aW9uOiBudW1iZXIgPSAtMTtcblxuICBwcml2YXRlIGVuZFBvc2l0aW9uOiBudW1iZXIgPSAtMTtcblxuICAvKiogRm9yIHN0YXJ0UG9zaXRpb24gZXF1YWxzIHRvIGVuZFBvc2l0aW9uIExlbmd0aCBpcyAxICovXG4gIHByaXZhdGUgZ2V0IExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UG9zaXRpb24gPD0gdGhpcy5lbmRQb3NpdGlvbiA/IHRoaXMuZW5kUG9zaXRpb24gLSB0aGlzLnN0YXJ0UG9zaXRpb24gKyAxIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgdmlld1N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMudmlld2VySWQgPSBXZWJMb2dvLnZpZXdlckNvdW50O1xuICAgIFdlYkxvZ28udmlld2VyQ291bnQgKz0gMTtcblxuICAgIHRoaXMudGV4dEJhc2VsaW5lID0gJ3RvcCc7XG5cbiAgICB0aGlzLl9wb3NpdGlvbldpZHRoID0gdGhpcy5wb3NpdGlvbldpZHRoID0gdGhpcy5mbG9hdCgncG9zaXRpb25XaWR0aCcsIDE2LyosXG4gICAgICB7ZWRpdG9yOiAnc2xpZGVyJywgbWluOiA0LCBtYXg6IDY0LCBwb3N0Zml4OiAncHgnfSovKTtcbiAgICB0aGlzLm1pbkhlaWdodCA9IHRoaXMuZmxvYXQoJ21pbkhlaWdodCcsIDUwLyosXG4gICAgICB7ZWRpdG9yOiAnc2xpZGVyJywgbWluOiAyNSwgbWF4OiAyNTAsIHBvc3RmaXg6ICdweCd9Ki8pO1xuICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5mbG9hdCgnbWF4SGVpZ2h0JywgMTAwLyosXG4gICAgICB7ZWRpdG9yOiAnc2xpZGVyJywgbWluOiAyNSwgbWF4OiA1MDAsIHBvc3RmaXg6ICdweCd9Ki8pO1xuXG4gICAgdGhpcy5jb25zaWRlck51bGxTZXF1ZW5jZXMgPSB0aGlzLmJvb2woJ2NvbnNpZGVyTnVsbFNlcXVlbmNlcycsIGZhbHNlKTtcbiAgICB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSA9IHRoaXMuc3RyaW5nKCdzZXF1ZW5jZUNvbHVtbk5hbWUnLCBudWxsKTtcblxuICAgIHRoaXMuc3RhcnRQb3NpdGlvbk5hbWUgPSB0aGlzLnN0cmluZygnc3RhcnRQb3NpdGlvbk5hbWUnLCBudWxsKTtcbiAgICB0aGlzLmVuZFBvc2l0aW9uTmFtZSA9IHRoaXMuc3RyaW5nKCdlbmRQb3NpdGlvbk5hbWUnLCBudWxsKTtcblxuICAgIHRoaXMuZml4V2lkdGggPSB0aGlzLmJvb2woJ2ZpeFdpZHRoJywgZmFsc2UpO1xuXG4gICAgdGhpcy52ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuc3RyaW5nKCd2ZXJ0aWNhbEFsaWdubWVudCcsICdtaWRkbGUnLFxuICAgICAge2Nob2ljZXM6IFsndG9wJywgJ21pZGRsZScsICdib3R0b20nXX0pO1xuICAgIHRoaXMuaG9yaXpvbnRhbEFsaWdubWVudCA9IHRoaXMuc3RyaW5nKCdob3Jpem9udGFsQWxpZ25tZW50JywgJ2NlbnRlcicsXG4gICAgICB7Y2hvaWNlczogWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCddfSk7XG4gICAgdGhpcy5maXRBcmVhID0gdGhpcy5ib29sKCdmaXRBcmVhJywgdHJ1ZSk7XG4gICAgdGhpcy5zaHJpbmtFbXB0eVRhaWwgPSB0aGlzLmJvb2woJ3Nocmlua0VtcHR5VGFpbCcsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdXZWJMb2dvIHNlY29uZCBpbml0aWFsaXphdGlvbiEnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB0aGlzLmhlbHBVcmwgPSAnL2hlbHAvdmlzdWFsaXplL3ZpZXdlcnMvd2ViLWxvZ28ubWQnO1xuXG4gICAgdGhpcy5tc2dIb3N0ID0gdWkuZGl2KCdObyBtZXNzYWdlJyk7XG4gICAgdGhpcy5tc2dIb3N0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICB0aGlzLmNhbnZhcyA9IHVpLmNhbnZhcygpO1xuICAgIHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuXG4gICAgdGhpcy5ob3N0ID0gdWkuZGl2KFt0aGlzLm1zZ0hvc3QsIHRoaXMuY2FudmFzXSk7XG5cbiAgICAvLyB0aGlzLnNsaWRlciA9IHVpLnJhbmdlU2xpZGVyKDAsIDIwLCAyLCA1KTtcbiAgICAvLyB0aGlzLnNsaWRlci5yb290LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIC8vIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUuaGVpZ2h0ID0gJzEycHgnO1xuXG4gICAgY29uc3QgZ2V0TW9ub21lciA9IChwOiBERy5Qb2ludCk6IFtudW1iZXIsIHN0cmluZyB8IG51bGwsIFBvc2l0aW9uTW9ub21lckluZm8gfCBudWxsXSA9PiB7XG4gICAgICBjb25zdCBqUG9zID0gTWF0aC5mbG9vcihwLnggLyB0aGlzLl9wb3NpdGlvbldpZHRoKTtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbnNbalBvc107XG5cbiAgICAgIGlmIChwb3NpdGlvbiA9PT0gdm9pZCAwKVxuICAgICAgICByZXR1cm4gW2pQb3MsIG51bGwsIG51bGxdO1xuXG4gICAgICBjb25zdCBtb25vbWVyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBPYmplY3Qua2V5cyhwb3NpdGlvbi5mcmVxKVxuICAgICAgICAuZmluZCgobSkgPT4gcG9zaXRpb24uZnJlcVttXS5ib3VuZHMuY29udGFpbnMocC54LCBwLnkpKTtcbiAgICAgIGlmIChtb25vbWVyID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBbalBvcywgbnVsbCwgbnVsbF07XG5cbiAgICAgIHJldHVybiBbalBvcywgbW9ub21lciwgcG9zaXRpb24uZnJlcVttb25vbWVyXV07XG4gICAgfTtcblxuXG4gICAgLy8gdGhpcy5zdWJzLnB1c2gocnhqcy5mcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZW92ZXInKS5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAvLyB9KSk7XG5cbiAgICB0aGlzLnZpZXdTdWJzLnB1c2gocnhqcy5mcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jYW52YXMpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgY29uc3QgYXJncyA9IGUgYXMgTW91c2VFdmVudDtcbiAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIodGhpcy5jYW52YXMuZ2V0Q3Vyc29yUG9zaXRpb24oYXJncykpO1xuXG4gICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgbW9ub21lcikge1xuICAgICAgICB1aS50b29sdGlwLnNob3dSb3dHcm91cCh0aGlzLmRhdGFGcmFtZSwgKGlSb3cpID0+IHtcbiAgICAgICAgICBjb25zdCBzZXEgPSB0aGlzLnNlcUNvbCEuZ2V0KGlSb3cpO1xuICAgICAgICAgIGNvbnN0IHNlcU0gPSBzZXEgPyBXZWJMb2dvLnNwbGl0U2VxVG9Nb25vbWVycyhzZXEpW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdIDogbnVsbDtcbiAgICAgICAgICByZXR1cm4gc2VxTSA9PT0gbW9ub21lciAmJiB0aGlzLmRhdGFGcmFtZS5maWx0ZXIuZ2V0KGlSb3cpO1xuICAgICAgICB9LCBhcmdzLnggKyAxNiwgYXJncy55ICsgMTYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdWkudG9vbHRpcC5oaWRlKCk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgdGhpcy52aWV3U3Vicy5wdXNoKHJ4anMuZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnbW91c2Vkb3duJykuc3Vic2NyaWJlKChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2FudmFzIHx8IGUuYnV0dG9uICE9IDApXG4gICAgICAgIHJldHVybjtcblxuICAgICAgY29uc3QgYXJncyA9IGUgYXMgTW91c2VFdmVudDtcbiAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIodGhpcy5jYW52YXMuZ2V0Q3Vyc29yUG9zaXRpb24oYXJncykpO1xuXG4gICAgICAvLyBwcmV2ZW50cyBkZXNlbGVjdCBhbGwgcm93cyBpZiB3ZSBtaXNzIG1vbm9tZXIgYm91bmRzXG4gICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgbW9ub21lcikge1xuICAgICAgICB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uaW5pdCgoaVJvdykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlcSA9IHRoaXMuc2VxQ29sIS5nZXQoaVJvdyk7XG4gICAgICAgICAgY29uc3Qgc2VxTSA9IHNlcSA/IFdlYkxvZ28uc3BsaXRTZXFUb01vbm9tZXJzKHNlcSlbdGhpcy5zdGFydFBvc2l0aW9uICsgalBvc10gOiBudWxsO1xuICAgICAgICAgIHJldHVybiBzZXFNID09PSBtb25vbWVyICYmIHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXQoaVJvdyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHRoaXMudmlld1N1YnMucHVzaCh1aS5vblNpemVDaGFuZ2VkKHRoaXMucm9vdCkuc3Vic2NyaWJlKHRoaXMucm9vdE9uU2l6ZUNoYW5nZWQuYmluZCh0aGlzKSkpO1xuXG4gICAgdGhpcy5yb290LmFwcGVuZCh0aGlzLmhvc3QpO1xuICAgIC8vIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLnNsaWRlci5yb290KTtcblxuICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByb290T25TaXplQ2hhbmdlZChhcmdzOiBhbnkpIHtcbiAgICB0aGlzLnJlbmRlcih0cnVlKTtcblxuICAgIC8vIGNvbnNvbGUuZGVidWcoYFdlYkxvZ28ub25Sb290U2l6ZUNoYW5nZWQoKSBgICtcbiAgICAvLyAgIGByb290LndpZHRoPSR7dGhpcy5yb290LmNsaWVudFdpZHRofSwgcm9vdC5oZWlnaHQ9JHt0aGlzLnJvb3QuY2xpZW50SGVpZ2h0fSwgYCArXG4gICAgLy8gICBgY2FudmFzLndpZHRoPSR7dGhpcy5jYW52YXMud2lkdGh9LCBjYW52YXMuaGVpZ2h0PSR7dGhpcy5jYW52YXMuaGVpZ2h0fSAuYCk7XG4gIH1cblxuICAvKiogQXNzaWducyB7QGxpbmsgc2VxQ29sfSBhbmQge0BsaW5rIGNwfSBiYXNlZCBvbiB7QGxpbmsgc2VxdWVuY2VDb2x1bW5OYW1lfSBhbmQgY2FsbHMge0BsaW5rIHJlbmRlcn0oKS5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlU2VxQ29sKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFGcmFtZSkge1xuICAgICAgdGhpcy5zZXFDb2wgPSB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSA/IHRoaXMuZGF0YUZyYW1lLmNvbCh0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSkgOiBudWxsO1xuICAgICAgaWYgKHRoaXMuc2VxQ29sID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZXFDb2wgPSB0aGlzLnBpY2tVcFNlcUNvbCh0aGlzLmRhdGFGcmFtZSk7XG4gICAgICAgIHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lID0gdGhpcy5zZXFDb2wgPyB0aGlzLnNlcUNvbC5uYW1lIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlcUNvbCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9ucygpO1xuICAgICAgICB0aGlzLmNwID0gV2ViTG9nby5waWNrVXBQYWxldHRlKHRoaXMuc2VxQ29sKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9zaXRpb25OYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSAtMTtcbiAgICAgICAgdGhpcy5lbmRQb3NpdGlvbiA9IC0xO1xuICAgICAgICB0aGlzLmNwID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZXFDb2wpXG4gICAgICByZXR1cm47XG5cbiAgICBsZXQgY2F0ZWdvcmllczogKHN0cmluZyB8IG51bGwpIFtdO1xuICAgIGlmICh0aGlzLnNocmlua0VtcHR5VGFpbCkge1xuICAgICAgY29uc3QgaW5kaWNlczogSW50MzJBcnJheSA9IHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAgIGNhdGVnb3JpZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoXG4gICAgICAgIEFycmF5LmZyb20oQXJyYXkoaW5kaWNlcy5sZW5ndGgpLmtleXMoKSkubWFwKChpOiBudW1iZXIpID0+IHRoaXMuc2VxQ29sIS5nZXQoaW5kaWNlc1tpXSkpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhdGVnb3JpZXMgPSB0aGlzLnNlcUNvbC5jYXRlZ29yaWVzO1xuICAgIH1cbiAgICBjb25zdCBtYXhMZW5ndGggPSBjYXRlZ29yaWVzLmxlbmd0aCA+IDAgPyBNYXRoLm1heCguLi5jYXRlZ29yaWVzLm1hcChcbiAgICAgIChzKSA9PiBzICE9PSBudWxsID8gV2ViTG9nby5zcGxpdFNlcVRvTW9ub21lcnMocykubGVuZ3RoIDogMCkpIDogMDtcblxuICAgIC8vIEdldCBwb3NpdGlvbiBuYW1lcyBmcm9tIGRhdGEgY29sdW1uIHRhZyAncG9zaXRpb25OYW1lcydcbiAgICBjb25zdCBwb3NpdGlvbk5hbWVzVHh0ID0gdGhpcy5zZXFDb2wuZ2V0VGFnKCdwb3NpdGlvbk5hbWVzJyk7XG4gICAgLy8gRmFsbGJhY2sgaWYgJ3Bvc2l0aW9uTmFtZXMnIHRhZyBpcyBub3QgcHJvdmlkZWRcbiAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBwb3NpdGlvbk5hbWVzVHh0ID8gcG9zaXRpb25OYW1lc1R4dC5zcGxpdCgnLCAnKS5tYXAoKG4pID0+IG4udHJpbSgpKSA6XG4gICAgICBbLi4uQXJyYXkobWF4TGVuZ3RoKS5rZXlzKCldLm1hcCgoalBvcykgPT4gYCR7alBvcyArIDF9YCk7XG5cbiAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSAodGhpcy5zdGFydFBvc2l0aW9uTmFtZSAmJiB0aGlzLnBvc2l0aW9uTmFtZXMgJiZcbiAgICAgIHRoaXMucG9zaXRpb25OYW1lcy5pbmNsdWRlcyh0aGlzLnN0YXJ0UG9zaXRpb25OYW1lKSkgP1xuICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzLmluZGV4T2YodGhpcy5zdGFydFBvc2l0aW9uTmFtZSkgOiAwO1xuICAgIHRoaXMuZW5kUG9zaXRpb24gPSAodGhpcy5lbmRQb3NpdGlvbk5hbWUgJiYgdGhpcy5wb3NpdGlvbk5hbWVzICYmXG4gICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5jbHVkZXModGhpcy5lbmRQb3NpdGlvbk5hbWUpKSA/XG4gICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5kZXhPZih0aGlzLmVuZFBvc2l0aW9uTmFtZSkgOiAobWF4TGVuZ3RoIC0gMSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25Qcm9wZXJ0eUNoYW5nZWQocHJvcGVydHk6IERHLlByb3BlcnR5KTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5kZWJ1ZyhgV2ViTG9nby5vblByb3BlcnR5Q2hhbmdlZCggJHtwcm9wZXJ0eS5uYW1lfSA9ICcnIH0pYCk7XG4gICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZWQocHJvcGVydHkpO1xuXG4gICAgc3dpdGNoIChwcm9wZXJ0eS5uYW1lKSB7XG4gICAgY2FzZSAnY29uc2lkZXJOdWxsU2VxdWVuY2VzJzpcbiAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VxdWVuY2VDb2x1bW5OYW1lJzpcbiAgICAgIHRoaXMudXBkYXRlU2VxQ29sKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzdGFydFBvc2l0aW9uTmFtZSc6XG4gICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5kUG9zaXRpb25OYW1lJzpcbiAgICAgIHRoaXMudXBkYXRlU2VxQ29sKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwb3NpdGlvbldpZHRoJzpcbiAgICAgIHRoaXMuX3Bvc2l0aW9uV2lkdGggPSB0aGlzLnBvc2l0aW9uV2lkdGg7XG4gICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ21pbkhlaWdodCc6XG4gICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ21heEhlaWdodCc6XG4gICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpeFdpZHRoJzpcbiAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmVydGljYWxBbGlnbm1lbnQnOlxuICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdob3Jpem9udGFsQWxpZ25tZW50JzpcbiAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZml0QXJlYSc6XG4gICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Nocmlua0VtcHR5VGFpbCc6XG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9ucygpO1xuICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25UYWJsZUF0dGFjaGVkKCkge1xuICAgIGNvbnN0IGRhdGFGcmFtZVR4dDogc3RyaW5nID0gdGhpcy5kYXRhRnJhbWUgPyAnZGF0YScgOiAnbnVsbCc7XG4gICAgY29uc29sZS5kZWJ1ZyhgYmlvOiBXZWJMb2dvPCR7dGhpcy52aWV3ZXJJZH0+Lm9uVGFibGVBdHRhY2hlZCggZGF0YUZyYW1lID0gJHtkYXRhRnJhbWVUeHR9ICkgc3RhcnRgKTtcbiAgICBzdXBlci5vblRhYmxlQXR0YWNoZWQoKTtcblxuICAgIHRoaXMudXBkYXRlU2VxQ29sKCk7XG5cbiAgICBpZiAodGhpcy5kYXRhRnJhbWUgIT09IHZvaWQgMCkge1xuICAgICAgdGhpcy5zdWJzLnB1c2godGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKF8pID0+IHRoaXMucmVuZGVyKCkpKTtcbiAgICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuZGF0YUZyYW1lLmZpbHRlci5vbkNoYW5nZWQuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zKCk7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc29sZS5kZWJ1ZyhgYmlvOiBXZWJMb2dvPCR7dGhpcy52aWV3ZXJJZH0+Lm9uVGFibGVBdHRhY2hlZCgpIGVuZGApO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIGRldGFjaCgpIHtcbiAgICBjb25zdCBkYXRhRnJhbWVUeHQgPSBgJHt0aGlzLmRhdGFGcmFtZSA/ICdkYXRhJyA6ICdudWxsJ31gO1xuICAgIGNvbnNvbGUuZGVidWcoYGJpbzogV2ViTG9nbzwke3RoaXMudmlld2VySWR9Pi5vblRhYmxlQXR0YWNoZWQoIGRhdGFGcmFtZSA9ICR7ZGF0YUZyYW1lVHh0fSApIHN0YXJ0YCk7XG4gICAgc3VwZXIuZGV0YWNoKCk7XG5cbiAgICB0aGlzLnZpZXdTdWJzLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuaG9zdCEucmVtb3ZlKCk7XG4gICAgdGhpcy5jYW52YXMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tc2dIb3N0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaG9zdCA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBjb25zb2xlLmRlYnVnKGBiaW86IFdlYkxvZ288JHt0aGlzLnZpZXdlcklkfT4ub25UYWJsZUF0dGFjaGVkKCkgZW5kYCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX251bGxTZXF1ZW5jZShmaWxsZXJSZXNpZHVlID0gJ1gnKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jb25zaWRlck51bGxTZXF1ZW5jZXMpXG4gICAgICByZXR1cm4gbmV3IEFycmF5KHRoaXMuTGVuZ3RoKS5maWxsKGZpbGxlclJlc2lkdWUpLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jYWxjdWxhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmNhbnZhcyB8fCAhdGhpcy5ob3N0IHx8ICF0aGlzLnNlcUNvbCB8fCAhdGhpcy5kYXRhRnJhbWUpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLmNhbGNTaXplKCk7XG5cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBBcnJheSh0aGlzLkxlbmd0aCk7XG4gICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICBjb25zdCBwb3NOYW1lOiBzdHJpbmcgPSB0aGlzLnBvc2l0aW9uTmFtZXNbdGhpcy5zdGFydFBvc2l0aW9uICsgalBvc107XG4gICAgICB0aGlzLnBvc2l0aW9uc1tqUG9zXSA9IG5ldyBQb3NpdGlvbkluZm8ocG9zTmFtZSk7XG4gICAgfVxuXG4gICAgLy8gMjAyMi0wNS0wNSBhc2thbGtpbiBpbnN0cnVjdGVkIHRvIHNob3cgV2ViTG9nbyBiYXNlZCBvbiBmaWx0ZXIgKG5vdCBzZWxlY3Rpb24pXG4gICAgY29uc3QgaW5kaWNlcyA9IHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAvLyBjb25zdCBpbmRpY2VzID0gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnRydWVDb3VudCA+IDAgPyB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRJbmRleGVzKCkgOlxuICAgIC8vICAgdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldFNlbGVjdGVkSW5kZXhlcygpO1xuXG4gICAgdGhpcy5yb3dzTWFza2VkID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgdGhpcy5yb3dzTnVsbCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGkgb2YgaW5kaWNlcykge1xuICAgICAgbGV0IHM6IHN0cmluZyA9IDxzdHJpbmc+KHRoaXMuc2VxQ29sLmdldChpKSk7XG5cbiAgICAgIGlmICghcykge1xuICAgICAgICBzID0gdGhpcy5fbnVsbFNlcXVlbmNlKCk7XG4gICAgICAgICsrdGhpcy5yb3dzTnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VxTTogc3RyaW5nW10gPSBXZWJMb2dvLnNwbGl0U2VxVG9Nb25vbWVycyhzKTtcbiAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICBjb25zdCBwbUluZm8gPSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxO1xuICAgICAgICBjb25zdCBtOiBzdHJpbmcgPSBzZXFNW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdIHx8ICctJztcbiAgICAgICAgaWYgKCEobSBpbiBwbUluZm8pKVxuICAgICAgICAgIHBtSW5mb1ttXSA9IG5ldyBQb3NpdGlvbk1vbm9tZXJJbmZvKCk7XG4gICAgICAgIHBtSW5mb1ttXS5jb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vI3JlZ2lvbiBQb2xpc2ggZnJlcSBjb3VudHNcbiAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgIC8vIGRlbGV0ZSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxWyctJ107XG5cbiAgICAgIHRoaXMucG9zaXRpb25zW2pQb3NdLnJvd0NvdW50ID0gMDtcbiAgICAgIGZvciAoY29uc3QgbSBpbiB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxKVxuICAgICAgICB0aGlzLnBvc2l0aW9uc1tqUG9zXS5yb3dDb3VudCArPSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxW21dLmNvdW50O1xuICAgIH1cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAtIHRoaXMuYXhpc0hlaWdodDtcbiAgICAvLyBjb25zb2xlLmRlYnVnKGBXZWJMb2dvPCR7dGhpcy52aWV3ZXJJZH0+Ll9jYWxjdWxhdGUoKSBtYXhIZWlnaHQ9JHttYXhIZWlnaHR9LmApO1xuXG4gICAgLy8jcmVnaW9uIENhbGN1bGF0ZSBzY3JlZW5cbiAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgIGNvbnN0IGZyZXE6IHsgW2M6IHN0cmluZ106IFBvc2l0aW9uTW9ub21lckluZm8gfSA9IHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXE7XG4gICAgICBjb25zdCByb3dDb3VudCA9IHRoaXMucG9zaXRpb25zW2pQb3NdLnJvd0NvdW50O1xuXG4gICAgICBsZXQgeTogbnVtYmVyID0gdGhpcy5heGlzSGVpZ2h0O1xuXG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoZnJlcSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYVswXSAhPT0gJy0nICYmIGJbMF0gIT09ICctJylcbiAgICAgICAgICByZXR1cm4gYlsxXS5jb3VudCAtIGFbMV0uY291bnQ7XG4gICAgICAgIGVsc2UgaWYgKGFbMF0gPT09ICctJyAmJiBiWzBdID09PSAnLScpXG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgaWYgKGFbMF0gPT09ICctJylcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGVsc2UgLyogKGJbMF0gPT09ICctJykgKi9cbiAgICAgICAgICByZXR1cm4gKzE7XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBjb25zdCBwbUluZm86IFBvc2l0aW9uTW9ub21lckluZm8gPSBlbnRyeVsxXTtcbiAgICAgICAgLy8gY29uc3QgbTogc3RyaW5nID0gZW50cnlbMF07XG4gICAgICAgIGNvbnN0IGg6IG51bWJlciA9IG1heEhlaWdodCAqIHBtSW5mby5jb3VudCAvIHJvd0NvdW50O1xuXG4gICAgICAgIHBtSW5mby5ib3VuZHMgPSBuZXcgREcuUmVjdChqUG9zICogdGhpcy5fcG9zaXRpb25XaWR0aCwgeSwgdGhpcy5fcG9zaXRpb25XaWR0aCwgaCk7XG4gICAgICAgIHkgKz0gaDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG4gIH1cblxuICAvLyByZWZsZWN0IGNoYW5nZXMgbWFkZSB0byBmaWx0ZXIvc2VsZWN0aW9uXG4gIHJlbmRlcihyZWNhbGMgPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMubXNnSG9zdCkge1xuICAgICAgaWYgKHRoaXMuc2VxQ29sICYmICF0aGlzLmNwKSB7XG4gICAgICAgIHRoaXMubXNnSG9zdCEuaW5uZXJUZXh0ID0gYFVua25vd24gcGFsZXR0ZSAoY29sdW1uIHNlbVR5cGU6ICcke3RoaXMuc2VxQ29sLnNlbVR5cGV9JykuYDtcbiAgICAgICAgdGhpcy5tc2dIb3N0IS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1zZ0hvc3QhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhbnZhcyB8fCAhdGhpcy5zZXFDb2wgfHwgIXRoaXMuZGF0YUZyYW1lIHx8ICF0aGlzLmNwKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgZyA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgaWYgKCFnKSByZXR1cm47XG5cbiAgICBpZiAocmVjYWxjKVxuICAgICAgdGhpcy5fY2FsY3VsYXRlKCk7XG5cbiAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgZy5maWxsU3R5bGUgPSAnd2hpdGUnO1xuICAgIGcuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gICAgZy50ZXh0QmFzZWxpbmUgPSB0aGlzLnRleHRCYXNlbGluZTtcblxuICAgIC8vIFByZXZlbnRzIGRpdmlzaW9uIGJ5IHplcm8gb24gTGVuZ3RoID0gMFxuICAgIGlmICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IC0xIHx8IHRoaXMuZW5kUG9zaXRpb24gPT09IC0xKVxuICAgICAgcmV0dXJuO1xuXG4gICAgLy8jcmVnaW9uIFBsb3QgcG9zaXRpb25OYW1lc1xuICAgIGcucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICBnLmZpbGxTdHlsZSA9ICdibGFjayc7XG4gICAgZy50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICBnLmZvbnQgPSAnMTBweCBSb2JvdG8sIFJvYm90byBMb2NhbCwgc2Fucy1zZXJpZic7XG4gICAgY29uc3QgcG9zTmFtZU1heFdpZHRoID0gTWF0aC5tYXgoLi4udGhpcy5wb3NpdGlvbnMubWFwKChwb3MpID0+IGcubWVhc3VyZVRleHQocG9zLm5hbWUpLndpZHRoKSk7XG4gICAgY29uc3QgaFNjYWxlID0gcG9zTmFtZU1heFdpZHRoIDwgKHRoaXMuX3Bvc2l0aW9uV2lkdGggLSAyKSA/IDEgOiAodGhpcy5fcG9zaXRpb25XaWR0aCAtIDIpIC8gcG9zTmFtZU1heFdpZHRoO1xuXG4gICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICBjb25zdCBwb3M6IFBvc2l0aW9uSW5mbyA9IHRoaXMucG9zaXRpb25zW2pQb3NdO1xuICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgZy5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIGhTY2FsZSwgMCwgMCwgMSxcbiAgICAgICAgalBvcyAqIHRoaXMuX3Bvc2l0aW9uV2lkdGggKyB0aGlzLl9wb3NpdGlvbldpZHRoIC8gMiwgMCk7XG4gICAgICBnLmZpbGxUZXh0KHBvcy5uYW1lLCAwLCAwKTtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uIFBsb3QgcG9zaXRpb25OYW1lc1xuXG4gICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICBmb3IgKGNvbnN0IFttb25vbWVyLCBwbUluZm9dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXEpKSB7XG4gICAgICAgIGlmIChtb25vbWVyICE9PSAnLScpIHtcbiAgICAgICAgICBjb25zdCBiID0gcG1JbmZvLmJvdW5kcztcblxuICAgICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9ICcxNnB4IFJvYm90bywgUm9ib3RvIExvY2FsLCBzYW5zLXNlcmlmJztcbiAgICAgICAgICAvLyBIYWNrcyB0byBzY2FsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyB0byB0YXJnZXQgcmVjdGFuZ2xlXG4gICAgICAgICAgY29uc3QgdXBwZXJjYXNlTGV0dGVyQXNjZW50ID0gMC4yNTtcbiAgICAgICAgICBjb25zdCB1cHBlcmNhc2VMZXR0ZXJIZWlnaHQgPSAxMi4yO1xuXG4gICAgICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAnbGlnaHRncmF5JztcbiAgICAgICAgICBnLmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgZy5yZWN0KGIubGVmdCwgYi50b3AsIGIud2lkdGgsIGIuaGVpZ2h0KTtcbiAgICAgICAgICBnLmZpbGxTdHlsZSA9IHRoaXMuY3AuZ2V0KG1vbm9tZXIpID8/IHRoaXMuY3AuZ2V0KCdvdGhlcicpO1xuICAgICAgICAgIGcudGV4dEFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgIGcuZm9udCA9IGZvbnRTdHlsZTtcbiAgICAgICAgICAvL2cuZmlsbFJlY3QoYi5sZWZ0LCBiLnRvcCwgYi53aWR0aCwgYi5oZWlnaHQpO1xuICAgICAgICAgIGNvbnN0IG1UbTogVGV4dE1ldHJpY3MgPSBnLm1lYXN1cmVUZXh0KG1vbm9tZXIpO1xuXG4gICAgICAgICAgLy8gaWYgKG1NLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50ICE9IDApXG4gICAgICAgICAgLy8gICBjb25zb2xlLmRlYnVnKGBtOiAke219LCBtTS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudDogJHttTS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudH1gKTtcblxuICAgICAgICAgIGcuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgYi53aWR0aCAvIG1UbS53aWR0aCwgMCwgMCwgYi5oZWlnaHQgLyB1cHBlcmNhc2VMZXR0ZXJIZWlnaHQsXG4gICAgICAgICAgICBiLmxlZnQsIGIudG9wKTtcbiAgICAgICAgICBnLmZpbGxUZXh0KG1vbm9tZXIsIDAsIC11cHBlcmNhc2VMZXR0ZXJBc2NlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxjU2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FudmFzIHx8ICF0aGlzLmhvc3QpXG4gICAgICByZXR1cm47XG5cbiAgICBsZXQgd2lkdGg6IG51bWJlciA9IHRoaXMuTGVuZ3RoICogdGhpcy5wb3NpdGlvbldpZHRoO1xuICAgIGxldCBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLm1heEhlaWdodCwgTWF0aC5tYXgodGhpcy5taW5IZWlnaHQsIHRoaXMucm9vdC5jbGllbnRIZWlnaHQpKTtcblxuICAgIGlmICh0aGlzLmZpdEFyZWEpIHtcbiAgICAgIGNvbnN0IHhTY2FsZTogbnVtYmVyID0gdGhpcy5yb290LmNsaWVudEhlaWdodCAvIGhlaWdodDtcbiAgICAgIGNvbnN0IHlTY2FsZTogbnVtYmVyID0gdGhpcy5yb290LmNsaWVudFdpZHRoIC8gd2lkdGg7XG4gICAgICBjb25zdCBzY2FsZSA9IE1hdGgubWF4KDEsIE1hdGgubWluKHhTY2FsZSwgeVNjYWxlKSk7XG4gICAgICB3aWR0aCA9IHdpZHRoICogc2NhbGU7XG4gICAgICBoZWlnaHQgPSBoZWlnaHQgKiBzY2FsZTtcbiAgICAgIHRoaXMuX3Bvc2l0aW9uV2lkdGggPSB0aGlzLnBvc2l0aW9uV2lkdGggKiBzY2FsZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuXG4gICAgLy8gY29uc3QgY2FudmFzSGVpZ2h0OiBudW1iZXIgPSB3aWR0aCA+IHRoaXMucm9vdC5jbGllbnRXaWR0aCA/IGhlaWdodCAtIDggOiBoZWlnaHQ7XG4gICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLCBgJHtoZWlnaHR9cHhgKTtcbiAgICBjb25zdCBjYW52YXNIZWlnaHQ6IG51bWJlciA9IHRoaXMuaG9zdC5jbGllbnRIZWlnaHQ7XG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICAgIHRoaXMuY2FudmFzLnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLCBgJHtjYW52YXNIZWlnaHR9cHhgKTtcblxuICAgIC8vIEFkanVzdCBob3N0IGFuZCByb290IHdpZHRoXG4gICAgaWYgKHRoaXMuZml4V2lkdGgpIHtcbiAgICAgIC8vIGZ1bGwgd2lkdGggZm9yIGNhbnZhcyBob3N0IGFuZCByb290XG4gICAgICB0aGlzLnJvb3Quc3R5bGUud2lkdGggPSB0aGlzLmhvc3Quc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgICB0aGlzLnJvb3Quc3R5bGUuaGVpZ2h0IC8qPSB0aGlzLmhvc3Quc3R5bGUuaGVpZ2h0Ki8gPSBgJHtoZWlnaHR9cHhgO1xuICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFsbG93IHNjcm9sbCBjYW52YXMgaW4gcm9vdFxuICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgdGhpcy5ob3N0LnN0eWxlLm92ZXJmbG93WCA9ICdhdXRvIWltcG9ydGFudCc7XG4gICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywgbnVsbCk7XG5cbiAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgndGV4dC1hbGlnbicsIHRoaXMuaG9yaXpvbnRhbEFsaWdubWVudCk7XG5cbiAgICAgIC8vIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgbGV0IGhvc3RUb3BNYXJnaW4gPSAwO1xuICAgICAgc3dpdGNoICh0aGlzLnZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICBob3N0VG9wTWFyZ2luID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICBob3N0VG9wTWFyZ2luID0gTWF0aC5tYXgoMCwgKHRoaXMucm9vdC5jbGllbnRIZWlnaHQgLSBoZWlnaHQpIC8gMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgaG9zdFRvcE1hcmdpbiA9IE1hdGgubWF4KDAsIHRoaXMucm9vdC5jbGllbnRIZWlnaHQgLSBoZWlnaHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWFyZ2luLXRvcCcsIGAke2hvc3RUb3BNYXJnaW59cHhgLCAnaW1wb3J0YW50Jyk7XG5cbiAgICAgIGlmICh0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IDwgaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7dGhpcy5yb290LmNsaWVudEhlaWdodH1weGApO1xuICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93LXknLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcbiAgICAvLyAgIGB0aGlzLnJvb3Quc3R5bGUuaGVpZ2h0ID0gJHt0aGlzLnJvb3Quc3R5bGUuaGVpZ2h0fVxcbmAgK1xuICAgIC8vICAgYHRoaXMucm9vdC5jbGllbnRIZWlnaHQgPSAke3RoaXMucm9vdC5jbGllbnRIZWlnaHR9XFxuYCArXG4gICAgLy8gICBgdGhpcy5ob3N0LnN0eWxlLmhlaWdodCA9ICR7dGhpcy5ob3N0LnN0eWxlLmhlaWdodH1cXG5gICtcbiAgICAvLyAgIGB0aGlzLmhvc3QuY2xpZW50SGVpZ2h0ID0gJHt0aGlzLmhvc3QuY2xpZW50SGVpZ2h0fVxcbmAgK1xuICAgIC8vICAgJ1xcbicgK1xuICAgIC8vICAgYHRoaXMuY2FudmFzLmhlaWdodCAgICAgICA9ICR7dGhpcy5jYW52YXMuaGVpZ2h0fVxcbmAgK1xuICAgIC8vICAgYHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodCA9ICR7dGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0fWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7REcuQ29sdW1ufSBzZXFDb2wgQ29sdW1uIHRvIGxvb2sgZm9yIGEgcGFsZXR0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gIG1pbkxlbmd0aCBtaW5pbXVtIGxlbmd0aCBvZiBzZXF1ZW5jZSB0byBkZXRlY3QgcGFsZXR0ZSAoZW1wdHkgc3RyaW5ncyBhcmUgYWxsb3dlZClcbiAgICogQHJldHVybiB7U2VxUGFsZXR0ZX0gUGFsZXR0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbHBoYWJldCBvZiB0aGUgc2VxdWVuY2VzIGluIHRoZSBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcGlja1VwUGFsZXR0ZShzZXFDb2w6IERHLkNvbHVtbiwgbWluTGVuZ3RoOiBudW1iZXIgPSA1KTogU2VxUGFsZXR0ZSB7XG4gICAgbGV0IHJlczogU2VxUGFsZXR0ZSB8IG51bGwgPSBudWxsO1xuICAgIHN3aXRjaCAoc2VxQ29sLnNlbVR5cGUpIHtcbiAgICBjYXNlIEFtaW5vYWNpZHMuU2VtVHlwZU11bHRpcGxlQWxpZ25tZW50OlxuICAgICAgcmVzID0gQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE51Y2xlb3RpZGVzLlNlbVR5cGVNdWx0aXBsZUFsaWdubWVudDpcbiAgICAgIHJlcyA9IE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGFscGhhYmV0RnJlcXM6IE1vbm9tZXJGcmVxcyA9IFdlYkxvZ28uZ2V0QWxwaGFiZXRGcmVxcyhzZXFDb2wsIG1pbkxlbmd0aCk7XG5cbiAgICBjb25zdCBhbHBoYWJldENhbmRpZGF0ZXM6IFtTZXQ8c3RyaW5nPiwgU2VxUGFsZXR0ZV1bXSA9IFtcbiAgICAgIFtuZXcgU2V0KE9iamVjdC5rZXlzKE51Y2xlb3RpZGVzLk5hbWVzKSksIE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtXSxcbiAgICAgIFtuZXcgU2V0KE9iamVjdC5rZXlzKEFtaW5vYWNpZHMuTmFtZXMpKSwgQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHNdLFxuICAgIF07XG4gICAgLy8gQ2FsY3VsYXRlIGxpa2VsaWhvb2RzIGZvciBhbHBoYWJldF9jYW5kaWRhdGVzXG4gICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzU2ltOiBudW1iZXJbXSA9IGFscGhhYmV0Q2FuZGlkYXRlcy5tYXAoXG4gICAgICAoYykgPT4gV2ViTG9nby5nZXRBbHBoYWJldFNpbWlsYXJpdHkoYWxwaGFiZXRGcmVxcywgY1swXSkpO1xuICAgIGNvbnN0IG1heENvcyA9IE1hdGgubWF4KC4uLmFscGhhYmV0Q2FuZGlkYXRlc1NpbSk7XG4gICAgaWYgKG1heENvcyA+IDAuNjUpXG4gICAgICByZXMgPSBhbHBoYWJldENhbmRpZGF0ZXNbYWxwaGFiZXRDYW5kaWRhdGVzU2ltLmluZGV4T2YobWF4Q29zKV1bMV07XG4gICAgZWxzZVxuICAgICAgcmVzID0gVW5rbm93blNlcVBhbGV0dGVzLkNvbG9yO1xuXG4gICAgLy8gaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgIC8vICAgLy8gVGhlIGFscGhhYmV0IG9mIG51Y2xlb3RpZGVzIGlzIGEgc21hbGxlciBzZXQsIHNvIHdlIGNoZWNrIGl0IGZpcnN0LlxuICAgIC8vICAgY29uc3QgYWxwaGFiZXQgPSB7Li4uTnVjbGVvdGlkZXMuTmFtZXMsIC4uLnsnLSc6ICdnYXAnfX07XG4gICAgLy8gICByZXMgPSBERy5EZXRlY3Rvci5zYW1wbGVDYXRlZ29yaWVzKHNlcUNvbCwgKHNlcSkgPT4ge1xuICAgIC8vICAgICByZXR1cm4gIXNlcSB8fCAoc2VxLmxlbmd0aCA+IG1pbkxlbmd0aCAmJiB0aGlzLnNwbGl0U2VxVG9Nb25vbWVycyhzZXEpLmV2ZXJ5KChuKSA9PiBuIGluIGFscGhhYmV0KSk7XG4gICAgLy8gICB9LCAxKSA/IE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtIDogbnVsbDtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgIC8vICAgLy8gQW5kIHRoZW4gY2hlY2sgZm9yIGFtaW5vIGFjaWQncyBhbHBoYWJldC5cbiAgICAvLyAgIGNvbnN0IGFscGhhYmV0ID0gey4uLkFtaW5vYWNpZHMuTmFtZXMsIC4uLnsnLSc6ICdnYXAnfX07XG4gICAgLy8gICByZXMgPSBERy5EZXRlY3Rvci5zYW1wbGVDYXRlZ29yaWVzKHNlcUNvbCwgKHNlcSkgPT4ge1xuICAgIC8vICAgICByZXR1cm4gIXNlcSB8fCAoc2VxLmxlbmd0aCA+IG1pbkxlbmd0aCAmJiB0aGlzLnNwbGl0U2VxVG9Nb25vbWVycyhzZXEpLmV2ZXJ5KChuKSA9PiBuIGluIGFscGhhYmV0KSk7XG4gICAgLy8gICB9LCAxKSA/IEFtaW5vYWNpZHNQYWxldHRlcy5Hcm9rR3JvdXBzIDogbnVsbDtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgIC8vICAgcmVzID0gVW5rbm93blNlcVBhbGV0dGVzLkNvbG9yO1xuICAgIC8vIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRBbHBoYWJldEZyZXFzKHNlcUNvbDogREcuQ29sdW1uLCBtaW5MZW5ndGg6IG51bWJlciA9IDApOiBNb25vbWVyRnJlcXMge1xuICAgIGNvbnN0IHJlczogTW9ub21lckZyZXFzID0ge307XG4gICAgZm9yIChjb25zdCBzZXEgb2Ygc2VxQ29sLmNhdGVnb3JpZXMpIHtcbiAgICAgIGNvbnN0IG1TZXE6IHN0cmluZ1tdID0gV2ViTG9nby5zcGxpdFNlcVRvTW9ub21lcnMoc2VxKTtcbiAgICAgIGlmIChtU2VxLmxlbmd0aCA+IG1pbkxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbVNlcSkge1xuICAgICAgICAgIGlmICghKG0gaW4gcmVzKSlcbiAgICAgICAgICAgIHJlc1ttXSA9IDA7XG4gICAgICAgICAgcmVzW21dICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0QWxwaGFiZXRTaW1pbGFyaXR5KGZyZXE6IE1vbm9tZXJGcmVxcywgYWxwaGFiZXQ6IFNldDxzdHJpbmc+LCBnYXBTeW1ib2w6IHN0cmluZyA9ICctJyk6IG51bWJlciB7XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQ8c3RyaW5nPihbLi4ubmV3IFNldChPYmplY3Qua2V5cyhmcmVxKSksIC4uLmFscGhhYmV0XSk7XG4gICAga2V5cy5kZWxldGUoZ2FwU3ltYm9sKTtcblxuICAgIGNvbnN0IGZyZXFBOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGFscGhhYmV0QTogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG0gb2Yga2V5cykge1xuICAgICAgZnJlcUEucHVzaChtIGluIGZyZXEgPyBmcmVxW21dIDogMCk7XG4gICAgICBhbHBoYWJldEEucHVzaChhbHBoYWJldC5oYXMobSkgPyAxIDogMCk7XG4gICAgfVxuICAgIC8qIFRoZXJlIHdlcmUgYSBmZXcgaWRlYXM6IGNoaS1zcXVhcmVkLCBwZWFyc29uIGNvcnJlbGF0aW9uICh2YXJpYW5jZT8pLCBzY2FsYXIgcHJvZHVjdCAqL1xuICAgIGNvbnN0IGZyZXFWOiBWZWN0b3IgPSBuZXcgVmVjdG9yKGZyZXFBKTtcbiAgICBjb25zdCBhbHBoYWJldFY6IFZlY3RvciA9IG5ldyBWZWN0b3IoYWxwaGFiZXRBKTtcbiAgICBjb25zdCBjb3M6IG51bWJlciA9IHZlY3RvckRvdFByb2R1Y3QoZnJlcVYsIGFscGhhYmV0VikgLyAodmVjdG9yTGVuZ3RoKGZyZXFWKSAqIHZlY3Rvckxlbmd0aChhbHBoYWJldFYpKTtcbiAgICByZXR1cm4gY29zO1xuICB9XG5cbiAgLyoqIEZpcnN0IHRyeSB0byBmaW5kIGNvbHVtbiB3aXRoIHNlbVR5cGUgJ2FsaWduZWRTZXF1ZW5jZScuXG4gICAqIE5leHQgbG9vayBmb3IgY29sdW1uIHdpdGggZGF0YSBhbHBoYWJldCBjb3JyZXNwb25kaW5nIHRvIGFueSBvZiB0aGUga25vd24gcGFsZXR0ZXMuXG4gICAqIEBwYXJhbSB7REcuRGF0YUZyYW1lfSBkYXRhRnJhbWVcbiAgICogQHJldHVybiB7REcuQ29sdW1ufSBUaGUgY29sdW1uIHdlIHdlcmUgbG9va2luZyBmb3Igb3IgbnVsbFxuICAgKi9cbiAgcHJpdmF0ZSBwaWNrVXBTZXFDb2woZGF0YUZyYW1lOiBERy5EYXRhRnJhbWUpOiBERy5Db2x1bW4gfCBudWxsIHtcbiAgICBsZXQgcmVzOiBERy5Db2x1bW4gfCBudWxsID0gZGF0YUZyYW1lLmNvbHVtbnMuYnlTZW1UeXBlKCdhbGlnbmVkU2VxdWVuY2UnKTtcbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIGRhdGFGcmFtZS5jb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGNwID0gV2ViTG9nby5waWNrVXBQYWxldHRlKGNvbCBhcyBERy5Db2x1bW4sIDUpO1xuICAgICAgICBpZiAoY3AgIT09IG51bGwgJiYgIShjcCBpbnN0YW5jZW9mIFVua25vd25TZXFQYWxldHRlKSkge1xuICAgICAgICAgIHJlcyA9IGNvbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc3BsaXRSZSA9IC9cXFsoXFx3KylcXF18KFxcdyl8KC0pL2c7XG5cbiAgcHVibGljIHN0YXRpYyBzcGxpdFNlcVRvTW9ub21lcnMoc2VxOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gVE9ETzogVXNlIHNlcXVlbmNlIHNlcGFyYXRvclxuICAgIGNvbnN0IHJlczogc3RyaW5nW10gPSB3dShzZXEudG9TdHJpbmcoKS5tYXRjaEFsbChXZWJMb2dvLnNwbGl0UmUpKS5tYXAoKG1hKSA9PiB7XG4gICAgICBsZXQgbVJlczogc3RyaW5nO1xuICAgICAgY29uc3QgbSA9IG1hWzBdO1xuICAgICAgaWYgKG0ubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAobSBpbiBXZWJMb2dvLmFhU3lub255bXMpIHtcbiAgICAgICAgICBtUmVzID0gV2ViTG9nby5hYVN5bm9ueW1zW21dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1SZXMgPSAnJztcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKGBMb25nIG1vbm9tZXIgJyR7bX0nIGhhcyBub3QgYSBzaG9ydCBzeW5vbnltLmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtUmVzID0gbTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtUmVzO1xuICAgIH0pLnRvQXJyYXkoKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKiogT25seSBzb21lIG9mIHRoZSBzeW5vbnltcy4gVGhlc2Ugd2VyZSBvYnRhaW5lZCBmcm9tIHRoZSBjbHVzdGVyZWQgb2xpZ29wZXB0aWRlIGRhdGFzZXQuICovXG4gIHByaXZhdGUgc3RhdGljIGFhU3lub255bXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICdbTWVObGVdJzogJ0wnLCAvLyBObGUgLSBub3JsZXVjaW5lXG4gICAgJ1tNZUFdJzogJ0EnLFxuICAgICdbTWVHXSc6ICdHJyxcbiAgICAnW01lRl0nOiAnRicsXG4gIH07XG59XG4iXX0=
|
|
1015
1088
|
|
|
1016
1089
|
/***/ }),
|
|
1017
1090
|
|
|
@@ -1877,6 +1950,265 @@ class SequenceAlignment {
|
|
|
1877
1950
|
}
|
|
1878
1951
|
|
|
1879
1952
|
|
|
1953
|
+
/***/ }),
|
|
1954
|
+
|
|
1955
|
+
/***/ "./src/viewers/vd-regions-viewer.ts":
|
|
1956
|
+
/*!******************************************!*\
|
|
1957
|
+
!*** ./src/viewers/vd-regions-viewer.ts ***!
|
|
1958
|
+
\******************************************/
|
|
1959
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1960
|
+
|
|
1961
|
+
"use strict";
|
|
1962
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1963
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1964
|
+
/* harmony export */ "VdRegionsViewer": () => (/* binding */ VdRegionsViewer)
|
|
1965
|
+
/* harmony export */ });
|
|
1966
|
+
/* harmony import */ var datagrok_api_ui__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! datagrok-api/ui */ "datagrok-api/ui");
|
|
1967
|
+
/* harmony import */ var datagrok_api_ui__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(datagrok_api_ui__WEBPACK_IMPORTED_MODULE_0__);
|
|
1968
|
+
/* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! datagrok-api/dg */ "datagrok-api/dg");
|
|
1969
|
+
/* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__);
|
|
1970
|
+
/* harmony import */ var _datagrok_libraries_bio_src_vd_regions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @datagrok-libraries/bio/src/vd-regions */ "./node_modules/@datagrok-libraries/bio/src/vd-regions.js");
|
|
1971
|
+
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
1972
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
1973
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
1974
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
1975
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
1976
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
1977
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
1978
|
+
});
|
|
1979
|
+
};
|
|
1980
|
+
|
|
1981
|
+
|
|
1982
|
+
|
|
1983
|
+
const vrt = _datagrok_libraries_bio_src_vd_regions__WEBPACK_IMPORTED_MODULE_2__.VdRegionType;
|
|
1984
|
+
// Positions of regions for numbering schemes
|
|
1985
|
+
// http://www.bioinf.org.uk/abs/info.html
|
|
1986
|
+
// const imgtRegions: VdRegion[] = [
|
|
1987
|
+
// new VdRegion(vrt.FR, 'FR1', 'Light', 1, '1', '26'),
|
|
1988
|
+
// new VdRegion(vrt.FR, 'FR1', 'Heavy', 1, '1', '26'),
|
|
1989
|
+
//
|
|
1990
|
+
// new VdRegion(vrt.CDR, 'CDR1', 'Light', 2, '27', '38'), // 27-32
|
|
1991
|
+
// new VdRegion(vrt.CDR, 'CDR1', 'Heavy', 2, '27', '38'), // 27-32
|
|
1992
|
+
//
|
|
1993
|
+
// new VdRegion(vrt.FR, 'FR2', 'Light', 3, '39', '55'),
|
|
1994
|
+
// new VdRegion(vrt.FR, 'FR2', 'Heavy', 3, '39', '55'),
|
|
1995
|
+
//
|
|
1996
|
+
// new VdRegion(vrt.CDR, 'CDR2', 'Light', 4, '56', '65'),
|
|
1997
|
+
// new VdRegion(vrt.CDR, 'CDR2', 'Heavy', 4, '56', '65'),
|
|
1998
|
+
//
|
|
1999
|
+
// new VdRegion(vrt.FR, 'FR3', 'Light', 5, '66', '104'),
|
|
2000
|
+
// new VdRegion(vrt.FR, 'FR3', 'Heavy', 5, '66', '104'),
|
|
2001
|
+
//
|
|
2002
|
+
// new VdRegion(vrt.CDR, 'CDR3', 'Light', 6, '105', '117'),
|
|
2003
|
+
// new VdRegion(vrt.CDR, 'CDR3', 'Heavy', 6, '105', '117'),
|
|
2004
|
+
//
|
|
2005
|
+
// new VdRegion(vrt.FR, 'FR4', 'Light', 7, '118', null/*127*/),
|
|
2006
|
+
// new VdRegion(vrt.FR, 'FR4', 'Heavy', 7, '118', null/*128*/),
|
|
2007
|
+
// ];
|
|
2008
|
+
/** Viewer with tabs based on description of chain regions.
|
|
2009
|
+
* Used to define regions of an immunoglobulin LC.
|
|
2010
|
+
*/
|
|
2011
|
+
class VdRegionsViewer extends datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.JsViewer {
|
|
2012
|
+
constructor() {
|
|
2013
|
+
super();
|
|
2014
|
+
// private regionsDf: DG.DataFrame;
|
|
2015
|
+
this.regionsFg = null;
|
|
2016
|
+
// private regionsTV: DG.TableView;
|
|
2017
|
+
this.regionsRoot = null;
|
|
2018
|
+
this.isOpened = false;
|
|
2019
|
+
this.panelNode = null;
|
|
2020
|
+
this.regions = [];
|
|
2021
|
+
// #region -- Handle controls' events --
|
|
2022
|
+
this.resizing = false;
|
|
2023
|
+
// #endregion
|
|
2024
|
+
//#region -- View --
|
|
2025
|
+
this.host = null;
|
|
2026
|
+
this.mainLayout = null;
|
|
2027
|
+
this.logos = [];
|
|
2028
|
+
// To prevent ambiguous numbering scheme in MLB
|
|
2029
|
+
this.regionTypes = this.stringList('regionTypes', [vrt.CDR], { choices: Object.values(vrt).filter((t) => t != vrt.Unknown) });
|
|
2030
|
+
this.chains = this.stringList('chains', ['Heavy', 'Light'], { choices: ['Heavy', 'Light'] });
|
|
2031
|
+
this.sequenceColumnNamePostfix = this.string('sequenceColumnNamePostfix', 'chain sequence');
|
|
2032
|
+
}
|
|
2033
|
+
get df() {
|
|
2034
|
+
return this.dataFrame;
|
|
2035
|
+
}
|
|
2036
|
+
// TODO: .onTableAttached is not calling on dataFrame set, onPropertyChanged also not calling
|
|
2037
|
+
setDf(value, regions) {
|
|
2038
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2039
|
+
console.debug('VdRegionsViewer.setDf()');
|
|
2040
|
+
yield this.destroyView();
|
|
2041
|
+
this.regions = regions;
|
|
2042
|
+
this.dataFrame = value;
|
|
2043
|
+
yield this.buildView();
|
|
2044
|
+
});
|
|
2045
|
+
}
|
|
2046
|
+
init() {
|
|
2047
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2048
|
+
//#region regionsDF with filter
|
|
2049
|
+
// this.regionsDf = DG.DataFrame.fromObjects(this.regions);
|
|
2050
|
+
// this.regionsDf.rows.filter((row) => row.name == 'CDR1');
|
|
2051
|
+
// // To available options /
|
|
2052
|
+
// this.regionsFg = (await this.regionsDf.plot.fromType(DG.VIEWER.FILTERS, {
|
|
2053
|
+
// // columnNames: ['name',],
|
|
2054
|
+
// showFilterCountsIndication: false,
|
|
2055
|
+
// showHeader: false,
|
|
2056
|
+
// showSearchBox: false,
|
|
2057
|
+
// filters: [
|
|
2058
|
+
// {type: DG.FILTER_TYPE.CATEGORICAL, column: 'type', label: 'Region name', showHistogram: false},
|
|
2059
|
+
// {type: DG.FILTER_TYPE.CATEGORICAL, column: 'name', label: 'Region type', showHistogram: false},
|
|
2060
|
+
// ],
|
|
2061
|
+
// title: 'Regions filter',
|
|
2062
|
+
// showTitle: true,
|
|
2063
|
+
// description: 'Filter for regions of multiple alignment by IMGT nomenclature',
|
|
2064
|
+
// someProperty: 'Hello',
|
|
2065
|
+
// })) as DG.FilterGroup;
|
|
2066
|
+
//#endregion regionsDF with filter
|
|
2067
|
+
// this.mlbView.dockManager.dock(this.regionsFg.root, DG.DOCK_TYPE.LEFT, rootNode, 'Filter regions', 0.2);
|
|
2068
|
+
this.subs.push(datagrok_api_ui__WEBPACK_IMPORTED_MODULE_0__.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this)));
|
|
2069
|
+
// rxjs.fromEvent(this.root, 'mousemove').subscribe(this.onMouseMoveRoot.bind(this));
|
|
2070
|
+
this.root.addEventListener('mousemove', this.onMouseMoveRoot.bind(this));
|
|
2071
|
+
yield this.buildView();
|
|
2072
|
+
});
|
|
2073
|
+
}
|
|
2074
|
+
onTableAttached() {
|
|
2075
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2076
|
+
yield this.init();
|
|
2077
|
+
});
|
|
2078
|
+
}
|
|
2079
|
+
onPropertyChanged(property) {
|
|
2080
|
+
const _super = Object.create(null, {
|
|
2081
|
+
onPropertyChanged: { get: () => super.onPropertyChanged }
|
|
2082
|
+
});
|
|
2083
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2084
|
+
_super.onPropertyChanged.call(this, property);
|
|
2085
|
+
if (property) {
|
|
2086
|
+
switch (property.name) {
|
|
2087
|
+
case 'regionTypes':
|
|
2088
|
+
break;
|
|
2089
|
+
case 'chains':
|
|
2090
|
+
break;
|
|
2091
|
+
case 'sequenceColumnNamePostfix':
|
|
2092
|
+
break;
|
|
2093
|
+
}
|
|
2094
|
+
}
|
|
2095
|
+
});
|
|
2096
|
+
}
|
|
2097
|
+
reset() {
|
|
2098
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2099
|
+
});
|
|
2100
|
+
}
|
|
2101
|
+
open(mlbView) {
|
|
2102
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2103
|
+
if (!this.isOpened) {
|
|
2104
|
+
this.isOpened = true;
|
|
2105
|
+
this.panelNode = mlbView.dockManager.dock(this.root, datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.DOCK_TYPE.TOP, null, 'Regions', 0.2);
|
|
2106
|
+
}
|
|
2107
|
+
});
|
|
2108
|
+
}
|
|
2109
|
+
show(mlbView) {
|
|
2110
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2111
|
+
});
|
|
2112
|
+
}
|
|
2113
|
+
rootOnSizeChanged(args) {
|
|
2114
|
+
this.calcSize();
|
|
2115
|
+
}
|
|
2116
|
+
destroyView() {
|
|
2117
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2118
|
+
// TODO: Unsubscribe from and remove all view elements
|
|
2119
|
+
console.debug(`VdRegionsViewer.destroyView( mainLayout = ${!this.mainLayout ? 'none' : 'value'} )`);
|
|
2120
|
+
if (this.mainLayout != null) {
|
|
2121
|
+
// this.root.removeChild(this.host);
|
|
2122
|
+
this.mainLayout.remove();
|
|
2123
|
+
this.host.remove();
|
|
2124
|
+
this.host = null;
|
|
2125
|
+
this.mainLayout = null;
|
|
2126
|
+
}
|
|
2127
|
+
});
|
|
2128
|
+
}
|
|
2129
|
+
buildView() {
|
|
2130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2131
|
+
console.debug('VdRegionsViewer.buildView() start');
|
|
2132
|
+
const colNames = Object.assign({}, ...this.chains.map((chain) => ({ [chain]: `${chain} ${this.sequenceColumnNamePostfix}` })));
|
|
2133
|
+
const regionsFiltered = this.regions.filter((r) => this.regionTypes.includes(r.type));
|
|
2134
|
+
const orderList = Array.from(new Set(regionsFiltered.map((r) => r.order))).sort();
|
|
2135
|
+
this.logos = [];
|
|
2136
|
+
for (let orderI = 0; orderI < orderList.length; orderI++) {
|
|
2137
|
+
const regionChains = {};
|
|
2138
|
+
for (const chain of this.chains) {
|
|
2139
|
+
const region = regionsFiltered
|
|
2140
|
+
.find((r) => r.order == orderList[orderI] && r.chain == chain);
|
|
2141
|
+
regionChains[chain] = (yield this.dataFrame.plot.fromType('WebLogo', {
|
|
2142
|
+
sequenceColumnName: colNames[chain],
|
|
2143
|
+
startPositionName: region.positionStartName,
|
|
2144
|
+
endPositionName: region.positionEndName,
|
|
2145
|
+
fixWidth: true,
|
|
2146
|
+
}));
|
|
2147
|
+
}
|
|
2148
|
+
// WebLogo creation fires onRootSizeChanged event even before control being added to this.logos
|
|
2149
|
+
this.logos[orderI] = regionChains;
|
|
2150
|
+
}
|
|
2151
|
+
// ui.tableFromMap()
|
|
2152
|
+
// DG.HtmlTable.create()
|
|
2153
|
+
this.mainLayout = datagrok_api_ui__WEBPACK_IMPORTED_MODULE_0__.table(this.chains, (chain) => {
|
|
2154
|
+
const elements = [
|
|
2155
|
+
// This is chain label
|
|
2156
|
+
...(orderList.length > 0 ? [datagrok_api_ui__WEBPACK_IMPORTED_MODULE_0__.div(chain, {
|
|
2157
|
+
style: {
|
|
2158
|
+
transform: 'rotate(-90deg)',
|
|
2159
|
+
font: '12px Roboto, Roboto Local, sans-serif',
|
|
2160
|
+
textAlign: 'center',
|
|
2161
|
+
width: '16px',
|
|
2162
|
+
marginTop: '24px',
|
|
2163
|
+
marginLeft: '6px',
|
|
2164
|
+
}
|
|
2165
|
+
})] : []),
|
|
2166
|
+
// List with controls for regions
|
|
2167
|
+
...[...Array(orderList.length).keys()].map((orderI) => {
|
|
2168
|
+
const wl = this.logos[orderI][chain];
|
|
2169
|
+
wl.root.style.height = '100%';
|
|
2170
|
+
const resDiv = datagrok_api_ui__WEBPACK_IMPORTED_MODULE_0__.div([wl.root] /*`${chain} ${regionsFiltered[rI]}`*/, {
|
|
2171
|
+
style: {
|
|
2172
|
+
// height: '100%',
|
|
2173
|
+
marginTop: '4px',
|
|
2174
|
+
marginBottom: '4px',
|
|
2175
|
+
}
|
|
2176
|
+
});
|
|
2177
|
+
return resDiv;
|
|
2178
|
+
})
|
|
2179
|
+
];
|
|
2180
|
+
return elements;
|
|
2181
|
+
}, ['', ...[...Array(orderList.length).keys()].map((orderI) => regionsFiltered.find((r) => r.order == orderList[orderI] && r.chain == this.chains[0]).name || 'Name')]);
|
|
2182
|
+
this.mainLayout.className = 'mlb-vd-regions-viewer-table2';
|
|
2183
|
+
// this.mainLayout.style.background = '#EEEEFF';
|
|
2184
|
+
// this.mainLayout.style.height = '100%';
|
|
2185
|
+
// this.mainLayout.style.border = '1px solid black';
|
|
2186
|
+
const color = `#ffbb${Math.ceil(Math.random() * 255).toString(16)}`;
|
|
2187
|
+
this.host = datagrok_api_ui__WEBPACK_IMPORTED_MODULE_0__.box(this.mainLayout, { /*style: {backgroundColor: color}*/});
|
|
2188
|
+
this.root.appendChild(this.host);
|
|
2189
|
+
this.root.style.overflowX = 'auto';
|
|
2190
|
+
this.calcSize();
|
|
2191
|
+
console.debug('VdRegionsViewer.buildView() end');
|
|
2192
|
+
});
|
|
2193
|
+
}
|
|
2194
|
+
calcSize() {
|
|
2195
|
+
const logoHeight = (this.root.clientHeight - 54) / this.chains.length;
|
|
2196
|
+
const maxHeight = Math.min(logoHeight, Math.max(...this.logos.map((wlDict) => Math.max(...Object.values(wlDict).map((wl) => wl.maxHeight)))));
|
|
2197
|
+
for (let orderI = 0; orderI < this.logos.length; orderI++) {
|
|
2198
|
+
for (let chainI = 0; chainI < this.chains.length; chainI++) {
|
|
2199
|
+
const chain = this.chains[chainI];
|
|
2200
|
+
this.logos[orderI][chain].root.style.height = `${maxHeight}px`;
|
|
2201
|
+
}
|
|
2202
|
+
}
|
|
2203
|
+
}
|
|
2204
|
+
//#endregion -- View --
|
|
2205
|
+
onMouseMoveRoot(e) {
|
|
2206
|
+
// ui.tooltip.show('text', e.x + 8, e.y + 8,);
|
|
2207
|
+
// console.log(`onMouseMoveRoot.( x: ${e.x}, y: ${e.y} )`);
|
|
2208
|
+
}
|
|
2209
|
+
}
|
|
2210
|
+
|
|
2211
|
+
|
|
1880
2212
|
/***/ }),
|
|
1881
2213
|
|
|
1882
2214
|
/***/ "./node_modules/wu/dist/wu.js":
|
|
@@ -7286,16 +7618,19 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7286
7618
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7287
7619
|
/* harmony export */ "_package": () => (/* binding */ _package),
|
|
7288
7620
|
/* harmony export */ "sequenceAlignment": () => (/* binding */ sequenceAlignment),
|
|
7621
|
+
/* harmony export */ "vdRegionViewer": () => (/* binding */ vdRegionViewer),
|
|
7289
7622
|
/* harmony export */ "webLogoViewer": () => (/* binding */ webLogoViewer)
|
|
7290
7623
|
/* harmony export */ });
|
|
7291
7624
|
/* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! datagrok-api/dg */ "datagrok-api/dg");
|
|
7292
7625
|
/* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__);
|
|
7293
7626
|
/* harmony import */ var _seq_align__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./seq_align */ "./src/seq_align.ts");
|
|
7294
7627
|
/* harmony import */ var _datagrok_libraries_bio_src_viewers_web_logo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @datagrok-libraries/bio/src/viewers/web-logo */ "./node_modules/@datagrok-libraries/bio/src/viewers/web-logo.js");
|
|
7628
|
+
/* harmony import */ var _viewers_vd_regions_viewer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./viewers/vd-regions-viewer */ "./src/viewers/vd-regions-viewer.ts");
|
|
7295
7629
|
|
|
7296
7630
|
|
|
7297
7631
|
const _package = new datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__.Package();
|
|
7298
7632
|
|
|
7633
|
+
|
|
7299
7634
|
//name: sequenceAlignment
|
|
7300
7635
|
//input: string alignType {choices: ['Local alignment', 'Global alignment']}
|
|
7301
7636
|
// eslint-disable-next-line max-len
|
|
@@ -7316,10 +7651,17 @@ function sequenceAlignment(alignType, alignTable, gap, seq1, seq2) {
|
|
|
7316
7651
|
function webLogoViewer() {
|
|
7317
7652
|
return new _datagrok_libraries_bio_src_viewers_web_logo__WEBPACK_IMPORTED_MODULE_2__.WebLogo();
|
|
7318
7653
|
}
|
|
7654
|
+
//name: VdRegions
|
|
7655
|
+
//description: V-Domain regions viewer
|
|
7656
|
+
//tags: viewer, panel
|
|
7657
|
+
//output: viewer result
|
|
7658
|
+
function vdRegionViewer() {
|
|
7659
|
+
return new _viewers_vd_regions_viewer__WEBPACK_IMPORTED_MODULE_3__.VdRegionsViewer();
|
|
7660
|
+
}
|
|
7319
7661
|
|
|
7320
7662
|
})();
|
|
7321
7663
|
|
|
7322
7664
|
bio = __webpack_exports__;
|
|
7323
7665
|
/******/ })()
|
|
7324
7666
|
;
|
|
7325
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFnRDtBQUN6QyxpQ0FBaUMseURBQWM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsT0FBTztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQseUJBQXlCO0FBQzlFLHFEQUFxRCx5QkFBeUI7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqT0s7QUFDekMsa0NBQWtDLHlEQUFjO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOzs7Ozs7Ozs7Ozs7Ozs7QUMxQnBDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQ3BDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsY0FBYztBQUN0QztBQUNBO0FBQ0Es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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLEtBQUssRUFBRSxFQUdWOztBQUVWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsS0FBSyxFQUFFLEVBR1Y7O0FBRVY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEVBQTRFLGVBQWU7QUFDM0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkZBQTJGLGVBQWU7QUFDMUc7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQSwyRUFBMkUsZUFBZTtBQUMxRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FB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QUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsV0FBVztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0EscUVBQXFFOztBQUVyRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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azovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvYW1pbm9hY2lkcy5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL251Y2xlb3RpZGVzLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvc2VxLXBhbGV0dGVzLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdW5rbm93bi5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3ZpZXdlcnMvd2ViLWxvZ28uanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3JhbmRvbS5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zLmpzIiwid2VicGFjazovL2Jpby8uL3NyYy9zZXFfYWxpZ24udHMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL3d1L2Rpc3Qvd3UuanMiLCJ3ZWJwYWNrOi8vYmlvL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vYmlvL2V4dGVybmFsIHZhciBcInJ4anNcIiIsIndlYnBhY2s6Ly9iaW8vZXh0ZXJuYWwgdmFyIFwidWlcIiIsIndlYnBhY2s6Ly9iaW8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL2Jpby93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3BhY2thZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VxUGFsZXR0ZUJhc2UgfSBmcm9tICcuL3NlcS1wYWxldHRlcyc7XG5leHBvcnQgY2xhc3MgQW1pbm9hY2lkc1BhbGV0dGVzIGV4dGVuZHMgU2VxUGFsZXR0ZUJhc2Uge1xuICAgIHN0YXRpYyBnZXQgTGVzaygpIHtcbiAgICAgICAgaWYgKHRoaXMubGVzayA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICB0aGlzLmxlc2sgPSB0aGlzLm1ha2VQYWxldHRlKFtcbiAgICAgICAgICAgICAgICBbWydHJywgJ0EnLCAnUycsICdUJ10sICdvcmFuZ2UnXSxcbiAgICAgICAgICAgICAgICBbWydDJywgJ1YnLCAnSScsICdMJywgJ1AnLCAnRicsICdZJywgJ00nLCAnVyddLCAnYWxsX2dyZWVuJ10sXG4gICAgICAgICAgICAgICAgW1snTicsICdRJywgJ0gnXSwgJ21hZ2VudGEnXSxcbiAgICAgICAgICAgICAgICBbWydEJywgJ0UnXSwgJ3JlZCddLFxuICAgICAgICAgICAgICAgIFtbJ0snLCAnUiddLCAnYWxsX2JsdWUnXSxcbiAgICAgICAgICAgIF0sIGZhbHNlLCBBbWlub2FjaWRzUGFsZXR0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxlc2s7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgR3Jva0dyb3VwcygpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3Jva0dyb3VwcyA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICB0aGlzLmdyb2tHcm91cHMgPSB0aGlzLm1ha2VQYWxldHRlKFtcbiAgICAgICAgICAgICAgICBbWydDJywgJ1UnXSwgJ3llbGxvdyddLFxuICAgICAgICAgICAgICAgIFtbJ0cnLCAnUCddLCAncmVkJ10sXG4gICAgICAgICAgICAgICAgW1snQScsICdWJywgJ0knLCAnTCcsICdNJywgJ0YnLCAnWScsICdXJ10sICdhbGxfZ3JlZW4nXSxcbiAgICAgICAgICAgICAgICBbWydSJywgJ0gnLCAnSyddLCAnbGlnaHRfYmx1ZSddLFxuICAgICAgICAgICAgICAgIFtbJ0QnLCAnRSddLCAnZGFya19ibHVlJ10sXG4gICAgICAgICAgICAgICAgW1snUycsICdUJywgJ04nLCAnUSddLCAnb3JhbmdlJ10sXG4gICAgICAgICAgICBdLCBmYWxzZSwgQW1pbm9hY2lkc1BhbGV0dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ncm9rR3JvdXBzO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IFJhc01vbCgpIHtcbiAgICAgICAgaWYgKHRoaXMucmFzTW9sID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHRoaXMucmFzTW9sID0gbmV3IEFtaW5vYWNpZHNQYWxldHRlcyh7XG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL2FjY2VzLmVucy1seW9uLmZyL2Jpb3RpYy9yYXN0b3AvaGVscC9jb2xvdXIuaHRtXG4gICAgICAgICAgICAgICAgJ0QnOiAnI0U2MEEwQScsXG4gICAgICAgICAgICAgICAgJ0UnOiAnI0U2MEEwQScsXG4gICAgICAgICAgICAgICAgJ0MnOiAnI0U2RTYwMCcsXG4gICAgICAgICAgICAgICAgJ00nOiAnI0U2RTYwMCcsXG4gICAgICAgICAgICAgICAgJ0snOiAnIzE0NUFGRicsXG4gICAgICAgICAgICAgICAgJ1InOiAnIzE0NUFGRicsXG4gICAgICAgICAgICAgICAgJ1MnOiAnI0ZBOTYwMCcsXG4gICAgICAgICAgICAgICAgJ1QnOiAnI0ZBOTYwMCcsXG4gICAgICAgICAgICAgICAgJ0YnOiAnIzMyMzJBQScsXG4gICAgICAgICAgICAgICAgJ1knOiAnIzMyMzJBQScsXG4gICAgICAgICAgICAgICAgJ04nOiAnIzAwRENEQycsXG4gICAgICAgICAgICAgICAgJ1EnOiAnIzAwRENEQycsXG4gICAgICAgICAgICAgICAgJ0cnOiAnI0VCRUJFQicsXG4gICAgICAgICAgICAgICAgJ0wnOiAnIzBGODIwRicsXG4gICAgICAgICAgICAgICAgJ1YnOiAnIzBGODIwRicsXG4gICAgICAgICAgICAgICAgJ0knOiAnIzBGODIwRicsXG4gICAgICAgICAgICAgICAgJ0EnOiAnI0M4QzhDOCcsXG4gICAgICAgICAgICAgICAgJ1cnOiAnI0I0NUFCNCcsXG4gICAgICAgICAgICAgICAgJ0gnOiAnIzgyODJEMicsXG4gICAgICAgICAgICAgICAgJ1AnOiAnI0RDOTY4MicsXG4gICAgICAgICAgICAgICAgJ290aGVycyc6ICcjQkVBMDZFJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJhc01vbDtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQW1pbm9hY2lkcyB7XG4gICAgc3RhdGljIGdldFBhbGV0dGUoc2NoZW1lID0gJ2dyb2snKSB7XG4gICAgICAgIHN3aXRjaCAoc2NoZW1lKSB7XG4gICAgICAgICAgICBjYXNlICdncm9rJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHM7XG4gICAgICAgICAgICBjYXNlICdsZXNrJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQW1pbm9hY2lkc1BhbGV0dGVzLkxlc2s7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2hlbVBhbGV0dGU6IHNjaGVtZSBcXGAke3NjaGVtZX1cXGAgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGRpdmlkZWQgYW1pbm8gYWNpZCB3aXRoIGl0cyBjb250ZW50IGluIHRoZSBicmFja2V0LCBpZiB0aGUgY29udGVudCBpcyBudW1iZXIsIHRoZW4gaXRzIG9taXR0ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjIHJhdyBhbWlub1xuICAgICAqIEByZXR1cm4ge1tzdHJpbmcsIHN0cmluZ119IG91dGVyIGFuZCBpbm5lciBjb250ZW50XG4gICAgICovXG4gICAgc3RhdGljIGdldElubmVyT3V0ZXIoYykge1xuICAgICAgICBsZXQgaXNJbm5lciA9IDA7XG4gICAgICAgIGxldCBpbm5lciA9ICcnO1xuICAgICAgICBsZXQgb3V0ZXIgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGMpIHtcbiAgICAgICAgICAgIGlmIChjaGFyID09ICcoJylcbiAgICAgICAgICAgICAgICBpc0lubmVyKys7XG4gICAgICAgICAgICBlbHNlIGlmIChjaGFyID09ICcpJylcbiAgICAgICAgICAgICAgICBpc0lubmVyLS07XG4gICAgICAgICAgICBlbHNlIGlmIChpc0lubmVyKVxuICAgICAgICAgICAgICAgIGlubmVyICs9IGNoYXI7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3V0ZXIgKz0gY2hhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlSW50KGlubmVyKSkgPyBbb3V0ZXIsICcnXSA6IFtvdXRlciwgaW5uZXJdO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0Q29sb3JBQVBpdm90KG1vbm9tZXIgPSAnJywgc2NoZW1lID0gJ2dyb2snKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAvL2NvbnN0IGNoZW1QYWxldHRlSW5zdGFuY2UgPSBBQVBhbGV0dGVzLkdyb2tHcm91cHMoKTtcbiAgICAgICAgY29uc3QgY2hlbVBhbGV0dGVJbnN0YW5jZSA9IHRoaXMuZ2V0UGFsZXR0ZShzY2hlbWUpO1xuICAgICAgICBsZXQgW291dGVyTW9ub21lciwgaW5uZXJNb25vbWVyXSA9IHRoaXMuZ2V0SW5uZXJPdXRlcihtb25vbWVyKTtcbiAgICAgICAgb3V0ZXJNb25vbWVyID0gKG91dGVyTW9ub21lci5sZW5ndGggPiA2ID8gYCR7b3V0ZXJNb25vbWVyLnNsaWNlKDAsIDMpfS4uLmAgOiBvdXRlck1vbm9tZXIpO1xuICAgICAgICBpbm5lck1vbm9tZXIgPSAoaW5uZXJNb25vbWVyLmxlbmd0aCA+IDYgPyBgJHtpbm5lck1vbm9tZXIuc2xpY2UoMCwgMyl9Li4uYCA6IGlubmVyTW9ub21lcik7XG4gICAgICAgIGlmIChtb25vbWVyLmxlbmd0aCA9PSAxIHx8IG1vbm9tZXJbMV0gPT0gJygnKSB7XG4gICAgICAgICAgICBjb25zdCBhbWlubyA9IChfYSA9IG1vbm9tZXJbMF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGFtaW5vIGluIGNoZW1QYWxldHRlSW5zdGFuY2UgP1xuICAgICAgICAgICAgICAgIFtjaGVtUGFsZXR0ZUluc3RhbmNlLmdldChhbWlubyksIGFtaW5vLCBpbm5lck1vbm9tZXIsIDFdIDpcbiAgICAgICAgICAgICAgICBbdGhpcy51bmRlZmluZWRDb2xvciwgb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXIsIDFdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb25vbWVyWzBdID09ICdkJyAmJiBtb25vbWVyWzFdIGluIGNoZW1QYWxldHRlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGlmIChtb25vbWVyLmxlbmd0aCA9PSAyIHx8IG1vbm9tZXJbMl0gPT0gJygnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYW1pbm8gPSAoX2IgPSBtb25vbWVyWzFdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYW1pbm8gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSA/XG4gICAgICAgICAgICAgICAgICAgIFtjaGVtUGFsZXR0ZUluc3RhbmNlLmdldChhbWlubyksIGFtaW5vLCBpbm5lck1vbm9tZXIsIDJdIDpcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMudW5kZWZpbmVkQ29sb3IsIG91dGVyTW9ub21lciwgaW5uZXJNb25vbWVyLCAyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobW9ub21lci5zdWJzdHJpbmcoMCwgMykgaW4gdGhpcy5BQUZ1bGxOYW1lcykge1xuICAgICAgICAgICAgaWYgKG1vbm9tZXIubGVuZ3RoID09IDMgfHwgbW9ub21lclszXSA9PSAnKCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbWlubyA9IHRoaXMuQUFGdWxsTmFtZXNbbW9ub21lci5zdWJzdHJpbmcoMCwgMyldO1xuICAgICAgICAgICAgICAgIHJldHVybiBhbWlubyBpbiBjaGVtUGFsZXR0ZUluc3RhbmNlID9cbiAgICAgICAgICAgICAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgM10gOlxuICAgICAgICAgICAgICAgICAgICBbdGhpcy51bmRlZmluZWRDb2xvciwgb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXIsIDNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoKF9jID0gbW9ub21lclswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnRvTG93ZXJDYXNlKCkpID09IG1vbm9tZXJbMF0pIHtcbiAgICAgICAgICAgIGlmIChtb25vbWVyLnN1YnN0cmluZygxLCAzKSBpbiB0aGlzLkFBRnVsbE5hbWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vbm9tZXIubGVuZ3RoID09IDQgfHwgbW9ub21lcls0XSA9PSAnKCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYW1pbm8gPSB0aGlzLkFBRnVsbE5hbWVzW21vbm9tZXIuc3Vic3RyaW5nKDEsIDMpXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFtaW5vIGluIGNoZW1QYWxldHRlSW5zdGFuY2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgNF0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMudW5kZWZpbmVkQ29sb3IsIG91dGVyTW9ub21lciwgaW5uZXJNb25vbWVyLCA0XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt0aGlzLnVuZGVmaW5lZENvbG9yLCBvdXRlck1vbm9tZXIsIGlubmVyTW9ub21lciwgMF07XG4gICAgfVxufVxuQW1pbm9hY2lkcy5TZW1UeXBlID0gJ0FtaW5vYWNpZHMnO1xuQW1pbm9hY2lkcy5TZW1UeXBlTXVsdGlwbGVBbGlnbm1lbnQgPSAnQW1pbm9hY2lkc011bHRpcGxlQWxpZ25tZW50JztcbkFtaW5vYWNpZHMudW5kZWZpbmVkQ29sb3IgPSAncmdiKDEwMCwxMDAsMTAwKSc7XG5BbWlub2FjaWRzLk5hbWVzID0ge1xuICAgICdHJzogJ0dseWNpbmUnLFxuICAgICdMJzogJ0xldWNpbmUnLFxuICAgICdZJzogJ1R5cm9zaW5lJyxcbiAgICAnUyc6ICdTZXJpbmUnLFxuICAgICdFJzogJ0dsdXRhbWljIGFjaWQnLFxuICAgICdRJzogJ0dsdXRhbWluZScsXG4gICAgJ0QnOiAnQXNwYXJ0aWMgYWNpZCcsXG4gICAgJ04nOiAnQXNwYXJhZ2luZScsXG4gICAgJ0YnOiAnUGhlbnlsYWxhbmluZScsXG4gICAgJ0EnOiAnQWxhbmluZScsXG4gICAgJ0snOiAnTHlzaW5lJyxcbiAgICAnUic6ICdBcmdpbmluZScsXG4gICAgJ0gnOiAnSGlzdGlkaW5lJyxcbiAgICAnQyc6ICdDeXN0ZWluZScsXG4gICAgJ1YnOiAnVmFsaW5lJyxcbiAgICAnUCc6ICdQcm9saW5lJyxcbiAgICAnVyc6ICdUcnlwdG9waGFuJyxcbiAgICAnSSc6ICdJc29sZXVjaW5lJyxcbiAgICAnTSc6ICdNZXRoaW9uaW5lJyxcbiAgICAnVCc6ICdUaHJlb25pbmUnLFxufTtcbkFtaW5vYWNpZHMuQUFTbWlsZXMgPSB7XG4gICAgJ0cnOiAnTkNDKD1PKU8nLFxuICAgICdMJzogJ05bQ0BIXShDQyhDKUMpQyg9TylPJyxcbiAgICAnWSc6ICdOQyhDQzE9Q0M9QyhPKUM9QzEpQyg9TylPJyxcbiAgICAnUyc6ICdOQyhDTylDKD1PKU8nLFxuICAgICdFJzogJ05bQ0BASF0oQ0NDKE8pPU8pQyg9TylPJyxcbiAgICAnUSc6ICdOW0NAQEhdKENDQyhOKT1PKUMoPU8pTycsXG4gICAgJ0QnOiAnTltDQEBIXShDQyhPKT1PKUMoPU8pTycsXG4gICAgJ04nOiAnTltDQEBIXShDQyhOKT1PKUMoPU8pTycsXG4gICAgJ0YnOiAnTkMoQ0MxPUNDPUNDPUMxKUMoPU8pTycsXG4gICAgJ0EnOiAnTltDQEhdKEMpQyg9TylPJyxcbiAgICAnSyc6ICdOQyhDQ0NDTilDKD1PKU8nLFxuICAgICdSJzogJ05bQ0BIXShDQ0NOQyg9TilDKUMoPU8pTycsXG4gICAgJ0gnOiAnTkMoQ0MxPUNOPUNbTl0xKUMoPU8pTycsXG4gICAgJ0MnOiAnTltDQEBIXShDUylDKD1PKU8nLFxuICAgICdWJzogJ05DKEMoQylDKUMoPU8pTycsXG4gICAgJ1AnOiAnTihDQ0MxKUMxQyg9TylPJyxcbiAgICAnVyc6ICdOW0NAQEhdKENjMWMyY2NjY2MybihbSF0pYzEpQyg9TylPJyxcbiAgICAnSSc6ICdOW0NASF0oW0NASF0oQylDQylDKD1PKU8nLFxuICAgICdNJzogJ05DKENDU0MpQyg9TylPJyxcbiAgICAnVCc6ICdOQyhDKE8pQylDKD1PKU8nLFxufTtcbkFtaW5vYWNpZHMuQUFTbWlsZXNUcnVuY2F0ZWQgPSB7XG4gICAgJ0cnOiAnKkMqJyxcbiAgICAnTCc6ICdDQyhDKUNbQ0BIXSgqKSonLFxuICAgICdZJzogJ0MxPUNDKD1DQz1DMUNDKCopKilPJyxcbiAgICAnUyc6ICdPQ0MoKilDKicsXG4gICAgJ0UnOiAnKltDQEBIXShDQ0MoTyk9TykqJyxcbiAgICAnUSc6ICcqTltDQEBIXShDQ0MoTik9TykqJyxcbiAgICAnRCc6ICcqW0NAQEhdKENDKE8pPU8pKicsXG4gICAgJ04nOiAnKltDQEBIXShDQyhOKT1PKSonLFxuICAgICdGJzogJ0MxPUNDPUMoQz1DMSlDQygqKSonLFxuICAgICdBJzogJ0NbQ0BIXSgqKSonLFxuICAgICdLJzogJ0MoQ0NOKUNDKCopKicsXG4gICAgJ1InOiAnKltDQEhdKENDQ05DKD1OKUMpKicsXG4gICAgJ0gnOiAnQzE9QyhOQz1OMSlDQygqKSonLFxuICAgICdDJzogJ0MoW0NAQEhdKCopKilTJyxcbiAgICAnVic6ICdDQyhDKUMoKikqJyxcbiAgICAnUCc6ICdDMUNDTigqKUMxKicsXG4gICAgJ1cnOiAnKltDQEBIXShDYzFjMmNjY2NjMm4oW0hdKWMxKSonLFxuICAgICdJJzogJ0NDW0NASF0oQylbQ0BIXSgqKSonLFxuICAgICdNJzogJ0NTQ0NDKCopKicsXG4gICAgJ1QnOiAnQ0MoTylDKCopKicsXG59O1xuLyoqIFRPRE86IEZ1bGw/XG4gKi9cbkFtaW5vYWNpZHMuQUFGdWxsTmFtZXMgPSB7XG4gICAgJ0FsYSc6ICdBJyxcbiAgICAnQXJnJzogJ1InLFxuICAgICdBc24nOiAnTicsXG4gICAgJ0FzcCc6ICdEJyxcbiAgICAnQ3lzJzogJ0MnLFxuICAgICdHbG4nOiAnUScsXG4gICAgJ0dsdSc6ICdFJyxcbiAgICAnR2x5JzogJ0cnLFxuICAgICdIaXMnOiAnSCcsXG4gICAgJ0lsZSc6ICdJJyxcbiAgICAnTGV1JzogJ0wnLFxuICAgICdMeXMnOiAnSycsXG4gICAgJ01ldCc6ICdNJyxcbiAgICAnUGhlJzogJ0YnLFxuICAgICdQcm8nOiAnUCcsXG4gICAgJ1Nlcic6ICdTJyxcbiAgICAnVGhyJzogJ1QnLFxuICAgICdUcnAnOiAnVycsXG4gICAgJ1R5cic6ICdZJyxcbiAgICAnVmFsJzogJ1YnLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVlXMXBibTloWTJsa2N5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW1GdGFXNXZZV05wWkhNdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJTMEVzVDBGQlR5eEZRVUZoTEdOQlFXTXNSVUZCUXl4TlFVRk5MR2RDUVVGblFpeERRVUZETzBGQlJURkVMRTFCUVUwc1QwRkJUeXhyUWtGQmJVSXNVMEZCVVN4alFVRmpPMGxCUnpkRExFMUJRVTBzUzBGQlN5eEpRVUZKTzFGQlEzQkNMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUzBGQlN5eExRVUZMTEVOQlFVTXNSVUZCUlR0WlFVTjRRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNN1owSkJRek5DTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNN1owSkJRMmhETEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJRenRuUWtGRE5VUXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVWQlFVVXNVMEZCVXl4RFFVRkRPMmRDUVVNMVFpeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF6dG5Ra0ZEYmtJc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNSVUZCUlN4VlFVRlZMRU5CUVVNN1lVRkRla0lzUlVGQlJTeExRVUZMTEVWQlFVVXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dFRRVU12UWp0UlFVTkVMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF6dEpRVU51UWl4RFFVRkRPMGxCU1Uwc1RVRkJUU3hMUVVGTExGVkJRVlU3VVVGRE1VSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1ZVRkJWU3hMUVVGTExFdEJRVXNzUTBGQlF5eEZRVUZGTzFsQlF6bENMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXp0blFrRkRha01zUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3hSUVVGUkxFTkJRVU03WjBKQlEzUkNMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRPMmRDUVVOdVFpeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZGTEZkQlFWY3NRMEZCUXp0blFrRkRka1FzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFVkJRVVVzV1VGQldTeERRVUZETzJkQ1FVTXZRaXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJRenRuUWtGRGVrSXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMRkZCUVZFc1EwRkJRenRoUVVOcVF5eEZRVUZGTEV0QlFVc3NSVUZCUlN4clFrRkJhMElzUTBGQlF5eERRVUZETzFOQlF5OUNPMUZCUTBRc1QwRkJUeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETzBsQlEzcENMRU5CUVVNN1NVRkpUU3hOUVVGTkxFdEJRVXNzVFVGQlRUdFJRVU4wUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFdEJRVXNzUzBGQlN5eERRVUZETEVWQlFVVTdXVUZETVVJc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEd0Q1FVRnJRaXhEUVVGRE8yZENRVU51UXl4NVJFRkJlVVE3WjBKQlEzcEVMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xGRkJRVkVzUlVGQlJTeFRRVUZUTzJGQlEzQkNMRU5CUVVNc1EwRkJRenRUUVVOS08xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUTNKQ0xFTkJRVU03UTBGRFJqdEJRVVZFTEUxQlFVMHNUMEZCVHl4VlFVRlZPMGxCY1Vka0xFMUJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNVMEZCYVVJc1RVRkJUVHRSUVVNNVF5eFJRVUZSTEUxQlFVMHNSVUZCUlR0WlFVTm9RaXhMUVVGTExFMUJRVTA3WjBKQlExUXNUMEZCVHl4clFrRkJhMElzUTBGQlF5eFZRVUZWTEVOQlFVTTdXVUZEZGtNc1MwRkJTeXhOUVVGTk8yZENRVU5VTEU5QlFVOHNhMEpCUVd0Q0xFTkJRVU1zU1VGQlNTeERRVUZETzFsQlEycERPMmRDUVVORkxFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNlVUpCUVhsQ0xFMUJRVTBzYlVKQlFXMUNMRU5CUVVNc1EwRkJRenRUUVVOeVJUdEpRVU5JTEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTkpMRTFCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUTBGQlV6dFJRVU51UXl4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGFFSXNTVUZCU1N4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMllzU1VGQlNTeExRVUZMTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUldZc1MwRkJTeXhOUVVGTkxFbEJRVWtzU1VGQlNTeERRVUZETEVWQlFVVTdXVUZEY0VJc1NVRkJTU3hKUVVGSkxFbEJRVWtzUjBGQlJ6dG5Ra0ZEWWl4UFFVRlBMRVZCUVVVc1EwRkJRenRwUWtGRFVDeEpRVUZKTEVsQlFVa3NTVUZCU1N4SFFVRkhPMmRDUVVOc1FpeFBRVUZQTEVWQlFVVXNRMEZCUXp0cFFrRkRVQ3hKUVVGSkxFOUJRVTg3WjBKQlEyUXNTMEZCU3l4SlFVRkpMRWxCUVVrc1EwRkJRenM3WjBKQlJXUXNTMEZCU3l4SlFVRkpMRWxCUVVrc1EwRkJRenRUUVVOcVFqdFJRVVZFTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dEpRVU5vUlN4RFFVRkRPMGxCUlUwc1RVRkJUU3hEUVVGRExHVkJRV1VzUTBGQlF5eFZRVUZyUWl4RlFVRkZMRVZCUVVVc1UwRkJhVUlzVFVGQlRUczdVVUZEZWtVc2MwUkJRWE5FTzFGQlEzUkVMRTFCUVUwc2JVSkJRVzFDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU53UkN4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRkxGbEJRVmtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGREwwUXNXVUZCV1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1dVRkJXU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdVVUZETTBZc1dVRkJXU3hIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzV1VGQldTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkZNMFlzU1VGQlNTeFBRVUZQTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1NVRkJTU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSMEZCUnl4RlFVRkZPMWxCUXpWRExFMUJRVTBzUzBGQlN5eEhRVUZITEUxQlFVRXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXd3UTBGQlJTeFhRVUZYTEVWQlFVY3NRMEZCUXp0WlFVTjZReXhQUVVGUExFdEJRVXNzU1VGQlNTeHRRa0ZCYlVJc1EwRkJReXhEUVVGRE8yZENRVU51UXl4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzV1VGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRekZFTEVOQlFVTXNTVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSU3haUVVGWkxFVkJRVVVzV1VGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNoRU8xRkJSVVFzU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVVXNTVUZCU1N4dFFrRkJiVUlzUlVGQlJUdFpRVU16UkN4SlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGSExFVkJRVVU3WjBKQlF6VkRMRTFCUVUwc1MwRkJTeXhIUVVGSExFMUJRVUVzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl3d1EwRkJSU3hYUVVGWExFVkJRVWNzUTBGQlF6dG5Ra0ZEZWtNc1QwRkJUeXhMUVVGTExFbEJRVWtzYlVKQlFXMUNMRU5CUVVNc1EwRkJRenR2UWtGRGJrTXNRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVc1MwRkJTeXhGUVVGRkxGbEJRVmtzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVNeFJDeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRVZCUVVVc1dVRkJXU3hGUVVGRkxGbEJRVmtzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTjRSRHRUUVVOR08xRkJSVVFzU1VGQlNTeFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNWMEZCVnl4RlFVRkZPMWxCUXk5RExFbEJRVWtzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlR0blFrRkROVU1zVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhQUVVGUExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU40UkN4UFFVRlBMRXRCUVVzc1NVRkJTU3h0UWtGQmJVSXNRMEZCUXl4RFFVRkRPMjlDUVVOdVF5eERRVUZETEcxQ1FVRnRRaXhEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4TFFVRkxMRVZCUVVVc1dVRkJXU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdiMEpCUXpGRUxFTkJRVU1zU1VGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4WlFVRlpMRVZCUVVVc1dVRkJXU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzJGQlEzaEVPMU5CUTBZN1VVRkZSQ3hKUVVGSkxFTkJRVUVzVFVGQlFTeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMREJEUVVGRkxGZEJRVmNzUlVGQlJTeExRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSVHRaUVVNelF5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVVN1owSkJReTlETEVsQlFVa3NUMEZCVHl4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRWRCUVVjc1JVRkJSVHR2UWtGRE5VTXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTjRSQ3hQUVVGUExFdEJRVXNzU1VGQlNTeHRRa0ZCYlVJc1EwRkJReXhEUVVGRE8zZENRVU51UXl4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzV1VGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRekZFTEVOQlFVTXNTVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSU3haUVVGWkxFVkJRVVVzV1VGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmxDUVVONFJEdGhRVU5HTzFOQlEwWTdVVUZGUkN4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeFpRVUZaTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRemxFTEVOQlFVTTdPMEZCY0V4bExHdENRVUZQTEVkQlFWY3NXVUZCV1N4RFFVRkRPMEZCUlM5Q0xHMURRVUYzUWl4SFFVRlhMRFpDUVVFMlFpeERRVUZETzBGQlJURkZMSGxDUVVGakxFZEJRVWNzYTBKQlFXdENMRU5CUVVNN1FVRkZOMElzWjBKQlFVc3NSMEZCY1VJN1NVRkRkRU1zUjBGQlJ5eEZRVUZGTEZOQlFWTTdTVUZEWkN4SFFVRkhMRVZCUVVVc1UwRkJVenRKUVVOa0xFZEJRVWNzUlVGQlJTeFZRVUZWTzBsQlEyWXNSMEZCUnl4RlFVRkZMRkZCUVZFN1NVRkRZaXhIUVVGSExFVkJRVVVzWlVGQlpUdEpRVU53UWl4SFFVRkhMRVZCUVVVc1YwRkJWenRKUVVOb1FpeEhRVUZITEVWQlFVVXNaVUZCWlR0SlFVTndRaXhIUVVGSExFVkJRVVVzV1VGQldUdEpRVU5xUWl4SFFVRkhMRVZCUVVVc1pVRkJaVHRKUVVOd1FpeEhRVUZITEVWQlFVVXNVMEZCVXp0SlFVTmtMRWRCUVVjc1JVRkJSU3hSUVVGUk8wbEJRMklzUjBGQlJ5eEZRVUZGTEZWQlFWVTdTVUZEWml4SFFVRkhMRVZCUVVVc1YwRkJWenRKUVVOb1FpeEhRVUZITEVWQlFVVXNWVUZCVlR0SlFVTm1MRWRCUVVjc1JVRkJSU3hSUVVGUk8wbEJRMklzUjBGQlJ5eEZRVUZGTEZOQlFWTTdTVUZEWkN4SFFVRkhMRVZCUVVVc1dVRkJXVHRKUVVOcVFpeEhRVUZITEVWQlFVVXNXVUZCV1R0SlFVTnFRaXhIUVVGSExFVkJRVVVzV1VGQldUdEpRVU5xUWl4SFFVRkhMRVZCUVVVc1YwRkJWenREUVVOcVFpeERRVUZETzBGQlJWa3NiVUpCUVZFc1IwRkJjVUk3U1VGRGVrTXNSMEZCUnl4RlFVRkZMRlZCUVZVN1NVRkRaaXhIUVVGSExFVkJRVVVzYzBKQlFYTkNPMGxCUXpOQ0xFZEJRVWNzUlVGQlJTd3lRa0ZCTWtJN1NVRkRhRU1zUjBGQlJ5eEZRVUZGTEdOQlFXTTdTVUZEYmtJc1IwRkJSeXhGUVVGRkxIbENRVUY1UWp0SlFVTTVRaXhIUVVGSExFVkJRVVVzZVVKQlFYbENPMGxCUXpsQ0xFZEJRVWNzUlVGQlJTeDNRa0ZCZDBJN1NVRkROMElzUjBGQlJ5eEZRVUZGTEhkQ1FVRjNRanRKUVVNM1FpeEhRVUZITEVWQlFVVXNkMEpCUVhkQ08wbEJRemRDTEVkQlFVY3NSVUZCUlN4cFFrRkJhVUk3U1VGRGRFSXNSMEZCUnl4RlFVRkZMR2xDUVVGcFFqdEpRVU4wUWl4SFFVRkhMRVZCUVVVc01FSkJRVEJDTzBsQlF5OUNMRWRCUVVjc1JVRkJSU3gzUWtGQmQwSTdTVUZETjBJc1IwRkJSeXhGUVVGRkxHMUNRVUZ0UWp0SlFVTjRRaXhIUVVGSExFVkJRVVVzYVVKQlFXbENPMGxCUTNSQ0xFZEJRVWNzUlVGQlJTeHBRa0ZCYVVJN1NVRkRkRUlzUjBGQlJ5eEZRVUZGTEc5RFFVRnZRenRKUVVONlF5eEhRVUZITEVWQlFVVXNNRUpCUVRCQ08wbEJReTlDTEVkQlFVY3NSVUZCUlN4blFrRkJaMEk3U1VGRGNrSXNSMEZCUnl4RlFVRkZMR2xDUVVGcFFqdERRVU4yUWl4RFFVRkRPMEZCUlZrc05FSkJRV2xDTEVkQlFYRkNPMGxCUTJ4RUxFZEJRVWNzUlVGQlJTeExRVUZMTzBsQlExWXNSMEZCUnl4RlFVRkZMR2xDUVVGcFFqdEpRVU4wUWl4SFFVRkhMRVZCUVVVc2MwSkJRWE5DTzBsQlF6TkNMRWRCUVVjc1JVRkJSU3hWUVVGVk8wbEJRMllzUjBGQlJ5eEZRVUZGTEc5Q1FVRnZRanRKUVVONlFpeEhRVUZITEVWQlFVVXNjVUpCUVhGQ08wbEJRekZDTEVkQlFVY3NSVUZCUlN4dFFrRkJiVUk3U1VGRGVFSXNSMEZCUnl4RlFVRkZMRzFDUVVGdFFqdEpRVU40UWl4SFFVRkhMRVZCUVVVc2NVSkJRWEZDTzBsQlF6RkNMRWRCUVVjc1JVRkJSU3haUVVGWk8wbEJRMnBDTEVkQlFVY3NSVUZCUlN4alFVRmpPMGxCUTI1Q0xFZEJRVWNzUlVGQlJTeHhRa0ZCY1VJN1NVRkRNVUlzUjBGQlJ5eEZRVUZGTEcxQ1FVRnRRanRKUVVONFFpeEhRVUZITEVWQlFVVXNaMEpCUVdkQ08wbEJRM0pDTEVkQlFVY3NSVUZCUlN4WlFVRlpPMGxCUTJwQ0xFZEJRVWNzUlVGQlJTeGhRVUZoTzBsQlEyeENMRWRCUVVjc1JVRkJSU3dyUWtGQkswSTdTVUZEY0VNc1IwRkJSeXhGUVVGRkxIRkNRVUZ4UWp0SlFVTXhRaXhIUVVGSExFVkJRVVVzVjBGQlZ6dEpRVU5vUWl4SFFVRkhMRVZCUVVVc1dVRkJXVHREUVVOc1FpeERRVUZETzBGQlJVWTdSMEZEUnp0QlFVTlhMSE5DUVVGWExFZEJRWEZDTzBsQlF6VkRMRXRCUVVzc1JVRkJSU3hIUVVGSE8wbEJRMVlzUzBGQlN5eEZRVUZGTEVkQlFVYzdTVUZEVml4TFFVRkxMRVZCUVVVc1IwRkJSenRKUVVOV0xFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1NVRkRWaXhMUVVGTExFVkJRVVVzUjBGQlJ6dEpRVU5XTEV0QlFVc3NSVUZCUlN4SFFVRkhPMGxCUTFZc1MwRkJTeXhGUVVGRkxFZEJRVWM3U1VGRFZpeExRVUZMTEVWQlFVVXNSMEZCUnp0SlFVTldMRXRCUVVzc1JVRkJSU3hIUVVGSE8wbEJRMVlzUzBGQlN5eEZRVUZGTEVkQlFVYzdTVUZEVml4TFFVRkxMRVZCUVVVc1IwRkJSenRKUVVOV0xFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1NVRkRWaXhMUVVGTExFVkJRVVVzUjBGQlJ6dEpRVU5XTEV0QlFVc3NSVUZCUlN4SFFVRkhPMGxCUTFZc1MwRkJTeXhGUVVGRkxFZEJRVWM3U1VGRFZpeExRVUZMTEVWQlFVVXNSMEZCUnp0SlFVTldMRXRCUVVzc1JVRkJSU3hIUVVGSE8wbEJRMVlzUzBGQlN5eEZRVUZGTEVkQlFVYzdRMEZEV0N4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJQ29nWVhNZ1ozSnZheUJtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2WjNKdmF5YzdYRzVwYlhCdmNuUWdLaUJoY3lCMWFTQm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZkV2tuTzF4dWFXMXdiM0owSUNvZ1lYTWdSRWNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibHh1YVcxd2IzSjBJSHRUZEhKcGJtZEVhV04wYVc5dVlYSjVmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMM1YwYVd4ekwzTnlZeTkwZVhCbExXUmxZMnhoY21GMGFXOXVjeWM3WEc1cGJYQnZjblFnZTFObGNWQmhiR1YwZEdVc0lGTmxjVkJoYkdWMGRHVkNZWE5sZlNCbWNtOXRJQ2N1TDNObGNTMXdZV3hsZEhSbGN5YzdYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QkJiV2x1YjJGamFXUnpVR0ZzWlhSMFpYTWdaWGgwWlc1a2N5QlRaWEZRWVd4bGRIUmxRbUZ6WlNCN1hHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHeGxjMnM2SUZObGNWQmhiR1YwZEdVN1hHNWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5Qm5aWFFnVEdWemF5Z3BPaUJUWlhGUVlXeGxkSFJsSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVzWlhOcklEMDlQU0IyYjJsa0lEQXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWJHVnpheUE5SUhSb2FYTXViV0ZyWlZCaGJHVjBkR1VvVzF4dUlDQWdJQ0FnSUNCYld5ZEhKeXdnSjBFbkxDQW5VeWNzSUNkVUoxMHNJQ2R2Y21GdVoyVW5YU3hjYmlBZ0lDQWdJQ0FnVzFzblF5Y3NJQ2RXSnl3Z0owa25MQ0FuVENjc0lDZFFKeXdnSjBZbkxDQW5XU2NzSUNkTkp5d2dKMWNuWFN3Z0oyRnNiRjluY21WbGJpZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkT0p5d2dKMUVuTENBblNDZGRMQ0FuYldGblpXNTBZU2RkTEZ4dUlDQWdJQ0FnSUNCYld5ZEVKeXdnSjBVblhTd2dKM0psWkNkZExGeHVJQ0FnSUNBZ0lDQmJXeWRMSnl3Z0oxSW5YU3dnSjJGc2JGOWliSFZsSjEwc1hHNGdJQ0FnSUNCZExDQm1ZV3h6WlN3Z1FXMXBibTloWTJsa2MxQmhiR1YwZEdWektUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWJHVnphenRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR2R5YjJ0SGNtOTFjSE02SUZObGNWQmhiR1YwZEdVN1hHNWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5Qm5aWFFnUjNKdmEwZHliM1Z3Y3lncE9pQlRaWEZRWVd4bGRIUmxJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NW5jbTlyUjNKdmRYQnpJRDA5UFNCMmIybGtJREFwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVaM0p2YTBkeWIzVndjeUE5SUhSb2FYTXViV0ZyWlZCaGJHVjBkR1VvVzF4dUlDQWdJQ0FnSUNCYld5ZERKeXdnSjFVblhTd2dKM2xsYkd4dmR5ZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkSEp5d2dKMUFuWFN3Z0ozSmxaQ2RkTEZ4dUlDQWdJQ0FnSUNCYld5ZEJKeXdnSjFZbkxDQW5TU2NzSUNkTUp5d2dKMDBuTENBblJpY3NJQ2RaSnl3Z0oxY25YU3dnSjJGc2JGOW5jbVZsYmlkZExGeHVJQ0FnSUNBZ0lDQmJXeWRTSnl3Z0owZ25MQ0FuU3lkZExDQW5iR2xuYUhSZllteDFaU2RkTEZ4dUlDQWdJQ0FnSUNCYld5ZEVKeXdnSjBVblhTd2dKMlJoY210ZllteDFaU2RkTEZ4dUlDQWdJQ0FnSUNCYld5ZFRKeXdnSjFRbkxDQW5UaWNzSUNkUkoxMHNJQ2R2Y21GdVoyVW5YU3hjYmlBZ0lDQWdJRjBzSUdaaGJITmxMQ0JCYldsdWIyRmphV1J6VUdGc1pYUjBaWE1wTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVuY205clIzSnZkWEJ6TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nY21GelRXOXNPaUJUWlhGUVlXeGxkSFJsTzF4dVhHNGdJSEIxWW14cFl5QnpkR0YwYVdNZ1oyVjBJRkpoYzAxdmJDZ3BPaUJUWlhGUVlXeGxkSFJsSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV5WVhOTmIyd2dQVDA5SUhadmFXUWdNQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NXlZWE5OYjJ3Z1BTQnVaWGNnUVcxcGJtOWhZMmxrYzFCaGJHVjBkR1Z6S0h0Y2JpQWdJQ0FnSUNBZ0x5OGdhSFIwY0RvdkwyRmpZMlZ6TG1WdWN5MXNlVzl1TG1aeUwySnBiM1JwWXk5eVlYTjBiM0F2YUdWc2NDOWpiMnh2ZFhJdWFIUnRYRzRnSUNBZ0lDQWdJQ2RFSnpvZ0p5TkZOakJCTUVFbkxDQXZMeUJoYzNBc0lHRnpjR0Z5ZEdsaklHRmphV1FzSUdGemNGeHVJQ0FnSUNBZ0lDQW5SU2M2SUNjalJUWXdRVEJCSnl3Z0x5OGdaMngxTENCbmJIVjBZVzFwWXlCaFkybGtYRzRnSUNBZ0lDQWdJQ2RESnpvZ0p5TkZOa1UyTURBbkxDQXZMeUJqZVhNc0lHTjVjM1JsYVc1bFhHNGdJQ0FnSUNBZ0lDZE5Kem9nSnlORk5rVTJNREFuTENBdkx5QnRaWFFzSUcxbGRHaHBiMjVwYm1WY2JpQWdJQ0FnSUNBZ0owc25PaUFuSXpFME5VRkdSaWNzSUM4dklHeDVjeXdnYkhsemFXNWxYRzRnSUNBZ0lDQWdJQ2RTSnpvZ0p5TXhORFZCUmtZbkxDQXZMeUJoY21jc0lHRnlaMmx1YVc1bFhHNGdJQ0FnSUNBZ0lDZFRKem9nSnlOR1FUazJNREFuTENBdkx5QnpaWElzSUhObGNtbHVaVnh1SUNBZ0lDQWdJQ0FuVkNjNklDY2pSa0U1TmpBd0p5d2dMeThnZEdoeUxDQjBhSEpsYjI1cGJtVmNiaUFnSUNBZ0lDQWdKMFluT2lBbkl6TXlNekpCUVNjc0lDOHZJSEJvWlN3Z2NHaGxibmxzWVd4aGJtbHVaVnh1SUNBZ0lDQWdJQ0FuV1NjNklDY2pNekl6TWtGQkp5d2dMeThnZEhseUxDQjBlWEp2YzJsdVpWeHVJQ0FnSUNBZ0lDQW5UaWM2SUNjak1EQkVRMFJESnl3Z0x5OGdZWE51TENCaGMzQmhjbUZuYVc1bFhHNGdJQ0FnSUNBZ0lDZFJKem9nSnlNd01FUkRSRU1uTENBdkx5Qm5iRzRzSUdkc2RYUmhiV2x1WlZ4dUlDQWdJQ0FnSUNBblJ5YzZJQ2NqUlVKRlFrVkNKeXdnTHk4Z1oyeDVMQ0JuYkhsamFXNWxYRzRnSUNBZ0lDQWdJQ2RNSnpvZ0p5TXdSamd5TUVZbkxDQXZMeUJzWlhVc0lHeGxkV05wYm1WY2JpQWdJQ0FnSUNBZ0oxWW5PaUFuSXpCR09ESXdSaWNzSUM4dklIWmhiQ3dnZG1Gc2FXNWxYRzRnSUNBZ0lDQWdJQ2RKSnpvZ0p5TXdSamd5TUVZbkxDQXZMeUJwYkdVc0lHbHpiMnhsZFdOcGJtVmNiaUFnSUNBZ0lDQWdKMEVuT2lBbkkwTTRRemhET0Njc0lDOHZJR0ZzWVN3Z1lXeGhibWx1WlZ4dUlDQWdJQ0FnSUNBblZ5YzZJQ2NqUWpRMVFVSTBKeXdnTHk4Z2RISndMQ0IwY25sd2RHOXdhR0Z1WEc0Z0lDQWdJQ0FnSUNkSUp6b2dKeU00TWpneVJESW5MQ0F2THlCb2FYTXNJR2hwYzNScFpHbHVaVnh1SUNBZ0lDQWdJQ0FuVUNjNklDY2pSRU01TmpneUp5d2dMeThnY0hKdkxDQndjbTlzYVc1bFhHNGdJQ0FnSUNBZ0lDZHZkR2hsY25Nbk9pQW5JMEpGUVRBMlJTY3NYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjbUZ6VFc5c08xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCQmJXbHViMkZqYVdSeklIdGNiaUFnYzNSaGRHbGpJSEpsWVdSdmJteDVJRk5sYlZSNWNHVTZJSE4wY21sdVp5QTlJQ2RCYldsdWIyRmphV1J6Snp0Y2JseHVJQ0J6ZEdGMGFXTWdjbVZoWkc5dWJIa2dVMlZ0Vkhsd1pVMTFiSFJwY0d4bFFXeHBaMjV0Wlc1ME9pQnpkSEpwYm1jZ1BTQW5RVzFwYm05aFkybGtjMDExYkhScGNHeGxRV3hwWjI1dFpXNTBKenRjYmx4dUlDQnpkR0YwYVdNZ2RXNWtaV1pwYm1Wa1EyOXNiM0lnUFNBbmNtZGlLREV3TUN3eE1EQXNNVEF3S1NjN1hHNWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5Qk9ZVzFsY3pvZ1UzUnlhVzVuUkdsamRHbHZibUZ5ZVNBOUlIdGNiaUFnSUNBblJ5YzZJQ2RIYkhsamFXNWxKeXhjYmlBZ0lDQW5UQ2M2SUNkTVpYVmphVzVsSnl4Y2JpQWdJQ0FuV1NjNklDZFVlWEp2YzJsdVpTY3NYRzRnSUNBZ0oxTW5PaUFuVTJWeWFXNWxKeXhjYmlBZ0lDQW5SU2M2SUNkSGJIVjBZVzFwWXlCaFkybGtKeXhjYmlBZ0lDQW5VU2M2SUNkSGJIVjBZVzFwYm1VbkxGeHVJQ0FnSUNkRUp6b2dKMEZ6Y0dGeWRHbGpJR0ZqYVdRbkxGeHVJQ0FnSUNkT0p6b2dKMEZ6Y0dGeVlXZHBibVVuTEZ4dUlDQWdJQ2RHSnpvZ0oxQm9aVzU1YkdGc1lXNXBibVVuTEZ4dUlDQWdJQ2RCSnpvZ0owRnNZVzVwYm1VbkxGeHVJQ0FnSUNkTEp6b2dKMHg1YzJsdVpTY3NYRzRnSUNBZ0oxSW5PaUFuUVhKbmFXNXBibVVuTEZ4dUlDQWdJQ2RJSnpvZ0owaHBjM1JwWkdsdVpTY3NYRzRnSUNBZ0owTW5PaUFuUTNsemRHVnBibVVuTEZ4dUlDQWdJQ2RXSnpvZ0oxWmhiR2x1WlNjc1hHNGdJQ0FnSjFBbk9pQW5VSEp2YkdsdVpTY3NYRzRnSUNBZ0oxY25PaUFuVkhKNWNIUnZjR2hoYmljc1hHNGdJQ0FnSjBrbk9pQW5TWE52YkdWMVkybHVaU2NzWEc0Z0lDQWdKMDBuT2lBblRXVjBhR2x2Ym1sdVpTY3NYRzRnSUNBZ0oxUW5PaUFuVkdoeVpXOXVhVzVsSnl4Y2JpQWdmVHRjYmx4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUVGQlUyMXBiR1Z6T2lCVGRISnBibWRFYVdOMGFXOXVZWEo1SUQwZ2UxeHVJQ0FnSUNkSEp6b2dKMDVEUXlnOVR5bFBKeXhjYmlBZ0lDQW5UQ2M2SUNkT1cwTkFTRjBvUTBNb1F5bERLVU1vUFU4cFR5Y3NYRzRnSUNBZ0oxa25PaUFuVGtNb1EwTXhQVU5EUFVNb1R5bERQVU14S1VNb1BVOHBUeWNzWEc0Z0lDQWdKMU1uT2lBblRrTW9RMDhwUXlnOVR5bFBKeXhjYmlBZ0lDQW5SU2M2SUNkT1cwTkFRRWhkS0VORFF5aFBLVDFQS1VNb1BVOHBUeWNzWEc0Z0lDQWdKMUVuT2lBblRsdERRRUJJWFNoRFEwTW9UaWs5VHlsREtEMVBLVThuTEZ4dUlDQWdJQ2RFSnpvZ0owNWJRMEJBU0Ywb1EwTW9UeWs5VHlsREtEMVBLVThuTEZ4dUlDQWdJQ2RPSnpvZ0owNWJRMEJBU0Ywb1EwTW9UaWs5VHlsREtEMVBLVThuTEZ4dUlDQWdJQ2RHSnpvZ0owNURLRU5ETVQxRFF6MURRejFETVNsREtEMVBLVThuTEZ4dUlDQWdJQ2RCSnpvZ0owNWJRMEJJWFNoREtVTW9QVThwVHljc1hHNGdJQ0FnSjBzbk9pQW5Ua01vUTBORFEwNHBReWc5VHlsUEp5eGNiaUFnSUNBblVpYzZJQ2RPVzBOQVNGMG9RME5EVGtNb1BVNHBReWxES0QxUEtVOG5MRnh1SUNBZ0lDZElKem9nSjA1REtFTkRNVDFEVGoxRFcwNWRNU2xES0QxUEtVOG5MRnh1SUNBZ0lDZERKem9nSjA1YlEwQkFTRjBvUTFNcFF5ZzlUeWxQSnl4Y2JpQWdJQ0FuVmljNklDZE9ReWhES0VNcFF5bERLRDFQS1U4bkxGeHVJQ0FnSUNkUUp6b2dKMDRvUTBORE1TbERNVU1vUFU4cFR5Y3NYRzRnSUNBZ0oxY25PaUFuVGx0RFFFQklYU2hEWXpGak1tTmpZMk5qTW00b1cwaGRLV014S1VNb1BVOHBUeWNzWEc0Z0lDQWdKMGtuT2lBblRsdERRRWhkS0Z0RFFFaGRLRU1wUTBNcFF5ZzlUeWxQSnl4Y2JpQWdJQ0FuVFNjNklDZE9ReWhEUTFOREtVTW9QVThwVHljc1hHNGdJQ0FnSjFRbk9pQW5Ua01vUXloUEtVTXBReWc5VHlsUEp5eGNiaUFnZlR0Y2JseHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklFRkJVMjFwYkdWelZISjFibU5oZEdWa09pQlRkSEpwYm1kRWFXTjBhVzl1WVhKNUlEMGdlMXh1SUNBZ0lDZEhKem9nSnlwREtpY3NYRzRnSUNBZ0owd25PaUFuUTBNb1F5bERXME5BU0Ywb0tpa3FKeXhjYmlBZ0lDQW5XU2M2SUNkRE1UMURReWc5UTBNOVF6RkRReWdxS1NvcFR5Y3NYRzRnSUNBZ0oxTW5PaUFuVDBOREtDb3BReW9uTEZ4dUlDQWdJQ2RGSnpvZ0p5cGJRMEJBU0Ywb1EwTkRLRThwUFU4cEtpY3NYRzRnSUNBZ0oxRW5PaUFuS2s1YlEwQkFTRjBvUTBOREtFNHBQVThwS2ljc1hHNGdJQ0FnSjBRbk9pQW5LbHREUUVCSVhTaERReWhQS1QxUEtTb25MRnh1SUNBZ0lDZE9Kem9nSnlwYlEwQkFTRjBvUTBNb1RpazlUeWtxSnl4Y2JpQWdJQ0FuUmljNklDZERNVDFEUXoxREtFTTlRekVwUTBNb0tpa3FKeXhjYmlBZ0lDQW5RU2M2SUNkRFcwTkFTRjBvS2lrcUp5eGNiaUFnSUNBblN5YzZJQ2RES0VORFRpbERReWdxS1NvbkxGeHVJQ0FnSUNkU0p6b2dKeXBiUTBCSVhTaERRME5PUXlnOVRpbERLU29uTEZ4dUlDQWdJQ2RJSnpvZ0owTXhQVU1vVGtNOVRqRXBRME1vS2lrcUp5eGNiaUFnSUNBblF5YzZJQ2RES0Z0RFFFQklYU2dxS1NvcFV5Y3NYRzRnSUNBZ0oxWW5PaUFuUTBNb1F5bERLQ29wS2ljc1hHNGdJQ0FnSjFBbk9pQW5RekZEUTA0b0tpbERNU29uTEZ4dUlDQWdJQ2RYSnpvZ0p5cGJRMEJBU0Ywb1EyTXhZekpqWTJOall6SnVLRnRJWFNsak1Ta3FKeXhjYmlBZ0lDQW5TU2M2SUNkRFExdERRRWhkS0VNcFcwTkFTRjBvS2lrcUp5eGNiaUFnSUNBblRTYzZJQ2REVTBORFF5Z3FLU29uTEZ4dUlDQWdJQ2RVSnpvZ0owTkRLRThwUXlncUtTb25MRnh1SUNCOU8xeHVYRzRnSUM4cUtpQlVUMFJQT2lCR2RXeHNQMXh1SUNBZ0tpOWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5QkJRVVoxYkd4T1lXMWxjem9nVTNSeWFXNW5SR2xqZEdsdmJtRnllU0E5SUh0Y2JpQWdJQ0FuUVd4aEp6b2dKMEVuTEZ4dUlDQWdJQ2RCY21jbk9pQW5VaWNzWEc0Z0lDQWdKMEZ6YmljNklDZE9KeXhjYmlBZ0lDQW5RWE53SnpvZ0owUW5MRnh1SUNBZ0lDZERlWE1uT2lBblF5Y3NYRzRnSUNBZ0owZHNiaWM2SUNkUkp5eGNiaUFnSUNBblIyeDFKem9nSjBVbkxGeHVJQ0FnSUNkSGJIa25PaUFuUnljc1hHNGdJQ0FnSjBocGN5YzZJQ2RJSnl4Y2JpQWdJQ0FuU1d4bEp6b2dKMGtuTEZ4dUlDQWdJQ2RNWlhVbk9pQW5UQ2NzWEc0Z0lDQWdKMHg1Y3ljNklDZExKeXhjYmlBZ0lDQW5UV1YwSnpvZ0owMG5MRnh1SUNBZ0lDZFFhR1VuT2lBblJpY3NYRzRnSUNBZ0oxQnlieWM2SUNkUUp5eGNiaUFnSUNBblUyVnlKem9nSjFNbkxGeHVJQ0FnSUNkVWFISW5PaUFuVkNjc1hHNGdJQ0FnSjFSeWNDYzZJQ2RYSnl4Y2JpQWdJQ0FuVkhseUp6b2dKMWtuTEZ4dUlDQWdJQ2RXWVd3bk9pQW5WaWNzWEc0Z0lIMDdYRzVjYmlBZ2NIVmliR2xqSUhOMFlYUnBZeUJuWlhSUVlXeGxkSFJsS0hOamFHVnRaVG9nYzNSeWFXNW5JRDBnSjJkeWIyc25LVG9nVTJWeFVHRnNaWFIwWlNCN1hHNGdJQ0FnYzNkcGRHTm9JQ2h6WTJobGJXVXBJSHRjYmlBZ0lDQmpZWE5sSUNkbmNtOXJKenBjYmlBZ0lDQWdJSEpsZEhWeWJpQkJiV2x1YjJGamFXUnpVR0ZzWlhSMFpYTXVSM0p2YTBkeWIzVndjenRjYmlBZ0lDQmpZWE5sSUNkc1pYTnJKenBjYmlBZ0lDQWdJSEpsZEhWeWJpQkJiV2x1YjJGamFXUnpVR0ZzWlhSMFpYTXVUR1Z6YXp0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkRhR1Z0VUdGc1pYUjBaVG9nYzJOb1pXMWxJRnhjWUNSN2MyTm9aVzFsZlZ4Y1lDQmtiMlZ6SUc1dmRDQmxlR2x6ZEdBcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklHUnBkbWxrWldRZ1lXMXBibThnWVdOcFpDQjNhWFJvSUdsMGN5QmpiMjUwWlc1MElHbHVJSFJvWlNCaWNtRmphMlYwTENCcFppQjBhR1VnWTI5dWRHVnVkQ0JwY3lCdWRXMWlaWElzSUhSb1pXNGdhWFJ6SUc5dGFYUjBaV1JjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdNZ2NtRjNJR0Z0YVc1dlhHNGdJQ0FxSUVCeVpYUjFjbTRnZTF0emRISnBibWNzSUhOMGNtbHVaMTE5SUc5MWRHVnlJR0Z1WkNCcGJtNWxjaUJqYjI1MFpXNTBYRzRnSUNBcUwxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklHZGxkRWx1Ym1WeVQzVjBaWElvWXpvZ2MzUnlhVzVuS1RvZ1czTjBjbWx1Wnl3Z2MzUnlhVzVuWFNCN1hHNGdJQ0FnYkdWMElHbHpTVzV1WlhJZ1BTQXdPMXh1SUNBZ0lHeGxkQ0JwYm01bGNpQTlJQ2NuTzF4dUlDQWdJR3hsZENCdmRYUmxjaUE5SUNjbk8xeHVYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQmphR0Z5SUc5bUlHTXBJSHRjYmlBZ0lDQWdJR2xtSUNoamFHRnlJRDA5SUNjb0p5bGNiaUFnSUNBZ0lDQWdhWE5KYm01bGNpc3JPMXh1SUNBZ0lDQWdaV3h6WlNCcFppQW9ZMmhoY2lBOVBTQW5LU2NwWEc0Z0lDQWdJQ0FnSUdselNXNXVaWEl0TFR0Y2JpQWdJQ0FnSUdWc2MyVWdhV1lnS0dselNXNXVaWElwWEc0Z0lDQWdJQ0FnSUdsdWJtVnlJQ3M5SUdOb1lYSTdYRzRnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUc5MWRHVnlJQ3M5SUdOb1lYSTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUNGcGMwNWhUaWh3WVhKelpVbHVkQ2hwYm01bGNpa3BJRDhnVzI5MWRHVnlMQ0FuSjEwZ09pQmJiM1YwWlhJc0lHbHVibVZ5WFR0Y2JpQWdmVnh1WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nWjJWMFEyOXNiM0pCUVZCcGRtOTBLRzF2Ym05dFpYSTZJSE4wY21sdVp5QTlJQ2NuTENCelkyaGxiV1U2SUNkbmNtOXJKeUE5SUNkbmNtOXJKeWs2SUZ0emRISnBibWNzSUhOMGNtbHVaeXdnYzNSeWFXNW5MQ0J1ZFcxaVpYSmRJSHRjYmlBZ0lDQXZMMk52Ym5OMElHTm9aVzFRWVd4bGRIUmxTVzV6ZEdGdVkyVWdQU0JCUVZCaGJHVjBkR1Z6TGtkeWIydEhjbTkxY0hNb0tUdGNiaUFnSUNCamIyNXpkQ0JqYUdWdFVHRnNaWFIwWlVsdWMzUmhibU5sSUQwZ2RHaHBjeTVuWlhSUVlXeGxkSFJsS0hOamFHVnRaU2s3WEc0Z0lDQWdiR1YwSUZ0dmRYUmxjazF2Ym05dFpYSXNJR2x1Ym1WeVRXOXViMjFsY2wwZ1BTQjBhR2x6TG1kbGRFbHVibVZ5VDNWMFpYSW9iVzl1YjIxbGNpazdYRzRnSUNBZ2IzVjBaWEpOYjI1dmJXVnlJRDBnS0c5MWRHVnlUVzl1YjIxbGNpNXNaVzVuZEdnZ1BpQTJJRDhnWUNSN2IzVjBaWEpOYjI1dmJXVnlMbk5zYVdObEtEQXNJRE1wZlM0dUxtQWdPaUJ2ZFhSbGNrMXZibTl0WlhJcE8xeHVJQ0FnSUdsdWJtVnlUVzl1YjIxbGNpQTlJQ2hwYm01bGNrMXZibTl0WlhJdWJHVnVaM1JvSUQ0Z05pQS9JR0FrZTJsdWJtVnlUVzl1YjIxbGNpNXpiR2xqWlNnd0xDQXpLWDB1TGk1Z0lEb2dhVzV1WlhKTmIyNXZiV1Z5S1R0Y2JseHVJQ0FnSUdsbUlDaHRiMjV2YldWeUxteGxibWQwYUNBOVBTQXhJSHg4SUcxdmJtOXRaWEpiTVYwZ1BUMGdKeWduS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JoYldsdWJ5QTlJRzF2Ym05dFpYSmJNRjAvTG5SdlZYQndaWEpEWVhObEtDa2hPMXh1SUNBZ0lDQWdjbVYwZFhKdUlHRnRhVzV2SUdsdUlHTm9aVzFRWVd4bGRIUmxTVzV6ZEdGdVkyVWdQMXh1SUNBZ0lDQWdJQ0JiWTJobGJWQmhiR1YwZEdWSmJuTjBZVzVqWlM1blpYUW9ZVzFwYm04cExDQmhiV2x1Ynl3Z2FXNXVaWEpOYjI1dmJXVnlMQ0F4WFNBNlhHNGdJQ0FnSUNBZ0lGdDBhR2x6TG5WdVpHVm1hVzVsWkVOdmJHOXlMQ0J2ZFhSbGNrMXZibTl0WlhJc0lHbHVibVZ5VFc5dWIyMWxjaXdnTVYwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHMXZibTl0WlhKYk1GMGdQVDBnSjJRbklDWW1JRzF2Ym05dFpYSmJNVjBoSUdsdUlHTm9aVzFRWVd4bGRIUmxTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQWdJR2xtSUNodGIyNXZiV1Z5TG14bGJtZDBhQ0E5UFNBeUlIeDhJRzF2Ym05dFpYSmJNbDBnUFQwZ0p5Z25LU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0Z0YVc1dklEMGdiVzl1YjIxbGNsc3hYVDh1ZEc5VmNIQmxja05oYzJVb0tTRTdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmhiV2x1YnlCcGJpQmphR1Z0VUdGc1pYUjBaVWx1YzNSaGJtTmxJRDljYmlBZ0lDQWdJQ0FnSUNCYlkyaGxiVkJoYkdWMGRHVkpibk4wWVc1alpTNW5aWFFvWVcxcGJtOHBMQ0JoYldsdWJ5d2dhVzV1WlhKTmIyNXZiV1Z5TENBeVhTQTZYRzRnSUNBZ0lDQWdJQ0FnVzNSb2FYTXVkVzVrWldacGJtVmtRMjlzYjNJc0lHOTFkR1Z5VFc5dWIyMWxjaXdnYVc1dVpYSk5iMjV2YldWeUxDQXlYVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYlc5dWIyMWxjaTV6ZFdKemRISnBibWNvTUN3Z015a2dhVzRnZEdocGN5NUJRVVoxYkd4T1lXMWxjeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHMXZibTl0WlhJdWJHVnVaM1JvSUQwOUlETWdmSHdnYlc5dWIyMWxjbHN6WFNBOVBTQW5LQ2NwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWVcxcGJtOGdQU0IwYUdsekxrRkJSblZzYkU1aGJXVnpXMjF2Ym05dFpYSXVjM1ZpYzNSeWFXNW5LREFzSURNcFhUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHRnRhVzV2SUdsdUlHTm9aVzFRWVd4bGRIUmxTVzV6ZEdGdVkyVWdQMXh1SUNBZ0lDQWdJQ0FnSUZ0amFHVnRVR0ZzWlhSMFpVbHVjM1JoYm1ObExtZGxkQ2hoYldsdWJ5a3NJR0Z0YVc1dkxDQnBibTVsY2sxdmJtOXRaWElzSUROZElEcGNiaUFnSUNBZ0lDQWdJQ0JiZEdocGN5NTFibVJsWm1sdVpXUkRiMnh2Y2l3Z2IzVjBaWEpOYjI1dmJXVnlMQ0JwYm01bGNrMXZibTl0WlhJc0lETmRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h0YjI1dmJXVnlXekJkUHk1MGIweHZkMlZ5UTJGelpTZ3BJRDA5SUcxdmJtOXRaWEpiTUYwcElIdGNiaUFnSUNBZ0lHbG1JQ2h0YjI1dmJXVnlMbk4xWW5OMGNtbHVaeWd4TENBektTQnBiaUIwYUdsekxrRkJSblZzYkU1aGJXVnpLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHRiMjV2YldWeUxteGxibWQwYUNBOVBTQTBJSHg4SUcxdmJtOXRaWEpiTkYwZ1BUMGdKeWduS1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1lXMXBibThnUFNCMGFHbHpMa0ZCUm5Wc2JFNWhiV1Z6VzIxdmJtOXRaWEl1YzNWaWMzUnlhVzVuS0RFc0lETXBYVHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWVcxcGJtOGdhVzRnWTJobGJWQmhiR1YwZEdWSmJuTjBZVzVqWlNBL1hHNGdJQ0FnSUNBZ0lDQWdJQ0JiWTJobGJWQmhiR1YwZEdWSmJuTjBZVzVqWlM1blpYUW9ZVzFwYm04cExDQmhiV2x1Ynl3Z2FXNXVaWEpOYjI1dmJXVnlMQ0EwWFNBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JiZEdocGN5NTFibVJsWm1sdVpXUkRiMnh2Y2l3Z2IzVjBaWEpOYjI1dmJXVnlMQ0JwYm01bGNrMXZibTl0WlhJc0lEUmRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlGdDBhR2x6TG5WdVpHVm1hVzVsWkVOdmJHOXlMQ0J2ZFhSbGNrMXZibTl0WlhJc0lHbHVibVZ5VFc5dWIyMWxjaXdnTUYwN1hHNGdJSDFjYm4xY2JpSmRmUT09IiwiaW1wb3J0IHsgU2VxUGFsZXR0ZUJhc2UgfSBmcm9tICcuL3NlcS1wYWxldHRlcyc7XG5leHBvcnQgY2xhc3MgTnVjbGVvdGlkZXNQYWxldHRlcyBleHRlbmRzIFNlcVBhbGV0dGVCYXNlIHtcbiAgICBzdGF0aWMgZ2V0IENocm9tYXRvZ3JhbSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hyb21hdG9ncmFtID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHRoaXMuY2hyb21hdG9ncmFtID0gbmV3IE51Y2xlb3RpZGVzUGFsZXR0ZXMoe1xuICAgICAgICAgICAgICAgICdBJzogJ2dyZWVuJyxcbiAgICAgICAgICAgICAgICAnQyc6ICdibHVlJyxcbiAgICAgICAgICAgICAgICAnRyc6ICdibGFjaycsXG4gICAgICAgICAgICAgICAgJ1QnOiAncmVkJywgJ1UnOiAncmVkJyxcbiAgICAgICAgICAgICAgICAnb3RoZXJzJzogJ2dyYXknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hyb21hdG9ncmFtO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBOdWNsZW90aWRlcyB7XG59XG5OdWNsZW90aWRlcy5TZW1UeXBlID0gJ051Y2xlb3RpZGVzJztcbk51Y2xlb3RpZGVzLlNlbVR5cGVNdWx0aXBsZUFsaWdubWVudCA9ICdOdWNsZW90aWRlc011bHRpcGxlQWxpZ25tZW50Jztcbk51Y2xlb3RpZGVzLk5hbWVzID0ge1xuICAgICdBJzogJ0FkZW5pbmUnLFxuICAgICdDJzogJ0N5dG9zaW5lJyxcbiAgICAnRyc6ICdHdWFuaW5lJyxcbiAgICAnVCc6ICdUaHltaW5lJyxcbiAgICAnVSc6ICdVcmFjaWwnLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJuVmpiR1Z2ZEdsa1pYTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKdWRXTnNaVzkwYVdSbGN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZMUVN4UFFVRlBMRVZCUVdFc1kwRkJZeXhGUVVGRExFMUJRVTBzWjBKQlFXZENMRU5CUVVNN1FVRkZNVVFzVFVGQlRTeFBRVUZQTEcxQ1FVRnZRaXhUUVVGUkxHTkJRV003U1VGSE9VTXNUVUZCVFN4TFFVRkxMRmxCUVZrN1VVRkROVUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNXVUZCV1N4TFFVRkxMRXRCUVVzc1EwRkJReXhGUVVGRk8xbEJRMmhETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1NVRkJTU3h0UWtGQmJVSXNRMEZCUXp0blFrRkRNVU1zUjBGQlJ5eEZRVUZGTEU5QlFVODdaMEpCUTFvc1IwRkJSeXhGUVVGRkxFMUJRVTA3WjBKQlExZ3NSMEZCUnl4RlFVRkZMRTlCUVU4N1owSkJRMW9zUjBGQlJ5eEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRVZCUVVVc1MwRkJTenRuUWtGRGRFSXNVVUZCVVN4RlFVRkZMRTFCUVUwN1lVRkRha0lzUTBGQlF5eERRVUZETzFOQlEwbzdVVUZEUkN4UFFVRlBMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU03U1VGRE0wSXNRMEZCUXp0RFFVTkdPMEZCUlVRc1RVRkJUU3hQUVVGUExGZEJRVmM3TzBGQlEwNHNiVUpCUVU4c1IwRkJWeXhoUVVGaExFTkJRVU03UVVGRmFFTXNiME5CUVhkQ0xFZEJRVmNzT0VKQlFUaENMRU5CUVVNN1FVRkZjRVVzYVVKQlFVc3NSMEZCY1VJN1NVRkRkRU1zUjBGQlJ5eEZRVUZGTEZOQlFWTTdTVUZEWkN4SFFVRkhMRVZCUVVVc1ZVRkJWVHRKUVVObUxFZEJRVWNzUlVGQlJTeFRRVUZUTzBsQlEyUXNSMEZCUnl4RlFVRkZMRk5CUVZNN1NVRkRaQ3hIUVVGSExFVkJRVVVzVVVGQlVUdERRVU5rTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdLaUJoY3lCbmNtOXJJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzluY205ckp6dGNibWx0Y0c5eWRDQXFJR0Z6SUhWcElHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOTFhU2M3WEc1cGJYQnZjblFnS2lCaGN5QkVSeUJtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2Wkdjbk8xeHVYRzVwYlhCdmNuUWdlMU4wY21sdVowUnBZM1JwYjI1aGNubDlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM1I1Y0dVdFpHVmpiR0Z5WVhScGIyNXpKenRjYm1sdGNHOXlkQ0I3VTJWeFVHRnNaWFIwWlN3Z1UyVnhVR0ZzWlhSMFpVSmhjMlY5SUdaeWIyMGdKeTR2YzJWeExYQmhiR1YwZEdWekp6dGNibHh1Wlhod2IzSjBJR05zWVhOeklFNTFZMnhsYjNScFpHVnpVR0ZzWlhSMFpYTWdaWGgwWlc1a2N5QlRaWEZRWVd4bGRIUmxRbUZ6WlNCN1hHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHTm9jbTl0WVhSdlozSmhiVG9nVTJWeFVHRnNaWFIwWlR0Y2JseHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklHZGxkQ0JEYUhKdmJXRjBiMmR5WVcwb0tUb2dVMlZ4VUdGc1pYUjBaU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVZMmh5YjIxaGRHOW5jbUZ0SUQwOVBTQjJiMmxrSURBcElIdGNiaUFnSUNBZ0lIUm9hWE11WTJoeWIyMWhkRzluY21GdElEMGdibVYzSUU1MVkyeGxiM1JwWkdWelVHRnNaWFIwWlhNb2UxeHVJQ0FnSUNBZ0lDQW5RU2M2SUNkbmNtVmxiaWNzWEc0Z0lDQWdJQ0FnSUNkREp6b2dKMkpzZFdVbkxGeHVJQ0FnSUNBZ0lDQW5SeWM2SUNkaWJHRmpheWNzSUM4dklHOXlZVzVuWlNBL1hHNGdJQ0FnSUNBZ0lDZFVKem9nSjNKbFpDY3NJQ2RWSnpvZ0ozSmxaQ2NzWEc0Z0lDQWdJQ0FnSUNkdmRHaGxjbk1uT2lBblozSmhlU2NzWEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WTJoeWIyMWhkRzluY21GdE8xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCT2RXTnNaVzkwYVdSbGN5QjdYRzRnSUhOMFlYUnBZeUJ5WldGa2IyNXNlU0JUWlcxVWVYQmxPaUJ6ZEhKcGJtY2dQU0FuVG5WamJHVnZkR2xrWlhNbk8xeHVYRzRnSUhOMFlYUnBZeUJ5WldGa2IyNXNlU0JUWlcxVWVYQmxUWFZzZEdsd2JHVkJiR2xuYm0xbGJuUTZJSE4wY21sdVp5QTlJQ2RPZFdOc1pXOTBhV1JsYzAxMWJIUnBjR3hsUVd4cFoyNXRaVzUwSnp0Y2JseHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklFNWhiV1Z6T2lCVGRISnBibWRFYVdOMGFXOXVZWEo1SUQwZ2UxeHVJQ0FnSUNkQkp6b2dKMEZrWlc1cGJtVW5MRnh1SUNBZ0lDZERKem9nSjBONWRHOXphVzVsSnl4Y2JpQWdJQ0FuUnljNklDZEhkV0Z1YVc1bEp5eGNiaUFnSUNBblZDYzZJQ2RVYUhsdGFXNWxKeXhjYmlBZ0lDQW5WU2M2SUNkVmNtRmphV3duTEZ4dUlDQjlPMXh1ZlZ4dUlsMTkiLCJleHBvcnQgY2xhc3MgU2VxUGFsZXR0ZUJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHBhbGV0dGUpIHtcbiAgICAgICAgdGhpcy5fcGFsZXR0ZSA9IHBhbGV0dGU7XG4gICAgfVxuICAgIHN0YXRpYyBtYWtlUGFsZXR0ZShkdCwgc2ltcGxpZmllZCA9IGZhbHNlLCBQYWxldHRlVHlwZSA9IFNlcVBhbGV0dGVCYXNlKSB7XG4gICAgICAgIGNvbnN0IHBhbGV0dGUgPSB7fTtcbiAgICAgICAgZHQuZm9yRWFjaCgoY3ApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9iakxpc3QgPSBjcFswXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG91ciA9IGNwWzFdO1xuICAgICAgICAgICAgb2JqTGlzdC5mb3JFYWNoKChvYmosIGluZCkgPT4ge1xuICAgICAgICAgICAgICAgIHBhbGV0dGVbb2JqXSA9IHRoaXMuY29sb3VyUGFsZXR0ZVtjb2xvdXJdW3NpbXBsaWZpZWQgPyAwIDogaW5kXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWxldHRlVHlwZShwYWxldHRlKTtcbiAgICB9XG4gICAgZ2V0KG0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhbGV0dGVbbV07XG4gICAgfVxufVxuLyoqIFBhbGV0dGUgd2l0aCBzaGFkZXMgb2YgcHJpbWFyeSBjb2xvcnNcbiAqL1xuU2VxUGFsZXR0ZUJhc2UuY29sb3VyUGFsZXR0ZSA9IHtcbiAgICAnb3JhbmdlJzogWydyZ2IoMjU1LDE4NywxMjApJywgJ3JnYigyNDUsMTY3LDEwMCknLCAncmdiKDIzNSwxMzcsNzApJywgJ3JnYigyMDUsIDExMSwgNzEpJ10sXG4gICAgJ2FsbF9ncmVlbic6IFsncmdiKDQ0LDE2MCw0NCknLCAncmdiKDc0LDE2MCw3NCknLCAncmdiKDIzLDEwMyw1NyknLCAncmdiKDMwLDExMCw5NiknLCAncmdiKDYwLDEzMSw5NSknLFxuICAgICAgICAncmdiKDI0LDExMCw3OSknLCAncmdiKDE1MiwyMjMsMTM4KScsICdyZ2IoMTgyLCAyMjMsIDEzOCknLCAncmdiKDE1MiwgMTkzLCAxMzgpJ10sXG4gICAgJ2FsbF9ibHVlJzogWydyZ2IoMzEsMTE5LDE4MCknLCAncmdiKDIzLDE5MCwyMDcpJywgJ3JnYigxMjIsIDEwMiwgMTg5KScsICdyZ2IoMTU4LDIxOCwyMjkpJywgJ3JnYigxNDEsIDEyNCwgMjE3KScsXG4gICAgICAgICdyZ2IoMzEsIDEyMCwgMTUwKSddLFxuICAgICdtYWdlbnRhJzogWydyZ2IoMTYyLDEwNiwxOTIpJywgJ3JnYigxOTcsMTY1LDIyNCknLCAncmdiKDIwOCwxMTMsMjE4KSddLFxuICAgICdyZWQnOiBbJ3JnYigyMTQsMzksNDApJywgJ3JnYigyNTUsMTUyLDE1MCknXSxcbiAgICAnc3RfYmx1ZSc6IFsncmdiKDIzLDE5MCwyMDcpJywgJ3JnYigxNTgsMjE4LDIyOSknLCAncmdiKDMxLDExOSwxODApJ10sXG4gICAgJ2RhcmtfYmx1ZSc6IFsncmdiKDMxLDExOSwxODApJywgJ3JnYigzMSwgMTIwLCAxNTApJ10sXG4gICAgJ2xpZ2h0X2JsdWUnOiBbJ3JnYigyMywxOTAsMjA3KScsICdyZ2IoMTU4LDIxOCwyMjkpJywgJ3JnYigxMDgsIDIxOCwgMjI5KScsICdyZ2IoMjMsMTkwLDIyNyknXSxcbiAgICAnbGlsYWNfYmx1ZSc6IFsncmdiKDEyNCwxMDIsMjExKScsICdyZ2IoMTQ5LDEzNCwyMTcpJywgJ3JnYig5NywgODEsIDE1MCknXSxcbiAgICAnZGFya19ncmVlbic6IFsncmdiKDIzLDEwMyw1NyknLCAncmdiKDMwLDExMCw5NiknLCAncmdiKDYwLDEzMSw5NSknLCAncmdiKDI0LDExMCw3OSknXSxcbiAgICAnZ3JlZW4nOiBbJ3JnYig0NCwxNjAsNDQpJywgJ3JnYig3NCwxNjAsNzQpJ10sXG4gICAgJ2xpZ2h0X2dyZWVuJzogWydyZ2IoMTUyLDIyMywxMzgpJywgJ3JnYigxODIsIDIyMywgMTM4KScsICdyZ2IoMTUyLCAxOTMsIDEzOCknXSxcbiAgICAnc3RfZ3JlZW4nOiBbJ3JnYig0NCwxNjAsNDQpJywgJ3JnYigxNTIsMjIzLDEzOCknLCAncmdiKDM5LCAxNzQsIDk2KScsICdyZ2IoNzQsMTYwLDc0KSddLFxuICAgICdwaW5rJzogWydyZ2IoMjQ3LDE4MiwyMTApJ10sXG4gICAgJ2Jyb3duJzogWydyZ2IoMTQwLDg2LDc1KScsICdyZ2IoMTAyLCA2MiwgNTQpJ10sXG4gICAgJ2dyYXknOiBbJ3JnYigxMjcsMTI3LDEyNyknLCAncmdiKDE5OSwxOTksMTk5KScsICdyZ2IoMTk2LDE1NiwxNDgpJywgJ3JnYigyMjIsIDIyMiwgMTgwKSddLFxuICAgICd5ZWxsb3cnOiBbJ3JnYigxODgsMTg5LDM0KSddLFxuICAgICd3aGl0ZSc6IFsncmdiKDIzMCwyMzAsMjMwKSddLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVnhMWEJoYkdWMGRHVnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWMyVnhMWEJoYkdWMGRHVnpMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVdsQ1FTeE5RVUZOTEU5QlFVOHNZMEZCWXp0SlFUQkRla0lzV1VGQldTeFBRVUZuUXp0UlFVTXhReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEU5QlFVOHNRMEZCUXp0SlFVTXhRaXhEUVVGRE8wbEJiRUpUTEUxQlFVMHNRMEZCUXl4WFFVRlhMRU5CUVVNc1JVRkJkMElzUlVGRGJrUXNWVUZCVlN4SFFVRkhMRXRCUVVzc1JVRkJSU3hqUVVGeFF5eGpRVUZqTzFGQlJYWkZMRTFCUVUwc1QwRkJUeXhIUVVFNFFpeEZRVUZGTEVOQlFVTTdVVUZET1VNc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZPMWxCUTJoQ0xFMUJRVTBzVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOMFFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGNrSXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSVUZCUlR0blFrRkRNMElzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJ4RkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwd3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRTQ3hQUVVGUExFbEJRVWtzVjBGQlZ5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMGxCUTJ4RExFTkJRVU03U1VGUlRTeEhRVUZITEVOQlFVTXNRMEZCVXp0UlFVTnNRaXhQUVVGUExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRNVUlzUTBGQlF6czdRVUV2UTBRN1IwRkRSenRCUVVOWExEUkNRVUZoTEVkQlFXZERPMGxCUTNwRUxGRkJRVkVzUlVGQlJTeERRVUZETEd0Q1FVRnJRaXhGUVVGRkxHdENRVUZyUWl4RlFVRkZMR2xDUVVGcFFpeEZRVUZGTEcxQ1FVRnRRaXhEUVVGRE8wbEJRekZHTEZkQlFWY3NSVUZCUlN4RFFVRkRMR2RDUVVGblFpeEZRVUZGTEdkQ1FVRm5RaXhGUVVGRkxHZENRVUZuUWl4RlFVRkZMR2RDUVVGblFpeEZRVUZGTEdkQ1FVRm5RanRSUVVOd1J5eG5Ra0ZCWjBJc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4dlFrRkJiMElzUlVGQlJTeHZRa0ZCYjBJc1EwRkJRenRKUVVOdVJpeFZRVUZWTEVWQlFVVXNRMEZCUXl4cFFrRkJhVUlzUlVGQlJTeHBRa0ZCYVVJc1JVRkJSU3h2UWtGQmIwSXNSVUZCUlN4clFrRkJhMElzUlVGQlJTeHZRa0ZCYjBJN1VVRkRMMGNzYlVKQlFXMUNMRU5CUVVNN1NVRkRkRUlzVTBGQlV5eEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzYTBKQlFXdENMRVZCUVVVc2EwSkJRV3RDTEVOQlFVTTdTVUZEZGtVc1MwRkJTeXhGUVVGRkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVc2EwSkJRV3RDTEVOQlFVTTdTVUZETjBNc1UwRkJVeXhGUVVGRkxFTkJRVU1zYVVKQlFXbENMRVZCUVVVc2EwSkJRV3RDTEVWQlFVVXNhVUpCUVdsQ0xFTkJRVU03U1VGRGNrVXNWMEZCVnl4RlFVRkZMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNiVUpCUVcxQ0xFTkJRVU03U1VGRGNrUXNXVUZCV1N4RlFVRkZMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVVzYjBKQlFXOUNMRVZCUVVVc2FVSkJRV2xDTEVOQlFVTTdTVUZET1VZc1dVRkJXU3hGUVVGRkxFTkJRVU1zYTBKQlFXdENMRVZCUVVVc2EwSkJRV3RDTEVWQlFVVXNhMEpCUVd0Q0xFTkJRVU03U1VGRE1VVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFXZENMRVZCUVVVc1owSkJRV2RDTEVOQlFVTTdTVUZEZEVZc1QwRkJUeXhGUVVGRkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1owSkJRV2RDTEVOQlFVTTdTVUZETjBNc1lVRkJZU3hGUVVGRkxFTkJRVU1zYTBKQlFXdENMRVZCUVVVc2IwSkJRVzlDTEVWQlFVVXNiMEpCUVc5Q0xFTkJRVU03U1VGREwwVXNWVUZCVlN4RlFVRkZMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVVzYTBKQlFXdENMRVZCUVVVc1owSkJRV2RDTEVOQlFVTTdTVUZEZUVZc1RVRkJUU3hGUVVGRkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNN1NVRkROVUlzVDBGQlR5eEZRVUZGTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzYTBKQlFXdENMRU5CUVVNN1NVRkRMME1zVFVGQlRTeEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzYTBKQlFXdENMRVZCUVVVc2EwSkJRV3RDTEVWQlFVVXNiMEpCUVc5Q0xFTkJRVU03U1VGRE1VWXNVVUZCVVN4RlFVRkZMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTTdTVUZETjBJc1QwRkJUeXhGUVVGRkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNN1EwRkRPVUlzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQXFJR0Z6SUdkeWIyc2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMmR5YjJzbk8xeHVhVzF3YjNKMElDb2dZWE1nZFdrZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwzVnBKenRjYm1sdGNHOXlkQ0FxSUdGeklFUkhJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzlrWnljN1hHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdVMlZ4VUdGc1pYUjBaU0I3WEc0Z0lDOHZJRlJvWlhKbElHRnlaU0IwYjI4Z2JYVmphQ0J3Y205aWJHVnRJSGRwZEdnZ2FXNWtaWGhsY2lCd2NtOXdaWEowZVNCcGJpQjBlWEJsYzJOeWFYQjBMbHh1SUNBdkx5QXZLaXBjYmlBZ0x5OGdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzBnVFc5dWIyMWxjaUJqYUdGeVlXTjBaWEpjYmlBZ0x5OGdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JEYjJ4dmNseHVJQ0F2THlBZ0tpOWNiaUFnTHk4Z1cyMDZJSE4wY21sdVoxMDZJSE4wY21sdVp6dGNiaUFnTHlvcUlFMXZibTl0WlhJZ1kyOXNiM0pjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHMGdUVzl1YjIxbGNseHVJQ0FnS2k5Y2JpQWdaMlYwS0cwNklITjBjbWx1WnlrNklITjBjbWx1Wnp0Y2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklGTmxjVkJoYkdWMGRHVkNZWE5sSUdsdGNHeGxiV1Z1ZEhNZ1UyVnhVR0ZzWlhSMFpTQjdYRzRnSUM4cUtpQlFZV3hsZEhSbElIZHBkR2dnYzJoaFpHVnpJRzltSUhCeWFXMWhjbmtnWTI5c2IzSnpYRzRnSUNBcUwxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklHTnZiRzkxY2xCaGJHVjBkR1U2SUhzZ1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5XMTBnZlNBOUlIdGNiaUFnSUNBbmIzSmhibWRsSnpvZ1d5ZHlaMklvTWpVMUxERTROeXd4TWpBcEp5d2dKM0puWWlneU5EVXNNVFkzTERFd01Da25MQ0FuY21kaUtESXpOU3d4TXpjc056QXBKeXdnSjNKbllpZ3lNRFVzSURFeE1Td2dOekVwSjEwc1hHNGdJQ0FnSjJGc2JGOW5jbVZsYmljNklGc25jbWRpS0RRMExERTJNQ3cwTkNrbkxDQW5jbWRpS0RjMExERTJNQ3czTkNrbkxDQW5jbWRpS0RJekxERXdNeXcxTnlrbkxDQW5jbWRpS0RNd0xERXhNQ3c1TmlrbkxDQW5jbWRpS0RZd0xERXpNU3c1TlNrbkxGeHVJQ0FnSUNBZ0ozSm5ZaWd5TkN3eE1UQXNOemtwSnl3Z0ozSm5ZaWd4TlRJc01qSXpMREV6T0NrbkxDQW5jbWRpS0RFNE1pd2dNakl6TENBeE16Z3BKeXdnSjNKbllpZ3hOVElzSURFNU15d2dNVE00S1NkZExGeHVJQ0FnSUNkaGJHeGZZbXgxWlNjNklGc25jbWRpS0RNeExERXhPU3d4T0RBcEp5d2dKM0puWWlneU15d3hPVEFzTWpBM0tTY3NJQ2R5WjJJb01USXlMQ0F4TURJc0lERTRPU2tuTENBbmNtZGlLREUxT0N3eU1UZ3NNakk1S1Njc0lDZHlaMklvTVRReExDQXhNalFzSURJeE55a25MRnh1SUNBZ0lDQWdKM0puWWlnek1Td2dNVEl3TENBeE5UQXBKMTBzWEc0Z0lDQWdKMjFoWjJWdWRHRW5PaUJiSjNKbllpZ3hOaklzTVRBMkxERTVNaWtuTENBbmNtZGlLREU1Tnl3eE5qVXNNakkwS1Njc0lDZHlaMklvTWpBNExERXhNeXd5TVRncEoxMHNYRzRnSUNBZ0ozSmxaQ2M2SUZzbmNtZGlLREl4TkN3ek9TdzBNQ2tuTENBbmNtZGlLREkxTlN3eE5USXNNVFV3S1NkZExGeHVJQ0FnSUNkemRGOWliSFZsSnpvZ1d5ZHlaMklvTWpNc01Ua3dMREl3TnlrbkxDQW5jbWRpS0RFMU9Dd3lNVGdzTWpJNUtTY3NJQ2R5WjJJb016RXNNVEU1TERFNE1Da25YU3hjYmlBZ0lDQW5aR0Z5YTE5aWJIVmxKem9nV3lkeVoySW9NekVzTVRFNUxERTRNQ2tuTENBbmNtZGlLRE14TENBeE1qQXNJREUxTUNrblhTeGNiaUFnSUNBbmJHbG5hSFJmWW14MVpTYzZJRnNuY21kaUtESXpMREU1TUN3eU1EY3BKeXdnSjNKbllpZ3hOVGdzTWpFNExESXlPU2tuTENBbmNtZGlLREV3T0N3Z01qRTRMQ0F5TWprcEp5d2dKM0puWWlneU15d3hPVEFzTWpJM0tTZGRMRnh1SUNBZ0lDZHNhV3hoWTE5aWJIVmxKem9nV3lkeVoySW9NVEkwTERFd01pd3lNVEVwSnl3Z0ozSm5ZaWd4TkRrc01UTTBMREl4TnlrbkxDQW5jbWRpS0RrM0xDQTRNU3dnTVRVd0tTZGRMRnh1SUNBZ0lDZGtZWEpyWDJkeVpXVnVKem9nV3lkeVoySW9Nak1zTVRBekxEVTNLU2NzSUNkeVoySW9NekFzTVRFd0xEazJLU2NzSUNkeVoySW9OakFzTVRNeExEazFLU2NzSUNkeVoySW9NalFzTVRFd0xEYzVLU2RkTEZ4dUlDQWdJQ2RuY21WbGJpYzZJRnNuY21kaUtEUTBMREUyTUN3ME5Da25MQ0FuY21kaUtEYzBMREUyTUN3M05Da25YU3hjYmlBZ0lDQW5iR2xuYUhSZlozSmxaVzRuT2lCYkozSm5ZaWd4TlRJc01qSXpMREV6T0NrbkxDQW5jbWRpS0RFNE1pd2dNakl6TENBeE16Z3BKeXdnSjNKbllpZ3hOVElzSURFNU15d2dNVE00S1NkZExGeHVJQ0FnSUNkemRGOW5jbVZsYmljNklGc25jbWRpS0RRMExERTJNQ3cwTkNrbkxDQW5jbWRpS0RFMU1pd3lNak1zTVRNNEtTY3NJQ2R5WjJJb016a3NJREUzTkN3Z09UWXBKeXdnSjNKbllpZzNOQ3d4TmpBc056UXBKMTBzWEc0Z0lDQWdKM0JwYm1zbk9pQmJKM0puWWlneU5EY3NNVGd5TERJeE1Da25YU3hjYmlBZ0lDQW5Zbkp2ZDI0bk9pQmJKM0puWWlneE5EQXNPRFlzTnpVcEp5d2dKM0puWWlneE1ESXNJRFl5TENBMU5Da25YU3hjYmlBZ0lDQW5aM0poZVNjNklGc25jbWRpS0RFeU55d3hNamNzTVRJM0tTY3NJQ2R5WjJJb01UazVMREU1T1N3eE9Ua3BKeXdnSjNKbllpZ3hPVFlzTVRVMkxERTBPQ2tuTENBbmNtZGlLREl5TWl3Z01qSXlMQ0F4T0RBcEoxMHNYRzRnSUNBZ0ozbGxiR3h2ZHljNklGc25jbWRpS0RFNE9Dd3hPRGtzTXpRcEoxMHNYRzRnSUNBZ0ozZG9hWFJsSnpvZ1d5ZHlaMklvTWpNd0xESXpNQ3d5TXpBcEoxMHNYRzRnSUgwN1hHNWNiaUFnY0hKdmRHVmpkR1ZrSUhOMFlYUnBZeUJ0WVd0bFVHRnNaWFIwWlNoa2REb2dXM04wY21sdVoxdGRMQ0J6ZEhKcGJtZGRXMTBzWEc0Z0lDQWdjMmx0Y0d4cFptbGxaQ0E5SUdaaGJITmxMQ0JRWVd4bGRIUmxWSGx3WlRvZ2RIbHdaVzltSUZObGNWQmhiR1YwZEdWQ1lYTmxJRDBnVTJWeFVHRnNaWFIwWlVKaGMyVmNiaUFnS1NCN1hHNGdJQ0FnWTI5dWMzUWdjR0ZzWlhSMFpUb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQnpkSEpwYm1jZ2ZTQTlJSHQ5TzF4dUlDQWdJR1IwTG1admNrVmhZMmdvS0dOd0tTQTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQnZZbXBNYVhOMElEMGdZM0JiTUYwN1hHNGdJQ0FnSUNCamIyNXpkQ0JqYjJ4dmRYSWdQU0JqY0ZzeFhUdGNiaUFnSUNBZ0lHOWlha3hwYzNRdVptOXlSV0ZqYUNnb2IySnFMQ0JwYm1RcElEMCtJSHRjYmlBZ0lDQWdJQ0FnY0dGc1pYUjBaVnR2WW1wZElEMGdkR2hwY3k1amIyeHZkWEpRWVd4bGRIUmxXMk52Ykc5MWNsMWJjMmx0Y0d4cFptbGxaQ0EvSURBZ09pQnBibVJkTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNrN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUVlXeGxkSFJsVkhsd1pTaHdZV3hsZEhSbEtUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdYM0JoYkdWMGRHVTZJSHNnVzIwNklITjBjbWx1WjEwNklITjBjbWx1WnlCOU8xeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtIQmhiR1YwZEdVNklIc2dXMjA2SUhOMGNtbHVaMTA2SUhOMGNtbHVaeUI5S1NCN1hHNGdJQ0FnZEdocGN5NWZjR0ZzWlhSMFpTQTlJSEJoYkdWMGRHVTdYRzRnSUgxY2JseHVJQ0J3ZFdKc2FXTWdaMlYwS0cwNklITjBjbWx1WnlrNklITjBjbWx1WnlCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzQmhiR1YwZEdWYmJWMDdYRzRnSUgxY2JuMWNiaUpkZlE9PSIsImV4cG9ydCBjbGFzcyBTdHJpbmdVdGlscyB7XG4gICAgc3RhdGljIGhhc2hDb2RlKHMpIHtcbiAgICAgICAgbGV0IGhhc2ggPSAwO1xuICAgICAgICBpZiAocy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gaGFzaDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaHIgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBjaHI7XG4gICAgICAgICAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNoO1xuICAgIH1cbn1cbmltcG9ydCB7IFNlcVBhbGV0dGVCYXNlIH0gZnJvbSAnLi9zZXEtcGFsZXR0ZXMnO1xuZXhwb3J0IGNsYXNzIFVua25vd25TZXFQYWxldHRlIHtcbn1cbmV4cG9ydCBjbGFzcyBHcmF5QWxsUGFsZXR0ZSBleHRlbmRzIFVua25vd25TZXFQYWxldHRlIHtcbiAgICBnZXQobSkge1xuICAgICAgICByZXR1cm4gJyM2NjY2NjYnO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBVbmtub3duQ29sb3JQYWxldHRlIGV4dGVuZHMgVW5rbm93blNlcVBhbGV0dGUge1xuICAgIHN0YXRpYyBidWlsZFBhbGV0dGUoKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IFtdLmNvbmNhdCguLi5PYmplY3QudmFsdWVzKFNlcVBhbGV0dGVCYXNlLmNvbG91clBhbGV0dGUpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgZ2V0KG0pIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IFN0cmluZ1V0aWxzLmhhc2hDb2RlKG0pO1xuICAgICAgICBjb25zdCBwSSA9IGhhc2ggJSBVbmtub3duQ29sb3JQYWxldHRlLnBhbGV0dGUubGVuZ3RoO1xuICAgICAgICByZXR1cm4gVW5rbm93bkNvbG9yUGFsZXR0ZS5wYWxldHRlW3BJXTtcbiAgICB9XG59XG5Vbmtub3duQ29sb3JQYWxldHRlLnBhbGV0dGUgPSBVbmtub3duQ29sb3JQYWxldHRlLmJ1aWxkUGFsZXR0ZSgpO1xuZXhwb3J0IGNsYXNzIFVua25vd25TZXFQYWxldHRlcyBleHRlbmRzIFNlcVBhbGV0dGVCYXNlIHtcbiAgICBzdGF0aWMgZ2V0IEdyYXkoKSB7XG4gICAgICAgIGlmICh0aGlzLmdyYXkgPT09IHZvaWQgMClcbiAgICAgICAgICAgIHRoaXMuZ3JheSA9IG5ldyBHcmF5QWxsUGFsZXR0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5ncmF5O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IENvbG9yKCkge1xuICAgICAgICBpZiAodGhpcy5jb2xvciA9PT0gdm9pZCAwKVxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IG5ldyBVbmtub3duQ29sb3JQYWxldHRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRXNXJibTkzYmk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJblZ1YTI1dmQyNHVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCU1VFc1RVRkJUU3hQUVVGUExGZEJRVmM3U1VGRFppeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVZNN1VVRkRPVUlzU1VGQlNTeEpRVUZKTEVkQlFWY3NRMEZCUXl4RFFVRkRPMUZCUTNKQ0xFbEJRVWtzUTBGQlF5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRPMWxCUTJoQ0xFOUJRVThzU1VGQlNTeERRVUZETzFGQlEyUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJWeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRGVrTXNUVUZCVFN4SFFVRkhMRWRCUVZjc1EwRkJReXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTndReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdXVUZEYkVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETERKQ1FVRXlRanRUUVVOMlF6dFJRVU5FTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenREUVVOR08wRkJSVVFzVDBGQlR5eEZRVUZoTEdOQlFXTXNSVUZCUXl4TlFVRk5MR2RDUVVGblFpeERRVUZETzBGQlJURkVMRTFCUVUwc1QwRkJaMElzYVVKQlFXbENPME5CUlhSRE8wRkJSVVFzVFVGQlRTeFBRVUZQTEdOQlFXVXNVMEZCVVN4cFFrRkJhVUk3U1VGRE5VTXNSMEZCUnl4RFFVRkRMRU5CUVZNN1VVRkRiRUlzVDBGQlR5eFRRVUZUTEVOQlFVTTdTVUZEYmtJc1EwRkJRenREUVVOR08wRkJSMFFzVFVGQlRTeFBRVUZQTEcxQ1FVRnZRaXhUUVVGUkxHbENRVUZwUWp0SlFVZG9SQ3hOUVVGTkxFTkJRVU1zV1VGQldUdFJRVU42UWl4TlFVRk5MRWRCUVVjc1IwRkJTU3hGUVVGbExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTndSaXhQUVVGUExFZEJRVWNzUTBGQlF6dEpRVU5pTEVOQlFVTTdTVUZGVFN4SFFVRkhMRU5CUVVNc1EwRkJVenRSUVVOc1FpeE5RVUZOTEVsQlFVa3NSMEZCVnl4WFFVRlhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6ZERMRTFCUVUwc1JVRkJSU3hIUVVGSExFbEJRVWtzUjBGQlJ5eHRRa0ZCYlVJc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlEzSkVMRTlCUVU4c2JVSkJRVzFDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8wbEJRM3BETEVOQlFVTTdPMEZCV0dFc01rSkJRVThzUjBGQllTeHRRa0ZCYlVJc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dEJRV04yUlN4TlFVRk5MRTlCUVU4c2EwSkJRVzFDTEZOQlFWRXNZMEZCWXp0SlFVYzNReXhOUVVGTkxFdEJRVXNzU1VGQlNUdFJRVU53UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFdEJRVXNzUzBGQlN5eERRVUZETzFsQlEzUkNMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeGpRVUZqTEVWQlFVVXNRMEZCUXp0UlFVTnVReXhQUVVGUExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTTdTVUZEYmtJc1EwRkJRenRKUVVsTkxFMUJRVTBzUzBGQlN5eExRVUZMTzFGQlEzSkNMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzUzBGQlN5eExRVUZMTEVOQlFVTTdXVUZEZGtJc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEcxQ1FVRnRRaXhGUVVGRkxFTkJRVU03VVVGRGVrTXNUMEZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wbEJRM0JDTEVOQlFVTTdRMEZEUmlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENBcUlHRnpJR2R5YjJzZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyZHliMnNuTzF4dWFXMXdiM0owSUNvZ1lYTWdkV2tnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDNWcEp6dGNibWx0Y0c5eWRDQXFJR0Z6SUVSSElHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOWtaeWM3WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJUZEhKcGJtZFZkR2xzY3lCN1hHNGdJSEIxWW14cFl5QnpkR0YwYVdNZ2FHRnphRU52WkdVb2N6b2djM1J5YVc1bktUb2diblZ0WW1WeUlIdGNiaUFnSUNCc1pYUWdhR0Z6YURvZ2JuVnRZbVZ5SUQwZ01EdGNiaUFnSUNCcFppQW9jeTVzWlc1bmRHZ2dQVDA5SURBcFhHNGdJQ0FnSUNCeVpYUjFjbTRnYUdGemFEdGNiaUFnSUNCbWIzSWdLR3hsZENCcE9pQnVkVzFpWlhJZ1BTQXdPeUJwSUR3Z2N5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdZMmh5T2lCdWRXMWlaWElnUFNCekxtTm9ZWEpEYjJSbFFYUW9hU2s3WEc0Z0lDQWdJQ0JvWVhOb0lEMGdLQ2hvWVhOb0lEdzhJRFVwSUMwZ2FHRnphQ2tnS3lCamFISTdYRzRnSUNBZ0lDQm9ZWE5vSUh3OUlEQTdJQzh2SUVOdmJuWmxjblFnZEc4Z016SmlhWFFnYVc1MFpXZGxjbHh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYUdGemFEdGNiaUFnZlZ4dWZWeHVYRzVwYlhCdmNuUWdlMU5sY1ZCaGJHVjBkR1VzSUZObGNWQmhiR1YwZEdWQ1lYTmxmU0JtY205dElDY3VMM05sY1Mxd1lXeGxkSFJsY3ljN1hHNWNibVY0Y0c5eWRDQmhZbk4wY21GamRDQmpiR0Z6Y3lCVmJtdHViM2R1VTJWeFVHRnNaWFIwWlNCcGJYQnNaVzFsYm5SeklGTmxjVkJoYkdWMGRHVWdlMXh1SUNCd2RXSnNhV01nWVdKemRISmhZM1FnWjJWMEtHMDZJSE4wY21sdVp5azZJSE4wY21sdVp6dGNibjFjYmx4dVpYaHdiM0owSUdOc1lYTnpJRWR5WVhsQmJHeFFZV3hsZEhSbElHVjRkR1Z1WkhNZ1ZXNXJibTkzYmxObGNWQmhiR1YwZEdVZ2UxeHVJQ0J3ZFdKc2FXTWdaMlYwS0cwNklITjBjbWx1WnlrNklITjBjbWx1WnlCN1hHNGdJQ0FnY21WMGRYSnVJQ2NqTmpZMk5qWTJKenRjYmlBZ2ZWeHVmVnh1WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJWYm10dWIzZHVRMjlzYjNKUVlXeGxkSFJsSUdWNGRHVnVaSE1nVlc1cmJtOTNibE5sY1ZCaGJHVjBkR1VnZTF4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUhCaGJHVjBkR1U2SUhOMGNtbHVaMXRkSUQwZ1ZXNXJibTkzYmtOdmJHOXlVR0ZzWlhSMFpTNWlkV2xzWkZCaGJHVjBkR1VvS1R0Y2JseHVJQ0J3Y21sMllYUmxJSE4wWVhScFl5QmlkV2xzWkZCaGJHVjBkR1VvS1RvZ2MzUnlhVzVuVzEwZ2UxeHVJQ0FnSUdOdmJuTjBJSEpsY3lBOUlDaGJYU0JoY3lCemRISnBibWRiWFNrdVkyOXVZMkYwS0M0dUxrOWlhbVZqZEM1MllXeDFaWE1vVTJWeFVHRnNaWFIwWlVKaGMyVXVZMjlzYjNWeVVHRnNaWFIwWlNrcE8xeHVJQ0FnSUhKbGRIVnliaUJ5WlhNN1hHNGdJSDFjYmx4dUlDQndkV0pzYVdNZ1oyVjBLRzA2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUI3WEc0Z0lDQWdZMjl1YzNRZ2FHRnphRG9nYm5WdFltVnlJRDBnVTNSeWFXNW5WWFJwYkhNdWFHRnphRU52WkdVb2JTazdYRzRnSUNBZ1kyOXVjM1FnY0VrZ1BTQm9ZWE5vSUNVZ1ZXNXJibTkzYmtOdmJHOXlVR0ZzWlhSMFpTNXdZV3hsZEhSbExteGxibWQwYUR0Y2JpQWdJQ0J5WlhSMWNtNGdWVzVyYm05M2JrTnZiRzl5VUdGc1pYUjBaUzV3WVd4bGRIUmxXM0JKWFR0Y2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyeGhjM01nVlc1cmJtOTNibE5sY1ZCaGJHVjBkR1Z6SUdWNGRHVnVaSE1nVTJWeFVHRnNaWFIwWlVKaGMyVWdlMXh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJuY21GNU9pQlRaWEZRWVd4bGRIUmxPMXh1WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nWjJWMElFZHlZWGtvS1RvZ1UyVnhVR0ZzWlhSMFpTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVozSmhlU0E5UFQwZ2RtOXBaQ0F3S1Z4dUlDQWdJQ0FnZEdocGN5NW5jbUY1SUQwZ2JtVjNJRWR5WVhsQmJHeFFZV3hsZEhSbEtDazdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaM0poZVR0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdOdmJHOXlPaUJUWlhGUVlXeGxkSFJsTzF4dVhHNGdJSEIxWW14cFl5QnpkR0YwYVdNZ1oyVjBJRU52Ykc5eUtDazZJRk5sY1ZCaGJHVjBkR1VnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbU52Ykc5eUlEMDlQU0IyYjJsa0lEQXBYRzRnSUNBZ0lDQjBhR2x6TG1OdmJHOXlJRDBnYm1WM0lGVnVhMjV2ZDI1RGIyeHZjbEJoYkdWMGRHVW9LVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVqYjJ4dmNqdGNiaUFnZlZ4dWZWeHVJbDE5IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVmVjdG9yIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHsgdmVjdG9yTGVuZ3RoLCB2ZWN0b3JEb3RQcm9kdWN0IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHsgQW1pbm9hY2lkcywgQW1pbm9hY2lkc1BhbGV0dGVzIH0gZnJvbSAnLi4vYW1pbm9hY2lkcyc7XG5pbXBvcnQgeyBOdWNsZW90aWRlcywgTnVjbGVvdGlkZXNQYWxldHRlcyB9IGZyb20gJy4uL251Y2xlb3RpZGVzJztcbmltcG9ydCB7IFVua25vd25TZXFQYWxldHRlLCBVbmtub3duU2VxUGFsZXR0ZXMgfSBmcm9tICcuLi91bmtub3duJztcbkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5nZXRDdXJzb3JQb3NpdGlvbiA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiBuZXcgREcuUG9pbnQoZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wKTtcbn07XG5ERy5SZWN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdCA8PSB4ICYmIHggPD0gdGhpcy5yaWdodCAmJiB0aGlzLnRvcCA8PSB5ICYmIHkgPD0gdGhpcy5ib3R0b207XG59O1xuZXhwb3J0IGNsYXNzIFBvc2l0aW9uTW9ub21lckluZm8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5ib3VuZHMgPSBuZXcgREcuUmVjdCgwLCAwLCAwLCAwKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUG9zaXRpb25JbmZvIHtcbiAgICAvKiogZnJlcSA9IHt9LCByb3dDb3VudCA9IDBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHBvc2l0aW9uICgnMTExQScsICcxMTEuMScsIGV0YylcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZnJlcSA9IHt9O1xuICAgICAgICB0aGlzLnJvd0NvdW50ID0gMDtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgV2ViTG9nbyBleHRlbmRzIERHLkpzVmlld2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAvLyBwcml2YXRlIHJlYWRvbmx5IGNvbG9yU2NoZW1lOiBDb2xvclNjaGVtZSA9IENvbG9yU2NoZW1lc1tOdWNsZW90aWRlc1dlYkxvZ28ucmVzaWR1ZXNTZXRdO1xuICAgICAgICB0aGlzLmNwID0gbnVsbDtcbiAgICAgICAgdGhpcy5heGlzSGVpZ2h0ID0gMTI7XG4gICAgICAgIHRoaXMuc2VxQ29sID0gbnVsbDtcbiAgICAgICAgLy8gcHJpdmF0ZSBtYXhMZW5ndGg6IG51bWJlciA9IDEwMDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5yb3dzTWFza2VkID0gMDtcbiAgICAgICAgdGhpcy5yb3dzTnVsbCA9IDA7XG4gICAgICAgIHRoaXMucG9zaXRpb25OYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSAtMTtcbiAgICAgICAgdGhpcy5lbmRQb3NpdGlvbiA9IC0xO1xuICAgICAgICB0aGlzLnRleHRCYXNlbGluZSA9ICd0b3AnO1xuICAgICAgICB0aGlzLl9wb3NpdGlvbldpZHRoID0gdGhpcy5wb3NpdGlvbldpZHRoID0gdGhpcy5mbG9hdCgncG9zaXRpb25XaWR0aCcsIDE2IC8qLFxuICAgICAgICAgIHtlZGl0b3I6ICdzbGlkZXInLCBtaW46IDQsIG1heDogNjQsIHBvc3RmaXg6ICdweCd9Ki8pO1xuICAgICAgICB0aGlzLm1pbkhlaWdodCA9IHRoaXMuZmxvYXQoJ21pbkhlaWdodCcsIDUwIC8qLFxuICAgICAgICAgIHtlZGl0b3I6ICdzbGlkZXInLCBtaW46IDI1LCBtYXg6IDI1MCwgcG9zdGZpeDogJ3B4J30qLyk7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5mbG9hdCgnbWF4SGVpZ2h0JywgMTAwIC8qLFxuICAgICAgICAgIHtlZGl0b3I6ICdzbGlkZXInLCBtaW46IDI1LCBtYXg6IDUwMCwgcG9zdGZpeDogJ3B4J30qLyk7XG4gICAgICAgIHRoaXMuY29uc2lkZXJOdWxsU2VxdWVuY2VzID0gdGhpcy5ib29sKCdjb25zaWRlck51bGxTZXF1ZW5jZXMnLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lID0gdGhpcy5zdHJpbmcoJ3NlcXVlbmNlQ29sdW1uTmFtZScsIG51bGwpO1xuICAgICAgICB0aGlzLnN0YXJ0UG9zaXRpb25OYW1lID0gdGhpcy5zdHJpbmcoJ3N0YXJ0UG9zaXRpb25OYW1lJywgbnVsbCk7XG4gICAgICAgIHRoaXMuZW5kUG9zaXRpb25OYW1lID0gdGhpcy5zdHJpbmcoJ2VuZFBvc2l0aW9uTmFtZScsIG51bGwpO1xuICAgICAgICB0aGlzLmZpeFdpZHRoID0gdGhpcy5ib29sKCdmaXhXaWR0aCcsIGZhbHNlKTtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuc3RyaW5nKCd2ZXJ0aWNhbEFsaWdubWVudCcsICdtaWRkbGUnLCB7IGNob2ljZXM6IFsndG9wJywgJ21pZGRsZScsICdib3R0b20nXSB9KTtcbiAgICAgICAgdGhpcy5ob3Jpem9udGFsQWxpZ25tZW50ID0gdGhpcy5zdHJpbmcoJ2hvcml6b250YWxBbGlnbm1lbnQnLCAnY2VudGVyJywgeyBjaG9pY2VzOiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J10gfSk7XG4gICAgICAgIHRoaXMuZml0QXJlYSA9IHRoaXMuYm9vbCgnZml0QXJlYScsIHRydWUpO1xuICAgICAgICB0aGlzLnNocmlua0VtcHR5VGFpbCA9IHRoaXMuYm9vbCgnc2hyaW5rRW1wdHlUYWlsJywgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKiBGb3Igc3RhcnRQb3NpdGlvbiBlcXVhbHMgdG8gZW5kUG9zaXRpb24gTGVuZ3RoIGlzIDEgKi9cbiAgICBnZXQgTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFBvc2l0aW9uIDw9IHRoaXMuZW5kUG9zaXRpb24gPyB0aGlzLmVuZFBvc2l0aW9uIC0gdGhpcy5zdGFydFBvc2l0aW9uICsgMSA6IDA7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dlYkxvZ28gc2Vjb25kIGluaXRpYWxpemF0aW9uIScpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oZWxwVXJsID0gJy9oZWxwL3Zpc3VhbGl6ZS92aWV3ZXJzL3dlYi1sb2dvLm1kJztcbiAgICAgICAgICAgIHRoaXMubXNnSG9zdCA9IHVpLmRpdignTm8gbWVzc2FnZScpO1xuICAgICAgICAgICAgdGhpcy5tc2dIb3N0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcyA9IHVpLmNhbnZhcygpO1xuICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICAgICAgICB0aGlzLmhvc3QgPSB1aS5kaXYoW3RoaXMubXNnSG9zdCwgdGhpcy5jYW52YXNdKTtcbiAgICAgICAgICAgIC8vIHRoaXMuc2xpZGVyID0gdWkucmFuZ2VTbGlkZXIoMCwgMjAsIDIsIDUpO1xuICAgICAgICAgICAgLy8gdGhpcy5zbGlkZXIucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgICAgICAgIC8vIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUuaGVpZ2h0ID0gJzEycHgnO1xuICAgICAgICAgICAgY29uc3QgZ2V0TW9ub21lciA9IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgalBvcyA9IE1hdGguZmxvb3IocC54IC8gdGhpcy5fcG9zaXRpb25XaWR0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uc1tqUG9zXTtcbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT09IHZvaWQgMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtqUG9zLCBudWxsLCBudWxsXTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb25vbWVyID0gT2JqZWN0LmtleXMocG9zaXRpb24uZnJlcSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoKG0pID0+IHBvc2l0aW9uLmZyZXFbbV0uYm91bmRzLmNvbnRhaW5zKHAueCwgcC55KSk7XG4gICAgICAgICAgICAgICAgaWYgKG1vbm9tZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtqUG9zLCBudWxsLCBudWxsXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2pQb3MsIG1vbm9tZXIsIHBvc2l0aW9uLmZyZXFbbW9ub21lcl1dO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLm9ubW91c2VvdmVyID0gKGUpID0+IHtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnN1YnMucHVzaChyeGpzLmZyb21FdmVudCh0aGlzLmNhbnZhcywgJ21vdXNlbW92ZScpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW52YXMpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gZTtcbiAgICAgICAgICAgICAgICBjb25zdCBbalBvcywgbW9ub21lcl0gPSBnZXRNb25vbWVyKHRoaXMuY2FudmFzLmdldEN1cnNvclBvc2l0aW9uKGFyZ3MpKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgbW9ub21lcikge1xuICAgICAgICAgICAgICAgICAgICB1aS50b29sdGlwLnNob3dSb3dHcm91cCh0aGlzLmRhdGFGcmFtZSwgKGlSb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcSA9IHRoaXMuc2VxQ29sLmdldChpUm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcU0gPSBzZXEgPyBXZWJMb2dvLnNwbGl0U2VxVG9Nb25vbWVycyhzZXEpW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXFNID09PSBtb25vbWVyICYmIHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXQoaVJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGFyZ3MueCArIDE2LCBhcmdzLnkgKyAxNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aS50b29sdGlwLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB0aGlzLnN1YnMucHVzaChyeGpzLmZyb21FdmVudCh0aGlzLmNhbnZhcywgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgZS5idXR0b24gIT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIodGhpcy5jYW52YXMuZ2V0Q3Vyc29yUG9zaXRpb24oYXJncykpO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnRzIGRlc2VsZWN0IGFsbCByb3dzIGlmIHdlIG1pc3MgbW9ub21lciBib3VuZHNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgbW9ub21lcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uaW5pdCgoaVJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VxID0gdGhpcy5zZXFDb2wuZ2V0KGlSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VxTSA9IHNlcSA/IFdlYkxvZ28uc3BsaXRTZXFUb01vbm9tZXJzKHNlcSlbdGhpcy5zdGFydFBvc2l0aW9uICsgalBvc10gOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcU0gPT09IG1vbm9tZXIgJiYgdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldChpUm93KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdGhpcy5zdWJzLnB1c2godWkub25TaXplQ2hhbmdlZCh0aGlzLnJvb3QpLnN1YnNjcmliZSh0aGlzLnJvb3RPblNpemVDaGFuZ2VkLmJpbmQodGhpcykpKTtcbiAgICAgICAgICAgIHRoaXMucm9vdC5hcHBlbmQodGhpcy5ob3N0KTtcbiAgICAgICAgICAgIC8vIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLnNsaWRlci5yb290KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcm9vdE9uU2l6ZUNoYW5nZWQoYXJncykge1xuICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhgV2ViTG9nby5vblJvb3RTaXplQ2hhbmdlZCgpIGAgK1xuICAgICAgICAvLyAgIGByb290LndpZHRoPSR7dGhpcy5yb290LmNsaWVudFdpZHRofSwgcm9vdC5oZWlnaHQ9JHt0aGlzLnJvb3QuY2xpZW50SGVpZ2h0fSwgYCArXG4gICAgICAgIC8vICAgYGNhbnZhcy53aWR0aD0ke3RoaXMuY2FudmFzLndpZHRofSwgY2FudmFzLmhlaWdodD0ke3RoaXMuY2FudmFzLmhlaWdodH0gLmApO1xuICAgIH1cbiAgICAvKiogQXNzaWducyB7QGxpbmsgc2VxQ29sfSBhbmQge0BsaW5rIGNwfSBiYXNlZCBvbiB7QGxpbmsgc2VxdWVuY2VDb2x1bW5OYW1lfSBhbmQgY2FsbHMge0BsaW5rIHJlbmRlcn0oKS5cbiAgICAgKi9cbiAgICB1cGRhdGVTZXFDb2woKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFGcmFtZSkge1xuICAgICAgICAgICAgdGhpcy5zZXFDb2wgPSB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSA/IHRoaXMuZGF0YUZyYW1lLmNvbCh0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VxQ29sID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcUNvbCA9IHRoaXMucGlja1VwU2VxQ29sKHRoaXMuZGF0YUZyYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSA9IHRoaXMuc2VxQ29sID8gdGhpcy5zZXFDb2wubmFtZSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXFDb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3AgPSBXZWJMb2dvLnBpY2tVcFBhbGV0dGUodGhpcy5zZXFDb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFBvc2l0aW9uID0gLTE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRQb3NpdGlvbiA9IC0xO1xuICAgICAgICAgICAgICAgIHRoaXMuY3AgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICAgIHVwZGF0ZVBvc2l0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlcUNvbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IGNhdGVnb3JpZXM7XG4gICAgICAgIGlmICh0aGlzLnNocmlua0VtcHR5VGFpbCkge1xuICAgICAgICAgICAgY29uc3QgaW5kaWNlcyA9IHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAgICAgICAgIGNhdGVnb3JpZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoQXJyYXkuZnJvbShBcnJheShpbmRpY2VzLmxlbmd0aCkua2V5cygpKS5tYXAoKGkpID0+IHRoaXMuc2VxQ29sLmdldChpbmRpY2VzW2ldKSkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhdGVnb3JpZXMgPSB0aGlzLnNlcUNvbC5jYXRlZ29yaWVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heExlbmd0aCA9IGNhdGVnb3JpZXMubGVuZ3RoID4gMCA/IE1hdGgubWF4KC4uLmNhdGVnb3JpZXMubWFwKChzKSA9PiBzICE9PSBudWxsID8gV2ViTG9nby5zcGxpdFNlcVRvTW9ub21lcnMocykubGVuZ3RoIDogMCkpIDogMDtcbiAgICAgICAgLy8gR2V0IHBvc2l0aW9uIG5hbWVzIGZyb20gZGF0YSBjb2x1bW4gdGFnICdwb3NpdGlvbk5hbWVzJ1xuICAgICAgICBjb25zdCBwb3NpdGlvbk5hbWVzVHh0ID0gdGhpcy5zZXFDb2wuZ2V0VGFnKCdwb3NpdGlvbk5hbWVzJyk7XG4gICAgICAgIC8vIEZhbGxiYWNrIGlmICdwb3NpdGlvbk5hbWVzJyB0YWcgaXMgbm90IHByb3ZpZGVkXG4gICAgICAgIHRoaXMucG9zaXRpb25OYW1lcyA9IHBvc2l0aW9uTmFtZXNUeHQgPyBwb3NpdGlvbk5hbWVzVHh0LnNwbGl0KCcsICcpLm1hcCgobikgPT4gbi50cmltKCkpIDpcbiAgICAgICAgICAgIFsuLi5BcnJheShtYXhMZW5ndGgpLmtleXMoKV0ubWFwKChqUG9zKSA9PiBgJHtqUG9zICsgMX1gKTtcbiAgICAgICAgdGhpcy5zdGFydFBvc2l0aW9uID0gKHRoaXMuc3RhcnRQb3NpdGlvbk5hbWUgJiYgdGhpcy5wb3NpdGlvbk5hbWVzICYmXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5jbHVkZXModGhpcy5zdGFydFBvc2l0aW9uTmFtZSkpID9cbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25OYW1lcy5pbmRleE9mKHRoaXMuc3RhcnRQb3NpdGlvbk5hbWUpIDogMDtcbiAgICAgICAgdGhpcy5lbmRQb3NpdGlvbiA9ICh0aGlzLmVuZFBvc2l0aW9uTmFtZSAmJiB0aGlzLnBvc2l0aW9uTmFtZXMgJiZcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25OYW1lcy5pbmNsdWRlcyh0aGlzLmVuZFBvc2l0aW9uTmFtZSkpID9cbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25OYW1lcy5pbmRleE9mKHRoaXMuZW5kUG9zaXRpb25OYW1lKSA6IChtYXhMZW5ndGggLSAxKTtcbiAgICB9XG4gICAgb25Qcm9wZXJ0eUNoYW5nZWQocHJvcGVydHkpIHtcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhgV2ViTG9nby5vblByb3BlcnR5Q2hhbmdlZCggJHtwcm9wZXJ0eS5uYW1lfSA9ICcnIH0pYCk7XG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5KTtcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5uYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdjb25zaWRlck51bGxTZXF1ZW5jZXMnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VxdWVuY2VDb2x1bW5OYW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RhcnRQb3NpdGlvbk5hbWUnOlxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VxQ29sKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmRQb3NpdGlvbk5hbWUnOlxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VxQ29sKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwb3NpdGlvbldpZHRoJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3NpdGlvbldpZHRoID0gdGhpcy5wb3NpdGlvbldpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWluSGVpZ2h0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21heEhlaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaXhXaWR0aCc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2ZXJ0aWNhbEFsaWdubWVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3Jpem9udGFsQWxpZ25tZW50JzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpdEFyZWEnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2hyaW5rRW1wdHlUYWlsJzpcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uVGFibGVBdHRhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoYFdlYkxvZ28ub25UYWJsZUF0dGFjaGVkKCBkYXRhRnJhbWUgPSAke3RoaXMuZGF0YUZyYW1lID8gJ2RhdGEnIDogJ251bGwnfSApYCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YUZyYW1lICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24ub25DaGFuZ2VkLnN1YnNjcmliZSgoXykgPT4gdGhpcy5yZW5kZXIoKSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuZGF0YUZyYW1lLmZpbHRlci5vbkNoYW5nZWQuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdGhpcy5pbml0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfbnVsbFNlcXVlbmNlKGZpbGxlclJlc2lkdWUgPSAnWCcpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uc2lkZXJOdWxsU2VxdWVuY2VzKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheSh0aGlzLkxlbmd0aCkuZmlsbChmaWxsZXJSZXNpZHVlKS5qb2luKCcnKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBfY2FsY3VsYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FudmFzIHx8ICF0aGlzLmhvc3QgfHwgIXRoaXMuc2VxQ29sIHx8ICF0aGlzLmRhdGFGcmFtZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jYWxjU2l6ZSgpO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IG5ldyBBcnJheSh0aGlzLkxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICAgICAgY29uc3QgcG9zTmFtZSA9IHRoaXMucG9zaXRpb25OYW1lc1t0aGlzLnN0YXJ0UG9zaXRpb24gKyBqUG9zXTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zW2pQb3NdID0gbmV3IFBvc2l0aW9uSW5mbyhwb3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICAvLyAyMDIyLTA1LTA1IGFza2Fsa2luIGluc3RydWN0ZWQgdG8gc2hvdyBXZWJMb2dvIGJhc2VkIG9uIGZpbHRlciAobm90IHNlbGVjdGlvbilcbiAgICAgICAgY29uc3QgaW5kaWNlcyA9IHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAgICAgLy8gY29uc3QgaW5kaWNlcyA9IHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi50cnVlQ291bnQgPiAwID8gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLmdldFNlbGVjdGVkSW5kZXhlcygpIDpcbiAgICAgICAgLy8gICB0aGlzLmRhdGFGcmFtZS5maWx0ZXIuZ2V0U2VsZWN0ZWRJbmRleGVzKCk7XG4gICAgICAgIHRoaXMucm93c01hc2tlZCA9IGluZGljZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJvd3NOdWxsID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIGluZGljZXMpIHtcbiAgICAgICAgICAgIGxldCBzID0gKHRoaXMuc2VxQ29sLmdldChpKSk7XG4gICAgICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICAgICAgICBzID0gdGhpcy5fbnVsbFNlcXVlbmNlKCk7XG4gICAgICAgICAgICAgICAgKyt0aGlzLnJvd3NOdWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VxTSA9IFdlYkxvZ28uc3BsaXRTZXFUb01vbm9tZXJzKHMpO1xuICAgICAgICAgICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG1JbmZvID0gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcTtcbiAgICAgICAgICAgICAgICBjb25zdCBtID0gc2VxTVt0aGlzLnN0YXJ0UG9zaXRpb24gKyBqUG9zXSB8fCAnLSc7XG4gICAgICAgICAgICAgICAgaWYgKCEobSBpbiBwbUluZm8pKVxuICAgICAgICAgICAgICAgICAgICBwbUluZm9bbV0gPSBuZXcgUG9zaXRpb25Nb25vbWVySW5mbygpO1xuICAgICAgICAgICAgICAgIHBtSW5mb1ttXS5jb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vI3JlZ2lvbiBQb2xpc2ggZnJlcSBjb3VudHNcbiAgICAgICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAgICAgICAvLyBkZWxldGUgdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcVsnLSddO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10ucm93Q291bnQgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBtIGluIHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXEpXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10ucm93Q291bnQgKz0gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcVttXS5jb3VudDtcbiAgICAgICAgfVxuICAgICAgICAvLyNlbmRyZWdpb25cbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC0gdGhpcy5heGlzSGVpZ2h0O1xuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKGBXZWJMb2dvLl9jYWxjdWxhdGUoKSBtYXhIZWlnaHQ9JHttYXhIZWlnaHR9LmApO1xuICAgICAgICAvLyNyZWdpb24gQ2FsY3VsYXRlIHNjcmVlblxuICAgICAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZyZXEgPSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxO1xuICAgICAgICAgICAgY29uc3Qgcm93Q291bnQgPSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5yb3dDb3VudDtcbiAgICAgICAgICAgIGxldCB5ID0gdGhpcy5heGlzSGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGZyZXEpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYVswXSAhPT0gJy0nICYmIGJbMF0gIT09ICctJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJbMV0uY291bnQgLSBhWzFdLmNvdW50O1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFbMF0gPT09ICctJyAmJiBiWzBdID09PSAnLScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFbMF0gPT09ICctJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIGVsc2UgLyogKGJbMF0gPT09ICctJykgKi9cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICsxO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwbUluZm8gPSBlbnRyeVsxXTtcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBtOiBzdHJpbmcgPSBlbnRyeVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBoID0gbWF4SGVpZ2h0ICogcG1JbmZvLmNvdW50IC8gcm93Q291bnQ7XG4gICAgICAgICAgICAgICAgcG1JbmZvLmJvdW5kcyA9IG5ldyBERy5SZWN0KGpQb3MgKiB0aGlzLl9wb3NpdGlvbldpZHRoLCB5LCB0aGlzLl9wb3NpdGlvbldpZHRoLCBoKTtcbiAgICAgICAgICAgICAgICB5ICs9IGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8jZW5kcmVnaW9uXG4gICAgfVxuICAgIC8vIHJlZmxlY3QgY2hhbmdlcyBtYWRlIHRvIGZpbHRlci9zZWxlY3Rpb25cbiAgICByZW5kZXIocmVjYWxjID0gdHJ1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLm1zZ0hvc3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcUNvbCAmJiAhdGhpcy5jcCkge1xuICAgICAgICAgICAgICAgIHRoaXMubXNnSG9zdC5pbm5lclRleHQgPSBgVW5rbm93biBwYWxldHRlIChjb2x1bW4gc2VtVHlwZTogJyR7dGhpcy5zZXFDb2wuc2VtVHlwZX0nKS5gO1xuICAgICAgICAgICAgICAgIHRoaXMubXNnSG9zdC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1zZ0hvc3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2FudmFzIHx8ICF0aGlzLnNlcUNvbCB8fCAhdGhpcy5kYXRhRnJhbWUgfHwgIXRoaXMuY3ApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGcgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoIWcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChyZWNhbGMpXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGUoKTtcbiAgICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICBnLmZpbGxTdHlsZSA9ICd3aGl0ZSc7XG4gICAgICAgIGcuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gICAgICAgIGcudGV4dEJhc2VsaW5lID0gdGhpcy50ZXh0QmFzZWxpbmU7XG4gICAgICAgIC8vIFByZXZlbnRzIGRpdmlzaW9uIGJ5IHplcm8gb24gTGVuZ3RoID0gMFxuICAgICAgICBpZiAodGhpcy5zdGFydFBvc2l0aW9uID09PSAtMSB8fCB0aGlzLmVuZFBvc2l0aW9uID09PSAtMSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8jcmVnaW9uIFBsb3QgcG9zaXRpb25OYW1lc1xuICAgICAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgICAgIGcuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgZy50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgZy5mb250ID0gJzEwcHggUm9ib3RvLCBSb2JvdG8gTG9jYWwsIHNhbnMtc2VyaWYnO1xuICAgICAgICBjb25zdCBwb3NOYW1lTWF4V2lkdGggPSBNYXRoLm1heCguLi50aGlzLnBvc2l0aW9ucy5tYXAoKHBvcykgPT4gZy5tZWFzdXJlVGV4dChwb3MubmFtZSkud2lkdGgpKTtcbiAgICAgICAgY29uc3QgaFNjYWxlID0gcG9zTmFtZU1heFdpZHRoIDwgKHRoaXMuX3Bvc2l0aW9uV2lkdGggLSAyKSA/IDEgOiAodGhpcy5fcG9zaXRpb25XaWR0aCAtIDIpIC8gcG9zTmFtZU1heFdpZHRoO1xuICAgICAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMucG9zaXRpb25zW2pQb3NdO1xuICAgICAgICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgZy5zZXRUcmFuc2Zvcm0oaFNjYWxlLCAwLCAwLCAxLCBqUG9zICogdGhpcy5fcG9zaXRpb25XaWR0aCArIHRoaXMuX3Bvc2l0aW9uV2lkdGggLyAyLCAwKTtcbiAgICAgICAgICAgIGcuZmlsbFRleHQocG9zLm5hbWUsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIC8vI2VuZHJlZ2lvbiBQbG90IHBvc2l0aW9uTmFtZXNcbiAgICAgICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFttb25vbWVyLCBwbUluZm9dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vbm9tZXIgIT09ICctJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiID0gcG1JbmZvLmJvdW5kcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9udFN0eWxlID0gJzE2cHggUm9ib3RvLCBSb2JvdG8gTG9jYWwsIHNhbnMtc2VyaWYnO1xuICAgICAgICAgICAgICAgICAgICAvLyBIYWNrcyB0byBzY2FsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyB0byB0YXJnZXQgcmVjdGFuZ2xlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyY2FzZUxldHRlckFzY2VudCA9IDAuMjU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyY2FzZUxldHRlckhlaWdodCA9IDEyLjI7XG4gICAgICAgICAgICAgICAgICAgIGcucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgZy5zdHJva2VTdHlsZSA9ICdsaWdodGdyYXknO1xuICAgICAgICAgICAgICAgICAgICBnLmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGcucmVjdChiLmxlZnQsIGIudG9wLCBiLndpZHRoLCBiLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIGcuZmlsbFN0eWxlID0gKF9hID0gdGhpcy5jcC5nZXQobW9ub21lcikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMuY3AuZ2V0KCdvdGhlcicpO1xuICAgICAgICAgICAgICAgICAgICBnLnRleHRBbGlnbiA9ICdsZWZ0JztcbiAgICAgICAgICAgICAgICAgICAgZy5mb250ID0gZm9udFN0eWxlO1xuICAgICAgICAgICAgICAgICAgICAvL2cuZmlsbFJlY3QoYi5sZWZ0LCBiLnRvcCwgYi53aWR0aCwgYi5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtVG0gPSBnLm1lYXN1cmVUZXh0KG1vbm9tZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAobU0uYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQgIT0gMClcbiAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmRlYnVnKGBtOiAke219LCBtTS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudDogJHttTS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudH1gKTtcbiAgICAgICAgICAgICAgICAgICAgZy5zZXRUcmFuc2Zvcm0oYi53aWR0aCAvIG1UbS53aWR0aCwgMCwgMCwgYi5oZWlnaHQgLyB1cHBlcmNhc2VMZXR0ZXJIZWlnaHQsIGIubGVmdCwgYi50b3ApO1xuICAgICAgICAgICAgICAgICAgICBnLmZpbGxUZXh0KG1vbm9tZXIsIDAsIC11cHBlcmNhc2VMZXR0ZXJBc2NlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYWxjU2l6ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbnZhcyB8fCAhdGhpcy5ob3N0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLkxlbmd0aCAqIHRoaXMucG9zaXRpb25XaWR0aDtcbiAgICAgICAgbGV0IGhlaWdodCA9IE1hdGgubWluKHRoaXMubWF4SGVpZ2h0LCBNYXRoLm1heCh0aGlzLm1pbkhlaWdodCwgdGhpcy5yb290LmNsaWVudEhlaWdodCkpO1xuICAgICAgICBpZiAodGhpcy5maXRBcmVhKSB7XG4gICAgICAgICAgICBjb25zdCB4U2NhbGUgPSB0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IC8gaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgeVNjYWxlID0gdGhpcy5yb290LmNsaWVudFdpZHRoIC8gd2lkdGg7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IE1hdGgubWF4KDEsIE1hdGgubWluKHhTY2FsZSwgeVNjYWxlKSk7XG4gICAgICAgICAgICB3aWR0aCA9IHdpZHRoICogc2NhbGU7XG4gICAgICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKiBzY2FsZTtcbiAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uV2lkdGggPSB0aGlzLnBvc2l0aW9uV2lkdGggKiBzY2FsZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICAgICAgLy8gY29uc3QgY2FudmFzSGVpZ2h0OiBudW1iZXIgPSB3aWR0aCA+IHRoaXMucm9vdC5jbGllbnRXaWR0aCA/IGhlaWdodCAtIDggOiBoZWlnaHQ7XG4gICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7aGVpZ2h0fXB4YCk7XG4gICAgICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IHRoaXMuaG9zdC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodDtcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsIGAke2NhbnZhc0hlaWdodH1weGApO1xuICAgICAgICAvLyBBZGp1c3QgaG9zdCBhbmQgcm9vdCB3aWR0aFxuICAgICAgICBpZiAodGhpcy5maXhXaWR0aCkge1xuICAgICAgICAgICAgLy8gZnVsbCB3aWR0aCBmb3IgY2FudmFzIGhvc3QgYW5kIHJvb3RcbiAgICAgICAgICAgIHRoaXMucm9vdC5zdHlsZS53aWR0aCA9IHRoaXMuaG9zdC5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICAgICAgICAgIHRoaXMucm9vdC5zdHlsZS5oZWlnaHQgLyo9IHRoaXMuaG9zdC5zdHlsZS5oZWlnaHQqLyA9IGAke2hlaWdodH1weGA7XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywgJ2hpZGRlbicsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGFsbG93IHNjcm9sbCBjYW52YXMgaW4gcm9vdFxuICAgICAgICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLm92ZXJmbG93WCA9ICdhdXRvIWltcG9ydGFudCc7XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ3RleHQtYWxpZ24nLCB0aGlzLmhvcml6b250YWxBbGlnbm1lbnQpO1xuICAgICAgICAgICAgLy8gdmVydGljYWwgYWxpZ25tZW50XG4gICAgICAgICAgICBsZXQgaG9zdFRvcE1hcmdpbiA9IDA7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICAgICAgICBob3N0VG9wTWFyZ2luID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICAgICAgICAgICAgaG9zdFRvcE1hcmdpbiA9IE1hdGgubWF4KDAsICh0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IC0gaGVpZ2h0KSAvIDIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgICAgICBob3N0VG9wTWFyZ2luID0gTWF0aC5tYXgoMCwgdGhpcy5yb290LmNsaWVudEhlaWdodCAtIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4tdG9wJywgYCR7aG9zdFRvcE1hcmdpbn1weGAsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IDwgaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLCBgJHt0aGlzLnJvb3QuY2xpZW50SGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdy15JywgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93LXknLCAnaGlkZGVuJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXG4gICAgICAgIC8vICAgYHRoaXMucm9vdC5zdHlsZS5oZWlnaHQgPSAke3RoaXMucm9vdC5zdHlsZS5oZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgYHRoaXMucm9vdC5jbGllbnRIZWlnaHQgPSAke3RoaXMucm9vdC5jbGllbnRIZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgYHRoaXMuaG9zdC5zdHlsZS5oZWlnaHQgPSAke3RoaXMuaG9zdC5zdHlsZS5oZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgYHRoaXMuaG9zdC5jbGllbnRIZWlnaHQgPSAke3RoaXMuaG9zdC5jbGllbnRIZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgJ1xcbicgK1xuICAgICAgICAvLyAgIGB0aGlzLmNhbnZhcy5oZWlnaHQgICAgICAgPSAke3RoaXMuY2FudmFzLmhlaWdodH1cXG5gICtcbiAgICAgICAgLy8gICBgdGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gJHt0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHR9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7REcuQ29sdW1ufSBzZXFDb2wgQ29sdW1uIHRvIGxvb2sgZm9yIGEgcGFsZXR0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSAgbWluTGVuZ3RoIG1pbmltdW0gbGVuZ3RoIG9mIHNlcXVlbmNlIHRvIGRldGVjdCBwYWxldHRlIChlbXB0eSBzdHJpbmdzIGFyZSBhbGxvd2VkKVxuICAgICAqIEByZXR1cm4ge1NlcVBhbGV0dGV9IFBhbGV0dGUgY29ycmVzcG9uZGluZyB0byB0aGUgYWxwaGFiZXQgb2YgdGhlIHNlcXVlbmNlcyBpbiB0aGUgY29sdW1uXG4gICAgICovXG4gICAgc3RhdGljIHBpY2tVcFBhbGV0dGUoc2VxQ29sLCBtaW5MZW5ndGggPSA1KSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBzd2l0Y2ggKHNlcUNvbC5zZW1UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFtaW5vYWNpZHMuU2VtVHlwZU11bHRpcGxlQWxpZ25tZW50OlxuICAgICAgICAgICAgICAgIHJlcyA9IEFtaW5vYWNpZHNQYWxldHRlcy5Hcm9rR3JvdXBzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOdWNsZW90aWRlcy5TZW1UeXBlTXVsdGlwbGVBbGlnbm1lbnQ6XG4gICAgICAgICAgICAgICAgcmVzID0gTnVjbGVvdGlkZXNQYWxldHRlcy5DaHJvbWF0b2dyYW07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxwaGFiZXRGcmVxcyA9IFdlYkxvZ28uZ2V0QWxwaGFiZXRGcmVxcyhzZXFDb2wsIG1pbkxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGFscGhhYmV0Q2FuZGlkYXRlcyA9IFtcbiAgICAgICAgICAgIFtuZXcgU2V0KE9iamVjdC5rZXlzKE51Y2xlb3RpZGVzLk5hbWVzKSksIE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtXSxcbiAgICAgICAgICAgIFtuZXcgU2V0KE9iamVjdC5rZXlzKEFtaW5vYWNpZHMuTmFtZXMpKSwgQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHNdLFxuICAgICAgICBdO1xuICAgICAgICAvLyBDYWxjdWxhdGUgbGlrZWxpaG9vZHMgZm9yIGFscGhhYmV0X2NhbmRpZGF0ZXNcbiAgICAgICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzU2ltID0gYWxwaGFiZXRDYW5kaWRhdGVzLm1hcCgoYykgPT4gV2ViTG9nby5nZXRBbHBoYWJldFNpbWlsYXJpdHkoYWxwaGFiZXRGcmVxcywgY1swXSkpO1xuICAgICAgICBjb25zdCBtYXhDb3MgPSBNYXRoLm1heCguLi5hbHBoYWJldENhbmRpZGF0ZXNTaW0pO1xuICAgICAgICBpZiAobWF4Q29zID4gMC42NSlcbiAgICAgICAgICAgIHJlcyA9IGFscGhhYmV0Q2FuZGlkYXRlc1thbHBoYWJldENhbmRpZGF0ZXNTaW0uaW5kZXhPZihtYXhDb3MpXVsxXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzID0gVW5rbm93blNlcVBhbGV0dGVzLkNvbG9yO1xuICAgICAgICAvLyBpZiAocmVzID09PSBudWxsKSB7XG4gICAgICAgIC8vICAgLy8gVGhlIGFscGhhYmV0IG9mIG51Y2xlb3RpZGVzIGlzIGEgc21hbGxlciBzZXQsIHNvIHdlIGNoZWNrIGl0IGZpcnN0LlxuICAgICAgICAvLyAgIGNvbnN0IGFscGhhYmV0ID0gey4uLk51Y2xlb3RpZGVzLk5hbWVzLCAuLi57Jy0nOiAnZ2FwJ319O1xuICAgICAgICAvLyAgIHJlcyA9IERHLkRldGVjdG9yLnNhbXBsZUNhdGVnb3JpZXMoc2VxQ29sLCAoc2VxKSA9PiB7XG4gICAgICAgIC8vICAgICByZXR1cm4gIXNlcSB8fCAoc2VxLmxlbmd0aCA+IG1pbkxlbmd0aCAmJiB0aGlzLnNwbGl0U2VxVG9Nb25vbWVycyhzZXEpLmV2ZXJ5KChuKSA9PiBuIGluIGFscGhhYmV0KSk7XG4gICAgICAgIC8vICAgfSwgMSkgPyBOdWNsZW90aWRlc1BhbGV0dGVzLkNocm9tYXRvZ3JhbSA6IG51bGw7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgICAgICAvLyAgIC8vIEFuZCB0aGVuIGNoZWNrIGZvciBhbWlubyBhY2lkJ3MgYWxwaGFiZXQuXG4gICAgICAgIC8vICAgY29uc3QgYWxwaGFiZXQgPSB7Li4uQW1pbm9hY2lkcy5OYW1lcywgLi4ueyctJzogJ2dhcCd9fTtcbiAgICAgICAgLy8gICByZXMgPSBERy5EZXRlY3Rvci5zYW1wbGVDYXRlZ29yaWVzKHNlcUNvbCwgKHNlcSkgPT4ge1xuICAgICAgICAvLyAgICAgcmV0dXJuICFzZXEgfHwgKHNlcS5sZW5ndGggPiBtaW5MZW5ndGggJiYgdGhpcy5zcGxpdFNlcVRvTW9ub21lcnMoc2VxKS5ldmVyeSgobikgPT4gbiBpbiBhbHBoYWJldCkpO1xuICAgICAgICAvLyAgIH0sIDEpID8gQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHMgOiBudWxsO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgLy8gICByZXMgPSBVbmtub3duU2VxUGFsZXR0ZXMuQ29sb3I7XG4gICAgICAgIC8vIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGdldEFscGhhYmV0RnJlcXMoc2VxQ29sLCBtaW5MZW5ndGggPSAwKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHNlcSBvZiBzZXFDb2wuY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgY29uc3QgbVNlcSA9IFdlYkxvZ28uc3BsaXRTZXFUb01vbm9tZXJzKHNlcSk7XG4gICAgICAgICAgICBpZiAobVNlcS5sZW5ndGggPiBtaW5MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbVNlcSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShtIGluIHJlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNbbV0gPSAwO1xuICAgICAgICAgICAgICAgICAgICByZXNbbV0gKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGdldEFscGhhYmV0U2ltaWxhcml0eShmcmVxLCBhbHBoYWJldCwgZ2FwU3ltYm9sID0gJy0nKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KFsuLi5uZXcgU2V0KE9iamVjdC5rZXlzKGZyZXEpKSwgLi4uYWxwaGFiZXRdKTtcbiAgICAgICAga2V5cy5kZWxldGUoZ2FwU3ltYm9sKTtcbiAgICAgICAgY29uc3QgZnJlcUEgPSBbXTtcbiAgICAgICAgY29uc3QgYWxwaGFiZXRBID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBmcmVxQS5wdXNoKG0gaW4gZnJlcSA/IGZyZXFbbV0gOiAwKTtcbiAgICAgICAgICAgIGFscGhhYmV0QS5wdXNoKGFscGhhYmV0LmhhcyhtKSA/IDEgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBUaGVyZSB3ZXJlIGEgZmV3IGlkZWFzOiBjaGktc3F1YXJlZCwgcGVhcnNvbiBjb3JyZWxhdGlvbiAodmFyaWFuY2U/KSwgc2NhbGFyIHByb2R1Y3QgKi9cbiAgICAgICAgY29uc3QgZnJlcVYgPSBuZXcgVmVjdG9yKGZyZXFBKTtcbiAgICAgICAgY29uc3QgYWxwaGFiZXRWID0gbmV3IFZlY3RvcihhbHBoYWJldEEpO1xuICAgICAgICBjb25zdCBjb3MgPSB2ZWN0b3JEb3RQcm9kdWN0KGZyZXFWLCBhbHBoYWJldFYpIC8gKHZlY3Rvckxlbmd0aChmcmVxVikgKiB2ZWN0b3JMZW5ndGgoYWxwaGFiZXRWKSk7XG4gICAgICAgIHJldHVybiBjb3M7XG4gICAgfVxuICAgIC8qKiBGaXJzdCB0cnkgdG8gZmluZCBjb2x1bW4gd2l0aCBzZW1UeXBlICdhbGlnbmVkU2VxdWVuY2UnLlxuICAgICAqIE5leHQgbG9vayBmb3IgY29sdW1uIHdpdGggZGF0YSBhbHBoYWJldCBjb3JyZXNwb25kaW5nIHRvIGFueSBvZiB0aGUga25vd24gcGFsZXR0ZXMuXG4gICAgICogQHBhcmFtIHtERy5EYXRhRnJhbWV9IGRhdGFGcmFtZVxuICAgICAqIEByZXR1cm4ge0RHLkNvbHVtbn0gVGhlIGNvbHVtbiB3ZSB3ZXJlIGxvb2tpbmcgZm9yIG9yIG51bGxcbiAgICAgKi9cbiAgICBwaWNrVXBTZXFDb2woZGF0YUZyYW1lKSB7XG4gICAgICAgIGxldCByZXMgPSBkYXRhRnJhbWUuY29sdW1ucy5ieVNlbVR5cGUoJ2FsaWduZWRTZXF1ZW5jZScpO1xuICAgICAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sIG9mIGRhdGFGcmFtZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3AgPSBXZWJMb2dvLnBpY2tVcFBhbGV0dGUoY29sLCA1KTtcbiAgICAgICAgICAgICAgICBpZiAoY3AgIT09IG51bGwgJiYgIShjcCBpbnN0YW5jZW9mIFVua25vd25TZXFQYWxldHRlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSBjb2w7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgc3BsaXRTZXFUb01vbm9tZXJzKHNlcSkge1xuICAgICAgICAvLyBUT0RPOiBVc2Ugc2VxdWVuY2Ugc2VwYXJhdG9yXG4gICAgICAgIGNvbnN0IHJlcyA9IHd1KHNlcS50b1N0cmluZygpLm1hdGNoQWxsKFdlYkxvZ28uc3BsaXRSZSkpLm1hcCgobWEpID0+IHtcbiAgICAgICAgICAgIGxldCBtUmVzO1xuICAgICAgICAgICAgY29uc3QgbSA9IG1hWzBdO1xuICAgICAgICAgICAgaWYgKG0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGlmIChtIGluIFdlYkxvZ28uYWFTeW5vbnltcykge1xuICAgICAgICAgICAgICAgICAgICBtUmVzID0gV2ViTG9nby5hYVN5bm9ueW1zW21dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbVJlcyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBMb25nIG1vbm9tZXIgJyR7bX0nIGhhcyBub3QgYSBzaG9ydCBzeW5vbnltLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1SZXMgPSBtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1SZXM7XG4gICAgICAgIH0pLnRvQXJyYXkoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5XZWJMb2dvLnJlc2lkdWVzU2V0ID0gJ251Y2xlb3RpZGVzJztcbldlYkxvZ28uc3BsaXRSZSA9IC9cXFsoXFx3KylcXF18KFxcdyl8KC0pL2c7XG4vKiogT25seSBzb21lIG9mIHRoZSBzeW5vbnltcy4gVGhlc2Ugd2VyZSBvYnRhaW5lZCBmcm9tIHRoZSBjbHVzdGVyZWQgb2xpZ29wZXB0aWRlIGRhdGFzZXQuICovXG5XZWJMb2dvLmFhU3lub255bXMgPSB7XG4gICAgJ1tNZU5sZV0nOiAnTCcsXG4gICAgJ1tNZUFdJzogJ0EnLFxuICAgICdbTWVHXSc6ICdHJyxcbiAgICAnW01lRl0nOiAnRicsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZDJWaUxXeHZaMjh1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjNaV0l0Ykc5bmJ5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN096czdRVUZEUVN4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUTNSRExFOUJRVThzUzBGQlN5eEZRVUZGTEUxQlFVMHNhVUpCUVdsQ0xFTkJRVU03UVVGRmRFTXNUMEZCVHl4RlFVRkZMRTFCUVUwc1NVRkJTU3hEUVVGRE8wRkJRM0JDTEU5QlFVOHNTMEZCU3l4SlFVRkpMRTFCUVUwc1RVRkJUU3hEUVVGRE8wRkJSVGRDTEU5QlFVOHNSVUZCUXl4TlFVRk5MRVZCUVVNc1RVRkJUU3hwUkVGQmFVUXNRMEZCUXp0QlFVTjJSU3hQUVVGUExFVkJRVU1zV1VGQldTeEZRVUZGTEdkQ1FVRm5RaXhGUVVGRExFMUJRVTBzYVVSQlFXbEVMRU5CUVVNN1FVRkRMMFlzVDBGQlR5eEZRVUZETEZWQlFWVXNSVUZCUlN4clFrRkJhMElzUlVGQlF5eE5RVUZOTEdWQlFXVXNRMEZCUXp0QlFVTTNSQ3hQUVVGUExFVkJRVU1zVjBGQlZ5eEZRVUZGTEcxQ1FVRnRRaXhGUVVGRExFMUJRVTBzWjBKQlFXZENMRU5CUVVNN1FVRkRhRVVzVDBGQlR5eEZRVUZETEdsQ1FVRnBRaXhGUVVGRkxHdENRVUZyUWl4RlFVRkRMRTFCUVUwc1dVRkJXU3hEUVVGRE8wRkJhVUpxUlN4cFFrRkJhVUlzUTBGQlF5eFRRVUZUTEVOQlFVTXNhVUpCUVdsQ0xFZEJRVWNzVlVGQlV5eExRVUZwUWp0SlFVTjRSU3hOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNjVUpCUVhGQ0xFVkJRVVVzUTBGQlF6dEpRVU14UXl4UFFVRlBMRWxCUVVrc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRE0wVXNRMEZCUXl4RFFVRkRPMEZCUlVZc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNVVUZCVVN4SFFVRkhMRlZCUVZNc1EwRkJVeXhGUVVGRkxFTkJRVk03U1VGRGVFUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1NVRkJTU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dEJRVU5vUml4RFFVRkRMRU5CUVVNN1FVRkZSaXhOUVVGTkxFOUJRVThzYlVKQlFXMUNPMGxCVXpsQ08xRkJRMFVzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRaaXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVONFF5eERRVUZETzBOQlEwWTdRVUZGUkN4TlFVRk5MRTlCUVU4c1dVRkJXVHRKUVV0MlFqczdUMEZGUnp0SlFVTklMRmxCUVZrc1NVRkJXVHRSUVVOMFFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOcVFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVObUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTNCQ0xFTkJRVU03UTBGRFJqdEJRVWRFTEUxQlFVMHNUMEZCVHl4UFFVRlJMRk5CUVZFc1JVRkJSU3hEUVVGRExGRkJRVkU3U1VGcFJIUkRPMUZCUTBVc1MwRkJTeXhGUVVGRkxFTkJRVU03VVVFdlEwWXNaMEpCUVZjc1IwRkJXU3hMUVVGTExFTkJRVU03VVVGRmNrTXNORVpCUVRSR08xRkJRMnhHTEU5QlFVVXNSMEZCYzBJc1NVRkJTU3hEUVVGRE8xRkJVUzlDTEdWQlFWVXNSMEZCVnl4RlFVRkZMRU5CUVVNN1VVRkZlRUlzVjBGQlRTeEhRVUUyUWl4SlFVRkpMRU5CUVVNN1VVRkRhRVFzYlVOQlFXMURPMUZCUXpOQ0xHTkJRVk1zUjBGQmJVSXNSVUZCUlN4RFFVRkRPMUZCUlM5Q0xHVkJRVlVzUjBGQlZ5eERRVUZETEVOQlFVTTdVVUZEZGtJc1lVRkJVU3hIUVVGWExFTkJRVU1zUTBGQlF6dFJRV2xDY2tJc2EwSkJRV0VzUjBGQllTeEZRVUZGTEVOQlFVTTdVVUZGTjBJc2EwSkJRV0VzUjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVXpRaXhuUWtGQlZ5eEhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCVlM5Q0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUlRGQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNSVUZCUlN4RlFVRkZMRU5CUVVFN09FUkJRMjVDTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhGUVVGRkxFVkJRVVVzUTBGQlFUdG5SVUZEWVN4RFFVRkRMRU5CUVVNN1VVRkRNVVFzU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUlVGQlJTeEhRVUZITEVOQlFVRTdaMFZCUTFrc1EwRkJReXhEUVVGRE8xRkJSVEZFTEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMSFZDUVVGMVFpeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUTNaRkxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEc5Q1FVRnZRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJXeEZMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHMUNRVUZ0UWl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMmhGTEVsQlFVa3NRMEZCUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVUxUkN4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJSVGRETEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTEZGQlFWRXNSVUZEYUVVc1JVRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eExRVUZMTEVWQlFVVXNVVUZCVVN4RlFVRkZMRkZCUVZFc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU14UXl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXh4UWtGQmNVSXNSVUZCUlN4UlFVRlJMRVZCUTNCRkxFVkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RlFVRkZMRkZCUVZFc1JVRkJSU3hQUVVGUExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdVVUZETVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU14UXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZETlVRc1EwRkJRenRKUVM5Q1JDd3dSRUZCTUVRN1NVRkRNVVFzU1VGQldTeE5RVUZOTzFGQlEyaENMRTlCUVU4c1NVRkJTU3hEUVVGRExHRkJRV0VzU1VGQlNTeEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYUVjc1EwRkJRenRKUVRoQ1lTeEpRVUZKT3p0WlFVTm9RaXhKUVVGSkxFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVTdaMEpCUTNCQ0xFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNaME5CUVdkRExFTkJRVU1zUTBGQlF6dG5Ra0ZEYUVRc1QwRkJUenRoUVVOU08xbEJSVVFzU1VGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNN1dVRkRlRUlzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4eFEwRkJjVU1zUTBGQlF6dFpRVVZ5UkN4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRjRU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6dFpRVVZ3UXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTXhRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1RVRkJUU3hEUVVGRE8xbEJSV3BETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZGYUVRc05rTkJRVFpETzFsQlF6ZERMSGxEUVVGNVF6dFpRVU42UXl3d1EwRkJNRU03V1VGRk1VTXNUVUZCVFN4VlFVRlZMRWRCUVVjc1EwRkJReXhEUVVGWExFVkJRWFZFTEVWQlFVVTdaMEpCUTNSR0xFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNN1owSkJRMjVFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdaMEpCUlhSRExFbEJRVWtzVVVGQlVTeExRVUZMTEV0QlFVc3NRMEZCUXp0dlFrRkRja0lzVDBGQlR5eERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlJUVkNMRTFCUVUwc1QwRkJUeXhIUVVGMVFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU03Y1VKQlF6TkVMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRek5FTEVsQlFVa3NUMEZCVHl4TFFVRkxMRk5CUVZNN2IwSkJRM1pDTEU5QlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVVTFRaXhQUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZGTEU5QlFVOHNSVUZCUlN4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEYWtRc1EwRkJReXhEUVVGRE8xbEJSVVlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRWRCUVVjc1EwRkJReXhEUVVGaExFVkJRVVVzUlVGQlJUdFpRVVUxUXl4RFFVRkRMRU5CUVVNN1dVRkZSaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGaExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNWMEZCVnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQllTeEZRVUZGTEVWQlFVVTdaMEpCUXpsR0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFR0dlFrRkRaQ3hQUVVGUE8yZENRVVZVTEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVdVc1EwRkJRenRuUWtGRE4wSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hQUVVGUExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVVY0UlN4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4UFFVRlBMRVZCUVVVN2IwSkJRelZETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSVHQzUWtGREwwTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN2QwSkJRMjVETEUxQlFVMHNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEd0Q1FVRnJRaXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRja1lzVDBGQlR5eEpRVUZKTEV0QlFVc3NUMEZCVHl4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenR2UWtGRE4wUXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU03YVVKQlF6bENPM0ZDUVVGTk8yOUNRVU5NTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03YVVKQlEyNUNPMWxCUTBnc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVVZLTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFXRXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRmhMRVZCUVVVc1JVRkJSVHRuUWtGRE9VWXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRPMjlDUVVNdlFpeFBRVUZQTzJkQ1FVVlVMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRV1VzUTBGQlF6dG5Ra0ZETjBJc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJTeFBRVUZQTEVOQlFVTXNSMEZCUnl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVVjRSU3gxUkVGQmRVUTdaMEpCUTNaRUxFbEJRVWtzU1VGQlNTeERRVUZETEZOQlFWTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hKUVVGSkxFOUJRVThzUlVGQlJUdHZRa0ZETlVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFVkJRVVU3ZDBKQlEzSkRMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8zZENRVU51UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4clFrRkJhMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN2QwSkJRM0pHTEU5QlFVOHNTVUZCU1N4TFFVRkxMRTlCUVU4c1NVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03YjBKQlF6ZEVMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU5LTzFsQlEwZ3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVWS0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVVjZSaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRE5VSXNNa05CUVRKRE8xbEJSVE5ETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGNFSXNRMEZCUXp0TFFVRkJPMGxCUlU4c2FVSkJRV2xDTEVOQlFVTXNTVUZCVXp0UlFVTnFReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUld4Q0xHbEVRVUZwUkR0UlFVTnFSQ3h4UmtGQmNVWTdVVUZEY2tZc2FVWkJRV2xHTzBsQlEyNUdMRU5CUVVNN1NVRkZSRHRQUVVOSE8wbEJRMHNzV1VGQldUdFJRVU5zUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFVkJRVVU3V1VGRGJFSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE0wWXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hKUVVGSkxFbEJRVWtzUlVGQlJUdG5Ra0ZEZGtJc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dG5Ra0ZEYUVRc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdZVUZEYWtVN1dVRkRSQ3hKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdaMEpCUTJZc1NVRkJTU3hEUVVGRExHVkJRV1VzUlVGQlJTeERRVUZETzJkQ1FVTjJRaXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZITEU5QlFVOHNRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzJGQlF6bERPMmxDUVVGTk8yZENRVU5NTEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1JVRkJSU3hEUVVGRE8yZENRVU40UWl4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjRRaXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOMFFpeEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJRenRoUVVOb1FqdFRRVU5HTzFGQlEwUXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8wbEJRMmhDTEVOQlFVTTdTVUZGVHl4bFFVRmxPMUZCUTNKQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFR0WlFVTmtMRTlCUVU4N1VVRkZWQ3hKUVVGSkxGVkJRVGhDTEVOQlFVTTdVVUZEYmtNc1NVRkJTU3hKUVVGSkxFTkJRVU1zWlVGQlpTeEZRVUZGTzFsQlEzaENMRTFCUVUwc1QwRkJUeXhIUVVGbExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMR3RDUVVGclFpeEZRVUZGTEVOQlFVTTdXVUZEZGtVc1ZVRkJWU3hIUVVGSExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUXpkQ0xFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVk1zUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VTBGREwwWTdZVUZCVFR0WlFVTk1MRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXp0VFFVTnlRenRSUVVORUxFMUJRVTBzVTBGQlV5eEhRVUZITEZWQlFWVXNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGRGJFVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZ5UlN3d1JFRkJNRVE3VVVGRE1VUXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF6dFJRVU0zUkN4clJFRkJhMFE3VVVGRGJFUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjZSaXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUlRWRUxFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVsQlFVa3NTVUZCU1N4RFFVRkRMR0ZCUVdFN1dVRkRhRVVzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM1JFTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtRc1NVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4bFFVRmxMRWxCUVVrc1NVRkJTU3hEUVVGRExHRkJRV0U3V1VGRE5VUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOd1JDeEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzWkZMRU5CUVVNN1NVRkZaU3hwUWtGQmFVSXNRMEZCUXl4UlFVRnhRanRSUVVOeVJDeDNSVUZCZDBVN1VVRkRlRVVzUzBGQlN5eERRVUZETEdsQ1FVRnBRaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFGQlJXeERMRkZCUVZFc1VVRkJVU3hEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU4yUWl4TFFVRkxMSFZDUVVGMVFqdG5Ra0ZETVVJc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0blFrRkRiRUlzVFVGQlRUdFpRVU5TTEV0QlFVc3NiMEpCUVc5Q08yZENRVU4yUWl4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU03WjBKQlEzQkNMRTFCUVUwN1dVRkRVaXhMUVVGTExHMUNRVUZ0UWp0blFrRkRkRUlzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeE5RVUZOTzFsQlExSXNTMEZCU3l4cFFrRkJhVUk3WjBKQlEzQkNMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dG5Ra0ZEY0VJc1RVRkJUVHRaUVVOU0xFdEJRVXNzWlVGQlpUdG5Ra0ZEYkVJc1NVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRPMmRDUVVONlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU5zUWl4TlFVRk5PMWxCUTFJc1MwRkJTeXhYUVVGWE8yZENRVU5rTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlEyeENMRTFCUVUwN1dVRkRVaXhMUVVGTExGZEJRVmM3WjBKQlEyUXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZEYkVJc1RVRkJUVHRaUVVOU0xFdEJRVXNzVlVGQlZUdG5Ra0ZEWWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTnNRaXhOUVVGTk8xbEJRMUlzUzBGQlN5eHRRa0ZCYlVJN1owSkJRM1JDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlEyeENMRTFCUVUwN1dVRkRVaXhMUVVGTExIRkNRVUZ4UWp0blFrRkRlRUlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGJFSXNUVUZCVFR0WlFVTlNMRXRCUVVzc1UwRkJVenRuUWtGRFdpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU5zUWl4TlFVRk5PMWxCUTFJc1MwRkJTeXhwUWtGQmFVSTdaMEpCUTNCQ0xFbEJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0blFrRkRka0lzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGJFSXNUVUZCVFR0VFFVTlFPMGxCUTBnc1EwRkJRenRKUVVWeFFpeGxRVUZsT3p0WlFVTnVReXdyUmtGQkswWTdXVUZETDBZc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETzFsQlJYQkNMRWxCUVVrc1NVRkJTU3hEUVVGRExGTkJRVk1zUzBGQlN5eExRVUZMTEVOQlFVTXNSVUZCUlR0blFrRkROMElzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eFRRVUZUTEVOQlFVTXNVMEZCVXl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEYmtZc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRk8yOUNRVU0zUkN4SlFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03YjBKQlEzWkNMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dG5Ra0ZEYUVJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5NTzFsQlJVUXNUVUZCVFN4SlFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGNFSXNRMEZCUXp0TFFVRkJPMGxCUlZNc1lVRkJZU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEhRVUZITzFGQlEzcERMRWxCUVVrc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWp0WlFVTTFRaXhQUVVGUExFbEJRVWtzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSVGRFTEU5QlFVOHNSVUZCUlN4RFFVRkRPMGxCUTFvc1EwRkJRenRKUVVWVExGVkJRVlU3VVVGRGJFSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRPMWxCUXk5RUxFOUJRVTg3VVVGRlZDeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1VVRkZhRUlzU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZEZUVNc1MwRkJTeXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETEVWQlFVVXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVTdXVUZETjBNc1RVRkJUU3hQUVVGUExFZEJRVmNzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEzUkZMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4WlFVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VTBGRGJFUTdVVUZGUkN4cFJrRkJhVVk3VVVGRGFrWXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzUTBGQlF6dFJRVU16UkN3eVIwRkJNa2M3VVVGRE0wY3NaMFJCUVdkRU8xRkJSV2hFTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU5xUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVVZzUWl4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFOUJRVThzUlVGQlJUdFpRVU4yUWl4SlFVRkpMRU5CUVVNc1IwRkJiVUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlJUZERMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVVU3WjBKQlEwNHNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFVkJRVVVzUTBGQlF6dG5Ra0ZEZWtJc1JVRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzJGQlEycENPMWxCUlVRc1RVRkJUU3hKUVVGSkxFZEJRV0VzVDBGQlR5eERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzSkVMRXRCUVVzc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTzJkQ1FVTTNReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEZWtNc1RVRkJUU3hEUVVGRExFZEJRVmNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETzJkQ1FVTjZSQ3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRPMjlDUVVOb1FpeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3h0UWtGQmJVSXNSVUZCUlN4RFFVRkRPMmRDUVVONFF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03WVVGRGJrSTdVMEZEUmp0UlFVVkVMRFJDUVVFMFFqdFJRVU0xUWl4TFFVRkxMRWxCUVVrc1NVRkJTU3hIUVVGSExFTkJRVU1zUlVGQlJTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzUlVGQlJUdFpRVU0zUXl4NVEwRkJlVU03V1VGRmVrTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eFJRVUZSTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJ4RExFdEJRVXNzVFVGQlRTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTzJkQ1FVTjJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRkZCUVZFc1NVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTTdVMEZEZGtVN1VVRkRSQ3haUVVGWk8xRkJSVm9zVFVGQlRTeFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXp0UlFVTjJSQ3hwUlVGQmFVVTdVVUZGYWtVc01FSkJRVEJDTzFGQlF6RkNMRXRCUVVzc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTzFsQlF6ZERMRTFCUVUwc1NVRkJTU3hIUVVGNVF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dFpRVU0zUlN4TlFVRk5MRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJRenRaUVVVdlF5eEpRVUZKTEVOQlFVTXNSMEZCVnl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xbEJSV2hETEUxQlFVMHNUMEZCVHl4SFFVRkhMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTnFSQ3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVYzdiMEpCUXpsQ0xFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRPM0ZDUVVNMVFpeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjN2IwSkJRMjVETEU5QlFVOHNRMEZCUXl4RFFVRkRPM0ZDUVVOT0xFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjN2IwSkJRMjVDTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN2NVSkJRMUFzYjBKQlFXOUNPMjlDUVVOMlFpeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTJRc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRFNDeExRVUZMTEUxQlFVMHNTMEZCU3l4SlFVRkpMRTlCUVU4c1JVRkJSVHRuUWtGRE0wSXNUVUZCVFN4TlFVRk5MRWRCUVhkQ0xFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkROME1zT0VKQlFUaENPMmRDUVVNNVFpeE5RVUZOTEVOQlFVTXNSMEZCVnl4VFFVRlRMRWRCUVVjc1RVRkJUU3hEUVVGRExFdEJRVXNzUjBGQlJ5eFJRVUZSTEVOQlFVTTdaMEpCUlhSRUxFMUJRVTBzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOdVJpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMkZCUTFJN1UwRkRSanRSUVVORUxGbEJRVms3U1VGRFpDeERRVUZETzBsQlJVUXNNa05CUVRKRE8wbEJRek5ETEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTVHM3VVVGRGJFSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRMmhDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUXpOQ0xFbEJRVWtzUTBGQlF5eFBRVUZSTEVOQlFVTXNVMEZCVXl4SFFVRkhMSEZEUVVGeFF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1MwRkJTeXhEUVVGRE8yZENRVU40Uml4SlFVRkpMRU5CUVVNc1QwRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRPMkZCUTJ4RE8ybENRVUZOTzJkQ1FVTk1MRWxCUVVrc1EwRkJReXhQUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNN1lVRkRkRU03VTBGRFJqdFJRVVZFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0WlFVTTNSQ3hQUVVGUE8xRkJSVlFzVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEZGtNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGQlJTeFBRVUZQTzFGQlJXWXNTVUZCU1N4TlFVRk5PMWxCUTFJc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJTeERRVUZETzFGQlJYQkNMRU5CUVVNc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dFJRVU51UWl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExFOUJRVThzUTBGQlF6dFJRVU4wUWl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVONFJDeERRVUZETEVOQlFVTXNXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU03VVVGRmJrTXNNRU5CUVRCRE8xRkJRekZETEVsQlFVa3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNWMEZCVnl4TFFVRkxMRU5CUVVNc1EwRkJRenRaUVVOMFJDeFBRVUZQTzFGQlJWUXNORUpCUVRSQ08xRkJRelZDTEVOQlFVTXNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRSUVVOdVFpeERRVUZETEVOQlFVTXNVMEZCVXl4SFFVRkhMRTlCUVU4c1EwRkJRenRSUVVOMFFpeERRVUZETEVOQlFVTXNVMEZCVXl4SFFVRkhMRkZCUVZFc1EwRkJRenRSUVVOMlFpeERRVUZETEVOQlFVTXNTVUZCU1N4SFFVRkhMSFZEUVVGMVF5eERRVUZETzFGQlEycEVMRTFCUVUwc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5vUnl4TlFVRk5MRTFCUVUwc1IwRkJSeXhsUVVGbExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4bFFVRmxMRU5CUVVNN1VVRkZOMGNzUzBGQlN5eEpRVUZKTEVsQlFVa3NSMEZCUnl4RFFVRkRMRVZCUVVVc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMRVZCUVVVN1dVRkROME1zVFVGQlRTeEhRVUZITEVkQlFXbENMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdXVUZETDBNc1EwRkJReXhEUVVGRExHTkJRV01zUlVGQlJTeERRVUZETzFsQlEyNUNMRU5CUVVNc1EwRkJReXhaUVVGWkxFTkJRMW9zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVObUxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRWxCUVVrc1EwRkJReXhqUVVGakxFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpORUxFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZETlVJN1VVRkRSQ3dyUWtGQkswSTdVVUZGTDBJc1MwRkJTeXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETEVWQlFVVXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVTdXVUZETjBNc1MwRkJTeXhOUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdG5Ra0ZEZWtVc1NVRkJTU3hQUVVGUExFdEJRVXNzUjBGQlJ5eEZRVUZGTzI5Q1FVTnVRaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRPMjlDUVVWNFFpeE5RVUZOTEZOQlFWTXNSMEZCUnl4MVEwRkJkVU1zUTBGQlF6dHZRa0ZETVVRc01FUkJRVEJFTzI5Q1FVTXhSQ3hOUVVGTkxIRkNRVUZ4UWl4SFFVRkhMRWxCUVVrc1EwRkJRenR2UWtGRGJrTXNUVUZCVFN4eFFrRkJjVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTTdiMEpCUlc1RExFTkJRVU1zUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0dlFrRkRia0lzUTBGQlF5eERRVUZETEZkQlFWY3NSMEZCUnl4WFFVRlhMRU5CUVVNN2IwSkJRelZDTEVOQlFVTXNRMEZCUXl4VFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVU5vUWl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenR2UWtGRGVrTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1IwRkJSeXhOUVVGQkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXh0UTBGQlNTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dHZRa0ZETTBRc1EwRkJReXhEUVVGRExGTkJRVk1zUjBGQlJ5eE5RVUZOTEVOQlFVTTdiMEpCUTNKQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NVMEZCVXl4RFFVRkRPMjlDUVVOdVFpd3JRMEZCSzBNN2IwSkJReTlETEUxQlFVMHNSMEZCUnl4SFFVRm5RaXhEUVVGRExFTkJRVU1zVjBGQlZ5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMjlDUVVWb1JDeDFRMEZCZFVNN2IwSkJRM1pETEhsR1FVRjVSanR2UWtGRmVrWXNRMEZCUXl4RFFVRkRMRmxCUVZrc1EwRkRXaXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVkQlFVY3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMSEZDUVVGeFFpeEZRVU16UkN4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0dlFrRkRha0lzUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1EwRkJRenRwUWtGRGFFUTdZVUZEUmp0VFFVTkdPMGxCUTBnc1EwRkJRenRKUVVWUExGRkJRVkU3VVVGRFpDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTzFsQlF6VkNMRTlCUVU4N1VVRkZWQ3hKUVVGSkxFdEJRVXNzUjBGQlZ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU03VVVGRGNrUXNTVUZCU1N4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGZUVZc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFsQlEyaENMRTFCUVUwc1RVRkJUU3hIUVVGWExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4SFFVRkhMRTFCUVUwc1EwRkJRenRaUVVOMlJDeE5RVUZOTEUxQlFVMHNSMEZCVnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZEY2tRc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOd1JDeExRVUZMTEVkQlFVY3NTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJRenRaUVVOMFFpeE5RVUZOTEVkQlFVY3NUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJRenRaUVVONFFpeEpRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFZEJRVWNzUzBGQlN5eERRVUZETzFOQlEyeEVPMUZCUlVRc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUXpGQ0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhIUVVGSExFdEJRVXNzU1VGQlNTeERRVUZETzFGQlJYWkRMRzlHUVVGdlJqdFJRVU53Uml4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU55UkN4TlFVRk5MRmxCUVZrc1IwRkJWeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXp0UlFVTndSQ3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4WlFVRlpMRU5CUVVNN1VVRkRiRU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVGRExGRkJRVkVzUlVGQlJTeEhRVUZITEZsQlFWa3NTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZOMFFzTmtKQlFUWkNPMUZCUXpkQ0xFbEJRVWtzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlR0WlFVTnFRaXh6UTBGQmMwTTdXVUZEZEVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4SFFVRkhMRXRCUVVzc1NVRkJTU3hEUVVGRE8xbEJRemRFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5dzBRa0ZCTkVJc1IwRkJSeXhIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETzFsQlEzQkZMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUXl4VlFVRlZMRVZCUVVVc1VVRkJVU3hGUVVGRkxGZEJRVmNzUTBGQlF5eERRVUZETzFOQlEyaEZPMkZCUVUwN1dVRkRUQ3c0UWtGQk9FSTdXVUZET1VJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4TlFVRk5MRU5CUVVNN1dVRkRka1FzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhIUVVGSExHZENRVUZuUWl4RFFVRkRPMWxCUXpkRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhWUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdXVUZGT1VNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRmxCUVZrc1JVRkJSU3hKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1EwRkJRenRaUVVWd1JTeHhRa0ZCY1VJN1dVRkRja0lzU1VGQlNTeGhRVUZoTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNSQ0xGRkJRVkVzU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhGUVVGRk8yZENRVU5vUXl4TFFVRkxMRXRCUVVzN2IwSkJRMUlzWVVGQllTeEhRVUZITEVOQlFVTXNRMEZCUXp0dlFrRkRiRUlzVFVGQlRUdG5Ra0ZEVWl4TFFVRkxMRkZCUVZFN2IwSkJRMWdzWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdiMEpCUTI1RkxFMUJRVTA3WjBKQlExSXNTMEZCU3l4UlFVRlJPMjlDUVVOWUxHRkJRV0VzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJRenR2UWtGRE4wUXNUVUZCVFR0aFFVTlFPMWxCUTBRc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRmxCUVZrc1JVRkJSU3hIUVVGSExHRkJRV0VzU1VGQlNTeEZRVUZGTEZkQlFWY3NRMEZCUXl4RFFVRkRPMWxCUlRkRkxFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1RVRkJUU3hGUVVGRk8yZENRVU51UXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVOeVJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zV1VGQldTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMkZCUTJwRU8ybENRVUZOTzJkQ1FVTk1MRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUXl4WlFVRlpMRVZCUVVVc1VVRkJVU3hGUVVGRkxGZEJRVmNzUTBGQlF5eERRVUZETzJGQlEyeEZPMU5CUTBZN1VVRkZSQ3hwUWtGQmFVSTdVVUZEYWtJc05rUkJRVFpFTzFGQlF6ZEVMRFpFUVVFMlJEdFJRVU0zUkN3MlJFRkJOa1E3VVVGRE4wUXNOa1JCUVRaRU8xRkJRemRFTEZkQlFWYzdVVUZEV0N3eVJFRkJNa1E3VVVGRE0wUXNLMFJCUVN0RU8wbEJRMnBGTEVOQlFVTTdTVUZGUkRzN096dFBRVWxITzBsQlEwa3NUVUZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGcFFpeEZRVUZGTEZsQlFXOUNMRU5CUVVNN1VVRkRiRVVzU1VGQlNTeEhRVUZITEVkQlFYTkNMRWxCUVVrc1EwRkJRenRSUVVOc1F5eFJRVUZSTEUxQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1dVRkRlRUlzUzBGQlN5eFZRVUZWTEVOQlFVTXNkMEpCUVhkQ08yZENRVU4wUXl4SFFVRkhMRWRCUVVjc2EwSkJRV3RDTEVOQlFVTXNWVUZCVlN4RFFVRkRPMmRDUVVOd1F5eE5RVUZOTzFsQlExSXNTMEZCU3l4WFFVRlhMRU5CUVVNc2QwSkJRWGRDTzJkQ1FVTjJReXhIUVVGSExFZEJRVWNzYlVKQlFXMUNMRU5CUVVNc1dVRkJXU3hEUVVGRE8yZENRVU4yUXl4TlFVRk5PMU5CUTFBN1VVRkRSQ3hOUVVGTkxHRkJRV0VzUjBGQmFVSXNUMEZCVHl4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRSUVVWb1JpeE5RVUZOTEd0Q1FVRnJRaXhIUVVGblF6dFpRVU4wUkN4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVVzYlVKQlFXMUNMRU5CUVVNc1dVRkJXU3hEUVVGRE8xbEJRek5GTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSU3hyUWtGQmEwSXNRMEZCUXl4VlFVRlZMRU5CUVVNN1UwRkRlRVVzUTBGQlF6dFJRVU5HTEdkRVFVRm5SRHRSUVVOb1JDeE5RVUZOTEhGQ1FVRnhRaXhIUVVGaExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1EwRkROVVFzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4aFFVRmhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTTNSQ3hOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc2NVSkJRWEZDTEVOQlFVTXNRMEZCUXp0UlFVTnNSQ3hKUVVGSkxFMUJRVTBzUjBGQlJ5eEpRVUZKTzFsQlEyWXNSMEZCUnl4SFFVRkhMR3RDUVVGclFpeERRVUZETEhGQ1FVRnhRaXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE96dFpRVVZ1UlN4SFFVRkhMRWRCUVVjc2EwSkJRV3RDTEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUldwRExITkNRVUZ6UWp0UlFVTjBRaXd5UlVGQk1rVTdVVUZETTBVc09FUkJRVGhFTzFGQlF6bEVMREJFUVVFd1JEdFJRVU14UkN3eVIwRkJNa2M3VVVGRE0wY3NjVVJCUVhGRU8xRkJRM0pFTEVsQlFVazdVVUZEU2l4elFrRkJjMEk3VVVGRGRFSXNhVVJCUVdsRU8xRkJRMnBFTERaRVFVRTJSRHRSUVVNM1JDd3dSRUZCTUVRN1VVRkRNVVFzTWtkQlFUSkhPMUZCUXpOSExHdEVRVUZyUkR0UlFVTnNSQ3hKUVVGSk8xRkJRMG9zYzBKQlFYTkNPMUZCUTNSQ0xHOURRVUZ2UXp0UlFVTndReXhKUVVGSk8xRkJRMG9zVDBGQlR5eEhRVUZITEVOQlFVTTdTVUZEWWl4RFFVRkRPMGxCUlUwc1RVRkJUU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVdsQ0xFVkJRVVVzV1VGQmIwSXNRMEZCUXp0UlFVTnlSU3hOUVVGTkxFZEJRVWNzUjBGQmFVSXNSVUZCUlN4RFFVRkRPMUZCUXpkQ0xFdEJRVXNzVFVGQlRTeEhRVUZITEVsQlFVa3NUVUZCVFN4RFFVRkRMRlZCUVZVc1JVRkJSVHRaUVVOdVF5eE5RVUZOTEVsQlFVa3NSMEZCWVN4UFFVRlBMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRka1FzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRk5CUVZNc1JVRkJSVHRuUWtGRE0wSXNTMEZCU3l4TlFVRk5MRU5CUVVNc1NVRkJTU3hKUVVGSkxFVkJRVVU3YjBKQlEzQkNMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTTdkMEpCUTJJc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0dlFrRkRZaXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmxDUVVOaU8yRkJRMFk3VTBGRFJqdFJRVU5FTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1EwRkJRenRKUVVWTkxFMUJRVTBzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhKUVVGclFpeEZRVUZGTEZGQlFYRkNMRVZCUVVVc1dVRkJiMElzUjBGQlJ6dFJRVU53Unl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFZEJRVWNzUTBGQlV5eERRVUZETEVkQlFVY3NTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU16UlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFGQlJYWkNMRTFCUVUwc1MwRkJTeXhIUVVGaExFVkJRVVVzUTBGQlF6dFJRVU16UWl4TlFVRk5MRk5CUVZNc1IwRkJZU3hGUVVGRkxFTkJRVU03VVVGREwwSXNTMEZCU3l4TlFVRk5MRU5CUVVNc1NVRkJTU3hKUVVGSkxFVkJRVVU3V1VGRGNFSXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNCRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU42UXp0UlFVTkVMREJHUVVFd1JqdFJRVU14Uml4TlFVRk5MRXRCUVVzc1IwRkJWeXhKUVVGSkxFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTjRReXhOUVVGTkxGTkJRVk1zUjBGQlZ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRSUVVOb1JDeE5RVUZOTEVkQlFVY3NSMEZCVnl4blFrRkJaMElzUTBGQlF5eExRVUZMTEVWQlFVVXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NXVUZCV1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGVrY3NUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRZaXhEUVVGRE8wbEJSVVE3T3pzN1QwRkpSenRKUVVOTExGbEJRVmtzUTBGQlF5eFRRVUYxUWp0UlFVTXhReXhKUVVGSkxFZEJRVWNzUjBGQmNVSXNVMEZCVXl4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1EwRkJRenRSUVVNelJTeEpRVUZKTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVN1dVRkRaaXhMUVVGTExFMUJRVTBzUjBGQlJ5eEpRVUZKTEZOQlFWTXNRMEZCUXl4UFFVRlBMRVZCUVVVN1owSkJRMjVETEUxQlFVMHNSVUZCUlN4SFFVRkhMRTlCUVU4c1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlowSXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGRFUXNTVUZCU1N4RlFVRkZMRXRCUVVzc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZGTEZsQlFWa3NhVUpCUVdsQ0xFTkJRVU1zUlVGQlJUdHZRa0ZEY2tRc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF6dHZRa0ZEVml4TlFVRk5PMmxDUVVOUU8yRkJRMFk3VTBGRFJqdFJRVU5FTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1EwRkJRenRKUVVsTkxFMUJRVTBzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhIUVVGWE8xRkJRekZETEN0Q1FVRXJRanRSUVVNdlFpeE5RVUZOTEVkQlFVY3NSMEZCWVN4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSVHRaUVVNMVJTeEpRVUZKTEVsQlFWa3NRMEZCUXp0WlFVTnFRaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRhRUlzU1VGQlNTeERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1JVRkJSVHRuUWtGRGFFSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVlVzUlVGQlJUdHZRa0ZETTBJc1NVRkJTU3hIUVVGSExFOUJRVThzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2FVSkJRemxDTzNGQ1FVRk5PMjlDUVVOTUxFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTTdiMEpCUTFZc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXcwUWtGQk5FSXNRMEZCUXl4RFFVRkRPMmxDUVVNdlJEdGhRVU5HTzJsQ1FVRk5PMmRDUVVOTUxFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTTdZVUZEVmp0WlFVTkVMRTlCUVU4c1NVRkJTU3hEUVVGRE8xRkJRMlFzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1VVRkZZaXhQUVVGUExFZEJRVWNzUTBGQlF6dEpRVU5pTEVOQlFVTTdPMEZCTDI1Q1lTeHRRa0ZCVnl4SFFVRkhMR0ZCUVdFc1EwRkJRenRCUVRCdFFqTkNMR1ZCUVU4c1IwRkJSeXh4UWtGQmNVSXNRMEZCUXp0QlFYVkNMME1zT0VaQlFUaEdPMEZCUXk5RkxHdENRVUZWTEVkQlFTdENPMGxCUTNSRUxGTkJRVk1zUlVGQlJTeEhRVUZITzBsQlEyUXNUMEZCVHl4RlFVRkZMRWRCUVVjN1NVRkRXaXhQUVVGUExFVkJRVVVzUjBGQlJ6dEpRVU5hTEU5QlFVOHNSVUZCUlN4SFFVRkhPME5CUTJJc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklHZHliMnNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJkeWIyc25PMXh1YVcxd2IzSjBJQ29nWVhNZ2RXa2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMM1ZwSnp0Y2JtbHRjRzl5ZENBcUlHRnpJRVJISUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5a1p5YzdYRzVjYm1sdGNHOXlkQ0IzZFNCbWNtOXRJQ2QzZFNjN1hHNXBiWEJ2Y25RZ0tpQmhjeUJ5ZUdweklHWnliMjBnSjNKNGFuTW5PMXh1WEc1cGJYQnZjblFnZTFabFkzUnZjbjBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0MlpXTjBiM0pNWlc1bmRHZ3NJSFpsWTNSdmNrUnZkRkJ5YjJSMVkzUjlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM1psWTNSdmNpMXZjR1Z5WVhScGIyNXpKenRjYm1sdGNHOXlkQ0I3UVcxcGJtOWhZMmxrY3l3Z1FXMXBibTloWTJsa2MxQmhiR1YwZEdWemZTQm1jbTl0SUNjdUxpOWhiV2x1YjJGamFXUnpKenRjYm1sdGNHOXlkQ0I3VG5WamJHVnZkR2xrWlhNc0lFNTFZMnhsYjNScFpHVnpVR0ZzWlhSMFpYTjlJR1p5YjIwZ0p5NHVMMjUxWTJ4bGIzUnBaR1Z6Snp0Y2JtbHRjRzl5ZENCN1ZXNXJibTkzYmxObGNWQmhiR1YwZEdVc0lGVnVhMjV2ZDI1VFpYRlFZV3hsZEhSbGMzMGdabkp2YlNBbkxpNHZkVzVyYm05M2JpYzdYRzVwYlhCdmNuUWdlMU5sY1ZCaGJHVjBkR1Y5SUdaeWIyMGdKeTR1TDNObGNTMXdZV3hsZEhSbGN5YzdYRzVjYm1SbFkyeGhjbVVnYlc5a2RXeGxJQ2RrWVhSaFozSnZheTFoY0drdmMzSmpMMmR5YVdRbklIdGNiaUFnYVc1MFpYSm1ZV05sSUZKbFkzUWdlMXh1SUNBZ0lHTnZiblJoYVc1ektIZzZJRzUxYldKbGNpd2dlVG9nYm5WdFltVnlLVG9nWW05dmJHVmhianRjYmlBZ2ZWeHVmVnh1WEc1a1pXTnNZWEpsSUdkc2IySmhiQ0I3WEc0Z0lHbHVkR1Z5Wm1GalpTQklWRTFNUTJGdWRtRnpSV3hsYldWdWRDQjdYRzRnSUNBZ1oyVjBRM1Z5YzI5eVVHOXphWFJwYjI0b1pYWmxiblE2SUUxdmRYTmxSWFpsYm5RcE9pQkVSeTVRYjJsdWREdGNiaUFnZlZ4dWZWeHVYRzUwZVhCbElFMXZibTl0WlhKR2NtVnhjeUE5SUhzZ1cyMDZJSE4wY21sdVoxMDZJRzUxYldKbGNpQjlPMXh1WEc1SVZFMU1RMkZ1ZG1GelJXeGxiV1Z1ZEM1d2NtOTBiM1I1Y0dVdVoyVjBRM1Z5YzI5eVVHOXphWFJwYjI0Z1BTQm1kVzVqZEdsdmJpaGxkbVZ1ZERvZ1RXOTFjMlZGZG1WdWRDazZJRVJITGxCdmFXNTBJSHRjYmlBZ1kyOXVjM1FnY21WamRDQTlJSFJvYVhNdVoyVjBRbTkxYm1ScGJtZERiR2xsYm5SU1pXTjBLQ2s3WEc0Z0lISmxkSFZ5YmlCdVpYY2dSRWN1VUc5cGJuUW9aWFpsYm5RdVkyeHBaVzUwV0NBdElISmxZM1F1YkdWbWRDd2daWFpsYm5RdVkyeHBaVzUwV1NBdElISmxZM1F1ZEc5d0tUdGNibjA3WEc1Y2JrUkhMbEpsWTNRdWNISnZkRzkwZVhCbExtTnZiblJoYVc1eklEMGdablZ1WTNScGIyNG9lRG9nYm5WdFltVnlMQ0I1T2lCdWRXMWlaWElwT2lCaWIyOXNaV0Z1SUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11YkdWbWRDQThQU0I0SUNZbUlIZ2dQRDBnZEdocGN5NXlhV2RvZENBbUppQjBhR2x6TG5SdmNDQThQU0I1SUNZbUlIa2dQRDBnZEdocGN5NWliM1IwYjIwN1hHNTlPMXh1WEc1bGVIQnZjblFnWTJ4aGMzTWdVRzl6YVhScGIyNU5iMjV2YldWeVNXNW1ieUI3WEc0Z0lDOHFLaUJUWlhGMVpXNWpaWE1nWTI5MWJuUWdkMmwwYUNCdGIyNXZiV1Z5SUdsdUlIQnZjMmwwYVc5dVhHNGdJQ0FxTDF4dUlDQmpiM1Z1ZERvZ2JuVnRZbVZ5TzF4dVhHNGdJQzhxS2lCU1pXMWxiV0psY2lCelkzSmxaVzRnWTI5dmNtUnpJSEpsWTNSY2JpQWdJQ292WEc0Z0lHSnZkVzVrY3pvZ1JFY3VVbVZqZER0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNiaUFnSUNCMGFHbHpMbU52ZFc1MElEMGdNRHRjYmlBZ0lDQjBhR2x6TG1KdmRXNWtjeUE5SUc1bGR5QkVSeTVTWldOMEtEQXNJREFzSURBc0lEQXBPMXh1SUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlFiM05wZEdsdmJrbHVabThnZTF4dUlDQndkV0pzYVdNZ2NtVmhaRzl1YkhrZ2JtRnRaVG9nYzNSeWFXNW5PMXh1SUNCbWNtVnhPaUI3SUZ0dE9pQnpkSEpwYm1kZE9pQlFiM05wZEdsdmJrMXZibTl0WlhKSmJtWnZJSDA3WEc0Z0lISnZkME52ZFc1ME9pQnVkVzFpWlhJN1hHNWNiaUFnTHlvcUlHWnlaWEVnUFNCN2ZTd2djbTkzUTI5MWJuUWdQU0F3WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnVZVzFsSUU1aGJXVWdiMllnY0c5emFYUnBiMjRnS0NjeE1URkJKeXdnSnpFeE1TNHhKeXdnWlhSaktWeHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYm1GdFpUb2djM1J5YVc1bktTQjdYRzRnSUNBZ2RHaHBjeTV1WVcxbElEMGdibUZ0WlR0Y2JpQWdJQ0IwYUdsekxtWnlaWEVnUFNCN2ZUdGNiaUFnSUNCMGFHbHpMbkp2ZDBOdmRXNTBJRDBnTUR0Y2JpQWdmVnh1ZlZ4dVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCWFpXSk1iMmR2SUdWNGRHVnVaSE1nUkVjdVNuTldhV1YzWlhJZ2UxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklISmxjMmxrZFdWelUyVjBJRDBnSjI1MVkyeGxiM1JwWkdWekp6dGNibHh1SUNCd2NtbDJZWFJsSUdsdWFYUnBZV3hwZW1Wa09pQmliMjlzWldGdUlEMGdabUZzYzJVN1hHNWNiaUFnTHk4Z2NISnBkbUYwWlNCeVpXRmtiMjVzZVNCamIyeHZjbE5qYUdWdFpUb2dRMjlzYjNKVFkyaGxiV1VnUFNCRGIyeHZjbE5qYUdWdFpYTmJUblZqYkdWdmRHbGtaWE5YWldKTWIyZHZMbkpsYzJsa2RXVnpVMlYwWFR0Y2JpQWdjSEp2ZEdWamRHVmtJR053T2lCVFpYRlFZV3hsZEhSbElId2diblZzYkNBOUlHNTFiR3c3WEc1Y2JpQWdjSEpwZG1GMFpTQm9iM04wUHpvZ1NGUk5URVJwZGtWc1pXMWxiblE3WEc0Z0lIQnlhWFpoZEdVZ2JYTm5TRzl6ZEQ4NklFaFVUVXhGYkdWdFpXNTBPMXh1SUNCd2NtbDJZWFJsSUdOaGJuWmhjejg2SUVoVVRVeERZVzUyWVhORmJHVnRaVzUwTzF4dUlDQndjbWwyWVhSbElITnNhV1JsY2o4NklFUkhMbEpoYm1kbFUyeHBaR1Z5TzF4dUlDQndjbWwyWVhSbElIUmxlSFJDWVhObGJHbHVaVG9nUTJGdWRtRnpWR1Y0ZEVKaGMyVnNhVzVsTzF4dVhHNGdJSEJ5YVhaaGRHVWdZWGhwYzBobGFXZG9kRG9nYm5WdFltVnlJRDBnTVRJN1hHNWNiaUFnY0hKcGRtRjBaU0J6WlhGRGIydzZJRVJITGtOdmJIVnRianh6ZEhKcGJtYytJSHdnYm5Wc2JDQTlJRzUxYkd3N1hHNGdJQzh2SUhCeWFYWmhkR1VnYldGNFRHVnVaM1JvT2lCdWRXMWlaWElnUFNBeE1EQTdYRzRnSUhCeWFYWmhkR1VnY0c5emFYUnBiMjV6T2lCUWIzTnBkR2x2YmtsdVptOWJYU0E5SUZ0ZE8xeHVYRzRnSUhCeWFYWmhkR1VnY205M2MwMWhjMnRsWkRvZ2JuVnRZbVZ5SUQwZ01EdGNiaUFnY0hKcGRtRjBaU0J5YjNkelRuVnNiRG9nYm5WdFltVnlJRDBnTUR0Y2JseHVJQ0F2THlCV2FXVjNaWEluY3lCd2NtOXdaWEowYVdWeklDaHNhV3RsYkhrZ2RHaGxlU0J6YUc5MWJHUWdZbVVnY0hWaWJHbGpJSE52SUhSb1lYUWdkR2hsZVNCallXNGdZbVVnYzJWMElHOTFkSE5wWkdVcFhHNGdJSEJ5YVhaaGRHVWdYM0J2YzJsMGFXOXVWMmxrZEdnNklHNTFiV0psY2p0Y2JpQWdjSFZpYkdsaklIQnZjMmwwYVc5dVYybGtkR2c2SUc1MWJXSmxjanRjYmlBZ2NIVmliR2xqSUcxcGJraGxhV2RvZERvZ2JuVnRZbVZ5TzF4dUlDQndkV0pzYVdNZ2JXRjRTR1ZwWjJoME9pQnVkVzFpWlhJN1hHNGdJSEIxWW14cFl5QmpiMjV6YVdSbGNrNTFiR3hUWlhGMVpXNWpaWE02SUdKdmIyeGxZVzQ3WEc0Z0lIQjFZbXhwWXlCelpYRjFaVzVqWlVOdmJIVnRiazVoYldVNklITjBjbWx1WnlCOElHNTFiR3c3WEc0Z0lIQjFZbXhwWXlCemRHRnlkRkJ2YzJsMGFXOXVUbUZ0WlRvZ2MzUnlhVzVuSUh3Z2JuVnNiRHRjYmlBZ2NIVmliR2xqSUdWdVpGQnZjMmwwYVc5dVRtRnRaVG9nYzNSeWFXNW5JSHdnYm5Wc2JEdGNiaUFnY0hWaWJHbGpJR1pwZUZkcFpIUm9PaUJpYjI5c1pXRnVPMXh1SUNCd2RXSnNhV01nZG1WeWRHbGpZV3hCYkdsbmJtMWxiblE2SUhOMGNtbHVaeUI4SUc1MWJHdzdYRzRnSUhCMVlteHBZeUJvYjNKcGVtOXVkR0ZzUVd4cFoyNXRaVzUwT2lCemRISnBibWNnZkNCdWRXeHNPMXh1SUNCd2RXSnNhV01nWm1sMFFYSmxZVG9nWW05dmJHVmhianRjYmlBZ2NIVmliR2xqSUhOb2NtbHVhMFZ0Y0hSNVZHRnBiRG9nWW05dmJHVmhianRjYmx4dUlDQndjbWwyWVhSbElIQnZjMmwwYVc5dVRtRnRaWE02SUhOMGNtbHVaMXRkSUQwZ1cxMDdYRzVjYmlBZ2NISnBkbUYwWlNCemRHRnlkRkJ2YzJsMGFXOXVPaUJ1ZFcxaVpYSWdQU0F0TVR0Y2JseHVJQ0J3Y21sMllYUmxJR1Z1WkZCdmMybDBhVzl1T2lCdWRXMWlaWElnUFNBdE1UdGNibHh1SUNBdktpb2dSbTl5SUhOMFlYSjBVRzl6YVhScGIyNGdaWEYxWVd4eklIUnZJR1Z1WkZCdmMybDBhVzl1SUV4bGJtZDBhQ0JwY3lBeElDb3ZYRzRnSUhCeWFYWmhkR1VnWjJWMElFeGxibWQwYUNncE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuTjBZWEowVUc5emFYUnBiMjRnUEQwZ2RHaHBjeTVsYm1SUWIzTnBkR2x2YmlBL0lIUm9hWE11Wlc1a1VHOXphWFJwYjI0Z0xTQjBhR2x6TG5OMFlYSjBVRzl6YVhScGIyNGdLeUF4SURvZ01EdGNiaUFnZlZ4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0NrZ2UxeHVJQ0FnSUhOMWNHVnlLQ2s3WEc1Y2JpQWdJQ0IwYUdsekxuUmxlSFJDWVhObGJHbHVaU0E5SUNkMGIzQW5PMXh1WEc0Z0lDQWdkR2hwY3k1ZmNHOXphWFJwYjI1WGFXUjBhQ0E5SUhSb2FYTXVjRzl6YVhScGIyNVhhV1IwYUNBOUlIUm9hWE11Wm14dllYUW9KM0J2YzJsMGFXOXVWMmxrZEdnbkxDQXhOaThxTEZ4dUlDQWdJQ0FnZTJWa2FYUnZjam9nSjNOc2FXUmxjaWNzSUcxcGJqb2dOQ3dnYldGNE9pQTJOQ3dnY0c5emRHWnBlRG9nSjNCNEozMHFMeWs3WEc0Z0lDQWdkR2hwY3k1dGFXNUlaV2xuYUhRZ1BTQjBhR2x6TG1ac2IyRjBLQ2R0YVc1SVpXbG5hSFFuTENBMU1DOHFMRnh1SUNBZ0lDQWdlMlZrYVhSdmNqb2dKM05zYVdSbGNpY3NJRzFwYmpvZ01qVXNJRzFoZURvZ01qVXdMQ0J3YjNOMFptbDRPaUFuY0hnbmZTb3ZLVHRjYmlBZ0lDQjBhR2x6TG0xaGVFaGxhV2RvZENBOUlIUm9hWE11Wm14dllYUW9KMjFoZUVobGFXZG9kQ2NzSURFd01DOHFMRnh1SUNBZ0lDQWdlMlZrYVhSdmNqb2dKM05zYVdSbGNpY3NJRzFwYmpvZ01qVXNJRzFoZURvZ05UQXdMQ0J3YjNOMFptbDRPaUFuY0hnbmZTb3ZLVHRjYmx4dUlDQWdJSFJvYVhNdVkyOXVjMmxrWlhKT2RXeHNVMlZ4ZFdWdVkyVnpJRDBnZEdocGN5NWliMjlzS0NkamIyNXphV1JsY2s1MWJHeFRaWEYxWlc1alpYTW5MQ0JtWVd4elpTazdYRzRnSUNBZ2RHaHBjeTV6WlhGMVpXNWpaVU52YkhWdGJrNWhiV1VnUFNCMGFHbHpMbk4wY21sdVp5Z25jMlZ4ZFdWdVkyVkRiMngxYlc1T1lXMWxKeXdnYm5Wc2JDazdYRzVjYmlBZ0lDQjBhR2x6TG5OMFlYSjBVRzl6YVhScGIyNU9ZVzFsSUQwZ2RHaHBjeTV6ZEhKcGJtY29KM04wWVhKMFVHOXphWFJwYjI1T1lXMWxKeXdnYm5Wc2JDazdYRzRnSUNBZ2RHaHBjeTVsYm1SUWIzTnBkR2x2Yms1aGJXVWdQU0IwYUdsekxuTjBjbWx1WnlnblpXNWtVRzl6YVhScGIyNU9ZVzFsSnl3Z2JuVnNiQ2s3WEc1Y2JpQWdJQ0IwYUdsekxtWnBlRmRwWkhSb0lEMGdkR2hwY3k1aWIyOXNLQ2RtYVhoWGFXUjBhQ2NzSUdaaGJITmxLVHRjYmx4dUlDQWdJSFJvYVhNdWRtVnlkR2xqWVd4QmJHbG5ibTFsYm5RZ1BTQjBhR2x6TG5OMGNtbHVaeWduZG1WeWRHbGpZV3hCYkdsbmJtMWxiblFuTENBbmJXbGtaR3hsSnl4Y2JpQWdJQ0FnSUh0amFHOXBZMlZ6T2lCYkozUnZjQ2NzSUNkdGFXUmtiR1VuTENBblltOTBkRzl0SjExOUtUdGNiaUFnSUNCMGFHbHpMbWh2Y21sNmIyNTBZV3hCYkdsbmJtMWxiblFnUFNCMGFHbHpMbk4wY21sdVp5Z25hRzl5YVhwdmJuUmhiRUZzYVdkdWJXVnVkQ2NzSUNkalpXNTBaWEluTEZ4dUlDQWdJQ0FnZTJOb2IybGpaWE02SUZzbmJHVm1kQ2NzSUNkalpXNTBaWEluTENBbmNtbG5hSFFuWFgwcE8xeHVJQ0FnSUhSb2FYTXVabWwwUVhKbFlTQTlJSFJvYVhNdVltOXZiQ2duWm1sMFFYSmxZU2NzSUhSeWRXVXBPMXh1SUNBZ0lIUm9hWE11YzJoeWFXNXJSVzF3ZEhsVVlXbHNJRDBnZEdocGN5NWliMjlzS0NkemFISnBibXRGYlhCMGVWUmhhV3duTENCMGNuVmxLVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnWVhONWJtTWdhVzVwZENncE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVwYm1sMGFXRnNhWHBsWkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWduVjJWaVRHOW5ieUJ6WldOdmJtUWdhVzVwZEdsaGJHbDZZWFJwYjI0aEp5azdYRzRnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZEdocGN5NXBibWwwYVdGc2FYcGxaQ0E5SUhSeWRXVTdYRzRnSUNBZ2RHaHBjeTVvWld4d1ZYSnNJRDBnSnk5b1pXeHdMM1pwYzNWaGJHbDZaUzkyYVdWM1pYSnpMM2RsWWkxc2IyZHZMbTFrSnp0Y2JseHVJQ0FnSUhSb2FYTXViWE5uU0c5emRDQTlJSFZwTG1ScGRpZ25UbThnYldWemMyRm5aU2NwTzF4dUlDQWdJSFJvYVhNdWJYTm5TRzl6ZEM1emRIbHNaUzVrYVhOd2JHRjVJRDBnSjI1dmJtVW5PMXh1WEc0Z0lDQWdkR2hwY3k1allXNTJZWE1nUFNCMWFTNWpZVzUyWVhNb0tUdGNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NXpkSGxzWlM1M2FXUjBhQ0E5SUNjeE1EQWxKenRjYmx4dUlDQWdJSFJvYVhNdWFHOXpkQ0E5SUhWcExtUnBkaWhiZEdocGN5NXRjMmRJYjNOMExDQjBhR2x6TG1OaGJuWmhjMTBwTzF4dVhHNGdJQ0FnTHk4Z2RHaHBjeTV6Ykdsa1pYSWdQU0IxYVM1eVlXNW5aVk5zYVdSbGNpZ3dMQ0F5TUN3Z01pd2dOU2s3WEc0Z0lDQWdMeThnZEdocGN5NXpiR2xrWlhJdWNtOXZkQzV6ZEhsc1pTNTNhV1IwYUNBOUlDY3hNREFsSnp0Y2JpQWdJQ0F2THlCMGFHbHpMbk5zYVdSbGNpNXliMjkwTG5OMGVXeGxMbWhsYVdkb2RDQTlJQ2N4TW5CNEp6dGNibHh1SUNBZ0lHTnZibk4wSUdkbGRFMXZibTl0WlhJZ1BTQW9jRG9nUkVjdVVHOXBiblFwT2lCYmJuVnRZbVZ5TENCemRISnBibWNnZkNCdWRXeHNMQ0JRYjNOcGRHbHZiazF2Ym05dFpYSkpibVp2SUh3Z2JuVnNiRjBnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYWxCdmN5QTlJRTFoZEdndVpteHZiM0lvY0M1NElDOGdkR2hwY3k1ZmNHOXphWFJwYjI1WGFXUjBhQ2s3WEc0Z0lDQWdJQ0JqYjI1emRDQndiM05wZEdsdmJpQTlJSFJvYVhNdWNHOXphWFJwYjI1elcycFFiM05kTzF4dVhHNGdJQ0FnSUNCcFppQW9jRzl6YVhScGIyNGdQVDA5SUhadmFXUWdNQ2xjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRnRxVUc5ekxDQnVkV3hzTENCdWRXeHNYVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdiVzl1YjIxbGNqb2djM1J5YVc1bklId2dkVzVrWldacGJtVmtJRDBnVDJKcVpXTjBMbXRsZVhNb2NHOXphWFJwYjI0dVpuSmxjU2xjYmlBZ0lDQWdJQ0FnTG1acGJtUW9LRzBwSUQwK0lIQnZjMmwwYVc5dUxtWnlaWEZiYlYwdVltOTFibVJ6TG1OdmJuUmhhVzV6S0hBdWVDd2djQzU1S1NrN1hHNGdJQ0FnSUNCcFppQW9iVzl1YjIxbGNpQTlQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVzJwUWIzTXNJRzUxYkd3c0lHNTFiR3hkTzF4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnVzJwUWIzTXNJRzF2Ym05dFpYSXNJSEJ2YzJsMGFXOXVMbVp5WlhGYmJXOXViMjFsY2wxZE8xeHVJQ0FnSUgwN1hHNWNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NXZibTF2ZFhObGIzWmxjaUE5SUNobE9pQk5iM1Z6WlVWMlpXNTBLU0E5UGlCN1hHNWNiaUFnSUNCOU8xeHVYRzRnSUNBZ2RHaHBjeTV6ZFdKekxuQjFjMmdvY25ocWN5NW1jbTl0UlhabGJuUThUVzkxYzJWRmRtVnVkRDRvZEdocGN5NWpZVzUyWVhNc0lDZHRiM1Z6WlcxdmRtVW5LUzV6ZFdKelkzSnBZbVVvS0dVNklFMXZkWE5sUlhabGJuUXBJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1allXNTJZWE1wWEc0Z0lDQWdJQ0FnSUhKbGRIVnlianRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdZWEpuY3lBOUlHVWdZWE1nVFc5MWMyVkZkbVZ1ZER0Y2JpQWdJQ0FnSUdOdmJuTjBJRnRxVUc5ekxDQnRiMjV2YldWeVhTQTlJR2RsZEUxdmJtOXRaWElvZEdocGN5NWpZVzUyWVhNdVoyVjBRM1Z5YzI5eVVHOXphWFJwYjI0b1lYSm5jeWtwTzF4dVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1a1lYUmhSbkpoYldVZ0ppWWdkR2hwY3k1elpYRkRiMndnSmlZZ2JXOXViMjFsY2lrZ2UxeHVJQ0FnSUNBZ0lDQjFhUzUwYjI5c2RHbHdMbk5vYjNkU2IzZEhjbTkxY0NoMGFHbHpMbVJoZEdGR2NtRnRaU3dnS0dsU2IzY3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCelpYRWdQU0IwYUdsekxuTmxjVU52YkNFdVoyVjBLR2xTYjNjcE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElITmxjVTBnUFNCelpYRWdQeUJYWldKTWIyZHZMbk53YkdsMFUyVnhWRzlOYjI1dmJXVnljeWh6WlhFcFczUm9hWE11YzNSaGNuUlFiM05wZEdsdmJpQXJJR3BRYjNOZElEb2diblZzYkR0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2MyVnhUU0E5UFQwZ2JXOXViMjFsY2lBbUppQjBhR2x6TG1SaGRHRkdjbUZ0WlM1bWFXeDBaWEl1WjJWMEtHbFNiM2NwTzF4dUlDQWdJQ0FnSUNCOUxDQmhjbWR6TG5nZ0t5QXhOaXdnWVhKbmN5NTVJQ3NnTVRZcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RXa3VkRzl2YkhScGNDNW9hV1JsS0NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrcE8xeHVYRzRnSUNBZ2RHaHBjeTV6ZFdKekxuQjFjMmdvY25ocWN5NW1jbTl0UlhabGJuUThUVzkxYzJWRmRtVnVkRDRvZEdocGN5NWpZVzUyWVhNc0lDZHRiM1Z6WldSdmQyNG5LUzV6ZFdKelkzSnBZbVVvS0dVNklFMXZkWE5sUlhabGJuUXBJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1allXNTJZWE1nZkh3Z1pTNWlkWFIwYjI0Z0lUMGdNQ2xjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQmhjbWR6SUQwZ1pTQmhjeUJOYjNWelpVVjJaVzUwTzF4dUlDQWdJQ0FnWTI5dWMzUWdXMnBRYjNNc0lHMXZibTl0WlhKZElEMGdaMlYwVFc5dWIyMWxjaWgwYUdsekxtTmhiblpoY3k1blpYUkRkWEp6YjNKUWIzTnBkR2x2YmloaGNtZHpLU2s3WEc1Y2JpQWdJQ0FnSUM4dklIQnlaWFpsYm5SeklHUmxjMlZzWldOMElHRnNiQ0J5YjNkeklHbG1JSGRsSUcxcGMzTWdiVzl1YjIxbGNpQmliM1Z1WkhOY2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG1SaGRHRkdjbUZ0WlNBbUppQjBhR2x6TG5ObGNVTnZiQ0FtSmlCdGIyNXZiV1Z5S1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WkdGMFlVWnlZVzFsTG5ObGJHVmpkR2x2Ymk1cGJtbDBLQ2hwVW05M0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYzJWeElEMGdkR2hwY3k1elpYRkRiMndoTG1kbGRDaHBVbTkzS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCelpYRk5JRDBnYzJWeElEOGdWMlZpVEc5bmJ5NXpjR3hwZEZObGNWUnZUVzl1YjIxbGNuTW9jMlZ4S1Z0MGFHbHpMbk4wWVhKMFVHOXphWFJwYjI0Z0t5QnFVRzl6WFNBNklHNTFiR3c3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhObGNVMGdQVDA5SUcxdmJtOXRaWElnSmlZZ2RHaHBjeTVrWVhSaFJuSmhiV1V1Wm1sc2RHVnlMbWRsZENocFVtOTNLVHRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrcE8xeHVYRzRnSUNBZ2RHaHBjeTV6ZFdKekxuQjFjMmdvZFdrdWIyNVRhWHBsUTJoaGJtZGxaQ2gwYUdsekxuSnZiM1FwTG5OMVluTmpjbWxpWlNoMGFHbHpMbkp2YjNSUGJsTnBlbVZEYUdGdVoyVmtMbUpwYm1Rb2RHaHBjeWtwS1R0Y2JseHVJQ0FnSUhSb2FYTXVjbTl2ZEM1aGNIQmxibVFvZEdocGN5NW9iM04wS1R0Y2JpQWdJQ0F2THlCMGFHbHpMbkp2YjNRdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1emJHbGtaWEl1Y205dmRDazdYRzVjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWgwY25WbEtUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjbTl2ZEU5dVUybDZaVU5vWVc1blpXUW9ZWEpuY3pvZ1lXNTVLU0I3WEc0Z0lDQWdkR2hwY3k1eVpXNWtaWElvZEhKMVpTazdYRzVjYmlBZ0lDQXZMeUJqYjI1emIyeGxMbVJsWW5WbktHQlhaV0pNYjJkdkxtOXVVbTl2ZEZOcGVtVkRhR0Z1WjJWa0tDa2dZQ0FyWEc0Z0lDQWdMeThnSUNCZ2NtOXZkQzUzYVdSMGFEMGtlM1JvYVhNdWNtOXZkQzVqYkdsbGJuUlhhV1IwYUgwc0lISnZiM1F1YUdWcFoyaDBQU1I3ZEdocGN5NXliMjkwTG1Oc2FXVnVkRWhsYVdkb2RIMHNJR0FnSzF4dUlDQWdJQzh2SUNBZ1lHTmhiblpoY3k1M2FXUjBhRDBrZTNSb2FYTXVZMkZ1ZG1GekxuZHBaSFJvZlN3Z1kyRnVkbUZ6TG1obGFXZG9kRDBrZTNSb2FYTXVZMkZ1ZG1GekxtaGxhV2RvZEgwZ0xtQXBPMXh1SUNCOVhHNWNiaUFnTHlvcUlFRnpjMmxuYm5NZ2UwQnNhVzVySUhObGNVTnZiSDBnWVc1a0lIdEFiR2x1YXlCamNIMGdZbUZ6WldRZ2IyNGdlMEJzYVc1cklITmxjWFZsYm1ObFEyOXNkVzF1VG1GdFpYMGdZVzVrSUdOaGJHeHpJSHRBYkdsdWF5QnlaVzVrWlhKOUtDa3VYRzRnSUNBcUwxeHVJQ0J3Y21sMllYUmxJSFZ3WkdGMFpWTmxjVU52YkNncE9pQjJiMmxrSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVrWVhSaFJuSmhiV1VwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVjMlZ4UTI5c0lEMGdkR2hwY3k1elpYRjFaVzVqWlVOdmJIVnRiazVoYldVZ1B5QjBhR2x6TG1SaGRHRkdjbUZ0WlM1amIyd29kR2hwY3k1elpYRjFaVzVqWlVOdmJIVnRiazVoYldVcElEb2diblZzYkR0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG5ObGNVTnZiQ0E5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMlZ4UTI5c0lEMGdkR2hwY3k1d2FXTnJWWEJUWlhGRGIyd29kR2hwY3k1a1lYUmhSbkpoYldVcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5ObGNYVmxibU5sUTI5c2RXMXVUbUZ0WlNBOUlIUm9hWE11YzJWeFEyOXNJRDhnZEdocGN5NXpaWEZEYjJ3dWJtRnRaU0E2SUc1MWJHdzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NXpaWEZEYjJ3cElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MWNHUmhkR1ZRYjNOcGRHbHZibk1vS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqY0NBOUlGZGxZa3h2WjI4dWNHbGphMVZ3VUdGc1pYUjBaU2gwYUdsekxuTmxjVU52YkNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVUbUZ0WlhNZ1BTQmJYVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXpkR0Z5ZEZCdmMybDBhVzl1SUQwZ0xURTdYRzRnSUNBZ0lDQWdJSFJvYVhNdVpXNWtVRzl6YVhScGIyNGdQU0F0TVR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqY0NBOUlHNTFiR3c3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhWd1pHRjBaVkJ2YzJsMGFXOXVjeWdwT2lCMmIybGtJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVjMlZ4UTI5c0tWeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJQ0FnYkdWMElHTmhkR1ZuYjNKcFpYTTZJQ2h6ZEhKcGJtY2dmQ0J1ZFd4c0tTQmJYVHRjYmlBZ0lDQnBaaUFvZEdocGN5NXphSEpwYm10RmJYQjBlVlJoYVd3cElIdGNiaUFnSUNBZ0lHTnZibk4wSUdsdVpHbGpaWE02SUVsdWRETXlRWEp5WVhrZ1BTQjBhR2x6TG1SaGRHRkdjbUZ0WlM1bWFXeDBaWEl1WjJWMFUyVnNaV04wWldSSmJtUmxlR1Z6S0NrN1hHNGdJQ0FnSUNCallYUmxaMjl5YVdWeklEMGdRWEp5WVhrdVpuSnZiU2h1WlhjZ1UyVjBLRnh1SUNBZ0lDQWdJQ0JCY25KaGVTNW1jbTl0S0VGeWNtRjVLR2x1WkdsalpYTXViR1Z1WjNSb0tTNXJaWGx6S0NrcExtMWhjQ2dvYVRvZ2JuVnRZbVZ5S1NBOVBpQjBhR2x6TG5ObGNVTnZiQ0V1WjJWMEtHbHVaR2xqWlhOYmFWMHBLU2twTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmpZWFJsWjI5eWFXVnpJRDBnZEdocGN5NXpaWEZEYjJ3dVkyRjBaV2R2Y21sbGN6dGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdiV0Y0VEdWdVozUm9JRDBnWTJGMFpXZHZjbWxsY3k1c1pXNW5kR2dnUGlBd0lEOGdUV0YwYUM1dFlYZ29MaTR1WTJGMFpXZHZjbWxsY3k1dFlYQW9YRzRnSUNBZ0lDQW9jeWtnUFQ0Z2N5QWhQVDBnYm5Wc2JDQS9JRmRsWWt4dloyOHVjM0JzYVhSVFpYRlViMDF2Ym05dFpYSnpLSE1wTG14bGJtZDBhQ0E2SURBcEtTQTZJREE3WEc1Y2JpQWdJQ0F2THlCSFpYUWdjRzl6YVhScGIyNGdibUZ0WlhNZ1puSnZiU0JrWVhSaElHTnZiSFZ0YmlCMFlXY2dKM0J2YzJsMGFXOXVUbUZ0WlhNblhHNGdJQ0FnWTI5dWMzUWdjRzl6YVhScGIyNU9ZVzFsYzFSNGRDQTlJSFJvYVhNdWMyVnhRMjlzTG1kbGRGUmhaeWduY0c5emFYUnBiMjVPWVcxbGN5Y3BPMXh1SUNBZ0lDOHZJRVpoYkd4aVlXTnJJR2xtSUNkd2IzTnBkR2x2Yms1aGJXVnpKeUIwWVdjZ2FYTWdibTkwSUhCeWIzWnBaR1ZrWEc0Z0lDQWdkR2hwY3k1d2IzTnBkR2x2Yms1aGJXVnpJRDBnY0c5emFYUnBiMjVPWVcxbGMxUjRkQ0EvSUhCdmMybDBhVzl1VG1GdFpYTlVlSFF1YzNCc2FYUW9KeXdnSnlrdWJXRndLQ2h1S1NBOVBpQnVMblJ5YVcwb0tTa2dPbHh1SUNBZ0lDQWdXeTR1TGtGeWNtRjVLRzFoZUV4bGJtZDBhQ2t1YTJWNWN5Z3BYUzV0WVhBb0tHcFFiM01wSUQwK0lHQWtlMnBRYjNNZ0t5QXhmV0FwTzF4dVhHNGdJQ0FnZEdocGN5NXpkR0Z5ZEZCdmMybDBhVzl1SUQwZ0tIUm9hWE11YzNSaGNuUlFiM05wZEdsdmJrNWhiV1VnSmlZZ2RHaHBjeTV3YjNOcGRHbHZiazVoYldWeklDWW1YRzRnSUNBZ0lDQjBhR2x6TG5CdmMybDBhVzl1VG1GdFpYTXVhVzVqYkhWa1pYTW9kR2hwY3k1emRHRnlkRkJ2YzJsMGFXOXVUbUZ0WlNrcElEOWNiaUFnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjVPWVcxbGN5NXBibVJsZUU5bUtIUm9hWE11YzNSaGNuUlFiM05wZEdsdmJrNWhiV1VwSURvZ01EdGNiaUFnSUNCMGFHbHpMbVZ1WkZCdmMybDBhVzl1SUQwZ0tIUm9hWE11Wlc1a1VHOXphWFJwYjI1T1lXMWxJQ1ltSUhSb2FYTXVjRzl6YVhScGIyNU9ZVzFsY3lBbUpseHVJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiazVoYldWekxtbHVZMngxWkdWektIUm9hWE11Wlc1a1VHOXphWFJwYjI1T1lXMWxLU2tnUDF4dUlDQWdJQ0FnZEdocGN5NXdiM05wZEdsdmJrNWhiV1Z6TG1sdVpHVjRUMllvZEdocGN5NWxibVJRYjNOcGRHbHZiazVoYldVcElEb2dLRzFoZUV4bGJtZDBhQ0F0SURFcE8xeHVJQ0I5WEc1Y2JpQWdjSFZpYkdsaklHOTJaWEp5YVdSbElHOXVVSEp2Y0dWeWRIbERhR0Z1WjJWa0tIQnliM0JsY25SNU9pQkVSeTVRY205d1pYSjBlU2s2SUhadmFXUWdlMXh1SUNBZ0lDOHZJR052Ym5OdmJHVXVaR1ZpZFdjb1lGZGxZa3h2WjI4dWIyNVFjbTl3WlhKMGVVTm9ZVzVuWldRb0lDUjdjSEp2Y0dWeWRIa3VibUZ0WlgwZ1BTQW5KeUI5S1dBcE8xeHVJQ0FnSUhOMWNHVnlMbTl1VUhKdmNHVnlkSGxEYUdGdVoyVmtLSEJ5YjNCbGNuUjVLVHRjYmx4dUlDQWdJSE4zYVhSamFDQW9jSEp2Y0dWeWRIa3VibUZ0WlNrZ2UxeHVJQ0FnSUdOaGMyVWdKMk52Ym5OcFpHVnlUblZzYkZObGNYVmxibU5sY3ljNlhHNGdJQ0FnSUNCMGFHbHpMbkpsYm1SbGNpaDBjblZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnSjNObGNYVmxibU5sUTI5c2RXMXVUbUZ0WlNjNlhHNGdJQ0FnSUNCMGFHbHpMblZ3WkdGMFpWTmxjVU52YkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBbmMzUmhjblJRYjNOcGRHbHZiazVoYldVbk9seHVJQ0FnSUNBZ2RHaHBjeTUxY0dSaGRHVlRaWEZEYjJ3b0tUdGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ0oyVnVaRkJ2YzJsMGFXOXVUbUZ0WlNjNlhHNGdJQ0FnSUNCMGFHbHpMblZ3WkdGMFpWTmxjVU52YkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBbmNHOXphWFJwYjI1WGFXUjBhQ2M2WEc0Z0lDQWdJQ0IwYUdsekxsOXdiM05wZEdsdmJsZHBaSFJvSUQwZ2RHaHBjeTV3YjNOcGRHbHZibGRwWkhSb08xeHVJQ0FnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9kSEoxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSUNkdGFXNUlaV2xuYUhRbk9seHVJQ0FnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9kSEoxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSUNkdFlYaElaV2xuYUhRbk9seHVJQ0FnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9kSEoxWlNrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSUNkbWFYaFhhV1IwYUNjNlhHNGdJQ0FnSUNCMGFHbHpMbkpsYm1SbGNpaDBjblZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnSjNabGNuUnBZMkZzUVd4cFoyNXRaVzUwSnpwY2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0FuYUc5eWFYcHZiblJoYkVGc2FXZHViV1Z1ZENjNlhHNGdJQ0FnSUNCMGFHbHpMbkpsYm1SbGNpaDBjblZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnSjJacGRFRnlaV0VuT2x4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb2RISjFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJQ2R6YUhKcGJtdEZiWEIwZVZSaGFXd25PbHh1SUNBZ0lDQWdkR2hwY3k1MWNHUmhkR1ZRYjNOcGRHbHZibk1vS1R0Y2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjSFZpYkdsaklHOTJaWEp5YVdSbElHRnplVzVqSUc5dVZHRmliR1ZCZEhSaFkyaGxaQ2dwSUh0Y2JpQWdJQ0F2THlCamIyNXpiMnhsTG1SbFluVm5LR0JYWldKTWIyZHZMbTl1VkdGaWJHVkJkSFJoWTJobFpDZ2daR0YwWVVaeVlXMWxJRDBnSkh0MGFHbHpMbVJoZEdGR2NtRnRaU0EvSUNka1lYUmhKeUE2SUNkdWRXeHNKMzBnS1dBcE8xeHVJQ0FnSUhSb2FYTXVkWEJrWVhSbFUyVnhRMjlzS0NrN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1a1lYUmhSbkpoYldVZ0lUMDlJSFp2YVdRZ01Da2dlMXh1SUNBZ0lDQWdkR2hwY3k1emRXSnpMbkIxYzJnb2RHaHBjeTVrWVhSaFJuSmhiV1V1YzJWc1pXTjBhVzl1TG05dVEyaGhibWRsWkM1emRXSnpZM0pwWW1Vb0tGOHBJRDArSUhSb2FYTXVjbVZ1WkdWeUtDa3BLVHRjYmlBZ0lDQWdJSFJvYVhNdWMzVmljeTV3ZFhOb0tIUm9hWE11WkdGMFlVWnlZVzFsTG1acGJIUmxjaTV2YmtOb1lXNW5aV1F1YzNWaWMyTnlhV0psS0NoZktTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkWEJrWVhSbFVHOXphWFJwYjI1ektDazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNtVnVaR1Z5S0NrN1hHNGdJQ0FnSUNCOUtTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1lYZGhhWFFnZEdocGN5NXBibWwwS0NrN1hHNGdJSDFjYmx4dUlDQndjbTkwWldOMFpXUWdYMjUxYkd4VFpYRjFaVzVqWlNobWFXeHNaWEpTWlhOcFpIVmxJRDBnSjFnbktUb2djM1J5YVc1bklIdGNiaUFnSUNCcFppQW9kR2hwY3k1amIyNXphV1JsY2s1MWJHeFRaWEYxWlc1alpYTXBYRzRnSUNBZ0lDQnlaWFIxY200Z2JtVjNJRUZ5Y21GNUtIUm9hWE11VEdWdVozUm9LUzVtYVd4c0tHWnBiR3hsY2xKbGMybGtkV1VwTG1wdmFXNG9KeWNwTzF4dVhHNGdJQ0FnY21WMGRYSnVJQ2NuTzF4dUlDQjlYRzVjYmlBZ2NISnZkR1ZqZEdWa0lGOWpZV3hqZFd4aGRHVW9LU0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbU5oYm5aaGN5QjhmQ0FoZEdocGN5NW9iM04wSUh4OElDRjBhR2x6TG5ObGNVTnZiQ0I4ZkNBaGRHaHBjeTVrWVhSaFJuSmhiV1VwWEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzVjYmlBZ0lDQjBhR2x6TG1OaGJHTlRhWHBsS0NrN1hHNWNiaUFnSUNCMGFHbHpMbkJ2YzJsMGFXOXVjeUE5SUc1bGR5QkJjbkpoZVNoMGFHbHpMa3hsYm1kMGFDazdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FsQnZjeUE5SURBN0lHcFFiM01nUENCMGFHbHpMa3hsYm1kMGFEc2dhbEJ2Y3lzcktTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCd2IzTk9ZVzFsT2lCemRISnBibWNnUFNCMGFHbHpMbkJ2YzJsMGFXOXVUbUZ0WlhOYmRHaHBjeTV6ZEdGeWRGQnZjMmwwYVc5dUlDc2dhbEJ2YzEwN1hHNGdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVjMXRxVUc5elhTQTlJRzVsZHlCUWIzTnBkR2x2YmtsdVptOG9jRzl6VG1GdFpTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdNakF5TWkwd05TMHdOU0JoYzJ0aGJHdHBiaUJwYm5OMGNuVmpkR1ZrSUhSdklITm9iM2NnVjJWaVRHOW5ieUJpWVhObFpDQnZiaUJtYVd4MFpYSWdLRzV2ZENCelpXeGxZM1JwYjI0cFhHNGdJQ0FnWTI5dWMzUWdhVzVrYVdObGN5QTlJSFJvYVhNdVpHRjBZVVp5WVcxbExtWnBiSFJsY2k1blpYUlRaV3hsWTNSbFpFbHVaR1Y0WlhNb0tUdGNiaUFnSUNBdkx5QmpiMjV6ZENCcGJtUnBZMlZ6SUQwZ2RHaHBjeTVrWVhSaFJuSmhiV1V1YzJWc1pXTjBhVzl1TG5SeWRXVkRiM1Z1ZENBK0lEQWdQeUIwYUdsekxtUmhkR0ZHY21GdFpTNXpaV3hsWTNScGIyNHVaMlYwVTJWc1pXTjBaV1JKYm1SbGVHVnpLQ2tnT2x4dUlDQWdJQzh2SUNBZ2RHaHBjeTVrWVhSaFJuSmhiV1V1Wm1sc2RHVnlMbWRsZEZObGJHVmpkR1ZrU1c1a1pYaGxjeWdwTzF4dVhHNGdJQ0FnZEdocGN5NXliM2R6VFdGemEyVmtJRDBnYVc1a2FXTmxjeTVzWlc1bmRHZzdYRzRnSUNBZ2RHaHBjeTV5YjNkelRuVnNiQ0E5SURBN1hHNWNiaUFnSUNCbWIzSWdLR052Ym5OMElHa2diMllnYVc1a2FXTmxjeWtnZTF4dUlDQWdJQ0FnYkdWMElITTZJSE4wY21sdVp5QTlJRHh6ZEhKcGJtYytLSFJvYVhNdWMyVnhRMjlzTG1kbGRDaHBLU2s3WEc1Y2JpQWdJQ0FnSUdsbUlDZ2hjeWtnZTF4dUlDQWdJQ0FnSUNCeklEMGdkR2hwY3k1ZmJuVnNiRk5sY1hWbGJtTmxLQ2s3WEc0Z0lDQWdJQ0FnSUNzcmRHaHBjeTV5YjNkelRuVnNiRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWTI5dWMzUWdjMlZ4VFRvZ2MzUnlhVzVuVzEwZ1BTQlhaV0pNYjJkdkxuTndiR2wwVTJWeFZHOU5iMjV2YldWeWN5aHpLVHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR3BRYjNNZ1BTQXdPeUJxVUc5eklEd2dkR2hwY3k1TVpXNW5kR2c3SUdwUWIzTXJLeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3YlVsdVptOGdQU0IwYUdsekxuQnZjMmwwYVc5dWMxdHFVRzl6WFM1bWNtVnhPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnRPaUJ6ZEhKcGJtY2dQU0J6WlhGTlczUm9hWE11YzNSaGNuUlFiM05wZEdsdmJpQXJJR3BRYjNOZElIeDhJQ2N0Snp0Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0VvYlNCcGJpQndiVWx1Wm04cEtWeHVJQ0FnSUNBZ0lDQWdJSEJ0U1c1bWIxdHRYU0E5SUc1bGR5QlFiM05wZEdsdmJrMXZibTl0WlhKSmJtWnZLQ2s3WEc0Z0lDQWdJQ0FnSUhCdFNXNW1iMXR0WFM1amIzVnVkQ3NyTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzh2STNKbFoybHZiaUJRYjJ4cGMyZ2dabkpsY1NCamIzVnVkSE5jYmlBZ0lDQm1iM0lnS0d4bGRDQnFVRzl6SUQwZ01Ec2dhbEJ2Y3lBOElIUm9hWE11VEdWdVozUm9PeUJxVUc5ekt5c3BJSHRjYmlBZ0lDQWdJQzh2SUdSbGJHVjBaU0IwYUdsekxuQnZjMmwwYVc5dWMxdHFVRzl6WFM1bWNtVnhXeWN0SjEwN1hHNWNiaUFnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjV6VzJwUWIzTmRMbkp2ZDBOdmRXNTBJRDBnTUR0Y2JpQWdJQ0FnSUdadmNpQW9ZMjl1YzNRZ2JTQnBiaUIwYUdsekxuQnZjMmwwYVc5dWMxdHFVRzl6WFM1bWNtVnhLVnh1SUNBZ0lDQWdJQ0IwYUdsekxuQnZjMmwwYVc5dWMxdHFVRzl6WFM1eWIzZERiM1Z1ZENBclBTQjBhR2x6TG5CdmMybDBhVzl1YzF0cVVHOXpYUzVtY21WeFcyMWRMbU52ZFc1ME8xeHVJQ0FnSUgxY2JpQWdJQ0F2THlObGJtUnlaV2RwYjI1Y2JseHVJQ0FnSUdOdmJuTjBJRzFoZUVobGFXZG9kQ0E5SUhSb2FYTXVZMkZ1ZG1GekxtaGxhV2RvZENBdElIUm9hWE11WVhocGMwaGxhV2RvZER0Y2JpQWdJQ0F2THlCamIyNXpiMnhsTG1SbFluVm5LR0JYWldKTWIyZHZMbDlqWVd4amRXeGhkR1VvS1NCdFlYaElaV2xuYUhROUpIdHRZWGhJWldsbmFIUjlMbUFwTzF4dVhHNGdJQ0FnTHk4amNtVm5hVzl1SUVOaGJHTjFiR0YwWlNCelkzSmxaVzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnFVRzl6SUQwZ01Ec2dhbEJ2Y3lBOElIUm9hWE11VEdWdVozUm9PeUJxVUc5ekt5c3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHWnlaWEU2SUhzZ1cyTTZJSE4wY21sdVoxMDZJRkJ2YzJsMGFXOXVUVzl1YjIxbGNrbHVabThnZlNBOUlIUm9hWE11Y0c5emFYUnBiMjV6VzJwUWIzTmRMbVp5WlhFN1hHNGdJQ0FnSUNCamIyNXpkQ0J5YjNkRGIzVnVkQ0E5SUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExuSnZkME52ZFc1ME8xeHVYRzRnSUNBZ0lDQnNaWFFnZVRvZ2JuVnRZbVZ5SUQwZ2RHaHBjeTVoZUdselNHVnBaMmgwTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0JsYm5SeWFXVnpJRDBnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9abkpsY1NrdWMyOXlkQ2dvWVN3Z1lpa2dQVDRnZTF4dUlDQWdJQ0FnSUNCcFppQW9ZVnN3WFNBaFBUMGdKeTBuSUNZbUlHSmJNRjBnSVQwOUlDY3RKeWxjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWWxzeFhTNWpiM1Z1ZENBdElHRmJNVjB1WTI5MWJuUTdYRzRnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLR0ZiTUYwZ1BUMDlJQ2N0SnlBbUppQmlXekJkSUQwOVBTQW5MU2NwWEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SURBN1hHNGdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tHRmJNRjBnUFQwOUlDY3RKeWxjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnTFRFN1hHNGdJQ0FnSUNBZ0lHVnNjMlVnTHlvZ0tHSmJNRjBnUFQwOUlDY3RKeWtnS2k5Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0t6RTdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnWlc1MGNua2diMllnWlc1MGNtbGxjeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3YlVsdVptODZJRkJ2YzJsMGFXOXVUVzl1YjIxbGNrbHVabThnUFNCbGJuUnllVnN4WFR0Y2JpQWdJQ0FnSUNBZ0x5OGdZMjl1YzNRZ2JUb2djM1J5YVc1bklEMGdaVzUwY25sYk1GMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElHZzZJRzUxYldKbGNpQTlJRzFoZUVobGFXZG9kQ0FxSUhCdFNXNW1ieTVqYjNWdWRDQXZJSEp2ZDBOdmRXNTBPMXh1WEc0Z0lDQWdJQ0FnSUhCdFNXNW1ieTVpYjNWdVpITWdQU0J1WlhjZ1JFY3VVbVZqZENocVVHOXpJQ29nZEdocGN5NWZjRzl6YVhScGIyNVhhV1IwYUN3Z2VTd2dkR2hwY3k1ZmNHOXphWFJwYjI1WGFXUjBhQ3dnYUNrN1hHNGdJQ0FnSUNBZ0lIa2dLejBnYUR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdMeThqWlc1a2NtVm5hVzl1WEc0Z0lIMWNibHh1SUNBdkx5QnlaV1pzWldOMElHTm9ZVzVuWlhNZ2JXRmtaU0IwYnlCbWFXeDBaWEl2YzJWc1pXTjBhVzl1WEc0Z0lISmxibVJsY2loeVpXTmhiR01nUFNCMGNuVmxLU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXViWE5uU0c5emRDa2dlMXh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVjMlZ4UTI5c0lDWW1JQ0YwYUdsekxtTndLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViWE5uU0c5emRDRXVhVzV1WlhKVVpYaDBJRDBnWUZWdWEyNXZkMjRnY0dGc1pYUjBaU0FvWTI5c2RXMXVJSE5sYlZSNWNHVTZJQ2NrZTNSb2FYTXVjMlZ4UTI5c0xuTmxiVlI1Y0dWOUp5a3VZRHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXRjMmRJYjNOMElTNXpkSGxzWlM1a2FYTndiR0Y1SUQwZ0p5YzdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG0xelowaHZjM1FoTG5OMGVXeGxMbVJwYzNCc1lYa2dQU0FuYm05dVpTYzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtTmhiblpoY3lCOGZDQWhkR2hwY3k1elpYRkRiMndnZkh3Z0lYUm9hWE11WkdGMFlVWnlZVzFsSUh4OElDRjBhR2x6TG1Od0tWeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJQ0FnWTI5dWMzUWdaeUE5SUhSb2FYTXVZMkZ1ZG1GekxtZGxkRU52Ym5SbGVIUW9KekprSnlrN1hHNGdJQ0FnYVdZZ0tDRm5LU0J5WlhSMWNtNDdYRzVjYmlBZ0lDQnBaaUFvY21WallXeGpLVnh1SUNBZ0lDQWdkR2hwY3k1ZlkyRnNZM1ZzWVhSbEtDazdYRzVjYmlBZ0lDQm5MbkpsYzJWMFZISmhibk5tYjNKdEtDazdYRzRnSUNBZ1p5NW1hV3hzVTNSNWJHVWdQU0FuZDJocGRHVW5PMXh1SUNBZ0lHY3VabWxzYkZKbFkzUW9NQ3dnTUN3Z2RHaHBjeTVqWVc1MllYTXVkMmxrZEdnc0lIUm9hWE11WTJGdWRtRnpMbWhsYVdkb2RDazdYRzRnSUNBZ1p5NTBaWGgwUW1GelpXeHBibVVnUFNCMGFHbHpMblJsZUhSQ1lYTmxiR2x1WlR0Y2JseHVJQ0FnSUM4dklGQnlaWFpsYm5SeklHUnBkbWx6YVc5dUlHSjVJSHBsY204Z2IyNGdUR1Z1WjNSb0lEMGdNRnh1SUNBZ0lHbG1JQ2gwYUdsekxuTjBZWEowVUc5emFYUnBiMjRnUFQwOUlDMHhJSHg4SUhSb2FYTXVaVzVrVUc5emFYUnBiMjRnUFQwOUlDMHhLVnh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVYRzRnSUNBZ0x5OGpjbVZuYVc5dUlGQnNiM1FnY0c5emFYUnBiMjVPWVcxbGMxeHVJQ0FnSUdjdWNtVnpaWFJVY21GdWMyWnZjbTBvS1R0Y2JpQWdJQ0JuTG1acGJHeFRkSGxzWlNBOUlDZGliR0ZqYXljN1hHNGdJQ0FnWnk1MFpYaDBRV3hwWjI0Z1BTQW5ZMlZ1ZEdWeUp6dGNiaUFnSUNCbkxtWnZiblFnUFNBbk1UQndlQ0JTYjJKdmRHOHNJRkp2WW05MGJ5Qk1iMk5oYkN3Z2MyRnVjeTF6WlhKcFppYzdYRzRnSUNBZ1kyOXVjM1FnY0c5elRtRnRaVTFoZUZkcFpIUm9JRDBnVFdGMGFDNXRZWGdvTGk0dWRHaHBjeTV3YjNOcGRHbHZibk11YldGd0tDaHdiM01wSUQwK0lHY3ViV1ZoYzNWeVpWUmxlSFFvY0c5ekxtNWhiV1VwTG5kcFpIUm9LU2s3WEc0Z0lDQWdZMjl1YzNRZ2FGTmpZV3hsSUQwZ2NHOXpUbUZ0WlUxaGVGZHBaSFJvSUR3Z0tIUm9hWE11WDNCdmMybDBhVzl1VjJsa2RHZ2dMU0F5S1NBL0lERWdPaUFvZEdocGN5NWZjRzl6YVhScGIyNVhhV1IwYUNBdElESXBJQzhnY0c5elRtRnRaVTFoZUZkcFpIUm9PMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhbEJ2Y3lBOUlEQTdJR3BRYjNNZ1BDQjBhR2x6TGt4bGJtZDBhRHNnYWxCdmN5c3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQndiM002SUZCdmMybDBhVzl1U1c1bWJ5QTlJSFJvYVhNdWNHOXphWFJwYjI1elcycFFiM05kTzF4dUlDQWdJQ0FnWnk1eVpYTmxkRlJ5WVc1elptOXliU2dwTzF4dUlDQWdJQ0FnWnk1elpYUlVjbUZ1YzJadmNtMG9YRzRnSUNBZ0lDQWdJR2hUWTJGc1pTd2dNQ3dnTUN3Z01TeGNiaUFnSUNBZ0lDQWdhbEJ2Y3lBcUlIUm9hWE11WDNCdmMybDBhVzl1VjJsa2RHZ2dLeUIwYUdsekxsOXdiM05wZEdsdmJsZHBaSFJvSUM4Z01pd2dNQ2s3WEc0Z0lDQWdJQ0JuTG1acGJHeFVaWGgwS0hCdmN5NXVZVzFsTENBd0xDQXdLVHRjYmlBZ0lDQjlYRzRnSUNBZ0x5OGpaVzVrY21WbmFXOXVJRkJzYjNRZ2NHOXphWFJwYjI1T1lXMWxjMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhbEJ2Y3lBOUlEQTdJR3BRYjNNZ1BDQjBhR2x6TGt4bGJtZDBhRHNnYWxCdmN5c3JLU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUZ0dGIyNXZiV1Z5TENCd2JVbHVabTlkSUc5bUlFOWlhbVZqZEM1bGJuUnlhV1Z6S0hSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExtWnlaWEVwS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h0YjI1dmJXVnlJQ0U5UFNBbkxTY3BJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JpSUQwZ2NHMUpibVp2TG1KdmRXNWtjenRjYmx4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdadmJuUlRkSGxzWlNBOUlDY3hObkI0SUZKdlltOTBieXdnVW05aWIzUnZJRXh2WTJGc0xDQnpZVzV6TFhObGNtbG1KenRjYmlBZ0lDQWdJQ0FnSUNBdkx5QklZV05yY3lCMGJ5QnpZMkZzWlNCMWNIQmxjbU5oYzJVZ1kyaGhjbUZqZEdWeWN5QjBieUIwWVhKblpYUWdjbVZqZEdGdVoyeGxYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdkWEJ3WlhKallYTmxUR1YwZEdWeVFYTmpaVzUwSUQwZ01DNHlOVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0IxY0hCbGNtTmhjMlZNWlhSMFpYSklaV2xuYUhRZ1BTQXhNaTR5TzF4dVhHNGdJQ0FnSUNBZ0lDQWdaeTV5WlhObGRGUnlZVzV6Wm05eWJTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUdjdWMzUnliMnRsVTNSNWJHVWdQU0FuYkdsbmFIUm5jbUY1Snp0Y2JpQWdJQ0FnSUNBZ0lDQm5MbXhwYm1WWGFXUjBhQ0E5SURFN1hHNGdJQ0FnSUNBZ0lDQWdaeTV5WldOMEtHSXViR1ZtZEN3Z1lpNTBiM0FzSUdJdWQybGtkR2dzSUdJdWFHVnBaMmgwS1R0Y2JpQWdJQ0FnSUNBZ0lDQm5MbVpwYkd4VGRIbHNaU0E5SUhSb2FYTXVZM0F1WjJWMEtHMXZibTl0WlhJcElEOC9JSFJvYVhNdVkzQXVaMlYwS0NkdmRHaGxjaWNwTzF4dUlDQWdJQ0FnSUNBZ0lHY3VkR1Y0ZEVGc2FXZHVJRDBnSjJ4bFpuUW5PMXh1SUNBZ0lDQWdJQ0FnSUdjdVptOXVkQ0E5SUdadmJuUlRkSGxzWlR0Y2JpQWdJQ0FnSUNBZ0lDQXZMMmN1Wm1sc2JGSmxZM1FvWWk1c1pXWjBMQ0JpTG5SdmNDd2dZaTUzYVdSMGFDd2dZaTVvWldsbmFIUXBPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzFVYlRvZ1ZHVjRkRTFsZEhKcFkzTWdQU0JuTG0xbFlYTjFjbVZVWlhoMEtHMXZibTl0WlhJcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2FXWWdLRzFOTG1GamRIVmhiRUp2ZFc1a2FXNW5RbTk0UVhOalpXNTBJQ0U5SURBcFhHNGdJQ0FnSUNBZ0lDQWdMeThnSUNCamIyNXpiMnhsTG1SbFluVm5LR0J0T2lBa2UyMTlMQ0J0VFM1aFkzUjFZV3hDYjNWdVpHbHVaMEp2ZUVGelkyVnVkRG9nSkh0dFRTNWhZM1IxWVd4Q2IzVnVaR2x1WjBKdmVFRnpZMlZ1ZEgxZ0tUdGNibHh1SUNBZ0lDQWdJQ0FnSUdjdWMyVjBWSEpoYm5ObWIzSnRLRnh1SUNBZ0lDQWdJQ0FnSUNBZ1lpNTNhV1IwYUNBdklHMVViUzUzYVdSMGFDd2dNQ3dnTUN3Z1lpNW9aV2xuYUhRZ0x5QjFjSEJsY21OaGMyVk1aWFIwWlhKSVpXbG5hSFFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmlMbXhsWm5Rc0lHSXVkRzl3S1R0Y2JpQWdJQ0FnSUNBZ0lDQm5MbVpwYkd4VVpYaDBLRzF2Ym05dFpYSXNJREFzSUMxMWNIQmxjbU5oYzJWTVpYUjBaWEpCYzJObGJuUXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0JqWVd4alUybDZaU2dwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11WTJGdWRtRnpJSHg4SUNGMGFHbHpMbWh2YzNRcFhHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc1Y2JpQWdJQ0JzWlhRZ2QybGtkR2c2SUc1MWJXSmxjaUE5SUhSb2FYTXVUR1Z1WjNSb0lDb2dkR2hwY3k1d2IzTnBkR2x2YmxkcFpIUm9PMXh1SUNBZ0lHeGxkQ0JvWldsbmFIUWdQU0JOWVhSb0xtMXBiaWgwYUdsekxtMWhlRWhsYVdkb2RDd2dUV0YwYUM1dFlYZ29kR2hwY3k1dGFXNUlaV2xuYUhRc0lIUm9hWE11Y205dmRDNWpiR2xsYm5SSVpXbG5hSFFwS1R0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1acGRFRnlaV0VwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSGhUWTJGc1pUb2diblZ0WW1WeUlEMGdkR2hwY3k1eWIyOTBMbU5zYVdWdWRFaGxhV2RvZENBdklHaGxhV2RvZER0Y2JpQWdJQ0FnSUdOdmJuTjBJSGxUWTJGc1pUb2diblZ0WW1WeUlEMGdkR2hwY3k1eWIyOTBMbU5zYVdWdWRGZHBaSFJvSUM4Z2QybGtkR2c3WEc0Z0lDQWdJQ0JqYjI1emRDQnpZMkZzWlNBOUlFMWhkR2d1YldGNEtERXNJRTFoZEdndWJXbHVLSGhUWTJGc1pTd2dlVk5qWVd4bEtTazdYRzRnSUNBZ0lDQjNhV1IwYUNBOUlIZHBaSFJvSUNvZ2MyTmhiR1U3WEc0Z0lDQWdJQ0JvWldsbmFIUWdQU0JvWldsbmFIUWdLaUJ6WTJGc1pUdGNiaUFnSUNBZ0lIUm9hWE11WDNCdmMybDBhVzl1VjJsa2RHZ2dQU0IwYUdsekxuQnZjMmwwYVc5dVYybGtkR2dnS2lCelkyRnNaVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG1OaGJuWmhjeTUzYVdSMGFDQTlJSGRwWkhSb08xeHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxuTjBlV3hsTG5kcFpIUm9JRDBnWUNSN2QybGtkR2g5Y0hoZ08xeHVYRzRnSUNBZ0x5OGdZMjl1YzNRZ1kyRnVkbUZ6U0dWcFoyaDBPaUJ1ZFcxaVpYSWdQU0IzYVdSMGFDQStJSFJvYVhNdWNtOXZkQzVqYkdsbGJuUlhhV1IwYUNBL0lHaGxhV2RvZENBdElEZ2dPaUJvWldsbmFIUTdYRzRnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG5ObGRGQnliM0JsY25SNUtDZG9aV2xuYUhRbkxDQmdKSHRvWldsbmFIUjljSGhnS1R0Y2JpQWdJQ0JqYjI1emRDQmpZVzUyWVhOSVpXbG5hSFE2SUc1MWJXSmxjaUE5SUhSb2FYTXVhRzl6ZEM1amJHbGxiblJJWldsbmFIUTdYRzRnSUNBZ2RHaHBjeTVqWVc1MllYTXVhR1ZwWjJoMElEMGdZMkZ1ZG1GelNHVnBaMmgwTzF4dUlDQWdJSFJvYVhNdVkyRnVkbUZ6TG5OMGVXeGxMbk5sZEZCeWIzQmxjblI1S0Nkb1pXbG5hSFFuTENCZ0pIdGpZVzUyWVhOSVpXbG5hSFI5Y0hoZ0tUdGNibHh1SUNBZ0lDOHZJRUZrYW5WemRDQm9iM04wSUdGdVpDQnliMjkwSUhkcFpIUm9YRzRnSUNBZ2FXWWdLSFJvYVhNdVptbDRWMmxrZEdncElIdGNiaUFnSUNBZ0lDOHZJR1oxYkd3Z2QybGtkR2dnWm05eUlHTmhiblpoY3lCb2IzTjBJR0Z1WkNCeWIyOTBYRzRnSUNBZ0lDQjBhR2x6TG5KdmIzUXVjM1I1YkdVdWQybGtkR2dnUFNCMGFHbHpMbWh2YzNRdWMzUjViR1V1ZDJsa2RHZ2dQU0JnSkh0M2FXUjBhSDF3ZUdBN1hHNGdJQ0FnSUNCMGFHbHpMbkp2YjNRdWMzUjViR1V1YUdWcFoyaDBJQzhxUFNCMGFHbHpMbWh2YzNRdWMzUjViR1V1YUdWcFoyaDBLaThnUFNCZ0pIdG9aV2xuYUhSOWNIaGdPMXh1SUNBZ0lDQWdkR2hwY3k1b2IzTjBMbk4wZVd4bExuTmxkRkJ5YjNCbGNuUjVLQ2R2ZG1WeVpteHZkeWNzSUNkb2FXUmtaVzRuTENBbmFXMXdiM0owWVc1MEp5azdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUM4dklHRnNiRzkzSUhOamNtOXNiQ0JqWVc1MllYTWdhVzRnY205dmRGeHVJQ0FnSUNBZ2RHaHBjeTV5YjI5MExuTjBlV3hsTG5kcFpIUm9JRDBnZEdocGN5NW9iM04wTG5OMGVXeGxMbmRwWkhSb0lEMGdKekV3TUNVbk8xeHVJQ0FnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG05MlpYSm1iRzkzV0NBOUlDZGhkWFJ2SVdsdGNHOXlkR0Z1ZENjN1hHNGdJQ0FnSUNCMGFHbHpMbWh2YzNRdWMzUjViR1V1YzJWMFVISnZjR1Z5ZEhrb0oyOTJaWEptYkc5M0p5d2diblZzYkNrN1hHNWNiaUFnSUNBZ0lIUm9hWE11YUc5emRDNXpkSGxzWlM1elpYUlFjbTl3WlhKMGVTZ25kR1Y0ZEMxaGJHbG5iaWNzSUhSb2FYTXVhRzl5YVhwdmJuUmhiRUZzYVdkdWJXVnVkQ2s3WEc1Y2JpQWdJQ0FnSUM4dklIWmxjblJwWTJGc0lHRnNhV2R1YldWdWRGeHVJQ0FnSUNBZ2JHVjBJR2h2YzNSVWIzQk5ZWEpuYVc0Z1BTQXdPMXh1SUNBZ0lDQWdjM2RwZEdOb0lDaDBhR2x6TG5abGNuUnBZMkZzUVd4cFoyNXRaVzUwS1NCN1hHNGdJQ0FnSUNCallYTmxJQ2QwYjNBbk9seHVJQ0FnSUNBZ0lDQm9iM04wVkc5d1RXRnlaMmx1SUQwZ01EdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJQ2R0YVdSa2JHVW5PbHh1SUNBZ0lDQWdJQ0JvYjNOMFZHOXdUV0Z5WjJsdUlEMGdUV0YwYUM1dFlYZ29NQ3dnS0hSb2FYTXVjbTl2ZEM1amJHbGxiblJJWldsbmFIUWdMU0JvWldsbmFIUXBJQzhnTWlrN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnWTJGelpTQW5ZbTkwZEc5dEp6cGNiaUFnSUNBZ0lDQWdhRzl6ZEZSdmNFMWhjbWRwYmlBOUlFMWhkR2d1YldGNEtEQXNJSFJvYVhNdWNtOXZkQzVqYkdsbGJuUklaV2xuYUhRZ0xTQm9aV2xuYUhRcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhSb2FYTXVhRzl6ZEM1emRIbHNaUzV6WlhSUWNtOXdaWEowZVNnbmJXRnlaMmx1TFhSdmNDY3NJR0FrZTJodmMzUlViM0JOWVhKbmFXNTljSGhnTENBbmFXMXdiM0owWVc1MEp5azdYRzVjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbkp2YjNRdVkyeHBaVzUwU0dWcFoyaDBJRHdnYUdWcFoyaDBLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVhRzl6ZEM1emRIbHNaUzV6WlhSUWNtOXdaWEowZVNnbmFHVnBaMmgwSnl3Z1lDUjdkR2hwY3k1eWIyOTBMbU5zYVdWdWRFaGxhV2RvZEgxd2VHQXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtaHZjM1F1YzNSNWJHVXVjMlYwVUhKdmNHVnlkSGtvSjI5MlpYSm1iRzkzTFhrbkxDQnVkV3hzS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVhRzl6ZEM1emRIbHNaUzV6WlhSUWNtOXdaWEowZVNnbmIzWmxjbVpzYjNjdGVTY3NJQ2RvYVdSa1pXNG5MQ0FuYVcxd2IzSjBZVzUwSnlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1kyOXVjMjlzWlM1a1pXSjFaeWhjYmlBZ0lDQXZMeUFnSUdCMGFHbHpMbkp2YjNRdWMzUjViR1V1YUdWcFoyaDBJRDBnSkh0MGFHbHpMbkp2YjNRdWMzUjViR1V1YUdWcFoyaDBmVnhjYm1BZ0sxeHVJQ0FnSUM4dklDQWdZSFJvYVhNdWNtOXZkQzVqYkdsbGJuUklaV2xuYUhRZ1BTQWtlM1JvYVhNdWNtOXZkQzVqYkdsbGJuUklaV2xuYUhSOVhGeHVZQ0FyWEc0Z0lDQWdMeThnSUNCZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG1obGFXZG9kQ0E5SUNSN2RHaHBjeTVvYjNOMExuTjBlV3hsTG1obGFXZG9kSDFjWEc1Z0lDdGNiaUFnSUNBdkx5QWdJR0IwYUdsekxtaHZjM1F1WTJ4cFpXNTBTR1ZwWjJoMElEMGdKSHQwYUdsekxtaHZjM1F1WTJ4cFpXNTBTR1ZwWjJoMGZWeGNibUFnSzF4dUlDQWdJQzh2SUNBZ0oxeGNiaWNnSzF4dUlDQWdJQzh2SUNBZ1lIUm9hWE11WTJGdWRtRnpMbWhsYVdkb2RDQWdJQ0FnSUNBOUlDUjdkR2hwY3k1allXNTJZWE11YUdWcFoyaDBmVnhjYm1BZ0sxeHVJQ0FnSUM4dklDQWdZSFJvYVhNdVkyRnVkbUZ6TG5OMGVXeGxMbWhsYVdkb2RDQTlJQ1I3ZEdocGN5NWpZVzUyWVhNdWMzUjViR1V1YUdWcFoyaDBmV0FwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQndZWEpoYlNCN1JFY3VRMjlzZFcxdWZTQnpaWEZEYjJ3Z1EyOXNkVzF1SUhSdklHeHZiMnNnWm05eUlHRWdjR0ZzWlhSMFpWeHVJQ0FnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnSUcxcGJreGxibWQwYUNCdGFXNXBiWFZ0SUd4bGJtZDBhQ0J2WmlCelpYRjFaVzVqWlNCMGJ5QmtaWFJsWTNRZ2NHRnNaWFIwWlNBb1pXMXdkSGtnYzNSeWFXNW5jeUJoY21VZ1lXeHNiM2RsWkNsY2JpQWdJQ29nUUhKbGRIVnliaUI3VTJWeFVHRnNaWFIwWlgwZ1VHRnNaWFIwWlNCamIzSnlaWE53YjI1a2FXNW5JSFJ2SUhSb1pTQmhiSEJvWVdKbGRDQnZaaUIwYUdVZ2MyVnhkV1Z1WTJWeklHbHVJSFJvWlNCamIyeDFiVzVjYmlBZ0lDb3ZYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdjR2xqYTFWd1VHRnNaWFIwWlNoelpYRkRiMnc2SUVSSExrTnZiSFZ0Yml3Z2JXbHVUR1Z1WjNSb09pQnVkVzFpWlhJZ1BTQTFLVG9nVTJWeFVHRnNaWFIwWlNCN1hHNGdJQ0FnYkdWMElISmxjem9nVTJWeFVHRnNaWFIwWlNCOElHNTFiR3dnUFNCdWRXeHNPMXh1SUNBZ0lITjNhWFJqYUNBb2MyVnhRMjlzTG5ObGJWUjVjR1VwSUh0Y2JpQWdJQ0JqWVhObElFRnRhVzV2WVdOcFpITXVVMlZ0Vkhsd1pVMTFiSFJwY0d4bFFXeHBaMjV0Wlc1ME9seHVJQ0FnSUNBZ2NtVnpJRDBnUVcxcGJtOWhZMmxrYzFCaGJHVjBkR1Z6TGtkeWIydEhjbTkxY0hNN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSUU1MVkyeGxiM1JwWkdWekxsTmxiVlI1Y0dWTmRXeDBhWEJzWlVGc2FXZHViV1Z1ZERwY2JpQWdJQ0FnSUhKbGN5QTlJRTUxWTJ4bGIzUnBaR1Z6VUdGc1pYUjBaWE11UTJoeWIyMWhkRzluY21GdE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUdGc2NHaGhZbVYwUm5KbGNYTTZJRTF2Ym05dFpYSkdjbVZ4Y3lBOUlGZGxZa3h2WjI4dVoyVjBRV3h3YUdGaVpYUkdjbVZ4Y3loelpYRkRiMndzSUcxcGJreGxibWQwYUNrN1hHNWNiaUFnSUNCamIyNXpkQ0JoYkhCb1lXSmxkRU5oYm1ScFpHRjBaWE02SUZ0VFpYUThjM1J5YVc1blBpd2dVMlZ4VUdGc1pYUjBaVjFiWFNBOUlGdGNiaUFnSUNBZ0lGdHVaWGNnVTJWMEtFOWlhbVZqZEM1clpYbHpLRTUxWTJ4bGIzUnBaR1Z6TGs1aGJXVnpLU2tzSUU1MVkyeGxiM1JwWkdWelVHRnNaWFIwWlhNdVEyaHliMjFoZEc5bmNtRnRYU3hjYmlBZ0lDQWdJRnR1WlhjZ1UyVjBLRTlpYW1WamRDNXJaWGx6S0VGdGFXNXZZV05wWkhNdVRtRnRaWE1wS1N3Z1FXMXBibTloWTJsa2MxQmhiR1YwZEdWekxrZHliMnRIY205MWNITmRMRnh1SUNBZ0lGMDdYRzRnSUNBZ0x5OGdRMkZzWTNWc1lYUmxJR3hwYTJWc2FXaHZiMlJ6SUdadmNpQmhiSEJvWVdKbGRGOWpZVzVrYVdSaGRHVnpYRzRnSUNBZ1kyOXVjM1FnWVd4d2FHRmlaWFJEWVc1a2FXUmhkR1Z6VTJsdE9pQnVkVzFpWlhKYlhTQTlJR0ZzY0doaFltVjBRMkZ1Wkdsa1lYUmxjeTV0WVhBb1hHNGdJQ0FnSUNBb1l5a2dQVDRnVjJWaVRHOW5ieTVuWlhSQmJIQm9ZV0psZEZOcGJXbHNZWEpwZEhrb1lXeHdhR0ZpWlhSR2NtVnhjeXdnWTFzd1hTa3BPMXh1SUNBZ0lHTnZibk4wSUcxaGVFTnZjeUE5SUUxaGRHZ3ViV0Y0S0M0dUxtRnNjR2hoWW1WMFEyRnVaR2xrWVhSbGMxTnBiU2s3WEc0Z0lDQWdhV1lnS0cxaGVFTnZjeUErSURBdU5qVXBYRzRnSUNBZ0lDQnlaWE1nUFNCaGJIQm9ZV0psZEVOaGJtUnBaR0YwWlhOYllXeHdhR0ZpWlhSRFlXNWthV1JoZEdWelUybHRMbWx1WkdWNFQyWW9iV0Y0UTI5ektWMWJNVjA3WEc0Z0lDQWdaV3h6WlZ4dUlDQWdJQ0FnY21WeklEMGdWVzVyYm05M2JsTmxjVkJoYkdWMGRHVnpMa052Ykc5eU8xeHVYRzRnSUNBZ0x5OGdhV1lnS0hKbGN5QTlQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDOHZJQ0FnTHk4Z1ZHaGxJR0ZzY0doaFltVjBJRzltSUc1MVkyeGxiM1JwWkdWeklHbHpJR0VnYzIxaGJHeGxjaUJ6WlhRc0lITnZJSGRsSUdOb1pXTnJJR2wwSUdacGNuTjBMbHh1SUNBZ0lDOHZJQ0FnWTI5dWMzUWdZV3h3YUdGaVpYUWdQU0I3TGk0dVRuVmpiR1Z2ZEdsa1pYTXVUbUZ0WlhNc0lDNHVMbnNuTFNjNklDZG5ZWEFuZlgwN1hHNGdJQ0FnTHk4Z0lDQnlaWE1nUFNCRVJ5NUVaWFJsWTNSdmNpNXpZVzF3YkdWRFlYUmxaMjl5YVdWektITmxjVU52YkN3Z0tITmxjU2tnUFQ0Z2UxeHVJQ0FnSUM4dklDQWdJQ0J5WlhSMWNtNGdJWE5sY1NCOGZDQW9jMlZ4TG14bGJtZDBhQ0ErSUcxcGJreGxibWQwYUNBbUppQjBhR2x6TG5Od2JHbDBVMlZ4Vkc5TmIyNXZiV1Z5Y3loelpYRXBMbVYyWlhKNUtDaHVLU0E5UGlCdUlHbHVJR0ZzY0doaFltVjBLU2s3WEc0Z0lDQWdMeThnSUNCOUxDQXhLU0EvSUU1MVkyeGxiM1JwWkdWelVHRnNaWFIwWlhNdVEyaHliMjFoZEc5bmNtRnRJRG9nYm5Wc2JEdGNiaUFnSUNBdkx5QjlYRzRnSUNBZ0x5OGdhV1lnS0hKbGN5QTlQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDOHZJQ0FnTHk4Z1FXNWtJSFJvWlc0Z1kyaGxZMnNnWm05eUlHRnRhVzV2SUdGamFXUW5jeUJoYkhCb1lXSmxkQzVjYmlBZ0lDQXZMeUFnSUdOdmJuTjBJR0ZzY0doaFltVjBJRDBnZXk0dUxrRnRhVzV2WVdOcFpITXVUbUZ0WlhNc0lDNHVMbnNuTFNjNklDZG5ZWEFuZlgwN1hHNGdJQ0FnTHk4Z0lDQnlaWE1nUFNCRVJ5NUVaWFJsWTNSdmNpNXpZVzF3YkdWRFlYUmxaMjl5YVdWektITmxjVU52YkN3Z0tITmxjU2tnUFQ0Z2UxeHVJQ0FnSUM4dklDQWdJQ0J5WlhSMWNtNGdJWE5sY1NCOGZDQW9jMlZ4TG14bGJtZDBhQ0ErSUcxcGJreGxibWQwYUNBbUppQjBhR2x6TG5Od2JHbDBVMlZ4Vkc5TmIyNXZiV1Z5Y3loelpYRXBMbVYyWlhKNUtDaHVLU0E5UGlCdUlHbHVJR0ZzY0doaFltVjBLU2s3WEc0Z0lDQWdMeThnSUNCOUxDQXhLU0EvSUVGdGFXNXZZV05wWkhOUVlXeGxkSFJsY3k1SGNtOXJSM0p2ZFhCeklEb2diblZzYkR0Y2JpQWdJQ0F2THlCOVhHNGdJQ0FnTHk4Z2FXWWdLSEpsY3lBOVBUMGdiblZzYkNrZ2UxeHVJQ0FnSUM4dklDQWdjbVZ6SUQwZ1ZXNXJibTkzYmxObGNWQmhiR1YwZEdWekxrTnZiRzl5TzF4dUlDQWdJQzh2SUgxY2JpQWdJQ0J5WlhSMWNtNGdjbVZ6TzF4dUlDQjlYRzVjYmlBZ2NIVmliR2xqSUhOMFlYUnBZeUJuWlhSQmJIQm9ZV0psZEVaeVpYRnpLSE5sY1VOdmJEb2dSRWN1UTI5c2RXMXVMQ0J0YVc1TVpXNW5kR2c2SUc1MWJXSmxjaUE5SURBcE9pQk5iMjV2YldWeVJuSmxjWE1nZTF4dUlDQWdJR052Ym5OMElISmxjem9nVFc5dWIyMWxja1p5WlhGeklEMGdlMzA3WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0J6WlhFZ2IyWWdjMlZ4UTI5c0xtTmhkR1ZuYjNKcFpYTXBJSHRjYmlBZ0lDQWdJR052Ym5OMElHMVRaWEU2SUhOMGNtbHVaMXRkSUQwZ1YyVmlURzluYnk1emNHeHBkRk5sY1ZSdlRXOXViMjFsY25Nb2MyVnhLVHRjYmlBZ0lDQWdJR2xtSUNodFUyVnhMbXhsYm1kMGFDQStJRzFwYmt4bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNCbWIzSWdLR052Ym5OMElHMGdiMllnYlZObGNTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDZ2hLRzBnYVc0Z2NtVnpLU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxjMXR0WFNBOUlEQTdYRzRnSUNBZ0lDQWdJQ0FnY21WelcyMWRJQ3M5SURFN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSEpsY3p0Y2JpQWdmVnh1WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nWjJWMFFXeHdhR0ZpWlhSVGFXMXBiR0Z5YVhSNUtHWnlaWEU2SUUxdmJtOXRaWEpHY21WeGN5d2dZV3h3YUdGaVpYUTZJRk5sZER4emRISnBibWMrTENCbllYQlRlVzFpYjJ3NklITjBjbWx1WnlBOUlDY3RKeWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdZMjl1YzNRZ2EyVjVjeUE5SUc1bGR5QlRaWFE4YzNSeWFXNW5QaWhiTGk0dWJtVjNJRk5sZENoUFltcGxZM1F1YTJWNWN5aG1jbVZ4S1Nrc0lDNHVMbUZzY0doaFltVjBYU2s3WEc0Z0lDQWdhMlY1Y3k1a1pXeGxkR1VvWjJGd1UzbHRZbTlzS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR1p5WlhGQk9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElHRnNjR2hoWW1WMFFUb2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUcwZ2IyWWdhMlY1Y3lrZ2UxeHVJQ0FnSUNBZ1puSmxjVUV1Y0hWemFDaHRJR2x1SUdaeVpYRWdQeUJtY21WeFcyMWRJRG9nTUNrN1hHNGdJQ0FnSUNCaGJIQm9ZV0psZEVFdWNIVnphQ2hoYkhCb1lXSmxkQzVvWVhNb2JTa2dQeUF4SURvZ01DazdYRzRnSUNBZ2ZWeHVJQ0FnSUM4cUlGUm9aWEpsSUhkbGNtVWdZU0JtWlhjZ2FXUmxZWE02SUdOb2FTMXpjWFZoY21Wa0xDQndaV0Z5YzI5dUlHTnZjbkpsYkdGMGFXOXVJQ2gyWVhKcFlXNWpaVDhwTENCelkyRnNZWElnY0hKdlpIVmpkQ0FxTDF4dUlDQWdJR052Ym5OMElHWnlaWEZXT2lCV1pXTjBiM0lnUFNCdVpYY2dWbVZqZEc5eUtHWnlaWEZCS1R0Y2JpQWdJQ0JqYjI1emRDQmhiSEJvWVdKbGRGWTZJRlpsWTNSdmNpQTlJRzVsZHlCV1pXTjBiM0lvWVd4d2FHRmlaWFJCS1R0Y2JpQWdJQ0JqYjI1emRDQmpiM002SUc1MWJXSmxjaUE5SUhabFkzUnZja1J2ZEZCeWIyUjFZM1FvWm5KbGNWWXNJR0ZzY0doaFltVjBWaWtnTHlBb2RtVmpkRzl5VEdWdVozUm9LR1p5WlhGV0tTQXFJSFpsWTNSdmNreGxibWQwYUNoaGJIQm9ZV0psZEZZcEtUdGNiaUFnSUNCeVpYUjFjbTRnWTI5ek8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUVacGNuTjBJSFJ5ZVNCMGJ5Qm1hVzVrSUdOdmJIVnRiaUIzYVhSb0lITmxiVlI1Y0dVZ0oyRnNhV2R1WldSVFpYRjFaVzVqWlNjdVhHNGdJQ0FxSUU1bGVIUWdiRzl2YXlCbWIzSWdZMjlzZFcxdUlIZHBkR2dnWkdGMFlTQmhiSEJvWVdKbGRDQmpiM0p5WlhOd2IyNWthVzVuSUhSdklHRnVlU0J2WmlCMGFHVWdhMjV2ZDI0Z2NHRnNaWFIwWlhNdVhHNGdJQ0FxSUVCd1lYSmhiU0I3UkVjdVJHRjBZVVp5WVcxbGZTQmtZWFJoUm5KaGJXVmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1JFY3VRMjlzZFcxdWZTQlVhR1VnWTI5c2RXMXVJSGRsSUhkbGNtVWdiRzl2YTJsdVp5Qm1iM0lnYjNJZ2JuVnNiRnh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0J3YVdOclZYQlRaWEZEYjJ3b1pHRjBZVVp5WVcxbE9pQkVSeTVFWVhSaFJuSmhiV1VwT2lCRVJ5NURiMngxYlc0Z2ZDQnVkV3hzSUh0Y2JpQWdJQ0JzWlhRZ2NtVnpPaUJFUnk1RGIyeDFiVzRnZkNCdWRXeHNJRDBnWkdGMFlVWnlZVzFsTG1OdmJIVnRibk11WW5sVFpXMVVlWEJsS0NkaGJHbG5ibVZrVTJWeGRXVnVZMlVuS1R0Y2JpQWdJQ0JwWmlBb2NtVnpJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnWTI5c0lHOW1JR1JoZEdGR2NtRnRaUzVqYjJ4MWJXNXpLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR053SUQwZ1YyVmlURzluYnk1d2FXTnJWWEJRWVd4bGRIUmxLR052YkNCaGN5QkVSeTVEYjJ4MWJXNHNJRFVwTzF4dUlDQWdJQ0FnSUNCcFppQW9ZM0FnSVQwOUlHNTFiR3dnSmlZZ0lTaGpjQ0JwYm5OMFlXNWpaVzltSUZWdWEyNXZkMjVUWlhGUVlXeGxkSFJsS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsY3lBOUlHTnZiRHRjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2NtVnpPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdjM0JzYVhSU1pTQTlJQzljWEZzb1hGeDNLeWxjWEYxOEtGeGNkeWw4S0MwcEwyYzdYRzVjYmlBZ2NIVmliR2xqSUhOMFlYUnBZeUJ6Y0d4cGRGTmxjVlJ2VFc5dWIyMWxjbk1vYzJWeE9pQnpkSEpwYm1jcE9pQnpkSEpwYm1kYlhTQjdYRzRnSUNBZ0x5OGdWRTlFVHpvZ1ZYTmxJSE5sY1hWbGJtTmxJSE5sY0dGeVlYUnZjbHh1SUNBZ0lHTnZibk4wSUhKbGN6b2djM1J5YVc1blcxMGdQU0IzZFNoelpYRXVkRzlUZEhKcGJtY29LUzV0WVhSamFFRnNiQ2hYWldKTWIyZHZMbk53YkdsMFVtVXBLUzV0WVhBb0tHMWhLU0E5UGlCN1hHNGdJQ0FnSUNCc1pYUWdiVkpsY3pvZ2MzUnlhVzVuTzF4dUlDQWdJQ0FnWTI5dWMzUWdiU0E5SUcxaFd6QmRPMXh1SUNBZ0lDQWdhV1lnS0cwdWJHVnVaM1JvSUQ0Z01Ta2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2JTQnBiaUJYWldKTWIyZHZMbUZoVTNsdWIyNTViWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQnRVbVZ6SUQwZ1YyVmlURzluYnk1aFlWTjVibTl1ZVcxelcyMWRPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUcxU1pYTWdQU0FuSnp0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtUmxZblZuS0dCTWIyNW5JRzF2Ym05dFpYSWdKeVI3YlgwbklHaGhjeUJ1YjNRZ1lTQnphRzl5ZENCemVXNXZibmx0TG1BcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnRVbVZ6SUQwZ2JUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCdFVtVnpPMXh1SUNBZ0lIMHBMblJ2UVhKeVlYa29LVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnlaWE03WEc0Z0lIMWNibHh1SUNBdktpb2dUMjVzZVNCemIyMWxJRzltSUhSb1pTQnplVzV2Ym5sdGN5NGdWR2hsYzJVZ2QyVnlaU0J2WW5SaGFXNWxaQ0JtY205dElIUm9aU0JqYkhWemRHVnlaV1FnYjJ4cFoyOXdaWEIwYVdSbElHUmhkR0Z6WlhRdUlDb3ZYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR0ZoVTNsdWIyNTViWE02SUhzZ1cyNWhiV1U2SUhOMGNtbHVaMTA2SUhOMGNtbHVaeUI5SUQwZ2UxeHVJQ0FnSUNkYlRXVk9iR1ZkSnpvZ0owd25MQ0F2THlCT2JHVWdMU0J1YjNKc1pYVmphVzVsWEc0Z0lDQWdKMXROWlVGZEp6b2dKMEVuTEZ4dUlDQWdJQ2RiVFdWSFhTYzZJQ2RISnl4Y2JpQWdJQ0FuVzAxbFJsMG5PaUFuUmljc1hHNGdJSDA3WEc1OVhHNGlYWDA9IiwiLyoqXG4gKiBHZW5lcmF0ZXMgc2luZ2xlIHJhbmRvbSBmbG9hdCBmcm9tIDAgdG8gcmFuZ2UuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IHJhbmdlIE1heCBnZW5lcmF0aW5nIHZhbHVlLlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBmbG9hdCBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21GbG9hdChyYW5nZSkge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogcmFuZ2U7XG59XG4vKipcbiAqIEdlbmVyYXRlcyBzaW5nbGUgcmFuZG9tIGludGVnZXIgZnJvbSAwIHRvIHJhbmdlLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZSBNYXggZ2VuZXJhdGluZyB2YWx1ZS5cbiAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gaW50ZWdlciBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21JbnQocmFuZ2UpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihyYW5kb21GbG9hdChyYW5nZSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21GdVpHOXRMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWNtRnVaRzl0TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJPenM3T3pzN1IwRk5SenRCUVVOSUxFMUJRVTBzVlVGQlZTeFhRVUZYTEVOQlFVTXNTMEZCWVR0SlFVTjJReXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRMMElzUTBGQlF6dEJRVVZFT3pzN096czdSMEZOUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hUUVVGVExFTkJRVU1zUzBGQllUdEpRVU55UXl4UFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRlRU1zUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dSMlZ1WlhKaGRHVnpJSE5wYm1kc1pTQnlZVzVrYjIwZ1pteHZZWFFnWm5KdmJTQXdJSFJ2SUhKaGJtZGxMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0J5WVc1blpTQk5ZWGdnWjJWdVpYSmhkR2x1WnlCMllXeDFaUzVjYmlBcUlFQnlaWFIxY200Z2UyNTFiV0psY24wZ1FTQnlZVzVrYjIwZ1pteHZZWFFnWjJWdVpYSmhkR1ZrTGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjbUZ1Wkc5dFJteHZZWFFvY21GdVoyVTZJRzUxYldKbGNpazZJRzUxYldKbGNpQjdYRzRnSUhKbGRIVnliaUJOWVhSb0xuSmhibVJ2YlNncElDb2djbUZ1WjJVN1hHNTlYRzVjYmk4cUtseHVJQ29nUjJWdVpYSmhkR1Z6SUhOcGJtZHNaU0J5WVc1a2IyMGdhVzUwWldkbGNpQm1jbTl0SURBZ2RHOGdjbUZ1WjJVdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlISmhibWRsSUUxaGVDQm5aVzVsY21GMGFXNW5JSFpoYkhWbExseHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmU0JCSUhKaGJtUnZiU0JwYm5SbFoyVnlJR2RsYm1WeVlYUmxaQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlISmhibVJ2YlVsdWRDaHlZVzVuWlRvZ2JuVnRZbVZ5S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdjbVYwZFhKdUlFMWhkR2d1Wm14dmIzSW9jbUZ1Wkc5dFJteHZZWFFvY21GdVoyVXBLVHRjYm4xY2JpSmRmUT09IiwiLyoqXG4gKiBEZW5vdGVzIGEgdmVjdG9yIG9mIGZsb2F0aW5nIHBvaXQgdmFsdWVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBWZWN0b3JcbiAqIEBleHRlbmRzIHtGbG9hdDMyQXJyYXl9XG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3IgZXh0ZW5kcyBGbG9hdDMyQXJyYXkge1xufVxuLyoqXG4gKiBEZW5vdGVzIGEgdHdvLWRpbWVuc2lvbmFsIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgTWF0cml4XG4gKiBAZXh0ZW5kcyB7QXJyYXk8VmVjdG9yPn1cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdHJpeCBleHRlbmRzIEFycmF5IHtcbn1cbi8qKlxuICogRGVub3RlcyBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIENvb3JkaW5hdGVzXG4gKiBAZXh0ZW5kcyB7TWF0cml4fVxuICovXG5leHBvcnQgY2xhc3MgQ29vcmRpbmF0ZXMgZXh0ZW5kcyBNYXRyaXgge1xufVxuLyoqXG4gKiBEZW5vdGVzIGFuIGFycmF5IG9mIGFyYml0cmFyeS10eXBlZCB2ZWN0b3JzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBWZWN0b3JzXG4gKiBAZXh0ZW5kcyB7QXJyYXk8YW55Pn1cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvcnMgZXh0ZW5kcyBBcnJheSB7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMGVYQmxMV1JsWTJ4aGNtRjBhVzl1Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRVHM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUVUZCVHl4VFFVRlJMRmxCUVZrN1EwRkJSenRCUVVVelF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1RVRkJUeXhUUVVGUkxFdEJRV0U3UTBGQlJ6dEJRVVUxUXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVjBGQldTeFRRVUZSTEUxQlFVMDdRMEZCUnp0QlFVVXhRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUMEZCVVN4VFFVRlJMRXRCUVZVN1EwRkJSeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUhabFkzUnZjaUJ2WmlCbWJHOWhkR2x1WnlCd2IybDBJSFpoYkhWbGN5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBWTJ4aGMzTWdWbVZqZEc5eVhHNGdLaUJBWlhoMFpXNWtjeUI3Um14dllYUXpNa0Z5Y21GNWZWeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdWbVZqZEc5eUlHVjRkR1Z1WkhNZ1JteHZZWFF6TWtGeWNtRjVJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCaElIUjNieTFrYVcxbGJuTnBiMjVoYkNCdFlYUnlhWGd1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FHTnNZWE56SUUxaGRISnBlRnh1SUNvZ1FHVjRkR1Z1WkhNZ2UwRnljbUY1UEZabFkzUnZjajU5WEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCTllYUnlhWGdnWlhoMFpXNWtjeUJCY25KaGVUeFdaV04wYjNJK0lIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJqWVhKMFpYTnBZVzRnWTI5dmNtUnBibUYwWlhNdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRR05zWVhOeklFTnZiM0prYVc1aGRHVnpYRzRnS2lCQVpYaDBaVzVrY3lCN1RXRjBjbWw0ZlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1EyOXZjbVJwYm1GMFpYTWdaWGgwWlc1a2N5Qk5ZWFJ5YVhnZ2UzMWNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR0Z1SUdGeWNtRjVJRzltSUdGeVltbDBjbUZ5ZVMxMGVYQmxaQ0IyWldOMGIzSnpMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCamJHRnpjeUJXWldOMGIzSnpYRzRnS2lCQVpYaDBaVzVrY3lCN1FYSnlZWGs4WVc1NVBuMWNiaUFxTDF4dVpYaHdiM0owSUdOc1lYTnpJRlpsWTNSdmNuTWdaWGgwWlc1a2N5QkJjbkpoZVR4aGJuaytJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCaElHUnBZM1JwYjI1aGNua2dZMjl1ZEdGcGJtbHVaeUJtZFc1amRHbHZiaUJ2Y0hScGIyNXpMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCMGVYQmxJRTl3ZEdsdmJuTmNiaUFxTDF4dVpYaHdiM0owSUhSNWNHVWdUM0IwYVc5dWN5QTlJSHRiYm1GdFpUb2djM1J5YVc1blhUb2dZVzU1ZlR0Y2JseHVMeW9xWEc0Z0tpQkVaVzV2ZEdWeklHTjFjM1J2YlNCa2FYTjBZVzVqWlNCdFpYUnlhV01nWW1WMGQyVmxiaUIwYUdVZ2RIZHZJR2RwZG1WdUlIWmxZM1J2Y25NdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSFI1Y0dVZ1JHbHpkR0Z1WTJWTlpYUnlhV05jYmlBcUlFQndZWEpoYlNCN1lXNTVmU0IyTVNCVWFHVWdabWx5YzNRZ2RtVmpkRzl5TGx4dUlDb2dRSEJoY21GdElIdGhibmw5SUhZeUlGUm9aU0J6WldOdmJtUWdkbVZqZEc5eUxseHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmU0JFYVhOMFlXNWpaU0JpWlhSM1pXVnVJSFJvWlhObElIUjNieUIyWldOMGIzSnpMbHh1SUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JFYVhOMFlXNWpaVTFsZEhKcFl5QTlJQ2gyTVRvZ1lXNTVMQ0IyTWpvZ1lXNTVLU0E5UGlBb2JuVnRZbVZ5S1R0Y2JseHVMeW9xWEc0Z0tpQkVaVzV2ZEdWeklHRWdjMmx0Y0d4bElITjBjbWx1WnlCMGJ5QnpkSEpwYm1jZ1pHbGpkR2x2Ym1GeWVTNWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBZEhsd1pTQlRkSEpwYm1kRWFXTjBhVzl1WVhKNVhHNGdLaTljYm1WNGNHOXlkQ0IwZVhCbElGTjBjbWx1WjBScFkzUnBiMjVoY25rZ1BTQjdXMnRsZVRvZ2MzUnlhVzVuWFRvZ2MzUnlhVzVuZlR0Y2JpSmRmUT09IiwiaW1wb3J0IHsgVmVjdG9yIH0gZnJvbSAnLi90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQgeyByYW5kb21GbG9hdCwgcmFuZG9tSW50IH0gZnJvbSAnLi9yYW5kb20nO1xuLyoqXG4gKiBBc3NlcnRzIGEgY29uZGl0aW9uIGJ5IHRocm93aW5nIGFuIEVycm9yLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbmRpdGlvbj1mYWxzZV0gQ29uZGl0aW9uIHRvIGFzc2VydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZT0nQXNzZXJ0aW9uIGVycm9yLiddIE1lc3NhZ2UgdG8gb3V0cHV0LlxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uID0gZmFsc2UsIG1lc3NhZ2UgPSAnQXNzZXJ0aW9uIGVycm9yLicpIHtcbiAgICBpZiAoIWNvbmRpdGlvbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuLyoqXG4gKiBDcmVhdGVzIG5ldyB0d28tZGltZW5zaW9uYWwgYXJyYXkgYW5kIGZpbGxzIGl0IHdpdGggdGhlIHZhbHVlIGdpdmVuLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24xIFRoZSBmaXJzdCBkaW1lbnNpb24gb2YgdGhlIGNvb3JkaW5hdGVzIChudW1iZXIgb2Ygcm93cykuXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiBvZiB0aGUgY29vcmRpbmF0ZXMgKG51bWJlciBvZiBjb2x1bW5zKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbD0wXSBBIHZhbHVlIHRvIGZpbGwgdGhlIGNvb3JkaW5hdGVzIHdpdGguXG4gKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQSB0d28tZGltZW5zaW9uYWwgZmlsbGVkIHdpdGggdGhlIHZhbHVlIGdpdmVuLlxuICogQHRvZG8gTWlnaHQgYmUgc2xvdyBzaW5jZSB1c2VkIEFycmF5Lm1hcC4gUHJvYmFibHkgbmVlZHMgcGVyZm9ybWFuY2UgcmV2aXNpb24uXG4gKi9cbmZ1bmN0aW9uIGluaXRDb29yZGluYXRlcyhkaW1lbnNpb24xLCBkaW1lbnNpb24yLCBmaWxsID0gMCkge1xuICAgIHJldHVybiBuZXcgQXJyYXkoZGltZW5zaW9uMSkuZmlsbChmaWxsKS5tYXAoKCkgPT4gKG5ldyBWZWN0b3IoZGltZW5zaW9uMikuZmlsbChmaWxsKSkpO1xufVxuLyoqXG4gKiBUcmFuc3Bvc2UgbWF0cml4LlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXggVGhlIG1hdHJpeCB0byBiZSB0cmFuc3Bvc2VkLlxuICogQHJldHVybiB7TWF0cml4fSBUcmFuc3Bvc2VkIG1hdHJpeC5cbiAqIEB0b2RvIE1pZ2h0IGJlIHNsb3cgc2luY2UgdXNlZCBBcnJheS5tYXAuIFByb2JhYmx5IG5lZWRzIHBlcmZvcm1hbmNlIHJldmlzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlTWF0cml4KG1hdHJpeCkge1xuICAgIHJldHVybiBuZXcgQXJyYXkobWF0cml4WzBdLmxlbmd0aCkuZmlsbCgwKVxuICAgICAgICAubWFwKChfLCBpKSA9PiAobmV3IFZlY3RvcihtYXRyaXgubGVuZ3RoKS5maWxsKDApLm1hcCgoXywgaikgPT4gKG1hdHJpeFtqXVtpXSkpKSk7XG59XG4vKipcbiAqIEFkZHMgdHdvIHZlY3RvcnMgd2l0aCB0aGUgc2Vjb25kIG9uZSB0byBiZSBtdWx0aXBsaWVkIGJ5IHRoZSBnaXZlbiByYXRpby5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcCBUaGUgZmlyc3QgdmVjdG9yIHRvIGFkZC5cbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yIHRvIGFkZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbXVsdGlwbGllcj0xXSBBIG11bHRpcGxpZXIgdG8gYmUgdXNlZCBiZWZvcmUgdGhlIHNlY29uZCB2ZWN0b3IgaXMgYWRkZWQuXG4gKiBAcmV0dXJuIHtWZWN0b3J9IE5ldyB2ZWN0b3IgY29udGFpbmVkIHRoZSByZXN1bHQgb2Ygb3BlcmF0aW9uIHArbXVsdGlwbGllcipxLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yQWRkKHAsIHEsIG11bHRpcGxpZXIgPSAxKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gcC5sZW5ndGg7XG4gICAgYXNzZXJ0KG5JdGVtcyA9PSBxLmxlbmd0aCwgJ1ZlY3RvciBsZW5ndGhzIGRvIG5vdCBtYXRjaC4nKTtcbiAgICBjb25zdCB0b3RhbCA9IG5ldyBWZWN0b3Iobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHAubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsW2ldID0gcFtpXSArIG11bHRpcGxpZXIgKiBxW2ldO1xuICAgIHJldHVybiB0b3RhbDtcbn1cbi8qKlxuICogU3VtcyB0aGUgdmVjdG9yJ3MgaXRlbXMuXG4gKlxuICogQHBhcmFtIHtWZWN0b3J9IHYgVGhlIHZlY3RvciB0byBiZSBzdW1tZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2ZWN0b3IncyBpdGVtcyBzdW0uXG4gKi9cbmZ1bmN0aW9uIGl0ZW1zU3VtKHYpIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7ICsraSlcbiAgICAgICAgdG90YWwgKz0gdltpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIFN1cWFyZXMgdGhlIHZlY3RvcidzIGl0ZW1zLlxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gc3F1YXJlLlxuICogQHJldHVybiB7VmVjdG9yfSBBIG5ldyB2ZWN0b3IgY29udGFpbmluZyB0aGUgb3JpZ2luYWwncyBpdGVtcyBzcXVhcmVkLlxuICovXG5mdW5jdGlvbiB2ZWN0b3JTcXVhcmUodikge1xuICAgIGNvbnN0IG5JdGVtcyA9IHYubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsID0gbmV3IFZlY3RvcihuSXRlbXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7ICsraSlcbiAgICAgICAgdG90YWxbaV0gPSB2W2ldICogdltpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yTGVuZ3RoKHYpIHtcbiAgICBsZXQgc3FyU3VtID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyBpKyspXG4gICAgICAgIHNxclN1bSArPSB2W2ldICogdltpXTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHNxclN1bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yRG90UHJvZHVjdCh2MSwgdjIpIHtcbiAgICBpZiAodjEubGVuZ3RoICE9IHYyLmxlbmd0aClcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBkaW1lbnNpb25hbGl0eSBvZiB0aGUgdmVjdG9ycyBtdXN0IG1hdGNoJyk7XG4gICAgbGV0IHByb2QgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdjEubGVuZ3RoOyBpKyspXG4gICAgICAgIHByb2QgKz0gdjFbaV0gKiB2MltpXTtcbiAgICByZXR1cm4gcHJvZDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG1hdHJpeCBmaWxsZWQgd2l0aCByYW5kb20gZmxvYXRpbmcgcG9pbnQgdmFsdWVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24xIFRoZSBmaXJzdCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24yIFRoZSBzZWNvbmQgZGltZW5zaW9uIG9mIHRoZSBtYXRyaXguXG4gKiBAcGFyYW0ge251bWJlcn0gW3NjYWxlPTEuXSBNYXggdmFsdWUgZ2l2ZW4gYnkgcmFuZG9tIGdlbmVyYXRvci5cbiAqIEByZXR1cm4ge01hdHJpeH0gQSBuZXcgbWF0cml4IGZpbGxlZCB3aXRoIHJhbmRvbSBmbG9hdGluZyBwb2ludCAgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsbFJhbmRvbU1hdHJpeChkaW1lbnNpb24xLCBkaW1lbnNpb24yLCBzY2FsZSA9IDEuKSB7XG4gICAgY29uc3QgbWF0cml4ID0gaW5pdENvb3JkaW5hdGVzKGRpbWVuc2lvbjEsIGRpbWVuc2lvbjIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGltZW5zaW9uMTsgKytpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGltZW5zaW9uMjsgKytqKVxuICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gcmFuZG9tRmxvYXQoc2NhbGUpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWN0b3JzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7VmVjdG9yfSBwIFRoZSBmaXJzdCB2ZWN0b3IuXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcSBUaGUgc2Vjb25kIHZlY3Rvci5cbiAqIEByZXR1cm4ge251bWJlcn0gRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdGhlIGdpdmVuIHZlY3RvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZShwLCBxKSB7XG4gICAgY29uc3QgZGlmZiA9IHZlY3RvckFkZChwLCBxLCAtMSk7XG4gICAgY29uc3Qgc3FkaWZmID0gdmVjdG9yU3F1YXJlKGRpZmYpO1xuICAgIGNvbnN0IHNxZGlmZlN1bW0gPSBpdGVtc1N1bShzcWRpZmYpO1xuICAgIHJldHVybiBNYXRoLnNxcnQoc3FkaWZmU3VtbSk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkaXN0YW5jZSBtYXRyaXggdXNpbmcgYSBjdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3JzfSBkYXRhIElucHV0IHZlY3RvcnMgdG8gY2FsY3VsYXRlIGRpc3RhbmNlcy5cbiAqIEBwYXJhbSB7RGlzdGFuY2VNZXRyaWN9IGRpc3RhbmNlIEN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge01hdHJpeH0gQ2FsY3VsYXRlZCBjdXN0b20gZGlzdGFuY2UgbWF0cml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY0Rpc3RhbmNlTWF0cml4KGRhdGEsIGRpc3RhbmNlKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgbWF0cml4ID0gaW5pdENvb3JkaW5hdGVzKG5JdGVtcywgbkl0ZW1zLCAwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5JdGVtczsgKytqKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gKGRhdGFbaV0gPT0gbnVsbCkgfHwgKGRhdGFbal0gPT0gbnVsbCkgPyAwIDogZGlzdGFuY2UoZGF0YVtpXSwgZGF0YVtqXSk7XG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbal1baV0gPSBkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKiogR2VuZXJhdGVzIGFycmF5IGZyb20gYSByYW5nZSBbYmVnaW47IGVuZF0gb3IgW2JlZ2luOyBlbmQpIGlmIGVuZEV4Y2x1c2l2ZS4gKiovXG5leHBvcnQgZnVuY3Rpb24gZ2VuUmFuZ2UoYmVnaW4sIGVuZCwgZW5kRXhjbHVzaXZlID0gZmFsc2UpIHtcbiAgICBjb25zdCBuSXRlbXMgPSBlbmQgLSBiZWdpbiArIChlbmRFeGNsdXNpdmUgPyAwIDogMSk7XG4gICAgY29uc3Qgc2VyaWVzID0gbmV3IEludDMyQXJyYXkobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKVxuICAgICAgICBzZXJpZXNbaV0gPSBiZWdpbiArIGk7XG4gICAgcmV0dXJuIHNlcmllcztcbn1cbi8qKlxuKiBSZXR1cm5zIG9yZGVyIG9mIHZhbHVlcyBhcyBpZiB0aGV5IGFyZSBzb3J0ZWQuXG4qXG4qIEBleHBvcnRcbiogQHBhcmFtIHthbnlbXX0gdmFsdWVzIElucHV0IGFycmF5LlxuKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXZlcnNlPWZhbHNlXSBXaGV0aGVyIHRvIHJldHVybiByZXZlcnNlZCBvcmRlci5cbiogQHJldHVybiB7bnVtYmVyW119IFRoZSBvcmRlciBjb21wdXRlZC5cbiovXG5leHBvcnQgZnVuY3Rpb24gYXJnU29ydCh2YWx1ZXMsIHJldmVyc2UgPSBmYWxzZSkge1xuICAgIGNvbnN0IHNvcnRmbiA9IHJldmVyc2UgPyAoYSwgYikgPT4gKGJbMF0gLSBhWzBdKSA6IChhLCBiKSA9PiAoYVswXSAtIGJbMF0pO1xuICAgIGNvbnN0IGRlY29yID0gKHYsIGkpID0+IFt2LCBpXTsgLy8gc2V0IGluZGV4IHRvIHZhbHVlXG4gICAgY29uc3QgdW5kZWNvciA9IChhKSA9PiBhWzFdOyAvLyBsZWF2ZSBvbmx5IGluZGV4XG4gICAgY29uc3QgX2FyZ3NvcnQgPSAoYXJyKSA9PiBhcnIubWFwKGRlY29yKS5zb3J0KHNvcnRmbikubWFwKHVuZGVjb3IpO1xuICAgIHJldHVybiBfYXJnc29ydCh2YWx1ZXMpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleGVzIG9mIHRoZSBtb3N0IGRpdmVyc2Ugb2JqZWN0cyBhY2NvcmRpbmcgdG8gdGhlIGRpc3QgZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdG90YWwgbnVtYmVyIG9mIG9iamVjdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIG51bWJlciBvZiBkaXZlcnNlIGVsZW1lbnRzIHRvIGZpbmRcbiAqIEBwYXJhbSB7KGkxOiBudW1iZXIsIGkyOiBudW1iZXIpID0+IG51bWJlcn0gZGlzdCBhIGZ1bmN0aW9uIHdoaWNoIGNhbGN1bGF0ZXMgZGlzdGFuY2UgYmV0d2VlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3byBvYmplY3RzIHVzaW5nIHRoZWlyIGluZGV4ZXNcbiAqIEByZXR1cm5zIHtudW1iZXJbXX0gVGhlIGluZGV4ZXMgb2YgdGhlIG1vc3QgZGl2ZXJzZSBvYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZlcnNlU3Vic2V0KGxlbmd0aCwgbiwgZGlzdCkge1xuICAgIGZ1bmN0aW9uIG1heEJ5KHZhbHVlcywgb3JkZXJCeSkge1xuICAgICAgICBsZXQgbWF4VmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgbWF4T3JkZXJCeSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgZWxlbWVudE9yZGVyQnkgPiBtYXhPcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1heE9yZGVyQnkgPSBlbGVtZW50T3JkZXJCeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHN1YnNldCA9IFtyYW5kb21JbnQobGVuZ3RoIC0gMSldO1xuICAgIGNvbnN0IGNvbXBsZW1lbnQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoIXN1YnNldC5pbmNsdWRlcyhpKSlcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICAgIH1cbiAgICB3aGlsZSAoc3Vic2V0Lmxlbmd0aCA8IG4pIHtcbiAgICAgICAgY29uc3QgaWR4ID0gbWF4QnkoY29tcGxlbWVudC52YWx1ZXMoKSwgKGkpID0+IE1hdGgubWluLmFwcGx5KE1hdGgsIHN1YnNldC5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXN0KGksIHZhbCk7XG4gICAgICAgIH0pKSk7XG4gICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgIHN1YnNldC5wdXNoKGlkeCk7XG4gICAgICAgICAgICBjb21wbGVtZW50LmRlbGV0ZShpZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWJzZXQ7XG59XG4vKipcbiAqIFJldHVybnMgbm9ybWFsaXplZCB2ZWN0b3JcbiAqIEBwYXJhbSB7VmVjdG9yfSBkYXRhIG51bWVyaWNhbCBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKGRhdGEpIHtcbiAgICBsZXQgbWVhbiA9IDA7XG4gICAgbGV0IHN0ZCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKVxuICAgICAgICBtZWFuICs9IGRhdGFbaV07XG4gICAgbWVhbiAvPSBkYXRhLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpXG4gICAgICAgIHN0ZCArPSAoZGF0YVtpXSAtIG1lYW4pICogKGRhdGFbaV0gLSBtZWFuKTtcbiAgICBzdGQgPSBNYXRoLnNxcnQoc3RkIC8gZGF0YS5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSlcbiAgICAgICAgZGF0YVtpXSA9IChkYXRhW2ldIC0gbWVhbikgLyBzdGQ7XG4gICAgcmV0dXJuIGRhdGE7XG59XG4vKipcbiAqIEZpbmRzIHNldCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGxpc3RzLlxuICogQHBhcmFtIHthbnlbXX0gYSBUaGUgZmlyc3QgbGlzdC5cbiAqIEBwYXJhbSB7YW55W119IGIgVGhlIHNlY29uZCBsaXN0LlxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREaWZmZXJlbmNlKGEsIGIpIHtcbiAgICBjb25zdCBiU2V0ID0gbmV3IFNldChiKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGEuZmlsdGVyKCh4KSA9PiAhYlNldC5oYXMoeCkpKS52YWx1ZXMoKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZqZEc5eUxXOXdaWEpoZEdsdmJuTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMlpXTjBiM0l0YjNCbGNtRjBhVzl1Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hQUVVGUExFVkJRVk1zVFVGQlRTeEZRVUYxUXl4TlFVRk5MSEZDUVVGeFFpeERRVUZETzBGQlEzcEdMRTlCUVU4c1JVRkJReXhYUVVGWExFVkJRVVVzVTBGQlV5eEZRVUZETEUxQlFVMHNWVUZCVlN4RFFVRkRPMEZCUldoRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1RVRkJUU3hEUVVGRExGbEJRWEZDTEV0QlFVc3NSVUZCUlN4VlFVRnJRaXhyUWtGQmEwSTdTVUZEY2tZc1NVRkJTU3hEUVVGRExGTkJRVk03VVVGRFdpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRemRDTEVOQlFVTTdRVUZGUkRzN096czdPenM3UjBGUlJ6dEJRVU5JTEZOQlFWTXNaVUZCWlN4RFFVRkRMRlZCUVd0Q0xFVkJRVVVzVlVGQmEwSXNSVUZCUlN4UFFVRmxMRU5CUVVNN1NVRkRMMFVzVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjZSaXhEUVVGRE8wRkJSVVE3T3pzN096czdSMEZQUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hsUVVGbExFTkJRVU1zVFVGQll6dEpRVU0xUXl4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEzWkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNSR0xFTkJRVU03UVVGRlJEczdPenM3T3pzN1IwRlJSenRCUVVOSUxFMUJRVTBzVlVGQlZTeFRRVUZUTEVOQlFVTXNRMEZCVXl4RlFVRkZMRU5CUVZNc1JVRkJSU3hoUVVGeFFpeERRVUZETzBsQlEzQkZMRTFCUVUwc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZGZUVJc1RVRkJUU3hEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRGhDUVVFNFFpeERRVUZETEVOQlFVTTdTVUZGTTBRc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkZha01zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUXk5Q0xFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVlVGQlZTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVWMFF5eFBRVUZQTEV0QlFVc3NRMEZCUXp0QlFVTm1MRU5CUVVNN1FVRkZSRHM3T3pzN1IwRkxSenRCUVVOSUxGTkJRVk1zVVVGQlVTeERRVUZETEVOQlFWTTdTVUZEZWtJc1NVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlJXUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRE8xRkJReTlDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRmFFSXNUMEZCVHl4TFFVRkxMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSVVE3T3pzN08wZEJTMGM3UVVGRFNDeFRRVUZUTEZsQlFWa3NRMEZCUXl4RFFVRlRPMGxCUXpkQ0xFMUJRVTBzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkRlRUlzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRmFrTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRE8xRkJReTlDTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSWHBDTEU5QlFVOHNTMEZCU3l4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFpRVUZaTEVOQlFVTXNRMEZCVXp0SlFVTndReXhKUVVGSkxFMUJRVTBzUjBGQlZ5eERRVUZETEVOQlFVTTdTVUZEZGtJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlZ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFGQlEzWkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM2hDTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU16UWl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxHZENRVUZuUWl4RFFVRkRMRVZCUVZVc1JVRkJSU3hGUVVGVk8wbEJRM0pFTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTFCUVUwc1NVRkJTU3hGUVVGRkxFTkJRVU1zVFVGQlRUdFJRVU40UWl4TlFVRk5MRXRCUVVzc1EwRkJReXc0UTBGQk9FTXNRMEZCUXl4RFFVRkRPMGxCUXpsRUxFbEJRVWtzU1VGQlNTeEhRVUZYTEVOQlFVTXNRMEZCUXp0SlFVTnlRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZYTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZEZUVNc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVFSXNUMEZCVHl4SlFVRkpMRU5CUVVNN1FVRkRaQ3hEUVVGRE8wRkJSVVE3T3pzN096czdPMGRCVVVjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzWjBKQlFXZENMRU5CUVVNc1ZVRkJhMElzUlVGQlJTeFZRVUZyUWl4RlFVRkZMRkZCUVdkQ0xFVkJRVVU3U1VGRGVrWXNUVUZCVFN4TlFVRk5MRWRCUVVjc1pVRkJaU3hEUVVGRExGVkJRVlVzUlVGQlJTeFZRVUZWTEVOQlFVTXNRMEZCUXp0SlFVVjJSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFGQlEyNURMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4VlFVRlZMRVZCUVVVc1JVRkJSU3hEUVVGRE8xbEJRMnBETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFhRVUZYTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1MwRkRja003U1VGRFJDeFBRVUZQTEUxQlFVMHNRMEZCUXp0QlFVTm9RaXhEUVVGRE8wRkJSVVE3T3pzN096czdSMEZQUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3d3UWtGQk1FSXNRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVenRKUVVNM1JDeE5RVUZOTEVsQlFVa3NSMEZCUnl4VFFVRlRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTJwRExFMUJRVTBzVFVGQlRTeEhRVUZITEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOc1F5eE5RVUZOTEZWQlFWVXNSMEZCUnl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGNFTXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzBGQlF5OUNMRU5CUVVNN1FVRkZSRHM3T3pzN096dEhRVTlITzBGQlEwZ3NUVUZCVFN4VlFVRlZMR3RDUVVGclFpeERRVUZETEVsQlFXRXNSVUZCUlN4UlFVRjNRanRKUVVONFJTeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wbEJRek5DTEUxQlFVMHNUVUZCVFN4SFFVRkhMR1ZCUVdVc1EwRkJReXhOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUld4RUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZETDBJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEYmtNc1RVRkJUU3hEUVVGRExFZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU14Uml4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTnFRenRMUVVOR08wbEJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTTdRVUZEYUVJc1EwRkJRenRCUVVWRUxHdEdRVUZyUmp0QlFVTnNSaXhOUVVGTkxGVkJRVlVzVVVGQlVTeERRVUZETEV0QlFXRXNSVUZCUlN4SFFVRlhMRVZCUVVVc1dVRkJXU3hIUVVGSExFdEJRVXM3U1VGRGRrVXNUVUZCVFN4TlFVRk5MRWRCUVVjc1IwRkJSeXhIUVVGSExFdEJRVXNzUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTndSQ3hOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVWMFF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXp0UlFVTTNRaXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVWNFFpeFBRVUZQTEUxQlFVMHNRMEZCUXp0QlFVTm9RaXhEUVVGRE8wRkJSVUU3T3pzN096czdSVUZQUlR0QlFVTklMRTFCUVUwc1ZVRkJWU3hQUVVGUExFTkJRVU1zVFVGQllTeEZRVUZGTEU5QlFVOHNSMEZCUnl4TFFVRkxPMGxCUTNCRUxFMUJRVTBzVFVGQlRTeEhRVUZITEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGUkxFVkJRVVVzUTBGQlVTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZSTEVWQlFVVXNRMEZCVVN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU4yUnl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVTBzUlVGQlJTeERRVUZUTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNjVUpCUVhGQ08wbEJRMnhGTEUxQlFVMHNUMEZCVHl4SFFVRkhMRU5CUVVNc1EwRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXh0UWtGQmJVSTdTVUZEZGtRc1RVRkJUU3hSUVVGUkxFZEJRVWNzUTBGQlF5eEhRVUZWTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0SlFVTXhSU3hQUVVGUExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTXhRaXhEUVVGRE8wRkJSVVE3T3pzN096czdSMEZQUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3huUWtGQlowSXNRMEZCUXl4TlFVRmpMRVZCUVVVc1EwRkJVeXhGUVVGRkxFbEJRWGRETzBsQlEyeEhMRk5CUVZNc1MwRkJTeXhEUVVGRExFMUJRV2RETEVWQlFVVXNUMEZCT0VJN1VVRkROMFVzU1VGQlNTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNCQ0xFbEJRVWtzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVVjBRaXhMUVVGTExFMUJRVTBzVDBGQlR5eEpRVUZKTEUxQlFVMHNSVUZCUlR0WlFVTTFRaXhOUVVGTkxHTkJRV01zUjBGQlJ5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRlRU1zU1VGQlNTeFZRVUZWTEVsQlFVa3NTVUZCU1N4SlFVRkpMR05CUVdNc1IwRkJSeXhWUVVGVkxFVkJRVVU3WjBKQlEzSkVMRkZCUVZFc1IwRkJSeXhQUVVGUExFTkJRVU03WjBKQlEyNUNMRlZCUVZVc1IwRkJSeXhqUVVGakxFTkJRVU03WVVGRE4wSTdVMEZEUmp0UlFVTkVMRTlCUVU4c1VVRkJVU3hEUVVGRE8wbEJRMnhDTEVOQlFVTTdTVUZGUkN4TlFVRk5MRTFCUVUwc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOMlF5eE5RVUZOTEZWQlFWVXNSMEZCUnl4SlFVRkpMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJSVGRDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRMMElzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM0pDTEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGNrSTdTVUZGUkN4UFFVRlBMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzFGQlEzaENMRTFCUVUwc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGRFppeFZRVUZWTEVOQlFVTXNUVUZCVFN4RlFVRTRRaXhGUVVNdlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zVlVGQlV5eEhRVUZITEVWQlFVVXNTMEZCU3p0WlFVTjRSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRkRUlzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTFBc1NVRkJTU3hIUVVGSExFVkJRVVU3V1VGRFVDeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnBDTEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGVFSTdTMEZEUmp0SlFVTkVMRTlCUVU4c1RVRkJUU3hEUVVGRE8wRkJRMmhDTEVOQlFVTTdRVUZGUkRzN08wZEJSMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNVMEZCVXl4RFFVRkRMRWxCUVZrN1NVRkRjRU1zU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJJc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlJWb3NTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRE8xRkJRMnhETEVsQlFVa3NTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRmJFSXNTVUZCU1N4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRmNFSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRE8xRkJRMnhETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVVTNReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBsQlJXNURMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVVVzUTBGQlF6dFJRVU5zUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzBsQlJXNURMRTlCUVU4c1NVRkJTU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFT3pzN096dEhRVXRITzBGQlEwZ3NUVUZCVFN4VlFVRlZMR0ZCUVdFc1EwRkJReXhEUVVGUkxFVkJRVVVzUTBGQlVUdEpRVU01UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjRRaXhQUVVGUExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eERRVUZETzBGQlEzSkZMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2UwMWhkSEpwZUN3Z1ZtVmpkRzl5TENCRGIyOXlaR2x1WVhSbGN5d2dWbVZqZEc5eWN5d2dSR2x6ZEdGdVkyVk5aWFJ5YVdOOUlHWnliMjBnSnk0dmRIbHdaUzFrWldOc1lYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdHlZVzVrYjIxR2JHOWhkQ3dnY21GdVpHOXRTVzUwZlNCbWNtOXRJQ2N1TDNKaGJtUnZiU2M3WEc1Y2JpOHFLbHh1SUNvZ1FYTnpaWEowY3lCaElHTnZibVJwZEdsdmJpQmllU0IwYUhKdmQybHVaeUJoYmlCRmNuSnZjaTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUZ0amIyNWthWFJwYjI0OVptRnNjMlZkSUVOdmJtUnBkR2x2YmlCMGJ5QmhjM05sY25RdVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdXMjFsYzNOaFoyVTlKMEZ6YzJWeWRHbHZiaUJsY25KdmNpNG5YU0JOWlhOellXZGxJSFJ2SUc5MWRIQjFkQzVjYmlBcUlFQjBhSEp2ZDNNZ2UwVnljbTl5ZlZ4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZWE56WlhKMEtHTnZibVJwZEdsdmJqb2dZbTl2YkdWaGJpQTlJR1poYkhObExDQnRaWE56WVdkbE9pQnpkSEpwYm1jZ1BTQW5RWE56WlhKMGFXOXVJR1Z5Y205eUxpY3BJSHRjYmlBZ2FXWWdLQ0ZqYjI1a2FYUnBiMjRwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHMWxjM05oWjJVcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nYm1WM0lIUjNieTFrYVcxbGJuTnBiMjVoYkNCaGNuSmhlU0JoYm1RZ1ptbHNiSE1nYVhRZ2QybDBhQ0IwYUdVZ2RtRnNkV1VnWjJsMlpXNHVYRzRnS2x4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHUnBiV1Z1YzJsdmJqRWdWR2hsSUdacGNuTjBJR1JwYldWdWMybHZiaUJ2WmlCMGFHVWdZMjl2Y21ScGJtRjBaWE1nS0c1MWJXSmxjaUJ2WmlCeWIzZHpLUzVjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCa2FXMWxibk5wYjI0eUlGUm9aU0J6WldOdmJtUWdaR2x0Wlc1emFXOXVJRzltSUhSb1pTQmpiMjl5WkdsdVlYUmxjeUFvYm5WdFltVnlJRzltSUdOdmJIVnRibk1wTGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdG1hV3hzUFRCZElFRWdkbUZzZFdVZ2RHOGdabWxzYkNCMGFHVWdZMjl2Y21ScGJtRjBaWE1nZDJsMGFDNWNiaUFxSUVCeVpYUjFjbTRnZTBOdmIzSmthVzVoZEdWemZTQkJJSFIzYnkxa2FXMWxibk5wYjI1aGJDQm1hV3hzWldRZ2QybDBhQ0IwYUdVZ2RtRnNkV1VnWjJsMlpXNHVYRzRnS2lCQWRHOWtieUJOYVdkb2RDQmlaU0J6Ykc5M0lITnBibU5sSUhWelpXUWdRWEp5WVhrdWJXRndMaUJRY205aVlXSnNlU0J1WldWa2N5QndaWEptYjNKdFlXNWpaU0J5WlhacGMybHZiaTVjYmlBcUwxeHVablZ1WTNScGIyNGdhVzVwZEVOdmIzSmthVzVoZEdWektHUnBiV1Z1YzJsdmJqRTZJRzUxYldKbGNpd2daR2x0Wlc1emFXOXVNam9nYm5WdFltVnlMQ0JtYVd4c09pQnVkVzFpWlhJZ1BTQXdLVG9nUTI5dmNtUnBibUYwWlhNZ2UxeHVJQ0J5WlhSMWNtNGdibVYzSUVGeWNtRjVLR1JwYldWdWMybHZiakVwTG1acGJHd29abWxzYkNrdWJXRndLQ2dwSUQwK0lDaHVaWGNnVm1WamRHOXlLR1JwYldWdWMybHZiaklwTG1acGJHd29abWxzYkNrcEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCVWNtRnVjM0J2YzJVZ2JXRjBjbWw0TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN1RXRjBjbWw0ZlNCdFlYUnlhWGdnVkdobElHMWhkSEpwZUNCMGJ5QmlaU0IwY21GdWMzQnZjMlZrTGx4dUlDb2dRSEpsZEhWeWJpQjdUV0YwY21sNGZTQlVjbUZ1YzNCdmMyVmtJRzFoZEhKcGVDNWNiaUFxSUVCMGIyUnZJRTFwWjJoMElHSmxJSE5zYjNjZ2MybHVZMlVnZFhObFpDQkJjbkpoZVM1dFlYQXVJRkJ5YjJKaFlteDVJRzVsWldSeklIQmxjbVp2Y20xaGJtTmxJSEpsZG1semFXOXVMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2RISmhibk53YjNObFRXRjBjbWw0S0cxaGRISnBlRG9nVFdGMGNtbDRLVG9nVFdGMGNtbDRJSHRjYmlBZ2NtVjBkWEp1SUc1bGR5QkJjbkpoZVNodFlYUnlhWGhiTUYwdWJHVnVaM1JvS1M1bWFXeHNLREFwWEc0Z0lDQWdMbTFoY0Nnb1h5d2dhU2tnUFQ0Z0tHNWxkeUJXWldOMGIzSW9iV0YwY21sNExteGxibWQwYUNrdVptbHNiQ2d3S1M1dFlYQW9LRjhzSUdvcElEMCtJQ2h0WVhSeWFYaGJhbDFiYVYwcEtTa3BPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFRmtaSE1nZEhkdklIWmxZM1J2Y25NZ2QybDBhQ0IwYUdVZ2MyVmpiMjVrSUc5dVpTQjBieUJpWlNCdGRXeDBhWEJzYVdWa0lHSjVJSFJvWlNCbmFYWmxiaUJ5WVhScGJ5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBY0dGeVlXMGdlMVpsWTNSdmNuMGdjQ0JVYUdVZ1ptbHljM1FnZG1WamRHOXlJSFJ2SUdGa1pDNWNiaUFxSUVCd1lYSmhiU0I3Vm1WamRHOXlmU0J4SUZSb1pTQnpaV052Ym1RZ2RtVmpkRzl5SUhSdklHRmtaQzVjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCYmJYVnNkR2x3YkdsbGNqMHhYU0JCSUcxMWJIUnBjR3hwWlhJZ2RHOGdZbVVnZFhObFpDQmlaV1p2Y21VZ2RHaGxJSE5sWTI5dVpDQjJaV04wYjNJZ2FYTWdZV1JrWldRdVhHNGdLaUJBY21WMGRYSnVJSHRXWldOMGIzSjlJRTVsZHlCMlpXTjBiM0lnWTI5dWRHRnBibVZrSUhSb1pTQnlaWE4xYkhRZ2IyWWdiM0JsY21GMGFXOXVJSEFyYlhWc2RHbHdiR2xsY2lweExseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnZG1WamRHOXlRV1JrS0hBNklGWmxZM1J2Y2l3Z2NUb2dWbVZqZEc5eUxDQnRkV3gwYVhCc2FXVnlPaUJ1ZFcxaVpYSWdQU0F4S1RvZ1ZtVmpkRzl5SUh0Y2JpQWdZMjl1YzNRZ2JrbDBaVzF6SUQwZ2NDNXNaVzVuZEdnN1hHNWNiaUFnWVhOelpYSjBLRzVKZEdWdGN5QTlQU0J4TG14bGJtZDBhQ3dnSjFabFkzUnZjaUJzWlc1bmRHaHpJR1J2SUc1dmRDQnRZWFJqYUM0bktUdGNibHh1SUNCamIyNXpkQ0IwYjNSaGJDQTlJRzVsZHlCV1pXTjBiM0lvYmtsMFpXMXpLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSEF1YkdWdVozUm9PeUFySzJrcFhHNGdJQ0FnZEc5MFlXeGJhVjBnUFNCd1cybGRJQ3NnYlhWc2RHbHdiR2xsY2lBcUlIRmJhVjA3WEc1Y2JpQWdjbVYwZFhKdUlIUnZkR0ZzTzF4dWZWeHVYRzR2S2lwY2JpQXFJRk4xYlhNZ2RHaGxJSFpsWTNSdmNpZHpJR2wwWlcxekxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1ZtVmpkRzl5ZlNCMklGUm9aU0IyWldOMGIzSWdkRzhnWW1VZ2MzVnRiV1ZrTGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQlVhR1VnZG1WamRHOXlKM01nYVhSbGJYTWdjM1Z0TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJwZEdWdGMxTjFiU2gyT2lCV1pXTjBiM0lwT2lCdWRXMWlaWElnZTF4dUlDQnNaWFFnZEc5MFlXd2dQU0F3TzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZGk1c1pXNW5kR2c3SUNzcmFTbGNiaUFnSUNCMGIzUmhiQ0FyUFNCMlcybGRPMXh1WEc0Z0lISmxkSFZ5YmlCMGIzUmhiRHRjYm4xY2JseHVMeW9xWEc0Z0tpQlRkWEZoY21WeklIUm9aU0IyWldOMGIzSW5jeUJwZEdWdGN5NWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UxWmxZM1J2Y24wZ2RpQlVhR1VnZG1WamRHOXlJSFJ2SUhOeGRXRnlaUzVjYmlBcUlFQnlaWFIxY200Z2UxWmxZM1J2Y24wZ1FTQnVaWGNnZG1WamRHOXlJR052Ym5SaGFXNXBibWNnZEdobElHOXlhV2RwYm1Gc0ozTWdhWFJsYlhNZ2MzRjFZWEpsWkM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnZG1WamRHOXlVM0YxWVhKbEtIWTZJRlpsWTNSdmNpazZJRlpsWTNSdmNpQjdYRzRnSUdOdmJuTjBJRzVKZEdWdGN5QTlJSFl1YkdWdVozUm9PMXh1SUNCamIyNXpkQ0IwYjNSaGJDQTlJRzVsZHlCV1pXTjBiM0lvYmtsMFpXMXpLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFl1YkdWdVozUm9PeUFySzJrcFhHNGdJQ0FnZEc5MFlXeGJhVjBnUFNCMlcybGRJQ29nZGx0cFhUdGNibHh1SUNCeVpYUjFjbTRnZEc5MFlXdzdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMlpXTjBiM0pNWlc1bmRHZ29kam9nVm1WamRHOXlLVG9nYm5WdFltVnlJSHRjYmlBZ2JHVjBJSE54Y2xOMWJUb2diblZ0WW1WeUlEMGdNRHRjYmlBZ1ptOXlJQ2hzWlhRZ2FUb2diblZ0WW1WeUlEMGdNRHNnYVNBOElIWXViR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdjM0Z5VTNWdElDczlJSFpiYVYwZ0tpQjJXMmxkTzF4dUlDQnlaWFIxY200Z1RXRjBhQzV6Y1hKMEtITnhjbE4xYlNrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIyWldOMGIzSkViM1JRY205a2RXTjBLSFl4T2lCV1pXTjBiM0lzSUhZeU9pQldaV04wYjNJcE9pQnVkVzFpWlhJZ2UxeHVJQ0JwWmlBb2RqRXViR1Z1WjNSb0lDRTlJSFl5TG14bGJtZDBhQ2xjYmlBZ0lDQjBhSEp2ZHlCRmNuSnZjaWduVkdobElHUnBiV1Z1YzJsdmJtRnNhWFI1SUc5bUlIUm9aU0IyWldOMGIzSnpJRzExYzNRZ2JXRjBZMmduS1R0Y2JpQWdiR1YwSUhCeWIyUTZJRzUxYldKbGNpQTlJREE3WEc0Z0lHWnZjaUFvYkdWMElHazZJRzUxYldKbGNpQTlJREE3SUdrZ1BDQjJNUzVzWlc1bmRHZzdJR2tyS3lsY2JpQWdJQ0J3Y205a0lDczlJSFl4VzJsZElDb2dkakpiYVYwN1hHNGdJSEpsZEhWeWJpQndjbTlrTzF4dWZWeHVYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZU0J0WVhSeWFYZ2dabWxzYkdWa0lIZHBkR2dnY21GdVpHOXRJR1pzYjJGMGFXNW5JSEJ2YVc1MElIWmhiSFZsY3k1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1pHbHRaVzV6YVc5dU1TQlVhR1VnWm1seWMzUWdaR2x0Wlc1emFXOXVJRzltSUhSb1pTQnRZWFJ5YVhndVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdaR2x0Wlc1emFXOXVNaUJVYUdVZ2MyVmpiMjVrSUdScGJXVnVjMmx2YmlCdlppQjBhR1VnYldGMGNtbDRMbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUZ0elkyRnNaVDB4TGwwZ1RXRjRJSFpoYkhWbElHZHBkbVZ1SUdKNUlISmhibVJ2YlNCblpXNWxjbUYwYjNJdVhHNGdLaUJBY21WMGRYSnVJSHROWVhSeWFYaDlJRUVnYm1WM0lHMWhkSEpwZUNCbWFXeHNaV1FnZDJsMGFDQnlZVzVrYjIwZ1pteHZZWFJwYm1jZ2NHOXBiblFnSUhaaGJIVmxjeTVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHWnBiR3hTWVc1a2IyMU5ZWFJ5YVhnb1pHbHRaVzV6YVc5dU1Ub2diblZ0WW1WeUxDQmthVzFsYm5OcGIyNHlPaUJ1ZFcxaVpYSXNJSE5qWVd4bE9pQnVkVzFpWlhJZ1BTQXhMaWs2SUUxaGRISnBlQ0I3WEc0Z0lHTnZibk4wSUcxaGRISnBlQ0E5SUdsdWFYUkRiMjl5WkdsdVlYUmxjeWhrYVcxbGJuTnBiMjR4TENCa2FXMWxibk5wYjI0eUtUdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHUnBiV1Z1YzJsdmJqRTdJQ3NyYVNrZ2UxeHVJQ0FnSUdadmNpQW9iR1YwSUdvZ1BTQXdPeUJxSUR3Z1pHbHRaVzV6YVc5dU1qc2dLeXRxS1Z4dUlDQWdJQ0FnYldGMGNtbDRXMmxkVzJwZElEMGdjbUZ1Wkc5dFJteHZZWFFvYzJOaGJHVXBPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnRZWFJ5YVhnN1hHNTlYRzVjYmk4cUtseHVJQ29nUTJGc1kzVnNZWFJsY3lCRmRXTnNhV1JsWVc0Z1pHbHpkR0Z1WTJVZ1ltVjBkMlZsYmlCMGQyOGdkbVZqZEc5eWN5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBY0dGeVlXMGdlMVpsWTNSdmNuMGdjQ0JVYUdVZ1ptbHljM1FnZG1WamRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0o5SUhFZ1ZHaGxJSE5sWTI5dVpDQjJaV04wYjNJdVhHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJRVYxWTJ4cFpHVmhiaUJrYVhOMFlXNWpaU0JpWlhSM1pXVnVJSFJvWlNCbmFYWmxiaUIyWldOMGIzSnpMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRnNZM1ZzWVhSbFJYVmpiR2xrWldGdVJHbHpkR0Z1WTJVb2NEb2dWbVZqZEc5eUxDQnhPaUJXWldOMGIzSXBPaUJ1ZFcxaVpYSWdlMXh1SUNCamIyNXpkQ0JrYVdabUlEMGdkbVZqZEc5eVFXUmtLSEFzSUhFc0lDMHhLVHRjYmlBZ1kyOXVjM1FnYzNGa2FXWm1JRDBnZG1WamRHOXlVM0YxWVhKbEtHUnBabVlwTzF4dUlDQmpiMjV6ZENCemNXUnBabVpUZFcxdElEMGdhWFJsYlhOVGRXMG9jM0ZrYVdabUtUdGNiaUFnY21WMGRYSnVJRTFoZEdndWMzRnlkQ2h6Y1dScFptWlRkVzF0S1R0Y2JuMWNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0VnWkdsemRHRnVZMlVnYldGMGNtbDRJSFZ6YVc1bklHRWdZM1Z6ZEc5dElHUnBjM1JoYm1ObElHWjFibU4wYVc5dUxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdWbVZqZEc5eWMzMGdaR0YwWVNCSmJuQjFkQ0IyWldOMGIzSnpJSFJ2SUdOaGJHTjFiR0YwWlNCa2FYTjBZVzVqWlhNdVhHNGdLaUJBY0dGeVlXMGdlMFJwYzNSaGJtTmxUV1YwY21samZTQmthWE4wWVc1alpTQkRkWE4wYjIwZ1pHbHpkR0Z1WTJVZ1puVnVZM1JwYjI0dVhHNGdLaUJBY21WMGRYSnVJSHROWVhSeWFYaDlJRU5oYkdOMWJHRjBaV1FnWTNWemRHOXRJR1JwYzNSaGJtTmxJRzFoZEhKcGVDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdOaGJHTkVhWE4wWVc1alpVMWhkSEpwZUNoa1lYUmhPaUJXWldOMGIzSnpMQ0JrYVhOMFlXNWpaVG9nUkdsemRHRnVZMlZOWlhSeWFXTXBPaUJOWVhSeWFYZ2dlMXh1SUNCamIyNXpkQ0J1U1hSbGJYTWdQU0JrWVhSaExteGxibWQwYUR0Y2JpQWdZMjl1YzNRZ2JXRjBjbWw0SUQwZ2FXNXBkRU52YjNKa2FXNWhkR1Z6S0c1SmRHVnRjeXdnYmtsMFpXMXpMQ0F3S1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc1SmRHVnRjenNnS3l0cEtTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJR2tnS3lBeE95QnFJRHdnYmtsMFpXMXpPeUFySzJvcElIdGNiaUFnSUNBZ0lHTnZibk4wSUdRNklHNTFiV0psY2lBOUlDaGtZWFJoVzJsZElEMDlJRzUxYkd3cElIeDhJQ2hrWVhSaFcycGRJRDA5SUc1MWJHd3BJRDhnTUNBNklHUnBjM1JoYm1ObEtHUmhkR0ZiYVYwc0lHUmhkR0ZiYWwwcE8xeHVJQ0FnSUNBZ2JXRjBjbWw0VzJsZFcycGRJRDBnYldGMGNtbDRXMnBkVzJsZElEMGdaRHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHMWhkSEpwZUR0Y2JuMWNibHh1THlvcUlFZGxibVZ5WVhSbGN5QmhjbkpoZVNCbWNtOXRJR0VnY21GdVoyVWdXMkpsWjJsdU95QmxibVJkSUc5eUlGdGlaV2RwYmpzZ1pXNWtLU0JwWmlCbGJtUkZlR05zZFhOcGRtVXVJQ29xTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGJsSmhibWRsS0dKbFoybHVPaUJ1ZFcxaVpYSXNJR1Z1WkRvZ2JuVnRZbVZ5TENCbGJtUkZlR05zZFhOcGRtVWdQU0JtWVd4elpTazZJRWx1ZERNeVFYSnlZWGtnZTF4dUlDQmpiMjV6ZENCdVNYUmxiWE1nUFNCbGJtUWdMU0JpWldkcGJpQXJJQ2hsYm1SRmVHTnNkWE5wZG1VZ1B5QXdJRG9nTVNrN1hHNGdJR052Ym5OMElITmxjbWxsY3lBOUlHNWxkeUJKYm5Rek1rRnljbUY1S0c1SmRHVnRjeWs3WEc1Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J1U1hSbGJYTTdJQ3NyYVNsY2JpQWdJQ0J6WlhKcFpYTmJhVjBnUFNCaVpXZHBiaUFySUdrN1hHNWNiaUFnY21WMGRYSnVJSE5sY21sbGN6dGNibjFjYmx4dUlDOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCdmNtUmxjaUJ2WmlCMllXeDFaWE1nWVhNZ2FXWWdkR2hsZVNCaGNtVWdjMjl5ZEdWa0xseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdZVzU1VzExOUlIWmhiSFZsY3lCSmJuQjFkQ0JoY25KaGVTNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnVzNKbGRtVnljMlU5Wm1Gc2MyVmRJRmRvWlhSb1pYSWdkRzhnY21WMGRYSnVJSEpsZG1WeWMyVmtJRzl5WkdWeUxseHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlXMTE5SUZSb1pTQnZjbVJsY2lCamIyMXdkWFJsWkM1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0Z5WjFOdmNuUW9kbUZzZFdWek9pQmhibmxiWFN3Z2NtVjJaWEp6WlNBOUlHWmhiSE5sS1RvZ2JuVnRZbVZ5VzEwZ2UxeHVJQ0JqYjI1emRDQnpiM0owWm00Z1BTQnlaWFpsY25ObElEOGdLR0U2SUdGdWVWdGRMQ0JpT2lCaGJubGJYU2tnUFQ0Z0tHSmJNRjBnTFNCaFd6QmRLU0E2SUNoaE9pQmhibmxiWFN3Z1lqb2dZVzU1VzEwcElEMCtJQ2hoV3pCZElDMGdZbHN3WFNrN1hHNGdJR052Ym5OMElHUmxZMjl5SUQwZ0tIWTZJR0Z1ZVN3Z2FUb2diblZ0WW1WeUtTQTlQaUJiZGl3Z2FWMDdJQzh2SUhObGRDQnBibVJsZUNCMGJ5QjJZV3gxWlZ4dUlDQmpiMjV6ZENCMWJtUmxZMjl5SUQwZ0tHRTZJR0Z1ZVZ0ZEtTQTlQaUJoV3pGZE95QXZMeUJzWldGMlpTQnZibXg1SUdsdVpHVjRYRzRnSUdOdmJuTjBJRjloY21kemIzSjBJRDBnS0dGeWNqb2dZVzU1VzEwcElEMCtJR0Z5Y2k1dFlYQW9aR1ZqYjNJcExuTnZjblFvYzI5eWRHWnVLUzV0WVhBb2RXNWtaV052Y2lrN1hHNGdJSEpsZEhWeWJpQmZZWEpuYzI5eWRDaDJZV3gxWlhNcE8xeHVmVnh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZEdobElHbHVaR1Y0WlhNZ2IyWWdkR2hsSUcxdmMzUWdaR2wyWlhKelpTQnZZbXBsWTNSeklHRmpZMjl5WkdsdVp5QjBieUIwYUdVZ1pHbHpkQ0JtZFc1amRHbHZibHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUd4bGJtZDBhQ0IwYjNSaGJDQnVkVzFpWlhJZ2IyWWdiMkpxWldOMGMxeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRzRnYm5WdFltVnlJRzltSUdScGRtVnljMlVnWld4bGJXVnVkSE1nZEc4Z1ptbHVaRnh1SUNvZ1FIQmhjbUZ0SUhzb2FURTZJRzUxYldKbGNpd2dhVEk2SUc1MWJXSmxjaWtnUFQ0Z2JuVnRZbVZ5ZlNCa2FYTjBJR0VnWm5WdVkzUnBiMjRnZDJocFkyZ2dZMkZzWTNWc1lYUmxjeUJrYVhOMFlXNWpaU0JpWlhSM1pXVnVYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkSGR2SUc5aWFtVmpkSE1nZFhOcGJtY2dkR2hsYVhJZ2FXNWtaWGhsYzF4dUlDb2dRSEpsZEhWeWJuTWdlMjUxYldKbGNsdGRmU0JVYUdVZ2FXNWtaWGhsY3lCdlppQjBhR1VnYlc5emRDQmthWFpsY25ObElHOWlhbVZqZEhOY2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2RsZEVScGRtVnljMlZUZFdKelpYUW9iR1Z1WjNSb09pQnVkVzFpWlhJc0lHNDZJRzUxYldKbGNpd2daR2x6ZERvZ0tHa3hPaUJ1ZFcxaVpYSXNJR2t5T2lCdWRXMWlaWElwSUQwK0lHNTFiV0psY2lrNklHNTFiV0psY2x0ZElIdGNiaUFnWm5WdVkzUnBiMjRnYldGNFFua29kbUZzZFdWek9pQkpkR1Z5WVdKc1pVbDBaWEpoZEc5eVBHNTFiV0psY2o0c0lHOXlaR1Z5UW5rNklDaHBPaUJ1ZFcxaVpYSXBJRDArSUc1MWJXSmxjaWtnZTF4dUlDQWdJR3hsZENCdFlYaFdZV3gxWlNBOUlHNTFiR3c3WEc0Z0lDQWdiR1YwSUcxaGVFOXlaR1Z5UW5rZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnWm05eUlDaGpiMjV6ZENCbGJHVnRaVzUwSUc5bUlIWmhiSFZsY3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWld4bGJXVnVkRTl5WkdWeVFua2dQU0J2Y21SbGNrSjVLR1ZzWlcxbGJuUXBPMXh1SUNBZ0lDQWdhV1lnS0cxaGVFOXlaR1Z5UW5rZ1BUMGdiblZzYkNCOGZDQmxiR1Z0Wlc1MFQzSmtaWEpDZVNBK0lHMWhlRTl5WkdWeVFua3BJSHRjYmlBZ0lDQWdJQ0FnYldGNFZtRnNkV1VnUFNCbGJHVnRaVzUwTzF4dUlDQWdJQ0FnSUNCdFlYaFBjbVJsY2tKNUlEMGdaV3hsYldWdWRFOXlaR1Z5UW5rN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnRZWGhXWVd4MVpUdGNiaUFnZlZ4dVhHNGdJR052Ym5OMElITjFZbk5sZENBOUlGdHlZVzVrYjIxSmJuUW9iR1Z1WjNSb0lDMGdNU2xkTzF4dUlDQmpiMjV6ZENCamIyMXdiR1Z0Wlc1MElEMGdibVYzSUZObGRDZ3BPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2diR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0JwWmlBb0lYTjFZbk5sZEM1cGJtTnNkV1JsY3locEtTbGNiaUFnSUNBZ0lHTnZiWEJzWlcxbGJuUXVZV1JrS0drcE8xeHVJQ0I5WEc1Y2JpQWdkMmhwYkdVZ0tITjFZbk5sZEM1c1pXNW5kR2dnUENCdUtTQjdYRzRnSUNBZ1kyOXVjM1FnYVdSNElEMGdiV0Y0UW5rb1hHNGdJQ0FnSUNCamIyMXdiR1Z0Wlc1MExuWmhiSFZsY3lncElHRnpJRWwwWlhKaFlteGxTWFJsY21GMGIzSThiblZ0WW1WeVBpeGNiaUFnSUNBZ0lDaHBLU0E5UGlCTllYUm9MbTFwYmk1aGNIQnNlU2hOWVhSb0xDQnpkV0p6WlhRdWJXRndLR1oxYm1OMGFXOXVLSFpoYkN3Z2FXNWtaWGdwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdScGMzUW9hU3dnZG1Gc0tUdGNiaUFnSUNBZ0lIMHBLU2s3WEc0Z0lDQWdhV1lnS0dsa2VDa2dlMXh1SUNBZ0lDQWdjM1ZpYzJWMExuQjFjMmdvYVdSNEtUdGNiaUFnSUNBZ0lHTnZiWEJzWlcxbGJuUXVaR1ZzWlhSbEtHbGtlQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnpkV0p6WlhRN1hHNTlYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJ1YjNKdFlXeHBlbVZrSUhabFkzUnZjbHh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0o5SUdSaGRHRWdiblZ0WlhKcFkyRnNJR0Z5Y21GNVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNKdFlXeHBlbVVvWkdGMFlUb2dWbVZqZEc5eUtUb2dWbVZqZEc5eUlIdGNiaUFnYkdWMElHMWxZVzRnUFNBd08xeHVJQ0JzWlhRZ2MzUmtJRDBnTUR0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdSaGRHRXViR1Z1WjNSb095QXJLMmtwWEc0Z0lDQWdiV1ZoYmlBclBTQmtZWFJoVzJsZE8xeHVYRzRnSUcxbFlXNGdMejBnWkdGMFlTNXNaVzVuZEdnN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCa1lYUmhMbXhsYm1kMGFEc2dLeXRwS1Z4dUlDQWdJSE4wWkNBclBTQW9aR0YwWVZ0cFhTQXRJRzFsWVc0cElDb2dLR1JoZEdGYmFWMGdMU0J0WldGdUtUdGNibHh1SUNCemRHUWdQU0JOWVhSb0xuTnhjblFvYzNSa0lDOGdaR0YwWVM1c1pXNW5kR2dwTzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWkdGMFlTNXNaVzVuZEdnN0lDc3JhU2xjYmlBZ0lDQmtZWFJoVzJsZElEMGdLR1JoZEdGYmFWMGdMU0J0WldGdUtTQXZJSE4wWkR0Y2JseHVJQ0J5WlhSMWNtNGdaR0YwWVR0Y2JuMWNibHh1THlvcVhHNGdLaUJHYVc1a2N5QnpaWFFnWkdsbVptVnlaVzVqWlNCaVpYUjNaV1Z1SUhSM2J5QnNhWE4wY3k1Y2JpQXFJRUJ3WVhKaGJTQjdZVzU1VzExOUlHRWdWR2hsSUdacGNuTjBJR3hwYzNRdVhHNGdLaUJBY0dGeVlXMGdlMkZ1ZVZ0ZGZTQmlJRlJvWlNCelpXTnZibVFnYkdsemRDNWNiaUFxSUVCeVpYUjFjbTRnZTJGdWVWdGRmVnh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2MyVjBSR2xtWm1WeVpXNWpaU2hoT2lCaGJubGJYU3dnWWpvZ1lXNTVXMTBwT2lCaGJubGJYU0I3WEc0Z0lHTnZibk4wSUdKVFpYUWdQU0J1WlhjZ1UyVjBLR0lwTzF4dUlDQnlaWFIxY200Z1FYSnlZWGt1Wm5KdmJTaHVaWGNnVTJWMEtHRXVabWxzZEdWeUtDaDRLU0E5UGlBaFlsTmxkQzVvWVhNb2VDa3BLUzUyWVd4MVpYTW9LU2s3WEc1OVhHNGlYWDA9IiwiY2xhc3MgQ2VsbCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBhcmVudEkgPSAwO1xuICAgICAgICB0aGlzLnBhcmVudEogPSAwO1xuICAgIH1cbn1cbjtcbmV4cG9ydCBjbGFzcyBBbGlnbmVkIHtcbiAgICBjb25zdHJ1Y3RvcihzZXExXywgc2VxMl8sIHNjb3JlXykge1xuICAgICAgICB0aGlzLnNlcTEgPSBzZXExXztcbiAgICAgICAgdGhpcy5zZXEyID0gc2VxMl87XG4gICAgICAgIHRoaXMuc2NvcmUgPSBzY29yZV87XG4gICAgfVxufVxuO1xuZXhwb3J0IGNsYXNzIFNlcXVlbmNlQWxpZ25tZW50IHtcbiAgICBjb25zdHJ1Y3RvcihzZXExXywgc2VxMl8sIGdhcF8sIGFsaWduR3JpZF8gPSBcIlwiKSB7XG4gICAgICAgIHRoaXMuc2VxMSA9ICcnO1xuICAgICAgICB0aGlzLnNlcTIgPSAnJztcbiAgICAgICAgdGhpcy5nYXAgPSAxO1xuICAgICAgICB0aGlzLmxlbjEgPSAwO1xuICAgICAgICB0aGlzLmxlbjIgPSAwO1xuICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICB0aGlzLmFsaWduR3JpZCA9IFtdO1xuICAgICAgICB0aGlzLnNjb3JlcyA9IFtdO1xuICAgICAgICB0aGlzLmRwR3JpZCA9IFtdO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0ge307XG4gICAgICAgIHRoaXMuQkxPU1VNNDUgPSBbWzUsIC0yLCAtMSwgLTIsIC0xLCAtMSwgLTEsIDAsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0xLCAxLCAwLCAtMiwgLTIsIDAsIC0xLCAtMSwgMCwgLTVdLFxuICAgICAgICAgICAgWy0yLCA3LCAwLCAtMSwgLTMsIDEsIDAsIC0yLCAwLCAtMywgLTIsIDMsIC0xLCAtMiwgLTIsIC0xLCAtMSwgLTIsIC0xLCAtMiwgLTEsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDAsIDYsIDIsIC0yLCAwLCAwLCAwLCAxLCAtMiwgLTMsIDAsIC0yLCAtMiwgLTIsIDEsIDAsIC00LCAtMiwgLTMsIDQsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0xLCAyLCA3LCAtMywgMCwgMiwgLTEsIDAsIC00LCAtMywgMCwgLTMsIC00LCAtMSwgMCwgLTEsIC00LCAtMiwgLTMsIDUsIDEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtMiwgLTMsIDEyLCAtMywgLTMsIC0zLCAtMywgLTMsIC0yLCAtMywgLTIsIC0yLCAtNCwgLTEsIC0xLCAtNSwgLTMsIC0xLCAtMiwgLTMsIC0yLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDEsIDAsIDAsIC0zLCA2LCAyLCAtMiwgMSwgLTIsIC0yLCAxLCAwLCAtNCwgLTEsIDAsIC0xLCAtMiwgLTEsIC0zLCAwLCA0LCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAwLCAwLCAyLCAtMywgMiwgNiwgLTIsIDAsIC0zLCAtMiwgMSwgLTIsIC0zLCAwLCAwLCAtMSwgLTMsIC0yLCAtMywgMSwgNCwgLTEsIC01XSxcbiAgICAgICAgICAgIFswLCAtMiwgMCwgLTEsIC0zLCAtMiwgLTIsIDcsIC0yLCAtNCwgLTMsIC0yLCAtMiwgLTMsIC0yLCAwLCAtMiwgLTIsIC0zLCAtMywgLTEsIC0yLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0yLCAwLCAxLCAwLCAtMywgMSwgMCwgLTIsIDEwLCAtMywgLTIsIC0xLCAwLCAtMiwgLTIsIC0xLCAtMiwgLTMsIDIsIC0zLCAwLCAwLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMywgLTIsIC00LCAtMywgLTIsIC0zLCAtNCwgLTMsIDUsIDIsIC0zLCAyLCAwLCAtMiwgLTIsIC0xLCAtMiwgMCwgMywgLTMsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMiwgLTMsIC0zLCAtMiwgLTIsIC0yLCAtMywgLTIsIDIsIDUsIC0zLCAyLCAxLCAtMywgLTMsIC0xLCAtMiwgMCwgMSwgLTMsIC0yLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAzLCAwLCAwLCAtMywgMSwgMSwgLTIsIC0xLCAtMywgLTMsIDUsIC0xLCAtMywgLTEsIC0xLCAtMSwgLTIsIC0xLCAtMiwgMCwgMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTEsIC0yLCAtMywgLTIsIDAsIC0yLCAtMiwgMCwgMiwgMiwgLTEsIDYsIDAsIC0yLCAtMiwgLTEsIC0yLCAwLCAxLCAtMiwgLTEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0yLCAtMiwgLTQsIC0yLCAtNCwgLTMsIC0zLCAtMiwgMCwgMSwgLTMsIDAsIDgsIC0zLCAtMiwgLTEsIDEsIDMsIDAsIC0zLCAtMywgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtMSwgLTQsIC0xLCAwLCAtMiwgLTIsIC0yLCAtMywgLTEsIC0yLCAtMywgOSwgLTEsIC0xLCAtMywgLTMsIC0zLCAtMiwgLTEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMSwgLTEsIDEsIDAsIC0xLCAwLCAwLCAwLCAtMSwgLTIsIC0zLCAtMSwgLTIsIC0yLCAtMSwgNCwgMiwgLTQsIC0yLCAtMSwgMCwgMCwgMCwgLTVdLFxuICAgICAgICAgICAgWzAsIC0xLCAwLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyLCA1LCAtMywgLTEsIDAsIDAsIC0xLCAwLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0yLCAtNCwgLTQsIC01LCAtMiwgLTMsIC0yLCAtMywgLTIsIC0yLCAtMiwgLTIsIDEsIC0zLCAtNCwgLTMsIDE1LCAzLCAtMywgLTQsIC0yLCAtMiwgLTVdLFxuICAgICAgICAgICAgWy0yLCAtMSwgLTIsIC0yLCAtMywgLTEsIC0yLCAtMywgMiwgMCwgMCwgLTEsIDAsIDMsIC0zLCAtMiwgLTEsIDMsIDgsIC0xLCAtMiwgLTIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTIsIC0zLCAtMywgLTEsIC0zLCAtMywgLTMsIC0zLCAzLCAxLCAtMiwgMSwgMCwgLTMsIC0xLCAwLCAtMywgLTEsIDUsIC0zLCAtMywgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTEsIDQsIDUsIC0yLCAwLCAxLCAtMSwgMCwgLTMsIC0zLCAwLCAtMiwgLTMsIC0yLCAwLCAwLCAtNCwgLTIsIC0zLCA0LCAyLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAwLCAwLCAxLCAtMywgNCwgNCwgLTIsIDAsIC0zLCAtMiwgMSwgLTEsIC0zLCAtMSwgMCwgLTEsIC0yLCAtMiwgLTMsIDIsIDQsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTEsIC0xLCAtMSwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAxXV07XG4gICAgICAgIHRoaXMuQkxPU1VNNTAgPSBbWzUsIC0yLCAtMSwgLTIsIC0xLCAtMSwgLTEsIDAsIC0yLCAtMSwgLTIsIC0xLCAtMSwgLTMsIC0xLCAxLCAwLCAtMywgLTIsIDAsIC0yLCAtMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMiwgNywgLTEsIC0yLCAtNCwgMSwgMCwgLTMsIDAsIC00LCAtMywgMywgLTIsIC0zLCAtMywgLTEsIC0xLCAtMywgLTEsIC0zLCAtMSwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTEsIDcsIDIsIC0yLCAwLCAwLCAwLCAxLCAtMywgLTQsIDAsIC0yLCAtNCwgLTIsIDEsIDAsIC00LCAtMiwgLTMsIDQsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0yLCAyLCA4LCAtNCwgMCwgMiwgLTEsIC0xLCAtNCwgLTQsIC0xLCAtNCwgLTUsIC0xLCAwLCAtMSwgLTUsIC0zLCAtNCwgNSwgMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTQsIC0yLCAtNCwgMTMsIC0zLCAtMywgLTMsIC0zLCAtMiwgLTIsIC0zLCAtMiwgLTIsIC00LCAtMSwgLTEsIC01LCAtMywgLTEsIC0zLCAtMywgLTIsIC01XSxcbiAgICAgICAgICAgIFstMSwgMSwgMCwgMCwgLTMsIDcsIDIsIC0yLCAxLCAtMywgLTIsIDIsIDAsIC00LCAtMSwgMCwgLTEsIC0xLCAtMSwgLTMsIDAsIDQsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDAsIDAsIDIsIC0zLCAyLCA2LCAtMywgMCwgLTQsIC0zLCAxLCAtMiwgLTMsIC0xLCAtMSwgLTEsIC0zLCAtMiwgLTMsIDEsIDUsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTMsIDAsIC0xLCAtMywgLTIsIC0zLCA4LCAtMiwgLTQsIC00LCAtMiwgLTMsIC00LCAtMiwgMCwgLTIsIC0zLCAtMywgLTQsIC0xLCAtMiwgLTIsIC01XSxcbiAgICAgICAgICAgIFstMiwgMCwgMSwgLTEsIC0zLCAxLCAwLCAtMiwgMTAsIC00LCAtMywgMCwgLTEsIC0xLCAtMiwgLTEsIC0yLCAtMywgMiwgLTQsIDAsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIC00LCAtMywgLTQsIC0yLCAtMywgLTQsIC00LCAtNCwgNSwgMiwgLTMsIDIsIDAsIC0zLCAtMywgLTEsIC0zLCAtMSwgNCwgLTQsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0yLCAtMywgLTQsIC00LCAtMiwgLTIsIC0zLCAtNCwgLTMsIDIsIDUsIC0zLCAzLCAxLCAtNCwgLTMsIC0xLCAtMiwgLTEsIDEsIC00LCAtMywgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgMywgMCwgLTEsIC0zLCAyLCAxLCAtMiwgMCwgLTMsIC0zLCA2LCAtMiwgLTQsIC0xLCAwLCAtMSwgLTMsIC0yLCAtMywgMCwgMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtNCwgLTIsIDAsIC0yLCAtMywgLTEsIDIsIDMsIC0yLCA3LCAwLCAtMywgLTIsIC0xLCAtMSwgMCwgMSwgLTMsIC0xLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0zLCAtMywgLTQsIC01LCAtMiwgLTQsIC0zLCAtNCwgLTEsIDAsIDEsIC00LCAwLCA4LCAtNCwgLTMsIC0yLCAxLCA0LCAtMSwgLTQsIC00LCAtMiwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMywgLTIsIC0xLCAtNCwgLTEsIC0xLCAtMiwgLTIsIC0zLCAtNCwgLTEsIC0zLCAtNCwgMTAsIC0xLCAtMSwgLTQsIC0zLCAtMywgLTIsIC0xLCAtMiwgLTVdLFxuICAgICAgICAgICAgWzEsIC0xLCAxLCAwLCAtMSwgMCwgLTEsIDAsIC0xLCAtMywgLTMsIDAsIC0yLCAtMywgLTEsIDUsIDIsIC00LCAtMiwgLTIsIDAsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTEsIDAsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIDIsIDUsIC0zLCAtMiwgMCwgMCwgLTEsIDAsIC01XSxcbiAgICAgICAgICAgIFstMywgLTMsIC00LCAtNSwgLTUsIC0xLCAtMywgLTMsIC0zLCAtMywgLTIsIC0zLCAtMSwgMSwgLTQsIC00LCAtMywgMTUsIDIsIC0zLCAtNSwgLTIsIC0zLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0xLCAtMiwgLTMsIC0zLCAtMSwgLTIsIC0zLCAyLCAtMSwgLTEsIC0yLCAwLCA0LCAtMywgLTIsIC0yLCAyLCA4LCAtMSwgLTMsIC0yLCAtMSwgLTVdLFxuICAgICAgICAgICAgWzAsIC0zLCAtMywgLTQsIC0xLCAtMywgLTMsIC00LCAtNCwgNCwgMSwgLTMsIDEsIC0xLCAtMywgLTIsIDAsIC0zLCAtMSwgNSwgLTQsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0yLCAtMSwgNCwgNSwgLTMsIDAsIDEsIC0xLCAwLCAtNCwgLTQsIDAsIC0zLCAtNCwgLTIsIDAsIDAsIC01LCAtMywgLTQsIDUsIDIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDAsIDAsIDEsIC0zLCA0LCA1LCAtMiwgMCwgLTMsIC0zLCAxLCAtMSwgLTQsIC0xLCAwLCAtMSwgLTIsIC0yLCAtMywgMiwgNSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTEsIC0xLCAtMSwgLTIsIC0xLCAtMSwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0yLCAtMSwgMCwgLTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgMV1dO1xuICAgICAgICB0aGlzLkJMT1NVTTYyID0gW1s0LCAtMSwgLTIsIC0yLCAwLCAtMSwgLTEsIDAsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0xLCAxLCAwLCAtMywgLTIsIDAsIC0yLCAtMSwgMCwgLTRdLFxuICAgICAgICAgICAgWy0xLCA1LCAwLCAtMiwgLTMsIDEsIDAsIC0yLCAwLCAtMywgLTIsIDIsIC0xLCAtMywgLTIsIC0xLCAtMSwgLTMsIC0yLCAtMywgLTEsIDAsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTIsIDAsIDYsIDEsIC0zLCAwLCAwLCAwLCAxLCAtMywgLTMsIDAsIC0yLCAtMywgLTIsIDEsIDAsIC00LCAtMiwgLTMsIDMsIDAsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTIsIC0yLCAxLCA2LCAtMywgMCwgMiwgLTEsIC0xLCAtMywgLTQsIC0xLCAtMywgLTMsIC0xLCAwLCAtMSwgLTQsIC0zLCAtMywgNCwgMSwgLTEsIC00XSxcbiAgICAgICAgICAgIFswLCAtMywgLTMsIC0zLCA5LCAtMywgLTQsIC0zLCAtMywgLTEsIC0xLCAtMywgLTEsIC0yLCAtMywgLTEsIC0xLCAtMiwgLTIsIC0xLCAtMywgLTMsIC0yLCAtNF0sXG4gICAgICAgICAgICBbLTEsIDEsIDAsIDAsIC0zLCA1LCAyLCAtMiwgMCwgLTMsIC0yLCAxLCAwLCAtMywgLTEsIDAsIC0xLCAtMiwgLTEsIC0yLCAwLCAzLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0xLCAwLCAwLCAyLCAtNCwgMiwgNSwgLTIsIDAsIC0zLCAtMywgMSwgLTIsIC0zLCAtMSwgMCwgLTEsIC0zLCAtMiwgLTIsIDEsIDQsIC0xLCAtNF0sXG4gICAgICAgICAgICBbMCwgLTIsIDAsIC0xLCAtMywgLTIsIC0yLCA2LCAtMiwgLTQsIC00LCAtMiwgLTMsIC0zLCAtMiwgMCwgLTIsIC0yLCAtMywgLTMsIC0xLCAtMiwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMiwgMCwgMSwgLTEsIC0zLCAwLCAwLCAtMiwgOCwgLTMsIC0zLCAtMSwgLTIsIC0xLCAtMiwgLTEsIC0yLCAtMiwgMiwgLTMsIDAsIDAsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtMywgLTMsIC0xLCAtMywgLTMsIC00LCAtMywgNCwgMiwgLTMsIDEsIDAsIC0zLCAtMiwgLTEsIC0zLCAtMSwgMywgLTMsIC0zLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0xLCAtMiwgLTMsIC00LCAtMSwgLTIsIC0zLCAtNCwgLTMsIDIsIDQsIC0yLCAyLCAwLCAtMywgLTIsIC0xLCAtMiwgLTEsIDEsIC00LCAtMywgLTEsIC00XSxcbiAgICAgICAgICAgIFstMSwgMiwgMCwgLTEsIC0zLCAxLCAxLCAtMiwgLTEsIC0zLCAtMiwgNSwgLTEsIC0zLCAtMSwgMCwgLTEsIC0zLCAtMiwgLTIsIDAsIDEsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTEsIC0xLCAtMiwgLTMsIC0xLCAwLCAtMiwgLTMsIC0yLCAxLCAyLCAtMSwgNSwgMCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAxLCAtMywgLTEsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtMywgLTMsIC0yLCAtMywgLTMsIC0zLCAtMSwgMCwgMCwgLTMsIDAsIDYsIC00LCAtMiwgLTIsIDEsIDMsIC0xLCAtMywgLTMsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMiwgLTEsIC0zLCAtMSwgLTEsIC0yLCAtMiwgLTMsIC0zLCAtMSwgLTIsIC00LCA3LCAtMSwgLTEsIC00LCAtMywgLTIsIC0yLCAtMSwgLTIsIC00XSxcbiAgICAgICAgICAgIFsxLCAtMSwgMSwgMCwgLTEsIDAsIDAsIDAsIC0xLCAtMiwgLTIsIDAsIC0xLCAtMiwgLTEsIDQsIDEsIC0zLCAtMiwgLTIsIDAsIDAsIDAsIC00XSxcbiAgICAgICAgICAgIFswLCAtMSwgMCwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMSwgMSwgNSwgLTIsIC0yLCAwLCAtMSwgLTEsIDAsIC00XSxcbiAgICAgICAgICAgIFstMywgLTMsIC00LCAtNCwgLTIsIC0yLCAtMywgLTIsIC0yLCAtMywgLTIsIC0zLCAtMSwgMSwgLTQsIC0zLCAtMiwgMTEsIDIsIC0zLCAtNCwgLTMsIC0yLCAtNF0sXG4gICAgICAgICAgICBbLTIsIC0yLCAtMiwgLTMsIC0yLCAtMSwgLTIsIC0zLCAyLCAtMSwgLTEsIC0yLCAtMSwgMywgLTMsIC0yLCAtMiwgMiwgNywgLTEsIC0zLCAtMiwgLTEsIC00XSxcbiAgICAgICAgICAgIFswLCAtMywgLTMsIC0zLCAtMSwgLTIsIC0yLCAtMywgLTMsIDMsIDEsIC0yLCAxLCAtMSwgLTIsIC0yLCAwLCAtMywgLTEsIDQsIC0zLCAtMiwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMiwgLTEsIDMsIDQsIC0zLCAwLCAxLCAtMSwgMCwgLTMsIC00LCAwLCAtMywgLTMsIC0yLCAwLCAtMSwgLTQsIC0zLCAtMywgNCwgMSwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMSwgMCwgMCwgMSwgLTMsIDMsIDQsIC0yLCAwLCAtMywgLTMsIDEsIC0xLCAtMywgLTEsIDAsIC0xLCAtMywgLTIsIC0yLCAxLCA0LCAtMSwgLTRdLFxuICAgICAgICAgICAgWzAsIC0xLCAtMSwgLTEsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMiwgMCwgMCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgMV1dO1xuICAgICAgICB0aGlzLkJMT1NVTTgwID0gW1s3LCAtMywgLTMsIC0zLCAtMSwgLTIsIC0yLCAwLCAtMywgLTMsIC0zLCAtMSwgLTIsIC00LCAtMSwgMiwgMCwgLTUsIC00LCAtMSwgLTMsIC0yLCAtMSwgLThdLFxuICAgICAgICAgICAgWy0zLCA5LCAtMSwgLTMsIC02LCAxLCAtMSwgLTQsIDAsIC01LCAtNCwgMywgLTMsIC01LCAtMywgLTIsIC0yLCAtNSwgLTQsIC00LCAtMiwgMCwgLTIsIC04XSxcbiAgICAgICAgICAgIFstMywgLTEsIDksIDIsIC01LCAwLCAtMSwgLTEsIDEsIC02LCAtNiwgMCwgLTQsIC02LCAtNCwgMSwgMCwgLTcsIC00LCAtNSwgNSwgLTEsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTMsIC0zLCAyLCAxMCwgLTcsIC0xLCAyLCAtMywgLTIsIC03LCAtNywgLTIsIC02LCAtNiwgLTMsIC0xLCAtMiwgLTgsIC02LCAtNiwgNiwgMSwgLTMsIC04XSxcbiAgICAgICAgICAgIFstMSwgLTYsIC01LCAtNywgMTMsIC01LCAtNywgLTYsIC03LCAtMiwgLTMsIC02LCAtMywgLTQsIC02LCAtMiwgLTIsIC01LCAtNSwgLTIsIC02LCAtNywgLTQsIC04XSxcbiAgICAgICAgICAgIFstMiwgMSwgMCwgLTEsIC01LCA5LCAzLCAtNCwgMSwgLTUsIC00LCAyLCAtMSwgLTUsIC0zLCAtMSwgLTEsIC00LCAtMywgLTQsIC0xLCA1LCAtMiwgLThdLFxuICAgICAgICAgICAgWy0yLCAtMSwgLTEsIDIsIC03LCAzLCA4LCAtNCwgMCwgLTYsIC02LCAxLCAtNCwgLTYsIC0yLCAtMSwgLTIsIC02LCAtNSwgLTQsIDEsIDYsIC0yLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTQsIC0xLCAtMywgLTYsIC00LCAtNCwgOSwgLTQsIC03LCAtNywgLTMsIC01LCAtNiwgLTUsIC0xLCAtMywgLTYsIC02LCAtNiwgLTIsIC00LCAtMywgLThdLFxuICAgICAgICAgICAgWy0zLCAwLCAxLCAtMiwgLTcsIDEsIDAsIC00LCAxMiwgLTYsIC01LCAtMSwgLTQsIC0yLCAtNCwgLTIsIC0zLCAtNCwgMywgLTUsIC0xLCAwLCAtMiwgLThdLFxuICAgICAgICAgICAgWy0zLCAtNSwgLTYsIC03LCAtMiwgLTUsIC02LCAtNywgLTYsIDcsIDIsIC01LCAyLCAtMSwgLTUsIC00LCAtMiwgLTUsIC0zLCA0LCAtNiwgLTYsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTMsIC00LCAtNiwgLTcsIC0zLCAtNCwgLTYsIC03LCAtNSwgMiwgNiwgLTQsIDMsIDAsIC01LCAtNCwgLTMsIC00LCAtMiwgMSwgLTcsIC01LCAtMiwgLThdLFxuICAgICAgICAgICAgWy0xLCAzLCAwLCAtMiwgLTYsIDIsIDEsIC0zLCAtMSwgLTUsIC00LCA4LCAtMywgLTUsIC0yLCAtMSwgLTEsIC02LCAtNCwgLTQsIC0xLCAxLCAtMiwgLThdLFxuICAgICAgICAgICAgWy0yLCAtMywgLTQsIC02LCAtMywgLTEsIC00LCAtNSwgLTQsIDIsIDMsIC0zLCA5LCAwLCAtNCwgLTMsIC0xLCAtMywgLTMsIDEsIC01LCAtMywgLTIsIC04XSxcbiAgICAgICAgICAgIFstNCwgLTUsIC02LCAtNiwgLTQsIC01LCAtNiwgLTYsIC0yLCAtMSwgMCwgLTUsIDAsIDEwLCAtNiwgLTQsIC00LCAwLCA0LCAtMiwgLTYsIC02LCAtMywgLThdLFxuICAgICAgICAgICAgWy0xLCAtMywgLTQsIC0zLCAtNiwgLTMsIC0yLCAtNSwgLTQsIC01LCAtNSwgLTIsIC00LCAtNiwgMTIsIC0yLCAtMywgLTcsIC02LCAtNCwgLTQsIC0yLCAtMywgLThdLFxuICAgICAgICAgICAgWzIsIC0yLCAxLCAtMSwgLTIsIC0xLCAtMSwgLTEsIC0yLCAtNCwgLTQsIC0xLCAtMywgLTQsIC0yLCA3LCAyLCAtNiwgLTMsIC0zLCAwLCAtMSwgLTEsIC04XSxcbiAgICAgICAgICAgIFswLCAtMiwgMCwgLTIsIC0yLCAtMSwgLTIsIC0zLCAtMywgLTIsIC0zLCAtMSwgLTEsIC00LCAtMywgMiwgOCwgLTUsIC0zLCAwLCAtMSwgLTIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTUsIC01LCAtNywgLTgsIC01LCAtNCwgLTYsIC02LCAtNCwgLTUsIC00LCAtNiwgLTMsIDAsIC03LCAtNiwgLTUsIDE2LCAzLCAtNSwgLTgsIC01LCAtNSwgLThdLFxuICAgICAgICAgICAgWy00LCAtNCwgLTQsIC02LCAtNSwgLTMsIC01LCAtNiwgMywgLTMsIC0yLCAtNCwgLTMsIDQsIC02LCAtMywgLTMsIDMsIDExLCAtMywgLTUsIC00LCAtMywgLThdLFxuICAgICAgICAgICAgWy0xLCAtNCwgLTUsIC02LCAtMiwgLTQsIC00LCAtNiwgLTUsIDQsIDEsIC00LCAxLCAtMiwgLTQsIC0zLCAwLCAtNSwgLTMsIDcsIC02LCAtNCwgLTIsIC04XSxcbiAgICAgICAgICAgIFstMywgLTIsIDUsIDYsIC02LCAtMSwgMSwgLTIsIC0xLCAtNiwgLTcsIC0xLCAtNSwgLTYsIC00LCAwLCAtMSwgLTgsIC01LCAtNiwgNiwgMCwgLTMsIC04XSxcbiAgICAgICAgICAgIFstMiwgMCwgLTEsIDEsIC03LCA1LCA2LCAtNCwgMCwgLTYsIC01LCAxLCAtMywgLTYsIC0yLCAtMSwgLTIsIC01LCAtNCwgLTQsIDAsIDYsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMiwgLTMsIC00LCAtMiwgLTIsIC0zLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0zLCAtMywgLTEsIC0xLCAtNSwgLTMsIC0yLCAtMywgLTEsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAxXV07XG4gICAgICAgIHRoaXMuQkxPU1VNOTAgPSBbWzUsIC0yLCAtMiwgLTMsIC0xLCAtMSwgLTEsIDAsIC0yLCAtMiwgLTIsIC0xLCAtMiwgLTMsIC0xLCAxLCAwLCAtNCwgLTMsIC0xLCAtMiwgLTEsIC0xLCAtNl0sXG4gICAgICAgICAgICBbLTIsIDYsIC0xLCAtMywgLTUsIDEsIC0xLCAtMywgMCwgLTQsIC0zLCAyLCAtMiwgLTQsIC0zLCAtMSwgLTIsIC00LCAtMywgLTMsIC0yLCAwLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0yLCAtMSwgNywgMSwgLTQsIDAsIC0xLCAtMSwgMCwgLTQsIC00LCAwLCAtMywgLTQsIC0zLCAwLCAwLCAtNSwgLTMsIC00LCA0LCAtMSwgLTIsIC02XSxcbiAgICAgICAgICAgIFstMywgLTMsIDEsIDcsIC01LCAtMSwgMSwgLTIsIC0yLCAtNSwgLTUsIC0xLCAtNCwgLTUsIC0zLCAtMSwgLTIsIC02LCAtNCwgLTUsIDQsIDAsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTEsIC01LCAtNCwgLTUsIDksIC00LCAtNiwgLTQsIC01LCAtMiwgLTIsIC00LCAtMiwgLTMsIC00LCAtMiwgLTIsIC00LCAtNCwgLTIsIC00LCAtNSwgLTMsIC02XSxcbiAgICAgICAgICAgIFstMSwgMSwgMCwgLTEsIC00LCA3LCAyLCAtMywgMSwgLTQsIC0zLCAxLCAwLCAtNCwgLTIsIC0xLCAtMSwgLTMsIC0zLCAtMywgLTEsIDQsIC0xLCAtNl0sXG4gICAgICAgICAgICBbLTEsIC0xLCAtMSwgMSwgLTYsIDIsIDYsIC0zLCAtMSwgLTQsIC00LCAwLCAtMywgLTUsIC0yLCAtMSwgLTEsIC01LCAtNCwgLTMsIDAsIDQsIC0yLCAtNl0sXG4gICAgICAgICAgICBbMCwgLTMsIC0xLCAtMiwgLTQsIC0zLCAtMywgNiwgLTMsIC01LCAtNSwgLTIsIC00LCAtNSwgLTMsIC0xLCAtMywgLTQsIC01LCAtNSwgLTIsIC0zLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0yLCAwLCAwLCAtMiwgLTUsIDEsIC0xLCAtMywgOCwgLTQsIC00LCAtMSwgLTMsIC0yLCAtMywgLTIsIC0yLCAtMywgMSwgLTQsIC0xLCAwLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0yLCAtNCwgLTQsIC01LCAtMiwgLTQsIC00LCAtNSwgLTQsIDUsIDEsIC00LCAxLCAtMSwgLTQsIC0zLCAtMSwgLTQsIC0yLCAzLCAtNSwgLTQsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtNCwgLTUsIC0yLCAtMywgLTQsIC01LCAtNCwgMSwgNSwgLTMsIDIsIDAsIC00LCAtMywgLTIsIC0zLCAtMiwgMCwgLTUsIC00LCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0xLCAyLCAwLCAtMSwgLTQsIDEsIDAsIC0yLCAtMSwgLTQsIC0zLCA2LCAtMiwgLTQsIC0yLCAtMSwgLTEsIC01LCAtMywgLTMsIC0xLCAxLCAtMSwgLTZdLFxuICAgICAgICAgICAgWy0yLCAtMiwgLTMsIC00LCAtMiwgMCwgLTMsIC00LCAtMywgMSwgMiwgLTIsIDcsIC0xLCAtMywgLTIsIC0xLCAtMiwgLTIsIDAsIC00LCAtMiwgLTEsIC02XSxcbiAgICAgICAgICAgIFstMywgLTQsIC00LCAtNSwgLTMsIC00LCAtNSwgLTUsIC0yLCAtMSwgMCwgLTQsIC0xLCA3LCAtNCwgLTMsIC0zLCAwLCAzLCAtMiwgLTQsIC00LCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0xLCAtMywgLTMsIC0zLCAtNCwgLTIsIC0yLCAtMywgLTMsIC00LCAtNCwgLTIsIC0zLCAtNCwgOCwgLTIsIC0yLCAtNSwgLTQsIC0zLCAtMywgLTIsIC0yLCAtNl0sXG4gICAgICAgICAgICBbMSwgLTEsIDAsIC0xLCAtMiwgLTEsIC0xLCAtMSwgLTIsIC0zLCAtMywgLTEsIC0yLCAtMywgLTIsIDUsIDEsIC00LCAtMywgLTIsIDAsIC0xLCAtMSwgLTZdLFxuICAgICAgICAgICAgWzAsIC0yLCAwLCAtMiwgLTIsIC0xLCAtMSwgLTMsIC0yLCAtMSwgLTIsIC0xLCAtMSwgLTMsIC0yLCAxLCA2LCAtNCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtNl0sXG4gICAgICAgICAgICBbLTQsIC00LCAtNSwgLTYsIC00LCAtMywgLTUsIC00LCAtMywgLTQsIC0zLCAtNSwgLTIsIDAsIC01LCAtNCwgLTQsIDExLCAyLCAtMywgLTYsIC00LCAtMywgLTZdLFxuICAgICAgICAgICAgWy0zLCAtMywgLTMsIC00LCAtNCwgLTMsIC00LCAtNSwgMSwgLTIsIC0yLCAtMywgLTIsIDMsIC00LCAtMywgLTIsIDIsIDgsIC0zLCAtNCwgLTMsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtNCwgLTUsIC0yLCAtMywgLTMsIC01LCAtNCwgMywgMCwgLTMsIDAsIC0yLCAtMywgLTIsIC0xLCAtMywgLTMsIDUsIC00LCAtMywgLTIsIC02XSxcbiAgICAgICAgICAgIFstMiwgLTIsIDQsIDQsIC00LCAtMSwgMCwgLTIsIC0xLCAtNSwgLTUsIC0xLCAtNCwgLTQsIC0zLCAwLCAtMSwgLTYsIC00LCAtNCwgNCwgMCwgLTIsIC02XSxcbiAgICAgICAgICAgIFstMSwgMCwgLTEsIDAsIC01LCA0LCA0LCAtMywgMCwgLTQsIC00LCAxLCAtMiwgLTQsIC0yLCAtMSwgLTEsIC00LCAtMywgLTMsIDAsIDQsIC0xLCAtNl0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMiwgLTIsIC0zLCAtMSwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMSwgLTEsIC0yLCAtMiwgLTEsIC0xLCAtMywgLTIsIC0yLCAtMiwgLTEsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAxXV07XG4gICAgICAgIHRoaXMuTlVDTEVPVElERVMgPSBbWzEsIC0xLCAtMSwgLTFdLFxuICAgICAgICAgICAgWy0xLCAxLCAtMSwgLTFdLFxuICAgICAgICAgICAgWy0xLCAtMSwgMSwgLTFdLFxuICAgICAgICAgICAgWy0xLCAtMSwgLTEsIDFdXTtcbiAgICAgICAgdGhpcy5QQU0zMCA9IFtbNiwgLTcsIC00LCAtMywgLTYsIC00LCAtMiwgLTIsIC03LCAtNSwgLTYsIC03LCAtNSwgLTgsIC0yLCAwLCAtMSwgLTEzLCAtOCwgLTIsIC0zLCAtMywgLTMsIC0xN10sXG4gICAgICAgICAgICBbLTcsIDgsIC02LCAtMTAsIC04LCAtMiwgLTksIC05LCAtMiwgLTUsIC04LCAwLCAtNCwgLTksIC00LCAtMywgLTYsIC0yLCAtMTAsIC04LCAtNywgLTQsIC02LCAtMTddLFxuICAgICAgICAgICAgWy00LCAtNiwgOCwgMiwgLTExLCAtMywgLTIsIC0zLCAwLCAtNSwgLTcsIC0xLCAtOSwgLTksIC02LCAwLCAtMiwgLTgsIC00LCAtOCwgNiwgLTMsIC0zLCAtMTddLFxuICAgICAgICAgICAgWy0zLCAtMTAsIDIsIDgsIC0xNCwgLTIsIDIsIC0zLCAtNCwgLTcsIC0xMiwgLTQsIC0xMSwgLTE1LCAtOCwgLTQsIC01LCAtMTUsIC0xMSwgLTgsIDYsIDEsIC01LCAtMTddLFxuICAgICAgICAgICAgWy02LCAtOCwgLTExLCAtMTQsIDEwLCAtMTQsIC0xNCwgLTksIC03LCAtNiwgLTE1LCAtMTQsIC0xMywgLTEzLCAtOCwgLTMsIC04LCAtMTUsIC00LCAtNiwgLTEyLCAtMTQsIC05LCAtMTddLFxuICAgICAgICAgICAgWy00LCAtMiwgLTMsIC0yLCAtMTQsIDgsIDEsIC03LCAxLCAtOCwgLTUsIC0zLCAtNCwgLTEzLCAtMywgLTUsIC01LCAtMTMsIC0xMiwgLTcsIC0zLCA2LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstMiwgLTksIC0yLCAyLCAtMTQsIDEsIDgsIC00LCAtNSwgLTUsIC05LCAtNCwgLTcsIC0xNCwgLTUsIC00LCAtNiwgLTE3LCAtOCwgLTYsIDEsIDYsIC01LCAtMTddLFxuICAgICAgICAgICAgWy0yLCAtOSwgLTMsIC0zLCAtOSwgLTcsIC00LCA2LCAtOSwgLTExLCAtMTAsIC03LCAtOCwgLTksIC02LCAtMiwgLTYsIC0xNSwgLTE0LCAtNSwgLTMsIC01LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstNywgLTIsIDAsIC00LCAtNywgMSwgLTUsIC05LCA5LCAtOSwgLTYsIC02LCAtMTAsIC02LCAtNCwgLTYsIC03LCAtNywgLTMsIC02LCAtMSwgLTEsIC01LCAtMTddLFxuICAgICAgICAgICAgWy01LCAtNSwgLTUsIC03LCAtNiwgLTgsIC01LCAtMTEsIC05LCA4LCAtMSwgLTYsIC0xLCAtMiwgLTgsIC03LCAtMiwgLTE0LCAtNiwgMiwgLTYsIC02LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstNiwgLTgsIC03LCAtMTIsIC0xNSwgLTUsIC05LCAtMTAsIC02LCAtMSwgNywgLTgsIDEsIC0zLCAtNywgLTgsIC03LCAtNiwgLTcsIC0yLCAtOSwgLTcsIC02LCAtMTddLFxuICAgICAgICAgICAgWy03LCAwLCAtMSwgLTQsIC0xNCwgLTMsIC00LCAtNywgLTYsIC02LCAtOCwgNywgLTIsIC0xNCwgLTYsIC00LCAtMywgLTEyLCAtOSwgLTksIC0yLCAtNCwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTUsIC00LCAtOSwgLTExLCAtMTMsIC00LCAtNywgLTgsIC0xMCwgLTEsIDEsIC0yLCAxMSwgLTQsIC04LCAtNSwgLTQsIC0xMywgLTExLCAtMSwgLTEwLCAtNSwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTgsIC05LCAtOSwgLTE1LCAtMTMsIC0xMywgLTE0LCAtOSwgLTYsIC0yLCAtMywgLTE0LCAtNCwgOSwgLTEwLCAtNiwgLTksIC00LCAyLCAtOCwgLTEwLCAtMTMsIC04LCAtMTddLFxuICAgICAgICAgICAgWy0yLCAtNCwgLTYsIC04LCAtOCwgLTMsIC01LCAtNiwgLTQsIC04LCAtNywgLTYsIC04LCAtMTAsIDgsIC0yLCAtNCwgLTE0LCAtMTMsIC02LCAtNywgLTQsIC01LCAtMTddLFxuICAgICAgICAgICAgWzAsIC0zLCAwLCAtNCwgLTMsIC01LCAtNCwgLTIsIC02LCAtNywgLTgsIC00LCAtNSwgLTYsIC0yLCA2LCAwLCAtNSwgLTcsIC02LCAtMSwgLTUsIC0zLCAtMTddLFxuICAgICAgICAgICAgWy0xLCAtNiwgLTIsIC01LCAtOCwgLTUsIC02LCAtNiwgLTcsIC0yLCAtNywgLTMsIC00LCAtOSwgLTQsIDAsIDcsIC0xMywgLTYsIC0zLCAtMywgLTYsIC00LCAtMTddLFxuICAgICAgICAgICAgWy0xMywgLTIsIC04LCAtMTUsIC0xNSwgLTEzLCAtMTcsIC0xNSwgLTcsIC0xNCwgLTYsIC0xMiwgLTEzLCAtNCwgLTE0LCAtNSwgLTEzLCAxMywgLTUsIC0xNSwgLTEwLCAtMTQsIC0xMSwgLTE3XSxcbiAgICAgICAgICAgIFstOCwgLTEwLCAtNCwgLTExLCAtNCwgLTEyLCAtOCwgLTE0LCAtMywgLTYsIC03LCAtOSwgLTExLCAyLCAtMTMsIC03LCAtNiwgLTUsIDEwLCAtNywgLTYsIC05LCAtNywgLTE3XSxcbiAgICAgICAgICAgIFstMiwgLTgsIC04LCAtOCwgLTYsIC03LCAtNiwgLTUsIC02LCAyLCAtMiwgLTksIC0xLCAtOCwgLTYsIC02LCAtMywgLTE1LCAtNywgNywgLTgsIC02LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstMywgLTcsIDYsIDYsIC0xMiwgLTMsIDEsIC0zLCAtMSwgLTYsIC05LCAtMiwgLTEwLCAtMTAsIC03LCAtMSwgLTMsIC0xMCwgLTYsIC04LCA2LCAwLCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstMywgLTQsIC0zLCAxLCAtMTQsIDYsIDYsIC01LCAtMSwgLTYsIC03LCAtNCwgLTUsIC0xMywgLTQsIC01LCAtNiwgLTE0LCAtOSwgLTYsIDAsIDYsIC01LCAtMTddLFxuICAgICAgICAgICAgWy0zLCAtNiwgLTMsIC01LCAtOSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNiwgLTUsIC01LCAtOCwgLTUsIC0zLCAtNCwgLTExLCAtNywgLTUsIC01LCAtNSwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIDFdXTtcbiAgICAgICAgdGhpcy5QQU03MCA9IFtbNSwgLTQsIC0yLCAtMSwgLTQsIC0yLCAtMSwgMCwgLTQsIC0yLCAtNCwgLTQsIC0zLCAtNiwgMCwgMSwgMSwgLTksIC01LCAtMSwgLTEsIC0xLCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstNCwgOCwgLTMsIC02LCAtNSwgMCwgLTUsIC02LCAwLCAtMywgLTYsIDIsIC0yLCAtNywgLTIsIC0xLCAtNCwgMCwgLTcsIC01LCAtNCwgLTIsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy0yLCAtMywgNiwgMywgLTcsIC0xLCAwLCAtMSwgMSwgLTMsIC01LCAwLCAtNSwgLTYsIC0zLCAxLCAwLCAtNiwgLTMsIC01LCA1LCAtMSwgLTIsIC0xMV0sXG4gICAgICAgICAgICBbLTEsIC02LCAzLCA2LCAtOSwgMCwgMywgLTEsIC0xLCAtNSwgLTgsIC0yLCAtNywgLTEwLCAtNCwgLTEsIC0yLCAtMTAsIC03LCAtNSwgNSwgMiwgLTMsIC0xMV0sXG4gICAgICAgICAgICBbLTQsIC01LCAtNywgLTksIDksIC05LCAtOSwgLTYsIC01LCAtNCwgLTEwLCAtOSwgLTksIC04LCAtNSwgLTEsIC01LCAtMTEsIC0yLCAtNCwgLTgsIC05LCAtNiwgLTExXSxcbiAgICAgICAgICAgIFstMiwgMCwgLTEsIDAsIC05LCA3LCAyLCAtNCwgMiwgLTUsIC0zLCAtMSwgLTIsIC05LCAtMSwgLTMsIC0zLCAtOCwgLTgsIC00LCAtMSwgNSwgLTIsIC0xMV0sXG4gICAgICAgICAgICBbLTEsIC01LCAwLCAzLCAtOSwgMiwgNiwgLTIsIC0yLCAtNCwgLTYsIC0yLCAtNCwgLTksIC0zLCAtMiwgLTMsIC0xMSwgLTYsIC00LCAyLCA1LCAtMywgLTExXSxcbiAgICAgICAgICAgIFswLCAtNiwgLTEsIC0xLCAtNiwgLTQsIC0yLCA2LCAtNiwgLTYsIC03LCAtNSwgLTYsIC03LCAtMywgMCwgLTMsIC0xMCwgLTksIC0zLCAtMSwgLTMsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy00LCAwLCAxLCAtMSwgLTUsIDIsIC0yLCAtNiwgOCwgLTYsIC00LCAtMywgLTYsIC00LCAtMiwgLTMsIC00LCAtNSwgLTEsIC00LCAwLCAxLCAtMywgLTExXSxcbiAgICAgICAgICAgIFstMiwgLTMsIC0zLCAtNSwgLTQsIC01LCAtNCwgLTYsIC02LCA3LCAxLCAtNCwgMSwgMCwgLTUsIC00LCAtMSwgLTksIC00LCAzLCAtNCwgLTQsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy00LCAtNiwgLTUsIC04LCAtMTAsIC0zLCAtNiwgLTcsIC00LCAxLCA2LCAtNSwgMiwgLTEsIC01LCAtNiwgLTQsIC00LCAtNCwgMCwgLTYsIC00LCAtNCwgLTExXSxcbiAgICAgICAgICAgIFstNCwgMiwgMCwgLTIsIC05LCAtMSwgLTIsIC01LCAtMywgLTQsIC01LCA2LCAwLCAtOSwgLTQsIC0yLCAtMSwgLTcsIC03LCAtNiwgLTEsIC0yLCAtMywgLTExXSxcbiAgICAgICAgICAgIFstMywgLTIsIC01LCAtNywgLTksIC0yLCAtNCwgLTYsIC02LCAxLCAyLCAwLCAxMCwgLTIsIC01LCAtMywgLTIsIC04LCAtNywgMCwgLTYsIC0zLCAtMywgLTExXSxcbiAgICAgICAgICAgIFstNiwgLTcsIC02LCAtMTAsIC04LCAtOSwgLTksIC03LCAtNCwgMCwgLTEsIC05LCAtMiwgOCwgLTcsIC00LCAtNiwgLTIsIDQsIC01LCAtNywgLTksIC01LCAtMTFdLFxuICAgICAgICAgICAgWzAsIC0yLCAtMywgLTQsIC01LCAtMSwgLTMsIC0zLCAtMiwgLTUsIC01LCAtNCwgLTUsIC03LCA3LCAwLCAtMiwgLTksIC05LCAtMywgLTQsIC0yLCAtMywgLTExXSxcbiAgICAgICAgICAgIFsxLCAtMSwgMSwgLTEsIC0xLCAtMywgLTIsIDAsIC0zLCAtNCwgLTYsIC0yLCAtMywgLTQsIDAsIDUsIDIsIC0zLCAtNSwgLTMsIDAsIC0yLCAtMSwgLTExXSxcbiAgICAgICAgICAgIFsxLCAtNCwgMCwgLTIsIC01LCAtMywgLTMsIC0zLCAtNCwgLTEsIC00LCAtMSwgLTIsIC02LCAtMiwgMiwgNiwgLTgsIC00LCAtMSwgLTEsIC0zLCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstOSwgMCwgLTYsIC0xMCwgLTExLCAtOCwgLTExLCAtMTAsIC01LCAtOSwgLTQsIC03LCAtOCwgLTIsIC05LCAtMywgLTgsIDEzLCAtMywgLTEwLCAtNywgLTEwLCAtNywgLTExXSxcbiAgICAgICAgICAgIFstNSwgLTcsIC0zLCAtNywgLTIsIC04LCAtNiwgLTksIC0xLCAtNCwgLTQsIC03LCAtNywgNCwgLTksIC01LCAtNCwgLTMsIDksIC01LCAtNCwgLTcsIC01LCAtMTFdLFxuICAgICAgICAgICAgWy0xLCAtNSwgLTUsIC01LCAtNCwgLTQsIC00LCAtMywgLTQsIDMsIDAsIC02LCAwLCAtNSwgLTMsIC0zLCAtMSwgLTEwLCAtNSwgNiwgLTUsIC00LCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstMSwgLTQsIDUsIDUsIC04LCAtMSwgMiwgLTEsIDAsIC00LCAtNiwgLTEsIC02LCAtNywgLTQsIDAsIC0xLCAtNywgLTQsIC01LCA1LCAxLCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0xLCAyLCAtOSwgNSwgNSwgLTMsIDEsIC00LCAtNCwgLTIsIC0zLCAtOSwgLTIsIC0yLCAtMywgLTEwLCAtNywgLTQsIDEsIDUsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy0yLCAtMywgLTIsIC0zLCAtNiwgLTIsIC0zLCAtMywgLTMsIC0zLCAtNCwgLTMsIC0zLCAtNSwgLTMsIC0xLCAtMiwgLTcsIC01LCAtMiwgLTIsIC0zLCAtMywgLTExXSxcbiAgICAgICAgICAgIFstMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgMV1dO1xuICAgICAgICB0aGlzLlBBTTI1MCA9IFtbMiwgLTIsIDAsIDAsIC0yLCAwLCAwLCAxLCAtMSwgLTEsIC0yLCAtMSwgLTEsIC0zLCAxLCAxLCAxLCAtNiwgLTMsIDAsIDAsIDAsIDAsIC04XSxcbiAgICAgICAgICAgIFstMiwgNiwgMCwgLTEsIC00LCAxLCAtMSwgLTMsIDIsIC0yLCAtMywgMywgMCwgLTQsIDAsIDAsIC0xLCAyLCAtNCwgLTIsIC0xLCAwLCAtMSwgLThdLFxuICAgICAgICAgICAgWzAsIDAsIDIsIDIsIC00LCAxLCAxLCAwLCAyLCAtMiwgLTMsIDEsIC0yLCAtMywgMCwgMSwgMCwgLTQsIC0yLCAtMiwgMiwgMSwgMCwgLThdLFxuICAgICAgICAgICAgWzAsIC0xLCAyLCA0LCAtNSwgMiwgMywgMSwgMSwgLTIsIC00LCAwLCAtMywgLTYsIC0xLCAwLCAwLCAtNywgLTQsIC0yLCAzLCAzLCAtMSwgLThdLFxuICAgICAgICAgICAgWy0yLCAtNCwgLTQsIC01LCAxMiwgLTUsIC01LCAtMywgLTMsIC0yLCAtNiwgLTUsIC01LCAtNCwgLTMsIDAsIC0yLCAtOCwgMCwgLTIsIC00LCAtNSwgLTMsIC04XSxcbiAgICAgICAgICAgIFswLCAxLCAxLCAyLCAtNSwgNCwgMiwgLTEsIDMsIC0yLCAtMiwgMSwgLTEsIC01LCAwLCAtMSwgLTEsIC01LCAtNCwgLTIsIDEsIDMsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTEsIDEsIDMsIC01LCAyLCA0LCAwLCAxLCAtMiwgLTMsIDAsIC0yLCAtNSwgLTEsIDAsIDAsIC03LCAtNCwgLTIsIDMsIDMsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMSwgLTMsIDAsIDEsIC0zLCAtMSwgMCwgNSwgLTIsIC0zLCAtNCwgLTIsIC0zLCAtNSwgMCwgMSwgMCwgLTcsIC01LCAtMSwgMCwgMCwgLTEsIC04XSxcbiAgICAgICAgICAgIFstMSwgMiwgMiwgMSwgLTMsIDMsIDEsIC0yLCA2LCAtMiwgLTIsIDAsIC0yLCAtMiwgMCwgLTEsIC0xLCAtMywgMCwgLTIsIDEsIDIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0zLCAtMiwgNSwgMiwgLTIsIDIsIDEsIC0yLCAtMSwgMCwgLTUsIC0xLCA0LCAtMiwgLTIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtMywgLTQsIC02LCAtMiwgLTMsIC00LCAtMiwgMiwgNiwgLTMsIDQsIDIsIC0zLCAtMywgLTIsIC0yLCAtMSwgMiwgLTMsIC0zLCAtMSwgLThdLFxuICAgICAgICAgICAgWy0xLCAzLCAxLCAwLCAtNSwgMSwgMCwgLTIsIDAsIC0yLCAtMywgNSwgMCwgLTUsIC0xLCAwLCAwLCAtMywgLTQsIC0yLCAxLCAwLCAtMSwgLThdLFxuICAgICAgICAgICAgWy0xLCAwLCAtMiwgLTMsIC01LCAtMSwgLTIsIC0zLCAtMiwgMiwgNCwgMCwgNiwgMCwgLTIsIC0yLCAtMSwgLTQsIC0yLCAyLCAtMiwgLTIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTMsIC00LCAtMywgLTYsIC00LCAtNSwgLTUsIC01LCAtMiwgMSwgMiwgLTUsIDAsIDksIC01LCAtMywgLTMsIDAsIDcsIC0xLCAtNCwgLTUsIC0yLCAtOF0sXG4gICAgICAgICAgICBbMSwgMCwgMCwgLTEsIC0zLCAwLCAtMSwgMCwgMCwgLTIsIC0zLCAtMSwgLTIsIC01LCA2LCAxLCAwLCAtNiwgLTUsIC0xLCAtMSwgMCwgLTEsIC04XSxcbiAgICAgICAgICAgIFsxLCAwLCAxLCAwLCAwLCAtMSwgMCwgMSwgLTEsIC0xLCAtMywgMCwgLTIsIC0zLCAxLCAyLCAxLCAtMiwgLTMsIC0xLCAwLCAwLCAwLCAtOF0sXG4gICAgICAgICAgICBbMSwgLTEsIDAsIDAsIC0yLCAtMSwgMCwgMCwgLTEsIDAsIC0yLCAwLCAtMSwgLTMsIDAsIDEsIDMsIC01LCAtMywgMCwgMCwgLTEsIDAsIC04XSxcbiAgICAgICAgICAgIFstNiwgMiwgLTQsIC03LCAtOCwgLTUsIC03LCAtNywgLTMsIC01LCAtMiwgLTMsIC00LCAwLCAtNiwgLTIsIC01LCAxNywgMCwgLTYsIC01LCAtNiwgLTQsIC04XSxcbiAgICAgICAgICAgIFstMywgLTQsIC0yLCAtNCwgMCwgLTQsIC00LCAtNSwgMCwgLTEsIC0xLCAtNCwgLTIsIDcsIC01LCAtMywgLTMsIDAsIDEwLCAtMiwgLTMsIC00LCAtMiwgLThdLFxuICAgICAgICAgICAgWzAsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0xLCAtMiwgNCwgMiwgLTIsIDIsIC0xLCAtMSwgLTEsIDAsIC02LCAtMiwgNCwgLTIsIC0yLCAtMSwgLThdLFxuICAgICAgICAgICAgWzAsIC0xLCAyLCAzLCAtNCwgMSwgMywgMCwgMSwgLTIsIC0zLCAxLCAtMiwgLTQsIC0xLCAwLCAwLCAtNSwgLTMsIC0yLCAzLCAyLCAtMSwgLThdLFxuICAgICAgICAgICAgWzAsIDAsIDEsIDMsIC01LCAzLCAzLCAwLCAyLCAtMiwgLTMsIDAsIC0yLCAtNSwgMCwgMCwgLTEsIC02LCAtNCwgLTIsIDIsIDMsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTEsIDAsIC0xLCAtMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIDAsIDAsIC00LCAtMiwgLTEsIC0xLCAtMSwgLTEsIC04XSxcbiAgICAgICAgICAgIFstOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIDFdXTtcbiAgICAgICAgdGhpcy5TQ0hORUlERVIgPSBbWzExLjYsIC0yLjcsIDkuNywgLTEuNywgLTIuNywgLTYuNCwgLTMuOSwgLTUuNiwgNS4xLCAtNS4wLCAzLjYsIC00LjIsIC02LjMsIC0xMy4wLCAtNy4xLCAtMTEuNSwgMC40LCAtNi4wLCAtMS45LCAtNS4zLCAtOC41LCAtMTEuMiwgLTguOSwgLTEwLjgsIDIuMSwgMC4wLCAxLjQsIDAuMiwgLTEwLjIsIC0xMy41LCAtMTMuMCwgLTEyLjUsIC0yLjYsIC04LjUsIC01LjAsIC04LjEsIC02LjMsIC05LjksIC03LjUsIC05LjAsIC03LjEsIC0xMC4yLCAtOC4yLCAtOS4yLCAtOC4yLCAtMTIuNSwgLTExLjEsIC0xMS40LCAtNTAuMCwgLTE0LjgsIC01MC4wLCAtMTMuOCwgLTcuMywgLTEwLjEsIC04LjQsIC05LjEsIC01MC4wLCAtMTMuMCwgLTEzLjUsIC0xMi40LCAtMTAuNywgLTE4LjEsIC0xMS44LCAtMTcuMixdLFxuICAgICAgICAgICAgWy0yLjcsIDEzLjAsIC0zLjMsIDEwLjksIC0zLjUsIC0wLjQsIC0zLjMsIC0xLjgsIC01LjQsIDQuNiwgLTUuNSwgMy4wLCAtMTAuMiwgLTcuOSwgLTkuOSwgLTkuNiwgLTUuMCwgMC41LCAtNS41LCAtMS4wLCAtMTAuMywgLTguMSwgLTkuNCwgLTkuNiwgLTguMSwgLTUuMCwgLTcuMywgLTYuMywgLTEzLjQsIC0xMS4zLCAtMTQuNCwgLTEyLjksIC02LjMsIDAuOCwgLTYuNCwgLTEuMSwgLTcuNCwgLTUuMCwgLTYuMiwgLTYuNSwgLTUuNiwgLTEuNiwgLTQuNywgLTMuMCwgLTEwLjgsIC04LjcsIC0xMS45LCAtMTAuMCwgLTUwLjAsIC02LjIsIC01MC4wLCAtNy41LCAtNi4zLCAtNC4zLCAtNi4yLCAtNS40LCAtNTAuMCwgLTcuMCwgLTE2LjMsIC04LjIsIC0xMy4yLCAtMTIuMywgLTEzLjEsIC0xMy4zLF0sXG4gICAgICAgICAgICBbOS43LCAtMy4zLCAxMS42LCAtMi44LCAtNC41LCAtNi43LCAtMy4xLCAtNi45LCAzLjMsIC01LjUsIDQuOCwgLTUuMSwgLTguOSwgLTEzLjIsIC01LjcsIC0xMi42LCAtMS41LCAtNi4xLCAtMC42LCAtNi4xLCAtMTAuMCwgLTExLjgsIC04LjYsIC0xMS45LCAxLjIsIDAuNSwgMi4yLCAwLjEsIC0xMS44LCAtMTQuMCwgLTExLjksIC0xMy40LCAtNC45LCAtOS4xLCAtMy40LCAtOC45LCAtOC4wLCAtMTAuMCwgLTcuMiwgLTEwLjAsIC05LjEsIC0xMC4yLCAtNy4xLCAtOS45LCAtMTAuMSwgLTEzLjAsIC0xMC42LCAtMTIuNywgLTUwLjAsIC0xNC45LCAtNTAuMCwgLTE0LjQsIC04LjksIC0xMC44LCAtOC45LCAtMTAuNCwgLTUwLjAsIC0xMy4xLCAtMTEuOCwgLTEzLjAsIC0xMi40LCAtMTkuNCwgLTExLjUsIC0xNy44LF0sXG4gICAgICAgICAgICBbLTEuNywgMTAuOSwgLTIuOCwgMTIuOSwgLTIuNywgLTIuMiwgLTIuOCwgMC4yLCAtNC44LCAyLjksIC01LjIsIDUuMiwgLTkuMSwgLTkuNSwgLTkuMCwgLTcuMCwgLTQuMCwgLTEuMCwgLTUuMCwgMS4wLCAtOS4wLCAtOC44LCAtOC45LCAtNy43LCAtNy4wLCAtNi44LCAtNy4xLCAtNC4zLCAtMTIuNCwgLTEyLjksIC0xMy45LCAtMTAuMCwgLTQuOSwgLTAuNywgLTUuNiwgMS40LCAtNi4wLCAtNi41LCAtNi4yLCAtNC44LCAtNS4xLCAtMy4yLCAtNS4wLCAtMS4yLCAtOS44LCAtOS45LCAtMTEuMywgLTguMiwgLTUwLjAsIC03LjYsIC01MC4wLCAtNS4xLCAtNS41LCAtNS44LCAtNS45LCAtNC4yLCAtNTAuMCwgLTguMywgLTE1LjUsIC01LjksIC0xMS42LCAtMTQuMiwgLTEyLjAsIC0xMS42LF0sXG4gICAgICAgICAgICBbLTIuNywgLTMuNSwgLTQuNSwgLTIuNywgMTEuNywgOS4wLCAxMC42LCA5LjYsIC0zLjIsIC0wLjcsIC01LjEsIC0wLjQsIDAuNywgLTQuNiwgLTAuNCwgLTMuNiwgLTQuOCwgLTguOSwgLTYuNSwgLTcuOCwgLTEuNCwgLTQuMSwgLTIuOSwgLTMuMywgLTguMCwgLTkuMSwgLTguMCwgLTguMiwgLTYuMCwgLTkuMywgLTcuNywgLTguNSwgLTYuNCwgLTEwLjEsIC03LjUsIC04LjYsIDIuOCwgLTAuNywgMC45LCAwLjEsIC01LjksIC03LjMsIC02LjUsIC02LjUsIC0wLjQsIC0zLjksIC0yLjYsIC0zLjEsIC01MC4wLCAtMTQuNiwgLTUwLjAsIC0xMi42LCAyLjksIDAuMSwgMS44LCAxLjAsIC01MC4wLCAtOS4yLCAtMTMuNiwgLTcuNywgLTQuOCwgLTEyLjIsIC02LjIsIC0xMS4wLF0sXG4gICAgICAgICAgICBbLTYuNCwgLTAuNCwgLTYuNywgLTIuMiwgOS4wLCAxMi4zLCA5LjgsIDkuNiwgLTcuMSwgMi40LCAtNy4yLCAwLjMsIC0yLjksIC0xLjIsIC0zLjAsIC0zLjMsIC03LjYsIC02LjcsIC04LjEsIC03LjksIC00LjksIC0xLjksIC00LjUsIC0zLjgsIC05LjUsIC03LjgsIC05LjMsIC04LjksIC05LjQsIC03LjEsIC05LjAsIC05LjAsIC05LjQsIC03LjUsIC05LjMsIC05LjIsIC0wLjcsIDIuNiwgMC4yLCAtMC4xLCAtOC4wLCAtNC42LCAtNy43LCAtNi4xLCAtMy42LCAtMS4wLCAtNC4xLCAtMy4xLCAtNTAuMCwgLTExLjYsIC01MC4wLCAtMTEuNiwgMC4yLCAyLjMsIDAuNCwgMC41LCAtNTAuMCwgLTYuNSwgLTE1LjMsIC03LjgsIC04LjQsIC05LjUsIC04LjMsIC0xMS4xLF0sXG4gICAgICAgICAgICBbLTMuOSwgLTMuMywgLTMuMSwgLTIuOCwgMTAuNiwgOS44LCAxMi4yLCA5LjgsIC00LjksIDAuMSwgLTMuNiwgLTAuMiwgLTEuNywgLTQuMSwgMC45LCAtMy41LCAtNS45LCAtOC45LCAtNS42LCAtOC41LCAtMy45LCAtMy45LCAtMi4yLCAtNC41LCAtNy4zLCAtNy41LCAtNi40LCAtOC41LCAtNy4xLCAtOC4yLCAtNi43LCAtNy44LCAtNy45LCAtOS4xLCAtNy4xLCAtOS40LCAwLjksIC0wLjIsIDIuNSwgLTAuMywgLTYuOSwgLTYuNSwgLTUuNSwgLTYuOCwgLTEuNywgLTMuNCwgLTEuNywgLTIuOCwgLTUwLjAsIC0xMy4wLCAtNTAuMCwgLTExLjUsIDEuNSwgMC43LCAyLjcsIDAuNiwgLTUwLjAsIC04LjksIC0xMi4xLCAtNy40LCAtNi4xLCAtMTEuNSwgLTUuNCwgLTEwLjQsXSxcbiAgICAgICAgICAgIFstNS42LCAtMS44LCAtNi45LCAwLjIsIDkuNiwgOS42LCA5LjgsIDExLjYsIC02LjYsIDAuOSwgLTcuMiwgMi41LCAtMi4zLCAtMy40LCAtMi4zLCAtMC42LCAtNi41LCAtOC4yLCAtOC4wLCAtNi4zLCAtMy43LCAtMy41LCAtMy45LCAtMS42LCAtOS45LCAtOC45LCAtOS42LCAtNy4wLCAtOC42LCAtOC45LCAtOC44LCAtNi44LCAtOC42LCAtOC4yLCAtOC44LCAtNi44LCAwLjMsIDAuMSwgMC4yLCAyLjQsIC03LjQsIC02LjIsIC02LjksIC00LjQsIC0yLjksIC0yLjksIC0zLjUsIC0wLjksIC01MC4wLCAtMTIuMiwgLTUwLjAsIC0xMC4xLCAxLjIsIDAuNiwgMS4yLCAyLjQsIC01MC4wLCAtNy42LCAtMTYuMSwgLTUuOCwgLTcuMiwgLTEwLjgsIC03LjQsIC05LjAsXSxcbiAgICAgICAgICAgIFs1LjEsIC01LjQsIDMuMywgLTQuOCwgLTMuMiwgLTcuMSwgLTQuOSwgLTYuNiwgMTMuMywgLTIuOCwgMTEuMiwgLTEuOSwgLTUuNywgLTEyLjUsIC03LjIsIC0xMS42LCAtMC43LCAtNC44LCAtMy4xLCAtNC4zLCAtMTAuMCwgLTExLjYsIC04LjgsIC0xMS43LCAxMC41LCA3LjcsIDkuMSwgOC41LCAtOS44LCAtMTIuNywgLTExLjcsIC0xMS44LCAtNi4zLCAtMTEuNCwgLTguOCwgLTExLjAsIC03LjUsIC0xMC4zLCAtOC4zLCAtOS45LCAtMS45LCAtNi43LCAtNC4xLCAtNi40LCAtNy45LCAtMTIuNSwgLTExLjQsIC0xMS43LCAtNTAuMCwgLTE0LjAsIC01MC4wLCAtMTMuMiwgLTguNSwgLTEwLjQsIC05LjEsIC05LjYsIC01MC4wLCAtOS44LCAtNy43LCAtOC44LCAtMTAuMywgLTE3LjksIC0xMS44LCAtMTYuMCxdLFxuICAgICAgICAgICAgWy01LjAsIDQuNiwgLTUuNSwgMi45LCAtMC43LCAyLjQsIDAuMSwgMC45LCAtMi44LCAxMi44LCAtMi42LCAxMS4wLCAtOC40LCAtNi4zLCAtOC4zLCAtNy43LCAtNi4xLCAtMi45LCAtNi41LCAtNC4yLCAtOC41LCAtNS45LCAtNy41LCAtNy43LCAtNS41LCAtMi40LCAtNS41LCAtNC4xLCAtMTIuOSwgLTEwLjMsIC0xMi43LCAtMTEuMywgLTcuNCwgLTMuMSwgLTcuNCwgLTQuOSwgLTQuNCwgLTEuOCwgLTMuNSwgLTMuNSwgLTEuNiwgMy4wLCAtMC44LCAwLjksIC04LjQsIC02LjMsIC05LjYsIC03LjMsIC01MC4wLCAtOS4wLCAtNTAuMCwgLTkuNywgLTIuMywgLTAuMiwgLTEuMiwgLTEuNSwgLTUwLjAsIC0wLjcsIC0xMy4zLCAtMi4wLCAtMTEuOCwgLTExLjksIC0xMi4zLCAtMTIuNyxdLFxuICAgICAgICAgICAgWzMuNiwgLTUuNSwgNC44LCAtNS4yLCAtNS4xLCAtNy4yLCAtMy42LCAtNy4yLCAxMS4yLCAtMi42LCAxMy40LCAtMi4xLCAtNy43LCAtMTIuNSwgLTUuMywgLTExLjksIC0yLjIsIC00LjQsIC0xLjksIC00LjgsIC0xMC4yLCAtMTEuNSwgLTguMSwgLTEyLjAsIDkuMywgOC4yLCAxMC4wLCA4LjAsIC0xMC44LCAtMTEuOSwgLTEwLjcsIC0xMi40LCAtOC4yLCAtMTEuOCwgLTYuOSwgLTExLjUsIC04LjQsIC05LjksIC03LjEsIC0xMC42LCAtNC43LCAtNi44LCAtMS4yLCAtNy4wLCAtOS44LCAtMTEuNiwgLTkuNiwgLTEyLjEsIC01MC4wLCAtMTQuMSwgLTUwLjAsIC0xMi43LCAtMTAuMCwgLTEwLjgsIC04LjgsIC0xMC41LCAtNTAuMCwgLTkuMiwgLTQuMiwgLTkuMywgLTExLjAsIC0xOC4yLCAtMTEuMSwgLTE2LjEsXSxcbiAgICAgICAgICAgIFstNC4yLCAzLjAsIC01LjEsIDUuMiwgLTAuNCwgMC4zLCAtMC4yLCAyLjUsIC0xLjksIDExLjAsIC0yLjEsIDEzLjIsIC03LjYsIC04LjUsIC04LjAsIC01LjMsIC01LjYsIC00LjUsIC02LjgsIC0yLjQsIC03LjgsIC03LjksIC03LjksIC02LjIsIC01LjcsIC01LjEsIC01LjQsIC0yLjEsIC0xMi40LCAtMTIuMywgLTEzLjEsIC0xMC4xLCAtNi42LCAtNC40LCAtNi45LCAtMi42LCAtMy42LCAtMy44LCAtMy43LCAtMi4wLCAtMS40LCAwLjgsIC0wLjksIDMuMCwgLTguMiwgLTguMSwgLTkuMiwgLTUuOCwgLTUwLjAsIC0xMC4xLCAtNTAuMCwgLTcuNCwgLTEuNywgLTIuMCwgLTEuNSwgLTAuNSwgLTUwLjAsIC0yLjEsIC0xMi42LCAtMC40LCAtMTEuNiwgLTEzLjksIC0xMS40LCAtMTEuMSxdLFxuICAgICAgICAgICAgWy02LjMsIC0xMC4yLCAtOC45LCAtOS4xLCAwLjcsIC0yLjksIC0xLjcsIC0yLjMsIC01LjcsIC04LjQsIC03LjcsIC03LjYsIDEzLjIsIDkuNiwgMy41LCA5LjcsIC04LjcsIC0xMi40LCAtMTAuNywgLTEwLjcsIC03LjgsIC0xMC4yLCAtOC44LCAtOS42LCAtOS41LCAtMTEuOSwgLTEwLjksIC0xMC41LCAyLjMsIC0wLjQsIC0wLjIsIC0wLjMsIC05LjcsIC0xNS41LCAtMTEuNCwgLTEzLjcsIC0zLjAsIC02LjQsIC00LjEsIC01LjQsIC05LjYsIC0xMS45LCAtMTAuNSwgLTExLjgsIDYuMiwgMy4zLCAzLjcsIDMuNiwgLTUwLjAsIC0xMy42LCAtNTAuMCwgLTExLjksIC01LjYsIC04LjgsIC03LjIsIC04LjksIC01MC4wLCAtMTIuNCwgLTE0LjEsIC0xMS42LCAyLjgsIC02LjQsIDAuNSwgLTUuMixdLFxuICAgICAgICAgICAgWy0xMy4wLCAtNy45LCAtMTMuMiwgLTkuNSwgLTQuNiwgLTEuMiwgLTQuMSwgLTMuNCwgLTEyLjUsIC02LjMsIC0xMi41LCAtOC41LCA5LjYsIDEyLjcsIDAuMiwgMTAuNSwgLTEyLjQsIC0xMS42LCAtMTMuMiwgLTEyLjAsIC0xMi40LCAtMTAuMSwgLTExLjYsIC0xMi4wLCAtMTUuMSwgLTEzLjEsIC0xNC4zLCAtMTMuNCwgLTEuNCwgMS40LCAtMS42LCAtMC41LCAtMTQuOSwgLTE0LjMsIC0xNS4yLCAtMTYuOCwgLTcuNywgLTQuNywgLTYuMywgLTYuNiwgLTE0LjYsIC0xMC44LCAtMTIuOCwgLTEzLjAsIDIuMywgNi4wLCAyLjUsIDMuNiwgLTUwLjAsIC0xMS4yLCAtNTAuMCwgLTExLjksIC0xMC41LCAtOS4yLCAtMTAuNSwgLTEwLjUsIC01MC4wLCAtMTAuMywgLTE2LjIsIC0xMS4zLCAtMS43LCAtMy43LCAtMi41LCAtNS40LF0sXG4gICAgICAgICAgICBbLTcuMSwgLTkuOSwgLTUuNywgLTkuMCwgLTAuNCwgLTMuMCwgMC45LCAtMi4zLCAtNy4yLCAtOC4zLCAtNS4zLCAtOC4wLCAzLjUsIDAuMiwgMTQuMywgMS4wLCAtNy4zLCAtMTEuMiwgLTYuOSwgLTkuNywgLTguNSwgLTEwLjIsIC03LjcsIC05LjgsIC0xMC4wLCAtMTAuNCwgLTguNCwgLTEwLjIsIDEuMCwgLTAuNiwgMS43LCAtMC41LCAtMTEuMSwgLTE0LjgsIC05LjcsIC0xNC41LCAtMy43LCAtNS44LCAtMy4xLCAtNS42LCAtMTAuNCwgLTExLjUsIC04LjIsIC0xMS4xLCAwLjYsIC0xLjYsIDEuNiwgLTEuMSwgLTUwLjAsIC0xMi40LCAtNTAuMCwgLTExLjUsIC01LjUsIC04LjAsIC00LjksIC03LjIsIC01MC4wLCAtMTIuNCwgLTEwLjMsIC0xMS42LCAwLjcsIC02LjgsIDIuNCwgLTYuMCxdLFxuICAgICAgICAgICAgWy0xMS41LCAtOS42LCAtMTIuNiwgLTcuMCwgLTMuNiwgLTMuMywgLTMuNSwgLTAuNiwgLTExLjYsIC03LjcsIC0xMS45LCAtNS4zLCA5LjcsIDEwLjUsIDEuMCwgMTIuNiwgLTEyLjAsIC0xMi4yLCAtMTIuNSwgLTkuNywgLTExLjEsIC0xMS4yLCAtMTEuOSwgLTkuNCwgLTEyLjksIC0xNC4zLCAtMTQuMCwgLTExLjksIC0xLjAsIC0wLjQsIC0xLjYsIDEuMiwgLTEzLjksIC0xNS40LCAtMTMuNywgLTEyLjYsIC02LjIsIC02LjcsIC02LjMsIC00LjQsIC0xMy4wLCAtMTIuMiwgLTEzLjAsIC0xMC40LCAyLjksIDMuOCwgMi41LCA1LjgsIC01MC4wLCAtMTIuNSwgLTUwLjAsIC0xMC4yLCAtOS42LCAtOS43LCAtOS42LCAtOC4zLCAtNTAuMCwgLTExLjYsIC0xNS40LCAtOS40LCAtMS4xLCAtNS40LCAtMS42LCAtMy4zLF0sXG4gICAgICAgICAgICBbMC40LCAtNS4wLCAtMS41LCAtNC4wLCAtNC44LCAtNy42LCAtNS45LCAtNi41LCAtMC43LCAtNi4xLCAtMi4yLCAtNS42LCAtOC43LCAtMTIuNCwgLTcuMywgLTEyLjAsIDEyLjgsIDIuMywgMTAuMiwgMy4wLCAwLjAsIC0zLjQsIC0wLjcsIC0zLjIsIDIuNSwgLTAuOCwgMC45LCAwLjIsIC0zLjAsIC03LjIsIC01LjcsIC02LjEsIC0wLjIsIC02LjYsIC0xLjgsIC02LjAsIC01LjMsIC04LjIsIC01LjcsIC03LjYsIC02LjcsIC05LjYsIC03LjUsIC05LjMsIC03LjEsIC0xMC41LCAtOS42LCAtOS40LCAtNTAuMCwgLTguMSwgLTUwLjAsIC03LjIsIC00LjMsIC02LjgsIC01LjcsIC02LjMsIC01MC4wLCAtOS41LCAtOS42LCAtOC45LCAtNi4yLCAtMTIuOCwgLTYuOCwgLTExLjgsXSxcbiAgICAgICAgICAgIFstNi4wLCAwLjUsIC02LjEsIC0xLjAsIC04LjksIC02LjcsIC04LjksIC04LjIsIC00LjgsIC0yLjksIC00LjQsIC00LjUsIC0xMi40LCAtMTEuNiwgLTExLjIsIC0xMi4yLCAyLjMsIDE0LjYsIDEuOSwgMTIuOSwgLTUuNSwgLTIuNiwgLTQuMSwgLTQuNywgLTEuMiwgMy4wLCAtMS4xLCAxLjYsIC04LjAsIC00LjcsIC04LjcsIC02LjAsIC04LjIsIC00LjcsIC03LjgsIC02LjcsIC0xMC4wLCAtOC4zLCAtOC45LCAtOS45LCAtMTAuOCwgLTcuMSwgLTEwLjAsIC05LjIsIC0xMS42LCAtMTAuMSwgLTEyLjMsIC0xMS45LCAtNTAuMCwgMi4yLCAtNTAuMCwgMC45LCAtNy45LCAtNS45LCAtNy40LCAtNi45LCAtNTAuMCwgLTQuNiwgLTExLjYsIC01LjYsIC05LjcsIC01LjksIC05LjksIC03LjMsXSxcbiAgICAgICAgICAgIFstMS45LCAtNS41LCAtMC42LCAtNS4wLCAtNi41LCAtOC4xLCAtNS42LCAtOC4wLCAtMy4xLCAtNi41LCAtMS45LCAtNi44LCAtMTAuNywgLTEzLjIsIC02LjksIC0xMi41LCAxMC4yLCAxLjksIDExLjksIDIuMSwgLTIuMywgLTQuMSwgLTAuNSwgLTQuNiwgLTAuMSwgLTAuOSwgMi40LCAtMC44LCAtNS4xLCAtNi45LCAtNC44LCAtNi43LCAtMi4zLCAtNy4xLCAtMC44LCAtNy4yLCAtNy4yLCAtOC4wLCAtNS42LCAtOC41LCAtOS40LCAtOS43LCAtNy4yLCAtOS44LCAtOS4yLCAtMTEuMSwgLTkuNSwgLTEwLjcsIC01MC4wLCAtOC43LCAtNTAuMCwgLTguNiwgLTYuMSwgLTcuNSwgLTUuNSwgLTcuNywgLTUwLjAsIC0xMC40LCAtNy43LCAtMTAuMCwgLTcuMywgLTEzLjYsIC02LjQsIC0xMy4zLF0sXG4gICAgICAgICAgICBbLTUuMywgLTEuMCwgLTYuMSwgMS4wLCAtNy44LCAtNy45LCAtOC41LCAtNi4zLCAtNC4zLCAtNC4yLCAtNC44LCAtMi40LCAtMTAuNywgLTEyLjAsIC05LjcsIC05LjcsIDMuMCwgMTIuOSwgMi4xLCAxNC43LCAtNC45LCAtMy44LCAtNC4wLCAtMi40LCAtMS4wLCAwLjgsIC0xLjMsIDMuNCwgLTcuNiwgLTUuNywgLTguMSwgLTMuNSwgLTYuOCwgLTUuOCwgLTcuMiwgLTQuMiwgLTguOSwgLTEwLjIsIC04LjQsIC04LjIsIC05LjksIC04LjQsIC05LjcsIC02LjQsIC0xMS4xLCAtMTEuMSwgLTExLjgsIC0xMC4wLCAtNTAuMCwgMC40LCAtNTAuMCwgMi42LCAtNy4yLCAtNy4wLCAtNy40LCAtNS4xLCAtNTAuMCwgLTUuNywgLTkuOCwgLTMuMiwgLTguNCwgLTcuNCwgLTguOSwgLTUuOSxdLFxuICAgICAgICAgICAgWy04LjUsIC0xMC4zLCAtMTAuMCwgLTkuMCwgLTEuNCwgLTQuOSwgLTMuOSwgLTMuNywgLTEwLjAsIC04LjUsIC0xMC4yLCAtNy44LCAtNy44LCAtMTIuNCwgLTguNSwgLTExLjEsIDAuMCwgLTUuNSwgLTIuMywgLTQuOSwgMTIuNiwgMTAuMCwgMTEuMSwgMTAuNSwgLTYuMCwgLTguMywgLTYuOSwgLTcuNSwgLTIuMiwgLTcuNCwgLTUuMywgLTUuOSwgLTguOSwgLTEyLjUsIC05LjQsIC0xMS42LCAtMC43LCAtMy45LCAtMi4zLCAtMy4wLCAtOS4xLCAtOS44LCAtOS4yLCAtOS41LCAtNS42LCAtOS4wLCAtOC4wLCAtOC41LCAtNTAuMCwgLTE1LjMsIC01MC4wLCAtMTQuMSwgMi4zLCAtMS40LCAwLjMsIC0wLjUsIC01MC4wLCAtMTMuNiwgLTE0LjMsIC0xMS41LCAtNS4zLCAtMTMuNywgLTYuMSwgLTEyLjcsXSxcbiAgICAgICAgICAgIFstMTEuMiwgLTguMSwgLTExLjgsIC04LjgsIC00LjEsIC0xLjksIC0zLjksIC0zLjUsIC0xMS42LCAtNS45LCAtMTEuNSwgLTcuOSwgLTEwLjIsIC0xMC4xLCAtMTAuMiwgLTExLjIsIC0zLjQsIC0yLjYsIC00LjEsIC0zLjgsIDEwLjAsIDEzLjEsIDEwLjcsIDEwLjYsIC04LjEsIC01LjIsIC04LjAsIC02LjcsIC02LjEsIC0zLjcsIC03LjUsIC01LjYsIC0xMS4xLCAtMTAuMywgLTEwLjYsIC0xMS45LCAtMy4yLCAtMS4wLCAtMi4yLCAtMi44LCAtMTAuNSwgLTguMSwgLTkuNCwgLTkuNSwgLTguMywgLTYuOSwgLTkuNCwgLTguOCwgLTUwLjAsIC0xMS4zLCAtNTAuMCwgLTEyLjgsIC0wLjYsIDIuMiwgLTAuMywgMC4xLCAtNTAuMCwgLTEwLjEsIC0xNy41LCAtMTEuMSwgLTguNiwgLTkuOSwgLTguNiwgLTExLjksXSxcbiAgICAgICAgICAgIFstOC45LCAtOS40LCAtOC42LCAtOC45LCAtMi45LCAtNC41LCAtMi4yLCAtMy45LCAtOC44LCAtNy41LCAtOC4xLCAtNy45LCAtOC44LCAtMTEuNiwgLTcuNywgLTExLjksIC0wLjcsIC00LjEsIC0wLjUsIC00LjAsIDExLjEsIDEwLjcsIDEzLjIsIDEwLjQsIC01LjcsIC01LjgsIC0zLjUsIC02LjEsIC0zLjYsIC02LjUsIC0zLjMsIC01LjUsIC05LjQsIC0xMS4wLCAtOC43LCAtMTEuMiwgLTEuOCwgLTIuNywgMC43LCAtMy4wLCAtOS4xLCAtOC4yLCAtNy4zLCAtOS40LCAtNy4yLCAtOC4yLCAtNy4yLCAtOC4yLCAtNTAuMCwgLTEzLjIsIC01MC4wLCAtMTMuMywgMC41LCAtMC45LCAxLjgsIC0wLjYsIC01MC4wLCAtMTEuNCwgLTExLjEsIC0xMC41LCAtNi4xLCAtMTIuOSwgLTUuMCwgLTExLjksXSxcbiAgICAgICAgICAgIFstMTAuOCwgLTkuNiwgLTExLjksIC03LjcsIC0zLjMsIC0zLjgsIC00LjUsIC0xLjYsIC0xMS43LCAtNy43LCAtMTIuMCwgLTYuMiwgLTkuNiwgLTEyLjAsIC05LjgsIC05LjQsIC0zLjIsIC00LjcsIC00LjYsIC0yLjQsIDEwLjUsIDEwLjYsIDEwLjQsIDEyLjYsIC04LjIsIC03LjksIC05LjAsIC00LjcsIC02LjEsIC02LjAsIC03LjUsIC0yLjksIC0xMC45LCAtMTIuMiwgLTExLjIsIC0xMC45LCAtMi40LCAtMi45LCAtMi43LCAtMC45LCAtMTAuNCwgLTkuNywgLTEwLjIsIC04LjAsIC04LjQsIC05LjEsIC05LjMsIC02LjUsIC01MC4wLCAtMTMuMywgLTUwLjAsIC0xMS4wLCAtMC4wLCAtMC40LCAtMC40LCAyLjMsIC01MC4wLCAtMTAuOSwgLTE3LjIsIC04LjMsIC04LjMsIC0xMi43LCAtNy44LCAtOS4zLF0sXG4gICAgICAgICAgICBbMi4xLCAtOC4xLCAxLjIsIC03LjAsIC04LjAsIC05LjUsIC03LjMsIC05LjksIDEwLjUsIC01LjUsIDkuMywgLTUuNywgLTkuNSwgLTE1LjEsIC0xMC4wLCAtMTIuOSwgMi41LCAtMS4yLCAtMC4xLCAtMS4wLCAtNi4wLCAtOC4xLCAtNS43LCAtOC4yLCAxMy44LCAxMS4zLCAxMS44LCAxMi4xLCAtNi4wLCAtOS4xLCAtOS4wLCAtOS41LCAtOC45LCAtMTMuNCwgLTEwLjAsIC0xMy4xLCAtOS45LCAtMTEuNywgLTkuOCwgLTEyLjgsIC01LjksIC05LjQsIC02LjUsIC04LjEsIC0xMC43LCAtMTQuMCwgLTEzLjMsIC0xMy45LCAtNTAuMCwgLTExLjksIC01MC4wLCAtOS43LCAtOC45LCAtMTAuOCwgLTkuMCwgLTExLjEsIC01MC4wLCAtNi41LCAtNS4zLCAtNi4zLCAtMTAuNSwgLTE2LjIsIC0xMC40LCAtMTUuMixdLFxuICAgICAgICAgICAgWzAuMCwgLTUuMCwgMC41LCAtNi44LCAtOS4xLCAtNy44LCAtNy41LCAtOC45LCA3LjcsIC0yLjQsIDguMiwgLTUuMSwgLTExLjksIC0xMy4xLCAtMTAuNCwgLTE0LjMsIC0wLjgsIDMuMCwgLTAuOSwgMC44LCAtOC4zLCAtNS4yLCAtNS44LCAtNy45LCAxMS4zLCAxNS4wLCAxMS4yLCAxMi44LCAtOS43LCAtNS4zLCAtOS4yLCAtNy44LCAtMTEuNywgLTEwLjYsIC0xMC4xLCAtMTIuMiwgLTExLjcsIC04LjgsIC04LjksIC0xMS44LCAtOS4zLCAtNS4wLCAtOC4wLCAtOC4yLCAtMTMuNiwgLTExLjQsIC0xMi44LCAtMTMuMCwgLTUwLjAsIC03LjIsIC01MC4wLCAtOC40LCAtMTEuMCwgLTcuNywgLTguNywgLTEwLjIsIC01MC4wLCAtMS41LCAtNy4xLCAtNC45LCAtMTEuMiwgLTExLjYsIC0xMS42LCAtMTUuMCxdLFxuICAgICAgICAgICAgWzEuNCwgLTcuMywgMi4yLCAtNy4xLCAtOC4wLCAtOS4zLCAtNi40LCAtOS42LCA5LjEsIC01LjUsIDEwLjAsIC01LjQsIC0xMC45LCAtMTQuMywgLTguNCwgLTE0LjAsIDAuOSwgLTEuMSwgMi40LCAtMS4zLCAtNi45LCAtOC4wLCAtMy41LCAtOS4wLCAxMS44LCAxMS4yLCAxMy40LCAxMS40LCAtNy4zLCAtOC44LCAtNi41LCAtOC41LCAtMTAuMCwgLTEyLjUsIC03LjgsIC0xMi41LCAtOS42LCAtMTEuMCwgLTcuMSwgLTEwLjcsIC03LjksIC04LjAsIC00LjMsIC05LjQsIC0xMS40LCAtMTIuMywgLTEwLjksIC0xMi45LCAtNTAuMCwgLTExLjgsIC01MC4wLCAtMTEuMiwgLTkuNCwgLTkuOCwgLTcuMywgLTEwLjUsIC01MC4wLCAtNi4yLCAtMi4yLCAtNi43LCAtOS44LCAtMTUuMiwgLTguNSwgLTE0LjksXSxcbiAgICAgICAgICAgIFswLjIsIC02LjMsIDAuMSwgLTQuMywgLTguMiwgLTguOSwgLTguNSwgLTcuMCwgOC41LCAtNC4xLCA4LjAsIC0yLjEsIC0xMC41LCAtMTMuNCwgLTEwLjIsIC0xMS45LCAwLjIsIDEuNiwgLTAuOCwgMy40LCAtNy41LCAtNi43LCAtNi4xLCAtNC43LCAxMi4xLCAxMi44LCAxMS40LCAxNC43LCAtOC43LCAtNy40LCAtOS40LCAtNS4zLCAtOS45LCAtMTEuOCwgLTEwLjUsIC0xMC4zLCAtOS45LCAtMTAuMSwgLTkuMywgLTkuMywgLTguMSwgLTcuMiwgLTguMCwgLTUuMiwgLTEyLjAsIC0xMi4xLCAtMTIuNiwgLTEwLjksIC01MC4wLCAtNy45LCAtNTAuMCwgLTUuMywgLTkuMywgLTguOCwgLTguOSwgLTcuMCwgLTUwLjAsIC0zLjYsIC03LjEsIC0xLjIsIC0xMC4yLCAtMTIuNywgLTkuOSwgLTExLjAsXSxcbiAgICAgICAgICAgIFstMTAuMiwgLTEzLjQsIC0xMS44LCAtMTIuNCwgLTYuMCwgLTkuNCwgLTcuMSwgLTguNiwgLTkuOCwgLTEyLjksIC0xMC44LCAtMTIuNCwgMi4zLCAtMS40LCAxLjAsIC0xLjAsIC0zLjAsIC04LjAsIC01LjEsIC03LjYsIC0yLjIsIC02LjEsIC0zLjYsIC02LjEsIC02LjAsIC05LjcsIC03LjMsIC04LjcsIDExLjIsIDcuOSwgOC45LCA4LjEsIC0xMi4xLCAtMTcuNCwgLTEzLjIsIC0xNi44LCAtNi4zLCAtOS41LCAtNy41LCAtOC44LCAtMTIuNywgLTE1LjIsIC0xMy4xLCAtMTQuMiwgMC4wLCAtMy4xLCAtMS44LCAtMy4xLCAtNTAuMCwgLTEwLjcsIC01MC4wLCAtOS4zLCAtNC42LCAtOC45LCAtNS45LCAtOC4zLCAtNTAuMCwgLTEyLjgsIC05LjYsIC0xMC42LCA5LjUsIC0zLjIsIDguMiwgLTIuOCxdLFxuICAgICAgICAgICAgWy0xMy41LCAtMTEuMywgLTE0LjAsIC0xMi45LCAtOS4zLCAtNy4xLCAtOC4yLCAtOC45LCAtMTIuNywgLTEwLjMsIC0xMS45LCAtMTIuMywgLTAuNCwgMS40LCAtMC42LCAtMC40LCAtNy4yLCAtNC43LCAtNi45LCAtNS43LCAtNy40LCAtMy43LCAtNi41LCAtNi4wLCAtOS4xLCAtNS4zLCAtOC44LCAtNy40LCA3LjksIDExLjksIDcuOCwgOS4zLCAtMTUuMiwgLTE1LjEsIC0xNC42LCAtMTcuMiwgLTkuNywgLTcuMywgLTguMiwgLTkuMiwgLTE1LjAsIC0xMi44LCAtMTQuMSwgLTE0LjksIC0yLjgsIDAuMiwgLTIuOSwgLTIuMywgLTUwLjAsIC03LjQsIC01MC4wLCAtOC43LCAtOS40LCAtNy4zLCAtOS40LCAtOS40LCAtNTAuMCwgLTguMCwgLTExLjksIC05LjcsIDYuNSwgMC41LCA2LjQsIC0xLjgsXSxcbiAgICAgICAgICAgIFstMTMuMCwgLTE0LjQsIC0xMS45LCAtMTMuOSwgLTcuNywgLTkuMCwgLTYuNywgLTguOCwgLTExLjcsIC0xMi43LCAtMTAuNywgLTEzLjEsIC0wLjIsIC0xLjYsIDEuNywgLTEuNiwgLTUuNywgLTguNywgLTQuOCwgLTguMSwgLTUuMywgLTcuNSwgLTMuMywgLTcuNSwgLTkuMCwgLTkuMiwgLTYuNSwgLTkuNCwgOC45LCA3LjgsIDEwLjEsIDcuOCwgLTE0LjMsIC0xNy43LCAtMTMuMCwgLTE3LjgsIC04LjAsIC05LjQsIC02LjIsIC05LjIsIC0xNS4xLCAtMTQuOSwgLTEyLjIsIC0xNC45LCAtMS44LCAtMy4yLCAtMC44LCAtMy4yLCAtNTAuMCwgLTEwLjgsIC01MC4wLCAtOS45LCAtNy4zLCAtOS42LCAtNi40LCAtOS40LCAtNTAuMCwgLTEyLjMsIC04LjcsIC0xMS4zLCA3LjYsIC0zLjMsIDguNywgLTIuOSxdLFxuICAgICAgICAgICAgWy0xMi41LCAtMTIuOSwgLTEzLjQsIC0xMC4wLCAtOC41LCAtOS4wLCAtNy44LCAtNi44LCAtMTEuOCwgLTExLjMsIC0xMi40LCAtMTAuMSwgLTAuMywgLTAuNSwgLTAuNSwgMS4yLCAtNi4xLCAtNi4wLCAtNi43LCAtMy41LCAtNS45LCAtNS42LCAtNS41LCAtMi45LCAtOS41LCAtNy44LCAtOC41LCAtNS4zLCA4LjEsIDkuMywgNy44LCAxMS44LCAtMTQuNCwgLTE1LjcsIC0xNC41LCAtMTQuNiwgLTguNCwgLTguNywgLTcuOSwgLTcuMSwgLTE0LjMsIC0xMy44LCAtMTMuOCwgLTEyLjMsIC0yLjQsIC0yLjIsIC0yLjksIC0wLjIsIC01MC4wLCAtOC45LCAtNTAuMCwgLTcuMSwgLTguMSwgLTkuMSwgLTguNywgLTYuNiwgLTUwLjAsIC05LjcsIC0xMS40LCAtOC4wLCA2LjgsIC0xLjgsIDYuOSwgMC40LF0sXG4gICAgICAgICAgICBbLTIuNiwgLTYuMywgLTQuOSwgLTQuOSwgLTYuNCwgLTkuNCwgLTcuOSwgLTguNiwgLTYuMywgLTcuNCwgLTguMiwgLTYuNiwgLTkuNywgLTE0LjksIC0xMS4xLCAtMTMuOSwgLTAuMiwgLTguMiwgLTIuMywgLTYuOCwgLTguOSwgLTExLjEsIC05LjQsIC0xMC45LCAtOC45LCAtMTEuNywgLTEwLjAsIC05LjksIC0xMi4xLCAtMTUuMiwgLTE0LjMsIC0xNC40LCAxMS4xLCAyLjksIDkuMiwgMy41LCAtMy4wLCAtNy4wLCAtNC4zLCAtNi4yLCAtMi4yLCAtNi42LCAtMy43LCAtNS43LCAtNi4wLCAtMTAuNCwgLTguNiwgLTkuNSwgLTUwLjAsIC0xNS41LCAtNTAuMCwgLTEzLjksIC03LjgsIC0xMC41LCAtOC43LCAtOS42LCAtNTAuMCwgLTE2LjUsIC0xNy4xLCAtMTQuOCwgLTEyLjEsIC0xOC45LCAtMTIuNCwgLTE3LjQsXSxcbiAgICAgICAgICAgIFstOC41LCAwLjgsIC05LjEsIC0wLjcsIC0xMC4xLCAtNy41LCAtOS4xLCAtOC4yLCAtMTEuNCwgLTMuMSwgLTExLjgsIC00LjQsIC0xNS41LCAtMTQuMywgLTE0LjgsIC0xNS40LCAtNi42LCAtNC43LCAtNy4xLCAtNS44LCAtMTIuNSwgLTEwLjMsIC0xMS4wLCAtMTIuMiwgLTEzLjQsIC0xMC42LCAtMTIuNSwgLTExLjgsIC0xNy40LCAtMTUuMSwgLTE3LjcsIC0xNS43LCAyLjksIDEyLjUsIDMuMSwgMTAuMywgLTcuNywgLTUuMiwgLTYuMiwgLTcuMywgLTUuNCwgLTEuNywgLTUuNCwgLTMuNywgLTExLjYsIC05LjEsIC0xMy4wLCAtMTAuOCwgLTUwLjAsIC0xMC4zLCAtNTAuMCwgLTExLjIsIC05LjgsIC04LjMsIC05LjEsIC05LjcsIC01MC4wLCAtMTIuNywgLTIwLjYsIC0xMy4xLCAtMTYuMCwgLTE2LjYsIC0xNy4wLCAtMTguNCxdLFxuICAgICAgICAgICAgWy01LjAsIC02LjQsIC0zLjQsIC01LjYsIC03LjUsIC05LjMsIC03LjEsIC04LjgsIC04LjgsIC03LjQsIC02LjksIC02LjksIC0xMS40LCAtMTUuMiwgLTkuNywgLTEzLjcsIC0xLjgsIC03LjgsIC0wLjgsIC03LjIsIC05LjQsIC0xMC42LCAtOC43LCAtMTEuMiwgLTEwLjAsIC0xMC4xLCAtNy44LCAtMTAuNSwgLTEzLjIsIC0xNC42LCAtMTMuMCwgLTE0LjUsIDkuMiwgMy4xLCAxMC44LCAzLjAsIC00LjUsIC02LjcsIC0yLjcsIC02LjcsIC01LjAsIC02LjgsIC0yLjUsIC02LjcsIC03LjUsIC0xMC40LCAtNy40LCAtMTAuMiwgLTUwLjAsIC0xNS41LCAtNTAuMCwgLTE0LjIsIC04LjksIC0xMC4yLCAtOC41LCAtMTAuMCwgLTUwLjAsIC0xNS42LCAtMTUuMywgLTE1LjUsIC0xMy4wLCAtMTguOCwgLTEyLjYsIC0xOC4zLF0sXG4gICAgICAgICAgICBbLTguMSwgLTEuMSwgLTguOSwgMS40LCAtOC42LCAtOS4yLCAtOS40LCAtNi44LCAtMTEuMCwgLTQuOSwgLTExLjUsIC0yLjYsIC0xMy43LCAtMTYuOCwgLTE0LjUsIC0xMi42LCAtNi4wLCAtNi43LCAtNy4yLCAtNC4yLCAtMTEuNiwgLTExLjksIC0xMS4yLCAtMTAuOSwgLTEzLjEsIC0xMi4yLCAtMTIuNSwgLTEwLjMsIC0xNi44LCAtMTcuMiwgLTE3LjgsIC0xNC42LCAzLjUsIDEwLjMsIDMuMCwgMTIuNCwgLTYuOSwgLTcuNSwgLTYuOCwgLTQuOSwgLTUuNCwgLTQuMiwgLTUuNCwgLTEuMywgLTEwLjgsIC0xMS41LCAtMTIuNCwgLTguMiwgLTUwLjAsIC0xMi41LCAtNTAuMCwgLTguOSwgLTkuMiwgLTEwLjAsIC05LjQsIC03LjksIC01MC4wLCAtMTQuMywgLTE5LjksIC0xMS40LCAtMTYuMiwgLTE5LjIsIC0xNS44LCAtMTUuOSxdLFxuICAgICAgICAgICAgWy02LjMsIC03LjQsIC04LjAsIC02LjAsIDIuOCwgLTAuNywgMC45LCAwLjMsIC03LjUsIC00LjQsIC04LjQsIC0zLjYsIC0zLjAsIC03LjcsIC0zLjcsIC02LjIsIC01LjMsIC0xMC4wLCAtNy4yLCAtOC45LCAtMC43LCAtMy4yLCAtMS44LCAtMi40LCAtOS45LCAtMTEuNywgLTkuNiwgLTkuOSwgLTYuMywgLTkuNywgLTguMCwgLTguNCwgLTMuMCwgLTcuNywgLTQuNSwgLTYuOSwgMTEuMywgOC4yLCA5LjQsIDkuMSwgLTEuMCwgLTMuMywgLTEuOCwgLTIuNCwgMS41LCAtMi4xLCAtMC40LCAtMS4xLCAtNTAuMCwgLTE0LjUsIC01MC4wLCAtMTIuOSwgMi44LCAtMC4wLCAxLjQsIDAuNywgLTUwLjAsIC04LjcsIC0xNC4xLCAtNy41LCAtNS4yLCAtMTIuNSwgLTYuNSwgLTEwLjcsXSxcbiAgICAgICAgICAgIFstOS45LCAtNS4wLCAtMTAuMCwgLTYuNSwgLTAuNywgMi42LCAtMC4yLCAwLjEsIC0xMC4zLCAtMS44LCAtOS45LCAtMy44LCAtNi40LCAtNC43LCAtNS44LCAtNi43LCAtOC4yLCAtOC4zLCAtOC4wLCAtMTAuMiwgLTMuOSwgLTEuMCwgLTIuNywgLTIuOSwgLTExLjcsIC04LjgsIC0xMS4wLCAtMTAuMSwgLTkuNSwgLTcuMywgLTkuNCwgLTguNywgLTcuMCwgLTUuMiwgLTYuNywgLTcuNSwgOC4yLCAxMS42LCA4LjgsIDkuMSwgLTMuNywgLTAuOSwgLTMuMSwgLTMuMCwgLTIuMCwgMS4yLCAtMi4zLCAtMS4zLCAtNTAuMCwgLTEyLjEsIC01MC4wLCAtMTIuNiwgMC4xLCAyLjUsIDAuNywgMC42LCAtNTAuMCwgLTYuMCwgLTE0LjgsIC03LjUsIC04LjYsIC05LjQsIC04LjUsIC0xMS4yLF0sXG4gICAgICAgICAgICBbLTcuNSwgLTYuMiwgLTcuMiwgLTYuMiwgMC45LCAwLjIsIDIuNSwgMC4yLCAtOC4zLCAtMy41LCAtNy4xLCAtMy43LCAtNC4xLCAtNi4zLCAtMy4xLCAtNi4zLCAtNS43LCAtOC45LCAtNS42LCAtOC40LCAtMi4zLCAtMi4yLCAwLjcsIC0yLjcsIC05LjgsIC04LjksIC03LjEsIC05LjMsIC03LjUsIC04LjIsIC02LjIsIC03LjksIC00LjMsIC02LjIsIC0yLjcsIC02LjgsIDkuNCwgOC44LCAxMi4xLCA4LjgsIC0yLjEsIC0yLjAsIDAuMSwgLTIuNCwgMC4wLCAtMS4xLCAxLjMsIC0wLjgsIC01MC4wLCAtMTEuOSwgLTUwLjAsIC0xMi42LCAxLjIsIDAuNywgMy41LCAwLjgsIC01MC4wLCAtNy4xLCAtMTIuNCwgLTcuMSwgLTcuMSwgLTEwLjYsIC01LjAsIC0xMC42LF0sXG4gICAgICAgICAgICBbLTkuMCwgLTYuNSwgLTEwLjAsIC00LjgsIDAuMSwgLTAuMSwgLTAuMywgMi40LCAtOS45LCAtMy41LCAtMTAuNiwgLTIuMCwgLTUuNCwgLTYuNiwgLTUuNiwgLTQuNCwgLTcuNiwgLTkuOSwgLTguNSwgLTguMiwgLTMuMCwgLTIuOCwgLTMuMCwgLTAuOSwgLTEyLjgsIC0xMS44LCAtMTAuNywgLTkuMywgLTguOCwgLTkuMiwgLTkuMiwgLTcuMSwgLTYuMiwgLTcuMywgLTYuNywgLTQuOSwgOS4xLCA5LjEsIDguOCwgMTEuMiwgLTMuMSwgLTMuMCwgLTMuMywgLTEuMCwgLTEuMSwgLTEuNCwgLTIuMCwgMS4yLCAtNTAuMCwgLTEyLjgsIC01MC4wLCAtMTAuOSwgMC44LCAwLjUsIDAuNywgMi4zLCAtNTAuMCwgLTcuNSwgLTE2LjUsIC01LjksIC03LjgsIC0xMS4xLCAtNy44LCAtOS4wLF0sXG4gICAgICAgICAgICBbLTcuMSwgLTUuNiwgLTkuMSwgLTUuMSwgLTUuOSwgLTguMCwgLTYuOSwgLTcuNCwgLTEuOSwgLTEuNiwgLTQuNywgLTEuNCwgLTkuNiwgLTE0LjYsIC0xMC40LCAtMTMuMCwgLTYuNywgLTEwLjgsIC05LjQsIC05LjksIC05LjEsIC0xMC41LCAtOS4xLCAtMTAuNCwgLTUuOSwgLTkuMywgLTcuOSwgLTguMSwgLTEyLjcsIC0xNS4wLCAtMTUuMSwgLTE0LjMsIC0yLjIsIC01LjQsIC01LjAsIC01LjQsIC0xLjAsIC0zLjcsIC0yLjEsIC0zLjEsIDEyLjgsIDkuNiwgMTEuMSwgMTAuMSwgLTQuOCwgLTkuNCwgLTguMSwgLTguNiwgLTUwLjAsIC0xOC4zLCAtNTAuMCwgLTE1LjQsIC01LjksIC03LjUsIC02LjYsIC03LjEsIC01MC4wLCAtOS41LCAtMTEuNywgLTguNCwgLTEyLjUsIC0xNy4zLCAtMTMuMiwgLTE1LjQsXSxcbiAgICAgICAgICAgIFstMTAuMiwgLTEuNiwgLTEwLjIsIC0zLjIsIC03LjMsIC00LjYsIC02LjUsIC02LjIsIC02LjcsIDMuMCwgLTYuOCwgMC44LCAtMTEuOSwgLTEwLjgsIC0xMS41LCAtMTIuMiwgLTkuNiwgLTcuMSwgLTkuNywgLTguNCwgLTkuOCwgLTguMSwgLTguMiwgLTkuNywgLTkuNCwgLTUuMCwgLTguMCwgLTcuMiwgLTE1LjIsIC0xMi44LCAtMTQuOSwgLTEzLjgsIC02LjYsIC0xLjcsIC02LjgsIC00LjIsIC0zLjMsIC0wLjksIC0yLjAsIC0zLjAsIDkuNiwgMTIuOCwgOS43LCAxMC41LCAtOC41LCAtNS42LCAtOS4zLCAtNy44LCAtNTAuMCwgLTEyLjcsIC01MC4wLCAtMTMuOCwgLTYuOCwgLTUuMSwgLTUuMywgLTYuNSwgLTUwLjAsIC00LjEsIC0xMi44LCAtNS44LCAtMTQuNCwgLTE0LjEsIC0xMy42LCAtMTQuOCxdLFxuICAgICAgICAgICAgWy04LjIsIC00LjcsIC03LjEsIC01LjAsIC02LjUsIC03LjcsIC01LjUsIC02LjksIC00LjEsIC0wLjgsIC0xLjIsIC0wLjksIC0xMC41LCAtMTIuOCwgLTguMiwgLTEzLjAsIC03LjUsIC0xMC4wLCAtNy4yLCAtOS43LCAtOS4yLCAtOS40LCAtNy4zLCAtMTAuMiwgLTYuNSwgLTguMCwgLTQuMywgLTguMCwgLTEzLjEsIC0xNC4xLCAtMTIuMiwgLTEzLjgsIC0zLjcsIC01LjQsIC0yLjUsIC01LjQsIC0xLjgsIC0zLjEsIDAuMSwgLTMuMywgMTEuMSwgOS43LCAxMi45LCA5LjgsIC01LjUsIC04LjEsIC01LjQsIC03LjgsIC01MC4wLCAtMTYuNCwgLTUwLjAsIC0xNC44LCAtNS45LCAtNy4xLCAtNC43LCAtNy4yLCAtNTAuMCwgLTguNCwgLTYuNCwgLTguMSwgLTEyLjEsIC0xNi4yLCAtMTAuMywgLTE1LjgsXSxcbiAgICAgICAgICAgIFstOS4yLCAtMy4wLCAtOS45LCAtMS4yLCAtNi41LCAtNi4xLCAtNi44LCAtNC40LCAtNi40LCAwLjksIC03LjAsIDMuMCwgLTExLjgsIC0xMy4wLCAtMTEuMSwgLTEwLjQsIC05LjMsIC05LjIsIC05LjgsIC02LjQsIC05LjUsIC05LjUsIC05LjQsIC04LjAsIC04LjEsIC04LjIsIC05LjQsIC01LjIsIC0xNC4yLCAtMTQuOSwgLTE0LjksIC0xMi4zLCAtNS43LCAtMy43LCAtNi43LCAtMS4zLCAtMi40LCAtMy4wLCAtMi40LCAtMS4wLCAxMC4xLCAxMC41LCA5LjgsIDEzLjEsIC03LjIsIC04LjAsIC04LjQsIC01LjAsIC01MC4wLCAtMTQuNywgLTUwLjAsIC0xMS40LCAtNi4zLCAtNi43LCAtNS44LCAtNS4wLCAtNTAuMCwgLTYuMSwgLTEzLjQsIC0zLjYsIC0xMy4wLCAtMTYuMCwgLTEzLjcsIC0xMy4zLF0sXG4gICAgICAgICAgICBbLTguMiwgLTEwLjgsIC0xMC4xLCAtOS44LCAtMC40LCAtMy42LCAtMS43LCAtMi45LCAtNy45LCAtOC40LCAtOS44LCAtOC4yLCA2LjIsIDIuMywgMC42LCAyLjksIC03LjEsIC0xMS42LCAtOS4yLCAtMTEuMSwgLTUuNiwgLTguMywgLTcuMiwgLTguNCwgLTEwLjcsIC0xMy42LCAtMTEuNCwgLTEyLjAsIDAuMCwgLTIuOCwgLTEuOCwgLTIuNCwgLTYuMCwgLTExLjYsIC03LjUsIC0xMC44LCAxLjUsIC0yLjAsIDAuMCwgLTEuMSwgLTQuOCwgLTguNSwgLTUuNSwgLTcuMiwgMTEuOSwgOC42LCAxMC4wLCA5LjAsIC01MC4wLCAtMTQuMiwgLTUwLjAsIC0xMi44LCAtNC4xLCAtNy40LCAtNS43LCAtNi41LCAtNTAuMCwgLTExLjAsIC0xNC4zLCAtOS45LCAxLjQsIC03LjksIC0wLjcsIC02LjgsXSxcbiAgICAgICAgICAgIFstMTIuNSwgLTguNywgLTEzLjAsIC05LjksIC0zLjksIC0xLjAsIC0zLjQsIC0yLjksIC0xMi41LCAtNi4zLCAtMTEuNiwgLTguMSwgMy4zLCA2LjAsIC0xLjYsIDMuOCwgLTEwLjUsIC0xMC4xLCAtMTEuMSwgLTExLjEsIC05LjAsIC02LjksIC04LjIsIC05LjEsIC0xNC4wLCAtMTEuNCwgLTEyLjMsIC0xMi4xLCAtMy4xLCAwLjIsIC0zLjIsIC0yLjIsIC0xMC40LCAtOS4xLCAtMTAuNCwgLTExLjUsIC0yLjEsIDEuMiwgLTEuMSwgLTEuNCwgLTkuNCwgLTUuNiwgLTguMSwgLTguMCwgOC42LCAxMi40LCA4LjYsIDkuNSwgLTUwLjAsIC0xMC40LCAtNTAuMCwgLTExLjYsIC03LjIsIC01LjcsIC03LjUsIC03LjQsIC01MC4wLCAtOC42LCAtMTUuNywgLTkuNywgLTMuMCwgLTMuNywgLTMuMiwgLTUuOSxdLFxuICAgICAgICAgICAgWy0xMS4xLCAtMTEuOSwgLTEwLjYsIC0xMS4zLCAtMi42LCAtNC4xLCAtMS43LCAtMy41LCAtMTEuNCwgLTkuNiwgLTkuNiwgLTkuMiwgMy43LCAyLjUsIDEuNiwgMi41LCAtOS42LCAtMTIuMywgLTkuNSwgLTExLjgsIC04LjAsIC05LjQsIC03LjIsIC05LjMsIC0xMy4zLCAtMTIuOCwgLTEwLjksIC0xMi42LCAtMS44LCAtMi45LCAtMC44LCAtMi45LCAtOC42LCAtMTMuMCwgLTcuNCwgLTEyLjQsIC0wLjQsIC0yLjMsIDEuMywgLTIuMCwgLTguMSwgLTkuMywgLTUuNCwgLTguNCwgMTAuMCwgOC42LCAxMS40LCA4LjksIC01MC4wLCAtMTMuNywgLTUwLjAsIC0xMy4yLCAtNi4xLCAtOC4xLCAtNS41LCAtNy41LCAtNTAuMCwgLTExLjMsIC0xMi43LCAtMTAuMSwgLTEuNiwgLTcuOCwgLTAuMywgLTcuMixdLFxuICAgICAgICAgICAgWy0xMS40LCAtMTAuMCwgLTEyLjcsIC04LjIsIC0zLjEsIC0zLjEsIC0yLjgsIC0wLjksIC0xMS43LCAtNy4zLCAtMTIuMSwgLTUuOCwgMy42LCAzLjYsIC0xLjEsIDUuOCwgLTkuNCwgLTExLjksIC0xMC43LCAtMTAuMCwgLTguNSwgLTguOCwgLTguMiwgLTYuNSwgLTEzLjksIC0xMy4wLCAtMTIuOSwgLTEwLjksIC0zLjEsIC0yLjMsIC0zLjIsIC0wLjIsIC05LjUsIC0xMC44LCAtMTAuMiwgLTguMiwgLTEuMSwgLTEuMywgLTAuOCwgMS4yLCAtOC42LCAtNy44LCAtNy44LCAtNS4wLCA5LjAsIDkuNSwgOC45LCAxMi4wLCAtNTAuMCwgLTEzLjAsIC01MC4wLCAtMTAuMywgLTYuMiwgLTcuMCwgLTcuMSwgLTUuNCwgLTUwLjAsIC05LjMsIC0xNC4wLCAtOC4yLCAtMi40LCAtNi4zLCAtMi40LCAtMy45LF0sXG4gICAgICAgICAgICBbLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgMzMuMywgLTUwLjAsIDMwLjYsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgMjkuMiwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsXSxcbiAgICAgICAgICAgIFstMTQuOCwgLTYuMiwgLTE0LjksIC03LjYsIC0xNC42LCAtMTEuNiwgLTEzLjAsIC0xMi4yLCAtMTQuMCwgLTkuMCwgLTE0LjEsIC0xMC4xLCAtMTMuNiwgLTExLjIsIC0xMi40LCAtMTIuNSwgLTguMSwgMi4yLCAtOC43LCAwLjQsIC0xNS4zLCAtMTEuMywgLTEzLjIsIC0xMy4zLCAtMTEuOSwgLTcuMiwgLTExLjgsIC03LjksIC0xMC43LCAtNy40LCAtMTAuOCwgLTguOSwgLTE1LjUsIC0xMC4zLCAtMTUuNSwgLTEyLjUsIC0xNC41LCAtMTIuMSwgLTExLjksIC0xMi44LCAtMTguMywgLTEyLjcsIC0xNi40LCAtMTQuNywgLTE0LjIsIC0xMC40LCAtMTMuNywgLTEzLjAsIC01MC4wLCAxNS4xLCAtNTAuMCwgMTMuMywgLTkuOSwgLTUuOCwgLTguOSwgLTcuNiwgLTUwLjAsIC0xLjUsIC03LjgsIC0zLjAsIC04LjEsIDMuNiwgLTkuNCwgMi4wLF0sXG4gICAgICAgICAgICBbLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgMzAuNiwgLTUwLjAsIDM1LjIsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgMjguNSwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsXSxcbiAgICAgICAgICAgIFstMTMuOCwgLTcuNSwgLTE0LjQsIC01LjEsIC0xMi42LCAtMTEuNiwgLTExLjUsIC0xMC4xLCAtMTMuMiwgLTkuNywgLTEyLjcsIC03LjQsIC0xMS45LCAtMTEuOSwgLTExLjUsIC0xMC4yLCAtNy4yLCAwLjksIC04LjYsIDIuNiwgLTE0LjEsIC0xMi44LCAtMTMuMywgLTExLjAsIC05LjcsIC04LjQsIC0xMS4yLCAtNS4zLCAtOS4zLCAtOC43LCAtOS45LCAtNy4xLCAtMTMuOSwgLTExLjIsIC0xNC4yLCAtOC45LCAtMTIuOSwgLTEyLjYsIC0xMi42LCAtMTAuOSwgLTE1LjQsIC0xMy44LCAtMTQuOCwgLTExLjQsIC0xMi44LCAtMTEuNiwgLTEzLjIsIC0xMC4zLCAtNTAuMCwgMTMuMywgLTUwLjAsIDE1LjIsIC04LjYsIC03LjAsIC04LjQsIC00LjgsIC01MC4wLCAtMy4wLCAtNy4xLCAtMC4xLCAtNy4zLCAyLjMsIC04LjcsIDMuOSxdLFxuICAgICAgICAgICAgWy03LjMsIC02LjMsIC04LjksIC01LjUsIDIuOSwgMC4yLCAxLjUsIDEuMiwgLTguNSwgLTIuMywgLTEwLjAsIC0xLjcsIC01LjYsIC0xMC41LCAtNS41LCAtOS42LCAtNC4zLCAtNy45LCAtNi4xLCAtNy4yLCAyLjMsIC0wLjYsIDAuNSwgLTAuMCwgLTguOSwgLTExLjAsIC05LjQsIC05LjMsIC00LjYsIC05LjQsIC03LjMsIC04LjEsIC03LjgsIC05LjgsIC04LjksIC05LjIsIDIuOCwgMC4xLCAxLjIsIDAuOCwgLTUuOSwgLTYuOCwgLTUuOSwgLTYuMywgLTQuMSwgLTcuMiwgLTYuMSwgLTYuMiwgLTUwLjAsIC05LjksIC01MC4wLCAtOC42LCAxMi41LCA5LjQsIDExLjAsIDkuOCwgLTUwLjAsIC00LjgsIC04LjcsIC0zLjUsIC0wLjAsIC04LjYsIC0yLjEsIC03LjAsXSxcbiAgICAgICAgICAgIFstMTAuMSwgLTQuMywgLTEwLjgsIC01LjgsIDAuMSwgMi4zLCAwLjcsIDAuNiwgLTEwLjQsIC0wLjIsIC0xMC44LCAtMi4wLCAtOC44LCAtOS4yLCAtOC4wLCAtOS43LCAtNi44LCAtNS45LCAtNy41LCAtNy4wLCAtMS40LCAyLjIsIC0wLjksIC0wLjQsIC0xMC44LCAtNy43LCAtOS44LCAtOC44LCAtOC45LCAtNy4zLCAtOS42LCAtOS4xLCAtMTAuNSwgLTguMywgLTEwLjIsIC0xMC4wLCAtMC4wLCAyLjUsIDAuNywgMC41LCAtNy41LCAtNS4xLCAtNy4xLCAtNi43LCAtNy40LCAtNS43LCAtOC4xLCAtNy4wLCAtNTAuMCwgLTUuOCwgLTUwLjAsIC03LjAsIDkuNCwgMTIuNywgMTAuMSwgMTAuMCwgLTUwLjAsIC0xLjUsIC0xMS4zLCAtMy4zLCAtNS40LCAtNC4yLCAtNS42LCAtNi44LF0sXG4gICAgICAgICAgICBbLTguNCwgLTYuMiwgLTguOSwgLTUuOSwgMS44LCAwLjQsIDIuNywgMS4yLCAtOS4xLCAtMS4yLCAtOC44LCAtMS41LCAtNy4yLCAtMTAuNSwgLTQuOSwgLTkuNiwgLTUuNywgLTcuNCwgLTUuNSwgLTcuNCwgMC4zLCAtMC4zLCAxLjgsIC0wLjQsIC05LjAsIC04LjcsIC03LjMsIC04LjksIC01LjksIC05LjQsIC02LjQsIC04LjcsIC04LjcsIC05LjEsIC04LjUsIC05LjQsIDEuNCwgMC43LCAzLjUsIDAuNywgLTYuNiwgLTUuMywgLTQuNywgLTUuOCwgLTUuNywgLTcuNSwgLTUuNSwgLTcuMSwgLTUwLjAsIC04LjksIC01MC4wLCAtOC40LCAxMS4wLCAxMC4xLCAxMy4yLCAxMC4yLCAtNTAuMCwgLTQuMiwgLTYuMSwgLTMuNiwgLTMuNSwgLTguNCwgLTEuMiwgLTYuOCxdLFxuICAgICAgICAgICAgWy05LjEsIC01LjQsIC0xMC40LCAtNC4yLCAxLjAsIDAuNSwgMC42LCAyLjQsIC05LjYsIC0xLjUsIC0xMC41LCAtMC41LCAtOC45LCAtMTAuNSwgLTcuMiwgLTguMywgLTYuMywgLTYuOSwgLTcuNywgLTUuMSwgLTAuNSwgMC4xLCAtMC42LCAyLjMsIC0xMS4xLCAtMTAuMiwgLTEwLjUsIC03LjAsIC04LjMsIC05LjQsIC05LjQsIC02LjYsIC05LjYsIC05LjcsIC0xMC4wLCAtNy45LCAwLjcsIDAuNiwgMC44LCAyLjMsIC03LjEsIC02LjUsIC03LjIsIC01LjAsIC02LjUsIC03LjQsIC03LjUsIC01LjQsIC01MC4wLCAtNy42LCAtNTAuMCwgLTQuOCwgOS44LCAxMC4wLCAxMC4yLCAxMi4xLCAtNTAuMCwgLTMuMSwgLTExLjQsIC0wLjcsIC00LjYsIC02LjYsIC00LjksIC0zLjksXSxcbiAgICAgICAgICAgIFstNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAyOS4yLCAtNTAuMCwgMjguNSwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAzMy4zLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCxdLFxuICAgICAgICAgICAgWy0xMy4wLCAtNy4wLCAtMTMuMSwgLTguMywgLTkuMiwgLTYuNSwgLTguOSwgLTcuNiwgLTkuOCwgLTAuNywgLTkuMiwgLTIuMSwgLTEyLjQsIC0xMC4zLCAtMTIuNCwgLTExLjYsIC05LjUsIC00LjYsIC0xMC40LCAtNS43LCAtMTMuNiwgLTEwLjEsIC0xMS40LCAtMTAuOSwgLTYuNSwgLTEuNSwgLTYuMiwgLTMuNiwgLTEyLjgsIC04LjAsIC0xMi4zLCAtOS43LCAtMTYuNSwgLTEyLjcsIC0xNS42LCAtMTQuMywgLTguNywgLTYuMCwgLTcuMSwgLTcuNSwgLTkuNSwgLTQuMSwgLTguNCwgLTYuMSwgLTExLjAsIC04LjYsIC0xMS4zLCAtOS4zLCAtNTAuMCwgLTEuNSwgLTUwLjAsIC0zLjAsIC00LjgsIC0xLjUsIC00LjIsIC0zLjEsIC01MC4wLCAxNi40LCAtNS4xLCAxNC4yLCAtMTAuMSwgLTQuMywgLTEwLjAsIC01LjQsXSxcbiAgICAgICAgICAgIFstMTMuNSwgLTE2LjMsIC0xMS44LCAtMTUuNSwgLTEzLjYsIC0xNS4zLCAtMTIuMSwgLTE2LjEsIC03LjcsIC0xMy4zLCAtNC4yLCAtMTIuNiwgLTE0LjEsIC0xNi4yLCAtMTAuMywgLTE1LjQsIC05LjYsIC0xMS42LCAtNy43LCAtOS44LCAtMTQuMywgLTE3LjUsIC0xMS4xLCAtMTcuMiwgLTUuMywgLTcuMSwgLTIuMiwgLTcuMSwgLTkuNiwgLTExLjksIC04LjcsIC0xMS40LCAtMTcuMSwgLTIwLjYsIC0xNS4zLCAtMTkuOSwgLTE0LjEsIC0xNC44LCAtMTIuNCwgLTE2LjUsIC0xMS43LCAtMTIuOCwgLTYuNCwgLTEzLjQsIC0xNC4zLCAtMTUuNywgLTEyLjcsIC0xNC4wLCAtNTAuMCwgLTcuOCwgLTUwLjAsIC03LjEsIC04LjcsIC0xMS4zLCAtNi4xLCAtMTEuNCwgLTUwLjAsIC01LjEsIDE4LjYsIC00LjgsIC04LjYsIC04LjEsIC00LjUsIC03LjMsXSxcbiAgICAgICAgICAgIFstMTIuNCwgLTguMiwgLTEzLjAsIC01LjksIC03LjcsIC03LjgsIC03LjQsIC01LjgsIC04LjgsIC0yLjAsIC05LjMsIC0wLjQsIC0xMS42LCAtMTEuMywgLTExLjYsIC05LjQsIC04LjksIC01LjYsIC0xMC4wLCAtMy4yLCAtMTEuNSwgLTExLjEsIC0xMC41LCAtOC4zLCAtNi4zLCAtNC45LCAtNi43LCAtMS4yLCAtMTAuNiwgLTkuNywgLTExLjMsIC04LjAsIC0xNC44LCAtMTMuMSwgLTE1LjUsIC0xMS40LCAtNy41LCAtNy41LCAtNy4xLCAtNS45LCAtOC40LCAtNS44LCAtOC4xLCAtMy42LCAtOS45LCAtOS43LCAtMTAuMSwgLTguMiwgLTUwLjAsIC0zLjAsIC01MC4wLCAtMC4xLCAtMy41LCAtMy4zLCAtMy42LCAtMC43LCAtNTAuMCwgMTQuMiwgLTQuOCwgMTYuNCwgLTguOSwgLTUuOCwgLTguOSwgLTMuNCxdLFxuICAgICAgICAgICAgWy0xMC43LCAtMTMuMiwgLTEyLjQsIC0xMS42LCAtNC44LCAtOC40LCAtNi4xLCAtNy4yLCAtMTAuMywgLTExLjgsIC0xMS4wLCAtMTEuNiwgMi44LCAtMS43LCAwLjcsIC0xLjEsIC02LjIsIC05LjcsIC03LjMsIC04LjQsIC01LjMsIC04LjYsIC02LjEsIC04LjMsIC0xMC41LCAtMTEuMiwgLTkuOCwgLTEwLjIsIDkuNSwgNi41LCA3LjYsIDYuOCwgLTEyLjEsIC0xNi4wLCAtMTMuMCwgLTE2LjIsIC01LjIsIC04LjYsIC03LjEsIC03LjgsIC0xMi41LCAtMTQuNCwgLTEyLjEsIC0xMy4wLCAxLjQsIC0zLjAsIC0xLjYsIC0yLjQsIC01MC4wLCAtOC4xLCAtNTAuMCwgLTcuMywgLTAuMCwgLTUuNCwgLTMuNSwgLTQuNiwgLTUwLjAsIC0xMC4xLCAtOC42LCAtOC45LCAxMy4yLCAtMC45LCA5LjcsIC0wLjMsXSxcbiAgICAgICAgICAgIFstMTguMSwgLTEyLjMsIC0xOS40LCAtMTQuMiwgLTEyLjIsIC05LjUsIC0xMS41LCAtMTAuOCwgLTE3LjksIC0xMS45LCAtMTguMiwgLTEzLjksIC02LjQsIC0zLjcsIC02LjgsIC01LjQsIC0xMi44LCAtNS45LCAtMTMuNiwgLTcuNCwgLTEzLjcsIC05LjksIC0xMi45LCAtMTIuNywgLTE2LjIsIC0xMS42LCAtMTUuMiwgLTEyLjcsIC0zLjIsIDAuNSwgLTMuMywgLTEuOCwgLTE4LjksIC0xNi42LCAtMTguOCwgLTE5LjIsIC0xMi41LCAtOS40LCAtMTAuNiwgLTExLjEsIC0xNy4zLCAtMTQuMSwgLTE2LjIsIC0xNi4wLCAtNy45LCAtMy43LCAtNy44LCAtNi4zLCAtNTAuMCwgMy42LCAtNTAuMCwgMi4zLCAtOC42LCAtNC4yLCAtOC40LCAtNi42LCAtNTAuMCwgLTQuMywgLTguMSwgLTUuOCwgLTAuOSwgMTQuMiwgLTEuOCwgMTEuNixdLFxuICAgICAgICAgICAgWy0xMS44LCAtMTMuMSwgLTExLjUsIC0xMi4wLCAtNi4yLCAtOC4zLCAtNS40LCAtNy40LCAtMTEuOCwgLTEyLjMsIC0xMS4xLCAtMTEuNCwgMC41LCAtMi41LCAyLjQsIC0xLjYsIC02LjgsIC05LjksIC02LjQsIC04LjksIC02LjEsIC04LjYsIC01LjAsIC03LjgsIC0xMC40LCAtMTEuNiwgLTguNSwgLTkuOSwgOC4yLCA2LjQsIDguNywgNi45LCAtMTIuNCwgLTE3LjAsIC0xMi42LCAtMTUuOCwgLTYuNSwgLTguNSwgLTUuMCwgLTcuOCwgLTEzLjIsIC0xMy42LCAtMTAuMywgLTEzLjcsIC0wLjcsIC0zLjIsIC0wLjMsIC0yLjQsIC01MC4wLCAtOS40LCAtNTAuMCwgLTguNywgLTIuMSwgLTUuNiwgLTEuMiwgLTQuOSwgLTUwLjAsIC0xMC4wLCAtNC41LCAtOC45LCA5LjcsIC0xLjgsIDExLjMsIC0wLjksXSxcbiAgICAgICAgICAgIFstMTcuMiwgLTEzLjMsIC0xNy44LCAtMTEuNiwgLTExLjAsIC0xMS4xLCAtMTAuNCwgLTkuMCwgLTE2LjAsIC0xMi43LCAtMTYuMSwgLTExLjEsIC01LjIsIC01LjQsIC02LjAsIC0zLjMsIC0xMS44LCAtNy4zLCAtMTMuMywgLTUuOSwgLTEyLjcsIC0xMS45LCAtMTEuOSwgLTkuMywgLTE1LjIsIC0xNS4wLCAtMTQuOSwgLTExLjAsIC0yLjgsIC0xLjgsIC0yLjksIDAuNCwgLTE3LjQsIC0xOC40LCAtMTguMywgLTE1LjksIC0xMC43LCAtMTEuMiwgLTEwLjYsIC05LjAsIC0xNS40LCAtMTQuOCwgLTE1LjgsIC0xMy4zLCAtNi44LCAtNS45LCAtNy4yLCAtMy45LCAtNTAuMCwgMi4wLCAtNTAuMCwgMy45LCAtNy4wLCAtNi44LCAtNi44LCAtMy45LCAtNTAuMCwgLTUuNCwgLTcuMywgLTMuNCwgLTAuMywgMTEuNiwgLTAuOSwgMTQuMSxdXTtcbiAgICAgICAgdGhpcy5UUkFOUyA9IFtbNSwgMCwgMCwgNF0sXG4gICAgICAgICAgICBbMCwgNSwgNCwgMF0sXG4gICAgICAgICAgICBbMCwgNCwgNSwgMF0sXG4gICAgICAgICAgICBbNCwgMCwgMCwgNV1dO1xuICAgICAgICB0aGlzLkNPTkJMTyA9IHsgJ0EnOiAwLCAnUic6IDEsICdOJzogMiwgJ0QnOiAzLCAnQyc6IDQsICdRJzogNSwgJ0UnOiA2LCAnRyc6IDcsICdIJzogOCwgJ0knOiA5LCAnTCc6IDEwLCAnSyc6IDExLCAnTSc6IDEyLCAnRic6IDEzLCAnUCc6IDE0LCAnUyc6IDE1LCAnVCc6IDE2LCAnVyc6IDE3LCAnWSc6IDE4LCAnVic6IDE5LCAnQic6IDIwLCAnWic6IDIxLCAnWCc6IDIyLCAnKic6IDIzIH07XG4gICAgICAgIHRoaXMuQ09OTlVDTCA9IHsgJ0EnOiAwLCAnVCc6IDEsICdDJzogMiwgJ0cnOiAzIH07XG4gICAgICAgIHRoaXMuQ09OU0NITiA9IHsgJ0FBQSc6IDAsICdBQUMnOiAxLCAnQUFHJzogMiwgJ0FBVCc6IDMsICdBQ0EnOiA0LCAnQUNDJzogNSwgJ0FDRyc6IDYsICdBQ1QnOiA3LCAnQUdBJzogOCwgJ0FHQyc6IDksICdBR0cnOiAxMCwgJ0FHVCc6IDExLCAnQVRBJzogMTIsICdBVEMnOiAxMywgJ0FURyc6IDE0LCAnQVRUJzogMTUsICdDQUEnOiAxNiwgJ0NBQyc6IDE3LCAnQ0FHJzogMTgsICdDQVQnOiAxOSwgJ0NDQSc6IDIwLCAnQ0NDJzogMjEsICdDQ0cnOiAyMiwgJ0NDVCc6IDIzLCAnQ0dBJzogMjQsICdDR0MnOiAyNSwgJ0NHRyc6IDI2LCAnQ0dUJzogMjcsICdDVEEnOiAyOCwgJ0NUQyc6IDI5LCAnQ1RHJzogMzAsICdDVFQnOiAzMSwgJ0dBQSc6IDMyLCAnR0FDJzogMzMsICdHQUcnOiAzNCwgJ0dBVCc6IDM1LCAnR0NBJzogMzYsICdHQ0MnOiAzNywgJ0dDRyc6IDM4LCAnR0NUJzogMzksICdHR0EnOiA0MCwgJ0dHQyc6IDQxLCAnR0dHJzogNDIsICdHR1QnOiA0MywgJ0dUQSc6IDQ0LCAnR1RDJzogNDUsICdHVEcnOiA0NiwgJ0dUVCc6IDQ3LCAnVEFBJzogNDgsICdUQUMnOiA0OSwgJ1RBRyc6IDUwLCAnVEFUJzogNTEsICdUQ0EnOiA1MiwgJ1RDQyc6IDUzLCAnVENHJzogNTQsICdUQ1QnOiA1NSwgJ1RHQSc6IDU2LCAnVEdDJzogNTcsICdUR0cnOiA1OCwgJ1RHVCc6IDU5LCAnVFRBJzogNjAsICdUVEMnOiA2MSwgJ1RURyc6IDYyLCAnVFRUJzogNjMgfTtcbiAgICAgICAgdGhpcy5zZXRNZXRob2QoYWxpZ25HcmlkXyk7XG4gICAgICAgIHRoaXMuc2V0U2VxdWVuY2VzKHNlcTFfLCBzZXEyXyk7XG4gICAgICAgIHRoaXMuc2V0R2FwKGdhcF8pO1xuICAgIH1cbiAgICBmaWxsTmVlZGxlbWFuKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSB0aGlzLmxlbjE7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bMF0udmFsdWUgPSAtaSAqIHRoaXMuZ2FwO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bMF0ucGFyZW50SSA9IGkgLSAxO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bMF0ucGFyZW50SiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5sZW4yOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkWzBdW2ldLnZhbHVlID0gLWkgKiB0aGlzLmdhcDtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkWzBdW2ldLnBhcmVudEkgPSAwO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbMF1baV0ucGFyZW50SiA9IGkgLSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZpbGxPbmUoaSwgaikge1xuICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS52YWx1ZSA9IE1hdGgubWF4KHRoaXMuZHBHcmlkW2kgLSAxXVtqIC0gMV0udmFsdWUgKyB0aGlzLnNjb3Jlc1tpIC0gMV1baiAtIDFdLCBNYXRoLm1heCh0aGlzLmRwR3JpZFtpIC0gMV1bal0udmFsdWUgLSB0aGlzLmdhcCwgdGhpcy5kcEdyaWRbaV1baiAtIDFdLnZhbHVlIC0gdGhpcy5nYXApKTtcbiAgICAgICAgaWYgKHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlID09IHRoaXMuZHBHcmlkW2kgLSAxXVtqIC0gMV0udmFsdWUgKyB0aGlzLnNjb3Jlc1tpIC0gMV1baiAtIDFdKSB7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJID0gaSAtIDE7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRKID0gaiAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5kcEdyaWRbaV1bal0udmFsdWUgPT0gdGhpcy5kcEdyaWRbaSAtIDFdW2pdLnZhbHVlIC0gdGhpcy5nYXApIHtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEkgPSBpIC0gMTtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEogPSBqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SSA9IGk7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRKID0gaiAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ3JpZEZyb21OYW1lKHBhdGgpIHtcbiAgICAgICAgc3dpdGNoIChwYXRoKSB7XG4gICAgICAgICAgICBjYXNlICdCTE9TVU00NSc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLkJMT1NVTTQ1O1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkxPU1VNNTAnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5CTE9TVU01MDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05CTE87XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JMT1NVTTYyJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuQkxPU1VNNjI7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCTE9TVU04MCc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLkJMT1NVTTgwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkxPU1VNOTAnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5CTE9TVU05MDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05CTE87XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1BBTTMwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuUEFNMzA7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQQU03MCc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLlBBTTcwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUEFNMjUwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuUEFNMjUwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTlVDTEVPVElERVMnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5OVUNMRU9USURFUztcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05OVUNMO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdUUkFOUyc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLlRSQU5TO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTk5VQ0w7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1NDSE5FSURFUic6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLlNDSE5FSURFUjtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05TQ0hOO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxsU2NvcmVzKCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdFJlc3VsdChpLCBqKSB7XG4gICAgICAgIGxldCByZXMxID0gXCJcIiwgcmVzMiA9IFwiXCIsIGdhcFMgPSBcIlwiO1xuICAgICAgICBsZXQgdG90YWwgPSB0aGlzLmRwR3JpZFtpXVtqXS52YWx1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0ZXA7IGkrKykge1xuICAgICAgICAgICAgZ2FwUyArPSAnfCc7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGkgPiAwIHx8IGogPiAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SSA9PSBpKSB7XG4gICAgICAgICAgICAgICAgcmVzMSA9IGdhcFMgKyByZXMxO1xuICAgICAgICAgICAgICAgIHJlczIgPSB0aGlzLnNlcTIuc3Vic3RyKChqIC0gMSkgKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCkgKyByZXMyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SiA9PSBqKSB7XG4gICAgICAgICAgICAgICAgcmVzMiA9IGdhcFMgKyByZXMyO1xuICAgICAgICAgICAgICAgIHJlczEgPSB0aGlzLnNlcTEuc3Vic3RyKChpIC0gMSkgKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCkgKyByZXMxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgLSAxID49IDApXG4gICAgICAgICAgICAgICAgICAgIHJlczEgPSB0aGlzLnNlcTEuc3Vic3RyKChpIC0gMSkgKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCkgKyByZXMxO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzMSA9IGdhcFMgKyByZXMxO1xuICAgICAgICAgICAgICAgIGlmIChqIC0gMSA+PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXMyID0gdGhpcy5zZXEyLnN1YnN0cigoaiAtIDEpICogdGhpcy5zdGVwLCB0aGlzLnN0ZXApICsgcmVzMjtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlczIgPSBnYXBTICsgcmVzMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0ZW1wSSA9IGk7XG4gICAgICAgICAgICBpID0gdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50STtcbiAgICAgICAgICAgIGogPSB0aGlzLmRwR3JpZFt0ZW1wSV1bal0ucGFyZW50SjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEFsaWduZWQocmVzMSwgcmVzMiwgdG90YWwpO1xuICAgIH1cbiAgICBmaWxsU2NvcmVzKCkge1xuICAgICAgICB0aGlzLnNjb3JlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuMTsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnNjb3Jlcy5wdXNoKFtdKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5sZW4yOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjb3Jlc1tpXS5wdXNoKHRoaXMuYWxpZ25HcmlkW3RoaXMuY29ubmVjdGlvbnNbdGhpcy5zZXExLnN1YnN0cihpICogdGhpcy5zdGVwLCB0aGlzLnN0ZXApXV1bdGhpcy5jb25uZWN0aW9uc1t0aGlzLnNlcTIuc3Vic3RyKGogKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCldXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdHlwZVJlYygpIHtcbiAgICAgICAgaWYgKC9bQVRHQ10qLy50ZXN0KHRoaXMuc2VxMSkgJiYgL1tBVEdDXSovLnRlc3QodGhpcy5zZXEyKSlcbiAgICAgICAgICAgIHJldHVybiBcIk5VQ0xFT1RJREVTXCI7XG4gICAgICAgIGlmICgvW0FSTkRDUUVHSElMS01GUFNUV1lWQlpYKl0qLy50ZXN0KHRoaXMuc2VxMSkgJiYgL1tBUk5EQ1FFR0hJTEtNRlBTVFdZVkJaWCpdKi8udGVzdCh0aGlzLnNlcTIpKVxuICAgICAgICAgICAgcmV0dXJuIFwiQkxPU1VNNjJcIjtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW4ndCByZWNvZ25pemUgc2VxdWVuY2UgdHlwZVwiKTtcbiAgICB9XG4gICAgbmVlZGxlbWFuV3VuY2goKSB7XG4gICAgICAgIHRoaXMuZHBHcmlkID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW4xICsgMTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcm93ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMubGVuMiArIDE7IGorKylcbiAgICAgICAgICAgICAgICByb3cucHVzaChuZXcgQ2VsbCgpKTtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGxOZWVkbGVtYW4oKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5sZW4xOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IHRoaXMubGVuMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxsT25lKGksIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFJlc3VsdCh0aGlzLmxlbjEsIHRoaXMubGVuMik7XG4gICAgfVxuICAgIHNtaXRoV2F0ZXJtYW4oKSB7XG4gICAgICAgIHRoaXMuZHBHcmlkID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW4xICsgMTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcm93ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMubGVuMiArIDE7IGorKylcbiAgICAgICAgICAgICAgICByb3cucHVzaChuZXcgQ2VsbCgpKTtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYmVzdFZhbCA9IDA7XG4gICAgICAgIGxldCBiZXN0SSA9IDAsIGJlc3RKID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5sZW4xOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IHRoaXMubGVuMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxsT25lKGksIGopO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRwR3JpZFtpXVtqXS52YWx1ZSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEogPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRwR3JpZFt0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJXVt0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRKXS52YWx1ZSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRKID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlID4gYmVzdFZhbCkge1xuICAgICAgICAgICAgICAgICAgICBiZXN0VmFsID0gdGhpcy5kcEdyaWRbaV1bal0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RJID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdEogPSBqO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RSZXN1bHQoYmVzdEksIGJlc3RKKTtcbiAgICB9XG4gICAgc2V0U2VxdWVuY2VzKHNlcTFfLCBzZXEyXykge1xuICAgICAgICB0aGlzLnNlcTEgPSBzZXExXztcbiAgICAgICAgdGhpcy5zZXEyID0gc2VxMl87XG4gICAgICAgIHRoaXMubGVuMSA9IHRoaXMuc2VxMS5sZW5ndGggLyB0aGlzLnN0ZXA7XG4gICAgICAgIHRoaXMubGVuMiA9IHRoaXMuc2VxMi5sZW5ndGggLyB0aGlzLnN0ZXA7XG4gICAgICAgIHRoaXMuZmlsbFNjb3JlcygpO1xuICAgIH1cbiAgICBzZXRHYXAoZ2FwXykge1xuICAgICAgICB0aGlzLmdhcCA9IGdhcF87XG4gICAgfVxuICAgIHNldE1ldGhvZChhbGlnbkdyaWRfID0gXCJcIikge1xuICAgICAgICBpZiAoYWxpZ25HcmlkXyA9PSBcIkFVVE9cIikge1xuICAgICAgICAgICAgYWxpZ25HcmlkXyA9IHRoaXMudHlwZVJlYygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZEZyb21OYW1lKGFsaWduR3JpZF8pO1xuICAgIH1cbn1cbiIsIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInd1XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInd1XCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcblxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cblxuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciBfdG9Db25zdW1hYmxlQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX3NsaWNlZFRvQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9TeW1ib2wkaXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9nZXRJdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oNDApW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX3JlZ2VuZXJhdG9yUnVudGltZSA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX09iamVjdCRrZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MClbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfU2V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NClbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfUHJvbWlzZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgd3UgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHd1KGl0ZXJhYmxlKSB7XG5cdCAgaWYgKCFpc0l0ZXJhYmxlKGl0ZXJhYmxlKSkge1xuXHQgICAgdGhyb3cgbmV3IEVycm9yKFwid3U6IGBcIiArIGl0ZXJhYmxlICsgXCJgIGlzIG5vdCBpdGVyYWJsZSFcIik7XG5cdCAgfVxuXHQgIHJldHVybiBuZXcgV3UoaXRlcmFibGUpO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIFd1KGl0ZXJhYmxlKSB7XG5cdCAgdmFyIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUpO1xuXHQgIHRoaXMubmV4dCA9IGl0ZXJhdG9yLm5leHQuYmluZChpdGVyYXRvcik7XG5cdH1cblx0d3UucHJvdG90eXBlID0gV3UucHJvdG90eXBlO1xuXG5cdHd1LnByb3RvdHlwZVtfU3ltYm9sJGl0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcblx0ICByZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKlxuXHQgKiBJbnRlcm5hbCB1dGlsaXRpZXNcblx0ICovXG5cblx0Ly8gQW4gaW50ZXJuYWwgcGxhY2Vob2xkZXIgdmFsdWUuXG5cdHZhciBNSVNTSU5HID0ge307XG5cblx0Ly8gUmV0dXJuIHdoZXRoZXIgYSB0aGluZyBpcyBpdGVyYWJsZS5cblx0dmFyIGlzSXRlcmFibGUgPSBmdW5jdGlvbiBpc0l0ZXJhYmxlKHRoaW5nKSB7XG5cdCAgcmV0dXJuIHRoaW5nICYmIHR5cGVvZiB0aGluZ1tfU3ltYm9sJGl0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xuXHR9O1xuXG5cdC8vIEdldCB0aGUgaXRlcmF0b3IgZm9yIHRoZSB0aGluZyBvciB0aHJvdyBhbiBlcnJvci5cblx0dmFyIGdldEl0ZXJhdG9yID0gZnVuY3Rpb24gZ2V0SXRlcmF0b3IodGhpbmcpIHtcblx0ICBpZiAoaXNJdGVyYWJsZSh0aGluZykpIHtcblx0ICAgIHJldHVybiBfZ2V0SXRlcmF0b3IodGhpbmcpO1xuXHQgIH1cblx0ICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGl0ZXJhYmxlOiBcIiArIHRoaW5nKTtcblx0fTtcblxuXHQvLyBEZWZpbmUgYSBzdGF0aWMgbWV0aG9kIG9uIGB3dWAgYW5kIHNldCBpdHMgcHJvdG90eXBlIHRvIHRoZSBzaGFyZWRcblx0Ly8gYFd1LnByb3RvdHlwZWAuXG5cdHZhciBzdGF0aWNNZXRob2QgPSBmdW5jdGlvbiBzdGF0aWNNZXRob2QobmFtZSwgZm4pIHtcblx0ICBmbi5wcm90b3R5cGUgPSBXdS5wcm90b3R5cGU7XG5cdCAgd3VbbmFtZV0gPSBmbjtcblx0fTtcblxuXHQvLyBEZWZpbmUgYSBmdW5jdGlvbiB0aGF0IGlzIGF0dGFjaGVkIGFzIGJvdGggYSBgV3UucHJvdG90eXBlYCBtZXRob2QgYW5kIGFcblx0Ly8gY3VycnlhYmxlIHN0YXRpYyBtZXRob2Qgb24gYHd1YCBkaXJlY3RseSB0aGF0IHRha2VzIGFuIGl0ZXJhYmxlIGFzIGl0cyBsYXN0XG5cdC8vIHBhcmFtZXRlci5cblx0dmFyIHByb3RvdHlwZUFuZFN0YXRpYyA9IGZ1bmN0aW9uIHByb3RvdHlwZUFuZFN0YXRpYyhuYW1lLCBmbikge1xuXHQgIHZhciBleHBlY3RlZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBmbi5sZW5ndGggOiBhcmd1bWVudHNbMl07XG5cdCAgcmV0dXJuIChmdW5jdGlvbiAoKSB7XG5cdCAgICBmbi5wcm90b3R5cGUgPSBXdS5wcm90b3R5cGU7XG5cdCAgICBXdS5wcm90b3R5cGVbbmFtZV0gPSBmbjtcblxuXHQgICAgLy8gKzEgZm9yIHRoZSBpdGVyYWJsZSwgd2hpY2ggaXMgdGhlIGB0aGlzYCB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gc28gaXRcblx0ICAgIC8vIGlzbid0IHJlZmxlY3RlZCBieSB0aGUgbGVuZ3RoIHByb3BlcnR5LlxuXHQgICAgZXhwZWN0ZWRBcmdzICs9IDE7XG5cblx0ICAgIHd1W25hbWVdID0gd3UuY3VycnlhYmxlKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgdmFyIF93dTtcblxuXHQgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuXHQgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG5cdCAgICAgIH1cblxuXHQgICAgICB2YXIgaXRlcmFibGUgPSBhcmdzLnBvcCgpO1xuXHQgICAgICByZXR1cm4gKF93dSA9IHd1KGl0ZXJhYmxlKSlbbmFtZV0uYXBwbHkoX3d1LCBhcmdzKTtcblx0ICAgIH0sIGV4cGVjdGVkQXJncyk7XG5cdCAgfSkoKTtcblx0fTtcblxuXHQvLyBBIGRlY29yYXRvciBmb3IgcmV3cmFwcGluZyBhIG1ldGhvZCdzIHJldHVybmVkIGl0ZXJhYmxlIGluIHd1IHRvIG1haW50YWluXG5cdC8vIGNoYWluYWJpbGl0eS5cblx0dmFyIHJld3JhcCA9IGZ1bmN0aW9uIHJld3JhcChmbikge1xuXHQgIHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdCAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuXHQgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG5cdCAgICB9XG5cblx0ICAgIHJldHVybiB3dShmbi5jYWxsLmFwcGx5KGZuLCBbdGhpc10uY29uY2F0KGFyZ3MpKSk7XG5cdCAgfTtcblx0fTtcblxuXHR2YXIgcmV3cmFwU3RhdGljTWV0aG9kID0gZnVuY3Rpb24gcmV3cmFwU3RhdGljTWV0aG9kKG5hbWUsIGZuKSB7XG5cdCAgcmV0dXJuIHN0YXRpY01ldGhvZChuYW1lLCByZXdyYXAoZm4pKTtcblx0fTtcblx0dmFyIHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyA9IGZ1bmN0aW9uIHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhuYW1lLCBmbiwgZXhwZWN0ZWRBcmdzKSB7XG5cdCAgcmV0dXJuIHByb3RvdHlwZUFuZFN0YXRpYyhuYW1lLCByZXdyYXAoZm4pLCBleHBlY3RlZEFyZ3MpO1xuXHR9O1xuXG5cdC8vIFJldHVybiBhIHdyYXBwZWQgdmVyc2lvbiBvZiBgZm5gIGJvdW5kIHdpdGggdGhlIGluaXRpYWwgYXJndW1lbnRzXG5cdC8vIGAuLi5hcmdzYC5cblx0ZnVuY3Rpb24gY3VycnkoZm4sIGFyZ3MpIHtcblx0ICByZXR1cm4gZnVuY3Rpb24gKCkge1xuXHQgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBtb3JlQXJncyA9IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG5cdCAgICAgIG1vcmVBcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG5cdCAgICB9XG5cblx0ICAgIHJldHVybiBmbi5jYWxsLmFwcGx5KGZuLCBbdGhpc10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcmdzKSwgbW9yZUFyZ3MpKTtcblx0ICB9O1xuXHR9XG5cblx0Lypcblx0ICogUHVibGljIHV0aWxpdGllc1xuXHQgKi9cblxuXHRzdGF0aWNNZXRob2QoXCJjdXJyeWFibGVcIiwgZnVuY3Rpb24gKGZuKSB7XG5cdCAgdmFyIGV4cGVjdGVkID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gZm4ubGVuZ3RoIDogYXJndW1lbnRzWzFdO1xuXHQgIHJldHVybiAoZnVuY3Rpb24gKCkge1xuXHQgICAgcmV0dXJuIGZ1bmN0aW9uIGYoKSB7XG5cdCAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG5cdCAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuXHQgICAgICB9XG5cblx0ICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoID49IGV4cGVjdGVkID8gZm4uYXBwbHkodGhpcywgYXJncykgOiBjdXJyeShmLCBhcmdzKTtcblx0ICAgIH07XG5cdCAgfSkoKTtcblx0fSk7XG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwiZW50cmllc1wiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChvYmopIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiwgX2RpZEl0ZXJhdG9yRXJyb3IsIF9pdGVyYXRvckVycm9yLCBfaXRlcmF0b3IsIF9zdGVwLCBrO1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yID0gX2dldEl0ZXJhdG9yKF9PYmplY3Qka2V5cyhvYmopKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBrID0gX3N0ZXAudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgcmV0dXJuIFtrLCBvYmpba11dO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTg7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvcltcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcikge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I7XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIxKTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTgpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTQsIDE4LCAyNl0sIFsxOSwsIDIxLCAyNV1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcImtleXNcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAob2JqKSB7XG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKF9PYmplY3Qka2V5cyhvYmopLCBcInQwXCIsIDEpO1xuXG5cdCAgICAgIGNhc2UgMTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcyk7XG5cdH0pKTtcblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJ2YWx1ZXNcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAob2JqKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yLCBfZGlkSXRlcmF0b3JFcnJvcjIsIF9pdGVyYXRvckVycm9yMiwgX2l0ZXJhdG9yMiwgX3N0ZXAyLCBrO1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMiA9IF9nZXRJdGVyYXRvcihfT2JqZWN0JGtleXMob2JqKSk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IChfc3RlcDIgPSBfaXRlcmF0b3IyLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgayA9IF9zdGVwMi52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICByZXR1cm4gb2JqW2tdO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMiA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTg7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiAmJiBfaXRlcmF0b3IyW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IyW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjIpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOCk7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pO1xuXHR9KSk7XG5cblx0Lypcblx0ICogSW5maW5pdGUgaXRlcmF0b3JzXG5cdCAqL1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcImN5Y2xlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBzYXZlZCwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMsIF9kaWRJdGVyYXRvckVycm9yMywgX2l0ZXJhdG9yRXJyb3IzLCBfaXRlcmF0b3IzLCBfc3RlcDMsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgc2F2ZWQgPSBbXTtcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IzID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IzID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA0O1xuXHQgICAgICAgIF9pdGVyYXRvcjMgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA2OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IChfc3RlcDMgPSBfaXRlcmF0b3IzLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMy52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMDpcblx0ICAgICAgICBzYXZlZC5wdXNoKHgpO1xuXG5cdCAgICAgIGNhc2UgMTE6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA2O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIwO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTY6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE2O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSg0KTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjMgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMyA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjA6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgJiYgX2l0ZXJhdG9yM1tcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yM1tcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIzOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMztcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IzKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjY7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjM7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIzKTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjApO1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgICAgaWYgKCFzYXZlZCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDMyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoc2F2ZWQsIFwidDFcIiwgMzApO1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI4O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMzI6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbNCwgMTYsIDIwLCAyOF0sIFsyMSwsIDIzLCAyN11dKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcImNvdW50XCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBzdGFydCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbMF07XG5cdCAgdmFyIHN0ZXAgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyAxIDogYXJndW1lbnRzWzFdO1xuXHQgIHZhciBuO1xuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBuID0gc3RhcnQ7XG5cblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICAgIGlmIChmYWxzZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDc7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNDtcblx0ICAgICAgICByZXR1cm4gbjtcblxuXHQgICAgICBjYXNlIDQ6XG5cdCAgICAgICAgbiArPSBzdGVwO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgNzpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcyk7XG5cdH0pKTtcblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJyZXBlYXRcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAodGhpbmcpIHtcblx0ICB2YXIgdGltZXMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IGFyZ3VtZW50c1sxXTtcblx0ICB2YXIgaTtcblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgaWYgKCEodGltZXMgPT09IEluZmluaXR5KSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDg7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICAgIGlmIChmYWxzZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNDtcblx0ICAgICAgICByZXR1cm4gdGhpbmc7XG5cblx0ICAgICAgY2FzZSA0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA4OlxuXHQgICAgICAgIGkgPSAwO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBpZiAoIShpIDwgdGltZXMpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgcmV0dXJuIHRoaW5nO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgaSsrO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA5O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTU6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMpO1xuXHR9KSk7XG5cblx0Lypcblx0ICogSXRlcmF0b3JzIHRoYXQgdGVybWluYXRlIG9uY2UgdGhlIGlucHV0IHNlcXVlbmNlIGhhcyBiZWVuIGV4aGF1c3RlZFxuXHQgKi9cblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJjaGFpblwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQsXG5cdCAgICAgIF9kaWRJdGVyYXRvckVycm9yNCxcblx0ICAgICAgX2l0ZXJhdG9yRXJyb3I0LFxuXHQgICAgICBfbGVuNSxcblx0ICAgICAgaXRlcmFibGVzLFxuXHQgICAgICBfa2V5NSxcblx0ICAgICAgX2l0ZXJhdG9yNCxcblx0ICAgICAgX3N0ZXA0LFxuXHQgICAgICBpdCxcblx0ICAgICAgYXJncyQxJDAgPSBhcmd1bWVudHM7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNCA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yNCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblxuXHQgICAgICAgIGZvciAoX2xlbjUgPSBhcmdzJDEkMC5sZW5ndGgsIGl0ZXJhYmxlcyA9IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG5cdCAgICAgICAgICBpdGVyYWJsZXNbX2tleTVdID0gYXJncyQxJDBbX2tleTVdO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIF9pdGVyYXRvcjQgPSBfZ2V0SXRlcmF0b3IoaXRlcmFibGVzKTtcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0gKF9zdGVwNCA9IF9pdGVyYXRvcjQubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpdCA9IF9zdGVwNC52YWx1ZTtcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChpdCwgXCJ0MFwiLCA5KTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA2O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE4O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE0O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQxID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjQgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yNCA9IGNvbnRleHQkMSQwLnQxO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgJiYgX2l0ZXJhdG9yNFtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yNFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3I0KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjQ7XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIxKTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTgpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTQsIDE4LCAyNl0sIFsxOSwsIDIxLCAyNV1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcImNodW5rXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gMiA6IGFyZ3VtZW50c1swXTtcblxuXHQgIHZhciBpdGVtcywgaW5kZXgsIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241LCBfZGlkSXRlcmF0b3JFcnJvcjUsIF9pdGVyYXRvckVycm9yNSwgX2l0ZXJhdG9yNSwgX3N0ZXA1LCBpdGVtO1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIGl0ZW1zID0gW107XG5cdCAgICAgICAgaW5kZXggPSAwO1xuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjUgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjUgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDU7XG5cdCAgICAgICAgX2l0ZXJhdG9yNSA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDc6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241ID0gKF9zdGVwNSA9IF9pdGVyYXRvcjUubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTg7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpdGVtID0gX3N0ZXA1LnZhbHVlO1xuXG5cdCAgICAgICAgaXRlbXNbaW5kZXgrK10gPSBpdGVtO1xuXG5cdCAgICAgICAgaWYgKCEoaW5kZXggPT09IG4pKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgcmV0dXJuIGl0ZW1zO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgaXRlbXMgPSBbXTtcblx0ICAgICAgICBpbmRleCA9IDA7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDc7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjQ7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDUpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNSA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I1ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI1O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSAmJiBfaXRlcmF0b3I1W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3I1W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI3O1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzMDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNTtcblxuXHQgICAgICBjYXNlIDMwOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjcpO1xuXG5cdCAgICAgIGNhc2UgMzE6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyNCk7XG5cblx0ICAgICAgY2FzZSAzMjpcblx0ICAgICAgICBpZiAoIWluZGV4KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzU7XG5cdCAgICAgICAgcmV0dXJuIGl0ZW1zO1xuXG5cdCAgICAgIGNhc2UgMzU6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbNSwgMjAsIDI0LCAzMl0sIFsyNSwsIDI3LCAzMV1dKTtcblx0fSksIDEpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcImNvbmNhdE1hcFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChmbikge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiwgX2RpZEl0ZXJhdG9yRXJyb3I2LCBfaXRlcmF0b3JFcnJvcjYsIF9pdGVyYXRvcjYsIF9zdGVwNiwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I2ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjYgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiA9IChfc3RlcDYgPSBfaXRlcmF0b3I2Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDExO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwNi52YWx1ZTtcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChmbih4KSwgXCJ0MFwiLCA4KTtcblxuXHQgICAgICBjYXNlIDg6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjYgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTE6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE3O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDEzO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQxID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjYgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yNiA9IGNvbnRleHQkMSQwLnQxO1xuXG5cdCAgICAgIGNhc2UgMTc6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE3O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjYgJiYgX2l0ZXJhdG9yNltcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yNltcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3I2KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjM7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjY7XG5cblx0ICAgICAgY2FzZSAyMzpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIwKTtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTcpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTMsIDE3LCAyNV0sIFsxOCwsIDIwLCAyNF1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcImRyb3BcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAobikge1xuXHQgIHZhciBpLCBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNywgX2RpZEl0ZXJhdG9yRXJyb3I3LCBfaXRlcmF0b3JFcnJvcjcsIF9pdGVyYXRvcjcsIF9zdGVwNywgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBpID0gMDtcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNyA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I3ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I3ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA0O1xuXHQgICAgICAgIF9pdGVyYXRvcjcgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA2OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNyA9IChfc3RlcDcgPSBfaXRlcmF0b3I3Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE2O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwNy52YWx1ZTtcblxuXHQgICAgICAgIGlmICghKGkrKyA8IG4pKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiY29udGludWVcIiwgMTMpO1xuXG5cdCAgICAgIGNhc2UgMTA6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImJyZWFrXCIsIDE2KTtcblxuXHQgICAgICBjYXNlIDEzOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb243ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oNCk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I3ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjcgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDIyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMjtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjM7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb243ICYmIF9pdGVyYXRvcjdbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjdbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjU7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yNykge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI4O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I3O1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyNSk7XG5cblx0ICAgICAgY2FzZSAyOTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIyKTtcblxuXHQgICAgICBjYXNlIDMwOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKHRoaXMsIFwidDFcIiwgMzEpO1xuXG5cdCAgICAgIGNhc2UgMzE6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbNCwgMTgsIDIyLCAzMF0sIFsyMywsIDI1LCAyOV1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcImRyb3BXaGlsZVwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgZm4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBCb29sZWFuIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb244LCBfZGlkSXRlcmF0b3JFcnJvcjgsIF9pdGVyYXRvckVycm9yOCwgX2l0ZXJhdG9yOCwgX3N0ZXA4LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb244ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjggPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjggPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yOCA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb244ID0gKF9zdGVwOCA9IF9pdGVyYXRvcjgubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXA4LnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKCFmbih4KSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiY29udGludWVcIiwgMTIpO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTE7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiYnJlYWtcIiwgMTUpO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjggPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTU6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIxO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTc6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE3O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjggPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yOCA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMjtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjggJiYgX2l0ZXJhdG9yOFtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yOFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNDtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3I4KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjc7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjg7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI0KTtcblxuXHQgICAgICBjYXNlIDI4OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjk6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQodGhpcywgXCJ0MVwiLCAzMCk7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNywgMjEsIDI5XSwgWzIyLCwgMjQsIDI4XV0pO1xuXHR9KSwgMSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiZW51bWVyYXRlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChfemlwKFt0aGlzLCB3dS5jb3VudCgpXSksIFwidDBcIiwgMSk7XG5cblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcImZpbHRlclwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgZm4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBCb29sZWFuIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb245LCBfZGlkSXRlcmF0b3JFcnJvcjksIF9pdGVyYXRvckVycm9yOSwgX2l0ZXJhdG9yOSwgX3N0ZXA5LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb245ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjkgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjkgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yOSA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb245ID0gKF9zdGVwOSA9IF9pdGVyYXRvcjkubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXA5LnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKCFmbih4KSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEwO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEwO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjkgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE5O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTU6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE1O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjkgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yOSA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTk6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjkgJiYgX2l0ZXJhdG9yOVtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yOVtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMjtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3I5KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjk7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIyKTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTkpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTUsIDE5LCAyN10sIFsyMCwsIDIyLCAyNl1dKTtcblx0fSksIDEpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcImZsYXR0ZW5cIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIHNoYWxsb3cgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGFyZ3VtZW50c1swXTtcblxuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTAsIF9kaWRJdGVyYXRvckVycm9yMTAsIF9pdGVyYXRvckVycm9yMTAsIF9pdGVyYXRvcjEwLCBfc3RlcDEwLCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMCA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMCA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTAgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTAgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTAgPSAoX3N0ZXAxMCA9IF9pdGVyYXRvcjEwLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE2O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTAudmFsdWU7XG5cblx0ICAgICAgICBpZiAoISh0eXBlb2YgeCAhPT0gXCJzdHJpbmdcIiAmJiBpc0l0ZXJhYmxlKHgpKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDExO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoc2hhbGxvdyA/IHggOiB3dSh4KS5mbGF0dGVuKCksIFwidDBcIiwgOSk7XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDExOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDEzOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMCA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjI7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTg7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDEgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTAgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTAgPSBjb250ZXh0JDEkMC50MTtcblxuXHQgICAgICBjYXNlIDIyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMjtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjM7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMCAmJiBfaXRlcmF0b3IxMFtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTBbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjU7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTApIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyODtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTA7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI1KTtcblxuXHQgICAgICBjYXNlIDI5OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjIpO1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTgsIDIyLCAzMF0sIFsyMywsIDI1LCAyOV1dKTtcblx0fSksIDEpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcImludm9rZVwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChuYW1lKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMSxcblx0ICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMSxcblx0ICAgICAgX2l0ZXJhdG9yRXJyb3IxMSxcblx0ICAgICAgX2xlbjYsXG5cdCAgICAgIGFyZ3MsXG5cdCAgICAgIF9rZXk2LFxuXHQgICAgICBfaXRlcmF0b3IxMSxcblx0ICAgICAgX3N0ZXAxMSxcblx0ICAgICAgeCxcblx0ICAgICAgYXJncyQxJDAgPSBhcmd1bWVudHM7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjExID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjExID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblxuXHQgICAgICAgIGZvciAoX2xlbjYgPSBhcmdzJDEkMC5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuNiA+IDEgPyBfbGVuNiAtIDEgOiAwKSwgX2tleTYgPSAxOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG5cdCAgICAgICAgICBhcmdzW19rZXk2IC0gMV0gPSBhcmdzJDEkMFtfa2V5Nl07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgX2l0ZXJhdG9yMTEgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA2OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTEgPSAoX3N0ZXAxMSA9IF9pdGVyYXRvcjExLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTEudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEwO1xuXHQgICAgICAgIHJldHVybiB4W25hbWVdLmFwcGx5KHgsIGFyZ3MpO1xuXG5cdCAgICAgIGNhc2UgMTA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjExID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEzOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxOTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNTtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMSA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMSA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTk6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjExICYmIF9pdGVyYXRvcjExW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxMVtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMjtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxMSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxMTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjIpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOSk7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNSwgMTksIDI3XSwgWzIwLCwgMjIsIDI2XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwibWFwXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKGZuKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMiwgX2RpZEl0ZXJhdG9yRXJyb3IxMiwgX2l0ZXJhdG9yRXJyb3IxMiwgX2l0ZXJhdG9yMTIsIF9zdGVwMTIsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEyID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjEyID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IxMiA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMiA9IChfc3RlcDEyID0gX2l0ZXJhdG9yMTIubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxMi52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICByZXR1cm4gZm4oeCk7XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMiA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTIgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTIgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMiAmJiBfaXRlcmF0b3IxMltcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTJbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTIpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTI7XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIxKTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTgpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTQsIDE4LCAyNl0sIFsxOSwsIDIxLCAyNV1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInBsdWNrXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKG5hbWUpIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEzLCBfZGlkSXRlcmF0b3JFcnJvcjEzLCBfaXRlcmF0b3JFcnJvcjEzLCBfaXRlcmF0b3IxMywgX3N0ZXAxMywgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTMgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTMgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjEzID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjEzID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEzID0gKF9zdGVwMTMgPSBfaXRlcmF0b3IxMy5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDEzLnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA5O1xuXHQgICAgICAgIHJldHVybiB4W25hbWVdO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTMgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE4O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE0O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjEzID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjEzID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTg7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTMgJiYgX2l0ZXJhdG9yMTNbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjEzW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjEzKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjEzO1xuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMSk7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE4KTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE0LCAxOCwgMjZdLCBbMTksLCAyMSwgMjVdXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJyZWR1Y3Rpb25zXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKGZuKSB7XG5cdCAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG5cblx0ICB2YXIgdmFsLCBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTQsIF9kaWRJdGVyYXRvckVycm9yMTQsIF9pdGVyYXRvckVycm9yMTQsIF9pdGVyYXRvcjE0LCBfc3RlcDE0LCB4LCBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTUsIF9kaWRJdGVyYXRvckVycm9yMTUsIF9pdGVyYXRvckVycm9yMTUsIF9pdGVyYXRvcjE1LCBfc3RlcDE1O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIHZhbCA9IGluaXRpYWw7XG5cblx0ICAgICAgICBpZiAoISh2YWwgPT09IHVuZGVmaW5lZCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyODtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNCA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxNCA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTQgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDU7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTQgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA3OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTQgPSAoX3N0ZXAxNCA9IF9pdGVyYXRvcjE0Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTQudmFsdWU7XG5cblx0ICAgICAgICB2YWwgPSB4O1xuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJicmVha1wiLCAxNCk7XG5cblx0ICAgICAgY2FzZSAxMTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTQgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA3O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIwO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTY6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE2O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSg1KTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE0ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE0ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTQgJiYgX2l0ZXJhdG9yMTRbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjE0W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjM6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIzO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjE0KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjY7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjE0O1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMyk7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIwKTtcblxuXHQgICAgICBjYXNlIDI4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzMDtcblx0ICAgICAgICByZXR1cm4gdmFsO1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE1ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE1ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxNSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMzM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTUgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSAzNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE1ID0gKF9zdGVwMTUgPSBfaXRlcmF0b3IxNS5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA0Mjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDE1LnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzOTtcblx0ICAgICAgICByZXR1cm4gdmFsID0gZm4odmFsLCB4KTtcblxuXHQgICAgICBjYXNlIDM5OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNSA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDM1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgNDI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDQ4O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgNDQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDQ0O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQxID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxNSA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxNSA9IGNvbnRleHQkMSQwLnQxO1xuXG5cdCAgICAgIGNhc2UgNDg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDQ4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA0OTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE1ICYmIF9pdGVyYXRvcjE1W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxNVtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDUxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA1MTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxNSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxNTtcblxuXHQgICAgICBjYXNlIDU0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goNTEpO1xuXG5cdCAgICAgIGNhc2UgNTU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCg0OCk7XG5cblx0ICAgICAgY2FzZSA1Njpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwicmV0dXJuXCIsIHZhbCk7XG5cblx0ICAgICAgY2FzZSA1Nzpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s1LCAxNiwgMjAsIDI4XSwgWzIxLCwgMjMsIDI3XSwgWzMzLCA0NCwgNDgsIDU2XSwgWzQ5LCwgNTEsIDU1XV0pO1xuXHR9KSwgMik7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwicmVqZWN0XCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IEJvb2xlYW4gOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE2LCBfZGlkSXRlcmF0b3JFcnJvcjE2LCBfaXRlcmF0b3JFcnJvcjE2LCBfaXRlcmF0b3IxNiwgX3N0ZXAxNiwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTYgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTYgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjE2ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE2ID0gKF9zdGVwMTYgPSBfaXRlcmF0b3IxNi5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDE2LnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKGZuKHgpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTYgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE5O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTU6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE1O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE2ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE2ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTYgJiYgX2l0ZXJhdG9yMTZbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjE2W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjE2KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjE2O1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMik7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE5KTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE1LCAxOSwgMjddLCBbMjAsLCAyMiwgMjZdXSk7XG5cdH0pLCAxKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJzbGljZVwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgc3RhcnQgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAwIDogYXJndW1lbnRzWzBdO1xuXHQgIHZhciBzdG9wID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gSW5maW5pdHkgOiBhcmd1bWVudHNbMV07XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE3LCBfZGlkSXRlcmF0b3JFcnJvcjE3LCBfaXRlcmF0b3JFcnJvcjE3LCBfaXRlcmF0b3IxNywgX3N0ZXAxNywgX3N0ZXAxNyR2YWx1ZSwgeCwgaTtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBpZiAoIShzdG9wIDwgc3RhcnQpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwicGFyYW1ldGVyIGBzdG9wYCAoPSBcIiArIHN0b3AgKyBcIikgbXVzdCBiZSA+PSBgc3RhcnRgICg9IFwiICsgc3RhcnQgKyBcIilcIik7XG5cblx0ICAgICAgY2FzZSAyOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNyA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxNyA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTcgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDU7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTcgPSBfZ2V0SXRlcmF0b3IodGhpcy5lbnVtZXJhdGUoKSk7XG5cblx0ICAgICAgY2FzZSA3OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTcgPSAoX3N0ZXAxNyA9IF9pdGVyYXRvcjE3Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIwO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgX3N0ZXAxNyR2YWx1ZSA9IF9zbGljZWRUb0FycmF5KF9zdGVwMTcudmFsdWUsIDIpO1xuXHQgICAgICAgIHggPSBfc3RlcDE3JHZhbHVlWzBdO1xuXHQgICAgICAgIGkgPSBfc3RlcDE3JHZhbHVlWzFdO1xuXG5cdCAgICAgICAgaWYgKCEoaSA8IHN0YXJ0KSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImNvbnRpbnVlXCIsIDE3KTtcblxuXHQgICAgICBjYXNlIDEzOlxuXHQgICAgICAgIGlmICghKGkgPj0gc3RvcCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJicmVha1wiLCAyMCk7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTc7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxNzpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTcgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA3O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMjA6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI2O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSg1KTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE3ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE3ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjY7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI3O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTcgJiYgX2l0ZXJhdG9yMTdbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjE3W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjk6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI5O1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjE3KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjE3O1xuXG5cdCAgICAgIGNhc2UgMzI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyOSk7XG5cblx0ICAgICAgY2FzZSAzMzpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI2KTtcblxuXHQgICAgICBjYXNlIDM0OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzUsIDIyLCAyNiwgMzRdLCBbMjcsLCAyOSwgMzNdXSk7XG5cdH0pLCAyKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJzcHJlYWRNYXBcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoZm4pIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE4LCBfZGlkSXRlcmF0b3JFcnJvcjE4LCBfaXRlcmF0b3JFcnJvcjE4LCBfaXRlcmF0b3IxOCwgX3N0ZXAxOCwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTggPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTggPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE4ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjE4ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE4ID0gKF9zdGVwMTggPSBfaXRlcmF0b3IxOC5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDE4LnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA5O1xuXHQgICAgICAgIHJldHVybiBmbi5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheSh4KSk7XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOCA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTggPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTggPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOCAmJiBfaXRlcmF0b3IxOFtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMThbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTgpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTg7XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIxKTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTgpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTQsIDE4LCAyNl0sIFsxOSwsIDIxLCAyNV1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInRha2VcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAobikge1xuXHQgIHZhciBpLCBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTksIF9kaWRJdGVyYXRvckVycm9yMTksIF9pdGVyYXRvckVycm9yMTksIF9pdGVyYXRvcjE5LCBfc3RlcDE5LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIGlmICghKG4gPCAxKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwicmV0dXJuXCIpO1xuXG5cdCAgICAgIGNhc2UgMjpcblx0ICAgICAgICBpID0gMDtcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTkgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTkgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE5ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA2O1xuXHQgICAgICAgIF9pdGVyYXRvcjE5ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgODpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE5ID0gKF9zdGVwMTkgPSBfaXRlcmF0b3IxOS5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDE5LnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGlmICghKCsraSA+PSBuKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImJyZWFrXCIsIDE3KTtcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOSA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjM7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDYpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTkgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTkgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDIzOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMztcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjQ7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOSAmJiBfaXRlcmF0b3IxOVtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTlbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjY7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyOTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTk7XG5cblx0ICAgICAgY2FzZSAyOTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI2KTtcblxuXHQgICAgICBjYXNlIDMwOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjMpO1xuXG5cdCAgICAgIGNhc2UgMzE6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbNiwgMTksIDIzLCAzMV0sIFsyNCwsIDI2LCAzMF1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInRha2VXaGlsZVwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgZm4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBCb29sZWFuIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMCwgX2RpZEl0ZXJhdG9yRXJyb3IyMCwgX2l0ZXJhdG9yRXJyb3IyMCwgX2l0ZXJhdG9yMjAsIF9zdGVwMjAsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIwID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIwID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyMCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IyMCA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMCA9IChfc3RlcDIwID0gX2l0ZXJhdG9yMjAubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAyMC52YWx1ZTtcblxuXHQgICAgICAgIGlmIChmbih4KSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiYnJlYWtcIiwgMTQpO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTE7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjAgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIwO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTY6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE2O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIwID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIwID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjAgJiYgX2l0ZXJhdG9yMjBbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjIwW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjM6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIzO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjIwKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjY7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjIwO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMyk7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIwKTtcblxuXHQgICAgICBjYXNlIDI4OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE2LCAyMCwgMjhdLCBbMjEsLCAyMywgMjddXSk7XG5cdH0pLCAxKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJ0YXBcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIGZuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gY29uc29sZS5sb2cuYmluZChjb25zb2xlKSA6IGFyZ3VtZW50c1swXTtcblxuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjEsIF9kaWRJdGVyYXRvckVycm9yMjEsIF9pdGVyYXRvckVycm9yMjEsIF9pdGVyYXRvcjIxLCBfc3RlcDIxLCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMSA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyMSA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjEgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMjEgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjEgPSAoX3N0ZXAyMSA9IF9pdGVyYXRvcjIxLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMjEudmFsdWU7XG5cblx0ICAgICAgICBmbih4KTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjEgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE5O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTU6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE1O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIxID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIxID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjEgJiYgX2l0ZXJhdG9yMjFbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjIxW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjIxKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjIxO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMik7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE5KTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE1LCAxOSwgMjddLCBbMjAsLCAyMiwgMjZdXSk7XG5cdH0pLCAxKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJ1bmlxdWVcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIHNlZW4sIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMiwgX2RpZEl0ZXJhdG9yRXJyb3IyMiwgX2l0ZXJhdG9yRXJyb3IyMiwgX2l0ZXJhdG9yMjIsIF9zdGVwMjIsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgc2VlbiA9IG5ldyBfU2V0KCk7XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIyID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIyID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyMiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNDtcblx0ICAgICAgICBfaXRlcmF0b3IyMiA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMiA9IChfc3RlcDIyID0gX2l0ZXJhdG9yMjIubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAyMi52YWx1ZTtcblxuXHQgICAgICAgIGlmIChzZWVuLmhhcyh4KSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDExO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTE6XG5cdCAgICAgICAgc2Vlbi5hZGQoeCk7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjIgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA2O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTU6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIxO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTc6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE3O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSg0KTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIyID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIyID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjIgJiYgX2l0ZXJhdG9yMjJbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjIyW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI0O1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjIyKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjc7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjIyO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyNCk7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIxKTtcblxuXHQgICAgICBjYXNlIDI5OlxuXHQgICAgICAgIHNlZW4uY2xlYXIoKTtcblxuXHQgICAgICBjYXNlIDMwOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzQsIDE3LCAyMSwgMjldLCBbMjIsLCAyNCwgMjhdXSk7XG5cdH0pKTtcblxuXHR2YXIgX3ppcCA9IHJld3JhcChfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChpdGVyYWJsZXMpIHtcblx0ICB2YXIgbG9uZ2VzdCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogYXJndW1lbnRzWzFdO1xuXG5cdCAgdmFyIGl0ZXJzLCBudW1JdGVycywgbnVtRmluaXNoZWQsIGZpbmlzaGVkLCB6aXBwZWQsIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMywgX2RpZEl0ZXJhdG9yRXJyb3IyMywgX2l0ZXJhdG9yRXJyb3IyMywgX2l0ZXJhdG9yMjMsIF9zdGVwMjMsIGl0LCBfaXQkbmV4dCwgdmFsdWUsIGRvbmU7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgaWYgKGl0ZXJhYmxlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcInJldHVyblwiKTtcblxuXHQgICAgICBjYXNlIDI6XG5cdCAgICAgICAgaXRlcnMgPSBpdGVyYWJsZXMubWFwKGdldEl0ZXJhdG9yKTtcblx0ICAgICAgICBudW1JdGVycyA9IGl0ZXJhYmxlcy5sZW5ndGg7XG5cdCAgICAgICAgbnVtRmluaXNoZWQgPSAwO1xuXHQgICAgICAgIGZpbmlzaGVkID0gZmFsc2U7XG5cblx0ICAgICAgY2FzZSA2OlxuXHQgICAgICAgIGlmIChmaW5pc2hlZCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDQ0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgemlwcGVkID0gW107XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIzID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIzID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyMyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTE7XG5cdCAgICAgICAgX2l0ZXJhdG9yMjMgPSBfZ2V0SXRlcmF0b3IoaXRlcnMpO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMyA9IChfc3RlcDIzID0gX2l0ZXJhdG9yMjMubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjY7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpdCA9IF9zdGVwMjMudmFsdWU7XG5cdCAgICAgICAgX2l0JG5leHQgPSBpdC5uZXh0KCk7XG5cdCAgICAgICAgdmFsdWUgPSBfaXQkbmV4dC52YWx1ZTtcblx0ICAgICAgICBkb25lID0gX2l0JG5leHQuZG9uZTtcblxuXHQgICAgICAgIGlmICghZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKGxvbmdlc3QpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJyZXR1cm5cIik7XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBpZiAoKytudW1GaW5pc2hlZCA9PSBudW1JdGVycykge1xuXHQgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIyOlxuXHQgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAvLyBMZWF2ZSBhIGhvbGUgaW4gdGhlIGFycmF5IHNvIHRoYXQgeW91IGNhbiBkaXN0aW5ndWlzaCBhbiBpdGVyYWJsZVxuXHQgICAgICAgICAgLy8gdGhhdCdzIGRvbmUgKHZpYSBgaW5kZXggaW4gYXJyYXkgPT0gZmFsc2VgKSBmcm9tIGFuIGl0ZXJhYmxlXG5cdCAgICAgICAgICAvLyB5aWVsZGluZyBgdW5kZWZpbmVkYC5cblx0ICAgICAgICAgIHppcHBlZC5sZW5ndGgrKztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgemlwcGVkLnB1c2godmFsdWUpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIzOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMyA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDMyO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgxMSk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyMyA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyMyA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMzI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDMyO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzMztcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIzICYmIF9pdGVyYXRvcjIzW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IyM1tcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDM1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzNTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IyMykge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDM4O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyMztcblxuXHQgICAgICBjYXNlIDM4OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMzUpO1xuXG5cdCAgICAgIGNhc2UgMzk6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgzMik7XG5cblx0ICAgICAgY2FzZSA0MDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNDI7XG5cdCAgICAgICAgcmV0dXJuIHppcHBlZDtcblxuXHQgICAgICBjYXNlIDQyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA2O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgNDQ6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMTEsIDI4LCAzMiwgNDBdLCBbMzMsLCAzNSwgMzldXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJ6aXBcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCBpdGVyYWJsZXMgPSBBcnJheShfbGVuNyksIF9rZXk3ID0gMDsgX2tleTcgPCBfbGVuNzsgX2tleTcrKykge1xuXHQgICAgaXRlcmFibGVzW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG5cdCAgfVxuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKF96aXAoaXRlcmFibGVzKSwgXCJ0MFwiLCAxKTtcblxuXHQgICAgICBjYXNlIDE6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMpO1xuXHR9KSk7XG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwiemlwTG9uZ2VzdFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICBmb3IgKHZhciBfbGVuOCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZXJhYmxlcyA9IEFycmF5KF9sZW44KSwgX2tleTggPSAwOyBfa2V5OCA8IF9sZW44OyBfa2V5OCsrKSB7XG5cdCAgICBpdGVyYWJsZXNbX2tleThdID0gYXJndW1lbnRzW19rZXk4XTtcblx0ICB9XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoX3ppcChpdGVyYWJsZXMsIHRydWUpLCBcInQwXCIsIDEpO1xuXG5cdCAgICAgIGNhc2UgMTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcyk7XG5cdH0pKTtcblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJ6aXBXaXRoXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKGZuKSB7XG5cdCAgZm9yICh2YXIgX2xlbjkgPSBhcmd1bWVudHMubGVuZ3RoLCBpdGVyYWJsZXMgPSBBcnJheShfbGVuOSA+IDEgPyBfbGVuOSAtIDEgOiAwKSwgX2tleTkgPSAxOyBfa2V5OSA8IF9sZW45OyBfa2V5OSsrKSB7XG5cdCAgICBpdGVyYWJsZXNbX2tleTkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5OV07XG5cdCAgfVxuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKF96aXAoaXRlcmFibGVzKS5zcHJlYWRNYXAoZm4pLCBcInQwXCIsIDEpO1xuXG5cdCAgICAgIGNhc2UgMTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcyk7XG5cdH0pKTtcblxuXHQvKlxuXHQgKiBGdW5jdGlvbnMgdGhhdCBmb3JjZSBpdGVyYXRpb24gdG8gY29tcGxldGlvbiBhbmQgcmV0dXJuIGEgdmFsdWUuXG5cdCAqL1xuXG5cdC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgd2Ugd2lsbCBibG9jayB0aGUgbWFpbiB0aHJlYWQgYXQgYSB0aW1lXG5cdC8vIHdoaWxlIGluIGBhc3luY0VhY2hgLlxuXHR3dS5NQVhfQkxPQ0sgPSAxNTtcblx0Ly8gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8geWllbGQgdG8gdGhlIG1haW4gdGhyZWFkIGJldHdlZW4gYnVyc3RzIG9mXG5cdC8vIHdvcmsuXG5cdHd1LlRJTUVPVVQgPSAxO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcImFzeW5jRWFjaFwiLCBmdW5jdGlvbiAoZm4pIHtcblx0ICB2YXIgbWF4QmxvY2sgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB3dS5NQVhfQkxPQ0sgOiBhcmd1bWVudHNbMV07XG5cdCAgdmFyIHRpbWVvdXQgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyB3dS5USU1FT1VUIDogYXJndW1lbnRzWzJdO1xuXG5cdCAgdmFyIGl0ZXIgPSBnZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgIHJldHVybiBuZXcgX1Byb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHQgICAgKGZ1bmN0aW9uIGxvb3AoKSB7XG5cdCAgICAgIHZhciBzdGFydCA9IERhdGUubm93KCk7XG5cblx0ICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNCA9IHRydWU7XG5cdCAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjI0ID0gZmFsc2U7XG5cdCAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjI0ID0gdW5kZWZpbmVkO1xuXG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMjQgPSBfZ2V0SXRlcmF0b3IoaXRlciksIF9zdGVwMjQ7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI0ID0gKF9zdGVwMjQgPSBfaXRlcmF0b3IyNC5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjQgPSB0cnVlKSB7XG5cdCAgICAgICAgICB2YXIgeCA9IF9zdGVwMjQudmFsdWU7XG5cblx0ICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIGZuKHgpO1xuXHQgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICByZWplY3QoZSk7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgIH1cblxuXHQgICAgICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydCA+IG1heEJsb2NrKSB7XG5cdCAgICAgICAgICAgIHNldFRpbWVvdXQobG9vcCwgdGltZW91dCk7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjQgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjQgPSBlcnI7XG5cdCAgICAgIH0gZmluYWxseSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI0ICYmIF9pdGVyYXRvcjI0W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICAgIF9pdGVyYXRvcjI0W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjI0KSB7XG5cdCAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjQ7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgcmVzb2x2ZSgpO1xuXHQgICAgfSkoKTtcblx0ICB9KTtcblx0fSwgMyk7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwiZXZlcnlcIiwgZnVuY3Rpb24gKCkge1xuXHQgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IEJvb2xlYW4gOiBhcmd1bWVudHNbMF07XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNSA9IHRydWU7XG5cdCAgdmFyIF9kaWRJdGVyYXRvckVycm9yMjUgPSBmYWxzZTtcblx0ICB2YXIgX2l0ZXJhdG9yRXJyb3IyNSA9IHVuZGVmaW5lZDtcblxuXHQgIHRyeSB7XG5cdCAgICBmb3IgKHZhciBfaXRlcmF0b3IyNSA9IF9nZXRJdGVyYXRvcih0aGlzKSwgX3N0ZXAyNTsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjUgPSAoX3N0ZXAyNSA9IF9pdGVyYXRvcjI1Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNSA9IHRydWUpIHtcblx0ICAgICAgdmFyIHggPSBfc3RlcDI1LnZhbHVlO1xuXG5cdCAgICAgIGlmICghZm4oeCkpIHtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9IGNhdGNoIChlcnIpIHtcblx0ICAgIF9kaWRJdGVyYXRvckVycm9yMjUgPSB0cnVlO1xuXHQgICAgX2l0ZXJhdG9yRXJyb3IyNSA9IGVycjtcblx0ICB9IGZpbmFsbHkge1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjUgJiYgX2l0ZXJhdG9yMjVbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICBfaXRlcmF0b3IyNVtcInJldHVyblwiXSgpO1xuXHQgICAgICB9XG5cdCAgICB9IGZpbmFsbHkge1xuXHQgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyNSkge1xuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjU7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gdHJ1ZTtcblx0fSwgMSk7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwiZmluZFwiLCBmdW5jdGlvbiAoZm4pIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI2ID0gdHJ1ZTtcblx0ICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyNiA9IGZhbHNlO1xuXHQgIHZhciBfaXRlcmF0b3JFcnJvcjI2ID0gdW5kZWZpbmVkO1xuXG5cdCAgdHJ5IHtcblx0ICAgIGZvciAodmFyIF9pdGVyYXRvcjI2ID0gX2dldEl0ZXJhdG9yKHRoaXMpLCBfc3RlcDI2OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNiA9IChfc3RlcDI2ID0gX2l0ZXJhdG9yMjYubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI2ID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgeCA9IF9zdGVwMjYudmFsdWU7XG5cblx0ICAgICAgaWYgKGZuKHgpKSB7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9IGNhdGNoIChlcnIpIHtcblx0ICAgIF9kaWRJdGVyYXRvckVycm9yMjYgPSB0cnVlO1xuXHQgICAgX2l0ZXJhdG9yRXJyb3IyNiA9IGVycjtcblx0ICB9IGZpbmFsbHkge1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjYgJiYgX2l0ZXJhdG9yMjZbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICBfaXRlcmF0b3IyNltcInJldHVyblwiXSgpO1xuXHQgICAgICB9XG5cdCAgICB9IGZpbmFsbHkge1xuXHQgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyNikge1xuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjY7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdH0pO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcImZvckVhY2hcIiwgZnVuY3Rpb24gKGZuKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNyA9IHRydWU7XG5cdCAgdmFyIF9kaWRJdGVyYXRvckVycm9yMjcgPSBmYWxzZTtcblx0ICB2YXIgX2l0ZXJhdG9yRXJyb3IyNyA9IHVuZGVmaW5lZDtcblxuXHQgIHRyeSB7XG5cdCAgICBmb3IgKHZhciBfaXRlcmF0b3IyNyA9IF9nZXRJdGVyYXRvcih0aGlzKSwgX3N0ZXAyNzsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjcgPSAoX3N0ZXAyNyA9IF9pdGVyYXRvcjI3Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNyA9IHRydWUpIHtcblx0ICAgICAgdmFyIHggPSBfc3RlcDI3LnZhbHVlO1xuXG5cdCAgICAgIGZuKHgpO1xuXHQgICAgfVxuXHQgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgX2RpZEl0ZXJhdG9yRXJyb3IyNyA9IHRydWU7XG5cdCAgICBfaXRlcmF0b3JFcnJvcjI3ID0gZXJyO1xuXHQgIH0gZmluYWxseSB7XG5cdCAgICB0cnkge1xuXHQgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNyAmJiBfaXRlcmF0b3IyN1tcInJldHVyblwiXSkge1xuXHQgICAgICAgIF9pdGVyYXRvcjI3W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgIH1cblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjI3KSB7XG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyNztcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0fSk7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwiaGFzXCIsIGZ1bmN0aW9uICh0aGluZykge1xuXHQgIHJldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24gKHgpIHtcblx0ICAgIHJldHVybiB4ID09PSB0aGluZztcblx0ICB9KTtcblx0fSk7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwicmVkdWNlXCIsIGZ1bmN0aW9uIChmbikge1xuXHQgIHZhciBpbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuXG5cdCAgdmFyIHZhbCA9IGluaXRpYWw7XG5cdCAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI4ID0gdHJ1ZTtcblx0ICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjI4ID0gZmFsc2U7XG5cdCAgICB2YXIgX2l0ZXJhdG9yRXJyb3IyOCA9IHVuZGVmaW5lZDtcblxuXHQgICAgdHJ5IHtcblx0ICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMjggPSBfZ2V0SXRlcmF0b3IodGhpcyksIF9zdGVwMjg7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI4ID0gKF9zdGVwMjggPSBfaXRlcmF0b3IyOC5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjggPSB0cnVlKSB7XG5cdCAgICAgICAgdmFyIHggPSBfc3RlcDI4LnZhbHVlO1xuXG5cdCAgICAgICAgdmFsID0geDtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgfVxuXHQgICAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICAgIF9kaWRJdGVyYXRvckVycm9yMjggPSB0cnVlO1xuXHQgICAgICBfaXRlcmF0b3JFcnJvcjI4ID0gZXJyO1xuXHQgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yOCAmJiBfaXRlcmF0b3IyOFtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMjhbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0gZmluYWxseSB7XG5cdCAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMjgpIHtcblx0ICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjg7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yOSA9IHRydWU7XG5cdCAgdmFyIF9kaWRJdGVyYXRvckVycm9yMjkgPSBmYWxzZTtcblx0ICB2YXIgX2l0ZXJhdG9yRXJyb3IyOSA9IHVuZGVmaW5lZDtcblxuXHQgIHRyeSB7XG5cdCAgICBmb3IgKHZhciBfaXRlcmF0b3IyOSA9IF9nZXRJdGVyYXRvcih0aGlzKSwgX3N0ZXAyOTsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjkgPSAoX3N0ZXAyOSA9IF9pdGVyYXRvcjI5Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yOSA9IHRydWUpIHtcblx0ICAgICAgdmFyIHggPSBfc3RlcDI5LnZhbHVlO1xuXG5cdCAgICAgIHZhbCA9IGZuKHZhbCwgeCk7XG5cdCAgICB9XG5cdCAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICBfZGlkSXRlcmF0b3JFcnJvcjI5ID0gdHJ1ZTtcblx0ICAgIF9pdGVyYXRvckVycm9yMjkgPSBlcnI7XG5cdCAgfSBmaW5hbGx5IHtcblx0ICAgIHRyeSB7XG5cdCAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI5ICYmIF9pdGVyYXRvcjI5W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgX2l0ZXJhdG9yMjlbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgfVxuXHQgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMjkpIHtcblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI5O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHZhbDtcblx0fSwgMik7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwic29tZVwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgdmFyIGZuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gQm9vbGVhbiA6IGFyZ3VtZW50c1swXTtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMwID0gdHJ1ZTtcblx0ICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IzMCA9IGZhbHNlO1xuXHQgIHZhciBfaXRlcmF0b3JFcnJvcjMwID0gdW5kZWZpbmVkO1xuXG5cdCAgdHJ5IHtcblx0ICAgIGZvciAodmFyIF9pdGVyYXRvcjMwID0gX2dldEl0ZXJhdG9yKHRoaXMpLCBfc3RlcDMwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zMCA9IChfc3RlcDMwID0gX2l0ZXJhdG9yMzAubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMwID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgeCA9IF9zdGVwMzAudmFsdWU7XG5cblx0ICAgICAgaWYgKGZuKHgpKSB7XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9IGNhdGNoIChlcnIpIHtcblx0ICAgIF9kaWRJdGVyYXRvckVycm9yMzAgPSB0cnVlO1xuXHQgICAgX2l0ZXJhdG9yRXJyb3IzMCA9IGVycjtcblx0ICB9IGZpbmFsbHkge1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMzAgJiYgX2l0ZXJhdG9yMzBbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICBfaXRlcmF0b3IzMFtcInJldHVyblwiXSgpO1xuXHQgICAgICB9XG5cdCAgICB9IGZpbmFsbHkge1xuXHQgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IzMCkge1xuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMzA7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gZmFsc2U7XG5cdH0sIDEpO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcInRvQXJyYXlcIiwgZnVuY3Rpb24gKCkge1xuXHQgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMpKTtcblx0fSk7XG5cblx0Lypcblx0ICogTWV0aG9kcyB0aGF0IHJldHVybiBhbiBhcnJheSBvZiBpdGVyYWJsZXMuXG5cdCAqL1xuXG5cdHZhciBNQVhfQ0FDSEUgPSA1MDA7XG5cblx0dmFyIF90ZWUgPSByZXdyYXAoX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoaXRlcmF0b3IsIGNhY2hlKSB7XG5cdCAgdmFyIGl0ZW1zLCBpbmRleCwgX2l0ZXJhdG9yJG5leHQsIGRvbmUsIHZhbHVlO1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIGl0ZW1zID0gY2FjaGUuaXRlbXM7XG5cdCAgICAgICAgaW5kZXggPSAwO1xuXG5cdCAgICAgIGNhc2UgMjpcblx0ICAgICAgICBpZiAoZmFsc2UpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmICghKGluZGV4ID09PSBpdGVtcy5sZW5ndGgpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBfaXRlcmF0b3IkbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcblx0ICAgICAgICBkb25lID0gX2l0ZXJhdG9yJG5leHQuZG9uZTtcblx0ICAgICAgICB2YWx1ZSA9IF9pdGVyYXRvciRuZXh0LnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKCFkb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAoY2FjaGUucmV0dXJuZWQgPT09IE1JU1NJTkcpIHtcblx0ICAgICAgICAgIGNhY2hlLnJldHVybmVkID0gdmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJicmVha1wiLCAyNSk7XG5cblx0ICAgICAgY2FzZSAxMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgcmV0dXJuIGl0ZW1zW2luZGV4KytdID0gdmFsdWU7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjM7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBpZiAoIShpbmRleCA9PT0gY2FjaGUudGFpbCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhbHVlID0gaXRlbXNbaW5kZXhdO1xuXG5cdCAgICAgICAgaWYgKGluZGV4ID09PSBNQVhfQ0FDSEUpIHtcblx0ICAgICAgICAgIGl0ZW1zID0gY2FjaGUuaXRlbXMgPSBpdGVtcy5zbGljZShpbmRleCk7XG5cdCAgICAgICAgICBpbmRleCA9IDA7XG5cdCAgICAgICAgICBjYWNoZS50YWlsID0gMDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgaXRlbXNbaW5kZXhdID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgY2FjaGUudGFpbCA9ICsraW5kZXg7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxOTtcblx0ICAgICAgICByZXR1cm4gdmFsdWU7XG5cblx0ICAgICAgY2FzZSAxOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjM7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjM7XG5cdCAgICAgICAgcmV0dXJuIGl0ZW1zW2luZGV4KytdO1xuXG5cdCAgICAgIGNhc2UgMjM6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyNTpcblxuXHQgICAgICAgIGlmIChjYWNoZS50YWlsID09PSBpbmRleCkge1xuXHQgICAgICAgICAgaXRlbXMubGVuZ3RoID0gMDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwicmV0dXJuXCIsIGNhY2hlLnJldHVybmVkKTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXHRfdGVlLnByb3RvdHlwZSA9IFd1LnByb3RvdHlwZTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJ0ZWVcIiwgZnVuY3Rpb24gKCkge1xuXHQgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gMiA6IGFyZ3VtZW50c1swXTtcblxuXHQgIHZhciBpdGVyYWJsZXMgPSBuZXcgQXJyYXkobik7XG5cdCAgdmFyIGNhY2hlID0geyB0YWlsOiAwLCBpdGVtczogW10sIHJldHVybmVkOiBNSVNTSU5HIH07XG5cblx0ICB3aGlsZSAobi0tKSB7XG5cdCAgICBpdGVyYWJsZXNbbl0gPSBfdGVlKHRoaXMsIGNhY2hlKTtcblx0ICB9XG5cblx0ICByZXR1cm4gaXRlcmFibGVzO1xuXHR9LCAxKTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJ1bnppcFwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAyIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgcmV0dXJuIHRoaXMudGVlKG4pLm1hcChmdW5jdGlvbiAoaXRlciwgaSkge1xuXHQgICAgcmV0dXJuIGl0ZXIucGx1Y2soaSk7XG5cdCAgfSk7XG5cdH0sIDEpO1xuXG5cdC8qXG5cdCAqIE51bWJlciBvZiBjaGFtYmVycy5cblx0ICovXG5cblx0d3UudGFuZyA9IHsgY2xhbjogMzYgfTtcblxuXHQvLyBXZSBkb24ndCBoYXZlIGEgY2FjaGVkIGl0ZW0gZm9yIHRoaXMgaW5kZXgsIHdlIG5lZWQgdG8gZm9yY2UgaXRzXG5cdC8vIGV2YWx1YXRpb24uXG5cblx0Ly8gSWYgd2UgYXJlIHRoZSBsYXN0IGl0ZXJhdG9yIHRvIHVzZSBhIGNhY2hlZCB2YWx1ZSwgY2xlYW4gdXAgYWZ0ZXJcblx0Ly8gb3Vyc2VsdmVzLlxuXG5cdC8vIFdlIGhhdmUgYW4gaXRlbSBpbiB0aGUgY2FjaGUgZm9yIHRoaXMgaW5kZXgsIHNvIHlpZWxkIGl0LlxuXG4vKioqLyB9LFxuLyogMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9BcnJheSRmcm9tID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKVtcImRlZmF1bHRcIl07XG5cblx0ZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoYXJyKSB7XG5cdCAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuXHQgICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuXHQgICAgcmV0dXJuIGFycjI7XG5cdCAgfSBlbHNlIHtcblx0ICAgIHJldHVybiBfQXJyYXkkZnJvbShhcnIpO1xuXHQgIH1cblx0fTtcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG4vKioqLyB9LFxuLyogMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiAzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5BcnJheS5mcm9tO1xuXG4vKioqLyB9LFxuLyogNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgJGF0ICA9IF9fd2VicGFja19yZXF1aXJlX18oNSkodHJ1ZSk7XG5cblx0Ly8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDgpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uKGl0ZXJhdGVkKXtcblx0ICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG5cdCAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcblx0Ly8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxuXHR9LCBmdW5jdGlvbigpe1xuXHQgIHZhciBPICAgICA9IHRoaXMuX3Rcblx0ICAgICwgaW5kZXggPSB0aGlzLl9pXG5cdCAgICAsIHBvaW50O1xuXHQgIGlmKGluZGV4ID49IE8ubGVuZ3RoKXJldHVybiB7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZX07XG5cdCAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuXHQgIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuXHQgIHJldHVybiB7dmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZX07XG5cdH0pO1xuXG4vKioqLyB9LFxuLyogNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG5cdC8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxuXHR2YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KVxuXHQgICwgZGVmaW5lZCAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihUT19TVFJJTkcpe1xuXHQgIHJldHVybiBmdW5jdGlvbih0aGF0LCBwb3Mpe1xuXHQgICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSlcblx0ICAgICAgLCBpID0gdG9JbnRlZ2VyKHBvcylcblx0ICAgICAgLCBsID0gcy5sZW5ndGhcblx0ICAgICAgLCBhLCBiO1xuXHQgICAgaWYoaSA8IDAgfHwgaSA+PSBsKXJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcblx0ICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG5cdCAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsXG5cdCAgICAgIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuXHQgICAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG5cdCAgICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG5cdCAgfTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIDcuMS40IFRvSW50ZWdlclxuXHR2YXIgY2VpbCAgPSBNYXRoLmNlaWxcblx0ICAsIGZsb29yID0gTWF0aC5mbG9vcjtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICBpZihpdCA9PSB1bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuXHQgIHJldHVybiBpdDtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyIExJQlJBUlkgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oOSlcblx0ICAsICRkZWYgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTApXG5cdCAgLCAkcmVkZWYgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKVxuXHQgICwgaGlkZSAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNClcblx0ICAsIGhhcyAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpXG5cdCAgLCBTWU1CT0xfSVRFUkFUT1IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnaXRlcmF0b3InKVxuXHQgICwgSXRlcmF0b3JzICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMylcblx0ICAsIEJVR0dZICAgICAgICAgICA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKSAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG5cdCAgLCBGRl9JVEVSQVRPUiAgICAgPSAnQEBpdGVyYXRvcidcblx0ICAsIEtFWVMgICAgICAgICAgICA9ICdrZXlzJ1xuXHQgICwgVkFMVUVTICAgICAgICAgID0gJ3ZhbHVlcyc7XG5cdHZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH07XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0Upe1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjQpKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblx0ICB2YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24oa2luZCl7XG5cdCAgICBzd2l0Y2goa2luZCl7XG5cdCAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcblx0ICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcblx0ICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcblx0ICB9O1xuXHQgIHZhciBUQUcgICAgICA9IE5BTUUgKyAnIEl0ZXJhdG9yJ1xuXHQgICAgLCBwcm90byAgICA9IEJhc2UucHJvdG90eXBlXG5cdCAgICAsIF9uYXRpdmUgID0gcHJvdG9bU1lNQk9MX0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXVxuXHQgICAgLCBfZGVmYXVsdCA9IF9uYXRpdmUgfHwgY3JlYXRlTWV0aG9kKERFRkFVTFQpXG5cdCAgICAsIG1ldGhvZHMsIGtleTtcblx0ICAvLyBGaXggbmF0aXZlXG5cdCAgaWYoX25hdGl2ZSl7XG5cdCAgICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KS5nZXRQcm90byhfZGVmYXVsdC5jYWxsKG5ldyBCYXNlKSk7XG5cdCAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG5cdCAgICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KShJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcblx0ICAgIC8vIEZGIGZpeFxuXHQgICAgaWYoIUxJQlJBUlkgJiYgaGFzKHByb3RvLCBGRl9JVEVSQVRPUikpaGlkZShJdGVyYXRvclByb3RvdHlwZSwgU1lNQk9MX0lURVJBVE9SLCByZXR1cm5UaGlzKTtcblx0ICB9XG5cdCAgLy8gRGVmaW5lIGl0ZXJhdG9yXG5cdCAgaWYoIUxJQlJBUlkgfHwgRk9SQ0UpaGlkZShwcm90bywgU1lNQk9MX0lURVJBVE9SLCBfZGVmYXVsdCk7XG5cdCAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuXHQgIEl0ZXJhdG9yc1tOQU1FXSA9IF9kZWZhdWx0O1xuXHQgIEl0ZXJhdG9yc1tUQUddICA9IHJldHVyblRoaXM7XG5cdCAgaWYoREVGQVVMVCl7XG5cdCAgICBtZXRob2RzID0ge1xuXHQgICAgICBrZXlzOiAgICBJU19TRVQgICAgICAgICAgICA/IF9kZWZhdWx0IDogY3JlYXRlTWV0aG9kKEtFWVMpLFxuXHQgICAgICB2YWx1ZXM6ICBERUZBVUxUID09IFZBTFVFUyA/IF9kZWZhdWx0IDogY3JlYXRlTWV0aG9kKFZBTFVFUyksXG5cdCAgICAgIGVudHJpZXM6IERFRkFVTFQgIT0gVkFMVUVTID8gX2RlZmF1bHQgOiBjcmVhdGVNZXRob2QoJ2VudHJpZXMnKVxuXHQgICAgfTtcblx0ICAgIGlmKEZPUkNFKWZvcihrZXkgaW4gbWV0aG9kcyl7XG5cdCAgICAgIGlmKCEoa2V5IGluIHByb3RvKSkkcmVkZWYocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcblx0ICAgIH0gZWxzZSAkZGVmKCRkZWYuUCArICRkZWYuRiAqIEJVR0dZLCBOQU1FLCBtZXRob2RzKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiA5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG5cbi8qKiovIH0sXG4vKiAxMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGdsb2JhbCAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXG5cdCAgLCBjb3JlICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKVxuXHQgICwgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cdHZhciBjdHggPSBmdW5jdGlvbihmbiwgdGhhdCl7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uKCl7XG5cdCAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcblx0ICB9O1xuXHR9O1xuXHR2YXIgJGRlZiA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHNvdXJjZSl7XG5cdCAgdmFyIGtleSwgb3duLCBvdXQsIGV4cFxuXHQgICAgLCBpc0dsb2JhbCA9IHR5cGUgJiAkZGVmLkdcblx0ICAgICwgaXNQcm90byAgPSB0eXBlICYgJGRlZi5QXG5cdCAgICAsIHRhcmdldCAgID0gaXNHbG9iYWwgPyBnbG9iYWwgOiB0eXBlICYgJGRlZi5TXG5cdCAgICAgICAgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdXG5cdCAgICAsIGV4cG9ydHMgID0gaXNHbG9iYWwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcblx0ICBpZihpc0dsb2JhbClzb3VyY2UgPSBuYW1lO1xuXHQgIGZvcihrZXkgaW4gc291cmNlKXtcblx0ICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuXHQgICAgb3duID0gISh0eXBlICYgJGRlZi5GKSAmJiB0YXJnZXQgJiYga2V5IGluIHRhcmdldDtcblx0ICAgIGlmKG93biAmJiBrZXkgaW4gZXhwb3J0cyljb250aW51ZTtcblx0ICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG5cdCAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuXHQgICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG5cdCAgICBpZihpc0dsb2JhbCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJylleHAgPSBzb3VyY2Vba2V5XTtcblx0ICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG5cdCAgICBlbHNlIGlmKHR5cGUgJiAkZGVmLkIgJiYgb3duKWV4cCA9IGN0eChvdXQsIGdsb2JhbCk7XG5cdCAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuXHQgICAgZWxzZSBpZih0eXBlICYgJGRlZi5XICYmIHRhcmdldFtrZXldID09IG91dCkhZnVuY3Rpb24oQyl7XG5cdCAgICAgIGV4cCA9IGZ1bmN0aW9uKHBhcmFtKXtcblx0ICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEMgPyBuZXcgQyhwYXJhbSkgOiBDKHBhcmFtKTtcblx0ICAgICAgfTtcblx0ICAgICAgZXhwW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG5cdCAgICB9KG91dCk7XG5cdCAgICBlbHNlIGV4cCA9IGlzUHJvdG8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG5cdCAgICAvLyBleHBvcnRcblx0ICAgIGV4cG9ydHNba2V5XSA9IGV4cDtcblx0ICAgIGlmKGlzUHJvdG8pKGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pKVtrZXldID0gb3V0O1xuXHQgIH1cblx0fTtcblx0Ly8gdHlwZSBiaXRtYXBcblx0JGRlZi5GID0gMTsgIC8vIGZvcmNlZFxuXHQkZGVmLkcgPSAyOyAgLy8gZ2xvYmFsXG5cdCRkZWYuUyA9IDQ7ICAvLyBzdGF0aWNcblx0JGRlZi5QID0gODsgIC8vIHByb3RvXG5cdCRkZWYuQiA9IDE2OyAvLyBiaW5kXG5cdCRkZWYuVyA9IDMyOyAvLyB3cmFwXG5cdG1vZHVsZS5leHBvcnRzID0gJGRlZjtcblxuLyoqKi8gfSxcbi8qIDExICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxuXHR2YXIgVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG5cdHZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gVU5ERUZJTkVEICYmIHdpbmRvdy5NYXRoID09IE1hdGhcblx0ICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9IFVOREVGSU5FRCAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGYgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHRpZih0eXBlb2YgX19nID09ICdudW1iZXInKV9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4vKioqLyB9LFxuLyogMTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdHZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7dmVyc2lvbjogJzEuMi4wJ307XG5cdGlmKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4vKioqLyB9LFxuLyogMTMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG5cbi8qKiovIH0sXG4vKiAxNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyICQgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpID8gZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcblx0ICByZXR1cm4gJC5zZXREZXNjKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG5cdH0gOiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuXHQgIG9iamVjdFtrZXldID0gdmFsdWU7XG5cdCAgcmV0dXJuIG9iamVjdDtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDE1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHR2YXIgJE9iamVjdCA9IE9iamVjdDtcblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgY3JlYXRlOiAgICAgJE9iamVjdC5jcmVhdGUsXG5cdCAgZ2V0UHJvdG86ICAgJE9iamVjdC5nZXRQcm90b3R5cGVPZixcblx0ICBpc0VudW06ICAgICB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcblx0ICBnZXREZXNjOiAgICAkT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcblx0ICBzZXREZXNjOiAgICAkT2JqZWN0LmRlZmluZVByb3BlcnR5LFxuXHQgIHNldERlc2NzOiAgICRPYmplY3QuZGVmaW5lUHJvcGVydGllcyxcblx0ICBnZXRLZXlzOiAgICAkT2JqZWN0LmtleXMsXG5cdCAgZ2V0TmFtZXM6ICAgJE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLFxuXHQgIGdldFN5bWJvbHM6ICRPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxuXHQgIGVhY2g6ICAgICAgIFtdLmZvckVhY2hcblx0fTtcblxuLyoqKi8gfSxcbi8qIDE2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGJpdG1hcCwgdmFsdWUpe1xuXHQgIHJldHVybiB7XG5cdCAgICBlbnVtZXJhYmxlICA6ICEoYml0bWFwICYgMSksXG5cdCAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG5cdCAgICB3cml0YWJsZSAgICA6ICEoYml0bWFwICYgNCksXG5cdCAgICB2YWx1ZSAgICAgICA6IHZhbHVlXG5cdCAgfTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDE3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5cdG1vZHVsZS5leHBvcnRzID0gIV9fd2VicGFja19yZXF1aXJlX18oMTgpKGZ1bmN0aW9uKCl7XG5cdCAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7Z2V0OiBmdW5jdGlvbigpeyByZXR1cm4gNzsgfX0pLmEgIT0gNztcblx0fSk7XG5cbi8qKiovIH0sXG4vKiAxOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjKXtcblx0ICB0cnkge1xuXHQgICAgcmV0dXJuICEhZXhlYygpO1xuXHQgIH0gY2F0Y2goZSl7XG5cdCAgICByZXR1cm4gdHJ1ZTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0dmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIGtleSl7XG5cdCAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIHN0b3JlICA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpKCd3a3MnKVxuXHQgICwgU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkuU3ltYm9sO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHQgIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuXHQgICAgU3ltYm9sICYmIFN5bWJvbFtuYW1lXSB8fCAoU3ltYm9sIHx8IF9fd2VicGFja19yZXF1aXJlX18oMjIpKSgnU3ltYm9sLicgKyBuYW1lKSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXG5cdCAgLCBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJ1xuXHQgICwgc3RvcmUgID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG5cdCAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB7fSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0dmFyIGlkID0gMFxuXHQgICwgcHggPSBNYXRoLnJhbmRvbSgpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG5cdCAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDIzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vKioqLyB9LFxuLyogMjQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuXHQvLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KShJdGVyYXRvclByb3RvdHlwZSwgX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9KTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KXtcblx0ICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSAkLmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwge25leHQ6IF9fd2VicGFja19yZXF1aXJlX18oMTYpKDEsbmV4dCl9KTtcblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KShDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDI1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgaGFzICA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpXG5cdCAgLCBoaWRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNClcblx0ICAsIFRBRyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgndG9TdHJpbmdUYWcnKTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCB0YWcsIHN0YXQpe1xuXHQgIGlmKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpaGlkZShpdCwgVEFHLCB0YWcpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyIGN0eCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNylcblx0ICAsICRkZWYgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcblx0ICAsIHRvT2JqZWN0ICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSlcblx0ICAsIGNhbGwgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMClcblx0ICAsIGlzQXJyYXlJdGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMylcblx0ICAsIHRvTGVuZ3RoICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNClcblx0ICAsIGdldEl0ZXJGbiAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XG5cdCRkZWYoJGRlZi5TICsgJGRlZi5GICogIV9fd2VicGFja19yZXF1aXJlX18oMzgpKGZ1bmN0aW9uKGl0ZXIpeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuXHQgIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcblx0ICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZS8qLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCovKXtcblx0ICAgIHZhciBPICAgICAgID0gdG9PYmplY3QoYXJyYXlMaWtlKVxuXHQgICAgICAsIEMgICAgICAgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5XG5cdCAgICAgICwgbWFwZm4gICA9IGFyZ3VtZW50c1sxXVxuXHQgICAgICAsIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkXG5cdCAgICAgICwgaW5kZXggICA9IDBcblx0ICAgICAgLCBpdGVyRm4gID0gZ2V0SXRlckZuKE8pXG5cdCAgICAgICwgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuXHQgICAgaWYobWFwcGluZyltYXBmbiA9IGN0eChtYXBmbiwgYXJndW1lbnRzWzJdLCAyKTtcblx0ICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuXHQgICAgaWYoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpe1xuXHQgICAgICBmb3IoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEM7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKyl7XG5cdCAgICAgICAgcmVzdWx0W2luZGV4XSA9IG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG5cdCAgICAgIGZvcihyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG5cdCAgICAgICAgcmVzdWx0W2luZGV4XSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcblx0ICAgIHJldHVybiByZXN1bHQ7XG5cdCAgfVxuXHR9KTtcblxuXG4vKioqLyB9LFxuLyogMjcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xuXHR2YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOCk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIHRoYXQsIGxlbmd0aCl7XG5cdCAgYUZ1bmN0aW9uKGZuKTtcblx0ICBpZih0aGF0ID09PSB1bmRlZmluZWQpcmV0dXJuIGZuO1xuXHQgIHN3aXRjaChsZW5ndGgpe1xuXHQgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24oYSl7XG5cdCAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuXHQgICAgfTtcblx0ICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuXHQgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcblx0ICAgIH07XG5cdCAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbihhLCBiLCBjKXtcblx0ICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG5cdCAgICB9O1xuXHQgIH1cblx0ICByZXR1cm4gZnVuY3Rpb24oLyogLi4uYXJncyAqLyl7XG5cdCAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcblx0ICB9O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIGlmKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG5cdCAgcmV0dXJuIGl0O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcblx0dmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDMwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5cdHZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpe1xuXHQgIHRyeSB7XG5cdCAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuXHQgIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG5cdCAgfSBjYXRjaChlKXtcblx0ICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG5cdCAgICBpZihyZXQgIT09IHVuZGVmaW5lZClhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuXHQgICAgdGhyb3cgZTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIGlmKCFpc09iamVjdChpdCkpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuXHQgIHJldHVybiBpdDtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDMyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcblx0dmFyIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpXG5cdCAgLCBJVEVSQVRPUiAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnaXRlcmF0b3InKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIChJdGVyYXRvcnMuQXJyYXkgfHwgQXJyYXkucHJvdG90eXBlW0lURVJBVE9SXSkgPT09IGl0O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIDcuMS4xNSBUb0xlbmd0aFxuXHR2YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KVxuXHQgICwgbWluICAgICAgID0gTWF0aC5taW47XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGNsYXNzb2YgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpXG5cdCAgLCBJVEVSQVRPUiAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnaXRlcmF0b3InKVxuXHQgICwgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbihpdCl7XG5cdCAgaWYoaXQgIT0gdW5kZWZpbmVkKXJldHVybiBpdFtJVEVSQVRPUl0gfHwgaXRbJ0BAaXRlcmF0b3InXSB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG5cdHZhciBjb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KVxuXHQgICwgVEFHID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ3RvU3RyaW5nVGFnJylcblx0ICAvLyBFUzMgd3JvbmcgaGVyZVxuXHQgICwgQVJHID0gY29mKGZ1bmN0aW9uKCl7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgdmFyIE8sIFQsIEI7XG5cdCAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG5cdCAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2Vcblx0ICAgIDogdHlwZW9mIChUID0gKE8gPSBPYmplY3QoaXQpKVtUQUddKSA9PSAnc3RyaW5nJyA/IFRcblx0ICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuXHQgICAgOiBBUkcgPyBjb2YoTylcblx0ICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcblx0ICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdHZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIFNZTUJPTF9JVEVSQVRPUiA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdpdGVyYXRvcicpXG5cdCAgLCBTQUZFX0NMT1NJTkcgICAgPSBmYWxzZTtcblx0dHJ5IHtcblx0ICB2YXIgcml0ZXIgPSBbN11bU1lNQk9MX0lURVJBVE9SXSgpO1xuXHQgIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uKCl7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG5cdCAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24oKXsgdGhyb3cgMjsgfSk7XG5cdH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjKXtcblx0ICBpZighU0FGRV9DTE9TSU5HKXJldHVybiBmYWxzZTtcblx0ICB2YXIgc2FmZSA9IGZhbHNlO1xuXHQgIHRyeSB7XG5cdCAgICB2YXIgYXJyICA9IFs3XVxuXHQgICAgICAsIGl0ZXIgPSBhcnJbU1lNQk9MX0lURVJBVE9SXSgpO1xuXHQgICAgaXRlci5uZXh0ID0gZnVuY3Rpb24oKXsgc2FmZSA9IHRydWU7IH07XG5cdCAgICBhcnJbU1lNQk9MX0lURVJBVE9SXSA9IGZ1bmN0aW9uKCl7IHJldHVybiBpdGVyOyB9O1xuXHQgICAgZXhlYyhhcnIpO1xuXHQgIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cblx0ICByZXR1cm4gc2FmZTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDM5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX2dldEl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MClbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfaXNJdGVyYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpW1wiZGVmYXVsdFwiXTtcblxuXHRleHBvcnRzW1wiZGVmYXVsdFwiXSA9IChmdW5jdGlvbiAoKSB7XG5cdCAgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHtcblx0ICAgIHZhciBfYXJyID0gW107XG5cdCAgICB2YXIgX24gPSB0cnVlO1xuXHQgICAgdmFyIF9kID0gZmFsc2U7XG5cdCAgICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cblx0ICAgIHRyeSB7XG5cdCAgICAgIGZvciAodmFyIF9pID0gX2dldEl0ZXJhdG9yKGFyciksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG5cdCAgICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuXHQgICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcblx0ICAgICAgfVxuXHQgICAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICAgIF9kID0gdHJ1ZTtcblx0ICAgICAgX2UgPSBlcnI7XG5cdCAgICB9IGZpbmFsbHkge1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0pIF9pW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgIH0gZmluYWxseSB7XG5cdCAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gX2Fycjtcblx0ICB9XG5cblx0ICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkge1xuXHQgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuXHQgICAgICByZXR1cm4gYXJyO1xuXHQgICAgfSBlbHNlIGlmIChfaXNJdGVyYWJsZShPYmplY3QoYXJyKSkpIHtcblx0ICAgICAgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xuXHQgICAgfVxuXHQgIH07XG5cdH0pKCk7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuLyoqKi8gfSxcbi8qIDQwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oNDEpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA0MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XG5cbi8qKiovIH0sXG4vKiA0MiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XG5cdHZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcblx0SXRlcmF0b3JzLk5vZGVMaXN0ID0gSXRlcmF0b3JzLkhUTUxDb2xsZWN0aW9uID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vKioqLyB9LFxuLyogNDMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyIHNldFVuc2NvcGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KVxuXHQgICwgc3RlcCAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpXG5cdCAgLCBJdGVyYXRvcnMgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMylcblx0ICAsIHRvSU9iamVjdCAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcblxuXHQvLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG5cdC8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG5cdC8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcblx0Ly8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5cdF9fd2VicGFja19yZXF1aXJlX18oOCkoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uKGl0ZXJhdGVkLCBraW5kKXtcblx0ICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG5cdCAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcblx0ICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuXHQvLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcblx0fSwgZnVuY3Rpb24oKXtcblx0ICB2YXIgTyAgICAgPSB0aGlzLl90XG5cdCAgICAsIGtpbmQgID0gdGhpcy5fa1xuXHQgICAgLCBpbmRleCA9IHRoaXMuX2krKztcblx0ICBpZighTyB8fCBpbmRleCA+PSBPLmxlbmd0aCl7XG5cdCAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuXHQgICAgcmV0dXJuIHN0ZXAoMSk7XG5cdCAgfVxuXHQgIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuXHQgIGlmKGtpbmQgPT0gJ3ZhbHVlcycpcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuXHQgIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcblx0fSwgJ3ZhbHVlcycpO1xuXG5cdC8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcblx0SXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuXHRzZXRVbnNjb3BlKCdrZXlzJyk7XG5cdHNldFVuc2NvcGUoJ3ZhbHVlcycpO1xuXHRzZXRVbnNjb3BlKCdlbnRyaWVzJyk7XG5cbi8qKiovIH0sXG4vKiA0NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpeyAvKiBlbXB0eSAqLyB9O1xuXG4vKioqLyB9LFxuLyogNDUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZG9uZSwgdmFsdWUpe1xuXHQgIHJldHVybiB7dmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmV9O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNDYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xyXG5cdHZhciBJT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NylcclxuXHQgICwgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XHJcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XHJcblx0ICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XHJcblx0fTtcblxuLyoqKi8gfSxcbi8qIDQ3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBpbmRleGVkIG9iamVjdCwgZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG5cdHZhciBjb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcblx0bW9kdWxlLmV4cG9ydHMgPSAwIGluIE9iamVjdCgneicpID8gT2JqZWN0IDogZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDQ4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKVxuXHQgICwgZ2V0ICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5nZXRJdGVyYXRvciA9IGZ1bmN0aW9uKGl0KXtcblx0ICB2YXIgaXRlckZuID0gZ2V0KGl0KTtcblx0ICBpZih0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG5cdCAgcmV0dXJuIGFuT2JqZWN0KGl0ZXJGbi5jYWxsKGl0KSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA0OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogNTAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xuXG4vKioqLyB9LFxuLyogNTEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBjbGFzc29mICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KVxuXHQgICwgSVRFUkFUT1IgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ2l0ZXJhdG9yJylcblx0ICAsIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLmlzSXRlcmFibGUgPSBmdW5jdGlvbihpdCl7XG5cdCAgdmFyIE8gPSBPYmplY3QoaXQpO1xuXHQgIHJldHVybiBJVEVSQVRPUiBpbiBPIHx8ICdAQGl0ZXJhdG9yJyBpbiBPIHx8IEl0ZXJhdG9ycy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKE8pKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDUyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oNTMpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA1MyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ2l0ZXJhdG9yJyk7XG5cbi8qKiovIH0sXG4vKiA1NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0LyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkgey8vIFRoaXMgbWV0aG9kIG9mIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBuZWVkcyB0byBiZVxuXHQvLyBrZXB0IGlkZW50aWNhbCB0byB0aGUgd2F5IGl0IGlzIG9idGFpbmVkIGluIHJ1bnRpbWUuanNcblx0dmFyIGcgPVxuXHQgIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuXHQgIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuXHQgIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXM7XG5cblx0Ly8gVXNlIGBnZXRPd25Qcm9wZXJ0eU5hbWVzYCBiZWNhdXNlIG5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCBjYWxsaW5nXG5cdC8vIGBoYXNPd25Qcm9wZXJ0eWAgb24gdGhlIGdsb2JhbCBgc2VsZmAgb2JqZWN0IGluIGEgd29ya2VyLiBTZWUgIzE4My5cblx0dmFyIGhhZFJ1bnRpbWUgPSBnLnJlZ2VuZXJhdG9yUnVudGltZSAmJlxuXHQgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGcpLmluZGV4T2YoXCJyZWdlbmVyYXRvclJ1bnRpbWVcIikgPj0gMDtcblxuXHQvLyBTYXZlIHRoZSBvbGQgcmVnZW5lcmF0b3JSdW50aW1lIGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuXG5cdHZhciBvbGRSdW50aW1lID0gaGFkUnVudGltZSAmJiBnLnJlZ2VuZXJhdG9yUnVudGltZTtcblxuXHQvLyBGb3JjZSByZWV2YWx1dGF0aW9uIG9mIHJ1bnRpbWUuanMuXG5cdGcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XG5cblx0aWYgKGhhZFJ1bnRpbWUpIHtcblx0ICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBydW50aW1lLlxuXHQgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcblx0fSBlbHNlIHtcblx0ICAvLyBSZW1vdmUgdGhlIGdsb2JhbCBwcm9wZXJ0eSBhZGRlZCBieSBydW50aW1lLmpzLlxuXHQgIHRyeSB7XG5cdCAgICBkZWxldGUgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cdCAgfSBjYXRjaChlKSB7XG5cdCAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcblx0ICB9XG5cdH1cblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IG1vZHVsZS5leHBvcnRzLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblx0LyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIChmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0oKSkpKVxuXG4vKioqLyB9LFxuLyogNTUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwsIHByb2Nlc3MpIHsvKipcblx0ICogQ29weXJpZ2h0IChjKSAyMDE0LCBGYWNlYm9vaywgSW5jLlxuXHQgKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXHQgKlxuXHQgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcblx0ICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuXHQgKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cblx0ICogdGhlIHNhbWUgZGlyZWN0b3J5LlxuXHQgKi9cblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX1N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNTcpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX1N5bWJvbCRpdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX09iamVjdCRjcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9Qcm9taXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NSlbXCJkZWZhdWx0XCJdO1xuXG5cdCEoZnVuY3Rpb24gKGdsb2JhbCkge1xuXHQgIFwidXNlIHN0cmljdFwiO1xuXG5cdCAgdmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdCAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG5cdCAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gdHlwZW9mIF9TeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfU3ltYm9sJGl0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuXG5cdCAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcblx0ICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cdCAgaWYgKHJ1bnRpbWUpIHtcblx0ICAgIGlmIChpbk1vZHVsZSkge1xuXHQgICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG5cdCAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG5cdCAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcblx0ICAgIH1cblx0ICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcblx0ICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cblx0ICAgIHJldHVybjtcblx0ICB9XG5cblx0ICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcblx0ICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG5cdCAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cblx0ICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG5cdCAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuXHQgICAgdmFyIGdlbmVyYXRvciA9IF9PYmplY3QkY3JlYXRlKChvdXRlckZuIHx8IEdlbmVyYXRvcikucHJvdG90eXBlKTtcblxuXHQgICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYgfHwgbnVsbCwgbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pKTtcblxuXHQgICAgcmV0dXJuIGdlbmVyYXRvcjtcblx0ICB9XG5cdCAgcnVudGltZS53cmFwID0gd3JhcDtcblxuXHQgIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuXHQgIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuXHQgIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuXHQgIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2Vcblx0ICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG5cdCAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuXHQgIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG5cdCAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG5cdCAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuXHQgIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cblx0ICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcblx0ICAgIHRyeSB7XG5cdCAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcblx0ICAgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG5cdCAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG5cdCAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcblx0ICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG5cdCAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuXHQgIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cblx0ICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG5cdCAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG5cdCAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG5cdCAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcblx0ICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuXHQgIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG5cdCAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuXHQgIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuXHQgIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGU7XG5cdCAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcblx0ICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuXHQgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG5cdCAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcblx0ICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuXHQgIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcblx0ICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG5cdCAgICAgIH07XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG5cdCAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG5cdCAgICByZXR1cm4gY3RvciA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG5cdCAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG5cdCAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG5cdCAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgOiBmYWxzZTtcblx0ICB9O1xuXG5cdCAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuXHQgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuXHQgICAgZ2VuRnVuLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKEdwKTtcblx0ICAgIHJldHVybiBnZW5GdW47XG5cdCAgfTtcblxuXHQgIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuXHQgIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG5cdCAgLy8gYHZhbHVlIGluc3RhbmNlb2YgQXdhaXRBcmd1bWVudGAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG5cdCAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC4gU29tZSBtYXkgY29uc2lkZXIgdGhlIG5hbWUgb2YgdGhpcyBtZXRob2QgdG9vXG5cdCAgLy8gY3V0ZXN5LCBidXQgdGhleSBhcmUgY3VybXVkZ2VvbnMuXG5cdCAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgIHJldHVybiBuZXcgQXdhaXRBcmd1bWVudChhcmcpO1xuXHQgIH07XG5cblx0ICBmdW5jdGlvbiBBd2FpdEFyZ3VtZW50KGFyZykge1xuXHQgICAgdGhpcy5hcmcgPSBhcmc7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcblx0ICAgIC8vIFRoaXMgaW52b2tlIGZ1bmN0aW9uIGlzIHdyaXR0ZW4gaW4gYSBzdHlsZSB0aGF0IGFzc3VtZXMgc29tZVxuXHQgICAgLy8gY2FsbGluZyBmdW5jdGlvbiAob3IgUHJvbWlzZSkgd2lsbCBoYW5kbGUgZXhjZXB0aW9ucy5cblx0ICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuXHQgICAgICB2YXIgcmVzdWx0ID0gZ2VuZXJhdG9yW21ldGhvZF0oYXJnKTtcblx0ICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuXHQgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBBd2FpdEFyZ3VtZW50ID8gX1Byb21pc2UucmVzb2x2ZSh2YWx1ZS5hcmcpLnRoZW4oaW52b2tlTmV4dCwgaW52b2tlVGhyb3cpIDogX1Byb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbiAodW53cmFwcGVkKSB7XG5cdCAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcblx0ICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcblx0ICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuXHQgICAgICAgIC8vIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBzYW1lXG5cdCAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3Rcblx0ICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG5cdCAgICAgICAgLy8gd2hlbiBhbiBhd2FpdGVkIFByb21pc2UgaXMgcmVqZWN0ZWQuIFRoaXMgZGlmZmVyZW5jZSBpblxuXHQgICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuXHQgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuXHQgICAgICAgIC8vIHJlamVjdGlvbiAoc3dhbGxvdyBpdCBhbmQgY29udGludWUsIG1hbnVhbGx5IC50aHJvdyBpdCBiYWNrXG5cdCAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG5cdCAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuXHQgICAgICAgIC8vIHJlamVjdGlvbiByZWFzb24gb3V0c2lkZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBzbyB0aGVcblx0ICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcblx0ICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cblx0ICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdDtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLmRvbWFpbikge1xuXHQgICAgICBpbnZva2UgPSBwcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG5cdCAgICB9XG5cblx0ICAgIHZhciBpbnZva2VOZXh0ID0gaW52b2tlLmJpbmQoZ2VuZXJhdG9yLCBcIm5leHRcIik7XG5cdCAgICB2YXIgaW52b2tlVGhyb3cgPSBpbnZva2UuYmluZChnZW5lcmF0b3IsIFwidGhyb3dcIik7XG5cdCAgICB2YXIgaW52b2tlUmV0dXJuID0gaW52b2tlLmJpbmQoZ2VuZXJhdG9yLCBcInJldHVyblwiKTtcblx0ICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cblx0ICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcblx0ICAgICAgdmFyIGVucXVldWVSZXN1bHQgPVxuXHQgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG5cdCAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuXHQgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG5cdCAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG5cdCAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuXHQgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuXHQgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG5cdCAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG5cdCAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG5cdCAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG5cdCAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG5cdCAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cblx0ICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBpbnZva2UobWV0aG9kLCBhcmcpO1xuXHQgICAgICB9KSA6IG5ldyBfUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHQgICAgICAgIHJlc29sdmUoaW52b2tlKG1ldGhvZCwgYXJnKSk7XG5cdCAgICAgIH0pO1xuXG5cdCAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGVucXVldWVSZXN1bHQgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnlcblx0ICAgICAgLy8gbGF0ZXIgaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuXHQgICAgICBwcmV2aW91c1Byb21pc2UgPSBlbnF1ZXVlUmVzdWx0W1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGlnbm9yZWQpIHt9KTtcblxuXHQgICAgICByZXR1cm4gZW5xdWV1ZVJlc3VsdDtcblx0ICAgIH1cblxuXHQgICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcblx0ICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuXHQgICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcblx0ICB9XG5cblx0ICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuXG5cdCAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuXHQgIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuXHQgIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuXHQgIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbiAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcblx0ICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkpO1xuXG5cdCAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG5cdCAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuXHQgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcblx0ICAgIH0pO1xuXHQgIH07XG5cblx0ICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcblx0ICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cblx0ICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcblx0ICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuXHQgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG5cdCAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgICB0aHJvdyBhcmc7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcblx0ICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG5cdCAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHdoaWxlICh0cnVlKSB7XG5cdCAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcblx0ICAgICAgICBpZiAoZGVsZWdhdGUpIHtcblx0ICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIgfHwgbWV0aG9kID09PSBcInRocm93XCIgJiYgZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kXSA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgIC8vIEEgcmV0dXJuIG9yIHRocm93ICh3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gdGhyb3dcblx0ICAgICAgICAgICAgLy8gbWV0aG9kKSBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG5cdCAgICAgICAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG5cdCAgICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcblx0ICAgICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuXHQgICAgICAgICAgICB2YXIgcmV0dXJuTWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl07XG5cdCAgICAgICAgICAgIGlmIChyZXR1cm5NZXRob2QpIHtcblx0ICAgICAgICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gocmV0dXJuTWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgYXJnKTtcblx0ICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuXHQgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJldHVybiBtZXRob2QgdGhyZXcgYW4gZXhjZXB0aW9uLCBsZXQgdGhhdFxuXHQgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHByZXZhaWwgb3ZlciB0aGUgb3JpZ2luYWwgcmV0dXJuIG9yIHRocm93LlxuXHQgICAgICAgICAgICAgICAgbWV0aG9kID0gXCJ0aHJvd1wiO1xuXHQgICAgICAgICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcblx0ICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXHQgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIpIHtcblx0ICAgICAgICAgICAgICAvLyBDb250aW51ZSB3aXRoIHRoZSBvdXRlciByZXR1cm4sIG5vdyB0aGF0IHRoZSBkZWxlZ2F0ZVxuXHQgICAgICAgICAgICAgIC8vIGl0ZXJhdG9yIGhhcyBiZWVuIHRlcm1pbmF0ZWQuXG5cdCAgICAgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH1cblxuXHQgICAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZF0sIGRlbGVnYXRlLml0ZXJhdG9yLCBhcmcpO1xuXG5cdCAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuXHQgICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuXHQgICAgICAgICAgICAvLyBMaWtlIHJldHVybmluZyBnZW5lcmF0b3IudGhyb3codW5jYXVnaHQpLCBidXQgd2l0aG91dCB0aGVcblx0ICAgICAgICAgICAgLy8gb3ZlcmhlYWQgb2YgYW4gZXh0cmEgZnVuY3Rpb24gY2FsbC5cblx0ICAgICAgICAgICAgbWV0aG9kID0gXCJ0aHJvd1wiO1xuXHQgICAgICAgICAgICBhcmcgPSByZWNvcmQuYXJnO1xuXHQgICAgICAgICAgICBjb250aW51ZTtcblx0ICAgICAgICAgIH1cblxuXHQgICAgICAgICAgLy8gRGVsZWdhdGUgZ2VuZXJhdG9yIHJhbiBhbmQgaGFuZGxlZCBpdHMgb3duIGV4Y2VwdGlvbnMgc29cblx0ICAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgbWV0aG9kIHdhcywgd2UgY29udGludWUgYXMgaWYgaXQgaXNcblx0ICAgICAgICAgIC8vIFwibmV4dFwiIHdpdGggYW4gdW5kZWZpbmVkIGFyZy5cblx0ICAgICAgICAgIG1ldGhvZCA9IFwibmV4dFwiO1xuXHQgICAgICAgICAgYXJnID0gdW5kZWZpbmVkO1xuXG5cdCAgICAgICAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cdCAgICAgICAgICBpZiAoaW5mby5kb25lKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXHQgICAgICAgICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXHQgICAgICAgICAgICByZXR1cm4gaW5mbztcblx0ICAgICAgICAgIH1cblxuXHQgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcblx0ICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCkge1xuXHQgICAgICAgICAgICBjb250ZXh0LnNlbnQgPSBhcmc7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBjb250ZXh0LnNlbnQgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuXHQgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG5cdCAgICAgICAgICAgIHRocm93IGFyZztcblx0ICAgICAgICAgIH1cblxuXHQgICAgICAgICAgaWYgKGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oYXJnKSkge1xuXHQgICAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuXHQgICAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuXHQgICAgICAgICAgICBtZXRob2QgPSBcIm5leHRcIjtcblx0ICAgICAgICAgICAgYXJnID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcInJldHVyblwiKSB7XG5cdCAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBhcmcpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cblx0ICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cdCAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG5cdCAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG5cdCAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG5cdCAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZSA/IEdlblN0YXRlQ29tcGxldGVkIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuXHQgICAgICAgICAgdmFyIGluZm8gPSB7XG5cdCAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuXHQgICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcblx0ICAgICAgICAgIH07XG5cblx0ICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG5cdCAgICAgICAgICAgIGlmIChjb250ZXh0LmRlbGVnYXRlICYmIG1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcblx0ICAgICAgICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuXHQgICAgICAgICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cblx0ICAgICAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBpbmZvO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuXHQgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcblx0ICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcblx0ICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oYXJnKSBjYWxsIGFib3ZlLlxuXHQgICAgICAgICAgbWV0aG9kID0gXCJ0aHJvd1wiO1xuXHQgICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgfVxuXG5cdCAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcblx0ICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG5cdCAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuXHQgIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIHJldHVybiB0aGlzO1xuXHQgIH07XG5cblx0ICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuXHQgIH07XG5cblx0ICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuXHQgICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuXHQgICAgaWYgKDEgaW4gbG9jcykge1xuXHQgICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG5cdCAgICB9XG5cblx0ICAgIGlmICgyIGluIGxvY3MpIHtcblx0ICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG5cdCAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcblx0ICAgIH1cblxuXHQgICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcblx0ICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuXHQgICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuXHQgICAgZGVsZXRlIHJlY29yZC5hcmc7XG5cdCAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcblx0ICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuXHQgICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuXHQgICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuXHQgICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcblx0ICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcblx0ICAgIHRoaXMucmVzZXQodHJ1ZSk7XG5cdCAgfVxuXG5cdCAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHQgICAgdmFyIGtleXMgPSBbXTtcblx0ICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcblx0ICAgICAga2V5cy5wdXNoKGtleSk7XG5cdCAgICB9XG5cdCAgICBrZXlzLnJldmVyc2UoKTtcblxuXHQgICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcblx0ICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG5cdCAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcblx0ICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG5cdCAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG5cdCAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcblx0ICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG5cdCAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcblx0ICAgICAgICAgIHJldHVybiBuZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuXHQgICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuXHQgICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cblx0ICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblx0ICAgICAgcmV0dXJuIG5leHQ7XG5cdCAgICB9O1xuXHQgIH07XG5cblx0ICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcblx0ICAgIGlmIChpdGVyYWJsZSkge1xuXHQgICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG5cdCAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuXHQgICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG5cdCAgICAgICAgdmFyIGkgPSAtMSxcblx0ICAgICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG5cdCAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcblx0ICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG5cdCAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH1cblxuXHQgICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cblx0ICAgICAgICAgIHJldHVybiBuZXh0O1xuXHQgICAgICAgIH07XG5cblx0ICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG5cdCAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG5cdCAgfVxuXHQgIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG5cdCAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcblx0ICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcblx0ICB9XG5cblx0ICBDb250ZXh0LnByb3RvdHlwZSA9IHtcblx0ICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG5cdCAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuXHQgICAgICB0aGlzLnByZXYgPSAwO1xuXHQgICAgICB0aGlzLm5leHQgPSAwO1xuXHQgICAgICB0aGlzLnNlbnQgPSB1bmRlZmluZWQ7XG5cdCAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuXHQgICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuXHQgICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuXHQgICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcblx0ICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG5cdCAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcblx0ICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG5cdCAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cblx0ICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcblx0ICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcblx0ICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG5cdCAgICAgIH1cblxuXHQgICAgICByZXR1cm4gdGhpcy5ydmFsO1xuXHQgICAgfSxcblxuXHQgICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGV4Y2VwdGlvbikge1xuXHQgICAgICBpZiAodGhpcy5kb25lKSB7XG5cdCAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuXHQgICAgICB9XG5cblx0ICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuXHQgICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcblx0ICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcblx0ICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuXHQgICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblx0ICAgICAgICByZXR1cm4gISFjYXVnaHQ7XG5cdCAgICAgIH1cblxuXHQgICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdCAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuXHQgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG5cdCAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcblx0ICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG5cdCAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cblx0ICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG5cdCAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG5cdCAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcblx0ICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuXHQgICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuXHQgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuXHQgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodHlwZSwgYXJnKSB7XG5cdCAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0ICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG5cdCAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG5cdCAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAoZmluYWxseUVudHJ5ICYmICh0eXBlID09PSBcImJyZWFrXCIgfHwgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcblx0ICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG5cdCAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuXHQgICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG5cdCAgICAgIH1cblxuXHQgICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcblx0ICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuXHQgICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG5cdCAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcblx0ICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG5cdCAgICAgIH1cblxuXHQgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcblx0ICAgIH0sXG5cblx0ICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZShyZWNvcmQsIGFmdGVyTG9jKSB7XG5cdCAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8IHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcblx0ICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuXHQgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG5cdCAgICAgICAgdGhpcy5ydmFsID0gcmVjb3JkLmFyZztcblx0ICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuXHQgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG5cdCAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKGZpbmFsbHlMb2MpIHtcblx0ICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHQgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblx0ICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuXHQgICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG5cdCAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcblx0ICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG5cdCAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0ICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG5cdCAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG5cdCAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblx0ICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuXHQgICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHJldHVybiB0aHJvd247XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG5cdCAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cblx0ICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuXHQgICAgfSxcblxuXHQgICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuXHQgICAgICB0aGlzLmRlbGVnYXRlID0ge1xuXHQgICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuXHQgICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG5cdCAgICAgICAgbmV4dExvYzogbmV4dExvY1xuXHQgICAgICB9O1xuXG5cdCAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuXHQgICAgfVxuXHQgIH07XG5cdH0pKFxuXHQvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG5cdC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuXHQvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuXHR0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDogdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHVuZGVmaW5lZCk7XG5cdC8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCAoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KCkpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2KSkpXG5cbi8qKiovIH0sXG4vKiA1NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Ly8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cblx0dmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXHR2YXIgcXVldWUgPSBbXTtcblx0dmFyIGRyYWluaW5nID0gZmFsc2U7XG5cdHZhciBjdXJyZW50UXVldWU7XG5cdHZhciBxdWV1ZUluZGV4ID0gLTE7XG5cblx0ZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuXHQgICAgZHJhaW5pbmcgPSBmYWxzZTtcblx0ICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG5cdCAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuXHQgICAgfVxuXHQgICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuXHQgICAgICAgIGRyYWluUXVldWUoKTtcblx0ICAgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG5cdCAgICBpZiAoZHJhaW5pbmcpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcblx0ICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuXHQgICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcblx0ICAgIHdoaWxlKGxlbikge1xuXHQgICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuXHQgICAgICAgIHF1ZXVlID0gW107XG5cdCAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuXHQgICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG5cdCAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuXHQgICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcblx0ICAgIH1cblx0ICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG5cdCAgICBkcmFpbmluZyA9IGZhbHNlO1xuXHQgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHR9XG5cblx0cHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcblx0ICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcblx0ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG5cdCAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuXHQgICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG5cdCAgICB9XG5cdH07XG5cblx0Ly8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuXHRmdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcblx0ICAgIHRoaXMuZnVuID0gZnVuO1xuXHQgICAgdGhpcy5hcnJheSA9IGFycmF5O1xuXHR9XG5cdEl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xuXHR9O1xuXHRwcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xuXHRwcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xuXHRwcm9jZXNzLmVudiA9IHt9O1xuXHRwcm9jZXNzLmFyZ3YgPSBbXTtcblx0cHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5cdHByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuXHRmdW5jdGlvbiBub29wKCkge31cblxuXHRwcm9jZXNzLm9uID0gbm9vcDtcblx0cHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5cdHByb2Nlc3Mub25jZSA9IG5vb3A7XG5cdHByb2Nlc3Mub2ZmID0gbm9vcDtcblx0cHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5cdHByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcblx0cHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxuXHRwcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xuXHR9O1xuXG5cdHByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5cdHByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG5cdCAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xuXHR9O1xuXHRwcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cbi8qKiovIH0sXG4vKiA1NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogNTggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oNTkpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLlN5bWJvbDtcblxuLyoqKi8gfSxcbi8qIDU5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdC8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cblx0dmFyICQgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSlcblx0ICAsIGdsb2JhbCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcblx0ICAsIGhhcyAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSlcblx0ICAsIFNVUFBPUlRfREVTQyAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNylcblx0ICAsICRkZWYgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcblx0ICAsICRyZWRlZiAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMylcblx0ICAsICRmYWlscyAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOClcblx0ICAsIHNoYXJlZCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSlcblx0ICAsIHNldFRhZyAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSlcblx0ICAsIHVpZCAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMilcblx0ICAsIHdrcyAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMClcblx0ICAsIGtleU9mICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MClcblx0ICAsICRuYW1lcyAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSlcblx0ICAsIGVudW1LZXlzICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Milcblx0ICAsIGlzT2JqZWN0ICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMilcblx0ICAsIGFuT2JqZWN0ICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSlcblx0ICAsIHRvSU9iamVjdCAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nilcblx0ICAsIGNyZWF0ZURlc2MgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNilcblx0ICAsIGdldERlc2MgICAgICAgID0gJC5nZXREZXNjXG5cdCAgLCBzZXREZXNjICAgICAgICA9ICQuc2V0RGVzY1xuXHQgICwgX2NyZWF0ZSAgICAgICAgPSAkLmNyZWF0ZVxuXHQgICwgZ2V0TmFtZXMgICAgICAgPSAkbmFtZXMuZ2V0XG5cdCAgLCAkU3ltYm9sICAgICAgICA9IGdsb2JhbC5TeW1ib2xcblx0ICAsIHNldHRlciAgICAgICAgID0gZmFsc2Vcblx0ICAsIEhJRERFTiAgICAgICAgID0gd2tzKCdfaGlkZGVuJylcblx0ICAsIGlzRW51bSAgICAgICAgID0gJC5pc0VudW1cblx0ICAsIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKVxuXHQgICwgQWxsU3ltYm9scyAgICAgPSBzaGFyZWQoJ3N5bWJvbHMnKVxuXHQgICwgdXNlTmF0aXZlICAgICAgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nXG5cdCAgLCBPYmplY3RQcm90byAgICA9IE9iamVjdC5wcm90b3R5cGU7XG5cblx0Ly8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG5cdHZhciBzZXRTeW1ib2xEZXNjID0gU1VQUE9SVF9ERVNDICYmICRmYWlscyhmdW5jdGlvbigpe1xuXHQgIHJldHVybiBfY3JlYXRlKHNldERlc2Moe30sICdhJywge1xuXHQgICAgZ2V0OiBmdW5jdGlvbigpeyByZXR1cm4gc2V0RGVzYyh0aGlzLCAnYScsIHt2YWx1ZTogN30pLmE7IH1cblx0ICB9KSkuYSAhPSA3O1xuXHR9KSA/IGZ1bmN0aW9uKGl0LCBrZXksIEQpe1xuXHQgIHZhciBwcm90b0Rlc2MgPSBnZXREZXNjKE9iamVjdFByb3RvLCBrZXkpO1xuXHQgIGlmKHByb3RvRGVzYylkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcblx0ICBzZXREZXNjKGl0LCBrZXksIEQpO1xuXHQgIGlmKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pc2V0RGVzYyhPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xuXHR9IDogc2V0RGVzYztcblxuXHR2YXIgd3JhcCA9IGZ1bmN0aW9uKHRhZyl7XG5cdCAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbC5wcm90b3R5cGUpO1xuXHQgIHN5bS5fayA9IHRhZztcblx0ICBTVVBQT1JUX0RFU0MgJiYgc2V0dGVyICYmIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywge1xuXHQgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuXHQgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdCAgICAgIGlmKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcblx0ICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcblx0ICAgIH1cblx0ICB9KTtcblx0ICByZXR1cm4gc3ltO1xuXHR9O1xuXG5cdHZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKXtcblx0ICBpZihEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpKXtcblx0ICAgIGlmKCFELmVudW1lcmFibGUpe1xuXHQgICAgICBpZighaGFzKGl0LCBISURERU4pKXNldERlc2MoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuXHQgICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgaWYoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSlpdFtISURERU5dW2tleV0gPSBmYWxzZTtcblx0ICAgICAgRCA9IF9jcmVhdGUoRCwge2VudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpfSk7XG5cdCAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuXHQgIH0gcmV0dXJuIHNldERlc2MoaXQsIGtleSwgRCk7XG5cdH07XG5cdHZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApe1xuXHQgIGFuT2JqZWN0KGl0KTtcblx0ICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpXG5cdCAgICAsIGkgICAgPSAwXG5cdCAgICAsIGwgPSBrZXlzLmxlbmd0aFxuXHQgICAgLCBrZXk7XG5cdCAgd2hpbGUobCA+IGkpJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG5cdCAgcmV0dXJuIGl0O1xuXHR9O1xuXHR2YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCl7XG5cdCAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xuXHR9O1xuXHR2YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KXtcblx0ICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSk7XG5cdCAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XVxuXHQgICAgPyBFIDogdHJ1ZTtcblx0fTtcblx0dmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSl7XG5cdCAgdmFyIEQgPSBnZXREZXNjKGl0ID0gdG9JT2JqZWN0KGl0KSwga2V5KTtcblx0ICBpZihEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpRC5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0ICByZXR1cm4gRDtcblx0fTtcblx0dmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG5cdCAgdmFyIG5hbWVzICA9IGdldE5hbWVzKHRvSU9iamVjdChpdCkpXG5cdCAgICAsIHJlc3VsdCA9IFtdXG5cdCAgICAsIGkgICAgICA9IDBcblx0ICAgICwga2V5O1xuXHQgIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpaWYoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOKXJlc3VsdC5wdXNoKGtleSk7XG5cdCAgcmV0dXJuIHJlc3VsdDtcblx0fTtcblx0dmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpe1xuXHQgIHZhciBuYW1lcyAgPSBnZXROYW1lcyh0b0lPYmplY3QoaXQpKVxuXHQgICAgLCByZXN1bHQgPSBbXVxuXHQgICAgLCBpICAgICAgPSAwXG5cdCAgICAsIGtleTtcblx0ICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKWlmKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSlyZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuXHQgIHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0Ly8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5cdGlmKCF1c2VOYXRpdmUpe1xuXHQgICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKXtcblx0ICAgIGlmKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKXRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG5cdCAgICByZXR1cm4gd3JhcCh1aWQoYXJndW1lbnRzWzBdKSk7XG5cdCAgfTtcblx0ICAkcmVkZWYoJFN5bWJvbC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCl7XG5cdCAgICByZXR1cm4gdGhpcy5faztcblx0ICB9KTtcblxuXHQgICQuY3JlYXRlICAgICA9ICRjcmVhdGU7XG5cdCAgJC5pc0VudW0gICAgID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXHQgICQuZ2V0RGVzYyAgICA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cdCAgJC5zZXREZXNjICAgID0gJGRlZmluZVByb3BlcnR5O1xuXHQgICQuc2V0RGVzY3MgICA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuXHQgICQuZ2V0TmFtZXMgICA9ICRuYW1lcy5nZXQgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcblx0ICAkLmdldFN5bWJvbHMgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG5cdCAgaWYoU1VQUE9SVF9ERVNDICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fKDkpKXtcblx0ICAgICRyZWRlZihPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcblx0ICB9XG5cdH1cblxuXHQvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuXHRpZighdXNlTmF0aXZlIHx8ICRmYWlscyhmdW5jdGlvbigpe1xuXHQgIHJldHVybiBKU09OLnN0cmluZ2lmeShbJFN5bWJvbCgpXSkgIT0gJ1tudWxsXSc7XG5cdH0pKSRyZWRlZigkU3ltYm9sLnByb3RvdHlwZSwgJ3RvSlNPTicsIGZ1bmN0aW9uIHRvSlNPTigpe1xuXHQgIGlmKHVzZU5hdGl2ZSAmJiBpc09iamVjdCh0aGlzKSlyZXR1cm4gdGhpcztcblx0fSk7XG5cblx0dmFyIHN5bWJvbFN0YXRpY3MgPSB7XG5cdCAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG5cdCAgJ2Zvcic6IGZ1bmN0aW9uKGtleSl7XG5cdCAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG5cdCAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuXHQgICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG5cdCAgfSxcblx0ICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcblx0ICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihrZXkpe1xuXHQgICAgcmV0dXJuIGtleU9mKFN5bWJvbFJlZ2lzdHJ5LCBrZXkpO1xuXHQgIH0sXG5cdCAgdXNlU2V0dGVyOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSB0cnVlOyB9LFxuXHQgIHVzZVNpbXBsZTogZnVuY3Rpb24oKXsgc2V0dGVyID0gZmFsc2U7IH1cblx0fTtcblx0Ly8gMTkuNC4yLjIgU3ltYm9sLmhhc0luc3RhbmNlXG5cdC8vIDE5LjQuMi4zIFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVcblx0Ly8gMTkuNC4yLjQgU3ltYm9sLml0ZXJhdG9yXG5cdC8vIDE5LjQuMi42IFN5bWJvbC5tYXRjaFxuXHQvLyAxOS40LjIuOCBTeW1ib2wucmVwbGFjZVxuXHQvLyAxOS40LjIuOSBTeW1ib2wuc2VhcmNoXG5cdC8vIDE5LjQuMi4xMCBTeW1ib2wuc3BlY2llc1xuXHQvLyAxOS40LjIuMTEgU3ltYm9sLnNwbGl0XG5cdC8vIDE5LjQuMi4xMiBTeW1ib2wudG9QcmltaXRpdmVcblx0Ly8gMTkuNC4yLjEzIFN5bWJvbC50b1N0cmluZ1RhZ1xuXHQvLyAxOS40LjIuMTQgU3ltYm9sLnVuc2NvcGFibGVzXG5cdCQuZWFjaC5jYWxsKChcblx0ICAgICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsJyArXG5cdCAgICAnc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcblx0ICApLnNwbGl0KCcsJyksIGZ1bmN0aW9uKGl0KXtcblx0ICAgIHZhciBzeW0gPSB3a3MoaXQpO1xuXHQgICAgc3ltYm9sU3RhdGljc1tpdF0gPSB1c2VOYXRpdmUgPyBzeW0gOiB3cmFwKHN5bSk7XG5cdCAgfVxuXHQpO1xuXG5cdHNldHRlciA9IHRydWU7XG5cblx0JGRlZigkZGVmLkcgKyAkZGVmLlcsIHtTeW1ib2w6ICRTeW1ib2x9KTtcblxuXHQkZGVmKCRkZWYuUywgJ1N5bWJvbCcsIHN5bWJvbFN0YXRpY3MpO1xuXG5cdCRkZWYoJGRlZi5TICsgJGRlZi5GICogIXVzZU5hdGl2ZSwgJ09iamVjdCcsIHtcblx0ICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG5cdCAgY3JlYXRlOiAkY3JlYXRlLFxuXHQgIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuXHQgIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG5cdCAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcblx0ICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcblx0ICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG5cdCAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuXHQgIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG5cdCAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG5cdCAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuXHQgIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xuXHR9KTtcblxuXHQvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5cdHNldFRhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG5cdC8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cblx0c2V0VGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG5cdC8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5cdHNldFRhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcblxuLyoqKi8gfSxcbi8qIDYwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgJCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSlcblx0ICAsIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgZWwpe1xuXHQgIHZhciBPICAgICAgPSB0b0lPYmplY3Qob2JqZWN0KVxuXHQgICAgLCBrZXlzICAgPSAkLmdldEtleXMoTylcblx0ICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcblx0ICAgICwgaW5kZXggID0gMFxuXHQgICAgLCBrZXk7XG5cdCAgd2hpbGUobGVuZ3RoID4gaW5kZXgpaWYoT1trZXkgPSBrZXlzW2luZGV4KytdXSA9PT0gZWwpcmV0dXJuIGtleTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDYxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5cdHZhciB0b1N0cmluZyAgPSB7fS50b1N0cmluZ1xuXHQgICwgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nilcblx0ICAsIGdldE5hbWVzICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpLmdldE5hbWVzO1xuXG5cdHZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcblx0ICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxuXHR2YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbihpdCl7XG5cdCAgdHJ5IHtcblx0ICAgIHJldHVybiBnZXROYW1lcyhpdCk7XG5cdCAgfSBjYXRjaChlKXtcblx0ICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuXHQgIH1cblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cy5nZXQgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KXtcblx0ICBpZih3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJylyZXR1cm4gZ2V0V2luZG93TmFtZXMoaXQpO1xuXHQgIHJldHVybiBnZXROYW1lcyh0b0lPYmplY3QoaXQpKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDYyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xuXHR2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICB2YXIga2V5cyAgICAgICA9ICQuZ2V0S2V5cyhpdClcblx0ICAgICwgZ2V0U3ltYm9scyA9ICQuZ2V0U3ltYm9scztcblx0ICBpZihnZXRTeW1ib2xzKXtcblx0ICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdClcblx0ICAgICAgLCBpc0VudW0gID0gJC5pc0VudW1cblx0ICAgICAgLCBpICAgICAgID0gMFxuXHQgICAgICAsIGtleTtcblx0ICAgIHdoaWxlKHN5bWJvbHMubGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSlrZXlzLnB1c2goa2V5KTtcblx0ICB9XG5cdCAgcmV0dXJuIGtleXM7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA2MyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogNjQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpe1xuXHQgIHJldHVybiAkLmNyZWF0ZShQLCBEKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDY1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oNjYpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA2NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg2Nyk7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDY4KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5Qcm9taXNlO1xuXG4vKioqLyB9LFxuLyogNjcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdFxuXG4vKioqLyB9LFxuLyogNjggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyICQgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgTElCUkFSWSAgICA9IF9fd2VicGFja19yZXF1aXJlX18oOSlcblx0ICAsIGdsb2JhbCAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuXHQgICwgY3R4ICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpXG5cdCAgLCBjbGFzc29mICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNilcblx0ICAsICRkZWYgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuXHQgICwgaXNPYmplY3QgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpXG5cdCAgLCBhbk9iamVjdCAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSlcblx0ICAsIGFGdW5jdGlvbiAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KVxuXHQgICwgc3RyaWN0TmV3ICA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpXG5cdCAgLCBmb3JPZiAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MClcblx0ICAsIHNldFByb3RvICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKS5zZXRcblx0ICAsIHNhbWUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKVxuXHQgICwgc3BlY2llcyAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzMpXG5cdCAgLCBTUEVDSUVTICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ3NwZWNpZXMnKVxuXHQgICwgUkVDT1JEICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpKCdyZWNvcmQnKVxuXHQgICwgYXNhcCAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzQpXG5cdCAgLCBQUk9NSVNFICAgID0gJ1Byb21pc2UnXG5cdCAgLCBwcm9jZXNzICAgID0gZ2xvYmFsLnByb2Nlc3Ncblx0ICAsIGlzTm9kZSAgICAgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJ1xuXHQgICwgUCAgICAgICAgICA9IGdsb2JhbFtQUk9NSVNFXVxuXHQgICwgV3JhcHBlcjtcblxuXHR2YXIgdGVzdFJlc29sdmUgPSBmdW5jdGlvbihzdWIpe1xuXHQgIHZhciB0ZXN0ID0gbmV3IFAoZnVuY3Rpb24oKXt9KTtcblx0ICBpZihzdWIpdGVzdC5jb25zdHJ1Y3RvciA9IE9iamVjdDtcblx0ICByZXR1cm4gUC5yZXNvbHZlKHRlc3QpID09PSB0ZXN0O1xuXHR9O1xuXG5cdHZhciB1c2VOYXRpdmUgPSBmdW5jdGlvbigpe1xuXHQgIHZhciB3b3JrcyA9IGZhbHNlO1xuXHQgIGZ1bmN0aW9uIFAyKHgpe1xuXHQgICAgdmFyIHNlbGYgPSBuZXcgUCh4KTtcblx0ICAgIHNldFByb3RvKHNlbGYsIFAyLnByb3RvdHlwZSk7XG5cdCAgICByZXR1cm4gc2VsZjtcblx0ICB9XG5cdCAgdHJ5IHtcblx0ICAgIHdvcmtzID0gUCAmJiBQLnJlc29sdmUgJiYgdGVzdFJlc29sdmUoKTtcblx0ICAgIHNldFByb3RvKFAyLCBQKTtcblx0ICAgIFAyLnByb3RvdHlwZSA9ICQuY3JlYXRlKFAucHJvdG90eXBlLCB7Y29uc3RydWN0b3I6IHt2YWx1ZTogUDJ9fSk7XG5cdCAgICAvLyBhY3R1YWwgRmlyZWZveCBoYXMgYnJva2VuIHN1YmNsYXNzIHN1cHBvcnQsIHRlc3QgdGhhdFxuXHQgICAgaWYoIShQMi5yZXNvbHZlKDUpLnRoZW4oZnVuY3Rpb24oKXt9KSBpbnN0YW5jZW9mIFAyKSl7XG5cdCAgICAgIHdvcmtzID0gZmFsc2U7XG5cdCAgICB9XG5cdCAgICAvLyBhY3R1YWwgVjggYnVnLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDE2MlxuXHQgICAgaWYod29ya3MgJiYgX193ZWJwYWNrX3JlcXVpcmVfXygxNykpe1xuXHQgICAgICB2YXIgdGhlbmFibGVUaGVuR290dGVuID0gZmFsc2U7XG5cdCAgICAgIFAucmVzb2x2ZSgkLnNldERlc2Moe30sICd0aGVuJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24oKXsgdGhlbmFibGVUaGVuR290dGVuID0gdHJ1ZTsgfVxuXHQgICAgICB9KSk7XG5cdCAgICAgIHdvcmtzID0gdGhlbmFibGVUaGVuR290dGVuO1xuXHQgICAgfVxuXHQgIH0gY2F0Y2goZSl7IHdvcmtzID0gZmFsc2U7IH1cblx0ICByZXR1cm4gd29ya3M7XG5cdH0oKTtcblxuXHQvLyBoZWxwZXJzXG5cdHZhciBpc1Byb21pc2UgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAodXNlTmF0aXZlID8gY2xhc3NvZihpdCkgPT0gJ1Byb21pc2UnIDogUkVDT1JEIGluIGl0KTtcblx0fTtcblx0dmFyIHNhbWVDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKGEsIGIpe1xuXHQgIC8vIGxpYnJhcnkgd3JhcHBlciBzcGVjaWFsIGNhc2Vcblx0ICBpZihMSUJSQVJZICYmIGEgPT09IFAgJiYgYiA9PT0gV3JhcHBlcilyZXR1cm4gdHJ1ZTtcblx0ICByZXR1cm4gc2FtZShhLCBiKTtcblx0fTtcblx0dmFyIGdldENvbnN0cnVjdG9yID0gZnVuY3Rpb24oQyl7XG5cdCAgdmFyIFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXTtcblx0ICByZXR1cm4gUyAhPSB1bmRlZmluZWQgPyBTIDogQztcblx0fTtcblx0dmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbihpdCl7XG5cdCAgdmFyIHRoZW47XG5cdCAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xuXHR9O1xuXHR2YXIgbm90aWZ5ID0gZnVuY3Rpb24ocmVjb3JkLCBpc1JlamVjdCl7XG5cdCAgaWYocmVjb3JkLm4pcmV0dXJuO1xuXHQgIHJlY29yZC5uID0gdHJ1ZTtcblx0ICB2YXIgY2hhaW4gPSByZWNvcmQuYztcblx0ICBhc2FwKGZ1bmN0aW9uKCl7XG5cdCAgICB2YXIgdmFsdWUgPSByZWNvcmQudlxuXHQgICAgICAsIG9rICAgID0gcmVjb3JkLnMgPT0gMVxuXHQgICAgICAsIGkgICAgID0gMDtcblx0ICAgIHZhciBydW4gPSBmdW5jdGlvbihyZWFjdCl7XG5cdCAgICAgIHZhciBjYiA9IG9rID8gcmVhY3Qub2sgOiByZWFjdC5mYWlsXG5cdCAgICAgICAgLCByZXQsIHRoZW47XG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgaWYoY2Ipe1xuXHQgICAgICAgICAgaWYoIW9rKXJlY29yZC5oID0gdHJ1ZTtcblx0ICAgICAgICAgIHJldCA9IGNiID09PSB0cnVlID8gdmFsdWUgOiBjYih2YWx1ZSk7XG5cdCAgICAgICAgICBpZihyZXQgPT09IHJlYWN0LlApe1xuXHQgICAgICAgICAgICByZWFjdC5yZWooVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuXHQgICAgICAgICAgfSBlbHNlIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHJldCkpe1xuXHQgICAgICAgICAgICB0aGVuLmNhbGwocmV0LCByZWFjdC5yZXMsIHJlYWN0LnJlaik7XG5cdCAgICAgICAgICB9IGVsc2UgcmVhY3QucmVzKHJldCk7XG5cdCAgICAgICAgfSBlbHNlIHJlYWN0LnJlaih2YWx1ZSk7XG5cdCAgICAgIH0gY2F0Y2goZXJyKXtcblx0ICAgICAgICByZWFjdC5yZWooZXJyKTtcblx0ICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuXHQgICAgY2hhaW4ubGVuZ3RoID0gMDtcblx0ICAgIHJlY29yZC5uID0gZmFsc2U7XG5cdCAgICBpZihpc1JlamVjdClzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cdCAgICAgIHZhciBwcm9taXNlID0gcmVjb3JkLnBcblx0ICAgICAgICAsIGhhbmRsZXIsIGNvbnNvbGU7XG5cdCAgICAgIGlmKGlzVW5oYW5kbGVkKHByb21pc2UpKXtcblx0ICAgICAgICBpZihpc05vZGUpe1xuXHQgICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pe1xuXHQgICAgICAgICAgaGFuZGxlcih7cHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZX0pO1xuXHQgICAgICAgIH0gZWxzZSBpZigoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKXtcblx0ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0gcmVjb3JkLmEgPSB1bmRlZmluZWQ7XG5cdCAgICB9LCAxKTtcblx0ICB9KTtcblx0fTtcblx0dmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24ocHJvbWlzZSl7XG5cdCAgdmFyIHJlY29yZCA9IHByb21pc2VbUkVDT1JEXVxuXHQgICAgLCBjaGFpbiAgPSByZWNvcmQuYSB8fCByZWNvcmQuY1xuXHQgICAgLCBpICAgICAgPSAwXG5cdCAgICAsIHJlYWN0O1xuXHQgIGlmKHJlY29yZC5oKXJldHVybiBmYWxzZTtcblx0ICB3aGlsZShjaGFpbi5sZW5ndGggPiBpKXtcblx0ICAgIHJlYWN0ID0gY2hhaW5baSsrXTtcblx0ICAgIGlmKHJlYWN0LmZhaWwgfHwgIWlzVW5oYW5kbGVkKHJlYWN0LlApKXJldHVybiBmYWxzZTtcblx0ICB9IHJldHVybiB0cnVlO1xuXHR9O1xuXHR2YXIgJHJlamVjdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0ICB2YXIgcmVjb3JkID0gdGhpcztcblx0ICBpZihyZWNvcmQuZClyZXR1cm47XG5cdCAgcmVjb3JkLmQgPSB0cnVlO1xuXHQgIHJlY29yZCA9IHJlY29yZC5yIHx8IHJlY29yZDsgLy8gdW53cmFwXG5cdCAgcmVjb3JkLnYgPSB2YWx1ZTtcblx0ICByZWNvcmQucyA9IDI7XG5cdCAgcmVjb3JkLmEgPSByZWNvcmQuYy5zbGljZSgpO1xuXHQgIG5vdGlmeShyZWNvcmQsIHRydWUpO1xuXHR9O1xuXHR2YXIgJHJlc29sdmUgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdCAgdmFyIHJlY29yZCA9IHRoaXNcblx0ICAgICwgdGhlbjtcblx0ICBpZihyZWNvcmQuZClyZXR1cm47XG5cdCAgcmVjb3JkLmQgPSB0cnVlO1xuXHQgIHJlY29yZCA9IHJlY29yZC5yIHx8IHJlY29yZDsgLy8gdW53cmFwXG5cdCAgdHJ5IHtcblx0ICAgIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSl7XG5cdCAgICAgIGFzYXAoZnVuY3Rpb24oKXtcblx0ICAgICAgICB2YXIgd3JhcHBlciA9IHtyOiByZWNvcmQsIGQ6IGZhbHNlfTsgLy8gd3JhcFxuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG5cdCAgICAgICAgfSBjYXRjaChlKXtcblx0ICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmVjb3JkLnYgPSB2YWx1ZTtcblx0ICAgICAgcmVjb3JkLnMgPSAxO1xuXHQgICAgICBub3RpZnkocmVjb3JkLCBmYWxzZSk7XG5cdCAgICB9XG5cdCAgfSBjYXRjaChlKXtcblx0ICAgICRyZWplY3QuY2FsbCh7cjogcmVjb3JkLCBkOiBmYWxzZX0sIGUpOyAvLyB3cmFwXG5cdCAgfVxuXHR9O1xuXG5cdC8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5cdGlmKCF1c2VOYXRpdmUpe1xuXHQgIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG5cdCAgUCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3Ipe1xuXHQgICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcblx0ICAgIHZhciByZWNvcmQgPSB7XG5cdCAgICAgIHA6IHN0cmljdE5ldyh0aGlzLCBQLCBQUk9NSVNFKSwgICAgICAgICAvLyA8LSBwcm9taXNlXG5cdCAgICAgIGM6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcblx0ICAgICAgYTogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG5cdCAgICAgIHM6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuXHQgICAgICBkOiBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gZG9uZVxuXHQgICAgICB2OiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcblx0ICAgICAgaDogZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGhhbmRsZWQgcmVqZWN0aW9uXG5cdCAgICAgIG46IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBub3RpZnlcblx0ICAgIH07XG5cdCAgICB0aGlzW1JFQ09SRF0gPSByZWNvcmQ7XG5cdCAgICB0cnkge1xuXHQgICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHJlY29yZCwgMSksIGN0eCgkcmVqZWN0LCByZWNvcmQsIDEpKTtcblx0ICAgIH0gY2F0Y2goZXJyKXtcblx0ICAgICAgJHJlamVjdC5jYWxsKHJlY29yZCwgZXJyKTtcblx0ICAgIH1cblx0ICB9O1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oNzkpKFAucHJvdG90eXBlLCB7XG5cdCAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuXHQgICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdCAgICAgIHZhciBTID0gYW5PYmplY3QoYW5PYmplY3QodGhpcykuY29uc3RydWN0b3IpW1NQRUNJRVNdO1xuXHQgICAgICB2YXIgcmVhY3QgPSB7XG5cdCAgICAgICAgb2s6ICAgdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWUsXG5cdCAgICAgICAgZmFpbDogdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAgPyBvblJlamVjdGVkICA6IGZhbHNlXG5cdCAgICAgIH07XG5cdCAgICAgIHZhciBwcm9taXNlID0gcmVhY3QuUCA9IG5ldyAoUyAhPSB1bmRlZmluZWQgPyBTIDogUCkoZnVuY3Rpb24ocmVzLCByZWope1xuXHQgICAgICAgIHJlYWN0LnJlcyA9IHJlcztcblx0ICAgICAgICByZWFjdC5yZWogPSByZWo7XG5cdCAgICAgIH0pO1xuXHQgICAgICBhRnVuY3Rpb24ocmVhY3QucmVzKTtcblx0ICAgICAgYUZ1bmN0aW9uKHJlYWN0LnJlaik7XG5cdCAgICAgIHZhciByZWNvcmQgPSB0aGlzW1JFQ09SRF07XG5cdCAgICAgIHJlY29yZC5jLnB1c2gocmVhY3QpO1xuXHQgICAgICBpZihyZWNvcmQuYSlyZWNvcmQuYS5wdXNoKHJlYWN0KTtcblx0ICAgICAgaWYocmVjb3JkLnMpbm90aWZ5KHJlY29yZCwgZmFsc2UpO1xuXHQgICAgICByZXR1cm4gcHJvbWlzZTtcblx0ICAgIH0sXG5cdCAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuXHQgICAgJ2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5cdCAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcblx0ICAgIH1cblx0ICB9KTtcblx0fVxuXG5cdC8vIGV4cG9ydFxuXHQkZGVmKCRkZWYuRyArICRkZWYuVyArICRkZWYuRiAqICF1c2VOYXRpdmUsIHtQcm9taXNlOiBQfSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18oMjUpKFAsIFBST01JU0UpO1xuXHRzcGVjaWVzKFApO1xuXHRzcGVjaWVzKFdyYXBwZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKVtQUk9NSVNFXSk7XG5cblx0Ly8gc3RhdGljc1xuXHQkZGVmKCRkZWYuUyArICRkZWYuRiAqICF1c2VOYXRpdmUsIFBST01JU0UsIHtcblx0ICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuXHQgIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpe1xuXHQgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uKHJlcywgcmVqKXsgcmVqKHIpOyB9KTtcblx0ICB9XG5cdH0pO1xuXHQkZGVmKCRkZWYuUyArICRkZWYuRiAqICghdXNlTmF0aXZlIHx8IHRlc3RSZXNvbHZlKHRydWUpKSwgUFJPTUlTRSwge1xuXHQgIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuXHQgIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCl7XG5cdCAgICByZXR1cm4gaXNQcm9taXNlKHgpICYmIHNhbWVDb25zdHJ1Y3Rvcih4LmNvbnN0cnVjdG9yLCB0aGlzKVxuXHQgICAgICA/IHggOiBuZXcgdGhpcyhmdW5jdGlvbihyZXMpeyByZXMoeCk7IH0pO1xuXHQgIH1cblx0fSk7XG5cdCRkZWYoJGRlZi5TICsgJGRlZi5GICogISh1c2VOYXRpdmUgJiYgX193ZWJwYWNrX3JlcXVpcmVfXygzOCkoZnVuY3Rpb24oaXRlcil7XG5cdCAgUC5hbGwoaXRlcilbJ2NhdGNoJ10oZnVuY3Rpb24oKXt9KTtcblx0fSkpLCBQUk9NSVNFLCB7XG5cdCAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG5cdCAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpe1xuXHQgICAgdmFyIEMgICAgICA9IGdldENvbnN0cnVjdG9yKHRoaXMpXG5cdCAgICAgICwgdmFsdWVzID0gW107XG5cdCAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24ocmVzLCByZWope1xuXHQgICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIHZhbHVlcy5wdXNoLCB2YWx1ZXMpO1xuXHQgICAgICB2YXIgcmVtYWluaW5nID0gdmFsdWVzLmxlbmd0aFxuXHQgICAgICAgICwgcmVzdWx0cyAgID0gQXJyYXkocmVtYWluaW5nKTtcblx0ICAgICAgaWYocmVtYWluaW5nKSQuZWFjaC5jYWxsKHZhbHVlcywgZnVuY3Rpb24ocHJvbWlzZSwgaW5kZXgpe1xuXHQgICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcblx0ICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdmFsdWU7XG5cdCAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXMocmVzdWx0cyk7XG5cdCAgICAgICAgfSwgcmVqKTtcblx0ICAgICAgfSk7XG5cdCAgICAgIGVsc2UgcmVzKHJlc3VsdHMpO1xuXHQgICAgfSk7XG5cdCAgfSxcblx0ICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG5cdCAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSl7XG5cdCAgICB2YXIgQyA9IGdldENvbnN0cnVjdG9yKHRoaXMpO1xuXHQgICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uKHJlcywgcmVqKXtcblx0ICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbihwcm9taXNlKXtcblx0ICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihyZXMsIHJlaik7XG5cdCAgICAgIH0pO1xuXHQgICAgfSk7XG5cdCAgfVxuXHR9KTtcblxuLyoqKi8gfSxcbi8qIDY5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSl7XG5cdCAgaWYoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl0aHJvdyBUeXBlRXJyb3IobmFtZSArIFwiOiB1c2UgdGhlICduZXcnIG9wZXJhdG9yIVwiKTtcblx0ICByZXR1cm4gaXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA3MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGN0eCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNylcblx0ICAsIGNhbGwgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMClcblx0ICAsIGlzQXJyYXlJdGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMylcblx0ICAsIGFuT2JqZWN0ICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSlcblx0ICAsIHRvTGVuZ3RoICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNClcblx0ICAsIGdldEl0ZXJGbiAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0KXtcblx0ICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKGl0ZXJhYmxlKVxuXHQgICAgLCBmICAgICAgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSlcblx0ICAgICwgaW5kZXggID0gMFxuXHQgICAgLCBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yO1xuXHQgIGlmKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcblx0ICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3Jcblx0ICBpZihpc0FycmF5SXRlcihpdGVyRm4pKWZvcihsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG5cdCAgICBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG5cdCAgfSBlbHNlIGZvcihpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyApe1xuXHQgICAgY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogNzEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuXHQvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXHR2YXIgZ2V0RGVzYyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KS5nZXREZXNjXG5cdCAgLCBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpXG5cdCAgLCBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xuXHR2YXIgY2hlY2sgPSBmdW5jdGlvbihPLCBwcm90byl7XG5cdCAgYW5PYmplY3QoTyk7XG5cdCAgaWYoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCl0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG5cdH07XG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblx0ICAgIGZ1bmN0aW9uKHRlc3QsIGJ1Z2d5LCBzZXQpe1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgIHNldCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpKEZ1bmN0aW9uLmNhbGwsIGdldERlc2MoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG5cdCAgICAgICAgc2V0KHRlc3QsIFtdKTtcblx0ICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcblx0ICAgICAgfSBjYXRjaChlKXsgYnVnZ3kgPSB0cnVlOyB9XG5cdCAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90byl7XG5cdCAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuXHQgICAgICAgIGlmKGJ1Z2d5KU8uX19wcm90b19fID0gcHJvdG87XG5cdCAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuXHQgICAgICAgIHJldHVybiBPO1xuXHQgICAgICB9O1xuXHQgICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcblx0ICBjaGVjazogY2hlY2tcblx0fTtcblxuLyoqKi8gfSxcbi8qIDcyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KXtcblx0ICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDczICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciAkICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSlcblx0ICAsIFNQRUNJRVMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnc3BlY2llcycpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEMpe1xuXHQgIGlmKF9fd2VicGFja19yZXF1aXJlX18oMTcpICYmICEoU1BFQ0lFUyBpbiBDKSkkLnNldERlc2MoQywgU1BFQ0lFUywge1xuXHQgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuXHQgICAgZ2V0OiBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfVxuXHQgIH0pO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNzQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBnbG9iYWwgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxyXG5cdCAgLCBtYWNyb3Rhc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KS5zZXRcclxuXHQgICwgT2JzZXJ2ZXIgID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXJcclxuXHQgICwgcHJvY2VzcyAgID0gZ2xvYmFsLnByb2Nlc3NcclxuXHQgICwgaXNOb2RlICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnXHJcblx0ICAsIGhlYWQsIGxhc3QsIG5vdGlmeTtcclxuXHJcblx0dmFyIGZsdXNoID0gZnVuY3Rpb24oKXtcclxuXHQgIHZhciBwYXJlbnQsIGRvbWFpbjtcclxuXHQgIGlmKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKXtcclxuXHQgICAgcHJvY2Vzcy5kb21haW4gPSBudWxsO1xyXG5cdCAgICBwYXJlbnQuZXhpdCgpO1xyXG5cdCAgfVxyXG5cdCAgd2hpbGUoaGVhZCl7XHJcblx0ICAgIGRvbWFpbiA9IGhlYWQuZG9tYWluO1xyXG5cdCAgICBpZihkb21haW4pZG9tYWluLmVudGVyKCk7XHJcblx0ICAgIGhlYWQuZm4uY2FsbCgpOyAvLyA8LSBjdXJyZW50bHkgd2UgdXNlIGl0IG9ubHkgZm9yIFByb21pc2UgLSB0cnkgLyBjYXRjaCBub3QgcmVxdWlyZWRcclxuXHQgICAgaWYoZG9tYWluKWRvbWFpbi5leGl0KCk7XHJcblx0ICAgIGhlYWQgPSBoZWFkLm5leHQ7XHJcblx0ICB9IGxhc3QgPSB1bmRlZmluZWQ7XHJcblx0ICBpZihwYXJlbnQpcGFyZW50LmVudGVyKCk7XHJcblx0fVxyXG5cclxuXHQvLyBOb2RlLmpzXHJcblx0aWYoaXNOb2RlKXtcclxuXHQgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XHJcblx0ICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xyXG5cdCAgfTtcclxuXHQvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXJcclxuXHR9IGVsc2UgaWYoT2JzZXJ2ZXIpe1xyXG5cdCAgdmFyIHRvZ2dsZSA9IDFcclxuXHQgICAgLCBub2RlICAgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XHJcblx0ICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcclxuXHQgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XHJcblx0ICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9IC10b2dnbGU7XHJcblx0ICB9O1xyXG5cdC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XHJcblx0Ly8gLSBzZXRJbW1lZGlhdGVcclxuXHQvLyAtIE1lc3NhZ2VDaGFubmVsXHJcblx0Ly8gLSB3aW5kb3cucG9zdE1lc3NhZ1xyXG5cdC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXHJcblx0Ly8gLSBzZXRUaW1lb3V0XHJcblx0fSBlbHNlIHtcclxuXHQgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XHJcblx0ICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcclxuXHQgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XHJcblx0ICB9O1xyXG5cdH1cclxuXHJcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc2FwKGZuKXtcclxuXHQgIHZhciB0YXNrID0ge2ZuOiBmbiwgbmV4dDogdW5kZWZpbmVkLCBkb21haW46IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbn07XHJcblx0ICBpZihsYXN0KWxhc3QubmV4dCA9IHRhc2s7XHJcblx0ICBpZighaGVhZCl7XHJcblx0ICAgIGhlYWQgPSB0YXNrO1xyXG5cdCAgICBub3RpZnkoKTtcclxuXHQgIH0gbGFzdCA9IHRhc2s7XHJcblx0fTtcblxuLyoqKi8gfSxcbi8qIDc1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciBjdHggICAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KVxuXHQgICwgaW52b2tlICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nilcblx0ICAsIGh0bWwgICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzcpXG5cdCAgLCBjZWwgICAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4KVxuXHQgICwgZ2xvYmFsICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcblx0ICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG5cdCAgLCBzZXRUYXNrICAgICAgICAgICAgPSBnbG9iYWwuc2V0SW1tZWRpYXRlXG5cdCAgLCBjbGVhclRhc2sgICAgICAgICAgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGVcblx0ICAsIE1lc3NhZ2VDaGFubmVsICAgICA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbFxuXHQgICwgY291bnRlciAgICAgICAgICAgID0gMFxuXHQgICwgcXVldWUgICAgICAgICAgICAgID0ge31cblx0ICAsIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnXG5cdCAgLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblx0dmFyIHJ1biA9IGZ1bmN0aW9uKCl7XG5cdCAgdmFyIGlkID0gK3RoaXM7XG5cdCAgaWYocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKXtcblx0ICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcblx0ICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG5cdCAgICBmbigpO1xuXHQgIH1cblx0fTtcblx0dmFyIGxpc3RuZXIgPSBmdW5jdGlvbihldmVudCl7XG5cdCAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG5cdH07XG5cdC8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcblx0aWYoIXNldFRhc2sgfHwgIWNsZWFyVGFzayl7XG5cdCAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbil7XG5cdCAgICB2YXIgYXJncyA9IFtdLCBpID0gMTtcblx0ICAgIHdoaWxlKGFyZ3VtZW50cy5sZW5ndGggPiBpKWFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG5cdCAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24oKXtcblx0ICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuXHQgICAgfTtcblx0ICAgIGRlZmVyKGNvdW50ZXIpO1xuXHQgICAgcmV0dXJuIGNvdW50ZXI7XG5cdCAgfTtcblx0ICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCl7XG5cdCAgICBkZWxldGUgcXVldWVbaWRdO1xuXHQgIH07XG5cdCAgLy8gTm9kZS5qcyAwLjgtXG5cdCAgaWYoX193ZWJwYWNrX3JlcXVpcmVfXygzNykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKXtcblx0ICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuXHQgICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG5cdCAgICB9O1xuXHQgIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcblx0ICB9IGVsc2UgaWYoTWVzc2FnZUNoYW5uZWwpe1xuXHQgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDtcblx0ICAgIHBvcnQgICAgPSBjaGFubmVsLnBvcnQyO1xuXHQgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0bmVyO1xuXHQgICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG5cdCAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG5cdCAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcblx0ICB9IGVsc2UgaWYoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHQpe1xuXHQgICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG5cdCAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuXHQgICAgfTtcblx0ICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdG5lciwgZmFsc2UpO1xuXHQgIC8vIElFOC1cblx0ICB9IGVsc2UgaWYoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0Jykpe1xuXHQgICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG5cdCAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uKCl7XG5cdCAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcblx0ICAgICAgICBydW4uY2FsbChpZCk7XG5cdCAgICAgIH07XG5cdCAgICB9O1xuXHQgIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG5cdCAgfSBlbHNlIHtcblx0ICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuXHQgICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG5cdCAgICB9O1xuXHQgIH1cblx0fVxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICBzZXQ6ICAgc2V0VGFzayxcblx0ICBjbGVhcjogY2xlYXJUYXNrXG5cdH07XG5cbi8qKiovIH0sXG4vKiA3NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Ly8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIGFyZ3MsIHRoYXQpe1xuXHQgIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcblx0ICBzd2l0Y2goYXJncy5sZW5ndGgpe1xuXHQgICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG5cdCAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG5cdCAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG5cdCAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG5cdCAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG5cdCAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG5cdCAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG5cdCAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG5cdCAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG5cdCAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG5cdCAgfSByZXR1cm4gICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNzcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkuZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4vKioqLyB9LFxuLyogNzggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpXG5cdCAgLCBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpLmRvY3VtZW50XG5cdCAgLy8gaW4gb2xkIElFIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnXG5cdCAgLCBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDc5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgJHJlZGVmID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odGFyZ2V0LCBzcmMpe1xuXHQgIGZvcih2YXIga2V5IGluIHNyYykkcmVkZWYodGFyZ2V0LCBrZXksIHNyY1trZXldKTtcblx0ICByZXR1cm4gdGFyZ2V0O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogODAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg4MSksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDgxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDgyKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5PYmplY3Qua2V5cztcblxuLyoqKi8gfSxcbi8qIDgyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcblx0dmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg4MykoJ2tleXMnLCBmdW5jdGlvbigka2V5cyl7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpe1xuXHQgICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG5cdCAgfTtcblx0fSk7XG5cbi8qKiovIH0sXG4vKiA4MyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBleGVjKXtcblx0ICB2YXIgJGRlZiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApXG5cdCAgICAsIGZuICAgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygxMikuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldXG5cdCAgICAsIGV4cCAgPSB7fTtcblx0ICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuXHQgICRkZWYoJGRlZi5TICsgJGRlZi5GICogX193ZWJwYWNrX3JlcXVpcmVfXygxOCkoZnVuY3Rpb24oKXsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDg0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oODUpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA4NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg2Nyk7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDg2KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg4OSk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikuU2V0O1xuXG4vKioqLyB9LFxuLyogODYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyIHN0cm9uZyA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xuXG5cdC8vIDIzLjIgU2V0IE9iamVjdHNcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg4OCkoJ1NldCcsIGZ1bmN0aW9uKGdldCl7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50c1swXSk7IH07XG5cdH0sIHtcblx0ICAvLyAyMy4yLjMuMSBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcblx0ICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSl7XG5cdCAgICByZXR1cm4gc3Ryb25nLmRlZih0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG5cdCAgfVxuXHR9LCBzdHJvbmcpO1xuXG4vKioqLyB9LFxuLyogODcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyICQgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCBoaWRlICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KVxuXHQgICwgY3R4ICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNylcblx0ICAsIHNwZWNpZXMgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzMpXG5cdCAgLCBzdHJpY3ROZXcgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KVxuXHQgICwgZGVmaW5lZCAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KVxuXHQgICwgZm9yT2YgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MClcblx0ICAsIHN0ZXAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpXG5cdCAgLCBJRCAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKSgnaWQnKVxuXHQgICwgJGhhcyAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSlcblx0ICAsIGlzT2JqZWN0ICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpXG5cdCAgLCBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGlzT2JqZWN0XG5cdCAgLCBTVVBQT1JUX0RFU0MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KVxuXHQgICwgU0laRSAgICAgICAgID0gU1VQUE9SVF9ERVNDID8gJ19zJyA6ICdzaXplJ1xuXHQgICwgaWQgICAgICAgICAgID0gMDtcblxuXHR2YXIgZmFzdEtleSA9IGZ1bmN0aW9uKGl0LCBjcmVhdGUpe1xuXHQgIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcblx0ICBpZighaXNPYmplY3QoaXQpKXJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG5cdCAgaWYoISRoYXMoaXQsIElEKSl7XG5cdCAgICAvLyBjYW4ndCBzZXQgaWQgdG8gZnJvemVuIG9iamVjdFxuXHQgICAgaWYoIWlzRXh0ZW5zaWJsZShpdCkpcmV0dXJuICdGJztcblx0ICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIGlkXG5cdCAgICBpZighY3JlYXRlKXJldHVybiAnRSc7XG5cdCAgICAvLyBhZGQgbWlzc2luZyBvYmplY3QgaWRcblx0ICAgIGhpZGUoaXQsIElELCArK2lkKTtcblx0ICAvLyByZXR1cm4gb2JqZWN0IGlkIHdpdGggcHJlZml4XG5cdCAgfSByZXR1cm4gJ08nICsgaXRbSURdO1xuXHR9O1xuXG5cdHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uKHRoYXQsIGtleSl7XG5cdCAgLy8gZmFzdCBjYXNlXG5cdCAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpLCBlbnRyeTtcblx0ICBpZihpbmRleCAhPT0gJ0YnKXJldHVybiB0aGF0Ll9pW2luZGV4XTtcblx0ICAvLyBmcm96ZW4gb2JqZWN0IGNhc2Vcblx0ICBmb3IoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKXtcblx0ICAgIGlmKGVudHJ5LmsgPT0ga2V5KXJldHVybiBlbnRyeTtcblx0ICB9XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpe1xuXHQgICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRoYXQsIGl0ZXJhYmxlKXtcblx0ICAgICAgc3RyaWN0TmV3KHRoYXQsIEMsIE5BTUUpO1xuXHQgICAgICB0aGF0Ll9pID0gJC5jcmVhdGUobnVsbCk7IC8vIGluZGV4XG5cdCAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgICAgLy8gZmlyc3QgZW50cnlcblx0ICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgICAgICAvLyBsYXN0IGVudHJ5XG5cdCAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgICAgLy8gc2l6ZVxuXHQgICAgICBpZihpdGVyYWJsZSAhPSB1bmRlZmluZWQpZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuXHQgICAgfSk7XG5cdCAgICBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KShDLnByb3RvdHlwZSwge1xuXHQgICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcblx0ICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG5cdCAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpe1xuXHQgICAgICAgIGZvcih2YXIgdGhhdCA9IHRoaXMsIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pe1xuXHQgICAgICAgICAgZW50cnkuciA9IHRydWU7XG5cdCAgICAgICAgICBpZihlbnRyeS5wKWVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG5cdCAgICAgIH0sXG5cdCAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcblx0ICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG5cdCAgICAgICdkZWxldGUnOiBmdW5jdGlvbihrZXkpe1xuXHQgICAgICAgIHZhciB0aGF0ICA9IHRoaXNcblx0ICAgICAgICAgICwgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuXHQgICAgICAgIGlmKGVudHJ5KXtcblx0ICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkublxuXHQgICAgICAgICAgICAsIHByZXYgPSBlbnRyeS5wO1xuXHQgICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG5cdCAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcblx0ICAgICAgICAgIGlmKHByZXYpcHJldi5uID0gbmV4dDtcblx0ICAgICAgICAgIGlmKG5leHQpbmV4dC5wID0gcHJldjtcblx0ICAgICAgICAgIGlmKHRoYXQuX2YgPT0gZW50cnkpdGhhdC5fZiA9IG5leHQ7XG5cdCAgICAgICAgICBpZih0aGF0Ll9sID09IGVudHJ5KXRoYXQuX2wgPSBwcmV2O1xuXHQgICAgICAgICAgdGhhdFtTSVpFXS0tO1xuXHQgICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG5cdCAgICAgIH0sXG5cdCAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuXHQgICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcblx0ICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qLCB0aGF0ID0gdW5kZWZpbmVkICovKXtcblx0ICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0sIDMpXG5cdCAgICAgICAgICAsIGVudHJ5O1xuXHQgICAgICAgIHdoaWxlKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZil7XG5cdCAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuXHQgICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG5cdCAgICAgICAgICB3aGlsZShlbnRyeSAmJiBlbnRyeS5yKWVudHJ5ID0gZW50cnkucDtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sXG5cdCAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcblx0ICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG5cdCAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSl7XG5cdCAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICBpZihTVVBQT1JUX0RFU0MpJC5zZXREZXNjKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuXHQgICAgICAgIHJldHVybiBkZWZpbmVkKHRoaXNbU0laRV0pO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBDO1xuXHQgIH0sXG5cdCAgZGVmOiBmdW5jdGlvbih0aGF0LCBrZXksIHZhbHVlKXtcblx0ICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSlcblx0ICAgICAgLCBwcmV2LCBpbmRleDtcblx0ICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuXHQgICAgaWYoZW50cnkpe1xuXHQgICAgICBlbnRyeS52ID0gdmFsdWU7XG5cdCAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG5cdCAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG5cdCAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuXHQgICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuXHQgICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuXHQgICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG5cdCAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcblx0ICAgICAgfTtcblx0ICAgICAgaWYoIXRoYXQuX2YpdGhhdC5fZiA9IGVudHJ5O1xuXHQgICAgICBpZihwcmV2KXByZXYubiA9IGVudHJ5O1xuXHQgICAgICB0aGF0W1NJWkVdKys7XG5cdCAgICAgIC8vIGFkZCB0byBpbmRleFxuXHQgICAgICBpZihpbmRleCAhPT0gJ0YnKXRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG5cdCAgICB9IHJldHVybiB0aGF0O1xuXHQgIH0sXG5cdCAgZ2V0RW50cnk6IGdldEVudHJ5LFxuXHQgIHNldFN0cm9uZzogZnVuY3Rpb24oQywgTkFNRSwgSVNfTUFQKXtcblx0ICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuXHQgICAgLy8gMjMuMS4zLjQsIDIzLjEuMy44LCAyMy4xLjMuMTEsIDIzLjEuMy4xMiwgMjMuMi4zLjUsIDIzLjIuMy44LCAyMy4yLjMuMTAsIDIzLjIuMy4xMVxuXHQgICAgX193ZWJwYWNrX3JlcXVpcmVfXyg4KShDLCBOQU1FLCBmdW5jdGlvbihpdGVyYXRlZCwga2luZCl7XG5cdCAgICAgIHRoaXMuX3QgPSBpdGVyYXRlZDsgIC8vIHRhcmdldFxuXHQgICAgICB0aGlzLl9rID0ga2luZDsgICAgICAvLyBraW5kXG5cdCAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7IC8vIHByZXZpb3VzXG5cdCAgICB9LCBmdW5jdGlvbigpe1xuXHQgICAgICB2YXIgdGhhdCAgPSB0aGlzXG5cdCAgICAgICAgLCBraW5kICA9IHRoYXQuX2tcblx0ICAgICAgICAsIGVudHJ5ID0gdGhhdC5fbDtcblx0ICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG5cdCAgICAgIHdoaWxlKGVudHJ5ICYmIGVudHJ5LnIpZW50cnkgPSBlbnRyeS5wO1xuXHQgICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuXHQgICAgICBpZighdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKXtcblx0ICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuXHQgICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG5cdCAgICAgIH1cblx0ICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuXHQgICAgICBpZihraW5kID09ICdrZXlzJyAgKXJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuXHQgICAgICBpZihraW5kID09ICd2YWx1ZXMnKXJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuXHQgICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuXHQgICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycgLCAhSVNfTUFQLCB0cnVlKTtcblxuXHQgICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcblx0ICAgIHNwZWNpZXMoQyk7XG5cdCAgICBzcGVjaWVzKF9fd2VicGFja19yZXF1aXJlX18oMTIpW05BTUVdKTsgLy8gZm9yIHdyYXBwZXJcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiA4OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgJCAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCAkZGVmICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcblx0ICAsIGhpZGUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KVxuXHQgICwgZm9yT2YgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzApXG5cdCAgLCBzdHJpY3ROZXcgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSyl7XG5cdCAgdmFyIEJhc2UgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlbTkFNRV1cblx0ICAgICwgQyAgICAgPSBCYXNlXG5cdCAgICAsIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJ1xuXHQgICAgLCBwcm90byA9IEMgJiYgQy5wcm90b3R5cGVcblx0ICAgICwgTyAgICAgPSB7fTtcblx0ICBpZighX193ZWJwYWNrX3JlcXVpcmVfXygxNykgfHwgdHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJ1xuXHQgICAgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIV9fd2VicGFja19yZXF1aXJlX18oMTgpKGZ1bmN0aW9uKCl7IG5ldyBDKCkuZW50cmllcygpLm5leHQoKTsgfSkpXG5cdCAgKXtcblx0ICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG5cdCAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuXHQgICAgX193ZWJwYWNrX3JlcXVpcmVfXyg3OSkoQy5wcm90b3R5cGUsIG1ldGhvZHMpO1xuXHQgIH0gZWxzZSB7XG5cdCAgICBDID0gd3JhcHBlcihmdW5jdGlvbih0YXJnZXQsIGl0ZXJhYmxlKXtcblx0ICAgICAgc3RyaWN0TmV3KHRhcmdldCwgQywgTkFNRSk7XG5cdCAgICAgIHRhcmdldC5fYyA9IG5ldyBCYXNlO1xuXHQgICAgICBpZihpdGVyYWJsZSAhPSB1bmRlZmluZWQpZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGFyZ2V0W0FEREVSXSwgdGFyZ2V0KTtcblx0ICAgIH0pO1xuXHQgICAgJC5lYWNoLmNhbGwoJ2FkZCxjbGVhcixkZWxldGUsZm9yRWFjaCxnZXQsaGFzLHNldCxrZXlzLHZhbHVlcyxlbnRyaWVzJy5zcGxpdCgnLCcpLGZ1bmN0aW9uKEtFWSl7XG5cdCAgICAgIHZhciBjaGFpbiA9IEtFWSA9PSAnYWRkJyB8fCBLRVkgPT0gJ3NldCc7XG5cdCAgICAgIGlmKEtFWSBpbiBwcm90byAmJiAhKElTX1dFQUsgJiYgS0VZID09ICdjbGVhcicpKWhpZGUoQy5wcm90b3R5cGUsIEtFWSwgZnVuY3Rpb24oYSwgYil7XG5cdCAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2NbS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuXHQgICAgICAgIHJldHVybiBjaGFpbiA/IHRoaXMgOiByZXN1bHQ7XG5cdCAgICAgIH0pO1xuXHQgICAgfSk7XG5cdCAgICBpZignc2l6ZScgaW4gcHJvdG8pJC5zZXREZXNjKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jLnNpemU7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjUpKEMsIE5BTUUpO1xuXG5cdCAgT1tOQU1FXSA9IEM7XG5cdCAgJGRlZigkZGVmLkcgKyAkZGVmLlcgKyAkZGVmLkYsIE8pO1xuXG5cdCAgaWYoIUlTX1dFQUspY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuXG5cdCAgcmV0dXJuIEM7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA4OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxuXHR2YXIgJGRlZiAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcblxuXHQkZGVmKCRkZWYuUCwgJ1NldCcsIHt0b0pTT046IF9fd2VicGFja19yZXF1aXJlX18oOTApKCdTZXQnKX0pO1xuXG4vKioqLyB9LFxuLyogOTAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cblx0dmFyIGZvck9mICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKVxuXHQgICwgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUpe1xuXHQgIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKXtcblx0ICAgIGlmKGNsYXNzb2YodGhpcykgIT0gTkFNRSl0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuXHQgICAgdmFyIGFyciA9IFtdO1xuXHQgICAgZm9yT2YodGhpcywgZmFsc2UsIGFyci5wdXNoLCBhcnIpO1xuXHQgICAgcmV0dXJuIGFycjtcblx0ICB9O1xuXHR9O1xuXG4vKioqLyB9XG4vKioqKioqLyBdKVxufSk7XG47IiwibW9kdWxlLmV4cG9ydHMgPSBERzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJ4anM7IiwibW9kdWxlLmV4cG9ydHMgPSB1aTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFNlcXVlbmNlQWxpZ25tZW50IH0gZnJvbSAnLi9zZXFfYWxpZ24nO1xuZXhwb3J0IGNvbnN0IF9wYWNrYWdlID0gbmV3IERHLlBhY2thZ2UoKTtcbmltcG9ydCB7IFdlYkxvZ28gfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdmlld2Vycy93ZWItbG9nbyc7XG4vL25hbWU6IHNlcXVlbmNlQWxpZ25tZW50XG4vL2lucHV0OiBzdHJpbmcgYWxpZ25UeXBlIHtjaG9pY2VzOiBbJ0xvY2FsIGFsaWdubWVudCcsICdHbG9iYWwgYWxpZ25tZW50J119XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuLy9pbnB1dDogc3RyaW5nIGFsaWduVGFibGUge2Nob2ljZXM6IFsnQVVUTycsICdOVUNMRU9USURFUycsICdCTE9TVU00NScsICdCTE9TVU01MCcsJ0JMT1NVTTYyJywnQkxPU1VNODAnLCdCTE9TVU05MCcsJ1BBTTMwJywnUEFNNzAnLCdQQU0yNTAnLCdTQ0hORUlERVInLCdUUkFOUyddfVxuLy9pbnB1dDogZG91YmxlIGdhcFxuLy9pbnB1dDogc3RyaW5nIHNlcTFcbi8vaW5wdXQ6IHN0cmluZyBzZXEyXG4vL291dHB1dDogb2JqZWN0IHJlc1xuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlQWxpZ25tZW50KGFsaWduVHlwZSwgYWxpZ25UYWJsZSwgZ2FwLCBzZXExLCBzZXEyKSB7XG4gICAgY29uc3QgdG9BbGlnbiA9IG5ldyBTZXF1ZW5jZUFsaWdubWVudChzZXExLCBzZXEyLCBnYXAsIGFsaWduVGFibGUpO1xuICAgIGNvbnN0IHJlcyA9IGFsaWduVHlwZSA9PSAnTG9jYWwgYWxpZ25tZW50JyA/IHRvQWxpZ24uc21pdGhXYXRlcm1hbigpIDogdG9BbGlnbi5uZWVkbGVtYW5XdW5jaCgpO1xuICAgIHJldHVybiByZXM7XG59XG4vL25hbWU6IFdlYkxvZ29cbi8vZGVzY3JpcHRpb246IFdlYkxvZ28gdmlld2VyXG4vL3RhZ3M6IHZpZXdlciwgcGFuZWxcbi8vb3V0cHV0OiB2aWV3ZXIgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gd2ViTG9nb1ZpZXdlcigpIHtcbiAgICByZXR1cm4gbmV3IFdlYkxvZ28oKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==
|
|
7667
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFnRDtBQUN6QyxpQ0FBaUMseURBQWM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsT0FBTztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQseUJBQXlCO0FBQzlFLHFEQUFxRCx5QkFBeUI7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqT0s7QUFDekMsa0NBQWtDLHlEQUFjO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOzs7Ozs7Ozs7Ozs7Ozs7QUMxQnBDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQ3BDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsY0FBYztBQUN0QztBQUNBO0FBQ0Es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QixZQUFZO0FBQ1o7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7Ozs7Ozs7Ozs7Ozs7OztBQ3hPM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGdCQUFnQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LE1BQU07QUFDTixJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0UsZUFBZTtBQUN2RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsZUFBZTtBQUMzRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEUsZUFBZTtBQUN6RjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxLQUFLLEVBQUUsRUFHVjs7QUFFVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLEtBQUssRUFBRSxFQUdWOztBQUVWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRFQUE0RSxlQUFlO0FBQzNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJGQUEyRixlQUFlO0FBQzFHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0EsMkVBQTJFLGVBQWU7QUFDMUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0EsMkVBQTJFLGVBQWU7QUFDMUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0EsK0ZBQStGLGVBQWU7QUFDOUc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2REFBNkQsc0VBQXNFO0FBQ25JOztBQUVBO0FBQ0E7QUFDQSxhQUFh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Q0E7O0FBRUE7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0I7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLDZCQUE2QixjQUFjLEtBQUssZ0NBQW1COztBQUVoRyxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHNCQUFzQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7O0FBRzlCLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxpQ0FBbUI7O0FBRW5ELG9CQUFvQixXQUFXLGlDQUFtQjs7QUFFbEQsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQsQ0FBQyxpQ0FBbUI7QUFDcEIsa0JBQWtCLGlDQUFtQjs7QUFFckMsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQ7QUFDQTtBQUNBLHNCQUFzQixpQ0FBbUI7QUFDekMsc0JBQXNCLGlDQUFtQjtBQUN6QyxzQkFBc0IsaUNBQW1CO0FBQ3pDLHNCQUFzQixpQ0FBbUI7QUFDekMsc0JBQXNCLGlDQUFtQjtBQUN6QyxzQkFBc0IsaUNBQW1CO0FBQ3pDLHNCQUFzQixpQ0FBbUI7QUFDekMsc0JBQXNCLGlDQUFtQjtBQUN6QyxzQkFBc0IsaUNBQW1CO0FBQ3pDLHNCQUFzQixpQ0FBbUI7QUFDekMsc0JBQXNCLGlDQUFtQjtBQUN6QyxzQkFBc0IsaUNBQW1CO0FBQ3pDLHNCQUFzQixpQ0FBbUI7QUFDekMsc0JBQXNCLGlDQUFtQjtBQUN6QyxzQkFBc0IsaUNBQW1CO0FBQ3pDLHNCQUFzQixpQ0FBbUI7QUFDekMsc0JBQXNCLGlDQUFtQjtBQUN6QyxzQkFBc0IsaUNBQW1CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCLHNCQUFzQiwyQkFBMkIsU0FBUztBQUMxRCxJQUFJO0FBQ0osRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQSxPQUFPO0FBQ1A7QUFDQSx1QkFBdUIsaUNBQWlDO0FBQ3hELE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQ0FBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSiwwQkFBMEIsZ0JBQWdCO0FBQzFDLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHdCQUF3QixnQkFBZ0I7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQsaUJBQWlCLGlDQUFtQjtBQUNwQyxpQkFBaUIsaUNBQW1CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQ7QUFDQSxtQkFBbUI7QUFDbkIsaUJBQWlCLGlDQUFtQjtBQUNwQyxpQkFBaUIsaUNBQW1COztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQ7QUFDQSxTQUFTLGlDQUFtQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQsb0JBQW9CLFdBQVcsaUNBQW1COztBQUVsRCxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsaUNBQW1COztBQUVuRCxTQUFTLGlDQUFtQjtBQUM1QjtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQsb0JBQW9CLFdBQVcsaUNBQW1COztBQUVsRCxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsaUNBQW1COztBQUVuRCxDQUFDLGlDQUFtQjtBQUNwQixDQUFDLGlDQUFtQjtBQUNwQixDQUFDLGlDQUFtQjtBQUNwQixDQUFDLGlDQUFtQjtBQUNwQixrQkFBa0IsaUNBQW1COztBQUVyQyxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsaUNBQW1COztBQUVuRDtBQUNBLGtCQUFrQixpQ0FBbUI7QUFDckMsa0JBQWtCLGlDQUFtQjtBQUNyQyxrQkFBa0IsaUNBQW1CO0FBQ3JDLGtCQUFrQixpQ0FBbUI7QUFDckMsa0JBQWtCLGlDQUFtQjtBQUNyQyxrQkFBa0IsaUNBQW1CO0FBQ3JDLGtCQUFrQixpQ0FBbUI7QUFDckMsa0JBQWtCLGlDQUFtQjtBQUNyQyxrQkFBa0IsaUNBQW1CO0FBQ3JDLGtCQUFrQixpQ0FBbUI7QUFDckMsa0JBQWtCLGlDQUFtQjtBQUNyQyxrQkFBa0IsaUNBQW1CO0FBQ3JDLGtCQUFrQixpQ0FBbUI7QUFDckMsa0JBQWtCLGlDQUFtQjtBQUNyQyxrQkFBa0IsaUNBQW1CO0FBQ3JDLGtCQUFrQixpQ0FBbUI7QUFDckMsa0JBQWtCLGlDQUFtQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxjQUFjLFdBQVc7QUFDcEU7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlDQUFtQjtBQUNwQztBQUNBLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLLFVBQVU7QUFDZjtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxvQkFBb0IsZ0NBQWdDO0FBQ3BELFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNULE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFFBQVE7QUFDUixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsbUJBQW1CLG9CQUFvQixNQUFNO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUcsaUNBQW1CO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0EsOENBQThDLFdBQVc7QUFDekQsQ0FBQyxpQ0FBbUI7QUFDcEI7QUFDQSxtQkFBbUIsaUNBQW1COztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxTQUFTO0FBQ2xEO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFNBQVM7QUFDOUM7QUFDQSxFQUFFO0FBQ0YsdUNBQXVDLGlDQUFtQjtBQUMxRCxvQ0FBb0M7QUFDcEMsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQSxFQUFFOztBQUVGLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxpQ0FBbUI7O0FBRW5ELG1CQUFtQixpQ0FBbUI7QUFDdEMsbUJBQW1CLGlDQUFtQjtBQUN0QyxtQkFBbUIsaUNBQW1CO0FBQ3RDLG1CQUFtQixpQ0FBbUI7QUFDdEMsbUJBQW1CLGlDQUFtQjtBQUN0QyxtQkFBbUIsaUNBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFLGdCQUFnQjtBQUNsRjtBQUNBLEtBQUssMkNBQTJDLGdDQUFnQztBQUNoRjtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQ7QUFDQTtBQUNBLGdCQUFnQixpQ0FBbUI7QUFDbkMsZ0JBQWdCLGlDQUFtQjtBQUNuQyxnQkFBZ0IsaUNBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBLGVBQWUsaUNBQW1CO0FBQ2xDO0FBQ0E7QUFDQSxTQUFTLFVBQVU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxHQUFHO0FBQ1Q7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQ7QUFDQSxlQUFlLGlDQUFtQjtBQUNsQyxlQUFlLGlDQUFtQjtBQUNsQztBQUNBLE1BQU0saUNBQW1CO0FBQ3pCO0FBQ0Esc0JBQXNCO0FBQ3RCLElBQUk7QUFDSjs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsaUNBQW1COztBQUVuRCxpQkFBaUIsaUNBQW1CO0FBQ3BDLGlCQUFpQixpQ0FBbUI7QUFDcEM7QUFDQTtBQUNBLGlCQUFpQixpQ0FBbUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esc0NBQXNDLG9CQUFvQixHQUFHO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsaUNBQW1COztBQUVuRDtBQUNBLDBCQUEwQixpQ0FBbUI7QUFDN0MsMEJBQTBCLGlDQUFtQjtBQUM3QywwQkFBMEIsaUNBQW1CO0FBQzdDLDBCQUEwQixpQ0FBbUI7QUFDN0MsMEJBQTBCLGlDQUFtQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0saUNBQW1CO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxpQ0FBbUI7O0FBRW5ELGtCQUFrQixpQ0FBbUI7O0FBRXJDLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxpQ0FBbUI7O0FBRW5ELGdCQUFnQixpQ0FBbUI7QUFDbkMsZ0JBQWdCLGlDQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxpQ0FBbUI7O0FBRW5ELGNBQWMsaUNBQW1CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxpQ0FBbUI7O0FBRW5ELG9CQUFvQixXQUFXLGlDQUFtQjs7QUFFbEQsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQsQ0FBQyxpQ0FBbUI7QUFDcEIsa0JBQWtCLGlDQUFtQjs7QUFFckMsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQ7QUFDQSxnQkFBZ0IsaUNBQW1COztBQUVuQyxDQUFDLGlDQUFtQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxpQ0FBbUI7O0FBRW5EO0FBQ0E7QUFDQSxjQUFjLGlDQUFtQjtBQUNqQyxlQUFlLGlDQUFtQixpQkFBaUI7QUFDbkQ7QUFDQTtBQUNBLDBCQUEwQixpQ0FBbUIsaUJBQWlCLFFBQVE7QUFDdEU7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQsb0JBQW9CLFdBQVcsaUNBQW1COztBQUVsRCxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsaUNBQW1COztBQUVuRCxDQUFDLGlDQUFtQjtBQUNwQixDQUFDLGlDQUFtQjtBQUNwQixDQUFDLGlDQUFtQjtBQUNwQixDQUFDLGlDQUFtQjtBQUNwQixDQUFDLGlDQUFtQjtBQUNwQixrQkFBa0IsaUNBQW1COztBQUVyQyxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsaUNBQW1COztBQUVuRDtBQUNBLGNBQWMsaUNBQW1COztBQUVqQztBQUNBLENBQUMsaUNBQW1CO0FBQ3BCLDBCQUEwQjtBQUMxQixFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxpQ0FBbUI7O0FBRW5EO0FBQ0Esb0JBQW9CLGlDQUFtQjtBQUN2QyxvQkFBb0IsaUNBQW1CO0FBQ3ZDLG9CQUFvQixpQ0FBbUI7QUFDdkMsb0JBQW9CLGlDQUFtQjtBQUN2QyxvQkFBb0IsaUNBQW1CO0FBQ3ZDLG9CQUFvQixpQ0FBbUI7QUFDdkMsb0JBQW9CLGlDQUFtQjtBQUN2QyxvQkFBb0IsaUNBQW1CO0FBQ3ZDLG9CQUFvQixpQ0FBbUI7QUFDdkMsb0JBQW9CLGlDQUFtQjtBQUN2QyxvQkFBb0IsaUNBQW1CO0FBQ3ZDO0FBQ0Esb0JBQW9CLGlDQUFtQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxpQ0FBaUM7QUFDakMsaUNBQWlDO0FBQ2pDLGlDQUFpQztBQUNqQztBQUNBLE1BQU07QUFDTixLQUFLLGlDQUFtQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssaUNBQW1CO0FBQ3hCLDRCQUE0QjtBQUM1Qiw0QkFBNEI7QUFDNUIsNEJBQTRCO0FBQzVCLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQSxhQUFhLGlDQUFtQixhQUFhO0FBQzdDO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQ7QUFDQSxrQkFBa0IsaUNBQW1CO0FBQ3JDLGtCQUFrQixpQ0FBbUI7QUFDckMsa0JBQWtCLGlDQUFtQjtBQUNyQyxrQkFBa0IsaUNBQW1CO0FBQ3JDLGtCQUFrQixpQ0FBbUI7O0FBRXJDO0FBQ0EsZUFBZSxpQ0FBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLGlDQUFtQjtBQUMxQix1Q0FBdUMsaUNBQW1CLGlCQUFpQiwyQkFBMkI7QUFDdEc7QUFDQTtBQUNBO0FBQ0EsS0FBSyxpQ0FBbUI7QUFDeEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBLEdBQUcsaUNBQW1COztBQUV0QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGlDQUFtQjs7QUFFbkQ7QUFDQSxhQUFhLGlDQUFtQjs7QUFFaEMsc0JBQXNCLFFBQVEsaUNBQW1CLFlBQVk7O0FBRTdELE9BQU87QUFDUDtBQUNBLGdDQUFnQyxpQ0FBbUI7O0FBRW5EO0FBQ0EsZUFBZSxpQ0FBbUI7QUFDbEMsZUFBZSxpQ0FBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7Ozs7OztBQ25yS0E7Ozs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7O0FDQUE7Ozs7OztVQ0FBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDdEJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQ0FBaUMsV0FBVztXQUM1QztXQUNBOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0EsdURBQXVELGlCQUFpQjtXQUN4RTtXQUNBLGdEQUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05zQztBQUNVO0FBQ3pDLHFCQUFxQixvREFBVTtBQUNpQztBQUNUO0FBQzlEO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCx3QkFBd0IseURBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxlQUFlLGlGQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLGVBQWUsdUVBQWU7QUFDOUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL2FtaW5vYWNpZHMuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy9udWNsZW90aWRlcy5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3NlcS1wYWxldHRlcy5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3Vua25vd24uanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy92ZC1yZWdpb25zLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdmlld2Vycy93ZWItbG9nby5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvcmFuZG9tLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucy5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3NlcV9hbGlnbi50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdmlld2Vycy92ZC1yZWdpb25zLXZpZXdlci50cyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvd3UvZGlzdC93dS5qcyIsIndlYnBhY2s6Ly9iaW8vZXh0ZXJuYWwgdmFyIFwiREdcIiIsIndlYnBhY2s6Ly9iaW8vZXh0ZXJuYWwgdmFyIFwicnhqc1wiIiwid2VicGFjazovL2Jpby9leHRlcm5hbCB2YXIgXCJ1aVwiIiwid2VicGFjazovL2Jpby93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9iaW8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9iaW8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9iaW8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvcGFja2FnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZXFQYWxldHRlQmFzZSB9IGZyb20gJy4vc2VxLXBhbGV0dGVzJztcbmV4cG9ydCBjbGFzcyBBbWlub2FjaWRzUGFsZXR0ZXMgZXh0ZW5kcyBTZXFQYWxldHRlQmFzZSB7XG4gICAgc3RhdGljIGdldCBMZXNrKCkge1xuICAgICAgICBpZiAodGhpcy5sZXNrID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHRoaXMubGVzayA9IHRoaXMubWFrZVBhbGV0dGUoW1xuICAgICAgICAgICAgICAgIFtbJ0cnLCAnQScsICdTJywgJ1QnXSwgJ29yYW5nZSddLFxuICAgICAgICAgICAgICAgIFtbJ0MnLCAnVicsICdJJywgJ0wnLCAnUCcsICdGJywgJ1knLCAnTScsICdXJ10sICdhbGxfZ3JlZW4nXSxcbiAgICAgICAgICAgICAgICBbWydOJywgJ1EnLCAnSCddLCAnbWFnZW50YSddLFxuICAgICAgICAgICAgICAgIFtbJ0QnLCAnRSddLCAncmVkJ10sXG4gICAgICAgICAgICAgICAgW1snSycsICdSJ10sICdhbGxfYmx1ZSddLFxuICAgICAgICAgICAgXSwgZmFsc2UsIEFtaW5vYWNpZHNQYWxldHRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubGVzaztcbiAgICB9XG4gICAgc3RhdGljIGdldCBHcm9rR3JvdXBzKCkge1xuICAgICAgICBpZiAodGhpcy5ncm9rR3JvdXBzID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3Jva0dyb3VwcyA9IHRoaXMubWFrZVBhbGV0dGUoW1xuICAgICAgICAgICAgICAgIFtbJ0MnLCAnVSddLCAneWVsbG93J10sXG4gICAgICAgICAgICAgICAgW1snRycsICdQJ10sICdyZWQnXSxcbiAgICAgICAgICAgICAgICBbWydBJywgJ1YnLCAnSScsICdMJywgJ00nLCAnRicsICdZJywgJ1cnXSwgJ2FsbF9ncmVlbiddLFxuICAgICAgICAgICAgICAgIFtbJ1InLCAnSCcsICdLJ10sICdsaWdodF9ibHVlJ10sXG4gICAgICAgICAgICAgICAgW1snRCcsICdFJ10sICdkYXJrX2JsdWUnXSxcbiAgICAgICAgICAgICAgICBbWydTJywgJ1QnLCAnTicsICdRJ10sICdvcmFuZ2UnXSxcbiAgICAgICAgICAgIF0sIGZhbHNlLCBBbWlub2FjaWRzUGFsZXR0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdyb2tHcm91cHM7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgUmFzTW9sKCkge1xuICAgICAgICBpZiAodGhpcy5yYXNNb2wgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgdGhpcy5yYXNNb2wgPSBuZXcgQW1pbm9hY2lkc1BhbGV0dGVzKHtcbiAgICAgICAgICAgICAgICAvLyBodHRwOi8vYWNjZXMuZW5zLWx5b24uZnIvYmlvdGljL3Jhc3RvcC9oZWxwL2NvbG91ci5odG1cbiAgICAgICAgICAgICAgICAnRCc6ICcjRTYwQTBBJyxcbiAgICAgICAgICAgICAgICAnRSc6ICcjRTYwQTBBJyxcbiAgICAgICAgICAgICAgICAnQyc6ICcjRTZFNjAwJyxcbiAgICAgICAgICAgICAgICAnTSc6ICcjRTZFNjAwJyxcbiAgICAgICAgICAgICAgICAnSyc6ICcjMTQ1QUZGJyxcbiAgICAgICAgICAgICAgICAnUic6ICcjMTQ1QUZGJyxcbiAgICAgICAgICAgICAgICAnUyc6ICcjRkE5NjAwJyxcbiAgICAgICAgICAgICAgICAnVCc6ICcjRkE5NjAwJyxcbiAgICAgICAgICAgICAgICAnRic6ICcjMzIzMkFBJyxcbiAgICAgICAgICAgICAgICAnWSc6ICcjMzIzMkFBJyxcbiAgICAgICAgICAgICAgICAnTic6ICcjMDBEQ0RDJyxcbiAgICAgICAgICAgICAgICAnUSc6ICcjMDBEQ0RDJyxcbiAgICAgICAgICAgICAgICAnRyc6ICcjRUJFQkVCJyxcbiAgICAgICAgICAgICAgICAnTCc6ICcjMEY4MjBGJyxcbiAgICAgICAgICAgICAgICAnVic6ICcjMEY4MjBGJyxcbiAgICAgICAgICAgICAgICAnSSc6ICcjMEY4MjBGJyxcbiAgICAgICAgICAgICAgICAnQSc6ICcjQzhDOEM4JyxcbiAgICAgICAgICAgICAgICAnVyc6ICcjQjQ1QUI0JyxcbiAgICAgICAgICAgICAgICAnSCc6ICcjODI4MkQyJyxcbiAgICAgICAgICAgICAgICAnUCc6ICcjREM5NjgyJyxcbiAgICAgICAgICAgICAgICAnb3RoZXJzJzogJyNCRUEwNkUnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmFzTW9sO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBbWlub2FjaWRzIHtcbiAgICBzdGF0aWMgZ2V0UGFsZXR0ZShzY2hlbWUgPSAnZ3JvaycpIHtcbiAgICAgICAgc3dpdGNoIChzY2hlbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2dyb2snOlxuICAgICAgICAgICAgICAgIHJldHVybiBBbWlub2FjaWRzUGFsZXR0ZXMuR3Jva0dyb3VwcztcbiAgICAgICAgICAgIGNhc2UgJ2xlc2snOlxuICAgICAgICAgICAgICAgIHJldHVybiBBbWlub2FjaWRzUGFsZXR0ZXMuTGVzaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGVtUGFsZXR0ZTogc2NoZW1lIFxcYCR7c2NoZW1lfVxcYCBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgZGl2aWRlZCBhbWlubyBhY2lkIHdpdGggaXRzIGNvbnRlbnQgaW4gdGhlIGJyYWNrZXQsIGlmIHRoZSBjb250ZW50IGlzIG51bWJlciwgdGhlbiBpdHMgb21pdHRlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGMgcmF3IGFtaW5vXG4gICAgICogQHJldHVybiB7W3N0cmluZywgc3RyaW5nXX0gb3V0ZXIgYW5kIGlubmVyIGNvbnRlbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0SW5uZXJPdXRlcihjKSB7XG4gICAgICAgIGxldCBpc0lubmVyID0gMDtcbiAgICAgICAgbGV0IGlubmVyID0gJyc7XG4gICAgICAgIGxldCBvdXRlciA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgYykge1xuICAgICAgICAgICAgaWYgKGNoYXIgPT0gJygnKVxuICAgICAgICAgICAgICAgIGlzSW5uZXIrKztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPT0gJyknKVxuICAgICAgICAgICAgICAgIGlzSW5uZXItLTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSW5uZXIpXG4gICAgICAgICAgICAgICAgaW5uZXIgKz0gY2hhcjtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvdXRlciArPSBjaGFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VJbnQoaW5uZXIpKSA/IFtvdXRlciwgJyddIDogW291dGVyLCBpbm5lcl07XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDb2xvckFBUGl2b3QobW9ub21lciA9ICcnLCBzY2hlbWUgPSAnZ3JvaycpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIC8vY29uc3QgY2hlbVBhbGV0dGVJbnN0YW5jZSA9IEFBUGFsZXR0ZXMuR3Jva0dyb3VwcygpO1xuICAgICAgICBjb25zdCBjaGVtUGFsZXR0ZUluc3RhbmNlID0gdGhpcy5nZXRQYWxldHRlKHNjaGVtZSk7XG4gICAgICAgIGxldCBbb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXJdID0gdGhpcy5nZXRJbm5lck91dGVyKG1vbm9tZXIpO1xuICAgICAgICBvdXRlck1vbm9tZXIgPSAob3V0ZXJNb25vbWVyLmxlbmd0aCA+IDYgPyBgJHtvdXRlck1vbm9tZXIuc2xpY2UoMCwgMyl9Li4uYCA6IG91dGVyTW9ub21lcik7XG4gICAgICAgIGlubmVyTW9ub21lciA9IChpbm5lck1vbm9tZXIubGVuZ3RoID4gNiA/IGAke2lubmVyTW9ub21lci5zbGljZSgwLCAzKX0uLi5gIDogaW5uZXJNb25vbWVyKTtcbiAgICAgICAgaWYgKG1vbm9tZXIubGVuZ3RoID09IDEgfHwgbW9ub21lclsxXSA9PSAnKCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGFtaW5vID0gKF9hID0gbW9ub21lclswXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm4gYW1pbm8gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSA/XG4gICAgICAgICAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgMV0gOlxuICAgICAgICAgICAgICAgIFt0aGlzLnVuZGVmaW5lZENvbG9yLCBvdXRlck1vbm9tZXIsIGlubmVyTW9ub21lciwgMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vbm9tZXJbMF0gPT0gJ2QnICYmIG1vbm9tZXJbMV0gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSkge1xuICAgICAgICAgICAgaWYgKG1vbm9tZXIubGVuZ3RoID09IDIgfHwgbW9ub21lclsyXSA9PSAnKCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbWlubyA9IChfYiA9IG1vbm9tZXJbMV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhbWlubyBpbiBjaGVtUGFsZXR0ZUluc3RhbmNlID9cbiAgICAgICAgICAgICAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgMl0gOlxuICAgICAgICAgICAgICAgICAgICBbdGhpcy51bmRlZmluZWRDb2xvciwgb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXIsIDJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtb25vbWVyLnN1YnN0cmluZygwLCAzKSBpbiB0aGlzLkFBRnVsbE5hbWVzKSB7XG4gICAgICAgICAgICBpZiAobW9ub21lci5sZW5ndGggPT0gMyB8fCBtb25vbWVyWzNdID09ICcoJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFtaW5vID0gdGhpcy5BQUZ1bGxOYW1lc1ttb25vbWVyLnN1YnN0cmluZygwLCAzKV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFtaW5vIGluIGNoZW1QYWxldHRlSW5zdGFuY2UgP1xuICAgICAgICAgICAgICAgICAgICBbY2hlbVBhbGV0dGVJbnN0YW5jZS5nZXQoYW1pbm8pLCBhbWlubywgaW5uZXJNb25vbWVyLCAzXSA6XG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLnVuZGVmaW5lZENvbG9yLCBvdXRlck1vbm9tZXIsIGlubmVyTW9ub21lciwgM107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgoX2MgPSBtb25vbWVyWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudG9Mb3dlckNhc2UoKSkgPT0gbW9ub21lclswXSkge1xuICAgICAgICAgICAgaWYgKG1vbm9tZXIuc3Vic3RyaW5nKDEsIDMpIGluIHRoaXMuQUFGdWxsTmFtZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobW9ub21lci5sZW5ndGggPT0gNCB8fCBtb25vbWVyWzRdID09ICcoJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbWlubyA9IHRoaXMuQUFGdWxsTmFtZXNbbW9ub21lci5zdWJzdHJpbmcoMSwgMyldO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW1pbm8gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlbVBhbGV0dGVJbnN0YW5jZS5nZXQoYW1pbm8pLCBhbWlubywgaW5uZXJNb25vbWVyLCA0XSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy51bmRlZmluZWRDb2xvciwgb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXIsIDRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RoaXMudW5kZWZpbmVkQ29sb3IsIG91dGVyTW9ub21lciwgaW5uZXJNb25vbWVyLCAwXTtcbiAgICB9XG59XG5BbWlub2FjaWRzLlNlbVR5cGUgPSAnQW1pbm9hY2lkcyc7XG5BbWlub2FjaWRzLlNlbVR5cGVNdWx0aXBsZUFsaWdubWVudCA9ICdBbWlub2FjaWRzTXVsdGlwbGVBbGlnbm1lbnQnO1xuQW1pbm9hY2lkcy51bmRlZmluZWRDb2xvciA9ICdyZ2IoMTAwLDEwMCwxMDApJztcbkFtaW5vYWNpZHMuTmFtZXMgPSB7XG4gICAgJ0cnOiAnR2x5Y2luZScsXG4gICAgJ0wnOiAnTGV1Y2luZScsXG4gICAgJ1knOiAnVHlyb3NpbmUnLFxuICAgICdTJzogJ1NlcmluZScsXG4gICAgJ0UnOiAnR2x1dGFtaWMgYWNpZCcsXG4gICAgJ1EnOiAnR2x1dGFtaW5lJyxcbiAgICAnRCc6ICdBc3BhcnRpYyBhY2lkJyxcbiAgICAnTic6ICdBc3BhcmFnaW5lJyxcbiAgICAnRic6ICdQaGVueWxhbGFuaW5lJyxcbiAgICAnQSc6ICdBbGFuaW5lJyxcbiAgICAnSyc6ICdMeXNpbmUnLFxuICAgICdSJzogJ0FyZ2luaW5lJyxcbiAgICAnSCc6ICdIaXN0aWRpbmUnLFxuICAgICdDJzogJ0N5c3RlaW5lJyxcbiAgICAnVic6ICdWYWxpbmUnLFxuICAgICdQJzogJ1Byb2xpbmUnLFxuICAgICdXJzogJ1RyeXB0b3BoYW4nLFxuICAgICdJJzogJ0lzb2xldWNpbmUnLFxuICAgICdNJzogJ01ldGhpb25pbmUnLFxuICAgICdUJzogJ1RocmVvbmluZScsXG59O1xuQW1pbm9hY2lkcy5BQVNtaWxlcyA9IHtcbiAgICAnRyc6ICdOQ0MoPU8pTycsXG4gICAgJ0wnOiAnTltDQEhdKENDKEMpQylDKD1PKU8nLFxuICAgICdZJzogJ05DKENDMT1DQz1DKE8pQz1DMSlDKD1PKU8nLFxuICAgICdTJzogJ05DKENPKUMoPU8pTycsXG4gICAgJ0UnOiAnTltDQEBIXShDQ0MoTyk9TylDKD1PKU8nLFxuICAgICdRJzogJ05bQ0BASF0oQ0NDKE4pPU8pQyg9TylPJyxcbiAgICAnRCc6ICdOW0NAQEhdKENDKE8pPU8pQyg9TylPJyxcbiAgICAnTic6ICdOW0NAQEhdKENDKE4pPU8pQyg9TylPJyxcbiAgICAnRic6ICdOQyhDQzE9Q0M9Q0M9QzEpQyg9TylPJyxcbiAgICAnQSc6ICdOW0NASF0oQylDKD1PKU8nLFxuICAgICdLJzogJ05DKENDQ0NOKUMoPU8pTycsXG4gICAgJ1InOiAnTltDQEhdKENDQ05DKD1OKUMpQyg9TylPJyxcbiAgICAnSCc6ICdOQyhDQzE9Q049Q1tOXTEpQyg9TylPJyxcbiAgICAnQyc6ICdOW0NAQEhdKENTKUMoPU8pTycsXG4gICAgJ1YnOiAnTkMoQyhDKUMpQyg9TylPJyxcbiAgICAnUCc6ICdOKENDQzEpQzFDKD1PKU8nLFxuICAgICdXJzogJ05bQ0BASF0oQ2MxYzJjY2NjYzJuKFtIXSljMSlDKD1PKU8nLFxuICAgICdJJzogJ05bQ0BIXShbQ0BIXShDKUNDKUMoPU8pTycsXG4gICAgJ00nOiAnTkMoQ0NTQylDKD1PKU8nLFxuICAgICdUJzogJ05DKEMoTylDKUMoPU8pTycsXG59O1xuQW1pbm9hY2lkcy5BQVNtaWxlc1RydW5jYXRlZCA9IHtcbiAgICAnRyc6ICcqQyonLFxuICAgICdMJzogJ0NDKEMpQ1tDQEhdKCopKicsXG4gICAgJ1knOiAnQzE9Q0MoPUNDPUMxQ0MoKikqKU8nLFxuICAgICdTJzogJ09DQygqKUMqJyxcbiAgICAnRSc6ICcqW0NAQEhdKENDQyhPKT1PKSonLFxuICAgICdRJzogJypOW0NAQEhdKENDQyhOKT1PKSonLFxuICAgICdEJzogJypbQ0BASF0oQ0MoTyk9TykqJyxcbiAgICAnTic6ICcqW0NAQEhdKENDKE4pPU8pKicsXG4gICAgJ0YnOiAnQzE9Q0M9QyhDPUMxKUNDKCopKicsXG4gICAgJ0EnOiAnQ1tDQEhdKCopKicsXG4gICAgJ0snOiAnQyhDQ04pQ0MoKikqJyxcbiAgICAnUic6ICcqW0NASF0oQ0NDTkMoPU4pQykqJyxcbiAgICAnSCc6ICdDMT1DKE5DPU4xKUNDKCopKicsXG4gICAgJ0MnOiAnQyhbQ0BASF0oKikqKVMnLFxuICAgICdWJzogJ0NDKEMpQygqKSonLFxuICAgICdQJzogJ0MxQ0NOKCopQzEqJyxcbiAgICAnVyc6ICcqW0NAQEhdKENjMWMyY2NjY2MybihbSF0pYzEpKicsXG4gICAgJ0knOiAnQ0NbQ0BIXShDKVtDQEhdKCopKicsXG4gICAgJ00nOiAnQ1NDQ0MoKikqJyxcbiAgICAnVCc6ICdDQyhPKUMoKikqJyxcbn07XG4vKiogVE9ETzogRnVsbD9cbiAqL1xuQW1pbm9hY2lkcy5BQUZ1bGxOYW1lcyA9IHtcbiAgICAnQWxhJzogJ0EnLFxuICAgICdBcmcnOiAnUicsXG4gICAgJ0Fzbic6ICdOJyxcbiAgICAnQXNwJzogJ0QnLFxuICAgICdDeXMnOiAnQycsXG4gICAgJ0dsbic6ICdRJyxcbiAgICAnR2x1JzogJ0UnLFxuICAgICdHbHknOiAnRycsXG4gICAgJ0hpcyc6ICdIJyxcbiAgICAnSWxlJzogJ0knLFxuICAgICdMZXUnOiAnTCcsXG4gICAgJ0x5cyc6ICdLJyxcbiAgICAnTWV0JzogJ00nLFxuICAgICdQaGUnOiAnRicsXG4gICAgJ1Bybyc6ICdQJyxcbiAgICAnU2VyJzogJ1MnLFxuICAgICdUaHInOiAnVCcsXG4gICAgJ1RycCc6ICdXJyxcbiAgICAnVHlyJzogJ1knLFxuICAgICdWYWwnOiAnVicsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWVcxcGJtOWhZMmxrY3k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbUZ0YVc1dllXTnBaSE11ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlMwRXNUMEZCVHl4RlFVRmhMR05CUVdNc1JVRkJReXhOUVVGTkxHZENRVUZuUWl4RFFVRkRPMEZCUlRGRUxFMUJRVTBzVDBGQlR5eHJRa0ZCYlVJc1UwRkJVU3hqUVVGak8wbEJSemRETEUxQlFVMHNTMEZCU3l4SlFVRkpPMUZCUTNCQ0xFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NTMEZCU3l4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVONFFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU03WjBKQlF6TkNMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3hSUVVGUkxFTkJRVU03WjBKQlEyaERMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxGZEJRVmNzUTBGQlF6dG5Ra0ZETlVRc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVc1UwRkJVeXhEUVVGRE8yZENRVU0xUWl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXp0blFrRkRia0lzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3hWUVVGVkxFTkJRVU03WVVGRGVrSXNSVUZCUlN4TFFVRkxMRVZCUVVVc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXp0VFFVTXZRanRSUVVORUxFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0SlFVTnVRaXhEUVVGRE8wbEJTVTBzVFVGQlRTeExRVUZMTEZWQlFWVTdVVUZETVVJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVlVGQlZTeExRVUZMTEV0QlFVc3NRMEZCUXl4RlFVRkZPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJRenRuUWtGRGFrTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUlVGQlJTeFJRVUZSTEVOQlFVTTdaMEpCUTNSQ0xFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRE8yZENRVU51UWl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJRenRuUWtGRGRrUXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVWQlFVVXNXVUZCV1N4RFFVRkRPMmRDUVVNdlFpeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxGZEJRVmNzUTBGQlF6dG5Ra0ZEZWtJc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxGRkJRVkVzUTBGQlF6dGhRVU5xUXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hyUWtGQmEwSXNRMEZCUXl4RFFVRkRPMU5CUXk5Q08xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRPMGxCUTNwQ0xFTkJRVU03U1VGSlRTeE5RVUZOTEV0QlFVc3NUVUZCVFR0UlFVTjBRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEV0QlFVc3NTMEZCU3l4RFFVRkRMRVZCUVVVN1dVRkRNVUlzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMR3RDUVVGclFpeERRVUZETzJkQ1FVTnVReXg1UkVGQmVVUTdaMEpCUTNwRUxFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEZGQlFWRXNSVUZCUlN4VFFVRlRPMkZCUTNCQ0xFTkJRVU1zUTBGQlF6dFRRVU5LTzFGQlEwUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wbEJRM0pDTEVOQlFVTTdRMEZEUmp0QlFVVkVMRTFCUVUwc1QwRkJUeXhWUVVGVk8wbEJjVWRrTEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1UwRkJhVUlzVFVGQlRUdFJRVU01UXl4UlFVRlJMRTFCUVUwc1JVRkJSVHRaUVVOb1FpeExRVUZMTEUxQlFVMDdaMEpCUTFRc1QwRkJUeXhyUWtGQmEwSXNRMEZCUXl4VlFVRlZMRU5CUVVNN1dVRkRka01zUzBGQlN5eE5RVUZOTzJkQ1FVTlVMRTlCUVU4c2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTJwRE8yZENRVU5GTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2VVSkJRWGxDTEUxQlFVMHNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dFRRVU55UlR0SlFVTklMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSkxFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCVXp0UlFVTnVReXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYUVJc1NVRkJTU3hMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEyWXNTVUZCU1N4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJSV1lzUzBGQlN5eE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMRVZCUVVVN1dVRkRjRUlzU1VGQlNTeEpRVUZKTEVsQlFVa3NSMEZCUnp0blFrRkRZaXhQUVVGUExFVkJRVVVzUTBGQlF6dHBRa0ZEVUN4SlFVRkpMRWxCUVVrc1NVRkJTU3hIUVVGSE8yZENRVU5zUWl4UFFVRlBMRVZCUVVVc1EwRkJRenRwUWtGRFVDeEpRVUZKTEU5QlFVODdaMEpCUTJRc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF6czdaMEpCUldRc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF6dFRRVU5xUWp0UlFVVkVMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTm9SU3hEUVVGRE8wbEJSVTBzVFVGQlRTeERRVUZETEdWQlFXVXNRMEZCUXl4VlFVRnJRaXhGUVVGRkxFVkJRVVVzVTBGQmFVSXNUVUZCVFRzN1VVRkRla1VzYzBSQlFYTkVPMUZCUTNSRUxFMUJRVTBzYlVKQlFXMUNMRWRCUVVjc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTndSQ3hKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEZsQlFWa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVVUZETDBRc1dVRkJXU3hIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzV1VGQldTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkRNMFlzV1VGQldTeEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NXVUZCV1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03VVVGRk0wWXNTVUZCU1N4UFFVRlBMRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1IwRkJSeXhGUVVGRk8xbEJRelZETEUxQlFVMHNTMEZCU3l4SFFVRkhMRTFCUVVFc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5d3dRMEZCUlN4WFFVRlhMRVZCUVVjc1EwRkJRenRaUVVONlF5eFBRVUZQTEV0QlFVc3NTVUZCU1N4dFFrRkJiVUlzUTBGQlF5eERRVUZETzJkQ1FVTnVReXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6RkVMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeFpRVUZaTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM2hFTzFGQlJVUXNTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVVc1NVRkJTU3h0UWtGQmJVSXNSVUZCUlR0WlFVTXpSQ3hKUVVGSkxFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVWQlFVVTdaMEpCUXpWRExFMUJRVTBzUzBGQlN5eEhRVUZITEUxQlFVRXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXd3UTBGQlJTeFhRVUZYTEVWQlFVY3NRMEZCUXp0blFrRkRla01zVDBGQlR5eExRVUZMTEVsQlFVa3NiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dHZRa0ZEYmtNc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEZsQlFWa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU14UkN4RFFVRkRMRWxCUVVrc1EwRkJReXhqUVVGakxFVkJRVVVzV1VGQldTeEZRVUZGTEZsQlFWa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVONFJEdFRRVU5HTzFGQlJVUXNTVUZCU1N4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRk8xbEJReTlETEVsQlFVa3NUMEZCVHl4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRWRCUVVjc1JVRkJSVHRuUWtGRE5VTXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjRSQ3hQUVVGUExFdEJRVXNzU1VGQlNTeHRRa0ZCYlVJc1EwRkJReXhEUVVGRE8yOUNRVU51UXl4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzV1VGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRekZFTEVOQlFVTXNTVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSU3haUVVGWkxFVkJRVVVzV1VGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUTNoRU8xTkJRMFk3VVVGRlJDeEpRVUZKTEVOQlFVRXNUVUZCUVN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExEQkRRVUZGTEZkQlFWY3NSVUZCUlN4TFFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdFpRVU16UXl4SlFVRkpMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVU3WjBKQlF5OURMRWxCUVVrc1QwRkJUeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzUlVGQlJUdHZRa0ZETlVNc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVONFJDeFBRVUZQTEV0QlFVc3NTVUZCU1N4dFFrRkJiVUlzUTBGQlF5eERRVUZETzNkQ1FVTnVReXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03ZDBKQlF6RkVMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeFpRVUZaTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU40UkR0aFFVTkdPMU5CUTBZN1VVRkZSQ3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4WlFVRlpMRVZCUVVVc1dVRkJXU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6bEVMRU5CUVVNN08wRkJjRXhsTEd0Q1FVRlBMRWRCUVZjc1dVRkJXU3hEUVVGRE8wRkJSUzlDTEcxRFFVRjNRaXhIUVVGWExEWkNRVUUyUWl4RFFVRkRPMEZCUlRGRkxIbENRVUZqTEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU03UVVGRk4wSXNaMEpCUVVzc1IwRkJjVUk3U1VGRGRFTXNSMEZCUnl4RlFVRkZMRk5CUVZNN1NVRkRaQ3hIUVVGSExFVkJRVVVzVTBGQlV6dEpRVU5rTEVkQlFVY3NSVUZCUlN4VlFVRlZPMGxCUTJZc1IwRkJSeXhGUVVGRkxGRkJRVkU3U1VGRFlpeEhRVUZITEVWQlFVVXNaVUZCWlR0SlFVTndRaXhIUVVGSExFVkJRVVVzVjBGQlZ6dEpRVU5vUWl4SFFVRkhMRVZCUVVVc1pVRkJaVHRKUVVOd1FpeEhRVUZITEVWQlFVVXNXVUZCV1R0SlFVTnFRaXhIUVVGSExFVkJRVVVzWlVGQlpUdEpRVU53UWl4SFFVRkhMRVZCUVVVc1UwRkJVenRKUVVOa0xFZEJRVWNzUlVGQlJTeFJRVUZSTzBsQlEySXNSMEZCUnl4RlFVRkZMRlZCUVZVN1NVRkRaaXhIUVVGSExFVkJRVVVzVjBGQlZ6dEpRVU5vUWl4SFFVRkhMRVZCUVVVc1ZVRkJWVHRKUVVObUxFZEJRVWNzUlVGQlJTeFJRVUZSTzBsQlEySXNSMEZCUnl4RlFVRkZMRk5CUVZNN1NVRkRaQ3hIUVVGSExFVkJRVVVzV1VGQldUdEpRVU5xUWl4SFFVRkhMRVZCUVVVc1dVRkJXVHRKUVVOcVFpeEhRVUZITEVWQlFVVXNXVUZCV1R0SlFVTnFRaXhIUVVGSExFVkJRVVVzVjBGQlZ6dERRVU5xUWl4RFFVRkRPMEZCUlZrc2JVSkJRVkVzUjBGQmNVSTdTVUZEZWtNc1IwRkJSeXhGUVVGRkxGVkJRVlU3U1VGRFppeEhRVUZITEVWQlFVVXNjMEpCUVhOQ08wbEJRek5DTEVkQlFVY3NSVUZCUlN3eVFrRkJNa0k3U1VGRGFFTXNSMEZCUnl4RlFVRkZMR05CUVdNN1NVRkRia0lzUjBGQlJ5eEZRVUZGTEhsQ1FVRjVRanRKUVVNNVFpeEhRVUZITEVWQlFVVXNlVUpCUVhsQ08wbEJRemxDTEVkQlFVY3NSVUZCUlN4M1FrRkJkMEk3U1VGRE4wSXNSMEZCUnl4RlFVRkZMSGRDUVVGM1FqdEpRVU0zUWl4SFFVRkhMRVZCUVVVc2QwSkJRWGRDTzBsQlF6ZENMRWRCUVVjc1JVRkJSU3hwUWtGQmFVSTdTVUZEZEVJc1IwRkJSeXhGUVVGRkxHbENRVUZwUWp0SlFVTjBRaXhIUVVGSExFVkJRVVVzTUVKQlFUQkNPMGxCUXk5Q0xFZEJRVWNzUlVGQlJTeDNRa0ZCZDBJN1NVRkROMElzUjBGQlJ5eEZRVUZGTEcxQ1FVRnRRanRKUVVONFFpeEhRVUZITEVWQlFVVXNhVUpCUVdsQ08wbEJRM1JDTEVkQlFVY3NSVUZCUlN4cFFrRkJhVUk3U1VGRGRFSXNSMEZCUnl4RlFVRkZMRzlEUVVGdlF6dEpRVU42UXl4SFFVRkhMRVZCUVVVc01FSkJRVEJDTzBsQlF5OUNMRWRCUVVjc1JVRkJSU3huUWtGQlowSTdTVUZEY2tJc1IwRkJSeXhGUVVGRkxHbENRVUZwUWp0RFFVTjJRaXhEUVVGRE8wRkJSVmtzTkVKQlFXbENMRWRCUVhGQ08wbEJRMnhFTEVkQlFVY3NSVUZCUlN4TFFVRkxPMGxCUTFZc1IwRkJSeXhGUVVGRkxHbENRVUZwUWp0SlFVTjBRaXhIUVVGSExFVkJRVVVzYzBKQlFYTkNPMGxCUXpOQ0xFZEJRVWNzUlVGQlJTeFZRVUZWTzBsQlEyWXNSMEZCUnl4RlFVRkZMRzlDUVVGdlFqdEpRVU42UWl4SFFVRkhMRVZCUVVVc2NVSkJRWEZDTzBsQlF6RkNMRWRCUVVjc1JVRkJSU3h0UWtGQmJVSTdTVUZEZUVJc1IwRkJSeXhGUVVGRkxHMUNRVUZ0UWp0SlFVTjRRaXhIUVVGSExFVkJRVVVzY1VKQlFYRkNPMGxCUXpGQ0xFZEJRVWNzUlVGQlJTeFpRVUZaTzBsQlEycENMRWRCUVVjc1JVRkJSU3hqUVVGak8wbEJRMjVDTEVkQlFVY3NSVUZCUlN4eFFrRkJjVUk3U1VGRE1VSXNSMEZCUnl4RlFVRkZMRzFDUVVGdFFqdEpRVU40UWl4SFFVRkhMRVZCUVVVc1owSkJRV2RDTzBsQlEzSkNMRWRCUVVjc1JVRkJSU3haUVVGWk8wbEJRMnBDTEVkQlFVY3NSVUZCUlN4aFFVRmhPMGxCUTJ4Q0xFZEJRVWNzUlVGQlJTd3JRa0ZCSzBJN1NVRkRjRU1zUjBGQlJ5eEZRVUZGTEhGQ1FVRnhRanRKUVVNeFFpeEhRVUZITEVWQlFVVXNWMEZCVnp0SlFVTm9RaXhIUVVGSExFVkJRVVVzV1VGQldUdERRVU5zUWl4RFFVRkRPMEZCUlVZN1IwRkRSenRCUVVOWExITkNRVUZYTEVkQlFYRkNPMGxCUXpWRExFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1NVRkRWaXhMUVVGTExFVkJRVVVzUjBGQlJ6dEpRVU5XTEV0QlFVc3NSVUZCUlN4SFFVRkhPMGxCUTFZc1MwRkJTeXhGUVVGRkxFZEJRVWM3U1VGRFZpeExRVUZMTEVWQlFVVXNSMEZCUnp0SlFVTldMRXRCUVVzc1JVRkJSU3hIUVVGSE8wbEJRMVlzUzBGQlN5eEZRVUZGTEVkQlFVYzdTVUZEVml4TFFVRkxMRVZCUVVVc1IwRkJSenRKUVVOV0xFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1NVRkRWaXhMUVVGTExFVkJRVVVzUjBGQlJ6dEpRVU5XTEV0QlFVc3NSVUZCUlN4SFFVRkhPMGxCUTFZc1MwRkJTeXhGUVVGRkxFZEJRVWM3U1VGRFZpeExRVUZMTEVWQlFVVXNSMEZCUnp0SlFVTldMRXRCUVVzc1JVRkJSU3hIUVVGSE8wbEJRMVlzUzBGQlN5eEZRVUZGTEVkQlFVYzdTVUZEVml4TFFVRkxMRVZCUVVVc1IwRkJSenRKUVVOV0xFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1EwRkRXQ3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElDb2dZWE1nWjNKdmF5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaM0p2YXljN1hHNXBiWEJ2Y25RZ0tpQmhjeUIxYVNCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdmRXa25PMXh1YVcxd2IzSjBJQ29nWVhNZ1JFY2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMlJuSnp0Y2JseHVhVzF3YjNKMElIdFRkSEpwYm1kRWFXTjBhVzl1WVhKNWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlMU5sY1ZCaGJHVjBkR1VzSUZObGNWQmhiR1YwZEdWQ1lYTmxmU0JtY205dElDY3VMM05sY1Mxd1lXeGxkSFJsY3ljN1hHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNZ1pYaDBaVzVrY3lCVFpYRlFZV3hsZEhSbFFtRnpaU0I3WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUd4bGMyczZJRk5sY1ZCaGJHVjBkR1U3WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCblpYUWdUR1Z6YXlncE9pQlRaWEZRWVd4bGRIUmxJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXNaWE5ySUQwOVBTQjJiMmxrSURBcElIdGNiaUFnSUNBZ0lIUm9hWE11YkdWemF5QTlJSFJvYVhNdWJXRnJaVkJoYkdWMGRHVW9XMXh1SUNBZ0lDQWdJQ0JiV3lkSEp5d2dKMEVuTENBblV5Y3NJQ2RVSjEwc0lDZHZjbUZ1WjJVblhTeGNiaUFnSUNBZ0lDQWdXMXNuUXljc0lDZFdKeXdnSjBrbkxDQW5UQ2NzSUNkUUp5d2dKMFluTENBbldTY3NJQ2ROSnl3Z0oxY25YU3dnSjJGc2JGOW5jbVZsYmlkZExGeHVJQ0FnSUNBZ0lDQmJXeWRPSnl3Z0oxRW5MQ0FuU0NkZExDQW5iV0ZuWlc1MFlTZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkRUp5d2dKMFVuWFN3Z0ozSmxaQ2RkTEZ4dUlDQWdJQ0FnSUNCYld5ZExKeXdnSjFJblhTd2dKMkZzYkY5aWJIVmxKMTBzWEc0Z0lDQWdJQ0JkTENCbVlXeHpaU3dnUVcxcGJtOWhZMmxrYzFCaGJHVjBkR1Z6S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YkdWemF6dGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHZHliMnRIY205MWNITTZJRk5sY1ZCaGJHVjBkR1U3WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCblpYUWdSM0p2YTBkeWIzVndjeWdwT2lCVFpYRlFZV3hsZEhSbElIdGNiaUFnSUNCcFppQW9kR2hwY3k1bmNtOXJSM0p2ZFhCeklEMDlQU0IyYjJsa0lEQXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVozSnZhMGR5YjNWd2N5QTlJSFJvYVhNdWJXRnJaVkJoYkdWMGRHVW9XMXh1SUNBZ0lDQWdJQ0JiV3lkREp5d2dKMVVuWFN3Z0ozbGxiR3h2ZHlkZExGeHVJQ0FnSUNBZ0lDQmJXeWRISnl3Z0oxQW5YU3dnSjNKbFpDZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkQkp5d2dKMVluTENBblNTY3NJQ2RNSnl3Z0owMG5MQ0FuUmljc0lDZFpKeXdnSjFjblhTd2dKMkZzYkY5bmNtVmxiaWRkTEZ4dUlDQWdJQ0FnSUNCYld5ZFNKeXdnSjBnbkxDQW5TeWRkTENBbmJHbG5hSFJmWW14MVpTZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkRUp5d2dKMFVuWFN3Z0oyUmhjbXRmWW14MVpTZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkVEp5d2dKMVFuTENBblRpY3NJQ2RSSjEwc0lDZHZjbUZ1WjJVblhTeGNiaUFnSUNBZ0lGMHNJR1poYkhObExDQkJiV2x1YjJGamFXUnpVR0ZzWlhSMFpYTXBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NW5jbTlyUjNKdmRYQnpPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdjbUZ6VFc5c09pQlRaWEZRWVd4bGRIUmxPMXh1WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nWjJWMElGSmhjMDF2YkNncE9pQlRaWEZRWVd4bGRIUmxJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXlZWE5OYjJ3Z1BUMDlJSFp2YVdRZ01Da2dlMXh1SUNBZ0lDQWdkR2hwY3k1eVlYTk5iMndnUFNCdVpYY2dRVzFwYm05aFkybGtjMUJoYkdWMGRHVnpLSHRjYmlBZ0lDQWdJQ0FnTHk4Z2FIUjBjRG92TDJGalkyVnpMbVZ1Y3kxc2VXOXVMbVp5TDJKcGIzUnBZeTl5WVhOMGIzQXZhR1ZzY0M5amIyeHZkWEl1YUhSdFhHNGdJQ0FnSUNBZ0lDZEVKem9nSnlORk5qQkJNRUVuTENBdkx5QmhjM0FzSUdGemNHRnlkR2xqSUdGamFXUXNJR0Z6Y0Z4dUlDQWdJQ0FnSUNBblJTYzZJQ2NqUlRZd1FUQkJKeXdnTHk4Z1oyeDFMQ0JuYkhWMFlXMXBZeUJoWTJsa1hHNGdJQ0FnSUNBZ0lDZERKem9nSnlORk5rVTJNREFuTENBdkx5QmplWE1zSUdONWMzUmxhVzVsWEc0Z0lDQWdJQ0FnSUNkTkp6b2dKeU5GTmtVMk1EQW5MQ0F2THlCdFpYUXNJRzFsZEdocGIyNXBibVZjYmlBZ0lDQWdJQ0FnSjBzbk9pQW5JekUwTlVGR1JpY3NJQzh2SUd4NWN5d2diSGx6YVc1bFhHNGdJQ0FnSUNBZ0lDZFNKem9nSnlNeE5EVkJSa1luTENBdkx5QmhjbWNzSUdGeVoybHVhVzVsWEc0Z0lDQWdJQ0FnSUNkVEp6b2dKeU5HUVRrMk1EQW5MQ0F2THlCelpYSXNJSE5sY21sdVpWeHVJQ0FnSUNBZ0lDQW5WQ2M2SUNjalJrRTVOakF3Snl3Z0x5OGdkR2h5TENCMGFISmxiMjVwYm1WY2JpQWdJQ0FnSUNBZ0owWW5PaUFuSXpNeU16SkJRU2NzSUM4dklIQm9aU3dnY0dobGJubHNZV3hoYm1sdVpWeHVJQ0FnSUNBZ0lDQW5XU2M2SUNjak16SXpNa0ZCSnl3Z0x5OGdkSGx5TENCMGVYSnZjMmx1WlZ4dUlDQWdJQ0FnSUNBblRpYzZJQ2NqTURCRVEwUkRKeXdnTHk4Z1lYTnVMQ0JoYzNCaGNtRm5hVzVsWEc0Z0lDQWdJQ0FnSUNkUkp6b2dKeU13TUVSRFJFTW5MQ0F2THlCbmJHNHNJR2RzZFhSaGJXbHVaVnh1SUNBZ0lDQWdJQ0FuUnljNklDY2pSVUpGUWtWQ0p5d2dMeThnWjJ4NUxDQm5iSGxqYVc1bFhHNGdJQ0FnSUNBZ0lDZE1Kem9nSnlNd1JqZ3lNRVluTENBdkx5QnNaWFVzSUd4bGRXTnBibVZjYmlBZ0lDQWdJQ0FnSjFZbk9pQW5JekJHT0RJd1JpY3NJQzh2SUhaaGJDd2dkbUZzYVc1bFhHNGdJQ0FnSUNBZ0lDZEpKem9nSnlNd1JqZ3lNRVluTENBdkx5QnBiR1VzSUdsemIyeGxkV05wYm1WY2JpQWdJQ0FnSUNBZ0owRW5PaUFuSTBNNFF6aERPQ2NzSUM4dklHRnNZU3dnWVd4aGJtbHVaVnh1SUNBZ0lDQWdJQ0FuVnljNklDY2pRalExUVVJMEp5d2dMeThnZEhKd0xDQjBjbmx3ZEc5d2FHRnVYRzRnSUNBZ0lDQWdJQ2RJSnpvZ0p5TTRNamd5UkRJbkxDQXZMeUJvYVhNc0lHaHBjM1JwWkdsdVpWeHVJQ0FnSUNBZ0lDQW5VQ2M2SUNjalJFTTVOamd5Snl3Z0x5OGdjSEp2TENCd2NtOXNhVzVsWEc0Z0lDQWdJQ0FnSUNkdmRHaGxjbk1uT2lBbkkwSkZRVEEyUlNjc1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtRnpUVzlzTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJCYldsdWIyRmphV1J6SUh0Y2JpQWdjM1JoZEdsaklISmxZV1J2Ym14NUlGTmxiVlI1Y0dVNklITjBjbWx1WnlBOUlDZEJiV2x1YjJGamFXUnpKenRjYmx4dUlDQnpkR0YwYVdNZ2NtVmhaRzl1YkhrZ1UyVnRWSGx3WlUxMWJIUnBjR3hsUVd4cFoyNXRaVzUwT2lCemRISnBibWNnUFNBblFXMXBibTloWTJsa2MwMTFiSFJwY0d4bFFXeHBaMjV0Wlc1MEp6dGNibHh1SUNCemRHRjBhV01nZFc1a1pXWnBibVZrUTI5c2IzSWdQU0FuY21kaUtERXdNQ3d4TURBc01UQXdLU2M3WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCT1lXMWxjem9nVTNSeWFXNW5SR2xqZEdsdmJtRnllU0E5SUh0Y2JpQWdJQ0FuUnljNklDZEhiSGxqYVc1bEp5eGNiaUFnSUNBblRDYzZJQ2RNWlhWamFXNWxKeXhjYmlBZ0lDQW5XU2M2SUNkVWVYSnZjMmx1WlNjc1hHNGdJQ0FnSjFNbk9pQW5VMlZ5YVc1bEp5eGNiaUFnSUNBblJTYzZJQ2RIYkhWMFlXMXBZeUJoWTJsa0p5eGNiaUFnSUNBblVTYzZJQ2RIYkhWMFlXMXBibVVuTEZ4dUlDQWdJQ2RFSnpvZ0owRnpjR0Z5ZEdsaklHRmphV1FuTEZ4dUlDQWdJQ2RPSnpvZ0owRnpjR0Z5WVdkcGJtVW5MRnh1SUNBZ0lDZEdKem9nSjFCb1pXNTViR0ZzWVc1cGJtVW5MRnh1SUNBZ0lDZEJKem9nSjBGc1lXNXBibVVuTEZ4dUlDQWdJQ2RMSnpvZ0oweDVjMmx1WlNjc1hHNGdJQ0FnSjFJbk9pQW5RWEpuYVc1cGJtVW5MRnh1SUNBZ0lDZElKem9nSjBocGMzUnBaR2x1WlNjc1hHNGdJQ0FnSjBNbk9pQW5RM2x6ZEdWcGJtVW5MRnh1SUNBZ0lDZFdKem9nSjFaaGJHbHVaU2NzWEc0Z0lDQWdKMUFuT2lBblVISnZiR2x1WlNjc1hHNGdJQ0FnSjFjbk9pQW5WSEo1Y0hSdmNHaGhiaWNzWEc0Z0lDQWdKMGtuT2lBblNYTnZiR1YxWTJsdVpTY3NYRzRnSUNBZ0owMG5PaUFuVFdWMGFHbHZibWx1WlNjc1hHNGdJQ0FnSjFRbk9pQW5WR2h5Wlc5dWFXNWxKeXhjYmlBZ2ZUdGNibHh1SUNCd2RXSnNhV01nYzNSaGRHbGpJRUZCVTIxcGJHVnpPaUJUZEhKcGJtZEVhV04wYVc5dVlYSjVJRDBnZTF4dUlDQWdJQ2RISnpvZ0owNURReWc5VHlsUEp5eGNiaUFnSUNBblRDYzZJQ2RPVzBOQVNGMG9RME1vUXlsREtVTW9QVThwVHljc1hHNGdJQ0FnSjFrbk9pQW5Ua01vUTBNeFBVTkRQVU1vVHlsRFBVTXhLVU1vUFU4cFR5Y3NYRzRnSUNBZ0oxTW5PaUFuVGtNb1EwOHBReWc5VHlsUEp5eGNiaUFnSUNBblJTYzZJQ2RPVzBOQVFFaGRLRU5EUXloUEtUMVBLVU1vUFU4cFR5Y3NYRzRnSUNBZ0oxRW5PaUFuVGx0RFFFQklYU2hEUTBNb1RpazlUeWxES0QxUEtVOG5MRnh1SUNBZ0lDZEVKem9nSjA1YlEwQkFTRjBvUTBNb1R5azlUeWxES0QxUEtVOG5MRnh1SUNBZ0lDZE9Kem9nSjA1YlEwQkFTRjBvUTBNb1RpazlUeWxES0QxUEtVOG5MRnh1SUNBZ0lDZEdKem9nSjA1REtFTkRNVDFEUXoxRFF6MURNU2xES0QxUEtVOG5MRnh1SUNBZ0lDZEJKem9nSjA1YlEwQklYU2hES1VNb1BVOHBUeWNzWEc0Z0lDQWdKMHNuT2lBblRrTW9RME5EUTA0cFF5ZzlUeWxQSnl4Y2JpQWdJQ0FuVWljNklDZE9XME5BU0Ywb1EwTkRUa01vUFU0cFF5bERLRDFQS1U4bkxGeHVJQ0FnSUNkSUp6b2dKMDVES0VORE1UMURUajFEVzA1ZE1TbERLRDFQS1U4bkxGeHVJQ0FnSUNkREp6b2dKMDViUTBCQVNGMG9RMU1wUXlnOVR5bFBKeXhjYmlBZ0lDQW5WaWM2SUNkT1F5aERLRU1wUXlsREtEMVBLVThuTEZ4dUlDQWdJQ2RRSnpvZ0owNG9RME5ETVNsRE1VTW9QVThwVHljc1hHNGdJQ0FnSjFjbk9pQW5UbHREUUVCSVhTaERZekZqTW1OalkyTmpNbTRvVzBoZEtXTXhLVU1vUFU4cFR5Y3NYRzRnSUNBZ0owa25PaUFuVGx0RFFFaGRLRnREUUVoZEtFTXBRME1wUXlnOVR5bFBKeXhjYmlBZ0lDQW5UU2M2SUNkT1F5aERRMU5ES1VNb1BVOHBUeWNzWEc0Z0lDQWdKMVFuT2lBblRrTW9ReWhQS1VNcFF5ZzlUeWxQSnl4Y2JpQWdmVHRjYmx4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUVGQlUyMXBiR1Z6VkhKMWJtTmhkR1ZrT2lCVGRISnBibWRFYVdOMGFXOXVZWEo1SUQwZ2UxeHVJQ0FnSUNkSEp6b2dKeXBES2ljc1hHNGdJQ0FnSjB3bk9pQW5RME1vUXlsRFcwTkFTRjBvS2lrcUp5eGNiaUFnSUNBbldTYzZJQ2RETVQxRFF5ZzlRME05UXpGRFF5Z3FLU29wVHljc1hHNGdJQ0FnSjFNbk9pQW5UME5ES0NvcFF5b25MRnh1SUNBZ0lDZEZKem9nSnlwYlEwQkFTRjBvUTBOREtFOHBQVThwS2ljc1hHNGdJQ0FnSjFFbk9pQW5LazViUTBCQVNGMG9RME5ES0U0cFBVOHBLaWNzWEc0Z0lDQWdKMFFuT2lBbktsdERRRUJJWFNoRFF5aFBLVDFQS1NvbkxGeHVJQ0FnSUNkT0p6b2dKeXBiUTBCQVNGMG9RME1vVGlrOVR5a3FKeXhjYmlBZ0lDQW5SaWM2SUNkRE1UMURRejFES0VNOVF6RXBRME1vS2lrcUp5eGNiaUFnSUNBblFTYzZJQ2REVzBOQVNGMG9LaWtxSnl4Y2JpQWdJQ0FuU3ljNklDZERLRU5EVGlsRFF5Z3FLU29uTEZ4dUlDQWdJQ2RTSnpvZ0p5cGJRMEJJWFNoRFEwTk9ReWc5VGlsREtTb25MRnh1SUNBZ0lDZElKem9nSjBNeFBVTW9Ua005VGpFcFEwTW9LaWtxSnl4Y2JpQWdJQ0FuUXljNklDZERLRnREUUVCSVhTZ3FLU29wVXljc1hHNGdJQ0FnSjFZbk9pQW5RME1vUXlsREtDb3BLaWNzWEc0Z0lDQWdKMUFuT2lBblF6RkRRMDRvS2lsRE1Tb25MRnh1SUNBZ0lDZFhKem9nSnlwYlEwQkFTRjBvUTJNeFl6SmpZMk5qWXpKdUtGdElYU2xqTVNrcUp5eGNiaUFnSUNBblNTYzZJQ2REUTF0RFFFaGRLRU1wVzBOQVNGMG9LaWtxSnl4Y2JpQWdJQ0FuVFNjNklDZERVME5EUXlncUtTb25MRnh1SUNBZ0lDZFVKem9nSjBOREtFOHBReWdxS1NvbkxGeHVJQ0I5TzF4dVhHNGdJQzhxS2lCVVQwUlBPaUJHZFd4c1AxeHVJQ0FnS2k5Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCQlFVWjFiR3hPWVcxbGN6b2dVM1J5YVc1blJHbGpkR2x2Ym1GeWVTQTlJSHRjYmlBZ0lDQW5RV3hoSnpvZ0owRW5MRnh1SUNBZ0lDZEJjbWNuT2lBblVpY3NYRzRnSUNBZ0owRnpiaWM2SUNkT0p5eGNiaUFnSUNBblFYTndKem9nSjBRbkxGeHVJQ0FnSUNkRGVYTW5PaUFuUXljc1hHNGdJQ0FnSjBkc2JpYzZJQ2RSSnl4Y2JpQWdJQ0FuUjJ4MUp6b2dKMFVuTEZ4dUlDQWdJQ2RIYkhrbk9pQW5SeWNzWEc0Z0lDQWdKMGhwY3ljNklDZElKeXhjYmlBZ0lDQW5TV3hsSnpvZ0owa25MRnh1SUNBZ0lDZE1aWFVuT2lBblRDY3NYRzRnSUNBZ0oweDVjeWM2SUNkTEp5eGNiaUFnSUNBblRXVjBKem9nSjAwbkxGeHVJQ0FnSUNkUWFHVW5PaUFuUmljc1hHNGdJQ0FnSjFCeWJ5YzZJQ2RRSnl4Y2JpQWdJQ0FuVTJWeUp6b2dKMU1uTEZ4dUlDQWdJQ2RVYUhJbk9pQW5WQ2NzWEc0Z0lDQWdKMVJ5Y0NjNklDZFhKeXhjYmlBZ0lDQW5WSGx5SnpvZ0oxa25MRnh1SUNBZ0lDZFdZV3duT2lBblZpY3NYRzRnSUgwN1hHNWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5Qm5aWFJRWVd4bGRIUmxLSE5qYUdWdFpUb2djM1J5YVc1bklEMGdKMmR5YjJzbktUb2dVMlZ4VUdGc1pYUjBaU0I3WEc0Z0lDQWdjM2RwZEdOb0lDaHpZMmhsYldVcElIdGNiaUFnSUNCallYTmxJQ2RuY205ckp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNdVIzSnZhMGR5YjNWd2N6dGNiaUFnSUNCallYTmxJQ2RzWlhOckp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNdVRHVnphenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRGFHVnRVR0ZzWlhSMFpUb2djMk5vWlcxbElGeGNZQ1I3YzJOb1pXMWxmVnhjWUNCa2IyVnpJRzV2ZENCbGVHbHpkR0FwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUdScGRtbGtaV1FnWVcxcGJtOGdZV05wWkNCM2FYUm9JR2wwY3lCamIyNTBaVzUwSUdsdUlIUm9aU0JpY21GamEyVjBMQ0JwWmlCMGFHVWdZMjl1ZEdWdWRDQnBjeUJ1ZFcxaVpYSXNJSFJvWlc0Z2FYUnpJRzl0YVhSMFpXUmNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR01nY21GM0lHRnRhVzV2WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMXR6ZEhKcGJtY3NJSE4wY21sdVoxMTlJRzkxZEdWeUlHRnVaQ0JwYm01bGNpQmpiMjUwWlc1MFhHNGdJQ0FxTDF4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUdkbGRFbHVibVZ5VDNWMFpYSW9Zem9nYzNSeWFXNW5LVG9nVzNOMGNtbHVaeXdnYzNSeWFXNW5YU0I3WEc0Z0lDQWdiR1YwSUdselNXNXVaWElnUFNBd08xeHVJQ0FnSUd4bGRDQnBibTVsY2lBOUlDY25PMXh1SUNBZ0lHeGxkQ0J2ZFhSbGNpQTlJQ2NuTzF4dVhHNGdJQ0FnWm05eUlDaGpiMjV6ZENCamFHRnlJRzltSUdNcElIdGNiaUFnSUNBZ0lHbG1JQ2hqYUdGeUlEMDlJQ2NvSnlsY2JpQWdJQ0FnSUNBZ2FYTkpibTVsY2lzck8xeHVJQ0FnSUNBZ1pXeHpaU0JwWmlBb1kyaGhjaUE5UFNBbktTY3BYRzRnSUNBZ0lDQWdJR2x6U1c1dVpYSXRMVHRjYmlBZ0lDQWdJR1ZzYzJVZ2FXWWdLR2x6U1c1dVpYSXBYRzRnSUNBZ0lDQWdJR2x1Ym1WeUlDczlJR05vWVhJN1hHNGdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJRzkxZEdWeUlDczlJR05vWVhJN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJQ0ZwYzA1aFRpaHdZWEp6WlVsdWRDaHBibTVsY2lrcElEOGdXMjkxZEdWeUxDQW5KMTBnT2lCYmIzVjBaWElzSUdsdWJtVnlYVHRjYmlBZ2ZWeHVYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdaMlYwUTI5c2IzSkJRVkJwZG05MEtHMXZibTl0WlhJNklITjBjbWx1WnlBOUlDY25MQ0J6WTJobGJXVTZJQ2RuY205ckp5QTlJQ2RuY205ckp5azZJRnR6ZEhKcGJtY3NJSE4wY21sdVp5d2djM1J5YVc1bkxDQnVkVzFpWlhKZElIdGNiaUFnSUNBdkwyTnZibk4wSUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVZ1BTQkJRVkJoYkdWMGRHVnpMa2R5YjJ0SGNtOTFjSE1vS1R0Y2JpQWdJQ0JqYjI1emRDQmphR1Z0VUdGc1pYUjBaVWx1YzNSaGJtTmxJRDBnZEdocGN5NW5aWFJRWVd4bGRIUmxLSE5qYUdWdFpTazdYRzRnSUNBZ2JHVjBJRnR2ZFhSbGNrMXZibTl0WlhJc0lHbHVibVZ5VFc5dWIyMWxjbDBnUFNCMGFHbHpMbWRsZEVsdWJtVnlUM1YwWlhJb2JXOXViMjFsY2lrN1hHNGdJQ0FnYjNWMFpYSk5iMjV2YldWeUlEMGdLRzkxZEdWeVRXOXViMjFsY2k1c1pXNW5kR2dnUGlBMklEOGdZQ1I3YjNWMFpYSk5iMjV2YldWeUxuTnNhV05sS0RBc0lETXBmUzR1TG1BZ09pQnZkWFJsY2sxdmJtOXRaWElwTzF4dUlDQWdJR2x1Ym1WeVRXOXViMjFsY2lBOUlDaHBibTVsY2sxdmJtOXRaWEl1YkdWdVozUm9JRDRnTmlBL0lHQWtlMmx1Ym1WeVRXOXViMjFsY2k1emJHbGpaU2d3TENBektYMHVMaTVnSURvZ2FXNXVaWEpOYjI1dmJXVnlLVHRjYmx4dUlDQWdJR2xtSUNodGIyNXZiV1Z5TG14bGJtZDBhQ0E5UFNBeElIeDhJRzF2Ym05dFpYSmJNVjBnUFQwZ0p5Z25LU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmhiV2x1YnlBOUlHMXZibTl0WlhKYk1GMC9MblJ2VlhCd1pYSkRZWE5sS0NraE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdGdGFXNXZJR2x1SUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVZ1AxeHVJQ0FnSUNBZ0lDQmJZMmhsYlZCaGJHVjBkR1ZKYm5OMFlXNWpaUzVuWlhRb1lXMXBibThwTENCaGJXbHVieXdnYVc1dVpYSk5iMjV2YldWeUxDQXhYU0E2WEc0Z0lDQWdJQ0FnSUZ0MGFHbHpMblZ1WkdWbWFXNWxaRU52Ykc5eUxDQnZkWFJsY2sxdmJtOXRaWElzSUdsdWJtVnlUVzl1YjIxbGNpd2dNVjA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0cxdmJtOXRaWEpiTUYwZ1BUMGdKMlFuSUNZbUlHMXZibTl0WlhKYk1WMGhJR2x1SUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNBZ0lHbG1JQ2h0YjI1dmJXVnlMbXhsYm1kMGFDQTlQU0F5SUh4OElHMXZibTl0WlhKYk1sMGdQVDBnSnlnbktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHRnRhVzV2SUQwZ2JXOXViMjFsY2xzeFhUOHVkRzlWY0hCbGNrTmhjMlVvS1NFN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCaGJXbHVieUJwYmlCamFHVnRVR0ZzWlhSMFpVbHVjM1JoYm1ObElEOWNiaUFnSUNBZ0lDQWdJQ0JiWTJobGJWQmhiR1YwZEdWSmJuTjBZVzVqWlM1blpYUW9ZVzFwYm04cExDQmhiV2x1Ynl3Z2FXNXVaWEpOYjI1dmJXVnlMQ0F5WFNBNlhHNGdJQ0FnSUNBZ0lDQWdXM1JvYVhNdWRXNWtaV1pwYm1Wa1EyOXNiM0lzSUc5MWRHVnlUVzl1YjIxbGNpd2dhVzV1WlhKTmIyNXZiV1Z5TENBeVhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iVzl1YjIxbGNpNXpkV0p6ZEhKcGJtY29NQ3dnTXlrZ2FXNGdkR2hwY3k1QlFVWjFiR3hPWVcxbGN5a2dlMXh1SUNBZ0lDQWdhV1lnS0cxdmJtOXRaWEl1YkdWdVozUm9JRDA5SURNZ2ZId2diVzl1YjIxbGNsc3pYU0E5UFNBbktDY3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdZVzFwYm04Z1BTQjBhR2x6TGtGQlJuVnNiRTVoYldWelcyMXZibTl0WlhJdWMzVmljM1J5YVc1bktEQXNJRE1wWFR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGdGFXNXZJR2x1SUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVZ1AxeHVJQ0FnSUNBZ0lDQWdJRnRqYUdWdFVHRnNaWFIwWlVsdWMzUmhibU5sTG1kbGRDaGhiV2x1Ynlrc0lHRnRhVzV2TENCcGJtNWxjazF2Ym05dFpYSXNJRE5kSURwY2JpQWdJQ0FnSUNBZ0lDQmJkR2hwY3k1MWJtUmxabWx1WldSRGIyeHZjaXdnYjNWMFpYSk5iMjV2YldWeUxDQnBibTVsY2sxdmJtOXRaWElzSUROZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHRiMjV2YldWeVd6QmRQeTUwYjB4dmQyVnlRMkZ6WlNncElEMDlJRzF2Ym05dFpYSmJNRjBwSUh0Y2JpQWdJQ0FnSUdsbUlDaHRiMjV2YldWeUxuTjFZbk4wY21sdVp5Z3hMQ0F6S1NCcGJpQjBhR2x6TGtGQlJuVnNiRTVoYldWektTQjdYRzRnSUNBZ0lDQWdJR2xtSUNodGIyNXZiV1Z5TG14bGJtZDBhQ0E5UFNBMElIeDhJRzF2Ym05dFpYSmJORjBnUFQwZ0p5Z25LU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWVcxcGJtOGdQU0IwYUdsekxrRkJSblZzYkU1aGJXVnpXMjF2Ym05dFpYSXVjM1ZpYzNSeWFXNW5LREVzSURNcFhUdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZVzFwYm04Z2FXNGdZMmhsYlZCaGJHVjBkR1ZKYm5OMFlXNWpaU0EvWEc0Z0lDQWdJQ0FnSUNBZ0lDQmJZMmhsYlZCaGJHVjBkR1ZKYm5OMFlXNWpaUzVuWlhRb1lXMXBibThwTENCaGJXbHVieXdnYVc1dVpYSk5iMjV2YldWeUxDQTBYU0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmJkR2hwY3k1MWJtUmxabWx1WldSRGIyeHZjaXdnYjNWMFpYSk5iMjV2YldWeUxDQnBibTVsY2sxdmJtOXRaWElzSURSZE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUZ0MGFHbHpMblZ1WkdWbWFXNWxaRU52Ykc5eUxDQnZkWFJsY2sxdmJtOXRaWElzSUdsdWJtVnlUVzl1YjIxbGNpd2dNRjA3WEc0Z0lIMWNibjFjYmlKZGZRPT0iLCJpbXBvcnQgeyBTZXFQYWxldHRlQmFzZSB9IGZyb20gJy4vc2VxLXBhbGV0dGVzJztcbmV4cG9ydCBjbGFzcyBOdWNsZW90aWRlc1BhbGV0dGVzIGV4dGVuZHMgU2VxUGFsZXR0ZUJhc2Uge1xuICAgIHN0YXRpYyBnZXQgQ2hyb21hdG9ncmFtKCkge1xuICAgICAgICBpZiAodGhpcy5jaHJvbWF0b2dyYW0gPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgdGhpcy5jaHJvbWF0b2dyYW0gPSBuZXcgTnVjbGVvdGlkZXNQYWxldHRlcyh7XG4gICAgICAgICAgICAgICAgJ0EnOiAnZ3JlZW4nLFxuICAgICAgICAgICAgICAgICdDJzogJ2JsdWUnLFxuICAgICAgICAgICAgICAgICdHJzogJ2JsYWNrJyxcbiAgICAgICAgICAgICAgICAnVCc6ICdyZWQnLCAnVSc6ICdyZWQnLFxuICAgICAgICAgICAgICAgICdvdGhlcnMnOiAnZ3JheScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jaHJvbWF0b2dyYW07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE51Y2xlb3RpZGVzIHtcbn1cbk51Y2xlb3RpZGVzLlNlbVR5cGUgPSAnTnVjbGVvdGlkZXMnO1xuTnVjbGVvdGlkZXMuU2VtVHlwZU11bHRpcGxlQWxpZ25tZW50ID0gJ051Y2xlb3RpZGVzTXVsdGlwbGVBbGlnbm1lbnQnO1xuTnVjbGVvdGlkZXMuTmFtZXMgPSB7XG4gICAgJ0EnOiAnQWRlbmluZScsXG4gICAgJ0MnOiAnQ3l0b3NpbmUnLFxuICAgICdHJzogJ0d1YW5pbmUnLFxuICAgICdUJzogJ1RoeW1pbmUnLFxuICAgICdVJzogJ1VyYWNpbCcsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYm5WamJHVnZkR2xrWlhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUp1ZFdOc1pXOTBhV1JsY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkxRU3hQUVVGUExFVkJRV0VzWTBGQll5eEZRVUZETEUxQlFVMHNaMEpCUVdkQ0xFTkJRVU03UVVGRk1VUXNUVUZCVFN4UFFVRlBMRzFDUVVGdlFpeFRRVUZSTEdOQlFXTTdTVUZIT1VNc1RVRkJUU3hMUVVGTExGbEJRVms3VVVGRE5VSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1dVRkJXU3hMUVVGTExFdEJRVXNzUTBGQlF5eEZRVUZGTzFsQlEyaERMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzU1VGQlNTeHRRa0ZCYlVJc1EwRkJRenRuUWtGRE1VTXNSMEZCUnl4RlFVRkZMRTlCUVU4N1owSkJRMW9zUjBGQlJ5eEZRVUZGTEUxQlFVMDdaMEpCUTFnc1IwRkJSeXhGUVVGRkxFOUJRVTg3WjBKQlExb3NSMEZCUnl4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzUzBGQlN6dG5Ra0ZEZEVJc1VVRkJVU3hGUVVGRkxFMUJRVTA3WVVGRGFrSXNRMEZCUXl4RFFVRkRPMU5CUTBvN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTTdTVUZETTBJc1EwRkJRenREUVVOR08wRkJSVVFzVFVGQlRTeFBRVUZQTEZkQlFWYzdPMEZCUTA0c2JVSkJRVThzUjBGQlZ5eGhRVUZoTEVOQlFVTTdRVUZGYUVNc2IwTkJRWGRDTEVkQlFWY3NPRUpCUVRoQ0xFTkJRVU03UVVGRmNFVXNhVUpCUVVzc1IwRkJjVUk3U1VGRGRFTXNSMEZCUnl4RlFVRkZMRk5CUVZNN1NVRkRaQ3hIUVVGSExFVkJRVVVzVlVGQlZUdEpRVU5tTEVkQlFVY3NSVUZCUlN4VFFVRlRPMGxCUTJRc1IwRkJSeXhGUVVGRkxGTkJRVk03U1VGRFpDeEhRVUZITEVWQlFVVXNVVUZCVVR0RFFVTmtMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJuY205cklHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOW5jbTlySnp0Y2JtbHRjRzl5ZENBcUlHRnpJSFZwSUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5MWFTYzdYRzVwYlhCdmNuUWdLaUJoY3lCRVJ5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaR2NuTzF4dVhHNXBiWEJ2Y25RZ2UxTjBjbWx1WjBScFkzUnBiMjVoY25sOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdVMlZ4VUdGc1pYUjBaU3dnVTJWeFVHRnNaWFIwWlVKaGMyVjlJR1p5YjIwZ0p5NHZjMlZ4TFhCaGJHVjBkR1Z6Snp0Y2JseHVaWGh3YjNKMElHTnNZWE56SUU1MVkyeGxiM1JwWkdWelVHRnNaWFIwWlhNZ1pYaDBaVzVrY3lCVFpYRlFZV3hsZEhSbFFtRnpaU0I3WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdOb2NtOXRZWFJ2WjNKaGJUb2dVMlZ4VUdGc1pYUjBaVHRjYmx4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUdkbGRDQkRhSEp2YldGMGIyZHlZVzBvS1RvZ1UyVnhVR0ZzWlhSMFpTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVkyaHliMjFoZEc5bmNtRnRJRDA5UFNCMmIybGtJREFwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVZMmh5YjIxaGRHOW5jbUZ0SUQwZ2JtVjNJRTUxWTJ4bGIzUnBaR1Z6VUdGc1pYUjBaWE1vZTF4dUlDQWdJQ0FnSUNBblFTYzZJQ2RuY21WbGJpY3NYRzRnSUNBZ0lDQWdJQ2RESnpvZ0oySnNkV1VuTEZ4dUlDQWdJQ0FnSUNBblJ5YzZJQ2RpYkdGamF5Y3NJQzh2SUc5eVlXNW5aU0EvWEc0Z0lDQWdJQ0FnSUNkVUp6b2dKM0psWkNjc0lDZFZKem9nSjNKbFpDY3NYRzRnSUNBZ0lDQWdJQ2R2ZEdobGNuTW5PaUFuWjNKaGVTY3NYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZMmh5YjIxaGRHOW5jbUZ0TzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJPZFdOc1pXOTBhV1JsY3lCN1hHNGdJSE4wWVhScFl5QnlaV0ZrYjI1c2VTQlRaVzFVZVhCbE9pQnpkSEpwYm1jZ1BTQW5UblZqYkdWdmRHbGtaWE1uTzF4dVhHNGdJSE4wWVhScFl5QnlaV0ZrYjI1c2VTQlRaVzFVZVhCbFRYVnNkR2x3YkdWQmJHbG5ibTFsYm5RNklITjBjbWx1WnlBOUlDZE9kV05zWlc5MGFXUmxjMDExYkhScGNHeGxRV3hwWjI1dFpXNTBKenRjYmx4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUU1aGJXVnpPaUJUZEhKcGJtZEVhV04wYVc5dVlYSjVJRDBnZTF4dUlDQWdJQ2RCSnpvZ0owRmtaVzVwYm1VbkxGeHVJQ0FnSUNkREp6b2dKME41ZEc5emFXNWxKeXhjYmlBZ0lDQW5SeWM2SUNkSGRXRnVhVzVsSnl4Y2JpQWdJQ0FuVkNjNklDZFVhSGx0YVc1bEp5eGNiaUFnSUNBblZTYzZJQ2RWY21GamFXd25MRnh1SUNCOU8xeHVmVnh1SWwxOSIsImV4cG9ydCBjbGFzcyBTZXFQYWxldHRlQmFzZSB7XG4gICAgY29uc3RydWN0b3IocGFsZXR0ZSkge1xuICAgICAgICB0aGlzLl9wYWxldHRlID0gcGFsZXR0ZTtcbiAgICB9XG4gICAgc3RhdGljIG1ha2VQYWxldHRlKGR0LCBzaW1wbGlmaWVkID0gZmFsc2UsIFBhbGV0dGVUeXBlID0gU2VxUGFsZXR0ZUJhc2UpIHtcbiAgICAgICAgY29uc3QgcGFsZXR0ZSA9IHt9O1xuICAgICAgICBkdC5mb3JFYWNoKChjcCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JqTGlzdCA9IGNwWzBdO1xuICAgICAgICAgICAgY29uc3QgY29sb3VyID0gY3BbMV07XG4gICAgICAgICAgICBvYmpMaXN0LmZvckVhY2goKG9iaiwgaW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgcGFsZXR0ZVtvYmpdID0gdGhpcy5jb2xvdXJQYWxldHRlW2NvbG91cl1bc2ltcGxpZmllZCA/IDAgOiBpbmRdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFBhbGV0dGVUeXBlKHBhbGV0dGUpO1xuICAgIH1cbiAgICBnZXQobSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFsZXR0ZVttXTtcbiAgICB9XG59XG4vKiogUGFsZXR0ZSB3aXRoIHNoYWRlcyBvZiBwcmltYXJ5IGNvbG9yc1xuICovXG5TZXFQYWxldHRlQmFzZS5jb2xvdXJQYWxldHRlID0ge1xuICAgICdvcmFuZ2UnOiBbJ3JnYigyNTUsMTg3LDEyMCknLCAncmdiKDI0NSwxNjcsMTAwKScsICdyZ2IoMjM1LDEzNyw3MCknLCAncmdiKDIwNSwgMTExLCA3MSknXSxcbiAgICAnYWxsX2dyZWVuJzogWydyZ2IoNDQsMTYwLDQ0KScsICdyZ2IoNzQsMTYwLDc0KScsICdyZ2IoMjMsMTAzLDU3KScsICdyZ2IoMzAsMTEwLDk2KScsICdyZ2IoNjAsMTMxLDk1KScsXG4gICAgICAgICdyZ2IoMjQsMTEwLDc5KScsICdyZ2IoMTUyLDIyMywxMzgpJywgJ3JnYigxODIsIDIyMywgMTM4KScsICdyZ2IoMTUyLCAxOTMsIDEzOCknXSxcbiAgICAnYWxsX2JsdWUnOiBbJ3JnYigzMSwxMTksMTgwKScsICdyZ2IoMjMsMTkwLDIwNyknLCAncmdiKDEyMiwgMTAyLCAxODkpJywgJ3JnYigxNTgsMjE4LDIyOSknLCAncmdiKDE0MSwgMTI0LCAyMTcpJyxcbiAgICAgICAgJ3JnYigzMSwgMTIwLCAxNTApJ10sXG4gICAgJ21hZ2VudGEnOiBbJ3JnYigxNjIsMTA2LDE5MiknLCAncmdiKDE5NywxNjUsMjI0KScsICdyZ2IoMjA4LDExMywyMTgpJ10sXG4gICAgJ3JlZCc6IFsncmdiKDIxNCwzOSw0MCknLCAncmdiKDI1NSwxNTIsMTUwKSddLFxuICAgICdzdF9ibHVlJzogWydyZ2IoMjMsMTkwLDIwNyknLCAncmdiKDE1OCwyMTgsMjI5KScsICdyZ2IoMzEsMTE5LDE4MCknXSxcbiAgICAnZGFya19ibHVlJzogWydyZ2IoMzEsMTE5LDE4MCknLCAncmdiKDMxLCAxMjAsIDE1MCknXSxcbiAgICAnbGlnaHRfYmx1ZSc6IFsncmdiKDIzLDE5MCwyMDcpJywgJ3JnYigxNTgsMjE4LDIyOSknLCAncmdiKDEwOCwgMjE4LCAyMjkpJywgJ3JnYigyMywxOTAsMjI3KSddLFxuICAgICdsaWxhY19ibHVlJzogWydyZ2IoMTI0LDEwMiwyMTEpJywgJ3JnYigxNDksMTM0LDIxNyknLCAncmdiKDk3LCA4MSwgMTUwKSddLFxuICAgICdkYXJrX2dyZWVuJzogWydyZ2IoMjMsMTAzLDU3KScsICdyZ2IoMzAsMTEwLDk2KScsICdyZ2IoNjAsMTMxLDk1KScsICdyZ2IoMjQsMTEwLDc5KSddLFxuICAgICdncmVlbic6IFsncmdiKDQ0LDE2MCw0NCknLCAncmdiKDc0LDE2MCw3NCknXSxcbiAgICAnbGlnaHRfZ3JlZW4nOiBbJ3JnYigxNTIsMjIzLDEzOCknLCAncmdiKDE4MiwgMjIzLCAxMzgpJywgJ3JnYigxNTIsIDE5MywgMTM4KSddLFxuICAgICdzdF9ncmVlbic6IFsncmdiKDQ0LDE2MCw0NCknLCAncmdiKDE1MiwyMjMsMTM4KScsICdyZ2IoMzksIDE3NCwgOTYpJywgJ3JnYig3NCwxNjAsNzQpJ10sXG4gICAgJ3BpbmsnOiBbJ3JnYigyNDcsMTgyLDIxMCknXSxcbiAgICAnYnJvd24nOiBbJ3JnYigxNDAsODYsNzUpJywgJ3JnYigxMDIsIDYyLCA1NCknXSxcbiAgICAnZ3JheSc6IFsncmdiKDEyNywxMjcsMTI3KScsICdyZ2IoMTk5LDE5OSwxOTkpJywgJ3JnYigxOTYsMTU2LDE0OCknLCAncmdiKDIyMiwgMjIyLCAxODApJ10sXG4gICAgJ3llbGxvdyc6IFsncmdiKDE4OCwxODksMzQpJ10sXG4gICAgJ3doaXRlJzogWydyZ2IoMjMwLDIzMCwyMzApJ10sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWeExYQmhiR1YwZEdWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpYzJWeExYQmhiR1YwZEdWekxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRV2xDUVN4TlFVRk5MRTlCUVU4c1kwRkJZenRKUVRCRGVrSXNXVUZCV1N4UFFVRm5RenRSUVVNeFF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRTlCUVU4c1EwRkJRenRKUVVNeFFpeERRVUZETzBsQmJFSlRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUlVGQmQwSXNSVUZEYmtRc1ZVRkJWU3hIUVVGSExFdEJRVXNzUlVGQlJTeGpRVUZ4UXl4alFVRmpPMUZCUlhaRkxFMUJRVTBzVDBGQlR5eEhRVUU0UWl4RlFVRkZMRU5CUVVNN1VVRkRPVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRk8xbEJRMmhDTEUxQlFVMHNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU4wUWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEY2tJc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSVHRuUWtGRE0wSXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnhGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeFBRVUZQTEVsQlFVa3NWMEZCVnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZSVFN4SFFVRkhMRU5CUVVNc1EwRkJVenRSUVVOc1FpeFBRVUZQTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE1VSXNRMEZCUXpzN1FVRXZRMFE3UjBGRFJ6dEJRVU5YTERSQ1FVRmhMRWRCUVdkRE8wbEJRM3BFTEZGQlFWRXNSVUZCUlN4RFFVRkRMR3RDUVVGclFpeEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxHbENRVUZwUWl4RlFVRkZMRzFDUVVGdFFpeERRVUZETzBsQlF6RkdMRmRCUVZjc1JVRkJSU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMR2RDUVVGblFpeEZRVUZGTEdkQ1FVRm5RaXhGUVVGRkxHZENRVUZuUWl4RlFVRkZMR2RDUVVGblFqdFJRVU53Unl4blFrRkJaMElzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3h2UWtGQmIwSXNSVUZCUlN4dlFrRkJiMElzUTBGQlF6dEpRVU51Uml4VlFVRlZMRVZCUVVVc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4cFFrRkJhVUlzUlVGQlJTeHZRa0ZCYjBJc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4dlFrRkJiMEk3VVVGREwwY3NiVUpCUVcxQ0xFTkJRVU03U1VGRGRFSXNVMEZCVXl4RlFVRkZMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVVzYTBKQlFXdENMRU5CUVVNN1NVRkRka1VzUzBGQlN5eEZRVUZGTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzYTBKQlFXdENMRU5CUVVNN1NVRkROME1zVTBGQlV5eEZRVUZGTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzYTBKQlFXdENMRVZCUVVVc2FVSkJRV2xDTEVOQlFVTTdTVUZEY2tVc1YwRkJWeXhGUVVGRkxFTkJRVU1zYVVKQlFXbENMRVZCUVVVc2JVSkJRVzFDTEVOQlFVTTdTVUZEY2tRc1dVRkJXU3hGUVVGRkxFTkJRVU1zYVVKQlFXbENMRVZCUVVVc2EwSkJRV3RDTEVWQlFVVXNiMEpCUVc5Q0xFVkJRVVVzYVVKQlFXbENMRU5CUVVNN1NVRkRPVVlzV1VGQldTeEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzYTBKQlFXdENMRVZCUVVVc2EwSkJRV3RDTEVOQlFVTTdTVUZETVVVc1dVRkJXU3hGUVVGRkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1owSkJRV2RDTEVWQlFVVXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFXZENMRU5CUVVNN1NVRkRkRVlzVDBGQlR5eEZRVUZGTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFXZENMRU5CUVVNN1NVRkROME1zWVVGQllTeEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzYjBKQlFXOUNMRVZCUVVVc2IwSkJRVzlDTEVOQlFVTTdTVUZETDBVc1ZVRkJWU3hGUVVGRkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVc2EwSkJRV3RDTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVVzWjBKQlFXZENMRU5CUVVNN1NVRkRlRVlzVFVGQlRTeEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU03U1VGRE5VSXNUMEZCVHl4RlFVRkZMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNhMEpCUVd0Q0xFTkJRVU03U1VGREwwTXNUVUZCVFN4RlFVRkZMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVVzYTBKQlFXdENMRVZCUVVVc2IwSkJRVzlDTEVOQlFVTTdTVUZETVVZc1VVRkJVU3hGUVVGRkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNN1NVRkROMElzVDBGQlR5eEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU03UTBGRE9VSXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENBcUlHRnpJR2R5YjJzZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyZHliMnNuTzF4dWFXMXdiM0owSUNvZ1lYTWdkV2tnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDNWcEp6dGNibWx0Y0c5eWRDQXFJR0Z6SUVSSElHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOWtaeWM3WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1UyVnhVR0ZzWlhSMFpTQjdYRzRnSUM4dklGUm9aWEpsSUdGeVpTQjBiMjhnYlhWamFDQndjbTlpYkdWdElIZHBkR2dnYVc1a1pYaGxjaUJ3Y205d1pYSjBlU0JwYmlCMGVYQmxjMk55YVhCMExseHVJQ0F2THlBdktpcGNiaUFnTHk4Z0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHMGdUVzl1YjIxbGNpQmphR0Z5WVdOMFpYSmNiaUFnTHk4Z0lDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZTQkRiMnh2Y2x4dUlDQXZMeUFnS2k5Y2JpQWdMeThnVzIwNklITjBjbWx1WjEwNklITjBjbWx1Wnp0Y2JpQWdMeW9xSUUxdmJtOXRaWElnWTI5c2IzSmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUcwZ1RXOXViMjFsY2x4dUlDQWdLaTljYmlBZ1oyVjBLRzA2SUhOMGNtbHVaeWs2SUhOMGNtbHVaenRjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUZObGNWQmhiR1YwZEdWQ1lYTmxJR2x0Y0d4bGJXVnVkSE1nVTJWeFVHRnNaWFIwWlNCN1hHNGdJQzhxS2lCUVlXeGxkSFJsSUhkcGRHZ2djMmhoWkdWeklHOW1JSEJ5YVcxaGNua2dZMjlzYjNKelhHNGdJQ0FxTDF4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUdOdmJHOTFjbEJoYkdWMGRHVTZJSHNnVzJ0bGVUb2djM1J5YVc1blhUb2djM1J5YVc1blcxMGdmU0E5SUh0Y2JpQWdJQ0FuYjNKaGJtZGxKem9nV3lkeVoySW9NalUxTERFNE55d3hNakFwSnl3Z0ozSm5ZaWd5TkRVc01UWTNMREV3TUNrbkxDQW5jbWRpS0RJek5Td3hNemNzTnpBcEp5d2dKM0puWWlneU1EVXNJREV4TVN3Z056RXBKMTBzWEc0Z0lDQWdKMkZzYkY5bmNtVmxiaWM2SUZzbmNtZGlLRFEwTERFMk1DdzBOQ2tuTENBbmNtZGlLRGMwTERFMk1DdzNOQ2tuTENBbmNtZGlLREl6TERFd015dzFOeWtuTENBbmNtZGlLRE13TERFeE1DdzVOaWtuTENBbmNtZGlLRFl3TERFek1TdzVOU2tuTEZ4dUlDQWdJQ0FnSjNKbllpZ3lOQ3d4TVRBc056a3BKeXdnSjNKbllpZ3hOVElzTWpJekxERXpPQ2tuTENBbmNtZGlLREU0TWl3Z01qSXpMQ0F4TXpncEp5d2dKM0puWWlneE5USXNJREU1TXl3Z01UTTRLU2RkTEZ4dUlDQWdJQ2RoYkd4ZllteDFaU2M2SUZzbmNtZGlLRE14TERFeE9Td3hPREFwSnl3Z0ozSm5ZaWd5TXl3eE9UQXNNakEzS1Njc0lDZHlaMklvTVRJeUxDQXhNRElzSURFNE9Ta25MQ0FuY21kaUtERTFPQ3d5TVRnc01qSTVLU2NzSUNkeVoySW9NVFF4TENBeE1qUXNJREl4TnlrbkxGeHVJQ0FnSUNBZ0ozSm5ZaWd6TVN3Z01USXdMQ0F4TlRBcEoxMHNYRzRnSUNBZ0oyMWhaMlZ1ZEdFbk9pQmJKM0puWWlneE5qSXNNVEEyTERFNU1pa25MQ0FuY21kaUtERTVOeXd4TmpVc01qSTBLU2NzSUNkeVoySW9NakE0TERFeE15d3lNVGdwSjEwc1hHNGdJQ0FnSjNKbFpDYzZJRnNuY21kaUtESXhOQ3d6T1N3ME1Da25MQ0FuY21kaUtESTFOU3d4TlRJc01UVXdLU2RkTEZ4dUlDQWdJQ2R6ZEY5aWJIVmxKem9nV3lkeVoySW9Nak1zTVRrd0xESXdOeWtuTENBbmNtZGlLREUxT0N3eU1UZ3NNakk1S1Njc0lDZHlaMklvTXpFc01URTVMREU0TUNrblhTeGNiaUFnSUNBblpHRnlhMTlpYkhWbEp6b2dXeWR5WjJJb016RXNNVEU1TERFNE1Da25MQ0FuY21kaUtETXhMQ0F4TWpBc0lERTFNQ2tuWFN4Y2JpQWdJQ0FuYkdsbmFIUmZZbXgxWlNjNklGc25jbWRpS0RJekxERTVNQ3d5TURjcEp5d2dKM0puWWlneE5UZ3NNakU0TERJeU9Ta25MQ0FuY21kaUtERXdPQ3dnTWpFNExDQXlNamtwSnl3Z0ozSm5ZaWd5TXl3eE9UQXNNakkzS1NkZExGeHVJQ0FnSUNkc2FXeGhZMTlpYkhWbEp6b2dXeWR5WjJJb01USTBMREV3TWl3eU1URXBKeXdnSjNKbllpZ3hORGtzTVRNMExESXhOeWtuTENBbmNtZGlLRGszTENBNE1Td2dNVFV3S1NkZExGeHVJQ0FnSUNka1lYSnJYMmR5WldWdUp6b2dXeWR5WjJJb01qTXNNVEF6TERVM0tTY3NJQ2R5WjJJb016QXNNVEV3TERrMktTY3NJQ2R5WjJJb05qQXNNVE14TERrMUtTY3NJQ2R5WjJJb01qUXNNVEV3TERjNUtTZGRMRnh1SUNBZ0lDZG5jbVZsYmljNklGc25jbWRpS0RRMExERTJNQ3cwTkNrbkxDQW5jbWRpS0RjMExERTJNQ3czTkNrblhTeGNiaUFnSUNBbmJHbG5hSFJmWjNKbFpXNG5PaUJiSjNKbllpZ3hOVElzTWpJekxERXpPQ2tuTENBbmNtZGlLREU0TWl3Z01qSXpMQ0F4TXpncEp5d2dKM0puWWlneE5USXNJREU1TXl3Z01UTTRLU2RkTEZ4dUlDQWdJQ2R6ZEY5bmNtVmxiaWM2SUZzbmNtZGlLRFEwTERFMk1DdzBOQ2tuTENBbmNtZGlLREUxTWl3eU1qTXNNVE00S1Njc0lDZHlaMklvTXprc0lERTNOQ3dnT1RZcEp5d2dKM0puWWlnM05Dd3hOakFzTnpRcEoxMHNYRzRnSUNBZ0ozQnBibXNuT2lCYkozSm5ZaWd5TkRjc01UZ3lMREl4TUNrblhTeGNiaUFnSUNBblluSnZkMjRuT2lCYkozSm5ZaWd4TkRBc09EWXNOelVwSnl3Z0ozSm5ZaWd4TURJc0lEWXlMQ0ExTkNrblhTeGNiaUFnSUNBblozSmhlU2M2SUZzbmNtZGlLREV5Tnl3eE1qY3NNVEkzS1Njc0lDZHlaMklvTVRrNUxERTVPU3d4T1RrcEp5d2dKM0puWWlneE9UWXNNVFUyTERFME9Da25MQ0FuY21kaUtESXlNaXdnTWpJeUxDQXhPREFwSjEwc1hHNGdJQ0FnSjNsbGJHeHZkeWM2SUZzbmNtZGlLREU0T0N3eE9Ea3NNelFwSjEwc1hHNGdJQ0FnSjNkb2FYUmxKem9nV3lkeVoySW9Nak13TERJek1Dd3lNekFwSjEwc1hHNGdJSDA3WEc1Y2JpQWdjSEp2ZEdWamRHVmtJSE4wWVhScFl5QnRZV3RsVUdGc1pYUjBaU2hrZERvZ1czTjBjbWx1WjF0ZExDQnpkSEpwYm1kZFcxMHNYRzRnSUNBZ2MybHRjR3hwWm1sbFpDQTlJR1poYkhObExDQlFZV3hsZEhSbFZIbHdaVG9nZEhsd1pXOW1JRk5sY1ZCaGJHVjBkR1ZDWVhObElEMGdVMlZ4VUdGc1pYUjBaVUpoYzJWY2JpQWdLU0I3WEc0Z0lDQWdZMjl1YzNRZ2NHRnNaWFIwWlRvZ2V5QmJhMlY1T2lCemRISnBibWRkT2lCemRISnBibWNnZlNBOUlIdDlPMXh1SUNBZ0lHUjBMbVp2Y2tWaFkyZ29LR053S1NBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCdlltcE1hWE4wSUQwZ1kzQmJNRjA3WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMnh2ZFhJZ1BTQmpjRnN4WFR0Y2JpQWdJQ0FnSUc5aWFreHBjM1F1Wm05eVJXRmphQ2dvYjJKcUxDQnBibVFwSUQwK0lIdGNiaUFnSUNBZ0lDQWdjR0ZzWlhSMFpWdHZZbXBkSUQwZ2RHaHBjeTVqYjJ4dmRYSlFZV3hsZEhSbFcyTnZiRzkxY2wxYmMybHRjR3hwWm1sbFpDQS9JREFnT2lCcGJtUmRPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmU2s3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRWVd4bGRIUmxWSGx3WlNod1lXeGxkSFJsS1R0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ1gzQmhiR1YwZEdVNklIc2dXMjA2SUhOMGNtbHVaMTA2SUhOMGNtbHVaeUI5TzF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0hCaGJHVjBkR1U2SUhzZ1cyMDZJSE4wY21sdVoxMDZJSE4wY21sdVp5QjlLU0I3WEc0Z0lDQWdkR2hwY3k1ZmNHRnNaWFIwWlNBOUlIQmhiR1YwZEdVN1hHNGdJSDFjYmx4dUlDQndkV0pzYVdNZ1oyVjBLRzA2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDNCaGJHVjBkR1ZiYlYwN1hHNGdJSDFjYm4xY2JpSmRmUT09IiwiZXhwb3J0IGNsYXNzIFN0cmluZ1V0aWxzIHtcbiAgICBzdGF0aWMgaGFzaENvZGUocykge1xuICAgICAgICBsZXQgaGFzaCA9IDA7XG4gICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNociA9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNocjtcbiAgICAgICAgICAgIGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgfVxufVxuaW1wb3J0IHsgU2VxUGFsZXR0ZUJhc2UgfSBmcm9tICcuL3NlcS1wYWxldHRlcyc7XG5leHBvcnQgY2xhc3MgVW5rbm93blNlcVBhbGV0dGUge1xufVxuZXhwb3J0IGNsYXNzIEdyYXlBbGxQYWxldHRlIGV4dGVuZHMgVW5rbm93blNlcVBhbGV0dGUge1xuICAgIGdldChtKSB7XG4gICAgICAgIHJldHVybiAnIzY2NjY2Nic7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFVua25vd25Db2xvclBhbGV0dGUgZXh0ZW5kcyBVbmtub3duU2VxUGFsZXR0ZSB7XG4gICAgc3RhdGljIGJ1aWxkUGFsZXR0ZSgpIHtcbiAgICAgICAgY29uc3QgcmVzID0gW10uY29uY2F0KC4uLk9iamVjdC52YWx1ZXMoU2VxUGFsZXR0ZUJhc2UuY29sb3VyUGFsZXR0ZSkpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBnZXQobSkge1xuICAgICAgICBjb25zdCBoYXNoID0gU3RyaW5nVXRpbHMuaGFzaENvZGUobSk7XG4gICAgICAgIGNvbnN0IHBJID0gaGFzaCAlIFVua25vd25Db2xvclBhbGV0dGUucGFsZXR0ZS5sZW5ndGg7XG4gICAgICAgIHJldHVybiBVbmtub3duQ29sb3JQYWxldHRlLnBhbGV0dGVbcEldO1xuICAgIH1cbn1cblVua25vd25Db2xvclBhbGV0dGUucGFsZXR0ZSA9IFVua25vd25Db2xvclBhbGV0dGUuYnVpbGRQYWxldHRlKCk7XG5leHBvcnQgY2xhc3MgVW5rbm93blNlcVBhbGV0dGVzIGV4dGVuZHMgU2VxUGFsZXR0ZUJhc2Uge1xuICAgIHN0YXRpYyBnZXQgR3JheSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JheSA9PT0gdm9pZCAwKVxuICAgICAgICAgICAgdGhpcy5ncmF5ID0gbmV3IEdyYXlBbGxQYWxldHRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdyYXk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgQ29sb3IoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbG9yID09PSB2b2lkIDApXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gbmV3IFVua25vd25Db2xvclBhbGV0dGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFc1cmJtOTNiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluVnVhMjV2ZDI0dWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJTVUVzVFVGQlRTeFBRVUZQTEZkQlFWYzdTVUZEWml4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVk03VVVGRE9VSXNTVUZCU1N4SlFVRkpMRWRCUVZjc1EwRkJReXhEUVVGRE8xRkJRM0pDTEVsQlFVa3NRMEZCUXl4RFFVRkRMRTFCUVUwc1MwRkJTeXhEUVVGRE8xbEJRMmhDTEU5QlFVOHNTVUZCU1N4RFFVRkRPMUZCUTJRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlZ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEZWtNc1RVRkJUU3hIUVVGSExFZEJRVmNzUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOd1F5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNN1dVRkRiRU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMREpDUVVFeVFqdFRRVU4yUXp0UlFVTkVMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dERRVU5HTzBGQlJVUXNUMEZCVHl4RlFVRmhMR05CUVdNc1JVRkJReXhOUVVGTkxHZENRVUZuUWl4RFFVRkRPMEZCUlRGRUxFMUJRVTBzVDBGQlowSXNhVUpCUVdsQ08wTkJSWFJETzBGQlJVUXNUVUZCVFN4UFFVRlBMR05CUVdVc1UwRkJVU3hwUWtGQmFVSTdTVUZETlVNc1IwRkJSeXhEUVVGRExFTkJRVk03VVVGRGJFSXNUMEZCVHl4VFFVRlRMRU5CUVVNN1NVRkRia0lzUTBGQlF6dERRVU5HTzBGQlIwUXNUVUZCVFN4UFFVRlBMRzFDUVVGdlFpeFRRVUZSTEdsQ1FVRnBRanRKUVVkb1JDeE5RVUZOTEVOQlFVTXNXVUZCV1R0UlFVTjZRaXhOUVVGTkxFZEJRVWNzUjBGQlNTeEZRVUZsTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1JpeFBRVUZQTEVkQlFVY3NRMEZCUXp0SlFVTmlMRU5CUVVNN1NVRkZUU3hIUVVGSExFTkJRVU1zUTBGQlV6dFJRVU5zUWl4TlFVRk5MRWxCUVVrc1IwRkJWeXhYUVVGWExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXpkRExFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NSMEZCUnl4dFFrRkJiVUlzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTNKRUxFOUJRVThzYlVKQlFXMUNMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzBsQlEzcERMRU5CUVVNN08wRkJXR0VzTWtKQlFVOHNSMEZCWVN4dFFrRkJiVUlzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXp0QlFXTjJSU3hOUVVGTkxFOUJRVThzYTBKQlFXMUNMRk5CUVZFc1kwRkJZenRKUVVjM1F5eE5RVUZOTEV0QlFVc3NTVUZCU1R0UlFVTndRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEV0QlFVc3NTMEZCU3l4RFFVRkRPMWxCUTNSQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4alFVRmpMRVZCUVVVc1EwRkJRenRSUVVOdVF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN1NVRkRia0lzUTBGQlF6dEpRVWxOTEUxQlFVMHNTMEZCU3l4TFFVRkxPMUZCUTNKQ0xFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NTMEZCU3l4TFFVRkxMRU5CUVVNN1dVRkRka0lzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRzFDUVVGdFFpeEZRVUZGTEVOQlFVTTdVVUZEZWtNc1QwRkJUeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBsQlEzQkNMRU5CUVVNN1EwRkRSaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklHZHliMnNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJkeWIyc25PMXh1YVcxd2IzSjBJQ29nWVhNZ2RXa2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMM1ZwSnp0Y2JtbHRjRzl5ZENBcUlHRnpJRVJISUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5a1p5YzdYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlRkSEpwYm1kVmRHbHNjeUI3WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nYUdGemFFTnZaR1VvY3pvZ2MzUnlhVzVuS1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0JzWlhRZ2FHRnphRG9nYm5WdFltVnlJRDBnTUR0Y2JpQWdJQ0JwWmlBb2N5NXNaVzVuZEdnZ1BUMDlJREFwWEc0Z0lDQWdJQ0J5WlhSMWNtNGdhR0Z6YUR0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwT2lCdWRXMWlaWElnUFNBd095QnBJRHdnY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1kyaHlPaUJ1ZFcxaVpYSWdQU0J6TG1Ob1lYSkRiMlJsUVhRb2FTazdYRzRnSUNBZ0lDQm9ZWE5vSUQwZ0tDaG9ZWE5vSUR3OElEVXBJQzBnYUdGemFDa2dLeUJqYUhJN1hHNGdJQ0FnSUNCb1lYTm9JSHc5SURBN0lDOHZJRU52Ym5abGNuUWdkRzhnTXpKaWFYUWdhVzUwWldkbGNseHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdhR0Z6YUR0Y2JpQWdmVnh1ZlZ4dVhHNXBiWEJ2Y25RZ2UxTmxjVkJoYkdWMGRHVXNJRk5sY1ZCaGJHVjBkR1ZDWVhObGZTQm1jbTl0SUNjdUwzTmxjUzF3WVd4bGRIUmxjeWM3WEc1Y2JtVjRjRzl5ZENCaFluTjBjbUZqZENCamJHRnpjeUJWYm10dWIzZHVVMlZ4VUdGc1pYUjBaU0JwYlhCc1pXMWxiblJ6SUZObGNWQmhiR1YwZEdVZ2UxeHVJQ0J3ZFdKc2FXTWdZV0p6ZEhKaFkzUWdaMlYwS0cwNklITjBjbWx1WnlrNklITjBjbWx1Wnp0Y2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklFZHlZWGxCYkd4UVlXeGxkSFJsSUdWNGRHVnVaSE1nVlc1cmJtOTNibE5sY1ZCaGJHVjBkR1VnZTF4dUlDQndkV0pzYVdNZ1oyVjBLRzA2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUI3WEc0Z0lDQWdjbVYwZFhKdUlDY2pOalkyTmpZMkp6dGNiaUFnZlZ4dWZWeHVYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlZibXR1YjNkdVEyOXNiM0pRWVd4bGRIUmxJR1Y0ZEdWdVpITWdWVzVyYm05M2JsTmxjVkJoYkdWMGRHVWdlMXh1SUNCd2RXSnNhV01nYzNSaGRHbGpJSEJoYkdWMGRHVTZJSE4wY21sdVoxdGRJRDBnVlc1cmJtOTNia052Ykc5eVVHRnNaWFIwWlM1aWRXbHNaRkJoYkdWMGRHVW9LVHRjYmx4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCaWRXbHNaRkJoYkdWMGRHVW9LVG9nYzNSeWFXNW5XMTBnZTF4dUlDQWdJR052Ym5OMElISmxjeUE5SUNoYlhTQmhjeUJ6ZEhKcGJtZGJYU2t1WTI5dVkyRjBLQzR1TGs5aWFtVmpkQzUyWVd4MVpYTW9VMlZ4VUdGc1pYUjBaVUpoYzJVdVkyOXNiM1Z5VUdGc1pYUjBaU2twTzF4dUlDQWdJSEpsZEhWeWJpQnlaWE03WEc0Z0lIMWNibHh1SUNCd2RXSnNhV01nWjJWMEtHMDZJSE4wY21sdVp5azZJSE4wY21sdVp5QjdYRzRnSUNBZ1kyOXVjM1FnYUdGemFEb2diblZ0WW1WeUlEMGdVM1J5YVc1blZYUnBiSE11YUdGemFFTnZaR1VvYlNrN1hHNGdJQ0FnWTI5dWMzUWdjRWtnUFNCb1lYTm9JQ1VnVlc1cmJtOTNia052Ykc5eVVHRnNaWFIwWlM1d1lXeGxkSFJsTG14bGJtZDBhRHRjYmlBZ0lDQnlaWFIxY200Z1ZXNXJibTkzYmtOdmJHOXlVR0ZzWlhSMFpTNXdZV3hsZEhSbFczQkpYVHRjYmlBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWTJ4aGMzTWdWVzVyYm05M2JsTmxjVkJoYkdWMGRHVnpJR1Y0ZEdWdVpITWdVMlZ4VUdGc1pYUjBaVUpoYzJVZ2UxeHVJQ0J3Y21sMllYUmxJSE4wWVhScFl5Qm5jbUY1T2lCVFpYRlFZV3hsZEhSbE8xeHVYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdaMlYwSUVkeVlYa29LVG9nVTJWeFVHRnNaWFIwWlNCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WjNKaGVTQTlQVDBnZG05cFpDQXdLVnh1SUNBZ0lDQWdkR2hwY3k1bmNtRjVJRDBnYm1WM0lFZHlZWGxCYkd4UVlXeGxkSFJsS0NrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVozSmhlVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR052Ykc5eU9pQlRaWEZRWVd4bGRIUmxPMXh1WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nWjJWMElFTnZiRzl5S0NrNklGTmxjVkJoYkdWMGRHVWdlMXh1SUNBZ0lHbG1JQ2gwYUdsekxtTnZiRzl5SUQwOVBTQjJiMmxrSURBcFhHNGdJQ0FnSUNCMGFHbHpMbU52Ykc5eUlEMGdibVYzSUZWdWEyNXZkMjVEYjJ4dmNsQmhiR1YwZEdVb0tUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWpiMnh2Y2p0Y2JpQWdmVnh1ZlZ4dUlsMTkiLCIvLyBEYXRhIHN0cnVjdHVyZXMgZm9yIFYtRG9tYWluIHJlZ2lvbnMgb2YgYW50aWJvZGllc1xuZXhwb3J0IHZhciBWZFJlZ2lvblR5cGU7XG4oZnVuY3Rpb24gKFZkUmVnaW9uVHlwZSkge1xuICAgIFZkUmVnaW9uVHlwZVtcIlVua25vd25cIl0gPSBcInVua25vd25cIjtcbiAgICBWZFJlZ2lvblR5cGVbXCJGUlwiXSA9IFwiZnJhbWV3b3JrXCI7XG4gICAgVmRSZWdpb25UeXBlW1wiQ0RSXCJdID0gXCJjZHJcIjtcbn0pKFZkUmVnaW9uVHlwZSB8fCAoVmRSZWdpb25UeXBlID0ge30pKTtcbi8qKiBEZXNjcmliZXMgVi1ET01BSU4gKElHIGFuZCBUUikgcmVnaW9uIChvZiBtdWx0aXBsZSBhbGlnbm1lbnQpXG4gKiBodHRwczovL3d3dy5pbWd0Lm9yZy9JTUdUU2NpZW50aWZpY0NoYXJ0L051bWJlcmluZy9JTUdUSUdWTHN1cGVyZmFtaWx5Lmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIFZkUmVnaW9uIHtcbiAgICAvKipcbiAgICAgKiBzdGFydCBhbmQgcG9zaXRpb24gYXJlIHN0cmluZ3MgYmVjYXVzZSB0aGV5IGNvcnJlc3BvbmQgdG8gcG9zaXRpb24gbmFtZXMgYXMgY29sdW1uIG5hbWVzIGluIEFOQVJDSSBvdXRwdXRcbiAgICAgKiBAcGFyYW0ge1ZkUmVnaW9uVHlwZX0gdHlwZSAgVHlwZSBvZiB0aGUgcmVnaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgIE5hbWUgb2YgdGhlIHJlZ2lvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFpblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwb3NpdGlvblN0YXJ0TmFtZSAgUmVnaW9uIHN0YXJ0IHBvc2l0aW9uIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uRW5kTmFtZSAgUmVnaW9uIGVuZCBwb3NpdGlvbiAoaW5jbHVzaXZlKVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIG5hbWUsIGNoYWluLCBvcmRlciwgcG9zaXRpb25TdGFydE5hbWUsIHBvc2l0aW9uRW5kTmFtZSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmNoYWluID0gY2hhaW47XG4gICAgICAgIHRoaXMub3JkZXIgPSBvcmRlcjtcbiAgICAgICAgdGhpcy5wb3NpdGlvblN0YXJ0TmFtZSA9IHBvc2l0aW9uU3RhcnROYW1lO1xuICAgICAgICB0aGlzLnBvc2l0aW9uRW5kTmFtZSA9IHBvc2l0aW9uRW5kTmFtZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVF0Y21WbmFXOXVjeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluWmtMWEpsWjJsdmJuTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc2NVUkJRWEZFTzBGQlJYSkVMRTFCUVUwc1EwRkJUaXhKUVVGWkxGbEJTVmc3UVVGS1JDeFhRVUZaTEZsQlFWazdTVUZEZEVJc2JVTkJRVzFDTEVOQlFVRTdTVUZEYmtJc1owTkJRV2RDTEVOQlFVRTdTVUZEYUVJc01rSkJRVmNzUTBGQlFUdEJRVU5pTEVOQlFVTXNSVUZLVnl4WlFVRlpMRXRCUVZvc1dVRkJXU3hSUVVsMlFqdEJRVVZFT3p0SFFVVkhPMEZCUTBnc1RVRkJUU3hQUVVGUExGRkJRVkU3U1VGUmJrSTdPenM3T3pzN08wOUJVVWM3U1VGRFNDeFpRVUZaTEVsQlFXdENMRVZCUVVVc1NVRkJXU3hGUVVGRkxFdEJRV0VzUlVGQlJTeExRVUZoTEVWQlEzaEZMR2xDUVVGNVFpeEZRVUZGTEdWQlFYVkNPMUZCUTJ4RUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTI1Q0xFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTI1Q0xFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1IwRkJSeXhwUWtGQmFVSXNRMEZCUXp0UlFVTXpReXhKUVVGSkxFTkJRVU1zWlVGQlpTeEhRVUZITEdWQlFXVXNRMEZCUXp0SlFVTjZReXhEUVVGRE8wTkJRMFlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdkx5QkVZWFJoSUhOMGNuVmpkSFZ5WlhNZ1ptOXlJRll0Ukc5dFlXbHVJSEpsWjJsdmJuTWdiMllnWVc1MGFXSnZaR2xsYzF4dVhHNWxlSEJ2Y25RZ1pXNTFiU0JXWkZKbFoybHZibFI1Y0dVZ2UxeHVJQ0JWYm10dWIzZHVJRDBnSjNWdWEyNXZkMjRuTEZ4dUlDQkdVaUE5SUNkbWNtRnRaWGR2Y21zbkxGeHVJQ0JEUkZJZ1BTQW5ZMlJ5Snl4Y2JuMWNibHh1THlvcUlFUmxjMk55YVdKbGN5QldMVVJQVFVGSlRpQW9TVWNnWVc1a0lGUlNLU0J5WldkcGIyNGdLRzltSUcxMWJIUnBjR3hsSUdGc2FXZHViV1Z1ZENsY2JpQXFJR2gwZEhCek9pOHZkM2QzTG1sdFozUXViM0puTDBsTlIxUlRZMmxsYm5ScFptbGpRMmhoY25RdlRuVnRZbVZ5YVc1bkwwbE5SMVJKUjFaTWMzVndaWEptWVcxcGJIa3VhSFJ0YkZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZtUlNaV2RwYjI0Z2UxeHVJQ0IwZVhCbE9pQldaRkpsWjJsdmJsUjVjR1U3WEc0Z0lHNWhiV1U2SUhOMGNtbHVaenRjYmlBZ1kyaGhhVzQ2SUhOMGNtbHVaenRjYmlBZ2IzSmtaWEk2SUc1MWJXSmxjanRjYmlBZ2NHOXphWFJwYjI1VGRHRnlkRTVoYldVNklITjBjbWx1Wnp0Y2JpQWdjRzl6YVhScGIyNUZibVJPWVcxbE9pQnpkSEpwYm1jN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUhOMFlYSjBJR0Z1WkNCd2IzTnBkR2x2YmlCaGNtVWdjM1J5YVc1bmN5QmlaV05oZFhObElIUm9aWGtnWTI5eWNtVnpjRzl1WkNCMGJ5QndiM05wZEdsdmJpQnVZVzFsY3lCaGN5QmpiMngxYlc0Z2JtRnRaWE1nYVc0Z1FVNUJVa05KSUc5MWRIQjFkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UxWmtVbVZuYVc5dVZIbHdaWDBnZEhsd1pTQWdWSGx3WlNCdlppQjBhR1VnY21WbmFXOXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdVlXMWxJQ0JPWVcxbElHOW1JSFJvWlNCeVpXZHBiMjVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHTm9ZV2x1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnZjbVJsY2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjRzl6YVhScGIyNVRkR0Z5ZEU1aGJXVWdJRkpsWjJsdmJpQnpkR0Z5ZENCd2IzTnBkR2x2YmlBb2FXNWpiSFZ6YVhabEtWeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnY0c5emFYUnBiMjVGYm1ST1lXMWxJQ0JTWldkcGIyNGdaVzVrSUhCdmMybDBhVzl1SUNocGJtTnNkWE5wZG1VcFhHNGdJQ0FxTDF4dUlDQmpiMjV6ZEhKMVkzUnZjaWgwZVhCbE9pQldaRkpsWjJsdmJsUjVjR1VzSUc1aGJXVTZJSE4wY21sdVp5d2dZMmhoYVc0NklITjBjbWx1Wnl3Z2IzSmtaWEk2SUc1MWJXSmxjaXhjYmlBZ0lDQndiM05wZEdsdmJsTjBZWEowVG1GdFpUb2djM1J5YVc1bkxDQndiM05wZEdsdmJrVnVaRTVoYldVNklITjBjbWx1WnlrZ2UxeHVJQ0FnSUhSb2FYTXVkSGx3WlNBOUlIUjVjR1U3WEc0Z0lDQWdkR2hwY3k1dVlXMWxJRDBnYm1GdFpUdGNiaUFnSUNCMGFHbHpMbU5vWVdsdUlEMGdZMmhoYVc0N1hHNGdJQ0FnZEdocGN5NXZjbVJsY2lBOUlHOXlaR1Z5TzF4dUlDQWdJSFJvYVhNdWNHOXphWFJwYjI1VGRHRnlkRTVoYldVZ1BTQndiM05wZEdsdmJsTjBZWEowVG1GdFpUdGNiaUFnSUNCMGFHbHpMbkJ2YzJsMGFXOXVSVzVrVG1GdFpTQTlJSEJ2YzJsMGFXOXVSVzVrVG1GdFpUdGNiaUFnZlZ4dWZWeHVJbDE5IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVmVjdG9yIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHsgdmVjdG9yTGVuZ3RoLCB2ZWN0b3JEb3RQcm9kdWN0IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHsgQW1pbm9hY2lkcywgQW1pbm9hY2lkc1BhbGV0dGVzIH0gZnJvbSAnLi4vYW1pbm9hY2lkcyc7XG5pbXBvcnQgeyBOdWNsZW90aWRlcywgTnVjbGVvdGlkZXNQYWxldHRlcyB9IGZyb20gJy4uL251Y2xlb3RpZGVzJztcbmltcG9ydCB7IFVua25vd25TZXFQYWxldHRlLCBVbmtub3duU2VxUGFsZXR0ZXMgfSBmcm9tICcuLi91bmtub3duJztcbkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5nZXRDdXJzb3JQb3NpdGlvbiA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiBuZXcgREcuUG9pbnQoZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wKTtcbn07XG5ERy5SZWN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdCA8PSB4ICYmIHggPD0gdGhpcy5yaWdodCAmJiB0aGlzLnRvcCA8PSB5ICYmIHkgPD0gdGhpcy5ib3R0b207XG59O1xuZXhwb3J0IGNsYXNzIFBvc2l0aW9uTW9ub21lckluZm8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5ib3VuZHMgPSBuZXcgREcuUmVjdCgwLCAwLCAwLCAwKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUG9zaXRpb25JbmZvIHtcbiAgICAvKiogZnJlcSA9IHt9LCByb3dDb3VudCA9IDBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHBvc2l0aW9uICgnMTExQScsICcxMTEuMScsIGV0YylcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZnJlcSA9IHt9O1xuICAgICAgICB0aGlzLnJvd0NvdW50ID0gMDtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgV2ViTG9nbyBleHRlbmRzIERHLkpzVmlld2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy52aWV3ZXJJZCA9IC0xO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIC8vIHByaXZhdGUgcmVhZG9ubHkgY29sb3JTY2hlbWU6IENvbG9yU2NoZW1lID0gQ29sb3JTY2hlbWVzW051Y2xlb3RpZGVzV2ViTG9nby5yZXNpZHVlc1NldF07XG4gICAgICAgIHRoaXMuY3AgPSBudWxsO1xuICAgICAgICB0aGlzLmF4aXNIZWlnaHQgPSAxMjtcbiAgICAgICAgdGhpcy5zZXFDb2wgPSBudWxsO1xuICAgICAgICAvLyBwcml2YXRlIG1heExlbmd0aDogbnVtYmVyID0gMTAwO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnJvd3NNYXNrZWQgPSAwO1xuICAgICAgICB0aGlzLnJvd3NOdWxsID0gMDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzID0gW107XG4gICAgICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IC0xO1xuICAgICAgICB0aGlzLmVuZFBvc2l0aW9uID0gLTE7XG4gICAgICAgIHRoaXMudmlld1N1YnMgPSBbXTtcbiAgICAgICAgdGhpcy52aWV3ZXJJZCA9IFdlYkxvZ28udmlld2VyQ291bnQ7XG4gICAgICAgIFdlYkxvZ28udmlld2VyQ291bnQgKz0gMTtcbiAgICAgICAgdGhpcy50ZXh0QmFzZWxpbmUgPSAndG9wJztcbiAgICAgICAgdGhpcy5fcG9zaXRpb25XaWR0aCA9IHRoaXMucG9zaXRpb25XaWR0aCA9IHRoaXMuZmxvYXQoJ3Bvc2l0aW9uV2lkdGgnLCAxNiAvKixcbiAgICAgICAgICB7ZWRpdG9yOiAnc2xpZGVyJywgbWluOiA0LCBtYXg6IDY0LCBwb3N0Zml4OiAncHgnfSovKTtcbiAgICAgICAgdGhpcy5taW5IZWlnaHQgPSB0aGlzLmZsb2F0KCdtaW5IZWlnaHQnLCA1MCAvKixcbiAgICAgICAgICB7ZWRpdG9yOiAnc2xpZGVyJywgbWluOiAyNSwgbWF4OiAyNTAsIHBvc3RmaXg6ICdweCd9Ki8pO1xuICAgICAgICB0aGlzLm1heEhlaWdodCA9IHRoaXMuZmxvYXQoJ21heEhlaWdodCcsIDEwMCAvKixcbiAgICAgICAgICB7ZWRpdG9yOiAnc2xpZGVyJywgbWluOiAyNSwgbWF4OiA1MDAsIHBvc3RmaXg6ICdweCd9Ki8pO1xuICAgICAgICB0aGlzLmNvbnNpZGVyTnVsbFNlcXVlbmNlcyA9IHRoaXMuYm9vbCgnY29uc2lkZXJOdWxsU2VxdWVuY2VzJywgZmFsc2UpO1xuICAgICAgICB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSA9IHRoaXMuc3RyaW5nKCdzZXF1ZW5jZUNvbHVtbk5hbWUnLCBudWxsKTtcbiAgICAgICAgdGhpcy5zdGFydFBvc2l0aW9uTmFtZSA9IHRoaXMuc3RyaW5nKCdzdGFydFBvc2l0aW9uTmFtZScsIG51bGwpO1xuICAgICAgICB0aGlzLmVuZFBvc2l0aW9uTmFtZSA9IHRoaXMuc3RyaW5nKCdlbmRQb3NpdGlvbk5hbWUnLCBudWxsKTtcbiAgICAgICAgdGhpcy5maXhXaWR0aCA9IHRoaXMuYm9vbCgnZml4V2lkdGgnLCBmYWxzZSk7XG4gICAgICAgIHRoaXMudmVydGljYWxBbGlnbm1lbnQgPSB0aGlzLnN0cmluZygndmVydGljYWxBbGlnbm1lbnQnLCAnbWlkZGxlJywgeyBjaG9pY2VzOiBbJ3RvcCcsICdtaWRkbGUnLCAnYm90dG9tJ10gfSk7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbEFsaWdubWVudCA9IHRoaXMuc3RyaW5nKCdob3Jpem9udGFsQWxpZ25tZW50JywgJ2NlbnRlcicsIHsgY2hvaWNlczogWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCddIH0pO1xuICAgICAgICB0aGlzLmZpdEFyZWEgPSB0aGlzLmJvb2woJ2ZpdEFyZWEnLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zaHJpbmtFbXB0eVRhaWwgPSB0aGlzLmJvb2woJ3Nocmlua0VtcHR5VGFpbCcsIHRydWUpO1xuICAgIH1cbiAgICAvKiogRm9yIHN0YXJ0UG9zaXRpb24gZXF1YWxzIHRvIGVuZFBvc2l0aW9uIExlbmd0aCBpcyAxICovXG4gICAgZ2V0IExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRQb3NpdGlvbiA8PSB0aGlzLmVuZFBvc2l0aW9uID8gdGhpcy5lbmRQb3NpdGlvbiAtIHRoaXMuc3RhcnRQb3NpdGlvbiArIDEgOiAwO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdXZWJMb2dvIHNlY29uZCBpbml0aWFsaXphdGlvbiEnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGVscFVybCA9ICcvaGVscC92aXN1YWxpemUvdmlld2Vycy93ZWItbG9nby5tZCc7XG4gICAgICAgICAgICB0aGlzLm1zZ0hvc3QgPSB1aS5kaXYoJ05vIG1lc3NhZ2UnKTtcbiAgICAgICAgICAgIHRoaXMubXNnSG9zdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSB1aS5jYW52YXMoKTtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgICAgICAgdGhpcy5ob3N0ID0gdWkuZGl2KFt0aGlzLm1zZ0hvc3QsIHRoaXMuY2FudmFzXSk7XG4gICAgICAgICAgICAvLyB0aGlzLnNsaWRlciA9IHVpLnJhbmdlU2xpZGVyKDAsIDIwLCAyLCA1KTtcbiAgICAgICAgICAgIC8vIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICAgICAgICAvLyB0aGlzLnNsaWRlci5yb290LnN0eWxlLmhlaWdodCA9ICcxMnB4JztcbiAgICAgICAgICAgIGNvbnN0IGdldE1vbm9tZXIgPSAocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGpQb3MgPSBNYXRoLmZsb29yKHAueCAvIHRoaXMuX3Bvc2l0aW9uV2lkdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbnNbalBvc107XG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09PSB2b2lkIDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbalBvcywgbnVsbCwgbnVsbF07XG4gICAgICAgICAgICAgICAgY29uc3QgbW9ub21lciA9IE9iamVjdC5rZXlzKHBvc2l0aW9uLmZyZXEpXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKChtKSA9PiBwb3NpdGlvbi5mcmVxW21dLmJvdW5kcy5jb250YWlucyhwLngsIHAueSkpO1xuICAgICAgICAgICAgICAgIGlmIChtb25vbWVyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbalBvcywgbnVsbCwgbnVsbF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtqUG9zLCBtb25vbWVyLCBwb3NpdGlvbi5mcmVxW21vbm9tZXJdXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyB0aGlzLnN1YnMucHVzaChyeGpzLmZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ21vdXNlb3ZlcicpLnN1YnNjcmliZSgoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gfSkpO1xuICAgICAgICAgICAgdGhpcy52aWV3U3Vicy5wdXNoKHJ4anMuZnJvbUV2ZW50KHRoaXMuY2FudmFzLCAnbW91c2Vtb3ZlJykuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNhbnZhcylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIodGhpcy5jYW52YXMuZ2V0Q3Vyc29yUG9zaXRpb24oYXJncykpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFGcmFtZSAmJiB0aGlzLnNlcUNvbCAmJiBtb25vbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLnRvb2x0aXAuc2hvd1Jvd0dyb3VwKHRoaXMuZGF0YUZyYW1lLCAoaVJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VxID0gdGhpcy5zZXFDb2wuZ2V0KGlSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VxTSA9IHNlcSA/IFdlYkxvZ28uc3BsaXRTZXFUb01vbm9tZXJzKHNlcSlbdGhpcy5zdGFydFBvc2l0aW9uICsgalBvc10gOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcU0gPT09IG1vbm9tZXIgJiYgdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldChpUm93KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgYXJncy54ICsgMTYsIGFyZ3MueSArIDE2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLnRvb2x0aXAuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMudmlld1N1YnMucHVzaChyeGpzLmZyb21FdmVudCh0aGlzLmNhbnZhcywgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgZS5idXR0b24gIT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIodGhpcy5jYW52YXMuZ2V0Q3Vyc29yUG9zaXRpb24oYXJncykpO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnRzIGRlc2VsZWN0IGFsbCByb3dzIGlmIHdlIG1pc3MgbW9ub21lciBib3VuZHNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgbW9ub21lcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uaW5pdCgoaVJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VxID0gdGhpcy5zZXFDb2wuZ2V0KGlSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VxTSA9IHNlcSA/IFdlYkxvZ28uc3BsaXRTZXFUb01vbm9tZXJzKHNlcSlbdGhpcy5zdGFydFBvc2l0aW9uICsgalBvc10gOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcU0gPT09IG1vbm9tZXIgJiYgdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldChpUm93KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdGhpcy52aWV3U3Vicy5wdXNoKHVpLm9uU2l6ZUNoYW5nZWQodGhpcy5yb290KS5zdWJzY3JpYmUodGhpcy5yb290T25TaXplQ2hhbmdlZC5iaW5kKHRoaXMpKSk7XG4gICAgICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKHRoaXMuaG9zdCk7XG4gICAgICAgICAgICAvLyB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5zbGlkZXIucm9vdCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJvb3RPblNpemVDaGFuZ2VkKGFyZ3MpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoYFdlYkxvZ28ub25Sb290U2l6ZUNoYW5nZWQoKSBgICtcbiAgICAgICAgLy8gICBgcm9vdC53aWR0aD0ke3RoaXMucm9vdC5jbGllbnRXaWR0aH0sIHJvb3QuaGVpZ2h0PSR7dGhpcy5yb290LmNsaWVudEhlaWdodH0sIGAgK1xuICAgICAgICAvLyAgIGBjYW52YXMud2lkdGg9JHt0aGlzLmNhbnZhcy53aWR0aH0sIGNhbnZhcy5oZWlnaHQ9JHt0aGlzLmNhbnZhcy5oZWlnaHR9IC5gKTtcbiAgICB9XG4gICAgLyoqIEFzc2lnbnMge0BsaW5rIHNlcUNvbH0gYW5kIHtAbGluayBjcH0gYmFzZWQgb24ge0BsaW5rIHNlcXVlbmNlQ29sdW1uTmFtZX0gYW5kIGNhbGxzIHtAbGluayByZW5kZXJ9KCkuXG4gICAgICovXG4gICAgdXBkYXRlU2VxQ29sKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhRnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VxQ29sID0gdGhpcy5zZXF1ZW5jZUNvbHVtbk5hbWUgPyB0aGlzLmRhdGFGcmFtZS5jb2wodGhpcy5zZXF1ZW5jZUNvbHVtbk5hbWUpIDogbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcUNvbCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXFDb2wgPSB0aGlzLnBpY2tVcFNlcUNvbCh0aGlzLmRhdGFGcmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZUNvbHVtbk5hbWUgPSB0aGlzLnNlcUNvbCA/IHRoaXMuc2VxQ29sLm5hbWUgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2VxQ29sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNwID0gV2ViTG9nby5waWNrVXBQYWxldHRlKHRoaXMuc2VxQ29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25OYW1lcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IC0xO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kUG9zaXRpb24gPSAtMTtcbiAgICAgICAgICAgICAgICB0aGlzLmNwID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgICB1cGRhdGVQb3NpdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5zZXFDb2wpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBjYXRlZ29yaWVzO1xuICAgICAgICBpZiAodGhpcy5zaHJpbmtFbXB0eVRhaWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSB0aGlzLmRhdGFGcmFtZS5maWx0ZXIuZ2V0U2VsZWN0ZWRJbmRleGVzKCk7XG4gICAgICAgICAgICBjYXRlZ29yaWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KEFycmF5LmZyb20oQXJyYXkoaW5kaWNlcy5sZW5ndGgpLmtleXMoKSkubWFwKChpKSA9PiB0aGlzLnNlcUNvbC5nZXQoaW5kaWNlc1tpXSkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYXRlZ29yaWVzID0gdGhpcy5zZXFDb2wuY2F0ZWdvcmllcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhMZW5ndGggPSBjYXRlZ29yaWVzLmxlbmd0aCA+IDAgPyBNYXRoLm1heCguLi5jYXRlZ29yaWVzLm1hcCgocykgPT4gcyAhPT0gbnVsbCA/IFdlYkxvZ28uc3BsaXRTZXFUb01vbm9tZXJzKHMpLmxlbmd0aCA6IDApKSA6IDA7XG4gICAgICAgIC8vIEdldCBwb3NpdGlvbiBuYW1lcyBmcm9tIGRhdGEgY29sdW1uIHRhZyAncG9zaXRpb25OYW1lcydcbiAgICAgICAgY29uc3QgcG9zaXRpb25OYW1lc1R4dCA9IHRoaXMuc2VxQ29sLmdldFRhZygncG9zaXRpb25OYW1lcycpO1xuICAgICAgICAvLyBGYWxsYmFjayBpZiAncG9zaXRpb25OYW1lcycgdGFnIGlzIG5vdCBwcm92aWRlZFxuICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBwb3NpdGlvbk5hbWVzVHh0ID8gcG9zaXRpb25OYW1lc1R4dC5zcGxpdCgnLCAnKS5tYXAoKG4pID0+IG4udHJpbSgpKSA6XG4gICAgICAgICAgICBbLi4uQXJyYXkobWF4TGVuZ3RoKS5rZXlzKCldLm1hcCgoalBvcykgPT4gYCR7alBvcyArIDF9YCk7XG4gICAgICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9ICh0aGlzLnN0YXJ0UG9zaXRpb25OYW1lICYmIHRoaXMucG9zaXRpb25OYW1lcyAmJlxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzLmluY2x1ZGVzKHRoaXMuc3RhcnRQb3NpdGlvbk5hbWUpKSA/XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5kZXhPZih0aGlzLnN0YXJ0UG9zaXRpb25OYW1lKSA6IDA7XG4gICAgICAgIHRoaXMuZW5kUG9zaXRpb24gPSAodGhpcy5lbmRQb3NpdGlvbk5hbWUgJiYgdGhpcy5wb3NpdGlvbk5hbWVzICYmXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5jbHVkZXModGhpcy5lbmRQb3NpdGlvbk5hbWUpKSA/XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5kZXhPZih0aGlzLmVuZFBvc2l0aW9uTmFtZSkgOiAobWF4TGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIG9uUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5KSB7XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoYFdlYkxvZ28ub25Qcm9wZXJ0eUNoYW5nZWQoICR7cHJvcGVydHkubmFtZX0gPSAnJyB9KWApO1xuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eSk7XG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkubmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnY29uc2lkZXJOdWxsU2VxdWVuY2VzJzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlcXVlbmNlQ29sdW1uTmFtZSc6XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZXFDb2woKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0UG9zaXRpb25OYW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5kUG9zaXRpb25OYW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpb25XaWR0aCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25XaWR0aCA9IHRoaXMucG9zaXRpb25XaWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbkhlaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtYXhIZWlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZml4V2lkdGgnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmVydGljYWxBbGlnbm1lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9yaXpvbnRhbEFsaWdubWVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaXRBcmVhJzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nocmlua0VtcHR5VGFpbCc6XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblRhYmxlQXR0YWNoZWQoKSB7XG4gICAgICAgIGNvbnN0IF9zdXBlciA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xuICAgICAgICAgICAgb25UYWJsZUF0dGFjaGVkOiB7IGdldDogKCkgPT4gc3VwZXIub25UYWJsZUF0dGFjaGVkIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhRnJhbWVUeHQgPSB0aGlzLmRhdGFGcmFtZSA/ICdkYXRhJyA6ICdudWxsJztcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYGJpbzogV2ViTG9nbzwke3RoaXMudmlld2VySWR9Pi5vblRhYmxlQXR0YWNoZWQoIGRhdGFGcmFtZSA9ICR7ZGF0YUZyYW1lVHh0fSApIHN0YXJ0YCk7XG4gICAgICAgICAgICBfc3VwZXIub25UYWJsZUF0dGFjaGVkLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YUZyYW1lICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24ub25DaGFuZ2VkLnN1YnNjcmliZSgoXykgPT4gdGhpcy5yZW5kZXIoKSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuZGF0YUZyYW1lLmZpbHRlci5vbkNoYW5nZWQuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdGhpcy5pbml0KCk7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBiaW86IFdlYkxvZ288JHt0aGlzLnZpZXdlcklkfT4ub25UYWJsZUF0dGFjaGVkKCkgZW5kYCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZXRhY2goKSB7XG4gICAgICAgIGNvbnN0IF9zdXBlciA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xuICAgICAgICAgICAgZGV0YWNoOiB7IGdldDogKCkgPT4gc3VwZXIuZGV0YWNoIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhRnJhbWVUeHQgPSBgJHt0aGlzLmRhdGFGcmFtZSA/ICdkYXRhJyA6ICdudWxsJ31gO1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgYmlvOiBXZWJMb2dvPCR7dGhpcy52aWV3ZXJJZH0+Lm9uVGFibGVBdHRhY2hlZCggZGF0YUZyYW1lID0gJHtkYXRhRnJhbWVUeHR9ICkgc3RhcnRgKTtcbiAgICAgICAgICAgIF9zdXBlci5kZXRhY2guY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmlld1N1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICB0aGlzLmhvc3QucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMubXNnSG9zdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaG9zdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYGJpbzogV2ViTG9nbzwke3RoaXMudmlld2VySWR9Pi5vblRhYmxlQXR0YWNoZWQoKSBlbmRgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9udWxsU2VxdWVuY2UoZmlsbGVyUmVzaWR1ZSA9ICdYJykge1xuICAgICAgICBpZiAodGhpcy5jb25zaWRlck51bGxTZXF1ZW5jZXMpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5KHRoaXMuTGVuZ3RoKS5maWxsKGZpbGxlclJlc2lkdWUpLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIF9jYWxjdWxhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgIXRoaXMuaG9zdCB8fCAhdGhpcy5zZXFDb2wgfHwgIXRoaXMuZGF0YUZyYW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNhbGNTaXplKCk7XG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEFycmF5KHRoaXMuTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NOYW1lID0gdGhpcy5wb3NpdGlvbk5hbWVzW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10gPSBuZXcgUG9zaXRpb25JbmZvKHBvc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDIwMjItMDUtMDUgYXNrYWxraW4gaW5zdHJ1Y3RlZCB0byBzaG93IFdlYkxvZ28gYmFzZWQgb24gZmlsdGVyIChub3Qgc2VsZWN0aW9uKVxuICAgICAgICBjb25zdCBpbmRpY2VzID0gdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldFNlbGVjdGVkSW5kZXhlcygpO1xuICAgICAgICAvLyBjb25zdCBpbmRpY2VzID0gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnRydWVDb3VudCA+IDAgPyB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRJbmRleGVzKCkgOlxuICAgICAgICAvLyAgIHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAgICAgdGhpcy5yb3dzTWFza2VkID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucm93c051bGwgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaW5kaWNlcykge1xuICAgICAgICAgICAgbGV0IHMgPSAodGhpcy5zZXFDb2wuZ2V0KGkpKTtcbiAgICAgICAgICAgIGlmICghcykge1xuICAgICAgICAgICAgICAgIHMgPSB0aGlzLl9udWxsU2VxdWVuY2UoKTtcbiAgICAgICAgICAgICAgICArK3RoaXMucm93c051bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzZXFNID0gV2ViTG9nby5zcGxpdFNlcVRvTW9ub21lcnMocyk7XG4gICAgICAgICAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwbUluZm8gPSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxO1xuICAgICAgICAgICAgICAgIGNvbnN0IG0gPSBzZXFNW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdIHx8ICctJztcbiAgICAgICAgICAgICAgICBpZiAoIShtIGluIHBtSW5mbykpXG4gICAgICAgICAgICAgICAgICAgIHBtSW5mb1ttXSA9IG5ldyBQb3NpdGlvbk1vbm9tZXJJbmZvKCk7XG4gICAgICAgICAgICAgICAgcG1JbmZvW21dLmNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8jcmVnaW9uIFBvbGlzaCBmcmVxIGNvdW50c1xuICAgICAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxWyctJ107XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tqUG9zXS5yb3dDb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcSlcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tqUG9zXS5yb3dDb3VudCArPSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxW21dLmNvdW50O1xuICAgICAgICB9XG4gICAgICAgIC8vI2VuZHJlZ2lvblxuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLSB0aGlzLmF4aXNIZWlnaHQ7XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoYFdlYkxvZ288JHt0aGlzLnZpZXdlcklkfT4uX2NhbGN1bGF0ZSgpIG1heEhlaWdodD0ke21heEhlaWdodH0uYCk7XG4gICAgICAgIC8vI3JlZ2lvbiBDYWxjdWxhdGUgc2NyZWVuXG4gICAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICAgICAgY29uc3QgZnJlcSA9IHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXE7XG4gICAgICAgICAgICBjb25zdCByb3dDb3VudCA9IHRoaXMucG9zaXRpb25zW2pQb3NdLnJvd0NvdW50O1xuICAgICAgICAgICAgbGV0IHkgPSB0aGlzLmF4aXNIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoZnJlcSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhWzBdICE9PSAnLScgJiYgYlswXSAhPT0gJy0nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYlsxXS5jb3VudCAtIGFbMV0uY291bnQ7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYVswXSA9PT0gJy0nICYmIGJbMF0gPT09ICctJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYVswXSA9PT0gJy0nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgZWxzZSAvKiAoYlswXSA9PT0gJy0nKSAqL1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKzE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBtSW5mbyA9IGVudHJ5WzFdO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IG06IHN0cmluZyA9IGVudHJ5WzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGggPSBtYXhIZWlnaHQgKiBwbUluZm8uY291bnQgLyByb3dDb3VudDtcbiAgICAgICAgICAgICAgICBwbUluZm8uYm91bmRzID0gbmV3IERHLlJlY3QoalBvcyAqIHRoaXMuX3Bvc2l0aW9uV2lkdGgsIHksIHRoaXMuX3Bvc2l0aW9uV2lkdGgsIGgpO1xuICAgICAgICAgICAgICAgIHkgKz0gaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyNlbmRyZWdpb25cbiAgICB9XG4gICAgLy8gcmVmbGVjdCBjaGFuZ2VzIG1hZGUgdG8gZmlsdGVyL3NlbGVjdGlvblxuICAgIHJlbmRlcihyZWNhbGMgPSB0cnVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRoaXMubXNnSG9zdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VxQ29sICYmICF0aGlzLmNwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tc2dIb3N0LmlubmVyVGV4dCA9IGBVbmtub3duIHBhbGV0dGUgKGNvbHVtbiBzZW1UeXBlOiAnJHt0aGlzLnNlcUNvbC5zZW1UeXBlfScpLmA7XG4gICAgICAgICAgICAgICAgdGhpcy5tc2dIb3N0LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubXNnSG9zdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgIXRoaXMuc2VxQ29sIHx8ICF0aGlzLmRhdGFGcmFtZSB8fCAhdGhpcy5jcClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZyA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGlmICghZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHJlY2FsYylcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZSgpO1xuICAgICAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgICAgIGcuZmlsbFN0eWxlID0gJ3doaXRlJztcbiAgICAgICAgZy5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgZy50ZXh0QmFzZWxpbmUgPSB0aGlzLnRleHRCYXNlbGluZTtcbiAgICAgICAgLy8gUHJldmVudHMgZGl2aXNpb24gYnkgemVybyBvbiBMZW5ndGggPSAwXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IC0xIHx8IHRoaXMuZW5kUG9zaXRpb24gPT09IC0xKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyNyZWdpb24gUGxvdCBwb3NpdGlvbk5hbWVzXG4gICAgICAgIGcucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICAgICAgZy5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICBnLnRleHRBbGlnbiA9ICdjZW50ZXInO1xuICAgICAgICBnLmZvbnQgPSAnMTBweCBSb2JvdG8sIFJvYm90byBMb2NhbCwgc2Fucy1zZXJpZic7XG4gICAgICAgIGNvbnN0IHBvc05hbWVNYXhXaWR0aCA9IE1hdGgubWF4KC4uLnRoaXMucG9zaXRpb25zLm1hcCgocG9zKSA9PiBnLm1lYXN1cmVUZXh0KHBvcy5uYW1lKS53aWR0aCkpO1xuICAgICAgICBjb25zdCBoU2NhbGUgPSBwb3NOYW1lTWF4V2lkdGggPCAodGhpcy5fcG9zaXRpb25XaWR0aCAtIDIpID8gMSA6ICh0aGlzLl9wb3NpdGlvbldpZHRoIC0gMikgLyBwb3NOYW1lTWF4V2lkdGg7XG4gICAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5wb3NpdGlvbnNbalBvc107XG4gICAgICAgICAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgICAgICAgICBnLnNldFRyYW5zZm9ybShoU2NhbGUsIDAsIDAsIDEsIGpQb3MgKiB0aGlzLl9wb3NpdGlvbldpZHRoICsgdGhpcy5fcG9zaXRpb25XaWR0aCAvIDIsIDApO1xuICAgICAgICAgICAgZy5maWxsVGV4dChwb3MubmFtZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8jZW5kcmVnaW9uIFBsb3QgcG9zaXRpb25OYW1lc1xuICAgICAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW21vbm9tZXIsIHBtSW5mb10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcSkpIHtcbiAgICAgICAgICAgICAgICBpZiAobW9ub21lciAhPT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBwbUluZm8uYm91bmRzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb250U3R5bGUgPSAnMTZweCBSb2JvdG8sIFJvYm90byBMb2NhbCwgc2Fucy1zZXJpZic7XG4gICAgICAgICAgICAgICAgICAgIC8vIEhhY2tzIHRvIHNjYWxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIHRvIHRhcmdldCByZWN0YW5nbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBwZXJjYXNlTGV0dGVyQXNjZW50ID0gMC4yNTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBwZXJjYXNlTGV0dGVySGVpZ2h0ID0gMTIuMjtcbiAgICAgICAgICAgICAgICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICBnLnN0cm9rZVN0eWxlID0gJ2xpZ2h0Z3JheSc7XG4gICAgICAgICAgICAgICAgICAgIGcubGluZVdpZHRoID0gMTtcbiAgICAgICAgICAgICAgICAgICAgZy5yZWN0KGIubGVmdCwgYi50b3AsIGIud2lkdGgsIGIuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgZy5maWxsU3R5bGUgPSAoX2EgPSB0aGlzLmNwLmdldChtb25vbWVyKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5jcC5nZXQoJ290aGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIGcudGV4dEFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgICAgICAgICAgICBnLmZvbnQgPSBmb250U3R5bGU7XG4gICAgICAgICAgICAgICAgICAgIC8vZy5maWxsUmVjdChiLmxlZnQsIGIudG9wLCBiLndpZHRoLCBiLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1UbSA9IGcubWVhc3VyZVRleHQobW9ub21lcik7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChtTS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudCAhPSAwKVxuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUuZGVidWcoYG06ICR7bX0sIG1NLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50OiAke21NLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50fWApO1xuICAgICAgICAgICAgICAgICAgICBnLnNldFRyYW5zZm9ybShiLndpZHRoIC8gbVRtLndpZHRoLCAwLCAwLCBiLmhlaWdodCAvIHVwcGVyY2FzZUxldHRlckhlaWdodCwgYi5sZWZ0LCBiLnRvcCk7XG4gICAgICAgICAgICAgICAgICAgIGcuZmlsbFRleHQobW9ub21lciwgMCwgLXVwcGVyY2FzZUxldHRlckFzY2VudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhbGNTaXplKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FudmFzIHx8ICF0aGlzLmhvc3QpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMuTGVuZ3RoICogdGhpcy5wb3NpdGlvbldpZHRoO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gTWF0aC5taW4odGhpcy5tYXhIZWlnaHQsIE1hdGgubWF4KHRoaXMubWluSGVpZ2h0LCB0aGlzLnJvb3QuY2xpZW50SGVpZ2h0KSk7XG4gICAgICAgIGlmICh0aGlzLmZpdEFyZWEpIHtcbiAgICAgICAgICAgIGNvbnN0IHhTY2FsZSA9IHRoaXMucm9vdC5jbGllbnRIZWlnaHQgLyBoZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCB5U2NhbGUgPSB0aGlzLnJvb3QuY2xpZW50V2lkdGggLyB3aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oeFNjYWxlLCB5U2NhbGUpKTtcbiAgICAgICAgICAgIHdpZHRoID0gd2lkdGggKiBzY2FsZTtcbiAgICAgICAgICAgIGhlaWdodCA9IGhlaWdodCAqIHNjYWxlO1xuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25XaWR0aCA9IHRoaXMucG9zaXRpb25XaWR0aCAqIHNjYWxlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgICAgICAvLyBjb25zdCBjYW52YXNIZWlnaHQ6IG51bWJlciA9IHdpZHRoID4gdGhpcy5yb290LmNsaWVudFdpZHRoID8gaGVpZ2h0IC0gOCA6IGhlaWdodDtcbiAgICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLCBgJHtoZWlnaHR9cHhgKTtcbiAgICAgICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gdGhpcy5ob3N0LmNsaWVudEhlaWdodDtcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7Y2FudmFzSGVpZ2h0fXB4YCk7XG4gICAgICAgIC8vIEFkanVzdCBob3N0IGFuZCByb290IHdpZHRoXG4gICAgICAgIGlmICh0aGlzLmZpeFdpZHRoKSB7XG4gICAgICAgICAgICAvLyBmdWxsIHdpZHRoIGZvciBjYW52YXMgaG9zdCBhbmQgcm9vdFxuICAgICAgICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgICAgICAgICAgdGhpcy5yb290LnN0eWxlLmhlaWdodCAvKj0gdGhpcy5ob3N0LnN0eWxlLmhlaWdodCovID0gYCR7aGVpZ2h0fXB4YDtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCAnaGlkZGVuJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gYWxsb3cgc2Nyb2xsIGNhbnZhcyBpbiByb290XG4gICAgICAgICAgICB0aGlzLnJvb3Quc3R5bGUud2lkdGggPSB0aGlzLmhvc3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUub3ZlcmZsb3dYID0gJ2F1dG8haW1wb3J0YW50JztcbiAgICAgICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgndGV4dC1hbGlnbicsIHRoaXMuaG9yaXpvbnRhbEFsaWdubWVudCk7XG4gICAgICAgICAgICAvLyB2ZXJ0aWNhbCBhbGlnbm1lbnRcbiAgICAgICAgICAgIGxldCBob3N0VG9wTWFyZ2luID0gMDtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy52ZXJ0aWNhbEFsaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICAgICAgICAgIGhvc3RUb3BNYXJnaW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgICAgICAgICBob3N0VG9wTWFyZ2luID0gTWF0aC5tYXgoMCwgKHRoaXMucm9vdC5jbGllbnRIZWlnaHQgLSBoZWlnaHQpIC8gMik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICAgICAgICAgIGhvc3RUb3BNYXJnaW4gPSBNYXRoLm1heCgwLCB0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IC0gaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ21hcmdpbi10b3AnLCBgJHtob3N0VG9wTWFyZ2lufXB4YCwgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMucm9vdC5jbGllbnRIZWlnaHQgPCBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsIGAke3RoaXMucm9vdC5jbGllbnRIZWlnaHR9cHhgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93LXknLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgLy8gICBgdGhpcy5yb290LnN0eWxlLmhlaWdodCA9ICR7dGhpcy5yb290LnN0eWxlLmhlaWdodH1cXG5gICtcbiAgICAgICAgLy8gICBgdGhpcy5yb290LmNsaWVudEhlaWdodCA9ICR7dGhpcy5yb290LmNsaWVudEhlaWdodH1cXG5gICtcbiAgICAgICAgLy8gICBgdGhpcy5ob3N0LnN0eWxlLmhlaWdodCA9ICR7dGhpcy5ob3N0LnN0eWxlLmhlaWdodH1cXG5gICtcbiAgICAgICAgLy8gICBgdGhpcy5ob3N0LmNsaWVudEhlaWdodCA9ICR7dGhpcy5ob3N0LmNsaWVudEhlaWdodH1cXG5gICtcbiAgICAgICAgLy8gICAnXFxuJyArXG4gICAgICAgIC8vICAgYHRoaXMuY2FudmFzLmhlaWdodCAgICAgICA9ICR7dGhpcy5jYW52YXMuaGVpZ2h0fVxcbmAgK1xuICAgICAgICAvLyAgIGB0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSAke3RoaXMuY2FudmFzLnN0eWxlLmhlaWdodH1gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtERy5Db2x1bW59IHNlcUNvbCBDb2x1bW4gdG8gbG9vayBmb3IgYSBwYWxldHRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9ICBtaW5MZW5ndGggbWluaW11bSBsZW5ndGggb2Ygc2VxdWVuY2UgdG8gZGV0ZWN0IHBhbGV0dGUgKGVtcHR5IHN0cmluZ3MgYXJlIGFsbG93ZWQpXG4gICAgICogQHJldHVybiB7U2VxUGFsZXR0ZX0gUGFsZXR0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbHBoYWJldCBvZiB0aGUgc2VxdWVuY2VzIGluIHRoZSBjb2x1bW5cbiAgICAgKi9cbiAgICBzdGF0aWMgcGlja1VwUGFsZXR0ZShzZXFDb2wsIG1pbkxlbmd0aCA9IDUpIHtcbiAgICAgICAgbGV0IHJlcyA9IG51bGw7XG4gICAgICAgIHN3aXRjaCAoc2VxQ29sLnNlbVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQW1pbm9hY2lkcy5TZW1UeXBlTXVsdGlwbGVBbGlnbm1lbnQ6XG4gICAgICAgICAgICAgICAgcmVzID0gQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE51Y2xlb3RpZGVzLlNlbVR5cGVNdWx0aXBsZUFsaWdubWVudDpcbiAgICAgICAgICAgICAgICByZXMgPSBOdWNsZW90aWRlc1BhbGV0dGVzLkNocm9tYXRvZ3JhbTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbHBoYWJldEZyZXFzID0gV2ViTG9nby5nZXRBbHBoYWJldEZyZXFzKHNlcUNvbCwgbWluTGVuZ3RoKTtcbiAgICAgICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzID0gW1xuICAgICAgICAgICAgW25ldyBTZXQoT2JqZWN0LmtleXMoTnVjbGVvdGlkZXMuTmFtZXMpKSwgTnVjbGVvdGlkZXNQYWxldHRlcy5DaHJvbWF0b2dyYW1dLFxuICAgICAgICAgICAgW25ldyBTZXQoT2JqZWN0LmtleXMoQW1pbm9hY2lkcy5OYW1lcykpLCBBbWlub2FjaWRzUGFsZXR0ZXMuR3Jva0dyb3Vwc10sXG4gICAgICAgIF07XG4gICAgICAgIC8vIENhbGN1bGF0ZSBsaWtlbGlob29kcyBmb3IgYWxwaGFiZXRfY2FuZGlkYXRlc1xuICAgICAgICBjb25zdCBhbHBoYWJldENhbmRpZGF0ZXNTaW0gPSBhbHBoYWJldENhbmRpZGF0ZXMubWFwKChjKSA9PiBXZWJMb2dvLmdldEFscGhhYmV0U2ltaWxhcml0eShhbHBoYWJldEZyZXFzLCBjWzBdKSk7XG4gICAgICAgIGNvbnN0IG1heENvcyA9IE1hdGgubWF4KC4uLmFscGhhYmV0Q2FuZGlkYXRlc1NpbSk7XG4gICAgICAgIGlmIChtYXhDb3MgPiAwLjY1KVxuICAgICAgICAgICAgcmVzID0gYWxwaGFiZXRDYW5kaWRhdGVzW2FscGhhYmV0Q2FuZGlkYXRlc1NpbS5pbmRleE9mKG1heENvcyldWzFdO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXMgPSBVbmtub3duU2VxUGFsZXR0ZXMuQ29sb3I7XG4gICAgICAgIC8vIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgLy8gICAvLyBUaGUgYWxwaGFiZXQgb2YgbnVjbGVvdGlkZXMgaXMgYSBzbWFsbGVyIHNldCwgc28gd2UgY2hlY2sgaXQgZmlyc3QuXG4gICAgICAgIC8vICAgY29uc3QgYWxwaGFiZXQgPSB7Li4uTnVjbGVvdGlkZXMuTmFtZXMsIC4uLnsnLSc6ICdnYXAnfX07XG4gICAgICAgIC8vICAgcmVzID0gREcuRGV0ZWN0b3Iuc2FtcGxlQ2F0ZWdvcmllcyhzZXFDb2wsIChzZXEpID0+IHtcbiAgICAgICAgLy8gICAgIHJldHVybiAhc2VxIHx8IChzZXEubGVuZ3RoID4gbWluTGVuZ3RoICYmIHRoaXMuc3BsaXRTZXFUb01vbm9tZXJzKHNlcSkuZXZlcnkoKG4pID0+IG4gaW4gYWxwaGFiZXQpKTtcbiAgICAgICAgLy8gICB9LCAxKSA/IE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtIDogbnVsbDtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAocmVzID09PSBudWxsKSB7XG4gICAgICAgIC8vICAgLy8gQW5kIHRoZW4gY2hlY2sgZm9yIGFtaW5vIGFjaWQncyBhbHBoYWJldC5cbiAgICAgICAgLy8gICBjb25zdCBhbHBoYWJldCA9IHsuLi5BbWlub2FjaWRzLk5hbWVzLCAuLi57Jy0nOiAnZ2FwJ319O1xuICAgICAgICAvLyAgIHJlcyA9IERHLkRldGVjdG9yLnNhbXBsZUNhdGVnb3JpZXMoc2VxQ29sLCAoc2VxKSA9PiB7XG4gICAgICAgIC8vICAgICByZXR1cm4gIXNlcSB8fCAoc2VxLmxlbmd0aCA+IG1pbkxlbmd0aCAmJiB0aGlzLnNwbGl0U2VxVG9Nb25vbWVycyhzZXEpLmV2ZXJ5KChuKSA9PiBuIGluIGFscGhhYmV0KSk7XG4gICAgICAgIC8vICAgfSwgMSkgPyBBbWlub2FjaWRzUGFsZXR0ZXMuR3Jva0dyb3VwcyA6IG51bGw7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgICAgICAvLyAgIHJlcyA9IFVua25vd25TZXFQYWxldHRlcy5Db2xvcjtcbiAgICAgICAgLy8gfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0QWxwaGFiZXRGcmVxcyhzZXFDb2wsIG1pbkxlbmd0aCA9IDApIHtcbiAgICAgICAgY29uc3QgcmVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qgc2VxIG9mIHNlcUNvbC5jYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBtU2VxID0gV2ViTG9nby5zcGxpdFNlcVRvTW9ub21lcnMoc2VxKTtcbiAgICAgICAgICAgIGlmIChtU2VxLmxlbmd0aCA+IG1pbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBtU2VxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKG0gaW4gcmVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1ttXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHJlc1ttXSArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0QWxwaGFiZXRTaW1pbGFyaXR5KGZyZXEsIGFscGhhYmV0LCBnYXBTeW1ib2wgPSAnLScpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IG5ldyBTZXQoWy4uLm5ldyBTZXQoT2JqZWN0LmtleXMoZnJlcSkpLCAuLi5hbHBoYWJldF0pO1xuICAgICAgICBrZXlzLmRlbGV0ZShnYXBTeW1ib2wpO1xuICAgICAgICBjb25zdCBmcmVxQSA9IFtdO1xuICAgICAgICBjb25zdCBhbHBoYWJldEEgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIGtleXMpIHtcbiAgICAgICAgICAgIGZyZXFBLnB1c2gobSBpbiBmcmVxID8gZnJlcVttXSA6IDApO1xuICAgICAgICAgICAgYWxwaGFiZXRBLnB1c2goYWxwaGFiZXQuaGFzKG0pID8gMSA6IDApO1xuICAgICAgICB9XG4gICAgICAgIC8qIFRoZXJlIHdlcmUgYSBmZXcgaWRlYXM6IGNoaS1zcXVhcmVkLCBwZWFyc29uIGNvcnJlbGF0aW9uICh2YXJpYW5jZT8pLCBzY2FsYXIgcHJvZHVjdCAqL1xuICAgICAgICBjb25zdCBmcmVxViA9IG5ldyBWZWN0b3IoZnJlcUEpO1xuICAgICAgICBjb25zdCBhbHBoYWJldFYgPSBuZXcgVmVjdG9yKGFscGhhYmV0QSk7XG4gICAgICAgIGNvbnN0IGNvcyA9IHZlY3RvckRvdFByb2R1Y3QoZnJlcVYsIGFscGhhYmV0VikgLyAodmVjdG9yTGVuZ3RoKGZyZXFWKSAqIHZlY3Rvckxlbmd0aChhbHBoYWJldFYpKTtcbiAgICAgICAgcmV0dXJuIGNvcztcbiAgICB9XG4gICAgLyoqIEZpcnN0IHRyeSB0byBmaW5kIGNvbHVtbiB3aXRoIHNlbVR5cGUgJ2FsaWduZWRTZXF1ZW5jZScuXG4gICAgICogTmV4dCBsb29rIGZvciBjb2x1bW4gd2l0aCBkYXRhIGFscGhhYmV0IGNvcnJlc3BvbmRpbmcgdG8gYW55IG9mIHRoZSBrbm93biBwYWxldHRlcy5cbiAgICAgKiBAcGFyYW0ge0RHLkRhdGFGcmFtZX0gZGF0YUZyYW1lXG4gICAgICogQHJldHVybiB7REcuQ29sdW1ufSBUaGUgY29sdW1uIHdlIHdlcmUgbG9va2luZyBmb3Igb3IgbnVsbFxuICAgICAqL1xuICAgIHBpY2tVcFNlcUNvbChkYXRhRnJhbWUpIHtcbiAgICAgICAgbGV0IHJlcyA9IGRhdGFGcmFtZS5jb2x1bW5zLmJ5U2VtVHlwZSgnYWxpZ25lZFNlcXVlbmNlJyk7XG4gICAgICAgIGlmIChyZXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUZyYW1lLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZShjb2wsIDUpO1xuICAgICAgICAgICAgICAgIGlmIChjcCAhPT0gbnVsbCAmJiAhKGNwIGluc3RhbmNlb2YgVW5rbm93blNlcVBhbGV0dGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IGNvbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBzcGxpdFNlcVRvTW9ub21lcnMoc2VxKSB7XG4gICAgICAgIC8vIFRPRE86IFVzZSBzZXF1ZW5jZSBzZXBhcmF0b3JcbiAgICAgICAgY29uc3QgcmVzID0gd3Uoc2VxLnRvU3RyaW5nKCkubWF0Y2hBbGwoV2ViTG9nby5zcGxpdFJlKSkubWFwKChtYSkgPT4ge1xuICAgICAgICAgICAgbGV0IG1SZXM7XG4gICAgICAgICAgICBjb25zdCBtID0gbWFbMF07XG4gICAgICAgICAgICBpZiAobS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKG0gaW4gV2ViTG9nby5hYVN5bm9ueW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIG1SZXMgPSBXZWJMb2dvLmFhU3lub255bXNbbV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtUmVzID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYExvbmcgbW9ub21lciAnJHttfScgaGFzIG5vdCBhIHNob3J0IHN5bm9ueW0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbVJlcyA9IG07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbVJlcztcbiAgICAgICAgfSkudG9BcnJheSgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbldlYkxvZ28ucmVzaWR1ZXNTZXQgPSAnbnVjbGVvdGlkZXMnO1xuV2ViTG9nby52aWV3ZXJDb3VudCA9IC0xO1xuV2ViTG9nby5zcGxpdFJlID0gL1xcWyhcXHcrKVxcXXwoXFx3KXwoLSkvZztcbi8qKiBPbmx5IHNvbWUgb2YgdGhlIHN5bm9ueW1zLiBUaGVzZSB3ZXJlIG9idGFpbmVkIGZyb20gdGhlIGNsdXN0ZXJlZCBvbGlnb3BlcHRpZGUgZGF0YXNldC4gKi9cbldlYkxvZ28uYWFTeW5vbnltcyA9IHtcbiAgICAnW01lTmxlXSc6ICdMJyxcbiAgICAnW01lQV0nOiAnQScsXG4gICAgJ1tNZUddJzogJ0cnLFxuICAgICdbTWVGXSc6ICdGJyxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkMlZpTFd4dloyOHVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKM1pXSXRiRzluYnk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN1FVRkRRU3hQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1JETEU5QlFVOHNTMEZCU3l4RlFVRkZMRTFCUVUwc2FVSkJRV2xDTEVOQlFVTTdRVUZGZEVNc1QwRkJUeXhGUVVGRkxFMUJRVTBzU1VGQlNTeERRVUZETzBGQlEzQkNMRTlCUVU4c1MwRkJTeXhKUVVGSkxFMUJRVTBzVFVGQlRTeERRVUZETzBGQlJUZENMRTlCUVU4c1JVRkJReXhOUVVGTkxFVkJRVU1zVFVGQlRTeHBSRUZCYVVRc1EwRkJRenRCUVVOMlJTeFBRVUZQTEVWQlFVTXNXVUZCV1N4RlFVRkZMR2RDUVVGblFpeEZRVUZETEUxQlFVMHNhVVJCUVdsRUxFTkJRVU03UVVGREwwWXNUMEZCVHl4RlFVRkRMRlZCUVZVc1JVRkJSU3hyUWtGQmEwSXNSVUZCUXl4TlFVRk5MR1ZCUVdVc1EwRkJRenRCUVVNM1JDeFBRVUZQTEVWQlFVTXNWMEZCVnl4RlFVRkZMRzFDUVVGdFFpeEZRVUZETEUxQlFVMHNaMEpCUVdkQ0xFTkJRVU03UVVGRGFFVXNUMEZCVHl4RlFVRkRMR2xDUVVGcFFpeEZRVUZGTEd0Q1FVRnJRaXhGUVVGRExFMUJRVTBzV1VGQldTeERRVUZETzBGQmEwSnFSU3hwUWtGQmFVSXNRMEZCUXl4VFFVRlRMRU5CUVVNc2FVSkJRV2xDTEVkQlFVY3NWVUZCVXl4TFFVRnBRanRKUVVONFJTeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVWQlFVVXNRMEZCUXp0SlFVTXhReXhQUVVGUExFbEJRVWtzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZETTBVc1EwRkJReXhEUVVGRE8wRkJSVVlzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1VVRkJVU3hIUVVGSExGVkJRVk1zUTBGQlV5eEZRVUZGTEVOQlFWTTdTVUZEZUVRc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzU1VGQlNTeEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0QlFVTm9SaXhEUVVGRExFTkJRVU03UVVGRlJpeE5RVUZOTEU5QlFVOHNiVUpCUVcxQ08wbEJVemxDTzFGQlEwVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRFppeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU40UXl4RFFVRkRPME5CUTBZN1FVRkZSQ3hOUVVGTkxFOUJRVThzV1VGQldUdEpRVXQyUWpzN1QwRkZSenRKUVVOSUxGbEJRVmtzU1VGQldUdFJRVU4wUWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5xUWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU5tTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRM0JDTEVOQlFVTTdRMEZEUmp0QlFVVkVMRTFCUVUwc1QwRkJUeXhQUVVGUkxGTkJRVkVzUlVGQlJTeERRVUZETEZGQlFWRTdTVUZ4UkhSRE8xRkJRMFVzUzBGQlN5eEZRVUZGTEVOQlFVTTdVVUZzUkVZc1lVRkJVU3hIUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzUkNMR2RDUVVGWExFZEJRVmtzUzBGQlN5eERRVUZETzFGQlJYSkRMRFJHUVVFMFJqdFJRVU5zUml4UFFVRkZMRWRCUVhOQ0xFbEJRVWtzUTBGQlF6dFJRVkV2UWl4bFFVRlZMRWRCUVZjc1JVRkJSU3hEUVVGRE8xRkJSWGhDTEZkQlFVMHNSMEZCTmtJc1NVRkJTU3hEUVVGRE8xRkJRMmhFTEcxRFFVRnRRenRSUVVNelFpeGpRVUZUTEVkQlFXMUNMRVZCUVVVc1EwRkJRenRSUVVVdlFpeGxRVUZWTEVkQlFWY3NRMEZCUXl4RFFVRkRPMUZCUTNaQ0xHRkJRVkVzUjBGQlZ5eERRVUZETEVOQlFVTTdVVUZwUW5KQ0xHdENRVUZoTEVkQlFXRXNSVUZCUlN4RFFVRkRPMUZCUlRkQ0xHdENRVUZoTEVkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZNMElzWjBKQlFWY3NSMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVU5NlFpeGhRVUZSTEVkQlFXMUNMRVZCUVVVc1EwRkJRenRSUVV0d1F5eEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU03VVVGRGNFTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRmVrSXNTVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRk1VSXNTVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hGUVVGRkxFVkJRVVVzUTBGQlFUczRSRUZEYmtJc1EwRkJReXhEUVVGRE8xRkJRM2hFTEVsQlFVa3NRMEZCUXl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVWQlFVVXNSVUZCUlN4RFFVRkJPMmRGUVVOaExFTkJRVU1zUTBGQlF6dFJRVU14UkN4SlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RlFVRkZMRWRCUVVjc1EwRkJRVHRuUlVGRFdTeERRVUZETEVOQlFVTTdVVUZGTVVRc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zZFVKQlFYVkNMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGRrVXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc2IwSkJRVzlDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZiRVVzU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEYUVVc1NVRkJTU3hEUVVGRExHVkJRV1VzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUlRWRUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZGTjBNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zYlVKQlFXMUNMRVZCUVVVc1VVRkJVU3hGUVVOb1JTeEZRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hSUVVGUkxFVkJRVVVzVVVGQlVTeERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXpGRExFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEhGQ1FVRnhRaXhGUVVGRkxGRkJRVkVzUlVGRGNFVXNSVUZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVNeFF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUXpGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNMVJDeERRVUZETzBsQmNFTkVMREJFUVVFd1JEdEpRVU14UkN4SlFVRlpMRTFCUVUwN1VVRkRhRUlzVDBGQlR5eEpRVUZKTEVOQlFVTXNZVUZCWVN4SlFVRkpMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRExHRkJRV0VzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOb1J5eERRVUZETzBsQmJVTmhMRWxCUVVrN08xbEJRMmhDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSVHRuUWtGRGNFSXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhuUTBGQlowTXNRMEZCUXl4RFFVRkRPMmRDUVVOb1JDeFBRVUZQTzJGQlExSTdXVUZGUkN4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF6dFpRVU40UWl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExIRkRRVUZ4UXl4RFFVRkRPMWxCUlhKRUxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFpRVU53UXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMWxCUlhCRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xbEJRekZDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTTdXVUZGYWtNc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVWb1JDdzJRMEZCTmtNN1dVRkROME1zZVVOQlFYbERPMWxCUTNwRExEQkRRVUV3UXp0WlFVVXhReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFWY3NSVUZCZFVRc1JVRkJSVHRuUWtGRGRFWXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF6dG5Ra0ZEYmtRc1RVRkJUU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRmRFTXNTVUZCU1N4UlFVRlJMRXRCUVVzc1MwRkJTeXhEUVVGRE8yOUNRVU55UWl4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0blFrRkZOVUlzVFVGQlRTeFBRVUZQTEVkQlFYVkNMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXp0eFFrRkRNMFFzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZETTBRc1NVRkJTU3hQUVVGUExFdEJRVXNzVTBGQlV6dHZRa0ZEZGtJc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1owSkJSVFZDTEU5QlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1QwRkJUeXhGUVVGRkxGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOcVJDeERRVUZETEVOQlFVTTdXVUZIUml4eFIwRkJjVWM3V1VGRGNrY3NUMEZCVHp0WlFVVlFMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVdFc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGaExFVkJRVVVzUlVGQlJUdG5Ra0ZEYkVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTzI5Q1FVTmtMRTlCUVU4N1owSkJSVlFzVFVGQlRTeEpRVUZKTEVkQlFVY3NRMEZCWlN4RFFVRkRPMmRDUVVNM1FpeE5RVUZOTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTlCUVU4c1EwRkJReXhIUVVGSExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJSWGhGTEVsQlFVa3NTVUZCU1N4RFFVRkRMRk5CUVZNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEpRVUZKTEU5QlFVOHNSVUZCUlR0dlFrRkROVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkZPM2RDUVVNdlF5eE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0M1FrRkRia01zVFVGQlRTeEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzNkQ1FVTnlSaXhQUVVGUExFbEJRVWtzUzBGQlN5eFBRVUZQTEVsQlFVa3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMjlDUVVNM1JDeERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJRenRwUWtGRE9VSTdjVUpCUVUwN2IwSkJRMHdzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRwUWtGRGJrSTdXVUZEU0N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJSVW9zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQllTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRmRCUVZjc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFXRXNSVUZCUlN4RlFVRkZPMmRDUVVOc1J5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTTdiMEpCUXk5Q0xFOUJRVTg3WjBKQlJWUXNUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJaU3hEUVVGRE8yZENRVU0zUWl4TlFVRk5MRU5CUVVNc1NVRkJTU3hGUVVGRkxFOUJRVThzUTBGQlF5eEhRVUZITEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJYaEZMSFZFUVVGMVJEdG5Ra0ZEZGtRc1NVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1QwRkJUeXhGUVVGRk8yOUNRVU0xUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSVHQzUWtGRGNrTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN2QwSkJRMjVETEUxQlFVMHNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEd0Q1FVRnJRaXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRja1lzVDBGQlR5eEpRVUZKTEV0QlFVc3NUMEZCVHl4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenR2UWtGRE4wUXNRMEZCUXl4RFFVRkRMRU5CUVVNN2FVSkJRMG83V1VGRFNDeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUlVvc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlJUZEdMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVNMVFpd3lRMEZCTWtNN1dVRkZNME1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOd1FpeERRVUZETzB0QlFVRTdTVUZGVHl4cFFrRkJhVUlzUTBGQlF5eEpRVUZUTzFGQlEycERMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZGYkVJc2FVUkJRV2xFTzFGQlEycEVMSEZHUVVGeFJqdFJRVU55Uml4cFJrRkJhVVk3U1VGRGJrWXNRMEZCUXp0SlFVVkVPMDlCUTBjN1NVRkRTeXhaUVVGWk8xRkJRMnhDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSVHRaUVVOc1FpeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVNelJpeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1NVRkJTU3hGUVVGRk8yZENRVU4yUWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8yZENRVU5vUkN4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dGhRVU5xUlR0WlFVTkVMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJUdG5Ra0ZEWml4SlFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03WjBKQlEzWkNMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzVDBGQlR5eERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03WVVGRE9VTTdhVUpCUVUwN1owSkJRMHdzU1VGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4RlFVRkZMRU5CUVVNN1owSkJRM2hDTEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzaENMRWxCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTNSQ0xFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRPMkZCUTJoQ08xTkJRMFk3VVVGRFJDeEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1NVRkRhRUlzUTBGQlF6dEpRVVZQTEdWQlFXVTdVVUZEY2tJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTzFsQlEyUXNUMEZCVHp0UlFVVlVMRWxCUVVrc1ZVRkJPRUlzUTBGQlF6dFJRVU51UXl4SlFVRkpMRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVU3V1VGRGVFSXNUVUZCVFN4UFFVRlBMRWRCUVdVc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzUTBGQlF6dFpRVU4yUlN4VlFVRlZMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZETjBJc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNdlJqdGhRVUZOTzFsQlEwd3NWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETzFOQlEzSkRPMUZCUTBRc1RVRkJUU3hUUVVGVExFZEJRVWNzVlVGQlZTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVOc1JTeERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMR3RDUVVGclFpeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSWEpGTERCRVFVRXdSRHRSUVVNeFJDeE5RVUZOTEdkQ1FVRm5RaXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMR1ZCUVdVc1EwRkJReXhEUVVGRE8xRkJRemRFTEd0RVFVRnJSRHRSUVVOc1JDeEpRVUZKTEVOQlFVTXNZVUZCWVN4SFFVRkhMR2RDUVVGblFpeERRVUZETEVOQlFVTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzcEdMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZGTlVRc1NVRkJTU3hEUVVGRExHRkJRV0VzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNZVUZCWVR0WlFVTm9SU3hKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRkRVFzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU42UkN4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEdWQlFXVXNTVUZCU1N4SlFVRkpMRU5CUVVNc1lVRkJZVHRaUVVNMVJDeEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNCRUxFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGRrVXNRMEZCUXp0SlFVVmxMR2xDUVVGcFFpeERRVUZETEZGQlFYRkNPMUZCUTNKRUxIZEZRVUYzUlR0UlFVTjRSU3hMUVVGTExFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRmJFTXNVVUZCVVN4UlFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRk8xbEJRM1pDTEV0QlFVc3NkVUpCUVhWQ08yZENRVU14UWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTnNRaXhOUVVGTk8xbEJRMUlzUzBGQlN5eHZRa0ZCYjBJN1owSkJRM1pDTEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRuUWtGRGNFSXNUVUZCVFR0WlFVTlNMRXRCUVVzc2JVSkJRVzFDTzJkQ1FVTjBRaXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdaMEpCUTNCQ0xFMUJRVTA3V1VGRFVpeExRVUZMTEdsQ1FVRnBRanRuUWtGRGNFSXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8yZENRVU53UWl4TlFVRk5PMWxCUTFJc1MwRkJTeXhsUVVGbE8yZENRVU5zUWl4SlFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTTdaMEpCUTNwRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1owSkJRMnhDTEUxQlFVMDdXVUZEVWl4TFFVRkxMRmRCUVZjN1owSkJRMlFzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGJFSXNUVUZCVFR0WlFVTlNMRXRCUVVzc1YwRkJWenRuUWtGRFpDeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU5zUWl4TlFVRk5PMWxCUTFJc1MwRkJTeXhWUVVGVk8yZENRVU5pTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlEyeENMRTFCUVUwN1dVRkRVaXhMUVVGTExHMUNRVUZ0UWp0blFrRkRkRUlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGJFSXNUVUZCVFR0WlFVTlNMRXRCUVVzc2NVSkJRWEZDTzJkQ1FVTjRRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVOc1FpeE5RVUZOTzFsQlExSXNTMEZCU3l4VFFVRlRPMmRDUVVOYUxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1owSkJRMnhDTEUxQlFVMDdXVUZEVWl4TFFVRkxMR2xDUVVGcFFqdG5Ra0ZEY0VJc1NVRkJTU3hEUVVGRExHVkJRV1VzUlVGQlJTeERRVUZETzJkQ1FVTjJRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVOc1FpeE5RVUZOTzFOQlExQTdTVUZEU0N4RFFVRkRPMGxCUlhGQ0xHVkJRV1U3T3pzN08xbEJRMjVETEUxQlFVMHNXVUZCV1N4SFFVRlhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRE8xbEJRemxFTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1owSkJRV2RDTEVsQlFVa3NRMEZCUXl4UlFVRlJMR3REUVVGclF5eFpRVUZaTEZWQlFWVXNRMEZCUXl4RFFVRkRPMWxCUTNKSExFOUJRVTBzWlVGQlpTeFpRVUZITzFsQlJYaENMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dFpRVVZ3UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFdEJRVXNzUzBGQlN5eERRVUZETEVWQlFVVTdaMEpCUXpkQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVTBGQlV5eERRVUZETEZOQlFWTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEyNUdMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHR2UWtGRE4wUXNTVUZCU1N4RFFVRkRMR1ZCUVdVc1JVRkJSU3hEUVVGRE8yOUNRVU4yUWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03WjBKQlEyaENMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRFREdFpRVVZFTEUxQlFVMHNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xbEJRMnhDTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1owSkJRV2RDTEVsQlFVa3NRMEZCUXl4UlFVRlJMSGxDUVVGNVFpeERRVUZETEVOQlFVTTdVVUZEZUVVc1EwRkJRenRMUVVGQk8wbEJSWEZDTEUxQlFVMDdPenM3TzFsQlF6RkNMRTFCUVUwc1dVRkJXU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTXpSQ3hQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEdkQ1FVRm5RaXhKUVVGSkxFTkJRVU1zVVVGQlVTeHJRMEZCYTBNc1dVRkJXU3hWUVVGVkxFTkJRVU1zUTBGQlF6dFpRVU55Unl4UFFVRk5MRTFCUVUwc1dVRkJSenRaUVVWbUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVOc1JDeEpRVUZKTEVOQlFVTXNTVUZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xbEJRM0JDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1UwRkJVeXhEUVVGRE8xbEJRM2hDTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1UwRkJVeXhEUVVGRE8xbEJRM3BDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1UwRkJVeXhEUVVGRE8xbEJSWFJDTEVsQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc1MwRkJTeXhEUVVGRE8xbEJRM3BDTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1owSkJRV2RDTEVsQlFVa3NRMEZCUXl4UlFVRlJMSGxDUVVGNVFpeERRVUZETEVOQlFVTTdVVUZEZUVVc1EwRkJRenRMUVVGQk8wbEJSVk1zWVVGQllTeERRVUZETEdGQlFXRXNSMEZCUnl4SFFVRkhPMUZCUTNwRExFbEJRVWtzU1VGQlNTeERRVUZETEhGQ1FVRnhRanRaUVVNMVFpeFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlJUZEVMRTlCUVU4c1JVRkJSU3hEUVVGRE8wbEJRMW9zUTBGQlF6dEpRVVZUTEZWQlFWVTdVVUZEYkVJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVE8xbEJReTlFTEU5QlFVODdVVUZGVkN4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03VVVGRmFFSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhKUVVGSkxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRlRU1zUzBGQlN5eEpRVUZKTEVsQlFVa3NSMEZCUnl4RFFVRkRMRVZCUVVVc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMRVZCUVVVN1dVRkROME1zVFVGQlRTeFBRVUZQTEVkQlFWY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTNSRkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3haUVVGWkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVMEZEYkVRN1VVRkZSQ3hwUmtGQmFVWTdVVUZEYWtZc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNRMEZCUXp0UlFVTXpSQ3d5UjBGQk1rYzdVVUZETTBjc1owUkJRV2RFTzFGQlJXaEVMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXp0UlFVTnFReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVVnNRaXhMUVVGTExFMUJRVTBzUTBGQlF5eEpRVUZKTEU5QlFVOHNSVUZCUlR0WlFVTjJRaXhKUVVGSkxFTkJRVU1zUjBGQmJVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUlRkRExFbEJRVWtzUTBGQlF5eERRVUZETEVWQlFVVTdaMEpCUTA0c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVWQlFVVXNRMEZCUXp0blFrRkRla0lzUlVGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMkZCUTJwQ08xbEJSVVFzVFVGQlRTeEpRVUZKTEVkQlFXRXNUMEZCVHl4RFFVRkRMR3RDUVVGclFpeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNKRUxFdEJRVXNzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4RlFVRkZPMmRDUVVNM1F5eE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0blFrRkRla01zVFVGQlRTeERRVUZETEVkQlFWY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhoUVVGaExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRPMmRDUVVONlJDeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1RVRkJUU3hEUVVGRE8yOUNRVU5vUWl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeHRRa0ZCYlVJc1JVRkJSU3hEUVVGRE8yZENRVU40UXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdZVUZEYmtJN1UwRkRSanRSUVVWRUxEUkNRVUUwUWp0UlFVTTFRaXhMUVVGTExFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTXNSVUZCUlN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNSVUZCUlR0WlFVTTNReXg1UTBGQmVVTTdXVUZGZWtNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4UlFVRlJMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnhETEV0QlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpPMmRDUVVOMlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExGRkJRVkVzU1VGQlNTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNN1UwRkRka1U3VVVGRFJDeFpRVUZaTzFGQlJWb3NUVUZCVFN4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVOMlJDeHRSa0ZCYlVZN1VVRkZia1lzTUVKQlFUQkNPMUZCUXpGQ0xFdEJRVXNzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4RlFVRkZPMWxCUXpkRExFMUJRVTBzU1VGQlNTeEhRVUY1UXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTTNSU3hOUVVGTkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExGRkJRVkVzUTBGQlF6dFpRVVV2UXl4SlFVRkpMRU5CUVVNc1IwRkJWeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETzFsQlJXaERMRTFCUVUwc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMmRDUVVOcVJDeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjN2IwSkJRemxDTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRE8zRkNRVU0xUWl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWM3YjBKQlEyNURMRTlCUVU4c1EwRkJReXhEUVVGRE8zRkNRVU5PTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWM3YjBKQlEyNUNMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03Y1VKQlExQXNiMEpCUVc5Q08yOUNRVU4yUWl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMlFzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEU0N4TFFVRkxMRTFCUVUwc1MwRkJTeXhKUVVGSkxFOUJRVThzUlVGQlJUdG5Ra0ZETTBJc1RVRkJUU3hOUVVGTkxFZEJRWGRDTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE4wTXNPRUpCUVRoQ08yZENRVU01UWl4TlFVRk5MRU5CUVVNc1IwRkJWeXhUUVVGVExFZEJRVWNzVFVGQlRTeERRVUZETEV0QlFVc3NSMEZCUnl4UlFVRlJMRU5CUVVNN1owSkJSWFJFTEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU51Uml4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yRkJRMUk3VTBGRFJqdFJRVU5FTEZsQlFWazdTVUZEWkN4RFFVRkRPMGxCUlVRc01rTkJRVEpETzBsQlF6TkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNUczdVVUZEYkVJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFsQlEyaENMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRek5DTEVsQlFVa3NRMEZCUXl4UFFVRlJMRU5CUVVNc1UwRkJVeXhIUVVGSExIRkRRVUZ4UXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUzBGQlN5eERRVUZETzJkQ1FVTjRSaXhKUVVGSkxFTkJRVU1zVDBGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1JVRkJSU3hEUVVGRE8yRkJRMnhETzJsQ1FVRk5PMmRDUVVOTUxFbEJRVWtzUTBGQlF5eFBRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03WVVGRGRFTTdVMEZEUmp0UlFVVkVMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSVHRaUVVNM1JDeFBRVUZQTzFGQlJWUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRka01zU1VGQlNTeERRVUZETEVOQlFVTTdXVUZCUlN4UFFVRlBPMUZCUldZc1NVRkJTU3hOUVVGTk8xbEJRMUlzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMUZCUlhCQ0xFTkJRVU1zUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0UlFVTnVRaXhEUVVGRExFTkJRVU1zVTBGQlV5eEhRVUZITEU5QlFVOHNRMEZCUXp0UlFVTjBRaXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU40UkN4RFFVRkRMRU5CUVVNc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTTdVVUZGYmtNc01FTkJRVEJETzFGQlF6RkRMRWxCUVVrc1NVRkJTU3hEUVVGRExHRkJRV0VzUzBGQlN5eERRVUZETEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1YwRkJWeXhMUVVGTExFTkJRVU1zUTBGQlF6dFpRVU4wUkN4UFFVRlBPMUZCUlZRc05FSkJRVFJDTzFGQlF6VkNMRU5CUVVNc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dFJRVU51UWl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExFOUJRVThzUTBGQlF6dFJRVU4wUWl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExGRkJRVkVzUTBGQlF6dFJRVU4yUWl4RFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGSExIVkRRVUYxUXl4RFFVRkRPMUZCUTJwRUxFMUJRVTBzWlVGQlpTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTm9SeXhOUVVGTkxFMUJRVTBzUjBGQlJ5eGxRVUZsTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhsUVVGbExFTkJRVU03VVVGRk4wY3NTMEZCU3l4SlFVRkpMRWxCUVVrc1IwRkJSeXhEUVVGRExFVkJRVVVzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hGUVVGRkxFVkJRVVU3V1VGRE4wTXNUVUZCVFN4SFFVRkhMRWRCUVdsQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRMME1zUTBGQlF5eERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMWxCUTI1Q0xFTkJRVU1zUTBGQlF5eFpRVUZaTEVOQlExb3NUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVU5tTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRek5FTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkROVUk3VVVGRFJDd3JRa0ZCSzBJN1VVRkZMMElzUzBGQlN5eEpRVUZKTEVsQlFVa3NSMEZCUnl4RFFVRkRMRVZCUVVVc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMRVZCUVVVN1dVRkROME1zUzBGQlN5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RlFVRkZMRTFCUVUwc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0blFrRkRla1VzU1VGQlNTeFBRVUZQTEV0QlFVc3NSMEZCUnl4RlFVRkZPMjlDUVVOdVFpeE5RVUZOTEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRE8yOUNRVVY0UWl4TlFVRk5MRk5CUVZNc1IwRkJSeXgxUTBGQmRVTXNRMEZCUXp0dlFrRkRNVVFzTUVSQlFUQkVPMjlDUVVNeFJDeE5RVUZOTEhGQ1FVRnhRaXhIUVVGSExFbEJRVWtzUTBGQlF6dHZRa0ZEYmtNc1RVRkJUU3h4UWtGQmNVSXNSMEZCUnl4SlFVRkpMRU5CUVVNN2IwSkJSVzVETEVOQlFVTXNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenR2UWtGRGJrSXNRMEZCUXl4RFFVRkRMRmRCUVZjc1IwRkJSeXhYUVVGWExFTkJRVU03YjBKQlF6VkNMRU5CUVVNc1EwRkJReXhUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTm9RaXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dHZRa0ZEZWtNc1EwRkJReXhEUVVGRExGTkJRVk1zUjBGQlJ5eE5RVUZCTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eHRRMEZCU1N4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0dlFrRkRNMFFzUTBGQlF5eERRVUZETEZOQlFWTXNSMEZCUnl4TlFVRk5MRU5CUVVNN2IwSkJRM0pDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRWRCUVVjc1UwRkJVeXhEUVVGRE8yOUNRVU51UWl3clEwRkJLME03YjBKQlF5OURMRTFCUVUwc1IwRkJSeXhIUVVGblFpeERRVUZETEVOQlFVTXNWMEZCVnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8yOUNRVVZvUkN4MVEwRkJkVU03YjBKQlEzWkRMSGxHUVVGNVJqdHZRa0ZGZWtZc1EwRkJReXhEUVVGRExGbEJRVmtzUTBGRFdpeERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRWRCUVVjc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExIRkNRVUZ4UWl4RlFVTXpSQ3hEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGFrSXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zUTBGQlF6dHBRa0ZEYUVRN1lVRkRSanRUUVVOR08wbEJRMGdzUTBGQlF6dEpRVVZQTEZGQlFWRTdVVUZEWkN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpPMWxCUXpWQ0xFOUJRVTg3VVVGRlZDeEpRVUZKTEV0QlFVc3NSMEZCVnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTTdVVUZEY2tRc1NVRkJTU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZlRVlzU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMWxCUTJoQ0xFMUJRVTBzVFVGQlRTeEhRVUZYTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExFMUJRVTBzUTBGQlF6dFpRVU4yUkN4TlFVRk5MRTFCUVUwc1IwRkJWeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkRja1FzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU53UkN4TFFVRkxMRWRCUVVjc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF6dFpRVU4wUWl4TlFVRk5MRWRCUVVjc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF6dFpRVU40UWl4SlFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NTMEZCU3l4RFFVRkRPMU5CUTJ4RU8xRkJSVVFzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRekZDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZITEV0QlFVc3NTVUZCU1N4RFFVRkRPMUZCUlhaRExHOUdRVUZ2Ump0UlFVTndSaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTnlSQ3hOUVVGTkxGbEJRVmtzUjBGQlZ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJRenRSUVVOd1JDeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhaUVVGWkxFTkJRVU03VVVGRGJFTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEZGQlFWRXNSVUZCUlN4SFFVRkhMRmxCUVZrc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRk4wUXNOa0pCUVRaQ08xRkJRemRDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSVHRaUVVOcVFpeHpRMEZCYzBNN1dVRkRkRU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhIUVVGSExFdEJRVXNzU1VGQlNTeERRVUZETzFsQlF6ZEVMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl3MFFrRkJORUlzUjBGQlJ5eEhRVUZITEUxQlFVMHNTVUZCU1N4RFFVRkRPMWxCUTNCRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhWUVVGVkxFVkJRVVVzVVVGQlVTeEZRVUZGTEZkQlFWY3NRMEZCUXl4RFFVRkRPMU5CUTJoRk8yRkJRVTA3V1VGRFRDdzRRa0ZCT0VJN1dVRkRPVUlzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU03V1VGRGRrUXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEhRVUZITEdkQ1FVRm5RaXhEUVVGRE8xbEJRemRETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUTBGQlF5eFZRVUZWTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkZPVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVGRExGbEJRVmtzUlVGQlJTeEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dFpRVVZ3UlN4eFFrRkJjVUk3V1VGRGNrSXNTVUZCU1N4aFFVRmhMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM1JDTEZGQlFWRXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTzJkQ1FVTm9ReXhMUVVGTExFdEJRVXM3YjBKQlExSXNZVUZCWVN4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGJFSXNUVUZCVFR0blFrRkRVaXhMUVVGTExGRkJRVkU3YjBKQlExZ3NZVUZCWVN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMjVGTEUxQlFVMDdaMEpCUTFJc1MwRkJTeXhSUVVGUk8yOUNRVU5ZTEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF6dHZRa0ZETjBRc1RVRkJUVHRoUVVOUU8xbEJRMFFzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVGRExGbEJRVmtzUlVGQlJTeEhRVUZITEdGQlFXRXNTVUZCU1N4RlFVRkZMRmRCUVZjc1EwRkJReXhEUVVGRE8xbEJSVGRGTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzVFVGQlRTeEZRVUZGTzJkQ1FVTnVReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU55UlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVOQlFVTXNXVUZCV1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8yRkJRMnBFTzJsQ1FVRk5PMmRDUVVOTUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhaUVVGWkxFVkJRVVVzVVVGQlVTeEZRVUZGTEZkQlFWY3NRMEZCUXl4RFFVRkRPMkZCUTJ4Rk8xTkJRMFk3VVVGRlJDeHBRa0ZCYVVJN1VVRkRha0lzTmtSQlFUWkVPMUZCUXpkRUxEWkVRVUUyUkR0UlFVTTNSQ3cyUkVGQk5rUTdVVUZETjBRc05rUkJRVFpFTzFGQlF6ZEVMRmRCUVZjN1VVRkRXQ3d5UkVGQk1rUTdVVUZETTBRc0swUkJRU3RFTzBsQlEycEZMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUTBrc1RVRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZwUWl4RlFVRkZMRmxCUVc5Q0xFTkJRVU03VVVGRGJFVXNTVUZCU1N4SFFVRkhMRWRCUVhOQ0xFbEJRVWtzUTBGQlF6dFJRVU5zUXl4UlFVRlJMRTFCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3V1VGRGVFSXNTMEZCU3l4VlFVRlZMRU5CUVVNc2QwSkJRWGRDTzJkQ1FVTjBReXhIUVVGSExFZEJRVWNzYTBKQlFXdENMRU5CUVVNc1ZVRkJWU3hEUVVGRE8yZENRVU53UXl4TlFVRk5PMWxCUTFJc1MwRkJTeXhYUVVGWExFTkJRVU1zZDBKQlFYZENPMmRDUVVOMlF5eEhRVUZITEVkQlFVY3NiVUpCUVcxQ0xFTkJRVU1zV1VGQldTeERRVUZETzJkQ1FVTjJReXhOUVVGTk8xTkJRMUE3VVVGRFJDeE5RVUZOTEdGQlFXRXNSMEZCYVVJc1QwRkJUeXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6dFJRVVZvUml4TlFVRk5MR3RDUVVGclFpeEhRVUZuUXp0WlFVTjBSQ3hEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVXNiVUpCUVcxQ0xFTkJRVU1zV1VGQldTeERRVUZETzFsQlF6TkZMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUlVGQlJTeHJRa0ZCYTBJc1EwRkJReXhWUVVGVkxFTkJRVU03VTBGRGVFVXNRMEZCUXp0UlFVTkdMR2RFUVVGblJEdFJRVU5vUkN4TlFVRk5MSEZDUVVGeFFpeEhRVUZoTEd0Q1FVRnJRaXhEUVVGRExFZEJRVWNzUTBGRE5VUXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhoUVVGaExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNM1JDeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzY1VKQlFYRkNMRU5CUVVNc1EwRkJRenRSUVVOc1JDeEpRVUZKTEUxQlFVMHNSMEZCUnl4SlFVRkpPMWxCUTJZc1IwRkJSeXhIUVVGSExHdENRVUZyUWl4RFFVRkRMSEZDUVVGeFFpeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZET3p0WlFVVnVSU3hIUVVGSExFZEJRVWNzYTBKQlFXdENMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJSV3BETEhOQ1FVRnpRanRSUVVOMFFpd3lSVUZCTWtVN1VVRkRNMFVzT0VSQlFUaEVPMUZCUXpsRUxEQkVRVUV3UkR0UlFVTXhSQ3d5UjBGQk1rYzdVVUZETTBjc2NVUkJRWEZFTzFGQlEzSkVMRWxCUVVrN1VVRkRTaXh6UWtGQmMwSTdVVUZEZEVJc2FVUkJRV2xFTzFGQlEycEVMRFpFUVVFMlJEdFJRVU0zUkN3d1JFRkJNRVE3VVVGRE1VUXNNa2RCUVRKSE8xRkJRek5ITEd0RVFVRnJSRHRSUVVOc1JDeEpRVUZKTzFGQlEwb3NjMEpCUVhOQ08xRkJRM1JDTEc5RFFVRnZRenRSUVVOd1F5eEpRVUZKTzFGQlEwb3NUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRZaXhEUVVGRE8wbEJSVTBzVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFMUJRV2xDTEVWQlFVVXNXVUZCYjBJc1EwRkJRenRSUVVOeVJTeE5RVUZOTEVkQlFVY3NSMEZCYVVJc1JVRkJSU3hEUVVGRE8xRkJRemRDTEV0QlFVc3NUVUZCVFN4SFFVRkhMRWxCUVVrc1RVRkJUU3hEUVVGRExGVkJRVlVzUlVGQlJUdFpRVU51UXl4TlFVRk5MRWxCUVVrc1IwRkJZU3hQUVVGUExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGRrUXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExGTkJRVk1zUlVGQlJUdG5Ra0ZETTBJc1MwRkJTeXhOUVVGTkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVWQlFVVTdiMEpCUTNCQ0xFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNN2QwSkJRMklzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRFlpeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8ybENRVU5pTzJGQlEwWTdVMEZEUmp0UlFVTkVMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMklzUTBGQlF6dEpRVVZOTEUxQlFVMHNRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eEpRVUZyUWl4RlFVRkZMRkZCUVhGQ0xFVkJRVVVzV1VGQmIwSXNSMEZCUnp0UlFVTndSeXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVkQlFVY3NRMEZCVXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXpSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUlhaQ0xFMUJRVTBzUzBGQlN5eEhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTXpRaXhOUVVGTkxGTkJRVk1zUjBGQllTeEZRVUZGTEVOQlFVTTdVVUZETDBJc1MwRkJTeXhOUVVGTkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVWQlFVVTdXVUZEY0VJc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM0JETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTjZRenRSUVVORUxEQkdRVUV3Ump0UlFVTXhSaXhOUVVGTkxFdEJRVXNzUjBGQlZ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVONFF5eE5RVUZOTEZOQlFWTXNSMEZCVnl4SlFVRkpMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFJRVU5vUkN4TlFVRk5MRWRCUVVjc1IwRkJWeXhuUWtGQlowSXNRMEZCUXl4TFFVRkxMRVZCUVVVc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1dVRkJXU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtjc1QwRkJUeXhIUVVGSExFTkJRVU03U1VGRFlpeERRVUZETzBsQlJVUTdPenM3VDBGSlJ6dEpRVU5MTEZsQlFWa3NRMEZCUXl4VFFVRjFRanRSUVVNeFF5eEpRVUZKTEVkQlFVY3NSMEZCY1VJc1UwRkJVeXhEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zUTBGQlF6dFJRVU16UlN4SlFVRkpMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVU3V1VGRFppeExRVUZMTEUxQlFVMHNSMEZCUnl4SlFVRkpMRk5CUVZNc1EwRkJReXhQUVVGUExFVkJRVVU3WjBKQlEyNURMRTFCUVUwc1JVRkJSU3hIUVVGSExFOUJRVThzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCWjBJc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEZEVRc1NVRkJTU3hGUVVGRkxFdEJRVXNzU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkZMRmxCUVZrc2FVSkJRV2xDTEVOQlFVTXNSVUZCUlR0dlFrRkRja1FzUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXp0dlFrRkRWaXhOUVVGTk8ybENRVU5RTzJGQlEwWTdVMEZEUmp0UlFVTkVMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMklzUTBGQlF6dEpRVWxOTEUxQlFVMHNRMEZCUXl4clFrRkJhMElzUTBGQlF5eEhRVUZYTzFGQlF6RkRMQ3RDUVVFclFqdFJRVU12UWl4TlFVRk5MRWRCUVVjc1IwRkJZU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJUdFpRVU0xUlN4SlFVRkpMRWxCUVZrc1EwRkJRenRaUVVOcVFpeE5RVUZOTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGFFSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJUdG5Ra0ZEYUVJc1NVRkJTU3hEUVVGRExFbEJRVWtzVDBGQlR5eERRVUZETEZWQlFWVXNSVUZCUlR0dlFrRkRNMElzU1VGQlNTeEhRVUZITEU5QlFVOHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YVVKQlF6bENPM0ZDUVVGTk8yOUNRVU5NTEVsQlFVa3NSMEZCUnl4RlFVRkZMRU5CUVVNN2IwSkJRMVlzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5dzBRa0ZCTkVJc1EwRkJReXhEUVVGRE8ybENRVU12UkR0aFFVTkdPMmxDUVVGTk8yZENRVU5NTEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1lVRkRWanRaUVVORUxFOUJRVThzU1VGQlNTeERRVUZETzFGQlEyUXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRllpeFBRVUZQTEVkQlFVY3NRMEZCUXp0SlFVTmlMRU5CUVVNN08wRkJlbkJDWVN4dFFrRkJWeXhIUVVGSExHRkJRV0VzUTBGQlF6dEJRVU16UWl4dFFrRkJWeXhIUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETzBGQmJXOUNla0lzWlVGQlR5eEhRVUZITEhGQ1FVRnhRaXhEUVVGRE8wRkJkVUl2UXl3NFJrRkJPRVk3UVVGREwwVXNhMEpCUVZVc1IwRkJLMEk3U1VGRGRFUXNVMEZCVXl4RlFVRkZMRWRCUVVjN1NVRkRaQ3hQUVVGUExFVkJRVVVzUjBGQlJ6dEpRVU5hTEU5QlFVOHNSVUZCUlN4SFFVRkhPMGxCUTFvc1QwRkJUeXhGUVVGRkxFZEJRVWM3UTBGRFlpeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUNvZ1lYTWdaM0p2YXlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlozSnZheWM3WEc1cGJYQnZjblFnS2lCaGN5QjFhU0JtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2ZFdrbk8xeHVhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYmx4dWFXMXdiM0owSUhkMUlHWnliMjBnSjNkMUp6dGNibWx0Y0c5eWRDQXFJR0Z6SUhKNGFuTWdabkp2YlNBbmNuaHFjeWM3WEc1Y2JtbHRjRzl5ZENCN1ZtVmpkRzl5ZlNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5MGVYQmxMV1JsWTJ4aGNtRjBhVzl1Y3ljN1hHNXBiWEJ2Y25RZ2UzWmxZM1J2Y2t4bGJtZDBhQ3dnZG1WamRHOXlSRzkwVUhKdlpIVmpkSDBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZG1WamRHOXlMVzl3WlhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0QmJXbHViMkZqYVdSekxDQkJiV2x1YjJGamFXUnpVR0ZzWlhSMFpYTjlJR1p5YjIwZ0p5NHVMMkZ0YVc1dllXTnBaSE1uTzF4dWFXMXdiM0owSUh0T2RXTnNaVzkwYVdSbGN5d2dUblZqYkdWdmRHbGtaWE5RWVd4bGRIUmxjMzBnWm5KdmJTQW5MaTR2Ym5WamJHVnZkR2xrWlhNbk8xeHVhVzF3YjNKMElIdFZibXR1YjNkdVUyVnhVR0ZzWlhSMFpTd2dWVzVyYm05M2JsTmxjVkJoYkdWMGRHVnpmU0JtY205dElDY3VMaTkxYm10dWIzZHVKenRjYm1sdGNHOXlkQ0I3VTJWeFVHRnNaWFIwWlgwZ1puSnZiU0FuTGk0dmMyVnhMWEJoYkdWMGRHVnpKenRjYm1sdGNHOXlkQ0I3VTNWaWMyTnlhWEIwYVc5dWZTQm1jbTl0SUNkeWVHcHpKenRjYmx4dVpHVmpiR0Z5WlNCdGIyUjFiR1VnSjJSaGRHRm5jbTlyTFdGd2FTOXpjbU12WjNKcFpDY2dlMXh1SUNCcGJuUmxjbVpoWTJVZ1VtVmpkQ0I3WEc0Z0lDQWdZMjl1ZEdGcGJuTW9lRG9nYm5WdFltVnlMQ0I1T2lCdWRXMWlaWElwT2lCaWIyOXNaV0Z1TzF4dUlDQjlYRzU5WEc1Y2JtUmxZMnhoY21VZ1oyeHZZbUZzSUh0Y2JpQWdhVzUwWlhKbVlXTmxJRWhVVFV4RFlXNTJZWE5GYkdWdFpXNTBJSHRjYmlBZ0lDQm5aWFJEZFhKemIzSlFiM05wZEdsdmJpaGxkbVZ1ZERvZ1RXOTFjMlZGZG1WdWRDazZJRVJITGxCdmFXNTBPMXh1SUNCOVhHNTlYRzVjYm5SNWNHVWdUVzl1YjIxbGNrWnlaWEZ6SUQwZ2V5QmJiVG9nYzNSeWFXNW5YVG9nYm5WdFltVnlJSDA3WEc1Y2JraFVUVXhEWVc1MllYTkZiR1Z0Wlc1MExuQnliM1J2ZEhsd1pTNW5aWFJEZFhKemIzSlFiM05wZEdsdmJpQTlJR1oxYm1OMGFXOXVLR1YyWlc1ME9pQk5iM1Z6WlVWMlpXNTBLVG9nUkVjdVVHOXBiblFnZTF4dUlDQmpiMjV6ZENCeVpXTjBJRDBnZEdocGN5NW5aWFJDYjNWdVpHbHVaME5zYVdWdWRGSmxZM1FvS1R0Y2JpQWdjbVYwZFhKdUlHNWxkeUJFUnk1UWIybHVkQ2hsZG1WdWRDNWpiR2xsYm5SWUlDMGdjbVZqZEM1c1pXWjBMQ0JsZG1WdWRDNWpiR2xsYm5SWklDMGdjbVZqZEM1MGIzQXBPMXh1ZlR0Y2JseHVSRWN1VW1WamRDNXdjbTkwYjNSNWNHVXVZMjl1ZEdGcGJuTWdQU0JtZFc1amRHbHZiaWg0T2lCdWRXMWlaWElzSUhrNklHNTFiV0psY2lrNklHSnZiMnhsWVc0Z2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1c1pXWjBJRHc5SUhnZ0ppWWdlQ0E4UFNCMGFHbHpMbkpwWjJoMElDWW1JSFJvYVhNdWRHOXdJRHc5SUhrZ0ppWWdlU0E4UFNCMGFHbHpMbUp2ZEhSdmJUdGNibjA3WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJRYjNOcGRHbHZiazF2Ym05dFpYSkpibVp2SUh0Y2JpQWdMeW9xSUZObGNYVmxibU5sY3lCamIzVnVkQ0IzYVhSb0lHMXZibTl0WlhJZ2FXNGdjRzl6YVhScGIyNWNiaUFnSUNvdlhHNGdJR052ZFc1ME9pQnVkVzFpWlhJN1hHNWNiaUFnTHlvcUlGSmxiV1Z0WW1WeUlITmpjbVZsYmlCamIyOXlaSE1nY21WamRGeHVJQ0FnS2k5Y2JpQWdZbTkxYm1Sek9pQkVSeTVTWldOME8xeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtDa2dlMXh1SUNBZ0lIUm9hWE11WTI5MWJuUWdQU0F3TzF4dUlDQWdJSFJvYVhNdVltOTFibVJ6SUQwZ2JtVjNJRVJITGxKbFkzUW9NQ3dnTUN3Z01Dd2dNQ2s3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdOc1lYTnpJRkJ2YzJsMGFXOXVTVzVtYnlCN1hHNGdJSEIxWW14cFl5QnlaV0ZrYjI1c2VTQnVZVzFsT2lCemRISnBibWM3WEc0Z0lHWnlaWEU2SUhzZ1cyMDZJSE4wY21sdVoxMDZJRkJ2YzJsMGFXOXVUVzl1YjIxbGNrbHVabThnZlR0Y2JpQWdjbTkzUTI5MWJuUTZJRzUxYldKbGNqdGNibHh1SUNBdktpb2dabkpsY1NBOUlIdDlMQ0J5YjNkRGIzVnVkQ0E5SURCY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzVoYldVZ1RtRnRaU0J2WmlCd2IzTnBkR2x2YmlBb0p6RXhNVUVuTENBbk1URXhMakVuTENCbGRHTXBYRzRnSUNBcUwxeHVJQ0JqYjI1emRISjFZM1J2Y2lodVlXMWxPaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQjBhR2x6TG01aGJXVWdQU0J1WVcxbE8xeHVJQ0FnSUhSb2FYTXVabkpsY1NBOUlIdDlPMXh1SUNBZ0lIUm9hWE11Y205M1EyOTFiblFnUFNBd08xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCWFpXSk1iMmR2SUdWNGRHVnVaSE1nUkVjdVNuTldhV1YzWlhJZ2UxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklISmxjMmxrZFdWelUyVjBJRDBnSjI1MVkyeGxiM1JwWkdWekp6dGNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdkbWxsZDJWeVEyOTFiblE2SUc1MWJXSmxjaUE5SUMweE8xeHVYRzRnSUhCeWFYWmhkR1VnZG1sbGQyVnlTV1E2SUc1MWJXSmxjaUE5SUMweE8xeHVJQ0J3Y21sMllYUmxJR2x1YVhScFlXeHBlbVZrT2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlU3WEc1Y2JpQWdMeThnY0hKcGRtRjBaU0J5WldGa2IyNXNlU0JqYjJ4dmNsTmphR1Z0WlRvZ1EyOXNiM0pUWTJobGJXVWdQU0JEYjJ4dmNsTmphR1Z0WlhOYlRuVmpiR1Z2ZEdsa1pYTlhaV0pNYjJkdkxuSmxjMmxrZFdWelUyVjBYVHRjYmlBZ2NISnZkR1ZqZEdWa0lHTndPaUJUWlhGUVlXeGxkSFJsSUh3Z2JuVnNiQ0E5SUc1MWJHdzdYRzVjYmlBZ2NISnBkbUYwWlNCb2IzTjBQem9nU0ZSTlRFUnBka1ZzWlcxbGJuUTdYRzRnSUhCeWFYWmhkR1VnYlhOblNHOXpkRDg2SUVoVVRVeEZiR1Z0Wlc1ME8xeHVJQ0J3Y21sMllYUmxJR05oYm5aaGN6ODZJRWhVVFV4RFlXNTJZWE5GYkdWdFpXNTBPMXh1SUNCd2NtbDJZWFJsSUhOc2FXUmxjajg2SUVSSExsSmhibWRsVTJ4cFpHVnlPMXh1SUNCd2NtbDJZWFJsSUhSbGVIUkNZWE5sYkdsdVpUb2dRMkZ1ZG1GelZHVjRkRUpoYzJWc2FXNWxPMXh1WEc0Z0lIQnlhWFpoZEdVZ1lYaHBjMGhsYVdkb2REb2diblZ0WW1WeUlEMGdNVEk3WEc1Y2JpQWdjSEpwZG1GMFpTQnpaWEZEYjJ3NklFUkhMa052YkhWdGJqeHpkSEpwYm1jK0lId2diblZzYkNBOUlHNTFiR3c3WEc0Z0lDOHZJSEJ5YVhaaGRHVWdiV0Y0VEdWdVozUm9PaUJ1ZFcxaVpYSWdQU0F4TURBN1hHNGdJSEJ5YVhaaGRHVWdjRzl6YVhScGIyNXpPaUJRYjNOcGRHbHZia2x1Wm05YlhTQTlJRnRkTzF4dVhHNGdJSEJ5YVhaaGRHVWdjbTkzYzAxaGMydGxaRG9nYm5WdFltVnlJRDBnTUR0Y2JpQWdjSEpwZG1GMFpTQnliM2R6VG5Wc2JEb2diblZ0WW1WeUlEMGdNRHRjYmx4dUlDQXZMeUJXYVdWM1pYSW5jeUJ3Y205d1pYSjBhV1Z6SUNoc2FXdGxiSGtnZEdobGVTQnphRzkxYkdRZ1ltVWdjSFZpYkdsaklITnZJSFJvWVhRZ2RHaGxlU0JqWVc0Z1ltVWdjMlYwSUc5MWRITnBaR1VwWEc0Z0lIQnlhWFpoZEdVZ1gzQnZjMmwwYVc5dVYybGtkR2c2SUc1MWJXSmxjanRjYmlBZ2NIVmliR2xqSUhCdmMybDBhVzl1VjJsa2RHZzZJRzUxYldKbGNqdGNiaUFnY0hWaWJHbGpJRzFwYmtobGFXZG9kRG9nYm5WdFltVnlPMXh1SUNCd2RXSnNhV01nYldGNFNHVnBaMmgwT2lCdWRXMWlaWEk3WEc0Z0lIQjFZbXhwWXlCamIyNXphV1JsY2s1MWJHeFRaWEYxWlc1alpYTTZJR0p2YjJ4bFlXNDdYRzRnSUhCMVlteHBZeUJ6WlhGMVpXNWpaVU52YkhWdGJrNWhiV1U2SUhOMGNtbHVaeUI4SUc1MWJHdzdYRzRnSUhCMVlteHBZeUJ6ZEdGeWRGQnZjMmwwYVc5dVRtRnRaVG9nYzNSeWFXNW5JSHdnYm5Wc2JEdGNiaUFnY0hWaWJHbGpJR1Z1WkZCdmMybDBhVzl1VG1GdFpUb2djM1J5YVc1bklId2diblZzYkR0Y2JpQWdjSFZpYkdsaklHWnBlRmRwWkhSb09pQmliMjlzWldGdU8xeHVJQ0J3ZFdKc2FXTWdkbVZ5ZEdsallXeEJiR2xuYm0xbGJuUTZJSE4wY21sdVp5QjhJRzUxYkd3N1hHNGdJSEIxWW14cFl5Qm9iM0pwZW05dWRHRnNRV3hwWjI1dFpXNTBPaUJ6ZEhKcGJtY2dmQ0J1ZFd4c08xeHVJQ0J3ZFdKc2FXTWdabWwwUVhKbFlUb2dZbTl2YkdWaGJqdGNiaUFnY0hWaWJHbGpJSE5vY21sdWEwVnRjSFI1VkdGcGJEb2dZbTl2YkdWaGJqdGNibHh1SUNCd2NtbDJZWFJsSUhCdmMybDBhVzl1VG1GdFpYTTZJSE4wY21sdVoxdGRJRDBnVzEwN1hHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGeWRGQnZjMmwwYVc5dU9pQnVkVzFpWlhJZ1BTQXRNVHRjYmx4dUlDQndjbWwyWVhSbElHVnVaRkJ2YzJsMGFXOXVPaUJ1ZFcxaVpYSWdQU0F0TVR0Y2JseHVJQ0F2S2lvZ1JtOXlJSE4wWVhKMFVHOXphWFJwYjI0Z1pYRjFZV3h6SUhSdklHVnVaRkJ2YzJsMGFXOXVJRXhsYm1kMGFDQnBjeUF4SUNvdlhHNGdJSEJ5YVhaaGRHVWdaMlYwSUV4bGJtZDBhQ2dwT2lCdWRXMWlaWElnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5OMFlYSjBVRzl6YVhScGIyNGdQRDBnZEdocGN5NWxibVJRYjNOcGRHbHZiaUEvSUhSb2FYTXVaVzVrVUc5emFYUnBiMjRnTFNCMGFHbHpMbk4wWVhKMFVHOXphWFJwYjI0Z0t5QXhJRG9nTUR0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2RtbGxkMU4xWW5NNklGTjFZbk5qY21sd2RHbHZibHRkSUQwZ1cxMDdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc0Z0lDQWdjM1Z3WlhJb0tUdGNibHh1SUNBZ0lIUm9hWE11ZG1sbGQyVnlTV1FnUFNCWFpXSk1iMmR2TG5acFpYZGxja052ZFc1ME8xeHVJQ0FnSUZkbFlreHZaMjh1ZG1sbGQyVnlRMjkxYm5RZ0t6MGdNVHRjYmx4dUlDQWdJSFJvYVhNdWRHVjRkRUpoYzJWc2FXNWxJRDBnSjNSdmNDYzdYRzVjYmlBZ0lDQjBhR2x6TGw5d2IzTnBkR2x2YmxkcFpIUm9JRDBnZEdocGN5NXdiM05wZEdsdmJsZHBaSFJvSUQwZ2RHaHBjeTVtYkc5aGRDZ25jRzl6YVhScGIyNVhhV1IwYUNjc0lERTJMeW9zWEc0Z0lDQWdJQ0I3WldScGRHOXlPaUFuYzJ4cFpHVnlKeXdnYldsdU9pQTBMQ0J0WVhnNklEWTBMQ0J3YjNOMFptbDRPaUFuY0hnbmZTb3ZLVHRjYmlBZ0lDQjBhR2x6TG0xcGJraGxhV2RvZENBOUlIUm9hWE11Wm14dllYUW9KMjFwYmtobGFXZG9kQ2NzSURVd0x5b3NYRzRnSUNBZ0lDQjdaV1JwZEc5eU9pQW5jMnhwWkdWeUp5d2diV2x1T2lBeU5Td2diV0Y0T2lBeU5UQXNJSEJ2YzNSbWFYZzZJQ2R3ZUNkOUtpOHBPMXh1SUNBZ0lIUm9hWE11YldGNFNHVnBaMmgwSUQwZ2RHaHBjeTVtYkc5aGRDZ25iV0Y0U0dWcFoyaDBKeXdnTVRBd0x5b3NYRzRnSUNBZ0lDQjdaV1JwZEc5eU9pQW5jMnhwWkdWeUp5d2diV2x1T2lBeU5Td2diV0Y0T2lBMU1EQXNJSEJ2YzNSbWFYZzZJQ2R3ZUNkOUtpOHBPMXh1WEc0Z0lDQWdkR2hwY3k1amIyNXphV1JsY2s1MWJHeFRaWEYxWlc1alpYTWdQU0IwYUdsekxtSnZiMndvSjJOdmJuTnBaR1Z5VG5Wc2JGTmxjWFZsYm1ObGN5Y3NJR1poYkhObEtUdGNiaUFnSUNCMGFHbHpMbk5sY1hWbGJtTmxRMjlzZFcxdVRtRnRaU0E5SUhSb2FYTXVjM1J5YVc1bktDZHpaWEYxWlc1alpVTnZiSFZ0Yms1aGJXVW5MQ0J1ZFd4c0tUdGNibHh1SUNBZ0lIUm9hWE11YzNSaGNuUlFiM05wZEdsdmJrNWhiV1VnUFNCMGFHbHpMbk4wY21sdVp5Z25jM1JoY25SUWIzTnBkR2x2Yms1aGJXVW5MQ0J1ZFd4c0tUdGNiaUFnSUNCMGFHbHpMbVZ1WkZCdmMybDBhVzl1VG1GdFpTQTlJSFJvYVhNdWMzUnlhVzVuS0NkbGJtUlFiM05wZEdsdmJrNWhiV1VuTENCdWRXeHNLVHRjYmx4dUlDQWdJSFJvYVhNdVptbDRWMmxrZEdnZ1BTQjBhR2x6TG1KdmIyd29KMlpwZUZkcFpIUm9KeXdnWm1Gc2MyVXBPMXh1WEc0Z0lDQWdkR2hwY3k1MlpYSjBhV05oYkVGc2FXZHViV1Z1ZENBOUlIUm9hWE11YzNSeWFXNW5LQ2QyWlhKMGFXTmhiRUZzYVdkdWJXVnVkQ2NzSUNkdGFXUmtiR1VuTEZ4dUlDQWdJQ0FnZTJOb2IybGpaWE02SUZzbmRHOXdKeXdnSjIxcFpHUnNaU2NzSUNkaWIzUjBiMjBuWFgwcE8xeHVJQ0FnSUhSb2FYTXVhRzl5YVhwdmJuUmhiRUZzYVdkdWJXVnVkQ0E5SUhSb2FYTXVjM1J5YVc1bktDZG9iM0pwZW05dWRHRnNRV3hwWjI1dFpXNTBKeXdnSjJObGJuUmxjaWNzWEc0Z0lDQWdJQ0I3WTJodmFXTmxjem9nV3lkc1pXWjBKeXdnSjJObGJuUmxjaWNzSUNkeWFXZG9kQ2RkZlNrN1hHNGdJQ0FnZEdocGN5NW1hWFJCY21WaElEMGdkR2hwY3k1aWIyOXNLQ2RtYVhSQmNtVmhKeXdnZEhKMVpTazdYRzRnSUNBZ2RHaHBjeTV6YUhKcGJtdEZiWEIwZVZSaGFXd2dQU0IwYUdsekxtSnZiMndvSjNOb2NtbHVhMFZ0Y0hSNVZHRnBiQ2NzSUhSeWRXVXBPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0JoYzNsdVl5QnBibWwwS0NrNklGQnliMjFwYzJVOGRtOXBaRDRnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbWx1YVhScFlXeHBlbVZrS1NCN1hHNGdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLQ2RYWldKTWIyZHZJSE5sWTI5dVpDQnBibWwwYVdGc2FYcGhkR2x2YmlFbktUdGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxtbHVhWFJwWVd4cGVtVmtJRDBnZEhKMVpUdGNiaUFnSUNCMGFHbHpMbWhsYkhCVmNtd2dQU0FuTDJobGJIQXZkbWx6ZFdGc2FYcGxMM1pwWlhkbGNuTXZkMlZpTFd4dloyOHViV1FuTzF4dVhHNGdJQ0FnZEdocGN5NXRjMmRJYjNOMElEMGdkV2t1WkdsMktDZE9ieUJ0WlhOellXZGxKeWs3WEc0Z0lDQWdkR2hwY3k1dGMyZEliM04wTG5OMGVXeGxMbVJwYzNCc1lYa2dQU0FuYm05dVpTYzdYRzVjYmlBZ0lDQjBhR2x6TG1OaGJuWmhjeUE5SUhWcExtTmhiblpoY3lncE8xeHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxuTjBlV3hsTG5kcFpIUm9JRDBnSnpFd01DVW5PMXh1WEc0Z0lDQWdkR2hwY3k1b2IzTjBJRDBnZFdrdVpHbDJLRnQwYUdsekxtMXpaMGh2YzNRc0lIUm9hWE11WTJGdWRtRnpYU2s3WEc1Y2JpQWdJQ0F2THlCMGFHbHpMbk5zYVdSbGNpQTlJSFZwTG5KaGJtZGxVMnhwWkdWeUtEQXNJREl3TENBeUxDQTFLVHRjYmlBZ0lDQXZMeUIwYUdsekxuTnNhV1JsY2k1eWIyOTBMbk4wZVd4bExuZHBaSFJvSUQwZ0p6RXdNQ1VuTzF4dUlDQWdJQzh2SUhSb2FYTXVjMnhwWkdWeUxuSnZiM1F1YzNSNWJHVXVhR1ZwWjJoMElEMGdKekV5Y0hnbk8xeHVYRzRnSUNBZ1kyOXVjM1FnWjJWMFRXOXViMjFsY2lBOUlDaHdPaUJFUnk1UWIybHVkQ2s2SUZ0dWRXMWlaWElzSUhOMGNtbHVaeUI4SUc1MWJHd3NJRkJ2YzJsMGFXOXVUVzl1YjIxbGNrbHVabThnZkNCdWRXeHNYU0E5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0JxVUc5eklEMGdUV0YwYUM1bWJHOXZjaWh3TG5nZ0x5QjBhR2x6TGw5d2IzTnBkR2x2YmxkcFpIUm9LVHRjYmlBZ0lDQWdJR052Ym5OMElIQnZjMmwwYVc5dUlEMGdkR2hwY3k1d2IzTnBkR2x2Ym5OYmFsQnZjMTA3WEc1Y2JpQWdJQ0FnSUdsbUlDaHdiM05wZEdsdmJpQTlQVDBnZG05cFpDQXdLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdXMnBRYjNNc0lHNTFiR3dzSUc1MWJHeGRPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQnRiMjV2YldWeU9pQnpkSEpwYm1jZ2ZDQjFibVJsWm1sdVpXUWdQU0JQWW1wbFkzUXVhMlY1Y3lod2IzTnBkR2x2Ymk1bWNtVnhLVnh1SUNBZ0lDQWdJQ0F1Wm1sdVpDZ29iU2tnUFQ0Z2NHOXphWFJwYjI0dVpuSmxjVnR0WFM1aWIzVnVaSE11WTI5dWRHRnBibk1vY0M1NExDQndMbmtwS1R0Y2JpQWdJQ0FnSUdsbUlDaHRiMjV2YldWeUlEMDlQU0IxYm1SbFptbHVaV1FwWEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJiYWxCdmN5d2diblZzYkN3Z2JuVnNiRjA3WEc1Y2JpQWdJQ0FnSUhKbGRIVnliaUJiYWxCdmN5d2diVzl1YjIxbGNpd2djRzl6YVhScGIyNHVabkpsY1Z0dGIyNXZiV1Z5WFYwN1hHNGdJQ0FnZlR0Y2JseHVYRzRnSUNBZ0x5OGdkR2hwY3k1emRXSnpMbkIxYzJnb2NuaHFjeTVtY205dFJYWmxiblE4VFc5MWMyVkZkbVZ1ZEQ0b2RHaHBjeTVqWVc1MllYTXNJQ2R0YjNWelpXOTJaWEluS1M1emRXSnpZM0pwWW1Vb0tHVTZJRTF2ZFhObFJYWmxiblFwSUQwK0lIdGNiaUFnSUNBdkx5QjlLU2s3WEc1Y2JpQWdJQ0IwYUdsekxuWnBaWGRUZFdKekxuQjFjMmdvY25ocWN5NW1jbTl0UlhabGJuUThUVzkxYzJWRmRtVnVkRDRvZEdocGN5NWpZVzUyWVhNc0lDZHRiM1Z6WlcxdmRtVW5LUzV6ZFdKelkzSnBZbVVvS0dVNklFMXZkWE5sUlhabGJuUXBJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1allXNTJZWE1wWEc0Z0lDQWdJQ0FnSUhKbGRIVnlianRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdZWEpuY3lBOUlHVWdZWE1nVFc5MWMyVkZkbVZ1ZER0Y2JpQWdJQ0FnSUdOdmJuTjBJRnRxVUc5ekxDQnRiMjV2YldWeVhTQTlJR2RsZEUxdmJtOXRaWElvZEdocGN5NWpZVzUyWVhNdVoyVjBRM1Z5YzI5eVVHOXphWFJwYjI0b1lYSm5jeWtwTzF4dVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1a1lYUmhSbkpoYldVZ0ppWWdkR2hwY3k1elpYRkRiMndnSmlZZ2JXOXViMjFsY2lrZ2UxeHVJQ0FnSUNBZ0lDQjFhUzUwYjI5c2RHbHdMbk5vYjNkU2IzZEhjbTkxY0NoMGFHbHpMbVJoZEdGR2NtRnRaU3dnS0dsU2IzY3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCelpYRWdQU0IwYUdsekxuTmxjVU52YkNFdVoyVjBLR2xTYjNjcE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElITmxjVTBnUFNCelpYRWdQeUJYWldKTWIyZHZMbk53YkdsMFUyVnhWRzlOYjI1dmJXVnljeWh6WlhFcFczUm9hWE11YzNSaGNuUlFiM05wZEdsdmJpQXJJR3BRYjNOZElEb2diblZzYkR0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2MyVnhUU0E5UFQwZ2JXOXViMjFsY2lBbUppQjBhR2x6TG1SaGRHRkdjbUZ0WlM1bWFXeDBaWEl1WjJWMEtHbFNiM2NwTzF4dUlDQWdJQ0FnSUNCOUxDQmhjbWR6TG5nZ0t5QXhOaXdnWVhKbmN5NTVJQ3NnTVRZcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RXa3VkRzl2YkhScGNDNW9hV1JsS0NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrcE8xeHVYRzRnSUNBZ2RHaHBjeTUyYVdWM1UzVmljeTV3ZFhOb0tISjRhbk11Wm5KdmJVVjJaVzUwUEUxdmRYTmxSWFpsYm5RK0tIUm9hWE11WTJGdWRtRnpMQ0FuYlc5MWMyVmtiM2R1SnlrdWMzVmljMk55YVdKbEtDaGxPaUJOYjNWelpVVjJaVzUwS1NBOVBpQjdYRzRnSUNBZ0lDQnBaaUFvSVhSb2FYTXVZMkZ1ZG1GeklIeDhJR1V1WW5WMGRHOXVJQ0U5SURBcFhHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnWVhKbmN5QTlJR1VnWVhNZ1RXOTFjMlZGZG1WdWREdGNiaUFnSUNBZ0lHTnZibk4wSUZ0cVVHOXpMQ0J0YjI1dmJXVnlYU0E5SUdkbGRFMXZibTl0WlhJb2RHaHBjeTVqWVc1MllYTXVaMlYwUTNWeWMyOXlVRzl6YVhScGIyNG9ZWEpuY3lrcE8xeHVYRzRnSUNBZ0lDQXZMeUJ3Y21WMlpXNTBjeUJrWlhObGJHVmpkQ0JoYkd3Z2NtOTNjeUJwWmlCM1pTQnRhWE56SUcxdmJtOXRaWElnWW05MWJtUnpYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NWtZWFJoUm5KaGJXVWdKaVlnZEdocGN5NXpaWEZEYjJ3Z0ppWWdiVzl1YjIxbGNpa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtUmhkR0ZHY21GdFpTNXpaV3hsWTNScGIyNHVhVzVwZENnb2FWSnZkeWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElITmxjU0E5SUhSb2FYTXVjMlZ4UTI5c0lTNW5aWFFvYVZKdmR5azdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjMlZ4VFNBOUlITmxjU0EvSUZkbFlreHZaMjh1YzNCc2FYUlRaWEZVYjAxdmJtOXRaWEp6S0hObGNTbGJkR2hwY3k1emRHRnlkRkJ2YzJsMGFXOXVJQ3NnYWxCdmMxMGdPaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnpaWEZOSUQwOVBTQnRiMjV2YldWeUlDWW1JSFJvYVhNdVpHRjBZVVp5WVcxbExtWnBiSFJsY2k1blpYUW9hVkp2ZHlrN1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHBLVHRjYmx4dUlDQWdJSFJvYVhNdWRtbGxkMU4xWW5NdWNIVnphQ2gxYVM1dmJsTnBlbVZEYUdGdVoyVmtLSFJvYVhNdWNtOXZkQ2t1YzNWaWMyTnlhV0psS0hSb2FYTXVjbTl2ZEU5dVUybDZaVU5vWVc1blpXUXVZbWx1WkNoMGFHbHpLU2twTzF4dVhHNGdJQ0FnZEdocGN5NXliMjkwTG1Gd2NHVnVaQ2gwYUdsekxtaHZjM1FwTzF4dUlDQWdJQzh2SUhSb2FYTXVjbTl2ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TG5Oc2FXUmxjaTV5YjI5MEtUdGNibHh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLSFJ5ZFdVcE8xeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQnliMjkwVDI1VGFYcGxRMmhoYm1kbFpDaGhjbWR6T2lCaGJua3BJSHRjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWgwY25WbEtUdGNibHh1SUNBZ0lDOHZJR052Ym5OdmJHVXVaR1ZpZFdjb1lGZGxZa3h2WjI4dWIyNVNiMjkwVTJsNlpVTm9ZVzVuWldRb0tTQmdJQ3RjYmlBZ0lDQXZMeUFnSUdCeWIyOTBMbmRwWkhSb1BTUjdkR2hwY3k1eWIyOTBMbU5zYVdWdWRGZHBaSFJvZlN3Z2NtOXZkQzVvWldsbmFIUTlKSHQwYUdsekxuSnZiM1F1WTJ4cFpXNTBTR1ZwWjJoMGZTd2dZQ0FyWEc0Z0lDQWdMeThnSUNCZ1kyRnVkbUZ6TG5kcFpIUm9QU1I3ZEdocGN5NWpZVzUyWVhNdWQybGtkR2g5TENCallXNTJZWE11YUdWcFoyaDBQU1I3ZEdocGN5NWpZVzUyWVhNdWFHVnBaMmgwZlNBdVlDazdYRzRnSUgxY2JseHVJQ0F2S2lvZ1FYTnphV2R1Y3lCN1FHeHBibXNnYzJWeFEyOXNmU0JoYm1RZ2UwQnNhVzVySUdOd2ZTQmlZWE5sWkNCdmJpQjdRR3hwYm1zZ2MyVnhkV1Z1WTJWRGIyeDFiVzVPWVcxbGZTQmhibVFnWTJGc2JITWdlMEJzYVc1cklISmxibVJsY24wb0tTNWNiaUFnSUNvdlhHNGdJSEJ5YVhaaGRHVWdkWEJrWVhSbFUyVnhRMjlzS0NrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbVJoZEdGR2NtRnRaU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXpaWEZEYjJ3Z1BTQjBhR2x6TG5ObGNYVmxibU5sUTI5c2RXMXVUbUZ0WlNBL0lIUm9hWE11WkdGMFlVWnlZVzFsTG1OdmJDaDBhR2x6TG5ObGNYVmxibU5sUTI5c2RXMXVUbUZ0WlNrZ09pQnVkV3hzTzF4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11YzJWeFEyOXNJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXpaWEZEYjJ3Z1BTQjBhR2x6TG5CcFkydFZjRk5sY1VOdmJDaDBhR2x6TG1SaGRHRkdjbUZ0WlNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YzJWeGRXVnVZMlZEYjJ4MWJXNU9ZVzFsSUQwZ2RHaHBjeTV6WlhGRGIyd2dQeUIwYUdsekxuTmxjVU52YkM1dVlXMWxJRG9nYm5Wc2JEdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxuTmxjVU52YkNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5Wd1pHRjBaVkJ2YzJsMGFXOXVjeWdwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbU53SUQwZ1YyVmlURzluYnk1d2FXTnJWWEJRWVd4bGRIUmxLSFJvYVhNdWMyVnhRMjlzS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNU9ZVzFsY3lBOUlGdGRPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuTjBZWEowVUc5emFYUnBiMjRnUFNBdE1UdGNiaUFnSUNBZ0lDQWdkR2hwY3k1bGJtUlFiM05wZEdsdmJpQTlJQzB4TzF4dUlDQWdJQ0FnSUNCMGFHbHpMbU53SUQwZ2JuVnNiRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnZFhCa1lYUmxVRzl6YVhScGIyNXpLQ2s2SUhadmFXUWdlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NXpaWEZEYjJ3cFhHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc1Y2JpQWdJQ0JzWlhRZ1kyRjBaV2R2Y21sbGN6b2dLSE4wY21sdVp5QjhJRzUxYkd3cElGdGRPMXh1SUNBZ0lHbG1JQ2gwYUdsekxuTm9jbWx1YTBWdGNIUjVWR0ZwYkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1a2FXTmxjem9nU1c1ME16SkJjbkpoZVNBOUlIUm9hWE11WkdGMFlVWnlZVzFsTG1acGJIUmxjaTVuWlhSVFpXeGxZM1JsWkVsdVpHVjRaWE1vS1R0Y2JpQWdJQ0FnSUdOaGRHVm5iM0pwWlhNZ1BTQkJjbkpoZVM1bWNtOXRLRzVsZHlCVFpYUW9YRzRnSUNBZ0lDQWdJRUZ5Y21GNUxtWnliMjBvUVhKeVlYa29hVzVrYVdObGN5NXNaVzVuZEdncExtdGxlWE1vS1NrdWJXRndLQ2hwT2lCdWRXMWlaWElwSUQwK0lIUm9hWE11YzJWeFEyOXNJUzVuWlhRb2FXNWthV05sYzF0cFhTa3BLU2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHTmhkR1ZuYjNKcFpYTWdQU0IwYUdsekxuTmxjVU52YkM1allYUmxaMjl5YVdWek8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQnRZWGhNWlc1bmRHZ2dQU0JqWVhSbFoyOXlhV1Z6TG14bGJtZDBhQ0ErSURBZ1B5Qk5ZWFJvTG0xaGVDZ3VMaTVqWVhSbFoyOXlhV1Z6TG0xaGNDaGNiaUFnSUNBZ0lDaHpLU0E5UGlCeklDRTlQU0J1ZFd4c0lEOGdWMlZpVEc5bmJ5NXpjR3hwZEZObGNWUnZUVzl1YjIxbGNuTW9jeWt1YkdWdVozUm9JRG9nTUNrcElEb2dNRHRjYmx4dUlDQWdJQzh2SUVkbGRDQndiM05wZEdsdmJpQnVZVzFsY3lCbWNtOXRJR1JoZEdFZ1kyOXNkVzF1SUhSaFp5QW5jRzl6YVhScGIyNU9ZVzFsY3lkY2JpQWdJQ0JqYjI1emRDQndiM05wZEdsdmJrNWhiV1Z6VkhoMElEMGdkR2hwY3k1elpYRkRiMnd1WjJWMFZHRm5LQ2R3YjNOcGRHbHZiazVoYldWekp5azdYRzRnSUNBZ0x5OGdSbUZzYkdKaFkyc2dhV1lnSjNCdmMybDBhVzl1VG1GdFpYTW5JSFJoWnlCcGN5QnViM1FnY0hKdmRtbGtaV1JjYmlBZ0lDQjBhR2x6TG5CdmMybDBhVzl1VG1GdFpYTWdQU0J3YjNOcGRHbHZiazVoYldWelZIaDBJRDhnY0c5emFYUnBiMjVPWVcxbGMxUjRkQzV6Y0d4cGRDZ25MQ0FuS1M1dFlYQW9LRzRwSUQwK0lHNHVkSEpwYlNncEtTQTZYRzRnSUNBZ0lDQmJMaTR1UVhKeVlYa29iV0Y0VEdWdVozUm9LUzVyWlhsektDbGRMbTFoY0Nnb2FsQnZjeWtnUFQ0Z1lDUjdhbEJ2Y3lBcklERjlZQ2s3WEc1Y2JpQWdJQ0IwYUdsekxuTjBZWEowVUc5emFYUnBiMjRnUFNBb2RHaHBjeTV6ZEdGeWRGQnZjMmwwYVc5dVRtRnRaU0FtSmlCMGFHbHpMbkJ2YzJsMGFXOXVUbUZ0WlhNZ0ppWmNiaUFnSUNBZ0lIUm9hWE11Y0c5emFYUnBiMjVPWVcxbGN5NXBibU5zZFdSbGN5aDBhR2x6TG5OMFlYSjBVRzl6YVhScGIyNU9ZVzFsS1NrZ1AxeHVJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiazVoYldWekxtbHVaR1Y0VDJZb2RHaHBjeTV6ZEdGeWRGQnZjMmwwYVc5dVRtRnRaU2tnT2lBd08xeHVJQ0FnSUhSb2FYTXVaVzVrVUc5emFYUnBiMjRnUFNBb2RHaHBjeTVsYm1SUWIzTnBkR2x2Yms1aGJXVWdKaVlnZEdocGN5NXdiM05wZEdsdmJrNWhiV1Z6SUNZbVhHNGdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVUbUZ0WlhNdWFXNWpiSFZrWlhNb2RHaHBjeTVsYm1SUWIzTnBkR2x2Yms1aGJXVXBLU0EvWEc0Z0lDQWdJQ0IwYUdsekxuQnZjMmwwYVc5dVRtRnRaWE11YVc1a1pYaFBaaWgwYUdsekxtVnVaRkJ2YzJsMGFXOXVUbUZ0WlNrZ09pQW9iV0Y0VEdWdVozUm9JQzBnTVNrN1hHNGdJSDFjYmx4dUlDQndkV0pzYVdNZ2IzWmxjbkpwWkdVZ2IyNVFjbTl3WlhKMGVVTm9ZVzVuWldRb2NISnZjR1Z5ZEhrNklFUkhMbEJ5YjNCbGNuUjVLVG9nZG05cFpDQjdYRzRnSUNBZ0x5OGdZMjl1YzI5c1pTNWtaV0oxWnloZ1YyVmlURzluYnk1dmJsQnliM0JsY25SNVEyaGhibWRsWkNnZ0pIdHdjbTl3WlhKMGVTNXVZVzFsZlNBOUlDY25JSDBwWUNrN1hHNGdJQ0FnYzNWd1pYSXViMjVRY205d1pYSjBlVU5vWVc1blpXUW9jSEp2Y0dWeWRIa3BPMXh1WEc0Z0lDQWdjM2RwZEdOb0lDaHdjbTl3WlhKMGVTNXVZVzFsS1NCN1hHNGdJQ0FnWTJGelpTQW5ZMjl1YzJsa1pYSk9kV3hzVTJWeGRXVnVZMlZ6SnpwY2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0FuYzJWeGRXVnVZMlZEYjJ4MWJXNU9ZVzFsSnpwY2JpQWdJQ0FnSUhSb2FYTXVkWEJrWVhSbFUyVnhRMjlzS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSUNkemRHRnlkRkJ2YzJsMGFXOXVUbUZ0WlNjNlhHNGdJQ0FnSUNCMGFHbHpMblZ3WkdGMFpWTmxjVU52YkNncE8xeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdZMkZ6WlNBblpXNWtVRzl6YVhScGIyNU9ZVzFsSnpwY2JpQWdJQ0FnSUhSb2FYTXVkWEJrWVhSbFUyVnhRMjlzS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSUNkd2IzTnBkR2x2YmxkcFpIUm9KenBjYmlBZ0lDQWdJSFJvYVhNdVgzQnZjMmwwYVc5dVYybGtkR2dnUFNCMGFHbHpMbkJ2YzJsMGFXOXVWMmxrZEdnN1hHNGdJQ0FnSUNCMGFHbHpMbkpsYm1SbGNpaDBjblZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnSjIxcGJraGxhV2RvZENjNlhHNGdJQ0FnSUNCMGFHbHpMbkpsYm1SbGNpaDBjblZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnSjIxaGVFaGxhV2RvZENjNlhHNGdJQ0FnSUNCMGFHbHpMbkpsYm1SbGNpaDBjblZsS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnSjJacGVGZHBaSFJvSnpwY2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0FuZG1WeWRHbGpZV3hCYkdsbmJtMWxiblFuT2x4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb2RISjFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJQ2RvYjNKcGVtOXVkR0ZzUVd4cFoyNXRaVzUwSnpwY2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0FuWm1sMFFYSmxZU2M2WEc0Z0lDQWdJQ0IwYUdsekxuSmxibVJsY2loMGNuVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdKM05vY21sdWEwVnRjSFI1VkdGcGJDYzZYRzRnSUNBZ0lDQjBhR2x6TG5Wd1pHRjBaVkJ2YzJsMGFXOXVjeWdwTzF4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb2RISjFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQndkV0pzYVdNZ2IzWmxjbkpwWkdVZ1lYTjVibU1nYjI1VVlXSnNaVUYwZEdGamFHVmtLQ2tnZTF4dUlDQWdJR052Ym5OMElHUmhkR0ZHY21GdFpWUjRkRG9nYzNSeWFXNW5JRDBnZEdocGN5NWtZWFJoUm5KaGJXVWdQeUFuWkdGMFlTY2dPaUFuYm5Wc2JDYzdYRzRnSUNBZ1kyOXVjMjlzWlM1a1pXSjFaeWhnWW1sdk9pQlhaV0pNYjJkdlBDUjdkR2hwY3k1MmFXVjNaWEpKWkgwK0xtOXVWR0ZpYkdWQmRIUmhZMmhsWkNnZ1pHRjBZVVp5WVcxbElEMGdKSHRrWVhSaFJuSmhiV1ZVZUhSOUlDa2djM1JoY25SZ0tUdGNiaUFnSUNCemRYQmxjaTV2YmxSaFlteGxRWFIwWVdOb1pXUW9LVHRjYmx4dUlDQWdJSFJvYVhNdWRYQmtZWFJsVTJWeFEyOXNLQ2s3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTVrWVhSaFJuSmhiV1VnSVQwOUlIWnZhV1FnTUNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV6ZFdKekxuQjFjMmdvZEdocGN5NWtZWFJoUm5KaGJXVXVjMlZzWldOMGFXOXVMbTl1UTJoaGJtZGxaQzV6ZFdKelkzSnBZbVVvS0Y4cElEMCtJSFJvYVhNdWNtVnVaR1Z5S0NrcEtUdGNiaUFnSUNBZ0lIUm9hWE11YzNWaWN5NXdkWE5vS0hSb2FYTXVaR0YwWVVaeVlXMWxMbVpwYkhSbGNpNXZia05vWVc1blpXUXVjM1ZpYzJOeWFXSmxLQ2hmS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWRYQmtZWFJsVUc5emFYUnBiMjV6S0NrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y21WdVpHVnlLQ2s3WEc0Z0lDQWdJQ0I5S1NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWVhkaGFYUWdkR2hwY3k1cGJtbDBLQ2s3WEc0Z0lDQWdZMjl1YzI5c1pTNWtaV0oxWnloZ1ltbHZPaUJYWldKTWIyZHZQQ1I3ZEdocGN5NTJhV1YzWlhKSlpIMCtMbTl1VkdGaWJHVkJkSFJoWTJobFpDZ3BJR1Z1WkdBcE8xeHVJQ0I5WEc1Y2JpQWdjSFZpYkdsaklHOTJaWEp5YVdSbElHRnplVzVqSUdSbGRHRmphQ2dwSUh0Y2JpQWdJQ0JqYjI1emRDQmtZWFJoUm5KaGJXVlVlSFFnUFNCZ0pIdDBhR2x6TG1SaGRHRkdjbUZ0WlNBL0lDZGtZWFJoSnlBNklDZHVkV3hzSjMxZ08xeHVJQ0FnSUdOdmJuTnZiR1V1WkdWaWRXY29ZR0pwYnpvZ1YyVmlURzluYnp3a2UzUm9hWE11ZG1sbGQyVnlTV1I5UGk1dmJsUmhZbXhsUVhSMFlXTm9aV1FvSUdSaGRHRkdjbUZ0WlNBOUlDUjdaR0YwWVVaeVlXMWxWSGgwZlNBcElITjBZWEowWUNrN1hHNGdJQ0FnYzNWd1pYSXVaR1YwWVdOb0tDazdYRzVjYmlBZ0lDQjBhR2x6TG5acFpYZFRkV0p6TG1admNrVmhZMmdvS0hOMVlpa2dQVDRnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2twTzF4dUlDQWdJSFJvYVhNdWFHOXpkQ0V1Y21WdGIzWmxLQ2s3WEc0Z0lDQWdkR2hwY3k1allXNTJZWE1nUFNCMWJtUmxabWx1WldRN1hHNGdJQ0FnZEdocGN5NXRjMmRJYjNOMElEMGdkVzVrWldacGJtVmtPMXh1SUNBZ0lIUm9hWE11YUc5emRDQTlJSFZ1WkdWbWFXNWxaRHRjYmx4dUlDQWdJSFJvYVhNdWFXNXBkR2xoYkdsNlpXUWdQU0JtWVd4elpUdGNiaUFnSUNCamIyNXpiMnhsTG1SbFluVm5LR0JpYVc4NklGZGxZa3h2WjI4OEpIdDBhR2x6TG5acFpYZGxja2xrZlQ0dWIyNVVZV0pzWlVGMGRHRmphR1ZrS0NrZ1pXNWtZQ2s3WEc0Z0lIMWNibHh1SUNCd2NtOTBaV04wWldRZ1gyNTFiR3hUWlhGMVpXNWpaU2htYVd4c1pYSlNaWE5wWkhWbElEMGdKMWduS1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVqYjI1emFXUmxjazUxYkd4VFpYRjFaVzVqWlhNcFhHNGdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lFRnljbUY1S0hSb2FYTXVUR1Z1WjNSb0tTNW1hV3hzS0dacGJHeGxjbEpsYzJsa2RXVXBMbXB2YVc0b0p5Y3BPMXh1WEc0Z0lDQWdjbVYwZFhKdUlDY25PMXh1SUNCOVhHNWNiaUFnY0hKdmRHVmpkR1ZrSUY5allXeGpkV3hoZEdVb0tTQjdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtTmhiblpoY3lCOGZDQWhkR2hwY3k1b2IzTjBJSHg4SUNGMGFHbHpMbk5sY1VOdmJDQjhmQ0FoZEdocGN5NWtZWFJoUm5KaGJXVXBYRzRnSUNBZ0lDQnlaWFIxY200N1hHNWNiaUFnSUNCMGFHbHpMbU5oYkdOVGFYcGxLQ2s3WEc1Y2JpQWdJQ0IwYUdsekxuQnZjMmwwYVc5dWN5QTlJRzVsZHlCQmNuSmhlU2gwYUdsekxreGxibWQwYUNrN1hHNGdJQ0FnWm05eUlDaHNaWFFnYWxCdmN5QTlJREE3SUdwUWIzTWdQQ0IwYUdsekxreGxibWQwYURzZ2FsQnZjeXNyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0J3YjNOT1lXMWxPaUJ6ZEhKcGJtY2dQU0IwYUdsekxuQnZjMmwwYVc5dVRtRnRaWE5iZEdocGN5NXpkR0Z5ZEZCdmMybDBhVzl1SUNzZ2FsQnZjMTA3WEc0Z0lDQWdJQ0IwYUdsekxuQnZjMmwwYVc5dWMxdHFVRzl6WFNBOUlHNWxkeUJRYjNOcGRHbHZia2x1Wm04b2NHOXpUbUZ0WlNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z01qQXlNaTB3TlMwd05TQmhjMnRoYkd0cGJpQnBibk4wY25WamRHVmtJSFJ2SUhOb2IzY2dWMlZpVEc5bmJ5QmlZWE5sWkNCdmJpQm1hV3gwWlhJZ0tHNXZkQ0J6Wld4bFkzUnBiMjRwWEc0Z0lDQWdZMjl1YzNRZ2FXNWthV05sY3lBOUlIUm9hWE11WkdGMFlVWnlZVzFsTG1acGJIUmxjaTVuWlhSVFpXeGxZM1JsWkVsdVpHVjRaWE1vS1R0Y2JpQWdJQ0F2THlCamIyNXpkQ0JwYm1ScFkyVnpJRDBnZEdocGN5NWtZWFJoUm5KaGJXVXVjMlZzWldOMGFXOXVMblJ5ZFdWRGIzVnVkQ0ErSURBZ1B5QjBhR2x6TG1SaGRHRkdjbUZ0WlM1elpXeGxZM1JwYjI0dVoyVjBVMlZzWldOMFpXUkpibVJsZUdWektDa2dPbHh1SUNBZ0lDOHZJQ0FnZEdocGN5NWtZWFJoUm5KaGJXVXVabWxzZEdWeUxtZGxkRk5sYkdWamRHVmtTVzVrWlhobGN5Z3BPMXh1WEc0Z0lDQWdkR2hwY3k1eWIzZHpUV0Z6YTJWa0lEMGdhVzVrYVdObGN5NXNaVzVuZEdnN1hHNGdJQ0FnZEdocGN5NXliM2R6VG5Wc2JDQTlJREE3WEc1Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUdrZ2IyWWdhVzVrYVdObGN5a2dlMXh1SUNBZ0lDQWdiR1YwSUhNNklITjBjbWx1WnlBOUlEeHpkSEpwYm1jK0tIUm9hWE11YzJWeFEyOXNMbWRsZENocEtTazdYRzVjYmlBZ0lDQWdJR2xtSUNnaGN5a2dlMXh1SUNBZ0lDQWdJQ0J6SUQwZ2RHaHBjeTVmYm5Wc2JGTmxjWFZsYm1ObEtDazdYRzRnSUNBZ0lDQWdJQ3NyZEdocGN5NXliM2R6VG5Wc2JEdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdZMjl1YzNRZ2MyVnhUVG9nYzNSeWFXNW5XMTBnUFNCWFpXSk1iMmR2TG5Od2JHbDBVMlZ4Vkc5TmIyNXZiV1Z5Y3loektUdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHcFFiM01nUFNBd095QnFVRzl6SUR3Z2RHaHBjeTVNWlc1bmRHZzdJR3BRYjNNckt5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQndiVWx1Wm04Z1BTQjBhR2x6TG5CdmMybDBhVzl1YzF0cVVHOXpYUzVtY21WeE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdE9pQnpkSEpwYm1jZ1BTQnpaWEZOVzNSb2FYTXVjM1JoY25SUWIzTnBkR2x2YmlBcklHcFFiM05kSUh4OElDY3RKenRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRW9iU0JwYmlCd2JVbHVabThwS1Z4dUlDQWdJQ0FnSUNBZ0lIQnRTVzVtYjF0dFhTQTlJRzVsZHlCUWIzTnBkR2x2YmsxdmJtOXRaWEpKYm1adktDazdYRzRnSUNBZ0lDQWdJSEJ0U1c1bWIxdHRYUzVqYjNWdWRDc3JPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJM0psWjJsdmJpQlFiMnhwYzJnZ1puSmxjU0JqYjNWdWRITmNiaUFnSUNCbWIzSWdLR3hsZENCcVVHOXpJRDBnTURzZ2FsQnZjeUE4SUhSb2FYTXVUR1Z1WjNSb095QnFVRzl6S3lzcElIdGNiaUFnSUNBZ0lDOHZJR1JsYkdWMFpTQjBhR2x6TG5CdmMybDBhVzl1YzF0cVVHOXpYUzVtY21WeFd5Y3RKMTA3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExuSnZkME52ZFc1MElEMGdNRHRjYmlBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnYlNCcGJpQjBhR2x6TG5CdmMybDBhVzl1YzF0cVVHOXpYUzVtY21WeEtWeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CdmMybDBhVzl1YzF0cVVHOXpYUzV5YjNkRGIzVnVkQ0FyUFNCMGFHbHpMbkJ2YzJsMGFXOXVjMXRxVUc5elhTNW1jbVZ4VzIxZExtTnZkVzUwTzF4dUlDQWdJSDFjYmlBZ0lDQXZMeU5sYm1SeVpXZHBiMjVjYmx4dUlDQWdJR052Ym5OMElHMWhlRWhsYVdkb2RDQTlJSFJvYVhNdVkyRnVkbUZ6TG1obGFXZG9kQ0F0SUhSb2FYTXVZWGhwYzBobGFXZG9kRHRjYmlBZ0lDQXZMeUJqYjI1emIyeGxMbVJsWW5WbktHQlhaV0pNYjJkdlBDUjdkR2hwY3k1MmFXVjNaWEpKWkgwK0xsOWpZV3hqZFd4aGRHVW9LU0J0WVhoSVpXbG5hSFE5Skh0dFlYaElaV2xuYUhSOUxtQXBPMXh1WEc0Z0lDQWdMeThqY21WbmFXOXVJRU5oYkdOMWJHRjBaU0J6WTNKbFpXNWNiaUFnSUNCbWIzSWdLR3hsZENCcVVHOXpJRDBnTURzZ2FsQnZjeUE4SUhSb2FYTXVUR1Z1WjNSb095QnFVRzl6S3lzcElIdGNiaUFnSUNBZ0lHTnZibk4wSUdaeVpYRTZJSHNnVzJNNklITjBjbWx1WjEwNklGQnZjMmwwYVc5dVRXOXViMjFsY2tsdVptOGdmU0E5SUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExtWnlaWEU3WEc0Z0lDQWdJQ0JqYjI1emRDQnliM2REYjNWdWRDQTlJSFJvYVhNdWNHOXphWFJwYjI1elcycFFiM05kTG5KdmQwTnZkVzUwTzF4dVhHNGdJQ0FnSUNCc1pYUWdlVG9nYm5WdFltVnlJRDBnZEdocGN5NWhlR2x6U0dWcFoyaDBPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQmxiblJ5YVdWeklEMGdUMkpxWldOMExtVnVkSEpwWlhNb1puSmxjU2t1YzI5eWRDZ29ZU3dnWWlrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb1lWc3dYU0FoUFQwZ0p5MG5JQ1ltSUdKYk1GMGdJVDA5SUNjdEp5bGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZbHN4WFM1amIzVnVkQ0F0SUdGYk1WMHVZMjkxYm5RN1hHNGdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tHRmJNRjBnUFQwOUlDY3RKeUFtSmlCaVd6QmRJRDA5UFNBbkxTY3BYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJREE3WEc0Z0lDQWdJQ0FnSUdWc2MyVWdhV1lnS0dGYk1GMGdQVDA5SUNjdEp5bGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdMVEU3WEc0Z0lDQWdJQ0FnSUdWc2MyVWdMeW9nS0dKYk1GMGdQVDA5SUNjdEp5a2dLaTljYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnS3pFN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lHWnZjaUFvWTI5dWMzUWdaVzUwY25rZ2IyWWdaVzUwY21sbGN5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQndiVWx1Wm04NklGQnZjMmwwYVc5dVRXOXViMjFsY2tsdVptOGdQU0JsYm5SeWVWc3hYVHRjYmlBZ0lDQWdJQ0FnTHk4Z1kyOXVjM1FnYlRvZ2MzUnlhVzVuSUQwZ1pXNTBjbmxiTUYwN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdnNklHNTFiV0psY2lBOUlHMWhlRWhsYVdkb2RDQXFJSEJ0U1c1bWJ5NWpiM1Z1ZENBdklISnZkME52ZFc1ME8xeHVYRzRnSUNBZ0lDQWdJSEJ0U1c1bWJ5NWliM1Z1WkhNZ1BTQnVaWGNnUkVjdVVtVmpkQ2hxVUc5eklDb2dkR2hwY3k1ZmNHOXphWFJwYjI1WGFXUjBhQ3dnZVN3Z2RHaHBjeTVmY0c5emFYUnBiMjVYYVdSMGFDd2dhQ2s3WEc0Z0lDQWdJQ0FnSUhrZ0t6MGdhRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ0x5OGpaVzVrY21WbmFXOXVYRzRnSUgxY2JseHVJQ0F2THlCeVpXWnNaV04wSUdOb1lXNW5aWE1nYldGa1pTQjBieUJtYVd4MFpYSXZjMlZzWldOMGFXOXVYRzRnSUhKbGJtUmxjaWh5WldOaGJHTWdQU0IwY25WbEtTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdWJYTm5TRzl6ZENrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdWMyVnhRMjlzSUNZbUlDRjBhR2x6TG1Od0tTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWJYTm5TRzl6ZENFdWFXNXVaWEpVWlhoMElEMGdZRlZ1YTI1dmQyNGdjR0ZzWlhSMFpTQW9ZMjlzZFcxdUlITmxiVlI1Y0dVNklDY2tlM1JvYVhNdWMyVnhRMjlzTG5ObGJWUjVjR1Y5SnlrdVlEdGNiaUFnSUNBZ0lDQWdkR2hwY3k1dGMyZEliM04wSVM1emRIbHNaUzVrYVhOd2JHRjVJRDBnSnljN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTF6WjBodmMzUWhMbk4wZVd4bExtUnBjM0JzWVhrZ1BTQW5ibTl1WlNjN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1OaGJuWmhjeUI4ZkNBaGRHaHBjeTV6WlhGRGIyd2dmSHdnSVhSb2FYTXVaR0YwWVVaeVlXMWxJSHg4SUNGMGFHbHpMbU53S1Z4dUlDQWdJQ0FnY21WMGRYSnVPMXh1WEc0Z0lDQWdZMjl1YzNRZ1p5QTlJSFJvYVhNdVkyRnVkbUZ6TG1kbGRFTnZiblJsZUhRb0p6SmtKeWs3WEc0Z0lDQWdhV1lnS0NGbktTQnlaWFIxY200N1hHNWNiaUFnSUNCcFppQW9jbVZqWVd4aktWeHVJQ0FnSUNBZ2RHaHBjeTVmWTJGc1kzVnNZWFJsS0NrN1hHNWNiaUFnSUNCbkxuSmxjMlYwVkhKaGJuTm1iM0p0S0NrN1hHNGdJQ0FnWnk1bWFXeHNVM1I1YkdVZ1BTQW5kMmhwZEdVbk8xeHVJQ0FnSUdjdVptbHNiRkpsWTNRb01Dd2dNQ3dnZEdocGN5NWpZVzUyWVhNdWQybGtkR2dzSUhSb2FYTXVZMkZ1ZG1GekxtaGxhV2RvZENrN1hHNGdJQ0FnWnk1MFpYaDBRbUZ6Wld4cGJtVWdQU0IwYUdsekxuUmxlSFJDWVhObGJHbHVaVHRjYmx4dUlDQWdJQzh2SUZCeVpYWmxiblJ6SUdScGRtbHphVzl1SUdKNUlIcGxjbThnYjI0Z1RHVnVaM1JvSUQwZ01GeHVJQ0FnSUdsbUlDaDBhR2x6TG5OMFlYSjBVRzl6YVhScGIyNGdQVDA5SUMweElIeDhJSFJvYVhNdVpXNWtVRzl6YVhScGIyNGdQVDA5SUMweEtWeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJQ0FnTHk4amNtVm5hVzl1SUZCc2IzUWdjRzl6YVhScGIyNU9ZVzFsYzF4dUlDQWdJR2N1Y21WelpYUlVjbUZ1YzJadmNtMG9LVHRjYmlBZ0lDQm5MbVpwYkd4VGRIbHNaU0E5SUNkaWJHRmpheWM3WEc0Z0lDQWdaeTUwWlhoMFFXeHBaMjRnUFNBblkyVnVkR1Z5Snp0Y2JpQWdJQ0JuTG1admJuUWdQU0FuTVRCd2VDQlNiMkp2ZEc4c0lGSnZZbTkwYnlCTWIyTmhiQ3dnYzJGdWN5MXpaWEpwWmljN1hHNGdJQ0FnWTI5dWMzUWdjRzl6VG1GdFpVMWhlRmRwWkhSb0lEMGdUV0YwYUM1dFlYZ29MaTR1ZEdocGN5NXdiM05wZEdsdmJuTXViV0Z3S0Nod2IzTXBJRDArSUdjdWJXVmhjM1Z5WlZSbGVIUW9jRzl6TG01aGJXVXBMbmRwWkhSb0tTazdYRzRnSUNBZ1kyOXVjM1FnYUZOallXeGxJRDBnY0c5elRtRnRaVTFoZUZkcFpIUm9JRHdnS0hSb2FYTXVYM0J2YzJsMGFXOXVWMmxrZEdnZ0xTQXlLU0EvSURFZ09pQW9kR2hwY3k1ZmNHOXphWFJwYjI1WGFXUjBhQ0F0SURJcElDOGdjRzl6VG1GdFpVMWhlRmRwWkhSb08xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FsQnZjeUE5SURBN0lHcFFiM01nUENCMGFHbHpMa3hsYm1kMGFEc2dhbEJ2Y3lzcktTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCd2IzTTZJRkJ2YzJsMGFXOXVTVzVtYnlBOUlIUm9hWE11Y0c5emFYUnBiMjV6VzJwUWIzTmRPMXh1SUNBZ0lDQWdaeTV5WlhObGRGUnlZVzV6Wm05eWJTZ3BPMXh1SUNBZ0lDQWdaeTV6WlhSVWNtRnVjMlp2Y20wb1hHNGdJQ0FnSUNBZ0lHaFRZMkZzWlN3Z01Dd2dNQ3dnTVN4Y2JpQWdJQ0FnSUNBZ2FsQnZjeUFxSUhSb2FYTXVYM0J2YzJsMGFXOXVWMmxrZEdnZ0t5QjBhR2x6TGw5d2IzTnBkR2x2YmxkcFpIUm9JQzhnTWl3Z01DazdYRzRnSUNBZ0lDQm5MbVpwYkd4VVpYaDBLSEJ2Y3k1dVlXMWxMQ0F3TENBd0tUdGNiaUFnSUNCOVhHNGdJQ0FnTHk4alpXNWtjbVZuYVc5dUlGQnNiM1FnY0c5emFYUnBiMjVPWVcxbGMxeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FsQnZjeUE5SURBN0lHcFFiM01nUENCMGFHbHpMa3hsYm1kMGFEc2dhbEJ2Y3lzcktTQjdYRzRnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJRnR0YjI1dmJXVnlMQ0J3YlVsdVptOWRJRzltSUU5aWFtVmpkQzVsYm5SeWFXVnpLSFJvYVhNdWNHOXphWFJwYjI1elcycFFiM05kTG1aeVpYRXBLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHRiMjV2YldWeUlDRTlQU0FuTFNjcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmlJRDBnY0cxSmJtWnZMbUp2ZFc1a2N6dGNibHh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1p2Ym5SVGRIbHNaU0E5SUNjeE5uQjRJRkp2WW05MGJ5d2dVbTlpYjNSdklFeHZZMkZzTENCellXNXpMWE5sY21sbUp6dGNiaUFnSUNBZ0lDQWdJQ0F2THlCSVlXTnJjeUIwYnlCelkyRnNaU0IxY0hCbGNtTmhjMlVnWTJoaGNtRmpkR1Z5Y3lCMGJ5QjBZWEpuWlhRZ2NtVmpkR0Z1WjJ4bFhHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RYQndaWEpqWVhObFRHVjBkR1Z5UVhOalpXNTBJRDBnTUM0eU5UdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQjFjSEJsY21OaGMyVk1aWFIwWlhKSVpXbG5hSFFnUFNBeE1pNHlPMXh1WEc0Z0lDQWdJQ0FnSUNBZ1p5NXlaWE5sZEZSeVlXNXpabTl5YlNncE8xeHVJQ0FnSUNBZ0lDQWdJR2N1YzNSeWIydGxVM1I1YkdVZ1BTQW5iR2xuYUhSbmNtRjVKenRjYmlBZ0lDQWdJQ0FnSUNCbkxteHBibVZYYVdSMGFDQTlJREU3WEc0Z0lDQWdJQ0FnSUNBZ1p5NXlaV04wS0dJdWJHVm1kQ3dnWWk1MGIzQXNJR0l1ZDJsa2RHZ3NJR0l1YUdWcFoyaDBLVHRjYmlBZ0lDQWdJQ0FnSUNCbkxtWnBiR3hUZEhsc1pTQTlJSFJvYVhNdVkzQXVaMlYwS0cxdmJtOXRaWElwSUQ4L0lIUm9hWE11WTNBdVoyVjBLQ2R2ZEdobGNpY3BPMXh1SUNBZ0lDQWdJQ0FnSUdjdWRHVjRkRUZzYVdkdUlEMGdKMnhsWm5Rbk8xeHVJQ0FnSUNBZ0lDQWdJR2N1Wm05dWRDQTlJR1p2Ym5SVGRIbHNaVHRjYmlBZ0lDQWdJQ0FnSUNBdkwyY3VabWxzYkZKbFkzUW9ZaTVzWldaMExDQmlMblJ2Y0N3Z1lpNTNhV1IwYUN3Z1lpNW9aV2xuYUhRcE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHMVViVG9nVkdWNGRFMWxkSEpwWTNNZ1BTQm5MbTFsWVhOMWNtVlVaWGgwS0cxdmJtOXRaWElwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdMeThnYVdZZ0tHMU5MbUZqZEhWaGJFSnZkVzVrYVc1blFtOTRRWE5qWlc1MElDRTlJREFwWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdJQ0JqYjI1emIyeGxMbVJsWW5WbktHQnRPaUFrZTIxOUxDQnRUUzVoWTNSMVlXeENiM1Z1WkdsdVowSnZlRUZ6WTJWdWREb2dKSHR0VFM1aFkzUjFZV3hDYjNWdVpHbHVaMEp2ZUVGelkyVnVkSDFnS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJR2N1YzJWMFZISmhibk5tYjNKdEtGeHVJQ0FnSUNBZ0lDQWdJQ0FnWWk1M2FXUjBhQ0F2SUcxVWJTNTNhV1IwYUN3Z01Dd2dNQ3dnWWk1b1pXbG5hSFFnTHlCMWNIQmxjbU5oYzJWTVpYUjBaWEpJWldsbmFIUXNYRzRnSUNBZ0lDQWdJQ0FnSUNCaUxteGxablFzSUdJdWRHOXdLVHRjYmlBZ0lDQWdJQ0FnSUNCbkxtWnBiR3hVWlhoMEtHMXZibTl0WlhJc0lEQXNJQzExY0hCbGNtTmhjMlZNWlhSMFpYSkJjMk5sYm5RcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQmpZV3hqVTJsNlpTZ3BJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVZMkZ1ZG1GeklIeDhJQ0YwYUdsekxtaHZjM1FwWEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzVjYmlBZ0lDQnNaWFFnZDJsa2RHZzZJRzUxYldKbGNpQTlJSFJvYVhNdVRHVnVaM1JvSUNvZ2RHaHBjeTV3YjNOcGRHbHZibGRwWkhSb08xeHVJQ0FnSUd4bGRDQm9aV2xuYUhRZ1BTQk5ZWFJvTG0xcGJpaDBhR2x6TG0xaGVFaGxhV2RvZEN3Z1RXRjBhQzV0WVhnb2RHaHBjeTV0YVc1SVpXbG5hSFFzSUhSb2FYTXVjbTl2ZEM1amJHbGxiblJJWldsbmFIUXBLVHRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbVpwZEVGeVpXRXBJSHRjYmlBZ0lDQWdJR052Ym5OMElIaFRZMkZzWlRvZ2JuVnRZbVZ5SUQwZ2RHaHBjeTV5YjI5MExtTnNhV1Z1ZEVobGFXZG9kQ0F2SUdobGFXZG9kRHRjYmlBZ0lDQWdJR052Ym5OMElIbFRZMkZzWlRvZ2JuVnRZbVZ5SUQwZ2RHaHBjeTV5YjI5MExtTnNhV1Z1ZEZkcFpIUm9JQzhnZDJsa2RHZzdYRzRnSUNBZ0lDQmpiMjV6ZENCelkyRnNaU0E5SUUxaGRHZ3ViV0Y0S0RFc0lFMWhkR2d1YldsdUtIaFRZMkZzWlN3Z2VWTmpZV3hsS1NrN1hHNGdJQ0FnSUNCM2FXUjBhQ0E5SUhkcFpIUm9JQ29nYzJOaGJHVTdYRzRnSUNBZ0lDQm9aV2xuYUhRZ1BTQm9aV2xuYUhRZ0tpQnpZMkZzWlR0Y2JpQWdJQ0FnSUhSb2FYTXVYM0J2YzJsMGFXOXVWMmxrZEdnZ1BTQjBhR2x6TG5CdmMybDBhVzl1VjJsa2RHZ2dLaUJ6WTJGc1pUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NTNhV1IwYUNBOUlIZHBaSFJvTzF4dUlDQWdJSFJvYVhNdVkyRnVkbUZ6TG5OMGVXeGxMbmRwWkhSb0lEMGdZQ1I3ZDJsa2RHaDljSGhnTzF4dVhHNGdJQ0FnTHk4Z1kyOXVjM1FnWTJGdWRtRnpTR1ZwWjJoME9pQnVkVzFpWlhJZ1BTQjNhV1IwYUNBK0lIUm9hWE11Y205dmRDNWpiR2xsYm5SWGFXUjBhQ0EvSUdobGFXZG9kQ0F0SURnZ09pQm9aV2xuYUhRN1hHNGdJQ0FnZEdocGN5NW9iM04wTG5OMGVXeGxMbk5sZEZCeWIzQmxjblI1S0Nkb1pXbG5hSFFuTENCZ0pIdG9aV2xuYUhSOWNIaGdLVHRjYmlBZ0lDQmpiMjV6ZENCallXNTJZWE5JWldsbmFIUTZJRzUxYldKbGNpQTlJSFJvYVhNdWFHOXpkQzVqYkdsbGJuUklaV2xuYUhRN1hHNGdJQ0FnZEdocGN5NWpZVzUyWVhNdWFHVnBaMmgwSUQwZ1kyRnVkbUZ6U0dWcFoyaDBPMXh1SUNBZ0lIUm9hWE11WTJGdWRtRnpMbk4wZVd4bExuTmxkRkJ5YjNCbGNuUjVLQ2RvWldsbmFIUW5MQ0JnSkh0allXNTJZWE5JWldsbmFIUjljSGhnS1R0Y2JseHVJQ0FnSUM4dklFRmthblZ6ZENCb2IzTjBJR0Z1WkNCeWIyOTBJSGRwWkhSb1hHNGdJQ0FnYVdZZ0tIUm9hWE11Wm1sNFYybGtkR2dwSUh0Y2JpQWdJQ0FnSUM4dklHWjFiR3dnZDJsa2RHZ2dabTl5SUdOaGJuWmhjeUJvYjNOMElHRnVaQ0J5YjI5MFhHNGdJQ0FnSUNCMGFHbHpMbkp2YjNRdWMzUjViR1V1ZDJsa2RHZ2dQU0IwYUdsekxtaHZjM1F1YzNSNWJHVXVkMmxrZEdnZ1BTQmdKSHQzYVdSMGFIMXdlR0E3WEc0Z0lDQWdJQ0IwYUdsekxuSnZiM1F1YzNSNWJHVXVhR1ZwWjJoMElDOHFQU0IwYUdsekxtaHZjM1F1YzNSNWJHVXVhR1ZwWjJoMEtpOGdQU0JnSkh0b1pXbG5hSFI5Y0hoZ08xeHVJQ0FnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG5ObGRGQnliM0JsY25SNUtDZHZkbVZ5Wm14dmR5Y3NJQ2RvYVdSa1pXNG5MQ0FuYVcxd2IzSjBZVzUwSnlrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQzh2SUdGc2JHOTNJSE5qY205c2JDQmpZVzUyWVhNZ2FXNGdjbTl2ZEZ4dUlDQWdJQ0FnZEdocGN5NXliMjkwTG5OMGVXeGxMbmRwWkhSb0lEMGdkR2hwY3k1b2IzTjBMbk4wZVd4bExuZHBaSFJvSUQwZ0p6RXdNQ1VuTzF4dUlDQWdJQ0FnZEdocGN5NW9iM04wTG5OMGVXeGxMbTkyWlhKbWJHOTNXQ0E5SUNkaGRYUnZJV2x0Y0c5eWRHRnVkQ2M3WEc0Z0lDQWdJQ0IwYUdsekxtaHZjM1F1YzNSNWJHVXVjMlYwVUhKdmNHVnlkSGtvSjI5MlpYSm1iRzkzSnl3Z2JuVnNiQ2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVhRzl6ZEM1emRIbHNaUzV6WlhSUWNtOXdaWEowZVNnbmRHVjRkQzFoYkdsbmJpY3NJSFJvYVhNdWFHOXlhWHB2Ym5SaGJFRnNhV2R1YldWdWRDazdYRzVjYmlBZ0lDQWdJQzh2SUhabGNuUnBZMkZzSUdGc2FXZHViV1Z1ZEZ4dUlDQWdJQ0FnYkdWMElHaHZjM1JVYjNCTllYSm5hVzRnUFNBd08xeHVJQ0FnSUNBZ2MzZHBkR05vSUNoMGFHbHpMblpsY25ScFkyRnNRV3hwWjI1dFpXNTBLU0I3WEc0Z0lDQWdJQ0JqWVhObElDZDBiM0FuT2x4dUlDQWdJQ0FnSUNCb2IzTjBWRzl3VFdGeVoybHVJRDBnTUR0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElDZHRhV1JrYkdVbk9seHVJQ0FnSUNBZ0lDQm9iM04wVkc5d1RXRnlaMmx1SUQwZ1RXRjBhQzV0WVhnb01Dd2dLSFJvYVhNdWNtOXZkQzVqYkdsbGJuUklaV2xuYUhRZ0xTQm9aV2xuYUhRcElDOGdNaWs3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNBblltOTBkRzl0SnpwY2JpQWdJQ0FnSUNBZ2FHOXpkRlJ2Y0UxaGNtZHBiaUE5SUUxaGRHZ3ViV0Y0S0RBc0lIUm9hWE11Y205dmRDNWpiR2xsYm5SSVpXbG5hSFFnTFNCb1pXbG5hSFFwTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSFJvYVhNdWFHOXpkQzV6ZEhsc1pTNXpaWFJRY205d1pYSjBlU2duYldGeVoybHVMWFJ2Y0Njc0lHQWtlMmh2YzNSVWIzQk5ZWEpuYVc1OWNIaGdMQ0FuYVcxd2IzSjBZVzUwSnlrN1hHNWNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxuSnZiM1F1WTJ4cFpXNTBTR1ZwWjJoMElEd2dhR1ZwWjJoMEtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWFHOXpkQzV6ZEhsc1pTNXpaWFJRY205d1pYSjBlU2duYUdWcFoyaDBKeXdnWUNSN2RHaHBjeTV5YjI5MExtTnNhV1Z1ZEVobGFXZG9kSDF3ZUdBcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1odmMzUXVjM1I1YkdVdWMyVjBVSEp2Y0dWeWRIa29KMjkyWlhKbWJHOTNMWGtuTENCdWRXeHNLVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWFHOXpkQzV6ZEhsc1pTNXpaWFJRY205d1pYSjBlU2duYjNabGNtWnNiM2N0ZVNjc0lDZG9hV1JrWlc0bkxDQW5hVzF3YjNKMFlXNTBKeWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnWTI5dWMyOXNaUzVrWldKMVp5aGNiaUFnSUNBdkx5QWdJR0IwYUdsekxuSnZiM1F1YzNSNWJHVXVhR1ZwWjJoMElEMGdKSHQwYUdsekxuSnZiM1F1YzNSNWJHVXVhR1ZwWjJoMGZWeGNibUFnSzF4dUlDQWdJQzh2SUNBZ1lIUm9hWE11Y205dmRDNWpiR2xsYm5SSVpXbG5hSFFnUFNBa2UzUm9hWE11Y205dmRDNWpiR2xsYm5SSVpXbG5hSFI5WEZ4dVlDQXJYRzRnSUNBZ0x5OGdJQ0JnZEdocGN5NW9iM04wTG5OMGVXeGxMbWhsYVdkb2RDQTlJQ1I3ZEdocGN5NW9iM04wTG5OMGVXeGxMbWhsYVdkb2RIMWNYRzVnSUN0Y2JpQWdJQ0F2THlBZ0lHQjBhR2x6TG1odmMzUXVZMnhwWlc1MFNHVnBaMmgwSUQwZ0pIdDBhR2x6TG1odmMzUXVZMnhwWlc1MFNHVnBaMmgwZlZ4Y2JtQWdLMXh1SUNBZ0lDOHZJQ0FnSjF4Y2JpY2dLMXh1SUNBZ0lDOHZJQ0FnWUhSb2FYTXVZMkZ1ZG1GekxtaGxhV2RvZENBZ0lDQWdJQ0E5SUNSN2RHaHBjeTVqWVc1MllYTXVhR1ZwWjJoMGZWeGNibUFnSzF4dUlDQWdJQzh2SUNBZ1lIUm9hWE11WTJGdWRtRnpMbk4wZVd4bExtaGxhV2RvZENBOUlDUjdkR2hwY3k1allXNTJZWE11YzNSNWJHVXVhR1ZwWjJoMGZXQXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCd1lYSmhiU0I3UkVjdVEyOXNkVzF1ZlNCelpYRkRiMndnUTI5c2RXMXVJSFJ2SUd4dmIyc2dabTl5SUdFZ2NHRnNaWFIwWlZ4dUlDQWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdJRzFwYmt4bGJtZDBhQ0J0YVc1cGJYVnRJR3hsYm1kMGFDQnZaaUJ6WlhGMVpXNWpaU0IwYnlCa1pYUmxZM1FnY0dGc1pYUjBaU0FvWlcxd2RIa2djM1J5YVc1bmN5QmhjbVVnWVd4c2IzZGxaQ2xjYmlBZ0lDb2dRSEpsZEhWeWJpQjdVMlZ4VUdGc1pYUjBaWDBnVUdGc1pYUjBaU0JqYjNKeVpYTndiMjVrYVc1bklIUnZJSFJvWlNCaGJIQm9ZV0psZENCdlppQjBhR1VnYzJWeGRXVnVZMlZ6SUdsdUlIUm9aU0JqYjJ4MWJXNWNiaUFnSUNvdlhHNGdJSEIxWW14cFl5QnpkR0YwYVdNZ2NHbGphMVZ3VUdGc1pYUjBaU2h6WlhGRGIydzZJRVJITGtOdmJIVnRiaXdnYldsdVRHVnVaM1JvT2lCdWRXMWlaWElnUFNBMUtUb2dVMlZ4VUdGc1pYUjBaU0I3WEc0Z0lDQWdiR1YwSUhKbGN6b2dVMlZ4VUdGc1pYUjBaU0I4SUc1MWJHd2dQU0J1ZFd4c08xeHVJQ0FnSUhOM2FYUmphQ0FvYzJWeFEyOXNMbk5sYlZSNWNHVXBJSHRjYmlBZ0lDQmpZWE5sSUVGdGFXNXZZV05wWkhNdVUyVnRWSGx3WlUxMWJIUnBjR3hsUVd4cFoyNXRaVzUwT2x4dUlDQWdJQ0FnY21WeklEMGdRVzFwYm05aFkybGtjMUJoYkdWMGRHVnpMa2R5YjJ0SGNtOTFjSE03WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJRTUxWTJ4bGIzUnBaR1Z6TGxObGJWUjVjR1ZOZFd4MGFYQnNaVUZzYVdkdWJXVnVkRHBjYmlBZ0lDQWdJSEpsY3lBOUlFNTFZMnhsYjNScFpHVnpVR0ZzWlhSMFpYTXVRMmh5YjIxaGRHOW5jbUZ0TzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuTjBJR0ZzY0doaFltVjBSbkpsY1hNNklFMXZibTl0WlhKR2NtVnhjeUE5SUZkbFlreHZaMjh1WjJWMFFXeHdhR0ZpWlhSR2NtVnhjeWh6WlhGRGIyd3NJRzFwYmt4bGJtZDBhQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhiSEJvWVdKbGRFTmhibVJwWkdGMFpYTTZJRnRUWlhROGMzUnlhVzVuUGl3Z1UyVnhVR0ZzWlhSMFpWMWJYU0E5SUZ0Y2JpQWdJQ0FnSUZ0dVpYY2dVMlYwS0U5aWFtVmpkQzVyWlhsektFNTFZMnhsYjNScFpHVnpMazVoYldWektTa3NJRTUxWTJ4bGIzUnBaR1Z6VUdGc1pYUjBaWE11UTJoeWIyMWhkRzluY21GdFhTeGNiaUFnSUNBZ0lGdHVaWGNnVTJWMEtFOWlhbVZqZEM1clpYbHpLRUZ0YVc1dllXTnBaSE11VG1GdFpYTXBLU3dnUVcxcGJtOWhZMmxrYzFCaGJHVjBkR1Z6TGtkeWIydEhjbTkxY0hOZExGeHVJQ0FnSUYwN1hHNGdJQ0FnTHk4Z1EyRnNZM1ZzWVhSbElHeHBhMlZzYVdodmIyUnpJR1p2Y2lCaGJIQm9ZV0psZEY5allXNWthV1JoZEdWelhHNGdJQ0FnWTI5dWMzUWdZV3h3YUdGaVpYUkRZVzVrYVdSaGRHVnpVMmx0T2lCdWRXMWlaWEpiWFNBOUlHRnNjR2hoWW1WMFEyRnVaR2xrWVhSbGN5NXRZWEFvWEc0Z0lDQWdJQ0FvWXlrZ1BUNGdWMlZpVEc5bmJ5NW5aWFJCYkhCb1lXSmxkRk5wYldsc1lYSnBkSGtvWVd4d2FHRmlaWFJHY21WeGN5d2dZMXN3WFNrcE8xeHVJQ0FnSUdOdmJuTjBJRzFoZUVOdmN5QTlJRTFoZEdndWJXRjRLQzR1TG1Gc2NHaGhZbVYwUTJGdVpHbGtZWFJsYzFOcGJTazdYRzRnSUNBZ2FXWWdLRzFoZUVOdmN5QStJREF1TmpVcFhHNGdJQ0FnSUNCeVpYTWdQU0JoYkhCb1lXSmxkRU5oYm1ScFpHRjBaWE5iWVd4d2FHRmlaWFJEWVc1a2FXUmhkR1Z6VTJsdExtbHVaR1Y0VDJZb2JXRjRRMjl6S1YxYk1WMDdYRzRnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdjbVZ6SUQwZ1ZXNXJibTkzYmxObGNWQmhiR1YwZEdWekxrTnZiRzl5TzF4dVhHNGdJQ0FnTHk4Z2FXWWdLSEpsY3lBOVBUMGdiblZzYkNrZ2UxeHVJQ0FnSUM4dklDQWdMeThnVkdobElHRnNjR2hoWW1WMElHOW1JRzUxWTJ4bGIzUnBaR1Z6SUdseklHRWdjMjFoYkd4bGNpQnpaWFFzSUhOdklIZGxJR05vWldOcklHbDBJR1pwY25OMExseHVJQ0FnSUM4dklDQWdZMjl1YzNRZ1lXeHdhR0ZpWlhRZ1BTQjdMaTR1VG5WamJHVnZkR2xrWlhNdVRtRnRaWE1zSUM0dUxuc25MU2M2SUNkbllYQW5mWDA3WEc0Z0lDQWdMeThnSUNCeVpYTWdQU0JFUnk1RVpYUmxZM1J2Y2k1ellXMXdiR1ZEWVhSbFoyOXlhV1Z6S0hObGNVTnZiQ3dnS0hObGNTa2dQVDRnZTF4dUlDQWdJQzh2SUNBZ0lDQnlaWFIxY200Z0lYTmxjU0I4ZkNBb2MyVnhMbXhsYm1kMGFDQStJRzFwYmt4bGJtZDBhQ0FtSmlCMGFHbHpMbk53YkdsMFUyVnhWRzlOYjI1dmJXVnljeWh6WlhFcExtVjJaWEo1S0NodUtTQTlQaUJ1SUdsdUlHRnNjR2hoWW1WMEtTazdYRzRnSUNBZ0x5OGdJQ0I5TENBeEtTQS9JRTUxWTJ4bGIzUnBaR1Z6VUdGc1pYUjBaWE11UTJoeWIyMWhkRzluY21GdElEb2diblZzYkR0Y2JpQWdJQ0F2THlCOVhHNGdJQ0FnTHk4Z2FXWWdLSEpsY3lBOVBUMGdiblZzYkNrZ2UxeHVJQ0FnSUM4dklDQWdMeThnUVc1a0lIUm9aVzRnWTJobFkyc2dabTl5SUdGdGFXNXZJR0ZqYVdRbmN5QmhiSEJvWVdKbGRDNWNiaUFnSUNBdkx5QWdJR052Ym5OMElHRnNjR2hoWW1WMElEMGdleTR1TGtGdGFXNXZZV05wWkhNdVRtRnRaWE1zSUM0dUxuc25MU2M2SUNkbllYQW5mWDA3WEc0Z0lDQWdMeThnSUNCeVpYTWdQU0JFUnk1RVpYUmxZM1J2Y2k1ellXMXdiR1ZEWVhSbFoyOXlhV1Z6S0hObGNVTnZiQ3dnS0hObGNTa2dQVDRnZTF4dUlDQWdJQzh2SUNBZ0lDQnlaWFIxY200Z0lYTmxjU0I4ZkNBb2MyVnhMbXhsYm1kMGFDQStJRzFwYmt4bGJtZDBhQ0FtSmlCMGFHbHpMbk53YkdsMFUyVnhWRzlOYjI1dmJXVnljeWh6WlhFcExtVjJaWEo1S0NodUtTQTlQaUJ1SUdsdUlHRnNjR2hoWW1WMEtTazdYRzRnSUNBZ0x5OGdJQ0I5TENBeEtTQS9JRUZ0YVc1dllXTnBaSE5RWVd4bGRIUmxjeTVIY205clIzSnZkWEJ6SURvZ2JuVnNiRHRjYmlBZ0lDQXZMeUI5WEc0Z0lDQWdMeThnYVdZZ0tISmxjeUE5UFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQzh2SUNBZ2NtVnpJRDBnVlc1cmJtOTNibE5sY1ZCaGJHVjBkR1Z6TGtOdmJHOXlPMXh1SUNBZ0lDOHZJSDFjYmlBZ0lDQnlaWFIxY200Z2NtVnpPMXh1SUNCOVhHNWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5Qm5aWFJCYkhCb1lXSmxkRVp5WlhGektITmxjVU52YkRvZ1JFY3VRMjlzZFcxdUxDQnRhVzVNWlc1bmRHZzZJRzUxYldKbGNpQTlJREFwT2lCTmIyNXZiV1Z5Um5KbGNYTWdlMXh1SUNBZ0lHTnZibk4wSUhKbGN6b2dUVzl1YjIxbGNrWnlaWEZ6SUQwZ2UzMDdYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQnpaWEVnYjJZZ2MyVnhRMjlzTG1OaGRHVm5iM0pwWlhNcElIdGNiaUFnSUNBZ0lHTnZibk4wSUcxVFpYRTZJSE4wY21sdVoxdGRJRDBnVjJWaVRHOW5ieTV6Y0d4cGRGTmxjVlJ2VFc5dWIyMWxjbk1vYzJWeEtUdGNiaUFnSUNBZ0lHbG1JQ2h0VTJWeExteGxibWQwYUNBK0lHMXBia3hsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUcwZ2IyWWdiVk5sY1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNnaEtHMGdhVzRnY21WektTbGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGMxdHRYU0E5SURBN1hHNGdJQ0FnSUNBZ0lDQWdjbVZ6VzIxZElDczlJREU3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlISmxjenRjYmlBZ2ZWeHVYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdaMlYwUVd4d2FHRmlaWFJUYVcxcGJHRnlhWFI1S0daeVpYRTZJRTF2Ym05dFpYSkdjbVZ4Y3l3Z1lXeHdhR0ZpWlhRNklGTmxkRHh6ZEhKcGJtYytMQ0JuWVhCVGVXMWliMnc2SUhOMGNtbHVaeUE5SUNjdEp5azZJRzUxYldKbGNpQjdYRzRnSUNBZ1kyOXVjM1FnYTJWNWN5QTlJRzVsZHlCVFpYUThjM1J5YVc1blBpaGJMaTR1Ym1WM0lGTmxkQ2hQWW1wbFkzUXVhMlY1Y3lobWNtVnhLU2tzSUM0dUxtRnNjR2hoWW1WMFhTazdYRzRnSUNBZ2EyVjVjeTVrWld4bGRHVW9aMkZ3VTNsdFltOXNLVHRjYmx4dUlDQWdJR052Ym5OMElHWnlaWEZCT2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNBZ0lHTnZibk4wSUdGc2NHaGhZbVYwUVRvZ2JuVnRZbVZ5VzEwZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJRzBnYjJZZ2EyVjVjeWtnZTF4dUlDQWdJQ0FnWm5KbGNVRXVjSFZ6YUNodElHbHVJR1p5WlhFZ1B5Qm1jbVZ4VzIxZElEb2dNQ2s3WEc0Z0lDQWdJQ0JoYkhCb1lXSmxkRUV1Y0hWemFDaGhiSEJvWVdKbGRDNW9ZWE1vYlNrZ1B5QXhJRG9nTUNrN1hHNGdJQ0FnZlZ4dUlDQWdJQzhxSUZSb1pYSmxJSGRsY21VZ1lTQm1aWGNnYVdSbFlYTTZJR05vYVMxemNYVmhjbVZrTENCd1pXRnljMjl1SUdOdmNuSmxiR0YwYVc5dUlDaDJZWEpwWVc1alpUOHBMQ0J6WTJGc1lYSWdjSEp2WkhWamRDQXFMMXh1SUNBZ0lHTnZibk4wSUdaeVpYRldPaUJXWldOMGIzSWdQU0J1WlhjZ1ZtVmpkRzl5S0daeVpYRkJLVHRjYmlBZ0lDQmpiMjV6ZENCaGJIQm9ZV0psZEZZNklGWmxZM1J2Y2lBOUlHNWxkeUJXWldOMGIzSW9ZV3h3YUdGaVpYUkJLVHRjYmlBZ0lDQmpiMjV6ZENCamIzTTZJRzUxYldKbGNpQTlJSFpsWTNSdmNrUnZkRkJ5YjJSMVkzUW9abkpsY1ZZc0lHRnNjR2hoWW1WMFZpa2dMeUFvZG1WamRHOXlUR1Z1WjNSb0tHWnlaWEZXS1NBcUlIWmxZM1J2Y2t4bGJtZDBhQ2hoYkhCb1lXSmxkRllwS1R0Y2JpQWdJQ0J5WlhSMWNtNGdZMjl6TzF4dUlDQjlYRzVjYmlBZ0x5b3FJRVpwY25OMElIUnllU0IwYnlCbWFXNWtJR052YkhWdGJpQjNhWFJvSUhObGJWUjVjR1VnSjJGc2FXZHVaV1JUWlhGMVpXNWpaU2N1WEc0Z0lDQXFJRTVsZUhRZ2JHOXZheUJtYjNJZ1kyOXNkVzF1SUhkcGRHZ2daR0YwWVNCaGJIQm9ZV0psZENCamIzSnlaWE53YjI1a2FXNW5JSFJ2SUdGdWVTQnZaaUIwYUdVZ2EyNXZkMjRnY0dGc1pYUjBaWE11WEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRWN1UkdGMFlVWnlZVzFsZlNCa1lYUmhSbkpoYldWY2JpQWdJQ29nUUhKbGRIVnliaUI3UkVjdVEyOXNkVzF1ZlNCVWFHVWdZMjlzZFcxdUlIZGxJSGRsY21VZ2JHOXZhMmx1WnlCbWIzSWdiM0lnYm5Wc2JGeHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQndhV05yVlhCVFpYRkRiMndvWkdGMFlVWnlZVzFsT2lCRVJ5NUVZWFJoUm5KaGJXVXBPaUJFUnk1RGIyeDFiVzRnZkNCdWRXeHNJSHRjYmlBZ0lDQnNaWFFnY21Wek9pQkVSeTVEYjJ4MWJXNGdmQ0J1ZFd4c0lEMGdaR0YwWVVaeVlXMWxMbU52YkhWdGJuTXVZbmxUWlcxVWVYQmxLQ2RoYkdsbmJtVmtVMlZ4ZFdWdVkyVW5LVHRjYmlBZ0lDQnBaaUFvY21WeklEMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHWnZjaUFvWTI5dWMzUWdZMjlzSUc5bUlHUmhkR0ZHY21GdFpTNWpiMngxYlc1ektTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHTndJRDBnVjJWaVRHOW5ieTV3YVdOclZYQlFZV3hsZEhSbEtHTnZiQ0JoY3lCRVJ5NURiMngxYlc0c0lEVXBPMXh1SUNBZ0lDQWdJQ0JwWmlBb1kzQWdJVDA5SUc1MWJHd2dKaVlnSVNoamNDQnBibk4wWVc1alpXOW1JRlZ1YTI1dmQyNVRaWEZRWVd4bGRIUmxLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lISmxjeUE5SUdOdmJEdGNiaUFnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnY21Wek8xeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ2MzQnNhWFJTWlNBOUlDOWNYRnNvWEZ4M0t5bGNYRjE4S0Z4Y2R5bDhLQzBwTDJjN1hHNWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5QnpjR3hwZEZObGNWUnZUVzl1YjIxbGNuTW9jMlZ4T2lCemRISnBibWNwT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnTHk4Z1ZFOUVUem9nVlhObElITmxjWFZsYm1ObElITmxjR0Z5WVhSdmNseHVJQ0FnSUdOdmJuTjBJSEpsY3pvZ2MzUnlhVzVuVzEwZ1BTQjNkU2h6WlhFdWRHOVRkSEpwYm1jb0tTNXRZWFJqYUVGc2JDaFhaV0pNYjJkdkxuTndiR2wwVW1VcEtTNXRZWEFvS0cxaEtTQTlQaUI3WEc0Z0lDQWdJQ0JzWlhRZ2JWSmxjem9nYzNSeWFXNW5PMXh1SUNBZ0lDQWdZMjl1YzNRZ2JTQTlJRzFoV3pCZE8xeHVJQ0FnSUNBZ2FXWWdLRzB1YkdWdVozUm9JRDRnTVNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYlNCcGJpQlhaV0pNYjJkdkxtRmhVM2x1YjI1NWJYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNCdFVtVnpJRDBnVjJWaVRHOW5ieTVoWVZONWJtOXVlVzF6VzIxZE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJRzFTWlhNZ1BTQW5KenRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG1SbFluVm5LR0JNYjI1bklHMXZibTl0WlhJZ0p5UjdiWDBuSUdoaGN5QnViM1FnWVNCemFHOXlkQ0J6ZVc1dmJubHRMbUFwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCdFVtVnpJRDBnYlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUJ0VW1Wek8xeHVJQ0FnSUgwcExuUnZRWEp5WVhrb0tUdGNibHh1SUNBZ0lISmxkSFZ5YmlCeVpYTTdYRzRnSUgxY2JseHVJQ0F2S2lvZ1QyNXNlU0J6YjIxbElHOW1JSFJvWlNCemVXNXZibmx0Y3k0Z1ZHaGxjMlVnZDJWeVpTQnZZblJoYVc1bFpDQm1jbTl0SUhSb1pTQmpiSFZ6ZEdWeVpXUWdiMnhwWjI5d1pYQjBhV1JsSUdSaGRHRnpaWFF1SUNvdlhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHRmhVM2x1YjI1NWJYTTZJSHNnVzI1aGJXVTZJSE4wY21sdVoxMDZJSE4wY21sdVp5QjlJRDBnZTF4dUlDQWdJQ2RiVFdWT2JHVmRKem9nSjB3bkxDQXZMeUJPYkdVZ0xTQnViM0pzWlhWamFXNWxYRzRnSUNBZ0oxdE5aVUZkSnpvZ0owRW5MRnh1SUNBZ0lDZGJUV1ZIWFNjNklDZEhKeXhjYmlBZ0lDQW5XMDFsUmwwbk9pQW5SaWNzWEc0Z0lIMDdYRzU5WEc0aVhYMD0iLCIvKipcbiAqIEdlbmVyYXRlcyBzaW5nbGUgcmFuZG9tIGZsb2F0IGZyb20gMCB0byByYW5nZS5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2UgTWF4IGdlbmVyYXRpbmcgdmFsdWUuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGZsb2F0IGdlbmVyYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUZsb2F0KHJhbmdlKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiByYW5nZTtcbn1cbi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gaW50ZWdlciBmcm9tIDAgdG8gcmFuZ2UuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IHJhbmdlIE1heCBnZW5lcmF0aW5nIHZhbHVlLlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIGdlbmVyYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUludChyYW5nZSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHJhbmRvbUZsb2F0KHJhbmdlKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbUZ1Wkc5dExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpY21GdVpHOXRMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQk96czdPenM3UjBGTlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4WFFVRlhMRU5CUVVNc1MwRkJZVHRKUVVOMlF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGREwwSXNRMEZCUXp0QlFVVkVPenM3T3pzN1IwRk5SenRCUVVOSUxFMUJRVTBzVlVGQlZTeFRRVUZUTEVOQlFVTXNTMEZCWVR0SlFVTnlReXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGVFTXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWeklITnBibWRzWlNCeVlXNWtiMjBnWm14dllYUWdabkp2YlNBd0lIUnZJSEpoYm1kbExseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnlZVzVuWlNCTllYZ2daMlZ1WlhKaGRHbHVaeUIyWVd4MVpTNWNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjBnUVNCeVlXNWtiMjBnWm14dllYUWdaMlZ1WlhKaGRHVmtMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2NtRnVaRzl0Um14dllYUW9jbUZ1WjJVNklHNTFiV0psY2lrNklHNTFiV0psY2lCN1hHNGdJSEpsZEhWeWJpQk5ZWFJvTG5KaGJtUnZiU2dwSUNvZ2NtRnVaMlU3WEc1OVhHNWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVnpJSE5wYm1kc1pTQnlZVzVrYjIwZ2FXNTBaV2RsY2lCbWNtOXRJREFnZEc4Z2NtRnVaMlV1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUhKaGJtZGxJRTFoZUNCblpXNWxjbUYwYVc1bklIWmhiSFZsTGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQkJJSEpoYm1SdmJTQnBiblJsWjJWeUlHZGxibVZ5WVhSbFpDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhKaGJtUnZiVWx1ZENoeVlXNW5aVG9nYm5WdFltVnlLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUUxaGRHZ3VabXh2YjNJb2NtRnVaRzl0Um14dllYUW9jbUZ1WjJVcEtUdGNibjFjYmlKZGZRPT0iLCIvKipcbiAqIERlbm90ZXMgYSB2ZWN0b3Igb2YgZmxvYXRpbmcgcG9pdCB2YWx1ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFZlY3RvclxuICogQGV4dGVuZHMge0Zsb2F0MzJBcnJheX1cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvciBleHRlbmRzIEZsb2F0MzJBcnJheSB7XG59XG4vKipcbiAqIERlbm90ZXMgYSB0d28tZGltZW5zaW9uYWwgbWF0cml4LlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBNYXRyaXhcbiAqIEBleHRlbmRzIHtBcnJheTxWZWN0b3I+fVxuICovXG5leHBvcnQgY2xhc3MgTWF0cml4IGV4dGVuZHMgQXJyYXkge1xufVxuLyoqXG4gKiBEZW5vdGVzIGNhcnRlc2lhbiBjb29yZGluYXRlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgQ29vcmRpbmF0ZXNcbiAqIEBleHRlbmRzIHtNYXRyaXh9XG4gKi9cbmV4cG9ydCBjbGFzcyBDb29yZGluYXRlcyBleHRlbmRzIE1hdHJpeCB7XG59XG4vKipcbiAqIERlbm90ZXMgYW4gYXJyYXkgb2YgYXJiaXRyYXJ5LXR5cGVkIHZlY3RvcnMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFZlY3RvcnNcbiAqIEBleHRlbmRzIHtBcnJheTxhbnk+fVxuICovXG5leHBvcnQgY2xhc3MgVmVjdG9ycyBleHRlbmRzIEFycmF5IHtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRIbHdaUzFrWldOc1lYSmhkR2x2Ym5NdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUowZVhCbExXUmxZMnhoY21GMGFXOXVjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFUczdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1RVRkJUeXhUUVVGUkxGbEJRVms3UTBGQlJ6dEJRVVV6UXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVFVGQlR5eFRRVUZSTEV0QlFXRTdRMEZCUnp0QlFVVTFRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNWMEZCV1N4VFFVRlJMRTFCUVUwN1EwRkJSenRCUVVVeFF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1QwRkJVU3hUUVVGUkxFdEJRVlU3UTBGQlJ5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJSFpsWTNSdmNpQnZaaUJtYkc5aGRHbHVaeUJ3YjJsMElIWmhiSFZsY3k1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFZMnhoYzNNZ1ZtVmpkRzl5WEc0Z0tpQkFaWGgwWlc1a2N5QjdSbXh2WVhRek1rRnljbUY1ZlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZtVmpkRzl5SUdWNGRHVnVaSE1nUm14dllYUXpNa0Z5Y21GNUlIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0J0WVhSeWFYZ3VYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUdOc1lYTnpJRTFoZEhKcGVGeHVJQ29nUUdWNGRHVnVaSE1nZTBGeWNtRjVQRlpsWTNSdmNqNTlYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJOWVhSeWFYZ2daWGgwWlc1a2N5QkJjbkpoZVR4V1pXTjBiM0krSUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmpZWEowWlhOcFlXNGdZMjl2Y21ScGJtRjBaWE11WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FHTnNZWE56SUVOdmIzSmthVzVoZEdWelhHNGdLaUJBWlhoMFpXNWtjeUI3VFdGMGNtbDRmVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nUTI5dmNtUnBibUYwWlhNZ1pYaDBaVzVrY3lCTllYUnlhWGdnZTMxY2JseHVMeW9xWEc0Z0tpQkVaVzV2ZEdWeklHRnVJR0Z5Y21GNUlHOW1JR0Z5WW1sMGNtRnllUzEwZVhCbFpDQjJaV04wYjNKekxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJqYkdGemN5QldaV04wYjNKelhHNGdLaUJBWlhoMFpXNWtjeUI3UVhKeVlYazhZVzU1UG4xY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklGWmxZM1J2Y25NZ1pYaDBaVzVrY3lCQmNuSmhlVHhoYm5rK0lIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUdScFkzUnBiMjVoY25rZ1kyOXVkR0ZwYm1sdVp5Qm1kVzVqZEdsdmJpQnZjSFJwYjI1ekxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUIwZVhCbElFOXdkR2x2Ym5OY2JpQXFMMXh1Wlhod2IzSjBJSFI1Y0dVZ1QzQjBhVzl1Y3lBOUlIdGJibUZ0WlRvZ2MzUnlhVzVuWFRvZ1lXNTVmVHRjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdOMWMzUnZiU0JrYVhOMFlXNWpaU0J0WlhSeWFXTWdZbVYwZDJWbGJpQjBhR1VnZEhkdklHZHBkbVZ1SUhabFkzUnZjbk11WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIUjVjR1VnUkdsemRHRnVZMlZOWlhSeWFXTmNiaUFxSUVCd1lYSmhiU0I3WVc1NWZTQjJNU0JVYUdVZ1ptbHljM1FnZG1WamRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0aGJubDlJSFl5SUZSb1pTQnpaV052Ym1RZ2RtVmpkRzl5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQkVhWE4wWVc1alpTQmlaWFIzWldWdUlIUm9aWE5sSUhSM2J5QjJaV04wYjNKekxseHVJQ292WEc1bGVIQnZjblFnZEhsd1pTQkVhWE4wWVc1alpVMWxkSEpwWXlBOUlDaDJNVG9nWVc1NUxDQjJNam9nWVc1NUtTQTlQaUFvYm5WdFltVnlLVHRjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdFZ2MybHRjR3hsSUhOMGNtbHVaeUIwYnlCemRISnBibWNnWkdsamRHbHZibUZ5ZVM1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFkSGx3WlNCVGRISnBibWRFYVdOMGFXOXVZWEo1WEc0Z0tpOWNibVY0Y0c5eWRDQjBlWEJsSUZOMGNtbHVaMFJwWTNScGIyNWhjbmtnUFNCN1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5mVHRjYmlKZGZRPT0iLCJpbXBvcnQgeyBWZWN0b3IgfSBmcm9tICcuL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7IHJhbmRvbUZsb2F0LCByYW5kb21JbnQgfSBmcm9tICcuL3JhbmRvbSc7XG4vKipcbiAqIEFzc2VydHMgYSBjb25kaXRpb24gYnkgdGhyb3dpbmcgYW4gRXJyb3IuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtib29sZWFufSBbY29uZGl0aW9uPWZhbHNlXSBDb25kaXRpb24gdG8gYXNzZXJ0LlxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlPSdBc3NlcnRpb24gZXJyb3IuJ10gTWVzc2FnZSB0byBvdXRwdXQuXG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24gPSBmYWxzZSwgbWVzc2FnZSA9ICdBc3NlcnRpb24gZXJyb3IuJykge1xuICAgIGlmICghY29uZGl0aW9uKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4vKipcbiAqIENyZWF0ZXMgbmV3IHR3by1kaW1lbnNpb25hbCBhcnJheSBhbmQgZmlsbHMgaXQgd2l0aCB0aGUgdmFsdWUgZ2l2ZW4uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjEgVGhlIGZpcnN0IGRpbWVuc2lvbiBvZiB0aGUgY29vcmRpbmF0ZXMgKG51bWJlciBvZiByb3dzKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24yIFRoZSBzZWNvbmQgZGltZW5zaW9uIG9mIHRoZSBjb29yZGluYXRlcyAobnVtYmVyIG9mIGNvbHVtbnMpLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsPTBdIEEgdmFsdWUgdG8gZmlsbCB0aGUgY29vcmRpbmF0ZXMgd2l0aC5cbiAqIEByZXR1cm4ge0Nvb3JkaW5hdGVzfSBBIHR3by1kaW1lbnNpb25hbCBmaWxsZWQgd2l0aCB0aGUgdmFsdWUgZ2l2ZW4uXG4gKiBAdG9kbyBNaWdodCBiZSBzbG93IHNpbmNlIHVzZWQgQXJyYXkubWFwLiBQcm9iYWJseSBuZWVkcyBwZXJmb3JtYW5jZSByZXZpc2lvbi5cbiAqL1xuZnVuY3Rpb24gaW5pdENvb3JkaW5hdGVzKGRpbWVuc2lvbjEsIGRpbWVuc2lvbjIsIGZpbGwgPSAwKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheShkaW1lbnNpb24xKS5maWxsKGZpbGwpLm1hcCgoKSA9PiAobmV3IFZlY3RvcihkaW1lbnNpb24yKS5maWxsKGZpbGwpKSk7XG59XG4vKipcbiAqIFRyYW5zcG9zZSBtYXRyaXguXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeCBUaGUgbWF0cml4IHRvIGJlIHRyYW5zcG9zZWQuXG4gKiBAcmV0dXJuIHtNYXRyaXh9IFRyYW5zcG9zZWQgbWF0cml4LlxuICogQHRvZG8gTWlnaHQgYmUgc2xvdyBzaW5jZSB1c2VkIEFycmF5Lm1hcC4gUHJvYmFibHkgbmVlZHMgcGVyZm9ybWFuY2UgcmV2aXNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2VNYXRyaXgobWF0cml4KSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheShtYXRyaXhbMF0ubGVuZ3RoKS5maWxsKDApXG4gICAgICAgIC5tYXAoKF8sIGkpID0+IChuZXcgVmVjdG9yKG1hdHJpeC5sZW5ndGgpLmZpbGwoMCkubWFwKChfLCBqKSA9PiAobWF0cml4W2pdW2ldKSkpKTtcbn1cbi8qKlxuICogQWRkcyB0d28gdmVjdG9ycyB3aXRoIHRoZSBzZWNvbmQgb25lIHRvIGJlIG11bHRpcGxpZWQgYnkgdGhlIGdpdmVuIHJhdGlvLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7VmVjdG9yfSBwIFRoZSBmaXJzdCB2ZWN0b3IgdG8gYWRkLlxuICogQHBhcmFtIHtWZWN0b3J9IHEgVGhlIHNlY29uZCB2ZWN0b3IgdG8gYWRkLlxuICogQHBhcmFtIHtudW1iZXJ9IFttdWx0aXBsaWVyPTFdIEEgbXVsdGlwbGllciB0byBiZSB1c2VkIGJlZm9yZSB0aGUgc2Vjb25kIHZlY3RvciBpcyBhZGRlZC5cbiAqIEByZXR1cm4ge1ZlY3Rvcn0gTmV3IHZlY3RvciBjb250YWluZWQgdGhlIHJlc3VsdCBvZiBvcGVyYXRpb24gcCttdWx0aXBsaWVyKnEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZWN0b3JBZGQocCwgcSwgbXVsdGlwbGllciA9IDEpIHtcbiAgICBjb25zdCBuSXRlbXMgPSBwLmxlbmd0aDtcbiAgICBhc3NlcnQobkl0ZW1zID09IHEubGVuZ3RoLCAnVmVjdG9yIGxlbmd0aHMgZG8gbm90IG1hdGNoLicpO1xuICAgIGNvbnN0IHRvdGFsID0gbmV3IFZlY3RvcihuSXRlbXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcC5sZW5ndGg7ICsraSlcbiAgICAgICAgdG90YWxbaV0gPSBwW2ldICsgbXVsdGlwbGllciAqIHFbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuLyoqXG4gKiBTdW1zIHRoZSB2ZWN0b3IncyBpdGVtcy5cbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gdiBUaGUgdmVjdG9yIHRvIGJlIHN1bW1lZC5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZlY3RvcidzIGl0ZW1zIHN1bS5cbiAqL1xuZnVuY3Rpb24gaXRlbXNTdW0odikge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgKytpKVxuICAgICAgICB0b3RhbCArPSB2W2ldO1xuICAgIHJldHVybiB0b3RhbDtcbn1cbi8qKlxuICogU3VxYXJlcyB0aGUgdmVjdG9yJ3MgaXRlbXMuXG4gKlxuICogQHBhcmFtIHtWZWN0b3J9IHYgVGhlIHZlY3RvciB0byBzcXVhcmUuXG4gKiBAcmV0dXJuIHtWZWN0b3J9IEEgbmV3IHZlY3RvciBjb250YWluaW5nIHRoZSBvcmlnaW5hbCdzIGl0ZW1zIHNxdWFyZWQuXG4gKi9cbmZ1bmN0aW9uIHZlY3RvclNxdWFyZSh2KSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gdi5sZW5ndGg7XG4gICAgY29uc3QgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgKytpKVxuICAgICAgICB0b3RhbFtpXSA9IHZbaV0gKiB2W2ldO1xuICAgIHJldHVybiB0b3RhbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB2ZWN0b3JMZW5ndGgodikge1xuICAgIGxldCBzcXJTdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7IGkrKylcbiAgICAgICAgc3FyU3VtICs9IHZbaV0gKiB2W2ldO1xuICAgIHJldHVybiBNYXRoLnNxcnQoc3FyU3VtKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB2ZWN0b3JEb3RQcm9kdWN0KHYxLCB2Mikge1xuICAgIGlmICh2MS5sZW5ndGggIT0gdjIubGVuZ3RoKVxuICAgICAgICB0aHJvdyBFcnJvcignVGhlIGRpbWVuc2lvbmFsaXR5IG9mIHRoZSB2ZWN0b3JzIG11c3QgbWF0Y2gnKTtcbiAgICBsZXQgcHJvZCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2MS5sZW5ndGg7IGkrKylcbiAgICAgICAgcHJvZCArPSB2MVtpXSAqIHYyW2ldO1xuICAgIHJldHVybiBwcm9kO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZpbGxlZCB3aXRoIHJhbmRvbSBmbG9hdGluZyBwb2ludCB2YWx1ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjEgVGhlIGZpcnN0IGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4LlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjIgVGhlIHNlY29uZCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGU9MS5dIE1heCB2YWx1ZSBnaXZlbiBieSByYW5kb20gZ2VuZXJhdG9yLlxuICogQHJldHVybiB7TWF0cml4fSBBIG5ldyBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50ICB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsUmFuZG9tTWF0cml4KGRpbWVuc2lvbjEsIGRpbWVuc2lvbjIsIHNjYWxlID0gMS4pIHtcbiAgICBjb25zdCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1lbnNpb24xOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaW1lbnNpb24yOyArK2opXG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSByYW5kb21GbG9hdChzY2FsZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3Rvci5cbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yLlxuICogQHJldHVybiB7bnVtYmVyfSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gdmVjdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHAsIHEpIHtcbiAgICBjb25zdCBkaWZmID0gdmVjdG9yQWRkKHAsIHEsIC0xKTtcbiAgICBjb25zdCBzcWRpZmYgPSB2ZWN0b3JTcXVhcmUoZGlmZik7XG4gICAgY29uc3Qgc3FkaWZmU3VtbSA9IGl0ZW1zU3VtKHNxZGlmZik7XG4gICAgcmV0dXJuIE1hdGguc3FydChzcWRpZmZTdW1tKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIGRpc3RhbmNlIG1hdHJpeCB1c2luZyBhIGN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3RvcnN9IGRhdGEgSW5wdXQgdmVjdG9ycyB0byBjYWxjdWxhdGUgZGlzdGFuY2VzLlxuICogQHBhcmFtIHtEaXN0YW5jZU1ldHJpY30gZGlzdGFuY2UgQ3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7TWF0cml4fSBDYWxjdWxhdGVkIGN1c3RvbSBkaXN0YW5jZSBtYXRyaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjRGlzdGFuY2VNYXRyaXgoZGF0YSwgZGlzdGFuY2UpIHtcbiAgICBjb25zdCBuSXRlbXMgPSBkYXRhLmxlbmd0aDtcbiAgICBjb25zdCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMobkl0ZW1zLCBuSXRlbXMsIDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgbkl0ZW1zOyArK2opIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSAoZGF0YVtpXSA9PSBudWxsKSB8fCAoZGF0YVtqXSA9PSBudWxsKSA/IDAgOiBkaXN0YW5jZShkYXRhW2ldLCBkYXRhW2pdKTtcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtqXVtpXSA9IGQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbi8qKiBHZW5lcmF0ZXMgYXJyYXkgZnJvbSBhIHJhbmdlIFtiZWdpbjsgZW5kXSBvciBbYmVnaW47IGVuZCkgaWYgZW5kRXhjbHVzaXZlLiAqKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5SYW5nZShiZWdpbiwgZW5kLCBlbmRFeGNsdXNpdmUgPSBmYWxzZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGVuZCAtIGJlZ2luICsgKGVuZEV4Y2x1c2l2ZSA/IDAgOiAxKTtcbiAgICBjb25zdCBzZXJpZXMgPSBuZXcgSW50MzJBcnJheShuSXRlbXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpXG4gICAgICAgIHNlcmllc1tpXSA9IGJlZ2luICsgaTtcbiAgICByZXR1cm4gc2VyaWVzO1xufVxuLyoqXG4qIFJldHVybnMgb3JkZXIgb2YgdmFsdWVzIGFzIGlmIHRoZXkgYXJlIHNvcnRlZC5cbipcbiogQGV4cG9ydFxuKiBAcGFyYW0ge2FueVtdfSB2YWx1ZXMgSW5wdXQgYXJyYXkuXG4qIEBwYXJhbSB7Ym9vbGVhbn0gW3JldmVyc2U9ZmFsc2VdIFdoZXRoZXIgdG8gcmV0dXJuIHJldmVyc2VkIG9yZGVyLlxuKiBAcmV0dXJuIHtudW1iZXJbXX0gVGhlIG9yZGVyIGNvbXB1dGVkLlxuKi9cbmV4cG9ydCBmdW5jdGlvbiBhcmdTb3J0KHZhbHVlcywgcmV2ZXJzZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc29ydGZuID0gcmV2ZXJzZSA/IChhLCBiKSA9PiAoYlswXSAtIGFbMF0pIDogKGEsIGIpID0+IChhWzBdIC0gYlswXSk7XG4gICAgY29uc3QgZGVjb3IgPSAodiwgaSkgPT4gW3YsIGldOyAvLyBzZXQgaW5kZXggdG8gdmFsdWVcbiAgICBjb25zdCB1bmRlY29yID0gKGEpID0+IGFbMV07IC8vIGxlYXZlIG9ubHkgaW5kZXhcbiAgICBjb25zdCBfYXJnc29ydCA9IChhcnIpID0+IGFyci5tYXAoZGVjb3IpLnNvcnQoc29ydGZuKS5tYXAodW5kZWNvcik7XG4gICAgcmV0dXJuIF9hcmdzb3J0KHZhbHVlcyk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4ZXMgb2YgdGhlIG1vc3QgZGl2ZXJzZSBvYmplY3RzIGFjY29yZGluZyB0byB0aGUgZGlzdCBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0c1xuICogQHBhcmFtIHtudW1iZXJ9IG4gbnVtYmVyIG9mIGRpdmVyc2UgZWxlbWVudHMgdG8gZmluZFxuICogQHBhcmFtIHsoaTE6IG51bWJlciwgaTI6IG51bWJlcikgPT4gbnVtYmVyfSBkaXN0IGEgZnVuY3Rpb24gd2hpY2ggY2FsY3VsYXRlcyBkaXN0YW5jZSBiZXR3ZWVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdvIG9iamVjdHMgdXNpbmcgdGhlaXIgaW5kZXhlc1xuICogQHJldHVybnMge251bWJlcltdfSBUaGUgaW5kZXhlcyBvZiB0aGUgbW9zdCBkaXZlcnNlIG9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpdmVyc2VTdWJzZXQobGVuZ3RoLCBuLCBkaXN0KSB7XG4gICAgZnVuY3Rpb24gbWF4QnkodmFsdWVzLCBvcmRlckJ5KSB7XG4gICAgICAgIGxldCBtYXhWYWx1ZSA9IG51bGw7XG4gICAgICAgIGxldCBtYXhPcmRlckJ5ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudE9yZGVyQnkgPSBvcmRlckJ5KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKG1heE9yZGVyQnkgPT0gbnVsbCB8fCBlbGVtZW50T3JkZXJCeSA+IG1heE9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbWF4T3JkZXJCeSA9IGVsZW1lbnRPcmRlckJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgICB9XG4gICAgY29uc3Qgc3Vic2V0ID0gW3JhbmRvbUludChsZW5ndGggLSAxKV07XG4gICAgY29uc3QgY29tcGxlbWVudCA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICghc3Vic2V0LmluY2x1ZGVzKGkpKVxuICAgICAgICAgICAgY29tcGxlbWVudC5hZGQoaSk7XG4gICAgfVxuICAgIHdoaWxlIChzdWJzZXQubGVuZ3RoIDwgbikge1xuICAgICAgICBjb25zdCBpZHggPSBtYXhCeShjb21wbGVtZW50LnZhbHVlcygpLCAoaSkgPT4gTWF0aC5taW4uYXBwbHkoTWF0aCwgc3Vic2V0Lm1hcChmdW5jdGlvbiAodmFsLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGRpc3QoaSwgdmFsKTtcbiAgICAgICAgfSkpKTtcbiAgICAgICAgaWYgKGlkeCkge1xuICAgICAgICAgICAgc3Vic2V0LnB1c2goaWR4KTtcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuZGVsZXRlKGlkeCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1YnNldDtcbn1cbi8qKlxuICogUmV0dXJucyBub3JtYWxpemVkIHZlY3RvclxuICogQHBhcmFtIHtWZWN0b3J9IGRhdGEgbnVtZXJpY2FsIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUoZGF0YSkge1xuICAgIGxldCBtZWFuID0gMDtcbiAgICBsZXQgc3RkID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpXG4gICAgICAgIG1lYW4gKz0gZGF0YVtpXTtcbiAgICBtZWFuIC89IGRhdGEubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSlcbiAgICAgICAgc3RkICs9IChkYXRhW2ldIC0gbWVhbikgKiAoZGF0YVtpXSAtIG1lYW4pO1xuICAgIHN0ZCA9IE1hdGguc3FydChzdGQgLyBkYXRhLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKVxuICAgICAgICBkYXRhW2ldID0gKGRhdGFbaV0gLSBtZWFuKSAvIHN0ZDtcbiAgICByZXR1cm4gZGF0YTtcbn1cbi8qKlxuICogRmluZHMgc2V0IGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gbGlzdHMuXG4gKiBAcGFyYW0ge2FueVtdfSBhIFRoZSBmaXJzdCBsaXN0LlxuICogQHBhcmFtIHthbnlbXX0gYiBUaGUgc2Vjb25kIGxpc3QuXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldERpZmZlcmVuY2UoYSwgYikge1xuICAgIGNvbnN0IGJTZXQgPSBuZXcgU2V0KGIpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYS5maWx0ZXIoKHgpID0+ICFiU2V0Lmhhcyh4KSkpLnZhbHVlcygpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRtVmpkRzl5TFc5d1pYSmhkR2x2Ym5NdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUoyWldOMGIzSXRiM0JsY21GMGFXOXVjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFWTXNUVUZCVFN4RlFVRjFReXhOUVVGTkxIRkNRVUZ4UWl4RFFVRkRPMEZCUTNwR0xFOUJRVThzUlVGQlF5eFhRVUZYTEVWQlFVVXNVMEZCVXl4RlFVRkRMRTFCUVUwc1ZVRkJWU3hEUVVGRE8wRkJSV2hFT3pzN096czdPMGRCVDBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzVFVGQlRTeERRVUZETEZsQlFYRkNMRXRCUVVzc1JVRkJSU3hWUVVGclFpeHJRa0ZCYTBJN1NVRkRja1lzU1VGQlNTeERRVUZETEZOQlFWTTdVVUZEV2l4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlF6ZENMRU5CUVVNN1FVRkZSRHM3T3pzN096czdSMEZSUnp0QlFVTklMRk5CUVZNc1pVRkJaU3hEUVVGRExGVkJRV3RDTEVWQlFVVXNWVUZCYTBJc1JVRkJSU3hQUVVGbExFTkJRVU03U1VGREwwVXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVONlJpeERRVUZETzBGQlJVUTdPenM3T3pzN1IwRlBSenRCUVVOSUxFMUJRVTBzVlVGQlZTeGxRVUZsTEVOQlFVTXNUVUZCWXp0SlFVTTFReXhQUVVGUExFbEJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNaRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM1JHTEVOQlFVTTdRVUZGUkRzN096czdPenM3UjBGUlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4VFFVRlRMRU5CUVVNc1EwRkJVeXhGUVVGRkxFTkJRVk1zUlVGQlJTeGhRVUZ4UWl4RFFVRkRPMGxCUTNCRkxFMUJRVTBzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkZlRUlzVFVGQlRTeERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxEaENRVUU0UWl4RFFVRkRMRU5CUVVNN1NVRkZNMFFzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRmFrTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRE8xRkJReTlDTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NWVUZCVlN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVVYwUXl4UFFVRlBMRXRCUVVzc1EwRkJRenRCUVVObUxFTkJRVU03UVVGRlJEczdPenM3UjBGTFJ6dEJRVU5JTEZOQlFWTXNVVUZCVVN4RFFVRkRMRU5CUVZNN1NVRkRla0lzU1VGQlNTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUldRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETzFGQlF5OUNMRXRCUVVzc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGYUVJc1QwRkJUeXhMUVVGTExFTkJRVU03UVVGRFppeERRVUZETzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4VFFVRlRMRmxCUVZrc1EwRkJReXhEUVVGVE8wbEJRemRDTEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRGVFSXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZGYWtNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETzFGQlF5OUNMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlJYcENMRTlCUVU4c1MwRkJTeXhEUVVGRE8wRkJRMllzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4WlFVRlpMRU5CUVVNc1EwRkJVenRKUVVOd1F5eEpRVUZKTEUxQlFVMHNSMEZCVnl4RFFVRkRMRU5CUVVNN1NVRkRka0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMUZCUTNaRExFMUJRVTBzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzaENMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTXpRaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdkQ1FVRm5RaXhEUVVGRExFVkJRVlVzUlVGQlJTeEZRVUZWTzBsQlEzSkVMRWxCUVVrc1JVRkJSU3hEUVVGRExFMUJRVTBzU1VGQlNTeEZRVUZGTEVOQlFVTXNUVUZCVFR0UlFVTjRRaXhOUVVGTkxFdEJRVXNzUTBGQlF5dzRRMEZCT0VNc1EwRkJReXhEUVVGRE8wbEJRemxFTEVsQlFVa3NTVUZCU1N4SFFVRlhMRU5CUVVNc1EwRkJRenRKUVVOeVFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRlhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRlRU1zU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZUVJc1QwRkJUeXhKUVVGSkxFTkJRVU03UVVGRFpDeERRVUZETzBGQlJVUTdPenM3T3pzN08wZEJVVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNaMEpCUVdkQ0xFTkJRVU1zVlVGQmEwSXNSVUZCUlN4VlFVRnJRaXhGUVVGRkxGRkJRV2RDTEVWQlFVVTdTVUZEZWtZc1RVRkJUU3hOUVVGTkxFZEJRVWNzWlVGQlpTeERRVUZETEZWQlFWVXNSVUZCUlN4VlFVRlZMRU5CUVVNc1EwRkJRenRKUVVWMlJDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVlVGQlZTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZPMUZCUTI1RExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhWUVVGVkxFVkJRVVVzUlVGQlJTeERRVUZETzFsQlEycERMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4WFFVRlhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UzBGRGNrTTdTVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRCUVVOb1FpeERRVUZETzBGQlJVUTdPenM3T3pzN1IwRlBSenRCUVVOSUxFMUJRVTBzVlVGQlZTd3dRa0ZCTUVJc1EwRkJReXhEUVVGVExFVkJRVVVzUTBGQlV6dEpRVU0zUkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhUUVVGVExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMnBETEUxQlFVMHNUVUZCVFN4SFFVRkhMRmxCUVZrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU5zUXl4TlFVRk5MRlZCUVZVc1IwRkJSeXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZEY0VNc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMEZCUXk5Q0xFTkJRVU03UVVGRlJEczdPenM3T3p0SFFVOUhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHdENRVUZyUWl4RFFVRkRMRWxCUVdFc1JVRkJSU3hSUVVGM1FqdEpRVU40UlN4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlF6TkNMRTFCUVUwc1RVRkJUU3hIUVVGSExHVkJRV1VzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSV3hFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRMMElzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRia01zVFVGQlRTeERRVUZETEVkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTXhSaXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOcVF6dExRVU5HTzBsQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRhRUlzUTBGQlF6dEJRVVZFTEd0R1FVRnJSanRCUVVOc1JpeE5RVUZOTEZWQlFWVXNVVUZCVVN4RFFVRkRMRXRCUVdFc1JVRkJSU3hIUVVGWExFVkJRVVVzV1VGQldTeEhRVUZITEV0QlFVczdTVUZEZGtVc1RVRkJUU3hOUVVGTkxFZEJRVWNzUjBGQlJ5eEhRVUZITEV0QlFVc3NSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOd1JDeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVVYwUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJRenRSUVVNM1FpeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVVY0UWl4UFFVRlBMRTFCUVUwc1EwRkJRenRCUVVOb1FpeERRVUZETzBGQlJVRTdPenM3T3pzN1JVRlBSVHRCUVVOSUxFMUJRVTBzVlVGQlZTeFBRVUZQTEVOQlFVTXNUVUZCWVN4RlFVRkZMRTlCUVU4c1IwRkJSeXhMUVVGTE8wbEJRM0JFTEUxQlFVMHNUVUZCVFN4SFFVRkhMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZSTEVWQlFVVXNRMEZCVVN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRlJMRVZCUVVVc1EwRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjJSeXhOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVMHNSVUZCUlN4RFFVRlRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc2NVSkJRWEZDTzBsQlEyeEZMRTFCUVUwc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlVTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eHRRa0ZCYlVJN1NVRkRka1FzVFVGQlRTeFJRVUZSTEVkQlFVY3NRMEZCUXl4SFFVRlZMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRKUVVNeFJTeFBRVUZQTEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNeFFpeERRVUZETzBGQlJVUTdPenM3T3pzN1IwRlBSenRCUVVOSUxFMUJRVTBzVlVGQlZTeG5Ra0ZCWjBJc1EwRkJReXhOUVVGakxFVkJRVVVzUTBGQlV5eEZRVUZGTEVsQlFYZERPMGxCUTJ4SExGTkJRVk1zUzBGQlN5eERRVUZETEUxQlFXZERMRVZCUVVVc1QwRkJPRUk3VVVGRE4wVXNTVUZCU1N4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRM0JDTEVsQlFVa3NWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVWMFFpeExRVUZMTEUxQlFVMHNUMEZCVHl4SlFVRkpMRTFCUVUwc1JVRkJSVHRaUVVNMVFpeE5RVUZOTEdOQlFXTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4VlFVRlZMRWxCUVVrc1NVRkJTU3hKUVVGSkxHTkJRV01zUjBGQlJ5eFZRVUZWTEVWQlFVVTdaMEpCUTNKRUxGRkJRVkVzUjBGQlJ5eFBRVUZQTEVOQlFVTTdaMEpCUTI1Q0xGVkJRVlVzUjBGQlJ5eGpRVUZqTEVOQlFVTTdZVUZETjBJN1UwRkRSanRSUVVORUxFOUJRVThzVVVGQlVTeERRVUZETzBsQlEyeENMRU5CUVVNN1NVRkZSQ3hOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU4yUXl4TlFVRk5MRlZCUVZVc1IwRkJSeXhKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETzBsQlJUZENMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGREwwSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzSkNMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTMEZEY2tJN1NVRkZSQ3hQUVVGUExFMUJRVTBzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMUZCUTNoQ0xFMUJRVTBzUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZEWml4VlFVRlZMRU5CUVVNc1RVRkJUU3hGUVVFNFFpeEZRVU12UXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNWVUZCVXl4SFFVRkhMRVZCUVVVc1MwRkJTenRaUVVONFJDeFBRVUZQTEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGRFSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMUFzU1VGQlNTeEhRVUZITEVWQlFVVTdXVUZEVUN4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEZUVJN1MwRkRSanRKUVVORUxFOUJRVThzVFVGQlRTeERRVUZETzBGQlEyaENMRU5CUVVNN1FVRkZSRHM3TzBkQlIwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1UwRkJVeXhEUVVGRExFbEJRVms3U1VGRGNFTXNTVUZCU1N4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMklzU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUlZvc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETzFGQlEyeERMRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGYkVJc1NVRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZGY0VJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETzFGQlEyeERMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVVM1F5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUlc1RExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXp0UlFVTnNReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMGxCUlc1RExFOUJRVThzU1VGQlNTeERRVUZETzBGQlEyUXNRMEZCUXp0QlFVVkVPenM3T3p0SFFVdEhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHRkJRV0VzUTBGQlF5eERRVUZSTEVWQlFVVXNRMEZCVVR0SlFVTTVReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVONFFpeFBRVUZQTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUTNKRkxFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZTAxaGRISnBlQ3dnVm1WamRHOXlMQ0JEYjI5eVpHbHVZWFJsY3l3Z1ZtVmpkRzl5Y3l3Z1JHbHpkR0Z1WTJWTlpYUnlhV045SUdaeWIyMGdKeTR2ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0eVlXNWtiMjFHYkc5aGRDd2djbUZ1Wkc5dFNXNTBmU0JtY205dElDY3VMM0poYm1SdmJTYzdYRzVjYmk4cUtseHVJQ29nUVhOelpYSjBjeUJoSUdOdmJtUnBkR2x2YmlCaWVTQjBhSEp2ZDJsdVp5QmhiaUJGY25KdmNpNWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJRnRqYjI1a2FYUnBiMjQ5Wm1Gc2MyVmRJRU52Ym1ScGRHbHZiaUIwYnlCaGMzTmxjblF1WEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1cyMWxjM05oWjJVOUowRnpjMlZ5ZEdsdmJpQmxjbkp2Y2k0blhTQk5aWE56WVdkbElIUnZJRzkxZEhCMWRDNWNiaUFxSUVCMGFISnZkM01nZTBWeWNtOXlmVnh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1lYTnpaWEowS0dOdmJtUnBkR2x2YmpvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTENCdFpYTnpZV2RsT2lCemRISnBibWNnUFNBblFYTnpaWEowYVc5dUlHVnljbTl5TGljcElIdGNiaUFnYVdZZ0tDRmpiMjVrYVhScGIyNHBYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0cxbGMzTmhaMlVwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdibVYzSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0JoY25KaGVTQmhibVFnWm1sc2JITWdhWFFnZDJsMGFDQjBhR1VnZG1Gc2RXVWdaMmwyWlc0dVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUdScGJXVnVjMmx2YmpFZ1ZHaGxJR1pwY25OMElHUnBiV1Z1YzJsdmJpQnZaaUIwYUdVZ1kyOXZjbVJwYm1GMFpYTWdLRzUxYldKbGNpQnZaaUJ5YjNkektTNWNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JrYVcxbGJuTnBiMjR5SUZSb1pTQnpaV052Ym1RZ1pHbHRaVzV6YVc5dUlHOW1JSFJvWlNCamIyOXlaR2x1WVhSbGN5QW9iblZ0WW1WeUlHOW1JR052YkhWdGJuTXBMbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUZ0bWFXeHNQVEJkSUVFZ2RtRnNkV1VnZEc4Z1ptbHNiQ0IwYUdVZ1kyOXZjbVJwYm1GMFpYTWdkMmwwYUM1Y2JpQXFJRUJ5WlhSMWNtNGdlME52YjNKa2FXNWhkR1Z6ZlNCQklIUjNieTFrYVcxbGJuTnBiMjVoYkNCbWFXeHNaV1FnZDJsMGFDQjBhR1VnZG1Gc2RXVWdaMmwyWlc0dVhHNGdLaUJBZEc5a2J5Qk5hV2RvZENCaVpTQnpiRzkzSUhOcGJtTmxJSFZ6WldRZ1FYSnlZWGt1YldGd0xpQlFjbTlpWVdKc2VTQnVaV1ZrY3lCd1pYSm1iM0p0WVc1alpTQnlaWFpwYzJsdmJpNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2FXNXBkRU52YjNKa2FXNWhkR1Z6S0dScGJXVnVjMmx2YmpFNklHNTFiV0psY2l3Z1pHbHRaVzV6YVc5dU1qb2diblZ0WW1WeUxDQm1hV3hzT2lCdWRXMWlaWElnUFNBd0tUb2dRMjl2Y21ScGJtRjBaWE1nZTF4dUlDQnlaWFIxY200Z2JtVjNJRUZ5Y21GNUtHUnBiV1Z1YzJsdmJqRXBMbVpwYkd3b1ptbHNiQ2t1YldGd0tDZ3BJRDArSUNodVpYY2dWbVZqZEc5eUtHUnBiV1Z1YzJsdmJqSXBMbVpwYkd3b1ptbHNiQ2twS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJVY21GdWMzQnZjMlVnYldGMGNtbDRMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCd1lYSmhiU0I3VFdGMGNtbDRmU0J0WVhSeWFYZ2dWR2hsSUcxaGRISnBlQ0IwYnlCaVpTQjBjbUZ1YzNCdmMyVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN1RXRjBjbWw0ZlNCVWNtRnVjM0J2YzJWa0lHMWhkSEpwZUM1Y2JpQXFJRUIwYjJSdklFMXBaMmgwSUdKbElITnNiM2NnYzJsdVkyVWdkWE5sWkNCQmNuSmhlUzV0WVhBdUlGQnliMkpoWW14NUlHNWxaV1J6SUhCbGNtWnZjbTFoYm1ObElISmxkbWx6YVc5dUxseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnZEhKaGJuTndiM05sVFdGMGNtbDRLRzFoZEhKcGVEb2dUV0YwY21sNEtUb2dUV0YwY21sNElIdGNiaUFnY21WMGRYSnVJRzVsZHlCQmNuSmhlU2h0WVhSeWFYaGJNRjB1YkdWdVozUm9LUzVtYVd4c0tEQXBYRzRnSUNBZ0xtMWhjQ2dvWHl3Z2FTa2dQVDRnS0c1bGR5QldaV04wYjNJb2JXRjBjbWw0TG14bGJtZDBhQ2t1Wm1sc2JDZ3dLUzV0WVhBb0tGOHNJR29wSUQwK0lDaHRZWFJ5YVhoYmFsMWJhVjBwS1NrcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVGa1pITWdkSGR2SUhabFkzUnZjbk1nZDJsMGFDQjBhR1VnYzJWamIyNWtJRzl1WlNCMGJ5QmlaU0J0ZFd4MGFYQnNhV1ZrSUdKNUlIUm9aU0JuYVhabGJpQnlZWFJwYnk1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFjR0Z5WVcwZ2UxWmxZM1J2Y24wZ2NDQlVhR1VnWm1seWMzUWdkbVZqZEc5eUlIUnZJR0ZrWkM1Y2JpQXFJRUJ3WVhKaGJTQjdWbVZqZEc5eWZTQnhJRlJvWlNCelpXTnZibVFnZG1WamRHOXlJSFJ2SUdGa1pDNWNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JiYlhWc2RHbHdiR2xsY2oweFhTQkJJRzExYkhScGNHeHBaWElnZEc4Z1ltVWdkWE5sWkNCaVpXWnZjbVVnZEdobElITmxZMjl1WkNCMlpXTjBiM0lnYVhNZ1lXUmtaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIdFdaV04wYjNKOUlFNWxkeUIyWldOMGIzSWdZMjl1ZEdGcGJtVmtJSFJvWlNCeVpYTjFiSFFnYjJZZ2IzQmxjbUYwYVc5dUlIQXJiWFZzZEdsd2JHbGxjaXB4TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdkbVZqZEc5eVFXUmtLSEE2SUZabFkzUnZjaXdnY1RvZ1ZtVmpkRzl5TENCdGRXeDBhWEJzYVdWeU9pQnVkVzFpWlhJZ1BTQXhLVG9nVm1WamRHOXlJSHRjYmlBZ1kyOXVjM1FnYmtsMFpXMXpJRDBnY0M1c1pXNW5kR2c3WEc1Y2JpQWdZWE56WlhKMEtHNUpkR1Z0Y3lBOVBTQnhMbXhsYm1kMGFDd2dKMVpsWTNSdmNpQnNaVzVuZEdoeklHUnZJRzV2ZENCdFlYUmphQzRuS1R0Y2JseHVJQ0JqYjI1emRDQjBiM1JoYkNBOUlHNWxkeUJXWldOMGIzSW9ia2wwWlcxektUdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIQXViR1Z1WjNSb095QXJLMmtwWEc0Z0lDQWdkRzkwWVd4YmFWMGdQU0J3VzJsZElDc2diWFZzZEdsd2JHbGxjaUFxSUhGYmFWMDdYRzVjYmlBZ2NtVjBkWEp1SUhSdmRHRnNPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGTjFiWE1nZEdobElIWmxZM1J2Y2lkeklHbDBaVzF6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3Vm1WamRHOXlmU0IySUZSb1pTQjJaV04wYjNJZ2RHOGdZbVVnYzNWdGJXVmtMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNCVWFHVWdkbVZqZEc5eUozTWdhWFJsYlhNZ2MzVnRMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQnBkR1Z0YzFOMWJTaDJPaUJXWldOMGIzSXBPaUJ1ZFcxaVpYSWdlMXh1SUNCc1pYUWdkRzkwWVd3Z1BTQXdPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkaTVzWlc1bmRHZzdJQ3NyYVNsY2JpQWdJQ0IwYjNSaGJDQXJQU0IyVzJsZE8xeHVYRzRnSUhKbGRIVnliaUIwYjNSaGJEdGNibjFjYmx4dUx5b3FYRzRnS2lCVGRYRmhjbVZ6SUhSb1pTQjJaV04wYjNJbmN5QnBkR1Z0Y3k1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTFabFkzUnZjbjBnZGlCVWFHVWdkbVZqZEc5eUlIUnZJSE54ZFdGeVpTNWNiaUFxSUVCeVpYUjFjbTRnZTFabFkzUnZjbjBnUVNCdVpYY2dkbVZqZEc5eUlHTnZiblJoYVc1cGJtY2dkR2hsSUc5eWFXZHBibUZzSjNNZ2FYUmxiWE1nYzNGMVlYSmxaQzVjYmlBcUwxeHVablZ1WTNScGIyNGdkbVZqZEc5eVUzRjFZWEpsS0hZNklGWmxZM1J2Y2lrNklGWmxZM1J2Y2lCN1hHNGdJR052Ym5OMElHNUpkR1Z0Y3lBOUlIWXViR1Z1WjNSb08xeHVJQ0JqYjI1emRDQjBiM1JoYkNBOUlHNWxkeUJXWldOMGIzSW9ia2wwWlcxektUdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIWXViR1Z1WjNSb095QXJLMmtwWEc0Z0lDQWdkRzkwWVd4YmFWMGdQU0IyVzJsZElDb2dkbHRwWFR0Y2JseHVJQ0J5WlhSMWNtNGdkRzkwWVd3N1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIyWldOMGIzSk1aVzVuZEdnb2Rqb2dWbVZqZEc5eUtUb2diblZ0WW1WeUlIdGNiaUFnYkdWMElITnhjbE4xYlRvZ2JuVnRZbVZ5SUQwZ01EdGNiaUFnWm05eUlDaHNaWFFnYVRvZ2JuVnRZbVZ5SUQwZ01Ec2dhU0E4SUhZdWJHVnVaM1JvT3lCcEt5c3BYRzRnSUNBZ2MzRnlVM1Z0SUNzOUlIWmJhVjBnS2lCMlcybGRPMXh1SUNCeVpYUjFjbTRnVFdGMGFDNXpjWEowS0hOeGNsTjFiU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjJaV04wYjNKRWIzUlFjbTlrZFdOMEtIWXhPaUJXWldOMGIzSXNJSFl5T2lCV1pXTjBiM0lwT2lCdWRXMWlaWElnZTF4dUlDQnBaaUFvZGpFdWJHVnVaM1JvSUNFOUlIWXlMbXhsYm1kMGFDbGNiaUFnSUNCMGFISnZkeUJGY25KdmNpZ25WR2hsSUdScGJXVnVjMmx2Ym1Gc2FYUjVJRzltSUhSb1pTQjJaV04wYjNKeklHMTFjM1FnYldGMFkyZ25LVHRjYmlBZ2JHVjBJSEJ5YjJRNklHNTFiV0psY2lBOUlEQTdYRzRnSUdadmNpQW9iR1YwSUdrNklHNTFiV0psY2lBOUlEQTdJR2tnUENCMk1TNXNaVzVuZEdnN0lHa3JLeWxjYmlBZ0lDQndjbTlrSUNzOUlIWXhXMmxkSUNvZ2RqSmJhVjA3WEc0Z0lISmxkSFZ5YmlCd2NtOWtPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQnRZWFJ5YVhnZ1ptbHNiR1ZrSUhkcGRHZ2djbUZ1Wkc5dElHWnNiMkYwYVc1bklIQnZhVzUwSUhaaGJIVmxjeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnWkdsdFpXNXphVzl1TVNCVWFHVWdabWx5YzNRZ1pHbHRaVzV6YVc5dUlHOW1JSFJvWlNCdFlYUnlhWGd1WEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1pHbHRaVzV6YVc5dU1pQlVhR1VnYzJWamIyNWtJR1JwYldWdWMybHZiaUJ2WmlCMGFHVWdiV0YwY21sNExseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRnR6WTJGc1pUMHhMbDBnVFdGNElIWmhiSFZsSUdkcGRtVnVJR0o1SUhKaGJtUnZiU0JuWlc1bGNtRjBiM0l1WEc0Z0tpQkFjbVYwZFhKdUlIdE5ZWFJ5YVhoOUlFRWdibVYzSUcxaGRISnBlQ0JtYVd4c1pXUWdkMmwwYUNCeVlXNWtiMjBnWm14dllYUnBibWNnY0c5cGJuUWdJSFpoYkhWbGN5NWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdacGJHeFNZVzVrYjIxTllYUnlhWGdvWkdsdFpXNXphVzl1TVRvZ2JuVnRZbVZ5TENCa2FXMWxibk5wYjI0eU9pQnVkVzFpWlhJc0lITmpZV3hsT2lCdWRXMWlaWElnUFNBeExpazZJRTFoZEhKcGVDQjdYRzRnSUdOdmJuTjBJRzFoZEhKcGVDQTlJR2x1YVhSRGIyOXlaR2x1WVhSbGN5aGthVzFsYm5OcGIyNHhMQ0JrYVcxbGJuTnBiMjR5S1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdScGJXVnVjMmx2YmpFN0lDc3JhU2tnZTF4dUlDQWdJR1p2Y2lBb2JHVjBJR29nUFNBd095QnFJRHdnWkdsdFpXNXphVzl1TWpzZ0t5dHFLVnh1SUNBZ0lDQWdiV0YwY21sNFcybGRXMnBkSUQwZ2NtRnVaRzl0Um14dllYUW9jMk5oYkdVcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdFlYUnlhWGc3WEc1OVhHNWNiaThxS2x4dUlDb2dRMkZzWTNWc1lYUmxjeUJGZFdOc2FXUmxZVzRnWkdsemRHRnVZMlVnWW1WMGQyVmxiaUIwZDI4Z2RtVmpkRzl5Y3k1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFjR0Z5WVcwZ2UxWmxZM1J2Y24wZ2NDQlVhR1VnWm1seWMzUWdkbVZqZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJSEVnVkdobElITmxZMjl1WkNCMlpXTjBiM0l1WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlFVjFZMnhwWkdWaGJpQmthWE4wWVc1alpTQmlaWFIzWldWdUlIUm9aU0JuYVhabGJpQjJaV04wYjNKekxseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTJGc1kzVnNZWFJsUlhWamJHbGtaV0Z1UkdsemRHRnVZMlVvY0RvZ1ZtVmpkRzl5TENCeE9pQldaV04wYjNJcE9pQnVkVzFpWlhJZ2UxeHVJQ0JqYjI1emRDQmthV1ptSUQwZ2RtVmpkRzl5UVdSa0tIQXNJSEVzSUMweEtUdGNiaUFnWTI5dWMzUWdjM0ZrYVdabUlEMGdkbVZqZEc5eVUzRjFZWEpsS0dScFptWXBPMXh1SUNCamIyNXpkQ0J6Y1dScFptWlRkVzF0SUQwZ2FYUmxiWE5UZFcwb2MzRmthV1ptS1R0Y2JpQWdjbVYwZFhKdUlFMWhkR2d1YzNGeWRDaHpjV1JwWm1aVGRXMXRLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRWdaR2x6ZEdGdVkyVWdiV0YwY21sNElIVnphVzVuSUdFZ1kzVnpkRzl0SUdScGMzUmhibU5sSUdaMWJtTjBhVzl1TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN1ZtVmpkRzl5YzMwZ1pHRjBZU0JKYm5CMWRDQjJaV04wYjNKeklIUnZJR05oYkdOMWJHRjBaU0JrYVhOMFlXNWpaWE11WEc0Z0tpQkFjR0Z5WVcwZ2UwUnBjM1JoYm1ObFRXVjBjbWxqZlNCa2FYTjBZVzVqWlNCRGRYTjBiMjBnWkdsemRHRnVZMlVnWm5WdVkzUnBiMjR1WEc0Z0tpQkFjbVYwZFhKdUlIdE5ZWFJ5YVhoOUlFTmhiR04xYkdGMFpXUWdZM1Z6ZEc5dElHUnBjM1JoYm1ObElHMWhkSEpwZUM1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR05oYkdORWFYTjBZVzVqWlUxaGRISnBlQ2hrWVhSaE9pQldaV04wYjNKekxDQmthWE4wWVc1alpUb2dSR2x6ZEdGdVkyVk5aWFJ5YVdNcE9pQk5ZWFJ5YVhnZ2UxeHVJQ0JqYjI1emRDQnVTWFJsYlhNZ1BTQmtZWFJoTG14bGJtZDBhRHRjYmlBZ1kyOXVjM1FnYldGMGNtbDRJRDBnYVc1cGRFTnZiM0prYVc1aGRHVnpLRzVKZEdWdGN5d2dia2wwWlcxekxDQXdLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzVKZEdWdGN6c2dLeXRwS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYWlBOUlHa2dLeUF4T3lCcUlEd2dia2wwWlcxek95QXJLMm9wSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1E2SUc1MWJXSmxjaUE5SUNoa1lYUmhXMmxkSUQwOUlHNTFiR3dwSUh4OElDaGtZWFJoVzJwZElEMDlJRzUxYkd3cElEOGdNQ0E2SUdScGMzUmhibU5sS0dSaGRHRmJhVjBzSUdSaGRHRmJhbDBwTzF4dUlDQWdJQ0FnYldGMGNtbDRXMmxkVzJwZElEMGdiV0YwY21sNFcycGRXMmxkSUQwZ1pEdGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUcxaGRISnBlRHRjYm4xY2JseHVMeW9xSUVkbGJtVnlZWFJsY3lCaGNuSmhlU0JtY205dElHRWdjbUZ1WjJVZ1cySmxaMmx1T3lCbGJtUmRJRzl5SUZ0aVpXZHBianNnWlc1a0tTQnBaaUJsYm1SRmVHTnNkWE5wZG1VdUlDb3FMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2RsYmxKaGJtZGxLR0psWjJsdU9pQnVkVzFpWlhJc0lHVnVaRG9nYm5WdFltVnlMQ0JsYm1SRmVHTnNkWE5wZG1VZ1BTQm1ZV3h6WlNrNklFbHVkRE15UVhKeVlYa2dlMXh1SUNCamIyNXpkQ0J1U1hSbGJYTWdQU0JsYm1RZ0xTQmlaV2RwYmlBcklDaGxibVJGZUdOc2RYTnBkbVVnUHlBd0lEb2dNU2s3WEc0Z0lHTnZibk4wSUhObGNtbGxjeUE5SUc1bGR5QkpiblF6TWtGeWNtRjVLRzVKZEdWdGN5azdYRzVjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnVTWFJsYlhNN0lDc3JhU2xjYmlBZ0lDQnpaWEpwWlhOYmFWMGdQU0JpWldkcGJpQXJJR2s3WEc1Y2JpQWdjbVYwZFhKdUlITmxjbWxsY3p0Y2JuMWNibHh1SUM4cUtseHVJQ29nVW1WMGRYSnVjeUJ2Y21SbGNpQnZaaUIyWVd4MVpYTWdZWE1nYVdZZ2RHaGxlU0JoY21VZ2MyOXlkR1ZrTGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN1lXNTVXMTE5SUhaaGJIVmxjeUJKYm5CMWRDQmhjbkpoZVM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXM0psZG1WeWMyVTlabUZzYzJWZElGZG9aWFJvWlhJZ2RHOGdjbVYwZFhKdUlISmxkbVZ5YzJWa0lHOXlaR1Z5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeVcxMTlJRlJvWlNCdmNtUmxjaUJqYjIxd2RYUmxaQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRnlaMU52Y25Rb2RtRnNkV1Z6T2lCaGJubGJYU3dnY21WMlpYSnpaU0E5SUdaaGJITmxLVG9nYm5WdFltVnlXMTBnZTF4dUlDQmpiMjV6ZENCemIzSjBabTRnUFNCeVpYWmxjbk5sSUQ4Z0tHRTZJR0Z1ZVZ0ZExDQmlPaUJoYm5sYlhTa2dQVDRnS0dKYk1GMGdMU0JoV3pCZEtTQTZJQ2hoT2lCaGJubGJYU3dnWWpvZ1lXNTVXMTBwSUQwK0lDaGhXekJkSUMwZ1lsc3dYU2s3WEc0Z0lHTnZibk4wSUdSbFkyOXlJRDBnS0hZNklHRnVlU3dnYVRvZ2JuVnRZbVZ5S1NBOVBpQmJkaXdnYVYwN0lDOHZJSE5sZENCcGJtUmxlQ0IwYnlCMllXeDFaVnh1SUNCamIyNXpkQ0IxYm1SbFkyOXlJRDBnS0dFNklHRnVlVnRkS1NBOVBpQmhXekZkT3lBdkx5QnNaV0YyWlNCdmJteDVJR2x1WkdWNFhHNGdJR052Ym5OMElGOWhjbWR6YjNKMElEMGdLR0Z5Y2pvZ1lXNTVXMTBwSUQwK0lHRnljaTV0WVhBb1pHVmpiM0lwTG5OdmNuUW9jMjl5ZEdadUtTNXRZWEFvZFc1a1pXTnZjaWs3WEc0Z0lISmxkSFZ5YmlCZllYSm5jMjl5ZENoMllXeDFaWE1wTzF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkR2hsSUdsdVpHVjRaWE1nYjJZZ2RHaGxJRzF2YzNRZ1pHbDJaWEp6WlNCdlltcGxZM1J6SUdGalkyOXlaR2x1WnlCMGJ5QjBhR1VnWkdsemRDQm1kVzVqZEdsdmJseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR3hsYm1kMGFDQjBiM1JoYkNCdWRXMWlaWElnYjJZZ2IySnFaV04wYzF4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHNGdiblZ0WW1WeUlHOW1JR1JwZG1WeWMyVWdaV3hsYldWdWRITWdkRzhnWm1sdVpGeHVJQ29nUUhCaGNtRnRJSHNvYVRFNklHNTFiV0psY2l3Z2FUSTZJRzUxYldKbGNpa2dQVDRnYm5WdFltVnlmU0JrYVhOMElHRWdablZ1WTNScGIyNGdkMmhwWTJnZ1kyRnNZM1ZzWVhSbGN5QmthWE4wWVc1alpTQmlaWFIzWldWdVhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RIZHZJRzlpYW1WamRITWdkWE5wYm1jZ2RHaGxhWElnYVc1a1pYaGxjMXh1SUNvZ1FISmxkSFZ5Ym5NZ2UyNTFiV0psY2x0ZGZTQlVhR1VnYVc1a1pYaGxjeUJ2WmlCMGFHVWdiVzl6ZENCa2FYWmxjbk5sSUc5aWFtVmpkSE5jYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRVJwZG1WeWMyVlRkV0p6WlhRb2JHVnVaM1JvT2lCdWRXMWlaWElzSUc0NklHNTFiV0psY2l3Z1pHbHpkRG9nS0dreE9pQnVkVzFpWlhJc0lHa3lPaUJ1ZFcxaVpYSXBJRDArSUc1MWJXSmxjaWs2SUc1MWJXSmxjbHRkSUh0Y2JpQWdablZ1WTNScGIyNGdiV0Y0UW5rb2RtRnNkV1Z6T2lCSmRHVnlZV0pzWlVsMFpYSmhkRzl5UEc1MWJXSmxjajRzSUc5eVpHVnlRbms2SUNocE9pQnVkVzFpWlhJcElEMCtJRzUxYldKbGNpa2dlMXh1SUNBZ0lHeGxkQ0J0WVhoV1lXeDFaU0E5SUc1MWJHdzdYRzRnSUNBZ2JHVjBJRzFoZUU5eVpHVnlRbmtnUFNCdWRXeHNPMXh1WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JsYkdWdFpXNTBJRzltSUhaaGJIVmxjeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaV3hsYldWdWRFOXlaR1Z5UW5rZ1BTQnZjbVJsY2tKNUtHVnNaVzFsYm5RcE8xeHVJQ0FnSUNBZ2FXWWdLRzFoZUU5eVpHVnlRbmtnUFQwZ2JuVnNiQ0I4ZkNCbGJHVnRaVzUwVDNKa1pYSkNlU0ErSUcxaGVFOXlaR1Z5UW5rcElIdGNiaUFnSUNBZ0lDQWdiV0Y0Vm1Gc2RXVWdQU0JsYkdWdFpXNTBPMXh1SUNBZ0lDQWdJQ0J0WVhoUGNtUmxja0o1SUQwZ1pXeGxiV1Z1ZEU5eVpHVnlRbms3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdFlYaFdZV3gxWlR0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUhOMVluTmxkQ0E5SUZ0eVlXNWtiMjFKYm5Rb2JHVnVaM1JvSUMwZ01TbGRPMXh1SUNCamIyNXpkQ0JqYjIxd2JHVnRaVzUwSUQwZ2JtVjNJRk5sZENncE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQnBaaUFvSVhOMVluTmxkQzVwYm1Oc2RXUmxjeWhwS1NsY2JpQWdJQ0FnSUdOdmJYQnNaVzFsYm5RdVlXUmtLR2twTzF4dUlDQjlYRzVjYmlBZ2QyaHBiR1VnS0hOMVluTmxkQzVzWlc1bmRHZ2dQQ0J1S1NCN1hHNGdJQ0FnWTI5dWMzUWdhV1I0SUQwZ2JXRjRRbmtvWEc0Z0lDQWdJQ0JqYjIxd2JHVnRaVzUwTG5aaGJIVmxjeWdwSUdGeklFbDBaWEpoWW14bFNYUmxjbUYwYjNJOGJuVnRZbVZ5UGl4Y2JpQWdJQ0FnSUNocEtTQTlQaUJOWVhSb0xtMXBiaTVoY0hCc2VTaE5ZWFJvTENCemRXSnpaWFF1YldGd0tHWjFibU4wYVc5dUtIWmhiQ3dnYVc1a1pYZ3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1JwYzNRb2FTd2dkbUZzS1R0Y2JpQWdJQ0FnSUgwcEtTazdYRzRnSUNBZ2FXWWdLR2xrZUNrZ2UxeHVJQ0FnSUNBZ2MzVmljMlYwTG5CMWMyZ29hV1I0S1R0Y2JpQWdJQ0FnSUdOdmJYQnNaVzFsYm5RdVpHVnNaWFJsS0dsa2VDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCemRXSnpaWFE3WEc1OVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QnViM0p0WVd4cGVtVmtJSFpsWTNSdmNseHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJR1JoZEdFZ2JuVnRaWEpwWTJGc0lHRnljbUY1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnViM0p0WVd4cGVtVW9aR0YwWVRvZ1ZtVmpkRzl5S1RvZ1ZtVmpkRzl5SUh0Y2JpQWdiR1YwSUcxbFlXNGdQU0F3TzF4dUlDQnNaWFFnYzNSa0lEMGdNRHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JoZEdFdWJHVnVaM1JvT3lBcksya3BYRzRnSUNBZ2JXVmhiaUFyUFNCa1lYUmhXMmxkTzF4dVhHNGdJRzFsWVc0Z0x6MGdaR0YwWVM1c1pXNW5kR2c3WEc1Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JrWVhSaExteGxibWQwYURzZ0t5dHBLVnh1SUNBZ0lITjBaQ0FyUFNBb1pHRjBZVnRwWFNBdElHMWxZVzRwSUNvZ0tHUmhkR0ZiYVYwZ0xTQnRaV0Z1S1R0Y2JseHVJQ0J6ZEdRZ1BTQk5ZWFJvTG5OeGNuUW9jM1JrSUM4Z1pHRjBZUzVzWlc1bmRHZ3BPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daR0YwWVM1c1pXNW5kR2c3SUNzcmFTbGNiaUFnSUNCa1lYUmhXMmxkSUQwZ0tHUmhkR0ZiYVYwZ0xTQnRaV0Z1S1NBdklITjBaRHRjYmx4dUlDQnlaWFIxY200Z1pHRjBZVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkdhVzVrY3lCelpYUWdaR2xtWm1WeVpXNWpaU0JpWlhSM1pXVnVJSFIzYnlCc2FYTjBjeTVjYmlBcUlFQndZWEpoYlNCN1lXNTVXMTE5SUdFZ1ZHaGxJR1pwY25OMElHeHBjM1F1WEc0Z0tpQkFjR0Z5WVcwZ2UyRnVlVnRkZlNCaUlGUm9aU0J6WldOdmJtUWdiR2x6ZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkZ1ZVZ0ZGZWeHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYzJWMFJHbG1abVZ5Wlc1alpTaGhPaUJoYm5sYlhTd2dZam9nWVc1NVcxMHBPaUJoYm5sYlhTQjdYRzRnSUdOdmJuTjBJR0pUWlhRZ1BTQnVaWGNnVTJWMEtHSXBPMXh1SUNCeVpYUjFjbTRnUVhKeVlYa3Vabkp2YlNodVpYY2dVMlYwS0dFdVptbHNkR1Z5S0NoNEtTQTlQaUFoWWxObGRDNW9ZWE1vZUNrcEtTNTJZV3gxWlhNb0tTazdYRzU5WEc0aVhYMD0iLCJjbGFzcyBDZWxsIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGFyZW50SSA9IDA7XG4gICAgICAgIHRoaXMucGFyZW50SiA9IDA7XG4gICAgfVxufVxuO1xuZXhwb3J0IGNsYXNzIEFsaWduZWQge1xuICAgIGNvbnN0cnVjdG9yKHNlcTFfLCBzZXEyXywgc2NvcmVfKSB7XG4gICAgICAgIHRoaXMuc2VxMSA9IHNlcTFfO1xuICAgICAgICB0aGlzLnNlcTIgPSBzZXEyXztcbiAgICAgICAgdGhpcy5zY29yZSA9IHNjb3JlXztcbiAgICB9XG59XG47XG5leHBvcnQgY2xhc3MgU2VxdWVuY2VBbGlnbm1lbnQge1xuICAgIGNvbnN0cnVjdG9yKHNlcTFfLCBzZXEyXywgZ2FwXywgYWxpZ25HcmlkXyA9IFwiXCIpIHtcbiAgICAgICAgdGhpcy5zZXExID0gJyc7XG4gICAgICAgIHRoaXMuc2VxMiA9ICcnO1xuICAgICAgICB0aGlzLmdhcCA9IDE7XG4gICAgICAgIHRoaXMubGVuMSA9IDA7XG4gICAgICAgIHRoaXMubGVuMiA9IDA7XG4gICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgIHRoaXMuYWxpZ25HcmlkID0gW107XG4gICAgICAgIHRoaXMuc2NvcmVzID0gW107XG4gICAgICAgIHRoaXMuZHBHcmlkID0gW107XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB7fTtcbiAgICAgICAgdGhpcy5CTE9TVU00NSA9IFtbNSwgLTIsIC0xLCAtMiwgLTEsIC0xLCAtMSwgMCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIDEsIDAsIC0yLCAtMiwgMCwgLTEsIC0xLCAwLCAtNV0sXG4gICAgICAgICAgICBbLTIsIDcsIDAsIC0xLCAtMywgMSwgMCwgLTIsIDAsIC0zLCAtMiwgMywgLTEsIC0yLCAtMiwgLTEsIC0xLCAtMiwgLTEsIC0yLCAtMSwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgMCwgNiwgMiwgLTIsIDAsIDAsIDAsIDEsIC0yLCAtMywgMCwgLTIsIC0yLCAtMiwgMSwgMCwgLTQsIC0yLCAtMywgNCwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMiwgLTEsIDIsIDcsIC0zLCAwLCAyLCAtMSwgMCwgLTQsIC0zLCAwLCAtMywgLTQsIC0xLCAwLCAtMSwgLTQsIC0yLCAtMywgNSwgMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTMsIC0yLCAtMywgMTIsIC0zLCAtMywgLTMsIC0zLCAtMywgLTIsIC0zLCAtMiwgLTIsIC00LCAtMSwgLTEsIC01LCAtMywgLTEsIC0yLCAtMywgLTIsIC01XSxcbiAgICAgICAgICAgIFstMSwgMSwgMCwgMCwgLTMsIDYsIDIsIC0yLCAxLCAtMiwgLTIsIDEsIDAsIC00LCAtMSwgMCwgLTEsIC0yLCAtMSwgLTMsIDAsIDQsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDAsIDAsIDIsIC0zLCAyLCA2LCAtMiwgMCwgLTMsIC0yLCAxLCAtMiwgLTMsIDAsIDAsIC0xLCAtMywgLTIsIC0zLCAxLCA0LCAtMSwgLTVdLFxuICAgICAgICAgICAgWzAsIC0yLCAwLCAtMSwgLTMsIC0yLCAtMiwgNywgLTIsIC00LCAtMywgLTIsIC0yLCAtMywgLTIsIDAsIC0yLCAtMiwgLTMsIC0zLCAtMSwgLTIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIDAsIDEsIDAsIC0zLCAxLCAwLCAtMiwgMTAsIC0zLCAtMiwgLTEsIDAsIC0yLCAtMiwgLTEsIC0yLCAtMywgMiwgLTMsIDAsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtMiwgLTQsIC0zLCAtMiwgLTMsIC00LCAtMywgNSwgMiwgLTMsIDIsIDAsIC0yLCAtMiwgLTEsIC0yLCAwLCAzLCAtMywgLTMsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMywgLTMsIC0yLCAtMiwgLTIsIC0zLCAtMiwgMiwgNSwgLTMsIDIsIDEsIC0zLCAtMywgLTEsIC0yLCAwLCAxLCAtMywgLTIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDMsIDAsIDAsIC0zLCAxLCAxLCAtMiwgLTEsIC0zLCAtMywgNSwgLTEsIC0zLCAtMSwgLTEsIC0xLCAtMiwgLTEsIC0yLCAwLCAxLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMSwgLTIsIC0zLCAtMiwgMCwgLTIsIC0yLCAwLCAyLCAyLCAtMSwgNiwgMCwgLTIsIC0yLCAtMSwgLTIsIDAsIDEsIC0yLCAtMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMiwgLTIsIC0yLCAtNCwgLTIsIC00LCAtMywgLTMsIC0yLCAwLCAxLCAtMywgMCwgOCwgLTMsIC0yLCAtMSwgMSwgMywgMCwgLTMsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMiwgLTIsIC0xLCAtNCwgLTEsIDAsIC0yLCAtMiwgLTIsIC0zLCAtMSwgLTIsIC0zLCA5LCAtMSwgLTEsIC0zLCAtMywgLTMsIC0yLCAtMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFsxLCAtMSwgMSwgMCwgLTEsIDAsIDAsIDAsIC0xLCAtMiwgLTMsIC0xLCAtMiwgLTIsIC0xLCA0LCAyLCAtNCwgLTIsIC0xLCAwLCAwLCAwLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTEsIDAsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIsIDUsIC0zLCAtMSwgMCwgMCwgLTEsIDAsIC01XSxcbiAgICAgICAgICAgIFstMiwgLTIsIC00LCAtNCwgLTUsIC0yLCAtMywgLTIsIC0zLCAtMiwgLTIsIC0yLCAtMiwgMSwgLTMsIC00LCAtMywgMTUsIDMsIC0zLCAtNCwgLTIsIC0yLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0xLCAtMiwgLTIsIC0zLCAtMSwgLTIsIC0zLCAyLCAwLCAwLCAtMSwgMCwgMywgLTMsIC0yLCAtMSwgMywgOCwgLTEsIC0yLCAtMiwgLTEsIC01XSxcbiAgICAgICAgICAgIFswLCAtMiwgLTMsIC0zLCAtMSwgLTMsIC0zLCAtMywgLTMsIDMsIDEsIC0yLCAxLCAwLCAtMywgLTEsIDAsIC0zLCAtMSwgNSwgLTMsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMSwgNCwgNSwgLTIsIDAsIDEsIC0xLCAwLCAtMywgLTMsIDAsIC0yLCAtMywgLTIsIDAsIDAsIC00LCAtMiwgLTMsIDQsIDIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDAsIDAsIDEsIC0zLCA0LCA0LCAtMiwgMCwgLTMsIC0yLCAxLCAtMSwgLTMsIC0xLCAwLCAtMSwgLTIsIC0yLCAtMywgMiwgNCwgLTEsIC01XSxcbiAgICAgICAgICAgIFswLCAtMSwgLTEsIC0xLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDAsIDAsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIDFdXTtcbiAgICAgICAgdGhpcy5CTE9TVU01MCA9IFtbNSwgLTIsIC0xLCAtMiwgLTEsIC0xLCAtMSwgMCwgLTIsIC0xLCAtMiwgLTEsIC0xLCAtMywgLTEsIDEsIDAsIC0zLCAtMiwgMCwgLTIsIC0xLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0yLCA3LCAtMSwgLTIsIC00LCAxLCAwLCAtMywgMCwgLTQsIC0zLCAzLCAtMiwgLTMsIC0zLCAtMSwgLTEsIC0zLCAtMSwgLTMsIC0xLCAwLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMSwgNywgMiwgLTIsIDAsIDAsIDAsIDEsIC0zLCAtNCwgMCwgLTIsIC00LCAtMiwgMSwgMCwgLTQsIC0yLCAtMywgNCwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMiwgLTIsIDIsIDgsIC00LCAwLCAyLCAtMSwgLTEsIC00LCAtNCwgLTEsIC00LCAtNSwgLTEsIDAsIC0xLCAtNSwgLTMsIC00LCA1LCAxLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtNCwgLTIsIC00LCAxMywgLTMsIC0zLCAtMywgLTMsIC0yLCAtMiwgLTMsIC0yLCAtMiwgLTQsIC0xLCAtMSwgLTUsIC0zLCAtMSwgLTMsIC0zLCAtMiwgLTVdLFxuICAgICAgICAgICAgWy0xLCAxLCAwLCAwLCAtMywgNywgMiwgLTIsIDEsIC0zLCAtMiwgMiwgMCwgLTQsIC0xLCAwLCAtMSwgLTEsIC0xLCAtMywgMCwgNCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgMCwgMCwgMiwgLTMsIDIsIDYsIC0zLCAwLCAtNCwgLTMsIDEsIC0yLCAtMywgLTEsIC0xLCAtMSwgLTMsIC0yLCAtMywgMSwgNSwgLTEsIC01XSxcbiAgICAgICAgICAgIFswLCAtMywgMCwgLTEsIC0zLCAtMiwgLTMsIDgsIC0yLCAtNCwgLTQsIC0yLCAtMywgLTQsIC0yLCAwLCAtMiwgLTMsIC0zLCAtNCwgLTEsIC0yLCAtMiwgLTVdLFxuICAgICAgICAgICAgWy0yLCAwLCAxLCAtMSwgLTMsIDEsIDAsIC0yLCAxMCwgLTQsIC0zLCAwLCAtMSwgLTEsIC0yLCAtMSwgLTIsIC0zLCAyLCAtNCwgMCwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTQsIC0zLCAtNCwgLTIsIC0zLCAtNCwgLTQsIC00LCA1LCAyLCAtMywgMiwgMCwgLTMsIC0zLCAtMSwgLTMsIC0xLCA0LCAtNCwgLTMsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtNCwgLTQsIC0yLCAtMiwgLTMsIC00LCAtMywgMiwgNSwgLTMsIDMsIDEsIC00LCAtMywgLTEsIC0yLCAtMSwgMSwgLTQsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAzLCAwLCAtMSwgLTMsIDIsIDEsIC0yLCAwLCAtMywgLTMsIDYsIC0yLCAtNCwgLTEsIDAsIC0xLCAtMywgLTIsIC0zLCAwLCAxLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMiwgLTIsIC00LCAtMiwgMCwgLTIsIC0zLCAtMSwgMiwgMywgLTIsIDcsIDAsIC0zLCAtMiwgLTEsIC0xLCAwLCAxLCAtMywgLTEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTMsIC0zLCAtNCwgLTUsIC0yLCAtNCwgLTMsIC00LCAtMSwgMCwgMSwgLTQsIDAsIDgsIC00LCAtMywgLTIsIDEsIDQsIC0xLCAtNCwgLTQsIC0yLCAtNV0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtMiwgLTEsIC00LCAtMSwgLTEsIC0yLCAtMiwgLTMsIC00LCAtMSwgLTMsIC00LCAxMCwgLTEsIC0xLCAtNCwgLTMsIC0zLCAtMiwgLTEsIC0yLCAtNV0sXG4gICAgICAgICAgICBbMSwgLTEsIDEsIDAsIC0xLCAwLCAtMSwgMCwgLTEsIC0zLCAtMywgMCwgLTIsIC0zLCAtMSwgNSwgMiwgLTQsIC0yLCAtMiwgMCwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFswLCAtMSwgMCwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMSwgMiwgNSwgLTMsIC0yLCAwLCAwLCAtMSwgMCwgLTVdLFxuICAgICAgICAgICAgWy0zLCAtMywgLTQsIC01LCAtNSwgLTEsIC0zLCAtMywgLTMsIC0zLCAtMiwgLTMsIC0xLCAxLCAtNCwgLTQsIC0zLCAxNSwgMiwgLTMsIC01LCAtMiwgLTMsIC01XSxcbiAgICAgICAgICAgIFstMiwgLTEsIC0yLCAtMywgLTMsIC0xLCAtMiwgLTMsIDIsIC0xLCAtMSwgLTIsIDAsIDQsIC0zLCAtMiwgLTIsIDIsIDgsIC0xLCAtMywgLTIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTMsIC0zLCAtNCwgLTEsIC0zLCAtMywgLTQsIC00LCA0LCAxLCAtMywgMSwgLTEsIC0zLCAtMiwgMCwgLTMsIC0xLCA1LCAtNCwgLTMsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0xLCA0LCA1LCAtMywgMCwgMSwgLTEsIDAsIC00LCAtNCwgMCwgLTMsIC00LCAtMiwgMCwgMCwgLTUsIC0zLCAtNCwgNSwgMiwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgMCwgMCwgMSwgLTMsIDQsIDUsIC0yLCAwLCAtMywgLTMsIDEsIC0xLCAtNCwgLTEsIDAsIC0xLCAtMiwgLTIsIC0zLCAyLCA1LCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIC0xLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTIsIC0xLCAwLCAtMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAxXV07XG4gICAgICAgIHRoaXMuQkxPU1VNNjIgPSBbWzQsIC0xLCAtMiwgLTIsIDAsIC0xLCAtMSwgMCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIDEsIDAsIC0zLCAtMiwgMCwgLTIsIC0xLCAwLCAtNF0sXG4gICAgICAgICAgICBbLTEsIDUsIDAsIC0yLCAtMywgMSwgMCwgLTIsIDAsIC0zLCAtMiwgMiwgLTEsIC0zLCAtMiwgLTEsIC0xLCAtMywgLTIsIC0zLCAtMSwgMCwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMiwgMCwgNiwgMSwgLTMsIDAsIDAsIDAsIDEsIC0zLCAtMywgMCwgLTIsIC0zLCAtMiwgMSwgMCwgLTQsIC0yLCAtMywgMywgMCwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMiwgLTIsIDEsIDYsIC0zLCAwLCAyLCAtMSwgLTEsIC0zLCAtNCwgLTEsIC0zLCAtMywgLTEsIDAsIC0xLCAtNCwgLTMsIC0zLCA0LCAxLCAtMSwgLTRdLFxuICAgICAgICAgICAgWzAsIC0zLCAtMywgLTMsIDksIC0zLCAtNCwgLTMsIC0zLCAtMSwgLTEsIC0zLCAtMSwgLTIsIC0zLCAtMSwgLTEsIC0yLCAtMiwgLTEsIC0zLCAtMywgLTIsIC00XSxcbiAgICAgICAgICAgIFstMSwgMSwgMCwgMCwgLTMsIDUsIDIsIC0yLCAwLCAtMywgLTIsIDEsIDAsIC0zLCAtMSwgMCwgLTEsIC0yLCAtMSwgLTIsIDAsIDMsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTEsIDAsIDAsIDIsIC00LCAyLCA1LCAtMiwgMCwgLTMsIC0zLCAxLCAtMiwgLTMsIC0xLCAwLCAtMSwgLTMsIC0yLCAtMiwgMSwgNCwgLTEsIC00XSxcbiAgICAgICAgICAgIFswLCAtMiwgMCwgLTEsIC0zLCAtMiwgLTIsIDYsIC0yLCAtNCwgLTQsIC0yLCAtMywgLTMsIC0yLCAwLCAtMiwgLTIsIC0zLCAtMywgLTEsIC0yLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0yLCAwLCAxLCAtMSwgLTMsIDAsIDAsIC0yLCA4LCAtMywgLTMsIC0xLCAtMiwgLTEsIC0yLCAtMSwgLTIsIC0yLCAyLCAtMywgMCwgMCwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMSwgLTMsIC0zLCAtMywgLTEsIC0zLCAtMywgLTQsIC0zLCA0LCAyLCAtMywgMSwgMCwgLTMsIC0yLCAtMSwgLTMsIC0xLCAzLCAtMywgLTMsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMywgLTQsIC0xLCAtMiwgLTMsIC00LCAtMywgMiwgNCwgLTIsIDIsIDAsIC0zLCAtMiwgLTEsIC0yLCAtMSwgMSwgLTQsIC0zLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0xLCAyLCAwLCAtMSwgLTMsIDEsIDEsIC0yLCAtMSwgLTMsIC0yLCA1LCAtMSwgLTMsIC0xLCAwLCAtMSwgLTMsIC0yLCAtMiwgMCwgMSwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMSwgLTEsIC0yLCAtMywgLTEsIDAsIC0yLCAtMywgLTIsIDEsIDIsIC0xLCA1LCAwLCAtMiwgLTEsIC0xLCAtMSwgLTEsIDEsIC0zLCAtMSwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMiwgLTMsIC0zLCAtMywgLTIsIC0zLCAtMywgLTMsIC0xLCAwLCAwLCAtMywgMCwgNiwgLTQsIC0yLCAtMiwgMSwgMywgLTEsIC0zLCAtMywgLTEsIC00XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtMSwgLTMsIC0xLCAtMSwgLTIsIC0yLCAtMywgLTMsIC0xLCAtMiwgLTQsIDcsIC0xLCAtMSwgLTQsIC0zLCAtMiwgLTIsIC0xLCAtMiwgLTRdLFxuICAgICAgICAgICAgWzEsIC0xLCAxLCAwLCAtMSwgMCwgMCwgMCwgLTEsIC0yLCAtMiwgMCwgLTEsIC0yLCAtMSwgNCwgMSwgLTMsIC0yLCAtMiwgMCwgMCwgMCwgLTRdLFxuICAgICAgICAgICAgWzAsIC0xLCAwLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0xLCAxLCA1LCAtMiwgLTIsIDAsIC0xLCAtMSwgMCwgLTRdLFxuICAgICAgICAgICAgWy0zLCAtMywgLTQsIC00LCAtMiwgLTIsIC0zLCAtMiwgLTIsIC0zLCAtMiwgLTMsIC0xLCAxLCAtNCwgLTMsIC0yLCAxMSwgMiwgLTMsIC00LCAtMywgLTIsIC00XSxcbiAgICAgICAgICAgIFstMiwgLTIsIC0yLCAtMywgLTIsIC0xLCAtMiwgLTMsIDIsIC0xLCAtMSwgLTIsIC0xLCAzLCAtMywgLTIsIC0yLCAyLCA3LCAtMSwgLTMsIC0yLCAtMSwgLTRdLFxuICAgICAgICAgICAgWzAsIC0zLCAtMywgLTMsIC0xLCAtMiwgLTIsIC0zLCAtMywgMywgMSwgLTIsIDEsIC0xLCAtMiwgLTIsIDAsIC0zLCAtMSwgNCwgLTMsIC0yLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0yLCAtMSwgMywgNCwgLTMsIDAsIDEsIC0xLCAwLCAtMywgLTQsIDAsIC0zLCAtMywgLTIsIDAsIC0xLCAtNCwgLTMsIC0zLCA0LCAxLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0xLCAwLCAwLCAxLCAtMywgMywgNCwgLTIsIDAsIC0zLCAtMywgMSwgLTEsIC0zLCAtMSwgMCwgLTEsIC0zLCAtMiwgLTIsIDEsIDQsIC0xLCAtNF0sXG4gICAgICAgICAgICBbMCwgLTEsIC0xLCAtMSwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0yLCAwLCAwLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAxXV07XG4gICAgICAgIHRoaXMuQkxPU1VNODAgPSBbWzcsIC0zLCAtMywgLTMsIC0xLCAtMiwgLTIsIDAsIC0zLCAtMywgLTMsIC0xLCAtMiwgLTQsIC0xLCAyLCAwLCAtNSwgLTQsIC0xLCAtMywgLTIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTMsIDksIC0xLCAtMywgLTYsIDEsIC0xLCAtNCwgMCwgLTUsIC00LCAzLCAtMywgLTUsIC0zLCAtMiwgLTIsIC01LCAtNCwgLTQsIC0yLCAwLCAtMiwgLThdLFxuICAgICAgICAgICAgWy0zLCAtMSwgOSwgMiwgLTUsIDAsIC0xLCAtMSwgMSwgLTYsIC02LCAwLCAtNCwgLTYsIC00LCAxLCAwLCAtNywgLTQsIC01LCA1LCAtMSwgLTIsIC04XSxcbiAgICAgICAgICAgIFstMywgLTMsIDIsIDEwLCAtNywgLTEsIDIsIC0zLCAtMiwgLTcsIC03LCAtMiwgLTYsIC02LCAtMywgLTEsIC0yLCAtOCwgLTYsIC02LCA2LCAxLCAtMywgLThdLFxuICAgICAgICAgICAgWy0xLCAtNiwgLTUsIC03LCAxMywgLTUsIC03LCAtNiwgLTcsIC0yLCAtMywgLTYsIC0zLCAtNCwgLTYsIC0yLCAtMiwgLTUsIC01LCAtMiwgLTYsIC03LCAtNCwgLThdLFxuICAgICAgICAgICAgWy0yLCAxLCAwLCAtMSwgLTUsIDksIDMsIC00LCAxLCAtNSwgLTQsIDIsIC0xLCAtNSwgLTMsIC0xLCAtMSwgLTQsIC0zLCAtNCwgLTEsIDUsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTIsIC0xLCAtMSwgMiwgLTcsIDMsIDgsIC00LCAwLCAtNiwgLTYsIDEsIC00LCAtNiwgLTIsIC0xLCAtMiwgLTYsIC01LCAtNCwgMSwgNiwgLTIsIC04XSxcbiAgICAgICAgICAgIFswLCAtNCwgLTEsIC0zLCAtNiwgLTQsIC00LCA5LCAtNCwgLTcsIC03LCAtMywgLTUsIC02LCAtNSwgLTEsIC0zLCAtNiwgLTYsIC02LCAtMiwgLTQsIC0zLCAtOF0sXG4gICAgICAgICAgICBbLTMsIDAsIDEsIC0yLCAtNywgMSwgMCwgLTQsIDEyLCAtNiwgLTUsIC0xLCAtNCwgLTIsIC00LCAtMiwgLTMsIC00LCAzLCAtNSwgLTEsIDAsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTMsIC01LCAtNiwgLTcsIC0yLCAtNSwgLTYsIC03LCAtNiwgNywgMiwgLTUsIDIsIC0xLCAtNSwgLTQsIC0yLCAtNSwgLTMsIDQsIC02LCAtNiwgLTIsIC04XSxcbiAgICAgICAgICAgIFstMywgLTQsIC02LCAtNywgLTMsIC00LCAtNiwgLTcsIC01LCAyLCA2LCAtNCwgMywgMCwgLTUsIC00LCAtMywgLTQsIC0yLCAxLCAtNywgLTUsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTEsIDMsIDAsIC0yLCAtNiwgMiwgMSwgLTMsIC0xLCAtNSwgLTQsIDgsIC0zLCAtNSwgLTIsIC0xLCAtMSwgLTYsIC00LCAtNCwgLTEsIDEsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtNCwgLTYsIC0zLCAtMSwgLTQsIC01LCAtNCwgMiwgMywgLTMsIDksIDAsIC00LCAtMywgLTEsIC0zLCAtMywgMSwgLTUsIC0zLCAtMiwgLThdLFxuICAgICAgICAgICAgWy00LCAtNSwgLTYsIC02LCAtNCwgLTUsIC02LCAtNiwgLTIsIC0xLCAwLCAtNSwgMCwgMTAsIC02LCAtNCwgLTQsIDAsIDQsIC0yLCAtNiwgLTYsIC0zLCAtOF0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtNCwgLTMsIC02LCAtMywgLTIsIC01LCAtNCwgLTUsIC01LCAtMiwgLTQsIC02LCAxMiwgLTIsIC0zLCAtNywgLTYsIC00LCAtNCwgLTIsIC0zLCAtOF0sXG4gICAgICAgICAgICBbMiwgLTIsIDEsIC0xLCAtMiwgLTEsIC0xLCAtMSwgLTIsIC00LCAtNCwgLTEsIC0zLCAtNCwgLTIsIDcsIDIsIC02LCAtMywgLTMsIDAsIC0xLCAtMSwgLThdLFxuICAgICAgICAgICAgWzAsIC0yLCAwLCAtMiwgLTIsIC0xLCAtMiwgLTMsIC0zLCAtMiwgLTMsIC0xLCAtMSwgLTQsIC0zLCAyLCA4LCAtNSwgLTMsIDAsIC0xLCAtMiwgLTEsIC04XSxcbiAgICAgICAgICAgIFstNSwgLTUsIC03LCAtOCwgLTUsIC00LCAtNiwgLTYsIC00LCAtNSwgLTQsIC02LCAtMywgMCwgLTcsIC02LCAtNSwgMTYsIDMsIC01LCAtOCwgLTUsIC01LCAtOF0sXG4gICAgICAgICAgICBbLTQsIC00LCAtNCwgLTYsIC01LCAtMywgLTUsIC02LCAzLCAtMywgLTIsIC00LCAtMywgNCwgLTYsIC0zLCAtMywgMywgMTEsIC0zLCAtNSwgLTQsIC0zLCAtOF0sXG4gICAgICAgICAgICBbLTEsIC00LCAtNSwgLTYsIC0yLCAtNCwgLTQsIC02LCAtNSwgNCwgMSwgLTQsIDEsIC0yLCAtNCwgLTMsIDAsIC01LCAtMywgNywgLTYsIC00LCAtMiwgLThdLFxuICAgICAgICAgICAgWy0zLCAtMiwgNSwgNiwgLTYsIC0xLCAxLCAtMiwgLTEsIC02LCAtNywgLTEsIC01LCAtNiwgLTQsIDAsIC0xLCAtOCwgLTUsIC02LCA2LCAwLCAtMywgLThdLFxuICAgICAgICAgICAgWy0yLCAwLCAtMSwgMSwgLTcsIDUsIDYsIC00LCAwLCAtNiwgLTUsIDEsIC0zLCAtNiwgLTIsIC0xLCAtMiwgLTUsIC00LCAtNCwgMCwgNiwgLTEsIC04XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtMywgLTQsIC0yLCAtMiwgLTMsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTMsIC0zLCAtMSwgLTEsIC01LCAtMywgLTIsIC0zLCAtMSwgLTIsIC04XSxcbiAgICAgICAgICAgIFstOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIDFdXTtcbiAgICAgICAgdGhpcy5CTE9TVU05MCA9IFtbNSwgLTIsIC0yLCAtMywgLTEsIC0xLCAtMSwgMCwgLTIsIC0yLCAtMiwgLTEsIC0yLCAtMywgLTEsIDEsIDAsIC00LCAtMywgLTEsIC0yLCAtMSwgLTEsIC02XSxcbiAgICAgICAgICAgIFstMiwgNiwgLTEsIC0zLCAtNSwgMSwgLTEsIC0zLCAwLCAtNCwgLTMsIDIsIC0yLCAtNCwgLTMsIC0xLCAtMiwgLTQsIC0zLCAtMywgLTIsIDAsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTIsIC0xLCA3LCAxLCAtNCwgMCwgLTEsIC0xLCAwLCAtNCwgLTQsIDAsIC0zLCAtNCwgLTMsIDAsIDAsIC01LCAtMywgLTQsIDQsIC0xLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0zLCAtMywgMSwgNywgLTUsIC0xLCAxLCAtMiwgLTIsIC01LCAtNSwgLTEsIC00LCAtNSwgLTMsIC0xLCAtMiwgLTYsIC00LCAtNSwgNCwgMCwgLTIsIC02XSxcbiAgICAgICAgICAgIFstMSwgLTUsIC00LCAtNSwgOSwgLTQsIC02LCAtNCwgLTUsIC0yLCAtMiwgLTQsIC0yLCAtMywgLTQsIC0yLCAtMiwgLTQsIC00LCAtMiwgLTQsIC01LCAtMywgLTZdLFxuICAgICAgICAgICAgWy0xLCAxLCAwLCAtMSwgLTQsIDcsIDIsIC0zLCAxLCAtNCwgLTMsIDEsIDAsIC00LCAtMiwgLTEsIC0xLCAtMywgLTMsIC0zLCAtMSwgNCwgLTEsIC02XSxcbiAgICAgICAgICAgIFstMSwgLTEsIC0xLCAxLCAtNiwgMiwgNiwgLTMsIC0xLCAtNCwgLTQsIDAsIC0zLCAtNSwgLTIsIC0xLCAtMSwgLTUsIC00LCAtMywgMCwgNCwgLTIsIC02XSxcbiAgICAgICAgICAgIFswLCAtMywgLTEsIC0yLCAtNCwgLTMsIC0zLCA2LCAtMywgLTUsIC01LCAtMiwgLTQsIC01LCAtMywgLTEsIC0zLCAtNCwgLTUsIC01LCAtMiwgLTMsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTIsIDAsIDAsIC0yLCAtNSwgMSwgLTEsIC0zLCA4LCAtNCwgLTQsIC0xLCAtMywgLTIsIC0zLCAtMiwgLTIsIC0zLCAxLCAtNCwgLTEsIDAsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTIsIC00LCAtNCwgLTUsIC0yLCAtNCwgLTQsIC01LCAtNCwgNSwgMSwgLTQsIDEsIC0xLCAtNCwgLTMsIC0xLCAtNCwgLTIsIDMsIC01LCAtNCwgLTIsIC02XSxcbiAgICAgICAgICAgIFstMiwgLTMsIC00LCAtNSwgLTIsIC0zLCAtNCwgLTUsIC00LCAxLCA1LCAtMywgMiwgMCwgLTQsIC0zLCAtMiwgLTMsIC0yLCAwLCAtNSwgLTQsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTEsIDIsIDAsIC0xLCAtNCwgMSwgMCwgLTIsIC0xLCAtNCwgLTMsIDYsIC0yLCAtNCwgLTIsIC0xLCAtMSwgLTUsIC0zLCAtMywgLTEsIDEsIC0xLCAtNl0sXG4gICAgICAgICAgICBbLTIsIC0yLCAtMywgLTQsIC0yLCAwLCAtMywgLTQsIC0zLCAxLCAyLCAtMiwgNywgLTEsIC0zLCAtMiwgLTEsIC0yLCAtMiwgMCwgLTQsIC0yLCAtMSwgLTZdLFxuICAgICAgICAgICAgWy0zLCAtNCwgLTQsIC01LCAtMywgLTQsIC01LCAtNSwgLTIsIC0xLCAwLCAtNCwgLTEsIDcsIC00LCAtMywgLTMsIDAsIDMsIC0yLCAtNCwgLTQsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtMywgLTMsIC00LCAtMiwgLTIsIC0zLCAtMywgLTQsIC00LCAtMiwgLTMsIC00LCA4LCAtMiwgLTIsIC01LCAtNCwgLTMsIC0zLCAtMiwgLTIsIC02XSxcbiAgICAgICAgICAgIFsxLCAtMSwgMCwgLTEsIC0yLCAtMSwgLTEsIC0xLCAtMiwgLTMsIC0zLCAtMSwgLTIsIC0zLCAtMiwgNSwgMSwgLTQsIC0zLCAtMiwgMCwgLTEsIC0xLCAtNl0sXG4gICAgICAgICAgICBbMCwgLTIsIDAsIC0yLCAtMiwgLTEsIC0xLCAtMywgLTIsIC0xLCAtMiwgLTEsIC0xLCAtMywgLTIsIDEsIDYsIC00LCAtMiwgLTEsIC0xLCAtMSwgLTEsIC02XSxcbiAgICAgICAgICAgIFstNCwgLTQsIC01LCAtNiwgLTQsIC0zLCAtNSwgLTQsIC0zLCAtNCwgLTMsIC01LCAtMiwgMCwgLTUsIC00LCAtNCwgMTEsIDIsIC0zLCAtNiwgLTQsIC0zLCAtNl0sXG4gICAgICAgICAgICBbLTMsIC0zLCAtMywgLTQsIC00LCAtMywgLTQsIC01LCAxLCAtMiwgLTIsIC0zLCAtMiwgMywgLTQsIC0zLCAtMiwgMiwgOCwgLTMsIC00LCAtMywgLTIsIC02XSxcbiAgICAgICAgICAgIFstMSwgLTMsIC00LCAtNSwgLTIsIC0zLCAtMywgLTUsIC00LCAzLCAwLCAtMywgMCwgLTIsIC0zLCAtMiwgLTEsIC0zLCAtMywgNSwgLTQsIC0zLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0yLCAtMiwgNCwgNCwgLTQsIC0xLCAwLCAtMiwgLTEsIC01LCAtNSwgLTEsIC00LCAtNCwgLTMsIDAsIC0xLCAtNiwgLTQsIC00LCA0LCAwLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0xLCAwLCAtMSwgMCwgLTUsIDQsIDQsIC0zLCAwLCAtNCwgLTQsIDEsIC0yLCAtNCwgLTIsIC0xLCAtMSwgLTQsIC0zLCAtMywgMCwgNCwgLTEsIC02XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtMiwgLTMsIC0xLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0xLCAtMSwgLTIsIC0yLCAtMSwgLTEsIC0zLCAtMiwgLTIsIC0yLCAtMSwgLTIsIC02XSxcbiAgICAgICAgICAgIFstNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIDFdXTtcbiAgICAgICAgdGhpcy5OVUNMRU9USURFUyA9IFtbMSwgLTEsIC0xLCAtMV0sXG4gICAgICAgICAgICBbLTEsIDEsIC0xLCAtMV0sXG4gICAgICAgICAgICBbLTEsIC0xLCAxLCAtMV0sXG4gICAgICAgICAgICBbLTEsIC0xLCAtMSwgMV1dO1xuICAgICAgICB0aGlzLlBBTTMwID0gW1s2LCAtNywgLTQsIC0zLCAtNiwgLTQsIC0yLCAtMiwgLTcsIC01LCAtNiwgLTcsIC01LCAtOCwgLTIsIDAsIC0xLCAtMTMsIC04LCAtMiwgLTMsIC0zLCAtMywgLTE3XSxcbiAgICAgICAgICAgIFstNywgOCwgLTYsIC0xMCwgLTgsIC0yLCAtOSwgLTksIC0yLCAtNSwgLTgsIDAsIC00LCAtOSwgLTQsIC0zLCAtNiwgLTIsIC0xMCwgLTgsIC03LCAtNCwgLTYsIC0xN10sXG4gICAgICAgICAgICBbLTQsIC02LCA4LCAyLCAtMTEsIC0zLCAtMiwgLTMsIDAsIC01LCAtNywgLTEsIC05LCAtOSwgLTYsIDAsIC0yLCAtOCwgLTQsIC04LCA2LCAtMywgLTMsIC0xN10sXG4gICAgICAgICAgICBbLTMsIC0xMCwgMiwgOCwgLTE0LCAtMiwgMiwgLTMsIC00LCAtNywgLTEyLCAtNCwgLTExLCAtMTUsIC04LCAtNCwgLTUsIC0xNSwgLTExLCAtOCwgNiwgMSwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTYsIC04LCAtMTEsIC0xNCwgMTAsIC0xNCwgLTE0LCAtOSwgLTcsIC02LCAtMTUsIC0xNCwgLTEzLCAtMTMsIC04LCAtMywgLTgsIC0xNSwgLTQsIC02LCAtMTIsIC0xNCwgLTksIC0xN10sXG4gICAgICAgICAgICBbLTQsIC0yLCAtMywgLTIsIC0xNCwgOCwgMSwgLTcsIDEsIC04LCAtNSwgLTMsIC00LCAtMTMsIC0zLCAtNSwgLTUsIC0xMywgLTEyLCAtNywgLTMsIDYsIC01LCAtMTddLFxuICAgICAgICAgICAgWy0yLCAtOSwgLTIsIDIsIC0xNCwgMSwgOCwgLTQsIC01LCAtNSwgLTksIC00LCAtNywgLTE0LCAtNSwgLTQsIC02LCAtMTcsIC04LCAtNiwgMSwgNiwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTIsIC05LCAtMywgLTMsIC05LCAtNywgLTQsIDYsIC05LCAtMTEsIC0xMCwgLTcsIC04LCAtOSwgLTYsIC0yLCAtNiwgLTE1LCAtMTQsIC01LCAtMywgLTUsIC01LCAtMTddLFxuICAgICAgICAgICAgWy03LCAtMiwgMCwgLTQsIC03LCAxLCAtNSwgLTksIDksIC05LCAtNiwgLTYsIC0xMCwgLTYsIC00LCAtNiwgLTcsIC03LCAtMywgLTYsIC0xLCAtMSwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTUsIC01LCAtNSwgLTcsIC02LCAtOCwgLTUsIC0xMSwgLTksIDgsIC0xLCAtNiwgLTEsIC0yLCAtOCwgLTcsIC0yLCAtMTQsIC02LCAyLCAtNiwgLTYsIC01LCAtMTddLFxuICAgICAgICAgICAgWy02LCAtOCwgLTcsIC0xMiwgLTE1LCAtNSwgLTksIC0xMCwgLTYsIC0xLCA3LCAtOCwgMSwgLTMsIC03LCAtOCwgLTcsIC02LCAtNywgLTIsIC05LCAtNywgLTYsIC0xN10sXG4gICAgICAgICAgICBbLTcsIDAsIC0xLCAtNCwgLTE0LCAtMywgLTQsIC03LCAtNiwgLTYsIC04LCA3LCAtMiwgLTE0LCAtNiwgLTQsIC0zLCAtMTIsIC05LCAtOSwgLTIsIC00LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstNSwgLTQsIC05LCAtMTEsIC0xMywgLTQsIC03LCAtOCwgLTEwLCAtMSwgMSwgLTIsIDExLCAtNCwgLTgsIC01LCAtNCwgLTEzLCAtMTEsIC0xLCAtMTAsIC01LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstOCwgLTksIC05LCAtMTUsIC0xMywgLTEzLCAtMTQsIC05LCAtNiwgLTIsIC0zLCAtMTQsIC00LCA5LCAtMTAsIC02LCAtOSwgLTQsIDIsIC04LCAtMTAsIC0xMywgLTgsIC0xN10sXG4gICAgICAgICAgICBbLTIsIC00LCAtNiwgLTgsIC04LCAtMywgLTUsIC02LCAtNCwgLTgsIC03LCAtNiwgLTgsIC0xMCwgOCwgLTIsIC00LCAtMTQsIC0xMywgLTYsIC03LCAtNCwgLTUsIC0xN10sXG4gICAgICAgICAgICBbMCwgLTMsIDAsIC00LCAtMywgLTUsIC00LCAtMiwgLTYsIC03LCAtOCwgLTQsIC01LCAtNiwgLTIsIDYsIDAsIC01LCAtNywgLTYsIC0xLCAtNSwgLTMsIC0xN10sXG4gICAgICAgICAgICBbLTEsIC02LCAtMiwgLTUsIC04LCAtNSwgLTYsIC02LCAtNywgLTIsIC03LCAtMywgLTQsIC05LCAtNCwgMCwgNywgLTEzLCAtNiwgLTMsIC0zLCAtNiwgLTQsIC0xN10sXG4gICAgICAgICAgICBbLTEzLCAtMiwgLTgsIC0xNSwgLTE1LCAtMTMsIC0xNywgLTE1LCAtNywgLTE0LCAtNiwgLTEyLCAtMTMsIC00LCAtMTQsIC01LCAtMTMsIDEzLCAtNSwgLTE1LCAtMTAsIC0xNCwgLTExLCAtMTddLFxuICAgICAgICAgICAgWy04LCAtMTAsIC00LCAtMTEsIC00LCAtMTIsIC04LCAtMTQsIC0zLCAtNiwgLTcsIC05LCAtMTEsIDIsIC0xMywgLTcsIC02LCAtNSwgMTAsIC03LCAtNiwgLTksIC03LCAtMTddLFxuICAgICAgICAgICAgWy0yLCAtOCwgLTgsIC04LCAtNiwgLTcsIC02LCAtNSwgLTYsIDIsIC0yLCAtOSwgLTEsIC04LCAtNiwgLTYsIC0zLCAtMTUsIC03LCA3LCAtOCwgLTYsIC01LCAtMTddLFxuICAgICAgICAgICAgWy0zLCAtNywgNiwgNiwgLTEyLCAtMywgMSwgLTMsIC0xLCAtNiwgLTksIC0yLCAtMTAsIC0xMCwgLTcsIC0xLCAtMywgLTEwLCAtNiwgLTgsIDYsIDAsIC01LCAtMTddLFxuICAgICAgICAgICAgWy0zLCAtNCwgLTMsIDEsIC0xNCwgNiwgNiwgLTUsIC0xLCAtNiwgLTcsIC00LCAtNSwgLTEzLCAtNCwgLTUsIC02LCAtMTQsIC05LCAtNiwgMCwgNiwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTMsIC02LCAtMywgLTUsIC05LCAtNSwgLTUsIC01LCAtNSwgLTUsIC02LCAtNSwgLTUsIC04LCAtNSwgLTMsIC00LCAtMTEsIC03LCAtNSwgLTUsIC01LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgMV1dO1xuICAgICAgICB0aGlzLlBBTTcwID0gW1s1LCAtNCwgLTIsIC0xLCAtNCwgLTIsIC0xLCAwLCAtNCwgLTIsIC00LCAtNCwgLTMsIC02LCAwLCAxLCAxLCAtOSwgLTUsIC0xLCAtMSwgLTEsIC0yLCAtMTFdLFxuICAgICAgICAgICAgWy00LCA4LCAtMywgLTYsIC01LCAwLCAtNSwgLTYsIDAsIC0zLCAtNiwgMiwgLTIsIC03LCAtMiwgLTEsIC00LCAwLCAtNywgLTUsIC00LCAtMiwgLTMsIC0xMV0sXG4gICAgICAgICAgICBbLTIsIC0zLCA2LCAzLCAtNywgLTEsIDAsIC0xLCAxLCAtMywgLTUsIDAsIC01LCAtNiwgLTMsIDEsIDAsIC02LCAtMywgLTUsIDUsIC0xLCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstMSwgLTYsIDMsIDYsIC05LCAwLCAzLCAtMSwgLTEsIC01LCAtOCwgLTIsIC03LCAtMTAsIC00LCAtMSwgLTIsIC0xMCwgLTcsIC01LCA1LCAyLCAtMywgLTExXSxcbiAgICAgICAgICAgIFstNCwgLTUsIC03LCAtOSwgOSwgLTksIC05LCAtNiwgLTUsIC00LCAtMTAsIC05LCAtOSwgLTgsIC01LCAtMSwgLTUsIC0xMSwgLTIsIC00LCAtOCwgLTksIC02LCAtMTFdLFxuICAgICAgICAgICAgWy0yLCAwLCAtMSwgMCwgLTksIDcsIDIsIC00LCAyLCAtNSwgLTMsIC0xLCAtMiwgLTksIC0xLCAtMywgLTMsIC04LCAtOCwgLTQsIC0xLCA1LCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstMSwgLTUsIDAsIDMsIC05LCAyLCA2LCAtMiwgLTIsIC00LCAtNiwgLTIsIC00LCAtOSwgLTMsIC0yLCAtMywgLTExLCAtNiwgLTQsIDIsIDUsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWzAsIC02LCAtMSwgLTEsIC02LCAtNCwgLTIsIDYsIC02LCAtNiwgLTcsIC01LCAtNiwgLTcsIC0zLCAwLCAtMywgLTEwLCAtOSwgLTMsIC0xLCAtMywgLTMsIC0xMV0sXG4gICAgICAgICAgICBbLTQsIDAsIDEsIC0xLCAtNSwgMiwgLTIsIC02LCA4LCAtNiwgLTQsIC0zLCAtNiwgLTQsIC0yLCAtMywgLTQsIC01LCAtMSwgLTQsIDAsIDEsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy0yLCAtMywgLTMsIC01LCAtNCwgLTUsIC00LCAtNiwgLTYsIDcsIDEsIC00LCAxLCAwLCAtNSwgLTQsIC0xLCAtOSwgLTQsIDMsIC00LCAtNCwgLTMsIC0xMV0sXG4gICAgICAgICAgICBbLTQsIC02LCAtNSwgLTgsIC0xMCwgLTMsIC02LCAtNywgLTQsIDEsIDYsIC01LCAyLCAtMSwgLTUsIC02LCAtNCwgLTQsIC00LCAwLCAtNiwgLTQsIC00LCAtMTFdLFxuICAgICAgICAgICAgWy00LCAyLCAwLCAtMiwgLTksIC0xLCAtMiwgLTUsIC0zLCAtNCwgLTUsIDYsIDAsIC05LCAtNCwgLTIsIC0xLCAtNywgLTcsIC02LCAtMSwgLTIsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy0zLCAtMiwgLTUsIC03LCAtOSwgLTIsIC00LCAtNiwgLTYsIDEsIDIsIDAsIDEwLCAtMiwgLTUsIC0zLCAtMiwgLTgsIC03LCAwLCAtNiwgLTMsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy02LCAtNywgLTYsIC0xMCwgLTgsIC05LCAtOSwgLTcsIC00LCAwLCAtMSwgLTksIC0yLCA4LCAtNywgLTQsIC02LCAtMiwgNCwgLTUsIC03LCAtOSwgLTUsIC0xMV0sXG4gICAgICAgICAgICBbMCwgLTIsIC0zLCAtNCwgLTUsIC0xLCAtMywgLTMsIC0yLCAtNSwgLTUsIC00LCAtNSwgLTcsIDcsIDAsIC0yLCAtOSwgLTksIC0zLCAtNCwgLTIsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWzEsIC0xLCAxLCAtMSwgLTEsIC0zLCAtMiwgMCwgLTMsIC00LCAtNiwgLTIsIC0zLCAtNCwgMCwgNSwgMiwgLTMsIC01LCAtMywgMCwgLTIsIC0xLCAtMTFdLFxuICAgICAgICAgICAgWzEsIC00LCAwLCAtMiwgLTUsIC0zLCAtMywgLTMsIC00LCAtMSwgLTQsIC0xLCAtMiwgLTYsIC0yLCAyLCA2LCAtOCwgLTQsIC0xLCAtMSwgLTMsIC0yLCAtMTFdLFxuICAgICAgICAgICAgWy05LCAwLCAtNiwgLTEwLCAtMTEsIC04LCAtMTEsIC0xMCwgLTUsIC05LCAtNCwgLTcsIC04LCAtMiwgLTksIC0zLCAtOCwgMTMsIC0zLCAtMTAsIC03LCAtMTAsIC03LCAtMTFdLFxuICAgICAgICAgICAgWy01LCAtNywgLTMsIC03LCAtMiwgLTgsIC02LCAtOSwgLTEsIC00LCAtNCwgLTcsIC03LCA0LCAtOSwgLTUsIC00LCAtMywgOSwgLTUsIC00LCAtNywgLTUsIC0xMV0sXG4gICAgICAgICAgICBbLTEsIC01LCAtNSwgLTUsIC00LCAtNCwgLTQsIC0zLCAtNCwgMywgMCwgLTYsIDAsIC01LCAtMywgLTMsIC0xLCAtMTAsIC01LCA2LCAtNSwgLTQsIC0yLCAtMTFdLFxuICAgICAgICAgICAgWy0xLCAtNCwgNSwgNSwgLTgsIC0xLCAyLCAtMSwgMCwgLTQsIC02LCAtMSwgLTYsIC03LCAtNCwgMCwgLTEsIC03LCAtNCwgLTUsIDUsIDEsIC0yLCAtMTFdLFxuICAgICAgICAgICAgWy0xLCAtMiwgLTEsIDIsIC05LCA1LCA1LCAtMywgMSwgLTQsIC00LCAtMiwgLTMsIC05LCAtMiwgLTIsIC0zLCAtMTAsIC03LCAtNCwgMSwgNSwgLTMsIC0xMV0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtMiwgLTMsIC02LCAtMiwgLTMsIC0zLCAtMywgLTMsIC00LCAtMywgLTMsIC01LCAtMywgLTEsIC0yLCAtNywgLTUsIC0yLCAtMiwgLTMsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAxXV07XG4gICAgICAgIHRoaXMuUEFNMjUwID0gW1syLCAtMiwgMCwgMCwgLTIsIDAsIDAsIDEsIC0xLCAtMSwgLTIsIC0xLCAtMSwgLTMsIDEsIDEsIDEsIC02LCAtMywgMCwgMCwgMCwgMCwgLThdLFxuICAgICAgICAgICAgWy0yLCA2LCAwLCAtMSwgLTQsIDEsIC0xLCAtMywgMiwgLTIsIC0zLCAzLCAwLCAtNCwgMCwgMCwgLTEsIDIsIC00LCAtMiwgLTEsIDAsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMCwgMCwgMiwgMiwgLTQsIDEsIDEsIDAsIDIsIC0yLCAtMywgMSwgLTIsIC0zLCAwLCAxLCAwLCAtNCwgLTIsIC0yLCAyLCAxLCAwLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTEsIDIsIDQsIC01LCAyLCAzLCAxLCAxLCAtMiwgLTQsIDAsIC0zLCAtNiwgLTEsIDAsIDAsIC03LCAtNCwgLTIsIDMsIDMsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTIsIC00LCAtNCwgLTUsIDEyLCAtNSwgLTUsIC0zLCAtMywgLTIsIC02LCAtNSwgLTUsIC00LCAtMywgMCwgLTIsIC04LCAwLCAtMiwgLTQsIC01LCAtMywgLThdLFxuICAgICAgICAgICAgWzAsIDEsIDEsIDIsIC01LCA0LCAyLCAtMSwgMywgLTIsIC0yLCAxLCAtMSwgLTUsIDAsIC0xLCAtMSwgLTUsIC00LCAtMiwgMSwgMywgLTEsIC04XSxcbiAgICAgICAgICAgIFswLCAtMSwgMSwgMywgLTUsIDIsIDQsIDAsIDEsIC0yLCAtMywgMCwgLTIsIC01LCAtMSwgMCwgMCwgLTcsIC00LCAtMiwgMywgMywgLTEsIC04XSxcbiAgICAgICAgICAgIFsxLCAtMywgMCwgMSwgLTMsIC0xLCAwLCA1LCAtMiwgLTMsIC00LCAtMiwgLTMsIC01LCAwLCAxLCAwLCAtNywgLTUsIC0xLCAwLCAwLCAtMSwgLThdLFxuICAgICAgICAgICAgWy0xLCAyLCAyLCAxLCAtMywgMywgMSwgLTIsIDYsIC0yLCAtMiwgMCwgLTIsIC0yLCAwLCAtMSwgLTEsIC0zLCAwLCAtMiwgMSwgMiwgLTEsIC04XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTMsIC0yLCA1LCAyLCAtMiwgMiwgMSwgLTIsIC0xLCAwLCAtNSwgLTEsIDQsIC0yLCAtMiwgLTEsIC04XSxcbiAgICAgICAgICAgIFstMiwgLTMsIC0zLCAtNCwgLTYsIC0yLCAtMywgLTQsIC0yLCAyLCA2LCAtMywgNCwgMiwgLTMsIC0zLCAtMiwgLTIsIC0xLCAyLCAtMywgLTMsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTEsIDMsIDEsIDAsIC01LCAxLCAwLCAtMiwgMCwgLTIsIC0zLCA1LCAwLCAtNSwgLTEsIDAsIDAsIC0zLCAtNCwgLTIsIDEsIDAsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTEsIDAsIC0yLCAtMywgLTUsIC0xLCAtMiwgLTMsIC0yLCAyLCA0LCAwLCA2LCAwLCAtMiwgLTIsIC0xLCAtNCwgLTIsIDIsIC0yLCAtMiwgLTEsIC04XSxcbiAgICAgICAgICAgIFstMywgLTQsIC0zLCAtNiwgLTQsIC01LCAtNSwgLTUsIC0yLCAxLCAyLCAtNSwgMCwgOSwgLTUsIC0zLCAtMywgMCwgNywgLTEsIC00LCAtNSwgLTIsIC04XSxcbiAgICAgICAgICAgIFsxLCAwLCAwLCAtMSwgLTMsIDAsIC0xLCAwLCAwLCAtMiwgLTMsIC0xLCAtMiwgLTUsIDYsIDEsIDAsIC02LCAtNSwgLTEsIC0xLCAwLCAtMSwgLThdLFxuICAgICAgICAgICAgWzEsIDAsIDEsIDAsIDAsIC0xLCAwLCAxLCAtMSwgLTEsIC0zLCAwLCAtMiwgLTMsIDEsIDIsIDEsIC0yLCAtMywgLTEsIDAsIDAsIDAsIC04XSxcbiAgICAgICAgICAgIFsxLCAtMSwgMCwgMCwgLTIsIC0xLCAwLCAwLCAtMSwgMCwgLTIsIDAsIC0xLCAtMywgMCwgMSwgMywgLTUsIC0zLCAwLCAwLCAtMSwgMCwgLThdLFxuICAgICAgICAgICAgWy02LCAyLCAtNCwgLTcsIC04LCAtNSwgLTcsIC03LCAtMywgLTUsIC0yLCAtMywgLTQsIDAsIC02LCAtMiwgLTUsIDE3LCAwLCAtNiwgLTUsIC02LCAtNCwgLThdLFxuICAgICAgICAgICAgWy0zLCAtNCwgLTIsIC00LCAwLCAtNCwgLTQsIC01LCAwLCAtMSwgLTEsIC00LCAtMiwgNywgLTUsIC0zLCAtMywgMCwgMTAsIC0yLCAtMywgLTQsIC0yLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTEsIC0yLCA0LCAyLCAtMiwgMiwgLTEsIC0xLCAtMSwgMCwgLTYsIC0yLCA0LCAtMiwgLTIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTEsIDIsIDMsIC00LCAxLCAzLCAwLCAxLCAtMiwgLTMsIDEsIC0yLCAtNCwgLTEsIDAsIDAsIC01LCAtMywgLTIsIDMsIDIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMCwgMCwgMSwgMywgLTUsIDMsIDMsIDAsIDIsIC0yLCAtMywgMCwgLTIsIC01LCAwLCAwLCAtMSwgLTYsIC00LCAtMiwgMiwgMywgLTEsIC04XSxcbiAgICAgICAgICAgIFswLCAtMSwgMCwgLTEsIC0zLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMSwgMCwgMCwgLTQsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLThdLFxuICAgICAgICAgICAgWy04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgMV1dO1xuICAgICAgICB0aGlzLlNDSE5FSURFUiA9IFtbMTEuNiwgLTIuNywgOS43LCAtMS43LCAtMi43LCAtNi40LCAtMy45LCAtNS42LCA1LjEsIC01LjAsIDMuNiwgLTQuMiwgLTYuMywgLTEzLjAsIC03LjEsIC0xMS41LCAwLjQsIC02LjAsIC0xLjksIC01LjMsIC04LjUsIC0xMS4yLCAtOC45LCAtMTAuOCwgMi4xLCAwLjAsIDEuNCwgMC4yLCAtMTAuMiwgLTEzLjUsIC0xMy4wLCAtMTIuNSwgLTIuNiwgLTguNSwgLTUuMCwgLTguMSwgLTYuMywgLTkuOSwgLTcuNSwgLTkuMCwgLTcuMSwgLTEwLjIsIC04LjIsIC05LjIsIC04LjIsIC0xMi41LCAtMTEuMSwgLTExLjQsIC01MC4wLCAtMTQuOCwgLTUwLjAsIC0xMy44LCAtNy4zLCAtMTAuMSwgLTguNCwgLTkuMSwgLTUwLjAsIC0xMy4wLCAtMTMuNSwgLTEyLjQsIC0xMC43LCAtMTguMSwgLTExLjgsIC0xNy4yLF0sXG4gICAgICAgICAgICBbLTIuNywgMTMuMCwgLTMuMywgMTAuOSwgLTMuNSwgLTAuNCwgLTMuMywgLTEuOCwgLTUuNCwgNC42LCAtNS41LCAzLjAsIC0xMC4yLCAtNy45LCAtOS45LCAtOS42LCAtNS4wLCAwLjUsIC01LjUsIC0xLjAsIC0xMC4zLCAtOC4xLCAtOS40LCAtOS42LCAtOC4xLCAtNS4wLCAtNy4zLCAtNi4zLCAtMTMuNCwgLTExLjMsIC0xNC40LCAtMTIuOSwgLTYuMywgMC44LCAtNi40LCAtMS4xLCAtNy40LCAtNS4wLCAtNi4yLCAtNi41LCAtNS42LCAtMS42LCAtNC43LCAtMy4wLCAtMTAuOCwgLTguNywgLTExLjksIC0xMC4wLCAtNTAuMCwgLTYuMiwgLTUwLjAsIC03LjUsIC02LjMsIC00LjMsIC02LjIsIC01LjQsIC01MC4wLCAtNy4wLCAtMTYuMywgLTguMiwgLTEzLjIsIC0xMi4zLCAtMTMuMSwgLTEzLjMsXSxcbiAgICAgICAgICAgIFs5LjcsIC0zLjMsIDExLjYsIC0yLjgsIC00LjUsIC02LjcsIC0zLjEsIC02LjksIDMuMywgLTUuNSwgNC44LCAtNS4xLCAtOC45LCAtMTMuMiwgLTUuNywgLTEyLjYsIC0xLjUsIC02LjEsIC0wLjYsIC02LjEsIC0xMC4wLCAtMTEuOCwgLTguNiwgLTExLjksIDEuMiwgMC41LCAyLjIsIDAuMSwgLTExLjgsIC0xNC4wLCAtMTEuOSwgLTEzLjQsIC00LjksIC05LjEsIC0zLjQsIC04LjksIC04LjAsIC0xMC4wLCAtNy4yLCAtMTAuMCwgLTkuMSwgLTEwLjIsIC03LjEsIC05LjksIC0xMC4xLCAtMTMuMCwgLTEwLjYsIC0xMi43LCAtNTAuMCwgLTE0LjksIC01MC4wLCAtMTQuNCwgLTguOSwgLTEwLjgsIC04LjksIC0xMC40LCAtNTAuMCwgLTEzLjEsIC0xMS44LCAtMTMuMCwgLTEyLjQsIC0xOS40LCAtMTEuNSwgLTE3LjgsXSxcbiAgICAgICAgICAgIFstMS43LCAxMC45LCAtMi44LCAxMi45LCAtMi43LCAtMi4yLCAtMi44LCAwLjIsIC00LjgsIDIuOSwgLTUuMiwgNS4yLCAtOS4xLCAtOS41LCAtOS4wLCAtNy4wLCAtNC4wLCAtMS4wLCAtNS4wLCAxLjAsIC05LjAsIC04LjgsIC04LjksIC03LjcsIC03LjAsIC02LjgsIC03LjEsIC00LjMsIC0xMi40LCAtMTIuOSwgLTEzLjksIC0xMC4wLCAtNC45LCAtMC43LCAtNS42LCAxLjQsIC02LjAsIC02LjUsIC02LjIsIC00LjgsIC01LjEsIC0zLjIsIC01LjAsIC0xLjIsIC05LjgsIC05LjksIC0xMS4zLCAtOC4yLCAtNTAuMCwgLTcuNiwgLTUwLjAsIC01LjEsIC01LjUsIC01LjgsIC01LjksIC00LjIsIC01MC4wLCAtOC4zLCAtMTUuNSwgLTUuOSwgLTExLjYsIC0xNC4yLCAtMTIuMCwgLTExLjYsXSxcbiAgICAgICAgICAgIFstMi43LCAtMy41LCAtNC41LCAtMi43LCAxMS43LCA5LjAsIDEwLjYsIDkuNiwgLTMuMiwgLTAuNywgLTUuMSwgLTAuNCwgMC43LCAtNC42LCAtMC40LCAtMy42LCAtNC44LCAtOC45LCAtNi41LCAtNy44LCAtMS40LCAtNC4xLCAtMi45LCAtMy4zLCAtOC4wLCAtOS4xLCAtOC4wLCAtOC4yLCAtNi4wLCAtOS4zLCAtNy43LCAtOC41LCAtNi40LCAtMTAuMSwgLTcuNSwgLTguNiwgMi44LCAtMC43LCAwLjksIDAuMSwgLTUuOSwgLTcuMywgLTYuNSwgLTYuNSwgLTAuNCwgLTMuOSwgLTIuNiwgLTMuMSwgLTUwLjAsIC0xNC42LCAtNTAuMCwgLTEyLjYsIDIuOSwgMC4xLCAxLjgsIDEuMCwgLTUwLjAsIC05LjIsIC0xMy42LCAtNy43LCAtNC44LCAtMTIuMiwgLTYuMiwgLTExLjAsXSxcbiAgICAgICAgICAgIFstNi40LCAtMC40LCAtNi43LCAtMi4yLCA5LjAsIDEyLjMsIDkuOCwgOS42LCAtNy4xLCAyLjQsIC03LjIsIDAuMywgLTIuOSwgLTEuMiwgLTMuMCwgLTMuMywgLTcuNiwgLTYuNywgLTguMSwgLTcuOSwgLTQuOSwgLTEuOSwgLTQuNSwgLTMuOCwgLTkuNSwgLTcuOCwgLTkuMywgLTguOSwgLTkuNCwgLTcuMSwgLTkuMCwgLTkuMCwgLTkuNCwgLTcuNSwgLTkuMywgLTkuMiwgLTAuNywgMi42LCAwLjIsIC0wLjEsIC04LjAsIC00LjYsIC03LjcsIC02LjEsIC0zLjYsIC0xLjAsIC00LjEsIC0zLjEsIC01MC4wLCAtMTEuNiwgLTUwLjAsIC0xMS42LCAwLjIsIDIuMywgMC40LCAwLjUsIC01MC4wLCAtNi41LCAtMTUuMywgLTcuOCwgLTguNCwgLTkuNSwgLTguMywgLTExLjEsXSxcbiAgICAgICAgICAgIFstMy45LCAtMy4zLCAtMy4xLCAtMi44LCAxMC42LCA5LjgsIDEyLjIsIDkuOCwgLTQuOSwgMC4xLCAtMy42LCAtMC4yLCAtMS43LCAtNC4xLCAwLjksIC0zLjUsIC01LjksIC04LjksIC01LjYsIC04LjUsIC0zLjksIC0zLjksIC0yLjIsIC00LjUsIC03LjMsIC03LjUsIC02LjQsIC04LjUsIC03LjEsIC04LjIsIC02LjcsIC03LjgsIC03LjksIC05LjEsIC03LjEsIC05LjQsIDAuOSwgLTAuMiwgMi41LCAtMC4zLCAtNi45LCAtNi41LCAtNS41LCAtNi44LCAtMS43LCAtMy40LCAtMS43LCAtMi44LCAtNTAuMCwgLTEzLjAsIC01MC4wLCAtMTEuNSwgMS41LCAwLjcsIDIuNywgMC42LCAtNTAuMCwgLTguOSwgLTEyLjEsIC03LjQsIC02LjEsIC0xMS41LCAtNS40LCAtMTAuNCxdLFxuICAgICAgICAgICAgWy01LjYsIC0xLjgsIC02LjksIDAuMiwgOS42LCA5LjYsIDkuOCwgMTEuNiwgLTYuNiwgMC45LCAtNy4yLCAyLjUsIC0yLjMsIC0zLjQsIC0yLjMsIC0wLjYsIC02LjUsIC04LjIsIC04LjAsIC02LjMsIC0zLjcsIC0zLjUsIC0zLjksIC0xLjYsIC05LjksIC04LjksIC05LjYsIC03LjAsIC04LjYsIC04LjksIC04LjgsIC02LjgsIC04LjYsIC04LjIsIC04LjgsIC02LjgsIDAuMywgMC4xLCAwLjIsIDIuNCwgLTcuNCwgLTYuMiwgLTYuOSwgLTQuNCwgLTIuOSwgLTIuOSwgLTMuNSwgLTAuOSwgLTUwLjAsIC0xMi4yLCAtNTAuMCwgLTEwLjEsIDEuMiwgMC42LCAxLjIsIDIuNCwgLTUwLjAsIC03LjYsIC0xNi4xLCAtNS44LCAtNy4yLCAtMTAuOCwgLTcuNCwgLTkuMCxdLFxuICAgICAgICAgICAgWzUuMSwgLTUuNCwgMy4zLCAtNC44LCAtMy4yLCAtNy4xLCAtNC45LCAtNi42LCAxMy4zLCAtMi44LCAxMS4yLCAtMS45LCAtNS43LCAtMTIuNSwgLTcuMiwgLTExLjYsIC0wLjcsIC00LjgsIC0zLjEsIC00LjMsIC0xMC4wLCAtMTEuNiwgLTguOCwgLTExLjcsIDEwLjUsIDcuNywgOS4xLCA4LjUsIC05LjgsIC0xMi43LCAtMTEuNywgLTExLjgsIC02LjMsIC0xMS40LCAtOC44LCAtMTEuMCwgLTcuNSwgLTEwLjMsIC04LjMsIC05LjksIC0xLjksIC02LjcsIC00LjEsIC02LjQsIC03LjksIC0xMi41LCAtMTEuNCwgLTExLjcsIC01MC4wLCAtMTQuMCwgLTUwLjAsIC0xMy4yLCAtOC41LCAtMTAuNCwgLTkuMSwgLTkuNiwgLTUwLjAsIC05LjgsIC03LjcsIC04LjgsIC0xMC4zLCAtMTcuOSwgLTExLjgsIC0xNi4wLF0sXG4gICAgICAgICAgICBbLTUuMCwgNC42LCAtNS41LCAyLjksIC0wLjcsIDIuNCwgMC4xLCAwLjksIC0yLjgsIDEyLjgsIC0yLjYsIDExLjAsIC04LjQsIC02LjMsIC04LjMsIC03LjcsIC02LjEsIC0yLjksIC02LjUsIC00LjIsIC04LjUsIC01LjksIC03LjUsIC03LjcsIC01LjUsIC0yLjQsIC01LjUsIC00LjEsIC0xMi45LCAtMTAuMywgLTEyLjcsIC0xMS4zLCAtNy40LCAtMy4xLCAtNy40LCAtNC45LCAtNC40LCAtMS44LCAtMy41LCAtMy41LCAtMS42LCAzLjAsIC0wLjgsIDAuOSwgLTguNCwgLTYuMywgLTkuNiwgLTcuMywgLTUwLjAsIC05LjAsIC01MC4wLCAtOS43LCAtMi4zLCAtMC4yLCAtMS4yLCAtMS41LCAtNTAuMCwgLTAuNywgLTEzLjMsIC0yLjAsIC0xMS44LCAtMTEuOSwgLTEyLjMsIC0xMi43LF0sXG4gICAgICAgICAgICBbMy42LCAtNS41LCA0LjgsIC01LjIsIC01LjEsIC03LjIsIC0zLjYsIC03LjIsIDExLjIsIC0yLjYsIDEzLjQsIC0yLjEsIC03LjcsIC0xMi41LCAtNS4zLCAtMTEuOSwgLTIuMiwgLTQuNCwgLTEuOSwgLTQuOCwgLTEwLjIsIC0xMS41LCAtOC4xLCAtMTIuMCwgOS4zLCA4LjIsIDEwLjAsIDguMCwgLTEwLjgsIC0xMS45LCAtMTAuNywgLTEyLjQsIC04LjIsIC0xMS44LCAtNi45LCAtMTEuNSwgLTguNCwgLTkuOSwgLTcuMSwgLTEwLjYsIC00LjcsIC02LjgsIC0xLjIsIC03LjAsIC05LjgsIC0xMS42LCAtOS42LCAtMTIuMSwgLTUwLjAsIC0xNC4xLCAtNTAuMCwgLTEyLjcsIC0xMC4wLCAtMTAuOCwgLTguOCwgLTEwLjUsIC01MC4wLCAtOS4yLCAtNC4yLCAtOS4zLCAtMTEuMCwgLTE4LjIsIC0xMS4xLCAtMTYuMSxdLFxuICAgICAgICAgICAgWy00LjIsIDMuMCwgLTUuMSwgNS4yLCAtMC40LCAwLjMsIC0wLjIsIDIuNSwgLTEuOSwgMTEuMCwgLTIuMSwgMTMuMiwgLTcuNiwgLTguNSwgLTguMCwgLTUuMywgLTUuNiwgLTQuNSwgLTYuOCwgLTIuNCwgLTcuOCwgLTcuOSwgLTcuOSwgLTYuMiwgLTUuNywgLTUuMSwgLTUuNCwgLTIuMSwgLTEyLjQsIC0xMi4zLCAtMTMuMSwgLTEwLjEsIC02LjYsIC00LjQsIC02LjksIC0yLjYsIC0zLjYsIC0zLjgsIC0zLjcsIC0yLjAsIC0xLjQsIDAuOCwgLTAuOSwgMy4wLCAtOC4yLCAtOC4xLCAtOS4yLCAtNS44LCAtNTAuMCwgLTEwLjEsIC01MC4wLCAtNy40LCAtMS43LCAtMi4wLCAtMS41LCAtMC41LCAtNTAuMCwgLTIuMSwgLTEyLjYsIC0wLjQsIC0xMS42LCAtMTMuOSwgLTExLjQsIC0xMS4xLF0sXG4gICAgICAgICAgICBbLTYuMywgLTEwLjIsIC04LjksIC05LjEsIDAuNywgLTIuOSwgLTEuNywgLTIuMywgLTUuNywgLTguNCwgLTcuNywgLTcuNiwgMTMuMiwgOS42LCAzLjUsIDkuNywgLTguNywgLTEyLjQsIC0xMC43LCAtMTAuNywgLTcuOCwgLTEwLjIsIC04LjgsIC05LjYsIC05LjUsIC0xMS45LCAtMTAuOSwgLTEwLjUsIDIuMywgLTAuNCwgLTAuMiwgLTAuMywgLTkuNywgLTE1LjUsIC0xMS40LCAtMTMuNywgLTMuMCwgLTYuNCwgLTQuMSwgLTUuNCwgLTkuNiwgLTExLjksIC0xMC41LCAtMTEuOCwgNi4yLCAzLjMsIDMuNywgMy42LCAtNTAuMCwgLTEzLjYsIC01MC4wLCAtMTEuOSwgLTUuNiwgLTguOCwgLTcuMiwgLTguOSwgLTUwLjAsIC0xMi40LCAtMTQuMSwgLTExLjYsIDIuOCwgLTYuNCwgMC41LCAtNS4yLF0sXG4gICAgICAgICAgICBbLTEzLjAsIC03LjksIC0xMy4yLCAtOS41LCAtNC42LCAtMS4yLCAtNC4xLCAtMy40LCAtMTIuNSwgLTYuMywgLTEyLjUsIC04LjUsIDkuNiwgMTIuNywgMC4yLCAxMC41LCAtMTIuNCwgLTExLjYsIC0xMy4yLCAtMTIuMCwgLTEyLjQsIC0xMC4xLCAtMTEuNiwgLTEyLjAsIC0xNS4xLCAtMTMuMSwgLTE0LjMsIC0xMy40LCAtMS40LCAxLjQsIC0xLjYsIC0wLjUsIC0xNC45LCAtMTQuMywgLTE1LjIsIC0xNi44LCAtNy43LCAtNC43LCAtNi4zLCAtNi42LCAtMTQuNiwgLTEwLjgsIC0xMi44LCAtMTMuMCwgMi4zLCA2LjAsIDIuNSwgMy42LCAtNTAuMCwgLTExLjIsIC01MC4wLCAtMTEuOSwgLTEwLjUsIC05LjIsIC0xMC41LCAtMTAuNSwgLTUwLjAsIC0xMC4zLCAtMTYuMiwgLTExLjMsIC0xLjcsIC0zLjcsIC0yLjUsIC01LjQsXSxcbiAgICAgICAgICAgIFstNy4xLCAtOS45LCAtNS43LCAtOS4wLCAtMC40LCAtMy4wLCAwLjksIC0yLjMsIC03LjIsIC04LjMsIC01LjMsIC04LjAsIDMuNSwgMC4yLCAxNC4zLCAxLjAsIC03LjMsIC0xMS4yLCAtNi45LCAtOS43LCAtOC41LCAtMTAuMiwgLTcuNywgLTkuOCwgLTEwLjAsIC0xMC40LCAtOC40LCAtMTAuMiwgMS4wLCAtMC42LCAxLjcsIC0wLjUsIC0xMS4xLCAtMTQuOCwgLTkuNywgLTE0LjUsIC0zLjcsIC01LjgsIC0zLjEsIC01LjYsIC0xMC40LCAtMTEuNSwgLTguMiwgLTExLjEsIDAuNiwgLTEuNiwgMS42LCAtMS4xLCAtNTAuMCwgLTEyLjQsIC01MC4wLCAtMTEuNSwgLTUuNSwgLTguMCwgLTQuOSwgLTcuMiwgLTUwLjAsIC0xMi40LCAtMTAuMywgLTExLjYsIDAuNywgLTYuOCwgMi40LCAtNi4wLF0sXG4gICAgICAgICAgICBbLTExLjUsIC05LjYsIC0xMi42LCAtNy4wLCAtMy42LCAtMy4zLCAtMy41LCAtMC42LCAtMTEuNiwgLTcuNywgLTExLjksIC01LjMsIDkuNywgMTAuNSwgMS4wLCAxMi42LCAtMTIuMCwgLTEyLjIsIC0xMi41LCAtOS43LCAtMTEuMSwgLTExLjIsIC0xMS45LCAtOS40LCAtMTIuOSwgLTE0LjMsIC0xNC4wLCAtMTEuOSwgLTEuMCwgLTAuNCwgLTEuNiwgMS4yLCAtMTMuOSwgLTE1LjQsIC0xMy43LCAtMTIuNiwgLTYuMiwgLTYuNywgLTYuMywgLTQuNCwgLTEzLjAsIC0xMi4yLCAtMTMuMCwgLTEwLjQsIDIuOSwgMy44LCAyLjUsIDUuOCwgLTUwLjAsIC0xMi41LCAtNTAuMCwgLTEwLjIsIC05LjYsIC05LjcsIC05LjYsIC04LjMsIC01MC4wLCAtMTEuNiwgLTE1LjQsIC05LjQsIC0xLjEsIC01LjQsIC0xLjYsIC0zLjMsXSxcbiAgICAgICAgICAgIFswLjQsIC01LjAsIC0xLjUsIC00LjAsIC00LjgsIC03LjYsIC01LjksIC02LjUsIC0wLjcsIC02LjEsIC0yLjIsIC01LjYsIC04LjcsIC0xMi40LCAtNy4zLCAtMTIuMCwgMTIuOCwgMi4zLCAxMC4yLCAzLjAsIDAuMCwgLTMuNCwgLTAuNywgLTMuMiwgMi41LCAtMC44LCAwLjksIDAuMiwgLTMuMCwgLTcuMiwgLTUuNywgLTYuMSwgLTAuMiwgLTYuNiwgLTEuOCwgLTYuMCwgLTUuMywgLTguMiwgLTUuNywgLTcuNiwgLTYuNywgLTkuNiwgLTcuNSwgLTkuMywgLTcuMSwgLTEwLjUsIC05LjYsIC05LjQsIC01MC4wLCAtOC4xLCAtNTAuMCwgLTcuMiwgLTQuMywgLTYuOCwgLTUuNywgLTYuMywgLTUwLjAsIC05LjUsIC05LjYsIC04LjksIC02LjIsIC0xMi44LCAtNi44LCAtMTEuOCxdLFxuICAgICAgICAgICAgWy02LjAsIDAuNSwgLTYuMSwgLTEuMCwgLTguOSwgLTYuNywgLTguOSwgLTguMiwgLTQuOCwgLTIuOSwgLTQuNCwgLTQuNSwgLTEyLjQsIC0xMS42LCAtMTEuMiwgLTEyLjIsIDIuMywgMTQuNiwgMS45LCAxMi45LCAtNS41LCAtMi42LCAtNC4xLCAtNC43LCAtMS4yLCAzLjAsIC0xLjEsIDEuNiwgLTguMCwgLTQuNywgLTguNywgLTYuMCwgLTguMiwgLTQuNywgLTcuOCwgLTYuNywgLTEwLjAsIC04LjMsIC04LjksIC05LjksIC0xMC44LCAtNy4xLCAtMTAuMCwgLTkuMiwgLTExLjYsIC0xMC4xLCAtMTIuMywgLTExLjksIC01MC4wLCAyLjIsIC01MC4wLCAwLjksIC03LjksIC01LjksIC03LjQsIC02LjksIC01MC4wLCAtNC42LCAtMTEuNiwgLTUuNiwgLTkuNywgLTUuOSwgLTkuOSwgLTcuMyxdLFxuICAgICAgICAgICAgWy0xLjksIC01LjUsIC0wLjYsIC01LjAsIC02LjUsIC04LjEsIC01LjYsIC04LjAsIC0zLjEsIC02LjUsIC0xLjksIC02LjgsIC0xMC43LCAtMTMuMiwgLTYuOSwgLTEyLjUsIDEwLjIsIDEuOSwgMTEuOSwgMi4xLCAtMi4zLCAtNC4xLCAtMC41LCAtNC42LCAtMC4xLCAtMC45LCAyLjQsIC0wLjgsIC01LjEsIC02LjksIC00LjgsIC02LjcsIC0yLjMsIC03LjEsIC0wLjgsIC03LjIsIC03LjIsIC04LjAsIC01LjYsIC04LjUsIC05LjQsIC05LjcsIC03LjIsIC05LjgsIC05LjIsIC0xMS4xLCAtOS41LCAtMTAuNywgLTUwLjAsIC04LjcsIC01MC4wLCAtOC42LCAtNi4xLCAtNy41LCAtNS41LCAtNy43LCAtNTAuMCwgLTEwLjQsIC03LjcsIC0xMC4wLCAtNy4zLCAtMTMuNiwgLTYuNCwgLTEzLjMsXSxcbiAgICAgICAgICAgIFstNS4zLCAtMS4wLCAtNi4xLCAxLjAsIC03LjgsIC03LjksIC04LjUsIC02LjMsIC00LjMsIC00LjIsIC00LjgsIC0yLjQsIC0xMC43LCAtMTIuMCwgLTkuNywgLTkuNywgMy4wLCAxMi45LCAyLjEsIDE0LjcsIC00LjksIC0zLjgsIC00LjAsIC0yLjQsIC0xLjAsIDAuOCwgLTEuMywgMy40LCAtNy42LCAtNS43LCAtOC4xLCAtMy41LCAtNi44LCAtNS44LCAtNy4yLCAtNC4yLCAtOC45LCAtMTAuMiwgLTguNCwgLTguMiwgLTkuOSwgLTguNCwgLTkuNywgLTYuNCwgLTExLjEsIC0xMS4xLCAtMTEuOCwgLTEwLjAsIC01MC4wLCAwLjQsIC01MC4wLCAyLjYsIC03LjIsIC03LjAsIC03LjQsIC01LjEsIC01MC4wLCAtNS43LCAtOS44LCAtMy4yLCAtOC40LCAtNy40LCAtOC45LCAtNS45LF0sXG4gICAgICAgICAgICBbLTguNSwgLTEwLjMsIC0xMC4wLCAtOS4wLCAtMS40LCAtNC45LCAtMy45LCAtMy43LCAtMTAuMCwgLTguNSwgLTEwLjIsIC03LjgsIC03LjgsIC0xMi40LCAtOC41LCAtMTEuMSwgMC4wLCAtNS41LCAtMi4zLCAtNC45LCAxMi42LCAxMC4wLCAxMS4xLCAxMC41LCAtNi4wLCAtOC4zLCAtNi45LCAtNy41LCAtMi4yLCAtNy40LCAtNS4zLCAtNS45LCAtOC45LCAtMTIuNSwgLTkuNCwgLTExLjYsIC0wLjcsIC0zLjksIC0yLjMsIC0zLjAsIC05LjEsIC05LjgsIC05LjIsIC05LjUsIC01LjYsIC05LjAsIC04LjAsIC04LjUsIC01MC4wLCAtMTUuMywgLTUwLjAsIC0xNC4xLCAyLjMsIC0xLjQsIDAuMywgLTAuNSwgLTUwLjAsIC0xMy42LCAtMTQuMywgLTExLjUsIC01LjMsIC0xMy43LCAtNi4xLCAtMTIuNyxdLFxuICAgICAgICAgICAgWy0xMS4yLCAtOC4xLCAtMTEuOCwgLTguOCwgLTQuMSwgLTEuOSwgLTMuOSwgLTMuNSwgLTExLjYsIC01LjksIC0xMS41LCAtNy45LCAtMTAuMiwgLTEwLjEsIC0xMC4yLCAtMTEuMiwgLTMuNCwgLTIuNiwgLTQuMSwgLTMuOCwgMTAuMCwgMTMuMSwgMTAuNywgMTAuNiwgLTguMSwgLTUuMiwgLTguMCwgLTYuNywgLTYuMSwgLTMuNywgLTcuNSwgLTUuNiwgLTExLjEsIC0xMC4zLCAtMTAuNiwgLTExLjksIC0zLjIsIC0xLjAsIC0yLjIsIC0yLjgsIC0xMC41LCAtOC4xLCAtOS40LCAtOS41LCAtOC4zLCAtNi45LCAtOS40LCAtOC44LCAtNTAuMCwgLTExLjMsIC01MC4wLCAtMTIuOCwgLTAuNiwgMi4yLCAtMC4zLCAwLjEsIC01MC4wLCAtMTAuMSwgLTE3LjUsIC0xMS4xLCAtOC42LCAtOS45LCAtOC42LCAtMTEuOSxdLFxuICAgICAgICAgICAgWy04LjksIC05LjQsIC04LjYsIC04LjksIC0yLjksIC00LjUsIC0yLjIsIC0zLjksIC04LjgsIC03LjUsIC04LjEsIC03LjksIC04LjgsIC0xMS42LCAtNy43LCAtMTEuOSwgLTAuNywgLTQuMSwgLTAuNSwgLTQuMCwgMTEuMSwgMTAuNywgMTMuMiwgMTAuNCwgLTUuNywgLTUuOCwgLTMuNSwgLTYuMSwgLTMuNiwgLTYuNSwgLTMuMywgLTUuNSwgLTkuNCwgLTExLjAsIC04LjcsIC0xMS4yLCAtMS44LCAtMi43LCAwLjcsIC0zLjAsIC05LjEsIC04LjIsIC03LjMsIC05LjQsIC03LjIsIC04LjIsIC03LjIsIC04LjIsIC01MC4wLCAtMTMuMiwgLTUwLjAsIC0xMy4zLCAwLjUsIC0wLjksIDEuOCwgLTAuNiwgLTUwLjAsIC0xMS40LCAtMTEuMSwgLTEwLjUsIC02LjEsIC0xMi45LCAtNS4wLCAtMTEuOSxdLFxuICAgICAgICAgICAgWy0xMC44LCAtOS42LCAtMTEuOSwgLTcuNywgLTMuMywgLTMuOCwgLTQuNSwgLTEuNiwgLTExLjcsIC03LjcsIC0xMi4wLCAtNi4yLCAtOS42LCAtMTIuMCwgLTkuOCwgLTkuNCwgLTMuMiwgLTQuNywgLTQuNiwgLTIuNCwgMTAuNSwgMTAuNiwgMTAuNCwgMTIuNiwgLTguMiwgLTcuOSwgLTkuMCwgLTQuNywgLTYuMSwgLTYuMCwgLTcuNSwgLTIuOSwgLTEwLjksIC0xMi4yLCAtMTEuMiwgLTEwLjksIC0yLjQsIC0yLjksIC0yLjcsIC0wLjksIC0xMC40LCAtOS43LCAtMTAuMiwgLTguMCwgLTguNCwgLTkuMSwgLTkuMywgLTYuNSwgLTUwLjAsIC0xMy4zLCAtNTAuMCwgLTExLjAsIC0wLjAsIC0wLjQsIC0wLjQsIDIuMywgLTUwLjAsIC0xMC45LCAtMTcuMiwgLTguMywgLTguMywgLTEyLjcsIC03LjgsIC05LjMsXSxcbiAgICAgICAgICAgIFsyLjEsIC04LjEsIDEuMiwgLTcuMCwgLTguMCwgLTkuNSwgLTcuMywgLTkuOSwgMTAuNSwgLTUuNSwgOS4zLCAtNS43LCAtOS41LCAtMTUuMSwgLTEwLjAsIC0xMi45LCAyLjUsIC0xLjIsIC0wLjEsIC0xLjAsIC02LjAsIC04LjEsIC01LjcsIC04LjIsIDEzLjgsIDExLjMsIDExLjgsIDEyLjEsIC02LjAsIC05LjEsIC05LjAsIC05LjUsIC04LjksIC0xMy40LCAtMTAuMCwgLTEzLjEsIC05LjksIC0xMS43LCAtOS44LCAtMTIuOCwgLTUuOSwgLTkuNCwgLTYuNSwgLTguMSwgLTEwLjcsIC0xNC4wLCAtMTMuMywgLTEzLjksIC01MC4wLCAtMTEuOSwgLTUwLjAsIC05LjcsIC04LjksIC0xMC44LCAtOS4wLCAtMTEuMSwgLTUwLjAsIC02LjUsIC01LjMsIC02LjMsIC0xMC41LCAtMTYuMiwgLTEwLjQsIC0xNS4yLF0sXG4gICAgICAgICAgICBbMC4wLCAtNS4wLCAwLjUsIC02LjgsIC05LjEsIC03LjgsIC03LjUsIC04LjksIDcuNywgLTIuNCwgOC4yLCAtNS4xLCAtMTEuOSwgLTEzLjEsIC0xMC40LCAtMTQuMywgLTAuOCwgMy4wLCAtMC45LCAwLjgsIC04LjMsIC01LjIsIC01LjgsIC03LjksIDExLjMsIDE1LjAsIDExLjIsIDEyLjgsIC05LjcsIC01LjMsIC05LjIsIC03LjgsIC0xMS43LCAtMTAuNiwgLTEwLjEsIC0xMi4yLCAtMTEuNywgLTguOCwgLTguOSwgLTExLjgsIC05LjMsIC01LjAsIC04LjAsIC04LjIsIC0xMy42LCAtMTEuNCwgLTEyLjgsIC0xMy4wLCAtNTAuMCwgLTcuMiwgLTUwLjAsIC04LjQsIC0xMS4wLCAtNy43LCAtOC43LCAtMTAuMiwgLTUwLjAsIC0xLjUsIC03LjEsIC00LjksIC0xMS4yLCAtMTEuNiwgLTExLjYsIC0xNS4wLF0sXG4gICAgICAgICAgICBbMS40LCAtNy4zLCAyLjIsIC03LjEsIC04LjAsIC05LjMsIC02LjQsIC05LjYsIDkuMSwgLTUuNSwgMTAuMCwgLTUuNCwgLTEwLjksIC0xNC4zLCAtOC40LCAtMTQuMCwgMC45LCAtMS4xLCAyLjQsIC0xLjMsIC02LjksIC04LjAsIC0zLjUsIC05LjAsIDExLjgsIDExLjIsIDEzLjQsIDExLjQsIC03LjMsIC04LjgsIC02LjUsIC04LjUsIC0xMC4wLCAtMTIuNSwgLTcuOCwgLTEyLjUsIC05LjYsIC0xMS4wLCAtNy4xLCAtMTAuNywgLTcuOSwgLTguMCwgLTQuMywgLTkuNCwgLTExLjQsIC0xMi4zLCAtMTAuOSwgLTEyLjksIC01MC4wLCAtMTEuOCwgLTUwLjAsIC0xMS4yLCAtOS40LCAtOS44LCAtNy4zLCAtMTAuNSwgLTUwLjAsIC02LjIsIC0yLjIsIC02LjcsIC05LjgsIC0xNS4yLCAtOC41LCAtMTQuOSxdLFxuICAgICAgICAgICAgWzAuMiwgLTYuMywgMC4xLCAtNC4zLCAtOC4yLCAtOC45LCAtOC41LCAtNy4wLCA4LjUsIC00LjEsIDguMCwgLTIuMSwgLTEwLjUsIC0xMy40LCAtMTAuMiwgLTExLjksIDAuMiwgMS42LCAtMC44LCAzLjQsIC03LjUsIC02LjcsIC02LjEsIC00LjcsIDEyLjEsIDEyLjgsIDExLjQsIDE0LjcsIC04LjcsIC03LjQsIC05LjQsIC01LjMsIC05LjksIC0xMS44LCAtMTAuNSwgLTEwLjMsIC05LjksIC0xMC4xLCAtOS4zLCAtOS4zLCAtOC4xLCAtNy4yLCAtOC4wLCAtNS4yLCAtMTIuMCwgLTEyLjEsIC0xMi42LCAtMTAuOSwgLTUwLjAsIC03LjksIC01MC4wLCAtNS4zLCAtOS4zLCAtOC44LCAtOC45LCAtNy4wLCAtNTAuMCwgLTMuNiwgLTcuMSwgLTEuMiwgLTEwLjIsIC0xMi43LCAtOS45LCAtMTEuMCxdLFxuICAgICAgICAgICAgWy0xMC4yLCAtMTMuNCwgLTExLjgsIC0xMi40LCAtNi4wLCAtOS40LCAtNy4xLCAtOC42LCAtOS44LCAtMTIuOSwgLTEwLjgsIC0xMi40LCAyLjMsIC0xLjQsIDEuMCwgLTEuMCwgLTMuMCwgLTguMCwgLTUuMSwgLTcuNiwgLTIuMiwgLTYuMSwgLTMuNiwgLTYuMSwgLTYuMCwgLTkuNywgLTcuMywgLTguNywgMTEuMiwgNy45LCA4LjksIDguMSwgLTEyLjEsIC0xNy40LCAtMTMuMiwgLTE2LjgsIC02LjMsIC05LjUsIC03LjUsIC04LjgsIC0xMi43LCAtMTUuMiwgLTEzLjEsIC0xNC4yLCAwLjAsIC0zLjEsIC0xLjgsIC0zLjEsIC01MC4wLCAtMTAuNywgLTUwLjAsIC05LjMsIC00LjYsIC04LjksIC01LjksIC04LjMsIC01MC4wLCAtMTIuOCwgLTkuNiwgLTEwLjYsIDkuNSwgLTMuMiwgOC4yLCAtMi44LF0sXG4gICAgICAgICAgICBbLTEzLjUsIC0xMS4zLCAtMTQuMCwgLTEyLjksIC05LjMsIC03LjEsIC04LjIsIC04LjksIC0xMi43LCAtMTAuMywgLTExLjksIC0xMi4zLCAtMC40LCAxLjQsIC0wLjYsIC0wLjQsIC03LjIsIC00LjcsIC02LjksIC01LjcsIC03LjQsIC0zLjcsIC02LjUsIC02LjAsIC05LjEsIC01LjMsIC04LjgsIC03LjQsIDcuOSwgMTEuOSwgNy44LCA5LjMsIC0xNS4yLCAtMTUuMSwgLTE0LjYsIC0xNy4yLCAtOS43LCAtNy4zLCAtOC4yLCAtOS4yLCAtMTUuMCwgLTEyLjgsIC0xNC4xLCAtMTQuOSwgLTIuOCwgMC4yLCAtMi45LCAtMi4zLCAtNTAuMCwgLTcuNCwgLTUwLjAsIC04LjcsIC05LjQsIC03LjMsIC05LjQsIC05LjQsIC01MC4wLCAtOC4wLCAtMTEuOSwgLTkuNywgNi41LCAwLjUsIDYuNCwgLTEuOCxdLFxuICAgICAgICAgICAgWy0xMy4wLCAtMTQuNCwgLTExLjksIC0xMy45LCAtNy43LCAtOS4wLCAtNi43LCAtOC44LCAtMTEuNywgLTEyLjcsIC0xMC43LCAtMTMuMSwgLTAuMiwgLTEuNiwgMS43LCAtMS42LCAtNS43LCAtOC43LCAtNC44LCAtOC4xLCAtNS4zLCAtNy41LCAtMy4zLCAtNy41LCAtOS4wLCAtOS4yLCAtNi41LCAtOS40LCA4LjksIDcuOCwgMTAuMSwgNy44LCAtMTQuMywgLTE3LjcsIC0xMy4wLCAtMTcuOCwgLTguMCwgLTkuNCwgLTYuMiwgLTkuMiwgLTE1LjEsIC0xNC45LCAtMTIuMiwgLTE0LjksIC0xLjgsIC0zLjIsIC0wLjgsIC0zLjIsIC01MC4wLCAtMTAuOCwgLTUwLjAsIC05LjksIC03LjMsIC05LjYsIC02LjQsIC05LjQsIC01MC4wLCAtMTIuMywgLTguNywgLTExLjMsIDcuNiwgLTMuMywgOC43LCAtMi45LF0sXG4gICAgICAgICAgICBbLTEyLjUsIC0xMi45LCAtMTMuNCwgLTEwLjAsIC04LjUsIC05LjAsIC03LjgsIC02LjgsIC0xMS44LCAtMTEuMywgLTEyLjQsIC0xMC4xLCAtMC4zLCAtMC41LCAtMC41LCAxLjIsIC02LjEsIC02LjAsIC02LjcsIC0zLjUsIC01LjksIC01LjYsIC01LjUsIC0yLjksIC05LjUsIC03LjgsIC04LjUsIC01LjMsIDguMSwgOS4zLCA3LjgsIDExLjgsIC0xNC40LCAtMTUuNywgLTE0LjUsIC0xNC42LCAtOC40LCAtOC43LCAtNy45LCAtNy4xLCAtMTQuMywgLTEzLjgsIC0xMy44LCAtMTIuMywgLTIuNCwgLTIuMiwgLTIuOSwgLTAuMiwgLTUwLjAsIC04LjksIC01MC4wLCAtNy4xLCAtOC4xLCAtOS4xLCAtOC43LCAtNi42LCAtNTAuMCwgLTkuNywgLTExLjQsIC04LjAsIDYuOCwgLTEuOCwgNi45LCAwLjQsXSxcbiAgICAgICAgICAgIFstMi42LCAtNi4zLCAtNC45LCAtNC45LCAtNi40LCAtOS40LCAtNy45LCAtOC42LCAtNi4zLCAtNy40LCAtOC4yLCAtNi42LCAtOS43LCAtMTQuOSwgLTExLjEsIC0xMy45LCAtMC4yLCAtOC4yLCAtMi4zLCAtNi44LCAtOC45LCAtMTEuMSwgLTkuNCwgLTEwLjksIC04LjksIC0xMS43LCAtMTAuMCwgLTkuOSwgLTEyLjEsIC0xNS4yLCAtMTQuMywgLTE0LjQsIDExLjEsIDIuOSwgOS4yLCAzLjUsIC0zLjAsIC03LjAsIC00LjMsIC02LjIsIC0yLjIsIC02LjYsIC0zLjcsIC01LjcsIC02LjAsIC0xMC40LCAtOC42LCAtOS41LCAtNTAuMCwgLTE1LjUsIC01MC4wLCAtMTMuOSwgLTcuOCwgLTEwLjUsIC04LjcsIC05LjYsIC01MC4wLCAtMTYuNSwgLTE3LjEsIC0xNC44LCAtMTIuMSwgLTE4LjksIC0xMi40LCAtMTcuNCxdLFxuICAgICAgICAgICAgWy04LjUsIDAuOCwgLTkuMSwgLTAuNywgLTEwLjEsIC03LjUsIC05LjEsIC04LjIsIC0xMS40LCAtMy4xLCAtMTEuOCwgLTQuNCwgLTE1LjUsIC0xNC4zLCAtMTQuOCwgLTE1LjQsIC02LjYsIC00LjcsIC03LjEsIC01LjgsIC0xMi41LCAtMTAuMywgLTExLjAsIC0xMi4yLCAtMTMuNCwgLTEwLjYsIC0xMi41LCAtMTEuOCwgLTE3LjQsIC0xNS4xLCAtMTcuNywgLTE1LjcsIDIuOSwgMTIuNSwgMy4xLCAxMC4zLCAtNy43LCAtNS4yLCAtNi4yLCAtNy4zLCAtNS40LCAtMS43LCAtNS40LCAtMy43LCAtMTEuNiwgLTkuMSwgLTEzLjAsIC0xMC44LCAtNTAuMCwgLTEwLjMsIC01MC4wLCAtMTEuMiwgLTkuOCwgLTguMywgLTkuMSwgLTkuNywgLTUwLjAsIC0xMi43LCAtMjAuNiwgLTEzLjEsIC0xNi4wLCAtMTYuNiwgLTE3LjAsIC0xOC40LF0sXG4gICAgICAgICAgICBbLTUuMCwgLTYuNCwgLTMuNCwgLTUuNiwgLTcuNSwgLTkuMywgLTcuMSwgLTguOCwgLTguOCwgLTcuNCwgLTYuOSwgLTYuOSwgLTExLjQsIC0xNS4yLCAtOS43LCAtMTMuNywgLTEuOCwgLTcuOCwgLTAuOCwgLTcuMiwgLTkuNCwgLTEwLjYsIC04LjcsIC0xMS4yLCAtMTAuMCwgLTEwLjEsIC03LjgsIC0xMC41LCAtMTMuMiwgLTE0LjYsIC0xMy4wLCAtMTQuNSwgOS4yLCAzLjEsIDEwLjgsIDMuMCwgLTQuNSwgLTYuNywgLTIuNywgLTYuNywgLTUuMCwgLTYuOCwgLTIuNSwgLTYuNywgLTcuNSwgLTEwLjQsIC03LjQsIC0xMC4yLCAtNTAuMCwgLTE1LjUsIC01MC4wLCAtMTQuMiwgLTguOSwgLTEwLjIsIC04LjUsIC0xMC4wLCAtNTAuMCwgLTE1LjYsIC0xNS4zLCAtMTUuNSwgLTEzLjAsIC0xOC44LCAtMTIuNiwgLTE4LjMsXSxcbiAgICAgICAgICAgIFstOC4xLCAtMS4xLCAtOC45LCAxLjQsIC04LjYsIC05LjIsIC05LjQsIC02LjgsIC0xMS4wLCAtNC45LCAtMTEuNSwgLTIuNiwgLTEzLjcsIC0xNi44LCAtMTQuNSwgLTEyLjYsIC02LjAsIC02LjcsIC03LjIsIC00LjIsIC0xMS42LCAtMTEuOSwgLTExLjIsIC0xMC45LCAtMTMuMSwgLTEyLjIsIC0xMi41LCAtMTAuMywgLTE2LjgsIC0xNy4yLCAtMTcuOCwgLTE0LjYsIDMuNSwgMTAuMywgMy4wLCAxMi40LCAtNi45LCAtNy41LCAtNi44LCAtNC45LCAtNS40LCAtNC4yLCAtNS40LCAtMS4zLCAtMTAuOCwgLTExLjUsIC0xMi40LCAtOC4yLCAtNTAuMCwgLTEyLjUsIC01MC4wLCAtOC45LCAtOS4yLCAtMTAuMCwgLTkuNCwgLTcuOSwgLTUwLjAsIC0xNC4zLCAtMTkuOSwgLTExLjQsIC0xNi4yLCAtMTkuMiwgLTE1LjgsIC0xNS45LF0sXG4gICAgICAgICAgICBbLTYuMywgLTcuNCwgLTguMCwgLTYuMCwgMi44LCAtMC43LCAwLjksIDAuMywgLTcuNSwgLTQuNCwgLTguNCwgLTMuNiwgLTMuMCwgLTcuNywgLTMuNywgLTYuMiwgLTUuMywgLTEwLjAsIC03LjIsIC04LjksIC0wLjcsIC0zLjIsIC0xLjgsIC0yLjQsIC05LjksIC0xMS43LCAtOS42LCAtOS45LCAtNi4zLCAtOS43LCAtOC4wLCAtOC40LCAtMy4wLCAtNy43LCAtNC41LCAtNi45LCAxMS4zLCA4LjIsIDkuNCwgOS4xLCAtMS4wLCAtMy4zLCAtMS44LCAtMi40LCAxLjUsIC0yLjEsIC0wLjQsIC0xLjEsIC01MC4wLCAtMTQuNSwgLTUwLjAsIC0xMi45LCAyLjgsIC0wLjAsIDEuNCwgMC43LCAtNTAuMCwgLTguNywgLTE0LjEsIC03LjUsIC01LjIsIC0xMi41LCAtNi41LCAtMTAuNyxdLFxuICAgICAgICAgICAgWy05LjksIC01LjAsIC0xMC4wLCAtNi41LCAtMC43LCAyLjYsIC0wLjIsIDAuMSwgLTEwLjMsIC0xLjgsIC05LjksIC0zLjgsIC02LjQsIC00LjcsIC01LjgsIC02LjcsIC04LjIsIC04LjMsIC04LjAsIC0xMC4yLCAtMy45LCAtMS4wLCAtMi43LCAtMi45LCAtMTEuNywgLTguOCwgLTExLjAsIC0xMC4xLCAtOS41LCAtNy4zLCAtOS40LCAtOC43LCAtNy4wLCAtNS4yLCAtNi43LCAtNy41LCA4LjIsIDExLjYsIDguOCwgOS4xLCAtMy43LCAtMC45LCAtMy4xLCAtMy4wLCAtMi4wLCAxLjIsIC0yLjMsIC0xLjMsIC01MC4wLCAtMTIuMSwgLTUwLjAsIC0xMi42LCAwLjEsIDIuNSwgMC43LCAwLjYsIC01MC4wLCAtNi4wLCAtMTQuOCwgLTcuNSwgLTguNiwgLTkuNCwgLTguNSwgLTExLjIsXSxcbiAgICAgICAgICAgIFstNy41LCAtNi4yLCAtNy4yLCAtNi4yLCAwLjksIDAuMiwgMi41LCAwLjIsIC04LjMsIC0zLjUsIC03LjEsIC0zLjcsIC00LjEsIC02LjMsIC0zLjEsIC02LjMsIC01LjcsIC04LjksIC01LjYsIC04LjQsIC0yLjMsIC0yLjIsIDAuNywgLTIuNywgLTkuOCwgLTguOSwgLTcuMSwgLTkuMywgLTcuNSwgLTguMiwgLTYuMiwgLTcuOSwgLTQuMywgLTYuMiwgLTIuNywgLTYuOCwgOS40LCA4LjgsIDEyLjEsIDguOCwgLTIuMSwgLTIuMCwgMC4xLCAtMi40LCAwLjAsIC0xLjEsIDEuMywgLTAuOCwgLTUwLjAsIC0xMS45LCAtNTAuMCwgLTEyLjYsIDEuMiwgMC43LCAzLjUsIDAuOCwgLTUwLjAsIC03LjEsIC0xMi40LCAtNy4xLCAtNy4xLCAtMTAuNiwgLTUuMCwgLTEwLjYsXSxcbiAgICAgICAgICAgIFstOS4wLCAtNi41LCAtMTAuMCwgLTQuOCwgMC4xLCAtMC4xLCAtMC4zLCAyLjQsIC05LjksIC0zLjUsIC0xMC42LCAtMi4wLCAtNS40LCAtNi42LCAtNS42LCAtNC40LCAtNy42LCAtOS45LCAtOC41LCAtOC4yLCAtMy4wLCAtMi44LCAtMy4wLCAtMC45LCAtMTIuOCwgLTExLjgsIC0xMC43LCAtOS4zLCAtOC44LCAtOS4yLCAtOS4yLCAtNy4xLCAtNi4yLCAtNy4zLCAtNi43LCAtNC45LCA5LjEsIDkuMSwgOC44LCAxMS4yLCAtMy4xLCAtMy4wLCAtMy4zLCAtMS4wLCAtMS4xLCAtMS40LCAtMi4wLCAxLjIsIC01MC4wLCAtMTIuOCwgLTUwLjAsIC0xMC45LCAwLjgsIDAuNSwgMC43LCAyLjMsIC01MC4wLCAtNy41LCAtMTYuNSwgLTUuOSwgLTcuOCwgLTExLjEsIC03LjgsIC05LjAsXSxcbiAgICAgICAgICAgIFstNy4xLCAtNS42LCAtOS4xLCAtNS4xLCAtNS45LCAtOC4wLCAtNi45LCAtNy40LCAtMS45LCAtMS42LCAtNC43LCAtMS40LCAtOS42LCAtMTQuNiwgLTEwLjQsIC0xMy4wLCAtNi43LCAtMTAuOCwgLTkuNCwgLTkuOSwgLTkuMSwgLTEwLjUsIC05LjEsIC0xMC40LCAtNS45LCAtOS4zLCAtNy45LCAtOC4xLCAtMTIuNywgLTE1LjAsIC0xNS4xLCAtMTQuMywgLTIuMiwgLTUuNCwgLTUuMCwgLTUuNCwgLTEuMCwgLTMuNywgLTIuMSwgLTMuMSwgMTIuOCwgOS42LCAxMS4xLCAxMC4xLCAtNC44LCAtOS40LCAtOC4xLCAtOC42LCAtNTAuMCwgLTE4LjMsIC01MC4wLCAtMTUuNCwgLTUuOSwgLTcuNSwgLTYuNiwgLTcuMSwgLTUwLjAsIC05LjUsIC0xMS43LCAtOC40LCAtMTIuNSwgLTE3LjMsIC0xMy4yLCAtMTUuNCxdLFxuICAgICAgICAgICAgWy0xMC4yLCAtMS42LCAtMTAuMiwgLTMuMiwgLTcuMywgLTQuNiwgLTYuNSwgLTYuMiwgLTYuNywgMy4wLCAtNi44LCAwLjgsIC0xMS45LCAtMTAuOCwgLTExLjUsIC0xMi4yLCAtOS42LCAtNy4xLCAtOS43LCAtOC40LCAtOS44LCAtOC4xLCAtOC4yLCAtOS43LCAtOS40LCAtNS4wLCAtOC4wLCAtNy4yLCAtMTUuMiwgLTEyLjgsIC0xNC45LCAtMTMuOCwgLTYuNiwgLTEuNywgLTYuOCwgLTQuMiwgLTMuMywgLTAuOSwgLTIuMCwgLTMuMCwgOS42LCAxMi44LCA5LjcsIDEwLjUsIC04LjUsIC01LjYsIC05LjMsIC03LjgsIC01MC4wLCAtMTIuNywgLTUwLjAsIC0xMy44LCAtNi44LCAtNS4xLCAtNS4zLCAtNi41LCAtNTAuMCwgLTQuMSwgLTEyLjgsIC01LjgsIC0xNC40LCAtMTQuMSwgLTEzLjYsIC0xNC44LF0sXG4gICAgICAgICAgICBbLTguMiwgLTQuNywgLTcuMSwgLTUuMCwgLTYuNSwgLTcuNywgLTUuNSwgLTYuOSwgLTQuMSwgLTAuOCwgLTEuMiwgLTAuOSwgLTEwLjUsIC0xMi44LCAtOC4yLCAtMTMuMCwgLTcuNSwgLTEwLjAsIC03LjIsIC05LjcsIC05LjIsIC05LjQsIC03LjMsIC0xMC4yLCAtNi41LCAtOC4wLCAtNC4zLCAtOC4wLCAtMTMuMSwgLTE0LjEsIC0xMi4yLCAtMTMuOCwgLTMuNywgLTUuNCwgLTIuNSwgLTUuNCwgLTEuOCwgLTMuMSwgMC4xLCAtMy4zLCAxMS4xLCA5LjcsIDEyLjksIDkuOCwgLTUuNSwgLTguMSwgLTUuNCwgLTcuOCwgLTUwLjAsIC0xNi40LCAtNTAuMCwgLTE0LjgsIC01LjksIC03LjEsIC00LjcsIC03LjIsIC01MC4wLCAtOC40LCAtNi40LCAtOC4xLCAtMTIuMSwgLTE2LjIsIC0xMC4zLCAtMTUuOCxdLFxuICAgICAgICAgICAgWy05LjIsIC0zLjAsIC05LjksIC0xLjIsIC02LjUsIC02LjEsIC02LjgsIC00LjQsIC02LjQsIDAuOSwgLTcuMCwgMy4wLCAtMTEuOCwgLTEzLjAsIC0xMS4xLCAtMTAuNCwgLTkuMywgLTkuMiwgLTkuOCwgLTYuNCwgLTkuNSwgLTkuNSwgLTkuNCwgLTguMCwgLTguMSwgLTguMiwgLTkuNCwgLTUuMiwgLTE0LjIsIC0xNC45LCAtMTQuOSwgLTEyLjMsIC01LjcsIC0zLjcsIC02LjcsIC0xLjMsIC0yLjQsIC0zLjAsIC0yLjQsIC0xLjAsIDEwLjEsIDEwLjUsIDkuOCwgMTMuMSwgLTcuMiwgLTguMCwgLTguNCwgLTUuMCwgLTUwLjAsIC0xNC43LCAtNTAuMCwgLTExLjQsIC02LjMsIC02LjcsIC01LjgsIC01LjAsIC01MC4wLCAtNi4xLCAtMTMuNCwgLTMuNiwgLTEzLjAsIC0xNi4wLCAtMTMuNywgLTEzLjMsXSxcbiAgICAgICAgICAgIFstOC4yLCAtMTAuOCwgLTEwLjEsIC05LjgsIC0wLjQsIC0zLjYsIC0xLjcsIC0yLjksIC03LjksIC04LjQsIC05LjgsIC04LjIsIDYuMiwgMi4zLCAwLjYsIDIuOSwgLTcuMSwgLTExLjYsIC05LjIsIC0xMS4xLCAtNS42LCAtOC4zLCAtNy4yLCAtOC40LCAtMTAuNywgLTEzLjYsIC0xMS40LCAtMTIuMCwgMC4wLCAtMi44LCAtMS44LCAtMi40LCAtNi4wLCAtMTEuNiwgLTcuNSwgLTEwLjgsIDEuNSwgLTIuMCwgMC4wLCAtMS4xLCAtNC44LCAtOC41LCAtNS41LCAtNy4yLCAxMS45LCA4LjYsIDEwLjAsIDkuMCwgLTUwLjAsIC0xNC4yLCAtNTAuMCwgLTEyLjgsIC00LjEsIC03LjQsIC01LjcsIC02LjUsIC01MC4wLCAtMTEuMCwgLTE0LjMsIC05LjksIDEuNCwgLTcuOSwgLTAuNywgLTYuOCxdLFxuICAgICAgICAgICAgWy0xMi41LCAtOC43LCAtMTMuMCwgLTkuOSwgLTMuOSwgLTEuMCwgLTMuNCwgLTIuOSwgLTEyLjUsIC02LjMsIC0xMS42LCAtOC4xLCAzLjMsIDYuMCwgLTEuNiwgMy44LCAtMTAuNSwgLTEwLjEsIC0xMS4xLCAtMTEuMSwgLTkuMCwgLTYuOSwgLTguMiwgLTkuMSwgLTE0LjAsIC0xMS40LCAtMTIuMywgLTEyLjEsIC0zLjEsIDAuMiwgLTMuMiwgLTIuMiwgLTEwLjQsIC05LjEsIC0xMC40LCAtMTEuNSwgLTIuMSwgMS4yLCAtMS4xLCAtMS40LCAtOS40LCAtNS42LCAtOC4xLCAtOC4wLCA4LjYsIDEyLjQsIDguNiwgOS41LCAtNTAuMCwgLTEwLjQsIC01MC4wLCAtMTEuNiwgLTcuMiwgLTUuNywgLTcuNSwgLTcuNCwgLTUwLjAsIC04LjYsIC0xNS43LCAtOS43LCAtMy4wLCAtMy43LCAtMy4yLCAtNS45LF0sXG4gICAgICAgICAgICBbLTExLjEsIC0xMS45LCAtMTAuNiwgLTExLjMsIC0yLjYsIC00LjEsIC0xLjcsIC0zLjUsIC0xMS40LCAtOS42LCAtOS42LCAtOS4yLCAzLjcsIDIuNSwgMS42LCAyLjUsIC05LjYsIC0xMi4zLCAtOS41LCAtMTEuOCwgLTguMCwgLTkuNCwgLTcuMiwgLTkuMywgLTEzLjMsIC0xMi44LCAtMTAuOSwgLTEyLjYsIC0xLjgsIC0yLjksIC0wLjgsIC0yLjksIC04LjYsIC0xMy4wLCAtNy40LCAtMTIuNCwgLTAuNCwgLTIuMywgMS4zLCAtMi4wLCAtOC4xLCAtOS4zLCAtNS40LCAtOC40LCAxMC4wLCA4LjYsIDExLjQsIDguOSwgLTUwLjAsIC0xMy43LCAtNTAuMCwgLTEzLjIsIC02LjEsIC04LjEsIC01LjUsIC03LjUsIC01MC4wLCAtMTEuMywgLTEyLjcsIC0xMC4xLCAtMS42LCAtNy44LCAtMC4zLCAtNy4yLF0sXG4gICAgICAgICAgICBbLTExLjQsIC0xMC4wLCAtMTIuNywgLTguMiwgLTMuMSwgLTMuMSwgLTIuOCwgLTAuOSwgLTExLjcsIC03LjMsIC0xMi4xLCAtNS44LCAzLjYsIDMuNiwgLTEuMSwgNS44LCAtOS40LCAtMTEuOSwgLTEwLjcsIC0xMC4wLCAtOC41LCAtOC44LCAtOC4yLCAtNi41LCAtMTMuOSwgLTEzLjAsIC0xMi45LCAtMTAuOSwgLTMuMSwgLTIuMywgLTMuMiwgLTAuMiwgLTkuNSwgLTEwLjgsIC0xMC4yLCAtOC4yLCAtMS4xLCAtMS4zLCAtMC44LCAxLjIsIC04LjYsIC03LjgsIC03LjgsIC01LjAsIDkuMCwgOS41LCA4LjksIDEyLjAsIC01MC4wLCAtMTMuMCwgLTUwLjAsIC0xMC4zLCAtNi4yLCAtNy4wLCAtNy4xLCAtNS40LCAtNTAuMCwgLTkuMywgLTE0LjAsIC04LjIsIC0yLjQsIC02LjMsIC0yLjQsIC0zLjksXSxcbiAgICAgICAgICAgIFstNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAzMy4zLCAtNTAuMCwgMzAuNiwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAyOS4yLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCxdLFxuICAgICAgICAgICAgWy0xNC44LCAtNi4yLCAtMTQuOSwgLTcuNiwgLTE0LjYsIC0xMS42LCAtMTMuMCwgLTEyLjIsIC0xNC4wLCAtOS4wLCAtMTQuMSwgLTEwLjEsIC0xMy42LCAtMTEuMiwgLTEyLjQsIC0xMi41LCAtOC4xLCAyLjIsIC04LjcsIDAuNCwgLTE1LjMsIC0xMS4zLCAtMTMuMiwgLTEzLjMsIC0xMS45LCAtNy4yLCAtMTEuOCwgLTcuOSwgLTEwLjcsIC03LjQsIC0xMC44LCAtOC45LCAtMTUuNSwgLTEwLjMsIC0xNS41LCAtMTIuNSwgLTE0LjUsIC0xMi4xLCAtMTEuOSwgLTEyLjgsIC0xOC4zLCAtMTIuNywgLTE2LjQsIC0xNC43LCAtMTQuMiwgLTEwLjQsIC0xMy43LCAtMTMuMCwgLTUwLjAsIDE1LjEsIC01MC4wLCAxMy4zLCAtOS45LCAtNS44LCAtOC45LCAtNy42LCAtNTAuMCwgLTEuNSwgLTcuOCwgLTMuMCwgLTguMSwgMy42LCAtOS40LCAyLjAsXSxcbiAgICAgICAgICAgIFstNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAzMC42LCAtNTAuMCwgMzUuMiwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAyOC41LCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCxdLFxuICAgICAgICAgICAgWy0xMy44LCAtNy41LCAtMTQuNCwgLTUuMSwgLTEyLjYsIC0xMS42LCAtMTEuNSwgLTEwLjEsIC0xMy4yLCAtOS43LCAtMTIuNywgLTcuNCwgLTExLjksIC0xMS45LCAtMTEuNSwgLTEwLjIsIC03LjIsIDAuOSwgLTguNiwgMi42LCAtMTQuMSwgLTEyLjgsIC0xMy4zLCAtMTEuMCwgLTkuNywgLTguNCwgLTExLjIsIC01LjMsIC05LjMsIC04LjcsIC05LjksIC03LjEsIC0xMy45LCAtMTEuMiwgLTE0LjIsIC04LjksIC0xMi45LCAtMTIuNiwgLTEyLjYsIC0xMC45LCAtMTUuNCwgLTEzLjgsIC0xNC44LCAtMTEuNCwgLTEyLjgsIC0xMS42LCAtMTMuMiwgLTEwLjMsIC01MC4wLCAxMy4zLCAtNTAuMCwgMTUuMiwgLTguNiwgLTcuMCwgLTguNCwgLTQuOCwgLTUwLjAsIC0zLjAsIC03LjEsIC0wLjEsIC03LjMsIDIuMywgLTguNywgMy45LF0sXG4gICAgICAgICAgICBbLTcuMywgLTYuMywgLTguOSwgLTUuNSwgMi45LCAwLjIsIDEuNSwgMS4yLCAtOC41LCAtMi4zLCAtMTAuMCwgLTEuNywgLTUuNiwgLTEwLjUsIC01LjUsIC05LjYsIC00LjMsIC03LjksIC02LjEsIC03LjIsIDIuMywgLTAuNiwgMC41LCAtMC4wLCAtOC45LCAtMTEuMCwgLTkuNCwgLTkuMywgLTQuNiwgLTkuNCwgLTcuMywgLTguMSwgLTcuOCwgLTkuOCwgLTguOSwgLTkuMiwgMi44LCAwLjEsIDEuMiwgMC44LCAtNS45LCAtNi44LCAtNS45LCAtNi4zLCAtNC4xLCAtNy4yLCAtNi4xLCAtNi4yLCAtNTAuMCwgLTkuOSwgLTUwLjAsIC04LjYsIDEyLjUsIDkuNCwgMTEuMCwgOS44LCAtNTAuMCwgLTQuOCwgLTguNywgLTMuNSwgLTAuMCwgLTguNiwgLTIuMSwgLTcuMCxdLFxuICAgICAgICAgICAgWy0xMC4xLCAtNC4zLCAtMTAuOCwgLTUuOCwgMC4xLCAyLjMsIDAuNywgMC42LCAtMTAuNCwgLTAuMiwgLTEwLjgsIC0yLjAsIC04LjgsIC05LjIsIC04LjAsIC05LjcsIC02LjgsIC01LjksIC03LjUsIC03LjAsIC0xLjQsIDIuMiwgLTAuOSwgLTAuNCwgLTEwLjgsIC03LjcsIC05LjgsIC04LjgsIC04LjksIC03LjMsIC05LjYsIC05LjEsIC0xMC41LCAtOC4zLCAtMTAuMiwgLTEwLjAsIC0wLjAsIDIuNSwgMC43LCAwLjUsIC03LjUsIC01LjEsIC03LjEsIC02LjcsIC03LjQsIC01LjcsIC04LjEsIC03LjAsIC01MC4wLCAtNS44LCAtNTAuMCwgLTcuMCwgOS40LCAxMi43LCAxMC4xLCAxMC4wLCAtNTAuMCwgLTEuNSwgLTExLjMsIC0zLjMsIC01LjQsIC00LjIsIC01LjYsIC02LjgsXSxcbiAgICAgICAgICAgIFstOC40LCAtNi4yLCAtOC45LCAtNS45LCAxLjgsIDAuNCwgMi43LCAxLjIsIC05LjEsIC0xLjIsIC04LjgsIC0xLjUsIC03LjIsIC0xMC41LCAtNC45LCAtOS42LCAtNS43LCAtNy40LCAtNS41LCAtNy40LCAwLjMsIC0wLjMsIDEuOCwgLTAuNCwgLTkuMCwgLTguNywgLTcuMywgLTguOSwgLTUuOSwgLTkuNCwgLTYuNCwgLTguNywgLTguNywgLTkuMSwgLTguNSwgLTkuNCwgMS40LCAwLjcsIDMuNSwgMC43LCAtNi42LCAtNS4zLCAtNC43LCAtNS44LCAtNS43LCAtNy41LCAtNS41LCAtNy4xLCAtNTAuMCwgLTguOSwgLTUwLjAsIC04LjQsIDExLjAsIDEwLjEsIDEzLjIsIDEwLjIsIC01MC4wLCAtNC4yLCAtNi4xLCAtMy42LCAtMy41LCAtOC40LCAtMS4yLCAtNi44LF0sXG4gICAgICAgICAgICBbLTkuMSwgLTUuNCwgLTEwLjQsIC00LjIsIDEuMCwgMC41LCAwLjYsIDIuNCwgLTkuNiwgLTEuNSwgLTEwLjUsIC0wLjUsIC04LjksIC0xMC41LCAtNy4yLCAtOC4zLCAtNi4zLCAtNi45LCAtNy43LCAtNS4xLCAtMC41LCAwLjEsIC0wLjYsIDIuMywgLTExLjEsIC0xMC4yLCAtMTAuNSwgLTcuMCwgLTguMywgLTkuNCwgLTkuNCwgLTYuNiwgLTkuNiwgLTkuNywgLTEwLjAsIC03LjksIDAuNywgMC42LCAwLjgsIDIuMywgLTcuMSwgLTYuNSwgLTcuMiwgLTUuMCwgLTYuNSwgLTcuNCwgLTcuNSwgLTUuNCwgLTUwLjAsIC03LjYsIC01MC4wLCAtNC44LCA5LjgsIDEwLjAsIDEwLjIsIDEyLjEsIC01MC4wLCAtMy4xLCAtMTEuNCwgLTAuNywgLTQuNiwgLTYuNiwgLTQuOSwgLTMuOSxdLFxuICAgICAgICAgICAgWy01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIDI5LjIsIC01MC4wLCAyOC41LCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIDMzLjMsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLF0sXG4gICAgICAgICAgICBbLTEzLjAsIC03LjAsIC0xMy4xLCAtOC4zLCAtOS4yLCAtNi41LCAtOC45LCAtNy42LCAtOS44LCAtMC43LCAtOS4yLCAtMi4xLCAtMTIuNCwgLTEwLjMsIC0xMi40LCAtMTEuNiwgLTkuNSwgLTQuNiwgLTEwLjQsIC01LjcsIC0xMy42LCAtMTAuMSwgLTExLjQsIC0xMC45LCAtNi41LCAtMS41LCAtNi4yLCAtMy42LCAtMTIuOCwgLTguMCwgLTEyLjMsIC05LjcsIC0xNi41LCAtMTIuNywgLTE1LjYsIC0xNC4zLCAtOC43LCAtNi4wLCAtNy4xLCAtNy41LCAtOS41LCAtNC4xLCAtOC40LCAtNi4xLCAtMTEuMCwgLTguNiwgLTExLjMsIC05LjMsIC01MC4wLCAtMS41LCAtNTAuMCwgLTMuMCwgLTQuOCwgLTEuNSwgLTQuMiwgLTMuMSwgLTUwLjAsIDE2LjQsIC01LjEsIDE0LjIsIC0xMC4xLCAtNC4zLCAtMTAuMCwgLTUuNCxdLFxuICAgICAgICAgICAgWy0xMy41LCAtMTYuMywgLTExLjgsIC0xNS41LCAtMTMuNiwgLTE1LjMsIC0xMi4xLCAtMTYuMSwgLTcuNywgLTEzLjMsIC00LjIsIC0xMi42LCAtMTQuMSwgLTE2LjIsIC0xMC4zLCAtMTUuNCwgLTkuNiwgLTExLjYsIC03LjcsIC05LjgsIC0xNC4zLCAtMTcuNSwgLTExLjEsIC0xNy4yLCAtNS4zLCAtNy4xLCAtMi4yLCAtNy4xLCAtOS42LCAtMTEuOSwgLTguNywgLTExLjQsIC0xNy4xLCAtMjAuNiwgLTE1LjMsIC0xOS45LCAtMTQuMSwgLTE0LjgsIC0xMi40LCAtMTYuNSwgLTExLjcsIC0xMi44LCAtNi40LCAtMTMuNCwgLTE0LjMsIC0xNS43LCAtMTIuNywgLTE0LjAsIC01MC4wLCAtNy44LCAtNTAuMCwgLTcuMSwgLTguNywgLTExLjMsIC02LjEsIC0xMS40LCAtNTAuMCwgLTUuMSwgMTguNiwgLTQuOCwgLTguNiwgLTguMSwgLTQuNSwgLTcuMyxdLFxuICAgICAgICAgICAgWy0xMi40LCAtOC4yLCAtMTMuMCwgLTUuOSwgLTcuNywgLTcuOCwgLTcuNCwgLTUuOCwgLTguOCwgLTIuMCwgLTkuMywgLTAuNCwgLTExLjYsIC0xMS4zLCAtMTEuNiwgLTkuNCwgLTguOSwgLTUuNiwgLTEwLjAsIC0zLjIsIC0xMS41LCAtMTEuMSwgLTEwLjUsIC04LjMsIC02LjMsIC00LjksIC02LjcsIC0xLjIsIC0xMC42LCAtOS43LCAtMTEuMywgLTguMCwgLTE0LjgsIC0xMy4xLCAtMTUuNSwgLTExLjQsIC03LjUsIC03LjUsIC03LjEsIC01LjksIC04LjQsIC01LjgsIC04LjEsIC0zLjYsIC05LjksIC05LjcsIC0xMC4xLCAtOC4yLCAtNTAuMCwgLTMuMCwgLTUwLjAsIC0wLjEsIC0zLjUsIC0zLjMsIC0zLjYsIC0wLjcsIC01MC4wLCAxNC4yLCAtNC44LCAxNi40LCAtOC45LCAtNS44LCAtOC45LCAtMy40LF0sXG4gICAgICAgICAgICBbLTEwLjcsIC0xMy4yLCAtMTIuNCwgLTExLjYsIC00LjgsIC04LjQsIC02LjEsIC03LjIsIC0xMC4zLCAtMTEuOCwgLTExLjAsIC0xMS42LCAyLjgsIC0xLjcsIDAuNywgLTEuMSwgLTYuMiwgLTkuNywgLTcuMywgLTguNCwgLTUuMywgLTguNiwgLTYuMSwgLTguMywgLTEwLjUsIC0xMS4yLCAtOS44LCAtMTAuMiwgOS41LCA2LjUsIDcuNiwgNi44LCAtMTIuMSwgLTE2LjAsIC0xMy4wLCAtMTYuMiwgLTUuMiwgLTguNiwgLTcuMSwgLTcuOCwgLTEyLjUsIC0xNC40LCAtMTIuMSwgLTEzLjAsIDEuNCwgLTMuMCwgLTEuNiwgLTIuNCwgLTUwLjAsIC04LjEsIC01MC4wLCAtNy4zLCAtMC4wLCAtNS40LCAtMy41LCAtNC42LCAtNTAuMCwgLTEwLjEsIC04LjYsIC04LjksIDEzLjIsIC0wLjksIDkuNywgLTAuMyxdLFxuICAgICAgICAgICAgWy0xOC4xLCAtMTIuMywgLTE5LjQsIC0xNC4yLCAtMTIuMiwgLTkuNSwgLTExLjUsIC0xMC44LCAtMTcuOSwgLTExLjksIC0xOC4yLCAtMTMuOSwgLTYuNCwgLTMuNywgLTYuOCwgLTUuNCwgLTEyLjgsIC01LjksIC0xMy42LCAtNy40LCAtMTMuNywgLTkuOSwgLTEyLjksIC0xMi43LCAtMTYuMiwgLTExLjYsIC0xNS4yLCAtMTIuNywgLTMuMiwgMC41LCAtMy4zLCAtMS44LCAtMTguOSwgLTE2LjYsIC0xOC44LCAtMTkuMiwgLTEyLjUsIC05LjQsIC0xMC42LCAtMTEuMSwgLTE3LjMsIC0xNC4xLCAtMTYuMiwgLTE2LjAsIC03LjksIC0zLjcsIC03LjgsIC02LjMsIC01MC4wLCAzLjYsIC01MC4wLCAyLjMsIC04LjYsIC00LjIsIC04LjQsIC02LjYsIC01MC4wLCAtNC4zLCAtOC4xLCAtNS44LCAtMC45LCAxNC4yLCAtMS44LCAxMS42LF0sXG4gICAgICAgICAgICBbLTExLjgsIC0xMy4xLCAtMTEuNSwgLTEyLjAsIC02LjIsIC04LjMsIC01LjQsIC03LjQsIC0xMS44LCAtMTIuMywgLTExLjEsIC0xMS40LCAwLjUsIC0yLjUsIDIuNCwgLTEuNiwgLTYuOCwgLTkuOSwgLTYuNCwgLTguOSwgLTYuMSwgLTguNiwgLTUuMCwgLTcuOCwgLTEwLjQsIC0xMS42LCAtOC41LCAtOS45LCA4LjIsIDYuNCwgOC43LCA2LjksIC0xMi40LCAtMTcuMCwgLTEyLjYsIC0xNS44LCAtNi41LCAtOC41LCAtNS4wLCAtNy44LCAtMTMuMiwgLTEzLjYsIC0xMC4zLCAtMTMuNywgLTAuNywgLTMuMiwgLTAuMywgLTIuNCwgLTUwLjAsIC05LjQsIC01MC4wLCAtOC43LCAtMi4xLCAtNS42LCAtMS4yLCAtNC45LCAtNTAuMCwgLTEwLjAsIC00LjUsIC04LjksIDkuNywgLTEuOCwgMTEuMywgLTAuOSxdLFxuICAgICAgICAgICAgWy0xNy4yLCAtMTMuMywgLTE3LjgsIC0xMS42LCAtMTEuMCwgLTExLjEsIC0xMC40LCAtOS4wLCAtMTYuMCwgLTEyLjcsIC0xNi4xLCAtMTEuMSwgLTUuMiwgLTUuNCwgLTYuMCwgLTMuMywgLTExLjgsIC03LjMsIC0xMy4zLCAtNS45LCAtMTIuNywgLTExLjksIC0xMS45LCAtOS4zLCAtMTUuMiwgLTE1LjAsIC0xNC45LCAtMTEuMCwgLTIuOCwgLTEuOCwgLTIuOSwgMC40LCAtMTcuNCwgLTE4LjQsIC0xOC4zLCAtMTUuOSwgLTEwLjcsIC0xMS4yLCAtMTAuNiwgLTkuMCwgLTE1LjQsIC0xNC44LCAtMTUuOCwgLTEzLjMsIC02LjgsIC01LjksIC03LjIsIC0zLjksIC01MC4wLCAyLjAsIC01MC4wLCAzLjksIC03LjAsIC02LjgsIC02LjgsIC0zLjksIC01MC4wLCAtNS40LCAtNy4zLCAtMy40LCAtMC4zLCAxMS42LCAtMC45LCAxNC4xLF1dO1xuICAgICAgICB0aGlzLlRSQU5TID0gW1s1LCAwLCAwLCA0XSxcbiAgICAgICAgICAgIFswLCA1LCA0LCAwXSxcbiAgICAgICAgICAgIFswLCA0LCA1LCAwXSxcbiAgICAgICAgICAgIFs0LCAwLCAwLCA1XV07XG4gICAgICAgIHRoaXMuQ09OQkxPID0geyAnQSc6IDAsICdSJzogMSwgJ04nOiAyLCAnRCc6IDMsICdDJzogNCwgJ1EnOiA1LCAnRSc6IDYsICdHJzogNywgJ0gnOiA4LCAnSSc6IDksICdMJzogMTAsICdLJzogMTEsICdNJzogMTIsICdGJzogMTMsICdQJzogMTQsICdTJzogMTUsICdUJzogMTYsICdXJzogMTcsICdZJzogMTgsICdWJzogMTksICdCJzogMjAsICdaJzogMjEsICdYJzogMjIsICcqJzogMjMgfTtcbiAgICAgICAgdGhpcy5DT05OVUNMID0geyAnQSc6IDAsICdUJzogMSwgJ0MnOiAyLCAnRyc6IDMgfTtcbiAgICAgICAgdGhpcy5DT05TQ0hOID0geyAnQUFBJzogMCwgJ0FBQyc6IDEsICdBQUcnOiAyLCAnQUFUJzogMywgJ0FDQSc6IDQsICdBQ0MnOiA1LCAnQUNHJzogNiwgJ0FDVCc6IDcsICdBR0EnOiA4LCAnQUdDJzogOSwgJ0FHRyc6IDEwLCAnQUdUJzogMTEsICdBVEEnOiAxMiwgJ0FUQyc6IDEzLCAnQVRHJzogMTQsICdBVFQnOiAxNSwgJ0NBQSc6IDE2LCAnQ0FDJzogMTcsICdDQUcnOiAxOCwgJ0NBVCc6IDE5LCAnQ0NBJzogMjAsICdDQ0MnOiAyMSwgJ0NDRyc6IDIyLCAnQ0NUJzogMjMsICdDR0EnOiAyNCwgJ0NHQyc6IDI1LCAnQ0dHJzogMjYsICdDR1QnOiAyNywgJ0NUQSc6IDI4LCAnQ1RDJzogMjksICdDVEcnOiAzMCwgJ0NUVCc6IDMxLCAnR0FBJzogMzIsICdHQUMnOiAzMywgJ0dBRyc6IDM0LCAnR0FUJzogMzUsICdHQ0EnOiAzNiwgJ0dDQyc6IDM3LCAnR0NHJzogMzgsICdHQ1QnOiAzOSwgJ0dHQSc6IDQwLCAnR0dDJzogNDEsICdHR0cnOiA0MiwgJ0dHVCc6IDQzLCAnR1RBJzogNDQsICdHVEMnOiA0NSwgJ0dURyc6IDQ2LCAnR1RUJzogNDcsICdUQUEnOiA0OCwgJ1RBQyc6IDQ5LCAnVEFHJzogNTAsICdUQVQnOiA1MSwgJ1RDQSc6IDUyLCAnVENDJzogNTMsICdUQ0cnOiA1NCwgJ1RDVCc6IDU1LCAnVEdBJzogNTYsICdUR0MnOiA1NywgJ1RHRyc6IDU4LCAnVEdUJzogNTksICdUVEEnOiA2MCwgJ1RUQyc6IDYxLCAnVFRHJzogNjIsICdUVFQnOiA2MyB9O1xuICAgICAgICB0aGlzLnNldE1ldGhvZChhbGlnbkdyaWRfKTtcbiAgICAgICAgdGhpcy5zZXRTZXF1ZW5jZXMoc2VxMV8sIHNlcTJfKTtcbiAgICAgICAgdGhpcy5zZXRHYXAoZ2FwXyk7XG4gICAgfVxuICAgIGZpbGxOZWVkbGVtYW4oKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHRoaXMubGVuMTsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVswXS52YWx1ZSA9IC1pICogdGhpcy5nYXA7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVswXS5wYXJlbnRJID0gaSAtIDE7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVswXS5wYXJlbnRKID0gMDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLmxlbjI7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbMF1baV0udmFsdWUgPSAtaSAqIHRoaXMuZ2FwO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbMF1baV0ucGFyZW50SSA9IDA7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFswXVtpXS5wYXJlbnRKID0gaSAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmlsbE9uZShpLCBqKSB7XG4gICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlID0gTWF0aC5tYXgodGhpcy5kcEdyaWRbaSAtIDFdW2ogLSAxXS52YWx1ZSArIHRoaXMuc2NvcmVzW2kgLSAxXVtqIC0gMV0sIE1hdGgubWF4KHRoaXMuZHBHcmlkW2kgLSAxXVtqXS52YWx1ZSAtIHRoaXMuZ2FwLCB0aGlzLmRwR3JpZFtpXVtqIC0gMV0udmFsdWUgLSB0aGlzLmdhcCkpO1xuICAgICAgICBpZiAodGhpcy5kcEdyaWRbaV1bal0udmFsdWUgPT0gdGhpcy5kcEdyaWRbaSAtIDFdW2ogLSAxXS52YWx1ZSArIHRoaXMuc2NvcmVzW2kgLSAxXVtqIC0gMV0pIHtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEkgPSBpIC0gMTtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEogPSBqIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmRwR3JpZFtpXVtqXS52YWx1ZSA9PSB0aGlzLmRwR3JpZFtpIC0gMV1bal0udmFsdWUgLSB0aGlzLmdhcCkge1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SSA9IGkgLSAxO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SiA9IGo7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJID0gaTtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEogPSBqIC0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBncmlkRnJvbU5hbWUocGF0aCkge1xuICAgICAgICBzd2l0Y2ggKHBhdGgpIHtcbiAgICAgICAgICAgIGNhc2UgJ0JMT1NVTTQ1JzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuQkxPU1VNNDU7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCTE9TVU01MCc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLkJMT1NVTTUwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkxPU1VNNjInOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5CTE9TVU02MjtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05CTE87XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JMT1NVTTgwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuQkxPU1VNODA7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCTE9TVU05MCc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLkJMT1NVTTkwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUEFNMzAnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5QQU0zMDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05CTE87XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1BBTTcwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuUEFNNzA7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQQU0yNTAnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5QQU0yNTA7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdOVUNMRU9USURFUyc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLk5VQ0xFT1RJREVTO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTk5VQ0w7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1RSQU5TJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuVFJBTlM7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OTlVDTDtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnU0NITkVJREVSJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuU0NITkVJREVSO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTlNDSE47XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGxTY29yZXMoKTtcbiAgICB9XG4gICAgY29uc3RydWN0UmVzdWx0KGksIGopIHtcbiAgICAgICAgbGV0IHJlczEgPSBcIlwiLCByZXMyID0gXCJcIiwgZ2FwUyA9IFwiXCI7XG4gICAgICAgIGxldCB0b3RhbCA9IHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3RlcDsgaSsrKSB7XG4gICAgICAgICAgICBnYXBTICs9ICd8JztcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaSA+IDAgfHwgaiA+IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJID09IGkpIHtcbiAgICAgICAgICAgICAgICByZXMxID0gZ2FwUyArIHJlczE7XG4gICAgICAgICAgICAgICAgcmVzMiA9IHRoaXMuc2VxMi5zdWJzdHIoKGogLSAxKSAqIHRoaXMuc3RlcCwgdGhpcy5zdGVwKSArIHJlczI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRKID09IGopIHtcbiAgICAgICAgICAgICAgICByZXMyID0gZ2FwUyArIHJlczI7XG4gICAgICAgICAgICAgICAgcmVzMSA9IHRoaXMuc2VxMS5zdWJzdHIoKGkgLSAxKSAqIHRoaXMuc3RlcCwgdGhpcy5zdGVwKSArIHJlczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaSAtIDEgPj0gMClcbiAgICAgICAgICAgICAgICAgICAgcmVzMSA9IHRoaXMuc2VxMS5zdWJzdHIoKGkgLSAxKSAqIHRoaXMuc3RlcCwgdGhpcy5zdGVwKSArIHJlczE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXMxID0gZ2FwUyArIHJlczE7XG4gICAgICAgICAgICAgICAgaWYgKGogLSAxID49IDApXG4gICAgICAgICAgICAgICAgICAgIHJlczIgPSB0aGlzLnNlcTIuc3Vic3RyKChqIC0gMSkgKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCkgKyByZXMyO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzMiA9IGdhcFMgKyByZXMyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHRlbXBJID0gaTtcbiAgICAgICAgICAgIGkgPSB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJO1xuICAgICAgICAgICAgaiA9IHRoaXMuZHBHcmlkW3RlbXBJXVtqXS5wYXJlbnRKO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQWxpZ25lZChyZXMxLCByZXMyLCB0b3RhbCk7XG4gICAgfVxuICAgIGZpbGxTY29yZXMoKSB7XG4gICAgICAgIHRoaXMuc2NvcmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW4xOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuc2NvcmVzLnB1c2goW10pO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxlbjI7IGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NvcmVzW2ldLnB1c2godGhpcy5hbGlnbkdyaWRbdGhpcy5jb25uZWN0aW9uc1t0aGlzLnNlcTEuc3Vic3RyKGkgKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCldXVt0aGlzLmNvbm5lY3Rpb25zW3RoaXMuc2VxMi5zdWJzdHIoaiAqIHRoaXMuc3RlcCwgdGhpcy5zdGVwKV1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0eXBlUmVjKCkge1xuICAgICAgICBpZiAoL1tBVEdDXSovLnRlc3QodGhpcy5zZXExKSAmJiAvW0FUR0NdKi8udGVzdCh0aGlzLnNlcTIpKVxuICAgICAgICAgICAgcmV0dXJuIFwiTlVDTEVPVElERVNcIjtcbiAgICAgICAgaWYgKC9bQVJORENRRUdISUxLTUZQU1RXWVZCWlgqXSovLnRlc3QodGhpcy5zZXExKSAmJiAvW0FSTkRDUUVHSElMS01GUFNUV1lWQlpYKl0qLy50ZXN0KHRoaXMuc2VxMikpXG4gICAgICAgICAgICByZXR1cm4gXCJCTE9TVU02MlwiO1xuICAgICAgICB0aHJvdyBFcnJvcihcIkNhbid0IHJlY29nbml6ZSBzZXF1ZW5jZSB0eXBlXCIpO1xuICAgIH1cbiAgICBuZWVkbGVtYW5XdW5jaCgpIHtcbiAgICAgICAgdGhpcy5kcEdyaWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbjEgKyAxOyBpKyspIHtcbiAgICAgICAgICAgIGxldCByb3cgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5sZW4yICsgMTsgaisrKVxuICAgICAgICAgICAgICAgIHJvdy5wdXNoKG5ldyBDZWxsKCkpO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWQucHVzaChyb3cpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsbE5lZWRsZW1hbigpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLmxlbjE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gdGhpcy5sZW4yOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGxPbmUoaSwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0UmVzdWx0KHRoaXMubGVuMSwgdGhpcy5sZW4yKTtcbiAgICB9XG4gICAgc21pdGhXYXRlcm1hbigpIHtcbiAgICAgICAgdGhpcy5kcEdyaWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbjEgKyAxOyBpKyspIHtcbiAgICAgICAgICAgIGxldCByb3cgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5sZW4yICsgMTsgaisrKVxuICAgICAgICAgICAgICAgIHJvdy5wdXNoKG5ldyBDZWxsKCkpO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWQucHVzaChyb3cpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBiZXN0VmFsID0gMDtcbiAgICAgICAgbGV0IGJlc3RJID0gMCwgYmVzdEogPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLmxlbjE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gdGhpcy5sZW4yOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGxPbmUoaSwgaik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0udmFsdWUgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SiA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZHBHcmlkW3RoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEldW3RoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEpdLnZhbHVlID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEogPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcEdyaWRbaV1bal0udmFsdWUgPiBiZXN0VmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RWYWwgPSB0aGlzLmRwR3JpZFtpXVtqXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdEkgPSBpO1xuICAgICAgICAgICAgICAgICAgICBiZXN0SiA9IGo7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFJlc3VsdChiZXN0SSwgYmVzdEopO1xuICAgIH1cbiAgICBzZXRTZXF1ZW5jZXMoc2VxMV8sIHNlcTJfKSB7XG4gICAgICAgIHRoaXMuc2VxMSA9IHNlcTFfO1xuICAgICAgICB0aGlzLnNlcTIgPSBzZXEyXztcbiAgICAgICAgdGhpcy5sZW4xID0gdGhpcy5zZXExLmxlbmd0aCAvIHRoaXMuc3RlcDtcbiAgICAgICAgdGhpcy5sZW4yID0gdGhpcy5zZXEyLmxlbmd0aCAvIHRoaXMuc3RlcDtcbiAgICAgICAgdGhpcy5maWxsU2NvcmVzKCk7XG4gICAgfVxuICAgIHNldEdhcChnYXBfKSB7XG4gICAgICAgIHRoaXMuZ2FwID0gZ2FwXztcbiAgICB9XG4gICAgc2V0TWV0aG9kKGFsaWduR3JpZF8gPSBcIlwiKSB7XG4gICAgICAgIGlmIChhbGlnbkdyaWRfID09IFwiQVVUT1wiKSB7XG4gICAgICAgICAgICBhbGlnbkdyaWRfID0gdGhpcy50eXBlUmVjKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkRnJvbU5hbWUoYWxpZ25HcmlkXyk7XG4gICAgfVxufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFZkUmVnaW9uVHlwZSB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy92ZC1yZWdpb25zJztcbmNvbnN0IHZydCA9IFZkUmVnaW9uVHlwZTtcbi8vIFBvc2l0aW9ucyBvZiByZWdpb25zIGZvciBudW1iZXJpbmcgc2NoZW1lc1xuLy8gaHR0cDovL3d3dy5iaW9pbmYub3JnLnVrL2Ficy9pbmZvLmh0bWxcbi8vIGNvbnN0IGltZ3RSZWdpb25zOiBWZFJlZ2lvbltdID0gW1xuLy8gICBuZXcgVmRSZWdpb24odnJ0LkZSLCAnRlIxJywgJ0xpZ2h0JywgMSwgJzEnLCAnMjYnKSxcbi8vICAgbmV3IFZkUmVnaW9uKHZydC5GUiwgJ0ZSMScsICdIZWF2eScsIDEsICcxJywgJzI2JyksXG4vL1xuLy8gICBuZXcgVmRSZWdpb24odnJ0LkNEUiwgJ0NEUjEnLCAnTGlnaHQnLCAyLCAnMjcnLCAnMzgnKSwgLy8gMjctMzJcbi8vICAgbmV3IFZkUmVnaW9uKHZydC5DRFIsICdDRFIxJywgJ0hlYXZ5JywgMiwgJzI3JywgJzM4JyksIC8vIDI3LTMyXG4vL1xuLy8gICBuZXcgVmRSZWdpb24odnJ0LkZSLCAnRlIyJywgJ0xpZ2h0JywgMywgJzM5JywgJzU1JyksXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuRlIsICdGUjInLCAnSGVhdnknLCAzLCAnMzknLCAnNTUnKSxcbi8vXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuQ0RSLCAnQ0RSMicsICdMaWdodCcsIDQsICc1NicsICc2NScpLFxuLy8gICBuZXcgVmRSZWdpb24odnJ0LkNEUiwgJ0NEUjInLCAnSGVhdnknLCA0LCAnNTYnLCAnNjUnKSxcbi8vXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuRlIsICdGUjMnLCAnTGlnaHQnLCA1LCAnNjYnLCAnMTA0JyksXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuRlIsICdGUjMnLCAnSGVhdnknLCA1LCAnNjYnLCAnMTA0JyksXG4vL1xuLy8gICBuZXcgVmRSZWdpb24odnJ0LkNEUiwgJ0NEUjMnLCAnTGlnaHQnLCA2LCAnMTA1JywgJzExNycpLFxuLy8gICBuZXcgVmRSZWdpb24odnJ0LkNEUiwgJ0NEUjMnLCAnSGVhdnknLCA2LCAnMTA1JywgJzExNycpLFxuLy9cbi8vICAgbmV3IFZkUmVnaW9uKHZydC5GUiwgJ0ZSNCcsICdMaWdodCcsIDcsICcxMTgnLCBudWxsLyoxMjcqLyksXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuRlIsICdGUjQnLCAnSGVhdnknLCA3LCAnMTE4JywgbnVsbC8qMTI4Ki8pLFxuLy8gXTtcbi8qKiBWaWV3ZXIgd2l0aCB0YWJzIGJhc2VkIG9uIGRlc2NyaXB0aW9uIG9mIGNoYWluIHJlZ2lvbnMuXG4gKiAgVXNlZCB0byBkZWZpbmUgcmVnaW9ucyBvZiBhbiBpbW11bm9nbG9idWxpbiBMQy5cbiAqL1xuZXhwb3J0IGNsYXNzIFZkUmVnaW9uc1ZpZXdlciBleHRlbmRzIERHLkpzVmlld2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy8gcHJpdmF0ZSByZWdpb25zRGY6IERHLkRhdGFGcmFtZTtcbiAgICAgICAgdGhpcy5yZWdpb25zRmcgPSBudWxsO1xuICAgICAgICAvLyBwcml2YXRlIHJlZ2lvbnNUVjogREcuVGFibGVWaWV3O1xuICAgICAgICB0aGlzLnJlZ2lvbnNSb290ID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhbmVsTm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMucmVnaW9ucyA9IFtdO1xuICAgICAgICAvLyAjcmVnaW9uIC0tIEhhbmRsZSBjb250cm9scycgZXZlbnRzIC0tXG4gICAgICAgIHRoaXMucmVzaXppbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gI2VuZHJlZ2lvblxuICAgICAgICAvLyNyZWdpb24gLS0gVmlldyAtLVxuICAgICAgICB0aGlzLmhvc3QgPSBudWxsO1xuICAgICAgICB0aGlzLm1haW5MYXlvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLmxvZ29zID0gW107XG4gICAgICAgIC8vIFRvIHByZXZlbnQgYW1iaWd1b3VzIG51bWJlcmluZyBzY2hlbWUgaW4gTUxCXG4gICAgICAgIHRoaXMucmVnaW9uVHlwZXMgPSB0aGlzLnN0cmluZ0xpc3QoJ3JlZ2lvblR5cGVzJywgW3ZydC5DRFJdLCB7IGNob2ljZXM6IE9iamVjdC52YWx1ZXModnJ0KS5maWx0ZXIoKHQpID0+IHQgIT0gdnJ0LlVua25vd24pIH0pO1xuICAgICAgICB0aGlzLmNoYWlucyA9IHRoaXMuc3RyaW5nTGlzdCgnY2hhaW5zJywgWydIZWF2eScsICdMaWdodCddLCB7IGNob2ljZXM6IFsnSGVhdnknLCAnTGlnaHQnXSB9KTtcbiAgICAgICAgdGhpcy5zZXF1ZW5jZUNvbHVtbk5hbWVQb3N0Zml4ID0gdGhpcy5zdHJpbmcoJ3NlcXVlbmNlQ29sdW1uTmFtZVBvc3RmaXgnLCAnY2hhaW4gc2VxdWVuY2UnKTtcbiAgICB9XG4gICAgZ2V0IGRmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhRnJhbWU7XG4gICAgfVxuICAgIC8vIFRPRE86IC5vblRhYmxlQXR0YWNoZWQgaXMgbm90IGNhbGxpbmcgb24gZGF0YUZyYW1lIHNldCwgb25Qcm9wZXJ0eUNoYW5nZWQgIGFsc28gbm90IGNhbGxpbmdcbiAgICBzZXREZih2YWx1ZSwgcmVnaW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnVmRSZWdpb25zVmlld2VyLnNldERmKCknKTtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuZGVzdHJveVZpZXcoKTtcbiAgICAgICAgICAgIHRoaXMucmVnaW9ucyA9IHJlZ2lvbnM7XG4gICAgICAgICAgICB0aGlzLmRhdGFGcmFtZSA9IHZhbHVlO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5idWlsZFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAvLyNyZWdpb24gcmVnaW9uc0RGIHdpdGggZmlsdGVyXG4gICAgICAgICAgICAvLyB0aGlzLnJlZ2lvbnNEZiA9IERHLkRhdGFGcmFtZS5mcm9tT2JqZWN0cyh0aGlzLnJlZ2lvbnMpO1xuICAgICAgICAgICAgLy8gdGhpcy5yZWdpb25zRGYucm93cy5maWx0ZXIoKHJvdykgPT4gcm93Lm5hbWUgPT0gJ0NEUjEnKTtcbiAgICAgICAgICAgIC8vIC8vIFRvIGF2YWlsYWJsZSBvcHRpb25zIC9cbiAgICAgICAgICAgIC8vIHRoaXMucmVnaW9uc0ZnID0gKGF3YWl0IHRoaXMucmVnaW9uc0RmLnBsb3QuZnJvbVR5cGUoREcuVklFV0VSLkZJTFRFUlMsIHtcbiAgICAgICAgICAgIC8vICAgLy8gY29sdW1uTmFtZXM6IFsnbmFtZScsXSxcbiAgICAgICAgICAgIC8vICAgc2hvd0ZpbHRlckNvdW50c0luZGljYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgLy8gICBzaG93SGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgc2hvd1NlYXJjaEJveDogZmFsc2UsXG4gICAgICAgICAgICAvLyAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgIC8vICAgICB7dHlwZTogREcuRklMVEVSX1RZUEUuQ0FURUdPUklDQUwsIGNvbHVtbjogJ3R5cGUnLCBsYWJlbDogJ1JlZ2lvbiBuYW1lJywgc2hvd0hpc3RvZ3JhbTogZmFsc2V9LFxuICAgICAgICAgICAgLy8gICAgIHt0eXBlOiBERy5GSUxURVJfVFlQRS5DQVRFR09SSUNBTCwgY29sdW1uOiAnbmFtZScsIGxhYmVsOiAnUmVnaW9uIHR5cGUnLCBzaG93SGlzdG9ncmFtOiBmYWxzZX0sXG4gICAgICAgICAgICAvLyAgIF0sXG4gICAgICAgICAgICAvLyAgIHRpdGxlOiAnUmVnaW9ucyBmaWx0ZXInLFxuICAgICAgICAgICAgLy8gICBzaG93VGl0bGU6IHRydWUsXG4gICAgICAgICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGZvciByZWdpb25zIG9mIG11bHRpcGxlIGFsaWdubWVudCBieSBJTUdUIG5vbWVuY2xhdHVyZScsXG4gICAgICAgICAgICAvLyAgIHNvbWVQcm9wZXJ0eTogJ0hlbGxvJyxcbiAgICAgICAgICAgIC8vIH0pKSBhcyBERy5GaWx0ZXJHcm91cDtcbiAgICAgICAgICAgIC8vI2VuZHJlZ2lvbiByZWdpb25zREYgd2l0aCBmaWx0ZXJcbiAgICAgICAgICAgIC8vIHRoaXMubWxiVmlldy5kb2NrTWFuYWdlci5kb2NrKHRoaXMucmVnaW9uc0ZnLnJvb3QsIERHLkRPQ0tfVFlQRS5MRUZULCByb290Tm9kZSwgJ0ZpbHRlciByZWdpb25zJywgMC4yKTtcbiAgICAgICAgICAgIHRoaXMuc3Vicy5wdXNoKHVpLm9uU2l6ZUNoYW5nZWQodGhpcy5yb290KS5zdWJzY3JpYmUodGhpcy5yb290T25TaXplQ2hhbmdlZC5iaW5kKHRoaXMpKSk7XG4gICAgICAgICAgICAvLyByeGpzLmZyb21FdmVudCh0aGlzLnJvb3QsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUodGhpcy5vbk1vdXNlTW92ZVJvb3QuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLnJvb3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZVJvb3QuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmJ1aWxkVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25UYWJsZUF0dGFjaGVkKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgeWllbGQgdGhpcy5pbml0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvblByb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eSkge1xuICAgICAgICBjb25zdCBfc3VwZXIgPSBPYmplY3QuY3JlYXRlKG51bGwsIHtcbiAgICAgICAgICAgIG9uUHJvcGVydHlDaGFuZ2VkOiB7IGdldDogKCkgPT4gc3VwZXIub25Qcm9wZXJ0eUNoYW5nZWQgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIF9zdXBlci5vblByb3BlcnR5Q2hhbmdlZC5jYWxsKHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHkubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWdpb25UeXBlcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2hhaW5zJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzZXF1ZW5jZUNvbHVtbk5hbWVQb3N0Zml4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3BlbihtbGJWaWV3KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsTm9kZSA9IG1sYlZpZXcuZG9ja01hbmFnZXIuZG9jayh0aGlzLnJvb3QsIERHLkRPQ0tfVFlQRS5UT1AsIG51bGwsICdSZWdpb25zJywgMC4yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNob3cobWxiVmlldykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcm9vdE9uU2l6ZUNoYW5nZWQoYXJncykge1xuICAgICAgICB0aGlzLmNhbGNTaXplKCk7XG4gICAgfVxuICAgIGRlc3Ryb3lWaWV3KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgLy8gVE9ETzogVW5zdWJzY3JpYmUgZnJvbSBhbmQgcmVtb3ZlIGFsbCB2aWV3IGVsZW1lbnRzXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBWZFJlZ2lvbnNWaWV3ZXIuZGVzdHJveVZpZXcoIG1haW5MYXlvdXQgPSAkeyF0aGlzLm1haW5MYXlvdXQgPyAnbm9uZScgOiAndmFsdWUnfSApYCk7XG4gICAgICAgICAgICBpZiAodGhpcy5tYWluTGF5b3V0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnJvb3QucmVtb3ZlQ2hpbGQodGhpcy5ob3N0KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1haW5MYXlvdXQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWluTGF5b3V0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGJ1aWxkVmlldygpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1ZkUmVnaW9uc1ZpZXdlci5idWlsZFZpZXcoKSBzdGFydCcpO1xuICAgICAgICAgICAgY29uc3QgY29sTmFtZXMgPSBPYmplY3QuYXNzaWduKHt9LCAuLi50aGlzLmNoYWlucy5tYXAoKGNoYWluKSA9PiAoeyBbY2hhaW5dOiBgJHtjaGFpbn0gJHt0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZVBvc3RmaXh9YCB9KSkpO1xuICAgICAgICAgICAgY29uc3QgcmVnaW9uc0ZpbHRlcmVkID0gdGhpcy5yZWdpb25zLmZpbHRlcigocikgPT4gdGhpcy5yZWdpb25UeXBlcy5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgICAgICAgICAgIGNvbnN0IG9yZGVyTGlzdCA9IEFycmF5LmZyb20obmV3IFNldChyZWdpb25zRmlsdGVyZWQubWFwKChyKSA9PiByLm9yZGVyKSkpLnNvcnQoKTtcbiAgICAgICAgICAgIHRoaXMubG9nb3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IG9yZGVySSA9IDA7IG9yZGVySSA8IG9yZGVyTGlzdC5sZW5ndGg7IG9yZGVySSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnaW9uQ2hhaW5zID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGFpbiBvZiB0aGlzLmNoYWlucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdpb24gPSByZWdpb25zRmlsdGVyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKChyKSA9PiByLm9yZGVyID09IG9yZGVyTGlzdFtvcmRlckldICYmIHIuY2hhaW4gPT0gY2hhaW4pO1xuICAgICAgICAgICAgICAgICAgICByZWdpb25DaGFpbnNbY2hhaW5dID0gKHlpZWxkIHRoaXMuZGF0YUZyYW1lLnBsb3QuZnJvbVR5cGUoJ1dlYkxvZ28nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZUNvbHVtbk5hbWU6IGNvbE5hbWVzW2NoYWluXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25OYW1lOiByZWdpb24ucG9zaXRpb25TdGFydE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbk5hbWU6IHJlZ2lvbi5wb3NpdGlvbkVuZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXhXaWR0aDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBXZWJMb2dvIGNyZWF0aW9uIGZpcmVzIG9uUm9vdFNpemVDaGFuZ2VkIGV2ZW50IGV2ZW4gYmVmb3JlIGNvbnRyb2wgYmVpbmcgYWRkZWQgdG8gdGhpcy5sb2dvc1xuICAgICAgICAgICAgICAgIHRoaXMubG9nb3Nbb3JkZXJJXSA9IHJlZ2lvbkNoYWlucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHVpLnRhYmxlRnJvbU1hcCgpXG4gICAgICAgICAgICAvLyBERy5IdG1sVGFibGUuY3JlYXRlKClcbiAgICAgICAgICAgIHRoaXMubWFpbkxheW91dCA9IHVpLnRhYmxlKHRoaXMuY2hhaW5zLCAoY2hhaW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjaGFpbiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAuLi4ob3JkZXJMaXN0Lmxlbmd0aCA+IDAgPyBbdWkuZGl2KGNoYWluLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlKC05MGRlZyknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnMTJweCBSb2JvdG8sIFJvYm90byBMb2NhbCwgc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV0gOiBbXSksXG4gICAgICAgICAgICAgICAgICAgIC8vIExpc3Qgd2l0aCBjb250cm9scyBmb3IgcmVnaW9uc1xuICAgICAgICAgICAgICAgICAgICAuLi5bLi4uQXJyYXkob3JkZXJMaXN0Lmxlbmd0aCkua2V5cygpXS5tYXAoKG9yZGVySSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2wgPSB0aGlzLmxvZ29zW29yZGVySV1bY2hhaW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2wucm9vdC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNEaXYgPSB1aS5kaXYoW3dsLnJvb3RdIC8qYCR7Y2hhaW59ICR7cmVnaW9uc0ZpbHRlcmVkW3JJXX1gKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNEaXY7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgICAgICAgICB9LCBbJycsIC4uLlsuLi5BcnJheShvcmRlckxpc3QubGVuZ3RoKS5rZXlzKCldLm1hcCgob3JkZXJJKSA9PiByZWdpb25zRmlsdGVyZWQuZmluZCgocikgPT4gci5vcmRlciA9PSBvcmRlckxpc3Rbb3JkZXJJXSAmJiByLmNoYWluID09IHRoaXMuY2hhaW5zWzBdKS5uYW1lIHx8ICdOYW1lJyldKTtcbiAgICAgICAgICAgIHRoaXMubWFpbkxheW91dC5jbGFzc05hbWUgPSAnbWxiLXZkLXJlZ2lvbnMtdmlld2VyLXRhYmxlMic7XG4gICAgICAgICAgICAvLyB0aGlzLm1haW5MYXlvdXQuc3R5bGUuYmFja2dyb3VuZCA9ICcjRUVFRUZGJztcbiAgICAgICAgICAgIC8vIHRoaXMubWFpbkxheW91dC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICAvLyB0aGlzLm1haW5MYXlvdXQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IGAjZmZiYiR7TWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAyNTUpLnRvU3RyaW5nKDE2KX1gO1xuICAgICAgICAgICAgdGhpcy5ob3N0ID0gdWkuYm94KHRoaXMubWFpbkxheW91dCwgeyAvKnN0eWxlOiB7YmFja2dyb3VuZENvbG9yOiBjb2xvcn0qL30pO1xuICAgICAgICAgICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuaG9zdCk7XG4gICAgICAgICAgICB0aGlzLnJvb3Quc3R5bGUub3ZlcmZsb3dYID0gJ2F1dG8nO1xuICAgICAgICAgICAgdGhpcy5jYWxjU2l6ZSgpO1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnVmRSZWdpb25zVmlld2VyLmJ1aWxkVmlldygpIGVuZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2FsY1NpemUoKSB7XG4gICAgICAgIGNvbnN0IGxvZ29IZWlnaHQgPSAodGhpcy5yb290LmNsaWVudEhlaWdodCAtIDU0KSAvIHRoaXMuY2hhaW5zLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5taW4obG9nb0hlaWdodCwgTWF0aC5tYXgoLi4udGhpcy5sb2dvcy5tYXAoKHdsRGljdCkgPT4gTWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyh3bERpY3QpLm1hcCgod2wpID0+IHdsLm1heEhlaWdodCkpKSkpO1xuICAgICAgICBmb3IgKGxldCBvcmRlckkgPSAwOyBvcmRlckkgPCB0aGlzLmxvZ29zLmxlbmd0aDsgb3JkZXJJKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNoYWluSSA9IDA7IGNoYWluSSA8IHRoaXMuY2hhaW5zLmxlbmd0aDsgY2hhaW5JKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpbiA9IHRoaXMuY2hhaW5zW2NoYWluSV07XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dvc1tvcmRlckldW2NoYWluXS5yb290LnN0eWxlLmhlaWdodCA9IGAke21heEhlaWdodH1weGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uIC0tIFZpZXcgLS1cbiAgICBvbk1vdXNlTW92ZVJvb3QoZSkge1xuICAgICAgICAvLyB1aS50b29sdGlwLnNob3coJ3RleHQnLCBlLnggKyA4LCBlLnkgKyA4LCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBvbk1vdXNlTW92ZVJvb3QuKCB4OiAke2UueH0sIHk6ICR7ZS55fSApYCk7XG4gICAgfVxufVxuIiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wid3VcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wid3VcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF90b0NvbnN1bWFibGVBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oMSlbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfc2xpY2VkVG9BcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oMzkpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX1N5bWJvbCRpdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX2dldEl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MClbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfcmVnZW5lcmF0b3JSdW50aW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NClbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfT2JqZWN0JGtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwKVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9TZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9Qcm9taXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NSlbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciB3dSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd3UoaXRlcmFibGUpIHtcblx0ICBpZiAoIWlzSXRlcmFibGUoaXRlcmFibGUpKSB7XG5cdCAgICB0aHJvdyBuZXcgRXJyb3IoXCJ3dTogYFwiICsgaXRlcmFibGUgKyBcImAgaXMgbm90IGl0ZXJhYmxlIVwiKTtcblx0ICB9XG5cdCAgcmV0dXJuIG5ldyBXdShpdGVyYWJsZSk7XG5cdH07XG5cblx0ZnVuY3Rpb24gV3UoaXRlcmFibGUpIHtcblx0ICB2YXIgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSk7XG5cdCAgdGhpcy5uZXh0ID0gaXRlcmF0b3IubmV4dC5iaW5kKGl0ZXJhdG9yKTtcblx0fVxuXHR3dS5wcm90b3R5cGUgPSBXdS5wcm90b3R5cGU7XG5cblx0d3UucHJvdG90eXBlW19TeW1ib2wkaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuXHQgIHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qXG5cdCAqIEludGVybmFsIHV0aWxpdGllc1xuXHQgKi9cblxuXHQvLyBBbiBpbnRlcm5hbCBwbGFjZWhvbGRlciB2YWx1ZS5cblx0dmFyIE1JU1NJTkcgPSB7fTtcblxuXHQvLyBSZXR1cm4gd2hldGhlciBhIHRoaW5nIGlzIGl0ZXJhYmxlLlxuXHR2YXIgaXNJdGVyYWJsZSA9IGZ1bmN0aW9uIGlzSXRlcmFibGUodGhpbmcpIHtcblx0ICByZXR1cm4gdGhpbmcgJiYgdHlwZW9mIHRoaW5nW19TeW1ib2wkaXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG5cdH07XG5cblx0Ly8gR2V0IHRoZSBpdGVyYXRvciBmb3IgdGhlIHRoaW5nIG9yIHRocm93IGFuIGVycm9yLlxuXHR2YXIgZ2V0SXRlcmF0b3IgPSBmdW5jdGlvbiBnZXRJdGVyYXRvcih0aGluZykge1xuXHQgIGlmIChpc0l0ZXJhYmxlKHRoaW5nKSkge1xuXHQgICAgcmV0dXJuIF9nZXRJdGVyYXRvcih0aGluZyk7XG5cdCAgfVxuXHQgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgaXRlcmFibGU6IFwiICsgdGhpbmcpO1xuXHR9O1xuXG5cdC8vIERlZmluZSBhIHN0YXRpYyBtZXRob2Qgb24gYHd1YCBhbmQgc2V0IGl0cyBwcm90b3R5cGUgdG8gdGhlIHNoYXJlZFxuXHQvLyBgV3UucHJvdG90eXBlYC5cblx0dmFyIHN0YXRpY01ldGhvZCA9IGZ1bmN0aW9uIHN0YXRpY01ldGhvZChuYW1lLCBmbikge1xuXHQgIGZuLnByb3RvdHlwZSA9IFd1LnByb3RvdHlwZTtcblx0ICB3dVtuYW1lXSA9IGZuO1xuXHR9O1xuXG5cdC8vIERlZmluZSBhIGZ1bmN0aW9uIHRoYXQgaXMgYXR0YWNoZWQgYXMgYm90aCBhIGBXdS5wcm90b3R5cGVgIG1ldGhvZCBhbmQgYVxuXHQvLyBjdXJyeWFibGUgc3RhdGljIG1ldGhvZCBvbiBgd3VgIGRpcmVjdGx5IHRoYXQgdGFrZXMgYW4gaXRlcmFibGUgYXMgaXRzIGxhc3Rcblx0Ly8gcGFyYW1ldGVyLlxuXHR2YXIgcHJvdG90eXBlQW5kU3RhdGljID0gZnVuY3Rpb24gcHJvdG90eXBlQW5kU3RhdGljKG5hbWUsIGZuKSB7XG5cdCAgdmFyIGV4cGVjdGVkQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5lZCA/IGZuLmxlbmd0aCA6IGFyZ3VtZW50c1syXTtcblx0ICByZXR1cm4gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZuLnByb3RvdHlwZSA9IFd1LnByb3RvdHlwZTtcblx0ICAgIFd1LnByb3RvdHlwZVtuYW1lXSA9IGZuO1xuXG5cdCAgICAvLyArMSBmb3IgdGhlIGl0ZXJhYmxlLCB3aGljaCBpcyB0aGUgYHRoaXNgIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBzbyBpdFxuXHQgICAgLy8gaXNuJ3QgcmVmbGVjdGVkIGJ5IHRoZSBsZW5ndGggcHJvcGVydHkuXG5cdCAgICBleHBlY3RlZEFyZ3MgKz0gMTtcblxuXHQgICAgd3VbbmFtZV0gPSB3dS5jdXJyeWFibGUoZnVuY3Rpb24gKCkge1xuXHQgICAgICB2YXIgX3d1O1xuXG5cdCAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG5cdCAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHZhciBpdGVyYWJsZSA9IGFyZ3MucG9wKCk7XG5cdCAgICAgIHJldHVybiAoX3d1ID0gd3UoaXRlcmFibGUpKVtuYW1lXS5hcHBseShfd3UsIGFyZ3MpO1xuXHQgICAgfSwgZXhwZWN0ZWRBcmdzKTtcblx0ICB9KSgpO1xuXHR9O1xuXG5cdC8vIEEgZGVjb3JhdG9yIGZvciByZXdyYXBwaW5nIGEgbWV0aG9kJ3MgcmV0dXJuZWQgaXRlcmFibGUgaW4gd3UgdG8gbWFpbnRhaW5cblx0Ly8gY2hhaW5hYmlsaXR5LlxuXHR2YXIgcmV3cmFwID0gZnVuY3Rpb24gcmV3cmFwKGZuKSB7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0ICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG5cdCAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHd1KGZuLmNhbGwuYXBwbHkoZm4sIFt0aGlzXS5jb25jYXQoYXJncykpKTtcblx0ICB9O1xuXHR9O1xuXG5cdHZhciByZXdyYXBTdGF0aWNNZXRob2QgPSBmdW5jdGlvbiByZXdyYXBTdGF0aWNNZXRob2QobmFtZSwgZm4pIHtcblx0ICByZXR1cm4gc3RhdGljTWV0aG9kKG5hbWUsIHJld3JhcChmbikpO1xuXHR9O1xuXHR2YXIgcmV3cmFwUHJvdG90eXBlQW5kU3RhdGljID0gZnVuY3Rpb24gcmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKG5hbWUsIGZuLCBleHBlY3RlZEFyZ3MpIHtcblx0ICByZXR1cm4gcHJvdG90eXBlQW5kU3RhdGljKG5hbWUsIHJld3JhcChmbiksIGV4cGVjdGVkQXJncyk7XG5cdH07XG5cblx0Ly8gUmV0dXJuIGEgd3JhcHBlZCB2ZXJzaW9uIG9mIGBmbmAgYm91bmQgd2l0aCB0aGUgaW5pdGlhbCBhcmd1bWVudHNcblx0Ly8gYC4uLmFyZ3NgLlxuXHRmdW5jdGlvbiBjdXJyeShmbiwgYXJncykge1xuXHQgIHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdCAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIG1vcmVBcmdzID0gQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcblx0ICAgICAgbW9yZUFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIGZuLmNhbGwuYXBwbHkoZm4sIFt0aGlzXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFyZ3MpLCBtb3JlQXJncykpO1xuXHQgIH07XG5cdH1cblxuXHQvKlxuXHQgKiBQdWJsaWMgdXRpbGl0aWVzXG5cdCAqL1xuXG5cdHN0YXRpY01ldGhvZChcImN1cnJ5YWJsZVwiLCBmdW5jdGlvbiAoZm4pIHtcblx0ICB2YXIgZXhwZWN0ZWQgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyBmbi5sZW5ndGggOiBhcmd1bWVudHNbMV07XG5cdCAgcmV0dXJuIChmdW5jdGlvbiAoKSB7XG5cdCAgICByZXR1cm4gZnVuY3Rpb24gZigpIHtcblx0ICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcblx0ICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG5cdCAgICAgIH1cblxuXHQgICAgICByZXR1cm4gYXJncy5sZW5ndGggPj0gZXhwZWN0ZWQgPyBmbi5hcHBseSh0aGlzLCBhcmdzKSA6IGN1cnJ5KGYsIGFyZ3MpO1xuXHQgICAgfTtcblx0ICB9KSgpO1xuXHR9KTtcblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJlbnRyaWVzXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKG9iaikge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uLCBfZGlkSXRlcmF0b3JFcnJvciwgX2l0ZXJhdG9yRXJyb3IsIF9pdGVyYXRvciwgX3N0ZXAsIGs7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvciA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IgPSBfZ2V0SXRlcmF0b3IoX09iamVjdCRrZXlzKG9iaikpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGsgPSBfc3RlcC52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICByZXR1cm4gW2ssIG9ialtrXV07XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE4O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE0O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvciA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3JbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOCk7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwia2V5c1wiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChvYmopIHtcblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoX09iamVjdCRrZXlzKG9iaiksIFwidDBcIiwgMSk7XG5cblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcInZhbHVlc1wiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChvYmopIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIsIF9kaWRJdGVyYXRvckVycm9yMiwgX2l0ZXJhdG9yRXJyb3IyLCBfaXRlcmF0b3IyLCBfc3RlcDIsIGs7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMiA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IyID0gX2dldEl0ZXJhdG9yKF9PYmplY3Qka2V5cyhvYmopKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gKF9zdGVwMiA9IF9pdGVyYXRvcjIubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBrID0gX3N0ZXAyLnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA5O1xuXHQgICAgICAgIHJldHVybiBvYmpba107XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yICYmIF9pdGVyYXRvcjJbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjJbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMikge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyO1xuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMSk7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE4KTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE0LCAxOCwgMjZdLCBbMTksLCAyMSwgMjVdXSk7XG5cdH0pKTtcblxuXHQvKlxuXHQgKiBJbmZpbml0ZSBpdGVyYXRvcnNcblx0ICovXG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiY3ljbGVcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIHNhdmVkLCBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMywgX2RpZEl0ZXJhdG9yRXJyb3IzLCBfaXRlcmF0b3JFcnJvcjMsIF9pdGVyYXRvcjMsIF9zdGVwMywgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBzYXZlZCA9IFtdO1xuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjMgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDQ7XG5cdCAgICAgICAgX2l0ZXJhdG9yMyA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gKF9zdGVwMyA9IF9pdGVyYXRvcjMubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAzLnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIHNhdmVkLnB1c2goeCk7XG5cblx0ICAgICAgY2FzZSAxMTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjA7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTY7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDQpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMyA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IzID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyAmJiBfaXRlcmF0b3IzW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IzW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjM6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIzO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjMpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMztcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjMpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMCk7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgICBpZiAoIXNhdmVkKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChzYXZlZCwgXCJ0MVwiLCAzMCk7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAzMjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s0LCAxNiwgMjAsIDI4XSwgWzIxLCwgMjMsIDI3XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwiY291bnRcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIHN0YXJ0ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1swXTtcblx0ICB2YXIgc3RlcCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IDEgOiBhcmd1bWVudHNbMV07XG5cdCAgdmFyIG47XG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIG4gPSBzdGFydDtcblxuXHQgICAgICBjYXNlIDE6XG5cdCAgICAgICAgaWYgKGZhbHNlKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA0O1xuXHQgICAgICAgIHJldHVybiBuO1xuXG5cdCAgICAgIGNhc2UgNDpcblx0ICAgICAgICBuICs9IHN0ZXA7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA3OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcInJlcGVhdFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCh0aGluZykge1xuXHQgIHZhciB0aW1lcyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogYXJndW1lbnRzWzFdO1xuXHQgIHZhciBpO1xuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBpZiAoISh0aW1lcyA9PT0gSW5maW5pdHkpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gODtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDE6XG5cdCAgICAgICAgaWYgKGZhbHNlKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA0O1xuXHQgICAgICAgIHJldHVybiB0aGluZztcblxuXHQgICAgICBjYXNlIDQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDg6XG5cdCAgICAgICAgaSA9IDA7XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIGlmICghKGkgPCB0aW1lcykpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICByZXR1cm4gdGhpbmc7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBpKys7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcyk7XG5cdH0pKTtcblxuXHQvKlxuXHQgKiBJdGVyYXRvcnMgdGhhdCB0ZXJtaW5hdGUgb25jZSB0aGUgaW5wdXQgc2VxdWVuY2UgaGFzIGJlZW4gZXhoYXVzdGVkXG5cdCAqL1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcImNoYWluXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCxcblx0ICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I0LFxuXHQgICAgICBfaXRlcmF0b3JFcnJvcjQsXG5cdCAgICAgIF9sZW41LFxuXHQgICAgICBpdGVyYWJsZXMsXG5cdCAgICAgIF9rZXk1LFxuXHQgICAgICBfaXRlcmF0b3I0LFxuXHQgICAgICBfc3RlcDQsXG5cdCAgICAgIGl0LFxuXHQgICAgICBhcmdzJDEkMCA9IGFyZ3VtZW50cztcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I0ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I0ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXG5cdCAgICAgICAgZm9yIChfbGVuNSA9IGFyZ3MkMSQwLmxlbmd0aCwgaXRlcmFibGVzID0gQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcblx0ICAgICAgICAgIGl0ZXJhYmxlc1tfa2V5NV0gPSBhcmdzJDEkMFtfa2V5NV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgX2l0ZXJhdG9yNCA9IF9nZXRJdGVyYXRvcihpdGVyYWJsZXMpO1xuXG5cdCAgICAgIGNhc2UgNjpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSAoX3N0ZXA0ID0gX2l0ZXJhdG9yNC5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGl0ID0gX3N0ZXA0LnZhbHVlO1xuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKGl0LCBcInQwXCIsIDkpO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDEgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I0ID0gY29udGV4dCQxJDAudDE7XG5cblx0ICAgICAgY2FzZSAxODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTg7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCAmJiBfaXRlcmF0b3I0W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3I0W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjQpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNDtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOCk7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiY2h1bmtcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAyIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIGl0ZW1zLCBpbmRleCwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUsIF9kaWRJdGVyYXRvckVycm9yNSwgX2l0ZXJhdG9yRXJyb3I1LCBfaXRlcmF0b3I1LCBfc3RlcDUsIGl0ZW07XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgaXRlbXMgPSBbXTtcblx0ICAgICAgICBpbmRleCA9IDA7XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNSA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yNSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNTtcblx0ICAgICAgICBfaXRlcmF0b3I1ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNzpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUgPSAoX3N0ZXA1ID0gX2l0ZXJhdG9yNS5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGl0ZW0gPSBfc3RlcDUudmFsdWU7XG5cblx0ICAgICAgICBpdGVtc1tpbmRleCsrXSA9IGl0ZW07XG5cblx0ICAgICAgICBpZiAoIShpbmRleCA9PT0gbikpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICByZXR1cm4gaXRlbXM7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBpdGVtcyA9IFtdO1xuXHQgICAgICAgIGluZGV4ID0gMDtcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNDtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDIwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oNSk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I1ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjUgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjU7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241ICYmIF9pdGVyYXRvcjVbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjVbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjc7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yNSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDMwO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I1O1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyNyk7XG5cblx0ICAgICAgY2FzZSAzMTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI0KTtcblxuXHQgICAgICBjYXNlIDMyOlxuXHQgICAgICAgIGlmICghaW5kZXgpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzNTtcblx0ICAgICAgICByZXR1cm4gaXRlbXM7XG5cblx0ICAgICAgY2FzZSAzNTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s1LCAyMCwgMjQsIDMyXSwgWzI1LCwgMjcsIDMxXV0pO1xuXHR9KSwgMSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiY29uY2F0TWFwXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKGZuKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb242LCBfZGlkSXRlcmF0b3JFcnJvcjYsIF9pdGVyYXRvckVycm9yNiwgX2l0ZXJhdG9yNiwgX3N0ZXA2LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb242ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjYgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yNiA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb242ID0gKF9zdGVwNiA9IF9pdGVyYXRvcjYubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTE7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXA2LnZhbHVlO1xuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKGZuKHgpLCBcInQwXCIsIDgpO1xuXG5cdCAgICAgIGNhc2UgODpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTc7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTM7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDEgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNiA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I2ID0gY29udGV4dCQxJDAudDE7XG5cblx0ICAgICAgY2FzZSAxNzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTc7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiAmJiBfaXRlcmF0b3I2W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3I2W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjA6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjYpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNjtcblxuXHQgICAgICBjYXNlIDIzOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjApO1xuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxNyk7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxMywgMTcsIDI1XSwgWzE4LCwgMjAsIDI0XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiZHJvcFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChuKSB7XG5cdCAgdmFyIGksIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb243LCBfZGlkSXRlcmF0b3JFcnJvcjcsIF9pdGVyYXRvckVycm9yNywgX2l0ZXJhdG9yNywgX3N0ZXA3LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIGkgPSAwO1xuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb243ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjcgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjcgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDQ7XG5cdCAgICAgICAgX2l0ZXJhdG9yNyA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb243ID0gKF9zdGVwNyA9IF9pdGVyYXRvcjcubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTY7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXA3LnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKCEoaSsrIDwgbikpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJjb250aW51ZVwiLCAxMyk7XG5cblx0ICAgICAgY2FzZSAxMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiYnJlYWtcIiwgMTYpO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA2O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTY6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIyO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSg0KTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjcgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yNyA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMztcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcgJiYgX2l0ZXJhdG9yN1tcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yN1tcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3I3KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjg7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjc7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI1KTtcblxuXHQgICAgICBjYXNlIDI5OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjIpO1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQodGhpcywgXCJ0MVwiLCAzMSk7XG5cblx0ICAgICAgY2FzZSAzMTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s0LCAxOCwgMjIsIDMwXSwgWzIzLCwgMjUsIDI5XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiZHJvcFdoaWxlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IEJvb2xlYW4gOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjgsIF9kaWRJdGVyYXRvckVycm9yOCwgX2l0ZXJhdG9yRXJyb3I4LCBfaXRlcmF0b3I4LCBfc3RlcDgsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjggPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yOCA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yOCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3I4ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjggPSAoX3N0ZXA4ID0gX2l0ZXJhdG9yOC5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDgudmFsdWU7XG5cblx0ICAgICAgICBpZiAoIWZuKHgpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJjb250aW51ZVwiLCAxMik7XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMTtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDExOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJicmVha1wiLCAxNSk7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOCA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjE7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTc7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yOCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I4ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOCAmJiBfaXRlcmF0b3I4W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3I4W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI0O1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjgpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yODtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjQpO1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMSk7XG5cblx0ICAgICAgY2FzZSAyOTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZCh0aGlzLCBcInQxXCIsIDMwKTtcblxuXHQgICAgICBjYXNlIDMwOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE3LCAyMSwgMjldLCBbMjIsLCAyNCwgMjhdXSk7XG5cdH0pLCAxKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJlbnVtZXJhdGVcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKF96aXAoW3RoaXMsIHd1LmNvdW50KCldKSwgXCJ0MFwiLCAxKTtcblxuXHQgICAgICBjYXNlIDE6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMpO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiZmlsdGVyXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IEJvb2xlYW4gOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjksIF9kaWRJdGVyYXRvckVycm9yOSwgX2l0ZXJhdG9yRXJyb3I5LCBfaXRlcmF0b3I5LCBfc3RlcDksIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjkgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yOSA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yOSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3I5ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjkgPSAoX3N0ZXA5ID0gX2l0ZXJhdG9yOS5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDkudmFsdWU7XG5cblx0ICAgICAgICBpZiAoIWZuKHgpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOSA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTk7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTU7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yOSA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I5ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOSAmJiBfaXRlcmF0b3I5W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3I5W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yOTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjIpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOSk7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNSwgMTksIDI3XSwgWzIwLCwgMjIsIDI2XV0pO1xuXHR9KSwgMSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiZmxhdHRlblwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgc2hhbGxvdyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMCwgX2RpZEl0ZXJhdG9yRXJyb3IxMCwgX2l0ZXJhdG9yRXJyb3IxMCwgX2l0ZXJhdG9yMTAsIF9zdGVwMTAsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEwID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjEwID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IxMCA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMCA9IChfc3RlcDEwID0gX2l0ZXJhdG9yMTAubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTY7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxMC52YWx1ZTtcblxuXHQgICAgICAgIGlmICghKHR5cGVvZiB4ICE9PSBcInN0cmluZ1wiICYmIGlzSXRlcmFibGUoeCkpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTE7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChzaGFsbG93ID8geCA6IHd1KHgpLmZsYXR0ZW4oKSwgXCJ0MFwiLCA5KTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTE6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEwID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MSA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMCA9IGNvbnRleHQkMSQwLnQxO1xuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMztcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEwICYmIF9pdGVyYXRvcjEwW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxMFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxMCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI4O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxMDtcblxuXHQgICAgICBjYXNlIDI4OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjUpO1xuXG5cdCAgICAgIGNhc2UgMjk6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMik7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxOCwgMjIsIDMwXSwgWzIzLCwgMjUsIDI5XV0pO1xuXHR9KSwgMSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiaW52b2tlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKG5hbWUpIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjExLFxuXHQgICAgICBfZGlkSXRlcmF0b3JFcnJvcjExLFxuXHQgICAgICBfaXRlcmF0b3JFcnJvcjExLFxuXHQgICAgICBfbGVuNixcblx0ICAgICAgYXJncyxcblx0ICAgICAgX2tleTYsXG5cdCAgICAgIF9pdGVyYXRvcjExLFxuXHQgICAgICBfc3RlcDExLFxuXHQgICAgICB4LFxuXHQgICAgICBhcmdzJDEkMCA9IGFyZ3VtZW50cztcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTEgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTEgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjExID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXG5cdCAgICAgICAgZm9yIChfbGVuNiA9IGFyZ3MkMSQwLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW42ID4gMSA/IF9sZW42IC0gMSA6IDApLCBfa2V5NiA9IDE7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHtcblx0ICAgICAgICAgIGFyZ3NbX2tleTYgLSAxXSA9IGFyZ3MkMSQwW19rZXk2XTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBfaXRlcmF0b3IxMSA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMSA9IChfc3RlcDExID0gX2l0ZXJhdG9yMTEubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxMS52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgcmV0dXJuIHhbbmFtZV0uYXBwbHkoeCwgYXJncyk7XG5cblx0ICAgICAgY2FzZSAxMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTEgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA2O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE5O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTU6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE1O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjExID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjExID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTEgJiYgX2l0ZXJhdG9yMTFbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjExW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjExKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjExO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMik7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE5KTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE1LCAxOSwgMjddLCBbMjAsLCAyMiwgMjZdXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJtYXBcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoZm4pIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEyLCBfZGlkSXRlcmF0b3JFcnJvcjEyLCBfaXRlcmF0b3JFcnJvcjEyLCBfaXRlcmF0b3IxMiwgX3N0ZXAxMiwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTIgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTIgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjEyID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjEyID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEyID0gKF9zdGVwMTIgPSBfaXRlcmF0b3IxMi5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDEyLnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA5O1xuXHQgICAgICAgIHJldHVybiBmbih4KTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEyID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMiA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMiA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEyICYmIF9pdGVyYXRvcjEyW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxMltcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxMikge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxMjtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOCk7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwicGx1Y2tcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAobmFtZSkge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTMsIF9kaWRJdGVyYXRvckVycm9yMTMsIF9pdGVyYXRvckVycm9yMTMsIF9pdGVyYXRvcjEzLCBfc3RlcDEzLCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMyA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMyA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTMgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTMgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTMgPSAoX3N0ZXAxMyA9IF9pdGVyYXRvcjEzLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTMudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgcmV0dXJuIHhbbmFtZV07XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMyA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTMgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTMgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMyAmJiBfaXRlcmF0b3IxM1tcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTNbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTMpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTM7XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIxKTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTgpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTQsIDE4LCAyNl0sIFsxOSwsIDIxLCAyNV1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInJlZHVjdGlvbnNcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoZm4pIHtcblx0ICB2YXIgaW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcblxuXHQgIHZhciB2YWwsIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNCwgX2RpZEl0ZXJhdG9yRXJyb3IxNCwgX2l0ZXJhdG9yRXJyb3IxNCwgX2l0ZXJhdG9yMTQsIF9zdGVwMTQsIHgsIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNSwgX2RpZEl0ZXJhdG9yRXJyb3IxNSwgX2l0ZXJhdG9yRXJyb3IxNSwgX2l0ZXJhdG9yMTUsIF9zdGVwMTU7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgdmFsID0gaW5pdGlhbDtcblxuXHQgICAgICAgIGlmICghKHZhbCA9PT0gdW5kZWZpbmVkKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI4O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE0ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE0ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxNCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNTtcblx0ICAgICAgICBfaXRlcmF0b3IxNCA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDc6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNCA9IChfc3RlcDE0ID0gX2l0ZXJhdG9yMTQubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxNC52YWx1ZTtcblxuXHQgICAgICAgIHZhbCA9IHg7XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImJyZWFrXCIsIDE0KTtcblxuXHQgICAgICBjYXNlIDExOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNCA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDc7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjA7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTY7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDUpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTQgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTQgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDIwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNCAmJiBfaXRlcmF0b3IxNFtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTRbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjM7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTQpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTQ7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIzKTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjApO1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDMwO1xuXHQgICAgICAgIHJldHVybiB2YWw7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTUgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTUgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE1ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzMztcblx0ICAgICAgICBfaXRlcmF0b3IxNSA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDM1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTUgPSAoX3N0ZXAxNSA9IF9pdGVyYXRvcjE1Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDQyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTUudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDM5O1xuXHQgICAgICAgIHJldHVybiB2YWwgPSBmbih2YWwsIHgpO1xuXG5cdCAgICAgIGNhc2UgMzk6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE1ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA0Mjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNDg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA0NDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNDQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDEgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE1ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE1ID0gY29udGV4dCQxJDAudDE7XG5cblx0ICAgICAgY2FzZSA0ODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNDg7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDQ5O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTUgJiYgX2l0ZXJhdG9yMTVbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjE1W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgNTE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDUxO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjE1KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjE1O1xuXG5cdCAgICAgIGNhc2UgNTQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCg1MSk7XG5cblx0ICAgICAgY2FzZSA1NTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDQ4KTtcblxuXHQgICAgICBjYXNlIDU2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJyZXR1cm5cIiwgdmFsKTtcblxuXHQgICAgICBjYXNlIDU3OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzUsIDE2LCAyMCwgMjhdLCBbMjEsLCAyMywgMjddLCBbMzMsIDQ0LCA0OCwgNTZdLCBbNDksLCA1MSwgNTVdXSk7XG5cdH0pLCAyKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJyZWplY3RcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIGZuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gQm9vbGVhbiA6IGFyZ3VtZW50c1swXTtcblxuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTYsIF9kaWRJdGVyYXRvckVycm9yMTYsIF9pdGVyYXRvckVycm9yMTYsIF9pdGVyYXRvcjE2LCBfc3RlcDE2LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNiA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxNiA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTYgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTYgPSAoX3N0ZXAxNiA9IF9pdGVyYXRvcjE2Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTYudmFsdWU7XG5cblx0ICAgICAgICBpZiAoZm4oeCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNiA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTk7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTU7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTYgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTYgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNiAmJiBfaXRlcmF0b3IxNltcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTZbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTYpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTY7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIyKTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTkpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTUsIDE5LCAyN10sIFsyMCwsIDIyLCAyNl1dKTtcblx0fSksIDEpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInNsaWNlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBzdGFydCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbMF07XG5cdCAgdmFyIHN0b3AgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IGFyZ3VtZW50c1sxXTtcblxuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTcsIF9kaWRJdGVyYXRvckVycm9yMTcsIF9pdGVyYXRvckVycm9yMTcsIF9pdGVyYXRvcjE3LCBfc3RlcDE3LCBfc3RlcDE3JHZhbHVlLCB4LCBpO1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIGlmICghKHN0b3AgPCBzdGFydCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJwYXJhbWV0ZXIgYHN0b3BgICg9IFwiICsgc3RvcCArIFwiKSBtdXN0IGJlID49IGBzdGFydGAgKD0gXCIgKyBzdGFydCArIFwiKVwiKTtcblxuXHQgICAgICBjYXNlIDI6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE3ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE3ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxNyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNTtcblx0ICAgICAgICBfaXRlcmF0b3IxNyA9IF9nZXRJdGVyYXRvcih0aGlzLmVudW1lcmF0ZSgpKTtcblxuXHQgICAgICBjYXNlIDc6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNyA9IChfc3RlcDE3ID0gX2l0ZXJhdG9yMTcubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjA7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBfc3RlcDE3JHZhbHVlID0gX3NsaWNlZFRvQXJyYXkoX3N0ZXAxNy52YWx1ZSwgMik7XG5cdCAgICAgICAgeCA9IF9zdGVwMTckdmFsdWVbMF07XG5cdCAgICAgICAgaSA9IF9zdGVwMTckdmFsdWVbMV07XG5cblx0ICAgICAgICBpZiAoIShpIDwgc3RhcnQpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiY29udGludWVcIiwgMTcpO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgaWYgKCEoaSA+PSBzdG9wKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImJyZWFrXCIsIDIwKTtcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNztcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDE3OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNyA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDc7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDUpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTcgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTcgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNjtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjc7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNyAmJiBfaXRlcmF0b3IxN1tcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTdbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjk7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTcpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTc7XG5cblx0ICAgICAgY2FzZSAzMjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI5KTtcblxuXHQgICAgICBjYXNlIDMzOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjYpO1xuXG5cdCAgICAgIGNhc2UgMzQ6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbNSwgMjIsIDI2LCAzNF0sIFsyNywsIDI5LCAzM11dKTtcblx0fSksIDIpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInNwcmVhZE1hcFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChmbikge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTgsIF9kaWRJdGVyYXRvckVycm9yMTgsIF9pdGVyYXRvckVycm9yMTgsIF9pdGVyYXRvcjE4LCBfc3RlcDE4LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOCA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxOCA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTggPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTggPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTggPSAoX3N0ZXAxOCA9IF9pdGVyYXRvcjE4Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTgudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KHgpKTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE4ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxOCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxOCA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE4ICYmIF9pdGVyYXRvcjE4W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxOFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxOCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxODtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOCk7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwidGFrZVwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChuKSB7XG5cdCAgdmFyIGksIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOSwgX2RpZEl0ZXJhdG9yRXJyb3IxOSwgX2l0ZXJhdG9yRXJyb3IxOSwgX2l0ZXJhdG9yMTksIF9zdGVwMTksIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgaWYgKCEobiA8IDEpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJyZXR1cm5cIik7XG5cblx0ICAgICAgY2FzZSAyOlxuXHQgICAgICAgIGkgPSAwO1xuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOSA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxOSA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTkgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDY7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTkgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA4OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTkgPSAoX3N0ZXAxOSA9IF9pdGVyYXRvcjE5Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE3O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTkudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgaWYgKCEoKytpID49IG4pKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiYnJlYWtcIiwgMTcpO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE5ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE3OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oNik7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxOSA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxOSA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjM6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIzO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNDtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE5ICYmIF9pdGVyYXRvcjE5W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxOVtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNjtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxOSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI5O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxOTtcblxuXHQgICAgICBjYXNlIDI5OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjYpO1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMyk7XG5cblx0ICAgICAgY2FzZSAzMTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s2LCAxOSwgMjMsIDMxXSwgWzI0LCwgMjYsIDMwXV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwidGFrZVdoaWxlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IEJvb2xlYW4gOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIwLCBfZGlkSXRlcmF0b3JFcnJvcjIwLCBfaXRlcmF0b3JFcnJvcjIwLCBfaXRlcmF0b3IyMCwgX3N0ZXAyMCwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjAgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjAgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIwID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjIwID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIwID0gKF9zdGVwMjAgPSBfaXRlcmF0b3IyMC5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDIwLnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKGZuKHgpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJicmVha1wiLCAxNCk7XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMTtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDExOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMCA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjA7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTY7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjAgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjAgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDIwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMCAmJiBfaXRlcmF0b3IyMFtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMjBbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjM7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMjApIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjA7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIzKTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjApO1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTYsIDIwLCAyOF0sIFsyMSwsIDIzLCAyN11dKTtcblx0fSksIDEpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInRhcFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgZm4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMSwgX2RpZEl0ZXJhdG9yRXJyb3IyMSwgX2l0ZXJhdG9yRXJyb3IyMSwgX2l0ZXJhdG9yMjEsIF9zdGVwMjEsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIxID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIxID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyMSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IyMSA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMSA9IChfc3RlcDIxID0gX2l0ZXJhdG9yMjEubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAyMS52YWx1ZTtcblxuXHQgICAgICAgIGZuKHgpO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMSA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTk7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTU7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjEgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjEgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMSAmJiBfaXRlcmF0b3IyMVtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMjFbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMjEpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjE7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIyKTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTkpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTUsIDE5LCAyN10sIFsyMCwsIDIyLCAyNl1dKTtcblx0fSksIDEpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInVuaXF1ZVwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgc2VlbiwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIyLCBfZGlkSXRlcmF0b3JFcnJvcjIyLCBfaXRlcmF0b3JFcnJvcjIyLCBfaXRlcmF0b3IyMiwgX3N0ZXAyMiwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBzZWVuID0gbmV3IF9TZXQoKTtcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjIgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjIgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIyID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA0O1xuXHQgICAgICAgIF9pdGVyYXRvcjIyID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNjpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIyID0gKF9zdGVwMjIgPSBfaXRlcmF0b3IyMi5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDIyLnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKHNlZW4uaGFzKHgpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTE7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMTpcblx0ICAgICAgICBzZWVuLmFkZCh4KTtcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMiA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjE7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTc7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDQpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjIgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjIgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMiAmJiBfaXRlcmF0b3IyMltcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMjJbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjQ7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMjIpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjI7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI0KTtcblxuXHQgICAgICBjYXNlIDI4OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjk6XG5cdCAgICAgICAgc2Vlbi5jbGVhcigpO1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbNCwgMTcsIDIxLCAyOV0sIFsyMiwsIDI0LCAyOF1dKTtcblx0fSkpO1xuXG5cdHZhciBfemlwID0gcmV3cmFwKF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKGl0ZXJhYmxlcykge1xuXHQgIHZhciBsb25nZXN0ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBhcmd1bWVudHNbMV07XG5cblx0ICB2YXIgaXRlcnMsIG51bUl0ZXJzLCBudW1GaW5pc2hlZCwgZmluaXNoZWQsIHppcHBlZCwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIzLCBfZGlkSXRlcmF0b3JFcnJvcjIzLCBfaXRlcmF0b3JFcnJvcjIzLCBfaXRlcmF0b3IyMywgX3N0ZXAyMywgaXQsIF9pdCRuZXh0LCB2YWx1ZSwgZG9uZTtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBpZiAoaXRlcmFibGVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwicmV0dXJuXCIpO1xuXG5cdCAgICAgIGNhc2UgMjpcblx0ICAgICAgICBpdGVycyA9IGl0ZXJhYmxlcy5tYXAoZ2V0SXRlcmF0b3IpO1xuXHQgICAgICAgIG51bUl0ZXJzID0gaXRlcmFibGVzLmxlbmd0aDtcblx0ICAgICAgICBudW1GaW5pc2hlZCA9IDA7XG5cdCAgICAgICAgZmluaXNoZWQgPSBmYWxzZTtcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgaWYgKGZpbmlzaGVkKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNDQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB6aXBwZWQgPSBbXTtcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjMgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjMgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIzID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxMTtcblx0ICAgICAgICBfaXRlcmF0b3IyMyA9IF9nZXRJdGVyYXRvcihpdGVycyk7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIzID0gKF9zdGVwMjMgPSBfaXRlcmF0b3IyMy5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGl0ID0gX3N0ZXAyMy52YWx1ZTtcblx0ICAgICAgICBfaXQkbmV4dCA9IGl0Lm5leHQoKTtcblx0ICAgICAgICB2YWx1ZSA9IF9pdCRuZXh0LnZhbHVlO1xuXHQgICAgICAgIGRvbmUgPSBfaXQkbmV4dC5kb25lO1xuXG5cdCAgICAgICAgaWYgKCFkb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAobG9uZ2VzdCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIxO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcInJldHVyblwiKTtcblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGlmICgrK251bUZpbmlzaGVkID09IG51bUl0ZXJzKSB7XG5cdCAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgIC8vIExlYXZlIGEgaG9sZSBpbiB0aGUgYXJyYXkgc28gdGhhdCB5b3UgY2FuIGRpc3Rpbmd1aXNoIGFuIGl0ZXJhYmxlXG5cdCAgICAgICAgICAvLyB0aGF0J3MgZG9uZSAodmlhIGBpbmRleCBpbiBhcnJheSA9PSBmYWxzZWApIGZyb20gYW4gaXRlcmFibGVcblx0ICAgICAgICAgIC8vIHlpZWxkaW5nIGB1bmRlZmluZWRgLlxuXHQgICAgICAgICAgemlwcGVkLmxlbmd0aCsrO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB6aXBwZWQucHVzaCh2YWx1ZSk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjM6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIzID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzI7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjg7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDExKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIzID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIzID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAzMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMzI7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDMzO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjMgJiYgX2l0ZXJhdG9yMjNbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjIzW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMzU6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM1O1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjIzKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzg7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjIzO1xuXG5cdCAgICAgIGNhc2UgMzg6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgzNSk7XG5cblx0ICAgICAgY2FzZSAzOTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDMyKTtcblxuXHQgICAgICBjYXNlIDQwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA0Mjtcblx0ICAgICAgICByZXR1cm4gemlwcGVkO1xuXG5cdCAgICAgIGNhc2UgNDI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA0NDpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1sxMSwgMjgsIDMyLCA0MF0sIFszMywsIDM1LCAzOV1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcInppcFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZXJhYmxlcyA9IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG5cdCAgICBpdGVyYWJsZXNbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTtcblx0ICB9XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoX3ppcChpdGVyYWJsZXMpLCBcInQwXCIsIDEpO1xuXG5cdCAgICAgIGNhc2UgMTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcyk7XG5cdH0pKTtcblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJ6aXBMb25nZXN0XCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIGZvciAodmFyIF9sZW44ID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlcmFibGVzID0gQXJyYXkoX2xlbjgpLCBfa2V5OCA9IDA7IF9rZXk4IDwgX2xlbjg7IF9rZXk4KyspIHtcblx0ICAgIGl0ZXJhYmxlc1tfa2V5OF0gPSBhcmd1bWVudHNbX2tleThdO1xuXHQgIH1cblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChfemlwKGl0ZXJhYmxlcywgdHJ1ZSksIFwidDBcIiwgMSk7XG5cblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcInppcFdpdGhcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoZm4pIHtcblx0ICBmb3IgKHZhciBfbGVuOSA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZXJhYmxlcyA9IEFycmF5KF9sZW45ID4gMSA/IF9sZW45IC0gMSA6IDApLCBfa2V5OSA9IDE7IF9rZXk5IDwgX2xlbjk7IF9rZXk5KyspIHtcblx0ICAgIGl0ZXJhYmxlc1tfa2V5OSAtIDFdID0gYXJndW1lbnRzW19rZXk5XTtcblx0ICB9XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoX3ppcChpdGVyYWJsZXMpLnNwcmVhZE1hcChmbiksIFwidDBcIiwgMSk7XG5cblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdC8qXG5cdCAqIEZ1bmN0aW9ucyB0aGF0IGZvcmNlIGl0ZXJhdGlvbiB0byBjb21wbGV0aW9uIGFuZCByZXR1cm4gYSB2YWx1ZS5cblx0ICovXG5cblx0Ly8gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB3ZSB3aWxsIGJsb2NrIHRoZSBtYWluIHRocmVhZCBhdCBhIHRpbWVcblx0Ly8gd2hpbGUgaW4gYGFzeW5jRWFjaGAuXG5cdHd1Lk1BWF9CTE9DSyA9IDE1O1xuXHQvLyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB5aWVsZCB0byB0aGUgbWFpbiB0aHJlYWQgYmV0d2VlbiBidXJzdHMgb2Zcblx0Ly8gd29yay5cblx0d3UuVElNRU9VVCA9IDE7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwiYXN5bmNFYWNoXCIsIGZ1bmN0aW9uIChmbikge1xuXHQgIHZhciBtYXhCbG9jayA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHd1Lk1BWF9CTE9DSyA6IGFyZ3VtZW50c1sxXTtcblx0ICB2YXIgdGltZW91dCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5lZCA/IHd1LlRJTUVPVVQgOiBhcmd1bWVudHNbMl07XG5cblx0ICB2YXIgaXRlciA9IGdldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgcmV0dXJuIG5ldyBfUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAoZnVuY3Rpb24gbG9vcCgpIHtcblx0ICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTtcblxuXHQgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI0ID0gdHJ1ZTtcblx0ICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMjQgPSBmYWxzZTtcblx0ICAgICAgdmFyIF9pdGVyYXRvckVycm9yMjQgPSB1bmRlZmluZWQ7XG5cblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IyNCA9IF9nZXRJdGVyYXRvcihpdGVyKSwgX3N0ZXAyNDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjQgPSAoX3N0ZXAyNCA9IF9pdGVyYXRvcjI0Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNCA9IHRydWUpIHtcblx0ICAgICAgICAgIHZhciB4ID0gX3N0ZXAyNC52YWx1ZTtcblxuXHQgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgZm4oeCk7XG5cdCAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgIHJlamVjdChlKTtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0ID4gbWF4QmxvY2spIHtcblx0ICAgICAgICAgICAgc2V0VGltZW91dChsb29wLCB0aW1lb3V0KTtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyNCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyNCA9IGVycjtcblx0ICAgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjQgJiYgX2l0ZXJhdG9yMjRbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgICAgX2l0ZXJhdG9yMjRbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGZpbmFsbHkge1xuXHQgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMjQpIHtcblx0ICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyNDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICByZXNvbHZlKCk7XG5cdCAgICB9KSgpO1xuXHQgIH0pO1xuXHR9LCAzKTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJldmVyeVwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgdmFyIGZuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gQm9vbGVhbiA6IGFyZ3VtZW50c1swXTtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI1ID0gdHJ1ZTtcblx0ICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyNSA9IGZhbHNlO1xuXHQgIHZhciBfaXRlcmF0b3JFcnJvcjI1ID0gdW5kZWZpbmVkO1xuXG5cdCAgdHJ5IHtcblx0ICAgIGZvciAodmFyIF9pdGVyYXRvcjI1ID0gX2dldEl0ZXJhdG9yKHRoaXMpLCBfc3RlcDI1OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNSA9IChfc3RlcDI1ID0gX2l0ZXJhdG9yMjUubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI1ID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgeCA9IF9zdGVwMjUudmFsdWU7XG5cblx0ICAgICAgaWYgKCFmbih4KSkge1xuXHQgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgX2RpZEl0ZXJhdG9yRXJyb3IyNSA9IHRydWU7XG5cdCAgICBfaXRlcmF0b3JFcnJvcjI1ID0gZXJyO1xuXHQgIH0gZmluYWxseSB7XG5cdCAgICB0cnkge1xuXHQgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNSAmJiBfaXRlcmF0b3IyNVtcInJldHVyblwiXSkge1xuXHQgICAgICAgIF9pdGVyYXRvcjI1W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgIH1cblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjI1KSB7XG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyNTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiB0cnVlO1xuXHR9LCAxKTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJmaW5kXCIsIGZ1bmN0aW9uIChmbikge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjYgPSB0cnVlO1xuXHQgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjI2ID0gZmFsc2U7XG5cdCAgdmFyIF9pdGVyYXRvckVycm9yMjYgPSB1bmRlZmluZWQ7XG5cblx0ICB0cnkge1xuXHQgICAgZm9yICh2YXIgX2l0ZXJhdG9yMjYgPSBfZ2V0SXRlcmF0b3IodGhpcyksIF9zdGVwMjY7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI2ID0gKF9zdGVwMjYgPSBfaXRlcmF0b3IyNi5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjYgPSB0cnVlKSB7XG5cdCAgICAgIHZhciB4ID0gX3N0ZXAyNi52YWx1ZTtcblxuXHQgICAgICBpZiAoZm4oeCkpIHtcblx0ICAgICAgICByZXR1cm4geDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgX2RpZEl0ZXJhdG9yRXJyb3IyNiA9IHRydWU7XG5cdCAgICBfaXRlcmF0b3JFcnJvcjI2ID0gZXJyO1xuXHQgIH0gZmluYWxseSB7XG5cdCAgICB0cnkge1xuXHQgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNiAmJiBfaXRlcmF0b3IyNltcInJldHVyblwiXSkge1xuXHQgICAgICAgIF9pdGVyYXRvcjI2W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgIH1cblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjI2KSB7XG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyNjtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0fSk7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwiZm9yRWFjaFwiLCBmdW5jdGlvbiAoZm4pIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI3ID0gdHJ1ZTtcblx0ICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyNyA9IGZhbHNlO1xuXHQgIHZhciBfaXRlcmF0b3JFcnJvcjI3ID0gdW5kZWZpbmVkO1xuXG5cdCAgdHJ5IHtcblx0ICAgIGZvciAodmFyIF9pdGVyYXRvcjI3ID0gX2dldEl0ZXJhdG9yKHRoaXMpLCBfc3RlcDI3OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNyA9IChfc3RlcDI3ID0gX2l0ZXJhdG9yMjcubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI3ID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgeCA9IF9zdGVwMjcudmFsdWU7XG5cblx0ICAgICAgZm4oeCk7XG5cdCAgICB9XG5cdCAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICBfZGlkSXRlcmF0b3JFcnJvcjI3ID0gdHJ1ZTtcblx0ICAgIF9pdGVyYXRvckVycm9yMjcgPSBlcnI7XG5cdCAgfSBmaW5hbGx5IHtcblx0ICAgIHRyeSB7XG5cdCAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI3ICYmIF9pdGVyYXRvcjI3W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgX2l0ZXJhdG9yMjdbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgfVxuXHQgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMjcpIHtcblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI3O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXHR9KTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJoYXNcIiwgZnVuY3Rpb24gKHRoaW5nKSB7XG5cdCAgcmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbiAoeCkge1xuXHQgICAgcmV0dXJuIHggPT09IHRoaW5nO1xuXHQgIH0pO1xuXHR9KTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJyZWR1Y2VcIiwgZnVuY3Rpb24gKGZuKSB7XG5cdCAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG5cblx0ICB2YXIgdmFsID0gaW5pdGlhbDtcblx0ICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcblx0ICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjggPSB0cnVlO1xuXHQgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMjggPSBmYWxzZTtcblx0ICAgIHZhciBfaXRlcmF0b3JFcnJvcjI4ID0gdW5kZWZpbmVkO1xuXG5cdCAgICB0cnkge1xuXHQgICAgICBmb3IgKHZhciBfaXRlcmF0b3IyOCA9IF9nZXRJdGVyYXRvcih0aGlzKSwgX3N0ZXAyODsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjggPSAoX3N0ZXAyOCA9IF9pdGVyYXRvcjI4Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yOCA9IHRydWUpIHtcblx0ICAgICAgICB2YXIgeCA9IF9zdGVwMjgudmFsdWU7XG5cblx0ICAgICAgICB2YWwgPSB4O1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICB9XG5cdCAgICB9IGNhdGNoIChlcnIpIHtcblx0ICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyOCA9IHRydWU7XG5cdCAgICAgIF9pdGVyYXRvckVycm9yMjggPSBlcnI7XG5cdCAgICB9IGZpbmFsbHkge1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI4ICYmIF9pdGVyYXRvcjI4W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IyOFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyOCkge1xuXHQgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyODtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI5ID0gdHJ1ZTtcblx0ICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyOSA9IGZhbHNlO1xuXHQgIHZhciBfaXRlcmF0b3JFcnJvcjI5ID0gdW5kZWZpbmVkO1xuXG5cdCAgdHJ5IHtcblx0ICAgIGZvciAodmFyIF9pdGVyYXRvcjI5ID0gX2dldEl0ZXJhdG9yKHRoaXMpLCBfc3RlcDI5OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yOSA9IChfc3RlcDI5ID0gX2l0ZXJhdG9yMjkubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI5ID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgeCA9IF9zdGVwMjkudmFsdWU7XG5cblx0ICAgICAgdmFsID0gZm4odmFsLCB4KTtcblx0ICAgIH1cblx0ICB9IGNhdGNoIChlcnIpIHtcblx0ICAgIF9kaWRJdGVyYXRvckVycm9yMjkgPSB0cnVlO1xuXHQgICAgX2l0ZXJhdG9yRXJyb3IyOSA9IGVycjtcblx0ICB9IGZpbmFsbHkge1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjkgJiYgX2l0ZXJhdG9yMjlbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICBfaXRlcmF0b3IyOVtcInJldHVyblwiXSgpO1xuXHQgICAgICB9XG5cdCAgICB9IGZpbmFsbHkge1xuXHQgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyOSkge1xuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gdmFsO1xuXHR9LCAyKTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJzb21lXCIsIGZ1bmN0aW9uICgpIHtcblx0ICB2YXIgZm4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBCb29sZWFuIDogYXJndW1lbnRzWzBdO1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMzAgPSB0cnVlO1xuXHQgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjMwID0gZmFsc2U7XG5cdCAgdmFyIF9pdGVyYXRvckVycm9yMzAgPSB1bmRlZmluZWQ7XG5cblx0ICB0cnkge1xuXHQgICAgZm9yICh2YXIgX2l0ZXJhdG9yMzAgPSBfZ2V0SXRlcmF0b3IodGhpcyksIF9zdGVwMzA7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMwID0gKF9zdGVwMzAgPSBfaXRlcmF0b3IzMC5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMzAgPSB0cnVlKSB7XG5cdCAgICAgIHZhciB4ID0gX3N0ZXAzMC52YWx1ZTtcblxuXHQgICAgICBpZiAoZm4oeCkpIHtcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgX2RpZEl0ZXJhdG9yRXJyb3IzMCA9IHRydWU7XG5cdCAgICBfaXRlcmF0b3JFcnJvcjMwID0gZXJyO1xuXHQgIH0gZmluYWxseSB7XG5cdCAgICB0cnkge1xuXHQgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zMCAmJiBfaXRlcmF0b3IzMFtcInJldHVyblwiXSkge1xuXHQgICAgICAgIF9pdGVyYXRvcjMwW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgIH1cblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjMwKSB7XG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IzMDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiBmYWxzZTtcblx0fSwgMSk7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwidG9BcnJheVwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodGhpcykpO1xuXHR9KTtcblxuXHQvKlxuXHQgKiBNZXRob2RzIHRoYXQgcmV0dXJuIGFuIGFycmF5IG9mIGl0ZXJhYmxlcy5cblx0ICovXG5cblx0dmFyIE1BWF9DQUNIRSA9IDUwMDtcblxuXHR2YXIgX3RlZSA9IHJld3JhcChfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChpdGVyYXRvciwgY2FjaGUpIHtcblx0ICB2YXIgaXRlbXMsIGluZGV4LCBfaXRlcmF0b3IkbmV4dCwgZG9uZSwgdmFsdWU7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgaXRlbXMgPSBjYWNoZS5pdGVtcztcblx0ICAgICAgICBpbmRleCA9IDA7XG5cblx0ICAgICAgY2FzZSAyOlxuXHQgICAgICAgIGlmIChmYWxzZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKCEoaW5kZXggPT09IGl0ZW1zLmxlbmd0aCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIF9pdGVyYXRvciRuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuXHQgICAgICAgIGRvbmUgPSBfaXRlcmF0b3IkbmV4dC5kb25lO1xuXHQgICAgICAgIHZhbHVlID0gX2l0ZXJhdG9yJG5leHQudmFsdWU7XG5cblx0ICAgICAgICBpZiAoIWRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmIChjYWNoZS5yZXR1cm5lZCA9PT0gTUlTU0lORykge1xuXHQgICAgICAgICAgY2FjaGUucmV0dXJuZWQgPSB2YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImJyZWFrXCIsIDI1KTtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICByZXR1cm4gaXRlbXNbaW5kZXgrK10gPSB2YWx1ZTtcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGlmICghKGluZGV4ID09PSBjYWNoZS50YWlsKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIxO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdmFsdWUgPSBpdGVtc1tpbmRleF07XG5cblx0ICAgICAgICBpZiAoaW5kZXggPT09IE1BWF9DQUNIRSkge1xuXHQgICAgICAgICAgaXRlbXMgPSBjYWNoZS5pdGVtcyA9IGl0ZW1zLnNsaWNlKGluZGV4KTtcblx0ICAgICAgICAgIGluZGV4ID0gMDtcblx0ICAgICAgICAgIGNhY2hlLnRhaWwgPSAwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBpdGVtc1tpbmRleF0gPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICBjYWNoZS50YWlsID0gKytpbmRleDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE5O1xuXHQgICAgICAgIHJldHVybiB2YWx1ZTtcblxuXHQgICAgICBjYXNlIDE5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMztcblx0ICAgICAgICByZXR1cm4gaXRlbXNbaW5kZXgrK107XG5cblx0ICAgICAgY2FzZSAyMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDI1OlxuXG5cdCAgICAgICAgaWYgKGNhY2hlLnRhaWwgPT09IGluZGV4KSB7XG5cdCAgICAgICAgICBpdGVtcy5sZW5ndGggPSAwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJyZXR1cm5cIiwgY2FjaGUucmV0dXJuZWQpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMpO1xuXHR9KSk7XG5cdF90ZWUucHJvdG90eXBlID0gV3UucHJvdG90eXBlO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcInRlZVwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAyIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIGl0ZXJhYmxlcyA9IG5ldyBBcnJheShuKTtcblx0ICB2YXIgY2FjaGUgPSB7IHRhaWw6IDAsIGl0ZW1zOiBbXSwgcmV0dXJuZWQ6IE1JU1NJTkcgfTtcblxuXHQgIHdoaWxlIChuLS0pIHtcblx0ICAgIGl0ZXJhYmxlc1tuXSA9IF90ZWUodGhpcywgY2FjaGUpO1xuXHQgIH1cblxuXHQgIHJldHVybiBpdGVyYWJsZXM7XG5cdH0sIDEpO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcInVuemlwXCIsIGZ1bmN0aW9uICgpIHtcblx0ICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDIgOiBhcmd1bWVudHNbMF07XG5cblx0ICByZXR1cm4gdGhpcy50ZWUobikubWFwKGZ1bmN0aW9uIChpdGVyLCBpKSB7XG5cdCAgICByZXR1cm4gaXRlci5wbHVjayhpKTtcblx0ICB9KTtcblx0fSwgMSk7XG5cblx0Lypcblx0ICogTnVtYmVyIG9mIGNoYW1iZXJzLlxuXHQgKi9cblxuXHR3dS50YW5nID0geyBjbGFuOiAzNiB9O1xuXG5cdC8vIFdlIGRvbid0IGhhdmUgYSBjYWNoZWQgaXRlbSBmb3IgdGhpcyBpbmRleCwgd2UgbmVlZCB0byBmb3JjZSBpdHNcblx0Ly8gZXZhbHVhdGlvbi5cblxuXHQvLyBJZiB3ZSBhcmUgdGhlIGxhc3QgaXRlcmF0b3IgdG8gdXNlIGEgY2FjaGVkIHZhbHVlLCBjbGVhbiB1cCBhZnRlclxuXHQvLyBvdXJzZWx2ZXMuXG5cblx0Ly8gV2UgaGF2ZSBhbiBpdGVtIGluIHRoZSBjYWNoZSBmb3IgdGhpcyBpbmRleCwgc28geWllbGQgaXQuXG5cbi8qKiovIH0sXG4vKiAxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX0FycmF5JGZyb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpW1wiZGVmYXVsdFwiXTtcblxuXHRleHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChhcnIpIHtcblx0ICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG5cdCAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG5cdCAgICByZXR1cm4gYXJyMjtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIF9BcnJheSRmcm9tKGFycik7XG5cdCAgfVxuXHR9O1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbi8qKiovIH0sXG4vKiAyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oMyksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdF9fd2VicGFja19yZXF1aXJlX18oMjYpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLkFycmF5LmZyb207XG5cbi8qKiovIH0sXG4vKiA0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciAkYXQgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSh0cnVlKTtcblxuXHQvLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5cdF9fd2VicGFja19yZXF1aXJlX18oOCkoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24oaXRlcmF0ZWQpe1xuXHQgIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcblx0ICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuXHQvLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG5cdH0sIGZ1bmN0aW9uKCl7XG5cdCAgdmFyIE8gICAgID0gdGhpcy5fdFxuXHQgICAgLCBpbmRleCA9IHRoaXMuX2lcblx0ICAgICwgcG9pbnQ7XG5cdCAgaWYoaW5kZXggPj0gTy5sZW5ndGgpcmV0dXJuIHt2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlfTtcblx0ICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG5cdCAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG5cdCAgcmV0dXJuIHt2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlfTtcblx0fSk7XG5cbi8qKiovIH0sXG4vKiA1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyB0cnVlICAtPiBTdHJpbmcjYXRcblx0Ly8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5cdHZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG5cdCAgLCBkZWZpbmVkICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFRPX1NUUklORyl7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uKHRoYXQsIHBvcyl7XG5cdCAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKVxuXHQgICAgICAsIGkgPSB0b0ludGVnZXIocG9zKVxuXHQgICAgICAsIGwgPSBzLmxlbmd0aFxuXHQgICAgICAsIGEsIGI7XG5cdCAgICBpZihpIDwgMCB8fCBpID49IGwpcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuXHQgICAgYSA9IHMuY2hhckNvZGVBdChpKTtcblx0ICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGxcblx0ICAgICAgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG5cdCAgICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcblx0ICAgICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcblx0ICB9O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Ly8gNy4xLjQgVG9JbnRlZ2VyXG5cdHZhciBjZWlsICA9IE1hdGguY2VpbFxuXHQgICwgZmxvb3IgPSBNYXRoLmZsb29yO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIGlmKGl0ID09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG5cdCAgcmV0dXJuIGl0O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgTElCUkFSWSAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KVxuXHQgICwgJGRlZiAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcblx0ICAsICRyZWRlZiAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpXG5cdCAgLCBoaWRlICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KVxuXHQgICwgaGFzICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSlcblx0ICAsIFNZTUJPTF9JVEVSQVRPUiA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdpdGVyYXRvcicpXG5cdCAgLCBJdGVyYXRvcnMgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKVxuXHQgICwgQlVHR1kgICAgICAgICAgID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpIC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcblx0ICAsIEZGX0lURVJBVE9SICAgICA9ICdAQGl0ZXJhdG9yJ1xuXHQgICwgS0VZUyAgICAgICAgICAgID0gJ2tleXMnXG5cdCAgLCBWQUxVRVMgICAgICAgICAgPSAndmFsdWVzJztcblx0dmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRSl7XG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNCkoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXHQgIHZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbihraW5kKXtcblx0ICAgIHN3aXRjaChraW5kKXtcblx0ICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuXHQgICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuXHQgICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuXHQgIH07XG5cdCAgdmFyIFRBRyAgICAgID0gTkFNRSArICcgSXRlcmF0b3InXG5cdCAgICAsIHByb3RvICAgID0gQmFzZS5wcm90b3R5cGVcblx0ICAgICwgX25hdGl2ZSAgPSBwcm90b1tTWU1CT0xfSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdXG5cdCAgICAsIF9kZWZhdWx0ID0gX25hdGl2ZSB8fCBjcmVhdGVNZXRob2QoREVGQVVMVClcblx0ICAgICwgbWV0aG9kcywga2V5O1xuXHQgIC8vIEZpeCBuYXRpdmVcblx0ICBpZihfbmF0aXZlKXtcblx0ICAgIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpLmdldFByb3RvKF9kZWZhdWx0LmNhbGwobmV3IEJhc2UpKTtcblx0ICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcblx0ICAgIF9fd2VicGFja19yZXF1aXJlX18oMjUpKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuXHQgICAgLy8gRkYgZml4XG5cdCAgICBpZighTElCUkFSWSAmJiBoYXMocHJvdG8sIEZGX0lURVJBVE9SKSloaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBTWU1CT0xfSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuXHQgIH1cblx0ICAvLyBEZWZpbmUgaXRlcmF0b3Jcblx0ICBpZighTElCUkFSWSB8fCBGT1JDRSloaWRlKHByb3RvLCBTWU1CT0xfSVRFUkFUT1IsIF9kZWZhdWx0KTtcblx0ICAvLyBQbHVnIGZvciBsaWJyYXJ5XG5cdCAgSXRlcmF0b3JzW05BTUVdID0gX2RlZmF1bHQ7XG5cdCAgSXRlcmF0b3JzW1RBR10gID0gcmV0dXJuVGhpcztcblx0ICBpZihERUZBVUxUKXtcblx0ICAgIG1ldGhvZHMgPSB7XG5cdCAgICAgIGtleXM6ICAgIElTX1NFVCAgICAgICAgICAgID8gX2RlZmF1bHQgOiBjcmVhdGVNZXRob2QoS0VZUyksXG5cdCAgICAgIHZhbHVlczogIERFRkFVTFQgPT0gVkFMVUVTID8gX2RlZmF1bHQgOiBjcmVhdGVNZXRob2QoVkFMVUVTKSxcblx0ICAgICAgZW50cmllczogREVGQVVMVCAhPSBWQUxVRVMgPyBfZGVmYXVsdCA6IGNyZWF0ZU1ldGhvZCgnZW50cmllcycpXG5cdCAgICB9O1xuXHQgICAgaWYoRk9SQ0UpZm9yKGtleSBpbiBtZXRob2RzKXtcblx0ICAgICAgaWYoIShrZXkgaW4gcHJvdG8pKSRyZWRlZihwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuXHQgICAgfSBlbHNlICRkZWYoJGRlZi5QICsgJGRlZi5GICogQlVHR1ksIE5BTUUsIG1ldGhvZHMpO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcblxuLyoqKi8gfSxcbi8qIDEwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgZ2xvYmFsICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcblx0ICAsIGNvcmUgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpXG5cdCAgLCBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblx0dmFyIGN0eCA9IGZ1bmN0aW9uKGZuLCB0aGF0KXtcblx0ICByZXR1cm4gZnVuY3Rpb24oKXtcblx0ICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuXHQgIH07XG5cdH07XG5cdHZhciAkZGVmID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgc291cmNlKXtcblx0ICB2YXIga2V5LCBvd24sIG91dCwgZXhwXG5cdCAgICAsIGlzR2xvYmFsID0gdHlwZSAmICRkZWYuR1xuXHQgICAgLCBpc1Byb3RvICA9IHR5cGUgJiAkZGVmLlBcblx0ICAgICwgdGFyZ2V0ICAgPSBpc0dsb2JhbCA/IGdsb2JhbCA6IHR5cGUgJiAkZGVmLlNcblx0ICAgICAgICA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV1cblx0ICAgICwgZXhwb3J0cyAgPSBpc0dsb2JhbCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuXHQgIGlmKGlzR2xvYmFsKXNvdXJjZSA9IG5hbWU7XG5cdCAgZm9yKGtleSBpbiBzb3VyY2Upe1xuXHQgICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG5cdCAgICBvd24gPSAhKHR5cGUgJiAkZGVmLkYpICYmIHRhcmdldCAmJiBrZXkgaW4gdGFyZ2V0O1xuXHQgICAgaWYob3duICYmIGtleSBpbiBleHBvcnRzKWNvbnRpbnVlO1xuXHQgICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcblx0ICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG5cdCAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcblx0ICAgIGlmKGlzR2xvYmFsICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nKWV4cCA9IHNvdXJjZVtrZXldO1xuXHQgICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcblx0ICAgIGVsc2UgaWYodHlwZSAmICRkZWYuQiAmJiBvd24pZXhwID0gY3R4KG91dCwgZ2xvYmFsKTtcblx0ICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG5cdCAgICBlbHNlIGlmKHR5cGUgJiAkZGVmLlcgJiYgdGFyZ2V0W2tleV0gPT0gb3V0KSFmdW5jdGlvbihDKXtcblx0ICAgICAgZXhwID0gZnVuY3Rpb24ocGFyYW0pe1xuXHQgICAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgQyA/IG5ldyBDKHBhcmFtKSA6IEMocGFyYW0pO1xuXHQgICAgICB9O1xuXHQgICAgICBleHBbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcblx0ICAgIH0ob3V0KTtcblx0ICAgIGVsc2UgZXhwID0gaXNQcm90byAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcblx0ICAgIC8vIGV4cG9ydFxuXHQgICAgZXhwb3J0c1trZXldID0gZXhwO1xuXHQgICAgaWYoaXNQcm90bykoZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSkpW2tleV0gPSBvdXQ7XG5cdCAgfVxuXHR9O1xuXHQvLyB0eXBlIGJpdG1hcFxuXHQkZGVmLkYgPSAxOyAgLy8gZm9yY2VkXG5cdCRkZWYuRyA9IDI7ICAvLyBnbG9iYWxcblx0JGRlZi5TID0gNDsgIC8vIHN0YXRpY1xuXHQkZGVmLlAgPSA4OyAgLy8gcHJvdG9cblx0JGRlZi5CID0gMTY7IC8vIGJpbmRcblx0JGRlZi5XID0gMzI7IC8vIHdyYXBcblx0bW9kdWxlLmV4cG9ydHMgPSAkZGVmO1xuXG4vKioqLyB9LFxuLyogMTEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5cdHZhciBVTkRFRklORUQgPSAndW5kZWZpbmVkJztcblx0dmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSBVTkRFRklORUQgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuXHQgID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gVU5ERUZJTkVEICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZiA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdGlmKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbi8qKiovIH0sXG4vKiAxMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0dmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHt2ZXJzaW9uOiAnMS4yLjAnfTtcblx0aWYodHlwZW9mIF9fZSA9PSAnbnVtYmVyJylfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbi8qKiovIH0sXG4vKiAxMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuLyoqKi8gfSxcbi8qIDE0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgJCAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCBjcmVhdGVEZXNjID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNykgPyBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuXHQgIHJldHVybiAkLnNldERlc2Mob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcblx0fSA6IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG5cdCAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcblx0ICByZXR1cm4gb2JqZWN0O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMTUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdHZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICBjcmVhdGU6ICAgICAkT2JqZWN0LmNyZWF0ZSxcblx0ICBnZXRQcm90bzogICAkT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuXHQgIGlzRW51bTogICAgIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLFxuXHQgIGdldERlc2M6ICAgICRPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuXHQgIHNldERlc2M6ICAgICRPYmplY3QuZGVmaW5lUHJvcGVydHksXG5cdCAgc2V0RGVzY3M6ICAgJE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLFxuXHQgIGdldEtleXM6ICAgICRPYmplY3Qua2V5cyxcblx0ICBnZXROYW1lczogICAkT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsXG5cdCAgZ2V0U3ltYm9sczogJE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsXG5cdCAgZWFjaDogICAgICAgW10uZm9yRWFjaFxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYml0bWFwLCB2YWx1ZSl7XG5cdCAgcmV0dXJuIHtcblx0ICAgIGVudW1lcmFibGUgIDogIShiaXRtYXAgJiAxKSxcblx0ICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcblx0ICAgIHdyaXRhYmxlICAgIDogIShiaXRtYXAgJiA0KSxcblx0ICAgIHZhbHVlICAgICAgIDogdmFsdWVcblx0ICB9O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMTcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcblx0bW9kdWxlLmV4cG9ydHMgPSAhX193ZWJwYWNrX3JlcXVpcmVfXygxOCkoZnVuY3Rpb24oKXtcblx0ICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xuXHR9KTtcblxuLyoqKi8gfSxcbi8qIDE4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuXHQgIHRyeSB7XG5cdCAgICByZXR1cm4gISFleGVjKCk7XG5cdCAgfSBjYXRjaChlKXtcblx0ICAgIHJldHVybiB0cnVlO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDE5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHR2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwga2V5KXtcblx0ICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDIwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgc3RvcmUgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoJ3drcycpXG5cdCAgLCBTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKS5TeW1ib2w7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSl7XG5cdCAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG5cdCAgICBTeW1ib2wgJiYgU3ltYm9sW25hbWVdIHx8IChTeW1ib2wgfHwgX193ZWJwYWNrX3JlcXVpcmVfXygyMikpKCdTeW1ib2wuJyArIG5hbWUpKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDIxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcblx0ICAsIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nXG5cdCAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcblx0ICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHt9KTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDIyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHR2YXIgaWQgPSAwXG5cdCAgLCBweCA9IE1hdGgucmFuZG9tKCk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcblx0ICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8qKiovIH0sXG4vKiAyNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG5cdC8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5cdF9fd2VicGFja19yZXF1aXJlX18oMTQpKEl0ZXJhdG9yUHJvdG90eXBlLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH0pO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpe1xuXHQgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9ICQuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7bmV4dDogX193ZWJwYWNrX3JlcXVpcmVfXygxNikoMSxuZXh0KX0pO1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjUpKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBoYXMgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSlcblx0ICAsIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KVxuXHQgICwgVEFHICA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCd0b1N0cmluZ1RhZycpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIHRhZywgc3RhdCl7XG5cdCAgaWYoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSloaWRlKGl0LCBUQUcsIHRhZyk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgY3R4ICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KVxuXHQgICwgJGRlZiAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuXHQgICwgdG9PYmplY3QgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KVxuXHQgICwgY2FsbCAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKVxuXHQgICwgaXNBcnJheUl0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKVxuXHQgICwgdG9MZW5ndGggICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KVxuXHQgICwgZ2V0SXRlckZuICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcblx0JGRlZigkZGVmLlMgKyAkZGVmLkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygzOCkoZnVuY3Rpb24oaXRlcil7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG5cdCAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuXHQgIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLyosIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKi8pe1xuXHQgICAgdmFyIE8gICAgICAgPSB0b09iamVjdChhcnJheUxpa2UpXG5cdCAgICAgICwgQyAgICAgICA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXlcblx0ICAgICAgLCBtYXBmbiAgID0gYXJndW1lbnRzWzFdXG5cdCAgICAgICwgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWRcblx0ICAgICAgLCBpbmRleCAgID0gMFxuXHQgICAgICAsIGl0ZXJGbiAgPSBnZXRJdGVyRm4oTylcblx0ICAgICAgLCBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG5cdCAgICBpZihtYXBwaW5nKW1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuXHQgICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG5cdCAgICBpZihpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSl7XG5cdCAgICAgIGZvcihpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQzsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKXtcblx0ICAgICAgICByZXN1bHRbaW5kZXhdID0gbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcblx0ICAgICAgZm9yKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKXtcblx0ICAgICAgICByZXN1bHRbaW5kZXhdID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuXHQgICAgcmV0dXJuIHJlc3VsdDtcblx0ICB9XG5cdH0pO1xuXG5cbi8qKiovIH0sXG4vKiAyNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5cdHZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgdGhhdCwgbGVuZ3RoKXtcblx0ICBhRnVuY3Rpb24oZm4pO1xuXHQgIGlmKHRoYXQgPT09IHVuZGVmaW5lZClyZXR1cm4gZm47XG5cdCAgc3dpdGNoKGxlbmd0aCl7XG5cdCAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbihhKXtcblx0ICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG5cdCAgICB9O1xuXHQgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24oYSwgYil7XG5cdCAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuXHQgICAgfTtcblx0ICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKGEsIGIsIGMpe1xuXHQgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcblx0ICAgIH07XG5cdCAgfVxuXHQgIHJldHVybiBmdW5jdGlvbigvKiAuLi5hcmdzICovKXtcblx0ICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuXHQgIH07XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcblx0ICByZXR1cm4gaXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxuXHR2YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcblx0dmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcyl7XG5cdCAgdHJ5IHtcblx0ICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG5cdCAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcblx0ICB9IGNhdGNoKGUpe1xuXHQgICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcblx0ICAgIGlmKHJldCAhPT0gdW5kZWZpbmVkKWFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG5cdCAgICB0aHJvdyBlO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDMxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgaWYoIWlzT2JqZWN0KGl0KSl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG5cdCAgcmV0dXJuIGl0O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxuXHR2YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMylcblx0ICAsIElURVJBVE9SICA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdpdGVyYXRvcicpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gKEl0ZXJhdG9ycy5BcnJheSB8fCBBcnJheS5wcm90b3R5cGVbSVRFUkFUT1JdKSA9PT0gaXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gNy4xLjE1IFRvTGVuZ3RoXG5cdHZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG5cdCAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblx0fTtcblxuLyoqKi8gfSxcbi8qIDM1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgY2xhc3NvZiAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNilcblx0ICAsIElURVJBVE9SICA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdpdGVyYXRvcicpXG5cdCAgLCBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uKGl0KXtcblx0ICBpZihpdCAhPSB1bmRlZmluZWQpcmV0dXJuIGl0W0lURVJBVE9SXSB8fCBpdFsnQEBpdGVyYXRvciddIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcblx0dmFyIGNvZiA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpXG5cdCAgLCBUQUcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgndG9TdHJpbmdUYWcnKVxuXHQgIC8vIEVTMyB3cm9uZyBoZXJlXG5cdCAgLCBBUkcgPSBjb2YoZnVuY3Rpb24oKXsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICB2YXIgTywgVCwgQjtcblx0ICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcblx0ICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuXHQgICAgOiB0eXBlb2YgKFQgPSAoTyA9IE9iamVjdChpdCkpW1RBR10pID09ICdzdHJpbmcnID8gVFxuXHQgICAgLy8gYnVpbHRpblRhZyBjYXNlXG5cdCAgICA6IEFSRyA/IGNvZihPKVxuXHQgICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuXHQgICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0dmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDM4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgU1lNQk9MX0lURVJBVE9SID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ2l0ZXJhdG9yJylcblx0ICAsIFNBRkVfQ0xPU0lORyAgICA9IGZhbHNlO1xuXHR0cnkge1xuXHQgIHZhciByaXRlciA9IFs3XVtTWU1CT0xfSVRFUkFUT1JdKCk7XG5cdCAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24oKXsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcblx0ICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbigpeyB0aHJvdyAyOyB9KTtcblx0fSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuXHQgIGlmKCFTQUZFX0NMT1NJTkcpcmV0dXJuIGZhbHNlO1xuXHQgIHZhciBzYWZlID0gZmFsc2U7XG5cdCAgdHJ5IHtcblx0ICAgIHZhciBhcnIgID0gWzddXG5cdCAgICAgICwgaXRlciA9IGFycltTWU1CT0xfSVRFUkFUT1JdKCk7XG5cdCAgICBpdGVyLm5leHQgPSBmdW5jdGlvbigpeyBzYWZlID0gdHJ1ZTsgfTtcblx0ICAgIGFycltTWU1CT0xfSVRFUkFUT1JdID0gZnVuY3Rpb24oKXsgcmV0dXJuIGl0ZXI7IH07XG5cdCAgICBleGVjKGFycik7XG5cdCAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuXHQgIHJldHVybiBzYWZlO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciBfZ2V0SXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9pc0l0ZXJhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSlbXCJkZWZhdWx0XCJdO1xuXG5cdGV4cG9ydHNbXCJkZWZhdWx0XCJdID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkge1xuXHQgICAgdmFyIF9hcnIgPSBbXTtcblx0ICAgIHZhciBfbiA9IHRydWU7XG5cdCAgICB2YXIgX2QgPSBmYWxzZTtcblx0ICAgIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuXHQgICAgdHJ5IHtcblx0ICAgICAgZm9yICh2YXIgX2kgPSBfZ2V0SXRlcmF0b3IoYXJyKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcblx0ICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG5cdCAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuXHQgICAgICB9XG5cdCAgICB9IGNhdGNoIChlcnIpIHtcblx0ICAgICAgX2QgPSB0cnVlO1xuXHQgICAgICBfZSA9IGVycjtcblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJldHVybiBfYXJyO1xuXHQgIH1cblxuXHQgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7XG5cdCAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG5cdCAgICAgIHJldHVybiBhcnI7XG5cdCAgICB9IGVsc2UgaWYgKF9pc0l0ZXJhYmxlKE9iamVjdChhcnIpKSkge1xuXHQgICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG5cdCAgICB9XG5cdCAgfTtcblx0fSkoKTtcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG4vKioqLyB9LFxuLyogNDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg0MSksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDQxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcblxuLyoqKi8gfSxcbi8qIDQyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcblx0dmFyIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuXHRJdGVyYXRvcnMuTm9kZUxpc3QgPSBJdGVyYXRvcnMuSFRNTENvbGxlY3Rpb24gPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8qKiovIH0sXG4vKiA0MyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgc2V0VW5zY29wZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpXG5cdCAgLCBzdGVwICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSlcblx0ICAsIEl0ZXJhdG9ycyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKVxuXHQgICwgdG9JT2JqZWN0ICA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xuXG5cdC8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcblx0Ly8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcblx0Ly8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuXHQvLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg4KShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuXHQgIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcblx0ICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuXHQgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG5cdC8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxuXHR9LCBmdW5jdGlvbigpe1xuXHQgIHZhciBPICAgICA9IHRoaXMuX3Rcblx0ICAgICwga2luZCAgPSB0aGlzLl9rXG5cdCAgICAsIGluZGV4ID0gdGhpcy5faSsrO1xuXHQgIGlmKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKXtcblx0ICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG5cdCAgICByZXR1cm4gc3RlcCgxKTtcblx0ICB9XG5cdCAgaWYoa2luZCA9PSAna2V5cycgIClyZXR1cm4gc3RlcCgwLCBpbmRleCk7XG5cdCAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG5cdCAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xuXHR9LCAndmFsdWVzJyk7XG5cblx0Ly8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuXHRJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5cdHNldFVuc2NvcGUoJ2tleXMnKTtcblx0c2V0VW5zY29wZSgndmFsdWVzJyk7XG5cdHNldFVuc2NvcGUoJ2VudHJpZXMnKTtcblxuLyoqKi8gfSxcbi8qIDQ0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH07XG5cbi8qKiovIH0sXG4vKiA0NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkb25lLCB2YWx1ZSl7XG5cdCAgcmV0dXJuIHt2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZX07XG5cdH07XG5cbi8qKiovIH0sXG4vKiA0NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXHJcblx0dmFyIElPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KVxyXG5cdCAgLCBkZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcclxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcclxuXHQgIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcclxuXHR9O1xuXG4vKioqLyB9LFxuLyogNDcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGluZGV4ZWQgb2JqZWN0LCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3Ncblx0dmFyIGNvZiA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IDAgaW4gT2JqZWN0KCd6JykgPyBPYmplY3QgOiBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNDggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpXG5cdCAgLCBnZXQgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLmdldEl0ZXJhdG9yID0gZnVuY3Rpb24oaXQpe1xuXHQgIHZhciBpdGVyRm4gPSBnZXQoaXQpO1xuXHQgIGlmKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcblx0ICByZXR1cm4gYW5PYmplY3QoaXRlckZuLmNhbGwoaXQpKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDQ5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oNTApLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA1MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XG5cbi8qKiovIH0sXG4vKiA1MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGNsYXNzb2YgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpXG5cdCAgLCBJVEVSQVRPUiAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnaXRlcmF0b3InKVxuXHQgICwgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uKGl0KXtcblx0ICB2YXIgTyA9IE9iamVjdChpdCk7XG5cdCAgcmV0dXJuIElURVJBVE9SIGluIE8gfHwgJ0BAaXRlcmF0b3InIGluIE8gfHwgSXRlcmF0b3JzLmhhc093blByb3BlcnR5KGNsYXNzb2YoTykpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg1MyksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDUzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnaXRlcmF0b3InKTtcblxuLyoqKi8gfSxcbi8qIDU0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7Ly8gVGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IG5lZWRzIHRvIGJlXG5cdC8vIGtlcHQgaWRlbnRpY2FsIHRvIHRoZSB3YXkgaXQgaXMgb2J0YWluZWQgaW4gcnVudGltZS5qc1xuXHR2YXIgZyA9XG5cdCAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG5cdCAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG5cdCAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpcztcblxuXHQvLyBVc2UgYGdldE93blByb3BlcnR5TmFtZXNgIGJlY2F1c2Ugbm90IGFsbCBicm93c2VycyBzdXBwb3J0IGNhbGxpbmdcblx0Ly8gYGhhc093blByb3BlcnR5YCBvbiB0aGUgZ2xvYmFsIGBzZWxmYCBvYmplY3QgaW4gYSB3b3JrZXIuIFNlZSAjMTgzLlxuXHR2YXIgaGFkUnVudGltZSA9IGcucmVnZW5lcmF0b3JSdW50aW1lICYmXG5cdCAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZykuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKSA+PSAwO1xuXG5cdC8vIFNhdmUgdGhlIG9sZCByZWdlbmVyYXRvclJ1bnRpbWUgaW4gY2FzZSBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBsYXRlci5cblx0dmFyIG9sZFJ1bnRpbWUgPSBoYWRSdW50aW1lICYmIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuXG5cdC8vIEZvcmNlIHJlZXZhbHV0YXRpb24gb2YgcnVudGltZS5qcy5cblx0Zy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KTtcblxuXHRpZiAoaGFkUnVudGltZSkge1xuXHQgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJ1bnRpbWUuXG5cdCAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBvbGRSdW50aW1lO1xuXHR9IGVsc2Uge1xuXHQgIC8vIFJlbW92ZSB0aGUgZ2xvYmFsIHByb3BlcnR5IGFkZGVkIGJ5IHJ1bnRpbWUuanMuXG5cdCAgdHJ5IHtcblx0ICAgIGRlbGV0ZSBnLnJlZ2VuZXJhdG9yUnVudGltZTtcblx0ICB9IGNhdGNoKGUpIHtcblx0ICAgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXHQgIH1cblx0fVxuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogbW9kdWxlLmV4cG9ydHMsIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSgpKSkpXG5cbi8qKiovIH0sXG4vKiA1NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0LyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCwgcHJvY2Vzcykgey8qKlxuXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG5cdCAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cdCAqXG5cdCAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuXHQgKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG5cdCAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuXHQgKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG5cdCAqL1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciBfU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NylbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfU3ltYm9sJGl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MilbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfT2JqZWN0JGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX1Byb21pc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KVtcImRlZmF1bHRcIl07XG5cblx0IShmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdCAgXCJ1c2Ugc3RyaWN0XCI7XG5cblx0ICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0ICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cblx0ICB2YXIgaXRlcmF0b3JTeW1ib2wgPSB0eXBlb2YgX1N5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF9TeW1ib2wkaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG5cblx0ICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuXHQgIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcblx0ICBpZiAocnVudGltZSkge1xuXHQgICAgaWYgKGluTW9kdWxlKSB7XG5cdCAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcblx0ICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cblx0ICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXHQgICAgfVxuXHQgICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuXHQgICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuXHQgICAgcmV0dXJuO1xuXHQgIH1cblxuXHQgIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuXHQgIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cblx0ICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuXHQgIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcblx0ICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG5cdCAgICB2YXIgZ2VuZXJhdG9yID0gX09iamVjdCRjcmVhdGUoKG91dGVyRm4gfHwgR2VuZXJhdG9yKS5wcm90b3R5cGUpO1xuXG5cdCAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiB8fCBudWxsLCBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSkpO1xuXG5cdCAgICByZXR1cm4gZ2VuZXJhdG9yO1xuXHQgIH1cblx0ICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG5cdCAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG5cdCAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG5cdCAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG5cdCAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuXHQgIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcblx0ICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG5cdCAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcblx0ICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcblx0ICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG5cdCAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuXHQgIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuXHQgICAgdHJ5IHtcblx0ICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuXHQgICAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcblx0ICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcblx0ICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuXHQgIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cblx0ICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG5cdCAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuXHQgIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cblx0ICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcblx0ICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3Jcblx0ICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuXHQgIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG5cdCAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cblx0ICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG5cdCAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG5cdCAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZTtcblx0ICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuXHQgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG5cdCAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cblx0ICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuXHQgIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG5cdCAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuXHQgICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcblx0ICAgICAgfTtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcblx0ICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3Rvcjtcblx0ICAgIHJldHVybiBjdG9yID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcblx0ICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cblx0ICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cblx0ICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA6IGZhbHNlO1xuXHQgIH07XG5cblx0ICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG5cdCAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG5cdCAgICBnZW5GdW4ucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoR3ApO1xuXHQgICAgcmV0dXJuIGdlbkZ1bjtcblx0ICB9O1xuXG5cdCAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG5cdCAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3Rcblx0ICAvLyBgdmFsdWUgaW5zdGFuY2VvZiBBd2FpdEFyZ3VtZW50YCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcblx0ICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLiBTb21lIG1heSBjb25zaWRlciB0aGUgbmFtZSBvZiB0aGlzIG1ldGhvZCB0b29cblx0ICAvLyBjdXRlc3ksIGJ1dCB0aGV5IGFyZSBjdXJtdWRnZW9ucy5cblx0ICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgcmV0dXJuIG5ldyBBd2FpdEFyZ3VtZW50KGFyZyk7XG5cdCAgfTtcblxuXHQgIGZ1bmN0aW9uIEF3YWl0QXJndW1lbnQoYXJnKSB7XG5cdCAgICB0aGlzLmFyZyA9IGFyZztcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuXHQgICAgLy8gVGhpcyBpbnZva2UgZnVuY3Rpb24gaXMgd3JpdHRlbiBpbiBhIHN0eWxlIHRoYXQgYXNzdW1lcyBzb21lXG5cdCAgICAvLyBjYWxsaW5nIGZ1bmN0aW9uIChvciBQcm9taXNlKSB3aWxsIGhhbmRsZSBleGNlcHRpb25zLlxuXHQgICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG5cdCAgICAgIHZhciByZXN1bHQgPSBnZW5lcmF0b3JbbWV0aG9kXShhcmcpO1xuXHQgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG5cdCAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEF3YWl0QXJndW1lbnQgPyBfUHJvbWlzZS5yZXNvbHZlKHZhbHVlLmFyZykudGhlbihpbnZva2VOZXh0LCBpbnZva2VUaHJvdykgOiBfUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcblx0ICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuXHQgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuXHQgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG5cdCAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcblx0ICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuXHQgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2Vcblx0ICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG5cdCAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG5cdCAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG5cdCAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcblx0ICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcblx0ICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG5cdCAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuXHQgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuXHQgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuXHQgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcblx0ICAgICAgICByZXR1cm4gcmVzdWx0O1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MuZG9tYWluKSB7XG5cdCAgICAgIGludm9rZSA9IHByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcblx0ICAgIH1cblxuXHQgICAgdmFyIGludm9rZU5leHQgPSBpbnZva2UuYmluZChnZW5lcmF0b3IsIFwibmV4dFwiKTtcblx0ICAgIHZhciBpbnZva2VUaHJvdyA9IGludm9rZS5iaW5kKGdlbmVyYXRvciwgXCJ0aHJvd1wiKTtcblx0ICAgIHZhciBpbnZva2VSZXR1cm4gPSBpbnZva2UuYmluZChnZW5lcmF0b3IsIFwicmV0dXJuXCIpO1xuXHQgICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuXHQgICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuXHQgICAgICB2YXIgZW5xdWV1ZVJlc3VsdCA9XG5cdCAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcblx0ICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG5cdCAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcblx0ICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cblx0ICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG5cdCAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG5cdCAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcblx0ICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcblx0ICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcblx0ICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcblx0ICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcblx0ICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuXHQgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIGludm9rZShtZXRob2QsIGFyZyk7XG5cdCAgICAgIH0pIDogbmV3IF9Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdCAgICAgICAgcmVzb2x2ZShpbnZva2UobWV0aG9kLCBhcmcpKTtcblx0ICAgICAgfSk7XG5cblx0ICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZW5xdWV1ZVJlc3VsdCBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieVxuXHQgICAgICAvLyBsYXRlciBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG5cdCAgICAgIHByZXZpb3VzUHJvbWlzZSA9IGVucXVldWVSZXN1bHRbXCJjYXRjaFwiXShmdW5jdGlvbiAoaWdub3JlZCkge30pO1xuXG5cdCAgICAgIHJldHVybiBlbnF1ZXVlUmVzdWx0O1xuXHQgICAgfVxuXG5cdCAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuXHQgICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG5cdCAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuXHQgIH1cblxuXHQgIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG5cblx0ICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG5cdCAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG5cdCAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG5cdCAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuXHQgICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSk7XG5cblx0ICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbikgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cblx0ICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG5cdCAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuXHQgICAgfSk7XG5cdCAgfTtcblxuXHQgIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuXHQgICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuXHQgICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuXHQgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcblx0ICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICAgIHRocm93IGFyZztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuXHQgICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcblx0ICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuXHQgICAgICB9XG5cblx0ICAgICAgd2hpbGUgKHRydWUpIHtcblx0ICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuXHQgICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuXHQgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIiB8fCBtZXRob2QgPT09IFwidGhyb3dcIiAmJiBkZWxlZ2F0ZS5pdGVyYXRvclttZXRob2RdID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgLy8gQSByZXR1cm4gb3IgdGhyb3cgKHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyB0aHJvd1xuXHQgICAgICAgICAgICAvLyBtZXRob2QpIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cblx0ICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuXHQgICAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG5cdCAgICAgICAgICAgIHZhciByZXR1cm5NZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXTtcblx0ICAgICAgICAgICAgaWYgKHJldHVybk1ldGhvZCkge1xuXHQgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChyZXR1cm5NZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBhcmcpO1xuXHQgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmV0dXJuIG1ldGhvZCB0aHJldyBhbiBleGNlcHRpb24sIGxldCB0aGF0XG5cdCAgICAgICAgICAgICAgICAvLyBleGNlcHRpb24gcHJldmFpbCBvdmVyIHRoZSBvcmlnaW5hbCByZXR1cm4gb3IgdGhyb3cuXG5cdCAgICAgICAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG5cdCAgICAgICAgICAgICAgICBhcmcgPSByZWNvcmQuYXJnO1xuXHQgICAgICAgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuXHQgICAgICAgICAgICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIG91dGVyIHJldHVybiwgbm93IHRoYXQgdGhlIGRlbGVnYXRlXG5cdCAgICAgICAgICAgICAgLy8gaXRlcmF0b3IgaGFzIGJlZW4gdGVybWluYXRlZC5cblx0ICAgICAgICAgICAgICBjb250aW51ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kXSwgZGVsZWdhdGUuaXRlcmF0b3IsIGFyZyk7XG5cblx0ICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG5cdCAgICAgICAgICAgIC8vIExpa2UgcmV0dXJuaW5nIGdlbmVyYXRvci50aHJvdyh1bmNhdWdodCksIGJ1dCB3aXRob3V0IHRoZVxuXHQgICAgICAgICAgICAvLyBvdmVyaGVhZCBvZiBhbiBleHRyYSBmdW5jdGlvbiBjYWxsLlxuXHQgICAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG5cdCAgICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG5cdCAgICAgICAgICAgIGNvbnRpbnVlO1xuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAvLyBEZWxlZ2F0ZSBnZW5lcmF0b3IgcmFuIGFuZCBoYW5kbGVkIGl0cyBvd24gZXhjZXB0aW9ucyBzb1xuXHQgICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBtZXRob2Qgd2FzLCB3ZSBjb250aW51ZSBhcyBpZiBpdCBpc1xuXHQgICAgICAgICAgLy8gXCJuZXh0XCIgd2l0aCBhbiB1bmRlZmluZWQgYXJnLlxuXHQgICAgICAgICAgbWV0aG9kID0gXCJuZXh0XCI7XG5cdCAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG5cblx0ICAgICAgICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblx0ICAgICAgICAgIGlmIChpbmZvLmRvbmUpIHtcblx0ICAgICAgICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cdCAgICAgICAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cdCAgICAgICAgICAgIHJldHVybiBpbmZvO1xuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAobWV0aG9kID09PSBcIm5leHRcIikge1xuXHQgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuc2VudCA9IGFyZztcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuc2VudCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcblx0ICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcblx0ICAgICAgICAgICAgdGhyb3cgYXJnO1xuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBpZiAoY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihhcmcpKSB7XG5cdCAgICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG5cdCAgICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG5cdCAgICAgICAgICAgIG1ldGhvZCA9IFwibmV4dFwiO1xuXHQgICAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIpIHtcblx0ICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGFyZyk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuXHQgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblx0ICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcblx0ICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cblx0ICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cblx0ICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lID8gR2VuU3RhdGVDb21wbGV0ZWQgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG5cdCAgICAgICAgICB2YXIgaW5mbyA9IHtcblx0ICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG5cdCAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuXHQgICAgICAgICAgfTtcblxuXHQgICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcblx0ICAgICAgICAgICAgaWYgKGNvbnRleHQuZGVsZWdhdGUgJiYgbWV0aG9kID09PSBcIm5leHRcIikge1xuXHQgICAgICAgICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG5cdCAgICAgICAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuXHQgICAgICAgICAgICAgIGFyZyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGluZm87XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuXHQgICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuXHQgICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihhcmcpIGNhbGwgYWJvdmUuXG5cdCAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG5cdCAgICAgICAgICBhcmcgPSByZWNvcmQuYXJnO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfTtcblx0ICB9XG5cblx0ICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuXHQgIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cblx0ICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG5cdCAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgcmV0dXJuIHRoaXM7XG5cdCAgfTtcblxuXHQgIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG5cdCAgfTtcblxuXHQgIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG5cdCAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG5cdCAgICBpZiAoMSBpbiBsb2NzKSB7XG5cdCAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcblx0ICAgIH1cblxuXHQgICAgaWYgKDIgaW4gbG9jcykge1xuXHQgICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcblx0ICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuXHQgICAgfVxuXG5cdCAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuXHQgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG5cdCAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG5cdCAgICBkZWxldGUgcmVjb3JkLmFyZztcblx0ICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuXHQgICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG5cdCAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG5cdCAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG5cdCAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuXHQgICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuXHQgICAgdGhpcy5yZXNldCh0cnVlKTtcblx0ICB9XG5cblx0ICBydW50aW1lLmtleXMgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgICB2YXIga2V5cyA9IFtdO1xuXHQgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuXHQgICAgICBrZXlzLnB1c2goa2V5KTtcblx0ICAgIH1cblx0ICAgIGtleXMucmV2ZXJzZSgpO1xuXG5cdCAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuXHQgICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cblx0ICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuXHQgICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcblx0ICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcblx0ICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuXHQgICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcblx0ICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuXHQgICAgICAgICAgcmV0dXJuIG5leHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG5cdCAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG5cdCAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuXHQgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXHQgICAgICByZXR1cm4gbmV4dDtcblx0ICAgIH07XG5cdCAgfTtcblxuXHQgIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuXHQgICAgaWYgKGl0ZXJhYmxlKSB7XG5cdCAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcblx0ICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG5cdCAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICByZXR1cm4gaXRlcmFibGU7XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcblx0ICAgICAgICB2YXIgaSA9IC0xLFxuXHQgICAgICAgICAgICBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcblx0ICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuXHQgICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcblx0ICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuXHQgICAgICAgICAgcmV0dXJuIG5leHQ7XG5cdCAgICAgICAgfTtcblxuXHQgICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cblx0ICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcblx0ICB9XG5cdCAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cblx0ICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuXHQgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuXHQgIH1cblxuXHQgIENvbnRleHQucHJvdG90eXBlID0ge1xuXHQgICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cblx0ICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG5cdCAgICAgIHRoaXMucHJldiA9IDA7XG5cdCAgICAgIHRoaXMubmV4dCA9IDA7XG5cdCAgICAgIHRoaXMuc2VudCA9IHVuZGVmaW5lZDtcblx0ICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG5cdCAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG5cdCAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG5cdCAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuXHQgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuXHQgICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcblx0ICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuXHQgICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcblx0ICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuXHQgICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuXHQgICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuXHQgICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcblx0ICAgICAgfVxuXG5cdCAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG5cdCAgICB9LFxuXG5cdCAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG5cdCAgICAgIGlmICh0aGlzLmRvbmUpIHtcblx0ICAgICAgICB0aHJvdyBleGNlcHRpb247XG5cdCAgICAgIH1cblxuXHQgICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG5cdCAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuXHQgICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuXHQgICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG5cdCAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXHQgICAgICAgIHJldHVybiAhIWNhdWdodDtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0ICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG5cdCAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cblx0ICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuXHQgICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcblx0ICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuXHQgICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cblx0ICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcblx0ICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuXHQgICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG5cdCAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBhYnJ1cHQ6IGZ1bmN0aW9uIGFicnVwdCh0eXBlLCBhcmcpIHtcblx0ICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHQgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblx0ICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJiBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcblx0ICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIGlmIChmaW5hbGx5RW50cnkgJiYgKHR5cGUgPT09IFwiYnJlYWtcIiB8fCB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuXHQgICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcblx0ICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG5cdCAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcblx0ICAgICAgfVxuXG5cdCAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuXHQgICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG5cdCAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cblx0ICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuXHQgICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuY29tcGxldGUocmVjb3JkKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuXHQgICAgfSxcblxuXHQgICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcblx0ICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHwgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuXHQgICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG5cdCAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcblx0ICAgICAgICB0aGlzLnJ2YWwgPSByZWNvcmQuYXJnO1xuXHQgICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG5cdCAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcblx0ICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuXHQgICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdCAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuXHQgICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG5cdCAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcblx0ICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuXHQgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0cnlMb2MpIHtcblx0ICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHQgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblx0ICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcblx0ICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXHQgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG5cdCAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIHRocm93bjtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cblx0ICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG5cdCAgICB9LFxuXG5cdCAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG5cdCAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG5cdCAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG5cdCAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcblx0ICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG5cdCAgICAgIH07XG5cblx0ICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG5cdCAgICB9XG5cdCAgfTtcblx0fSkoXG5cdC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcblx0Ly8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG5cdC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG5cdHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDogdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdW5kZWZpbmVkKTtcblx0LyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIChmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0oKSksIF9fd2VicGFja19yZXF1aXJlX18oNTYpKSlcblxuLyoqKi8gfSxcbi8qIDU2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxuXHR2YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cdHZhciBxdWV1ZSA9IFtdO1xuXHR2YXIgZHJhaW5pbmcgPSBmYWxzZTtcblx0dmFyIGN1cnJlbnRRdWV1ZTtcblx0dmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuXHRmdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG5cdCAgICBkcmFpbmluZyA9IGZhbHNlO1xuXHQgICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcblx0ICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG5cdCAgICB9XG5cdCAgICBpZiAocXVldWUubGVuZ3RoKSB7XG5cdCAgICAgICAgZHJhaW5RdWV1ZSgpO1xuXHQgICAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcblx0ICAgIGlmIChkcmFpbmluZykge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuXHQgICAgZHJhaW5pbmcgPSB0cnVlO1xuXG5cdCAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuXHQgICAgd2hpbGUobGVuKSB7XG5cdCAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG5cdCAgICAgICAgcXVldWUgPSBbXTtcblx0ICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG5cdCAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcblx0ICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG5cdCAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuXHQgICAgfVxuXHQgICAgY3VycmVudFF1ZXVlID0gbnVsbDtcblx0ICAgIGRyYWluaW5nID0gZmFsc2U7XG5cdCAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdH1cblxuXHRwcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuXHQgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuXHQgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcblx0ICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG5cdCAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcblx0ICAgIH1cblx0fTtcblxuXHQvLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5cdGZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuXHQgICAgdGhpcy5mdW4gPSBmdW47XG5cdCAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG5cdH1cblx0SXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG5cdH07XG5cdHByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5cdHByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5cdHByb2Nlc3MuZW52ID0ge307XG5cdHByb2Nlc3MuYXJndiA9IFtdO1xuXHRwcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcblx0cHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5cdGZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5cdHByb2Nlc3Mub24gPSBub29wO1xuXHRwcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcblx0cHJvY2Vzcy5vbmNlID0gbm9vcDtcblx0cHJvY2Vzcy5vZmYgPSBub29wO1xuXHRwcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcblx0cHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xuXHRwcm9jZXNzLmVtaXQgPSBub29wO1xuXG5cdHByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG5cdH07XG5cblx0cHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcblx0cHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcblx0ICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG5cdH07XG5cdHByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuLyoqKi8gfSxcbi8qIDU3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oNTgpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA1OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg1OSk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikuU3ltYm9sO1xuXG4vKioqLyB9LFxuLyogNTkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0Ly8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxuXHR2YXIgJCAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgZ2xvYmFsICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuXHQgICwgaGFzICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KVxuXHQgICwgU1VQUE9SVF9ERVNDICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KVxuXHQgICwgJGRlZiAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuXHQgICwgJHJlZGVmICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKVxuXHQgICwgJGZhaWxzICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KVxuXHQgICwgc2hhcmVkICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKVxuXHQgICwgc2V0VGFnICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KVxuXHQgICwgdWlkICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKVxuXHQgICwgd2tzICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKVxuXHQgICwga2V5T2YgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKVxuXHQgICwgJG5hbWVzICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKVxuXHQgICwgZW51bUtleXMgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyKVxuXHQgICwgaXNPYmplY3QgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKVxuXHQgICwgYW5PYmplY3QgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKVxuXHQgICwgdG9JT2JqZWN0ICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KVxuXHQgICwgY3JlYXRlRGVzYyAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KVxuXHQgICwgZ2V0RGVzYyAgICAgICAgPSAkLmdldERlc2Ncblx0ICAsIHNldERlc2MgICAgICAgID0gJC5zZXREZXNjXG5cdCAgLCBfY3JlYXRlICAgICAgICA9ICQuY3JlYXRlXG5cdCAgLCBnZXROYW1lcyAgICAgICA9ICRuYW1lcy5nZXRcblx0ICAsICRTeW1ib2wgICAgICAgID0gZ2xvYmFsLlN5bWJvbFxuXHQgICwgc2V0dGVyICAgICAgICAgPSBmYWxzZVxuXHQgICwgSElEREVOICAgICAgICAgPSB3a3MoJ19oaWRkZW4nKVxuXHQgICwgaXNFbnVtICAgICAgICAgPSAkLmlzRW51bVxuXHQgICwgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpXG5cdCAgLCBBbGxTeW1ib2xzICAgICA9IHNoYXJlZCgnc3ltYm9scycpXG5cdCAgLCB1c2VOYXRpdmUgICAgICA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbidcblx0ICAsIE9iamVjdFByb3RvICAgID0gT2JqZWN0LnByb3RvdHlwZTtcblxuXHQvLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcblx0dmFyIHNldFN5bWJvbERlc2MgPSBTVVBQT1JUX0RFU0MgJiYgJGZhaWxzKGZ1bmN0aW9uKCl7XG5cdCAgcmV0dXJuIF9jcmVhdGUoc2V0RGVzYyh7fSwgJ2EnLCB7XG5cdCAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiBzZXREZXNjKHRoaXMsICdhJywge3ZhbHVlOiA3fSkuYTsgfVxuXHQgIH0pKS5hICE9IDc7XG5cdH0pID8gZnVuY3Rpb24oaXQsIGtleSwgRCl7XG5cdCAgdmFyIHByb3RvRGVzYyA9IGdldERlc2MoT2JqZWN0UHJvdG8sIGtleSk7XG5cdCAgaWYocHJvdG9EZXNjKWRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuXHQgIHNldERlc2MoaXQsIGtleSwgRCk7XG5cdCAgaWYocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bylzZXREZXNjKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG5cdH0gOiBzZXREZXNjO1xuXG5cdHZhciB3cmFwID0gZnVuY3Rpb24odGFnKXtcblx0ICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sLnByb3RvdHlwZSk7XG5cdCAgc3ltLl9rID0gdGFnO1xuXHQgIFNVUFBPUlRfREVTQyAmJiBzZXR0ZXIgJiYgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7XG5cdCAgICBjb25maWd1cmFibGU6IHRydWUsXG5cdCAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcblx0ICAgICAgaWYoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSl0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuXHQgICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuXHQgICAgfVxuXHQgIH0pO1xuXHQgIHJldHVybiBzeW07XG5cdH07XG5cblx0dmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpe1xuXHQgIGlmKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkpe1xuXHQgICAgaWYoIUQuZW51bWVyYWJsZSl7XG5cdCAgICAgIGlmKCFoYXMoaXQsIEhJRERFTikpc2V0RGVzYyhpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG5cdCAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBpZihoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKWl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuXHQgICAgICBEID0gX2NyZWF0ZShELCB7ZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSl9KTtcblx0ICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG5cdCAgfSByZXR1cm4gc2V0RGVzYyhpdCwga2V5LCBEKTtcblx0fTtcblx0dmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCl7XG5cdCAgYW5PYmplY3QoaXQpO1xuXHQgIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSlcblx0ICAgICwgaSAgICA9IDBcblx0ICAgICwgbCA9IGtleXMubGVuZ3RoXG5cdCAgICAsIGtleTtcblx0ICB3aGlsZShsID4gaSkkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcblx0ICByZXR1cm4gaXQ7XG5cdH07XG5cdHZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKXtcblx0ICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG5cdH07XG5cdHZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpe1xuXHQgIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5KTtcblx0ICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldXG5cdCAgICA/IEUgOiB0cnVlO1xuXHR9O1xuXHR2YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcblx0ICB2YXIgRCA9IGdldERlc2MoaXQgPSB0b0lPYmplY3QoaXQpLCBrZXkpO1xuXHQgIGlmKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSlELmVudW1lcmFibGUgPSB0cnVlO1xuXHQgIHJldHVybiBEO1xuXHR9O1xuXHR2YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KXtcblx0ICB2YXIgbmFtZXMgID0gZ2V0TmFtZXModG9JT2JqZWN0KGl0KSlcblx0ICAgICwgcmVzdWx0ID0gW11cblx0ICAgICwgaSAgICAgID0gMFxuXHQgICAgLCBrZXk7XG5cdCAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZighaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4pcmVzdWx0LnB1c2goa2V5KTtcblx0ICByZXR1cm4gcmVzdWx0O1xuXHR9O1xuXHR2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCl7XG5cdCAgdmFyIG5hbWVzICA9IGdldE5hbWVzKHRvSU9iamVjdChpdCkpXG5cdCAgICAsIHJlc3VsdCA9IFtdXG5cdCAgICAsIGkgICAgICA9IDBcblx0ICAgICwga2V5O1xuXHQgIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpaWYoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pKXJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG5cdCAgcmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHQvLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcblx0aWYoIXVzZU5hdGl2ZSl7XG5cdCAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpe1xuXHQgICAgaWYodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcblx0ICAgIHJldHVybiB3cmFwKHVpZChhcmd1bWVudHNbMF0pKTtcblx0ICB9O1xuXHQgICRyZWRlZigkU3ltYm9sLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKXtcblx0ICAgIHJldHVybiB0aGlzLl9rO1xuXHQgIH0pO1xuXG5cdCAgJC5jcmVhdGUgICAgID0gJGNyZWF0ZTtcblx0ICAkLmlzRW51bSAgICAgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG5cdCAgJC5nZXREZXNjICAgID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblx0ICAkLnNldERlc2MgICAgPSAkZGVmaW5lUHJvcGVydHk7XG5cdCAgJC5zZXREZXNjcyAgID0gJGRlZmluZVByb3BlcnRpZXM7XG5cdCAgJC5nZXROYW1lcyAgID0gJG5hbWVzLmdldCA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuXHQgICQuZ2V0U3ltYm9scyA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cblx0ICBpZihTVVBQT1JUX0RFU0MgJiYgIV9fd2VicGFja19yZXF1aXJlX18oOSkpe1xuXHQgICAgJHJlZGVmKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuXHQgIH1cblx0fVxuXG5cdC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG5cdGlmKCF1c2VOYXRpdmUgfHwgJGZhaWxzKGZ1bmN0aW9uKCl7XG5cdCAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFskU3ltYm9sKCldKSAhPSAnW251bGxdJztcblx0fSkpJHJlZGVmKCRTeW1ib2wucHJvdG90eXBlLCAndG9KU09OJywgZnVuY3Rpb24gdG9KU09OKCl7XG5cdCAgaWYodXNlTmF0aXZlICYmIGlzT2JqZWN0KHRoaXMpKXJldHVybiB0aGlzO1xuXHR9KTtcblxuXHR2YXIgc3ltYm9sU3RhdGljcyA9IHtcblx0ICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcblx0ICAnZm9yJzogZnVuY3Rpb24oa2V5KXtcblx0ICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcblx0ICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG5cdCAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcblx0ICB9LFxuXHQgIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuXHQgIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKGtleSl7XG5cdCAgICByZXR1cm4ga2V5T2YoU3ltYm9sUmVnaXN0cnksIGtleSk7XG5cdCAgfSxcblx0ICB1c2VTZXR0ZXI6IGZ1bmN0aW9uKCl7IHNldHRlciA9IHRydWU7IH0sXG5cdCAgdXNlU2ltcGxlOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSBmYWxzZTsgfVxuXHR9O1xuXHQvLyAxOS40LjIuMiBTeW1ib2wuaGFzSW5zdGFuY2Vcblx0Ly8gMTkuNC4yLjMgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZVxuXHQvLyAxOS40LjIuNCBTeW1ib2wuaXRlcmF0b3Jcblx0Ly8gMTkuNC4yLjYgU3ltYm9sLm1hdGNoXG5cdC8vIDE5LjQuMi44IFN5bWJvbC5yZXBsYWNlXG5cdC8vIDE5LjQuMi45IFN5bWJvbC5zZWFyY2hcblx0Ly8gMTkuNC4yLjEwIFN5bWJvbC5zcGVjaWVzXG5cdC8vIDE5LjQuMi4xMSBTeW1ib2wuc3BsaXRcblx0Ly8gMTkuNC4yLjEyIFN5bWJvbC50b1ByaW1pdGl2ZVxuXHQvLyAxOS40LjIuMTMgU3ltYm9sLnRvU3RyaW5nVGFnXG5cdC8vIDE5LjQuMi4xNCBTeW1ib2wudW5zY29wYWJsZXNcblx0JC5lYWNoLmNhbGwoKFxuXHQgICAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCwnICtcblx0ICAgICdzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuXHQgICkuc3BsaXQoJywnKSwgZnVuY3Rpb24oaXQpe1xuXHQgICAgdmFyIHN5bSA9IHdrcyhpdCk7XG5cdCAgICBzeW1ib2xTdGF0aWNzW2l0XSA9IHVzZU5hdGl2ZSA/IHN5bSA6IHdyYXAoc3ltKTtcblx0ICB9XG5cdCk7XG5cblx0c2V0dGVyID0gdHJ1ZTtcblxuXHQkZGVmKCRkZWYuRyArICRkZWYuVywge1N5bWJvbDogJFN5bWJvbH0pO1xuXG5cdCRkZWYoJGRlZi5TLCAnU3ltYm9sJywgc3ltYm9sU3RhdGljcyk7XG5cblx0JGRlZigkZGVmLlMgKyAkZGVmLkYgKiAhdXNlTmF0aXZlLCAnT2JqZWN0Jywge1xuXHQgIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcblx0ICBjcmVhdGU6ICRjcmVhdGUsXG5cdCAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG5cdCAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcblx0ICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuXHQgIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuXHQgIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcblx0ICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdCAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcblx0ICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcblx0ICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG5cdCAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG5cdH0pO1xuXG5cdC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cblx0c2V0VGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcblx0Ly8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuXHRzZXRUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcblx0Ly8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cblx0c2V0VGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuXG4vKioqLyB9LFxuLyogNjAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciAkICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBlbCl7XG5cdCAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG5cdCAgICAsIGtleXMgICA9ICQuZ2V0S2V5cyhPKVxuXHQgICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuXHQgICAgLCBpbmRleCAgPSAwXG5cdCAgICAsIGtleTtcblx0ICB3aGlsZShsZW5ndGggPiBpbmRleClpZihPW2tleSA9IGtleXNbaW5kZXgrK11dID09PSBlbClyZXR1cm4ga2V5O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNjEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcblx0dmFyIHRvU3RyaW5nICA9IHt9LnRvU3RyaW5nXG5cdCAgLCB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KVxuXHQgICwgZ2V0TmFtZXMgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSkuZ2V0TmFtZXM7XG5cblx0dmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuXHQgID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG5cdHZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uKGl0KXtcblx0ICB0cnkge1xuXHQgICAgcmV0dXJuIGdldE5hbWVzKGl0KTtcblx0ICB9IGNhdGNoKGUpe1xuXHQgICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG5cdCAgfVxuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzLmdldCA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpe1xuXHQgIGlmKHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nKXJldHVybiBnZXRXaW5kb3dOYW1lcyhpdCk7XG5cdCAgcmV0dXJuIGdldE5hbWVzKHRvSU9iamVjdChpdCkpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNjIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG5cdHZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHZhciBrZXlzICAgICAgID0gJC5nZXRLZXlzKGl0KVxuXHQgICAgLCBnZXRTeW1ib2xzID0gJC5nZXRTeW1ib2xzO1xuXHQgIGlmKGdldFN5bWJvbHMpe1xuXHQgICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KVxuXHQgICAgICAsIGlzRW51bSAgPSAkLmlzRW51bVxuXHQgICAgICAsIGkgICAgICAgPSAwXG5cdCAgICAgICwga2V5O1xuXHQgICAgd2hpbGUoc3ltYm9scy5sZW5ndGggPiBpKWlmKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKWtleXMucHVzaChrZXkpO1xuXHQgIH1cblx0ICByZXR1cm4ga2V5cztcblx0fTtcblxuLyoqKi8gfSxcbi8qIDYzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oNjQpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA2NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCl7XG5cdCAgcmV0dXJuICQuY3JlYXRlKFAsIEQpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNjUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg2NiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDY2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLlByb21pc2U7XG5cbi8qKiovIH0sXG4vKiA2NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XG5cbi8qKiovIH0sXG4vKiA2OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgJCAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCBMSUJSQVJZICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KVxuXHQgICwgZ2xvYmFsICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXG5cdCAgLCBjdHggICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNylcblx0ICAsIGNsYXNzb2YgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KVxuXHQgICwgJGRlZiAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTApXG5cdCAgLCBpc09iamVjdCAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMilcblx0ICAsIGFuT2JqZWN0ICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKVxuXHQgICwgYUZ1bmN0aW9uICA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpXG5cdCAgLCBzdHJpY3ROZXcgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OSlcblx0ICAsIGZvck9mICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKVxuXHQgICwgc2V0UHJvdG8gICA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpLnNldFxuXHQgICwgc2FtZSAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzIpXG5cdCAgLCBzcGVjaWVzICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mylcblx0ICAsIFNQRUNJRVMgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnc3BlY2llcycpXG5cdCAgLCBSRUNPUkQgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMikoJ3JlY29yZCcpXG5cdCAgLCBhc2FwICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NClcblx0ICAsIFBST01JU0UgICAgPSAnUHJvbWlzZSdcblx0ICAsIHByb2Nlc3MgICAgPSBnbG9iYWwucHJvY2Vzc1xuXHQgICwgaXNOb2RlICAgICA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnXG5cdCAgLCBQICAgICAgICAgID0gZ2xvYmFsW1BST01JU0VdXG5cdCAgLCBXcmFwcGVyO1xuXG5cdHZhciB0ZXN0UmVzb2x2ZSA9IGZ1bmN0aW9uKHN1Yil7XG5cdCAgdmFyIHRlc3QgPSBuZXcgUChmdW5jdGlvbigpe30pO1xuXHQgIGlmKHN1Yil0ZXN0LmNvbnN0cnVjdG9yID0gT2JqZWN0O1xuXHQgIHJldHVybiBQLnJlc29sdmUodGVzdCkgPT09IHRlc3Q7XG5cdH07XG5cblx0dmFyIHVzZU5hdGl2ZSA9IGZ1bmN0aW9uKCl7XG5cdCAgdmFyIHdvcmtzID0gZmFsc2U7XG5cdCAgZnVuY3Rpb24gUDIoeCl7XG5cdCAgICB2YXIgc2VsZiA9IG5ldyBQKHgpO1xuXHQgICAgc2V0UHJvdG8oc2VsZiwgUDIucHJvdG90eXBlKTtcblx0ICAgIHJldHVybiBzZWxmO1xuXHQgIH1cblx0ICB0cnkge1xuXHQgICAgd29ya3MgPSBQICYmIFAucmVzb2x2ZSAmJiB0ZXN0UmVzb2x2ZSgpO1xuXHQgICAgc2V0UHJvdG8oUDIsIFApO1xuXHQgICAgUDIucHJvdG90eXBlID0gJC5jcmVhdGUoUC5wcm90b3R5cGUsIHtjb25zdHJ1Y3Rvcjoge3ZhbHVlOiBQMn19KTtcblx0ICAgIC8vIGFjdHVhbCBGaXJlZm94IGhhcyBicm9rZW4gc3ViY2xhc3Mgc3VwcG9ydCwgdGVzdCB0aGF0XG5cdCAgICBpZighKFAyLnJlc29sdmUoNSkudGhlbihmdW5jdGlvbigpe30pIGluc3RhbmNlb2YgUDIpKXtcblx0ICAgICAgd29ya3MgPSBmYWxzZTtcblx0ICAgIH1cblx0ICAgIC8vIGFjdHVhbCBWOCBidWcsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTYyXG5cdCAgICBpZih3b3JrcyAmJiBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSl7XG5cdCAgICAgIHZhciB0aGVuYWJsZVRoZW5Hb3R0ZW4gPSBmYWxzZTtcblx0ICAgICAgUC5yZXNvbHZlKCQuc2V0RGVzYyh7fSwgJ3RoZW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbigpeyB0aGVuYWJsZVRoZW5Hb3R0ZW4gPSB0cnVlOyB9XG5cdCAgICAgIH0pKTtcblx0ICAgICAgd29ya3MgPSB0aGVuYWJsZVRoZW5Hb3R0ZW47XG5cdCAgICB9XG5cdCAgfSBjYXRjaChlKXsgd29ya3MgPSBmYWxzZTsgfVxuXHQgIHJldHVybiB3b3Jrcztcblx0fSgpO1xuXG5cdC8vIGhlbHBlcnNcblx0dmFyIGlzUHJvbWlzZSA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gaXNPYmplY3QoaXQpICYmICh1c2VOYXRpdmUgPyBjbGFzc29mKGl0KSA9PSAnUHJvbWlzZScgOiBSRUNPUkQgaW4gaXQpO1xuXHR9O1xuXHR2YXIgc2FtZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24oYSwgYil7XG5cdCAgLy8gbGlicmFyeSB3cmFwcGVyIHNwZWNpYWwgY2FzZVxuXHQgIGlmKExJQlJBUlkgJiYgYSA9PT0gUCAmJiBiID09PSBXcmFwcGVyKXJldHVybiB0cnVlO1xuXHQgIHJldHVybiBzYW1lKGEsIGIpO1xuXHR9O1xuXHR2YXIgZ2V0Q29uc3RydWN0b3IgPSBmdW5jdGlvbihDKXtcblx0ICB2YXIgUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdO1xuXHQgIHJldHVybiBTICE9IHVuZGVmaW5lZCA/IFMgOiBDO1xuXHR9O1xuXHR2YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uKGl0KXtcblx0ICB2YXIgdGhlbjtcblx0ICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG5cdH07XG5cdHZhciBub3RpZnkgPSBmdW5jdGlvbihyZWNvcmQsIGlzUmVqZWN0KXtcblx0ICBpZihyZWNvcmQubilyZXR1cm47XG5cdCAgcmVjb3JkLm4gPSB0cnVlO1xuXHQgIHZhciBjaGFpbiA9IHJlY29yZC5jO1xuXHQgIGFzYXAoZnVuY3Rpb24oKXtcblx0ICAgIHZhciB2YWx1ZSA9IHJlY29yZC52XG5cdCAgICAgICwgb2sgICAgPSByZWNvcmQucyA9PSAxXG5cdCAgICAgICwgaSAgICAgPSAwO1xuXHQgICAgdmFyIHJ1biA9IGZ1bmN0aW9uKHJlYWN0KXtcblx0ICAgICAgdmFyIGNiID0gb2sgPyByZWFjdC5vayA6IHJlYWN0LmZhaWxcblx0ICAgICAgICAsIHJldCwgdGhlbjtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICBpZihjYil7XG5cdCAgICAgICAgICBpZighb2spcmVjb3JkLmggPSB0cnVlO1xuXHQgICAgICAgICAgcmV0ID0gY2IgPT09IHRydWUgPyB2YWx1ZSA6IGNiKHZhbHVlKTtcblx0ICAgICAgICAgIGlmKHJldCA9PT0gcmVhY3QuUCl7XG5cdCAgICAgICAgICAgIHJlYWN0LnJlaihUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG5cdCAgICAgICAgICB9IGVsc2UgaWYodGhlbiA9IGlzVGhlbmFibGUocmV0KSl7XG5cdCAgICAgICAgICAgIHRoZW4uY2FsbChyZXQsIHJlYWN0LnJlcywgcmVhY3QucmVqKTtcblx0ICAgICAgICAgIH0gZWxzZSByZWFjdC5yZXMocmV0KTtcblx0ICAgICAgICB9IGVsc2UgcmVhY3QucmVqKHZhbHVlKTtcblx0ICAgICAgfSBjYXRjaChlcnIpe1xuXHQgICAgICAgIHJlYWN0LnJlaihlcnIpO1xuXHQgICAgICB9XG5cdCAgICB9O1xuXHQgICAgd2hpbGUoY2hhaW4ubGVuZ3RoID4gaSlydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG5cdCAgICBjaGFpbi5sZW5ndGggPSAwO1xuXHQgICAgcmVjb3JkLm4gPSBmYWxzZTtcblx0ICAgIGlmKGlzUmVqZWN0KXNldFRpbWVvdXQoZnVuY3Rpb24oKXtcblx0ICAgICAgdmFyIHByb21pc2UgPSByZWNvcmQucFxuXHQgICAgICAgICwgaGFuZGxlciwgY29uc29sZTtcblx0ICAgICAgaWYoaXNVbmhhbmRsZWQocHJvbWlzZSkpe1xuXHQgICAgICAgIGlmKGlzTm9kZSl7XG5cdCAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcblx0ICAgICAgICB9IGVsc2UgaWYoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbil7XG5cdCAgICAgICAgICBoYW5kbGVyKHtwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlfSk7XG5cdCAgICAgICAgfSBlbHNlIGlmKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3Ipe1xuXHQgICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSByZWNvcmQuYSA9IHVuZGVmaW5lZDtcblx0ICAgIH0sIDEpO1xuXHQgIH0pO1xuXHR9O1xuXHR2YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcblx0ICB2YXIgcmVjb3JkID0gcHJvbWlzZVtSRUNPUkRdXG5cdCAgICAsIGNoYWluICA9IHJlY29yZC5hIHx8IHJlY29yZC5jXG5cdCAgICAsIGkgICAgICA9IDBcblx0ICAgICwgcmVhY3Q7XG5cdCAgaWYocmVjb3JkLmgpcmV0dXJuIGZhbHNlO1xuXHQgIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpe1xuXHQgICAgcmVhY3QgPSBjaGFpbltpKytdO1xuXHQgICAgaWYocmVhY3QuZmFpbCB8fCAhaXNVbmhhbmRsZWQocmVhY3QuUCkpcmV0dXJuIGZhbHNlO1xuXHQgIH0gcmV0dXJuIHRydWU7XG5cdH07XG5cdHZhciAkcmVqZWN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHQgIHZhciByZWNvcmQgPSB0aGlzO1xuXHQgIGlmKHJlY29yZC5kKXJldHVybjtcblx0ICByZWNvcmQuZCA9IHRydWU7XG5cdCAgcmVjb3JkID0gcmVjb3JkLnIgfHwgcmVjb3JkOyAvLyB1bndyYXBcblx0ICByZWNvcmQudiA9IHZhbHVlO1xuXHQgIHJlY29yZC5zID0gMjtcblx0ICByZWNvcmQuYSA9IHJlY29yZC5jLnNsaWNlKCk7XG5cdCAgbm90aWZ5KHJlY29yZCwgdHJ1ZSk7XG5cdH07XG5cdHZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0ICB2YXIgcmVjb3JkID0gdGhpc1xuXHQgICAgLCB0aGVuO1xuXHQgIGlmKHJlY29yZC5kKXJldHVybjtcblx0ICByZWNvcmQuZCA9IHRydWU7XG5cdCAgcmVjb3JkID0gcmVjb3JkLnIgfHwgcmVjb3JkOyAvLyB1bndyYXBcblx0ICB0cnkge1xuXHQgICAgaWYodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKXtcblx0ICAgICAgYXNhcChmdW5jdGlvbigpe1xuXHQgICAgICAgIHZhciB3cmFwcGVyID0ge3I6IHJlY29yZCwgZDogZmFsc2V9OyAvLyB3cmFwXG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcblx0ICAgICAgICB9IGNhdGNoKGUpe1xuXHQgICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZWNvcmQudiA9IHZhbHVlO1xuXHQgICAgICByZWNvcmQucyA9IDE7XG5cdCAgICAgIG5vdGlmeShyZWNvcmQsIGZhbHNlKTtcblx0ICAgIH1cblx0ICB9IGNhdGNoKGUpe1xuXHQgICAgJHJlamVjdC5jYWxsKHtyOiByZWNvcmQsIGQ6IGZhbHNlfSwgZSk7IC8vIHdyYXBcblx0ICB9XG5cdH07XG5cblx0Ly8gY29uc3RydWN0b3IgcG9seWZpbGxcblx0aWYoIXVzZU5hdGl2ZSl7XG5cdCAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcblx0ICBQID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcil7XG5cdCAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuXHQgICAgdmFyIHJlY29yZCA9IHtcblx0ICAgICAgcDogc3RyaWN0TmV3KHRoaXMsIFAsIFBST01JU0UpLCAgICAgICAgIC8vIDwtIHByb21pc2Vcblx0ICAgICAgYzogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuXHQgICAgICBhOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcblx0ICAgICAgczogMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG5cdCAgICAgIGQ6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBkb25lXG5cdCAgICAgIHY6IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuXHQgICAgICBoOiBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gaGFuZGxlZCByZWplY3Rpb25cblx0ICAgICAgbjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIG5vdGlmeVxuXHQgICAgfTtcblx0ICAgIHRoaXNbUkVDT1JEXSA9IHJlY29yZDtcblx0ICAgIHRyeSB7XG5cdCAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgcmVjb3JkLCAxKSwgY3R4KCRyZWplY3QsIHJlY29yZCwgMSkpO1xuXHQgICAgfSBjYXRjaChlcnIpe1xuXHQgICAgICAkcmVqZWN0LmNhbGwocmVjb3JkLCBlcnIpO1xuXHQgICAgfVxuXHQgIH07XG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg3OSkoUC5wcm90b3R5cGUsIHtcblx0ICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG5cdCAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKXtcblx0ICAgICAgdmFyIFMgPSBhbk9iamVjdChhbk9iamVjdCh0aGlzKS5jb25zdHJ1Y3RvcilbU1BFQ0lFU107XG5cdCAgICAgIHZhciByZWFjdCA9IHtcblx0ICAgICAgICBvazogICB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZSxcblx0ICAgICAgICBmYWlsOiB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICA/IG9uUmVqZWN0ZWQgIDogZmFsc2Vcblx0ICAgICAgfTtcblx0ICAgICAgdmFyIHByb21pc2UgPSByZWFjdC5QID0gbmV3IChTICE9IHVuZGVmaW5lZCA/IFMgOiBQKShmdW5jdGlvbihyZXMsIHJlail7XG5cdCAgICAgICAgcmVhY3QucmVzID0gcmVzO1xuXHQgICAgICAgIHJlYWN0LnJlaiA9IHJlajtcblx0ICAgICAgfSk7XG5cdCAgICAgIGFGdW5jdGlvbihyZWFjdC5yZXMpO1xuXHQgICAgICBhRnVuY3Rpb24ocmVhY3QucmVqKTtcblx0ICAgICAgdmFyIHJlY29yZCA9IHRoaXNbUkVDT1JEXTtcblx0ICAgICAgcmVjb3JkLmMucHVzaChyZWFjdCk7XG5cdCAgICAgIGlmKHJlY29yZC5hKXJlY29yZC5hLnB1c2gocmVhY3QpO1xuXHQgICAgICBpZihyZWNvcmQucylub3RpZnkocmVjb3JkLCBmYWxzZSk7XG5cdCAgICAgIHJldHVybiBwcm9taXNlO1xuXHQgICAgfSxcblx0ICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG5cdCAgICAnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcblx0ICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuXHQgICAgfVxuXHQgIH0pO1xuXHR9XG5cblx0Ly8gZXhwb3J0XG5cdCRkZWYoJGRlZi5HICsgJGRlZi5XICsgJGRlZi5GICogIXVzZU5hdGl2ZSwge1Byb21pc2U6IFB9KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXygyNSkoUCwgUFJPTUlTRSk7XG5cdHNwZWNpZXMoUCk7XG5cdHNwZWNpZXMoV3JhcHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpW1BST01JU0VdKTtcblxuXHQvLyBzdGF0aWNzXG5cdCRkZWYoJGRlZi5TICsgJGRlZi5GICogIXVzZU5hdGl2ZSwgUFJPTUlTRSwge1xuXHQgIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG5cdCAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocil7XG5cdCAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24ocmVzLCByZWopeyByZWoocik7IH0pO1xuXHQgIH1cblx0fSk7XG5cdCRkZWYoJGRlZi5TICsgJGRlZi5GICogKCF1c2VOYXRpdmUgfHwgdGVzdFJlc29sdmUodHJ1ZSkpLCBQUk9NSVNFLCB7XG5cdCAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG5cdCAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KXtcblx0ICAgIHJldHVybiBpc1Byb21pc2UoeCkgJiYgc2FtZUNvbnN0cnVjdG9yKHguY29uc3RydWN0b3IsIHRoaXMpXG5cdCAgICAgID8geCA6IG5ldyB0aGlzKGZ1bmN0aW9uKHJlcyl7IHJlcyh4KTsgfSk7XG5cdCAgfVxuXHR9KTtcblx0JGRlZigkZGVmLlMgKyAkZGVmLkYgKiAhKHVzZU5hdGl2ZSAmJiBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KShmdW5jdGlvbihpdGVyKXtcblx0ICBQLmFsbChpdGVyKVsnY2F0Y2gnXShmdW5jdGlvbigpe30pO1xuXHR9KSksIFBST01JU0UsIHtcblx0ICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcblx0ICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSl7XG5cdCAgICB2YXIgQyAgICAgID0gZ2V0Q29uc3RydWN0b3IodGhpcylcblx0ICAgICAgLCB2YWx1ZXMgPSBbXTtcblx0ICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbihyZXMsIHJlail7XG5cdCAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgdmFsdWVzLnB1c2gsIHZhbHVlcyk7XG5cdCAgICAgIHZhciByZW1haW5pbmcgPSB2YWx1ZXMubGVuZ3RoXG5cdCAgICAgICAgLCByZXN1bHRzICAgPSBBcnJheShyZW1haW5pbmcpO1xuXHQgICAgICBpZihyZW1haW5pbmcpJC5lYWNoLmNhbGwodmFsdWVzLCBmdW5jdGlvbihwcm9taXNlLCBpbmRleCl7XG5cdCAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuXHQgICAgICAgICAgcmVzdWx0c1tpbmRleF0gPSB2YWx1ZTtcblx0ICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlcyhyZXN1bHRzKTtcblx0ICAgICAgICB9LCByZWopO1xuXHQgICAgICB9KTtcblx0ICAgICAgZWxzZSByZXMocmVzdWx0cyk7XG5cdCAgICB9KTtcblx0ICB9LFxuXHQgIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcblx0ICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKXtcblx0ICAgIHZhciBDID0gZ2V0Q29uc3RydWN0b3IodGhpcyk7XG5cdCAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24ocmVzLCByZWope1xuXHQgICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uKHByb21pc2Upe1xuXHQgICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKHJlcywgcmVqKTtcblx0ICAgICAgfSk7XG5cdCAgICB9KTtcblx0ICB9XG5cdH0pO1xuXG4vKioqLyB9LFxuLyogNjkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIENvbnN0cnVjdG9yLCBuYW1lKXtcblx0ICBpZighKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXRocm93IFR5cGVFcnJvcihuYW1lICsgXCI6IHVzZSB0aGUgJ25ldycgb3BlcmF0b3IhXCIpO1xuXHQgIHJldHVybiBpdDtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDcwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgY3R4ICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KVxuXHQgICwgY2FsbCAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKVxuXHQgICwgaXNBcnJheUl0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKVxuXHQgICwgYW5PYmplY3QgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKVxuXHQgICwgdG9MZW5ndGggICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KVxuXHQgICwgZ2V0SXRlckZuICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQpe1xuXHQgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oaXRlcmFibGUpXG5cdCAgICAsIGYgICAgICA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKVxuXHQgICAgLCBpbmRleCAgPSAwXG5cdCAgICAsIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3I7XG5cdCAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuXHQgIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuXHQgIGlmKGlzQXJyYXlJdGVyKGl0ZXJGbikpZm9yKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKXtcblx0ICAgIGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcblx0ICB9IGVsc2UgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7ICl7XG5cdCAgICBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiA3MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG5cdC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cdHZhciBnZXREZXNjICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpLmdldERlc2Ncblx0ICAsIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMilcblx0ICAsIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG5cdHZhciBjaGVjayA9IGZ1bmN0aW9uKE8sIHByb3RvKXtcblx0ICBhbk9iamVjdChPKTtcblx0ICBpZighaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKXRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcblx0fTtcblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuXHQgICAgZnVuY3Rpb24odGVzdCwgYnVnZ3ksIHNldCl7XG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgc2V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNykoRnVuY3Rpb24uY2FsbCwgZ2V0RGVzYyhPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcblx0ICAgICAgICBzZXQodGVzdCwgW10pO1xuXHQgICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuXHQgICAgICB9IGNhdGNoKGUpeyBidWdneSA9IHRydWU7IH1cblx0ICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKXtcblx0ICAgICAgICBjaGVjayhPLCBwcm90byk7XG5cdCAgICAgICAgaWYoYnVnZ3kpTy5fX3Byb3RvX18gPSBwcm90bztcblx0ICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG5cdCAgICAgICAgcmV0dXJuIE87XG5cdCAgICAgIH07XG5cdCAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuXHQgIGNoZWNrOiBjaGVja1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNzIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpe1xuXHQgIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNzMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyICQgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgU1BFQ0lFUyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdzcGVjaWVzJyk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQyl7XG5cdCAgaWYoX193ZWJwYWNrX3JlcXVpcmVfXygxNykgJiYgIShTUEVDSUVTIGluIEMpKSQuc2V0RGVzYyhDLCBTUEVDSUVTLCB7XG5cdCAgICBjb25maWd1cmFibGU6IHRydWUsXG5cdCAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9XG5cdCAgfSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA3NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGdsb2JhbCAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXHJcblx0ICAsIG1hY3JvdGFzayA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpLnNldFxyXG5cdCAgLCBPYnNlcnZlciAgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlclxyXG5cdCAgLCBwcm9jZXNzICAgPSBnbG9iYWwucHJvY2Vzc1xyXG5cdCAgLCBpc05vZGUgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KShwcm9jZXNzKSA9PSAncHJvY2VzcydcclxuXHQgICwgaGVhZCwgbGFzdCwgbm90aWZ5O1xyXG5cclxuXHR2YXIgZmx1c2ggPSBmdW5jdGlvbigpe1xyXG5cdCAgdmFyIHBhcmVudCwgZG9tYWluO1xyXG5cdCAgaWYoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpe1xyXG5cdCAgICBwcm9jZXNzLmRvbWFpbiA9IG51bGw7XHJcblx0ICAgIHBhcmVudC5leGl0KCk7XHJcblx0ICB9XHJcblx0ICB3aGlsZShoZWFkKXtcclxuXHQgICAgZG9tYWluID0gaGVhZC5kb21haW47XHJcblx0ICAgIGlmKGRvbWFpbilkb21haW4uZW50ZXIoKTtcclxuXHQgICAgaGVhZC5mbi5jYWxsKCk7IC8vIDwtIGN1cnJlbnRseSB3ZSB1c2UgaXQgb25seSBmb3IgUHJvbWlzZSAtIHRyeSAvIGNhdGNoIG5vdCByZXF1aXJlZFxyXG5cdCAgICBpZihkb21haW4pZG9tYWluLmV4aXQoKTtcclxuXHQgICAgaGVhZCA9IGhlYWQubmV4dDtcclxuXHQgIH0gbGFzdCA9IHVuZGVmaW5lZDtcclxuXHQgIGlmKHBhcmVudClwYXJlbnQuZW50ZXIoKTtcclxuXHR9XHJcblxyXG5cdC8vIE5vZGUuanNcclxuXHRpZihpc05vZGUpe1xyXG5cdCAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcclxuXHQgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XHJcblx0ICB9O1xyXG5cdC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlclxyXG5cdH0gZWxzZSBpZihPYnNlcnZlcil7XHJcblx0ICB2YXIgdG9nZ2xlID0gMVxyXG5cdCAgICAsIG5vZGUgICA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcclxuXHQgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZX0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xyXG5cdCAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcclxuXHQgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gLXRvZ2dsZTtcclxuXHQgIH07XHJcblx0Ly8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcclxuXHQvLyAtIHNldEltbWVkaWF0ZVxyXG5cdC8vIC0gTWVzc2FnZUNoYW5uZWxcclxuXHQvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXHJcblx0Ly8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcclxuXHQvLyAtIHNldFRpbWVvdXRcclxuXHR9IGVsc2Uge1xyXG5cdCAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcclxuXHQgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxyXG5cdCAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcclxuXHQgIH07XHJcblx0fVxyXG5cclxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFzYXAoZm4pe1xyXG5cdCAgdmFyIHRhc2sgPSB7Zm46IGZuLCBuZXh0OiB1bmRlZmluZWQsIGRvbWFpbjogaXNOb2RlICYmIHByb2Nlc3MuZG9tYWlufTtcclxuXHQgIGlmKGxhc3QpbGFzdC5uZXh0ID0gdGFzaztcclxuXHQgIGlmKCFoZWFkKXtcclxuXHQgICAgaGVhZCA9IHRhc2s7XHJcblx0ICAgIG5vdGlmeSgpO1xyXG5cdCAgfSBsYXN0ID0gdGFzaztcclxuXHR9O1xuXG4vKioqLyB9LFxuLyogNzUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyIGN0eCAgICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpXG5cdCAgLCBpbnZva2UgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KVxuXHQgICwgaHRtbCAgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nylcblx0ICAsIGNlbCAgICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpXG5cdCAgLCBnbG9iYWwgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuXHQgICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3Ncblx0ICAsIHNldFRhc2sgICAgICAgICAgICA9IGdsb2JhbC5zZXRJbW1lZGlhdGVcblx0ICAsIGNsZWFyVGFzayAgICAgICAgICA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZVxuXHQgICwgTWVzc2FnZUNoYW5uZWwgICAgID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsXG5cdCAgLCBjb3VudGVyICAgICAgICAgICAgPSAwXG5cdCAgLCBxdWV1ZSAgICAgICAgICAgICAgPSB7fVxuXHQgICwgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSdcblx0ICAsIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXHR2YXIgcnVuID0gZnVuY3Rpb24oKXtcblx0ICB2YXIgaWQgPSArdGhpcztcblx0ICBpZihxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpe1xuXHQgICAgdmFyIGZuID0gcXVldWVbaWRdO1xuXHQgICAgZGVsZXRlIHF1ZXVlW2lkXTtcblx0ICAgIGZuKCk7XG5cdCAgfVxuXHR9O1xuXHR2YXIgbGlzdG5lciA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0ICBydW4uY2FsbChldmVudC5kYXRhKTtcblx0fTtcblx0Ly8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuXHRpZighc2V0VGFzayB8fCAhY2xlYXJUYXNrKXtcblx0ICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKXtcblx0ICAgIHZhciBhcmdzID0gW10sIGkgPSAxO1xuXHQgICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcblx0ICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbigpe1xuXHQgICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG5cdCAgICB9O1xuXHQgICAgZGVmZXIoY291bnRlcik7XG5cdCAgICByZXR1cm4gY291bnRlcjtcblx0ICB9O1xuXHQgIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKXtcblx0ICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG5cdCAgfTtcblx0ICAvLyBOb2RlLmpzIDAuOC1cblx0ICBpZihfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KShwcm9jZXNzKSA9PSAncHJvY2Vzcycpe1xuXHQgICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG5cdCAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcblx0ICAgIH07XG5cdCAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuXHQgIH0gZWxzZSBpZihNZXNzYWdlQ2hhbm5lbCl7XG5cdCAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsO1xuXHQgICAgcG9ydCAgICA9IGNoYW5uZWwucG9ydDI7XG5cdCAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RuZXI7XG5cdCAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcblx0ICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcblx0ICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuXHQgIH0gZWxzZSBpZihnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdCl7XG5cdCAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcblx0ICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG5cdCAgICB9O1xuXHQgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0bmVyLCBmYWxzZSk7XG5cdCAgLy8gSUU4LVxuXHQgIH0gZWxzZSBpZihPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSl7XG5cdCAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcblx0ICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24oKXtcblx0ICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuXHQgICAgICAgIHJ1bi5jYWxsKGlkKTtcblx0ICAgICAgfTtcblx0ICAgIH07XG5cdCAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcblx0ICB9IGVsc2Uge1xuXHQgICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG5cdCAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcblx0ICAgIH07XG5cdCAgfVxuXHR9XG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgIHNldDogICBzZXRUYXNrLFxuXHQgIGNsZWFyOiBjbGVhclRhc2tcblx0fTtcblxuLyoqKi8gfSxcbi8qIDc2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgYXJncywgdGhhdCl7XG5cdCAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuXHQgIHN3aXRjaChhcmdzLmxlbmd0aCl7XG5cdCAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcblx0ICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcblx0ICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcblx0ICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcblx0ICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcblx0ICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcblx0ICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcblx0ICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblx0ICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcblx0ICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcblx0ICB9IHJldHVybiAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncyk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA3NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKS5kb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbi8qKiovIH0sXG4vKiA3OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMilcblx0ICAsIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkuZG9jdW1lbnRcblx0ICAvLyBpbiBvbGQgSUUgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCdcblx0ICAsIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNzkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciAkcmVkZWYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0YXJnZXQsIHNyYyl7XG5cdCAgZm9yKHZhciBrZXkgaW4gc3JjKSRyZWRlZih0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuXHQgIHJldHVybiB0YXJnZXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA4MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogODEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oODIpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLk9iamVjdC5rZXlzO1xuXG4vKioqLyB9LFxuLyogODIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxuXHR2YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDgzKSgna2V5cycsIGZ1bmN0aW9uKCRrZXlzKXtcblx0ICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCl7XG5cdCAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcblx0ICB9O1xuXHR9KTtcblxuLyoqKi8gfSxcbi8qIDgzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihLRVksIGV4ZWMpe1xuXHQgIHZhciAkZGVmID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcblx0ICAgICwgZm4gICA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV1cblx0ICAgICwgZXhwICA9IHt9O1xuXHQgIGV4cFtLRVldID0gZXhlYyhmbik7XG5cdCAgJGRlZigkZGVmLlMgKyAkZGVmLkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KShmdW5jdGlvbigpeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogODQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg4NSksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDg1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG5cdF9fd2VicGFja19yZXF1aXJlX18oODYpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5TZXQ7XG5cbi8qKiovIH0sXG4vKiA4NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgc3Ryb25nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XG5cblx0Ly8gMjMuMiBTZXQgT2JqZWN0c1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDg4KSgnU2V0JywgZnVuY3Rpb24oZ2V0KXtcblx0ICByZXR1cm4gZnVuY3Rpb24gU2V0KCl7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzWzBdKTsgfTtcblx0fSwge1xuXHQgIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuXHQgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKXtcblx0ICAgIHJldHVybiBzdHJvbmcuZGVmKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcblx0ICB9XG5cdH0sIHN0cm9uZyk7XG5cbi8qKiovIH0sXG4vKiA4NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgJCAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSlcblx0ICAsIGhpZGUgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpXG5cdCAgLCBjdHggICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KVxuXHQgICwgc3BlY2llcyAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mylcblx0ICAsIHN0cmljdE5ldyAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpXG5cdCAgLCBkZWZpbmVkICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpXG5cdCAgLCBmb3JPZiAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKVxuXHQgICwgc3RlcCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSlcblx0ICAsIElEICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpKCdpZCcpXG5cdCAgLCAkaGFzICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KVxuXHQgICwgaXNPYmplY3QgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMilcblx0ICAsIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgaXNPYmplY3Rcblx0ICAsIFNVUFBPUlRfREVTQyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpXG5cdCAgLCBTSVpFICAgICAgICAgPSBTVVBQT1JUX0RFU0MgPyAnX3MnIDogJ3NpemUnXG5cdCAgLCBpZCAgICAgICAgICAgPSAwO1xuXG5cdHZhciBmYXN0S2V5ID0gZnVuY3Rpb24oaXQsIGNyZWF0ZSl7XG5cdCAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuXHQgIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcblx0ICBpZighJGhhcyhpdCwgSUQpKXtcblx0ICAgIC8vIGNhbid0IHNldCBpZCB0byBmcm96ZW4gb2JqZWN0XG5cdCAgICBpZighaXNFeHRlbnNpYmxlKGl0KSlyZXR1cm4gJ0YnO1xuXHQgICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgaWRcblx0ICAgIGlmKCFjcmVhdGUpcmV0dXJuICdFJztcblx0ICAgIC8vIGFkZCBtaXNzaW5nIG9iamVjdCBpZFxuXHQgICAgaGlkZShpdCwgSUQsICsraWQpO1xuXHQgIC8vIHJldHVybiBvYmplY3QgaWQgd2l0aCBwcmVmaXhcblx0ICB9IHJldHVybiAnTycgKyBpdFtJRF07XG5cdH07XG5cblx0dmFyIGdldEVudHJ5ID0gZnVuY3Rpb24odGhhdCwga2V5KXtcblx0ICAvLyBmYXN0IGNhc2Vcblx0ICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSksIGVudHJ5O1xuXHQgIGlmKGluZGV4ICE9PSAnRicpcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuXHQgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuXHQgIGZvcihlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pe1xuXHQgICAgaWYoZW50cnkuayA9PSBrZXkpcmV0dXJuIGVudHJ5O1xuXHQgIH1cblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24od3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUil7XG5cdCAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24odGhhdCwgaXRlcmFibGUpe1xuXHQgICAgICBzdHJpY3ROZXcodGhhdCwgQywgTkFNRSk7XG5cdCAgICAgIHRoYXQuX2kgPSAkLmNyZWF0ZShudWxsKTsgLy8gaW5kZXhcblx0ICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgICAvLyBmaXJzdCBlbnRyeVxuXHQgICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAgIC8vIGxhc3QgZW50cnlcblx0ICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgICAvLyBzaXplXG5cdCAgICAgIGlmKGl0ZXJhYmxlICE9IHVuZGVmaW5lZClmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG5cdCAgICB9KTtcblx0ICAgIF9fd2VicGFja19yZXF1aXJlX18oNzkpKEMucHJvdG90eXBlLCB7XG5cdCAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuXHQgICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcblx0ICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCl7XG5cdCAgICAgICAgZm9yKHZhciB0aGF0ID0gdGhpcywgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubil7XG5cdCAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcblx0ICAgICAgICAgIGlmKGVudHJ5LnApZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB0aGF0W1NJWkVdID0gMDtcblx0ICAgICAgfSxcblx0ICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuXHQgICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcblx0ICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uKGtleSl7XG5cdCAgICAgICAgdmFyIHRoYXQgID0gdGhpc1xuXHQgICAgICAgICAgLCBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG5cdCAgICAgICAgaWYoZW50cnkpe1xuXHQgICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uXG5cdCAgICAgICAgICAgICwgcHJldiA9IGVudHJ5LnA7XG5cdCAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcblx0ICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuXHQgICAgICAgICAgaWYocHJldilwcmV2Lm4gPSBuZXh0O1xuXHQgICAgICAgICAgaWYobmV4dCluZXh0LnAgPSBwcmV2O1xuXHQgICAgICAgICAgaWYodGhhdC5fZiA9PSBlbnRyeSl0aGF0Ll9mID0gbmV4dDtcblx0ICAgICAgICAgIGlmKHRoYXQuX2wgPT0gZW50cnkpdGhhdC5fbCA9IHByZXY7XG5cdCAgICAgICAgICB0aGF0W1NJWkVdLS07XG5cdCAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcblx0ICAgICAgfSxcblx0ICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG5cdCAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuXHQgICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyosIHRoYXQgPSB1bmRlZmluZWQgKi8pe1xuXHQgICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSwgMylcblx0ICAgICAgICAgICwgZW50cnk7XG5cdCAgICAgICAgd2hpbGUoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKXtcblx0ICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG5cdCAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcblx0ICAgICAgICAgIHdoaWxlKGVudHJ5ICYmIGVudHJ5LnIpZW50cnkgPSBlbnRyeS5wO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuXHQgICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcblx0ICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KXtcblx0ICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIGlmKFNVUFBPUlRfREVTQykkLnNldERlc2MoQy5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uKCl7XG5cdCAgICAgICAgcmV0dXJuIGRlZmluZWQodGhpc1tTSVpFXSk7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIEM7XG5cdCAgfSxcblx0ICBkZWY6IGZ1bmN0aW9uKHRoYXQsIGtleSwgdmFsdWUpe1xuXHQgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KVxuXHQgICAgICAsIHByZXYsIGluZGV4O1xuXHQgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG5cdCAgICBpZihlbnRyeSl7XG5cdCAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcblx0ICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcblx0ICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcblx0ICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG5cdCAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG5cdCAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG5cdCAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcblx0ICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuXHQgICAgICB9O1xuXHQgICAgICBpZighdGhhdC5fZil0aGF0Ll9mID0gZW50cnk7XG5cdCAgICAgIGlmKHByZXYpcHJldi5uID0gZW50cnk7XG5cdCAgICAgIHRoYXRbU0laRV0rKztcblx0ICAgICAgLy8gYWRkIHRvIGluZGV4XG5cdCAgICAgIGlmKGluZGV4ICE9PSAnRicpdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcblx0ICAgIH0gcmV0dXJuIHRoYXQ7XG5cdCAgfSxcblx0ICBnZXRFbnRyeTogZ2V0RW50cnksXG5cdCAgc2V0U3Ryb25nOiBmdW5jdGlvbihDLCBOQU1FLCBJU19NQVApe1xuXHQgICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG5cdCAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG5cdCAgICBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpKEMsIE5BTUUsIGZ1bmN0aW9uKGl0ZXJhdGVkLCBraW5kKXtcblx0ICAgICAgdGhpcy5fdCA9IGl0ZXJhdGVkOyAgLy8gdGFyZ2V0XG5cdCAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgIC8vIGtpbmRcblx0ICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgLy8gcHJldmlvdXNcblx0ICAgIH0sIGZ1bmN0aW9uKCl7XG5cdCAgICAgIHZhciB0aGF0ICA9IHRoaXNcblx0ICAgICAgICAsIGtpbmQgID0gdGhhdC5fa1xuXHQgICAgICAgICwgZW50cnkgPSB0aGF0Ll9sO1xuXHQgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcblx0ICAgICAgd2hpbGUoZW50cnkgJiYgZW50cnkucillbnRyeSA9IGVudHJ5LnA7XG5cdCAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG5cdCAgICAgIGlmKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpe1xuXHQgICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG5cdCAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICByZXR1cm4gc3RlcCgxKTtcblx0ICAgICAgfVxuXHQgICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG5cdCAgICAgIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG5cdCAgICAgIGlmKGtpbmQgPT0gJ3ZhbHVlcycpcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG5cdCAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG5cdCAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJyAsICFJU19NQVAsIHRydWUpO1xuXG5cdCAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuXHQgICAgc3BlY2llcyhDKTtcblx0ICAgIHNwZWNpZXMoX193ZWJwYWNrX3JlcXVpcmVfXygxMilbTkFNRV0pOyAvLyBmb3Igd3JhcHBlclxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDg4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciAkICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSlcblx0ICAsICRkZWYgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuXHQgICwgaGlkZSAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpXG5cdCAgLCBmb3JPZiAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MClcblx0ICAsIHN0cmljdE5ldyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKXtcblx0ICB2YXIgQmFzZSAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVtOQU1FXVxuXHQgICAgLCBDICAgICA9IEJhc2Vcblx0ICAgICwgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnXG5cdCAgICAsIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZVxuXHQgICAgLCBPICAgICA9IHt9O1xuXHQgIGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSB8fCB0eXBlb2YgQyAhPSAnZnVuY3Rpb24nXG5cdCAgICB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXygxOCkoZnVuY3Rpb24oKXsgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcblx0ICApe1xuXHQgICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3Jcblx0ICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG5cdCAgICBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KShDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRhcmdldCwgaXRlcmFibGUpe1xuXHQgICAgICBzdHJpY3ROZXcodGFyZ2V0LCBDLCBOQU1FKTtcblx0ICAgICAgdGFyZ2V0Ll9jID0gbmV3IEJhc2U7XG5cdCAgICAgIGlmKGl0ZXJhYmxlICE9IHVuZGVmaW5lZClmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0YXJnZXRbQURERVJdLCB0YXJnZXQpO1xuXHQgICAgfSk7XG5cdCAgICAkLmVhY2guY2FsbCgnYWRkLGNsZWFyLGRlbGV0ZSxmb3JFYWNoLGdldCxoYXMsc2V0LGtleXMsdmFsdWVzLGVudHJpZXMnLnNwbGl0KCcsJyksZnVuY3Rpb24oS0VZKXtcblx0ICAgICAgdmFyIGNoYWluID0gS0VZID09ICdhZGQnIHx8IEtFWSA9PSAnc2V0Jztcblx0ICAgICAgaWYoS0VZIGluIHByb3RvICYmICEoSVNfV0VBSyAmJiBLRVkgPT0gJ2NsZWFyJykpaGlkZShDLnByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbihhLCBiKXtcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY1tLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG5cdCAgICAgICAgcmV0dXJuIGNoYWluID8gdGhpcyA6IHJlc3VsdDtcblx0ICAgICAgfSk7XG5cdCAgICB9KTtcblx0ICAgIGlmKCdzaXplJyBpbiBwcm90bykkLnNldERlc2MoQy5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uKCl7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2Muc2l6ZTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNSkoQywgTkFNRSk7XG5cblx0ICBPW05BTUVdID0gQztcblx0ICAkZGVmKCRkZWYuRyArICRkZWYuVyArICRkZWYuRiwgTyk7XG5cblx0ICBpZighSVNfV0VBSyljb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cblx0ICByZXR1cm4gQztcblx0fTtcblxuLyoqKi8gfSxcbi8qIDg5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG5cdHZhciAkZGVmICA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG5cdCRkZWYoJGRlZi5QLCAnU2V0Jywge3RvSlNPTjogX193ZWJwYWNrX3JlcXVpcmVfXyg5MCkoJ1NldCcpfSk7XG5cbi8qKiovIH0sXG4vKiA5MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxuXHR2YXIgZm9yT2YgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzApXG5cdCAgLCBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTkFNRSl7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpe1xuXHQgICAgaWYoY2xhc3NvZih0aGlzKSAhPSBOQU1FKXRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG5cdCAgICB2YXIgYXJyID0gW107XG5cdCAgICBmb3JPZih0aGlzLCBmYWxzZSwgYXJyLnB1c2gsIGFycik7XG5cdCAgICByZXR1cm4gYXJyO1xuXHQgIH07XG5cdH07XG5cbi8qKiovIH1cbi8qKioqKiovIF0pXG59KTtcbjsiLCJtb2R1bGUuZXhwb3J0cyA9IERHOyIsIm1vZHVsZS5leHBvcnRzID0gcnhqczsiLCJtb2R1bGUuZXhwb3J0cyA9IHVpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgU2VxdWVuY2VBbGlnbm1lbnQgfSBmcm9tICcuL3NlcV9hbGlnbic7XG5leHBvcnQgY29uc3QgX3BhY2thZ2UgPSBuZXcgREcuUGFja2FnZSgpO1xuaW1wb3J0IHsgV2ViTG9nbyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy92aWV3ZXJzL3dlYi1sb2dvJztcbmltcG9ydCB7IFZkUmVnaW9uc1ZpZXdlciB9IGZyb20gJy4vdmlld2Vycy92ZC1yZWdpb25zLXZpZXdlcic7XG4vL25hbWU6IHNlcXVlbmNlQWxpZ25tZW50XG4vL2lucHV0OiBzdHJpbmcgYWxpZ25UeXBlIHtjaG9pY2VzOiBbJ0xvY2FsIGFsaWdubWVudCcsICdHbG9iYWwgYWxpZ25tZW50J119XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuLy9pbnB1dDogc3RyaW5nIGFsaWduVGFibGUge2Nob2ljZXM6IFsnQVVUTycsICdOVUNMRU9USURFUycsICdCTE9TVU00NScsICdCTE9TVU01MCcsJ0JMT1NVTTYyJywnQkxPU1VNODAnLCdCTE9TVU05MCcsJ1BBTTMwJywnUEFNNzAnLCdQQU0yNTAnLCdTQ0hORUlERVInLCdUUkFOUyddfVxuLy9pbnB1dDogZG91YmxlIGdhcFxuLy9pbnB1dDogc3RyaW5nIHNlcTFcbi8vaW5wdXQ6IHN0cmluZyBzZXEyXG4vL291dHB1dDogb2JqZWN0IHJlc1xuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlQWxpZ25tZW50KGFsaWduVHlwZSwgYWxpZ25UYWJsZSwgZ2FwLCBzZXExLCBzZXEyKSB7XG4gICAgY29uc3QgdG9BbGlnbiA9IG5ldyBTZXF1ZW5jZUFsaWdubWVudChzZXExLCBzZXEyLCBnYXAsIGFsaWduVGFibGUpO1xuICAgIGNvbnN0IHJlcyA9IGFsaWduVHlwZSA9PSAnTG9jYWwgYWxpZ25tZW50JyA/IHRvQWxpZ24uc21pdGhXYXRlcm1hbigpIDogdG9BbGlnbi5uZWVkbGVtYW5XdW5jaCgpO1xuICAgIHJldHVybiByZXM7XG59XG4vL25hbWU6IFdlYkxvZ29cbi8vZGVzY3JpcHRpb246IFdlYkxvZ28gdmlld2VyXG4vL3RhZ3M6IHZpZXdlciwgcGFuZWxcbi8vb3V0cHV0OiB2aWV3ZXIgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gd2ViTG9nb1ZpZXdlcigpIHtcbiAgICByZXR1cm4gbmV3IFdlYkxvZ28oKTtcbn1cbi8vbmFtZTogVmRSZWdpb25zXG4vL2Rlc2NyaXB0aW9uOiBWLURvbWFpbiByZWdpb25zIHZpZXdlclxuLy90YWdzOiB2aWV3ZXIsIHBhbmVsXG4vL291dHB1dDogdmlld2VyIHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIHZkUmVnaW9uVmlld2VyKCkge1xuICAgIHJldHVybiBuZXcgVmRSZWdpb25zVmlld2VyKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
|