@coreui/angular-pro 5.0.0-alpha.13 → 5.0.0-alpha.15
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/esm2022/lib/accordion/accordion/accordion.component.mjs +22 -16
- package/esm2022/lib/alert/alert.component.mjs +30 -38
- package/esm2022/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +7 -6
- package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +4 -4
- package/esm2022/lib/calendar/calendar/calendar.component.mjs +4 -4
- package/esm2022/lib/calendar/calendar-month/calendar-day.directive.mjs +1 -1
- package/esm2022/lib/calendar/calendar-month/calendar-month.component.mjs +4 -9
- package/esm2022/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +4 -4
- package/esm2022/lib/carousel/carousel-control/carousel-control.component.mjs +3 -4
- package/esm2022/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +3 -4
- package/esm2022/lib/carousel/carousel-item/carousel-item.component.mjs +7 -8
- package/esm2022/lib/collapse/collapse.directive.mjs +30 -40
- package/esm2022/lib/date-picker/date-picker.component.mjs +5 -7
- package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +5 -7
- package/esm2022/lib/dropdown/dropdown/dropdown.component.mjs +26 -34
- package/esm2022/lib/element-cover/element-cover.component.mjs +4 -4
- package/esm2022/lib/form/form-check/form-check-input.directive.mjs +10 -8
- package/esm2022/lib/loading-button/loading-button.component.mjs +15 -21
- package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +2 -2
- package/esm2022/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +8 -7
- package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +6 -12
- package/esm2022/lib/placeholder/placeholder.directive.mjs +11 -18
- package/esm2022/lib/shared/theme.directive.mjs +3 -2
- package/esm2022/lib/sidebar/sidebar/sidebar.component.mjs +34 -46
- package/esm2022/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +4 -4
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +4 -4
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +17 -18
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +6 -11
- package/esm2022/lib/smart-pagination/smart-pagination.component.mjs +20 -24
- package/esm2022/lib/smart-table/smart-table/smart-table.component.mjs +4 -6
- package/esm2022/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +4 -4
- package/esm2022/lib/smart-table/smart-table-head/smart-table-head.component.mjs +7 -12
- package/esm2022/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +3 -5
- package/esm2022/lib/tabs/tab-content/tab-content.component.mjs +7 -7
- package/esm2022/lib/tabs/tab-content-ref.directive.mjs +12 -9
- package/esm2022/lib/tabs/tab-pane/tab-pane.component.mjs +5 -6
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +9 -8
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +9 -8
- package/esm2022/lib/time-picker/time-picker.component.mjs +5 -7
- package/esm2022/lib/time-picker/time-picker.module.mjs +2 -4
- package/esm2022/lib/toast/toast/toast.component.mjs +11 -9
- package/esm2022/lib/toast/toast-header/toast-header.component.mjs +3 -4
- package/esm2022/lib/widget/widget-stat-a/widget-stat-a.component.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-b/widget-stat-b.component.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-c/widget-stat-c.component.mjs +5 -5
- package/esm2022/lib/widget/widget-stat-d/widget-stat-d.component.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-e/widget-stat-e.component.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-f/widget-stat-f.component.mjs +4 -4
- package/fesm2022/coreui-angular-pro.mjs +313 -363
- package/fesm2022/coreui-angular-pro.mjs.map +1 -1
- package/lib/accordion/accordion/accordion.component.d.ts +4 -6
- package/lib/alert/alert.component.d.ts +8 -12
- package/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.d.ts +1 -0
- package/lib/carousel/carousel-item/carousel-item.component.d.ts +1 -2
- package/lib/collapse/collapse.directive.d.ts +13 -13
- package/lib/dropdown/dropdown/dropdown.component.d.ts +8 -12
- package/lib/form/form-check/form-check-input.directive.d.ts +4 -3
- package/lib/loading-button/loading-button.component.d.ts +4 -5
- package/lib/multi-select/multi-select-native-select/multi-select-native-select.component.d.ts +3 -1
- package/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.d.ts +2 -5
- package/lib/placeholder/placeholder.directive.d.ts +3 -7
- package/lib/sidebar/sidebar/sidebar.component.d.ts +13 -11
- package/lib/smart-pagination/smart-pagination.component.d.ts +4 -8
- package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +1 -0
- package/lib/tabs/tab-content/tab-content.component.d.ts +1 -0
- package/lib/tabs/tab-content-ref.directive.d.ts +4 -2
- package/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.d.ts +2 -0
- package/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.d.ts +2 -0
- package/lib/toast/toast/toast.component.d.ts +3 -2
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { booleanAttribute, Component, ContentChildren, EventEmitter, forwardRef, HostBinding, HostListener, Input, numberAttribute, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { formatDate, NgClass,
|
|
2
|
+
import { formatDate, NgClass, NgTemplateOutlet } from '@angular/common';
|
|
3
3
|
import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
4
4
|
import { ButtonDirective } from '../../button';
|
|
5
5
|
import { getLocalDateFromString, isDateDisabled, isValidDate } from '../../calendar/calendar.utils';
|
|
@@ -541,20 +541,18 @@ export class DateRangePickerComponent {
|
|
|
541
541
|
this.endDate = time ?? this.endDate;
|
|
542
542
|
}
|
|
543
543
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: DateRangePickerComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
544
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
544
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: DateRangePickerComponent, isStandalone: true, selector: "c-date-range-picker", inputs: { dayFormat: "dayFormat", calendars: ["calendars", "calendars", numberAttribute], cleaner: ["cleaner", "cleaner", booleanAttribute], closeOnSelect: ["closeOnSelect", "closeOnSelect", booleanAttribute], format: "format", indicator: ["indicator", "indicator", booleanAttribute], inputDateFormat: "inputDateFormat", inputDateParse: "inputDateParse", inputReadOnly: ["inputReadOnly", "inputReadOnly", booleanAttribute], navYearFirst: ["navYearFirst", "navYearFirst", booleanAttribute], placeholder: "placeholder", ranges: "ranges", rangesButtonsColor: "rangesButtonsColor", rangesButtonsSize: "rangesButtonsSize", rangesButtonsVariant: "rangesButtonsVariant", separator: ["separator", "separator", booleanAttribute], size: "size", timepicker: ["timepicker", "timepicker", booleanAttribute], valid: "valid", visible: ["visible", "visible", booleanAttribute], startDate: "startDate", endDate: "endDate", calendarDate: "calendarDate", disabledDates: "disabledDates", firstDayOfWeek: ["firstDayOfWeek", "firstDayOfWeek", numberAttribute], locale: "locale", maxDate: "maxDate", minDate: "minDate", navigation: ["navigation", "navigation", booleanAttribute], range: ["range", "range", booleanAttribute], dateFilter: "dateFilter", disabled: ["disabled", "disabled", booleanAttribute], value: "value", weekdayFormat: "weekdayFormat", popperjsOptions: ["popperOptions", "popperjsOptions"], selectAdjacentDays: ["selectAdjacentDays", "selectAdjacentDays", booleanAttribute], showAdjacentDays: ["showAdjacentDays", "showAdjacentDays", booleanAttribute], selectionType: "selectionType", showWeekNumber: ["showWeekNumber", "showWeekNumber", booleanAttribute], weekNumbersLabel: "weekNumbersLabel" }, outputs: { valueChange: "valueChange", calendarCellHover: "calendarCellHover", calendarDateChange: "calendarDateChange", endDateChange: "endDateChange", startDateChange: "startDateChange" }, host: { listeners: { "focusout": "onBlur()" }, properties: { "class": "this.datePickerClasses" } }, providers: [
|
|
545
545
|
{
|
|
546
546
|
provide: NG_VALUE_ACCESSOR,
|
|
547
547
|
useExisting: forwardRef(() => DateRangePickerComponent),
|
|
548
548
|
multi: true
|
|
549
549
|
}
|
|
550
|
-
], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "startDateElementRef", first: true, predicate: ["startDateElementRef"], descendants: true }, { propertyName: "endDateElementRef", first: true, predicate: ["endDateElementRef"], descendants: true }], exportAs: ["cDateRangePicker"], usesOnChanges: true, ngImport: i0, template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\" [ngClass]=\"datePickerClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <div [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n
|
|
550
|
+
], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "startDateElementRef", first: true, predicate: ["startDateElementRef"], descendants: true }, { propertyName: "endDateElementRef", first: true, predicate: ["endDateElementRef"], descendants: true }], exportAs: ["cDateRangePicker"], usesOnChanges: true, ngImport: i0, template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\" [ngClass]=\"datePickerClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <div [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n @if (range && separator !== false) {\n <div class=\"date-picker-separator\"></div>\n }\n @if (range) {\n <input #endDateElementRef\n (change)=\"handleEndDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"endDateInput\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid ?? undefined\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n }\n @if (indicator) {\n <div class=\"date-picker-indicator\"></div>\n }\n @if (cleaner && startDateElementRef.value && !disabled) {\n <div (click)=\"!disabled && handleClear($event)\" class=\"date-picker-cleaner\" role=\"button\"></div>\n }\n </div>\n <div cDropdownMenu class=\"date-picker-dropdown py-0\">\n <div class=\"date-picker-body\">\n @if (!showRanges) {\n @if (ranges && customRanges.length > 0) {\n <div class=\"date-picker-ranges\">\n @for (customRange of customRanges; track customRange) {\n <button (click)=\"setCustomRange(customRange)\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{ customRange | customRangeKey }}\n </button>\n }\n </div>\n }\n }\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [startDate]=\"startDate\"\n [navYearFirst]=\"navYearFirst\"\n [dayFormat]=\"dayFormat\"\n [weekdayFormat]=\"weekdayFormat\"\n [selectAdjacentDays]=\"selectAdjacentDays\"\n [showAdjacentDays]=\"showAdjacentDays\"\n [showWeekNumber]=\"showWeekNumber\"\n [selectionType]=\"selectionType\"\n [weekNumbersLabel]=\"weekNumbersLabel\"\n class=\"date-picker-calendars\"\n />\n @if (false && timepicker) {\n <div class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!startDate\"\n [time]=\"startDate ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n />\n @if (range) {\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!endDate\"\n [time]=\"endDate ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n />\n }\n </div>\n }\n </div>\n @if (templates?.datePickerFooter) {\n <div class=\"date-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n }\n </div>\n <ng-content></ng-content>\n</c-dropdown>\n", styles: [".form-control.date-picker-input:focus{box-shadow:0 0}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CalendarComponent, selector: "c-calendar", inputs: ["calendarDate", "calendars", "dayFormat", "disabledDates", "startDate", "endDate", "firstDayOfWeek", "locale", "maxDate", "minDate", "navigation", "navYearFirst", "range", "view", "weekdayFormat", "dateFilter", "selectAdjacentDays", "showAdjacentDays", "selectionType", "showWeekNumber", "weekNumbersLabel"], outputs: ["calendarCellHover", "calendarDateChange", "endDateChange", "startDateChange", "viewChange"], exportAs: ["cCalendar"] }, { kind: "component", type: TimePickerComponent, selector: "c-time-picker", inputs: ["cleaner", "dateTimeFormatOptions", "disabled", "filterHours", "filterMinutes", "filterSeconds", "indicator", "inputReadOnly", "locale", "placeholder", "seconds", "size", "time", "variant", "valid", "visible"], outputs: ["timeChange"], exportAs: ["cTimePicker"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "pipe", type: CustomRangeKeyPipe, name: "customRangeKey" }] }); }
|
|
551
551
|
}
|
|
552
552
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: DateRangePickerComponent, decorators: [{
|
|
553
553
|
type: Component,
|
|
554
554
|
args: [{ selector: 'c-date-range-picker', exportAs: 'cDateRangePicker', standalone: true, imports: [
|
|
555
555
|
NgClass,
|
|
556
|
-
NgIf,
|
|
557
|
-
NgForOf,
|
|
558
556
|
NgTemplateOutlet,
|
|
559
557
|
ReactiveFormsModule,
|
|
560
558
|
CalendarComponent,
|
|
@@ -573,7 +571,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
573
571
|
useExisting: forwardRef(() => DateRangePickerComponent),
|
|
574
572
|
multi: true
|
|
575
573
|
}
|
|
576
|
-
], template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\" [ngClass]=\"datePickerClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <div [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n
|
|
574
|
+
], template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\" [ngClass]=\"datePickerClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <div [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n @if (range && separator !== false) {\n <div class=\"date-picker-separator\"></div>\n }\n @if (range) {\n <input #endDateElementRef\n (change)=\"handleEndDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"endDateInput\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid ?? undefined\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n }\n @if (indicator) {\n <div class=\"date-picker-indicator\"></div>\n }\n @if (cleaner && startDateElementRef.value && !disabled) {\n <div (click)=\"!disabled && handleClear($event)\" class=\"date-picker-cleaner\" role=\"button\"></div>\n }\n </div>\n <div cDropdownMenu class=\"date-picker-dropdown py-0\">\n <div class=\"date-picker-body\">\n @if (!showRanges) {\n @if (ranges && customRanges.length > 0) {\n <div class=\"date-picker-ranges\">\n @for (customRange of customRanges; track customRange) {\n <button (click)=\"setCustomRange(customRange)\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{ customRange | customRangeKey }}\n </button>\n }\n </div>\n }\n }\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [startDate]=\"startDate\"\n [navYearFirst]=\"navYearFirst\"\n [dayFormat]=\"dayFormat\"\n [weekdayFormat]=\"weekdayFormat\"\n [selectAdjacentDays]=\"selectAdjacentDays\"\n [showAdjacentDays]=\"showAdjacentDays\"\n [showWeekNumber]=\"showWeekNumber\"\n [selectionType]=\"selectionType\"\n [weekNumbersLabel]=\"weekNumbersLabel\"\n class=\"date-picker-calendars\"\n />\n @if (false && timepicker) {\n <div class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!startDate\"\n [time]=\"startDate ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n />\n @if (range) {\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!endDate\"\n [time]=\"endDate ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n />\n }\n </div>\n }\n </div>\n @if (templates?.datePickerFooter) {\n <div class=\"date-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n }\n </div>\n <ng-content></ng-content>\n</c-dropdown>\n", styles: [".form-control.date-picker-input:focus{box-shadow:0 0}\n"] }]
|
|
577
575
|
}], ctorParameters: () => [{ type: i1.BreakpointObserver }], propDecorators: { dayFormat: [{
|
|
578
576
|
type: Input
|
|
579
577
|
}], calendars: [{
|
|
@@ -697,4 +695,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
697
695
|
type: HostBinding,
|
|
698
696
|
args: ['class']
|
|
699
697
|
}] } });
|
|
700
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFJZixNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RixPQUFPLEVBRUwsV0FBVyxFQUVYLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFNeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxt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QkFBQyxtQkFBbUI7Z0JBRytCLGdCQUFnQjtzQkFBNUUsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBc0JqQyxNQUFNO3NCQUEvQixZQUFZO3VCQUFDLFVBQVU7Z0JBNEVwQixpQkFBaUI7c0JBRHBCLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JtYXREYXRlLCBOZ0NsYXNzLCBOZ0Zvck9mLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9idXR0b24nO1xuaW1wb3J0IHsgZ2V0TG9jYWxEYXRlRnJvbVN0cmluZywgaXNEYXRlRGlzYWJsZWQsIGlzVmFsaWREYXRlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXIudXRpbHMnO1xuaW1wb3J0IHsgRGF0ZUZpbHRlclR5cGUsIERheUZvcm1hdFR5cGUsIFdlZWtkYXlGb3JtYXRUeXBlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NhbGVuZGFyJztcbmltcG9ydCB7IENvbG9ycyB9IGZyb20gJy4uLy4uL2NvcmV1aS50eXBlcyc7XG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCwgRHJvcGRvd25NZW51RGlyZWN0aXZlLCBEcm9wZG93blRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duJztcbmltcG9ydCB7IEZvcm1Db250cm9sRGlyZWN0aXZlLCBJbnB1dEdyb3VwQ29tcG9uZW50LCBJbnB1dEdyb3VwVGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2Zvcm0nO1xuaW1wb3J0IHsgVGVtcGxhdGVJZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdGltZS1waWNrZXInO1xuaW1wb3J0IHsgQ3VzdG9tUmFuZ2VLZXlQaXBlIH0gZnJvbSAnLi9jdXN0b20tcmFuZ2Uta2V5LnBpcGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDYWxlbmRhclJhbmdlcyB7XG4gIFtrZXk6IHN0cmluZ106IERhdGVbXTtcbn1cblxuZXhwb3J0IHR5cGUgVEN1c3RvbVJhbmdlID0gW3N0cmluZywgRGF0ZVtdXVxuXG4vKiogTXVzdCBiZSBhIHZhbGlkIGRhdGUgc3RyaW5nICovXG4vLyB0b2RvOiB2YWxpZGF0aW9uXG4vLyBleHBvcnQgZnVuY3Rpb24gaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3IobG9jYWxlOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4vLyAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuLy8gICAgIC8vIGNvbnN0IHZhbGlkRGF0ZSA9ICFpc05hTihEYXRlLnBhcnNlKGNvbnRyb2wudmFsdWUpKTtcbi8vICAgICBzdHJpbmdUb0RhdGVDb252ZXJ0KGNvbnRyb2wudmFsdWUsIGxvY2FsZSk7XG4vLyAgICAgY29uc3QgZGF0ZVNoaW0gPSBjdnREYXRlKGNvbnRyb2wudmFsdWUsIGxvY2FsZSk7XG4vLyAgICAgLy8gQHRzLWlnbm9yZVxuLy8gICAgIC8vIGNvbnRyb2wuc2V0VmFsdWUobmV3IERhdGUoZGF0ZVNoaW0ueWVhciwgZGF0ZVNoaW0ubW9udGgsIGRhdGVTaGltLmRheSkpXG4vLyAgICAgY29uc29sZS5sb2coJ2RhdGVTaGltJywgZGF0ZVNoaW0sIGxvY2FsZSk7XG4vLyAgICAgY29uc3QgdmFsaWREYXRlID0gaXNWYWxpZERhdGUoY29udHJvbC52YWx1ZSk7XG4vLyAgICAgY29uc29sZS5sb2coJ2ludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yJywgY29udHJvbCwgY29udHJvbC52YWx1ZSwgdmFsaWREYXRlKTtcbi8vICAgICByZXR1cm4gdmFsaWREYXRlID8geyBpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcjogeyB2YWx1ZTogY29udHJvbC52YWx1ZSB9IH0gOiBudWxsO1xuLy8gICB9O1xuLy8gfVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLWRhdGUtcmFuZ2UtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjRGF0ZVJhbmdlUGlja2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgTmdJZixcbiAgICBOZ0Zvck9mLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICBUaW1lUGlja2VyQ29tcG9uZW50LFxuICAgIEJ1dHRvbkRpcmVjdGl2ZSxcbiAgICBEcm9wZG93bkNvbXBvbmVudCxcbiAgICBEcm9wZG93blRvZ2dsZURpcmVjdGl2ZSxcbiAgICBEcm9wZG93bk1lbnVEaXJlY3RpdmUsXG4gICAgSW5wdXRHcm91cENvbXBvbmVudCxcbiAgICBGb3JtQ29udHJvbERpcmVjdGl2ZSxcbiAgICBJbnB1dEdyb3VwVGV4dERpcmVjdGl2ZSxcbiAgICBDdXN0b21SYW5nZUtleVBpcGVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXJcbiAgKSB7IH1cblxuICAvKipcbiAgICogU2V0IHRoZSBmb3JtYXQgb2YgZGF5IG5hbWUuXG4gICAqIEBkZWZhdWx0ICdudW1lcmljJ1xuICAgKiBAdHlwZSBEYXlGb3JtYXRUeXBlXG4gICAqL1xuICBASW5wdXQoKSBkYXlGb3JtYXQ6IERheUZvcm1hdFR5cGUgPSAnbnVtZXJpYyc7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY2FsZW5kYXJzIHRoYXQgcmVuZGVyIG9uIGRlc2t0b3AgZGV2aWNlcy5cbiAgICogQHR5cGUgbnVtYmVyXG4gICAqIEBkZWZhdWx0IDJcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGNhbGVuZGFyczogbnVtYmVyID0gMjtcblxuICAvKipcbiAgICogVG9nZ2xlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSBjb250ZW50IG9mIHRoZSBjbGVhbmVyIGJ1dHRvbi5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2xlYW5lciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiB0aGUgZHJvcGRvd24gc2hvdWxkIGJlIGNsb3NlZCBhZnRlciB2YWx1ZSBzZXR0aW5nLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2xvc2VPblNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXQgZGF0ZSBmb3JtYXQuXG4gICAqIFdlIHVzZSBBbmd1bGFyIGZvcm1hdERhdGUoKSBmdW5jdGlvbiwgc2VlOlxuICAgKiAtIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29tbW9uL2Zvcm1hdERhdGVcbiAgICogLSBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvbW1vbi9EYXRlUGlwZSNwcmUtZGVmaW5lZC1mb3JtYXQtb3B0aW9uc1xuICAgKi9cbiAgQElucHV0KClcbiAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzaWJpbGl0eSBvciBzZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGlucHV0IGluZGljYXRvci5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaW5kaWNhdG9yOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQ3VzdG9tIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZSBpbnRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBhIGN1c3RvbSBmb3JtYXQuXG4gICAqIEBzaW5jZSB2NS4wLjBcbiAgICovXG4gIEBJbnB1dCgpIGlucHV0RGF0ZUZvcm1hdD86IChkYXRlOiBEYXRlKSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBmdW5jdGlvbiB0byBwYXJzZSB0aGUgaW5wdXQgdmFsdWUgaW50byBhIHZhbGlkIERhdGUgb2JqZWN0LlxuICAgKiBAc2luY2UgdjUuMC4wXG4gICAqL1xuICBASW5wdXQoKSBpbnB1dERhdGVQYXJzZT86IChkYXRlOiBzdHJpbmcgfCBEYXRlKSA9PiBEYXRlO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHJlYWRvbmx5IHN0YXRlIGZvciB0aGUgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IGlucHV0UmVhZE9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLiNpbnB1dFJlYWRPbmx5ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW5wdXRSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jaW5wdXRSZWFkT25seSB8fCB0eXBlb2YgdGhpcy5mb3JtYXQgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgI2lucHV0UmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogUmVvcmRlciB5ZWFyLW1vbnRoIG5hdmlnYXRpb24sIGFuZCByZW5kZXIgeWVhciBmaXJzdC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG5hdlllYXJGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgc2hvcnQgaGludHMgdGhhdCBhcmUgdmlzaWJsZSBpbiBzdGFydCBkYXRlIGFuZCBlbmQgZGF0ZSBpbnB1dHMuXG4gICAqIHR5cGUgc3RyaW5nXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nIHwgc3RyaW5nW10gPSBbJ1N0YXJ0IGRhdGUnLCAnRW5kIGRhdGUnXTtcblxuICAvKipcbiAgICogUHJlZGVmaW5lZCBkYXRlIHJhbmdlcyB0aGUgdXNlciBjYW4gc2VsZWN0IGZyb20uXG4gICAqIEB0eXBlIElDYWxlbmRhclJhbmdlc1xuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzPzogSUNhbGVuZGFyUmFuZ2VzO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb2xvciBjb250ZXh0IG9mIHRoZSBjYW5jZWwgYnV0dG9uIHRvIG9uZSBvZiBDb3JlVUnigJlzIHRoZW1lZCBjb2xvcnMuXG4gICAqIEB0eXBlICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3N1Y2Nlc3MnIHwgJ2RhbmdlcicgfCAnd2FybmluZycgfCAnaW5mbycgfCAnZGFyaycgfCAnbGlnaHQnIHwgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICdzZWNvbmRhcnknXG4gICAqL1xuICBASW5wdXQoKSByYW5nZXNCdXR0b25zQ29sb3I/OiBDb2xvcnMgPSAnc2Vjb25kYXJ5JztcblxuICAvKipcbiAgICogU2l6ZSB0aGUgcmFuZ2VzIGJ1dHRvbiBzbWFsbCBvciBsYXJnZS5cbiAgICogQHR5cGUgJ3NtJyB8ICdsZycgfCAnJ1xuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc1NpemU6ICdzbScgfCAnbGcnIHwgJycgPSAnJztcblxuICAvKipcbiAgICogU2V0IHRoZSByYW5nZXMgYnV0dG9uIHZhcmlhbnQgdG8gYW4gb3V0bGluZWQgYnV0dG9uIG9yIGEgZ2hvc3QgYnV0dG9uLlxuICAgKiBAdHlwZSAnb3V0bGluZScgfCAnZ2hvc3QnIHwgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSByYW5nZXNCdXR0b25zVmFyaWFudD86ICdvdXRsaW5lJyB8ICdnaG9zdCcgPSAnZ2hvc3QnO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGljb24gb3IgY2hhcmFjdGVyIHRoYXQgc2VwYXJhdGVzIHR3byBkYXRlcy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2VwYXJhdG9yID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2l6ZSB0aGUgY29tcG9uZW50IHNtYWxsIG9yIGxhcmdlLlxuICAgKiBAdHlwZSAnc20nIHwgJ2xnJyB8IHVuZGVmaW5lZFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIHNpemU/OiAnc20nIHwgJ2xnJztcblxuICAvKipcbiAgICogUHJvdmlkZSBhbiBhZGRpdGlvbmFsIHRpbWUgc2VsZWN0aW9uIGJ5IGFkZGluZyBzZWxlY3QgYm94ZXMgdG8gY2hvb3NlIHRpbWUuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgdGltZXBpY2tlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI3RpbWVwaWNrZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCB0aW1lcGlja2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyByZXR1cm4gdGhpcy4jdGltZXBpY2tlcjtcbiAgfVxuXG4gICN0aW1lcGlja2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXN1YWwgdmFsaWRhdGlvbiBmZWVkYmFjay5cbiAgICogQHR5cGUgYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIHZhbGlkPzogYm9vbGVhbiA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBkcm9wZG93biBkYXRlLXBpY2tlciBjb21wb25lbnQuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IHN0YXJ0RGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHByZXZEYXRlID0gdGhpcy5fc3RhcnREYXRlID8gbmV3IERhdGUodGhpcy5fc3RhcnREYXRlKSA6IG51bGw7XG4gICAgdGhpcy5fc3RhcnREYXRlID0gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiBudWxsO1xuICAgIGlmIChwcmV2RGF0ZT8uZ2V0VGltZSgpICE9PSB0aGlzLl9zdGFydERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9zdGFydERhdGUpO1xuICAgICAgdGhpcy5zdGFydERhdGVDaGFuZ2UuZW1pdCh0aGlzLl9zdGFydERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzdGFydERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3N0YXJ0RGF0ZT86IERhdGUgfCBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBlbmREYXRlKHZhbHVlKSB7XG4gICAgY29uc3QgcHJldkRhdGUgPSB0aGlzLl9lbmREYXRlID8gbmV3IERhdGUodGhpcy5fZW5kRGF0ZSA/PyAwKSA6IG51bGw7XG4gICAgdGhpcy5fZW5kRGF0ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogbnVsbDtcbiAgICBpZiAocHJldkRhdGU/LmdldFRpbWUoKSAhPT0gdGhpcy5fZW5kRGF0ZT8uZ2V0VGltZSgpKSB7XG4gICAgICB0aGlzLmVuZERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9lbmREYXRlKTtcbiAgICAgIHRoaXMuZW5kRGF0ZUNoYW5nZS5lbWl0KHRoaXMuX2VuZERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBlbmREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9lbmREYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW5kRGF0ZT86IERhdGUgfCBudWxsO1xuXG4gIEBJbnB1dCgpIGNhbGVuZGFyRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSB8IERhdGVbXVtdID0gW107XG5cbiAgLyoqXG4gICAqIFNldCBmaXJzdCBkYXkgb2Ygd2Vlay5cbiAgICogQHR5cGUgbnVtYmVyXG4gICAqIEBkZWZhdWx0IDEgKE1vbmRheSlcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgPSAxO1xuXG4gIEBJbnB1dCgpIGxvY2FsZTogc3RyaW5nID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2hvdyBjYWxlbmRhciBuYXZpZ2F0aW9uLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBuYXZpZ2F0aW9uID0gdHJ1ZTtcblxuICAvKipcbiAgICogQWxsb3cgcmFuZ2Ugc2VsZWN0aW9uLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcmFuZ2UgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGRhdGVGaWx0ZXI/OiBEYXRlRmlsdGVyVHlwZTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLiNkaXNhYmxlZCA/IHRoaXMuc3RhcnREYXRlSW5wdXQuZGlzYWJsZSgpIDogdGhpcy5zdGFydERhdGVJbnB1dC5lbmFibGUoKTtcbiAgICB0aGlzLiNkaXNhYmxlZCA/IHRoaXMuZW5kRGF0ZUlucHV0LmRpc2FibGUoKSA6IHRoaXMuZW5kRGF0ZUlucHV0LmVuYWJsZSgpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNkaXNhYmxlZDtcbiAgfVxuXG4gICNkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnJhbmdlID8geyAuLi52YWx1ZSB9IDogdmFsdWU7XG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuX3ZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UobmV3VmFsdWUuc3RhcnREYXRlID8/IG51bGwpO1xuICAgICAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UobmV3VmFsdWUuZW5kRGF0ZSA/PyBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKG5ld1ZhbHVlID8/IG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICBjb25zdCBoYXNWYWx1ZSA9IHRoaXMucmFuZ2UgPyAhISh0aGlzLnZhbHVlLnN0YXJ0RGF0ZSAmJiB0aGlzLnZhbHVlLmVuZERhdGUpIDogISF0aGlzLnZhbHVlO1xuICAgICAgICB0aGlzLnZpc2libGUgPSAhaGFzVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlOiBhbnkgPSB7fTtcblxuICAvKipcbiAgICogU2V0IGxlbmd0aCBvciBmb3JtYXQgb2YgZGF5IG5hbWUuXG4gICAqIEB0eXBlIFdlZWtkYXlGb3JtYXRUeXBlXG4gICAqIEBkZWZhdWx0ICdzaG9ydCdcbiAgICovXG4gIEBJbnB1dCgpIHdlZWtkYXlGb3JtYXQ6IFdlZWtkYXlGb3JtYXRUeXBlID0gJ3Nob3J0JztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcG9wcGVyIE9wdGlvbnMgb2JqZWN0XG4gICAqIEB0eXBlIFBhcnRpYWw8T3B0aW9ucz5cbiAgICovXG4gIEBJbnB1dCgncG9wcGVyT3B0aW9ucycpIHBvcHBlcmpzT3B0aW9uczogUGFydGlhbDxPcHRpb25zPiA9IHtcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgd2hldGhlciBkYXlzIGluIGFkamFjZW50IG1vbnRocyBzaG93biBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGN1cnJlbnQgbW9udGggYXJlIHNlbGVjdGFibGUuIFRoaXMgb25seSBhcHBsaWVzIGlmIHRoZSBgc2hvd0FkamFjZW50RGF5c2Agb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBzaW5jZSA0LjQuMTBcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzZWxlY3RBZGphY2VudERheXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IHdoZXRoZXIgdG8gZGlzcGxheSBkYXRlcyBpbiBhZGphY2VudCBtb250aHMgKG5vbi1zZWxlY3RhYmxlKSBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgY3VycmVudCBtb250aC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBzaW5jZSA0LjQuMTBcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93QWRqYWNlbnREYXlzOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogU3BlY2lmeSB0aGUgdHlwZSBvZiBkYXRlIHNlbGVjdGlvbiBhcyBkYXksIHdlZWssIG1vbnRoLCBvciB5ZWFyLlxuICAgKiBAdHlwZSAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcidcbiAgICogQGRlZmF1bHQgJ2RheSdcbiAgICogQHNpbmNlIDUuMC4wXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicgPSAnZGF5JztcblxuICAvKipcbiAgICogU2V0IHdoZXRoZXIgdG8gZGlzcGxheSB3ZWVrIG51bWJlcnMgaW4gdGhlIGNhbGVuZGFyLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBzaW5jZSA1LjAuMFxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dXZWVrTnVtYmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIExhYmVsIGRpc3BsYXllZCBvdmVyIHdlZWsgbnVtYmVycyBpbiB0aGUgY2FsZW5kYXIuXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQHNpbmNlIDUuMC4wXG4gICAqL1xuICBASW5wdXQoKSB3ZWVrTnVtYmVyc0xhYmVsPzogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IERhdGVbXSB8IHVuZGVmaW5lZD4oKTtcblxuICBAT3V0cHV0KCkgY2FsZW5kYXJDZWxsSG92ZXI6IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgY2FsZW5kYXJEYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBlbmREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIHN0YXJ0RGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XG5cbiAgLy8gQFZpZXdDaGlsZChDYWxlbmRhckNvbXBvbmVudCkgY2FsZW5kYXJDb21wb25lbnQhOiBDYWxlbmRhckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnc3RhcnREYXRlRWxlbWVudFJlZicpIHN0YXJ0RGF0ZUVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdlbmREYXRlRWxlbWVudFJlZicpIGVuZERhdGVFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICB0ZW1wbGF0ZXM6IGFueSA9IHt9O1xuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlSWREaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgY29udGVudFRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZUlkRGlyZWN0aXZlPjtcblxuICBwcm90ZWN0ZWQgZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgcHJvdGVjdGVkIHN1YnNjcmliZURhdGVDaGFuZ2Uoc3Vic2NyaWJlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgIC8vIHRvZG9cbiAgICAgIC8vIHRoaXMuZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXJ0RGF0ZUNoYW5nZS5zdWJzY3JpYmUobmV4dCA9PiB7XG4gICAgICAvLyAgIHRoaXMuc3RhcnREYXRlID0gbmV4dDtcbiAgICAgIC8vICAgdGhpcy5vbkNoYW5nZShuZXh0KTtcbiAgICAgIC8vIH0pKTtcbiAgICAgIC8vIHRoaXMuZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXJ0RGF0ZUNoYW5nZS5zdWJzY3JpYmUobmV4dCA9PiB7XG4gICAgICAvLyAgIHRoaXMuZW5kRGF0ZSA9IG5leHQ7XG4gICAgICAvLyAgIHRoaXMub25DaGFuZ2UobmV4dCk7XG4gICAgICAvLyB9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNvdXQnKSBvbkJsdXIoKSB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01vYmlsZSA9IHRydWU7XG4gIHB1YmxpYyBjdXN0b21SYW5nZXMhOiBUQ3VzdG9tUmFuZ2VbXTtcbiAgcHVibGljIHNob3dSYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzZXQgc3RhcnREYXRlVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc3RhcnREYXRlSW5wdXQuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMuX3N0YXJ0RGF0ZVZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgc3RhcnREYXRlVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnREYXRlVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zdGFydERhdGVWYWx1ZTogc3RyaW5nID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuc3RhcnREYXRlKTtcblxuICBzZXQgZW5kRGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVuZERhdGVJbnB1dC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5fZW5kRGF0ZVZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZW5kRGF0ZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZERhdGVWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBfZW5kRGF0ZVZhbHVlOiBzdHJpbmcgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5lbmREYXRlKTtcblxuICBwdWJsaWMgZ2V0IHN0YXJ0RGF0ZVBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wbGFjZWhvbGRlcikgPyB0aGlzLnBsYWNlaG9sZGVyWzBdIDogdGhpcy5wbGFjZWhvbGRlcjtcbiAgfTtcblxuICBwdWJsaWMgZ2V0IGVuZERhdGVQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucGxhY2Vob2xkZXIpID8gdGhpcy5wbGFjZWhvbGRlclsxXSA6IHRoaXMucGxhY2Vob2xkZXI7XG4gIH07XG5cbiAgcHJpdmF0ZSBsYXlvdXRDaGFuZ2VzITogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIHRvZG86IHZhbGlkYXRpb25cbiAgc3RhcnREYXRlSW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5zdGFydERhdGVWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSwgW1xuICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAvLyBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KSxcbiAgICAvLyBWYWxpZGF0b3JzLm1heExlbmd0aCgxMCksXG4gICAgLy8gaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3IodGhpcy5sb2NhbGUpXG4gIF0pO1xuICBlbmREYXRlSW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5lbmREYXRlVmFsdWUsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0sIFtcbiAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgLy8gVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksXG4gICAgLy8gVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTApLFxuICAgIC8vIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKHRoaXMubG9jYWxlKVxuICBdKTtcbiAgZGF0ZVJhbmdlR3JvdXAhOiBGb3JtR3JvdXA7XG5cbiAgc2V0IGlucHV0U3RhcnRIb3ZlclZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5faW5wdXRTdGFydEhvdmVyVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbnB1dFN0YXJ0SG92ZXJWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRTdGFydEhvdmVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9pbnB1dFN0YXJ0SG92ZXJWYWx1ZSE6IERhdGUgfCBudWxsO1xuXG4gIHNldCBpbnB1dEVuZEhvdmVyVmFsdWUodmFsdWUpIHtcbiAgICB0aGlzLl9pbnB1dEVuZEhvdmVyVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbnB1dEVuZEhvdmVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RW5kSG92ZXJWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2lucHV0RW5kSG92ZXJWYWx1ZSE6IERhdGUgfCBudWxsO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgZGF0ZVBpY2tlckNsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdkYXRlLXBpY2tlcic6IHRydWUsXG4gICAgICBbYGRhdGUtcGlja2VyLSR7dGhpcy5zaXplfWBdOiB0aGlzLnNpemUsXG4gICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcbiAgICAgICdpcy12YWxpZCc6IHRoaXMudmFsaWQgPT09IHRydWUsXG4gICAgICAnaXMtaW52YWxpZCc6IHRoaXMudmFsaWQgPT09IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gIWRhdGUgfHwgIWlzVmFsaWREYXRlKGRhdGUpID8gJycgOlxuICAgICAgICAgICB0eXBlb2YgdGhpcy5pbnB1dERhdGVGb3JtYXQgPT09ICdmdW5jdGlvbicgPyB0aGlzLmlucHV0RGF0ZUZvcm1hdChkYXRlKSA6XG4gICAgICAgICAgICghIXRoaXMuZm9ybWF0ICYmICEhdGhpcy5sb2NhbGUgJiYgdGhpcy5sb2NhbGUgIT09ICdkZWZhdWx0JykgPyBmb3JtYXREYXRlKGRhdGUsIHRoaXMuZm9ybWF0LCB0aGlzLmxvY2FsZSkgOlxuICAgICAgICAgICB0aGlzLnRpbWVwaWNrZXIgPyBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlKSA6XG4gICAgICAgICAgIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKTtcbiAgfVxuXG4gIHJlYWRvbmx5ICNicmVha3BvaW50cyA9IHtcbiAgICBPbmVDYWxlbmRhclJhbmdlczogJyhtaW4td2lkdGg6IDQ4MHB4KScsXG4gICAgVHdvQ2FsZW5kYXJzOiAnKG1heC13aWR0aDogNjUwcHgpJyxcbiAgICBUd29DYWxlbmRhcnNSYW5nZXM6ICcobWF4LXdpZHRoOiA4MTBweCknXG4gIH07XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jdXN0b21SYW5nZXMgPSB0aGlzLnJhbmdlcyA/IE9iamVjdC5lbnRyaWVzKHRoaXMucmFuZ2VzKSA6IFtdO1xuXG4gICAgY29uc3QgYnJlYWtwb2ludHMgPSB0aGlzLiNicmVha3BvaW50cztcblxuICAgIHRoaXMubGF5b3V0Q2hhbmdlcyA9IHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1xuICAgICAgYnJlYWtwb2ludHMuT25lQ2FsZW5kYXJSYW5nZXMsXG4gICAgICBicmVha3BvaW50cy5Ud29DYWxlbmRhcnMsXG4gICAgICBicmVha3BvaW50cy5Ud29DYWxlbmRhcnNSYW5nZXNcbiAgICBdKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQubWF0Y2hlcykge1xuICAgICAgICB0aGlzLmlzTW9iaWxlID0gKHRoaXMuY3VzdG9tUmFuZ2VzPy5sZW5ndGggPiAwICYmIHJlc3VsdC5icmVha3BvaW50c1ticmVha3BvaW50cy5Ud29DYWxlbmRhcnNSYW5nZXNdKSB8fCByZXN1bHQuYnJlYWtwb2ludHNbYnJlYWtwb2ludHMuVHdvQ2FsZW5kYXJzXTtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tUmFuZ2VzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zaG93UmFuZ2VzID0gIXJlc3VsdC5icmVha3BvaW50c1ticmVha3BvaW50cy5PbmVDYWxlbmRhclJhbmdlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RhcnREYXRlVmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5zdGFydERhdGUpO1xuICAgIHRoaXMuZW5kRGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuZW5kRGF0ZSk7XG4gICAgdGhpcy5zdWJzY3JpYmVEYXRlQ2hhbmdlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmxheW91dENoYW5nZXM/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVEYXRlQ2hhbmdlKGZhbHNlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29udGVudFRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgICB0aGlzLnRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRlJ10pIHtcbiAgICAgIC8vIGZvciBkYXRlLXBpY2tlciBjb21wb25lbnRcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNvbnZlcnRWYWx1ZVRvRGF0ZShjaGFuZ2VzWydkYXRlJ10/LmN1cnJlbnRWYWx1ZSkgPz8gbnVsbDtcbiAgICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGRhdGUpO1xuICAgICAgdGhpcy5jYWxlbmRhckRhdGUgPSBkYXRlID8/IHRoaXMuY2FsZW5kYXJEYXRlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc3RhcnREYXRlJ10pIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNvbnZlcnRWYWx1ZVRvRGF0ZShjaGFuZ2VzWydzdGFydERhdGUnXT8uY3VycmVudFZhbHVlKSA/PyBudWxsO1xuICAgICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UoZGF0ZSk7XG4gICAgICB0aGlzLmNhbGVuZGFyRGF0ZSA9IGRhdGUgPz8gdGhpcy5jYWxlbmRhckRhdGU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydlbmREYXRlJ10pIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNvbnZlcnRWYWx1ZVRvRGF0ZShjaGFuZ2VzWydlbmREYXRlJ10/LmN1cnJlbnRWYWx1ZSkgPz8gbnVsbDtcbiAgICAgIHRoaXMuaGFuZGxlRW5kRGF0ZUNoYW5nZShkYXRlKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2xvY2FsZSddKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuc3RhcnREYXRlKTtcbiAgICAgIHRoaXMuZW5kRGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuZW5kRGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgY29udmVydFZhbHVlVG9EYXRlKHZhbHVlOiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRQYXJzZSh2YWx1ZSkgPz8gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKSA/PyBudWxsO1xuICB9XG5cbiAgaW5wdXRQYXJzZShkYXRlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuaW5wdXREYXRlUGFyc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0aGlzLmlucHV0RGF0ZVBhcnNlKGRhdGUpO1xuICAgICAgaWYgKGlzVmFsaWREYXRlKHBhcnNlZERhdGUpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWREYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0TG9jYWxEYXRlRnJvbVN0cmluZyhkYXRlLCB0aGlzLmxvY2FsZSwgdGhpcy50aW1lcGlja2VyKTtcbiAgfVxuXG4gIGdldEN1c3RvbVJhbmdlS2V5KGN1c3RvbVJhbmdlOiBhbnkpIHtcbiAgICByZXR1cm4gY3VzdG9tUmFuZ2VbMF07XG4gIH1cblxuICBzZXRDdXN0b21SYW5nZShjdXN0b21SYW5nZTogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDdXN0b21SYW5nZUtleShjdXN0b21SYW5nZSk7XG4gICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UoY3VzdG9tUmFuZ2VbMV1bMF0pO1xuICAgIHRoaXMuaGFuZGxlRW5kRGF0ZUNoYW5nZShjdXN0b21SYW5nZVsxXVsxXSk7XG4gIH1cblxuICBoYW5kbGVDYWxlbmRhckNlbGxIb3ZlcigkZXZlbnQ6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5jYWxlbmRhckNlbGxIb3Zlci5lbWl0KCRldmVudCk7XG4gICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuc3RhcnREYXRlRWxlbWVudFJlZiwgJGV2ZW50KTtcbiAgICAgIHRoaXMuaW5wdXRTdGFydEhvdmVyVmFsdWUgPSAkZXZlbnQ7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5lbmREYXRlRWxlbWVudFJlZiwgbnVsbCk7XG4gICAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5lbmREYXRlKSB7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5lbmREYXRlRWxlbWVudFJlZiwgJGV2ZW50KTtcbiAgICAgIHRoaXMuaW5wdXRFbmRIb3ZlclZhbHVlID0gJGV2ZW50O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNhbGVuZGFyRGF0ZUNoYW5nZSgkZXZlbnQ6IERhdGUpIHtcbiAgICBpZiAodGhpcy5jYWxlbmRhckRhdGUuZ2V0VGltZSgpICE9PSAkZXZlbnQuZ2V0VGltZSgpKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyRGF0ZUNoYW5nZS5lbWl0KCRldmVudCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGRhdGU6IERhdGUgfCBudWxsKSB7XG4gICAgaWYgKGRhdGU/LmdldFRpbWUoKSAhPT0gdGhpcy5zdGFydERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlID8/IG51bGw7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuc3RhcnREYXRlKTtcbiAgICAgIHRoaXMuaW5wdXRTdGFydEhvdmVyVmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucmFuZ2UgPyB7IHN0YXJ0RGF0ZTogdGhpcy5zdGFydERhdGUsIGVuZERhdGU6IHRoaXMuZW5kRGF0ZSB9IDogdGhpcy5zdGFydERhdGU7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRW5kRGF0ZUNoYW5nZShkYXRlOiBEYXRlIHwgbnVsbCkge1xuICAgIGlmIChkYXRlPy5nZXRUaW1lKCkgIT09IHRoaXMuZW5kRGF0ZT8uZ2V0VGltZSgpKSB7XG4gICAgICBpZiAoIXRoaXMucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5lbmREYXRlID0gZGF0ZSA/PyBudWxsO1xuICAgICAgdGhpcy5lbmREYXRlVmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5lbmREYXRlKTtcbiAgICAgIHRoaXMuaW5wdXRFbmRIb3ZlclZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJhbmdlID8geyBzdGFydERhdGU6IHRoaXMuc3RhcnREYXRlLCBlbmREYXRlOiB0aGlzLmVuZERhdGUgfSA6IHRoaXMuc3RhcnREYXRlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsZWFyKCRldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAvLyB0aGlzLmNhbGVuZGFyQ29tcG9uZW50LmNsZWFyRGF0ZXMoKTtcbiAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShudWxsKTtcbiAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UobnVsbCk7XG4gIH1cblxuICBoYW5kbGVTdGFydERhdGVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5pbnB1dFBhcnNlKGlucHV0VmFsdWUpO1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgLy8gdGhpcy5jYWxlbmRhckNvbXBvbmVudC5jbGVhckRhdGVzKCk7XG4gICAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShudWxsKTtcbiAgICAgIHRoaXMuaGFuZGxlRW5kRGF0ZUNoYW5nZShudWxsKTtcbiAgICB9XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmIGRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICBpZiAoISh0aGlzLmZvcmJpZGRlbkRhdGUoZGF0ZSkgfHwgKHRoaXMuZW5kRGF0ZSAmJiB0aGlzLmVuZERhdGUgPCBkYXRlKSkpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckRhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IGRhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKHRoaXMuc3RhcnREYXRlID8/IG51bGwpO1xuICB9XG5cbiAgaGFuZGxlRW5kRGF0ZUlucHV0Q2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9ICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmlucHV0UGFyc2UoaW5wdXRWYWx1ZSk7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICB0aGlzLmVuZERhdGUgPSBudWxsO1xuICAgIH1cbiAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgIGlmICghKHRoaXMuZm9yYmlkZGVuRGF0ZShkYXRlKSB8fCAodGhpcy5zdGFydERhdGUgJiYgdGhpcy5zdGFydERhdGUgPiBkYXRlKSkpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckRhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLmVuZERhdGUgPSBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UodGhpcy5lbmREYXRlID8/IG51bGwpO1xuICB9XG5cbiAgZm9yYmlkZGVuRGF0ZShkYXRlOiBEYXRlKSB7XG4gICAgcmV0dXJuIGlzRGF0ZURpc2FibGVkKGRhdGUsIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLmRpc2FibGVkRGF0ZXMpIHx8ICh0aGlzLmRhdGVGaWx0ZXIgPyAhdGhpcy5kYXRlRmlsdGVyKGRhdGUpIDogZmFsc2UpO1xuICB9XG5cbiAgc2V0SW5wdXRWYWx1ZSA9IChlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBkYXRlOiBEYXRlIHwgbnVsbCkgPT4ge1xuICAgIGlmICghZWxlbWVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGUoZGF0ZSk7XG4gICAgLy8gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlQXNEYXRlID0gZGF0ZTtcbiAgICByZXR1cm47XG4gIH07XG5cbiAgb25DaGFuZ2U6IGFueSA9ICh2YWx1ZTogYW55KSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5yYW5nZSA/IHsgLi4udmFsdWUgfSA6IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVN0YXJ0VGltZUNoYW5nZSh0aW1lOiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zdGFydERhdGUgPSB0aW1lID8/IHRoaXMuc3RhcnREYXRlO1xuICB9XG5cbiAgaGFuZGxlRW5kVGltZUNoYW5nZSh0aW1lOiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCF0aGlzLnJhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW5kRGF0ZSA9IHRpbWUgPz8gdGhpcy5lbmREYXRlO1xuICB9XG59XG4iLCI8Yy1kcm9wZG93biAjZHJvcGRvd249XCJjRHJvcGRvd25cIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiIGNsYXNzPVwiZGF0ZS1waWNrZXIgcGlja2VyXCIgW25nQ2xhc3NdPVwiZGF0ZVBpY2tlckNsYXNzZXNcIlxuICAgICAgICAgICAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW3BvcHBlck9wdGlvbnNdPVwicG9wcGVyanNPcHRpb25zXCI+XG4gIDxkaXYgW2NhcmV0XT1cImZhbHNlXCJcbiAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgPz8gZHJvcGRvd24udmlzaWJsZVwiXG4gICAgICAgY0Ryb3Bkb3duVG9nZ2xlXG4gICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1pbnB1dC1ncm91cFwiXG4gID5cbiAgICA8aW5wdXQgI3N0YXJ0RGF0ZUVsZW1lbnRSZWZcbiAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVTdGFydERhdGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic3RhcnREYXRlSW5wdXRcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7aG92ZXI6ICEhaW5wdXRTdGFydEhvdmVyVmFsdWV9XCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInN0YXJ0RGF0ZVBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cImlucHV0UmVhZE9ubHkgPz8gbnVsbFwiXG4gICAgICAgICAgIFt2YWxpZF09XCJyYW5nZSA/IHVuZGVmaW5lZCA6IHZhbGlkXCJcbiAgICAgICAgICAgY0Zvcm1Db250cm9sXG4gICAgICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItaW5wdXRcIlxuICAgICAgICAgICBwYXR0ZXJuPVwiWzEtOV0qXCJcbiAgICA+XG4gICAgPGRpdiAqbmdJZj1cInJhbmdlICYmIHNlcGFyYXRvciAhPT0gZmFsc2VcIiBjbGFzcz1cImRhdGUtcGlja2VyLXNlcGFyYXRvclwiPjwvZGl2PlxuICAgIDxpbnB1dCAjZW5kRGF0ZUVsZW1lbnRSZWZcbiAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVFbmREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICpuZ0lmPVwicmFuZ2VcIlxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJlbmREYXRlSW5wdXRcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7aG92ZXI6ICEhaW5wdXRFbmRIb3ZlclZhbHVlfVwiXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJlbmREYXRlUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwiaW5wdXRSZWFkT25seSA/PyBudWxsXCJcbiAgICAgICAgICAgW3ZhbGlkXT1cInZhbGlkID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgIGNGb3JtQ29udHJvbFxuICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWlucHV0XCJcbiAgICAgICAgICAgcGF0dGVybj1cIlsxLTldKlwiXG4gICAgPlxuICAgIDxkaXYgKm5nSWY9XCJpbmRpY2F0b3JcIiBjbGFzcz1cImRhdGUtcGlja2VyLWluZGljYXRvclwiPjwvZGl2PlxuICAgIDxkaXYgKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiBoYW5kbGVDbGVhcigkZXZlbnQpXCJcbiAgICAgICAgICpuZ0lmPVwiY2xlYW5lciAmJiBzdGFydERhdGVFbGVtZW50UmVmLnZhbHVlICYmICFkaXNhYmxlZFwiXG4gICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWNsZWFuZXJcIiByb2xlPVwiYnV0dG9uXCI+XG4gICAgPC9kaXY+XG5cbiAgPC9kaXY+XG4gIDxkaXYgY0Ryb3Bkb3duTWVudSBjbGFzcz1cImRhdGUtcGlja2VyLWRyb3Bkb3duIHB5LTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItYm9keVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFzaG93UmFuZ2VzXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJyYW5nZXMgJiYgY3VzdG9tUmFuZ2VzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImRhdGUtcGlja2VyLXJhbmdlc1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldEN1c3RvbVJhbmdlKGN1c3RvbVJhbmdlKVwiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY3VzdG9tUmFuZ2Ugb2YgY3VzdG9tUmFuZ2VzXCJcbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJyYW5nZXNCdXR0b25zQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgW3NpemVdPVwicmFuZ2VzQnV0dG9uc1NpemVcIlxuICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwicmFuZ2VzQnV0dG9uc1ZhcmlhbnRcIlxuICAgICAgICAgICAgICAgICAgY0J1dHRvbj5cbiAgICAgICAgICAgIHt7Y3VzdG9tUmFuZ2UgfCBjdXN0b21SYW5nZUtleX19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxjLWNhbGVuZGFyXG4gICAgICAgIChjYWxlbmRhckNlbGxIb3Zlcik9XCJoYW5kbGVDYWxlbmRhckNlbGxIb3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGNhbGVuZGFyRGF0ZUNoYW5nZSk9XCJoYW5kbGVDYWxlbmRhckRhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChlbmREYXRlQ2hhbmdlKT1cImhhbmRsZUVuZERhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzdGFydERhdGVDaGFuZ2UpPVwiaGFuZGxlU3RhcnREYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbY2FsZW5kYXJEYXRlXT1cImNhbGVuZGFyRGF0ZVwiXG4gICAgICAgIFtjYWxlbmRhcnNdPVwiaXNNb2JpbGUgPyAxIDogY2FsZW5kYXJzXCJcbiAgICAgICAgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiXG4gICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICBbZW5kRGF0ZV09XCJlbmREYXRlXCJcbiAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcbiAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFtuYXZpZ2F0aW9uXT1cIm5hdmlnYXRpb25cIlxuICAgICAgICBbcmFuZ2VdPVwicmFuZ2VcIlxuICAgICAgICBbc3RhcnREYXRlXT1cInN0YXJ0RGF0ZVwiXG4gICAgICAgIFtuYXZZZWFyRmlyc3RdPVwibmF2WWVhckZpcnN0XCJcbiAgICAgICAgW2RheUZvcm1hdF09XCJkYXlGb3JtYXRcIlxuICAgICAgICBbd2Vla2RheUZvcm1hdF09XCJ3ZWVrZGF5Rm9ybWF0XCJcbiAgICAgICAgW3NlbGVjdEFkamFjZW50RGF5c109XCJzZWxlY3RBZGphY2VudERheXNcIlxuICAgICAgICBbc2hvd0FkamFjZW50RGF5c109XCJzaG93QWRqYWNlbnREYXlzXCJcbiAgICAgICAgW3Nob3dXZWVrTnVtYmVyXT1cInNob3dXZWVrTnVtYmVyXCJcbiAgICAgICAgW3NlbGVjdGlvblR5cGVdPVwic2VsZWN0aW9uVHlwZVwiXG4gICAgICAgIFt3ZWVrTnVtYmVyc0xhYmVsXT1cIndlZWtOdW1iZXJzTGFiZWxcIlxuICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyc1wiXG4gICAgICA+PC9jLWNhbGVuZGFyPlxuICAgICAgPGRpdiAqbmdJZj1cImZhbHNlICYmIHRpbWVwaWNrZXJcIiBjbGFzcz1cImRhdGUtcGlja2VyLXRpbWVwaWNrZXJzXCI+XG4gICAgICAgIDwhLS0gdG9kby0tPlxuICAgICAgICA8Yy10aW1lLXBpY2tlclxuICAgICAgICAgIHZhcmlhbnQ9XCJzZWxlY3RcIlxuICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIXN0YXJ0RGF0ZVwiXG4gICAgICAgICAgW3RpbWVdPVwic3RhcnREYXRlID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgKHRpbWVDaGFuZ2UpPVwiaGFuZGxlU3RhcnRUaW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9jLXRpbWUtcGlja2VyPlxuICAgICAgICA8Yy10aW1lLXBpY2tlclxuICAgICAgICAgICpuZ0lmPVwicmFuZ2VcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJzZWxlY3RcIlxuICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVuZERhdGVcIlxuICAgICAgICAgIFt0aW1lXT1cImVuZERhdGUgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAodGltZUNoYW5nZSk9XCJoYW5kbGVFbmRUaW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9jLXRpbWUtcGlja2VyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInRlbXBsYXRlcz8uZGF0ZVBpY2tlckZvb3RlclwiIGNsYXNzPVwiZGF0ZS1waWNrZXItZm9vdGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy5kYXRlUGlja2VyRm9vdGVyOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkcm9wZG93bn1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvYy1kcm9wZG93bj5cbiJdfQ==
|
|
698
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFJZixNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUVMLFdBQVcsRUFFWCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBTXhCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVwRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLEVB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VyxFQUFFLElBQUksRUFBRTtnQkFzQmpDLE1BQU07c0JBQS9CLFlBQVk7dUJBQUMsVUFBVTtnQkE0RXBCLGlCQUFpQjtzQkFEcEIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcm1hdERhdGUsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5cbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2J1dHRvbic7XG5pbXBvcnQgeyBnZXRMb2NhbERhdGVGcm9tU3RyaW5nLCBpc0RhdGVEaXNhYmxlZCwgaXNWYWxpZERhdGUgfSBmcm9tICcuLi8uLi9jYWxlbmRhci9jYWxlbmRhci51dGlscyc7XG5pbXBvcnQgeyBEYXRlRmlsdGVyVHlwZSwgRGF5Rm9ybWF0VHlwZSwgV2Vla2RheUZvcm1hdFR5cGUgfSBmcm9tICcuLi8uLi9jYWxlbmRhci9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2FsZW5kYXInO1xuaW1wb3J0IHsgQ29sb3JzIH0gZnJvbSAnLi4vLi4vY29yZXVpLnR5cGVzJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50LCBEcm9wZG93bk1lbnVEaXJlY3RpdmUsIERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZHJvcGRvd24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xEaXJlY3RpdmUsIElucHV0R3JvdXBDb21wb25lbnQsIElucHV0R3JvdXBUZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZm9ybSc7XG5pbXBvcnQgeyBUZW1wbGF0ZUlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IFRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi90aW1lLXBpY2tlcic7XG5pbXBvcnQgeyBDdXN0b21SYW5nZUtleVBpcGUgfSBmcm9tICcuL2N1c3RvbS1yYW5nZS1rZXkucGlwZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNhbGVuZGFyUmFuZ2VzIHtcbiAgW2tleTogc3RyaW5nXTogRGF0ZVtdO1xufVxuXG5leHBvcnQgdHlwZSBUQ3VzdG9tUmFuZ2UgPSBbc3RyaW5nLCBEYXRlW11dXG5cbi8qKiBNdXN0IGJlIGEgdmFsaWQgZGF0ZSBzdHJpbmcgKi9cbi8vIHRvZG86IHZhbGlkYXRpb25cbi8vIGV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcihsb2NhbGU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbi8vICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4vLyAgICAgLy8gY29uc3QgdmFsaWREYXRlID0gIWlzTmFOKERhdGUucGFyc2UoY29udHJvbC52YWx1ZSkpO1xuLy8gICAgIHN0cmluZ1RvRGF0ZUNvbnZlcnQoY29udHJvbC52YWx1ZSwgbG9jYWxlKTtcbi8vICAgICBjb25zdCBkYXRlU2hpbSA9IGN2dERhdGUoY29udHJvbC52YWx1ZSwgbG9jYWxlKTtcbi8vICAgICAvLyBAdHMtaWdub3JlXG4vLyAgICAgLy8gY29udHJvbC5zZXRWYWx1ZShuZXcgRGF0ZShkYXRlU2hpbS55ZWFyLCBkYXRlU2hpbS5tb250aCwgZGF0ZVNoaW0uZGF5KSlcbi8vICAgICBjb25zb2xlLmxvZygnZGF0ZVNoaW0nLCBkYXRlU2hpbSwgbG9jYWxlKTtcbi8vICAgICBjb25zdCB2YWxpZERhdGUgPSBpc1ZhbGlkRGF0ZShjb250cm9sLnZhbHVlKTtcbi8vICAgICBjb25zb2xlLmxvZygnaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3InLCBjb250cm9sLCBjb250cm9sLnZhbHVlLCB2YWxpZERhdGUpO1xuLy8gICAgIHJldHVybiB2YWxpZERhdGUgPyB7IGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yOiB7IHZhbHVlOiBjb250cm9sLnZhbHVlIH0gfSA6IG51bGw7XG4vLyAgIH07XG4vLyB9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtZGF0ZS1yYW5nZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NEYXRlUmFuZ2VQaWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgVGltZVBpY2tlckNvbXBvbmVudCxcbiAgICBCdXR0b25EaXJlY3RpdmUsXG4gICAgRHJvcGRvd25Db21wb25lbnQsXG4gICAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25NZW51RGlyZWN0aXZlLFxuICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgRm9ybUNvbnRyb2xEaXJlY3RpdmUsXG4gICAgSW5wdXRHcm91cFRleHREaXJlY3RpdmUsXG4gICAgQ3VzdG9tUmFuZ2VLZXlQaXBlXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZm9ybWF0IG9mIGRheSBuYW1lLlxuICAgKiBAZGVmYXVsdCAnbnVtZXJpYydcbiAgICogQHR5cGUgRGF5Rm9ybWF0VHlwZVxuICAgKi9cbiAgQElucHV0KCkgZGF5Rm9ybWF0OiBEYXlGb3JtYXRUeXBlID0gJ251bWVyaWMnO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNhbGVuZGFycyB0aGF0IHJlbmRlciBvbiBkZXNrdG9wIGRldmljZXMuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBjYWxlbmRhcnM6IG51bWJlciA9IDI7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9yIHNldCB0aGUgY29udGVudCBvZiB0aGUgY2xlYW5lciBidXR0b24uXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFuZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGRyb3Bkb3duIHNob3VsZCBiZSBjbG9zZWQgYWZ0ZXIgdmFsdWUgc2V0dGluZy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsb3NlT25TZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IGRhdGUgZm9ybWF0LlxuICAgKiBXZSB1c2UgQW5ndWxhciBmb3JtYXREYXRlKCkgZnVuY3Rpb24sIHNlZTpcbiAgICogLSBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvbW1vbi9mb3JtYXREYXRlXG4gICAqIC0gaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb21tb24vRGF0ZVBpcGUjcHJlLWRlZmluZWQtZm9ybWF0LW9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpXG4gIGZvcm1hdD86IHN0cmluZztcblxuICAvKipcbiAgICogVG9nZ2xlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSBjb250ZW50IG9mIHRoZSBpbnB1dCBpbmRpY2F0b3IuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGluZGljYXRvcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBmdW5jdGlvbiB0byBmb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGUgaW50byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gYSBjdXN0b20gZm9ybWF0LlxuICAgKiBAc2luY2UgdjUuMC4wXG4gICAqL1xuICBASW5wdXQoKSBpbnB1dERhdGVGb3JtYXQ/OiAoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gZnVuY3Rpb24gdG8gcGFyc2UgdGhlIGlucHV0IHZhbHVlIGludG8gYSB2YWxpZCBEYXRlIG9iamVjdC5cbiAgICogQHNpbmNlIHY1LjAuMFxuICAgKi9cbiAgQElucHV0KCkgaW5wdXREYXRlUGFyc2U/OiAoZGF0ZTogc3RyaW5nIHwgRGF0ZSkgPT4gRGF0ZTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSByZWFkb25seSBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBpbnB1dFJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jaW5wdXRSZWFkT25seSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGlucHV0UmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2lucHV0UmVhZE9ubHkgfHwgdHlwZW9mIHRoaXMuZm9ybWF0ID09PSAnc3RyaW5nJztcbiAgfVxuXG4gICNpbnB1dFJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFJlb3JkZXIgeWVhci1tb250aCBuYXZpZ2F0aW9uLCBhbmQgcmVuZGVyIHllYXIgZmlyc3QuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBuYXZZZWFyRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHNob3J0IGhpbnRzIHRoYXQgYXJlIHZpc2libGUgaW4gc3RhcnQgZGF0ZSBhbmQgZW5kIGRhdGUgaW5wdXRzLlxuICAgKiB0eXBlIHN0cmluZ1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHN0cmluZ1tdID0gWydTdGFydCBkYXRlJywgJ0VuZCBkYXRlJ107XG5cbiAgLyoqXG4gICAqIFByZWRlZmluZWQgZGF0ZSByYW5nZXMgdGhlIHVzZXIgY2FuIHNlbGVjdCBmcm9tLlxuICAgKiBAdHlwZSBJQ2FsZW5kYXJSYW5nZXNcbiAgICovXG4gIEBJbnB1dCgpIHJhbmdlcz86IElDYWxlbmRhclJhbmdlcztcblxuICAvKipcbiAgICogU2V0cyB0aGUgY29sb3IgY29udGV4dCBvZiB0aGUgY2FuY2VsIGJ1dHRvbiB0byBvbmUgb2YgQ29yZVVJ4oCZcyB0aGVtZWQgY29sb3JzLlxuICAgKiBAdHlwZSAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdzdWNjZXNzJyB8ICdkYW5nZXInIHwgJ3dhcm5pbmcnIHwgJ2luZm8nIHwgJ2RhcmsnIHwgJ2xpZ2h0JyB8IHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnc2Vjb25kYXJ5J1xuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc0NvbG9yPzogQ29sb3JzID0gJ3NlY29uZGFyeSc7XG5cbiAgLyoqXG4gICAqIFNpemUgdGhlIHJhbmdlcyBidXR0b24gc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgJydcbiAgICovXG4gIEBJbnB1dCgpIHJhbmdlc0J1dHRvbnNTaXplOiAnc20nIHwgJ2xnJyB8ICcnID0gJyc7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcmFuZ2VzIGJ1dHRvbiB2YXJpYW50IHRvIGFuIG91dGxpbmVkIGJ1dHRvbiBvciBhIGdob3N0IGJ1dHRvbi5cbiAgICogQHR5cGUgJ291dGxpbmUnIHwgJ2dob3N0JyB8IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc1ZhcmlhbnQ/OiAnb3V0bGluZScgfCAnZ2hvc3QnID0gJ2dob3N0JztcblxuICAvKipcbiAgICogRGVmYXVsdCBpY29uIG9yIGNoYXJhY3RlciB0aGF0IHNlcGFyYXRlcyB0d28gZGF0ZXMuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNlcGFyYXRvciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNpemUgdGhlIGNvbXBvbmVudCBzbWFsbCBvciBsYXJnZS5cbiAgICogQHR5cGUgJ3NtJyB8ICdsZycgfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYWRkaXRpb25hbCB0aW1lIHNlbGVjdGlvbiBieSBhZGRpbmcgc2VsZWN0IGJveGVzIHRvIGNob29zZSB0aW1lLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHRpbWVwaWNrZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLiN0aW1lcGlja2VyID0gdmFsdWU7XG4gIH1cblxuICBnZXQgdGltZXBpY2tlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gcmV0dXJuIHRoaXMuI3RpbWVwaWNrZXI7XG4gIH1cblxuICAjdGltZXBpY2tlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzdWFsIHZhbGlkYXRpb24gZmVlZGJhY2suXG4gICAqIEB0eXBlIGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSB2YWxpZD86IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZHJvcGRvd24gZGF0ZS1waWNrZXIgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzdGFydERhdGUodmFsdWUpIHtcbiAgICBjb25zdCBwcmV2RGF0ZSA9IHRoaXMuX3N0YXJ0RGF0ZSA/IG5ldyBEYXRlKHRoaXMuX3N0YXJ0RGF0ZSkgOiBudWxsO1xuICAgIHRoaXMuX3N0YXJ0RGF0ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogbnVsbDtcbiAgICBpZiAocHJldkRhdGU/LmdldFRpbWUoKSAhPT0gdGhpcy5fc3RhcnREYXRlPy5nZXRUaW1lKCkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlVmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5fc3RhcnREYXRlKTtcbiAgICAgIHRoaXMuc3RhcnREYXRlQ2hhbmdlLmVtaXQodGhpcy5fc3RhcnREYXRlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc3RhcnREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFydERhdGU7XG4gIH1cblxuICBwcml2YXRlIF9zdGFydERhdGU/OiBEYXRlIHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgZW5kRGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHByZXZEYXRlID0gdGhpcy5fZW5kRGF0ZSA/IG5ldyBEYXRlKHRoaXMuX2VuZERhdGUgPz8gMCkgOiBudWxsO1xuICAgIHRoaXMuX2VuZERhdGUgPSB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XG4gICAgaWYgKHByZXZEYXRlPy5nZXRUaW1lKCkgIT09IHRoaXMuX2VuZERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5lbmREYXRlVmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5fZW5kRGF0ZSk7XG4gICAgICB0aGlzLmVuZERhdGVDaGFuZ2UuZW1pdCh0aGlzLl9lbmREYXRlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZW5kRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kRGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2VuZERhdGU/OiBEYXRlIHwgbnVsbDtcblxuICBASW5wdXQoKSBjYWxlbmRhckRhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBASW5wdXQoKSBkaXNhYmxlZERhdGVzOiBEYXRlW10gfCBEYXRlW11bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBTZXQgZmlyc3QgZGF5IG9mIHdlZWsuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAxIChNb25kYXkpXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBmaXJzdERheU9mV2VlazogbnVtYmVyID0gMTtcblxuICBASW5wdXQoKSBsb2NhbGU6IHN0cmluZyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFNob3cgY2FsZW5kYXIgbmF2aWdhdGlvbi5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEFsbG93IHJhbmdlIHNlbGVjdGlvbi5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJhbmdlID0gdHJ1ZTtcblxuICBASW5wdXQoKSBkYXRlRmlsdGVyPzogRGF0ZUZpbHRlclR5cGU7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jZGlzYWJsZWQgPyB0aGlzLnN0YXJ0RGF0ZUlucHV0LmRpc2FibGUoKSA6IHRoaXMuc3RhcnREYXRlSW5wdXQuZW5hYmxlKCk7XG4gICAgdGhpcy4jZGlzYWJsZWQgPyB0aGlzLmVuZERhdGVJbnB1dC5kaXNhYmxlKCkgOiB0aGlzLmVuZERhdGVJbnB1dC5lbmFibGUoKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWQ7XG4gIH1cblxuICAjZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5yYW5nZSA/IHsgLi4udmFsdWUgfSA6IHZhbHVlO1xuICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl92YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIGlmICh0aGlzLnJhbmdlKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKG5ld1ZhbHVlLnN0YXJ0RGF0ZSA/PyBudWxsKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFbmREYXRlQ2hhbmdlKG5ld1ZhbHVlLmVuZERhdGUgPz8gbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShuZXdWYWx1ZSA/PyBudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25DaGFuZ2UobmV3VmFsdWUpO1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgY29uc3QgaGFzVmFsdWUgPSB0aGlzLnJhbmdlID8gISEodGhpcy52YWx1ZS5zdGFydERhdGUgJiYgdGhpcy52YWx1ZS5lbmREYXRlKSA6ICEhdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gIWhhc1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZTogYW55ID0ge307XG5cbiAgLyoqXG4gICAqIFNldCBsZW5ndGggb3IgZm9ybWF0IG9mIGRheSBuYW1lLlxuICAgKiBAdHlwZSBXZWVrZGF5Rm9ybWF0VHlwZVxuICAgKiBAZGVmYXVsdCAnc2hvcnQnXG4gICAqL1xuICBASW5wdXQoKSB3ZWVrZGF5Rm9ybWF0OiBXZWVrZGF5Rm9ybWF0VHlwZSA9ICdzaG9ydCc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHBvcHBlciBPcHRpb25zIG9iamVjdFxuICAgKiBAdHlwZSBQYXJ0aWFsPE9wdGlvbnM+XG4gICAqL1xuICBASW5wdXQoJ3BvcHBlck9wdGlvbnMnKSBwb3BwZXJqc09wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHdoZXRoZXIgZGF5cyBpbiBhZGphY2VudCBtb250aHMgc2hvd24gYmVmb3JlIG9yIGFmdGVyIHRoZSBjdXJyZW50IG1vbnRoIGFyZSBzZWxlY3RhYmxlLiBUaGlzIG9ubHkgYXBwbGllcyBpZiB0aGUgYHNob3dBZGphY2VudERheXNgIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC40LjEwXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2VsZWN0QWRqYWNlbnREYXlzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldCB3aGV0aGVyIHRvIGRpc3BsYXkgZGF0ZXMgaW4gYWRqYWNlbnQgbW9udGhzIChub24tc2VsZWN0YWJsZSkgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAc2luY2UgNC40LjEwXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0FkamFjZW50RGF5czogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIHR5cGUgb2YgZGF0ZSBzZWxlY3Rpb24gYXMgZGF5LCB3ZWVrLCBtb250aCwgb3IgeWVhci5cbiAgICogQHR5cGUgJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG4gICAqIEBkZWZhdWx0ICdkYXknXG4gICAqIEBzaW5jZSA1LjAuMFxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZTogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInID0gJ2RheSc7XG5cbiAgLyoqXG4gICAqIFNldCB3aGV0aGVyIHRvIGRpc3BsYXkgd2VlayBudW1iZXJzIGluIHRoZSBjYWxlbmRhci5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNS4wLjBcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93V2Vla051bWJlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBMYWJlbCBkaXNwbGF5ZWQgb3ZlciB3ZWVrIG51bWJlcnMgaW4gdGhlIGNhbGVuZGFyLlxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqIEBzaW5jZSA1LjAuMFxuICAgKi9cbiAgQElucHV0KCkgd2Vla051bWJlcnNMYWJlbD86IHN0cmluZztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBEYXRlW10gfCB1bmRlZmluZWQ+KCk7XG5cbiAgQE91dHB1dCgpIGNhbGVuZGFyQ2VsbEhvdmVyOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGNhbGVuZGFyRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuICBAT3V0cHV0KCkgZW5kRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSBzdGFydERhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuXG4gIC8vIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQpIGNhbGVuZGFyQ29tcG9uZW50ITogQ2FsZW5kYXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3N0YXJ0RGF0ZUVsZW1lbnRSZWYnKSBzdGFydERhdGVFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUVsZW1lbnRSZWYnKSBlbmREYXRlRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgdGVtcGxhdGVzOiBhbnkgPSB7fTtcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG5cbiAgcHJvdGVjdGVkIGRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBzdWJzY3JpYmVEYXRlQ2hhbmdlKHN1YnNjcmliZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAvLyB0b2RvXG4gICAgICAvLyB0aGlzLmRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGFydERhdGVDaGFuZ2Uuc3Vic2NyaWJlKG5leHQgPT4ge1xuICAgICAgLy8gICB0aGlzLnN0YXJ0RGF0ZSA9IG5leHQ7XG4gICAgICAvLyAgIHRoaXMub25DaGFuZ2UobmV4dCk7XG4gICAgICAvLyB9KSk7XG4gICAgICAvLyB0aGlzLmRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGFydERhdGVDaGFuZ2Uuc3Vic2NyaWJlKG5leHQgPT4ge1xuICAgICAgLy8gICB0aGlzLmVuZERhdGUgPSBuZXh0O1xuICAgICAgLy8gICB0aGlzLm9uQ2hhbmdlKG5leHQpO1xuICAgICAgLy8gfSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0Jykgb25CbHVyKCkge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNNb2JpbGUgPSB0cnVlO1xuICBwdWJsaWMgY3VzdG9tUmFuZ2VzITogVEN1c3RvbVJhbmdlW107XG4gIHB1YmxpYyBzaG93UmFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2V0IHN0YXJ0RGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0LnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLl9zdGFydERhdGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RGF0ZVZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RhcnREYXRlVmFsdWU6IHN0cmluZyA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG5cbiAgc2V0IGVuZERhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5lbmREYXRlSW5wdXQuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMuX2VuZERhdGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGVuZERhdGVWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbmREYXRlVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgX2VuZERhdGVWYWx1ZTogc3RyaW5nID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuZW5kRGF0ZSk7XG5cbiAgcHVibGljIGdldCBzdGFydERhdGVQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucGxhY2Vob2xkZXIpID8gdGhpcy5wbGFjZWhvbGRlclswXSA6IHRoaXMucGxhY2Vob2xkZXI7XG4gIH07XG5cbiAgcHVibGljIGdldCBlbmREYXRlUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnBsYWNlaG9sZGVyKSA/IHRoaXMucGxhY2Vob2xkZXJbMV0gOiB0aGlzLnBsYWNlaG9sZGVyO1xuICB9O1xuXG4gIHByaXZhdGUgbGF5b3V0Q2hhbmdlcyE6IFN1YnNjcmlwdGlvbjtcblxuICAvLyB0b2RvOiB2YWxpZGF0aW9uXG4gIHN0YXJ0RGF0ZUlucHV0ID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuc3RhcnREYXRlVmFsdWUsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0sIFtcbiAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgLy8gVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksXG4gICAgLy8gVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTApLFxuICAgIC8vIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKHRoaXMubG9jYWxlKVxuICBdKTtcbiAgZW5kRGF0ZUlucHV0ID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuZW5kRGF0ZVZhbHVlLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9LCBbXG4gICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgIC8vIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpLFxuICAgIC8vIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSxcbiAgICAvLyBpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcih0aGlzLmxvY2FsZSlcbiAgXSk7XG4gIGRhdGVSYW5nZUdyb3VwITogRm9ybUdyb3VwO1xuXG4gIHNldCBpbnB1dFN0YXJ0SG92ZXJWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuX2lucHV0U3RhcnRIb3ZlclZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW5wdXRTdGFydEhvdmVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0U3RhcnRIb3ZlclZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5wdXRTdGFydEhvdmVyVmFsdWUhOiBEYXRlIHwgbnVsbDtcblxuICBzZXQgaW5wdXRFbmRIb3ZlclZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5faW5wdXRFbmRIb3ZlclZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW5wdXRFbmRIb3ZlclZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dEVuZEhvdmVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9pbnB1dEVuZEhvdmVyVmFsdWUhOiBEYXRlIHwgbnVsbDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGRhdGVQaWNrZXJDbGFzc2VzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnZGF0ZS1waWNrZXInOiB0cnVlLFxuICAgICAgW2BkYXRlLXBpY2tlci0ke3RoaXMuc2l6ZX1gXTogdGhpcy5zaXplLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAnaXMtdmFsaWQnOiB0aGlzLnZhbGlkID09PSB0cnVlLFxuICAgICAgJ2lzLWludmFsaWQnOiB0aGlzLnZhbGlkID09PSBmYWxzZVxuICAgIH07XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICFkYXRlIHx8ICFpc1ZhbGlkRGF0ZShkYXRlKSA/ICcnIDpcbiAgICAgICAgICAgdHlwZW9mIHRoaXMuaW5wdXREYXRlRm9ybWF0ID09PSAnZnVuY3Rpb24nID8gdGhpcy5pbnB1dERhdGVGb3JtYXQoZGF0ZSkgOlxuICAgICAgICAgICAoISF0aGlzLmZvcm1hdCAmJiAhIXRoaXMubG9jYWxlICYmIHRoaXMubG9jYWxlICE9PSAnZGVmYXVsdCcpID8gZm9ybWF0RGF0ZShkYXRlLCB0aGlzLmZvcm1hdCwgdGhpcy5sb2NhbGUpIDpcbiAgICAgICAgICAgdGhpcy50aW1lcGlja2VyID8gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSkgOlxuICAgICAgICAgICBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSk7XG4gIH1cblxuICByZWFkb25seSAjYnJlYWtwb2ludHMgPSB7XG4gICAgT25lQ2FsZW5kYXJSYW5nZXM6ICcobWluLXdpZHRoOiA0ODBweCknLFxuICAgIFR3b0NhbGVuZGFyczogJyhtYXgtd2lkdGg6IDY1MHB4KScsXG4gICAgVHdvQ2FsZW5kYXJzUmFuZ2VzOiAnKG1heC13aWR0aDogODEwcHgpJ1xuICB9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VzdG9tUmFuZ2VzID0gdGhpcy5yYW5nZXMgPyBPYmplY3QuZW50cmllcyh0aGlzLnJhbmdlcykgOiBbXTtcblxuICAgIGNvbnN0IGJyZWFrcG9pbnRzID0gdGhpcy4jYnJlYWtwb2ludHM7XG5cbiAgICB0aGlzLmxheW91dENoYW5nZXMgPSB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFtcbiAgICAgIGJyZWFrcG9pbnRzLk9uZUNhbGVuZGFyUmFuZ2VzLFxuICAgICAgYnJlYWtwb2ludHMuVHdvQ2FsZW5kYXJzLFxuICAgICAgYnJlYWtwb2ludHMuVHdvQ2FsZW5kYXJzUmFuZ2VzXG4gICAgXSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0Lm1hdGNoZXMpIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9ICh0aGlzLmN1c3RvbVJhbmdlcz8ubGVuZ3RoID4gMCAmJiByZXN1bHQuYnJlYWtwb2ludHNbYnJlYWtwb2ludHMuVHdvQ2FsZW5kYXJzUmFuZ2VzXSkgfHwgcmVzdWx0LmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRzLlR3b0NhbGVuZGFyc107XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVJhbmdlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuc2hvd1JhbmdlcyA9ICFyZXN1bHQuYnJlYWtwb2ludHNbYnJlYWtwb2ludHMuT25lQ2FsZW5kYXJSYW5nZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXJ0RGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuc3RhcnREYXRlKTtcbiAgICB0aGlzLmVuZERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmVuZERhdGUpO1xuICAgIHRoaXMuc3Vic2NyaWJlRGF0ZUNoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5sYXlvdXRDaGFuZ2VzPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlRGF0ZUNoYW5nZShmYWxzZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZXMuZm9yRWFjaCgoY2hpbGQ6IFRlbXBsYXRlSWREaXJlY3RpdmUpID0+IHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0ZSddKSB7XG4gICAgICAvLyBmb3IgZGF0ZS1waWNrZXIgY29tcG9uZW50XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jb252ZXJ0VmFsdWVUb0RhdGUoY2hhbmdlc1snZGF0ZSddPy5jdXJyZW50VmFsdWUpID8/IG51bGw7XG4gICAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShkYXRlKTtcbiAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZSA/PyB0aGlzLmNhbGVuZGFyRGF0ZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3N0YXJ0RGF0ZSddKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jb252ZXJ0VmFsdWVUb0RhdGUoY2hhbmdlc1snc3RhcnREYXRlJ10/LmN1cnJlbnRWYWx1ZSkgPz8gbnVsbDtcbiAgICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGRhdGUpO1xuICAgICAgdGhpcy5jYWxlbmRhckRhdGUgPSBkYXRlID8/IHRoaXMuY2FsZW5kYXJEYXRlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZW5kRGF0ZSddKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jb252ZXJ0VmFsdWVUb0RhdGUoY2hhbmdlc1snZW5kRGF0ZSddPy5jdXJyZW50VmFsdWUpID8/IG51bGw7XG4gICAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UoZGF0ZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydsb2NhbGUnXSkge1xuICAgICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgICB0aGlzLmVuZERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmVuZERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnZlcnRWYWx1ZVRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0UGFyc2UodmFsdWUpID8/IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPz8gbnVsbDtcbiAgfVxuXG4gIGlucHV0UGFyc2UoZGF0ZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmlucHV0RGF0ZVBhcnNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gdGhpcy5pbnB1dERhdGVQYXJzZShkYXRlKTtcbiAgICAgIGlmIChpc1ZhbGlkRGF0ZShwYXJzZWREYXRlKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkRGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdldExvY2FsRGF0ZUZyb21TdHJpbmcoZGF0ZSwgdGhpcy5sb2NhbGUsIHRoaXMudGltZXBpY2tlcik7XG4gIH1cblxuICBnZXRDdXN0b21SYW5nZUtleShjdXN0b21SYW5nZTogYW55KSB7XG4gICAgcmV0dXJuIGN1c3RvbVJhbmdlWzBdO1xuICB9XG5cbiAgc2V0Q3VzdG9tUmFuZ2UoY3VzdG9tUmFuZ2U6IGFueSkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q3VzdG9tUmFuZ2VLZXkoY3VzdG9tUmFuZ2UpO1xuICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGN1c3RvbVJhbmdlWzFdWzBdKTtcbiAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UoY3VzdG9tUmFuZ2VbMV1bMV0pO1xuICB9XG5cbiAgaGFuZGxlQ2FsZW5kYXJDZWxsSG92ZXIoJGV2ZW50OiBEYXRlIHwgbnVsbCkge1xuICAgIHRoaXMuY2FsZW5kYXJDZWxsSG92ZXIuZW1pdCgkZXZlbnQpO1xuICAgIGlmICghdGhpcy5zdGFydERhdGUpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLnN0YXJ0RGF0ZUVsZW1lbnRSZWYsICRldmVudCk7XG4gICAgICB0aGlzLmlucHV0U3RhcnRIb3ZlclZhbHVlID0gJGV2ZW50O1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZW5kRGF0ZUVsZW1lbnRSZWYsIG51bGwpO1xuICAgICAgdGhpcy5pbnB1dEVuZEhvdmVyVmFsdWUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZW5kRGF0ZSkge1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZW5kRGF0ZUVsZW1lbnRSZWYsICRldmVudCk7XG4gICAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9ICRldmVudDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDYWxlbmRhckRhdGVDaGFuZ2UoJGV2ZW50OiBEYXRlKSB7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXJEYXRlLmdldFRpbWUoKSAhPT0gJGV2ZW50LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5jYWxlbmRhckRhdGVDaGFuZ2UuZW1pdCgkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShkYXRlOiBEYXRlIHwgbnVsbCkge1xuICAgIGlmIChkYXRlPy5nZXRUaW1lKCkgIT09IHRoaXMuc3RhcnREYXRlPy5nZXRUaW1lKCkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gZGF0ZSA/PyBudWxsO1xuICAgICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgICB0aGlzLmlucHV0U3RhcnRIb3ZlclZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJhbmdlID8geyBzdGFydERhdGU6IHRoaXMuc3RhcnREYXRlLCBlbmREYXRlOiB0aGlzLmVuZERhdGUgfSA6IHRoaXMuc3RhcnREYXRlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUVuZERhdGVDaGFuZ2UoZGF0ZTogRGF0ZSB8IG51bGwpIHtcbiAgICBpZiAoZGF0ZT8uZ2V0VGltZSgpICE9PSB0aGlzLmVuZERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgaWYgKCF0aGlzLnJhbmdlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW5kRGF0ZSA9IGRhdGUgPz8gbnVsbDtcbiAgICAgIHRoaXMuZW5kRGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuZW5kRGF0ZSk7XG4gICAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5yYW5nZSA/IHsgc3RhcnREYXRlOiB0aGlzLnN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5lbmREYXRlIH0gOiB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDbGVhcigkZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgLy8gdGhpcy5jYWxlbmRhckNvbXBvbmVudC5jbGVhckRhdGVzKCk7XG4gICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UobnVsbCk7XG4gICAgdGhpcy5oYW5kbGVFbmREYXRlQ2hhbmdlKG51bGwpO1xuICB9XG5cbiAgaGFuZGxlU3RhcnREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuaW5wdXRQYXJzZShpbnB1dFZhbHVlKTtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIC8vIHRoaXMuY2FsZW5kYXJDb21wb25lbnQuY2xlYXJEYXRlcygpO1xuICAgICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UobnVsbCk7XG4gICAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UobnVsbCk7XG4gICAgfVxuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiBkYXRlLmdldFRpbWUoKSkge1xuICAgICAgaWYgKCEodGhpcy5mb3JiaWRkZW5EYXRlKGRhdGUpIHx8ICh0aGlzLmVuZERhdGUgJiYgdGhpcy5lbmREYXRlIDwgZGF0ZSkpKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSh0aGlzLnN0YXJ0RGF0ZSA/PyBudWxsKTtcbiAgfVxuXG4gIGhhbmRsZUVuZERhdGVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5pbnB1dFBhcnNlKGlucHV0VmFsdWUpO1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgdGhpcy5lbmREYXRlID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmIGRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICBpZiAoISh0aGlzLmZvcmJpZGRlbkRhdGUoZGF0ZSkgfHwgKHRoaXMuc3RhcnREYXRlICYmIHRoaXMuc3RhcnREYXRlID4gZGF0ZSkpKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5lbmREYXRlID0gZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5oYW5kbGVFbmREYXRlQ2hhbmdlKHRoaXMuZW5kRGF0ZSA/PyBudWxsKTtcbiAgfVxuXG4gIGZvcmJpZGRlbkRhdGUoZGF0ZTogRGF0ZSkge1xuICAgIHJldHVybiBpc0RhdGVEaXNhYmxlZChkYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSwgdGhpcy5kaXNhYmxlZERhdGVzKSB8fCAodGhpcy5kYXRlRmlsdGVyID8gIXRoaXMuZGF0ZUZpbHRlcihkYXRlKSA6IGZhbHNlKTtcbiAgfVxuXG4gIHNldElucHV0VmFsdWUgPSAoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZGF0ZTogRGF0ZSB8IG51bGwpID0+IHtcbiAgICBpZiAoIWVsZW1lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5mb3JtYXREYXRlKGRhdGUpO1xuICAgIC8vIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZUFzRGF0ZSA9IGRhdGU7XG4gICAgcmV0dXJuO1xuICB9O1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAodmFsdWU6IGFueSkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucmFuZ2UgPyB7IC4uLnZhbHVlIH0gOiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTdGFydFRpbWVDaGFuZ2UodGltZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc3RhcnREYXRlID0gdGltZSA/PyB0aGlzLnN0YXJ0RGF0ZTtcbiAgfVxuXG4gIGhhbmRsZUVuZFRpbWVDaGFuZ2UodGltZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghdGhpcy5yYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVuZERhdGUgPSB0aW1lID8/IHRoaXMuZW5kRGF0ZTtcbiAgfVxufVxuIiwiPGMtZHJvcGRvd24gI2Ryb3Bkb3duPVwiY0Ryb3Bkb3duXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIiBjbGFzcz1cImRhdGUtcGlja2VyIHBpY2tlclwiIFtuZ0NsYXNzXT1cImRhdGVQaWNrZXJDbGFzc2VzXCJcbiAgICAgICAgICAgIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFtwb3BwZXJPcHRpb25zXT1cInBvcHBlcmpzT3B0aW9uc1wiPlxuICA8ZGl2IFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkID8/IGRyb3Bkb3duLnZpc2libGVcIlxuICAgICAgIGNEcm9wZG93blRvZ2dsZVxuICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItaW5wdXQtZ3JvdXBcIlxuICA+XG4gICAgPGlucHV0ICNzdGFydERhdGVFbGVtZW50UmVmXG4gICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlU3RhcnREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInN0YXJ0RGF0ZUlucHV0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyOiAhIWlucHV0U3RhcnRIb3ZlclZhbHVlfVwiXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzdGFydERhdGVQbGFjZWhvbGRlclwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJpbnB1dFJlYWRPbmx5ID8/IG51bGxcIlxuICAgICAgICAgICBbdmFsaWRdPVwicmFuZ2UgPyB1bmRlZmluZWQgOiB2YWxpZFwiXG4gICAgICAgICAgIGNGb3JtQ29udHJvbFxuICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWlucHV0XCJcbiAgICAgICAgICAgcGF0dGVybj1cIlsxLTldKlwiXG4gICAgPlxuICAgIEBpZiAocmFuZ2UgJiYgc2VwYXJhdG9yICE9PSBmYWxzZSkge1xuICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXNlcGFyYXRvclwiPjwvZGl2PlxuICAgIH1cbiAgICBAaWYgKHJhbmdlKSB7XG4gICAgICA8aW5wdXQgI2VuZERhdGVFbGVtZW50UmVmXG4gICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVFbmREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJlbmREYXRlSW5wdXRcIlxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntob3ZlcjogISFpbnB1dEVuZEhvdmVyVmFsdWV9XCJcbiAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZW5kRGF0ZVBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaW5wdXRSZWFkT25seSA/PyBudWxsXCJcbiAgICAgICAgICAgICBbdmFsaWRdPVwidmFsaWQgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICBjRm9ybUNvbnRyb2xcbiAgICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWlucHV0XCJcbiAgICAgICAgICAgICBwYXR0ZXJuPVwiWzEtOV0qXCJcbiAgICAgID5cbiAgICB9XG4gICAgQGlmIChpbmRpY2F0b3IpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1pbmRpY2F0b3JcIj48L2Rpdj5cbiAgICB9XG4gICAgQGlmIChjbGVhbmVyICYmIHN0YXJ0RGF0ZUVsZW1lbnRSZWYudmFsdWUgJiYgIWRpc2FibGVkKSB7XG4gICAgICA8ZGl2IChjbGljayk9XCIhZGlzYWJsZWQgJiYgaGFuZGxlQ2xlYXIoJGV2ZW50KVwiIGNsYXNzPVwiZGF0ZS1waWNrZXItY2xlYW5lclwiIHJvbGU9XCJidXR0b25cIj48L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICA8ZGl2IGNEcm9wZG93bk1lbnUgY2xhc3M9XCJkYXRlLXBpY2tlci1kcm9wZG93biBweS0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWJvZHlcIj5cbiAgICAgIEBpZiAoIXNob3dSYW5nZXMpIHtcbiAgICAgICAgQGlmIChyYW5nZXMgJiYgY3VzdG9tUmFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItcmFuZ2VzXCI+XG4gICAgICAgICAgICBAZm9yIChjdXN0b21SYW5nZSBvZiBjdXN0b21SYW5nZXM7IHRyYWNrIGN1c3RvbVJhbmdlKSB7XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldEN1c3RvbVJhbmdlKGN1c3RvbVJhbmdlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInJhbmdlc0J1dHRvbnNDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwicmFuZ2VzQnV0dG9uc1NpemVcIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cInJhbmdlc0J1dHRvbnNWYXJpYW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBjQnV0dG9uPlxuICAgICAgICAgICAgICAgIHt7IGN1c3RvbVJhbmdlIHwgY3VzdG9tUmFuZ2VLZXkgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIDxjLWNhbGVuZGFyXG4gICAgICAgIChjYWxlbmRhckNlbGxIb3Zlcik9XCJoYW5kbGVDYWxlbmRhckNlbGxIb3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGNhbGVuZGFyRGF0ZUNoYW5nZSk9XCJoYW5kbGVDYWxlbmRhckRhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChlbmREYXRlQ2hhbmdlKT1cImhhbmRsZUVuZERhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzdGFydERhdGVDaGFuZ2UpPVwiaGFuZGxlU3RhcnREYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbY2FsZW5kYXJEYXRlXT1cImNhbGVuZGFyRGF0ZVwiXG4gICAgICAgIFtjYWxlbmRhcnNdPVwiaXNNb2JpbGUgPyAxIDogY2FsZW5kYXJzXCJcbiAgICAgICAgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiXG4gICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICBbZW5kRGF0ZV09XCJlbmREYXRlXCJcbiAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcbiAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFtuYXZpZ2F0aW9uXT1cIm5hdmlnYXRpb25cIlxuICAgICAgICBbcmFuZ2VdPVwicmFuZ2VcIlxuICAgICAgICBbc3RhcnREYXRlXT1cInN0YXJ0RGF0ZVwiXG4gICAgICAgIFtuYXZZZWFyRmlyc3RdPVwibmF2WWVhckZpcnN0XCJcbiAgICAgICAgW2RheUZvcm1hdF09XCJkYXlGb3JtYXRcIlxuICAgICAgICBbd2Vla2RheUZvcm1hdF09XCJ3ZWVrZGF5Rm9ybWF0XCJcbiAgICAgICAgW3NlbGVjdEFkamFjZW50RGF5c109XCJzZWxlY3RBZGphY2VudERheXNcIlxuICAgICAgICBbc2hvd0FkamFjZW50RGF5c109XCJzaG93QWRqYWNlbnREYXlzXCJcbiAgICAgICAgW3Nob3dXZWVrTnVtYmVyXT1cInNob3dXZWVrTnVtYmVyXCJcbiAgICAgICAgW3NlbGVjdGlvblR5cGVdPVwic2VsZWN0aW9uVHlwZVwiXG4gICAgICAgIFt3ZWVrTnVtYmVyc0xhYmVsXT1cIndlZWtOdW1iZXJzTGFiZWxcIlxuICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyc1wiXG4gICAgICAvPlxuICAgICAgQGlmIChmYWxzZSAmJiB0aW1lcGlja2VyKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci10aW1lcGlja2Vyc1wiPlxuICAgICAgICAgIDwhLS0gdG9kby0tPlxuICAgICAgICAgIDxjLXRpbWUtcGlja2VyXG4gICAgICAgICAgICB2YXJpYW50PVwic2VsZWN0XCJcbiAgICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc3RhcnREYXRlXCJcbiAgICAgICAgICAgIFt0aW1lXT1cInN0YXJ0RGF0ZSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICAgKHRpbWVDaGFuZ2UpPVwiaGFuZGxlU3RhcnRUaW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgQGlmIChyYW5nZSkge1xuICAgICAgICAgICAgPGMtdGltZS1waWNrZXJcbiAgICAgICAgICAgICAgdmFyaWFudD1cInNlbGVjdFwiXG4gICAgICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFlbmREYXRlXCJcbiAgICAgICAgICAgICAgW3RpbWVdPVwiZW5kRGF0ZSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAodGltZUNoYW5nZSk9XCJoYW5kbGVFbmRUaW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAodGVtcGxhdGVzPy5kYXRlUGlja2VyRm9vdGVyKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItZm9vdGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXM/LmRhdGVQaWNrZXJGb290ZXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGRyb3Bkb3dufVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9jLWRyb3Bkb3duPlxuIl19
|