@eui/components 18.0.0-rc.13 → 18.0.0-rc.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/docs/components/EuiAppTopMessageComponent.html +1 -1
- package/docs/components/EuiChipComponent.html +1 -1
- package/docs/components/EuiDateRangeSelectorComponent.html +25 -1
- package/docs/components/EuiDatepickerComponent.html +25 -1
- package/docs/components/EuiEditorComponent.html +1 -1
- package/docs/components/EuiEditorCountersComponent.html +1 -1
- package/docs/components/EuiGrowlComponent.html +1 -1
- package/docs/components/EuiMenuItemComponent.html +1 -1
- package/docs/components/EuiOverlayHeaderTitleComponent.html +1 -1
- package/docs/components/EuiPageBreadcrumbComponent.html +3 -3
- package/docs/components/EuiPageColumnsComponent.html +3 -3
- package/docs/components/EuiPageContentComponent.html +3 -3
- package/docs/components/EuiPageFooterComponent.html +46 -3
- package/docs/components/EuiPageTopContentComponent.html +3 -3
- package/docs/components/EuiPopoverComponent.html +1 -1
- package/docs/components/EuiTimepickerComponent.html +25 -1
- package/docs/dependencies.html +1 -1
- package/docs/js/menu-wc.js +3 -3
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/docs/miscellaneous/variables.html +1 -1
- package/docs/modules/EuiOverlayModule.html +3 -0
- package/esm2022/eui-alert/eui-alert.component.mjs +2 -3
- package/esm2022/eui-autocomplete/eui-autocomplete.component.mjs +4 -5
- package/esm2022/eui-chip/eui-chip.component.mjs +2 -3
- package/esm2022/eui-date-range-selector/eui-date-range-selector.component.mjs +7 -3
- package/esm2022/eui-date-range-selector/eui-date-range-selector.validators.mjs +2 -2
- package/esm2022/eui-datepicker/eui-datepicker.component.mjs +7 -4
- package/esm2022/eui-fieldset/eui-fieldset.component.mjs +2 -2
- package/esm2022/eui-growl/eui-growl.component.mjs +3 -3
- package/esm2022/eui-icon/eui-icon-svg.component.mjs +2 -2
- package/esm2022/eui-icon-button/eui-icon-button.component.mjs +2 -2
- package/esm2022/eui-menu/eui-menu-item.component.mjs +3 -3
- package/esm2022/eui-menu/eui-menu.component.mjs +2 -3
- package/esm2022/eui-overlay/components/eui-overlay-header/eui-overlay-header-title/eui-overlay-header-title.component.mjs +5 -4
- package/esm2022/eui-overlay/eui-overlay.component.mjs +2 -2
- package/esm2022/eui-overlay/eui-overlay.module.mjs +5 -4
- package/esm2022/eui-page/components/eui-page-breadcrumb/eui-page-breadcrumb.component.mjs +7 -3
- package/esm2022/eui-page/components/eui-page-columns/eui-page-columns.component.mjs +7 -3
- package/esm2022/eui-page/components/eui-page-content/eui-page-content.component.mjs +7 -3
- package/esm2022/eui-page/components/eui-page-footer/eui-page-footer.component.mjs +16 -10
- package/esm2022/eui-page/components/eui-page-top-content/eui-page-top-content.component.mjs +7 -3
- package/esm2022/eui-page/eui-page.component.mjs +2 -2
- package/esm2022/eui-popover/eui-popover.component.mjs +8 -7
- package/esm2022/eui-timepicker/eui-timepicker.component.mjs +7 -4
- package/esm2022/externals/eui-editor/counters/eui-editor-counters.component.mjs +3 -4
- package/esm2022/externals/eui-editor/eui-editor.component.mjs +3 -3
- package/esm2022/layout/eui-app/eui-app-top-message/top-message.component.mjs +3 -3
- package/esm2022/layout/eui-toolbar/toolbar.component.mjs +2 -2
- package/eui-alert/eui-alert.component.d.ts.map +1 -1
- package/eui-autocomplete/eui-autocomplete.component.d.ts.map +1 -1
- package/eui-chip/eui-chip.component.d.ts.map +1 -1
- package/eui-date-range-selector/eui-date-range-selector.component.d.ts +2 -1
- package/eui-date-range-selector/eui-date-range-selector.component.d.ts.map +1 -1
- package/eui-datepicker/eui-datepicker.component.d.ts +2 -1
- package/eui-datepicker/eui-datepicker.component.d.ts.map +1 -1
- package/eui-menu/eui-menu.component.d.ts.map +1 -1
- package/eui-overlay/eui-overlay.module.d.ts +3 -2
- package/eui-overlay/eui-overlay.module.d.ts.map +1 -1
- package/eui-page/components/eui-page-footer/eui-page-footer.component.d.ts +3 -0
- package/eui-page/components/eui-page-footer/eui-page-footer.component.d.ts.map +1 -1
- package/eui-timepicker/eui-timepicker.component.d.ts +2 -1
- package/eui-timepicker/eui-timepicker.component.d.ts.map +1 -1
- package/fesm2022/eui-components-eui-alert.mjs +1 -2
- package/fesm2022/eui-components-eui-alert.mjs.map +1 -1
- package/fesm2022/eui-components-eui-autocomplete.mjs +3 -4
- package/fesm2022/eui-components-eui-autocomplete.mjs.map +1 -1
- package/fesm2022/eui-components-eui-chip.mjs +1 -2
- package/fesm2022/eui-components-eui-chip.mjs.map +1 -1
- package/fesm2022/eui-components-eui-date-range-selector.mjs +7 -3
- package/fesm2022/eui-components-eui-date-range-selector.mjs.map +1 -1
- package/fesm2022/eui-components-eui-datepicker.mjs +6 -3
- package/fesm2022/eui-components-eui-datepicker.mjs.map +1 -1
- package/fesm2022/eui-components-eui-fieldset.mjs +2 -2
- package/fesm2022/eui-components-eui-fieldset.mjs.map +1 -1
- package/fesm2022/eui-components-eui-growl.mjs +2 -2
- package/fesm2022/eui-components-eui-growl.mjs.map +1 -1
- package/fesm2022/eui-components-eui-icon-button.mjs +2 -2
- package/fesm2022/eui-components-eui-icon-button.mjs.map +1 -1
- package/fesm2022/eui-components-eui-icon.mjs +2 -2
- package/fesm2022/eui-components-eui-icon.mjs.map +1 -1
- package/fesm2022/eui-components-eui-menu.mjs +3 -4
- package/fesm2022/eui-components-eui-menu.mjs.map +1 -1
- package/fesm2022/eui-components-eui-overlay.mjs +10 -8
- package/fesm2022/eui-components-eui-overlay.mjs.map +1 -1
- package/fesm2022/eui-components-eui-page.mjs +41 -19
- package/fesm2022/eui-components-eui-page.mjs.map +1 -1
- package/fesm2022/eui-components-eui-popover.mjs +9 -8
- package/fesm2022/eui-components-eui-popover.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timepicker.mjs +6 -3
- package/fesm2022/eui-components-eui-timepicker.mjs.map +1 -1
- package/fesm2022/eui-components-externals-eui-editor.mjs +4 -4
- package/fesm2022/eui-components-externals-eui-editor.mjs.map +1 -1
- package/fesm2022/eui-components-layout.mjs +4 -4
- package/fesm2022/eui-components-layout.mjs.map +1 -1
- package/package.json +3 -4
@@ -8,10 +8,11 @@ import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "@angular/cdk/overlay";
|
9
9
|
import * as i2 from "@eui/components/shared";
|
10
10
|
import * as i3 from "@angular/common";
|
11
|
-
import * as i4 from "@eui/components/eui-
|
12
|
-
import * as i5 from "@
|
13
|
-
import * as i6 from "@angular/cdk/
|
14
|
-
import * as i7 from "
|
11
|
+
import * as i4 from "@eui/components/eui-button";
|
12
|
+
import * as i5 from "@eui/components/eui-icon";
|
13
|
+
import * as i6 from "@angular/cdk/a11y";
|
14
|
+
import * as i7 from "@angular/cdk/observers";
|
15
|
+
import * as i8 from "./directives/eui-popover-arrow-position.directive";
|
15
16
|
export class EuiPopoverComponent {
|
16
17
|
constructor(overlay, viewContainerRef, scrollDispatcher, baseStatesDirective) {
|
17
18
|
this.overlay = overlay;
|
@@ -172,7 +173,7 @@ export class EuiPopoverComponent {
|
|
172
173
|
}));
|
173
174
|
}
|
174
175
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiPopoverComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i1.ScrollDispatcher }, { token: i2.BaseStatesDirective }], target: i0.ɵɵFactoryTarget.Component }); }
|
175
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: EuiPopoverComponent, selector: "eui-popover", inputs: { title: "title", position: "position", size: "size", type: "type", width: "width", hasBackDrop: ["hasBackDrop", "hasBackDrop", booleanAttribute], hasCloseButton: ["hasCloseButton", "hasCloseButton", booleanAttribute], isDismissable: ["isDismissable", "isDismissable", booleanAttribute] }, outputs: { outsideClick: "outsideClick", popoverOpen: "popoverOpen", popoverClose: "popoverClose" }, viewQueries: [{ propertyName: "templatePortalContent", first: true, predicate: ["templatePortalContent"], descendants: true }], usesOnChanges: true, hostDirectives: [{ directive: i2.BaseStatesDirective, inputs: ["euiSizeS", "euiSizeS", "euiSizeM", "euiSizeM", "euiSizeL", "euiSizeL", "euiSizeXL", "euiSizeXL", "euiSize2XL", "euiSize2XL", "euiSizeVariant", "euiSizeVariant"] }], ngImport: i0, template: "<ng-template #templatePortalContent>\n @if (cdkTrapFocusAutoCapture) {\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: true }\"></ng-container>\n }\n @if (!cdkTrapFocusAutoCapture) {\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: false }\"></ng-container>\n }\n</ng-template>\n\n<ng-template #template let-autoCapture>\n <div class=\"eui-popover__container\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"autoCapture\" (keydown)=\"onKeyDown($event)\">\n <div class=\"eui-popover__arrow\" [euiPopoverArrowPosition]=\"position$\">\n <div class=\"eui-popover__arrow-inner\"></div>\n </div>\n @if (title) {\n <div class=\"eui-popover__header\">\n <div class=\"eui-popover__header-title\">{{ title }}</div>\n @if (hasCloseButton) {\n <
|
176
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: EuiPopoverComponent, selector: "eui-popover", inputs: { title: "title", position: "position", size: "size", type: "type", width: "width", hasBackDrop: ["hasBackDrop", "hasBackDrop", booleanAttribute], hasCloseButton: ["hasCloseButton", "hasCloseButton", booleanAttribute], isDismissable: ["isDismissable", "isDismissable", booleanAttribute] }, outputs: { outsideClick: "outsideClick", popoverOpen: "popoverOpen", popoverClose: "popoverClose" }, viewQueries: [{ propertyName: "templatePortalContent", first: true, predicate: ["templatePortalContent"], descendants: true }], usesOnChanges: true, hostDirectives: [{ directive: i2.BaseStatesDirective, inputs: ["euiSizeS", "euiSizeS", "euiSizeM", "euiSizeM", "euiSizeL", "euiSizeL", "euiSizeXL", "euiSizeXL", "euiSize2XL", "euiSize2XL", "euiSizeVariant", "euiSizeVariant"] }], ngImport: i0, template: "<ng-template #templatePortalContent>\n @if (cdkTrapFocusAutoCapture) {\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: true }\"></ng-container>\n }\n @if (!cdkTrapFocusAutoCapture) {\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: false }\"></ng-container>\n }\n</ng-template>\n\n<ng-template #template let-autoCapture>\n <div class=\"eui-popover__container\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"autoCapture\" (keydown)=\"onKeyDown($event)\">\n <div class=\"eui-popover__arrow\" [euiPopoverArrowPosition]=\"position$\">\n <div class=\"eui-popover__arrow-inner\"></div>\n </div>\n @if (title) {\n <div class=\"eui-popover__header\">\n <div class=\"eui-popover__header-title\">{{ title }}</div>\n @if (hasCloseButton) {\n <button\n class=\"eui-popover__header-close\"\n (click)=\"closePopover()\"\n euiButton\n euiSizeS\n euiIconButton\n euiRounded\n euiBasicButton\n aria-label=\"Dialog close icon\">\n <eui-icon-svg icon=\"close:outline\"></eui-icon-svg>\n </button>\n }\n </div>\n }\n <div (cdkObserveContent)=\"onContentChange()\" class=\"eui-popover__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: [".eui-popover-position .eui-popover__arrow{border-color:inherit;border-style:solid;border-width:8px;display:none;height:0;position:absolute;width:0}.eui-popover-position .eui-popover__arrow-inner{border-color:var(--eui-c-white);border-style:solid;border-width:7px;content:\" \";display:block;height:0;position:absolute;width:0}.eui-popover-position--top .eui-popover__arrow,.eui-popover-position--bottom .eui-popover__arrow,.eui-popover-position--left .eui-popover__arrow,.eui-popover-position--right .eui-popover__arrow{display:block}.eui-popover-position--top .eui-popover__arrow,.eui-popover-position--bottom .eui-popover__arrow{border-left-color:transparent;border-right-color:transparent;left:50%;transform:translate(-8px)}.eui-popover-position--top .eui-popover__arrow-inner,.eui-popover-position--bottom .eui-popover__arrow-inner{border-left-color:transparent;border-right-color:transparent;margin-left:-7px}.eui-popover-position--top .eui-popover__arrow{border-bottom-width:0;bottom:-7px}.eui-popover-position--top .eui-popover__arrow-inner{border-bottom-width:0;bottom:2px}.eui-popover-position--bottom .eui-popover__arrow{border-top-width:0;top:-7px}.eui-popover-position--bottom .eui-popover__arrow-inner{border-top-width:0;top:1px}.eui-popover-position--left .eui-popover__arrow,.eui-popover-position--right .eui-popover__arrow{border-bottom-color:transparent;border-top-color:transparent;top:50%;transform:translateY(-8px)}.eui-popover-position--left .eui-popover__arrow-inner,.eui-popover-position--right .eui-popover__arrow-inner{border-bottom-color:transparent;border-top-color:transparent;top:-7px}.eui-popover-position--left .eui-popover__arrow{border-right-width:0;right:-7px}.eui-popover-position--left .eui-popover__arrow-inner{border-right-width:0;right:2px}.eui-popover-position--right .eui-popover__arrow{border-left-width:0;left:-7px}.eui-popover-position--right .eui-popover__arrow-inner{border-left-width:0;border-right-color:var(--eui-c-white);left:2px}.eui-popover{background-color:var(--eui-c-white);border:var(--eui-bw-xs) solid var(--eui-c-neutral-lightest);border-radius:var(--eui-br-m);box-shadow:var(--eui-sh-2);max-width:25rem;width:25rem}.eui-popover__container{width:100%}.eui-popover__header{align-items:center;border-bottom:1px solid var(--eui-c-neutral-lightest);display:flex;justify-content:space-between;padding:var(--eui-s-xs)}.eui-popover__header-title{font:var(--eui-f-m-bold)}.eui-popover__content{padding:var(--eui-s-xs)}.eui-popover--has-custom-width{width:100%!important}.eui-popover--size-s{max-width:12rem;width:12rem}.eui-popover--size-m{max-width:25rem;width:25rem}.eui-popover--size-l{max-width:35rem;width:35rem}.eui-popover--size-xl{max-width:50rem;width:50rem}.eui-popover--size-2xl{max-width:75rem;width:75rem}.eui-popover--size-auto{max-width:none;width:auto}.eui-popover--flat .eui-popover__header{border-bottom:none;padding-bottom:0}.eui-popover--colored-header{background:none;border:var(--eui-bw-none);border-color:var(--eui-c-neutral)}.eui-popover--colored-header .eui-popover__header{background-color:var(--eui-c-neutral);border:var(--eui-bw-none);color:var(--eui-c-white);border-top-left-radius:var(--eui-br-m);border-top-right-radius:var(--eui-br-m)}.eui-popover--colored-header .eui-popover__header+.eui-popover__content{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.eui-popover--colored-header .eui-popover__header-title{color:var(--eui-c-white)}.eui-popover--colored-header .eui-popover__header-close .eui-popover__header-close-icon>svg{fill:var(--eui-c-white)}.eui-popover--colored-header .eui-popover__header-close:hover .eui-popover__header-close-icon>svg,.eui-popover--colored-header .eui-popover__header-close:focus .eui-popover__header-close-icon>svg,.eui-popover--colored-header .eui-popover__header-close:active .eui-popover__header-close-icon>svg{fill:var(--eui-c-primary)}.eui-popover--colored-header .eui-popover__content{background-color:var(--eui-c-white);border-color:inherit;border-radius:var(--eui-br-m);border-style:solid;border-width:2px}.eui-popover--colored-header.eui-popover--left .eui-popover__arrow-inner{right:3px}.eui-popover--colored-header.eui-popover--right .eui-popover__arrow-inner{left:3px}.eui-popover--colored-header.eui-popover--top .eui-popover__arrow-inner{bottom:3px}.eui-popover--colored-header.eui-popover--bottom .eui-popover__arrow-inner,.eui-popover--colored-header .eui-popover__arrow-inner{border:var(--eui-bw-none)}.eui-popover--colored-solid{background-color:var(--eui-c-neutral);border-color:var(--eui-c-neutral);border-style:none}.eui-popover--colored-solid .eui-popover__header{border-bottom-color:var(--eui-c-neutral-bg-light)}.eui-popover--colored-solid .eui-popover__header-title,.eui-popover--colored-solid .eui-popover__content{color:var(--eui-c-white)}.eui-popover--colored-solid .eui-popover__header-close .eui-popover__header-close-icon>svg{fill:var(--eui-c-white)}.eui-popover--colored-solid .eui-popover__header-close:hover .eui-popover__header-close-icon>svg,.eui-popover--colored-solid .eui-popover__header-close:focus .eui-popover__header-close-icon>svg,.eui-popover--colored-solid .eui-popover__header-close:active .eui-popover__header-close-icon>svg{fill:var(--eui-c-info)}.eui-popover--colored-solid .eui-popover__arrow-inner{border:var(--eui-bw-none)}\n"], dependencies: [{ kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "euiIconButton", "euiLineWrap", "isChecked", "euiDisabled"], outputs: ["buttonClick"] }, { kind: "component", type: i5.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "directive", type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i7.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }, { kind: "directive", type: i8.EuiPopoverArrowPositionDirective, selector: "[euiPopoverArrowPosition]", inputs: ["euiPopoverArrowPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
176
177
|
}
|
177
178
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiPopoverComponent, decorators: [{
|
178
179
|
type: Component,
|
@@ -188,7 +189,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
188
189
|
'euiSizeVariant',
|
189
190
|
],
|
190
191
|
},
|
191
|
-
], template: "<ng-template #templatePortalContent>\n @if (cdkTrapFocusAutoCapture) {\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: true }\"></ng-container>\n }\n @if (!cdkTrapFocusAutoCapture) {\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: false }\"></ng-container>\n }\n</ng-template>\n\n<ng-template #template let-autoCapture>\n <div class=\"eui-popover__container\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"autoCapture\" (keydown)=\"onKeyDown($event)\">\n <div class=\"eui-popover__arrow\" [euiPopoverArrowPosition]=\"position$\">\n <div class=\"eui-popover__arrow-inner\"></div>\n </div>\n @if (title) {\n <div class=\"eui-popover__header\">\n <div class=\"eui-popover__header-title\">{{ title }}</div>\n @if (hasCloseButton) {\n <
|
192
|
+
], template: "<ng-template #templatePortalContent>\n @if (cdkTrapFocusAutoCapture) {\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: true }\"></ng-container>\n }\n @if (!cdkTrapFocusAutoCapture) {\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: false }\"></ng-container>\n }\n</ng-template>\n\n<ng-template #template let-autoCapture>\n <div class=\"eui-popover__container\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"autoCapture\" (keydown)=\"onKeyDown($event)\">\n <div class=\"eui-popover__arrow\" [euiPopoverArrowPosition]=\"position$\">\n <div class=\"eui-popover__arrow-inner\"></div>\n </div>\n @if (title) {\n <div class=\"eui-popover__header\">\n <div class=\"eui-popover__header-title\">{{ title }}</div>\n @if (hasCloseButton) {\n <button\n class=\"eui-popover__header-close\"\n (click)=\"closePopover()\"\n euiButton\n euiSizeS\n euiIconButton\n euiRounded\n euiBasicButton\n aria-label=\"Dialog close icon\">\n <eui-icon-svg icon=\"close:outline\"></eui-icon-svg>\n </button>\n }\n </div>\n }\n <div (cdkObserveContent)=\"onContentChange()\" class=\"eui-popover__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: [".eui-popover-position .eui-popover__arrow{border-color:inherit;border-style:solid;border-width:8px;display:none;height:0;position:absolute;width:0}.eui-popover-position .eui-popover__arrow-inner{border-color:var(--eui-c-white);border-style:solid;border-width:7px;content:\" \";display:block;height:0;position:absolute;width:0}.eui-popover-position--top .eui-popover__arrow,.eui-popover-position--bottom .eui-popover__arrow,.eui-popover-position--left .eui-popover__arrow,.eui-popover-position--right .eui-popover__arrow{display:block}.eui-popover-position--top .eui-popover__arrow,.eui-popover-position--bottom .eui-popover__arrow{border-left-color:transparent;border-right-color:transparent;left:50%;transform:translate(-8px)}.eui-popover-position--top .eui-popover__arrow-inner,.eui-popover-position--bottom .eui-popover__arrow-inner{border-left-color:transparent;border-right-color:transparent;margin-left:-7px}.eui-popover-position--top .eui-popover__arrow{border-bottom-width:0;bottom:-7px}.eui-popover-position--top .eui-popover__arrow-inner{border-bottom-width:0;bottom:2px}.eui-popover-position--bottom .eui-popover__arrow{border-top-width:0;top:-7px}.eui-popover-position--bottom .eui-popover__arrow-inner{border-top-width:0;top:1px}.eui-popover-position--left .eui-popover__arrow,.eui-popover-position--right .eui-popover__arrow{border-bottom-color:transparent;border-top-color:transparent;top:50%;transform:translateY(-8px)}.eui-popover-position--left .eui-popover__arrow-inner,.eui-popover-position--right .eui-popover__arrow-inner{border-bottom-color:transparent;border-top-color:transparent;top:-7px}.eui-popover-position--left .eui-popover__arrow{border-right-width:0;right:-7px}.eui-popover-position--left .eui-popover__arrow-inner{border-right-width:0;right:2px}.eui-popover-position--right .eui-popover__arrow{border-left-width:0;left:-7px}.eui-popover-position--right .eui-popover__arrow-inner{border-left-width:0;border-right-color:var(--eui-c-white);left:2px}.eui-popover{background-color:var(--eui-c-white);border:var(--eui-bw-xs) solid var(--eui-c-neutral-lightest);border-radius:var(--eui-br-m);box-shadow:var(--eui-sh-2);max-width:25rem;width:25rem}.eui-popover__container{width:100%}.eui-popover__header{align-items:center;border-bottom:1px solid var(--eui-c-neutral-lightest);display:flex;justify-content:space-between;padding:var(--eui-s-xs)}.eui-popover__header-title{font:var(--eui-f-m-bold)}.eui-popover__content{padding:var(--eui-s-xs)}.eui-popover--has-custom-width{width:100%!important}.eui-popover--size-s{max-width:12rem;width:12rem}.eui-popover--size-m{max-width:25rem;width:25rem}.eui-popover--size-l{max-width:35rem;width:35rem}.eui-popover--size-xl{max-width:50rem;width:50rem}.eui-popover--size-2xl{max-width:75rem;width:75rem}.eui-popover--size-auto{max-width:none;width:auto}.eui-popover--flat .eui-popover__header{border-bottom:none;padding-bottom:0}.eui-popover--colored-header{background:none;border:var(--eui-bw-none);border-color:var(--eui-c-neutral)}.eui-popover--colored-header .eui-popover__header{background-color:var(--eui-c-neutral);border:var(--eui-bw-none);color:var(--eui-c-white);border-top-left-radius:var(--eui-br-m);border-top-right-radius:var(--eui-br-m)}.eui-popover--colored-header .eui-popover__header+.eui-popover__content{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.eui-popover--colored-header .eui-popover__header-title{color:var(--eui-c-white)}.eui-popover--colored-header .eui-popover__header-close .eui-popover__header-close-icon>svg{fill:var(--eui-c-white)}.eui-popover--colored-header .eui-popover__header-close:hover .eui-popover__header-close-icon>svg,.eui-popover--colored-header .eui-popover__header-close:focus .eui-popover__header-close-icon>svg,.eui-popover--colored-header .eui-popover__header-close:active .eui-popover__header-close-icon>svg{fill:var(--eui-c-primary)}.eui-popover--colored-header .eui-popover__content{background-color:var(--eui-c-white);border-color:inherit;border-radius:var(--eui-br-m);border-style:solid;border-width:2px}.eui-popover--colored-header.eui-popover--left .eui-popover__arrow-inner{right:3px}.eui-popover--colored-header.eui-popover--right .eui-popover__arrow-inner{left:3px}.eui-popover--colored-header.eui-popover--top .eui-popover__arrow-inner{bottom:3px}.eui-popover--colored-header.eui-popover--bottom .eui-popover__arrow-inner,.eui-popover--colored-header .eui-popover__arrow-inner{border:var(--eui-bw-none)}.eui-popover--colored-solid{background-color:var(--eui-c-neutral);border-color:var(--eui-c-neutral);border-style:none}.eui-popover--colored-solid .eui-popover__header{border-bottom-color:var(--eui-c-neutral-bg-light)}.eui-popover--colored-solid .eui-popover__header-title,.eui-popover--colored-solid .eui-popover__content{color:var(--eui-c-white)}.eui-popover--colored-solid .eui-popover__header-close .eui-popover__header-close-icon>svg{fill:var(--eui-c-white)}.eui-popover--colored-solid .eui-popover__header-close:hover .eui-popover__header-close-icon>svg,.eui-popover--colored-solid .eui-popover__header-close:focus .eui-popover__header-close-icon>svg,.eui-popover--colored-solid .eui-popover__header-close:active .eui-popover__header-close-icon>svg{fill:var(--eui-c-info)}.eui-popover--colored-solid .eui-popover__arrow-inner{border:var(--eui-bw-none)}\n"] }]
|
192
193
|
}], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i1.ScrollDispatcher }, { type: i2.BaseStatesDirective }], propDecorators: { title: [{
|
193
194
|
type: Input
|
194
195
|
}], position: [{
|
@@ -218,4 +219,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
218
219
|
type: ViewChild,
|
219
220
|
args: ['templatePortalContent']
|
220
221
|
}] } });
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXBvcG92ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXBvcG92ZXIvZXVpLXBvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXBvcG92ZXIvZXVpLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxTQUFTLEVBTVQsTUFBTSxFQUNOLFlBQVksRUFJWixnQkFBZ0IsR0FDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVXJELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU3RCxPQUFPLEVBQXNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7O0FBc0JoSCxNQUFNLE9BQU8sbUJBQW1CO0lBNkI1QixZQUFvQixPQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLG1CQUF3QztRQUh4QyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBOUJuRCxhQUFRLEdBQXVCLFFBQVEsQ0FBQztRQUN4QyxTQUFJLEdBQTZFLFNBQVMsQ0FBQztRQUMzRixTQUFJLEdBQTRELFNBQVMsQ0FBQztRQUMxRSxVQUFLLEdBQVcsSUFBSSxDQUFDO1FBQ1UsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFbkQsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFckMsNEJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBTzlCLGFBQVEsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNwRCxZQUFPLEdBQTZCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLGlDQUE0QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbEQsc0JBQWlCLEdBQTZCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFekUsNEJBQXVCLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7SUFNL0QsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFnQjtRQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFTSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxNQUFrQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7WUFDcEMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7Z0JBQ2xILE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFnQyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztvQkFDdEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN4QixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRXBELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFeEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDbEMsZ0JBQWdCO2dCQUNoQixjQUFjO2dCQUNkLG1CQUFtQixFQUFFLElBQUk7Z0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUMvRSxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1lBQ3pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVwQyxJQUFJLENBQUMsVUFBVTtpQkFDVixvQkFBb0IsRUFBRTtpQkFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRVAsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLEtBQW9CO1FBQ2pDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNMLENBQUM7SUFFTyxTQUFTLENBQUMsTUFBbUIsRUFBRSxnQkFBNkI7UUFDaEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sc0JBQXNCLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRXBGLE9BQU8sQ0FDSCxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLHNCQUFzQixDQUFDO1lBQ2pELENBQUMsT0FBTyxHQUFHLGlCQUFpQixHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsaUJBQWlCLEdBQUcsc0JBQXNCLENBQUMsQ0FDNUYsQ0FBQztJQUNOLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTzthQUNkLFFBQVEsRUFBRTthQUNWLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFpRCxDQUFDO2FBQzNFLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDckMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO2FBQzdCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUM5QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxFQUN0RCxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQ2hCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsTUFBaUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7OEdBak1RLG1CQUFtQjtrR0FBbkIsbUJBQW1CLG1LQU1SLGdCQUFnQix3REFDaEIsZ0JBQWdCLHFEQUNoQixnQkFBZ0IsNGZDL0R4Qyx1NUNBZ0NBOzsyRkR1QmEsbUJBQW1CO2tCQXBCL0IsU0FBUzsrQkFDSSxhQUFhLG1CQUdOLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksa0JBQ3JCO3dCQUNaOzRCQUNJLFNBQVMsRUFBRSxtQkFBbUI7NEJBQzlCLE1BQU0sRUFBRTtnQ0FDSixVQUFVO2dDQUNWLFVBQVU7Z0NBQ1YsVUFBVTtnQ0FDVixXQUFXO2dDQUNYLFlBQVk7Z0NBQ1osZ0JBQWdCOzZCQUNuQjt5QkFDSjtxQkFDSjs0S0FHUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDa0MsV0FBVztzQkFBbEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxjQUFjO3NCQUFyRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGFBQWE7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRTVCLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUs2QixxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5wdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBib29sZWFuQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICAgIE92ZXJsYXksXG4gICAgT3ZlcmxheVJlZixcbiAgICBDb25uZWN0aW9uUG9zaXRpb25QYWlyLFxuICAgIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbixcbiAgICBTY3JvbGxEaXNwYXRjaGVyLFxuICAgIENka1Njcm9sbGFibGUsXG4gICAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEJhc2VTdGF0ZXNEaXJlY3RpdmUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvc2hhcmVkJztcblxuaW1wb3J0IHsgRXVpUG9wb3ZlclBvc2l0aW9uLCBCT1RUT00sIExFRlQsIFJJR0hULCBUT1AsIGdldFBvc2l0aW9uIH0gZnJvbSAnLi9tb2RlbHMvZXVpLXBvcG92ZXItcG9zaXRpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2V1aS1wb3BvdmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBCYXNlU3RhdGVzRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2V1aVNpemVTJyxcbiAgICAgICAgICAgICAgICAnZXVpU2l6ZU0nLFxuICAgICAgICAgICAgICAgICdldWlTaXplTCcsXG4gICAgICAgICAgICAgICAgJ2V1aVNpemVYTCcsXG4gICAgICAgICAgICAgICAgJ2V1aVNpemUyWEwnLFxuICAgICAgICAgICAgICAgICdldWlTaXplVmFyaWFudCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aVBvcG92ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBvc2l0aW9uOiBFdWlQb3BvdmVyUG9zaXRpb24gPSAnYm90dG9tJztcbiAgICBASW5wdXQoKSBzaXplOiAnZGVmYXVsdCcgfCAnc21hbGwnIHwgJ2xhcmdlJyB8ICdhdXRvJyB8ICdzJyB8ICdtJyB8ICdsJyB8ICd4bCcgfCBzdHJpbmcgPSAnZGVmYXVsdCc7XG4gICAgQElucHV0KCkgdHlwZTogJ2RlZmF1bHQnIHwgJ2ZsYXQnIHwgJ2NvbG9yZWQtaGVhZGVyJyB8ICdjb2xvcmVkLXNvbGlkJyA9ICdkZWZhdWx0JztcbiAgICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gbnVsbDtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzQmFja0Ryb3AgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzQ2xvc2VCdXR0b24gPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0Rpc21pc3NhYmxlID0gdHJ1ZTtcblxuICAgIEBPdXRwdXQoKSBvdXRzaWRlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHBvcG92ZXJPcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwb3BvdmVyQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwdWJsaWMgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUgPSB0cnVlO1xuICAgIHB1YmxpYyBwb3NpdGlvbiQ6IE9ic2VydmFibGU8W0V1aVBvcG92ZXJQb3NpdGlvbiwgRE9NUmVjdF0+O1xuXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVQb3J0YWxDb250ZW50JykgdGVtcGxhdGVQb3J0YWxDb250ZW50OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIHByaXZhdGUgdGVtcGxhdGVQb3J0YWw6IFRlbXBsYXRlUG9ydGFsO1xuICAgIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIGlzT3BlbiQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIG9yaWdpbjogRWxlbWVudFJlZjtcbiAgICBwcml2YXRlIHByZWZlcnJlZFBvc2l0b25zOiBDb25uZWN0aW9uUG9zaXRpb25QYWlyW10gPSBbQk9UVE9NLCBUT1AsIExFRlQsIFJJR0hUXTtcbiAgICBwcml2YXRlIHBvc2l0aW9uU3RyYXRlZ3k6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcbiAgICBwcml2YXRlIHBvc2l0aW9uU3RyYXRlZ3lVcGRhdGUkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFzZVN0YXRlc0RpcmVjdGl2ZTogQmFzZVN0YXRlc0RpcmVjdGl2ZSl7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoYzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIHRoaXMucHJlZmVycmVkUG9zaXRvbnMgPSBbVE9QLCBCT1RUT00sIExFRlQsIFJJR0hUXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZFBvc2l0b25zID0gW1JJR0hULCBMRUZULCBUT1AsIEJPVFRPTV07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZFBvc2l0b25zID0gW0xFRlQsIFJJR0hULCBUT1AsIEJPVFRPTV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZFBvc2l0b25zID0gW0JPVFRPTSwgVE9QLCBMRUZULCBSSUdIVF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvblN0cmVhbSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRlbXBsYXRlUG9ydGFsQ29udGVudCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCB2ZXJzaW9uIG9mIGV1aSBpbiBmYXZvciBvZiBpc09wZW4gKi9cbiAgICBnZXQgaXNQb3BvdmVyT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBldWktcG9wb3ZlciBpcyBvcGVuLlxuICAgICAqXG4gICAgICogQHVzYWdlTm90ZXNcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGV1aS1wb3BvdmVyICNwb3BvdmVyPlxuICAgICAqICAgICBcXEBpZiAocG9wb3Zlci5pc09wZW4pIHtcbiAgICAgKiAgICAgICAgICA8bXktY29tcG9uZW50PjwvbXktY29tcG9uZW50PlxuICAgICAqICAgICB9XG4gICAgICogPC9ldWktcG9wb3Zlcj5cbiAgICAgKiBgYGBcbiAgICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gd2l0aCB2YWx1ZSBgdHJ1ZWAgd2hlbiBvcGVuLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09wZW4kLnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNvbnRlbnRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9zaXRpb25TdHJhdGVneSA9IHRoaXMuZ2V0UG9zaXRpb25TdHJhdGVneSgpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uU3RyYXRlZ3lVcGRhdGUkLm5leHQoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5wb3NpdGlvblN0cmF0ZWd5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuIGEgcG9wb3ZlclxuICAgICAqXG4gICAgICogQHBhcmFtIG9yaWdpbiBPcmlnaW4gb2YgdGhlIHBvcG92ZXIgcG9zaXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlblBvcG92ZXIob3JpZ2luOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1BvcG92ZXJPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyYXBGb2N1c0F1dG9DYXB0dXJlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbiA9IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5hbmNlc3RvclNjcm9sbGVkKG9yaWdpbikuc3Vic2NyaWJlKChldmVudDogQ2RrU2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVQYXJlbnQgPSBldmVudCA/IGV2ZW50LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50IDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1Zpc2libGUob3JpZ2luIGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQsIHNjcm9sbGFibGVQYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMub3JpZ2luID0gb3JpZ2luO1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuZ2V0UG9zaXRpb25TdHJhdGVneSgpO1xuXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxTdHJhdGVneSA9IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oeyBzY3JvbGxUaHJvdHRsZTogMTAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiB0aGlzLmJhc2VTdGF0ZXNEaXJlY3RpdmUuZ2V0Q3NzQ2xhc3NlcygnZXVpLXBvcG92ZXInKS5zcGxpdCgnICcpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHRoaXMudGVtcGxhdGVQb3J0YWwpO1xuXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uU3RyYXRlZ3kgPSBwb3NpdGlvblN0cmF0ZWd5O1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvblN0cmF0ZWd5VXBkYXRlJC5uZXh0KCk7XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZlxuICAgICAgICAgICAgICAgIC5vdXRzaWRlUG9pbnRlckV2ZW50cygpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rpc21pc3NhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGVDbGljay5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuaXNPcGVuJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyT3Blbi5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSBhIHBvcG92ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc09wZW4kLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLnBvcG92ZXJDbG9zZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhY3RzIG9uIHRoZSBFc2Mga2V5ZG93biBldmVudCB0byBjbG9zZSB0aGUgcG9wdXAuIENhbiBiZSB1c2VkIGFzIGFsdGVybmF0aXZlIHRvIHRoZSBjbG9zZSBpY29uIGJ1dHRvbixcbiAgICAgKiBvciBhcyB0aGUgbWFpbiB3YXkgdG8gY2xvc2UgdGhlIHBvcHVwIHdoZW4gaGFzQ2xvc2VCdXR0b24gaXMgZmFsc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBUaGUga2V5IGV2ZW50IHByZXNzZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Zpc2libGUob3JpZ2luOiBIVE1MRWxlbWVudCwgc2Nyb2xsYWJsZVBhcmVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luWSA9IG9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55O1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlUGFyZW50WSA9IE1hdGguYWJzKHNjcm9sbGFibGVQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueSk7XG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVQYXJlbnRIZWlnaHQgPSBzY3JvbGxhYmxlUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAtIDUwO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAob3JpZ2luWSA+IDAgJiYgb3JpZ2luWSA8IHNjcm9sbGFibGVQYXJlbnRIZWlnaHQpIHx8XG4gICAgICAgICAgICAob3JpZ2luWSAtIHNjcm9sbGFibGVQYXJlbnRZID4gMCAmJiBvcmlnaW5ZIDwgc2Nyb2xsYWJsZVBhcmVudFkgKyBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zaXRpb25TdHJhdGVneSgpOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5XG4gICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5vcmlnaW4gYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5wcmVmZXJyZWRQb3NpdG9ucylcbiAgICAgICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhMb2NrZWRQb3NpdGlvbih0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFBvc2l0aW9uU3RyZWFtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBvc2l0aW9uJCA9IHRoaXMucG9zaXRpb25TdHJhdGVneVVwZGF0ZSQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnBvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VzKSxcbiAgICAgICAgICAgIG1hcChnZXRQb3NpdGlvbiksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgbWFwKChwb3NpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLm9yaWdpbi5uYXRpdmVFbGVtZW50ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmlnaW4ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm9yaWdpbiBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3Bvc2l0aW9uLCByZWN0XTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVQb3J0YWxDb250ZW50PlxuICAgIEBpZiAoY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogdHJ1ZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBpZiAoIWNka1RyYXBGb2N1c0F1dG9DYXB0dXJlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlIGxldC1hdXRvQ2FwdHVyZT5cbiAgICA8ZGl2IGNsYXNzPVwiZXVpLXBvcG92ZXJfX2NvbnRhaW5lclwiIGNka1RyYXBGb2N1cyBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwiYXV0b0NhcHR1cmVcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXBvcG92ZXJfX2Fycm93XCIgW2V1aVBvcG92ZXJBcnJvd1Bvc2l0aW9uXT1cInBvc2l0aW9uJFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1wb3BvdmVyX19hcnJvdy1pbm5lclwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmICh0aXRsZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1wb3BvdmVyX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXBvcG92ZXJfX2hlYWRlci10aXRsZVwiPnt7IHRpdGxlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgQGlmIChoYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tYnV0dG9uIGljb249XCJjbG9zZTpvdXRsaW5lXCIgY2xhc3M9XCJldWktcG9wb3Zlcl9faGVhZGVyLWNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChidXR0b25DbGljayk9XCJjbG9zZVBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNOb1BhZGRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cIm5ldXRyYWwtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiUG9wb3ZlciBjbG9zZSBpY29uXCIvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgKGNka09ic2VydmVDb250ZW50KT1cIm9uQ29udGVudENoYW5nZSgpXCIgY2xhc3M9XCJldWktcG9wb3Zlcl9fY29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXBvcG92ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXBvcG92ZXIvZXVpLXBvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXBvcG92ZXIvZXVpLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxTQUFTLEVBTVQsTUFBTSxFQUNOLFlBQVksRUFJWixnQkFBZ0IsR0FDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVXJELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU3RCxPQUFPLEVBQXNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7OztBQXNCaEgsTUFBTSxPQUFPLG1CQUFtQjtJQTZCNUIsWUFBb0IsT0FBZ0IsRUFDaEIsZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxtQkFBd0M7UUFIeEMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTlCbkQsYUFBUSxHQUF1QixRQUFRLENBQUM7UUFDeEMsU0FBSSxHQUE2RSxTQUFTLENBQUM7UUFDM0YsU0FB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Q0FBQztnQkFDbEQsSUFBSSxDQUFDLE1BQWlDLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNwRSxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOzhHQWpNUSxtQkFBbUI7a0dBQW5CLG1CQUFtQixtS0FNUixnQkFBZ0Isd0RBQ2hCLGdCQUFnQixxREFDaEIsZ0JBQWdCLDRmQy9EeEMsK2lEQXFDQTs7MkZEa0JhLG1CQUFtQjtrQkFwQi9CLFNBQVM7K0JBQ0ksYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGtCQUNyQjt3QkFDWjs0QkFDSSxTQUFTLEVBQUUsbUJBQW1COzRCQUM5QixNQUFNLEVBQUU7Z0NBQ0osVUFBVTtnQ0FDVixVQUFVO2dDQUNWLFVBQVU7Z0NBQ1YsV0FBVztnQ0FDWCxZQUFZO2dDQUNaLGdCQUFnQjs2QkFDbkI7eUJBQ0o7cUJBQ0o7NEtBR1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ2tDLFdBQVc7c0JBQWxELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsY0FBYztzQkFBckQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxhQUFhO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUU1QixZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFLNkIscUJBQXFCO3NCQUF4RCxTQUFTO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgICBPdmVybGF5LFxuICAgIE92ZXJsYXlSZWYsXG4gICAgQ29ubmVjdGlvblBvc2l0aW9uUGFpcixcbiAgICBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4sXG4gICAgU2Nyb2xsRGlzcGF0Y2hlcixcbiAgICBDZGtTY3JvbGxhYmxlLFxuICAgIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBCYXNlU3RhdGVzRGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL3NoYXJlZCc7XG5cbmltcG9ydCB7IEV1aVBvcG92ZXJQb3NpdGlvbiwgQk9UVE9NLCBMRUZULCBSSUdIVCwgVE9QLCBnZXRQb3NpdGlvbiB9IGZyb20gJy4vbW9kZWxzL2V1aS1wb3BvdmVyLXBvc2l0aW9uLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktcG9wb3ZlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS1wb3BvdmVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogQmFzZVN0YXRlc0RpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogW1xuICAgICAgICAgICAgICAgICdldWlTaXplUycsXG4gICAgICAgICAgICAgICAgJ2V1aVNpemVNJyxcbiAgICAgICAgICAgICAgICAnZXVpU2l6ZUwnLFxuICAgICAgICAgICAgICAgICdldWlTaXplWEwnLFxuICAgICAgICAgICAgICAgICdldWlTaXplMlhMJyxcbiAgICAgICAgICAgICAgICAnZXVpU2l6ZVZhcmlhbnQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlQb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwb3NpdGlvbjogRXVpUG9wb3ZlclBvc2l0aW9uID0gJ2JvdHRvbSc7XG4gICAgQElucHV0KCkgc2l6ZTogJ2RlZmF1bHQnIHwgJ3NtYWxsJyB8ICdsYXJnZScgfCAnYXV0bycgfCAncycgfCAnbScgfCAnbCcgfCAneGwnIHwgc3RyaW5nID0gJ2RlZmF1bHQnO1xuICAgIEBJbnB1dCgpIHR5cGU6ICdkZWZhdWx0JyB8ICdmbGF0JyB8ICdjb2xvcmVkLWhlYWRlcicgfCAnY29sb3JlZC1zb2xpZCcgPSAnZGVmYXVsdCc7XG4gICAgQElucHV0KCkgd2lkdGg6IHN0cmluZyA9IG51bGw7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0JhY2tEcm9wID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0Nsb3NlQnV0dG9uID0gdHJ1ZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNEaXNtaXNzYWJsZSA9IHRydWU7XG5cbiAgICBAT3V0cHV0KCkgb3V0c2lkZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwb3BvdmVyT3BlbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcG9wb3ZlckNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlID0gdHJ1ZTtcbiAgICBwdWJsaWMgcG9zaXRpb24kOiBPYnNlcnZhYmxlPFtFdWlQb3BvdmVyUG9zaXRpb24sIERPTVJlY3RdPjtcblxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUG9ydGFsQ29udGVudCcpIHRlbXBsYXRlUG9ydGFsQ29udGVudDogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgICBwcml2YXRlIHRlbXBsYXRlUG9ydGFsOiBUZW1wbGF0ZVBvcnRhbDtcbiAgICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBpc09wZW4kOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBvcmlnaW46IEVsZW1lbnRSZWY7XG4gICAgcHJpdmF0ZSBwcmVmZXJyZWRQb3NpdG9uczogQ29ubmVjdGlvblBvc2l0aW9uUGFpcltdID0gW0JPVFRPTSwgVE9QLCBMRUZULCBSSUdIVF07XG4gICAgcHJpdmF0ZSBwb3NpdGlvblN0cmF0ZWd5OiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k7XG4gICAgcHJpdmF0ZSBwb3NpdGlvblN0cmF0ZWd5VXBkYXRlJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlcjogU2Nyb2xsRGlzcGF0Y2hlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJhc2VTdGF0ZXNEaXJlY3RpdmU6IEJhc2VTdGF0ZXNEaXJlY3RpdmUpe1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB0aGlzLnByZWZlcnJlZFBvc2l0b25zID0gW1RPUCwgQk9UVE9NLCBMRUZULCBSSUdIVF07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRQb3NpdG9ucyA9IFtSSUdIVCwgTEVGVCwgVE9QLCBCT1RUT01dO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRQb3NpdG9ucyA9IFtMRUZULCBSSUdIVCwgVE9QLCBCT1RUT01dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRQb3NpdG9ucyA9IFtCT1RUT00sIFRPUCwgTEVGVCwgUklHSFRdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb25TdHJlYW0oKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVQb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZVBvcnRhbENvbnRlbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBkZXByZWNhdGVkIFRoaXMgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgdmVyc2lvbiBvZiBldWkgaW4gZmF2b3Igb2YgaXNPcGVuICovXG4gICAgZ2V0IGlzUG9wb3Zlck9wZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT3BlbiQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgZXVpLXBvcG92ZXIgaXMgb3Blbi5cbiAgICAgKlxuICAgICAqIEB1c2FnZU5vdGVzXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxldWktcG9wb3ZlciAjcG9wb3Zlcj5cbiAgICAgKiAgICAgXFxAaWYgKHBvcG92ZXIuaXNPcGVuKSB7XG4gICAgICogICAgICAgICAgPG15LWNvbXBvbmVudD48L215LWNvbXBvbmVudD5cbiAgICAgKiAgICAgfVxuICAgICAqIDwvZXVpLXBvcG92ZXI+XG4gICAgICogYGBgXG4gICAgICogQHJldHVybnMgQSBib29sZWFuIHdpdGggdmFsdWUgYHRydWVgIHdoZW4gb3Blbiwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuJC52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db250ZW50Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLmdldFBvc2l0aW9uU3RyYXRlZ3koKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvblN0cmF0ZWd5VXBkYXRlJC5uZXh0KCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMucG9zaXRpb25TdHJhdGVneSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiBhIHBvcG92ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcmlnaW4gT3JpZ2luIG9mIHRoZSBwb3BvdmVyIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHVibGljIG9wZW5Qb3BvdmVyKG9yaWdpbjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNQb3BvdmVyT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzY3JpcHRpb24gPSB0aGlzLnNjcm9sbERpc3BhdGNoZXIuYW5jZXN0b3JTY3JvbGxlZChvcmlnaW4pLnN1YnNjcmliZSgoZXZlbnQ6IENka1Njcm9sbGFibGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlUGFyZW50ID0gZXZlbnQgPyBldmVudC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKG9yaWdpbiBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50LCBzY3JvbGxhYmxlUGFyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLm9yaWdpbiA9IG9yaWdpbjtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLmdldFBvc2l0aW9uU3RyYXRlZ3koKTtcblxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHsgc2Nyb2xsVGhyb3R0bGU6IDEwIH0pO1xuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICAgICAgcGFuZWxDbGFzczogdGhpcy5iYXNlU3RhdGVzRGlyZWN0aXZlLmdldENzc0NsYXNzZXMoJ2V1aS1wb3BvdmVyJykuc3BsaXQoJyAnKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCh0aGlzLnRlbXBsYXRlUG9ydGFsKTtcblxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvblN0cmF0ZWd5ID0gcG9zaXRpb25TdHJhdGVneTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25TdHJhdGVneVVwZGF0ZSQubmV4dCgpO1xuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWZcbiAgICAgICAgICAgICAgICAub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEaXNtaXNzYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlQ2xpY2suZW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmlzT3BlbiQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck9wZW4uZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgYSBwb3BvdmVyXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNPcGVuJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ2xvc2UuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWN0cyBvbiB0aGUgRXNjIGtleWRvd24gZXZlbnQgdG8gY2xvc2UgdGhlIHBvcHVwLiBDYW4gYmUgdXNlZCBhcyBhbHRlcm5hdGl2ZSB0byB0aGUgY2xvc2UgaWNvbiBidXR0b24sXG4gICAgICogb3IgYXMgdGhlIG1haW4gd2F5IHRvIGNsb3NlIHRoZSBwb3B1cCB3aGVuIGhhc0Nsb3NlQnV0dG9uIGlzIGZhbHNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGtleSBldmVudCBwcmVzc2VkXG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNWaXNpYmxlKG9yaWdpbjogSFRNTEVsZW1lbnQsIHNjcm9sbGFibGVQYXJlbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9yaWdpblkgPSBvcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudFkgPSBNYXRoLmFicyhzY3JvbGxhYmxlUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnkpO1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0ID0gc2Nyb2xsYWJsZVBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLSA1MDtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG9yaWdpblkgPiAwICYmIG9yaWdpblkgPCBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0KSB8fFxuICAgICAgICAgICAgKG9yaWdpblkgLSBzY3JvbGxhYmxlUGFyZW50WSA+IDAgJiYgb3JpZ2luWSA8IHNjcm9sbGFibGVQYXJlbnRZICsgc2Nyb2xsYWJsZVBhcmVudEhlaWdodClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBvc2l0aW9uU3RyYXRlZ3koKTogRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMub3JpZ2luIGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbilcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKHRoaXMucHJlZmVycmVkUG9zaXRvbnMpXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24odHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQb3NpdGlvblN0cmVhbSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiQgPSB0aGlzLnBvc2l0aW9uU3RyYXRlZ3lVcGRhdGUkLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5wb3NpdGlvblN0cmF0ZWd5LnBvc2l0aW9uQ2hhbmdlcyksXG4gICAgICAgICAgICBtYXAoZ2V0UG9zaXRpb24pLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIG1hcCgocG9zaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5vcmlnaW4ubmF0aXZlRWxlbWVudCA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOlxuICAgICAgICAgICAgICAgICAgICAodGhpcy5vcmlnaW4gYXMgdW5rbm93biBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtwb3NpdGlvbiwgcmVjdF07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI3RlbXBsYXRlUG9ydGFsQ29udGVudD5cbiAgICBAaWYgKGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHRydWUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAaWYgKCFjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtYXV0b0NhcHR1cmU+XG4gICAgPGRpdiBjbGFzcz1cImV1aS1wb3BvdmVyX19jb250YWluZXJcIiBjZGtUcmFwRm9jdXMgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cImF1dG9DYXB0dXJlXCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1wb3BvdmVyX19hcnJvd1wiIFtldWlQb3BvdmVyQXJyb3dQb3NpdGlvbl09XCJwb3NpdGlvbiRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktcG9wb3Zlcl9fYXJyb3ctaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktcG9wb3Zlcl9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1wb3BvdmVyX19oZWFkZXItdGl0bGVcIj57eyB0aXRsZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzQ2xvc2VCdXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktcG9wb3Zlcl9faGVhZGVyLWNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBldWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgICAgICBldWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRpYWxvZyBjbG9zZSBpY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJjbG9zZTpvdXRsaW5lXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgKGNka09ic2VydmVDb250ZW50KT1cIm9uQ29udGVudENoYW5nZSgpXCIgY2xhc3M9XCJldWktcG9wb3Zlcl9fY29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
@@ -2,7 +2,7 @@ import { Component, Inject, Input, Optional, ViewEncapsulation, Self, booleanAtt
|
|
2
2
|
import { FormControl, Validators } from '@angular/forms';
|
3
3
|
import { Subject } from 'rxjs';
|
4
4
|
import { takeUntil } from 'rxjs/operators';
|
5
|
-
import { DYNAMIC_COMPONENT_CONFIG } from '@eui/core';
|
5
|
+
import { DYNAMIC_COMPONENT_CONFIG, uniqueId } from '@eui/core';
|
6
6
|
import * as i0 from "@angular/core";
|
7
7
|
import * as i1 from "@angular/forms";
|
8
8
|
import * as i2 from "@angular/common";
|
@@ -21,6 +21,7 @@ export class EuiTimepickerComponent {
|
|
21
21
|
this.secondsUpDisabled = false;
|
22
22
|
this.secondsDownDisabled = false;
|
23
23
|
this.e2eAttr = 'eui-timepicker';
|
24
|
+
this.inputId = `eui-timepicker-${uniqueId()}`;
|
24
25
|
this.timeMask = 'Hh:m0';
|
25
26
|
this.placeholder = this.timeMask;
|
26
27
|
this.stepHours = 1;
|
@@ -354,11 +355,11 @@ export class EuiTimepickerComponent {
|
|
354
355
|
this.hasAriaRequiredAttribute = control?.control?.hasValidator(Validators.required);
|
355
356
|
}
|
356
357
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiTimepickerComponent, deps: [{ token: DYNAMIC_COMPONENT_CONFIG, optional: true }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
357
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.0", type: EuiTimepickerComponent, selector: "eui-timepicker", inputs: { e2eAttr: "e2eAttr", timeMask: "timeMask", placeholder: "placeholder", stepHours: "stepHours", stepMinutes: "stepMinutes", stepSeconds: "stepSeconds", isreadOnly: ["isreadOnly", "isreadOnly", booleanAttribute], isOneInputField: ["isOneInputField", "isOneInputField", booleanAttribute], hasSeconds: ["hasSeconds", "hasSeconds", booleanAttribute] }, usesOnChanges: true, ngImport: i0, template: "<div class=\"eui-timepicker\" [class.eui-timepicker--centered]=\"isDatetimepicker\" attr.data-e2e=\"{{ e2eAttr }}\">\n <ng-container *ngIf=\"isOneInputField; else multipleInputs\">\n <input\n [class.eui-timepicker__input--one-field]=\"isDatetimepicker\"\n euiInputText\n mask=\"{{ timeMask }}\"\n [leadZeroDateTime]=\"true\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"oneInputFormControl.value?oneInputFormControl.value:'No time value'\"\n [formControl]=\"oneInputFormControl\"\n (focusout)=\"onFocusOut()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isreadOnly\" />\n </ng-container>\n\n <ng-template #multipleInputs>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-up\">\n <eui-icon-svg\n (click)=\"changeHours(stepHours)\"\n [class.time-control--disabled]=\"hoursUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Hours\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefhours\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"HH\"\n [ngModel]=\"hours\"\n (ngModelChange)=\"updateHours($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Hours\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeHours(stepHours); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeHours(-stepHours); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-down\">\n <eui-icon-svg\n (click)=\"changeHours(-stepHours)\"\n [class.time-control--disabled]=\"hoursDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Hours\">\n </eui-icon-svg>\n </div>\n </div>\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-up\">\n <eui-icon-svg\n (click)=\"changeMinutes(stepMinutes)\"\n [class.time-control--disabled]=\"minutesUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Minutes\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefmins\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"MM\"\n [ngModel]=\"mins\"\n (ngModelChange)=\"updateMinutes($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Minutes\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeMinutes(stepMinutes); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeMinutes(-stepMinutes); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-down\">\n <eui-icon-svg\n (click)=\"changeMinutes(-stepMinutes)\"\n [class.time-control--disabled]=\"minutesDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Minutes\">\n </eui-icon-svg>\n </div>\n </div>\n <ng-container *ngIf=\"hasSeconds\">\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-up\">\n <eui-icon-svg\n (click)=\"changeSeconds(stepSeconds)\"\n [class.time-control--disabled]=\"secondsUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase seconds\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefsecs\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"SS\"\n [ngModel]=\"secs\"\n (ngModelChange)=\"updateSeconds($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Seconds\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeSeconds(stepSeconds); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeSeconds(-stepSeconds); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-down\">\n <eui-icon-svg\n (click)=\"changeSeconds(-stepSeconds)\"\n [class.time-control--disabled]=\"secondsDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease seconds\">\n </eui-icon-svg>\n </div>\n </div>\n </ng-container>\n </ng-template>\n</div>\n", styles: [".eui-timepicker{align-items:center;display:flex}.eui-timepicker--centered{justify-content:center}.eui-timepicker__input-container{width:calc(4 * var(--eui-s-m))}.eui-timepicker__input{text-align:center;width:100%}.eui-timepicker__input--one-field{width:calc(6 * var(--eui-s-m));margin-bottom:var(--eui-s-2xs)}.eui-timepicker__spacer{text-align:center;width:var(--eui-s-m)}.eui-timepicker__chevron{display:flex;justify-content:center;padding:var(--eui-s-xs)}.eui-timepicker__chevron .eui-icon-svg:not(.time-control--disabled):hover{cursor:pointer;color:var(--eui-c-primary)}.eui-timepicker__chevron .eui-icon-svg.time-control--disabled{background-image:none;box-shadow:none;cursor:not-allowed!important;opacity:var(--eui-o-50)}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.EuiInputNumberComponent, selector: "input[euiInputNumber]", inputs: ["min", "max", "leadingZero", "isInvalid", "fractionDigits", "digits", "fillFraction", "roundUp", "noFormat", "value"] }, { kind: "directive", type: i3.EuiInputNumberDirective, selector: "input[euiInputNumber][formControl],input[euiInputNumber][formControlName],input[euiInputNumber][ngModel]" }, { kind: "component", type: i4.EuiInputTextComponent, selector: "input[euiInputText]", inputs: ["isInvalid"] }, { kind: "component", type: i5.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "directive", type: i6.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
358
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.0", type: EuiTimepickerComponent, selector: "eui-timepicker", inputs: { e2eAttr: "e2eAttr", inputId: "inputId", timeMask: "timeMask", placeholder: "placeholder", stepHours: "stepHours", stepMinutes: "stepMinutes", stepSeconds: "stepSeconds", isreadOnly: ["isreadOnly", "isreadOnly", booleanAttribute], isOneInputField: ["isOneInputField", "isOneInputField", booleanAttribute], hasSeconds: ["hasSeconds", "hasSeconds", booleanAttribute] }, usesOnChanges: true, ngImport: i0, template: "<div class=\"eui-timepicker\" [class.eui-timepicker--centered]=\"isDatetimepicker\" attr.data-e2e=\"{{ e2eAttr }}\">\n <ng-container *ngIf=\"isOneInputField; else multipleInputs\">\n <input\n [class.eui-timepicker__input--one-field]=\"isDatetimepicker\"\n euiInputText\n [id]=\"inputId\"\n mask=\"{{ timeMask }}\"\n [leadZeroDateTime]=\"true\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"oneInputFormControl.value?oneInputFormControl.value:'No time value'\"\n [formControl]=\"oneInputFormControl\"\n (focusout)=\"onFocusOut()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isreadOnly\" />\n </ng-container>\n\n <ng-template #multipleInputs>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-up\">\n <eui-icon-svg\n (click)=\"changeHours(stepHours)\"\n [class.time-control--disabled]=\"hoursUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Hours\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefhours\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"HH\"\n [ngModel]=\"hours\"\n (ngModelChange)=\"updateHours($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Hours\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeHours(stepHours); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeHours(-stepHours); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-down\">\n <eui-icon-svg\n (click)=\"changeHours(-stepHours)\"\n [class.time-control--disabled]=\"hoursDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Hours\">\n </eui-icon-svg>\n </div>\n </div>\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-up\">\n <eui-icon-svg\n (click)=\"changeMinutes(stepMinutes)\"\n [class.time-control--disabled]=\"minutesUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Minutes\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefmins\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"MM\"\n [ngModel]=\"mins\"\n (ngModelChange)=\"updateMinutes($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Minutes\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeMinutes(stepMinutes); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeMinutes(-stepMinutes); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-down\">\n <eui-icon-svg\n (click)=\"changeMinutes(-stepMinutes)\"\n [class.time-control--disabled]=\"minutesDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Minutes\">\n </eui-icon-svg>\n </div>\n </div>\n <ng-container *ngIf=\"hasSeconds\">\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-up\">\n <eui-icon-svg\n (click)=\"changeSeconds(stepSeconds)\"\n [class.time-control--disabled]=\"secondsUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase seconds\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefsecs\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"SS\"\n [ngModel]=\"secs\"\n (ngModelChange)=\"updateSeconds($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Seconds\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeSeconds(stepSeconds); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeSeconds(-stepSeconds); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-down\">\n <eui-icon-svg\n (click)=\"changeSeconds(-stepSeconds)\"\n [class.time-control--disabled]=\"secondsDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease seconds\">\n </eui-icon-svg>\n </div>\n </div>\n </ng-container>\n </ng-template>\n</div>\n", styles: [".eui-timepicker{align-items:center;display:flex}.eui-timepicker--centered{justify-content:center}.eui-timepicker__input-container{width:calc(4 * var(--eui-s-m))}.eui-timepicker__input{text-align:center;width:100%}.eui-timepicker__input--one-field{width:calc(6 * var(--eui-s-m));margin-bottom:var(--eui-s-2xs)}.eui-timepicker__spacer{text-align:center;width:var(--eui-s-m)}.eui-timepicker__chevron{display:flex;justify-content:center;padding:var(--eui-s-xs)}.eui-timepicker__chevron .eui-icon-svg:not(.time-control--disabled):hover{cursor:pointer;color:var(--eui-c-primary)}.eui-timepicker__chevron .eui-icon-svg.time-control--disabled{background-image:none;box-shadow:none;cursor:not-allowed!important;opacity:var(--eui-o-50)}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.EuiInputNumberComponent, selector: "input[euiInputNumber]", inputs: ["min", "max", "leadingZero", "isInvalid", "fractionDigits", "digits", "fillFraction", "roundUp", "noFormat", "value"] }, { kind: "directive", type: i3.EuiInputNumberDirective, selector: "input[euiInputNumber][formControl],input[euiInputNumber][formControlName],input[euiInputNumber][ngModel]" }, { kind: "component", type: i4.EuiInputTextComponent, selector: "input[euiInputText]", inputs: ["isInvalid"] }, { kind: "component", type: i5.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "directive", type: i6.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
358
359
|
}
|
359
360
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiTimepickerComponent, decorators: [{
|
360
361
|
type: Component,
|
361
|
-
args: [{ selector: 'eui-timepicker', encapsulation: ViewEncapsulation.None, template: "<div class=\"eui-timepicker\" [class.eui-timepicker--centered]=\"isDatetimepicker\" attr.data-e2e=\"{{ e2eAttr }}\">\n <ng-container *ngIf=\"isOneInputField; else multipleInputs\">\n <input\n [class.eui-timepicker__input--one-field]=\"isDatetimepicker\"\n euiInputText\n mask=\"{{ timeMask }}\"\n [leadZeroDateTime]=\"true\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"oneInputFormControl.value?oneInputFormControl.value:'No time value'\"\n [formControl]=\"oneInputFormControl\"\n (focusout)=\"onFocusOut()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isreadOnly\" />\n </ng-container>\n\n <ng-template #multipleInputs>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-up\">\n <eui-icon-svg\n (click)=\"changeHours(stepHours)\"\n [class.time-control--disabled]=\"hoursUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Hours\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefhours\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"HH\"\n [ngModel]=\"hours\"\n (ngModelChange)=\"updateHours($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Hours\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeHours(stepHours); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeHours(-stepHours); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-down\">\n <eui-icon-svg\n (click)=\"changeHours(-stepHours)\"\n [class.time-control--disabled]=\"hoursDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Hours\">\n </eui-icon-svg>\n </div>\n </div>\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-up\">\n <eui-icon-svg\n (click)=\"changeMinutes(stepMinutes)\"\n [class.time-control--disabled]=\"minutesUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Minutes\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefmins\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"MM\"\n [ngModel]=\"mins\"\n (ngModelChange)=\"updateMinutes($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Minutes\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeMinutes(stepMinutes); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeMinutes(-stepMinutes); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-down\">\n <eui-icon-svg\n (click)=\"changeMinutes(-stepMinutes)\"\n [class.time-control--disabled]=\"minutesDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Minutes\">\n </eui-icon-svg>\n </div>\n </div>\n <ng-container *ngIf=\"hasSeconds\">\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-up\">\n <eui-icon-svg\n (click)=\"changeSeconds(stepSeconds)\"\n [class.time-control--disabled]=\"secondsUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase seconds\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefsecs\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"SS\"\n [ngModel]=\"secs\"\n (ngModelChange)=\"updateSeconds($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Seconds\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeSeconds(stepSeconds); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeSeconds(-stepSeconds); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-down\">\n <eui-icon-svg\n (click)=\"changeSeconds(-stepSeconds)\"\n [class.time-control--disabled]=\"secondsDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease seconds\">\n </eui-icon-svg>\n </div>\n </div>\n </ng-container>\n </ng-template>\n</div>\n", styles: [".eui-timepicker{align-items:center;display:flex}.eui-timepicker--centered{justify-content:center}.eui-timepicker__input-container{width:calc(4 * var(--eui-s-m))}.eui-timepicker__input{text-align:center;width:100%}.eui-timepicker__input--one-field{width:calc(6 * var(--eui-s-m));margin-bottom:var(--eui-s-2xs)}.eui-timepicker__spacer{text-align:center;width:var(--eui-s-m)}.eui-timepicker__chevron{display:flex;justify-content:center;padding:var(--eui-s-xs)}.eui-timepicker__chevron .eui-icon-svg:not(.time-control--disabled):hover{cursor:pointer;color:var(--eui-c-primary)}.eui-timepicker__chevron .eui-icon-svg.time-control--disabled{background-image:none;box-shadow:none;cursor:not-allowed!important;opacity:var(--eui-o-50)}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"] }]
|
362
|
+
args: [{ selector: 'eui-timepicker', encapsulation: ViewEncapsulation.None, template: "<div class=\"eui-timepicker\" [class.eui-timepicker--centered]=\"isDatetimepicker\" attr.data-e2e=\"{{ e2eAttr }}\">\n <ng-container *ngIf=\"isOneInputField; else multipleInputs\">\n <input\n [class.eui-timepicker__input--one-field]=\"isDatetimepicker\"\n euiInputText\n [id]=\"inputId\"\n mask=\"{{ timeMask }}\"\n [leadZeroDateTime]=\"true\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"oneInputFormControl.value?oneInputFormControl.value:'No time value'\"\n [formControl]=\"oneInputFormControl\"\n (focusout)=\"onFocusOut()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isreadOnly\" />\n </ng-container>\n\n <ng-template #multipleInputs>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-up\">\n <eui-icon-svg\n (click)=\"changeHours(stepHours)\"\n [class.time-control--disabled]=\"hoursUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Hours\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefhours\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"HH\"\n [ngModel]=\"hours\"\n (ngModelChange)=\"updateHours($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Hours\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeHours(stepHours); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeHours(-stepHours); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-down\">\n <eui-icon-svg\n (click)=\"changeHours(-stepHours)\"\n [class.time-control--disabled]=\"hoursDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Hours\">\n </eui-icon-svg>\n </div>\n </div>\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-up\">\n <eui-icon-svg\n (click)=\"changeMinutes(stepMinutes)\"\n [class.time-control--disabled]=\"minutesUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Minutes\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefmins\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"MM\"\n [ngModel]=\"mins\"\n (ngModelChange)=\"updateMinutes($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Minutes\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeMinutes(stepMinutes); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeMinutes(-stepMinutes); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-down\">\n <eui-icon-svg\n (click)=\"changeMinutes(-stepMinutes)\"\n [class.time-control--disabled]=\"minutesDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Minutes\">\n </eui-icon-svg>\n </div>\n </div>\n <ng-container *ngIf=\"hasSeconds\">\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-up\">\n <eui-icon-svg\n (click)=\"changeSeconds(stepSeconds)\"\n [class.time-control--disabled]=\"secondsUpDisabled\"\n icon=\"chevron-up:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase seconds\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefsecs\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"SS\"\n [ngModel]=\"secs\"\n (ngModelChange)=\"updateSeconds($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Seconds\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n (keydown.ArrowUp)=\"changeSeconds(stepSeconds); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeSeconds(-stepSeconds); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-down\">\n <eui-icon-svg\n (click)=\"changeSeconds(-stepSeconds)\"\n [class.time-control--disabled]=\"secondsDownDisabled\"\n icon=\"chevron-down:sharp\"\n fillColor=\"neutral-light\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease seconds\">\n </eui-icon-svg>\n </div>\n </div>\n </ng-container>\n </ng-template>\n</div>\n", styles: [".eui-timepicker{align-items:center;display:flex}.eui-timepicker--centered{justify-content:center}.eui-timepicker__input-container{width:calc(4 * var(--eui-s-m))}.eui-timepicker__input{text-align:center;width:100%}.eui-timepicker__input--one-field{width:calc(6 * var(--eui-s-m));margin-bottom:var(--eui-s-2xs)}.eui-timepicker__spacer{text-align:center;width:var(--eui-s-m)}.eui-timepicker__chevron{display:flex;justify-content:center;padding:var(--eui-s-xs)}.eui-timepicker__chevron .eui-icon-svg:not(.time-control--disabled):hover{cursor:pointer;color:var(--eui-c-primary)}.eui-timepicker__chevron .eui-icon-svg.time-control--disabled{background-image:none;box-shadow:none;cursor:not-allowed!important;opacity:var(--eui-o-50)}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"] }]
|
362
363
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
363
364
|
type: Optional
|
364
365
|
}, {
|
@@ -370,6 +371,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
370
371
|
type: Optional
|
371
372
|
}] }], propDecorators: { e2eAttr: [{
|
372
373
|
type: Input
|
374
|
+
}], inputId: [{
|
375
|
+
type: Input
|
373
376
|
}], timeMask: [{
|
374
377
|
type: Input
|
375
378
|
}], placeholder: [{
|
@@ -390,4 +393,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
390
393
|
type: Input,
|
391
394
|
args: [{ transform: booleanAttribute }]
|
392
395
|
}] } });
|
393
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRpbWVwaWNrZXIvZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRpbWVwaWNrZXIvZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsSUFBSSxFQUtKLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1DLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7O0FBVXJELE1BQU0sT0FBTyxzQkFBc0I7SUFzQy9CLFlBQ2tELE1BQStCLEVBQ2pELE9BQWtCO1FBQWxCLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFuQ2xELHdCQUFtQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFLakMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUUxQixZQUFPLEdBQUcsZ0JBQWdCLENBQUM7UUFFM0IsYUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUNsQixnQkFBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFNUIsY0FBUyxHQUFHLENB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IEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgU2VsZixcbiAgICBEb0NoZWNrLFxuICAgIE9uRGVzdHJveSxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBib29sZWFuQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEWU5BTUlDX0NPTVBPTkVOVF9DT05GSUcgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgRXVpRGF0ZVRpbWVQaWNrZXJDb25maWcgfSBmcm9tICcuL21vZGVscy9ldWktZGF0ZS10aW1lLXBpY2tlci5jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgRXVpVGltZVBpY2tlciB9IGZyb20gJy4vbW9kZWxzL2V1aS10aW1lcGlja2VyLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdGltZXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10aW1lcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUaW1lcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25DaGFuZ2VzLCBEb0NoZWNrLCBPbkRlc3Ryb3kge1xuICAgIGhvdXJzOiBudW1iZXI7XG4gICAgbWluczogbnVtYmVyO1xuICAgIHNlY3M6IG51bWJlcjtcbiAgICBpc0RhdGV0aW1lcGlja2VyOiBib29sZWFuO1xuICAgIG9uZUlucHV0Rm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICBvbmVJbnB1dEhvdXJzOiBzdHJpbmc7XG4gICAgb25lSW5wdXRNaW5zOiBzdHJpbmc7XG4gICAgb25lSW5wdXRTZWNzOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgaG91cnNVcERpc2FibGVkID0gZmFsc2U7XG4gICAgcHVibGljIGhvdXJzRG93bkRpc2FibGVkID0gZmFsc2U7XG4gICAgcHVibGljIG1pbnV0ZXNVcERpc2FibGVkID0gZmFsc2U7XG4gICAgcHVibGljIG1pbnV0ZXNEb3duRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgc2Vjb25kc1VwRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgc2Vjb25kc0Rvd25EaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZTJlQXR0ciA9ICdldWktdGltZXBpY2tlcic7XG5cbiAgICBASW5wdXQoKSB0aW1lTWFzayA9ICdIaDptMCdcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IHRoaXMudGltZU1hc2s7XG5cbiAgICBASW5wdXQoKSBzdGVwSG91cnMgPSAxO1xuICAgIEBJbnB1dCgpIHN0ZXBNaW51dGVzID0gMTtcbiAgICBASW5wdXQoKSBzdGVwU2Vjb25kcyA9IDE7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNyZWFkT25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc09uZUlucHV0RmllbGQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzU2Vjb25kcyA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIGhhc0FyaWFSZXF1aXJlZEF0dHJpYnV0ZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHByb3BhZ2F0ZWRWYWx1ZXM6IEV1aVRpbWVQaWNrZXIgPSB7XG4gICAgICAgIGhvdXJzOiBudWxsLFxuICAgICAgICBtaW5zOiBudWxsLFxuICAgICAgICBzZWNzOiB0aGlzLmhhc1NlY29uZHMgPyBudWxsIDogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEWU5BTUlDX0NPTVBPTkVOVF9DT05GSUcpIGNvbmZpZzogRXVpRGF0ZVRpbWVQaWNrZXJDb25maWcsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaG91cnMgPSBjb25maWc/LmhvdXJzIHx8IDA7XG4gICAgICAgIHRoaXMubWlucyA9IGNvbmZpZz8ubWlucyB8fCAwO1xuICAgICAgICB0aGlzLnNlY3MgPSBjb25maWc/LnNlY3MgfHwgMDtcbiAgICAgICAgdGhpcy5pc0RhdGV0aW1lcGlja2VyID0gY29uZmlnPy5pc0RhdGV0aW1lcGlja2VyO1xuICAgICAgICB0aGlzLmhhc1NlY29uZHMgPSBjb25maWc/Lmhhc1NlY29uZHM7XG4gICAgICAgIHRoaXMuaXNPbmVJbnB1dEZpZWxkID0gY29uZmlnPy5pc09uZUlucHV0RmllbGQ7XG4gICAgICAgIHRoaXMuc3RlcEhvdXJzID0gY29uZmlnPyBjb25maWcuc3RlcEhvdXJzOiB0aGlzLnN0ZXBIb3VycztcbiAgICAgICAgdGhpcy5zdGVwTWludXRlcyA9IGNvbmZpZz8gY29uZmlnLnN0ZXBNaW51dGVzOiB0aGlzLnN0ZXBNaW51dGVzO1xuICAgICAgICB0aGlzLnN0ZXBTZWNvbmRzID0gY29uZmlnPyBjb25maWcuc3RlcFNlY29uZHM6IHRoaXMuc3RlcFNlY29uZHM7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gdGhpcy5ob3VycyA9PT0gMCB8fCBudWxsID8gJzAwJyA6IHRoaXMuaG91cnM7XG4gICAgICAgIGNvbnN0IG1pbnMgPSB0aGlzLm1pbnMgPT09IDAgfHwgbnVsbCA/ICcwMCcgOiB0aGlzLm1pbnM7XG4gICAgICAgIGNvbnN0IHNlY3MgPSB0aGlzLnNlY3MgPT09IDAgfHwgbnVsbCA/ICcwMCcgOiB0aGlzLnNlY3M7XG4gICAgICAgIHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyArIGhvdXJzICsgJzonICsgbWlucyArICc6JyArIHNlY3MpO1xuICAgICAgICB0aGlzLmNhbGxiYWNrRm4gPSBjb25maWc/LmNhbGxiYWNrRm4gfHwgdGhpcy5jYWxsYmFja0ZuO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBcbiAgICAgICAgdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gc3BsaXRzIHRoZSBlbnRlcmVkIHRpbWUgaW50byAzIHBhcnRzIGJhc2VkIG9uIHRoZSA6IGFuZCBwcm9wYWdhdGVzIGJhY2sgdGhlIGNvcnJlc3BvbmRpbmcgcGFydHNcbiAgICAgICAgICAgIGlmKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgW3RoaXMub25lSW5wdXRIb3VycywgdGhpcy5vbmVJbnB1dE1pbnMsIHRoaXMub25lSW5wdXRTZWNzXSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXR0ZWRob3VycyA9IHRoaXMub25lSW5wdXRIb3VycyA/IE51bWJlcih0aGlzLm9uZUlucHV0SG91cnMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdHRlZG1pbnMgPSB0aGlzLm9uZUlucHV0TWlucyA/IE51bWJlcih0aGlzLm9uZUlucHV0TWlucykgOiBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkc2VjcyA9IHRoaXMub25lSW5wdXRTZWNzID8gTnVtYmVyKHRoaXMub25lSW5wdXRTZWNzKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2Vjb25kcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Vyczogc3BsaXR0ZWRob3VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM6IHNwbGl0dGVkbWlucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3M6IHNwbGl0dGVkc2VjcyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHNwbGl0dGVkaG91cnMsIHNwbGl0dGVkbWlucywgc3BsaXR0ZWRzZWNzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Vyczogc3BsaXR0ZWRob3VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM6IHNwbGl0dGVkbWlucyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHNwbGl0dGVkaG91cnMsIHNwbGl0dGVkbWlucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzcGxpdHRlZGhvdXJzID09PSBudWxsICYmIHNwbGl0dGVkbWlucyA9PT0gbnVsbCAmJiBzcGxpdHRlZHNlY3MgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5wcm9wYWdhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0QXJpYVJlcXVpcmVkQXR0cmlidXRlKHRoaXMuY29udHJvbCk7XG4gICAgICAgIHRoaXMuY29udHJvbD8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0QXJpYVJlcXVpcmVkQXR0cmlidXRlKHRoaXMuY29udHJvbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOnZvaWQge1xuICAgICAgICBpZih0aGlzLmlzT25lSW5wdXRGaWVsZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2Vjb25kcyAmJiBjaGFuZ2VzLmhhc1NlY29uZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVNYXNrID0gJ0hoOm0wOnMwJztcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gJ0hoOm0wOnMwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnRpbWVNYXNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lTWFzayA9IGNoYW5nZXMudGltZU1hc2suY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBjaGFuZ2VzLnRpbWVNYXNrLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGNoYW5nZXMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gY2hhbmdlcy5wbGFjZWhvbGRlci5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIC8vIG1hcmtzIHRoZSBpbnB1dCBjb250cm9sIGFzIHRvdWNoZWQvaW52YWxpZCBpZiB0aGUgZm9ybSBjb250cm9sIGlzIHRvdWNoZWQvaW52YWxpZFxuICAgICAgICAgICAgdGhpcy5jb250cm9sPy50b3VjaGVkID8gdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKSA6IHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbD8uaW52YWxpZCA/IHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5zZXRFcnJvcnModGhpcy5jb250cm9sLmVycm9ycykgOiB0aGlzLm9uZUlucHV0Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnRzIG9yIGRlY3JlbWVudHMgaG91cnMgYWNjb3JkaW5nIHRvIHRoZSBzdGVwIHBhcmFtIGJlaW5nIHBhc3NlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgbnVtYmVyIHRoYXQgaG91cnMgd2lsbCBpbmNyZWFzZSBvciBkZWNyZWFzZVxuICAgICAqL1xuICAgIGNoYW5nZUhvdXJzKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoKCF0aGlzLmhvdXJzVXBEaXNhYmxlZCAmJiBzdGVwID4wKSB8fCAoIXRoaXMuaG91cnNEb3duRGlzYWJsZWQgJiYgc3RlcCA8MCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IChpc05hTih0aGlzLmhvdXJzKSA/IDAgOiB0aGlzLmhvdXJzKSArIHN0ZXA7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUhvdXJzKHZhbC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnRzIG9yIGRlY3JlbWVudHMgbWludXRlcyBhY2NvcmRpbmcgdG8gdGhlIHN0ZXAgcGFyYW0gYmVpbmcgcGFzc2VkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCBudW1iZXIgdGhhdCBtaW51dGVzIHdpbGwgaW5jcmVhc2Ugb3IgZGVjcmVhc2VcbiAgICAgKi9cbiAgICBjaGFuZ2VNaW51dGVzKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoKCF0aGlzLm1pbnV0ZXNVcERpc2FibGVkICYmIHN0ZXAgPjApIHx8ICghdGhpcy5taW51dGVzRG93bkRpc2FibGVkICYmIHN0ZXAgPDApKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSAoaXNOYU4odGhpcy5taW5zKSA/IDAgOiB0aGlzLm1pbnMpICsgc3RlcDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWludXRlcyh2YWwudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50cyBvciBkZWNyZW1lbnRzIHNlY29uZHMgYWNjb3JkaW5nIHRvIHRoZSBzdGVwIHBhcmFtIGJlaW5nIHBhc3NlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgbnVtYmVyIHRoYXQgc2Vjb25kcyB3aWxsIGluY3JlYXNlIG9yIGRlY3JlYXNlXG4gICAgICovXG4gICAgY2hhbmdlU2Vjb25kcyhzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCghdGhpcy5zZWNvbmRzVXBEaXNhYmxlZCAmJiBzdGVwID4wKSB8fCAoIXRoaXMuc2Vjb25kc0Rvd25EaXNhYmxlZCAmJiBzdGVwIDwwKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gKGlzTmFOKHRoaXMuc2VjcykgPyAwIDogdGhpcy5zZWNzKSArIHN0ZXA7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlY29uZHModmFsLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGlucHV0IGZpZWxkIHdoZW4gaG91cnMgY2hhbmdlIGFuZCBhZGRzIDI0aG91ciB2YWxpZGF0aW9uICsgcHJvcGFnYXRlcyB0aGUgdmFsdWUgYmFjayB0byB0aGUgZm9ybVxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1ZhbCBUaGUgbmV3IHZhbHVlIHRoYXQgaG91cnMgd2lsbCBoYXZlXG4gICAgICovXG4gICAgdXBkYXRlSG91cnMobmV3VmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZW50ZXJlZEhvdXIgPSB0aGlzLnRvSW50ZWdlcihuZXdWYWwpO1xuXG4gICAgICAgIGlmICghaXNOYU4oZW50ZXJlZEhvdXIpKSB7XG4gICAgICAgICAgICB0aGlzLmhvdXJzID0gKGVudGVyZWRIb3VyIDwgMCA/IDI0ICsgZW50ZXJlZEhvdXIgOiBlbnRlcmVkSG91cikgJSAyNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaG91cnMgPSBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrRm4odGhpcy5ob3VycywgdGhpcy5taW5zLCB0aGlzLnNlY3MpO1xuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlZFZhbHVlcyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucHJvcGFnYXRlZFZhbHVlcyxcbiAgICAgICAgICAgIGhvdXJzOiB0aGlzLmhvdXJzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBpbnB1dCBmaWVsZCB3aGVuIG1pbnV0ZXMgY2hhbmdlIGFuZCBhZGRzIDYwbWlucyB2YWxpZGF0aW9uICsgcHJvcGFnYXRlcyB0aGUgdmFsdWUgYmFjayB0byB0aGUgZm9ybVxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1ZhbCBUaGUgbmV3IHZhbHVlIHRoYXQgbWludXRlcyB3aWxsIGhhdmVcbiAgICAgKi9cbiAgICB1cGRhdGVNaW51dGVzKG5ld1ZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVudGVyZWRNaW4gPSB0aGlzLnRvSW50ZWdlcihuZXdWYWwpO1xuXG4gICAgICAgIGlmICghaXNOYU4oZW50ZXJlZE1pbikpIHtcbiAgICAgICAgICAgIHRoaXMubWlucyA9IGVudGVyZWRNaW4gJSA2MCA8IDAgPyA2MCArIChlbnRlcmVkTWluICUgNjApIDogZW50ZXJlZE1pbiAlIDYwO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VIb3VycyhNYXRoLmZsb29yKGVudGVyZWRNaW4gLyA2MCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5taW5zID0gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHRoaXMuaG91cnMsIHRoaXMubWlucywgdGhpcy5zZWNzKTtcblxuICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICBtaW5zOiB0aGlzLm1pbnMsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMucHJvcGFnYXRlZFZhbHVlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGlucHV0IGZpZWxkIHdoZW4gc2Vjb25kcyBjaGFuZ2UgYW5kIGFkZHMgNjBzZWNzIHZhbGlkYXRpb24gKyBwcm9wYWdhdGVzIHRoZSB2YWx1ZSBiYWNrIHRvIHRoZSBmb3JtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3VmFsIFRoZSBuZXcgdmFsdWUgdGhhdCBzZWNvbmRzIHdpbGwgaGF2ZVxuICAgICAqL1xuICAgIHVwZGF0ZVNlY29uZHMobmV3VmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZW50ZXJlZFNlYyA9IHRoaXMudG9JbnRlZ2VyKG5ld1ZhbCk7XG5cbiAgICAgICAgaWYgKCFpc05hTihlbnRlcmVkU2VjKSkge1xuICAgICAgICAgICAgdGhpcy5zZWNzID0gZW50ZXJlZFNlYyAlIDYwIDwgMCA/IDYwICsgKGVudGVyZWRTZWMgJSA2MCkgOiBlbnRlcmVkU2VjICUgNjA7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZU1pbnV0ZXMoTWF0aC5mbG9vcihlbnRlcmVkU2VjIC8gNjApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VjcyA9IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2tGbih0aGlzLmhvdXJzLCB0aGlzLm1pbnMsIHRoaXMuc2Vjcyk7XG5cbiAgICAgICAgdGhpcy5wcm9wYWdhdGVkVmFsdWVzID0ge1xuICAgICAgICAgICAgLi4udGhpcy5wcm9wYWdhdGVkVmFsdWVzLFxuICAgICAgICAgICAgc2VjczogdGhpcy5zZWNzLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMucHJvcGFnYXRlZFZhbHVlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF1dG9maWxscyBtaW5zIGFuZCBzZWNzIHdpdGggMDBzIGlmIHRoZSB1c2VyIHRhYnMgYWZ0ZXIgZW50ZXJpbmcgaG91cnMgYW5kIG1hcmtzIHRoZSBpbnB1dCBhcyB0b3VjaGVkXG4gICAgICovXG4gICAgb25Gb2N1c091dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub25lSW5wdXRIb3VycyAmJiAhdGhpcy5vbmVJbnB1dE1pbnMgJiYgIXRoaXMub25lSW5wdXRTZWNzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMub25lSW5wdXRIb3Vycykge1xuICAgICAgICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uZUlucHV0SG91cnMgPSAnMDAnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICcxJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmVJbnB1dEhvdXJzID0gJzAxJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnMic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25lSW5wdXRIb3VycyA9ICcwMic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnBhdGNoVmFsdWUoYCR7dGhpcy5vbmVJbnB1dEhvdXJzfSA6IDAwIDogMDBgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWVzOiBFdWlUaW1lUGlja2VyKTogdm9pZCB7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgIHRoaXMuaG91cnMgPSBudWxsO1xuICAgICAgICAgICB0aGlzLm1pbnMgPSBudWxsO1xuICAgICAgICAgICB0aGlzLnNlY3MgPSBudWxsO1xuICAgICAgICAgICBpZih0aGlzLmlzT25lSW5wdXRGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpXG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmICh2YWx1ZXMuaG91cnMgPCAwIHx8IHZhbHVlcy5ob3VycyA+IDIzIHx8IHR5cGVvZiB2YWx1ZXMuaG91cnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hvdXJzIG11c3QgYmUgZGVmaW5lZCBhbmQgYmUgYSBudW1iZXIgd2l0aCByYW5nZSAwLTIzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlcy5taW5zIDwgMCB8fCB2YWx1ZXMubWlucyA+IDU5IHx8IHR5cGVvZiB2YWx1ZXMubWlucyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlucyBtdXN0IGJlIGRlZmluZWQgYW5kIGJlIGEgbnVtYmVyIHdpdGggcmFuZ2UgMC01OScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc1NlY29uZHMgJiYgKHZhbHVlcy5zZWNzIDwgMCB8fCB2YWx1ZXMuc2VjcyA+IDU5IHx8IHR5cGVvZiB2YWx1ZXMuc2VjcyAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY3MgbXVzdCBiZSBkZWZpbmVkIGFuZCBiZSBhIG51bWJlciB3aXRoIHJhbmdlIDAtNTknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlSG91cnModmFsdWVzLmhvdXJzLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1pbnV0ZXModmFsdWVzLm1pbnMudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmICh2YWx1ZXMuc2Vjcykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWNvbmRzKHZhbHVlcy5zZWNzLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzT25lSW5wdXRGaWVsZCkge1xuICAgICAgICAgICAgY29uc3QgaG91cnMgPSB0aGlzLnBhZE51bWJlcih2YWx1ZXMuaG91cnMpO1xuICAgICAgICAgICAgY29uc3QgbWlucyA9IHRoaXMucGFkTnVtYmVyKHZhbHVlcy5taW5zKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3MgPSB0aGlzLnBhZE51bWJlcih2YWx1ZXMuc2Vjcyk7XG5cbiAgICAgICAgICAgIHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5wYXRjaFZhbHVlKCcnICsgaG91cnMgKyAnOicgKyBtaW5zICsgJzonICsgc2Vjcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGhvdXIgdXAgaW5jcmVtZW50YWwgd2hlbiBtYXggdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIGhvdXJzVXBEaXNhYmxlKHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG91cnNVcERpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBob3VyIGRvd24gZGVjcmVtZW50YWwgd2hlbiBtaW4gdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIGhvdXJzRG93bkRpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3Vyc0Rvd25EaXNhYmxlZCA9IHN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgbWludXRlcyB1cCBpbmNyZW1lbnRhbCB3aGVuIG1heCB0aW1lIHJhbmdlIGlzIHJlYWNoZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGF0ZSBUaGUgYm9vbGVhbiB2YWx1ZSB0aGF0IGVuYWJsZXMgdGhlIGZlYXR1cmVcbiAgICAgKi9cbiAgICBwdWJsaWMgbWludXRlc1VwRGlzYWJsZShzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm1pbnV0ZXNVcERpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBtaW51dGVzIGRvd24gZGVjcmVtZW50YWwgd2hlbiBtaW4gdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIG1pbnV0ZXNEb3duRGlzYWJsZShzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm1pbnV0ZXNEb3duRGlzYWJsZWQgPSBzdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIHNlY29uZHMgdXAgaW5jcmVtZW50YWwgd2hlbiBtYXggdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIHNlY29uZHNVcERpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWNvbmRzVXBEaXNhYmxlZCA9IHN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgc2Vjb25kcyBkb3duIGRlY3JlbWVudGFsIHdoZW4gbWluIHRpbWUgcmFuZ2UgaXMgcmVhY2hlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBib29sZWFuIHZhbHVlIHRoYXQgZW5hYmxlcyB0aGUgZmVhdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZWNvbmRzRG93bkRpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWNvbmRzRG93bkRpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJpdmF0ZSBjYWxsYmFja0ZuOiAoaG91cnM6IG51bWJlciwgbWluczogbnVtYmVyLCBzZWNzPzogbnVtYmVyKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIHRvSW50ZWdlcih2YWx1ZTogYW55KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGAke3ZhbHVlfWAsIDEwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGxlYWRpbmcgemVybyB0byB0aGUgcHJvdmlkZWQgbnVtYmVyIHdoZW4gaXNPbmVJbnB1dEZpZWxkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGFkZCBsZWFkaW5nIHplcm8gdG9cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcGFkTnVtYmVyKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTmFOKHRoaXMudG9JbnRlZ2VyKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBgMCR7dmFsdWV9YC5zbGljZSgtMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpOiB2b2lkID0+IHsvKiBlbXB0eSAqL307XG5cbiAgICBwcml2YXRlIHByb3BhZ2F0ZVRvdWNoZWQgPSAoKTogdm9pZCA9PiB7LyogZW1wdHkgKi99O1xuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgYGFyaWEtcmVxdWlyZWRgIGF0dHJpYnV0ZSBvbiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlSW5wdXRBcmlhUmVxdWlyZWRBdHRyaWJ1dGUoY29udHJvbDogTmdDb250cm9sKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFzQXJpYVJlcXVpcmVkQXR0cmlidXRlID0gY29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJldWktdGltZXBpY2tlclwiIFtjbGFzcy5ldWktdGltZXBpY2tlci0tY2VudGVyZWRdPVwiaXNEYXRldGltZXBpY2tlclwiIGF0dHIuZGF0YS1lMmU9XCJ7eyBlMmVBdHRyIH19XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT25lSW5wdXRGaWVsZDsgZWxzZSBtdWx0aXBsZUlucHV0c1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtjbGFzcy5ldWktdGltZXBpY2tlcl9faW5wdXQtLW9uZS1maWVsZF09XCJpc0RhdGV0aW1lcGlja2VyXCJcbiAgICAgICAgICAgIGV1aUlucHV0VGV4dFxuICAgICAgICAgICAgbWFzaz1cInt7IHRpbWVNYXNrIH19XCJcbiAgICAgICAgICAgIFtsZWFkWmVyb0RhdGVUaW1lXT1cInRydWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwib25lSW5wdXRGb3JtQ29udHJvbC52YWx1ZT9vbmVJbnB1dEZvcm1Db250cm9sLnZhbHVlOidObyB0aW1lIHZhbHVlJ1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwib25lSW5wdXRGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCJcbiAgICAgICAgICAgIFtkcm9wU3BlY2lhbENoYXJhY3RlcnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzcmVhZE9ubHlcIiAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNtdWx0aXBsZUlucHV0cz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX2hvdXJzLXVwXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlSG91cnMoc3RlcEhvdXJzKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cImhvdXJzVXBEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjaGV2cm9uLXVwOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJbmNyZWFzZSBIb3Vyc1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAjaW5wdXRyZWZob3Vyc1xuICAgICAgICAgICAgICAgIGV1aUlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgW2xlYWRpbmdaZXJvXT1cIjJcIlxuICAgICAgICAgICAgICAgIFtkaWdpdHNdPVwiMlwiXG4gICAgICAgICAgICAgICAgW2ZyYWN0aW9uRGlnaXRzXT1cIjBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2lucHV0XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkhIXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJob3Vyc1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlSG91cnMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzcmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJIb3Vyc1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJoYXNBcmlhUmVxdWlyZWRBdHRyaWJ1dGUgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5BcnJvd1VwKT1cImNoYW5nZUhvdXJzKHN0ZXBIb3Vycyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5BcnJvd0Rvd24pPVwiY2hhbmdlSG91cnMoLXN0ZXBIb3Vycyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgLz5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX2hvdXJzLWRvd25cIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VIb3Vycygtc3RlcEhvdXJzKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cImhvdXJzRG93bkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tZG93bjpzaGFycFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cIm5ldXRyYWwtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVjcmVhc2UgSG91cnNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19zcGFjZXJcIj46PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJldWktdGltZXBpY2tlcl9faW5wdXQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzcmVhZE9ubHlcIiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19jaGV2cm9uIGV1aS10aW1lcGlja2VyX19taW51dGVzLXVwXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlTWludXRlcyhzdGVwTWludXRlcylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGltZS1jb250cm9sLS1kaXNhYmxlZF09XCJtaW51dGVzVXBEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjaGV2cm9uLXVwOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJbmNyZWFzZSBNaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICNpbnB1dHJlZm1pbnNcbiAgICAgICAgICAgICAgICBldWlJbnB1dE51bWJlclxuICAgICAgICAgICAgICAgIFtsZWFkaW5nWmVyb109XCIyXCJcbiAgICAgICAgICAgICAgICBbZGlnaXRzXT1cIjJcIlxuICAgICAgICAgICAgICAgIFtmcmFjdGlvbkRpZ2l0c109XCIwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJNTVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibWluc1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTWludXRlcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNyZWFkT25seVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwiaGFzQXJpYVJlcXVpcmVkQXR0cmlidXRlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uQXJyb3dVcCk9XCJjaGFuZ2VNaW51dGVzKHN0ZXBNaW51dGVzKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLkFycm93RG93bik9XCJjaGFuZ2VNaW51dGVzKC1zdGVwTWludXRlcyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgLz5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX21pbnV0ZXMtZG93blwiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZU1pbnV0ZXMoLXN0ZXBNaW51dGVzKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cIm1pbnV0ZXNEb3duRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiY2hldnJvbi1kb3duOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWNyZWFzZSBNaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNTZWNvbmRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX3NwYWNlclwiPjo8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdGltZXBpY2tlcl9faW5wdXQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc3JlYWRPbmx5XCIgY2xhc3M9XCJldWktdGltZXBpY2tlcl9fY2hldnJvbiBldWktdGltZXBpY2tlcl9fc2Vjb25kcy11cFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlU2Vjb25kcyhzdGVwU2Vjb25kcylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRpbWUtY29udHJvbC0tZGlzYWJsZWRdPVwic2Vjb25kc1VwRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tdXA6c2hhcnBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJbmNyZWFzZSBzZWNvbmRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAjaW5wdXRyZWZzZWNzXG4gICAgICAgICAgICAgICAgICAgIGV1aUlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIFtsZWFkaW5nWmVyb109XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpZ2l0c109XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZyYWN0aW9uRGlnaXRzXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU1NcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWNzXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlU2Vjb25kcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzcmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwiaGFzQXJpYVJlcXVpcmVkQXR0cmlidXRlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLkFycm93VXApPVwiY2hhbmdlU2Vjb25kcyhzdGVwU2Vjb25kcyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uQXJyb3dEb3duKT1cImNoYW5nZVNlY29uZHMoLXN0ZXBTZWNvbmRzKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX3NlY29uZHMtZG93blwiPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlU2Vjb25kcygtc3RlcFNlY29uZHMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cInNlY29uZHNEb3duRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tZG93bjpzaGFycFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJuZXV0cmFsLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRlY3JlYXNlIHNlY29uZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
|
396
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRpbWVwaWNrZXIvZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRpbWVwaWNrZXIvZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsSUFBSSxFQUtKLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1DLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7OztBQVUvRCxNQUFNLE9BQU8sc0JBQXNCO0lBdUMvQixZQUNrRCxNQUErQixFQUNqRCxPQUFrQjtRQUFsQixZQUFPLEdBQVAsT0FBTyxDQUFXO1FBcENsRCx3QkFBbUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBS2pDLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFMUIsWUFBTyxHQUFHLGdCQUFnQixDQUFDO1FBQzNCLFlBQU8sR0FBRyxrQkFBa0IsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUV6QyxhQUFRLEdBQUcsT0FBTyxDQUFBO1FB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RSxNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDOUYsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV6QyxJQUFJLENBQUMs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QUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgU2VsZixcbiAgICBEb0NoZWNrLFxuICAgIE9uRGVzdHJveSxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBib29sZWFuQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEWU5BTUlDX0NPTVBPTkVOVF9DT05GSUcsIHVuaXF1ZUlkIH0gZnJvbSAnQGV1aS9jb3JlJztcbmltcG9ydCB7IEV1aURhdGVUaW1lUGlja2VyQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvZXVpLWRhdGUtdGltZS1waWNrZXIuY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IEV1aVRpbWVQaWNrZXIgfSBmcm9tICcuL21vZGVscy9ldWktdGltZXBpY2tlci5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpLXRpbWVwaWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldWktdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpVGltZXBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uQ2hhbmdlcywgRG9DaGVjaywgT25EZXN0cm95IHtcbiAgICBob3VyczogbnVtYmVyO1xuICAgIG1pbnM6IG51bWJlcjtcbiAgICBzZWNzOiBudW1iZXI7XG4gICAgaXNEYXRldGltZXBpY2tlcjogYm9vbGVhbjtcbiAgICBvbmVJbnB1dEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgb25lSW5wdXRIb3Vyczogc3RyaW5nO1xuICAgIG9uZUlucHV0TWluczogc3RyaW5nO1xuICAgIG9uZUlucHV0U2Vjczogc3RyaW5nO1xuXG4gICAgcHVibGljIGhvdXJzVXBEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBob3Vyc0Rvd25EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBtaW51dGVzVXBEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBtaW51dGVzRG93bkRpc2FibGVkID0gZmFsc2U7XG4gICAgcHVibGljIHNlY29uZHNVcERpc2FibGVkID0gZmFsc2U7XG4gICAgcHVibGljIHNlY29uZHNEb3duRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGUyZUF0dHIgPSAnZXVpLXRpbWVwaWNrZXInO1xuICAgIEBJbnB1dCgpIGlucHV0SWQgPSBgZXVpLXRpbWVwaWNrZXItJHt1bmlxdWVJZCgpfWA7XG5cbiAgICBASW5wdXQoKSB0aW1lTWFzayA9ICdIaDptMCdcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IHRoaXMudGltZU1hc2s7XG5cbiAgICBASW5wdXQoKSBzdGVwSG91cnMgPSAxO1xuICAgIEBJbnB1dCgpIHN0ZXBNaW51dGVzID0gMTtcbiAgICBASW5wdXQoKSBzdGVwU2Vjb25kcyA9IDE7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNyZWFkT25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc09uZUlucHV0RmllbGQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzU2Vjb25kcyA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIGhhc0FyaWFSZXF1aXJlZEF0dHJpYnV0ZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHByb3BhZ2F0ZWRWYWx1ZXM6IEV1aVRpbWVQaWNrZXIgPSB7XG4gICAgICAgIGhvdXJzOiBudWxsLFxuICAgICAgICBtaW5zOiBudWxsLFxuICAgICAgICBzZWNzOiB0aGlzLmhhc1NlY29uZHMgPyBudWxsIDogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEWU5BTUlDX0NPTVBPTkVOVF9DT05GSUcpIGNvbmZpZzogRXVpRGF0ZVRpbWVQaWNrZXJDb25maWcsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaG91cnMgPSBjb25maWc/LmhvdXJzIHx8IDA7XG4gICAgICAgIHRoaXMubWlucyA9IGNvbmZpZz8ubWlucyB8fCAwO1xuICAgICAgICB0aGlzLnNlY3MgPSBjb25maWc/LnNlY3MgfHwgMDtcbiAgICAgICAgdGhpcy5pc0RhdGV0aW1lcGlja2VyID0gY29uZmlnPy5pc0RhdGV0aW1lcGlja2VyO1xuICAgICAgICB0aGlzLmhhc1NlY29uZHMgPSBjb25maWc/Lmhhc1NlY29uZHM7XG4gICAgICAgIHRoaXMuaXNPbmVJbnB1dEZpZWxkID0gY29uZmlnPy5pc09uZUlucHV0RmllbGQ7XG4gICAgICAgIHRoaXMuc3RlcEhvdXJzID0gY29uZmlnPyBjb25maWcuc3RlcEhvdXJzOiB0aGlzLnN0ZXBIb3VycztcbiAgICAgICAgdGhpcy5zdGVwTWludXRlcyA9IGNvbmZpZz8gY29uZmlnLnN0ZXBNaW51dGVzOiB0aGlzLnN0ZXBNaW51dGVzO1xuICAgICAgICB0aGlzLnN0ZXBTZWNvbmRzID0gY29uZmlnPyBjb25maWcuc3RlcFNlY29uZHM6IHRoaXMuc3RlcFNlY29uZHM7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gdGhpcy5ob3VycyA9PT0gMCB8fCBudWxsID8gJzAwJyA6IHRoaXMuaG91cnM7XG4gICAgICAgIGNvbnN0IG1pbnMgPSB0aGlzLm1pbnMgPT09IDAgfHwgbnVsbCA/ICcwMCcgOiB0aGlzLm1pbnM7XG4gICAgICAgIGNvbnN0IHNlY3MgPSB0aGlzLnNlY3MgPT09IDAgfHwgbnVsbCA/ICcwMCcgOiB0aGlzLnNlY3M7XG4gICAgICAgIHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyArIGhvdXJzICsgJzonICsgbWlucyArICc6JyArIHNlY3MpO1xuICAgICAgICB0aGlzLmNhbGxiYWNrRm4gPSBjb25maWc/LmNhbGxiYWNrRm4gfHwgdGhpcy5jYWxsYmFja0ZuO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBcbiAgICAgICAgdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gc3BsaXRzIHRoZSBlbnRlcmVkIHRpbWUgaW50byAzIHBhcnRzIGJhc2VkIG9uIHRoZSA6IGFuZCBwcm9wYWdhdGVzIGJhY2sgdGhlIGNvcnJlc3BvbmRpbmcgcGFydHNcbiAgICAgICAgICAgIGlmKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgW3RoaXMub25lSW5wdXRIb3VycywgdGhpcy5vbmVJbnB1dE1pbnMsIHRoaXMub25lSW5wdXRTZWNzXSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXR0ZWRob3VycyA9IHRoaXMub25lSW5wdXRIb3VycyA/IE51bWJlcih0aGlzLm9uZUlucHV0SG91cnMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdHRlZG1pbnMgPSB0aGlzLm9uZUlucHV0TWlucyA/IE51bWJlcih0aGlzLm9uZUlucHV0TWlucykgOiBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkc2VjcyA9IHRoaXMub25lSW5wdXRTZWNzID8gTnVtYmVyKHRoaXMub25lSW5wdXRTZWNzKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2Vjb25kcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Vyczogc3BsaXR0ZWRob3VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM6IHNwbGl0dGVkbWlucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3M6IHNwbGl0dGVkc2VjcyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHNwbGl0dGVkaG91cnMsIHNwbGl0dGVkbWlucywgc3BsaXR0ZWRzZWNzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Vyczogc3BsaXR0ZWRob3VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM6IHNwbGl0dGVkbWlucyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHNwbGl0dGVkaG91cnMsIHNwbGl0dGVkbWlucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzcGxpdHRlZGhvdXJzID09PSBudWxsICYmIHNwbGl0dGVkbWlucyA9PT0gbnVsbCAmJiBzcGxpdHRlZHNlY3MgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5wcm9wYWdhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0QXJpYVJlcXVpcmVkQXR0cmlidXRlKHRoaXMuY29udHJvbCk7XG4gICAgICAgIHRoaXMuY29udHJvbD8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0QXJpYVJlcXVpcmVkQXR0cmlidXRlKHRoaXMuY29udHJvbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOnZvaWQge1xuICAgICAgICBpZih0aGlzLmlzT25lSW5wdXRGaWVsZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2Vjb25kcyAmJiBjaGFuZ2VzLmhhc1NlY29uZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVNYXNrID0gJ0hoOm0wOnMwJztcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gJ0hoOm0wOnMwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnRpbWVNYXNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lTWFzayA9IGNoYW5nZXMudGltZU1hc2suY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBjaGFuZ2VzLnRpbWVNYXNrLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGNoYW5nZXMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gY2hhbmdlcy5wbGFjZWhvbGRlci5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIC8vIG1hcmtzIHRoZSBpbnB1dCBjb250cm9sIGFzIHRvdWNoZWQvaW52YWxpZCBpZiB0aGUgZm9ybSBjb250cm9sIGlzIHRvdWNoZWQvaW52YWxpZFxuICAgICAgICAgICAgdGhpcy5jb250cm9sPy50b3VjaGVkID8gdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKSA6IHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbD8uaW52YWxpZCA/IHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5zZXRFcnJvcnModGhpcy5jb250cm9sLmVycm9ycykgOiB0aGlzLm9uZUlucHV0Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnRzIG9yIGRlY3JlbWVudHMgaG91cnMgYWNjb3JkaW5nIHRvIHRoZSBzdGVwIHBhcmFtIGJlaW5nIHBhc3NlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgbnVtYmVyIHRoYXQgaG91cnMgd2lsbCBpbmNyZWFzZSBvciBkZWNyZWFzZVxuICAgICAqL1xuICAgIGNoYW5nZUhvdXJzKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoKCF0aGlzLmhvdXJzVXBEaXNhYmxlZCAmJiBzdGVwID4wKSB8fCAoIXRoaXMuaG91cnNEb3duRGlzYWJsZWQgJiYgc3RlcCA8MCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IChpc05hTih0aGlzLmhvdXJzKSA/IDAgOiB0aGlzLmhvdXJzKSArIHN0ZXA7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUhvdXJzKHZhbC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnRzIG9yIGRlY3JlbWVudHMgbWludXRlcyBhY2NvcmRpbmcgdG8gdGhlIHN0ZXAgcGFyYW0gYmVpbmcgcGFzc2VkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCBudW1iZXIgdGhhdCBtaW51dGVzIHdpbGwgaW5jcmVhc2Ugb3IgZGVjcmVhc2VcbiAgICAgKi9cbiAgICBjaGFuZ2VNaW51dGVzKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoKCF0aGlzLm1pbnV0ZXNVcERpc2FibGVkICYmIHN0ZXAgPjApIHx8ICghdGhpcy5taW51dGVzRG93bkRpc2FibGVkICYmIHN0ZXAgPDApKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSAoaXNOYU4odGhpcy5taW5zKSA/IDAgOiB0aGlzLm1pbnMpICsgc3RlcDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWludXRlcyh2YWwudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50cyBvciBkZWNyZW1lbnRzIHNlY29uZHMgYWNjb3JkaW5nIHRvIHRoZSBzdGVwIHBhcmFtIGJlaW5nIHBhc3NlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgbnVtYmVyIHRoYXQgc2Vjb25kcyB3aWxsIGluY3JlYXNlIG9yIGRlY3JlYXNlXG4gICAgICovXG4gICAgY2hhbmdlU2Vjb25kcyhzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCghdGhpcy5zZWNvbmRzVXBEaXNhYmxlZCAmJiBzdGVwID4wKSB8fCAoIXRoaXMuc2Vjb25kc0Rvd25EaXNhYmxlZCAmJiBzdGVwIDwwKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gKGlzTmFOKHRoaXMuc2VjcykgPyAwIDogdGhpcy5zZWNzKSArIHN0ZXA7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlY29uZHModmFsLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGlucHV0IGZpZWxkIHdoZW4gaG91cnMgY2hhbmdlIGFuZCBhZGRzIDI0aG91ciB2YWxpZGF0aW9uICsgcHJvcGFnYXRlcyB0aGUgdmFsdWUgYmFjayB0byB0aGUgZm9ybVxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1ZhbCBUaGUgbmV3IHZhbHVlIHRoYXQgaG91cnMgd2lsbCBoYXZlXG4gICAgICovXG4gICAgdXBkYXRlSG91cnMobmV3VmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZW50ZXJlZEhvdXIgPSB0aGlzLnRvSW50ZWdlcihuZXdWYWwpO1xuXG4gICAgICAgIGlmICghaXNOYU4oZW50ZXJlZEhvdXIpKSB7XG4gICAgICAgICAgICB0aGlzLmhvdXJzID0gKGVudGVyZWRIb3VyIDwgMCA/IDI0ICsgZW50ZXJlZEhvdXIgOiBlbnRlcmVkSG91cikgJSAyNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaG91cnMgPSBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrRm4odGhpcy5ob3VycywgdGhpcy5taW5zLCB0aGlzLnNlY3MpO1xuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlZFZhbHVlcyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucHJvcGFnYXRlZFZhbHVlcyxcbiAgICAgICAgICAgIGhvdXJzOiB0aGlzLmhvdXJzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBpbnB1dCBmaWVsZCB3aGVuIG1pbnV0ZXMgY2hhbmdlIGFuZCBhZGRzIDYwbWlucyB2YWxpZGF0aW9uICsgcHJvcGFnYXRlcyB0aGUgdmFsdWUgYmFjayB0byB0aGUgZm9ybVxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1ZhbCBUaGUgbmV3IHZhbHVlIHRoYXQgbWludXRlcyB3aWxsIGhhdmVcbiAgICAgKi9cbiAgICB1cGRhdGVNaW51dGVzKG5ld1ZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVudGVyZWRNaW4gPSB0aGlzLnRvSW50ZWdlcihuZXdWYWwpO1xuXG4gICAgICAgIGlmICghaXNOYU4oZW50ZXJlZE1pbikpIHtcbiAgICAgICAgICAgIHRoaXMubWlucyA9IGVudGVyZWRNaW4gJSA2MCA8IDAgPyA2MCArIChlbnRlcmVkTWluICUgNjApIDogZW50ZXJlZE1pbiAlIDYwO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VIb3VycyhNYXRoLmZsb29yKGVudGVyZWRNaW4gLyA2MCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5taW5zID0gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHRoaXMuaG91cnMsIHRoaXMubWlucywgdGhpcy5zZWNzKTtcblxuICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICBtaW5zOiB0aGlzLm1pbnMsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMucHJvcGFnYXRlZFZhbHVlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGlucHV0IGZpZWxkIHdoZW4gc2Vjb25kcyBjaGFuZ2UgYW5kIGFkZHMgNjBzZWNzIHZhbGlkYXRpb24gKyBwcm9wYWdhdGVzIHRoZSB2YWx1ZSBiYWNrIHRvIHRoZSBmb3JtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3VmFsIFRoZSBuZXcgdmFsdWUgdGhhdCBzZWNvbmRzIHdpbGwgaGF2ZVxuICAgICAqL1xuICAgIHVwZGF0ZVNlY29uZHMobmV3VmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZW50ZXJlZFNlYyA9IHRoaXMudG9JbnRlZ2VyKG5ld1ZhbCk7XG5cbiAgICAgICAgaWYgKCFpc05hTihlbnRlcmVkU2VjKSkge1xuICAgICAgICAgICAgdGhpcy5zZWNzID0gZW50ZXJlZFNlYyAlIDYwIDwgMCA/IDYwICsgKGVudGVyZWRTZWMgJSA2MCkgOiBlbnRlcmVkU2VjICUgNjA7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZU1pbnV0ZXMoTWF0aC5mbG9vcihlbnRlcmVkU2VjIC8gNjApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VjcyA9IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2tGbih0aGlzLmhvdXJzLCB0aGlzLm1pbnMsIHRoaXMuc2Vjcyk7XG5cbiAgICAgICAgdGhpcy5wcm9wYWdhdGVkVmFsdWVzID0ge1xuICAgICAgICAgICAgLi4udGhpcy5wcm9wYWdhdGVkVmFsdWVzLFxuICAgICAgICAgICAgc2VjczogdGhpcy5zZWNzLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMucHJvcGFnYXRlZFZhbHVlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF1dG9maWxscyBtaW5zIGFuZCBzZWNzIHdpdGggMDBzIGlmIHRoZSB1c2VyIHRhYnMgYWZ0ZXIgZW50ZXJpbmcgaG91cnMgYW5kIG1hcmtzIHRoZSBpbnB1dCBhcyB0b3VjaGVkXG4gICAgICovXG4gICAgb25Gb2N1c091dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub25lSW5wdXRIb3VycyAmJiAhdGhpcy5vbmVJbnB1dE1pbnMgJiYgIXRoaXMub25lSW5wdXRTZWNzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMub25lSW5wdXRIb3Vycykge1xuICAgICAgICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uZUlucHV0SG91cnMgPSAnMDAnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICcxJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmVJbnB1dEhvdXJzID0gJzAxJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnMic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25lSW5wdXRIb3VycyA9ICcwMic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnBhdGNoVmFsdWUoYCR7dGhpcy5vbmVJbnB1dEhvdXJzfSA6IDAwIDogMDBgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWVzOiBFdWlUaW1lUGlja2VyKTogdm9pZCB7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgIHRoaXMuaG91cnMgPSBudWxsO1xuICAgICAgICAgICB0aGlzLm1pbnMgPSBudWxsO1xuICAgICAgICAgICB0aGlzLnNlY3MgPSBudWxsO1xuICAgICAgICAgICBpZih0aGlzLmlzT25lSW5wdXRGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpXG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmICh2YWx1ZXMuaG91cnMgPCAwIHx8IHZhbHVlcy5ob3VycyA+IDIzIHx8IHR5cGVvZiB2YWx1ZXMuaG91cnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hvdXJzIG11c3QgYmUgZGVmaW5lZCBhbmQgYmUgYSBudW1iZXIgd2l0aCByYW5nZSAwLTIzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlcy5taW5zIDwgMCB8fCB2YWx1ZXMubWlucyA+IDU5IHx8IHR5cGVvZiB2YWx1ZXMubWlucyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlucyBtdXN0IGJlIGRlZmluZWQgYW5kIGJlIGEgbnVtYmVyIHdpdGggcmFuZ2UgMC01OScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc1NlY29uZHMgJiYgKHZhbHVlcy5zZWNzIDwgMCB8fCB2YWx1ZXMuc2VjcyA+IDU5IHx8IHR5cGVvZiB2YWx1ZXMuc2VjcyAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY3MgbXVzdCBiZSBkZWZpbmVkIGFuZCBiZSBhIG51bWJlciB3aXRoIHJhbmdlIDAtNTknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlSG91cnModmFsdWVzLmhvdXJzLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1pbnV0ZXModmFsdWVzLm1pbnMudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmICh2YWx1ZXMuc2Vjcykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWNvbmRzKHZhbHVlcy5zZWNzLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzT25lSW5wdXRGaWVsZCkge1xuICAgICAgICAgICAgY29uc3QgaG91cnMgPSB0aGlzLnBhZE51bWJlcih2YWx1ZXMuaG91cnMpO1xuICAgICAgICAgICAgY29uc3QgbWlucyA9IHRoaXMucGFkTnVtYmVyKHZhbHVlcy5taW5zKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3MgPSB0aGlzLnBhZE51bWJlcih2YWx1ZXMuc2Vjcyk7XG5cbiAgICAgICAgICAgIHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5wYXRjaFZhbHVlKCcnICsgaG91cnMgKyAnOicgKyBtaW5zICsgJzonICsgc2Vjcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGhvdXIgdXAgaW5jcmVtZW50YWwgd2hlbiBtYXggdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIGhvdXJzVXBEaXNhYmxlKHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG91cnNVcERpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBob3VyIGRvd24gZGVjcmVtZW50YWwgd2hlbiBtaW4gdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIGhvdXJzRG93bkRpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3Vyc0Rvd25EaXNhYmxlZCA9IHN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgbWludXRlcyB1cCBpbmNyZW1lbnRhbCB3aGVuIG1heCB0aW1lIHJhbmdlIGlzIHJlYWNoZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGF0ZSBUaGUgYm9vbGVhbiB2YWx1ZSB0aGF0IGVuYWJsZXMgdGhlIGZlYXR1cmVcbiAgICAgKi9cbiAgICBwdWJsaWMgbWludXRlc1VwRGlzYWJsZShzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm1pbnV0ZXNVcERpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBtaW51dGVzIGRvd24gZGVjcmVtZW50YWwgd2hlbiBtaW4gdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIG1pbnV0ZXNEb3duRGlzYWJsZShzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm1pbnV0ZXNEb3duRGlzYWJsZWQgPSBzdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIHNlY29uZHMgdXAgaW5jcmVtZW50YWwgd2hlbiBtYXggdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIHNlY29uZHNVcERpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWNvbmRzVXBEaXNhYmxlZCA9IHN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgc2Vjb25kcyBkb3duIGRlY3JlbWVudGFsIHdoZW4gbWluIHRpbWUgcmFuZ2UgaXMgcmVhY2hlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBib29sZWFuIHZhbHVlIHRoYXQgZW5hYmxlcyB0aGUgZmVhdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZWNvbmRzRG93bkRpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWNvbmRzRG93bkRpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJpdmF0ZSBjYWxsYmFja0ZuOiAoaG91cnM6IG51bWJlciwgbWluczogbnVtYmVyLCBzZWNzPzogbnVtYmVyKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIHRvSW50ZWdlcih2YWx1ZTogYW55KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGAke3ZhbHVlfWAsIDEwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGxlYWRpbmcgemVybyB0byB0aGUgcHJvdmlkZWQgbnVtYmVyIHdoZW4gaXNPbmVJbnB1dEZpZWxkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGFkZCBsZWFkaW5nIHplcm8gdG9cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcGFkTnVtYmVyKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTmFOKHRoaXMudG9JbnRlZ2VyKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBgMCR7dmFsdWV9YC5zbGljZSgtMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpOiB2b2lkID0+IHsvKiBlbXB0eSAqL307XG5cbiAgICBwcml2YXRlIHByb3BhZ2F0ZVRvdWNoZWQgPSAoKTogdm9pZCA9PiB7LyogZW1wdHkgKi99O1xuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgYGFyaWEtcmVxdWlyZWRgIGF0dHJpYnV0ZSBvbiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlSW5wdXRBcmlhUmVxdWlyZWRBdHRyaWJ1dGUoY29udHJvbDogTmdDb250cm9sKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFzQXJpYVJlcXVpcmVkQXR0cmlidXRlID0gY29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJldWktdGltZXBpY2tlclwiIFtjbGFzcy5ldWktdGltZXBpY2tlci0tY2VudGVyZWRdPVwiaXNEYXRldGltZXBpY2tlclwiIGF0dHIuZGF0YS1lMmU9XCJ7eyBlMmVBdHRyIH19XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT25lSW5wdXRGaWVsZDsgZWxzZSBtdWx0aXBsZUlucHV0c1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtjbGFzcy5ldWktdGltZXBpY2tlcl9faW5wdXQtLW9uZS1maWVsZF09XCJpc0RhdGV0aW1lcGlja2VyXCJcbiAgICAgICAgICAgIGV1aUlucHV0VGV4dFxuICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgbWFzaz1cInt7IHRpbWVNYXNrIH19XCJcbiAgICAgICAgICAgIFtsZWFkWmVyb0RhdGVUaW1lXT1cInRydWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwib25lSW5wdXRGb3JtQ29udHJvbC52YWx1ZT9vbmVJbnB1dEZvcm1Db250cm9sLnZhbHVlOidObyB0aW1lIHZhbHVlJ1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwib25lSW5wdXRGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCJcbiAgICAgICAgICAgIFtkcm9wU3BlY2lhbENoYXJhY3RlcnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzcmVhZE9ubHlcIiAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNtdWx0aXBsZUlucHV0cz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX2hvdXJzLXVwXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlSG91cnMoc3RlcEhvdXJzKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cImhvdXJzVXBEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjaGV2cm9uLXVwOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJbmNyZWFzZSBIb3Vyc1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAjaW5wdXRyZWZob3Vyc1xuICAgICAgICAgICAgICAgIGV1aUlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgW2xlYWRpbmdaZXJvXT1cIjJcIlxuICAgICAgICAgICAgICAgIFtkaWdpdHNdPVwiMlwiXG4gICAgICAgICAgICAgICAgW2ZyYWN0aW9uRGlnaXRzXT1cIjBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2lucHV0XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkhIXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJob3Vyc1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlSG91cnMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzcmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJIb3Vyc1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJoYXNBcmlhUmVxdWlyZWRBdHRyaWJ1dGUgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5BcnJvd1VwKT1cImNoYW5nZUhvdXJzKHN0ZXBIb3Vycyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5BcnJvd0Rvd24pPVwiY2hhbmdlSG91cnMoLXN0ZXBIb3Vycyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgLz5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX2hvdXJzLWRvd25cIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VIb3Vycygtc3RlcEhvdXJzKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cImhvdXJzRG93bkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tZG93bjpzaGFycFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cIm5ldXRyYWwtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVjcmVhc2UgSG91cnNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19zcGFjZXJcIj46PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJldWktdGltZXBpY2tlcl9faW5wdXQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzcmVhZE9ubHlcIiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19jaGV2cm9uIGV1aS10aW1lcGlja2VyX19taW51dGVzLXVwXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlTWludXRlcyhzdGVwTWludXRlcylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGltZS1jb250cm9sLS1kaXNhYmxlZF09XCJtaW51dGVzVXBEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjaGV2cm9uLXVwOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJbmNyZWFzZSBNaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICNpbnB1dHJlZm1pbnNcbiAgICAgICAgICAgICAgICBldWlJbnB1dE51bWJlclxuICAgICAgICAgICAgICAgIFtsZWFkaW5nWmVyb109XCIyXCJcbiAgICAgICAgICAgICAgICBbZGlnaXRzXT1cIjJcIlxuICAgICAgICAgICAgICAgIFtmcmFjdGlvbkRpZ2l0c109XCIwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJNTVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibWluc1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTWludXRlcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNyZWFkT25seVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwiaGFzQXJpYVJlcXVpcmVkQXR0cmlidXRlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uQXJyb3dVcCk9XCJjaGFuZ2VNaW51dGVzKHN0ZXBNaW51dGVzKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLkFycm93RG93bik9XCJjaGFuZ2VNaW51dGVzKC1zdGVwTWludXRlcyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgLz5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX21pbnV0ZXMtZG93blwiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZU1pbnV0ZXMoLXN0ZXBNaW51dGVzKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cIm1pbnV0ZXNEb3duRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiY2hldnJvbi1kb3duOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWNyZWFzZSBNaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNTZWNvbmRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX3NwYWNlclwiPjo8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdGltZXBpY2tlcl9faW5wdXQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc3JlYWRPbmx5XCIgY2xhc3M9XCJldWktdGltZXBpY2tlcl9fY2hldnJvbiBldWktdGltZXBpY2tlcl9fc2Vjb25kcy11cFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlU2Vjb25kcyhzdGVwU2Vjb25kcylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRpbWUtY29udHJvbC0tZGlzYWJsZWRdPVwic2Vjb25kc1VwRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tdXA6c2hhcnBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJbmNyZWFzZSBzZWNvbmRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAjaW5wdXRyZWZzZWNzXG4gICAgICAgICAgICAgICAgICAgIGV1aUlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIFtsZWFkaW5nWmVyb109XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpZ2l0c109XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZyYWN0aW9uRGlnaXRzXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU1NcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWNzXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlU2Vjb25kcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzcmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwiaGFzQXJpYVJlcXVpcmVkQXR0cmlidXRlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLkFycm93VXApPVwiY2hhbmdlU2Vjb25kcyhzdGVwU2Vjb25kcyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uQXJyb3dEb3duKT1cImNoYW5nZVNlY29uZHMoLXN0ZXBTZWNvbmRzKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX3NlY29uZHMtZG93blwiPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlU2Vjb25kcygtc3RlcFNlY29uZHMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cInNlY29uZHNEb3duRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tZG93bjpzaGFycFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJuZXV0cmFsLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRlY3JlYXNlIHNlY29uZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
|