barsa-sap-ui 2.2.40 → 2.2.41
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-card-row-payam/barsa-card-row-payam.component.mjs +1 -1
- package/esm2022/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +1 -1
- package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +3 -3
- package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +3 -3
- package/esm2022/lib/captcha-field/captcha-field.component.mjs +11 -6
- package/esm2022/lib/column-renderer/column-renderer.component.mjs +5 -3
- package/esm2022/lib/file-viewer-popover/file-viewer-popover.component.mjs +5 -3
- package/esm2022/lib/list-item/list-item.component.mjs +1 -1
- package/esm2022/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +28 -4
- package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +3 -3
- package/fesm2022/barsa-sap-ui.mjs +50 -19
- package/fesm2022/barsa-sap-ui.mjs.map +1 -1
- package/lib/captcha-field/captcha-field.component.d.ts +2 -1
- package/lib/column-renderer/column-renderer.component.d.ts +2 -1
- package/lib/file-viewer-popover/file-viewer-popover.component.d.ts +2 -1
- package/lib/ui-multi-select-combo/ui-multi-select-combo.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -259,11 +259,11 @@ export class UiTableViewComponent extends ReportViewBaseComponent {
|
|
|
259
259
|
this._renderer2.setStyle(this._el.nativeElement, 'width', this._width);
|
|
260
260
|
}
|
|
261
261
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiTableViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
262
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: UiTableViewComponent, selector: "bsu-ui-table-view", inputs: { columnWidth: "columnWidth", minWidth: "minWidth", minHeight: "minHeight", disableResize: "disableResize", disableHeaderContextMenu: "disableHeaderContextMenu", rowResizer: "rowResizer", enableResizing: "enableResizing", disableFixedTableLayout: "disableFixedTableLayout" }, host: { properties: { "style.height.px": "this.height", "style.max-height": "this.maxHeight" } }, viewQueries: [{ propertyName: "_tableRef", first: true, predicate: ["tableTpl"], descendants: true, read: ElementRef, static: true }, { propertyName: "_tableHeaderComponent", first: true, predicate: BarsaTableHeaderComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<table\r\n fd-table\r\n #tableTpl\r\n #headerBottomObserver\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onTableVisibilityChange($event, headerBottomObserver)\"\r\n [popIn]=\"popin\"\r\n [class.table-fixed]=\"\r\n !contextView?.Grid_HideHeader && (!popin || secondaryColumns.length === 0) && !disableFixedTableLayout\r\n \"\r\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true\"\r\n [noBorderY]=\"viewSetting?.NoVerticalBorders === true || (popin && secondaryColumns.length > 0)\"\r\n>\r\n @if (columns | mergeFieldsToColumns: viewSetting?.MergeFieldsToColumns?.MoDataList; as mergeFieldsToColumns) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate;\r\n context: { $implicit: mergeFieldsToColumns, moDataListCount: moDataList?.length }\r\n \"\r\n ></ng-container>\r\n @if (moDataList?.length) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n bodyTemplate;\r\n context: { $implicit: mergeFieldsToColumns, previewColumn: allColumns | findPreviewColumn }\r\n \"\r\n ></ng-container>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: mergeFieldsToColumns }\"></ng-container>\r\n } }\r\n</table>\r\n<!--renderColumn-->\r\n\r\n@if (!moDataList?.length) {\r\n<bsu-no-data\r\n [class.no-topborder]=\"!hideToolbar\"\r\n [class.noborder]=\"contextView.Grid_HideHeader && hideToolbar\"\r\n [simple]=\"true\"\r\n>\r\n</bsu-no-data>\r\n}\r\n\r\n<ng-template #headerTemplate let-columns let-moDataListCount>\r\n <bsu-barsa-table-header\r\n [sticky]=\"stickyEnable()\"\r\n [hasSecondaryColumns]=\"secondaryColumns.length > 0\"\r\n [class.has-toolbar]=\"!hideToolbar\"\r\n [style.pointer-events]=\"moDataListCount ? 'auto' : 'none'\"\r\n [tableWidth]=\"elWidth\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [resizedByUser]=\"resizedByUser\"\r\n [tableHeaderMode]=\"tableHeaderMode\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [allChecked]=\"allChecked\"\r\n [rtl]=\"rtl\"\r\n [actionList]=\"actionList\"\r\n [disableResponsive]=\"disableResponsive\"\r\n [isCheckList]=\"isCheckList\"\r\n [columns]=\"\r\n columns\r\n | filterColumnsByDetails: detailsColumns:rowIndicator\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [fitWidth]=\"fitWidth\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [contextMenuWidth]=\"contextMenuWidth\"\r\n [showViewButton]=\"showViewButton\"\r\n [deviceSize]=\"deviceSize\"\r\n [viewSetting]=\"viewSetting\"\r\n [hideHeader]=\"contextView.Grid_HideHeader\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [disableResize]=\"disableResize\"\r\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\r\n (headerRender)=\"onSetTableHeaderDom($event)\"\r\n (columnResize)=\"onColumnResized($event)\"\r\n (columnResizing)=\"onColumnResizing($event)\"\r\n (fitToContent)=\"onFitToContent($event)\"\r\n (fitToContainer)=\"onFitToContainer()\"\r\n (freeColumnSize)=\"onFreeColumnSizing()\"\r\n (allCheckbox)=\"onAllCheckbox($event)\"\r\n (sortAscending)=\"onSortAscending($event)\"\r\n (sortDescending)=\"onSortDescending($event)\"\r\n (filter)=\"onFilter($event)\"\r\n (resetGridSettings)=\"resetGridSettings.emit()\"\r\n ></bsu-barsa-table-header>\r\n <!-- <div\r\n #headerBottomObserver\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onHeaderVisibilityChange($event, headerBottomObserver)\"\r\n ></div> -->\r\n</ng-template>\r\n<ng-template #bodyTemplate let-columns let-previewColumn=\"previewColumn\">\r\n <tbody\r\n #body\r\n fd-table-body\r\n [class.noborder]=\"viewSetting?.NoBodyBorders === true\"\r\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true || previewColumn\"\r\n [noBorderY]=\"(popin && secondaryColumns.length > 0) || previewColumn\"\r\n >\r\n <ng-container>\r\n @for (mo of moDataList | multipleGroupBy: groupby; track _trackByRow(index, mo); let index = $index) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n hasRowOlgo ? rowOlgoTemplate : rowTemplate;\r\n context: {\r\n $implicit: mo,\r\n index: index,\r\n rowNumber: mo.Id | rowNumber: pagingSetting:moDataList,\r\n rowIndicatorColor: !columns.length ? '' : (columns[0].Caption | rval: mo:columns),\r\n columns: columns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\r\n secondaryColumns:\r\n secondaryColumns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\r\n moDataList: moDataList,\r\n moDataListCount: moDataList.length,\r\n cartableTemplate: cartableTemplates[mo.RelatedMo?.$TypeDefId + '@' + mo.CartableSettings?.Id],\r\n previewColumn: previewColumn,\r\n detailsCollapsed: viewSetting?.DetailsSetting?.DetailsCollapsed === true,\r\n hideDetailsText: viewSetting?.DetailsSetting?.HideDetailsText === true\r\n }\r\n \"\r\n ></ng-container>\r\n }\r\n </ng-container>\r\n </tbody>\r\n</ng-template>\r\n<ng-template #footerTemplate let-columns>\r\n @if (hasSummary) {\r\n <tfoot fd-table-footer>\r\n <tr fd-table-row class=\"row-summary\">\r\n @if (isCheckList) {\r\n <td fd-table-cell columnResizer>\r\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\r\n </td>\r\n } @if (!isCheckList) {\r\n <td fd-table-cell class=\"single-select\">\r\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\r\n </td>\r\n } @for (column of columns; track column; let i = $index) {\r\n <td>\r\n @if (column.HasSummary) {\r\n <strong style=\"direction: ltr; display: block\">\r\n {{ moDataList | totalSummary: column.Name | number }}</strong\r\n >\r\n }\r\n </td>\r\n } @if (contextMenuItems && contextMenuItems.length > 0) {\r\n <td fd-table-cell style=\"width: 100px\"></td>\r\n } @if (!hideOpenIcon && canView && (!inlineEditMode || !allowInlineEdit)) {\r\n <td fd-table-cell></td>\r\n }\r\n </tr>\r\n </tfoot>\r\n }\r\n</ng-template>\r\n<ng-template\r\n #rowOlgoTemplate\r\n let-mo\r\n let-index=\"index\"\r\n let-columns=\"columns\"\r\n let-moDataListCount=\"moDataListCount\"\r\n let-moDataList=\"moDataList\"\r\n let-cartableTemplate=\"cartableTemplate\"\r\n let-secondaryColumns=\"secondaryColumns\"\r\n let-rowIndicatorColor=\"rowIndicatorColor\"\r\n let-rowNumber=\"rowNumber\"\r\n let-previewColumn=\"previewColumn\"\r\n let-detailsCollapsed=\"detailsCollapsed\"\r\n let-hideDetailsText=\"hideDetailsText\"\r\n>\r\n <bnrc-dynamic-item-component\r\n [component]=\"viewSetting.RowOlgo\"\r\n [mo]=\"mo\"\r\n [detailsCollapsed]=\"detailsCollapsed\"\r\n [hideDetailsText]=\"hideDetailsText\"\r\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\r\n [groupSummary]=\"groupSummary\"\r\n [showViewButton]=\"showViewButton\"\r\n [inlineEditWithoutSelection]=\"inlineEditWithoutSelection\"\r\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\r\n [moDataList]=\"moDataList\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [detailsColumns]=\"detailsColumns\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [rowNumber]=\"rowNumber\"\r\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\r\n [cartableTemplate]=\"cartableTemplate\"\r\n [cartableMo]=\"mo.RelatedMo\"\r\n [dirtyColumns]=\"mo.$DirtyColumns\"\r\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\r\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\r\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\r\n [detailsTextFunction]=\"viewSetting?.DetailsSetting?.ButtonTextFunction\"\r\n [detailsComponent]=\"detailsComponent\"\r\n [coloringRow]=\"viewSetting?.ColoringRow\"\r\n [isChecked]=\"mo.$IsChecked\"\r\n [visibility]=\"mo.$Visibility\"\r\n [expanded]=\"mo.$Expanded\"\r\n [styleIndex]=\"mo.$StyleIndex\"\r\n [level]=\"mo.$Level\"\r\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\r\n [moDataListCount]=\"moDataListCount\"\r\n [columnsCount]=\"columnsCount - detailsColumns.length\"\r\n [typeDefId]=\"typeDefId\"\r\n [extraRelation]=\"extraRelation\"\r\n [formSetting]=\"formSetting\"\r\n [index]=\"index\"\r\n [setting]=\"viewSetting\"\r\n [secondaryColumns]=\"secondaryColumns | filterColumnsByDetails: detailsColumns:rowIndicator\"\r\n [columns]=\"columns | filterColumnsByDetails: detailsColumns:rowIndicator\"\r\n [isNewInlineMo]=\"mo.$NewInlineMo\"\r\n [access]=\"access\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [allowInlineEdit]=\"allowInlineEdit\"\r\n [rtl]=\"rtl\"\r\n [deviceName]=\"deviceName\"\r\n [deviceSize]=\"deviceSize\"\r\n [allColumns]=\"allColumns\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [canView]=\"canView\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [navigationArrow]=\"navigationArrow\"\r\n [isCheckList]=\"isCheckList\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [rowIndicatorColor]=\"rowIndicatorColor\"\r\n (events)=\"onOlgoEvents($event)\"\r\n >\r\n </bnrc-dynamic-item-component>\r\n</ng-template>\r\n<ng-template\r\n #rowTemplate\r\n let-mo\r\n let-index=\"index\"\r\n let-rowNumber=\"rowNumber\"\r\n let-columns=\"columns\"\r\n let-moDataListCount=\"moDataListCount\"\r\n let-moDataList=\"moDataList\"\r\n let-cartableTemplate=\"cartableTemplate\"\r\n let-secondaryColumns=\"secondaryColumns\"\r\n let-rowIndicatorColor=\"rowIndicatorColor\"\r\n let-previewColumn=\"previewColumn\"\r\n let-detailsCollapsed=\"detailsCollapsed\"\r\n let-hideDetailsText=\"hideDetailsText\"\r\n>\r\n <bsu-barsa-table-row\r\n [mo]=\"mo\"\r\n [dirtyColumns]=\"mo.$DirtyColumns\"\r\n [inlineEditWithoutSelection]=\"inlineEditWithoutSelection\"\r\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\r\n [moDataList]=\"moDataList\"\r\n [hideDetailsText]=\"hideDetailsText\"\r\n [detailsCollapsed]=\"detailsCollapsed\"\r\n [groupSummary]=\"groupSummary\"\r\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\r\n [isMobile]=\"isMobile\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [rowNumber]=\"rowNumber\"\r\n [coloringRow]=\"viewSetting?.ColoringRow\"\r\n [disableEllapsis]=\"viewSetting?.DisableEllapsis\"\r\n [showViewButton]=\"showViewButton\"\r\n [detailsColumns]=\"detailsColumns\"\r\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\r\n [cartableTemplate]=\"cartableTemplate\"\r\n [cartableMo]=\"mo.RelatedMo\"\r\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\r\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\r\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\r\n [detailsComponent]=\"detailsComponent\"\r\n [isChecked]=\"mo.$IsChecked\"\r\n [visibility]=\"mo.$Visibility\"\r\n [expanded]=\"mo.$Expanded\"\r\n [styleIndex]=\"mo.$StyleIndex\"\r\n [level]=\"mo.$Level\"\r\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\r\n [moDataListCount]=\"moDataListCount\"\r\n [columnsCount]=\"columnsCount - detailsColumns.length\"\r\n [typeDefId]=\"typeDefId\"\r\n [extraRelation]=\"extraRelation\"\r\n [formSetting]=\"formSetting\"\r\n [index]=\"index\"\r\n [setting]=\"viewSetting\"\r\n [checkboxComponent]=\"viewSetting?.CheckboxComponent\"\r\n [secondaryColumns]=\"\r\n secondaryColumns\r\n | filterColumnsByDetails: detailsColumns:false\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [columns]=\"\r\n columns\r\n | filterColumnsByDetails: detailsColumns:rowIndicator\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [isNewInlineMo]=\"mo.$NewInlineMo\"\r\n [access]=\"access\"\r\n [simpleInlineEdit]=\"simpleInlineEdit\"\r\n [noSaveInlineEditInServer]=\"simpleInlineEdit\"\r\n [actionList]=\"actionList\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [allowInlineEdit]=\"allowInlineEdit\"\r\n [rtl]=\"rtl\"\r\n [deviceName]=\"deviceName\"\r\n [deviceSize]=\"deviceSize\"\r\n [allColumns]=\"allColumns\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [canView]=\"canView\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [navigationArrow]=\"navigationArrow\"\r\n [isCheckList]=\"isCheckList\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [rowIndicatorColor]=\"rowIndicatorColor\"\r\n [previewColumn]=\"previewColumn\"\r\n (columnSummary)=\"columnSummary.emit($event)\"\r\n (resetWorkflowState)=\"resetWorkflowState.emit(mo)\"\r\n (escapeKey)=\"onEscapeKey($event)\"\r\n (expandClick)=\"onExpandClick($event)\"\r\n (rowCheck)=\"onRowCheck($event)\"\r\n (workflowShareButtons)=\"onWorkflowShareButtons($event)\"\r\n (deselectAll)=\"onDeselectAll()\"\r\n (rowClick)=\"onRowClick($event)\"\r\n (ulvCommand)=\"onUlvCommand($event)\"\r\n (actionListClick)=\"onActionListClick(mo, index, $event)\"\r\n (selectNextInlineRecord)=\"onSelectNextInlineRecord($event)\"\r\n (editFormPanelSave)=\"onEditFormPanelSave($event)\"\r\n (editFormPanelCancel)=\"onEditFormPanelCancel($event)\"\r\n (editFormPanelValueChange)=\"onEditFormPanelValueChange($event)\"\r\n (cartableFormClosed)=\"onCartableFormClosed($event)\"\r\n >\r\n </bsu-barsa-table-row>\r\n <!-- <div\r\n #rowBottom\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onRowVisibilityChange($event, index, rowBottom)\"\r\n ></div> -->\r\n</ng-template>\r\n<div #tableBottomObserve></div>\r\n", styles: [":host{display:block;width:100%;position:relative;padding-bottom:.2rem;overflow-x:auto;max-width:100vw}.table-fixed{table-layout:fixed}.table-fixed td{overflow:hidden}tr td{font-weight:inherit}::ng-deep span.fd-toolbar__spacer{display:none}.row-summary{position:relative}.row-summary .col-total-text{position:absolute;top:25%}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DynamicItemComponent, selector: "bnrc-dynamic-item-component", inputs: ["mo", "allColumns", "moDataList", "columns", "column", "index", "last", "hideOpenIcon", "deviceName", "deviceSize", "rtl", "editMode", "setting", "parameters", "contextMenuItems", "canView", "showRowNumber", "rowNumber", "formSetting", "conditionalFormats", "disableOverflowContextMenu", "navigationArrow", "isCheckList", "fields", "isChecked", "layout94$", "inlineEditMode", "isNewInlineMo", "allowInlineEdit", "typeDefId", "rowIndicator", "rowIndicatorColor", "UlvMainCtrlr"] }, { kind: "directive", type: i2.IntersectionObserverDirective, selector: "[intersectionObserver]", inputs: ["intersectionDebounce", "intersectionRootMargin", "intersectionRoot", "intersectionThreshold"], outputs: ["visibilityChange"] }, { kind: "directive", type: i2.ColumnResizerDirective, selector: "[columnResizer]", inputs: ["disableResizer"] }, { kind: "component", type: i3.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "noOuterBorder", "topBorder", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i3.TableFooterDirective, selector: "[fdTableFooter], [fd-table-footer]" }, { kind: "directive", type: i3.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i3.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i3.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "nonInteractive", "key"] }, { kind: "component", type: i4.NoDataComponent, selector: "bsu-no-data", inputs: ["simple"] }, { kind: "component", type: i5.BarsaTableHeaderComponent, selector: "bsu-barsa-table-header", inputs: ["allChecked", "isCheckList", "columns", "fitWidth", "contextMenuItems", "contextMenuWidth", "showViewButton", "hasSelected", "hideOpenIcon", "disableOverflowContextMenu", "inlineEditMode", "hideHeader", "showDetailsInRow", "viewSetting", "tableWidth", "resizedByUser", "disableResponsive", "actionList", "rowIndicator", "rtl", "sticky", "showRowNumber", "hasSecondaryColumns", "disableResize", "disableHeaderContextMenu", "deviceSize", "tableHeaderMode"], outputs: ["allCheckbox", "columnResize", "columnResizing", "fitToContent", "fitToContainer", "freeColumnSize", "sortAscending", "sortDescending", "filter", "resetGridSettings", "headerRender"] }, { kind: "component", type: i6.BarsaTableRowComponent, selector: "bsu-barsa-table-row", inputs: ["showDetailsInRow", "previewColumn", "columnComponents", "dirtyColumns", "detailsCollapsed"], outputs: ["columnSummary"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.FilterPipe, name: "filter" }, { kind: "pipe", type: i2.MultipleGroupByPipe, name: "multipleGroupBy" }, { kind: "pipe", type: i2.MoReportValuePipe, name: "rval" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i2.TotalSummaryPipe, name: "totalSummary" }, { kind: "pipe", type: i2.MergeFieldsToColumnsPipe, name: "mergeFieldsToColumns" }, { kind: "pipe", type: i2.FilterColumnsByDetailsPipe, name: "filterColumnsByDetails" }, { kind: "pipe", type: i2.ColumnCustomComponentPipe, name: "columnCustomComponent" }, { kind: "pipe", type: i2.RowNumberPipe, name: "rowNumber" }, { kind: "pipe", type: i2.FindPreviewColumnPipe, name: "findPreviewColumn" }, { kind: "pipe", type: i2.HideColumnsInmobilePipe, name: "hideColumnsInmobile" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
262
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: UiTableViewComponent, selector: "bsu-ui-table-view", inputs: { columnWidth: "columnWidth", minWidth: "minWidth", minHeight: "minHeight", disableResize: "disableResize", disableHeaderContextMenu: "disableHeaderContextMenu", rowResizer: "rowResizer", enableResizing: "enableResizing", disableFixedTableLayout: "disableFixedTableLayout" }, host: { properties: { "style.height.px": "this.height", "style.max-height": "this.maxHeight" } }, viewQueries: [{ propertyName: "_tableRef", first: true, predicate: ["tableTpl"], descendants: true, read: ElementRef, static: true }, { propertyName: "_tableHeaderComponent", first: true, predicate: BarsaTableHeaderComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<table\r\n fd-table\r\n #tableTpl\r\n #headerBottomObserver\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onTableVisibilityChange($event, headerBottomObserver)\"\r\n [popIn]=\"popin\"\r\n [class.table-fixed]=\"\r\n !contextView?.Grid_HideHeader && (!popin || secondaryColumns.length === 0) && !disableFixedTableLayout\r\n \"\r\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true\"\r\n [noBorderY]=\"viewSetting?.NoVerticalBorders === true || (popin && secondaryColumns.length > 0)\"\r\n>\r\n @if (columns | mergeFieldsToColumns: viewSetting?.MergeFieldsToColumns?.MoDataList; as mergeFieldsToColumns) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate;\r\n context: { $implicit: mergeFieldsToColumns, moDataListCount: moDataList?.length }\r\n \"\r\n ></ng-container>\r\n @if (moDataList?.length) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n bodyTemplate;\r\n context: { $implicit: mergeFieldsToColumns, previewColumn: allColumns | findPreviewColumn }\r\n \"\r\n ></ng-container>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: mergeFieldsToColumns }\"></ng-container>\r\n } }\r\n</table>\r\n<!--renderColumn-->\r\n\r\n@if (!moDataList?.length) {\r\n<bsu-no-data\r\n [class.no-topborder]=\"!hideToolbar\"\r\n [class.noborder]=\"contextView.Grid_HideHeader && hideToolbar\"\r\n [simple]=\"true\"\r\n>\r\n</bsu-no-data>\r\n}\r\n\r\n<ng-template #headerTemplate let-columns let-moDataListCount>\r\n <bsu-barsa-table-header\r\n [sticky]=\"stickyEnable()\"\r\n [hasSecondaryColumns]=\"secondaryColumns.length > 0\"\r\n [class.has-toolbar]=\"!hideToolbar\"\r\n [style.pointer-events]=\"moDataListCount ? 'auto' : 'none'\"\r\n [tableWidth]=\"elWidth\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [resizedByUser]=\"resizedByUser\"\r\n [tableHeaderMode]=\"tableHeaderMode\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [allChecked]=\"allChecked\"\r\n [rtl]=\"rtl\"\r\n [actionList]=\"actionList\"\r\n [disableResponsive]=\"disableResponsive\"\r\n [isCheckList]=\"isCheckList\"\r\n [columns]=\"\r\n columns\r\n | filterColumnsByDetails: detailsColumns:rowIndicator\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [fitWidth]=\"fitWidth\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [contextMenuWidth]=\"contextMenuWidth\"\r\n [showViewButton]=\"showViewButton\"\r\n [deviceSize]=\"deviceSize\"\r\n [viewSetting]=\"viewSetting\"\r\n [hideHeader]=\"contextView.Grid_HideHeader\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [disableResize]=\"disableResize\"\r\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\r\n (headerRender)=\"onSetTableHeaderDom($event)\"\r\n (columnResize)=\"onColumnResized($event)\"\r\n (columnResizing)=\"onColumnResizing($event)\"\r\n (fitToContent)=\"onFitToContent($event)\"\r\n (fitToContainer)=\"onFitToContainer()\"\r\n (freeColumnSize)=\"onFreeColumnSizing()\"\r\n (allCheckbox)=\"onAllCheckbox($event)\"\r\n (sortAscending)=\"onSortAscending($event)\"\r\n (sortDescending)=\"onSortDescending($event)\"\r\n (filter)=\"onFilter($event)\"\r\n (resetGridSettings)=\"resetGridSettings.emit()\"\r\n ></bsu-barsa-table-header>\r\n <!-- <div\r\n #headerBottomObserver\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onHeaderVisibilityChange($event, headerBottomObserver)\"\r\n ></div> -->\r\n</ng-template>\r\n<ng-template #bodyTemplate let-columns let-previewColumn=\"previewColumn\">\r\n <tbody\r\n #body\r\n fd-table-body\r\n [class.noborder]=\"viewSetting?.NoBodyBorders === true\"\r\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true || previewColumn\"\r\n [noBorderY]=\"(popin && secondaryColumns.length > 0) || previewColumn\"\r\n >\r\n <ng-container>\r\n @for (mo of moDataList | multipleGroupBy: groupby; track _trackByRow(index, mo); let index = $index) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n hasRowOlgo ? rowOlgoTemplate : rowTemplate;\r\n context: {\r\n $implicit: mo,\r\n index: index,\r\n rowNumber: mo.Id | rowNumber: pagingSetting:moDataList,\r\n rowIndicatorColor: !columns.length ? '' : (columns[0].Caption | rval: mo:columns),\r\n columns: columns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\r\n secondaryColumns:\r\n secondaryColumns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\r\n moDataList: moDataList,\r\n moDataListCount: moDataList.length,\r\n cartableTemplate: cartableTemplates[mo.RelatedMo?.$TypeDefId + '@' + mo.CartableSettings?.Id],\r\n previewColumn: previewColumn,\r\n detailsCollapsed: viewSetting?.DetailsSetting?.DetailsCollapsed === true,\r\n hideDetailsText: viewSetting?.DetailsSetting?.HideDetailsText === true\r\n }\r\n \"\r\n ></ng-container>\r\n }\r\n </ng-container>\r\n </tbody>\r\n</ng-template>\r\n<ng-template #footerTemplate let-columns>\r\n @if (hasSummary) {\r\n <tfoot fd-table-footer>\r\n <tr fd-table-row class=\"row-summary\">\r\n @if (isCheckList) {\r\n <td fd-table-cell columnResizer>\r\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\r\n </td>\r\n } @if (!isCheckList) {\r\n <td fd-table-cell class=\"single-select\">\r\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\r\n </td>\r\n } @for (column of columns; track column; let i = $index) {\r\n <td>\r\n @if (column.HasSummary) {\r\n <strong style=\"direction: ltr; display: block\">\r\n {{ moDataList | totalSummary: column.Name | number }}</strong\r\n >\r\n }\r\n </td>\r\n } @if (contextMenuItems && contextMenuItems.length > 0) {\r\n <td fd-table-cell style=\"width: 100px\"></td>\r\n } @if (!hideOpenIcon && canView && (!inlineEditMode || !allowInlineEdit)) {\r\n <td fd-table-cell></td>\r\n }\r\n </tr>\r\n </tfoot>\r\n }\r\n</ng-template>\r\n<ng-template\r\n #rowOlgoTemplate\r\n let-mo\r\n let-index=\"index\"\r\n let-columns=\"columns\"\r\n let-moDataListCount=\"moDataListCount\"\r\n let-moDataList=\"moDataList\"\r\n let-cartableTemplate=\"cartableTemplate\"\r\n let-secondaryColumns=\"secondaryColumns\"\r\n let-rowIndicatorColor=\"rowIndicatorColor\"\r\n let-rowNumber=\"rowNumber\"\r\n let-previewColumn=\"previewColumn\"\r\n let-detailsCollapsed=\"detailsCollapsed\"\r\n let-hideDetailsText=\"hideDetailsText\"\r\n>\r\n <bnrc-dynamic-item-component\r\n [component]=\"viewSetting.RowOlgo\"\r\n [mo]=\"mo\"\r\n [detailsCollapsed]=\"detailsCollapsed\"\r\n [hideDetailsText]=\"hideDetailsText\"\r\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\r\n [groupSummary]=\"groupSummary\"\r\n [showViewButton]=\"showViewButton\"\r\n [inlineEditWithoutSelection]=\"inlineEditWithoutSelection\"\r\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\r\n [moDataList]=\"moDataList\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [detailsColumns]=\"detailsColumns\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [rowNumber]=\"rowNumber\"\r\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\r\n [cartableTemplate]=\"cartableTemplate\"\r\n [cartableMo]=\"mo.RelatedMo\"\r\n [dirtyColumns]=\"mo.$DirtyColumns\"\r\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\r\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\r\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\r\n [attachmentViewType]=\"viewSetting?.AttachmentViewType\"\r\n [detailsTextFunction]=\"viewSetting?.DetailsSetting?.ButtonTextFunction\"\r\n [detailsComponent]=\"detailsComponent\"\r\n [coloringRow]=\"viewSetting?.ColoringRow\"\r\n [isChecked]=\"mo.$IsChecked\"\r\n [visibility]=\"mo.$Visibility\"\r\n [expanded]=\"mo.$Expanded\"\r\n [styleIndex]=\"mo.$StyleIndex\"\r\n [level]=\"mo.$Level\"\r\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\r\n [moDataListCount]=\"moDataListCount\"\r\n [columnsCount]=\"columnsCount - detailsColumns.length\"\r\n [typeDefId]=\"typeDefId\"\r\n [extraRelation]=\"extraRelation\"\r\n [formSetting]=\"formSetting\"\r\n [index]=\"index\"\r\n [setting]=\"viewSetting\"\r\n [secondaryColumns]=\"secondaryColumns | filterColumnsByDetails: detailsColumns:rowIndicator\"\r\n [columns]=\"columns | filterColumnsByDetails: detailsColumns:rowIndicator\"\r\n [isNewInlineMo]=\"mo.$NewInlineMo\"\r\n [access]=\"access\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [allowInlineEdit]=\"allowInlineEdit\"\r\n [rtl]=\"rtl\"\r\n [deviceName]=\"deviceName\"\r\n [deviceSize]=\"deviceSize\"\r\n [allColumns]=\"allColumns\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [canView]=\"canView\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [navigationArrow]=\"navigationArrow\"\r\n [isCheckList]=\"isCheckList\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [rowIndicatorColor]=\"rowIndicatorColor\"\r\n (events)=\"onOlgoEvents($event)\"\r\n >\r\n </bnrc-dynamic-item-component>\r\n</ng-template>\r\n<ng-template\r\n #rowTemplate\r\n let-mo\r\n let-index=\"index\"\r\n let-rowNumber=\"rowNumber\"\r\n let-columns=\"columns\"\r\n let-moDataListCount=\"moDataListCount\"\r\n let-moDataList=\"moDataList\"\r\n let-cartableTemplate=\"cartableTemplate\"\r\n let-secondaryColumns=\"secondaryColumns\"\r\n let-rowIndicatorColor=\"rowIndicatorColor\"\r\n let-previewColumn=\"previewColumn\"\r\n let-detailsCollapsed=\"detailsCollapsed\"\r\n let-hideDetailsText=\"hideDetailsText\"\r\n>\r\n <bsu-barsa-table-row\r\n [mo]=\"mo\"\r\n [dirtyColumns]=\"mo.$DirtyColumns\"\r\n [inlineEditWithoutSelection]=\"inlineEditWithoutSelection\"\r\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\r\n [moDataList]=\"moDataList\"\r\n [hideDetailsText]=\"hideDetailsText\"\r\n [detailsCollapsed]=\"detailsCollapsed\"\r\n [groupSummary]=\"groupSummary\"\r\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\r\n [isMobile]=\"isMobile\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [attachmentViewType]=\"viewSetting?.AttachmentViewType\"\r\n [rowNumber]=\"rowNumber\"\r\n [coloringRow]=\"viewSetting?.ColoringRow\"\r\n [disableEllapsis]=\"viewSetting?.DisableEllapsis\"\r\n [showViewButton]=\"showViewButton\"\r\n [detailsColumns]=\"detailsColumns\"\r\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\r\n [cartableTemplate]=\"cartableTemplate\"\r\n [cartableMo]=\"mo.RelatedMo\"\r\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\r\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\r\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\r\n [detailsComponent]=\"detailsComponent\"\r\n [isChecked]=\"mo.$IsChecked\"\r\n [visibility]=\"mo.$Visibility\"\r\n [expanded]=\"mo.$Expanded\"\r\n [styleIndex]=\"mo.$StyleIndex\"\r\n [level]=\"mo.$Level\"\r\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\r\n [moDataListCount]=\"moDataListCount\"\r\n [columnsCount]=\"columnsCount - detailsColumns.length\"\r\n [typeDefId]=\"typeDefId\"\r\n [extraRelation]=\"extraRelation\"\r\n [formSetting]=\"formSetting\"\r\n [index]=\"index\"\r\n [setting]=\"viewSetting\"\r\n [checkboxComponent]=\"viewSetting?.CheckboxComponent\"\r\n [secondaryColumns]=\"\r\n secondaryColumns\r\n | filterColumnsByDetails: detailsColumns:false\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [columns]=\"\r\n columns\r\n | filterColumnsByDetails: detailsColumns:rowIndicator\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [isNewInlineMo]=\"mo.$NewInlineMo\"\r\n [access]=\"access\"\r\n [simpleInlineEdit]=\"simpleInlineEdit\"\r\n [noSaveInlineEditInServer]=\"simpleInlineEdit\"\r\n [actionList]=\"actionList\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [allowInlineEdit]=\"allowInlineEdit\"\r\n [rtl]=\"rtl\"\r\n [deviceName]=\"deviceName\"\r\n [deviceSize]=\"deviceSize\"\r\n [allColumns]=\"allColumns\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [canView]=\"canView\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [navigationArrow]=\"navigationArrow\"\r\n [isCheckList]=\"isCheckList\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [rowIndicatorColor]=\"rowIndicatorColor\"\r\n [previewColumn]=\"previewColumn\"\r\n (columnSummary)=\"columnSummary.emit($event)\"\r\n (resetWorkflowState)=\"resetWorkflowState.emit(mo)\"\r\n (escapeKey)=\"onEscapeKey($event)\"\r\n (expandClick)=\"onExpandClick($event)\"\r\n (rowCheck)=\"onRowCheck($event)\"\r\n (workflowShareButtons)=\"onWorkflowShareButtons($event)\"\r\n (deselectAll)=\"onDeselectAll()\"\r\n (rowClick)=\"onRowClick($event)\"\r\n (ulvCommand)=\"onUlvCommand($event)\"\r\n (actionListClick)=\"onActionListClick(mo, index, $event)\"\r\n (selectNextInlineRecord)=\"onSelectNextInlineRecord($event)\"\r\n (editFormPanelSave)=\"onEditFormPanelSave($event)\"\r\n (editFormPanelCancel)=\"onEditFormPanelCancel($event)\"\r\n (editFormPanelValueChange)=\"onEditFormPanelValueChange($event)\"\r\n (cartableFormClosed)=\"onCartableFormClosed($event)\"\r\n >\r\n </bsu-barsa-table-row>\r\n <!-- <div\r\n #rowBottom\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onRowVisibilityChange($event, index, rowBottom)\"\r\n ></div> -->\r\n</ng-template>\r\n<div #tableBottomObserve></div>\r\n", styles: [":host{display:block;width:100%;position:relative;padding-bottom:.2rem;overflow-x:auto;max-width:100vw}.table-fixed{table-layout:fixed}.table-fixed td{overflow:hidden}tr td{font-weight:inherit}::ng-deep span.fd-toolbar__spacer{display:none}.row-summary{position:relative}.row-summary .col-total-text{position:absolute;top:25%}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DynamicItemComponent, selector: "bnrc-dynamic-item-component", inputs: ["mo", "allColumns", "moDataList", "columns", "column", "index", "last", "hideOpenIcon", "deviceName", "deviceSize", "rtl", "editMode", "setting", "parameters", "contextMenuItems", "canView", "showRowNumber", "rowNumber", "formSetting", "conditionalFormats", "disableOverflowContextMenu", "navigationArrow", "isCheckList", "fields", "isChecked", "layout94$", "inlineEditMode", "isNewInlineMo", "allowInlineEdit", "typeDefId", "rowIndicator", "rowIndicatorColor", "UlvMainCtrlr"] }, { kind: "directive", type: i2.IntersectionObserverDirective, selector: "[intersectionObserver]", inputs: ["intersectionDebounce", "intersectionRootMargin", "intersectionRoot", "intersectionThreshold"], outputs: ["visibilityChange"] }, { kind: "directive", type: i2.ColumnResizerDirective, selector: "[columnResizer]", inputs: ["disableResizer"] }, { kind: "component", type: i3.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "noOuterBorder", "topBorder", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i3.TableFooterDirective, selector: "[fdTableFooter], [fd-table-footer]" }, { kind: "directive", type: i3.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i3.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i3.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "nonInteractive", "key"] }, { kind: "component", type: i4.NoDataComponent, selector: "bsu-no-data", inputs: ["simple"] }, { kind: "component", type: i5.BarsaTableHeaderComponent, selector: "bsu-barsa-table-header", inputs: ["allChecked", "isCheckList", "columns", "fitWidth", "contextMenuItems", "contextMenuWidth", "showViewButton", "hasSelected", "hideOpenIcon", "disableOverflowContextMenu", "inlineEditMode", "hideHeader", "showDetailsInRow", "viewSetting", "tableWidth", "resizedByUser", "disableResponsive", "actionList", "rowIndicator", "rtl", "sticky", "showRowNumber", "hasSecondaryColumns", "disableResize", "disableHeaderContextMenu", "deviceSize", "tableHeaderMode"], outputs: ["allCheckbox", "columnResize", "columnResizing", "fitToContent", "fitToContainer", "freeColumnSize", "sortAscending", "sortDescending", "filter", "resetGridSettings", "headerRender"] }, { kind: "component", type: i6.BarsaTableRowComponent, selector: "bsu-barsa-table-row", inputs: ["showDetailsInRow", "previewColumn", "columnComponents", "dirtyColumns", "detailsCollapsed"], outputs: ["columnSummary"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.FilterPipe, name: "filter" }, { kind: "pipe", type: i2.MultipleGroupByPipe, name: "multipleGroupBy" }, { kind: "pipe", type: i2.MoReportValuePipe, name: "rval" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i2.TotalSummaryPipe, name: "totalSummary" }, { kind: "pipe", type: i2.MergeFieldsToColumnsPipe, name: "mergeFieldsToColumns" }, { kind: "pipe", type: i2.FilterColumnsByDetailsPipe, name: "filterColumnsByDetails" }, { kind: "pipe", type: i2.ColumnCustomComponentPipe, name: "columnCustomComponent" }, { kind: "pipe", type: i2.RowNumberPipe, name: "rowNumber" }, { kind: "pipe", type: i2.FindPreviewColumnPipe, name: "findPreviewColumn" }, { kind: "pipe", type: i2.HideColumnsInmobilePipe, name: "hideColumnsInmobile" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
263
263
|
}
|
|
264
264
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiTableViewComponent, decorators: [{
|
|
265
265
|
type: Component,
|
|
266
|
-
args: [{ selector: 'bsu-ui-table-view', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<table\r\n fd-table\r\n #tableTpl\r\n #headerBottomObserver\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onTableVisibilityChange($event, headerBottomObserver)\"\r\n [popIn]=\"popin\"\r\n [class.table-fixed]=\"\r\n !contextView?.Grid_HideHeader && (!popin || secondaryColumns.length === 0) && !disableFixedTableLayout\r\n \"\r\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true\"\r\n [noBorderY]=\"viewSetting?.NoVerticalBorders === true || (popin && secondaryColumns.length > 0)\"\r\n>\r\n @if (columns | mergeFieldsToColumns: viewSetting?.MergeFieldsToColumns?.MoDataList; as mergeFieldsToColumns) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate;\r\n context: { $implicit: mergeFieldsToColumns, moDataListCount: moDataList?.length }\r\n \"\r\n ></ng-container>\r\n @if (moDataList?.length) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n bodyTemplate;\r\n context: { $implicit: mergeFieldsToColumns, previewColumn: allColumns | findPreviewColumn }\r\n \"\r\n ></ng-container>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: mergeFieldsToColumns }\"></ng-container>\r\n } }\r\n</table>\r\n<!--renderColumn-->\r\n\r\n@if (!moDataList?.length) {\r\n<bsu-no-data\r\n [class.no-topborder]=\"!hideToolbar\"\r\n [class.noborder]=\"contextView.Grid_HideHeader && hideToolbar\"\r\n [simple]=\"true\"\r\n>\r\n</bsu-no-data>\r\n}\r\n\r\n<ng-template #headerTemplate let-columns let-moDataListCount>\r\n <bsu-barsa-table-header\r\n [sticky]=\"stickyEnable()\"\r\n [hasSecondaryColumns]=\"secondaryColumns.length > 0\"\r\n [class.has-toolbar]=\"!hideToolbar\"\r\n [style.pointer-events]=\"moDataListCount ? 'auto' : 'none'\"\r\n [tableWidth]=\"elWidth\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [resizedByUser]=\"resizedByUser\"\r\n [tableHeaderMode]=\"tableHeaderMode\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [allChecked]=\"allChecked\"\r\n [rtl]=\"rtl\"\r\n [actionList]=\"actionList\"\r\n [disableResponsive]=\"disableResponsive\"\r\n [isCheckList]=\"isCheckList\"\r\n [columns]=\"\r\n columns\r\n | filterColumnsByDetails: detailsColumns:rowIndicator\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [fitWidth]=\"fitWidth\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [contextMenuWidth]=\"contextMenuWidth\"\r\n [showViewButton]=\"showViewButton\"\r\n [deviceSize]=\"deviceSize\"\r\n [viewSetting]=\"viewSetting\"\r\n [hideHeader]=\"contextView.Grid_HideHeader\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [disableResize]=\"disableResize\"\r\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\r\n (headerRender)=\"onSetTableHeaderDom($event)\"\r\n (columnResize)=\"onColumnResized($event)\"\r\n (columnResizing)=\"onColumnResizing($event)\"\r\n (fitToContent)=\"onFitToContent($event)\"\r\n (fitToContainer)=\"onFitToContainer()\"\r\n (freeColumnSize)=\"onFreeColumnSizing()\"\r\n (allCheckbox)=\"onAllCheckbox($event)\"\r\n (sortAscending)=\"onSortAscending($event)\"\r\n (sortDescending)=\"onSortDescending($event)\"\r\n (filter)=\"onFilter($event)\"\r\n (resetGridSettings)=\"resetGridSettings.emit()\"\r\n ></bsu-barsa-table-header>\r\n <!-- <div\r\n #headerBottomObserver\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onHeaderVisibilityChange($event, headerBottomObserver)\"\r\n ></div> -->\r\n</ng-template>\r\n<ng-template #bodyTemplate let-columns let-previewColumn=\"previewColumn\">\r\n <tbody\r\n #body\r\n fd-table-body\r\n [class.noborder]=\"viewSetting?.NoBodyBorders === true\"\r\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true || previewColumn\"\r\n [noBorderY]=\"(popin && secondaryColumns.length > 0) || previewColumn\"\r\n >\r\n <ng-container>\r\n @for (mo of moDataList | multipleGroupBy: groupby; track _trackByRow(index, mo); let index = $index) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n hasRowOlgo ? rowOlgoTemplate : rowTemplate;\r\n context: {\r\n $implicit: mo,\r\n index: index,\r\n rowNumber: mo.Id | rowNumber: pagingSetting:moDataList,\r\n rowIndicatorColor: !columns.length ? '' : (columns[0].Caption | rval: mo:columns),\r\n columns: columns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\r\n secondaryColumns:\r\n secondaryColumns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\r\n moDataList: moDataList,\r\n moDataListCount: moDataList.length,\r\n cartableTemplate: cartableTemplates[mo.RelatedMo?.$TypeDefId + '@' + mo.CartableSettings?.Id],\r\n previewColumn: previewColumn,\r\n detailsCollapsed: viewSetting?.DetailsSetting?.DetailsCollapsed === true,\r\n hideDetailsText: viewSetting?.DetailsSetting?.HideDetailsText === true\r\n }\r\n \"\r\n ></ng-container>\r\n }\r\n </ng-container>\r\n </tbody>\r\n</ng-template>\r\n<ng-template #footerTemplate let-columns>\r\n @if (hasSummary) {\r\n <tfoot fd-table-footer>\r\n <tr fd-table-row class=\"row-summary\">\r\n @if (isCheckList) {\r\n <td fd-table-cell columnResizer>\r\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\r\n </td>\r\n } @if (!isCheckList) {\r\n <td fd-table-cell class=\"single-select\">\r\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\r\n </td>\r\n } @for (column of columns; track column; let i = $index) {\r\n <td>\r\n @if (column.HasSummary) {\r\n <strong style=\"direction: ltr; display: block\">\r\n {{ moDataList | totalSummary: column.Name | number }}</strong\r\n >\r\n }\r\n </td>\r\n } @if (contextMenuItems && contextMenuItems.length > 0) {\r\n <td fd-table-cell style=\"width: 100px\"></td>\r\n } @if (!hideOpenIcon && canView && (!inlineEditMode || !allowInlineEdit)) {\r\n <td fd-table-cell></td>\r\n }\r\n </tr>\r\n </tfoot>\r\n }\r\n</ng-template>\r\n<ng-template\r\n #rowOlgoTemplate\r\n let-mo\r\n let-index=\"index\"\r\n let-columns=\"columns\"\r\n let-moDataListCount=\"moDataListCount\"\r\n let-moDataList=\"moDataList\"\r\n let-cartableTemplate=\"cartableTemplate\"\r\n let-secondaryColumns=\"secondaryColumns\"\r\n let-rowIndicatorColor=\"rowIndicatorColor\"\r\n let-rowNumber=\"rowNumber\"\r\n let-previewColumn=\"previewColumn\"\r\n let-detailsCollapsed=\"detailsCollapsed\"\r\n let-hideDetailsText=\"hideDetailsText\"\r\n>\r\n <bnrc-dynamic-item-component\r\n [component]=\"viewSetting.RowOlgo\"\r\n [mo]=\"mo\"\r\n [detailsCollapsed]=\"detailsCollapsed\"\r\n [hideDetailsText]=\"hideDetailsText\"\r\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\r\n [groupSummary]=\"groupSummary\"\r\n [showViewButton]=\"showViewButton\"\r\n [inlineEditWithoutSelection]=\"inlineEditWithoutSelection\"\r\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\r\n [moDataList]=\"moDataList\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [detailsColumns]=\"detailsColumns\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [rowNumber]=\"rowNumber\"\r\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\r\n [cartableTemplate]=\"cartableTemplate\"\r\n [cartableMo]=\"mo.RelatedMo\"\r\n [dirtyColumns]=\"mo.$DirtyColumns\"\r\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\r\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\r\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\r\n [detailsTextFunction]=\"viewSetting?.DetailsSetting?.ButtonTextFunction\"\r\n [detailsComponent]=\"detailsComponent\"\r\n [coloringRow]=\"viewSetting?.ColoringRow\"\r\n [isChecked]=\"mo.$IsChecked\"\r\n [visibility]=\"mo.$Visibility\"\r\n [expanded]=\"mo.$Expanded\"\r\n [styleIndex]=\"mo.$StyleIndex\"\r\n [level]=\"mo.$Level\"\r\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\r\n [moDataListCount]=\"moDataListCount\"\r\n [columnsCount]=\"columnsCount - detailsColumns.length\"\r\n [typeDefId]=\"typeDefId\"\r\n [extraRelation]=\"extraRelation\"\r\n [formSetting]=\"formSetting\"\r\n [index]=\"index\"\r\n [setting]=\"viewSetting\"\r\n [secondaryColumns]=\"secondaryColumns | filterColumnsByDetails: detailsColumns:rowIndicator\"\r\n [columns]=\"columns | filterColumnsByDetails: detailsColumns:rowIndicator\"\r\n [isNewInlineMo]=\"mo.$NewInlineMo\"\r\n [access]=\"access\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [allowInlineEdit]=\"allowInlineEdit\"\r\n [rtl]=\"rtl\"\r\n [deviceName]=\"deviceName\"\r\n [deviceSize]=\"deviceSize\"\r\n [allColumns]=\"allColumns\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [canView]=\"canView\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [navigationArrow]=\"navigationArrow\"\r\n [isCheckList]=\"isCheckList\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [rowIndicatorColor]=\"rowIndicatorColor\"\r\n (events)=\"onOlgoEvents($event)\"\r\n >\r\n </bnrc-dynamic-item-component>\r\n</ng-template>\r\n<ng-template\r\n #rowTemplate\r\n let-mo\r\n let-index=\"index\"\r\n let-rowNumber=\"rowNumber\"\r\n let-columns=\"columns\"\r\n let-moDataListCount=\"moDataListCount\"\r\n let-moDataList=\"moDataList\"\r\n let-cartableTemplate=\"cartableTemplate\"\r\n let-secondaryColumns=\"secondaryColumns\"\r\n let-rowIndicatorColor=\"rowIndicatorColor\"\r\n let-previewColumn=\"previewColumn\"\r\n let-detailsCollapsed=\"detailsCollapsed\"\r\n let-hideDetailsText=\"hideDetailsText\"\r\n>\r\n <bsu-barsa-table-row\r\n [mo]=\"mo\"\r\n [dirtyColumns]=\"mo.$DirtyColumns\"\r\n [inlineEditWithoutSelection]=\"inlineEditWithoutSelection\"\r\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\r\n [moDataList]=\"moDataList\"\r\n [hideDetailsText]=\"hideDetailsText\"\r\n [detailsCollapsed]=\"detailsCollapsed\"\r\n [groupSummary]=\"groupSummary\"\r\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\r\n [isMobile]=\"isMobile\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [rowNumber]=\"rowNumber\"\r\n [coloringRow]=\"viewSetting?.ColoringRow\"\r\n [disableEllapsis]=\"viewSetting?.DisableEllapsis\"\r\n [showViewButton]=\"showViewButton\"\r\n [detailsColumns]=\"detailsColumns\"\r\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\r\n [cartableTemplate]=\"cartableTemplate\"\r\n [cartableMo]=\"mo.RelatedMo\"\r\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\r\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\r\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\r\n [detailsComponent]=\"detailsComponent\"\r\n [isChecked]=\"mo.$IsChecked\"\r\n [visibility]=\"mo.$Visibility\"\r\n [expanded]=\"mo.$Expanded\"\r\n [styleIndex]=\"mo.$StyleIndex\"\r\n [level]=\"mo.$Level\"\r\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\r\n [moDataListCount]=\"moDataListCount\"\r\n [columnsCount]=\"columnsCount - detailsColumns.length\"\r\n [typeDefId]=\"typeDefId\"\r\n [extraRelation]=\"extraRelation\"\r\n [formSetting]=\"formSetting\"\r\n [index]=\"index\"\r\n [setting]=\"viewSetting\"\r\n [checkboxComponent]=\"viewSetting?.CheckboxComponent\"\r\n [secondaryColumns]=\"\r\n secondaryColumns\r\n | filterColumnsByDetails: detailsColumns:false\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [columns]=\"\r\n columns\r\n | filterColumnsByDetails: detailsColumns:rowIndicator\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [isNewInlineMo]=\"mo.$NewInlineMo\"\r\n [access]=\"access\"\r\n [simpleInlineEdit]=\"simpleInlineEdit\"\r\n [noSaveInlineEditInServer]=\"simpleInlineEdit\"\r\n [actionList]=\"actionList\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [allowInlineEdit]=\"allowInlineEdit\"\r\n [rtl]=\"rtl\"\r\n [deviceName]=\"deviceName\"\r\n [deviceSize]=\"deviceSize\"\r\n [allColumns]=\"allColumns\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [canView]=\"canView\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [navigationArrow]=\"navigationArrow\"\r\n [isCheckList]=\"isCheckList\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [rowIndicatorColor]=\"rowIndicatorColor\"\r\n [previewColumn]=\"previewColumn\"\r\n (columnSummary)=\"columnSummary.emit($event)\"\r\n (resetWorkflowState)=\"resetWorkflowState.emit(mo)\"\r\n (escapeKey)=\"onEscapeKey($event)\"\r\n (expandClick)=\"onExpandClick($event)\"\r\n (rowCheck)=\"onRowCheck($event)\"\r\n (workflowShareButtons)=\"onWorkflowShareButtons($event)\"\r\n (deselectAll)=\"onDeselectAll()\"\r\n (rowClick)=\"onRowClick($event)\"\r\n (ulvCommand)=\"onUlvCommand($event)\"\r\n (actionListClick)=\"onActionListClick(mo, index, $event)\"\r\n (selectNextInlineRecord)=\"onSelectNextInlineRecord($event)\"\r\n (editFormPanelSave)=\"onEditFormPanelSave($event)\"\r\n (editFormPanelCancel)=\"onEditFormPanelCancel($event)\"\r\n (editFormPanelValueChange)=\"onEditFormPanelValueChange($event)\"\r\n (cartableFormClosed)=\"onCartableFormClosed($event)\"\r\n >\r\n </bsu-barsa-table-row>\r\n <!-- <div\r\n #rowBottom\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onRowVisibilityChange($event, index, rowBottom)\"\r\n ></div> -->\r\n</ng-template>\r\n<div #tableBottomObserve></div>\r\n", styles: [":host{display:block;width:100%;position:relative;padding-bottom:.2rem;overflow-x:auto;max-width:100vw}.table-fixed{table-layout:fixed}.table-fixed td{overflow:hidden}tr td{font-weight:inherit}::ng-deep span.fd-toolbar__spacer{display:none}.row-summary{position:relative}.row-summary .col-total-text{position:absolute;top:25%}\n"] }]
|
|
266
|
+
args: [{ selector: 'bsu-ui-table-view', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<table\r\n fd-table\r\n #tableTpl\r\n #headerBottomObserver\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onTableVisibilityChange($event, headerBottomObserver)\"\r\n [popIn]=\"popin\"\r\n [class.table-fixed]=\"\r\n !contextView?.Grid_HideHeader && (!popin || secondaryColumns.length === 0) && !disableFixedTableLayout\r\n \"\r\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true\"\r\n [noBorderY]=\"viewSetting?.NoVerticalBorders === true || (popin && secondaryColumns.length > 0)\"\r\n>\r\n @if (columns | mergeFieldsToColumns: viewSetting?.MergeFieldsToColumns?.MoDataList; as mergeFieldsToColumns) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate;\r\n context: { $implicit: mergeFieldsToColumns, moDataListCount: moDataList?.length }\r\n \"\r\n ></ng-container>\r\n @if (moDataList?.length) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n bodyTemplate;\r\n context: { $implicit: mergeFieldsToColumns, previewColumn: allColumns | findPreviewColumn }\r\n \"\r\n ></ng-container>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: mergeFieldsToColumns }\"></ng-container>\r\n } }\r\n</table>\r\n<!--renderColumn-->\r\n\r\n@if (!moDataList?.length) {\r\n<bsu-no-data\r\n [class.no-topborder]=\"!hideToolbar\"\r\n [class.noborder]=\"contextView.Grid_HideHeader && hideToolbar\"\r\n [simple]=\"true\"\r\n>\r\n</bsu-no-data>\r\n}\r\n\r\n<ng-template #headerTemplate let-columns let-moDataListCount>\r\n <bsu-barsa-table-header\r\n [sticky]=\"stickyEnable()\"\r\n [hasSecondaryColumns]=\"secondaryColumns.length > 0\"\r\n [class.has-toolbar]=\"!hideToolbar\"\r\n [style.pointer-events]=\"moDataListCount ? 'auto' : 'none'\"\r\n [tableWidth]=\"elWidth\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [resizedByUser]=\"resizedByUser\"\r\n [tableHeaderMode]=\"tableHeaderMode\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [allChecked]=\"allChecked\"\r\n [rtl]=\"rtl\"\r\n [actionList]=\"actionList\"\r\n [disableResponsive]=\"disableResponsive\"\r\n [isCheckList]=\"isCheckList\"\r\n [columns]=\"\r\n columns\r\n | filterColumnsByDetails: detailsColumns:rowIndicator\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [fitWidth]=\"fitWidth\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [contextMenuWidth]=\"contextMenuWidth\"\r\n [showViewButton]=\"showViewButton\"\r\n [deviceSize]=\"deviceSize\"\r\n [viewSetting]=\"viewSetting\"\r\n [hideHeader]=\"contextView.Grid_HideHeader\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [disableResize]=\"disableResize\"\r\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\r\n (headerRender)=\"onSetTableHeaderDom($event)\"\r\n (columnResize)=\"onColumnResized($event)\"\r\n (columnResizing)=\"onColumnResizing($event)\"\r\n (fitToContent)=\"onFitToContent($event)\"\r\n (fitToContainer)=\"onFitToContainer()\"\r\n (freeColumnSize)=\"onFreeColumnSizing()\"\r\n (allCheckbox)=\"onAllCheckbox($event)\"\r\n (sortAscending)=\"onSortAscending($event)\"\r\n (sortDescending)=\"onSortDescending($event)\"\r\n (filter)=\"onFilter($event)\"\r\n (resetGridSettings)=\"resetGridSettings.emit()\"\r\n ></bsu-barsa-table-header>\r\n <!-- <div\r\n #headerBottomObserver\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onHeaderVisibilityChange($event, headerBottomObserver)\"\r\n ></div> -->\r\n</ng-template>\r\n<ng-template #bodyTemplate let-columns let-previewColumn=\"previewColumn\">\r\n <tbody\r\n #body\r\n fd-table-body\r\n [class.noborder]=\"viewSetting?.NoBodyBorders === true\"\r\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true || previewColumn\"\r\n [noBorderY]=\"(popin && secondaryColumns.length > 0) || previewColumn\"\r\n >\r\n <ng-container>\r\n @for (mo of moDataList | multipleGroupBy: groupby; track _trackByRow(index, mo); let index = $index) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n hasRowOlgo ? rowOlgoTemplate : rowTemplate;\r\n context: {\r\n $implicit: mo,\r\n index: index,\r\n rowNumber: mo.Id | rowNumber: pagingSetting:moDataList,\r\n rowIndicatorColor: !columns.length ? '' : (columns[0].Caption | rval: mo:columns),\r\n columns: columns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\r\n secondaryColumns:\r\n secondaryColumns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\r\n moDataList: moDataList,\r\n moDataListCount: moDataList.length,\r\n cartableTemplate: cartableTemplates[mo.RelatedMo?.$TypeDefId + '@' + mo.CartableSettings?.Id],\r\n previewColumn: previewColumn,\r\n detailsCollapsed: viewSetting?.DetailsSetting?.DetailsCollapsed === true,\r\n hideDetailsText: viewSetting?.DetailsSetting?.HideDetailsText === true\r\n }\r\n \"\r\n ></ng-container>\r\n }\r\n </ng-container>\r\n </tbody>\r\n</ng-template>\r\n<ng-template #footerTemplate let-columns>\r\n @if (hasSummary) {\r\n <tfoot fd-table-footer>\r\n <tr fd-table-row class=\"row-summary\">\r\n @if (isCheckList) {\r\n <td fd-table-cell columnResizer>\r\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\r\n </td>\r\n } @if (!isCheckList) {\r\n <td fd-table-cell class=\"single-select\">\r\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\r\n </td>\r\n } @for (column of columns; track column; let i = $index) {\r\n <td>\r\n @if (column.HasSummary) {\r\n <strong style=\"direction: ltr; display: block\">\r\n {{ moDataList | totalSummary: column.Name | number }}</strong\r\n >\r\n }\r\n </td>\r\n } @if (contextMenuItems && contextMenuItems.length > 0) {\r\n <td fd-table-cell style=\"width: 100px\"></td>\r\n } @if (!hideOpenIcon && canView && (!inlineEditMode || !allowInlineEdit)) {\r\n <td fd-table-cell></td>\r\n }\r\n </tr>\r\n </tfoot>\r\n }\r\n</ng-template>\r\n<ng-template\r\n #rowOlgoTemplate\r\n let-mo\r\n let-index=\"index\"\r\n let-columns=\"columns\"\r\n let-moDataListCount=\"moDataListCount\"\r\n let-moDataList=\"moDataList\"\r\n let-cartableTemplate=\"cartableTemplate\"\r\n let-secondaryColumns=\"secondaryColumns\"\r\n let-rowIndicatorColor=\"rowIndicatorColor\"\r\n let-rowNumber=\"rowNumber\"\r\n let-previewColumn=\"previewColumn\"\r\n let-detailsCollapsed=\"detailsCollapsed\"\r\n let-hideDetailsText=\"hideDetailsText\"\r\n>\r\n <bnrc-dynamic-item-component\r\n [component]=\"viewSetting.RowOlgo\"\r\n [mo]=\"mo\"\r\n [detailsCollapsed]=\"detailsCollapsed\"\r\n [hideDetailsText]=\"hideDetailsText\"\r\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\r\n [groupSummary]=\"groupSummary\"\r\n [showViewButton]=\"showViewButton\"\r\n [inlineEditWithoutSelection]=\"inlineEditWithoutSelection\"\r\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\r\n [moDataList]=\"moDataList\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [detailsColumns]=\"detailsColumns\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [rowNumber]=\"rowNumber\"\r\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\r\n [cartableTemplate]=\"cartableTemplate\"\r\n [cartableMo]=\"mo.RelatedMo\"\r\n [dirtyColumns]=\"mo.$DirtyColumns\"\r\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\r\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\r\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\r\n [attachmentViewType]=\"viewSetting?.AttachmentViewType\"\r\n [detailsTextFunction]=\"viewSetting?.DetailsSetting?.ButtonTextFunction\"\r\n [detailsComponent]=\"detailsComponent\"\r\n [coloringRow]=\"viewSetting?.ColoringRow\"\r\n [isChecked]=\"mo.$IsChecked\"\r\n [visibility]=\"mo.$Visibility\"\r\n [expanded]=\"mo.$Expanded\"\r\n [styleIndex]=\"mo.$StyleIndex\"\r\n [level]=\"mo.$Level\"\r\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\r\n [moDataListCount]=\"moDataListCount\"\r\n [columnsCount]=\"columnsCount - detailsColumns.length\"\r\n [typeDefId]=\"typeDefId\"\r\n [extraRelation]=\"extraRelation\"\r\n [formSetting]=\"formSetting\"\r\n [index]=\"index\"\r\n [setting]=\"viewSetting\"\r\n [secondaryColumns]=\"secondaryColumns | filterColumnsByDetails: detailsColumns:rowIndicator\"\r\n [columns]=\"columns | filterColumnsByDetails: detailsColumns:rowIndicator\"\r\n [isNewInlineMo]=\"mo.$NewInlineMo\"\r\n [access]=\"access\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [allowInlineEdit]=\"allowInlineEdit\"\r\n [rtl]=\"rtl\"\r\n [deviceName]=\"deviceName\"\r\n [deviceSize]=\"deviceSize\"\r\n [allColumns]=\"allColumns\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [canView]=\"canView\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [navigationArrow]=\"navigationArrow\"\r\n [isCheckList]=\"isCheckList\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [rowIndicatorColor]=\"rowIndicatorColor\"\r\n (events)=\"onOlgoEvents($event)\"\r\n >\r\n </bnrc-dynamic-item-component>\r\n</ng-template>\r\n<ng-template\r\n #rowTemplate\r\n let-mo\r\n let-index=\"index\"\r\n let-rowNumber=\"rowNumber\"\r\n let-columns=\"columns\"\r\n let-moDataListCount=\"moDataListCount\"\r\n let-moDataList=\"moDataList\"\r\n let-cartableTemplate=\"cartableTemplate\"\r\n let-secondaryColumns=\"secondaryColumns\"\r\n let-rowIndicatorColor=\"rowIndicatorColor\"\r\n let-previewColumn=\"previewColumn\"\r\n let-detailsCollapsed=\"detailsCollapsed\"\r\n let-hideDetailsText=\"hideDetailsText\"\r\n>\r\n <bsu-barsa-table-row\r\n [mo]=\"mo\"\r\n [dirtyColumns]=\"mo.$DirtyColumns\"\r\n [inlineEditWithoutSelection]=\"inlineEditWithoutSelection\"\r\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\r\n [moDataList]=\"moDataList\"\r\n [hideDetailsText]=\"hideDetailsText\"\r\n [detailsCollapsed]=\"detailsCollapsed\"\r\n [groupSummary]=\"groupSummary\"\r\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\r\n [isMobile]=\"isMobile\"\r\n [showDetailsInRow]=\"showDetailsInRow\"\r\n [hideOpenIcon]=\"hideOpenIcon\"\r\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\r\n [attachmentViewType]=\"viewSetting?.AttachmentViewType\"\r\n [rowNumber]=\"rowNumber\"\r\n [coloringRow]=\"viewSetting?.ColoringRow\"\r\n [disableEllapsis]=\"viewSetting?.DisableEllapsis\"\r\n [showViewButton]=\"showViewButton\"\r\n [detailsColumns]=\"detailsColumns\"\r\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\r\n [cartableTemplate]=\"cartableTemplate\"\r\n [cartableMo]=\"mo.RelatedMo\"\r\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\r\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\r\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\r\n [detailsComponent]=\"detailsComponent\"\r\n [isChecked]=\"mo.$IsChecked\"\r\n [visibility]=\"mo.$Visibility\"\r\n [expanded]=\"mo.$Expanded\"\r\n [styleIndex]=\"mo.$StyleIndex\"\r\n [level]=\"mo.$Level\"\r\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\r\n [moDataListCount]=\"moDataListCount\"\r\n [columnsCount]=\"columnsCount - detailsColumns.length\"\r\n [typeDefId]=\"typeDefId\"\r\n [extraRelation]=\"extraRelation\"\r\n [formSetting]=\"formSetting\"\r\n [index]=\"index\"\r\n [setting]=\"viewSetting\"\r\n [checkboxComponent]=\"viewSetting?.CheckboxComponent\"\r\n [secondaryColumns]=\"\r\n secondaryColumns\r\n | filterColumnsByDetails: detailsColumns:false\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [columns]=\"\r\n columns\r\n | filterColumnsByDetails: detailsColumns:rowIndicator\r\n | filter: { IsPreview: false }\r\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\r\n \"\r\n [isNewInlineMo]=\"mo.$NewInlineMo\"\r\n [access]=\"access\"\r\n [simpleInlineEdit]=\"simpleInlineEdit\"\r\n [noSaveInlineEditInServer]=\"simpleInlineEdit\"\r\n [actionList]=\"actionList\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [allowInlineEdit]=\"allowInlineEdit\"\r\n [rtl]=\"rtl\"\r\n [deviceName]=\"deviceName\"\r\n [deviceSize]=\"deviceSize\"\r\n [allColumns]=\"allColumns\"\r\n [contextMenuItems]=\"contextMenuItems\"\r\n [canView]=\"canView\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [navigationArrow]=\"navigationArrow\"\r\n [isCheckList]=\"isCheckList\"\r\n [rowIndicator]=\"rowIndicator\"\r\n [rowIndicatorColor]=\"rowIndicatorColor\"\r\n [previewColumn]=\"previewColumn\"\r\n (columnSummary)=\"columnSummary.emit($event)\"\r\n (resetWorkflowState)=\"resetWorkflowState.emit(mo)\"\r\n (escapeKey)=\"onEscapeKey($event)\"\r\n (expandClick)=\"onExpandClick($event)\"\r\n (rowCheck)=\"onRowCheck($event)\"\r\n (workflowShareButtons)=\"onWorkflowShareButtons($event)\"\r\n (deselectAll)=\"onDeselectAll()\"\r\n (rowClick)=\"onRowClick($event)\"\r\n (ulvCommand)=\"onUlvCommand($event)\"\r\n (actionListClick)=\"onActionListClick(mo, index, $event)\"\r\n (selectNextInlineRecord)=\"onSelectNextInlineRecord($event)\"\r\n (editFormPanelSave)=\"onEditFormPanelSave($event)\"\r\n (editFormPanelCancel)=\"onEditFormPanelCancel($event)\"\r\n (editFormPanelValueChange)=\"onEditFormPanelValueChange($event)\"\r\n (cartableFormClosed)=\"onCartableFormClosed($event)\"\r\n >\r\n </bsu-barsa-table-row>\r\n <!-- <div\r\n #rowBottom\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onRowVisibilityChange($event, index, rowBottom)\"\r\n ></div> -->\r\n</ng-template>\r\n<div #tableBottomObserve></div>\r\n", styles: [":host{display:block;width:100%;position:relative;padding-bottom:.2rem;overflow-x:auto;max-width:100vw}.table-fixed{table-layout:fixed}.table-fixed td{overflow:hidden}tr td{font-weight:inherit}::ng-deep span.fd-toolbar__spacer{display:none}.row-summary{position:relative}.row-summary .col-total-text{position:absolute;top:25%}\n"] }]
|
|
267
267
|
}], propDecorators: { _tableRef: [{
|
|
268
268
|
type: ViewChild,
|
|
269
269
|
args: ['tableTpl', { static: true, read: ElementRef }]
|
|
@@ -293,4 +293,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
293
293
|
type: HostBinding,
|
|
294
294
|
args: ['style.max-height']
|
|
295
295
|
}] } });
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktdGFibGUtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS10YWJsZS12aWV3L3VpLXRhYmxlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktdGFibGUtdmlldy91aS10YWJsZS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUVILHVCQUF1QixFQUV2QixvQkFBb0IsRUFFcEIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixrQ0FBa0MsRUFDbEMsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixpQ0FBaUMsRUFDakMsaUJBQWlCLEVBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7O0FBUy9GLE1BQU0sT0FBTyxvQkFDVCxTQUFRLHVCQUEyQztJQVJ2RDs7UUFxQm9DLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBQzVCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2pFLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFHaEIscUJBQWdCLEdBQW1FLEVBQUUsQ0FBQztRQUV0RixvQkFBZSxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQztRQUN0RCxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3Qix1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxD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QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDMEIsTUFBTTtzQkFBckMsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBQ0csU0FBUztzQkFBekMsV0FBVzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkluaXQsXHJcbiAgICBzaWduYWwsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50LFxyXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcclxuICAgIFRhYmxlSGVhZGVyV2lkdGhNb2RlLFxyXG4gICAgQ29sdW1uUmVzaXplZEFyZ3MsXHJcbiAgICBjYWxjQ29udGV4dE1lbnVXaWR0aCxcclxuICAgIGNhbGN1bGF0ZUNvbHVtbldpZHRoLFxyXG4gICAgY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcixcclxuICAgIGNhbGN1bGF0ZUZyZWVDb2x1bW5TaXplLFxyXG4gICAgY2FsY3VsYXRlQ29sdW1uQ29udGVudCxcclxuICAgIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aCxcclxuICAgIGdldERldmljZUlzTW9iaWxlXHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBVaVRhYmxlVmlld1NldHRpbmcgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC12aWV3JztcclxuaW1wb3J0IHsgQmFyc2FUYWJsZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2JhcnNhLXRhYmxlLWhlYWRlci9iYXJzYS10YWJsZS1oZWFkZXIuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtdWktdGFibGUtdmlldycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktdGFibGUtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS10YWJsZS12aWV3LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaVRhYmxlVmlld0NvbXBvbmVudFxyXG4gICAgZXh0ZW5kcyBSZXBvcnRWaWV3QmFzZUNvbXBvbmVudDxVaVRhYmxlVmlld1NldHRpbmc+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzXHJcbntcclxuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlVHBsJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgX3RhYmxlUmVmOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZChCYXJzYVRhYmxlSGVhZGVyQ29tcG9uZW50KSBfdGFibGVIZWFkZXJDb21wb25lbnQ6IEJhcnNhVGFibGVIZWFkZXJDb21wb25lbnQ7XHJcbiAgICBASW5wdXQoKSBjb2x1bW5XaWR0aDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgbWluV2lkdGg7XHJcbiAgICBASW5wdXQoKSBtaW5IZWlnaHQ7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlUmVzaXplO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZUhlYWRlckNvbnRleHRNZW51O1xyXG4gICAgQElucHV0KCkgcm93UmVzaXplcjtcclxuICAgIEBJbnB1dCgpIGVuYWJsZVJlc2l6aW5nO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZUZpeGVkVGFibGVMYXlvdXQ7XHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodC5weCcpIGhlaWdodDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1heC1oZWlnaHQnKSBtYXhIZWlnaHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgX3dpZHRoID0gJzEwMCUnO1xyXG4gICAgc2hvd0RldGFpbHNJblJvdzogYm9vbGVhbjtcclxuICAgIGhhc1Jvd09sZ286IGJvb2xlYW47XHJcbiAgICBjb2x1bW5Db21wb25lbnRzOiB7IGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbjsgY29tcG9uZW50OiBNZXRhb2JqZWN0RGF0YU1vZGVsIH1bXSA9IFtdO1xyXG4gICAgcm93SW5kaWNhdG9yOiBib29sZWFuO1xyXG4gICAgdGFibGVIZWFkZXJNb2RlID0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI7XHJcbiAgICBzdGlja3lFbmFibGUgPSBzaWduYWwoZmFsc2UpO1xyXG4gICAgcm93VmlzaWJpbHR5Q2hhbmdlID0gc2lnbmFsKGZhbHNlKTtcclxuICAgIHRhYmxlSGVhZGVyRG9tOiBIVE1MRWxlbWVudDtcclxuICAgIF9oZWFkZXJUb3AkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgcm93VmlzaWJsZSQgPSBuZXcgU3ViamVjdDx7IGluZGV4OyBkb20gfT4oKTtcclxuICAgIF9pc1BhcmVudFdpZHRoU2V0ID0gZmFsc2U7XHJcbiAgICB0YWJsZUhlYWRlclRvcCA9IDA7XHJcbiAgICB0YWJsZUhlYWRlckhlaWdodCA9IDA7XHJcbiAgICBoZWFkZXJPYnNlcnZlckRvbTogSFRNTEVsZW1lbnQ7XHJcbiAgICBub3RWaXNpYmxlSXRlbXM6IG51bWJlcltdID0gW107XHJcbiAgICB2aXNpYmxlSXRlbXM6IG51bWJlcltdID0gW107XHJcbiAgICBvbGRXaWR0aCA9IDA7XHJcbiAgICBpc01vYmlsZSA9IGdldERldmljZUlzTW9iaWxlKCk7XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlLndpbmRvd1Jlc2l6ZSQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCB4ICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnbWF4LXdpZHRoJywgeCArICdweCcpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVGhXaWR0aCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGFzUm93T2xnbyA9IHRoaXMudmlld1NldHRpbmc/LlJvd09sZ28/LlNlbGVjdG9yO1xyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy52aWV3U2V0dGluZz8uQm9keUhlaWdodDtcclxuICAgICAgICB0aGlzLl9zZXRIYXNTdW1tZXJ5KHRoaXMuY2FydGFibGVDaGlsZHNNbyk7XHJcbiAgICAgICAgdGhpcy5fc2V0SGVpZ2h0KHRoaXMucGFyZW50SGVpZ2h0KTtcclxuICAgICAgICB0aGlzLl9zZXRXaWR0aCgpO1xyXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIHRoaXMuY29sdW1ucyk7XHJcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlck1vZGUgPSB0aGlzLmdyaWRGcmVlQ29sdW1uU2l6aW5nXHJcbiAgICAgICAgICAgID8gVGFibGVIZWFkZXJXaWR0aE1vZGUuRnJlZUNvbHVtblNpemVcclxuICAgICAgICAgICAgOiBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb0NvbnRhaW5lcjtcclxuICAgICAgICB0aGlzLl9jYWxjQ29udGV4dE1lbnVXaWR0aCh0aGlzLmNvbnRleHRNZW51SXRlbXMpO1xyXG4gICAgfVxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgaWYgKHgpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAke3h9cHhgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBjYXJ0YWJsZVRlbXBsYXRlcywgcGFyZW50SGVpZ2h0LCBjb250ZXh0TWVudUl0ZW1zLCBjb2x1bW5zQ291bnQsIGNvbHVtbnMsIHNlY29uZGFyeUNvbHVtbnMgfSA9IGNoYW5nZXM7XHJcbiAgICAgICAgaWYgKGNvbnRleHRNZW51SXRlbXMgJiYgIWNvbnRleHRNZW51SXRlbXMuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2FydGFibGVUZW1wbGF0ZXMgJiYgIWNhcnRhYmxlVGVtcGxhdGVzLmZpcnN0Q2hhbmdlICYmICF0aGlzLmhhc1N1bW1hcnkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0SGFzU3VtbWVyeShjYXJ0YWJsZVRlbXBsYXRlcy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGNvbHVtbnNDb3VudCAmJiAhY29sdW1uc0NvdW50LmZpcnN0Q2hhbmdlKSB8fCAoc2Vjb25kYXJ5Q29sdW1ucyAmJiAhc2Vjb25kYXJ5Q29sdW1ucy5maXJzdENoYW5nZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHRoaXMubW9EYXRhTGlzdCwgY29sdW1ucy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyZW50SGVpZ2h0ICYmICFwYXJlbnRIZWlnaHQuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0SGVpZ2h0KHBhcmVudEhlaWdodC5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgIH1cclxuICAgIF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudVdpZHRoID0gY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgdGhpcy5kaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudSk7XHJcbiAgICB9XHJcbiAgICBvblRhYmxlVmlzaWJpbGl0eUNoYW5nZShlLCBkb20pOiB2b2lkIHtcclxuICAgICAgICBpZiAoZSA9PT0gJ1Zpc2libGUnKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fc2V0V2lkdGgodHJ1ZSksIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25Db2x1bW5SZXNpemluZyhlOiB7IGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbjsgd2lkdGg6IG51bWJlciB9KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGFibGVIZWFkZXJDb21wb25lbnQuU2V0Q29sdW1uV2lkdGhUb1RoV2lkdGgoKTtcclxuICAgICAgICB0aGlzLl9zZXRQYXJlbnRXaWR0aCgpO1xyXG4gICAgfVxyXG4gICAgb25Db2x1bW5SZXNpemVkKGFycjogQXJyYXk8Q29sdW1uUmVzaXplZEFyZ3M+KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2Vjb25kYXJ5Q29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGFibGVIZWFkZXJNb2RlID09PSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GcmVlQ29sdW1uU2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl90YWJsZUhlYWRlckNvbXBvbmVudC5TZXRDb2x1bW5XaWR0aFRvVGhXaWR0aCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlNldENvbHVtbldpZHRoVG9QZXJjZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlJlZnJlc2hUYWJsZVRoV2lkdGgoKTtcclxuICAgICAgICB0aGlzLnJlc2l6ZWRCeVVzZXIgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUobGFzdFRoLCAnd2lkdGgnLCBgMTAwJWApO1xyXG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXplZC5lbWl0KHsgY29sdW1uczogdGhpcy5jb2x1bW5zLCByZXNpemVkOiBhcnIgfSk7XHJcbiAgICB9XHJcbiAgICBvbkZpdFRvQ29udGFpbmVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJNb2RlID0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI7XHJcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50V2lkdGhGaXQoKTtcclxuICAgICAgICB0aGlzLl90YWJsZUhlYWRlckNvbXBvbmVudC5TZXRDb2x1bW5XaWR0aFRvUGVyY2VudCgpO1xyXG4gICAgICAgIC8vIHRoaXMuX3JlZnJlc2hUaFdpZHRoKCk7XHJcbiAgICAgICAgLy8gdGhpcy5fZmlyZVJlc2l6ZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIG9uRnJlZUNvbHVtblNpemluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyTW9kZSA9IFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplO1xyXG4gICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlNldENvbHVtbldpZHRoVG9UaFdpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50V2lkdGhGaXRUb09mZnNldFdpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHRoaXMubW9EYXRhTGlzdCwgdGhpcy5jb2x1bW5zKTtcclxuICAgIH1cclxuICAgIG9uRml0VG9Db250ZW50KGU6IHsgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uOyB0aERvbTogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgfSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgY29sdW1uLCB0aERvbSB9ID0gZTtcclxuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyTW9kZSA9IFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplO1xyXG4gICAgICAgIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIGNvbHVtbik7XHJcbiAgICAgICAgY29sdW1uLiRXaWR0aCA9IGNvbHVtbi4kQ29udGVudFdpZHRoO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aERvbSwgJ3dpZHRoJywgY29sdW1uLiRXaWR0aCk7XHJcbiAgICAgICAgdGhpcy5fZmlyZVJlc2l6ZUNoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvblNldFRhYmxlSGVhZGVyRG9tKGRvbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJEb20gPSBkb207XHJcbiAgICAgICAgY29uc3QgcmVjdCA9IGRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyVG9wID0gcmVjdC50b3A7XHJcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlckhlaWdodCA9IHJlY3QuaGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgb25IZWFkZXJWaXNpYmlsaXR5Q2hhbmdlKGUsIGRvbSk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLmhlYWRlck9ic2VydmVyRG9tID0gZG9tO1xyXG4gICAgICAgIGlmIChlID09PSAnTm90VmlzaWJsZScpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGlja3lFbmFibGUuc2V0KHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RpY2t5RW5hYmxlLnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUm93VmlzaWJpbGl0eUNoYW5nZShlLCBpbmRleCwgZG9tKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChlICE9PSAnUGVuZGluZycpIHtcclxuICAgICAgICAgICAgaWYgKGUgPT09ICdOb3RWaXNpYmxlJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZUl0ZW1zLmluZGV4T2YoaW5kZXgpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93VmlzaWJsZSQubmV4dCh7IGluZGV4LCBkb20gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlSXRlbXMgPSB0aGlzLnZpc2libGVJdGVtcy5maWx0ZXIoKGMpID0+IGMgIT09IGluZGV4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubm90VmlzaWJsZUl0ZW1zLnB1c2goaW5kZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlID09PSAnVmlzaWJsZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90VmlzaWJsZUl0ZW1zID0gdGhpcy5ub3RWaXNpYmxlSXRlbXMuZmlsdGVyKChjKSA9PiBjICE9PSBpbmRleCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlSXRlbXMucHVzaChpbmRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdGhpcy5yb3dWaXNpYmxlJC5uZXh0KHsgaW5kZXgsIGRvbSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zZXRQYXJlbnRXaWR0aEZpdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLCAnd2lkdGgnLCBgMTAwJWApO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnbWluLXdpZHRoJywgYDEwMCVgKTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fdGFibGVSZWYubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgYDEwMCVgKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NldFBhcmVudFdpZHRoRml0VG9PZmZzZXRXaWR0aCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB4MSA9IE1hdGguZmxvb3IodGhpcy5fZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLCAnd2lkdGgnLCBgJHt4MX1weGApO1xyXG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnbWluLXdpZHRoJywgYCR7eH1weGApO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCBgJHt4fXB4YCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zZXRQYXJlbnRXaWR0aCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB4ID0gTWF0aC5mbG9vcih0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsICd3aWR0aCcsIGAke3h9cHhgKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3JlZnJlc2hUaFdpZHRoKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIHRoaXMuY29sdW1ucyk7XHJcbiAgICAgICAgdGhpcy5fdGFibGVIZWFkZXJDb21wb25lbnQ/LlJlZnJlc2hUYWJsZVRoV2lkdGgoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NldFdpZHRoKHNldFdpZHRoPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHdpZHRoT2ZEb20gPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cod2lkdGhPZkRvbSk7XHJcblxyXG4gICAgICAgIGlmICh3aWR0aE9mRG9tID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdpZHRoT2ZEb20gIT09IHRoaXMub2xkV2lkdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFRoV2lkdGgoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbGRXaWR0aCA9IHdpZHRoT2ZEb207XHJcbiAgICAgICAgY29uc3QgcGFyZW50V2lkdGggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgY29uc3QgZWxXaWR0aCA9IE1hdGguZmxvb3IodGhpcy5fZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgaWYgKHBhcmVudFdpZHRoICE9PSBlbFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCBwYXJlbnRXaWR0aCArICdweCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fdGFibGVSZWYubmF0aXZlRWxlbWVudCwgJ21heC13aWR0aCcsIHBhcmVudFdpZHRoICsgJ3B4Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX3RhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIHBhcmVudFdpZHRoICsgJ3B4Jyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9jYWxjdWxhdGVIZWFkZXJTdGlja3lUb3AoZG9tOiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0aWNreUVuYWJsZSgpICYmIHRoaXMudGFibGVIZWFkZXJEb20pIHtcclxuICAgICAgICAgICAgLy8gY29uc3QgcmVjID0gdGhpcy5oZWFkZXJPYnNlcnZlckRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgLy8gY29uc3QgdG9wID0gcmVjLnRvcDtcclxuICAgICAgICAgICAgLy8gY29uc3QgY2FsYyA9IHRoaXMudGFibGVIZWFkZXJUb3AgLSB0b3AgLSB0aGlzLnRhYmxlSGVhZGVySGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgY29uc3QgcmVjID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5faGVhZGVyVG9wJC5uZXh0KHJlYy50b3AgLSAxMiArIHRoaXMudGFibGVIZWFkZXJIZWlnaHQgKyAncHgnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9maXJlUmVzaXplQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbHVtblJlc2l6ZWQuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcclxuICAgICAgICAgICAgcmVzaXplZDogdGhpcy5jb2x1bW5zLm1hcCgoYykgPT4gKHsgbmFtZTogYy5OYW1lLCB3aWR0aDogYy5XaWR0aCB9KSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfY2FsY3VsYXRlQ29sdW1uc1dpZHRoKG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSwgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnRhYmxlSGVhZGVyTW9kZSkge1xyXG4gICAgICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZnJlZUNvbHVtblNpemUobW9EYXRhTGlzdCwgY29sdW1ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb1Jvd0NvbnRlbnQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9maXRUb1Jvd0NvbnRlbnRDb2x1bW4obW9EYXRhTGlzdCwgY29sdW1ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb0NvbnRhaW5lcjpcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpdFRvQ29udGFpbmVyKG1vRGF0YUxpc3QsIGNvbHVtbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9maXRUb0NvbHVtbihtb0RhdGFMaXN0LCBjb2x1bW5zKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxEb20gPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNhbGN1bGF0ZUNvbHVtbldpZHRoKGVsRG9tLCBjb2x1bW5zLCBtb0RhdGFMaXN0LCB0aGlzLmRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51LCB0aGlzLmNvbnRleHRNZW51SXRlbXMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9maXRUb1Jvd0NvbnRlbnRDb2x1bW4obW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10pOiB2b2lkIHtcclxuICAgICAgICBjYWxjdWxhdGVDb2x1bW5Db250ZW50KGNvbHVtbnMsIG1vRGF0YUxpc3QpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9maXRUb0NvbnRhaW5lcihtb0RhdGFMaXN0LCBjb2x1bW5zKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxEb20gPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcclxuICAgICAgICAgICAgZWxEb20sXHJcbiAgICAgICAgICAgIHRoaXMuY2FuVmlldyxcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlSGVhZGVyQ29udGV4dE1lbnUsXHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVJdGVtcyxcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZnJlZUNvbHVtblNpemUobW9EYXRhTGlzdCwgY29sdW1ucyk6IHZvaWQge1xyXG4gICAgICAgIGNhbGN1bGF0ZUZyZWVDb2x1bW5TaXplKHRoaXMuY29sdW1ucyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldEhlaWdodChwYXJlbnRIZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmluRGlhbG9nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gcGFyZW50SGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2V0SGFzU3VtbWVyeShjYXJ0YWJsZVRlbXBsYXRlcyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxzQ29sdW1ucz8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgICAgICB0aGlzLmRldGFpbHNDb21wb25lbnQ/LlNlbGVjdG9yIHx8XHJcbiAgICAgICAgICAgIChjYXJ0YWJsZVRlbXBsYXRlcyAmJiBPYmplY3Qua2V5cyhjYXJ0YWJsZVRlbXBsYXRlcykubGVuZ3RoID4gMClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RGV0YWlsc0luUm93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oYXNEZXRhaWxzSW5Sb3cuZW1pdCh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhhc0RldGFpbHNJblJvdy5lbWl0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2NvbnRhaW5lcldpZHRoQ2hhbmdlZCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh2YWwgPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWwgPyB2YWwgKyAncHgnIDogJzEwMCUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fZWwubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgdGhpcy5fd2lkdGgpO1xyXG4gICAgfVxyXG59XHJcbiIsIjx0YWJsZVxyXG4gICAgZmQtdGFibGVcclxuICAgICN0YWJsZVRwbFxyXG4gICAgI2hlYWRlckJvdHRvbU9ic2VydmVyXHJcbiAgICBpbnRlcnNlY3Rpb25PYnNlcnZlclxyXG4gICAgW2ludGVyc2VjdGlvblRocmVzaG9sZF09XCIwLjFcIlxyXG4gICAgKHZpc2liaWxpdHlDaGFuZ2UpPVwib25UYWJsZVZpc2liaWxpdHlDaGFuZ2UoJGV2ZW50LCBoZWFkZXJCb3R0b21PYnNlcnZlcilcIlxyXG4gICAgW3BvcEluXT1cInBvcGluXCJcclxuICAgIFtjbGFzcy50YWJsZS1maXhlZF09XCJcclxuICAgICAgICAhY29udGV4dFZpZXc/LkdyaWRfSGlkZUhlYWRlciAmJiAoIXBvcGluIHx8IHNlY29uZGFyeUNvbHVtbnMubGVuZ3RoID09PSAwKSAmJiAhZGlzYWJsZUZpeGVkVGFibGVMYXlvdXRcclxuICAgIFwiXHJcbiAgICBbbm9Cb3JkZXJYXT1cInZpZXdTZXR0aW5nPy5Ob0hvcml6dG9uYWxCb3JkZXJzID09PSB0cnVlXCJcclxuICAgIFtub0JvcmRlclldPVwidmlld1NldHRpbmc/Lk5vVmVydGljYWxCb3JkZXJzID09PSB0cnVlIHx8IChwb3BpbiAmJiBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDApXCJcclxuPlxyXG4gICAgQGlmIChjb2x1bW5zIHwgbWVyZ2VGaWVsZHNUb0NvbHVtbnM6IHZpZXdTZXR0aW5nPy5NZXJnZUZpZWxkc1RvQ29sdW1ucz8uTW9EYXRhTGlzdDsgYXMgbWVyZ2VGaWVsZHNUb0NvbHVtbnMpIHtcclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBoZWFkZXJUZW1wbGF0ZTtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lcmdlRmllbGRzVG9Db2x1bW5zLCBtb0RhdGFMaXN0Q291bnQ6IG1vRGF0YUxpc3Q/Lmxlbmd0aCB9XHJcbiAgICAgICAgXCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIEBpZiAobW9EYXRhTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgYm9keVRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbWVyZ2VGaWVsZHNUb0NvbHVtbnMsIHByZXZpZXdDb2x1bW46IGFsbENvbHVtbnMgfCBmaW5kUHJldmlld0NvbHVtbiB9XHJcbiAgICAgICAgXCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lcmdlRmllbGRzVG9Db2x1bW5zIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIH0gfVxyXG48L3RhYmxlPlxyXG48IS0tcmVuZGVyQ29sdW1uLS0+XHJcblxyXG5AaWYgKCFtb0RhdGFMaXN0Py5sZW5ndGgpIHtcclxuPGJzdS1uby1kYXRhXHJcbiAgICBbY2xhc3Mubm8tdG9wYm9yZGVyXT1cIiFoaWRlVG9vbGJhclwiXHJcbiAgICBbY2xhc3Mubm9ib3JkZXJdPVwiY29udGV4dFZpZXcuR3JpZF9IaWRlSGVhZGVyICYmIGhpZGVUb29sYmFyXCJcclxuICAgIFtzaW1wbGVdPVwidHJ1ZVwiXHJcbj5cclxuPC9ic3Utbm8tZGF0YT5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZSBsZXQtY29sdW1ucyBsZXQtbW9EYXRhTGlzdENvdW50PlxyXG4gICAgPGJzdS1iYXJzYS10YWJsZS1oZWFkZXJcclxuICAgICAgICBbc3RpY2t5XT1cInN0aWNreUVuYWJsZSgpXCJcclxuICAgICAgICBbaGFzU2Vjb25kYXJ5Q29sdW1uc109XCJzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDBcIlxyXG4gICAgICAgIFtjbGFzcy5oYXMtdG9vbGJhcl09XCIhaGlkZVRvb2xiYXJcIlxyXG4gICAgICAgIFtzdHlsZS5wb2ludGVyLWV2ZW50c109XCJtb0RhdGFMaXN0Q291bnQgPyAnYXV0bycgOiAnbm9uZSdcIlxyXG4gICAgICAgIFt0YWJsZVdpZHRoXT1cImVsV2lkdGhcIlxyXG4gICAgICAgIFtzaG93RGV0YWlsc0luUm93XT1cInNob3dEZXRhaWxzSW5Sb3dcIlxyXG4gICAgICAgIFtoaWRlT3Blbkljb25dPVwiaGlkZU9wZW5JY29uXCJcclxuICAgICAgICBbcmVzaXplZEJ5VXNlcl09XCJyZXNpemVkQnlVc2VyXCJcclxuICAgICAgICBbdGFibGVIZWFkZXJNb2RlXT1cInRhYmxlSGVhZGVyTW9kZVwiXHJcbiAgICAgICAgW3Nob3dSb3dOdW1iZXJdPVwiY29udGV4dFZpZXc/LkdyaWRfU2hvd1Jvd051bWJlclwiXHJcbiAgICAgICAgW2FsbENoZWNrZWRdPVwiYWxsQ2hlY2tlZFwiXHJcbiAgICAgICAgW3J0bF09XCJydGxcIlxyXG4gICAgICAgIFthY3Rpb25MaXN0XT1cImFjdGlvbkxpc3RcIlxyXG4gICAgICAgIFtkaXNhYmxlUmVzcG9uc2l2ZV09XCJkaXNhYmxlUmVzcG9uc2l2ZVwiXHJcbiAgICAgICAgW2lzQ2hlY2tMaXN0XT1cImlzQ2hlY2tMaXN0XCJcclxuICAgICAgICBbY29sdW1uc109XCJcclxuICAgICAgICAgICAgY29sdW1uc1xyXG4gICAgICAgICAgICAgICAgfCBmaWx0ZXJDb2x1bW5zQnlEZXRhaWxzOiBkZXRhaWxzQ29sdW1uczpyb3dJbmRpY2F0b3JcclxuICAgICAgICAgICAgICAgIHwgZmlsdGVyOiB7IElzUHJldmlldzogZmFsc2UgfVxyXG4gICAgICAgICAgICAgICAgfCBoaWRlQ29sdW1uc0lubW9iaWxlOiB2aWV3U2V0dGluZz8uSGlkZUNvbHVtbnNJbk1vYmlsZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW2ZpdFdpZHRoXT1cImZpdFdpZHRoXCJcclxuICAgICAgICBbZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxyXG4gICAgICAgIFtpbmxpbmVFZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXHJcbiAgICAgICAgW2NvbnRleHRNZW51SXRlbXNdPVwiY29udGV4dE1lbnVJdGVtc1wiXHJcbiAgICAgICAgW2NvbnRleHRNZW51V2lkdGhdPVwiY29udGV4dE1lbnVXaWR0aFwiXHJcbiAgICAgICAgW3Nob3dWaWV3QnV0dG9uXT1cInNob3dWaWV3QnV0dG9uXCJcclxuICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICBbdmlld1NldHRpbmddPVwidmlld1NldHRpbmdcIlxyXG4gICAgICAgIFtoaWRlSGVhZGVyXT1cImNvbnRleHRWaWV3LkdyaWRfSGlkZUhlYWRlclwiXHJcbiAgICAgICAgW3Jvd0luZGljYXRvcl09XCJyb3dJbmRpY2F0b3JcIlxyXG4gICAgICAgIFtkaXNhYmxlUmVzaXplXT1cImRpc2FibGVSZXNpemVcIlxyXG4gICAgICAgIFtkaXNhYmxlSGVhZGVyQ29udGV4dE1lbnVdPVwiZGlzYWJsZUhlYWRlckNvbnRleHRNZW51XCJcclxuICAgICAgICAoaGVhZGVyUmVuZGVyKT1cIm9uU2V0VGFibGVIZWFkZXJEb20oJGV2ZW50KVwiXHJcbiAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJvbkNvbHVtblJlc2l6ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNvbHVtblJlc2l6aW5nKT1cIm9uQ29sdW1uUmVzaXppbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZpdFRvQ29udGVudCk9XCJvbkZpdFRvQ29udGVudCgkZXZlbnQpXCJcclxuICAgICAgICAoZml0VG9Db250YWluZXIpPVwib25GaXRUb0NvbnRhaW5lcigpXCJcclxuICAgICAgICAoZnJlZUNvbHVtblNpemUpPVwib25GcmVlQ29sdW1uU2l6aW5nKClcIlxyXG4gICAgICAgIChhbGxDaGVja2JveCk9XCJvbkFsbENoZWNrYm94KCRldmVudClcIlxyXG4gICAgICAgIChzb3J0QXNjZW5kaW5nKT1cIm9uU29ydEFzY2VuZGluZygkZXZlbnQpXCJcclxuICAgICAgICAoc29ydERlc2NlbmRpbmcpPVwib25Tb3J0RGVzY2VuZGluZygkZXZlbnQpXCJcclxuICAgICAgICAoZmlsdGVyKT1cIm9uRmlsdGVyKCRldmVudClcIlxyXG4gICAgICAgIChyZXNldEdyaWRTZXR0aW5ncyk9XCJyZXNldEdyaWRTZXR0aW5ncy5lbWl0KClcIlxyXG4gICAgPjwvYnN1LWJhcnNhLXRhYmxlLWhlYWRlcj5cclxuICAgIDwhLS0gPGRpdlxyXG4gICAgICAgICNoZWFkZXJCb3R0b21PYnNlcnZlclxyXG4gICAgICAgIGludGVyc2VjdGlvbk9ic2VydmVyXHJcbiAgICAgICAgW2ludGVyc2VjdGlvblRocmVzaG9sZF09XCIwLjFcIlxyXG4gICAgICAgICh2aXNpYmlsaXR5Q2hhbmdlKT1cIm9uSGVhZGVyVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQsIGhlYWRlckJvdHRvbU9ic2VydmVyKVwiXHJcbiAgICA+PC9kaXY+IC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtY29sdW1ucyBsZXQtcHJldmlld0NvbHVtbj1cInByZXZpZXdDb2x1bW5cIj5cclxuICAgIDx0Ym9keVxyXG4gICAgICAgICNib2R5XHJcbiAgICAgICAgZmQtdGFibGUtYm9keVxyXG4gICAgICAgIFtjbGFzcy5ub2JvcmRlcl09XCJ2aWV3U2V0dGluZz8uTm9Cb2R5Qm9yZGVycyA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgW25vQm9yZGVyWF09XCJ2aWV3U2V0dGluZz8uTm9Ib3JpenRvbmFsQm9yZGVycyA9PT0gdHJ1ZSB8fCBwcmV2aWV3Q29sdW1uXCJcclxuICAgICAgICBbbm9Cb3JkZXJZXT1cIihwb3BpbiAmJiBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDApIHx8IHByZXZpZXdDb2x1bW5cIlxyXG4gICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIEBmb3IgKG1vIG9mIG1vRGF0YUxpc3QgfCBtdWx0aXBsZUdyb3VwQnk6IGdyb3VwYnk7IHRyYWNrIF90cmFja0J5Um93KGluZGV4LCBtbyk7IGxldCBpbmRleCA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGhhc1Jvd09sZ28gPyByb3dPbGdvVGVtcGxhdGUgOiByb3dUZW1wbGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogbW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93TnVtYmVyOiBtby5JZCB8IHJvd051bWJlcjogcGFnaW5nU2V0dGluZzptb0RhdGFMaXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRpY2F0b3JDb2xvcjogIWNvbHVtbnMubGVuZ3RoID8gJycgOiAoY29sdW1uc1swXS5DYXB0aW9uIHwgcnZhbDogbW86Y29sdW1ucyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMgfCBjb2x1bW5DdXN0b21Db21wb25lbnQ6IHZpZXdTZXR0aW5nPy5Db2x1bW5Db21wb25lbnRzPy5Nb0RhdGFMaXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlDb2x1bW5zOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sdW1ucyB8IGNvbHVtbkN1c3RvbUNvbXBvbmVudDogdmlld1NldHRpbmc/LkNvbHVtbkNvbXBvbmVudHM/Lk1vRGF0YUxpc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vRGF0YUxpc3Q6IG1vRGF0YUxpc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vRGF0YUxpc3RDb3VudDogbW9EYXRhTGlzdC5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRhYmxlVGVtcGxhdGU6IGNhcnRhYmxlVGVtcGxhdGVzW21vLlJlbGF0ZWRNbz8uJFR5cGVEZWZJZCArICdAJyArIG1vLkNhcnRhYmxlU2V0dGluZ3M/LklkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld0NvbHVtbjogcHJldmlld0NvbHVtbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsc0NvbGxhcHNlZDogdmlld1NldHRpbmc/LkRldGFpbHNTZXR0aW5nPy5EZXRhaWxzQ29sbGFwc2VkID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlRGV0YWlsc1RleHQ6IHZpZXdTZXR0aW5nPy5EZXRhaWxzU2V0dGluZz8uSGlkZURldGFpbHNUZXh0ID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3Rib2R5PlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlIGxldC1jb2x1bW5zPlxyXG4gICAgQGlmIChoYXNTdW1tYXJ5KSB7XHJcbiAgICA8dGZvb3QgZmQtdGFibGUtZm9vdGVyPlxyXG4gICAgICAgIDx0ciBmZC10YWJsZS1yb3cgY2xhc3M9XCJyb3ctc3VtbWFyeVwiPlxyXG4gICAgICAgICAgICBAaWYgKGlzQ2hlY2tMaXN0KSB7XHJcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNvbHVtblJlc2l6ZXI+XHJcbiAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwiY29sLXRvdGFsLXRleHRcIj57eyAnVG90YWwnIHwgYmJiVHJhbnNsYXRlIH19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIH0gQGlmICghaXNDaGVja0xpc3QpIHtcclxuICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJzaW5nbGUtc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwiY29sLXRvdGFsLXRleHRcIj57eyAnVG90YWwnIHwgYmJiVHJhbnNsYXRlIH19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIH0gQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbjsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uSGFzU3VtbWFyeSkge1xyXG4gICAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT1cImRpcmVjdGlvbjogbHRyOyBkaXNwbGF5OiBibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG1vRGF0YUxpc3QgfCB0b3RhbFN1bW1hcnk6IGNvbHVtbi5OYW1lIHwgbnVtYmVyIH19PC9zdHJvbmdcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgfSBAaWYgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIHN0eWxlPVwid2lkdGg6IDEwMHB4XCI+PC90ZD5cclxuICAgICAgICAgICAgfSBAaWYgKCFoaWRlT3Blbkljb24gJiYgY2FuVmlldyAmJiAoIWlubGluZUVkaXRNb2RlIHx8ICFhbGxvd0lubGluZUVkaXQpKSB7XHJcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsPjwvdGQ+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90Zm9vdD5cclxuICAgIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlXHJcbiAgICAjcm93T2xnb1RlbXBsYXRlXHJcbiAgICBsZXQtbW9cclxuICAgIGxldC1pbmRleD1cImluZGV4XCJcclxuICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICBsZXQtbW9EYXRhTGlzdENvdW50PVwibW9EYXRhTGlzdENvdW50XCJcclxuICAgIGxldC1tb0RhdGFMaXN0PVwibW9EYXRhTGlzdFwiXHJcbiAgICBsZXQtY2FydGFibGVUZW1wbGF0ZT1cImNhcnRhYmxlVGVtcGxhdGVcIlxyXG4gICAgbGV0LXNlY29uZGFyeUNvbHVtbnM9XCJzZWNvbmRhcnlDb2x1bW5zXCJcclxuICAgIGxldC1yb3dJbmRpY2F0b3JDb2xvcj1cInJvd0luZGljYXRvckNvbG9yXCJcclxuICAgIGxldC1yb3dOdW1iZXI9XCJyb3dOdW1iZXJcIlxyXG4gICAgbGV0LXByZXZpZXdDb2x1bW49XCJwcmV2aWV3Q29sdW1uXCJcclxuICAgIGxldC1kZXRhaWxzQ29sbGFwc2VkPVwiZGV0YWlsc0NvbGxhcHNlZFwiXHJcbiAgICBsZXQtaGlkZURldGFpbHNUZXh0PVwiaGlkZURldGFpbHNUZXh0XCJcclxuPlxyXG4gICAgPGJucmMtZHluYW1pYy1pdGVtLWNvbXBvbmVudFxyXG4gICAgICAgIFtjb21wb25lbnRdPVwidmlld1NldHRpbmcuUm93T2xnb1wiXHJcbiAgICAgICAgW21vXT1cIm1vXCJcclxuICAgICAgICBbZGV0YWlsc0NvbGxhcHNlZF09XCJkZXRhaWxzQ29sbGFwc2VkXCJcclxuICAgICAgICBbaGlkZURldGFpbHNUZXh0XT1cImhpZGVEZXRhaWxzVGV4dFwiXHJcbiAgICAgICAgW2lzTGFzdENoaWxkR3JvdXBdPVwibW8uJElzTGFzdENoaWxkR3JvdXBcIlxyXG4gICAgICAgIFtncm91cFN1bW1hcnldPVwiZ3JvdXBTdW1tYXJ5XCJcclxuICAgICAgICBbc2hvd1ZpZXdCdXR0b25dPVwic2hvd1ZpZXdCdXR0b25cIlxyXG4gICAgICAgIFtpbmxpbmVFZGl0V2l0aG91dFNlbGVjdGlvbl09XCJpbmxpbmVFZGl0V2l0aG91dFNlbGVjdGlvblwiXHJcbiAgICAgICAgW1Vsdk1haW5DdHJscl09XCJVbHZNYWluQ3RybHJcIlxyXG4gICAgICAgIFttb0RhdGFMaXN0XT1cIm1vRGF0YUxpc3RcIlxyXG4gICAgICAgIFtzaG93RGV0YWlsc0luUm93XT1cInNob3dEZXRhaWxzSW5Sb3dcIlxyXG4gICAgICAgIFtoaWRlT3Blbkljb25dPVwiaGlkZU9wZW5JY29uXCJcclxuICAgICAgICBbZGV0YWlsc0NvbHVtbnNdPVwiZGV0YWlsc0NvbHVtbnNcIlxyXG4gICAgICAgIFtzaG93Um93TnVtYmVyXT1cImNvbnRleHRWaWV3Py5HcmlkX1Nob3dSb3dOdW1iZXJcIlxyXG4gICAgICAgIFtyb3dOdW1iZXJdPVwicm93TnVtYmVyXCJcclxuICAgICAgICBbY29sdW1uQ29tcG9uZW50c109XCJ2aWV3U2V0dGluZz8uQ29sdW1uQ29tcG9uZW50cyB8fCBudWxsXCJcclxuICAgICAgICBbY2FydGFibGVUZW1wbGF0ZV09XCJjYXJ0YWJsZVRlbXBsYXRlXCJcclxuICAgICAgICBbY2FydGFibGVNb109XCJtby5SZWxhdGVkTW9cIlxyXG4gICAgICAgIFtkaXJ0eUNvbHVtbnNdPVwibW8uJERpcnR5Q29sdW1uc1wiXHJcbiAgICAgICAgW2NhcnRhYmxlV29ya2Zsb3dEYXRhXT1cIm1vLlNlcmlhbGl6ZWRXb3JrZmxvd0RhdGFcIlxyXG4gICAgICAgIFtzZXJpYWxpemVkUmVsYXRlZE1vXT1cIm1vLlNlcmlhbGl6ZWRSZWxhdGVkTW9cIlxyXG4gICAgICAgIFtkZXRhaWxzVGV4dF09XCJ2aWV3U2V0dGluZz8uRGV0YWlsc1NldHRpbmc/LkJ1dHRvblRleHRcIlxyXG4gICAgICAgIFtkZXRhaWxzVGV4dEZ1bmN0aW9uXT1cInZpZXdTZXR0aW5nPy5EZXRhaWxzU2V0dGluZz8uQnV0dG9uVGV4dEZ1bmN0aW9uXCJcclxuICAgICAgICBbZGV0YWlsc0NvbXBvbmVudF09XCJkZXRhaWxzQ29tcG9uZW50XCJcclxuICAgICAgICBbY29sb3JpbmdSb3ddPVwidmlld1NldHRpbmc/LkNvbG9yaW5nUm93XCJcclxuICAgICAgICBbaXNDaGVja2VkXT1cIm1vLiRJc0NoZWNrZWRcIlxyXG4gICAgICAgIFt2aXNpYmlsaXR5XT1cIm1vLiRWaXNpYmlsaXR5XCJcclxuICAgICAgICBbZXhwYW5kZWRdPVwibW8uJEV4cGFuZGVkXCJcclxuICAgICAgICBbc3R5bGVJbmRleF09XCJtby4kU3R5bGVJbmRleFwiXHJcbiAgICAgICAgW2xldmVsXT1cIm1vLiRMZXZlbFwiXHJcbiAgICAgICAgW3BhcmVudEV4cGFuZGVkXT1cIm1vLiRQYXJlbnQ/LiRFeHBhbmRlZFwiXHJcbiAgICAgICAgW21vRGF0YUxpc3RDb3VudF09XCJtb0RhdGFMaXN0Q291bnRcIlxyXG4gICAgICAgIFtjb2x1bW5zQ291bnRdPVwiY29sdW1uc0NvdW50IC0gZGV0YWlsc0NvbHVtbnMubGVuZ3RoXCJcclxuICAgICAgICBbdHlwZURlZklkXT1cInR5cGVEZWZJZFwiXHJcbiAgICAgICAgW2V4dHJhUmVsYXRpb25dPVwiZXh0cmFSZWxhdGlvblwiXHJcbiAgICAgICAgW2Zvcm1TZXR0aW5nXT1cImZvcm1TZXR0aW5nXCJcclxuICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxyXG4gICAgICAgIFtzZXR0aW5nXT1cInZpZXdTZXR0aW5nXCJcclxuICAgICAgICBbc2Vjb25kYXJ5Q29sdW1uc109XCJzZWNvbmRhcnlDb2x1bW5zIHwgZmlsdGVyQ29sdW1uc0J5RGV0YWlsczogZGV0YWlsc0NvbHVtbnM6cm93SW5kaWNhdG9yXCJcclxuICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zIHwgZmlsdGVyQ29sdW1uc0J5RGV0YWlsczogZGV0YWlsc0NvbHVtbnM6cm93SW5kaWNhdG9yXCJcclxuICAgICAgICBbaXNOZXdJbmxpbmVNb109XCJtby4kTmV3SW5saW5lTW9cIlxyXG4gICAgICAgIFthY2Nlc3NdPVwiYWNjZXNzXCJcclxuICAgICAgICBbaW5saW5lRWRpdE1vZGVdPVwiaW5saW5lRWRpdE1vZGVcIlxyXG4gICAgICAgIFthbGxvd0lubGluZUVkaXRdPVwiYWxsb3dJbmxpbmVFZGl0XCJcclxuICAgICAgICBbcnRsXT1cInJ0bFwiXHJcbiAgICAgICAgW2RldmljZU5hbWVdPVwiZGV2aWNlTmFtZVwiXHJcbiAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXHJcbiAgICAgICAgW2FsbENvbHVtbnNdPVwiYWxsQ29sdW1uc1wiXHJcbiAgICAgICAgW2NvbnRleHRNZW51SXRlbXNdPVwiY29udGV4dE1lbnVJdGVtc1wiXHJcbiAgICAgICAgW2NhblZpZXddPVwiY2FuVmlld1wiXHJcbiAgICAgICAgW2NvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxyXG4gICAgICAgIFtkaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudV09XCJkaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudVwiXHJcbiAgICAgICAgW25hdmlnYXRpb25BcnJvd109XCJuYXZpZ2F0aW9uQXJyb3dcIlxyXG4gICAgICAgIFtpc0NoZWNrTGlzdF09XCJpc0NoZWNrTGlzdFwiXHJcbiAgICAgICAgW3Jvd0luZGljYXRvcl09XCJyb3dJbmRpY2F0b3JcIlxyXG4gICAgICAgIFtyb3dJbmRpY2F0b3JDb2xvcl09XCJyb3dJbmRpY2F0b3JDb2xvclwiXHJcbiAgICAgICAgKGV2ZW50cyk9XCJvbk9sZ29FdmVudHMoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L2JucmMtZHluYW1pYy1pdGVtLWNvbXBvbmVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlXHJcbiAgICAjcm93VGVtcGxhdGVcclxuICAgIGxldC1tb1xyXG4gICAgbGV0LWluZGV4PVwiaW5kZXhcIlxyXG4gICAgbGV0LXJvd051bWJlcj1cInJvd051bWJlclwiXHJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxyXG4gICAgbGV0LW1vRGF0YUxpc3RDb3VudD1cIm1vRGF0YUxpc3RDb3VudFwiXHJcbiAgICBsZXQtbW9EYXRhTGlzdD1cIm1vRGF0YUxpc3RcIlxyXG4gICAgbGV0LWNhcnRhYmxlVGVtcGxhdGU9XCJjYXJ0YWJsZVRlbXBsYXRlXCJcclxuICAgIGxldC1zZWNvbmRhcnlDb2x1bW5zPVwic2Vjb25kYXJ5Q29sdW1uc1wiXHJcbiAgICBsZXQtcm93SW5kaWNhdG9yQ29sb3I9XCJyb3dJbmRpY2F0b3JDb2xvclwiXHJcbiAgICBsZXQtcHJldmlld0NvbHVtbj1cInByZXZpZXdDb2x1bW5cIlxyXG4gICAgbGV0LWRldGFpbHNDb2xsYXBzZWQ9XCJkZXRhaWxzQ29sbGFwc2VkXCJcclxuICAgIGxldC1oaWRlRGV0YWlsc1RleHQ9XCJoaWRlRGV0YWlsc1RleHRcIlxyXG4+XHJcbiAgICA8YnN1LWJhcnNhLXRhYmxlLXJvd1xyXG4gICAgICAgIFttb109XCJtb1wiXHJcbiAgICAgICAgW2RpcnR5Q29sdW1uc109XCJtby4kRGlydHlDb2x1bW5zXCJcclxuICAgICAgICBbaW5saW5lRWRpdFdpdGhvdXRTZWxlY3Rpb25dPVwiaW5saW5lRWRpdFdpdGhvdXRTZWxlY3Rpb25cIlxyXG4gICAgICAgIFtpc0xhc3RDaGlsZEdyb3VwXT1cIm1vLiRJc0xhc3RDaGlsZEdyb3VwXCJcclxuICAgICAgICBbbW9EYXRhTGlzdF09XCJtb0RhdGFMaXN0XCJcclxuICAgICAgICBbaGlkZURldGFpbHNUZXh0XT1cImhpZGVEZXRhaWxzVGV4dFwiXHJcbiAgICAgICAgW2RldGFpbHNDb2xsYXBzZWRdPVwiZGV0YWlsc0NvbGxhcHNlZFwiXHJcbiAgICAgICAgW2dyb3VwU3VtbWFyeV09XCJncm91cFN1bW1hcnlcIlxyXG4gICAgICAgIFtVbHZNYWluQ3RybHJdPVwiVWx2TWFpbkN0cmxyXCJcclxuICAgICAgICBbaXNNb2JpbGVdPVwiaXNNb2JpbGVcIlxyXG4gICAgICAgIFtzaG93RGV0YWlsc0luUm93XT1cInNob3dEZXRhaWxzSW5Sb3dcIlxyXG4gICAgICAgIFtoaWRlT3Blbkljb25dPVwiaGlkZU9wZW5JY29uXCJcclxuICAgICAgICBbc2hvd1Jvd051bWJlcl09XCJjb250ZXh0Vmlldz8uR3JpZF9TaG93Um93TnVtYmVyXCJcclxuICAgICAgICBbcm93TnVtYmVyXT1cInJvd051bWJlclwiXHJcbiAgICAgICAgW2NvbG9yaW5nUm93XT1cInZpZXdTZXR0aW5nPy5Db2xvcmluZ1Jvd1wiXHJcbiAgICAgICAgW2Rpc2FibGVFbGxhcHNpc109XCJ2aWV3U2V0dGluZz8uRGlzYWJsZUVsbGFwc2lzXCJcclxuICAgICAgICBbc2hvd1ZpZXdCdXR0b25dPVwic2hvd1ZpZXdCdXR0b25cIlxyXG4gICAgICAgIFtkZXRhaWxzQ29sdW1uc109XCJkZXRhaWxzQ29sdW1uc1wiXHJcbiAgICAgICAgW2NvbHVtbkNvbXBvbmVudHNdPVwidmlld1NldHRpbmc/LkNvbHVtbkNvbXBvbmVudHMgfHwgbnVsbFwiXHJcbiAgICAgICAgW2NhcnRhYmxlVGVtcGxhdGVdPVwiY2FydGFibGVUZW1wbGF0ZVwiXHJcbiAgICAgICAgW2NhcnRhYmxlTW9dPVwibW8uUmVsYXRlZE1vXCJcclxuICAgICAgICBbY2FydGFibGVXb3JrZmxvd0RhdGFdPVwibW8uU2VyaWFsaXplZFdvcmtmbG93RGF0YVwiXHJcbiAgICAgICAgW3NlcmlhbGl6ZWRSZWxhdGVkTW9dPVwibW8uU2VyaWFsaXplZFJlbGF0ZWRNb1wiXHJcbiAgICAgICAgW2RldGFpbHNUZXh0XT1cInZpZXdTZXR0aW5nPy5EZXRhaWxzU2V0dGluZz8uQnV0dG9uVGV4dFwiXHJcbiAgICAgICAgW2RldGFpbHNDb21wb25lbnRdPVwiZGV0YWlsc0NvbXBvbmVudFwiXHJcbiAgICAgICAgW2lzQ2hlY2tlZF09XCJtby4kSXNDaGVja2VkXCJcclxuICAgICAgICBbdmlzaWJpbGl0eV09XCJtby4kVmlzaWJpbGl0eVwiXHJcbiAgICAgICAgW2V4cGFuZGVkXT1cIm1vLiRFeHBhbmRlZFwiXHJcbiAgICAgICAgW3N0eWxlSW5kZXhdPVwibW8uJFN0eWxlSW5kZXhcIlxyXG4gICAgICAgIFtsZXZlbF09XCJtby4kTGV2ZWxcIlxyXG4gICAgICAgIFtwYXJlbnRFeHBhbmRlZF09XCJtby4kUGFyZW50Py4kRXhwYW5kZWRcIlxyXG4gICAgICAgIFttb0RhdGFMaXN0Q291bnRdPVwibW9EYXRhTGlzdENvdW50XCJcclxuICAgICAgICBbY29sdW1uc0NvdW50XT1cImNvbHVtbnNDb3VudCAtIGRldGFpbHNDb2x1bW5zLmxlbmd0aFwiXHJcbiAgICAgICAgW3R5cGVEZWZJZF09XCJ0eXBlRGVmSWRcIlxyXG4gICAgICAgIFtleHRyYVJlbGF0aW9uXT1cImV4dHJhUmVsYXRpb25cIlxyXG4gICAgICAgIFtmb3JtU2V0dGluZ109XCJmb3JtU2V0dGluZ1wiXHJcbiAgICAgICAgW2luZGV4XT1cImluZGV4XCJcclxuICAgICAgICBbc2V0dGluZ109XCJ2aWV3U2V0dGluZ1wiXHJcbiAgICAgICAgW2NoZWNrYm94Q29tcG9uZW50XT1cInZpZXdTZXR0aW5nPy5DaGVja2JveENvbXBvbmVudFwiXHJcbiAgICAgICAgW3NlY29uZGFyeUNvbHVtbnNdPVwiXHJcbiAgICAgICAgICAgIHNlY29uZGFyeUNvbHVtbnNcclxuICAgICAgICAgICAgICAgIHwgZmlsdGVyQ29sdW1uc0J5RGV0YWlsczogZGV0YWlsc0NvbHVtbnM6ZmFsc2VcclxuICAgICAgICAgICAgICAgIHwgZmlsdGVyOiB7IElzUHJldmlldzogZmFsc2UgfVxyXG4gICAgICAgICAgICAgICAgfCBoaWRlQ29sdW1uc0lubW9iaWxlOiB2aWV3U2V0dGluZz8uSGlkZUNvbHVtbnNJbk1vYmlsZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW2NvbHVtbnNdPVwiXHJcbiAgICAgICAgICAgIGNvbHVtbnNcclxuICAgICAgICAgICAgICAgIHwgZmlsdGVyQ29sdW1uc0J5RGV0YWlsczogZGV0YWlsc0NvbHVtbnM6cm93SW5kaWNhdG9yXHJcbiAgICAgICAgICAgICAgICB8IGZpbHRlcjogeyBJc1ByZXZpZXc6IGZhbHNlIH1cclxuICAgICAgICAgICAgICAgIHwgaGlkZUNvbHVtbnNJbm1vYmlsZTogdmlld1NldHRpbmc/LkhpZGVDb2x1bW5zSW5Nb2JpbGVcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtpc05ld0lubGluZU1vXT1cIm1vLiROZXdJbmxpbmVNb1wiXHJcbiAgICAgICAgW2FjY2Vzc109XCJhY2Nlc3NcIlxyXG4gICAgICAgIFtzaW1wbGVJbmxpbmVFZGl0XT1cInNpbXBsZUlubGluZUVkaXRcIlxyXG4gICAgICAgIFtub1NhdmVJbmxpbmVFZGl0SW5TZXJ2ZXJdPVwic2ltcGxlSW5saW5lRWRpdFwiXHJcbiAgICAgICAgW2FjdGlvbkxpc3RdPVwiYWN0aW9uTGlzdFwiXHJcbiAgICAgICAgW2lubGluZUVkaXRNb2RlXT1cImlubGluZUVkaXRNb2RlXCJcclxuICAgICAgICBbYWxsb3dJbmxpbmVFZGl0XT1cImFsbG93SW5saW5lRWRpdFwiXHJcbiAgICAgICAgW3J0bF09XCJydGxcIlxyXG4gICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxyXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxyXG4gICAgICAgIFtjb250ZXh0TWVudUl0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIlxyXG4gICAgICAgIFtjYW5WaWV3XT1cImNhblZpZXdcIlxyXG4gICAgICAgIFtjb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcclxuICAgICAgICBbZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxyXG4gICAgICAgIFtuYXZpZ2F0aW9uQXJyb3ddPVwibmF2aWdhdGlvbkFycm93XCJcclxuICAgICAgICBbaXNDaGVja0xpc3RdPVwiaXNDaGVja0xpc3RcIlxyXG4gICAgICAgIFtyb3dJbmRpY2F0b3JdPVwicm93SW5kaWNhdG9yXCJcclxuICAgICAgICBbcm93SW5kaWNhdG9yQ29sb3JdPVwicm93SW5kaWNhdG9yQ29sb3JcIlxyXG4gICAgICAgIFtwcmV2aWV3Q29sdW1uXT1cInByZXZpZXdDb2x1bW5cIlxyXG4gICAgICAgIChjb2x1bW5TdW1tYXJ5KT1cImNvbHVtblN1bW1hcnkuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAocmVzZXRXb3JrZmxvd1N0YXRlKT1cInJlc2V0V29ya2Zsb3dTdGF0ZS5lbWl0KG1vKVwiXHJcbiAgICAgICAgKGVzY2FwZUtleSk9XCJvbkVzY2FwZUtleSgkZXZlbnQpXCJcclxuICAgICAgICAoZXhwYW5kQ2xpY2spPVwib25FeHBhbmRDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAocm93Q2hlY2spPVwib25Sb3dDaGVjaygkZXZlbnQpXCJcclxuICAgICAgICAod29ya2Zsb3dTaGFyZUJ1dHRvbnMpPVwib25Xb3JrZmxvd1NoYXJlQnV0dG9ucygkZXZlbnQpXCJcclxuICAgICAgICAoZGVzZWxlY3RBbGwpPVwib25EZXNlbGVjdEFsbCgpXCJcclxuICAgICAgICAocm93Q2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAodWx2Q29tbWFuZCk9XCJvblVsdkNvbW1hbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGFjdGlvbkxpc3RDbGljayk9XCJvbkFjdGlvbkxpc3RDbGljayhtbywgaW5kZXgsICRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3ROZXh0SW5saW5lUmVjb3JkKT1cIm9uU2VsZWN0TmV4dElubGluZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAoZWRpdEZvcm1QYW5lbFNhdmUpPVwib25FZGl0Rm9ybVBhbmVsU2F2ZSgkZXZlbnQpXCJcclxuICAgICAgICAoZWRpdEZvcm1QYW5lbENhbmNlbCk9XCJvbkVkaXRGb3JtUGFuZWxDYW5jZWwoJGV2ZW50KVwiXHJcbiAgICAgICAgKGVkaXRGb3JtUGFuZWxWYWx1ZUNoYW5nZSk9XCJvbkVkaXRGb3JtUGFuZWxWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAoY2FydGFibGVGb3JtQ2xvc2VkKT1cIm9uQ2FydGFibGVGb3JtQ2xvc2VkKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9ic3UtYmFyc2EtdGFibGUtcm93PlxyXG4gICAgPCEtLSA8ZGl2XHJcbiAgICAgICAgI3Jvd0JvdHRvbVxyXG4gICAgICAgIGludGVyc2VjdGlvbk9ic2VydmVyXHJcbiAgICAgICAgW2ludGVyc2VjdGlvblRocmVzaG9sZF09XCIwLjFcIlxyXG4gICAgICAgICh2aXNpYmlsaXR5Q2hhbmdlKT1cIm9uUm93VmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQsIGluZGV4LCByb3dCb3R0b20pXCJcclxuICAgID48L2Rpdj4gLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxkaXYgI3RhYmxlQm90dG9tT2JzZXJ2ZT48L2Rpdj5cclxuIl19
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktdGFibGUtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS10YWJsZS12aWV3L3VpLXRhYmxlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktdGFibGUtdmlldy91aS10YWJsZS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUVILHVCQUF1QixFQUV2QixvQkFBb0IsRUFFcEIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixrQ0FBa0MsRUFDbEMsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixpQ0FBaUMsRUFDakMsaUJBQWlCLEVBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7O0FBUy9GLE1BQU0sT0FBTyxvQkFDVCxTQUFRLHVCQUEyQztJQVJ2RDs7UUFxQm9DLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBQzVCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2pFLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFHaEIscUJBQWdCLEdBQW1FLEVBQUUsQ0FBQztRQUV0RixvQkFBZSxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQztRQUN0RCxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3Qix1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxD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QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDMEIsTUFBTTtzQkFBckMsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBQ0csU0FBUztzQkFBekMsV0FBVzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkluaXQsXHJcbiAgICBzaWduYWwsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50LFxyXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcclxuICAgIFRhYmxlSGVhZGVyV2lkdGhNb2RlLFxyXG4gICAgQ29sdW1uUmVzaXplZEFyZ3MsXHJcbiAgICBjYWxjQ29udGV4dE1lbnVXaWR0aCxcclxuICAgIGNhbGN1bGF0ZUNvbHVtbldpZHRoLFxyXG4gICAgY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcixcclxuICAgIGNhbGN1bGF0ZUZyZWVDb2x1bW5TaXplLFxyXG4gICAgY2FsY3VsYXRlQ29sdW1uQ29udGVudCxcclxuICAgIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aCxcclxuICAgIGdldERldmljZUlzTW9iaWxlXHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBVaVRhYmxlVmlld1NldHRpbmcgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC12aWV3JztcclxuaW1wb3J0IHsgQmFyc2FUYWJsZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2JhcnNhLXRhYmxlLWhlYWRlci9iYXJzYS10YWJsZS1oZWFkZXIuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtdWktdGFibGUtdmlldycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktdGFibGUtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS10YWJsZS12aWV3LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaVRhYmxlVmlld0NvbXBvbmVudFxyXG4gICAgZXh0ZW5kcyBSZXBvcnRWaWV3QmFzZUNvbXBvbmVudDxVaVRhYmxlVmlld1NldHRpbmc+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzXHJcbntcclxuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlVHBsJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgX3RhYmxlUmVmOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZChCYXJzYVRhYmxlSGVhZGVyQ29tcG9uZW50KSBfdGFibGVIZWFkZXJDb21wb25lbnQ6IEJhcnNhVGFibGVIZWFkZXJDb21wb25lbnQ7XHJcbiAgICBASW5wdXQoKSBjb2x1bW5XaWR0aDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgbWluV2lkdGg7XHJcbiAgICBASW5wdXQoKSBtaW5IZWlnaHQ7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlUmVzaXplO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZUhlYWRlckNvbnRleHRNZW51O1xyXG4gICAgQElucHV0KCkgcm93UmVzaXplcjtcclxuICAgIEBJbnB1dCgpIGVuYWJsZVJlc2l6aW5nO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZUZpeGVkVGFibGVMYXlvdXQ7XHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodC5weCcpIGhlaWdodDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1heC1oZWlnaHQnKSBtYXhIZWlnaHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgX3dpZHRoID0gJzEwMCUnO1xyXG4gICAgc2hvd0RldGFpbHNJblJvdzogYm9vbGVhbjtcclxuICAgIGhhc1Jvd09sZ286IGJvb2xlYW47XHJcbiAgICBjb2x1bW5Db21wb25lbnRzOiB7IGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbjsgY29tcG9uZW50OiBNZXRhb2JqZWN0RGF0YU1vZGVsIH1bXSA9IFtdO1xyXG4gICAgcm93SW5kaWNhdG9yOiBib29sZWFuO1xyXG4gICAgdGFibGVIZWFkZXJNb2RlID0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI7XHJcbiAgICBzdGlja3lFbmFibGUgPSBzaWduYWwoZmFsc2UpO1xyXG4gICAgcm93VmlzaWJpbHR5Q2hhbmdlID0gc2lnbmFsKGZhbHNlKTtcclxuICAgIHRhYmxlSGVhZGVyRG9tOiBIVE1MRWxlbWVudDtcclxuICAgIF9oZWFkZXJUb3AkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgcm93VmlzaWJsZSQgPSBuZXcgU3ViamVjdDx7IGluZGV4OyBkb20gfT4oKTtcclxuICAgIF9pc1BhcmVudFdpZHRoU2V0ID0gZmFsc2U7XHJcbiAgICB0YWJsZUhlYWRlclRvcCA9IDA7XHJcbiAgICB0YWJsZUhlYWRlckhlaWdodCA9IDA7XHJcbiAgICBoZWFkZXJPYnNlcnZlckRvbTogSFRNTEVsZW1lbnQ7XHJcbiAgICBub3RWaXNpYmxlSXRlbXM6IG51bWJlcltdID0gW107XHJcbiAgICB2aXNpYmxlSXRlbXM6IG51bWJlcltdID0gW107XHJcbiAgICBvbGRXaWR0aCA9IDA7XHJcbiAgICBpc01vYmlsZSA9IGdldERldmljZUlzTW9iaWxlKCk7XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlLndpbmRvd1Jlc2l6ZSQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCB4ICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnbWF4LXdpZHRoJywgeCArICdweCcpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVGhXaWR0aCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGFzUm93T2xnbyA9IHRoaXMudmlld1NldHRpbmc/LlJvd09sZ28/LlNlbGVjdG9yO1xyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy52aWV3U2V0dGluZz8uQm9keUhlaWdodDtcclxuICAgICAgICB0aGlzLl9zZXRIYXNTdW1tZXJ5KHRoaXMuY2FydGFibGVDaGlsZHNNbyk7XHJcbiAgICAgICAgdGhpcy5fc2V0SGVpZ2h0KHRoaXMucGFyZW50SGVpZ2h0KTtcclxuICAgICAgICB0aGlzLl9zZXRXaWR0aCgpO1xyXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIHRoaXMuY29sdW1ucyk7XHJcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlck1vZGUgPSB0aGlzLmdyaWRGcmVlQ29sdW1uU2l6aW5nXHJcbiAgICAgICAgICAgID8gVGFibGVIZWFkZXJXaWR0aE1vZGUuRnJlZUNvbHVtblNpemVcclxuICAgICAgICAgICAgOiBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb0NvbnRhaW5lcjtcclxuICAgICAgICB0aGlzLl9jYWxjQ29udGV4dE1lbnVXaWR0aCh0aGlzLmNvbnRleHRNZW51SXRlbXMpO1xyXG4gICAgfVxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgaWYgKHgpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAke3h9cHhgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBjYXJ0YWJsZVRlbXBsYXRlcywgcGFyZW50SGVpZ2h0LCBjb250ZXh0TWVudUl0ZW1zLCBjb2x1bW5zQ291bnQsIGNvbHVtbnMsIHNlY29uZGFyeUNvbHVtbnMgfSA9IGNoYW5nZXM7XHJcbiAgICAgICAgaWYgKGNvbnRleHRNZW51SXRlbXMgJiYgIWNvbnRleHRNZW51SXRlbXMuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2FydGFibGVUZW1wbGF0ZXMgJiYgIWNhcnRhYmxlVGVtcGxhdGVzLmZpcnN0Q2hhbmdlICYmICF0aGlzLmhhc1N1bW1hcnkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0SGFzU3VtbWVyeShjYXJ0YWJsZVRlbXBsYXRlcy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGNvbHVtbnNDb3VudCAmJiAhY29sdW1uc0NvdW50LmZpcnN0Q2hhbmdlKSB8fCAoc2Vjb25kYXJ5Q29sdW1ucyAmJiAhc2Vjb25kYXJ5Q29sdW1ucy5maXJzdENoYW5nZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHRoaXMubW9EYXRhTGlzdCwgY29sdW1ucy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyZW50SGVpZ2h0ICYmICFwYXJlbnRIZWlnaHQuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0SGVpZ2h0KHBhcmVudEhlaWdodC5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgIH1cclxuICAgIF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudVdpZHRoID0gY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgdGhpcy5kaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudSk7XHJcbiAgICB9XHJcbiAgICBvblRhYmxlVmlzaWJpbGl0eUNoYW5nZShlLCBkb20pOiB2b2lkIHtcclxuICAgICAgICBpZiAoZSA9PT0gJ1Zpc2libGUnKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fc2V0V2lkdGgodHJ1ZSksIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25Db2x1bW5SZXNpemluZyhlOiB7IGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbjsgd2lkdGg6IG51bWJlciB9KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGFibGVIZWFkZXJDb21wb25lbnQuU2V0Q29sdW1uV2lkdGhUb1RoV2lkdGgoKTtcclxuICAgICAgICB0aGlzLl9zZXRQYXJlbnRXaWR0aCgpO1xyXG4gICAgfVxyXG4gICAgb25Db2x1bW5SZXNpemVkKGFycjogQXJyYXk8Q29sdW1uUmVzaXplZEFyZ3M+KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2Vjb25kYXJ5Q29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGFibGVIZWFkZXJNb2RlID09PSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GcmVlQ29sdW1uU2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl90YWJsZUhlYWRlckNvbXBvbmVudC5TZXRDb2x1bW5XaWR0aFRvVGhXaWR0aCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlNldENvbHVtbldpZHRoVG9QZXJjZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlJlZnJlc2hUYWJsZVRoV2lkdGgoKTtcclxuICAgICAgICB0aGlzLnJlc2l6ZWRCeVVzZXIgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUobGFzdFRoLCAnd2lkdGgnLCBgMTAwJWApO1xyXG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXplZC5lbWl0KHsgY29sdW1uczogdGhpcy5jb2x1bW5zLCByZXNpemVkOiBhcnIgfSk7XHJcbiAgICB9XHJcbiAgICBvbkZpdFRvQ29udGFpbmVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJNb2RlID0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI7XHJcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50V2lkdGhGaXQoKTtcclxuICAgICAgICB0aGlzLl90YWJsZUhlYWRlckNvbXBvbmVudC5TZXRDb2x1bW5XaWR0aFRvUGVyY2VudCgpO1xyXG4gICAgICAgIC8vIHRoaXMuX3JlZnJlc2hUaFdpZHRoKCk7XHJcbiAgICAgICAgLy8gdGhpcy5fZmlyZVJlc2l6ZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICAgIG9uRnJlZUNvbHVtblNpemluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyTW9kZSA9IFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplO1xyXG4gICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlNldENvbHVtbldpZHRoVG9UaFdpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50V2lkdGhGaXRUb09mZnNldFdpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHRoaXMubW9EYXRhTGlzdCwgdGhpcy5jb2x1bW5zKTtcclxuICAgIH1cclxuICAgIG9uRml0VG9Db250ZW50KGU6IHsgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uOyB0aERvbTogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgfSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgY29sdW1uLCB0aERvbSB9ID0gZTtcclxuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyTW9kZSA9IFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplO1xyXG4gICAgICAgIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIGNvbHVtbik7XHJcbiAgICAgICAgY29sdW1uLiRXaWR0aCA9IGNvbHVtbi4kQ29udGVudFdpZHRoO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aERvbSwgJ3dpZHRoJywgY29sdW1uLiRXaWR0aCk7XHJcbiAgICAgICAgdGhpcy5fZmlyZVJlc2l6ZUNoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvblNldFRhYmxlSGVhZGVyRG9tKGRvbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJEb20gPSBkb207XHJcbiAgICAgICAgY29uc3QgcmVjdCA9IGRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyVG9wID0gcmVjdC50b3A7XHJcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlckhlaWdodCA9IHJlY3QuaGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgb25IZWFkZXJWaXNpYmlsaXR5Q2hhbmdlKGUsIGRvbSk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLmhlYWRlck9ic2VydmVyRG9tID0gZG9tO1xyXG4gICAgICAgIGlmIChlID09PSAnTm90VmlzaWJsZScpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGlja3lFbmFibGUuc2V0KHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RpY2t5RW5hYmxlLnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUm93VmlzaWJpbGl0eUNoYW5nZShlLCBpbmRleCwgZG9tKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChlICE9PSAnUGVuZGluZycpIHtcclxuICAgICAgICAgICAgaWYgKGUgPT09ICdOb3RWaXNpYmxlJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZUl0ZW1zLmluZGV4T2YoaW5kZXgpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93VmlzaWJsZSQubmV4dCh7IGluZGV4LCBkb20gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlSXRlbXMgPSB0aGlzLnZpc2libGVJdGVtcy5maWx0ZXIoKGMpID0+IGMgIT09IGluZGV4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubm90VmlzaWJsZUl0ZW1zLnB1c2goaW5kZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlID09PSAnVmlzaWJsZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90VmlzaWJsZUl0ZW1zID0gdGhpcy5ub3RWaXNpYmxlSXRlbXMuZmlsdGVyKChjKSA9PiBjICE9PSBpbmRleCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlSXRlbXMucHVzaChpbmRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdGhpcy5yb3dWaXNpYmxlJC5uZXh0KHsgaW5kZXgsIGRvbSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zZXRQYXJlbnRXaWR0aEZpdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLCAnd2lkdGgnLCBgMTAwJWApO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnbWluLXdpZHRoJywgYDEwMCVgKTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fdGFibGVSZWYubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgYDEwMCVgKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NldFBhcmVudFdpZHRoRml0VG9PZmZzZXRXaWR0aCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB4MSA9IE1hdGguZmxvb3IodGhpcy5fZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLCAnd2lkdGgnLCBgJHt4MX1weGApO1xyXG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnbWluLXdpZHRoJywgYCR7eH1weGApO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCBgJHt4fXB4YCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zZXRQYXJlbnRXaWR0aCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB4ID0gTWF0aC5mbG9vcih0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsICd3aWR0aCcsIGAke3h9cHhgKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3JlZnJlc2hUaFdpZHRoKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIHRoaXMuY29sdW1ucyk7XHJcbiAgICAgICAgdGhpcy5fdGFibGVIZWFkZXJDb21wb25lbnQ/LlJlZnJlc2hUYWJsZVRoV2lkdGgoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NldFdpZHRoKHNldFdpZHRoPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHdpZHRoT2ZEb20gPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cod2lkdGhPZkRvbSk7XHJcblxyXG4gICAgICAgIGlmICh3aWR0aE9mRG9tID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdpZHRoT2ZEb20gIT09IHRoaXMub2xkV2lkdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFRoV2lkdGgoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbGRXaWR0aCA9IHdpZHRoT2ZEb207XHJcbiAgICAgICAgY29uc3QgcGFyZW50V2lkdGggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgY29uc3QgZWxXaWR0aCA9IE1hdGguZmxvb3IodGhpcy5fZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XHJcbiAgICAgICAgaWYgKHBhcmVudFdpZHRoICE9PSBlbFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCBwYXJlbnRXaWR0aCArICdweCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fdGFibGVSZWYubmF0aXZlRWxlbWVudCwgJ21heC13aWR0aCcsIHBhcmVudFdpZHRoICsgJ3B4Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX3RhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIHBhcmVudFdpZHRoICsgJ3B4Jyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9jYWxjdWxhdGVIZWFkZXJTdGlja3lUb3AoZG9tOiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0aWNreUVuYWJsZSgpICYmIHRoaXMudGFibGVIZWFkZXJEb20pIHtcclxuICAgICAgICAgICAgLy8gY29uc3QgcmVjID0gdGhpcy5oZWFkZXJPYnNlcnZlckRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgLy8gY29uc3QgdG9wID0gcmVjLnRvcDtcclxuICAgICAgICAgICAgLy8gY29uc3QgY2FsYyA9IHRoaXMudGFibGVIZWFkZXJUb3AgLSB0b3AgLSB0aGlzLnRhYmxlSGVhZGVySGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgY29uc3QgcmVjID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5faGVhZGVyVG9wJC5uZXh0KHJlYy50b3AgLSAxMiArIHRoaXMudGFibGVIZWFkZXJIZWlnaHQgKyAncHgnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9maXJlUmVzaXplQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbHVtblJlc2l6ZWQuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcclxuICAgICAgICAgICAgcmVzaXplZDogdGhpcy5jb2x1bW5zLm1hcCgoYykgPT4gKHsgbmFtZTogYy5OYW1lLCB3aWR0aDogYy5XaWR0aCB9KSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfY2FsY3VsYXRlQ29sdW1uc1dpZHRoKG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSwgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnRhYmxlSGVhZGVyTW9kZSkge1xyXG4gICAgICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZnJlZUNvbHVtblNpemUobW9EYXRhTGlzdCwgY29sdW1ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb1Jvd0NvbnRlbnQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9maXRUb1Jvd0NvbnRlbnRDb2x1bW4obW9EYXRhTGlzdCwgY29sdW1ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb0NvbnRhaW5lcjpcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpdFRvQ29udGFpbmVyKG1vRGF0YUxpc3QsIGNvbHVtbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9maXRUb0NvbHVtbihtb0RhdGFMaXN0LCBjb2x1bW5zKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxEb20gPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNhbGN1bGF0ZUNvbHVtbldpZHRoKGVsRG9tLCBjb2x1bW5zLCBtb0RhdGFMaXN0LCB0aGlzLmRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51LCB0aGlzLmNvbnRleHRNZW51SXRlbXMpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9maXRUb1Jvd0NvbnRlbnRDb2x1bW4obW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10pOiB2b2lkIHtcclxuICAgICAgICBjYWxjdWxhdGVDb2x1bW5Db250ZW50KGNvbHVtbnMsIG1vRGF0YUxpc3QpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9maXRUb0NvbnRhaW5lcihtb0RhdGFMaXN0LCBjb2x1bW5zKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxEb20gPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcclxuICAgICAgICAgICAgZWxEb20sXHJcbiAgICAgICAgICAgIHRoaXMuY2FuVmlldyxcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlSGVhZGVyQ29udGV4dE1lbnUsXHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVJdGVtcyxcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZnJlZUNvbHVtblNpemUobW9EYXRhTGlzdCwgY29sdW1ucyk6IHZvaWQge1xyXG4gICAgICAgIGNhbGN1bGF0ZUZyZWVDb2x1bW5TaXplKHRoaXMuY29sdW1ucyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldEhlaWdodChwYXJlbnRIZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmluRGlhbG9nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gcGFyZW50SGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2V0SGFzU3VtbWVyeShjYXJ0YWJsZVRlbXBsYXRlcyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxzQ29sdW1ucz8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgICAgICB0aGlzLmRldGFpbHNDb21wb25lbnQ/LlNlbGVjdG9yIHx8XHJcbiAgICAgICAgICAgIChjYXJ0YWJsZVRlbXBsYXRlcyAmJiBPYmplY3Qua2V5cyhjYXJ0YWJsZVRlbXBsYXRlcykubGVuZ3RoID4gMClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RGV0YWlsc0luUm93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oYXNEZXRhaWxzSW5Sb3cuZW1pdCh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhhc0RldGFpbHNJblJvdy5lbWl0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2NvbnRhaW5lcldpZHRoQ2hhbmdlZCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh2YWwgPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWwgPyB2YWwgKyAncHgnIDogJzEwMCUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fZWwubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgdGhpcy5fd2lkdGgpO1xyXG4gICAgfVxyXG59XHJcbiIsIjx0YWJsZVxyXG4gICAgZmQtdGFibGVcclxuICAgICN0YWJsZVRwbFxyXG4gICAgI2hlYWRlckJvdHRvbU9ic2VydmVyXHJcbiAgICBpbnRlcnNlY3Rpb25PYnNlcnZlclxyXG4gICAgW2ludGVyc2VjdGlvblRocmVzaG9sZF09XCIwLjFcIlxyXG4gICAgKHZpc2liaWxpdHlDaGFuZ2UpPVwib25UYWJsZVZpc2liaWxpdHlDaGFuZ2UoJGV2ZW50LCBoZWFkZXJCb3R0b21PYnNlcnZlcilcIlxyXG4gICAgW3BvcEluXT1cInBvcGluXCJcclxuICAgIFtjbGFzcy50YWJsZS1maXhlZF09XCJcclxuICAgICAgICAhY29udGV4dFZpZXc/LkdyaWRfSGlkZUhlYWRlciAmJiAoIXBvcGluIHx8IHNlY29uZGFyeUNvbHVtbnMubGVuZ3RoID09PSAwKSAmJiAhZGlzYWJsZUZpeGVkVGFibGVMYXlvdXRcclxuICAgIFwiXHJcbiAgICBbbm9Cb3JkZXJYXT1cInZpZXdTZXR0aW5nPy5Ob0hvcml6dG9uYWxCb3JkZXJzID09PSB0cnVlXCJcclxuICAgIFtub0JvcmRlclldPVwidmlld1NldHRpbmc/Lk5vVmVydGljYWxCb3JkZXJzID09PSB0cnVlIHx8IChwb3BpbiAmJiBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDApXCJcclxuPlxyXG4gICAgQGlmIChjb2x1bW5zIHwgbWVyZ2VGaWVsZHNUb0NvbHVtbnM6IHZpZXdTZXR0aW5nPy5NZXJnZUZpZWxkc1RvQ29sdW1ucz8uTW9EYXRhTGlzdDsgYXMgbWVyZ2VGaWVsZHNUb0NvbHVtbnMpIHtcclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBoZWFkZXJUZW1wbGF0ZTtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lcmdlRmllbGRzVG9Db2x1bW5zLCBtb0RhdGFMaXN0Q291bnQ6IG1vRGF0YUxpc3Q/Lmxlbmd0aCB9XHJcbiAgICAgICAgXCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIEBpZiAobW9EYXRhTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgYm9keVRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbWVyZ2VGaWVsZHNUb0NvbHVtbnMsIHByZXZpZXdDb2x1bW46IGFsbENvbHVtbnMgfCBmaW5kUHJldmlld0NvbHVtbiB9XHJcbiAgICAgICAgXCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lcmdlRmllbGRzVG9Db2x1bW5zIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIH0gfVxyXG48L3RhYmxlPlxyXG48IS0tcmVuZGVyQ29sdW1uLS0+XHJcblxyXG5AaWYgKCFtb0RhdGFMaXN0Py5sZW5ndGgpIHtcclxuPGJzdS1uby1kYXRhXHJcbiAgICBbY2xhc3Mubm8tdG9wYm9yZGVyXT1cIiFoaWRlVG9vbGJhclwiXHJcbiAgICBbY2xhc3Mubm9ib3JkZXJdPVwiY29udGV4dFZpZXcuR3JpZF9IaWRlSGVhZGVyICYmIGhpZGVUb29sYmFyXCJcclxuICAgIFtzaW1wbGVdPVwidHJ1ZVwiXHJcbj5cclxuPC9ic3Utbm8tZGF0YT5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZSBsZXQtY29sdW1ucyBsZXQtbW9EYXRhTGlzdENvdW50PlxyXG4gICAgPGJzdS1iYXJzYS10YWJsZS1oZWFkZXJcclxuICAgICAgICBbc3RpY2t5XT1cInN0aWNreUVuYWJsZSgpXCJcclxuICAgICAgICBbaGFzU2Vjb25kYXJ5Q29sdW1uc109XCJzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDBcIlxyXG4gICAgICAgIFtjbGFzcy5oYXMtdG9vbGJhcl09XCIhaGlkZVRvb2xiYXJcIlxyXG4gICAgICAgIFtzdHlsZS5wb2ludGVyLWV2ZW50c109XCJtb0RhdGFMaXN0Q291bnQgPyAnYXV0bycgOiAnbm9uZSdcIlxyXG4gICAgICAgIFt0YWJsZVdpZHRoXT1cImVsV2lkdGhcIlxyXG4gICAgICAgIFtzaG93RGV0YWlsc0luUm93XT1cInNob3dEZXRhaWxzSW5Sb3dcIlxyXG4gICAgICAgIFtoaWRlT3Blbkljb25dPVwiaGlkZU9wZW5JY29uXCJcclxuICAgICAgICBbcmVzaXplZEJ5VXNlcl09XCJyZXNpemVkQnlVc2VyXCJcclxuICAgICAgICBbdGFibGVIZWFkZXJNb2RlXT1cInRhYmxlSGVhZGVyTW9kZVwiXHJcbiAgICAgICAgW3Nob3dSb3dOdW1iZXJdPVwiY29udGV4dFZpZXc/LkdyaWRfU2hvd1Jvd051bWJlclwiXHJcbiAgICAgICAgW2FsbENoZWNrZWRdPVwiYWxsQ2hlY2tlZFwiXHJcbiAgICAgICAgW3J0bF09XCJydGxcIlxyXG4gICAgICAgIFthY3Rpb25MaXN0XT1cImFjdGlvbkxpc3RcIlxyXG4gICAgICAgIFtkaXNhYmxlUmVzcG9uc2l2ZV09XCJkaXNhYmxlUmVzcG9uc2l2ZVwiXHJcbiAgICAgICAgW2lzQ2hlY2tMaXN0XT1cImlzQ2hlY2tMaXN0XCJcclxuICAgICAgICBbY29sdW1uc109XCJcclxuICAgICAgICAgICAgY29sdW1uc1xyXG4gICAgICAgICAgICAgICAgfCBmaWx0ZXJDb2x1bW5zQnlEZXRhaWxzOiBkZXRhaWxzQ29sdW1uczpyb3dJbmRpY2F0b3JcclxuICAgICAgICAgICAgICAgIHwgZmlsdGVyOiB7IElzUHJldmlldzogZmFsc2UgfVxyXG4gICAgICAgICAgICAgICAgfCBoaWRlQ29sdW1uc0lubW9iaWxlOiB2aWV3U2V0dGluZz8uSGlkZUNvbHVtbnNJbk1vYmlsZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW2ZpdFdpZHRoXT1cImZpdFdpZHRoXCJcclxuICAgICAgICBbZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxyXG4gICAgICAgIFtpbmxpbmVFZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXHJcbiAgICAgICAgW2NvbnRleHRNZW51SXRlbXNdPVwiY29udGV4dE1lbnVJdGVtc1wiXHJcbiAgICAgICAgW2NvbnRleHRNZW51V2lkdGhdPVwiY29udGV4dE1lbnVXaWR0aFwiXHJcbiAgICAgICAgW3Nob3dWaWV3QnV0dG9uXT1cInNob3dWaWV3QnV0dG9uXCJcclxuICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICBbdmlld1NldHRpbmddPVwidmlld1NldHRpbmdcIlxyXG4gICAgICAgIFtoaWRlSGVhZGVyXT1cImNvbnRleHRWaWV3LkdyaWRfSGlkZUhlYWRlclwiXHJcbiAgICAgICAgW3Jvd0luZGljYXRvcl09XCJyb3dJbmRpY2F0b3JcIlxyXG4gICAgICAgIFtkaXNhYmxlUmVzaXplXT1cImRpc2FibGVSZXNpemVcIlxyXG4gICAgICAgIFtkaXNhYmxlSGVhZGVyQ29udGV4dE1lbnVdPVwiZGlzYWJsZUhlYWRlckNvbnRleHRNZW51XCJcclxuICAgICAgICAoaGVhZGVyUmVuZGVyKT1cIm9uU2V0VGFibGVIZWFkZXJEb20oJGV2ZW50KVwiXHJcbiAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJvbkNvbHVtblJlc2l6ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNvbHVtblJlc2l6aW5nKT1cIm9uQ29sdW1uUmVzaXppbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZpdFRvQ29udGVudCk9XCJvbkZpdFRvQ29udGVudCgkZXZlbnQpXCJcclxuICAgICAgICAoZml0VG9Db250YWluZXIpPVwib25GaXRUb0NvbnRhaW5lcigpXCJcclxuICAgICAgICAoZnJlZUNvbHVtblNpemUpPVwib25GcmVlQ29sdW1uU2l6aW5nKClcIlxyXG4gICAgICAgIChhbGxDaGVja2JveCk9XCJvbkFsbENoZWNrYm94KCRldmVudClcIlxyXG4gICAgICAgIChzb3J0QXNjZW5kaW5nKT1cIm9uU29ydEFzY2VuZGluZygkZXZlbnQpXCJcclxuICAgICAgICAoc29ydERlc2NlbmRpbmcpPVwib25Tb3J0RGVzY2VuZGluZygkZXZlbnQpXCJcclxuICAgICAgICAoZmlsdGVyKT1cIm9uRmlsdGVyKCRldmVudClcIlxyXG4gICAgICAgIChyZXNldEdyaWRTZXR0aW5ncyk9XCJyZXNldEdyaWRTZXR0aW5ncy5lbWl0KClcIlxyXG4gICAgPjwvYnN1LWJhcnNhLXRhYmxlLWhlYWRlcj5cclxuICAgIDwhLS0gPGRpdlxyXG4gICAgICAgICNoZWFkZXJCb3R0b21PYnNlcnZlclxyXG4gICAgICAgIGludGVyc2VjdGlvbk9ic2VydmVyXHJcbiAgICAgICAgW2ludGVyc2VjdGlvblRocmVzaG9sZF09XCIwLjFcIlxyXG4gICAgICAgICh2aXNpYmlsaXR5Q2hhbmdlKT1cIm9uSGVhZGVyVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQsIGhlYWRlckJvdHRvbU9ic2VydmVyKVwiXHJcbiAgICA+PC9kaXY+IC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtY29sdW1ucyBsZXQtcHJldmlld0NvbHVtbj1cInByZXZpZXdDb2x1bW5cIj5cclxuICAgIDx0Ym9keVxyXG4gICAgICAgICNib2R5XHJcbiAgICAgICAgZmQtdGFibGUtYm9keVxyXG4gICAgICAgIFtjbGFzcy5ub2JvcmRlcl09XCJ2aWV3U2V0dGluZz8uTm9Cb2R5Qm9yZGVycyA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgW25vQm9yZGVyWF09XCJ2aWV3U2V0dGluZz8uTm9Ib3JpenRvbmFsQm9yZGVycyA9PT0gdHJ1ZSB8fCBwcmV2aWV3Q29sdW1uXCJcclxuICAgICAgICBbbm9Cb3JkZXJZXT1cIihwb3BpbiAmJiBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDApIHx8IHByZXZpZXdDb2x1bW5cIlxyXG4gICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIEBmb3IgKG1vIG9mIG1vRGF0YUxpc3QgfCBtdWx0aXBsZUdyb3VwQnk6IGdyb3VwYnk7IHRyYWNrIF90cmFja0J5Um93KGluZGV4LCBtbyk7IGxldCBpbmRleCA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGhhc1Jvd09sZ28gPyByb3dPbGdvVGVtcGxhdGUgOiByb3dUZW1wbGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogbW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93TnVtYmVyOiBtby5JZCB8IHJvd051bWJlcjogcGFnaW5nU2V0dGluZzptb0RhdGFMaXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRpY2F0b3JDb2xvcjogIWNvbHVtbnMubGVuZ3RoID8gJycgOiAoY29sdW1uc1swXS5DYXB0aW9uIHwgcnZhbDogbW86Y29sdW1ucyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMgfCBjb2x1bW5DdXN0b21Db21wb25lbnQ6IHZpZXdTZXR0aW5nPy5Db2x1bW5Db21wb25lbnRzPy5Nb0RhdGFMaXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlDb2x1bW5zOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sdW1ucyB8IGNvbHVtbkN1c3RvbUNvbXBvbmVudDogdmlld1NldHRpbmc/LkNvbHVtbkNvbXBvbmVudHM/Lk1vRGF0YUxpc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vRGF0YUxpc3Q6IG1vRGF0YUxpc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vRGF0YUxpc3RDb3VudDogbW9EYXRhTGlzdC5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcnRhYmxlVGVtcGxhdGU6IGNhcnRhYmxlVGVtcGxhdGVzW21vLlJlbGF0ZWRNbz8uJFR5cGVEZWZJZCArICdAJyArIG1vLkNhcnRhYmxlU2V0dGluZ3M/LklkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld0NvbHVtbjogcHJldmlld0NvbHVtbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsc0NvbGxhcHNlZDogdmlld1NldHRpbmc/LkRldGFpbHNTZXR0aW5nPy5EZXRhaWxzQ29sbGFwc2VkID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlRGV0YWlsc1RleHQ6IHZpZXdTZXR0aW5nPy5EZXRhaWxzU2V0dGluZz8uSGlkZURldGFpbHNUZXh0ID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3Rib2R5PlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlIGxldC1jb2x1bW5zPlxyXG4gICAgQGlmIChoYXNTdW1tYXJ5KSB7XHJcbiAgICA8dGZvb3QgZmQtdGFibGUtZm9vdGVyPlxyXG4gICAgICAgIDx0ciBmZC10YWJsZS1yb3cgY2xhc3M9XCJyb3ctc3VtbWFyeVwiPlxyXG4gICAgICAgICAgICBAaWYgKGlzQ2hlY2tMaXN0KSB7XHJcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNvbHVtblJlc2l6ZXI+XHJcbiAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwiY29sLXRvdGFsLXRleHRcIj57eyAnVG90YWwnIHwgYmJiVHJhbnNsYXRlIH19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIH0gQGlmICghaXNDaGVja0xpc3QpIHtcclxuICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJzaW5nbGUtc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwiY29sLXRvdGFsLXRleHRcIj57eyAnVG90YWwnIHwgYmJiVHJhbnNsYXRlIH19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIH0gQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbjsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uSGFzU3VtbWFyeSkge1xyXG4gICAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT1cImRpcmVjdGlvbjogbHRyOyBkaXNwbGF5OiBibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG1vRGF0YUxpc3QgfCB0b3RhbFN1bW1hcnk6IGNvbHVtbi5OYW1lIHwgbnVtYmVyIH19PC9zdHJvbmdcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgfSBAaWYgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIHN0eWxlPVwid2lkdGg6IDEwMHB4XCI+PC90ZD5cclxuICAgICAgICAgICAgfSBAaWYgKCFoaWRlT3Blbkljb24gJiYgY2FuVmlldyAmJiAoIWlubGluZUVkaXRNb2RlIHx8ICFhbGxvd0lubGluZUVkaXQpKSB7XHJcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsPjwvdGQ+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90Zm9vdD5cclxuICAgIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlXHJcbiAgICAjcm93T2xnb1RlbXBsYXRlXHJcbiAgICBsZXQtbW9cclxuICAgIGxldC1pbmRleD1cImluZGV4XCJcclxuICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICBsZXQtbW9EYXRhTGlzdENvdW50PVwibW9EYXRhTGlzdENvdW50XCJcclxuICAgIGxldC1tb0RhdGFMaXN0PVwibW9EYXRhTGlzdFwiXHJcbiAgICBsZXQtY2FydGFibGVUZW1wbGF0ZT1cImNhcnRhYmxlVGVtcGxhdGVcIlxyXG4gICAgbGV0LXNlY29uZGFyeUNvbHVtbnM9XCJzZWNvbmRhcnlDb2x1bW5zXCJcclxuICAgIGxldC1yb3dJbmRpY2F0b3JDb2xvcj1cInJvd0luZGljYXRvckNvbG9yXCJcclxuICAgIGxldC1yb3dOdW1iZXI9XCJyb3dOdW1iZXJcIlxyXG4gICAgbGV0LXByZXZpZXdDb2x1bW49XCJwcmV2aWV3Q29sdW1uXCJcclxuICAgIGxldC1kZXRhaWxzQ29sbGFwc2VkPVwiZGV0YWlsc0NvbGxhcHNlZFwiXHJcbiAgICBsZXQtaGlkZURldGFpbHNUZXh0PVwiaGlkZURldGFpbHNUZXh0XCJcclxuPlxyXG4gICAgPGJucmMtZHluYW1pYy1pdGVtLWNvbXBvbmVudFxyXG4gICAgICAgIFtjb21wb25lbnRdPVwidmlld1NldHRpbmcuUm93T2xnb1wiXHJcbiAgICAgICAgW21vXT1cIm1vXCJcclxuICAgICAgICBbZGV0YWlsc0NvbGxhcHNlZF09XCJkZXRhaWxzQ29sbGFwc2VkXCJcclxuICAgICAgICBbaGlkZURldGFpbHNUZXh0XT1cImhpZGVEZXRhaWxzVGV4dFwiXHJcbiAgICAgICAgW2lzTGFzdENoaWxkR3JvdXBdPVwibW8uJElzTGFzdENoaWxkR3JvdXBcIlxyXG4gICAgICAgIFtncm91cFN1bW1hcnldPVwiZ3JvdXBTdW1tYXJ5XCJcclxuICAgICAgICBbc2hvd1ZpZXdCdXR0b25dPVwic2hvd1ZpZXdCdXR0b25cIlxyXG4gICAgICAgIFtpbmxpbmVFZGl0V2l0aG91dFNlbGVjdGlvbl09XCJpbmxpbmVFZGl0V2l0aG91dFNlbGVjdGlvblwiXHJcbiAgICAgICAgW1Vsdk1haW5DdHJscl09XCJVbHZNYWluQ3RybHJcIlxyXG4gICAgICAgIFttb0RhdGFMaXN0XT1cIm1vRGF0YUxpc3RcIlxyXG4gICAgICAgIFtzaG93RGV0YWlsc0luUm93XT1cInNob3dEZXRhaWxzSW5Sb3dcIlxyXG4gICAgICAgIFtoaWRlT3Blbkljb25dPVwiaGlkZU9wZW5JY29uXCJcclxuICAgICAgICBbZGV0YWlsc0NvbHVtbnNdPVwiZGV0YWlsc0NvbHVtbnNcIlxyXG4gICAgICAgIFtzaG93Um93TnVtYmVyXT1cImNvbnRleHRWaWV3Py5HcmlkX1Nob3dSb3dOdW1iZXJcIlxyXG4gICAgICAgIFtyb3dOdW1iZXJdPVwicm93TnVtYmVyXCJcclxuICAgICAgICBbY29sdW1uQ29tcG9uZW50c109XCJ2aWV3U2V0dGluZz8uQ29sdW1uQ29tcG9uZW50cyB8fCBudWxsXCJcclxuICAgICAgICBbY2FydGFibGVUZW1wbGF0ZV09XCJjYXJ0YWJsZVRlbXBsYXRlXCJcclxuICAgICAgICBbY2FydGFibGVNb109XCJtby5SZWxhdGVkTW9cIlxyXG4gICAgICAgIFtkaXJ0eUNvbHVtbnNdPVwibW8uJERpcnR5Q29sdW1uc1wiXHJcbiAgICAgICAgW2NhcnRhYmxlV29ya2Zsb3dEYXRhXT1cIm1vLlNlcmlhbGl6ZWRXb3JrZmxvd0RhdGFcIlxyXG4gICAgICAgIFtzZXJpYWxpemVkUmVsYXRlZE1vXT1cIm1vLlNlcmlhbGl6ZWRSZWxhdGVkTW9cIlxyXG4gICAgICAgIFtkZXRhaWxzVGV4dF09XCJ2aWV3U2V0dGluZz8uRGV0YWlsc1NldHRpbmc/LkJ1dHRvblRleHRcIlxyXG4gICAgICAgIFthdHRhY2htZW50Vmlld1R5cGVdPVwidmlld1NldHRpbmc/LkF0dGFjaG1lbnRWaWV3VHlwZVwiXHJcbiAgICAgICAgW2RldGFpbHNUZXh0RnVuY3Rpb25dPVwidmlld1NldHRpbmc/LkRldGFpbHNTZXR0aW5nPy5CdXR0b25UZXh0RnVuY3Rpb25cIlxyXG4gICAgICAgIFtkZXRhaWxzQ29tcG9uZW50XT1cImRldGFpbHNDb21wb25lbnRcIlxyXG4gICAgICAgIFtjb2xvcmluZ1Jvd109XCJ2aWV3U2V0dGluZz8uQ29sb3JpbmdSb3dcIlxyXG4gICAgICAgIFtpc0NoZWNrZWRdPVwibW8uJElzQ2hlY2tlZFwiXHJcbiAgICAgICAgW3Zpc2liaWxpdHldPVwibW8uJFZpc2liaWxpdHlcIlxyXG4gICAgICAgIFtleHBhbmRlZF09XCJtby4kRXhwYW5kZWRcIlxyXG4gICAgICAgIFtzdHlsZUluZGV4XT1cIm1vLiRTdHlsZUluZGV4XCJcclxuICAgICAgICBbbGV2ZWxdPVwibW8uJExldmVsXCJcclxuICAgICAgICBbcGFyZW50RXhwYW5kZWRdPVwibW8uJFBhcmVudD8uJEV4cGFuZGVkXCJcclxuICAgICAgICBbbW9EYXRhTGlzdENvdW50XT1cIm1vRGF0YUxpc3RDb3VudFwiXHJcbiAgICAgICAgW2NvbHVtbnNDb3VudF09XCJjb2x1bW5zQ291bnQgLSBkZXRhaWxzQ29sdW1ucy5sZW5ndGhcIlxyXG4gICAgICAgIFt0eXBlRGVmSWRdPVwidHlwZURlZklkXCJcclxuICAgICAgICBbZXh0cmFSZWxhdGlvbl09XCJleHRyYVJlbGF0aW9uXCJcclxuICAgICAgICBbZm9ybVNldHRpbmddPVwiZm9ybVNldHRpbmdcIlxyXG4gICAgICAgIFtpbmRleF09XCJpbmRleFwiXHJcbiAgICAgICAgW3NldHRpbmddPVwidmlld1NldHRpbmdcIlxyXG4gICAgICAgIFtzZWNvbmRhcnlDb2x1bW5zXT1cInNlY29uZGFyeUNvbHVtbnMgfCBmaWx0ZXJDb2x1bW5zQnlEZXRhaWxzOiBkZXRhaWxzQ29sdW1uczpyb3dJbmRpY2F0b3JcIlxyXG4gICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnMgfCBmaWx0ZXJDb2x1bW5zQnlEZXRhaWxzOiBkZXRhaWxzQ29sdW1uczpyb3dJbmRpY2F0b3JcIlxyXG4gICAgICAgIFtpc05ld0lubGluZU1vXT1cIm1vLiROZXdJbmxpbmVNb1wiXHJcbiAgICAgICAgW2FjY2Vzc109XCJhY2Nlc3NcIlxyXG4gICAgICAgIFtpbmxpbmVFZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXHJcbiAgICAgICAgW2FsbG93SW5saW5lRWRpdF09XCJhbGxvd0lubGluZUVkaXRcIlxyXG4gICAgICAgIFtydGxdPVwicnRsXCJcclxuICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcclxuICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICBbYWxsQ29sdW1uc109XCJhbGxDb2x1bW5zXCJcclxuICAgICAgICBbY29udGV4dE1lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcclxuICAgICAgICBbY2FuVmlld109XCJjYW5WaWV3XCJcclxuICAgICAgICBbY29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXHJcbiAgICAgICAgW2Rpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XT1cImRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XCJcclxuICAgICAgICBbbmF2aWdhdGlvbkFycm93XT1cIm5hdmlnYXRpb25BcnJvd1wiXHJcbiAgICAgICAgW2lzQ2hlY2tMaXN0XT1cImlzQ2hlY2tMaXN0XCJcclxuICAgICAgICBbcm93SW5kaWNhdG9yXT1cInJvd0luZGljYXRvclwiXHJcbiAgICAgICAgW3Jvd0luZGljYXRvckNvbG9yXT1cInJvd0luZGljYXRvckNvbG9yXCJcclxuICAgICAgICAoZXZlbnRzKT1cIm9uT2xnb0V2ZW50cygkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvYm5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50PlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGVcclxuICAgICNyb3dUZW1wbGF0ZVxyXG4gICAgbGV0LW1vXHJcbiAgICBsZXQtaW5kZXg9XCJpbmRleFwiXHJcbiAgICBsZXQtcm93TnVtYmVyPVwicm93TnVtYmVyXCJcclxuICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICBsZXQtbW9EYXRhTGlzdENvdW50PVwibW9EYXRhTGlzdENvdW50XCJcclxuICAgIGxldC1tb0RhdGFMaXN0PVwibW9EYXRhTGlzdFwiXHJcbiAgICBsZXQtY2FydGFibGVUZW1wbGF0ZT1cImNhcnRhYmxlVGVtcGxhdGVcIlxyXG4gICAgbGV0LXNlY29uZGFyeUNvbHVtbnM9XCJzZWNvbmRhcnlDb2x1bW5zXCJcclxuICAgIGxldC1yb3dJbmRpY2F0b3JDb2xvcj1cInJvd0luZGljYXRvckNvbG9yXCJcclxuICAgIGxldC1wcmV2aWV3Q29sdW1uPVwicHJldmlld0NvbHVtblwiXHJcbiAgICBsZXQtZGV0YWlsc0NvbGxhcHNlZD1cImRldGFpbHNDb2xsYXBzZWRcIlxyXG4gICAgbGV0LWhpZGVEZXRhaWxzVGV4dD1cImhpZGVEZXRhaWxzVGV4dFwiXHJcbj5cclxuICAgIDxic3UtYmFyc2EtdGFibGUtcm93XHJcbiAgICAgICAgW21vXT1cIm1vXCJcclxuICAgICAgICBbZGlydHlDb2x1bW5zXT1cIm1vLiREaXJ0eUNvbHVtbnNcIlxyXG4gICAgICAgIFtpbmxpbmVFZGl0V2l0aG91dFNlbGVjdGlvbl09XCJpbmxpbmVFZGl0V2l0aG91dFNlbGVjdGlvblwiXHJcbiAgICAgICAgW2lzTGFzdENoaWxkR3JvdXBdPVwibW8uJElzTGFzdENoaWxkR3JvdXBcIlxyXG4gICAgICAgIFttb0RhdGFMaXN0XT1cIm1vRGF0YUxpc3RcIlxyXG4gICAgICAgIFtoaWRlRGV0YWlsc1RleHRdPVwiaGlkZURldGFpbHNUZXh0XCJcclxuICAgICAgICBbZGV0YWlsc0NvbGxhcHNlZF09XCJkZXRhaWxzQ29sbGFwc2VkXCJcclxuICAgICAgICBbZ3JvdXBTdW1tYXJ5XT1cImdyb3VwU3VtbWFyeVwiXHJcbiAgICAgICAgW1Vsdk1haW5DdHJscl09XCJVbHZNYWluQ3RybHJcIlxyXG4gICAgICAgIFtpc01vYmlsZV09XCJpc01vYmlsZVwiXHJcbiAgICAgICAgW3Nob3dEZXRhaWxzSW5Sb3ddPVwic2hvd0RldGFpbHNJblJvd1wiXHJcbiAgICAgICAgW2hpZGVPcGVuSWNvbl09XCJoaWRlT3Blbkljb25cIlxyXG4gICAgICAgIFtzaG93Um93TnVtYmVyXT1cImNvbnRleHRWaWV3Py5HcmlkX1Nob3dSb3dOdW1iZXJcIlxyXG4gICAgICAgIFthdHRhY2htZW50Vmlld1R5cGVdPVwidmlld1NldHRpbmc/LkF0dGFjaG1lbnRWaWV3VHlwZVwiXHJcbiAgICAgICAgW3Jvd051bWJlcl09XCJyb3dOdW1iZXJcIlxyXG4gICAgICAgIFtjb2xvcmluZ1Jvd109XCJ2aWV3U2V0dGluZz8uQ29sb3JpbmdSb3dcIlxyXG4gICAgICAgIFtkaXNhYmxlRWxsYXBzaXNdPVwidmlld1NldHRpbmc/LkRpc2FibGVFbGxhcHNpc1wiXHJcbiAgICAgICAgW3Nob3dWaWV3QnV0dG9uXT1cInNob3dWaWV3QnV0dG9uXCJcclxuICAgICAgICBbZGV0YWlsc0NvbHVtbnNdPVwiZGV0YWlsc0NvbHVtbnNcIlxyXG4gICAgICAgIFtjb2x1bW5Db21wb25lbnRzXT1cInZpZXdTZXR0aW5nPy5Db2x1bW5Db21wb25lbnRzIHx8IG51bGxcIlxyXG4gICAgICAgIFtjYXJ0YWJsZVRlbXBsYXRlXT1cImNhcnRhYmxlVGVtcGxhdGVcIlxyXG4gICAgICAgIFtjYXJ0YWJsZU1vXT1cIm1vLlJlbGF0ZWRNb1wiXHJcbiAgICAgICAgW2NhcnRhYmxlV29ya2Zsb3dEYXRhXT1cIm1vLlNlcmlhbGl6ZWRXb3JrZmxvd0RhdGFcIlxyXG4gICAgICAgIFtzZXJpYWxpemVkUmVsYXRlZE1vXT1cIm1vLlNlcmlhbGl6ZWRSZWxhdGVkTW9cIlxyXG4gICAgICAgIFtkZXRhaWxzVGV4dF09XCJ2aWV3U2V0dGluZz8uRGV0YWlsc1NldHRpbmc/LkJ1dHRvblRleHRcIlxyXG4gICAgICAgIFtkZXRhaWxzQ29tcG9uZW50XT1cImRldGFpbHNDb21wb25lbnRcIlxyXG4gICAgICAgIFtpc0NoZWNrZWRdPVwibW8uJElzQ2hlY2tlZFwiXHJcbiAgICAgICAgW3Zpc2liaWxpdHldPVwibW8uJFZpc2liaWxpdHlcIlxyXG4gICAgICAgIFtleHBhbmRlZF09XCJtby4kRXhwYW5kZWRcIlxyXG4gICAgICAgIFtzdHlsZUluZGV4XT1cIm1vLiRTdHlsZUluZGV4XCJcclxuICAgICAgICBbbGV2ZWxdPVwibW8uJExldmVsXCJcclxuICAgICAgICBbcGFyZW50RXhwYW5kZWRdPVwibW8uJFBhcmVudD8uJEV4cGFuZGVkXCJcclxuICAgICAgICBbbW9EYXRhTGlzdENvdW50XT1cIm1vRGF0YUxpc3RDb3VudFwiXHJcbiAgICAgICAgW2NvbHVtbnNDb3VudF09XCJjb2x1bW5zQ291bnQgLSBkZXRhaWxzQ29sdW1ucy5sZW5ndGhcIlxyXG4gICAgICAgIFt0eXBlRGVmSWRdPVwidHlwZURlZklkXCJcclxuICAgICAgICBbZXh0cmFSZWxhdGlvbl09XCJleHRyYVJlbGF0aW9uXCJcclxuICAgICAgICBbZm9ybVNldHRpbmddPVwiZm9ybVNldHRpbmdcIlxyXG4gICAgICAgIFtpbmRleF09XCJpbmRleFwiXHJcbiAgICAgICAgW3NldHRpbmddPVwidmlld1NldHRpbmdcIlxyXG4gICAgICAgIFtjaGVja2JveENvbXBvbmVudF09XCJ2aWV3U2V0dGluZz8uQ2hlY2tib3hDb21wb25lbnRcIlxyXG4gICAgICAgIFtzZWNvbmRhcnlDb2x1bW5zXT1cIlxyXG4gICAgICAgICAgICBzZWNvbmRhcnlDb2x1bW5zXHJcbiAgICAgICAgICAgICAgICB8IGZpbHRlckNvbHVtbnNCeURldGFpbHM6IGRldGFpbHNDb2x1bW5zOmZhbHNlXHJcbiAgICAgICAgICAgICAgICB8IGZpbHRlcjogeyBJc1ByZXZpZXc6IGZhbHNlIH1cclxuICAgICAgICAgICAgICAgIHwgaGlkZUNvbHVtbnNJbm1vYmlsZTogdmlld1NldHRpbmc/LkhpZGVDb2x1bW5zSW5Nb2JpbGVcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtjb2x1bW5zXT1cIlxyXG4gICAgICAgICAgICBjb2x1bW5zXHJcbiAgICAgICAgICAgICAgICB8IGZpbHRlckNvbHVtbnNCeURldGFpbHM6IGRldGFpbHNDb2x1bW5zOnJvd0luZGljYXRvclxyXG4gICAgICAgICAgICAgICAgfCBmaWx0ZXI6IHsgSXNQcmV2aWV3OiBmYWxzZSB9XHJcbiAgICAgICAgICAgICAgICB8IGhpZGVDb2x1bW5zSW5tb2JpbGU6IHZpZXdTZXR0aW5nPy5IaWRlQ29sdW1uc0luTW9iaWxlXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbaXNOZXdJbmxpbmVNb109XCJtby4kTmV3SW5saW5lTW9cIlxyXG4gICAgICAgIFthY2Nlc3NdPVwiYWNjZXNzXCJcclxuICAgICAgICBbc2ltcGxlSW5saW5lRWRpdF09XCJzaW1wbGVJbmxpbmVFZGl0XCJcclxuICAgICAgICBbbm9TYXZlSW5saW5lRWRpdEluU2VydmVyXT1cInNpbXBsZUlubGluZUVkaXRcIlxyXG4gICAgICAgIFthY3Rpb25MaXN0XT1cImFjdGlvbkxpc3RcIlxyXG4gICAgICAgIFtpbmxpbmVFZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXHJcbiAgICAgICAgW2FsbG93SW5saW5lRWRpdF09XCJhbGxvd0lubGluZUVkaXRcIlxyXG4gICAgICAgIFtydGxdPVwicnRsXCJcclxuICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcclxuICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICBbYWxsQ29sdW1uc109XCJhbGxDb2x1bW5zXCJcclxuICAgICAgICBbY29udGV4dE1lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcclxuICAgICAgICBbY2FuVmlld109XCJjYW5WaWV3XCJcclxuICAgICAgICBbY29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXHJcbiAgICAgICAgW2Rpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XT1cImRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XCJcclxuICAgICAgICBbbmF2aWdhdGlvbkFycm93XT1cIm5hdmlnYXRpb25BcnJvd1wiXHJcbiAgICAgICAgW2lzQ2hlY2tMaXN0XT1cImlzQ2hlY2tMaXN0XCJcclxuICAgICAgICBbcm93SW5kaWNhdG9yXT1cInJvd0luZGljYXRvclwiXHJcbiAgICAgICAgW3Jvd0luZGljYXRvckNvbG9yXT1cInJvd0luZGljYXRvckNvbG9yXCJcclxuICAgICAgICBbcHJldmlld0NvbHVtbl09XCJwcmV2aWV3Q29sdW1uXCJcclxuICAgICAgICAoY29sdW1uU3VtbWFyeSk9XCJjb2x1bW5TdW1tYXJ5LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHJlc2V0V29ya2Zsb3dTdGF0ZSk9XCJyZXNldFdvcmtmbG93U3RhdGUuZW1pdChtbylcIlxyXG4gICAgICAgIChlc2NhcGVLZXkpPVwib25Fc2NhcGVLZXkoJGV2ZW50KVwiXHJcbiAgICAgICAgKGV4cGFuZENsaWNrKT1cIm9uRXhwYW5kQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgKHJvd0NoZWNrKT1cIm9uUm93Q2hlY2soJGV2ZW50KVwiXHJcbiAgICAgICAgKHdvcmtmbG93U2hhcmVCdXR0b25zKT1cIm9uV29ya2Zsb3dTaGFyZUJ1dHRvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgKGRlc2VsZWN0QWxsKT1cIm9uRGVzZWxlY3RBbGwoKVwiXHJcbiAgICAgICAgKHJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgKHVsdkNvbW1hbmQpPVwib25VbHZDb21tYW5kKCRldmVudClcIlxyXG4gICAgICAgIChhY3Rpb25MaXN0Q2xpY2spPVwib25BY3Rpb25MaXN0Q2xpY2sobW8sIGluZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0TmV4dElubGluZVJlY29yZCk9XCJvblNlbGVjdE5leHRJbmxpbmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGVkaXRGb3JtUGFuZWxTYXZlKT1cIm9uRWRpdEZvcm1QYW5lbFNhdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgKGVkaXRGb3JtUGFuZWxDYW5jZWwpPVwib25FZGl0Rm9ybVBhbmVsQ2FuY2VsKCRldmVudClcIlxyXG4gICAgICAgIChlZGl0Rm9ybVBhbmVsVmFsdWVDaGFuZ2UpPVwib25FZGl0Rm9ybVBhbmVsVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNhcnRhYmxlRm9ybUNsb3NlZCk9XCJvbkNhcnRhYmxlRm9ybUNsb3NlZCgkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvYnN1LWJhcnNhLXRhYmxlLXJvdz5cclxuICAgIDwhLS0gPGRpdlxyXG4gICAgICAgICNyb3dCb3R0b21cclxuICAgICAgICBpbnRlcnNlY3Rpb25PYnNlcnZlclxyXG4gICAgICAgIFtpbnRlcnNlY3Rpb25UaHJlc2hvbGRdPVwiMC4xXCJcclxuICAgICAgICAodmlzaWJpbGl0eUNoYW5nZSk9XCJvblJvd1Zpc2liaWxpdHlDaGFuZ2UoJGV2ZW50LCBpbmRleCwgcm93Qm90dG9tKVwiXHJcbiAgICA+PC9kaXY+IC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48ZGl2ICN0YWJsZUJvdHRvbU9ic2VydmU+PC9kaXY+XHJcbiJdfQ==
|