@almatar/smart-booking-dashboard 0.0.2-alpha.2 → 0.0.2-alpha.3

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.
Files changed (50) hide show
  1. package/esm2022/lib/components/almatar-aside/aside.component.mjs +6 -7
  2. package/esm2022/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +2 -2
  3. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.mjs +2 -2
  4. package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.mjs +13 -4
  5. package/esm2022/lib/components/reissue-dialog/reissue-dialog.component.mjs +135 -0
  6. package/esm2022/lib/components/reissue-dialog/reissue-upgrade.store.mjs +305 -0
  7. package/esm2022/lib/components/reissue-dialog/reissue.store.mjs +349 -0
  8. package/esm2022/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.mjs +45 -0
  9. package/esm2022/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.mjs +140 -0
  10. package/esm2022/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.mjs +16 -0
  11. package/esm2022/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.mjs +104 -0
  12. package/esm2022/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.mjs +44 -0
  13. package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.mjs +193 -0
  14. package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.mjs +88 -0
  15. package/esm2022/lib/components/workflow-actions/workflow-actions.component.mjs +5 -3
  16. package/esm2022/lib/config/dashboard.config.mjs +3 -1
  17. package/esm2022/lib/models/reissue.types.mjs +2 -0
  18. package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +9 -3
  19. package/esm2022/lib/services/reissue.service.mjs +142 -0
  20. package/esm2022/lib/services/toast.service.mjs +15 -7
  21. package/esm2022/lib/utils/reissue-format.mjs +64 -0
  22. package/esm2022/lib/utils/reissue-url.builder.mjs +314 -0
  23. package/esm2022/public-api.mjs +3 -1
  24. package/fesm2022/almatar-smart-booking-dashboard.mjs +1919 -25
  25. package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
  26. package/lib/components/action-dialog/action-dialog.component.d.ts +1 -1
  27. package/lib/components/almatar-aside/aside.component.d.ts +1 -2
  28. package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +1 -1
  29. package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.d.ts +6 -0
  30. package/lib/components/reissue-dialog/reissue-dialog.component.d.ts +34 -0
  31. package/lib/components/reissue-dialog/reissue-upgrade.store.d.ts +96 -0
  32. package/lib/components/reissue-dialog/reissue.store.d.ts +124 -0
  33. package/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.d.ts +11 -0
  34. package/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.d.ts +16 -0
  35. package/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.d.ts +8 -0
  36. package/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.d.ts +21 -0
  37. package/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.d.ts +17 -0
  38. package/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.d.ts +28 -0
  39. package/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.d.ts +13 -0
  40. package/lib/components/result-panel/result-panel.component.d.ts +1 -1
  41. package/lib/components/workflow-actions/workflow-actions.component.d.ts +3 -1
  42. package/lib/config/dashboard.config.d.ts +29 -0
  43. package/lib/models/reissue.types.d.ts +147 -0
  44. package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +4 -1
  45. package/lib/services/reissue.service.d.ts +45 -0
  46. package/lib/services/toast.service.d.ts +14 -1
  47. package/lib/utils/reissue-format.d.ts +28 -0
  48. package/lib/utils/reissue-url.builder.d.ts +24 -0
  49. package/package.json +9 -7
  50. package/public-api.d.ts +5 -1
@@ -1,13 +1,14 @@
1
1
  import { Component, EventEmitter, Inject, Input, Optional, Output, } from '@angular/core';
2
2
  import { CommonModule, DOCUMENT } from '@angular/common';
3
- import { SidebarModule } from 'primeng/sidebar';
3
+ import { DialogModule } from 'primeng/dialog';
4
4
  import { environments } from '../../shared/environments/environment';
5
5
  import { brandEnum } from '../../shared/enums/brand-enums.enum';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "../../shared/services/shared.service";
8
8
  import * as i2 from "./aside-back-button.service";
9
9
  import * as i3 from "@angular/common";
10
- import * as i4 from "primeng/sidebar";
10
+ import * as i4 from "primeng/dialog";
11
+ import * as i5 from "primeng/api";
11
12
  export class AsideComponent {
12
13
  get backIconClass() {
13
14
  // Conventional back-arrow direction: points left in LTR, right in RTL.
@@ -83,11 +84,11 @@ export class AsideComponent {
83
84
  this.document.body.style.overflow = '';
84
85
  }
85
86
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsideComponent, deps: [{ token: i1.SharedService }, { token: DOCUMENT }, { token: i2.AsideBackButtonService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
86
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AsideComponent, isStandalone: true, selector: "almatar-aside", inputs: { asideTitle: "asideTitle", showHeader: "showHeader", headerTemplate: "headerTemplate", whiteHeader: "whiteHeader", showAside: "showAside", width: "width", modal: "modal", closable: "closable", transitionOptions: "transitionOptions", closeIconTemplate: "closeIconTemplate", interceptClose: "interceptClose" }, outputs: { onClose: "onClose", closeRequested: "closeRequested" }, ngImport: i0, template: "<!-- `position=\"right\"` is intentional for both directions: PrimeNG's flex\n positioning is writing-direction aware, so under dir=\"rtl\" (Arabic) it\n mirrors to the visual left on its own. Passing \"left\" for Arabic\n double-flips it back to the right. -->\n<p-sidebar\n class=\"almatar_aside\"\n [ngClass]=\"{ 'almatar_aside--white-header': isWhiteHeader }\"\n (onShow)=\"onDialogShow()\"\n [showCloseIcon]=\"closable && !isInAppView\"\n (onHide)=\"onCloseModal()\"\n [visible]=\"showAside\"\n (visibleChange)=\"onVisibleChange($event)\"\n position=\"right\"\n [style]=\"{ width: width || (isWhiteHeader ? '580px' : '490px') }\"\n [transitionOptions]=\"transitionOptions\"\n [modal]=\"modal\"\n>\n @if (showHeader) {\n @if (showBackButton) {\n <!-- Rendered into the header's leading content, alongside (not instead\n of) PrimeNG's own close (X) button \u2014 so both are visible together,\n and the X keeps its normal close behavior untouched. -->\n <ng-template pTemplate=\"header\">\n <!-- One flex group, not two separate header children \u2014 otherwise\n `.p-sidebar-header`'s `justify-content: space-between` spreads the\n arrow and title apart instead of keeping them side by side. -->\n <div class=\"almatar-aside__back-header\">\n <i\n class=\"almatar-aside__back-icon\"\n [class]=\"backIconClass\"\n (click)=\"onBackIconClick($event)\"\n ></i>\n <span class=\"p-sidebar-header-content\">{{ asideTitle }}</span>\n </div>\n </ng-template>\n } @else if (headerTemplate) {\n <ng-template pTemplate=\"header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-template>\n } @else {\n <ng-template pTemplate=\"header\">\n <span class=\"p-sidebar-header-content\">{{ asideTitle }}</span>\n </ng-template>\n }\n }\n\n @if (closeIconTemplate) {\n <!-- Custom close icon template -->\n <ng-template pTemplate=\"closeicon\">\n <ng-container *ngTemplateOutlet=\"closeIconTemplate\"></ng-container>\n </ng-template>\n } @else if (isWhiteHeader) {\n <ng-template pTemplate=\"closeicon\">\n <img src=\"/assets/icons/close-dark.svg\" alt=\"\" width=\"24\" height=\"24\" />\n </ng-template>\n }\n\n <ng-content></ng-content>\n</p-sidebar>\n", styles: [".almatar_aside ::ng-deep .p-sidebar{margin:0!important;height:100svh;max-height:100svh!important;border-radius:0;border:none;transform:unset}@media (max-width: 768px){.almatar_aside ::ng-deep .p-sidebar{width:100vw!important;margin:auto!important}}.almatar_aside ::ng-deep .p-sidebar-content{height:100vh}.almatar_aside ::ng-deep .p-sidebar-mask{background-color:#0000008a}.almatar_aside ::ng-deep .p-sidebar-header{background:var(--almatar-secondary-surface);border:none}.almatar_aside ::ng-deep .p-sidebar-header .p-sidebar-header-content,.almatar_aside ::ng-deep .p-sidebar-header .p-sidebar-close-icon{color:var(--almatar-neutral-icon-secondary-static)}.almatar_aside ::ng-deep .p-sidebar-header .p-sidebar-header-content{color:var(--almatar-secondary-text-on-surface);font-size:calc(21 * var(--almatar-font-size-ratio, 1) * 1px);margin:0;font-weight:var(--almatar-font-weight-regular)}.almatar_aside ::ng-deep .p-sidebar-header .almatar-aside__back-header{display:flex;align-items:center;gap:12px}.almatar_aside ::ng-deep .p-sidebar-header .almatar-aside__back-icon{cursor:pointer;font-size:1.25rem;color:var(--almatar-neutral-icon-secondary-static)}.almatar_aside ::ng-deep .p-sidebar-close-icon{font-size:1.5rem!important}.almatar_aside ::ng-deep .p-sidebar-content{background-color:var(--almatar-neutral-surface-card);padding:0}.almatar_aside--white-header ::ng-deep .p-sidebar-header{background:var(--almatar-neutral-surface-card);border-bottom:1px solid var(--almatar-primary-border-disabled)}.almatar_aside--white-header ::ng-deep .p-sidebar-header .p-sidebar-close-icon{color:var(--almatar-neutral-icon-primary-static)}.almatar_aside--white-header ::ng-deep .p-sidebar-header .p-sidebar-header-content{color:var(--almatar-neutral-text-primary-static);font-weight:var(--almatar-font-weight-regular)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i4.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }] }); }
87
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AsideComponent, isStandalone: true, selector: "almatar-aside", inputs: { asideTitle: "asideTitle", showHeader: "showHeader", headerTemplate: "headerTemplate", whiteHeader: "whiteHeader", showAside: "showAside", width: "width", modal: "modal", closable: "closable", transitionOptions: "transitionOptions", interceptClose: "interceptClose" }, outputs: { onClose: "onClose", closeRequested: "closeRequested" }, ngImport: i0, template: "<!-- A side panel built on `p-dialog` with `position=\"right\"`, not on PrimeNG's sidebar/drawer: `p-dialog` exists with\n the same name in PrimeNG 14 (the backoffice) and 20 (Helix), while `primeng/sidebar` was removed in 20 and\n `primeng/drawer` does not exist in 14.\n `position=\"right\"` is intentional for both directions: the flex positioning is writing-direction aware, so\n under dir=\"rtl\" (Arabic) it mirrors to the visual left on its own. Passing \"left\" for Arabic double-flips it\n back to the right. -->\n<p-dialog\n class=\"almatar_aside\"\n [ngClass]=\"{ 'almatar_aside--white-header': isWhiteHeader }\"\n position=\"right\"\n [visible]=\"showAside\"\n (visibleChange)=\"onVisibleChange($event)\"\n (onShow)=\"onDialogShow()\"\n (onHide)=\"onCloseModal()\"\n [modal]=\"modal\"\n [closable]=\"closable && !isInAppView\"\n [showHeader]=\"showHeader\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: width || (isWhiteHeader ? '580px' : '490px') }\"\n [transitionOptions]=\"transitionOptions\"\n>\n @if (showHeader) {\n @if (showBackButton) {\n <!-- Rendered into the header's leading content, alongside (not instead of) the dialog's own close (X)\n button, so both are visible together and the X keeps its normal close behavior untouched. -->\n <ng-template pTemplate=\"header\">\n <!-- One flex group, not two separate header children: the header's `justify-content: space-between`\n would otherwise spread the arrow and the title apart. -->\n <div class=\"almatar-aside__back-header\">\n <i\n class=\"almatar-aside__back-icon\"\n [class]=\"backIconClass\"\n (click)=\"onBackIconClick($event)\"\n ></i>\n <span class=\"almatar-aside__title\">{{ asideTitle }}</span>\n </div>\n </ng-template>\n } @else if (headerTemplate) {\n <ng-template pTemplate=\"header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-template>\n } @else {\n <ng-template pTemplate=\"header\">\n <span class=\"almatar-aside__title\">{{ asideTitle }}</span>\n </ng-template>\n }\n }\n\n <ng-content></ng-content>\n</p-dialog>\n", styles: [".almatar_aside ::ng-deep .p-dialog{margin:0!important;height:100svh;max-height:100svh!important;border-radius:0;border:none;transform:unset}@media (max-width: 768px){.almatar_aside ::ng-deep .p-dialog{width:100vw!important}}.almatar_aside ::ng-deep .p-dialog-mask.p-component-overlay,.almatar_aside ::ng-deep .p-dialog-mask.p-overlay-mask{background-color:#0000008a}.almatar_aside ::ng-deep .p-dialog-header{background:var(--almatar-secondary-surface);border:none;border-radius:0;padding:1rem 1.25rem}.almatar_aside ::ng-deep .p-dialog-header .almatar-aside__title,.almatar_aside ::ng-deep .p-dialog-header .p-dialog-header-close-icon,.almatar_aside ::ng-deep .p-dialog-header .p-dialog-close-icon{color:var(--almatar-neutral-icon-secondary-static)}.almatar_aside ::ng-deep .p-dialog-header .almatar-aside__title{color:var(--almatar-secondary-text-on-surface);font-size:calc(21 * var(--almatar-font-size-ratio, 1) * 1px);margin:0;font-weight:var(--almatar-font-weight-regular)}.almatar_aside ::ng-deep .p-dialog-header .almatar-aside__back-header{display:flex;align-items:center;gap:12px}.almatar_aside ::ng-deep .p-dialog-header .almatar-aside__back-icon{cursor:pointer;font-size:1.25rem;color:var(--almatar-neutral-icon-secondary-static)}.almatar_aside ::ng-deep .p-dialog-header-close-icon,.almatar_aside ::ng-deep .p-dialog-close-icon{font-size:1.5rem!important}.almatar_aside ::ng-deep .p-dialog-content{height:100%;flex-grow:1;background-color:var(--almatar-neutral-surface-card);padding:0}.almatar_aside--white-header ::ng-deep .p-dialog-header{background:var(--almatar-neutral-surface-card);border-bottom:1px solid var(--almatar-primary-border-disabled)}.almatar_aside--white-header ::ng-deep .p-dialog-header .p-dialog-header-close-icon,.almatar_aside--white-header ::ng-deep .p-dialog-header .p-dialog-close-icon{color:var(--almatar-neutral-icon-primary-static)}.almatar_aside--white-header ::ng-deep .p-dialog-header .almatar-aside__title{color:var(--almatar-neutral-text-primary-static);font-weight:var(--almatar-font-weight-regular)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i4.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
87
88
  }
88
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsideComponent, decorators: [{
89
90
  type: Component,
90
- args: [{ selector: 'almatar-aside', standalone: true, imports: [CommonModule, SidebarModule], template: "<!-- `position=\"right\"` is intentional for both directions: PrimeNG's flex\n positioning is writing-direction aware, so under dir=\"rtl\" (Arabic) it\n mirrors to the visual left on its own. Passing \"left\" for Arabic\n double-flips it back to the right. -->\n<p-sidebar\n class=\"almatar_aside\"\n [ngClass]=\"{ 'almatar_aside--white-header': isWhiteHeader }\"\n (onShow)=\"onDialogShow()\"\n [showCloseIcon]=\"closable && !isInAppView\"\n (onHide)=\"onCloseModal()\"\n [visible]=\"showAside\"\n (visibleChange)=\"onVisibleChange($event)\"\n position=\"right\"\n [style]=\"{ width: width || (isWhiteHeader ? '580px' : '490px') }\"\n [transitionOptions]=\"transitionOptions\"\n [modal]=\"modal\"\n>\n @if (showHeader) {\n @if (showBackButton) {\n <!-- Rendered into the header's leading content, alongside (not instead\n of) PrimeNG's own close (X) button \u2014 so both are visible together,\n and the X keeps its normal close behavior untouched. -->\n <ng-template pTemplate=\"header\">\n <!-- One flex group, not two separate header children \u2014 otherwise\n `.p-sidebar-header`'s `justify-content: space-between` spreads the\n arrow and title apart instead of keeping them side by side. -->\n <div class=\"almatar-aside__back-header\">\n <i\n class=\"almatar-aside__back-icon\"\n [class]=\"backIconClass\"\n (click)=\"onBackIconClick($event)\"\n ></i>\n <span class=\"p-sidebar-header-content\">{{ asideTitle }}</span>\n </div>\n </ng-template>\n } @else if (headerTemplate) {\n <ng-template pTemplate=\"header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-template>\n } @else {\n <ng-template pTemplate=\"header\">\n <span class=\"p-sidebar-header-content\">{{ asideTitle }}</span>\n </ng-template>\n }\n }\n\n @if (closeIconTemplate) {\n <!-- Custom close icon template -->\n <ng-template pTemplate=\"closeicon\">\n <ng-container *ngTemplateOutlet=\"closeIconTemplate\"></ng-container>\n </ng-template>\n } @else if (isWhiteHeader) {\n <ng-template pTemplate=\"closeicon\">\n <img src=\"/assets/icons/close-dark.svg\" alt=\"\" width=\"24\" height=\"24\" />\n </ng-template>\n }\n\n <ng-content></ng-content>\n</p-sidebar>\n", styles: [".almatar_aside ::ng-deep .p-sidebar{margin:0!important;height:100svh;max-height:100svh!important;border-radius:0;border:none;transform:unset}@media (max-width: 768px){.almatar_aside ::ng-deep .p-sidebar{width:100vw!important;margin:auto!important}}.almatar_aside ::ng-deep .p-sidebar-content{height:100vh}.almatar_aside ::ng-deep .p-sidebar-mask{background-color:#0000008a}.almatar_aside ::ng-deep .p-sidebar-header{background:var(--almatar-secondary-surface);border:none}.almatar_aside ::ng-deep .p-sidebar-header .p-sidebar-header-content,.almatar_aside ::ng-deep .p-sidebar-header .p-sidebar-close-icon{color:var(--almatar-neutral-icon-secondary-static)}.almatar_aside ::ng-deep .p-sidebar-header .p-sidebar-header-content{color:var(--almatar-secondary-text-on-surface);font-size:calc(21 * var(--almatar-font-size-ratio, 1) * 1px);margin:0;font-weight:var(--almatar-font-weight-regular)}.almatar_aside ::ng-deep .p-sidebar-header .almatar-aside__back-header{display:flex;align-items:center;gap:12px}.almatar_aside ::ng-deep .p-sidebar-header .almatar-aside__back-icon{cursor:pointer;font-size:1.25rem;color:var(--almatar-neutral-icon-secondary-static)}.almatar_aside ::ng-deep .p-sidebar-close-icon{font-size:1.5rem!important}.almatar_aside ::ng-deep .p-sidebar-content{background-color:var(--almatar-neutral-surface-card);padding:0}.almatar_aside--white-header ::ng-deep .p-sidebar-header{background:var(--almatar-neutral-surface-card);border-bottom:1px solid var(--almatar-primary-border-disabled)}.almatar_aside--white-header ::ng-deep .p-sidebar-header .p-sidebar-close-icon{color:var(--almatar-neutral-icon-primary-static)}.almatar_aside--white-header ::ng-deep .p-sidebar-header .p-sidebar-header-content{color:var(--almatar-neutral-text-primary-static);font-weight:var(--almatar-font-weight-regular)}\n"] }]
91
+ args: [{ selector: 'almatar-aside', standalone: true, imports: [CommonModule, DialogModule], template: "<!-- A side panel built on `p-dialog` with `position=\"right\"`, not on PrimeNG's sidebar/drawer: `p-dialog` exists with\n the same name in PrimeNG 14 (the backoffice) and 20 (Helix), while `primeng/sidebar` was removed in 20 and\n `primeng/drawer` does not exist in 14.\n `position=\"right\"` is intentional for both directions: the flex positioning is writing-direction aware, so\n under dir=\"rtl\" (Arabic) it mirrors to the visual left on its own. Passing \"left\" for Arabic double-flips it\n back to the right. -->\n<p-dialog\n class=\"almatar_aside\"\n [ngClass]=\"{ 'almatar_aside--white-header': isWhiteHeader }\"\n position=\"right\"\n [visible]=\"showAside\"\n (visibleChange)=\"onVisibleChange($event)\"\n (onShow)=\"onDialogShow()\"\n (onHide)=\"onCloseModal()\"\n [modal]=\"modal\"\n [closable]=\"closable && !isInAppView\"\n [showHeader]=\"showHeader\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: width || (isWhiteHeader ? '580px' : '490px') }\"\n [transitionOptions]=\"transitionOptions\"\n>\n @if (showHeader) {\n @if (showBackButton) {\n <!-- Rendered into the header's leading content, alongside (not instead of) the dialog's own close (X)\n button, so both are visible together and the X keeps its normal close behavior untouched. -->\n <ng-template pTemplate=\"header\">\n <!-- One flex group, not two separate header children: the header's `justify-content: space-between`\n would otherwise spread the arrow and the title apart. -->\n <div class=\"almatar-aside__back-header\">\n <i\n class=\"almatar-aside__back-icon\"\n [class]=\"backIconClass\"\n (click)=\"onBackIconClick($event)\"\n ></i>\n <span class=\"almatar-aside__title\">{{ asideTitle }}</span>\n </div>\n </ng-template>\n } @else if (headerTemplate) {\n <ng-template pTemplate=\"header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-template>\n } @else {\n <ng-template pTemplate=\"header\">\n <span class=\"almatar-aside__title\">{{ asideTitle }}</span>\n </ng-template>\n }\n }\n\n <ng-content></ng-content>\n</p-dialog>\n", styles: [".almatar_aside ::ng-deep .p-dialog{margin:0!important;height:100svh;max-height:100svh!important;border-radius:0;border:none;transform:unset}@media (max-width: 768px){.almatar_aside ::ng-deep .p-dialog{width:100vw!important}}.almatar_aside ::ng-deep .p-dialog-mask.p-component-overlay,.almatar_aside ::ng-deep .p-dialog-mask.p-overlay-mask{background-color:#0000008a}.almatar_aside ::ng-deep .p-dialog-header{background:var(--almatar-secondary-surface);border:none;border-radius:0;padding:1rem 1.25rem}.almatar_aside ::ng-deep .p-dialog-header .almatar-aside__title,.almatar_aside ::ng-deep .p-dialog-header .p-dialog-header-close-icon,.almatar_aside ::ng-deep .p-dialog-header .p-dialog-close-icon{color:var(--almatar-neutral-icon-secondary-static)}.almatar_aside ::ng-deep .p-dialog-header .almatar-aside__title{color:var(--almatar-secondary-text-on-surface);font-size:calc(21 * var(--almatar-font-size-ratio, 1) * 1px);margin:0;font-weight:var(--almatar-font-weight-regular)}.almatar_aside ::ng-deep .p-dialog-header .almatar-aside__back-header{display:flex;align-items:center;gap:12px}.almatar_aside ::ng-deep .p-dialog-header .almatar-aside__back-icon{cursor:pointer;font-size:1.25rem;color:var(--almatar-neutral-icon-secondary-static)}.almatar_aside ::ng-deep .p-dialog-header-close-icon,.almatar_aside ::ng-deep .p-dialog-close-icon{font-size:1.5rem!important}.almatar_aside ::ng-deep .p-dialog-content{height:100%;flex-grow:1;background-color:var(--almatar-neutral-surface-card);padding:0}.almatar_aside--white-header ::ng-deep .p-dialog-header{background:var(--almatar-neutral-surface-card);border-bottom:1px solid var(--almatar-primary-border-disabled)}.almatar_aside--white-header ::ng-deep .p-dialog-header .p-dialog-header-close-icon,.almatar_aside--white-header ::ng-deep .p-dialog-header .p-dialog-close-icon{color:var(--almatar-neutral-icon-primary-static)}.almatar_aside--white-header ::ng-deep .p-dialog-header .almatar-aside__title{color:var(--almatar-neutral-text-primary-static);font-weight:var(--almatar-font-weight-regular)}\n"] }]
91
92
  }], ctorParameters: () => [{ type: i1.SharedService }, { type: Document, decorators: [{
92
93
  type: Inject,
93
94
  args: [DOCUMENT]
@@ -111,8 +112,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
111
112
  type: Input
112
113
  }], transitionOptions: [{
113
114
  type: Input
114
- }], closeIconTemplate: [{
115
- type: Input
116
115
  }], interceptClose: [{
117
116
  type: Input
118
117
  }], onClose: [{
@@ -120,4 +119,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
120
119
  }], closeRequested: [{
121
120
  type: Output
122
121
  }] } });
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2FsbWF0YXItYXNpZGUvYXNpZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2FsbWF0YXItYXNpZGUvYXNpZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7OztBQVNoRSxNQUFNLE9BQU8sY0FBYztJQTZCekIsSUFBSSxhQUFhO1FBQ2YsdUVBQXVFO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQy9CLENBQUMsQ0FBQyxtQkFBbUI7WUFDckIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksWUFBWSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQzFFLENBQUM7SUFFRCxZQUNVLE1BQXFCLEVBQ0gsUUFBa0IsRUFDeEIsaUJBQXlDO1FBRnJELFdBQU0sR0FBTixNQUFNLENBQWU7UUFDSCxhQUFR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QWhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTaWRlYmFyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zaWRlYmFyJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXNpZGVCYWNrQnV0dG9uU2VydmljZSB9IGZyb20gJy4vYXNpZGUtYmFjay1idXR0b24uc2VydmljZSc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IGJyYW5kRW51bSB9IGZyb20gJy4uLy4uL3NoYXJlZC9lbnVtcy9icmFuZC1lbnVtcy5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWxtYXRhci1hc2lkZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNpZGViYXJNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXNpZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hc2lkZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBc2lkZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgYXNpZGVUaXRsZSA9ICcnO1xuICBASW5wdXQoKSBzaG93SGVhZGVyID0gdHJ1ZTtcbiAgQElucHV0KCkgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogT3B0LWluIHdoaXRlIGhlYWRlciAoaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBwdXJwbGUvbGF2ZW5kZXIpIOKAlCBvbmx5XG4gICAqIHRha2VzIGVmZmVjdCBvbiB0aGUgQWxtYXRhciBicmFuZCwgc28gb3RoZXIgdGVuYW50cy9icmFuZHMgc2hhcmluZyB0aGlzXG4gICAqIGNvbXBvbmVudCBrZWVwIHRoZWlyIGV4aXN0aW5nIGhlYWRlciByZWdhcmRsZXNzIG9mIHRoaXMgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSB3aGl0ZUhlYWRlciA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93QXNpZGUgPSBmYWxzZTtcbiAgLyoqIE9wdC1pbiBkZXNrdG9wIHdpZHRoIG92ZXJyaWRlIChlLmcuIGAnNjAwcHgnYCkg4oCUIGRlZmF1bHRzIHRvIDQ5MHB4LCBvciA1ODBweCB3aXRoIHRoZSB3aGl0ZSBoZWFkZXIuICovXG4gIEBJbnB1dCgpIHdpZHRoID0gJyc7XG4gIEBJbnB1dCgpIG1vZGFsID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NhYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgdHJhbnNpdGlvbk9wdGlvbnMgPSAnMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSknO1xuICBASW5wdXQoKSBjbG9zZUljb25UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBkaWFsb2cncyBvd24gY2xvc2UgKHRoZSBYLCBFc2MpIGRvZXMgTk9UIGhpZGUgdGhlIGFzaWRlOyBpdCBvbmx5IGVtaXRzXG4gICAqIHtAbGluayBjbG9zZVJlcXVlc3RlZH0sIHNvIHRoZSBob3N0IGNhbiBhc2sgZm9yIGNvbmZpcm1hdGlvbiBhbmQgY2xvc2UgdGhlIGFzaWRlIGl0c2VsZi5cbiAgICovXG4gIEBJbnB1dCgpIGludGVyY2VwdENsb3NlID0gZmFsc2U7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICBAT3V0cHV0KCkgb25DbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNsb3NlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBpc0luQXBwVmlldyA9IHRoaXMuc2hhcmVkLmdldEluQXBwVmlldygpO1xuICBzZWxlY3RlZExhbmchOiBzdHJpbmc7XG4gIHNob3dCYWNrQnV0dG9uID0gZmFsc2U7XG5cbiAgZ2V0IGJhY2tJY29uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICAvLyBDb252ZW50aW9uYWwgYmFjay1hcnJvdyBkaXJlY3Rpb246IHBvaW50cyBsZWZ0IGluIExUUiwgcmlnaHQgaW4gUlRMLlxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTGFuZyA9PT0gJ2FyJ1xuICAgICAgPyAncGkgcGktYXJyb3ctcmlnaHQnXG4gICAgICA6ICdwaSBwaS1hcnJvdy1sZWZ0JztcbiAgfVxuXG4gIGdldCBpc1doaXRlSGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndoaXRlSGVhZGVyICYmIGVudmlyb25tZW50cy5icmFuZE5hbWUgPT09IGJyYW5kRW51bS5hbG1hdGFyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzaGFyZWQ6IFNoYXJlZFNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBiYWNrQnV0dG9uU2VydmljZTogQXNpZGVCYWNrQnV0dG9uU2VydmljZSxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRMYW5nID0gdGhpcy5zaGFyZWQuZ2V0QXBwTGFuZ3VhZ2UoKTtcbiAgICBpZiAodGhpcy5iYWNrQnV0dG9uU2VydmljZSkge1xuICAgICAgdGhpcy5iYWNrQnV0dG9uU2VydmljZS5zaG93QmFja0J1dHRvbiQuc3Vic2NyaWJlKChzaG93KSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSBzaG93O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlcGxhY2VzIHRoZSB0d28td2F5IGBbKHZpc2libGUpXWAgc28gYSBob3N0IGNhbiB2ZXRvIHRoZSBkaWFsb2cncyBvd24gY2xvc2UuICovXG4gIG9uVmlzaWJsZUNoYW5nZSh2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF2aXNpYmxlICYmIHRoaXMuaW50ZXJjZXB0Q2xvc2UpIHtcbiAgICAgIHRoaXMuY2xvc2VSZXF1ZXN0ZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNob3dBc2lkZSA9IHZpc2libGU7XG4gIH1cblxuICBvbkNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcbiAgfVxuXG4gIC8vIFRoZSBiYWNrIGFycm93IGxpdmVzIGluIHRoZSBoZWFkZXIncyBsZWFkaW5nIGNvbnRlbnQgKHZpYSB0aGVcbiAgLy8gYHBUZW1wbGF0ZT1cImhlYWRlclwiYCBzbG90KSwgZW50aXJlbHkgc2VwYXJhdGUgZnJvbSBQcmltZU5HJ3Mgb3duIGNsb3NlXG4gIC8vIGJ1dHRvbiDigJQgc28gaXQgbmV2ZXIgdG91Y2hlcyB0aGUgZGlhbG9nJ3MgYHZpc2libGVgIHN0YXRlLCBhbmQgdGhlIFhcbiAgLy8gY2xvc2UgYnV0dG9uIGtlZXBzIHdvcmtpbmcgKGFuZCBzdGF5cyB2aXNpYmxlKSBleGFjdGx5IGFzIGJlZm9yZS5cbiAgb25CYWNrSWNvbkNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5iYWNrQnV0dG9uU2VydmljZT8uZW1pdEJhY2soKTtcbiAgfVxuXG4gIG9uRGlhbG9nU2hvdygpIHtcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICcnO1xuICB9XG59XG4iLCI8IS0tIGBwb3NpdGlvbj1cInJpZ2h0XCJgIGlzIGludGVudGlvbmFsIGZvciBib3RoIGRpcmVjdGlvbnM6IFByaW1lTkcncyBmbGV4XG4gICAgIHBvc2l0aW9uaW5nIGlzIHdyaXRpbmctZGlyZWN0aW9uIGF3YXJlLCBzbyB1bmRlciBkaXI9XCJydGxcIiAoQXJhYmljKSBpdFxuICAgICBtaXJyb3JzIHRvIHRoZSB2aXN1YWwgbGVmdCBvbiBpdHMgb3duLiBQYXNzaW5nIFwibGVmdFwiIGZvciBBcmFiaWNcbiAgICAgZG91YmxlLWZsaXBzIGl0IGJhY2sgdG8gdGhlIHJpZ2h0LiAtLT5cbjxwLXNpZGViYXJcbiAgY2xhc3M9XCJhbG1hdGFyX2FzaWRlXCJcbiAgW25nQ2xhc3NdPVwieyAnYWxtYXRhcl9hc2lkZS0td2hpdGUtaGVhZGVyJzogaXNXaGl0ZUhlYWRlciB9XCJcbiAgKG9uU2hvdyk9XCJvbkRpYWxvZ1Nob3coKVwiXG4gIFtzaG93Q2xvc2VJY29uXT1cImNsb3NhYmxlICYmICFpc0luQXBwVmlld1wiXG4gIChvbkhpZGUpPVwib25DbG9zZU1vZGFsKClcIlxuICBbdmlzaWJsZV09XCJzaG93QXNpZGVcIlxuICAodmlzaWJsZUNoYW5nZSk9XCJvblZpc2libGVDaGFuZ2UoJGV2ZW50KVwiXG4gIHBvc2l0aW9uPVwicmlnaHRcIlxuICBbc3R5bGVdPVwieyB3aWR0aDogd2lkdGggfHwgKGlzV2hpdGVIZWFkZXIgPyAnNTgwcHgnIDogJzQ5MHB4JykgfVwiXG4gIFt0cmFuc2l0aW9uT3B0aW9uc109XCJ0cmFuc2l0aW9uT3B0aW9uc1wiXG4gIFttb2RhbF09XCJtb2RhbFwiXG4+XG4gIEBpZiAoc2hvd0hlYWRlcikge1xuICAgIEBpZiAoc2hvd0JhY2tCdXR0b24pIHtcbiAgICAgIDwhLS0gUmVuZGVyZWQgaW50byB0aGUgaGVhZGVyJ3MgbGVhZGluZyBjb250ZW50LCBhbG9uZ3NpZGUgKG5vdCBpbnN0ZWFkXG4gICAgICAgICAgIG9mKSBQcmltZU5HJ3Mgb3duIGNsb3NlIChYKSBidXR0b24g4oCUIHNvIGJvdGggYXJlIHZpc2libGUgdG9nZXRoZXIsXG4gICAgICAgICAgIGFuZCB0aGUgWCBrZWVwcyBpdHMgbm9ybWFsIGNsb3NlIGJlaGF2aW9yIHVudG91Y2hlZC4gLS0+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgIDwhLS0gT25lIGZsZXggZ3JvdXAsIG5vdCB0d28gc2VwYXJhdGUgaGVhZGVyIGNoaWxkcmVuIOKAlCBvdGhlcndpc2VcbiAgICAgICAgICAgICBgLnAtc2lkZWJhci1oZWFkZXJgJ3MgYGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbmAgc3ByZWFkcyB0aGVcbiAgICAgICAgICAgICBhcnJvdyBhbmQgdGl0bGUgYXBhcnQgaW5zdGVhZCBvZiBrZWVwaW5nIHRoZW0gc2lkZSBieSBzaWRlLiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFsbWF0YXItYXNpZGVfX2JhY2staGVhZGVyXCI+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwiYWxtYXRhci1hc2lkZV9fYmFjay1pY29uXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJiYWNrSWNvbkNsYXNzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkJhY2tJY29uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtc2lkZWJhci1oZWFkZXItY29udGVudFwiPnt7IGFzaWRlVGl0bGUgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICB9IEBlbHNlIGlmIChoZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicC1zaWRlYmFyLWhlYWRlci1jb250ZW50XCI+e3sgYXNpZGVUaXRsZSB9fTwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgfVxuICB9XG5cbiAgQGlmIChjbG9zZUljb25UZW1wbGF0ZSkge1xuICAgIDwhLS0gQ3VzdG9tIGNsb3NlIGljb24gdGVtcGxhdGUgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNsb3NlaWNvblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsb3NlSWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgfSBAZWxzZSBpZiAoaXNXaGl0ZUhlYWRlcikge1xuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjbG9zZWljb25cIj5cbiAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pY29ucy9jbG9zZS1kYXJrLnN2Z1wiIGFsdD1cIlwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIC8+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgfVxuXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvcC1zaWRlYmFyPlxuIl19
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2FsbWF0YXItYXNpZGUvYXNpZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2FsbWF0YXItYXNpZGUvYXNpZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7QUFTaEUsTUFBTSxPQUFPLGNBQWM7SUE0QnpCLElBQUksYUFBYTtRQUNmLHVFQUF1RTtRQUN2RSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSTtZQUMvQixDQUFDLENBQUMsbUJBQW1CO1lBQ3JCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQztJQUMxRSxDQUFDO0lBRUQsWUFDVSxNQUFxQixFQUNILFFBQWtCLEVBQ3hCLGlCQUF5QztRQUZyRCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ0gsYUFB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QUFoQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IEFzaWRlQmFja0J1dHRvblNlcnZpY2UgfSBmcm9tICcuL2FzaWRlLWJhY2stYnV0dG9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnRzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBicmFuZEVudW0gfSBmcm9tICcuLi8uLi9zaGFyZWQvZW51bXMvYnJhbmQtZW51bXMuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FsbWF0YXItYXNpZGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEaWFsb2dNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXNpZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hc2lkZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBc2lkZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgYXNpZGVUaXRsZSA9ICcnO1xuICBASW5wdXQoKSBzaG93SGVhZGVyID0gdHJ1ZTtcbiAgQElucHV0KCkgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogT3B0LWluIHdoaXRlIGhlYWRlciAoaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBwdXJwbGUvbGF2ZW5kZXIpIOKAlCBvbmx5XG4gICAqIHRha2VzIGVmZmVjdCBvbiB0aGUgQWxtYXRhciBicmFuZCwgc28gb3RoZXIgdGVuYW50cy9icmFuZHMgc2hhcmluZyB0aGlzXG4gICAqIGNvbXBvbmVudCBrZWVwIHRoZWlyIGV4aXN0aW5nIGhlYWRlciByZWdhcmRsZXNzIG9mIHRoaXMgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSB3aGl0ZUhlYWRlciA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93QXNpZGUgPSBmYWxzZTtcbiAgLyoqIE9wdC1pbiBkZXNrdG9wIHdpZHRoIG92ZXJyaWRlIChlLmcuIGAnNjAwcHgnYCkg4oCUIGRlZmF1bHRzIHRvIDQ5MHB4LCBvciA1ODBweCB3aXRoIHRoZSB3aGl0ZSBoZWFkZXIuICovXG4gIEBJbnB1dCgpIHdpZHRoID0gJyc7XG4gIEBJbnB1dCgpIG1vZGFsID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NhYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgdHJhbnNpdGlvbk9wdGlvbnMgPSAnMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSknO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCB0aGUgZGlhbG9nJ3Mgb3duIGNsb3NlICh0aGUgWCwgRXNjKSBkb2VzIE5PVCBoaWRlIHRoZSBhc2lkZTsgaXQgb25seSBlbWl0c1xuICAgKiB7QGxpbmsgY2xvc2VSZXF1ZXN0ZWR9LCBzbyB0aGUgaG9zdCBjYW4gYXNrIGZvciBjb25maXJtYXRpb24gYW5kIGNsb3NlIHRoZSBhc2lkZSBpdHNlbGYuXG4gICAqL1xuICBASW5wdXQoKSBpbnRlcmNlcHRDbG9zZSA9IGZhbHNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgQE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgaXNJbkFwcFZpZXcgPSB0aGlzLnNoYXJlZC5nZXRJbkFwcFZpZXcoKTtcbiAgc2VsZWN0ZWRMYW5nITogc3RyaW5nO1xuICBzaG93QmFja0J1dHRvbiA9IGZhbHNlO1xuXG4gIGdldCBiYWNrSWNvbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgLy8gQ29udmVudGlvbmFsIGJhY2stYXJyb3cgZGlyZWN0aW9uOiBwb2ludHMgbGVmdCBpbiBMVFIsIHJpZ2h0IGluIFJUTC5cbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExhbmcgPT09ICdhcidcbiAgICAgID8gJ3BpIHBpLWFycm93LXJpZ2h0J1xuICAgICAgOiAncGkgcGktYXJyb3ctbGVmdCc7XG4gIH1cblxuICBnZXQgaXNXaGl0ZUhlYWRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aGl0ZUhlYWRlciAmJiBlbnZpcm9ubWVudHMuYnJhbmROYW1lID09PSBicmFuZEVudW0uYWxtYXRhcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2hhcmVkOiBTaGFyZWRTZXJ2aWNlLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgYmFja0J1dHRvblNlcnZpY2U6IEFzaWRlQmFja0J1dHRvblNlcnZpY2UsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTGFuZyA9IHRoaXMuc2hhcmVkLmdldEFwcExhbmd1YWdlKCk7XG4gICAgaWYgKHRoaXMuYmFja0J1dHRvblNlcnZpY2UpIHtcbiAgICAgIHRoaXMuYmFja0J1dHRvblNlcnZpY2Uuc2hvd0JhY2tCdXR0b24kLnN1YnNjcmliZSgoc2hvdykgPT4ge1xuICAgICAgICB0aGlzLnNob3dCYWNrQnV0dG9uID0gc2hvdztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXBsYWNlcyB0aGUgdHdvLXdheSBgWyh2aXNpYmxlKV1gIHNvIGEgaG9zdCBjYW4gdmV0byB0aGUgZGlhbG9nJ3Mgb3duIGNsb3NlLiAqL1xuICBvblZpc2libGVDaGFuZ2UodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdmlzaWJsZSAmJiB0aGlzLmludGVyY2VwdENsb3NlKSB7XG4gICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93QXNpZGUgPSB2aXNpYmxlO1xuICB9XG5cbiAgb25DbG9zZU1vZGFsKCkge1xuICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gICAgdGhpcy5kb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG4gIH1cblxuICAvLyBUaGUgYmFjayBhcnJvdyBsaXZlcyBpbiB0aGUgaGVhZGVyJ3MgbGVhZGluZyBjb250ZW50ICh2aWEgdGhlXG4gIC8vIGBwVGVtcGxhdGU9XCJoZWFkZXJcImAgc2xvdCksIGVudGlyZWx5IHNlcGFyYXRlIGZyb20gUHJpbWVORydzIG93biBjbG9zZVxuICAvLyBidXR0b24g4oCUIHNvIGl0IG5ldmVyIHRvdWNoZXMgdGhlIGRpYWxvZydzIGB2aXNpYmxlYCBzdGF0ZSwgYW5kIHRoZSBYXG4gIC8vIGNsb3NlIGJ1dHRvbiBrZWVwcyB3b3JraW5nIChhbmQgc3RheXMgdmlzaWJsZSkgZXhhY3RseSBhcyBiZWZvcmUuXG4gIG9uQmFja0ljb25DbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuYmFja0J1dHRvblNlcnZpY2U/LmVtaXRCYWNrKCk7XG4gIH1cblxuICBvbkRpYWxvZ1Nob3coKSB7XG4gICAgdGhpcy5kb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcbiAgfVxufVxuIiwiPCEtLSBBIHNpZGUgcGFuZWwgYnVpbHQgb24gYHAtZGlhbG9nYCB3aXRoIGBwb3NpdGlvbj1cInJpZ2h0XCJgLCBub3Qgb24gUHJpbWVORydzIHNpZGViYXIvZHJhd2VyOiBgcC1kaWFsb2dgIGV4aXN0cyB3aXRoXG4gICAgIHRoZSBzYW1lIG5hbWUgaW4gUHJpbWVORyAxNCAodGhlIGJhY2tvZmZpY2UpIGFuZCAyMCAoSGVsaXgpLCB3aGlsZSBgcHJpbWVuZy9zaWRlYmFyYCB3YXMgcmVtb3ZlZCBpbiAyMCBhbmRcbiAgICAgYHByaW1lbmcvZHJhd2VyYCBkb2VzIG5vdCBleGlzdCBpbiAxNC5cbiAgICAgYHBvc2l0aW9uPVwicmlnaHRcImAgaXMgaW50ZW50aW9uYWwgZm9yIGJvdGggZGlyZWN0aW9uczogdGhlIGZsZXggcG9zaXRpb25pbmcgaXMgd3JpdGluZy1kaXJlY3Rpb24gYXdhcmUsIHNvXG4gICAgIHVuZGVyIGRpcj1cInJ0bFwiIChBcmFiaWMpIGl0IG1pcnJvcnMgdG8gdGhlIHZpc3VhbCBsZWZ0IG9uIGl0cyBvd24uIFBhc3NpbmcgXCJsZWZ0XCIgZm9yIEFyYWJpYyBkb3VibGUtZmxpcHMgaXRcbiAgICAgYmFjayB0byB0aGUgcmlnaHQuIC0tPlxuPHAtZGlhbG9nXG4gIGNsYXNzPVwiYWxtYXRhcl9hc2lkZVwiXG4gIFtuZ0NsYXNzXT1cInsgJ2FsbWF0YXJfYXNpZGUtLXdoaXRlLWhlYWRlcic6IGlzV2hpdGVIZWFkZXIgfVwiXG4gIHBvc2l0aW9uPVwicmlnaHRcIlxuICBbdmlzaWJsZV09XCJzaG93QXNpZGVcIlxuICAodmlzaWJsZUNoYW5nZSk9XCJvblZpc2libGVDaGFuZ2UoJGV2ZW50KVwiXG4gIChvblNob3cpPVwib25EaWFsb2dTaG93KClcIlxuICAob25IaWRlKT1cIm9uQ2xvc2VNb2RhbCgpXCJcbiAgW21vZGFsXT1cIm1vZGFsXCJcbiAgW2Nsb3NhYmxlXT1cImNsb3NhYmxlICYmICFpc0luQXBwVmlld1wiXG4gIFtzaG93SGVhZGVyXT1cInNob3dIZWFkZXJcIlxuICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgW3Jlc2l6YWJsZV09XCJmYWxzZVwiXG4gIFtzdHlsZV09XCJ7IHdpZHRoOiB3aWR0aCB8fCAoaXNXaGl0ZUhlYWRlciA/ICc1ODBweCcgOiAnNDkwcHgnKSB9XCJcbiAgW3RyYW5zaXRpb25PcHRpb25zXT1cInRyYW5zaXRpb25PcHRpb25zXCJcbj5cbiAgQGlmIChzaG93SGVhZGVyKSB7XG4gICAgQGlmIChzaG93QmFja0J1dHRvbikge1xuICAgICAgPCEtLSBSZW5kZXJlZCBpbnRvIHRoZSBoZWFkZXIncyBsZWFkaW5nIGNvbnRlbnQsIGFsb25nc2lkZSAobm90IGluc3RlYWQgb2YpIHRoZSBkaWFsb2cncyBvd24gY2xvc2UgKFgpXG4gICAgICAgICAgIGJ1dHRvbiwgc28gYm90aCBhcmUgdmlzaWJsZSB0b2dldGhlciBhbmQgdGhlIFgga2VlcHMgaXRzIG5vcm1hbCBjbG9zZSBiZWhhdmlvciB1bnRvdWNoZWQuIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8IS0tIE9uZSBmbGV4IGdyb3VwLCBub3QgdHdvIHNlcGFyYXRlIGhlYWRlciBjaGlsZHJlbjogdGhlIGhlYWRlcidzIGBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5gXG4gICAgICAgICAgICAgd291bGQgb3RoZXJ3aXNlIHNwcmVhZCB0aGUgYXJyb3cgYW5kIHRoZSB0aXRsZSBhcGFydC4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbG1hdGFyLWFzaWRlX19iYWNrLWhlYWRlclwiPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImFsbWF0YXItYXNpZGVfX2JhY2staWNvblwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiYmFja0ljb25DbGFzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25CYWNrSWNvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbG1hdGFyLWFzaWRlX190aXRsZVwiPnt7IGFzaWRlVGl0bGUgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICB9IEBlbHNlIGlmIChoZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYWxtYXRhci1hc2lkZV9fdGl0bGVcIj57eyBhc2lkZVRpdGxlIH19PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICB9XG4gIH1cblxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L3AtZGlhbG9nPlxuIl19
@@ -522,7 +522,7 @@ export class AlmatarHotelAutoCancellationComponent {
522
522
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlmatarHotelAutoCancellationComponent, isStandalone: true, selector: "almatar-hotel-auto-cancellation", inputs: { selectedHotelBooking: { classPropertyName: "selectedHotelBooking", publicName: "selectedHotelBooking", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", cancellationSuccess: "cancellationSuccess", nonRefundableSubmitSuccess: "nonRefundableSubmitSuccess", chatWithAgent: "chatWithAgent" }, providers: [
523
523
  AlmatarHotelAutoCancellationService,
524
524
  AlmatarHotelAutoCancellationEndpointsService
525
- ], ngImport: i0, template: "@if (showAside()) {\n <almatar-aside\n\n class=\"auto_cancellation_wrapper\"\n [asideTitle]=\"asideTitle()\"\n [showAside]=\"showAside()\"\n [whiteHeader]=\"true\"\n [showHeader]=\"false\"\n (onClose)=\"onCloseModal()\"\n >\n <!-- Custom Header with 60px height -->\n <div class=\"auto_cancellation__header\">\n @if (canGoBack()) {\n <button class=\"auto_cancellation__header-back\" (click)=\"onGoBack()\" type=\"button\">\n <i class=\"pi pi-arrow-left\"></i>\n </button>\n }\n <div class=\"auto_cancellation__header-content\">\n @if (currentStep() === stepEnum.selectRooms) {\n <h2 class=\"auto_cancellation__header-title\">\n @if (isSinglePackage()) {\n Cancel Rooms\n } @else {\n Select Rooms\n }\n </h2>\n <p class=\"auto_cancellation__header-subtitle\">\n @if (isSinglePackage()) {\n Review and confirm your cancellation\n } @else {\n Choose which room(s) you'd like to cancel\n }\n </p>\n } @else if (currentStep() === stepEnum.refundSummary) {\n <h2 class=\"auto_cancellation__header-title\">Cancel Booking Request</h2>\n <p class=\"auto_cancellation__header-subtitle\">Review your refund summary and proceed</p>\n } @else if (currentStep() === stepEnum.refundMethod) {\n <h2 class=\"auto_cancellation__header-title\">Select Refund Method</h2>\n <p class=\"auto_cancellation__header-subtitle\">Choose how you'd like to receive your refund</p>\n } @else {\n <h2 class=\"auto_cancellation__header-title\">{{ asideTitle() }}</h2>\n <p class=\"auto_cancellation__header-subtitle\">Complete your booking cancellation</p>\n }\n </div>\n <button class=\"auto_cancellation__header-close\" (click)=\"onCloseModal()\" type=\"button\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"auto_cancellation__component\" [class.isNusk]=\"isNusk()\">\n @if (isLoading()) {\n <div class=\"auto_cancellation__loading\">\n <app-loader></app-loader>\n </div>\n }\n\n @if (currentStep() === stepEnum.selectRooms && !isLoading()) {\n <almatar-hotel-auto-cancellation-select-rooms\n [packages]=\"packages()\"\n [hotelInfo]=\"hotelInfo()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.hotelId\"\n [currencyCode]=\"selectedHotelBooking()?.currencyCode || 'SAR'\"\n (continueToCancel)=\"onContinueToCancel($event)\"\n (closeModal)=\"onCloseModal()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n (chatWithAgent)=\"onChatWithAgent()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundSummary && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary\n [selectedRooms]=\"autoCancellationService.selectedRooms()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.id || selectedHotelBooking()?.hpk\"\n [hotelInfo]=\"hotelInfo()\"\n [selectionSkipped]=\"packages().length <= 1\"\n (keepRoom)=\"onKeepRoom()\"\n (selectRefundOption)=\"onSelectRefundOption($event)\"\n (closeModal)=\"onCloseModal()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundMethod && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-method\n [refundDetailsData]=\"refundDetailsData()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [isCancelling]=\"isCancelling()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBackFromRefundMethod()\"\n (confirmRequested)=\"confirmCancellation()\"\n (closeModal)=\"onCloseModal()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n />\n }\n </div>\n </almatar-aside>\n}\n\n@if (showErrorModal()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n@if (showResultOverlay() && resultOverlayData()) {\n <app-result-overlay\n [data]=\"resultOverlayData()!\"\n [show]=\"showResultOverlay()\"\n (confirm)=\"onResultOverlayConfirm()\"\n (cancel)=\"onResultOverlayCancel()\"\n />\n}\n", styles: [".auto_cancellation__header{height:60px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0;gap:16px}.auto_cancellation__header-content{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.auto_cancellation__header-title{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;color:#1e293b;margin:0;line-height:1.3}.auto_cancellation__header-subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;color:#64748b;margin:0;line-height:1.4}.auto_cancellation__header-back{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease;margin-right:8px}.auto_cancellation__header-back i{font-size:18px;color:#64748b}.auto_cancellation__header-back:hover{background:#f1f5f9}.auto_cancellation__header-back:hover i{color:#1e293b}.auto_cancellation__header-back:active{background:#e2e8f0}.auto_cancellation__header-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease}.auto_cancellation__header-close i{font-size:18px;color:#64748b}.auto_cancellation__header-close:hover{background:#f1f5f9}.auto_cancellation__header-close:hover i{color:#1e293b}.auto_cancellation__header-close:active{background:#e2e8f0}.auto_cancellation__component{height:calc(100% - 60px)}.auto_cancellation__loading{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px}.auto_cancellation_wrapper ::ng-deep almatar-hotel-auto-cancellation{display:block;height:100%}.auto_cancellation_wrapper ::ng-deep .p-sidebar-header{display:none!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-content{padding-top:0!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-close{display:none!important}.auto_cancellation_wrapper ::ng-deep .almatar_aside .p-dialog-content{background:var(--almatar-neutral-surface-screen-bg)}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn{min-height:48px;padding:12px 24px;border-radius:10px;font-size:15px;font-weight:600;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center;gap:8px;position:relative;overflow:hidden}.auto_cancellation_wrapper ::ng-deep .main_btn:disabled,.auto_cancellation_wrapper ::ng-deep .btn:disabled{opacity:.5;cursor:not-allowed}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn--primary{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;box-shadow:0 2px 8px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .main_btn:hover:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:hover:not(:disabled){background:linear-gradient(135deg,#2563eb,#1d4ed8);box-shadow:0 4px 12px #3b82f666;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .main_btn:active:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .btn--secondary{background:#f1f5f9;color:#1e293b;border:1px solid #e2e8f0}.auto_cancellation_wrapper ::ng-deep .btn--secondary:hover:not(:disabled){background:#e2e8f0;border-color:#cbd5e1;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--secondary:active:not(:disabled){background:#cbd5e1;transform:translateY(0)}.auto_cancellation_wrapper ::ng-deep .btn--danger{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;box-shadow:0 2px 8px #ef44444d}.auto_cancellation_wrapper ::ng-deep .btn--danger:hover:not(:disabled){background:linear-gradient(135deg,#dc2626,#b91c1c);box-shadow:0 4px 12px #ef444466;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--danger:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #ef44444d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us{background:linear-gradient(135deg,#10b981,#059669);box-shadow:0 2px 8px #10b9814d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us:hover:not(:disabled){background:linear-gradient(135deg,#059669,#047857);box-shadow:0 4px 12px #10b98166;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn__spinner{width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.auto_cancellation_wrapper ::ng-deep .isNusk .main_btn,.auto_cancellation_wrapper ::ng-deep .isNusk .btn--primary{background:linear-gradient(135deg,var(--almatar-nusuk-primary),var(--almatar-nusuk-primary))!important;border-radius:33px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LoaderModule }, { kind: "component", type: i1.LoaderComponent, selector: "app-loader", inputs: ["loading", "message"] }, { kind: "component", type: AsideComponent, selector: "almatar-aside", inputs: ["asideTitle", "showHeader", "headerTemplate", "whiteHeader", "showAside", "width", "modal", "closable", "transitionOptions", "closeIconTemplate", "interceptClose"], outputs: ["onClose", "closeRequested"] }, { kind: "component", type: AlmatarHotelAutoCancellationSelectRoomsComponent, selector: "almatar-hotel-auto-cancellation-select-rooms", inputs: ["packages", "hotelInfo", "bookingId", "hotelId", "currencyCode"], outputs: ["continueToCancel", "closeModal", "nonRefundableSubmitSuccess", "chatWithAgent"] }, { kind: "component", type: AlmatarHotelAutoCancellationRefundSummaryComponent, selector: "almatar-hotel-auto-cancellation-refund-summary", inputs: ["selectedRooms", "bookingId", "hotelId", "hotelInfo", "selectionSkipped"], outputs: ["keepRoom", "selectRefundOption", "closeModal"] }, { kind: "component", type: AlmatarHotelAutoCancellationRefundMethodComponent, selector: "almatar-hotel-auto-cancellation-refund-method", inputs: ["refundDetailsData", "currencyObj", "refundMethod", "bookingId", "isCancelling", "showBack"], outputs: ["methodSelected", "backRequested", "confirmRequested", "closeModal"] }, { kind: "ngmodule", type: AlmatarIconModule }, { kind: "component", type: ResultOverlayComponent, selector: "app-result-overlay", inputs: ["data", "show"], outputs: ["confirm", "cancel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
525
+ ], ngImport: i0, template: "@if (showAside()) {\n <almatar-aside\n\n class=\"auto_cancellation_wrapper\"\n [asideTitle]=\"asideTitle()\"\n [showAside]=\"showAside()\"\n [whiteHeader]=\"true\"\n [showHeader]=\"false\"\n (onClose)=\"onCloseModal()\"\n >\n <!-- Custom Header with 60px height -->\n <div class=\"auto_cancellation__header\">\n @if (canGoBack()) {\n <button class=\"auto_cancellation__header-back\" (click)=\"onGoBack()\" type=\"button\">\n <i class=\"pi pi-arrow-left\"></i>\n </button>\n }\n <div class=\"auto_cancellation__header-content\">\n @if (currentStep() === stepEnum.selectRooms) {\n <h2 class=\"auto_cancellation__header-title\">\n @if (isSinglePackage()) {\n Cancel Rooms\n } @else {\n Select Rooms\n }\n </h2>\n <p class=\"auto_cancellation__header-subtitle\">\n @if (isSinglePackage()) {\n Review and confirm your cancellation\n } @else {\n Choose which room(s) you'd like to cancel\n }\n </p>\n } @else if (currentStep() === stepEnum.refundSummary) {\n <h2 class=\"auto_cancellation__header-title\">Cancel Booking Request</h2>\n <p class=\"auto_cancellation__header-subtitle\">Review your refund summary and proceed</p>\n } @else if (currentStep() === stepEnum.refundMethod) {\n <h2 class=\"auto_cancellation__header-title\">Select Refund Method</h2>\n <p class=\"auto_cancellation__header-subtitle\">Choose how you'd like to receive your refund</p>\n } @else {\n <h2 class=\"auto_cancellation__header-title\">{{ asideTitle() }}</h2>\n <p class=\"auto_cancellation__header-subtitle\">Complete your booking cancellation</p>\n }\n </div>\n <button class=\"auto_cancellation__header-close\" (click)=\"onCloseModal()\" type=\"button\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"auto_cancellation__component\" [class.isNusk]=\"isNusk()\">\n @if (isLoading()) {\n <div class=\"auto_cancellation__loading\">\n <app-loader></app-loader>\n </div>\n }\n\n @if (currentStep() === stepEnum.selectRooms && !isLoading()) {\n <almatar-hotel-auto-cancellation-select-rooms\n [packages]=\"packages()\"\n [hotelInfo]=\"hotelInfo()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.hotelId\"\n [currencyCode]=\"selectedHotelBooking()?.currencyCode || 'SAR'\"\n (continueToCancel)=\"onContinueToCancel($event)\"\n (closeModal)=\"onCloseModal()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n (chatWithAgent)=\"onChatWithAgent()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundSummary && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary\n [selectedRooms]=\"autoCancellationService.selectedRooms()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.id || selectedHotelBooking()?.hpk\"\n [hotelInfo]=\"hotelInfo()\"\n [selectionSkipped]=\"packages().length <= 1\"\n (keepRoom)=\"onKeepRoom()\"\n (selectRefundOption)=\"onSelectRefundOption($event)\"\n (closeModal)=\"onCloseModal()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundMethod && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-method\n [refundDetailsData]=\"refundDetailsData()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [isCancelling]=\"isCancelling()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBackFromRefundMethod()\"\n (confirmRequested)=\"confirmCancellation()\"\n (closeModal)=\"onCloseModal()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n />\n }\n </div>\n </almatar-aside>\n}\n\n@if (showErrorModal()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n@if (showResultOverlay() && resultOverlayData()) {\n <app-result-overlay\n [data]=\"resultOverlayData()!\"\n [show]=\"showResultOverlay()\"\n (confirm)=\"onResultOverlayConfirm()\"\n (cancel)=\"onResultOverlayCancel()\"\n />\n}\n", styles: [".auto_cancellation__header{height:60px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0;gap:16px}.auto_cancellation__header-content{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.auto_cancellation__header-title{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;color:#1e293b;margin:0;line-height:1.3}.auto_cancellation__header-subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;color:#64748b;margin:0;line-height:1.4}.auto_cancellation__header-back{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease;margin-right:8px}.auto_cancellation__header-back i{font-size:18px;color:#64748b}.auto_cancellation__header-back:hover{background:#f1f5f9}.auto_cancellation__header-back:hover i{color:#1e293b}.auto_cancellation__header-back:active{background:#e2e8f0}.auto_cancellation__header-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease}.auto_cancellation__header-close i{font-size:18px;color:#64748b}.auto_cancellation__header-close:hover{background:#f1f5f9}.auto_cancellation__header-close:hover i{color:#1e293b}.auto_cancellation__header-close:active{background:#e2e8f0}.auto_cancellation__component{height:calc(100% - 60px)}.auto_cancellation__loading{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px}.auto_cancellation_wrapper ::ng-deep almatar-hotel-auto-cancellation{display:block;height:100%}.auto_cancellation_wrapper ::ng-deep .p-sidebar-header{display:none!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-content{padding-top:0!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-close{display:none!important}.auto_cancellation_wrapper ::ng-deep .almatar_aside .p-dialog-content{background:var(--almatar-neutral-surface-screen-bg)}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn{min-height:48px;padding:12px 24px;border-radius:10px;font-size:15px;font-weight:600;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center;gap:8px;position:relative;overflow:hidden}.auto_cancellation_wrapper ::ng-deep .main_btn:disabled,.auto_cancellation_wrapper ::ng-deep .btn:disabled{opacity:.5;cursor:not-allowed}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn--primary{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;box-shadow:0 2px 8px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .main_btn:hover:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:hover:not(:disabled){background:linear-gradient(135deg,#2563eb,#1d4ed8);box-shadow:0 4px 12px #3b82f666;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .main_btn:active:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .btn--secondary{background:#f1f5f9;color:#1e293b;border:1px solid #e2e8f0}.auto_cancellation_wrapper ::ng-deep .btn--secondary:hover:not(:disabled){background:#e2e8f0;border-color:#cbd5e1;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--secondary:active:not(:disabled){background:#cbd5e1;transform:translateY(0)}.auto_cancellation_wrapper ::ng-deep .btn--danger{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;box-shadow:0 2px 8px #ef44444d}.auto_cancellation_wrapper ::ng-deep .btn--danger:hover:not(:disabled){background:linear-gradient(135deg,#dc2626,#b91c1c);box-shadow:0 4px 12px #ef444466;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--danger:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #ef44444d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us{background:linear-gradient(135deg,#10b981,#059669);box-shadow:0 2px 8px #10b9814d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us:hover:not(:disabled){background:linear-gradient(135deg,#059669,#047857);box-shadow:0 4px 12px #10b98166;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn__spinner{width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.auto_cancellation_wrapper ::ng-deep .isNusk .main_btn,.auto_cancellation_wrapper ::ng-deep .isNusk .btn--primary{background:linear-gradient(135deg,var(--almatar-nusuk-primary),var(--almatar-nusuk-primary))!important;border-radius:33px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LoaderModule }, { kind: "component", type: i1.LoaderComponent, selector: "app-loader", inputs: ["loading", "message"] }, { kind: "component", type: AsideComponent, selector: "almatar-aside", inputs: ["asideTitle", "showHeader", "headerTemplate", "whiteHeader", "showAside", "width", "modal", "closable", "transitionOptions", "interceptClose"], outputs: ["onClose", "closeRequested"] }, { kind: "component", type: AlmatarHotelAutoCancellationSelectRoomsComponent, selector: "almatar-hotel-auto-cancellation-select-rooms", inputs: ["packages", "hotelInfo", "bookingId", "hotelId", "currencyCode"], outputs: ["continueToCancel", "closeModal", "nonRefundableSubmitSuccess", "chatWithAgent"] }, { kind: "component", type: AlmatarHotelAutoCancellationRefundSummaryComponent, selector: "almatar-hotel-auto-cancellation-refund-summary", inputs: ["selectedRooms", "bookingId", "hotelId", "hotelInfo", "selectionSkipped"], outputs: ["keepRoom", "selectRefundOption", "closeModal"] }, { kind: "component", type: AlmatarHotelAutoCancellationRefundMethodComponent, selector: "almatar-hotel-auto-cancellation-refund-method", inputs: ["refundDetailsData", "currencyObj", "refundMethod", "bookingId", "isCancelling", "showBack"], outputs: ["methodSelected", "backRequested", "confirmRequested", "closeModal"] }, { kind: "ngmodule", type: AlmatarIconModule }, { kind: "component", type: ResultOverlayComponent, selector: "app-result-overlay", inputs: ["data", "show"], outputs: ["confirm", "cancel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
526
526
  }
527
527
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationComponent, decorators: [{
528
528
  type: Component,
@@ -541,4 +541,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
541
541
  AlmatarHotelAutoCancellationEndpointsService
542
542
  ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showAside()) {\n <almatar-aside\n\n class=\"auto_cancellation_wrapper\"\n [asideTitle]=\"asideTitle()\"\n [showAside]=\"showAside()\"\n [whiteHeader]=\"true\"\n [showHeader]=\"false\"\n (onClose)=\"onCloseModal()\"\n >\n <!-- Custom Header with 60px height -->\n <div class=\"auto_cancellation__header\">\n @if (canGoBack()) {\n <button class=\"auto_cancellation__header-back\" (click)=\"onGoBack()\" type=\"button\">\n <i class=\"pi pi-arrow-left\"></i>\n </button>\n }\n <div class=\"auto_cancellation__header-content\">\n @if (currentStep() === stepEnum.selectRooms) {\n <h2 class=\"auto_cancellation__header-title\">\n @if (isSinglePackage()) {\n Cancel Rooms\n } @else {\n Select Rooms\n }\n </h2>\n <p class=\"auto_cancellation__header-subtitle\">\n @if (isSinglePackage()) {\n Review and confirm your cancellation\n } @else {\n Choose which room(s) you'd like to cancel\n }\n </p>\n } @else if (currentStep() === stepEnum.refundSummary) {\n <h2 class=\"auto_cancellation__header-title\">Cancel Booking Request</h2>\n <p class=\"auto_cancellation__header-subtitle\">Review your refund summary and proceed</p>\n } @else if (currentStep() === stepEnum.refundMethod) {\n <h2 class=\"auto_cancellation__header-title\">Select Refund Method</h2>\n <p class=\"auto_cancellation__header-subtitle\">Choose how you'd like to receive your refund</p>\n } @else {\n <h2 class=\"auto_cancellation__header-title\">{{ asideTitle() }}</h2>\n <p class=\"auto_cancellation__header-subtitle\">Complete your booking cancellation</p>\n }\n </div>\n <button class=\"auto_cancellation__header-close\" (click)=\"onCloseModal()\" type=\"button\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"auto_cancellation__component\" [class.isNusk]=\"isNusk()\">\n @if (isLoading()) {\n <div class=\"auto_cancellation__loading\">\n <app-loader></app-loader>\n </div>\n }\n\n @if (currentStep() === stepEnum.selectRooms && !isLoading()) {\n <almatar-hotel-auto-cancellation-select-rooms\n [packages]=\"packages()\"\n [hotelInfo]=\"hotelInfo()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.hotelId\"\n [currencyCode]=\"selectedHotelBooking()?.currencyCode || 'SAR'\"\n (continueToCancel)=\"onContinueToCancel($event)\"\n (closeModal)=\"onCloseModal()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n (chatWithAgent)=\"onChatWithAgent()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundSummary && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary\n [selectedRooms]=\"autoCancellationService.selectedRooms()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.id || selectedHotelBooking()?.hpk\"\n [hotelInfo]=\"hotelInfo()\"\n [selectionSkipped]=\"packages().length <= 1\"\n (keepRoom)=\"onKeepRoom()\"\n (selectRefundOption)=\"onSelectRefundOption($event)\"\n (closeModal)=\"onCloseModal()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundMethod && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-method\n [refundDetailsData]=\"refundDetailsData()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [isCancelling]=\"isCancelling()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBackFromRefundMethod()\"\n (confirmRequested)=\"confirmCancellation()\"\n (closeModal)=\"onCloseModal()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n />\n }\n </div>\n </almatar-aside>\n}\n\n@if (showErrorModal()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n@if (showResultOverlay() && resultOverlayData()) {\n <app-result-overlay\n [data]=\"resultOverlayData()!\"\n [show]=\"showResultOverlay()\"\n (confirm)=\"onResultOverlayConfirm()\"\n (cancel)=\"onResultOverlayCancel()\"\n />\n}\n", styles: [".auto_cancellation__header{height:60px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0;gap:16px}.auto_cancellation__header-content{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.auto_cancellation__header-title{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;color:#1e293b;margin:0;line-height:1.3}.auto_cancellation__header-subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;color:#64748b;margin:0;line-height:1.4}.auto_cancellation__header-back{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease;margin-right:8px}.auto_cancellation__header-back i{font-size:18px;color:#64748b}.auto_cancellation__header-back:hover{background:#f1f5f9}.auto_cancellation__header-back:hover i{color:#1e293b}.auto_cancellation__header-back:active{background:#e2e8f0}.auto_cancellation__header-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease}.auto_cancellation__header-close i{font-size:18px;color:#64748b}.auto_cancellation__header-close:hover{background:#f1f5f9}.auto_cancellation__header-close:hover i{color:#1e293b}.auto_cancellation__header-close:active{background:#e2e8f0}.auto_cancellation__component{height:calc(100% - 60px)}.auto_cancellation__loading{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px}.auto_cancellation_wrapper ::ng-deep almatar-hotel-auto-cancellation{display:block;height:100%}.auto_cancellation_wrapper ::ng-deep .p-sidebar-header{display:none!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-content{padding-top:0!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-close{display:none!important}.auto_cancellation_wrapper ::ng-deep .almatar_aside .p-dialog-content{background:var(--almatar-neutral-surface-screen-bg)}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn{min-height:48px;padding:12px 24px;border-radius:10px;font-size:15px;font-weight:600;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center;gap:8px;position:relative;overflow:hidden}.auto_cancellation_wrapper ::ng-deep .main_btn:disabled,.auto_cancellation_wrapper ::ng-deep .btn:disabled{opacity:.5;cursor:not-allowed}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn--primary{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;box-shadow:0 2px 8px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .main_btn:hover:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:hover:not(:disabled){background:linear-gradient(135deg,#2563eb,#1d4ed8);box-shadow:0 4px 12px #3b82f666;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .main_btn:active:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .btn--secondary{background:#f1f5f9;color:#1e293b;border:1px solid #e2e8f0}.auto_cancellation_wrapper ::ng-deep .btn--secondary:hover:not(:disabled){background:#e2e8f0;border-color:#cbd5e1;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--secondary:active:not(:disabled){background:#cbd5e1;transform:translateY(0)}.auto_cancellation_wrapper ::ng-deep .btn--danger{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;box-shadow:0 2px 8px #ef44444d}.auto_cancellation_wrapper ::ng-deep .btn--danger:hover:not(:disabled){background:linear-gradient(135deg,#dc2626,#b91c1c);box-shadow:0 4px 12px #ef444466;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--danger:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #ef44444d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us{background:linear-gradient(135deg,#10b981,#059669);box-shadow:0 2px 8px #10b9814d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us:hover:not(:disabled){background:linear-gradient(135deg,#059669,#047857);box-shadow:0 4px 12px #10b98166;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn__spinner{width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.auto_cancellation_wrapper ::ng-deep .isNusk .main_btn,.auto_cancellation_wrapper ::ng-deep .isNusk .btn--primary{background:linear-gradient(135deg,var(--almatar-nusuk-primary),var(--almatar-nusuk-primary))!important;border-radius:33px!important}\n"] }]
543
543
  }], ctorParameters: () => [] });
544
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvaG90ZWwtY2FuY2VsL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixVQUFVLEVBR1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdGQUF3RixDQUFDO0FBQzNJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDekcsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sb0RBQW9ELENBQUM7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QkFDakMsZ0RBQWdEO3dCQUNoRCxrREFBa0Q7d0JBQ2xELGlEQUFpRDt3QkFDakQsaUJBQWlCO3dCQUNqQixzQkFBc0I7cUJBQ3ZCLGFBQ1U7d0JBQ1QsbUNBQW1DO3dCQUNuQyw0Q0FBNEM7cUJBQzdDLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNpZGVDb21wb25lbnQgfSBmcm9tICcuLi9hbG1hdGFyLWFzaWRlL2FzaWRlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBEZXN0cm95UmVmLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBvdXRwdXQsXG4gIGlucHV0LFxuICBlZmZlY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWFuYWdlQm9va2luZ0ZhaWxlZE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudHMvbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsL21hbmFnZS1ib29raW5nLWZhaWxlZC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZGVyTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZHVsZXMvbG9hZGVyL2xvYWRlci5tb2R1bGUnO1xuaW1wb3J0IHsgSG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9ob3RlbC1tYW5hZ2UtYm9va2luZy9ob3RlbC1tYW5hZ2UtYm9va2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bSB9IGZyb20gJy4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1zdGVwLmVudW0nO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZSxcbiAgSUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2Vcbn0gZnJvbSAnLi9zZXJ2aWNlcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLWVuZHBvaW50cy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8sXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZSxcbiAgSUJvb2tpbmdQYWNrYWdlXG59IGZyb20gJy4vaW50ZXJmYWNlcy9pLWFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIElSZWZ1bmREZXRhaWxzRGF0YSBhcyBJRmxpZ2h0UmVmdW5kRGV0YWlsc0RhdGEsXG4gIFJlZnVuZFByZWZlcnJlZE1ldGhvZCxcbiAgTG95YWx0eVBheW1lbnRUeXBlXG59IGZyb20gJy4uL3NoYXJlZC9pbnRlcmZhY2VzL2ktZmxpZ2h0LXJlZnVuZC1kZXRhaWxzJztcbmltcG9ydCB7IElIb3RlbEJvb2tpbmdEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Jvb2tpbmcudHlwZXMnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlbGVjdFJvb21zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5L2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnkuY29tcG9uZW50JztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRNZXRob2RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtbWV0aG9kL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLW1ldGhvZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVzdWx0T3ZlcmxheUNvbXBvbmVudCwgUmVzdWx0T3ZlcmxheURhdGEgfSBmcm9tICcuL2NvbXBvbmVudHMvcmVzdWx0LW92ZXJsYXkvcmVzdWx0LW92ZXJsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IEhvdGVsTWFuYWdlQm9va2luZ0FzaWRlVGFiRW51bSB9IGZyb20gJy4uL3NoYXJlZC9lbnVtcy9ob3RlbC1tYW5hZ2UtYm9va2luZy1hc2lkZS10YWIuZW51bSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGdldEN1cnJlbnRDdXJyZW5jeSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zdG9yZS9zZWxlY3RvcnMvY3VycmVuY3kuc2VsZWN0b3JzJztcbmltcG9ydCB7IGVudmlyb25tZW50cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQWxtYXRhckljb25Nb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kdWxlcy9hbG1hdGFyLWljb24vYWxtYXRhci1pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IGxveWFsdHlQb2ludHNNZXRob2RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIExvYWRlck1vZHVsZSxcbiAgICBBc2lkZUNvbXBvbmVudCxcbiAgICBNYW5hZ2VCb29raW5nRmFpbGVkTW9kYWxDb21wb25lbnQsXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlbGVjdFJvb21zQ29tcG9uZW50LFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5Q29tcG9uZW50LFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRNZXRob2RDb21wb25lbnQsXG4gICAgQWxtYXRhckljb25Nb2R1bGUsXG4gICAgUmVzdWx0T3ZlcmxheUNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU2VydmljZSxcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlXG4gICk7XG5cbiAgcmVhZG9ubHkgYXV0b0NhbmNlbGxhdGlvblNlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2VcbiAgKTtcblxuICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlID0gaW5qZWN0KEhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2VcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KFN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzaGFyZWRTZXJ2aWNlID0gaW5qZWN0KFNoYXJlZFNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSG90ZWxCb29raW5nID0gaW5wdXQ8SUhvdGVsQm9va2luZ0RhdGEgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBjbG9zZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgY2FuY2VsbGF0aW9uU3VjY2VzcyA9IG91dHB1dDxJQXV0b0NhbmNlbGxhdGlvblByb2Nlc3NSZXNwb25zZT4oKTtcbiAgcmVhZG9ubHkgbm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjaGF0V2l0aEFnZW50ID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgc2hvd0NvbmZpcm1Nb2RhbCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dFcnJvck1vZGFsID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd0FzaWRlID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSBpc0xvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBpc0NhbmNlbGxpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBob3RlbE1hbmFnZUVycm9yID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICByZWFkb25seSBpc051c2sgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBzaG93UmVzdWx0T3ZlcmxheSA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHJlc3VsdE92ZXJsYXlEYXRhID0gc2lnbmFsPFJlc3VsdE92ZXJsYXlEYXRhIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHJvb21zID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdPihbXSk7XG4gIHJlYWRvbmx5IHBhY2thZ2VzID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdPihbXSk7XG4gIHJlYWRvbmx5IGhvdGVsSW5mbyA9IHNpZ25hbDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50Q3VycmVuY3kgPSBzaWduYWw8YW55PihudWxsKTtcbiAgcmVhZG9ubHkgcmVmdW5kRGV0YWlsc0RhdGEgPSBzaWduYWw8SUZsaWdodFJlZnVuZERldGFpbHNEYXRhIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkUGFja2FnZUlkcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICByZWFkb25seSByZWZ1bmRNZXRob2QgPSBzaWduYWw8UmVmdW5kUHJlZmVycmVkTWV0aG9kPignd2FsbGV0Jyk7XG4gIHJlYWRvbmx5IHJlZnVuZFJlc3BvbnNlRGF0YSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHN0ZXBFbnVtID0gQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtO1xuICByZWFkb25seSBjdXJyZW50U3RlcCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5jdXJyZW50U3RlcCgpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNTaW5nbGVSb29tID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yb29tcygpLmxlbmd0aCA9PT0gMSk7XG4gIHJlYWRvbmx5IGlzU2luZ2xlUGFja2FnZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFja2FnZXMoKS5sZW5ndGggPT09IDEpO1xuXG4gIC8vIEdldCBzdXBwbGllciBmcm9tIGJvb2tpbmcgb3IgZmlyc3QgcGFja2FnZVxuICByZWFkb25seSBib29raW5nU3VwcGxpZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tpbmcgPSB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk7XG4gICAgaWYgKCFib29raW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gVHJ5IHRvIGdldCBzdXBwbGllciBmcm9tIGJvb2tpbmcgbGV2ZWwgZmlyc3RcbiAgICBpZiAoKGJvb2tpbmcgYXMgYW55KS5zdXBwbGllcikge1xuICAgICAgcmV0dXJuIChib29raW5nIGFzIGFueSkuc3VwcGxpZXI7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIGdldCBmcm9tIGZpcnN0IHBhY2thZ2VcbiAgICBjb25zdCBwYWNrYWdlcyA9IHRoaXMucGFja2FnZXMoKTtcbiAgICByZXR1cm4gcGFja2FnZXMubGVuZ3RoID4gMCA/IHBhY2thZ2VzWzBdLnN1cHBsaWVyIDogdW5kZWZpbmVkO1xuICB9KTtcblxuICAvLyBDb21wdXRlZCB0b3RhbHMgZm9yIGFkdWx0cywgY2hpbGRyZW4sIGluZmFudHMgZnJvbSBib29raW5nIHBhY2thZ2VzXG4gIHJlYWRvbmx5IHRvdGFsQWR1bHRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tpbmcgPSB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk7XG4gICAgaWYgKCFib29raW5nPy5wYWNrYWdlcykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBib29raW5nLnBhY2thZ2VzLnJlZHVjZSgodG90YWw6IG51bWJlciwgcGtnOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJvb21zID0gcGtnLnJvb21zIHx8IFtdO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdG90YWwgK1xuICAgICAgICByb29tcy5yZWR1Y2UoKHN1bTogbnVtYmVyLCByb29tOiBhbnkpID0+IHN1bSArIChyb29tLmFkdWx0c051bSB8fCAwKSwgMClcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsQ2hpbGRyZW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcbiAgICBpZiAoIWJvb2tpbmc/LnBhY2thZ2VzKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2tpbmcucGFja2FnZXMucmVkdWNlKCh0b3RhbDogbnVtYmVyLCBwa2c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0b3RhbCArXG4gICAgICAgIHJvb21zLnJlZHVjZShcbiAgICAgICAgICAoc3VtOiBudW1iZXIsIHJvb206IGFueSkgPT4gc3VtICsgKHJvb20uY2hpbGRyZW5OdW0gfHwgMCksXG4gICAgICAgICAgMFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbEluZmFudHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcbiAgICBpZiAoIWJvb2tpbmc/LnBhY2thZ2VzKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2tpbmcucGFja2FnZXMucmVkdWNlKCh0b3RhbDogbnVtYmVyLCBwa2c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0b3RhbCArXG4gICAgICAgIHJvb21zLnJlZHVjZShcbiAgICAgICAgICAoc3VtOiBudW1iZXIsIHJvb206IGFueSkgPT4gc3VtICsgKHJvb20uaW5mYW50c051bSB8fCAwKSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFzaWRlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuY3VycmVudFN0ZXAoKTtcbiAgICBzd2l0Y2ggKHN0ZXApIHtcbiAgICAgIGNhc2UgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnNlbGVjdFJvb21zOlxuICAgICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZVBhY2thZ2UoKSA/ICdDb25maXJtIENhbmNlbGxhdGlvbicgOiAnU2VsZWN0IFJvb21zJztcbiAgICAgIGNhc2UgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnk6XG4gICAgICAgIHJldHVybiAnQ2FuY2VsIEJvb2tpbmcgUmVxdWVzdCc7XG4gICAgICBjYXNlIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2Q6XG4gICAgICAgIHJldHVybiAnU2VsZWN0IFJlZnVuZCBNZXRob2QnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdDYW5jZWwgQm9va2luZyc7XG4gICAgfVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5Ib3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nLm5leHQoXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKVxuICAgICAgKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdzZWxlY3RlZEhvdGVsQm9va2luZycsIHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKSk7XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVmdW5kRGV0YWlsc0RhdGEnLCB0aGlzLnJlZnVuZERldGFpbHNEYXRhKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGNsb3NlSWNvbk5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEFwcExhbmd1YWdlKCk7XG4gICAgcmV0dXJuIGxhbmcgPT09ICdhcicgPyAnYXJyb3ctbGVmdCcgOiAnYXJyb3ctcmlnaHQnO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplUXVlcnlQYXJhbXMoKTtcbiAgICB0aGlzLmxvYWRCb29raW5nRGF0YUZyb21QYWNrYWdlcygpO1xuICAgIHRoaXMuaW5pdEN1cnJlbmN5KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDdXJyZW5jeSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KGdldEN1cnJlbnRDdXJyZW5jeSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGN1cnJlbmN5KSA9PiAhIWN1cnJlbmN5KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbmN5KSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnJlbmN5LnNldChjdXJyZW5jeSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2UucmVzZXQoKTtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlLmNsZWFyU2VsZWN0ZWRQYWNrYWdlSWRzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVRdWVyeVBhcmFtcygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgICBpZiAocGFyYW1zWydza2lwQ2hlY2snXSkge1xuICAgICAgICAgIHRoaXMuaXNOdXNrLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRCb29raW5nRGF0YUZyb21QYWNrYWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcblxuICAgIGlmIChib29raW5nKSB7XG4gICAgICB0aGlzLnByb2Nlc3NCb29raW5nRGF0YShib29raW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAuc3Vic2NyaWJlKChzZXJ2aWNlQm9va2luZykgPT4ge1xuICAgICAgICAgIGlmIChzZXJ2aWNlQm9va2luZykge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQm9va2luZ0RhdGEoc2VydmljZUJvb2tpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NCb29raW5nRGF0YShib29raW5nOiBJSG90ZWxCb29raW5nRGF0YSk6IHZvaWQge1xuICAgIGNvbnN0IGhvdGVsSW5mb0RhdGE6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uSG90ZWxJbmZvID0ge1xuICAgICAgaG90ZWxOYW1lOiBib29raW5nLmhvdGVsTmFtZSB8fCAnJyxcbiAgICAgIGhvdGVsSW1hZ2U6IGJvb2tpbmcuY292ZXJJbWFnZSB8fCAnJyxcbiAgICAgIGNoZWNrSW46IGJvb2tpbmcuZGF0ZUZyb20gfHwgYm9va2luZz8uZnJvbT8uX2ksXG4gICAgICBjaGVja091dDogYm9va2luZy5kYXRlVG8gfHwgYm9va2luZz8udG8/Ll9pLFxuICAgICAgdG90YWxSb29tczogYm9va2luZy5wYWNrYWdlcz8ubGVuZ3RoIHx8IGJvb2tpbmcucm9vbXMgfHwgMSxcbiAgICAgIG5pZ2h0czpcbiAgICAgICAgYm9va2luZy5udW1iZXJPZk5pZ2h0cyB8fFxuICAgICAgICBib29raW5nLm5pZ2h0TnVtYmVyIHx8XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTmlnaHRzKGJvb2tpbmcuZGF0ZUZyb20sIGJvb2tpbmcuZGF0ZVRvKSxcbiAgICAgIGNoZWNrSW5UaW1lOiBib29raW5nLmNoZWNrSW5UaW1lPy5zcGxpdCgnICcpWzBdLFxuICAgICAgY2hlY2tPdXRUaW1lOiBib29raW5nLmNoZWNrT3V0VGltZT8uc3BsaXQoJyAnKVswXVxuICAgIH07XG4gICAgdGhpcy5ob3RlbEluZm8uc2V0KGhvdGVsSW5mb0RhdGEpO1xuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0SG90ZWxJbmZvKGhvdGVsSW5mb0RhdGEpO1xuXG4gICAgLy8gTWFwIHRvIGJvdGggcm9vbXMgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSBhbmQgcGFja2FnZXMgKG5ldyBzdHJ1Y3R1cmUpXG4gICAgY29uc3QgbWFwcGVkUm9vbXMgPSB0aGlzLm1hcFBhY2thZ2VzVG9Sb29tcyhib29raW5nKTtcbiAgICB0aGlzLnJvb21zLnNldChtYXBwZWRSb29tcyk7XG5cbiAgICBjb25zdCBtYXBwZWRQYWNrYWdlcyA9IHRoaXMubWFwQm9va2luZ1RvUGFja2FnZXMoYm9va2luZyk7XG4gICAgdGhpcy5wYWNrYWdlcy5zZXQobWFwcGVkUGFja2FnZXMpO1xuXG4gICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5zZXRTZWxlY3RlZFJvb21zKG1hcHBlZFJvb21zKTtcblxuICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIG1hcFBhY2thZ2VzVG9Sb29tcyhcbiAgICBib29raW5nOiBhbnlcbiAgKTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tW10ge1xuICAgIGNvbnN0IG5pZ2h0cyA9XG4gICAgICBib29raW5nLm51bWJlck9mTmlnaHRzIHx8XG4gICAgICBib29raW5nLm5pZ2h0TnVtYmVyIHx8XG4gICAgICB0aGlzLmNhbGN1bGF0ZU5pZ2h0cyhib29raW5nLmZyb20sIGJvb2tpbmcudG8pO1xuICAgIGNvbnN0IHBhY2thZ2VzOiBJQm9va2luZ1BhY2thZ2VbXSA9IGJvb2tpbmcucGFja2FnZXMgfHwgW107XG5cbiAgICByZXR1cm4gcGFja2FnZXMuZmxhdE1hcCgocGtnOiBJQm9va2luZ1BhY2thZ2UsIHBrZ0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHJvb21zID0gcGtnLnJvb21zIHx8IFtdO1xuICAgICAgcmV0dXJuIHJvb21zLm1hcCgocm9vbTogYW55LCByb29tSW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgcGFja2FnZUlkOiBwa2cuaWQgfHwgU3RyaW5nKHBrZ0luZGV4ICsgMSksXG4gICAgICAgIHJvb21JZDogcm9vbT8ucm9vbUlkIHx8IGAke3BrZy5pZH0tJHtyb29tSW5kZXh9YCxcbiAgICAgICAgcm9vbU5hbWU6IHJvb20/LnJvb21OYW1lIHx8IGBSb29tICR7cm9vbUluZGV4ICsgMX1gLFxuICAgICAgICByb29tVHlwZTogcm9vbT8ucm9vbVR5cGUgfHwgJ1N0YW5kYXJkIFJvb20nLFxuICAgICAgICBtZWFsUGxhbjogcm9vbT8ucm9vbUJhc2lzIHx8ICcnLFxuICAgICAgICBpc1JlZnVuZGFibGU6IHBrZy5pc1JlZnVuZGFibGUgIT09IGZhbHNlLFxuICAgICAgICBpc0NhbmNlbGxlZDogcGtnLmlzQ2FuY2VsbGVkLFxuICAgICAgICBtYW51YWxSZWZ1bmRSZXF1ZXN0OiAhcGtnLmlzUmVmdW5kYWJsZSxcbiAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIG5pZ2h0czogdGhpcy5ob3RlbEluZm8oKT8ubmlnaHRzIHx8IG5pZ2h0cyxcbiAgICAgICAgcm9vbUFtb3VudDogMCxcbiAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgICByZWZ1bmRBbW91bnQ6IDAsXG4gICAgICAgIGJlZFR5cGU6IHJvb20/LmJlZFR5cGUgfHwgJycsXG4gICAgICAgIHJvb21WaWV3OiByb29tPy5yb29tVmlldyB8fCAnJyxcbiAgICAgICAgcm9vbUJhc2lzOiByb29tPy5yb29tQmFzaXMgfHwgJycsXG4gICAgICAgIHJlZnVuZGFiaWxpdHk6IHBrZy5pc1JlZnVuZGFibGUsXG4gICAgICAgIHJlZnVuZGFibGVVbnRpbDogcGtnLnJlZnVuZGFibGVVbnRpbCB8fCAnJyxcbiAgICAgICAgYWR1bHRzTnVtOiByb29tPy5hZHVsdHNOdW0gfHwgMCxcbiAgICAgICAgY2hpbGRyZW5OdW06IHJvb20/LmNoaWxkcmVuTnVtIHx8IDAsXG4gICAgICAgIHBhc3Nlbmdlck5hbWU6IHJvb20/LnBhc3NlbmdlcnM/Lm5hbWUgfHwgJydcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQm9va2luZ1RvUGFja2FnZXMoXG4gICAgYm9va2luZzogYW55XG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdIHtcbiAgICBjb25zdCBib29raW5nUGFja2FnZXM6IElCb29raW5nUGFja2FnZVtdID0gYm9va2luZy5wYWNrYWdlcyB8fCBbXTtcblxuICAgIHJldHVybiBib29raW5nUGFja2FnZXMubWFwKChwa2c6IElCb29raW5nUGFja2FnZSwgcGtnSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICBjb25zdCBmaXJzdFJvb20gPSByb29tc1swXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFja2FnZUlkOiBwa2cuaWQgfHwgU3RyaW5nKHBrZ0luZGV4ICsgMSksXG4gICAgICAgIHBhY2thZ2VOYW1lOiBmaXJzdFJvb20/LnJvb21OYW1lIHx8IGBQYWNrYWdlICR7cGtnSW5kZXggKyAxfWAsXG4gICAgICAgIGJvYXJkQmFzaXM6IGZpcnN0Um9vbT8ucm9vbUJhc2lzIHx8ICcnLFxuICAgICAgICBpc1JlZnVuZGFibGU6IHBrZy5pc1JlZnVuZGFibGUgIT09IGZhbHNlLFxuICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNDYW5jZWxsZWQ6IHBrZy5pc0NhbmNlbGxlZCxcbiAgICAgICAgcmVmdW5kYWJpbGl0eTogcGtnLmlzUmVmdW5kYWJsZSxcbiAgICAgICAgcmVmdW5kYWJsZVVudGlsOiBwa2cucmVmdW5kYWJsZVVudGlsIHx8ICcnLFxuICAgICAgICByb29tczogcm9vbXMubWFwKChyb29tOiBhbnksIHJvb21JbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAgIHJvb21JZDogcm9vbT8ucm9vbUlkIHx8IGAke3BrZy5pZH0tJHtyb29tSW5kZXh9YCxcbiAgICAgICAgICByb29tTmFtZTogcm9vbT8ucm9vbU5hbWUgfHwgYFJvb20gJHtyb29tSW5kZXggKyAxfWAsXG4gICAgICAgICAgcm9vbVR5cGU6IHJvb20/LnJvb21UeXBlIHx8ICdTdGFuZGFyZCBSb29tJyxcbiAgICAgICAgICBiZWRUeXBlOiByb29tPy5iZWRUeXBlIHx8ICcnLFxuICAgICAgICAgIHJvb21CYXNpczogcm9vbT8ucm9vbUJhc2lzIHx8ICcnXG4gICAgICAgIH0pKSxcbiAgICAgICAgcm9vbUFtb3VudDogMCxcbiAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgICByZWZ1bmRBbW91bnQ6IDAsXG4gICAgICAgIG1hbnVhbFJlZnVuZFJlcXVlc3Q6ICFwa2cuaXNSZWZ1bmRhYmxlLFxuICAgICAgICBjYW5jZWxsZWRCZWZvcmU6IGZhbHNlLFxuICAgICAgICBjYW5jZWxsYXRpb25Qb2xpY2llczogcGtnLmNhbmNlbGxhdGlvblBvbGljaWVzIHx8IFtdLFxuICAgICAgICBDYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3M6IHBrZy5jYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3MsXG4gICAgICAgIHN1cHBsaWVyOiBwa2cuc3VwcGxpZXJcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU5pZ2h0cyhmcm9tOiBhbnksIHRvOiBhbnkpOiBudW1iZXIge1xuICAgIGlmICghZnJvbSB8fCAhdG8pIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoZnJvbS5kaWZmICYmIHR5cGVvZiBmcm9tLmRpZmYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0by5kaWZmKGZyb20sICdkYXlzJykgfHwgMTtcbiAgICB9XG4gICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tKTtcbiAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZSh0byk7XG4gICAgY29uc3QgZGlmZlRpbWUgPSBNYXRoLmFicyh0b0RhdGUuZ2V0VGltZSgpIC0gZnJvbURhdGUuZ2V0VGltZSgpKTtcbiAgICBjb25zdCBkaWZmRGF5cyA9IE1hdGguY2VpbChkaWZmVGltZSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XG4gICAgcmV0dXJuIGRpZmZEYXlzIHx8IDE7XG4gIH1cblxuICBvbkNvbnRpbnVlVG9DYW5jZWwoXG4gICAgc2VsZWN0ZWRQYWNrYWdlczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlW11cbiAgKTogdm9pZCB7XG4gICAgLy8gQ29udmVydCBwYWNrYWdlcyB0byByb29tcyBmb3JtYXQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgc2VydmljZVxuICAgIGNvbnN0IHNlbGVjdGVkUm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdID1cbiAgICAgIHNlbGVjdGVkUGFja2FnZXMuZmxhdE1hcCgocGtnKSA9PlxuICAgICAgICBwa2cucm9vbXMubWFwKChyb29tKSA9PiAoe1xuICAgICAgICAgIHBhY2thZ2VJZDogcGtnLnBhY2thZ2VJZCxcbiAgICAgICAgICByb29tSWQ6IHJvb20ucm9vbUlkLFxuICAgICAgICAgIHJvb21OYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgIHJvb21UeXBlOiByb29tLnJvb21UeXBlLFxuICAgICAgICAgIG1lYWxQbGFuOiByb29tLnJvb21CYXNpcyxcbiAgICAgICAgICBpc1JlZnVuZGFibGU6IHBrZy5pc1JlZnVuZGFibGUsXG4gICAgICAgICAgaXNDYW5jZWxsZWQ6IHBrZy5pc0NhbmNlbGxlZCxcbiAgICAgICAgICBpc1NlbGVjdGVkOiBwa2cuaXNTZWxlY3RlZCxcbiAgICAgICAgICBuaWdodHM6IDAsXG4gICAgICAgICAgcm9vbUFtb3VudDogcGtnLnJvb21BbW91bnQsXG4gICAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiBwa2cuY2FuY2VsbGF0aW9uRmVlLFxuICAgICAgICAgIHJlZnVuZEFtb3VudDogcGtnLnJlZnVuZEFtb3VudCxcbiAgICAgICAgICBiZWRUeXBlOiByb29tLmJlZFR5cGUsXG4gICAgICAgICAgcm9vbUJhc2lzOiByb29tLnJvb21CYXNpcyxcbiAgICAgICAgICByZWZ1bmRhYmlsaXR5OiBwa2cucmVmdW5kYWJpbGl0eSxcbiAgICAgICAgICByZWZ1bmRhYmxlVW50aWw6IHBrZy5yZWZ1bmRhYmxlVW50aWwsXG4gICAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiBwa2cuY2FuY2VsbGVkQmVmb3JlLFxuICAgICAgICAgIG1hbnVhbFJlZnVuZFJlcXVlc3Q6IHBrZy5tYW51YWxSZWZ1bmRSZXF1ZXN0XG4gICAgICAgIH0pKVxuICAgICAgKTtcblxuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0U2VsZWN0ZWRSb29tcyhzZWxlY3RlZFJvb21zKTtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLnNldEN1cnJlbnRTdGVwKFxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnlcbiAgICApO1xuICB9XG5cbiAgb25LZWVwUm9vbSgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLnNldEN1cnJlbnRTdGVwKFxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnNlbGVjdFJvb21zXG4gICAgKTtcbiAgfVxuXG4gIG9uU2VsZWN0UmVmdW5kT3B0aW9uKGRhdGE6IHtcbiAgICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbiAgICBwYXlvdXQ6IGFueTtcbiAgICB0b3RhbFJlZnVuZDogbnVtYmVyO1xuICAgIHJlc3BvbnNlRGF0YTogYW55O1xuICB9KTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGVuYW50IC0gcmVkaXJlY3QgdG8gV2hhdHNBcHAgZm9yIHRlbmFudCBib29raW5nc1xuICAgIGlmIChlbnZpcm9ubWVudHMuaXNUZW5hbnQpIHtcbiAgICAgIHRoaXMuaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZS5zZXRBY3RpdmVBc2lkZVRhYihcbiAgICAgICAgSG90ZWxNYW5hZ2VCb29raW5nQXNpZGVUYWJFbnVtLndoYXRzQXBwQWdlbnRcbiAgICAgICk7XG4gICAgICB0aGlzLnNob3dBc2lkZS5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdSZWZ1bmQgb3B0aW9uIHNlbGVjdGVkOicsIGRhdGEpO1xuXG4gICAgdGhpcy5zZWxlY3RlZFBhY2thZ2VJZHMuc2V0KGRhdGEucGFja2FnZUlkcyk7XG4gICAgdGhpcy5yZWZ1bmRSZXNwb25zZURhdGEuc2V0KGRhdGEucmVzcG9uc2VEYXRhKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gZGF0YT8ucmVzcG9uc2VEYXRhO1xuICAgIGNvbnN0IHBheW91dCA9IHJlc3BvbnNlPy5wYXlvdXQgfHwgZGF0YS5wYXlvdXQ7XG4gICAgY29uc3QgdG90YWxzID0gcmVzcG9uc2U/LnRvdGFscztcblxuICAgIC8vIGNvbnN0IHdhbGxldFJlZnVuZCA9IHBheW91dD8ud2FsbGV0IHx8IHBheW91dD8ubG95YWx0eVRvV2FsbGV0O1xuICAgIGNvbnN0IHdhbGxldFJlZnVuZCA9IHBheW91dD8ud2FsbGV0O1xuXG4gICAgY29uc3QgY2FyZFJlZnVuZCA9IHBheW91dD8uY2FyZCA/PyAwO1xuICAgIGNvbnN0IHRhYmJ5UmVmdW5kID0gcGF5b3V0Py50YWJieSA/PyBwYXlvdXQ/LnRhYmJ5ID8/IDA7XG4gICAgY29uc3QgdGFtYXJhUmVmdW5kID0gcGF5b3V0Py50YW1hcmEgPz8gcGF5b3V0Py50YW1hcmEgPz8gMDtcblxuICAgIC8vIENoZWNrIGlmIGZ1bGwgd2FsbGV0IHJlZnVuZCBpcyBhbGxvd2VkIGJhc2VkIG9uIHBheW91dCBicmVha2Rvd25cbiAgICAvLyBXYWxsZXQgcmVmdW5kIGlzIGFsbG93ZWQgaWYgdGhlcmUncyBubyBjYXJkL3RhYmJ5L3RhbWFyYSBwb3J0aW9uXG4gICAgY29uc3QgaGFzTm9uV2FsbGV0UmVmdW5kID0gdGFiYnlSZWZ1bmQgPiAwIHx8IHRhbWFyYVJlZnVuZCA+IDA7XG4gICAgY29uc3QgdG90YWxSZWZ1bmRBbW91bnQgPSBwYXlvdXQ/LmN1cnJlbnQgPz8gZGF0YS50b3RhbFJlZnVuZDtcbiAgICBjb25zdCBpc0Z1bGxXYWxsZXRBbGxvd2VkID1cbiAgICAgICghaGFzTm9uV2FsbGV0UmVmdW5kICYmIHdhbGxldFJlZnVuZCA+IDApIHx8IGNhcmRSZWZ1bmQgPiAwO1xuXG4gICAgY29uc3QgbG95YWx0eVBvaW50c1ZhbHVlID1cbiAgICAgIHBheW91dD8ubG95YWx0eVRvV2FsbGV0IHx8XG4gICAgICB0b3RhbHM/LndhbGEgfHxcbiAgICAgIHRvdGFscz8ucWl0YWYgfHxcbiAgICAgIHRvdGFscz8ubW9rYWZhIHx8XG4gICAgICB0b3RhbHM/Lmhhc3NhZCB8fFxuICAgICAgdG90YWxzPy55Z2c7XG5cbiAgICAvLyBCdWlsZCByZWZ1bmQgZGV0YWlscyBkYXRhIGZvciB0aGUgbWV0aG9kIHNlbGVjdG9yXG4gICAgdGhpcy5yZWZ1bmREZXRhaWxzRGF0YS5zZXQoe1xuICAgICAgdG90YWxSZWZ1bmRBbW91bnQsXG4gICAgICB3YWxsZXRSZWZ1bmRBbW91bnQ6IHBheW91dD8ud2FsbGV0LFxuICAgICAgdG90YWxDYXJkUmVmdW5kQW1vdW50OiBjYXJkUmVmdW5kICsgdGFiYnlSZWZ1bmQgKyB0YW1hcmFSZWZ1bmQsXG4gICAgICBpc0Z1bGxXYWxsZXRSZWZ1bmRBbGxvd2VkOiBpc0Z1bGxXYWxsZXRBbGxvd2VkLFxuICAgICAgY3VycmVuY3k6IHJlc3BvbnNlPy5jdXJyZW5jeSxcbiAgICAgIGlzUmVmdW5kYWJsZTogcmVzcG9uc2U/LmZsYWdzPy5yZWZ1bmRhYmxlLFxuICAgICAgdG90YWxMb3lhbHR5UG9pbnRzUmVmdW5kQW1vdW50OiBsb3lhbHR5UG9pbnRzVmFsdWUsXG4gICAgICAvLyBQYXNzIHBheW1lbnQgbWV0aG9kIGluZm8gZm9yIHByb3BlciBsYWJlbGluZ1xuICAgICAgcGF5bWVudE1ldGhvZEN1c3RvbWVyVXNlZDogdGhpcy5kZXRlcm1pbmVQYXltZW50TWV0aG9kKHRvdGFscywgcGF5b3V0KSxcbiAgICAgIC8vIEFkZGl0aW9uYWwgZmllbGRzIGZvciBwcm9wZXIgbG95YWx0eSBwcm9ncmFtIGxhYmVsaW5nIGFuZCBzcGxpdCByZWZ1bmQgZGlzcGxheVxuICAgICAgbG95YWx0eVBheW1lbnRUeXBlOiB0aGlzLmRldGVybWluZUxveWFsdHlUeXBlKHRvdGFscywgcGF5b3V0KSxcbiAgICAgIHRvdGFsTG95YWx0eVBvaW50czogbG95YWx0eVBvaW50c1ZhbHVlLFxuICAgICAgYm9va2luZ0lkOiB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmJvb2tpbmdJZFxuICAgIH0pO1xuXG4gICAgLy8gRGVmYXVsdCB0byB3YWxsZXQgaWYgYWxsb3dlZCwgb3RoZXJ3aXNlIG9yaWdpbmFsUGF5bWVudE1ldGhvZFxuICAgIGlmIChpc0Z1bGxXYWxsZXRBbGxvd2VkICYmIHdhbGxldFJlZnVuZCA+IDApIHtcbiAgICAgIHRoaXMucmVmdW5kTWV0aG9kLnNldCgnd2FsbGV0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVmdW5kTWV0aG9kLnNldCgnb3JpZ2luYWxQYXltZW50TWV0aG9kJyk7XG4gICAgfVxuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kTWV0aG9kXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBwYXltZW50IG1ldGhvZCBsYWJlbCBiYXNlZCBvbiB0b3RhbHMvcGF5b3V0IGJyZWFrZG93bi5cbiAgICogUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZ2F0ZXdheSBjb2RlIGZvciBwcm9wZXIgbGFiZWxpbmcuXG4gICAqL1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2FyZC9pbnN0YWxsbWVudCBwYXltZW50IG1ldGhvZCBmb3IgdGhlIGNhcmQgcm93IGxhYmVsLlxuICAgKiBMb3lhbHR5IHByb2dyYW1zIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgZGV0ZXJtaW5lTG95YWx0eVR5cGUoKS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lUGF5bWVudE1ldGhvZCh0b3RhbHM6IGFueSwgcGF5b3V0OiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICgocGF5b3V0Py50YWJieSA/PyB0b3RhbHM/LnRhYmJ5ID8/IDApID4gMCkge1xuICAgICAgcmV0dXJuICdUQic7IC8vIFRhYmJ5XG4gICAgfVxuICAgIGlmICgocGF5b3V0Py50YW1hcmEgPz8gdG90YWxzPy50YW1hcmEgPz8gMCkgPiAwKSB7XG4gICAgICByZXR1cm4gJ1RNJzsgLy8gVGFtYXJhXG4gICAgfVxuICAgIGlmICgocGF5b3V0Py5jYXJkID8/IHRvdGFscz8uY2FyZCA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnQ0gnOyAvLyBDYXJkXG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBsb3lhbHR5IHBheW1lbnQgdHlwZSBmb3IgcHJvcGVyIGxhYmVsaW5nIGluIHNwbGl0IHJlZnVuZCByb3dzLlxuICAgKiBSZXR1cm5zIHRoZSBsb3lhbHR5IHByb2dyYW0gY29kZSAoZS5nLiwgJ1FJVEFGJywgJ1JBSkhJJykgaWYgYXBwbGljYWJsZS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lTG95YWx0eVR5cGUoXG4gICAgdG90YWxzOiBhbnksXG4gICAgcGF5b3V0OiBhbnlcbiAgKTogTG95YWx0eVBheW1lbnRUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoKHRvdGFscz8ubW9rYWZhID8/IDApID4gMCkge1xuICAgICAgcmV0dXJuICdBbFJhamhpTW9rYWZhYSc7XG4gICAgfVxuICAgIGlmICgodG90YWxzPy5xaXRhZiA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnUWl0YWYnO1xuICAgIH1cbiAgICBpZiAoKHRvdGFscz8ud2FsYSA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnV2FsYSc7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChwYXlvdXQ/LmxveWFsdHlUb1dhbGxldCA/PyAwKSA+IDAgfHxcbiAgICAgIChwYXlvdXQ/LmxveWFsdHlQb2ludHMgPz8gMCkgPiAwXG4gICAgKSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgc3BlY2lmaWMgbG95YWx0eSB0eXBlIGZyb20gdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCBsb3lhbHR5VHlwZSA9IHRvdGFscz8ubG95YWx0eVR5cGUgYXMgTG95YWx0eVBheW1lbnRUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKFxuICAgICAgICBsb3lhbHR5VHlwZSAmJlxuICAgICAgICBbXG4gICAgICAgICAgJ0FsUmFqaGlNb2thZmFhJyxcbiAgICAgICAgICAnUWl0YWYnLFxuICAgICAgICAgICdXYWxhJyxcbiAgICAgICAgICAnQUxGVVJTQU4nLFxuICAgICAgICAgICdBTE1BVEFSX1BPSU5UUydcbiAgICAgICAgXS5pbmNsdWRlcyhsb3lhbHR5VHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbG95YWx0eVR5cGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBvbk1ldGhvZFNlbGVjdGVkKG1ldGhvZDogUmVmdW5kUHJlZmVycmVkTWV0aG9kKTogdm9pZCB7XG4gICAgdGhpcy5yZWZ1bmRNZXRob2Quc2V0KG1ldGhvZCk7XG4gIH1cblxuICBvbkJhY2tGcm9tUmVmdW5kTWV0aG9kKCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kU3VtbWFyeVxuICAgICk7XG4gIH1cblxuICBvbkdvQmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5jdXJyZW50U3RlcCgpO1xuICAgIHN3aXRjaCAoc3RlcCkge1xuICAgICAgY2FzZSBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kU3VtbWFyeTpcbiAgICAgICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5zZXRDdXJyZW50U3RlcChcbiAgICAgICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0uc2VsZWN0Um9vbXNcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2Q6XG4gICAgICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBGb3Igc2VsZWN0Um9vbXMgb3Igb3RoZXIgc3RlcHMsIGRvIG5vdGhpbmcgKGNsb3NlIG1vZGFsKVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjYW5Hb0JhY2soKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuY3VycmVudFN0ZXAoKTtcbiAgICByZXR1cm4gKFxuICAgICAgc3RlcCA9PT0gQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnkgfHxcbiAgICAgIHN0ZXAgPT09IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2RcbiAgICApO1xuICB9XG5cbiAgY29uZmlybUNhbmNlbGxhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2FuY2VsbGluZy5zZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlXG4gICAgICAucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb24odGhpcy5zZWxlY3RlZFBhY2thZ2VJZHMoKSwgdGhpcy5yZWZ1bmRNZXRob2QoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNDYW5jZWxsaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zaG93QXNpZGUuc2V0KGZhbHNlKTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIHRlbmFudCAtIHJlZGlyZWN0IHRvIFdoYXRzQXBwXG4gICAgICAgICAgaWYgKGVudmlyb25tZW50cy5pc1RlbmFudCB8fCByZXNwb25zZT8uZGF0YT8uaXNXaGF0c0FwcCkge1xuICAgICAgICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNldEFjdGl2ZUFzaWRlVGFiKFxuICAgICAgICAgICAgICBIb3RlbE1hbmFnZUJvb2tpbmdBc2lkZVRhYkVudW0ud2hhdHNBcHBBZ2VudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTaG93IHN1Y2Nlc3Mgb3ZlcmxheVxuICAgICAgICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQ2FuY2VsbGF0aW9uIFN1Y2Nlc3NmdWwhJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICdZb3VyIGJvb2tpbmcgaGFzIGJlZW4gY2FuY2VsbGVkIHN1Y2Nlc3NmdWxseS4gVGhlIHJlZnVuZCB3aWxsIGJlIHByb2Nlc3NlZCBhY2NvcmRpbmcgdG8geW91ciBzZWxlY3RlZCBtZXRob2QuJyxcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiAnRG9uZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldCh0cnVlKTtcblxuICAgICAgICAgIC8vIEFsc28gZW1pdCBmb3IgcGFyZW50IGNvbXBvbmVudCBpZiBuZWVkZWRcbiAgICAgICAgICB0aGlzLmNhbmNlbGxhdGlvblN1Y2Nlc3MuZW1pdChyZXNwb25zZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmlzQ2FuY2VsbGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG5cbiAgICAgICAgICAvLyBFeHRyYWN0IGVycm9yIG1lc3NhZ2UgZnJvbSB2YXJpb3VzIHBvc3NpYmxlIHN0cnVjdHVyZXNcbiAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ1dlIGVuY291bnRlcmVkIGFuIGlzc3VlIHByb2Nlc3NpbmcgeW91ciBjYW5jZWxsYXRpb24uIFBsZWFzZSB0cnkgYWdhaW4gb3IgY29udGFjdCBzdXBwb3J0Lic7XG5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5jZWxsYXRpb24gZXJyb3I6JywgZXJyb3IpO1xuXG4gICAgICAgICAgaWYgKGVycm9yPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yPy5lcnJvcj8uZXJyb3JzICYmIEFycmF5LmlzQXJyYXkoZXJyb3IuZXJyb3IuZXJyb3JzKSAmJiBlcnJvci5lcnJvci5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IuZXJyb3JzWzBdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTaG93IGVycm9yIG92ZXJsYXlcbiAgICAgICAgICB0aGlzLnJlc3VsdE92ZXJsYXlEYXRhLnNldCh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdDYW5jZWxsYXRpb24gRmFpbGVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiAnQ2xvc2UnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaG93UmVzdWx0T3ZlcmxheS5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25DbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uTm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MocGFja2FnZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG5cbiAgICAvLyBTaG93IHN1Y2Nlc3Mgb3ZlcmxheSBmb3Igbm9uLXJlZnVuZGFibGUgcmVxdWVzdFxuICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KHtcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWJtaXR0ZWQhJyxcbiAgICAgIG1lc3NhZ2U6IGBZb3VyIGNhbmNlbGxhdGlvbiByZXF1ZXN0IGZvciAke3BhY2thZ2VOYW1lfSBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5LiBPdXIgdGVhbSB3aWxsIHJldmlldyB5b3VyIHJlcXVlc3QgYW5kIGNvbnRhY3QgeW91IHNob3J0bHkuYCxcbiAgICAgIGNvbmZpcm1UZXh0OiAnRG9uZSdcbiAgICB9KTtcbiAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldCh0cnVlKTtcblxuICAgIC8vIEFsc28gZW1pdCBmb3IgcGFyZW50IGNvbXBvbmVudCBpZiBuZWVkZWRcbiAgICB0aGlzLm5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzLmVtaXQocGFja2FnZU5hbWUpO1xuICB9XG5cbiAgb25DaGF0V2l0aEFnZW50KCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG4gICAgdGhpcy5jaGF0V2l0aEFnZW50LmVtaXQoKTtcbiAgfVxuXG4gIGNsb3NlQWxsTW9kYWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NvbmZpcm1Nb2RhbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0Vycm9yTW9kYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dBc2lkZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uUmVzdWx0T3ZlcmxheUNvbmZpcm0oKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UmVzdWx0T3ZlcmxheS5zZXQoZmFsc2UpO1xuICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KG51bGwpO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uUmVzdWx0T3ZlcmxheUNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldChmYWxzZSk7XG4gICAgdGhpcy5yZXN1bHRPdmVybGF5RGF0YS5zZXQobnVsbCk7XG4gIH1cbn1cbiIsIkBpZiAoc2hvd0FzaWRlKCkpIHtcbiAgPGFsbWF0YXItYXNpZGVcblxuICAgIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fd3JhcHBlclwiXG4gICAgW2FzaWRlVGl0bGVdPVwiYXNpZGVUaXRsZSgpXCJcbiAgICBbc2hvd0FzaWRlXT1cInNob3dBc2lkZSgpXCJcbiAgICBbd2hpdGVIZWFkZXJdPVwidHJ1ZVwiXG4gICAgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxuICAgIChvbkNsb3NlKT1cIm9uQ2xvc2VNb2RhbCgpXCJcbiAgPlxuICAgIDwhLS0gQ3VzdG9tIEhlYWRlciB3aXRoIDYwcHggaGVpZ2h0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyXCI+XG4gICAgICBAaWYgKGNhbkdvQmFjaygpKSB7XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyLWJhY2tcIiAoY2xpY2spPVwib25Hb0JhY2soKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWFycm93LWxlZnRcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItY29udGVudFwiPlxuICAgICAgICBAaWYgKGN1cnJlbnRTdGVwKCkgPT09IHN0ZXBFbnVtLnNlbGVjdFJvb21zKSB7XG4gICAgICAgICAgPGgyIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAgQGlmIChpc1NpbmdsZVBhY2thZ2UoKSkge1xuICAgICAgICAgICAgICBDYW5jZWwgUm9vbXNcbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBTZWxlY3QgUm9vbXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDxwIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgQGlmIChpc1NpbmdsZVBhY2thZ2UoKSkge1xuICAgICAgICAgICAgICBSZXZpZXcgYW5kIGNvbmZpcm0geW91ciBjYW5jZWxsYXRpb25cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBDaG9vc2Ugd2hpY2ggcm9vbShzKSB5b3UnZCBsaWtlIHRvIGNhbmNlbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgfSBAZWxzZSBpZiAoY3VycmVudFN0ZXAoKSA9PT0gc3RlcEVudW0ucmVmdW5kU3VtbWFyeSkge1xuICAgICAgICAgIDxoMiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItdGl0bGVcIj5DYW5jZWwgQm9va2luZyBSZXF1ZXN0PC9oMj5cbiAgICAgICAgICA8cCBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItc3VidGl0bGVcIj5SZXZpZXcgeW91ciByZWZ1bmQgc3VtbWFyeSBhbmQgcHJvY2VlZDwvcD5cbiAgICAgICAgfSBAZWxzZSBpZiAoY3VycmVudFN0ZXAoKSA9PT0gc3RlcEVudW0ucmVmdW5kTWV0aG9kKSB7XG4gICAgICAgICAgPGgyIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci10aXRsZVwiPlNlbGVjdCBSZWZ1bmQgTWV0aG9kPC9oMj5cbiAgICAgICAgICA8cCBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItc3VidGl0bGVcIj5DaG9vc2UgaG93IHlvdSdkIGxpa2UgdG8gcmVjZWl2ZSB5b3VyIHJlZnVuZDwvcD5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGgyIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci10aXRsZVwiPnt7IGFzaWRlVGl0bGUoKSB9fTwvaDI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyLXN1YnRpdGxlXCI+Q29tcGxldGUgeW91ciBib29raW5nIGNhbmNlbGxhdGlvbjwvcD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci1jbG9zZVwiIChjbGljayk9XCJvbkNsb3NlTW9kYWwoKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS10aW1lc1wiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19jb21wb25lbnRcIiBbY2xhc3MuaXNOdXNrXT1cImlzTnVzaygpXCI+XG4gICAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9fbG9hZGluZ1wiPlxuICAgICAgICAgIDxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoY3VycmVudFN0ZXAoKSA9PT0gc3RlcEVudW0uc2VsZWN0Um9vbXMgJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgIDxhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tc1xuICAgICAgICAgIFtwYWNrYWdlc109XCJwYWNrYWdlcygpXCJcbiAgICAgICAgICBbaG90ZWxJbmZvXT1cImhvdGVsSW5mbygpXCJcbiAgICAgICAgICBbYm9va2luZ0lkXT1cInNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmJvb2tpbmdJZFwiXG4gICAgICAgICAgW2hvdGVsSWRdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uaG90ZWxJZFwiXG4gICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJzZWxlY3RlZEhvdGVsQm9va2luZygpPy5jdXJyZW5jeUNvZGUgfHwgJ1NBUidcIlxuICAgICAgICAgIChjb250aW51ZVRvQ2FuY2VsKT1cIm9uQ29udGludWVUb0NhbmNlbCgkZXZlbnQpXCJcbiAgICAgICAgICAoY2xvc2VNb2RhbCk9XCJvbkNsb3NlTW9kYWwoKVwiXG4gICAgICAgICAgKG5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzKT1cIm9uTm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgKGNoYXRXaXRoQWdlbnQpPVwib25DaGF0V2l0aEFnZW50KClcIlxuICAgICAgICAvPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGN1cnJlbnRTdGVwKCkgPT09IHN0ZXBFbnVtLnJlZnVuZFN1bW1hcnkgJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgIDxhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5XG4gICAgICAgICAgW3NlbGVjdGVkUm9vbXNdPVwiYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2VsZWN0ZWRSb29tcygpXCJcbiAgICAgICAgICBbYm9va2luZ0lkXT1cInNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmJvb2tpbmdJZFwiXG4gICAgICAgICAgW2hvdGVsSWRdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uaWQgfHwgc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uaHBrXCJcbiAgICAgICAgICBbaG90ZWxJbmZvXT1cImhvdGVsSW5mbygpXCJcbiAgICAgICAgICBbc2VsZWN0aW9uU2tpcHBlZF09XCJwYWNrYWdlcygpLmxlbmd0aCA8PSAxXCJcbiAgICAgICAgICAoa2VlcFJvb20pPVwib25LZWVwUm9vbSgpXCJcbiAgICAgICAgICAoc2VsZWN0UmVmdW5kT3B0aW9uKT1cIm9uU2VsZWN0UmVmdW5kT3B0aW9uKCRldmVudClcIlxuICAgICAgICAgIChjbG9zZU1vZGFsKT1cIm9uQ2xvc2VNb2RhbCgpXCJcbiAgICAgICAgLz5cbiAgICAgIH1cblxuICAgICAgQGlmIChjdXJyZW50U3RlcCgpID09PSBzdGVwRW51bS5yZWZ1bmRNZXRob2QgJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgIDxhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1tZXRob2RcbiAgICAgICAgICBbcmVmdW5kRGV0YWlsc0RhdGFdPVwicmVmdW5kRGV0YWlsc0RhdGEoKVwiXG4gICAgICAgICAgW2N1cnJlbmN5T2JqXT1cImN1cnJlbnRDdXJyZW5jeSgpXCJcbiAgICAgICAgICBbcmVmdW5kTWV0aG9kXT1cInJlZnVuZE1ldGhvZCgpXCJcbiAgICAgICAgICBbaXNDYW5jZWxsaW5nXT1cImlzQ2FuY2VsbGluZygpXCJcbiAgICAgICAgICAobWV0aG9kU2VsZWN0ZWQpPVwib25NZXRob2RTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoYmFja1JlcXVlc3RlZCk9XCJvbkJhY2tGcm9tUmVmdW5kTWV0aG9kKClcIlxuICAgICAgICAgIChjb25maXJtUmVxdWVzdGVkKT1cImNvbmZpcm1DYW5jZWxsYXRpb24oKVwiXG4gICAgICAgICAgKGNsb3NlTW9kYWwpPVwib25DbG9zZU1vZGFsKClcIlxuICAgICAgICAgIFtib29raW5nSWRdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uYm9va2luZ0lkXCJcbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9hbG1hdGFyLWFzaWRlPlxufVxuXG5AaWYgKHNob3dFcnJvck1vZGFsKCkpIHtcbiAgPGRpdlxuICAgIGFsbWF0YXItbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsXG4gICAgW2Vycm9yTWVzc2FnZV09XCJob3RlbE1hbmFnZUVycm9yKClcIlxuICAgIChjYW5jZWxFdmVudCk9XCJjbG9zZUFsbE1vZGFscygpXCJcbiAgICAoY29uZmlybUV2ZW50KT1cImNsb3NlQWxsTW9kYWxzKClcIlxuICA+PC9kaXY+XG59XG5cbkBpZiAoc2hvd1Jlc3VsdE92ZXJsYXkoKSAmJiByZXN1bHRPdmVybGF5RGF0YSgpKSB7XG4gIDxhcHAtcmVzdWx0LW92ZXJsYXlcbiAgICBbZGF0YV09XCJyZXN1bHRPdmVybGF5RGF0YSgpIVwiXG4gICAgW3Nob3ddPVwic2hvd1Jlc3VsdE92ZXJsYXkoKVwiXG4gICAgKGNvbmZpcm0pPVwib25SZXN1bHRPdmVybGF5Q29uZmlybSgpXCJcbiAgICAoY2FuY2VsKT1cIm9uUmVzdWx0T3ZlcmxheUNhbmNlbCgpXCJcbiAgLz5cbn1cbiJdfQ==
544
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvaG90ZWwtY2FuY2VsL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixVQUFVLEVBR1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdGQUF3RixDQUFDO0FBQzNJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDekcsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sb0RBQW9ELENBQUM7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QkFDakMsZ0RBQWdEO3dCQUNoRCxrREFBa0Q7d0JBQ2xELGlEQUFpRDt3QkFDakQsaUJBQWlCO3dCQUNqQixzQkFBc0I7cUJBQ3ZCLGFBQ1U7d0JBQ1QsbUNBQW1DO3dCQUNuQyw0Q0FBNEM7cUJBQzdDLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNpZGVDb21wb25lbnQgfSBmcm9tICcuLi9hbG1hdGFyLWFzaWRlL2FzaWRlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBEZXN0cm95UmVmLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBvdXRwdXQsXG4gIGlucHV0LFxuICBlZmZlY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWFuYWdlQm9va2luZ0ZhaWxlZE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudHMvbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsL21hbmFnZS1ib29raW5nLWZhaWxlZC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZGVyTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZHVsZXMvbG9hZGVyL2xvYWRlci5tb2R1bGUnO1xuaW1wb3J0IHsgSG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9ob3RlbC1tYW5hZ2UtYm9va2luZy9ob3RlbC1tYW5hZ2UtYm9va2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bSB9IGZyb20gJy4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1zdGVwLmVudW0nO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZSxcbiAgSUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2Vcbn0gZnJvbSAnLi9zZXJ2aWNlcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLWVuZHBvaW50cy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8sXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZSxcbiAgSUJvb2tpbmdQYWNrYWdlXG59IGZyb20gJy4vaW50ZXJmYWNlcy9pLWFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIElSZWZ1bmREZXRhaWxzRGF0YSBhcyBJRmxpZ2h0UmVmdW5kRGV0YWlsc0RhdGEsXG4gIFJlZnVuZFByZWZlcnJlZE1ldGhvZCxcbiAgTG95YWx0eVBheW1lbnRUeXBlXG59IGZyb20gJy4uL3NoYXJlZC9pbnRlcmZhY2VzL2ktZmxpZ2h0LXJlZnVuZC1kZXRhaWxzJztcbmltcG9ydCB7IElIb3RlbEJvb2tpbmdEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Jvb2tpbmcudHlwZXMnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlbGVjdFJvb21zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5L2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnkuY29tcG9uZW50JztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRNZXRob2RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtbWV0aG9kL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLW1ldGhvZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVzdWx0T3ZlcmxheUNvbXBvbmVudCwgUmVzdWx0T3ZlcmxheURhdGEgfSBmcm9tICcuL2NvbXBvbmVudHMvcmVzdWx0LW92ZXJsYXkvcmVzdWx0LW92ZXJsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IEhvdGVsTWFuYWdlQm9va2luZ0FzaWRlVGFiRW51bSB9IGZyb20gJy4uL3NoYXJlZC9lbnVtcy9ob3RlbC1tYW5hZ2UtYm9va2luZy1hc2lkZS10YWIuZW51bSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGdldEN1cnJlbnRDdXJyZW5jeSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zdG9yZS9zZWxlY3RvcnMvY3VycmVuY3kuc2VsZWN0b3JzJztcbmltcG9ydCB7IGVudmlyb25tZW50cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQWxtYXRhckljb25Nb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kdWxlcy9hbG1hdGFyLWljb24vYWxtYXRhci1pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IGxveWFsdHlQb2ludHNNZXRob2RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIExvYWRlck1vZHVsZSxcbiAgICBBc2lkZUNvbXBvbmVudCxcbiAgICBNYW5hZ2VCb29raW5nRmFpbGVkTW9kYWxDb21wb25lbnQsXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlbGVjdFJvb21zQ29tcG9uZW50LFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5Q29tcG9uZW50LFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRNZXRob2RDb21wb25lbnQsXG4gICAgQWxtYXRhckljb25Nb2R1bGUsXG4gICAgUmVzdWx0T3ZlcmxheUNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU2VydmljZSxcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlXG4gICk7XG5cbiAgcmVhZG9ubHkgYXV0b0NhbmNlbGxhdGlvblNlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2VcbiAgKTtcblxuICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlID0gaW5qZWN0KEhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2VcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KFN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzaGFyZWRTZXJ2aWNlID0gaW5qZWN0KFNoYXJlZFNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSG90ZWxCb29raW5nID0gaW5wdXQ8SUhvdGVsQm9va2luZ0RhdGEgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBjbG9zZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgY2FuY2VsbGF0aW9uU3VjY2VzcyA9IG91dHB1dDxJQXV0b0NhbmNlbGxhdGlvblByb2Nlc3NSZXNwb25zZT4oKTtcbiAgcmVhZG9ubHkgbm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjaGF0V2l0aEFnZW50ID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgc2hvd0NvbmZpcm1Nb2RhbCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dFcnJvck1vZGFsID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd0FzaWRlID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSBpc0xvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBpc0NhbmNlbGxpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBob3RlbE1hbmFnZUVycm9yID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICByZWFkb25seSBpc051c2sgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBzaG93UmVzdWx0T3ZlcmxheSA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHJlc3VsdE92ZXJsYXlEYXRhID0gc2lnbmFsPFJlc3VsdE92ZXJsYXlEYXRhIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHJvb21zID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdPihbXSk7XG4gIHJlYWRvbmx5IHBhY2thZ2VzID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdPihbXSk7XG4gIHJlYWRvbmx5IGhvdGVsSW5mbyA9IHNpZ25hbDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50Q3VycmVuY3kgPSBzaWduYWw8YW55PihudWxsKTtcbiAgcmVhZG9ubHkgcmVmdW5kRGV0YWlsc0RhdGEgPSBzaWduYWw8SUZsaWdodFJlZnVuZERldGFpbHNEYXRhIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkUGFja2FnZUlkcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICByZWFkb25seSByZWZ1bmRNZXRob2QgPSBzaWduYWw8UmVmdW5kUHJlZmVycmVkTWV0aG9kPignd2FsbGV0Jyk7XG4gIHJlYWRvbmx5IHJlZnVuZFJlc3BvbnNlRGF0YSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHN0ZXBFbnVtID0gQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtO1xuICByZWFkb25seSBjdXJyZW50U3RlcCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5jdXJyZW50U3RlcCgpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNTaW5nbGVSb29tID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yb29tcygpLmxlbmd0aCA9PT0gMSk7XG4gIHJlYWRvbmx5IGlzU2luZ2xlUGFja2FnZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFja2FnZXMoKS5sZW5ndGggPT09IDEpO1xuXG4gIC8vIEdldCBzdXBwbGllciBmcm9tIGJvb2tpbmcgb3IgZmlyc3QgcGFja2FnZVxuICByZWFkb25seSBib29raW5nU3VwcGxpZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tpbmcgPSB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk7XG4gICAgaWYgKCFib29raW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gVHJ5IHRvIGdldCBzdXBwbGllciBmcm9tIGJvb2tpbmcgbGV2ZWwgZmlyc3RcbiAgICBpZiAoKGJvb2tpbmcgYXMgYW55KS5zdXBwbGllcikge1xuICAgICAgcmV0dXJuIChib29raW5nIGFzIGFueSkuc3VwcGxpZXI7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIGdldCBmcm9tIGZpcnN0IHBhY2thZ2VcbiAgICBjb25zdCBwYWNrYWdlcyA9IHRoaXMucGFja2FnZXMoKTtcbiAgICByZXR1cm4gcGFja2FnZXMubGVuZ3RoID4gMCA/IHBhY2thZ2VzWzBdLnN1cHBsaWVyIDogdW5kZWZpbmVkO1xuICB9KTtcblxuICAvLyBDb21wdXRlZCB0b3RhbHMgZm9yIGFkdWx0cywgY2hpbGRyZW4sIGluZmFudHMgZnJvbSBib29raW5nIHBhY2thZ2VzXG4gIHJlYWRvbmx5IHRvdGFsQWR1bHRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tpbmcgPSB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk7XG4gICAgaWYgKCFib29raW5nPy5wYWNrYWdlcykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBib29raW5nLnBhY2thZ2VzLnJlZHVjZSgodG90YWw6IG51bWJlciwgcGtnOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJvb21zID0gcGtnLnJvb21zIHx8IFtdO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdG90YWwgK1xuICAgICAgICByb29tcy5yZWR1Y2UoKHN1bTogbnVtYmVyLCByb29tOiBhbnkpID0+IHN1bSArIChyb29tLmFkdWx0c051bSB8fCAwKSwgMClcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsQ2hpbGRyZW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcbiAgICBpZiAoIWJvb2tpbmc/LnBhY2thZ2VzKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2tpbmcucGFja2FnZXMucmVkdWNlKCh0b3RhbDogbnVtYmVyLCBwa2c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0b3RhbCArXG4gICAgICAgIHJvb21zLnJlZHVjZShcbiAgICAgICAgICAoc3VtOiBudW1iZXIsIHJvb206IGFueSkgPT4gc3VtICsgKHJvb20uY2hpbGRyZW5OdW0gfHwgMCksXG4gICAgICAgICAgMFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbEluZmFudHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcbiAgICBpZiAoIWJvb2tpbmc/LnBhY2thZ2VzKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2tpbmcucGFja2FnZXMucmVkdWNlKCh0b3RhbDogbnVtYmVyLCBwa2c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0b3RhbCArXG4gICAgICAgIHJvb21zLnJlZHVjZShcbiAgICAgICAgICAoc3VtOiBudW1iZXIsIHJvb206IGFueSkgPT4gc3VtICsgKHJvb20uaW5mYW50c051bSB8fCAwKSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFzaWRlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuY3VycmVudFN0ZXAoKTtcbiAgICBzd2l0Y2ggKHN0ZXApIHtcbiAgICAgIGNhc2UgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnNlbGVjdFJvb21zOlxuICAgICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZVBhY2thZ2UoKSA/ICdDb25maXJtIENhbmNlbGxhdGlvbicgOiAnU2VsZWN0IFJvb21zJztcbiAgICAgIGNhc2UgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnk6XG4gICAgICAgIHJldHVybiAnQ2FuY2VsIEJvb2tpbmcgUmVxdWVzdCc7XG4gICAgICBjYXNlIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2Q6XG4gICAgICAgIHJldHVybiAnU2VsZWN0IFJlZnVuZCBNZXRob2QnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdDYW5jZWwgQm9va2luZyc7XG4gICAgfVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5Ib3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nLm5leHQoXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKVxuICAgICAgKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdzZWxlY3RlZEhvdGVsQm9va2luZycsIHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKSk7XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVmdW5kRGV0YWlsc0RhdGEnLCB0aGlzLnJlZnVuZERldGFpbHNEYXRhKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGNsb3NlSWNvbk5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEFwcExhbmd1YWdlKCk7XG4gICAgcmV0dXJuIGxhbmcgPT09ICdhcicgPyAnYXJyb3ctbGVmdCcgOiAnYXJyb3ctcmlnaHQnO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplUXVlcnlQYXJhbXMoKTtcbiAgICB0aGlzLmxvYWRCb29raW5nRGF0YUZyb21QYWNrYWdlcygpO1xuICAgIHRoaXMuaW5pdEN1cnJlbmN5KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDdXJyZW5jeSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KGdldEN1cnJlbnRDdXJyZW5jeSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGN1cnJlbmN5KSA9PiAhIWN1cnJlbmN5KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbmN5KSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnJlbmN5LnNldChjdXJyZW5jeSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2UucmVzZXQoKTtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlLmNsZWFyU2VsZWN0ZWRQYWNrYWdlSWRzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVRdWVyeVBhcmFtcygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgICBpZiAocGFyYW1zWydza2lwQ2hlY2snXSkge1xuICAgICAgICAgIHRoaXMuaXNOdXNrLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRCb29raW5nRGF0YUZyb21QYWNrYWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcblxuICAgIGlmIChib29raW5nKSB7XG4gICAgICB0aGlzLnByb2Nlc3NCb29raW5nRGF0YShib29raW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAuc3Vic2NyaWJlKChzZXJ2aWNlQm9va2luZykgPT4ge1xuICAgICAgICAgIGlmIChzZXJ2aWNlQm9va2luZykge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQm9va2luZ0RhdGEoc2VydmljZUJvb2tpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NCb29raW5nRGF0YShib29raW5nOiBJSG90ZWxCb29raW5nRGF0YSk6IHZvaWQge1xuICAgIGNvbnN0IGhvdGVsSW5mb0RhdGE6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uSG90ZWxJbmZvID0ge1xuICAgICAgaG90ZWxOYW1lOiBib29raW5nLmhvdGVsTmFtZSB8fCAnJyxcbiAgICAgIGhvdGVsSW1hZ2U6IGJvb2tpbmcuY292ZXJJbWFnZSB8fCAnJyxcbiAgICAgIGNoZWNrSW46IGJvb2tpbmcuZGF0ZUZyb20gfHwgYm9va2luZz8uZnJvbT8uX2ksXG4gICAgICBjaGVja091dDogYm9va2luZy5kYXRlVG8gfHwgYm9va2luZz8udG8/Ll9pLFxuICAgICAgdG90YWxSb29tczogYm9va2luZy5wYWNrYWdlcz8ubGVuZ3RoIHx8IGJvb2tpbmcucm9vbXMgfHwgMSxcbiAgICAgIG5pZ2h0czpcbiAgICAgICAgYm9va2luZy5udW1iZXJPZk5pZ2h0cyB8fFxuICAgICAgICBib29raW5nLm5pZ2h0TnVtYmVyIHx8XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTmlnaHRzKGJvb2tpbmcuZGF0ZUZyb20sIGJvb2tpbmcuZGF0ZVRvKSxcbiAgICAgIGNoZWNrSW5UaW1lOiBib29raW5nLmNoZWNrSW5UaW1lPy5zcGxpdCgnICcpWzBdLFxuICAgICAgY2hlY2tPdXRUaW1lOiBib29raW5nLmNoZWNrT3V0VGltZT8uc3BsaXQoJyAnKVswXVxuICAgIH07XG4gICAgdGhpcy5ob3RlbEluZm8uc2V0KGhvdGVsSW5mb0RhdGEpO1xuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0SG90ZWxJbmZvKGhvdGVsSW5mb0RhdGEpO1xuXG4gICAgLy8gTWFwIHRvIGJvdGggcm9vbXMgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSBhbmQgcGFja2FnZXMgKG5ldyBzdHJ1Y3R1cmUpXG4gICAgY29uc3QgbWFwcGVkUm9vbXMgPSB0aGlzLm1hcFBhY2thZ2VzVG9Sb29tcyhib29raW5nKTtcbiAgICB0aGlzLnJvb21zLnNldChtYXBwZWRSb29tcyk7XG5cbiAgICBjb25zdCBtYXBwZWRQYWNrYWdlcyA9IHRoaXMubWFwQm9va2luZ1RvUGFja2FnZXMoYm9va2luZyk7XG4gICAgdGhpcy5wYWNrYWdlcy5zZXQobWFwcGVkUGFja2FnZXMpO1xuXG4gICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5zZXRTZWxlY3RlZFJvb21zKG1hcHBlZFJvb21zKTtcblxuICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIG1hcFBhY2thZ2VzVG9Sb29tcyhcbiAgICBib29raW5nOiBhbnlcbiAgKTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tW10ge1xuICAgIGNvbnN0IG5pZ2h0cyA9XG4gICAgICBib29raW5nLm51bWJlck9mTmlnaHRzIHx8XG4gICAgICBib29raW5nLm5pZ2h0TnVtYmVyIHx8XG4gICAgICB0aGlzLmNhbGN1bGF0ZU5pZ2h0cyhib29raW5nLmZyb20sIGJvb2tpbmcudG8pO1xuICAgIGNvbnN0IHBhY2thZ2VzOiBJQm9va2luZ1BhY2thZ2VbXSA9IGJvb2tpbmcucGFja2FnZXMgfHwgW107XG5cbiAgICByZXR1cm4gcGFja2FnZXMuZmxhdE1hcCgocGtnOiBJQm9va2luZ1BhY2thZ2UsIHBrZ0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHJvb21zID0gcGtnLnJvb21zIHx8IFtdO1xuICAgICAgcmV0dXJuIHJvb21zLm1hcCgocm9vbTogYW55LCByb29tSW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgcGFja2FnZUlkOiBwa2cuaWQgfHwgU3RyaW5nKHBrZ0luZGV4ICsgMSksXG4gICAgICAgIHJvb21JZDogcm9vbT8ucm9vbUlkIHx8IGAke3BrZy5pZH0tJHtyb29tSW5kZXh9YCxcbiAgICAgICAgcm9vbU5hbWU6IHJvb20/LnJvb21OYW1lIHx8IGBSb29tICR7cm9vbUluZGV4ICsgMX1gLFxuICAgICAgICByb29tVHlwZTogcm9vbT8ucm9vbVR5cGUgfHwgJ1N0YW5kYXJkIFJvb20nLFxuICAgICAgICBtZWFsUGxhbjogcm9vbT8ucm9vbUJhc2lzIHx8ICcnLFxuICAgICAgICBpc1JlZnVuZGFibGU6IHBrZy5pc1JlZnVuZGFibGUgIT09IGZhbHNlLFxuICAgICAgICBpc0NhbmNlbGxlZDogcGtnLmlzQ2FuY2VsbGVkLFxuICAgICAgICBtYW51YWxSZWZ1bmRSZXF1ZXN0OiAhcGtnLmlzUmVmdW5kYWJsZSxcbiAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIG5pZ2h0czogdGhpcy5ob3RlbEluZm8oKT8ubmlnaHRzIHx8IG5pZ2h0cyxcbiAgICAgICAgcm9vbUFtb3VudDogMCxcbiAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgICByZWZ1bmRBbW91bnQ6IDAsXG4gICAgICAgIGJlZFR5cGU6IHJvb20/LmJlZFR5cGUgfHwgJycsXG4gICAgICAgIHJvb21WaWV3OiByb29tPy5yb29tVmlldyB8fCAnJyxcbiAgICAgICAgcm9vbUJhc2lzOiByb29tPy5yb29tQmFzaXMgfHwgJycsXG4gICAgICAgIHJlZnVuZGFiaWxpdHk6IHBrZy5pc1JlZnVuZGFibGUsXG4gICAgICAgIHJlZnVuZGFibGVVbnRpbDogcGtnLnJlZnVuZGFibGVVbnRpbCB8fCAnJyxcbiAgICAgICAgYWR1bHRzTnVtOiByb29tPy5hZHVsdHNOdW0gfHwgMCxcbiAgICAgICAgY2hpbGRyZW5OdW06IHJvb20/LmNoaWxkcmVuTnVtIHx8IDAsXG4gICAgICAgIHBhc3Nlbmdlck5hbWU6IHJvb20/LnBhc3NlbmdlcnM/Lm5hbWUgfHwgJydcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQm9va2luZ1RvUGFja2FnZXMoXG4gICAgYm9va2luZzogYW55XG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdIHtcbiAgICBjb25zdCBib29raW5nUGFja2FnZXM6IElCb29raW5nUGFja2FnZVtdID0gYm9va2luZy5wYWNrYWdlcyB8fCBbXTtcblxuICAgIHJldHVybiBib29raW5nUGFja2FnZXMubWFwKChwa2c6IElCb29raW5nUGFja2FnZSwgcGtnSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICBjb25zdCBmaXJzdFJvb20gPSByb29tc1swXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFja2FnZUlkOiBwa2cuaWQgfHwgU3RyaW5nKHBrZ0luZGV4ICsgMSksXG4gICAgICAgIHBhY2thZ2VOYW1lOiBmaXJzdFJvb20/LnJvb21OYW1lIHx8IGBQYWNrYWdlICR7cGtnSW5kZXggKyAxfWAsXG4gICAgICAgIGJvYXJkQmFzaXM6IGZpcnN0Um9vbT8ucm9vbUJhc2lzIHx8ICcnLFxuICAgICAgICBpc1JlZnVuZGFibGU6IHBrZy5pc1JlZnVuZGFibGUgIT09IGZhbHNlLFxuICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNDYW5jZWxsZWQ6IHBrZy5pc0NhbmNlbGxlZCxcbiAgICAgICAgcmVmdW5kYWJpbGl0eTogcGtnLmlzUmVmdW5kYWJsZSxcbiAgICAgICAgcmVmdW5kYWJsZVVudGlsOiBwa2cucmVmdW5kYWJsZVVudGlsIHx8ICcnLFxuICAgICAgICByb29tczogcm9vbXMubWFwKChyb29tOiBhbnksIHJvb21JbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAgIHJvb21JZDogcm9vbT8ucm9vbUlkIHx8IGAke3BrZy5pZH0tJHtyb29tSW5kZXh9YCxcbiAgICAgICAgICByb29tTmFtZTogcm9vbT8ucm9vbU5hbWUgfHwgYFJvb20gJHtyb29tSW5kZXggKyAxfWAsXG4gICAgICAgICAgcm9vbVR5cGU6IHJvb20/LnJvb21UeXBlIHx8ICdTdGFuZGFyZCBSb29tJyxcbiAgICAgICAgICBiZWRUeXBlOiByb29tPy5iZWRUeXBlIHx8ICcnLFxuICAgICAgICAgIHJvb21CYXNpczogcm9vbT8ucm9vbUJhc2lzIHx8ICcnXG4gICAgICAgIH0pKSxcbiAgICAgICAgcm9vbUFtb3VudDogMCxcbiAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgICByZWZ1bmRBbW91bnQ6IDAsXG4gICAgICAgIG1hbnVhbFJlZnVuZFJlcXVlc3Q6ICFwa2cuaXNSZWZ1bmRhYmxlLFxuICAgICAgICBjYW5jZWxsZWRCZWZvcmU6IGZhbHNlLFxuICAgICAgICBjYW5jZWxsYXRpb25Qb2xpY2llczogcGtnLmNhbmNlbGxhdGlvblBvbGljaWVzIHx8IFtdLFxuICAgICAgICBDYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3M6IHBrZy5jYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3MsXG4gICAgICAgIHN1cHBsaWVyOiBwa2cuc3VwcGxpZXJcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU5pZ2h0cyhmcm9tOiBhbnksIHRvOiBhbnkpOiBudW1iZXIge1xuICAgIGlmICghZnJvbSB8fCAhdG8pIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoZnJvbS5kaWZmICYmIHR5cGVvZiBmcm9tLmRpZmYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0by5kaWZmKGZyb20sICdkYXlzJykgfHwgMTtcbiAgICB9XG4gICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tKTtcbiAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZSh0byk7XG4gICAgY29uc3QgZGlmZlRpbWUgPSBNYXRoLmFicyh0b0RhdGUuZ2V0VGltZSgpIC0gZnJvbURhdGUuZ2V0VGltZSgpKTtcbiAgICBjb25zdCBkaWZmRGF5cyA9IE1hdGguY2VpbChkaWZmVGltZSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XG4gICAgcmV0dXJuIGRpZmZEYXlzIHx8IDE7XG4gIH1cblxuICBvbkNvbnRpbnVlVG9DYW5jZWwoXG4gICAgc2VsZWN0ZWRQYWNrYWdlczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlW11cbiAgKTogdm9pZCB7XG4gICAgLy8gQ29udmVydCBwYWNrYWdlcyB0byByb29tcyBmb3JtYXQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgc2VydmljZVxuICAgIGNvbnN0IHNlbGVjdGVkUm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdID1cbiAgICAgIHNlbGVjdGVkUGFja2FnZXMuZmxhdE1hcCgocGtnKSA9PlxuICAgICAgICBwa2cucm9vbXMubWFwKChyb29tKSA9PiAoe1xuICAgICAgICAgIHBhY2thZ2VJZDogcGtnLnBhY2thZ2VJZCxcbiAgICAgICAgICByb29tSWQ6IHJvb20ucm9vbUlkLFxuICAgICAgICAgIHJvb21OYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgIHJvb21UeXBlOiByb29tLnJvb21UeXBlLFxuICAgICAgICAgIG1lYWxQbGFuOiByb29tLnJvb21CYXNpcyxcbiAgICAgICAgICBpc1JlZnVuZGFibGU6IHBrZy5pc1JlZnVuZGFibGUsXG4gICAgICAgICAgaXNDYW5jZWxsZWQ6IHBrZy5pc0NhbmNlbGxlZCxcbiAgICAgICAgICBpc1NlbGVjdGVkOiBwa2cuaXNTZWxlY3RlZCxcbiAgICAgICAgICBuaWdodHM6IDAsXG4gICAgICAgICAgcm9vbUFtb3VudDogcGtnLnJvb21BbW91bnQsXG4gICAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiBwa2cuY2FuY2VsbGF0aW9uRmVlLFxuICAgICAgICAgIHJlZnVuZEFtb3VudDogcGtnLnJlZnVuZEFtb3VudCxcbiAgICAgICAgICBiZWRUeXBlOiByb29tLmJlZFR5cGUsXG4gICAgICAgICAgcm9vbUJhc2lzOiByb29tLnJvb21CYXNpcyxcbiAgICAgICAgICByZWZ1bmRhYmlsaXR5OiBwa2cucmVmdW5kYWJpbGl0eSxcbiAgICAgICAgICByZWZ1bmRhYmxlVW50aWw6IHBrZy5yZWZ1bmRhYmxlVW50aWwsXG4gICAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiBwa2cuY2FuY2VsbGVkQmVmb3JlLFxuICAgICAgICAgIG1hbnVhbFJlZnVuZFJlcXVlc3Q6IHBrZy5tYW51YWxSZWZ1bmRSZXF1ZXN0XG4gICAgICAgIH0pKVxuICAgICAgKTtcblxuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0U2VsZWN0ZWRSb29tcyhzZWxlY3RlZFJvb21zKTtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLnNldEN1cnJlbnRTdGVwKFxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnlcbiAgICApO1xuICB9XG5cbiAgb25LZWVwUm9vbSgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLnNldEN1cnJlbnRTdGVwKFxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnNlbGVjdFJvb21zXG4gICAgKTtcbiAgfVxuXG4gIG9uU2VsZWN0UmVmdW5kT3B0aW9uKGRhdGE6IHtcbiAgICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbiAgICBwYXlvdXQ6IGFueTtcbiAgICB0b3RhbFJlZnVuZDogbnVtYmVyO1xuICAgIHJlc3BvbnNlRGF0YTogYW55O1xuICB9KTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGVuYW50IC0gcmVkaXJlY3QgdG8gV2hhdHNBcHAgZm9yIHRlbmFudCBib29raW5nc1xuICAgIGlmIChlbnZpcm9ubWVudHMuaXNUZW5hbnQpIHtcbiAgICAgIHRoaXMuaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZS5zZXRBY3RpdmVBc2lkZVRhYihcbiAgICAgICAgSG90ZWxNYW5hZ2VCb29raW5nQXNpZGVUYWJFbnVtLndoYXRzQXBwQWdlbnRcbiAgICAgICk7XG4gICAgICB0aGlzLnNob3dBc2lkZS5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdSZWZ1bmQgb3B0aW9uIHNlbGVjdGVkOicsIGRhdGEpO1xuXG4gICAgdGhpcy5zZWxlY3RlZFBhY2thZ2VJZHMuc2V0KGRhdGEucGFja2FnZUlkcyk7XG4gICAgdGhpcy5yZWZ1bmRSZXNwb25zZURhdGEuc2V0KGRhdGEucmVzcG9uc2VEYXRhKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gZGF0YT8ucmVzcG9uc2VEYXRhO1xuICAgIGNvbnN0IHBheW91dCA9IHJlc3BvbnNlPy5wYXlvdXQgfHwgZGF0YS5wYXlvdXQ7XG4gICAgY29uc3QgdG90YWxzID0gcmVzcG9uc2U/LnRvdGFscztcblxuICAgIC8vIGNvbnN0IHdhbGxldFJlZnVuZCA9IHBheW91dD8ud2FsbGV0IHx8IHBheW91dD8ubG95YWx0eVRvV2FsbGV0O1xuICAgIGNvbnN0IHdhbGxldFJlZnVuZCA9IHBheW91dD8ud2FsbGV0O1xuXG4gICAgY29uc3QgY2FyZFJlZnVuZCA9IHBheW91dD8uY2FyZCA/PyAwO1xuICAgIGNvbnN0IHRhYmJ5UmVmdW5kID0gcGF5b3V0Py50YWJieSA/PyBwYXlvdXQ/LnRhYmJ5ID8/IDA7XG4gICAgY29uc3QgdGFtYXJhUmVmdW5kID0gcGF5b3V0Py50YW1hcmEgPz8gcGF5b3V0Py50YW1hcmEgPz8gMDtcblxuICAgIC8vIENoZWNrIGlmIGZ1bGwgd2FsbGV0IHJlZnVuZCBpcyBhbGxvd2VkIGJhc2VkIG9uIHBheW91dCBicmVha2Rvd25cbiAgICAvLyBXYWxsZXQgcmVmdW5kIGlzIGFsbG93ZWQgaWYgdGhlcmUncyBubyBjYXJkL3RhYmJ5L3RhbWFyYSBwb3J0aW9uXG4gICAgY29uc3QgaGFzTm9uV2FsbGV0UmVmdW5kID0gdGFiYnlSZWZ1bmQgPiAwIHx8IHRhbWFyYVJlZnVuZCA+IDA7XG4gICAgY29uc3QgdG90YWxSZWZ1bmRBbW91bnQgPSBwYXlvdXQ/LmN1cnJlbnQgPz8gZGF0YS50b3RhbFJlZnVuZDtcbiAgICBjb25zdCBpc0Z1bGxXYWxsZXRBbGxvd2VkID1cbiAgICAgICghaGFzTm9uV2FsbGV0UmVmdW5kICYmIHdhbGxldFJlZnVuZCA+IDApIHx8IGNhcmRSZWZ1bmQgPiAwO1xuXG4gICAgY29uc3QgbG95YWx0eVBvaW50c1ZhbHVlID1cbiAgICAgIHBheW91dD8ubG95YWx0eVRvV2FsbGV0IHx8XG4gICAgICB0b3RhbHM/LndhbGEgfHxcbiAgICAgIHRvdGFscz8ucWl0YWYgfHxcbiAgICAgIHRvdGFscz8ubW9rYWZhIHx8XG4gICAgICB0b3RhbHM/Lmhhc3NhZCB8fFxuICAgICAgdG90YWxzPy55Z2c7XG5cbiAgICAvLyBCdWlsZCByZWZ1bmQgZGV0YWlscyBkYXRhIGZvciB0aGUgbWV0aG9kIHNlbGVjdG9yXG4gICAgdGhpcy5yZWZ1bmREZXRhaWxzRGF0YS5zZXQoe1xuICAgICAgdG90YWxSZWZ1bmRBbW91bnQsXG4gICAgICB3YWxsZXRSZWZ1bmRBbW91bnQ6IHBheW91dD8ud2FsbGV0LFxuICAgICAgdG90YWxDYXJkUmVmdW5kQW1vdW50OiBjYXJkUmVmdW5kICsgdGFiYnlSZWZ1bmQgKyB0YW1hcmFSZWZ1bmQsXG4gICAgICBpc0Z1bGxXYWxsZXRSZWZ1bmRBbGxvd2VkOiBpc0Z1bGxXYWxsZXRBbGxvd2VkLFxuICAgICAgY3VycmVuY3k6IHJlc3BvbnNlPy5jdXJyZW5jeSxcbiAgICAgIGlzUmVmdW5kYWJsZTogcmVzcG9uc2U/LmZsYWdzPy5yZWZ1bmRhYmxlLFxuICAgICAgdG90YWxMb3lhbHR5UG9pbnRzUmVmdW5kQW1vdW50OiBsb3lhbHR5UG9pbnRzVmFsdWUsXG4gICAgICAvLyBQYXNzIHBheW1lbnQgbWV0aG9kIGluZm8gZm9yIHByb3BlciBsYWJlbGluZ1xuICAgICAgcGF5bWVudE1ldGhvZEN1c3RvbWVyVXNlZDogdGhpcy5kZXRlcm1pbmVQYXltZW50TWV0aG9kKHRvdGFscywgcGF5b3V0KSxcbiAgICAgIC8vIEFkZGl0aW9uYWwgZmllbGRzIGZvciBwcm9wZXIgbG95YWx0eSBwcm9ncmFtIGxhYmVsaW5nIGFuZCBzcGxpdCByZWZ1bmQgZGlzcGxheVxuICAgICAgbG95YWx0eVBheW1lbnRUeXBlOiB0aGlzLmRldGVybWluZUxveWFsdHlUeXBlKHRvdGFscywgcGF5b3V0KSxcbiAgICAgIHRvdGFsTG95YWx0eVBvaW50czogbG95YWx0eVBvaW50c1ZhbHVlLFxuICAgICAgYm9va2luZ0lkOiB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmJvb2tpbmdJZFxuICAgIH0pO1xuXG4gICAgLy8gRGVmYXVsdCB0byB3YWxsZXQgaWYgYWxsb3dlZCwgb3RoZXJ3aXNlIG9yaWdpbmFsUGF5bWVudE1ldGhvZFxuICAgIGlmIChpc0Z1bGxXYWxsZXRBbGxvd2VkICYmIHdhbGxldFJlZnVuZCA+IDApIHtcbiAgICAgIHRoaXMucmVmdW5kTWV0aG9kLnNldCgnd2FsbGV0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVmdW5kTWV0aG9kLnNldCgnb3JpZ2luYWxQYXltZW50TWV0aG9kJyk7XG4gICAgfVxuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kTWV0aG9kXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBwYXltZW50IG1ldGhvZCBsYWJlbCBiYXNlZCBvbiB0b3RhbHMvcGF5b3V0IGJyZWFrZG93bi5cbiAgICogUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZ2F0ZXdheSBjb2RlIGZvciBwcm9wZXIgbGFiZWxpbmcuXG4gICAqL1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2FyZC9pbnN0YWxsbWVudCBwYXltZW50IG1ldGhvZCBmb3IgdGhlIGNhcmQgcm93IGxhYmVsLlxuICAgKiBMb3lhbHR5IHByb2dyYW1zIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgZGV0ZXJtaW5lTG95YWx0eVR5cGUoKS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lUGF5bWVudE1ldGhvZCh0b3RhbHM6IGFueSwgcGF5b3V0OiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICgocGF5b3V0Py50YWJieSA/PyB0b3RhbHM/LnRhYmJ5ID8/IDApID4gMCkge1xuICAgICAgcmV0dXJuICdUQic7IC8vIFRhYmJ5XG4gICAgfVxuICAgIGlmICgocGF5b3V0Py50YW1hcmEgPz8gdG90YWxzPy50YW1hcmEgPz8gMCkgPiAwKSB7XG4gICAgICByZXR1cm4gJ1RNJzsgLy8gVGFtYXJhXG4gICAgfVxuICAgIGlmICgocGF5b3V0Py5jYXJkID8/IHRvdGFscz8uY2FyZCA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnQ0gnOyAvLyBDYXJkXG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBsb3lhbHR5IHBheW1lbnQgdHlwZSBmb3IgcHJvcGVyIGxhYmVsaW5nIGluIHNwbGl0IHJlZnVuZCByb3dzLlxuICAgKiBSZXR1cm5zIHRoZSBsb3lhbHR5IHByb2dyYW0gY29kZSAoZS5nLiwgJ1FJVEFGJywgJ1JBSkhJJykgaWYgYXBwbGljYWJsZS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lTG95YWx0eVR5cGUoXG4gICAgdG90YWxzOiBhbnksXG4gICAgcGF5b3V0OiBhbnlcbiAgKTogTG95YWx0eVBheW1lbnRUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoKHRvdGFscz8ubW9rYWZhID8/IDApID4gMCkge1xuICAgICAgcmV0dXJuICdBbFJhamhpTW9rYWZhYSc7XG4gICAgfVxuICAgIGlmICgodG90YWxzPy5xaXRhZiA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnUWl0YWYnO1xuICAgIH1cbiAgICBpZiAoKHRvdGFscz8ud2FsYSA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnV2FsYSc7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChwYXlvdXQ/LmxveWFsdHlUb1dhbGxldCA/PyAwKSA+IDAgfHxcbiAgICAgIChwYXlvdXQ/LmxveWFsdHlQb2ludHMgPz8gMCkgPiAwXG4gICAgKSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgc3BlY2lmaWMgbG95YWx0eSB0eXBlIGZyb20gdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCBsb3lhbHR5VHlwZSA9IHRvdGFscz8ubG95YWx0eVR5cGUgYXMgTG95YWx0eVBheW1lbnRUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKFxuICAgICAgICBsb3lhbHR5VHlwZSAmJlxuICAgICAgICBbXG4gICAgICAgICAgJ0FsUmFqaGlNb2thZmFhJyxcbiAgICAgICAgICAnUWl0YWYnLFxuICAgICAgICAgICdXYWxhJyxcbiAgICAgICAgICAnQUxGVVJTQU4nLFxuICAgICAgICAgICdBTE1BVEFSX1BPSU5UUydcbiAgICAgICAgXS5pbmNsdWRlcyhsb3lhbHR5VHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbG95YWx0eVR5cGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBvbk1ldGhvZFNlbGVjdGVkKG1ldGhvZDogUmVmdW5kUHJlZmVycmVkTWV0aG9kKTogdm9pZCB7XG4gICAgdGhpcy5yZWZ1bmRNZXRob2Quc2V0KG1ldGhvZCk7XG4gIH1cblxuICBvbkJhY2tGcm9tUmVmdW5kTWV0aG9kKCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kU3VtbWFyeVxuICAgICk7XG4gIH1cblxuICBvbkdvQmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5jdXJyZW50U3RlcCgpO1xuICAgIHN3aXRjaCAoc3RlcCkge1xuICAgICAgY2FzZSBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kU3VtbWFyeTpcbiAgICAgICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5zZXRDdXJyZW50U3RlcChcbiAgICAgICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0uc2VsZWN0Um9vbXNcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2Q6XG4gICAgICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBGb3Igc2VsZWN0Um9vbXMgb3Igb3RoZXIgc3RlcHMsIGRvIG5vdGhpbmcgKGNsb3NlIG1vZGFsKVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjYW5Hb0JhY2soKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuY3VycmVudFN0ZXAoKTtcbiAgICByZXR1cm4gKFxuICAgICAgc3RlcCA9PT0gQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnkgfHxcbiAgICAgIHN0ZXAgPT09IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2RcbiAgICApO1xuICB9XG5cbiAgY29uZmlybUNhbmNlbGxhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2FuY2VsbGluZy5zZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlXG4gICAgICAucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb24odGhpcy5zZWxlY3RlZFBhY2thZ2VJZHMoKSwgdGhpcy5yZWZ1bmRNZXRob2QoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNDYW5jZWxsaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zaG93QXNpZGUuc2V0KGZhbHNlKTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIHRlbmFudCAtIHJlZGlyZWN0IHRvIFdoYXRzQXBwXG4gICAgICAgICAgaWYgKGVudmlyb25tZW50cy5pc1RlbmFudCB8fCByZXNwb25zZT8uZGF0YT8uaXNXaGF0c0FwcCkge1xuICAgICAgICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNldEFjdGl2ZUFzaWRlVGFiKFxuICAgICAgICAgICAgICBIb3RlbE1hbmFnZUJvb2tpbmdBc2lkZVRhYkVudW0ud2hhdHNBcHBBZ2VudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTaG93IHN1Y2Nlc3Mgb3ZlcmxheVxuICAgICAgICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQ2FuY2VsbGF0aW9uIFN1Y2Nlc3NmdWwhJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICdZb3VyIGJvb2tpbmcgaGFzIGJlZW4gY2FuY2VsbGVkIHN1Y2Nlc3NmdWxseS4gVGhlIHJlZnVuZCB3aWxsIGJlIHByb2Nlc3NlZCBhY2NvcmRpbmcgdG8geW91ciBzZWxlY3RlZCBtZXRob2QuJyxcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiAnRG9uZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldCh0cnVlKTtcblxuICAgICAgICAgIC8vIEFsc28gZW1pdCBmb3IgcGFyZW50IGNvbXBvbmVudCBpZiBuZWVkZWRcbiAgICAgICAgICB0aGlzLmNhbmNlbGxhdGlvblN1Y2Nlc3MuZW1pdChyZXNwb25zZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmlzQ2FuY2VsbGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG5cbiAgICAgICAgICAvLyBFeHRyYWN0IGVycm9yIG1lc3NhZ2UgZnJvbSB2YXJpb3VzIHBvc3NpYmxlIHN0cnVjdHVyZXNcbiAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ1dlIGVuY291bnRlcmVkIGFuIGlzc3VlIHByb2Nlc3NpbmcgeW91ciBjYW5jZWxsYXRpb24uIFBsZWFzZSB0cnkgYWdhaW4gb3IgY29udGFjdCBzdXBwb3J0Lic7XG5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5jZWxsYXRpb24gZXJyb3I6JywgZXJyb3IpO1xuXG4gICAgICAgICAgaWYgKGVycm9yPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yPy5lcnJvcj8uZXJyb3JzICYmIEFycmF5LmlzQXJyYXkoZXJyb3IuZXJyb3IuZXJyb3JzKSAmJiBlcnJvci5lcnJvci5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IuZXJyb3JzWzBdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTaG93IGVycm9yIG92ZXJsYXlcbiAgICAgICAgICB0aGlzLnJlc3VsdE92ZXJsYXlEYXRhLnNldCh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdDYW5jZWxsYXRpb24gRmFpbGVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiAnQ2xvc2UnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaG93UmVzdWx0T3ZlcmxheS5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25DbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uTm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MocGFja2FnZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG5cbiAgICAvLyBTaG93IHN1Y2Nlc3Mgb3ZlcmxheSBmb3Igbm9uLXJlZnVuZGFibGUgcmVxdWVzdFxuICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KHtcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWJtaXR0ZWQhJyxcbiAgICAgIG1lc3NhZ2U6IGBZb3VyIGNhbmNlbGxhdGlvbiByZXF1ZXN0IGZvciAke3BhY2thZ2VOYW1lfSBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5LiBPdXIgdGVhbSB3aWxsIHJldmlldyB5b3VyIHJlcXVlc3QgYW5kIGNvbnRhY3QgeW91IHNob3J0bHkuYCxcbiAgICAgIGNvbmZpcm1UZXh0OiAnRG9uZSdcbiAgICB9KTtcbiAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldCh0cnVlKTtcblxuICAgIC8vIEFsc28gZW1pdCBmb3IgcGFyZW50IGNvbXBvbmVudCBpZiBuZWVkZWRcbiAgICB0aGlzLm5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzLmVtaXQocGFja2FnZU5hbWUpO1xuICB9XG5cbiAgb25DaGF0V2l0aEFnZW50KCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG4gICAgdGhpcy5jaGF0V2l0aEFnZW50LmVtaXQoKTtcbiAgfVxuXG4gIGNsb3NlQWxsTW9kYWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NvbmZpcm1Nb2RhbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0Vycm9yTW9kYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dBc2lkZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uUmVzdWx0T3ZlcmxheUNvbmZpcm0oKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UmVzdWx0T3ZlcmxheS5zZXQoZmFsc2UpO1xuICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KG51bGwpO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uUmVzdWx0T3ZlcmxheUNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldChmYWxzZSk7XG4gICAgdGhpcy5yZXN1bHRPdmVybGF5RGF0YS5zZXQobnVsbCk7XG4gIH1cbn1cbiIsIkBpZiAoc2hvd0FzaWRlKCkpIHtcbiAgPGFsbWF0YXItYXNpZGVcblxuICAgIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fd3JhcHBlclwiXG4gICAgW2FzaWRlVGl0bGVdPVwiYXNpZGVUaXRsZSgpXCJcbiAgICBbc2hvd0FzaWRlXT1cInNob3dBc2lkZSgpXCJcbiAgICBbd2hpdGVIZWFkZXJdPVwidHJ1ZVwiXG4gICAgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxuICAgIChvbkNsb3NlKT1cIm9uQ2xvc2VNb2RhbCgpXCJcbiAgPlxuICAgIDwhLS0gQ3VzdG9tIEhlYWRlciB3aXRoIDYwcHggaGVpZ2h0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyXCI+XG4gICAgICBAaWYgKGNhbkdvQmFjaygpKSB7XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyLWJhY2tcIiAoY2xpY2spPVwib25Hb0JhY2soKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWFycm93LWxlZnRcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItY29udGVudFwiPlxuICAgICAgICBAaWYgKGN1cnJlbnRTdGVwKCkgPT09IHN0ZXBFbnVtLnNlbGVjdFJvb21zKSB7XG4gICAgICAgICAgPGgyIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAgQGlmIChpc1NpbmdsZVBhY2thZ2UoKSkge1xuICAgICAgICAgICAgICBDYW5jZWwgUm9vbXNcbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBTZWxlY3QgUm9vbXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDxwIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgQGlmIChpc1NpbmdsZVBhY2thZ2UoKSkge1xuICAgICAgICAgICAgICBSZXZpZXcgYW5kIGNvbmZpcm0geW91ciBjYW5jZWxsYXRpb25cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBDaG9vc2Ugd2hpY2ggcm9vbShzKSB5b3UnZCBsaWtlIHRvIGNhbmNlbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgfSBAZWxzZSBpZiAoY3VycmVudFN0ZXAoKSA9PT0gc3RlcEVudW0ucmVmdW5kU3VtbWFyeSkge1xuICAgICAgICAgIDxoMiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItdGl0bGVcIj5DYW5jZWwgQm9va2luZyBSZXF1ZXN0PC9oMj5cbiAgICAgICAgICA8cCBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItc3VidGl0bGVcIj5SZXZpZXcgeW91ciByZWZ1bmQgc3VtbWFyeSBhbmQgcHJvY2VlZDwvcD5cbiAgICAgICAgfSBAZWxzZSBpZiAoY3VycmVudFN0ZXAoKSA9PT0gc3RlcEVudW0ucmVmdW5kTWV0aG9kKSB7XG4gICAgICAgICAgPGgyIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci10aXRsZVwiPlNlbGVjdCBSZWZ1bmQgTWV0aG9kPC9oMj5cbiAgICAgICAgICA8cCBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItc3VidGl0bGVcIj5DaG9vc2UgaG93IHlvdSdkIGxpa2UgdG8gcmVjZWl2ZSB5b3VyIHJlZnVuZDwvcD5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGgyIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci10aXRsZVwiPnt7IGFzaWRlVGl0bGUoKSB9fTwvaDI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyLXN1YnRpdGxlXCI+Q29tcGxldGUgeW91ciBib29raW5nIGNhbmNlbGxhdGlvbjwvcD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci1jbG9zZVwiIChjbGljayk9XCJvbkNsb3NlTW9kYWwoKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS10aW1lc1wiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19jb21wb25lbnRcIiBbY2xhc3MuaXNOdXNrXT1cImlzTnVzaygpXCI+XG4gICAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9fbG9hZGluZ1wiPlxuICAgICAgICAgIDxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoY3VycmVudFN0ZXAoKSA9PT0gc3RlcEVudW0uc2VsZWN0Um9vbXMgJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgIDxhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tc1xuICAgICAgICAgIFtwYWNrYWdlc109XCJwYWNrYWdlcygpXCJcbiAgICAgICAgICBbaG90ZWxJbmZvXT1cImhvdGVsSW5mbygpXCJcbiAgICAgICAgICBbYm9va2luZ0lkXT1cInNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmJvb2tpbmdJZFwiXG4gICAgICAgICAgW2hvdGVsSWRdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uaG90ZWxJZFwiXG4gICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJzZWxlY3RlZEhvdGVsQm9va2luZygpPy5jdXJyZW5jeUNvZGUgfHwgJ1NBUidcIlxuICAgICAgICAgIChjb250aW51ZVRvQ2FuY2VsKT1cIm9uQ29udGludWVUb0NhbmNlbCgkZXZlbnQpXCJcbiAgICAgICAgICAoY2xvc2VNb2RhbCk9XCJvbkNsb3NlTW9kYWwoKVwiXG4gICAgICAgICAgKG5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzKT1cIm9uTm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgKGNoYXRXaXRoQWdlbnQpPVwib25DaGF0V2l0aEFnZW50KClcIlxuICAgICAgICAvPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGN1cnJlbnRTdGVwKCkgPT09IHN0ZXBFbnVtLnJlZnVuZFN1bW1hcnkgJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgIDxhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5XG4gICAgICAgICAgW3NlbGVjdGVkUm9vbXNdPVwiYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2VsZWN0ZWRSb29tcygpXCJcbiAgICAgICAgICBbYm9va2luZ0lkXT1cInNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmJvb2tpbmdJZFwiXG4gICAgICAgICAgW2hvdGVsSWRdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uaWQgfHwgc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uaHBrXCJcbiAgICAgICAgICBbaG90ZWxJbmZvXT1cImhvdGVsSW5mbygpXCJcbiAgICAgICAgICBbc2VsZWN0aW9uU2tpcHBlZF09XCJwYWNrYWdlcygpLmxlbmd0aCA8PSAxXCJcbiAgICAgICAgICAoa2VlcFJvb20pPVwib25LZWVwUm9vbSgpXCJcbiAgICAgICAgICAoc2VsZWN0UmVmdW5kT3B0aW9uKT1cIm9uU2VsZWN0UmVmdW5kT3B0aW9uKCRldmVudClcIlxuICAgICAgICAgIChjbG9zZU1vZGFsKT1cIm9uQ2xvc2VNb2RhbCgpXCJcbiAgICAgICAgLz5cbiAgICAgIH1cblxuICAgICAgQGlmIChjdXJyZW50U3RlcCgpID09PSBzdGVwRW51bS5yZWZ1bmRNZXRob2QgJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgIDxhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1tZXRob2RcbiAgICAgICAgICBbcmVmdW5kRGV0YWlsc0RhdGFdPVwicmVmdW5kRGV0YWlsc0RhdGEoKVwiXG4gICAgICAgICAgW2N1cnJlbmN5T2JqXT1cImN1cnJlbnRDdXJyZW5jeSgpXCJcbiAgICAgICAgICBbcmVmdW5kTWV0aG9kXT1cInJlZnVuZE1ldGhvZCgpXCJcbiAgICAgICAgICBbaXNDYW5jZWxsaW5nXT1cImlzQ2FuY2VsbGluZygpXCJcbiAgICAgICAgICAobWV0aG9kU2VsZWN0ZWQpPVwib25NZXRob2RTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoYmFja1JlcXVlc3RlZCk9XCJvbkJhY2tGcm9tUmVmdW5kTWV0aG9kKClcIlxuICAgICAgICAgIChjb25maXJtUmVxdWVzdGVkKT1cImNvbmZpcm1DYW5jZWxsYXRpb24oKVwiXG4gICAgICAgICAgKGNsb3NlTW9kYWwpPVwib25DbG9zZU1vZGFsKClcIlxuICAgICAgICAgIFtib29raW5nSWRdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uYm9va2luZ0lkXCJcbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9hbG1hdGFyLWFzaWRlPlxufVxuXG5AaWYgKHNob3dFcnJvck1vZGFsKCkpIHtcbiAgPGRpdlxuICAgIGFsbWF0YXItbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsXG4gICAgW2Vycm9yTWVzc2FnZV09XCJob3RlbE1hbmFnZUVycm9yKClcIlxuICAgIChjYW5jZWxFdmVudCk9XCJjbG9zZUFsbE1vZGFscygpXCJcbiAgICAoY29uZmlybUV2ZW50KT1cImNsb3NlQWxsTW9kYWxzKClcIlxuICA+PC9kaXY+XG59XG5cbkBpZiAoc2hvd1Jlc3VsdE92ZXJsYXkoKSAmJiByZXN1bHRPdmVybGF5RGF0YSgpKSB7XG4gIDxhcHAtcmVzdWx0LW92ZXJsYXlcbiAgICBbZGF0YV09XCJyZXN1bHRPdmVybGF5RGF0YSgpIVwiXG4gICAgW3Nob3ddPVwic2hvd1Jlc3VsdE92ZXJsYXkoKVwiXG4gICAgKGNvbmZpcm0pPVwib25SZXN1bHRPdmVybGF5Q29uZmlybSgpXCJcbiAgICAoY2FuY2VsKT1cIm9uUmVzdWx0T3ZlcmxheUNhbmNlbCgpXCJcbiAgLz5cbn1cbiJdfQ==