ngx-wapp-components 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/misc/w-filter-panel/w-filter-panel.component.mjs +2 -2
- package/esm2020/lib/tables/w-table-lazy/w-table-lazy.component.mjs +3 -3
- package/fesm2015/ngx-wapp-components.mjs +4 -4
- package/fesm2015/ngx-wapp-components.mjs.map +1 -1
- package/fesm2020/ngx-wapp-components.mjs +4 -4
- package/fesm2020/ngx-wapp-components.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -180,10 +180,10 @@ export class WTableLazyComponent {
|
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
WTableLazyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WTableLazyComponent, deps: [{ token: i1.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
183
|
-
WTableLazyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WTableLazyComponent, selector: "w-table-lazy", inputs: { loading: "loading", elements: "elements", rowsPerPage: "rowsPerPage", allElements: "allElements", totalRecords: "totalRecords", maxRowsPerPage: "maxRowsPerPage", wappTableLazyLoadingObject: "wappTableLazyLoadingObject" }, outputs: { queryElements: "queryElements", onElementSelect: "onElementSelect", onViewElementSelect: "onViewElementSelect", onCustomElementSelect: "onCustomElementSelect", onCopyElementSelect: "onCopyElementSelect", onEditElementSelect: "onEditElementSelect", onDeleteElementSelect: "onDeleteElementSelect", onAllElementSelect: "onAllElementSelect" }, viewQueries: [{ propertyName: "dataTable", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableLazyLoadingObject\" [class.table-container]=\"wappTableLazyLoadingObject.tableContainer\">\r\n <p-table class=\"wapp-table-styles\"\r\n #table [value]=\"elements\" [lazy]=\"true\" (onLazyLoad)=\"loadElements($event)\" dataKey=\"{{wappTableLazyLoadingObject.identificator}}\"\r\n [tableStyle]=\"{'min-width': '70rem'}\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [paginator]=\"true\"\r\n [rows]=\"rowsPerPage\" \r\n [currentPageReportTemplate]=\"wappTableLazyLoadingObject.currentPageReportTemplate ? wappTableLazyLoadingObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [loading]=\"loading\"\r\n [showLoader]=\"false\"\r\n [globalFilterFields]=\"wappTableLazyLoadingObject.globalFilterFields!\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject.hasClearButton || wappTableLazyLoadingObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <!-- <button *ngIf=\"wappTableLazyLoadingObject.hasClearButton\" pButton [label]=\"wappTableLazyLoadingObject.clearPlaceholder!\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\" (click)=\"clear(table)\"></button> -->\r\n <span class=\"showing-per-page\"> {{wappTableLazyLoadingObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber \r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"maxRowsPerPage\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\"\r\n (ngModelChange)=\"reloadElements()\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input class=\"height-input wapp-input\" pInputText type=\"text\" (input)=\"table.filterGlobal($event, 'contains')\" placeholder=\"{{wappTableLazyLoadingObject.searchPlaceholder}}\" />\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableLazyLoadingObject.hasColumnFilters && wappTableLazyLoadingObject.hasCheckbox; else noCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-template #noCheckbox><th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\"></th></ng-template>\r\n <ng-container *ngIf=\"!wappTableLazyLoadingObject.hasSortableColumns; else something\">\r\n <th *ngFor=\"let header of wappTableLazyLoadingObject?.headers\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n <ng-template #something>\r\n <ng-template #something ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableLazyLoadingObject.sortableNames[i]\">\r\n {{wappTableLazyLoadingObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableLazyLoadingObject.sortableNames[i] != null\" [field]=\"wappTableLazyLoadingObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton\"></th>\r\n </tr>\r\n <tr *ngIf=\"wappTableLazyLoadingObject.hasColumnFilters\">\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasImage\"></th>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.columnFilterTypes\" let-i=\"index\">\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Text\">\r\n <p-columnFilter type=\"text\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Multiselect\">\r\n <p-columnFilter [field]=\"wappTableLazyLoadingObject.filterNames[i]\" matchMode=\"in\" [showMenu]=\"false\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" appendTo=\"body\" [options]=\"wappTableLazyLoadingObject.selectFilterElements[i]\" placeholder=\"Any\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" [maxSelectedLabels]=\"1\" [selectedItemsLabel]=\"'{0} items'\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-1\">{{option.name}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.None\"></th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Boolean\">\r\n <p-columnFilter type=\"boolean\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Date\">\r\n <p-columnFilter type=\"date\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element let-index=\"index\">\r\n <tr *ngIf=\"!loading\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableLazyLoadingObject.columnTypes\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n <div *ngIf=\"wappTableLazyLoadingObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" class=\"text-center\">\r\n <img *ngIf=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\" \r\n [src]=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\" \r\n class=\"shadow-4 element-image-width\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"/>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n <p>ToDo wapp view badge</p>\r\n <!-- <wapp-view-badge [label]=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\"\r\n [color]=\"'cyan'\">\r\n </wapp-view-badge> -->\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) | date }}\r\n </td>\r\n </ng-template>\r\n <td>\r\n <div class=\"flex justify-content-end align-items-end\">\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasViewButton\" \r\n pButton pRipple (click)=\"viewElement(element)\" \r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple (click)=\"customElement($event)\"\r\n [icon]=\"wappTableLazyLoadingObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableEditProperty)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasCopyButton\" \r\n pButton pRipple (click)=\"confirmCopy($event, element)\" \r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject.hasDeleteButton && !wappTableLazyLoadingObject.disableDeleteProperty\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject.disableDeleteProperty\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableDeleteProperty)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr height=\"70px\" *ngFor=\"let n of [0,1,2,3,4]\">\r\n <td *ngFor=\"let item of wappTableLazyLoadingObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item == tableColumnTypes.Image\" width=\"6rem\" height=\"4rem\"></p-skeleton>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox && item != tableColumnTypes.Image\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasEditButton\" \r\n pButton pRipple\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject?.hasDeleteButton\" \r\n pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:3.1428571429rem;line-height:3.4285714286rem;font-weight:700}.heading2{font-size:2.8571428571rem;line-height:3.1428571429rem;font-weight:700}.heading3{font-size:2.5714285714rem;line-height:2.8571428571rem;font-weight:700}.heading4{font-size:2.2857142857rem;line-height:2.5714285714rem;font-weight:700}.heading5{font-size:2rem;line-height:2.2857142857rem;font-weight:700}.heading6{font-size:1.7142857143rem;line-height:2rem;font-weight:700}.subtitle1{font-size:1.4285714286rem;line-height:1.7142857143rem;font-weight:700}.subtitle2{font-size:1.1428571429rem;line-height:1.4285714286rem;font-weight:700}.body,.input-generic-placeholder-small,.input-generic-small{font-size:1rem;line-height:1.1428571429rem;font-weight:600}.caption{font-size:.8571428571rem;line-height:1.1428571429rem;font-weight:600}.icon-small-size{font-size:8px}.icon-small-x-size{font-size:12px}.icon-medium-size{font-size:16px}.icon-large-size{font-size:24px}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:2px solid #0085c7}.button-large-typography{font-size:20px;line-height:24px;font-weight:700}.button-medium-typography{font-size:16px;line-height:16px;font-weight:700}.button-small-typography{font-size:12px;line-height:16px;font-weight:700}.button-text-typography,.input-generic-label{font-size:14px;line-height:16px;font-weight:700}.input-generic-placeholder,.input-generic{font-size:16px;line-height:24px;font-weight:600}.input-generic-placeholder-small{padding:8px 12px 12px}.input-generic-valid{border-radius:8px;border:2px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:2px solid #B3FFD3!important;box-shadow:0 0 2px 2px #b3ffd3!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:2px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:2px solid #FFECB8!important;box-shadow:0 0 2px 2px #ffecb8!important;padding-left:16px}.input-generic-error{border-radius:8px;border:2px solid #FFBDBD}.tag-generic{font-size:14px;line-height:16px;font-weight:700}.tag-generic-small{font-size:12px;line-height:16px;font-weight:700}.table-container{padding:0 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a}.showing-per-page{color:#bdc1c6;font-weight:600}::ng-deep .showing-per-page .p-button{border-radius:8px}::ng-deep .wapp-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#bdc1c6;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator{border-width:0px;padding:16px 20px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#e0f5fc;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-current{color:#bdc1c6;padding:0}::ng-deep .wapp-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#bdc1c6;margin-left:.5rem}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#000}::ng-deep .wapp-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .wapp-table-styles .p-datatable .p-datatable-thead>tr>th{color:#bdc1c6;background:#ffffff}::ng-deep .wapp-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .wapp-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .wapp-table-styles .p-datatable .p-paginator-bottom>button{color:#bdc1c6}::ng-deep .wapp-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:16px 0!important;font-weight:600}::ng-deep .wapp-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:2px 0px 2px 0px;border-color:#e8eaed;color:#dadce0;text-align:center}::ng-deep .wapp-table-styles .p-button.p-button-outlined{color:#e8eaed;border-width:2px}::ng-deep .wapp-table-styles .p-datatable .p-datatable-tbody>tr>td{columns:#2E3134;font-weight:600;text-align:left;border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:8px}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box{border:2px solid #e8eaed;width:16px;height:16px;color:#e8eaed;border-radius:4px;align-self:center}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:bolder}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#0085c7!important;background:#0085c7;color:#0085c7!important}::ng-deep .wapp-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .wapp-table-styles .p-inputtext:enabled:hover{border-color:#e8eaed}::ng-deep .wapp-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8eaed;border:2px solid;background-color:#f1f3f4}::ng-deep .wapp-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#2e3134}::ng-deep .wapp-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .wapp-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#000;background:#ffffff}.height-input{height:32px}.wapp-input{border-radius:8px;border-width:2px;border-color:#e8eaed;font-size:16px;line-height:5px;font-weight:100;gap:16px}::-webkit-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}::-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}:-ms-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}:-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}.wapp-input:hover{border:2px solid #0085c7!important}.wapp-input:focus{box-shadow:0 0 3px 3px #e0f5fc!important;background-color:transparent!important}.pi-search{left:.75rem;color:#bdc1c6!important}::ng-deep .wapp-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .wapp-table-styles .p-avatar{border:1px solid #e8eaed}\n"], dependencies: [{ kind: "directive", type: i2.InputText, selector: "[pInputText]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6.Ripple, selector: "[pRipple]" }, { kind: "component", type: i7.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i8.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove"] }, { kind: "component", type: i9.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i10.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i10.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i10.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i10.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i10.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i10.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons"] }, { kind: "component", type: i11.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
|
|
183
|
+
WTableLazyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WTableLazyComponent, selector: "w-table-lazy", inputs: { loading: "loading", elements: "elements", rowsPerPage: "rowsPerPage", allElements: "allElements", totalRecords: "totalRecords", maxRowsPerPage: "maxRowsPerPage", wappTableLazyLoadingObject: "wappTableLazyLoadingObject" }, outputs: { queryElements: "queryElements", onElementSelect: "onElementSelect", onViewElementSelect: "onViewElementSelect", onCustomElementSelect: "onCustomElementSelect", onCopyElementSelect: "onCopyElementSelect", onEditElementSelect: "onEditElementSelect", onDeleteElementSelect: "onDeleteElementSelect", onAllElementSelect: "onAllElementSelect" }, viewQueries: [{ propertyName: "dataTable", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableLazyLoadingObject\" [class.table-container]=\"wappTableLazyLoadingObject.tableContainer\">\r\n <p-table class=\"wapp-table-styles\"\r\n #table [value]=\"elements\" [lazy]=\"true\" (onLazyLoad)=\"loadElements($event)\" dataKey=\"{{wappTableLazyLoadingObject.identificator}}\"\r\n [tableStyle]=\"{'min-width': '70rem'}\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [paginator]=\"true\"\r\n [rows]=\"rowsPerPage\" \r\n [currentPageReportTemplate]=\"wappTableLazyLoadingObject.currentPageReportTemplate ? wappTableLazyLoadingObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [loading]=\"loading\"\r\n [showLoader]=\"false\"\r\n [globalFilterFields]=\"wappTableLazyLoadingObject.globalFilterFields!\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject.hasClearButton || wappTableLazyLoadingObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <!-- <button *ngIf=\"wappTableLazyLoadingObject.hasClearButton\" pButton [label]=\"wappTableLazyLoadingObject.clearPlaceholder!\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\" (click)=\"clear(table)\"></button> -->\r\n <span class=\"showing-per-page\"> {{wappTableLazyLoadingObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber \r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"maxRowsPerPage\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\"\r\n (ngModelChange)=\"reloadElements()\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input class=\"height-input wapp-input\" pInputText type=\"text\" (input)=\"table.filterGlobal($event, 'contains')\" placeholder=\"{{wappTableLazyLoadingObject.searchPlaceholder}}\" />\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableLazyLoadingObject.hasColumnFilters && wappTableLazyLoadingObject.hasCheckbox; else noCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-template #noCheckbox><th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\"></th></ng-template>\r\n <ng-container *ngIf=\"!wappTableLazyLoadingObject.hasSortableColumns; else something\">\r\n <th *ngFor=\"let header of wappTableLazyLoadingObject?.headers\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n <ng-template #something>\r\n <ng-template #something ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableLazyLoadingObject.sortableNames[i]\">\r\n {{wappTableLazyLoadingObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableLazyLoadingObject.sortableNames[i] != null\" [field]=\"wappTableLazyLoadingObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton\"></th>\r\n </tr>\r\n <tr *ngIf=\"wappTableLazyLoadingObject.hasColumnFilters\">\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasImage\"></th>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.columnFilterTypes\" let-i=\"index\">\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Text\">\r\n <p-columnFilter type=\"text\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Multiselect\">\r\n <p-columnFilter [field]=\"wappTableLazyLoadingObject.filterNames[i]\" matchMode=\"in\" [showMenu]=\"false\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" appendTo=\"body\" [options]=\"wappTableLazyLoadingObject.selectFilterElements[i]\" placeholder=\"Any\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" [maxSelectedLabels]=\"1\" [selectedItemsLabel]=\"'{0} items'\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-1\">{{option.name}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.None\"></th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Boolean\">\r\n <p-columnFilter type=\"boolean\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Date\">\r\n <p-columnFilter type=\"date\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element let-index=\"index\">\r\n <tr *ngIf=\"!loading\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableLazyLoadingObject.columnTypes\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n <div *ngIf=\"wappTableLazyLoadingObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" class=\"text-center\">\r\n <img *ngIf=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\" \r\n [src]=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\" \r\n class=\"shadow-4 element-image-width\" />\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n <p>ToDo wapp view badge</p>\r\n <!-- <wapp-view-badge [label]=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\"\r\n [color]=\"'cyan'\">\r\n </wapp-view-badge> -->\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) | date }}\r\n </td>\r\n </ng-template>\r\n <td>\r\n <div class=\"flex justify-content-end align-items-end\">\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasViewButton\" \r\n pButton pRipple (click)=\"viewElement(element)\" \r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple (click)=\"customElement($event)\"\r\n [icon]=\"wappTableLazyLoadingObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableEditProperty)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasCopyButton\" \r\n pButton pRipple (click)=\"confirmCopy($event, element)\" \r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject.hasDeleteButton && !wappTableLazyLoadingObject.disableDeleteProperty\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject.disableDeleteProperty\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableDeleteProperty)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr height=\"70px\" *ngFor=\"let n of [0,1,2,3,4]\">\r\n <td *ngFor=\"let item of wappTableLazyLoadingObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item == tableColumnTypes.Image\" width=\"6rem\" height=\"4rem\"></p-skeleton>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox && item != tableColumnTypes.Image\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasEditButton\" \r\n pButton pRipple\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject?.hasDeleteButton\" \r\n pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:3.1428571429rem;line-height:3.4285714286rem;font-weight:700}.heading2{font-size:2.8571428571rem;line-height:3.1428571429rem;font-weight:700}.heading3{font-size:2.5714285714rem;line-height:2.8571428571rem;font-weight:700}.heading4{font-size:2.2857142857rem;line-height:2.5714285714rem;font-weight:700}.heading5{font-size:2rem;line-height:2.2857142857rem;font-weight:700}.heading6{font-size:1.7142857143rem;line-height:2rem;font-weight:700}.subtitle1{font-size:1.4285714286rem;line-height:1.7142857143rem;font-weight:700}.subtitle2{font-size:1.1428571429rem;line-height:1.4285714286rem;font-weight:700}.body,.input-generic-placeholder-small,.input-generic-small{font-size:1rem;line-height:1.1428571429rem;font-weight:600}.caption{font-size:.8571428571rem;line-height:1.1428571429rem;font-weight:600}.icon-small-size{font-size:8px}.icon-small-x-size{font-size:12px}.icon-medium-size{font-size:16px}.icon-large-size{font-size:24px}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:2px solid #0085c7}.button-large-typography{font-size:20px;line-height:24px;font-weight:700}.button-medium-typography{font-size:16px;line-height:16px;font-weight:700}.button-small-typography{font-size:12px;line-height:16px;font-weight:700}.button-text-typography,.input-generic-label{font-size:14px;line-height:16px;font-weight:700}.input-generic-placeholder,.input-generic{font-size:16px;line-height:24px;font-weight:600}.input-generic-placeholder-small{padding:8px 12px 12px}.input-generic-valid{border-radius:8px;border:2px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:2px solid #B3FFD3!important;box-shadow:0 0 2px 2px #b3ffd3!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:2px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:2px solid #FFECB8!important;box-shadow:0 0 2px 2px #ffecb8!important;padding-left:16px}.input-generic-error{border-radius:8px;border:2px solid #FFBDBD}.tag-generic{font-size:14px;line-height:16px;font-weight:700}.tag-generic-small{font-size:12px;line-height:16px;font-weight:700}.table-container{padding:0 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a}.showing-per-page{color:#bdc1c6;font-weight:600}::ng-deep .showing-per-page .p-button{border-radius:8px}::ng-deep .wapp-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#bdc1c6;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator{border-width:0px;padding:16px 20px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#e0f5fc;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-current{color:#bdc1c6;padding:0}::ng-deep .wapp-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#bdc1c6;margin-left:.5rem}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#000}::ng-deep .wapp-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .wapp-table-styles .p-datatable .p-datatable-thead>tr>th{color:#bdc1c6;background:#ffffff}::ng-deep .wapp-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .wapp-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .wapp-table-styles .p-datatable .p-paginator-bottom>button{color:#bdc1c6}::ng-deep .wapp-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:16px 0!important;font-weight:600}::ng-deep .wapp-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:2px 0px 2px 0px;border-color:#e8eaed;color:#dadce0;text-align:center}::ng-deep .wapp-table-styles .p-button.p-button-outlined{color:#e8eaed;border-width:2px}::ng-deep .wapp-table-styles .p-datatable .p-datatable-tbody>tr>td{columns:#2E3134;font-weight:600;text-align:left;border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:8px}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box{border:2px solid #e8eaed;width:16px;height:16px;color:#e8eaed;border-radius:4px;align-self:center}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:bolder}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#0085c7!important;background:#0085c7;color:#0085c7!important}::ng-deep .wapp-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .wapp-table-styles .p-inputtext:enabled:hover{border-color:#e8eaed}::ng-deep .wapp-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8eaed;border:2px solid;background-color:#f1f3f4}::ng-deep .wapp-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#2e3134}::ng-deep .wapp-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .wapp-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#000;background:#ffffff}.element-image-width{height:32px;width:auto}.height-input{height:32px}.wapp-input{border-radius:8px;border-width:2px;border-color:#e8eaed;font-size:16px;line-height:5px;font-weight:100;gap:16px}::-webkit-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}::-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}:-ms-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}:-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}.wapp-input:hover{border:2px solid #0085c7!important}.wapp-input:focus{box-shadow:0 0 3px 3px #e0f5fc!important;background-color:transparent!important}.pi-search{left:.75rem;color:#bdc1c6!important}::ng-deep .wapp-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .wapp-table-styles .p-avatar{border:1px solid #e8eaed}\n"], dependencies: [{ kind: "directive", type: i2.InputText, selector: "[pInputText]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6.Ripple, selector: "[pRipple]" }, { kind: "component", type: i7.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i8.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove"] }, { kind: "component", type: i9.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i10.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i10.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i10.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i10.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i10.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i10.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons"] }, { kind: "component", type: i11.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
|
|
184
184
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WTableLazyComponent, decorators: [{
|
|
185
185
|
type: Component,
|
|
186
|
-
args: [{ selector: 'w-table-lazy', template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableLazyLoadingObject\" [class.table-container]=\"wappTableLazyLoadingObject.tableContainer\">\r\n <p-table class=\"wapp-table-styles\"\r\n #table [value]=\"elements\" [lazy]=\"true\" (onLazyLoad)=\"loadElements($event)\" dataKey=\"{{wappTableLazyLoadingObject.identificator}}\"\r\n [tableStyle]=\"{'min-width': '70rem'}\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [paginator]=\"true\"\r\n [rows]=\"rowsPerPage\" \r\n [currentPageReportTemplate]=\"wappTableLazyLoadingObject.currentPageReportTemplate ? wappTableLazyLoadingObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [loading]=\"loading\"\r\n [showLoader]=\"false\"\r\n [globalFilterFields]=\"wappTableLazyLoadingObject.globalFilterFields!\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject.hasClearButton || wappTableLazyLoadingObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <!-- <button *ngIf=\"wappTableLazyLoadingObject.hasClearButton\" pButton [label]=\"wappTableLazyLoadingObject.clearPlaceholder!\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\" (click)=\"clear(table)\"></button> -->\r\n <span class=\"showing-per-page\"> {{wappTableLazyLoadingObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber \r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"maxRowsPerPage\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\"\r\n (ngModelChange)=\"reloadElements()\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input class=\"height-input wapp-input\" pInputText type=\"text\" (input)=\"table.filterGlobal($event, 'contains')\" placeholder=\"{{wappTableLazyLoadingObject.searchPlaceholder}}\" />\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableLazyLoadingObject.hasColumnFilters && wappTableLazyLoadingObject.hasCheckbox; else noCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-template #noCheckbox><th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\"></th></ng-template>\r\n <ng-container *ngIf=\"!wappTableLazyLoadingObject.hasSortableColumns; else something\">\r\n <th *ngFor=\"let header of wappTableLazyLoadingObject?.headers\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n <ng-template #something>\r\n <ng-template #something ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableLazyLoadingObject.sortableNames[i]\">\r\n {{wappTableLazyLoadingObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableLazyLoadingObject.sortableNames[i] != null\" [field]=\"wappTableLazyLoadingObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton\"></th>\r\n </tr>\r\n <tr *ngIf=\"wappTableLazyLoadingObject.hasColumnFilters\">\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasImage\"></th>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.columnFilterTypes\" let-i=\"index\">\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Text\">\r\n <p-columnFilter type=\"text\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Multiselect\">\r\n <p-columnFilter [field]=\"wappTableLazyLoadingObject.filterNames[i]\" matchMode=\"in\" [showMenu]=\"false\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" appendTo=\"body\" [options]=\"wappTableLazyLoadingObject.selectFilterElements[i]\" placeholder=\"Any\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" [maxSelectedLabels]=\"1\" [selectedItemsLabel]=\"'{0} items'\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-1\">{{option.name}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.None\"></th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Boolean\">\r\n <p-columnFilter type=\"boolean\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Date\">\r\n <p-columnFilter type=\"date\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element let-index=\"index\">\r\n <tr *ngIf=\"!loading\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableLazyLoadingObject.columnTypes\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n <div *ngIf=\"wappTableLazyLoadingObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" class=\"text-center\">\r\n <img *ngIf=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\" \r\n [src]=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\" \r\n class=\"shadow-4 element-image-width\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"/>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n <p>ToDo wapp view badge</p>\r\n <!-- <wapp-view-badge [label]=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\"\r\n [color]=\"'cyan'\">\r\n </wapp-view-badge> -->\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) | date }}\r\n </td>\r\n </ng-template>\r\n <td>\r\n <div class=\"flex justify-content-end align-items-end\">\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasViewButton\" \r\n pButton pRipple (click)=\"viewElement(element)\" \r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple (click)=\"customElement($event)\"\r\n [icon]=\"wappTableLazyLoadingObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableEditProperty)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasCopyButton\" \r\n pButton pRipple (click)=\"confirmCopy($event, element)\" \r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject.hasDeleteButton && !wappTableLazyLoadingObject.disableDeleteProperty\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject.disableDeleteProperty\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableDeleteProperty)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr height=\"70px\" *ngFor=\"let n of [0,1,2,3,4]\">\r\n <td *ngFor=\"let item of wappTableLazyLoadingObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item == tableColumnTypes.Image\" width=\"6rem\" height=\"4rem\"></p-skeleton>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox && item != tableColumnTypes.Image\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasEditButton\" \r\n pButton pRipple\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject?.hasDeleteButton\" \r\n pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:3.1428571429rem;line-height:3.4285714286rem;font-weight:700}.heading2{font-size:2.8571428571rem;line-height:3.1428571429rem;font-weight:700}.heading3{font-size:2.5714285714rem;line-height:2.8571428571rem;font-weight:700}.heading4{font-size:2.2857142857rem;line-height:2.5714285714rem;font-weight:700}.heading5{font-size:2rem;line-height:2.2857142857rem;font-weight:700}.heading6{font-size:1.7142857143rem;line-height:2rem;font-weight:700}.subtitle1{font-size:1.4285714286rem;line-height:1.7142857143rem;font-weight:700}.subtitle2{font-size:1.1428571429rem;line-height:1.4285714286rem;font-weight:700}.body,.input-generic-placeholder-small,.input-generic-small{font-size:1rem;line-height:1.1428571429rem;font-weight:600}.caption{font-size:.8571428571rem;line-height:1.1428571429rem;font-weight:600}.icon-small-size{font-size:8px}.icon-small-x-size{font-size:12px}.icon-medium-size{font-size:16px}.icon-large-size{font-size:24px}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:2px solid #0085c7}.button-large-typography{font-size:20px;line-height:24px;font-weight:700}.button-medium-typography{font-size:16px;line-height:16px;font-weight:700}.button-small-typography{font-size:12px;line-height:16px;font-weight:700}.button-text-typography,.input-generic-label{font-size:14px;line-height:16px;font-weight:700}.input-generic-placeholder,.input-generic{font-size:16px;line-height:24px;font-weight:600}.input-generic-placeholder-small{padding:8px 12px 12px}.input-generic-valid{border-radius:8px;border:2px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:2px solid #B3FFD3!important;box-shadow:0 0 2px 2px #b3ffd3!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:2px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:2px solid #FFECB8!important;box-shadow:0 0 2px 2px #ffecb8!important;padding-left:16px}.input-generic-error{border-radius:8px;border:2px solid #FFBDBD}.tag-generic{font-size:14px;line-height:16px;font-weight:700}.tag-generic-small{font-size:12px;line-height:16px;font-weight:700}.table-container{padding:0 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a}.showing-per-page{color:#bdc1c6;font-weight:600}::ng-deep .showing-per-page .p-button{border-radius:8px}::ng-deep .wapp-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#bdc1c6;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator{border-width:0px;padding:16px 20px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#e0f5fc;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-current{color:#bdc1c6;padding:0}::ng-deep .wapp-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#bdc1c6;margin-left:.5rem}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#000}::ng-deep .wapp-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .wapp-table-styles .p-datatable .p-datatable-thead>tr>th{color:#bdc1c6;background:#ffffff}::ng-deep .wapp-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .wapp-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .wapp-table-styles .p-datatable .p-paginator-bottom>button{color:#bdc1c6}::ng-deep .wapp-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:16px 0!important;font-weight:600}::ng-deep .wapp-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:2px 0px 2px 0px;border-color:#e8eaed;color:#dadce0;text-align:center}::ng-deep .wapp-table-styles .p-button.p-button-outlined{color:#e8eaed;border-width:2px}::ng-deep .wapp-table-styles .p-datatable .p-datatable-tbody>tr>td{columns:#2E3134;font-weight:600;text-align:left;border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:8px}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box{border:2px solid #e8eaed;width:16px;height:16px;color:#e8eaed;border-radius:4px;align-self:center}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:bolder}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#0085c7!important;background:#0085c7;color:#0085c7!important}::ng-deep .wapp-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .wapp-table-styles .p-inputtext:enabled:hover{border-color:#e8eaed}::ng-deep .wapp-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8eaed;border:2px solid;background-color:#f1f3f4}::ng-deep .wapp-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#2e3134}::ng-deep .wapp-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .wapp-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#000;background:#ffffff}.height-input{height:32px}.wapp-input{border-radius:8px;border-width:2px;border-color:#e8eaed;font-size:16px;line-height:5px;font-weight:100;gap:16px}::-webkit-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}::-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}:-ms-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}:-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}.wapp-input:hover{border:2px solid #0085c7!important}.wapp-input:focus{box-shadow:0 0 3px 3px #e0f5fc!important;background-color:transparent!important}.pi-search{left:.75rem;color:#bdc1c6!important}::ng-deep .wapp-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .wapp-table-styles .p-avatar{border:1px solid #e8eaed}\n"] }]
|
|
186
|
+
args: [{ selector: 'w-table-lazy', template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableLazyLoadingObject\" [class.table-container]=\"wappTableLazyLoadingObject.tableContainer\">\r\n <p-table class=\"wapp-table-styles\"\r\n #table [value]=\"elements\" [lazy]=\"true\" (onLazyLoad)=\"loadElements($event)\" dataKey=\"{{wappTableLazyLoadingObject.identificator}}\"\r\n [tableStyle]=\"{'min-width': '70rem'}\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [paginator]=\"true\"\r\n [rows]=\"rowsPerPage\" \r\n [currentPageReportTemplate]=\"wappTableLazyLoadingObject.currentPageReportTemplate ? wappTableLazyLoadingObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [loading]=\"loading\"\r\n [showLoader]=\"false\"\r\n [globalFilterFields]=\"wappTableLazyLoadingObject.globalFilterFields!\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject.hasClearButton || wappTableLazyLoadingObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <!-- <button *ngIf=\"wappTableLazyLoadingObject.hasClearButton\" pButton [label]=\"wappTableLazyLoadingObject.clearPlaceholder!\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\" (click)=\"clear(table)\"></button> -->\r\n <span class=\"showing-per-page\"> {{wappTableLazyLoadingObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber \r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"maxRowsPerPage\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\"\r\n (ngModelChange)=\"reloadElements()\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input class=\"height-input wapp-input\" pInputText type=\"text\" (input)=\"table.filterGlobal($event, 'contains')\" placeholder=\"{{wappTableLazyLoadingObject.searchPlaceholder}}\" />\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableLazyLoadingObject.hasColumnFilters && wappTableLazyLoadingObject.hasCheckbox; else noCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-template #noCheckbox><th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\"></th></ng-template>\r\n <ng-container *ngIf=\"!wappTableLazyLoadingObject.hasSortableColumns; else something\">\r\n <th *ngFor=\"let header of wappTableLazyLoadingObject?.headers\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n <ng-template #something>\r\n <ng-template #something ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableLazyLoadingObject.sortableNames[i]\">\r\n {{wappTableLazyLoadingObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableLazyLoadingObject.sortableNames[i] != null\" [field]=\"wappTableLazyLoadingObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton\"></th>\r\n </tr>\r\n <tr *ngIf=\"wappTableLazyLoadingObject.hasColumnFilters\">\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasImage\"></th>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.columnFilterTypes\" let-i=\"index\">\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Text\">\r\n <p-columnFilter type=\"text\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Multiselect\">\r\n <p-columnFilter [field]=\"wappTableLazyLoadingObject.filterNames[i]\" matchMode=\"in\" [showMenu]=\"false\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" appendTo=\"body\" [options]=\"wappTableLazyLoadingObject.selectFilterElements[i]\" placeholder=\"Any\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" [maxSelectedLabels]=\"1\" [selectedItemsLabel]=\"'{0} items'\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-1\">{{option.name}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.None\"></th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Boolean\">\r\n <p-columnFilter type=\"boolean\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Date\">\r\n <p-columnFilter type=\"date\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element let-index=\"index\">\r\n <tr *ngIf=\"!loading\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableLazyLoadingObject.columnTypes\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n <div *ngIf=\"wappTableLazyLoadingObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" class=\"text-center\">\r\n <img *ngIf=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\" \r\n [src]=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\" \r\n class=\"shadow-4 element-image-width\" />\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\">\r\n <p>ToDo wapp view badge</p>\r\n <!-- <wapp-view-badge [label]=\"readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i])\"\r\n [color]=\"'cyan'\">\r\n </wapp-view-badge> -->\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.elementObjectRoutes[i]) | date }}\r\n </td>\r\n </ng-template>\r\n <td>\r\n <div class=\"flex justify-content-end align-items-end\">\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasViewButton\" \r\n pButton pRipple (click)=\"viewElement(element)\" \r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple (click)=\"customElement($event)\"\r\n [icon]=\"wappTableLazyLoadingObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableEditProperty)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasCopyButton\" \r\n pButton pRipple (click)=\"confirmCopy($event, element)\" \r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject.hasDeleteButton && !wappTableLazyLoadingObject.disableDeleteProperty\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject.disableDeleteProperty\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableDeleteProperty)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr height=\"70px\" *ngFor=\"let n of [0,1,2,3,4]\">\r\n <td *ngFor=\"let item of wappTableLazyLoadingObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item == tableColumnTypes.Image\" width=\"6rem\" height=\"4rem\"></p-skeleton>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox && item != tableColumnTypes.Image\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableLazyLoadingObject?.hasEditButton\" \r\n pButton pRipple\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"!wappTableLazyLoadingObject?.disableDelete && wappTableLazyLoadingObject?.hasDeleteButton\" \r\n pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:3.1428571429rem;line-height:3.4285714286rem;font-weight:700}.heading2{font-size:2.8571428571rem;line-height:3.1428571429rem;font-weight:700}.heading3{font-size:2.5714285714rem;line-height:2.8571428571rem;font-weight:700}.heading4{font-size:2.2857142857rem;line-height:2.5714285714rem;font-weight:700}.heading5{font-size:2rem;line-height:2.2857142857rem;font-weight:700}.heading6{font-size:1.7142857143rem;line-height:2rem;font-weight:700}.subtitle1{font-size:1.4285714286rem;line-height:1.7142857143rem;font-weight:700}.subtitle2{font-size:1.1428571429rem;line-height:1.4285714286rem;font-weight:700}.body,.input-generic-placeholder-small,.input-generic-small{font-size:1rem;line-height:1.1428571429rem;font-weight:600}.caption{font-size:.8571428571rem;line-height:1.1428571429rem;font-weight:600}.icon-small-size{font-size:8px}.icon-small-x-size{font-size:12px}.icon-medium-size{font-size:16px}.icon-large-size{font-size:24px}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:2px solid #0085c7}.button-large-typography{font-size:20px;line-height:24px;font-weight:700}.button-medium-typography{font-size:16px;line-height:16px;font-weight:700}.button-small-typography{font-size:12px;line-height:16px;font-weight:700}.button-text-typography,.input-generic-label{font-size:14px;line-height:16px;font-weight:700}.input-generic-placeholder,.input-generic{font-size:16px;line-height:24px;font-weight:600}.input-generic-placeholder-small{padding:8px 12px 12px}.input-generic-valid{border-radius:8px;border:2px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:2px solid #B3FFD3!important;box-shadow:0 0 2px 2px #b3ffd3!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:2px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:2px solid #FFECB8!important;box-shadow:0 0 2px 2px #ffecb8!important;padding-left:16px}.input-generic-error{border-radius:8px;border:2px solid #FFBDBD}.tag-generic{font-size:14px;line-height:16px;font-weight:700}.tag-generic-small{font-size:12px;line-height:16px;font-weight:700}.table-container{padding:0 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a}.showing-per-page{color:#bdc1c6;font-weight:600}::ng-deep .showing-per-page .p-button{border-radius:8px}::ng-deep .wapp-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#bdc1c6;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator{border-width:0px;padding:16px 20px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#e0f5fc;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .wapp-table-styles .p-paginator .p-paginator-current{color:#bdc1c6;padding:0}::ng-deep .wapp-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#bdc1c6;margin-left:.5rem}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#000}::ng-deep .wapp-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .wapp-table-styles .p-datatable .p-datatable-thead>tr>th{color:#bdc1c6;background:#ffffff}::ng-deep .wapp-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .wapp-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .wapp-table-styles .p-datatable .p-paginator-bottom>button{color:#bdc1c6}::ng-deep .wapp-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:16px 0!important;font-weight:600}::ng-deep .wapp-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:2px 0px 2px 0px;border-color:#e8eaed;color:#dadce0;text-align:center}::ng-deep .wapp-table-styles .p-button.p-button-outlined{color:#e8eaed;border-width:2px}::ng-deep .wapp-table-styles .p-datatable .p-datatable-tbody>tr>td{columns:#2E3134;font-weight:600;text-align:left;border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:8px}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box{border:2px solid #e8eaed;width:16px;height:16px;color:#e8eaed;border-radius:4px;align-self:center}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:bolder}::ng-deep .wapp-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#0085c7!important;background:#0085c7;color:#0085c7!important}::ng-deep .wapp-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .wapp-table-styles .p-inputtext:enabled:hover{border-color:#e8eaed}::ng-deep .wapp-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8eaed;border:2px solid;background-color:#f1f3f4}::ng-deep .wapp-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#2e3134}::ng-deep .wapp-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .wapp-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#000;background:#ffffff}.element-image-width{height:32px;width:auto}.height-input{height:32px}.wapp-input{border-radius:8px;border-width:2px;border-color:#e8eaed;font-size:16px;line-height:5px;font-weight:100;gap:16px}::-webkit-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}::-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}:-ms-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}:-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#bdc1c6}.wapp-input:hover{border:2px solid #0085c7!important}.wapp-input:focus{box-shadow:0 0 3px 3px #e0f5fc!important;background-color:transparent!important}.pi-search{left:.75rem;color:#bdc1c6!important}::ng-deep .wapp-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .wapp-table-styles .p-avatar{border:1px solid #e8eaed}\n"] }]
|
|
187
187
|
}], ctorParameters: function () { return [{ type: i1.ConfirmationService }]; }, propDecorators: { loading: [{
|
|
188
188
|
type: Input,
|
|
189
189
|
args: ['loading']
|
|
@@ -233,4 +233,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
233
233
|
type: ViewChild,
|
|
234
234
|
args: ['table']
|
|
235
235
|
}] } });
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy10YWJsZS1sYXp5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlcy93LXRhYmxlLWxhenkvdy10YWJsZS1sYXp5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlcy93LXRhYmxlLWxhenkvdy10YWJsZS1sYXp5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBTzNGLE1BQU0sT0FBTyxtQkFBbUI7SUE0QjlCLFlBQ1UsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUE1QmxELHFCQUFnQixHQUFVLEVBQUUsQ0FBQztRQUk3QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUlWLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBR3RCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBRzVCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFFMUQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3RDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDNUMsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNsRCx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzlDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDNUMsMEJBQXFCLEdB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L0MsTUFBTTt1QkFBQyxvQkFBb0I7Z0JBRVIsU0FBUztzQkFBNUIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIExhenlMb2FkRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IExhenlFbGVtZW50UXVlcnlSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9sYXp5LWVsZW1lbnQtcXVlcnktcmVxdWVzdC5tb2RlbCc7XHJcbmltcG9ydCB7IFdhcHBUYWJsZUxhenlMb2FkaW5nIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy93YXBwLXRhYmxlLWxhenktbG9hZGluZy5tb2RlbCc7XHJcbmltcG9ydCB7IFRhYmxlQ29sdW1uRmlsdGVyVHlwZXMsIFRhYmxlQ29sdW1uVHlwZXMgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2VudW1zLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndy10YWJsZS1sYXp5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdy10YWJsZS1sYXp5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93LXRhYmxlLWxhenkuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgV1RhYmxlTGF6eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgc2VsZWN0ZWRFbGVtZW50czogYW55W10gPSBbXTtcclxuICB0cmFuc2xhdGlvbnM6IGFueTtcclxuICBsYXN0UXVlcnkhOiBMYXp5RWxlbWVudFF1ZXJ5UmVxdWVzdDtcclxuXHJcbiAgc2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyRWxlbWVudHNJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgQElucHV0KCdsb2FkaW5nJykgbG9hZGluZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCdlbGVtZW50cycpIGVsZW1lbnRzITogYW55W107XHJcbiAgQElucHV0KCdyb3dzUGVyUGFnZScpIHJvd3NQZXJQYWdlOiBudW1iZXIgPSAxMDtcclxuICBASW5wdXQoJ2FsbEVsZW1lbnRzJykgYWxsRWxlbWVudHMhOiBhbnlbXTtcclxuICBASW5wdXQoJ3RvdGFsUmVjb3JkcycpIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcclxuICBASW5wdXQoJ21heFJvd3NQZXJQYWdlJykgbWF4Um93c1BlclBhZ2U6IG51bWJlciA9IDUwO1xyXG4gIEBJbnB1dCgnd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QnKSB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdCE6IFdhcHBUYWJsZUxhenlMb2FkaW5nO1xyXG5cclxuICBAT3V0cHV0KCdxdWVyeUVsZW1lbnRzJykgcXVlcnlFbGVtZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8TGF6eUVsZW1lbnRRdWVyeVJlcXVlc3Q+KCk7XHJcblxyXG4gIEBPdXRwdXQoJ29uRWxlbWVudFNlbGVjdCcpIG9uRWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uVmlld0VsZW1lbnRTZWxlY3QnKSBvblZpZXdFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25DdXN0b21FbGVtZW50U2VsZWN0Jykgb25DdXN0b21FbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25Db3B5RWxlbWVudFNlbGVjdCcpIG9uQ29weUVsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCdvbkVkaXRFbGVtZW50U2VsZWN0Jykgb25FZGl0RWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uRGVsZXRlRWxlbWVudFNlbGVjdCcpIG9uRGVsZXRlRWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcbiAgQE91dHB1dCgnb25BbGxFbGVtZW50U2VsZWN0Jykgb25BbGxFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCd0YWJsZScpIGRhdGFUYWJsZSE6IFRhYmxlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGxvYWRFbGVtZW50cyhldmVudDogTGF6eUxvYWRFdmVudCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgYWRhcHRlZFF1ZXJ5OiBMYXp5RWxlbWVudFF1ZXJ5UmVxdWVzdCA9IHtcclxuICAgICAgICBmaXJzdDogZXZlbnQuZmlyc3QhLFxyXG4gICAgICAgIHJvd3M6IHRoaXMucm93c1BlclBhZ2UhLFxyXG4gICAgICAgIHNvcnRPcmRlcjogZXZlbnQuc29ydE9yZGVyISxcclxuICAgICAgICBzb3J0RmllbGQ6IGV2ZW50LnNvcnRGaWVsZCEsXHJcbiAgICAgICAgZmlsdGVyczogT2JqZWN0LmtleXMoZXZlbnQuZmlsdGVycyEpLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb2x1bW5OYW1lOiBrZXkhLFxyXG4gICAgICAgICAgICB2YWx1ZTogZXZlbnQuZmlsdGVycyFba2V5XS52YWx1ZSxcclxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBldmVudC5maWx0ZXJzIVtrZXldLm1hdGNoTW9kZSFcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFzdFF1ZXJ5ID0gYWRhcHRlZFF1ZXJ5O1xyXG4gICAgICB0aGlzLnF1ZXJ5RWxlbWVudHMuZW1pdChhZGFwdGVkUXVlcnkpO1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkRWxlbWVudHMoKSB7XHJcbiAgICB0aGlzLmxhc3RRdWVyeS5yb3dzID0gdGhpcy5yb3dzUGVyUGFnZTtcclxuICAgIHRoaXMucXVlcnlFbGVtZW50cy5lbWl0KHRoaXMubGFzdFF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIHJlYWRQcm9wZXJ0eShvYmo6IGFueSwgcHJvcDogc3RyaW5nKTogYW55IHtcclxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHByb3Auc3BsaXQoJy4nKTtcclxuICAgIGxldCByZXN1bHQgPSBvYmo7XHJcblxyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gcHJvcGVydHkubWF0Y2goLyguKz8pXFxbKFxcZCspXFxdLyk7XHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IGFycmF5UHJvcCA9IG1hdGNoWzFdO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0W2FycmF5UHJvcF0pIHx8IGlzTmFOKGluZGV4KSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gcmVzdWx0W2FycmF5UHJvcF0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQgPSByZXN1bHRbYXJyYXlQcm9wXVtpbmRleF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRbcHJvcGVydHldID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0W3Byb3BlcnR5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBvbkVsZW1lbnQoZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uRWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgdmlld0VsZW1lbnQoZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uVmlld0VsZW1lbnRTZWxlY3QuZW1pdChlbGVtZW50KTtcclxuICB9XHJcbiAgY3VzdG9tRWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25DdXN0b21FbGVtZW50U2VsZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBlZGl0RWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25FZGl0RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybURlbGV0ZVNlbGVjdGlvbihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1NdWx0aXBsZURlbGV0ZUxhYmVsLFxyXG4gICAgICBpY29uOiBcInBpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCIsXHJcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1EZWxldGVCdG5MYWJlbCxcclxuICAgICAgYWNjZXB0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVTZWxlY3RlZEVsZW1lbnRzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlU2VsZWN0ZWRFbGVtZW50cygpIHtcclxuICAgIHRoaXMub25EZWxldGVFbGVtZW50U2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZEVsZW1lbnRzKVxyXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gW107XHJcbiAgfVxyXG5cclxuICBjb25maXJtRGVsZXRlKGV2ZW50OiBFdmVudCwgZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1TaW5nbGVEZWxldGVMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb25maXJtRGVsZXRlQnRuTGFiZWwsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlU2luZ2xlRWxlbWVudChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVTaW5nbGVFbGVtZW50KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vbkRlbGV0ZUVsZW1lbnRTZWxlY3QuZW1pdChbZWxlbWVudF0pXHJcbiAgfVxyXG5cclxuICBjb3B5RWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25Db3B5RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybUNvcHkoZXZlbnQ6IEV2ZW50LCBlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRXZlbnRUYXJnZXQsXHJcbiAgICAgIG1lc3NhZ2U6IHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29uZmlybUNvcHlMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb25maXJtQ29weUJ0bkxhYmVsLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNvcHlFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHZhbHVlID0gW10pIHtcclxuICAgIHRoaXMuc2VsZWN0QWxsID0gdmFsdWUubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3JkcztcclxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RBbGxDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcblxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5vbkFsbEVsZW1lbnRTZWxlY3QuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlQ2hlY2tib3ggPyB0aGlzLmdldFNlbGVjdGFibGVFbGVtZW50cyh0aGlzLmFsbEVsZW1lbnRzKSA6IHRoaXMuYWxsRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGFibGVFbGVtZW50cyhhbGxFbGVtZW50czogYW55W10pIHtcclxuICAgIHJldHVybiBhbGxFbGVtZW50cy5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gIXRoaXMucmVhZFByb3BlcnR5KGVsZW1lbnQsIHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZGlzYWJsZUNoZWNrYm94ISkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Qm9vbGVhbkNvbHVtbkNsYXNzKGluZGV4OiBudW1iZXIsIHZhbHVlUHJvcGVydHk6IGJvb2xlYW4pIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFtgJHt0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLnRydWVJY29uQ29sb3J9ICR7dGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS50cnVlSWNvbn1gXTogdmFsdWVQcm9wZXJ0eSxcclxuICAgICAgW2Ake3RoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQm9vbGVhblR5cGVJY29uc1tpbmRleF0uZmFsc2VJY29uQ29sb3J9ICR7dGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS5mYWxzZUljb259YF06ICF2YWx1ZVByb3BlcnR5XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhcih0YWJsZTogVGFibGUpIHtcclxuICAgIHRhYmxlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRhYmxlQ29sdW1uRmlsdGVyVHlwZXMoKTogdHlwZW9mIFRhYmxlQ29sdW1uRmlsdGVyVHlwZXMge1xyXG4gICAgcmV0dXJuIFRhYmxlQ29sdW1uRmlsdGVyVHlwZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRhYmxlQ29sdW1uVHlwZXMoKTogdHlwZW9mIFRhYmxlQ29sdW1uVHlwZXMge1xyXG4gICAgcmV0dXJuIFRhYmxlQ29sdW1uVHlwZXM7XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCIuZmlsdGVyLXBhbmVsXCI+PC9uZy1jb250ZW50PlxyXG48ZGl2ICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3RcIiBbY2xhc3MudGFibGUtY29udGFpbmVyXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnRhYmxlQ29udGFpbmVyXCI+XHJcbiAgICA8cC10YWJsZSBjbGFzcz1cIndhcHAtdGFibGUtc3R5bGVzXCJcclxuICAgICAgICAgICAgI3RhYmxlIFt2YWx1ZV09XCJlbGVtZW50c1wiIFtsYXp5XT1cInRydWVcIiAob25MYXp5TG9hZCk9XCJsb2FkRWxlbWVudHMoJGV2ZW50KVwiIGRhdGFLZXk9XCJ7e3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmlkZW50aWZpY2F0b3J9fVwiXHJcbiAgICAgICAgICAgIFt0YWJsZVN0eWxlXT1cInsnbWluLXdpZHRoJzogJzcwcmVtJ31cIlxyXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGVkRWxlbWVudHNcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiIChzZWxlY3RBbGxDaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtyb3dzXT1cInJvd3NQZXJQYWdlXCIgXHJcbiAgICAgICAgICAgIFtjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGUgPyB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlICsgJyAnICsgIHJvd3NQZXJQYWdlICsgJyBkZSAnICsgdG90YWxSZWNvcmRzISA6ICdTaG93aW5nICcgKyByb3dzUGVyUGFnZSArICcgb2YgJyArIHRvdGFsUmVjb3JkcyFcIlxyXG4gICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZ2xvYmFsRmlsdGVyRmllbGRzIVwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xlYXJCdXR0b24gfHwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzR2xvYmFsU2VhcmNoXCIgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIHRhYmxlLXBhZ2luYXRvciBwLTBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsZWFyQnV0dG9uXCIgcEJ1dHRvbiBbbGFiZWxdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY2xlYXJQbGFjZWhvbGRlciFcIiBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgaWNvbj1cInBpIHBpLWZpbHRlci1zbGFzaFwiIChjbGljayk9XCJjbGVhcih0YWJsZSlcIj48L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3dpbmctcGVyLXBhZ2VcIj4ge3t3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwbC0yIHNob3dpbmctcGVyLXBhZ2VcIiBbc2l6ZV09XCIxXCIgWyhuZ01vZGVsKV09XCJyb3dzUGVyUGFnZVwiIFtzaG93QnV0dG9uc109XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uTGF5b3V0PVwiaG9yaXpvbnRhbFwiIGlucHV0SWQ9XCJob3Jpem9udGFsXCIgc3Bpbm5lck1vZGU9XCJob3Jpem9udGFsXCIgW3N0ZXBdPVwiMVwiIFttaW5dPVwiMVwiIFttYXhdPVwibWF4Um93c1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudEJ1dHRvbkNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRCdXR0b25DbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50QnV0dG9uSWNvbj1cInBpIHBpLXBsdXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBkZWNyZW1lbnRCdXR0b25JY29uPVwicGkgcGktbWludXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBtb2RlPVwiZGVjaW1hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicmVsb2FkRWxlbWVudHMoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzR2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdCBtbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaGVpZ2h0LWlucHV0IHdhcHAtaW5wdXRcIiBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cInRhYmxlLmZpbHRlckdsb2JhbCgkZXZlbnQsICdjb250YWlucycpXCIgcGxhY2Vob2xkZXI9XCJ7e3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnNlYXJjaFBsYWNlaG9sZGVyfX1cIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgPHRoICpuZ0lmPVwiIXdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NvbHVtbkZpbHRlcnMgJiYgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3g7IGVsc2Ugbm9DaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94PjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0NoZWNrYm94Pjx0aCAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94XCI+PC90aD48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzU29ydGFibGVDb2x1bW5zOyBlbHNlIHNvbWV0aGluZ1wiPlxyXG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGVhZGVyc1wiPlxyXG4gICAgICAgICAgICB7e2hlYWRlcn19XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNzb21ldGhpbmc+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc29tZXRoaW5nIG5nRm9yIGxldC1maWx0ZXJUeXBlIFtuZ0Zvck9mXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmhlYWRlcnNcIiBsZXQtaT1cImluZGV4XCI+IFxyXG4gICAgICAgICAgICA8dGggW3BTb3J0YWJsZUNvbHVtbl09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5zb3J0YWJsZU5hbWVzW2ldXCI+XHJcbiAgICAgICAgICAgICAgICB7e3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmhlYWRlcnNbaV19fSBcclxuICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Quc29ydGFibGVOYW1lc1tpXSAhPSBudWxsXCIgW2ZpZWxkXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnNvcnRhYmxlTmFtZXNbaV1cIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8dGggKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNEZWxldGVCdXR0b24gfHwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRWRpdEJ1dHRvblwiPjwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICA8dHIgKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDb2x1bW5GaWx0ZXJzXCI+XHJcbiAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0aCAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0ltYWdlXCI+PC90aD5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWZpbHRlclR5cGUgW25nRm9yT2ZdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uRmlsdGVyVHlwZXNcIiBsZXQtaT1cImluZGV4XCI+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpbHRlclR5cGUgPT0gdGFibGVDb2x1bW5GaWx0ZXJUeXBlcy5UZXh0XCI+XHJcbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciB0eXBlPVwidGV4dFwiIFtmaWVsZF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5maWx0ZXJOYW1lc1tpXVwiPjwvcC1jb2x1bW5GaWx0ZXI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpbHRlclR5cGUgPT0gdGFibGVDb2x1bW5GaWx0ZXJUeXBlcy5NdWx0aXNlbGVjdFwiPlxyXG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW2ZpZWxkXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmZpbHRlck5hbWVzW2ldXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW25nTW9kZWxdPVwidmFsdWVcIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5zZWxlY3RGaWx0ZXJFbGVtZW50c1tpXVwiIHBsYWNlaG9sZGVyPVwiQW55XCIgKG9uQ2hhbmdlKT1cImZpbHRlcigkZXZlbnQudmFsdWUpXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgW21heFNlbGVjdGVkTGFiZWxzXT1cIjFcIiBbc2VsZWN0ZWRJdGVtc0xhYmVsXT1cIid7MH0gaXRlbXMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLW11bHRpc2VsZWN0LXJlcHJlc2VudGF0aXZlLW9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMVwiPnt7b3B0aW9uLm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpbHRlclR5cGUgPT0gdGFibGVDb2x1bW5GaWx0ZXJUeXBlcy5Ob25lXCI+PC90aD5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwiZmlsdGVyVHlwZSA9PSB0YWJsZUNvbHVtbkZpbHRlclR5cGVzLkJvb2xlYW5cIj5cclxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIHR5cGU9XCJib29sZWFuXCIgW2ZpZWxkXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmZpbHRlck5hbWVzW2ldXCI+PC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwiZmlsdGVyVHlwZSA9PSB0YWJsZUNvbHVtbkZpbHRlclR5cGVzLkRhdGVcIj5cclxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIHR5cGU9XCJkYXRlXCIgW2ZpZWxkXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmZpbHRlck5hbWVzW2ldXCI+PC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDx0aCAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0RlbGV0ZUJ1dHRvbiB8fCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNFZGl0QnV0dG9uXCI+PC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWVsZW1lbnQgbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICAgICAgICA8dHIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtY29sdW1uVHlwZSBbbmdGb3JPZl09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5UeXBlc1wiIGxldC1pPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkNoZWNrYm94ICYmIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94XCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmRpc2FibGVDaGVja2JveDsgZWxzZSBhY3RpdmVDaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiZWxlbWVudFwiIFtkaXNhYmxlZF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZGlzYWJsZUNoZWNrYm94KVwiPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhY3RpdmVDaGVja2JveD5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cImVsZW1lbnRcIj48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkltYWdlXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmVsZW1lbnRPYmplY3RSb3V0ZXNbaV0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZWxlbWVudE9iamVjdFJvdXRlc1tpXSlcIiBcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNoYWRvdy00IGVsZW1lbnQtaW1hZ2Utd2lkdGhcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiLz5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLlRleHRcIiAgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIj5cclxuICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmVsZW1lbnRPYmplY3RSb3V0ZXNbaV0pIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5DdXJyZW5jeVwiIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uV2lkdGhzW2ldXCI+XHJcbiAgICAgICAgICAgIHt7IHJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5lbGVtZW50T2JqZWN0Um91dGVzW2ldKSB8IGN1cnJlbmN5IH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5CYWRnZVwiIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uV2lkdGhzW2ldXCI+XHJcbiAgICAgICAgICAgIDxwPlRvRG8gd2FwcCB2aWV3IGJhZGdlPC9wPlxyXG4gICAgICAgICAgICA8IS0tIDx3YXBwLXZpZXctYmFkZ2UgW2xhYmVsXT1cInJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5lbGVtZW50T2JqZWN0Um91dGVzW2ldKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIidjeWFuJ1wiPlxyXG4gICAgICAgICAgICA8L3dhcHAtdmlldy1iYWRnZT4gICAgICAgICAgICAgICAgICAgLS0+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5Cb29sZWFuXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJnZXRCb29sZWFuQ29sdW1uQ2xhc3MoaSwgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmVsZW1lbnRPYmplY3RSb3V0ZXNbaV0pKVwiPjwvaT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkRhdGVcIj5cclxuICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmVsZW1lbnRPYmplY3RSb3V0ZXNbaV0pIHwgZGF0ZSB9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWVuZFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Q/Lmhhc1ZpZXdCdXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cInZpZXdFbGVtZW50KGVsZW1lbnQpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWV5ZVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1pbmZvIG1yLTJcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jdXN0b21CdXR0b25Db25maWc/Lmhhc0N1c3RvbUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJjdXN0b21FbGVtZW50KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmN1c3RvbUJ1dHRvbkNvbmZpZz8uaWNvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1pbmZvIG1yLTJcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNFZGl0QnV0dG9uICYmICF3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlRWRpdFByb3BlcnR5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJlZGl0RWxlbWVudChlbGVtZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzIG1yLTJcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlRWRpdFByb3BlcnR5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJlZGl0RWxlbWVudChlbGVtZW50KVwiIFtkaXNhYmxlZF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZGlzYWJsZUVkaXRQcm9wZXJ0eSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1wZW5jaWxcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcyBtci0yXCI+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Q/Lmhhc0NvcHlCdXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImNvbmZpcm1Db3B5KCRldmVudCwgZWxlbWVudClcIiBcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY29weVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1oZWxwIG1yLTJcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Q/LmRpc2FibGVEZWxldGUgJiYgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRGVsZXRlQnV0dG9uICYmICF3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlRGVsZXRlUHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImNvbmZpcm1EZWxldGUoJGV2ZW50LCBlbGVtZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiF3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uZGlzYWJsZURlbGV0ZSAmJiB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlRGVsZXRlUHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImNvbmZpcm1EZWxldGUoJGV2ZW50LCBlbGVtZW50KVwiIFtkaXNhYmxlZF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZGlzYWJsZURlbGV0ZVByb3BlcnR5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsb2FkaW5nYm9keVwiPlxyXG4gICAgICAgICAgICA8dHIgaGVpZ2h0PVwiNzBweFwiICpuZ0Zvcj1cImxldCBuIG9mIFswLDEsMiwzLDRdXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uVHlwZXNcIiBbc3R5bGUud2lkdGhdPVwiaXRlbSA9PSB0YWJsZUNvbHVtblR5cGVzLkNoZWNrYm94ID8gJzhyZW0nIDogJydcIiA+XHJcbiAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94ICpuZ0lmPVwiaXRlbSA9PSB0YWJsZUNvbHVtblR5cGVzLkNoZWNrYm94ICYmIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94XCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiAqbmdJZj1cIml0ZW0gPT0gdGFibGVDb2x1bW5UeXBlcy5JbWFnZVwiIHdpZHRoPVwiNnJlbVwiIGhlaWdodD1cIjRyZW1cIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiAqbmdJZj1cIml0ZW0gIT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveCAmJiBpdGVtICE9IHRhYmxlQ29sdW1uVHlwZXMuSW1hZ2VcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRWRpdEJ1dHRvbiB8fCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNEZWxldGVCdXR0b25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Q/Lmhhc0VkaXRCdXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIXdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5kaXNhYmxlRGVsZXRlICYmIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNEZWxldGVCdXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3AtdGFibGU+XHJcbjwvZGl2PlxyXG48cC1jb25maXJtUG9wdXA+PC9wLWNvbmZpcm1Qb3B1cD4iXX0=
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy10YWJsZS1sYXp5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlcy93LXRhYmxlLWxhenkvdy10YWJsZS1sYXp5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlcy93LXRhYmxlLWxhenkvdy10YWJsZS1sYXp5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBTzNGLE1BQU0sT0FBTyxtQkFBbUI7SUE0QjlCLFlBQ1UsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUE1QmxELHFCQUFnQixHQUFVLEVBQUUsQ0FBQztRQUk3QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUlWLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBR3RCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBRzVCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFFMUQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3RDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDNUMsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNsRCx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzlDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDNUMsMEJBQXFCLEdB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L0MsTUFBTTt1QkFBQyxvQkFBb0I7Z0JBRVIsU0FBUztzQkFBNUIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIExhenlMb2FkRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IExhenlFbGVtZW50UXVlcnlSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9sYXp5LWVsZW1lbnQtcXVlcnktcmVxdWVzdC5tb2RlbCc7XHJcbmltcG9ydCB7IFdhcHBUYWJsZUxhenlMb2FkaW5nIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy93YXBwLXRhYmxlLWxhenktbG9hZGluZy5tb2RlbCc7XHJcbmltcG9ydCB7IFRhYmxlQ29sdW1uRmlsdGVyVHlwZXMsIFRhYmxlQ29sdW1uVHlwZXMgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2VudW1zLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndy10YWJsZS1sYXp5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdy10YWJsZS1sYXp5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93LXRhYmxlLWxhenkuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgV1RhYmxlTGF6eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgc2VsZWN0ZWRFbGVtZW50czogYW55W10gPSBbXTtcclxuICB0cmFuc2xhdGlvbnM6IGFueTtcclxuICBsYXN0UXVlcnkhOiBMYXp5RWxlbWVudFF1ZXJ5UmVxdWVzdDtcclxuXHJcbiAgc2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyRWxlbWVudHNJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgQElucHV0KCdsb2FkaW5nJykgbG9hZGluZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCdlbGVtZW50cycpIGVsZW1lbnRzITogYW55W107XHJcbiAgQElucHV0KCdyb3dzUGVyUGFnZScpIHJvd3NQZXJQYWdlOiBudW1iZXIgPSAxMDtcclxuICBASW5wdXQoJ2FsbEVsZW1lbnRzJykgYWxsRWxlbWVudHMhOiBhbnlbXTtcclxuICBASW5wdXQoJ3RvdGFsUmVjb3JkcycpIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcclxuICBASW5wdXQoJ21heFJvd3NQZXJQYWdlJykgbWF4Um93c1BlclBhZ2U6IG51bWJlciA9IDUwO1xyXG4gIEBJbnB1dCgnd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QnKSB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdCE6IFdhcHBUYWJsZUxhenlMb2FkaW5nO1xyXG5cclxuICBAT3V0cHV0KCdxdWVyeUVsZW1lbnRzJykgcXVlcnlFbGVtZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8TGF6eUVsZW1lbnRRdWVyeVJlcXVlc3Q+KCk7XHJcblxyXG4gIEBPdXRwdXQoJ29uRWxlbWVudFNlbGVjdCcpIG9uRWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uVmlld0VsZW1lbnRTZWxlY3QnKSBvblZpZXdFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25DdXN0b21FbGVtZW50U2VsZWN0Jykgb25DdXN0b21FbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25Db3B5RWxlbWVudFNlbGVjdCcpIG9uQ29weUVsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCdvbkVkaXRFbGVtZW50U2VsZWN0Jykgb25FZGl0RWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uRGVsZXRlRWxlbWVudFNlbGVjdCcpIG9uRGVsZXRlRWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcbiAgQE91dHB1dCgnb25BbGxFbGVtZW50U2VsZWN0Jykgb25BbGxFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCd0YWJsZScpIGRhdGFUYWJsZSE6IFRhYmxlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGxvYWRFbGVtZW50cyhldmVudDogTGF6eUxvYWRFdmVudCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgYWRhcHRlZFF1ZXJ5OiBMYXp5RWxlbWVudFF1ZXJ5UmVxdWVzdCA9IHtcclxuICAgICAgICBmaXJzdDogZXZlbnQuZmlyc3QhLFxyXG4gICAgICAgIHJvd3M6IHRoaXMucm93c1BlclBhZ2UhLFxyXG4gICAgICAgIHNvcnRPcmRlcjogZXZlbnQuc29ydE9yZGVyISxcclxuICAgICAgICBzb3J0RmllbGQ6IGV2ZW50LnNvcnRGaWVsZCEsXHJcbiAgICAgICAgZmlsdGVyczogT2JqZWN0LmtleXMoZXZlbnQuZmlsdGVycyEpLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb2x1bW5OYW1lOiBrZXkhLFxyXG4gICAgICAgICAgICB2YWx1ZTogZXZlbnQuZmlsdGVycyFba2V5XS52YWx1ZSxcclxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBldmVudC5maWx0ZXJzIVtrZXldLm1hdGNoTW9kZSFcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFzdFF1ZXJ5ID0gYWRhcHRlZFF1ZXJ5O1xyXG4gICAgICB0aGlzLnF1ZXJ5RWxlbWVudHMuZW1pdChhZGFwdGVkUXVlcnkpO1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkRWxlbWVudHMoKSB7XHJcbiAgICB0aGlzLmxhc3RRdWVyeS5yb3dzID0gdGhpcy5yb3dzUGVyUGFnZTtcclxuICAgIHRoaXMucXVlcnlFbGVtZW50cy5lbWl0KHRoaXMubGFzdFF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIHJlYWRQcm9wZXJ0eShvYmo6IGFueSwgcHJvcDogc3RyaW5nKTogYW55IHtcclxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHByb3Auc3BsaXQoJy4nKTtcclxuICAgIGxldCByZXN1bHQgPSBvYmo7XHJcblxyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gcHJvcGVydHkubWF0Y2goLyguKz8pXFxbKFxcZCspXFxdLyk7XHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IGFycmF5UHJvcCA9IG1hdGNoWzFdO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0W2FycmF5UHJvcF0pIHx8IGlzTmFOKGluZGV4KSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gcmVzdWx0W2FycmF5UHJvcF0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQgPSByZXN1bHRbYXJyYXlQcm9wXVtpbmRleF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRbcHJvcGVydHldID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0W3Byb3BlcnR5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBvbkVsZW1lbnQoZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uRWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgdmlld0VsZW1lbnQoZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uVmlld0VsZW1lbnRTZWxlY3QuZW1pdChlbGVtZW50KTtcclxuICB9XHJcbiAgY3VzdG9tRWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25DdXN0b21FbGVtZW50U2VsZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBlZGl0RWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25FZGl0RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybURlbGV0ZVNlbGVjdGlvbihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1NdWx0aXBsZURlbGV0ZUxhYmVsLFxyXG4gICAgICBpY29uOiBcInBpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCIsXHJcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1EZWxldGVCdG5MYWJlbCxcclxuICAgICAgYWNjZXB0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVTZWxlY3RlZEVsZW1lbnRzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlU2VsZWN0ZWRFbGVtZW50cygpIHtcclxuICAgIHRoaXMub25EZWxldGVFbGVtZW50U2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZEVsZW1lbnRzKVxyXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gW107XHJcbiAgfVxyXG5cclxuICBjb25maXJtRGVsZXRlKGV2ZW50OiBFdmVudCwgZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1TaW5nbGVEZWxldGVMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb25maXJtRGVsZXRlQnRuTGFiZWwsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlU2luZ2xlRWxlbWVudChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVTaW5nbGVFbGVtZW50KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vbkRlbGV0ZUVsZW1lbnRTZWxlY3QuZW1pdChbZWxlbWVudF0pXHJcbiAgfVxyXG5cclxuICBjb3B5RWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25Db3B5RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybUNvcHkoZXZlbnQ6IEV2ZW50LCBlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRXZlbnRUYXJnZXQsXHJcbiAgICAgIG1lc3NhZ2U6IHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29uZmlybUNvcHlMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb25maXJtQ29weUJ0bkxhYmVsLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNvcHlFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHZhbHVlID0gW10pIHtcclxuICAgIHRoaXMuc2VsZWN0QWxsID0gdmFsdWUubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3JkcztcclxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RBbGxDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcblxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5vbkFsbEVsZW1lbnRTZWxlY3QuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlQ2hlY2tib3ggPyB0aGlzLmdldFNlbGVjdGFibGVFbGVtZW50cyh0aGlzLmFsbEVsZW1lbnRzKSA6IHRoaXMuYWxsRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGFibGVFbGVtZW50cyhhbGxFbGVtZW50czogYW55W10pIHtcclxuICAgIHJldHVybiBhbGxFbGVtZW50cy5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gIXRoaXMucmVhZFByb3BlcnR5KGVsZW1lbnQsIHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZGlzYWJsZUNoZWNrYm94ISkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Qm9vbGVhbkNvbHVtbkNsYXNzKGluZGV4OiBudW1iZXIsIHZhbHVlUHJvcGVydHk6IGJvb2xlYW4pIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFtgJHt0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLnRydWVJY29uQ29sb3J9ICR7dGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS50cnVlSWNvbn1gXTogdmFsdWVQcm9wZXJ0eSxcclxuICAgICAgW2Ake3RoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQm9vbGVhblR5cGVJY29uc1tpbmRleF0uZmFsc2VJY29uQ29sb3J9ICR7dGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS5mYWxzZUljb259YF06ICF2YWx1ZVByb3BlcnR5XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhcih0YWJsZTogVGFibGUpIHtcclxuICAgIHRhYmxlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRhYmxlQ29sdW1uRmlsdGVyVHlwZXMoKTogdHlwZW9mIFRhYmxlQ29sdW1uRmlsdGVyVHlwZXMge1xyXG4gICAgcmV0dXJuIFRhYmxlQ29sdW1uRmlsdGVyVHlwZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRhYmxlQ29sdW1uVHlwZXMoKTogdHlwZW9mIFRhYmxlQ29sdW1uVHlwZXMge1xyXG4gICAgcmV0dXJuIFRhYmxlQ29sdW1uVHlwZXM7XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCIuZmlsdGVyLXBhbmVsXCI+PC9uZy1jb250ZW50PlxyXG48ZGl2ICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3RcIiBbY2xhc3MudGFibGUtY29udGFpbmVyXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnRhYmxlQ29udGFpbmVyXCI+XHJcbiAgICA8cC10YWJsZSBjbGFzcz1cIndhcHAtdGFibGUtc3R5bGVzXCJcclxuICAgICAgICAgICAgI3RhYmxlIFt2YWx1ZV09XCJlbGVtZW50c1wiIFtsYXp5XT1cInRydWVcIiAob25MYXp5TG9hZCk9XCJsb2FkRWxlbWVudHMoJGV2ZW50KVwiIGRhdGFLZXk9XCJ7e3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmlkZW50aWZpY2F0b3J9fVwiXHJcbiAgICAgICAgICAgIFt0YWJsZVN0eWxlXT1cInsnbWluLXdpZHRoJzogJzcwcmVtJ31cIlxyXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGVkRWxlbWVudHNcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiIChzZWxlY3RBbGxDaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtyb3dzXT1cInJvd3NQZXJQYWdlXCIgXHJcbiAgICAgICAgICAgIFtjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGUgPyB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlICsgJyAnICsgIHJvd3NQZXJQYWdlICsgJyBkZSAnICsgdG90YWxSZWNvcmRzISA6ICdTaG93aW5nICcgKyByb3dzUGVyUGFnZSArICcgb2YgJyArIHRvdGFsUmVjb3JkcyFcIlxyXG4gICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZ2xvYmFsRmlsdGVyRmllbGRzIVwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xlYXJCdXR0b24gfHwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzR2xvYmFsU2VhcmNoXCIgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIHRhYmxlLXBhZ2luYXRvciBwLTBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsZWFyQnV0dG9uXCIgcEJ1dHRvbiBbbGFiZWxdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY2xlYXJQbGFjZWhvbGRlciFcIiBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgaWNvbj1cInBpIHBpLWZpbHRlci1zbGFzaFwiIChjbGljayk9XCJjbGVhcih0YWJsZSlcIj48L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3dpbmctcGVyLXBhZ2VcIj4ge3t3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwbC0yIHNob3dpbmctcGVyLXBhZ2VcIiBbc2l6ZV09XCIxXCIgWyhuZ01vZGVsKV09XCJyb3dzUGVyUGFnZVwiIFtzaG93QnV0dG9uc109XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uTGF5b3V0PVwiaG9yaXpvbnRhbFwiIGlucHV0SWQ9XCJob3Jpem9udGFsXCIgc3Bpbm5lck1vZGU9XCJob3Jpem9udGFsXCIgW3N0ZXBdPVwiMVwiIFttaW5dPVwiMVwiIFttYXhdPVwibWF4Um93c1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudEJ1dHRvbkNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRCdXR0b25DbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50QnV0dG9uSWNvbj1cInBpIHBpLXBsdXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBkZWNyZW1lbnRCdXR0b25JY29uPVwicGkgcGktbWludXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBtb2RlPVwiZGVjaW1hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicmVsb2FkRWxlbWVudHMoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzR2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdCBtbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaGVpZ2h0LWlucHV0IHdhcHAtaW5wdXRcIiBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cInRhYmxlLmZpbHRlckdsb2JhbCgkZXZlbnQsICdjb250YWlucycpXCIgcGxhY2Vob2xkZXI9XCJ7e3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnNlYXJjaFBsYWNlaG9sZGVyfX1cIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgPHRoICpuZ0lmPVwiIXdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NvbHVtbkZpbHRlcnMgJiYgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3g7IGVsc2Ugbm9DaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94PjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0NoZWNrYm94Pjx0aCAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94XCI+PC90aD48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzU29ydGFibGVDb2x1bW5zOyBlbHNlIHNvbWV0aGluZ1wiPlxyXG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGVhZGVyc1wiPlxyXG4gICAgICAgICAgICB7e2hlYWRlcn19XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNzb21ldGhpbmc+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc29tZXRoaW5nIG5nRm9yIGxldC1maWx0ZXJUeXBlIFtuZ0Zvck9mXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmhlYWRlcnNcIiBsZXQtaT1cImluZGV4XCI+IFxyXG4gICAgICAgICAgICA8dGggW3BTb3J0YWJsZUNvbHVtbl09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5zb3J0YWJsZU5hbWVzW2ldXCI+XHJcbiAgICAgICAgICAgICAgICB7e3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmhlYWRlcnNbaV19fSBcclxuICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Quc29ydGFibGVOYW1lc1tpXSAhPSBudWxsXCIgW2ZpZWxkXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnNvcnRhYmxlTmFtZXNbaV1cIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8dGggKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNEZWxldGVCdXR0b24gfHwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRWRpdEJ1dHRvblwiPjwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICA8dHIgKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDb2x1bW5GaWx0ZXJzXCI+XHJcbiAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0aCAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0ltYWdlXCI+PC90aD5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWZpbHRlclR5cGUgW25nRm9yT2ZdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uRmlsdGVyVHlwZXNcIiBsZXQtaT1cImluZGV4XCI+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpbHRlclR5cGUgPT0gdGFibGVDb2x1bW5GaWx0ZXJUeXBlcy5UZXh0XCI+XHJcbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciB0eXBlPVwidGV4dFwiIFtmaWVsZF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5maWx0ZXJOYW1lc1tpXVwiPjwvcC1jb2x1bW5GaWx0ZXI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpbHRlclR5cGUgPT0gdGFibGVDb2x1bW5GaWx0ZXJUeXBlcy5NdWx0aXNlbGVjdFwiPlxyXG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW2ZpZWxkXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmZpbHRlck5hbWVzW2ldXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW25nTW9kZWxdPVwidmFsdWVcIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5zZWxlY3RGaWx0ZXJFbGVtZW50c1tpXVwiIHBsYWNlaG9sZGVyPVwiQW55XCIgKG9uQ2hhbmdlKT1cImZpbHRlcigkZXZlbnQudmFsdWUpXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgW21heFNlbGVjdGVkTGFiZWxzXT1cIjFcIiBbc2VsZWN0ZWRJdGVtc0xhYmVsXT1cIid7MH0gaXRlbXMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLW11bHRpc2VsZWN0LXJlcHJlc2VudGF0aXZlLW9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMVwiPnt7b3B0aW9uLm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpbHRlclR5cGUgPT0gdGFibGVDb2x1bW5GaWx0ZXJUeXBlcy5Ob25lXCI+PC90aD5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwiZmlsdGVyVHlwZSA9PSB0YWJsZUNvbHVtbkZpbHRlclR5cGVzLkJvb2xlYW5cIj5cclxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIHR5cGU9XCJib29sZWFuXCIgW2ZpZWxkXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmZpbHRlck5hbWVzW2ldXCI+PC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwiZmlsdGVyVHlwZSA9PSB0YWJsZUNvbHVtbkZpbHRlclR5cGVzLkRhdGVcIj5cclxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIHR5cGU9XCJkYXRlXCIgW2ZpZWxkXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmZpbHRlck5hbWVzW2ldXCI+PC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDx0aCAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0RlbGV0ZUJ1dHRvbiB8fCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNFZGl0QnV0dG9uXCI+PC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWVsZW1lbnQgbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICAgICAgICA8dHIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtY29sdW1uVHlwZSBbbmdGb3JPZl09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5UeXBlc1wiIGxldC1pPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkNoZWNrYm94ICYmIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94XCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmRpc2FibGVDaGVja2JveDsgZWxzZSBhY3RpdmVDaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiZWxlbWVudFwiIFtkaXNhYmxlZF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZGlzYWJsZUNoZWNrYm94KVwiPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhY3RpdmVDaGVja2JveD5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cImVsZW1lbnRcIj48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkltYWdlXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmVsZW1lbnRPYmplY3RSb3V0ZXNbaV0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZWxlbWVudE9iamVjdFJvdXRlc1tpXSlcIiBcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNoYWRvdy00IGVsZW1lbnQtaW1hZ2Utd2lkdGhcIiAvPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuVGV4dFwiICBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiPlxyXG4gICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZWxlbWVudE9iamVjdFJvdXRlc1tpXSkgfX1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkN1cnJlbmN5XCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIj5cclxuICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmVsZW1lbnRPYmplY3RSb3V0ZXNbaV0pIHwgY3VycmVuY3kgfX1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkJhZGdlXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIj5cclxuICAgICAgICAgICAgPHA+VG9EbyB3YXBwIHZpZXcgYmFkZ2U8L3A+XHJcbiAgICAgICAgICAgIDwhLS0gPHdhcHAtdmlldy1iYWRnZSBbbGFiZWxdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmVsZW1lbnRPYmplY3RSb3V0ZXNbaV0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiJ2N5YW4nXCI+XHJcbiAgICAgICAgICAgIDwvd2FwcC12aWV3LWJhZGdlPiAgICAgICAgICAgICAgICAgICAtLT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkJvb2xlYW5cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaVwiIFtuZ0NsYXNzXT1cImdldEJvb2xlYW5Db2x1bW5DbGFzcyhpLCByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZWxlbWVudE9iamVjdFJvdXRlc1tpXSkpXCI+PC9pPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuRGF0ZVwiPlxyXG4gICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZWxlbWVudE9iamVjdFJvdXRlc1tpXSkgfCBkYXRlIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtZW5kXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzVmlld0J1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZSAoY2xpY2spPVwidmlld0VsZW1lbnQoZWxlbWVudClcIiBcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktZXllXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWluZm8gbXItMlwiPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmN1c3RvbUJ1dHRvbkNvbmZpZz8uaGFzQ3VzdG9tQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImN1c3RvbUVsZW1lbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY3VzdG9tQnV0dG9uQ29uZmlnPy5pY29uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWluZm8gbXItMlwiPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gJiYgIXdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmRpc2FibGVFZGl0UHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImVkaXRFbGVtZW50KGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktcGVuY2lsXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3MgbXItMlwiPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmRpc2FibGVFZGl0UHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImVkaXRFbGVtZW50KGVsZW1lbnQpXCIgW2Rpc2FibGVkXT1cInJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlRWRpdFByb3BlcnR5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzIG1yLTJcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzQ29weUJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZSAoY2xpY2spPVwiY29uZmlybUNvcHkoJGV2ZW50LCBlbGVtZW50KVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jb3B5XCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWhlbHAgbXItMlwiPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiF3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uZGlzYWJsZURlbGV0ZSAmJiB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNEZWxldGVCdXR0b24gJiYgIXdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmRpc2FibGVEZWxldGVQcm9wZXJ0eVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZSAoY2xpY2spPVwiY29uZmlybURlbGV0ZSgkZXZlbnQsIGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIXdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5kaXNhYmxlRGVsZXRlICYmIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmRpc2FibGVEZWxldGVQcm9wZXJ0eVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZSAoY2xpY2spPVwiY29uZmlybURlbGV0ZSgkZXZlbnQsIGVsZW1lbnQpXCIgW2Rpc2FibGVkXT1cInJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlRGVsZXRlUHJvcGVydHkpXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxvYWRpbmdib2R5XCI+XHJcbiAgICAgICAgICAgIDx0ciBoZWlnaHQ9XCI3MHB4XCIgKm5nRm9yPVwibGV0IG4gb2YgWzAsMSwyLDMsNF1cIj5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgaXRlbSBvZiB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5UeXBlc1wiIFtzdHlsZS53aWR0aF09XCJpdGVtID09IHRhYmxlQ29sdW1uVHlwZXMuQ2hlY2tib3ggPyAnOHJlbScgOiAnJ1wiID5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggKm5nSWY9XCJpdGVtID09IHRhYmxlQ29sdW1uVHlwZXMuQ2hlY2tib3ggJiYgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3hcIj48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uICpuZ0lmPVwiaXRlbSA9PSB0YWJsZUNvbHVtblR5cGVzLkltYWdlXCIgd2lkdGg9XCI2cmVtXCIgaGVpZ2h0PVwiNHJlbVwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uICpuZ0lmPVwiaXRlbSAhPSB0YWJsZUNvbHVtblR5cGVzLkNoZWNrYm94ICYmIGl0ZW0gIT0gdGFibGVDb2x1bW5UeXBlcy5JbWFnZVwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNFZGl0QnV0dG9uIHx8IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0RlbGV0ZUJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzRWRpdEJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktcGVuY2lsXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3MgbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Q/LmRpc2FibGVEZWxldGUgJiYgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Q/Lmhhc0RlbGV0ZUJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC10YWJsZT5cclxuPC9kaXY+XHJcbjxwLWNvbmZpcm1Qb3B1cD48L3AtY29uZmlybVBvcHVwPiJdfQ==
|