simpo-component-library 3.6.835 → 3.6.836

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.
@@ -40,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40
40
  type: Input,
41
41
  args: ['simpoObjectPosition']
42
42
  }] } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9kaXJlY3RpdmUvaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQzs7O0FBU3ZGLE1BQU0sT0FBTyx1QkFBdUI7SUFHbEMsWUFBb0IsRUFBYyxFQUN4QixZQUEyQjtRQURqQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBQ2pDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFFSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDaEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUMzRSxDQUFDO0lBR0Qsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ25HLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFBO2dCQUM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtZQUM1QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOytHQS9CVSx1QkFBdUI7bUdBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFKbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7MkdBRStCLFFBQVE7c0JBQXJDLEtBQUs7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBvc2l0aW9uTW9kZWwgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3NpbXBvT2JqZWN0UG9zaXRpb25dJyxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPYmplY3RQb3NpdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCdzaW1wb09iamVjdFBvc2l0aW9uJykgcG9zaXRpb24/OiBQb3NpdGlvbk1vZGVsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UpIHtcclxuICAgICAgdGhpcy5vYmplY3RQb3NpdG9uQ2hhbmdlQ2hlY2soKVxyXG4gICAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIHRoaXMuYXBwbHlPYmplY3RQb3NpdGlvbigpXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLm9iamVjdFBvc2l0aW9uU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMub2JqZWN0UG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlPYmplY3RQb3NpdGlvbigpIHtcclxuICAgIGxldCBwb3NpdGlvblZhbHVlID0gYCR7dGhpcy5wb3NpdGlvbj8ueH0lICR7dGhpcy5wb3NpdGlvbj8ueX0lYDtcclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnb2JqZWN0LXBvc2l0aW9uJywgcG9zaXRpb25WYWx1ZSlcclxuICB9XHJcblxyXG4gIG9iamVjdFBvc2l0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIG9iamVjdFBvc2l0b25DaGFuZ2VDaGVjaygpIHtcclxuICAgIHRoaXMub2JqZWN0UG9zaXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLmV2ZW50U2VydmljZS5vYmplY3RQb3NpdGlvbkNoYW5nZUNoZWNrLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMocmVzLmlkKSkge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSByZXMucG9zaXRpb25cclxuICAgICAgICB0aGlzLmFwcGx5T2JqZWN0UG9zaXRpb24oKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9kaXJlY3RpdmUvaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQzs7O0FBU3ZGLE1BQU0sT0FBTyx1QkFBdUI7SUFHbEMsWUFBb0IsRUFBYyxFQUN4QixZQUEyQjtRQURqQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBQ2pDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFFSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDaEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUMzRSxDQUFDO0lBR0Qsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ25HLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFBO2dCQUM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOytHQS9CVSx1QkFBdUI7bUdBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFKbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7MkdBRStCLFFBQVE7c0JBQXJDLEtBQUs7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBvc2l0aW9uTW9kZWwgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3NpbXBvT2JqZWN0UG9zaXRpb25dJyxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPYmplY3RQb3NpdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCdzaW1wb09iamVjdFBvc2l0aW9uJykgcG9zaXRpb24/OiBQb3NpdGlvbk1vZGVsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UpIHtcclxuICAgICAgdGhpcy5vYmplY3RQb3NpdG9uQ2hhbmdlQ2hlY2soKVxyXG4gICAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIHRoaXMuYXBwbHlPYmplY3RQb3NpdGlvbigpXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLm9iamVjdFBvc2l0aW9uU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMub2JqZWN0UG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlPYmplY3RQb3NpdGlvbigpIHtcclxuICAgIGxldCBwb3NpdGlvblZhbHVlID0gYCR7dGhpcy5wb3NpdGlvbj8ueH0lICR7dGhpcy5wb3NpdGlvbj8ueX0lYDtcclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnb2JqZWN0LXBvc2l0aW9uJywgcG9zaXRpb25WYWx1ZSlcclxuICB9XHJcblxyXG4gIG9iamVjdFBvc2l0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIG9iamVjdFBvc2l0b25DaGFuZ2VDaGVjaygpIHtcclxuICAgIHRoaXMub2JqZWN0UG9zaXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLmV2ZW50U2VydmljZS5vYmplY3RQb3NpdGlvbkNoYW5nZUNoZWNrLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMocmVzLmlkKSkge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSByZXMucG9zaXRpb25cclxuICAgICAgICB0aGlzLmFwcGx5T2JqZWN0UG9zaXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
@@ -514,7 +514,7 @@ export class TextEditorComponent {
514
514
  return this.value;
515
515
  }
516
516
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextEditorComponent, deps: [{ token: i1.ElementServiceService }, { token: PLATFORM_ID }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
517
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TextEditorComponent, isStandalone: true, selector: "simpo-text-editor", inputs: { value: "value", editable: "editable", sectionId: "sectionId", label: "label", type: "type" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "editor", first: true, predicate: ["editor"], descendants: true }, { propertyName: "colorPicker", first: true, predicate: ["colorPicker"], descendants: true }, { propertyName: "parentElement", first: true, predicate: ["parentElement"], descendants: true }, { propertyName: "suggestion", first: true, predicate: ["suggestion"], descendants: true }], ngImport: i0, template: "<!-- <div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement\r\n [class.d-none]=\"!editable && getText() == ''\"> -->\r\n <div *ngIf=\"editable; else viewMode\"\r\n class=\"editor-container\"\r\n [ngClass]=\"{'border': editable}\"\r\n #parentElement>\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text p-0\" (mouseup)=\"showToolbar($event)\" #editor\r\n (ngModelChange)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\" (paste)=\"onPaste($event)\">\r\n </div>\r\n\r\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\"\r\n [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar cdkDrag>\r\n <!-- <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\r\n <option value=\"H1\">Heading1</option>\r\n <option value=\"H2\">Heading2</option>\r\n <option value=\"H3\">Heading3</option>\r\n <option value=\"div\">Text</option>\r\n </select> -->\r\n <button class=\"tool\"> <mat-icon cdkDragHandle>drag_indicator</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon>\r\n format_bold</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon>\r\n format_italic</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"\r\n *ngIf=\"selectedColorType === 'SOLID'\"><mat-icon> format_underlined</mat-icon></button>\r\n\r\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\r\n <option value=\"\" selected>Default</option>\r\n <option value=\"clamp(0.75rem, 2vw, 1rem)\">Small</option>\r\n <option value=\"clamp(0.75rem, 2vw, 1.25rem)\">Medium</option>\r\n <option value=\"clamp(1rem, 3vw, 1.5rem)\">Semi Large</option>\r\n <option value=\"clamp(1.25rem, 4vw, 2rem)\">Large</option>\r\n <option value=\"clamp(2rem, 5vw, 3rem)\">Extra Large</option>\r\n <option value=\"clamp(3.1rem, 7vw, 4.5rem)\">Huge</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon>\r\n format_list_bulleted</mat-icon></button>\r\n\r\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon>\r\n format_align_left</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon>\r\n format_align_center</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyRight')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon>\r\n format_align_right</mat-icon></button>\r\n\r\n <div class=\"colorType\">\r\n <button class=\"solid\" [ngClass]=\"{'solidColorSelected': selectedColorType === 'SOLID'}\"\r\n (mousedown)=\"rememberSelection($event)\" (click)=\"setColorMode('SOLID')\">\r\n Solid\r\n </button>\r\n <button class=\"gradient\" [ngClass]=\"{'gradientColorSelected': selectedColorType === 'GRADIENT'}\"\r\n (mousedown)=\"rememberSelection($event)\" (click)=\"setColorMode('GRADIENT')\">\r\n Gradient\r\n </button>\r\n </div>\r\n\r\n\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\" *ngIf=\"selectedColorType === 'SOLID'\">\r\n <mat-icon>format_color_text</mat-icon>\r\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\"\r\n [(ngModel)]=\"toolbarData.selectedColor\">\r\n </button>\r\n\r\n <div class=\"colorType\" *ngIf=\"selectedColorType === 'GRADIENT'\">\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); primaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"primaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #primaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\"\r\n [(ngModel)]=\"primaryColor\">\r\n </button>\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); secondaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"secondaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #secondaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\"\r\n [(ngModel)]=\"secondaryColor\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\"\r\n [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\r\n <div class=\"suggestion\" (click)=\"regenerateText()\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\"\r\n alt=\"\">\r\n <div>\r\n <p class=\"name\">Regenerate Text</p>\r\n <p class=\"desc\">Get a fresh variation of a current text</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #viewMode>\r\n <div class=\"read-only-text\" *ngIf=\"value\">\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\"></div>\r\n </div>\r\n</ng-template>", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;display:inline-block;overflow:visible;width:100%}.editor-container div{outline:none}.editable-text{line-height:unset;cursor:text}.toolbar{position:absolute;background:#fff;box-shadow:0 2px 5px #0003;display:flex;gap:5px;align-items:center;z-index:100000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:22px}.toolbar:hover{border:1px solid #ccc}.toolbar button{background:none;border:none;padding:5px 8px;cursor:pointer;font-weight:700;display:flex;align-items:center}.toolbar button:hover{background:#ddd}.toolbar select{padding:3px;border:none;outline:none;font-size:14px;font-weight:600;cursor:pointer}.toolbar input[type=color]{border:none;width:30px;height:30px;padding:0;cursor:pointer}.color-picker-btn{position:relative;background:none;border:none;cursor:pointer;padding:5px}.hidden-color-picker{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer}.border{border:none!important;border-radius:8px}.border:hover{border:1px solid #b9b9b9!important;border-radius:8px}.selectedTool{background:var(--primary-bg-color)!important;color:#fff;border-radius:5px}p{margin-bottom:0rem!important}.suggestion-box{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;z-index:10000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:10px}.suggestion{display:flex;gap:10px;width:307px;align-items:center;cursor:pointer}.suggestion img{border-radius:5px;width:32px;height:32px;background:#faf1fc;padding:3px}.suggestion .name{color:#000;font-family:var(--primary-font-family)}.suggestion .desc{color:#000;font-size:12px;color:#918585;font-family:var(--primary-font-family)}.colorType{display:flex;border:1px solid #E9E9E9;border-radius:5px;height:35px}.colorType .solid{border-right:1px solid #E9E9E9;font-size:14px!important;font-family:Mulish}.colorType .gradient{font-size:14px!important;font-family:Mulish}.solidColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-left-radius:5px;border-bottom-left-radius:5px}.gradientColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-right-radius:5px;border-bottom-right-radius:5px}@media screen and (max-width: 475px){.toolbar{max-width:100%;flex-wrap:wrap;row-gap:15px}.tool{width:max-content!important}}.drag-icon{color:var(--primary-bg-color)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ContenteditableValueAccessor, selector: "[contenteditable][ngModel]", inputs: ["contenteditable"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] }); }
517
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TextEditorComponent, isStandalone: true, selector: "simpo-text-editor", inputs: { value: "value", editable: "editable", sectionId: "sectionId", label: "label", type: "type" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "editor", first: true, predicate: ["editor"], descendants: true }, { propertyName: "colorPicker", first: true, predicate: ["colorPicker"], descendants: true }, { propertyName: "parentElement", first: true, predicate: ["parentElement"], descendants: true }, { propertyName: "suggestion", first: true, predicate: ["suggestion"], descendants: true }], ngImport: i0, template: "<!-- <div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement\r\n [class.d-none]=\"!editable && getText() == ''\"> -->\r\n<div *ngIf=\"editable; else viewMode\" class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement>\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text p-0\" (mouseup)=\"showToolbar($event)\"\r\n #editor (ngModelChange)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\" (paste)=\"onPaste($event)\">\r\n </div>\r\n\r\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\"\r\n [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar cdkDrag>\r\n <!-- <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\r\n <option value=\"H1\">Heading1</option>\r\n <option value=\"H2\">Heading2</option>\r\n <option value=\"H3\">Heading3</option>\r\n <option value=\"div\">Text</option>\r\n </select> -->\r\n <button class=\"tool\"> <mat-icon cdkDragHandle>drag_indicator</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon>\r\n format_bold</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon>\r\n format_italic</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"\r\n *ngIf=\"selectedColorType === 'SOLID'\"><mat-icon> format_underlined</mat-icon></button>\r\n\r\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\r\n <option value=\"\" selected>Default</option>\r\n <option value=\"clamp(0.75rem, 2vw, 1rem)\">Small</option>\r\n <option value=\"clamp(0.75rem, 2vw, 1.25rem)\">Medium</option>\r\n <option value=\"clamp(1rem, 3vw, 1.5rem)\">Semi Large</option>\r\n <option value=\"clamp(1.25rem, 4vw, 2rem)\">Large</option>\r\n <option value=\"clamp(2rem, 5vw, 3rem)\">Extra Large</option>\r\n <option value=\"clamp(3.1rem, 7vw, 4.5rem)\">Huge</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon>\r\n format_list_bulleted</mat-icon></button>\r\n\r\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon>\r\n format_align_left</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon>\r\n format_align_center</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyRight')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon>\r\n format_align_right</mat-icon></button>\r\n\r\n <div class=\"colorType\">\r\n <button class=\"solid\" [ngClass]=\"{'solidColorSelected': selectedColorType === 'SOLID'}\"\r\n (mousedown)=\"rememberSelection($event)\" (click)=\"setColorMode('SOLID')\">\r\n Solid\r\n </button>\r\n <button class=\"gradient\" [ngClass]=\"{'gradientColorSelected': selectedColorType === 'GRADIENT'}\"\r\n (mousedown)=\"rememberSelection($event)\" (click)=\"setColorMode('GRADIENT')\">\r\n Gradient\r\n </button>\r\n </div>\r\n\r\n\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\" *ngIf=\"selectedColorType === 'SOLID'\">\r\n <mat-icon>format_color_text</mat-icon>\r\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\"\r\n [(ngModel)]=\"toolbarData.selectedColor\">\r\n </button>\r\n\r\n <div class=\"colorType\" *ngIf=\"selectedColorType === 'GRADIENT'\">\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); primaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"primaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #primaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\"\r\n [(ngModel)]=\"primaryColor\">\r\n </button>\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); secondaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"secondaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #secondaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\"\r\n [(ngModel)]=\"secondaryColor\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\"\r\n [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\r\n <div class=\"suggestion\" (click)=\"regenerateText()\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\"\r\n alt=\"\">\r\n <div>\r\n <p class=\"name\">Regenerate Text</p>\r\n <p class=\"desc\">Get a fresh variation of a current text</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #viewMode>\r\n <div class=\"read-only-text\" *ngIf=\"value\">\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\"></div>\r\n </div>\r\n</ng-template>", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;display:inline-block;overflow:visible;width:100%}.editor-container div{outline:none}.editable-text{line-height:unset;cursor:text}.toolbar{position:absolute;background:#fff;box-shadow:0 2px 5px #0003;display:flex;gap:5px;align-items:center;z-index:100000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:22px}.toolbar:hover{border:1px solid #ccc}.toolbar button{background:none;border:none;padding:5px 8px;cursor:pointer;font-weight:700;display:flex;align-items:center}.toolbar button:hover{background:#ddd}.toolbar select{padding:3px;border:none;outline:none;font-size:14px;font-weight:600;cursor:pointer}.toolbar input[type=color]{border:none;width:30px;height:30px;padding:0;cursor:pointer}.color-picker-btn{position:relative;background:none;border:none;cursor:pointer;padding:5px}.hidden-color-picker{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer}.border{border:none!important;border-radius:8px}.border:hover{border:1px solid #b9b9b9!important;border-radius:8px}.selectedTool{background:var(--primary-bg-color)!important;color:#fff;border-radius:5px}p{margin-bottom:0rem!important}.suggestion-box{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;z-index:10000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:10px}.suggestion{display:flex;gap:10px;width:307px;align-items:center;cursor:pointer}.suggestion img{border-radius:5px;width:32px;height:32px;background:#faf1fc;padding:3px}.suggestion .name{color:#000;font-family:var(--primary-font-family)}.suggestion .desc{color:#000;font-size:12px;color:#918585;font-family:var(--primary-font-family)}.colorType{display:flex;border:1px solid #E9E9E9;border-radius:5px;height:35px}.colorType .solid{border-right:1px solid #E9E9E9;font-size:14px!important;font-family:Mulish}.colorType .gradient{font-size:14px!important;font-family:Mulish}.solidColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-left-radius:5px;border-bottom-left-radius:5px}.gradientColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-right-radius:5px;border-bottom-right-radius:5px}@media screen and (max-width: 475px){.toolbar{max-width:100%;flex-wrap:wrap;row-gap:15px}.tool{width:max-content!important}}.drag-icon{color:var(--primary-bg-color)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ContenteditableValueAccessor, selector: "[contenteditable][ngModel]", inputs: ["contenteditable"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] }); }
518
518
  }
519
519
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextEditorComponent, decorators: [{
520
520
  type: Component,
@@ -524,7 +524,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
524
524
  ContenteditableValueAccessor,
525
525
  MatIconModule,
526
526
  CdkDrag
527
- ], template: "<!-- <div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement\r\n [class.d-none]=\"!editable && getText() == ''\"> -->\r\n <div *ngIf=\"editable; else viewMode\"\r\n class=\"editor-container\"\r\n [ngClass]=\"{'border': editable}\"\r\n #parentElement>\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text p-0\" (mouseup)=\"showToolbar($event)\" #editor\r\n (ngModelChange)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\" (paste)=\"onPaste($event)\">\r\n </div>\r\n\r\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\"\r\n [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar cdkDrag>\r\n <!-- <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\r\n <option value=\"H1\">Heading1</option>\r\n <option value=\"H2\">Heading2</option>\r\n <option value=\"H3\">Heading3</option>\r\n <option value=\"div\">Text</option>\r\n </select> -->\r\n <button class=\"tool\"> <mat-icon cdkDragHandle>drag_indicator</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon>\r\n format_bold</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon>\r\n format_italic</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"\r\n *ngIf=\"selectedColorType === 'SOLID'\"><mat-icon> format_underlined</mat-icon></button>\r\n\r\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\r\n <option value=\"\" selected>Default</option>\r\n <option value=\"clamp(0.75rem, 2vw, 1rem)\">Small</option>\r\n <option value=\"clamp(0.75rem, 2vw, 1.25rem)\">Medium</option>\r\n <option value=\"clamp(1rem, 3vw, 1.5rem)\">Semi Large</option>\r\n <option value=\"clamp(1.25rem, 4vw, 2rem)\">Large</option>\r\n <option value=\"clamp(2rem, 5vw, 3rem)\">Extra Large</option>\r\n <option value=\"clamp(3.1rem, 7vw, 4.5rem)\">Huge</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon>\r\n format_list_bulleted</mat-icon></button>\r\n\r\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon>\r\n format_align_left</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon>\r\n format_align_center</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyRight')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon>\r\n format_align_right</mat-icon></button>\r\n\r\n <div class=\"colorType\">\r\n <button class=\"solid\" [ngClass]=\"{'solidColorSelected': selectedColorType === 'SOLID'}\"\r\n (mousedown)=\"rememberSelection($event)\" (click)=\"setColorMode('SOLID')\">\r\n Solid\r\n </button>\r\n <button class=\"gradient\" [ngClass]=\"{'gradientColorSelected': selectedColorType === 'GRADIENT'}\"\r\n (mousedown)=\"rememberSelection($event)\" (click)=\"setColorMode('GRADIENT')\">\r\n Gradient\r\n </button>\r\n </div>\r\n\r\n\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\" *ngIf=\"selectedColorType === 'SOLID'\">\r\n <mat-icon>format_color_text</mat-icon>\r\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\"\r\n [(ngModel)]=\"toolbarData.selectedColor\">\r\n </button>\r\n\r\n <div class=\"colorType\" *ngIf=\"selectedColorType === 'GRADIENT'\">\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); primaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"primaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #primaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\"\r\n [(ngModel)]=\"primaryColor\">\r\n </button>\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); secondaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"secondaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #secondaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\"\r\n [(ngModel)]=\"secondaryColor\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\"\r\n [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\r\n <div class=\"suggestion\" (click)=\"regenerateText()\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\"\r\n alt=\"\">\r\n <div>\r\n <p class=\"name\">Regenerate Text</p>\r\n <p class=\"desc\">Get a fresh variation of a current text</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #viewMode>\r\n <div class=\"read-only-text\" *ngIf=\"value\">\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\"></div>\r\n </div>\r\n</ng-template>", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;display:inline-block;overflow:visible;width:100%}.editor-container div{outline:none}.editable-text{line-height:unset;cursor:text}.toolbar{position:absolute;background:#fff;box-shadow:0 2px 5px #0003;display:flex;gap:5px;align-items:center;z-index:100000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:22px}.toolbar:hover{border:1px solid #ccc}.toolbar button{background:none;border:none;padding:5px 8px;cursor:pointer;font-weight:700;display:flex;align-items:center}.toolbar button:hover{background:#ddd}.toolbar select{padding:3px;border:none;outline:none;font-size:14px;font-weight:600;cursor:pointer}.toolbar input[type=color]{border:none;width:30px;height:30px;padding:0;cursor:pointer}.color-picker-btn{position:relative;background:none;border:none;cursor:pointer;padding:5px}.hidden-color-picker{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer}.border{border:none!important;border-radius:8px}.border:hover{border:1px solid #b9b9b9!important;border-radius:8px}.selectedTool{background:var(--primary-bg-color)!important;color:#fff;border-radius:5px}p{margin-bottom:0rem!important}.suggestion-box{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;z-index:10000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:10px}.suggestion{display:flex;gap:10px;width:307px;align-items:center;cursor:pointer}.suggestion img{border-radius:5px;width:32px;height:32px;background:#faf1fc;padding:3px}.suggestion .name{color:#000;font-family:var(--primary-font-family)}.suggestion .desc{color:#000;font-size:12px;color:#918585;font-family:var(--primary-font-family)}.colorType{display:flex;border:1px solid #E9E9E9;border-radius:5px;height:35px}.colorType .solid{border-right:1px solid #E9E9E9;font-size:14px!important;font-family:Mulish}.colorType .gradient{font-size:14px!important;font-family:Mulish}.solidColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-left-radius:5px;border-bottom-left-radius:5px}.gradientColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-right-radius:5px;border-bottom-right-radius:5px}@media screen and (max-width: 475px){.toolbar{max-width:100%;flex-wrap:wrap;row-gap:15px}.tool{width:max-content!important}}.drag-icon{color:var(--primary-bg-color)!important}\n"] }]
527
+ ], template: "<!-- <div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement\r\n [class.d-none]=\"!editable && getText() == ''\"> -->\r\n<div *ngIf=\"editable; else viewMode\" class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement>\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text p-0\" (mouseup)=\"showToolbar($event)\"\r\n #editor (ngModelChange)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\" (paste)=\"onPaste($event)\">\r\n </div>\r\n\r\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\"\r\n [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar cdkDrag>\r\n <!-- <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\r\n <option value=\"H1\">Heading1</option>\r\n <option value=\"H2\">Heading2</option>\r\n <option value=\"H3\">Heading3</option>\r\n <option value=\"div\">Text</option>\r\n </select> -->\r\n <button class=\"tool\"> <mat-icon cdkDragHandle>drag_indicator</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon>\r\n format_bold</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon>\r\n format_italic</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"\r\n *ngIf=\"selectedColorType === 'SOLID'\"><mat-icon> format_underlined</mat-icon></button>\r\n\r\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\r\n <option value=\"\" selected>Default</option>\r\n <option value=\"clamp(0.75rem, 2vw, 1rem)\">Small</option>\r\n <option value=\"clamp(0.75rem, 2vw, 1.25rem)\">Medium</option>\r\n <option value=\"clamp(1rem, 3vw, 1.5rem)\">Semi Large</option>\r\n <option value=\"clamp(1.25rem, 4vw, 2rem)\">Large</option>\r\n <option value=\"clamp(2rem, 5vw, 3rem)\">Extra Large</option>\r\n <option value=\"clamp(3.1rem, 7vw, 4.5rem)\">Huge</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon>\r\n format_list_bulleted</mat-icon></button>\r\n\r\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon>\r\n format_align_left</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon>\r\n format_align_center</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyRight')\"\r\n [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon>\r\n format_align_right</mat-icon></button>\r\n\r\n <div class=\"colorType\">\r\n <button class=\"solid\" [ngClass]=\"{'solidColorSelected': selectedColorType === 'SOLID'}\"\r\n (mousedown)=\"rememberSelection($event)\" (click)=\"setColorMode('SOLID')\">\r\n Solid\r\n </button>\r\n <button class=\"gradient\" [ngClass]=\"{'gradientColorSelected': selectedColorType === 'GRADIENT'}\"\r\n (mousedown)=\"rememberSelection($event)\" (click)=\"setColorMode('GRADIENT')\">\r\n Gradient\r\n </button>\r\n </div>\r\n\r\n\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\" *ngIf=\"selectedColorType === 'SOLID'\">\r\n <mat-icon>format_color_text</mat-icon>\r\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\"\r\n [(ngModel)]=\"toolbarData.selectedColor\">\r\n </button>\r\n\r\n <div class=\"colorType\" *ngIf=\"selectedColorType === 'GRADIENT'\">\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); primaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"primaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #primaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\"\r\n [(ngModel)]=\"primaryColor\">\r\n </button>\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); secondaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"secondaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #secondaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\"\r\n [(ngModel)]=\"secondaryColor\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\"\r\n [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\r\n <div class=\"suggestion\" (click)=\"regenerateText()\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\"\r\n alt=\"\">\r\n <div>\r\n <p class=\"name\">Regenerate Text</p>\r\n <p class=\"desc\">Get a fresh variation of a current text</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #viewMode>\r\n <div class=\"read-only-text\" *ngIf=\"value\">\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\"></div>\r\n </div>\r\n</ng-template>", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;display:inline-block;overflow:visible;width:100%}.editor-container div{outline:none}.editable-text{line-height:unset;cursor:text}.toolbar{position:absolute;background:#fff;box-shadow:0 2px 5px #0003;display:flex;gap:5px;align-items:center;z-index:100000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:22px}.toolbar:hover{border:1px solid #ccc}.toolbar button{background:none;border:none;padding:5px 8px;cursor:pointer;font-weight:700;display:flex;align-items:center}.toolbar button:hover{background:#ddd}.toolbar select{padding:3px;border:none;outline:none;font-size:14px;font-weight:600;cursor:pointer}.toolbar input[type=color]{border:none;width:30px;height:30px;padding:0;cursor:pointer}.color-picker-btn{position:relative;background:none;border:none;cursor:pointer;padding:5px}.hidden-color-picker{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer}.border{border:none!important;border-radius:8px}.border:hover{border:1px solid #b9b9b9!important;border-radius:8px}.selectedTool{background:var(--primary-bg-color)!important;color:#fff;border-radius:5px}p{margin-bottom:0rem!important}.suggestion-box{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;z-index:10000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:10px}.suggestion{display:flex;gap:10px;width:307px;align-items:center;cursor:pointer}.suggestion img{border-radius:5px;width:32px;height:32px;background:#faf1fc;padding:3px}.suggestion .name{color:#000;font-family:var(--primary-font-family)}.suggestion .desc{color:#000;font-size:12px;color:#918585;font-family:var(--primary-font-family)}.colorType{display:flex;border:1px solid #E9E9E9;border-radius:5px;height:35px}.colorType .solid{border-right:1px solid #E9E9E9;font-size:14px!important;font-family:Mulish}.colorType .gradient{font-size:14px!important;font-family:Mulish}.solidColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-left-radius:5px;border-bottom-left-radius:5px}.gradientColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-right-radius:5px;border-bottom-right-radius:5px}@media screen and (max-width: 475px){.toolbar{max-width:100%;flex-wrap:wrap;row-gap:15px}.tool{width:max-content!important}}.drag-icon{color:var(--primary-bg-color)!important}\n"] }]
528
528
  }], ctorParameters: () => [{ type: i1.ElementServiceService }, { type: Object, decorators: [{
529
529
  type: Inject,
530
530
  args: [PLATFORM_ID]
@@ -556,4 +556,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
556
556
  }], type: [{
557
557
  type: Input
558
558
  }] } });
559
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBZWpELE1BQU0sT0FBTyxtQkFBbUI7SUFrQzlCLFlBQW9CLGFBQW9DLEVBQ3pCLFVBQWtCLEVBQ3ZDLE1BQWM7UUFGSixrQkFBYSxHQUFiLGFBQWEsQ0FBdUI7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUN2QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBOUJoQixxQkFBZ0IsR0FBMkIsSUFBSSxDQUFDO1FBRS9DLFVBQUssR0FBVyxxQ0FBcUMsQ0FBQztRQUNyRCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUtuQyxTQUFJLEdBQUcs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S0FBSyxDQUFDO0lBQ3BCLENBQUM7K0dBdGtCVSxtQkFBbUIsdURBbUNwQixXQUFXO21HQW5DVixtQkFBbUIsOHFCQ3JCaEMsdzFMQW9HYyw0OEVEeEZWLFlBQVkscVRBQ1osV0FBVywwZ0NBQ1gsNEJBQTRCLG1HQUM1QixhQUFhLG9MQUNiLE9BQU87OzRGQUtFLG1CQUFtQjtrQkFiL0IsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCw0QkFBNEI7d0JBQzVCLGFBQWE7d0JBQ2IsT0FBTztxQkFDUjs7MEJBdUNFLE1BQU07MkJBQUMsV0FBVzs4REFsQ29CLE9BQU87c0JBQS9DLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDQyxNQUFNO3NCQUE3QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1osV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNJLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFDa0IsVUFBVTtzQkFBckQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdqQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBOZ1pvbmUsIE91dHB1dCwgUExBVEZPUk1fSUQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRlbnRlZGl0YWJsZVZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudGVkaXRhYmxlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IEVsZW1lbnRTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uL2VkaXRvci1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLXRleHQtZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQ29udGVudGVkaXRhYmxlVmFsdWVBY2Nlc3NvcixcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBDZGtEcmFnXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dEVkaXRvckNvbXBvbmVudCB7XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhcicsIHsgc3RhdGljOiBmYWxzZSB9KSB0b29sYmFyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdlZGl0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgZWRpdG9yITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdjb2xvclBpY2tlcicpIGNvbG9yUGlja2VyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwYXJlbnRFbGVtZW50JykgcGFyZW50RWxlbWVudCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc3VnZ2VzdGlvbicsIHsgc3RhdGljOiBmYWxzZSB9KSBzdWdnZXN0aW9uITogRWxlbWVudFJlZjtcclxuICBwcml2YXRlIGxhc3RHcmFkaWVudFNwYW46IEhUTUxTcGFuRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nID0gJzxwPkhlbGxvIHRoaXMgaXMgcGFsYXNoIG1ha2hpamE8L3A+JztcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBASW5wdXQoKSBlZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlY3Rpb25JZD86IHN0cmluZztcclxuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcclxuICBASW5wdXQoKSB0eXBlPzogc3RyaW5nO1xyXG5cclxuICBzaG93ID0gZmFsc2U7XHJcbiAgdG9vbGJhclkgPSAwO1xyXG4gIHN1Z2dlc3Rpb25ZID0gMDtcclxuICByaWdodFplcm86IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dTdWdnZXN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9vbGJhckRhdGE6IGFueSA9IHtcclxuICAgIHNlbGVjdGVkSGVhZGluZzogJycsXHJcbiAgICBpc0JvbGQ6IGZhbHNlLFxyXG4gICAgaXNJdGFsaWM6IGZhbHNlLFxyXG4gICAgaXNVbmRlcmxpbmVkOiBmYWxzZSxcclxuICAgIHNlbGVjdGVkU2l6ZTogJycsXHJcbiAgICBzZWxlY3RlZExpc3Q6ICcnLFxyXG4gICAgc2VsZWN0ZWRBbGlnbm1lbnQ6ICcnLFxyXG4gICAgc2VsZWN0ZWRDb2xvcjogJyMwMDAwMDAnXHJcbiAgfVxyXG4gIHNlbGVjdGVkQ29sb3JUeXBlOiAnU09MSUQnIHwgJ0dSQURJRU5UJyA9ICdTT0xJRCc7XHJcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmcgPSAnIzAwMDAwMCc7XHJcbiAgc2Vjb25kYXJ5Q29sb3I6IGFueSA9ICcjYmQ1ZjVmZmYnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlU2VydmljZSxcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmhpZGVUb29sYmFyLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZFNpemUgPSB0aGlzLnR5cGUgPyB0aGlzLnR5cGUgPT09ICdoZWFkaW5nJyA/ICdjbGFtcCgxLjI1cmVtLCA0dncsIDJyZW0pJyA6ICcnIDogJyc7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGlkZVRvb2xiYXIuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RSYW5nZShyYW5nZTogUmFuZ2UpIHtcclxuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsKSByZXR1cm47XHJcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXJrU2VsZWN0aW9uKCk6IHsgc3RhcnQ6IEhUTUxFbGVtZW50OyBlbmQ6IEhUTUxFbGVtZW50IH0gfCBudWxsIHtcclxuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsIHx8IHNlbC5yYW5nZUNvdW50ID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgY29uc3QgZW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgc3RhcnQuc2V0QXR0cmlidXRlKCdkYXRhLXNlbC1zdGFydCcsICcxJyk7XHJcbiAgICBlbmQuc2V0QXR0cmlidXRlKCdkYXRhLXNlbC1lbmQnLCAnMScpO1xyXG4gICAgc3RhcnQuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgc3RhcnQuc3R5bGUud2lkdGggPSAnMCc7XHJcbiAgICBzdGFydC5zdHlsZS5oZWlnaHQgPSAnMCc7XHJcbiAgICBlbmQuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgZW5kLnN0eWxlLndpZHRoID0gJzAnO1xyXG4gICAgZW5kLnN0eWxlLmhlaWdodCA9ICcwJztcclxuXHJcbiAgICBjb25zdCBlbmRSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcclxuICAgIGVuZFJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gYXQgZW5kXHJcbiAgICBlbmRSYW5nZS5pbnNlcnROb2RlKGVuZCk7XHJcblxyXG4gICAgY29uc3Qgc3RhcnRSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcclxuICAgIHN0YXJ0UmFuZ2UuY29sbGFwc2UodHJ1ZSk7IC8vIGF0IHN0YXJ0XHJcbiAgICBzdGFydFJhbmdlLmluc2VydE5vZGUoc3RhcnQpO1xyXG5cclxuICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzdG9yZVNlbGVjdGlvbkZyb21NYXJrZXJzKG1hcmtlcnM6IHsgc3RhcnQ6IEhUTUxFbGVtZW50OyBlbmQ6IEhUTUxFbGVtZW50IH0gfCBudWxsKSB7XHJcbiAgICBpZiAoIW1hcmtlcnMpIHJldHVybjtcclxuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gbWFya2VycztcclxuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgbmV3UmFuZ2Uuc2V0U3RhcnRBZnRlcihzdGFydCk7XHJcbiAgICBuZXdSYW5nZS5zZXRFbmRCZWZvcmUoZW5kKTtcclxuXHJcbiAgICAvLyBDbGVhbiB1cCBtYXJrZXJzXHJcbiAgICBzdGFydC5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChzdGFydCk7XHJcbiAgICBlbmQucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoZW5kKTtcclxuXHJcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWwuYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG4gICAgdGhpcy5zYXZlZFJhbmdlID0gbmV3UmFuZ2UuY2xvbmVSYW5nZSgpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBzaG93VG9vbGJhcihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpIHx8ICF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbiA9PSBudWxsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IHJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHBhcmVudFJlY3QgPSB0aGlzLnBhcmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHRvcEZyb21QYXJlbnQgPSByZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wO1xyXG5cclxuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XHJcbiAgICAgIHRoaXMuc3VnZ2VzdGlvblkgPSB0b3BGcm9tUGFyZW50ICsgMzA7XHJcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnRvU3RyaW5nKCkudHJpbSgpICE9PSAnJykge1xyXG4gICAgICBjb25zdCB0b29sYmFyV2lkdGggPSA1NDE7XHJcblxyXG4gICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICAgIGNvbnN0IHJpZ2h0UG9zaXRvbiA9IHZpZXdwb3J0V2lkdGggLSBwYXJlbnRSZWN0LmxlZnQ7XHJcbiAgICAgIGlmIChyaWdodFBvc2l0b24gKyB0b29sYmFyV2lkdGggPiB2aWV3cG9ydFdpZHRoKSB7XHJcbiAgICAgICAgdGhpcy5yaWdodFplcm8gPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJpZ2h0WmVybyA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudG9vbGJhclkgPSB0b3BGcm9tUGFyZW50ICsgMzA7XHJcblxyXG4gICAgICB0aGlzLnJlRm9ybWF0dGluZ0RhdGEoKTtcclxuICAgICAgdGhpcy5yZWFkRm9ybWF0dGluZ1Byb3BlcnRpZXMoKTtcclxuXHJcbiAgICAgIHRoaXMuc2hvdyA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbWVtYmVyU2VsZWN0aW9uKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xyXG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbCAmJiBzZWwucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgdGhpcy5zYXZlZFJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpO1xyXG4gICAgfVxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBY3RpdmVSYW5nZSgpOiBSYW5nZSB8IG51bGwge1xyXG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgLy8gUHJlZmVyIHNhdmVkIGNsb25lLCBlbHNlIGxpdmUgc2VsZWN0aW9uIGNsb25lXHJcbiAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLnNhdmVkUmFuZ2VcclxuICAgICAgPz8gKHNlbCAmJiBzZWwucmFuZ2VDb3VudCA+IDAgPyBzZWwuZ2V0UmFuZ2VBdCgwKSA6IG51bGwpO1xyXG4gICAgaWYgKCFjYW5kaWRhdGUpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgcmFuZ2UgPSAoJ2Nsb25lUmFuZ2UnIGluIGNhbmRpZGF0ZSkgPyBjYW5kaWRhdGUuY2xvbmVSYW5nZSgpIDogY2FuZGlkYXRlO1xyXG4gICAgcmV0dXJuIHJhbmdlICYmICFyYW5nZS5jb2xsYXBzZWQgPyByYW5nZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvck1vZGUobW9kZTogJ1NPTElEJyB8ICdHUkFESUVOVCcpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb2xvclR5cGUgPSBtb2RlO1xyXG5cclxuICAgIGNvbnN0IG1hcmtlcnMgPSB0aGlzLm1hcmtTZWxlY3Rpb24oKTtcclxuICAgIGlmICghbWFya2VycykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG1hcmtlZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG1hcmtlZFJhbmdlLnNldFN0YXJ0QWZ0ZXIobWFya2Vycy5zdGFydCk7XHJcbiAgICBtYXJrZWRSYW5nZS5zZXRFbmRCZWZvcmUobWFya2Vycy5lbmQpO1xyXG5cclxuICAgIGlmIChtb2RlID09PSAnR1JBRElFTlQnKSB7XHJcbiAgICAgIGNvbnN0IGdyYWRpZW50ID0gYGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHt0aGlzLnByaW1hcnlDb2xvcn0gMCUsICR7dGhpcy5zZWNvbmRhcnlDb2xvcn0gMTAwJSlgO1xyXG4gICAgICB0aGlzLndyYXBSYW5nZVdpdGhHcmFkaWVudChtYXJrZWRSYW5nZSwgZ3JhZGllbnQpO1xyXG5cclxuICAgICAgbWFya2Vycy5zdGFydC5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChtYXJrZXJzLnN0YXJ0KTtcclxuICAgICAgbWFya2Vycy5lbmQucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQobWFya2Vycy5lbmQpO1xyXG5cclxuICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAoc2VsICYmIHNlbC5yYW5nZUNvdW50ID4gMCkgdGhpcy5zYXZlZFJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpO1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMudW53cmFwR3JhZGllbnRJblJhbmdlKG1hcmtlZFJhbmdlKTtcclxuXHJcblxyXG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uRnJvbU1hcmtlcnMobWFya2Vycyk7XHJcblxyXG5cclxuICAgIHRoaXMuc2V0U3R5bGVXaXRoQ1NTKHRydWUpO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvcmVDb2xvcicsIGZhbHNlLCB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQ29sb3IgfHwgJyMwMDAwMDAnKTtcclxuXHJcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsICYmIHNlbC5yYW5nZUNvdW50ID4gMCkgdGhpcy5zYXZlZFJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd3JhcFJhbmdlV2l0aEdyYWRpZW50KHJhbmdlOiBSYW5nZSwgZ3JhZGllbnQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkYXRhLWdyYWRpZW50JywgJ3RydWUnKTtcclxuICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gZ3JhZGllbnQ7XHJcbiAgICBzcGFuLnN0eWxlLmJhY2tncm91bmRDbGlwID0gJ3RleHQnO1xyXG4gICAgKHNwYW4uc3R5bGUgYXMgYW55KS53ZWJraXRCYWNrZ3JvdW5kQ2xpcCA9ICd0ZXh0JztcclxuICAgIChzcGFuLnN0eWxlIGFzIGFueSkud2Via2l0VGV4dEZpbGxDb2xvciA9ICd0cmFuc3BhcmVudCc7XHJcbiAgICBzcGFuLnN0eWxlLmNvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuXHJcbiAgICBjb25zdCBmcmFnID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XHJcbiAgICBzcGFuLmFwcGVuZENoaWxkKGZyYWcpO1xyXG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcclxuXHJcblxyXG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG5ld1JhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhzcGFuKTtcclxuICAgIHNlbD8uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG5cclxuICAgIHRoaXMubGFzdEdyYWRpZW50U3BhbiA9IHNwYW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVud3JhcEdyYWRpZW50SW5SYW5nZShyYW5nZTogUmFuZ2UpIHtcclxuICAgIGNvbnN0IHJvb3Q6IEhUTUxFbGVtZW50ID0gdGhpcy5lZGl0b3I/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoIXJvb3QpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzcGFucyA9IEFycmF5LmZyb20ocm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdzcGFuW2RhdGEtZ3JhZGllbnQ9XCJ0cnVlXCJdJykpIGFzIEhUTUxFbGVtZW50W107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IHNwYW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IHNwYW4gPSBzcGFuc1tpXTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAocmFuZ2UuaW50ZXJzZWN0c05vZGUoc3BhbikpIHtcclxuICAgICAgICAgIHdoaWxlIChzcGFuLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgc3Bhbi5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoc3Bhbi5maXJzdENoaWxkLCBzcGFuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNwYW4ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoc3Bhbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZVRvb2xiYXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVFZGl0b3IgPSB0aGlzLmVkaXRvcj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xyXG4gICAgY29uc3QgY2xpY2tlZEluc2lkZVRvb2xiYXIgPSB0aGlzLnRvb2xiYXI/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVTdWdnZXN0aW9uID0gdGhpcy5zdWdnZXN0aW9uPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XHJcblxyXG4gICAgaWYgKCFjbGlja2VkSW5zaWRlRWRpdG9yICYmICFjbGlja2VkSW5zaWRlVG9vbGJhcikge1xyXG4gICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghY2xpY2tlZEluc2lkZUVkaXRvciAmJiAhY2xpY2tlZEluc2lkZVN1Z2dlc3Rpb24pIHtcclxuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGV4dChjb21tYW5kOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgPSAnJykge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlKTtcclxuXHJcbiAgICBpZiAoY29tbWFuZCA9PT0gJ2JvbGQnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzQm9sZCA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzQm9sZDtcclxuICAgIGlmIChjb21tYW5kID09PSAnaXRhbGljJylcclxuICAgICAgdGhpcy50b29sYmFyRGF0YS5pc0l0YWxpYyA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzSXRhbGljO1xyXG4gICAgaWYgKGNvbW1hbmQgPT09ICd1bmRlcmxpbmUnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZCA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZFxyXG4gICAgaWYgKGNvbW1hbmQgPT09ICdpbnNlcnRPcmRlcmVkTGlzdCcgfHwgY29tbWFuZCA9PT0gJ2luc2VydFVub3JkZXJlZExpc3QnKSB7XHJcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID0gY29tbWFuZCA9PT0gdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPyAnJyA6IGNvbW1hbmQ7XHJcbiAgICAgIHRoaXMudXBkYXRlRlNmb3JPTCgpXHJcbiAgICAgIC8vIEFwcGx5IGN1cnJlbnQgc2l6ZSB0byB0aGUgbGlzdCB3cmFwcGVyIGFuZCBpdGVtc1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbW1hbmQgPT09ICdqdXN0aWZ5TGVmdCcgfHwgY29tbWFuZCA9PT0gJ2p1c3RpZnlDZW50ZXInIHx8IGNvbW1hbmQgPT09ICdqdXN0aWZ5UmlnaHQnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID0gY29tbWFuZCA9PT0gdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA/ICcnIDogY29tbWFuZDtcclxuICAgIGlmIChjb21tYW5kID09PSAnZm9ybWF0QmxvY2snKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRlNmb3JPTCgpIHtcclxuICAgIGNvbnN0IGNzc1NpemUgPSB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZTtcclxuICAgIGlmIChjc3NTaXplKSB7XHJcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbCAmJiBzZWwucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgICBjb25zdCBmb2N1cyA9IHNlbC5mb2N1c05vZGUgYXMgTm9kZTtcclxuICAgICAgICBjb25zdCBiYXNlRWwgPSAoZm9jdXMubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXHJcbiAgICAgICAgICA/IChmb2N1cyBhcyBFbGVtZW50KVxyXG4gICAgICAgICAgOiAoZm9jdXMucGFyZW50RWxlbWVudCBhcyBFbGVtZW50KSkgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgY29uc3QgbGlzdEVsID0gYmFzZUVsPy5jbG9zZXN0Py4oJ29sLCB1bCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgICAgICBpZiAobGlzdEVsKSB7XHJcbiAgICAgICAgICBsaXN0RWwuc3R5bGUuZm9udFNpemUgPSBjc3NTaXplO1xyXG4gICAgICAgICAgbGlzdEVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJykuZm9yRWFjaChsaSA9PiB7XHJcbiAgICAgICAgICAgIChsaSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZm9udFNpemUgPSBjc3NTaXplO1xyXG4gICAgICAgICAgICAobGkgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmNvbG9yID0gdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZENvbG9yXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3R5bGVXaXRoQ1NTKGVuYWJsZTogYm9vbGVhbikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3N0eWxlV2l0aENTUycsIGZhbHNlLCBlbmFibGUgPyAndHJ1ZScgOiAnZmFsc2UnKTtcclxuICAgIH0gY2F0Y2ggeyAvKiBzb21lIGVuZ2luZXMgaWdub3JlICovIH1cclxuICB9XHJcbiAgcHJpdmF0ZSB0b0xlZ2FjeUZvbnRTdGVwKGNzc1NpemU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtYXA6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XHJcbiAgICAgICcnOiAzLFxyXG4gICAgICAnY2xhbXAoMC43NXJlbSwgMnZ3LCAxcmVtKSc6IDIsXHJcbiAgICAgICdjbGFtcCgwLjc1cmVtLCAydncsIDEuMjVyZW0pJzogMyxcclxuICAgICAgJ2NsYW1wKDFyZW0sIDN2dywgMS41cmVtKSc6IDQsXHJcbiAgICAgICdjbGFtcCgxLjI1cmVtLCA0dncsIDJyZW0pJzogNSxcclxuICAgICAgJ2NsYW1wKDJyZW0sIDV2dywgM3JlbSknOiA2LFxyXG4gICAgICAnY2xhbXAoMy4xcmVtLCA3dncsIDQuNXJlbSknOiA3XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFN0cmluZyhtYXAuaGFzT3duUHJvcGVydHkoY3NzU2l6ZSkgPyBtYXBbY3NzU2l6ZV0gOiAzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbm9ybWFsaXplRm9udFNpemVUb0Nzcyhjc3NTaXplOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPSB0aGlzLmVkaXRvcj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XHJcbiAgICBjb25zdCBmb250cyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdmb250W3NpemVdJyk7XHJcbiAgICBmb250cy5mb3JFYWNoKChmb250RWw6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBpZiAoY3NzU2l6ZSkgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IGNzc1NpemU7XHJcbiAgICAgIHdoaWxlIChmb250RWwuZmlyc3RDaGlsZCkgc3Bhbi5hcHBlbmRDaGlsZChmb250RWwuZmlyc3RDaGlsZCk7XHJcbiAgICAgIGZvbnRFbC5wYXJlbnROb2RlPy5yZXBsYWNlQ2hpbGQoc3BhbiwgZm9udEVsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRm9udFNpemUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY3NzU2l6ZSA9IGV2ZW50LnRhcmdldC52YWx1ZSBhcyBzdHJpbmc7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5zZXRTdHlsZVdpdGhDU1ModHJ1ZSk7XHJcblxyXG4gICAgICBjb25zdCBzdGVwID0gdGhpcy50b0xlZ2FjeUZvbnRTdGVwKGNzc1NpemUpO1xyXG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgc3RlcCk7XHJcblxyXG4gICAgICB0aGlzLm5vcm1hbGl6ZUZvbnRTaXplVG9Dc3MoY3NzU2l6ZSk7XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZFNpemUgPSBjc3NTaXplO1xyXG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBjaGFuZ2VDb2xvcihldmVudDogYW55KSB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZSBhcyBzdHJpbmc7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgaWYgKHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNvbGxhcHNlZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRTdHlsZVdpdGhDU1ModHJ1ZSk7XHJcbiAgICAgIC8vICB0aGlzLnVud3JhcEdyYWRpZW50SW5TZWxlY3Rpb24oKTtcclxuXHJcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdmb3JlQ29sb3InLCBmYWxzZSwgY29sb3IpO1xyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRDb2xvciA9IGNvbG9yO1xyXG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRleHQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xyXG4gIH1cclxuXHJcbiAgb25Gb3JtYXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XHJcbiAgICB0aGlzLmZvcm1hdFRleHQoJ2Zvcm1hdEJsb2NrJywgc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb3BlbkNvbG9yUGlja2VyKCkge1xyXG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICByZWFkRm9ybWF0dGluZ1Byb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuO1xyXG4gICAgY29uc3Qgbm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgbm9kZSBpcyBudWxsXHJcbiAgICBpZiAoIW5vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZWxlbWVudCA9IG5vZGUucGFyZW50RWxlbWVudDtcclxuICAgIHdoaWxlIChlbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcclxuXHJcbiAgICAgIGlmIChub2RlTmFtZSA9PT0gJ0gxJyB8fCBub2RlTmFtZSA9PT0gJ0gyJyB8fCBub2RlTmFtZSA9PT0gJ0gzJykge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRIZWFkaW5nID0gbm9kZU5hbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdCJyB8fCBub2RlTmFtZSA9PT0gJ1NUUk9ORycpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzQm9sZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdJJyB8fCBub2RlTmFtZSA9PT0gJ0VNJykge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNJdGFsaWMgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnVScpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdPTCcpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkTGlzdCA9ICdpbnNlcnRPcmRlcmVkTGlzdCc7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdVTCcpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkTGlzdCA9ICdpbnNlcnRVbm9yZGVyZWRMaXN0JztcclxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnN0eWxlLnRleHRBbGlnbikge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRBbGlnbm1lbnQgPSBganVzdGlmeSR7ZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBlbGVtZW50LnN0eWxlLnRleHRBbGlnbi5zbGljZSgxKX1gO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuc3R5bGUuZm9udFNpemUpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZSA9IGVsZW1lbnQuc3R5bGUuZm9udFNpemU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5zdHlsZS5jb2xvcikge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRDb2xvciA9IGVsZW1lbnQuc3R5bGUuY29sb3JcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZUZvcm1hdHRpbmdEYXRhKCkge1xyXG4gICAgdGhpcy50b29sYmFyRGF0YSA9IHtcclxuICAgICAgc2VsZWN0ZWRIZWFkaW5nOiAnJyxcclxuICAgICAgaXNCb2xkOiBmYWxzZSxcclxuICAgICAgaXNJdGFsaWM6IGZhbHNlLFxyXG4gICAgICBpc1VuZGVybGluZWQ6IGZhbHNlLFxyXG4gICAgICBzZWxlY3RlZFNpemU6ICcnLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6ICcnLFxyXG4gICAgICBzZWxlY3RlZEFsaWdubWVudDogJycsXHJcbiAgICAgIHNlbGVjdGVkQ29sb3I6ICcnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VHcmFkaWVudENvbG9yKCkge1xyXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHNlbGVjdGlvbiBmaXJzdFxyXG4gICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oKTtcclxuXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNhdmVTZWxlY3Rpb24oKTtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JhZGllbnQgPSBgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAke3RoaXMucHJpbWFyeUNvbG9yfSAwJSwgJHt0aGlzLnNlY29uZGFyeUNvbG9yfSAxMDAlKWA7XHJcbiAgICAgICAgdGhpcy5hcHBseUdyYWRpZW50VG9UZXh0KGdyYWRpZW50KTtcclxuICAgICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LCAwKTtcclxuICAgICAgfSwgMTApOyAvLyAxMG1zIGRlbGF5IChhZGp1c3RhYmxlIGlmIG5lZWRlZClcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlHcmFkaWVudFRvVGV4dChncmFkaWVudFZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLmVkaXRvcj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghcm9vdCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGV4aXN0aW5nID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdzcGFuW2RhdGEtZ3JhZGllbnQ9XCJ0cnVlXCJdJykgYXMgSFRNTFNwYW5FbGVtZW50IHwgbnVsbDtcclxuICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICBleGlzdGluZy5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBncmFkaWVudFZhbHVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSByYW5nZS5leHRyYWN0Q29udGVudHMoKTtcclxuXHJcbiAgICBjb25zdCBzcGFuOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICBzcGFuLnNldEF0dHJpYnV0ZSgnZGF0YS1ncmFkaWVudCcsICd0cnVlJyk7IC8vIG1hcmsgZm9yIGZ1dHVyZSB1cGRhdGVzXHJcbiAgICBzcGFuLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGdyYWRpZW50VmFsdWU7XHJcbiAgICBzcGFuLnN0eWxlLmJhY2tncm91bmRDbGlwID0gJ3RleHQnO1xyXG4gICAgc3Bhbi5zdHlsZS53ZWJraXRCYWNrZ3JvdW5kQ2xpcCA9ICd0ZXh0JztcclxuICAgIHNwYW4uc3R5bGUuY29sb3IgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgc3Bhbi5zdHlsZS53ZWJraXRUZXh0RmlsbENvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAvLyBmaXggZnJvbSBpbmxpbmVTaXplPSdibG9jaydcclxuXHJcbiAgICBzcGFuLmFwcGVuZENoaWxkKHNlbGVjdGVkQ29udGVudCk7XHJcbiAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG5cclxuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG5ld1JhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhzcGFuKTtcclxuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHJlZ2VuZXJhdGVUZXh0KCkge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGJ1c2luZXNzSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXHJcbiAgICAgIGRhdGFJZDogdGhpcy5zZWN0aW9uSWQsXHJcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXHJcbiAgICAgIHN1Z2dlc3RlZERhdGFUeXBlOiAnQ09NUE9ORU5UJyxcclxuICAgICAgdG9uZTogJ1BST0ZFU1NJT05BTCcsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICBsYWJlbDogdGhpcy5sYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZWdlbmVyYXRlVGV4dChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSByZXMuZGF0YTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVkUmFuZ2U6IFJhbmdlIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICBzYXZlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgdGhpcy5zYXZlZFJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXN0b3JlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2F2ZWRSYW5nZSkge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UodGhpcy5zYXZlZFJhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIEdldCBvbmx5IHBsYWluIHRleHRcclxuICAgIGNvbnN0IHRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0L3BsYWluJykgfHwgJyc7XHJcblxyXG4gICAgLy8gSW5zZXJ0IGFzIHBsYWluIHRleHRcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsIHRleHQpO1xyXG4gIH1cclxuXHJcbiAgc3RyaXBTdHlsZXMoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xyXG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2MuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTsgLy8gUmVtb3ZlIGFsbCBpbmxpbmUgc3R5bGVzXHJcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTsgLy8gT3B0aW9uYWxcclxuICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGBjb2xvcjogJHt0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQ29sb3J9YCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkb2MuYm9keS5pbm5lckhUTUw7XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0KCkge1xyXG4gICAgY29uc3QgdGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlPy5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgXCJcIik/LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCkgPz8gXCJcIjtcclxuICAgIGlmICghdGV4dENvbnRlbnQpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPCEtLSA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnYm9yZGVyJzogZWRpdGFibGV9XCIgI3BhcmVudEVsZW1lbnRcclxuICBbY2xhc3MuZC1ub25lXT1cIiFlZGl0YWJsZSAmJiBnZXRUZXh0KCkgPT0gJydcIj4gLS0+XHJcbiAgPGRpdiAqbmdJZj1cImVkaXRhYmxlOyBlbHNlIHZpZXdNb2RlXCJcclxuICAgICBjbGFzcz1cImVkaXRvci1jb250YWluZXJcIlxyXG4gICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyJzogZWRpdGFibGV9XCJcclxuICAgICAjcGFyZW50RWxlbWVudD5cclxuICA8ZGl2IFtjb250ZW50ZWRpdGFibGVdPVwiZWRpdGFibGVcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgY2xhc3M9XCJlZGl0YWJsZS10ZXh0IHAtMFwiIChtb3VzZXVwKT1cInNob3dUb29sYmFyKCRldmVudClcIiAjZWRpdG9yXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVUZXh0KCRldmVudClcIiAobW91c2Vkb3duKT1cImhpZGVUb29sYmFyKCRldmVudClcIiAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJ0b29sYmFyXCIgKm5nSWY9XCJlZGl0YWJsZSAmJiBzaG93XCIgW25nU3R5bGVdPVwieyd0b3AucHgnOiB0b29sYmFyWX1cIlxyXG4gICAgW3N0eWxlLnJpZ2h0XT1cInJpZ2h0WmVybyA/ICcwcHgnIDogJ2F1dG8nXCIgW3N0eWxlLmxlZnRdPVwiIXJpZ2h0WmVybyA/ICcwcHgnIDogJ2F1dG8nXCIgI3Rvb2xiYXIgY2RrRHJhZz5cclxuICAgIDwhLS0gPHNlbGVjdCBjbGFzcz1cInRvb2xcIiAoY2hhbmdlKT1cIm9uRm9ybWF0Q2hhbmdlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZ1wiPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiSDFcIj5IZWFkaW5nMTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiSDJcIj5IZWFkaW5nMjwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiSDNcIj5IZWFkaW5nMzwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiZGl2XCI+VGV4dDwvb3B0aW9uPlxyXG4gICAgPC9zZWxlY3Q+IC0tPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIj4gPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnYm9sZCcpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5pc0JvbGR9XCI+PG1hdC1pY29uPlxyXG4gICAgICAgIGZvcm1hdF9ib2xkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2l0YWxpYycpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5pc0l0YWxpY31cIj48bWF0LWljb24+XHJcbiAgICAgICAgZm9ybWF0X2l0YWxpYzwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCd1bmRlcmxpbmUnKVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuaXNVbmRlcmxpbmVkfVwiXHJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb2xvclR5cGUgPT09ICdTT0xJRCdcIj48bWF0LWljb24+IGZvcm1hdF91bmRlcmxpbmVkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuXHJcbiAgICA8c2VsZWN0IGNsYXNzPVwidG9vbFwiIChjaGFuZ2UpPVwiY2hhbmdlRm9udFNpemUoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwidG9vbGJhckRhdGEuc2VsZWN0ZWRTaXplXCI+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBzZWxlY3RlZD5EZWZhdWx0PC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJjbGFtcCgwLjc1cmVtLCAydncsIDFyZW0pXCI+U21hbGw8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImNsYW1wKDAuNzVyZW0sIDJ2dywgMS4yNXJlbSlcIj5NZWRpdW08L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImNsYW1wKDFyZW0sIDN2dywgMS41cmVtKVwiPlNlbWkgTGFyZ2U8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImNsYW1wKDEuMjVyZW0sIDR2dywgMnJlbSlcIj5MYXJnZTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiY2xhbXAoMnJlbSwgNXZ3LCAzcmVtKVwiPkV4dHJhIExhcmdlPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJjbGFtcCgzLjFyZW0sIDd2dywgNC41cmVtKVwiPkh1Z2U8L29wdGlvbj5cclxuICAgIDwvc2VsZWN0PlxyXG5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2luc2VydE9yZGVyZWRMaXN0JylcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkTGlzdCA9PT0gJ2luc2VydE9yZGVyZWRMaXN0J31cIj48bWF0LWljb24+Zm9ybWF0X2xpc3RfbnVtYmVyZWQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCJcclxuICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPT09ICdpbnNlcnRVbm9yZGVyZWRMaXN0J31cIj48bWF0LWljb24+XHJcbiAgICAgICAgZm9ybWF0X2xpc3RfYnVsbGV0ZWQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2p1c3RpZnlMZWZ0JylcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID09PSAnanVzdGlmeUxlZnQnfVwiPjxtYXQtaWNvbj5cclxuICAgICAgICBmb3JtYXRfYWxpZ25fbGVmdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdqdXN0aWZ5Q2VudGVyJylcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID09PSAnanVzdGlmeUNlbnRlcid9XCI+PG1hdC1pY29uPlxyXG4gICAgICAgIGZvcm1hdF9hbGlnbl9jZW50ZXI8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnanVzdGlmeVJpZ2h0JylcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID09PSAnanVzdGlmeVJpZ2h0J31cIj48bWF0LWljb24+XHJcbiAgICAgICAgZm9ybWF0X2FsaWduX3JpZ2h0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sb3JUeXBlXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJzb2xpZFwiIFtuZ0NsYXNzXT1cInsnc29saWRDb2xvclNlbGVjdGVkJzogc2VsZWN0ZWRDb2xvclR5cGUgPT09ICdTT0xJRCd9XCJcclxuICAgICAgICAobW91c2Vkb3duKT1cInJlbWVtYmVyU2VsZWN0aW9uKCRldmVudClcIiAoY2xpY2spPVwic2V0Q29sb3JNb2RlKCdTT0xJRCcpXCI+XHJcbiAgICAgICAgU29saWRcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJncmFkaWVudFwiIFtuZ0NsYXNzXT1cInsnZ3JhZGllbnRDb2xvclNlbGVjdGVkJzogc2VsZWN0ZWRDb2xvclR5cGUgPT09ICdHUkFESUVOVCd9XCJcclxuICAgICAgICAobW91c2Vkb3duKT1cInJlbWVtYmVyU2VsZWN0aW9uKCRldmVudClcIiAoY2xpY2spPVwic2V0Q29sb3JNb2RlKCdHUkFESUVOVCcpXCI+XHJcbiAgICAgICAgR3JhZGllbnRcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgY29sb3ItcGlja2VyLWJ0blwiIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoKVwiICpuZ0lmPVwic2VsZWN0ZWRDb2xvclR5cGUgPT09ICdTT0xJRCdcIj5cclxuICAgICAgPG1hdC1pY29uPmZvcm1hdF9jb2xvcl90ZXh0PC9tYXQtaWNvbj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiICNjb2xvclBpY2tlciBjbGFzcz1cImhpZGRlbi1jb2xvci1waWNrZXJcIiAoaW5wdXQpPVwiY2hhbmdlQ29sb3IoJGV2ZW50KVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ0b29sYmFyRGF0YS5zZWxlY3RlZENvbG9yXCI+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sb3JUeXBlXCIgKm5nSWY9XCJzZWxlY3RlZENvbG9yVHlwZSA9PT0gJ0dSQURJRU5UJ1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwidG9vbCBjb2xvci1waWNrZXItYnRuXCIgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcigpOyBwcmltYXJ5Q29sb3JQaWNrZXIuY2xpY2soKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBbc3R5bGUuY29sb3JdPVwicHJpbWFyeUNvbG9yXCI+Zm9ybWF0X2NvbG9yX3RleHQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiAjcHJpbWFyeUNvbG9yUGlja2VyIGNsYXNzPVwiaGlkZGVuLWNvbG9yLXBpY2tlclwiIChpbnB1dCk9XCJjaGFuZ2VHcmFkaWVudENvbG9yKClcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJwcmltYXJ5Q29sb3JcIj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIGNvbG9yLXBpY2tlci1idG5cIiAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCk7IHNlY29uZGFyeUNvbG9yUGlja2VyLmNsaWNrKClcIj5cclxuICAgICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cInNlY29uZGFyeUNvbG9yXCI+Zm9ybWF0X2NvbG9yX3RleHQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiAjc2Vjb25kYXJ5Q29sb3JQaWNrZXIgY2xhc3M9XCJoaWRkZW4tY29sb3ItcGlja2VyXCIgKGlucHV0KT1cImNoYW5nZUdyYWRpZW50Q29sb3IoKVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY29uZGFyeUNvbG9yXCI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJzdWdnZXN0aW9uLWJveFwiIFtuZ1N0eWxlXT1cInsndG9wLnB4Jzogc3VnZ2VzdGlvbll9XCIgW3N0eWxlLnJpZ2h0XT1cInJpZ2h0WmVybyA/ICcwcHgnIDogJ2F1dG8nXCJcclxuICAgIFtzdHlsZS5sZWZ0XT1cIiFyaWdodFplcm8gPyAnMHB4JyA6ICdhdXRvJ1wiICpuZ0lmPVwiZWRpdGFibGUgJiYgbGFiZWwgJiYgc2hvd1N1Z2dlc3Rpb25cIiAjc3VnZ2VzdGlvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJzdWdnZXN0aW9uXCIgKGNsaWNrKT1cInJlZ2VuZXJhdGVUZXh0KClcIj5cclxuICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzg4NzQ5M2MxNzQyMjczOTcwMTUxRnJhbWUlMjAxMjQ0ODMxNzQwLnBuZ1wiXHJcbiAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJuYW1lXCI+UmVnZW5lcmF0ZSBUZXh0PC9wPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiZGVzY1wiPkdldCBhIGZyZXNoIHZhcmlhdGlvbiBvZiBhIGN1cnJlbnQgdGV4dDwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxuZy10ZW1wbGF0ZSAjdmlld01vZGU+XHJcbiAgPGRpdiBjbGFzcz1cInJlYWQtb25seS10ZXh0XCIgKm5nSWY9XCJ2YWx1ZVwiPlxyXG4gICAgPGRpdiBbY29udGVudGVkaXRhYmxlXT1cImVkaXRhYmxlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
559
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBZWpELE1BQU0sT0FBTyxtQkFBbUI7SUFrQzlCLFlBQW9CLGFBQW9DLEVBQ3pCLFVBQWtCLEVBQ3ZDLE1BQWM7UUFGSixrQkFBYSxHQUFiLGFBQWEsQ0FBdUI7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUN2QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBOUJoQixxQkFBZ0IsR0FBMkIsSUFBSSxDQUFDO1FBRS9DLFVBQUssR0FBVyxxQ0FBcUMsQ0FBQztRQUNyRCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUtuQyxTQUFJLEdBQUcs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S0FBSyxDQUFDO0lBQ3BCLENBQUM7K0dBdGtCVSxtQkFBbUIsdURBbUNwQixXQUFXO21HQW5DVixtQkFBbUIsOHFCQ3JCaEMsOHpMQWlHYyw0OEVEckZWLFlBQVkscVRBQ1osV0FBVywwZ0NBQ1gsNEJBQTRCLG1HQUM1QixhQUFhLG9MQUNiLE9BQU87OzRGQUtFLG1CQUFtQjtrQkFiL0IsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCw0QkFBNEI7d0JBQzVCLGFBQWE7d0JBQ2IsT0FBTztxQkFDUjs7MEJBdUNFLE1BQU07MkJBQUMsV0FBVzs4REFsQ29CLE9BQU87c0JBQS9DLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDQyxNQUFNO3NCQUE3QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1osV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNJLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFDa0IsVUFBVTtzQkFBckQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdqQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBOZ1pvbmUsIE91dHB1dCwgUExBVEZPUk1fSUQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRlbnRlZGl0YWJsZVZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudGVkaXRhYmxlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IEVsZW1lbnRTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uL2VkaXRvci1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLXRleHQtZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQ29udGVudGVkaXRhYmxlVmFsdWVBY2Nlc3NvcixcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBDZGtEcmFnXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dEVkaXRvckNvbXBvbmVudCB7XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhcicsIHsgc3RhdGljOiBmYWxzZSB9KSB0b29sYmFyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdlZGl0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgZWRpdG9yITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdjb2xvclBpY2tlcicpIGNvbG9yUGlja2VyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwYXJlbnRFbGVtZW50JykgcGFyZW50RWxlbWVudCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc3VnZ2VzdGlvbicsIHsgc3RhdGljOiBmYWxzZSB9KSBzdWdnZXN0aW9uITogRWxlbWVudFJlZjtcclxuICBwcml2YXRlIGxhc3RHcmFkaWVudFNwYW46IEhUTUxTcGFuRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nID0gJzxwPkhlbGxvIHRoaXMgaXMgcGFsYXNoIG1ha2hpamE8L3A+JztcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBASW5wdXQoKSBlZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlY3Rpb25JZD86IHN0cmluZztcclxuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcclxuICBASW5wdXQoKSB0eXBlPzogc3RyaW5nO1xyXG5cclxuICBzaG93ID0gZmFsc2U7XHJcbiAgdG9vbGJhclkgPSAwO1xyXG4gIHN1Z2dlc3Rpb25ZID0gMDtcclxuICByaWdodFplcm86IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dTdWdnZXN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9vbGJhckRhdGE6IGFueSA9IHtcclxuICAgIHNlbGVjdGVkSGVhZGluZzogJycsXHJcbiAgICBpc0JvbGQ6IGZhbHNlLFxyXG4gICAgaXNJdGFsaWM6IGZhbHNlLFxyXG4gICAgaXNVbmRlcmxpbmVkOiBmYWxzZSxcclxuICAgIHNlbGVjdGVkU2l6ZTogJycsXHJcbiAgICBzZWxlY3RlZExpc3Q6ICcnLFxyXG4gICAgc2VsZWN0ZWRBbGlnbm1lbnQ6ICcnLFxyXG4gICAgc2VsZWN0ZWRDb2xvcjogJyMwMDAwMDAnXHJcbiAgfVxyXG4gIHNlbGVjdGVkQ29sb3JUeXBlOiAnU09MSUQnIHwgJ0dSQURJRU5UJyA9ICdTT0xJRCc7XHJcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmcgPSAnIzAwMDAwMCc7XHJcbiAgc2Vjb25kYXJ5Q29sb3I6IGFueSA9ICcjYmQ1ZjVmZmYnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlU2VydmljZSxcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmhpZGVUb29sYmFyLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZFNpemUgPSB0aGlzLnR5cGUgPyB0aGlzLnR5cGUgPT09ICdoZWFkaW5nJyA/ICdjbGFtcCgxLjI1cmVtLCA0dncsIDJyZW0pJyA6ICcnIDogJyc7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGlkZVRvb2xiYXIuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RSYW5nZShyYW5nZTogUmFuZ2UpIHtcclxuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsKSByZXR1cm47XHJcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXJrU2VsZWN0aW9uKCk6IHsgc3RhcnQ6IEhUTUxFbGVtZW50OyBlbmQ6IEhUTUxFbGVtZW50IH0gfCBudWxsIHtcclxuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsIHx8IHNlbC5yYW5nZUNvdW50ID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgY29uc3QgZW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgc3RhcnQuc2V0QXR0cmlidXRlKCdkYXRhLXNlbC1zdGFydCcsICcxJyk7XHJcbiAgICBlbmQuc2V0QXR0cmlidXRlKCdkYXRhLXNlbC1lbmQnLCAnMScpO1xyXG4gICAgc3RhcnQuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgc3RhcnQuc3R5bGUud2lkdGggPSAnMCc7XHJcbiAgICBzdGFydC5zdHlsZS5oZWlnaHQgPSAnMCc7XHJcbiAgICBlbmQuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgZW5kLnN0eWxlLndpZHRoID0gJzAnO1xyXG4gICAgZW5kLnN0eWxlLmhlaWdodCA9ICcwJztcclxuXHJcbiAgICBjb25zdCBlbmRSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcclxuICAgIGVuZFJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gYXQgZW5kXHJcbiAgICBlbmRSYW5nZS5pbnNlcnROb2RlKGVuZCk7XHJcblxyXG4gICAgY29uc3Qgc3RhcnRSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcclxuICAgIHN0YXJ0UmFuZ2UuY29sbGFwc2UodHJ1ZSk7IC8vIGF0IHN0YXJ0XHJcbiAgICBzdGFydFJhbmdlLmluc2VydE5vZGUoc3RhcnQpO1xyXG5cclxuICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzdG9yZVNlbGVjdGlvbkZyb21NYXJrZXJzKG1hcmtlcnM6IHsgc3RhcnQ6IEhUTUxFbGVtZW50OyBlbmQ6IEhUTUxFbGVtZW50IH0gfCBudWxsKSB7XHJcbiAgICBpZiAoIW1hcmtlcnMpIHJldHVybjtcclxuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gbWFya2VycztcclxuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgbmV3UmFuZ2Uuc2V0U3RhcnRBZnRlcihzdGFydCk7XHJcbiAgICBuZXdSYW5nZS5zZXRFbmRCZWZvcmUoZW5kKTtcclxuXHJcbiAgICAvLyBDbGVhbiB1cCBtYXJrZXJzXHJcbiAgICBzdGFydC5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChzdGFydCk7XHJcbiAgICBlbmQucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoZW5kKTtcclxuXHJcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWwuYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG4gICAgdGhpcy5zYXZlZFJhbmdlID0gbmV3UmFuZ2UuY2xvbmVSYW5nZSgpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBzaG93VG9vbGJhcihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpIHx8ICF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbiA9PSBudWxsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IHJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHBhcmVudFJlY3QgPSB0aGlzLnBhcmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHRvcEZyb21QYXJlbnQgPSByZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wO1xyXG5cclxuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XHJcbiAgICAgIHRoaXMuc3VnZ2VzdGlvblkgPSB0b3BGcm9tUGFyZW50ICsgMzA7XHJcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnRvU3RyaW5nKCkudHJpbSgpICE9PSAnJykge1xyXG4gICAgICBjb25zdCB0b29sYmFyV2lkdGggPSA1NDE7XHJcblxyXG4gICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICAgIGNvbnN0IHJpZ2h0UG9zaXRvbiA9IHZpZXdwb3J0V2lkdGggLSBwYXJlbnRSZWN0LmxlZnQ7XHJcbiAgICAgIGlmIChyaWdodFBvc2l0b24gKyB0b29sYmFyV2lkdGggPiB2aWV3cG9ydFdpZHRoKSB7XHJcbiAgICAgICAgdGhpcy5yaWdodFplcm8gPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJpZ2h0WmVybyA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudG9vbGJhclkgPSB0b3BGcm9tUGFyZW50ICsgMzA7XHJcblxyXG4gICAgICB0aGlzLnJlRm9ybWF0dGluZ0RhdGEoKTtcclxuICAgICAgdGhpcy5yZWFkRm9ybWF0dGluZ1Byb3BlcnRpZXMoKTtcclxuXHJcbiAgICAgIHRoaXMuc2hvdyA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbWVtYmVyU2VsZWN0aW9uKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xyXG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbCAmJiBzZWwucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgdGhpcy5zYXZlZFJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpO1xyXG4gICAgfVxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBY3RpdmVSYW5nZSgpOiBSYW5nZSB8IG51bGwge1xyXG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgLy8gUHJlZmVyIHNhdmVkIGNsb25lLCBlbHNlIGxpdmUgc2VsZWN0aW9uIGNsb25lXHJcbiAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLnNhdmVkUmFuZ2VcclxuICAgICAgPz8gKHNlbCAmJiBzZWwucmFuZ2VDb3VudCA+IDAgPyBzZWwuZ2V0UmFuZ2VBdCgwKSA6IG51bGwpO1xyXG4gICAgaWYgKCFjYW5kaWRhdGUpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgcmFuZ2UgPSAoJ2Nsb25lUmFuZ2UnIGluIGNhbmRpZGF0ZSkgPyBjYW5kaWRhdGUuY2xvbmVSYW5nZSgpIDogY2FuZGlkYXRlO1xyXG4gICAgcmV0dXJuIHJhbmdlICYmICFyYW5nZS5jb2xsYXBzZWQgPyByYW5nZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRDb2xvck1vZGUobW9kZTogJ1NPTElEJyB8ICdHUkFESUVOVCcpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb2xvclR5cGUgPSBtb2RlO1xyXG5cclxuICAgIGNvbnN0IG1hcmtlcnMgPSB0aGlzLm1hcmtTZWxlY3Rpb24oKTtcclxuICAgIGlmICghbWFya2VycykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG1hcmtlZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG1hcmtlZFJhbmdlLnNldFN0YXJ0QWZ0ZXIobWFya2Vycy5zdGFydCk7XHJcbiAgICBtYXJrZWRSYW5nZS5zZXRFbmRCZWZvcmUobWFya2Vycy5lbmQpO1xyXG5cclxuICAgIGlmIChtb2RlID09PSAnR1JBRElFTlQnKSB7XHJcbiAgICAgIGNvbnN0IGdyYWRpZW50ID0gYGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHt0aGlzLnByaW1hcnlDb2xvcn0gMCUsICR7dGhpcy5zZWNvbmRhcnlDb2xvcn0gMTAwJSlgO1xyXG4gICAgICB0aGlzLndyYXBSYW5nZVdpdGhHcmFkaWVudChtYXJrZWRSYW5nZSwgZ3JhZGllbnQpO1xyXG5cclxuICAgICAgbWFya2Vycy5zdGFydC5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChtYXJrZXJzLnN0YXJ0KTtcclxuICAgICAgbWFya2Vycy5lbmQucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQobWFya2Vycy5lbmQpO1xyXG5cclxuICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAoc2VsICYmIHNlbC5yYW5nZUNvdW50ID4gMCkgdGhpcy5zYXZlZFJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpO1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMudW53cmFwR3JhZGllbnRJblJhbmdlKG1hcmtlZFJhbmdlKTtcclxuXHJcblxyXG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uRnJvbU1hcmtlcnMobWFya2Vycyk7XHJcblxyXG5cclxuICAgIHRoaXMuc2V0U3R5bGVXaXRoQ1NTKHRydWUpO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvcmVDb2xvcicsIGZhbHNlLCB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQ29sb3IgfHwgJyMwMDAwMDAnKTtcclxuXHJcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsICYmIHNlbC5yYW5nZUNvdW50ID4gMCkgdGhpcy5zYXZlZFJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd3JhcFJhbmdlV2l0aEdyYWRpZW50KHJhbmdlOiBSYW5nZSwgZ3JhZGllbnQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkYXRhLWdyYWRpZW50JywgJ3RydWUnKTtcclxuICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gZ3JhZGllbnQ7XHJcbiAgICBzcGFuLnN0eWxlLmJhY2tncm91bmRDbGlwID0gJ3RleHQnO1xyXG4gICAgKHNwYW4uc3R5bGUgYXMgYW55KS53ZWJraXRCYWNrZ3JvdW5kQ2xpcCA9ICd0ZXh0JztcclxuICAgIChzcGFuLnN0eWxlIGFzIGFueSkud2Via2l0VGV4dEZpbGxDb2xvciA9ICd0cmFuc3BhcmVudCc7XHJcbiAgICBzcGFuLnN0eWxlLmNvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuXHJcbiAgICBjb25zdCBmcmFnID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XHJcbiAgICBzcGFuLmFwcGVuZENoaWxkKGZyYWcpO1xyXG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcclxuXHJcblxyXG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG5ld1JhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhzcGFuKTtcclxuICAgIHNlbD8uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG5cclxuICAgIHRoaXMubGFzdEdyYWRpZW50U3BhbiA9IHNwYW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVud3JhcEdyYWRpZW50SW5SYW5nZShyYW5nZTogUmFuZ2UpIHtcclxuICAgIGNvbnN0IHJvb3Q6IEhUTUxFbGVtZW50ID0gdGhpcy5lZGl0b3I/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoIXJvb3QpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzcGFucyA9IEFycmF5LmZyb20ocm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdzcGFuW2RhdGEtZ3JhZGllbnQ9XCJ0cnVlXCJdJykpIGFzIEhUTUxFbGVtZW50W107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IHNwYW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IHNwYW4gPSBzcGFuc1tpXTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAocmFuZ2UuaW50ZXJzZWN0c05vZGUoc3BhbikpIHtcclxuICAgICAgICAgIHdoaWxlIChzcGFuLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgc3Bhbi5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoc3Bhbi5maXJzdENoaWxkLCBzcGFuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNwYW4ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoc3Bhbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZVRvb2xiYXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVFZGl0b3IgPSB0aGlzLmVkaXRvcj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xyXG4gICAgY29uc3QgY2xpY2tlZEluc2lkZVRvb2xiYXIgPSB0aGlzLnRvb2xiYXI/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVTdWdnZXN0aW9uID0gdGhpcy5zdWdnZXN0aW9uPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XHJcblxyXG4gICAgaWYgKCFjbGlja2VkSW5zaWRlRWRpdG9yICYmICFjbGlja2VkSW5zaWRlVG9vbGJhcikge1xyXG4gICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghY2xpY2tlZEluc2lkZUVkaXRvciAmJiAhY2xpY2tlZEluc2lkZVN1Z2dlc3Rpb24pIHtcclxuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGV4dChjb21tYW5kOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgPSAnJykge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlKTtcclxuXHJcbiAgICBpZiAoY29tbWFuZCA9PT0gJ2JvbGQnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzQm9sZCA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzQm9sZDtcclxuICAgIGlmIChjb21tYW5kID09PSAnaXRhbGljJylcclxuICAgICAgdGhpcy50b29sYmFyRGF0YS5pc0l0YWxpYyA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzSXRhbGljO1xyXG4gICAgaWYgKGNvbW1hbmQgPT09ICd1bmRlcmxpbmUnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZCA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZFxyXG4gICAgaWYgKGNvbW1hbmQgPT09ICdpbnNlcnRPcmRlcmVkTGlzdCcgfHwgY29tbWFuZCA9PT0gJ2luc2VydFVub3JkZXJlZExpc3QnKSB7XHJcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID0gY29tbWFuZCA9PT0gdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPyAnJyA6IGNvbW1hbmQ7XHJcbiAgICAgIHRoaXMudXBkYXRlRlNmb3JPTCgpXHJcbiAgICAgIC8vIEFwcGx5IGN1cnJlbnQgc2l6ZSB0byB0aGUgbGlzdCB3cmFwcGVyIGFuZCBpdGVtc1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbW1hbmQgPT09ICdqdXN0aWZ5TGVmdCcgfHwgY29tbWFuZCA9PT0gJ2p1c3RpZnlDZW50ZXInIHx8IGNvbW1hbmQgPT09ICdqdXN0aWZ5UmlnaHQnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID0gY29tbWFuZCA9PT0gdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA/ICcnIDogY29tbWFuZDtcclxuICAgIGlmIChjb21tYW5kID09PSAnZm9ybWF0QmxvY2snKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRlNmb3JPTCgpIHtcclxuICAgIGNvbnN0IGNzc1NpemUgPSB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZTtcclxuICAgIGlmIChjc3NTaXplKSB7XHJcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbCAmJiBzZWwucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgICBjb25zdCBmb2N1cyA9IHNlbC5mb2N1c05vZGUgYXMgTm9kZTtcclxuICAgICAgICBjb25zdCBiYXNlRWwgPSAoZm9jdXMubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXHJcbiAgICAgICAgICA/IChmb2N1cyBhcyBFbGVtZW50KVxyXG4gICAgICAgICAgOiAoZm9jdXMucGFyZW50RWxlbWVudCBhcyBFbGVtZW50KSkgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgY29uc3QgbGlzdEVsID0gYmFzZUVsPy5jbG9zZXN0Py4oJ29sLCB1bCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgICAgICBpZiAobGlzdEVsKSB7XHJcbiAgICAgICAgICBsaXN0RWwuc3R5bGUuZm9udFNpemUgPSBjc3NTaXplO1xyXG4gICAgICAgICAgbGlzdEVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJykuZm9yRWFjaChsaSA9PiB7XHJcbiAgICAgICAgICAgIChsaSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZm9udFNpemUgPSBjc3NTaXplO1xyXG4gICAgICAgICAgICAobGkgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmNvbG9yID0gdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZENvbG9yXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3R5bGVXaXRoQ1NTKGVuYWJsZTogYm9vbGVhbikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3N0eWxlV2l0aENTUycsIGZhbHNlLCBlbmFibGUgPyAndHJ1ZScgOiAnZmFsc2UnKTtcclxuICAgIH0gY2F0Y2ggeyAvKiBzb21lIGVuZ2luZXMgaWdub3JlICovIH1cclxuICB9XHJcbiAgcHJpdmF0ZSB0b0xlZ2FjeUZvbnRTdGVwKGNzc1NpemU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtYXA6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XHJcbiAgICAgICcnOiAzLFxyXG4gICAgICAnY2xhbXAoMC43NXJlbSwgMnZ3LCAxcmVtKSc6IDIsXHJcbiAgICAgICdjbGFtcCgwLjc1cmVtLCAydncsIDEuMjVyZW0pJzogMyxcclxuICAgICAgJ2NsYW1wKDFyZW0sIDN2dywgMS41cmVtKSc6IDQsXHJcbiAgICAgICdjbGFtcCgxLjI1cmVtLCA0dncsIDJyZW0pJzogNSxcclxuICAgICAgJ2NsYW1wKDJyZW0sIDV2dywgM3JlbSknOiA2LFxyXG4gICAgICAnY2xhbXAoMy4xcmVtLCA3dncsIDQuNXJlbSknOiA3XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFN0cmluZyhtYXAuaGFzT3duUHJvcGVydHkoY3NzU2l6ZSkgPyBtYXBbY3NzU2l6ZV0gOiAzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbm9ybWFsaXplRm9udFNpemVUb0Nzcyhjc3NTaXplOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPSB0aGlzLmVkaXRvcj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XHJcbiAgICBjb25zdCBmb250cyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdmb250W3NpemVdJyk7XHJcbiAgICBmb250cy5mb3JFYWNoKChmb250RWw6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBpZiAoY3NzU2l6ZSkgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IGNzc1NpemU7XHJcbiAgICAgIHdoaWxlIChmb250RWwuZmlyc3RDaGlsZCkgc3Bhbi5hcHBlbmRDaGlsZChmb250RWwuZmlyc3RDaGlsZCk7XHJcbiAgICAgIGZvbnRFbC5wYXJlbnROb2RlPy5yZXBsYWNlQ2hpbGQoc3BhbiwgZm9udEVsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRm9udFNpemUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY3NzU2l6ZSA9IGV2ZW50LnRhcmdldC52YWx1ZSBhcyBzdHJpbmc7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5zZXRTdHlsZVdpdGhDU1ModHJ1ZSk7XHJcblxyXG4gICAgICBjb25zdCBzdGVwID0gdGhpcy50b0xlZ2FjeUZvbnRTdGVwKGNzc1NpemUpO1xyXG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgc3RlcCk7XHJcblxyXG4gICAgICB0aGlzLm5vcm1hbGl6ZUZvbnRTaXplVG9Dc3MoY3NzU2l6ZSk7XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZFNpemUgPSBjc3NTaXplO1xyXG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBjaGFuZ2VDb2xvcihldmVudDogYW55KSB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZSBhcyBzdHJpbmc7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgaWYgKHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNvbGxhcHNlZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRTdHlsZVdpdGhDU1ModHJ1ZSk7XHJcbiAgICAgIC8vICB0aGlzLnVud3JhcEdyYWRpZW50SW5TZWxlY3Rpb24oKTtcclxuXHJcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdmb3JlQ29sb3InLCBmYWxzZSwgY29sb3IpO1xyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRDb2xvciA9IGNvbG9yO1xyXG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRleHQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xyXG4gIH1cclxuXHJcbiAgb25Gb3JtYXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XHJcbiAgICB0aGlzLmZvcm1hdFRleHQoJ2Zvcm1hdEJsb2NrJywgc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb3BlbkNvbG9yUGlja2VyKCkge1xyXG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICByZWFkRm9ybWF0dGluZ1Byb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuO1xyXG4gICAgY29uc3Qgbm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgbm9kZSBpcyBudWxsXHJcbiAgICBpZiAoIW5vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZWxlbWVudCA9IG5vZGUucGFyZW50RWxlbWVudDtcclxuICAgIHdoaWxlIChlbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcclxuXHJcbiAgICAgIGlmIChub2RlTmFtZSA9PT0gJ0gxJyB8fCBub2RlTmFtZSA9PT0gJ0gyJyB8fCBub2RlTmFtZSA9PT0gJ0gzJykge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRIZWFkaW5nID0gbm9kZU5hbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdCJyB8fCBub2RlTmFtZSA9PT0gJ1NUUk9ORycpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzQm9sZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdJJyB8fCBub2RlTmFtZSA9PT0gJ0VNJykge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNJdGFsaWMgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnVScpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdPTCcpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkTGlzdCA9ICdpbnNlcnRPcmRlcmVkTGlzdCc7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdVTCcpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkTGlzdCA9ICdpbnNlcnRVbm9yZGVyZWRMaXN0JztcclxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnN0eWxlLnRleHRBbGlnbikge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRBbGlnbm1lbnQgPSBganVzdGlmeSR7ZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBlbGVtZW50LnN0eWxlLnRleHRBbGlnbi5zbGljZSgxKX1gO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuc3R5bGUuZm9udFNpemUpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZSA9IGVsZW1lbnQuc3R5bGUuZm9udFNpemU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5zdHlsZS5jb2xvcikge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRDb2xvciA9IGVsZW1lbnQuc3R5bGUuY29sb3JcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZUZvcm1hdHRpbmdEYXRhKCkge1xyXG4gICAgdGhpcy50b29sYmFyRGF0YSA9IHtcclxuICAgICAgc2VsZWN0ZWRIZWFkaW5nOiAnJyxcclxuICAgICAgaXNCb2xkOiBmYWxzZSxcclxuICAgICAgaXNJdGFsaWM6IGZhbHNlLFxyXG4gICAgICBpc1VuZGVybGluZWQ6IGZhbHNlLFxyXG4gICAgICBzZWxlY3RlZFNpemU6ICcnLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6ICcnLFxyXG4gICAgICBzZWxlY3RlZEFsaWdubWVudDogJycsXHJcbiAgICAgIHNlbGVjdGVkQ29sb3I6ICcnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VHcmFkaWVudENvbG9yKCkge1xyXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHNlbGVjdGlvbiBmaXJzdFxyXG4gICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oKTtcclxuXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNhdmVTZWxlY3Rpb24oKTtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JhZGllbnQgPSBgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAke3RoaXMucHJpbWFyeUNvbG9yfSAwJSwgJHt0aGlzLnNlY29uZGFyeUNvbG9yfSAxMDAlKWA7XHJcbiAgICAgICAgdGhpcy5hcHBseUdyYWRpZW50VG9UZXh0KGdyYWRpZW50KTtcclxuICAgICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LCAwKTtcclxuICAgICAgfSwgMTApOyAvLyAxMG1zIGRlbGF5IChhZGp1c3RhYmxlIGlmIG5lZWRlZClcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlHcmFkaWVudFRvVGV4dChncmFkaWVudFZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLmVkaXRvcj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghcm9vdCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGV4aXN0aW5nID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdzcGFuW2RhdGEtZ3JhZGllbnQ9XCJ0cnVlXCJdJykgYXMgSFRNTFNwYW5FbGVtZW50IHwgbnVsbDtcclxuICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICBleGlzdGluZy5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBncmFkaWVudFZhbHVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSByYW5nZS5leHRyYWN0Q29udGVudHMoKTtcclxuXHJcbiAgICBjb25zdCBzcGFuOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICBzcGFuLnNldEF0dHJpYnV0ZSgnZGF0YS1ncmFkaWVudCcsICd0cnVlJyk7IC8vIG1hcmsgZm9yIGZ1dHVyZSB1cGRhdGVzXHJcbiAgICBzcGFuLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGdyYWRpZW50VmFsdWU7XHJcbiAgICBzcGFuLnN0eWxlLmJhY2tncm91bmRDbGlwID0gJ3RleHQnO1xyXG4gICAgc3Bhbi5zdHlsZS53ZWJraXRCYWNrZ3JvdW5kQ2xpcCA9ICd0ZXh0JztcclxuICAgIHNwYW4uc3R5bGUuY29sb3IgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgc3Bhbi5zdHlsZS53ZWJraXRUZXh0RmlsbENvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAvLyBmaXggZnJvbSBpbmxpbmVTaXplPSdibG9jaydcclxuXHJcbiAgICBzcGFuLmFwcGVuZENoaWxkKHNlbGVjdGVkQ29udGVudCk7XHJcbiAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG5cclxuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG5ld1JhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhzcGFuKTtcclxuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHJlZ2VuZXJhdGVUZXh0KCkge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGJ1c2luZXNzSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXHJcbiAgICAgIGRhdGFJZDogdGhpcy5zZWN0aW9uSWQsXHJcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXHJcbiAgICAgIHN1Z2dlc3RlZERhdGFUeXBlOiAnQ09NUE9ORU5UJyxcclxuICAgICAgdG9uZTogJ1BST0ZFU1NJT05BTCcsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICBsYWJlbDogdGhpcy5sYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZWdlbmVyYXRlVGV4dChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSByZXMuZGF0YTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVkUmFuZ2U6IFJhbmdlIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICBzYXZlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgdGhpcy5zYXZlZFJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXN0b3JlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2F2ZWRSYW5nZSkge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UodGhpcy5zYXZlZFJhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIEdldCBvbmx5IHBsYWluIHRleHRcclxuICAgIGNvbnN0IHRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0L3BsYWluJykgfHwgJyc7XHJcblxyXG4gICAgLy8gSW5zZXJ0IGFzIHBsYWluIHRleHRcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsIHRleHQpO1xyXG4gIH1cclxuXHJcbiAgc3RyaXBTdHlsZXMoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xyXG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2MuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTsgLy8gUmVtb3ZlIGFsbCBpbmxpbmUgc3R5bGVzXHJcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTsgLy8gT3B0aW9uYWxcclxuICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGBjb2xvcjogJHt0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQ29sb3J9YCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkb2MuYm9keS5pbm5lckhUTUw7XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0KCkge1xyXG4gICAgY29uc3QgdGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlPy5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgXCJcIik/LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCkgPz8gXCJcIjtcclxuICAgIGlmICghdGV4dENvbnRlbnQpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPCEtLSA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnYm9yZGVyJzogZWRpdGFibGV9XCIgI3BhcmVudEVsZW1lbnRcclxuICBbY2xhc3MuZC1ub25lXT1cIiFlZGl0YWJsZSAmJiBnZXRUZXh0KCkgPT0gJydcIj4gLS0+XHJcbjxkaXYgKm5nSWY9XCJlZGl0YWJsZTsgZWxzZSB2aWV3TW9kZVwiIGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnYm9yZGVyJzogZWRpdGFibGV9XCIgI3BhcmVudEVsZW1lbnQ+XHJcbiAgPGRpdiBbY29udGVudGVkaXRhYmxlXT1cImVkaXRhYmxlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIGNsYXNzPVwiZWRpdGFibGUtdGV4dCBwLTBcIiAobW91c2V1cCk9XCJzaG93VG9vbGJhcigkZXZlbnQpXCJcclxuICAgICNlZGl0b3IgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlVGV4dCgkZXZlbnQpXCIgKG1vdXNlZG93bik9XCJoaWRlVG9vbGJhcigkZXZlbnQpXCIgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhclwiICpuZ0lmPVwiZWRpdGFibGUgJiYgc2hvd1wiIFtuZ1N0eWxlXT1cInsndG9wLnB4JzogdG9vbGJhcll9XCJcclxuICAgIFtzdHlsZS5yaWdodF09XCJyaWdodFplcm8gPyAnMHB4JyA6ICdhdXRvJ1wiIFtzdHlsZS5sZWZ0XT1cIiFyaWdodFplcm8gPyAnMHB4JyA6ICdhdXRvJ1wiICN0b29sYmFyIGNka0RyYWc+XHJcbiAgICA8IS0tIDxzZWxlY3QgY2xhc3M9XCJ0b29sXCIgKGNoYW5nZSk9XCJvbkZvcm1hdENoYW5nZSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJ0b29sYmFyRGF0YS5zZWxlY3RlZEhlYWRpbmdcIj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgxXCI+SGVhZGluZzE8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgyXCI+SGVhZGluZzI8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgzXCI+SGVhZGluZzM8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImRpdlwiPlRleHQ8L29wdGlvbj5cclxuICAgIDwvc2VsZWN0PiAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCI+IDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2JvbGQnKVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuaXNCb2xkfVwiPjxtYXQtaWNvbj5cclxuICAgICAgICBmb3JtYXRfYm9sZDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdpdGFsaWMnKVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuaXNJdGFsaWN9XCI+PG1hdC1pY29uPlxyXG4gICAgICAgIGZvcm1hdF9pdGFsaWM8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgndW5kZXJsaW5lJylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZH1cIlxyXG4gICAgICAqbmdJZj1cInNlbGVjdGVkQ29sb3JUeXBlID09PSAnU09MSUQnXCI+PG1hdC1pY29uPiBmb3JtYXRfdW5kZXJsaW5lZDwvbWF0LWljb24+PC9idXR0b24+XHJcblxyXG4gICAgPHNlbGVjdCBjbGFzcz1cInRvb2xcIiAoY2hhbmdlKT1cImNoYW5nZUZvbnRTaXplKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZVwiPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+RGVmYXVsdDwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiY2xhbXAoMC43NXJlbSwgMnZ3LCAxcmVtKVwiPlNtYWxsPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJjbGFtcCgwLjc1cmVtLCAydncsIDEuMjVyZW0pXCI+TWVkaXVtPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJjbGFtcCgxcmVtLCAzdncsIDEuNXJlbSlcIj5TZW1pIExhcmdlPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJjbGFtcCgxLjI1cmVtLCA0dncsIDJyZW0pXCI+TGFyZ2U8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImNsYW1wKDJyZW0sIDV2dywgM3JlbSlcIj5FeHRyYSBMYXJnZTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiY2xhbXAoMy4xcmVtLCA3dncsIDQuNXJlbSlcIj5IdWdlPC9vcHRpb24+XHJcbiAgICA8L3NlbGVjdD5cclxuXHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdpbnNlcnRPcmRlcmVkTGlzdCcpXCJcclxuICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPT09ICdpbnNlcnRPcmRlcmVkTGlzdCd9XCI+PG1hdC1pY29uPmZvcm1hdF9saXN0X251bWJlcmVkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2luc2VydFVub3JkZXJlZExpc3QnKVwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID09PSAnaW5zZXJ0VW5vcmRlcmVkTGlzdCd9XCI+PG1hdC1pY29uPlxyXG4gICAgICAgIGZvcm1hdF9saXN0X2J1bGxldGVkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdqdXN0aWZ5TGVmdCcpXCJcclxuICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9PT0gJ2p1c3RpZnlMZWZ0J31cIj48bWF0LWljb24+XHJcbiAgICAgICAgZm9ybWF0X2FsaWduX2xlZnQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnanVzdGlmeUNlbnRlcicpXCJcclxuICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9PT0gJ2p1c3RpZnlDZW50ZXInfVwiPjxtYXQtaWNvbj5cclxuICAgICAgICBmb3JtYXRfYWxpZ25fY2VudGVyPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2p1c3RpZnlSaWdodCcpXCJcclxuICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9PT0gJ2p1c3RpZnlSaWdodCd9XCI+PG1hdC1pY29uPlxyXG4gICAgICAgIGZvcm1hdF9hbGlnbl9yaWdodDwvbWF0LWljb24+PC9idXR0b24+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbG9yVHlwZVwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwic29saWRcIiBbbmdDbGFzc109XCJ7J3NvbGlkQ29sb3JTZWxlY3RlZCc6IHNlbGVjdGVkQ29sb3JUeXBlID09PSAnU09MSUQnfVwiXHJcbiAgICAgICAgKG1vdXNlZG93bik9XCJyZW1lbWJlclNlbGVjdGlvbigkZXZlbnQpXCIgKGNsaWNrKT1cInNldENvbG9yTW9kZSgnU09MSUQnKVwiPlxyXG4gICAgICAgIFNvbGlkXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZ3JhZGllbnRcIiBbbmdDbGFzc109XCJ7J2dyYWRpZW50Q29sb3JTZWxlY3RlZCc6IHNlbGVjdGVkQ29sb3JUeXBlID09PSAnR1JBRElFTlQnfVwiXHJcbiAgICAgICAgKG1vdXNlZG93bik9XCJyZW1lbWJlclNlbGVjdGlvbigkZXZlbnQpXCIgKGNsaWNrKT1cInNldENvbG9yTW9kZSgnR1JBRElFTlQnKVwiPlxyXG4gICAgICAgIEdyYWRpZW50XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIGNvbG9yLXBpY2tlci1idG5cIiAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKClcIiAqbmdJZj1cInNlbGVjdGVkQ29sb3JUeXBlID09PSAnU09MSUQnXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5mb3JtYXRfY29sb3JfdGV4dDwvbWF0LWljb24+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiAjY29sb3JQaWNrZXIgY2xhc3M9XCJoaWRkZW4tY29sb3ItcGlja2VyXCIgKGlucHV0KT1cImNoYW5nZUNvbG9yKCRldmVudClcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwidG9vbGJhckRhdGEuc2VsZWN0ZWRDb2xvclwiPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbG9yVHlwZVwiICpuZ0lmPVwic2VsZWN0ZWRDb2xvclR5cGUgPT09ICdHUkFESUVOVCdcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgY29sb3ItcGlja2VyLWJ0blwiIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoKTsgcHJpbWFyeUNvbG9yUGlja2VyLmNsaWNrKClcIj5cclxuICAgICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cInByaW1hcnlDb2xvclwiPmZvcm1hdF9jb2xvcl90ZXh0PC9tYXQtaWNvbj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgI3ByaW1hcnlDb2xvclBpY2tlciBjbGFzcz1cImhpZGRlbi1jb2xvci1waWNrZXJcIiAoaW5wdXQpPVwiY2hhbmdlR3JhZGllbnRDb2xvcigpXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwicHJpbWFyeUNvbG9yXCI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwidG9vbCBjb2xvci1waWNrZXItYnRuXCIgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcigpOyBzZWNvbmRhcnlDb2xvclBpY2tlci5jbGljaygpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIFtzdHlsZS5jb2xvcl09XCJzZWNvbmRhcnlDb2xvclwiPmZvcm1hdF9jb2xvcl90ZXh0PC9tYXQtaWNvbj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgI3NlY29uZGFyeUNvbG9yUGlja2VyIGNsYXNzPVwiaGlkZGVuLWNvbG9yLXBpY2tlclwiIChpbnB1dCk9XCJjaGFuZ2VHcmFkaWVudENvbG9yKClcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRhcnlDb2xvclwiPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvbi1ib3hcIiBbbmdTdHlsZV09XCJ7J3RvcC5weCc6IHN1Z2dlc3Rpb25ZfVwiIFtzdHlsZS5yaWdodF09XCJyaWdodFplcm8gPyAnMHB4JyA6ICdhdXRvJ1wiXHJcbiAgICBbc3R5bGUubGVmdF09XCIhcmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiAqbmdJZj1cImVkaXRhYmxlICYmIGxhYmVsICYmIHNob3dTdWdnZXN0aW9uXCIgI3N1Z2dlc3Rpb24+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvblwiIChjbGljayk9XCJyZWdlbmVyYXRlVGV4dCgpXCI+XHJcbiAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy84ODc0OTNjMTc0MjI3Mzk3MDE1MUZyYW1lJTIwMTI0NDgzMTc0MC5wbmdcIlxyXG4gICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxwIGNsYXNzPVwibmFtZVwiPlJlZ2VuZXJhdGUgVGV4dDwvcD5cclxuICAgICAgICA8cCBjbGFzcz1cImRlc2NcIj5HZXQgYSBmcmVzaCB2YXJpYXRpb24gb2YgYSBjdXJyZW50IHRleHQ8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI3ZpZXdNb2RlPlxyXG4gIDxkaXYgY2xhc3M9XCJyZWFkLW9ubHktdGV4dFwiICpuZ0lmPVwidmFsdWVcIj5cclxuICAgIDxkaXYgW2NvbnRlbnRlZGl0YWJsZV09XCJlZGl0YWJsZVwiIFsobmdNb2RlbCldPVwidmFsdWVcIj48L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -199,4 +199,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
199
199
  type: ViewChild,
200
200
  args: ['mainContainer']
201
201
  }] } });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVyLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYmFubmVyLWNhcm91c2VsL2Jhbm5lci1jYXJvdXNlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2Jhbm5lci1jYXJvdXNlbC9iYW5uZXItY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxFQUdWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDO0FBR3pDLE9BQU8sRUFB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bUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLDBCQUEwQjt3QkFDMUIsc0JBQXNCO3FCQUN2QjtrRkFLUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRXdCLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNBLGNBQWM7c0JBQXpDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgQWZ0ZXJWaWV3SW5pdFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb25Nb2RlbCwgQmFja2dyb3VuZE1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNpbXBvRWxlbWVudHNNb2R1bGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cyc7XHJcbmltcG9ydCB7IE1hdEdyaWRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZ3JpZC1saXN0JztcclxuaW1wb3J0IHsgU2ltcG9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9zaW1wby1idXR0b24vc2ltcG8tYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhbm5lckNhcm91c2VsQ29udGVudE1vZGVsLCBCYW5uZXJDYXJvdXNlbE1vZGVsLCBCYW5uZXJDYXJvdXNlbFN0eWxlc01vZGVsIH0gZnJvbSAnLi9iYW5uZXItY2Fyb3VzZWwubW9kZWwnO1xyXG5pbXBvcnQgeyBTaW1wb0NvbnRhaW5lckFsaWdtZW50IH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRhaW5lci1hbGlnbm1lbnQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9CbHVyQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ibHVyLWNvbnRlbnQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT3ZlcmxheVZhbHVlIH0gZnJvbSAnLi4vLi4vc3R5bGVzL2luZGV4JztcclxuaW1wb3J0IHsgVGV4dEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEltYWdlRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWVkaXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU3BhY2luZ0Fyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWFyb3VuZC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPYmplY3RQb3NpdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vLi4vLi4vZGlyZWN0aXZlL2ltYWdlLXBvc2l0aW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuZGVjbGFyZSB2YXIgYm9vdHN0cmFwOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWJhbm5lci1jYXJvdXNlbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBPYmplY3RQb3NpdGlvbkRpcmVjdGl2ZSxcclxuICAgIFNpbXBvRWxlbWVudHNNb2R1bGUsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcclxuICAgIE1hdEdyaWRMaXN0TW9kdWxlLFxyXG4gICAgU2ltcG9CdXR0b25Db21wb25lbnQsXHJcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXHJcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIEJvcmRlckRpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcclxuICAgIFNpbXBvQ29udGFpbmVyQWxpZ21lbnQsXHJcbiAgICBTaW1wb0JsdXJDb250ZW50RGlyZWN0aXZlLFxyXG4gICAgVGV4dEVkaXRvckNvbXBvbmVudCxcclxuICAgIEltYWdlRWRpdG9yRGlyZWN0aXZlLFxyXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUsXHJcbiAgICBTcGFjaW5nQXJvdW5kRGlyZWN0aXZlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmFubmVyLWNhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYmFubmVyLWNhcm91c2VsLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW5uZXJDYXJvdXNlbENvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGRhdGE/OiBCYW5uZXJDYXJvdXNlbE1vZGVsO1xyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbmV4dENvbXBvbmVudENvbG9yPzogQmFja2dyb3VuZE1vZGVsO1xyXG5cclxuICBAVmlld0NoaWxkKCdjYXJvdXNlbEVsZW1lbnQnKSBjYXJvdXNlbEVsZW1lbnQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ21haW5Db250YWluZXInKSBfbWFpbkNvbnRhaW5lcjogRWxlbWVudFJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBpZCE6IHN0cmluZztcclxuICBhY3Rpb24hOiBBY3Rpb25Nb2RlbDtcclxuICBjb250ZW50PzogQmFubmVyQ2Fyb3VzZWxDb250ZW50TW9kZWw7XHJcbiAgc3R5bGVzPzogQmFubmVyQ2Fyb3VzZWxTdHlsZXNNb2RlbDtcclxuICBjdXJyZW50SW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgZWRpdG9yU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgY2Fyb3VzZWxJbnN0YW5jZTogYW55O1xyXG4gIHByaXZhdGUgaXNFZGl0b3JPcGVuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2V2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5kZWxldGVTZWxlY3RlZCA9IHRoaXMuZGVsZXRlO1xyXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdHlsZXMgPSB0aGlzLmRhdGE/LnN0eWxlcztcclxuXHJcbiAgICB0aGlzLmVkaXRvclN1YnNjcmlwdGlvbiA9IHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5zdWJzY3JpYmUoKGlzRWRpdG9yT3BlbjogYm9vbGVhbikgPT4ge1xyXG4gICAgICB0aGlzLmlzRWRpdG9yT3BlbiA9IGlzRWRpdG9yT3BlbjtcclxuXHJcbiAgICAgIGlmIChpc0VkaXRvck9wZW4pIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2xBdXRvU2xpZGUoZmFsc2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY29udHJvbEF1dG9TbGlkZSh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplQ2Fyb3VzZWwoKTtcclxuICAgICAgaWYgKCF0aGlzLmlzRWRpdG9yT3Blbikge1xyXG4gICAgICAgIHRoaXMuY29udHJvbEF1dG9TbGlkZSh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2Fyb3VzZWxJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLmNhcm91c2VsSW5zdGFuY2UucGF1c2UoKTtcclxuICAgICAgdGhpcy5jYXJvdXNlbEluc3RhbmNlLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNhcm91c2VsKCkge1xyXG4gICAgaWYgKCF0aGlzLmNhcm91c2VsRWxlbWVudCB8fCB0eXBlb2YgYm9vdHN0cmFwID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNhcm91c2VsTmF0aXZlID0gdGhpcy5jYXJvdXNlbEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLmNhcm91c2VsSW5zdGFuY2UgPSBib290c3RyYXAuQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShjYXJvdXNlbE5hdGl2ZSwge1xyXG4gICAgICBpbnRlcnZhbDogMzAwMCxcclxuICAgICAgcmlkZTogJ2Nhcm91c2VsJyxcclxuICAgICAgcGF1c2U6IGZhbHNlLFxyXG4gICAgICB3cmFwOiB0cnVlLFxyXG4gICAgICB0b3VjaDogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb250cm9sQXV0b1NsaWRlKHNob3VsZFN0YXJ0OiBib29sZWFuKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNhcm91c2VsRWxlbWVudCB8fCB0eXBlb2YgYm9vdHN0cmFwID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgY2Fyb3VzZWxOYXRpdmUgPSB0aGlzLmNhcm91c2VsRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmNhcm91c2VsSW5zdGFuY2UpIHtcclxuICAgICAgICB0aGlzLmNhcm91c2VsSW5zdGFuY2UgPSBib290c3RyYXAuQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShjYXJvdXNlbE5hdGl2ZSwge1xyXG4gICAgICAgICAgaW50ZXJ2YWw6IDMwMDAsXHJcbiAgICAgICAgICByaWRlOiAnY2Fyb3VzZWwnLFxyXG4gICAgICAgICAgcGF1c2U6IGZhbHNlLFxyXG4gICAgICAgICAgd3JhcDogdHJ1ZSxcclxuICAgICAgICAgIHRvdWNoOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzaG91bGRTdGFydCkge1xyXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxJbnN0YW5jZS5wYXVzZSgpO1xyXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxJbnN0YW5jZS5jeWNsZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxJbnN0YW5jZS5wYXVzZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxNTApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0U2xpZGUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSBpbmRleDtcclxuICAgIGlmICh0aGlzLmNhcm91c2VsSW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5jYXJvdXNlbEluc3RhbmNlLnRvKGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzdHlsZXNMYXlvdXQoKSB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlcz8ubGF5b3V0IH0gYXMgTGF5T3V0TW9kZWw7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0Qmx1clZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kPy5ibHVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldEJhY2tncm91bmRDb2xvcigpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kIH0gYXMgQmFja2dyb3VuZE1vZGVsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldEJhY2tncm91bmRPcGFjaXR5KCkge1xyXG4gICAgaWYgKHRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kPy5vdmVybGF5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm9wYWNpdHlWYWx1ZSh0aGlzLnN0eWxlcy5iYWNrZ3JvdW5kPy5vdmVybGF5KTtcclxuICAgIH1cclxuICAgIHJldHVybiAnMCc7XHJcbiAgfVxyXG5cclxuICBvcGFjaXR5VmFsdWUodmFsdWU6IE92ZXJsYXlWYWx1ZSkge1xyXG4gICAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgICBjYXNlICdWRVJZX1NUUk9ORycgYXMgT3ZlcmxheVZhbHVlOlxyXG4gICAgICAgIHJldHVybiAnMC41JztcclxuICAgICAgY2FzZSAnU1RST05HJyBhcyBPdmVybGF5VmFsdWU6XHJcbiAgICAgICAgcmV0dXJuICcwLjYnO1xyXG4gICAgICBjYXNlICdNT0RFUkFURScgYXMgT3ZlcmxheVZhbHVlOlxyXG4gICAgICAgIHJldHVybiAnMC43JztcclxuICAgICAgY2FzZSAnTElHSFQnIGFzIE92ZXJsYXlWYWx1ZTpcclxuICAgICAgICByZXR1cm4gJzAuOCc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICcxJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRTZWN0aW9uKCkge1xyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuY29udHJvbEF1dG9TbGlkZShmYWxzZSk7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdCh0cnVlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NyZWVuU2l6ZSgpIHtcclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICB9XHJcblxyXG4gIGdldFNlY3Rpb25NaW5IZWlnaHQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpdCA9IHRoaXMuc3R5bGVzPy5sYXlvdXQ/LmZpdDtcclxuICAgIGNvbnN0IGlzTW9iaWxlID0gdGhpcy5nZXRTY3JlZW5TaXplKCkgPD0gNDc1O1xyXG5cclxuICAgIGlmIChmaXQgPT09ICdzY3JlZW4nKSByZXR1cm4gaXNNb2JpbGUgPyAnMTAwdmgnIDogJ2NhbGMoNzV2aCArIDEzNHB4KSc7XHJcbiAgICBpZiAoZml0ID09PSAnY29udGVudCcpIHJldHVybiBpc01vYmlsZSA/ICc1NjBweCcgOiAnNDIwcHgnO1xyXG4gICAgcmV0dXJuIGlzTW9iaWxlID8gJzU2MHB4JyA6ICc0MjBweCc7XHJcbiAgfVxyXG59IiwiPGRpdiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCJcclxuICBjbGFzcz1cInRvdGFsLWNvbnRhaW5lclwiIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJhbm5lci1jYXJvdXNlbC1zaGVsbCBmbGV4IHJlbGF0aXZlIGZpeC1zYWZhcmktZmxpY2tlcmluZ1wiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgJ21pbi1oZWlnaHQnOiBnZXRTZWN0aW9uTWluSGVpZ2h0KCksXHJcbiAgICAgICAncGFkZGluZy10b3AnOiAnMHB4JyxcclxuICAgICAgICdwYWRkaW5nLWJvdHRvbSc6ICcwcHgnXHJcbiAgICAgfVwiIFtzcGFjaW5nQXJvdW5kXT1cInN0eWxlc0xheW91dFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0JvcmRlcl09XCJzdHlsZXM/LmJvcmRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggYnJlYWstd29yZCB3LWZ1bGwgaXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlbiBiYW5uZXItY2Fyb3VzZWwtY29udGVudFwiIFtpZF09XCJkYXRhPy5pZFwiPlxyXG5cclxuICAgICAgPGRpdiAjY2Fyb3VzZWxFbGVtZW50IGlkPVwiY2Fyb3VzZWxFeGFtcGxlSW50ZXJ2YWxcIiBjbGFzcz1cImNhcm91c2VsIHNsaWRlIGJhbm5lci1jYXJvdXNlbFwiIGRhdGEtYnMtcmlkZT1cImNhcm91c2VsXCJcclxuICAgICAgICBkYXRhLWJzLXBhdXNlPVwiZmFsc2VcIj5cclxuXHJcbiAgICAgICAgPG9sIGNsYXNzPVwiY2Fyb3VzZWwtaW5kaWNhdG9yc1wiICpuZ0lmPVwiKGNvbnRlbnQ/Lmxpc3RJdGVtPy5kYXRhPy5sZW5ndGggfHwgMCkgPiAxXCI+XHJcbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGltZyBvZiBjb250ZW50Py5saXN0SXRlbT8uZGF0YTsgbGV0IGkgPSBpbmRleFwiIFtjbGFzcy5hY3RpdmVdPVwiaSA9PT0gMFwiXHJcbiAgICAgICAgICAgIGRhdGEtYnMtdGFyZ2V0PVwiI2Nhcm91c2VsRXhhbXBsZUludGVydmFsXCIgW2F0dHIuZGF0YS1icy1zbGlkZS10b109XCJpXCI+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvb2w+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJvdXNlbC1pbm5lciBiYW5uZXItY2Fyb3VzZWwtaW5uZXJcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29udGVudD8ubGlzdEl0ZW0/LmRhdGE7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImNhcm91c2VsLWl0ZW0gYmFubmVyLWNhcm91c2VsLWl0ZW1cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGkgPT09IGN1cnJlbnRJbmRleH1cIj5cclxuICAgICAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiaXRlbS5pbWFnZS51cmxcIiBbc2ltcG9CbHVyQ29udGVudF09XCJnZXRCbHVyVmFsdWVcIiBbaWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICAgICAgICAgIFtzaW1wb09iamVjdFBvc2l0aW9uXT1cIml0ZW0/LmltYWdlPy5wb3NpdGlvblwiIGNsYXNzPVwiaW1nY2xhc3MgYmFubmVyLWNhcm91c2VsLWltYWdlXCJcclxuICAgICAgICAgICAgICBbYWx0XT1cIml0ZW0/LmltYWdlPy5hbHRUZXh0IHx8ICdDYXJvdXNlbCBpbWFnZSdcIiBbYXBwSW1hZ2VFZGl0b3JdPVwiZWRpdCB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImRhdGE/LmlkK2l0ZW0uaW1hZ2UuaWRcIiBbaW1hZ2VEYXRhXT1cIml0ZW0/LmltYWdlXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5pbWFnZT8udXJsXCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHhsLTggbXgtYXV0byByZWxhdGl2ZSBvcGFjaXR5LTEwMCBwb3NpdGlvbi1yZWxhdGl2ZSB0ZXh0LXdyYXBwZXJcIiB0ZXh0LWNvbnRlbnQtbGF5ZXJcclxuICAgICAgICAgICAgc3R5bGU9XCJ6LWluZGV4OiAxO1wiIFtpZF09XCJkYXRhPy5pZFwiICNtYWluQ29udGFpbmVyIFtzaW1wb092ZXJsYXldPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCJcclxuICAgICAgICAgICAgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiIFtzaW1wb0xheW91dF09XCJzdHlsZXM/LmxheW91dFwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTUganVzdGlmeS1jb250ZW50LXN0YXJ0IGNvbnRlbnQtc2lkZSB0ZXh0LWNvbnRhaW5lclwiIFtpZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgW3NpbXBvQW5pbWF0aW9uXT1cInN0eWxlcz8uYW5pbWF0aW9uXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FsaWduLWl0ZW1zLXN0cmV0Y2gnOnN0eWxlcz8ubGF5b3V0Py5hbGlnbj09PSdsZWZ0JyB8fCBzdHlsZXM/LmxheW91dD8uYWxpZ249PT0nY2VudGVyJyB8fCBzdHlsZXM/LmxheW91dD8uYWxpZ249PT0ncmlnaHQnfVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiB3LWZ1bGwgbWF4LXctMnhsIGl0ZW1zLXN0YXJ0IGQtZmxleCBmbGV4LWNvbHVtbiBcIlxyXG4gICAgICAgICAgICAgICAgW3NpbXBvQ29udGFpbmVyQWxpZ25tZW50XT1cInN0eWxlc0xheW91dFwiIFtpZF09XCJkYXRhPy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb250ZW50Py5pbnB1dFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpdGVtLmxhYmVsLmluY2x1ZGVzKCdIZWFkaW5nJykgPyAnaGVhZGluZy1sYXJnZSBsaC0yIG1iLTQnIDogJ2JvZHktbGFyZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNpbXBvLXRleHQtZWRpdG9yIFsodmFsdWUpXT1cIml0ZW0udmFsdWVcIiBbZWRpdGFibGVdPVwiZWRpdCB8fCBmYWxzZVwiPjwvc2ltcG8tdGV4dC1lZGl0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGE/LmFjdGlvbiAmJiBkYXRhPy5hY3Rpb24/LmRpc3BsYXlcIiBjbGFzcz1cImN1c3RvbWNsYXNzIHctZnVsbCBtYi0zXCIgW25nQ2xhc3NdPVwiW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXM/LmxheW91dD8uYWxpZ24gPT09ICdsZWZ0JyA/ICdqdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnQnIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlcz8ubGF5b3V0Py5hbGlnbiA9PT0gJ2NlbnRlcicgPyAnanVzdGlmeS1jb250ZW50LW1kLWNlbnRlcicgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzPy5sYXlvdXQ/LmFsaWduID09PSAncmlnaHQnID8gJ2p1c3RpZnktY29udGVudC1tZC1lbmQnIDogJydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNcIiBjbGFzcz1cImJ0bi1jb250YWluZXIgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1idXR0b24tZWxlbWVudCBbYnV0dG9uQ29udGVudF09XCJidXR0b24uY29udGVudFwiIFtidXR0b25TdHlsZV09XCJidXR0b24uc3R5bGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25JZF09XCJidXR0b24uaWRcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCIgW2VkaXRdPVwiZWRpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCI+PC9hcHAtYnV0dG9uLWVsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxhIGNsYXNzPVwiY2Fyb3VzZWwtY29udHJvbC1wcmV2XCIgZGF0YS1icy10YXJnZXQ9XCIjY2Fyb3VzZWxFeGFtcGxlSW50ZXJ2YWxcIiByb2xlPVwiYnV0dG9uXCIgZGF0YS1icy1zbGlkZT1cInByZXZcIlxyXG4gICAgICAgICAgKm5nSWY9XCIoY29udGVudD8ubGlzdEl0ZW0/LmRhdGE/Lmxlbmd0aCB8fCAwKSA+IDFcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24gcHJldmlvdXMtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlByZXZpb3VzPC9zcGFuPlxyXG4gICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgPGEgY2xhc3M9XCJjYXJvdXNlbC1jb250cm9sLW5leHRcIiBkYXRhLWJzLXRhcmdldD1cIiNjYXJvdXNlbEV4YW1wbGVJbnRlcnZhbFwiIHJvbGU9XCJidXR0b25cIiBkYXRhLWJzLXNsaWRlPVwibmV4dFwiXHJcbiAgICAgICAgICAqbmdJZj1cIihjb250ZW50Py5saXN0SXRlbT8uZGF0YT8ubGVuZ3RoIHx8IDApID4gMVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbiBwcmV2aW91cy1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+TmV4dDwvc3Bhbj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZXM/LmRldmlkZXI/LmRpc3BsYXlcIj5cclxuICAgIDxzaW1wby1zdmctZGl2aWRlciBbZGl2aWRlclR5cGVdPVwic3R5bGVzPy5kZXZpZGVyPy5kZXZpZGVyVHlwZVwiXHJcbiAgICAgIFtjb2xvcl09XCJuZXh0Q29tcG9uZW50Q29sb3I/LmNvbG9yXCI+PC9zaW1wby1zdmctZGl2aWRlcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGVkaXR9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiIChjbGljayk9XCJlZGl0U2VjdGlvbigpXCI+XHJcbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVcIiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGRlbGV0ZX1cIj5cclxuICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVyLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYmFubmVyLWNhcm91c2VsL2Jhbm5lci1jYXJvdXNlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2Jhbm5lci1jYXJvdXNlbC9iYW5uZXItY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxFQUdWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDO0FBR3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7OztBQStCckYsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFdBQVc7SUFxQnRELFlBQW9CLGFBQTRCO1FBQzlDLEtBQUssRUFBRSxDQUFDO1FBRFUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFacEIsbUJBQWMsR0FBc0IsSUFBSSxDQUFDO1FBTXJFLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBSWpCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBSTdCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztRQUVoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFxQixFQUFFLEVBQUU7WUFDakcsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDakMsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksT0FBTyxTQUFTLEtBQUssV0FBVztZQUFFLE9BQU87UUFFdEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7UUFFMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFO1lBQzdFLFFBQVEsRUFBRSxJQUFJO1lBQ2QsSUFBSSxFQUFFLFVBQVU7WUFDaEIsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLFdBQW9CO1FBQ25DLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXO2dCQUFFLE9BQU87WUFFdEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7WUFFMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUU7b0JBQzdFLFFBQVEsRUFBRSxJQUFJO29CQUNkLElBQUksRUFBRSxVQUFVO29CQUNoQixLQUFLLEVBQUUsS0FBSztvQkFDWixJQUFJLEVBQUUsSUFBSTtvQkFDVixLQUFLLEVBQUUsSUFBSTtpQkFDWixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFpQixDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQXFCLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBbUI7UUFDOUIsUUFBUSxLQUFLLEVBQUUsQ0FBQztZQUNkLEtBQUssYUFBNkI7Z0JBQ2hDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxRQUF3QjtnQkFDM0IsT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLFVBQTBCO2dCQUM3QixPQUFPLEtBQUssQ0FBQztZQUNmLEtBQUssT0FBdUI7Z0JBQzFCLE9BQU8sS0FBSyxDQUFDO1lBQ2Y7Z0JBQ0UsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRztZQUFFLE9BQU87UUFFckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUU3QyxJQUFJLEdBQUcsS0FBSyxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUM7UUFDdkUsSUFBSSxHQUFHLEtBQUssU0FBUztZQUFFLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUMzRCxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQzsrR0FsS1UsdUJBQXVCO21HQUF2Qix1QkFBdUIsOGNDOURwQyx5N0tBdUZNLG1wR0QvQ0YsdUJBQXVCLGtHQUN2QixtQkFBbUIsc1hBQ25CLFlBQVksa2JBQ1osb0JBQW9CLG1XQUNwQixpQkFBaUIsK0JBRWpCLGtCQUFrQix5RkFDbEIsbUJBQW1CLDBHQUNuQixtQkFBbUIsbUZBQ25CLGVBQWUsbUZBQ2YsY0FBYyxnRkFDZCxnQkFBZ0IscUZBQ2hCLHNCQUFzQiwyR0FDdEIseUJBQXlCLDZGQUN6QixtQkFBbUIscUpBQ25CLG9CQUFvQiwySUFDcEIsMEJBQTBCLDJHQUMxQixzQkFBc0I7OzRGQUtiLHVCQUF1QjtrQkExQm5DLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUDt3QkFDUCx1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLHlCQUF5Qjt3QkFDekIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLDBCQUEwQjt3QkFDMUIsc0JBQXNCO3FCQUN2QjtrRkFLUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRXdCLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNBLGNBQWM7c0JBQXpDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgQWZ0ZXJWaWV3SW5pdFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb25Nb2RlbCwgQmFja2dyb3VuZE1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNpbXBvRWxlbWVudHNNb2R1bGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cyc7XHJcbmltcG9ydCB7IE1hdEdyaWRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZ3JpZC1saXN0JztcclxuaW1wb3J0IHsgU2ltcG9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9zaW1wby1idXR0b24vc2ltcG8tYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhbm5lckNhcm91c2VsQ29udGVudE1vZGVsLCBCYW5uZXJDYXJvdXNlbE1vZGVsLCBCYW5uZXJDYXJvdXNlbFN0eWxlc01vZGVsIH0gZnJvbSAnLi9iYW5uZXItY2Fyb3VzZWwubW9kZWwnO1xyXG5pbXBvcnQgeyBTaW1wb0NvbnRhaW5lckFsaWdtZW50IH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRhaW5lci1hbGlnbm1lbnQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9CbHVyQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ibHVyLWNvbnRlbnQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT3ZlcmxheVZhbHVlIH0gZnJvbSAnLi4vLi4vc3R5bGVzL2luZGV4JztcclxuaW1wb3J0IHsgVGV4dEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEltYWdlRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWVkaXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU3BhY2luZ0Fyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWFyb3VuZC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPYmplY3RQb3NpdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vLi4vLi4vZGlyZWN0aXZlL2ltYWdlLXBvc2l0aW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuZGVjbGFyZSB2YXIgYm9vdHN0cmFwOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWJhbm5lci1jYXJvdXNlbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBPYmplY3RQb3NpdGlvbkRpcmVjdGl2ZSxcclxuICAgIFNpbXBvRWxlbWVudHNNb2R1bGUsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcclxuICAgIE1hdEdyaWRMaXN0TW9kdWxlLFxyXG4gICAgU2ltcG9CdXR0b25Db21wb25lbnQsXHJcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXHJcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIEJvcmRlckRpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcclxuICAgIFNpbXBvQ29udGFpbmVyQWxpZ21lbnQsXHJcbiAgICBTaW1wb0JsdXJDb250ZW50RGlyZWN0aXZlLFxyXG4gICAgVGV4dEVkaXRvckNvbXBvbmVudCxcclxuICAgIEltYWdlRWRpdG9yRGlyZWN0aXZlLFxyXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUsXHJcbiAgICBTcGFjaW5nQXJvdW5kRGlyZWN0aXZlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmFubmVyLWNhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYmFubmVyLWNhcm91c2VsLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW5uZXJDYXJvdXNlbENvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGRhdGE/OiBCYW5uZXJDYXJvdXNlbE1vZGVsO1xyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbmV4dENvbXBvbmVudENvbG9yPzogQmFja2dyb3VuZE1vZGVsO1xyXG5cclxuICBAVmlld0NoaWxkKCdjYXJvdXNlbEVsZW1lbnQnKSBjYXJvdXNlbEVsZW1lbnQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ21haW5Db250YWluZXInKSBfbWFpbkNvbnRhaW5lcjogRWxlbWVudFJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBpZCE6IHN0cmluZztcclxuICBhY3Rpb24hOiBBY3Rpb25Nb2RlbDtcclxuICBjb250ZW50PzogQmFubmVyQ2Fyb3VzZWxDb250ZW50TW9kZWw7XHJcbiAgc3R5bGVzPzogQmFubmVyQ2Fyb3VzZWxTdHlsZXNNb2RlbDtcclxuICBjdXJyZW50SW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgZWRpdG9yU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgY2Fyb3VzZWxJbnN0YW5jZTogYW55O1xyXG4gIHByaXZhdGUgaXNFZGl0b3JPcGVuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2V2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5kZWxldGVTZWxlY3RlZCA9IHRoaXMuZGVsZXRlO1xyXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdHlsZXMgPSB0aGlzLmRhdGE/LnN0eWxlcztcclxuXHJcbiAgICB0aGlzLmVkaXRvclN1YnNjcmlwdGlvbiA9IHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5zdWJzY3JpYmUoKGlzRWRpdG9yT3BlbjogYm9vbGVhbikgPT4ge1xyXG4gICAgICB0aGlzLmlzRWRpdG9yT3BlbiA9IGlzRWRpdG9yT3BlbjtcclxuICAgICAgaWYgKGlzRWRpdG9yT3Blbikge1xyXG4gICAgICAgIHRoaXMuY29udHJvbEF1dG9TbGlkZShmYWxzZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sQXV0b1NsaWRlKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVDYXJvdXNlbCgpO1xyXG4gICAgICBpZiAoIXRoaXMuaXNFZGl0b3JPcGVuKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sQXV0b1NsaWRlKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5lZGl0b3JTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5lZGl0b3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jYXJvdXNlbEluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuY2Fyb3VzZWxJbnN0YW5jZS5wYXVzZSgpO1xyXG4gICAgICB0aGlzLmNhcm91c2VsSW5zdGFuY2UuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplQ2Fyb3VzZWwoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2Fyb3VzZWxFbGVtZW50IHx8IHR5cGVvZiBib290c3RyYXAgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY2Fyb3VzZWxOYXRpdmUgPSB0aGlzLmNhcm91c2VsRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIHRoaXMuY2Fyb3VzZWxJbnN0YW5jZSA9IGJvb3RzdHJhcC5DYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKGNhcm91c2VsTmF0aXZlLCB7XHJcbiAgICAgIGludGVydmFsOiAzMDAwLFxyXG4gICAgICByaWRlOiAnY2Fyb3VzZWwnLFxyXG4gICAgICBwYXVzZTogZmFsc2UsXHJcbiAgICAgIHdyYXA6IHRydWUsXHJcbiAgICAgIHRvdWNoOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnRyb2xBdXRvU2xpZGUoc2hvdWxkU3RhcnQ6IGJvb2xlYW4pIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuY2Fyb3VzZWxFbGVtZW50IHx8IHR5cGVvZiBib290c3RyYXAgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBjYXJvdXNlbE5hdGl2ZSA9IHRoaXMuY2Fyb3VzZWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuY2Fyb3VzZWxJbnN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxJbnN0YW5jZSA9IGJvb3RzdHJhcC5DYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKGNhcm91c2VsTmF0aXZlLCB7XHJcbiAgICAgICAgICBpbnRlcnZhbDogMzAwMCxcclxuICAgICAgICAgIHJpZGU6ICdjYXJvdXNlbCcsXHJcbiAgICAgICAgICBwYXVzZTogZmFsc2UsXHJcbiAgICAgICAgICB3cmFwOiB0cnVlLFxyXG4gICAgICAgICAgdG91Y2g6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNob3VsZFN0YXJ0KSB7XHJcbiAgICAgICAgdGhpcy5jYXJvdXNlbEluc3RhbmNlLnBhdXNlKCk7XHJcbiAgICAgICAgdGhpcy5jYXJvdXNlbEluc3RhbmNlLmN5Y2xlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jYXJvdXNlbEluc3RhbmNlLnBhdXNlKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDE1MCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RTbGlkZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IGluZGV4O1xyXG4gICAgaWYgKHRoaXMuY2Fyb3VzZWxJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLmNhcm91c2VsSW5zdGFuY2UudG8oaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGVzPy5sYXlvdXQgfSBhcyBMYXlPdXRNb2RlbDtcclxuICB9XHJcblxyXG4gIGdldCBnZXRCbHVyVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdHlsZXM/LmJhY2tncm91bmQ/LmJsdXI7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0QmFja2dyb3VuZENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5zdHlsZXM/LmJhY2tncm91bmQgfSBhcyBCYWNrZ3JvdW5kTW9kZWw7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0QmFja2dyb3VuZE9wYWNpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5zdHlsZXM/LmJhY2tncm91bmQ/Lm92ZXJsYXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMub3BhY2l0eVZhbHVlKHRoaXMuc3R5bGVzLmJhY2tncm91bmQ/Lm92ZXJsYXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcwJztcclxuICB9XHJcblxyXG4gIG9wYWNpdHlWYWx1ZSh2YWx1ZTogT3ZlcmxheVZhbHVlKSB7XHJcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XHJcbiAgICAgIGNhc2UgJ1ZFUllfU1RST05HJyBhcyBPdmVybGF5VmFsdWU6XHJcbiAgICAgICAgcmV0dXJuICcwLjUnO1xyXG4gICAgICBjYXNlICdTVFJPTkcnIGFzIE92ZXJsYXlWYWx1ZTpcclxuICAgICAgICByZXR1cm4gJzAuNic7XHJcbiAgICAgIGNhc2UgJ01PREVSQVRFJyBhcyBPdmVybGF5VmFsdWU6XHJcbiAgICAgICAgcmV0dXJuICcwLjcnO1xyXG4gICAgICBjYXNlICdMSUdIVCcgYXMgT3ZlcmxheVZhbHVlOlxyXG4gICAgICAgIHJldHVybiAnMC44JztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJzEnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZWRpdFNlY3Rpb24oKSB7XHJcbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gNDc1KSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5jb250cm9sQXV0b1NsaWRlKGZhbHNlKTtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KHRydWUpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7IGRhdGE6IHRoaXMuZGF0YSB9KTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBnZXRTY3JlZW5TaXplKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VjdGlvbk1pbkhlaWdodCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZml0ID0gdGhpcy5zdHlsZXM/LmxheW91dD8uZml0O1xyXG4gICAgY29uc3QgaXNNb2JpbGUgPSB0aGlzLmdldFNjcmVlblNpemUoKSA8PSA0NzU7XHJcblxyXG4gICAgaWYgKGZpdCA9PT0gJ3NjcmVlbicpIHJldHVybiBpc01vYmlsZSA/ICcxMDB2aCcgOiAnY2FsYyg3NXZoICsgMTM0cHgpJztcclxuICAgIGlmIChmaXQgPT09ICdjb250ZW50JykgcmV0dXJuIGlzTW9iaWxlID8gJzU2MHB4JyA6ICc0MjBweCc7XHJcbiAgICByZXR1cm4gaXNNb2JpbGUgPyAnNTYwcHgnIDogJzQyMHB4JztcclxuICB9XHJcbn0iLCI8ZGl2IFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0JhY2tncm91bmRdPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIlxyXG4gIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCIgW2F0dHIuc3R5bGVdPVwiY3VzdG9tQ2xhc3NcIj5cclxuICA8ZGl2IGNsYXNzPVwiYmFubmVyLWNhcm91c2VsLXNoZWxsIGZsZXggcmVsYXRpdmUgZml4LXNhZmFyaS1mbGlja2VyaW5nXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAnbWluLWhlaWdodCc6IGdldFNlY3Rpb25NaW5IZWlnaHQoKSxcclxuICAgICAgICdwYWRkaW5nLXRvcCc6ICcwcHgnLFxyXG4gICAgICAgJ3BhZGRpbmctYm90dG9tJzogJzBweCdcclxuICAgICB9XCIgW3NwYWNpbmdBcm91bmRdPVwic3R5bGVzTGF5b3V0XCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQm9yZGVyXT1cInN0eWxlcz8uYm9yZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBicmVhay13b3JkIHctZnVsbCBpdGVtcy1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuIGJhbm5lci1jYXJvdXNlbC1jb250ZW50XCIgW2lkXT1cImRhdGE/LmlkXCI+XHJcblxyXG4gICAgICA8ZGl2ICNjYXJvdXNlbEVsZW1lbnQgaWQ9XCJjYXJvdXNlbEV4YW1wbGVJbnRlcnZhbFwiIGNsYXNzPVwiY2Fyb3VzZWwgc2xpZGUgYmFubmVyLWNhcm91c2VsXCIgZGF0YS1icy1yaWRlPVwiY2Fyb3VzZWxcIlxyXG4gICAgICAgIGRhdGEtYnMtcGF1c2U9XCJmYWxzZVwiPlxyXG5cclxuICAgICAgICA8b2wgY2xhc3M9XCJjYXJvdXNlbC1pbmRpY2F0b3JzXCIgKm5nSWY9XCIoY29udGVudD8ubGlzdEl0ZW0/LmRhdGE/Lmxlbmd0aCB8fCAwKSA+IDFcIj5cclxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaW1nIG9mIGNvbnRlbnQ/Lmxpc3RJdGVtPy5kYXRhOyBsZXQgaSA9IGluZGV4XCIgW2NsYXNzLmFjdGl2ZV09XCJpID09PSAwXCJcclxuICAgICAgICAgICAgZGF0YS1icy10YXJnZXQ9XCIjY2Fyb3VzZWxFeGFtcGxlSW50ZXJ2YWxcIiBbYXR0ci5kYXRhLWJzLXNsaWRlLXRvXT1cImlcIj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC9vbD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWlubmVyIGJhbm5lci1jYXJvdXNlbC1pbm5lclwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb250ZW50Py5saXN0SXRlbT8uZGF0YTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiY2Fyb3VzZWwtaXRlbSBiYW5uZXItY2Fyb3VzZWwtaXRlbVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaSA9PT0gY3VycmVudEluZGV4fVwiPlxyXG4gICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJpdGVtLmltYWdlLnVybFwiIFtzaW1wb0JsdXJDb250ZW50XT1cImdldEJsdXJWYWx1ZVwiIFtpZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgW3NpbXBvT2JqZWN0UG9zaXRpb25dPVwiaXRlbT8uaW1hZ2U/LnBvc2l0aW9uXCIgY2xhc3M9XCJpbWdjbGFzcyBiYW5uZXItY2Fyb3VzZWwtaW1hZ2VcIlxyXG4gICAgICAgICAgICAgIFthbHRdPVwiaXRlbT8uaW1hZ2U/LmFsdFRleHQgfHwgJ0Nhcm91c2VsIGltYWdlJ1wiIFthcHBJbWFnZUVkaXRvcl09XCJlZGl0IHx8IGZhbHNlXCJcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YT8uaWQraXRlbS5pbWFnZS5pZFwiIFtpbWFnZURhdGFdPVwiaXRlbT8uaW1hZ2VcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/LmltYWdlPy51cmxcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14eGwtOCBteC1hdXRvIHJlbGF0aXZlIG9wYWNpdHktMTAwIHBvc2l0aW9uLXJlbGF0aXZlIHRleHQtd3JhcHBlclwiIHRleHQtY29udGVudC1sYXllclxyXG4gICAgICAgICAgICBzdHlsZT1cInotaW5kZXg6IDE7XCIgW2lkXT1cImRhdGE/LmlkXCIgI21haW5Db250YWluZXIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICBbc3BhY2luZ0hvcml6b250YWxdPVwic3R5bGVzTGF5b3V0XCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlcz8ubGF5b3V0XCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctNSBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgY29udGVudC1zaWRlIHRleHQtY29udGFpbmVyXCIgW2lkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgICAgICBbc2ltcG9BbmltYXRpb25dPVwic3R5bGVzPy5hbmltYXRpb25cIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWxpZ24taXRlbXMtc3RyZXRjaCc6c3R5bGVzPy5sYXlvdXQ/LmFsaWduPT09J2xlZnQnIHx8IHN0eWxlcz8ubGF5b3V0Py5hbGlnbj09PSdjZW50ZXInIHx8IHN0eWxlcz8ubGF5b3V0Py5hbGlnbj09PSdyaWdodCd9XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02IHctZnVsbCBtYXgtdy0yeGwgaXRlbXMtc3RhcnQgZC1mbGV4IGZsZXgtY29sdW1uIFwiXHJcbiAgICAgICAgICAgICAgICBbc2ltcG9Db250YWluZXJBbGlnbm1lbnRdPVwic3R5bGVzTGF5b3V0XCIgW2lkXT1cImRhdGE/LmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRlbnQ/LmlucHV0VGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIml0ZW0ubGFiZWwuaW5jbHVkZXMoJ0hlYWRpbmcnKSA/ICdoZWFkaW5nLWxhcmdlIGxoLTIgbWItNCcgOiAnYm9keS1sYXJnZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c2ltcG8tdGV4dC1lZGl0b3IgWyh2YWx1ZSldPVwiaXRlbS52YWx1ZVwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCI+PC9zaW1wby10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YT8uYWN0aW9uICYmIGRhdGE/LmFjdGlvbj8uZGlzcGxheVwiIGNsYXNzPVwiY3VzdG9tY2xhc3Mgdy1mdWxsIG1iLTNcIiBbbmdDbGFzc109XCJbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlcz8ubGF5b3V0Py5hbGlnbiA9PT0gJ2xlZnQnID8gJ2p1c3RpZnktY29udGVudC1tZC1zdGFydCcgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzPy5sYXlvdXQ/LmFsaWduID09PSAnY2VudGVyJyA/ICdqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyJyA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXM/LmxheW91dD8uYWxpZ24gPT09ICdyaWdodCcgPyAnanVzdGlmeS1jb250ZW50LW1kLWVuZCcgOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGRhdGE/LmFjdGlvbj8uYnV0dG9uc1wiIGNsYXNzPVwiYnRuLWNvbnRhaW5lciBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YXBwLWJ1dHRvbi1lbGVtZW50IFtidXR0b25Db250ZW50XT1cImJ1dHRvbi5jb250ZW50XCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvbklkXT1cImJ1dHRvbi5pZFwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIiBbZWRpdF09XCJlZGl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIj48L2FwcC1idXR0b24tZWxlbWVudD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGEgY2xhc3M9XCJjYXJvdXNlbC1jb250cm9sLXByZXZcIiBkYXRhLWJzLXRhcmdldD1cIiNjYXJvdXNlbEV4YW1wbGVJbnRlcnZhbFwiIHJvbGU9XCJidXR0b25cIiBkYXRhLWJzLXNsaWRlPVwicHJldlwiXHJcbiAgICAgICAgICAqbmdJZj1cIihjb250ZW50Py5saXN0SXRlbT8uZGF0YT8ubGVuZ3RoIHx8IDApID4gMVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJvdXNlbC1jb250cm9sLXByZXYtaWNvbiBwcmV2aW91cy1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+UHJldmlvdXM8L3NwYW4+XHJcbiAgICAgICAgPC9hPlxyXG5cclxuICAgICAgICA8YSBjbGFzcz1cImNhcm91c2VsLWNvbnRyb2wtbmV4dFwiIGRhdGEtYnMtdGFyZ2V0PVwiI2Nhcm91c2VsRXhhbXBsZUludGVydmFsXCIgcm9sZT1cImJ1dHRvblwiIGRhdGEtYnMtc2xpZGU9XCJuZXh0XCJcclxuICAgICAgICAgICpuZ0lmPVwiKGNvbnRlbnQ/Lmxpc3RJdGVtPy5kYXRhPy5sZW5ndGggfHwgMCkgPiAxXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uIHByZXZpb3VzLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5OZXh0PC9zcGFuPlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlcz8uZGV2aWRlcj8uZGlzcGxheVwiPlxyXG4gICAgPHNpbXBvLXN2Zy1kaXZpZGVyIFtkaXZpZGVyVHlwZV09XCJzdHlsZXM/LmRldmlkZXI/LmRldmlkZXJUeXBlXCJcclxuICAgICAgW2NvbG9yXT1cIm5leHRDb21wb25lbnRDb2xvcj8uY29sb3JcIj48L3NpbXBvLXN2Zy1kaXZpZGVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCIgKGNsaWNrKT1cImVkaXRTZWN0aW9uKClcIj5cclxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxyXG4gICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=