ngx-histaff-alpha 3.4.3 → 3.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/app/interfaces/time-management/IAtShift.mjs +1 -1
- package/esm2022/lib/app/libraries/core-page-edit/core-page-edit.component.mjs +3 -3
- package/esm2022/lib/app/libraries/core-shift-cell/core-shift-cell.component.mjs +59 -35
- package/esm2022/lib/app/libraries/core-shift-sticker/core-shift-sticker.component.mjs +40 -20
- package/esm2022/lib/app/services/work-shift-dnd.service.mjs +26 -1
- package/fesm2022/ngx-histaff-alpha.mjs +120 -52
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/interfaces/time-management/IAtShift.d.ts +3 -1
- package/lib/app/libraries/core-shift-cell/core-shift-cell.component.d.ts +6 -3
- package/lib/app/libraries/core-shift-sticker/core-shift-sticker.component.d.ts +18 -14
- package/lib/app/services/work-shift-dnd.service.d.ts +3 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUF0U2hpZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9pbnRlcmZhY2VzL3RpbWUtbWFuYWdlbWVudC9JQXRTaGlmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUF0U3ltYm9sIH0gZnJvbSBcIi4vSUF0U3ltYm9sXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBdFNoaWZ0IHtcclxuICAgIGlkPzogbnVtYmVyO1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgc3ltYm9sOiBJQXRTeW1ib2w7XHJcbiAgICBob3Vyc1N0YXJ0OiBEYXRlO1xyXG4gICAgaG91cnNTdG9wOiBEYXRlO1xyXG4gICAgYnJlYWtzRnJvbT86IERhdGU7XHJcbiAgICBicmVha3NUbz86IERhdGU7XHJcbiAgICB0aW1lTGF0ZT86IG51bWJlcjtcclxuICAgIHRpbWVFYXJseT86IG51bWJlcjtcclxuICAgIGlzQWN0aXZlPzogYm9vbGVhbjtcclxuICAgIHRpbWVTdGFydD86IERhdGU7XHJcbiAgICB0aW1lU3RvcD86IERhdGU7XHJcbiAgICBtaW5Ib3Vyc1dvcms/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUF0U2hpZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9pbnRlcmZhY2VzL3RpbWUtbWFuYWdlbWVudC9JQXRTaGlmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUF0U3ltYm9sIH0gZnJvbSBcIi4vSUF0U3ltYm9sXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBdFNoaWZ0IHtcclxuICAgIGlkPzogbnVtYmVyO1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgc3ltYm9sOiBJQXRTeW1ib2w7XHJcbiAgICBob3Vyc1N0YXJ0OiBEYXRlO1xyXG4gICAgaG91cnNTdG9wOiBEYXRlO1xyXG4gICAgYnJlYWtzRnJvbT86IERhdGU7XHJcbiAgICBicmVha3NUbz86IERhdGU7XHJcbiAgICB0aW1lTGF0ZT86IG51bWJlcjtcclxuICAgIHRpbWVFYXJseT86IG51bWJlcjtcclxuICAgIGlzQWN0aXZlPzogYm9vbGVhbjtcclxuICAgIHRpbWVTdGFydD86IERhdGU7XHJcbiAgICB0aW1lU3RvcD86IERhdGU7XHJcbiAgICBtaW5Ib3Vyc1dvcms/OiBudW1iZXI7XHJcbiAgICBzaGlmdENlbGxJZD86IHN0cmluZztcclxuICAgIGFkZGVkPzogYm9vbGVhbjtcclxuICAgIGRlbGV0ZWQ/OiBib29sZWFuO1xyXG59Il19
|
|
@@ -427,7 +427,7 @@ export class CorePageEditComponent {
|
|
|
427
427
|
this.onInitialValueStringReady.emit(JSON.stringify(this.form.getRawValue()));
|
|
428
428
|
}
|
|
429
429
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CorePageEditComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.CorePageEditService }, { token: i3.CommonHttpRequestService }, { token: i4.AnimatedTextService }, { token: i5.MultiLanguageService }, { token: i6.CoreFormService }, { token: i7.CorePageListService }, { token: i8.HubConnectionService }, { token: i9.AuthService }, { token: i10.AlertService }, { token: i11.UrlService }, { token: i12.RoutingService }, { token: i13.ResponseService }, { token: i14.AppConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
430
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CorePageEditComponent, isStandalone: true, selector: "core-page-edit", inputs: { stayAfterSubmit: "stayAfterSubmit", width: "width", entityTable: "entityTable", hasIdOfStringType: "hasIdOfStringType", captionCode: "captionCode", leftInputSections: "leftInputSections", leftInputSectionsFlexSize: "leftInputSectionsFlexSize", sections: "sections", normalMode: "normalMode", bottomTemplateRef: "bottomTemplateRef", autoGetByIdOff: "autoGetByIdOff", autoSubmitLogicOff: "autoSubmitLogicOff", autoCancelLogicOff: "autoCancelLogicOff", customFormButtonItems: "customFormButtonItems", mixedMode: "mixedMode", checkError$: "checkError$", showSaveButton: "showSaveButton", disableSaveButton: "disableSaveButton", crud: "crud", entityUniqueIndexs: "entityUniqueIndexs" }, outputs: { submitLogic: "submitLogic", onFormCreated: "onFormCreated", onSubmitSuccess: "onSubmitSuccess", onButtonClick: "onButtonClick", cancelLogic: "cancelLogic", onInitialValueStringReady: "onInitialValueStringReady" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "containerBigger", first: true, predicate: ["containerBigger"], descendants: true }], ngImport: i0, template: "@if (!!normalMode) {\r\n<div #container class=\"core-page-edit-container\">\r\n <div [ngStyle]=\"{ margin: '0px 24px' }\">\r\n <core-page-header [title]=\"captionCode\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n @if (!!sections.length) {\r\n <core-form [formName]=\"'form'\" [submitText]=\"submitText\" [showCaptionButton]=\"showCaptionButton\"\r\n [leftInputSections]=\"leftInputSections\" [leftInputSectionsFlexSize]=\"leftInputSectionsFlexSize\"\r\n [inputSections]=\"sections\" [mode$]=\"mode$\" [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [customFormButtonItems]=\"customFormButtonItems\" [disableSaveButton]=\"disableSaveButton\"\r\n [checkError$]=\"checkError$\" (onFormCreated)=\"onFormCreatedLocal($event)\" (onSubmit)=\"onSubmit()\"\r\n (onSave)=\"onSave($event)\" (buttonClick)=\"buttonClick($event)\" (onCancal)=\"onCancel()\"></core-form>\r\n }\r\n</div>\r\n} @else {\r\n<div class=\"modal-container\" [ngStyle]=\"{\r\n overflowY: 'scroll'\r\n }\">\r\n <div #containerBigger class=\"modal-content\">\r\n <div class=\"custom-header-popup\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"></i>\r\n <div [ngStyle]=\"{ margin: '0px 24px' }\">\r\n <core-page-header [title]=\"captionCode\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n </div>\r\n <div #container class=\"core-page-edit-container not-normal-mode\" [ngStyle]=\"{\r\n overflow: 'visible'\r\n }\">\r\n @if (!!sections.length) {\r\n <core-form [formName]=\"'form'\" [submitText]=\"submitText\" [showCaptionButton]=\"showCaptionButton\"\r\n [leftInputSections]=\"leftInputSections\" [leftInputSectionsFlexSize]=\"leftInputSectionsFlexSize\"\r\n [inputSections]=\"sections\" [mode$]=\"mode$\" [customFormButtonItems]=\"customFormButtonItems\"\r\n [disableSaveButton]=\"disableSaveButton\" [checkError$]=\"checkError$\"\r\n (onFormCreated)=\"onFormCreatedLocal($event)\" (onSubmit)=\"onSubmit()\" (onSave)=\"onSave($event)\"\r\n (onCancal)=\"onCancel()\"></core-form>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n@if (loading) {\r\n<app-fullscreen-modal-loader></app-fullscreen-modal-loader>\r\n}", styles: ["@charset \"UTF-8\";.core-page-edit-container{--width: 50%;background-color:#fff;padding:0,var(--size-layout-block-cell-spacing),var(--size-layout-block-cell-spacing),var(--size-layout-block-cell-spacing);width:var(--width);border-bottom-left-radius:10px;border-bottom-right-radius:10px}@media (max-width: 992px){.core-page-edit-container{width:100%}}.core-page-edit-container>.custom-header-popup{display:flex}.core-page-edit-container>i{display:block;float:right;font-size:24px;cursor:pointer;margin:10px}.core-page-edit-container>caption{display:block;width:100%;color:#464646;font-weight:400}.modal-content{--height: 100%;height:var(--height);border-radius:10px}.modal-content i{display:block;float:right;font-size:24px;cursor:pointer;margin:10px}.modal-content caption{display:block;width:100%;color:#000}.custom-header-popup{background:#fff;border-top-left-radius:10px;border-top-right-radius:10px}.captionText{margin-left:24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i15.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: CoreFormComponent, selector: "core-form", inputs: ["formName", "submitText", "leftInputSections", "leftInputSectionsFlexSize", "inputSections", "mode$", "bottomTemplateRef", "customFormButtonItems", "showCaptionButton", "disableSaveButton", "checkError$"], outputs: ["onFormCreated", "onFormRefCreated", "onSubmit", "onSave", "onCancal", "buttonClick"] }, { kind: "component", type: FullscreenModalLoaderComponent, selector: "app-fullscreen-modal-loader", inputs: ["content"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }] }); }
|
|
430
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CorePageEditComponent, isStandalone: true, selector: "core-page-edit", inputs: { stayAfterSubmit: "stayAfterSubmit", width: "width", entityTable: "entityTable", hasIdOfStringType: "hasIdOfStringType", captionCode: "captionCode", leftInputSections: "leftInputSections", leftInputSectionsFlexSize: "leftInputSectionsFlexSize", sections: "sections", normalMode: "normalMode", bottomTemplateRef: "bottomTemplateRef", autoGetByIdOff: "autoGetByIdOff", autoSubmitLogicOff: "autoSubmitLogicOff", autoCancelLogicOff: "autoCancelLogicOff", customFormButtonItems: "customFormButtonItems", mixedMode: "mixedMode", checkError$: "checkError$", showSaveButton: "showSaveButton", disableSaveButton: "disableSaveButton", crud: "crud", entityUniqueIndexs: "entityUniqueIndexs" }, outputs: { submitLogic: "submitLogic", onFormCreated: "onFormCreated", onSubmitSuccess: "onSubmitSuccess", onButtonClick: "onButtonClick", cancelLogic: "cancelLogic", onInitialValueStringReady: "onInitialValueStringReady" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "containerBigger", first: true, predicate: ["containerBigger"], descendants: true }], ngImport: i0, template: "@if (!!normalMode) {\r\n<div #container class=\"core-page-edit-container\">\r\n <div [ngStyle]=\"{ margin: '0px 24px' }\">\r\n <core-page-header [title]=\"captionCode\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n @if (!!sections.length) {\r\n <core-form [formName]=\"'form'\" [submitText]=\"submitText\" [showCaptionButton]=\"showCaptionButton\"\r\n [leftInputSections]=\"leftInputSections\" [leftInputSectionsFlexSize]=\"leftInputSectionsFlexSize\"\r\n [inputSections]=\"sections\" [mode$]=\"mode$\" [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [customFormButtonItems]=\"customFormButtonItems\" [disableSaveButton]=\"disableSaveButton\"\r\n [checkError$]=\"checkError$\" (onFormCreated)=\"onFormCreatedLocal($event)\" (onSubmit)=\"onSubmit()\"\r\n (onSave)=\"onSave($event)\" (buttonClick)=\"buttonClick($event)\" (onCancal)=\"onCancel()\"></core-form>\r\n }\r\n</div>\r\n} @else {\r\n<div class=\"modal-container\" [ngStyle]=\"{\r\n overflowY: 'scroll'\r\n }\">\r\n <div #containerBigger class=\"modal-content\">\r\n <div class=\"custom-header-popup\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"></i>\r\n <div [ngStyle]=\"{ margin: '0px 24px' }\">\r\n <core-page-header [title]=\"captionCode\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n </div>\r\n <div #container class=\"core-page-edit-container not-normal-mode\" [ngStyle]=\"{\r\n overflow: 'visible'\r\n }\">\r\n @if (!!sections.length) {\r\n <core-form [formName]=\"'form'\" [submitText]=\"submitText\" [showCaptionButton]=\"showCaptionButton\"\r\n [leftInputSections]=\"leftInputSections\" [leftInputSectionsFlexSize]=\"leftInputSectionsFlexSize\"\r\n [inputSections]=\"sections\" [mode$]=\"mode$\" [customFormButtonItems]=\"customFormButtonItems\"\r\n [disableSaveButton]=\"disableSaveButton\" [checkError$]=\"checkError$\"\r\n (onFormCreated)=\"onFormCreatedLocal($event)\" (onSubmit)=\"onSubmit()\" (onSave)=\"onSave($event)\"\r\n (buttonClick)=\"buttonClick($event)\" (onCancal)=\"onCancel()\"></core-form>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n@if (loading) {\r\n<app-fullscreen-modal-loader></app-fullscreen-modal-loader>\r\n}", styles: ["@charset \"UTF-8\";.core-page-edit-container{--width: 50%;background-color:#fff;padding:0,var(--size-layout-block-cell-spacing),var(--size-layout-block-cell-spacing),var(--size-layout-block-cell-spacing);width:var(--width);border-bottom-left-radius:10px;border-bottom-right-radius:10px}@media (max-width: 992px){.core-page-edit-container{width:100%}}.core-page-edit-container>.custom-header-popup{display:flex}.core-page-edit-container>i{display:block;float:right;font-size:24px;cursor:pointer;margin:10px}.core-page-edit-container>caption{display:block;width:100%;color:#464646;font-weight:400}.modal-content{--height: 100%;height:var(--height);border-radius:10px}.modal-content i{display:block;float:right;font-size:24px;cursor:pointer;margin:10px}.modal-content caption{display:block;width:100%;color:#000}.custom-header-popup{background:#fff;border-top-left-radius:10px;border-top-right-radius:10px}.captionText{margin-left:24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i15.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: CoreFormComponent, selector: "core-form", inputs: ["formName", "submitText", "leftInputSections", "leftInputSectionsFlexSize", "inputSections", "mode$", "bottomTemplateRef", "customFormButtonItems", "showCaptionButton", "disableSaveButton", "checkError$"], outputs: ["onFormCreated", "onFormRefCreated", "onSubmit", "onSave", "onCancal", "buttonClick"] }, { kind: "component", type: FullscreenModalLoaderComponent, selector: "app-fullscreen-modal-loader", inputs: ["content"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }] }); }
|
|
431
431
|
}
|
|
432
432
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CorePageEditComponent, decorators: [{
|
|
433
433
|
type: Component,
|
|
@@ -439,7 +439,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
439
439
|
TranslatePipe,
|
|
440
440
|
FullscreenModalLoaderComponent,
|
|
441
441
|
CorePageHeaderComponent
|
|
442
|
-
], template: "@if (!!normalMode) {\r\n<div #container class=\"core-page-edit-container\">\r\n <div [ngStyle]=\"{ margin: '0px 24px' }\">\r\n <core-page-header [title]=\"captionCode\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n @if (!!sections.length) {\r\n <core-form [formName]=\"'form'\" [submitText]=\"submitText\" [showCaptionButton]=\"showCaptionButton\"\r\n [leftInputSections]=\"leftInputSections\" [leftInputSectionsFlexSize]=\"leftInputSectionsFlexSize\"\r\n [inputSections]=\"sections\" [mode$]=\"mode$\" [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [customFormButtonItems]=\"customFormButtonItems\" [disableSaveButton]=\"disableSaveButton\"\r\n [checkError$]=\"checkError$\" (onFormCreated)=\"onFormCreatedLocal($event)\" (onSubmit)=\"onSubmit()\"\r\n (onSave)=\"onSave($event)\" (buttonClick)=\"buttonClick($event)\" (onCancal)=\"onCancel()\"></core-form>\r\n }\r\n</div>\r\n} @else {\r\n<div class=\"modal-container\" [ngStyle]=\"{\r\n overflowY: 'scroll'\r\n }\">\r\n <div #containerBigger class=\"modal-content\">\r\n <div class=\"custom-header-popup\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"></i>\r\n <div [ngStyle]=\"{ margin: '0px 24px' }\">\r\n <core-page-header [title]=\"captionCode\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n </div>\r\n <div #container class=\"core-page-edit-container not-normal-mode\" [ngStyle]=\"{\r\n overflow: 'visible'\r\n }\">\r\n @if (!!sections.length) {\r\n <core-form [formName]=\"'form'\" [submitText]=\"submitText\" [showCaptionButton]=\"showCaptionButton\"\r\n [leftInputSections]=\"leftInputSections\" [leftInputSectionsFlexSize]=\"leftInputSectionsFlexSize\"\r\n [inputSections]=\"sections\" [mode$]=\"mode$\" [customFormButtonItems]=\"customFormButtonItems\"\r\n [disableSaveButton]=\"disableSaveButton\" [checkError$]=\"checkError$\"\r\n (onFormCreated)=\"onFormCreatedLocal($event)\" (onSubmit)=\"onSubmit()\" (onSave)=\"onSave($event)\"\r\n (onCancal)=\"onCancel()\"></core-form>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n@if (loading) {\r\n<app-fullscreen-modal-loader></app-fullscreen-modal-loader>\r\n}", styles: ["@charset \"UTF-8\";.core-page-edit-container{--width: 50%;background-color:#fff;padding:0,var(--size-layout-block-cell-spacing),var(--size-layout-block-cell-spacing),var(--size-layout-block-cell-spacing);width:var(--width);border-bottom-left-radius:10px;border-bottom-right-radius:10px}@media (max-width: 992px){.core-page-edit-container{width:100%}}.core-page-edit-container>.custom-header-popup{display:flex}.core-page-edit-container>i{display:block;float:right;font-size:24px;cursor:pointer;margin:10px}.core-page-edit-container>caption{display:block;width:100%;color:#464646;font-weight:400}.modal-content{--height: 100%;height:var(--height);border-radius:10px}.modal-content i{display:block;float:right;font-size:24px;cursor:pointer;margin:10px}.modal-content caption{display:block;width:100%;color:#000}.custom-header-popup{background:#fff;border-top-left-radius:10px;border-top-right-radius:10px}.captionText{margin-left:24px}\n"] }]
|
|
442
|
+
], template: "@if (!!normalMode) {\r\n<div #container class=\"core-page-edit-container\">\r\n <div [ngStyle]=\"{ margin: '0px 24px' }\">\r\n <core-page-header [title]=\"captionCode\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n @if (!!sections.length) {\r\n <core-form [formName]=\"'form'\" [submitText]=\"submitText\" [showCaptionButton]=\"showCaptionButton\"\r\n [leftInputSections]=\"leftInputSections\" [leftInputSectionsFlexSize]=\"leftInputSectionsFlexSize\"\r\n [inputSections]=\"sections\" [mode$]=\"mode$\" [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [customFormButtonItems]=\"customFormButtonItems\" [disableSaveButton]=\"disableSaveButton\"\r\n [checkError$]=\"checkError$\" (onFormCreated)=\"onFormCreatedLocal($event)\" (onSubmit)=\"onSubmit()\"\r\n (onSave)=\"onSave($event)\" (buttonClick)=\"buttonClick($event)\" (onCancal)=\"onCancel()\"></core-form>\r\n }\r\n</div>\r\n} @else {\r\n<div class=\"modal-container\" [ngStyle]=\"{\r\n overflowY: 'scroll'\r\n }\">\r\n <div #containerBigger class=\"modal-content\">\r\n <div class=\"custom-header-popup\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"></i>\r\n <div [ngStyle]=\"{ margin: '0px 24px' }\">\r\n <core-page-header [title]=\"captionCode\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n </div>\r\n <div #container class=\"core-page-edit-container not-normal-mode\" [ngStyle]=\"{\r\n overflow: 'visible'\r\n }\">\r\n @if (!!sections.length) {\r\n <core-form [formName]=\"'form'\" [submitText]=\"submitText\" [showCaptionButton]=\"showCaptionButton\"\r\n [leftInputSections]=\"leftInputSections\" [leftInputSectionsFlexSize]=\"leftInputSectionsFlexSize\"\r\n [inputSections]=\"sections\" [mode$]=\"mode$\" [customFormButtonItems]=\"customFormButtonItems\"\r\n [disableSaveButton]=\"disableSaveButton\" [checkError$]=\"checkError$\"\r\n (onFormCreated)=\"onFormCreatedLocal($event)\" (onSubmit)=\"onSubmit()\" (onSave)=\"onSave($event)\"\r\n (buttonClick)=\"buttonClick($event)\" (onCancal)=\"onCancel()\"></core-form>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n@if (loading) {\r\n<app-fullscreen-modal-loader></app-fullscreen-modal-loader>\r\n}", styles: ["@charset \"UTF-8\";.core-page-edit-container{--width: 50%;background-color:#fff;padding:0,var(--size-layout-block-cell-spacing),var(--size-layout-block-cell-spacing),var(--size-layout-block-cell-spacing);width:var(--width);border-bottom-left-radius:10px;border-bottom-right-radius:10px}@media (max-width: 992px){.core-page-edit-container{width:100%}}.core-page-edit-container>.custom-header-popup{display:flex}.core-page-edit-container>i{display:block;float:right;font-size:24px;cursor:pointer;margin:10px}.core-page-edit-container>caption{display:block;width:100%;color:#464646;font-weight:400}.modal-content{--height: 100%;height:var(--height);border-radius:10px}.modal-content i{display:block;float:right;font-size:24px;cursor:pointer;margin:10px}.modal-content caption{display:block;width:100%;color:#000}.custom-header-popup{background:#fff;border-top-left-radius:10px;border-top-right-radius:10px}.captionText{margin-left:24px}\n"] }]
|
|
443
443
|
}], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.CorePageEditService }, { type: i3.CommonHttpRequestService }, { type: i4.AnimatedTextService }, { type: i5.MultiLanguageService }, { type: i6.CoreFormService }, { type: i7.CorePageListService }, { type: i8.HubConnectionService }, { type: i9.AuthService }, { type: i10.AlertService }, { type: i11.UrlService }, { type: i12.RoutingService }, { type: i13.ResponseService }, { type: i14.AppConfigService }], propDecorators: { stayAfterSubmit: [{
|
|
444
444
|
type: Input
|
|
445
445
|
}], width: [{
|
|
@@ -499,4 +499,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
499
499
|
type: ViewChild,
|
|
500
500
|
args: ['containerBigger']
|
|
501
501
|
}] } });
|
|
502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS1lZGl0L2NvcmUtcGFnZS1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2UtZWRpdC9jb3JlLXBhZ2UtZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBeUIsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxHQUE0QixNQUFNLGVBQWUsQ0FBQztBQU85SSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUlyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQWlDLE1BQU0sNENBQTRDLENBQUM7QUFDOUcsT0FBTyxFQUFhLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUTFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFeEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8s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O3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYiw4QkFBOEI7d0JBQzlCLHVCQUF1QjtxQkFDeEI7c2dCQUtRLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFJRSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFFaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNRLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgaXNEZXZNb2RlLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IENvcmVQYWdlRWRpdFNlcnZpY2UgfSBmcm9tICcuL2NvcmUtcGFnZS1lZGl0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbmltYXRlZFRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYW5pbWF0ZWQtdGV4dC9hbmltYXRlZC10ZXh0LnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS1mb3JtL2NvcmUtZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNvcmVGb3JtU2VjdGlvbiwgfSBmcm9tICcuLi9jb3JlLWZvcm0vY29yZS1mb3JtL2VudW0taW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29tcG9uZW50LCBJRHluYW1pY0Zvcm1FbWl0T25Gb3JtQ3JlYXRlZCB9IGZyb20gJy4uL2NvcmUtZm9ybS9jb3JlLWZvcm0vY29yZS1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENvbW1vbkh0dHBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi1odHRwLXJlcXVlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEh1YkNvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHViLWNvbm5lY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXJsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VybC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJSHViQ29ubmVjdGlvbkFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JSHViQ29ubmVjdGlvbkFjdGl2aXR5JztcclxuaW1wb3J0IHsgRW51bVNpZ25hbFJUeXBlIH0gZnJvbSAnLi4vLi4vZW51bS9FbnVtU2lnbmFsUlR5cGUnO1xyXG5pbXBvcnQgeyBJRm9ybWF0ZWRSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZvcm1hdGVkUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBhbGVydE9wdGlvbnMsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9ucyc7XHJcbmltcG9ydCB7IElTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0JztcclxuaW1wb3J0IHsgRW51bUZvcm1CYXNlQ29udG9sVHlwZSB9IGZyb20gJy4uLy4uL2VudW0vRW51bUZvcm1CYXNlQ29udG9sVHlwZSc7XHJcbmltcG9ydCB7IEVudW1Db3JlUGFnZUVkaXRNb2RlIH0gZnJvbSAnLi9FbnVtQ29yZVBhZ2VFZGl0TW9kZSc7XHJcbmltcG9ydCB7IElDb3JlUGFnZUVkaXRDUlVEIH0gZnJvbSAnLi9JQ29yZVBhZ2VFZGl0Q1JVRCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBGdWxsc2NyZWVuTW9kYWxMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9mdWxsc2NyZWVuLW1vZGFsLWxvYWRlci9mdWxsc2NyZWVuLW1vZGFsLWxvYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlc3BvbnNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3BvbnNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25WTlMgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0lDb3JlQnV0dG9uVk5TJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1wYWdlLWVkaXQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZUZvcm1Db21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgRnVsbHNjcmVlbk1vZGFsTG9hZGVyQ29tcG9uZW50LFxyXG4gICAgQ29yZVBhZ2VIZWFkZXJDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXBhZ2UtZWRpdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS1wYWdlLWVkaXQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVQYWdlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgc3RheUFmdGVyU3VibWl0ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSB3aWR0aCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBlbnRpdHlUYWJsZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBoYXNJZE9mU3RyaW5nVHlwZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgY2FwdGlvbkNvZGUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGVmdElucHV0U2VjdGlvbnMhOiBJQ29yZUZvcm1TZWN0aW9uW107XHJcbiAgQElucHV0KCkgbGVmdElucHV0U2VjdGlvbnNGbGV4U2l6ZSE6IG51bWJlcjtcclxuICBASW5wdXQoKSBzZWN0aW9ucyE6IElDb3JlRm9ybVNlY3Rpb25bXTtcclxuICBASW5wdXQoKSBub3JtYWxNb2RlITogYm9vbGVhbjsgLy8gdGhpcyBhbGxvd3MgdG8gb3BlbiB0aGUgZWRpdCBmb3JtIGFzIHVzdWFsIG1vZGVcclxuICBASW5wdXQoKSBib3R0b21UZW1wbGF0ZVJlZiE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgYXV0b0dldEJ5SWRPZmYhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGF1dG9TdWJtaXRMb2dpY09mZiE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgYXV0b0NhbmNlbExvZ2ljT2ZmITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjdXN0b21Gb3JtQnV0dG9uSXRlbXMhOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXTtcclxuICBASW5wdXQoKSBtaXhlZE1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGNoZWNrRXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgQElucHV0KCkgc2hvd1NhdmVCdXR0b24hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVTYXZlQnV0dG9uITogYm9vbGVhbjtcclxuXHJcblxyXG4gIEBPdXRwdXQoKSBzdWJtaXRMb2dpYyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Gb3JtQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TdWJtaXRTdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjYW5jZWxMb2dpYyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuXHJcbiAgQElucHV0KCkgY3J1ZCE6IElDb3JlUGFnZUVkaXRDUlVEO1xyXG4gIEBJbnB1dCgpIGVudGl0eVVuaXF1ZUluZGV4czogc3RyaW5nW11bXSA9XHJcbiAgICBbXTsgLyogRm9yIGV4OiBbWydpZCddLCBbJ3Byb3ZpbmNlSWQnLCAnZGlzdHJpY0NvZGUnXV0gIGV0Yy4uLiAqL1xyXG4gIEBPdXRwdXQoKSBvbkluaXRpYWxWYWx1ZVN0cmluZ1JlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyQmlnZ2VyJykgY29udGFpbmVyQmlnZ2VyITogRWxlbWVudFJlZjtcclxuXHJcbiAgc2VjdGlvbnMkITogQmVoYXZpb3JTdWJqZWN0PElDb3JlRm9ybVNlY3Rpb25bXT47XHJcbiAgbW9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVudW1Db3JlUGFnZUVkaXRNb2RlPihcclxuICAgIEVudW1Db3JlUGFnZUVkaXRNb2RlLkNSRUFURVxyXG4gICk7XHJcblxyXG4gIGN1cnJlbnRWYWx1ZTogYW55O1xyXG4gIGluaXRpYWxWYWx1ZSE6IHN0cmluZztcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBmcm9tVXJsITogc3RyaW5nO1xyXG4gIGxpc3RJbnN0YW5jZSE6IG51bWJlcjtcclxuICBsb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgbGFuZyE6IHN0cmluZztcclxuXHJcbiAgc3VibWl0VGV4dCE6IEVudW1UcmFuc2xhdGVLZXk7XHJcblxyXG4gIHNob3dDYXB0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgc2Nyb2xsITogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlRWRpdFNlcnZpY2U6IENvcmVQYWdlRWRpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbW1vbkh0dHBSZXF1ZXN0U2VydmljZTogQ29tbW9uSHR0cFJlcXVlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbmltYXRlZFRleHRTZXJ2aWNlOiBBbmltYXRlZFRleHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlRm9ybVNlcnZpY2U6IENvcmVGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZVBhZ2VMaXN0U2VydmljZTogQ29yZVBhZ2VMaXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgaHViQ29ubmVjdGlvblNlcnZpY2U6IEh1YkNvbm5lY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1cmxTZXJ2aWNlOiBVcmxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3BvbnNlU2VydmljZTogUmVzcG9uc2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmZyb21VcmwgPSB0aGlzLmNvcmVQYWdlRWRpdFNlcnZpY2UuZnJvbVVybDtcclxuICAgIHRoaXMubGlzdEluc3RhbmNlID0gTnVtYmVyKFxyXG4gICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnbGlzdEluc3RhbmNlJykhXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZW5kU2lnbmFsKGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuaHViQ29ubmVjdGlvblNlcnZpY2UuaHViQ29ubmVjdGlvbiQudmFsdWU7XHJcbiAgICBpZiAoISFjb25uZWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IElIdWJDb25uZWN0aW9uQWN0aXZpdHkgPSB7XHJcbiAgICAgICAgc2lkOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy5pZCEsXHJcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LmZ1bGxOYW1lISxcclxuICAgICAgICBhdmF0YXI6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LmF2YXRhciEsXHJcbiAgICAgICAgc2lnbmFsVHlwZTogRW51bVNpZ25hbFJUeXBlLkVOVElUWV9DSEFOR0VELFxyXG4gICAgICAgIG1lc3NhZ2U6IGAke3RoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWVcclxuICAgICAgICAgID8udXNlck5hbWUhfSBoYXMgY2hhbmdlZCBlbnRpdHkgJHt0aGlzLmVudGl0eVRhYmxlfWAsXHJcbiAgICAgICAgbG9naW5UaW1lOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy5sb2dpblRpbWUhLFxyXG4gICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbm5lY3Rpb24uaW52b2tlKCdTZW5kTWVzc2FnZScsIG1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zZWN0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDb3JlRm9ybVNlY3Rpb25bXT4odGhpcy5zZWN0aW9ucyk7XHJcblxyXG4gICAgaWYgKCEhIXRoaXMuZW50aXR5VGFibGUpIHtcclxuICAgICAgYWxlcnQoXHJcbiAgICAgICAgJ1Byb3BlcnR5IGVudGl0eVRhYmxlIChuYW1lKSBpcyByZXF1aXJlZCBmb3IgY29tcG9uZW50ICcgK1xyXG4gICAgICAgIHRoaXMuY2FwdGlvbkNvZGVcclxuICAgICAgKTtcclxuICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAnUHJvcGVydHkgZW50aXR5VGFibGUgKG5hbWUpIGlzIHJlcXVpcmVkIGZvciBjb21wb25lbnQgJyArXHJcbiAgICAgICAgdGhpcy5jYXB0aW9uQ29kZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY29udGFpbmVyKVxyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdpZHRoJywgJzEwMCUnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghIXRoaXMud2lkdGgpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICAgJy0td2lkdGgnLFxyXG4gICAgICAgICAgdGhpcy53aWR0aCArICdweCdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udGFpbmVyQmlnZ2VyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgICAnOTUlJ1xyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodFxyXG4gICAgfSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghISF0aGlzLm1peGVkTW9kZSkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZVwiLCB4KVxyXG5cclxuICAgICAgICAgICAgbGV0IGlkOiBzdHJpbmcgPSAnMCc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0lkT2ZTdHJpbmdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlkID0gYXRvYih4WydpZCddKTtcclxuICAgICAgICAgICAgICB9IGNhdGNoIHsgcmV0dXJuIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWQgPSBOdW1iZXIoYXRvYih4WydpZCddKSkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9IGNhdGNoIHsgcmV0dXJuIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlkICE9PSAnMCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vZGUkLm5leHQoRW51bUNvcmVQYWdlRWRpdE1vZGUuVVBEQVRFKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXRUZXh0ID0gRW51bVRyYW5zbGF0ZUtleS5VSV9FRElUX0ZPUk1fQlVUVE9OX1NBVkU7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghISF0aGlzLmF1dG9HZXRCeUlkT2ZmKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29yZVBhZ2VFZGl0U2VydmljZS5nZXRCeUlkKGlkLCB0aGlzLmNydWQucikuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoYm9keS5zdGF0dXNDb2RlID0gMjAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLyogI3JlZ2lvbiBFeGNsdWRlIHNlY3Rpb25zIHdpdGggZmxhZyBhZGRNb2RlT25seT10cnVlICovXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoISFib2R5LmlubmVyQm9keS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgcmVsZXZhbnQgY29udHJvbHMgZnJvbSBmb3JtIGdyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZE1vZGVPbmx5U2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoeCkgPT4gISF4LmFkZE1vZGVPbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1vZGVPbmx5U2VjdGlvbnMubWFwKChhZGRNb2RlT25seVNlY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNb2RlT25seVNlY3Rpb24ucm93cy5tYXAoKGFkZE1vZGVPbmx5Um93KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNb2RlT25seVJvdy5tYXAoKGFkZE1vZGVPbmx5Q29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucmVtb3ZlQ29udHJvbChhZGRNb2RlT25seUNvbnRyb2wuZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHJlbGV2YW50IGNvbnRyb2xzIGZyb20gZm9ybSBzZWN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdTZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnMuZmlsdGVyKCh4KSA9PiAhISF4LmFkZE1vZGVPbmx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9ucyA9IG5ld1NlY3Rpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zJC5uZXh0KHRoaXMuc2VjdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgLyogI2VuZHJlZ2lvbiBFeGNsdWRlIHNlY3Rpb25zIHdpdGggZmxhZyBhZGRNb2RlT25seT10cnVlICovXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgLyogI3JlZ2lvbjogQXNzaWduIHZhbHVlIHRvIGF0dGFjaG1lbnQgZmllbGRzIHdoZW4gY29udHJvbFR5cGUgPSBBVFRBQ0hNRU5UICovXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnJvd3MubWFwKChyb3cpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubWFwKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5jb250cm9sVHlwZSA9PT0gRW51bUZvcm1CYXNlQ29udG9sVHlwZS5BVFRBQ0hNRU5UKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wudmFsdWVUb1Nob3cgPSBib2R5LmlubmVyQm9keVtjb250cm9sLmFzc2lnblRvIV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvKiAjZW5kcmVnaW9uOiBBc3NpZ24gdmFsdWUgdG8gYmFzaWMgZmllbGRzIHdoZW4gY29udHJvbFR5cGUgPSBBVFRBQ0hNRU5UICovXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgLyogI3JlZ2lvbjogVXNpbmcgUGF0Y2hWYWx1ZSBpbnN0ZWFkIG9mIHNldFZhbHVlICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JtcyBvZnRlbiBoYXZlIGV4dHJhIGhlbHBlciBmaWVsZHNcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aHVzLCBpZiB3ZSB1c2Ugc2V0VmFsdWUgbWV0aG9kLCB0aGUgaGVscGVyIGZpZWxkcyB3aWxsIGJlIGxvc3Q6XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmZvcm0uc2V0VmFsdWUoYm9keS5pbm5lckJvZHkpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc28sIHdlIHVzZSBwYXRjaFZhbHVlIG1ldGhvZCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGJvZHkuaW5uZXJCb2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5jdXJyZW50VmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24ucm93cy5tYXAoKHJvdykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5tYXAoKGNvbnRyb2wpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Gb3JtQmFzZUNvbnRvbFR5cGUuU0VFS0VSLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Gb3JtQmFzZUNvbnRvbFR5cGUuRFJPUERPV04sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bUZvcm1CYXNlQ29udG9sVHlwZS5DSEVDS0xJU1QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoY29udHJvbC5jb250cm9sVHlwZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF0aGlzLmN1cnJlbnRWYWx1ZVtjb250cm9sLmZpZWxkXSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgISEhY29udHJvbC5nZXRCeUlkQXBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRyb2wuY29udHJvbFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtRm9ybUJhc2VDb250b2xUeXBlLlNFRUtFUjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2wubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgZ2V0QnlJZEFwaSBub3QgcHJvdmlkZWQgZm9yICcke2NvbnRyb2wuZmllbGR9J2AsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUZvcm1CYXNlQ29udG9sVHlwZS5EUk9QRE9XTjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEhY29udHJvbC5kcm9wZG93bk9wdGlvbnMkPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYGdldEJ5SWRBcGkgbm90IHByb3ZpZGVkIGZvciAnJHtjb250cm9sLmZpZWxkfSdgLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUZvcm1CYXNlQ29udG9sVHlwZS5DSEVDS0xJU1Q6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhIWNvbnRyb2wuY2hlY2tsaXN0T3B0aW9ucyQ/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgZ2V0QnlJZEFwaSBub3QgcHJvdmlkZWQgZm9yICcke2NvbnRyb2wuZmllbGR9J2AsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgZ2V0QnlJZEFwaSBub3QgcHJvdmlkZWQgZm9yICcke2NvbnRyb2wuZmllbGR9J2AsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25IdHRwUmVxdWVzdFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1ha2VHZXRSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRCeUlkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmdldEJ5SWRBcGkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA/aWQ9JHt0aGlzLmN1cnJlbnRWYWx1ZVtjb250cm9sLmZpZWxkXX1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZm9ybSBnZXRCeUlkIHJlc3VsdDogXCIsIHRoaXMuY3VycmVudFZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZ2V0QnlJZE9iamVjdCQ/Lm5leHQoYm9keS5pbm5lckJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5nZXRCeUlkT2JqZWN0JD8ubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmNvbnRyb2xUeXBlID09PSBFbnVtRm9ybUJhc2VDb250b2xUeXBlLlNFRUtFUiAmJiBjb250cm9sLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLm9iamVjdExpc3QkPy5uZXh0KGJvZHkuaW5uZXJCb2R5W2NvbnRyb2wuZ2V0T2JqZWN0TGlzdEZyb20hXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9ucyQubmV4dCh0aGlzLnNlY3Rpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvKiAjZW5kcmVnaW9uOiBVc2luZyBQYXRjaFZhbHVlIGluc3RlYWQgb2Ygc2V0VmFsdWUgKi9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGluaXRGb3JtVmFsdWVTdHJpbmcgdG8gdGhlIGNhbGxlclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Jbml0aWFsVmFsdWVTdHJpbmdSZWFkeS5lbWl0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubW9kZSQubmV4dChFbnVtQ29yZVBhZ2VFZGl0TW9kZS5DUkVBVEUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3VibWl0VGV4dCA9IEVudW1UcmFuc2xhdGVLZXkuVUlfRURJVF9GT1JNX0JVVFRPTl9BREQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICAgIClcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVSZWxvYWRGbGFnRm9yVGhlQ2FsbGVyKGlkOiBudW1iZXIpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBpbnN0YW5jZXNGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMubGlzdEluc3RhbmNlXHJcbiAgICApO1xyXG4gICAgaWYgKCEhaW5zdGFuY2VzRmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc0ZpbHRlclswXTtcclxuICAgICAgaW5zdGFuY2UuaWQkLm5leHQoaWQpO1xyXG4gICAgICAvL2lmICghISF0aGlzLm5vcm1hbE1vZGUpIGluc3RhbmNlLnJlbG9hZEZsYWckPy5uZXh0KCFpbnN0YW5jZS5yZWxvYWRGbGFnJC52YWx1ZSk7XHJcblxyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKGBDb3JlUGFnZUxpc3QgaW5zdGFuY2UgbnVtYmVyICR7dGhpcy5saXN0SW5zdGFuY2V9IGN1cnJlbnQgaWQgaXM6ICR7aW5zdGFuY2UuaWQkLnZhbHVlfWAsIGFsZXJ0T3B0aW9ucylcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oYENvcmVQYWdlTGlzdCBpbnN0YW5jZXMgZG8gbm90IGluY2x1ZGUgbnVtYmVyICR7dGhpcy5saXN0SW5zdGFuY2V9YCwgYWxlcnRPcHRpb25zKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk5vdE9rMjAwUmVzcG9uc2UoeDogb2JqZWN0KTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiTm8gcmVzcG9uc2UgY29udGVudC4gSXQgd2FzIHBvc3NpYmx5IGEgQ09SUyBlcnJvci5cIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy90aGlzLmFsZXJ0U2VydmljZS5lcnJvcihKU09OLnN0cmluZ2lmeSh4LCBudWxsLCAyKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCk6IHZvaWQge1xyXG5cclxuICAgIC8qIElGIGlkIGlzIGZhbHN5ID0+IENSRUFULCBvdGhlcndpc2UgVVBEQVRFICovXHJcblxyXG4gICAgLyogRk9SIENPTlRST0wgT0YgVFlQRSBHUklEQlVGRkVSLCBTRVQgRVZFUlkgaWQgVE8gTlVMTCAqL1xyXG4gICAgdGhpcy5zZWN0aW9ucy5tYXAoc2VjdGlvbiA9PiB7XHJcbiAgICAgIHNlY3Rpb24ucm93cy5tYXAocm93ID0+IHtcclxuICAgICAgICByb3cubWFwKGNvbnRyb2wgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coY29udHJvbC5jb250cm9sVHlwZSlcclxuICAgICAgICAgIGlmIChjb250cm9sLmNvbnRyb2xUeXBlID09PSBFbnVtRm9ybUJhc2VDb250b2xUeXBlLkdSSURCVUZGRVIpIHtcclxuICAgICAgICAgICAgY29uc3QgYWJzdHJhY3RDb250cm9sID0gdGhpcy5mb3JtLmdldChjb250cm9sLmZpZWxkKT8udmFsdWU7XHJcbiAgICAgICAgICAgIC8vIFRPIERPIDE3LzA4LzIwMjMgPT09PT09PT09PT1cclxuICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sPy52YWx1ZT8ubWFwKCh4OiBhbnkpID0+IHguaWQgPSBudWxsKTtcclxuICAgICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG5cclxuICAgIGlmICghIXRoaXMubWl4ZWRNb2RlKSB7XHJcbiAgICAgIHRoaXMuc3VibWl0TG9naWMuZW1pdChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtb2RlOiB0aGlzLmZvcm0uZ2V0KCdlZGl0TW9kZScpPy52YWx1ZSxcclxuICAgICAgICAgIGZvcm1WYWx1ZTogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKClcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISF0aGlzLmF1dG9TdWJtaXRMb2dpY09mZikge1xyXG4gICAgICAvLyBETyB5b3VyIGxvZ2ljIGhlcmVcclxuICAgICAgdGhpcy5zdWJtaXRMb2dpYy5lbWl0KEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICghISF0aGlzLmZvcm0uZ2V0KCdpZCcpIS52YWx1ZSkge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3Qgc3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3Q6IElTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCA9IHtcclxuICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSB8fCAnVU5ERUZJTkVEJyxcclxuICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURSxcclxuICAgICAgICBiZWZvcmU6IEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudFZhbHVlKSA/PyAnXCJcIicsXHJcbiAgICAgICAgYWZ0ZXI6IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKSxcclxuICAgICAgICB1c2VybmFtZTogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8udXNlck5hbWUhXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYW5pbWF0ZWRUZXh0U2VydmljZS50ZXh0JC5uZXh0KFxyXG4gICAgICAgIHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuVUlfRElBTE9HX0FERElOR19QTEVBU0VfV0FJVClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuY29tbW9uSHR0cFJlcXVlc3RTZXJ2aWNlXHJcbiAgICAgICAgLm1ha2VQb3N0UmVxdWVzdChcclxuICAgICAgICAgICdjcmVhdGUgJyArIHRoaXMuZW50aXR5VGFibGUsXHJcbiAgICAgICAgICB0aGlzLmNydWQuYyEsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCxcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcbiAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kU2lnbmFsKGJvZHkuaW5uZXJCb2R5KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMub25TdWJtaXRTdWNjZXNzLmVtaXQodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMub25Jbml0aWFsVmFsdWVTdHJpbmdSZWFkeS5lbWl0KFxyXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICBUcmFuc2ZlciBuZXdseSBjcmVhdGVkIHJlY29yZCBpZFxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVsb2FkRmxhZ0ZvclRoZUNhbGxlcihib2R5LmlubmVyQm9keS5pZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyAvKiBleHBlcmltZW50Ki8gcmVwbGFjZVVybDogdHJ1ZSwgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgc3RhdGU6IHsgaWQ6IGJvZHkuaW5uZXJCb2R5LmlkLCBpbnN0YW5jZU51bWJlcjogdGhpcy5saXN0SW5zdGFuY2UgfSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vbk5vdE9rMjAwUmVzcG9uc2UoeCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3Qgc3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3Q6IElTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCA9IHtcclxuICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSB8fCAnVU5ERUZJTkVEJyxcclxuICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUsXHJcbiAgICAgICAgYmVmb3JlOiBKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnRWYWx1ZSkgPz8gJ1wiXCInLFxyXG4gICAgICAgIGFmdGVyOiBKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSksXHJcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LnVzZXJOYW1lIVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBhMSA9IHRoaXMuY29yZUZvcm1TZXJ2aWNlLmdldEFsbEZvcm1CYXNlQ29udHJvbE5hbWVzKHRoaXMubGVmdElucHV0U2VjdGlvbnM/LmZpbHRlcih4ID0+ICF4LmhpZGRlbikpO1xyXG4gICAgICBjb25zdCBhMiA9IHRoaXMuY29yZUZvcm1TZXJ2aWNlLmdldEFsbEZvcm1CYXNlQ29udHJvbE5hbWVzKHRoaXMuc2VjdGlvbnM/LmZpbHRlcih4ID0+ICF4LmhpZGRlbikpO1xyXG4gICAgICBjb25zdCBhY3R1YWxGb3JtRGVjbGFyZWRGaWVsZHMgPSBbLi4uYTEsIC4uLmEyXTtcclxuXHJcbiAgICAgIHRoaXMuYW5pbWF0ZWRUZXh0U2VydmljZS50ZXh0JC5uZXh0KFxyXG4gICAgICAgIHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuVUlfRElBTE9HX1VQREFUSU5HX1BMRUFTRV9XQUlUKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNvbW1vbkh0dHBSZXF1ZXN0U2VydmljZVxyXG4gICAgICAgIC5tYWtlUG9zdFJlcXVlc3QoXHJcbiAgICAgICAgICAndXBkYXRlICcgKyB0aGlzLmVudGl0eVRhYmxlLFxyXG4gICAgICAgICAgdGhpcy5jcnVkLnUsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCxcclxuICAgICAgICAgICAgYWN0dWFsRm9ybURlY2xhcmVkRmllbGRzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFNpZ25hbChib2R5LmlubmVyQm9keSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLm9uU3VibWl0U3VjY2Vzcy5lbWl0KHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLm9uSW5pdGlhbFZhbHVlU3RyaW5nUmVhZHkuZW1pdChcclxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICBUcmFuc2ZlciBjdXJyZW50IHJlY29yZCBpZFxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVsb2FkRmxhZ0ZvclRoZUNhbGxlcihib2R5LmlubmVyQm9keS5pZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYXBwQ29uZmlnU2VydmljZS5BUFBfVFlQRSA9PT0gXCJNT0JJTEVcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyAvKiBleHBlcmltZW50Ki8gcmVwbGFjZVVybDogdHJ1ZSwgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgc3RhdGU6IHsgaWQ6IGJvZHkuaW5uZXJCb2R5LmlkLCBpbnN0YW5jZU51bWJlcjogdGhpcy5saXN0SW5zdGFuY2UgfSB9KTsgIFxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBDb25maWdTZXJ2aWNlLkFQUF9UWVBFID09PSBcIldFQkFQUFwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIHN0YXRlOiB7IGlkOiBib2R5LmlubmVyQm9keS5pZCwgaW5zdGFuY2VOdW1iZXI6IHRoaXMubGlzdEluc3RhbmNlIH0gfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9uTm90T2syMDBSZXNwb25zZSh4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBQSMavxqBORyBUSOG7qEMgTsOAWSDEkMav4buiQyBU4bqgTyBSQSBLSEkgREVWIFZOUy1QT1JUQUxcclxuICAgKi9cclxuXHJcbiAgb25TYXZlKGU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuYW5pbWF0ZWRUZXh0U2VydmljZS50ZXh0JC5uZXh0KFxyXG4gICAgICB0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5LlVJX0RJQUxPR19BRERJTkdfUExFQVNFX1dBSVQpXHJcbiAgICApO1xyXG4gICAgaWYgKCEhdGhpcy5hcHBDb25maWdTZXJ2aWNlLkRFQlVHX0VOQUJMRUQpIHtcclxuICAgICAgYWxlcnQoSlNPTi5zdHJpbmdpZnkoZSwgbnVsbCwgMikpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb21tb25IdHRwUmVxdWVzdFNlcnZpY2VcclxuICAgICAgLm1ha2VQb3N0UmVxdWVzdChcclxuICAgICAgICAnY3JlYXRlICcgKyB0aGlzLmVudGl0eVRhYmxlLFxyXG4gICAgICAgIHRoaXMuY3J1ZC5zISxcclxuICAgICAgICBlXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcbiAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCAmJiBib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFNpZ25hbChib2R5LmlubmVyQm9keSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5vbkluaXRpYWxWYWx1ZVN0cmluZ1JlYWR5LmVtaXQoXHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGUpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBUcmFuc2ZlciBuZXdseSBjcmVhdGVkIHJlY29yZCBpZFxyXG4gICAgICAgICAgKi9cclxuICAgICAgICAgIHRoaXMudG9nZ2xlUmVsb2FkRmxhZ0ZvclRoZUNhbGxlcihib2R5LmlubmVyQm9keS5pZCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFNlcnZpY2UucHJldmlvdXNSb3V0ZVVybCQudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbCgpOiB2b2lkIHtcclxuICAgIGlmICghIXRoaXMuYXV0b0NhbmNlbExvZ2ljT2ZmKSB7XHJcbiAgICAgIHRoaXMuY2FuY2VsTG9naWMuZW1pdCh0cnVlKTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoISF0aGlzLnVybFNlcnZpY2UucHJldmlvdXNSb3V0ZVVybCQudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy51cmxTZXJ2aWNlLnByZXZpb3VzUm91dGVVcmwkLnZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ1dHRvbkNsaWNrKGU6IElDb3JlQnV0dG9uVk5TKSB7XHJcbiAgICB0aGlzLm9uQnV0dG9uQ2xpY2suZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uRm9ybUNyZWF0ZWRMb2NhbChlOiBJRHluYW1pY0Zvcm1FbWl0T25Gb3JtQ3JlYXRlZCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtID0gZS5mb3JtR3JvdXA7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICB0aGlzLm9uRm9ybUNyZWF0ZWQuZW1pdCh0aGlzLmZvcm0pO1xyXG5cclxuICAgIC8vIE5vdyB3ZSBjYW4gcmV0dXJuIGluaXRGb3JtVmFsdWVTdHJpbmcgdG8gdGhlIGNhbGxlclxyXG4gICAgdGhpcy5vbkluaXRpYWxWYWx1ZVN0cmluZ1JlYWR5LmVtaXQoXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiQGlmICghIW5vcm1hbE1vZGUpIHtcclxuPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1wYWdlLWVkaXQtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgbWFyZ2luOiAnMHB4IDI0cHgnIH1cIj5cclxuICAgICAgICA8Y29yZS1wYWdlLWhlYWRlciBbdGl0bGVdPVwiY2FwdGlvbkNvZGVcIiBbaGlkZUJ1dHRvbkdyb3VwXT1cInRydWVcIj48L2NvcmUtcGFnZS1oZWFkZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAoISFzZWN0aW9ucy5sZW5ndGgpIHtcclxuICAgIDxjb3JlLWZvcm0gW2Zvcm1OYW1lXT1cIidmb3JtJ1wiIFtzdWJtaXRUZXh0XT1cInN1Ym1pdFRleHRcIiBbc2hvd0NhcHRpb25CdXR0b25dPVwic2hvd0NhcHRpb25CdXR0b25cIlxyXG4gICAgICAgIFtsZWZ0SW5wdXRTZWN0aW9uc109XCJsZWZ0SW5wdXRTZWN0aW9uc1wiIFtsZWZ0SW5wdXRTZWN0aW9uc0ZsZXhTaXplXT1cImxlZnRJbnB1dFNlY3Rpb25zRmxleFNpemVcIlxyXG4gICAgICAgIFtpbnB1dFNlY3Rpb25zXT1cInNlY3Rpb25zXCIgW21vZGUkXT1cIm1vZGUkXCIgW2JvdHRvbVRlbXBsYXRlUmVmXT1cImJvdHRvbVRlbXBsYXRlUmVmXCJcclxuICAgICAgICBbY3VzdG9tRm9ybUJ1dHRvbkl0ZW1zXT1cImN1c3RvbUZvcm1CdXR0b25JdGVtc1wiIFtkaXNhYmxlU2F2ZUJ1dHRvbl09XCJkaXNhYmxlU2F2ZUJ1dHRvblwiXHJcbiAgICAgICAgW2NoZWNrRXJyb3IkXT1cImNoZWNrRXJyb3IkXCIgKG9uRm9ybUNyZWF0ZWQpPVwib25Gb3JtQ3JlYXRlZExvY2FsKCRldmVudClcIiAob25TdWJtaXQpPVwib25TdWJtaXQoKVwiXHJcbiAgICAgICAgKG9uU2F2ZSk9XCJvblNhdmUoJGV2ZW50KVwiIChidXR0b25DbGljayk9XCJidXR0b25DbGljaygkZXZlbnQpXCIgKG9uQ2FuY2FsKT1cIm9uQ2FuY2VsKClcIj48L2NvcmUtZm9ybT5cclxuICAgIH1cclxuPC9kaXY+XHJcbn0gQGVsc2Uge1xyXG48ZGl2IGNsYXNzPVwibW9kYWwtY29udGFpbmVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIG92ZXJmbG93WTogJ3Njcm9sbCdcclxuICAgIH1cIj5cclxuICAgIDxkaXYgI2NvbnRhaW5lckJpZ2dlciBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWhlYWRlci1wb3B1cFwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXIteFwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+PC9pPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgbWFyZ2luOiAnMHB4IDI0cHgnIH1cIj5cclxuICAgICAgICAgICAgICAgIDxjb3JlLXBhZ2UtaGVhZGVyIFt0aXRsZV09XCJjYXB0aW9uQ29kZVwiIFtoaWRlQnV0dG9uR3JvdXBdPVwidHJ1ZVwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1wYWdlLWVkaXQtY29udGFpbmVyIG5vdC1ub3JtYWwtbW9kZVwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZSdcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICBAaWYgKCEhc2VjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIDxjb3JlLWZvcm0gW2Zvcm1OYW1lXT1cIidmb3JtJ1wiIFtzdWJtaXRUZXh0XT1cInN1Ym1pdFRleHRcIiBbc2hvd0NhcHRpb25CdXR0b25dPVwic2hvd0NhcHRpb25CdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgW2xlZnRJbnB1dFNlY3Rpb25zXT1cImxlZnRJbnB1dFNlY3Rpb25zXCIgW2xlZnRJbnB1dFNlY3Rpb25zRmxleFNpemVdPVwibGVmdElucHV0U2VjdGlvbnNGbGV4U2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbaW5wdXRTZWN0aW9uc109XCJzZWN0aW9uc1wiIFttb2RlJF09XCJtb2RlJFwiIFtjdXN0b21Gb3JtQnV0dG9uSXRlbXNdPVwiY3VzdG9tRm9ybUJ1dHRvbkl0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlU2F2ZUJ1dHRvbl09XCJkaXNhYmxlU2F2ZUJ1dHRvblwiIFtjaGVja0Vycm9yJF09XCJjaGVja0Vycm9yJFwiXHJcbiAgICAgICAgICAgICAgICAob25Gb3JtQ3JlYXRlZCk9XCJvbkZvcm1DcmVhdGVkTG9jYWwoJGV2ZW50KVwiIChvblN1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgKG9uU2F2ZSk9XCJvblNhdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAob25DYW5jYWwpPVwib25DYW5jZWwoKVwiPjwvY29yZS1mb3JtPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbn1cclxuQGlmIChsb2FkaW5nKSB7XHJcbjxhcHAtZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXI+PC9hcHAtZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXI+XHJcbn0iXX0=
|
|
502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS1lZGl0L2NvcmUtcGFnZS1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2UtZWRpdC9jb3JlLXBhZ2UtZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBeUIsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxHQUE0QixNQUFNLGVBQWUsQ0FBQztBQU85SSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUlyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQWlDLE1BQU0sNENBQTRDLENBQUM7QUFDOUcsT0FBTyxFQUFhLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUTFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFeEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8s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O3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYiw4QkFBOEI7d0JBQzlCLHVCQUF1QjtxQkFDeEI7c2dCQUtRLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFJRSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFFaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNRLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgaXNEZXZNb2RlLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IENvcmVQYWdlRWRpdFNlcnZpY2UgfSBmcm9tICcuL2NvcmUtcGFnZS1lZGl0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbmltYXRlZFRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYW5pbWF0ZWQtdGV4dC9hbmltYXRlZC10ZXh0LnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS1mb3JtL2NvcmUtZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNvcmVGb3JtU2VjdGlvbiwgfSBmcm9tICcuLi9jb3JlLWZvcm0vY29yZS1mb3JtL2VudW0taW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29tcG9uZW50LCBJRHluYW1pY0Zvcm1FbWl0T25Gb3JtQ3JlYXRlZCB9IGZyb20gJy4uL2NvcmUtZm9ybS9jb3JlLWZvcm0vY29yZS1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENvbW1vbkh0dHBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi1odHRwLXJlcXVlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEh1YkNvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHViLWNvbm5lY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXJsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VybC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJSHViQ29ubmVjdGlvbkFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JSHViQ29ubmVjdGlvbkFjdGl2aXR5JztcclxuaW1wb3J0IHsgRW51bVNpZ25hbFJUeXBlIH0gZnJvbSAnLi4vLi4vZW51bS9FbnVtU2lnbmFsUlR5cGUnO1xyXG5pbXBvcnQgeyBJRm9ybWF0ZWRSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZvcm1hdGVkUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBhbGVydE9wdGlvbnMsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9ucyc7XHJcbmltcG9ydCB7IElTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0JztcclxuaW1wb3J0IHsgRW51bUZvcm1CYXNlQ29udG9sVHlwZSB9IGZyb20gJy4uLy4uL2VudW0vRW51bUZvcm1CYXNlQ29udG9sVHlwZSc7XHJcbmltcG9ydCB7IEVudW1Db3JlUGFnZUVkaXRNb2RlIH0gZnJvbSAnLi9FbnVtQ29yZVBhZ2VFZGl0TW9kZSc7XHJcbmltcG9ydCB7IElDb3JlUGFnZUVkaXRDUlVEIH0gZnJvbSAnLi9JQ29yZVBhZ2VFZGl0Q1JVRCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBGdWxsc2NyZWVuTW9kYWxMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9mdWxsc2NyZWVuLW1vZGFsLWxvYWRlci9mdWxsc2NyZWVuLW1vZGFsLWxvYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlc3BvbnNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3BvbnNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25WTlMgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0lDb3JlQnV0dG9uVk5TJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1wYWdlLWVkaXQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZUZvcm1Db21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgRnVsbHNjcmVlbk1vZGFsTG9hZGVyQ29tcG9uZW50LFxyXG4gICAgQ29yZVBhZ2VIZWFkZXJDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXBhZ2UtZWRpdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS1wYWdlLWVkaXQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVQYWdlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgc3RheUFmdGVyU3VibWl0ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSB3aWR0aCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBlbnRpdHlUYWJsZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBoYXNJZE9mU3RyaW5nVHlwZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgY2FwdGlvbkNvZGUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGVmdElucHV0U2VjdGlvbnMhOiBJQ29yZUZvcm1TZWN0aW9uW107XHJcbiAgQElucHV0KCkgbGVmdElucHV0U2VjdGlvbnNGbGV4U2l6ZSE6IG51bWJlcjtcclxuICBASW5wdXQoKSBzZWN0aW9ucyE6IElDb3JlRm9ybVNlY3Rpb25bXTtcclxuICBASW5wdXQoKSBub3JtYWxNb2RlITogYm9vbGVhbjsgLy8gdGhpcyBhbGxvd3MgdG8gb3BlbiB0aGUgZWRpdCBmb3JtIGFzIHVzdWFsIG1vZGVcclxuICBASW5wdXQoKSBib3R0b21UZW1wbGF0ZVJlZiE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgYXV0b0dldEJ5SWRPZmYhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGF1dG9TdWJtaXRMb2dpY09mZiE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgYXV0b0NhbmNlbExvZ2ljT2ZmITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjdXN0b21Gb3JtQnV0dG9uSXRlbXMhOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXTtcclxuICBASW5wdXQoKSBtaXhlZE1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGNoZWNrRXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgQElucHV0KCkgc2hvd1NhdmVCdXR0b24hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVTYXZlQnV0dG9uITogYm9vbGVhbjtcclxuXHJcblxyXG4gIEBPdXRwdXQoKSBzdWJtaXRMb2dpYyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Gb3JtQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TdWJtaXRTdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjYW5jZWxMb2dpYyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuXHJcbiAgQElucHV0KCkgY3J1ZCE6IElDb3JlUGFnZUVkaXRDUlVEO1xyXG4gIEBJbnB1dCgpIGVudGl0eVVuaXF1ZUluZGV4czogc3RyaW5nW11bXSA9XHJcbiAgICBbXTsgLyogRm9yIGV4OiBbWydpZCddLCBbJ3Byb3ZpbmNlSWQnLCAnZGlzdHJpY0NvZGUnXV0gIGV0Yy4uLiAqL1xyXG4gIEBPdXRwdXQoKSBvbkluaXRpYWxWYWx1ZVN0cmluZ1JlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyQmlnZ2VyJykgY29udGFpbmVyQmlnZ2VyITogRWxlbWVudFJlZjtcclxuXHJcbiAgc2VjdGlvbnMkITogQmVoYXZpb3JTdWJqZWN0PElDb3JlRm9ybVNlY3Rpb25bXT47XHJcbiAgbW9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVudW1Db3JlUGFnZUVkaXRNb2RlPihcclxuICAgIEVudW1Db3JlUGFnZUVkaXRNb2RlLkNSRUFURVxyXG4gICk7XHJcblxyXG4gIGN1cnJlbnRWYWx1ZTogYW55O1xyXG4gIGluaXRpYWxWYWx1ZSE6IHN0cmluZztcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBmcm9tVXJsITogc3RyaW5nO1xyXG4gIGxpc3RJbnN0YW5jZSE6IG51bWJlcjtcclxuICBsb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgbGFuZyE6IHN0cmluZztcclxuXHJcbiAgc3VibWl0VGV4dCE6IEVudW1UcmFuc2xhdGVLZXk7XHJcblxyXG4gIHNob3dDYXB0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgc2Nyb2xsITogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlRWRpdFNlcnZpY2U6IENvcmVQYWdlRWRpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbW1vbkh0dHBSZXF1ZXN0U2VydmljZTogQ29tbW9uSHR0cFJlcXVlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbmltYXRlZFRleHRTZXJ2aWNlOiBBbmltYXRlZFRleHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlRm9ybVNlcnZpY2U6IENvcmVGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZVBhZ2VMaXN0U2VydmljZTogQ29yZVBhZ2VMaXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgaHViQ29ubmVjdGlvblNlcnZpY2U6IEh1YkNvbm5lY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1cmxTZXJ2aWNlOiBVcmxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3BvbnNlU2VydmljZTogUmVzcG9uc2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmZyb21VcmwgPSB0aGlzLmNvcmVQYWdlRWRpdFNlcnZpY2UuZnJvbVVybDtcclxuICAgIHRoaXMubGlzdEluc3RhbmNlID0gTnVtYmVyKFxyXG4gICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnbGlzdEluc3RhbmNlJykhXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZW5kU2lnbmFsKGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuaHViQ29ubmVjdGlvblNlcnZpY2UuaHViQ29ubmVjdGlvbiQudmFsdWU7XHJcbiAgICBpZiAoISFjb25uZWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IElIdWJDb25uZWN0aW9uQWN0aXZpdHkgPSB7XHJcbiAgICAgICAgc2lkOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy5pZCEsXHJcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LmZ1bGxOYW1lISxcclxuICAgICAgICBhdmF0YXI6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LmF2YXRhciEsXHJcbiAgICAgICAgc2lnbmFsVHlwZTogRW51bVNpZ25hbFJUeXBlLkVOVElUWV9DSEFOR0VELFxyXG4gICAgICAgIG1lc3NhZ2U6IGAke3RoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWVcclxuICAgICAgICAgID8udXNlck5hbWUhfSBoYXMgY2hhbmdlZCBlbnRpdHkgJHt0aGlzLmVudGl0eVRhYmxlfWAsXHJcbiAgICAgICAgbG9naW5UaW1lOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy5sb2dpblRpbWUhLFxyXG4gICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbm5lY3Rpb24uaW52b2tlKCdTZW5kTWVzc2FnZScsIG1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zZWN0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDb3JlRm9ybVNlY3Rpb25bXT4odGhpcy5zZWN0aW9ucyk7XHJcblxyXG4gICAgaWYgKCEhIXRoaXMuZW50aXR5VGFibGUpIHtcclxuICAgICAgYWxlcnQoXHJcbiAgICAgICAgJ1Byb3BlcnR5IGVudGl0eVRhYmxlIChuYW1lKSBpcyByZXF1aXJlZCBmb3IgY29tcG9uZW50ICcgK1xyXG4gICAgICAgIHRoaXMuY2FwdGlvbkNvZGVcclxuICAgICAgKTtcclxuICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAnUHJvcGVydHkgZW50aXR5VGFibGUgKG5hbWUpIGlzIHJlcXVpcmVkIGZvciBjb21wb25lbnQgJyArXHJcbiAgICAgICAgdGhpcy5jYXB0aW9uQ29kZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY29udGFpbmVyKVxyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdpZHRoJywgJzEwMCUnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghIXRoaXMud2lkdGgpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICAgJy0td2lkdGgnLFxyXG4gICAgICAgICAgdGhpcy53aWR0aCArICdweCdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udGFpbmVyQmlnZ2VyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgICAnOTUlJ1xyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodFxyXG4gICAgfSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghISF0aGlzLm1peGVkTW9kZSkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZVwiLCB4KVxyXG5cclxuICAgICAgICAgICAgbGV0IGlkOiBzdHJpbmcgPSAnMCc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0lkT2ZTdHJpbmdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlkID0gYXRvYih4WydpZCddKTtcclxuICAgICAgICAgICAgICB9IGNhdGNoIHsgcmV0dXJuIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWQgPSBOdW1iZXIoYXRvYih4WydpZCddKSkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9IGNhdGNoIHsgcmV0dXJuIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlkICE9PSAnMCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vZGUkLm5leHQoRW51bUNvcmVQYWdlRWRpdE1vZGUuVVBEQVRFKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXRUZXh0ID0gRW51bVRyYW5zbGF0ZUtleS5VSV9FRElUX0ZPUk1fQlVUVE9OX1NBVkU7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghISF0aGlzLmF1dG9HZXRCeUlkT2ZmKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29yZVBhZ2VFZGl0U2VydmljZS5nZXRCeUlkKGlkLCB0aGlzLmNydWQucikuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoYm9keS5zdGF0dXNDb2RlID0gMjAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLyogI3JlZ2lvbiBFeGNsdWRlIHNlY3Rpb25zIHdpdGggZmxhZyBhZGRNb2RlT25seT10cnVlICovXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoISFib2R5LmlubmVyQm9keS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgcmVsZXZhbnQgY29udHJvbHMgZnJvbSBmb3JtIGdyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZE1vZGVPbmx5U2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoeCkgPT4gISF4LmFkZE1vZGVPbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1vZGVPbmx5U2VjdGlvbnMubWFwKChhZGRNb2RlT25seVNlY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNb2RlT25seVNlY3Rpb24ucm93cy5tYXAoKGFkZE1vZGVPbmx5Um93KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNb2RlT25seVJvdy5tYXAoKGFkZE1vZGVPbmx5Q29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucmVtb3ZlQ29udHJvbChhZGRNb2RlT25seUNvbnRyb2wuZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHJlbGV2YW50IGNvbnRyb2xzIGZyb20gZm9ybSBzZWN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdTZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnMuZmlsdGVyKCh4KSA9PiAhISF4LmFkZE1vZGVPbmx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9ucyA9IG5ld1NlY3Rpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zJC5uZXh0KHRoaXMuc2VjdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgLyogI2VuZHJlZ2lvbiBFeGNsdWRlIHNlY3Rpb25zIHdpdGggZmxhZyBhZGRNb2RlT25seT10cnVlICovXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgLyogI3JlZ2lvbjogQXNzaWduIHZhbHVlIHRvIGF0dGFjaG1lbnQgZmllbGRzIHdoZW4gY29udHJvbFR5cGUgPSBBVFRBQ0hNRU5UICovXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnJvd3MubWFwKChyb3cpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubWFwKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5jb250cm9sVHlwZSA9PT0gRW51bUZvcm1CYXNlQ29udG9sVHlwZS5BVFRBQ0hNRU5UKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wudmFsdWVUb1Nob3cgPSBib2R5LmlubmVyQm9keVtjb250cm9sLmFzc2lnblRvIV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvKiAjZW5kcmVnaW9uOiBBc3NpZ24gdmFsdWUgdG8gYmFzaWMgZmllbGRzIHdoZW4gY29udHJvbFR5cGUgPSBBVFRBQ0hNRU5UICovXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgLyogI3JlZ2lvbjogVXNpbmcgUGF0Y2hWYWx1ZSBpbnN0ZWFkIG9mIHNldFZhbHVlICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JtcyBvZnRlbiBoYXZlIGV4dHJhIGhlbHBlciBmaWVsZHNcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aHVzLCBpZiB3ZSB1c2Ugc2V0VmFsdWUgbWV0aG9kLCB0aGUgaGVscGVyIGZpZWxkcyB3aWxsIGJlIGxvc3Q6XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmZvcm0uc2V0VmFsdWUoYm9keS5pbm5lckJvZHkpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc28sIHdlIHVzZSBwYXRjaFZhbHVlIG1ldGhvZCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGJvZHkuaW5uZXJCb2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5jdXJyZW50VmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24ucm93cy5tYXAoKHJvdykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5tYXAoKGNvbnRyb2wpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Gb3JtQmFzZUNvbnRvbFR5cGUuU0VFS0VSLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Gb3JtQmFzZUNvbnRvbFR5cGUuRFJPUERPV04sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bUZvcm1CYXNlQ29udG9sVHlwZS5DSEVDS0xJU1QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoY29udHJvbC5jb250cm9sVHlwZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF0aGlzLmN1cnJlbnRWYWx1ZVtjb250cm9sLmZpZWxkXSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgISEhY29udHJvbC5nZXRCeUlkQXBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRyb2wuY29udHJvbFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtRm9ybUJhc2VDb250b2xUeXBlLlNFRUtFUjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2wubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgZ2V0QnlJZEFwaSBub3QgcHJvdmlkZWQgZm9yICcke2NvbnRyb2wuZmllbGR9J2AsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUZvcm1CYXNlQ29udG9sVHlwZS5EUk9QRE9XTjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEhY29udHJvbC5kcm9wZG93bk9wdGlvbnMkPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYGdldEJ5SWRBcGkgbm90IHByb3ZpZGVkIGZvciAnJHtjb250cm9sLmZpZWxkfSdgLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUZvcm1CYXNlQ29udG9sVHlwZS5DSEVDS0xJU1Q6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhIWNvbnRyb2wuY2hlY2tsaXN0T3B0aW9ucyQ/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgZ2V0QnlJZEFwaSBub3QgcHJvdmlkZWQgZm9yICcke2NvbnRyb2wuZmllbGR9J2AsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgZ2V0QnlJZEFwaSBub3QgcHJvdmlkZWQgZm9yICcke2NvbnRyb2wuZmllbGR9J2AsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25IdHRwUmVxdWVzdFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1ha2VHZXRSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRCeUlkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmdldEJ5SWRBcGkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA/aWQ9JHt0aGlzLmN1cnJlbnRWYWx1ZVtjb250cm9sLmZpZWxkXX1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZm9ybSBnZXRCeUlkIHJlc3VsdDogXCIsIHRoaXMuY3VycmVudFZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZ2V0QnlJZE9iamVjdCQ/Lm5leHQoYm9keS5pbm5lckJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5nZXRCeUlkT2JqZWN0JD8ubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmNvbnRyb2xUeXBlID09PSBFbnVtRm9ybUJhc2VDb250b2xUeXBlLlNFRUtFUiAmJiBjb250cm9sLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLm9iamVjdExpc3QkPy5uZXh0KGJvZHkuaW5uZXJCb2R5W2NvbnRyb2wuZ2V0T2JqZWN0TGlzdEZyb20hXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9ucyQubmV4dCh0aGlzLnNlY3Rpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvKiAjZW5kcmVnaW9uOiBVc2luZyBQYXRjaFZhbHVlIGluc3RlYWQgb2Ygc2V0VmFsdWUgKi9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGluaXRGb3JtVmFsdWVTdHJpbmcgdG8gdGhlIGNhbGxlclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Jbml0aWFsVmFsdWVTdHJpbmdSZWFkeS5lbWl0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubW9kZSQubmV4dChFbnVtQ29yZVBhZ2VFZGl0TW9kZS5DUkVBVEUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3VibWl0VGV4dCA9IEVudW1UcmFuc2xhdGVLZXkuVUlfRURJVF9GT1JNX0JVVFRPTl9BREQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICAgIClcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVSZWxvYWRGbGFnRm9yVGhlQ2FsbGVyKGlkOiBudW1iZXIpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBpbnN0YW5jZXNGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMubGlzdEluc3RhbmNlXHJcbiAgICApO1xyXG4gICAgaWYgKCEhaW5zdGFuY2VzRmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc0ZpbHRlclswXTtcclxuICAgICAgaW5zdGFuY2UuaWQkLm5leHQoaWQpO1xyXG4gICAgICAvL2lmICghISF0aGlzLm5vcm1hbE1vZGUpIGluc3RhbmNlLnJlbG9hZEZsYWckPy5uZXh0KCFpbnN0YW5jZS5yZWxvYWRGbGFnJC52YWx1ZSk7XHJcblxyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKGBDb3JlUGFnZUxpc3QgaW5zdGFuY2UgbnVtYmVyICR7dGhpcy5saXN0SW5zdGFuY2V9IGN1cnJlbnQgaWQgaXM6ICR7aW5zdGFuY2UuaWQkLnZhbHVlfWAsIGFsZXJ0T3B0aW9ucylcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oYENvcmVQYWdlTGlzdCBpbnN0YW5jZXMgZG8gbm90IGluY2x1ZGUgbnVtYmVyICR7dGhpcy5saXN0SW5zdGFuY2V9YCwgYWxlcnRPcHRpb25zKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk5vdE9rMjAwUmVzcG9uc2UoeDogb2JqZWN0KTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiTm8gcmVzcG9uc2UgY29udGVudC4gSXQgd2FzIHBvc3NpYmx5IGEgQ09SUyBlcnJvci5cIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy90aGlzLmFsZXJ0U2VydmljZS5lcnJvcihKU09OLnN0cmluZ2lmeSh4LCBudWxsLCAyKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCk6IHZvaWQge1xyXG5cclxuICAgIC8qIElGIGlkIGlzIGZhbHN5ID0+IENSRUFULCBvdGhlcndpc2UgVVBEQVRFICovXHJcblxyXG4gICAgLyogRk9SIENPTlRST0wgT0YgVFlQRSBHUklEQlVGRkVSLCBTRVQgRVZFUlkgaWQgVE8gTlVMTCAqL1xyXG4gICAgdGhpcy5zZWN0aW9ucy5tYXAoc2VjdGlvbiA9PiB7XHJcbiAgICAgIHNlY3Rpb24ucm93cy5tYXAocm93ID0+IHtcclxuICAgICAgICByb3cubWFwKGNvbnRyb2wgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coY29udHJvbC5jb250cm9sVHlwZSlcclxuICAgICAgICAgIGlmIChjb250cm9sLmNvbnRyb2xUeXBlID09PSBFbnVtRm9ybUJhc2VDb250b2xUeXBlLkdSSURCVUZGRVIpIHtcclxuICAgICAgICAgICAgY29uc3QgYWJzdHJhY3RDb250cm9sID0gdGhpcy5mb3JtLmdldChjb250cm9sLmZpZWxkKT8udmFsdWU7XHJcbiAgICAgICAgICAgIC8vIFRPIERPIDE3LzA4LzIwMjMgPT09PT09PT09PT1cclxuICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sPy52YWx1ZT8ubWFwKCh4OiBhbnkpID0+IHguaWQgPSBudWxsKTtcclxuICAgICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG5cclxuICAgIGlmICghIXRoaXMubWl4ZWRNb2RlKSB7XHJcbiAgICAgIHRoaXMuc3VibWl0TG9naWMuZW1pdChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtb2RlOiB0aGlzLmZvcm0uZ2V0KCdlZGl0TW9kZScpPy52YWx1ZSxcclxuICAgICAgICAgIGZvcm1WYWx1ZTogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKClcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISF0aGlzLmF1dG9TdWJtaXRMb2dpY09mZikge1xyXG4gICAgICAvLyBETyB5b3VyIGxvZ2ljIGhlcmVcclxuICAgICAgdGhpcy5zdWJtaXRMb2dpYy5lbWl0KEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICghISF0aGlzLmZvcm0uZ2V0KCdpZCcpIS52YWx1ZSkge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3Qgc3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3Q6IElTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCA9IHtcclxuICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSB8fCAnVU5ERUZJTkVEJyxcclxuICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURSxcclxuICAgICAgICBiZWZvcmU6IEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudFZhbHVlKSA/PyAnXCJcIicsXHJcbiAgICAgICAgYWZ0ZXI6IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKSxcclxuICAgICAgICB1c2VybmFtZTogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8udXNlck5hbWUhXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYW5pbWF0ZWRUZXh0U2VydmljZS50ZXh0JC5uZXh0KFxyXG4gICAgICAgIHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuVUlfRElBTE9HX0FERElOR19QTEVBU0VfV0FJVClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuY29tbW9uSHR0cFJlcXVlc3RTZXJ2aWNlXHJcbiAgICAgICAgLm1ha2VQb3N0UmVxdWVzdChcclxuICAgICAgICAgICdjcmVhdGUgJyArIHRoaXMuZW50aXR5VGFibGUsXHJcbiAgICAgICAgICB0aGlzLmNydWQuYyEsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCxcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcbiAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kU2lnbmFsKGJvZHkuaW5uZXJCb2R5KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMub25TdWJtaXRTdWNjZXNzLmVtaXQodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMub25Jbml0aWFsVmFsdWVTdHJpbmdSZWFkeS5lbWl0KFxyXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICBUcmFuc2ZlciBuZXdseSBjcmVhdGVkIHJlY29yZCBpZFxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVsb2FkRmxhZ0ZvclRoZUNhbGxlcihib2R5LmlubmVyQm9keS5pZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyAvKiBleHBlcmltZW50Ki8gcmVwbGFjZVVybDogdHJ1ZSwgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgc3RhdGU6IHsgaWQ6IGJvZHkuaW5uZXJCb2R5LmlkLCBpbnN0YW5jZU51bWJlcjogdGhpcy5saXN0SW5zdGFuY2UgfSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vbk5vdE9rMjAwUmVzcG9uc2UoeCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3Qgc3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3Q6IElTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCA9IHtcclxuICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSB8fCAnVU5ERUZJTkVEJyxcclxuICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUsXHJcbiAgICAgICAgYmVmb3JlOiBKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnRWYWx1ZSkgPz8gJ1wiXCInLFxyXG4gICAgICAgIGFmdGVyOiBKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSksXHJcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LnVzZXJOYW1lIVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBhMSA9IHRoaXMuY29yZUZvcm1TZXJ2aWNlLmdldEFsbEZvcm1CYXNlQ29udHJvbE5hbWVzKHRoaXMubGVmdElucHV0U2VjdGlvbnM/LmZpbHRlcih4ID0+ICF4LmhpZGRlbikpO1xyXG4gICAgICBjb25zdCBhMiA9IHRoaXMuY29yZUZvcm1TZXJ2aWNlLmdldEFsbEZvcm1CYXNlQ29udHJvbE5hbWVzKHRoaXMuc2VjdGlvbnM/LmZpbHRlcih4ID0+ICF4LmhpZGRlbikpO1xyXG4gICAgICBjb25zdCBhY3R1YWxGb3JtRGVjbGFyZWRGaWVsZHMgPSBbLi4uYTEsIC4uLmEyXTtcclxuXHJcbiAgICAgIHRoaXMuYW5pbWF0ZWRUZXh0U2VydmljZS50ZXh0JC5uZXh0KFxyXG4gICAgICAgIHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuVUlfRElBTE9HX1VQREFUSU5HX1BMRUFTRV9XQUlUKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNvbW1vbkh0dHBSZXF1ZXN0U2VydmljZVxyXG4gICAgICAgIC5tYWtlUG9zdFJlcXVlc3QoXHJcbiAgICAgICAgICAndXBkYXRlICcgKyB0aGlzLmVudGl0eVRhYmxlLFxyXG4gICAgICAgICAgdGhpcy5jcnVkLnUsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCxcclxuICAgICAgICAgICAgYWN0dWFsRm9ybURlY2xhcmVkRmllbGRzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFNpZ25hbChib2R5LmlubmVyQm9keSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLm9uU3VibWl0U3VjY2Vzcy5lbWl0KHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLm9uSW5pdGlhbFZhbHVlU3RyaW5nUmVhZHkuZW1pdChcclxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICBUcmFuc2ZlciBjdXJyZW50IHJlY29yZCBpZFxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVsb2FkRmxhZ0ZvclRoZUNhbGxlcihib2R5LmlubmVyQm9keS5pZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYXBwQ29uZmlnU2VydmljZS5BUFBfVFlQRSA9PT0gXCJNT0JJTEVcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyAvKiBleHBlcmltZW50Ki8gcmVwbGFjZVVybDogdHJ1ZSwgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgc3RhdGU6IHsgaWQ6IGJvZHkuaW5uZXJCb2R5LmlkLCBpbnN0YW5jZU51bWJlcjogdGhpcy5saXN0SW5zdGFuY2UgfSB9KTsgIFxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBDb25maWdTZXJ2aWNlLkFQUF9UWVBFID09PSBcIldFQkFQUFwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIHN0YXRlOiB7IGlkOiBib2R5LmlubmVyQm9keS5pZCwgaW5zdGFuY2VOdW1iZXI6IHRoaXMubGlzdEluc3RhbmNlIH0gfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9uTm90T2syMDBSZXNwb25zZSh4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBQSMavxqBORyBUSOG7qEMgTsOAWSDEkMav4buiQyBU4bqgTyBSQSBLSEkgREVWIFZOUy1QT1JUQUxcclxuICAgKi9cclxuXHJcbiAgb25TYXZlKGU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuYW5pbWF0ZWRUZXh0U2VydmljZS50ZXh0JC5uZXh0KFxyXG4gICAgICB0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5LlVJX0RJQUxPR19BRERJTkdfUExFQVNFX1dBSVQpXHJcbiAgICApO1xyXG4gICAgaWYgKCEhdGhpcy5hcHBDb25maWdTZXJ2aWNlLkRFQlVHX0VOQUJMRUQpIHtcclxuICAgICAgYWxlcnQoSlNPTi5zdHJpbmdpZnkoZSwgbnVsbCwgMikpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb21tb25IdHRwUmVxdWVzdFNlcnZpY2VcclxuICAgICAgLm1ha2VQb3N0UmVxdWVzdChcclxuICAgICAgICAnY3JlYXRlICcgKyB0aGlzLmVudGl0eVRhYmxlLFxyXG4gICAgICAgIHRoaXMuY3J1ZC5zISxcclxuICAgICAgICBlXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcbiAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCAmJiBib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFNpZ25hbChib2R5LmlubmVyQm9keSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5vbkluaXRpYWxWYWx1ZVN0cmluZ1JlYWR5LmVtaXQoXHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGUpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBUcmFuc2ZlciBuZXdseSBjcmVhdGVkIHJlY29yZCBpZFxyXG4gICAgICAgICAgKi9cclxuICAgICAgICAgIHRoaXMudG9nZ2xlUmVsb2FkRmxhZ0ZvclRoZUNhbGxlcihib2R5LmlubmVyQm9keS5pZCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFNlcnZpY2UucHJldmlvdXNSb3V0ZVVybCQudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbCgpOiB2b2lkIHtcclxuICAgIGlmICghIXRoaXMuYXV0b0NhbmNlbExvZ2ljT2ZmKSB7XHJcbiAgICAgIHRoaXMuY2FuY2VsTG9naWMuZW1pdCh0cnVlKTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoISF0aGlzLnVybFNlcnZpY2UucHJldmlvdXNSb3V0ZVVybCQudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy51cmxTZXJ2aWNlLnByZXZpb3VzUm91dGVVcmwkLnZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ1dHRvbkNsaWNrKGU6IElDb3JlQnV0dG9uVk5TKSB7XHJcbiAgICB0aGlzLm9uQnV0dG9uQ2xpY2suZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uRm9ybUNyZWF0ZWRMb2NhbChlOiBJRHluYW1pY0Zvcm1FbWl0T25Gb3JtQ3JlYXRlZCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtID0gZS5mb3JtR3JvdXA7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICB0aGlzLm9uRm9ybUNyZWF0ZWQuZW1pdCh0aGlzLmZvcm0pO1xyXG5cclxuICAgIC8vIE5vdyB3ZSBjYW4gcmV0dXJuIGluaXRGb3JtVmFsdWVTdHJpbmcgdG8gdGhlIGNhbGxlclxyXG4gICAgdGhpcy5vbkluaXRpYWxWYWx1ZVN0cmluZ1JlYWR5LmVtaXQoXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiQGlmICghIW5vcm1hbE1vZGUpIHtcclxuPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1wYWdlLWVkaXQtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgbWFyZ2luOiAnMHB4IDI0cHgnIH1cIj5cclxuICAgICAgICA8Y29yZS1wYWdlLWhlYWRlciBbdGl0bGVdPVwiY2FwdGlvbkNvZGVcIiBbaGlkZUJ1dHRvbkdyb3VwXT1cInRydWVcIj48L2NvcmUtcGFnZS1oZWFkZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAoISFzZWN0aW9ucy5sZW5ndGgpIHtcclxuICAgIDxjb3JlLWZvcm0gW2Zvcm1OYW1lXT1cIidmb3JtJ1wiIFtzdWJtaXRUZXh0XT1cInN1Ym1pdFRleHRcIiBbc2hvd0NhcHRpb25CdXR0b25dPVwic2hvd0NhcHRpb25CdXR0b25cIlxyXG4gICAgICAgIFtsZWZ0SW5wdXRTZWN0aW9uc109XCJsZWZ0SW5wdXRTZWN0aW9uc1wiIFtsZWZ0SW5wdXRTZWN0aW9uc0ZsZXhTaXplXT1cImxlZnRJbnB1dFNlY3Rpb25zRmxleFNpemVcIlxyXG4gICAgICAgIFtpbnB1dFNlY3Rpb25zXT1cInNlY3Rpb25zXCIgW21vZGUkXT1cIm1vZGUkXCIgW2JvdHRvbVRlbXBsYXRlUmVmXT1cImJvdHRvbVRlbXBsYXRlUmVmXCJcclxuICAgICAgICBbY3VzdG9tRm9ybUJ1dHRvbkl0ZW1zXT1cImN1c3RvbUZvcm1CdXR0b25JdGVtc1wiIFtkaXNhYmxlU2F2ZUJ1dHRvbl09XCJkaXNhYmxlU2F2ZUJ1dHRvblwiXHJcbiAgICAgICAgW2NoZWNrRXJyb3IkXT1cImNoZWNrRXJyb3IkXCIgKG9uRm9ybUNyZWF0ZWQpPVwib25Gb3JtQ3JlYXRlZExvY2FsKCRldmVudClcIiAob25TdWJtaXQpPVwib25TdWJtaXQoKVwiXHJcbiAgICAgICAgKG9uU2F2ZSk9XCJvblNhdmUoJGV2ZW50KVwiIChidXR0b25DbGljayk9XCJidXR0b25DbGljaygkZXZlbnQpXCIgKG9uQ2FuY2FsKT1cIm9uQ2FuY2VsKClcIj48L2NvcmUtZm9ybT5cclxuICAgIH1cclxuPC9kaXY+XHJcbn0gQGVsc2Uge1xyXG48ZGl2IGNsYXNzPVwibW9kYWwtY29udGFpbmVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIG92ZXJmbG93WTogJ3Njcm9sbCdcclxuICAgIH1cIj5cclxuICAgIDxkaXYgI2NvbnRhaW5lckJpZ2dlciBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWhlYWRlci1wb3B1cFwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXIteFwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+PC9pPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgbWFyZ2luOiAnMHB4IDI0cHgnIH1cIj5cclxuICAgICAgICAgICAgICAgIDxjb3JlLXBhZ2UtaGVhZGVyIFt0aXRsZV09XCJjYXB0aW9uQ29kZVwiIFtoaWRlQnV0dG9uR3JvdXBdPVwidHJ1ZVwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1wYWdlLWVkaXQtY29udGFpbmVyIG5vdC1ub3JtYWwtbW9kZVwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZSdcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICBAaWYgKCEhc2VjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIDxjb3JlLWZvcm0gW2Zvcm1OYW1lXT1cIidmb3JtJ1wiIFtzdWJtaXRUZXh0XT1cInN1Ym1pdFRleHRcIiBbc2hvd0NhcHRpb25CdXR0b25dPVwic2hvd0NhcHRpb25CdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgW2xlZnRJbnB1dFNlY3Rpb25zXT1cImxlZnRJbnB1dFNlY3Rpb25zXCIgW2xlZnRJbnB1dFNlY3Rpb25zRmxleFNpemVdPVwibGVmdElucHV0U2VjdGlvbnNGbGV4U2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbaW5wdXRTZWN0aW9uc109XCJzZWN0aW9uc1wiIFttb2RlJF09XCJtb2RlJFwiIFtjdXN0b21Gb3JtQnV0dG9uSXRlbXNdPVwiY3VzdG9tRm9ybUJ1dHRvbkl0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlU2F2ZUJ1dHRvbl09XCJkaXNhYmxlU2F2ZUJ1dHRvblwiIFtjaGVja0Vycm9yJF09XCJjaGVja0Vycm9yJFwiXHJcbiAgICAgICAgICAgICAgICAob25Gb3JtQ3JlYXRlZCk9XCJvbkZvcm1DcmVhdGVkTG9jYWwoJGV2ZW50KVwiIChvblN1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgKG9uU2F2ZSk9XCJvblNhdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwiYnV0dG9uQ2xpY2soJGV2ZW50KVwiIChvbkNhbmNhbCk9XCJvbkNhbmNlbCgpXCI+PC9jb3JlLWZvcm0+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxufVxyXG5AaWYgKGxvYWRpbmcpIHtcclxuPGFwcC1mdWxsc2NyZWVuLW1vZGFsLWxvYWRlcj48L2FwcC1mdWxsc2NyZWVuLW1vZGFsLWxvYWRlcj5cclxufSJdfQ==
|