cilog-lib 1.10.21 → 1.10.23

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.
Files changed (44) hide show
  1. package/esm2022/cilog-lib.mjs +5 -0
  2. package/esm2022/lib/cilog-lib.component.mjs +22 -0
  3. package/esm2022/lib/cilog-lib.module.mjs +96 -0
  4. package/esm2022/lib/cilog-lib.service.mjs +14 -0
  5. package/esm2022/lib/helpers/enums/grille.enum.mjs +51 -0
  6. package/esm2022/lib/helpers/interfaces/edition.interface.mjs +2 -0
  7. package/esm2022/lib/helpers/interfaces/editor.interface.mjs +2 -0
  8. package/esm2022/lib/helpers/interfaces/grille.interface.mjs +2 -0
  9. package/esm2022/lib/helpers/interfaces/message.interface.mjs +2 -0
  10. package/esm2022/lib/helpers/pipes/value.pipe.mjs +27 -0
  11. package/esm2022/lib/modules/primeng.module.mjs +86 -0
  12. package/esm2022/lib/services/excel.service.mjs +184 -0
  13. package/esm2022/lib/services/message.service.mjs +30 -0
  14. package/esm2022/lib/services/table.service.mjs +14 -0
  15. package/esm2022/lib/views/cilog-input-number/cilog-input-number.component.mjs +251 -0
  16. package/esm2022/lib/views/documentation/documentation-contextuelle.component.mjs +156 -0
  17. package/esm2022/lib/views/editor/editor.component.mjs +38 -0
  18. package/esm2022/lib/views/message/message.component.mjs +77 -0
  19. package/esm2022/lib/views/table/table.component.mjs +675 -0
  20. package/esm2022/public-api.mjs +24 -0
  21. package/fesm2022/cilog-lib.mjs +103 -92
  22. package/fesm2022/cilog-lib.mjs.map +1 -1
  23. package/index.d.ts +5 -0
  24. package/lib/cilog-lib.component.d.ts +8 -0
  25. package/lib/cilog-lib.module.d.ts +21 -0
  26. package/lib/cilog-lib.service.d.ts +6 -0
  27. package/lib/helpers/enums/grille.enum.d.ts +44 -0
  28. package/lib/helpers/interfaces/edition.interface.d.ts +34 -0
  29. package/lib/helpers/interfaces/editor.interface.d.ts +4 -0
  30. package/lib/helpers/interfaces/grille.interface.d.ts +167 -0
  31. package/lib/helpers/interfaces/message.interface.d.ts +6 -0
  32. package/lib/helpers/pipes/value.pipe.d.ts +7 -0
  33. package/lib/modules/primeng.module.d.ts +24 -0
  34. package/lib/services/excel.service.d.ts +15 -0
  35. package/lib/services/message.service.d.ts +12 -0
  36. package/lib/services/table.service.d.ts +6 -0
  37. package/lib/views/cilog-input-number/cilog-input-number.component.d.ts +40 -0
  38. package/lib/views/documentation/documentation-contextuelle.component.d.ts +49 -0
  39. package/lib/views/editor/editor.component.d.ts +17 -0
  40. package/lib/views/message/message.component.d.ts +17 -0
  41. package/lib/views/table/table.component.d.ts +83 -0
  42. package/package.json +5 -3
  43. package/public-api.d.ts +15 -0
  44. package/types/cilog-lib.d.ts +0 -538
@@ -0,0 +1,38 @@
1
+ import { Output, ViewChild } from '@angular/core';
2
+ import { EventEmitter } from '@angular/core';
3
+ import { Input } from '@angular/core';
4
+ import { Component } from '@angular/core';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "primeng/editor";
7
+ import * as i2 from "@angular/forms";
8
+ export class CilogEditorComponent {
9
+ constructor() {
10
+ this.textChange = new EventEmitter();
11
+ this.onTextChange = new EventEmitter();
12
+ }
13
+ ngOnInit() {
14
+ }
15
+ change(event) {
16
+ this.textChange.emit(event.htmlValue);
17
+ this.onTextChange.emit({ htmlValue: event.htmlValue, textValue: event.textValue });
18
+ }
19
+ onSelectionChange(event) {
20
+ // NOTHING
21
+ }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CilogEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CilogEditorComponent, selector: "cilog-editor", inputs: { text: "text" }, outputs: { textChange: "textChange", onTextChange: "onTextChange" }, viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true }], ngImport: i0, template: "<p-editor #editor\r\n [(ngModel)]=\"text\"\r\n (onTextChange)=\"change($event)\">\r\n</p-editor>\r\n", styles: [""], dependencies: [{ kind: "component", type: i1.Editor, selector: "p-editor", inputs: ["style", "styleClass", "placeholder", "formats", "modules", "bounds", "scrollingContainer", "debug", "readonly"], outputs: ["onInit", "onTextChange", "onSelectionChange"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CilogEditorComponent, decorators: [{
26
+ type: Component,
27
+ args: [{ selector: 'cilog-editor', template: "<p-editor #editor\r\n [(ngModel)]=\"text\"\r\n (onTextChange)=\"change($event)\">\r\n</p-editor>\r\n" }]
28
+ }], ctorParameters: () => [], propDecorators: { text: [{
29
+ type: Input
30
+ }], textChange: [{
31
+ type: Output
32
+ }], onTextChange: [{
33
+ type: Output
34
+ }], editor: [{
35
+ type: ViewChild,
36
+ args: ['editor']
37
+ }] } });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NpbG9nLWxpYi9zcmMvbGliL3ZpZXdzL2VkaXRvci9lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2lsb2ctbGliL3NyYy9saWIvdmlld3MvZWRpdG9yL2VkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7OztBQVNsRCxNQUFNLE9BQU8sb0JBQW9CO0lBUzdCO1FBTlUsZUFBVSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTlELGlCQUFZLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO0lBSWhGLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSztRQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBSztRQUNuQixVQUFVO0lBQ2QsQ0FBQzsrR0FyQlEsb0JBQW9CO21HQUFwQixvQkFBb0IscVBDWmpDLHdIQUlBOzs0RkRRYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0ksY0FBYzt3REFNZixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVjLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJRWRpdG9yVGV4dENoYW5nZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW50ZXJmYWNlcy9lZGl0b3IuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAncHJpbWVuZy9lZGl0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NpbG9nLWVkaXRvcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2VkaXRvci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaWxvZ0VkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgQElucHV0KCkgdGV4dDogc3RyaW5nO1xyXG4gICAgQE91dHB1dCgpIHRleHRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uVGV4dENoYW5nZTogRXZlbnRFbWl0dGVyPElFZGl0b3JUZXh0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUVkaXRvclRleHRDaGFuZ2U+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZWRpdG9yJykgZWRpdG9yOiBFZGl0b3I7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnRleHRDaGFuZ2UuZW1pdChldmVudC5odG1sVmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25UZXh0Q2hhbmdlLmVtaXQoeyBodG1sVmFsdWU6IGV2ZW50Lmh0bWxWYWx1ZSwgdGV4dFZhbHVlOiBldmVudC50ZXh0VmFsdWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICAvLyBOT1RISU5HXHJcbiAgICB9XHJcbn1cclxuIiwiPHAtZWRpdG9yICNlZGl0b3JcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwidGV4dFwiXHJcbiAgICAgICAgICAob25UZXh0Q2hhbmdlKT1cImNoYW5nZSgkZXZlbnQpXCI+XHJcbjwvcC1lZGl0b3I+XHJcbiJdfQ==
@@ -0,0 +1,77 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/message.service";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "primeng/dialog";
6
+ import * as i4 from "primeng/api";
7
+ import * as i5 from "primeng/button";
8
+ export class CilogMessageComponent {
9
+ constructor(messageService) {
10
+ this.messageService = messageService;
11
+ }
12
+ ngOnInit() {
13
+ this.display = false;
14
+ this.messageService.message.subscribe(message => {
15
+ if (message != null) {
16
+ this.message = message;
17
+ }
18
+ });
19
+ this.messageService.display.subscribe(display => {
20
+ if (display != null) {
21
+ this.display = display;
22
+ }
23
+ });
24
+ }
25
+ headerBySeverity() {
26
+ if (this.message != null) {
27
+ switch (this.message.severity) {
28
+ case 'warn':
29
+ return 'Attention';
30
+ case 'error':
31
+ return 'Erreur';
32
+ case 'success':
33
+ return 'Succès';
34
+ case 'info':
35
+ return 'Information';
36
+ }
37
+ }
38
+ }
39
+ iconBySeverity() {
40
+ if (this.message != null) {
41
+ switch (this.message.severity) {
42
+ case 'warn':
43
+ return 'pi-exclamation-triangle';
44
+ case 'error':
45
+ return 'pi-exclamation-circle';
46
+ case 'success':
47
+ return 'pi-check';
48
+ case 'info':
49
+ return 'pi-info-circle';
50
+ }
51
+ }
52
+ }
53
+ classBySeverity() {
54
+ if (this.message != null) {
55
+ switch (this.message.severity) {
56
+ case 'warn':
57
+ return 'message_warn';
58
+ case 'error':
59
+ return 'message_error';
60
+ case 'success':
61
+ return 'message_success';
62
+ case 'info':
63
+ return 'message_info';
64
+ }
65
+ }
66
+ }
67
+ refreshPage() {
68
+ window.location.reload();
69
+ }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CilogMessageComponent, deps: [{ token: i1.CilogMessageService }], target: i0.ɵɵFactoryTarget.Component }); }
71
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CilogMessageComponent, selector: "cilog-message", ngImport: i0, template: "<p-dialog [styleClass]=\"classBySeverity()\"\r\n [(visible)]=\"display\"\r\n [modal]=\"true\"\r\n [baseZIndex]=\"10000\"\r\n [closable]=\"false\"\r\n [resizable]=\"false\"\r\n [draggable]=\"false\">\r\n\r\n <!-- Header -->\r\n <ng-template pTemplate=\"header\">\r\n <i class=\"pi {{ iconBySeverity() }} header_icon\"></i>\r\n <span class=\"header_text\">{{ headerBySeverity() }}</span>\r\n </ng-template>\r\n\r\n <!-- Content -->\r\n <p class=\"content mb-3\"\r\n [innerHTML]=\"message?.content\">\r\n </p>\r\n\r\n <!-- Boutons -->\r\n <button pButton\r\n *ngIf=\"message?.closable == true && message?.refresh == false\"\r\n icon=\"pi pi-check\"\r\n (click)=\"display=false\"\r\n label=\"Ok\"\r\n style=\"float:right;\"\r\n class=\"p-button-text\">\r\n </button>\r\n <button pButton\r\n *ngIf=\"message?.refresh == true\"\r\n icon=\"pi pi-refresh\"\r\n (click)=\"refreshPage()\"\r\n label=\"Rafra\u00EEchir\"\r\n style=\"float:right;\"\r\n class=\"p-button-text\">\r\n </button>\r\n\r\n</p-dialog>\r\n", styles: [":host ::ng-deep .message_success>div{background-color:#b7fdc0}:host ::ng-deep .message_error>div{background-color:#fdb8b7}:host ::ng-deep .message_warn>div{background-color:#fff5ba}:host ::ng-deep .message_info>div{background-color:#b7eefd}:host ::ng-deep .p-dialog-content,:host ::ng-deep .p-dialog-footer,:host ::ng-deep .p-dialog-header{padding:10px}:host ::ng-deep .content{margin:4px;white-space:pre}:host ::ng-deep .p-button-text{padding-top:0;padding-bottom:3px}:host ::ng-deep .header_text{font-weight:500;font-size:1.25rem;margin-left:10px}:host ::ng-deep .header_icon{font-size:1.5rem}:host ::ng-deep .p-dialog-header{justify-content:inherit}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }] }); }
72
+ }
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CilogMessageComponent, decorators: [{
74
+ type: Component,
75
+ args: [{ selector: 'cilog-message', template: "<p-dialog [styleClass]=\"classBySeverity()\"\r\n [(visible)]=\"display\"\r\n [modal]=\"true\"\r\n [baseZIndex]=\"10000\"\r\n [closable]=\"false\"\r\n [resizable]=\"false\"\r\n [draggable]=\"false\">\r\n\r\n <!-- Header -->\r\n <ng-template pTemplate=\"header\">\r\n <i class=\"pi {{ iconBySeverity() }} header_icon\"></i>\r\n <span class=\"header_text\">{{ headerBySeverity() }}</span>\r\n </ng-template>\r\n\r\n <!-- Content -->\r\n <p class=\"content mb-3\"\r\n [innerHTML]=\"message?.content\">\r\n </p>\r\n\r\n <!-- Boutons -->\r\n <button pButton\r\n *ngIf=\"message?.closable == true && message?.refresh == false\"\r\n icon=\"pi pi-check\"\r\n (click)=\"display=false\"\r\n label=\"Ok\"\r\n style=\"float:right;\"\r\n class=\"p-button-text\">\r\n </button>\r\n <button pButton\r\n *ngIf=\"message?.refresh == true\"\r\n icon=\"pi pi-refresh\"\r\n (click)=\"refreshPage()\"\r\n label=\"Rafra\u00EEchir\"\r\n style=\"float:right;\"\r\n class=\"p-button-text\">\r\n </button>\r\n\r\n</p-dialog>\r\n", styles: [":host ::ng-deep .message_success>div{background-color:#b7fdc0}:host ::ng-deep .message_error>div{background-color:#fdb8b7}:host ::ng-deep .message_warn>div{background-color:#fff5ba}:host ::ng-deep .message_info>div{background-color:#b7eefd}:host ::ng-deep .p-dialog-content,:host ::ng-deep .p-dialog-footer,:host ::ng-deep .p-dialog-header{padding:10px}:host ::ng-deep .content{margin:4px;white-space:pre}:host ::ng-deep .p-button-text{padding-top:0;padding-bottom:3px}:host ::ng-deep .header_text{font-weight:500;font-size:1.25rem;margin-left:10px}:host ::ng-deep .header_icon{font-size:1.5rem}:host ::ng-deep .p-dialog-header{justify-content:inherit}\n"] }]
76
+ }], ctorParameters: () => [{ type: i1.CilogMessageService }] });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaWxvZy1saWIvc3JjL2xpYi92aWV3cy9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2lsb2ctbGliL3NyYy9saWIvdmlld3MvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFPbEQsTUFBTSxPQUFPLHFCQUFxQjtJQUs5QixZQUFtQixjQUFtQztRQUFuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBcUI7SUFBSSxDQUFDO0lBRTNELFFBQVE7UUFDSixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUVyQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QyxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDM0IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzVCLEtBQUssTUFBTTtvQkFDUCxPQUFPLFdBQVcsQ0FBQztnQkFDdkIsS0FBSyxPQUFPO29CQUNSLE9BQU8sUUFBUSxDQUFBO2dCQUNuQixLQUFLLFNBQVM7b0JBQ1YsT0FBTyxRQUFRLENBQUE7Z0JBQ25CLEtBQUssTUFBTTtvQkFDUCxPQUFPLGFBQWEsQ0FBQTtZQUM1QixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsS0FBSyxNQUFNO29CQUNQLE9BQU8seUJBQXlCLENBQUM7Z0JBQ3JDLEtBQUssT0FBTztvQkFDUixPQUFPLHVCQUF1QixDQUFBO2dCQUNsQyxLQUFLLFNBQVM7b0JBQ1YsT0FBTyxVQUFVLENBQUE7Z0JBQ3JCLEtBQUssTUFBTTtvQkFDUCxPQUFPLGdCQUFnQixDQUFBO1lBQy9CLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixLQUFLLE1BQU07b0JBQ1AsT0FBTyxjQUFjLENBQUM7Z0JBQzFCLEtBQUssT0FBTztvQkFDUixPQUFPLGVBQWUsQ0FBQTtnQkFDMUIsS0FBSyxTQUFTO29CQUNWLE9BQU8saUJBQWlCLENBQUE7Z0JBQzVCLEtBQUssTUFBTTtvQkFDUCxPQUFPLGNBQWMsQ0FBQTtZQUM3QixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDOytHQXRFUSxxQkFBcUI7bUdBQXJCLHFCQUFxQixxRENUbEMsMHRDQXNDQTs7NEZEN0JhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDSSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2lsb2dNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IElNZXNzYWdlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9pbnRlcmZhY2VzL21lc3NhZ2UuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjaWxvZy1tZXNzYWdlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL21lc3NhZ2UuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2lsb2dNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBkaXNwbGF5OiBib29sZWFuO1xyXG4gICAgbWVzc2FnZTogSU1lc3NhZ2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIG1lc3NhZ2VTZXJ2aWNlOiBDaWxvZ01lc3NhZ2VTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5tZXNzYWdlLnN1YnNjcmliZShtZXNzYWdlID0+IHtcclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmRpc3BsYXkuc3Vic2NyaWJlKGRpc3BsYXkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGlzcGxheSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXkgPSBkaXNwbGF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGVhZGVyQnlTZXZlcml0eSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMubWVzc2FnZS5zZXZlcml0eSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnd2Fybic6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdBdHRlbnRpb24nO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnRXJyZXVyJ1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc3VjY2Vzcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdTdWNjw6hzJ1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnaW5mbyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdJbmZvcm1hdGlvbidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpY29uQnlTZXZlcml0eSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMubWVzc2FnZS5zZXZlcml0eSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnd2Fybic6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdwaS1leGNsYW1hdGlvbi10cmlhbmdsZSc7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdwaS1leGNsYW1hdGlvbi1jaXJjbGUnXHJcbiAgICAgICAgICAgICAgICBjYXNlICdzdWNjZXNzJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3BpLWNoZWNrJ1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnaW5mbyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdwaS1pbmZvLWNpcmNsZSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGFzc0J5U2V2ZXJpdHkoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLm1lc3NhZ2Uuc2V2ZXJpdHkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3dhcm4nOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnbWVzc2FnZV93YXJuJztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ21lc3NhZ2VfZXJyb3InXHJcbiAgICAgICAgICAgICAgICBjYXNlICdzdWNjZXNzJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ21lc3NhZ2Vfc3VjY2VzcydcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2luZm8nOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnbWVzc2FnZV9pbmZvJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZnJlc2hQYWdlKCkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgIH1cclxufVxyXG4iLCI8cC1kaWFsb2cgW3N0eWxlQ2xhc3NdPVwiY2xhc3NCeVNldmVyaXR5KClcIlxyXG4gICAgICAgICAgWyh2aXNpYmxlKV09XCJkaXNwbGF5XCJcclxuICAgICAgICAgIFttb2RhbF09XCJ0cnVlXCJcclxuICAgICAgICAgIFtiYXNlWkluZGV4XT1cIjEwMDAwXCJcclxuICAgICAgICAgIFtjbG9zYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICBbcmVzaXphYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZmFsc2VcIj5cclxuXHJcbiAgICA8IS0tIEhlYWRlciAtLT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInBpIHt7IGljb25CeVNldmVyaXR5KCkgfX0gaGVhZGVyX2ljb25cIj48L2k+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXJfdGV4dFwiPnt7IGhlYWRlckJ5U2V2ZXJpdHkoKSB9fTwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPCEtLSBDb250ZW50IC0tPlxyXG4gICAgPHAgY2xhc3M9XCJjb250ZW50IG1iLTNcIlxyXG4gICAgICAgW2lubmVySFRNTF09XCJtZXNzYWdlPy5jb250ZW50XCI+XHJcbiAgICA8L3A+XHJcblxyXG4gICAgPCEtLSBCb3V0b25zIC0tPlxyXG4gICAgPGJ1dHRvbiBwQnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZT8uY2xvc2FibGUgPT0gdHJ1ZSAmJiBtZXNzYWdlPy5yZWZyZXNoID09IGZhbHNlXCJcclxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNoZWNrXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXk9ZmFsc2VcIlxyXG4gICAgICAgICAgICBsYWJlbD1cIk9rXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJmbG9hdDpyaWdodDtcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHRcIj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBwQnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZT8ucmVmcmVzaCA9PSB0cnVlXCJcclxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLXJlZnJlc2hcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicmVmcmVzaFBhZ2UoKVwiXHJcbiAgICAgICAgICAgIGxhYmVsPVwiUmFmcmHDrmNoaXJcIlxyXG4gICAgICAgICAgICBzdHlsZT1cImZsb2F0OnJpZ2h0O1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG48L3AtZGlhbG9nPlxyXG4iXX0=