@libs-ui/components-tabs 0.2.56 → 0.2.57
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/interfaces/tab.interface.mjs +1 -1
- package/esm2022/item/item.component.mjs +9 -5
- package/esm2022/tabs.component.mjs +16 -17
- package/esm2022/utils/tabs.mjs +31 -7
- package/fesm2022/libs-ui-components-tabs.mjs +52 -25
- package/fesm2022/libs-ui-components-tabs.mjs.map +1 -1
- package/interfaces/tab.interface.d.ts +15 -12
- package/item/item.component.d.ts +5 -5
- package/package.json +1 -1
- package/tabs.component.d.ts +14 -14
- package/utils/tabs.d.ts +2 -2
|
@@ -14,23 +14,23 @@ export class LibsUiComponentsTabsComponent {
|
|
|
14
14
|
/* PROPERTY */
|
|
15
15
|
itemsDisplay = signal([]);
|
|
16
16
|
displayMoreItem = signal(false);
|
|
17
|
-
tabMoreListConfig =
|
|
17
|
+
tabMoreListConfig = computed(() => tabMoreListConfig(this.translate, this.fieldKey(), this.fieldLabel(), this.tabs(), this.disable()));
|
|
18
18
|
changeViewTab = new Subject();
|
|
19
19
|
groupName = signal(uuid());
|
|
20
20
|
stylesDragDropOverrideComputed = computed(() => this.updateStylesDragDropOverride());
|
|
21
21
|
popoverFunctionControlEvent = signal(undefined);
|
|
22
22
|
onDestroy = new Subject();
|
|
23
23
|
/* INPUT */
|
|
24
|
+
tabs = input.required();
|
|
25
|
+
keySelected = model.required();
|
|
24
26
|
mode = input('left');
|
|
25
27
|
fieldKey = input('key');
|
|
26
28
|
fieldLabel = input('label');
|
|
27
|
-
keySelected = model.required();
|
|
28
29
|
disable = input();
|
|
29
|
-
|
|
30
|
+
disableLabel = input();
|
|
30
31
|
heightTabItem = input(40);
|
|
31
32
|
ignoreCalculatorTab = input(false);
|
|
32
33
|
size = input('medium');
|
|
33
|
-
disableLabel = input();
|
|
34
34
|
allowDragDropPosition = input();
|
|
35
35
|
zIndex = input();
|
|
36
36
|
configCss = model();
|
|
@@ -41,7 +41,7 @@ export class LibsUiComponentsTabsComponent {
|
|
|
41
41
|
outFunctionsControl = output();
|
|
42
42
|
outDragTabChange = output();
|
|
43
43
|
outDisplayMoreItem = output();
|
|
44
|
-
|
|
44
|
+
outAction = output();
|
|
45
45
|
/* VIEW CHILD */
|
|
46
46
|
headerEl = viewChild.required('headerEl');
|
|
47
47
|
headerLeftEl = viewChild.required('headerLeftEl');
|
|
@@ -54,9 +54,9 @@ export class LibsUiComponentsTabsComponent {
|
|
|
54
54
|
this.tabs().items().map(item => item.update(data => ({ ...data, specificDisplay: true })));
|
|
55
55
|
}
|
|
56
56
|
this.outFunctionsControl.emit({
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
addTabsItem: this.addTabsItem.bind(this),
|
|
58
|
+
calculatorTabsItemsDisplay: this.calculatorTabsItemDisplay.bind(this),
|
|
59
|
+
selectedTabsItem: this.handlerSelectedTabsItem.bind(this)
|
|
60
60
|
});
|
|
61
61
|
if (this.mode() !== 'left' || this.ignoreCalculatorTab()) {
|
|
62
62
|
return;
|
|
@@ -157,7 +157,7 @@ export class LibsUiComponentsTabsComponent {
|
|
|
157
157
|
handlerPopoverFunctionControlEvent(event) {
|
|
158
158
|
this.popoverFunctionControlEvent.set(event);
|
|
159
159
|
}
|
|
160
|
-
async
|
|
160
|
+
async handlerSelectedTabsItem(key, resetDisable = true) {
|
|
161
161
|
const itemSelected = this.tabs().items().find(item => item()[this.fieldKey()] === key);
|
|
162
162
|
if (!itemSelected) {
|
|
163
163
|
return;
|
|
@@ -195,10 +195,10 @@ export class LibsUiComponentsTabsComponent {
|
|
|
195
195
|
this.popoverFunctionControlEvent()?.removePopoverOverlay();
|
|
196
196
|
this.calculatorTabsItemDisplay();
|
|
197
197
|
}
|
|
198
|
-
async
|
|
199
|
-
this.
|
|
198
|
+
async handlerAction(event) {
|
|
199
|
+
this.outAction.emit(event);
|
|
200
200
|
}
|
|
201
|
-
async
|
|
201
|
+
async addTabsItem(item, selected = true, addFirst) {
|
|
202
202
|
const items = this.tabs().items;
|
|
203
203
|
items.update(items => {
|
|
204
204
|
if (addFirst) {
|
|
@@ -241,18 +241,17 @@ export class LibsUiComponentsTabsComponent {
|
|
|
241
241
|
const notDisplay = items.filter(item => item().specificDisplay === false);
|
|
242
242
|
items = display.concat(notDisplay);
|
|
243
243
|
items.forEach((item, index) => item.update(data => ({ ...data, order: index })));
|
|
244
|
-
this.tabs().items.
|
|
244
|
+
this.tabs().items.set(items.sort((prev, next) => (prev().order || 0) - (next().order || 0)));
|
|
245
245
|
this.displayMoreItem.set(displayMoreItem);
|
|
246
246
|
this.outDisplayMoreItem.emit(this.displayMoreItem());
|
|
247
247
|
this.itemsDisplay.set(this.tabs().items().filter(item => item().specificDisplay));
|
|
248
|
-
this.tabMoreListConfig.set(tabMoreListConfig(this.translate, this.fieldKey(), this.fieldLabel(), this.tabs()));
|
|
249
248
|
}
|
|
250
249
|
ngOnDestroy() {
|
|
251
250
|
this.onDestroy.next();
|
|
252
251
|
this.onDestroy.complete();
|
|
253
252
|
}
|
|
254
253
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
255
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsTabsComponent, isStandalone: true, selector: "libs_ui-components-tabs", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: false, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, heightTabItem: { classPropertyName: "heightTabItem", publicName: "heightTabItem", isSignal: true, isRequired: false, transformFunction: null }, ignoreCalculatorTab: { classPropertyName: "ignoreCalculatorTab", publicName: "ignoreCalculatorTab", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, allowDragDropPosition: { classPropertyName: "allowDragDropPosition", publicName: "allowDragDropPosition", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, configCss: { classPropertyName: "configCss", publicName: "configCss", isSignal: true, isRequired: false, transformFunction: null }, popoverShowMoreTabItem: { classPropertyName: "popoverShowMoreTabItem", publicName: "popoverShowMoreTabItem", isSignal: true, isRequired: false, transformFunction: null }, checkCanChangeTabSelected: { classPropertyName: "checkCanChangeTabSelected", publicName: "checkCanChangeTabSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keySelected: "keySelectedChange", configCss: "configCssChange", outKeySelected: "outKeySelected", outFunctionsControl: "outFunctionsControl", outDragTabChange: "outDragTabChange", outDisplayMoreItem: "outDisplayMoreItem", outActionSelected: "outActionSelected" }, viewQueries: [{ propertyName: "headerEl", first: true, predicate: ["headerEl"], descendants: true, isSignal: true }, { propertyName: "headerLeftEl", first: true, predicate: ["headerLeftEl"], descendants: true, isSignal: true }, { propertyName: "headerRightEl", first: true, predicate: ["headerRightEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition()\"\n [groupName]=\"groupName()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? (elementContainerEl.clientWidth/(itemsDisplay().length || 1)) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem($event, item)\"\n (outActionSelected)=\"handlerActionSelected($event)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277, \n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 }\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classInclude]=\"'!p-[8px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{config: {content: popoverShowMoreTabItem()?.config?.content || 'i18n_view_more'}}\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n <div class=\"absolute top-0 z-0 w-full\">\n <div class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\"\n (click)=\"handlerClickItem($event, item)\" />\n }\n </div>\n </div>\n </div>\n</div>\n<ng-template #menuEl>\n <libs_ui-components-list [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n", styles: [".libs-ui-tab{position:relative;display:flex;width:100%}.libs-ui-tab .libs-ui-tab-header{position:relative;background-color:#fff;display:flex;flex-wrap:nowrap;width:100%;overflow:hidden;flex-shrink:0}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-header-center{display:flex;flex-wrap:nowrap}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container .libs-ui-icon-arrange{display:none}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container:hover .libs-ui-icon-arrange{display:block}.libs-ui-tab .libs-ui-tab-content-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: LibsUiComponentsDragContainerDirective, selector: "[LibsUiComponentsDragContainerDirective]", inputs: ["disableDragContainer", "mode", "directionDrag", "viewEncapsulation", "acceptDragSameGroup", "placeholder", "groupName", "dropToGroupName", "items", "stylesOverride"], outputs: ["itemsChange", "outDragStartContainer", "outDragOverContainer", "outDragLeaveContainer", "outDragEndContainer", "outDroppedContainer", "outDroppedContainerEmpty", "outFunctionControl"] }, { kind: "directive", type: LibsUiDragItemDirective, selector: "[LibsUiDragItemDirective]", inputs: ["fieldId", "item", "itemInContainerVirtualScroll", "throttleTimeHandlerDraggingEvent", "ignoreStopEvent", "onlyMouseDownStopEvent", "dragRootElement", "groupName", "dragBoundary", "dragBoundaryAcceptMouseLeaveContainer", "elementContainer", "zIndex", "disable"], outputs: ["outDragStart", "outDragOver", "outDragLeave", "outDragEnd", "outDropped"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsTabsItemComponent, selector: "libs_ui-components-tabs-item", inputs: ["ignoreCalculatorTab", "step", "mode", "tabs", "item", "keySelected", "fieldLabel", "fieldKey", "cssDefault", "size", "disable", "disableLabel", "zIndex", "changeViewTab"], outputs: ["itemChange", "outActionSelected"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "itemChangeUnSelect", "paddingLeftItem", "config", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionCustomAddDataToStore", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
254
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsTabsComponent, isStandalone: true, selector: "libs_ui-components-tabs", inputs: { tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, heightTabItem: { classPropertyName: "heightTabItem", publicName: "heightTabItem", isSignal: true, isRequired: false, transformFunction: null }, ignoreCalculatorTab: { classPropertyName: "ignoreCalculatorTab", publicName: "ignoreCalculatorTab", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, allowDragDropPosition: { classPropertyName: "allowDragDropPosition", publicName: "allowDragDropPosition", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, configCss: { classPropertyName: "configCss", publicName: "configCss", isSignal: true, isRequired: false, transformFunction: null }, popoverShowMoreTabItem: { classPropertyName: "popoverShowMoreTabItem", publicName: "popoverShowMoreTabItem", isSignal: true, isRequired: false, transformFunction: null }, checkCanChangeTabSelected: { classPropertyName: "checkCanChangeTabSelected", publicName: "checkCanChangeTabSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keySelected: "keySelectedChange", configCss: "configCssChange", outKeySelected: "outKeySelected", outFunctionsControl: "outFunctionsControl", outDragTabChange: "outDragTabChange", outDisplayMoreItem: "outDisplayMoreItem", outAction: "outAction" }, viewQueries: [{ propertyName: "headerEl", first: true, predicate: ["headerEl"], descendants: true, isSignal: true }, { propertyName: "headerLeftEl", first: true, predicate: ["headerLeftEl"], descendants: true, isSignal: true }, { propertyName: "headerRightEl", first: true, predicate: ["headerRightEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition()\"\n [groupName]=\"groupName()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? (elementContainerEl.clientWidth/(itemsDisplay().length || 1)) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem($event, item)\"\n (outAction)=\"handlerAction($event)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277, \n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 }\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classInclude]=\"'!p-[8px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{config: {content: popoverShowMoreTabItem()?.config?.content || 'i18n_view_more'}}\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n <div class=\"absolute top-0 z-0 w-full\">\n <div class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\" />\n }\n </div>\n </div>\n </div>\n</div>\n<ng-template #menuEl>\n <libs_ui-components-list [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n", styles: [".libs-ui-tab{position:relative;display:flex;width:100%}.libs-ui-tab .libs-ui-tab-header{position:relative;background-color:#fff;display:flex;flex-wrap:nowrap;width:100%;overflow:hidden;flex-shrink:0}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-header-center{display:flex;flex-wrap:nowrap}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container .libs-ui-icon-arrange{display:none}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container:hover .libs-ui-icon-arrange{display:block}.libs-ui-tab .libs-ui-tab-content-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: LibsUiComponentsDragContainerDirective, selector: "[LibsUiComponentsDragContainerDirective]", inputs: ["disableDragContainer", "mode", "directionDrag", "viewEncapsulation", "acceptDragSameGroup", "placeholder", "groupName", "dropToGroupName", "items", "stylesOverride"], outputs: ["itemsChange", "outDragStartContainer", "outDragOverContainer", "outDragLeaveContainer", "outDragEndContainer", "outDroppedContainer", "outDroppedContainerEmpty", "outFunctionControl"] }, { kind: "directive", type: LibsUiDragItemDirective, selector: "[LibsUiDragItemDirective]", inputs: ["fieldId", "item", "itemInContainerVirtualScroll", "throttleTimeHandlerDraggingEvent", "ignoreStopEvent", "onlyMouseDownStopEvent", "dragRootElement", "groupName", "dragBoundary", "dragBoundaryAcceptMouseLeaveContainer", "elementContainer", "zIndex", "disable"], outputs: ["outDragStart", "outDragOver", "outDragLeave", "outDragEnd", "outDropped"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsTabsItemComponent, selector: "libs_ui-components-tabs-item", inputs: ["ignoreCalculatorTab", "step", "mode", "tabs", "item", "keySelected", "fieldLabel", "fieldKey", "cssDefault", "size", "disable", "disableLabel", "zIndex", "changeViewTab"], outputs: ["itemChange", "outAction"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "itemChangeUnSelect", "paddingLeftItem", "config", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
256
255
|
}
|
|
257
256
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsComponent, decorators: [{
|
|
258
257
|
type: Component,
|
|
@@ -263,6 +262,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
263
262
|
LibsUiComponentsButtonsButtonComponent,
|
|
264
263
|
LibsUiComponentsTabsItemComponent,
|
|
265
264
|
LibsUiComponentsListComponent
|
|
266
|
-
], template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition()\"\n [groupName]=\"groupName()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? (elementContainerEl.clientWidth/(itemsDisplay().length || 1)) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem($event, item)\"\n (
|
|
265
|
+
], template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition()\"\n [groupName]=\"groupName()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? (elementContainerEl.clientWidth/(itemsDisplay().length || 1)) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem($event, item)\"\n (outAction)=\"handlerAction($event)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277, \n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 }\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classInclude]=\"'!p-[8px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{config: {content: popoverShowMoreTabItem()?.config?.content || 'i18n_view_more'}}\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n <div class=\"absolute top-0 z-0 w-full\">\n <div class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\" />\n }\n </div>\n </div>\n </div>\n</div>\n<ng-template #menuEl>\n <libs_ui-components-list [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n", styles: [".libs-ui-tab{position:relative;display:flex;width:100%}.libs-ui-tab .libs-ui-tab-header{position:relative;background-color:#fff;display:flex;flex-wrap:nowrap;width:100%;overflow:hidden;flex-shrink:0}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-header-center{display:flex;flex-wrap:nowrap}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container .libs-ui-icon-arrange{display:none}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container:hover .libs-ui-icon-arrange{display:block}.libs-ui-tab .libs-ui-tab-content-container{width:100%;height:100%}\n"] }]
|
|
267
266
|
}] });
|
|
268
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBUyxzQ0FBc0MsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZILE9BQU8sRUFBeUMsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoSCxPQUFPLEVBQTBDLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFrQmpELE1BQU0sT0FBTyw2QkFBNkI7SUFFeEMsY0FBYztJQUNKLFlBQVksR0FBRyxNQUFNLENBQWtD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Q0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0FuUVUsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsMHZGQzdCMUMscTVMQTBIQSx1bUJEckdJLHNDQUFzQywwY0FDdEMsdUJBQXVCLDRhQUN2QixnQ0FBZ0MsMGRBQ2hDLHNDQUFzQyxpaEJBQ3RDLGlDQUFpQyw2U0FDakMsNkJBQTZCOzs0RkFHcEIsNkJBQTZCO2tCQWhCekMsU0FBUzsrQkFFRSx5QkFBeUIsY0FHdkIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLHNDQUFzQzt3QkFDdEMsdUJBQXVCO3dCQUN2QixnQ0FBZ0M7d0JBQ2hDLHNDQUFzQzt3QkFDdEMsaUNBQWlDO3dCQUNqQyw2QkFBNkI7cUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJRHJvcCwgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUsIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3AnO1xuaW1wb3J0IHsgSUxpc3REYXRhRW1pdEtleSwgSUxpc3RWaWV3Q29uZmlnSXRlbSwgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpc3QnO1xuaW1wb3J0IHsgSVBvcG92ZXIsIElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IGNvbnZlcnRPYmplY3RUb1NpZ25hbCwgaXNOaWwsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSVRhYkNzc0NvbmZpZywgSVRhYkZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJVGFiSXRlbSwgSVRhYkl0ZW1FdmVudCwgSVRhYnMsIFRZUEVfVEFCX01PREUgfSBmcm9tICcuL2ludGVyZmFjZXMvdGFiLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzVGFic0l0ZW1Db21wb25lbnQgfSBmcm9tICcuL2l0ZW0vaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFiTW9yZUxpc3RDb25maWcgfSBmcm9tICcuL3V0aWxzL3RhYnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtdGFicycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFicy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlLFxuICAgIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNUYWJzSXRlbUNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNUYWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCBpdGVtc0Rpc3BsYXkgPSBzaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SVRhYkl0ZW0+Pj4oW10pO1xuICBwcm90ZWN0ZWQgZGlzcGxheU1vcmVJdGVtID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHRhYk1vcmVMaXN0Q29uZmlnID0gc2lnbmFsPElMaXN0Vmlld0NvbmZpZ0l0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBjaGFuZ2VWaWV3VGFiID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJvdGVjdGVkIGdyb3VwTmFtZSA9IHNpZ25hbDxzdHJpbmc+KHV1aWQoKSk7XG4gIHByb3RlY3RlZCBzdHlsZXNEcmFnRHJvcE92ZXJyaWRlQ29tcHV0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnVwZGF0ZVN0eWxlc0RyYWdEcm9wT3ZlcnJpZGUoKSk7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qIElOUFVUICovXG4gIHJlYWRvbmx5IG1vZGUgPSBpbnB1dDxUWVBFX1RBQl9NT0RFPignbGVmdCcpO1xuICByZWFkb25seSBmaWVsZEtleSA9IGlucHV0PHN0cmluZz4oJ2tleScpO1xuICByZWFkb25seSBmaWVsZExhYmVsID0gaW5wdXQ8c3RyaW5nPignbGFiZWwnKTtcbiAgcmVhZG9ubHkga2V5U2VsZWN0ZWQgPSBtb2RlbC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB0YWJzID0gaW5wdXQucmVxdWlyZWQ8SVRhYnM+KCk7XG4gIHJlYWRvbmx5IGhlaWdodFRhYkl0ZW0gPSBpbnB1dDxudW1iZXI+KDQwKTtcbiAgcmVhZG9ubHkgaWdub3JlQ2FsY3VsYXRvclRhYiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2l6ZSA9IGlucHV0PCdsYW5nZXInIHwgJ21lZGl1bSc+KCdtZWRpdW0nKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYWxsb3dEcmFnRHJvcFBvc2l0aW9uID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBjb25maWdDc3MgPSBtb2RlbDxJVGFiQ3NzQ29uZmlnPigpO1xuICByZWFkb25seSBwb3BvdmVyU2hvd01vcmVUYWJJdGVtID0gaW5wdXQ8SVBvcG92ZXI+KCk7XG4gIHJlYWRvbmx5IGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQgPSBpbnB1dDwoKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPj4oKTtcblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0S2V5U2VsZWN0ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElUYWJGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0RHJhZ1RhYkNoYW5nZSA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBvdXREaXNwbGF5TW9yZUl0ZW0gPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0QWN0aW9uU2VsZWN0ZWQgPSBvdXRwdXQ8SVRhYkl0ZW1FdmVudD4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2hlYWRlckVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyTGVmdEVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJMZWZ0RWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBoZWFkZXJSaWdodEVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJSaWdodEVsJyk7XG5cbiAgLyogSU5KRUNUKi9cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVUYWJzQ3NzQ29uZmlnKCk7XG4gICAgaWYgKHRoaXMuaWdub3JlQ2FsY3VsYXRvclRhYigpKSB7XG4gICAgICB0aGlzLnRhYnMoKS5pdGVtcygpLm1hcChpdGVtID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKSk7XG4gICAgfVxuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIGFkZFRhYkl0ZW06IHRoaXMuYWRkVGFiSXRlbS5iaW5kKHRoaXMpLFxuICAgICAgY2FsY3VsYXRvclRhYkl0ZW1zRGlzcGxheTogdGhpcy5jYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5LmJpbmQodGhpcyksXG4gICAgICBzZWxlY3RlZFRhYkl0ZW06IHRoaXMuaGFuZGxlclNlbGVjdGVkVGFiSXRlbS5iaW5kKHRoaXMpXG4gICAgfSk7XG4gICAgaWYgKHRoaXMubW9kZSgpICE9PSAnbGVmdCcgfHwgdGhpcy5pZ25vcmVDYWxjdWxhdG9yVGFiKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUoZGVib3VuY2VUaW1lKDI1MCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMudGFicygpLml0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKTtcbiAgICB9KTtcbiAgICB0aGlzLmNoYW5nZVZpZXdUYWIucGlwZShkZWJvdW5jZVRpbWUoMjApLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCkpO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByaXZhdGUgdXBkYXRlVGFic0Nzc0NvbmZpZygpIHtcbiAgICBpZiAodGhpcy5jb25maWdDc3MoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMubW9kZSgpKSB7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ21sLVsyMHB4XSBtci1bMTZweF0nLFxuICAgICAgICAgIG90aGVyOiAnbWwtWzIwcHhdIG1yLVsxNnB4XSdcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ3B4LVsxMnB4XSBtbC1bMThweF0gbXItWzE4cHhdJyxcbiAgICAgICAgICBvdGhlcjogJ3B4LVsxMnB4XSBteC1bMThweF0nLFxuICAgICAgICAgIGhlYWRlcjogJ2ZsZXgganVzdGlmeS1jZW50ZXInXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYnMoKS5pdGVtcygpLm1hcChpdGVtID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2VudGVyLWhhcy1saW5lJzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ3B4LVsxNnB4XScsXG4gICAgICAgICAgb3RoZXI6ICdweC1bMTZweF0nLFxuICAgICAgICAgIGhlYWRlckNlbnRlcjogJ2l0ZW1zLWNlbnRlcidcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFicygpLml0ZW1zKCkubWFwKGl0ZW0gPT4gaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzcGFjZS1iZXR3ZWVuJzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ214LWF1dG8nLFxuICAgICAgICAgIG90aGVyOiAnbXgtYXV0bycsXG4gICAgICAgICAgaGVhZGVyQ2VudGVyOiAndy1mdWxsJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJzKCkuaXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogdHJ1ZSB9KSkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0eWxlc0RyYWdEcm9wT3ZlcnJpZGUoKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dEcmFnRHJvcFBvc2l0aW9uKCkpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgICBzdHlsZXM6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtJyxcbiAgICAgICAgICBzdHlsZXM6ICdjdXJzb3I6IG1vdmU7J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1kcmFnZ2luZycsXG4gICAgICAgICAgc3R5bGVzOiAnY3Vyc29yOiBtb3ZlOyBiYWNrZ3JvdW5kOiAjZGRkZGRkOydcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbScsXG4gICAgICAgIHN0eWxlczogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZGlzYWJsZScsXG4gICAgICAgIHN0eWxlczogJydcbiAgICAgIH1cbiAgICBdXG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckRyb3BDb250YWluZXIoZXZlbnQ6IElEcm9wKSB7XG4gICAgY29uc3QgeyBpdGVtRHJhZ0luZm8gfSA9IGV2ZW50O1xuICAgIGlmICghaXRlbURyYWdJbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJzKCkuaXRlbXM7XG4gICAgY29uc3QgeyBpbmRleERyYWcsIGluZGV4RHJvcCB9ID0gaXRlbURyYWdJbmZvO1xuICAgIGlmIChpc05pbChpbmRleERyYWcpIHx8IGlzTmlsKGluZGV4RHJvcCkgfHwgaW5kZXhEcm9wID09PSBpbmRleERyYWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbURyYWcgPSBpdGVtcygpW2luZGV4RHJhZyBhcyBudW1iZXJdO1xuICAgIGl0ZW1zLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICBpdGVtcy5zcGxpY2UoaW5kZXhEcmFnIGFzIG51bWJlciwgMSk7XG4gICAgICBpdGVtcy5zcGxpY2UoaW5kZXhEcm9wIGFzIG51bWJlciwgMCwgaXRlbURyYWcpO1xuICAgICAgcmV0dXJuIFsuLi5pdGVtc107XG4gICAgfSk7XG4gICAgdGhpcy5vdXREcmFnVGFiQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KGV2ZW50OiBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlclNlbGVjdGVkVGFiSXRlbShrZXk6IHN0cmluZywgcmVzZXREaXNhYmxlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IHRoaXMudGFicygpLml0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuICAgIGlmICghaXRlbVNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZXNldERpc2FibGUpIHtcbiAgICAgIGl0ZW1TZWxlY3RlZC51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBkaXNhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlckNsaWNrSXRlbSh7IHN0b3BQcm9wYWdhdGlvbjogKCkgPT4geyByZXR1cm4gfSB9IGFzIEV2ZW50LCBpdGVtU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKHsgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7IHJldHVybiB9IH0gYXMgRXZlbnQsIGNvbnZlcnRPYmplY3RUb1NpZ25hbChldmVudC5pdGVtKSk7XG4gICAgdGhpcy5vdXREcmFnVGFiQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2tJdGVtKGV2ZW50OiBFdmVudCwgaXRlbTogV3JpdGFibGVTaWduYWw8SVRhYkl0ZW0+KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGl0ZW0oKS5kaXNhYmxlIHx8IHRoaXMuZGlzYWJsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQgPSB0aGlzLmNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQoKTtcbiAgICBpZiAoY2hlY2tDYW5DaGFuZ2VUYWJTZWxlY3RlZCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkKCk7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VJdGVtU2VsZWN0ZWQoaXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VJdGVtU2VsZWN0ZWQoaXRlbTogV3JpdGFibGVTaWduYWw8SVRhYkl0ZW0+KSB7XG4gICAgdGhpcy5rZXlTZWxlY3RlZC5zZXQoaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pO1xuICAgIHRoaXMub3V0S2V5U2VsZWN0ZWQuZW1pdCh0aGlzLmtleVNlbGVjdGVkKCkpO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gICAgdGhpcy5jYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckFjdGlvblNlbGVjdGVkKGV2ZW50OiBJVGFiSXRlbUV2ZW50KSB7XG4gICAgdGhpcy5vdXRBY3Rpb25TZWxlY3RlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkVGFiSXRlbShpdGVtOiBXcml0YWJsZVNpZ25hbDxJVGFiSXRlbT4sIHNlbGVjdGVkID0gdHJ1ZSwgYWRkRmlyc3Q/OiBib29sZWFuKSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYnMoKS5pdGVtcztcbiAgICBpdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgaWYgKGFkZEZpcnN0KSB7XG4gICAgICAgIHJldHVybiBbaXRlbSwgLi4uaXRlbXNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFsuLi5pdGVtcywgaXRlbV07XG4gICAgfSk7XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmhhbmRsZXJDbGlja0l0ZW0oeyBzdG9wUHJvcGFnYXRpb246ICgpID0+IHsgcmV0dXJuIH0gfSBhcyBFdmVudCwgaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKSB7XG4gICAgbGV0IGl0ZW1zID0gdGhpcy50YWJzKCkuaXRlbXMoKTtcbiAgICBjb25zdCBpbmRleEl0ZW1TZWxlY3RlZCA9IGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSB0aGlzLmtleVNlbGVjdGVkKCkpO1xuICAgIGlmIChpbmRleEl0ZW1TZWxlY3RlZCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNwbGF5TW9yZUl0ZW0uc2V0KGZhbHNlKTtcbiAgICBsZXQgZGlzcGxheU1vcmVJdGVtID0gZmFsc2U7XG4gICAgY29uc3QgaGVhZGVyV2lkdGggPSB0aGlzLmhlYWRlckVsKCkubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCAwO1xuICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IGl0ZW1zW2luZGV4SXRlbVNlbGVjdGVkXTtcbiAgICBjb25zdCBpdGVtU2VsZWN0ZWRXaWR0aCA9IGl0ZW1TZWxlY3RlZCgpLnNwZWNpZmljV2lkdGg7XG4gICAgbGV0IHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgPSAodGhpcy5oZWFkZXJMZWZ0RWwoKS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIHx8IDApICsgKHRoaXMuaGVhZGVyUmlnaHRFbCgpLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfHwgMCkgKyAzMjtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFpdGVtKCkuc3BlY2lmaWNXaWR0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogZmFsc2UgfSkpO1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gaXRlbSgpLnNwZWNpZmljV2lkdGggfHwgMDtcbiAgICAgIGNvbnN0IHdpZHRoID0gdG90YWxXaWR0aEl0ZW1zRGlzcGxheSArIGl0ZW1XaWR0aCArIChpbmRleCA8IGluZGV4SXRlbVNlbGVjdGVkID8gaXRlbVNlbGVjdGVkV2lkdGggOiAwKTtcbiAgICAgIHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgKz0gaXRlbVdpZHRoO1xuICAgICAgaWYgKHdpZHRoID4gaGVhZGVyV2lkdGgpIHtcbiAgICAgICAgZGlzcGxheU1vcmVJdGVtID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpO1xuICAgIH0pO1xuICAgIGl0ZW1TZWxlY3RlZC51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpO1xuICAgIGNvbnN0IGRpc3BsYXkgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtKCkuc3BlY2lmaWNEaXNwbGF5ID09PSB0cnVlKTtcbiAgICBjb25zdCBub3REaXNwbGF5ID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSA9PT0gZmFsc2UpO1xuICAgIGl0ZW1zID0gZGlzcGxheS5jb25jYXQobm90RGlzcGxheSk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgb3JkZXI6IGluZGV4IH0pKSk7XG4gICAgdGhpcy50YWJzKCkuaXRlbXMudXBkYXRlKGl0ZW1zID0+IGl0ZW1zLnNvcnQoKHByZXYsIG5leHQpID0+IChwcmV2KCkub3JkZXIgfHwgMCkgLSAobmV4dCgpLm9yZGVyIHx8IDApKSk7XG4gICAgdGhpcy5kaXNwbGF5TW9yZUl0ZW0uc2V0KGRpc3BsYXlNb3JlSXRlbSk7XG4gICAgdGhpcy5vdXREaXNwbGF5TW9yZUl0ZW0uZW1pdCh0aGlzLmRpc3BsYXlNb3JlSXRlbSgpKTtcbiAgICB0aGlzLml0ZW1zRGlzcGxheS5zZXQodGhpcy50YWJzKCkuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtKCkuc3BlY2lmaWNEaXNwbGF5KSk7XG4gICAgdGhpcy50YWJNb3JlTGlzdENvbmZpZy5zZXQodGFiTW9yZUxpc3RDb25maWcodGhpcy50cmFuc2xhdGUsIHRoaXMuZmllbGRLZXkoKSwgdGhpcy5maWVsZExhYmVsKCksIHRoaXMudGFicygpKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG59IiwiPGRpdiBjbGFzcz1cImxpYnMtdWktdGFiXCI+XG4gIDxkaXYgI2hlYWRlckVsXG4gICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXIgei1bMV0ge3sgY29uZmlnQ3NzKCk/LmhlYWRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyIHx8ICcnIH19XCJcbiAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cImhlaWdodFRhYkl0ZW0oKVwiPlxuICAgIDxkaXYgI2hlYWRlckxlZnRFbFxuICAgICAgY2xhc3M9J2xpYnMtdWktdGFiLWhlYWRlci1sZWZ0Jz5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImRpdi5saWJzLXVpLXRhYi1oZWFkZXItbGVmdFwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlciB7eyBjb25maWdDc3MoKT8uaGVhZGVyQ2VudGVyIHx8ICcnIH19IHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVIZWFkZXJDZW50ZXIgfHwgJycgfX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCIhZmxleCB3LWZ1bGxcIlxuICAgICAgICAjZWxlbWVudENvbnRhaW5lckVsXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlXG4gICAgICAgIFtzdHlsZXNPdmVycmlkZV09XCJzdHlsZXNEcmFnRHJvcE92ZXJyaWRlQ29tcHV0ZWQoKVwiXG4gICAgICAgIFtncm91cE5hbWVdPVwiZ3JvdXBOYW1lKClcIlxuICAgICAgICBbKGl0ZW1zKV09XCJpdGVtc0Rpc3BsYXlcIlxuICAgICAgICBbZGlyZWN0aW9uRHJhZ109XCInaG9yaXpvbnRhbCdcIlxuICAgICAgICBbZGlzYWJsZURyYWdDb250YWluZXJdPVwiIWFsbG93RHJhZ0Ryb3BQb3NpdGlvbigpXCJcbiAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwiYWxsb3dEcmFnRHJvcFBvc2l0aW9uKClcIlxuICAgICAgICAob3V0RHJvcHBlZENvbnRhaW5lcik9XCJoYW5kbGVyRHJvcENvbnRhaW5lcigkZXZlbnQpXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXNEaXNwbGF5KCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICA8ZGl2IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgIWFsbG93RHJhZ0Ryb3BQb3NpdGlvbigpXCJcbiAgICAgICAgICAgIFtncm91cE5hbWVdPVwiZ3JvdXBOYW1lKClcIlxuICAgICAgICAgICAgW2VsZW1lbnRDb250YWluZXJdPVwiZWxlbWVudENvbnRhaW5lckVsXCJcbiAgICAgICAgICAgIFtkcmFnQm91bmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZHJhZ0JvdW5kYXJ5QWNjZXB0TW91c2VMZWF2ZUNvbnRhaW5lcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwicmVsYXRpdmUgbGlicy11aS10YWItaXRlbS1jb250YWluZXJcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm1vZGUoKSA9PT0gJ3NwYWNlLWJldHdlZW4nID8gKGVsZW1lbnRDb250YWluZXJFbC5jbGllbnRXaWR0aC8oaXRlbXNEaXNwbGF5KCkubGVuZ3RoIHx8IDEpKSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbY2xhc3MuZmxleF09XCJtb2RlKCkgPT09ICdjZW50ZXItaGFzLWxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzcy5pdGVtcy1jZW50ZXJdPVwibW9kZSgpID09PSAnY2VudGVyLWhhcy1saW5lJ1wiPlxuICAgICAgICAgICAgQGlmIChhbGxvd0RyYWdEcm9wUG9zaXRpb24oKSAmJiAhZGlzYWJsZSgpKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1pY29uLWFycmFuZ2UgdGV4dC1bIzljYTJhZF0gYWJzb2x1dGUgdG9wLVsxNHB4XSBsZWZ0LVs0cHhdXCI+PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy10YWJzLWl0ZW0gY2xhc3M9XCJoLWZ1bGwgdy1mdWxsICB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSXRlbSB8fCAnJyB9fVwiXG4gICAgICAgICAgICAgIFt0YWJzXT1cInRhYnMoKVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cInNpemUoKVwiXG4gICAgICAgICAgICAgIFsoaXRlbSldPVwiaXRlbVwiXG4gICAgICAgICAgICAgIFtzdGVwXT1cIiRpbmRleCsxXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVMYWJlbF09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtrZXlTZWxlY3RlZF09XCJrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2ZpZWxkTGFiZWxdPVwiZmllbGRMYWJlbCgpXCJcbiAgICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgICBbY3NzRGVmYXVsdF09XCIoJGZpcnN0ID8gY29uZmlnQ3NzKCk/LmZpcnN0IDogY29uZmlnQ3NzKCk/Lm90aGVyKSB8fCAnJ1wiXG4gICAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgICAgICBbbW9kZV09XCJtb2RlKClcIlxuICAgICAgICAgICAgICBbaWdub3JlQ2FsY3VsYXRvclRhYl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NoYW5nZVZpZXdUYWJdPVwiY2hhbmdlVmlld1RhYlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tJdGVtKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAob3V0QWN0aW9uU2VsZWN0ZWQpPVwiaGFuZGxlckFjdGlvblNlbGVjdGVkKCRldmVudClcIiAvPlxuICAgICAgICAgICAgQGlmIChtb2RlKCkgPT09ICdjZW50ZXItaGFzLWxpbmUnICYmICEkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bNDBweF0gaC1bMXB4XSBiZy1bI2U2ZTdlYV1cIj48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgIFtjbGFzcy5tbC1hdXRvXT1cImRpc3BsYXlNb3JlSXRlbSgpICYmICF0YWJzKCkudmlld01vcmVJZ25vcmVNYXJnaW5MZWZ0XCI+XG4gICAgICBAaWYgKGRpc3BsYXlNb3JlSXRlbSgpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBjbGFzcz1cInctZnVsbCBoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIFttb2RlXT1cIidjbGljay10b2dnbGUnXCJcbiAgICAgICAgICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgICAgICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgICAgIHpJbmRleDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LnpJbmRleCB8fCAxMDAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ubWF4SGVpZ2h0IHx8IDI4NyxcbiAgICAgICAgICAgIG1heFdpZHRoOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ubWF4V2lkdGggfHwgMjA0OCxcbiAgICAgICAgICAgIHdpZHRoOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ud2lkdGggfHwgMjc3LCBcbiAgICAgICAgICAgIGRpcmVjdGlvbjogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LmRpcmVjdGlvbiB8fCAnYm90dG9tJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8udGVtcGxhdGUgfHwgbWVudUVsLFxuICAgICAgICAgICAgd2hpdGVUaGVtZTogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZUFycm93OiB0cnVlLFxuICAgICAgICAgICAgcG9zaXRpb246IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5wb3NpdGlvbiB8fCB7IG1vZGU6ICdlbmQnLCBkaXN0YW5jZTogMCB9XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgkZXZlbnQpXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLVs4cHhdJ1wiXG4gICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHJvdGF0ZS05MCB0ZXh0LVsxNnB4XSBtci0wJ1wiXG4gICAgICAgICAgICBbcG9wb3Zlcl09XCJ7Y29uZmlnOiB7Y29udGVudDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LmNvbnRlbnQgfHwgJ2kxOG5fdmlld19tb3JlJ319XCJcbiAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICNoZWFkZXJSaWdodEVsXG4gICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1yaWdodCB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyUmlnaHQgfHwgJycgfX1cIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImRpdi5saWJzLXVpLXRhYi1oZWFkZXItcmlnaHRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgei0wIHctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyIHx8ICcnIH19XCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwiaGVpZ2h0VGFiSXRlbSgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlciB7eyBjb25maWdDc3MoKT8uaGVhZGVyQ2VudGVyIHx8ICcnIH19IHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVIZWFkZXJDZW50ZXIgfHwgJycgfX1cIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiB0YWJzKCkuaXRlbXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFicy1pdGVtIGNsYXNzPVwiaC1mdWxsIHctZnVsbCB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSXRlbSB8fCAnJyB9fVwiXG4gICAgICAgICAgICBbdGFic109XCJ0YWJzKClcIlxuICAgICAgICAgICAgW3NpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgICAgIFsoaXRlbSldPVwiaXRlbVwiXG4gICAgICAgICAgICBbc3RlcF09XCIkaW5kZXgrMVwiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVMYWJlbF09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICAgICAgICBba2V5U2VsZWN0ZWRdPVwia2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbZmllbGRMYWJlbF09XCJmaWVsZExhYmVsKClcIlxuICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgW2Nzc0RlZmF1bHRdPVwiKCRmaXJzdCA/IGNvbmZpZ0NzcygpPy5maXJzdCA6IGNvbmZpZ0NzcygpPy5vdGhlcikgfHwgJydcIlxuICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICBbbW9kZV09XCJtb2RlKClcIlxuICAgICAgICAgICAgW2NoYW5nZVZpZXdUYWJdPVwiY2hhbmdlVmlld1RhYlwiXG4gICAgICAgICAgICBbaWdub3JlQ2FsY3VsYXRvclRhYl09XCJpZ25vcmVDYWxjdWxhdG9yVGFiKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja0l0ZW0oJGV2ZW50LCBpdGVtKVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNtZW51RWw+XG4gIDxsaWJzX3VpLWNvbXBvbmVudHMtbGlzdCBbY29uZmlnXT1cInRhYk1vcmVMaXN0Q29uZmlnKClcIlxuICAgIFttYXhJdGVtU2hvd109XCI1XCJcbiAgICBbaGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgW3BhZGRpbmdMZWZ0SXRlbV09XCJ0cnVlXCJcbiAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZEtleSgkZXZlbnQpXCIgLz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBUyxzQ0FBc0MsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZILE9BQU8sRUFBb0IsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRixPQUFPLEVBQTBDLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFrQmpELE1BQU0sT0FBTyw2QkFBNkI7SUFFeEMsY0FBYztJQUNKLFlBQVksR0FBRyxNQUFNLENBQW1D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QUMsQ0FBQztRQUM3RixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBbFFVLDZCQUE2Qjs0RkFBN0IsNkJBQTZCLDB1RkM3QjFDLDYwTEF5SEEsdW1CRHBHSSxzQ0FBc0MsMGNBQ3RDLHVCQUF1Qiw0YUFDdkIsZ0NBQWdDLDBkQUNoQyxzQ0FBc0MsaWhCQUN0QyxpQ0FBaUMscVNBQ2pDLDZCQUE2Qjs7NEZBR3BCLDZCQUE2QjtrQkFoQnpDLFNBQVM7K0JBRUUseUJBQXlCLGNBR3ZCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxzQ0FBc0M7d0JBQ3RDLHVCQUF1Qjt3QkFDdkIsZ0NBQWdDO3dCQUNoQyxzQ0FBc0M7d0JBQ3RDLGlDQUFpQzt3QkFDakMsNkJBQTZCO3FCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSURyb3AsIExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlLCBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXksIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1saXN0JztcbmltcG9ydCB7IElQb3BvdmVyLCBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBjb252ZXJ0T2JqZWN0VG9TaWduYWwsIGlzTmlsLCB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElUYWJDc3NDb25maWcsIElUYWJzLCBJVGFic0Z1bmN0aW9uQ29udHJvbEV2ZW50LCBJVGFic0l0ZW0sIElUYWJzSXRlbUV2ZW50LCBUWVBFX1RBQl9NT0RFIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3RhYi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1RhYnNJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9pdGVtL2l0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IHRhYk1vcmVMaXN0Q29uZmlnIH0gZnJvbSAnLi91dGlscy90YWJzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXRhYnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSxcbiAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzVGFic0l0ZW1Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzVGFic0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgaXRlbXNEaXNwbGF5ID0gc2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElUYWJzSXRlbT4+PihbXSk7XG4gIHByb3RlY3RlZCBkaXNwbGF5TW9yZUl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgdGFiTW9yZUxpc3RDb25maWcgPSBjb21wdXRlZCgoKSA9PiB0YWJNb3JlTGlzdENvbmZpZyh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5maWVsZEtleSgpLCB0aGlzLmZpZWxkTGFiZWwoKSwgdGhpcy50YWJzKCksIHRoaXMuZGlzYWJsZSgpKSk7XG4gIHByb3RlY3RlZCBjaGFuZ2VWaWV3VGFiID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJvdGVjdGVkIGdyb3VwTmFtZSA9IHNpZ25hbDxzdHJpbmc+KHV1aWQoKSk7XG4gIHByb3RlY3RlZCBzdHlsZXNEcmFnRHJvcE92ZXJyaWRlQ29tcHV0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnVwZGF0ZVN0eWxlc0RyYWdEcm9wT3ZlcnJpZGUoKSk7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qIElOUFVUICovXG4gIHJlYWRvbmx5IHRhYnMgPSBpbnB1dC5yZXF1aXJlZDxJVGFicz4oKTtcbiAgcmVhZG9ubHkga2V5U2VsZWN0ZWQgPSBtb2RlbC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG1vZGUgPSBpbnB1dDxUWVBFX1RBQl9NT0RFPignbGVmdCcpO1xuICByZWFkb25seSBmaWVsZEtleSA9IGlucHV0PHN0cmluZz4oJ2tleScpO1xuICByZWFkb25seSBmaWVsZExhYmVsID0gaW5wdXQ8c3RyaW5nPignbGFiZWwnKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGVMYWJlbCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGhlaWdodFRhYkl0ZW0gPSBpbnB1dDxudW1iZXI+KDQwKTtcbiAgcmVhZG9ubHkgaWdub3JlQ2FsY3VsYXRvclRhYiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2l6ZSA9IGlucHV0PCdsYW5nZXInIHwgJ21lZGl1bSc+KCdtZWRpdW0nKTtcbiAgcmVhZG9ubHkgYWxsb3dEcmFnRHJvcFBvc2l0aW9uID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBjb25maWdDc3MgPSBtb2RlbDxJVGFiQ3NzQ29uZmlnPigpO1xuICByZWFkb25seSBwb3BvdmVyU2hvd01vcmVUYWJJdGVtID0gaW5wdXQ8SVBvcG92ZXI+KCk7XG4gIHJlYWRvbmx5IGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQgPSBpbnB1dDwoKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPj4oKTtcblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0S2V5U2VsZWN0ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElUYWJzRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dERyYWdUYWJDaGFuZ2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0RGlzcGxheU1vcmVJdGVtID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dEFjdGlvbiA9IG91dHB1dDxJVGFic0l0ZW1FdmVudD4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2hlYWRlckVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyTGVmdEVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJMZWZ0RWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBoZWFkZXJSaWdodEVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJSaWdodEVsJyk7XG5cbiAgLyogSU5KRUNUKi9cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVUYWJzQ3NzQ29uZmlnKCk7XG4gICAgaWYgKHRoaXMuaWdub3JlQ2FsY3VsYXRvclRhYigpKSB7XG4gICAgICB0aGlzLnRhYnMoKS5pdGVtcygpLm1hcChpdGVtID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKSk7XG4gICAgfVxuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIGFkZFRhYnNJdGVtOiB0aGlzLmFkZFRhYnNJdGVtLmJpbmQodGhpcyksXG4gICAgICBjYWxjdWxhdG9yVGFic0l0ZW1zRGlzcGxheTogdGhpcy5jYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5LmJpbmQodGhpcyksXG4gICAgICBzZWxlY3RlZFRhYnNJdGVtOiB0aGlzLmhhbmRsZXJTZWxlY3RlZFRhYnNJdGVtLmJpbmQodGhpcylcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tb2RlKCkgIT09ICdsZWZ0JyB8fCB0aGlzLmlnbm9yZUNhbGN1bGF0b3JUYWIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy50YWJzKCkuaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNwbGF5TW9yZUl0ZW0uc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2FsY3VsYXRvclRhYnNJdGVtRGlzcGxheSgpO1xuICAgIH0pO1xuICAgIHRoaXMuY2hhbmdlVmlld1RhYi5waXBlKGRlYm91bmNlVGltZSgyMCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYWJzQ3NzQ29uZmlnKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ0NzcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5tb2RlKCkpIHtcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICB0aGlzLmNvbmZpZ0Nzcy5zZXQoe1xuICAgICAgICAgIGZpcnN0OiAnbWwtWzIwcHhdIG1yLVsxNnB4XScsXG4gICAgICAgICAgb3RoZXI6ICdtbC1bMjBweF0gbXItWzE2cHhdJ1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICB0aGlzLmNvbmZpZ0Nzcy5zZXQoe1xuICAgICAgICAgIGZpcnN0OiAncHgtWzEycHhdIG1sLVsxOHB4XSBtci1bMThweF0nLFxuICAgICAgICAgIG90aGVyOiAncHgtWzEycHhdIG14LVsxOHB4XScsXG4gICAgICAgICAgaGVhZGVyOiAnZmxleCBqdXN0aWZ5LWNlbnRlcidcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFicygpLml0ZW1zKCkubWFwKGl0ZW0gPT4gaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjZW50ZXItaGFzLWxpbmUnOlxuICAgICAgICB0aGlzLmNvbmZpZ0Nzcy5zZXQoe1xuICAgICAgICAgIGZpcnN0OiAncHgtWzE2cHhdJyxcbiAgICAgICAgICBvdGhlcjogJ3B4LVsxNnB4XScsXG4gICAgICAgICAgaGVhZGVyQ2VudGVyOiAnaXRlbXMtY2VudGVyJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJzKCkuaXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogdHJ1ZSB9KSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NwYWNlLWJldHdlZW4nOlxuICAgICAgICB0aGlzLmNvbmZpZ0Nzcy5zZXQoe1xuICAgICAgICAgIGZpcnN0OiAnbXgtYXV0bycsXG4gICAgICAgICAgb3RoZXI6ICdteC1hdXRvJyxcbiAgICAgICAgICBoZWFkZXJDZW50ZXI6ICd3LWZ1bGwnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYnMoKS5pdGVtcygpLm1hcChpdGVtID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3R5bGVzRHJhZ0Ryb3BPdmVycmlkZSgpIHtcbiAgICBpZiAodGhpcy5hbGxvd0RyYWdEcm9wUG9zaXRpb24oKSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tcGxhY2Vob2xkZXInLFxuICAgICAgICAgIHN0eWxlczogJydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0nLFxuICAgICAgICAgIHN0eWxlczogJ2N1cnNvcjogbW92ZTsnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRyYWdnaW5nJyxcbiAgICAgICAgICBzdHlsZXM6ICdjdXJzb3I6IG1vdmU7IGJhY2tncm91bmQ6ICNkZGRkZGQ7J1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtJyxcbiAgICAgICAgc3R5bGVzOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1kaXNhYmxlJyxcbiAgICAgICAgc3R5bGVzOiAnJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRHJvcENvbnRhaW5lcihldmVudDogSURyb3ApIHtcbiAgICBjb25zdCB7IGl0ZW1EcmFnSW5mbyB9ID0gZXZlbnQ7XG4gICAgaWYgKCFpdGVtRHJhZ0luZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYnMoKS5pdGVtcztcbiAgICBjb25zdCB7IGluZGV4RHJhZywgaW5kZXhEcm9wIH0gPSBpdGVtRHJhZ0luZm87XG4gICAgaWYgKGlzTmlsKGluZGV4RHJhZykgfHwgaXNOaWwoaW5kZXhEcm9wKSB8fCBpbmRleERyb3AgPT09IGluZGV4RHJhZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtRHJhZyA9IGl0ZW1zKClbaW5kZXhEcmFnIGFzIG51bWJlcl07XG4gICAgaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgIGl0ZW1zLnNwbGljZShpbmRleERyYWcgYXMgbnVtYmVyLCAxKTtcbiAgICAgIGl0ZW1zLnNwbGljZShpbmRleERyb3AgYXMgbnVtYmVyLCAwLCBpdGVtRHJhZyk7XG4gICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICB9KTtcbiAgICB0aGlzLm91dERyYWdUYWJDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoZXZlbnQ6IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVyU2VsZWN0ZWRUYWJzSXRlbShrZXk6IHN0cmluZywgcmVzZXREaXNhYmxlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IHRoaXMudGFicygpLml0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuICAgIGlmICghaXRlbVNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZXNldERpc2FibGUpIHtcbiAgICAgIGl0ZW1TZWxlY3RlZC51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBkaXNhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlckNsaWNrSXRlbSh7IHN0b3BQcm9wYWdhdGlvbjogKCkgPT4geyByZXR1cm4gfSB9IGFzIEV2ZW50LCBpdGVtU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKHsgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7IHJldHVybiB9IH0gYXMgRXZlbnQsIGNvbnZlcnRPYmplY3RUb1NpZ25hbChldmVudC5pdGVtKSk7XG4gICAgdGhpcy5vdXREcmFnVGFiQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2tJdGVtKGV2ZW50OiBFdmVudCwgaXRlbTogV3JpdGFibGVTaWduYWw8SVRhYnNJdGVtPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChpdGVtKCkuZGlzYWJsZSB8fCB0aGlzLmRpc2FibGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkID0gdGhpcy5jaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkKCk7XG4gICAgaWYgKGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgY2hlY2tDYW5DaGFuZ2VUYWJTZWxlY3RlZCgpO1xuICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZUl0ZW1TZWxlY3RlZChpdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW06IFdyaXRhYmxlU2lnbmFsPElUYWJzSXRlbT4pIHtcbiAgICB0aGlzLmtleVNlbGVjdGVkLnNldChpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgdGhpcy5vdXRLZXlTZWxlY3RlZC5lbWl0KHRoaXMua2V5U2VsZWN0ZWQoKSk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgICB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQWN0aW9uKGV2ZW50OiBJVGFic0l0ZW1FdmVudCkge1xuICAgIHRoaXMub3V0QWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRUYWJzSXRlbShpdGVtOiBXcml0YWJsZVNpZ25hbDxJVGFic0l0ZW0+LCBzZWxlY3RlZCA9IHRydWUsIGFkZEZpcnN0PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJzKCkuaXRlbXM7XG4gICAgaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgIGlmIChhZGRGaXJzdCkge1xuICAgICAgICByZXR1cm4gW2l0ZW0sIC4uLml0ZW1zXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbLi4uaXRlbXMsIGl0ZW1dO1xuICAgIH0pO1xuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKHsgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7IHJldHVybiB9IH0gYXMgRXZlbnQsIGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCkge1xuICAgIGxldCBpdGVtcyA9IHRoaXMudGFicygpLml0ZW1zKCk7XG4gICAgY29uc3QgaW5kZXhJdGVtU2VsZWN0ZWQgPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gdGhpcy5rZXlTZWxlY3RlZCgpKTtcbiAgICBpZiAoaW5kZXhJdGVtU2VsZWN0ZWQgPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChmYWxzZSk7XG4gICAgbGV0IGRpc3BsYXlNb3JlSXRlbSA9IGZhbHNlO1xuICAgIGNvbnN0IGhlYWRlcldpZHRoID0gdGhpcy5oZWFkZXJFbCgpLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfHwgMDtcbiAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBpdGVtc1tpbmRleEl0ZW1TZWxlY3RlZF07XG4gICAgY29uc3QgaXRlbVNlbGVjdGVkV2lkdGggPSBpdGVtU2VsZWN0ZWQoKS5zcGVjaWZpY1dpZHRoO1xuICAgIGxldCB0b3RhbFdpZHRoSXRlbXNEaXNwbGF5ID0gKHRoaXMuaGVhZGVyTGVmdEVsKCkubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCAwKSArICh0aGlzLmhlYWRlclJpZ2h0RWwoKS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIHx8IDApICsgMzI7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghaXRlbSgpLnNwZWNpZmljV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IGZhbHNlIH0pKTtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IGl0ZW0oKS5zcGVjaWZpY1dpZHRoIHx8IDA7XG4gICAgICBjb25zdCB3aWR0aCA9IHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgKyBpdGVtV2lkdGggKyAoaW5kZXggPCBpbmRleEl0ZW1TZWxlY3RlZCA/IGl0ZW1TZWxlY3RlZFdpZHRoIDogMCk7XG4gICAgICB0b3RhbFdpZHRoSXRlbXNEaXNwbGF5ICs9IGl0ZW1XaWR0aDtcbiAgICAgIGlmICh3aWR0aCA+IGhlYWRlcldpZHRoKSB7XG4gICAgICAgIGRpc3BsYXlNb3JlSXRlbSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKTtcbiAgICB9KTtcbiAgICBpdGVtU2VsZWN0ZWQudXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgbm90RGlzcGxheSA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0oKS5zcGVjaWZpY0Rpc3BsYXkgPT09IGZhbHNlKTtcbiAgICBpdGVtcyA9IGRpc3BsYXkuY29uY2F0KG5vdERpc3BsYXkpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIG9yZGVyOiBpbmRleCB9KSkpO1xuICAgIHRoaXMudGFicygpLml0ZW1zLnNldChpdGVtcy5zb3J0KChwcmV2LCBuZXh0KSA9PiAocHJldigpLm9yZGVyIHx8IDApIC0gKG5leHQoKS5vcmRlciB8fCAwKSkpO1xuICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChkaXNwbGF5TW9yZUl0ZW0pO1xuICAgIHRoaXMub3V0RGlzcGxheU1vcmVJdGVtLmVtaXQodGhpcy5kaXNwbGF5TW9yZUl0ZW0oKSk7XG4gICAgdGhpcy5pdGVtc0Rpc3BsYXkuc2V0KHRoaXMudGFicygpLml0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxufSIsIjxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYlwiPlxuICA8ZGl2ICNoZWFkZXJFbFxuICAgIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyIHotWzFdIHt7IGNvbmZpZ0NzcygpPy5oZWFkZXIgfHwgJycgfX0ge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlciB8fCAnJyB9fVwiXG4gICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJoZWlnaHRUYWJJdGVtKClcIj5cbiAgICA8ZGl2ICNoZWFkZXJMZWZ0RWxcbiAgICAgIGNsYXNzPSdsaWJzLXVpLXRhYi1oZWFkZXItbGVmdCc+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkaXYubGlicy11aS10YWItaGVhZGVyLWxlZnRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlckNlbnRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyQ2VudGVyIHx8ICcnIH19XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiIWZsZXggdy1mdWxsXCJcbiAgICAgICAgI2VsZW1lbnRDb250YWluZXJFbFxuICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZVxuICAgICAgICBbc3R5bGVzT3ZlcnJpZGVdPVwic3R5bGVzRHJhZ0Ryb3BPdmVycmlkZUNvbXB1dGVkKClcIlxuICAgICAgICBbZ3JvdXBOYW1lXT1cImdyb3VwTmFtZSgpXCJcbiAgICAgICAgWyhpdGVtcyldPVwiaXRlbXNEaXNwbGF5XCJcbiAgICAgICAgW2RpcmVjdGlvbkRyYWddPVwiJ2hvcml6b250YWwnXCJcbiAgICAgICAgW2Rpc2FibGVEcmFnQ29udGFpbmVyXT1cIiFhbGxvd0RyYWdEcm9wUG9zaXRpb24oKVwiXG4gICAgICAgIFthY2NlcHREcmFnU2FtZUdyb3VwXT1cImFsbG93RHJhZ0Ryb3BQb3NpdGlvbigpXCJcbiAgICAgICAgKG91dERyb3BwZWRDb250YWluZXIpPVwiaGFuZGxlckRyb3BDb250YWluZXIoJGV2ZW50KVwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zRGlzcGxheSgpOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgPGRpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZVxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8ICFhbGxvd0RyYWdEcm9wUG9zaXRpb24oKVwiXG4gICAgICAgICAgICBbZ3JvdXBOYW1lXT1cImdyb3VwTmFtZSgpXCJcbiAgICAgICAgICAgIFtlbGVtZW50Q29udGFpbmVyXT1cImVsZW1lbnRDb250YWluZXJFbFwiXG4gICAgICAgICAgICBbZHJhZ0JvdW5kYXJ5XT1cInRydWVcIlxuICAgICAgICAgICAgW2RyYWdCb3VuZGFyeUFjY2VwdE1vdXNlTGVhdmVDb250YWluZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGxpYnMtdWktdGFiLWl0ZW0tY29udGFpbmVyXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJtb2RlKCkgPT09ICdzcGFjZS1iZXR3ZWVuJyA/IChlbGVtZW50Q29udGFpbmVyRWwuY2xpZW50V2lkdGgvKGl0ZW1zRGlzcGxheSgpLmxlbmd0aCB8fCAxKSkgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmZsZXhdPVwibW9kZSgpID09PSAnY2VudGVyLWhhcy1saW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3MuaXRlbXMtY2VudGVyXT1cIm1vZGUoKSA9PT0gJ2NlbnRlci1oYXMtbGluZSdcIj5cbiAgICAgICAgICAgIEBpZiAoYWxsb3dEcmFnRHJvcFBvc2l0aW9uKCkgJiYgIWRpc2FibGUoKSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktaWNvbi1hcnJhbmdlIHRleHQtWyM5Y2EyYWRdIGFic29sdXRlIHRvcC1bMTRweF0gbGVmdC1bNHB4XVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFicy1pdGVtIGNsYXNzPVwiaC1mdWxsIHctZnVsbCAge3sgdGFicygpLmNsYXNzSW5jbHVkZUl0ZW0gfHwgJycgfX1cIlxuICAgICAgICAgICAgICBbdGFic109XCJ0YWJzKClcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJzaXplKClcIlxuICAgICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1cIlxuICAgICAgICAgICAgICBbc3RlcF09XCIkaW5kZXgrMVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlTGFiZWxdPVwiZGlzYWJsZUxhYmVsKClcIlxuICAgICAgICAgICAgICBba2V5U2VsZWN0ZWRdPVwia2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIFtmaWVsZExhYmVsXT1cImZpZWxkTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtmaWVsZEtleV09XCJmaWVsZEtleSgpXCJcbiAgICAgICAgICAgICAgW2Nzc0RlZmF1bHRdPVwiKCRmaXJzdCA/IGNvbmZpZ0NzcygpPy5maXJzdCA6IGNvbmZpZ0NzcygpPy5vdGhlcikgfHwgJydcIlxuICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgICAgICAgW21vZGVdPVwibW9kZSgpXCJcbiAgICAgICAgICAgICAgW2lnbm9yZUNhbGN1bGF0b3JUYWJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtjaGFuZ2VWaWV3VGFiXT1cImNoYW5nZVZpZXdUYWJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNsaWNrSXRlbSgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgKG91dEFjdGlvbik9XCJoYW5kbGVyQWN0aW9uKCRldmVudClcIiAvPlxuICAgICAgICAgICAgQGlmIChtb2RlKCkgPT09ICdjZW50ZXItaGFzLWxpbmUnICYmICEkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bNDBweF0gaC1bMXB4XSBiZy1bI2U2ZTdlYV1cIj48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgIFtjbGFzcy5tbC1hdXRvXT1cImRpc3BsYXlNb3JlSXRlbSgpICYmICF0YWJzKCkudmlld01vcmVJZ25vcmVNYXJnaW5MZWZ0XCI+XG4gICAgICBAaWYgKGRpc3BsYXlNb3JlSXRlbSgpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBjbGFzcz1cInctZnVsbCBoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIFttb2RlXT1cIidjbGljay10b2dnbGUnXCJcbiAgICAgICAgICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgICAgICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgICAgIHpJbmRleDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LnpJbmRleCB8fCAxMDAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ubWF4SGVpZ2h0IHx8IDI4NyxcbiAgICAgICAgICAgIG1heFdpZHRoOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ubWF4V2lkdGggfHwgMjA0OCxcbiAgICAgICAgICAgIHdpZHRoOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ud2lkdGggfHwgMjc3LCBcbiAgICAgICAgICAgIGRpcmVjdGlvbjogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LmRpcmVjdGlvbiB8fCAnYm90dG9tJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8udGVtcGxhdGUgfHwgbWVudUVsLFxuICAgICAgICAgICAgd2hpdGVUaGVtZTogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZUFycm93OiB0cnVlLFxuICAgICAgICAgICAgcG9zaXRpb246IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5wb3NpdGlvbiB8fCB7IG1vZGU6ICdlbmQnLCBkaXN0YW5jZTogMCB9XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgkZXZlbnQpXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLVs4cHhdJ1wiXG4gICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHJvdGF0ZS05MCB0ZXh0LVsxNnB4XSBtci0wJ1wiXG4gICAgICAgICAgICBbcG9wb3Zlcl09XCJ7Y29uZmlnOiB7Y29udGVudDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LmNvbnRlbnQgfHwgJ2kxOG5fdmlld19tb3JlJ319XCJcbiAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICNoZWFkZXJSaWdodEVsXG4gICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1yaWdodCB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyUmlnaHQgfHwgJycgfX1cIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImRpdi5saWJzLXVpLXRhYi1oZWFkZXItcmlnaHRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgei0wIHctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyIHx8ICcnIH19XCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwiaGVpZ2h0VGFiSXRlbSgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlciB7eyBjb25maWdDc3MoKT8uaGVhZGVyQ2VudGVyIHx8ICcnIH19IHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVIZWFkZXJDZW50ZXIgfHwgJycgfX1cIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiB0YWJzKCkuaXRlbXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFicy1pdGVtIGNsYXNzPVwiaC1mdWxsIHctZnVsbCB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSXRlbSB8fCAnJyB9fVwiXG4gICAgICAgICAgICBbdGFic109XCJ0YWJzKClcIlxuICAgICAgICAgICAgW3NpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgICAgIFsoaXRlbSldPVwiaXRlbVwiXG4gICAgICAgICAgICBbc3RlcF09XCIkaW5kZXgrMVwiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVMYWJlbF09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICAgICAgICBba2V5U2VsZWN0ZWRdPVwia2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbZmllbGRMYWJlbF09XCJmaWVsZExhYmVsKClcIlxuICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgW2Nzc0RlZmF1bHRdPVwiKCRmaXJzdCA/IGNvbmZpZ0NzcygpPy5maXJzdCA6IGNvbmZpZ0NzcygpPy5vdGhlcikgfHwgJydcIlxuICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICBbbW9kZV09XCJtb2RlKClcIlxuICAgICAgICAgICAgW2NoYW5nZVZpZXdUYWJdPVwiY2hhbmdlVmlld1RhYlwiXG4gICAgICAgICAgICBbaWdub3JlQ2FsY3VsYXRvclRhYl09XCJpZ25vcmVDYWxjdWxhdG9yVGFiKClcIiAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbWVudUVsPlxuICA8bGlic191aS1jb21wb25lbnRzLWxpc3QgW2NvbmZpZ109XCJ0YWJNb3JlTGlzdENvbmZpZygpXCJcbiAgICBbbWF4SXRlbVNob3ddPVwiNVwiXG4gICAgW2hpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgIFtwYWRkaW5nTGVmdEl0ZW1dPVwidHJ1ZVwiXG4gICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50KVwiIC8+XG48L25nLXRlbXBsYXRlPlxuIl19
|
package/esm2022/utils/tabs.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { returnListObject } from "@libs-ui/services-http-request";
|
|
2
1
|
import { escapeHtml, isNil } from "@libs-ui/utils";
|
|
3
2
|
import { of } from "rxjs";
|
|
4
|
-
|
|
3
|
+
import { returnListObject } from "@libs-ui/services-http-request";
|
|
4
|
+
export const tabMoreListConfig = (translate, fieldKey, fieldLabel, tabs, disable) => {
|
|
5
5
|
return {
|
|
6
6
|
type: 'text',
|
|
7
7
|
httpRequestData: {
|
|
@@ -11,16 +11,40 @@ export const tabMoreListConfig = (translate, fieldKey, fieldLabel, tabs) => {
|
|
|
11
11
|
},
|
|
12
12
|
configTemplateText: {
|
|
13
13
|
fieldKey: fieldKey || 'key',
|
|
14
|
-
getClassItem: () => '!
|
|
14
|
+
getClassItem: () => '!py-[12px]',
|
|
15
15
|
classRows: 'w-full',
|
|
16
|
+
notUseVirtualScroll: true,
|
|
16
17
|
rows: [{
|
|
17
18
|
classCols: 'flex items-center',
|
|
18
19
|
cols: [
|
|
20
|
+
{
|
|
21
|
+
getPopover: (item) => {
|
|
22
|
+
if (!tabs.hasStep) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const step = (item.order || 0) + 1;
|
|
26
|
+
let classStep = 'bg-[#f8f9fa] text-[#9ca2ad]';
|
|
27
|
+
if (item.invalid) {
|
|
28
|
+
classStep = '!text-[#f15767] !bg-[#fdeaec]';
|
|
29
|
+
}
|
|
30
|
+
if (item.disable || disable) {
|
|
31
|
+
classStep = 'bg-[#f8f9fa] text-[#cdd0d6]';
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
classInclude: 'flex',
|
|
35
|
+
dataView: `
|
|
36
|
+
<div class="libs-ui-font-h6m rounded-full min-w-[24px] min-h-[24px] flex items-center justify-center mr-[8px] ${classStep}">
|
|
37
|
+
${(step <= (tabs.stepCompleted || -1)) ? `<i class="libs-ui-icon-check text-[#ffffff]"></i>` : `${step}`}
|
|
38
|
+
</div>
|
|
39
|
+
`
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
},
|
|
19
43
|
{
|
|
20
44
|
getPopover: (item) => item.iconLeft ? { classInclude: 'flex', dataView: `<i class="${item.iconLeft} text-[16px] mr-[8px]"></i>` } : undefined
|
|
21
45
|
},
|
|
22
46
|
{
|
|
23
|
-
|
|
47
|
+
getClassCol: (data) => `libs-ui-font-h6m ${data.item.invalid ? '!text-[#f15767]' : 'text-[#6a7383]'}`,
|
|
24
48
|
getValue: (data) => of(escapeHtml(translate.instant(data.item[fieldLabel] || ' ')))
|
|
25
49
|
},
|
|
26
50
|
{
|
|
@@ -32,13 +56,13 @@ export const tabMoreListConfig = (translate, fieldKey, fieldLabel, tabs) => {
|
|
|
32
56
|
{
|
|
33
57
|
getConfigBadge: (item) => {
|
|
34
58
|
if (isNil(item.count)) {
|
|
35
|
-
return
|
|
59
|
+
return;
|
|
36
60
|
}
|
|
37
61
|
return {
|
|
38
62
|
mode: item.modeCount || 'x+',
|
|
39
63
|
count: item.count,
|
|
40
64
|
maxCount: item.maxCount || 99,
|
|
41
|
-
classCircle: item.classCircle || 'libs-ui-font-h5r'
|
|
65
|
+
classCircle: (item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')
|
|
42
66
|
};
|
|
43
67
|
}
|
|
44
68
|
}
|
|
@@ -47,4 +71,4 @@ export const tabMoreListConfig = (translate, fieldKey, fieldLabel, tabs) => {
|
|
|
47
71
|
}
|
|
48
72
|
};
|
|
49
73
|
};
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJzL3NyYy91dGlscy90YWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFNBQTJCLEVBQUUsUUFBZ0IsRUFBRSxVQUFrQixFQUFFLElBQVcsRUFBRSxPQUE0QixFQUFtQixFQUFFO0lBQ2pLLE9BQU87UUFDTCxJQUFJLEVBQUUsTUFBTTtRQUNaLGVBQWUsRUFBRTtZQUNmLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3hHLFlBQVksRUFBRSxnQkFBZ0I7WUFDOUIsY0FBYyxFQUFFLEVBQUU7U0FDbkI7UUFDRCxrQkFBa0IsRUFBRTtZQUNsQixRQUFRLEVBQUUsUUFBUSxJQUFJLEtBQUs7WUFDM0IsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVk7WUFDaEMsU0FBUyxFQUFFLFFBQVE7WUFDbkIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixJQUFJLEVBQUUsQ0FBQztvQkFDTCxTQUFTLEVBQUUsbUJBQW1CO29CQUM5QixJQUFJLEVBQUU7d0JBQ0o7NEJBQ0UsVUFBVSxFQUFFLENBQUMsSUFBZSxFQUFFLEVBQUU7Z0NBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0NBQ2xCLE9BQU87Z0NBQ1QsQ0FBQztnQ0FDRCxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUNuQyxJQUFJLFNBQVMsR0FBRyw2QkFBNkIsQ0FBQztnQ0FDOUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0NBQ2pCLFNBQVMsR0FBRywrQkFBK0IsQ0FBQztnQ0FDOUMsQ0FBQztnQ0FDRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7b0NBQzVCLFNBQVMsR0FBRyw2QkFBNkIsQ0FBQztnQ0FDNUMsQ0FBQztnQ0FDRCxPQUFPO29DQUNMLFlBQVksRUFBRSxNQUFNO29DQUNwQixRQUFRLEVBQUU7a0lBQ3dHLFNBQVM7c0JBQ3JILENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1EQUFtRCxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRTs7bUJBRXpHO2lDQUNKLENBQUE7NEJBQ0gsQ0FBQzt5QkFDRjt3QkFDRDs0QkFDRSxVQUFVLEVBQUUsQ0FBQyxJQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxJQUFJLENBQUMsUUFBUSw2QkFBNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO3lCQUN6Sjt3QkFDRDs0QkFDRSxXQUFXLEVBQUUsQ0FBQyxJQUErQixFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRTs0QkFDaEksUUFBUSxFQUFFLENBQUMsSUFBK0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQzt5QkFDL0c7d0JBQ0Q7NEJBQ0UsVUFBVSxFQUFFLENBQUMsSUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7eUJBQ3JGO3dCQUNEOzRCQUNFLFVBQVUsRUFBRSxDQUFDLElBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLElBQUksQ0FBQyxTQUFTLDZCQUE2QixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7eUJBQzNKO3dCQUNEOzRCQUNFLGNBQWMsRUFBRSxDQUFDLElBQWUsRUFBRSxFQUFFO2dDQUNsQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQ0FDdEIsT0FBTztnQ0FDVCxDQUFDO2dDQUNELE9BQU87b0NBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSTtvQ0FDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29DQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFO29DQUM3QixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lDQUMvRyxDQUFDOzRCQUNKLENBQUM7eUJBQ0Y7cUJBQ0Y7aUJBQ0YsQ0FBQztTQUNIO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEYXRhRnVuY3Rpb25DYWxsSW5Db25maWcsIElMaXN0Q29uZmlnSXRlbSB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxpc3RcIjtcbmltcG9ydCB7IGVzY2FwZUh0bWwsIGlzTmlsIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IG9mIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IElUYWJzLCBJVGFic0l0ZW0gfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy90YWIuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyByZXR1cm5MaXN0T2JqZWN0IH0gZnJvbSBcIkBsaWJzLXVpL3NlcnZpY2VzLWh0dHAtcmVxdWVzdFwiO1xuXG5leHBvcnQgY29uc3QgdGFiTW9yZUxpc3RDb25maWcgPSAodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBmaWVsZEtleTogc3RyaW5nLCBmaWVsZExhYmVsOiBzdHJpbmcsIHRhYnM6IElUYWJzLCBkaXNhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkKTogSUxpc3RDb25maWdJdGVtID0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgaHR0cFJlcXVlc3REYXRhOiB7XG4gICAgICBzZXJ2aWNlT3RoZXI6IHJldHVybkxpc3RPYmplY3QodGFicy5pdGVtcygpLmZpbHRlcihpdGVtID0+ICFpdGVtKCkuc3BlY2lmaWNEaXNwbGF5KS5tYXAoaXRlbSA9PiBpdGVtKCkpKSxcbiAgICAgIGZ1bmN0aW9uTmFtZTogJ2xpc3RPYnNlcnZhYmxlJyxcbiAgICAgIGFyZ3VtZW50c1ZhbHVlOiBbXVxuICAgIH0sXG4gICAgY29uZmlnVGVtcGxhdGVUZXh0OiB7XG4gICAgICBmaWVsZEtleTogZmllbGRLZXkgfHwgJ2tleScsXG4gICAgICBnZXRDbGFzc0l0ZW06ICgpID0+ICchcHktWzEycHhdJyxcbiAgICAgIGNsYXNzUm93czogJ3ctZnVsbCcsXG4gICAgICBub3RVc2VWaXJ0dWFsU2Nyb2xsOiB0cnVlLFxuICAgICAgcm93czogW3tcbiAgICAgICAgY2xhc3NDb2xzOiAnZmxleCBpdGVtcy1jZW50ZXInLFxuICAgICAgICBjb2xzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZ2V0UG9wb3ZlcjogKGl0ZW06IElUYWJzSXRlbSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRhYnMuaGFzU3RlcCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzdGVwID0gKGl0ZW0ub3JkZXIgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICBsZXQgY2xhc3NTdGVwID0gJ2JnLVsjZjhmOWZhXSB0ZXh0LVsjOWNhMmFkXSc7XG4gICAgICAgICAgICAgIGlmIChpdGVtLmludmFsaWQpIHtcbiAgICAgICAgICAgICAgICBjbGFzc1N0ZXAgPSAnIXRleHQtWyNmMTU3NjddICFiZy1bI2ZkZWFlY10nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdGVtLmRpc2FibGUgfHwgZGlzYWJsZSkge1xuICAgICAgICAgICAgICAgIGNsYXNzU3RlcCA9ICdiZy1bI2Y4ZjlmYV0gdGV4dC1bI2NkZDBkNl0nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY2xhc3NJbmNsdWRlOiAnZmxleCcsXG4gICAgICAgICAgICAgICAgZGF0YVZpZXc6IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDZtIHJvdW5kZWQtZnVsbCBtaW4tdy1bMjRweF0gbWluLWgtWzI0cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1yLVs4cHhdICR7Y2xhc3NTdGVwfVwiPlxuICAgICAgICAgICAgICAgICAgICAkeyhzdGVwIDw9ICh0YWJzLnN0ZXBDb21wbGV0ZWQgfHwgLTEpKSA/IGA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGVjayB0ZXh0LVsjZmZmZmZmXVwiPjwvaT5gIDogYCR7c3RlcH1gfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldFBvcG92ZXI6IChpdGVtOiBJVGFic0l0ZW0pID0+IGl0ZW0uaWNvbkxlZnQgPyB7IGNsYXNzSW5jbHVkZTogJ2ZsZXgnLCBkYXRhVmlldzogYDxpIGNsYXNzPVwiJHtpdGVtLmljb25MZWZ0fSB0ZXh0LVsxNnB4XSBtci1bOHB4XVwiPjwvaT5gIH0gOiB1bmRlZmluZWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldENsYXNzQ29sOiAoZGF0YTogSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZykgPT4gYGxpYnMtdWktZm9udC1oNm0gJHtkYXRhLml0ZW0uaW52YWxpZCA/ICchdGV4dC1bI2YxNTc2N10nIDogJ3RleHQtWyM2YTczODNdJ31gLFxuICAgICAgICAgICAgZ2V0VmFsdWU6IChkYXRhOiBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnKSA9PiBvZihlc2NhcGVIdG1sKHRyYW5zbGF0ZS5pbnN0YW50KGRhdGEuaXRlbVtmaWVsZExhYmVsXSB8fCAnICcpKSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldFBvcG92ZXI6IChpdGVtOiBJVGFic0l0ZW0pID0+IGl0ZW0ucG9wb3ZlciA/IHsgY29uZmlnOiBpdGVtLnBvcG92ZXIgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZ2V0UG9wb3ZlcjogKGl0ZW06IElUYWJzSXRlbSkgPT4gaXRlbS5pY29uUmlnaHQgPyB7IGNsYXNzSW5jbHVkZTogJ2ZsZXgnLCBkYXRhVmlldzogYDxpIGNsYXNzPVwiJHtpdGVtLmljb25SaWdodH0gdGV4dC1bMTZweF0gbWwtWzhweF1cIj48L2k+YCB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBnZXRDb25maWdCYWRnZTogKGl0ZW06IElUYWJzSXRlbSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNOaWwoaXRlbS5jb3VudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtb2RlOiBpdGVtLm1vZGVDb3VudCB8fCAneCsnLFxuICAgICAgICAgICAgICAgIGNvdW50OiBpdGVtLmNvdW50LFxuICAgICAgICAgICAgICAgIG1heENvdW50OiBpdGVtLm1heENvdW50IHx8IDk5LFxuICAgICAgICAgICAgICAgIGNsYXNzQ2lyY2xlOiAoaXRlbS5jbGFzc0NpcmNsZSB8fCAnbGlicy11aS1mb250LWg1cicpICsgKGl0ZW0uaW52YWxpZCA/ICcgIXRleHQtWyNmMTU3NjddICFiZy1bI2ZkZWFlY10nIDogJycpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XVxuICAgIH1cbiAgfTtcbn0iXX0=
|