@onecx/angular-accelerator 5.13.0 → 5.15.0
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/assets/i18n/de.json +11 -6
- package/assets/i18n/en.json +11 -6
- package/esm2022/index.mjs +2 -1
- package/esm2022/lib/angular-accelerator-primeng.module.mjs +8 -1
- package/esm2022/lib/components/column-group-selection/column-group-selection.component.mjs +6 -5
- package/esm2022/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +47 -10
- package/esm2022/lib/components/data-layout-selection/data-layout-selection.component.mjs +26 -8
- package/esm2022/lib/components/data-list-grid/data-list-grid.component.mjs +11 -10
- package/esm2022/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +14 -13
- package/esm2022/lib/components/interactive-data-view/interactive-data-view.component.mjs +1 -1
- package/esm2022/lib/utils/criteria.utils.mjs +28 -0
- package/esm2022/testing/custom-group-column-selector.harness.mjs +2 -2
- package/esm2022/testing/data-layout-selection.harness.mjs +6 -7
- package/fesm2022/onecx-angular-accelerator-testing.mjs +6 -7
- package/fesm2022/onecx-angular-accelerator-testing.mjs.map +1 -1
- package/fesm2022/onecx-angular-accelerator.mjs +130 -41
- package/fesm2022/onecx-angular-accelerator.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/angular-accelerator-primeng.module.d.ts +3 -2
- package/lib/components/custom-group-column-selector/custom-group-column-selector.component.d.ts +13 -1
- package/lib/components/data-layout-selection/data-layout-selection.component.d.ts +5 -2
- package/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.d.ts +2 -2
- package/lib/utils/criteria.utils.d.ts +18 -0
- package/package.json +1 -1
|
@@ -8,9 +8,27 @@ import * as i4 from "primeng/selectbutton";
|
|
|
8
8
|
import * as i5 from "@angular/forms";
|
|
9
9
|
import * as i6 from "@ngx-translate/core";
|
|
10
10
|
const ALL_VIEW_LAYOUTS = [
|
|
11
|
-
{
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
{
|
|
12
|
+
id: 'ocx-data-layout-selection-list',
|
|
13
|
+
icon: PrimeIcons.LIST,
|
|
14
|
+
layout: 'list',
|
|
15
|
+
tooltipKey: 'OCX_DATA_LAYOUT_SELECTION.LAYOUT.LIST',
|
|
16
|
+
labelKey: 'OCX_DATA_LAYOUT_SELECTION.LAYOUT.LIST',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'ocx-data-layout-selection-grid',
|
|
20
|
+
icon: PrimeIcons.TH_LARGE,
|
|
21
|
+
layout: 'grid',
|
|
22
|
+
tooltipKey: 'OCX_DATA_LAYOUT_SELECTION.LAYOUT.GRID',
|
|
23
|
+
labelKey: 'OCX_DATA_LAYOUT_SELECTION.LAYOUT.GRID',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'ocx-data-layout-selection-table',
|
|
27
|
+
icon: PrimeIcons.TABLE,
|
|
28
|
+
layout: 'table',
|
|
29
|
+
tooltipKey: 'OCX_DATA_LAYOUT_SELECTION.LAYOUT.TABLE',
|
|
30
|
+
labelKey: 'OCX_DATA_LAYOUT_SELECTION.LAYOUT.TABLE',
|
|
31
|
+
},
|
|
14
32
|
];
|
|
15
33
|
export class DataLayoutSelectionComponent {
|
|
16
34
|
constructor() {
|
|
@@ -28,21 +46,21 @@ export class DataLayoutSelectionComponent {
|
|
|
28
46
|
ngOnInit() {
|
|
29
47
|
this.viewingLayouts = ALL_VIEW_LAYOUTS.filter((vl) => this.supportedViewLayouts.includes(vl.layout));
|
|
30
48
|
this.componentStateChanged.emit({
|
|
31
|
-
layout: this.layout
|
|
49
|
+
layout: this.layout,
|
|
32
50
|
});
|
|
33
51
|
}
|
|
34
52
|
onDataViewLayoutChange(event) {
|
|
35
53
|
this.dataViewLayoutChange.emit(event.layout);
|
|
36
54
|
this.componentStateChanged.emit({
|
|
37
|
-
layout: event.layout
|
|
55
|
+
layout: event.layout,
|
|
38
56
|
});
|
|
39
57
|
}
|
|
40
58
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataLayoutSelectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
41
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: DataLayoutSelectionComponent, selector: "ocx-data-layout-selection", inputs: { supportedViewLayouts: "supportedViewLayouts", layout: "layout" }, outputs: { dataViewLayoutChange: "dataViewLayoutChange", componentStateChanged: "componentStateChanged" }, ngImport: i0, template: "<div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <p-selectButton\n *ngIf=\"viewingLayouts.length > 1\"\n [options]=\"viewingLayouts\"\n [(ngModel)]=\"selectedViewLayout\"\n optionLabel=\"
|
|
59
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: DataLayoutSelectionComponent, selector: "ocx-data-layout-selection", inputs: { supportedViewLayouts: "supportedViewLayouts", layout: "layout" }, outputs: { dataViewLayoutChange: "dataViewLayoutChange", componentStateChanged: "componentStateChanged" }, ngImport: i0, template: "<div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <p-selectButton\n *ngIf=\"viewingLayouts.length > 1\"\n [options]=\"viewingLayouts\"\n [(ngModel)]=\"selectedViewLayout\"\n optionLabel=\"id\"\n (onChange)=\"onDataViewLayoutChange($event.value)\"\n >\n <ng-template let-item pTemplate>\n <i [class]=\"item.icon\" [pTooltip]=\"item.tooltip || (item.tooltipKey | translate)\" tooltipPosition=\"top\"></i>\n <label style=\"display: none\" id=\"{{item.id}}\">{{item.labelKey | translate}}</label>\n </ng-template>\n </p-selectButton>\n</div>\n", styles: ["::ng-deep .p-buttonset .p-button{min-width:auto}::ng-deep .p-buttonset{display:flex}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.SelectButton, selector: "p-selectButton", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "unselectable", "tabindex", "multiple", "allowEmpty", "style", "styleClass", "ariaLabelledBy", "disabled", "dataKey", "autofocus"], outputs: ["onOptionClick", "onChange"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
|
|
42
60
|
}
|
|
43
61
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataLayoutSelectionComponent, decorators: [{
|
|
44
62
|
type: Component,
|
|
45
|
-
args: [{ selector: 'ocx-data-layout-selection', template: "<div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <p-selectButton\n *ngIf=\"viewingLayouts.length > 1\"\n [options]=\"viewingLayouts\"\n [(ngModel)]=\"selectedViewLayout\"\n optionLabel=\"
|
|
63
|
+
args: [{ selector: 'ocx-data-layout-selection', template: "<div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <p-selectButton\n *ngIf=\"viewingLayouts.length > 1\"\n [options]=\"viewingLayouts\"\n [(ngModel)]=\"selectedViewLayout\"\n optionLabel=\"id\"\n (onChange)=\"onDataViewLayoutChange($event.value)\"\n >\n <ng-template let-item pTemplate>\n <i [class]=\"item.icon\" [pTooltip]=\"item.tooltip || (item.tooltipKey | translate)\" tooltipPosition=\"top\"></i>\n <label style=\"display: none\" id=\"{{item.id}}\">{{item.labelKey | translate}}</label>\n </ng-template>\n </p-selectButton>\n</div>\n", styles: ["::ng-deep .p-buttonset .p-button{min-width:auto}::ng-deep .p-buttonset{display:flex}\n"] }]
|
|
46
64
|
}], propDecorators: { supportedViewLayouts: [{
|
|
47
65
|
type: Input
|
|
48
66
|
}], layout: [{
|
|
@@ -52,4 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
|
|
|
52
70
|
}], componentStateChanged: [{
|
|
53
71
|
type: Output
|
|
54
72
|
}] } });
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1sYXlvdXQtc2VsZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1hY2NlbGVyYXRvci9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1sYXlvdXQtc2VsZWN0aW9uL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi9kYXRhLWxheW91dC1zZWxlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFBOzs7Ozs7OztBQWF4QyxNQUFNLGdCQUFnQixHQUFxQjtJQUN6QztRQUNFLEVBQUUsRUFBRSxnQ0FBZ0M7UUFDcEMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1FBQ3JCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsVUFBVSxFQUFFLHVDQUF1QztRQUNuRCxRQUFRLEVBQUUsdUNBQXVDO0tBQ2xEO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsZ0NBQWdDO1FBQ3BDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUTtRQUN6QixNQUFNLEVBQUUsTUFBTTtRQUNkLFVBQVUsRUFBRSx1Q0FBdUM7UUFDbkQsUUFBUSxFQUFFLHVDQUF1QztLQUNsRDtJQUNEO1FBQ0UsRUFBRSxFQUFFLGlDQUFpQztRQUNyQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdEIsTUFBTSxFQUFFLE9BQU87UUFDZixVQUFVLEVBQUUsd0NBQXdDO1FBQ3BELFFBQVEsRUFBRSx3Q0FBd0M7S0FDbkQ7Q0FDRixDQUFBO0FBVUQsTUFBTSxPQUFPLDRCQUE0QjtJQUx6QztRQU1XLHlCQUFvQixHQUFrQixFQUFFLENBQUE7UUFTdkMseUJBQW9CLEdBQTRDLElBQUksWUFBWSxFQUFFLENBQUE7UUFDbEYsMEJBQXFCLEdBQW9ELElBQUksWUFBWSxFQUFFLENBQUE7UUFFckcsbUJBQWMsR0FBcUIsRUFBRSxDQUFBO0tBZ0J0QztJQTNCQyxJQUNJLE1BQU0sQ0FBQyxLQUFnQztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFDRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLElBQUksT0FBTyxDQUFBO0lBQ25ELENBQUM7SUFRRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDcEcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQTZEO1FBQ2xGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDOUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1NBQ3JCLENBQUMsQ0FBQTtJQUNKLENBQUM7OEdBNUJVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLHdQQzlDekMsb21CQWNBOzsyRkRnQ2EsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDJCQUEyQjs4QkFLNUIsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVGLE1BQU07c0JBRFQsS0FBSztnQkFRSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBQcmltZUljb25zIH0gZnJvbSAncHJpbWVuZy9hcGknXG5pbXBvcnQgeyBQcmltZUljb24gfSBmcm9tICcuLi8uLi91dGlscy9wcmltZWljb24udXRpbHMnXG5cbmludGVyZmFjZSBWaWV3aW5nTGF5b3V0cyB7XG4gIGlkOiBzdHJpbmdcbiAgaWNvbjogUHJpbWVJY29uXG4gIGxheW91dDogJ2dyaWQnIHwgJ2xpc3QnIHwgJ3RhYmxlJ1xuICB0b29sdGlwPzogc3RyaW5nXG4gIHRvb2x0aXBLZXk6IHN0cmluZ1xuICBsYWJlbD86IHN0cmluZ1xuICBsYWJlbEtleTogc3RyaW5nXG59XG5cbmNvbnN0IEFMTF9WSUVXX0xBWU9VVFM6IFZpZXdpbmdMYXlvdXRzW10gPSBbXG4gIHtcbiAgICBpZDogJ29jeC1kYXRhLWxheW91dC1zZWxlY3Rpb24tbGlzdCcsXG4gICAgaWNvbjogUHJpbWVJY29ucy5MSVNULFxuICAgIGxheW91dDogJ2xpc3QnLFxuICAgIHRvb2x0aXBLZXk6ICdPQ1hfREFUQV9MQVlPVVRfU0VMRUNUSU9OLkxBWU9VVC5MSVNUJyxcbiAgICBsYWJlbEtleTogJ09DWF9EQVRBX0xBWU9VVF9TRUxFQ1RJT04uTEFZT1VULkxJU1QnLFxuICB9LFxuICB7XG4gICAgaWQ6ICdvY3gtZGF0YS1sYXlvdXQtc2VsZWN0aW9uLWdyaWQnLFxuICAgIGljb246IFByaW1lSWNvbnMuVEhfTEFSR0UsXG4gICAgbGF5b3V0OiAnZ3JpZCcsXG4gICAgdG9vbHRpcEtleTogJ09DWF9EQVRBX0xBWU9VVF9TRUxFQ1RJT04uTEFZT1VULkdSSUQnLFxuICAgIGxhYmVsS2V5OiAnT0NYX0RBVEFfTEFZT1VUX1NFTEVDVElPTi5MQVlPVVQuR1JJRCcsXG4gIH0sXG4gIHtcbiAgICBpZDogJ29jeC1kYXRhLWxheW91dC1zZWxlY3Rpb24tdGFibGUnLFxuICAgIGljb246IFByaW1lSWNvbnMuVEFCTEUsXG4gICAgbGF5b3V0OiAndGFibGUnLFxuICAgIHRvb2x0aXBLZXk6ICdPQ1hfREFUQV9MQVlPVVRfU0VMRUNUSU9OLkxBWU9VVC5UQUJMRScsXG4gICAgbGFiZWxLZXk6ICdPQ1hfREFUQV9MQVlPVVRfU0VMRUNUSU9OLkxBWU9VVC5UQUJMRScsXG4gIH0sXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlIHtcbiAgbGF5b3V0PzogJ2dyaWQnIHwgJ2xpc3QnIHwgJ3RhYmxlJ1xufVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2N4LWRhdGEtbGF5b3V0LXNlbGVjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWxheW91dC1zZWxlY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLWxheW91dC1zZWxlY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN1cHBvcnRlZFZpZXdMYXlvdXRzOiBBcnJheTxzdHJpbmc+ID0gW11cbiAgQElucHV0KClcbiAgc2V0IGxheW91dCh2YWx1ZTogJ2dyaWQnIHwgJ2xpc3QnIHwgJ3RhYmxlJykge1xuICAgIHRoaXMuc2VsZWN0ZWRWaWV3TGF5b3V0ID0gQUxMX1ZJRVdfTEFZT1VUUy5maW5kKCh2KSA9PiB2LmxheW91dCA9PT0gdmFsdWUpXG4gIH1cbiAgZ2V0IGxheW91dCgpOiAnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZpZXdMYXlvdXQ/LmxheW91dCB8fCAndGFibGUnXG4gIH1cblxuICBAT3V0cHV0KCkgZGF0YVZpZXdMYXlvdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjwnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgY29tcG9uZW50U3RhdGVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8RGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIHZpZXdpbmdMYXlvdXRzOiBWaWV3aW5nTGF5b3V0c1tdID0gW11cbiAgc2VsZWN0ZWRWaWV3TGF5b3V0OiBWaWV3aW5nTGF5b3V0cyB8IHVuZGVmaW5lZFxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmlld2luZ0xheW91dHMgPSBBTExfVklFV19MQVlPVVRTLmZpbHRlcigodmwpID0+IHRoaXMuc3VwcG9ydGVkVmlld0xheW91dHMuaW5jbHVkZXModmwubGF5b3V0KSlcbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlQ2hhbmdlZC5lbWl0KHtcbiAgICAgIGxheW91dDogdGhpcy5sYXlvdXQsXG4gICAgfSlcbiAgfVxuXG4gIG9uRGF0YVZpZXdMYXlvdXRDaGFuZ2UoZXZlbnQ6IHsgaWNvbjogUHJpbWVJY29uOyBsYXlvdXQ6ICdncmlkJyB8ICdsaXN0JyB8ICd0YWJsZScgfSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVZpZXdMYXlvdXRDaGFuZ2UuZW1pdChldmVudC5sYXlvdXQpXG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICBsYXlvdXQ6IGV2ZW50LmxheW91dCxcbiAgICB9KVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHB5LTEgZ2FwLTJcIj5cbiAgPHAtc2VsZWN0QnV0dG9uXG4gICAgKm5nSWY9XCJ2aWV3aW5nTGF5b3V0cy5sZW5ndGggPiAxXCJcbiAgICBbb3B0aW9uc109XCJ2aWV3aW5nTGF5b3V0c1wiXG4gICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZpZXdMYXlvdXRcIlxuICAgIG9wdGlvbkxhYmVsPVwiaWRcIlxuICAgIChvbkNoYW5nZSk9XCJvbkRhdGFWaWV3TGF5b3V0Q2hhbmdlKCRldmVudC52YWx1ZSlcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT5cbiAgICAgIDxpIFtjbGFzc109XCJpdGVtLmljb25cIiBbcFRvb2x0aXBdPVwiaXRlbS50b29sdGlwIHx8IChpdGVtLnRvb2x0aXBLZXkgfCB0cmFuc2xhdGUpXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9pPlxuICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIGlkPVwie3tpdGVtLmlkfX1cIj57e2l0ZW0ubGFiZWxLZXkgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXNlbGVjdEJ1dHRvbj5cbjwvZGl2PlxuIl19
|