barsa-sap-ui 2.0.96 → 2.0.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +21 -3
- package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +4 -4
- package/esm2022/lib/barsa-tree-item/barsa-tree-item.component.mjs +5 -3
- package/esm2022/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +3 -3
- package/esm2022/lib/ly-tab-container/ly-tab-container.component.mjs +3 -3
- package/esm2022/lib/sap-ui-report-base.component.mjs +4 -4
- package/esm2022/lib/table-th.directive.mjs +2 -6
- package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +40 -39
- package/esm2022/lib/ui-tree-view/ui-tree-view.component.mjs +8 -3
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/barsa-sap-ui.mjs +81 -59
- package/fesm2022/barsa-sap-ui.mjs.map +1 -1
- package/lib/barsa-table-header/barsa-table-header.component.d.ts +5 -1
- package/lib/barsa-tree-item/barsa-tree-item.component.d.ts +2 -1
- package/lib/ui-table-view/ui-table-view.component.d.ts +4 -1
- package/lib/ui-tree-view/ui-tree-view.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -108,18 +108,34 @@ export class BarsaTableHeaderComponent extends BaseComponent {
|
|
|
108
108
|
onAllCheckbox(checked) {
|
|
109
109
|
this.allCheckbox.emit(checked);
|
|
110
110
|
}
|
|
111
|
+
SetColumnWidthToThWidth() {
|
|
112
|
+
this.thArr.forEach((th, i) => {
|
|
113
|
+
this.columns[i].Width = th.offsetWidth;
|
|
114
|
+
this.columns[i].$Width = `${th.offsetWidth}px`;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
SetColumnWidthToPercent() {
|
|
118
|
+
const allWidth = this.theadRef.nativeElement.clientWidth;
|
|
119
|
+
this.thArr.forEach((th, i) => {
|
|
120
|
+
const x = (th.offsetWidth * 100) / allWidth;
|
|
121
|
+
this.columns[i].$FitContainerWidth = `${x}%`;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
111
124
|
RefreshTableThWidth() {
|
|
112
125
|
setTableThWidth(this.tableHeaderMode, this.columns, this.thArr, this._renderer2);
|
|
113
126
|
}
|
|
127
|
+
TableThFitToCaption() {
|
|
128
|
+
setTableThWidth(TableHeaderWidthMode.ColumnWidth, this.columns, this.thArr, this._renderer2);
|
|
129
|
+
}
|
|
114
130
|
_trackByColumn(index, column) {
|
|
115
131
|
return `${column.Name}${index}`;
|
|
116
132
|
}
|
|
117
133
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTableHeaderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
118
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaTableHeaderComponent, selector: "bsu-barsa-table-header", inputs: { allChecked: "allChecked", isCheckList: "isCheckList", columns: "columns", fitWidth: "fitWidth", contextMenuItems: "contextMenuItems", contextMenuWidth: "contextMenuWidth", showViewButton: "showViewButton", hasSelected: "hasSelected", hideOpenIcon: "hideOpenIcon", disableOverflowContextMenu: "disableOverflowContextMenu", inlineEditMode: "inlineEditMode", hideHeader: "hideHeader", showDetailsInRow: "showDetailsInRow", viewSetting: "viewSetting", tableWidth: "tableWidth", resizedByUser: "resizedByUser", disableResponsive: "disableResponsive", actionList: "actionList", rowIndicator: "rowIndicator", rtl: "rtl", sticky: "sticky", showRowNumber: "showRowNumber", disableResize: "disableResize", disableHeaderContextMenu: "disableHeaderContextMenu", deviceSize: "deviceSize", tableHeaderMode: "tableHeaderMode" }, outputs: { allCheckbox: "allCheckbox", columnResize: "columnResize", columnResizing: "columnResizing", fitToContent: "fitToContent", fitToContainer: "fitToContainer", freeColumnSize: "freeColumnSize", sortAscending: "sortAscending", sortDescending: "sortDescending", filter: "filter", resetGridSettings: "resetGridSettings", headerRender: "headerRender" }, viewQueries: [{ propertyName: "theadRef", first: true, predicate: ["theadRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "thList", predicate: ["thRef"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<thead\n fd-table-header\n [class.inline-edit]=\"inlineEditMode\"\n [class.smallColumns]=\"columnsSmallerThanTableWidth\"\n [style.position]=\"sticky ? 'sticky' : null\"\n #theadRef\n>\n <tr fd-table-row>\n @if (!hideHeader) { @if (rowIndicator) {\n <th fd-table-cell fd-table-status-indicator #rowIndicator></th>\n } @if (showRowNumber) {\n <th fd-table-cell style=\"width: 40px; max-width: 40px\"></th>\n } @if (isCheckList) {\n <th fd-table-cell>\n <fd-checkbox\n name=\"allCheckbox\"\n [ngModel]=\"allChecked\"\n (ngModelChange)=\"onAllCheckbox($event)\"\n ></fd-checkbox>\n </th>\n } @if (!isCheckList && !showRowNumber) {\n <th fd-table-cell class=\"single-select\"></th>\n } @for (column of columns; track _trackByColumn(i, column); let i = $index; let last = $last) {\n <th\n #thRef\n tableth\n fd-table-cell\n resizable\n [index]=\"i\"\n [last]=\"last\"\n [columnsLength]=\"columns.length\"\n [column]=\"column\"\n [tableHeaderMode]=\"tableHeaderMode\"\n [rtl]=\"rtl\"\n [caption]=\"column.Caption | bbbTranslate\"\n [name]=\"column.Name\"\n [icon]=\"column.Icon\"\n [colClass]=\"column.$CSSClassName + ' column__' + column.Caption\"\n [displayType]=\"column.Extra?.IconDisplayTypeEnum\"\n [isImageOrIcon]=\"(column | thImageOrIcon) === true\"\n [disableResize]=\"disableResize || (tableHeaderMode === 2 && last) || (column | thImageOrIcon) === true\"\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\n [disableResponsive]=\"disableResponsive\"\n (sortAscending)=\"sortAscending.emit(column)\"\n (sortDescending)=\"sortDescending.emit(column)\"\n (filter)=\"filter.emit(column)\"\n (resetGridSettings)=\"resetGridSettings.emit()\"\n (widthChange)=\"onColumnWidthChange(column)\"\n (widthChanging)=\"onColumnWidthChanging(i, column, $event)\"\n >\n @if(!disableHeaderContextMenu){\n <fd-popover #menu>\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"headerValue; context: { $implicit: column }\"></ng-container>\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list>\n <li fd-list-item>\n <a fd-list-link (click)=\"onSortAscending(column, menu)\">\n <fd-menu-addon position=\"before\" glyph=\"sort-ascending\" fd-list-icon></fd-menu-addon>\n <span fd-list-title\n >{{ ('Sort' | bbbTranslate) + ' ' }} {{ 'Ascending' | bbbTranslate }}</span\n >\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"onSortDescending(column, menu)\" bodyClick>\n <fd-menu-addon position=\"before\" glyph=\"sort-descending\" fd-list-icon></fd-menu-addon>\n <span fd-list-title\n >{{ ('Sort' | bbbTranslate) + ' ' }} {{ 'Descending' | bbbTranslate }}</span\n >\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"onFitToContent(column, i)\" bodyClick>\n <fd-menu-addon position=\"before\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ ('Fit Column To Content' | bbbTranslate) + ' ' }}</span>\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"fitToContainer.emit()\" bodyClick>\n <fd-menu-addon position=\"before\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ ('All Columns In Page' | bbbTranslate) + ' ' }}</span>\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"freeColumnSize.emit()\" bodyClick>\n <fd-menu-addon position=\"before\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ ('Free Columns Size' | bbbTranslate) + ' ' }}</span>\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"onResetColumnsSettings()\" bodyClick>\n <fd-menu-addon position=\"before\" glyph=\"reset\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ 'GridSettingBase' | bbbTranslate }}</span>\n </a>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n } @else{\n <ng-container *ngTemplateOutlet=\"headerValue; context: { $implicit: column }\"></ng-container>\n }\n </th>\n } @if (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode) {\n <th\n class=\"col-header col-context-menu\"\n fd-table-cell\n [fitContent]=\"disableOverflowContextMenu\"\n [style.width.px]=\"contextMenuWidth\"\n ></th>\n } @if (showDetailsInRow && !inlineEditMode) {\n <th class=\"col-header col-details\" [style.width]=\"deviceSize === 's' ? '44px' : '120px'\" fd-table-cell></th>\n } @if (showViewButton) {\n <th class=\"col-header col-view\" [style.width.px]=\"36 * (actionList?.length ?? 0) + 8\" fd-table-cell></th>\n } }\n </tr>\n</thead>\n<ng-template #headerValue let-column>\n <div style=\"display: flex\">\n @if ( (column.Extra?.IconDisplayTypeEnum === 'Image' || column.FieldTypeId === 42) && column.Icon) {\n <img [src]=\"column.Icon\" />\n } @else {\n {{ column.Caption | bbbTranslate }}\n }\n </div>\n</ng-template>\n", styles: [":host{display:contents;width:100%}:host.has-toolbar thead{border-top:none!important}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "component", type: i4.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i5.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i5.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "directive", type: i5.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i5.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role", "ariaHidden"] }, { kind: "directive", type: i5.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "component", type: i6.MenuAddonDirective, selector: "fd-menu-addon", inputs: ["position", "submenuIndicator", "ariaHidden"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "directive", type: i8.TableHeaderDirective, selector: "[fdTableHeader], [fd-table-header]", inputs: ["noBorderX", "noBorderY", "nonInteractive"] }, { kind: "directive", type: i8.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i8.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "directive", type: i8.TableStatusIndicatorDirective, selector: "[fdTableStatusIndicator], [fd-table-status-indicator]", inputs: ["status"] }, { kind: "component", type: i3.ResizableComponent, selector: "th[resizable]", inputs: ["disableResize", "rtl"], outputs: ["widthChange", "widthChanging"] }, { kind: "directive", type: i9.TableThDirective, selector: "[tableth]", inputs: ["fieldTypeId", "caption", "icon", "inlineEditMode", "isImageOrIcon", "columnsLength", "tableWidth", "last", "rtl", "column", "disableResponsive", "disableResize", "disableHeaderContextMenu", "tableHeaderMode", "colClass", "displayType", "name", "index"] }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i3.ThImageOrIconePipe, name: "thImageOrIcon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
134
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaTableHeaderComponent, selector: "bsu-barsa-table-header", inputs: { allChecked: "allChecked", isCheckList: "isCheckList", columns: "columns", fitWidth: "fitWidth", contextMenuItems: "contextMenuItems", contextMenuWidth: "contextMenuWidth", showViewButton: "showViewButton", hasSelected: "hasSelected", hideOpenIcon: "hideOpenIcon", disableOverflowContextMenu: "disableOverflowContextMenu", inlineEditMode: "inlineEditMode", hideHeader: "hideHeader", showDetailsInRow: "showDetailsInRow", viewSetting: "viewSetting", tableWidth: "tableWidth", resizedByUser: "resizedByUser", disableResponsive: "disableResponsive", actionList: "actionList", rowIndicator: "rowIndicator", rtl: "rtl", sticky: "sticky", showRowNumber: "showRowNumber", hasSecondaryColumns: "hasSecondaryColumns", disableResize: "disableResize", disableHeaderContextMenu: "disableHeaderContextMenu", deviceSize: "deviceSize", tableHeaderMode: "tableHeaderMode" }, outputs: { allCheckbox: "allCheckbox", columnResize: "columnResize", columnResizing: "columnResizing", fitToContent: "fitToContent", fitToContainer: "fitToContainer", freeColumnSize: "freeColumnSize", sortAscending: "sortAscending", sortDescending: "sortDescending", filter: "filter", resetGridSettings: "resetGridSettings", headerRender: "headerRender" }, viewQueries: [{ propertyName: "theadRef", first: true, predicate: ["theadRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "thList", predicate: ["thRef"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<thead\n fd-table-header\n [class.inline-edit]=\"inlineEditMode\"\n [class.smallColumns]=\"columnsSmallerThanTableWidth\"\n [style.position]=\"sticky ? 'sticky' : null\"\n #theadRef\n>\n <tr fd-table-row>\n @if (!hideHeader) { @if (rowIndicator) {\n <th fd-table-cell fd-table-status-indicator #rowIndicator></th>\n } @if (showRowNumber) {\n <th fd-table-cell style=\"width: 40px; max-width: 40px\"></th>\n } @if (isCheckList) {\n <th fd-table-cell>\n <fd-checkbox\n name=\"allCheckbox\"\n [ngModel]=\"allChecked\"\n (ngModelChange)=\"onAllCheckbox($event)\"\n ></fd-checkbox>\n </th>\n } @if (!isCheckList && !showRowNumber) {\n <th fd-table-cell class=\"single-select\"></th>\n } @for (column of columns; track _trackByColumn(i, column); let i = $index; let last = $last) {\n <th\n #thRef\n tableth\n fd-table-cell\n resizable\n [index]=\"i\"\n [last]=\"last\"\n [columnsLength]=\"columns.length\"\n [column]=\"column\"\n [tableHeaderMode]=\"tableHeaderMode\"\n [rtl]=\"rtl\"\n [caption]=\"column.Caption | bbbTranslate\"\n [name]=\"column.Name\"\n [icon]=\"column.Icon\"\n [colClass]=\"column.$CSSClassName + ' column__' + column.Caption\"\n [displayType]=\"column.Extra?.IconDisplayTypeEnum\"\n [isImageOrIcon]=\"(column | thImageOrIcon) === true\"\n [disableResize]=\"\n hasSecondaryColumns ||\n disableResize ||\n (tableHeaderMode === 2 && last) ||\n (column | thImageOrIcon) === true\n \"\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\n [disableResponsive]=\"disableResponsive\"\n (sortAscending)=\"sortAscending.emit(column)\"\n (sortDescending)=\"sortDescending.emit(column)\"\n (filter)=\"filter.emit(column)\"\n (resetGridSettings)=\"resetGridSettings.emit()\"\n (widthChange)=\"onColumnWidthChange(column)\"\n (widthChanging)=\"onColumnWidthChanging(i, column, $event)\"\n [style.width]=\"hasSecondaryColumns && last ? '100% !important' : null\"\n >\n @if(!disableHeaderContextMenu){\n <fd-popover #menu>\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"headerValue; context: { $implicit: column }\"></ng-container>\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list>\n <li fd-list-item>\n <a fd-list-link (click)=\"onSortAscending(column, menu)\">\n <fd-menu-addon position=\"before\" glyph=\"sort-ascending\" fd-list-icon></fd-menu-addon>\n <span fd-list-title\n >{{ ('Sort' | bbbTranslate) + ' ' }} {{ 'Ascending' | bbbTranslate }}</span\n >\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"onSortDescending(column, menu)\" bodyClick>\n <fd-menu-addon position=\"before\" glyph=\"sort-descending\" fd-list-icon></fd-menu-addon>\n <span fd-list-title\n >{{ ('Sort' | bbbTranslate) + ' ' }} {{ 'Descending' | bbbTranslate }}</span\n >\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"onFitToContent(column, i)\" bodyClick>\n <fd-menu-addon position=\"before\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ ('Fit Column To Content' | bbbTranslate) + ' ' }}</span>\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"fitToContainer.emit()\" bodyClick>\n <fd-menu-addon position=\"before\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ ('All Columns In Page' | bbbTranslate) + ' ' }}</span>\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"freeColumnSize.emit()\" bodyClick>\n <fd-menu-addon position=\"before\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ ('Free Columns Size' | bbbTranslate) + ' ' }}</span>\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"onResetColumnsSettings()\" bodyClick>\n <fd-menu-addon position=\"before\" glyph=\"reset\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ 'GridSettingBase' | bbbTranslate }}</span>\n </a>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n } @else{\n <ng-container *ngTemplateOutlet=\"headerValue; context: { $implicit: column }\"></ng-container>\n }\n </th>\n } @if (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode) {\n <th\n class=\"col-header col-context-menu\"\n fd-table-cell\n [fitContent]=\"disableOverflowContextMenu\"\n [style.width.px]=\"contextMenuWidth\"\n ></th>\n } @if (showDetailsInRow && !inlineEditMode) {\n <th class=\"col-header col-details\" [style.width]=\"deviceSize === 's' ? '44px' : '120px'\" fd-table-cell></th>\n } @if (showViewButton) {\n <th class=\"col-header col-view\" [style.width.px]=\"36 * (actionList?.length ?? 0) + 8\" fd-table-cell></th>\n } }\n </tr>\n</thead>\n<ng-template #headerValue let-column>\n <div style=\"display: flex\">\n @if ( (column.Extra?.IconDisplayTypeEnum === 'Image' || column.FieldTypeId === 42) && column.Icon) {\n <img [src]=\"column.Icon\" />\n } @else {\n {{ column.Caption | bbbTranslate }}\n }\n </div>\n</ng-template>\n", styles: [":host{display:contents;width:100%}:host.has-toolbar thead{border-top:none!important}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "component", type: i4.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i5.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i5.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "directive", type: i5.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i5.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role", "ariaHidden"] }, { kind: "directive", type: i5.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "component", type: i6.MenuAddonDirective, selector: "fd-menu-addon", inputs: ["position", "submenuIndicator", "ariaHidden"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "directive", type: i8.TableHeaderDirective, selector: "[fdTableHeader], [fd-table-header]", inputs: ["noBorderX", "noBorderY", "nonInteractive"] }, { kind: "directive", type: i8.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i8.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "directive", type: i8.TableStatusIndicatorDirective, selector: "[fdTableStatusIndicator], [fd-table-status-indicator]", inputs: ["status"] }, { kind: "component", type: i3.ResizableComponent, selector: "th[resizable]", inputs: ["disableResize", "rtl"], outputs: ["widthChange", "widthChanging"] }, { kind: "directive", type: i9.TableThDirective, selector: "[tableth]", inputs: ["fieldTypeId", "caption", "icon", "inlineEditMode", "isImageOrIcon", "columnsLength", "tableWidth", "last", "rtl", "column", "disableResponsive", "disableResize", "disableHeaderContextMenu", "tableHeaderMode", "colClass", "displayType", "name", "index"] }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i3.ThImageOrIconePipe, name: "thImageOrIcon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
119
135
|
}
|
|
120
136
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTableHeaderComponent, decorators: [{
|
|
121
137
|
type: Component,
|
|
122
|
-
args: [{ selector: 'bsu-barsa-table-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<thead\n fd-table-header\n [class.inline-edit]=\"inlineEditMode\"\n [class.smallColumns]=\"columnsSmallerThanTableWidth\"\n [style.position]=\"sticky ? 'sticky' : null\"\n #theadRef\n>\n <tr fd-table-row>\n @if (!hideHeader) { @if (rowIndicator) {\n <th fd-table-cell fd-table-status-indicator #rowIndicator></th>\n } @if (showRowNumber) {\n <th fd-table-cell style=\"width: 40px; max-width: 40px\"></th>\n } @if (isCheckList) {\n <th fd-table-cell>\n <fd-checkbox\n name=\"allCheckbox\"\n [ngModel]=\"allChecked\"\n (ngModelChange)=\"onAllCheckbox($event)\"\n ></fd-checkbox>\n </th>\n } @if (!isCheckList && !showRowNumber) {\n <th fd-table-cell class=\"single-select\"></th>\n } @for (column of columns; track _trackByColumn(i, column); let i = $index; let last = $last) {\n <th\n #thRef\n tableth\n fd-table-cell\n resizable\n [index]=\"i\"\n [last]=\"last\"\n [columnsLength]=\"columns.length\"\n [column]=\"column\"\n [tableHeaderMode]=\"tableHeaderMode\"\n [rtl]=\"rtl\"\n [caption]=\"column.Caption | bbbTranslate\"\n [name]=\"column.Name\"\n [icon]=\"column.Icon\"\n [colClass]=\"column.$CSSClassName + ' column__' + column.Caption\"\n [displayType]=\"column.Extra?.IconDisplayTypeEnum\"\n [isImageOrIcon]=\"(column | thImageOrIcon) === true\"\n [disableResize]=\"disableResize
|
|
138
|
+
args: [{ selector: 'bsu-barsa-table-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<thead\n fd-table-header\n [class.inline-edit]=\"inlineEditMode\"\n [class.smallColumns]=\"columnsSmallerThanTableWidth\"\n [style.position]=\"sticky ? 'sticky' : null\"\n #theadRef\n>\n <tr fd-table-row>\n @if (!hideHeader) { @if (rowIndicator) {\n <th fd-table-cell fd-table-status-indicator #rowIndicator></th>\n } @if (showRowNumber) {\n <th fd-table-cell style=\"width: 40px; max-width: 40px\"></th>\n } @if (isCheckList) {\n <th fd-table-cell>\n <fd-checkbox\n name=\"allCheckbox\"\n [ngModel]=\"allChecked\"\n (ngModelChange)=\"onAllCheckbox($event)\"\n ></fd-checkbox>\n </th>\n } @if (!isCheckList && !showRowNumber) {\n <th fd-table-cell class=\"single-select\"></th>\n } @for (column of columns; track _trackByColumn(i, column); let i = $index; let last = $last) {\n <th\n #thRef\n tableth\n fd-table-cell\n resizable\n [index]=\"i\"\n [last]=\"last\"\n [columnsLength]=\"columns.length\"\n [column]=\"column\"\n [tableHeaderMode]=\"tableHeaderMode\"\n [rtl]=\"rtl\"\n [caption]=\"column.Caption | bbbTranslate\"\n [name]=\"column.Name\"\n [icon]=\"column.Icon\"\n [colClass]=\"column.$CSSClassName + ' column__' + column.Caption\"\n [displayType]=\"column.Extra?.IconDisplayTypeEnum\"\n [isImageOrIcon]=\"(column | thImageOrIcon) === true\"\n [disableResize]=\"\n hasSecondaryColumns ||\n disableResize ||\n (tableHeaderMode === 2 && last) ||\n (column | thImageOrIcon) === true\n \"\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\n [disableResponsive]=\"disableResponsive\"\n (sortAscending)=\"sortAscending.emit(column)\"\n (sortDescending)=\"sortDescending.emit(column)\"\n (filter)=\"filter.emit(column)\"\n (resetGridSettings)=\"resetGridSettings.emit()\"\n (widthChange)=\"onColumnWidthChange(column)\"\n (widthChanging)=\"onColumnWidthChanging(i, column, $event)\"\n [style.width]=\"hasSecondaryColumns && last ? '100% !important' : null\"\n >\n @if(!disableHeaderContextMenu){\n <fd-popover #menu>\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"headerValue; context: { $implicit: column }\"></ng-container>\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list>\n <li fd-list-item>\n <a fd-list-link (click)=\"onSortAscending(column, menu)\">\n <fd-menu-addon position=\"before\" glyph=\"sort-ascending\" fd-list-icon></fd-menu-addon>\n <span fd-list-title\n >{{ ('Sort' | bbbTranslate) + ' ' }} {{ 'Ascending' | bbbTranslate }}</span\n >\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"onSortDescending(column, menu)\" bodyClick>\n <fd-menu-addon position=\"before\" glyph=\"sort-descending\" fd-list-icon></fd-menu-addon>\n <span fd-list-title\n >{{ ('Sort' | bbbTranslate) + ' ' }} {{ 'Descending' | bbbTranslate }}</span\n >\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"onFitToContent(column, i)\" bodyClick>\n <fd-menu-addon position=\"before\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ ('Fit Column To Content' | bbbTranslate) + ' ' }}</span>\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"fitToContainer.emit()\" bodyClick>\n <fd-menu-addon position=\"before\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ ('All Columns In Page' | bbbTranslate) + ' ' }}</span>\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"freeColumnSize.emit()\" bodyClick>\n <fd-menu-addon position=\"before\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ ('Free Columns Size' | bbbTranslate) + ' ' }}</span>\n </a>\n </li>\n <li fd-list-item>\n <a fd-list-link (click)=\"onResetColumnsSettings()\" bodyClick>\n <fd-menu-addon position=\"before\" glyph=\"reset\" fd-list-icon></fd-menu-addon>\n <span fd-list-title>{{ 'GridSettingBase' | bbbTranslate }}</span>\n </a>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n } @else{\n <ng-container *ngTemplateOutlet=\"headerValue; context: { $implicit: column }\"></ng-container>\n }\n </th>\n } @if (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode) {\n <th\n class=\"col-header col-context-menu\"\n fd-table-cell\n [fitContent]=\"disableOverflowContextMenu\"\n [style.width.px]=\"contextMenuWidth\"\n ></th>\n } @if (showDetailsInRow && !inlineEditMode) {\n <th class=\"col-header col-details\" [style.width]=\"deviceSize === 's' ? '44px' : '120px'\" fd-table-cell></th>\n } @if (showViewButton) {\n <th class=\"col-header col-view\" [style.width.px]=\"36 * (actionList?.length ?? 0) + 8\" fd-table-cell></th>\n } }\n </tr>\n</thead>\n<ng-template #headerValue let-column>\n <div style=\"display: flex\">\n @if ( (column.Extra?.IconDisplayTypeEnum === 'Image' || column.FieldTypeId === 42) && column.Icon) {\n <img [src]=\"column.Icon\" />\n } @else {\n {{ column.Caption | bbbTranslate }}\n }\n </div>\n</ng-template>\n", styles: [":host{display:contents;width:100%}:host.has-toolbar thead{border-top:none!important}\n"] }]
|
|
123
139
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }], propDecorators: { thList: [{
|
|
124
140
|
type: ViewChildren,
|
|
125
141
|
args: ['thRef', { read: ElementRef }]
|
|
@@ -170,6 +186,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
170
186
|
type: Input
|
|
171
187
|
}], showRowNumber: [{
|
|
172
188
|
type: Input
|
|
189
|
+
}], hasSecondaryColumns: [{
|
|
190
|
+
type: Input
|
|
173
191
|
}], disableResize: [{
|
|
174
192
|
type: Input
|
|
175
193
|
}], disableHeaderContextMenu: [{
|
|
@@ -201,4 +219,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
201
219
|
}], headerRender: [{
|
|
202
220
|
type: Output
|
|
203
221
|
}] } });
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtdGFibGUtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLXRhYmxlLWhlYWRlci9iYXJzYS10YWJsZS1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdGFibGUtaGVhZGVyL2JhcnNhLXRhYmxlLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFFTixZQUFZLEVBQ1osVUFBVSxFQUVWLFNBQVMsRUFFVCxNQUFNLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGFBQWEsRUFJYixvQkFBb0IsRUFDcEIsZUFBZSxFQUNsQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7OztBQVM5QixNQUFNLE9BQU8seUJBQTBCLFNBQVEsYUFBYTtJQTZDeEQ7O09BRUc7SUFDSCxZQUFvQixJQUF1QixFQUFVLFVBQXFCO1FBQ3RFLEtBQUssRUFBRSxDQUFDO1FBRFEsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBakNqRSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFjeEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQzFDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDNUQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBK0MsQ0FBQztRQUNqRixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUE2RCxDQUFDO1FBQzdGLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUMxQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFRLENB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YztzQkFBdkIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBJbnB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgUmVuZGVyZXIyLFxuICAgIGluamVjdCxcbiAgICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCYXNlQ29tcG9uZW50LFxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxuICAgIENvbHVtblJlc2l6ZWRBcmdzLFxuICAgIFRhYmxlSGVhZGVyV2lkdGhNb2RlLFxuICAgIHNldFRhYmxlVGhXaWR0aFxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBVaVRhYmxlVmlld1NldHRpbmcgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC12aWV3JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtYmFyc2EtdGFibGUtaGVhZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyc2EtdGFibGUtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJzYS10YWJsZS1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBCYXJzYVRhYmxlSGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gICAgQFZpZXdDaGlsZHJlbigndGhSZWYnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGhMaXN0OiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxhbnk+PjtcbiAgICBAVmlld0NoaWxkKCd0aGVhZFJlZicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHRoZWFkUmVmOiBFbGVtZW50UmVmO1xuICAgIEBJbnB1dCgpIGFsbENoZWNrZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNDaGVja0xpc3Q6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdO1xuICAgIEBJbnB1dCgpIGZpdFdpZHRoOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbnRleHRNZW51SXRlbXM6IGFueVtdO1xuICAgIEBJbnB1dCgpIGNvbnRleHRNZW51V2lkdGg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBzaG93Vmlld0J1dHRvbjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoYXNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWRlT3Blbkljb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5saW5lRWRpdE1vZGU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUhlYWRlcjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzaG93RGV0YWlsc0luUm93ID0gZmFsc2U7XG4gICAgQElucHV0KCkgdmlld1NldHRpbmc6IFVpVGFibGVWaWV3U2V0dGluZztcbiAgICBASW5wdXQoKSB0YWJsZVdpZHRoOiBudW1iZXI7XG4gICAgQElucHV0KCkgcmVzaXplZEJ5VXNlcjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlUmVzcG9uc2l2ZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhY3Rpb25MaXN0OiBhbnlbXTtcbiAgICBASW5wdXQoKSByb3dJbmRpY2F0b3I6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcnRsOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0aWNreTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzaG93Um93TnVtYmVyOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRpc2FibGVSZXNpemU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzYWJsZUhlYWRlckNvbnRleHRNZW51OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRldmljZVNpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZTtcbiAgICBASW5wdXQoKSB0YWJsZUhlYWRlck1vZGU6IFRhYmxlSGVhZGVyV2lkdGhNb2RlO1xuICAgIEBPdXRwdXQoKSBhbGxDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgY29sdW1uUmVzaXplID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxDb2x1bW5SZXNpemVkQXJncz4+KCk7XG4gICAgQE91dHB1dCgpIGNvbHVtblJlc2l6aW5nID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbjsgd2lkdGg6IG51bWJlciB9PigpO1xuICAgIEBPdXRwdXQoKSBmaXRUb0NvbnRlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uOyB0aERvbTogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgfT4oKTtcbiAgICBAT3V0cHV0KCkgZml0VG9Db250YWluZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGZyZWVDb2x1bW5TaXplID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBzb3J0QXNjZW5kaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIHNvcnREZXNjZW5kaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIGZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8UmVwb3J0Vmlld0NvbHVtbj4oKTtcbiAgICBAT3V0cHV0KCkgcmVzZXRHcmlkU2V0dGluZ3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGhlYWRlclJlbmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+KCk7XG4gICAgY29sdW1uc1NtYWxsZXJUaGFuVGFibGVXaWR0aDogYm9vbGVhbjtcblxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICByZXNpemVIZWFkZXIgPSBmYWxzZTtcbiAgICBlbCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX3JlbmRlcmVyMjogUmVuZGVyZXIyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIGdldCB0aEFycigpOiBIVE1MVGFibGVDZWxsRWxlbWVudFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhMaXN0LnRvQXJyYXkoKS5tYXAoKGMpID0+IGMubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmhlYWRlclJlbmRlci5lbWl0KHRoaXMudGhlYWRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIC8vIHRoaXMuX3ByZXBhcmVDb2x1bW5zV2lkdGgodGhpcy50YWJsZVdpZHRoLCB0aGlzLmNvbHVtbnMsIHRydWUpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICBjb25zdCB7IHRhYmxlSGVhZGVyTW9kZSwgY29sdW1ucyB9ID0gY2hhbmdlcztcbiAgICAgICAgaWYgKHRhYmxlSGVhZGVyTW9kZSAmJiAhdGFibGVIZWFkZXJNb2RlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICBzZXRUYWJsZVRoV2lkdGgodGFibGVIZWFkZXJNb2RlLmN1cnJlbnRWYWx1ZSwgdGhpcy5jb2x1bW5zLCB0aGlzLnRoQXJyLCB0aGlzLl9yZW5kZXJlcjIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW5zICYmICFjb2x1bW5zLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLlJlZnJlc2hUYWJsZVRoV2lkdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU29ydEFzY2VuZGluZyhjb2x1bW4sIG1lbnUpOiB2b2lkIHtcbiAgICAgICAgaWYgKG1lbnUpIHtcbiAgICAgICAgICAgIG1lbnUuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNvcnRBc2NlbmRpbmcuZW1pdChjb2x1bW4pO1xuICAgIH1cbiAgICBvblNvcnREZXNjZW5kaW5nKGNvbHVtbiwgbWVudSk6IHZvaWQge1xuICAgICAgICBpZiAobWVudSkge1xuICAgICAgICAgICAgbWVudS5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ydERlc2NlbmRpbmcuZW1pdChjb2x1bW4pO1xuICAgIH1cbiAgICBvbkZpbHRlcihtZW51KTogdm9pZCB7XG4gICAgICAgIGlmIChtZW51KSB7XG4gICAgICAgICAgICBtZW51LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXIuZW1pdCgpO1xuICAgIH1cbiAgICBvbkZpdFRvQ29udGVudChjb2x1bW4sIGk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0aERvbTogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgPSB0aGlzLnRoQXJyW2ldO1xuICAgICAgICB0aGlzLmZpdFRvQ29udGVudC5lbWl0KHsgY29sdW1uLCB0aERvbSB9KTtcbiAgICB9XG4gICAgb25SZXNldENvbHVtbnNTZXR0aW5ncygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNldEdyaWRTZXR0aW5ncy5lbWl0KCk7XG4gICAgfVxuICAgIG9uQ29sdW1uV2lkdGhDaGFuZ2luZyhpbmRleDogbnVtYmVyLCBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4sIHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVIZWFkZXIgPSB0cnVlO1xuICAgICAgICBjb2x1bW4uV2lkdGggPSB3aWR0aDtcbiAgICAgICAgY29uc3QgdGhMaXN0ID0gdGhpcy50aEFycjtcblxuICAgICAgICBpZiAoaW5kZXggPCB0aExpc3QubGVuZ3RoIC0gMSAmJiB0aGlzLnRhYmxlSGVhZGVyTW9kZSA9PT0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRnJlZUNvbHVtblNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RUaCA9IHRoTGlzdFt0aExpc3QubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUobGFzdFRoLCAnd2lkdGgnLCBgJHtsYXN0VGgub2Zmc2V0V2lkdGh9cHhgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbHVtblJlc2l6aW5nLmVtaXQoeyBjb2x1bW4sIHdpZHRoIH0pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY29sdW1uV2lkdGhDaGFuZ2luZyBudW1iZXI6Jywgd2lkdGgsIGluZGV4KTtcbiAgICB9XG5cbiAgICBvbkNvbHVtbldpZHRoQ2hhbmdlKGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2x1bW4uTmFtZSk7XG4gICAgICAgIGlmICghY29sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2l0aDIgPSBNYXRoLnJvdW5kKGNvbHVtbi5XaWR0aCk7XG4gICAgICAgIGNvbC5XaWR0aCA9IHdpdGgyO1xuICAgICAgICBjb25zdCB0aExpc3QgPSB0aGlzLnRoQXJyO1xuXG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjLCBpKSA9PiB7XG4gICAgICAgICAgICBjLldpZHRoID0gdGhMaXN0W2ldLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgaWYgKGkgIT09IHRoaXMuY29sdW1ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoTGlzdFtpXSwgJ3dpZHRoJywgYCR7Yy5XaWR0aH1weGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoTGlzdFt0aExpc3QubGVuZ3RoIC0gMV0sICd3aWR0aCcsICcxMDAlJyk7XG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXplLmVtaXQodGhpcy5jb2x1bW5zLm1hcCgoYywgaSkgPT4gKHsgbmFtZTogYy5OYW1lLCB3aWR0aDogYy5XaWR0aCwgdGhEb206IHRoTGlzdFtpXSB9KSkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY29sdW1uV2lkdGhDaGFuZ2UnKTtcbiAgICB9XG4gICAgb25BbGxDaGVja2JveChjaGVja2VkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWxsQ2hlY2tib3guZW1pdChjaGVja2VkKTtcbiAgICB9XG4gICAgcHVibGljIFJlZnJlc2hUYWJsZVRoV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHNldFRhYmxlVGhXaWR0aCh0aGlzLnRhYmxlSGVhZGVyTW9kZSwgdGhpcy5jb2x1bW5zLCB0aGlzLnRoQXJyLCB0aGlzLl9yZW5kZXJlcjIpO1xuICAgIH1cbiAgICBfdHJhY2tCeUNvbHVtbihpbmRleDogbnVtYmVyLCBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7Y29sdW1uLk5hbWV9JHtpbmRleH1gO1xuICAgIH1cbn1cbiIsIjx0aGVhZFxuICAgIGZkLXRhYmxlLWhlYWRlclxuICAgIFtjbGFzcy5pbmxpbmUtZWRpdF09XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgW2NsYXNzLnNtYWxsQ29sdW1uc109XCJjb2x1bW5zU21hbGxlclRoYW5UYWJsZVdpZHRoXCJcbiAgICBbc3R5bGUucG9zaXRpb25dPVwic3RpY2t5ID8gJ3N0aWNreScgOiBudWxsXCJcbiAgICAjdGhlYWRSZWZcbj5cbiAgICA8dHIgZmQtdGFibGUtcm93PlxuICAgICAgICBAaWYgKCFoaWRlSGVhZGVyKSB7IEBpZiAocm93SW5kaWNhdG9yKSB7XG4gICAgICAgIDx0aCBmZC10YWJsZS1jZWxsIGZkLXRhYmxlLXN0YXR1cy1pbmRpY2F0b3IgI3Jvd0luZGljYXRvcj48L3RoPlxuICAgICAgICB9IEBpZiAoc2hvd1Jvd051bWJlcikge1xuICAgICAgICA8dGggZmQtdGFibGUtY2VsbCBzdHlsZT1cIndpZHRoOiA0MHB4OyBtYXgtd2lkdGg6IDQwcHhcIj48L3RoPlxuICAgICAgICB9IEBpZiAoaXNDaGVja0xpc3QpIHtcbiAgICAgICAgPHRoIGZkLXRhYmxlLWNlbGw+XG4gICAgICAgICAgICA8ZmQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBuYW1lPVwiYWxsQ2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImFsbENoZWNrZWRcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQWxsQ2hlY2tib3goJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9mZC1jaGVja2JveD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgfSBAaWYgKCFpc0NoZWNrTGlzdCAmJiAhc2hvd1Jvd051bWJlcikge1xuICAgICAgICA8dGggZmQtdGFibGUtY2VsbCBjbGFzcz1cInNpbmdsZS1zZWxlY3RcIj48L3RoPlxuICAgICAgICB9IEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBfdHJhY2tCeUNvbHVtbihpLCBjb2x1bW4pOyBsZXQgaSA9ICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICA8dGhcbiAgICAgICAgICAgICN0aFJlZlxuICAgICAgICAgICAgdGFibGV0aFxuICAgICAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICAgICAgcmVzaXphYmxlXG4gICAgICAgICAgICBbaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICBbbGFzdF09XCJsYXN0XCJcbiAgICAgICAgICAgIFtjb2x1bW5zTGVuZ3RoXT1cImNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFt0YWJsZUhlYWRlck1vZGVdPVwidGFibGVIZWFkZXJNb2RlXCJcbiAgICAgICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgICAgIFtjYXB0aW9uXT1cImNvbHVtbi5DYXB0aW9uIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5OYW1lXCJcbiAgICAgICAgICAgIFtpY29uXT1cImNvbHVtbi5JY29uXCJcbiAgICAgICAgICAgIFtjb2xDbGFzc109XCJjb2x1bW4uJENTU0NsYXNzTmFtZSArICcgY29sdW1uX18nICsgY29sdW1uLkNhcHRpb25cIlxuICAgICAgICAgICAgW2Rpc3BsYXlUeXBlXT1cImNvbHVtbi5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bVwiXG4gICAgICAgICAgICBbaXNJbWFnZU9ySWNvbl09XCIoY29sdW1uIHwgdGhJbWFnZU9ySWNvbikgPT09IHRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVSZXNpemVdPVwiZGlzYWJsZVJlc2l6ZSB8fCAodGFibGVIZWFkZXJNb2RlID09PSAyICYmIGxhc3QpIHx8IChjb2x1bW4gfCB0aEltYWdlT3JJY29uKSA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZUhlYWRlckNvbnRleHRNZW51XT1cImRpc2FibGVIZWFkZXJDb250ZXh0TWVudVwiXG4gICAgICAgICAgICBbZGlzYWJsZVJlc3BvbnNpdmVdPVwiZGlzYWJsZVJlc3BvbnNpdmVcIlxuICAgICAgICAgICAgKHNvcnRBc2NlbmRpbmcpPVwic29ydEFzY2VuZGluZy5lbWl0KGNvbHVtbilcIlxuICAgICAgICAgICAgKHNvcnREZXNjZW5kaW5nKT1cInNvcnREZXNjZW5kaW5nLmVtaXQoY29sdW1uKVwiXG4gICAgICAgICAgICAoZmlsdGVyKT1cImZpbHRlci5lbWl0KGNvbHVtbilcIlxuICAgICAgICAgICAgKHJlc2V0R3JpZFNldHRpbmdzKT1cInJlc2V0R3JpZFNldHRpbmdzLmVtaXQoKVwiXG4gICAgICAgICAgICAod2lkdGhDaGFuZ2UpPVwib25Db2x1bW5XaWR0aENoYW5nZShjb2x1bW4pXCJcbiAgICAgICAgICAgICh3aWR0aENoYW5naW5nKT1cIm9uQ29sdW1uV2lkdGhDaGFuZ2luZyhpLCBjb2x1bW4sICRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYoIWRpc2FibGVIZWFkZXJDb250ZXh0TWVudSl7XG4gICAgICAgICAgICA8ZmQtcG9wb3ZlciAjbWVudT5cbiAgICAgICAgICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVmFsdWU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgICAgIDxmZC1wb3BvdmVyLWJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx1bCBmZC1saXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBmZC1saXN0LWxpbmsgKGNsaWNrKT1cIm9uU29ydEFzY2VuZGluZyhjb2x1bW4sIG1lbnUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZ2x5cGg9XCJzb3J0LWFzY2VuZGluZ1wiIGZkLWxpc3QtaWNvbj48L2ZkLW1lbnUtYWRkb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyAoJ1NvcnQnIHwgYmJiVHJhbnNsYXRlKSArICcgJyB9fSB7eyAnQXNjZW5kaW5nJyB8IGJiYlRyYW5zbGF0ZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZmQtbGlzdC1saW5rIChjbGljayk9XCJvblNvcnREZXNjZW5kaW5nKGNvbHVtbiwgbWVudSlcIiBib2R5Q2xpY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZ2x5cGg9XCJzb3J0LWRlc2NlbmRpbmdcIiBmZC1saXN0LWljb24+PC9mZC1tZW51LWFkZG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgKCdTb3J0JyB8IGJiYlRyYW5zbGF0ZSkgKyAnICcgfX0ge3sgJ0Rlc2NlbmRpbmcnIHwgYmJiVHJhbnNsYXRlIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBmZC1saXN0LWxpbmsgKGNsaWNrKT1cIm9uRml0VG9Db250ZW50KGNvbHVtbiwgaSlcIiBib2R5Q2xpY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZmQtbGlzdC1pY29uPjwvZmQtbWVudS1hZGRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyAoJ0ZpdCBDb2x1bW4gVG8gQ29udGVudCcgfCBiYmJUcmFuc2xhdGUpICsgJyAnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGZkLWxpc3QtbGluayAoY2xpY2spPVwiZml0VG9Db250YWluZXIuZW1pdCgpXCIgYm9keUNsaWNrPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtbWVudS1hZGRvbiBwb3NpdGlvbj1cImJlZm9yZVwiIGZkLWxpc3QtaWNvbj48L2ZkLW1lbnUtYWRkb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGU+e3sgKCdBbGwgQ29sdW1ucyBJbiBQYWdlJyB8IGJiYlRyYW5zbGF0ZSkgKyAnICcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZmQtbGlzdC1saW5rIChjbGljayk9XCJmcmVlQ29sdW1uU2l6ZS5lbWl0KClcIiBib2R5Q2xpY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZmQtbGlzdC1pY29uPjwvZmQtbWVudS1hZGRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyAoJ0ZyZWUgQ29sdW1ucyBTaXplJyB8IGJiYlRyYW5zbGF0ZSkgKyAnICcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZmQtbGlzdC1saW5rIChjbGljayk9XCJvblJlc2V0Q29sdW1uc1NldHRpbmdzKClcIiBib2R5Q2xpY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZ2x5cGg9XCJyZXNldFwiIGZkLWxpc3QtaWNvbj48L2ZkLW1lbnUtYWRkb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGU+e3sgJ0dyaWRTZXR0aW5nQmFzZScgfCBiYmJUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlcj5cbiAgICAgICAgICAgIH0gQGVsc2V7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVmFsdWU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L3RoPlxuICAgICAgICB9IEBpZiAoY29udGV4dE1lbnVJdGVtcyAmJiBjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA+IDAgJiYgIWlubGluZUVkaXRNb2RlKSB7XG4gICAgICAgIDx0aFxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtaGVhZGVyIGNvbC1jb250ZXh0LW1lbnVcIlxuICAgICAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICAgICAgW2ZpdENvbnRlbnRdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbnRleHRNZW51V2lkdGhcIlxuICAgICAgICA+PC90aD5cbiAgICAgICAgfSBAaWYgKHNob3dEZXRhaWxzSW5Sb3cgJiYgIWlubGluZUVkaXRNb2RlKSB7XG4gICAgICAgIDx0aCBjbGFzcz1cImNvbC1oZWFkZXIgY29sLWRldGFpbHNcIiBbc3R5bGUud2lkdGhdPVwiZGV2aWNlU2l6ZSA9PT0gJ3MnID8gJzQ0cHgnIDogJzEyMHB4J1wiIGZkLXRhYmxlLWNlbGw+PC90aD5cbiAgICAgICAgfSBAaWYgKHNob3dWaWV3QnV0dG9uKSB7XG4gICAgICAgIDx0aCBjbGFzcz1cImNvbC1oZWFkZXIgY29sLXZpZXdcIiBbc3R5bGUud2lkdGgucHhdPVwiMzYgKiAoYWN0aW9uTGlzdD8ubGVuZ3RoID8/IDApICsgOFwiIGZkLXRhYmxlLWNlbGw+PC90aD5cbiAgICAgICAgfSB9XG4gICAgPC90cj5cbjwvdGhlYWQ+XG48bmctdGVtcGxhdGUgI2hlYWRlclZhbHVlIGxldC1jb2x1bW4+XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIj5cbiAgICAgICAgQGlmICggKGNvbHVtbi5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bSA9PT0gJ0ltYWdlJyB8fCBjb2x1bW4uRmllbGRUeXBlSWQgPT09IDQyKSAmJiBjb2x1bW4uSWNvbikge1xuICAgICAgICA8aW1nIFtzcmNdPVwiY29sdW1uLkljb25cIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAge3sgY29sdW1uLkNhcHRpb24gfCBiYmJUcmFuc2xhdGUgfX1cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtdGFibGUtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLXRhYmxlLWhlYWRlci9iYXJzYS10YWJsZS1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdGFibGUtaGVhZGVyL2JhcnNhLXRhYmxlLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFFTixZQUFZLEVBQ1osVUFBVSxFQUVWLFNBQVMsRUFFVCxNQUFNLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGFBQWEsRUFJYixvQkFBb0IsRUFDcEIsZUFBZSxFQUNsQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7OztBQVM5QixNQUFNLE9BQU8seUJBQTBCLFNBQVEsYUFBYTtJQThDeEQ7O09BRUc7SUFDSCxZQUFvQixJQUF1QixFQUFVLFVBQXFCO1FBQ3RFLEtBQUssRUFBRSxDQUFDO1FBRFEsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBbENqRSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFleEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQzFDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDNUQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBK0MsQ0FBQztRQUNqRixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUE2RCxDQUFDO1FBQzdGLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUMxQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFRLENB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QVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBJbnB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgUmVuZGVyZXIyLFxuICAgIGluamVjdCxcbiAgICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCYXNlQ29tcG9uZW50LFxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxuICAgIENvbHVtblJlc2l6ZWRBcmdzLFxuICAgIFRhYmxlSGVhZGVyV2lkdGhNb2RlLFxuICAgIHNldFRhYmxlVGhXaWR0aFxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBVaVRhYmxlVmlld1NldHRpbmcgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC12aWV3JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtYmFyc2EtdGFibGUtaGVhZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyc2EtdGFibGUtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJzYS10YWJsZS1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBCYXJzYVRhYmxlSGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gICAgQFZpZXdDaGlsZHJlbigndGhSZWYnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGhMaXN0OiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxhbnk+PjtcbiAgICBAVmlld0NoaWxkKCd0aGVhZFJlZicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHRoZWFkUmVmOiBFbGVtZW50UmVmO1xuICAgIEBJbnB1dCgpIGFsbENoZWNrZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNDaGVja0xpc3Q6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdO1xuICAgIEBJbnB1dCgpIGZpdFdpZHRoOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbnRleHRNZW51SXRlbXM6IGFueVtdO1xuICAgIEBJbnB1dCgpIGNvbnRleHRNZW51V2lkdGg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBzaG93Vmlld0J1dHRvbjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoYXNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWRlT3Blbkljb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5saW5lRWRpdE1vZGU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUhlYWRlcjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzaG93RGV0YWlsc0luUm93ID0gZmFsc2U7XG4gICAgQElucHV0KCkgdmlld1NldHRpbmc6IFVpVGFibGVWaWV3U2V0dGluZztcbiAgICBASW5wdXQoKSB0YWJsZVdpZHRoOiBudW1iZXI7XG4gICAgQElucHV0KCkgcmVzaXplZEJ5VXNlcjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlUmVzcG9uc2l2ZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhY3Rpb25MaXN0OiBhbnlbXTtcbiAgICBASW5wdXQoKSByb3dJbmRpY2F0b3I6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcnRsOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0aWNreTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzaG93Um93TnVtYmVyOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhhc1NlY29uZGFyeUNvbHVtbnM6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzYWJsZVJlc2l6ZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlSGVhZGVyQ29udGV4dE1lbnU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGV2aWNlU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplO1xuICAgIEBJbnB1dCgpIHRhYmxlSGVhZGVyTW9kZTogVGFibGVIZWFkZXJXaWR0aE1vZGU7XG4gICAgQE91dHB1dCgpIGFsbENoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSBjb2x1bW5SZXNpemUgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PENvbHVtblJlc2l6ZWRBcmdzPj4oKTtcbiAgICBAT3V0cHV0KCkgY29sdW1uUmVzaXppbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uOyB3aWR0aDogbnVtYmVyIH0+KCk7XG4gICAgQE91dHB1dCgpIGZpdFRvQ29udGVudCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW47IHRoRG9tOiBIVE1MVGFibGVDZWxsRWxlbWVudCB9PigpO1xuICAgIEBPdXRwdXQoKSBmaXRUb0NvbnRhaW5lciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgZnJlZUNvbHVtblNpemUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIHNvcnRBc2NlbmRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgc29ydERlc2NlbmRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgZmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjxSZXBvcnRWaWV3Q29sdW1uPigpO1xuICAgIEBPdXRwdXQoKSByZXNldEdyaWRTZXR0aW5ncyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgaGVhZGVyUmVuZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudD4oKTtcbiAgICBjb2x1bW5zU21hbGxlclRoYW5UYWJsZVdpZHRoOiBib29sZWFuO1xuXG4gICAgc3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHJlc2l6ZUhlYWRlciA9IGZhbHNlO1xuICAgIGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIC8qKlxuICAgICAqXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBfcmVuZGVyZXIyOiBSZW5kZXJlcjIpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgZ2V0IHRoQXJyKCk6IEhUTUxUYWJsZUNlbGxFbGVtZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aExpc3QudG9BcnJheSgpLm1hcCgoYykgPT4gYy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaGVhZGVyUmVuZGVyLmVtaXQodGhpcy50aGVhZFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgLy8gdGhpcy5fcHJlcGFyZUNvbHVtbnNXaWR0aCh0aGlzLnRhYmxlV2lkdGgsIHRoaXMuY29sdW1ucywgdHJ1ZSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIGNvbnN0IHsgdGFibGVIZWFkZXJNb2RlLCBjb2x1bW5zIH0gPSBjaGFuZ2VzO1xuICAgICAgICBpZiAodGFibGVIZWFkZXJNb2RlICYmICF0YWJsZUhlYWRlck1vZGUuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHNldFRhYmxlVGhXaWR0aCh0YWJsZUhlYWRlck1vZGUuY3VycmVudFZhbHVlLCB0aGlzLmNvbHVtbnMsIHRoaXMudGhBcnIsIHRoaXMuX3JlbmRlcmVyMik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbnMgJiYgIWNvbHVtbnMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuUmVmcmVzaFRhYmxlVGhXaWR0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Tb3J0QXNjZW5kaW5nKGNvbHVtbiwgbWVudSk6IHZvaWQge1xuICAgICAgICBpZiAobWVudSkge1xuICAgICAgICAgICAgbWVudS5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ydEFzY2VuZGluZy5lbWl0KGNvbHVtbik7XG4gICAgfVxuICAgIG9uU29ydERlc2NlbmRpbmcoY29sdW1uLCBtZW51KTogdm9pZCB7XG4gICAgICAgIGlmIChtZW51KSB7XG4gICAgICAgICAgICBtZW51LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zb3J0RGVzY2VuZGluZy5lbWl0KGNvbHVtbik7XG4gICAgfVxuICAgIG9uRmlsdGVyKG1lbnUpOiB2b2lkIHtcbiAgICAgICAgaWYgKG1lbnUpIHtcbiAgICAgICAgICAgIG1lbnUuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlci5lbWl0KCk7XG4gICAgfVxuICAgIG9uRml0VG9Db250ZW50KGNvbHVtbiwgaTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoRG9tOiBIVE1MVGFibGVDZWxsRWxlbWVudCA9IHRoaXMudGhBcnJbaV07XG4gICAgICAgIHRoaXMuZml0VG9Db250ZW50LmVtaXQoeyBjb2x1bW4sIHRoRG9tIH0pO1xuICAgIH1cbiAgICBvblJlc2V0Q29sdW1uc1NldHRpbmdzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2V0R3JpZFNldHRpbmdzLmVtaXQoKTtcbiAgICB9XG4gICAgb25Db2x1bW5XaWR0aENoYW5naW5nKGluZGV4OiBudW1iZXIsIGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbiwgd2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZUhlYWRlciA9IHRydWU7XG4gICAgICAgIGNvbHVtbi5XaWR0aCA9IHdpZHRoO1xuICAgICAgICBjb25zdCB0aExpc3QgPSB0aGlzLnRoQXJyO1xuXG4gICAgICAgIGlmIChpbmRleCA8IHRoTGlzdC5sZW5ndGggLSAxICYmIHRoaXMudGFibGVIZWFkZXJNb2RlID09PSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GcmVlQ29sdW1uU2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgbGFzdFRoID0gdGhMaXN0W3RoTGlzdC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShsYXN0VGgsICd3aWR0aCcsIGAke2xhc3RUaC5vZmZzZXRXaWR0aH1weGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXppbmcuZW1pdCh7IGNvbHVtbiwgd2lkdGggfSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjb2x1bW5XaWR0aENoYW5naW5nIG51bWJlcjonLCB3aWR0aCwgaW5kZXgpO1xuICAgIH1cblxuICAgIG9uQ29sdW1uV2lkdGhDaGFuZ2UoY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuY29sdW1ucy5maW5kKChjKSA9PiBjLk5hbWUgPT09IGNvbHVtbi5OYW1lKTtcbiAgICAgICAgaWYgKCFjb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aXRoMiA9IE1hdGgucm91bmQoY29sdW1uLldpZHRoKTtcbiAgICAgICAgY29sLldpZHRoID0gd2l0aDI7XG4gICAgICAgIGNvbnN0IHRoTGlzdCA9IHRoaXMudGhBcnI7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGMsIGkpID0+IHtcbiAgICAgICAgICAgIGMuV2lkdGggPSB0aExpc3RbaV0ub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBpZiAoaSAhPT0gdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhMaXN0W2ldLCAnd2lkdGgnLCBgJHtjLldpZHRofXB4YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhMaXN0W3RoTGlzdC5sZW5ndGggLSAxXSwgJ3dpZHRoJywgJzEwMCUnKTtcbiAgICAgICAgdGhpcy5jb2x1bW5SZXNpemUuZW1pdCh0aGlzLmNvbHVtbnMubWFwKChjLCBpKSA9PiAoeyBuYW1lOiBjLk5hbWUsIHdpZHRoOiBjLldpZHRoLCB0aERvbTogdGhMaXN0W2ldIH0pKSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjb2x1bW5XaWR0aENoYW5nZScpO1xuICAgIH1cbiAgICBvbkFsbENoZWNrYm94KGNoZWNrZWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hbGxDaGVja2JveC5lbWl0KGNoZWNrZWQpO1xuICAgIH1cbiAgICBwdWJsaWMgU2V0Q29sdW1uV2lkdGhUb1RoV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGhBcnIuZm9yRWFjaCgodGgsIGkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1tpXS5XaWR0aCA9IHRoLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2ldLiRXaWR0aCA9IGAke3RoLm9mZnNldFdpZHRofXB4YDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBTZXRDb2x1bW5XaWR0aFRvUGVyY2VudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWxsV2lkdGggPSB0aGlzLnRoZWFkUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIHRoaXMudGhBcnIuZm9yRWFjaCgodGgsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHggPSAodGgub2Zmc2V0V2lkdGggKiAxMDApIC8gYWxsV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbaV0uJEZpdENvbnRhaW5lcldpZHRoID0gYCR7eH0lYDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBSZWZyZXNoVGFibGVUaFdpZHRoKCk6IHZvaWQge1xuICAgICAgICBzZXRUYWJsZVRoV2lkdGgodGhpcy50YWJsZUhlYWRlck1vZGUsIHRoaXMuY29sdW1ucywgdGhpcy50aEFyciwgdGhpcy5fcmVuZGVyZXIyKTtcbiAgICB9XG4gICAgcHVibGljIFRhYmxlVGhGaXRUb0NhcHRpb24oKTogdm9pZCB7XG4gICAgICAgIHNldFRhYmxlVGhXaWR0aChUYWJsZUhlYWRlcldpZHRoTW9kZS5Db2x1bW5XaWR0aCwgdGhpcy5jb2x1bW5zLCB0aGlzLnRoQXJyLCB0aGlzLl9yZW5kZXJlcjIpO1xuICAgIH1cbiAgICBfdHJhY2tCeUNvbHVtbihpbmRleDogbnVtYmVyLCBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7Y29sdW1uLk5hbWV9JHtpbmRleH1gO1xuICAgIH1cbn1cbiIsIjx0aGVhZFxuICAgIGZkLXRhYmxlLWhlYWRlclxuICAgIFtjbGFzcy5pbmxpbmUtZWRpdF09XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgW2NsYXNzLnNtYWxsQ29sdW1uc109XCJjb2x1bW5zU21hbGxlclRoYW5UYWJsZVdpZHRoXCJcbiAgICBbc3R5bGUucG9zaXRpb25dPVwic3RpY2t5ID8gJ3N0aWNreScgOiBudWxsXCJcbiAgICAjdGhlYWRSZWZcbj5cbiAgICA8dHIgZmQtdGFibGUtcm93PlxuICAgICAgICBAaWYgKCFoaWRlSGVhZGVyKSB7IEBpZiAocm93SW5kaWNhdG9yKSB7XG4gICAgICAgIDx0aCBmZC10YWJsZS1jZWxsIGZkLXRhYmxlLXN0YXR1cy1pbmRpY2F0b3IgI3Jvd0luZGljYXRvcj48L3RoPlxuICAgICAgICB9IEBpZiAoc2hvd1Jvd051bWJlcikge1xuICAgICAgICA8dGggZmQtdGFibGUtY2VsbCBzdHlsZT1cIndpZHRoOiA0MHB4OyBtYXgtd2lkdGg6IDQwcHhcIj48L3RoPlxuICAgICAgICB9IEBpZiAoaXNDaGVja0xpc3QpIHtcbiAgICAgICAgPHRoIGZkLXRhYmxlLWNlbGw+XG4gICAgICAgICAgICA8ZmQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBuYW1lPVwiYWxsQ2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImFsbENoZWNrZWRcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQWxsQ2hlY2tib3goJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9mZC1jaGVja2JveD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgfSBAaWYgKCFpc0NoZWNrTGlzdCAmJiAhc2hvd1Jvd051bWJlcikge1xuICAgICAgICA8dGggZmQtdGFibGUtY2VsbCBjbGFzcz1cInNpbmdsZS1zZWxlY3RcIj48L3RoPlxuICAgICAgICB9IEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBfdHJhY2tCeUNvbHVtbihpLCBjb2x1bW4pOyBsZXQgaSA9ICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICA8dGhcbiAgICAgICAgICAgICN0aFJlZlxuICAgICAgICAgICAgdGFibGV0aFxuICAgICAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICAgICAgcmVzaXphYmxlXG4gICAgICAgICAgICBbaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICBbbGFzdF09XCJsYXN0XCJcbiAgICAgICAgICAgIFtjb2x1bW5zTGVuZ3RoXT1cImNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFt0YWJsZUhlYWRlck1vZGVdPVwidGFibGVIZWFkZXJNb2RlXCJcbiAgICAgICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgICAgIFtjYXB0aW9uXT1cImNvbHVtbi5DYXB0aW9uIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5OYW1lXCJcbiAgICAgICAgICAgIFtpY29uXT1cImNvbHVtbi5JY29uXCJcbiAgICAgICAgICAgIFtjb2xDbGFzc109XCJjb2x1bW4uJENTU0NsYXNzTmFtZSArICcgY29sdW1uX18nICsgY29sdW1uLkNhcHRpb25cIlxuICAgICAgICAgICAgW2Rpc3BsYXlUeXBlXT1cImNvbHVtbi5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bVwiXG4gICAgICAgICAgICBbaXNJbWFnZU9ySWNvbl09XCIoY29sdW1uIHwgdGhJbWFnZU9ySWNvbikgPT09IHRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVSZXNpemVdPVwiXG4gICAgICAgICAgICAgICAgaGFzU2Vjb25kYXJ5Q29sdW1ucyB8fFxuICAgICAgICAgICAgICAgIGRpc2FibGVSZXNpemUgfHxcbiAgICAgICAgICAgICAgICAodGFibGVIZWFkZXJNb2RlID09PSAyICYmIGxhc3QpIHx8XG4gICAgICAgICAgICAgICAgKGNvbHVtbiB8IHRoSW1hZ2VPckljb24pID09PSB0cnVlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2Rpc2FibGVIZWFkZXJDb250ZXh0TWVudV09XCJkaXNhYmxlSGVhZGVyQ29udGV4dE1lbnVcIlxuICAgICAgICAgICAgW2Rpc2FibGVSZXNwb25zaXZlXT1cImRpc2FibGVSZXNwb25zaXZlXCJcbiAgICAgICAgICAgIChzb3J0QXNjZW5kaW5nKT1cInNvcnRBc2NlbmRpbmcuZW1pdChjb2x1bW4pXCJcbiAgICAgICAgICAgIChzb3J0RGVzY2VuZGluZyk9XCJzb3J0RGVzY2VuZGluZy5lbWl0KGNvbHVtbilcIlxuICAgICAgICAgICAgKGZpbHRlcik9XCJmaWx0ZXIuZW1pdChjb2x1bW4pXCJcbiAgICAgICAgICAgIChyZXNldEdyaWRTZXR0aW5ncyk9XCJyZXNldEdyaWRTZXR0aW5ncy5lbWl0KClcIlxuICAgICAgICAgICAgKHdpZHRoQ2hhbmdlKT1cIm9uQ29sdW1uV2lkdGhDaGFuZ2UoY29sdW1uKVwiXG4gICAgICAgICAgICAod2lkdGhDaGFuZ2luZyk9XCJvbkNvbHVtbldpZHRoQ2hhbmdpbmcoaSwgY29sdW1uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJoYXNTZWNvbmRhcnlDb2x1bW5zICYmIGxhc3QgPyAnMTAwJSAhaW1wb3J0YW50JyA6IG51bGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYoIWRpc2FibGVIZWFkZXJDb250ZXh0TWVudSl7XG4gICAgICAgICAgICA8ZmQtcG9wb3ZlciAjbWVudT5cbiAgICAgICAgICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVmFsdWU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgICAgIDxmZC1wb3BvdmVyLWJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx1bCBmZC1saXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBmZC1saXN0LWxpbmsgKGNsaWNrKT1cIm9uU29ydEFzY2VuZGluZyhjb2x1bW4sIG1lbnUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZ2x5cGg9XCJzb3J0LWFzY2VuZGluZ1wiIGZkLWxpc3QtaWNvbj48L2ZkLW1lbnUtYWRkb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyAoJ1NvcnQnIHwgYmJiVHJhbnNsYXRlKSArICcgJyB9fSB7eyAnQXNjZW5kaW5nJyB8IGJiYlRyYW5zbGF0ZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZmQtbGlzdC1saW5rIChjbGljayk9XCJvblNvcnREZXNjZW5kaW5nKGNvbHVtbiwgbWVudSlcIiBib2R5Q2xpY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZ2x5cGg9XCJzb3J0LWRlc2NlbmRpbmdcIiBmZC1saXN0LWljb24+PC9mZC1tZW51LWFkZG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgKCdTb3J0JyB8IGJiYlRyYW5zbGF0ZSkgKyAnICcgfX0ge3sgJ0Rlc2NlbmRpbmcnIHwgYmJiVHJhbnNsYXRlIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBmZC1saXN0LWxpbmsgKGNsaWNrKT1cIm9uRml0VG9Db250ZW50KGNvbHVtbiwgaSlcIiBib2R5Q2xpY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZmQtbGlzdC1pY29uPjwvZmQtbWVudS1hZGRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyAoJ0ZpdCBDb2x1bW4gVG8gQ29udGVudCcgfCBiYmJUcmFuc2xhdGUpICsgJyAnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGZkLWxpc3QtbGluayAoY2xpY2spPVwiZml0VG9Db250YWluZXIuZW1pdCgpXCIgYm9keUNsaWNrPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtbWVudS1hZGRvbiBwb3NpdGlvbj1cImJlZm9yZVwiIGZkLWxpc3QtaWNvbj48L2ZkLW1lbnUtYWRkb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGU+e3sgKCdBbGwgQ29sdW1ucyBJbiBQYWdlJyB8IGJiYlRyYW5zbGF0ZSkgKyAnICcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZmQtbGlzdC1saW5rIChjbGljayk9XCJmcmVlQ29sdW1uU2l6ZS5lbWl0KClcIiBib2R5Q2xpY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZmQtbGlzdC1pY29uPjwvZmQtbWVudS1hZGRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyAoJ0ZyZWUgQ29sdW1ucyBTaXplJyB8IGJiYlRyYW5zbGF0ZSkgKyAnICcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZmQtbGlzdC1saW5rIChjbGljayk9XCJvblJlc2V0Q29sdW1uc1NldHRpbmdzKClcIiBib2R5Q2xpY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tZW51LWFkZG9uIHBvc2l0aW9uPVwiYmVmb3JlXCIgZ2x5cGg9XCJyZXNldFwiIGZkLWxpc3QtaWNvbj48L2ZkLW1lbnUtYWRkb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGU+e3sgJ0dyaWRTZXR0aW5nQmFzZScgfCBiYmJUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlcj5cbiAgICAgICAgICAgIH0gQGVsc2V7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVmFsdWU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L3RoPlxuICAgICAgICB9IEBpZiAoY29udGV4dE1lbnVJdGVtcyAmJiBjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA+IDAgJiYgIWlubGluZUVkaXRNb2RlKSB7XG4gICAgICAgIDx0aFxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtaGVhZGVyIGNvbC1jb250ZXh0LW1lbnVcIlxuICAgICAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICAgICAgW2ZpdENvbnRlbnRdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbnRleHRNZW51V2lkdGhcIlxuICAgICAgICA+PC90aD5cbiAgICAgICAgfSBAaWYgKHNob3dEZXRhaWxzSW5Sb3cgJiYgIWlubGluZUVkaXRNb2RlKSB7XG4gICAgICAgIDx0aCBjbGFzcz1cImNvbC1oZWFkZXIgY29sLWRldGFpbHNcIiBbc3R5bGUud2lkdGhdPVwiZGV2aWNlU2l6ZSA9PT0gJ3MnID8gJzQ0cHgnIDogJzEyMHB4J1wiIGZkLXRhYmxlLWNlbGw+PC90aD5cbiAgICAgICAgfSBAaWYgKHNob3dWaWV3QnV0dG9uKSB7XG4gICAgICAgIDx0aCBjbGFzcz1cImNvbC1oZWFkZXIgY29sLXZpZXdcIiBbc3R5bGUud2lkdGgucHhdPVwiMzYgKiAoYWN0aW9uTGlzdD8ubGVuZ3RoID8/IDApICsgOFwiIGZkLXRhYmxlLWNlbGw+PC90aD5cbiAgICAgICAgfSB9XG4gICAgPC90cj5cbjwvdGhlYWQ+XG48bmctdGVtcGxhdGUgI2hlYWRlclZhbHVlIGxldC1jb2x1bW4+XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIj5cbiAgICAgICAgQGlmICggKGNvbHVtbi5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bSA9PT0gJ0ltYWdlJyB8fCBjb2x1bW4uRmllbGRUeXBlSWQgPT09IDQyKSAmJiBjb2x1bW4uSWNvbikge1xuICAgICAgICA8aW1nIFtzcmNdPVwiY29sdW1uLkljb25cIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAge3sgY29sdW1uLkNhcHRpb24gfCBiYmJUcmFuc2xhdGUgfX1cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|