@libs-ui/components-tabs 0.2.356-25 → 0.2.356-27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/interfaces/tab.interface.mjs +1 -1
- package/esm2022/item/item.component.mjs +25 -3
- package/esm2022/tabs.component.mjs +184 -7
- package/fesm2022/libs-ui-components-tabs.mjs +207 -8
- package/fesm2022/libs-ui-components-tabs.mjs.map +1 -1
- package/interfaces/tab.interface.d.ts +1 -0
- package/item/item.component.d.ts +8 -3
- package/package.json +10 -10
- package/tabs.component.d.ts +33 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJzL3NyYy9pbnRlcmZhY2VzL3RhYi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUWVBFX0JBREdFX01PREUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJhZGdlJztcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJUG9wb3Zlck92ZXJsYXkgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgVFlQRV9GVU5DVElPTiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJzIHtcbiAgaGFzSW1hZ2U/OiBib29sZWFuO1xuICBoYXNDb3VudD86IGJvb2xlYW47XG4gIGFsbG93UmVtb3ZlPzogYm9vbGVhbjtcbiAgY29uZmlnQnV0dG9uUmVtb3ZlPzogSUJ1dHRvbjtcbiAgaGFzU3RlcD86IGJvb2xlYW47XG4gIHN0ZXBDb21wbGV0ZWQ/OiBudW1iZXI7XG4gIHN0ZXBIYXNCYWNrR3JvdW5kPzogYm9vbGVhbjtcbiAgaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcD86IGJvb2xlYW47XG4gIGlnbm9yZVNob3dMaW5lQm90dG9tSW5UYWI/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVIZWFkZXI/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZUhlYWRlckNlbnRlcj86IHN0cmluZztcbiAgY2xhc3NJbmNsdWRlSGVhZGVyUmlnaHQ/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZUl0ZW0/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZUFjdGl2ZUl0ZW0/OiBzdHJpbmc7XG4gIG1heFdpZHRoVGV4dExhYmVsSXRlbT86IG51bWJlcjtcbiAgYWN0aW9uUmlnaHRDb25maWc/OiBXcml0YWJsZVNpZ25hbDx7XG4gICAgZ2V0TGlzdFZpZXdDb25maWc6IFRZUEVfRlVOQ1RJT048V3JpdGFibGVTaWduYWw8SUxpc3RDb25maWdJdGVtPj47XG4gICAgY29uZmlnPzogV3JpdGFibGVTaWduYWw8SVBvcG92ZXJPdmVybGF5PjtcbiAgICBvbmx5U2hvd1doZW5Ib3Zlckl0ZW1BY3RpdmU/OiBib29sZWFuO1xuICAgIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgICBjdXN0b21WaWV3PzogKCkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICB9PjtcbiAgdmlld01vcmVJZ25vcmVNYXJnaW5MZWZ0PzogYm9vbGVhbjtcbiAgaXRlbXM6IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElUYWJzSXRlbT4+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFic0l0ZW0ge1xuICBrZXk/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgZGlzYWJsZT86IGJvb2xlYW47XG4gIGNyZWF0ZWRfYnlfc3lzdGVtPzogYm9vbGVhbjtcbiAgY3JlYXRlZF9ieT86IHN0cmluZztcbiAgaXNfZGVmYXVsdD86IGJvb2xlYW47XG4gIGlzX3Bpbj86IGJvb2xlYW47XG4gIG9yZGVyPzogbnVtYmVyO1xuICBsaW5rSW1hZ2U/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJzL3NyYy9pbnRlcmZhY2VzL3RhYi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUWVBFX0JBREdFX01PREUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJhZGdlJztcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJUG9wb3Zlck92ZXJsYXkgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgVFlQRV9GVU5DVElPTiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJzIHtcbiAgaGFzSW1hZ2U/OiBib29sZWFuO1xuICBoYXNDb3VudD86IGJvb2xlYW47XG4gIGFsbG93UmVtb3ZlPzogYm9vbGVhbjtcbiAgY29uZmlnQnV0dG9uUmVtb3ZlPzogSUJ1dHRvbjtcbiAgaGFzU3RlcD86IGJvb2xlYW47XG4gIHN0ZXBDb21wbGV0ZWQ/OiBudW1iZXI7XG4gIHN0ZXBIYXNCYWNrR3JvdW5kPzogYm9vbGVhbjtcbiAgaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcD86IGJvb2xlYW47XG4gIGlnbm9yZVNob3dMaW5lQm90dG9tSW5UYWI/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVIZWFkZXI/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZUhlYWRlckNlbnRlcj86IHN0cmluZztcbiAgY2xhc3NJbmNsdWRlSGVhZGVyUmlnaHQ/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZUl0ZW0/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZUFjdGl2ZUl0ZW0/OiBzdHJpbmc7XG4gIG1heFdpZHRoVGV4dExhYmVsSXRlbT86IG51bWJlcjtcbiAgYWN0aW9uUmlnaHRDb25maWc/OiBXcml0YWJsZVNpZ25hbDx7XG4gICAgZ2V0TGlzdFZpZXdDb25maWc6IFRZUEVfRlVOQ1RJT048V3JpdGFibGVTaWduYWw8SUxpc3RDb25maWdJdGVtPj47XG4gICAgY29uZmlnPzogV3JpdGFibGVTaWduYWw8SVBvcG92ZXJPdmVybGF5PjtcbiAgICBvbmx5U2hvd1doZW5Ib3Zlckl0ZW1BY3RpdmU/OiBib29sZWFuO1xuICAgIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgICBjdXN0b21WaWV3PzogKCkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICB9PjtcbiAgdmlld01vcmVJZ25vcmVNYXJnaW5MZWZ0PzogYm9vbGVhbjtcbiAgaXRlbXM6IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElUYWJzSXRlbT4+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFic0l0ZW0ge1xuICBrZXk/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgZGlzYWJsZT86IGJvb2xlYW47XG4gIGNyZWF0ZWRfYnlfc3lzdGVtPzogYm9vbGVhbjtcbiAgY3JlYXRlZF9ieT86IHN0cmluZztcbiAgaXNfZGVmYXVsdD86IGJvb2xlYW47XG4gIGlzX3Bpbj86IGJvb2xlYW47XG4gIG9yZGVyPzogbnVtYmVyO1xuICBsaW5rSW1hZ2U/OiBzdHJpbmc7XG4gIGxpbmtJbWFnZUVycm9yPzogc3RyaW5nO1xuICBjbGFzc0ltYWdlSW5jbHVkZT86IHN0cmluZztcbiAgcG9wb3ZlckltYWdlPzogSVBvcG92ZXJPdmVybGF5O1xuICBpY29uTGVmdD86IHN0cmluZztcbiAgcG9wb3Zlckljb25MZWZ0PzogSVBvcG92ZXJPdmVybGF5O1xuICBsYWJlbD86IHN0cmluZztcbiAgY2xhc3NMYWJlbD86IHN0cmluZztcbiAgcG9wb3Zlcj86IElQb3BvdmVyT3ZlcmxheTtcbiAgaWNvblJpZ2h0QmVoaW5kQmFkZ2U/OiBib29sZWFuO1xuICBpY29uUmlnaHQ/OiBzdHJpbmc7XG4gIHBvcG92ZXJJY29uUmlnaHQ/OiBJUG9wb3Zlck92ZXJsYXk7XG4gIGNvdW50PzogbnVtYmVyO1xuICBtb2RlQ291bnQ/OiBUWVBFX0JBREdFX01PREU7XG4gIG1heENvdW50PzogbnVtYmVyO1xuICBjbGFzc0NpcmNsZT86IHN0cmluZztcbiAgc3BlY2lmaWNXaWR0aD86IG51bWJlcjtcbiAgc3BlY2lmaWNEaXNwbGF5PzogYm9vbGVhbjtcbiAgY2xhc3NTdGVwPzogc3RyaW5nO1xuICBjb25maWdCdXR0b25SaWdodD86IElCdXR0b247XG4gIGNvbmZpZ0J1dHRvbkxlZnQ/OiBJQnV0dG9uO1xuICBoYXNSZWREb3Q/OiBib29sZWFuO1xuICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgW3BhcmFtOiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYkNzc0NvbmZpZyB7XG4gIGZpcnN0OiBzdHJpbmc7XG4gIG90aGVyOiBzdHJpbmc7XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaGVhZGVyQ2VudGVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBUWVBFX1RBQl9NT0RFID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAnc3BhY2UtYmV0d2VlbicgfCAnY2VudGVyLWhhcy1saW5lJztcblxuZXhwb3J0IGludGVyZmFjZSBJVGFic0Z1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgYWRkVGFic0l0ZW06IChpdGVtOiBXcml0YWJsZVNpZ25hbDxJVGFic0l0ZW0+LCBzZWxlY3RlZD86IGJvb2xlYW4sIGFkZEZpcnN0PzogYm9vbGVhbiwgaW5kZXhBZGQ/OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XG4gIGNhbGN1bGF0b3JUYWJzSXRlbXNEaXNwbGF5OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzZWxlY3RlZFRhYnNJdGVtOiAoa2V5OiBzdHJpbmcsIHJlc2V0RGlzYWJsZT86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYnNJdGVtRXZlbnQge1xuICBrZXk6IHN0cmluZztcbiAgaXRlbTogSVRhYnNJdGVtO1xufVxuIl19
|
|
@@ -15,6 +15,7 @@ export class LibsUiComponentsTabsItemComponent {
|
|
|
15
15
|
actionShowing = signal(false);
|
|
16
16
|
mutationObserver = signal(undefined);
|
|
17
17
|
mutationObserverSubject = new Subject();
|
|
18
|
+
resizeObserverV2;
|
|
18
19
|
onDestroy = new Subject();
|
|
19
20
|
popoverFunctionControlEvent = signal(undefined);
|
|
20
21
|
// #region INPUT
|
|
@@ -32,6 +33,8 @@ export class LibsUiComponentsTabsItemComponent {
|
|
|
32
33
|
disableLabel = input();
|
|
33
34
|
zIndex = input();
|
|
34
35
|
changeViewTab = input.required();
|
|
36
|
+
/** V2 mode — dùng ResizeObserver thay vì MutationObserver. Mặc định false để giữ behavior cũ. */
|
|
37
|
+
useCalculatorV2 = input(false);
|
|
35
38
|
// #region OUTPUT
|
|
36
39
|
outAction = output();
|
|
37
40
|
/* INJECT*/
|
|
@@ -39,6 +42,10 @@ export class LibsUiComponentsTabsItemComponent {
|
|
|
39
42
|
translateService = inject(TranslateService);
|
|
40
43
|
constructor() {
|
|
41
44
|
effect(() => {
|
|
45
|
+
if (this.useCalculatorV2()) {
|
|
46
|
+
// V2 — ResizeObserver được setup ở ngAfterViewInit, effect không cần làm gì.
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
42
49
|
if (this.mode() !== 'left' || this.ignoreCalculatorTab()) {
|
|
43
50
|
return;
|
|
44
51
|
}
|
|
@@ -58,7 +65,20 @@ export class LibsUiComponentsTabsItemComponent {
|
|
|
58
65
|
this.item.update((item) => ({ ...item, key: uuid() }));
|
|
59
66
|
}
|
|
60
67
|
}
|
|
68
|
+
ngAfterViewInit() {
|
|
69
|
+
if (!this.useCalculatorV2() || this.ignoreCalculatorTab() || this.mode() !== 'left') {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.setupResizeObserverV2();
|
|
73
|
+
}
|
|
61
74
|
/* FUNCTIONS */
|
|
75
|
+
setupResizeObserverV2() {
|
|
76
|
+
if (this.resizeObserverV2 || typeof ResizeObserver === 'undefined') {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this.resizeObserverV2 = new ResizeObserver(() => this.updateSpecificWidth());
|
|
80
|
+
this.resizeObserverV2.observe(this.element.nativeElement);
|
|
81
|
+
}
|
|
62
82
|
updateSpecificWidth() {
|
|
63
83
|
const preSpecificWidth = this.item().specificWidth;
|
|
64
84
|
const width = this.element.nativeElement.offsetWidth;
|
|
@@ -100,14 +120,16 @@ export class LibsUiComponentsTabsItemComponent {
|
|
|
100
120
|
}
|
|
101
121
|
ngOnDestroy() {
|
|
102
122
|
this.mutationObserver()?.disconnect();
|
|
123
|
+
this.resizeObserverV2?.disconnect();
|
|
124
|
+
this.resizeObserverV2 = undefined;
|
|
103
125
|
this.onDestroy.next();
|
|
104
126
|
this.onDestroy.complete();
|
|
105
127
|
}
|
|
106
128
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsTabsItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
107
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsTabsItemComponent, isStandalone: true, selector: "libs_ui-components-tabs-item", inputs: { ignoreCalculatorTab: { classPropertyName: "ignoreCalculatorTab", publicName: "ignoreCalculatorTab", isSignal: true, isRequired: true, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: true, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: true, transformFunction: null }, cssDefault: { classPropertyName: "cssDefault", publicName: "cssDefault", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, changeViewTab: { classPropertyName: "changeViewTab", publicName: "changeViewTab", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { item: "itemChange", outAction: "outAction" }, ngImport: i0, template: "@if (item(); as item) {\n <div\n #itemEl\n class=\"libs-ui-tab-header-center-item {{ cssDefault() }} {{ item.classInclude || '' }} {{ item[fieldKey()] === keySelected() && tabs().classIncludeActiveItem ? tabs().classIncludeActiveItem : '' }}\"\n [attr.key]=\"item[fieldKey()]\"\n [attr.invalid]=\"item.invalid && !tabs().ignoreShowLineBottomInTab\"\n [attr.active]=\"item[fieldKey()] === keySelected() && !tabs().ignoreShowLineBottomInTab\"\n [attr.disable]=\"disable()\"\n [class.!cursor-pointer]=\"!disable()\"\n [class.!cursor-default]=\"disable()\"\n [class.libs-ui-tab-header-center-item-hover]=\"!tabs().ignoreShowLineBottomInTab\"\n [class.libs-ui-tab-header-center-item-action-show]=\"actionShowing()\">\n @if (tabs().hasImage) {\n <img\n class=\"libs-ui-tab-header-center-item-image {{ item.classImageInclude || '' }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverImage\"\n [config]=\"item.popoverImage\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [src]=\"item.linkImage\"\n [attr.key]=\"item[fieldKey()]\"\n (error)=\"handlerImgError($event)\" />\n }\n @if (item.iconLeft) {\n <i\n class=\"libs-ui-tab-header-center-item-icon libs-ui-mr-8px {{ item.iconLeft }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconLeft\"\n [config]=\"item.popoverIconLeft\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.is_pin) {\n <i\n class=\"libs-ui-tab-header-center-item-icon mr-[8px] {{ item[fieldKey()] === keySelected() ? 'libs-ui-icon-pin-solid' : 'libs-ui-icon-pin-outline' }}\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (tabs().hasStep) {\n @if (tabs().stepHasBackGround) {\n <div\n class=\"libs-ui-tab-header-center-item-step !border-none libs-ui-font-h6m\"\n [class.!text-[#ffffff]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [class.bg-[#f8f9fa]]=\"step() > (tabs().stepCompleted || 0) && (tabs().ignoreSelectedBackgroundStep || disable()) && !item.invalid\"\n [class.bg-[#00bc62]]=\"step() <= (tabs().stepCompleted || -1) && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-light-2)]]=\"((item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep) || (step() > (tabs().stepCompleted || 0) && !tabs().ignoreSelectedBackgroundStep)) && !item.invalid\"\n [class.!bg-[#fdeaec]]=\"item.invalid\">\n @if (step() <= (tabs().stepCompleted || -1)) {\n <i class=\"libs-ui-icon-check text-[#ffffff]\"></i>\n } @else {\n <span [class.text-[#cdd0d6]]=\"disable()\">{{ step() }}</span>\n }\n </div>\n } @else {\n <div\n class=\"libs-ui-tab-header-center-item-step\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n <span>{{ step() }}</span>\n </div>\n }\n }\n @if (item.configButtonLeft) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonLeft.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonLeft.classInclude || ''\"\n [classIconLeft]=\"item.configButtonLeft.classIconLeft || ''\"\n [classLabel]=\"item.configButtonLeft.classLabel || ''\"\n [classIconRight]=\"item.configButtonLeft.classIconRight || ''\"\n [label]=\"item.configButtonLeft.label || ''\"\n [popover]=\"item.configButtonLeft.popover || {}\"\n (outClick)=\"handlerClickButton($event, 'configButtonLeft')\" />\n }\n @if (item[fieldLabel()]) {\n <div\n class=\"relative flex\"\n [style.maxWidth.px]=\"tabs().maxWidthTextLabelItem || 160\">\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{ position: { mode: step() === 1 ? 'start' : 'center', distance: 0 }, zIndex: zIndex() }\"\n [attr.size]=\"size()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [ignoreStopPropagationEvent]=\"true\"\n [classInclude]=\"'w-full libs-ui-tab-header-center-item-label ' + (item.classLabel || 'libs-ui-font-h6m') + (disableLabel() && disable() ? ' libs-ui-disable' : '') + (tabs().stepHasBackGround && disable() ? ' text-[#cdd0d6]' : '')\"\n [innerHTML]=\"labelComputed()\"></span>\n @if (item.hasRedDot) {\n <div class=\"absolute right-[-6px] top-[-2px] w-[6px] h-[6px] bg-[#ee2d41] rounded-[6px]\"></div>\n }\n </div>\n }\n @if (item.popover) {\n <i\n class=\"libs-ui-tab-header-center-item-icon ml-[8px] libs-ui-icon-tooltip-outline\"\n LibsUiComponentsPopoverDirective\n [config]=\"item.popover\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"></i>\n }\n @if (item.iconRight) {\n <i\n class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.count !== undefined) {\n <libs_ui-components-badge\n [mode]=\"item.modeCount || 'x+'\"\n [count]=\"item.count\"\n [maxCount]=\"item.maxCount || 99\"\n [classCircle]=\"(item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')\"\n [active]=\"item[fieldKey()] === keySelected()\"\n [class.libs-ui-disable]=\"disable()\" />\n }\n @if (item.configButtonRight) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonRight.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonRight.classInclude || ''\"\n [classIconLeft]=\"item.configButtonRight.classIconLeft || ''\"\n [classLabel]=\"item.configButtonRight.classLabel || ''\"\n [classIconRight]=\"item.configButtonRight.classIconRight || ''\"\n [popover]=\"item.configButtonRight.popover || {}\"\n [label]=\"item.configButtonRight.label || ''\"\n (outClick)=\"handlerClickButton($event, 'configButtonRight')\" />\n }\n @if (tabs().actionRightConfig?.(); as right) {\n <libs_ui-components-popover\n [class]=\"right.classInclude || 'ml-[8px]'\"\n [class.libs-ui-tab-header-center-item-action]=\"right.onlyShowWhenHoverItemActive\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [mode]=\"'click-toggle'\"\n [ignoreStopPropagationEvent]=\"true\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [elementRefCustom]=\"right.onlyShowWhenHoverItemActive ? undefined : itemEl\"\n [config]=\"{\n zIndex: right.config?.()?.zIndex || 1000,\n maxHeight: right.config?.()?.maxHeight || 287,\n maxWidth: right.config?.()?.maxWidth || 2048,\n width: right.config?.()?.width || 220,\n direction: right.config?.()?.direction || 'bottom',\n template: right.config?.()?.template || actionEl,\n classInclude: (right.config?.()?.classInclude || '') + ' !rounded-[4px] overflow-hidden',\n whiteTheme: true,\n ignoreArrow: true,\n position: right.config?.()?.position || { mode: 'start', distance: 0 },\n }\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n @if (right.customView) {\n <div [innerHtml]=\"item[fieldKey()] | LibsUiPipesCallFunctionInTemplatePipe: right.customView : item\"></div>\n } @else {\n <i\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.invalid]=\"item.invalid\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class]=\"right.onlyShowWhenHoverItemActive ? 'libs-ui-icon-more-vertical rotate-90 libs-ui-tab-header-center-item-icon' : 'libs-ui-icon-chevron-right rotate-90 libs-ui-tab-header-center-item-icon'\"></i>\n }\n </libs_ui-components-popover>\n <ng-template #actionEl>\n @if (0 | LibsUiPipesCallFunctionInTemplatePipe: right.getListViewConfig : item : item[fieldKey()] : { valueIs0: 0 } | async; as config) {\n <libs_ui-components-list\n [config]=\"config()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n }\n </ng-template>\n }\n @if (tabs().allowRemove && tabs().items().length > 1) {\n <libs_ui-components-buttons-button\n [type]=\"tabs().configButtonRemove?.type || 'button-link-custom'\"\n [iconOnlyType]=\"tabs().configButtonRemove?.iconOnlyType || true\"\n [classInclude]=\"tabs().configButtonRemove?.classInclude || 'ml-[8px] !p-0'\"\n [classIconLeft]=\"tabs().configButtonRemove?.classIconLeft || 'libs-ui-icon-close'\"\n [classLabel]=\"tabs().configButtonRemove?.classLabel || ''\"\n [classIconRight]=\"tabs().configButtonRemove?.classIconRight || ''\"\n [popover]=\"tabs().configButtonRemove?.popover || { config: { content: 'i18n_delete' } }\"\n [label]=\"tabs().configButtonRemove?.label || ''\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#6a7383',\n text_hover: '#f15767',\n text_active: '#f15767',\n text_disable: '#cdd0d6',\n },\n rootColor: '#f15767',\n }\"\n (outClick)=\"handlerClickButton($event, 'remove')\" />\n }\n </div>\n}\n", styles: [".libs-ui-tab-header-center-item{position:relative;display:flex;align-items:center;flex-wrap:nowrap;padding:12px 0;height:100%;width:fit-content}.libs-ui-tab-header-center-item[active=true]:after{content:\"\";width:100%;height:2px;background-color:var(--libs-ui-color-default, #226ff5);position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item[invalid=true]:after{background-color:#f15767}.libs-ui-tab-header-center-item-image{width:20px;height:20px;border-radius:50%;margin-right:8px}.libs-ui-tab-header-center-item-icon{display:flex}.libs-ui-tab-header-center-item-icon:before{font-size:12px}.libs-ui-tab-header-center-item-label{font-family:var(--libs-ui-font-family-name, \"Arial\");color:#6a7383;font-size:11px}.libs-ui-tab-header-center-item-label[size=langer]{font-size:13px}.libs-ui-tab-header-center-item-label[completed=true]{color:#6a7383}.libs-ui-tab-header-center-item-label[active=true]{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item-action{display:none}.libs-ui-tab-header-center-item-step{border-radius:50%;border:1px solid #9ca2ad;color:#9ca2ad;min-width:24px;min-height:24px;display:flex;align-items:center;justify-content:center;margin-right:8px}.libs-ui-tab-header-center-item-step[completed=true]{color:#6a7383;border:1px solid #6a7383}.libs-ui-tab-header-center-item-step[active=true]{color:var(--libs-ui-color-default, #226ff5);border:1px solid var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][completed=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][completed=true]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][active=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][active=true]:before{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][invalid=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][invalid=true]:before{color:#f15767}.libs-ui-tab-header-center-item-hover:hover[active=false][disable=false]:after{content:\"\";width:100%;height:2px;background-color:#6a7383;position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item-hover:hover .libs-ui-tab-header-center-item-action[active=true],.libs-ui-tab-header-center-item-action-show .libs-ui-tab-header-center-item-action{display:flex}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { 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: 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: LibsUiComponentsBadgeComponent, selector: "libs_ui-components-badge", inputs: ["popoverConfig", "active", "count", "mode", "maxCount", "ignoreMarginDefault", "classCircle", "ignoreStopPropagationEvent"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "paddingLeftItem", "config", "autoSelectedFirstItemCallOutsideBefore", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "templateRefNotSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outKeySearch", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
129
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsTabsItemComponent, isStandalone: true, selector: "libs_ui-components-tabs-item", inputs: { ignoreCalculatorTab: { classPropertyName: "ignoreCalculatorTab", publicName: "ignoreCalculatorTab", isSignal: true, isRequired: true, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: true, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: true, transformFunction: null }, cssDefault: { classPropertyName: "cssDefault", publicName: "cssDefault", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, changeViewTab: { classPropertyName: "changeViewTab", publicName: "changeViewTab", isSignal: true, isRequired: true, transformFunction: null }, useCalculatorV2: { classPropertyName: "useCalculatorV2", publicName: "useCalculatorV2", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { item: "itemChange", outAction: "outAction" }, ngImport: i0, template: "@if (item(); as item) {\n <div\n #itemEl\n class=\"libs-ui-tab-header-center-item {{ cssDefault() }} {{ item.classInclude || '' }} {{ item[fieldKey()] === keySelected() && tabs().classIncludeActiveItem ? tabs().classIncludeActiveItem : '' }}\"\n [attr.key]=\"item[fieldKey()]\"\n [attr.invalid]=\"item.invalid && !tabs().ignoreShowLineBottomInTab\"\n [attr.active]=\"item[fieldKey()] === keySelected() && !tabs().ignoreShowLineBottomInTab\"\n [attr.disable]=\"disable()\"\n [class.!cursor-pointer]=\"!disable()\"\n [class.!cursor-default]=\"disable()\"\n [class.libs-ui-tab-header-center-item-hover]=\"!tabs().ignoreShowLineBottomInTab\"\n [class.libs-ui-tab-header-center-item-action-show]=\"actionShowing()\">\n @if (tabs().hasImage) {\n <img\n class=\"libs-ui-tab-header-center-item-image {{ item.classImageInclude || '' }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverImage\"\n [config]=\"item.popoverImage\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [src]=\"item.linkImage\"\n [attr.key]=\"item[fieldKey()]\"\n (error)=\"handlerImgError($event)\" />\n }\n @if (item.iconLeft) {\n <i\n class=\"libs-ui-tab-header-center-item-icon libs-ui-mr-8px {{ item.iconLeft }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconLeft\"\n [config]=\"item.popoverIconLeft\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.is_pin) {\n <i\n class=\"libs-ui-tab-header-center-item-icon mr-[8px] {{ item[fieldKey()] === keySelected() ? 'libs-ui-icon-pin-solid' : 'libs-ui-icon-pin-outline' }}\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (tabs().hasStep) {\n @if (tabs().stepHasBackGround) {\n <div\n class=\"libs-ui-tab-header-center-item-step !border-none libs-ui-font-h6m\"\n [class.!text-[#ffffff]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [class.bg-[#f8f9fa]]=\"step() > (tabs().stepCompleted || 0) && (tabs().ignoreSelectedBackgroundStep || disable()) && !item.invalid\"\n [class.bg-[#00bc62]]=\"step() <= (tabs().stepCompleted || -1) && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-light-2)]]=\"((item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep) || (step() > (tabs().stepCompleted || 0) && !tabs().ignoreSelectedBackgroundStep)) && !item.invalid\"\n [class.!bg-[#fdeaec]]=\"item.invalid\">\n @if (step() <= (tabs().stepCompleted || -1)) {\n <i class=\"libs-ui-icon-check text-[#ffffff]\"></i>\n } @else {\n <span [class.text-[#cdd0d6]]=\"disable()\">{{ step() }}</span>\n }\n </div>\n } @else {\n <div\n class=\"libs-ui-tab-header-center-item-step\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n <span>{{ step() }}</span>\n </div>\n }\n }\n @if (item.configButtonLeft) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonLeft.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonLeft.classInclude || ''\"\n [classIconLeft]=\"item.configButtonLeft.classIconLeft || ''\"\n [classLabel]=\"item.configButtonLeft.classLabel || ''\"\n [classIconRight]=\"item.configButtonLeft.classIconRight || ''\"\n [label]=\"item.configButtonLeft.label || ''\"\n [popover]=\"item.configButtonLeft.popover || {}\"\n (outClick)=\"handlerClickButton($event, 'configButtonLeft')\" />\n }\n @if (item[fieldLabel()]) {\n <div\n class=\"relative flex\"\n [style.maxWidth.px]=\"tabs().maxWidthTextLabelItem || 160\">\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{ position: { mode: step() === 1 ? 'start' : 'center', distance: 0 }, zIndex: zIndex() }\"\n [attr.size]=\"size()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [ignoreStopPropagationEvent]=\"true\"\n [classInclude]=\"'w-full libs-ui-tab-header-center-item-label ' + (item.classLabel || 'libs-ui-font-h6m') + (disableLabel() && disable() ? ' libs-ui-disable' : '') + (tabs().stepHasBackGround && disable() ? ' text-[#cdd0d6]' : '')\"\n [innerHTML]=\"labelComputed()\"></span>\n @if (item.hasRedDot) {\n <div class=\"absolute right-[-6px] top-[-2px] w-[6px] h-[6px] bg-[#ee2d41] rounded-[6px]\"></div>\n }\n </div>\n }\n @if (item.popover) {\n <i\n class=\"libs-ui-tab-header-center-item-icon ml-[8px] libs-ui-icon-tooltip-outline\"\n LibsUiComponentsPopoverDirective\n [config]=\"item.popover\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"></i>\n }\n @if (item.iconRight && !item.iconRightBehindBadge) {\n <i\n class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.count !== undefined) {\n <libs_ui-components-badge\n [mode]=\"item.modeCount || 'x+'\"\n [count]=\"item.count\"\n [maxCount]=\"item.maxCount || 99\"\n [classCircle]=\"(item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')\"\n [active]=\"item[fieldKey()] === keySelected()\"\n [class.libs-ui-disable]=\"disable()\" />\n }\n @if (item.iconRight && item.iconRightBehindBadge) {\n <i\n class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.configButtonRight) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonRight.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonRight.classInclude || ''\"\n [classIconLeft]=\"item.configButtonRight.classIconLeft || ''\"\n [classLabel]=\"item.configButtonRight.classLabel || ''\"\n [classIconRight]=\"item.configButtonRight.classIconRight || ''\"\n [popover]=\"item.configButtonRight.popover || {}\"\n [label]=\"item.configButtonRight.label || ''\"\n (outClick)=\"handlerClickButton($event, 'configButtonRight')\" />\n }\n @if (tabs().actionRightConfig?.(); as right) {\n <libs_ui-components-popover\n [class]=\"right.classInclude || 'ml-[8px]'\"\n [class.libs-ui-tab-header-center-item-action]=\"right.onlyShowWhenHoverItemActive\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [mode]=\"'click-toggle'\"\n [ignoreStopPropagationEvent]=\"true\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [elementRefCustom]=\"right.onlyShowWhenHoverItemActive ? undefined : itemEl\"\n [config]=\"{\n zIndex: right.config?.()?.zIndex || 1000,\n maxHeight: right.config?.()?.maxHeight || 287,\n maxWidth: right.config?.()?.maxWidth || 2048,\n width: right.config?.()?.width || 220,\n direction: right.config?.()?.direction || 'bottom',\n template: right.config?.()?.template || actionEl,\n classInclude: (right.config?.()?.classInclude || '') + ' !rounded-[4px] overflow-hidden',\n whiteTheme: true,\n ignoreArrow: true,\n position: right.config?.()?.position || { mode: 'start', distance: 0 },\n }\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n @if (right.customView) {\n <div [innerHtml]=\"item[fieldKey()] | LibsUiPipesCallFunctionInTemplatePipe: right.customView : item\"></div>\n } @else {\n <i\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.invalid]=\"item.invalid\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class]=\"right.onlyShowWhenHoverItemActive ? 'libs-ui-icon-more-vertical rotate-90 libs-ui-tab-header-center-item-icon' : 'libs-ui-icon-chevron-right rotate-90 libs-ui-tab-header-center-item-icon'\"></i>\n }\n </libs_ui-components-popover>\n <ng-template #actionEl>\n @if (0 | LibsUiPipesCallFunctionInTemplatePipe: right.getListViewConfig : item : item[fieldKey()] : { valueIs0: 0 } | async; as config) {\n <libs_ui-components-list\n [config]=\"config()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n }\n </ng-template>\n }\n @if (tabs().allowRemove && tabs().items().length > 1) {\n <libs_ui-components-buttons-button\n [type]=\"tabs().configButtonRemove?.type || 'button-link-custom'\"\n [iconOnlyType]=\"tabs().configButtonRemove?.iconOnlyType || true\"\n [classInclude]=\"tabs().configButtonRemove?.classInclude || 'ml-[8px] !p-0'\"\n [classIconLeft]=\"tabs().configButtonRemove?.classIconLeft || 'libs-ui-icon-close'\"\n [classLabel]=\"tabs().configButtonRemove?.classLabel || ''\"\n [classIconRight]=\"tabs().configButtonRemove?.classIconRight || ''\"\n [popover]=\"tabs().configButtonRemove?.popover || { config: { content: 'i18n_delete' } }\"\n [label]=\"tabs().configButtonRemove?.label || ''\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#6a7383',\n text_hover: '#f15767',\n text_active: '#f15767',\n text_disable: '#cdd0d6',\n },\n rootColor: '#f15767',\n }\"\n (outClick)=\"handlerClickButton($event, 'remove')\" />\n }\n </div>\n}\n", styles: [".libs-ui-tab-header-center-item{position:relative;display:flex;align-items:center;flex-wrap:nowrap;padding:12px 0;height:100%;width:fit-content}.libs-ui-tab-header-center-item[active=true]:after{content:\"\";width:100%;height:2px;background-color:var(--libs-ui-color-default, #226ff5);position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item[invalid=true]:after{background-color:#f15767}.libs-ui-tab-header-center-item-image{width:20px;height:20px;border-radius:50%;margin-right:8px}.libs-ui-tab-header-center-item-icon{display:flex}.libs-ui-tab-header-center-item-icon:before{font-size:12px}.libs-ui-tab-header-center-item-label{font-family:var(--libs-ui-font-family-name, \"Arial\");color:#6a7383;font-size:11px}.libs-ui-tab-header-center-item-label[size=langer]{font-size:13px}.libs-ui-tab-header-center-item-label[completed=true]{color:#6a7383}.libs-ui-tab-header-center-item-label[active=true]{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item-action{display:none}.libs-ui-tab-header-center-item-step{border-radius:50%;border:1px solid #9ca2ad;color:#9ca2ad;min-width:24px;min-height:24px;display:flex;align-items:center;justify-content:center;margin-right:8px}.libs-ui-tab-header-center-item-step[completed=true]{color:#6a7383;border:1px solid #6a7383}.libs-ui-tab-header-center-item-step[active=true]{color:var(--libs-ui-color-default, #226ff5);border:1px solid var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][completed=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][completed=true]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][active=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][active=true]:before{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][invalid=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][invalid=true]:before{color:#f15767}.libs-ui-tab-header-center-item-hover:hover[active=false][disable=false]:after{content:\"\";width:100%;height:2px;background-color:#6a7383;position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item-hover:hover .libs-ui-tab-header-center-item-action[active=true],.libs-ui-tab-header-center-item-action-show .libs-ui-tab-header-center-item-action{display:flex}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { 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: 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: LibsUiComponentsBadgeComponent, selector: "libs_ui-components-badge", inputs: ["popoverConfig", "active", "count", "mode", "maxCount", "ignoreMarginDefault", "classCircle", "ignoreStopPropagationEvent"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "paddingLeftItem", "config", "autoSelectedFirstItemCallOutsideBefore", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "templateRefNotSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outKeySearch", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
108
130
|
}
|
|
109
131
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsTabsItemComponent, decorators: [{
|
|
110
132
|
type: Component,
|
|
111
|
-
args: [{ selector: 'libs_ui-components-tabs-item', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsPopoverComponent, LibsUiComponentsBadgeComponent, LibsUiComponentsListComponent, LibsUiPipesCallFunctionInTemplatePipe], template: "@if (item(); as item) {\n <div\n #itemEl\n class=\"libs-ui-tab-header-center-item {{ cssDefault() }} {{ item.classInclude || '' }} {{ item[fieldKey()] === keySelected() && tabs().classIncludeActiveItem ? tabs().classIncludeActiveItem : '' }}\"\n [attr.key]=\"item[fieldKey()]\"\n [attr.invalid]=\"item.invalid && !tabs().ignoreShowLineBottomInTab\"\n [attr.active]=\"item[fieldKey()] === keySelected() && !tabs().ignoreShowLineBottomInTab\"\n [attr.disable]=\"disable()\"\n [class.!cursor-pointer]=\"!disable()\"\n [class.!cursor-default]=\"disable()\"\n [class.libs-ui-tab-header-center-item-hover]=\"!tabs().ignoreShowLineBottomInTab\"\n [class.libs-ui-tab-header-center-item-action-show]=\"actionShowing()\">\n @if (tabs().hasImage) {\n <img\n class=\"libs-ui-tab-header-center-item-image {{ item.classImageInclude || '' }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverImage\"\n [config]=\"item.popoverImage\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [src]=\"item.linkImage\"\n [attr.key]=\"item[fieldKey()]\"\n (error)=\"handlerImgError($event)\" />\n }\n @if (item.iconLeft) {\n <i\n class=\"libs-ui-tab-header-center-item-icon libs-ui-mr-8px {{ item.iconLeft }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconLeft\"\n [config]=\"item.popoverIconLeft\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.is_pin) {\n <i\n class=\"libs-ui-tab-header-center-item-icon mr-[8px] {{ item[fieldKey()] === keySelected() ? 'libs-ui-icon-pin-solid' : 'libs-ui-icon-pin-outline' }}\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (tabs().hasStep) {\n @if (tabs().stepHasBackGround) {\n <div\n class=\"libs-ui-tab-header-center-item-step !border-none libs-ui-font-h6m\"\n [class.!text-[#ffffff]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [class.bg-[#f8f9fa]]=\"step() > (tabs().stepCompleted || 0) && (tabs().ignoreSelectedBackgroundStep || disable()) && !item.invalid\"\n [class.bg-[#00bc62]]=\"step() <= (tabs().stepCompleted || -1) && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-light-2)]]=\"((item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep) || (step() > (tabs().stepCompleted || 0) && !tabs().ignoreSelectedBackgroundStep)) && !item.invalid\"\n [class.!bg-[#fdeaec]]=\"item.invalid\">\n @if (step() <= (tabs().stepCompleted || -1)) {\n <i class=\"libs-ui-icon-check text-[#ffffff]\"></i>\n } @else {\n <span [class.text-[#cdd0d6]]=\"disable()\">{{ step() }}</span>\n }\n </div>\n } @else {\n <div\n class=\"libs-ui-tab-header-center-item-step\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n <span>{{ step() }}</span>\n </div>\n }\n }\n @if (item.configButtonLeft) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonLeft.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonLeft.classInclude || ''\"\n [classIconLeft]=\"item.configButtonLeft.classIconLeft || ''\"\n [classLabel]=\"item.configButtonLeft.classLabel || ''\"\n [classIconRight]=\"item.configButtonLeft.classIconRight || ''\"\n [label]=\"item.configButtonLeft.label || ''\"\n [popover]=\"item.configButtonLeft.popover || {}\"\n (outClick)=\"handlerClickButton($event, 'configButtonLeft')\" />\n }\n @if (item[fieldLabel()]) {\n <div\n class=\"relative flex\"\n [style.maxWidth.px]=\"tabs().maxWidthTextLabelItem || 160\">\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{ position: { mode: step() === 1 ? 'start' : 'center', distance: 0 }, zIndex: zIndex() }\"\n [attr.size]=\"size()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [ignoreStopPropagationEvent]=\"true\"\n [classInclude]=\"'w-full libs-ui-tab-header-center-item-label ' + (item.classLabel || 'libs-ui-font-h6m') + (disableLabel() && disable() ? ' libs-ui-disable' : '') + (tabs().stepHasBackGround && disable() ? ' text-[#cdd0d6]' : '')\"\n [innerHTML]=\"labelComputed()\"></span>\n @if (item.hasRedDot) {\n <div class=\"absolute right-[-6px] top-[-2px] w-[6px] h-[6px] bg-[#ee2d41] rounded-[6px]\"></div>\n }\n </div>\n }\n @if (item.popover) {\n <i\n class=\"libs-ui-tab-header-center-item-icon ml-[8px] libs-ui-icon-tooltip-outline\"\n LibsUiComponentsPopoverDirective\n [config]=\"item.popover\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"></i>\n }\n @if (item.iconRight) {\n <i\n class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.count !== undefined) {\n <libs_ui-components-badge\n [mode]=\"item.modeCount || 'x+'\"\n [count]=\"item.count\"\n [maxCount]=\"item.maxCount || 99\"\n [classCircle]=\"(item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')\"\n [active]=\"item[fieldKey()] === keySelected()\"\n [class.libs-ui-disable]=\"disable()\" />\n }\n @if (item.configButtonRight) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonRight.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonRight.classInclude || ''\"\n [classIconLeft]=\"item.configButtonRight.classIconLeft || ''\"\n [classLabel]=\"item.configButtonRight.classLabel || ''\"\n [classIconRight]=\"item.configButtonRight.classIconRight || ''\"\n [popover]=\"item.configButtonRight.popover || {}\"\n [label]=\"item.configButtonRight.label || ''\"\n (outClick)=\"handlerClickButton($event, 'configButtonRight')\" />\n }\n @if (tabs().actionRightConfig?.(); as right) {\n <libs_ui-components-popover\n [class]=\"right.classInclude || 'ml-[8px]'\"\n [class.libs-ui-tab-header-center-item-action]=\"right.onlyShowWhenHoverItemActive\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [mode]=\"'click-toggle'\"\n [ignoreStopPropagationEvent]=\"true\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [elementRefCustom]=\"right.onlyShowWhenHoverItemActive ? undefined : itemEl\"\n [config]=\"{\n zIndex: right.config?.()?.zIndex || 1000,\n maxHeight: right.config?.()?.maxHeight || 287,\n maxWidth: right.config?.()?.maxWidth || 2048,\n width: right.config?.()?.width || 220,\n direction: right.config?.()?.direction || 'bottom',\n template: right.config?.()?.template || actionEl,\n classInclude: (right.config?.()?.classInclude || '') + ' !rounded-[4px] overflow-hidden',\n whiteTheme: true,\n ignoreArrow: true,\n position: right.config?.()?.position || { mode: 'start', distance: 0 },\n }\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n @if (right.customView) {\n <div [innerHtml]=\"item[fieldKey()] | LibsUiPipesCallFunctionInTemplatePipe: right.customView : item\"></div>\n } @else {\n <i\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.invalid]=\"item.invalid\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class]=\"right.onlyShowWhenHoverItemActive ? 'libs-ui-icon-more-vertical rotate-90 libs-ui-tab-header-center-item-icon' : 'libs-ui-icon-chevron-right rotate-90 libs-ui-tab-header-center-item-icon'\"></i>\n }\n </libs_ui-components-popover>\n <ng-template #actionEl>\n @if (0 | LibsUiPipesCallFunctionInTemplatePipe: right.getListViewConfig : item : item[fieldKey()] : { valueIs0: 0 } | async; as config) {\n <libs_ui-components-list\n [config]=\"config()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n }\n </ng-template>\n }\n @if (tabs().allowRemove && tabs().items().length > 1) {\n <libs_ui-components-buttons-button\n [type]=\"tabs().configButtonRemove?.type || 'button-link-custom'\"\n [iconOnlyType]=\"tabs().configButtonRemove?.iconOnlyType || true\"\n [classInclude]=\"tabs().configButtonRemove?.classInclude || 'ml-[8px] !p-0'\"\n [classIconLeft]=\"tabs().configButtonRemove?.classIconLeft || 'libs-ui-icon-close'\"\n [classLabel]=\"tabs().configButtonRemove?.classLabel || ''\"\n [classIconRight]=\"tabs().configButtonRemove?.classIconRight || ''\"\n [popover]=\"tabs().configButtonRemove?.popover || { config: { content: 'i18n_delete' } }\"\n [label]=\"tabs().configButtonRemove?.label || ''\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#6a7383',\n text_hover: '#f15767',\n text_active: '#f15767',\n text_disable: '#cdd0d6',\n },\n rootColor: '#f15767',\n }\"\n (outClick)=\"handlerClickButton($event, 'remove')\" />\n }\n </div>\n}\n", styles: [".libs-ui-tab-header-center-item{position:relative;display:flex;align-items:center;flex-wrap:nowrap;padding:12px 0;height:100%;width:fit-content}.libs-ui-tab-header-center-item[active=true]:after{content:\"\";width:100%;height:2px;background-color:var(--libs-ui-color-default, #226ff5);position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item[invalid=true]:after{background-color:#f15767}.libs-ui-tab-header-center-item-image{width:20px;height:20px;border-radius:50%;margin-right:8px}.libs-ui-tab-header-center-item-icon{display:flex}.libs-ui-tab-header-center-item-icon:before{font-size:12px}.libs-ui-tab-header-center-item-label{font-family:var(--libs-ui-font-family-name, \"Arial\");color:#6a7383;font-size:11px}.libs-ui-tab-header-center-item-label[size=langer]{font-size:13px}.libs-ui-tab-header-center-item-label[completed=true]{color:#6a7383}.libs-ui-tab-header-center-item-label[active=true]{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item-action{display:none}.libs-ui-tab-header-center-item-step{border-radius:50%;border:1px solid #9ca2ad;color:#9ca2ad;min-width:24px;min-height:24px;display:flex;align-items:center;justify-content:center;margin-right:8px}.libs-ui-tab-header-center-item-step[completed=true]{color:#6a7383;border:1px solid #6a7383}.libs-ui-tab-header-center-item-step[active=true]{color:var(--libs-ui-color-default, #226ff5);border:1px solid var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][completed=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][completed=true]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][active=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][active=true]:before{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][invalid=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][invalid=true]:before{color:#f15767}.libs-ui-tab-header-center-item-hover:hover[active=false][disable=false]:after{content:\"\";width:100%;height:2px;background-color:#6a7383;position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item-hover:hover .libs-ui-tab-header-center-item-action[active=true],.libs-ui-tab-header-center-item-action-show .libs-ui-tab-header-center-item-action{display:flex}\n"] }]
|
|
133
|
+
args: [{ selector: 'libs_ui-components-tabs-item', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsPopoverComponent, LibsUiComponentsBadgeComponent, LibsUiComponentsListComponent, LibsUiPipesCallFunctionInTemplatePipe], template: "@if (item(); as item) {\n <div\n #itemEl\n class=\"libs-ui-tab-header-center-item {{ cssDefault() }} {{ item.classInclude || '' }} {{ item[fieldKey()] === keySelected() && tabs().classIncludeActiveItem ? tabs().classIncludeActiveItem : '' }}\"\n [attr.key]=\"item[fieldKey()]\"\n [attr.invalid]=\"item.invalid && !tabs().ignoreShowLineBottomInTab\"\n [attr.active]=\"item[fieldKey()] === keySelected() && !tabs().ignoreShowLineBottomInTab\"\n [attr.disable]=\"disable()\"\n [class.!cursor-pointer]=\"!disable()\"\n [class.!cursor-default]=\"disable()\"\n [class.libs-ui-tab-header-center-item-hover]=\"!tabs().ignoreShowLineBottomInTab\"\n [class.libs-ui-tab-header-center-item-action-show]=\"actionShowing()\">\n @if (tabs().hasImage) {\n <img\n class=\"libs-ui-tab-header-center-item-image {{ item.classImageInclude || '' }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverImage\"\n [config]=\"item.popoverImage\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [src]=\"item.linkImage\"\n [attr.key]=\"item[fieldKey()]\"\n (error)=\"handlerImgError($event)\" />\n }\n @if (item.iconLeft) {\n <i\n class=\"libs-ui-tab-header-center-item-icon libs-ui-mr-8px {{ item.iconLeft }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconLeft\"\n [config]=\"item.popoverIconLeft\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.is_pin) {\n <i\n class=\"libs-ui-tab-header-center-item-icon mr-[8px] {{ item[fieldKey()] === keySelected() ? 'libs-ui-icon-pin-solid' : 'libs-ui-icon-pin-outline' }}\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (tabs().hasStep) {\n @if (tabs().stepHasBackGround) {\n <div\n class=\"libs-ui-tab-header-center-item-step !border-none libs-ui-font-h6m\"\n [class.!text-[#ffffff]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [class.bg-[#f8f9fa]]=\"step() > (tabs().stepCompleted || 0) && (tabs().ignoreSelectedBackgroundStep || disable()) && !item.invalid\"\n [class.bg-[#00bc62]]=\"step() <= (tabs().stepCompleted || -1) && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-light-2)]]=\"((item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep) || (step() > (tabs().stepCompleted || 0) && !tabs().ignoreSelectedBackgroundStep)) && !item.invalid\"\n [class.!bg-[#fdeaec]]=\"item.invalid\">\n @if (step() <= (tabs().stepCompleted || -1)) {\n <i class=\"libs-ui-icon-check text-[#ffffff]\"></i>\n } @else {\n <span [class.text-[#cdd0d6]]=\"disable()\">{{ step() }}</span>\n }\n </div>\n } @else {\n <div\n class=\"libs-ui-tab-header-center-item-step\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n <span>{{ step() }}</span>\n </div>\n }\n }\n @if (item.configButtonLeft) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonLeft.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonLeft.classInclude || ''\"\n [classIconLeft]=\"item.configButtonLeft.classIconLeft || ''\"\n [classLabel]=\"item.configButtonLeft.classLabel || ''\"\n [classIconRight]=\"item.configButtonLeft.classIconRight || ''\"\n [label]=\"item.configButtonLeft.label || ''\"\n [popover]=\"item.configButtonLeft.popover || {}\"\n (outClick)=\"handlerClickButton($event, 'configButtonLeft')\" />\n }\n @if (item[fieldLabel()]) {\n <div\n class=\"relative flex\"\n [style.maxWidth.px]=\"tabs().maxWidthTextLabelItem || 160\">\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{ position: { mode: step() === 1 ? 'start' : 'center', distance: 0 }, zIndex: zIndex() }\"\n [attr.size]=\"size()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [ignoreStopPropagationEvent]=\"true\"\n [classInclude]=\"'w-full libs-ui-tab-header-center-item-label ' + (item.classLabel || 'libs-ui-font-h6m') + (disableLabel() && disable() ? ' libs-ui-disable' : '') + (tabs().stepHasBackGround && disable() ? ' text-[#cdd0d6]' : '')\"\n [innerHTML]=\"labelComputed()\"></span>\n @if (item.hasRedDot) {\n <div class=\"absolute right-[-6px] top-[-2px] w-[6px] h-[6px] bg-[#ee2d41] rounded-[6px]\"></div>\n }\n </div>\n }\n @if (item.popover) {\n <i\n class=\"libs-ui-tab-header-center-item-icon ml-[8px] libs-ui-icon-tooltip-outline\"\n LibsUiComponentsPopoverDirective\n [config]=\"item.popover\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"></i>\n }\n @if (item.iconRight && !item.iconRightBehindBadge) {\n <i\n class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.count !== undefined) {\n <libs_ui-components-badge\n [mode]=\"item.modeCount || 'x+'\"\n [count]=\"item.count\"\n [maxCount]=\"item.maxCount || 99\"\n [classCircle]=\"(item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')\"\n [active]=\"item[fieldKey()] === keySelected()\"\n [class.libs-ui-disable]=\"disable()\" />\n }\n @if (item.iconRight && item.iconRightBehindBadge) {\n <i\n class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\"></i>\n }\n @if (item.configButtonRight) {\n <libs_ui-components-buttons-button\n [type]=\"item.configButtonRight.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonRight.classInclude || ''\"\n [classIconLeft]=\"item.configButtonRight.classIconLeft || ''\"\n [classLabel]=\"item.configButtonRight.classLabel || ''\"\n [classIconRight]=\"item.configButtonRight.classIconRight || ''\"\n [popover]=\"item.configButtonRight.popover || {}\"\n [label]=\"item.configButtonRight.label || ''\"\n (outClick)=\"handlerClickButton($event, 'configButtonRight')\" />\n }\n @if (tabs().actionRightConfig?.(); as right) {\n <libs_ui-components-popover\n [class]=\"right.classInclude || 'ml-[8px]'\"\n [class.libs-ui-tab-header-center-item-action]=\"right.onlyShowWhenHoverItemActive\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [mode]=\"'click-toggle'\"\n [ignoreStopPropagationEvent]=\"true\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [elementRefCustom]=\"right.onlyShowWhenHoverItemActive ? undefined : itemEl\"\n [config]=\"{\n zIndex: right.config?.()?.zIndex || 1000,\n maxHeight: right.config?.()?.maxHeight || 287,\n maxWidth: right.config?.()?.maxWidth || 2048,\n width: right.config?.()?.width || 220,\n direction: right.config?.()?.direction || 'bottom',\n template: right.config?.()?.template || actionEl,\n classInclude: (right.config?.()?.classInclude || '') + ' !rounded-[4px] overflow-hidden',\n whiteTheme: true,\n ignoreArrow: true,\n position: right.config?.()?.position || { mode: 'start', distance: 0 },\n }\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n @if (right.customView) {\n <div [innerHtml]=\"item[fieldKey()] | LibsUiPipesCallFunctionInTemplatePipe: right.customView : item\"></div>\n } @else {\n <i\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.invalid]=\"item.invalid\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class]=\"right.onlyShowWhenHoverItemActive ? 'libs-ui-icon-more-vertical rotate-90 libs-ui-tab-header-center-item-icon' : 'libs-ui-icon-chevron-right rotate-90 libs-ui-tab-header-center-item-icon'\"></i>\n }\n </libs_ui-components-popover>\n <ng-template #actionEl>\n @if (0 | LibsUiPipesCallFunctionInTemplatePipe: right.getListViewConfig : item : item[fieldKey()] : { valueIs0: 0 } | async; as config) {\n <libs_ui-components-list\n [config]=\"config()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n }\n </ng-template>\n }\n @if (tabs().allowRemove && tabs().items().length > 1) {\n <libs_ui-components-buttons-button\n [type]=\"tabs().configButtonRemove?.type || 'button-link-custom'\"\n [iconOnlyType]=\"tabs().configButtonRemove?.iconOnlyType || true\"\n [classInclude]=\"tabs().configButtonRemove?.classInclude || 'ml-[8px] !p-0'\"\n [classIconLeft]=\"tabs().configButtonRemove?.classIconLeft || 'libs-ui-icon-close'\"\n [classLabel]=\"tabs().configButtonRemove?.classLabel || ''\"\n [classIconRight]=\"tabs().configButtonRemove?.classIconRight || ''\"\n [popover]=\"tabs().configButtonRemove?.popover || { config: { content: 'i18n_delete' } }\"\n [label]=\"tabs().configButtonRemove?.label || ''\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#6a7383',\n text_hover: '#f15767',\n text_active: '#f15767',\n text_disable: '#cdd0d6',\n },\n rootColor: '#f15767',\n }\"\n (outClick)=\"handlerClickButton($event, 'remove')\" />\n }\n </div>\n}\n", styles: [".libs-ui-tab-header-center-item{position:relative;display:flex;align-items:center;flex-wrap:nowrap;padding:12px 0;height:100%;width:fit-content}.libs-ui-tab-header-center-item[active=true]:after{content:\"\";width:100%;height:2px;background-color:var(--libs-ui-color-default, #226ff5);position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item[invalid=true]:after{background-color:#f15767}.libs-ui-tab-header-center-item-image{width:20px;height:20px;border-radius:50%;margin-right:8px}.libs-ui-tab-header-center-item-icon{display:flex}.libs-ui-tab-header-center-item-icon:before{font-size:12px}.libs-ui-tab-header-center-item-label{font-family:var(--libs-ui-font-family-name, \"Arial\");color:#6a7383;font-size:11px}.libs-ui-tab-header-center-item-label[size=langer]{font-size:13px}.libs-ui-tab-header-center-item-label[completed=true]{color:#6a7383}.libs-ui-tab-header-center-item-label[active=true]{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item-action{display:none}.libs-ui-tab-header-center-item-step{border-radius:50%;border:1px solid #9ca2ad;color:#9ca2ad;min-width:24px;min-height:24px;display:flex;align-items:center;justify-content:center;margin-right:8px}.libs-ui-tab-header-center-item-step[completed=true]{color:#6a7383;border:1px solid #6a7383}.libs-ui-tab-header-center-item-step[active=true]{color:var(--libs-ui-color-default, #226ff5);border:1px solid var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][completed=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][completed=true]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][active=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][active=true]:before{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][invalid=true]:before,.libs-ui-tab-header-center-item i[class*=icon-font-3rd][invalid=true]:before{color:#f15767}.libs-ui-tab-header-center-item-hover:hover[active=false][disable=false]:after{content:\"\";width:100%;height:2px;background-color:#6a7383;position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item-hover:hover .libs-ui-tab-header-center-item-action[active=true],.libs-ui-tab-header-center-item-action-show .libs-ui-tab-header-center-item-action{display:flex}\n"] }]
|
|
112
134
|
}], ctorParameters: () => [] });
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvaXRlbS9pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJzL3NyYy9pdGVtL2l0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckssT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFnQyxnQ0FBZ0MsRUFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUVqSSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBb0IsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRixPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBVzVDLE1BQU0sT0FBTyxpQ0FBaUM7SUFDNUMsbUJBQW1CO0lBQ1QsYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFn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LHNoQ0FBRSxxQ0FBcUM7OzRGQUV4TCxpQ0FBaUM7a0JBVDdDLFNBQVM7K0JBRUUsOEJBQThCLGNBRzVCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLFNBQVMsRUFBRSxzQ0FBc0MsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0JhZGdlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1iYWRnZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IGVzY2FwZUh0bWwsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElUYWJzSXRlbSwgSVRhYnNJdGVtRXZlbnQsIElUYWJzLCBUWVBFX1RBQl9NT0RFIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YWIuaW50ZXJmYWNlJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXksIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1saXN0JztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy10YWJzLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2l0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBc3luY1BpcGUsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0JhZGdlQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNUYWJzSXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgbGFiZWxDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IGVzY2FwZUh0bWwodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5pdGVtKClbdGhpcy5maWVsZExhYmVsKCldKSkpO1xuICBwcm90ZWN0ZWQgYWN0aW9uU2hvd2luZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyID0gc2lnbmFsPE11dGF0aW9uT2JzZXJ2ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGlnbm9yZUNhbGN1bGF0b3JUYWIgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xuICByZWFkb25seSBzdGVwID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtb2RlID0gaW5wdXQucmVxdWlyZWQ8VFlQRV9UQUJfTU9ERT4oKTtcbiAgcmVhZG9ubHkgdGFicyA9IGlucHV0LnJlcXVpcmVkPElUYWJzPigpO1xuICByZWFkb25seSBpdGVtID0gbW9kZWwucmVxdWlyZWQ8SVRhYnNJdGVtPigpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRMYWJlbCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRLZXkgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNzc0RlZmF1bHQgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHNpemUgPSBpbnB1dC5yZXF1aXJlZDwnbGFuZ2VyJyB8ICdtZWRpdW0nPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBjaGFuZ2VWaWV3VGFiID0gaW5wdXQucmVxdWlyZWQ8U3ViamVjdDx2b2lkPj4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRBY3Rpb24gPSBvdXRwdXQ8SVRhYnNJdGVtRXZlbnQ+KCk7XG5cbiAgLyogSU5KRUNUKi9cbiAgcHJpdmF0ZSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1vZGUoKSAhPT0gJ2xlZnQnIHx8IHRoaXMuaWdub3JlQ2FsY3VsYXRvclRhYigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlU3BlY2lmaWNXaWR0aCgpO1xuICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcigpPy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyU3ViamVjdC5waXBlKGRlYm91bmNlVGltZSgxMCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVNwZWNpZmljV2lkdGgoKSk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLnNldChuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJTdWJqZWN0Lm5leHQoKSkpO1xuICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcigpPy5vYnNlcnZlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5pdGVtKCkua2V5KSB7XG4gICAgICB0aGlzLml0ZW0udXBkYXRlKChpdGVtKSA9PiAoeyAuLi5pdGVtLCBrZXk6IHV1aWQoKSB9KSk7XG4gICAgfVxuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByaXZhdGUgdXBkYXRlU3BlY2lmaWNXaWR0aCgpIHtcbiAgICBjb25zdCBwcmVTcGVjaWZpY1dpZHRoID0gdGhpcy5pdGVtKCkuc3BlY2lmaWNXaWR0aDtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIGlmICh3aWR0aCAmJiBwcmVTcGVjaWZpY1dpZHRoICE9PSB3aWR0aCkge1xuICAgICAgdGhpcy5pdGVtLnVwZGF0ZSgoaXRlbSkgPT4gKHsgLi4uaXRlbSwgc3BlY2lmaWNXaWR0aDogd2lkdGggfSkpO1xuICAgICAgdGhpcy5jaGFuZ2VWaWV3VGFiKCkubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW1nRXJyb3IoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgKGV2ZW50IGFzIElFdmVudCkudGFyZ2V0LnNyYyA9IHRoaXMuaXRlbSgpLmxpbmtJbWFnZUVycm9yO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRBY3Rpb24uZW1pdCh7IGl0ZW06IHRoaXMuaXRlbSgpLCBrZXk6IGV2ZW50LmtleSBhcyBzdHJpbmcgfSk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KGV2ZW50OiBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckV2ZW50KGV2ZW50OiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICBpZiAoZXZlbnQgIT09ICdzaG93JyAmJiBldmVudCAhPT0gJ3JlbW92ZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hY3Rpb25TaG93aW5nLnNldChldmVudCA9PT0gJ3Nob3cnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tCdXR0b24oZXZlbnQ6IEV2ZW50LCB0eXBlOiAnY29uZmlnQnV0dG9uTGVmdCcgfCAnY29uZmlnQnV0dG9uUmlnaHQnIHwgJ3JlbW92ZScpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIHRoaXMub3V0QWN0aW9uLmVtaXQoeyBrZXk6ICdyZW1vdmUnLCBpdGVtOiB0aGlzLml0ZW0oKSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5pdGVtKClbdHlwZV0/LmFjdGlvbjtcbiAgICBpZiAoYWN0aW9uKSB7XG4gICAgICBhY3Rpb24odGhpcy5pdGVtKCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcigpPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIkBpZiAoaXRlbSgpOyBhcyBpdGVtKSB7XG4gIDxkaXZcbiAgICAjaXRlbUVsXG4gICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0ge3sgY3NzRGVmYXVsdCgpIH19IHt7IGl0ZW0uY2xhc3NJbmNsdWRlIHx8ICcnIH19IHt7IGl0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKCkgJiYgdGFicygpLmNsYXNzSW5jbHVkZUFjdGl2ZUl0ZW0gPyB0YWJzKCkuY2xhc3NJbmNsdWRlQWN0aXZlSXRlbSA6ICcnIH19XCJcbiAgICBbYXR0ci5rZXldPVwiaXRlbVtmaWVsZEtleSgpXVwiXG4gICAgW2F0dHIuaW52YWxpZF09XCJpdGVtLmludmFsaWQgJiYgIXRhYnMoKS5pZ25vcmVTaG93TGluZUJvdHRvbUluVGFiXCJcbiAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKSAmJiAhdGFicygpLmlnbm9yZVNob3dMaW5lQm90dG9tSW5UYWJcIlxuICAgIFthdHRyLmRpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICBbY2xhc3MuIWN1cnNvci1wb2ludGVyXT1cIiFkaXNhYmxlKClcIlxuICAgIFtjbGFzcy4hY3Vyc29yLWRlZmF1bHRdPVwiZGlzYWJsZSgpXCJcbiAgICBbY2xhc3MubGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWhvdmVyXT1cIiF0YWJzKCkuaWdub3JlU2hvd0xpbmVCb3R0b21JblRhYlwiXG4gICAgW2NsYXNzLmxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1hY3Rpb24tc2hvd109XCJhY3Rpb25TaG93aW5nKClcIj5cbiAgICBAaWYgKHRhYnMoKS5oYXNJbWFnZSkge1xuICAgICAgPGltZ1xuICAgICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pbWFnZSB7eyBpdGVtLmNsYXNzSW1hZ2VJbmNsdWRlIHx8ICcnIH19XCJcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cIiFpdGVtLnBvcG92ZXJJbWFnZVwiXG4gICAgICAgIFtjb25maWddPVwiaXRlbS5wb3BvdmVySW1hZ2VcIlxuICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgW3NyY109XCJpdGVtLmxpbmtJbWFnZVwiXG4gICAgICAgIFthdHRyLmtleV09XCJpdGVtW2ZpZWxkS2V5KCldXCJcbiAgICAgICAgKGVycm9yKT1cImhhbmRsZXJJbWdFcnJvcigkZXZlbnQpXCIgLz5cbiAgICB9XG4gICAgQGlmIChpdGVtLmljb25MZWZ0KSB7XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pY29uIGxpYnMtdWktbXItOHB4IHt7IGl0ZW0uaWNvbkxlZnQgfX1cIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiIWl0ZW0ucG9wb3Zlckljb25MZWZ0XCJcbiAgICAgICAgW2NvbmZpZ109XCJpdGVtLnBvcG92ZXJJY29uTGVmdFwiXG4gICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgW2F0dHIuYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKClcIlxuICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiPjwvaT5cbiAgICB9XG4gICAgQGlmIChpdGVtLmlzX3Bpbikge1xuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taWNvbiBtci1bOHB4XSB7eyBpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpID8gJ2xpYnMtdWktaWNvbi1waW4tc29saWQnIDogJ2xpYnMtdWktaWNvbi1waW4tb3V0bGluZScgfX1cIlxuICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCI+PC9pPlxuICAgIH1cbiAgICBAaWYgKHRhYnMoKS5oYXNTdGVwKSB7XG4gICAgICBAaWYgKHRhYnMoKS5zdGVwSGFzQmFja0dyb3VuZCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0tc3RlcCAhYm9yZGVyLW5vbmUgbGlicy11aS1mb250LWg2bVwiXG4gICAgICAgICAgW2NsYXNzLiF0ZXh0LVsjZmZmZmZmXV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpICYmICF0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCAmJiAhaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICBbY2xhc3MuIXRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGVmYXVsdCldXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKCkgJiYgdGFicygpLmlnbm9yZVNlbGVjdGVkQmFja2dyb3VuZFN0ZXAgJiYgIWl0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgW2NsYXNzLiF0ZXh0LVsjZjE1NzY3XV09XCJpdGVtLmludmFsaWRcIlxuICAgICAgICAgIFtjbGFzcy5iZy1bI2Y4ZjlmYV1dPVwic3RlcCgpID4gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IDApICYmICh0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCB8fCBkaXNhYmxlKCkpICYmICFpdGVtLmludmFsaWRcIlxuICAgICAgICAgIFtjbGFzcy5iZy1bIzAwYmM2Ml1dPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSkgJiYgIXRhYnMoKS5pZ25vcmVTZWxlY3RlZEJhY2tncm91bmRTdGVwICYmICFpdGVtLmludmFsaWRcIlxuICAgICAgICAgIFtjbGFzcy5iZy1bdmFyKC0tbGlicy11aS1jb2xvci1kZWZhdWx0KV1dPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKSAmJiAhdGFicygpLmlnbm9yZVNlbGVjdGVkQmFja2dyb3VuZFN0ZXAgJiYgIWl0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgW2NsYXNzLmJnLVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTIpXV09XCIoKGl0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKCkgJiYgdGFicygpLmlnbm9yZVNlbGVjdGVkQmFja2dyb3VuZFN0ZXApIHx8IChzdGVwKCkgPiAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgMCkgJiYgIXRhYnMoKS5pZ25vcmVTZWxlY3RlZEJhY2tncm91bmRTdGVwKSkgJiYgIWl0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgW2NsYXNzLiFiZy1bI2ZkZWFlY11dPVwiaXRlbS5pbnZhbGlkXCI+XG4gICAgICAgICAgQGlmIChzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKSkge1xuICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hlY2sgdGV4dC1bI2ZmZmZmZl1cIj48L2k+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8c3BhbiBbY2xhc3MudGV4dC1bI2NkZDBkNl1dPVwiZGlzYWJsZSgpXCI+e3sgc3RlcCgpIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLXN0ZXBcIlxuICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCI+XG4gICAgICAgICAgPHNwYW4+e3sgc3RlcCgpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmIChpdGVtLmNvbmZpZ0J1dHRvbkxlZnQpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgW3R5cGVdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LnR5cGUgfHwgJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIml0ZW0uY29uZmlnQnV0dG9uTGVmdC5jbGFzc0ljb25MZWZ0IHx8ICcnXCJcbiAgICAgICAgW2NsYXNzTGFiZWxdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LmNsYXNzTGFiZWwgfHwgJydcIlxuICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LmNsYXNzSWNvblJpZ2h0IHx8ICcnXCJcbiAgICAgICAgW2xhYmVsXT1cIml0ZW0uY29uZmlnQnV0dG9uTGVmdC5sYWJlbCB8fCAnJ1wiXG4gICAgICAgIFtwb3BvdmVyXT1cIml0ZW0uY29uZmlnQnV0dG9uTGVmdC5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0J1dHRvbigkZXZlbnQsICdjb25maWdCdXR0b25MZWZ0JylcIiAvPlxuICAgIH1cbiAgICBAaWYgKGl0ZW1bZmllbGRMYWJlbCgpXSkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGZsZXhcIlxuICAgICAgICBbc3R5bGUubWF4V2lkdGgucHhdPVwidGFicygpLm1heFdpZHRoVGV4dExhYmVsSXRlbSB8fCAxNjBcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7IHBvc2l0aW9uOiB7IG1vZGU6IHN0ZXAoKSA9PT0gMSA/ICdzdGFydCcgOiAnY2VudGVyJywgZGlzdGFuY2U6IDAgfSwgekluZGV4OiB6SW5kZXgoKSB9XCJcbiAgICAgICAgICBbYXR0ci5zaXplXT1cInNpemUoKVwiXG4gICAgICAgICAgW2F0dHIuYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKClcIlxuICAgICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiXG4gICAgICAgICAgW2NsYXNzLiF0ZXh0LVsjZjE1NzY3XV09XCJpdGVtLmludmFsaWRcIlxuICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIid3LWZ1bGwgbGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWxhYmVsICcgKyAoaXRlbS5jbGFzc0xhYmVsIHx8ICdsaWJzLXVpLWZvbnQtaDZtJykgKyAoZGlzYWJsZUxhYmVsKCkgJiYgZGlzYWJsZSgpID8gJyBsaWJzLXVpLWRpc2FibGUnIDogJycpICsgKHRhYnMoKS5zdGVwSGFzQmFja0dyb3VuZCAmJiBkaXNhYmxlKCkgPyAnIHRleHQtWyNjZGQwZDZdJyA6ICcnKVwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCJsYWJlbENvbXB1dGVkKClcIj48L3NwYW4+XG4gICAgICAgIEBpZiAoaXRlbS5oYXNSZWREb3QpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtWy02cHhdIHRvcC1bLTJweF0gdy1bNnB4XSBoLVs2cHhdIGJnLVsjZWUyZDQxXSByb3VuZGVkLVs2cHhdXCI+PC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGl0ZW0ucG9wb3Zlcikge1xuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taWNvbiBtbC1bOHB4XSBsaWJzLXVpLWljb24tdG9vbHRpcC1vdXRsaW5lXCJcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJpdGVtLnBvcG92ZXJcIlxuICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgW2F0dHIuYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKClcIlxuICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIj48L2k+XG4gICAgfVxuICAgIEBpZiAoaXRlbS5pY29uUmlnaHQpIHtcbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWljb24ge3sgaXRlbS5pY29uUmlnaHQgfX1cIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiIWl0ZW0ucG9wb3Zlckljb25SaWdodFwiXG4gICAgICAgIFtjb25maWddPVwiaXRlbS5wb3BvdmVySWNvblJpZ2h0XCJcbiAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCI+PC9pPlxuICAgIH1cbiAgICBAaWYgKGl0ZW0uY291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1iYWRnZVxuICAgICAgICBbbW9kZV09XCJpdGVtLm1vZGVDb3VudCB8fCAneCsnXCJcbiAgICAgICAgW2NvdW50XT1cIml0ZW0uY291bnRcIlxuICAgICAgICBbbWF4Q291bnRdPVwiaXRlbS5tYXhDb3VudCB8fCA5OVwiXG4gICAgICAgIFtjbGFzc0NpcmNsZV09XCIoaXRlbS5jbGFzc0NpcmNsZSB8fCAnbGlicy11aS1mb250LWg1cicpICsgKGl0ZW0uaW52YWxpZCA/ICcgIXRleHQtWyNmMTU3NjddICFiZy1bI2ZkZWFlY10nIDogJycpXCJcbiAgICAgICAgW2FjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIiAvPlxuICAgIH1cbiAgICBAaWYgKGl0ZW0uY29uZmlnQnV0dG9uUmlnaHQpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgW3R5cGVdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC50eXBlIHx8ICdidXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIml0ZW0uY29uZmlnQnV0dG9uUmlnaHQuY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5jbGFzc0ljb25MZWZ0IHx8ICcnXCJcbiAgICAgICAgW2NsYXNzTGFiZWxdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5jbGFzc0xhYmVsIHx8ICcnXCJcbiAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cIml0ZW0uY29uZmlnQnV0dG9uUmlnaHQuY2xhc3NJY29uUmlnaHQgfHwgJydcIlxuICAgICAgICBbcG9wb3Zlcl09XCJpdGVtLmNvbmZpZ0J1dHRvblJpZ2h0LnBvcG92ZXIgfHwge31cIlxuICAgICAgICBbbGFiZWxdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5sYWJlbCB8fCAnJ1wiXG4gICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b24oJGV2ZW50LCAnY29uZmlnQnV0dG9uUmlnaHQnKVwiIC8+XG4gICAgfVxuICAgIEBpZiAodGFicygpLmFjdGlvblJpZ2h0Q29uZmlnPy4oKTsgYXMgcmlnaHQpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlclxuICAgICAgICBbY2xhc3NdPVwicmlnaHQuY2xhc3NJbmNsdWRlIHx8ICdtbC1bOHB4XSdcIlxuICAgICAgICBbY2xhc3MubGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWFjdGlvbl09XCJyaWdodC5vbmx5U2hvd1doZW5Ib3Zlckl0ZW1BY3RpdmVcIlxuICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiXG4gICAgICAgIFttb2RlXT1cIidjbGljay10b2dnbGUnXCJcbiAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgICAgICAgW2VsZW1lbnRSZWZDdXN0b21dPVwicmlnaHQub25seVNob3dXaGVuSG92ZXJJdGVtQWN0aXZlID8gdW5kZWZpbmVkIDogaXRlbUVsXCJcbiAgICAgICAgW2NvbmZpZ109XCJ7XG4gICAgICAgICAgekluZGV4OiByaWdodC5jb25maWc/LigpPy56SW5kZXggfHwgMTAwMCxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHJpZ2h0LmNvbmZpZz8uKCk/Lm1heEhlaWdodCB8fCAyODcsXG4gICAgICAgICAgbWF4V2lkdGg6IHJpZ2h0LmNvbmZpZz8uKCk/Lm1heFdpZHRoIHx8IDIwNDgsXG4gICAgICAgICAgd2lkdGg6IHJpZ2h0LmNvbmZpZz8uKCk/LndpZHRoIHx8IDIyMCxcbiAgICAgICAgICBkaXJlY3Rpb246IHJpZ2h0LmNvbmZpZz8uKCk/LmRpcmVjdGlvbiB8fCAnYm90dG9tJyxcbiAgICAgICAgICB0ZW1wbGF0ZTogcmlnaHQuY29uZmlnPy4oKT8udGVtcGxhdGUgfHwgYWN0aW9uRWwsXG4gICAgICAgICAgY2xhc3NJbmNsdWRlOiAocmlnaHQuY29uZmlnPy4oKT8uY2xhc3NJbmNsdWRlIHx8ICcnKSArICcgIXJvdW5kZWQtWzRweF0gb3ZlcmZsb3ctaGlkZGVuJyxcbiAgICAgICAgICB3aGl0ZVRoZW1lOiB0cnVlLFxuICAgICAgICAgIGlnbm9yZUFycm93OiB0cnVlLFxuICAgICAgICAgIHBvc2l0aW9uOiByaWdodC5jb25maWc/LigpPy5wb3NpdGlvbiB8fCB7IG1vZGU6ICdzdGFydCcsIGRpc3RhbmNlOiAwIH0sXG4gICAgICAgIH1cIlxuICAgICAgICAob3V0RXZlbnQpPVwiaGFuZGxlclBvcG92ZXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgkZXZlbnQpXCI+XG4gICAgICAgIEBpZiAocmlnaHQuY3VzdG9tVmlldykge1xuICAgICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJpdGVtW2ZpZWxkS2V5KCldIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogcmlnaHQuY3VzdG9tVmlldyA6IGl0ZW1cIj48L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgIFthdHRyLmludmFsaWRdPVwiaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwicmlnaHQub25seVNob3dXaGVuSG92ZXJJdGVtQWN0aXZlID8gJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHJvdGF0ZS05MCBsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taWNvbicgOiAnbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgcm90YXRlLTkwIGxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pY29uJ1wiPjwvaT5cbiAgICAgICAgfVxuICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjYWN0aW9uRWw+XG4gICAgICAgIEBpZiAoMCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IHJpZ2h0LmdldExpc3RWaWV3Q29uZmlnIDogaXRlbSA6IGl0ZW1bZmllbGRLZXkoKV0gOiB7IHZhbHVlSXMwOiAwIH0gfCBhc3luYzsgYXMgY29uZmlnKSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0XG4gICAgICAgICAgICBbY29uZmlnXT1cImNvbmZpZygpXCJcbiAgICAgICAgICAgIFttYXhJdGVtU2hvd109XCI1XCJcbiAgICAgICAgICAgIFtoaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtwYWRkaW5nTGVmdEl0ZW1dPVwidHJ1ZVwiXG4gICAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZEtleSgkZXZlbnQpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICB9XG4gICAgQGlmICh0YWJzKCkuYWxsb3dSZW1vdmUgJiYgdGFicygpLml0ZW1zKCkubGVuZ3RoID4gMSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICBbdHlwZV09XCJ0YWJzKCkuY29uZmlnQnV0dG9uUmVtb3ZlPy50eXBlIHx8ICdidXR0b24tbGluay1jdXN0b20nXCJcbiAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0YWJzKCkuY29uZmlnQnV0dG9uUmVtb3ZlPy5pY29uT25seVR5cGUgfHwgdHJ1ZVwiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwidGFicygpLmNvbmZpZ0J1dHRvblJlbW92ZT8uY2xhc3NJbmNsdWRlIHx8ICdtbC1bOHB4XSAhcC0wJ1wiXG4gICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LmNsYXNzSWNvbkxlZnQgfHwgJ2xpYnMtdWktaWNvbi1jbG9zZSdcIlxuICAgICAgICBbY2xhc3NMYWJlbF09XCJ0YWJzKCkuY29uZmlnQnV0dG9uUmVtb3ZlPy5jbGFzc0xhYmVsIHx8ICcnXCJcbiAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LmNsYXNzSWNvblJpZ2h0IHx8ICcnXCJcbiAgICAgICAgW3BvcG92ZXJdPVwidGFicygpLmNvbmZpZ0J1dHRvblJlbW92ZT8ucG9wb3ZlciB8fCB7IGNvbmZpZzogeyBjb250ZW50OiAnaTE4bl9kZWxldGUnIH0gfVwiXG4gICAgICAgIFtsYWJlbF09XCJ0YWJzKCkuY29uZmlnQnV0dG9uUmVtb3ZlPy5sYWJlbCB8fCAnJ1wiXG4gICAgICAgIFtidXR0b25DdXN0b21dPVwie1xuICAgICAgICAgIGNvbmZpZ1N0ZXBDb2xvcjoge1xuICAgICAgICAgICAgdGV4dDogJyM2YTczODMnLFxuICAgICAgICAgICAgdGV4dF9ob3ZlcjogJyNmMTU3NjcnLFxuICAgICAgICAgICAgdGV4dF9hY3RpdmU6ICcjZjE1NzY3JyxcbiAgICAgICAgICAgIHRleHRfZGlzYWJsZTogJyNjZGQwZDYnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcm9vdENvbG9yOiAnI2YxNTc2NycsXG4gICAgICAgIH1cIlxuICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uKCRldmVudCwgJ3JlbW92ZScpXCIgLz5cbiAgICB9XG4gIDwvZGl2PlxufVxuIl19
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvaXRlbS9pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJzL3NyYy9pdGVtL2l0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BMLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBZ0MsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFFakksT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQW9CLDZCQUE2QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0YsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVc1QyxNQUFNLE9BQU8saUNBQWlDO0lBQzVDLG1CQUFtQjtJQUNULGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFB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ZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0JhZGdlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1iYWRnZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IGVzY2FwZUh0bWwsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElUYWJzSXRlbSwgSVRhYnNJdGVtRXZlbnQsIElUYWJzLCBUWVBFX1RBQl9NT0RFIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YWIuaW50ZXJmYWNlJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXksIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1saXN0JztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy10YWJzLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2l0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBc3luY1BpcGUsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0JhZGdlQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNUYWJzSXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgbGFiZWxDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IGVzY2FwZUh0bWwodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5pdGVtKClbdGhpcy5maWVsZExhYmVsKCldKSkpO1xuICBwcm90ZWN0ZWQgYWN0aW9uU2hvd2luZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyID0gc2lnbmFsPE11dGF0aW9uT2JzZXJ2ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyVjI6IFJlc2l6ZU9ic2VydmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGlnbm9yZUNhbGN1bGF0b3JUYWIgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xuICByZWFkb25seSBzdGVwID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtb2RlID0gaW5wdXQucmVxdWlyZWQ8VFlQRV9UQUJfTU9ERT4oKTtcbiAgcmVhZG9ubHkgdGFicyA9IGlucHV0LnJlcXVpcmVkPElUYWJzPigpO1xuICByZWFkb25seSBpdGVtID0gbW9kZWwucmVxdWlyZWQ8SVRhYnNJdGVtPigpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRMYWJlbCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRLZXkgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNzc0RlZmF1bHQgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHNpemUgPSBpbnB1dC5yZXF1aXJlZDwnbGFuZ2VyJyB8ICdtZWRpdW0nPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBjaGFuZ2VWaWV3VGFiID0gaW5wdXQucmVxdWlyZWQ8U3ViamVjdDx2b2lkPj4oKTtcbiAgLyoqIFYyIG1vZGUg4oCUIGTDuW5nIFJlc2l6ZU9ic2VydmVyIHRoYXkgdsOsIE11dGF0aW9uT2JzZXJ2ZXIuIE3hurdjIMSR4buLbmggZmFsc2UgxJHhu4MgZ2nhu68gYmVoYXZpb3IgY8WpLiAqL1xuICByZWFkb25seSB1c2VDYWxjdWxhdG9yVjIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0QWN0aW9uID0gb3V0cHV0PElUYWJzSXRlbUV2ZW50PigpO1xuXG4gIC8qIElOSkVDVCovXG4gIHByaXZhdGUgZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy51c2VDYWxjdWxhdG9yVjIoKSkge1xuICAgICAgICAvLyBWMiDigJQgUmVzaXplT2JzZXJ2ZXIgxJHGsOG7o2Mgc2V0dXAg4bufIG5nQWZ0ZXJWaWV3SW5pdCwgZWZmZWN0IGtow7RuZyBj4bqnbiBsw6BtIGfDrC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubW9kZSgpICE9PSAnbGVmdCcgfHwgdGhpcy5pZ25vcmVDYWxjdWxhdG9yVGFiKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTcGVjaWZpY1dpZHRoKCk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKDEwKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlU3BlY2lmaWNXaWR0aCgpKTtcbiAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuc2V0KG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMubXV0YXRpb25PYnNlcnZlclN1YmplY3QubmV4dCgpKSk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyKCk/Lm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLml0ZW0oKS5rZXkpIHtcbiAgICAgIHRoaXMuaXRlbS51cGRhdGUoKGl0ZW0pID0+ICh7IC4uLml0ZW0sIGtleTogdXVpZCgpIH0pKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLnVzZUNhbGN1bGF0b3JWMigpIHx8IHRoaXMuaWdub3JlQ2FsY3VsYXRvclRhYigpIHx8IHRoaXMubW9kZSgpICE9PSAnbGVmdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXR1cFJlc2l6ZU9ic2VydmVyVjIoKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcml2YXRlIHNldHVwUmVzaXplT2JzZXJ2ZXJWMigpIHtcbiAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlclYyIHx8IHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlclYyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMudXBkYXRlU3BlY2lmaWNXaWR0aCgpKTtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyVjIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNwZWNpZmljV2lkdGgoKSB7XG4gICAgY29uc3QgcHJlU3BlY2lmaWNXaWR0aCA9IHRoaXMuaXRlbSgpLnNwZWNpZmljV2lkdGg7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICBpZiAod2lkdGggJiYgcHJlU3BlY2lmaWNXaWR0aCAhPT0gd2lkdGgpIHtcbiAgICAgIHRoaXMuaXRlbS51cGRhdGUoKGl0ZW0pID0+ICh7IC4uLml0ZW0sIHNwZWNpZmljV2lkdGg6IHdpZHRoIH0pKTtcbiAgICAgIHRoaXMuY2hhbmdlVmlld1RhYigpLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckltZ0Vycm9yKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIChldmVudCBhcyBJRXZlbnQpLnRhcmdldC5zcmMgPSB0aGlzLml0ZW0oKS5saW5rSW1hZ2VFcnJvcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0ZWRLZXkoZXZlbnQ6IElMaXN0RGF0YUVtaXRLZXkgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0QWN0aW9uLmVtaXQoeyBpdGVtOiB0aGlzLml0ZW0oKSwga2V5OiBldmVudC5rZXkgYXMgc3RyaW5nIH0pO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LnNldChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJFdmVudChldmVudDogVFlQRV9QT1BPVkVSX0VWRU5UKSB7XG4gICAgaWYgKGV2ZW50ICE9PSAnc2hvdycgJiYgZXZlbnQgIT09ICdyZW1vdmUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWN0aW9uU2hvd2luZy5zZXQoZXZlbnQgPT09ICdzaG93Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uKGV2ZW50OiBFdmVudCwgdHlwZTogJ2NvbmZpZ0J1dHRvbkxlZnQnIHwgJ2NvbmZpZ0J1dHRvblJpZ2h0JyB8ICdyZW1vdmUnKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHR5cGUgPT09ICdyZW1vdmUnKSB7XG4gICAgICB0aGlzLm91dEFjdGlvbi5lbWl0KHsga2V5OiAncmVtb3ZlJywgaXRlbTogdGhpcy5pdGVtKCkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuaXRlbSgpW3R5cGVdPy5hY3Rpb247XG4gICAgaWYgKGFjdGlvbikge1xuICAgICAgYWN0aW9uKHRoaXMuaXRlbSgpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIoKT8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJWMj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJWMiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiQGlmIChpdGVtKCk7IGFzIGl0ZW0pIHtcbiAgPGRpdlxuICAgICNpdGVtRWxcbiAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbSB7eyBjc3NEZWZhdWx0KCkgfX0ge3sgaXRlbS5jbGFzc0luY2x1ZGUgfHwgJycgfX0ge3sgaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKSAmJiB0YWJzKCkuY2xhc3NJbmNsdWRlQWN0aXZlSXRlbSA/IHRhYnMoKS5jbGFzc0luY2x1ZGVBY3RpdmVJdGVtIDogJycgfX1cIlxuICAgIFthdHRyLmtleV09XCJpdGVtW2ZpZWxkS2V5KCldXCJcbiAgICBbYXR0ci5pbnZhbGlkXT1cIml0ZW0uaW52YWxpZCAmJiAhdGFicygpLmlnbm9yZVNob3dMaW5lQm90dG9tSW5UYWJcIlxuICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpICYmICF0YWJzKCkuaWdub3JlU2hvd0xpbmVCb3R0b21JblRhYlwiXG4gICAgW2F0dHIuZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgIFtjbGFzcy4hY3Vyc29yLXBvaW50ZXJdPVwiIWRpc2FibGUoKVwiXG4gICAgW2NsYXNzLiFjdXJzb3ItZGVmYXVsdF09XCJkaXNhYmxlKClcIlxuICAgIFtjbGFzcy5saWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taG92ZXJdPVwiIXRhYnMoKS5pZ25vcmVTaG93TGluZUJvdHRvbUluVGFiXCJcbiAgICBbY2xhc3MubGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWFjdGlvbi1zaG93XT1cImFjdGlvblNob3dpbmcoKVwiPlxuICAgIEBpZiAodGFicygpLmhhc0ltYWdlKSB7XG4gICAgICA8aW1nXG4gICAgICAgIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWltYWdlIHt7IGl0ZW0uY2xhc3NJbWFnZUluY2x1ZGUgfHwgJycgfX1cIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiIWl0ZW0ucG9wb3ZlckltYWdlXCJcbiAgICAgICAgW2NvbmZpZ109XCJpdGVtLnBvcG92ZXJJbWFnZVwiXG4gICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICBbc3JjXT1cIml0ZW0ubGlua0ltYWdlXCJcbiAgICAgICAgW2F0dHIua2V5XT1cIml0ZW1bZmllbGRLZXkoKV1cIlxuICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltZ0Vycm9yKCRldmVudClcIiAvPlxuICAgIH1cbiAgICBAaWYgKGl0ZW0uaWNvbkxlZnQpIHtcbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWljb24gbGlicy11aS1tci04cHgge3sgaXRlbS5pY29uTGVmdCB9fVwiXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhaXRlbS5wb3BvdmVySWNvbkxlZnRcIlxuICAgICAgICBbY29uZmlnXT1cIml0ZW0ucG9wb3Zlckljb25MZWZ0XCJcbiAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCI+PC9pPlxuICAgIH1cbiAgICBAaWYgKGl0ZW0uaXNfcGluKSB7XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pY29uIG1yLVs4cHhdIHt7IGl0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKCkgPyAnbGlicy11aS1pY29uLXBpbi1zb2xpZCcgOiAnbGlicy11aS1pY29uLXBpbi1vdXRsaW5lJyB9fVwiXG4gICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgW2F0dHIuY29tcGxldGVkXT1cInN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIj48L2k+XG4gICAgfVxuICAgIEBpZiAodGFicygpLmhhc1N0ZXApIHtcbiAgICAgIEBpZiAodGFicygpLnN0ZXBIYXNCYWNrR3JvdW5kKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1zdGVwICFib3JkZXItbm9uZSBsaWJzLXVpLWZvbnQtaDZtXCJcbiAgICAgICAgICBbY2xhc3MuIXRleHQtWyNmZmZmZmZdXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKCkgJiYgIXRhYnMoKS5pZ25vcmVTZWxlY3RlZEJhY2tncm91bmRTdGVwICYmICFpdGVtLmludmFsaWRcIlxuICAgICAgICAgIFtjbGFzcy4hdGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kZWZhdWx0KV1dPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKSAmJiB0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCAmJiAhaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICBbY2xhc3MuIXRleHQtWyNmMTU3NjddXT1cIml0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgW2NsYXNzLmJnLVsjZjhmOWZhXV09XCJzdGVwKCkgPiAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgMCkgJiYgKHRhYnMoKS5pZ25vcmVTZWxlY3RlZEJhY2tncm91bmRTdGVwIHx8IGRpc2FibGUoKSkgJiYgIWl0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgW2NsYXNzLmJnLVsjMDBiYzYyXV09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKSAmJiAhdGFicygpLmlnbm9yZVNlbGVjdGVkQmFja2dyb3VuZFN0ZXAgJiYgIWl0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgW2NsYXNzLmJnLVt2YXIoLS1saWJzLXVpLWNvbG9yLWRlZmF1bHQpXV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpICYmICF0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCAmJiAhaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICBbY2xhc3MuYmctW3ZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtMildXT1cIigoaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKSAmJiB0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCkgfHwgKHN0ZXAoKSA+ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAwKSAmJiAhdGFicygpLmlnbm9yZVNlbGVjdGVkQmFja2dyb3VuZFN0ZXApKSAmJiAhaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICBbY2xhc3MuIWJnLVsjZmRlYWVjXV09XCJpdGVtLmludmFsaWRcIj5cbiAgICAgICAgICBAaWYgKHN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpKSB7XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGVjayB0ZXh0LVsjZmZmZmZmXVwiPjwvaT5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuIFtjbGFzcy50ZXh0LVsjY2RkMGQ2XV09XCJkaXNhYmxlKClcIj57eyBzdGVwKCkgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0tc3RlcFwiXG4gICAgICAgICAgW2F0dHIuYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKClcIlxuICAgICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIj5cbiAgICAgICAgICA8c3Bhbj57eyBzdGVwKCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgICBAaWYgKGl0ZW0uY29uZmlnQnV0dG9uTGVmdCkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICBbdHlwZV09XCJpdGVtLmNvbmZpZ0J1dHRvbkxlZnQudHlwZSB8fCAnYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJpdGVtLmNvbmZpZ0J1dHRvbkxlZnQuY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICBbY2xhc3NMYWJlbF09XCJpdGVtLmNvbmZpZ0J1dHRvbkxlZnQuY2xhc3NMYWJlbCB8fCAnJ1wiXG4gICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJpdGVtLmNvbmZpZ0J1dHRvbkxlZnQuY2xhc3NJY29uUmlnaHQgfHwgJydcIlxuICAgICAgICBbbGFiZWxdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LmxhYmVsIHx8ICcnXCJcbiAgICAgICAgW3BvcG92ZXJdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LnBvcG92ZXIgfHwge31cIlxuICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uKCRldmVudCwgJ2NvbmZpZ0J1dHRvbkxlZnQnKVwiIC8+XG4gICAgfVxuICAgIEBpZiAoaXRlbVtmaWVsZExhYmVsKCldKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicmVsYXRpdmUgZmxleFwiXG4gICAgICAgIFtzdHlsZS5tYXhXaWR0aC5weF09XCJ0YWJzKCkubWF4V2lkdGhUZXh0TGFiZWxJdGVtIHx8IDE2MFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbY29uZmlnXT1cInsgcG9zaXRpb246IHsgbW9kZTogc3RlcCgpID09PSAxID8gJ3N0YXJ0JyA6ICdjZW50ZXInLCBkaXN0YW5jZTogMCB9LCB6SW5kZXg6IHpJbmRleCgpIH1cIlxuICAgICAgICAgIFthdHRyLnNpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgW2F0dHIuY29tcGxldGVkXT1cInN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpXCJcbiAgICAgICAgICBbY2xhc3MuIXRleHQtWyNmMTU3NjddXT1cIml0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3ctZnVsbCBsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0tbGFiZWwgJyArIChpdGVtLmNsYXNzTGFiZWwgfHwgJ2xpYnMtdWktZm9udC1oNm0nKSArIChkaXNhYmxlTGFiZWwoKSAmJiBkaXNhYmxlKCkgPyAnIGxpYnMtdWktZGlzYWJsZScgOiAnJykgKyAodGFicygpLnN0ZXBIYXNCYWNrR3JvdW5kICYmIGRpc2FibGUoKSA/ICcgdGV4dC1bI2NkZDBkNl0nIDogJycpXCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cImxhYmVsQ29tcHV0ZWQoKVwiPjwvc3Bhbj5cbiAgICAgICAgQGlmIChpdGVtLmhhc1JlZERvdCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSByaWdodC1bLTZweF0gdG9wLVstMnB4XSB3LVs2cHhdIGgtWzZweF0gYmctWyNlZTJkNDFdIHJvdW5kZWQtWzZweF1cIj48L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoaXRlbS5wb3BvdmVyKSB7XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pY29uIG1sLVs4cHhdIGxpYnMtdWktaWNvbi10b29sdGlwLW91dGxpbmVcIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIml0ZW0ucG9wb3ZlclwiXG4gICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiPjwvaT5cbiAgICB9XG4gICAgQGlmIChpdGVtLmljb25SaWdodCAmJiAhaXRlbS5pY29uUmlnaHRCZWhpbmRCYWRnZSkge1xuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taWNvbiB7eyBpdGVtLmljb25SaWdodCB9fVwiXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhaXRlbS5wb3BvdmVySWNvblJpZ2h0XCJcbiAgICAgICAgW2NvbmZpZ109XCJpdGVtLnBvcG92ZXJJY29uUmlnaHRcIlxuICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgW2F0dHIuY29tcGxldGVkXT1cInN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIj48L2k+XG4gICAgfVxuICAgIEBpZiAoaXRlbS5jb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJhZGdlXG4gICAgICAgIFttb2RlXT1cIml0ZW0ubW9kZUNvdW50IHx8ICd4KydcIlxuICAgICAgICBbY291bnRdPVwiaXRlbS5jb3VudFwiXG4gICAgICAgIFttYXhDb3VudF09XCJpdGVtLm1heENvdW50IHx8IDk5XCJcbiAgICAgICAgW2NsYXNzQ2lyY2xlXT1cIihpdGVtLmNsYXNzQ2lyY2xlIHx8ICdsaWJzLXVpLWZvbnQtaDVyJykgKyAoaXRlbS5pbnZhbGlkID8gJyAhdGV4dC1bI2YxNTc2N10gIWJnLVsjZmRlYWVjXScgOiAnJylcIlxuICAgICAgICBbYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiIC8+XG4gICAgfVxuICAgIEBpZiAoaXRlbS5pY29uUmlnaHQgJiYgaXRlbS5pY29uUmlnaHRCZWhpbmRCYWRnZSkge1xuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taWNvbiB7eyBpdGVtLmljb25SaWdodCB9fVwiXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhaXRlbS5wb3BvdmVySWNvblJpZ2h0XCJcbiAgICAgICAgW2NvbmZpZ109XCJpdGVtLnBvcG92ZXJJY29uUmlnaHRcIlxuICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgW2F0dHIuY29tcGxldGVkXT1cInN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIj48L2k+XG4gICAgfVxuICAgIEBpZiAoaXRlbS5jb25maWdCdXR0b25SaWdodCkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICBbdHlwZV09XCJpdGVtLmNvbmZpZ0J1dHRvblJpZ2h0LnR5cGUgfHwgJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5jbGFzc0luY2x1ZGUgfHwgJydcIlxuICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJpdGVtLmNvbmZpZ0J1dHRvblJpZ2h0LmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICBbY2xhc3NMYWJlbF09XCJpdGVtLmNvbmZpZ0J1dHRvblJpZ2h0LmNsYXNzTGFiZWwgfHwgJydcIlxuICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5jbGFzc0ljb25SaWdodCB8fCAnJ1wiXG4gICAgICAgIFtwb3BvdmVyXT1cIml0ZW0uY29uZmlnQnV0dG9uUmlnaHQucG9wb3ZlciB8fCB7fVwiXG4gICAgICAgIFtsYWJlbF09XCJpdGVtLmNvbmZpZ0J1dHRvblJpZ2h0LmxhYmVsIHx8ICcnXCJcbiAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0J1dHRvbigkZXZlbnQsICdjb25maWdCdXR0b25SaWdodCcpXCIgLz5cbiAgICB9XG4gICAgQGlmICh0YWJzKCkuYWN0aW9uUmlnaHRDb25maWc/LigpOyBhcyByaWdodCkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgIFtjbGFzc109XCJyaWdodC5jbGFzc0luY2x1ZGUgfHwgJ21sLVs4cHhdJ1wiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0tYWN0aW9uXT1cInJpZ2h0Lm9ubHlTaG93V2hlbkhvdmVySXRlbUFjdGl2ZVwiXG4gICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgW2F0dHIuY29tcGxldGVkXT1cInN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpXCJcbiAgICAgICAgW21vZGVdPVwiJ2NsaWNrLXRvZ2dsZSdcIlxuICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlXT1cInRydWVcIlxuICAgICAgICBbZWxlbWVudFJlZkN1c3RvbV09XCJyaWdodC5vbmx5U2hvd1doZW5Ib3Zlckl0ZW1BY3RpdmUgPyB1bmRlZmluZWQgOiBpdGVtRWxcIlxuICAgICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgICB6SW5kZXg6IHJpZ2h0LmNvbmZpZz8uKCk/LnpJbmRleCB8fCAxMDAwLFxuICAgICAgICAgIG1heEhlaWdodDogcmlnaHQuY29uZmlnPy4oKT8ubWF4SGVpZ2h0IHx8IDI4NyxcbiAgICAgICAgICBtYXhXaWR0aDogcmlnaHQuY29uZmlnPy4oKT8ubWF4V2lkdGggfHwgMjA0OCxcbiAgICAgICAgICB3aWR0aDogcmlnaHQuY29uZmlnPy4oKT8ud2lkdGggfHwgMjIwLFxuICAgICAgICAgIGRpcmVjdGlvbjogcmlnaHQuY29uZmlnPy4oKT8uZGlyZWN0aW9uIHx8ICdib3R0b20nLFxuICAgICAgICAgIHRlbXBsYXRlOiByaWdodC5jb25maWc/LigpPy50ZW1wbGF0ZSB8fCBhY3Rpb25FbCxcbiAgICAgICAgICBjbGFzc0luY2x1ZGU6IChyaWdodC5jb25maWc/LigpPy5jbGFzc0luY2x1ZGUgfHwgJycpICsgJyAhcm91bmRlZC1bNHB4XSBvdmVyZmxvdy1oaWRkZW4nLFxuICAgICAgICAgIHdoaXRlVGhlbWU6IHRydWUsXG4gICAgICAgICAgaWdub3JlQXJyb3c6IHRydWUsXG4gICAgICAgICAgcG9zaXRpb246IHJpZ2h0LmNvbmZpZz8uKCk/LnBvc2l0aW9uIHx8IHsgbW9kZTogJ3N0YXJ0JywgZGlzdGFuY2U6IDAgfSxcbiAgICAgICAgfVwiXG4gICAgICAgIChvdXRFdmVudCk9XCJoYW5kbGVyUG9wb3ZlckV2ZW50KCRldmVudClcIlxuICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCRldmVudClcIj5cbiAgICAgICAgQGlmIChyaWdodC5jdXN0b21WaWV3KSB7XG4gICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cIml0ZW1bZmllbGRLZXkoKV0gfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiByaWdodC5jdXN0b21WaWV3IDogaXRlbVwiPjwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8aVxuICAgICAgICAgICAgW2F0dHIuYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgW2F0dHIuaW52YWxpZF09XCJpdGVtLmludmFsaWRcIlxuICAgICAgICAgICAgW2F0dHIuY29tcGxldGVkXT1cInN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJyaWdodC5vbmx5U2hvd1doZW5Ib3Zlckl0ZW1BY3RpdmUgPyAnbGlicy11aS1pY29uLW1vcmUtdmVydGljYWwgcm90YXRlLTkwIGxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pY29uJyA6ICdsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCByb3RhdGUtOTAgbGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWljb24nXCI+PC9pPlxuICAgICAgICB9XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNhY3Rpb25FbD5cbiAgICAgICAgQGlmICgwIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogcmlnaHQuZ2V0TGlzdFZpZXdDb25maWcgOiBpdGVtIDogaXRlbVtmaWVsZEtleSgpXSA6IHsgdmFsdWVJczA6IDAgfSB8IGFzeW5jOyBhcyBjb25maWcpIHtcbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxpc3RcbiAgICAgICAgICAgIFtjb25maWddPVwiY29uZmlnKClcIlxuICAgICAgICAgICAgW21heEl0ZW1TaG93XT1cIjVcIlxuICAgICAgICAgICAgW2hpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgICAgW3BhZGRpbmdMZWZ0SXRlbV09XCJ0cnVlXCJcbiAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkS2V5KCRldmVudClcIiAvPlxuICAgICAgICB9XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIH1cbiAgICBAaWYgKHRhYnMoKS5hbGxvd1JlbW92ZSAmJiB0YWJzKCkuaXRlbXMoKS5sZW5ndGggPiAxKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgIFt0eXBlXT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LnR5cGUgfHwgJ2J1dHRvbi1saW5rLWN1c3RvbSdcIlxuICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/Lmljb25Pbmx5VHlwZSB8fCB0cnVlXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJ0YWJzKCkuY29uZmlnQnV0dG9uUmVtb3ZlPy5jbGFzc0luY2x1ZGUgfHwgJ21sLVs4cHhdICFwLTAnXCJcbiAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwidGFicygpLmNvbmZpZ0J1dHRvblJlbW92ZT8uY2xhc3NJY29uTGVmdCB8fCAnbGlicy11aS1pY29uLWNsb3NlJ1wiXG4gICAgICAgIFtjbGFzc0xhYmVsXT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LmNsYXNzTGFiZWwgfHwgJydcIlxuICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwidGFicygpLmNvbmZpZ0J1dHRvblJlbW92ZT8uY2xhc3NJY29uUmlnaHQgfHwgJydcIlxuICAgICAgICBbcG9wb3Zlcl09XCJ0YWJzKCkuY29uZmlnQnV0dG9uUmVtb3ZlPy5wb3BvdmVyIHx8IHsgY29uZmlnOiB7IGNvbnRlbnQ6ICdpMThuX2RlbGV0ZScgfSB9XCJcbiAgICAgICAgW2xhYmVsXT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LmxhYmVsIHx8ICcnXCJcbiAgICAgICAgW2J1dHRvbkN1c3RvbV09XCJ7XG4gICAgICAgICAgY29uZmlnU3RlcENvbG9yOiB7XG4gICAgICAgICAgICB0ZXh0OiAnIzZhNzM4MycsXG4gICAgICAgICAgICB0ZXh0X2hvdmVyOiAnI2YxNTc2NycsXG4gICAgICAgICAgICB0ZXh0X2FjdGl2ZTogJyNmMTU3NjcnLFxuICAgICAgICAgICAgdGV4dF9kaXNhYmxlOiAnI2NkZDBkNicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByb290Q29sb3I6ICcjZjE1NzY3JyxcbiAgICAgICAgfVwiXG4gICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b24oJGV2ZW50LCAncmVtb3ZlJylcIiAvPlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
|