@biit-solutions/wizardry-theme 1.22.26 → 1.22.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
File without changes
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ {}
File without changes
File without changes
File without changes
@@ -51,10 +51,10 @@ export class BiitActionButtonComponent {
51
51
  }
52
52
  }
53
53
  BiitActionButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BiitActionButtonComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
54
- BiitActionButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BiitActionButtonComponent, selector: "biit-action-button", inputs: { position: "position", additionalX: "additionalX", additionalY: "additionalY" }, queries: [{ propertyName: "inputButtons", predicate: BiitIconButtonComponent }], ngImport: i0, template: "<div id=\"fab\" class=\"floating-action-button\" [ngStyle]=\"positionStyle()\" (pointerover)=\"hover = true;\" (pointerleave)=\"hover = false\">\n <ng-content></ng-content>\n</div>\n", styles: [":root{--main-color: #F20D5E;--popup-background-color: rgba(0, 0, 0, .15);--main-background: #D9D9D9;--body-background: #EDEDED;--light-background: #D7D7D7;--error-color: #A1093F;--warning-color: var(--main-color);--floating-background: white;--main-font-color: white;--secondary-color: #808080;--secondary-text-color: #EDEDED;--secondary-background-color: #808080;--disabled-primary-color: #808080;--disabled-secondary-color: var(--main-color);--component-color: #262626;--active-color: var(--component-color);--hover-color: #EDEDED;--hover-primary-color: var(--main-color);--secondary-button-color: var(--component-color);--secondary-button-background-color: var(--main-font-color);--secondary-button-hover-background: var(--main-background);--secondary-button-active-background: var(--main-background);--quaternary-button-color: var(--main-font-color);--quaternary-button-background-color: var(--error-color);--quaternary-button-hover-background: var(--main-color);--quaternary-button-active-background: var(--main-color);--text-hover-color: #5A6473;--selected-color: #FBAEC9;--chart-background: #FFFFFF;--chart-component-color: var(--component-color);--icon-color: var(--main-color);--table-header-color: var(--component-color);--table-header-text: var(--main-background);--table-background-color: var(--chart-background);--table-hover-background-color: var(--chart-background);--table-border-color: var(--table-header-color);--table-selected-row-color: var(--main-background);--table-text-color: var(--secondary-text-color);--table-active-row-backgorund-color: var(--main-background);--scrollbar-color: var(--main-color);--menu-button-active: var(--main-color);--disabled-menu-color: #D9D9D9;--disabled-menu-color-hover: #FFFFFF;--nav-menu-hover-color: #70757e;--nav-menu-text-hover-color: var(--text-hover-color);--nav-menu-active-background: var(--hover-color);--nav-menu-disable-font: var(--hover-color);--nav-menu-separator-color: var(--secondary-color);--nav-menu-font-color: var(--nav-menu-hover-color);--nav-menu-font-disabled-color: #8a909a;--nav-menu-background-color: #FFFFFF;--nav-menu-active-color: var(--hover-color);--nav-menu-border-color: rgba(0, 0, 0, .18);--input-text-background: var(--main-background);--input-text-focus-background: var(--main-background);--input-text-hover-background: var(--main-background);--popup-color: var(--component-color);--popup-background: #FFFFFF;--popup-error-color: var(--error-color);--popup-close-button: var(--main-color)}.floating-action-button{box-sizing:border-box;position:fixed;z-index:999;opacity:50%;background:inherit;border:3px solid var(--component-color);display:flex;flex-direction:column;justify-content:flex-end}.floating-action-button:hover{opacity:100%}.floating-action-button:hover ::ng-deep button:not(:first-child){display:flex}.floating-action-button ::ng-deep button:not(:first-child){display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
54
+ BiitActionButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BiitActionButtonComponent, selector: "biit-action-button", inputs: { position: "position", additionalX: "additionalX", additionalY: "additionalY" }, queries: [{ propertyName: "inputButtons", predicate: BiitIconButtonComponent }], ngImport: i0, template: "<div id=\"fab\" class=\"floating-action-button\" [ngStyle]=\"positionStyle()\" (pointerover)=\"hover = true;\" (pointerleave)=\"hover = false\">\n <ng-content></ng-content>\n</div>\n", styles: [":root{--main-color: #F20D5E;--popup-background-color: rgba(0, 0, 0, .15);--main-background: #D9D9D9;--body-background: #EDEDED;--light-background: #D7D7D7;--error-color: #A1093F;--warning-color: var(--main-color);--floating-background: white;--main-font-color: white;--secondary-color: #808080;--secondary-text-color: #EDEDED;--secondary-background-color: #808080;--disabled-primary-color: #808080;--disabled-secondary-color: var(--main-color);--component-color: #262626;--active-color: var(--component-color);--hover-color: #EDEDED;--hover-primary-color: var(--main-color);--secondary-button-color: var(--component-color);--secondary-button-background-color: var(--main-font-color);--secondary-button-hover-background: var(--main-background);--secondary-button-active-background: var(--main-background);--quaternary-button-color: var(--main-font-color);--quaternary-button-background-color: var(--error-color);--quaternary-button-hover-background: var(--main-color);--quaternary-button-active-background: var(--main-color);--text-hover-color: #5A6473;--selected-color: #FBAEC9;--chart-background: #FFFFFF;--chart-component-color: var(--component-color);--icon-color: var(--main-color);--table-header-color: var(--component-color);--table-header-text: var(--main-background);--table-background-color: var(--chart-background);--table-hover-background-color: var(--secondary-text-color);--table-border-color: var(--table-header-color);--table-selected-row-color: var(--main-background);--table-text-color: var(--component-color);--table-active-row-backgorund-color: var(--main-background);--scrollbar-color: var(--main-color);--menu-button-active: var(--main-color);--disabled-menu-color: #D9D9D9;--disabled-menu-color-hover: #FFFFFF;--nav-menu-hover-color: #70757e;--nav-menu-text-hover-color: var(--text-hover-color);--nav-menu-active-background: var(--hover-color);--nav-menu-disable-font: var(--hover-color);--nav-menu-separator-color: var(--secondary-color);--nav-menu-font-color: var(--nav-menu-hover-color);--nav-menu-font-disabled-color: #8a909a;--nav-menu-background-color: #FFFFFF;--nav-menu-active-color: var(--hover-color);--nav-menu-border-color: rgba(0, 0, 0, .18);--input-text-background: var(--main-background);--input-text-focus-background: var(--main-background);--input-text-hover-background: var(--main-background);--popup-color: var(--component-color);--popup-background: #FFFFFF;--popup-error-color: var(--error-color);--popup-close-button: var(--main-color)}.floating-action-button{box-sizing:border-box;position:fixed;z-index:999;opacity:50%;background:inherit;border:3px solid var(--component-color);display:flex;flex-direction:column;justify-content:flex-end}.floating-action-button:hover{opacity:100%}.floating-action-button:hover ::ng-deep button:not(:first-child){display:flex}.floating-action-button ::ng-deep button:not(:first-child){display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
55
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BiitActionButtonComponent, decorators: [{
56
56
  type: Component,
57
- args: [{ selector: 'biit-action-button', template: "<div id=\"fab\" class=\"floating-action-button\" [ngStyle]=\"positionStyle()\" (pointerover)=\"hover = true;\" (pointerleave)=\"hover = false\">\n <ng-content></ng-content>\n</div>\n", styles: [":root{--main-color: #F20D5E;--popup-background-color: rgba(0, 0, 0, .15);--main-background: #D9D9D9;--body-background: #EDEDED;--light-background: #D7D7D7;--error-color: #A1093F;--warning-color: var(--main-color);--floating-background: white;--main-font-color: white;--secondary-color: #808080;--secondary-text-color: #EDEDED;--secondary-background-color: #808080;--disabled-primary-color: #808080;--disabled-secondary-color: var(--main-color);--component-color: #262626;--active-color: var(--component-color);--hover-color: #EDEDED;--hover-primary-color: var(--main-color);--secondary-button-color: var(--component-color);--secondary-button-background-color: var(--main-font-color);--secondary-button-hover-background: var(--main-background);--secondary-button-active-background: var(--main-background);--quaternary-button-color: var(--main-font-color);--quaternary-button-background-color: var(--error-color);--quaternary-button-hover-background: var(--main-color);--quaternary-button-active-background: var(--main-color);--text-hover-color: #5A6473;--selected-color: #FBAEC9;--chart-background: #FFFFFF;--chart-component-color: var(--component-color);--icon-color: var(--main-color);--table-header-color: var(--component-color);--table-header-text: var(--main-background);--table-background-color: var(--chart-background);--table-hover-background-color: var(--chart-background);--table-border-color: var(--table-header-color);--table-selected-row-color: var(--main-background);--table-text-color: var(--secondary-text-color);--table-active-row-backgorund-color: var(--main-background);--scrollbar-color: var(--main-color);--menu-button-active: var(--main-color);--disabled-menu-color: #D9D9D9;--disabled-menu-color-hover: #FFFFFF;--nav-menu-hover-color: #70757e;--nav-menu-text-hover-color: var(--text-hover-color);--nav-menu-active-background: var(--hover-color);--nav-menu-disable-font: var(--hover-color);--nav-menu-separator-color: var(--secondary-color);--nav-menu-font-color: var(--nav-menu-hover-color);--nav-menu-font-disabled-color: #8a909a;--nav-menu-background-color: #FFFFFF;--nav-menu-active-color: var(--hover-color);--nav-menu-border-color: rgba(0, 0, 0, .18);--input-text-background: var(--main-background);--input-text-focus-background: var(--main-background);--input-text-hover-background: var(--main-background);--popup-color: var(--component-color);--popup-background: #FFFFFF;--popup-error-color: var(--error-color);--popup-close-button: var(--main-color)}.floating-action-button{box-sizing:border-box;position:fixed;z-index:999;opacity:50%;background:inherit;border:3px solid var(--component-color);display:flex;flex-direction:column;justify-content:flex-end}.floating-action-button:hover{opacity:100%}.floating-action-button:hover ::ng-deep button:not(:first-child){display:flex}.floating-action-button ::ng-deep button:not(:first-child){display:none}\n"] }]
57
+ args: [{ selector: 'biit-action-button', template: "<div id=\"fab\" class=\"floating-action-button\" [ngStyle]=\"positionStyle()\" (pointerover)=\"hover = true;\" (pointerleave)=\"hover = false\">\n <ng-content></ng-content>\n</div>\n", styles: [":root{--main-color: #F20D5E;--popup-background-color: rgba(0, 0, 0, .15);--main-background: #D9D9D9;--body-background: #EDEDED;--light-background: #D7D7D7;--error-color: #A1093F;--warning-color: var(--main-color);--floating-background: white;--main-font-color: white;--secondary-color: #808080;--secondary-text-color: #EDEDED;--secondary-background-color: #808080;--disabled-primary-color: #808080;--disabled-secondary-color: var(--main-color);--component-color: #262626;--active-color: var(--component-color);--hover-color: #EDEDED;--hover-primary-color: var(--main-color);--secondary-button-color: var(--component-color);--secondary-button-background-color: var(--main-font-color);--secondary-button-hover-background: var(--main-background);--secondary-button-active-background: var(--main-background);--quaternary-button-color: var(--main-font-color);--quaternary-button-background-color: var(--error-color);--quaternary-button-hover-background: var(--main-color);--quaternary-button-active-background: var(--main-color);--text-hover-color: #5A6473;--selected-color: #FBAEC9;--chart-background: #FFFFFF;--chart-component-color: var(--component-color);--icon-color: var(--main-color);--table-header-color: var(--component-color);--table-header-text: var(--main-background);--table-background-color: var(--chart-background);--table-hover-background-color: var(--secondary-text-color);--table-border-color: var(--table-header-color);--table-selected-row-color: var(--main-background);--table-text-color: var(--component-color);--table-active-row-backgorund-color: var(--main-background);--scrollbar-color: var(--main-color);--menu-button-active: var(--main-color);--disabled-menu-color: #D9D9D9;--disabled-menu-color-hover: #FFFFFF;--nav-menu-hover-color: #70757e;--nav-menu-text-hover-color: var(--text-hover-color);--nav-menu-active-background: var(--hover-color);--nav-menu-disable-font: var(--hover-color);--nav-menu-separator-color: var(--secondary-color);--nav-menu-font-color: var(--nav-menu-hover-color);--nav-menu-font-disabled-color: #8a909a;--nav-menu-background-color: #FFFFFF;--nav-menu-active-color: var(--hover-color);--nav-menu-border-color: rgba(0, 0, 0, .18);--input-text-background: var(--main-background);--input-text-focus-background: var(--main-background);--input-text-hover-background: var(--main-background);--popup-color: var(--component-color);--popup-background: #FFFFFF;--popup-error-color: var(--error-color);--popup-close-button: var(--main-color)}.floating-action-button{box-sizing:border-box;position:fixed;z-index:999;opacity:50%;background:inherit;border:3px solid var(--component-color);display:flex;flex-direction:column;justify-content:flex-end}.floating-action-button:hover{opacity:100%}.floating-action-button:hover ::ng-deep button:not(:first-child){display:flex}.floating-action-button ::ng-deep button:not(:first-child){display:none}\n"] }]
58
58
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { position: [{
59
59
  type: Input
60
60
  }], additionalX: [{
@@ -85,7 +85,7 @@ BiitInputTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
85
85
  provide: TRANSLOCO_SCOPE,
86
86
  useValue: { scope: 'wizardry-theme/inputs', alias: "inputs" }
87
87
  }
88
- ], ngImport: i0, template: "<div class=\"biit-input\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" *transloco=\"let t\">\n <div class=\"input-container\">\n <biit-tooltip-icon *ngIf=\"info\"\n class=\"tooltip-icon\"\n [text]=\"info\"></biit-tooltip-icon>\n <input\n class=\"input-object\"\n (keydown)=\"checkValue($event)\"\n [(ngModel)]=\"value\"\n (input)=\"value\"\n (ngModelChange)=\"onChange($event); validateInput();\"\n (keydown.enter)=\"onActionPerformed.emit(value)\"\n [type]=\"reveal ? Type.TEXT : type\" required\n [min]=\"min\"\n [max]=\"max\"\n [minlength]=\"minLength\"\n [maxlength]=\"maxLength ? maxLength : 100\"\n [attr.name]=\"fieldName\"\n [class.error]=\"error || regExError || minLengthError\"\n [class.reveal]=\"reveal\"\n >\n <div *ngIf=\"type === Type.PASSWORD || icon\" class=\"input-show-icon-container\"\n (click)=\"reveal = (type === Type.PASSWORD ? !reveal : false); onActionPerformed.emit(value)\"\n (keydown.enter)=\"reveal = (type === Type.PASSWORD ? !reveal : false); onActionPerformed.emit(value)\"\n tabindex=\"0\">\n <biit-icon [name]=\"type === Type.PASSWORD ? 'show' : icon\"\n class=\"input-show-icon\"\n [pathStyle]=\"{fill: reveal ? 'var(--main-color)' : 'var(--component-color)'}\"\n ></biit-icon>\n </div>\n <div class=\"input-placeholder\" [class.input-filled]=\"this.value?.toString().length\">\n {{ _placeholder }}\n <a *ngIf=\"required\"\n [style.color]=\"value ? null : 'red'\">*</a>\n </div>\n <biit-icon *ngIf=\"error || regExError || minLengthError\" id=\"exclamation\" name=\"exclamation\"\n class=\"input-error-icon\" [pathStyle]=\"{fill:'#A1093F'}\"></biit-icon>\n <div class=\"bottom-line\"\n [class.disabled]=\"disabled\"\n [class.readonly]=\"readonly\"\n ></div>\n <div *ngIf=\"error\" class=\"input-error-msg\" id=\"error-message\">\n <a id=\"message\">\n {{ error }}\n </a>\n </div>\n <div *ngIf=\"regExError && !error\" id=\"regex-error-message\" class=\"input-error-msg\">\n <a id=\"regex-message\">\n {{ t('inputs.regex-error') }}\n </a>\n </div>\n <div *ngIf=\"minLengthError && !error && !regExError\" id=\"length-error-message\" class=\"input-error-msg\">\n <a id=\"length-message\">\n {{ t('inputs.minlength-error') }}\n </a>\n </div>\n <span *ngIf=\"description\" id=\"description\" class=\"input-description\">\n {{ description }}\n </span>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}.biit-input{display:flex;min-width:12.8em}.biit-input.disabled{pointer-events:none}.biit-input.disabled .input-object{background:var(--input-text-background);color:var(--secondary-color)}.biit-input.readonly .input-object{color:var(--secondary-color)}.input-container{position:relative;width:100%}.input-object{font-size:1em;display:block;border:none;color:var(--component-color);padding:.7em;height:2.1em;width:100%;min-width:2.1em;font-weight:400;background:var(--input-text-background)}.input-object:focus{outline:none;background:var(--input-text-focus-background)}.input-object:hover{background:var(--input-text-hover-background)}.input-object.error{color:var(--error-color);border-color:var(--error-color)}.input-object.password{padding:.7em 2.1em .55em .7em}.input-object.password.reveal{-webkit-text-security:none;input-security:none}.input-placeholder{color:var(--component-color);font-size:1em;font-weight:bolder;text-transform:uppercase;position:absolute;pointer-events:none;left:.7em;top:.42em;height:.7em;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}.input-object:focus~.input-placeholder,.input-object:-webkit-autofill~.input-placeholder,.input-filled{top:-.95em;font-size:.7em;line-height:.7em;font-weight:400;color:var(--secondary-color)}.input-error-icon{display:flex;top:.7em;position:absolute;width:.7em;height:.7em}.input-error-msg{position:absolute;display:flex;align-items:center;font-size:.75em;color:var(--error-color);padding-top:.2em;min-height:1.05em;line-height:120%}.input-error-msg a{display:block;line-height:1.1em}.input-show-icon{width:1.05em;height:1.05em}.input-show-icon-container{top:0;right:0;position:absolute;width:2.1em;height:2.1em;align-content:center;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.input-show-icon-container:hover,.input-show-icon-container:focus,.input-show-icon-container:focus-visible{background-color:var(--input-text-background);border:none;outline:none}.input-description{position:absolute;display:flex;align-items:center;font-size:.75em;color:gray;padding-top:1.4em;min-height:1.05em;line-height:120%;font-style:italic}.input-description a{display:block;line-height:1.1em}.bottom-line{position:relative;top:-3px;margin-bottom:-3px;width:auto;height:3px;background:var(--component-color)}.bottom-line.disabled,.bottom-line.readonly{background:var(--secondary-color)}.tooltip-icon{position:absolute;top:-.5em;left:-.5em}@media (max-width: 550px){.popup-canvas{min-width:0}.login-container{flex-direction:column-reverse;gap:2rem}}input[type=password]::-webkit-contacts-auto-fill-button,input[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden;display:none!important;pointer-events:none;height:0;width:0;margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.BiitIconComponent, selector: "biit-icon", inputs: ["name", "svgStyle", "pathStyle"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i5.BiitTooltipIconComponent, selector: "biit-tooltip-icon", inputs: ["text", "inline"] }] });
88
+ ], ngImport: i0, template: "<div class=\"biit-input\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" *transloco=\"let t\">\n <div class=\"input-container\">\n <biit-tooltip-icon *ngIf=\"info\"\n class=\"tooltip-icon\"\n [text]=\"info\"></biit-tooltip-icon>\n <input\n class=\"input-object\"\n (keydown)=\"checkValue($event)\"\n [(ngModel)]=\"value\"\n (input)=\"value\"\n (ngModelChange)=\"onChange($event); validateInput();\"\n (keydown.enter)=\"onActionPerformed.emit(value)\"\n [type]=\"reveal ? Type.TEXT : type\" required\n [min]=\"min\"\n [max]=\"max\"\n [minlength]=\"minLength\"\n [maxlength]=\"maxLength ? maxLength : 100\"\n [attr.name]=\"fieldName\"\n [class.error]=\"error || regExError || minLengthError\"\n [class.reveal]=\"reveal\"\n >\n <div *ngIf=\"type === Type.PASSWORD || icon\" class=\"input-show-icon-container\"\n (click)=\"reveal = (type === Type.PASSWORD ? !reveal : false); onActionPerformed.emit(value)\"\n (keydown.enter)=\"reveal = (type === Type.PASSWORD ? !reveal : false); onActionPerformed.emit(value)\"\n tabindex=\"0\">\n <biit-icon [name]=\"type === Type.PASSWORD ? 'show' : icon\"\n class=\"input-show-icon\"\n [pathStyle]=\"{fill: reveal ? 'var(--main-color)' : 'var(--component-color)'}\"\n ></biit-icon>\n </div>\n <div class=\"input-placeholder\" [class.input-filled]=\"this.value?.toString().length\">\n {{ _placeholder }}\n <a *ngIf=\"required\"\n [style.color]=\"value ? null : 'red'\">*</a>\n </div>\n <biit-icon *ngIf=\"error || regExError || minLengthError\" id=\"exclamation\" name=\"exclamation\"\n class=\"input-error-icon\" [pathStyle]=\"{fill:'#A1093F'}\"></biit-icon>\n <div class=\"bottom-line\"\n [class.disabled]=\"disabled\"\n [class.readonly]=\"readonly\"\n ></div>\n <div *ngIf=\"error\" class=\"input-error-msg\" id=\"error-message\">\n <a id=\"message\">\n {{ error }}\n </a>\n </div>\n <div *ngIf=\"regExError && !error\" id=\"regex-error-message\" class=\"input-error-msg\">\n <a id=\"regex-message\">\n {{ t('inputs.regex-error') }}\n </a>\n </div>\n <div *ngIf=\"minLengthError && !error && !regExError\" id=\"length-error-message\" class=\"input-error-msg\">\n <a id=\"length-message\">\n {{ t('inputs.minlength-error') }}\n </a>\n </div>\n <span *ngIf=\"description\" id=\"description\" class=\"input-description\">\n {{ description }}\n </span>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}.biit-input{display:flex;min-width:12.8em}.biit-input.disabled{pointer-events:none}.biit-input.disabled .input-object{background:inherit;color:var(--secondary-color)}.biit-input.readonly .input-object{color:var(--secondary-color)}.input-container{position:relative;width:100%}.input-object{font-size:1em;display:block;border:none;color:var(--component-color);padding:.7em;height:2.1em;width:100%;min-width:2.1em;font-weight:400;background:inherit}.input-object:focus{outline:none;background:var(--input-text-focus-background)}.input-object:hover{background:var(--input-text-hover-background)}.input-object.error{color:var(--error-color);border-color:var(--error-color)}.input-object.password{padding:.7em 2.1em .55em .7em}.input-object.password.reveal{-webkit-text-security:none;input-security:none}.input-placeholder{color:var(--component-color);font-size:1em;font-weight:bolder;text-transform:uppercase;position:absolute;pointer-events:none;left:.7em;top:.42em;height:.7em;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}.input-object:focus~.input-placeholder,.input-object:-webkit-autofill~.input-placeholder,.input-filled{top:-.95em;font-size:.7em;line-height:.7em;font-weight:400;color:var(--secondary-color)}.input-error-icon{display:flex;top:.7em;position:absolute;width:.7em;height:.7em}.input-error-msg{position:absolute;display:flex;align-items:center;font-size:.75em;color:var(--error-color);padding-top:.2em;min-height:1.05em;line-height:120%}.input-error-msg a{display:block;line-height:1.1em}.input-show-icon{width:1.05em;height:1.05em}.input-show-icon-container{top:0;right:0;position:absolute;width:2.1em;height:2.1em;align-content:center;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.input-show-icon-container:hover,.input-show-icon-container:focus,.input-show-icon-container:focus-visible{background-color:inherit;border:none;outline:none}.input-description{position:absolute;display:flex;align-items:center;font-size:.75em;color:gray;padding-top:1.4em;min-height:1.05em;line-height:120%;font-style:italic}.input-description a{display:block;line-height:1.1em}.bottom-line{position:relative;top:-3px;margin-bottom:-3px;width:auto;height:3px;background:var(--component-color)}.bottom-line.disabled,.bottom-line.readonly{background:var(--secondary-color)}.tooltip-icon{position:absolute;top:-.5em;left:-.5em}@media (max-width: 550px){.popup-canvas{min-width:0}.login-container{flex-direction:column-reverse;gap:2rem}}input[type=password]::-webkit-contacts-auto-fill-button,input[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden;display:none!important;pointer-events:none;height:0;width:0;margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.BiitIconComponent, selector: "biit-icon", inputs: ["name", "svgStyle", "pathStyle"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i5.BiitTooltipIconComponent, selector: "biit-tooltip-icon", inputs: ["text", "inline"] }] });
89
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BiitInputTextComponent, decorators: [{
90
90
  type: Component,
91
91
  args: [{ selector: 'biit-input-text', providers: [
@@ -98,7 +98,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
98
98
  provide: TRANSLOCO_SCOPE,
99
99
  useValue: { scope: 'wizardry-theme/inputs', alias: "inputs" }
100
100
  }
101
- ], template: "<div class=\"biit-input\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" *transloco=\"let t\">\n <div class=\"input-container\">\n <biit-tooltip-icon *ngIf=\"info\"\n class=\"tooltip-icon\"\n [text]=\"info\"></biit-tooltip-icon>\n <input\n class=\"input-object\"\n (keydown)=\"checkValue($event)\"\n [(ngModel)]=\"value\"\n (input)=\"value\"\n (ngModelChange)=\"onChange($event); validateInput();\"\n (keydown.enter)=\"onActionPerformed.emit(value)\"\n [type]=\"reveal ? Type.TEXT : type\" required\n [min]=\"min\"\n [max]=\"max\"\n [minlength]=\"minLength\"\n [maxlength]=\"maxLength ? maxLength : 100\"\n [attr.name]=\"fieldName\"\n [class.error]=\"error || regExError || minLengthError\"\n [class.reveal]=\"reveal\"\n >\n <div *ngIf=\"type === Type.PASSWORD || icon\" class=\"input-show-icon-container\"\n (click)=\"reveal = (type === Type.PASSWORD ? !reveal : false); onActionPerformed.emit(value)\"\n (keydown.enter)=\"reveal = (type === Type.PASSWORD ? !reveal : false); onActionPerformed.emit(value)\"\n tabindex=\"0\">\n <biit-icon [name]=\"type === Type.PASSWORD ? 'show' : icon\"\n class=\"input-show-icon\"\n [pathStyle]=\"{fill: reveal ? 'var(--main-color)' : 'var(--component-color)'}\"\n ></biit-icon>\n </div>\n <div class=\"input-placeholder\" [class.input-filled]=\"this.value?.toString().length\">\n {{ _placeholder }}\n <a *ngIf=\"required\"\n [style.color]=\"value ? null : 'red'\">*</a>\n </div>\n <biit-icon *ngIf=\"error || regExError || minLengthError\" id=\"exclamation\" name=\"exclamation\"\n class=\"input-error-icon\" [pathStyle]=\"{fill:'#A1093F'}\"></biit-icon>\n <div class=\"bottom-line\"\n [class.disabled]=\"disabled\"\n [class.readonly]=\"readonly\"\n ></div>\n <div *ngIf=\"error\" class=\"input-error-msg\" id=\"error-message\">\n <a id=\"message\">\n {{ error }}\n </a>\n </div>\n <div *ngIf=\"regExError && !error\" id=\"regex-error-message\" class=\"input-error-msg\">\n <a id=\"regex-message\">\n {{ t('inputs.regex-error') }}\n </a>\n </div>\n <div *ngIf=\"minLengthError && !error && !regExError\" id=\"length-error-message\" class=\"input-error-msg\">\n <a id=\"length-message\">\n {{ t('inputs.minlength-error') }}\n </a>\n </div>\n <span *ngIf=\"description\" id=\"description\" class=\"input-description\">\n {{ description }}\n </span>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}.biit-input{display:flex;min-width:12.8em}.biit-input.disabled{pointer-events:none}.biit-input.disabled .input-object{background:var(--input-text-background);color:var(--secondary-color)}.biit-input.readonly .input-object{color:var(--secondary-color)}.input-container{position:relative;width:100%}.input-object{font-size:1em;display:block;border:none;color:var(--component-color);padding:.7em;height:2.1em;width:100%;min-width:2.1em;font-weight:400;background:var(--input-text-background)}.input-object:focus{outline:none;background:var(--input-text-focus-background)}.input-object:hover{background:var(--input-text-hover-background)}.input-object.error{color:var(--error-color);border-color:var(--error-color)}.input-object.password{padding:.7em 2.1em .55em .7em}.input-object.password.reveal{-webkit-text-security:none;input-security:none}.input-placeholder{color:var(--component-color);font-size:1em;font-weight:bolder;text-transform:uppercase;position:absolute;pointer-events:none;left:.7em;top:.42em;height:.7em;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}.input-object:focus~.input-placeholder,.input-object:-webkit-autofill~.input-placeholder,.input-filled{top:-.95em;font-size:.7em;line-height:.7em;font-weight:400;color:var(--secondary-color)}.input-error-icon{display:flex;top:.7em;position:absolute;width:.7em;height:.7em}.input-error-msg{position:absolute;display:flex;align-items:center;font-size:.75em;color:var(--error-color);padding-top:.2em;min-height:1.05em;line-height:120%}.input-error-msg a{display:block;line-height:1.1em}.input-show-icon{width:1.05em;height:1.05em}.input-show-icon-container{top:0;right:0;position:absolute;width:2.1em;height:2.1em;align-content:center;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.input-show-icon-container:hover,.input-show-icon-container:focus,.input-show-icon-container:focus-visible{background-color:var(--input-text-background);border:none;outline:none}.input-description{position:absolute;display:flex;align-items:center;font-size:.75em;color:gray;padding-top:1.4em;min-height:1.05em;line-height:120%;font-style:italic}.input-description a{display:block;line-height:1.1em}.bottom-line{position:relative;top:-3px;margin-bottom:-3px;width:auto;height:3px;background:var(--component-color)}.bottom-line.disabled,.bottom-line.readonly{background:var(--secondary-color)}.tooltip-icon{position:absolute;top:-.5em;left:-.5em}@media (max-width: 550px){.popup-canvas{min-width:0}.login-container{flex-direction:column-reverse;gap:2rem}}input[type=password]::-webkit-contacts-auto-fill-button,input[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden;display:none!important;pointer-events:none;height:0;width:0;margin:0}\n"] }]
101
+ ], template: "<div class=\"biit-input\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" *transloco=\"let t\">\n <div class=\"input-container\">\n <biit-tooltip-icon *ngIf=\"info\"\n class=\"tooltip-icon\"\n [text]=\"info\"></biit-tooltip-icon>\n <input\n class=\"input-object\"\n (keydown)=\"checkValue($event)\"\n [(ngModel)]=\"value\"\n (input)=\"value\"\n (ngModelChange)=\"onChange($event); validateInput();\"\n (keydown.enter)=\"onActionPerformed.emit(value)\"\n [type]=\"reveal ? Type.TEXT : type\" required\n [min]=\"min\"\n [max]=\"max\"\n [minlength]=\"minLength\"\n [maxlength]=\"maxLength ? maxLength : 100\"\n [attr.name]=\"fieldName\"\n [class.error]=\"error || regExError || minLengthError\"\n [class.reveal]=\"reveal\"\n >\n <div *ngIf=\"type === Type.PASSWORD || icon\" class=\"input-show-icon-container\"\n (click)=\"reveal = (type === Type.PASSWORD ? !reveal : false); onActionPerformed.emit(value)\"\n (keydown.enter)=\"reveal = (type === Type.PASSWORD ? !reveal : false); onActionPerformed.emit(value)\"\n tabindex=\"0\">\n <biit-icon [name]=\"type === Type.PASSWORD ? 'show' : icon\"\n class=\"input-show-icon\"\n [pathStyle]=\"{fill: reveal ? 'var(--main-color)' : 'var(--component-color)'}\"\n ></biit-icon>\n </div>\n <div class=\"input-placeholder\" [class.input-filled]=\"this.value?.toString().length\">\n {{ _placeholder }}\n <a *ngIf=\"required\"\n [style.color]=\"value ? null : 'red'\">*</a>\n </div>\n <biit-icon *ngIf=\"error || regExError || minLengthError\" id=\"exclamation\" name=\"exclamation\"\n class=\"input-error-icon\" [pathStyle]=\"{fill:'#A1093F'}\"></biit-icon>\n <div class=\"bottom-line\"\n [class.disabled]=\"disabled\"\n [class.readonly]=\"readonly\"\n ></div>\n <div *ngIf=\"error\" class=\"input-error-msg\" id=\"error-message\">\n <a id=\"message\">\n {{ error }}\n </a>\n </div>\n <div *ngIf=\"regExError && !error\" id=\"regex-error-message\" class=\"input-error-msg\">\n <a id=\"regex-message\">\n {{ t('inputs.regex-error') }}\n </a>\n </div>\n <div *ngIf=\"minLengthError && !error && !regExError\" id=\"length-error-message\" class=\"input-error-msg\">\n <a id=\"length-message\">\n {{ t('inputs.minlength-error') }}\n </a>\n </div>\n <span *ngIf=\"description\" id=\"description\" class=\"input-description\">\n {{ description }}\n </span>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}.biit-input{display:flex;min-width:12.8em}.biit-input.disabled{pointer-events:none}.biit-input.disabled .input-object{background:inherit;color:var(--secondary-color)}.biit-input.readonly .input-object{color:var(--secondary-color)}.input-container{position:relative;width:100%}.input-object{font-size:1em;display:block;border:none;color:var(--component-color);padding:.7em;height:2.1em;width:100%;min-width:2.1em;font-weight:400;background:inherit}.input-object:focus{outline:none;background:var(--input-text-focus-background)}.input-object:hover{background:var(--input-text-hover-background)}.input-object.error{color:var(--error-color);border-color:var(--error-color)}.input-object.password{padding:.7em 2.1em .55em .7em}.input-object.password.reveal{-webkit-text-security:none;input-security:none}.input-placeholder{color:var(--component-color);font-size:1em;font-weight:bolder;text-transform:uppercase;position:absolute;pointer-events:none;left:.7em;top:.42em;height:.7em;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}.input-object:focus~.input-placeholder,.input-object:-webkit-autofill~.input-placeholder,.input-filled{top:-.95em;font-size:.7em;line-height:.7em;font-weight:400;color:var(--secondary-color)}.input-error-icon{display:flex;top:.7em;position:absolute;width:.7em;height:.7em}.input-error-msg{position:absolute;display:flex;align-items:center;font-size:.75em;color:var(--error-color);padding-top:.2em;min-height:1.05em;line-height:120%}.input-error-msg a{display:block;line-height:1.1em}.input-show-icon{width:1.05em;height:1.05em}.input-show-icon-container{top:0;right:0;position:absolute;width:2.1em;height:2.1em;align-content:center;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.input-show-icon-container:hover,.input-show-icon-container:focus,.input-show-icon-container:focus-visible{background-color:inherit;border:none;outline:none}.input-description{position:absolute;display:flex;align-items:center;font-size:.75em;color:gray;padding-top:1.4em;min-height:1.05em;line-height:120%;font-style:italic}.input-description a{display:block;line-height:1.1em}.bottom-line{position:relative;top:-3px;margin-bottom:-3px;width:auto;height:3px;background:var(--component-color)}.bottom-line.disabled,.bottom-line.readonly{background:var(--secondary-color)}.tooltip-icon{position:absolute;top:-.5em;left:-.5em}@media (max-width: 550px){.popup-canvas{min-width:0}.login-container{flex-direction:column-reverse;gap:2rem}}input[type=password]::-webkit-contacts-auto-fill-button,input[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden;display:none!important;pointer-events:none;height:0;width:0;margin:0}\n"] }]
102
102
  }], propDecorators: { placeholder: [{
103
103
  type: Input
104
104
  }], error: [{
@@ -43,12 +43,20 @@ export class BiitDatatableComponent {
43
43
  this.selected = [];
44
44
  this.pageSizeList = [];
45
45
  this.loading = false;
46
+ this.rowStyleClass = 'biit-row-highlight';
46
47
  this.search = "";
47
48
  this.onSelection = new EventEmitter();
48
49
  this.onPageChange = new EventEmitter();
49
50
  this.ColumnMode = ColumnMode;
50
51
  this.SelectionType = SelectionType;
51
52
  this.BiitMultiselectType = BiitMultiselectType;
53
+ this.getRowClass = (row) => {
54
+ const highlightClass = this.rowStyleClass?.trim();
55
+ if (!highlightClass || !this.rowStylePredicate) {
56
+ return '';
57
+ }
58
+ return this.rowStylePredicate(row) ? highlightClass : '';
59
+ };
52
60
  biitIconService.registerIcons(completeIconSet);
53
61
  }
54
62
  ngOnInit() {
@@ -96,10 +104,10 @@ export class BiitDatatableComponent {
96
104
  }
97
105
  }
98
106
  BiitDatatableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BiitDatatableComponent, deps: [{ token: i1.BiitIconService }], target: i0.ɵɵFactoryTarget.Component });
99
- BiitDatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BiitDatatableComponent, selector: "biit-datatable", inputs: { data: "data", columns: "columns", pageSize: "pageSize", pageSizeList: "pageSizeList", loading: "loading", selectable: "selectable", singleSelection: "singleSelection", scrollbarH: "scrollbarH", hideHeader: "hideHeader", hideFooter: "hideFooter", serverSide: "serverSide", page: "page" }, outputs: { onSelection: "onSelection", onPageChange: "onPageChange" }, providers: [provideTranslocoScope({ scope: 'wizardry-theme/table', alias: 't' })], queries: [{ propertyName: "actionsTpl", first: true, predicate: ["actions"], descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<div id=\"biit-table\" class=\"table-canvas\" *transloco=\"let t\">\n <div class=\"top\" *ngIf=\"!hideHeader\">\n <div id=\"menu\" class=\"action-bar\">\n <biit-vertical-menu *ngIf=\"actionsTpl\" class=\"vertical-menu\">\n <ng-container *ngTemplateOutlet=\"actionsTpl\"></ng-container>\n </biit-vertical-menu>\n <div *ngIf=\"actionsTpl\" class=\"horizontal-menu default-menu\">\n <ng-container *ngTemplateOutlet=\"actionsTpl\"></ng-container>\n </div>\n <div class=\"default-menu\" *ngIf=\"!actionsTpl\">\n <ng-content></ng-content>\n </div>\n </div>\n <div id=\"options\" class=\"options\">\n <biit-input-text id=\"search\" #searchInput\n [ngModel]=\"search\"\n (onActionPerformed)=\"\n onFilter($event, true);\n \"\n (ngModelChange)=\"onFilter($event)\"\n (focusout)=\"searchInput.value = search\"\n icon=\"search\"\n [placeholder]=\"t('t.search')\"\n ></biit-input-text>\n <biit-multiselect id=\"column-selector\" [ngModel]=\"_columns\"\n (ngModelChange)=\"setColumnVisibility($event)\"\n [data]=\"allColumns\"\n label=\"name\"\n value=\"visible\"\n [type]=\"BiitMultiselectType.ICON\"\n [title]=\"t('t.column-selector')\"\n [compact]=\"true\"\n ></biit-multiselect>\n </div>\n </div>\n <div id=\"content\" class=\"table\">\n <biit-progress-bar *ngIf=\"loading\"></biit-progress-bar>\n <ng-container *ngIf=\"!serverSide\">\n <ngx-datatable #table\n [rows]=\"data\"\n [columns]=\"_columns\"\n [columnMode]=\"'force'\"\n [headerHeight]=\"42\"\n [footerHeight]=\"hideFooter ? 0 : 34\"\n [rowHeight]=\"'auto'\"\n [reorderable]=\"false\"\n [selectionType]=\"SelectionType.checkbox\"\n [selected]=\"selected\"\n (select)=\"onSelect($event)\"\n (activate)=\"onActivate($event)\"\n [virtualization]=\"false\"\n [scrollbarVDynamic]=\"true\"\n [limit]=\"pageSize\"\n [scrollbarH]=\"scrollbarH\"\n [messages]=\"{emptyMessage: t('t.empty-message')}\"\n >\n <ngx-datatable-column *ngIf=\"selectable && !singleSelection\"\n #chkbox\n [width]=\"42\"\n [sortable]=\"false\"\n [canAutoResize]=\"false\"\n [draggable]=\"false\"\n [resizeable]=\"false\"\n [name]=\"'chkbox'\"\n >\n <ng-template\n ngx-datatable-header-template\n let-value=\"value\"\n let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\"\n >\n <biit-checkbox [ngModel]=\"allRowsSelected\" (ngModelChange)=\"selectFn(!allRowsSelected)\"></biit-checkbox>\n </ng-template>\n <ng-template\n ngx-datatable-cell-template\n let-value=\"value\"\n let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\n >\n <biit-checkbox [ngModel]=\"isSelected\" (ngModelChange)=\"onCheckboxChangeFn($event)\"></biit-checkbox>\n </ng-template>\n </ngx-datatable-column>\n\n <ngx-datatable-column *ngFor=\"let column of _columns\"\n [name]=\"column.name\"\n [prop]=\"column.prop\"\n [checkboxable]=\"column.checkboxable\"\n [frozenLeft]=\"column.frozenLeft\"\n [frozenRight]=\"column.frozenRight\"\n [flexGrow]=\"column.flexGrow\"\n [minWidth]=\"column.minWidth\"\n [maxWidth]=\"column.maxWidth\"\n [width]=\"column.width\"\n [resizeable]=\"column.resizeable\"\n [comparator]=\"column.comparator\"\n [pipe]=\"column.pipe\"\n [sortable]=\"column.sortable\"\n [draggable]=\"column.draggable\"\n [canAutoResize]=\"column.canAutoResize\"\n [cellTemplate]=\"column.cellTemplate\"\n [ghostCellTemplate]=\"column.ghostCellTemplate\"\n [treeToggleTemplate]=\"column.treeToggleTemplate\"\n [cellClass]=\"column.cellClass\"\n [headerTemplate]=\"column.headerTemplate\"\n [headerClass]=\"column.headerClass\"\n [headerCheckboxable]=\"column.headerCheckboxable\"\n [isTreeColumn]=\"column.isTreeColumn\"\n [treeLevelIndent]=\"column.treeLevelIndent\"\n [summaryFunc]=\"column.summaryFunc\"\n [summaryTemplate]=\"column.summaryTemplate\"\n ></ngx-datatable-column>\n\n <ngx-datatable-footer id=\"datatable-footer\">\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSizeCurrent=\"pageSize\"\n let-selectedCount=\"selectedCount\"\n let-curPage=\"curPage\"\n let-offset=\"offset\"\n >\n <div class=\"label\">\n <span>{{ t('t.total') }}: </span><span id=\"total-number-of-items\">{{rowCount}}</span>\n <span *ngIf=\"selectedCount\">&nbsp;&nbsp;|&nbsp;&nbsp;{{ t('t.selected') }}: </span><span *ngIf=\"selectedCount\" id=\"number-of-items-selected\">{{selectedCount}}</span>\n </div>\n <div class=\"pagination\" [style.display]=\"!((rowCount / pageSize) > 1) ? 'none' : null\">\n <biit-datatable-pager #pager\n [page]=\"curPage\"\n [size]=\"pageSizeCurrent\"\n [count]=\"rowCount\"\n [hidden]=\"!((rowCount / pageSize) > 1)\"\n (change)=\"table.onFooterPage($event)\">\n </biit-datatable-pager>\n </div>\n <div class=\"page-items\" *ngIf=\"pageSizeList\">\n <div *ngIf=\"pageSizeList?.length\">\n <span>{{ t('t.rows-per-page') }}:</span>\n <select [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"pager.size = $event\">\n <option *ngFor=\"let size of pageSizeList\"\n [ngValue]=\"size\"\n >\n {{size}}\n </option>\n </select>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n\n <ng-container *ngIf=\"serverSide\">\n <ngx-datatable #table\n [rows]=\"data\"\n [columns]=\"_columns\"\n [columnMode]=\"'force'\"\n [headerHeight]=\"42\"\n [footerHeight]=\"hideFooter ? 0 : 34\"\n [rowHeight]=\"'auto'\"\n [reorderable]=\"false\"\n [selectionType]=\"SelectionType.checkbox\"\n [selected]=\"selected\"\n (select)=\"onSelect($event)\"\n (activate)=\"onActivate($event)\"\n [virtualization]=\"false\"\n [scrollbarVDynamic]=\"true\"\n [scrollbarH]=\"scrollbarH\"\n [messages]=\"{emptyMessage: t('t.empty-message')}\"\n [externalPaging]=\"true\"\n [count]=\"page.totalElements\"\n [offset]=\"page.pageNumber\"\n [limit]=\"page.pageSize\"\n (page)=\"onFooterPageChange($event)\"\n >\n <ngx-datatable-column *ngIf=\"selectable && !singleSelection\"\n #chkbox\n [width]=\"42\"\n [sortable]=\"false\"\n [canAutoResize]=\"false\"\n [draggable]=\"false\"\n [resizeable]=\"false\"\n [name]=\"'chkbox'\"\n >\n <ng-template\n ngx-datatable-header-template\n let-value=\"value\"\n let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\"\n >\n <biit-checkbox [ngModel]=\"allRowsSelected\" (ngModelChange)=\"selectFn(!allRowsSelected)\"></biit-checkbox>\n </ng-template>\n <ng-template\n ngx-datatable-cell-template\n let-value=\"value\"\n let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\n >\n <biit-checkbox [ngModel]=\"isSelected\" (ngModelChange)=\"onCheckboxChangeFn($event)\"></biit-checkbox>\n </ng-template>\n </ngx-datatable-column>\n\n <ngx-datatable-column *ngFor=\"let column of _columns\"\n [name]=\"column.name\"\n [prop]=\"column.prop\"\n [checkboxable]=\"column.checkboxable\"\n [frozenLeft]=\"column.frozenLeft\"\n [frozenRight]=\"column.frozenRight\"\n [flexGrow]=\"column.flexGrow\"\n [minWidth]=\"column.minWidth\"\n [maxWidth]=\"column.maxWidth\"\n [width]=\"column.width\"\n [resizeable]=\"column.resizeable\"\n [comparator]=\"column.comparator\"\n [pipe]=\"column.pipe\"\n [sortable]=\"column.sortable\"\n [draggable]=\"column.draggable\"\n [canAutoResize]=\"column.canAutoResize\"\n [cellTemplate]=\"column.cellTemplate\"\n [ghostCellTemplate]=\"column.ghostCellTemplate\"\n [treeToggleTemplate]=\"column.treeToggleTemplate\"\n [cellClass]=\"column.cellClass\"\n [headerTemplate]=\"column.headerTemplate\"\n [headerClass]=\"column.headerClass\"\n [headerCheckboxable]=\"column.headerCheckboxable\"\n [isTreeColumn]=\"column.isTreeColumn\"\n [treeLevelIndent]=\"column.treeLevelIndent\"\n [summaryFunc]=\"column.summaryFunc\"\n [summaryTemplate]=\"column.summaryTemplate\"\n ></ngx-datatable-column>\n\n <ngx-datatable-footer>\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSizeCurrent=\"pageSize\"\n let-selectedCount=\"selectedCount\"\n let-curPage=\"curPage\"\n let-offset=\"offset\"\n >\n <div class=\"label\" id=\"total-elements\">\n <span>{{ t('t.total') }}: {{rowCount}}</span>\n <span *ngIf=\"selectedCount\">&nbsp;&nbsp;|&nbsp;&nbsp;{{ t('t.selected') }}: {{selectedCount}}</span>\n </div>\n <div class=\"pagination\" [style.display]=\"!((rowCount / pageSize) > 1) ? 'none' : null\">\n <biit-datatable-pager #pager\n [page]=\"curPage\"\n [size]=\"pageSizeCurrent\"\n [count]=\"rowCount\"\n [hidden]=\"!((rowCount / pageSize) > 1)\"\n (change)=\"table.onFooterPage($event)\">\n </biit-datatable-pager>\n </div>\n <div class=\"page-items\" *ngIf=\"pageSizeList\">\n <div *ngIf=\"pageSizeList?.length\">\n <span>{{ t('t.rows-per-page') }}:</span>\n <select [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"pager.size = $event\">\n <option *ngFor=\"let size of pageSizeList\"\n [ngValue]=\"size\"\n >\n {{size}}\n </option>\n </select>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n", styles: [".table-canvas{height:100%;display:flex;flex-direction:column;gap:14px;background:var(--table-background-color);color:var(--table-text-color)}.table-canvas .top{display:flex;flex:0}.table-canvas .top .action-bar{display:flex;flex:1}.table-canvas .top .options{display:flex;flex:0}.table-canvas .table{position:relative;flex:1;min-height:0;min-width:0}.table-canvas .table biit-progress-bar{position:absolute;z-index:1;left:0;right:3px;top:42px}.table-canvas .table ::ng-deep ngx-datatable{height:100%;position:absolute;inset:0}.table-canvas .table ::ng-deep ngx-datatable>div{height:calc(100% - 42px)}.table-canvas .table ::ng-deep ngx-datatable>div>div{height:100%}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner{height:inherit}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap{height:100%!important;width:calc(100% - 3px);display:flex;align-items:center;justify-content:center;background:var(--table-header-color);color:var(--table-header-text)}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap span{color:var(--table-text-color);font-size:16px;line-height:100%;font-weight:700;text-transform:uppercase}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap .sort-btn{position:absolute;right:14px}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap:has(biit-checkbox){background:var(--table-background-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-body{height:100%!important;overflow-y:auto!important}.table-canvas .table ::ng-deep ngx-datatable datatable-body .empty-row{height:100%;display:flex;align-items:center;justify-content:center}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row .datatable-body-cell-label{display:flex;align-items:center;min-height:42px;border-bottom:3px solid var(--table-header-color);width:calc(100% - 3px);padding:9px 14px;line-height:120%;height:100%}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row:hover .datatable-body-cell-label{background:var(--table-text-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row.active .datatable-body-cell-label{background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer{position:absolute;bottom:0;background:var(--table-background-color);z-index:10}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .label{flex:1 0}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .pagination{display:flex;margin:auto;flex:0;justify-content:center}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .pagination biit-datatable-pager{flex:none!important}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items{flex:1 0;display:flex;justify-content:flex-end;align-items:center;color:var(--table-text-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select{appearance:none;border:none;height:34px;min-width:34px;padding:8px 14px;text-align:end;font-size:14px;font-family:Montserrat,serif;cursor:pointer;background:var(--table-background-color);color:var(--table-text-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select:focus-visible{outline:none;background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select:hover{background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select *{background:var(--table-background-color);padding:5px}.table-canvas .table ::ng-deep ngx-datatable:has(datatable-footer) datatable-body{height:calc(100% - 48px)!important}::ng-deep ngx-datatable .auto-details-height .datatable-row-wrapper{height:unset!important}::ng-deep ngx-datatable .auto-details-height .datatable-row-wrapper .datatable-row-detail{height:unset!important}.default-menu{display:flex;flex-direction:row}@media screen and (max-width: 600px){.page-items,.page-size-selector,.horizontal-menu{display:none!important}}@media screen and (min-width: 601px){.vertical-menu{display:none!important}}\n"], dependencies: [{ kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.BiitCheckboxComponent, selector: "biit-checkbox", inputs: ["disabled", "description", "showAlwaysDescription"], outputs: ["onValueChange"] }, { kind: "component", type: i5.BiitDatatablePagerComponent, selector: "biit-datatable-pager" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarVDynamic", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "ghostLoadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "disableRowCheck", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i6.DataTableColumnDirective, selector: "ngx-datatable-column", inputs: ["name", "prop", "frozenLeft", "frozenRight", "flexGrow", "resizeable", "comparator", "pipe", "sortable", "draggable", "canAutoResize", "minWidth", "width", "maxWidth", "checkboxable", "headerCheckboxable", "headerClass", "cellClass", "isTreeColumn", "treeLevelIndent", "summaryFunc", "summaryTemplate", "cellTemplate", "headerTemplate", "treeToggleTemplate", "ghostCellTemplate"] }, { kind: "directive", type: i6.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i6.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i6.DataTableFooterTemplateDirective, selector: "[ngx-datatable-footer-template]" }, { kind: "directive", type: i6.DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: ["footerHeight", "totalMessage", "selectedMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "template"] }, { kind: "component", type: i7.BiitProgressBarComponent, selector: "biit-progress-bar", inputs: ["type", "_value", "value"] }, { kind: "component", type: i4.BiitMultiselectComponent, selector: "biit-multiselect", inputs: ["title", "type", "icon", "label", "value", "descriptionField", "description", "data", "primitive", "compact", "disabled", "required", "sort-asc", "sort-desc"], outputs: ["onCreate"] }, { kind: "directive", type: i8.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i4.BiitInputTextComponent, selector: "biit-input-text", inputs: ["placeholder", "error", "description", "info", "type", "icon", "fieldName", "disabled", "required", "readonly", "min", "max", "minLength", "maxLength", "regEx"], outputs: ["onActionPerformed"] }, { kind: "component", type: i9.BiitVerticalMenuComponent, selector: "biit-vertical-menu" }] });
107
+ BiitDatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BiitDatatableComponent, selector: "biit-datatable", inputs: { data: "data", columns: "columns", pageSize: "pageSize", pageSizeList: "pageSizeList", loading: "loading", selectable: "selectable", singleSelection: "singleSelection", scrollbarH: "scrollbarH", hideHeader: "hideHeader", hideFooter: "hideFooter", serverSide: "serverSide", page: "page", rowStylePredicate: "rowStylePredicate", rowStyleClass: "rowStyleClass" }, outputs: { onSelection: "onSelection", onPageChange: "onPageChange" }, providers: [provideTranslocoScope({ scope: 'wizardry-theme/table', alias: 't' })], queries: [{ propertyName: "actionsTpl", first: true, predicate: ["actions"], descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<div id=\"biit-table\" class=\"table-canvas\" *transloco=\"let t\">\n <div class=\"top\" *ngIf=\"!hideHeader\">\n <div id=\"menu\" class=\"action-bar\">\n <biit-vertical-menu *ngIf=\"actionsTpl\" class=\"vertical-menu\">\n <ng-container *ngTemplateOutlet=\"actionsTpl\"></ng-container>\n </biit-vertical-menu>\n <div *ngIf=\"actionsTpl\" class=\"horizontal-menu default-menu\">\n <ng-container *ngTemplateOutlet=\"actionsTpl\"></ng-container>\n </div>\n <div class=\"default-menu\" *ngIf=\"!actionsTpl\">\n <ng-content></ng-content>\n </div>\n </div>\n <div id=\"options\" class=\"options\">\n <biit-input-text id=\"search\" #searchInput\n [ngModel]=\"search\"\n (onActionPerformed)=\"\n onFilter($event, true);\n \"\n (ngModelChange)=\"onFilter($event)\"\n (focusout)=\"searchInput.value = search\"\n icon=\"search\"\n [placeholder]=\"t('t.search')\"\n ></biit-input-text>\n <biit-multiselect id=\"column-selector\" [ngModel]=\"_columns\"\n (ngModelChange)=\"setColumnVisibility($event)\"\n [data]=\"allColumns\"\n label=\"name\"\n value=\"visible\"\n [type]=\"BiitMultiselectType.ICON\"\n [title]=\"t('t.column-selector')\"\n [compact]=\"true\"\n ></biit-multiselect>\n </div>\n </div>\n <div id=\"content\" class=\"table\">\n <biit-progress-bar *ngIf=\"loading\"></biit-progress-bar>\n <ng-container *ngIf=\"!serverSide\">\n <ngx-datatable #table\n [rows]=\"data\"\n [columns]=\"_columns\"\n [rowClass]=\"getRowClass\"\n [columnMode]=\"'force'\"\n [headerHeight]=\"42\"\n [footerHeight]=\"hideFooter ? 0 : 34\"\n [rowHeight]=\"'auto'\"\n [reorderable]=\"false\"\n [selectionType]=\"SelectionType.checkbox\"\n [selected]=\"selected\"\n (select)=\"onSelect($event)\"\n (activate)=\"onActivate($event)\"\n [virtualization]=\"false\"\n [scrollbarVDynamic]=\"true\"\n [limit]=\"pageSize\"\n [scrollbarH]=\"scrollbarH\"\n [messages]=\"{emptyMessage: t('t.empty-message')}\"\n >\n <ngx-datatable-column *ngIf=\"selectable && !singleSelection\"\n #chkbox\n [width]=\"42\"\n [sortable]=\"false\"\n [canAutoResize]=\"false\"\n [draggable]=\"false\"\n [resizeable]=\"false\"\n [name]=\"'chkbox'\"\n >\n <ng-template\n ngx-datatable-header-template\n let-value=\"value\"\n let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\"\n >\n <biit-checkbox [ngModel]=\"allRowsSelected\" (ngModelChange)=\"selectFn(!allRowsSelected)\"></biit-checkbox>\n </ng-template>\n <ng-template\n ngx-datatable-cell-template\n let-value=\"value\"\n let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\n >\n <biit-checkbox [ngModel]=\"isSelected\" (ngModelChange)=\"onCheckboxChangeFn($event)\"></biit-checkbox>\n </ng-template>\n </ngx-datatable-column>\n\n <ngx-datatable-column *ngFor=\"let column of _columns\"\n [name]=\"column.name\"\n [prop]=\"column.prop\"\n [checkboxable]=\"column.checkboxable\"\n [frozenLeft]=\"column.frozenLeft\"\n [frozenRight]=\"column.frozenRight\"\n [flexGrow]=\"column.flexGrow\"\n [minWidth]=\"column.minWidth\"\n [maxWidth]=\"column.maxWidth\"\n [width]=\"column.width\"\n [resizeable]=\"column.resizeable\"\n [comparator]=\"column.comparator\"\n [pipe]=\"column.pipe\"\n [sortable]=\"column.sortable\"\n [draggable]=\"column.draggable\"\n [canAutoResize]=\"column.canAutoResize\"\n [cellTemplate]=\"column.cellTemplate\"\n [ghostCellTemplate]=\"column.ghostCellTemplate\"\n [treeToggleTemplate]=\"column.treeToggleTemplate\"\n [cellClass]=\"column.cellClass\"\n [headerTemplate]=\"column.headerTemplate\"\n [headerClass]=\"column.headerClass\"\n [headerCheckboxable]=\"column.headerCheckboxable\"\n [isTreeColumn]=\"column.isTreeColumn\"\n [treeLevelIndent]=\"column.treeLevelIndent\"\n [summaryFunc]=\"column.summaryFunc\"\n [summaryTemplate]=\"column.summaryTemplate\"\n ></ngx-datatable-column>\n\n <ngx-datatable-footer id=\"datatable-footer\">\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSizeCurrent=\"pageSize\"\n let-selectedCount=\"selectedCount\"\n let-curPage=\"curPage\"\n let-offset=\"offset\"\n >\n <div class=\"label\">\n <span>{{ t('t.total') }}: </span><span id=\"total-number-of-items\">{{rowCount}}</span>\n <span *ngIf=\"selectedCount\">&nbsp;&nbsp;|&nbsp;&nbsp;{{ t('t.selected') }}: </span><span *ngIf=\"selectedCount\" id=\"number-of-items-selected\">{{selectedCount}}</span>\n </div>\n <div class=\"pagination\" [style.display]=\"!((rowCount / pageSize) > 1) ? 'none' : null\">\n <biit-datatable-pager #pager\n [page]=\"curPage\"\n [size]=\"pageSizeCurrent\"\n [count]=\"rowCount\"\n [hidden]=\"!((rowCount / pageSize) > 1)\"\n (change)=\"table.onFooterPage($event)\">\n </biit-datatable-pager>\n </div>\n <div class=\"page-items\" *ngIf=\"pageSizeList\">\n <div *ngIf=\"pageSizeList?.length\">\n <span>{{ t('t.rows-per-page') }}:</span>\n <select [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"pager.size = $event\">\n <option *ngFor=\"let size of pageSizeList\"\n [ngValue]=\"size\"\n >\n {{size}}\n </option>\n </select>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n\n <ng-container *ngIf=\"serverSide\">\n <ngx-datatable #table\n [rows]=\"data\"\n [columns]=\"_columns\"\n [rowClass]=\"getRowClass\"\n [columnMode]=\"'force'\"\n [headerHeight]=\"42\"\n [footerHeight]=\"hideFooter ? 0 : 34\"\n [rowHeight]=\"'auto'\"\n [reorderable]=\"false\"\n [selectionType]=\"SelectionType.checkbox\"\n [selected]=\"selected\"\n (select)=\"onSelect($event)\"\n (activate)=\"onActivate($event)\"\n [virtualization]=\"false\"\n [scrollbarVDynamic]=\"true\"\n [scrollbarH]=\"scrollbarH\"\n [messages]=\"{emptyMessage: t('t.empty-message')}\"\n [externalPaging]=\"true\"\n [count]=\"page.totalElements\"\n [offset]=\"page.pageNumber\"\n [limit]=\"page.pageSize\"\n (page)=\"onFooterPageChange($event)\"\n >\n <ngx-datatable-column *ngIf=\"selectable && !singleSelection\"\n #chkbox\n [width]=\"42\"\n [sortable]=\"false\"\n [canAutoResize]=\"false\"\n [draggable]=\"false\"\n [resizeable]=\"false\"\n [name]=\"'chkbox'\"\n >\n <ng-template\n ngx-datatable-header-template\n let-value=\"value\"\n let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\"\n >\n <biit-checkbox [ngModel]=\"allRowsSelected\" (ngModelChange)=\"selectFn(!allRowsSelected)\"></biit-checkbox>\n </ng-template>\n <ng-template\n ngx-datatable-cell-template\n let-value=\"value\"\n let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\n >\n <biit-checkbox [ngModel]=\"isSelected\" (ngModelChange)=\"onCheckboxChangeFn($event)\"></biit-checkbox>\n </ng-template>\n </ngx-datatable-column>\n\n <ngx-datatable-column *ngFor=\"let column of _columns\"\n [name]=\"column.name\"\n [prop]=\"column.prop\"\n [checkboxable]=\"column.checkboxable\"\n [frozenLeft]=\"column.frozenLeft\"\n [frozenRight]=\"column.frozenRight\"\n [flexGrow]=\"column.flexGrow\"\n [minWidth]=\"column.minWidth\"\n [maxWidth]=\"column.maxWidth\"\n [width]=\"column.width\"\n [resizeable]=\"column.resizeable\"\n [comparator]=\"column.comparator\"\n [pipe]=\"column.pipe\"\n [sortable]=\"column.sortable\"\n [draggable]=\"column.draggable\"\n [canAutoResize]=\"column.canAutoResize\"\n [cellTemplate]=\"column.cellTemplate\"\n [ghostCellTemplate]=\"column.ghostCellTemplate\"\n [treeToggleTemplate]=\"column.treeToggleTemplate\"\n [cellClass]=\"column.cellClass\"\n [headerTemplate]=\"column.headerTemplate\"\n [headerClass]=\"column.headerClass\"\n [headerCheckboxable]=\"column.headerCheckboxable\"\n [isTreeColumn]=\"column.isTreeColumn\"\n [treeLevelIndent]=\"column.treeLevelIndent\"\n [summaryFunc]=\"column.summaryFunc\"\n [summaryTemplate]=\"column.summaryTemplate\"\n ></ngx-datatable-column>\n\n <ngx-datatable-footer>\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSizeCurrent=\"pageSize\"\n let-selectedCount=\"selectedCount\"\n let-curPage=\"curPage\"\n let-offset=\"offset\"\n >\n <div class=\"label\" id=\"total-elements\">\n <span>{{ t('t.total') }}: {{rowCount}}</span>\n <span *ngIf=\"selectedCount\">&nbsp;&nbsp;|&nbsp;&nbsp;{{ t('t.selected') }}: {{selectedCount}}</span>\n </div>\n <div class=\"pagination\" [style.display]=\"!((rowCount / pageSize) > 1) ? 'none' : null\">\n <biit-datatable-pager #pager\n [page]=\"curPage\"\n [size]=\"pageSizeCurrent\"\n [count]=\"rowCount\"\n [hidden]=\"!((rowCount / pageSize) > 1)\"\n (change)=\"table.onFooterPage($event)\">\n </biit-datatable-pager>\n </div>\n <div class=\"page-items\" *ngIf=\"pageSizeList\">\n <div *ngIf=\"pageSizeList?.length\">\n <span>{{ t('t.rows-per-page') }}:</span>\n <select [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"pager.size = $event\">\n <option *ngFor=\"let size of pageSizeList\"\n [ngValue]=\"size\"\n >\n {{size}}\n </option>\n </select>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n", styles: [".table-canvas{height:100%;display:flex;flex-direction:column;gap:14px;background:var(--table-background-color);color:var(--table-text-color)}.table-canvas .top{display:flex;flex:0}.table-canvas .top .action-bar{display:flex;flex:1}.table-canvas .top .options{display:flex;flex:0}.table-canvas .table{position:relative;flex:1;min-height:0;min-width:0}.table-canvas .table biit-progress-bar{position:absolute;z-index:1;left:0;right:3px;top:42px}.table-canvas .table ::ng-deep ngx-datatable{height:100%;position:absolute;inset:0}.table-canvas .table ::ng-deep ngx-datatable>div{height:calc(100% - 42px)}.table-canvas .table ::ng-deep ngx-datatable>div>div{height:100%}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner{height:inherit}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap{height:100%!important;width:calc(100% - 3px);display:flex;align-items:center;justify-content:center;background:var(--table-header-color);color:var(--table-header-text)}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap span{color:var(--table-header-text);font-size:16px;line-height:100%;font-weight:700;text-transform:uppercase}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap .sort-btn{position:absolute;right:14px}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap:has(biit-checkbox){background:var(--table-background-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-body{height:100%!important;overflow-y:auto!important}.table-canvas .table ::ng-deep ngx-datatable datatable-body .empty-row{height:100%;display:flex;align-items:center;justify-content:center}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row .datatable-body-cell-label{display:flex;align-items:center;min-height:42px;border-bottom:3px solid var(--table-header-color);width:calc(100% - 3px);padding:9px 14px;line-height:120%;height:100%}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row.biit-row-highlight:not(.active) .datatable-body-cell-label{background:var(--table-row-highlight-background-color, rgba(255, 196, 0, .15))}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row:hover .datatable-body-cell-label{color:var(--table-text-color);background:var(--table-hover-background-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row.active .datatable-body-cell-label{background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer{position:absolute;bottom:0;background:var(--table-background-color);z-index:10}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .label{flex:1 0}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .pagination{display:flex;margin:auto;flex:0;justify-content:center}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .pagination biit-datatable-pager{flex:none!important}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items{flex:1 0;display:flex;justify-content:flex-end;align-items:center;color:var(--table-text-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select{appearance:none;border:none;height:34px;min-width:34px;padding:8px 14px;text-align:end;font-size:14px;font-family:Montserrat,serif;cursor:pointer;background:var(--table-background-color);color:var(--table-text-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select:focus-visible{outline:none;background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select:hover{background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select *{background:var(--table-background-color);padding:5px}.table-canvas .table ::ng-deep ngx-datatable:has(datatable-footer) datatable-body{height:calc(100% - 48px)!important}::ng-deep ngx-datatable .auto-details-height .datatable-row-wrapper{height:unset!important}::ng-deep ngx-datatable .auto-details-height .datatable-row-wrapper .datatable-row-detail{height:unset!important}.default-menu{display:flex;flex-direction:row}@media screen and (max-width: 600px){.page-items,.page-size-selector,.horizontal-menu{display:none!important}}@media screen and (min-width: 601px){.vertical-menu{display:none!important}}\n"], dependencies: [{ kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.BiitCheckboxComponent, selector: "biit-checkbox", inputs: ["disabled", "description", "showAlwaysDescription"], outputs: ["onValueChange"] }, { kind: "component", type: i5.BiitDatatablePagerComponent, selector: "biit-datatable-pager" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarVDynamic", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "ghostLoadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "disableRowCheck", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i6.DataTableColumnDirective, selector: "ngx-datatable-column", inputs: ["name", "prop", "frozenLeft", "frozenRight", "flexGrow", "resizeable", "comparator", "pipe", "sortable", "draggable", "canAutoResize", "minWidth", "width", "maxWidth", "checkboxable", "headerCheckboxable", "headerClass", "cellClass", "isTreeColumn", "treeLevelIndent", "summaryFunc", "summaryTemplate", "cellTemplate", "headerTemplate", "treeToggleTemplate", "ghostCellTemplate"] }, { kind: "directive", type: i6.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i6.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i6.DataTableFooterTemplateDirective, selector: "[ngx-datatable-footer-template]" }, { kind: "directive", type: i6.DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: ["footerHeight", "totalMessage", "selectedMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "template"] }, { kind: "component", type: i7.BiitProgressBarComponent, selector: "biit-progress-bar", inputs: ["type", "_value", "value"] }, { kind: "component", type: i4.BiitMultiselectComponent, selector: "biit-multiselect", inputs: ["title", "type", "icon", "label", "value", "descriptionField", "description", "data", "primitive", "compact", "disabled", "required", "sort-asc", "sort-desc"], outputs: ["onCreate"] }, { kind: "directive", type: i8.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i4.BiitInputTextComponent, selector: "biit-input-text", inputs: ["placeholder", "error", "description", "info", "type", "icon", "fieldName", "disabled", "required", "readonly", "min", "max", "minLength", "maxLength", "regEx"], outputs: ["onActionPerformed"] }, { kind: "component", type: i9.BiitVerticalMenuComponent, selector: "biit-vertical-menu" }] });
100
108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BiitDatatableComponent, decorators: [{
101
109
  type: Component,
102
- args: [{ selector: 'biit-datatable', providers: [provideTranslocoScope({ scope: 'wizardry-theme/table', alias: 't' })], template: "<div id=\"biit-table\" class=\"table-canvas\" *transloco=\"let t\">\n <div class=\"top\" *ngIf=\"!hideHeader\">\n <div id=\"menu\" class=\"action-bar\">\n <biit-vertical-menu *ngIf=\"actionsTpl\" class=\"vertical-menu\">\n <ng-container *ngTemplateOutlet=\"actionsTpl\"></ng-container>\n </biit-vertical-menu>\n <div *ngIf=\"actionsTpl\" class=\"horizontal-menu default-menu\">\n <ng-container *ngTemplateOutlet=\"actionsTpl\"></ng-container>\n </div>\n <div class=\"default-menu\" *ngIf=\"!actionsTpl\">\n <ng-content></ng-content>\n </div>\n </div>\n <div id=\"options\" class=\"options\">\n <biit-input-text id=\"search\" #searchInput\n [ngModel]=\"search\"\n (onActionPerformed)=\"\n onFilter($event, true);\n \"\n (ngModelChange)=\"onFilter($event)\"\n (focusout)=\"searchInput.value = search\"\n icon=\"search\"\n [placeholder]=\"t('t.search')\"\n ></biit-input-text>\n <biit-multiselect id=\"column-selector\" [ngModel]=\"_columns\"\n (ngModelChange)=\"setColumnVisibility($event)\"\n [data]=\"allColumns\"\n label=\"name\"\n value=\"visible\"\n [type]=\"BiitMultiselectType.ICON\"\n [title]=\"t('t.column-selector')\"\n [compact]=\"true\"\n ></biit-multiselect>\n </div>\n </div>\n <div id=\"content\" class=\"table\">\n <biit-progress-bar *ngIf=\"loading\"></biit-progress-bar>\n <ng-container *ngIf=\"!serverSide\">\n <ngx-datatable #table\n [rows]=\"data\"\n [columns]=\"_columns\"\n [columnMode]=\"'force'\"\n [headerHeight]=\"42\"\n [footerHeight]=\"hideFooter ? 0 : 34\"\n [rowHeight]=\"'auto'\"\n [reorderable]=\"false\"\n [selectionType]=\"SelectionType.checkbox\"\n [selected]=\"selected\"\n (select)=\"onSelect($event)\"\n (activate)=\"onActivate($event)\"\n [virtualization]=\"false\"\n [scrollbarVDynamic]=\"true\"\n [limit]=\"pageSize\"\n [scrollbarH]=\"scrollbarH\"\n [messages]=\"{emptyMessage: t('t.empty-message')}\"\n >\n <ngx-datatable-column *ngIf=\"selectable && !singleSelection\"\n #chkbox\n [width]=\"42\"\n [sortable]=\"false\"\n [canAutoResize]=\"false\"\n [draggable]=\"false\"\n [resizeable]=\"false\"\n [name]=\"'chkbox'\"\n >\n <ng-template\n ngx-datatable-header-template\n let-value=\"value\"\n let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\"\n >\n <biit-checkbox [ngModel]=\"allRowsSelected\" (ngModelChange)=\"selectFn(!allRowsSelected)\"></biit-checkbox>\n </ng-template>\n <ng-template\n ngx-datatable-cell-template\n let-value=\"value\"\n let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\n >\n <biit-checkbox [ngModel]=\"isSelected\" (ngModelChange)=\"onCheckboxChangeFn($event)\"></biit-checkbox>\n </ng-template>\n </ngx-datatable-column>\n\n <ngx-datatable-column *ngFor=\"let column of _columns\"\n [name]=\"column.name\"\n [prop]=\"column.prop\"\n [checkboxable]=\"column.checkboxable\"\n [frozenLeft]=\"column.frozenLeft\"\n [frozenRight]=\"column.frozenRight\"\n [flexGrow]=\"column.flexGrow\"\n [minWidth]=\"column.minWidth\"\n [maxWidth]=\"column.maxWidth\"\n [width]=\"column.width\"\n [resizeable]=\"column.resizeable\"\n [comparator]=\"column.comparator\"\n [pipe]=\"column.pipe\"\n [sortable]=\"column.sortable\"\n [draggable]=\"column.draggable\"\n [canAutoResize]=\"column.canAutoResize\"\n [cellTemplate]=\"column.cellTemplate\"\n [ghostCellTemplate]=\"column.ghostCellTemplate\"\n [treeToggleTemplate]=\"column.treeToggleTemplate\"\n [cellClass]=\"column.cellClass\"\n [headerTemplate]=\"column.headerTemplate\"\n [headerClass]=\"column.headerClass\"\n [headerCheckboxable]=\"column.headerCheckboxable\"\n [isTreeColumn]=\"column.isTreeColumn\"\n [treeLevelIndent]=\"column.treeLevelIndent\"\n [summaryFunc]=\"column.summaryFunc\"\n [summaryTemplate]=\"column.summaryTemplate\"\n ></ngx-datatable-column>\n\n <ngx-datatable-footer id=\"datatable-footer\">\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSizeCurrent=\"pageSize\"\n let-selectedCount=\"selectedCount\"\n let-curPage=\"curPage\"\n let-offset=\"offset\"\n >\n <div class=\"label\">\n <span>{{ t('t.total') }}: </span><span id=\"total-number-of-items\">{{rowCount}}</span>\n <span *ngIf=\"selectedCount\">&nbsp;&nbsp;|&nbsp;&nbsp;{{ t('t.selected') }}: </span><span *ngIf=\"selectedCount\" id=\"number-of-items-selected\">{{selectedCount}}</span>\n </div>\n <div class=\"pagination\" [style.display]=\"!((rowCount / pageSize) > 1) ? 'none' : null\">\n <biit-datatable-pager #pager\n [page]=\"curPage\"\n [size]=\"pageSizeCurrent\"\n [count]=\"rowCount\"\n [hidden]=\"!((rowCount / pageSize) > 1)\"\n (change)=\"table.onFooterPage($event)\">\n </biit-datatable-pager>\n </div>\n <div class=\"page-items\" *ngIf=\"pageSizeList\">\n <div *ngIf=\"pageSizeList?.length\">\n <span>{{ t('t.rows-per-page') }}:</span>\n <select [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"pager.size = $event\">\n <option *ngFor=\"let size of pageSizeList\"\n [ngValue]=\"size\"\n >\n {{size}}\n </option>\n </select>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n\n <ng-container *ngIf=\"serverSide\">\n <ngx-datatable #table\n [rows]=\"data\"\n [columns]=\"_columns\"\n [columnMode]=\"'force'\"\n [headerHeight]=\"42\"\n [footerHeight]=\"hideFooter ? 0 : 34\"\n [rowHeight]=\"'auto'\"\n [reorderable]=\"false\"\n [selectionType]=\"SelectionType.checkbox\"\n [selected]=\"selected\"\n (select)=\"onSelect($event)\"\n (activate)=\"onActivate($event)\"\n [virtualization]=\"false\"\n [scrollbarVDynamic]=\"true\"\n [scrollbarH]=\"scrollbarH\"\n [messages]=\"{emptyMessage: t('t.empty-message')}\"\n [externalPaging]=\"true\"\n [count]=\"page.totalElements\"\n [offset]=\"page.pageNumber\"\n [limit]=\"page.pageSize\"\n (page)=\"onFooterPageChange($event)\"\n >\n <ngx-datatable-column *ngIf=\"selectable && !singleSelection\"\n #chkbox\n [width]=\"42\"\n [sortable]=\"false\"\n [canAutoResize]=\"false\"\n [draggable]=\"false\"\n [resizeable]=\"false\"\n [name]=\"'chkbox'\"\n >\n <ng-template\n ngx-datatable-header-template\n let-value=\"value\"\n let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\"\n >\n <biit-checkbox [ngModel]=\"allRowsSelected\" (ngModelChange)=\"selectFn(!allRowsSelected)\"></biit-checkbox>\n </ng-template>\n <ng-template\n ngx-datatable-cell-template\n let-value=\"value\"\n let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\n >\n <biit-checkbox [ngModel]=\"isSelected\" (ngModelChange)=\"onCheckboxChangeFn($event)\"></biit-checkbox>\n </ng-template>\n </ngx-datatable-column>\n\n <ngx-datatable-column *ngFor=\"let column of _columns\"\n [name]=\"column.name\"\n [prop]=\"column.prop\"\n [checkboxable]=\"column.checkboxable\"\n [frozenLeft]=\"column.frozenLeft\"\n [frozenRight]=\"column.frozenRight\"\n [flexGrow]=\"column.flexGrow\"\n [minWidth]=\"column.minWidth\"\n [maxWidth]=\"column.maxWidth\"\n [width]=\"column.width\"\n [resizeable]=\"column.resizeable\"\n [comparator]=\"column.comparator\"\n [pipe]=\"column.pipe\"\n [sortable]=\"column.sortable\"\n [draggable]=\"column.draggable\"\n [canAutoResize]=\"column.canAutoResize\"\n [cellTemplate]=\"column.cellTemplate\"\n [ghostCellTemplate]=\"column.ghostCellTemplate\"\n [treeToggleTemplate]=\"column.treeToggleTemplate\"\n [cellClass]=\"column.cellClass\"\n [headerTemplate]=\"column.headerTemplate\"\n [headerClass]=\"column.headerClass\"\n [headerCheckboxable]=\"column.headerCheckboxable\"\n [isTreeColumn]=\"column.isTreeColumn\"\n [treeLevelIndent]=\"column.treeLevelIndent\"\n [summaryFunc]=\"column.summaryFunc\"\n [summaryTemplate]=\"column.summaryTemplate\"\n ></ngx-datatable-column>\n\n <ngx-datatable-footer>\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSizeCurrent=\"pageSize\"\n let-selectedCount=\"selectedCount\"\n let-curPage=\"curPage\"\n let-offset=\"offset\"\n >\n <div class=\"label\" id=\"total-elements\">\n <span>{{ t('t.total') }}: {{rowCount}}</span>\n <span *ngIf=\"selectedCount\">&nbsp;&nbsp;|&nbsp;&nbsp;{{ t('t.selected') }}: {{selectedCount}}</span>\n </div>\n <div class=\"pagination\" [style.display]=\"!((rowCount / pageSize) > 1) ? 'none' : null\">\n <biit-datatable-pager #pager\n [page]=\"curPage\"\n [size]=\"pageSizeCurrent\"\n [count]=\"rowCount\"\n [hidden]=\"!((rowCount / pageSize) > 1)\"\n (change)=\"table.onFooterPage($event)\">\n </biit-datatable-pager>\n </div>\n <div class=\"page-items\" *ngIf=\"pageSizeList\">\n <div *ngIf=\"pageSizeList?.length\">\n <span>{{ t('t.rows-per-page') }}:</span>\n <select [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"pager.size = $event\">\n <option *ngFor=\"let size of pageSizeList\"\n [ngValue]=\"size\"\n >\n {{size}}\n </option>\n </select>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n", styles: [".table-canvas{height:100%;display:flex;flex-direction:column;gap:14px;background:var(--table-background-color);color:var(--table-text-color)}.table-canvas .top{display:flex;flex:0}.table-canvas .top .action-bar{display:flex;flex:1}.table-canvas .top .options{display:flex;flex:0}.table-canvas .table{position:relative;flex:1;min-height:0;min-width:0}.table-canvas .table biit-progress-bar{position:absolute;z-index:1;left:0;right:3px;top:42px}.table-canvas .table ::ng-deep ngx-datatable{height:100%;position:absolute;inset:0}.table-canvas .table ::ng-deep ngx-datatable>div{height:calc(100% - 42px)}.table-canvas .table ::ng-deep ngx-datatable>div>div{height:100%}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner{height:inherit}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap{height:100%!important;width:calc(100% - 3px);display:flex;align-items:center;justify-content:center;background:var(--table-header-color);color:var(--table-header-text)}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap span{color:var(--table-text-color);font-size:16px;line-height:100%;font-weight:700;text-transform:uppercase}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap .sort-btn{position:absolute;right:14px}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap:has(biit-checkbox){background:var(--table-background-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-body{height:100%!important;overflow-y:auto!important}.table-canvas .table ::ng-deep ngx-datatable datatable-body .empty-row{height:100%;display:flex;align-items:center;justify-content:center}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row .datatable-body-cell-label{display:flex;align-items:center;min-height:42px;border-bottom:3px solid var(--table-header-color);width:calc(100% - 3px);padding:9px 14px;line-height:120%;height:100%}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row:hover .datatable-body-cell-label{background:var(--table-text-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row.active .datatable-body-cell-label{background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer{position:absolute;bottom:0;background:var(--table-background-color);z-index:10}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .label{flex:1 0}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .pagination{display:flex;margin:auto;flex:0;justify-content:center}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .pagination biit-datatable-pager{flex:none!important}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items{flex:1 0;display:flex;justify-content:flex-end;align-items:center;color:var(--table-text-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select{appearance:none;border:none;height:34px;min-width:34px;padding:8px 14px;text-align:end;font-size:14px;font-family:Montserrat,serif;cursor:pointer;background:var(--table-background-color);color:var(--table-text-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select:focus-visible{outline:none;background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select:hover{background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select *{background:var(--table-background-color);padding:5px}.table-canvas .table ::ng-deep ngx-datatable:has(datatable-footer) datatable-body{height:calc(100% - 48px)!important}::ng-deep ngx-datatable .auto-details-height .datatable-row-wrapper{height:unset!important}::ng-deep ngx-datatable .auto-details-height .datatable-row-wrapper .datatable-row-detail{height:unset!important}.default-menu{display:flex;flex-direction:row}@media screen and (max-width: 600px){.page-items,.page-size-selector,.horizontal-menu{display:none!important}}@media screen and (min-width: 601px){.vertical-menu{display:none!important}}\n"] }]
110
+ args: [{ selector: 'biit-datatable', providers: [provideTranslocoScope({ scope: 'wizardry-theme/table', alias: 't' })], template: "<div id=\"biit-table\" class=\"table-canvas\" *transloco=\"let t\">\n <div class=\"top\" *ngIf=\"!hideHeader\">\n <div id=\"menu\" class=\"action-bar\">\n <biit-vertical-menu *ngIf=\"actionsTpl\" class=\"vertical-menu\">\n <ng-container *ngTemplateOutlet=\"actionsTpl\"></ng-container>\n </biit-vertical-menu>\n <div *ngIf=\"actionsTpl\" class=\"horizontal-menu default-menu\">\n <ng-container *ngTemplateOutlet=\"actionsTpl\"></ng-container>\n </div>\n <div class=\"default-menu\" *ngIf=\"!actionsTpl\">\n <ng-content></ng-content>\n </div>\n </div>\n <div id=\"options\" class=\"options\">\n <biit-input-text id=\"search\" #searchInput\n [ngModel]=\"search\"\n (onActionPerformed)=\"\n onFilter($event, true);\n \"\n (ngModelChange)=\"onFilter($event)\"\n (focusout)=\"searchInput.value = search\"\n icon=\"search\"\n [placeholder]=\"t('t.search')\"\n ></biit-input-text>\n <biit-multiselect id=\"column-selector\" [ngModel]=\"_columns\"\n (ngModelChange)=\"setColumnVisibility($event)\"\n [data]=\"allColumns\"\n label=\"name\"\n value=\"visible\"\n [type]=\"BiitMultiselectType.ICON\"\n [title]=\"t('t.column-selector')\"\n [compact]=\"true\"\n ></biit-multiselect>\n </div>\n </div>\n <div id=\"content\" class=\"table\">\n <biit-progress-bar *ngIf=\"loading\"></biit-progress-bar>\n <ng-container *ngIf=\"!serverSide\">\n <ngx-datatable #table\n [rows]=\"data\"\n [columns]=\"_columns\"\n [rowClass]=\"getRowClass\"\n [columnMode]=\"'force'\"\n [headerHeight]=\"42\"\n [footerHeight]=\"hideFooter ? 0 : 34\"\n [rowHeight]=\"'auto'\"\n [reorderable]=\"false\"\n [selectionType]=\"SelectionType.checkbox\"\n [selected]=\"selected\"\n (select)=\"onSelect($event)\"\n (activate)=\"onActivate($event)\"\n [virtualization]=\"false\"\n [scrollbarVDynamic]=\"true\"\n [limit]=\"pageSize\"\n [scrollbarH]=\"scrollbarH\"\n [messages]=\"{emptyMessage: t('t.empty-message')}\"\n >\n <ngx-datatable-column *ngIf=\"selectable && !singleSelection\"\n #chkbox\n [width]=\"42\"\n [sortable]=\"false\"\n [canAutoResize]=\"false\"\n [draggable]=\"false\"\n [resizeable]=\"false\"\n [name]=\"'chkbox'\"\n >\n <ng-template\n ngx-datatable-header-template\n let-value=\"value\"\n let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\"\n >\n <biit-checkbox [ngModel]=\"allRowsSelected\" (ngModelChange)=\"selectFn(!allRowsSelected)\"></biit-checkbox>\n </ng-template>\n <ng-template\n ngx-datatable-cell-template\n let-value=\"value\"\n let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\n >\n <biit-checkbox [ngModel]=\"isSelected\" (ngModelChange)=\"onCheckboxChangeFn($event)\"></biit-checkbox>\n </ng-template>\n </ngx-datatable-column>\n\n <ngx-datatable-column *ngFor=\"let column of _columns\"\n [name]=\"column.name\"\n [prop]=\"column.prop\"\n [checkboxable]=\"column.checkboxable\"\n [frozenLeft]=\"column.frozenLeft\"\n [frozenRight]=\"column.frozenRight\"\n [flexGrow]=\"column.flexGrow\"\n [minWidth]=\"column.minWidth\"\n [maxWidth]=\"column.maxWidth\"\n [width]=\"column.width\"\n [resizeable]=\"column.resizeable\"\n [comparator]=\"column.comparator\"\n [pipe]=\"column.pipe\"\n [sortable]=\"column.sortable\"\n [draggable]=\"column.draggable\"\n [canAutoResize]=\"column.canAutoResize\"\n [cellTemplate]=\"column.cellTemplate\"\n [ghostCellTemplate]=\"column.ghostCellTemplate\"\n [treeToggleTemplate]=\"column.treeToggleTemplate\"\n [cellClass]=\"column.cellClass\"\n [headerTemplate]=\"column.headerTemplate\"\n [headerClass]=\"column.headerClass\"\n [headerCheckboxable]=\"column.headerCheckboxable\"\n [isTreeColumn]=\"column.isTreeColumn\"\n [treeLevelIndent]=\"column.treeLevelIndent\"\n [summaryFunc]=\"column.summaryFunc\"\n [summaryTemplate]=\"column.summaryTemplate\"\n ></ngx-datatable-column>\n\n <ngx-datatable-footer id=\"datatable-footer\">\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSizeCurrent=\"pageSize\"\n let-selectedCount=\"selectedCount\"\n let-curPage=\"curPage\"\n let-offset=\"offset\"\n >\n <div class=\"label\">\n <span>{{ t('t.total') }}: </span><span id=\"total-number-of-items\">{{rowCount}}</span>\n <span *ngIf=\"selectedCount\">&nbsp;&nbsp;|&nbsp;&nbsp;{{ t('t.selected') }}: </span><span *ngIf=\"selectedCount\" id=\"number-of-items-selected\">{{selectedCount}}</span>\n </div>\n <div class=\"pagination\" [style.display]=\"!((rowCount / pageSize) > 1) ? 'none' : null\">\n <biit-datatable-pager #pager\n [page]=\"curPage\"\n [size]=\"pageSizeCurrent\"\n [count]=\"rowCount\"\n [hidden]=\"!((rowCount / pageSize) > 1)\"\n (change)=\"table.onFooterPage($event)\">\n </biit-datatable-pager>\n </div>\n <div class=\"page-items\" *ngIf=\"pageSizeList\">\n <div *ngIf=\"pageSizeList?.length\">\n <span>{{ t('t.rows-per-page') }}:</span>\n <select [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"pager.size = $event\">\n <option *ngFor=\"let size of pageSizeList\"\n [ngValue]=\"size\"\n >\n {{size}}\n </option>\n </select>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n\n <ng-container *ngIf=\"serverSide\">\n <ngx-datatable #table\n [rows]=\"data\"\n [columns]=\"_columns\"\n [rowClass]=\"getRowClass\"\n [columnMode]=\"'force'\"\n [headerHeight]=\"42\"\n [footerHeight]=\"hideFooter ? 0 : 34\"\n [rowHeight]=\"'auto'\"\n [reorderable]=\"false\"\n [selectionType]=\"SelectionType.checkbox\"\n [selected]=\"selected\"\n (select)=\"onSelect($event)\"\n (activate)=\"onActivate($event)\"\n [virtualization]=\"false\"\n [scrollbarVDynamic]=\"true\"\n [scrollbarH]=\"scrollbarH\"\n [messages]=\"{emptyMessage: t('t.empty-message')}\"\n [externalPaging]=\"true\"\n [count]=\"page.totalElements\"\n [offset]=\"page.pageNumber\"\n [limit]=\"page.pageSize\"\n (page)=\"onFooterPageChange($event)\"\n >\n <ngx-datatable-column *ngIf=\"selectable && !singleSelection\"\n #chkbox\n [width]=\"42\"\n [sortable]=\"false\"\n [canAutoResize]=\"false\"\n [draggable]=\"false\"\n [resizeable]=\"false\"\n [name]=\"'chkbox'\"\n >\n <ng-template\n ngx-datatable-header-template\n let-value=\"value\"\n let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\"\n >\n <biit-checkbox [ngModel]=\"allRowsSelected\" (ngModelChange)=\"selectFn(!allRowsSelected)\"></biit-checkbox>\n </ng-template>\n <ng-template\n ngx-datatable-cell-template\n let-value=\"value\"\n let-isSelected=\"isSelected\"\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\n >\n <biit-checkbox [ngModel]=\"isSelected\" (ngModelChange)=\"onCheckboxChangeFn($event)\"></biit-checkbox>\n </ng-template>\n </ngx-datatable-column>\n\n <ngx-datatable-column *ngFor=\"let column of _columns\"\n [name]=\"column.name\"\n [prop]=\"column.prop\"\n [checkboxable]=\"column.checkboxable\"\n [frozenLeft]=\"column.frozenLeft\"\n [frozenRight]=\"column.frozenRight\"\n [flexGrow]=\"column.flexGrow\"\n [minWidth]=\"column.minWidth\"\n [maxWidth]=\"column.maxWidth\"\n [width]=\"column.width\"\n [resizeable]=\"column.resizeable\"\n [comparator]=\"column.comparator\"\n [pipe]=\"column.pipe\"\n [sortable]=\"column.sortable\"\n [draggable]=\"column.draggable\"\n [canAutoResize]=\"column.canAutoResize\"\n [cellTemplate]=\"column.cellTemplate\"\n [ghostCellTemplate]=\"column.ghostCellTemplate\"\n [treeToggleTemplate]=\"column.treeToggleTemplate\"\n [cellClass]=\"column.cellClass\"\n [headerTemplate]=\"column.headerTemplate\"\n [headerClass]=\"column.headerClass\"\n [headerCheckboxable]=\"column.headerCheckboxable\"\n [isTreeColumn]=\"column.isTreeColumn\"\n [treeLevelIndent]=\"column.treeLevelIndent\"\n [summaryFunc]=\"column.summaryFunc\"\n [summaryTemplate]=\"column.summaryTemplate\"\n ></ngx-datatable-column>\n\n <ngx-datatable-footer>\n <ng-template\n ngx-datatable-footer-template\n let-rowCount=\"rowCount\"\n let-pageSizeCurrent=\"pageSize\"\n let-selectedCount=\"selectedCount\"\n let-curPage=\"curPage\"\n let-offset=\"offset\"\n >\n <div class=\"label\" id=\"total-elements\">\n <span>{{ t('t.total') }}: {{rowCount}}</span>\n <span *ngIf=\"selectedCount\">&nbsp;&nbsp;|&nbsp;&nbsp;{{ t('t.selected') }}: {{selectedCount}}</span>\n </div>\n <div class=\"pagination\" [style.display]=\"!((rowCount / pageSize) > 1) ? 'none' : null\">\n <biit-datatable-pager #pager\n [page]=\"curPage\"\n [size]=\"pageSizeCurrent\"\n [count]=\"rowCount\"\n [hidden]=\"!((rowCount / pageSize) > 1)\"\n (change)=\"table.onFooterPage($event)\">\n </biit-datatable-pager>\n </div>\n <div class=\"page-items\" *ngIf=\"pageSizeList\">\n <div *ngIf=\"pageSizeList?.length\">\n <span>{{ t('t.rows-per-page') }}:</span>\n <select [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"pager.size = $event\">\n <option *ngFor=\"let size of pageSizeList\"\n [ngValue]=\"size\"\n >\n {{size}}\n </option>\n </select>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n", styles: [".table-canvas{height:100%;display:flex;flex-direction:column;gap:14px;background:var(--table-background-color);color:var(--table-text-color)}.table-canvas .top{display:flex;flex:0}.table-canvas .top .action-bar{display:flex;flex:1}.table-canvas .top .options{display:flex;flex:0}.table-canvas .table{position:relative;flex:1;min-height:0;min-width:0}.table-canvas .table biit-progress-bar{position:absolute;z-index:1;left:0;right:3px;top:42px}.table-canvas .table ::ng-deep ngx-datatable{height:100%;position:absolute;inset:0}.table-canvas .table ::ng-deep ngx-datatable>div{height:calc(100% - 42px)}.table-canvas .table ::ng-deep ngx-datatable>div>div{height:100%}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner{height:inherit}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap{height:100%!important;width:calc(100% - 3px);display:flex;align-items:center;justify-content:center;background:var(--table-header-color);color:var(--table-header-text)}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap span{color:var(--table-header-text);font-size:16px;line-height:100%;font-weight:700;text-transform:uppercase}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap .sort-btn{position:absolute;right:14px}.table-canvas .table ::ng-deep ngx-datatable datatable-header .datatable-header-inner .datatable-header-cell-template-wrap:has(biit-checkbox){background:var(--table-background-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-body{height:100%!important;overflow-y:auto!important}.table-canvas .table ::ng-deep ngx-datatable datatable-body .empty-row{height:100%;display:flex;align-items:center;justify-content:center}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row .datatable-body-cell-label{display:flex;align-items:center;min-height:42px;border-bottom:3px solid var(--table-header-color);width:calc(100% - 3px);padding:9px 14px;line-height:120%;height:100%}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row.biit-row-highlight:not(.active) .datatable-body-cell-label{background:var(--table-row-highlight-background-color, rgba(255, 196, 0, .15))}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row:hover .datatable-body-cell-label{color:var(--table-text-color);background:var(--table-hover-background-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-body datatable-body-row.active .datatable-body-cell-label{background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer{position:absolute;bottom:0;background:var(--table-background-color);z-index:10}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .label{flex:1 0}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .pagination{display:flex;margin:auto;flex:0;justify-content:center}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .pagination biit-datatable-pager{flex:none!important}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items{flex:1 0;display:flex;justify-content:flex-end;align-items:center;color:var(--table-text-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select{appearance:none;border:none;height:34px;min-width:34px;padding:8px 14px;text-align:end;font-size:14px;font-family:Montserrat,serif;cursor:pointer;background:var(--table-background-color);color:var(--table-text-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select:focus-visible{outline:none;background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select:hover{background:var(--table-active-row-backgorund-color)}.table-canvas .table ::ng-deep ngx-datatable datatable-footer .datatable-footer-inner .page-items select *{background:var(--table-background-color);padding:5px}.table-canvas .table ::ng-deep ngx-datatable:has(datatable-footer) datatable-body{height:calc(100% - 48px)!important}::ng-deep ngx-datatable .auto-details-height .datatable-row-wrapper{height:unset!important}::ng-deep ngx-datatable .auto-details-height .datatable-row-wrapper .datatable-row-detail{height:unset!important}.default-menu{display:flex;flex-direction:row}@media screen and (max-width: 600px){.page-items,.page-size-selector,.horizontal-menu{display:none!important}}@media screen and (min-width: 601px){.vertical-menu{display:none!important}}\n"] }]
103
111
  }], ctorParameters: function () { return [{ type: i1.BiitIconService }]; }, propDecorators: { table: [{
104
112
  type: ViewChild,
105
113
  args: ['table']
@@ -127,6 +135,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
127
135
  type: Input
128
136
  }], page: [{
129
137
  type: Input
138
+ }], rowStylePredicate: [{
139
+ type: Input
140
+ }], rowStyleClass: [{
141
+ type: Input
130
142
  }], onSelection: [{
131
143
  type: Output
132
144
  }], onPageChange: [{
@@ -135,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
135
147
  type: ContentChild,
136
148
  args: ['actions']
137
149
  }] } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlpdC1kYXRhdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2l6YXJkcnktdGhlbWUvdGFibGUvc3JjL2JpaXQtZGF0YXRhYmxlL2JpaXQtZGF0YXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dpemFyZHJ5LXRoZW1lL3RhYmxlL3NyYy9iaWl0LWRhdGF0YWJsZS9iaWl0LWRhdGF0YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBZSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkgsT0FBTyxFQUFDLFVBQVUsRUFBc0IsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRXRFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQVFuQyxNQUFNLE9BQU8sc0JBQXNCO0lBTWpDLElBQWEsSUFBSSxDQUFDLElBQVM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQs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QUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUMsNk5DZmpGLG1vYUFnUkE7NEZEL1BhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxnQkFBZ0IsYUFHZixDQUFDLHFCQUFxQixDQUFDLEVBQUMsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO3NHQUczRCxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBS0wsSUFBSTtzQkFBaEIsS0FBSztnQkFhTyxPQUFPO3NCQUFuQixLQUFLO2dCQWVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUdJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFFa0IsVUFBVTtzQkFBbEMsWUFBWTt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEYXRhdGFibGVDb2x1bW59IGZyb20gXCIuL21vZGVscy9kYXRhdGFibGUtY29sdW1uXCI7XG5pbXBvcnQge0NvbHVtbk1vZGUsIERhdGF0YWJsZUNvbXBvbmVudCwgU2VsZWN0aW9uVHlwZX0gZnJvbSBcIkBzaWVtZW5zL25neC1kYXRhdGFibGVcIjtcbmltcG9ydCB7Y29tcGxldGVJY29uU2V0fSBmcm9tICdAYmlpdC1zb2x1dGlvbnMvYmlpdC1pY29ucy1jb2xsZWN0aW9uJztcbmltcG9ydCB7QmlpdEljb25TZXJ2aWNlfSBmcm9tIFwiQGJpaXQtc29sdXRpb25zL3dpemFyZHJ5LXRoZW1lL2ljb25cIjtcbmltcG9ydCB7QmlpdE11bHRpc2VsZWN0VHlwZX0gZnJvbSBcIkBiaWl0LXNvbHV0aW9ucy93aXphcmRyeS10aGVtZS9pbnB1dHNcIjtcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQge0dlbmVyaWNGaWx0ZXJ9IGZyb20gXCIuLi91dGlscy9nZW5lcmljLWZpbHRlclwiO1xuaW1wb3J0IHtwcm92aWRlVHJhbnNsb2NvU2NvcGV9IGZyb20gXCJAbmduZWF0L3RyYW5zbG9jb1wiO1xuaW1wb3J0IHtQYWdlfSBmcm9tIFwiLi9tb2RlbHMvcGFnZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiaWl0LWRhdGF0YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9iaWl0LWRhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JpaXQtZGF0YXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVUcmFuc2xvY29TY29wZSh7c2NvcGU6ICd3aXphcmRyeS10aGVtZS90YWJsZScsIGFsaWFzOiAndCd9KV1cbn0pXG5leHBvcnQgY2xhc3MgQmlpdERhdGF0YWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGU6IERhdGF0YWJsZUNvbXBvbmVudDtcblxuICBfZGF0YTogVFtdID0gW107XG4gIGFsbERhdGE6IFRbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNldCBkYXRhKGRhdGE6IFRbXSkge1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhID8/IFtdO1xuICAgIHRoaXMuYWxsRGF0YSA9IGRhdGEgPz8gW107XG4gICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuICB9XG5cbiAgZ2V0IGRhdGEoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIF9jb2x1bW5zOiBEYXRhdGFibGVDb2x1bW5bXSA9IFtdO1xuICBhbGxDb2x1bW5zOiBEYXRhdGFibGVDb2x1bW5bXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNldCBjb2x1bW5zKGNvbHVtbnM6IERhdGF0YWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5hbGxDb2x1bW5zID0gY29sdW1ucyA/PyBbXTtcbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKTogRGF0YXRhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgc2VsZWN0ZWQ6IFRbXSA9IFtdO1xuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRSb3dzKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICBASW5wdXQoKSBwYWdlU2l6ZT86IG51bWJlcjtcbiAgQElucHV0KCkgcGFnZVNpemVMaXN0OiBudW1iZXJbXSA9IFtdO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdGFibGU/OiBhbnk7XG4gIEBJbnB1dCgpIHNpbmdsZVNlbGVjdGlvbj86IGFueTtcbiAgQElucHV0KCkgc2Nyb2xsYmFySD86IGFueTtcbiAgQElucHV0KCkgaGlkZUhlYWRlcj86IGFueTtcbiAgQElucHV0KCkgaGlkZUZvb3Rlcj86IGFueTtcbiAgQElucHV0KCkgc2VydmVyU2lkZT86IGFueTtcbiAgQElucHV0KCkgcGFnZT86IFBhZ2U7XG4gIHNlYXJjaDogc3RyaW5nID0gXCJcIjtcblxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb246IEV2ZW50RW1pdHRlcjxUW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XG4gIEBPdXRwdXQoKSBvblBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxQYWdlPiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZT4oKTtcblxuICBAQ29udGVudENoaWxkKCdhY3Rpb25zJykgYWN0aW9uc1RwbCE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IENvbHVtbk1vZGUgPSBDb2x1bW5Nb2RlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgU2VsZWN0aW9uVHlwZSA9IFNlbGVjdGlvblR5cGU7XG4gIHByb3RlY3RlZCByZWFkb25seSBCaWl0TXVsdGlzZWxlY3RUeXBlID0gQmlpdE11bHRpc2VsZWN0VHlwZTtcbiAgcHJpdmF0ZSBmaW5kVGltZW91dDogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgY29uc3RydWN0b3IoYmlpdEljb25TZXJ2aWNlOiBCaWl0SWNvblNlcnZpY2UpIHtcbiAgICBiaWl0SWNvblNlcnZpY2UucmVnaXN0ZXJJY29ucyhjb21wbGV0ZUljb25TZXQpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHRoaXMuc2VsZWN0YWJsZSk7XG4gICAgdGhpcy5zaW5nbGVTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodGhpcy5zaW5nbGVTZWxlY3Rpb24pO1xuICAgIHRoaXMuc2Nyb2xsYmFySCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLnNjcm9sbGJhckgpO1xuICAgIHRoaXMuaGlkZUhlYWRlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLmhpZGVIZWFkZXIpO1xuICAgIHRoaXMuaGlkZUZvb3RlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLmhpZGVGb290ZXIpO1xuICAgIHRoaXMuc2VydmVyU2lkZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLnNlcnZlclNpZGUpO1xuICB9XG5cbiAgb25TZWxlY3Qoe3NlbGVjdGVkfSkge1xuICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICB0aGlzLnNlbGVjdGVkLnB1c2goLi4uc2VsZWN0ZWQpO1xuICAgIHRoaXMub25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgfVxuXG4gIG9uQWN0aXZhdGUoZXZlbnQ6IHsgdHlwZTogJ2tleWRvd24nIHwgJ2NsaWNrJyB8ICdkYmxjbGljaycsIGV2ZW50LCByb3csIGNvbHVtbiwgdmFsdWUsIGNlbGxFbGVtZW50LCByb3dFbGVtZW50IH0pIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PSAnY2xpY2snICYmIGV2ZW50LmNvbHVtbi5uYW1lICE9PSAnY2hrYm94Jykge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IFtldmVudC5yb3ddO1xuICAgICAgdGhpcy5vblNlbGVjdGlvbi5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uRmlsdGVyKHZhbHVlOiBzdHJpbmcsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5maW5kVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZmluZFRpbWVvdXQpO1xuICAgIH1cbiAgICB0aGlzLmZpbmRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaCA9IHZhbHVlO1xuICAgICAgY29uc3QgdmFsID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgLy8gZmlsdGVyIG91ciBkYXRhXG4gICAgICBjb25zdCB0ZW1wOiBUW10gPSB0aGlzLmFsbERhdGEuZmlsdGVyKGl0ZW0gPT4gR2VuZXJpY0ZpbHRlci5maWx0ZXIoaXRlbSwgdmFsLCB0cnVlKSk7XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgcm93c1xuICAgICAgdGhpcy5fZGF0YSA9IHRlbXA7XG4gICAgICAvLyBXaGVuZXZlciB0aGUgZmlsdGVyIGNoYW5nZXMsIGFsd2F5cyBnbyBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICB0aGlzLnRhYmxlLm9mZnNldCA9IDA7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5maW5kVGltZW91dCk7XG4gICAgICB0aGlzLmZpbmRUaW1lb3V0ID0gbnVsbDtcbiAgICB9LCBmb3JjZSA/IDAgOiA1MDApO1xuICB9XG5cbiAgb25Gb290ZXJQYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBwYWdlID0gbmV3IFBhZ2UoZXZlbnQub2Zmc2V0LCBldmVudC5wYWdlU2l6ZSwgZXZlbnQuY291bnQpO1xuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQocGFnZSk7XG4gIH1cblxuICBzZXRDb2x1bW5WaXNpYmlsaXR5KGNvbHVtbnM6IERhdGF0YWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuYWxsQ29sdW1ucy5maWx0ZXIoYyA9PiBjb2x1bW5zLmluY2x1ZGVzKGMpKVxuICB9XG59XG4iLCI8ZGl2IGlkPVwiYmlpdC10YWJsZVwiIGNsYXNzPVwidGFibGUtY2FudmFzXCIgKnRyYW5zbG9jbz1cImxldCB0XCI+XG4gIDxkaXYgY2xhc3M9XCJ0b3BcIiAqbmdJZj1cIiFoaWRlSGVhZGVyXCI+XG4gICAgPGRpdiBpZD1cIm1lbnVcIiBjbGFzcz1cImFjdGlvbi1iYXJcIj5cbiAgICAgIDxiaWl0LXZlcnRpY2FsLW1lbnUgKm5nSWY9XCJhY3Rpb25zVHBsXCIgY2xhc3M9XCJ2ZXJ0aWNhbC1tZW51XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb25zVHBsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2JpaXQtdmVydGljYWwtbWVudT5cbiAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25zVHBsXCIgY2xhc3M9XCJob3Jpem9udGFsLW1lbnUgZGVmYXVsdC1tZW51XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb25zVHBsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZWZhdWx0LW1lbnVcIiAqbmdJZj1cIiFhY3Rpb25zVHBsXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJvcHRpb25zXCIgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgICA8YmlpdC1pbnB1dC10ZXh0IGlkPVwic2VhcmNoXCIgI3NlYXJjaElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGlvblBlcmZvcm1lZCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvbkZpbHRlcigkZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInNlYXJjaElucHV0LnZhbHVlID0gc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ0KCd0LnNlYXJjaCcpXCJcbiAgICAgID48L2JpaXQtaW5wdXQtdGV4dD5cbiAgICAgIDxiaWl0LW11bHRpc2VsZWN0IGlkPVwiY29sdW1uLXNlbGVjdG9yXCIgW25nTW9kZWxdPVwiX2NvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0Q29sdW1uVmlzaWJpbGl0eSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImFsbENvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwidmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJCaWl0TXVsdGlzZWxlY3RUeXBlLklDT05cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInQoJ3QuY29sdW1uLXNlbGVjdG9yJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXG4gICAgICA+PC9iaWl0LW11bHRpc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBpZD1cImNvbnRlbnRcIiBjbGFzcz1cInRhYmxlXCI+XG4gICAgPGJpaXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwibG9hZGluZ1wiPjwvYmlpdC1wcm9ncmVzcy1iYXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZXJ2ZXJTaWRlXCI+XG4gICAgICA8bmd4LWRhdGF0YWJsZSAjdGFibGVcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiX2NvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbk1vZGVdPVwiJ2ZvcmNlJ1wiXG4gICAgICAgICAgICAgICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIjQyXCJcbiAgICAgICAgICAgICAgICAgICAgIFtmb290ZXJIZWlnaHRdPVwiaGlkZUZvb3RlciA/IDAgOiAzNFwiXG4gICAgICAgICAgICAgICAgICAgICBbcm93SGVpZ2h0XT1cIidhdXRvJ1wiXG4gICAgICAgICAgICAgICAgICAgICBbcmVvcmRlcmFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvblR5cGVdPVwiU2VsZWN0aW9uVHlwZS5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgIChhY3RpdmF0ZSk9XCJvbkFjdGl2YXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgW3ZpcnR1YWxpemF0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxiYXJWRHluYW1pY109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtsaW1pdF09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYmFySF09XCJzY3JvbGxiYXJIXCJcbiAgICAgICAgICAgICAgICAgICAgIFttZXNzYWdlc109XCJ7ZW1wdHlNZXNzYWdlOiB0KCd0LmVtcHR5LW1lc3NhZ2UnKX1cIlxuICAgICAgPlxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gKm5nSWY9XCJzZWxlY3RhYmxlICYmICFzaW5nbGVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Noa2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjQyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuQXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNpemVhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidjaGtib3gnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGVcbiAgICAgICAgICAgIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXNlbGVjdEZuPVwic2VsZWN0Rm5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxiaWl0LWNoZWNrYm94IFtuZ01vZGVsXT1cImFsbFJvd3NTZWxlY3RlZFwiIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdEZuKCFhbGxSb3dzU2VsZWN0ZWQpXCI+PC9iaWl0LWNoZWNrYm94PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGVcbiAgICAgICAgICAgIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgIGxldC1pc1NlbGVjdGVkPVwiaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICBsZXQtb25DaGVja2JveENoYW5nZUZuPVwib25DaGVja2JveENoYW5nZUZuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YmlpdC1jaGVja2JveCBbbmdNb2RlbF09XCJpc1NlbGVjdGVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja2JveENoYW5nZUZuKCRldmVudClcIj48L2JpaXQtY2hlY2tib3g+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cblxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBfY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcF09XCJjb2x1bW4ucHJvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tib3hhYmxlXT1cImNvbHVtbi5jaGVja2JveGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zyb3plbkxlZnRdPVwiY29sdW1uLmZyb3plbkxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zyb3plblJpZ2h0XT1cImNvbHVtbi5mcm96ZW5SaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmxleEdyb3ddPVwiY29sdW1uLmZsZXhHcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5XaWR0aF09XCJjb2x1bW4ubWluV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heFdpZHRoXT1cImNvbHVtbi5tYXhXaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNpemVhYmxlXT1cImNvbHVtbi5yZXNpemVhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYXJhdG9yXT1cImNvbHVtbi5jb21wYXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwaXBlXT1cImNvbHVtbi5waXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJjb2x1bW4uZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5BdXRvUmVzaXplXT1cImNvbHVtbi5jYW5BdXRvUmVzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZWxsVGVtcGxhdGVdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ2hvc3RDZWxsVGVtcGxhdGVdPVwiY29sdW1uLmdob3N0Q2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmVlVG9nZ2xlVGVtcGxhdGVdPVwiY29sdW1uLnRyZWVUb2dnbGVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2VsbENsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRlclRlbXBsYXRlXT1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVhZGVyQ2xhc3NdPVwiY29sdW1uLmhlYWRlckNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJDaGVja2JveGFibGVdPVwiY29sdW1uLmhlYWRlckNoZWNrYm94YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNUcmVlQ29sdW1uXT1cImNvbHVtbi5pc1RyZWVDb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RyZWVMZXZlbEluZGVudF09XCJjb2x1bW4udHJlZUxldmVsSW5kZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdW1tYXJ5RnVuY109XCJjb2x1bW4uc3VtbWFyeUZ1bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1bW1hcnlUZW1wbGF0ZV09XCJjb2x1bW4uc3VtbWFyeVRlbXBsYXRlXCJcbiAgICAgICAgPjwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtZm9vdGVyIGlkPVwiZGF0YXRhYmxlLWZvb3RlclwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgbmd4LWRhdGF0YWJsZS1mb290ZXItdGVtcGxhdGVcbiAgICAgICAgICAgIGxldC1yb3dDb3VudD1cInJvd0NvdW50XCJcbiAgICAgICAgICAgIGxldC1wYWdlU2l6ZUN1cnJlbnQ9XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICBsZXQtc2VsZWN0ZWRDb3VudD1cInNlbGVjdGVkQ291bnRcIlxuICAgICAgICAgICAgbGV0LWN1clBhZ2U9XCJjdXJQYWdlXCJcbiAgICAgICAgICAgIGxldC1vZmZzZXQ9XCJvZmZzZXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyB0KCd0LnRvdGFsJykgfX06IDwvc3Bhbj48c3BhbiBpZD1cInRvdGFsLW51bWJlci1vZi1pdGVtc1wiPnt7cm93Q291bnR9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZENvdW50XCI+Jm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO3t7IHQoJ3Quc2VsZWN0ZWQnKSB9fTogPC9zcGFuPjxzcGFuICpuZ0lmPVwic2VsZWN0ZWRDb3VudFwiIGlkPVwibnVtYmVyLW9mLWl0ZW1zLXNlbGVjdGVkXCI+e3tzZWxlY3RlZENvdW50fX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uXCIgW3N0eWxlLmRpc3BsYXldPVwiISgocm93Q291bnQgLyBwYWdlU2l6ZSkgPiAxKSA/ICdub25lJyA6IG51bGxcIj5cbiAgICAgICAgICAgICAgPGJpaXQtZGF0YXRhYmxlLXBhZ2VyICNwYWdlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VdPVwiY3VyUGFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJwYWdlU2l6ZUN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50XT1cInJvd0NvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiISgocm93Q291bnQgLyBwYWdlU2l6ZSkgPiAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRhYmxlLm9uRm9vdGVyUGFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDwvYmlpdC1kYXRhdGFibGUtcGFnZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWl0ZW1zXCIgKm5nSWY9XCJwYWdlU2l6ZUxpc3RcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhZ2VTaXplTGlzdD8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdCgndC5yb3dzLXBlci1wYWdlJykgfX06PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwYWdlci5zaXplID0gJGV2ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzaXplIG9mIHBhZ2VTaXplTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInNpemVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e3NpemV9fVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWZvb3Rlcj5cbiAgICAgIDwvbmd4LWRhdGF0YWJsZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZXJ2ZXJTaWRlXCI+XG4gICAgICA8bmd4LWRhdGF0YWJsZSAjdGFibGVcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiX2NvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbk1vZGVdPVwiJ2ZvcmNlJ1wiXG4gICAgICAgICAgICAgICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIjQyXCJcbiAgICAgICAgICAgICAgICAgICAgIFtmb290ZXJIZWlnaHRdPVwiaGlkZUZvb3RlciA/IDAgOiAzNFwiXG4gICAgICAgICAgICAgICAgICAgICBbcm93SGVpZ2h0XT1cIidhdXRvJ1wiXG4gICAgICAgICAgICAgICAgICAgICBbcmVvcmRlcmFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvblR5cGVdPVwiU2VsZWN0aW9uVHlwZS5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgIChhY3RpdmF0ZSk9XCJvbkFjdGl2YXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgW3ZpcnR1YWxpemF0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxiYXJWRHluYW1pY109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxiYXJIXT1cInNjcm9sbGJhckhcIlxuICAgICAgICAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cIntlbXB0eU1lc3NhZ2U6IHQoJ3QuZW1wdHktbWVzc2FnZScpfVwiXG4gICAgICAgICAgICAgICAgICAgICBbZXh0ZXJuYWxQYWdpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbY291bnRdPVwicGFnZS50b3RhbEVsZW1lbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgIFtvZmZzZXRdPVwicGFnZS5wYWdlTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgIFtsaW1pdF09XCJwYWdlLnBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgIChwYWdlKT1cIm9uRm9vdGVyUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uICpuZ0lmPVwic2VsZWN0YWJsZSAmJiAhc2luZ2xlU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGtib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCI0MlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkF1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzaXplYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInY2hrYm94J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIG5neC1kYXRhdGFibGUtaGVhZGVyLXRlbXBsYXRlXG4gICAgICAgICAgICBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBsZXQtYWxsUm93c1NlbGVjdGVkPVwiYWxsUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICAgIGxldC1zZWxlY3RGbj1cInNlbGVjdEZuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YmlpdC1jaGVja2JveCBbbmdNb2RlbF09XCJhbGxSb3dzU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RGbighYWxsUm93c1NlbGVjdGVkKVwiPjwvYmlpdC1jaGVja2JveD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlXG4gICAgICAgICAgICBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBsZXQtaXNTZWxlY3RlZD1cImlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LW9uQ2hlY2tib3hDaGFuZ2VGbj1cIm9uQ2hlY2tib3hDaGFuZ2VGblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJpaXQtY2hlY2tib3ggW25nTW9kZWxdPVwiaXNTZWxlY3RlZFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2VGbigkZXZlbnQpXCI+PC9iaWl0LWNoZWNrYm94PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgX2NvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BdPVwiY29sdW1uLnByb3BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrYm94YWJsZV09XCJjb2x1bW4uY2hlY2tib3hhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcm96ZW5MZWZ0XT1cImNvbHVtbi5mcm96ZW5MZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcm96ZW5SaWdodF09XCJjb2x1bW4uZnJvemVuUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsZXhHcm93XT1cImNvbHVtbi5mbGV4R3Jvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluV2lkdGhdPVwiY29sdW1uLm1pbldpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhXaWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzaXplYWJsZV09XCJjb2x1bW4ucmVzaXplYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFyYXRvcl09XCJjb2x1bW4uY29tcGFyYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGlwZV09XCJjb2x1bW4ucGlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwiY29sdW1uLmRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuQXV0b1Jlc2l6ZV09XCJjb2x1bW4uY2FuQXV0b1Jlc2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2VsbFRlbXBsYXRlXT1cImNvbHVtbi5jZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dob3N0Q2VsbFRlbXBsYXRlXT1cImNvbHVtbi5naG9zdENlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHJlZVRvZ2dsZVRlbXBsYXRlXT1cImNvbHVtbi50cmVlVG9nZ2xlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NlbGxDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJUZW1wbGF0ZV09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRlckNsYXNzXT1cImNvbHVtbi5oZWFkZXJDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVhZGVyQ2hlY2tib3hhYmxlXT1cImNvbHVtbi5oZWFkZXJDaGVja2JveGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzVHJlZUNvbHVtbl09XCJjb2x1bW4uaXNUcmVlQ29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmVlTGV2ZWxJbmRlbnRdPVwiY29sdW1uLnRyZWVMZXZlbEluZGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3VtbWFyeUZ1bmNdPVwiY29sdW1uLnN1bW1hcnlGdW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdW1tYXJ5VGVtcGxhdGVdPVwiY29sdW1uLnN1bW1hcnlUZW1wbGF0ZVwiXG4gICAgICAgID48L25neC1kYXRhdGFibGUtY29sdW1uPlxuXG4gICAgICAgIDxuZ3gtZGF0YXRhYmxlLWZvb3Rlcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIG5neC1kYXRhdGFibGUtZm9vdGVyLXRlbXBsYXRlXG4gICAgICAgICAgICBsZXQtcm93Q291bnQ9XCJyb3dDb3VudFwiXG4gICAgICAgICAgICBsZXQtcGFnZVNpemVDdXJyZW50PVwicGFnZVNpemVcIlxuICAgICAgICAgICAgbGV0LXNlbGVjdGVkQ291bnQ9XCJzZWxlY3RlZENvdW50XCJcbiAgICAgICAgICAgIGxldC1jdXJQYWdlPVwiY3VyUGFnZVwiXG4gICAgICAgICAgICBsZXQtb2Zmc2V0PVwib2Zmc2V0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIiBpZD1cInRvdGFsLWVsZW1lbnRzXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ3QudG90YWwnKSB9fToge3tyb3dDb3VudH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkQ291bnRcIj4mbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7e3sgdCgndC5zZWxlY3RlZCcpIH19OiB7e3NlbGVjdGVkQ291bnR9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb25cIiBbc3R5bGUuZGlzcGxheV09XCIhKChyb3dDb3VudCAvIHBhZ2VTaXplKSA+IDEpID8gJ25vbmUnIDogbnVsbFwiPlxuICAgICAgICAgICAgICA8YmlpdC1kYXRhdGFibGUtcGFnZXIgI3BhZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZV09XCJjdXJQYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cInBhZ2VTaXplQ3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY291bnRdPVwicm93Q291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIhKChyb3dDb3VudCAvIHBhZ2VTaXplKSA+IDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidGFibGUub25Gb290ZXJQYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPC9iaWl0LWRhdGF0YWJsZS1wYWdlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtaXRlbXNcIiAqbmdJZj1cInBhZ2VTaXplTGlzdFwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFnZVNpemVMaXN0Py5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCd0LnJvd3MtcGVyLXBhZ2UnKSB9fTo8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInBhZ2VyLnNpemUgPSAkZXZlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNpemUgb2YgcGFnZVNpemVMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7c2l6ZX19XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtZm9vdGVyPlxuICAgICAgPC9uZ3gtZGF0YXRhYmxlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlpdC1kYXRhdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2l6YXJkcnktdGhlbWUvdGFibGUvc3JjL2JpaXQtZGF0YXRhYmxlL2JpaXQtZGF0YXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dpemFyZHJ5LXRoZW1lL3RhYmxlL3NyYy9iaWl0LWRhdGF0YWJsZS9iaWl0LWRhdGF0YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBZSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkgsT0FBTyxFQUFDLFVBQVUsRUFBc0IsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRXRFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQVFuQyxNQUFNLE9BQU8sc0JBQXNCO0lBTWpDLElBQWEsSUFBSSxDQUFDLElBQVM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQs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QWxDLFlBQVk7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0YXRhYmxlQ29sdW1ufSBmcm9tIFwiLi9tb2RlbHMvZGF0YXRhYmxlLWNvbHVtblwiO1xuaW1wb3J0IHtDb2x1bW5Nb2RlLCBEYXRhdGFibGVDb21wb25lbnQsIFNlbGVjdGlvblR5cGV9IGZyb20gXCJAc2llbWVucy9uZ3gtZGF0YXRhYmxlXCI7XG5pbXBvcnQge2NvbXBsZXRlSWNvblNldH0gZnJvbSAnQGJpaXQtc29sdXRpb25zL2JpaXQtaWNvbnMtY29sbGVjdGlvbic7XG5pbXBvcnQge0JpaXRJY29uU2VydmljZX0gZnJvbSBcIkBiaWl0LXNvbHV0aW9ucy93aXphcmRyeS10aGVtZS9pY29uXCI7XG5pbXBvcnQge0JpaXRNdWx0aXNlbGVjdFR5cGV9IGZyb20gXCJAYmlpdC1zb2x1dGlvbnMvd2l6YXJkcnktdGhlbWUvaW5wdXRzXCI7XG5pbXBvcnQge2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xuaW1wb3J0IHtHZW5lcmljRmlsdGVyfSBmcm9tIFwiLi4vdXRpbHMvZ2VuZXJpYy1maWx0ZXJcIjtcbmltcG9ydCB7cHJvdmlkZVRyYW5zbG9jb1Njb3BlfSBmcm9tIFwiQG5nbmVhdC90cmFuc2xvY29cIjtcbmltcG9ydCB7UGFnZX0gZnJvbSBcIi4vbW9kZWxzL3BhZ2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmlpdC1kYXRhdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYmlpdC1kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9iaWl0LWRhdGF0YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtwcm92aWRlVHJhbnNsb2NvU2NvcGUoe3Njb3BlOiAnd2l6YXJkcnktdGhlbWUvdGFibGUnLCBhbGlhczogJ3QnfSldXG59KVxuZXhwb3J0IGNsYXNzIEJpaXREYXRhdGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlOiBEYXRhdGFibGVDb21wb25lbnQ7XG5cbiAgX2RhdGE6IFRbXSA9IFtdO1xuICBhbGxEYXRhOiBUW10gPSBbXTtcblxuICBASW5wdXQoKSBzZXQgZGF0YShkYXRhOiBUW10pIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YSA/PyBbXTtcbiAgICB0aGlzLmFsbERhdGEgPSBkYXRhID8/IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgfVxuXG4gIGdldCBkYXRhKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBfY29sdW1uczogRGF0YXRhYmxlQ29sdW1uW10gPSBbXTtcbiAgYWxsQ29sdW1uczogRGF0YXRhYmxlQ29sdW1uW10gPSBbXTtcblxuICBASW5wdXQoKSBzZXQgY29sdW1ucyhjb2x1bW5zOiBEYXRhdGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuYWxsQ29sdW1ucyA9IGNvbHVtbnMgPz8gW107XG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gYy52aXNpYmxlKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCk6IERhdGF0YWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIHNlbGVjdGVkOiBUW10gPSBbXTtcblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkUm93cygpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgQElucHV0KCkgcGFnZVNpemU/OiBudW1iZXI7XG4gIEBJbnB1dCgpIHBhZ2VTaXplTGlzdDogbnVtYmVyW10gPSBbXTtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWxlY3RhYmxlPzogYW55O1xuICBASW5wdXQoKSBzaW5nbGVTZWxlY3Rpb24/OiBhbnk7XG4gIEBJbnB1dCgpIHNjcm9sbGJhckg/OiBhbnk7XG4gIEBJbnB1dCgpIGhpZGVIZWFkZXI/OiBhbnk7XG4gIEBJbnB1dCgpIGhpZGVGb290ZXI/OiBhbnk7XG4gIEBJbnB1dCgpIHNlcnZlclNpZGU/OiBhbnk7XG4gIEBJbnB1dCgpIHBhZ2U/OiBQYWdlO1xuICBASW5wdXQoKSByb3dTdHlsZVByZWRpY2F0ZT86IChyb3c6IFQpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpIHJvd1N0eWxlQ2xhc3M6IHN0cmluZyA9ICdiaWl0LXJvdy1oaWdobGlnaHQnO1xuICBzZWFyY2g6IHN0cmluZyA9IFwiXCI7XG5cbiAgQE91dHB1dCgpIG9uU2VsZWN0aW9uOiBFdmVudEVtaXR0ZXI8VFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xuICBAT3V0cHV0KCkgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UGFnZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2U+KCk7XG5cbiAgQENvbnRlbnRDaGlsZCgnYWN0aW9ucycpIGFjdGlvbnNUcGwhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBDb2x1bW5Nb2RlID0gQ29sdW1uTW9kZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IFNlbGVjdGlvblR5cGUgPSBTZWxlY3Rpb25UeXBlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgQmlpdE11bHRpc2VsZWN0VHlwZSA9IEJpaXRNdWx0aXNlbGVjdFR5cGU7XG4gIHByaXZhdGUgZmluZFRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0O1xuXG4gIGdldFJvd0NsYXNzID0gKHJvdzogVCk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Q2xhc3MgPSB0aGlzLnJvd1N0eWxlQ2xhc3M/LnRyaW0oKTtcbiAgICBpZiAoIWhpZ2hsaWdodENsYXNzIHx8ICF0aGlzLnJvd1N0eWxlUHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucm93U3R5bGVQcmVkaWNhdGUocm93KSA/IGhpZ2hsaWdodENsYXNzIDogJyc7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoYmlpdEljb25TZXJ2aWNlOiBCaWl0SWNvblNlcnZpY2UpIHtcbiAgICBiaWl0SWNvblNlcnZpY2UucmVnaXN0ZXJJY29ucyhjb21wbGV0ZUljb25TZXQpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHRoaXMuc2VsZWN0YWJsZSk7XG4gICAgdGhpcy5zaW5nbGVTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodGhpcy5zaW5nbGVTZWxlY3Rpb24pO1xuICAgIHRoaXMuc2Nyb2xsYmFySCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLnNjcm9sbGJhckgpO1xuICAgIHRoaXMuaGlkZUhlYWRlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLmhpZGVIZWFkZXIpO1xuICAgIHRoaXMuaGlkZUZvb3RlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLmhpZGVGb290ZXIpO1xuICAgIHRoaXMuc2VydmVyU2lkZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLnNlcnZlclNpZGUpO1xuICB9XG5cbiAgb25TZWxlY3Qoe3NlbGVjdGVkfSkge1xuICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICB0aGlzLnNlbGVjdGVkLnB1c2goLi4uc2VsZWN0ZWQpO1xuICAgIHRoaXMub25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgfVxuXG4gIG9uQWN0aXZhdGUoZXZlbnQ6IHsgdHlwZTogJ2tleWRvd24nIHwgJ2NsaWNrJyB8ICdkYmxjbGljaycsIGV2ZW50LCByb3csIGNvbHVtbiwgdmFsdWUsIGNlbGxFbGVtZW50LCByb3dFbGVtZW50IH0pIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PSAnY2xpY2snICYmIGV2ZW50LmNvbHVtbi5uYW1lICE9PSAnY2hrYm94Jykge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IFtldmVudC5yb3ddO1xuICAgICAgdGhpcy5vblNlbGVjdGlvbi5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uRmlsdGVyKHZhbHVlOiBzdHJpbmcsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5maW5kVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZmluZFRpbWVvdXQpO1xuICAgIH1cbiAgICB0aGlzLmZpbmRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaCA9IHZhbHVlO1xuICAgICAgY29uc3QgdmFsID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgLy8gZmlsdGVyIG91ciBkYXRhXG4gICAgICBjb25zdCB0ZW1wOiBUW10gPSB0aGlzLmFsbERhdGEuZmlsdGVyKGl0ZW0gPT4gR2VuZXJpY0ZpbHRlci5maWx0ZXIoaXRlbSwgdmFsLCB0cnVlKSk7XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgcm93c1xuICAgICAgdGhpcy5fZGF0YSA9IHRlbXA7XG4gICAgICAvLyBXaGVuZXZlciB0aGUgZmlsdGVyIGNoYW5nZXMsIGFsd2F5cyBnbyBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICB0aGlzLnRhYmxlLm9mZnNldCA9IDA7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5maW5kVGltZW91dCk7XG4gICAgICB0aGlzLmZpbmRUaW1lb3V0ID0gbnVsbDtcbiAgICB9LCBmb3JjZSA/IDAgOiA1MDApO1xuICB9XG5cbiAgb25Gb290ZXJQYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBwYWdlID0gbmV3IFBhZ2UoZXZlbnQub2Zmc2V0LCBldmVudC5wYWdlU2l6ZSwgZXZlbnQuY291bnQpO1xuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQocGFnZSk7XG4gIH1cblxuICBzZXRDb2x1bW5WaXNpYmlsaXR5KGNvbHVtbnM6IERhdGF0YWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuYWxsQ29sdW1ucy5maWx0ZXIoYyA9PiBjb2x1bW5zLmluY2x1ZGVzKGMpKVxuICB9XG59XG4iLCI8ZGl2IGlkPVwiYmlpdC10YWJsZVwiIGNsYXNzPVwidGFibGUtY2FudmFzXCIgKnRyYW5zbG9jbz1cImxldCB0XCI+XG4gIDxkaXYgY2xhc3M9XCJ0b3BcIiAqbmdJZj1cIiFoaWRlSGVhZGVyXCI+XG4gICAgPGRpdiBpZD1cIm1lbnVcIiBjbGFzcz1cImFjdGlvbi1iYXJcIj5cbiAgICAgIDxiaWl0LXZlcnRpY2FsLW1lbnUgKm5nSWY9XCJhY3Rpb25zVHBsXCIgY2xhc3M9XCJ2ZXJ0aWNhbC1tZW51XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb25zVHBsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2JpaXQtdmVydGljYWwtbWVudT5cbiAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25zVHBsXCIgY2xhc3M9XCJob3Jpem9udGFsLW1lbnUgZGVmYXVsdC1tZW51XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb25zVHBsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZWZhdWx0LW1lbnVcIiAqbmdJZj1cIiFhY3Rpb25zVHBsXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJvcHRpb25zXCIgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgICA8YmlpdC1pbnB1dC10ZXh0IGlkPVwic2VhcmNoXCIgI3NlYXJjaElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGlvblBlcmZvcm1lZCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvbkZpbHRlcigkZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInNlYXJjaElucHV0LnZhbHVlID0gc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ0KCd0LnNlYXJjaCcpXCJcbiAgICAgID48L2JpaXQtaW5wdXQtdGV4dD5cbiAgICAgIDxiaWl0LW11bHRpc2VsZWN0IGlkPVwiY29sdW1uLXNlbGVjdG9yXCIgW25nTW9kZWxdPVwiX2NvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0Q29sdW1uVmlzaWJpbGl0eSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImFsbENvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwidmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJCaWl0TXVsdGlzZWxlY3RUeXBlLklDT05cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInQoJ3QuY29sdW1uLXNlbGVjdG9yJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXG4gICAgICA+PC9iaWl0LW11bHRpc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBpZD1cImNvbnRlbnRcIiBjbGFzcz1cInRhYmxlXCI+XG4gICAgPGJpaXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwibG9hZGluZ1wiPjwvYmlpdC1wcm9ncmVzcy1iYXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZXJ2ZXJTaWRlXCI+XG4gICAgICA8bmd4LWRhdGF0YWJsZSAjdGFibGVcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiX2NvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgW3Jvd0NsYXNzXT1cImdldFJvd0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5Nb2RlXT1cIidmb3JjZSdcIlxuICAgICAgICAgICAgICAgICAgICAgW2hlYWRlckhlaWdodF09XCI0MlwiXG4gICAgICAgICAgICAgICAgICAgICBbZm9vdGVySGVpZ2h0XT1cImhpZGVGb290ZXIgPyAwIDogMzRcIlxuICAgICAgICAgICAgICAgICAgICAgW3Jvd0hlaWdodF09XCInYXV0bydcIlxuICAgICAgICAgICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25UeXBlXT1cIlNlbGVjdGlvblR5cGUuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgIChzZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAoYWN0aXZhdGUpPVwib25BY3RpdmF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgIFt2aXJ0dWFsaXphdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYmFyVkR5bmFtaWNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbbGltaXRdPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGJhckhdPVwic2Nyb2xsYmFySFwiXG4gICAgICAgICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwie2VtcHR5TWVzc2FnZTogdCgndC5lbXB0eS1tZXNzYWdlJyl9XCJcbiAgICAgID5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uICpuZ0lmPVwic2VsZWN0YWJsZSAmJiAhc2luZ2xlU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGtib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCI0MlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkF1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzaXplYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInY2hrYm94J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIG5neC1kYXRhdGFibGUtaGVhZGVyLXRlbXBsYXRlXG4gICAgICAgICAgICBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBsZXQtYWxsUm93c1NlbGVjdGVkPVwiYWxsUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICAgIGxldC1zZWxlY3RGbj1cInNlbGVjdEZuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YmlpdC1jaGVja2JveCBbbmdNb2RlbF09XCJhbGxSb3dzU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RGbighYWxsUm93c1NlbGVjdGVkKVwiPjwvYmlpdC1jaGVja2JveD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlXG4gICAgICAgICAgICBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBsZXQtaXNTZWxlY3RlZD1cImlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LW9uQ2hlY2tib3hDaGFuZ2VGbj1cIm9uQ2hlY2tib3hDaGFuZ2VGblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJpaXQtY2hlY2tib3ggW25nTW9kZWxdPVwiaXNTZWxlY3RlZFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2VGbigkZXZlbnQpXCI+PC9iaWl0LWNoZWNrYm94PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgX2NvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BdPVwiY29sdW1uLnByb3BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrYm94YWJsZV09XCJjb2x1bW4uY2hlY2tib3hhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcm96ZW5MZWZ0XT1cImNvbHVtbi5mcm96ZW5MZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcm96ZW5SaWdodF09XCJjb2x1bW4uZnJvemVuUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsZXhHcm93XT1cImNvbHVtbi5mbGV4R3Jvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluV2lkdGhdPVwiY29sdW1uLm1pbldpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhXaWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzaXplYWJsZV09XCJjb2x1bW4ucmVzaXplYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFyYXRvcl09XCJjb2x1bW4uY29tcGFyYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGlwZV09XCJjb2x1bW4ucGlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwiY29sdW1uLmRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuQXV0b1Jlc2l6ZV09XCJjb2x1bW4uY2FuQXV0b1Jlc2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2VsbFRlbXBsYXRlXT1cImNvbHVtbi5jZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dob3N0Q2VsbFRlbXBsYXRlXT1cImNvbHVtbi5naG9zdENlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHJlZVRvZ2dsZVRlbXBsYXRlXT1cImNvbHVtbi50cmVlVG9nZ2xlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NlbGxDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJUZW1wbGF0ZV09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRlckNsYXNzXT1cImNvbHVtbi5oZWFkZXJDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVhZGVyQ2hlY2tib3hhYmxlXT1cImNvbHVtbi5oZWFkZXJDaGVja2JveGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzVHJlZUNvbHVtbl09XCJjb2x1bW4uaXNUcmVlQ29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmVlTGV2ZWxJbmRlbnRdPVwiY29sdW1uLnRyZWVMZXZlbEluZGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3VtbWFyeUZ1bmNdPVwiY29sdW1uLnN1bW1hcnlGdW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdW1tYXJ5VGVtcGxhdGVdPVwiY29sdW1uLnN1bW1hcnlUZW1wbGF0ZVwiXG4gICAgICAgID48L25neC1kYXRhdGFibGUtY29sdW1uPlxuXG4gICAgICAgIDxuZ3gtZGF0YXRhYmxlLWZvb3RlciBpZD1cImRhdGF0YWJsZS1mb290ZXJcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIG5neC1kYXRhdGFibGUtZm9vdGVyLXRlbXBsYXRlXG4gICAgICAgICAgICBsZXQtcm93Q291bnQ9XCJyb3dDb3VudFwiXG4gICAgICAgICAgICBsZXQtcGFnZVNpemVDdXJyZW50PVwicGFnZVNpemVcIlxuICAgICAgICAgICAgbGV0LXNlbGVjdGVkQ291bnQ9XCJzZWxlY3RlZENvdW50XCJcbiAgICAgICAgICAgIGxldC1jdXJQYWdlPVwiY3VyUGFnZVwiXG4gICAgICAgICAgICBsZXQtb2Zmc2V0PVwib2Zmc2V0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgndC50b3RhbCcpIH19OiA8L3NwYW4+PHNwYW4gaWQ9XCJ0b3RhbC1udW1iZXItb2YtaXRlbXNcIj57e3Jvd0NvdW50fX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRDb3VudFwiPiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDt7eyB0KCd0LnNlbGVjdGVkJykgfX06IDwvc3Bhbj48c3BhbiAqbmdJZj1cInNlbGVjdGVkQ291bnRcIiBpZD1cIm51bWJlci1vZi1pdGVtcy1zZWxlY3RlZFwiPnt7c2VsZWN0ZWRDb3VudH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvblwiIFtzdHlsZS5kaXNwbGF5XT1cIiEoKHJvd0NvdW50IC8gcGFnZVNpemUpID4gMSkgPyAnbm9uZScgOiBudWxsXCI+XG4gICAgICAgICAgICAgIDxiaWl0LWRhdGF0YWJsZS1wYWdlciAjcGFnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlXT1cImN1clBhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwicGFnZVNpemVDdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJyb3dDb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiEoKHJvd0NvdW50IC8gcGFnZVNpemUpID4gMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0YWJsZS5vbkZvb3RlclBhZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8L2JpaXQtZGF0YXRhYmxlLXBhZ2VyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1pdGVtc1wiICpuZ0lmPVwicGFnZVNpemVMaXN0XCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYWdlU2l6ZUxpc3Q/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ3Qucm93cy1wZXItcGFnZScpIH19Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicGFnZXIuc2l6ZSA9ICRldmVudFwiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2l6ZSBvZiBwYWdlU2l6ZUxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJzaXplXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3tzaXplfX1cbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1mb290ZXI+XG4gICAgICA8L25neC1kYXRhdGFibGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VydmVyU2lkZVwiPlxuICAgICAgPG5neC1kYXRhdGFibGUgI3RhYmxlXG4gICAgICAgICAgICAgICAgICAgICBbcm93c109XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cIl9jb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dDbGFzc109XCJnZXRSb3dDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICBbY29sdW1uTW9kZV09XCInZm9yY2UnXCJcbiAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJIZWlnaHRdPVwiNDJcIlxuICAgICAgICAgICAgICAgICAgICAgW2Zvb3RlckhlaWdodF09XCJoaWRlRm9vdGVyID8gMCA6IDM0XCJcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgICAgIFtyZW9yZGVyYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uVHlwZV09XCJTZWxlY3Rpb25UeXBlLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgKGFjdGl2YXRlKT1cIm9uQWN0aXZhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICBbdmlydHVhbGl6YXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGJhclZEeW5hbWljXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGJhckhdPVwic2Nyb2xsYmFySFwiXG4gICAgICAgICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwie2VtcHR5TWVzc2FnZTogdCgndC5lbXB0eS1tZXNzYWdlJyl9XCJcbiAgICAgICAgICAgICAgICAgICAgIFtleHRlcm5hbFBhZ2luZ109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJwYWdlLnRvdGFsRWxlbWVudHNcIlxuICAgICAgICAgICAgICAgICAgICAgW29mZnNldF09XCJwYWdlLnBhZ2VOdW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgW2xpbWl0XT1cInBhZ2UucGFnZVNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgKHBhZ2UpPVwib25Gb290ZXJQYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gKm5nSWY9XCJzZWxlY3RhYmxlICYmICFzaW5nbGVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Noa2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjQyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuQXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNpemVhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidjaGtib3gnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGVcbiAgICAgICAgICAgIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXNlbGVjdEZuPVwic2VsZWN0Rm5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxiaWl0LWNoZWNrYm94IFtuZ01vZGVsXT1cImFsbFJvd3NTZWxlY3RlZFwiIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdEZuKCFhbGxSb3dzU2VsZWN0ZWQpXCI+PC9iaWl0LWNoZWNrYm94PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGVcbiAgICAgICAgICAgIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgIGxldC1pc1NlbGVjdGVkPVwiaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICBsZXQtb25DaGVja2JveENoYW5nZUZuPVwib25DaGVja2JveENoYW5nZUZuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YmlpdC1jaGVja2JveCBbbmdNb2RlbF09XCJpc1NlbGVjdGVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja2JveENoYW5nZUZuKCRldmVudClcIj48L2JpaXQtY2hlY2tib3g+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cblxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBfY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcF09XCJjb2x1bW4ucHJvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tib3hhYmxlXT1cImNvbHVtbi5jaGVja2JveGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zyb3plbkxlZnRdPVwiY29sdW1uLmZyb3plbkxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zyb3plblJpZ2h0XT1cImNvbHVtbi5mcm96ZW5SaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmxleEdyb3ddPVwiY29sdW1uLmZsZXhHcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5XaWR0aF09XCJjb2x1bW4ubWluV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heFdpZHRoXT1cImNvbHVtbi5tYXhXaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNpemVhYmxlXT1cImNvbHVtbi5yZXNpemVhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYXJhdG9yXT1cImNvbHVtbi5jb21wYXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwaXBlXT1cImNvbHVtbi5waXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJjb2x1bW4uZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5BdXRvUmVzaXplXT1cImNvbHVtbi5jYW5BdXRvUmVzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZWxsVGVtcGxhdGVdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ2hvc3RDZWxsVGVtcGxhdGVdPVwiY29sdW1uLmdob3N0Q2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmVlVG9nZ2xlVGVtcGxhdGVdPVwiY29sdW1uLnRyZWVUb2dnbGVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2VsbENsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRlclRlbXBsYXRlXT1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVhZGVyQ2xhc3NdPVwiY29sdW1uLmhlYWRlckNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJDaGVja2JveGFibGVdPVwiY29sdW1uLmhlYWRlckNoZWNrYm94YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNUcmVlQ29sdW1uXT1cImNvbHVtbi5pc1RyZWVDb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RyZWVMZXZlbEluZGVudF09XCJjb2x1bW4udHJlZUxldmVsSW5kZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdW1tYXJ5RnVuY109XCJjb2x1bW4uc3VtbWFyeUZ1bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1bW1hcnlUZW1wbGF0ZV09XCJjb2x1bW4uc3VtbWFyeVRlbXBsYXRlXCJcbiAgICAgICAgPjwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtZm9vdGVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgbmd4LWRhdGF0YWJsZS1mb290ZXItdGVtcGxhdGVcbiAgICAgICAgICAgIGxldC1yb3dDb3VudD1cInJvd0NvdW50XCJcbiAgICAgICAgICAgIGxldC1wYWdlU2l6ZUN1cnJlbnQ9XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICBsZXQtc2VsZWN0ZWRDb3VudD1cInNlbGVjdGVkQ291bnRcIlxuICAgICAgICAgICAgbGV0LWN1clBhZ2U9XCJjdXJQYWdlXCJcbiAgICAgICAgICAgIGxldC1vZmZzZXQ9XCJvZmZzZXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiIGlkPVwidG90YWwtZWxlbWVudHNcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgndC50b3RhbCcpIH19OiB7e3Jvd0NvdW50fX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRDb3VudFwiPiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDt7eyB0KCd0LnNlbGVjdGVkJykgfX06IHt7c2VsZWN0ZWRDb3VudH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvblwiIFtzdHlsZS5kaXNwbGF5XT1cIiEoKHJvd0NvdW50IC8gcGFnZVNpemUpID4gMSkgPyAnbm9uZScgOiBudWxsXCI+XG4gICAgICAgICAgICAgIDxiaWl0LWRhdGF0YWJsZS1wYWdlciAjcGFnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlXT1cImN1clBhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwicGFnZVNpemVDdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJyb3dDb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiEoKHJvd0NvdW50IC8gcGFnZVNpemUpID4gMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0YWJsZS5vbkZvb3RlclBhZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8L2JpaXQtZGF0YXRhYmxlLXBhZ2VyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1pdGVtc1wiICpuZ0lmPVwicGFnZVNpemVMaXN0XCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYWdlU2l6ZUxpc3Q/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ3Qucm93cy1wZXItcGFnZScpIH19Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicGFnZXIuc2l6ZSA9ICRldmVudFwiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2l6ZSBvZiBwYWdlU2l6ZUxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJzaXplXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3tzaXplfX1cbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1mb290ZXI+XG4gICAgICA8L25neC1kYXRhdGFibGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=