UNPKG

ng-devui

Version:

DevUI components based on Angular

77 lines 29.8 kB
import { Component, Inject, Input, TemplateRef } from '@angular/core'; import { DATA_TABLE } from './data-table.token'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/cdk/scrolling"; import * as i3 from "ng-devui/dragdrop"; import * as i4 from "./data-table-row.component"; export class DataTableBodyComponent { constructor(dt) { this.dt = dt; this.dataSource = []; this.nestedIndex = '-1'; } ngOnChanges(changes) { if (changes.columns && this.columns) { let columnSpan = this.columns.length; if (this.showExpandToggle) { columnSpan += 1; } if (this.checkable) { columnSpan += 1; } this.childTdColspan = columnSpan; } } trackByFn(index, item) { return index; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableBodyComponent, deps: [{ token: DATA_TABLE }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataTableBodyComponent, selector: "d-data-table-body, [dDataTableBody]", inputs: { checkable: "checkable", showExpandToggle: "showExpandToggle", allChecked: "allChecked", selectable: "selectable", editModel: "editModel", editRowItem: "editRowItem", dataSource: "dataSource", resizeable: "resizeable", columns: "columns", detailTemplateRef: "detailTemplateRef", timeout: "timeout", type: "type", rowHoveredHighlight: "rowHoveredHighlight", tableLevel: "tableLevel", nestedIndex: "nestedIndex", virtualScroll: "virtualScroll", tableWidthConfig: "tableWidthConfig", headerExpandConfig: "headerExpandConfig", generalRowHoveredData: "generalRowHoveredData" }, usesOnChanges: true, ngImport: i0, template: "<tr *ngIf=\"headerExpandConfig?.expand\">\n <td [attr.colspan]=\"tableWidthConfig.length\">\n <ng-template\n [ngTemplateOutlet]=\"headerExpandConfig?.expandTemplateRef || default\"\n [ngTemplateOutletContext]=\"{ $implicit: this, columns: columns }\"\n >\n </ng-template>\n <ng-template #default>\n <div>{{ headerExpandConfig?.description }}</div>\n </ng-template>\n </td>\n</tr>\n<ng-container *ngIf=\"!virtualScroll; else scrollViewTpl\">\n <ng-container *ngFor=\"let rowItem of dataSource; trackBy: trackByFn; let rowIndex = index\">\n <ng-template [ngTemplateOutlet]=\"trTable\" [ngTemplateOutletContext]=\"{ rowItem: rowItem, rowIndex: rowIndex }\"> </ng-template>\n </ng-container>\n</ng-container>\n\n<ng-template #scrollViewTpl>\n <ng-container *cdkVirtualFor=\"let rowItem of dataSource; trackBy: trackByFn; let rowIndex = index\">\n <ng-template [ngTemplateOutlet]=\"trTable\" [ngTemplateOutletContext]=\"{ rowItem: rowItem || {}, rowIndex: rowIndex }\"> </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #trTable let-rowIndex=\"rowIndex\" let-rowItem=\"rowItem\">\n <tr\n *ngIf=\"!rowItem?.$draggable\"\n dDataTableRow\n [generalRowHoveredData]=\"generalRowHoveredData\"\n [resizeable]=\"resizeable\"\n [checkable]=\"checkable\"\n [rowIndex]=\"rowIndex\"\n [rowItem]=\"rowItem\"\n [columns]=\"columns\"\n [editRowItem]=\"editRowItem\"\n [editModel]=\"editModel\"\n [allChecked]=\"allChecked\"\n [showExpandToggle]=\"showExpandToggle\"\n [timeout]=\"timeout\"\n [tableLevel]=\"tableLevel\"\n [nestedIndex]=\"nestedIndex\"\n class=\"{{ rowItem.$rowClass ? rowItem.$rowClass : '' }}\"\n [ngClass]=\"{ 'table-row-selected': rowItem.$checked }\"\n ></tr>\n <tr\n *ngIf=\"rowItem?.$draggable\"\n dDataTableRow\n dDraggable\n [generalRowHoveredData]=\"generalRowHoveredData\"\n [resizeable]=\"resizeable\"\n [checkable]=\"checkable\"\n [rowIndex]=\"rowIndex\"\n [rowItem]=\"rowItem\"\n [columns]=\"columns\"\n [editRowItem]=\"editRowItem\"\n [editModel]=\"editModel\"\n [allChecked]=\"allChecked\"\n [showExpandToggle]=\"showExpandToggle\"\n [timeout]=\"timeout\"\n [tableLevel]=\"tableLevel\"\n [nestedIndex]=\"nestedIndex\"\n class=\"{{ rowItem.$rowClass ? rowItem.$rowClass : '' }}\"\n [ngClass]=\"{ 'table-row-selected': rowItem.$checked }\"\n [dragData]=\"{ data: rowItem }\"\n [dragScope]=\"rowItem?.$draggable['scope']\"\n [dragOverClass]=\"rowItem?.$draggable['class']\"\n [dragHandle]=\"rowItem?.$draggable['handler']\"\n ></tr>\n <tr *ngIf=\"rowItem && rowItem['$isDetailOpen'] && rowItem.detail\">\n <td [attr.colspan]=\"checkable ? 2 : 1\"></td>\n <td [attr.colspan]=\"columns.length\" class=\"detail-content\" [style.padding]=\"'13px'\">\n <ng-template\n [ngTemplateOutlet]=\"detailTemplateRef || default\"\n [ngTemplateOutletContext]=\"{ $implicit: this, detail: rowItem.detail, rowIndex: rowIndex, rowItem: rowItem }\"\n >\n </ng-template>\n <ng-template #default let-detail=\"detail\" let-rowIndex=\"rowIndex\" let-rowItem=\"rowItem\">\n <div>{{ detail }}</div>\n </ng-template>\n </td>\n </tr>\n <tr class=\"expand-row\" *ngIf=\"rowItem?.$expandConfig?.expand\">\n <td *ngIf=\"checkable\"></td>\n <td *ngIf=\"showExpandToggle\"></td>\n <td [attr.colspan]=\"columns.length\">\n <ng-template\n [ngTemplateOutlet]=\"rowItem.$expandConfig?.expandTemplateRef || default\"\n [ngTemplateOutletContext]=\"{ $implicit: this, columns: columns, rowIndex: rowIndex, rowItem: rowItem }\"\n >\n </ng-template>\n <ng-template #default>\n <div>{{ rowItem.$expandConfig?.description }}</div>\n </ng-template>\n </td>\n </tr>\n <tr class=\"child-table\" *ngIf=\"rowItem && rowItem['$isChildTableOpen'] && rowItem['children']\">\n <td [attr.colspan]=\"childTdColspan\">\n <table\n class=\"devui-table {{ type ? 'table-' + type : '' }} {{ rowHoveredHighlight ? 'table-hover' : '' }}\"\n style=\"table-layout: fixed\"\n >\n <colgroup>\n <col [style.width]=\"config.width\" *ngFor=\"let config of tableWidthConfig\" />\n </colgroup>\n <tbody\n dDataTableBody\n [dataSource]=\"rowItem['children']\"\n [resizeable]=\"resizeable\"\n [columns]=\"columns\"\n [checkable]=\"checkable\"\n [allChecked]=\"allChecked\"\n [selectable]=\"selectable\"\n [editModel]=\"editModel\"\n [editRowItem]=\"editRowItem\"\n [showExpandToggle]=\"showExpandToggle\"\n [detailTemplateRef]=\"detailTemplateRef\"\n [timeout]=\"timeout\"\n [type]=\"type\"\n [rowHoveredHighlight]=\"rowHoveredHighlight\"\n [tableLevel]=\"tableLevel + 1\"\n [nestedIndex]=\"nestedIndex + ',' + rowIndex\"\n [tableWidthConfig]=\"tableWidthConfig\"\n [generalRowHoveredData]=\"generalRowHoveredData\"\n ></tbody>\n </table>\n </td>\n </tr>\n</ng-template>\n", styles: [".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.detail-content{color:var(--devui-text, #191919);font-size:var(--devui-font-size, 12px);font-weight:400;background-color:var(--devui-area, #f3f3f3)}.child-table:hover{background:transparent!important}.child-table .devui-table{background:transparent;margin-bottom:0}.child-table>td{padding:0;border:0}::ng-deep .devui-table tbody>tr.expand-row{background:var(--devui-table-expand-area-bg, #f7f8fa)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "directive", type: i3.DraggableDirective, selector: "[dDraggable]", inputs: ["dragData", "dragHandle", "dragEffect", "dragScope", "dragHandleClass", "dragOverClass", "disabled", "enableDragFollow", "dragFollowOptions", "originPlaceholder", "dragIdentity", "dragItemParentName", "dragItemChildrenName"], outputs: ["dragStartEvent", "dragEvent", "dragEndEvent", "dropEndEvent"] }, { kind: "component", type: DataTableBodyComponent, selector: "d-data-table-body, [dDataTableBody]", inputs: ["checkable", "showExpandToggle", "allChecked", "selectable", "editModel", "editRowItem", "dataSource", "resizeable", "columns", "detailTemplateRef", "timeout", "type", "rowHoveredHighlight", "tableLevel", "nestedIndex", "virtualScroll", "tableWidthConfig", "headerExpandConfig", "generalRowHoveredData"] }, { kind: "component", type: i4.DataTableRowComponent, selector: "d-data-table-row, [dDataTableRow]", inputs: ["rowItem", "selectable", "checkable", "showExpandToggle", "rowIndex", "allChecked", "columns", "editModel", "editRowItem", "resizeable", "timeout", "tableLevel", "nestedIndex", "generalRowHoveredData"], outputs: ["detailChange"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableBodyComponent, decorators: [{ type: Component, args: [{ selector: 'd-data-table-body, [dDataTableBody]', preserveWhitespaces: false, template: "<tr *ngIf=\"headerExpandConfig?.expand\">\n <td [attr.colspan]=\"tableWidthConfig.length\">\n <ng-template\n [ngTemplateOutlet]=\"headerExpandConfig?.expandTemplateRef || default\"\n [ngTemplateOutletContext]=\"{ $implicit: this, columns: columns }\"\n >\n </ng-template>\n <ng-template #default>\n <div>{{ headerExpandConfig?.description }}</div>\n </ng-template>\n </td>\n</tr>\n<ng-container *ngIf=\"!virtualScroll; else scrollViewTpl\">\n <ng-container *ngFor=\"let rowItem of dataSource; trackBy: trackByFn; let rowIndex = index\">\n <ng-template [ngTemplateOutlet]=\"trTable\" [ngTemplateOutletContext]=\"{ rowItem: rowItem, rowIndex: rowIndex }\"> </ng-template>\n </ng-container>\n</ng-container>\n\n<ng-template #scrollViewTpl>\n <ng-container *cdkVirtualFor=\"let rowItem of dataSource; trackBy: trackByFn; let rowIndex = index\">\n <ng-template [ngTemplateOutlet]=\"trTable\" [ngTemplateOutletContext]=\"{ rowItem: rowItem || {}, rowIndex: rowIndex }\"> </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #trTable let-rowIndex=\"rowIndex\" let-rowItem=\"rowItem\">\n <tr\n *ngIf=\"!rowItem?.$draggable\"\n dDataTableRow\n [generalRowHoveredData]=\"generalRowHoveredData\"\n [resizeable]=\"resizeable\"\n [checkable]=\"checkable\"\n [rowIndex]=\"rowIndex\"\n [rowItem]=\"rowItem\"\n [columns]=\"columns\"\n [editRowItem]=\"editRowItem\"\n [editModel]=\"editModel\"\n [allChecked]=\"allChecked\"\n [showExpandToggle]=\"showExpandToggle\"\n [timeout]=\"timeout\"\n [tableLevel]=\"tableLevel\"\n [nestedIndex]=\"nestedIndex\"\n class=\"{{ rowItem.$rowClass ? rowItem.$rowClass : '' }}\"\n [ngClass]=\"{ 'table-row-selected': rowItem.$checked }\"\n ></tr>\n <tr\n *ngIf=\"rowItem?.$draggable\"\n dDataTableRow\n dDraggable\n [generalRowHoveredData]=\"generalRowHoveredData\"\n [resizeable]=\"resizeable\"\n [checkable]=\"checkable\"\n [rowIndex]=\"rowIndex\"\n [rowItem]=\"rowItem\"\n [columns]=\"columns\"\n [editRowItem]=\"editRowItem\"\n [editModel]=\"editModel\"\n [allChecked]=\"allChecked\"\n [showExpandToggle]=\"showExpandToggle\"\n [timeout]=\"timeout\"\n [tableLevel]=\"tableLevel\"\n [nestedIndex]=\"nestedIndex\"\n class=\"{{ rowItem.$rowClass ? rowItem.$rowClass : '' }}\"\n [ngClass]=\"{ 'table-row-selected': rowItem.$checked }\"\n [dragData]=\"{ data: rowItem }\"\n [dragScope]=\"rowItem?.$draggable['scope']\"\n [dragOverClass]=\"rowItem?.$draggable['class']\"\n [dragHandle]=\"rowItem?.$draggable['handler']\"\n ></tr>\n <tr *ngIf=\"rowItem && rowItem['$isDetailOpen'] && rowItem.detail\">\n <td [attr.colspan]=\"checkable ? 2 : 1\"></td>\n <td [attr.colspan]=\"columns.length\" class=\"detail-content\" [style.padding]=\"'13px'\">\n <ng-template\n [ngTemplateOutlet]=\"detailTemplateRef || default\"\n [ngTemplateOutletContext]=\"{ $implicit: this, detail: rowItem.detail, rowIndex: rowIndex, rowItem: rowItem }\"\n >\n </ng-template>\n <ng-template #default let-detail=\"detail\" let-rowIndex=\"rowIndex\" let-rowItem=\"rowItem\">\n <div>{{ detail }}</div>\n </ng-template>\n </td>\n </tr>\n <tr class=\"expand-row\" *ngIf=\"rowItem?.$expandConfig?.expand\">\n <td *ngIf=\"checkable\"></td>\n <td *ngIf=\"showExpandToggle\"></td>\n <td [attr.colspan]=\"columns.length\">\n <ng-template\n [ngTemplateOutlet]=\"rowItem.$expandConfig?.expandTemplateRef || default\"\n [ngTemplateOutletContext]=\"{ $implicit: this, columns: columns, rowIndex: rowIndex, rowItem: rowItem }\"\n >\n </ng-template>\n <ng-template #default>\n <div>{{ rowItem.$expandConfig?.description }}</div>\n </ng-template>\n </td>\n </tr>\n <tr class=\"child-table\" *ngIf=\"rowItem && rowItem['$isChildTableOpen'] && rowItem['children']\">\n <td [attr.colspan]=\"childTdColspan\">\n <table\n class=\"devui-table {{ type ? 'table-' + type : '' }} {{ rowHoveredHighlight ? 'table-hover' : '' }}\"\n style=\"table-layout: fixed\"\n >\n <colgroup>\n <col [style.width]=\"config.width\" *ngFor=\"let config of tableWidthConfig\" />\n </colgroup>\n <tbody\n dDataTableBody\n [dataSource]=\"rowItem['children']\"\n [resizeable]=\"resizeable\"\n [columns]=\"columns\"\n [checkable]=\"checkable\"\n [allChecked]=\"allChecked\"\n [selectable]=\"selectable\"\n [editModel]=\"editModel\"\n [editRowItem]=\"editRowItem\"\n [showExpandToggle]=\"showExpandToggle\"\n [detailTemplateRef]=\"detailTemplateRef\"\n [timeout]=\"timeout\"\n [type]=\"type\"\n [rowHoveredHighlight]=\"rowHoveredHighlight\"\n [tableLevel]=\"tableLevel + 1\"\n [nestedIndex]=\"nestedIndex + ',' + rowIndex\"\n [tableWidthConfig]=\"tableWidthConfig\"\n [generalRowHoveredData]=\"generalRowHoveredData\"\n ></tbody>\n </table>\n </td>\n </tr>\n</ng-template>\n", styles: [".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.detail-content{color:var(--devui-text, #191919);font-size:var(--devui-font-size, 12px);font-weight:400;background-color:var(--devui-area, #f3f3f3)}.child-table:hover{background:transparent!important}.child-table .devui-table{background:transparent;margin-bottom:0}.child-table>td{padding:0;border:0}::ng-deep .devui-table tbody>tr.expand-row{background:var(--devui-table-expand-area-bg, #f7f8fa)}\n"] }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [DATA_TABLE] }] }], propDecorators: { checkable: [{ type: Input }], showExpandToggle: [{ type: Input }], allChecked: [{ type: Input }], selectable: [{ type: Input }], editModel: [{ type: Input }], editRowItem: [{ type: Input }], dataSource: [{ type: Input }], resizeable: [{ type: Input }], columns: [{ type: Input }], detailTemplateRef: [{ type: Input }], timeout: [{ type: Input }], type: [{ type: Input }], rowHoveredHighlight: [{ type: Input }], tableLevel: [{ type: Input }], nestedIndex: [{ type: Input }], virtualScroll: [{ type: Input }], tableWidthConfig: [{ type: Input }], headerExpandConfig: [{ type: Input }], generalRowHoveredData: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1ib2R5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL2RhdGEtdGFibGUvZGF0YS10YWJsZS1ib2R5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2RldnVpL2RhdGEtdGFibGUvZGF0YS10YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBNEIsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBU2hELE1BQU0sT0FBTyxzQkFBc0I7SUFzQmpDLFlBQXVDLEVBQU87UUFBUCxPQUFFLEdBQUYsRUFBRSxDQUFLO1FBZnJDLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFRdkIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7SUFPcUIsQ0FBQztJQUVsRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMxQixVQUFVLElBQUksQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkIsVUFBVSxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUk7UUFDbkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQXZDVSxzQkFBc0Isa0JBc0JiLFVBQVU7bUdBdEJuQixzQkFBc0Isc3FCQ1huQyxxaEtBZ0lBLDY4RURySGEsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNFLHFDQUFxQyx1QkFHMUIsS0FBSzs7MEJBd0JiLE1BQU07MkJBQUMsVUFBVTt5Q0FyQnJCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGFibGVFeHBhbmRDb25maWcsIFRhYmxlV2lkdGhDb25maWcgfSBmcm9tICcuL2RhdGEtdGFibGUubW9kZWwnO1xyXG5pbXBvcnQgeyBEQVRBX1RBQkxFIH0gZnJvbSAnLi9kYXRhLXRhYmxlLnRva2VuJztcclxuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uVG1wbENvbXBvbmVudCB9IGZyb20gJy4vdG1wbC9kYXRhLXRhYmxlLWNvbHVtbi10bXBsLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2QtZGF0YS10YWJsZS1ib2R5LCBbZERhdGFUYWJsZUJvZHldJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLWJvZHkuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUJvZHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGNoZWNrYWJsZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93RXhwYW5kVG9nZ2xlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFsbENoZWNrZWQ6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2VsZWN0YWJsZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBlZGl0TW9kZWw6IHN0cmluZztcclxuICBASW5wdXQoKSBlZGl0Um93SXRlbTogYW55O1xyXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgcmVzaXplYWJsZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5UbXBsQ29tcG9uZW50W107XHJcbiAgQElucHV0KCkgZGV0YWlsVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgdGltZW91dDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZztcclxuICBASW5wdXQoKSByb3dIb3ZlcmVkSGlnaGxpZ2h0OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRhYmxlTGV2ZWw6IG51bWJlcjtcclxuICBASW5wdXQoKSBuZXN0ZWRJbmRleCA9ICctMSc7XHJcbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbDtcclxuICBASW5wdXQoKSB0YWJsZVdpZHRoQ29uZmlnOiBUYWJsZVdpZHRoQ29uZmlnW107XHJcbiAgQElucHV0KCkgaGVhZGVyRXhwYW5kQ29uZmlnOiBUYWJsZUV4cGFuZENvbmZpZztcclxuICBASW5wdXQoKSBnZW5lcmFsUm93SG92ZXJlZERhdGE6IGJvb2xlYW47XHJcbiAgY2hpbGRUZENvbHNwYW46IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChEQVRBX1RBQkxFKSBwdWJsaWMgZHQ6IGFueSkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMpIHtcclxuICAgICAgbGV0IGNvbHVtblNwYW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoO1xyXG4gICAgICBpZiAodGhpcy5zaG93RXhwYW5kVG9nZ2xlKSB7XHJcbiAgICAgICAgY29sdW1uU3BhbiArPSAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNoZWNrYWJsZSkge1xyXG4gICAgICAgIGNvbHVtblNwYW4gKz0gMTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoaWxkVGRDb2xzcGFuID0gY29sdW1uU3BhbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRyYWNrQnlGbihpbmRleCwgaXRlbSkge1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxufVxyXG4iLCI8dHIgKm5nSWY9XCJoZWFkZXJFeHBhbmRDb25maWc/LmV4cGFuZFwiPlxuICA8dGQgW2F0dHIuY29sc3Bhbl09XCJ0YWJsZVdpZHRoQ29uZmlnLmxlbmd0aFwiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyRXhwYW5kQ29uZmlnPy5leHBhbmRUZW1wbGF0ZVJlZiB8fCBkZWZhdWx0XCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGhpcywgY29sdW1uczogY29sdW1ucyB9XCJcbiAgICA+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICA8ZGl2Pnt7IGhlYWRlckV4cGFuZENvbmZpZz8uZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3RkPlxuPC90cj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhdmlydHVhbFNjcm9sbDsgZWxzZSBzY3JvbGxWaWV3VHBsXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0l0ZW0gb2YgZGF0YVNvdXJjZTsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRhYmxlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93SXRlbTogcm93SXRlbSwgcm93SW5kZXg6IHJvd0luZGV4IH1cIj4gPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNzY3JvbGxWaWV3VHBsPlxuICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IHJvd0l0ZW0gb2YgZGF0YVNvdXJjZTsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRhYmxlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93SXRlbTogcm93SXRlbSB8fCB7fSwgcm93SW5kZXg6IHJvd0luZGV4IH1cIj4gPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RyVGFibGUgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIiBsZXQtcm93SXRlbT1cInJvd0l0ZW1cIj5cbiAgPHRyXG4gICAgKm5nSWY9XCIhcm93SXRlbT8uJGRyYWdnYWJsZVwiXG4gICAgZERhdGFUYWJsZVJvd1xuICAgIFtnZW5lcmFsUm93SG92ZXJlZERhdGFdPVwiZ2VuZXJhbFJvd0hvdmVyZWREYXRhXCJcbiAgICBbcmVzaXplYWJsZV09XCJyZXNpemVhYmxlXCJcbiAgICBbY2hlY2thYmxlXT1cImNoZWNrYWJsZVwiXG4gICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICBbcm93SXRlbV09XCJyb3dJdGVtXCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbZWRpdFJvd0l0ZW1dPVwiZWRpdFJvd0l0ZW1cIlxuICAgIFtlZGl0TW9kZWxdPVwiZWRpdE1vZGVsXCJcbiAgICBbYWxsQ2hlY2tlZF09XCJhbGxDaGVja2VkXCJcbiAgICBbc2hvd0V4cGFuZFRvZ2dsZV09XCJzaG93RXhwYW5kVG9nZ2xlXCJcbiAgICBbdGltZW91dF09XCJ0aW1lb3V0XCJcbiAgICBbdGFibGVMZXZlbF09XCJ0YWJsZUxldmVsXCJcbiAgICBbbmVzdGVkSW5kZXhdPVwibmVzdGVkSW5kZXhcIlxuICAgIGNsYXNzPVwie3sgcm93SXRlbS4kcm93Q2xhc3MgPyByb3dJdGVtLiRyb3dDbGFzcyA6ICcnIH19XCJcbiAgICBbbmdDbGFzc109XCJ7ICd0YWJsZS1yb3ctc2VsZWN0ZWQnOiByb3dJdGVtLiRjaGVja2VkIH1cIlxuICA+PC90cj5cbiAgPHRyXG4gICAgKm5nSWY9XCJyb3dJdGVtPy4kZHJhZ2dhYmxlXCJcbiAgICBkRGF0YVRhYmxlUm93XG4gICAgZERyYWdnYWJsZVxuICAgIFtnZW5lcmFsUm93SG92ZXJlZERhdGFdPVwiZ2VuZXJhbFJvd0hvdmVyZWREYXRhXCJcbiAgICBbcmVzaXplYWJsZV09XCJyZXNpemVhYmxlXCJcbiAgICBbY2hlY2thYmxlXT1cImNoZWNrYWJsZVwiXG4gICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICBbcm93SXRlbV09XCJyb3dJdGVtXCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbZWRpdFJvd0l0ZW1dPVwiZWRpdFJvd0l0ZW1cIlxuICAgIFtlZGl0TW9kZWxdPVwiZWRpdE1vZGVsXCJcbiAgICBbYWxsQ2hlY2tlZF09XCJhbGxDaGVja2VkXCJcbiAgICBbc2hvd0V4cGFuZFRvZ2dsZV09XCJzaG93RXhwYW5kVG9nZ2xlXCJcbiAgICBbdGltZW91dF09XCJ0aW1lb3V0XCJcbiAgICBbdGFibGVMZXZlbF09XCJ0YWJsZUxldmVsXCJcbiAgICBbbmVzdGVkSW5kZXhdPVwibmVzdGVkSW5kZXhcIlxuICAgIGNsYXNzPVwie3sgcm93SXRlbS4kcm93Q2xhc3MgPyByb3dJdGVtLiRyb3dDbGFzcyA6ICcnIH19XCJcbiAgICBbbmdDbGFzc109XCJ7ICd0YWJsZS1yb3ctc2VsZWN0ZWQnOiByb3dJdGVtLiRjaGVja2VkIH1cIlxuICAgIFtkcmFnRGF0YV09XCJ7IGRhdGE6IHJvd0l0ZW0gfVwiXG4gICAgW2RyYWdTY29wZV09XCJyb3dJdGVtPy4kZHJhZ2dhYmxlWydzY29wZSddXCJcbiAgICBbZHJhZ092ZXJDbGFzc109XCJyb3dJdGVtPy4kZHJhZ2dhYmxlWydjbGFzcyddXCJcbiAgICBbZHJhZ0hhbmRsZV09XCJyb3dJdGVtPy4kZHJhZ2dhYmxlWydoYW5kbGVyJ11cIlxuICA+PC90cj5cbiAgPHRyICpuZ0lmPVwicm93SXRlbSAmJiByb3dJdGVtWyckaXNEZXRhaWxPcGVuJ10gJiYgcm93SXRlbS5kZXRhaWxcIj5cbiAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjaGVja2FibGUgPyAyIDogMVwiPjwvdGQ+XG4gICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGhcIiBjbGFzcz1cImRldGFpbC1jb250ZW50XCIgW3N0eWxlLnBhZGRpbmddPVwiJzEzcHgnXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGV0YWlsVGVtcGxhdGVSZWYgfHwgZGVmYXVsdFwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGhpcywgZGV0YWlsOiByb3dJdGVtLmRldGFpbCwgcm93SW5kZXg6IHJvd0luZGV4LCByb3dJdGVtOiByb3dJdGVtIH1cIlxuICAgICAgPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdCBsZXQtZGV0YWlsPVwiZGV0YWlsXCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIiBsZXQtcm93SXRlbT1cInJvd0l0ZW1cIj5cbiAgICAgICAgPGRpdj57eyBkZXRhaWwgfX08L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC90ZD5cbiAgPC90cj5cbiAgPHRyIGNsYXNzPVwiZXhwYW5kLXJvd1wiICpuZ0lmPVwicm93SXRlbT8uJGV4cGFuZENvbmZpZz8uZXhwYW5kXCI+XG4gICAgPHRkICpuZ0lmPVwiY2hlY2thYmxlXCI+PC90ZD5cbiAgICA8dGQgKm5nSWY9XCJzaG93RXhwYW5kVG9nZ2xlXCI+PC90ZD5cbiAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aFwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJvd0l0ZW0uJGV4cGFuZENvbmZpZz8uZXhwYW5kVGVtcGxhdGVSZWYgfHwgZGVmYXVsdFwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGhpcywgY29sdW1uczogY29sdW1ucywgcm93SW5kZXg6IHJvd0luZGV4LCByb3dJdGVtOiByb3dJdGVtIH1cIlxuICAgICAgPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgPGRpdj57eyByb3dJdGVtLiRleHBhbmRDb25maWc/LmRlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdGQ+XG4gIDwvdHI+XG4gIDx0ciBjbGFzcz1cImNoaWxkLXRhYmxlXCIgKm5nSWY9XCJyb3dJdGVtICYmIHJvd0l0ZW1bJyRpc0NoaWxkVGFibGVPcGVuJ10gJiYgcm93SXRlbVsnY2hpbGRyZW4nXVwiPlxuICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNoaWxkVGRDb2xzcGFuXCI+XG4gICAgICA8dGFibGVcbiAgICAgICAgY2xhc3M9XCJkZXZ1aS10YWJsZSB7eyB0eXBlID8gJ3RhYmxlLScgKyB0eXBlIDogJycgfX0ge3sgcm93SG92ZXJlZEhpZ2hsaWdodCA/ICd0YWJsZS1ob3ZlcicgOiAnJyB9fVwiXG4gICAgICAgIHN0eWxlPVwidGFibGUtbGF5b3V0OiBmaXhlZFwiXG4gICAgICA+XG4gICAgICAgIDxjb2xncm91cD5cbiAgICAgICAgICA8Y29sIFtzdHlsZS53aWR0aF09XCJjb25maWcud2lkdGhcIiAqbmdGb3I9XCJsZXQgY29uZmlnIG9mIHRhYmxlV2lkdGhDb25maWdcIiAvPlxuICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICA8dGJvZHlcbiAgICAgICAgICBkRGF0YVRhYmxlQm9keVxuICAgICAgICAgIFtkYXRhU291cmNlXT1cInJvd0l0ZW1bJ2NoaWxkcmVuJ11cIlxuICAgICAgICAgIFtyZXNpemVhYmxlXT1cInJlc2l6ZWFibGVcIlxuICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgICAgIFtjaGVja2FibGVdPVwiY2hlY2thYmxlXCJcbiAgICAgICAgICBbYWxsQ2hlY2tlZF09XCJhbGxDaGVja2VkXCJcbiAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICBbZWRpdE1vZGVsXT1cImVkaXRNb2RlbFwiXG4gICAgICAgICAgW2VkaXRSb3dJdGVtXT1cImVkaXRSb3dJdGVtXCJcbiAgICAgICAgICBbc2hvd0V4cGFuZFRvZ2dsZV09XCJzaG93RXhwYW5kVG9nZ2xlXCJcbiAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVSZWZdPVwiZGV0YWlsVGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFt0aW1lb3V0XT1cInRpbWVvdXRcIlxuICAgICAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgICAgIFtyb3dIb3ZlcmVkSGlnaGxpZ2h0XT1cInJvd0hvdmVyZWRIaWdobGlnaHRcIlxuICAgICAgICAgIFt0YWJsZUxldmVsXT1cInRhYmxlTGV2ZWwgKyAxXCJcbiAgICAgICAgICBbbmVzdGVkSW5kZXhdPVwibmVzdGVkSW5kZXggKyAnLCcgKyByb3dJbmRleFwiXG4gICAgICAgICAgW3RhYmxlV2lkdGhDb25maWddPVwidGFibGVXaWR0aENvbmZpZ1wiXG4gICAgICAgICAgW2dlbmVyYWxSb3dIb3ZlcmVkRGF0YV09XCJnZW5lcmFsUm93SG92ZXJlZERhdGFcIlxuICAgICAgICA+PC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC90ZD5cbiAgPC90cj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=