@rivet-health/design-system 4.12.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/format/pipes/option-group.pipe.mjs +19 -0
- package/esm2020/lib/input/calendar/calendar.component.mjs +4 -3
- package/esm2020/lib/input/date-range/date-range.component.mjs +6 -4
- package/esm2020/lib/input/single-select/single-select.component.mjs +68 -36
- package/esm2020/lib/riv.module.mjs +6 -1
- package/esm2020/lib/visualization/stacked-column/stacked-column.component.mjs +4 -3
- package/esm2020/lib/visualization/time-series/time-series.component.mjs +4 -3
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/rivet-health-design-system.mjs +91 -42
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +100 -45
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/format/pipes/option-group.pipe.d.ts +8 -0
- package/lib/input/date-range/date-range.component.d.ts +10 -6
- package/lib/input/single-select/single-select.component.d.ts +14 -13
- package/lib/riv.module.d.ts +16 -15
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class OptionGroupPipe {
|
|
4
|
+
transform(value, header) {
|
|
5
|
+
return [
|
|
6
|
+
{
|
|
7
|
+
header: header,
|
|
8
|
+
options: value ?? [],
|
|
9
|
+
},
|
|
10
|
+
];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
OptionGroupPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OptionGroupPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
14
|
+
OptionGroupPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: OptionGroupPipe, name: "rivOptionGroup" });
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OptionGroupPipe, decorators: [{
|
|
16
|
+
type: Pipe,
|
|
17
|
+
args: [{ name: 'rivOptionGroup' }]
|
|
18
|
+
}] });
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWdyb3VwLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9mb3JtYXQvcGlwZXMvb3B0aW9uLWdyb3VwLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBSXBELE1BQU0sT0FBTyxlQUFlO0lBRzFCLFNBQVMsQ0FDUCxLQUFXLEVBQ1gsTUFBZTtRQUVmLE9BQU87WUFDTDtnQkFDRSxNQUFNLEVBQUUsTUFBTTtnQkFDZCxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7YUFDckI7U0FDRixDQUFDO0lBQ0osQ0FBQzs7NEdBYlUsZUFBZTswR0FBZixlQUFlOzJGQUFmLGVBQWU7a0JBRDNCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaW5nbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC9zaW5nbGUtc2VsZWN0L3NpbmdsZS1zZWxlY3QuY29tcG9uZW50JztcblxuQFBpcGUoeyBuYW1lOiAncml2T3B0aW9uR3JvdXAnIH0pXG5leHBvcnQgY2xhc3MgT3B0aW9uR3JvdXBQaXBlPFUgZXh0ZW5kcyBTaW5nbGVTZWxlY3RDb21wb25lbnQuT3B0aW9uPlxuICBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm1cbntcbiAgdHJhbnNmb3JtKFxuICAgIHZhbHVlPzogVVtdLFxuICAgIGhlYWRlcj86IHN0cmluZyxcbiAgKTogU2luZ2xlU2VsZWN0Q29tcG9uZW50Lk9wdGlvbkdyb3VwPFU+W10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGhlYWRlcjogaGVhZGVyLFxuICAgICAgICBvcHRpb25zOiB2YWx1ZSA/PyBbXSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxufVxuIl19
|
|
@@ -6,6 +6,7 @@ import * as i0 from "@angular/core";
|
|
|
6
6
|
import * as i1 from "@angular/common";
|
|
7
7
|
import * as i2 from "../button/button.component";
|
|
8
8
|
import * as i3 from "../single-select/single-select.component";
|
|
9
|
+
import * as i4 from "../../format/pipes/option-group.pipe";
|
|
9
10
|
const monthFormatter = timeFormat('%B');
|
|
10
11
|
const yearFormatter = timeFormat('%Y');
|
|
11
12
|
const dayFormatter = timeFormat('%e');
|
|
@@ -250,10 +251,10 @@ export class CalendarComponent {
|
|
|
250
251
|
}
|
|
251
252
|
}
|
|
252
253
|
CalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
253
|
-
CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CalendarComponent, selector: "riv-calendar", inputs: { activeYearMonth: "activeYearMonth", displayMin: "displayMin", displayMax: "displayMax", selectableMin: "selectableMin", selectableMax: "selectableMax", omitRange: "omitRange", selectedValue: "selectedValue" }, outputs: { activeYearMonthChange: "activeYearMonthChange", dateSelect: "dateSelect" }, ngImport: i0, template: "<div class=\"controls\">\n <div>\n <ng-template #selectTrigger let-selectedOption=\"selectedOption\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ChevronDown'\"\n [iconPosition]=\"'last'\"\n type=\"button\"\n >\n {{ selectedOption.title || '...' }}\n </button>\n </ng-template>\n <riv-single-select\n placeholder=\"Month...\"\n [
|
|
254
|
+
CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CalendarComponent, selector: "riv-calendar", inputs: { activeYearMonth: "activeYearMonth", displayMin: "displayMin", displayMax: "displayMax", selectableMin: "selectableMin", selectableMax: "selectableMax", omitRange: "omitRange", selectedValue: "selectedValue" }, outputs: { activeYearMonthChange: "activeYearMonthChange", dateSelect: "dateSelect" }, ngImport: i0, template: "<div class=\"controls\">\n <div>\n <ng-template #selectTrigger let-selectedOption=\"selectedOption\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ChevronDown'\"\n [iconPosition]=\"'last'\"\n type=\"button\"\n >\n {{ selectedOption.title || '...' }}\n </button>\n </ng-template>\n <riv-single-select\n placeholder=\"Month...\"\n [groups]=\"monthOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n <riv-single-select\n placeholder=\"Year...\"\n [groups]=\"yearOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n type=\"button\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n type=\"button\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n type=\"button\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n [class.hidden]=\"day.hidden\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n", styles: [".controls{display:flex;align-items:center;justify-content:space-between}.calendar{display:grid;grid-template-columns:repeat(7,calc(var(--base-grid-size) * 10));grid-auto-rows:calc(var(--base-grid-size) * 6)}.label{display:flex;justify-content:center;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy)}.day{display:flex;align-items:stretch}.day:hover{background-color:var(--surface-light-1)}.day.in-range{background-color:var(--purp-10)}.day.fade-out{background-image:linear-gradient(to right,var(--purp-10),var(--white-100))}.day.fade-in{background-image:linear-gradient(to right,var(--white-100),var(--purp-10))}.day.bleed{color:var(--type-light-disabled)}.day.rounded-ne{border-top-right-radius:var(--border-radius-medium)}.day.rounded-nw{border-top-left-radius:var(--border-radius-medium)}.day.rounded-sw{border-bottom-left-radius:var(--border-radius-medium)}.day.rounded-se{border-bottom-right-radius:var(--border-radius-medium)}.day-wrapper{flex-grow:1;display:flex;justify-content:center;align-items:center;border-radius:var(--border-radius-medium)}.day-wrapper.selected{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}.day-wrapper.today{border-radius:calc(var(--base-grid-size) * 8);border:var(--border-width) solid var(--border-light);font-weight:var(--font-weight-heavy)}.day-wrapper.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition"] }, { kind: "component", type: i3.SingleSelectComponent, selector: "riv-single-select", inputs: ["groups", "selectedOption", "filterabilityOptions", "loading", "locked", "noOptionsMessage", "nodeTemplate", "triggerTemplate", "placeholder", "disabled"], outputs: ["filterQueryChange", "selectedOptionChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.OptionGroupPipe, name: "rivOptionGroup" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
254
255
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CalendarComponent, decorators: [{
|
|
255
256
|
type: Component,
|
|
256
|
-
args: [{ selector: 'riv-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"controls\">\n <div>\n <ng-template #selectTrigger let-selectedOption=\"selectedOption\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ChevronDown'\"\n [iconPosition]=\"'last'\"\n type=\"button\"\n >\n {{ selectedOption.title || '...' }}\n </button>\n </ng-template>\n <riv-single-select\n placeholder=\"Month...\"\n [
|
|
257
|
+
args: [{ selector: 'riv-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"controls\">\n <div>\n <ng-template #selectTrigger let-selectedOption=\"selectedOption\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ChevronDown'\"\n [iconPosition]=\"'last'\"\n type=\"button\"\n >\n {{ selectedOption.title || '...' }}\n </button>\n </ng-template>\n <riv-single-select\n placeholder=\"Month...\"\n [groups]=\"monthOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n <riv-single-select\n placeholder=\"Year...\"\n [groups]=\"yearOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n type=\"button\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n type=\"button\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n type=\"button\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n [class.hidden]=\"day.hidden\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n", styles: [".controls{display:flex;align-items:center;justify-content:space-between}.calendar{display:grid;grid-template-columns:repeat(7,calc(var(--base-grid-size) * 10));grid-auto-rows:calc(var(--base-grid-size) * 6)}.label{display:flex;justify-content:center;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy)}.day{display:flex;align-items:stretch}.day:hover{background-color:var(--surface-light-1)}.day.in-range{background-color:var(--purp-10)}.day.fade-out{background-image:linear-gradient(to right,var(--purp-10),var(--white-100))}.day.fade-in{background-image:linear-gradient(to right,var(--white-100),var(--purp-10))}.day.bleed{color:var(--type-light-disabled)}.day.rounded-ne{border-top-right-radius:var(--border-radius-medium)}.day.rounded-nw{border-top-left-radius:var(--border-radius-medium)}.day.rounded-sw{border-bottom-left-radius:var(--border-radius-medium)}.day.rounded-se{border-bottom-right-radius:var(--border-radius-medium)}.day-wrapper{flex-grow:1;display:flex;justify-content:center;align-items:center;border-radius:var(--border-radius-medium)}.day-wrapper.selected{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}.day-wrapper.today{border-radius:calc(var(--base-grid-size) * 8);border:var(--border-width) solid var(--border-light);font-weight:var(--font-weight-heavy)}.day-wrapper.hidden{display:none}\n"] }]
|
|
257
258
|
}], propDecorators: { activeYearMonth: [{
|
|
258
259
|
type: Input
|
|
259
260
|
}], displayMin: [{
|
|
@@ -277,4 +278,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
277
278
|
CalendarComponent.defaultMin = timeYear.floor(timeYear.offset(new Date(), -7));
|
|
278
279
|
CalendarComponent.defaultMax = timeDay.offset(timeYear.floor(timeYear.offset(new Date(), 5)), -1);
|
|
279
280
|
})(CalendarComponent || (CalendarComponent = {}));
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLFNBQVMsR0FDVixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsR0FBRyxFQUNILFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFHZCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxNQUFNLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVoRCxTQUFTLGdCQUFnQixDQUFDLElBQVU7SUFDbEMsT0FBTyxRQUFRLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBb0JELDZFQUE2RTtBQUM3RSwyQkFBMkI7QUFPM0IsTUFBTSxPQUFPLGlCQUFpQjtJQU45QjtRQU9tQixxQkFBZ0Is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IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICB0aW1lRGF5LFxuICB0aW1lRGF5cyxcbiAgdGltZU1vbnRoLFxuICB0aW1lTW9udGhzLFxuICB0aW1lU3VuZGF5LFxuICB0aW1lWWVhcixcbiAgdGltZVllYXJzLFxufSBmcm9tICdkMy10aW1lJztcbmltcG9ydCB7IHRpbWVGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2luZ2xlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2luZ2xlLXNlbGVjdC9zaW5nbGUtc2VsZWN0LmNvbXBvbmVudCc7XG5cbmNvbnN0IG1vbnRoRm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJUInKTtcbmNvbnN0IHllYXJGb3JtYXR0ZXIgPSB0aW1lRm9ybWF0KCclWScpO1xuY29uc3QgZGF5Rm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJWUnKTtcbmNvbnN0IHdlZWtkYXlOdW1iZXJGb3JtYXR0ZXIgPSB0aW1lRm9ybWF0KCcldycpO1xuXG5mdW5jdGlvbiBnZXRXZWVrZGF5TnVtYmVyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICByZXR1cm4gcGFyc2VJbnQod2Vla2RheU51bWJlckZvcm1hdHRlcihkYXRlKSk7XG59XG5cbnR5cGUgRGF0ZU9wdGlvbiA9IFNpbmdsZVNlbGVjdENvbXBvbmVudC5PcHRpb24gJiB7IGRhdGU6IERhdGUgfTtcblxudHlwZSBDYWxlbmRhckRhdGUgPSB7XG4gIGRhdGU6IERhdGU7XG4gIGRpc3BsYXk6IHN0cmluZztcbiAgZmFkZUluOiBib29sZWFuO1xuICBmYWRlT3V0OiBib29sZWFuO1xuICBoaWRkZW46IGJvb2xlYW47XG4gIGluQ3VycmVudE1vbnRoOiBib29sZWFuO1xuICBpblJhbmdlOiBib29sZWFuO1xuICByb3VuZGVkTmU6IGJvb2xlYW47XG4gIHJvdW5kZWROdzogYm9vbGVhbjtcbiAgcm91bmRlZFNlOiBib29sZWFuO1xuICByb3VuZGVkU3c6IGJvb2xlYW47XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICB0b2RheTogYm9vbGVhbjtcbn07XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVZZWFyTW9udGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihuZXcgRGF0ZSgpKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhY3RpdmVZZWFyTW9udGgodjogRGF0ZSkge1xuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgYWN0aXZlWWVhck1vbnRoKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZVllYXJNb250aCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheU1pbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KFxuICAgIENhbGVuZGFyQ29tcG9uZW50LmRlZmF1bHRNaW4sXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzcGxheU1pbih2OiBEYXRlKSB7XG4gICAgdGhpcy5kaXNwbGF5TWluJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgZGlzcGxheU1pbigpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TWluJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5TWF4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZT4oXG4gICAgQ2FsZW5kYXJDb21wb25lbnQuZGVmYXVsdE1heCxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNwbGF5TWF4KHY6IERhdGUpIHtcbiAgICB0aGlzLmRpc3BsYXlNYXgkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5TWF4KCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlNYXgkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGFibGVNaW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWQsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0YWJsZU1pbih2OiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0YWJsZU1pbigpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlTWluJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RhYmxlTWF4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZSB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkLFxuICApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGFibGVNYXgodjogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGFibGVNYXgoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZU1heCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgb21pdFJhbmdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8W0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWQsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgb21pdFJhbmdlKHY6IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMub21pdFJhbmdlJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgb21pdFJhbmdlKCk6IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub21pdFJhbmdlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZFZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgRGF0ZSB8IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRWYWx1ZSh2OiBEYXRlIHwgW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRWYWx1ZSgpOiBEYXRlIHwgW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZhbHVlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcmVhZG9ubHkgeWVhck9wdGlvbnMkOiBPYnNlcnZhYmxlPERhdGVPcHRpb25bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRpc3BsYXlNaW4kLFxuICAgIHRoaXMuZGlzcGxheU1heCQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgICB0aGlzLnNlbGVjdGFibGVNYXgkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICBkaXNwbGF5TWluLFxuICAgICAgICBkaXNwbGF5TWF4LFxuICAgICAgICBzZWxlY3RhYmxlTWluLFxuICAgICAgICBzZWxlY3RhYmxlTWF4LFxuICAgICAgICBhY3RpdmVZZWFyTW9udGgsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbjogRGF0ZSA9IHNlbGVjdGFibGVNaW4gPz8gZGlzcGxheU1pbjtcbiAgICAgICAgY29uc3QgbWF4OiBEYXRlID0gc2VsZWN0YWJsZU1heCA/PyBkaXNwbGF5TWF4O1xuICAgICAgICByZXR1cm4gdGltZVllYXJzKHRpbWVZZWFyLmZsb29yKGRpc3BsYXlNaW4pLCBkaXNwbGF5TWF4KS5tYXAoXG4gICAgICAgICAgZmxvb3JlZFllYXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICBmbG9vcmVkWWVhci5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICBhY3RpdmVZZWFyTW9udGguZ2V0TW9udGgoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogeWVhci5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHRpdGxlOiB5ZWFyRm9ybWF0dGVyKHllYXIpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICB5ZWFyLmdldEZ1bGxZZWFyKCkgPCBtaW4uZ2V0RnVsbFllYXIoKSB8fFxuICAgICAgICAgICAgICAgIHllYXIuZ2V0RnVsbFllYXIoKSA+IG1heC5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICBkYXRlOiB5ZWFyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRZZWFyT3B0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMueWVhck9wdGlvbnMkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW3llYXJPcHRpb25zLCBhY3RpdmVZZWFyTW9udGhdKSA9PlxuICAgICAgICB5ZWFyT3B0aW9ucy5maW5kKFxuICAgICAgICAgIHkgPT4geS5pZCA9PT0gYWN0aXZlWWVhck1vbnRoLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSxcbiAgICAgICAgKSB8fCBudWxsLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBtb250aE9wdGlvbnMkOiBPYnNlcnZhYmxlPERhdGVPcHRpb25bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQsXG4gICAgdGhpcy5kaXNwbGF5TWluJCxcbiAgICB0aGlzLmRpc3BsYXlNYXgkLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1pbiQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICBhY3RpdmVZZWFyTW9udGgsXG4gICAgICAgIGRpc3BsYXlNaW4sXG4gICAgICAgIGRpc3BsYXlNYXgsXG4gICAgICAgIHNlbGVjdGFibGVNaW4sXG4gICAgICAgIHNlbGVjdGFibGVNYXgsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbiA9IHNlbGVjdGFibGVNaW4gPz8gZGlzcGxheU1pbjtcbiAgICAgICAgY29uc3QgbWF4ID0gc2VsZWN0YWJsZU1heCA/PyBkaXNwbGF5TWF4O1xuICAgICAgICByZXR1cm4gdGltZU1vbnRocyhcbiAgICAgICAgICB0aW1lWWVhci5mbG9vcihhY3RpdmVZZWFyTW9udGgpLFxuICAgICAgICAgIHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChhY3RpdmVZZWFyTW9udGgsIDEpKSxcbiAgICAgICAgKS5tYXAobW9udGggPT4gKHtcbiAgICAgICAgICBpZDogbW9udGguZ2V0TW9udGgoKS50b1N0cmluZygpLFxuICAgICAgICAgIHRpdGxlOiBtb250aEZvcm1hdHRlcihtb250aCksXG4gICAgICAgICAgZGlzYWJsZWQ6XG4gICAgICAgICAgICBtb250aC52YWx1ZU9mKCkgPCBtaW4udmFsdWVPZigpIHx8IG1vbnRoLnZhbHVlT2YoKSA+IG1heC52YWx1ZU9mKCksXG4gICAgICAgICAgZGF0ZTogbW9udGgsXG4gICAgICAgIH0pKTtcbiAgICAgIH0sXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkTW9udGhPcHRpb24kID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5tb250aE9wdGlvbnMkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW21vbnRoT3B0aW9ucywgYWN0aXZlWWVhck1vbnRoXSkgPT5cbiAgICAgICAgbW9udGhPcHRpb25zLmZpbmQoXG4gICAgICAgICAgbSA9PiBtLmlkID09PSBhY3RpdmVZZWFyTW9udGguZ2V0TW9udGgoKS50b1N0cmluZygpLFxuICAgICAgICApIHx8IG51bGwsXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHByZXZpb3VzTW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1pbiQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt5ZWFyTW9udGgsIGRpc3BsYXlNaW4sIHNlbGVjdGFibGVNaW5dKSA9PiB7XG4gICAgICBjb25zdCBtaW46IERhdGUgPSBzZWxlY3RhYmxlTWluID8/IGRpc3BsYXlNaW47XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRpbWVNb250aC5mbG9vcih0aW1lTW9udGgub2Zmc2V0KHllYXJNb250aCwgLTEpKTtcbiAgICAgIGlmIChwcmV2aW91cy52YWx1ZU9mKCkgPCBtaW4udmFsdWVPZigpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9KSxcbiAgKTtcblxuICByZWFkb25seSBuZXh0TW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1heCQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt5ZWFyTW9udGgsIGRpc3BsYXlNYXgsIHNlbGVjdGFibGVNYXhdKSA9PiB7XG4gICAgICBjb25zdCBtYXg6IERhdGUgPSBzZWxlY3RhYmxlTWF4ID8/IGRpc3BsYXlNYXg7XG4gICAgICBjb25zdCBuZXh0ID0gdGltZU1vbnRoLmZsb29yKHRpbWVNb250aC5vZmZzZXQoeWVhck1vbnRoLCAxKSk7XG4gICAgICBpZiAobmV4dC52YWx1ZU9mKCkgPiBtYXgudmFsdWVPZigpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0ZXNJblNlbGVjdGVkUmFuZ2UkOiBPYnNlcnZhYmxlPERhdGVbXT4gPVxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSQucGlwZShcbiAgICAgIG1hcChzZWxlY3RlZFZhbHVlID0+IHtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFZhbHVlKSByZXR1cm4gW107XG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIFtzZWxlY3RlZFZhbHVlXTtcbiAgICAgICAgcmV0dXJuIHRpbWVEYXlzKFxuICAgICAgICAgIHRpbWVEYXkuZmxvb3Ioc2VsZWN0ZWRWYWx1ZVswXSksXG4gICAgICAgICAgdGltZURheS5mbG9vcih0aW1lRGF5Lm9mZnNldChzZWxlY3RlZFZhbHVlWzFdLCAxKSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICAgKTtcblxuICByZWFkb25seSBkYXRlcyQ6IE9ic2VydmFibGU8Q2FsZW5kYXJEYXRlW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSQsXG4gICAgdGhpcy5kYXRlc0luU2VsZWN0ZWRSYW5nZSQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgICB0aGlzLnNlbGVjdGFibGVNYXgkLFxuICAgIHRoaXMub21pdFJhbmdlJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICBhY3RpdmVZZWFyTW9udGgsXG4gICAgICAgIHNlbGVjdGVkVmFsdWUsXG4gICAgICAgIGRhdGVzSW5TZWxlY3RlZFJhbmdlLFxuICAgICAgICBzZWxlY3RhYmxlTWluLFxuICAgICAgICBzZWxlY3RhYmxlTWF4LFxuICAgICAgICBvbWl0UmFuZ2UsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF0ZXMgPSB0aW1lRGF5cyhcbiAgICAgICAgICB0aW1lU3VuZGF5LmZsb29yKGFjdGl2ZVllYXJNb250aCksXG4gICAgICAgICAgdGltZVN1bmRheS5jZWlsKHRpbWVNb250aC5vZmZzZXQoYWN0aXZlWWVhck1vbnRoLCAxKSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG1pbkNhbGVuZGFyRGF0ZSA9IGNhbGVuZGFyRGF0ZXNbMF07XG4gICAgICAgIGNvbnN0IG1heENhbGVuZGFyRGF0ZSA9IGNhbGVuZGFyRGF0ZXNbY2FsZW5kYXJEYXRlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlQ29vcmRpbmF0ZXMgPSBuZXcgTWFwPG51bWJlciwgW251bWJlciwgbnVtYmVyXT4oKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlID0gZGF0ZXNJblNlbGVjdGVkUmFuZ2UuZmlsdGVyKFxuICAgICAgICAgIHNlbGVjdGVkID0+XG4gICAgICAgICAgICBzZWxlY3RlZC52YWx1ZU9mKCkgPj0gbWluQ2FsZW5kYXJEYXRlLnZhbHVlT2YoKSAmJlxuICAgICAgICAgICAgc2VsZWN0ZWQudmFsdWVPZigpIDw9IG1heENhbGVuZGFyRGF0ZS52YWx1ZU9mKCkgJiZcbiAgICAgICAgICAgIChzZWxlY3RhYmxlTWluXG4gICAgICAgICAgICAgID8gc2VsZWN0ZWQudmFsdWVPZigpID49IHNlbGVjdGFibGVNaW4udmFsdWVPZigpXG4gICAgICAgICAgICAgIDogdHJ1ZSkgJiZcbiAgICAgICAgICAgIChzZWxlY3RhYmxlTWF4XG4gICAgICAgICAgICAgID8gc2VsZWN0ZWQudmFsdWVPZigpIDw9IHNlbGVjdGFibGVNYXgudmFsdWVPZigpXG4gICAgICAgICAgICAgIDogdHJ1ZSkgJiZcbiAgICAgICAgICAgIChvbWl0UmFuZ2VcbiAgICAgICAgICAgICAgPyBzZWxlY3RlZC52YWx1ZU9mKCkgPCBvbWl0UmFuZ2VbMF0udmFsdWVPZigpIHx8XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQudmFsdWVPZigpID4gb21pdFJhbmdlWzFdLnZhbHVlT2YoKVxuICAgICAgICAgICAgICA6IHRydWUpLFxuICAgICAgICApO1xuICAgICAgICBpZiAodmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBmaXJzdFZpc2libGVTZWxlY3RlZERhdGVPZmZzZXQgPSBnZXRXZWVrZGF5TnVtYmVyKFxuICAgICAgICAgICAgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlWzBdLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlLmZvckVhY2goKHNlbGVjdGVkLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB4ID0gZ2V0V2Vla2RheU51bWJlcihzZWxlY3RlZCk7XG4gICAgICAgICAgICBjb25zdCB5ID0gTWF0aC5mbG9vcigoaSArIGZpcnN0VmlzaWJsZVNlbGVjdGVkRGF0ZU9mZnNldCkgLyA3KTtcbiAgICAgICAgICAgIHNlbGVjdGVkRGF0ZUNvb3JkaW5hdGVzLnNldChzZWxlY3RlZC52YWx1ZU9mKCksIFt4LCB5XSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2VyaWFsaXplQ29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IFtudW1iZXIsIG51bWJlcl0pOiBzdHJpbmcge1xuICAgICAgICAgIHJldHVybiBjb29yZGluYXRlcy5qb2luKCc6Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcyA9IG5ldyBTZXQoXG4gICAgICAgICAgWy4uLnNlbGVjdGVkRGF0ZUNvb3JkaW5hdGVzLnZhbHVlcygpXS5tYXAoc2VyaWFsaXplQ29vcmRpbmF0ZXMpLFxuICAgICAgICApO1xuXG4gICAgICAgIGZ1bmN0aW9uIGdldFJvdW5kZWRDb3JuZXJzKGRhdGU6IERhdGUpOiB7XG4gICAgICAgICAgbnc6IGJvb2xlYW47XG4gICAgICAgICAgbmU6IGJvb2xlYW47XG4gICAgICAgICAgc2U6IGJvb2xlYW47XG4gICAgICAgICAgc3c6IGJvb2xlYW47XG4gICAgICAgIH0ge1xuICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gc2VsZWN0ZWREYXRlQ29vcmRpbmF0ZXMuZ2V0KGRhdGUudmFsdWVPZigpKTtcbiAgICAgICAgICBpZiAoIWNvb3JkaW5hdGVzKVxuICAgICAgICAgICAgcmV0dXJuIHsgbnc6IGZhbHNlLCBuZTogZmFsc2UsIHNlOiBmYWxzZSwgc3c6IGZhbHNlIH07XG4gICAgICAgICAgY29uc3QgW3gsIHldID0gY29vcmRpbmF0ZXM7XG4gICAgICAgICAgY29uc3QgdG9wID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3gsIHkgLSAxXSksXG4gICAgICAgICAgICByaWdodCA9IHNlcmlhbGl6ZUNvb3JkaW5hdGVzKFt4ICsgMSwgeV0pLFxuICAgICAgICAgICAgYm90dG9tID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3gsIHkgKyAxXSksXG4gICAgICAgICAgICBsZWZ0ID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3ggLSAxLCB5XSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG53OlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKHRvcCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhsZWZ0KSxcbiAgICAgICAgICAgIG5lOlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKHRvcCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhyaWdodCksXG4gICAgICAgICAgICBzZTpcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhyaWdodCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhib3R0b20pLFxuICAgICAgICAgICAgc3c6XG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXMobGVmdCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhib3R0b20pLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VWYWx1ZXMgPSBuZXcgU2V0KFxuICAgICAgICAgIHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZS5tYXAoc2VsZWN0ZWQgPT4gc2VsZWN0ZWQudmFsdWVPZigpKSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0b2RheSA9IHRpbWVEYXkuZmxvb3IobmV3IERhdGUoKSk7XG5cbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyRGF0ZXMubWFwKGRhdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgbncsIG5lLCBzZSwgc3cgfSA9IGdldFJvdW5kZWRDb3JuZXJzKGRhdGUpO1xuICAgICAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgIGNvbnN0IGluUmFuZ2UgPSB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VWYWx1ZXMuaGFzKGRhdGVWYWx1ZSk7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlXG4gICAgICAgICAgICA/IHNlbGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgID8gZGF0ZVZhbHVlID09PSBzZWxlY3RlZFZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgICA6IGRhdGVWYWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZVswXS52YWx1ZU9mKCkgfHxcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPT09IHNlbGVjdGVkVmFsdWVbMV0udmFsdWVPZigpXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZGlzcGxheTogZGF5Rm9ybWF0dGVyKGRhdGUpLFxuICAgICAgICAgICAgZmFkZUluOlxuICAgICAgICAgICAgICBpblJhbmdlICYmXG4gICAgICAgICAgICAgIChkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICBtaW5DYWxlbmRhckRhdGUudmFsdWVPZigpLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZU1pbj8udmFsdWVPZigpID8/IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgZGF0ZVZhbHVlID09PVxuICAgICAgICAgICAgICAgICAgKG9taXRSYW5nZVxuICAgICAgICAgICAgICAgICAgICA/IHRpbWVEYXkub2Zmc2V0KG9taXRSYW5nZVsxXSwgMSkudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogLUluZmluaXR5KSksXG4gICAgICAgICAgICBmYWRlT3V0OlxuICAgICAgICAgICAgICBpblJhbmdlICYmXG4gICAgICAgICAgICAgIChkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICBtYXhDYWxlbmRhckRhdGUudmFsdWVPZigpLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZU1heD8udmFsdWVPZigpID8/IEluZmluaXR5LFxuICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgICAob21pdFJhbmdlXG4gICAgICAgICAgICAgICAgICAgID8gdGltZURheS5vZmZzZXQob21pdFJhbmdlWzBdLCAtMSkudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHkpKSxcbiAgICAgICAgICAgIGhpZGRlbjpcbiAgICAgICAgICAgICAgZGF0ZVZhbHVlIDwgKHNlbGVjdGFibGVNaW4/LnZhbHVlT2YoKSA/PyAtSW5maW5pdHkpIHx8XG4gICAgICAgICAgICAgIGRhdGVWYWx1ZSA+IChzZWxlY3RhYmxlTWF4Py52YWx1ZU9mKCkgPz8gSW5maW5pdHkpIHx8XG4gICAgICAgICAgICAgIChvbWl0UmFuZ2VcbiAgICAgICAgICAgICAgICA/IG9taXRSYW5nZVswXS52YWx1ZU9mKCkgPD0gZGF0ZVZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPD0gb21pdFJhbmdlWzFdLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgIDogZmFsc2UpLFxuICAgICAgICAgICAgaW5DdXJyZW50TW9udGg6XG4gICAgICAgICAgICAgIGRhdGVWYWx1ZSA+PSBhY3RpdmVZZWFyTW9udGgudmFsdWVPZigpICYmXG4gICAgICAgICAgICAgIGRhdGVWYWx1ZSA8IHRpbWVNb250aC5vZmZzZXQoYWN0aXZlWWVhck1vbnRoLCAxKS52YWx1ZU9mKCksXG4gICAgICAgICAgICBpblJhbmdlLFxuICAgICAgICAgICAgcm91bmRlZE5lOiBuZSxcbiAgICAgICAgICAgIHJvdW5kZWROdzogbncsXG4gICAgICAgICAgICByb3VuZGVkU2U6IHNlLFxuICAgICAgICAgICAgcm91bmRlZFN3OiBzdyxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgdG9kYXk6IGRhdGVWYWx1ZSA9PT0gdG9kYXkudmFsdWVPZigpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgc2VsZWN0RGF5KGRheTogQ2FsZW5kYXJEYXRlKSB7XG4gICAgaWYgKCFkYXkuaW5DdXJyZW50TW9udGgpIHtcbiAgICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoQ2hhbmdlLmVtaXQodGltZU1vbnRoLmZsb29yKGRheS5kYXRlKSk7XG4gICAgfVxuICAgIHRoaXMuZGF0ZVNlbGVjdC5lbWl0KGRheS5kYXRlKTtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBhY3RpdmVZZWFyTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGRhdGVTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FsZW5kYXJDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgZGVmYXVsdE1pbiA9IHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChuZXcgRGF0ZSgpLCAtNykpO1xuICBleHBvcnQgY29uc3QgZGVmYXVsdE1heCA9IHRpbWVEYXkub2Zmc2V0KFxuICAgIHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChuZXcgRGF0ZSgpLCA1KSksXG4gICAgLTEsXG4gICk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udHJvbHNcIj5cbiAgPGRpdj5cbiAgICA8bmctdGVtcGxhdGUgI3NlbGVjdFRyaWdnZXIgbGV0LXNlbGVjdGVkT3B0aW9uPVwic2VsZWN0ZWRPcHRpb25cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgcml2QnV0dG9uXG4gICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgW2ljb25dPVwiJ0NoZXZyb25Eb3duJ1wiXG4gICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ2xhc3QnXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIHt7IHNlbGVjdGVkT3B0aW9uLnRpdGxlIHx8ICcuLi4nIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxyaXYtc2luZ2xlLXNlbGVjdFxuICAgICAgcGxhY2Vob2xkZXI9XCJNb250aC4uLlwiXG4gICAgICBbb3B0aW9uc109XCIobW9udGhPcHRpb25zJCB8IGFzeW5jKSB8fCBbXVwiXG4gICAgICBbc2VsZWN0ZWRPcHRpb25dPVwic2VsZWN0ZWRNb250aE9wdGlvbiQgfCBhc3luY1wiXG4gICAgICAoc2VsZWN0ZWRPcHRpb25DaGFuZ2UpPVwiYWN0aXZlWWVhck1vbnRoQ2hhbmdlLmVtaXQoJGV2ZW50LmRhdGUpXCJcbiAgICAgIFt0cmlnZ2VyVGVtcGxhdGVdPVwic2VsZWN0VHJpZ2dlclwiXG4gICAgPjwvcml2LXNpbmdsZS1zZWxlY3Q+XG4gICAgPHJpdi1zaW5nbGUtc2VsZWN0XG4gICAgICBwbGFjZWhvbGRlcj1cIlllYXIuLi5cIlxuICAgICAgW29wdGlvbnNdPVwiKHllYXJPcHRpb25zJCB8IGFzeW5jKSB8fCBbXVwiXG4gICAgICBbc2VsZWN0ZWRPcHRpb25dPVwic2VsZWN0ZWRZZWFyT3B0aW9uJCB8IGFzeW5jXCJcbiAgICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJhY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCgkZXZlbnQuZGF0ZSlcIlxuICAgICAgW3RyaWdnZXJUZW1wbGF0ZV09XCJzZWxlY3RUcmlnZ2VyXCJcbiAgICA+PC9yaXYtc2luZ2xlLXNlbGVjdD5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInsgcHJldjogcHJldmlvdXNNb250aCQgfCBhc3luYywgbmV4dDogbmV4dE1vbnRoJCB8IGFzeW5jIH07IGxldCB2bVwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICByaXZCdXR0b25cbiAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICBbaWNvbl09XCInQXJyb3dMZWZ0J1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIXZtLnByZXZcIlxuICAgICAgKGNsaWNrKT1cInZtLnByZXYgPyBhY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCh2bS5wcmV2KSA6IG51bGxcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPjwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHJpdkJ1dHRvblxuICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgIFtpY29uXT1cIidBcnJvd1JpZ2h0J1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIXZtLm5leHRcIlxuICAgICAgKGNsaWNrKT1cInZtLm5leHQgPyBhY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCh2bS5uZXh0KSA6IG51bGxcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPjwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImNhbGVuZGFyXCI+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5TdTwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPk1vPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+VHU8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5XZTwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlRoPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+RnI8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5TYTwvc3Bhbj5cbiAgPGJ1dHRvblxuICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF0ZXMkIHwgYXN5bmNcIlxuICAgIGNsYXNzPVwiZGF5XCJcbiAgICBbZGlzYWJsZWRdPVwiZGF5LmhpZGRlblwiXG4gICAgW2NsYXNzLmJsZWVkXT1cIiFkYXkuaW5DdXJyZW50TW9udGhcIlxuICAgIFtjbGFzcy5mYWRlLWluXT1cImRheS5mYWRlSW5cIlxuICAgIFtjbGFzcy5mYWRlLW91dF09XCJkYXkuZmFkZU91dFwiXG4gICAgW2NsYXNzLmluLXJhbmdlXT1cImRheS5pblJhbmdlXCJcbiAgICBbY2xhc3Mucm91bmRlZC1uZV09XCJkYXkucm91bmRlZE5lXCJcbiAgICBbY2xhc3Mucm91bmRlZC1ud109XCJkYXkucm91bmRlZE53XCJcbiAgICBbY2xhc3Mucm91bmRlZC1zZV09XCJkYXkucm91bmRlZFNlXCJcbiAgICBbY2xhc3Mucm91bmRlZC1zd109XCJkYXkucm91bmRlZFN3XCJcbiAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheSlcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICA+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwiZGF5LXdyYXBwZXJcIlxuICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRheS5zZWxlY3RlZFwiXG4gICAgICBbY2xhc3MudG9kYXldPVwiZGF5LnRvZGF5XCJcbiAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZGF5LmhpZGRlblwiXG4gICAgPlxuICAgICAge3sgZGF5LmRpc3BsYXkgfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLFNBQVMsR0FDVixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsR0FBRyxFQUNILFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBR2QsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFaEQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFVO0lBQ2xDLE9BQU8sUUFBUSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQW9CRCw2RUFBNkU7QUFDN0UsMkJBQTJCO0FBTzNCLE1BQU0sT0FBTyxpQkFBaUI7SUFOOUI7UUFPbUIscUJBQWdC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dCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgdGltZURheSxcbiAgdGltZURheXMsXG4gIHRpbWVNb250aCxcbiAgdGltZU1vbnRocyxcbiAgdGltZVN1bmRheSxcbiAgdGltZVllYXIsXG4gIHRpbWVZZWFycyxcbn0gZnJvbSAnZDMtdGltZSc7XG5pbXBvcnQgeyB0aW1lRm9ybWF0IH0gZnJvbSAnZDMtdGltZS1mb3JtYXQnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBjb21iaW5lTGF0ZXN0LFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNpbmdsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NpbmdsZS1zZWxlY3Qvc2luZ2xlLXNlbGVjdC5jb21wb25lbnQnO1xuXG5jb25zdCBtb250aEZvcm1hdHRlciA9IHRpbWVGb3JtYXQoJyVCJyk7XG5jb25zdCB5ZWFyRm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJVknKTtcbmNvbnN0IGRheUZvcm1hdHRlciA9IHRpbWVGb3JtYXQoJyVlJyk7XG5jb25zdCB3ZWVrZGF5TnVtYmVyRm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJXcnKTtcblxuZnVuY3Rpb24gZ2V0V2Vla2RheU51bWJlcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhcnNlSW50KHdlZWtkYXlOdW1iZXJGb3JtYXR0ZXIoZGF0ZSkpO1xufVxuXG50eXBlIERhdGVPcHRpb24gPSBTaW5nbGVTZWxlY3RDb21wb25lbnQuT3B0aW9uICYgeyBkYXRlOiBEYXRlIH07XG5cbnR5cGUgQ2FsZW5kYXJEYXRlID0ge1xuICBkYXRlOiBEYXRlO1xuICBkaXNwbGF5OiBzdHJpbmc7XG4gIGZhZGVJbjogYm9vbGVhbjtcbiAgZmFkZU91dDogYm9vbGVhbjtcbiAgaGlkZGVuOiBib29sZWFuO1xuICBpbkN1cnJlbnRNb250aDogYm9vbGVhbjtcbiAgaW5SYW5nZTogYm9vbGVhbjtcbiAgcm91bmRlZE5lOiBib29sZWFuO1xuICByb3VuZGVkTnc6IGJvb2xlYW47XG4gIHJvdW5kZWRTZTogYm9vbGVhbjtcbiAgcm91bmRlZFN3OiBib29sZWFuO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgdG9kYXk6IGJvb2xlYW47XG59O1xuXG4vLyBUT0RPOiBvbmNlIHdlIHVwZ3JhZGUgdG8gQW5ndWxhciAxNiwgdGhpcyBjb21wb25lbnQgY2FuIGJlIGNsZWFuZWQgdXAgd2l0aFxuLy8gc2lnbmFscyBpbnN0ZWFkIG9mIFJ4SlMuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtY2FsZW5kYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZlWWVhck1vbnRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZT4obmV3IERhdGUoKSk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYWN0aXZlWWVhck1vbnRoKHY6IERhdGUpIHtcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGFjdGl2ZVllYXJNb250aCgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVZZWFyTW9udGgkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlNaW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihcbiAgICBDYWxlbmRhckNvbXBvbmVudC5kZWZhdWx0TWluLFxuICApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc3BsYXlNaW4odjogRGF0ZSkge1xuICAgIHRoaXMuZGlzcGxheU1pbiQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRpc3BsYXlNaW4oKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheU1pbiQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheU1heCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KFxuICAgIENhbGVuZGFyQ29tcG9uZW50LmRlZmF1bHRNYXgsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzcGxheU1heCh2OiBEYXRlKSB7XG4gICAgdGhpcy5kaXNwbGF5TWF4JC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgZGlzcGxheU1heCgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TWF4JC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RhYmxlTWluJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZSB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkLFxuICApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGFibGVNaW4odjogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc2VsZWN0YWJsZU1pbiQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGFibGVNaW4oKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZU1pbiQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0YWJsZU1heCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGUgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZCxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RhYmxlTWF4KHY6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnNlbGVjdGFibGVNYXgkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RhYmxlTWF4KCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVNYXgkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG9taXRSYW5nZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkLFxuICApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG9taXRSYW5nZSh2OiBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLm9taXRSYW5nZSQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9taXRSYW5nZSgpOiBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm9taXRSYW5nZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRWYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIERhdGUgfCBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVmFsdWUodjogRGF0ZSB8IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkVmFsdWUoKTogRGF0ZSB8IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHJlYWRvbmx5IHllYXJPcHRpb25zJDogT2JzZXJ2YWJsZTxEYXRlT3B0aW9uW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kaXNwbGF5TWluJCxcbiAgICB0aGlzLmRpc3BsYXlNYXgkLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1pbiQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JCxcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtcbiAgICAgICAgZGlzcGxheU1pbixcbiAgICAgICAgZGlzcGxheU1heCxcbiAgICAgICAgc2VsZWN0YWJsZU1pbixcbiAgICAgICAgc2VsZWN0YWJsZU1heCxcbiAgICAgICAgYWN0aXZlWWVhck1vbnRoLFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCBtaW46IERhdGUgPSBzZWxlY3RhYmxlTWluID8/IGRpc3BsYXlNaW47XG4gICAgICAgIGNvbnN0IG1heDogRGF0ZSA9IHNlbGVjdGFibGVNYXggPz8gZGlzcGxheU1heDtcbiAgICAgICAgcmV0dXJuIHRpbWVZZWFycyh0aW1lWWVhci5mbG9vcihkaXNwbGF5TWluKSwgZGlzcGxheU1heCkubWFwKFxuICAgICAgICAgIGZsb29yZWRZZWFyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgZmxvb3JlZFllYXIuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgYWN0aXZlWWVhck1vbnRoLmdldE1vbnRoKCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IHllYXIuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICB0aXRsZTogeWVhckZvcm1hdHRlcih5ZWFyKSxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6XG4gICAgICAgICAgICAgICAgeWVhci5nZXRGdWxsWWVhcigpIDwgbWluLmdldEZ1bGxZZWFyKCkgfHxcbiAgICAgICAgICAgICAgICB5ZWFyLmdldEZ1bGxZZWFyKCkgPiBtYXguZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgZGF0ZTogeWVhcixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkWWVhck9wdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnllYXJPcHRpb25zJCxcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFt5ZWFyT3B0aW9ucywgYWN0aXZlWWVhck1vbnRoXSkgPT5cbiAgICAgICAgeWVhck9wdGlvbnMuZmluZChcbiAgICAgICAgICB5ID0+IHkuaWQgPT09IGFjdGl2ZVllYXJNb250aC5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCksXG4gICAgICAgICkgfHwgbnVsbCxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgbW9udGhPcHRpb25zJDogT2JzZXJ2YWJsZTxEYXRlT3B0aW9uW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1pbiQsXG4gICAgdGhpcy5kaXNwbGF5TWF4JCxcbiAgICB0aGlzLnNlbGVjdGFibGVNaW4kLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtcbiAgICAgICAgYWN0aXZlWWVhck1vbnRoLFxuICAgICAgICBkaXNwbGF5TWluLFxuICAgICAgICBkaXNwbGF5TWF4LFxuICAgICAgICBzZWxlY3RhYmxlTWluLFxuICAgICAgICBzZWxlY3RhYmxlTWF4LFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCBtaW4gPSBzZWxlY3RhYmxlTWluID8/IGRpc3BsYXlNaW47XG4gICAgICAgIGNvbnN0IG1heCA9IHNlbGVjdGFibGVNYXggPz8gZGlzcGxheU1heDtcbiAgICAgICAgcmV0dXJuIHRpbWVNb250aHMoXG4gICAgICAgICAgdGltZVllYXIuZmxvb3IoYWN0aXZlWWVhck1vbnRoKSxcbiAgICAgICAgICB0aW1lWWVhci5mbG9vcih0aW1lWWVhci5vZmZzZXQoYWN0aXZlWWVhck1vbnRoLCAxKSksXG4gICAgICAgICkubWFwKG1vbnRoID0+ICh7XG4gICAgICAgICAgaWQ6IG1vbnRoLmdldE1vbnRoKCkudG9TdHJpbmcoKSxcbiAgICAgICAgICB0aXRsZTogbW9udGhGb3JtYXR0ZXIobW9udGgpLFxuICAgICAgICAgIGRpc2FibGVkOlxuICAgICAgICAgICAgbW9udGgudmFsdWVPZigpIDwgbWluLnZhbHVlT2YoKSB8fCBtb250aC52YWx1ZU9mKCkgPiBtYXgudmFsdWVPZigpLFxuICAgICAgICAgIGRhdGU6IG1vbnRoLFxuICAgICAgICB9KSk7XG4gICAgICB9LFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZE1vbnRoT3B0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMubW9udGhPcHRpb25zJCxcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFttb250aE9wdGlvbnMsIGFjdGl2ZVllYXJNb250aF0pID0+XG4gICAgICAgIG1vbnRoT3B0aW9ucy5maW5kKFxuICAgICAgICAgIG0gPT4gbS5pZCA9PT0gYWN0aXZlWWVhck1vbnRoLmdldE1vbnRoKCkudG9TdHJpbmcoKSxcbiAgICAgICAgKSB8fCBudWxsLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBwcmV2aW91c01vbnRoJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgICB0aGlzLmRpc3BsYXlNaW4kLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1pbiQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbeWVhck1vbnRoLCBkaXNwbGF5TWluLCBzZWxlY3RhYmxlTWluXSkgPT4ge1xuICAgICAgY29uc3QgbWluOiBEYXRlID0gc2VsZWN0YWJsZU1pbiA/PyBkaXNwbGF5TWluO1xuICAgICAgY29uc3QgcHJldmlvdXMgPSB0aW1lTW9udGguZmxvb3IodGltZU1vbnRoLm9mZnNldCh5ZWFyTW9udGgsIC0xKSk7XG4gICAgICBpZiAocHJldmlvdXMudmFsdWVPZigpIDwgbWluLnZhbHVlT2YoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgbmV4dE1vbnRoJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgICB0aGlzLmRpc3BsYXlNYXgkLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbeWVhck1vbnRoLCBkaXNwbGF5TWF4LCBzZWxlY3RhYmxlTWF4XSkgPT4ge1xuICAgICAgY29uc3QgbWF4OiBEYXRlID0gc2VsZWN0YWJsZU1heCA/PyBkaXNwbGF5TWF4O1xuICAgICAgY29uc3QgbmV4dCA9IHRpbWVNb250aC5mbG9vcih0aW1lTW9udGgub2Zmc2V0KHllYXJNb250aCwgMSkpO1xuICAgICAgaWYgKG5leHQudmFsdWVPZigpID4gbWF4LnZhbHVlT2YoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRhdGVzSW5TZWxlY3RlZFJhbmdlJDogT2JzZXJ2YWJsZTxEYXRlW10+ID1cbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUkLnBpcGUoXG4gICAgICBtYXAoc2VsZWN0ZWRWYWx1ZSA9PiB7XG4gICAgICAgIGlmICghc2VsZWN0ZWRWYWx1ZSkgcmV0dXJuIFtdO1xuICAgICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBbc2VsZWN0ZWRWYWx1ZV07XG4gICAgICAgIHJldHVybiB0aW1lRGF5cyhcbiAgICAgICAgICB0aW1lRGF5LmZsb29yKHNlbGVjdGVkVmFsdWVbMF0pLFxuICAgICAgICAgIHRpbWVEYXkuZmxvb3IodGltZURheS5vZmZzZXQoc2VsZWN0ZWRWYWx1ZVsxXSwgMSkpLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICAgICk7XG5cbiAgcmVhZG9ubHkgZGF0ZXMkOiBPYnNlcnZhYmxlPENhbGVuZGFyRGF0ZVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUkLFxuICAgIHRoaXMuZGF0ZXNJblNlbGVjdGVkUmFuZ2UkLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1pbiQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JCxcbiAgICB0aGlzLm9taXRSYW5nZSQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtcbiAgICAgICAgYWN0aXZlWWVhck1vbnRoLFxuICAgICAgICBzZWxlY3RlZFZhbHVlLFxuICAgICAgICBkYXRlc0luU2VsZWN0ZWRSYW5nZSxcbiAgICAgICAgc2VsZWN0YWJsZU1pbixcbiAgICAgICAgc2VsZWN0YWJsZU1heCxcbiAgICAgICAgb21pdFJhbmdlLFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCBjYWxlbmRhckRhdGVzID0gdGltZURheXMoXG4gICAgICAgICAgdGltZVN1bmRheS5mbG9vcihhY3RpdmVZZWFyTW9udGgpLFxuICAgICAgICAgIHRpbWVTdW5kYXkuY2VpbCh0aW1lTW9udGgub2Zmc2V0KGFjdGl2ZVllYXJNb250aCwgMSkpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBtaW5DYWxlbmRhckRhdGUgPSBjYWxlbmRhckRhdGVzWzBdO1xuICAgICAgICBjb25zdCBtYXhDYWxlbmRhckRhdGUgPSBjYWxlbmRhckRhdGVzW2NhbGVuZGFyRGF0ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZUNvb3JkaW5hdGVzID0gbmV3IE1hcDxudW1iZXIsIFtudW1iZXIsIG51bWJlcl0+KCk7XG4gICAgICAgIGNvbnN0IHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZSA9IGRhdGVzSW5TZWxlY3RlZFJhbmdlLmZpbHRlcihcbiAgICAgICAgICBzZWxlY3RlZCA9PlxuICAgICAgICAgICAgc2VsZWN0ZWQudmFsdWVPZigpID49IG1pbkNhbGVuZGFyRGF0ZS52YWx1ZU9mKCkgJiZcbiAgICAgICAgICAgIHNlbGVjdGVkLnZhbHVlT2YoKSA8PSBtYXhDYWxlbmRhckRhdGUudmFsdWVPZigpICYmXG4gICAgICAgICAgICAoc2VsZWN0YWJsZU1pblxuICAgICAgICAgICAgICA/IHNlbGVjdGVkLnZhbHVlT2YoKSA+PSBzZWxlY3RhYmxlTWluLnZhbHVlT2YoKVxuICAgICAgICAgICAgICA6IHRydWUpICYmXG4gICAgICAgICAgICAoc2VsZWN0YWJsZU1heFxuICAgICAgICAgICAgICA/IHNlbGVjdGVkLnZhbHVlT2YoKSA8PSBzZWxlY3RhYmxlTWF4LnZhbHVlT2YoKVxuICAgICAgICAgICAgICA6IHRydWUpICYmXG4gICAgICAgICAgICAob21pdFJhbmdlXG4gICAgICAgICAgICAgID8gc2VsZWN0ZWQudmFsdWVPZigpIDwgb21pdFJhbmdlWzBdLnZhbHVlT2YoKSB8fFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkLnZhbHVlT2YoKSA+IG9taXRSYW5nZVsxXS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgOiB0cnVlKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RWaXNpYmxlU2VsZWN0ZWREYXRlT2Zmc2V0ID0gZ2V0V2Vla2RheU51bWJlcihcbiAgICAgICAgICAgIHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZVswXSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZS5mb3JFYWNoKChzZWxlY3RlZCwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeCA9IGdldFdlZWtkYXlOdW1iZXIoc2VsZWN0ZWQpO1xuICAgICAgICAgICAgY29uc3QgeSA9IE1hdGguZmxvb3IoKGkgKyBmaXJzdFZpc2libGVTZWxlY3RlZERhdGVPZmZzZXQpIC8gNyk7XG4gICAgICAgICAgICBzZWxlY3RlZERhdGVDb29yZGluYXRlcy5zZXQoc2VsZWN0ZWQudmFsdWVPZigpLCBbeCwgeV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZUNvb3JkaW5hdGVzKGNvb3JkaW5hdGVzOiBbbnVtYmVyLCBudW1iZXJdKTogc3RyaW5nIHtcbiAgICAgICAgICByZXR1cm4gY29vcmRpbmF0ZXMuam9pbignOicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMgPSBuZXcgU2V0KFxuICAgICAgICAgIFsuLi5zZWxlY3RlZERhdGVDb29yZGluYXRlcy52YWx1ZXMoKV0ubWFwKHNlcmlhbGl6ZUNvb3JkaW5hdGVzKSxcbiAgICAgICAgKTtcblxuICAgICAgICBmdW5jdGlvbiBnZXRSb3VuZGVkQ29ybmVycyhkYXRlOiBEYXRlKToge1xuICAgICAgICAgIG53OiBib29sZWFuO1xuICAgICAgICAgIG5lOiBib29sZWFuO1xuICAgICAgICAgIHNlOiBib29sZWFuO1xuICAgICAgICAgIHN3OiBib29sZWFuO1xuICAgICAgICB9IHtcbiAgICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IHNlbGVjdGVkRGF0ZUNvb3JkaW5hdGVzLmdldChkYXRlLnZhbHVlT2YoKSk7XG4gICAgICAgICAgaWYgKCFjb29yZGluYXRlcylcbiAgICAgICAgICAgIHJldHVybiB7IG53OiBmYWxzZSwgbmU6IGZhbHNlLCBzZTogZmFsc2UsIHN3OiBmYWxzZSB9O1xuICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IGNvb3JkaW5hdGVzO1xuICAgICAgICAgIGNvbnN0IHRvcCA9IHNlcmlhbGl6ZUNvb3JkaW5hdGVzKFt4LCB5IC0gMV0pLFxuICAgICAgICAgICAgcmlnaHQgPSBzZXJpYWxpemVDb29yZGluYXRlcyhbeCArIDEsIHldKSxcbiAgICAgICAgICAgIGJvdHRvbSA9IHNlcmlhbGl6ZUNvb3JkaW5hdGVzKFt4LCB5ICsgMV0pLFxuICAgICAgICAgICAgbGVmdCA9IHNlcmlhbGl6ZUNvb3JkaW5hdGVzKFt4IC0gMSwgeV0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBudzpcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyh0b3ApICYmXG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXMobGVmdCksXG4gICAgICAgICAgICBuZTpcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyh0b3ApICYmXG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXMocmlnaHQpLFxuICAgICAgICAgICAgc2U6XG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXMocmlnaHQpICYmXG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXMoYm90dG9tKSxcbiAgICAgICAgICAgIHN3OlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKGxlZnQpICYmXG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXMoYm90dG9tKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlVmFsdWVzID0gbmV3IFNldChcbiAgICAgICAgICB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2UubWFwKHNlbGVjdGVkID0+IHNlbGVjdGVkLnZhbHVlT2YoKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdG9kYXkgPSB0aW1lRGF5LmZsb29yKG5ldyBEYXRlKCkpO1xuXG4gICAgICAgIHJldHVybiBjYWxlbmRhckRhdGVzLm1hcChkYXRlID0+IHtcbiAgICAgICAgICBjb25zdCB7IG53LCBuZSwgc2UsIHN3IH0gPSBnZXRSb3VuZGVkQ29ybmVycyhkYXRlKTtcbiAgICAgICAgICBjb25zdCBkYXRlVmFsdWUgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICBjb25zdCBpblJhbmdlID0gdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlVmFsdWVzLmhhcyhkYXRlVmFsdWUpO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZVxuICAgICAgICAgICAgPyBzZWxlY3RlZFZhbHVlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgICA/IGRhdGVWYWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgOiBkYXRlVmFsdWUgPT09IHNlbGVjdGVkVmFsdWVbMF0udmFsdWVPZigpIHx8XG4gICAgICAgICAgICAgICAgZGF0ZVZhbHVlID09PSBzZWxlY3RlZFZhbHVlWzFdLnZhbHVlT2YoKVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGRpc3BsYXk6IGRheUZvcm1hdHRlcihkYXRlKSxcbiAgICAgICAgICAgIGZhZGVJbjpcbiAgICAgICAgICAgICAgaW5SYW5nZSAmJlxuICAgICAgICAgICAgICAoZGF0ZVZhbHVlID09PVxuICAgICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgbWluQ2FsZW5kYXJEYXRlLnZhbHVlT2YoKSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGVNaW4/LnZhbHVlT2YoKSA/PyAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgIGRhdGVWYWx1ZSA9PT1cbiAgICAgICAgICAgICAgICAgIChvbWl0UmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgPyB0aW1lRGF5Lm9mZnNldChvbWl0UmFuZ2VbMV0sIDEpLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICA6IC1JbmZpbml0eSkpLFxuICAgICAgICAgICAgZmFkZU91dDpcbiAgICAgICAgICAgICAgaW5SYW5nZSAmJlxuICAgICAgICAgICAgICAoZGF0ZVZhbHVlID09PVxuICAgICAgICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgbWF4Q2FsZW5kYXJEYXRlLnZhbHVlT2YoKSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGVNYXg/LnZhbHVlT2YoKSA/PyBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgZGF0ZVZhbHVlID09PVxuICAgICAgICAgICAgICAgICAgKG9taXRSYW5nZVxuICAgICAgICAgICAgICAgICAgICA/IHRpbWVEYXkub2Zmc2V0KG9taXRSYW5nZVswXSwgLTEpLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICA6IEluZmluaXR5KSksXG4gICAgICAgICAgICBoaWRkZW46XG4gICAgICAgICAgICAgIGRhdGVWYWx1ZSA8IChzZWxlY3RhYmxlTWluPy52YWx1ZU9mKCkgPz8gLUluZmluaXR5KSB8fFxuICAgICAgICAgICAgICBkYXRlVmFsdWUgPiAoc2VsZWN0YWJsZU1heD8udmFsdWVPZigpID8/IEluZmluaXR5KSB8fFxuICAgICAgICAgICAgICAob21pdFJhbmdlXG4gICAgICAgICAgICAgICAgPyBvbWl0UmFuZ2VbMF0udmFsdWVPZigpIDw9IGRhdGVWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgZGF0ZVZhbHVlIDw9IG9taXRSYW5nZVsxXS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICA6IGZhbHNlKSxcbiAgICAgICAgICAgIGluQ3VycmVudE1vbnRoOlxuICAgICAgICAgICAgICBkYXRlVmFsdWUgPj0gYWN0aXZlWWVhck1vbnRoLnZhbHVlT2YoKSAmJlxuICAgICAgICAgICAgICBkYXRlVmFsdWUgPCB0aW1lTW9udGgub2Zmc2V0KGFjdGl2ZVllYXJNb250aCwgMSkudmFsdWVPZigpLFxuICAgICAgICAgICAgaW5SYW5nZSxcbiAgICAgICAgICAgIHJvdW5kZWROZTogbmUsXG4gICAgICAgICAgICByb3VuZGVkTnc6IG53LFxuICAgICAgICAgICAgcm91bmRlZFNlOiBzZSxcbiAgICAgICAgICAgIHJvdW5kZWRTdzogc3csXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIHRvZGF5OiBkYXRlVmFsdWUgPT09IHRvZGF5LnZhbHVlT2YoKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHNlbGVjdERheShkYXk6IENhbGVuZGFyRGF0ZSkge1xuICAgIGlmICghZGF5LmluQ3VycmVudE1vbnRoKSB7XG4gICAgICB0aGlzLmFjdGl2ZVllYXJNb250aENoYW5nZS5lbWl0KHRpbWVNb250aC5mbG9vcihkYXkuZGF0ZSkpO1xuICAgIH1cbiAgICB0aGlzLmRhdGVTZWxlY3QuZW1pdChkYXkuZGF0ZSk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgYWN0aXZlWWVhck1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIEBPdXRwdXQoKVxuICBkYXRlU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENhbGVuZGFyQ29tcG9uZW50IHtcbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHRNaW4gPSB0aW1lWWVhci5mbG9vcih0aW1lWWVhci5vZmZzZXQobmV3IERhdGUoKSwgLTcpKTtcbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHRNYXggPSB0aW1lRGF5Lm9mZnNldChcbiAgICB0aW1lWWVhci5mbG9vcih0aW1lWWVhci5vZmZzZXQobmV3IERhdGUoKSwgNSkpLFxuICAgIC0xLFxuICApO1xufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gIDxkaXY+XG4gICAgPG5nLXRlbXBsYXRlICNzZWxlY3RUcmlnZ2VyIGxldC1zZWxlY3RlZE9wdGlvbj1cInNlbGVjdGVkT3B0aW9uXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHJpdkJ1dHRvblxuICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcbiAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgIFtpY29uXT1cIidDaGV2cm9uRG93bidcIlxuICAgICAgICBbaWNvblBvc2l0aW9uXT1cIidsYXN0J1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgPlxuICAgICAgICB7eyBzZWxlY3RlZE9wdGlvbi50aXRsZSB8fCAnLi4uJyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8cml2LXNpbmdsZS1zZWxlY3RcbiAgICAgIHBsYWNlaG9sZGVyPVwiTW9udGguLi5cIlxuICAgICAgW2dyb3Vwc109XCJtb250aE9wdGlvbnMkIHwgYXN5bmMgfCByaXZPcHRpb25Hcm91cFwiXG4gICAgICBbc2VsZWN0ZWRPcHRpb25dPVwic2VsZWN0ZWRNb250aE9wdGlvbiQgfCBhc3luY1wiXG4gICAgICAoc2VsZWN0ZWRPcHRpb25DaGFuZ2UpPVwiYWN0aXZlWWVhck1vbnRoQ2hhbmdlLmVtaXQoJGV2ZW50LmRhdGUpXCJcbiAgICAgIFt0cmlnZ2VyVGVtcGxhdGVdPVwic2VsZWN0VHJpZ2dlclwiXG4gICAgPjwvcml2LXNpbmdsZS1zZWxlY3Q+XG4gICAgPHJpdi1zaW5nbGUtc2VsZWN0XG4gICAgICBwbGFjZWhvbGRlcj1cIlllYXIuLi5cIlxuICAgICAgW2dyb3Vwc109XCJ5ZWFyT3B0aW9ucyQgfCBhc3luYyB8IHJpdk9wdGlvbkdyb3VwXCJcbiAgICAgIFtzZWxlY3RlZE9wdGlvbl09XCJzZWxlY3RlZFllYXJPcHRpb24kIHwgYXN5bmNcIlxuICAgICAgKHNlbGVjdGVkT3B0aW9uQ2hhbmdlKT1cImFjdGl2ZVllYXJNb250aENoYW5nZS5lbWl0KCRldmVudC5kYXRlKVwiXG4gICAgICBbdHJpZ2dlclRlbXBsYXRlXT1cInNlbGVjdFRyaWdnZXJcIlxuICAgID48L3Jpdi1zaW5nbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwieyBwcmV2OiBwcmV2aW91c01vbnRoJCB8IGFzeW5jLCBuZXh0OiBuZXh0TW9udGgkIHwgYXN5bmMgfTsgbGV0IHZtXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIHJpdkJ1dHRvblxuICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgIFtpY29uXT1cIidBcnJvd0xlZnQnXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhdm0ucHJldlwiXG4gICAgICAoY2xpY2spPVwidm0ucHJldiA/IGFjdGl2ZVllYXJNb250aENoYW5nZS5lbWl0KHZtLnByZXYpIDogbnVsbFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+PC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgcml2QnV0dG9uXG4gICAgICBbc2l6ZV09XCInc21hbGwnXCJcbiAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgW2ljb25dPVwiJ0Fycm93UmlnaHQnXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhdm0ubmV4dFwiXG4gICAgICAoY2xpY2spPVwidm0ubmV4dCA/IGFjdGl2ZVllYXJNb250aENoYW5nZS5lbWl0KHZtLm5leHQpIDogbnVsbFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiY2FsZW5kYXJcIj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlN1PC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+TW88L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5UdTwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPldlPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+VGg8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5Gcjwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlNhPC9zcGFuPlxuICA8YnV0dG9uXG4gICAgKm5nRm9yPVwibGV0IGRheSBvZiBkYXRlcyQgfCBhc3luY1wiXG4gICAgY2xhc3M9XCJkYXlcIlxuICAgIFtkaXNhYmxlZF09XCJkYXkuaGlkZGVuXCJcbiAgICBbY2xhc3MuYmxlZWRdPVwiIWRheS5pbkN1cnJlbnRNb250aFwiXG4gICAgW2NsYXNzLmZhZGUtaW5dPVwiZGF5LmZhZGVJblwiXG4gICAgW2NsYXNzLmZhZGUtb3V0XT1cImRheS5mYWRlT3V0XCJcbiAgICBbY2xhc3MuaW4tcmFuZ2VdPVwiZGF5LmluUmFuZ2VcIlxuICAgIFtjbGFzcy5yb3VuZGVkLW5lXT1cImRheS5yb3VuZGVkTmVcIlxuICAgIFtjbGFzcy5yb3VuZGVkLW53XT1cImRheS5yb3VuZGVkTndcIlxuICAgIFtjbGFzcy5yb3VuZGVkLXNlXT1cImRheS5yb3VuZGVkU2VcIlxuICAgIFtjbGFzcy5yb3VuZGVkLXN3XT1cImRheS5yb3VuZGVkU3dcIlxuICAgIChjbGljayk9XCJzZWxlY3REYXkoZGF5KVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gID5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJkYXktd3JhcHBlclwiXG4gICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZGF5LnNlbGVjdGVkXCJcbiAgICAgIFtjbGFzcy50b2RheV09XCJkYXkudG9kYXlcIlxuICAgICAgW2NsYXNzLmhpZGRlbl09XCJkYXkuaGlkZGVuXCJcbiAgICA+XG4gICAgICB7eyBkYXkuZGlzcGxheSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
|