@libs-ui/components-table 0.2.356-2 → 0.2.356-4
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/table.type.mjs +1 -1
- package/esm2022/table.component.mjs +2 -2
- package/esm2022/templates/templates.component.mjs +2 -2
- package/fesm2022/libs-ui-components-table.mjs +2 -2
- package/fesm2022/libs-ui-components-table.mjs.map +1 -1
- package/interfaces/table.type.d.ts +1 -1
- package/package.json +25 -25
|
@@ -95,7 +95,7 @@ export class LibsUiComponentsTableTemplatesComponent {
|
|
|
95
95
|
this.functionControls.clear();
|
|
96
96
|
}
|
|
97
97
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsTableTemplatesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
98
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsTableTemplatesComponent, isStandalone: true, selector: "libs_ui-components-table-templates", inputs: { isHover: { classPropertyName: "isHover", publicName: "isHover", isSignal: true, isRequired: false, transformFunction: null }, configs: { classPropertyName: "configs", publicName: "configs", isSignal: true, isRequired: false, transformFunction: null }, templateCssWrapper: { classPropertyName: "templateCssWrapper", publicName: "templateCssWrapper", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (configs(); as configs) {\n @if (item(); as item) {\n <div class=\"libs-ui-table-template {{ templateCssWrapper() || '' }}\">\n @for (config of configs; track config) {\n @if (config.fieldsConfig) {\n <div [class]=\"config.cssWrapper\">\n @for (fieldConfig of config.fieldsConfig; track fieldConfig; let index = $index) {\n @let constHtmlNgStyle = fieldConfig.getNgStyle ? (item()[fieldConfig.field] | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getNgStyle : item() | async) : fieldConfig.ngStyle || {};\n @let constHtmlNgClass = fieldConfig.getNgClass ? (item()[fieldConfig.field] | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getNgClass : item() | async) : fieldConfig.ngClass || {};\n @if (!fieldConfig.rows && !fieldConfig.getComponentOutlet) {\n @switch (fieldConfig.instance) {\n @case ('tooltip') {\n @if (fieldConfig.tooltip || {}; as tooltip) {\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"tooltip.type || 'text'\"\n [mode]=\"tooltip.mode || 'hover'\"\n [isAddContentToParentDocument]=\"tooltip.isAddContentToParentDocument || false\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [classInclude]=\"tooltip.classInclude || ' '\"\n [ignoreShowPopover]=\"tooltip.ignoreShowPopover || false\"\n [config]=\"\n (fieldConfig.getTooltipConfig\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getTooltipConfig : item() | async)\n : (tooltip.config | LibsUiPipesCloneObjectPipe)\n ) | translate\n \"\n [innerHTML]=\"\n (fieldConfig.field ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true) : tooltip.dataView) | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate\n \"\n (outEvent)=\"handlerItemClick($event, fieldConfig)\"></span>\n }\n }\n @case ('image') {\n @if (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getImageSrc : item() : isImageError | async; as linkImage) {\n @if (linkImage !== ' ') {\n <img\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [src]=\"linkImage\"\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n }\n }\n\n @case ('avatar') {\n @if (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getAvatarConfig : item() | async; as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [size]=\"avatarConfig.size || 32\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [getLastTextAfterSpace]=\"avatarConfig.getLastTextAfterSpace\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n }\n\n @case ('buttons') {\n @if ((fieldConfig.buttons && fieldConfig.buttons.length) || fieldConfig.getButtonsByItem) {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [class.invisible]=\"!isHover() && fieldConfig.showButtonHoverMode\">\n @for (button of fieldConfig.buttons || (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getButtonsByItem : item() | async); track button) {\n <libs_ui-components-buttons-button\n [type]=\"button().type || 'button-primary'\"\n [sizeButton]=\"button().sizeButton || 'smaller'\"\n [disable]=\"\n (button().disable ?? fieldConfig.getDisable) ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisable : item() | async) : false\n \"\n [label]=\"button().label || ' '\"\n [classIconLeft]=\"button().classIconLeft || ''\"\n [classIconRight]=\"button().classIconRight || ''\"\n [popover]=\"button().popover || {}\"\n [classInclude]=\"button().classInclude || ''\"\n [ignorePointerEvent]=\"button().ignorePointerEvent\"\n [iconOnlyType]=\"button().iconOnlyType\"\n (outClick)=\"clickButtonAction(button())\" />\n }\n </div>\n }\n }\n\n @case ('button-status') {\n <libs_ui-components-buttons-status\n [config]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n\n @case ('switch') {\n <libs_ui-components-switch\n [active]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getActiveValueSwitch : item() | async\"\n [disable]=\"fieldConfig.getDisableValueSwitch ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisableValueSwitch : item() | async) : false\"\n (outSwitch)=\"handlerSwitch($event, fieldConfig)\" />\n }\n\n @case (fieldConfig.instance === 'other-action-show-popup' || fieldConfig.instance === 'badge' || fieldConfig.instance === 'button-action-show-popup' ? fieldConfig.instance : '') {\n @if ((item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async) !== ' ') {\n @let constHtmlDisableDropdown =\n (fieldConfig.dropdownConfig?.disable ?? fieldConfig.getDisable)\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisable : item() | async)\n : false;\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [class.ml-[8px]]=\"!fieldConfig.ignoreClassMarginLeft\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{\n widthByParent: false,\n ignoreArrow: fieldConfig.dropdownConfig?.ignoreArrow || false,\n maxHeight: fieldConfig.dropdownConfig?.maxHeight || 2048,\n paddingLeftItem: fieldConfig.dropdownConfig?.paddingLeftItem ?? true,\n classInclude: fieldConfig.dropdownConfig?.classIncludePopup || 'w-[250px]',\n position: fieldConfig.dropdownConfig?.position || {\n mode: 'center',\n distance: 0,\n },\n }\"\n [zIndex]=\"fieldConfig.dropdownConfig?.zIndex\"\n [listConfig]=\"\n fieldConfig.dropdownConfig?.getListConfig\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.dropdownConfig?.getListConfig : item() | async)\n : fieldConfig.dropdownConfig?.listConfig\n \"\n [listBackgroundCustom]=\"fieldConfig.dropdownConfig?.listBackgroundListCustom\"\n [listMaxItemShow]=\"fieldConfig.dropdownConfig?.listMaxItemShow || 5\"\n [listKeysDisable]=\"fieldConfig.dropdownConfig?.listKeysDisableItem\"\n [listHiddenInputSearch]=\"fieldConfig.dropdownConfig?.listHiddenInputSearch\"\n [disable]=\"constHtmlDisableDropdown\"\n (outFunctionsControl)=\"handlerFunctionControl($event, index)\"\n (outSelectKey)=\"handlerSelectItemDropdown(fieldConfig, index, $event)\"\n (outSelectMultiKey)=\"handlerSelectItemsDropdown(fieldConfig, index, $event)\">\n @if (fieldConfig.instance === 'other-action-show-popup') {\n <div [innerHtml]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate\"></div>\n }\n @if (fieldConfig.instance === 'badge') {\n @let constHtmlDataBadge = item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async;\n @if (constHtmlDataBadge > 0) {\n <libs_ui-components-badge\n [active]=\"true\"\n [ignoreMarginDefault]=\"true\"\n mode=\"+x\"\n [count]=\"constHtmlDataBadge\"\n [maxCount]=\"99\" />\n }\n }\n @if (fieldConfig.instance === 'button-action-show-popup') {\n <libs_ui-components-buttons-button\n [type]=\"fieldConfig?.dropdownConfig?.button()?.type || 'button-primary'\"\n [sizeButton]=\"fieldConfig?.dropdownConfig?.button()?.sizeButton || 'smaller'\"\n [disable]=\"fieldConfig?.dropdownConfig?.button()?.disable ?? constHtmlDisableDropdown\"\n [label]=\"fieldConfig?.dropdownConfig?.button()?.label || ' '\"\n [classIconLeft]=\"fieldConfig?.dropdownConfig?.button()?.classIconLeft || 'libs-ui-icon-more-vertical rotate-[90deg] mr-0'\"\n [classIconRight]=\"fieldConfig?.dropdownConfig?.button()?.classIconRight || ''\"\n [popover]=\"fieldConfig?.dropdownConfig?.button()?.popover || {}\"\n [classInclude]=\"fieldConfig?.dropdownConfig?.button()?.classInclude || ''\"\n [ignoreStopPropagationEvent]=\"true\" />\n }\n </libs_ui-components-dropdown>\n </div>\n }\n }\n\n @case ('line-clamp') {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\">\n @if (fieldConfig.lineClampConfig; as lineClampConfig) {\n <libs_ui-components-line_clamp\n [ignoreShowButtonCollapseExpand]=\"lineClampConfig.ignoreShowButtonCollapseExpand ?? true\"\n [showTooltip]=\"lineClampConfig.showTooltip ?? true\"\n [maxHeight]=\"lineClampConfig.maxHeight || 36\"\n [maxWidthTooltip]=\"lineClampConfig.maxWidthTooltip || 200\"\n [maxHeightTooltip]=\"lineClampConfig.maxHeightTooltip || 100\"\n [ngClassObject]=\"lineClampConfig.ngClassObject ?? { 'libs-ui-line-clamp-content libs-ui-font-h5r': true }\"\n [isInnerText]=\"lineClampConfig.isInnerText || false\"\n [ignoreStopPropagationTooltipEvent]=\"true\"\n [content]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n </div>\n }\n\n @case ('shape-style') {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [innerHTML]=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate | LibsUiPipesSecurityTrustPipe: 'html' : true | async\n \"\n (click)=\"handlerItemClick($event, fieldConfig)\"></div>\n }\n @default {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [innerHTML]=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate | LibsUiPipesSecurityTrustPipe: 'html' : true | async\n \"\n (click)=\"handlerItemClick($event, fieldConfig)\"></div>\n }\n }\n } @else {\n @if (fieldConfig.rows) {\n <div\n class=\"w-full flex relative {{ fieldConfig.rowsTemplateCssWrapper }}\"\n [style.height.px]=\"rowRef.clientHeight\">\n <div\n #rowRef\n class=\"w-full flex absolute {{ fieldConfig.rowsTemplateCssWrapper }}\">\n <libs_ui-components-table-templates\n class=\"flex w-full\"\n [item]=\"item\"\n [configs]=\"fieldConfig.rows\" />\n </div>\n </div>\n } @else {\n <ng-container\n *ngComponentOutlet=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getComponentOutlet : item() | async;\n inputs: undefined | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDataComponentOutlet : item() : fieldConfig.field : { valueIsEmpty: { item: item() } } | async\n \" />\n }\n }\n }\n </div>\n }\n }\n </div>\n }\n}\n", styles: [":host{width:100%;height:100%}:host .libs-ui-table-template{color:#071631;font-size:12px;font-weight:400;width:100%;height:inherit}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsTableTemplatesComponent, selector: "libs_ui-components-table-templates", inputs: ["isHover", "configs", "templateCssWrapper", "item"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: LibsUiPipesGetValueOfObjectPipe, name: "LibsUiPipesGetValueOfObjectPipe" }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containertextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsStatusComponent, selector: "libs_ui-components-buttons-status", inputs: ["config"] }, { kind: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { kind: "pipe", type: LibsUiPipesCloneObjectPipe, name: "LibsUiPipesCloneObjectPipe" }, { 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", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsLineClampComponent, selector: "libs_ui-components-line_clamp", inputs: ["content", "lengthLimitDisplay", "maxHeight", "ignoreShowButtonCollapseExpand", "ignoreShowButtonCollapse", "showTooltip", "timeHidePopoverOnMouseout", "maxWidthTooltip", "maxHeightTooltip", "zIndexPopover", "isInnerText", "classClassLabelButtonCollapseExpand", "classClassIncludeButtonCollapseExpand", "ignoreStopPropagationTooltipEvent", "ngClassObject", "hasBackgroundGradient", "labelButtonViewMore", "labelButtonCollapse", "directionTooltip", "useXssFilter", "defaultIsCollapse"], outputs: ["outDisplayLineClamp", "outAction", "outClick", "outFunctionControl"] }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsBadgeComponent, selector: "libs_ui-components-badge", inputs: ["popoverConfig", "active", "count", "mode", "maxCount", "ignoreMarginDefault", "classCircle", "ignoreStopPropagationEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
98
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsTableTemplatesComponent, isStandalone: true, selector: "libs_ui-components-table-templates", inputs: { isHover: { classPropertyName: "isHover", publicName: "isHover", isSignal: true, isRequired: false, transformFunction: null }, configs: { classPropertyName: "configs", publicName: "configs", isSignal: true, isRequired: false, transformFunction: null }, templateCssWrapper: { classPropertyName: "templateCssWrapper", publicName: "templateCssWrapper", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (configs(); as configs) {\n @if (item(); as item) {\n <div class=\"libs-ui-table-template {{ templateCssWrapper() || '' }}\">\n @for (config of configs; track config) {\n @if (config.fieldsConfig) {\n <div [class]=\"config.cssWrapper\">\n @for (fieldConfig of config.fieldsConfig; track fieldConfig; let index = $index) {\n @let constHtmlNgStyle = fieldConfig.getNgStyle ? (item()[fieldConfig.field] | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getNgStyle : item() | async) : fieldConfig.ngStyle || {};\n @let constHtmlNgClass = fieldConfig.getNgClass ? (item()[fieldConfig.field] | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getNgClass : item() | async) : fieldConfig.ngClass || {};\n @if (!fieldConfig.rows && !fieldConfig.getComponentOutlet) {\n @switch (fieldConfig.instance) {\n @case ('tooltip') {\n @if (fieldConfig.tooltip || {}; as tooltip) {\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"tooltip.type || 'text'\"\n [mode]=\"tooltip.mode || 'hover'\"\n [isAddContentToParentDocument]=\"tooltip.isAddContentToParentDocument || false\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [classInclude]=\"tooltip.classInclude || ' '\"\n [ignoreShowPopover]=\"tooltip.ignoreShowPopover || false\"\n [config]=\"\n (fieldConfig.getTooltipConfig\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getTooltipConfig : item() | async)\n : (tooltip.config | LibsUiPipesCloneObjectPipe)\n ) | translate\n \"\n [innerHTML]=\"\n (fieldConfig.field ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true) : tooltip.dataView) | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate\n \"\n (outEvent)=\"handlerItemClick($event, fieldConfig)\"></span>\n }\n }\n @case ('image') {\n @if (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getImageSrc : item() : isImageError | async; as linkImage) {\n @if (linkImage !== ' ') {\n <img\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [src]=\"linkImage\"\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n }\n }\n\n @case ('avatar') {\n @if (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getAvatarConfig : item() | async; as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [size]=\"avatarConfig.size || 32\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [getLastTextAfterSpace]=\"avatarConfig.getLastTextAfterSpace\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n }\n\n @case ('buttons') {\n @if ((fieldConfig.buttons && fieldConfig.buttons.length) || fieldConfig.getButtonsByItem) {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [class.invisible]=\"!isHover() && fieldConfig.showButtonHoverMode\">\n @for (button of fieldConfig.buttons || (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getButtonsByItem : item() | async); track button) {\n <libs_ui-components-buttons-button\n [type]=\"button().type || 'button-primary'\"\n [sizeButton]=\"button().sizeButton || 'smaller'\"\n [disable]=\"\n (button().disable ?? fieldConfig.getDisable) ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisable : item() | async) : false\n \"\n [label]=\"button().label || ' '\"\n [classIconLeft]=\"button().classIconLeft || ''\"\n [classIconRight]=\"button().classIconRight || ''\"\n [popover]=\"button().popover || {}\"\n [classInclude]=\"button().classInclude || ''\"\n [ignorePointerEvent]=\"button().ignorePointerEvent\"\n [iconOnlyType]=\"button().iconOnlyType\"\n (outClick)=\"clickButtonAction(button())\" />\n }\n </div>\n }\n }\n\n @case ('button-status') {\n <libs_ui-components-buttons-status\n [config]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n\n @case ('switch') {\n <libs_ui-components-switch\n [active]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getActiveValueSwitch : item() | async\"\n [disable]=\"fieldConfig.getDisableValueSwitch ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisableValueSwitch : item() | async) : false\"\n (outSwitch)=\"handlerSwitch($event, fieldConfig)\" />\n }\n\n @case (fieldConfig.instance === 'other-action-show-popup' || fieldConfig.instance === 'badge' || fieldConfig.instance === 'button-action-show-popup' ? fieldConfig.instance : '') {\n @if ((item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async) !== ' ') {\n @let constHtmlDisableDropdown =\n (fieldConfig.dropdownConfig?.disable ?? fieldConfig.getDisable)\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisable : item() | async)\n : false;\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [class.ml-[8px]]=\"!fieldConfig.ignoreClassMarginLeft\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{\n widthByParent: false,\n ignoreArrow: fieldConfig.dropdownConfig?.ignoreArrow || false,\n maxHeight: fieldConfig.dropdownConfig?.maxHeight || 2048,\n paddingLeftItem: fieldConfig.dropdownConfig?.paddingLeftItem ?? true,\n classInclude: fieldConfig.dropdownConfig?.classIncludePopup || 'w-[250px]',\n position: fieldConfig.dropdownConfig?.position || {\n mode: 'center',\n distance: 0,\n },\n }\"\n [zIndex]=\"fieldConfig.dropdownConfig?.zIndex\"\n [listConfig]=\"\n fieldConfig.dropdownConfig?.getListConfig\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.dropdownConfig?.getListConfig : item() | async)\n : fieldConfig.dropdownConfig?.listConfig\n \"\n [listBackgroundCustom]=\"fieldConfig.dropdownConfig?.listBackgroundListCustom\"\n [listMaxItemShow]=\"fieldConfig.dropdownConfig?.listMaxItemShow || 5\"\n [listKeysDisable]=\"fieldConfig.dropdownConfig?.listKeysDisableItem\"\n [listHiddenInputSearch]=\"fieldConfig.dropdownConfig?.listHiddenInputSearch\"\n [disable]=\"constHtmlDisableDropdown\"\n (outFunctionsControl)=\"handlerFunctionControl($event, index)\"\n (outSelectKey)=\"handlerSelectItemDropdown(fieldConfig, index, $event)\"\n (outSelectMultiKey)=\"handlerSelectItemsDropdown(fieldConfig, index, $event)\">\n @if (fieldConfig.instance === 'other-action-show-popup') {\n <div [innerHtml]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate\"></div>\n }\n @if (fieldConfig.instance === 'badge') {\n @let constHtmlDataBadge = item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async;\n @if (constHtmlDataBadge > 0) {\n <libs_ui-components-badge\n [active]=\"true\"\n [ignoreMarginDefault]=\"true\"\n mode=\"+x\"\n [count]=\"constHtmlDataBadge\"\n [maxCount]=\"99\" />\n }\n }\n @if (fieldConfig.instance === 'button-action-show-popup') {\n <libs_ui-components-buttons-button\n [type]=\"fieldConfig?.dropdownConfig?.button()?.type || 'button-primary'\"\n [sizeButton]=\"fieldConfig?.dropdownConfig?.button()?.sizeButton || 'smaller'\"\n [disable]=\"fieldConfig?.dropdownConfig?.button()?.disable ?? constHtmlDisableDropdown\"\n [label]=\"fieldConfig?.dropdownConfig?.button()?.label || ' '\"\n [classIconLeft]=\"fieldConfig?.dropdownConfig?.button()?.classIconLeft || 'libs-ui-icon-more-vertical rotate-[90deg] mr-0'\"\n [classIconRight]=\"fieldConfig?.dropdownConfig?.button()?.classIconRight || ''\"\n [popover]=\"fieldConfig?.dropdownConfig?.button()?.popover || {}\"\n [classInclude]=\"fieldConfig?.dropdownConfig?.button()?.classInclude || ''\"\n [ignoreStopPropagationEvent]=\"true\" />\n }\n </libs_ui-components-dropdown>\n </div>\n }\n }\n\n @case ('line-clamp') {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\">\n @if (fieldConfig.lineClampConfig; as lineClampConfig) {\n <libs_ui-components-line_clamp\n [ignoreShowButtonCollapseExpand]=\"lineClampConfig.ignoreShowButtonCollapseExpand ?? true\"\n [showTooltip]=\"lineClampConfig.showTooltip ?? true\"\n [maxHeight]=\"lineClampConfig.maxHeight || 36\"\n [maxWidthTooltip]=\"lineClampConfig.maxWidthTooltip || 200\"\n [maxHeightTooltip]=\"lineClampConfig.maxHeightTooltip || 100\"\n [ngClassObject]=\"lineClampConfig.ngClassObject ?? { 'libs-ui-line-clamp-content libs-ui-font-h5r': true }\"\n [isInnerText]=\"lineClampConfig.isInnerText || false\"\n [ignoreStopPropagationTooltipEvent]=\"true\"\n [content]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n </div>\n }\n\n @case ('shape-style') {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [innerHTML]=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate | LibsUiPipesSecurityTrustPipe: 'html' : true | async\n \"\n (click)=\"handlerItemClick($event, fieldConfig)\"></div>\n }\n @default {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [innerHTML]=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate | LibsUiPipesSecurityTrustPipe: 'html' : true | async\n \"\n (click)=\"handlerItemClick($event, fieldConfig)\"></div>\n }\n }\n } @else {\n @if (fieldConfig.rows) {\n <div\n class=\"w-full flex relative {{ fieldConfig.rowsTemplateCssWrapper }}\"\n [style.height.px]=\"rowRef.clientHeight\">\n <div\n #rowRef\n class=\"w-full flex absolute {{ fieldConfig.rowsTemplateCssWrapper }}\">\n <libs_ui-components-table-templates\n class=\"flex w-full\"\n [item]=\"item\"\n [configs]=\"fieldConfig.rows\" />\n </div>\n </div>\n } @else {\n <ng-container\n *ngComponentOutlet=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getComponentOutlet : item() | async;\n inputs: undefined | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDataComponentOutlet : item() : fieldConfig.field : { valueIsEmpty: { item: item() } } | async\n \" />\n }\n }\n }\n </div>\n }\n }\n </div>\n }\n}\n", styles: [":host{width:100%;height:100%}:host .libs-ui-table-template{color:#071631;font-size:12px;font-weight:400;width:100%;height:inherit}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsTableTemplatesComponent, selector: "libs_ui-components-table-templates", inputs: ["isHover", "configs", "templateCssWrapper", "item"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: LibsUiPipesGetValueOfObjectPipe, name: "LibsUiPipesGetValueOfObjectPipe" }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containertextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsStatusComponent, selector: "libs_ui-components-buttons-status", inputs: ["config"] }, { kind: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { kind: "pipe", type: LibsUiPipesCloneObjectPipe, name: "LibsUiPipesCloneObjectPipe" }, { 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", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsLineClampComponent, selector: "libs_ui-components-line_clamp", inputs: ["content", "lengthLimitDisplay", "maxHeight", "ignoreShowButtonCollapseExpand", "ignoreShowButtonCollapse", "showTooltip", "timeHidePopoverOnMouseout", "maxWidthTooltip", "maxHeightTooltip", "zIndexPopover", "isInnerText", "classClassLabelButtonCollapseExpand", "classClassIncludeButtonCollapseExpand", "ignoreStopPropagationTooltipEvent", "ngClassObject", "hasBackgroundGradient", "labelButtonViewMore", "labelButtonCollapse", "directionTooltip", "useXssFilter", "defaultIsCollapse"], outputs: ["outDisplayLineClamp", "outAction", "outClick", "outFunctionControl"] }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "dropdownTemplateRefNotSearchNoData", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsBadgeComponent, selector: "libs_ui-components-badge", inputs: ["popoverConfig", "active", "count", "mode", "maxCount", "ignoreMarginDefault", "classCircle", "ignoreStopPropagationEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
99
99
|
}
|
|
100
100
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsTableTemplatesComponent, decorators: [{
|
|
101
101
|
type: Component,
|
|
@@ -119,4 +119,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
119
119
|
LibsUiComponentsBadgeComponent,
|
|
120
120
|
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (configs(); as configs) {\n @if (item(); as item) {\n <div class=\"libs-ui-table-template {{ templateCssWrapper() || '' }}\">\n @for (config of configs; track config) {\n @if (config.fieldsConfig) {\n <div [class]=\"config.cssWrapper\">\n @for (fieldConfig of config.fieldsConfig; track fieldConfig; let index = $index) {\n @let constHtmlNgStyle = fieldConfig.getNgStyle ? (item()[fieldConfig.field] | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getNgStyle : item() | async) : fieldConfig.ngStyle || {};\n @let constHtmlNgClass = fieldConfig.getNgClass ? (item()[fieldConfig.field] | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getNgClass : item() | async) : fieldConfig.ngClass || {};\n @if (!fieldConfig.rows && !fieldConfig.getComponentOutlet) {\n @switch (fieldConfig.instance) {\n @case ('tooltip') {\n @if (fieldConfig.tooltip || {}; as tooltip) {\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"tooltip.type || 'text'\"\n [mode]=\"tooltip.mode || 'hover'\"\n [isAddContentToParentDocument]=\"tooltip.isAddContentToParentDocument || false\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [classInclude]=\"tooltip.classInclude || ' '\"\n [ignoreShowPopover]=\"tooltip.ignoreShowPopover || false\"\n [config]=\"\n (fieldConfig.getTooltipConfig\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getTooltipConfig : item() | async)\n : (tooltip.config | LibsUiPipesCloneObjectPipe)\n ) | translate\n \"\n [innerHTML]=\"\n (fieldConfig.field ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true) : tooltip.dataView) | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate\n \"\n (outEvent)=\"handlerItemClick($event, fieldConfig)\"></span>\n }\n }\n @case ('image') {\n @if (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getImageSrc : item() : isImageError | async; as linkImage) {\n @if (linkImage !== ' ') {\n <img\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [src]=\"linkImage\"\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n }\n }\n\n @case ('avatar') {\n @if (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getAvatarConfig : item() | async; as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [size]=\"avatarConfig.size || 32\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [getLastTextAfterSpace]=\"avatarConfig.getLastTextAfterSpace\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n }\n\n @case ('buttons') {\n @if ((fieldConfig.buttons && fieldConfig.buttons.length) || fieldConfig.getButtonsByItem) {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [class.invisible]=\"!isHover() && fieldConfig.showButtonHoverMode\">\n @for (button of fieldConfig.buttons || (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getButtonsByItem : item() | async); track button) {\n <libs_ui-components-buttons-button\n [type]=\"button().type || 'button-primary'\"\n [sizeButton]=\"button().sizeButton || 'smaller'\"\n [disable]=\"\n (button().disable ?? fieldConfig.getDisable) ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisable : item() | async) : false\n \"\n [label]=\"button().label || ' '\"\n [classIconLeft]=\"button().classIconLeft || ''\"\n [classIconRight]=\"button().classIconRight || ''\"\n [popover]=\"button().popover || {}\"\n [classInclude]=\"button().classInclude || ''\"\n [ignorePointerEvent]=\"button().ignorePointerEvent\"\n [iconOnlyType]=\"button().iconOnlyType\"\n (outClick)=\"clickButtonAction(button())\" />\n }\n </div>\n }\n }\n\n @case ('button-status') {\n <libs_ui-components-buttons-status\n [config]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n\n @case ('switch') {\n <libs_ui-components-switch\n [active]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getActiveValueSwitch : item() | async\"\n [disable]=\"fieldConfig.getDisableValueSwitch ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisableValueSwitch : item() | async) : false\"\n (outSwitch)=\"handlerSwitch($event, fieldConfig)\" />\n }\n\n @case (fieldConfig.instance === 'other-action-show-popup' || fieldConfig.instance === 'badge' || fieldConfig.instance === 'button-action-show-popup' ? fieldConfig.instance : '') {\n @if ((item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async) !== ' ') {\n @let constHtmlDisableDropdown =\n (fieldConfig.dropdownConfig?.disable ?? fieldConfig.getDisable)\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisable : item() | async)\n : false;\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [class.ml-[8px]]=\"!fieldConfig.ignoreClassMarginLeft\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{\n widthByParent: false,\n ignoreArrow: fieldConfig.dropdownConfig?.ignoreArrow || false,\n maxHeight: fieldConfig.dropdownConfig?.maxHeight || 2048,\n paddingLeftItem: fieldConfig.dropdownConfig?.paddingLeftItem ?? true,\n classInclude: fieldConfig.dropdownConfig?.classIncludePopup || 'w-[250px]',\n position: fieldConfig.dropdownConfig?.position || {\n mode: 'center',\n distance: 0,\n },\n }\"\n [zIndex]=\"fieldConfig.dropdownConfig?.zIndex\"\n [listConfig]=\"\n fieldConfig.dropdownConfig?.getListConfig\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.dropdownConfig?.getListConfig : item() | async)\n : fieldConfig.dropdownConfig?.listConfig\n \"\n [listBackgroundCustom]=\"fieldConfig.dropdownConfig?.listBackgroundListCustom\"\n [listMaxItemShow]=\"fieldConfig.dropdownConfig?.listMaxItemShow || 5\"\n [listKeysDisable]=\"fieldConfig.dropdownConfig?.listKeysDisableItem\"\n [listHiddenInputSearch]=\"fieldConfig.dropdownConfig?.listHiddenInputSearch\"\n [disable]=\"constHtmlDisableDropdown\"\n (outFunctionsControl)=\"handlerFunctionControl($event, index)\"\n (outSelectKey)=\"handlerSelectItemDropdown(fieldConfig, index, $event)\"\n (outSelectMultiKey)=\"handlerSelectItemsDropdown(fieldConfig, index, $event)\">\n @if (fieldConfig.instance === 'other-action-show-popup') {\n <div [innerHtml]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate\"></div>\n }\n @if (fieldConfig.instance === 'badge') {\n @let constHtmlDataBadge = item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async;\n @if (constHtmlDataBadge > 0) {\n <libs_ui-components-badge\n [active]=\"true\"\n [ignoreMarginDefault]=\"true\"\n mode=\"+x\"\n [count]=\"constHtmlDataBadge\"\n [maxCount]=\"99\" />\n }\n }\n @if (fieldConfig.instance === 'button-action-show-popup') {\n <libs_ui-components-buttons-button\n [type]=\"fieldConfig?.dropdownConfig?.button()?.type || 'button-primary'\"\n [sizeButton]=\"fieldConfig?.dropdownConfig?.button()?.sizeButton || 'smaller'\"\n [disable]=\"fieldConfig?.dropdownConfig?.button()?.disable ?? constHtmlDisableDropdown\"\n [label]=\"fieldConfig?.dropdownConfig?.button()?.label || ' '\"\n [classIconLeft]=\"fieldConfig?.dropdownConfig?.button()?.classIconLeft || 'libs-ui-icon-more-vertical rotate-[90deg] mr-0'\"\n [classIconRight]=\"fieldConfig?.dropdownConfig?.button()?.classIconRight || ''\"\n [popover]=\"fieldConfig?.dropdownConfig?.button()?.popover || {}\"\n [classInclude]=\"fieldConfig?.dropdownConfig?.button()?.classInclude || ''\"\n [ignoreStopPropagationEvent]=\"true\" />\n }\n </libs_ui-components-dropdown>\n </div>\n }\n }\n\n @case ('line-clamp') {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\">\n @if (fieldConfig.lineClampConfig; as lineClampConfig) {\n <libs_ui-components-line_clamp\n [ignoreShowButtonCollapseExpand]=\"lineClampConfig.ignoreShowButtonCollapseExpand ?? true\"\n [showTooltip]=\"lineClampConfig.showTooltip ?? true\"\n [maxHeight]=\"lineClampConfig.maxHeight || 36\"\n [maxWidthTooltip]=\"lineClampConfig.maxWidthTooltip || 200\"\n [maxHeightTooltip]=\"lineClampConfig.maxHeightTooltip || 100\"\n [ngClassObject]=\"lineClampConfig.ngClassObject ?? { 'libs-ui-line-clamp-content libs-ui-font-h5r': true }\"\n [isInnerText]=\"lineClampConfig.isInnerText || false\"\n [ignoreStopPropagationTooltipEvent]=\"true\"\n [content]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n </div>\n }\n\n @case ('shape-style') {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [innerHTML]=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate | LibsUiPipesSecurityTrustPipe: 'html' : true | async\n \"\n (click)=\"handlerItemClick($event, fieldConfig)\"></div>\n }\n @default {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [innerHTML]=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate | LibsUiPipesSecurityTrustPipe: 'html' : true | async\n \"\n (click)=\"handlerItemClick($event, fieldConfig)\"></div>\n }\n }\n } @else {\n @if (fieldConfig.rows) {\n <div\n class=\"w-full flex relative {{ fieldConfig.rowsTemplateCssWrapper }}\"\n [style.height.px]=\"rowRef.clientHeight\">\n <div\n #rowRef\n class=\"w-full flex absolute {{ fieldConfig.rowsTemplateCssWrapper }}\">\n <libs_ui-components-table-templates\n class=\"flex w-full\"\n [item]=\"item\"\n [configs]=\"fieldConfig.rows\" />\n </div>\n </div>\n } @else {\n <ng-container\n *ngComponentOutlet=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getComponentOutlet : item() | async;\n inputs: undefined | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDataComponentOutlet : item() : fieldConfig.field : { valueIsEmpty: { item: item() } } | async\n \" />\n }\n }\n }\n </div>\n }\n }\n </div>\n }\n}\n", styles: [":host{width:100%;height:100%}:host .libs-ui-table-template{color:#071631;font-size:12px;font-weight:400;width:100%;height:inherit}\n"] }]
|
|
121
121
|
}] });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJsZS9zcmMvdGVtcGxhdGVzL3RlbXBsYXRlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFibGUvc3JjL3RlbXBsYXRlcy90ZW1wbGF0ZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBVyxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBZ0UsaUNBQWlDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvSSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFDbkcsT0FBTyxFQUFnQiwrQkFBK0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9D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VSx1Q0FBdUM7NEZBQXZDLHVDQUF1Qyx5bkJDOUNwRCwra2dCQThPQSw4TERoTWEsdUNBQXVDLDZJQXBCaEQsT0FBTywyRUFDUCxPQUFPLG1GQUNQLGVBQWUsdUZBQ2YsU0FBUyw4Q0FDVCxpQkFBaUIsK09BQ2pCLCtCQUErQix3RUFDL0IsK0JBQStCLHdYQUMvQixxQ0FBcUMseUVBQ3JDLDRCQUE0QixxRUFDNUIsZ0NBQWdDLG9nQkFDaEMsc0NBQXNDLGtHQUN0QywrQkFBK0IsZ0pBQy9CLDBCQUEwQixtRUFDMUIsc0NBQXNDLHNqQkFDdEMsa0NBQWtDLDBvQkFDbEMsaUNBQWlDLGkxREFDakMsOEJBQThCOzs0RkFJckIsdUNBQXVDO2tCQTNCbkQsU0FBUzsrQkFFRSxvQ0FBb0MsY0FHbEMsSUFBSSxXQUNQO3dCQUNQLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxlQUFlO3dCQUNmLFNBQVM7d0JBQ1QsaUJBQWlCO3dCQUNqQiwrQkFBK0I7d0JBQy9CLCtCQUErQjt3QkFDL0IscUNBQXFDO3dCQUNyQyw0QkFBNEI7d0JBQzVCLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0QywrQkFBK0I7d0JBQy9CLDBCQUEwQjt3QkFDMUIsc0NBQXNDO3dCQUN0QyxrQ0FBa0M7d0JBQ2xDLGlDQUFpQzt3QkFDakMsOEJBQThCO3FCQUMvQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdDb21wb25lbnRPdXRsZXQsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYXZhdGFyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCYWRnZUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYmFkZ2UnO1xuaW1wb3J0IHsgSUJ1dHRvbiwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zU3RhdHVzQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXN0YXR1cyc7XG5pbXBvcnQgeyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSUVtaXRNdWx0aUtleSwgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJvcGRvd24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpbmVDbGFtcENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGluZS1jbGFtcCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElTd2l0Y2hFdmVudCwgTGlic1VpQ29tcG9uZW50c1N3aXRjaENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3dpdGNoJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2xvbmVPYmplY3RQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtY2xvbmUtb2JqZWN0JztcbmltcG9ydCB7IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1nZXQtdmFsdWUtb2Ytb2JqZWN0JztcbmltcG9ydCB7IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1zZWN1cml0eS10cnVzdCc7XG5pbXBvcnQgeyBjb252ZXJ0T2JqZWN0VG9TaWduYWwsIGdldCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgVFlQRV9JVEVNX0RBVEFfVEFCTEUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IElUYWJsZUZpZWxkVGVtcGxhdGVDb25maWcsIElUYWJsZVRlbXBsYXRlQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90ZW1wbGF0ZS1jb25maWcuaW50ZXJmYWNlJztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy10YWJsZS10ZW1wbGF0ZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVtcGxhdGVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGVtcGxhdGVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1N0eWxlLFxuICAgIE5nQ2xhc3MsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNBdmF0YXJDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSxcbiAgICBMaWJzVWlQaXBlc1NlY3VyaXR5VHJ1c3RQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU3RhdHVzQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDbG9uZU9iamVjdFBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpbmVDbGFtcENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0JhZGdlQ29tcG9uZW50LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1RhYmxlVGVtcGxhdGVzQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBsb2NrQ2xpY2shOiBib29sZWFuO1xuICBwcml2YXRlIGZ1bmN0aW9uQ29udHJvbHMgPSBuZXcgTWFwPG51bWJlciwgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCBpc0ltYWdlRXJyb3I6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgcmVhZG9ubHkgaXNIb3ZlciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNvbmZpZ3MgPSBpbnB1dDxBcnJheTxJVGFibGVUZW1wbGF0ZUNvbmZpZz4+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlQ3NzV3JhcHBlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaXRlbSA9IGlucHV0LnJlcXVpcmVkPFRZUEVfSVRFTV9EQVRBX1RBQkxFPigpO1xuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVySXRlbUNsaWNrKGV2ZW50OiBFdmVudCB8IFRZUEVfUE9QT1ZFUl9FVkVOVCB8IHVuZGVmaW5lZCwgY29uZmlnOiBJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnKSB7XG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgRXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycgJiYgZXZlbnQgIT09ICdjbGljaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVMb2NrQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWN0aW9uKSB7XG4gICAgICAgIGNvbmZpZy5hY3Rpb24oZ2V0KHRoaXMuaXRlbSgpLCBjb25maWcuZmllbGQgYXMgYW55KSwgdGhpcy5pdGVtKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNsaWNrQnV0dG9uQWN0aW9uKGJ1dHRvbjogSUJ1dHRvbikge1xuICAgIGF3YWl0IHRoaXMuaGFuZGxlTG9ja0NsaWNrKGFzeW5jICgpID0+IHtcbiAgICAgIGJ1dHRvbi5hY3Rpb24/Lih7IGl0ZW06IHRoaXMuaXRlbSgpIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTd2l0Y2goc3dpdGNoSXRlbTogSVN3aXRjaEV2ZW50LCBjb25maWc6IElUYWJsZUZpZWxkVGVtcGxhdGVDb25maWcpIHtcbiAgICBhd2FpdCB0aGlzLmhhbmRsZUxvY2tDbGljayhhc3luYyAoKSA9PiB7XG4gICAgICBjb25maWc/LnN3aXRjaEFjdGlvbj8uKHN3aXRjaEl0ZW0sIHRoaXMuaXRlbSgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0SXRlbURyb3Bkb3duKGZpZWxkQ29uZmlnOiBJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnLCBpbmRleDogbnVtYmVyLCBkYXRhPzogSUVtaXRTZWxlY3RLZXkpIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVMb2NrQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgZmllbGRDb25maWc/LmFjdGlvbj8uKGRhdGEua2V5LCBkYXRhLml0ZW0sIHRoaXMuaXRlbSgpKTtcbiAgICAgICh0aGlzLmZ1bmN0aW9uQ29udHJvbHM/LmdldChpbmRleCkgYXMgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpPy5yZXNldCgpO1xuICAgICAgKHRoaXMuZnVuY3Rpb25Db250cm9scz8uZ2V0KGluZGV4KSBhcyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCk/LnJlbW92ZUxpc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0SXRlbXNEcm9wZG93bihmaWVsZENvbmZpZzogSVRhYmxlRmllbGRUZW1wbGF0ZUNvbmZpZywgaW5kZXg6IG51bWJlciwgZGF0YT86IElFbWl0TXVsdGlLZXkpIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVMb2NrQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgZmllbGRDb25maWc/LmFjdGlvbj8uKGRhdGEua2V5cywgY29udmVydE9iamVjdFRvU2lnbmFsKGRhdGEubWFwS2V5cywgZmFsc2UpLCB0aGlzLml0ZW0oKSk7XG4gICAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzPy5nZXQoaW5kZXgpIGFzIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50KT8ucmVzZXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVySW1hZ2VFcnJvcihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzSW1hZ2VFcnJvciA9IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbHMuc2V0KGluZGV4LCBldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUxvY2tDbGljayhjYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIGlmICh0aGlzLmxvY2tDbGljaykgcmV0dXJuO1xuICAgIHRoaXMubG9ja0NsaWNrID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2FsbGJhY2soKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvY2tDbGljayA9IGZhbHNlO1xuICAgICAgfSwgMjUwKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbHMuY2xlYXIoKTtcbiAgfVxufVxuIiwiQGlmIChjb25maWdzKCk7IGFzIGNvbmZpZ3MpIHtcbiAgQGlmIChpdGVtKCk7IGFzIGl0ZW0pIHtcbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWJsZS10ZW1wbGF0ZSB7eyB0ZW1wbGF0ZUNzc1dyYXBwZXIoKSB8fCAnJyB9fVwiPlxuICAgICAgQGZvciAoY29uZmlnIG9mIGNvbmZpZ3M7IHRyYWNrIGNvbmZpZykge1xuICAgICAgICBAaWYgKGNvbmZpZy5maWVsZHNDb25maWcpIHtcbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCJjb25maWcuY3NzV3JhcHBlclwiPlxuICAgICAgICAgICAgQGZvciAoZmllbGRDb25maWcgb2YgY29uZmlnLmZpZWxkc0NvbmZpZzsgdHJhY2sgZmllbGRDb25maWc7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICBAbGV0IGNvbnN0SHRtbE5nU3R5bGUgPSBmaWVsZENvbmZpZy5nZXROZ1N0eWxlID8gKGl0ZW0oKVtmaWVsZENvbmZpZy5maWVsZF0gfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBmaWVsZENvbmZpZy5nZXROZ1N0eWxlIDogaXRlbSgpIHwgYXN5bmMpIDogZmllbGRDb25maWcubmdTdHlsZSB8fCB7fTtcbiAgICAgICAgICAgICAgQGxldCBjb25zdEh0bWxOZ0NsYXNzID0gZmllbGRDb25maWcuZ2V0TmdDbGFzcyA/IChpdGVtKClbZmllbGRDb25maWcuZmllbGRdIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcuZ2V0TmdDbGFzcyA6IGl0ZW0oKSB8IGFzeW5jKSA6IGZpZWxkQ29uZmlnLm5nQ2xhc3MgfHwge307XG4gICAgICAgICAgICAgIEBpZiAoIWZpZWxkQ29uZmlnLnJvd3MgJiYgIWZpZWxkQ29uZmlnLmdldENvbXBvbmVudE91dGxldCkge1xuICAgICAgICAgICAgICAgIEBzd2l0Y2ggKGZpZWxkQ29uZmlnLmluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ3Rvb2x0aXAnKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGRDb25maWcudG9vbHRpcCB8fCB7fTsgYXMgdG9vbHRpcCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwidG9vbHRpcC50eXBlIHx8ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJ0b29sdGlwLm1vZGUgfHwgJ2hvdmVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudF09XCJ0b29sdGlwLmlzQWRkQ29udGVudFRvUGFyZW50RG9jdW1lbnQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29uc3RIdG1sTmdTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb25zdEh0bWxOZ0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwidG9vbHRpcC5jbGFzc0luY2x1ZGUgfHwgJyAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJ0b29sdGlwLmlnbm9yZVNob3dQb3BvdmVyIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZENvbmZpZy5nZXRUb29sdGlwQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXRlbSgpIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGRDb25maWcuZmllbGQgOiB1bmRlZmluZWQgOiB0cnVlIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcuZ2V0VG9vbHRpcENvbmZpZyA6IGl0ZW0oKSB8IGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHRvb2x0aXAuY29uZmlnIHwgTGlic1VpUGlwZXNDbG9uZU9iamVjdFBpcGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRDb25maWcuZmllbGQgPyAoaXRlbSgpIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGRDb25maWcuZmllbGQgOiB1bmRlZmluZWQgOiB0cnVlKSA6IHRvb2x0aXAuZGF0YVZpZXcpIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcucGFyc2VWYWx1ZSA6IGl0ZW0oKSB8IGFzeW5jIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJJdGVtQ2xpY2soJGV2ZW50LCBmaWVsZENvbmZpZylcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnaW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbSgpIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGRDb25maWcuZmllbGQgOiB1bmRlZmluZWQgOiB0cnVlIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcuZ2V0SW1hZ2VTcmMgOiBpdGVtKCkgOiBpc0ltYWdlRXJyb3IgfCBhc3luYzsgYXMgbGlua0ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChsaW5rSW1hZ2UgIT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb25zdEh0bWxOZ1N0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uc3RIdG1sTmdDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwibGlua0ltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImhhbmRsZXJJbWFnZUVycm9yKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckl0ZW1DbGljaygkZXZlbnQsIGZpZWxkQ29uZmlnKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnYXZhdGFyJykge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLmdldEF2YXRhckNvbmZpZyA6IGl0ZW0oKSB8IGFzeW5jOyBhcyBhdmF0YXJDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWF2YXRhclxuICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVTaGFwZV09XCJhdmF0YXJDb25maWcudHlwZVNoYXBlIHx8ICdjaXJjbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYXZhdGFyQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb25zdEh0bWxOZ1N0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbnN0SHRtbE5nQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiYXZhdGFyQ29uZmlnLnNpemUgfHwgMzJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJdPVwiYXZhdGFyQ29uZmlnLmxpbmtBdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJhdmF0YXJDb25maWcubGlua0F2YXRhckVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZEdlbkNvbG9yXT1cImF2YXRhckNvbmZpZy5pZEdlbkNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtnZXRMYXN0VGV4dEFmdGVyU3BhY2VdPVwiYXZhdGFyQ29uZmlnLmdldExhc3RUZXh0QWZ0ZXJTcGFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEF2YXRhcl09XCJhdmF0YXJDb25maWcudGV4dEF2YXRhclwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdidXR0b25zJykge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKChmaWVsZENvbmZpZy5idXR0b25zICYmIGZpZWxkQ29uZmlnLmJ1dHRvbnMubGVuZ3RoKSB8fCBmaWVsZENvbmZpZy5nZXRCdXR0b25zQnlJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29uc3RIdG1sTmdTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb25zdEh0bWxOZ0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pbnZpc2libGVdPVwiIWlzSG92ZXIoKSAmJiBmaWVsZENvbmZpZy5zaG93QnV0dG9uSG92ZXJNb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChidXR0b24gb2YgZmllbGRDb25maWcuYnV0dG9ucyB8fCAoaXRlbSgpIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGRDb25maWcuZmllbGQgOiB1bmRlZmluZWQgOiB0cnVlIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcuZ2V0QnV0dG9uc0J5SXRlbSA6IGl0ZW0oKSB8IGFzeW5jKTsgdHJhY2sgYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24oKS50eXBlIHx8ICdidXR0b24tcHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplQnV0dG9uXT1cImJ1dHRvbigpLnNpemVCdXR0b24gfHwgJ3NtYWxsZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidXR0b24oKS5kaXNhYmxlID8/IGZpZWxkQ29uZmlnLmdldERpc2FibGUpID8gKGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLmdldERpc2FibGUgOiBpdGVtKCkgfCBhc3luYykgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImJ1dHRvbigpLmxhYmVsIHx8ICcgJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uKCkuY2xhc3NJY29uTGVmdCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cImJ1dHRvbigpLmNsYXNzSWNvblJpZ2h0IHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJidXR0b24oKS5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImJ1dHRvbigpLmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lnbm9yZVBvaW50ZXJFdmVudF09XCJidXR0b24oKS5pZ25vcmVQb2ludGVyRXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwiYnV0dG9uKCkuaWNvbk9ubHlUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiY2xpY2tCdXR0b25BY3Rpb24oYnV0dG9uKCkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ2J1dHRvbi1zdGF0dXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cIml0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLnBhcnNlVmFsdWUgOiBpdGVtKCkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJJdGVtQ2xpY2soJGV2ZW50LCBmaWVsZENvbmZpZylcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ3N3aXRjaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cIml0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLmdldEFjdGl2ZVZhbHVlU3dpdGNoIDogaXRlbSgpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImZpZWxkQ29uZmlnLmdldERpc2FibGVWYWx1ZVN3aXRjaCA/IChpdGVtKCkgfCBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlOiBmaWVsZENvbmZpZy5maWVsZCA6IHVuZGVmaW5lZCA6IHRydWUgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBmaWVsZENvbmZpZy5nZXREaXNhYmxlVmFsdWVTd2l0Y2ggOiBpdGVtKCkgfCBhc3luYykgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG91dFN3aXRjaCk9XCJoYW5kbGVyU3dpdGNoKCRldmVudCwgZmllbGRDb25maWcpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgQGNhc2UgKGZpZWxkQ29uZmlnLmluc3RhbmNlID09PSAnb3RoZXItYWN0aW9uLXNob3ctcG9wdXAnIHx8IGZpZWxkQ29uZmlnLmluc3RhbmNlID09PSAnYmFkZ2UnIHx8IGZpZWxkQ29uZmlnLmluc3RhbmNlID09PSAnYnV0dG9uLWFjdGlvbi1zaG93LXBvcHVwJyA/IGZpZWxkQ29uZmlnLmluc3RhbmNlIDogJycpIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmICgoaXRlbSgpIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGRDb25maWcuZmllbGQgOiB1bmRlZmluZWQgOiB0cnVlIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcucGFyc2VWYWx1ZSA6IGl0ZW0oKSB8IGFzeW5jKSAhPT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgQGxldCBjb25zdEh0bWxEaXNhYmxlRHJvcGRvd24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5kaXNhYmxlID8/IGZpZWxkQ29uZmlnLmdldERpc2FibGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gKGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLmdldERpc2FibGUgOiBpdGVtKCkgfCBhc3luYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb25zdEh0bWxOZ1N0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbnN0SHRtbE5nQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1sLVs4cHhdXT1cIiFmaWVsZENvbmZpZy5pZ25vcmVDbGFzc01hcmdpbkxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3ZlckN1c3RvbUNvbmZpZ109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhCeVBhcmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQXJyb3c6IGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5pZ25vcmVBcnJvdyB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5tYXhIZWlnaHQgfHwgMjA0OCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdEl0ZW06IGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5wYWRkaW5nTGVmdEl0ZW0gPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0luY2x1ZGU6IGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5jbGFzc0luY2x1ZGVQb3B1cCB8fCAndy1bMjUwcHhdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogZmllbGRDb25maWcuZHJvcGRvd25Db25maWc/LnBvc2l0aW9uIHx8IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwiZmllbGRDb25maWcuZHJvcGRvd25Db25maWc/LnpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5nZXRMaXN0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpdGVtKCkgfCBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlOiBmaWVsZENvbmZpZy5maWVsZCA6IHVuZGVmaW5lZCA6IHRydWUgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBmaWVsZENvbmZpZy5kcm9wZG93bkNvbmZpZz8uZ2V0TGlzdENvbmZpZyA6IGl0ZW0oKSB8IGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaWVsZENvbmZpZy5kcm9wZG93bkNvbmZpZz8ubGlzdENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEJhY2tncm91bmRDdXN0b21dPVwiZmllbGRDb25maWcuZHJvcGRvd25Db25maWc/Lmxpc3RCYWNrZ3JvdW5kTGlzdEN1c3RvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiZmllbGRDb25maWcuZHJvcGRvd25Db25maWc/Lmxpc3RNYXhJdGVtU2hvdyB8fCA1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJmaWVsZENvbmZpZy5kcm9wZG93bkNvbmZpZz8ubGlzdEtleXNEaXNhYmxlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwiZmllbGRDb25maWcuZHJvcGRvd25Db25maWc/Lmxpc3RIaWRkZW5JbnB1dFNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImNvbnN0SHRtbERpc2FibGVEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50LCBpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RJdGVtRHJvcGRvd24oZmllbGRDb25maWcsIGluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNlbGVjdE11bHRpS2V5KT1cImhhbmRsZXJTZWxlY3RJdGVtc0Ryb3Bkb3duKGZpZWxkQ29uZmlnLCBpbmRleCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkQ29uZmlnLmluc3RhbmNlID09PSAnb3RoZXItYWN0aW9uLXNob3ctcG9wdXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cIml0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLnBhcnNlVmFsdWUgOiBpdGVtKCkgfCBhc3luYyB8IHRyYW5zbGF0ZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGRDb25maWcuaW5zdGFuY2UgPT09ICdiYWRnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IGNvbnN0SHRtbERhdGFCYWRnZSA9IGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLnBhcnNlVmFsdWUgOiBpdGVtKCkgfCBhc3luYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbnN0SHRtbERhdGFCYWRnZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYmFkZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lnbm9yZU1hcmdpbkRlZmF1bHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9XCIreFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJjb25zdEh0bWxEYXRhQmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4Q291bnRdPVwiOTlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkQ29uZmlnLmluc3RhbmNlID09PSAnYnV0dG9uLWFjdGlvbi1zaG93LXBvcHVwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImZpZWxkQ29uZmlnPy5kcm9wZG93bkNvbmZpZz8uYnV0dG9uKCk/LnR5cGUgfHwgJ2J1dHRvbi1wcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCJmaWVsZENvbmZpZz8uZHJvcGRvd25Db25maWc/LmJ1dHRvbigpPy5zaXplQnV0dG9uIHx8ICdzbWFsbGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJmaWVsZENvbmZpZz8uZHJvcGRvd25Db25maWc/LmJ1dHRvbigpPy5kaXNhYmxlID8/IGNvbnN0SHRtbERpc2FibGVEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGRDb25maWc/LmRyb3Bkb3duQ29uZmlnPy5idXR0b24oKT8ubGFiZWwgfHwgJyAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cImZpZWxkQ29uZmlnPy5kcm9wZG93bkNvbmZpZz8uYnV0dG9uKCk/LmNsYXNzSWNvbkxlZnQgfHwgJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHJvdGF0ZS1bOTBkZWddIG1yLTAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJmaWVsZENvbmZpZz8uZHJvcGRvd25Db25maWc/LmJ1dHRvbigpPy5jbGFzc0ljb25SaWdodCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJmaWVsZENvbmZpZz8uZHJvcGRvd25Db25maWc/LmJ1dHRvbigpPy5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiZmllbGRDb25maWc/LmRyb3Bkb3duQ29uZmlnPy5idXR0b24oKT8uY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdsaW5lLWNsYW1wJykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29uc3RIdG1sTmdTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uc3RIdG1sTmdDbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGRDb25maWcubGluZUNsYW1wQ29uZmlnOyBhcyBsaW5lQ2xhbXBDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGluZV9jbGFtcFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWdub3JlU2hvd0J1dHRvbkNvbGxhcHNlRXhwYW5kXT1cImxpbmVDbGFtcENvbmZpZy5pZ25vcmVTaG93QnV0dG9uQ29sbGFwc2VFeHBhbmQgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJsaW5lQ2xhbXBDb25maWcuc2hvd1Rvb2x0aXAgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhIZWlnaHRdPVwibGluZUNsYW1wQ29uZmlnLm1heEhlaWdodCB8fCAzNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhXaWR0aFRvb2x0aXBdPVwibGluZUNsYW1wQ29uZmlnLm1heFdpZHRoVG9vbHRpcCB8fCAyMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4SGVpZ2h0VG9vbHRpcF09XCJsaW5lQ2xhbXBDb25maWcubWF4SGVpZ2h0VG9vbHRpcCB8fCAxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc09iamVjdF09XCJsaW5lQ2xhbXBDb25maWcubmdDbGFzc09iamVjdCA/PyB7ICdsaWJzLXVpLWxpbmUtY2xhbXAtY29udGVudCBsaWJzLXVpLWZvbnQtaDVyJzogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzSW5uZXJUZXh0XT1cImxpbmVDbGFtcENvbmZpZy5pc0lubmVyVGV4dCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25Ub29sdGlwRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIml0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLnBhcnNlVmFsdWUgOiBpdGVtKCkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVySXRlbUNsaWNrKCRldmVudCwgZmllbGRDb25maWcpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ3NoYXBlLXN0eWxlJykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29uc3RIdG1sTmdTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uc3RIdG1sTmdDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLnBhcnNlVmFsdWUgOiBpdGVtKCkgfCBhc3luYyB8IHRyYW5zbGF0ZSB8IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGU6ICdodG1sJyA6IHRydWUgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJJdGVtQ2xpY2soJGV2ZW50LCBmaWVsZENvbmZpZylcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNvbnN0SHRtbE5nU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbnN0SHRtbE5nQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtKCkgfCBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlOiBmaWVsZENvbmZpZy5maWVsZCA6IHVuZGVmaW5lZCA6IHRydWUgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBmaWVsZENvbmZpZy5wYXJzZVZhbHVlIDogaXRlbSgpIHwgYXN5bmMgfCB0cmFuc2xhdGUgfCBMaWJzVWlQaXBlc1NlY3VyaXR5VHJ1c3RQaXBlOiAnaHRtbCcgOiB0cnVlIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVySXRlbUNsaWNrKCRldmVudCwgZmllbGRDb25maWcpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAaWYgKGZpZWxkQ29uZmlnLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCByZWxhdGl2ZSB7eyBmaWVsZENvbmZpZy5yb3dzVGVtcGxhdGVDc3NXcmFwcGVyIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dSZWYuY2xpZW50SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAjcm93UmVmXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCBhYnNvbHV0ZSAge3sgZmllbGRDb25maWcucm93c1RlbXBsYXRlQ3NzV3JhcHBlciB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFibGUtdGVtcGxhdGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ3NdPVwiZmllbGRDb25maWcucm93c1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLmdldENvbXBvbmVudE91dGxldCA6IGl0ZW0oKSB8IGFzeW5jO1xuICAgICAgICAgICAgICAgICAgICAgIGlucHV0czogdW5kZWZpbmVkIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcuZ2V0RGF0YUNvbXBvbmVudE91dGxldCA6IGl0ZW0oKSA6IGZpZWxkQ29uZmlnLmZpZWxkIDogeyB2YWx1ZUlzRW1wdHk6IHsgaXRlbTogaXRlbSgpIH0gfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgIFwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxufVxuIl19
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJsZS9zcmMvdGVtcGxhdGVzL3RlbXBsYXRlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFibGUvc3JjL3RlbXBsYXRlcy90ZW1wbGF0ZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBVyxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBZ0UsaUNBQWlDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvSSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFDbkcsT0FBTyxFQUFnQiwrQkFBK0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9D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VSx1Q0FBdUM7NEZBQXZDLHVDQUF1Qyx5bkJDOUNwRCwra2dCQThPQSw4TERoTWEsdUNBQXVDLDZJQXBCaEQsT0FBTywyRUFDUCxPQUFPLG1GQUNQLGVBQWUsdUZBQ2YsU0FBUyw4Q0FDVCxpQkFBaUIsK09BQ2pCLCtCQUErQix3RUFDL0IsK0JBQStCLHdYQUMvQixxQ0FBcUMseUVBQ3JDLDRCQUE0QixxRUFDNUIsZ0NBQWdDLG9nQkFDaEMsc0NBQXNDLGtHQUN0QywrQkFBK0IsZ0pBQy9CLDBCQUEwQixtRUFDMUIsc0NBQXNDLHNqQkFDdEMsa0NBQWtDLDBvQkFDbEMsaUNBQWlDLHUzREFDakMsOEJBQThCOzs0RkFJckIsdUNBQXVDO2tCQTNCbkQsU0FBUzsrQkFFRSxvQ0FBb0MsY0FHbEMsSUFBSSxXQUNQO3dCQUNQLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxlQUFlO3dCQUNmLFNBQVM7d0JBQ1QsaUJBQWlCO3dCQUNqQiwrQkFBK0I7d0JBQy9CLCtCQUErQjt3QkFDL0IscUNBQXFDO3dCQUNyQyw0QkFBNEI7d0JBQzVCLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0QywrQkFBK0I7d0JBQy9CLDBCQUEwQjt3QkFDMUIsc0NBQXNDO3dCQUN0QyxrQ0FBa0M7d0JBQ2xDLGlDQUFpQzt3QkFDakMsOEJBQThCO3FCQUMvQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdDb21wb25lbnRPdXRsZXQsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYXZhdGFyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCYWRnZUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYmFkZ2UnO1xuaW1wb3J0IHsgSUJ1dHRvbiwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zU3RhdHVzQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXN0YXR1cyc7XG5pbXBvcnQgeyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSUVtaXRNdWx0aUtleSwgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJvcGRvd24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpbmVDbGFtcENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGluZS1jbGFtcCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElTd2l0Y2hFdmVudCwgTGlic1VpQ29tcG9uZW50c1N3aXRjaENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3dpdGNoJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2xvbmVPYmplY3RQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtY2xvbmUtb2JqZWN0JztcbmltcG9ydCB7IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1nZXQtdmFsdWUtb2Ytb2JqZWN0JztcbmltcG9ydCB7IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1zZWN1cml0eS10cnVzdCc7XG5pbXBvcnQgeyBjb252ZXJ0T2JqZWN0VG9TaWduYWwsIGdldCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgVFlQRV9JVEVNX0RBVEFfVEFCTEUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IElUYWJsZUZpZWxkVGVtcGxhdGVDb25maWcsIElUYWJsZVRlbXBsYXRlQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90ZW1wbGF0ZS1jb25maWcuaW50ZXJmYWNlJztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy10YWJsZS10ZW1wbGF0ZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVtcGxhdGVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGVtcGxhdGVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1N0eWxlLFxuICAgIE5nQ2xhc3MsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNBdmF0YXJDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSxcbiAgICBMaWJzVWlQaXBlc1NlY3VyaXR5VHJ1c3RQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU3RhdHVzQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDbG9uZU9iamVjdFBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpbmVDbGFtcENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0JhZGdlQ29tcG9uZW50LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1RhYmxlVGVtcGxhdGVzQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBsb2NrQ2xpY2shOiBib29sZWFuO1xuICBwcml2YXRlIGZ1bmN0aW9uQ29udHJvbHMgPSBuZXcgTWFwPG51bWJlciwgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCBpc0ltYWdlRXJyb3I6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgcmVhZG9ubHkgaXNIb3ZlciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNvbmZpZ3MgPSBpbnB1dDxBcnJheTxJVGFibGVUZW1wbGF0ZUNvbmZpZz4+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlQ3NzV3JhcHBlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaXRlbSA9IGlucHV0LnJlcXVpcmVkPFRZUEVfSVRFTV9EQVRBX1RBQkxFPigpO1xuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVySXRlbUNsaWNrKGV2ZW50OiBFdmVudCB8IFRZUEVfUE9QT1ZFUl9FVkVOVCB8IHVuZGVmaW5lZCwgY29uZmlnOiBJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnKSB7XG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgRXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycgJiYgZXZlbnQgIT09ICdjbGljaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVMb2NrQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWN0aW9uKSB7XG4gICAgICAgIGNvbmZpZy5hY3Rpb24oZ2V0KHRoaXMuaXRlbSgpLCBjb25maWcuZmllbGQgYXMgYW55KSwgdGhpcy5pdGVtKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNsaWNrQnV0dG9uQWN0aW9uKGJ1dHRvbjogSUJ1dHRvbikge1xuICAgIGF3YWl0IHRoaXMuaGFuZGxlTG9ja0NsaWNrKGFzeW5jICgpID0+IHtcbiAgICAgIGJ1dHRvbi5hY3Rpb24/Lih7IGl0ZW06IHRoaXMuaXRlbSgpIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTd2l0Y2goc3dpdGNoSXRlbTogSVN3aXRjaEV2ZW50LCBjb25maWc6IElUYWJsZUZpZWxkVGVtcGxhdGVDb25maWcpIHtcbiAgICBhd2FpdCB0aGlzLmhhbmRsZUxvY2tDbGljayhhc3luYyAoKSA9PiB7XG4gICAgICBjb25maWc/LnN3aXRjaEFjdGlvbj8uKHN3aXRjaEl0ZW0sIHRoaXMuaXRlbSgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0SXRlbURyb3Bkb3duKGZpZWxkQ29uZmlnOiBJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnLCBpbmRleDogbnVtYmVyLCBkYXRhPzogSUVtaXRTZWxlY3RLZXkpIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVMb2NrQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgZmllbGRDb25maWc/LmFjdGlvbj8uKGRhdGEua2V5LCBkYXRhLml0ZW0sIHRoaXMuaXRlbSgpKTtcbiAgICAgICh0aGlzLmZ1bmN0aW9uQ29udHJvbHM/LmdldChpbmRleCkgYXMgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpPy5yZXNldCgpO1xuICAgICAgKHRoaXMuZnVuY3Rpb25Db250cm9scz8uZ2V0KGluZGV4KSBhcyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCk/LnJlbW92ZUxpc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0SXRlbXNEcm9wZG93bihmaWVsZENvbmZpZzogSVRhYmxlRmllbGRUZW1wbGF0ZUNvbmZpZywgaW5kZXg6IG51bWJlciwgZGF0YT86IElFbWl0TXVsdGlLZXkpIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVMb2NrQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgZmllbGRDb25maWc/LmFjdGlvbj8uKGRhdGEua2V5cywgY29udmVydE9iamVjdFRvU2lnbmFsKGRhdGEubWFwS2V5cywgZmFsc2UpLCB0aGlzLml0ZW0oKSk7XG4gICAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzPy5nZXQoaW5kZXgpIGFzIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50KT8ucmVzZXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVySW1hZ2VFcnJvcihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzSW1hZ2VFcnJvciA9IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbHMuc2V0KGluZGV4LCBldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUxvY2tDbGljayhjYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIGlmICh0aGlzLmxvY2tDbGljaykgcmV0dXJuO1xuICAgIHRoaXMubG9ja0NsaWNrID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2FsbGJhY2soKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvY2tDbGljayA9IGZhbHNlO1xuICAgICAgfSwgMjUwKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbHMuY2xlYXIoKTtcbiAgfVxufVxuIiwiQGlmIChjb25maWdzKCk7IGFzIGNvbmZpZ3MpIHtcbiAgQGlmIChpdGVtKCk7IGFzIGl0ZW0pIHtcbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWJsZS10ZW1wbGF0ZSB7eyB0ZW1wbGF0ZUNzc1dyYXBwZXIoKSB8fCAnJyB9fVwiPlxuICAgICAgQGZvciAoY29uZmlnIG9mIGNvbmZpZ3M7IHRyYWNrIGNvbmZpZykge1xuICAgICAgICBAaWYgKGNvbmZpZy5maWVsZHNDb25maWcpIHtcbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCJjb25maWcuY3NzV3JhcHBlclwiPlxuICAgICAgICAgICAgQGZvciAoZmllbGRDb25maWcgb2YgY29uZmlnLmZpZWxkc0NvbmZpZzsgdHJhY2sgZmllbGRDb25maWc7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICBAbGV0IGNvbnN0SHRtbE5nU3R5bGUgPSBmaWVsZENvbmZpZy5nZXROZ1N0eWxlID8gKGl0ZW0oKVtmaWVsZENvbmZpZy5maWVsZF0gfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBmaWVsZENvbmZpZy5nZXROZ1N0eWxlIDogaXRlbSgpIHwgYXN5bmMpIDogZmllbGRDb25maWcubmdTdHlsZSB8fCB7fTtcbiAgICAgICAgICAgICAgQGxldCBjb25zdEh0bWxOZ0NsYXNzID0gZmllbGRDb25maWcuZ2V0TmdDbGFzcyA/IChpdGVtKClbZmllbGRDb25maWcuZmllbGRdIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcuZ2V0TmdDbGFzcyA6IGl0ZW0oKSB8IGFzeW5jKSA6IGZpZWxkQ29uZmlnLm5nQ2xhc3MgfHwge307XG4gICAgICAgICAgICAgIEBpZiAoIWZpZWxkQ29uZmlnLnJvd3MgJiYgIWZpZWxkQ29uZmlnLmdldENvbXBvbmVudE91dGxldCkge1xuICAgICAgICAgICAgICAgIEBzd2l0Y2ggKGZpZWxkQ29uZmlnLmluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ3Rvb2x0aXAnKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGRDb25maWcudG9vbHRpcCB8fCB7fTsgYXMgdG9vbHRpcCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwidG9vbHRpcC50eXBlIHx8ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJ0b29sdGlwLm1vZGUgfHwgJ2hvdmVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudF09XCJ0b29sdGlwLmlzQWRkQ29udGVudFRvUGFyZW50RG9jdW1lbnQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29uc3RIdG1sTmdTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb25zdEh0bWxOZ0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwidG9vbHRpcC5jbGFzc0luY2x1ZGUgfHwgJyAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJ0b29sdGlwLmlnbm9yZVNob3dQb3BvdmVyIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZENvbmZpZy5nZXRUb29sdGlwQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXRlbSgpIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGRDb25maWcuZmllbGQgOiB1bmRlZmluZWQgOiB0cnVlIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcuZ2V0VG9vbHRpcENvbmZpZyA6IGl0ZW0oKSB8IGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHRvb2x0aXAuY29uZmlnIHwgTGlic1VpUGlwZXNDbG9uZU9iamVjdFBpcGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRDb25maWcuZmllbGQgPyAoaXRlbSgpIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGRDb25maWcuZmllbGQgOiB1bmRlZmluZWQgOiB0cnVlKSA6IHRvb2x0aXAuZGF0YVZpZXcpIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcucGFyc2VWYWx1ZSA6IGl0ZW0oKSB8IGFzeW5jIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJJdGVtQ2xpY2soJGV2ZW50LCBmaWVsZENvbmZpZylcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnaW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbSgpIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGRDb25maWcuZmllbGQgOiB1bmRlZmluZWQgOiB0cnVlIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcuZ2V0SW1hZ2VTcmMgOiBpdGVtKCkgOiBpc0ltYWdlRXJyb3IgfCBhc3luYzsgYXMgbGlua0ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChsaW5rSW1hZ2UgIT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb25zdEh0bWxOZ1N0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uc3RIdG1sTmdDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwibGlua0ltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImhhbmRsZXJJbWFnZUVycm9yKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckl0ZW1DbGljaygkZXZlbnQsIGZpZWxkQ29uZmlnKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnYXZhdGFyJykge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLmdldEF2YXRhckNvbmZpZyA6IGl0ZW0oKSB8IGFzeW5jOyBhcyBhdmF0YXJDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWF2YXRhclxuICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVTaGFwZV09XCJhdmF0YXJDb25maWcudHlwZVNoYXBlIHx8ICdjaXJjbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYXZhdGFyQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb25zdEh0bWxOZ1N0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbnN0SHRtbE5nQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiYXZhdGFyQ29uZmlnLnNpemUgfHwgMzJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJdPVwiYXZhdGFyQ29uZmlnLmxpbmtBdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJhdmF0YXJDb25maWcubGlua0F2YXRhckVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZEdlbkNvbG9yXT1cImF2YXRhckNvbmZpZy5pZEdlbkNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtnZXRMYXN0VGV4dEFmdGVyU3BhY2VdPVwiYXZhdGFyQ29uZmlnLmdldExhc3RUZXh0QWZ0ZXJTcGFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEF2YXRhcl09XCJhdmF0YXJDb25maWcudGV4dEF2YXRhclwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdidXR0b25zJykge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKChmaWVsZENvbmZpZy5idXR0b25zICYmIGZpZWxkQ29uZmlnLmJ1dHRvbnMubGVuZ3RoKSB8fCBmaWVsZENvbmZpZy5nZXRCdXR0b25zQnlJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29uc3RIdG1sTmdTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb25zdEh0bWxOZ0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pbnZpc2libGVdPVwiIWlzSG92ZXIoKSAmJiBmaWVsZENvbmZpZy5zaG93QnV0dG9uSG92ZXJNb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChidXR0b24gb2YgZmllbGRDb25maWcuYnV0dG9ucyB8fCAoaXRlbSgpIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGRDb25maWcuZmllbGQgOiB1bmRlZmluZWQgOiB0cnVlIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcuZ2V0QnV0dG9uc0J5SXRlbSA6IGl0ZW0oKSB8IGFzeW5jKTsgdHJhY2sgYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24oKS50eXBlIHx8ICdidXR0b24tcHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplQnV0dG9uXT1cImJ1dHRvbigpLnNpemVCdXR0b24gfHwgJ3NtYWxsZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidXR0b24oKS5kaXNhYmxlID8/IGZpZWxkQ29uZmlnLmdldERpc2FibGUpID8gKGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLmdldERpc2FibGUgOiBpdGVtKCkgfCBhc3luYykgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImJ1dHRvbigpLmxhYmVsIHx8ICcgJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uKCkuY2xhc3NJY29uTGVmdCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cImJ1dHRvbigpLmNsYXNzSWNvblJpZ2h0IHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJidXR0b24oKS5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImJ1dHRvbigpLmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lnbm9yZVBvaW50ZXJFdmVudF09XCJidXR0b24oKS5pZ25vcmVQb2ludGVyRXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwiYnV0dG9uKCkuaWNvbk9ubHlUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiY2xpY2tCdXR0b25BY3Rpb24oYnV0dG9uKCkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ2J1dHRvbi1zdGF0dXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cIml0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLnBhcnNlVmFsdWUgOiBpdGVtKCkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJJdGVtQ2xpY2soJGV2ZW50LCBmaWVsZENvbmZpZylcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ3N3aXRjaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cIml0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLmdldEFjdGl2ZVZhbHVlU3dpdGNoIDogaXRlbSgpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImZpZWxkQ29uZmlnLmdldERpc2FibGVWYWx1ZVN3aXRjaCA/IChpdGVtKCkgfCBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlOiBmaWVsZENvbmZpZy5maWVsZCA6IHVuZGVmaW5lZCA6IHRydWUgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBmaWVsZENvbmZpZy5nZXREaXNhYmxlVmFsdWVTd2l0Y2ggOiBpdGVtKCkgfCBhc3luYykgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG91dFN3aXRjaCk9XCJoYW5kbGVyU3dpdGNoKCRldmVudCwgZmllbGRDb25maWcpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgQGNhc2UgKGZpZWxkQ29uZmlnLmluc3RhbmNlID09PSAnb3RoZXItYWN0aW9uLXNob3ctcG9wdXAnIHx8IGZpZWxkQ29uZmlnLmluc3RhbmNlID09PSAnYmFkZ2UnIHx8IGZpZWxkQ29uZmlnLmluc3RhbmNlID09PSAnYnV0dG9uLWFjdGlvbi1zaG93LXBvcHVwJyA/IGZpZWxkQ29uZmlnLmluc3RhbmNlIDogJycpIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmICgoaXRlbSgpIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGRDb25maWcuZmllbGQgOiB1bmRlZmluZWQgOiB0cnVlIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcucGFyc2VWYWx1ZSA6IGl0ZW0oKSB8IGFzeW5jKSAhPT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgQGxldCBjb25zdEh0bWxEaXNhYmxlRHJvcGRvd24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5kaXNhYmxlID8/IGZpZWxkQ29uZmlnLmdldERpc2FibGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gKGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLmdldERpc2FibGUgOiBpdGVtKCkgfCBhc3luYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb25zdEh0bWxOZ1N0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbnN0SHRtbE5nQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1sLVs4cHhdXT1cIiFmaWVsZENvbmZpZy5pZ25vcmVDbGFzc01hcmdpbkxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3ZlckN1c3RvbUNvbmZpZ109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhCeVBhcmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQXJyb3c6IGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5pZ25vcmVBcnJvdyB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5tYXhIZWlnaHQgfHwgMjA0OCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdEl0ZW06IGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5wYWRkaW5nTGVmdEl0ZW0gPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0luY2x1ZGU6IGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5jbGFzc0luY2x1ZGVQb3B1cCB8fCAndy1bMjUwcHhdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogZmllbGRDb25maWcuZHJvcGRvd25Db25maWc/LnBvc2l0aW9uIHx8IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwiZmllbGRDb25maWcuZHJvcGRvd25Db25maWc/LnpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ29uZmlnLmRyb3Bkb3duQ29uZmlnPy5nZXRMaXN0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpdGVtKCkgfCBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlOiBmaWVsZENvbmZpZy5maWVsZCA6IHVuZGVmaW5lZCA6IHRydWUgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBmaWVsZENvbmZpZy5kcm9wZG93bkNvbmZpZz8uZ2V0TGlzdENvbmZpZyA6IGl0ZW0oKSB8IGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaWVsZENvbmZpZy5kcm9wZG93bkNvbmZpZz8ubGlzdENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEJhY2tncm91bmRDdXN0b21dPVwiZmllbGRDb25maWcuZHJvcGRvd25Db25maWc/Lmxpc3RCYWNrZ3JvdW5kTGlzdEN1c3RvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiZmllbGRDb25maWcuZHJvcGRvd25Db25maWc/Lmxpc3RNYXhJdGVtU2hvdyB8fCA1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJmaWVsZENvbmZpZy5kcm9wZG93bkNvbmZpZz8ubGlzdEtleXNEaXNhYmxlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwiZmllbGRDb25maWcuZHJvcGRvd25Db25maWc/Lmxpc3RIaWRkZW5JbnB1dFNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImNvbnN0SHRtbERpc2FibGVEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50LCBpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RJdGVtRHJvcGRvd24oZmllbGRDb25maWcsIGluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNlbGVjdE11bHRpS2V5KT1cImhhbmRsZXJTZWxlY3RJdGVtc0Ryb3Bkb3duKGZpZWxkQ29uZmlnLCBpbmRleCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkQ29uZmlnLmluc3RhbmNlID09PSAnb3RoZXItYWN0aW9uLXNob3ctcG9wdXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cIml0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLnBhcnNlVmFsdWUgOiBpdGVtKCkgfCBhc3luYyB8IHRyYW5zbGF0ZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGRDb25maWcuaW5zdGFuY2UgPT09ICdiYWRnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IGNvbnN0SHRtbERhdGFCYWRnZSA9IGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLnBhcnNlVmFsdWUgOiBpdGVtKCkgfCBhc3luYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbnN0SHRtbERhdGFCYWRnZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYmFkZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lnbm9yZU1hcmdpbkRlZmF1bHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9XCIreFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJjb25zdEh0bWxEYXRhQmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4Q291bnRdPVwiOTlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkQ29uZmlnLmluc3RhbmNlID09PSAnYnV0dG9uLWFjdGlvbi1zaG93LXBvcHVwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImZpZWxkQ29uZmlnPy5kcm9wZG93bkNvbmZpZz8uYnV0dG9uKCk/LnR5cGUgfHwgJ2J1dHRvbi1wcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCJmaWVsZENvbmZpZz8uZHJvcGRvd25Db25maWc/LmJ1dHRvbigpPy5zaXplQnV0dG9uIHx8ICdzbWFsbGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJmaWVsZENvbmZpZz8uZHJvcGRvd25Db25maWc/LmJ1dHRvbigpPy5kaXNhYmxlID8/IGNvbnN0SHRtbERpc2FibGVEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGRDb25maWc/LmRyb3Bkb3duQ29uZmlnPy5idXR0b24oKT8ubGFiZWwgfHwgJyAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cImZpZWxkQ29uZmlnPy5kcm9wZG93bkNvbmZpZz8uYnV0dG9uKCk/LmNsYXNzSWNvbkxlZnQgfHwgJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHJvdGF0ZS1bOTBkZWddIG1yLTAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJmaWVsZENvbmZpZz8uZHJvcGRvd25Db25maWc/LmJ1dHRvbigpPy5jbGFzc0ljb25SaWdodCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJmaWVsZENvbmZpZz8uZHJvcGRvd25Db25maWc/LmJ1dHRvbigpPy5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiZmllbGRDb25maWc/LmRyb3Bkb3duQ29uZmlnPy5idXR0b24oKT8uY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdsaW5lLWNsYW1wJykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29uc3RIdG1sTmdTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uc3RIdG1sTmdDbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGRDb25maWcubGluZUNsYW1wQ29uZmlnOyBhcyBsaW5lQ2xhbXBDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGluZV9jbGFtcFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWdub3JlU2hvd0J1dHRvbkNvbGxhcHNlRXhwYW5kXT1cImxpbmVDbGFtcENvbmZpZy5pZ25vcmVTaG93QnV0dG9uQ29sbGFwc2VFeHBhbmQgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJsaW5lQ2xhbXBDb25maWcuc2hvd1Rvb2x0aXAgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhIZWlnaHRdPVwibGluZUNsYW1wQ29uZmlnLm1heEhlaWdodCB8fCAzNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhXaWR0aFRvb2x0aXBdPVwibGluZUNsYW1wQ29uZmlnLm1heFdpZHRoVG9vbHRpcCB8fCAyMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4SGVpZ2h0VG9vbHRpcF09XCJsaW5lQ2xhbXBDb25maWcubWF4SGVpZ2h0VG9vbHRpcCB8fCAxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc09iamVjdF09XCJsaW5lQ2xhbXBDb25maWcubmdDbGFzc09iamVjdCA/PyB7ICdsaWJzLXVpLWxpbmUtY2xhbXAtY29udGVudCBsaWJzLXVpLWZvbnQtaDVyJzogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzSW5uZXJUZXh0XT1cImxpbmVDbGFtcENvbmZpZy5pc0lubmVyVGV4dCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25Ub29sdGlwRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIml0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLnBhcnNlVmFsdWUgOiBpdGVtKCkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVySXRlbUNsaWNrKCRldmVudCwgZmllbGRDb25maWcpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ3NoYXBlLXN0eWxlJykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29uc3RIdG1sTmdTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uc3RIdG1sTmdDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLnBhcnNlVmFsdWUgOiBpdGVtKCkgfCBhc3luYyB8IHRyYW5zbGF0ZSB8IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGU6ICdodG1sJyA6IHRydWUgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJJdGVtQ2xpY2soJGV2ZW50LCBmaWVsZENvbmZpZylcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNvbnN0SHRtbE5nU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbnN0SHRtbE5nQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtKCkgfCBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlOiBmaWVsZENvbmZpZy5maWVsZCA6IHVuZGVmaW5lZCA6IHRydWUgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBmaWVsZENvbmZpZy5wYXJzZVZhbHVlIDogaXRlbSgpIHwgYXN5bmMgfCB0cmFuc2xhdGUgfCBMaWJzVWlQaXBlc1NlY3VyaXR5VHJ1c3RQaXBlOiAnaHRtbCcgOiB0cnVlIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVySXRlbUNsaWNrKCRldmVudCwgZmllbGRDb25maWcpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAaWYgKGZpZWxkQ29uZmlnLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCByZWxhdGl2ZSB7eyBmaWVsZENvbmZpZy5yb3dzVGVtcGxhdGVDc3NXcmFwcGVyIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dSZWYuY2xpZW50SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAjcm93UmVmXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCBhYnNvbHV0ZSAge3sgZmllbGRDb25maWcucm93c1RlbXBsYXRlQ3NzV3JhcHBlciB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFibGUtdGVtcGxhdGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ3NdPVwiZmllbGRDb25maWcucm93c1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0oKSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkQ29uZmlnLmZpZWxkIDogdW5kZWZpbmVkIDogdHJ1ZSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGZpZWxkQ29uZmlnLmdldENvbXBvbmVudE91dGxldCA6IGl0ZW0oKSB8IGFzeW5jO1xuICAgICAgICAgICAgICAgICAgICAgIGlucHV0czogdW5kZWZpbmVkIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogZmllbGRDb25maWcuZ2V0RGF0YUNvbXBvbmVudE91dGxldCA6IGl0ZW0oKSA6IGZpZWxkQ29uZmlnLmZpZWxkIDogeyB2YWx1ZUlzRW1wdHk6IHsgaXRlbTogaXRlbSgpIH0gfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgIFwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxufVxuIl19
|