mis-crystal-design-system 18.1.2-signal → 18.1.2
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/button/button.component.d.ts +0 -2
- package/datepicker_v2/tz-dp-container/tz-dp-container.component.d.ts +4 -0
- package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +9 -5
- package/esm2022/button/button.component.mjs +7 -15
- package/esm2022/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/chip/chip.component.mjs +4 -4
- package/esm2022/datepicker_v2/tz-datepicker.directive.mjs +17 -10
- package/esm2022/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +87 -32
- package/esm2022/daterangepicker_v2/tz-daterangepicker.directive.mjs +6 -3
- package/esm2022/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +316 -141
- package/esm2022/drawer/drawer-body/drawer-body.component.mjs +4 -4
- package/esm2022/fab/fab.component.mjs +4 -4
- package/esm2022/filter/filter-panel/filter-panel.component.mjs +28 -27
- package/esm2022/input/directives/input/input.directive.mjs +28 -10
- package/esm2022/input/mis-input.component.mjs +19 -13
- package/esm2022/loader/loader.component.mjs +13 -7
- package/esm2022/modal/module-wrapper/module-wrapper.component.mjs +4 -4
- package/esm2022/multi-select-dropdown/multi-select-dropdown.component.mjs +10 -5
- package/esm2022/phone-input/phone-input.component.mjs +4 -4
- package/esm2022/radio-button/radio-button.component.mjs +4 -4
- package/esm2022/ske-loader/ske-loader.component.mjs +4 -4
- package/esm2022/slider/slider.component.mjs +4 -4
- package/esm2022/snackbar/snackbar/snackbar.component.mjs +4 -4
- package/esm2022/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +24 -20
- package/esm2022/switch/switch.component.mjs +2 -4
- package/esm2022/table/sub-table/sub-table.component.mjs +18 -5
- package/esm2022/table/table.component.mjs +184 -95
- package/esm2022/table/table.module.mjs +7 -5
- package/esm2022/toast/toast.component.mjs +4 -4
- package/esm2022/tooltip/tooltip-container/tooltip.component.mjs +4 -4
- package/esm2022/virtual-scroll/virtual-scroll.component.mjs +4 -4
- package/fesm2022/mis-crystal-design-system-button.mjs +6 -14
- package/fesm2022/mis-crystal-design-system-button.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-checkbox.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-checkbox.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-chip.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-chip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs +101 -39
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs +320 -142
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-drawer.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-drawer.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-fab.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-fab.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-filter.mjs +27 -26
- package/fesm2022/mis-crystal-design-system-filter.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-input.mjs +45 -21
- package/fesm2022/mis-crystal-design-system-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-loader.mjs +12 -6
- package/fesm2022/mis-crystal-design-system-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-modal.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-modal.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-multi-select-dropdown.mjs +9 -4
- package/fesm2022/mis-crystal-design-system-multi-select-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-phone-input.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-phone-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-radio-button.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-radio-button.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-slider.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-slider.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-snackbar.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-snackbar.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs +23 -19
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-switch.mjs +1 -3
- package/fesm2022/mis-crystal-design-system-switch.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-table.mjs +205 -102
- package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-toast.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-toast.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-tooltip.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-tooltip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs.map +1 -1
- package/filter/filter-panel/filter-panel.component.d.ts +1 -1
- package/input/directives/input/input.directive.d.ts +3 -4
- package/input/mis-input.component.d.ts +3 -6
- package/input/mis-input.component.scss +11 -4
- package/loader/loader.component.d.ts +7 -1
- package/package.json +17 -17
- package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +2 -2
- package/table/table.component.d.ts +12 -1
- package/table/table.module.d.ts +2 -1
|
@@ -211,6 +211,57 @@ dayjs.extend(customParseFormat);
|
|
|
211
211
|
dayjs.extend(isSameOrAfter);
|
|
212
212
|
dayjs.extend(isSameOrBefore);
|
|
213
213
|
export class TzDpContainerComponent {
|
|
214
|
+
/**
|
|
215
|
+
* Parse date string using configured format with fallback
|
|
216
|
+
*/
|
|
217
|
+
parseDateWithMultipleFormats(dateString) {
|
|
218
|
+
if (!dateString || dateString === 'Invalid Date' || dateString === 'undefined' || dateString === 'null') {
|
|
219
|
+
return dayjs('invalid');
|
|
220
|
+
}
|
|
221
|
+
// First try the configured format
|
|
222
|
+
const configuredFormat = this.data?.dpConfig?.format;
|
|
223
|
+
if (configuredFormat) {
|
|
224
|
+
try {
|
|
225
|
+
const parsed = this.parseZoneInstance(dateString, configuredFormat);
|
|
226
|
+
if (parsed.isValid()) {
|
|
227
|
+
return parsed;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
// Continue to fallback formats
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Fallback to common formats if configured format fails
|
|
235
|
+
const fallbackFormats = [
|
|
236
|
+
'DD/MMM/YYYY',
|
|
237
|
+
'DD/MM/YYYY',
|
|
238
|
+
'DD-MMM-YYYY',
|
|
239
|
+
'DD-MM-YYYY',
|
|
240
|
+
'YYYY-MM-DD'
|
|
241
|
+
];
|
|
242
|
+
for (const format of fallbackFormats) {
|
|
243
|
+
try {
|
|
244
|
+
const parsed = this.parseZoneInstance(dateString, format);
|
|
245
|
+
if (parsed.isValid()) {
|
|
246
|
+
return parsed;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
// Continue to next format
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// If all formats fail, try parsing without format (let dayjs guess)
|
|
254
|
+
try {
|
|
255
|
+
const parsed = this.parseZoneInstance(dateString);
|
|
256
|
+
if (parsed.isValid()) {
|
|
257
|
+
return parsed;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
console.warn('Failed to parse date with any format:', dateString, error);
|
|
262
|
+
}
|
|
263
|
+
return dayjs('invalid');
|
|
264
|
+
}
|
|
214
265
|
constructor(data, toast) {
|
|
215
266
|
this.toast = toast;
|
|
216
267
|
this.parseZoneInstance = (...args) => {
|
|
@@ -449,7 +500,7 @@ export class TzDpContainerComponent {
|
|
|
449
500
|
currentDateInstance() {
|
|
450
501
|
try {
|
|
451
502
|
if (this.data.date) {
|
|
452
|
-
const selectedDate =
|
|
503
|
+
const selectedDate = this.parseDateWithMultipleFormats(this.data.date);
|
|
453
504
|
if (selectedDate.isValid()) {
|
|
454
505
|
this.selectedYearSignal.set(selectedDate.year());
|
|
455
506
|
this.currentYearNumberSignal.set(selectedDate.year());
|
|
@@ -556,7 +607,7 @@ export class TzDpContainerComponent {
|
|
|
556
607
|
let maxDate = null;
|
|
557
608
|
if (this.data.dpConfig.minDate) {
|
|
558
609
|
try {
|
|
559
|
-
minDate = this.
|
|
610
|
+
minDate = this.parseDateWithMultipleFormats(this.data.dpConfig.minDate);
|
|
560
611
|
}
|
|
561
612
|
catch (error) {
|
|
562
613
|
// Silently handle min date parsing error
|
|
@@ -564,7 +615,7 @@ export class TzDpContainerComponent {
|
|
|
564
615
|
}
|
|
565
616
|
if (this.data.dpConfig.maxDate) {
|
|
566
617
|
try {
|
|
567
|
-
maxDate = this.
|
|
618
|
+
maxDate = this.parseDateWithMultipleFormats(this.data.dpConfig.maxDate);
|
|
568
619
|
}
|
|
569
620
|
catch (error) {
|
|
570
621
|
// Silently handle max date parsing error
|
|
@@ -582,38 +633,42 @@ export class TzDpContainerComponent {
|
|
|
582
633
|
isDisabledDay = maxDate.isBefore(date, "day");
|
|
583
634
|
}
|
|
584
635
|
const currentDateInstance = this.parseZoneInstance().year(currentYearNumber).month(month).date(currentDate);
|
|
585
|
-
|
|
636
|
+
// Only mark as current day if it's not disabled
|
|
637
|
+
const isCurrentDay = !isDisabledDay && currentDateInstance.format(this.data.dpConfig.format) === dayjs().format(this.data.dpConfig.format);
|
|
586
638
|
let isSelectedDay = false;
|
|
587
|
-
//
|
|
588
|
-
if (
|
|
589
|
-
|
|
590
|
-
this.localSelectedDateSignal()
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
if
|
|
598
|
-
|
|
599
|
-
if (
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
// For date-only format, compare the date parts only
|
|
605
|
-
const selectedDate = this.parseZoneInstance(this.data.date, this.data.dpConfig.format);
|
|
606
|
-
if (selectedDate.isValid()) {
|
|
607
|
-
isSelectedDay = selectedDate.isSame(currentDateInstance, 'day');
|
|
639
|
+
// Only set selected day if the date is not disabled
|
|
640
|
+
if (!isDisabledDay) {
|
|
641
|
+
// Prioritize current selection over previously applied date
|
|
642
|
+
if (this.localSelectedDateSignal() &&
|
|
643
|
+
this.localSelectedDateSignal().date === currentDate &&
|
|
644
|
+
this.localSelectedDateSignal().month === month &&
|
|
645
|
+
this.localSelectedDateSignal().year === currentYearNumber) {
|
|
646
|
+
isSelectedDay = true;
|
|
647
|
+
}
|
|
648
|
+
else if (this.data.date && !this.localSelectedDateSignal()) {
|
|
649
|
+
// Only check previously applied date if no current selection
|
|
650
|
+
try {
|
|
651
|
+
if (this.data.dpConfig.enableTime) {
|
|
652
|
+
const selectedDate = this.parseDateWithMultipleFormats(this.data.date);
|
|
653
|
+
if (selectedDate.isValid()) {
|
|
654
|
+
isSelectedDay = selectedDate.isSame(currentDateInstance, 'day');
|
|
655
|
+
}
|
|
608
656
|
}
|
|
609
657
|
else {
|
|
610
|
-
//
|
|
611
|
-
|
|
658
|
+
// For date-only format, compare the date parts only
|
|
659
|
+
const selectedDate = this.parseDateWithMultipleFormats(this.data.date);
|
|
660
|
+
if (selectedDate.isValid()) {
|
|
661
|
+
isSelectedDay = selectedDate.isSame(currentDateInstance, 'day');
|
|
662
|
+
}
|
|
663
|
+
else {
|
|
664
|
+
// Fallback to string comparison if parsing fails
|
|
665
|
+
isSelectedDay = dateString === this.data.date;
|
|
666
|
+
}
|
|
612
667
|
}
|
|
613
668
|
}
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
669
|
+
catch (error) {
|
|
670
|
+
// Silently handle date comparison error
|
|
671
|
+
}
|
|
617
672
|
}
|
|
618
673
|
}
|
|
619
674
|
dates.push({
|
|
@@ -703,7 +758,7 @@ export class TzDpContainerComponent {
|
|
|
703
758
|
// Force calendar re-render to show highlighting
|
|
704
759
|
this.currentMonthDatesSignal.set(this.generateDates(this.currentMonthNumberSignal(), this.currentYearNumberSignal()));
|
|
705
760
|
// Automatically apply when neither time nor apply button is enabled, otherwise wait for user action
|
|
706
|
-
if (!this.data.dpConfig.
|
|
761
|
+
if (!this.data.dpConfig.showApplyButton && !this.data.dpConfig.enableTime) {
|
|
707
762
|
this.applyDate(day);
|
|
708
763
|
}
|
|
709
764
|
}
|
|
@@ -874,4 +929,4 @@ export class TzDpContainerComponent {
|
|
|
874
929
|
args: ["keydown.esc"]
|
|
875
930
|
}] }); })();
|
|
876
931
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TzDpContainerComponent, { className: "TzDpContainerComponent" }); })();
|
|
877
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHAtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVwaWNrZXJfdjIvdHotZHAtY29udGFpbmVyL3R6LWRwLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcGlja2VyX3YyL3R6LWRwLWNvbnRhaW5lci90ei1kcC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sS0FBb0IsTUFBTSxPQUFPLENBQUM7QUFDekMsT0FBTyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxjQUFjLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7O0lDVzFELCtCQUFxRjtJQUFyRCwrS0FBUyw0QkFBcUIsS0FBQztJQUM3RCxZQUNGO0lBQUEsaUJBQU07OztJQURKLGNBQ0Y7SUFERSw2SUFDRjs7OztJQUNBLCtCQUFvRjtJQUFuRCwrS0FBUywyQkFBb0IsS0FBQztJQUM3RCxZQUNGO0lBQUEsaUJBQU07OztJQURKLGNBQ0Y7SUFERSx5R0FDRjs7OztJQXlCSSwrQkFNTztJQUpILHFRQUFVLHVCQUFnQixVQUFPLDRCQUFr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NkUsNkRBY0QsNkRBY2tCLDZEQUtKO1lBMEI1RixpQkFBTTtZQXFETixBQWxEQSwyRUFBa0YsNkRBa0QwQjtZQUk5RyxpQkFBTTs7WUFySzJILEFBQS9GLDhFQUF3RCxpQ0FBdUU7WUFTM0osZUFFRTtZQUZGLDhHQUVFO1lBVUUsZUFBd0I7WUFBeEIsNkNBQXdCO1lBR3hCLGNBQXlCO1lBQXpCLDhDQUF5QjtZQVc3QixjQUVFO1lBRkYsMEdBRUU7WUFZRSxlQUE4QztZQUE5Qyx1RUFBOEM7WUFjOUMsY0FBOEM7WUFBOUMsdUVBQThDO1lBYzlDLGNBQStDO1lBQS9DLHdFQUErQztZQUsvQyxjQUErQztZQUEvQyx3RUFBK0M7WUE2QmQsY0FBdUM7WUFBdkMsNERBQXVDO1lBa0RyQyxjQUErRDtZQUEvRCx3RkFBK0Q7OztpRkQxSS9GLHNCQUFzQjtjQUxsQyxTQUFTOzJCQUNFLFdBQVc7O3NCQStEUixNQUFNO3VCQUFDLGNBQWM7Z0RBNGhCbEMsVUFBVTtrQkFEVCxZQUFZO21CQUFDLGFBQWE7O2tGQXRsQmhCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDT05UQUlORVJfREFUQSwgREFURV9GT1JNQVQgfSBmcm9tIFwiLi4vZGF0ZXBpY2tlci1jb25zdGFudHNcIjtcbmltcG9ydCB7IElDdXJyZW50TW9udGgsIElDdXJyZW50TW9udGhEYXRlcywgSURhdGVQaWNrZXJEYXRhLCBJV2Vla0RheSB9IGZyb20gXCIuLi9tb2RlbHMvZHAtY29uZmlnLm1vZGVsXCI7XG5pbXBvcnQgeyBnZXRNb250aCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vdG9hc3RcIjtcbmltcG9ydCBkYXlqcywgeyBEYXlqcywgdHogfSBmcm9tICdkYXlqcyc7XG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lJztcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlcic7XG5pbXBvcnQgaXNTYW1lT3JCZWZvcmUgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlJztcbmltcG9ydCBjdXN0b21QYXJzZUZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQnXG5cbmRheWpzLmV4dGVuZCh1dGMpO1xuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcbmRheWpzLmV4dGVuZChjdXN0b21QYXJzZUZvcm1hdCk7XG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcik7XG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWlzLXR6LWRwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHotZHAtY29udGFpbmVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi90ei1kcC1jb250YWluZXIuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgVHpEcENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRhdGE6IElEYXRlUGlja2VyRGF0YTtcbiAgcHJpdmF0ZSBwYXJzZVpvbmVJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIGRheWpzKC4uLmFyZ3MpO1xuICB9O1xuICBwcml2YXRlIHJhd1dlZWtEYXlzOiBzdHJpbmdbXSA9IFtcIlNVTlwiLCBcIk1PTlwiLCBcIlRVRVwiLCBcIldFRFwiLCBcIlRIVVwiLCBcIkZSSVwiLCBcIlNBVFwiXTtcbiAgXG4gIC8vIFNpZ25hbC1iYXNlZCBzdGF0ZSBtYW5hZ2VtZW50XG4gIHByaXZhdGUgcmVhZG9ubHkgd2Vla0RheXNTaWduYWwgPSBzaWduYWw8SVdlZWtEYXlbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRNb250aE51bWJlclNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRNb250aFNpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoPihcIkphbnVhcnlcIik7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFllYXJOdW1iZXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50TW9udGhEYXRlc1NpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoRGF0ZXNbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc05leHRNb250aERpc2FibGVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoRGF0ZXMgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uU2lnbmFsID0gc2lnbmFsPGFueT4obnVsbCk7XG4gIFxuICAvLyBUaW1lIGZ1bmN0aW9uYWxpdHkgc2lnbmFsc1xuICByZWFkb25seSBzZWxlY3RlZEhvdXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRNaW51dGVTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRBbVBtU2lnbmFsID0gc2lnbmFsPHN0cmluZz4oJ0FNJyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpc1NlbGVjdGluZ01vbnRoU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1NlbGVjdGluZ1llYXJTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF2YWlsYWJsZVllYXJzU2lnbmFsID0gc2lnbmFsPG51bWJlcltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmxlTW9udGhzU2lnbmFsID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZWRNb250aHNTaWduYWwgPSBzaWduYWw8Ym9vbGVhbltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZWRZZWFyc1NpZ25hbCA9IHNpZ25hbDxib29sZWFuW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZFllYXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1llYXJTZWxlY3Rpb25GbG93U2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgXG4gIC8vIENvbXB1dGVkIHByb3BlcnRpZXMgZm9yIHRlbXBsYXRlIGFjY2Vzc1xuICB3ZWVrRGF5cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMud2Vla0RheXNTaWduYWwoKSk7XG4gIGN1cnJlbnRNb250aE51bWJlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICBjdXJyZW50TW9udGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRNb250aFNpZ25hbCgpKTtcbiAgY3VycmVudFllYXJOdW1iZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpO1xuICBjdXJyZW50TW9udGhEYXRlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwoKSk7XG4gIGlzUHJldmlvdXNNb250aERpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbCgpKTtcbiAgaXNOZXh0TW9udGhEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNOZXh0TW9udGhEaXNhYmxlZFNpZ25hbCgpKTtcbiAgbG9jYWxTZWxlY3RlZERhdGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkpO1xuICBhbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsKCkpO1xuICBjdXJyZW50U2VsZWN0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsKCkpO1xuICBcbiAgLy8gVGltZSBmdW5jdGlvbmFsaXR5IGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgc2VsZWN0ZWRIb3VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwoKSk7XG4gIHNlbGVjdGVkTWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbCgpKTtcbiAgc2VsZWN0ZWRBbVBtID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEFtUG1TaWduYWwoKSk7XG5cbiAgaXNTZWxlY3RpbmdNb250aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNTZWxlY3RpbmdNb250aFNpZ25hbCgpKTtcbiAgaXNTZWxlY3RpbmdZZWFyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwoKSk7XG4gIGF2YWlsYWJsZVllYXJzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdmFpbGFibGVZZWFyc1NpZ25hbCgpKTtcbiAgYXZhaWxhYmxlTW9udGhzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdmFpbGFibGVNb250aHNTaWduYWwoKSk7XG4gIGRpc2FibGVkTW9udGhzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kaXNhYmxlZE1vbnRoc1NpZ25hbCgpKTtcbiAgZGlzYWJsZWRZZWFycyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGlzYWJsZWRZZWFyc1NpZ25hbCgpKTtcbiAgc2VsZWN0ZWRZZWFyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSk7XG4gIGlzWWVhclNlbGVjdGlvbkZsb3cgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzWWVhclNlbGVjdGlvbkZsb3dTaWduYWwoKSk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChDT05UQUlORVJfREFUQSkgZGF0YTogSURhdGVQaWNrZXJEYXRhLCBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcGFyc2Vab25lSW5zdGFuY2Ugd2l0aCBiZXR0ZXIgZXJyb3IgaGFuZGxpbmdcbiAgICB0aGlzLnBhcnNlWm9uZUluc3RhbmNlID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGE/LmRwQ29uZmlnPy50aW1lem9uZSkge1xuICAgICAgICAgIHJldHVybiBkYXlqcy50eihhcmdzWzBdLCBhcmdzWzFdICB8fCAnREQvTU0vWVlZWScsIHRoaXMuZGF0YS5kcENvbmZpZy50aW1lem9uZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGRheWpzKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgdGltZXpvbmUgcGFyc2luZyBlcnJvciwgZmFsbGJhY2sgdG8gbG9jYWwgdGltZVxuICAgICAgICByZXR1cm4gZGF5anMoLi4uYXJncyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBcbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgc2FmZWx5IHVzaW5nIHNpZ25hbHNcbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLm1vbnRoKCkpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKSk7XG4gICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoKSk7XG4gICAgdGhpcy53ZWVrRGF5c1NpZ25hbC5zZXQodGhpcy5yYXdXZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+ICh7XG4gICAgICBsYWJlbDogYCR7ZGF5WzBdfSR7ZGF5LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIGlzQ3VycmVudERheTogdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmRheSgpID09PSBpbmRleFxuICAgIH0pKSk7XG4gICAgXG4gICAgaWYgKCF0aGlzLmRhdGE/LmRwQ29uZmlnPy5mb3JtYXQpIHtcbiAgICAgIHRoaXMuZGF0YS5kcENvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXRhLmRwQ29uZmlnLFxuICAgICAgICBmb3JtYXQ6IERBVEVfRk9STUFUXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmKCF0aGlzLmRhdGE/LmRhdGUpe1xuICAgICAgdGhpcy5kYXRhLmRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgIH1cblxuICAgIHRoaXMuYXZhaWxhYmxlTW9udGhzU2lnbmFsLnNldChBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMiB9LCAoXywgaSkgPT4gZGF5anMoKS5tb250aChpKS5mb3JtYXQoJ01NTU0nKSkpO1xuICAgIHRoaXMuYXZhaWxhYmxlWWVhcnNTaWduYWwuc2V0KEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogMTIgfSxcbiAgICAgIChfLCBpbmRleCkgPT4gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIC0gNiArIGluZGV4XG4gICAgKSk7XG4gICAgXG4gIH1cblxuICBvbkhvdXJJbnB1dChldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lICE9PSB0cnVlKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpO1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgIGlmICh2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDEyKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMjMpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25NaW51dGVJbnB1dChldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lICE9PSB0cnVlKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpO1xuICAgIGlmICghaXNOYU4odmFsdWUpICYmIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gNTkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwuc2V0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUhvdXJJbnB1dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgIT09IHRydWUpIHJldHVybjtcbiAgICBcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEhvdXJTaWduYWwoKSA8IDEpIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldCgxKTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91clNpZ25hbCgpID4gMTIpIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91clNpZ25hbCgpIDwgMCkgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KDApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCkgPiAyMykgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KDIzKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZU1pbnV0ZUlucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSAhPT0gdHJ1ZSkgcmV0dXJuO1xuICAgIFxuICAgIGlmICh0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsKCkgPCAwKSB0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsLnNldCgwKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbCgpID4gNTkpIHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwuc2V0KDU5KTtcbiAgfVxuXG4gIGlzMTJIb3VyRm9ybWF0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSAmJiBcbiAgICAgICAgICAgKHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ0EnKSB8fCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdhJykpO1xuICB9XG5cbiAgcmV0cmFjdERheU1vbnRoKGRheTogYW55LCBtb250aDogYW55LCB5ZWFyOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBgJHtkYXl9ICR7bW9udGh9ICR7eWVhcn1gO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RGF0ZUluc3RhbmNlKCk7XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gICAgdGhpcy5jYWxjdWxhdGVEaXNhYmxlZE1vbnRoc0FuZFllYXJzKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdGltZSBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVUaW1lVmFsdWVzKCk7XG4gICAgfVxuICB9XG4gIGdldCB5ZWFyUmFuZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSAtIDZ9IC0gJHt0aGlzLnNlbGVjdGVkWWVhclNpZ25hbCgpICsgNX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVGltZVZhbHVlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLmRhdGEuZGF0ZSkge1xuICAgICAgICAvLyBUcnkgdG8gcGFyc2UgZXhpc3RpbmcgZGF0ZSBmb3IgdGltZSB2YWx1ZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIGlmIChjdXJyZW50RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIGxldCBob3VyID0gY3VycmVudERhdGUuaG91cigpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudERhdGUubWludXRlKCkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgICAgICAgIGlmIChob3VyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDEyO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gaG91ciAtIDEyO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KGhvdXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbnZhbGlkIGRhdGUsIHVzZSBkZWZhdWx0c1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VGltZVZhbHVlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBQYXJzaW5nIGVycm9yLCB1c2UgZGVmYXVsdHNcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRUaW1lVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gXG4gICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIGV4aXN0aW5nIGRhdGUsIHVzZSBkZWZhdWx0c1xuICAgICAgICB0aGlzLnNldERlZmF1bHRUaW1lVmFsdWVzKCk7XG4gICAgICB9XG4gICAgXG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRUaW1lVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIFVzZSBjdXJyZW50IHRpbWUgYXMgZGVmYXVsdCBpbnN0ZWFkIG9mIDEyOjAwIFBNXG4gICAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgICBjb25zdCBjdXJyZW50SG91ciA9IG5vdy5ob3VyKCk7XG4gICAgY29uc3QgY3VycmVudE1pbnV0ZSA9IG5vdy5taW51dGUoKTtcbiAgICBcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAvLyBDb252ZXJ0IGN1cnJlbnQgdGltZSB0byAxMi1ob3VyIGZvcm1hdFxuICAgICAgbGV0IGhvdXIxMiA9IGN1cnJlbnRIb3VyO1xuICAgICAgbGV0IGFtUG0gPSAnQU0nO1xuICAgICAgXG4gICAgICBpZiAoY3VycmVudEhvdXIgPT09IDApIHtcbiAgICAgICAgaG91cjEyID0gMTI7XG4gICAgICAgIGFtUG0gPSAnQU0nO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgaG91cjEyID0gMTI7XG4gICAgICAgIGFtUG0gPSAnUE0nO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA+IDEyKSB7XG4gICAgICAgIGhvdXIxMiA9IGN1cnJlbnRIb3VyIC0gMTI7XG4gICAgICAgIGFtUG0gPSAnUE0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW1QbSA9ICdBTSc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldChob3VyMTIpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudE1pbnV0ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbC5zZXQoYW1QbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVzZSBjdXJyZW50IHRpbWUgZGlyZWN0bHkgZm9yIDI0LWhvdXIgZm9ybWF0XG4gICAgICB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQoY3VycmVudEhvdXIpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudE1pbnV0ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbC5zZXQoJ0FNJyk7IC8vIE5vdCB1c2VkIGluIDI0LWhvdXIgZm9ybWF0IGJ1dCBrZWVwIGNvbnNpc3RlbnRcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGN1cnJlbnREYXRlSW5zdGFuY2UoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmRhdGEuZGF0ZSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBkYXlqcyh0aGlzLmRhdGEuZGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgIGlmIChzZWxlY3RlZERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFllYXJTaWduYWwuc2V0KHNlbGVjdGVkRGF0ZS55ZWFyKCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHNlbGVjdGVkRGF0ZS55ZWFyKCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZERhdGUubW9udGgoKSk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHNlbGVjdGVkRGF0ZS5tb250aCgpKSk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKCF0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwuc2V0KHtcbiAgICAgICAgICAgICAgZGF0ZTogc2VsZWN0ZWREYXRlLmRhdGUoKSxcbiAgICAgICAgICAgICAgd2Vla0RheTogc2VsZWN0ZWREYXRlLmRheSgpLFxuICAgICAgICAgICAgICBtb250aDogc2VsZWN0ZWREYXRlLm1vbnRoKCksXG4gICAgICAgICAgICAgIHllYXI6IHNlbGVjdGVkRGF0ZS55ZWFyKCksXG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWREYXk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcigpKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkubW9udGgoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSkpO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKSk7XG4gIH1cblxuXG4gIHByaXZhdGUgY2FsY3VsYXRlTWluTWF4RGF5cygpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICBpZiAobWluRGF0ZT8uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsLnNldChtaW5EYXRlLmlzU2FtZU9yQWZ0ZXIoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpKTtcbiAgICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgIGlmIChtYXhEYXRlPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWRTaWduYWwuc2V0KG1heERhdGUuaXNTYW1lT3JCZWZvcmUoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKSB7XG4gICAgY29uc3QgbWluRGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUgPyB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgY29uc3QgbWF4RGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUgPyB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgXG4gICAgdGhpcy5kaXNhYmxlZE1vbnRoc1NpZ25hbC5zZXQodGhpcy5hdmFpbGFibGVNb250aHNTaWduYWwoKS5tYXAoKG1vbnRoLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbW9udGhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIodGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSkubW9udGgoaW5kZXgpO1xuICAgICAgcmV0dXJuIChtaW5EYXRlLmlzVmFsaWQoKSAmJiBtb250aERhdGUuaXNCZWZvcmUobWluRGF0ZSwgJ21vbnRoJykpIHx8IFxuICAgICAgICAgICAgIChtYXhEYXRlLmlzVmFsaWQoKSAmJiBtb250aERhdGUuaXNBZnRlcihtYXhEYXRlLCAnbW9udGgnKSk7XG4gICAgfSkpO1xuICBcbiAgICB0aGlzLmRpc2FibGVkWWVhcnNTaWduYWwuc2V0KHRoaXMuYXZhaWxhYmxlWWVhcnNTaWduYWwoKS5tYXAoKHllYXIpID0+IHtcbiAgICAgIGNvbnN0IHllYXJEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoeWVhcik7XG4gICAgICByZXR1cm4gKG1pbkRhdGUuaXNWYWxpZCgpICYmIHllYXJEYXRlLmlzQmVmb3JlKG1pbkRhdGUsICd5ZWFyJykpIHx8IFxuICAgICAgICAgICAgIChtYXhEYXRlLmlzVmFsaWQoKSAmJiB5ZWFyRGF0ZS5pc0FmdGVyKG1heERhdGUsICd5ZWFyJykpO1xuICAgIH0pKTtcblxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbCgpKSB7XG4gICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsLnNldChtaW5EYXRlLmlzVmFsaWQoKSAmJiAoKHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgLSA2KSA8PSBtaW5EYXRlLnllYXIoKSkpO1xuICAgICAgdGhpcy5pc05leHRNb250aERpc2FibGVkU2lnbmFsLnNldChtYXhEYXRlLmlzVmFsaWQoKSAmJiAoKHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgKyA1KSA+PSBtYXhEYXRlLnllYXIoKSkpO1xuICAgIH1cbiAgICBcbiAgfVxuXG4gIG5hdmlnYXRlVmlldyhkaXJlY3Rpb246IFwiTkVYVFwiIHwgXCJQUkVWSU9VU1wiKTogdm9pZCB7XG4gICAgaWYgKChkaXJlY3Rpb24gPT09ICdORVhUJyAmJiAodGhpcy5pc05leHRNb250aERpc2FibGVkU2lnbmFsKCkgfHwgdGhpcy5pc1NlbGVjdGluZ01vbnRoU2lnbmFsKCkpKSB8fFxuICAgICAgICAoZGlyZWN0aW9uID09PSAnUFJFVklPVVMnICYmICh0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsKCkgfHwgdGhpcy5pc1NlbGVjdGluZ01vbnRoU2lnbmFsKCkpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZih0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbCgpKXtcbiAgICAgIGNvbnN0IG5ld1NlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgKyAoZGlyZWN0aW9uID09PSBcIk5FWFRcIiA/IDEyIDogLTEyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsLnNldChuZXdTZWxlY3RlZFllYXIpO1xuICAgICAgdGhpcy5hdmFpbGFibGVZZWFyc1NpZ25hbC5zZXQoQXJyYXkuZnJvbShcbiAgICAgICAgeyBsZW5ndGg6IDEyIH0sXG4gICAgICAgIChfLCBpbmRleCkgPT4gbmV3U2VsZWN0ZWRZZWFyIC0gNiArIGluZGV4XG4gICAgICApKTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGxldCB0aGlzTW9udGggOiBkYXlqcy5EYXlqcyA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gICAgICB0aGlzTW9udGggPSBkaXJlY3Rpb24gPT09IFwiTkVYVFwiID8gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpIDogdGhpc01vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpc01vbnRoLm1vbnRoKCkpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXNNb250aC5tb250aCgpKSk7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhclNpZ25hbC5zZXQodGhpc01vbnRoLnllYXIoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGgueWVhcigpKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzTW9udGgubW9udGgoKSwgdGhpc01vbnRoLnllYXIoKSkpO1xuICAgIH1cbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgfVxuXG4gIG5hdmlnYXRlTW9udGgoZGlyZWN0aW9uOiBcIk5FWFRcIiB8IFwiUFJFVklPVVNcIik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBsZXQgdGhpc01vbnRoOiBkYXlqcy5EYXlqcyA9IGRheWpzKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJORVhUXCIpIHtcbiAgICAgICAgdGhpc01vbnRoID0gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwiUFJFVklPVVNcIikge1xuICAgICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGgubW9udGgoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpc01vbnRoLm1vbnRoKCkpKTtcbiAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXNNb250aC55ZWFyKCkpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXNNb250aC5tb250aCgpLCB0aGlzTW9udGgueWVhcigpKSk7XG4gICAgICBcbiAgICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTaWxlbnRseSBoYW5kbGUgbmF2aWdhdGVNb250aCBlcnJvclxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVEYXRlcyhtb250aDogbnVtYmVyLCBjdXJyZW50WWVhck51bWJlcjogbnVtYmVyKTogSUN1cnJlbnRNb250aERhdGVzW10ge1xuICAgIGNvbnN0IGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXlzSW5Nb250aCA9IGRheWpzKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRheXNJbk1vbnRoKCk7XG4gICAgICBcbiAgICAgIGxldCBtaW5EYXRlID0gbnVsbDtcbiAgICAgIGxldCBtYXhEYXRlID0gbnVsbDtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWluRGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBtaW4gZGF0ZSBwYXJzaW5nIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWF4RGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBtYXggZGF0ZSBwYXJzaW5nIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgZm9yIChsZXQgY3VycmVudERhdGUgPSAxOyBjdXJyZW50RGF0ZSA8PSBkYXlzSW5Nb250aDsgY3VycmVudERhdGUrKykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpO1xuICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICBcbiAgICAgICAgICBsZXQgaXNEaXNhYmxlZERheSA9IHRoaXMuZGF0YS5kYXRlc0Rpc2FibGVkPy5zb21lKGQgPT4gZCA9PT0gZGF0ZVN0cmluZykgfHwgZmFsc2U7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1pbkRhdGU/LmlzVmFsaWQoKSAmJiB0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICAgICAgaXNEaXNhYmxlZERheSA9IG1pbkRhdGUuaXNBZnRlcihkYXRlLCBcImRheVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1heERhdGU/LmlzVmFsaWQoKSAmJiB0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICAgICAgaXNEaXNhYmxlZERheSA9IG1heERhdGUuaXNCZWZvcmUoZGF0ZSwgXCJkYXlcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlSW5zdGFuY2UgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpO1xuICAgICAgICAgIGNvbnN0IGlzQ3VycmVudERheSA9IGN1cnJlbnREYXRlSW5zdGFuY2UuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpID09PSBkYXlqcygpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICBcbiAgICAgICAgICBsZXQgaXNTZWxlY3RlZERheSA9IGZhbHNlO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFByaW9yaXRpemUgY3VycmVudCBzZWxlY3Rpb24gb3ZlciBwcmV2aW91c2x5IGFwcGxpZWQgZGF0ZVxuICAgICAgICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkgJiYgXG4gICAgICAgICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKSEuZGF0ZSA9PT0gY3VycmVudERhdGUgJiZcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpIS5tb250aCA9PT0gbW9udGggJiZcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpIS55ZWFyID09PSBjdXJyZW50WWVhck51bWJlcikge1xuICAgICAgICAgICAgaXNTZWxlY3RlZERheSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGEuZGF0ZSAmJiAhdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpKSB7XG4gICAgICAgICAgICAvLyBPbmx5IGNoZWNrIHByZXZpb3VzbHkgYXBwbGllZCBkYXRlIGlmIG5vIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZERheSA9IHNlbGVjdGVkRGF0ZS5pc1NhbWUoY3VycmVudERhdGVJbnN0YW5jZSwgJ2RheScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgZGF0ZS1vbmx5IGZvcm1hdCwgY29tcGFyZSB0aGUgZGF0ZSBwYXJ0cyBvbmx5XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWREYXkgPSBzZWxlY3RlZERhdGUuaXNTYW1lKGN1cnJlbnREYXRlSW5zdGFuY2UsICdkYXknKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc3RyaW5nIGNvbXBhcmlzb24gaWYgcGFyc2luZyBmYWlsc1xuICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZERheSA9IGRhdGVTdHJpbmcgPT09IHRoaXMuZGF0YS5kYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGRhdGUgY29tcGFyaXNvbiBlcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgd2Vla0RheTogZGF0ZS5kYXkoKSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRZZWFyTnVtYmVyLFxuICAgICAgICAgICAgaXNDdXJyZW50RGF5LFxuICAgICAgICAgICAgaXNTZWxlY3RlZERheSxcbiAgICAgICAgICAgIHRvYXN0TWVzc2FnZTogdGhpcy5kYXRhLm1lc3NhZ2VzPy5maW5kKHEgPT4gZGF0ZVN0cmluZyA9PT0gcS5kYXRlKT8ubWVzc2FnZSB8fCBcIlwiLFxuICAgICAgICAgICAgaXNEaXNhYmxlZERheVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBkYXRlIHByb2Nlc3NpbmcgZXJyb3JcbiAgICAgICAgICBkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgd2Vla0RheTogdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKS5kYXkoKSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRZZWFyTnVtYmVyLFxuICAgICAgICAgICAgaXNEaXNhYmxlZERheTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBkYXRlc1swXS53ZWVrRGF5OyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgZGF0ZXMudW5zaGlmdCh7IFxuICAgICAgICAgICAgZGF0ZTogMCwgXG4gICAgICAgICAgICB3ZWVrRGF5OiBpIC0gMSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRZZWFyTnVtYmVyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGdlbmVyYXRlRGF0ZXMgZXJyb3JcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgc2VsZWN0RGF5KGRheTogSUN1cnJlbnRNb250aERhdGVzKSB7XG4gICAgaWYgKGRheS5kYXRlIDw9IDApIHJldHVybjtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBiYXNlIGRhdGUgc2VsZWN0aW9uIHdpdGhvdXQgdGltZVxuICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpLmRhdGUoZGF5LmRhdGUpLmhvdXIoMCkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKSk7XG4gICAgICBcbiAgICAgIC8vIEFwcGx5IHRoZSBjdXJyZW50IHRpbWUgdmFsdWVzIHRvIHRoZSBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICBsZXQgaG91ciA9IHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsKCkgPT09ICdQTScgJiYgaG91ciAhPT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbCgpID09PSAnQU0nICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvblNpZ25hbC5zZXQodGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsKCkhXG4gICAgICAgICAgLmhvdXIoaG91cilcbiAgICAgICAgICAubWludXRlKHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwoKSkpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBsZXQgbWF4RGF0ZSA9IG51bGw7XG4gICAgICBsZXQgbWluRGF0ZSA9IG51bGw7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1heERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KS5lbmRPZihcImRheVwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgbWF4IGRhdGUgcGFyc2luZyBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KS5zdGFydE9mKFwiZGF5XCIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBtaW4gZGF0ZSBwYXJzaW5nIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsLnNldCh0aGlzLmRhdGEuYWxsb3dCb29raW5nT25EaXNhYmxlZERheSk7XG4gICAgICBcbiAgICAgIGlmICgoKCFtaW5EYXRlIHx8IHRoaXMuY3VycmVudFNlbGVjdGlvblNpZ25hbCgpIS5pc1NhbWVPckFmdGVyKG1pbkRhdGUpKSAmJiAoIW1heERhdGUgfHwgdGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsKCkhLmlzU2FtZU9yQmVmb3JlKG1heERhdGUpKSAmJiB0aGlzLmFsbG93Qm9va2luZ09uRGlzYWJsZWREYXlTaWduYWwoKSkgfHwgKCFkYXkuaXNEaXNhYmxlZERheSAmJiAhdGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsKCkpKSB7XG4gICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwuc2V0KHtcbiAgICAgICAgICAuLi5kYXksXG4gICAgICAgICAgbW9udGg6IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksXG4gICAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gRm9yY2UgY2FsZW5kYXIgcmUtcmVuZGVyIHRvIHNob3cgaGlnaGxpZ2h0aW5nXG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgYXBwbHkgd2hlbiBuZWl0aGVyIHRpbWUgbm9yIGFwcGx5IGJ1dHRvbiBpcyBlbmFibGVkLCBvdGhlcndpc2Ugd2FpdCBmb3IgdXNlciBhY3Rpb25cbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSAmJiAhdGhpcy5kYXRhLmRwQ29uZmlnLnNob3dBcHBseUJ1dHRvbikge1xuICAgICAgICAgIHRoaXMuYXBwbHlEYXRlKGRheSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGRheS50b2FzdE1lc3NhZ2UgfHwgKHRoaXMuYWxsb3dCb29raW5nT25EaXNhYmxlZERheSAmJiBkYXkudG9hc3RNZXNzYWdlKSkge1xuICAgICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBzZWxlY3REYXkgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhcHBseURhdGUoZGF5PzogSUN1cnJlbnRNb250aERhdGVzKSB7XG4gICAgbGV0IGRhdGU6IHN0cmluZztcbiAgICBcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgdGltZSBpbnB1dCB2YWx1ZXMgd2hlbiB0aW1lIGlzIGVuYWJsZWQsIHJlZ2FyZGxlc3Mgb2YgY3VycmVudFNlbGVjdGlvblxuICAgICAgICBsZXQgaG91ciA9IHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsKCkgPT09ICdQTScgJiYgaG91ciAhPT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbCgpID09PSAnQU0nICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBkYXRlIGluc3RhbmNlIHdpdGggdGhlIHNlbGVjdGVkIHRpbWVcbiAgICAgICAgY29uc3QgZmluYWxTZWxlY3Rpb24gPSBkYXlqcygpXG4gICAgICAgICAgLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5kYXRlKHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKT8uZGF0ZSB8fCBkYXk/LmRhdGUgfHwgZGF5anMoKS5kYXRlKCkpXG4gICAgICAgICAgLmhvdXIoaG91cilcbiAgICAgICAgICAubWludXRlKHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwoKSlcbiAgICAgICAgICAuc2Vjb25kKDApXG4gICAgICAgICAgLm1pbGxpc2Vjb25kKDApO1xuICAgICAgICBcbiAgICAgICAgZGF0ZSA9IGZpbmFsU2VsZWN0aW9uLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERhdGUtb25seSBmb3JtYXQgLSBubyB0aW1lXG4gICAgICAgIGRhdGUgPSBkYXlqcygpXG4gICAgICAgICAgLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5kYXRlKGRheSA/IGRheS5kYXRlIDogdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpPy5kYXRlIHx8IGRheWpzKCkuZGF0ZSgpKVxuICAgICAgICAgIC5ob3VyKDApXG4gICAgICAgICAgLm1pbnV0ZSgwKVxuICAgICAgICAgIC5zZWNvbmQoMClcbiAgICAgICAgICAubWlsbGlzZWNvbmQoMClcbiAgICAgICAgICAuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoZGF5IHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKSB8fCAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpKSB7XG4gICAgICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKGRhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYW5jZWxEYXRlUGlja2VyKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBhcHBseURhdGUgZXJyb3JcbiAgICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKFwiXCIpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duLmVzY1wiKVxuICBjbG9zZU9uRXNjKCkge1xuICAgIHRoaXMuY2FuY2VsRGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgY2FuY2VsRGF0ZVBpY2tlcigpIHtcbiAgICB0aGlzLmRhdGEuZGF0ZUNoYW5nZShcIlwiKTtcbiAgfVxuXG4gIHRvZ2dsZU1vbnRoU2VsZWN0b3IoKSB7XG4gICAgaWYodGhpcy5pc1llYXJTZWxlY3Rpb25GbG93U2lnbmFsKCkpIHJldHVybjtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwuc2V0KCF0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwoKSk7XG4gICAgdGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgfVxuXG4gIHRvZ2dsZVllYXJTZWxlY3RvcigpIHtcbiAgICB0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbC5zZXQoIXRoaXMuaXNTZWxlY3RpbmdZZWFyU2lnbmFsKCkpO1xuICAgIHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpO1xuICAgIHRoaXMuYXZhaWxhYmxlWWVhcnNTaWduYWwuc2V0KEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogMTIgfSxcbiAgICAgIChfLCBpbmRleCkgPT4gdGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSAtIDYgKyBpbmRleFxuICAgICkpO1xuICAgIHRoaXMuaXNTZWxlY3RpbmdNb250aFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY2FsY3VsYXRlRGlzYWJsZWRNb250aHNBbmRZZWFycygpO1xuXG4gIH1cblxuICByZXNldERhdGVTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbC5zZXQoe1xuICAgICAgZGF0ZTogMCxcbiAgICAgIHdlZWtEYXk6IDAsXG4gICAgICBpc0N1cnJlbnREYXk6IGZhbHNlLFxuICAgICAgaXNTZWxlY3RlZERheTogZmFsc2UsXG4gICAgICBpc0Rpc2FibGVkRGF5OiBmYWxzZSxcbiAgICAgIHRvYXN0TWVzc2FnZTogJydcbiAgICB9KTtcbiAgICB0aGlzLmRhdGEuZGF0ZSA9ICcnO1xuICB9XG5cbiAgc2VsZWN0TW9udGgobW9udGg6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzLmF2YWlsYWJsZU1vbnRoc1NpZ25hbCgpLmluZGV4T2YobW9udGgpKTtcbiAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSkpO1xuICAgIHRoaXMuaXNTZWxlY3RpbmdNb250aFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNZZWFyU2VsZWN0aW9uRmxvd1NpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMucmVzZXREYXRlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICB9XG5cbiAgc2VsZWN0WWVhcih5ZWFyOiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkWWVhclNpZ25hbC5zZXQoeWVhcik7XG4gICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQoeWVhcik7XG4gICAgdGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwuc2V0KHRydWUpO1xuICAgIHRoaXMuaXNZZWFyU2VsZWN0aW9uRmxvd1NpZ25hbC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5yZXNldERhdGVTZWxlY3Rpb24oKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiZGF0YS5kaXNhYmxlQm94U2hhZG93PydyZW1vdmUtYm94LXNoYWRvdyc6JydcIiBhcmlhLWxhYmVsPVwiZGF0ZSBwaWNrZXJcIiBjZGtUcmFwRm9jdXMgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgPGRpdiB0YWJpbmRleD1cIi0xXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2hlYWRlclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uXCJcbiAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVZpZXcoJ1BSRVZJT1VTJylcIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBNb250aFwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwibmF2aWdhdGVWaWV3KCdQUkVWSU9VUycpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNQcmV2aW91c01vbnRoRGlzYWJsZWQoKSB8fCBpc1NlbGVjdGluZ01vbnRoKClcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICA+PC9wYXRoPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU2VsZWN0aW5nWWVhcigpXCIgKGNsaWNrKT1cInRvZ2dsZU1vbnRoU2VsZWN0b3IoKVwiIGNsYXNzPVwibW9udGgtaGVhZGVyXCI+XG4gICAgICB7eyBpc1llYXJTZWxlY3Rpb25GbG93KCkgPyBzZWxlY3RlZFllYXIoKSA6IGF2YWlsYWJsZU1vbnRocygpW2N1cnJlbnRNb250aE51bWJlcigpXSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhaXNTZWxlY3RpbmdNb250aCgpXCIgKGNsaWNrKT1cInRvZ2dsZVllYXJTZWxlY3RvcigpXCIgY2xhc3M9XCJ5ZWFyLWhlYWRlclwiPlxuICAgICAge3sgaXNTZWxlY3RpbmdZZWFyKCkgPyB5ZWFyUmFuZ2UgOiBjdXJyZW50WWVhck51bWJlcigpIH19XG4gICAgPC9kaXY+XG5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uXCJcbiAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVZpZXcoJ05FWFQnKVwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgYXJpYS1sYWJlbD1cIk5leHQgTW9udGhcIlxuICAgICAgKGtleXVwLmVudGVyKT1cIm5hdmlnYXRlVmlldygnTkVYVCcpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNOZXh0TW9udGhEaXNhYmxlZCgpIHx8IGlzU2VsZWN0aW5nTW9udGgoKVxuICAgICAgfVwiXG4gICAgPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgID48L3BhdGg+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fYm9keVwiPlxuXG4gICAgPGRpdiAqbmdJZj1cImlzU2VsZWN0aW5nTW9udGgoKSAmJiAhaXNTZWxlY3RpbmdZZWFyKClcIiBjbGFzcz1cIm1vbnRoLXNlbGVjdG9yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1vbnRoIG9mIGF2YWlsYWJsZU1vbnRocygpOyBsZXQgaSA9IGluZGV4XCIgXG4gICAgICAgICAgICBjbGFzcz1cIm1vbnRoXCIgXG4gICAgICAgICAgICAoY2xpY2spPVwiIWRpc2FibGVkTW9udGhzKClbaV0gJiYgc2VsZWN0TW9udGgobW9udGgpXCIgXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdkaXNhYmxlLW1vbnRoJzogZGlzYWJsZWRNb250aHMoKVtpXSxcbiAgICAgICAgICAgICAgJ3NlbGVjdC1tb250aCc6ICFkaXNhYmxlZE1vbnRocygpW2N1cnJlbnRNb250aE51bWJlcigpXSAmJiBtb250aCA9PT0gYXZhaWxhYmxlTW9udGhzKClbY3VycmVudE1vbnRoTnVtYmVyKCldXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAge3sgbW9udGggfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgXG4gICAgPGRpdiAqbmdJZj1cImlzU2VsZWN0aW5nWWVhcigpICYmICFpc1NlbGVjdGluZ01vbnRoKClcIiBjbGFzcz1cInllYXItc2VsZWN0b3JcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgeWVhciBvZiBhdmFpbGFibGVZZWFycygpOyBsZXQgaSA9IGluZGV4XCIgXG4gICAgICAgICAgICBjbGFzcz1cInllYXJcIiBcbiAgICAgICAgICAgIChjbGljayk9XCIhZGlzYWJsZWRZZWFycygpW2ldICYmIHNlbGVjdFllYXIoeWVhcilcIiBcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2Rpc2FibGUteWVhcic6IGRpc2FibGVkWWVhcnMoKVtpXSxcbiAgICAgICAgICAgICAgJ3NlbGVjdC15ZWFyJzogeWVhciA9PT0gY3VycmVudFllYXJOdW1iZXIoKVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCIhaXNTZWxlY3RpbmdNb250aCgpICYmICFpc1NlbGVjdGluZ1llYXIoKVwiIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5cygpXCI+XG4gICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsgJ2N1cnJlbnQtZGF5Jzogd2Vla0RheS5pc0N1cnJlbnREYXkgfVwiPnt7IHdlZWtEYXkubGFiZWwgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU2VsZWN0aW5nTW9udGgoKSAmJiAhaXNTZWxlY3RpbmdZZWFyKClcIiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19kYXlzXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2RheVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnc2VsZWN0ZWQtZGF5JzogZGF5LmlzU2VsZWN0ZWREYXksXG4gICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5LFxuICAgICAgICAgICdpcy12YWxpZC1kYXRlJzogZGF5LmRhdGUgPiAwICYmICFkYXkuaXNTZWxlY3RlZERheVxuICAgICAgICB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiBjdXJyZW50TW9udGhEYXRlcygpXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdERheShkYXkpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdERheShkYXkpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImRheS5kYXRlID4gMFwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cImRheS5pc0Rpc2FibGVkRGF5ID8gLTEgOiAwXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnY3VycmVudC1kYXknOiBkYXkuaXNDdXJyZW50RGF5LFxuICAgICAgICAgICAgJ3NlbGVjdGVkLWRheSc6IGRheS5pc1NlbGVjdGVkRGF5LFxuICAgICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXRyYWN0RGF5TW9udGgoZGF5LmRhdGUsIGN1cnJlbnRNb250aCgpLCBjdXJyZW50WWVhck51bWJlcigpKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBkYXkuZGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUaW1lIFBpY2tlciBTZWN0aW9uIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3RpbWVcIiAqbmdJZj1cImRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlci1oZWFkZXJcIj5cbiAgICAgIDxzcGFuPlRpbWU8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRpbWUtcGlja2VyLWNvbnRyb2xzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dC1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiaG91cklucHV0XCI+SG91cjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICBpZD1cImhvdXJJbnB1dFwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxuICAgICAgICAgIFttaW5dPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEgOiAwXCJcbiAgICAgICAgICBbbWF4XT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxMiA6IDIzXCJcbiAgICAgICAgICBbc3RlcF09XCIxXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEhvdXIoKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRIb3VyU2lnbmFsLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICAoaW5wdXQpPVwib25Ib3VySW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVIb3VySW5wdXQoKVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0XCJcbiAgICAgICAgICBbdGl0bGVdPVwiaXMxMkhvdXJGb3JtYXQoKSA/ICdFbnRlciBob3VyICgxLTEyKScgOiAnRW50ZXIgaG91ciAoMC0yMyknXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0LWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJtaW51dGVJbnB1dFwiPk1pbnV0ZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICBpZD1cIm1pbnV0ZUlucHV0XCJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgbWluPVwiMFwiIFxuICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICBbc3RlcF09XCIxXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZE1pbnV0ZSgpXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGlucHV0KT1cIm9uTWludXRlSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVNaW51dGVJbnB1dCgpXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXRcIlxuICAgICAgICAgIHRpdGxlPVwiRW50ZXIgbWludXRlICgwLTU5KVwiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYW0tcG0tc2VsZWN0b3JcIiAqbmdJZj1cImlzMTJIb3VyRm9ybWF0KClcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImFtUG1TZWxlY3RcIj5BTS9QTTwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3QgXG4gICAgICAgICAgaWQ9XCJhbVBtU2VsZWN0XCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEFtUG0oKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImFtLXBtLXNlbGVjdFwiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19mb290ZXJcIiAqbmdJZj1cImRhdGEuZHBDb25maWcuc2hvd0FwcGx5QnV0dG9uIHx8IGRhdGEuZHBDb25maWcuZW5hYmxlVGltZVwiPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiBzaXplPVwibWRcIiB0eXBlPVwiJ25vbmUnXCIgKGNsaWNrKT1cImNhbmNlbERhdGVQaWNrZXIoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiBzaXplPVwibWRcIiB0eXBlPVwicHJpbWFyeVwiIChjbGljayk9XCJhcHBseURhdGUoKVwiIFtkaXNhYmxlZF09XCIhKGRhdGEuZGF0ZSB8fCBsb2NhbFNlbGVjdGVkRGF0ZSgpPy5kYXRlKVwiPkFwcGx5PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
932
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHAtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVwaWNrZXJfdjIvdHotZHAtY29udGFpbmVyL3R6LWRwLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcGlja2VyX3YyL3R6LWRwLWNvbnRhaW5lci90ei1kcC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sS0FBb0IsTUFBTSxPQUFPLENBQUM7QUFDekMsT0FBTyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxjQUFjLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7O0lDVzFELCtCQUFxRjtJQUFyRCwrS0FBUyw0QkFBcUIsS0FBQztJQUM3RCxZQUNGO0lBQUEsaUJBQU07OztJQURKLGNBQ0Y7SUFERSw2SUFDRjs7OztJQUNBLCtCQUFvRjtJQUFuRCwrS0FBUywyQkFBb0IsS0FBQztJQUM3RCxZQUNGO0lBQUEsaUJBQU07OztJQURKLGNBQ0Y7SUFERSx5R0FDRjs7OztJQXlCSSwrQkFNTztJQUpILHFRQUFVLHVCQUFnQixVQUFPLDRCQUFr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RiwwREFHRDs7WUFLcEYsOEJBU0M7WUFKQyxBQUhBLGdHQUFTLGlCQUFhLE1BQU0sQ0FBQyxJQUFDLCtGQUdmLGlCQUFhLE1BQU0sQ0FBQyxJQUFDOztZQUtwQyw4QkFBK0Y7WUFDN0YsMkJBR1E7WUFHZCxBQURFLEFBREUsaUJBQU0sRUFDRixFQUNGOztZQUNOLCtCQUF3QztZQW1DdEMsQUFMQSxBQWRBLEFBZEEsMEVBQTZFLDZEQWNELDZEQWNrQiw2REFLSjtZQTBCNUYsaUJBQU07WUFxRE4sQUFsREEsMkVBQWtGLDZEQWtEMEI7WUFJOUcsaUJBQU07O1lBcksySCxBQUEvRiw4RUFBd0QsaUNBQXVFO1lBUzNKLGVBRUU7WUFGRiw4R0FFRTtZQVVFLGVBQXdCO1lBQXhCLDZDQUF3QjtZQUd4QixjQUF5QjtZQUF6Qiw4Q0FBeUI7WUFXN0IsY0FFRTtZQUZGLDBHQUVFO1lBWUUsZUFBOEM7WUFBOUMsdUVBQThDO1lBYzlDLGNBQThDO1lBQTlDLHVFQUE4QztZQWM5QyxjQUErQztZQUEvQyx3RUFBK0M7WUFLL0MsY0FBK0M7WUFBL0Msd0VBQStDO1lBNkJkLGNBQXVDO1lBQXZDLDREQUF1QztZQWtEckMsY0FBK0Q7WUFBL0Qsd0ZBQStEOzs7aUZEMUkvRixzQkFBc0I7Y0FMbEMsU0FBUzsyQkFDRSxXQUFXOztzQkFxSFIsTUFBTTt1QkFBQyxjQUFjO2dEQWlpQmxDLFVBQVU7a0JBRFQsWUFBWTttQkFBQyxhQUFhOztrRkFqcEJoQixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkluaXQsIHNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ09OVEFJTkVSX0RBVEEsIERBVEVfRk9STUFUIH0gZnJvbSBcIi4uL2RhdGVwaWNrZXItY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBJQ3VycmVudE1vbnRoLCBJQ3VycmVudE1vbnRoRGF0ZXMsIElEYXRlUGlja2VyRGF0YSwgSVdlZWtEYXkgfSBmcm9tIFwiLi4vbW9kZWxzL2RwLWNvbmZpZy5tb2RlbFwiO1xuaW1wb3J0IHsgZ2V0TW9udGggfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL3RvYXN0XCI7XG5pbXBvcnQgZGF5anMsIHsgRGF5anMsIHR6IH0gZnJvbSAnZGF5anMnO1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXInO1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZSc7XG5pbXBvcnQgY3VzdG9tUGFyc2VGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0J1xuXG5kYXlqcy5leHRlbmQodXRjKTtcbmRheWpzLmV4dGVuZCh0aW1lem9uZSk7XG5kYXlqcy5leHRlbmQoY3VzdG9tUGFyc2VGb3JtYXQpO1xuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpO1xuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy10ei1kcFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3R6LWRwLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHotZHAtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIFR6RHBDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBkYXRhOiBJRGF0ZVBpY2tlckRhdGE7XG4gIHByaXZhdGUgcGFyc2Vab25lSW5zdGFuY2UgPSAoLi4uYXJncykgPT4ge1xuICAgIHJldHVybiBkYXlqcyguLi5hcmdzKTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgZGF0ZSBzdHJpbmcgdXNpbmcgY29uZmlndXJlZCBmb3JtYXQgd2l0aCBmYWxsYmFja1xuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKGRhdGVTdHJpbmc6IHN0cmluZyk6IGRheWpzLkRheWpzIHtcbiAgICBpZiAoIWRhdGVTdHJpbmcgfHwgZGF0ZVN0cmluZyA9PT0gJ0ludmFsaWQgRGF0ZScgfHwgZGF0ZVN0cmluZyA9PT0gJ3VuZGVmaW5lZCcgfHwgZGF0ZVN0cmluZyA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gZGF5anMoJ2ludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvLyBGaXJzdCB0cnkgdGhlIGNvbmZpZ3VyZWQgZm9ybWF0XG4gICAgY29uc3QgY29uZmlndXJlZEZvcm1hdCA9IHRoaXMuZGF0YT8uZHBDb25maWc/LmZvcm1hdDtcbiAgICBpZiAoY29uZmlndXJlZEZvcm1hdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZShkYXRlU3RyaW5nLCBjb25maWd1cmVkRm9ybWF0KTtcbiAgICAgICAgaWYgKHBhcnNlZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBDb250aW51ZSB0byBmYWxsYmFjayBmb3JtYXRzXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gY29tbW9uIGZvcm1hdHMgaWYgY29uZmlndXJlZCBmb3JtYXQgZmFpbHNcbiAgICBjb25zdCBmYWxsYmFja0Zvcm1hdHMgPSBbXG4gICAgICAnREQvTU1NL1lZWVknLFxuICAgICAgJ0REL01NL1lZWVknLFxuICAgICAgJ0RELU1NTS1ZWVlZJyxcbiAgICAgICdERC1NTS1ZWVlZJyxcbiAgICAgICdZWVlZLU1NLUREJ1xuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmYWxsYmFja0Zvcm1hdHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoZGF0ZVN0cmluZywgZm9ybWF0KTtcbiAgICAgICAgaWYgKHBhcnNlZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBDb250aW51ZSB0byBuZXh0IGZvcm1hdFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGFsbCBmb3JtYXRzIGZhaWwsIHRyeSBwYXJzaW5nIHdpdGhvdXQgZm9ybWF0IChsZXQgZGF5anMgZ3Vlc3MpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoZGF0ZVN0cmluZyk7XG4gICAgICBpZiAocGFyc2VkLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBwYXJzZSBkYXRlIHdpdGggYW55IGZvcm1hdDonLCBkYXRlU3RyaW5nLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRheWpzKCdpbnZhbGlkJyk7XG4gIH1cbiAgcHJpdmF0ZSByYXdXZWVrRGF5czogc3RyaW5nW10gPSBbXCJTVU5cIiwgXCJNT05cIiwgXCJUVUVcIiwgXCJXRURcIiwgXCJUSFVcIiwgXCJGUklcIiwgXCJTQVRcIl07XG4gIFxuICAvLyBTaWduYWwtYmFzZWQgc3RhdGUgbWFuYWdlbWVudFxuICBwcml2YXRlIHJlYWRvbmx5IHdlZWtEYXlzU2lnbmFsID0gc2lnbmFsPElXZWVrRGF5W10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50TW9udGhOdW1iZXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50TW9udGhTaWduYWwgPSBzaWduYWw8SUN1cnJlbnRNb250aD4oXCJKYW51YXJ5XCIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudE1vbnRoRGF0ZXNTaWduYWwgPSBzaWduYWw8SUN1cnJlbnRNb250aERhdGVzW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNOZXh0TW9udGhEaXNhYmxlZFNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTZWxlY3RlZERhdGVTaWduYWwgPSBzaWduYWw8SUN1cnJlbnRNb250aERhdGVzIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dCb29raW5nT25EaXNhYmxlZERheVNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblNpZ25hbCA9IHNpZ25hbDxhbnk+KG51bGwpO1xuICBcbiAgLy8gVGltZSBmdW5jdGlvbmFsaXR5IHNpZ25hbHNcbiAgcmVhZG9ubHkgc2VsZWN0ZWRIb3VyU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkTWludXRlU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkQW1QbVNpZ25hbCA9IHNpZ25hbDxzdHJpbmc+KCdBTScpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNTZWxlY3RpbmdNb250aFNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNTZWxlY3RpbmdZZWFyU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdmFpbGFibGVZZWFyc1NpZ25hbCA9IHNpZ25hbDxudW1iZXJbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGF2YWlsYWJsZU1vbnRoc1NpZ25hbCA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc2FibGVkTW9udGhzU2lnbmFsID0gc2lnbmFsPGJvb2xlYW5bXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc2FibGVkWWVhcnNTaWduYWwgPSBzaWduYWw8Ym9vbGVhbltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRZZWFyU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNZZWFyU2VsZWN0aW9uRmxvd1NpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIFxuICAvLyBDb21wdXRlZCBwcm9wZXJ0aWVzIGZvciB0ZW1wbGF0ZSBhY2Nlc3NcbiAgd2Vla0RheXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLndlZWtEYXlzU2lnbmFsKCkpO1xuICBjdXJyZW50TW9udGhOdW1iZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKTtcbiAgY3VycmVudE1vbnRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50TW9udGhTaWduYWwoKSk7XG4gIGN1cnJlbnRZZWFyTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKTtcbiAgY3VycmVudE1vbnRoRGF0ZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRNb250aERhdGVzU2lnbmFsKCkpO1xuICBpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWRTaWduYWwoKSk7XG4gIGlzTmV4dE1vbnRoRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWRTaWduYWwoKSk7XG4gIGxvY2FsU2VsZWN0ZWREYXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpKTtcbiAgYWxsb3dCb29raW5nT25EaXNhYmxlZERheSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWxsb3dCb29raW5nT25EaXNhYmxlZERheVNpZ25hbCgpKTtcbiAgY3VycmVudFNlbGVjdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudFNlbGVjdGlvblNpZ25hbCgpKTtcbiAgXG4gIC8vIFRpbWUgZnVuY3Rpb25hbGl0eSBjb21wdXRlZCBwcm9wZXJ0aWVzXG4gIHNlbGVjdGVkSG91ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCkpO1xuICBzZWxlY3RlZE1pbnV0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwoKSk7XG4gIHNlbGVjdGVkQW1QbSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsKCkpO1xuXG4gIGlzU2VsZWN0aW5nTW9udGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwoKSk7XG4gIGlzU2VsZWN0aW5nWWVhciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNTZWxlY3RpbmdZZWFyU2lnbmFsKCkpO1xuICBhdmFpbGFibGVZZWFycyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXZhaWxhYmxlWWVhcnNTaWduYWwoKSk7XG4gIGF2YWlsYWJsZU1vbnRocyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXZhaWxhYmxlTW9udGhzU2lnbmFsKCkpO1xuICBkaXNhYmxlZE1vbnRocyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGlzYWJsZWRNb250aHNTaWduYWwoKSk7XG4gIGRpc2FibGVkWWVhcnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRpc2FibGVkWWVhcnNTaWduYWwoKSk7XG4gIHNlbGVjdGVkWWVhciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkpO1xuICBpc1llYXJTZWxlY3Rpb25GbG93ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc1llYXJTZWxlY3Rpb25GbG93U2lnbmFsKCkpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQ09OVEFJTkVSX0RBVEEpIGRhdGE6IElEYXRlUGlja2VyRGF0YSwgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHBhcnNlWm9uZUluc3RhbmNlIHdpdGggYmV0dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy5kYXRhPy5kcENvbmZpZz8udGltZXpvbmUpIHtcbiAgICAgICAgICByZXR1cm4gZGF5anMudHooYXJnc1swXSwgYXJnc1sxXSAgfHwgJ0REL01NL1lZWVknLCB0aGlzLmRhdGEuZHBDb25maWcudGltZXpvbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBkYXlqcyguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIHRpbWV6b25lIHBhcnNpbmcgZXJyb3IsIGZhbGxiYWNrIHRvIGxvY2FsIHRpbWVcbiAgICAgICAgcmV0dXJuIGRheWpzKC4uLmFyZ3MpO1xuICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIHNhZmVseSB1c2luZyBzaWduYWxzXG4gICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwuc2V0KHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5tb250aCgpKTtcbiAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSkpO1xuICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKCkpO1xuICAgIHRoaXMud2Vla0RheXNTaWduYWwuc2V0KHRoaXMucmF3V2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuICAgICAgbGFiZWw6IGAke2RheVswXX0ke2RheS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICBpc0N1cnJlbnREYXk6IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5kYXkoKSA9PT0gaW5kZXhcbiAgICB9KSkpO1xuICAgIFxuICAgIGlmICghdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0KSB7XG4gICAgICB0aGlzLmRhdGEuZHBDb25maWcgPSB7XG4gICAgICAgIC4uLnRoaXMuZGF0YS5kcENvbmZpZyxcbiAgICAgICAgZm9ybWF0OiBEQVRFX0ZPUk1BVFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZighdGhpcy5kYXRhPy5kYXRlKXtcbiAgICAgIHRoaXMuZGF0YS5kYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICB9XG5cbiAgICB0aGlzLmF2YWlsYWJsZU1vbnRoc1NpZ25hbC5zZXQoQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIGkpID0+IGRheWpzKCkubW9udGgoaSkuZm9ybWF0KCdNTU1NJykpKTtcbiAgICB0aGlzLmF2YWlsYWJsZVllYXJzU2lnbmFsLnNldChBcnJheS5mcm9tKFxuICAgICAgeyBsZW5ndGg6IDEyIH0sXG4gICAgICAoXywgaW5kZXgpID0+IHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSAtIDYgKyBpbmRleFxuICAgICkpO1xuICAgIFxuICB9XG5cbiAgb25Ib3VySW5wdXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSAhPT0gdHJ1ZSkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgICBpZiAodmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSAxMikge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDIzKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uTWludXRlSW5wdXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSAhPT0gdHJ1ZSkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDU5KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsLnNldCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVIb3VySW5wdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lICE9PSB0cnVlKSByZXR1cm47XG4gICAgXG4gICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCkgPCAxKSB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQoMSk7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEhvdXJTaWduYWwoKSA+IDEyKSB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQoMTIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEhvdXJTaWduYWwoKSA8IDApIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldCgwKTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91clNpZ25hbCgpID4gMjMpIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldCgyMyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVNaW51dGVJbnB1dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgIT09IHRydWUpIHJldHVybjtcbiAgICBcbiAgICBpZiAodGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbCgpIDwgMCkgdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoMCk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwoKSA+IDU5KSB0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsLnNldCg1OSk7XG4gIH1cblxuICBpczEySG91ckZvcm1hdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUgJiYgXG4gICAgICAgICAgICh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykgfHwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnYScpKTtcbiAgfVxuXG4gIHJldHJhY3REYXlNb250aChkYXk6IGFueSwgbW9udGg6IGFueSwgeWVhcjogYW55KTogYW55IHtcbiAgICByZXR1cm4gYCR7ZGF5fSAke21vbnRofSAke3llYXJ9YDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudERhdGVJbnN0YW5jZSgpO1xuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICAgIHRoaXMuY2FsY3VsYXRlRGlzYWJsZWRNb250aHNBbmRZZWFycygpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHRpbWUgaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplVGltZVZhbHVlcygpO1xuICAgIH1cbiAgfVxuICBnZXQgeWVhclJhbmdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgLSA2fSAtICR7dGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSArIDV9YDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVRpbWVWYWx1ZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICBpZiAodGhpcy5kYXRhLmRhdGUpIHtcbiAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGV4aXN0aW5nIGRhdGUgZm9yIHRpbWUgdmFsdWVzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICBpZiAoY3VycmVudERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICBsZXQgaG91ciA9IGN1cnJlbnREYXRlLmhvdXIoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwuc2V0KGN1cnJlbnREYXRlLm1pbnV0ZSgpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgICAgICAgICBpZiAoaG91ciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAxMjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IGhvdXIgLSAxMjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldChob3VyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSW52YWxpZCBkYXRlLCB1c2UgZGVmYXVsdHNcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFRpbWVWYWx1ZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gUGFyc2luZyBlcnJvciwgdXNlIGRlZmF1bHRzXG4gICAgICAgICAgdGhpcy5zZXREZWZhdWx0VGltZVZhbHVlcygpO1xuICAgICAgICB9XG4gICAgICB9IFxuICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBObyBleGlzdGluZyBkYXRlLCB1c2UgZGVmYXVsdHNcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0VGltZVZhbHVlcygpO1xuICAgICAgfVxuICAgIFxuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0VGltZVZhbHVlcygpOiB2b2lkIHtcbiAgICAvLyBVc2UgY3VycmVudCB0aW1lIGFzIGRlZmF1bHQgaW5zdGVhZCBvZiAxMjowMCBQTVxuICAgIGNvbnN0IG5vdyA9IGRheWpzKCk7XG4gICAgY29uc3QgY3VycmVudEhvdXIgPSBub3cuaG91cigpO1xuICAgIGNvbnN0IGN1cnJlbnRNaW51dGUgPSBub3cubWludXRlKCk7XG4gICAgXG4gICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgLy8gQ29udmVydCBjdXJyZW50IHRpbWUgdG8gMTItaG91ciBmb3JtYXRcbiAgICAgIGxldCBob3VyMTIgPSBjdXJyZW50SG91cjtcbiAgICAgIGxldCBhbVBtID0gJ0FNJztcbiAgICAgIFxuICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAwKSB7XG4gICAgICAgIGhvdXIxMiA9IDEyO1xuICAgICAgICBhbVBtID0gJ0FNJztcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPT09IDEyKSB7XG4gICAgICAgIGhvdXIxMiA9IDEyO1xuICAgICAgICBhbVBtID0gJ1BNJztcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPiAxMikge1xuICAgICAgICBob3VyMTIgPSBjdXJyZW50SG91ciAtIDEyO1xuICAgICAgICBhbVBtID0gJ1BNJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFtUG0gPSAnQU0nO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQoaG91cjEyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwuc2V0KGN1cnJlbnRNaW51dGUpO1xuICAgICAgdGhpcy5zZWxlY3RlZEFtUG1TaWduYWwuc2V0KGFtUG0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgY3VycmVudCB0aW1lIGRpcmVjdGx5IGZvciAyNC1ob3VyIGZvcm1hdFxuICAgICAgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KGN1cnJlbnRIb3VyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwuc2V0KGN1cnJlbnRNaW51dGUpO1xuICAgICAgdGhpcy5zZWxlY3RlZEFtUG1TaWduYWwuc2V0KCdBTScpOyAvLyBOb3QgdXNlZCBpbiAyNC1ob3VyIGZvcm1hdCBidXQga2VlcCBjb25zaXN0ZW50XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RGF0ZUluc3RhbmNlKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5kYXRhLmRhdGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKHRoaXMuZGF0YS5kYXRlKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChzZWxlY3RlZERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFllYXJTaWduYWwuc2V0KHNlbGVjdGVkRGF0ZS55ZWFyKCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHNlbGVjdGVkRGF0ZS55ZWFyKCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZERhdGUubW9udGgoKSk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHNlbGVjdGVkRGF0ZS5tb250aCgpKSk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKCF0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwuc2V0KHtcbiAgICAgICAgICAgICAgZGF0ZTogc2VsZWN0ZWREYXRlLmRhdGUoKSxcbiAgICAgICAgICAgICAgd2Vla0RheTogc2VsZWN0ZWREYXRlLmRheSgpLFxuICAgICAgICAgICAgICBtb250aDogc2VsZWN0ZWREYXRlLm1vbnRoKCksXG4gICAgICAgICAgICAgIHllYXI6IHNlbGVjdGVkRGF0ZS55ZWFyKCksXG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWREYXk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcigpKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkubW9udGgoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSkpO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKSk7XG4gIH1cblxuXG4gIHByaXZhdGUgY2FsY3VsYXRlTWluTWF4RGF5cygpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICBpZiAobWluRGF0ZT8uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsLnNldChtaW5EYXRlLmlzU2FtZU9yQWZ0ZXIoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpKTtcbiAgICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgIGlmIChtYXhEYXRlPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWRTaWduYWwuc2V0KG1heERhdGUuaXNTYW1lT3JCZWZvcmUoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKSB7XG4gICAgY29uc3QgbWluRGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUgPyB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgY29uc3QgbWF4RGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUgPyB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgXG4gICAgdGhpcy5kaXNhYmxlZE1vbnRoc1NpZ25hbC5zZXQodGhpcy5hdmFpbGFibGVNb250aHNTaWduYWwoKS5tYXAoKG1vbnRoLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbW9udGhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIodGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSkubW9udGgoaW5kZXgpO1xuICAgICAgcmV0dXJuIChtaW5EYXRlLmlzVmFsaWQoKSAmJiBtb250aERhdGUuaXNCZWZvcmUobWluRGF0ZSwgJ21vbnRoJykpIHx8IFxuICAgICAgICAgICAgIChtYXhEYXRlLmlzVmFsaWQoKSAmJiBtb250aERhdGUuaXNBZnRlcihtYXhEYXRlLCAnbW9udGgnKSk7XG4gICAgfSkpO1xuICBcbiAgICB0aGlzLmRpc2FibGVkWWVhcnNTaWduYWwuc2V0KHRoaXMuYXZhaWxhYmxlWWVhcnNTaWduYWwoKS5tYXAoKHllYXIpID0+IHtcbiAgICAgIGNvbnN0IHllYXJEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoeWVhcik7XG4gICAgICByZXR1cm4gKG1pbkRhdGUuaXNWYWxpZCgpICYmIHllYXJEYXRlLmlzQmVmb3JlKG1pbkRhdGUsICd5ZWFyJykpIHx8IFxuICAgICAgICAgICAgIChtYXhEYXRlLmlzVmFsaWQoKSAmJiB5ZWFyRGF0ZS5pc0FmdGVyKG1heERhdGUsICd5ZWFyJykpO1xuICAgIH0pKTtcblxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbCgpKSB7XG4gICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsLnNldChtaW5EYXRlLmlzVmFsaWQoKSAmJiAoKHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgLSA2KSA8PSBtaW5EYXRlLnllYXIoKSkpO1xuICAgICAgdGhpcy5pc05leHRNb250aERpc2FibGVkU2lnbmFsLnNldChtYXhEYXRlLmlzVmFsaWQoKSAmJiAoKHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgKyA1KSA+PSBtYXhEYXRlLnllYXIoKSkpO1xuICAgIH1cbiAgICBcbiAgfVxuXG4gIG5hdmlnYXRlVmlldyhkaXJlY3Rpb246IFwiTkVYVFwiIHwgXCJQUkVWSU9VU1wiKTogdm9pZCB7XG4gICAgaWYgKChkaXJlY3Rpb24gPT09ICdORVhUJyAmJiAodGhpcy5pc05leHRNb250aERpc2FibGVkU2lnbmFsKCkgfHwgdGhpcy5pc1NlbGVjdGluZ01vbnRoU2lnbmFsKCkpKSB8fFxuICAgICAgICAoZGlyZWN0aW9uID09PSAnUFJFVklPVVMnICYmICh0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsKCkgfHwgdGhpcy5pc1NlbGVjdGluZ01vbnRoU2lnbmFsKCkpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZih0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbCgpKXtcbiAgICAgIGNvbnN0IG5ld1NlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgKyAoZGlyZWN0aW9uID09PSBcIk5FWFRcIiA/IDEyIDogLTEyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsLnNldChuZXdTZWxlY3RlZFllYXIpO1xuICAgICAgdGhpcy5hdmFpbGFibGVZZWFyc1NpZ25hbC5zZXQoQXJyYXkuZnJvbShcbiAgICAgICAgeyBsZW5ndGg6IDEyIH0sXG4gICAgICAgIChfLCBpbmRleCkgPT4gbmV3U2VsZWN0ZWRZZWFyIC0gNiArIGluZGV4XG4gICAgICApKTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGxldCB0aGlzTW9udGggOiBkYXlqcy5EYXlqcyA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gICAgICB0aGlzTW9udGggPSBkaXJlY3Rpb24gPT09IFwiTkVYVFwiID8gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpIDogdGhpc01vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpc01vbnRoLm1vbnRoKCkpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXNNb250aC5tb250aCgpKSk7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhclNpZ25hbC5zZXQodGhpc01vbnRoLnllYXIoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGgueWVhcigpKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzTW9udGgubW9udGgoKSwgdGhpc01vbnRoLnllYXIoKSkpO1xuICAgIH1cbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgfVxuXG4gIG5hdmlnYXRlTW9udGgoZGlyZWN0aW9uOiBcIk5FWFRcIiB8IFwiUFJFVklPVVNcIik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBsZXQgdGhpc01vbnRoOiBkYXlqcy5EYXlqcyA9IGRheWpzKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJORVhUXCIpIHtcbiAgICAgICAgdGhpc01vbnRoID0gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwiUFJFVklPVVNcIikge1xuICAgICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGgubW9udGgoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpc01vbnRoLm1vbnRoKCkpKTtcbiAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXNNb250aC55ZWFyKCkpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXNNb250aC5tb250aCgpLCB0aGlzTW9udGgueWVhcigpKSk7XG4gICAgICBcbiAgICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTaWxlbnRseSBoYW5kbGUgbmF2aWdhdGVNb250aCBlcnJvclxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVEYXRlcyhtb250aDogbnVtYmVyLCBjdXJyZW50WWVhck51bWJlcjogbnVtYmVyKTogSUN1cnJlbnRNb250aERhdGVzW10ge1xuICAgIGNvbnN0IGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXlzSW5Nb250aCA9IGRheWpzKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRheXNJbk1vbnRoKCk7XG4gICAgICBcbiAgICAgIGxldCBtaW5EYXRlID0gbnVsbDtcbiAgICAgIGxldCBtYXhEYXRlID0gbnVsbDtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWluRGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIG1pbiBkYXRlIHBhcnNpbmcgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtYXhEYXRlID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgbWF4IGRhdGUgcGFyc2luZyBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGZvciAobGV0IGN1cnJlbnREYXRlID0gMTsgY3VycmVudERhdGUgPD0gZGF5c0luTW9udGg7IGN1cnJlbnREYXRlKyspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKTtcbiAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgICAgXG4gICAgICAgICAgbGV0IGlzRGlzYWJsZWREYXkgPSB0aGlzLmRhdGEuZGF0ZXNEaXNhYmxlZD8uc29tZShkID0+IGQgPT09IGRhdGVTdHJpbmcpIHx8IGZhbHNlO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICghaXNEaXNhYmxlZERheSAmJiBtaW5EYXRlPy5pc1ZhbGlkKCkgJiYgdGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUpIHtcbiAgICAgICAgICAgIGlzRGlzYWJsZWREYXkgPSBtaW5EYXRlLmlzQWZ0ZXIoZGF0ZSwgXCJkYXlcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXNEaXNhYmxlZERheSAmJiBtYXhEYXRlPy5pc1ZhbGlkKCkgJiYgdGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUpIHtcbiAgICAgICAgICAgIGlzRGlzYWJsZWREYXkgPSBtYXhEYXRlLmlzQmVmb3JlKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZUluc3RhbmNlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKTtcbiAgICAgICAgICAvLyBPbmx5IG1hcmsgYXMgY3VycmVudCBkYXkgaWYgaXQncyBub3QgZGlzYWJsZWRcbiAgICAgICAgICBjb25zdCBpc0N1cnJlbnREYXkgPSAhaXNEaXNhYmxlZERheSAmJiBjdXJyZW50RGF0ZUluc3RhbmNlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT0gZGF5anMoKS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgICAgXG4gICAgICAgICAgbGV0IGlzU2VsZWN0ZWREYXkgPSBmYWxzZTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBPbmx5IHNldCBzZWxlY3RlZCBkYXkgaWYgdGhlIGRhdGUgaXMgbm90IGRpc2FibGVkXG4gICAgICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5KSB7XG4gICAgICAgICAgICAvLyBQcmlvcml0aXplIGN1cnJlbnQgc2VsZWN0aW9uIG92ZXIgcHJldmlvdXNseSBhcHBsaWVkIGRhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkgJiYgXG4gICAgICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkuZGF0ZSA9PT0gY3VycmVudERhdGUgJiZcbiAgICAgICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKS5tb250aCA9PT0gbW9udGggJiZcbiAgICAgICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKS55ZWFyID09PSBjdXJyZW50WWVhck51bWJlcikge1xuICAgICAgICAgICAgICBpc1NlbGVjdGVkRGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLmRhdGUgJiYgIXRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKSkge1xuICAgICAgICAgICAgICAvLyBPbmx5IGNoZWNrIHByZXZpb3VzbHkgYXBwbGllZCBkYXRlIGlmIG5vIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHModGhpcy5kYXRhLmRhdGUpO1xuICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZERheSA9IHNlbGVjdGVkRGF0ZS5pc1NhbWUoY3VycmVudERhdGVJbnN0YW5jZSwgJ2RheScpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBGb3IgZGF0ZS1vbmx5IGZvcm1hdCwgY29tcGFyZSB0aGUgZGF0ZSBwYXJ0cyBvbmx5XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHModGhpcy5kYXRhLmRhdGUpO1xuICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZERheSA9IHNlbGVjdGVkRGF0ZS5pc1NhbWUoY3VycmVudERhdGVJbnN0YW5jZSwgJ2RheScpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc3RyaW5nIGNvbXBhcmlzb24gaWYgcGFyc2luZyBmYWlsc1xuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkRGF5ID0gZGF0ZVN0cmluZyA9PT0gdGhpcy5kYXRhLmRhdGU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBkYXRlIGNvbXBhcmlzb24gZXJyb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgd2Vla0RheTogZGF0ZS5kYXkoKSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRZZWFyTnVtYmVyLFxuICAgICAgICAgICAgaXNDdXJyZW50RGF5LFxuICAgICAgICAgICAgaXNTZWxlY3RlZERheSxcbiAgICAgICAgICAgIHRvYXN0TWVzc2FnZTogdGhpcy5kYXRhLm1lc3NhZ2VzPy5maW5kKHEgPT4gZGF0ZVN0cmluZyA9PT0gcS5kYXRlKT8ubWVzc2FnZSB8fCBcIlwiLFxuICAgICAgICAgICAgaXNEaXNhYmxlZERheVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBkYXRlIHByb2Nlc3NpbmcgZXJyb3JcbiAgICAgICAgICBkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgd2Vla0RheTogdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKS5kYXkoKSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRZZWFyTnVtYmVyLFxuICAgICAgICAgICAgaXNEaXNhYmxlZERheTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBkYXRlc1swXS53ZWVrRGF5OyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgZGF0ZXMudW5zaGlmdCh7IFxuICAgICAgICAgICAgZGF0ZTogMCwgXG4gICAgICAgICAgICB3ZWVrRGF5OiBpIC0gMSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRZZWFyTnVtYmVyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGdlbmVyYXRlRGF0ZXMgZXJyb3JcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgc2VsZWN0RGF5KGRheTogSUN1cnJlbnRNb250aERhdGVzKSB7XG4gICAgaWYgKGRheS5kYXRlIDw9IDApIHJldHVybjtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBiYXNlIGRhdGUgc2VsZWN0aW9uIHdpdGhvdXQgdGltZVxuICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpLmRhdGUoZGF5LmRhdGUpLmhvdXIoMCkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKSk7XG4gICAgICBcbiAgICAgIC8vIEFwcGx5IHRoZSBjdXJyZW50IHRpbWUgdmFsdWVzIHRvIHRoZSBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICBsZXQgaG91ciA9IHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsKCkgPT09ICdQTScgJiYgaG91ciAhPT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbCgpID09PSAnQU0nICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvblNpZ25hbC5zZXQodGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsKCkhXG4gICAgICAgICAgLmhvdXIoaG91cilcbiAgICAgICAgICAubWludXRlKHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwoKSkpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBsZXQgbWF4RGF0ZSA9IG51bGw7XG4gICAgICBsZXQgbWluRGF0ZSA9IG51bGw7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1heERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KS5lbmRPZihcImRheVwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgbWF4IGRhdGUgcGFyc2luZyBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KS5zdGFydE9mKFwiZGF5XCIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBtaW4gZGF0ZSBwYXJzaW5nIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsLnNldCh0aGlzLmRhdGEuYWxsb3dCb29raW5nT25EaXNhYmxlZERheSk7XG4gICAgICBcbiAgICAgIGlmICgoKCFtaW5EYXRlIHx8IHRoaXMuY3VycmVudFNlbGVjdGlvblNpZ25hbCgpIS5pc1NhbWVPckFmdGVyKG1pbkRhdGUpKSAmJiAoIW1heERhdGUgfHwgdGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsKCkhLmlzU2FtZU9yQmVmb3JlKG1heERhdGUpKSAmJiB0aGlzLmFsbG93Qm9va2luZ09uRGlzYWJsZWREYXlTaWduYWwoKSkgfHwgKCFkYXkuaXNEaXNhYmxlZERheSAmJiAhdGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsKCkpKSB7XG4gICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwuc2V0KHtcbiAgICAgICAgICAuLi5kYXksXG4gICAgICAgICAgbW9udGg6IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksXG4gICAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gRm9yY2UgY2FsZW5kYXIgcmUtcmVuZGVyIHRvIHNob3cgaGlnaGxpZ2h0aW5nXG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgYXBwbHkgd2hlbiBuZWl0aGVyIHRpbWUgbm9yIGFwcGx5IGJ1dHRvbiBpcyBlbmFibGVkLCBvdGhlcndpc2Ugd2FpdCBmb3IgdXNlciBhY3Rpb25cbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuZHBDb25maWcuc2hvd0FwcGx5QnV0dG9uICYmICF0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgIHRoaXMuYXBwbHlEYXRlKGRheSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGRheS50b2FzdE1lc3NhZ2UgfHwgKHRoaXMuYWxsb3dCb29raW5nT25EaXNhYmxlZERheSAmJiBkYXkudG9hc3RNZXNzYWdlKSkge1xuICAgICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBzZWxlY3REYXkgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhcHBseURhdGUoZGF5PzogSUN1cnJlbnRNb250aERhdGVzKSB7XG4gICAgbGV0IGRhdGU6IHN0cmluZztcbiAgICBcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgdGltZSBpbnB1dCB2YWx1ZXMgd2hlbiB0aW1lIGlzIGVuYWJsZWQsIHJlZ2FyZGxlc3Mgb2YgY3VycmVudFNlbGVjdGlvblxuICAgICAgICBsZXQgaG91ciA9IHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsKCkgPT09ICdQTScgJiYgaG91ciAhPT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbCgpID09PSAnQU0nICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBkYXRlIGluc3RhbmNlIHdpdGggdGhlIHNlbGVjdGVkIHRpbWVcbiAgICAgICAgY29uc3QgZmluYWxTZWxlY3Rpb24gPSBkYXlqcygpXG4gICAgICAgICAgLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5kYXRlKHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKT8uZGF0ZSB8fCBkYXk/LmRhdGUgfHwgZGF5anMoKS5kYXRlKCkpXG4gICAgICAgICAgLmhvdXIoaG91cilcbiAgICAgICAgICAubWludXRlKHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwoKSlcbiAgICAgICAgICAuc2Vjb25kKDApXG4gICAgICAgICAgLm1pbGxpc2Vjb25kKDApO1xuICAgICAgICBcbiAgICAgICAgZGF0ZSA9IGZpbmFsU2VsZWN0aW9uLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERhdGUtb25seSBmb3JtYXQgLSBubyB0aW1lXG4gICAgICAgIGRhdGUgPSBkYXlqcygpXG4gICAgICAgICAgLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5kYXRlKGRheSA/IGRheS5kYXRlIDogdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpPy5kYXRlIHx8IGRheWpzKCkuZGF0ZSgpKVxuICAgICAgICAgIC5ob3VyKDApXG4gICAgICAgICAgLm1pbnV0ZSgwKVxuICAgICAgICAgIC5zZWNvbmQoMClcbiAgICAgICAgICAubWlsbGlzZWNvbmQoMClcbiAgICAgICAgICAuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoZGF5IHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKSB8fCAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpKSB7XG4gICAgICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKGRhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYW5jZWxEYXRlUGlja2VyKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBhcHBseURhdGUgZXJyb3JcbiAgICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKFwiXCIpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duLmVzY1wiKVxuICBjbG9zZU9uRXNjKCkge1xuICAgIHRoaXMuY2FuY2VsRGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgY2FuY2VsRGF0ZVBpY2tlcigpIHtcbiAgICB0aGlzLmRhdGEuZGF0ZUNoYW5nZShcIlwiKTtcbiAgfVxuXG4gIHRvZ2dsZU1vbnRoU2VsZWN0b3IoKSB7XG4gICAgaWYodGhpcy5pc1llYXJTZWxlY3Rpb25GbG93U2lnbmFsKCkpIHJldHVybjtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwuc2V0KCF0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwoKSk7XG4gICAgdGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgfVxuXG4gIHRvZ2dsZVllYXJTZWxlY3RvcigpIHtcbiAgICB0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbC5zZXQoIXRoaXMuaXNTZWxlY3RpbmdZZWFyU2lnbmFsKCkpO1xuICAgIHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpO1xuICAgIHRoaXMuYXZhaWxhYmxlWWVhcnNTaWduYWwuc2V0KEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogMTIgfSxcbiAgICAgIChfLCBpbmRleCkgPT4gdGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSAtIDYgKyBpbmRleFxuICAgICkpO1xuICAgIHRoaXMuaXNTZWxlY3RpbmdNb250aFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY2FsY3VsYXRlRGlzYWJsZWRNb250aHNBbmRZZWFycygpO1xuXG4gIH1cblxuICByZXNldERhdGVTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbC5zZXQoe1xuICAgICAgZGF0ZTogMCxcbiAgICAgIHdlZWtEYXk6IDAsXG4gICAgICBpc0N1cnJlbnREYXk6IGZhbHNlLFxuICAgICAgaXNTZWxlY3RlZERheTogZmFsc2UsXG4gICAgICBpc0Rpc2FibGVkRGF5OiBmYWxzZSxcbiAgICAgIHRvYXN0TWVzc2FnZTogJydcbiAgICB9KTtcbiAgICB0aGlzLmRhdGEuZGF0ZSA9ICcnO1xuICB9XG5cbiAgc2VsZWN0TW9udGgobW9udGg6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzLmF2YWlsYWJsZU1vbnRoc1NpZ25hbCgpLmluZGV4T2YobW9udGgpKTtcbiAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSkpO1xuICAgIHRoaXMuaXNTZWxlY3RpbmdNb250aFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNZZWFyU2VsZWN0aW9uRmxvd1NpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMucmVzZXREYXRlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICB9XG5cbiAgc2VsZWN0WWVhcih5ZWFyOiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkWWVhclNpZ25hbC5zZXQoeWVhcik7XG4gICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQoeWVhcik7XG4gICAgdGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwuc2V0KHRydWUpO1xuICAgIHRoaXMuaXNZZWFyU2VsZWN0aW9uRmxvd1NpZ25hbC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5yZXNldERhdGVTZWxlY3Rpb24oKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiZGF0YS5kaXNhYmxlQm94U2hhZG93PydyZW1vdmUtYm94LXNoYWRvdyc6JydcIiBhcmlhLWxhYmVsPVwiZGF0ZSBwaWNrZXJcIiBjZGtUcmFwRm9jdXMgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgPGRpdiB0YWJpbmRleD1cIi0xXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2hlYWRlclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uXCJcbiAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVZpZXcoJ1BSRVZJT1VTJylcIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBNb250aFwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwibmF2aWdhdGVWaWV3KCdQUkVWSU9VUycpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNQcmV2aW91c01vbnRoRGlzYWJsZWQoKSB8fCBpc1NlbGVjdGluZ01vbnRoKClcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICA+PC9wYXRoPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU2VsZWN0aW5nWWVhcigpXCIgKGNsaWNrKT1cInRvZ2dsZU1vbnRoU2VsZWN0b3IoKVwiIGNsYXNzPVwibW9udGgtaGVhZGVyXCI+XG4gICAgICB7eyBpc1llYXJTZWxlY3Rpb25GbG93KCkgPyBzZWxlY3RlZFllYXIoKSA6IGF2YWlsYWJsZU1vbnRocygpW2N1cnJlbnRNb250aE51bWJlcigpXSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhaXNTZWxlY3RpbmdNb250aCgpXCIgKGNsaWNrKT1cInRvZ2dsZVllYXJTZWxlY3RvcigpXCIgY2xhc3M9XCJ5ZWFyLWhlYWRlclwiPlxuICAgICAge3sgaXNTZWxlY3RpbmdZZWFyKCkgPyB5ZWFyUmFuZ2UgOiBjdXJyZW50WWVhck51bWJlcigpIH19XG4gICAgPC9kaXY+XG5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uXCJcbiAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVZpZXcoJ05FWFQnKVwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgYXJpYS1sYWJlbD1cIk5leHQgTW9udGhcIlxuICAgICAgKGtleXVwLmVudGVyKT1cIm5hdmlnYXRlVmlldygnTkVYVCcpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNOZXh0TW9udGhEaXNhYmxlZCgpIHx8IGlzU2VsZWN0aW5nTW9udGgoKVxuICAgICAgfVwiXG4gICAgPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgID48L3BhdGg+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fYm9keVwiPlxuXG4gICAgPGRpdiAqbmdJZj1cImlzU2VsZWN0aW5nTW9udGgoKSAmJiAhaXNTZWxlY3RpbmdZZWFyKClcIiBjbGFzcz1cIm1vbnRoLXNlbGVjdG9yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1vbnRoIG9mIGF2YWlsYWJsZU1vbnRocygpOyBsZXQgaSA9IGluZGV4XCIgXG4gICAgICAgICAgICBjbGFzcz1cIm1vbnRoXCIgXG4gICAgICAgICAgICAoY2xpY2spPVwiIWRpc2FibGVkTW9udGhzKClbaV0gJiYgc2VsZWN0TW9udGgobW9udGgpXCIgXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdkaXNhYmxlLW1vbnRoJzogZGlzYWJsZWRNb250aHMoKVtpXSxcbiAgICAgICAgICAgICAgJ3NlbGVjdC1tb250aCc6ICFkaXNhYmxlZE1vbnRocygpW2N1cnJlbnRNb250aE51bWJlcigpXSAmJiBtb250aCA9PT0gYXZhaWxhYmxlTW9udGhzKClbY3VycmVudE1vbnRoTnVtYmVyKCldXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAge3sgbW9udGggfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgXG4gICAgPGRpdiAqbmdJZj1cImlzU2VsZWN0aW5nWWVhcigpICYmICFpc1NlbGVjdGluZ01vbnRoKClcIiBjbGFzcz1cInllYXItc2VsZWN0b3JcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgeWVhciBvZiBhdmFpbGFibGVZZWFycygpOyBsZXQgaSA9IGluZGV4XCIgXG4gICAgICAgICAgICBjbGFzcz1cInllYXJcIiBcbiAgICAgICAgICAgIChjbGljayk9XCIhZGlzYWJsZWRZZWFycygpW2ldICYmIHNlbGVjdFllYXIoeWVhcilcIiBcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2Rpc2FibGUteWVhcic6IGRpc2FibGVkWWVhcnMoKVtpXSxcbiAgICAgICAgICAgICAgJ3NlbGVjdC15ZWFyJzogeWVhciA9PT0gY3VycmVudFllYXJOdW1iZXIoKVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCIhaXNTZWxlY3RpbmdNb250aCgpICYmICFpc1NlbGVjdGluZ1llYXIoKVwiIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5cygpXCI+XG4gICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsgJ2N1cnJlbnQtZGF5Jzogd2Vla0RheS5pc0N1cnJlbnREYXkgfVwiPnt7IHdlZWtEYXkubGFiZWwgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU2VsZWN0aW5nTW9udGgoKSAmJiAhaXNTZWxlY3RpbmdZZWFyKClcIiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19kYXlzXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2RheVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnc2VsZWN0ZWQtZGF5JzogZGF5LmlzU2VsZWN0ZWREYXksXG4gICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5LFxuICAgICAgICAgICdpcy12YWxpZC1kYXRlJzogZGF5LmRhdGUgPiAwICYmICFkYXkuaXNTZWxlY3RlZERheVxuICAgICAgICB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiBjdXJyZW50TW9udGhEYXRlcygpXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdERheShkYXkpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdERheShkYXkpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImRheS5kYXRlID4gMFwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cImRheS5pc0Rpc2FibGVkRGF5ID8gLTEgOiAwXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnY3VycmVudC1kYXknOiBkYXkuaXNDdXJyZW50RGF5LFxuICAgICAgICAgICAgJ3NlbGVjdGVkLWRheSc6IGRheS5pc1NlbGVjdGVkRGF5LFxuICAgICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXRyYWN0RGF5TW9udGgoZGF5LmRhdGUsIGN1cnJlbnRNb250aCgpLCBjdXJyZW50WWVhck51bWJlcigpKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBkYXkuZGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUaW1lIFBpY2tlciBTZWN0aW9uIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3RpbWVcIiAqbmdJZj1cImRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlci1oZWFkZXJcIj5cbiAgICAgIDxzcGFuPlRpbWU8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRpbWUtcGlja2VyLWNvbnRyb2xzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dC1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiaG91cklucHV0XCI+SG91cjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICBpZD1cImhvdXJJbnB1dFwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxuICAgICAgICAgIFttaW5dPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEgOiAwXCJcbiAgICAgICAgICBbbWF4XT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxMiA6IDIzXCJcbiAgICAgICAgICBbc3RlcF09XCIxXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEhvdXIoKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRIb3VyU2lnbmFsLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICAoaW5wdXQpPVwib25Ib3VySW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVIb3VySW5wdXQoKVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0XCJcbiAgICAgICAgICBbdGl0bGVdPVwiaXMxMkhvdXJGb3JtYXQoKSA/ICdFbnRlciBob3VyICgxLTEyKScgOiAnRW50ZXIgaG91ciAoMC0yMyknXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0LWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJtaW51dGVJbnB1dFwiPk1pbnV0ZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICBpZD1cIm1pbnV0ZUlucHV0XCJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgbWluPVwiMFwiIFxuICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICBbc3RlcF09XCIxXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZE1pbnV0ZSgpXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGlucHV0KT1cIm9uTWludXRlSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVNaW51dGVJbnB1dCgpXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXRcIlxuICAgICAgICAgIHRpdGxlPVwiRW50ZXIgbWludXRlICgwLTU5KVwiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYW0tcG0tc2VsZWN0b3JcIiAqbmdJZj1cImlzMTJIb3VyRm9ybWF0KClcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImFtUG1TZWxlY3RcIj5BTS9QTTwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3QgXG4gICAgICAgICAgaWQ9XCJhbVBtU2VsZWN0XCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEFtUG0oKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImFtLXBtLXNlbGVjdFwiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19mb290ZXJcIiAqbmdJZj1cImRhdGEuZHBDb25maWcuc2hvd0FwcGx5QnV0dG9uIHx8IGRhdGEuZHBDb25maWcuZW5hYmxlVGltZVwiPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiBzaXplPVwibWRcIiB0eXBlPVwiJ25vbmUnXCIgKGNsaWNrKT1cImNhbmNlbERhdGVQaWNrZXIoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiBzaXplPVwibWRcIiB0eXBlPVwicHJpbWFyeVwiIChjbGljayk9XCJhcHBseURhdGUoKVwiIFtkaXNhYmxlZF09XCIhKGRhdGEuZGF0ZSB8fCBsb2NhbFNlbGVjdGVkRGF0ZSgpPy5kYXRlKVwiPkFwcGx5PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|