@sarasanalytics-com/design-system 0.0.139 → 0.0.140
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/interfaces/form-layout.interface.mjs +1 -1
- package/esm2022/interfaces/icon-interface.mjs +1 -1
- package/esm2022/lib/accordion/accordion.component.mjs +2 -2
- package/esm2022/lib/button/button.component.mjs +1 -1
- package/esm2022/lib/card/card.component.mjs +2 -2
- package/esm2022/lib/card/checkbox-card/checkbox-card.component.mjs +2 -2
- package/esm2022/lib/card/guide-card/guide-card.component.mjs +1 -1
- package/esm2022/lib/card/menu-card/menu-card.component.mjs +2 -2
- package/esm2022/lib/card-carousel/card-carousel.component.mjs +2 -2
- package/esm2022/lib/categories-nav/categories-nav.component.mjs +22 -5
- package/esm2022/lib/data-grid/data-grid.component.mjs +24 -3
- package/esm2022/lib/dialog/dialog.component.mjs +3 -3
- package/esm2022/lib/filter/filter.component.mjs +2 -2
- package/esm2022/lib/form-input/form-input.component.mjs +13 -3
- package/esm2022/lib/form-select/form-select.component.mjs +3 -3
- package/esm2022/lib/grid-cell/grid-cell.component.mjs +8 -3
- package/esm2022/lib/header/header.component.mjs +3 -3
- package/esm2022/lib/icon/icon.component.mjs +4 -2
- package/esm2022/lib/layout-section/layout-section.component.mjs +2 -2
- package/esm2022/lib/left-nav/left-nav.component.mjs +2 -2
- package/esm2022/lib/list/list.component.mjs +2 -2
- package/esm2022/lib/menu/menu-list/menu-item.component.mjs +2 -2
- package/esm2022/lib/menu/menu.component.mjs +2 -2
- package/esm2022/lib/message-banner/message-banner.component.mjs +2 -2
- package/esm2022/lib/message-banner-v2/message-banner-v2.component.mjs +46 -29
- package/esm2022/lib/mini-card/mini-card.component.mjs +2 -2
- package/esm2022/lib/toast/toast.component.mjs +1 -1
- package/esm2022/lib/tool-tip/tool-tip.component.mjs +3 -3
- package/fesm2022/sarasanalytics-com-design-system.mjs +133 -63
- package/fesm2022/sarasanalytics-com-design-system.mjs.map +1 -1
- package/interfaces/form-layout.interface.d.ts +2 -7
- package/interfaces/icon-interface.d.ts +1 -0
- package/lib/categories-nav/categories-nav.component.d.ts +36 -3
- package/lib/data-grid/data-grid.component.d.ts +6 -1
- package/lib/form-input/form-input.component.d.ts +3 -0
- package/lib/icon/icon.component.d.ts +2 -1
- package/lib/message-banner-v2/message-banner-v2.component.d.ts +6 -3
- package/package.json +1 -1
|
@@ -29,7 +29,7 @@ export class MessageBannerComponent {
|
|
|
29
29
|
this.actionClick.emit(button);
|
|
30
30
|
}
|
|
31
31
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MessageBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: MessageBannerComponent, isStandalone: true, selector: "sa-message-banner", inputs: { type: "type", actionText: "actionText", content: "content", bannerIcon: "bannerIcon", bannerIconSize: "bannerIconSize", buttonIcon: "buttonIcon", buttonType: "buttonType", buttonIconPosition: "buttonIconPosition", buttonSize: "buttonSize", buttonIconSize: "buttonIconSize", button: "button", onAction: "onAction" }, outputs: { actionClick: "actionClick" }, providers: [IconService], ngImport: i0, template: "<div class=\"message-banner\" [class]=\"type\">\r\n <div class=\"content\">\r\n @if (bannerIcon) {\r\n <sa-icon class=\"icon\" [icon]=\"bannerIcon\" [size]=\"bannerIconSize\" [style.height.px]=\"bannerIconSize\"></sa-icon>\r\n }\r\n <ng-content></ng-content>\r\n </div>\r\n @if (actionText) {\r\n <sa-button class=\"action-button\" [text]=\"actionText\" [icon]=\"buttonIcon\" [size]=\"buttonSize\" [type]=\"buttonType\"\r\n [iconPosition]=\"buttonIconPosition\" [size]=\"buttonSize\" [buttonIconSize]=\"buttonIconSize\"\r\n (click)=\"onAction()\" (onClickEvent)=\"handleButtonClick($event)\">{{\r\n actionText\r\n }}</sa-button>\r\n }\r\n @else if(button) {\r\n <sa-button\r\n [text]=\"button?.text\"\r\n [icon]=\"button?.icon\"\r\n [size]=\"button?.size\"\r\n [type]=\"button?.type\"\r\n [iconPosition]=\"button?.iconPosition\"\r\n [buttonIconSize]=\"button?.buttonIconSize\"\r\n (onClickEvent)=\"handleButtonClick(button, $event)\"\r\n role=\"button\"\r\n [attr.aria-label]=\"button?.text\"\r\n >\r\n \r\n </sa-button>\r\n }\r\n</div>", styles: [".message-banner{display:flex;align-items:center;padding:var(--small-12px, 12px) var(--small-16px, 16px);border-radius:var(--small-8px, 8px);border:1px solid var(--grey-100);font-family:Arial,sans-serif;gap:var(--small-8px, 8px)}.content{flex:1 0 0;font-family:var(--font-roboto, Roboto);font-size:var(--small-14px);font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px;display:flex;flex-wrap:wrap;gap:var(--small-8px, 8px);align-items:center}.action-button{background:none;border:none;cursor:pointer;padding:4px 8px}.success{background-color:#e6f4ea;border:1px solid var(--grey-100, #EAECF0);color:#1e8e3e}.warning{color:var(--text-highemphasis, #4D4D4D);border:1px solid var(--grey-50, #E9EBEB);background:var(--secondary-50, #FFF3EB)}.info{border:1px solid var(--grey-100, #EAECF0);background-color:var(--structural-primarytint, #FBFAFF);color:var(--text-mediumemphasis, #6D6979)}.disclaimer{border:1px solid var(--grey-100, #EAECF0);background-color:var(--structural-neutral3);color:var(--text-mediumemphasis, #6D6979)}.standby{border:1px solid var(--grey-100, #EAECF0);background-color:var(--Structural-Primary-tint, #F9F7FC);color:var(--text-mediumemphasis, #6D6979)}.error{color:var(--semantic-error-500, #BD271E);border:1px solid var(--grey-100, #EAECF0);background:var(--semantic-error-50, #F8E9E9)}\n"], dependencies: [{ kind: "ngmodule", type: HttpClientModule }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget"], outputs: ["onClickEvent"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: MessageBannerComponent, isStandalone: true, selector: "sa-message-banner", inputs: { type: "type", actionText: "actionText", content: "content", bannerIcon: "bannerIcon", bannerIconSize: "bannerIconSize", buttonIcon: "buttonIcon", buttonType: "buttonType", buttonIconPosition: "buttonIconPosition", buttonSize: "buttonSize", buttonIconSize: "buttonIconSize", button: "button", onAction: "onAction" }, outputs: { actionClick: "actionClick" }, providers: [IconService], ngImport: i0, template: "<div class=\"message-banner\" [class]=\"type\">\r\n <div class=\"content\">\r\n @if (bannerIcon) {\r\n <sa-icon class=\"icon\" [icon]=\"bannerIcon\" [size]=\"bannerIconSize\" [style.height.px]=\"bannerIconSize\"></sa-icon>\r\n }\r\n <ng-content></ng-content>\r\n </div>\r\n @if (actionText) {\r\n <sa-button class=\"action-button\" [text]=\"actionText\" [icon]=\"buttonIcon\" [size]=\"buttonSize\" [type]=\"buttonType\"\r\n [iconPosition]=\"buttonIconPosition\" [size]=\"buttonSize\" [buttonIconSize]=\"buttonIconSize\"\r\n (click)=\"onAction()\" (onClickEvent)=\"handleButtonClick($event)\">{{\r\n actionText\r\n }}</sa-button>\r\n }\r\n @else if(button) {\r\n <sa-button\r\n [text]=\"button?.text\"\r\n [icon]=\"button?.icon\"\r\n [size]=\"button?.size\"\r\n [type]=\"button?.type\"\r\n [iconPosition]=\"button?.iconPosition\"\r\n [buttonIconSize]=\"button?.buttonIconSize\"\r\n (onClickEvent)=\"handleButtonClick(button, $event)\"\r\n role=\"button\"\r\n [attr.aria-label]=\"button?.text\"\r\n >\r\n \r\n </sa-button>\r\n }\r\n</div>", styles: [".message-banner{display:flex;align-items:center;padding:var(--small-12px, 12px) var(--small-16px, 16px);border-radius:var(--small-8px, 8px);border:1px solid var(--grey-100);font-family:Arial,sans-serif;gap:var(--small-8px, 8px)}.content{flex:1 0 0;font-family:var(--font-roboto, Roboto);font-size:var(--small-14px);font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px;display:flex;flex-wrap:wrap;gap:var(--small-8px, 8px);align-items:center}.action-button{background:none;border:none;cursor:pointer;padding:4px 8px}.success{background-color:#e6f4ea;border:1px solid var(--grey-100, #EAECF0);color:#1e8e3e}.warning{color:var(--text-highemphasis, #4D4D4D);border:1px solid var(--grey-50, #E9EBEB);background:var(--secondary-50, #FFF3EB)}.info{border:1px solid var(--grey-100, #EAECF0);background-color:var(--structural-primarytint, #FBFAFF);color:var(--text-mediumemphasis, #6D6979)}.disclaimer{border:1px solid var(--grey-100, #EAECF0);background-color:var(--structural-neutral3);color:var(--text-mediumemphasis, #6D6979)}.standby{border:1px solid var(--grey-100, #EAECF0);background-color:var(--Structural-Primary-tint, #F9F7FC);color:var(--text-mediumemphasis, #6D6979)}.error{color:var(--semantic-error-500, #BD271E);border:1px solid var(--grey-100, #EAECF0);background:var(--semantic-error-50, #F8E9E9)}\n"], dependencies: [{ kind: "ngmodule", type: HttpClientModule }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
33
33
|
}
|
|
34
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MessageBannerComponent, decorators: [{
|
|
35
35
|
type: Component,
|
|
@@ -61,4 +61,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
61
61
|
}], actionClick: [{
|
|
62
62
|
type: Output
|
|
63
63
|
}] } });
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1iYW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9tZXNzYWdlLWJhbm5lci9tZXNzYWdlLWJhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL21lc3NhZ2UtYmFubmVyL21lc3NhZ2UtYmFubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUE7O0FBVS9DLE1BQU0sT0FBTyxzQkFBc0I7SUFUbkM7UUFVVyxTQUFJLEdBQWdCLE1BQU0sQ0FBQztRQUUzQixZQUFPLEdBQVksRUFBRSxDQUFDO1FBRXRCLG1CQUFjLEdBQVksRUFBRSxDQUFDO1FBTzdCLGFBQVEsR0FBZSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0tBaUJqRDtJQWZDLGlCQUFpQixDQUFDLEtBQVUsRUFBRSxNQUF3QjtRQUNyRCxJQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sR0FBRztnQkFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQ3JCLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCO2dCQUNyQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQ3JCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQ3JCLEVBQUUsRUFBRSxrQkFBa0IsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbEQsS0FBSyxFQUFFLFNBQVM7YUFDakIsQ0FBQTtRQUNGLENBQUM7UUFDQSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzhHQTdCVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiwrYUFMdEIsQ0FBQyxXQUFXLENBQUMsMEJDYjFCLHVzQ0E2Qk0sczNDRGpCTSxnQkFBZ0IsK0JBQUUsYUFBYSxxTUFBRSxlQUFlOzsyRkFNL0Msc0JBQXNCO2tCQVRsQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLGFBQ2hELENBQUMsV0FBVyxDQUFDLGlCQUdULGlCQUFpQixDQUFDLElBQUk7OEJBRzVCLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVzc2FnZS1iYW5uZXInO1xyXG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ljb24vaWNvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi9pY29uL2ljb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWNvbk5hbWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ljb24taW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQnV0dG9uSWNvblBvc2l0aW9uLCBCdXR0b25JbnRlcmZhY2UsIEJ1dHRvblNpemUsIEJ1dHRvblR5cGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2J1dHRvbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCwga2ViYWJDYXNlIH0gZnJvbSAnbG9kYXNoJ1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NhLW1lc3NhZ2UtYmFubmVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtIdHRwQ2xpZW50TW9kdWxlLCBJY29uQ29tcG9uZW50LCBCdXR0b25Db21wb25lbnRdLFxyXG4gIHByb3ZpZGVyczogW0ljb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1iYW5uZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9tZXNzYWdlLWJhbm5lci5jb21wb25lbnQuY3NzJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQmFubmVyQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSB0eXBlOiBNZXNzYWdlVHlwZSA9ICdpbmZvJztcclxuICBASW5wdXQoKSBhY3Rpb25UZXh0Pzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbnRlbnQ/OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBiYW5uZXJJY29uPzogSWNvbk5hbWU7XHJcbiAgQElucHV0KCkgYmFubmVySWNvblNpemU/OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBidXR0b25JY29uPzogSWNvbk5hbWU7XHJcbiAgQElucHV0KCkgYnV0dG9uVHlwZT86IEJ1dHRvblR5cGU7XHJcbiAgQElucHV0KCkgYnV0dG9uSWNvblBvc2l0aW9uPzogQnV0dG9uSWNvblBvc2l0aW9uO1xyXG4gIEBJbnB1dCgpIGJ1dHRvblNpemU/OiBCdXR0b25TaXplO1xyXG4gIEBJbnB1dCgpIGJ1dHRvbkljb25TaXplPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGJ1dHRvbj86IEJ1dHRvbkludGVyZmFjZTtcclxuICBASW5wdXQoKSBvbkFjdGlvbjogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcclxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgaGFuZGxlQnV0dG9uQ2xpY2soZXZlbnQ6IGFueSwgYnV0dG9uPzogQnV0dG9uSW50ZXJmYWNlKTogdm9pZCB7XHJcbiAgIGlmKGlzVW5kZWZpbmVkKGJ1dHRvbikpIHtcclxuICAgIGJ1dHRvbiA9IHtcclxuICAgICAgaWNvbjogdGhpcy5idXR0b25JY29uLFxyXG4gICAgICBpY29uUG9zaXRpb246IHRoaXMuYnV0dG9uSWNvblBvc2l0aW9uLFxyXG4gICAgICBzaXplOiB0aGlzLmJ1dHRvblNpemUsXHJcbiAgICAgIGJ1dHRvbkljb25TaXplOiB0aGlzLmJ1dHRvbkljb25TaXplLFxyXG4gICAgICB0eXBlOiB0aGlzLmJ1dHRvblR5cGUsXHJcbiAgICAgIHRleHQ6IHRoaXMuYWN0aW9uVGV4dCxcclxuICAgICAgaWQ6IGBtZXNzYWdlLWJhbm5lci0ke2tlYmFiQ2FzZSh0aGlzLmFjdGlvblRleHQpfWAsXHJcbiAgICAgIHN0YXRlOiAnZGVmYXVsdCdcclxuICAgIH1cclxuICAgfVxyXG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGJ1dHRvbik7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtZXNzYWdlLWJhbm5lclwiIFtjbGFzc109XCJ0eXBlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgICAgIEBpZiAoYmFubmVySWNvbikge1xyXG4gICAgICAgIDxzYS1pY29uIGNsYXNzPVwiaWNvblwiIFtpY29uXT1cImJhbm5lckljb25cIiBbc2l6ZV09XCJiYW5uZXJJY29uU2l6ZVwiIFtzdHlsZS5oZWlnaHQucHhdPVwiYmFubmVySWNvblNpemVcIj48L3NhLWljb24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChhY3Rpb25UZXh0KSB7XHJcbiAgICA8c2EtYnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ1dHRvblwiIFt0ZXh0XT1cImFjdGlvblRleHRcIiBbaWNvbl09XCJidXR0b25JY29uXCIgW3NpemVdPVwiYnV0dG9uU2l6ZVwiIFt0eXBlXT1cImJ1dHRvblR5cGVcIlxyXG4gICAgICAgIFtpY29uUG9zaXRpb25dPVwiYnV0dG9uSWNvblBvc2l0aW9uXCIgW3NpemVdPVwiYnV0dG9uU2l6ZVwiIFtidXR0b25JY29uU2l6ZV09XCJidXR0b25JY29uU2l6ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uKClcIiAob25DbGlja0V2ZW50KT1cImhhbmRsZUJ1dHRvbkNsaWNrKCRldmVudClcIj57e1xyXG4gICAgICAgIGFjdGlvblRleHRcclxuICAgICAgICB9fTwvc2EtYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgQGVsc2UgaWYoYnV0dG9uKSB7XHJcbiAgICAgICAgPHNhLWJ1dHRvblxyXG4gICAgICAgICAgW3RleHRdPVwiYnV0dG9uPy50ZXh0XCJcclxuICAgICAgICAgIFtpY29uXT1cImJ1dHRvbj8uaWNvblwiXHJcbiAgICAgICAgICBbc2l6ZV09XCJidXR0b24/LnNpemVcIlxyXG4gICAgICAgICAgW3R5cGVdPVwiYnV0dG9uPy50eXBlXCJcclxuICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiYnV0dG9uPy5pY29uUG9zaXRpb25cIlxyXG4gICAgICAgICAgW2J1dHRvbkljb25TaXplXT1cImJ1dHRvbj8uYnV0dG9uSWNvblNpemVcIlxyXG4gICAgICAgICAgKG9uQ2xpY2tFdmVudCk9XCJoYW5kbGVCdXR0b25DbGljayhidXR0b24sICRldmVudClcIlxyXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImJ1dHRvbj8udGV4dFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgXHJcbiAgICAgICAgPC9zYS1idXR0b24+XHJcbiAgICB9XHJcbjwvZGl2PiJdfQ==
|
|
@@ -39,9 +39,21 @@ export class MessageBannerV2Component {
|
|
|
39
39
|
this.form = new FormGroup({});
|
|
40
40
|
this.model = {};
|
|
41
41
|
this.fields = [];
|
|
42
|
+
this.allFieldsFilled = signal(false);
|
|
43
|
+
this.additionalFieldRows = [];
|
|
42
44
|
this.onFormEvent = new EventEmitter();
|
|
43
45
|
this.buttons = [];
|
|
44
46
|
this.buttonClick = new EventEmitter();
|
|
47
|
+
// Group initial fields into rows based on fieldsPerRow
|
|
48
|
+
this.initialFieldRows = computed(() => {
|
|
49
|
+
const initialFields = this.getInitialFields();
|
|
50
|
+
const fieldsPerRow = this.activeFormLayout.fieldsPerRow || 2;
|
|
51
|
+
const rows = [];
|
|
52
|
+
for (let i = 0; i < initialFields.length; i += fieldsPerRow) {
|
|
53
|
+
rows.push(initialFields.slice(i, i + fieldsPerRow));
|
|
54
|
+
}
|
|
55
|
+
return rows;
|
|
56
|
+
});
|
|
45
57
|
}
|
|
46
58
|
// Computed properties for unified access
|
|
47
59
|
get activeFormInputs() {
|
|
@@ -258,18 +270,12 @@ export class MessageBannerV2Component {
|
|
|
258
270
|
input.value = model[key];
|
|
259
271
|
// Emit the change event to maintain compatibility with existing logic
|
|
260
272
|
this.onFormEvent.emit({ type: 'form-input-change', data: { label: input.label, value: model[key] } });
|
|
273
|
+
this.allFieldsFilled.set(this.areAllVisibleFieldsFilled());
|
|
261
274
|
}
|
|
262
275
|
});
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
if (!this.activeFormInputs || this.activeFormInputs.length === 0)
|
|
266
|
-
return false;
|
|
267
|
-
if (!this.activeFormLayout.conditionalFields) {
|
|
268
|
-
const initialCount = this.activeFormLayout.initialVisibleFields || this.activeFormLayout.fieldsPerRow || 2;
|
|
269
|
-
const initialFields = this.activeFormInputs.slice(0, initialCount);
|
|
270
|
-
return initialFields.every(field => field.value && field.value.trim && field.value.trim() !== '');
|
|
276
|
+
if (this.allFieldsFilled()) {
|
|
277
|
+
this.additionalFieldRows = this.getAdditionalFieldRows();
|
|
271
278
|
}
|
|
272
|
-
return this.activeFormLayout.conditionalFields.showWhen(this.model);
|
|
273
279
|
}
|
|
274
280
|
// Get initial fields to display in the first row
|
|
275
281
|
getInitialFields() {
|
|
@@ -292,20 +298,6 @@ export class MessageBannerV2Component {
|
|
|
292
298
|
// Otherwise, show remaining fields after initial count
|
|
293
299
|
return this.activeFormInputs.slice(initialCount);
|
|
294
300
|
}
|
|
295
|
-
// Get the actual field index for initial fields
|
|
296
|
-
getInitialFieldIndex(localIndex) {
|
|
297
|
-
return localIndex;
|
|
298
|
-
}
|
|
299
|
-
// Get the actual field index for additional fields
|
|
300
|
-
getAdditionalFieldIndex(localIndex) {
|
|
301
|
-
const initialCount = this.activeFormLayout.initialVisibleFields || this.activeFormLayout.fieldsPerRow || 2;
|
|
302
|
-
// If conditional fields are specified, use those indices
|
|
303
|
-
if (this.activeFormLayout.conditionalFields?.fields) {
|
|
304
|
-
return this.activeFormLayout.conditionalFields.fields[localIndex] || 0;
|
|
305
|
-
}
|
|
306
|
-
// Otherwise, offset by initial count
|
|
307
|
-
return initialCount + localIndex;
|
|
308
|
-
}
|
|
309
301
|
// Get CSS class for additional fields to maintain layout
|
|
310
302
|
getAdditionalFieldClass(localIndex) {
|
|
311
303
|
const fieldsPerRow = this.activeFormLayout.fieldsPerRow || 2;
|
|
@@ -325,8 +317,7 @@ export class MessageBannerV2Component {
|
|
|
325
317
|
return true;
|
|
326
318
|
// Get all currently visible fields
|
|
327
319
|
const initialFields = this.getInitialFields();
|
|
328
|
-
const
|
|
329
|
-
const allVisibleFields = [...initialFields, ...additionalFields];
|
|
320
|
+
const allVisibleFields = [...initialFields];
|
|
330
321
|
// Check if all visible fields have values
|
|
331
322
|
const allFieldsFilled = allVisibleFields.every(field => {
|
|
332
323
|
const modelKey = field.label.toLowerCase().replace(/\s+/g, '_');
|
|
@@ -343,16 +334,42 @@ export class MessageBannerV2Component {
|
|
|
343
334
|
}
|
|
344
335
|
return true;
|
|
345
336
|
});
|
|
346
|
-
// Also check if the form is valid
|
|
347
337
|
const formValid = this.form.valid;
|
|
348
338
|
return allFieldsFilled && formValid;
|
|
349
339
|
}
|
|
340
|
+
// Group additional fields into rows based on fieldsPerRow
|
|
341
|
+
getAdditionalFieldRows() {
|
|
342
|
+
const additionalFields = this.getAdditionalFields();
|
|
343
|
+
const fieldsPerRow = this.activeFormLayout.fieldsPerRow || 2;
|
|
344
|
+
const rows = [];
|
|
345
|
+
for (let i = 0; i < additionalFields.length; i += fieldsPerRow) {
|
|
346
|
+
rows.push(additionalFields.slice(i, i + fieldsPerRow));
|
|
347
|
+
}
|
|
348
|
+
return rows;
|
|
349
|
+
}
|
|
350
|
+
// Get field index for initial field rows
|
|
351
|
+
getInitialFieldRowIndex(rowIndex, fieldIndex) {
|
|
352
|
+
const fieldsPerRow = this.activeFormLayout.fieldsPerRow || 2;
|
|
353
|
+
return (rowIndex * fieldsPerRow) + fieldIndex;
|
|
354
|
+
}
|
|
355
|
+
// Get field index for additional field rows
|
|
356
|
+
getAdditionalFieldRowIndex(rowIndex, fieldIndex) {
|
|
357
|
+
const fieldsPerRow = this.activeFormLayout.fieldsPerRow || 2;
|
|
358
|
+
const initialCount = this.activeFormLayout.initialVisibleFields || this.activeFormLayout.fieldsPerRow || 2;
|
|
359
|
+
// If conditional fields are specified, use those indices
|
|
360
|
+
if (this.activeFormLayout.conditionalFields?.fields) {
|
|
361
|
+
const flatIndex = (rowIndex * fieldsPerRow) + fieldIndex;
|
|
362
|
+
return this.activeFormLayout.conditionalFields.fields[flatIndex] || 0;
|
|
363
|
+
}
|
|
364
|
+
// Otherwise, offset by initial count
|
|
365
|
+
return initialCount + (rowIndex * fieldsPerRow) + fieldIndex;
|
|
366
|
+
}
|
|
350
367
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MessageBannerV2Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
351
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: MessageBannerV2Component, isStandalone: true, selector: "sa-message-banner-v2", inputs: { messageType: "messageType", contactUrl: "contactUrl", spacingBetweenImageAndDescription: "spacingBetweenImageAndDescription", contentGap: "contentGap", titleClass: "titleClass", descriptionClass: "descriptionClass", banner: "banner", formConfig: "formConfig", messageIcon: "messageIcon", messageIconSize: "messageIconSize", title: "title", description: "description", buttons: "buttons" }, outputs: { onFormEvent: "onFormEvent", buttonClick: "buttonClick" }, providers: [IconService], usesOnChanges: true, ngImport: i0, template: "@if (bannerContent(); as content) {\r\n <div class=\"error-page message-banner-v2\">\r\n <div class=\"content-container\" [ngStyle]=\"{ gap: contentGap || 'var(--medium-32px, 32px)' }\">\r\n <div class=\"image-container\"\r\n [ngStyle]=\"{ 'margin-bottom': spacingBetweenImageAndDescription ?? 'var(--small-16px, 16px)' }\">\r\n <img [src]=\"content.messageIcon\" [alt]=\"content.type + ' image'\"\r\n [style.--message-icon-height]=\"content.messageIconSize?.height\"\r\n [style.--message-icon-width]=\"content.messageIconSize?.width\" />\r\n </div>\r\n <div class=\"details\">\r\n <div class=\"title-description\">\r\n <div class=\"title-class\" [ngClass]=\"titleClass || 'title-class'\" [innerHTML]=\"content.title\"></div>\r\n <p class=\"description\" [ngClass]=\"descriptionClass || 'description'\" [innerHTML]=\"content.description\"></p> \r\n <div [ngStyle]=\"{ margin: banner?.spacing + 'px 0px' }\">\r\n <sa-message-banner *ngIf=\"!isEmptyObject(banner)\" [type]=\"banner?.type\" [bannerIcon]=\"banner?.bannerIcon\" [buttonIcon]=\"banner?.buttonIcon\"\r\n [bannerIconSize]=\"banner?.bannerIconSize\" [buttonType]=\"banner?.buttonType\" [buttonSize]=\"banner?.buttonSize\" [buttonIconPosition]=\"banner?.buttonIconPosition\"\r\n [buttonIconSize]=\"banner?.buttonIconSize\" [actionText]=\"banner?.actionText\" >\r\n <div [innerHTML]=\"banner?.text\"></div>\r\n </sa-message-banner>\r\n </div>\r\n </div>\r\n \r\n <!-- Form inputs section -->\r\n <ng-container *ngIf=\"activeFormInputs?.length\">\r\n <form [formGroup]=\"form\" class=\"dialog-form\">\r\n <!-- Initial fields row (dynamic count based on formLayout.fieldsPerRow) -->\r\n <div class=\"form-row\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let input of getInitialFields(); let i = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getInitialFieldIndex(i)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n \r\n <!-- Additional fields (conditional based on formLayout.conditionalFields) -->\r\n <div class=\"additional-fields\" *ngIf=\"shouldShowAdditionalFields()\">\r\n <div class=\"form-row\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let input of getAdditionalFields(); let i = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getAdditionalFieldIndex(i)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\"\r\n *ngIf=\"fields[getAdditionalFieldIndex(i)]\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-container>\r\n \r\n <!-- Custom form button(s) -->\r\n <div class=\"form-button-container\" *ngIf=\"activeCustomFormButton\">\r\n <!-- Support both single button and array of buttons -->\r\n <ng-container *ngIf=\"isButtonArray(); else singleButton\">\r\n <sa-button \r\n *ngFor=\"let button of activeCustomFormButton\"\r\n class=\"action-button\"\r\n [id]=\"button.id\"\r\n [text]=\"button.text\"\r\n [type]=\"button.type\"\r\n [size]=\"button.size\"\r\n [state]=\"button.state\"\r\n [ImagePath]=\"button.ImagePath\"\r\n [iconPosition]=\"button.iconPosition\"\r\n (click)=\"onButtonClick(button)\">\r\n </sa-button>\r\n </ng-container>\r\n \r\n <ng-template #singleButton>\r\n <sa-button class=\"action-button\"\r\n [id]=\"activeCustomFormButton.id\"\r\n [text]=\"activeCustomFormButton.text\"\r\n [type]=\"activeCustomFormButton.type\"\r\n [size]=\"activeCustomFormButton.size\"\r\n [state]=\"activeCustomFormButton.state\"\r\n [ImagePath]=\"activeCustomFormButton.ImagePath\"\r\n [iconPosition]=\"activeCustomFormButton.iconPosition\"\r\n (click)=\"onButtonClick(activeCustomFormButton)\">\r\n </sa-button>\r\n </ng-template>\r\n </div>\r\n \r\n <!-- Divider section -->\r\n <div class=\"divider-section\" *ngIf=\"activeDivider\">\r\n <div class=\"divider\"></div>\r\n <div class=\"divider-header\">\r\n <h3 class=\"divider-title\" *ngIf=\"activeDividerConfig.title\">{{ activeDividerConfig.title }}</h3>\r\n <p class=\"divider-subtitle\" *ngIf=\"activeDividerConfig.subtitle || activeDividerConfig.showSubtitleWhenEmpty\">\r\n {{ activeDividerConfig.subtitle || 'No items added yet' }}\r\n </p>\r\n </div>\r\n \r\n <!-- Chips section -->\r\n <div class=\"chip-list\" *ngIf=\"activeChips?.length\">\r\n <sa-chip \r\n *ngFor=\"let chip of activeChips\"\r\n [text]=\"chip.label || chip.text || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'default'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"chip.removable ? onChipRemove(chip) : null\">\r\n </sa-chip>\r\n </div>\r\n </div>\r\n \r\n @if(buttons){\r\n <div class=\"button-group\">\r\n @for (button of buttons; track button.text) {\r\n <sa-button \r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [state]=\"!areAllVisibleFieldsFilled() ? 'disabled' : ''\"\r\n [attr.aria-label]=\"button.text\">\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }", styles: [".error-page{display:flex;justify-content:center;align-items:center;box-sizing:border-box}.title-class{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:1.5rem;letter-spacing:.15px}.content-container{display:flex;flex-direction:column;align-items:center;gap:var(--medium-32px, 32px);text-align:center}.image-container{display:flex;justify-content:center;align-items:center;margin-bottom:var(--small-16px, 16px)}.image-container img{height:var(--message-icon-height, 12.5rem);width:var(--message-icon-width, fit-content)}.details{display:flex;flex-direction:column;align-items:center;gap:var(--medium-20px, 20px);text-align:center;background-color:var(--structural-white, #FFF)}::ng-deep .description .support-email{color:var(--primary-500);font-family:var(--font-roboto, Roboto);font-size:14px;font-style:normal;font-weight:500;line-height:1.25rem;letter-spacing:.1px}.description{color:var(--Text-Medium-Emphasis, #6D6979);text-align:center;font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.message-banner-v2 .button-group{display:flex;gap:var(--small-8px);justify-content:center}::ng-deep .custom-contact-link{color:var(--primary-500, #7F56D9);font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:var(--medium-24px);letter-spacing:.15px;text-decoration:none}.access-restricted-title{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.access-restricted-description{text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);line-height:var(--medium-24px);max-width:44rem;white-space:normal;word-break:break-word}.access-error-title{color:var(--semantic-error-500, #BD271E);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.redirect-link{display:flex;align-items:center;gap:8px;cursor:pointer}.info-icon{width:16px;height:16px;color:var(--primary-500, #825CEE)}.learn-more-text{font-size:14px;color:var(--primary-500, #825CEE);text-decoration:none}.redirect-link:hover .learn-more-text{text-decoration:underline}.additional-fields{display:flex;gap:16px;width:100%}.form-button-container{display:flex;justify-content:flex-end;align-items:center;align-self:stretch}::ng-deep .form-button-container .action-button .sa-button{align-self:flex-start;display:flex;justify-content:center;align-items:center;gap:var(--small-3px, 3px);align-self:stretch}.divider-section{margin-top:32px;width:100%}.divider{width:100%;height:1px;background:var(--grey-200, #E4E7EC);margin-bottom:24px}.divider-header{margin-bottom:16px}.divider-title{font-size:16px;font-weight:600;color:var(--text-high-emphasis, #1C1B20);margin:0 0 8px;font-family:var(--font-family, Roboto)}.divider-subtitle{font-size:14px;font-weight:400;color:var(--text-medium-emphasis, #6D6979);margin:0;font-style:italic;font-family:var(--font-family, Roboto)}.chip-list{display:flex;flex-wrap:wrap;gap:8px}.dialog-form{width:100%;display:flex;flex-direction:column;gap:16px}.dialog-form .form-row{display:flex;gap:16px;margin-bottom:16px;width:100%}.dialog-form .form-field-wrapper{flex:1;display:flex;flex-direction:column;gap:4px}.dialog-form .form-field-wrapper.full-width{flex:1 1 100%}.dialog-form .additional-fields{display:flex;flex-direction:column;gap:16px;width:100%}::ng-deep .dialog-form formly-form{width:100%;display:block}::ng-deep .dialog-form formly-field{width:100%;display:block}::ng-deep .dialog-form .col-6,::ng-deep .dialog-form .col-12{width:100%;display:block}::ng-deep .dialog-form formly-group{width:100%;display:block;margin:0;padding:0}::ng-deep .additional-fields formly-form{width:100%;display:block}::ng-deep .dialog-form lib-form-select{width:100%}::ng-deep .dialog-form .sa-select-container{width:100%;display:flex;flex-direction:column}::ng-deep .dialog-form .sa-select-field-container{width:100%;position:relative}::ng-deep .dialog-form .ng-select{min-height:44px;border-radius:4px;padding:unset;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}::ng-deep .dialog-form .sa-select-container .sa-select-field-container .ng-select-field{padding:unset;border:none}::ng-deep .dialog-form .ng-select.ng-select-focused{border-color:var(--primary-500, #825CEE);box-shadow:0 0 0 3px #825cee1a}::ng-deep .dialog-form .ng-select .ng-select-container{min-height:44px;padding:12px 16px}::ng-deep .dialog-form .ng-select .ng-placeholder{color:var(--text-medium-emphasis, #6D6979);font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "ngmodule", type: HttpClientModule }, { kind: "component", type: MessageBannerComponent, selector: "sa-message-banner", inputs: ["type", "actionText", "content", "bannerIcon", "bannerIconSize", "buttonIcon", "buttonType", "buttonIconPosition", "buttonSize", "buttonIconSize", "button", "onAction"], outputs: ["actionClick"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }] }); }
|
|
368
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: MessageBannerV2Component, isStandalone: true, selector: "sa-message-banner-v2", inputs: { messageType: "messageType", contactUrl: "contactUrl", spacingBetweenImageAndDescription: "spacingBetweenImageAndDescription", contentGap: "contentGap", titleClass: "titleClass", descriptionClass: "descriptionClass", banner: "banner", formConfig: "formConfig", messageIcon: "messageIcon", messageIconSize: "messageIconSize", title: "title", description: "description", buttons: "buttons" }, outputs: { onFormEvent: "onFormEvent", buttonClick: "buttonClick" }, providers: [IconService], usesOnChanges: true, ngImport: i0, template: "@if (bannerContent(); as content) {\r\n <div class=\"error-page message-banner-v2\">\r\n <div class=\"content-container\" [ngStyle]=\"{ gap: contentGap || 'var(--medium-32px, 32px)' }\">\r\n <div class=\"image-container\"\r\n [ngStyle]=\"{ 'margin-bottom': spacingBetweenImageAndDescription ?? 'var(--small-16px, 16px)' }\">\r\n <img [src]=\"content.messageIcon\" [alt]=\"content.type + ' image'\"\r\n [style.--message-icon-height]=\"content.messageIconSize?.height\"\r\n [style.--message-icon-width]=\"content.messageIconSize?.width\" />\r\n </div>\r\n <div class=\"details\">\r\n <div class=\"title-description\">\r\n <div class=\"title-class\" [ngClass]=\"titleClass || 'title-class'\" [innerHTML]=\"content.title\"></div>\r\n <p class=\"description\" [ngClass]=\"descriptionClass || 'description'\" [innerHTML]=\"content.description\"></p> \r\n <div [ngStyle]=\"{ margin: banner?.spacing + 'px 0px' }\">\r\n <sa-message-banner *ngIf=\"!isEmptyObject(banner)\" [type]=\"banner?.type\" [bannerIcon]=\"banner?.bannerIcon\" [buttonIcon]=\"banner?.buttonIcon\"\r\n [bannerIconSize]=\"banner?.bannerIconSize\" [buttonType]=\"banner?.buttonType\" [buttonSize]=\"banner?.buttonSize\" [buttonIconPosition]=\"banner?.buttonIconPosition\"\r\n [buttonIconSize]=\"banner?.buttonIconSize\" [actionText]=\"banner?.actionText\" >\r\n <div [innerHTML]=\"banner?.text\"></div>\r\n </sa-message-banner>\r\n </div>\r\n </div>\r\n \r\n <!-- Form inputs section -->\r\n <ng-container *ngIf=\"activeFormInputs?.length\">\r\n <div class=\"form-fields-container\">\r\n <div class=\"form-fields-scroll-area\">\r\n <form [formGroup]=\"form\" class=\"dialog-form\">\r\n <!-- Initial fields rows (dynamic count based on formLayout.fieldsPerRow) -->\r\n <div class=\"form-row\" *ngFor=\"let row of initialFieldRows(); let rowIndex = index\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let field of row; let fieldIndex = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getInitialFieldRowIndex(rowIndex, fieldIndex)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n \r\n <!-- Additional fields rows (conditional based on formLayout.conditionalFields) -->\r\n <div class=\"additional-fields\" *ngIf=\"areAllVisibleFieldsFilled()\">\r\n <div class=\"form-row\" *ngFor=\"let row of additionalFieldRows; let rowIndex = index\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let field of row; let fieldIndex = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getAdditionalFieldRowIndex(rowIndex, fieldIndex)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\"\r\n *ngIf=\"fields[getAdditionalFieldRowIndex(rowIndex, fieldIndex)]\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Custom form button(s) -->\r\n <div class=\"form-button-container\" *ngIf=\"activeCustomFormButton\">\r\n <!-- Support both single button and array of buttons -->\r\n <ng-container *ngIf=\"isButtonArray(); else singleButton\">\r\n <sa-button \r\n *ngFor=\"let button of activeCustomFormButton\"\r\n class=\"action-button\"\r\n [id]=\"button.id\"\r\n [text]=\"button.text\"\r\n [type]=\"button.type\"\r\n [size]=\"button.size\"\r\n [state]=\"button.state\"\r\n [ImagePath]=\"button.ImagePath\"\r\n [iconPosition]=\"button.iconPosition\"\r\n (click)=\"onButtonClick(button)\">\r\n </sa-button>\r\n </ng-container>\r\n \r\n <ng-template #singleButton>\r\n <sa-button class=\"action-button\"\r\n [id]=\"activeCustomFormButton.id\"\r\n [text]=\"activeCustomFormButton.text\"\r\n [type]=\"activeCustomFormButton.type\"\r\n [size]=\"activeCustomFormButton.size\"\r\n [state]=\"activeCustomFormButton.state\"\r\n [ImagePath]=\"activeCustomFormButton.ImagePath\"\r\n [iconPosition]=\"activeCustomFormButton.iconPosition\"\r\n (click)=\"onButtonClick(activeCustomFormButton)\">\r\n </sa-button>\r\n </ng-template>\r\n </div>\r\n \r\n <!-- Divider section -->\r\n <div class=\"divider-section\" *ngIf=\"activeDivider\">\r\n <div class=\"divider\"></div>\r\n <div class=\"divider-header\">\r\n <h3 class=\"divider-title\" *ngIf=\"activeDividerConfig.title\">{{ activeDividerConfig.title }}</h3>\r\n <p class=\"divider-subtitle\" *ngIf=\"activeDividerConfig.subtitle || activeDividerConfig.showSubtitleWhenEmpty\">\r\n {{ activeDividerConfig.subtitle || 'No items added yet' }}\r\n </p>\r\n </div>\r\n \r\n <!-- Chips section -->\r\n <div class=\"chip-list\" *ngIf=\"activeChips?.length\">\r\n <sa-chip \r\n *ngFor=\"let chip of activeChips\"\r\n [text]=\"chip.label || chip.text || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'default'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"chip.removable ? onChipRemove(chip) : null\">\r\n </sa-chip>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n @if(buttons){\r\n <div class=\"button-group\">\r\n @for (button of buttons; track button.text) {\r\n <sa-button \r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [state]=\"!areAllVisibleFieldsFilled() ? 'disabled' : ''\"\r\n [attr.aria-label]=\"button.text\">\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }", styles: [".error-page{display:flex;justify-content:center;align-items:center;box-sizing:border-box}.title-class{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:1.5rem;letter-spacing:.15px}.content-container{display:flex;flex-direction:column;align-items:center;gap:var(--medium-32px, 32px);text-align:center}.image-container{display:flex;justify-content:center;align-items:center;margin-bottom:var(--small-16px, 16px)}.image-container img{height:var(--message-icon-height, 12.5rem);width:var(--message-icon-width, fit-content)}.details{display:flex;flex-direction:column;align-items:center;gap:var(--medium-20px, 20px);text-align:center;background-color:var(--structural-white, #FFF)}::ng-deep .description .support-email{color:var(--primary-500);font-family:var(--font-roboto, Roboto);font-size:14px;font-style:normal;font-weight:500;line-height:1.25rem;letter-spacing:.1px}.description{color:var(--Text-Medium-Emphasis, #6D6979);text-align:center;font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.message-banner-v2 .button-group{display:flex;gap:var(--small-8px);justify-content:center}::ng-deep .custom-contact-link{color:var(--primary-500, #7F56D9);font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:var(--medium-24px);letter-spacing:.15px;text-decoration:none}.access-restricted-title{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.access-restricted-description{text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);line-height:var(--medium-24px);max-width:44rem;white-space:normal;word-break:break-word}.access-error-title{color:var(--semantic-error-500, #BD271E);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.redirect-link{display:flex;align-items:center;gap:8px;cursor:pointer}.info-icon{width:16px;height:16px;color:var(--primary-500, #825CEE)}.learn-more-text{font-size:14px;color:var(--primary-500, #825CEE);text-decoration:none}.redirect-link:hover .learn-more-text{text-decoration:underline}.additional-fields{display:flex;gap:16px;width:100%}.form-button-container{display:flex;justify-content:flex-end;align-items:center;align-self:stretch}::ng-deep .form-button-container .action-button .sa-button{align-self:flex-start;display:flex;justify-content:center;align-items:center;gap:var(--small-3px, 3px);align-self:stretch}.divider-section{flex:0 0 auto;margin-top:32px;width:100%}.divider{width:100%;height:1px;background:var(--grey-200, #E4E7EC);margin-bottom:24px}.divider-header{margin-bottom:16px}.divider-title{font-size:16px;font-weight:600;color:var(--text-high-emphasis, #1C1B20);margin:0 0 8px;font-family:var(--font-family, Roboto)}.divider-subtitle{font-size:14px;font-weight:400;color:var(--text-medium-emphasis, #6D6979);margin:0;font-style:italic;font-family:var(--font-family, Roboto)}.chip-list{display:flex;flex-wrap:wrap;gap:8px}.dialog-form{width:100%;display:flex;flex-direction:column;gap:16px}.form-fields-container{min-height:0;flex:0 0 auto;width:100%;position:relative;z-index:1;overflow:visible}.dialog-form .form-row{display:flex;gap:16px;margin-bottom:16px;width:100%}.dialog-form .form-field-wrapper{flex:1;display:flex;flex-direction:column;gap:4px}.dialog-form .form-field-wrapper.full-width{flex:1 1 100%}.dialog-form .additional-fields{display:flex;flex-direction:column;gap:16px;width:100%}::ng-deep .dialog-form formly-form{width:100%;display:block}::ng-deep .dialog-form formly-field{width:100%;display:block}::ng-deep .dialog-form .col-6,::ng-deep .dialog-form .col-12{width:100%;display:block}::ng-deep .dialog-form formly-group{width:100%;display:block;margin:0;padding:0}::ng-deep .additional-fields formly-form{width:100%;display:block}::ng-deep .dialog-form lib-form-select{width:100%}::ng-deep .dialog-form .sa-select-container{width:100%;display:flex;flex-direction:column}::ng-deep .dialog-form .sa-select-field-container{width:100%;position:relative}::ng-deep .dialog-form .ng-select{min-height:44px;border-radius:4px;padding:unset;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}::ng-deep .dialog-form .sa-select-container .sa-select-field-container .ng-select-field{padding:unset;border:none}::ng-deep .dialog-form .ng-select.ng-select-focused{border-color:var(--primary-500, #825CEE);box-shadow:0 0 0 3px #825cee1a}::ng-deep .dialog-form .ng-select .ng-select-container{min-height:44px;padding:12px 16px}.form-fields-scroll-wrapper{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "ngmodule", type: HttpClientModule }, { kind: "component", type: MessageBannerComponent, selector: "sa-message-banner", inputs: ["type", "actionText", "content", "bannerIcon", "bannerIconSize", "buttonIcon", "buttonType", "buttonIconPosition", "buttonSize", "buttonIconSize", "button", "onAction"], outputs: ["actionClick"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }] }); }
|
|
352
369
|
}
|
|
353
370
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MessageBannerV2Component, decorators: [{
|
|
354
371
|
type: Component,
|
|
355
|
-
args: [{ selector: 'sa-message-banner-v2', standalone: true, imports: [CommonModule, IconComponent, ButtonComponent, HttpClientModule, MessageBannerComponent, FormInputComponent, FormSelectComponent, FormsModule, ReactiveFormsModule, FormlyModule, ChipsComponent], providers: [IconService], template: "@if (bannerContent(); as content) {\r\n <div class=\"error-page message-banner-v2\">\r\n <div class=\"content-container\" [ngStyle]=\"{ gap: contentGap || 'var(--medium-32px, 32px)' }\">\r\n <div class=\"image-container\"\r\n [ngStyle]=\"{ 'margin-bottom': spacingBetweenImageAndDescription ?? 'var(--small-16px, 16px)' }\">\r\n <img [src]=\"content.messageIcon\" [alt]=\"content.type + ' image'\"\r\n [style.--message-icon-height]=\"content.messageIconSize?.height\"\r\n [style.--message-icon-width]=\"content.messageIconSize?.width\" />\r\n </div>\r\n <div class=\"details\">\r\n <div class=\"title-description\">\r\n <div class=\"title-class\" [ngClass]=\"titleClass || 'title-class'\" [innerHTML]=\"content.title\"></div>\r\n <p class=\"description\" [ngClass]=\"descriptionClass || 'description'\" [innerHTML]=\"content.description\"></p> \r\n <div [ngStyle]=\"{ margin: banner?.spacing + 'px 0px' }\">\r\n <sa-message-banner *ngIf=\"!isEmptyObject(banner)\" [type]=\"banner?.type\" [bannerIcon]=\"banner?.bannerIcon\" [buttonIcon]=\"banner?.buttonIcon\"\r\n [bannerIconSize]=\"banner?.bannerIconSize\" [buttonType]=\"banner?.buttonType\" [buttonSize]=\"banner?.buttonSize\" [buttonIconPosition]=\"banner?.buttonIconPosition\"\r\n [buttonIconSize]=\"banner?.buttonIconSize\" [actionText]=\"banner?.actionText\" >\r\n <div [innerHTML]=\"banner?.text\"></div>\r\n </sa-message-banner>\r\n </div>\r\n </div>\r\n \r\n <!-- Form inputs section -->\r\n <ng-container *ngIf=\"activeFormInputs?.length\">\r\n <form [formGroup]=\"form\" class=\"dialog-form\">\r\n <!-- Initial fields row (dynamic count based on formLayout.fieldsPerRow) -->\r\n <div class=\"form-row\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let input of getInitialFields(); let i = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getInitialFieldIndex(i)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n \r\n <!-- Additional fields (conditional based on formLayout.conditionalFields) -->\r\n <div class=\"additional-fields\" *ngIf=\"shouldShowAdditionalFields()\">\r\n <div class=\"form-row\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let input of getAdditionalFields(); let i = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getAdditionalFieldIndex(i)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\"\r\n *ngIf=\"fields[getAdditionalFieldIndex(i)]\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-container>\r\n \r\n <!-- Custom form button(s) -->\r\n <div class=\"form-button-container\" *ngIf=\"activeCustomFormButton\">\r\n <!-- Support both single button and array of buttons -->\r\n <ng-container *ngIf=\"isButtonArray(); else singleButton\">\r\n <sa-button \r\n *ngFor=\"let button of activeCustomFormButton\"\r\n class=\"action-button\"\r\n [id]=\"button.id\"\r\n [text]=\"button.text\"\r\n [type]=\"button.type\"\r\n [size]=\"button.size\"\r\n [state]=\"button.state\"\r\n [ImagePath]=\"button.ImagePath\"\r\n [iconPosition]=\"button.iconPosition\"\r\n (click)=\"onButtonClick(button)\">\r\n </sa-button>\r\n </ng-container>\r\n \r\n <ng-template #singleButton>\r\n <sa-button class=\"action-button\"\r\n [id]=\"activeCustomFormButton.id\"\r\n [text]=\"activeCustomFormButton.text\"\r\n [type]=\"activeCustomFormButton.type\"\r\n [size]=\"activeCustomFormButton.size\"\r\n [state]=\"activeCustomFormButton.state\"\r\n [ImagePath]=\"activeCustomFormButton.ImagePath\"\r\n [iconPosition]=\"activeCustomFormButton.iconPosition\"\r\n (click)=\"onButtonClick(activeCustomFormButton)\">\r\n </sa-button>\r\n </ng-template>\r\n </div>\r\n \r\n <!-- Divider section -->\r\n <div class=\"divider-section\" *ngIf=\"activeDivider\">\r\n <div class=\"divider\"></div>\r\n <div class=\"divider-header\">\r\n <h3 class=\"divider-title\" *ngIf=\"activeDividerConfig.title\">{{ activeDividerConfig.title }}</h3>\r\n <p class=\"divider-subtitle\" *ngIf=\"activeDividerConfig.subtitle || activeDividerConfig.showSubtitleWhenEmpty\">\r\n {{ activeDividerConfig.subtitle || 'No items added yet' }}\r\n </p>\r\n </div>\r\n \r\n <!-- Chips section -->\r\n <div class=\"chip-list\" *ngIf=\"activeChips?.length\">\r\n <sa-chip \r\n *ngFor=\"let chip of activeChips\"\r\n [text]=\"chip.label || chip.text || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'default'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"chip.removable ? onChipRemove(chip) : null\">\r\n </sa-chip>\r\n </div>\r\n </div>\r\n \r\n @if(buttons){\r\n <div class=\"button-group\">\r\n @for (button of buttons; track button.text) {\r\n <sa-button \r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [state]=\"!areAllVisibleFieldsFilled() ? 'disabled' : ''\"\r\n [attr.aria-label]=\"button.text\">\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }", styles: [".error-page{display:flex;justify-content:center;align-items:center;box-sizing:border-box}.title-class{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:1.5rem;letter-spacing:.15px}.content-container{display:flex;flex-direction:column;align-items:center;gap:var(--medium-32px, 32px);text-align:center}.image-container{display:flex;justify-content:center;align-items:center;margin-bottom:var(--small-16px, 16px)}.image-container img{height:var(--message-icon-height, 12.5rem);width:var(--message-icon-width, fit-content)}.details{display:flex;flex-direction:column;align-items:center;gap:var(--medium-20px, 20px);text-align:center;background-color:var(--structural-white, #FFF)}::ng-deep .description .support-email{color:var(--primary-500);font-family:var(--font-roboto, Roboto);font-size:14px;font-style:normal;font-weight:500;line-height:1.25rem;letter-spacing:.1px}.description{color:var(--Text-Medium-Emphasis, #6D6979);text-align:center;font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.message-banner-v2 .button-group{display:flex;gap:var(--small-8px);justify-content:center}::ng-deep .custom-contact-link{color:var(--primary-500, #7F56D9);font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:var(--medium-24px);letter-spacing:.15px;text-decoration:none}.access-restricted-title{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.access-restricted-description{text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);line-height:var(--medium-24px);max-width:44rem;white-space:normal;word-break:break-word}.access-error-title{color:var(--semantic-error-500, #BD271E);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.redirect-link{display:flex;align-items:center;gap:8px;cursor:pointer}.info-icon{width:16px;height:16px;color:var(--primary-500, #825CEE)}.learn-more-text{font-size:14px;color:var(--primary-500, #825CEE);text-decoration:none}.redirect-link:hover .learn-more-text{text-decoration:underline}.additional-fields{display:flex;gap:16px;width:100%}.form-button-container{display:flex;justify-content:flex-end;align-items:center;align-self:stretch}::ng-deep .form-button-container .action-button .sa-button{align-self:flex-start;display:flex;justify-content:center;align-items:center;gap:var(--small-3px, 3px);align-self:stretch}.divider-section{margin-top:32px;width:100%}.divider{width:100%;height:1px;background:var(--grey-200, #E4E7EC);margin-bottom:24px}.divider-header{margin-bottom:16px}.divider-title{font-size:16px;font-weight:600;color:var(--text-high-emphasis, #1C1B20);margin:0 0 8px;font-family:var(--font-family, Roboto)}.divider-subtitle{font-size:14px;font-weight:400;color:var(--text-medium-emphasis, #6D6979);margin:0;font-style:italic;font-family:var(--font-family, Roboto)}.chip-list{display:flex;flex-wrap:wrap;gap:8px}.dialog-form{width:100%;display:flex;flex-direction:column;gap:16px}.dialog-form .form-row{display:flex;gap:16px;margin-bottom:16px;width:100%}.dialog-form .form-field-wrapper{flex:1;display:flex;flex-direction:column;gap:4px}.dialog-form .form-field-wrapper.full-width{flex:1 1 100%}.dialog-form .additional-fields{display:flex;flex-direction:column;gap:16px;width:100%}::ng-deep .dialog-form formly-form{width:100%;display:block}::ng-deep .dialog-form formly-field{width:100%;display:block}::ng-deep .dialog-form .col-6,::ng-deep .dialog-form .col-12{width:100%;display:block}::ng-deep .dialog-form formly-group{width:100%;display:block;margin:0;padding:0}::ng-deep .additional-fields formly-form{width:100%;display:block}::ng-deep .dialog-form lib-form-select{width:100%}::ng-deep .dialog-form .sa-select-container{width:100%;display:flex;flex-direction:column}::ng-deep .dialog-form .sa-select-field-container{width:100%;position:relative}::ng-deep .dialog-form .ng-select{min-height:44px;border-radius:4px;padding:unset;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}::ng-deep .dialog-form .sa-select-container .sa-select-field-container .ng-select-field{padding:unset;border:none}::ng-deep .dialog-form .ng-select.ng-select-focused{border-color:var(--primary-500, #825CEE);box-shadow:0 0 0 3px #825cee1a}::ng-deep .dialog-form .ng-select .ng-select-container{min-height:44px;padding:12px 16px}::ng-deep .dialog-form .ng-select .ng-placeholder{color:var(--text-medium-emphasis, #6D6979);font-size:14px}\n"] }]
|
|
372
|
+
args: [{ selector: 'sa-message-banner-v2', standalone: true, imports: [CommonModule, IconComponent, ButtonComponent, HttpClientModule, MessageBannerComponent, FormInputComponent, FormSelectComponent, FormsModule, ReactiveFormsModule, FormlyModule, ChipsComponent], providers: [IconService], template: "@if (bannerContent(); as content) {\r\n <div class=\"error-page message-banner-v2\">\r\n <div class=\"content-container\" [ngStyle]=\"{ gap: contentGap || 'var(--medium-32px, 32px)' }\">\r\n <div class=\"image-container\"\r\n [ngStyle]=\"{ 'margin-bottom': spacingBetweenImageAndDescription ?? 'var(--small-16px, 16px)' }\">\r\n <img [src]=\"content.messageIcon\" [alt]=\"content.type + ' image'\"\r\n [style.--message-icon-height]=\"content.messageIconSize?.height\"\r\n [style.--message-icon-width]=\"content.messageIconSize?.width\" />\r\n </div>\r\n <div class=\"details\">\r\n <div class=\"title-description\">\r\n <div class=\"title-class\" [ngClass]=\"titleClass || 'title-class'\" [innerHTML]=\"content.title\"></div>\r\n <p class=\"description\" [ngClass]=\"descriptionClass || 'description'\" [innerHTML]=\"content.description\"></p> \r\n <div [ngStyle]=\"{ margin: banner?.spacing + 'px 0px' }\">\r\n <sa-message-banner *ngIf=\"!isEmptyObject(banner)\" [type]=\"banner?.type\" [bannerIcon]=\"banner?.bannerIcon\" [buttonIcon]=\"banner?.buttonIcon\"\r\n [bannerIconSize]=\"banner?.bannerIconSize\" [buttonType]=\"banner?.buttonType\" [buttonSize]=\"banner?.buttonSize\" [buttonIconPosition]=\"banner?.buttonIconPosition\"\r\n [buttonIconSize]=\"banner?.buttonIconSize\" [actionText]=\"banner?.actionText\" >\r\n <div [innerHTML]=\"banner?.text\"></div>\r\n </sa-message-banner>\r\n </div>\r\n </div>\r\n \r\n <!-- Form inputs section -->\r\n <ng-container *ngIf=\"activeFormInputs?.length\">\r\n <div class=\"form-fields-container\">\r\n <div class=\"form-fields-scroll-area\">\r\n <form [formGroup]=\"form\" class=\"dialog-form\">\r\n <!-- Initial fields rows (dynamic count based on formLayout.fieldsPerRow) -->\r\n <div class=\"form-row\" *ngFor=\"let row of initialFieldRows(); let rowIndex = index\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let field of row; let fieldIndex = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getInitialFieldRowIndex(rowIndex, fieldIndex)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n \r\n <!-- Additional fields rows (conditional based on formLayout.conditionalFields) -->\r\n <div class=\"additional-fields\" *ngIf=\"areAllVisibleFieldsFilled()\">\r\n <div class=\"form-row\" *ngFor=\"let row of additionalFieldRows; let rowIndex = index\">\r\n <div class=\"form-field-wrapper\" *ngFor=\"let field of row; let fieldIndex = index\">\r\n <formly-form \r\n [form]=\"form\"\r\n [fields]=\"[fields[getAdditionalFieldRowIndex(rowIndex, fieldIndex)]]\"\r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\"\r\n *ngIf=\"fields[getAdditionalFieldRowIndex(rowIndex, fieldIndex)]\">\r\n </formly-form>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Custom form button(s) -->\r\n <div class=\"form-button-container\" *ngIf=\"activeCustomFormButton\">\r\n <!-- Support both single button and array of buttons -->\r\n <ng-container *ngIf=\"isButtonArray(); else singleButton\">\r\n <sa-button \r\n *ngFor=\"let button of activeCustomFormButton\"\r\n class=\"action-button\"\r\n [id]=\"button.id\"\r\n [text]=\"button.text\"\r\n [type]=\"button.type\"\r\n [size]=\"button.size\"\r\n [state]=\"button.state\"\r\n [ImagePath]=\"button.ImagePath\"\r\n [iconPosition]=\"button.iconPosition\"\r\n (click)=\"onButtonClick(button)\">\r\n </sa-button>\r\n </ng-container>\r\n \r\n <ng-template #singleButton>\r\n <sa-button class=\"action-button\"\r\n [id]=\"activeCustomFormButton.id\"\r\n [text]=\"activeCustomFormButton.text\"\r\n [type]=\"activeCustomFormButton.type\"\r\n [size]=\"activeCustomFormButton.size\"\r\n [state]=\"activeCustomFormButton.state\"\r\n [ImagePath]=\"activeCustomFormButton.ImagePath\"\r\n [iconPosition]=\"activeCustomFormButton.iconPosition\"\r\n (click)=\"onButtonClick(activeCustomFormButton)\">\r\n </sa-button>\r\n </ng-template>\r\n </div>\r\n \r\n <!-- Divider section -->\r\n <div class=\"divider-section\" *ngIf=\"activeDivider\">\r\n <div class=\"divider\"></div>\r\n <div class=\"divider-header\">\r\n <h3 class=\"divider-title\" *ngIf=\"activeDividerConfig.title\">{{ activeDividerConfig.title }}</h3>\r\n <p class=\"divider-subtitle\" *ngIf=\"activeDividerConfig.subtitle || activeDividerConfig.showSubtitleWhenEmpty\">\r\n {{ activeDividerConfig.subtitle || 'No items added yet' }}\r\n </p>\r\n </div>\r\n \r\n <!-- Chips section -->\r\n <div class=\"chip-list\" *ngIf=\"activeChips?.length\">\r\n <sa-chip \r\n *ngFor=\"let chip of activeChips\"\r\n [text]=\"chip.label || chip.text || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'default'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"chip.removable ? onChipRemove(chip) : null\">\r\n </sa-chip>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n @if(buttons){\r\n <div class=\"button-group\">\r\n @for (button of buttons; track button.text) {\r\n <sa-button \r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [state]=\"!areAllVisibleFieldsFilled() ? 'disabled' : ''\"\r\n [attr.aria-label]=\"button.text\">\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }", styles: [".error-page{display:flex;justify-content:center;align-items:center;box-sizing:border-box}.title-class{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:1.5rem;letter-spacing:.15px}.content-container{display:flex;flex-direction:column;align-items:center;gap:var(--medium-32px, 32px);text-align:center}.image-container{display:flex;justify-content:center;align-items:center;margin-bottom:var(--small-16px, 16px)}.image-container img{height:var(--message-icon-height, 12.5rem);width:var(--message-icon-width, fit-content)}.details{display:flex;flex-direction:column;align-items:center;gap:var(--medium-20px, 20px);text-align:center;background-color:var(--structural-white, #FFF)}::ng-deep .description .support-email{color:var(--primary-500);font-family:var(--font-roboto, Roboto);font-size:14px;font-style:normal;font-weight:500;line-height:1.25rem;letter-spacing:.1px}.description{color:var(--Text-Medium-Emphasis, #6D6979);text-align:center;font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px;margin:0}.message-banner-v2 .button-group{display:flex;gap:var(--small-8px);justify-content:center}::ng-deep .custom-contact-link{color:var(--primary-500, #7F56D9);font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);font-style:normal;font-weight:600;line-height:var(--medium-24px);letter-spacing:.15px;text-decoration:none}.access-restricted-title{color:var(--text-highemphasis, #1C1B20);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.access-restricted-description{text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--small-16px, 16px);line-height:var(--medium-24px);max-width:44rem;white-space:normal;word-break:break-word}.access-error-title{color:var(--semantic-error-500, #BD271E);text-align:center;font-family:var(--font-roboto, Roboto);font-size:var(--medium-22px);font-style:normal;font-weight:500;line-height:var(--medium-28px);margin-bottom:var(--small-10px)}.redirect-link{display:flex;align-items:center;gap:8px;cursor:pointer}.info-icon{width:16px;height:16px;color:var(--primary-500, #825CEE)}.learn-more-text{font-size:14px;color:var(--primary-500, #825CEE);text-decoration:none}.redirect-link:hover .learn-more-text{text-decoration:underline}.additional-fields{display:flex;gap:16px;width:100%}.form-button-container{display:flex;justify-content:flex-end;align-items:center;align-self:stretch}::ng-deep .form-button-container .action-button .sa-button{align-self:flex-start;display:flex;justify-content:center;align-items:center;gap:var(--small-3px, 3px);align-self:stretch}.divider-section{flex:0 0 auto;margin-top:32px;width:100%}.divider{width:100%;height:1px;background:var(--grey-200, #E4E7EC);margin-bottom:24px}.divider-header{margin-bottom:16px}.divider-title{font-size:16px;font-weight:600;color:var(--text-high-emphasis, #1C1B20);margin:0 0 8px;font-family:var(--font-family, Roboto)}.divider-subtitle{font-size:14px;font-weight:400;color:var(--text-medium-emphasis, #6D6979);margin:0;font-style:italic;font-family:var(--font-family, Roboto)}.chip-list{display:flex;flex-wrap:wrap;gap:8px}.dialog-form{width:100%;display:flex;flex-direction:column;gap:16px}.form-fields-container{min-height:0;flex:0 0 auto;width:100%;position:relative;z-index:1;overflow:visible}.dialog-form .form-row{display:flex;gap:16px;margin-bottom:16px;width:100%}.dialog-form .form-field-wrapper{flex:1;display:flex;flex-direction:column;gap:4px}.dialog-form .form-field-wrapper.full-width{flex:1 1 100%}.dialog-form .additional-fields{display:flex;flex-direction:column;gap:16px;width:100%}::ng-deep .dialog-form formly-form{width:100%;display:block}::ng-deep .dialog-form formly-field{width:100%;display:block}::ng-deep .dialog-form .col-6,::ng-deep .dialog-form .col-12{width:100%;display:block}::ng-deep .dialog-form formly-group{width:100%;display:block;margin:0;padding:0}::ng-deep .additional-fields formly-form{width:100%;display:block}::ng-deep .dialog-form lib-form-select{width:100%}::ng-deep .dialog-form .sa-select-container{width:100%;display:flex;flex-direction:column}::ng-deep .dialog-form .sa-select-field-container{width:100%;position:relative}::ng-deep .dialog-form .ng-select{min-height:44px;border-radius:4px;padding:unset;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF)}::ng-deep .dialog-form .sa-select-container .sa-select-field-container .ng-select-field{padding:unset;border:none}::ng-deep .dialog-form .ng-select.ng-select-focused{border-color:var(--primary-500, #825CEE);box-shadow:0 0 0 3px #825cee1a}::ng-deep .dialog-form .ng-select .ng-select-container{min-height:44px;padding:12px 16px}.form-fields-scroll-wrapper{width:100%}\n"] }]
|
|
356
373
|
}], propDecorators: { messageType: [{
|
|
357
374
|
type: Input
|
|
358
375
|
}], contactUrl: [{
|
|
@@ -384,4 +401,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
384
401
|
}], buttonClick: [{
|
|
385
402
|
type: Output
|
|
386
403
|
}] } });
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1iYW5uZXItdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9tZXNzYWdlLWJhbm5lci12Mi9tZXNzYWdlLWJhbm5lci12Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL21lc3NhZ2UtYmFubmVyLXYyL21lc3NhZ2UtYmFubmVyLXYyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQWUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENB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QkFBc0IsMFFBQTJDLFdBQVcsbVNBQUUsbUJBQW1CLCtLQUFFLFlBQVksOEtBQUUsY0FBYzs7MkZBSzdMLHdCQUF3QjtrQkFScEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsYUFDOUwsQ0FBQyxXQUFXLENBQUM7OEJBeUJmLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxpQ0FBaUM7c0JBQXpDLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkE4QkksV0FBVztzQkFBcEIsTUFBTTtnQkE4Qk0sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxlQUFlO3NCQUEzQixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGNvbXB1dGVkLCBzaWduYWwsIGVmZmVjdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJY29uU2VydmljZSB9IGZyb20gJy4uL2ljb24vaWNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJY29uTmFtZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaWNvbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBCdXR0b25JY29uUG9zaXRpb24sIEJ1dHRvblNpemUsIEJ1dHRvblR5cGUsIEJ1dHRvbkludGVyZmFjZSwgQnV0dG9uQ2xpY2tFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYnV0dG9uLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWVzc2FnZUJhbm5lckNvbXBvbmVudCB9IGZyb20gJy4uL21lc3NhZ2UtYmFubmVyL21lc3NhZ2UtYmFubmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1zZWxlY3QvZm9ybS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZvcm1seU1vZHVsZSwgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgQ2hpcHNDb21wb25lbnQgfSBmcm9tICcuLi9jaGlwcy9jaGlwcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtTGF5b3V0Q29uZmlnLCBGb3JtRmllbGRDb25maWcsIFVuaWZpZWRGb3JtQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9mb3JtLWxheW91dC5pbnRlcmZhY2UnO1xyXG5cclxuaW50ZXJmYWNlIE1lc3NhZ2VCYW5uZXJTdGF0ZSB7XHJcbiAgdHlwZTogJ2RlZmF1bHQnIHwgJ2Nvbm5lY3Rpb24nIHwgJ2FjY2VzcycgfCAnYWNjZXNzUmVzdHJpY3RlZCc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIG1lc3NhZ2VJY29uOiBzdHJpbmc7XHJcbiAgbWVzc2FnZUljb25TaXplPzoge1xyXG4gICAgd2lkdGg/OiBzdHJpbmc7XHJcbiAgICBoZWlnaHQ/OiBzdHJpbmc7XHJcbiAgfTtcclxuICBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgY29udGVudEdhcD86IHN0cmluZzsgXHJcbiAgY29udGFjdFVybD86IHN0cmluZztcclxuICB0aXRsZUNsYXNzPzogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uQ2xhc3M/OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2EtbWVzc2FnZS1iYW5uZXItdjInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBIdHRwQ2xpZW50TW9kdWxlLE1lc3NhZ2VCYW5uZXJDb21wb25lbnQsIEZvcm1JbnB1dENvbXBvbmVudCwgRm9ybVNlbGVjdENvbXBvbmVudCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1seU1vZHVsZSwgQ2hpcHNDb21wb25lbnRdLFxyXG4gIHByb3ZpZGVyczogW0ljb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1iYW5uZXItdjIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lc3NhZ2UtYmFubmVyLXYyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVzc2FnZUJhbm5lclYyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICAvLyBTdGF0ZSBtYW5hZ2VtZW50IHVzaW5nIHNpZ25hbHNcclxuICBwcml2YXRlIHN0YXRlID0gc2lnbmFsPE1lc3NhZ2VCYW5uZXJTdGF0ZT4oe1xyXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxyXG4gICAgdGl0bGU6ICcnLFxyXG4gICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgbWVzc2FnZUljb246ICcnLFxyXG4gICAgbWVzc2FnZUljb25TaXplOiB7XHJcbiAgICAgIGhlaWdodDogJzEyLjVyZW0nXHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIENvbXB1dGVkIHByb3BlcnRpZXNcclxuICBwcm90ZWN0ZWQgYmFubmVyQ29udGVudCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuc3RhdGUoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmN1cnJlbnRTdGF0ZSxcclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuc2FuaXRpemVEZXNjcmlwdGlvbihjdXJyZW50U3RhdGUuZGVzY3JpcHRpb24pXHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICBASW5wdXQoKSBtZXNzYWdlVHlwZTogJ2RlZmF1bHQnIHwgJ2Nvbm5lY3Rpb24nIHwgJ2FjY2VzcycgfCAnYWNjZXNzUmVzdHJpY3RlZCc7XHJcbiAgQElucHV0KCkgY29udGFjdFVybD86IHN0cmluZztcclxuICBASW5wdXQoKSBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udGVudEdhcD86IHN0cmluZztcclxuICBASW5wdXQoKSB0aXRsZUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYmFubmVyOmFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGZvcm1Db25maWc6IFVuaWZpZWRGb3JtQ29uZmlnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBtb2RlbDogYW55ID0ge307XHJcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XHJcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBmb3IgdW5pZmllZCBhY2Nlc3NcclxuICBnZXQgYWN0aXZlRm9ybUlucHV0cygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29uZmlnPy5maWVsZHMgfHwgW107XHJcbiAgfVxyXG5cclxuICBnZXQgYWN0aXZlQ2hpcHMoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZz8uY2hpcHMgfHwgW107XHJcbiAgfVxyXG5cclxuICBnZXQgYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZz8uY3VzdG9tQnV0dG9uIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdGl2ZURpdmlkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29uZmlnPy5kaXZpZGVyPy5lbmFibGVkID8/IGZhbHNlO1xyXG4gIH0gXHJcblxyXG4gIGdldCBhY3RpdmVEaXZpZGVyQ29uZmlnKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29uZmlnPy5kaXZpZGVyIHx8IHt9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdGl2ZUZvcm1MYXlvdXQoKTogRm9ybUxheW91dENvbmZpZyB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29uZmlnPy5sYXlvdXQgfHwge307XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25Gb3JtRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHt0eXBlOiBzdHJpbmcsIGRhdGE6IGFueX0+KCk7XHJcbiAgXHJcbiAgb25DaGlwUmVtb3ZlKGNoaXA6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkZvcm1FdmVudC5lbWl0KHsgdHlwZTogJ2NoaXAtcmVtb3ZlJywgZGF0YTogY2hpcCB9KTtcclxuICB9XHJcbiAgXHJcbiAgb25BZGRVc2VyKCk6IHZvaWQge1xyXG4gICAgbGV0IGNsaWNrZWRCdXR0b24gPSB0aGlzLmFjdGl2ZUN1c3RvbUZvcm1CdXR0b247XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmFjdGl2ZUN1c3RvbUZvcm1CdXR0b24pKSB7XHJcbiAgICAgIGNsaWNrZWRCdXR0b24gPSB0aGlzLmFjdGl2ZUN1c3RvbUZvcm1CdXR0b24uZmluZChidG4gPT4gXHJcbiAgICAgICAgYnRuLnRleHQgPT09ICdBZGQgVXNlcicgfHwgYnRuLmlkID09PSAnYWRkLXVzZXInIHx8IGJ0bi5hY3Rpb24gPT09ICdhZGQtdXNlcidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMub25Gb3JtRXZlbnQuZW1pdCh7IHR5cGU6ICdjdXN0b20tYnV0dG9uLWNsaWNrJywgZGF0YTogY2xpY2tlZEJ1dHRvbiB9KTtcclxuICAgIGlmIChjbGlja2VkQnV0dG9uPy5yZXNldEZvcm0gIT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMubW9kZWwgPSB7fTtcclxuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuYWN0aXZlRm9ybUlucHV0cz8uZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSAnJztcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybWx5RmllbGRzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIGFyZUFsbEZpZWxkc0ZpbGxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5hY3RpdmVGb3JtSW5wdXRzIHx8IHRoaXMuYWN0aXZlRm9ybUlucHV0cy5sZW5ndGggPCA0KSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGb3JtSW5wdXRzLmV2ZXJ5KGZpZWxkID0+IGZpZWxkLnZhbHVlICYmIGZpZWxkLnZhbHVlLnRyaW0oKSAhPT0gJycpO1xyXG4gIH1cclxuICBcclxuXHJcbiAgQElucHV0KCkgc2V0IG1lc3NhZ2VJY29uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RhdGUudXBkYXRlKHMgPT4gKHsgLi4ucywgbWVzc2FnZUljb246IHZhbHVlIH0pKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBtZXNzYWdlSWNvblNpemUodmFsdWU6IHsgd2lkdGg/OiBzdHJpbmc7IGhlaWdodD86IHN0cmluZyB9KSB7XHJcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzID0+ICh7IC4uLnMsIG1lc3NhZ2VJY29uU2l6ZTogdmFsdWUgfSkpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RhdGUudXBkYXRlKHMgPT4gKHsgLi4ucywgdGl0bGU6IHZhbHVlIH0pKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzID0+ICh7IC4uLnMsIGRlc2NyaXB0aW9uOiB2YWx1ZSB9KSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBidXR0b25zOiBCdXR0b25JbnRlcmZhY2VbXSA9IFtdO1xyXG4gIEBPdXRwdXQoKSBidXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tFdmVudD4oKTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24gb3IgaWYgbWVzc2FnZVR5cGUgaGFzIGNoYW5nZWRcclxuICAgIGNvbnN0IHNob3VsZFVwZGF0ZUJhc2VkT25UeXBlID0gY2hhbmdlc1snbWVzc2FnZVR5cGUnXSAmJiBcclxuICAgICAgLy8gT25seSB1cGRhdGUgYmFzZWQgb24gdHlwZSBpZiB3ZSBkb24ndCBoYXZlIGN1c3RvbSB2YWx1ZXMgc2V0XHJcbiAgICAgICEodGhpcy5zdGF0ZSgpLnRpdGxlIHx8IHRoaXMuc3RhdGUoKS5kZXNjcmlwdGlvbiB8fCB0aGlzLnN0YXRlKCkubWVzc2FnZUljb24pO1xyXG4gICAgXHJcbiAgICBpZiAoc2hvdWxkVXBkYXRlQmFzZWRPblR5cGUpIHtcclxuICAgICAgdGhpcy51cGRhdGVDb250ZW50QmFzZWRPblR5cGUodGhpcy5tZXNzYWdlVHlwZSB8fCAnZGVmYXVsdCcpO1xyXG4gICAgfSAgICBcclxuICAgIGlmIChjaGFuZ2VzWydmb3JtQ29uZmlnJ10gfHwgY2hhbmdlc1snZm9ybUlucHV0cyddKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybWx5RmllbGRzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbnRlbnRCYXNlZE9uVHlwZSh0eXBlOiAnZGVmYXVsdCcgfCAnY29ubmVjdGlvbicgfCAnYWNjZXNzJyB8ICdhY2Nlc3NSZXN0cmljdGVkJykgeyAgXHJcbiAgICAvLyBEZWZpbmUgYSB0eXBlIGZvciB0aGUgY29udGVudCBpdGVtcyB0byBlbnN1cmUgYWxsIHByb3BlcnRpZXMgYXJlIHByb3Blcmx5IHR5cGVkXHJcbiAgICB0eXBlIENvbnRlbnRJdGVtID0ge1xyXG4gICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgICBtZXNzYWdlSWNvbjogc3RyaW5nO1xyXG4gICAgICBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgICAgIGNvbnRlbnRHYXA/OiBzdHJpbmc7XHJcbiAgICAgIHRpdGxlQ2xhc3M/OiBzdHJpbmc7XHJcbiAgICAgIGRlc2NyaXB0aW9uQ2xhc3M/OiBzdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIE9ubHkgYXBwbHkgZGVmYXVsdCBjb250ZW50IGlmIGN1c3RvbSBjb250ZW50IGhhc24ndCBiZWVuIHByb3ZpZGVkXHJcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnN0YXRlKCk7XHJcbiAgICBjb25zdCBjb250ZW50OiBSZWNvcmQ8J2RlZmF1bHQnIHwgJ2Nvbm5lY3Rpb24nIHwgJ2FjY2VzcycgfCAnYWNjZXNzUmVzdHJpY3RlZCcsIENvbnRlbnRJdGVtPiA9IHtcclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIHRpdGxlOiAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSB0cnkgYWdhaW4gb3IgdHJ5IGFmdGVyIHNvbWUgdGltZScsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdJZiB0aGUgaXNzdWUgcGVyc2lzdHMsIGNvbnRhY3Qgb3VyIHN1cHBvcnQgdGVhbSBhdCA8c3BhbiBjbGFzcz1cInN1cHBvcnQtZW1haWxcIj5zdXBwb3J0QHNhcmFzYW5hbHl0aWNzLmNvbTwvc3Bhbj4nLFxyXG4gICAgICAgIG1lc3NhZ2VJY29uOiAnL2Fzc2V0cy9lcnJvci5naWYnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICB0aXRsZTogJ1dlXFwncmUgaGF2aW5nIHRyb3VibGUgY29ubmVjdGluZy4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiBhbmQgdHJ5IGFnYWluJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1lvdSBjYW4gYWxzbyByZWFjaCBvdXQgdG8gb3VyIHN1cHBvcnQgdGVhbSBhdCA8c3BhbiBjbGFzcz1cInN1cHBvcnQtZW1haWxcIj5zdXBwb3J0QHNhcmFzYW5hbHl0aWNzLmNvbTwvc3Bhbj4gZm9yIGFzc2lzdGFuY2UnLFxyXG4gICAgICAgIG1lc3NhZ2VJY29uOiAnL2Fzc2V0cy9sb3N0LWNvbm5lY3Rpb24uZ2lmJ1xyXG4gICAgICB9LFxyXG4gICAgICBhY2Nlc3M6IHtcclxuICAgICAgICB0aXRsZTogJ1RoaXMgaXMgdGFraW5nIGEgYml0IGxvbmdlciB0aGFuIHVzdWFsLiBQbGVhc2UgaG9sZCBvbiEnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSWYgdGhlIGRlbGF5IGNvbnRpbnVlcywgY2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgcmVmcmVzaGluZyB0aGUgcGFnZS4nLFxyXG4gICAgICAgIG1lc3NhZ2VJY29uOiAnL2Fzc2V0cy9sb25nLWxvYWRpbmcuZ2lmJ1xyXG4gICAgICB9LFxyXG4gICAgICBhY2Nlc3NSZXN0cmljdGVkOiB7XHJcbiAgICAgICAgdGl0bGU6ICdBY2Nlc3MgUmVzdHJpY3RlZCEnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTG9va3MgbGlrZSB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBtb2R1bGUganVzdCB5ZXQuIE5vIHdvcnJpZXPigJRyZWFjaCBvdXQgdG8geW91ciBhZG1pbiB0byByZXF1ZXN0IGFjY2VzcyB0byB0aGlzIGZlYXR1cmUuIElmIHlvdSdyZSBmYWNpbmcgYW55IGlzc3VlcywgZmVlbCBmcmVlIHRvIDxhIGNsYXNzPVwiY3VzdG9tLWNvbnRhY3QtbGlua1wiIGhyZWY9XCIke3RoaXMuY29udGFjdFVybCA/PyAnaHR0cHM6Ly9zdXBwb3J0LmRlZmF1bHQuY29tJ31cIiB0YXJnZXQ9XCJfYmxhbmtcIj5Db250YWN0IFVzPC9hPi5gLFxyXG4gICAgICAgIG1lc3NhZ2VJY29uOiAnL2Fzc2V0cy9hY2Nlc3MtcmVzdHJpY3RlZC5naWYnLFxyXG4gICAgICAgIHNwYWNpbmdCZXR3ZWVuSW1hZ2VBbmREZXNjcmlwdGlvbjogJzBweCcsXHJcbiAgICAgICAgY29udGVudEdhcDonMjBweCcsXHJcbiAgICAgICAgdGl0bGVDbGFzczogJ2FjY2Vzcy1yZXN0cmljdGVkLXRpdGxlJyxcclxuICAgICAgICBkZXNjcmlwdGlvbkNsYXNzOiAnYWNjZXNzLXJlc3RyaWN0ZWQtZGVzY3JpcHRpb24nLFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnRJdGVtID0gY29udGVudFt0eXBlXTtcclxuXHJcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzID0+ICh7XHJcbiAgICAgIC4uLnMsXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIC8vIE9ubHkgYXBwbHkgZGVmYXVsdCB2YWx1ZXMgaWYgY3VzdG9tIHZhbHVlcyBoYXZlbid0IGJlZW4gcHJvdmlkZWRcclxuICAgICAgdGl0bGU6IHMudGl0bGUgfHwgY29udGVudEl0ZW0udGl0bGUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBzLmRlc2NyaXB0aW9uIHx8IGNvbnRlbnRJdGVtLmRlc2NyaXB0aW9uLFxyXG4gICAgICBtZXNzYWdlSWNvbjogcy5tZXNzYWdlSWNvbiB8fCBjb250ZW50SXRlbS5tZXNzYWdlSWNvbixcclxuICAgICAgLy8gRm9yIG90aGVyIHByb3BlcnRpZXMsIG9ubHkgYXBwbHkgdGhlbSBpZiB0aGV5IGV4aXN0IGluIHRoZSBjb250ZW50SXRlbVxyXG4gICAgICAuLi4oY29udGVudEl0ZW0uc3BhY2luZ0JldHdlZW5JbWFnZUFuZERlc2NyaXB0aW9uICYmIHsgc3BhY2luZ0JldHdlZW5JbWFnZUFuZERlc2NyaXB0aW9uOiBjb250ZW50SXRlbS5zcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24gfSksXHJcbiAgICAgIC4uLihjb250ZW50SXRlbS5jb250ZW50R2FwICYmIHsgY29udGVudEdhcDogY29udGVudEl0ZW0uY29udGVudEdhcCB9KSxcclxuICAgICAgLi4uKGNvbnRlbnRJdGVtLnRpdGxlQ2xhc3MgJiYgeyB0aXRsZUNsYXNzOiBjb250ZW50SXRlbS50aXRsZUNsYXNzIH0pLFxyXG4gICAgICAuLi4oY29udGVudEl0ZW0uZGVzY3JpcHRpb25DbGFzcyAmJiB7IGRlc2NyaXB0aW9uQ2xhc3M6IGNvbnRlbnRJdGVtLmRlc2NyaXB0aW9uQ2xhc3MgfSlcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2FuaXRpemVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBkZXNjcmlwdGlvbi5yZXBsYWNlKFxyXG4gICAgICAvc3VwcG9ydEBzYXJhc2FuYWx5dGljc1xcLmNvbS9nLFxyXG4gICAgICAnPHNwYW4gY2xhc3M9XCJzdXBwb3J0LWVtYWlsXCI+c3VwcG9ydEBzYXJhc2FuYWx5dGljcy5jb208L3NwYW4+J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uQnV0dG9uQ2xpY2soYnV0dG9uOiBhbnksIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBmb3JtIGJ1dHRvbiAoZnJvbSBhY3RpdmVDdXN0b21Gb3JtQnV0dG9uKSBvciByZWd1bGFyIGJhbm5lciBidXR0b25cclxuICAgIGlmICghZXZlbnQgJiYgKGJ1dHRvbi5hY3Rpb24gPT09ICdzdWJtaXQnIHx8IGJ1dHRvbi5hY3Rpb24gPT09ICdsaW5rJyB8fCBidXR0b24uaWQgPT09ICdhZGQtdXNlcicgfHwgYnV0dG9uLmlkID09PSAnbGVhcm4tbW9yZScpKSB7XHJcbiAgICAgIC8vIEhhbmRsZSBmb3JtIGJ1dHRvbnMgd2l0aCBuZXcgbG9naWNcclxuICAgICAgaWYgKCBidXR0b24uaWQgPT09ICdhZGQtdXNlcicpIHtcclxuICAgICAgICAvLyBIYW5kbGUgZm9ybSBzdWJtaXNzaW9uIChleGlzdGluZyBBZGQgVXNlciBmdW5jdGlvbmFsaXR5KVxyXG4gICAgICAgIHRoaXMub25BZGRVc2VyKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoYnV0dG9uLmFjdGlvbiA9PT0gJ2xpbmsnICYmIGJ1dHRvbi5saW5rKSB7XHJcbiAgICAgICAgLy8gSGFuZGxlIGxpbmsgbmF2aWdhdGlvbiAoTGVhcm4gTW9yZSBmdW5jdGlvbmFsaXR5KVxyXG4gICAgICAgIHdpbmRvdy5vcGVuKGJ1dHRvbi5saW5rLCAnX2JsYW5rJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoYnV0dG9uLm9uQ2xpY2spIHtcclxuICAgICAgICAvLyBIYW5kbGUgY3VzdG9tIGNsaWNrIGZ1bmN0aW9uXHJcbiAgICAgICAgYnV0dG9uLm9uQ2xpY2soKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChldmVudCkge1xyXG4gICAgICAvLyBIYW5kbGUgcmVndWxhciBiYW5uZXIgYnV0dG9ucyB3aXRoIG9yaWdpbmFsIGxvZ2ljIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxyXG4gICAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQoe1xyXG4gICAgICAgIHR5cGU6IGJ1dHRvbi50eXBlIGFzICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknLFxyXG4gICAgICAgIGJ1dHRvbixcclxuICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQnV0dG9uQXJyYXkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmFjdGl2ZUN1c3RvbUZvcm1CdXR0b24pO1xyXG4gIH1cclxuXHJcbiAgaXNFbXB0eU9iamVjdChvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKG9iaikge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1seUZpZWxkcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5mb3JtQ29uZmlnIHx8ICF0aGlzLmZvcm1Db25maWcuZmllbGRzIHx8IHRoaXMuZm9ybUNvbmZpZy5maWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuZmllbGRzID0gW107XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZm9ybUNvbmZpZy5maWVsZHMubWFwKChpbnB1dCwgaW5kZXgpID0+IHtcclxuICAgICAgLy8gQWxsIGZpZWxkcyBzaG91bGQgYmUgc2lkZS1ieS1zaWRlOiBFbWFpbCtSb2xlIChyb3cgMSksIEJyYW5kcytVc2UgQ2FzZXMgKHJvdyAyKVxyXG4gICAgICBjb25zdCBjc3NDbGFzcyA9ICdjb2wtNic7IC8vIEFsbCBmaWVsZHMgZ2V0IDUwJSB3aWR0aCBmb3IgMngyIGdyaWQgbGF5b3V0XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBmaWVsZENvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7XHJcbiAgICAgICAga2V5OiBpbnB1dC5sYWJlbC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJ18nKSxcclxuICAgICAgICB0eXBlOiBpbnB1dC50eXBlID09PSAndGV4dCcgPyAnc2EtaW5wdXQnIDogJ3NhLXNlbGVjdCcsXHJcbiAgICAgICAgY2xhc3NOYW1lOiBjc3NDbGFzcywgLy8gQWxsIGZpZWxkcyB1c2UgY29sLTYgZm9yIHNpZGUtYnktc2lkZSBsYXlvdXRcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgLi4uKGlucHV0LnR5cGUgPT09ICd0ZXh0JyAmJiB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBpbnB1dC5wbGFjZWhvbGRlciB8fCBpbnB1dC5sYWJlbCxcclxuICAgICAgICAgICAgcmVxdWlyZWQ6IGlucHV0LnJlcXVpcmVkIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgIHN1cHBvcnRUZXh0OiAnJyxcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogaW5wdXQucGxhY2Vob2xkZXIgfHwgaW5wdXQubGFiZWwsXHJcbiAgICAgICAgICAgICAgdHlwZTogaW5wdXQubGFiZWwgPT09ICdFbWFpbCBJRCcgPyAnbXVsdGktdmFsdWUnIDogJ3RleHQnLFxyXG4gICAgICAgICAgICAgIG11bHRpVmFsdWU6IGlucHV0LmxhYmVsID09PSAnRW1haWwgSUQnLFxyXG4gICAgICAgICAgICAgIGNoaXBWYWx1ZXM6IGlucHV0LmxhYmVsID09PSAnRW1haWwgSUQnID8gW10gOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICAuLi4oKGlucHV0LnR5cGUgPT09ICdzZWxlY3QnIHx8IGlucHV0LnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpICYmIHtcclxuICAgICAgICAgICAgcmVxdWlyZWQ6IGlucHV0LnJlcXVpcmVkIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICBjbG9zZU9uc2VsZWN0OiBpbnB1dC50eXBlID09PSAnc2VsZWN0JywgLy8gT25seSBjbG9zZSBvbiBzZWxlY3QgZm9yIHNpbmdsZS1zZWxlY3RcclxuICAgICAgICAgICAgaXNDbGVhcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGJpbmRMYWJlbDogaW5kZXggPj0gMiA/ICduYW1lJyA6ICdsYWJlbCcsIC8vIFJlc3RvcmUgb3JpZ2luYWwgYmluZExhYmVsIGxvZ2ljXHJcbiAgICAgICAgICAgIGJpbmRWYWx1ZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgb3B0aW9uczogaW5kZXggPj0gMiBcclxuICAgICAgICAgICAgICA/IChpbnB1dC5vcHRpb25zIHx8IFtdKS5tYXAob3B0aW9uID0+ICh7IC4uLm9wdGlvbiwgbmFtZTogb3B0aW9uLmxhYmVsIH0pKVxyXG4gICAgICAgICAgICAgIDogaW5wdXQub3B0aW9ucyB8fCBbXSxcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGlucHV0LnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QgJyArIGlucHV0LmxhYmVsLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICBsYWJlbDogaW5wdXQucGxhY2Vob2xkZXIgfHwgJ1NlbGVjdCAnICsgaW5wdXQubGFiZWwsXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGlucHV0LnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QgJyArIGlucHV0LmxhYmVsLFxyXG4gICAgICAgICAgICAgIG11bHRpcGxlOiBpbnB1dC50eXBlID09PSAnbXVsdGlzZWxlY3QnIHx8IGluZGV4ID49IDIsIC8vIEVuYWJsZSBtdWx0aXBsZSBmb3IgbXVsdGlzZWxlY3Qgb3IgYWRkaXRpb25hbCBmaWVsZHNcclxuICAgICAgICAgICAgICAuLi4oaW5wdXQudHlwZSA9PT0gJ211bHRpc2VsZWN0JyB8fCBpbmRleCA+PSAyKSAmJiB7XHJcbiAgICAgICAgICAgICAgICBpY29uUGF0aDogXCIuLi9hc3NldHMvY2xvc2VCbHVlT3V0bGluZWQuc3ZnXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAncmVndWxhcicsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ3ByaW1hcnknLFxyXG4gICAgICAgICAgICAgICAgZmlsbGluZzogJ2ZpbGxlZCcsXHJcbiAgICAgICAgICAgICAgICBpY29uUG9zaXRpb246ICdyaWdodCcsXHJcbiAgICAgICAgICAgICAgICBzaG93Q2hlY2tib3hlczogdHJ1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoaW5wdXQudmFsdWUpIHtcclxuICAgICAgICB0aGlzLm1vZGVsW2ZpZWxkQ29uZmlnLmtleSBhcyBzdHJpbmddID0gaW5wdXQudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBmaWVsZENvbmZpZztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Gb3JtTW9kZWxDaGFuZ2UobW9kZWw6IGFueSk6IHZvaWQge1xyXG4gICAgLy8gVXBkYXRlIHRoZSBmb3JtSW5wdXRzIGFycmF5IHdoZW4gdGhlIEZvcm1seSBtb2RlbCBjaGFuZ2VzXHJcbiAgICBPYmplY3Qua2V5cyhtb2RlbCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMuYWN0aXZlRm9ybUlucHV0cy5maW5kKGlucHV0ID0+IFxyXG4gICAgICAgIGlucHV0LmxhYmVsLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpID09PSBrZXlcclxuICAgICAgKTtcclxuICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSBtb2RlbFtrZXldO1xyXG4gICAgICAgIC8vIEVtaXQgdGhlIGNoYW5nZSBldmVudCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgbG9naWNcclxuICAgICAgICB0aGlzLm9uRm9ybUV2ZW50LmVtaXQoeyB0eXBlOiAnZm9ybS1pbnB1dC1jaGFuZ2UnLCBkYXRhOiB7IGxhYmVsOiBpbnB1dC5sYWJlbCwgdmFsdWU6IG1vZGVsW2tleV0gfSB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHNob3VsZFNob3dBZGRpdGlvbmFsRmllbGRzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUZvcm1JbnB1dHMgfHwgdGhpcy5hY3RpdmVGb3JtSW5wdXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuY29uZGl0aW9uYWxGaWVsZHMpIHtcclxuICAgICAgY29uc3QgaW5pdGlhbENvdW50ID0gdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmluaXRpYWxWaXNpYmxlRmllbGRzIHx8IHRoaXMuYWN0aXZlRm9ybUxheW91dC5maWVsZHNQZXJSb3cgfHwgMjtcclxuICAgICAgY29uc3QgaW5pdGlhbEZpZWxkcyA9IHRoaXMuYWN0aXZlRm9ybUlucHV0cy5zbGljZSgwLCBpbml0aWFsQ291bnQpO1xyXG4gICAgICByZXR1cm4gaW5pdGlhbEZpZWxkcy5ldmVyeShmaWVsZCA9PiBmaWVsZC52YWx1ZSAmJiBmaWVsZC52YWx1ZS50cmltICYmIGZpZWxkLnZhbHVlLnRyaW0oKSAhPT0gJycpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRm9ybUxheW91dC5jb25kaXRpb25hbEZpZWxkcy5zaG93V2hlbih0aGlzLm1vZGVsKTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBpbml0aWFsIGZpZWxkcyB0byBkaXNwbGF5IGluIHRoZSBmaXJzdCByb3dcclxuICBnZXRJbml0aWFsRmllbGRzKCk6IEZvcm1GaWVsZENvbmZpZ1tdIHtcclxuICAgIGlmICghdGhpcy5hY3RpdmVGb3JtSW5wdXRzKSByZXR1cm4gW107XHJcbiAgICBcclxuICAgIGNvbnN0IGluaXRpYWxDb3VudCA9IHRoaXMuYWN0aXZlRm9ybUxheW91dC5pbml0aWFsVmlzaWJsZUZpZWxkcyB8fCB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuZmllbGRzUGVyUm93IHx8IDI7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGb3JtSW5wdXRzLnNsaWNlKDAsIGluaXRpYWxDb3VudCk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgYWRkaXRpb25hbCBmaWVsZHMgdG8gZGlzcGxheSBjb25kaXRpb25hbGx5XHJcbiAgZ2V0QWRkaXRpb25hbEZpZWxkcygpOiBGb3JtRmllbGRDb25maWdbXSB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aXZlRm9ybUlucHV0cykgcmV0dXJuIFtdO1xyXG4gICAgXHJcbiAgICBjb25zdCBpbml0aWFsQ291bnQgPSB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuaW5pdGlhbFZpc2libGVGaWVsZHMgfHwgdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmZpZWxkc1BlclJvdyB8fCAyO1xyXG4gICAgXHJcbiAgICAvLyBJZiBjb25kaXRpb25hbCBmaWVsZHMgYXJlIHNwZWNpZmllZCwgdXNlIHRob3NlIGluZGljZXNcclxuICAgIGlmICh0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuY29uZGl0aW9uYWxGaWVsZHM/LmZpZWxkcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmNvbmRpdGlvbmFsRmllbGRzLmZpZWxkc1xyXG4gICAgICAgIC5tYXAoaW5kZXggPT4gdGhpcy5hY3RpdmVGb3JtSW5wdXRzW2luZGV4XSlcclxuICAgICAgICAuZmlsdGVyKGZpZWxkID0+IGZpZWxkKTsgLy8gUmVtb3ZlIHVuZGVmaW5lZCBmaWVsZHNcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gT3RoZXJ3aXNlLCBzaG93IHJlbWFpbmluZyBmaWVsZHMgYWZ0ZXIgaW5pdGlhbCBjb3VudFxyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRm9ybUlucHV0cy5zbGljZShpbml0aWFsQ291bnQpO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHRoZSBhY3R1YWwgZmllbGQgaW5kZXggZm9yIGluaXRpYWwgZmllbGRzXHJcbiAgZ2V0SW5pdGlhbEZpZWxkSW5kZXgobG9jYWxJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBsb2NhbEluZGV4O1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHRoZSBhY3R1YWwgZmllbGQgaW5kZXggZm9yIGFkZGl0aW9uYWwgZmllbGRzXHJcbiAgZ2V0QWRkaXRpb25hbEZpZWxkSW5kZXgobG9jYWxJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGluaXRpYWxDb3VudCA9IHRoaXMuYWN0aXZlRm9ybUxheW91dC5pbml0aWFsVmlzaWJsZUZpZWxkcyB8fCB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuZmllbGRzUGVyUm93IHx8IDI7XHJcbiAgICBcclxuICAgIC8vIElmIGNvbmRpdGlvbmFsIGZpZWxkcyBhcmUgc3BlY2lmaWVkLCB1c2UgdGhvc2UgaW5kaWNlc1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlRm9ybUxheW91dC5jb25kaXRpb25hbEZpZWxkcz8uZmllbGRzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuY29uZGl0aW9uYWxGaWVsZHMuZmllbGRzW2xvY2FsSW5kZXhdIHx8IDA7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIE90aGVyd2lzZSwgb2Zmc2V0IGJ5IGluaXRpYWwgY291bnRcclxuICAgIHJldHVybiBpbml0aWFsQ291bnQgKyBsb2NhbEluZGV4O1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IENTUyBjbGFzcyBmb3IgYWRkaXRpb25hbCBmaWVsZHMgdG8gbWFpbnRhaW4gbGF5b3V0XHJcbiAgZ2V0QWRkaXRpb25hbEZpZWxkQ2xhc3MobG9jYWxJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpZWxkc1BlclJvdyA9IHRoaXMuYWN0aXZlRm9ybUxheW91dC5maWVsZHNQZXJSb3cgfHwgMjtcclxuICAgIFxyXG4gICAgaWYgKGZpZWxkc1BlclJvdyA9PT0gMikge1xyXG4gICAgICByZXR1cm4gJ2NvbC02JzsgLy8gQm9vdHN0cmFwLXN0eWxlIDUwJSB3aWR0aCBmb3IgMi1jb2x1bW4gbGF5b3V0XHJcbiAgICB9IGVsc2UgaWYgKGZpZWxkc1BlclJvdyA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gJ2NvbC0xMic7IC8vIEZ1bGwgd2lkdGggZm9yIHNpbmdsZSBjb2x1bW5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgY29sLSR7MTIgLyBmaWVsZHNQZXJSb3d9YDsgLy8gRHluYW1pYyB3aWR0aCBiYXNlZCBvbiBmaWVsZHMgcGVyIHJvd1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaWYgYWxsIHZpc2libGUgZmllbGRzIGFyZSBmaWxsZWQgYW5kIGZvcm0gaXMgdmFsaWRcclxuICBhcmVBbGxWaXNpYmxlRmllbGRzRmlsbGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUZvcm1JbnB1dHMgfHwgdGhpcy5hY3RpdmVGb3JtSW5wdXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgIC8vIEdldCBhbGwgY3VycmVudGx5IHZpc2libGUgZmllbGRzXHJcbiAgICBjb25zdCBpbml0aWFsRmllbGRzID0gdGhpcy5nZXRJbml0aWFsRmllbGRzKCk7XHJcbiAgICBjb25zdCBhZGRpdGlvbmFsRmllbGRzID0gdGhpcy5zaG91bGRTaG93QWRkaXRpb25hbEZpZWxkcygpID8gdGhpcy5nZXRBZGRpdGlvbmFsRmllbGRzKCkgOiBbXTtcclxuICAgIGNvbnN0IGFsbFZpc2libGVGaWVsZHMgPSBbLi4uaW5pdGlhbEZpZWxkcywgLi4uYWRkaXRpb25hbEZpZWxkc107XHJcbiAgICBcclxuICAgIC8vIENoZWNrIGlmIGFsbCB2aXNpYmxlIGZpZWxkcyBoYXZlIHZhbHVlc1xyXG4gICAgY29uc3QgYWxsRmllbGRzRmlsbGVkID0gYWxsVmlzaWJsZUZpZWxkcy5ldmVyeShmaWVsZCA9PiB7XHJcbiAgICAgIGNvbnN0IG1vZGVsS2V5ID0gZmllbGQubGFiZWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XHJcbiAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLm1vZGVsW21vZGVsS2V5XTtcclxuICAgICAgXHJcbiAgICAgIGlmICghZmllbGRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBcclxuICAgICAgLy8gRm9yIHN0cmluZyB2YWx1ZXMsIGNoZWNrIGlmIG5vdCBlbXB0eSBhZnRlciB0cmltXHJcbiAgICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmllbGRWYWx1ZS50cmltKCkgIT09ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBGb3IgYXJyYXlzIChtdWx0aS1zZWxlY3QpLCBjaGVjayBpZiBub3QgZW1wdHlcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gZmllbGRWYWx1ZS5sZW5ndGggPiAwO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyBBbHNvIGNoZWNrIGlmIHRoZSBmb3JtIGlzIHZhbGlkXHJcbiAgICBjb25zdCBmb3JtVmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XHJcbiAgICBcclxuICAgIHJldHVybiBhbGxGaWVsZHNGaWxsZWQgJiYgZm9ybVZhbGlkO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGJhbm5lckNvbnRlbnQoKTsgYXMgY29udGVudCkge1xyXG4gIDxkaXYgY2xhc3M9XCJlcnJvci1wYWdlIG1lc3NhZ2UtYmFubmVyLXYyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7IGdhcDogY29udGVudEdhcCB8fCAndmFyKC0tbWVkaXVtLTMycHgsIDMycHgpJyB9XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1ib3R0b20nOiBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24gPz8gJ3ZhcigtLXNtYWxsLTE2cHgsIDE2cHgpJyB9XCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImNvbnRlbnQubWVzc2FnZUljb25cIiBbYWx0XT1cImNvbnRlbnQudHlwZSArICcgaW1hZ2UnXCJcclxuICAgICAgICAgIFtzdHlsZS4tLW1lc3NhZ2UtaWNvbi1oZWlnaHRdPVwiY29udGVudC5tZXNzYWdlSWNvblNpemU/LmhlaWdodFwiXHJcbiAgICAgICAgICBbc3R5bGUuLS1tZXNzYWdlLWljb24td2lkdGhdPVwiY29udGVudC5tZXNzYWdlSWNvblNpemU/LndpZHRoXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtY2xhc3NcIiBbbmdDbGFzc109XCJ0aXRsZUNsYXNzIHx8ICd0aXRsZS1jbGFzcydcIiBbaW5uZXJIVE1MXT1cImNvbnRlbnQudGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIiBbbmdDbGFzc109XCJkZXNjcmlwdGlvbkNsYXNzIHx8ICdkZXNjcmlwdGlvbidcIiBbaW5uZXJIVE1MXT1cImNvbnRlbnQuZGVzY3JpcHRpb25cIj48L3A+IFxyXG4gICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IG1hcmdpbjogYmFubmVyPy5zcGFjaW5nICsgJ3B4IDBweCcgfVwiPlxyXG4gICAgICAgICAgICA8c2EtbWVzc2FnZS1iYW5uZXIgKm5nSWY9XCIhaXNFbXB0eU9iamVjdChiYW5uZXIpXCIgW3R5cGVdPVwiYmFubmVyPy50eXBlXCIgW2Jhbm5lckljb25dPVwiYmFubmVyPy5iYW5uZXJJY29uXCIgW2J1dHRvbkljb25dPVwiYmFubmVyPy5idXR0b25JY29uXCJcclxuICAgICAgICAgICAgICBbYmFubmVySWNvblNpemVdPVwiYmFubmVyPy5iYW5uZXJJY29uU2l6ZVwiIFtidXR0b25UeXBlXT1cImJhbm5lcj8uYnV0dG9uVHlwZVwiIFtidXR0b25TaXplXT1cImJhbm5lcj8uYnV0dG9uU2l6ZVwiIFtidXR0b25JY29uUG9zaXRpb25dPVwiYmFubmVyPy5idXR0b25JY29uUG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgIFtidXR0b25JY29uU2l6ZV09XCJiYW5uZXI/LmJ1dHRvbkljb25TaXplXCIgW2FjdGlvblRleHRdPVwiYmFubmVyPy5hY3Rpb25UZXh0XCIgPlxyXG4gICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJiYW5uZXI/LnRleHRcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9zYS1tZXNzYWdlLWJhbm5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgIDwhLS0gRm9ybSBpbnB1dHMgc2VjdGlvbiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlRm9ybUlucHV0cz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImRpYWxvZy1mb3JtXCI+XHJcbiAgICAgICAgICAgIDwhLS0gSW5pdGlhbCBmaWVsZHMgcm93IChkeW5hbWljIGNvdW50IGJhc2VkIG9uIGZvcm1MYXlvdXQuZmllbGRzUGVyUm93KSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtd3JhcHBlclwiICpuZ0Zvcj1cImxldCBpbnB1dCBvZiBnZXRJbml0aWFsRmllbGRzKCk7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtbHktZm9ybSBcclxuICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZHNdPVwiW2ZpZWxkc1tnZXRJbml0aWFsRmllbGRJbmRleChpKV1dXCJcclxuICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cIm9uRm9ybU1vZGVsQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDwvZm9ybWx5LWZvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPCEtLSBBZGRpdGlvbmFsIGZpZWxkcyAoY29uZGl0aW9uYWwgYmFzZWQgb24gZm9ybUxheW91dC5jb25kaXRpb25hbEZpZWxkcykgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRpdGlvbmFsLWZpZWxkc1wiICpuZ0lmPVwic2hvdWxkU2hvd0FkZGl0aW9uYWxGaWVsZHMoKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtd3JhcHBlclwiICpuZ0Zvcj1cImxldCBpbnB1dCBvZiBnZXRBZGRpdGlvbmFsRmllbGRzKCk7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtbHktZm9ybSBcclxuICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZHNdPVwiW2ZpZWxkc1tnZXRBZGRpdGlvbmFsRmllbGRJbmRleChpKV1dXCJcclxuICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwib25Gb3JtTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZHNbZ2V0QWRkaXRpb25hbEZpZWxkSW5kZXgoaSldXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm1seS1mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgIDwhLS0gQ3VzdG9tIGZvcm0gYnV0dG9uKHMpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWJ1dHRvbi1jb250YWluZXJcIiAqbmdJZj1cImFjdGl2ZUN1c3RvbUZvcm1CdXR0b25cIj5cclxuICAgICAgICAgIDwhLS0gU3VwcG9ydCBib3RoIHNpbmdsZSBidXR0b24gYW5kIGFycmF5IG9mIGJ1dHRvbnMgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNCdXR0b25BcnJheSgpOyBlbHNlIHNpbmdsZUJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8c2EtYnV0dG9uIFxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiYnV0dG9uLmlkXCJcclxuICAgICAgICAgICAgICBbdGV4dF09XCJidXR0b24udGV4dFwiXHJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiYnV0dG9uLnR5cGVcIlxyXG4gICAgICAgICAgICAgIFtzaXplXT1cImJ1dHRvbi5zaXplXCJcclxuICAgICAgICAgICAgICBbc3RhdGVdPVwiYnV0dG9uLnN0YXRlXCJcclxuICAgICAgICAgICAgICBbSW1hZ2VQYXRoXT1cImJ1dHRvbi5JbWFnZVBhdGhcIlxyXG4gICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiYnV0dG9uLmljb25Qb3NpdGlvblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiPlxyXG4gICAgICAgICAgICA8L3NhLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUJ1dHRvbj5cclxuICAgICAgICAgICAgPHNhLWJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJhY3RpdmVDdXN0b21Gb3JtQnV0dG9uLmlkXCJcclxuICAgICAgICAgICAgICBbdGV4dF09XCJhY3RpdmVDdXN0b21Gb3JtQnV0dG9uLnRleHRcIlxyXG4gICAgICAgICAgICAgIFt0eXBlXT1cImFjdGl2ZUN1c3RvbUZvcm1CdXR0b24udHlwZVwiXHJcbiAgICAgICAgICAgICAgW3NpemVdPVwiYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbi5zaXplXCJcclxuICAgICAgICAgICAgICBbc3RhdGVdPVwiYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbi5zdGF0ZVwiXHJcbiAgICAgICAgICAgICAgW0ltYWdlUGF0aF09XCJhY3RpdmVDdXN0b21Gb3JtQnV0dG9uLkltYWdlUGF0aFwiXHJcbiAgICAgICAgICAgICAgW2ljb25Qb3NpdGlvbl09XCJhY3RpdmVDdXN0b21Gb3JtQnV0dG9uLmljb25Qb3NpdGlvblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbilcIj5cclxuICAgICAgICAgICAgPC9zYS1idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgIDwhLS0gRGl2aWRlciBzZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyLXNlY3Rpb25cIiAqbmdJZj1cImFjdGl2ZURpdmlkZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlci1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiZGl2aWRlci10aXRsZVwiICpuZ0lmPVwiYWN0aXZlRGl2aWRlckNvbmZpZy50aXRsZVwiPnt7IGFjdGl2ZURpdmlkZXJDb25maWcudGl0bGUgfX08L2gzPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImRpdmlkZXItc3VidGl0bGVcIiAqbmdJZj1cImFjdGl2ZURpdmlkZXJDb25maWcuc3VidGl0bGUgfHwgYWN0aXZlRGl2aWRlckNvbmZpZy5zaG93U3VidGl0bGVXaGVuRW1wdHlcIj5cclxuICAgICAgICAgICAgICB7eyBhY3RpdmVEaXZpZGVyQ29uZmlnLnN1YnRpdGxlIHx8ICdObyBpdGVtcyBhZGRlZCB5ZXQnIH19XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICA8IS0tIENoaXBzIHNlY3Rpb24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtbGlzdFwiICpuZ0lmPVwiYWN0aXZlQ2hpcHM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPHNhLWNoaXAgXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2YgYWN0aXZlQ2hpcHNcIlxyXG4gICAgICAgICAgICAgIFt0ZXh0XT1cImNoaXAubGFiZWwgfHwgY2hpcC50ZXh0IHx8IGNoaXBcIlxyXG4gICAgICAgICAgICAgIFt0eXBlXT1cIidyZWd1bGFyJ1wiXHJcbiAgICAgICAgICAgICAgW3N0YXRlXT1cIidkZWZhdWx0J1wiXHJcbiAgICAgICAgICAgICAgW2ZpbGxpbmddPVwiJ2ZpbGxlZCdcIlxyXG4gICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXHJcbiAgICAgICAgICAgICAgW2ljb25QYXRoXT1cIicuLi9hc3NldHMvY2xvc2VCbHVlT3V0bGluZWQuc3ZnJ1wiXHJcbiAgICAgICAgICAgICAgKG9uQ2xpY2tFdmVudCk9XCJjaGlwLnJlbW92YWJsZSA/IG9uQ2hpcFJlbW92ZShjaGlwKSA6IG51bGxcIj5cclxuICAgICAgICAgICAgPC9zYS1jaGlwPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgQGlmKGJ1dHRvbnMpe1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cclxuICAgICAgICAgIEBmb3IgKGJ1dHRvbiBvZiBidXR0b25zOyB0cmFjayBidXR0b24udGV4dCkge1xyXG4gICAgICAgICAgICA8c2EtYnV0dG9uIFxyXG4gICAgICAgICAgICAgIFt0ZXh0XT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJidXR0b24uaWNvblwiXHJcbiAgICAgICAgICAgICAgW3NpemVdPVwiYnV0dG9uLnNpemVcIlxyXG4gICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlXCJcclxuICAgICAgICAgICAgICBbaWNvblBvc2l0aW9uXT1cImJ1dHRvbi5pY29uUG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgIFtidXR0b25JY29uU2l6ZV09XCJidXR0b24uYnV0dG9uSWNvblNpemVcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrRXZlbnQpPVwib25CdXR0b25DbGljayhidXR0b24sICRldmVudClcIlxyXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIFtzdGF0ZV09XCIhYXJlQWxsVmlzaWJsZUZpZWxkc0ZpbGxlZCgpID8gJ2Rpc2FibGVkJyA6ICcnXCJcclxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImJ1dHRvbi50ZXh0XCI+XHJcbiAgICAgICAgICAgIDwvc2EtYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICB9Il19
|
|
404
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1iYW5uZXItdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9tZXNzYWdlLWJhbm5lci12Mi9tZXNzYWdlLWJhbm5lci12Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL21lc3NhZ2UtYmFubmVyLXYyL21lc3NhZ2UtYmFubmVyLXYyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQWUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENB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LEtBQUs7Z0JBQ0csaUNBQWlDO3NCQUF6QyxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBZ0NJLFdBQVc7c0JBQXBCLE1BQU07Z0JBOEJNLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sZUFBZTtzQkFBM0IsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBjb21wdXRlZCwgc2lnbmFsLCBlZmZlY3QsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi9pY29uL2ljb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWNvbk5hbWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ljb24taW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQnV0dG9uSWNvblBvc2l0aW9uLCBCdXR0b25TaXplLCBCdXR0b25UeXBlLCBCdXR0b25JbnRlcmZhY2UsIEJ1dHRvbkNsaWNrRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2J1dHRvbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VCYW5uZXJDb21wb25lbnQgfSBmcm9tICcuLi9tZXNzYWdlLWJhbm5lci9tZXNzYWdlLWJhbm5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWlucHV0L2Zvcm0taW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tc2VsZWN0L2Zvcm0tc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtbHlNb2R1bGUsIEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IENoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcHMvY2hpcHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybUxheW91dENvbmZpZywgRm9ybUZpZWxkQ29uZmlnLCBVbmlmaWVkRm9ybUNvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZm9ybS1sYXlvdXQuaW50ZXJmYWNlJztcclxuXHJcbmludGVyZmFjZSBNZXNzYWdlQmFubmVyU3RhdGUge1xyXG4gIHR5cGU6ICdkZWZhdWx0JyB8ICdjb25uZWN0aW9uJyB8ICdhY2Nlc3MnIHwgJ2FjY2Vzc1Jlc3RyaWN0ZWQnO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICBtZXNzYWdlSWNvbjogc3RyaW5nO1xyXG4gIG1lc3NhZ2VJY29uU2l6ZT86IHtcclxuICAgIHdpZHRoPzogc3RyaW5nO1xyXG4gICAgaGVpZ2h0Pzogc3RyaW5nO1xyXG4gIH07XHJcbiAgc3BhY2luZ0JldHdlZW5JbWFnZUFuZERlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIGNvbnRlbnRHYXA/OiBzdHJpbmc7IFxyXG4gIGNvbnRhY3RVcmw/OiBzdHJpbmc7XHJcbiAgdGl0bGVDbGFzcz86IHN0cmluZztcclxuICBkZXNjcmlwdGlvbkNsYXNzPzogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NhLW1lc3NhZ2UtYmFubmVyLXYyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEljb25Db21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgSHR0cENsaWVudE1vZHVsZSxNZXNzYWdlQmFubmVyQ29tcG9uZW50LCBGb3JtSW5wdXRDb21wb25lbnQsIEZvcm1TZWxlY3RDb21wb25lbnQsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtbHlNb2R1bGUsIENoaXBzQ29tcG9uZW50XSxcclxuICBwcm92aWRlcnM6IFtJY29uU2VydmljZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtYmFubmVyLXYyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tZXNzYWdlLWJhbm5lci12Mi5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VCYW5uZXJWMkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgLy8gU3RhdGUgbWFuYWdlbWVudCB1c2luZyBzaWduYWxzXHJcbiAgcHJpdmF0ZSBzdGF0ZSA9IHNpZ25hbDxNZXNzYWdlQmFubmVyU3RhdGU+KHtcclxuICAgIHR5cGU6ICdkZWZhdWx0JyxcclxuICAgIHRpdGxlOiAnJyxcclxuICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgIG1lc3NhZ2VJY29uOiAnJyxcclxuICAgIG1lc3NhZ2VJY29uU2l6ZToge1xyXG4gICAgICBoZWlnaHQ6ICcxMi41cmVtJ1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBDb21wdXRlZCBwcm9wZXJ0aWVzXHJcbiAgcHJvdGVjdGVkIGJhbm5lckNvbnRlbnQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnN0YXRlKCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5jdXJyZW50U3RhdGUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnNhbml0aXplRGVzY3JpcHRpb24oY3VycmVudFN0YXRlLmRlc2NyaXB0aW9uKVxyXG4gICAgfTtcclxuICB9KTtcclxuXHJcbiAgQElucHV0KCkgbWVzc2FnZVR5cGU6ICdkZWZhdWx0JyB8ICdjb25uZWN0aW9uJyB8ICdhY2Nlc3MnIHwgJ2FjY2Vzc1Jlc3RyaWN0ZWQnO1xyXG4gIEBJbnB1dCgpIGNvbnRhY3RVcmw/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3BhY2luZ0JldHdlZW5JbWFnZUFuZERlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbnRlbnRHYXA/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdGl0bGVDbGFzcz86IHN0cmluZztcclxuICBASW5wdXQoKSBkZXNjcmlwdGlvbkNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGJhbm5lcjphbnkgPSB7fTtcclxuICBASW5wdXQoKSBmb3JtQ29uZmlnOiBVbmlmaWVkRm9ybUNvbmZpZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgbW9kZWw6IGFueSA9IHt9O1xyXG4gIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xyXG4gIGFsbEZpZWxkc0ZpbGxlZCA9IHNpZ25hbChmYWxzZSk7XHJcbiAgYWRkaXRpb25hbEZpZWxkUm93czogRm9ybUZpZWxkQ29uZmlnW11bXSA9IFtdO1xyXG4gIC8vIENvbXB1dGVkIHByb3BlcnRpZXMgZm9yIHVuaWZpZWQgYWNjZXNzXHJcbiAgZ2V0IGFjdGl2ZUZvcm1JbnB1dHMoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZz8uZmllbGRzIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdGl2ZUNoaXBzKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Db25maWc/LmNoaXBzIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdGl2ZUN1c3RvbUZvcm1CdXR0b24oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Db25maWc/LmN1c3RvbUJ1dHRvbiB8fCBbXTtcclxuICB9XHJcblxyXG4gIGdldCBhY3RpdmVEaXZpZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZz8uZGl2aWRlcj8uZW5hYmxlZCA/PyBmYWxzZTtcclxuICB9IFxyXG5cclxuICBnZXQgYWN0aXZlRGl2aWRlckNvbmZpZygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZz8uZGl2aWRlciB8fCB7fTtcclxuICB9XHJcblxyXG4gIGdldCBhY3RpdmVGb3JtTGF5b3V0KCk6IEZvcm1MYXlvdXRDb25maWcge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZz8ubGF5b3V0IHx8IHt9O1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIG9uRm9ybUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7dHlwZTogc3RyaW5nLCBkYXRhOiBhbnl9PigpO1xyXG4gIFxyXG4gIG9uQ2hpcFJlbW92ZShjaGlwOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Gb3JtRXZlbnQuZW1pdCh7IHR5cGU6ICdjaGlwLXJlbW92ZScsIGRhdGE6IGNoaXAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIG9uQWRkVXNlcigpOiB2b2lkIHtcclxuICAgIGxldCBjbGlja2VkQnV0dG9uID0gdGhpcy5hY3RpdmVDdXN0b21Gb3JtQnV0dG9uO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5hY3RpdmVDdXN0b21Gb3JtQnV0dG9uKSkge1xyXG4gICAgICBjbGlja2VkQnV0dG9uID0gdGhpcy5hY3RpdmVDdXN0b21Gb3JtQnV0dG9uLmZpbmQoYnRuID0+IFxyXG4gICAgICAgIGJ0bi50ZXh0ID09PSAnQWRkIFVzZXInIHx8IGJ0bi5pZCA9PT0gJ2FkZC11c2VyJyB8fCBidG4uYWN0aW9uID09PSAnYWRkLXVzZXInXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uRm9ybUV2ZW50LmVtaXQoeyB0eXBlOiAnY3VzdG9tLWJ1dHRvbi1jbGljaycsIGRhdGE6IGNsaWNrZWRCdXR0b24gfSk7XHJcbiAgICBpZiAoY2xpY2tlZEJ1dHRvbj8ucmVzZXRGb3JtICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLm1vZGVsID0ge307XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICB0aGlzLmFjdGl2ZUZvcm1JbnB1dHM/LmZvckVhY2goaW5wdXQgPT4ge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gJyc7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1seUZpZWxkcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBhcmVBbGxGaWVsZHNGaWxsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aXZlRm9ybUlucHV0cyB8fCB0aGlzLmFjdGl2ZUZvcm1JbnB1dHMubGVuZ3RoIDwgNCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRm9ybUlucHV0cy5ldmVyeShmaWVsZCA9PiBmaWVsZC52YWx1ZSAmJiBmaWVsZC52YWx1ZS50cmltKCkgIT09ICcnKTtcclxuICB9XHJcbiAgXHJcblxyXG4gIEBJbnB1dCgpIHNldCBtZXNzYWdlSWNvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzID0+ICh7IC4uLnMsIG1lc3NhZ2VJY29uOiB2YWx1ZSB9KSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgbWVzc2FnZUljb25TaXplKHZhbHVlOiB7IHdpZHRoPzogc3RyaW5nOyBoZWlnaHQ/OiBzdHJpbmcgfSkge1xyXG4gICAgdGhpcy5zdGF0ZS51cGRhdGUocyA9PiAoeyAuLi5zLCBtZXNzYWdlSWNvblNpemU6IHZhbHVlIH0pKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzID0+ICh7IC4uLnMsIHRpdGxlOiB2YWx1ZSB9KSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgZGVzY3JpcHRpb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdGF0ZS51cGRhdGUocyA9PiAoeyAuLi5zLCBkZXNjcmlwdGlvbjogdmFsdWUgfSkpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgYnV0dG9uczogQnV0dG9uSW50ZXJmYWNlW10gPSBbXTtcclxuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrRXZlbnQ+KCk7XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIG9yIGlmIG1lc3NhZ2VUeXBlIGhhcyBjaGFuZ2VkXHJcbiAgICBjb25zdCBzaG91bGRVcGRhdGVCYXNlZE9uVHlwZSA9IGNoYW5nZXNbJ21lc3NhZ2VUeXBlJ10gJiYgXHJcbiAgICAgIC8vIE9ubHkgdXBkYXRlIGJhc2VkIG9uIHR5cGUgaWYgd2UgZG9uJ3QgaGF2ZSBjdXN0b20gdmFsdWVzIHNldFxyXG4gICAgICAhKHRoaXMuc3RhdGUoKS50aXRsZSB8fCB0aGlzLnN0YXRlKCkuZGVzY3JpcHRpb24gfHwgdGhpcy5zdGF0ZSgpLm1lc3NhZ2VJY29uKTtcclxuICAgIFxyXG4gICAgaWYgKHNob3VsZFVwZGF0ZUJhc2VkT25UeXBlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQ29udGVudEJhc2VkT25UeXBlKHRoaXMubWVzc2FnZVR5cGUgfHwgJ2RlZmF1bHQnKTtcclxuICAgIH0gICAgXHJcbiAgICBpZiAoY2hhbmdlc1snZm9ybUNvbmZpZyddIHx8IGNoYW5nZXNbJ2Zvcm1JbnB1dHMnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1seUZpZWxkcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb250ZW50QmFzZWRPblR5cGUodHlwZTogJ2RlZmF1bHQnIHwgJ2Nvbm5lY3Rpb24nIHwgJ2FjY2VzcycgfCAnYWNjZXNzUmVzdHJpY3RlZCcpIHsgIFxyXG4gICAgLy8gRGVmaW5lIGEgdHlwZSBmb3IgdGhlIGNvbnRlbnQgaXRlbXMgdG8gZW5zdXJlIGFsbCBwcm9wZXJ0aWVzIGFyZSBwcm9wZXJseSB0eXBlZFxyXG4gICAgdHlwZSBDb250ZW50SXRlbSA9IHtcclxuICAgICAgdGl0bGU6IHN0cmluZztcclxuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgICAgbWVzc2FnZUljb246IHN0cmluZztcclxuICAgICAgc3BhY2luZ0JldHdlZW5JbWFnZUFuZERlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gICAgICBjb250ZW50R2FwPzogc3RyaW5nO1xyXG4gICAgICB0aXRsZUNsYXNzPzogc3RyaW5nO1xyXG4gICAgICBkZXNjcmlwdGlvbkNsYXNzPzogc3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBPbmx5IGFwcGx5IGRlZmF1bHQgY29udGVudCBpZiBjdXN0b20gY29udGVudCBoYXNuJ3QgYmVlbiBwcm92aWRlZFxyXG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5zdGF0ZSgpO1xyXG4gICAgY29uc3QgY29udGVudDogUmVjb3JkPCdkZWZhdWx0JyB8ICdjb25uZWN0aW9uJyB8ICdhY2Nlc3MnIHwgJ2FjY2Vzc1Jlc3RyaWN0ZWQnLCBDb250ZW50SXRlbT4gPSB7XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICB0aXRsZTogJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluIG9yIHRyeSBhZnRlciBzb21lIHRpbWUnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSWYgdGhlIGlzc3VlIHBlcnNpc3RzLCBjb250YWN0IG91ciBzdXBwb3J0IHRlYW0gYXQgPHNwYW4gY2xhc3M9XCJzdXBwb3J0LWVtYWlsXCI+c3VwcG9ydEBzYXJhc2FuYWx5dGljcy5jb208L3NwYW4+JyxcclxuICAgICAgICBtZXNzYWdlSWNvbjogJy9hc3NldHMvZXJyb3IuZ2lmJ1xyXG4gICAgICB9LFxyXG4gICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgdGl0bGU6ICdXZVxcJ3JlIGhhdmluZyB0cm91YmxlIGNvbm5lY3RpbmcuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24gYW5kIHRyeSBhZ2FpbicsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdZb3UgY2FuIGFsc28gcmVhY2ggb3V0IHRvIG91ciBzdXBwb3J0IHRlYW0gYXQgPHNwYW4gY2xhc3M9XCJzdXBwb3J0LWVtYWlsXCI+c3VwcG9ydEBzYXJhc2FuYWx5dGljcy5jb208L3NwYW4+IGZvciBhc3Npc3RhbmNlJyxcclxuICAgICAgICBtZXNzYWdlSWNvbjogJy9hc3NldHMvbG9zdC1jb25uZWN0aW9uLmdpZidcclxuICAgICAgfSxcclxuICAgICAgYWNjZXNzOiB7XHJcbiAgICAgICAgdGl0bGU6ICdUaGlzIGlzIHRha2luZyBhIGJpdCBsb25nZXIgdGhhbiB1c3VhbC4gUGxlYXNlIGhvbGQgb24hJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ0lmIHRoZSBkZWxheSBjb250aW51ZXMsIGNoZWNrIHlvdXIgY29ubmVjdGlvbiBhbmQgdHJ5IHJlZnJlc2hpbmcgdGhlIHBhZ2UuJyxcclxuICAgICAgICBtZXNzYWdlSWNvbjogJy9hc3NldHMvbG9uZy1sb2FkaW5nLmdpZidcclxuICAgICAgfSxcclxuICAgICAgYWNjZXNzUmVzdHJpY3RlZDoge1xyXG4gICAgICAgIHRpdGxlOiAnQWNjZXNzIFJlc3RyaWN0ZWQhJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogYExvb2tzIGxpa2UgeW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoaXMgbW9kdWxlIGp1c3QgeWV0LiBObyB3b3JyaWVz4oCUcmVhY2ggb3V0IHRvIHlvdXIgYWRtaW4gdG8gcmVxdWVzdCBhY2Nlc3MgdG8gdGhpcyBmZWF0dXJlLiBJZiB5b3UncmUgZmFjaW5nIGFueSBpc3N1ZXMsIGZlZWwgZnJlZSB0byA8YSBjbGFzcz1cImN1c3RvbS1jb250YWN0LWxpbmtcIiBocmVmPVwiJHt0aGlzLmNvbnRhY3RVcmwgPz8gJ2h0dHBzOi8vc3VwcG9ydC5kZWZhdWx0LmNvbSd9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+Q29udGFjdCBVczwvYT4uYCxcclxuICAgICAgICBtZXNzYWdlSWNvbjogJy9hc3NldHMvYWNjZXNzLXJlc3RyaWN0ZWQuZ2lmJyxcclxuICAgICAgICBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb246ICcwcHgnLFxyXG4gICAgICAgIGNvbnRlbnRHYXA6JzIwcHgnLFxyXG4gICAgICAgIHRpdGxlQ2xhc3M6ICdhY2Nlc3MtcmVzdHJpY3RlZC10aXRsZScsXHJcbiAgICAgICAgZGVzY3JpcHRpb25DbGFzczogJ2FjY2Vzcy1yZXN0cmljdGVkLWRlc2NyaXB0aW9uJyxcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50SXRlbSA9IGNvbnRlbnRbdHlwZV07XHJcblxyXG4gICAgdGhpcy5zdGF0ZS51cGRhdGUocyA9PiAoe1xyXG4gICAgICAuLi5zLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICAvLyBPbmx5IGFwcGx5IGRlZmF1bHQgdmFsdWVzIGlmIGN1c3RvbSB2YWx1ZXMgaGF2ZW4ndCBiZWVuIHByb3ZpZGVkXHJcbiAgICAgIHRpdGxlOiBzLnRpdGxlIHx8IGNvbnRlbnRJdGVtLnRpdGxlLFxyXG4gICAgICBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiB8fCBjb250ZW50SXRlbS5kZXNjcmlwdGlvbixcclxuICAgICAgbWVzc2FnZUljb246IHMubWVzc2FnZUljb24gfHwgY29udGVudEl0ZW0ubWVzc2FnZUljb24sXHJcbiAgICAgIC8vIEZvciBvdGhlciBwcm9wZXJ0aWVzLCBvbmx5IGFwcGx5IHRoZW0gaWYgdGhleSBleGlzdCBpbiB0aGUgY29udGVudEl0ZW1cclxuICAgICAgLi4uKGNvbnRlbnRJdGVtLnNwYWNpbmdCZXR3ZWVuSW1hZ2VBbmREZXNjcmlwdGlvbiAmJiB7IHNwYWNpbmdCZXR3ZWVuSW1hZ2VBbmREZXNjcmlwdGlvbjogY29udGVudEl0ZW0uc3BhY2luZ0JldHdlZW5JbWFnZUFuZERlc2NyaXB0aW9uIH0pLFxyXG4gICAgICAuLi4oY29udGVudEl0ZW0uY29udGVudEdhcCAmJiB7IGNvbnRlbnRHYXA6IGNvbnRlbnRJdGVtLmNvbnRlbnRHYXAgfSksXHJcbiAgICAgIC4uLihjb250ZW50SXRlbS50aXRsZUNsYXNzICYmIHsgdGl0bGVDbGFzczogY29udGVudEl0ZW0udGl0bGVDbGFzcyB9KSxcclxuICAgICAgLi4uKGNvbnRlbnRJdGVtLmRlc2NyaXB0aW9uQ2xhc3MgJiYgeyBkZXNjcmlwdGlvbkNsYXNzOiBjb250ZW50SXRlbS5kZXNjcmlwdGlvbkNsYXNzIH0pXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhbml0aXplRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZGVzY3JpcHRpb24ucmVwbGFjZShcclxuICAgICAgL3N1cHBvcnRAc2FyYXNhbmFseXRpY3NcXC5jb20vZyxcclxuICAgICAgJzxzcGFuIGNsYXNzPVwic3VwcG9ydC1lbWFpbFwiPnN1cHBvcnRAc2FyYXNhbmFseXRpY3MuY29tPC9zcGFuPidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkJ1dHRvbkNsaWNrKGJ1dHRvbjogYW55LCBldmVudD86IEV2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZm9ybSBidXR0b24gKGZyb20gYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbikgb3IgcmVndWxhciBiYW5uZXIgYnV0dG9uXHJcbiAgICBpZiAoIWV2ZW50ICYmIChidXR0b24uYWN0aW9uID09PSAnc3VibWl0JyB8fCBidXR0b24uYWN0aW9uID09PSAnbGluaycgfHwgYnV0dG9uLmlkID09PSAnYWRkLXVzZXInIHx8IGJ1dHRvbi5pZCA9PT0gJ2xlYXJuLW1vcmUnKSkge1xyXG4gICAgICAvLyBIYW5kbGUgZm9ybSBidXR0b25zIHdpdGggbmV3IGxvZ2ljXHJcbiAgICAgIGlmICggYnV0dG9uLmlkID09PSAnYWRkLXVzZXInKSB7XHJcbiAgICAgICAgLy8gSGFuZGxlIGZvcm0gc3VibWlzc2lvbiAoZXhpc3RpbmcgQWRkIFVzZXIgZnVuY3Rpb25hbGl0eSlcclxuICAgICAgICB0aGlzLm9uQWRkVXNlcigpO1xyXG4gICAgICB9IGVsc2UgaWYgKGJ1dHRvbi5hY3Rpb24gPT09ICdsaW5rJyAmJiBidXR0b24ubGluaykge1xyXG4gICAgICAgIC8vIEhhbmRsZSBsaW5rIG5hdmlnYXRpb24gKExlYXJuIE1vcmUgZnVuY3Rpb25hbGl0eSlcclxuICAgICAgICB3aW5kb3cub3BlbihidXR0b24ubGluaywgJ19ibGFuaycpO1xyXG4gICAgICB9IGVsc2UgaWYgKGJ1dHRvbi5vbkNsaWNrKSB7XHJcbiAgICAgICAgLy8gSGFuZGxlIGN1c3RvbSBjbGljayBmdW5jdGlvblxyXG4gICAgICAgIGJ1dHRvbi5vbkNsaWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZXZlbnQpIHtcclxuICAgICAgLy8gSGFuZGxlIHJlZ3VsYXIgYmFubmVyIGJ1dHRvbnMgd2l0aCBvcmlnaW5hbCBsb2dpYyAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgICAgdGhpcy5idXR0b25DbGljay5lbWl0KHtcclxuICAgICAgICB0eXBlOiBidXR0b24udHlwZSBhcyAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyxcclxuICAgICAgICBidXR0b24sXHJcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0J1dHRvbkFycmF5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5hY3RpdmVDdXN0b21Gb3JtQnV0dG9uKTtcclxuICB9XHJcblxyXG4gIGlzRW1wdHlPYmplY3Qob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChvYmopIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtbHlGaWVsZHMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybUNvbmZpZyB8fCAhdGhpcy5mb3JtQ29uZmlnLmZpZWxkcyB8fCB0aGlzLmZvcm1Db25maWcuZmllbGRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmZpZWxkcyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmZvcm1Db25maWcuZmllbGRzLm1hcCgoaW5wdXQsIGluZGV4KSA9PiB7XHJcbiAgICAgIC8vIEFsbCBmaWVsZHMgc2hvdWxkIGJlIHNpZGUtYnktc2lkZTogRW1haWwrUm9sZSAocm93IDEpLCBCcmFuZHMrVXNlIENhc2VzIChyb3cgMilcclxuICAgICAgY29uc3QgY3NzQ2xhc3MgPSAnY29sLTYnOyAvLyBBbGwgZmllbGRzIGdldCA1MCUgd2lkdGggZm9yIDJ4MiBncmlkIGxheW91dFxyXG4gICAgICBcclxuICAgICAgY29uc3QgZmllbGRDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xyXG4gICAgICAgIGtleTogaW5wdXQubGFiZWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyksXHJcbiAgICAgICAgdHlwZTogaW5wdXQudHlwZSA9PT0gJ3RleHQnID8gJ3NhLWlucHV0JyA6ICdzYS1zZWxlY3QnLFxyXG4gICAgICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MsIC8vIEFsbCBmaWVsZHMgdXNlIGNvbC02IGZvciBzaWRlLWJ5LXNpZGUgbGF5b3V0XHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIC4uLihpbnB1dC50eXBlID09PSAndGV4dCcgJiYge1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogaW5wdXQucGxhY2Vob2xkZXIgfHwgaW5wdXQubGFiZWwsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiBpbnB1dC5yZXF1aXJlZCB8fCBmYWxzZSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICBzdXBwb3J0VGV4dDogJycsXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGlucHV0LnBsYWNlaG9sZGVyIHx8IGlucHV0LmxhYmVsLFxyXG4gICAgICAgICAgICAgIHR5cGU6IGlucHV0LmxhYmVsID09PSAnRW1haWwgSUQnID8gJ211bHRpLXZhbHVlJyA6ICd0ZXh0JyxcclxuICAgICAgICAgICAgICBtdWx0aVZhbHVlOiBpbnB1dC5sYWJlbCA9PT0gJ0VtYWlsIElEJyxcclxuICAgICAgICAgICAgICBjaGlwVmFsdWVzOiBpbnB1dC5sYWJlbCA9PT0gJ0VtYWlsIElEJyA/IFtdIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgLi4uKChpbnB1dC50eXBlID09PSAnc2VsZWN0JyB8fCBpbnB1dC50eXBlID09PSAnbXVsdGlzZWxlY3QnKSAmJiB7XHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiBpbnB1dC5yZXF1aXJlZCB8fCBmYWxzZSxcclxuICAgICAgICAgICAgY2xvc2VPbnNlbGVjdDogaW5wdXQudHlwZSA9PT0gJ3NlbGVjdCcsIC8vIE9ubHkgY2xvc2Ugb24gc2VsZWN0IGZvciBzaW5nbGUtc2VsZWN0XHJcbiAgICAgICAgICAgIGlzQ2xlYXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBiaW5kTGFiZWw6IGluZGV4ID49IDIgPyAnbmFtZScgOiAnbGFiZWwnLCAvLyBSZXN0b3JlIG9yaWdpbmFsIGJpbmRMYWJlbCBsb2dpY1xyXG4gICAgICAgICAgICBiaW5kVmFsdWU6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IGluZGV4ID49IDIgXHJcbiAgICAgICAgICAgICAgPyAoaW5wdXQub3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoeyAuLi5vcHRpb24sIG5hbWU6IG9wdGlvbi5sYWJlbCB9KSlcclxuICAgICAgICAgICAgICA6IGlucHV0Lm9wdGlvbnMgfHwgW10sXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBpbnB1dC5wbGFjZWhvbGRlciB8fCAnU2VsZWN0ICcgKyBpbnB1dC5sYWJlbCxcclxuICAgICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgbGFiZWw6IGlucHV0LnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QgJyArIGlucHV0LmxhYmVsLFxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBpbnB1dC5wbGFjZWhvbGRlciB8fCAnU2VsZWN0ICcgKyBpbnB1dC5sYWJlbCxcclxuICAgICAgICAgICAgICBtdWx0aXBsZTogaW5wdXQudHlwZSA9PT0gJ211bHRpc2VsZWN0JyB8fCBpbmRleCA+PSAyLCAvLyBFbmFibGUgbXVsdGlwbGUgZm9yIG11bHRpc2VsZWN0IG9yIGFkZGl0aW9uYWwgZmllbGRzXHJcbiAgICAgICAgICAgICAgLi4uKGlucHV0LnR5cGUgPT09ICdtdWx0aXNlbGVjdCcgfHwgaW5kZXggPj0gMikgJiYge1xyXG4gICAgICAgICAgICAgICAgaWNvblBhdGg6IFwiLi4vYXNzZXRzL2Nsb3NlQmx1ZU91dGxpbmVkLnN2Z1wiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3JlZ3VsYXInLFxyXG4gICAgICAgICAgICAgICAgc3RhdGU6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICAgIGZpbGxpbmc6ICdmaWxsZWQnLFxyXG4gICAgICAgICAgICAgICAgaWNvblBvc2l0aW9uOiAncmlnaHQnLFxyXG4gICAgICAgICAgICAgICAgc2hvd0NoZWNrYm94ZXM6IHRydWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKGlucHV0LnZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFtmaWVsZENvbmZpZy5rZXkgYXMgc3RyaW5nXSA9IGlucHV0LnZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZmllbGRDb25maWc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRm9ybU1vZGVsQ2hhbmdlKG1vZGVsOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybUlucHV0cyBhcnJheSB3aGVuIHRoZSBGb3JtbHkgbW9kZWwgY2hhbmdlc1xyXG4gICAgT2JqZWN0LmtleXMobW9kZWwpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmFjdGl2ZUZvcm1JbnB1dHMuZmluZChpbnB1dCA9PiBcclxuICAgICAgICBpbnB1dC5sYWJlbC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJ18nKSA9PT0ga2V5XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbnB1dCkge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gbW9kZWxba2V5XTtcclxuICAgICAgICAvLyBFbWl0IHRoZSBjaGFuZ2UgZXZlbnQgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGxvZ2ljXHJcbiAgICAgICAgdGhpcy5vbkZvcm1FdmVudC5lbWl0KHsgdHlwZTogJ2Zvcm0taW5wdXQtY2hhbmdlJywgZGF0YTogeyBsYWJlbDogaW5wdXQubGFiZWwsIHZhbHVlOiBtb2RlbFtrZXldIH0gfSk7XHJcbiAgICAgICAgdGhpcy5hbGxGaWVsZHNGaWxsZWQuc2V0KHRoaXMuYXJlQWxsVmlzaWJsZUZpZWxkc0ZpbGxlZCgpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZih0aGlzLmFsbEZpZWxkc0ZpbGxlZCgpKXtcclxuICAgICB0aGlzLmFkZGl0aW9uYWxGaWVsZFJvd3MgPSB0aGlzLmdldEFkZGl0aW9uYWxGaWVsZFJvd3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEdldCBpbml0aWFsIGZpZWxkcyB0byBkaXNwbGF5IGluIHRoZSBmaXJzdCByb3dcclxuICBnZXRJbml0aWFsRmllbGRzKCk6IEZvcm1GaWVsZENvbmZpZ1tdIHtcclxuICAgIGlmICghdGhpcy5hY3RpdmVGb3JtSW5wdXRzKSByZXR1cm4gW107XHJcbiAgICBcclxuICAgIGNvbnN0IGluaXRpYWxDb3VudCA9IHRoaXMuYWN0aXZlRm9ybUxheW91dC5pbml0aWFsVmlzaWJsZUZpZWxkcyB8fCB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuZmllbGRzUGVyUm93IHx8IDI7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGb3JtSW5wdXRzLnNsaWNlKDAsIGluaXRpYWxDb3VudCk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgYWRkaXRpb25hbCBmaWVsZHMgdG8gZGlzcGxheSBjb25kaXRpb25hbGx5XHJcbiAgZ2V0QWRkaXRpb25hbEZpZWxkcygpOiBGb3JtRmllbGRDb25maWdbXSB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aXZlRm9ybUlucHV0cykgcmV0dXJuIFtdO1xyXG4gICAgXHJcbiAgICBjb25zdCBpbml0aWFsQ291bnQgPSB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuaW5pdGlhbFZpc2libGVGaWVsZHMgfHwgdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmZpZWxkc1BlclJvdyB8fCAyO1xyXG4gICAgXHJcbiAgICAvLyBJZiBjb25kaXRpb25hbCBmaWVsZHMgYXJlIHNwZWNpZmllZCwgdXNlIHRob3NlIGluZGljZXNcclxuICAgIGlmICh0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuY29uZGl0aW9uYWxGaWVsZHM/LmZpZWxkcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmNvbmRpdGlvbmFsRmllbGRzLmZpZWxkc1xyXG4gICAgICAgIC5tYXAoaW5kZXggPT4gdGhpcy5hY3RpdmVGb3JtSW5wdXRzW2luZGV4XSlcclxuICAgICAgICAuZmlsdGVyKGZpZWxkID0+IGZpZWxkKTsgLy8gUmVtb3ZlIHVuZGVmaW5lZCBmaWVsZHNcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gT3RoZXJ3aXNlLCBzaG93IHJlbWFpbmluZyBmaWVsZHMgYWZ0ZXIgaW5pdGlhbCBjb3VudFxyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRm9ybUlucHV0cy5zbGljZShpbml0aWFsQ291bnQpO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IENTUyBjbGFzcyBmb3IgYWRkaXRpb25hbCBmaWVsZHMgdG8gbWFpbnRhaW4gbGF5b3V0XHJcbiAgZ2V0QWRkaXRpb25hbEZpZWxkQ2xhc3MobG9jYWxJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpZWxkc1BlclJvdyA9IHRoaXMuYWN0aXZlRm9ybUxheW91dC5maWVsZHNQZXJSb3cgfHwgMjtcclxuICAgIFxyXG4gICAgaWYgKGZpZWxkc1BlclJvdyA9PT0gMikge1xyXG4gICAgICByZXR1cm4gJ2NvbC02JzsgLy8gQm9vdHN0cmFwLXN0eWxlIDUwJSB3aWR0aCBmb3IgMi1jb2x1bW4gbGF5b3V0XHJcbiAgICB9IGVsc2UgaWYgKGZpZWxkc1BlclJvdyA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gJ2NvbC0xMic7IC8vIEZ1bGwgd2lkdGggZm9yIHNpbmdsZSBjb2x1bW5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgY29sLSR7MTIgLyBmaWVsZHNQZXJSb3d9YDsgLy8gRHluYW1pYyB3aWR0aCBiYXNlZCBvbiBmaWVsZHMgcGVyIHJvd1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaWYgYWxsIHZpc2libGUgZmllbGRzIGFyZSBmaWxsZWQgYW5kIGZvcm0gaXMgdmFsaWRcclxuICBhcmVBbGxWaXNpYmxlRmllbGRzRmlsbGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUZvcm1JbnB1dHMgfHwgdGhpcy5hY3RpdmVGb3JtSW5wdXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgIC8vIEdldCBhbGwgY3VycmVudGx5IHZpc2libGUgZmllbGRzXHJcbiAgICBjb25zdCBpbml0aWFsRmllbGRzID0gdGhpcy5nZXRJbml0aWFsRmllbGRzKCk7XHJcbiAgICBjb25zdCBhbGxWaXNpYmxlRmllbGRzID0gWy4uLmluaXRpYWxGaWVsZHNdO1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiBhbGwgdmlzaWJsZSBmaWVsZHMgaGF2ZSB2YWx1ZXNcclxuICAgIGNvbnN0IGFsbEZpZWxkc0ZpbGxlZCA9IGFsbFZpc2libGVGaWVsZHMuZXZlcnkoZmllbGQgPT4ge1xyXG4gICAgICBjb25zdCBtb2RlbEtleSA9IGZpZWxkLmxhYmVsLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xyXG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5tb2RlbFttb2RlbEtleV07XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIWZpZWxkVmFsdWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgXHJcbiAgICAgIC8vIEZvciBzdHJpbmcgdmFsdWVzLCBjaGVjayBpZiBub3QgZW1wdHkgYWZ0ZXIgdHJpbVxyXG4gICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWUudHJpbSgpICE9PSAnJztcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gRm9yIGFycmF5cyAobXVsdGktc2VsZWN0KSwgY2hlY2sgaWYgbm90IGVtcHR5XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkVmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWUubGVuZ3RoID4gMDtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgY29uc3QgZm9ybVZhbGlkID0gdGhpcy5mb3JtLnZhbGlkO1xyXG5cclxuICAgIHJldHVybiBhbGxGaWVsZHNGaWxsZWQgJiYgZm9ybVZhbGlkO1xyXG4gIH1cclxuICBcclxuICAvLyBHcm91cCBhZGRpdGlvbmFsIGZpZWxkcyBpbnRvIHJvd3MgYmFzZWQgb24gZmllbGRzUGVyUm93XHJcbiAgZ2V0QWRkaXRpb25hbEZpZWxkUm93cygpIHtcclxuICAgIGNvbnN0IGFkZGl0aW9uYWxGaWVsZHMgPSB0aGlzLmdldEFkZGl0aW9uYWxGaWVsZHMoKTtcclxuICAgIGNvbnN0IGZpZWxkc1BlclJvdyA9IHRoaXMuYWN0aXZlRm9ybUxheW91dC5maWVsZHNQZXJSb3cgfHwgMjtcclxuICAgIGNvbnN0IHJvd3M6IEZvcm1GaWVsZENvbmZpZ1tdW10gPSBbXTtcclxuICAgIFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRpdGlvbmFsRmllbGRzLmxlbmd0aDsgaSArPSBmaWVsZHNQZXJSb3cpIHtcclxuICAgICAgcm93cy5wdXNoKGFkZGl0aW9uYWxGaWVsZHMuc2xpY2UoaSwgaSArIGZpZWxkc1BlclJvdykpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gcm93cztcclxuICB9XHJcblxyXG4gIC8vIEdyb3VwIGluaXRpYWwgZmllbGRzIGludG8gcm93cyBiYXNlZCBvbiBmaWVsZHNQZXJSb3dcclxuICBwcm90ZWN0ZWQgaW5pdGlhbEZpZWxkUm93cyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IGluaXRpYWxGaWVsZHMgPSB0aGlzLmdldEluaXRpYWxGaWVsZHMoKTtcclxuICAgIGNvbnN0IGZpZWxkc1BlclJvdyA9IHRoaXMuYWN0aXZlRm9ybUxheW91dC5maWVsZHNQZXJSb3cgfHwgMjtcclxuICAgIGNvbnN0IHJvd3M6IEZvcm1GaWVsZENvbmZpZ1tdW10gPSBbXTtcclxuICAgIFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbml0aWFsRmllbGRzLmxlbmd0aDsgaSArPSBmaWVsZHNQZXJSb3cpIHtcclxuICAgICAgcm93cy5wdXNoKGluaXRpYWxGaWVsZHMuc2xpY2UoaSwgaSArIGZpZWxkc1BlclJvdykpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gcm93cztcclxuICB9KTtcclxuXHJcbiAgLy8gR2V0IGZpZWxkIGluZGV4IGZvciBpbml0aWFsIGZpZWxkIHJvd3NcclxuICBnZXRJbml0aWFsRmllbGRSb3dJbmRleChyb3dJbmRleDogbnVtYmVyLCBmaWVsZEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZmllbGRzUGVyUm93ID0gdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmZpZWxkc1BlclJvdyB8fCAyO1xyXG4gICAgcmV0dXJuIChyb3dJbmRleCAqIGZpZWxkc1BlclJvdykgKyBmaWVsZEluZGV4O1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IGZpZWxkIGluZGV4IGZvciBhZGRpdGlvbmFsIGZpZWxkIHJvd3NcclxuICBnZXRBZGRpdGlvbmFsRmllbGRSb3dJbmRleChyb3dJbmRleDogbnVtYmVyLCBmaWVsZEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZmllbGRzUGVyUm93ID0gdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmZpZWxkc1BlclJvdyB8fCAyO1xyXG4gICAgY29uc3QgaW5pdGlhbENvdW50ID0gdGhpcy5hY3RpdmVGb3JtTGF5b3V0LmluaXRpYWxWaXNpYmxlRmllbGRzIHx8IHRoaXMuYWN0aXZlRm9ybUxheW91dC5maWVsZHNQZXJSb3cgfHwgMjtcclxuICAgIFxyXG4gICAgLy8gSWYgY29uZGl0aW9uYWwgZmllbGRzIGFyZSBzcGVjaWZpZWQsIHVzZSB0aG9zZSBpbmRpY2VzXHJcbiAgICBpZiAodGhpcy5hY3RpdmVGb3JtTGF5b3V0LmNvbmRpdGlvbmFsRmllbGRzPy5maWVsZHMpIHtcclxuICAgICAgY29uc3QgZmxhdEluZGV4ID0gKHJvd0luZGV4ICogZmllbGRzUGVyUm93KSArIGZpZWxkSW5kZXg7XHJcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUZvcm1MYXlvdXQuY29uZGl0aW9uYWxGaWVsZHMuZmllbGRzW2ZsYXRJbmRleF0gfHwgMDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gT3RoZXJ3aXNlLCBvZmZzZXQgYnkgaW5pdGlhbCBjb3VudFxyXG4gICAgcmV0dXJuIGluaXRpYWxDb3VudCArIChyb3dJbmRleCAqIGZpZWxkc1BlclJvdykgKyBmaWVsZEluZGV4O1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGJhbm5lckNvbnRlbnQoKTsgYXMgY29udGVudCkge1xyXG4gIDxkaXYgY2xhc3M9XCJlcnJvci1wYWdlIG1lc3NhZ2UtYmFubmVyLXYyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7IGdhcDogY29udGVudEdhcCB8fCAndmFyKC0tbWVkaXVtLTMycHgsIDMycHgpJyB9XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1ib3R0b20nOiBzcGFjaW5nQmV0d2VlbkltYWdlQW5kRGVzY3JpcHRpb24gPz8gJ3ZhcigtLXNtYWxsLTE2cHgsIDE2cHgpJyB9XCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImNvbnRlbnQubWVzc2FnZUljb25cIiBbYWx0XT1cImNvbnRlbnQudHlwZSArICcgaW1hZ2UnXCJcclxuICAgICAgICAgIFtzdHlsZS4tLW1lc3NhZ2UtaWNvbi1oZWlnaHRdPVwiY29udGVudC5tZXNzYWdlSWNvblNpemU/LmhlaWdodFwiXHJcbiAgICAgICAgICBbc3R5bGUuLS1tZXNzYWdlLWljb24td2lkdGhdPVwiY29udGVudC5tZXNzYWdlSWNvblNpemU/LndpZHRoXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtY2xhc3NcIiBbbmdDbGFzc109XCJ0aXRsZUNsYXNzIHx8ICd0aXRsZS1jbGFzcydcIiBbaW5uZXJIVE1MXT1cImNvbnRlbnQudGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIiBbbmdDbGFzc109XCJkZXNjcmlwdGlvbkNsYXNzIHx8ICdkZXNjcmlwdGlvbidcIiBbaW5uZXJIVE1MXT1cImNvbnRlbnQuZGVzY3JpcHRpb25cIj48L3A+IFxyXG4gICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IG1hcmdpbjogYmFubmVyPy5zcGFjaW5nICsgJ3B4IDBweCcgfVwiPlxyXG4gICAgICAgICAgICA8c2EtbWVzc2FnZS1iYW5uZXIgKm5nSWY9XCIhaXNFbXB0eU9iamVjdChiYW5uZXIpXCIgW3R5cGVdPVwiYmFubmVyPy50eXBlXCIgW2Jhbm5lckljb25dPVwiYmFubmVyPy5iYW5uZXJJY29uXCIgW2J1dHRvbkljb25dPVwiYmFubmVyPy5idXR0b25JY29uXCJcclxuICAgICAgICAgICAgICBbYmFubmVySWNvblNpemVdPVwiYmFubmVyPy5iYW5uZXJJY29uU2l6ZVwiIFtidXR0b25UeXBlXT1cImJhbm5lcj8uYnV0dG9uVHlwZVwiIFtidXR0b25TaXplXT1cImJhbm5lcj8uYnV0dG9uU2l6ZVwiIFtidXR0b25JY29uUG9zaXRpb25dPVwiYmFubmVyPy5idXR0b25JY29uUG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgIFtidXR0b25JY29uU2l6ZV09XCJiYW5uZXI/LmJ1dHRvbkljb25TaXplXCIgW2FjdGlvblRleHRdPVwiYmFubmVyPy5hY3Rpb25UZXh0XCIgPlxyXG4gICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJiYW5uZXI/LnRleHRcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9zYS1tZXNzYWdlLWJhbm5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgIDwhLS0gRm9ybSBpbnB1dHMgc2VjdGlvbiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlRm9ybUlucHV0cz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZHMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkcy1zY3JvbGwtYXJlYVwiPlxyXG4gICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZGlhbG9nLWZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gSW5pdGlhbCBmaWVsZHMgcm93cyAoZHluYW1pYyBjb3VudCBiYXNlZCBvbiBmb3JtTGF5b3V0LmZpZWxkc1BlclJvdykgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIiAqbmdGb3I9XCJsZXQgcm93IG9mIGluaXRpYWxGaWVsZFJvd3MoKTsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtd3JhcHBlclwiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiByb3c7IGxldCBmaWVsZEluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybWx5LWZvcm0gXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZHNdPVwiW2ZpZWxkc1tnZXRJbml0aWFsRmllbGRSb3dJbmRleChyb3dJbmRleCwgZmllbGRJbmRleCldXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cIm9uRm9ybU1vZGVsQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm1seS1mb3JtPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8IS0tIEFkZGl0aW9uYWwgZmllbGRzIHJvd3MgKGNvbmRpdGlvbmFsIGJhc2VkIG9uIGZvcm1MYXlvdXQuY29uZGl0aW9uYWxGaWVsZHMpIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZGl0aW9uYWwtZmllbGRzXCIgKm5nSWY9XCJhcmVBbGxWaXNpYmxlRmllbGRzRmlsbGVkKClcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCIgKm5nRm9yPVwibGV0IHJvdyBvZiBhZGRpdGlvbmFsRmllbGRSb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLXdyYXBwZXJcIiAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygcm93OyBsZXQgZmllbGRJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Zm9ybWx5LWZvcm0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRzXT1cIltmaWVsZHNbZ2V0QWRkaXRpb25hbEZpZWxkUm93SW5kZXgocm93SW5kZXgsIGZpZWxkSW5kZXgpXV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwib25Gb3JtTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRzW2dldEFkZGl0aW9uYWxGaWVsZFJvd0luZGV4KHJvd0luZGV4LCBmaWVsZEluZGV4KV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybWx5LWZvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gQ3VzdG9tIGZvcm0gYnV0dG9uKHMpIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tYnV0dG9uLWNvbnRhaW5lclwiICpuZ0lmPVwiYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8IS0tIFN1cHBvcnQgYm90aCBzaW5nbGUgYnV0dG9uIGFuZCBhcnJheSBvZiBidXR0b25zIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNCdXR0b25BcnJheSgpOyBlbHNlIHNpbmdsZUJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxzYS1idXR0b24gXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGFjdGl2ZUN1c3RvbUZvcm1CdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIFtpZF09XCJidXR0b24uaWRcIlxyXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiYnV0dG9uLnRleHRcIlxyXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiYnV0dG9uLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiYnV0dG9uLnNpemVcIlxyXG4gICAgICAgICAgICAgICAgW3N0YXRlXT1cImJ1dHRvbi5zdGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbSW1hZ2VQYXRoXT1cImJ1dHRvbi5JbWFnZVBhdGhcIlxyXG4gICAgICAgICAgICAgICAgW2ljb25Qb3NpdGlvbl09XCJidXR0b24uaWNvblBvc2l0aW9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbilcIj5cclxuICAgICAgICAgICAgICA8L3NhLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUJ1dHRvbj5cclxuICAgICAgICAgICAgICA8c2EtYnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbi5pZFwiXHJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCJhY3RpdmVDdXN0b21Gb3JtQnV0dG9uLnRleHRcIlxyXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbi50eXBlXCJcclxuICAgICAgICAgICAgICAgIFtzaXplXT1cImFjdGl2ZUN1c3RvbUZvcm1CdXR0b24uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbc3RhdGVdPVwiYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbi5zdGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbSW1hZ2VQYXRoXT1cImFjdGl2ZUN1c3RvbUZvcm1CdXR0b24uSW1hZ2VQYXRoXCJcclxuICAgICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbi5pY29uUG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYWN0aXZlQ3VzdG9tRm9ybUJ1dHRvbilcIj5cclxuICAgICAgICAgICAgICA8L3NhLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgPCEtLSBEaXZpZGVyIHNlY3Rpb24gLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlci1zZWN0aW9uXCIgKm5nSWY9XCJhY3RpdmVEaXZpZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImRpdmlkZXItdGl0bGVcIiAqbmdJZj1cImFjdGl2ZURpdmlkZXJDb25maWcudGl0bGVcIj57eyBhY3RpdmVEaXZpZGVyQ29uZmlnLnRpdGxlIH19PC9oMz5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImRpdmlkZXItc3VidGl0bGVcIiAqbmdJZj1cImFjdGl2ZURpdmlkZXJDb25maWcuc3VidGl0bGUgfHwgYWN0aXZlRGl2aWRlckNvbmZpZy5zaG93U3VidGl0bGVXaGVuRW1wdHlcIj5cclxuICAgICAgICAgICAgICAgIHt7IGFjdGl2ZURpdmlkZXJDb25maWcuc3VidGl0bGUgfHwgJ05vIGl0ZW1zIGFkZGVkIHlldCcgfX1cclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgIDwhLS0gQ2hpcHMgc2VjdGlvbiAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWxpc3RcIiAqbmdJZj1cImFjdGl2ZUNoaXBzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPHNhLWNoaXAgXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiBhY3RpdmVDaGlwc1wiXHJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCJjaGlwLmxhYmVsIHx8IGNoaXAudGV4dCB8fCBjaGlwXCJcclxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIidyZWd1bGFyJ1wiXHJcbiAgICAgICAgICAgICAgICBbc3RhdGVdPVwiJ2RlZmF1bHQnXCJcclxuICAgICAgICAgICAgICAgIFtmaWxsaW5nXT1cIidmaWxsZWQnXCJcclxuICAgICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXHJcbiAgICAgICAgICAgICAgICBbaWNvblBhdGhdPVwiJy4uL2Fzc2V0cy9jbG9zZUJsdWVPdXRsaW5lZC5zdmcnXCJcclxuICAgICAgICAgICAgICAgIChvbkNsaWNrRXZlbnQpPVwiY2hpcC5yZW1vdmFibGUgPyBvbkNoaXBSZW1vdmUoY2hpcCkgOiBudWxsXCI+XHJcbiAgICAgICAgICAgICAgPC9zYS1jaGlwPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgIEBpZihidXR0b25zKXtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgICAgICBAZm9yIChidXR0b24gb2YgYnV0dG9uczsgdHJhY2sgYnV0dG9uLnRleHQpIHtcclxuICAgICAgICAgICAgPHNhLWJ1dHRvbiBcclxuICAgICAgICAgICAgICBbdGV4dF09XCJidXR0b24udGV4dFwiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwiYnV0dG9uLmljb25cIlxyXG4gICAgICAgICAgICAgIFtzaXplXT1cImJ1dHRvbi5zaXplXCJcclxuICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24udHlwZVwiXHJcbiAgICAgICAgICAgICAgW2ljb25Qb3NpdGlvbl09XCJidXR0b24uaWNvblBvc2l0aW9uXCJcclxuICAgICAgICAgICAgICBbYnV0dG9uSWNvblNpemVdPVwiYnV0dG9uLmJ1dHRvbkljb25TaXplXCJcclxuICAgICAgICAgICAgICAob25DbGlja0V2ZW50KT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbc3RhdGVdPVwiIWFyZUFsbFZpc2libGVGaWVsZHNGaWxsZWQoKSA/ICdkaXNhYmxlZCcgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJidXR0b24udGV4dFwiPlxyXG4gICAgICAgICAgICA8L3NhLWJ1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgfSJdfQ==
|