ngx-redi-core 0.0.0-watch

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 (93) hide show
  1. package/Helper/index.d.ts +5 -0
  2. package/Helper/package.json +3 -0
  3. package/Helper/public-api.d.ts +3 -0
  4. package/Helper/src/helpers/bag-data-subject.service.d.ts +43 -0
  5. package/Helper/src/helpers/csv.service.d.ts +33 -0
  6. package/Helper/src/helpers/data-subject.service.d.ts +32 -0
  7. package/Helper/src/models/interfaces/data-subject.interface.d.ts +6 -0
  8. package/README.md +24 -0
  9. package/RediDragDrop/index.d.ts +5 -0
  10. package/RediDragDrop/package.json +3 -0
  11. package/RediDragDrop/public-api.d.ts +4 -0
  12. package/RediDragDrop/src/models/classes/proceso-archivo-csv.d.ts +29 -0
  13. package/RediDragDrop/src/models/directives/drag-drop.directive.d.ts +43 -0
  14. package/RediDragDrop/src/modules/redi-drag-drop/redi-drag-drop.component.d.ts +188 -0
  15. package/RediDragDrop/src/modules/redi-drag-drop.module.d.ts +13 -0
  16. package/RediGrid/index.d.ts +5 -0
  17. package/RediGrid/package.json +3 -0
  18. package/RediGrid/public-api.d.ts +4 -0
  19. package/RediGrid/src/models/interfaces/cell.d.ts +37 -0
  20. package/RediGrid/src/models/interfaces/data-grid.d.ts +30 -0
  21. package/RediGrid/src/modules/redi-grid/redi-grid.component.d.ts +92 -0
  22. package/RediGrid/src/modules/redi-grid.module.d.ts +14 -0
  23. package/RediTable/index.d.ts +5 -0
  24. package/RediTable/package.json +3 -0
  25. package/RediTable/public-api.d.ts +6 -0
  26. package/RediTable/src/components/filter-data/filter-data.component.d.ts +23 -0
  27. package/RediTable/src/components/redi-table/redi-table.component.d.ts +139 -0
  28. package/RediTable/src/models/interfaces/column-definition.d.ts +18 -0
  29. package/RediTable/src/models/interfaces/data-table.d.ts +24 -0
  30. package/RediTable/src/models/interfaces/filter-item.d.ts +5 -0
  31. package/RediTable/src/models/interfaces/row-action.d.ts +24 -0
  32. package/RediTable/src/models/types/event-table.type.d.ts +5 -0
  33. package/Security/index.d.ts +5 -0
  34. package/Security/package.json +3 -0
  35. package/Security/public-api.d.ts +6 -0
  36. package/Security/src/modules/security-web-intercept/interceptors/redi-secure.interceptor.d.ts +39 -0
  37. package/Security/src/modules/security-web-intercept/models/secure-factory.model.d.ts +10 -0
  38. package/Security/src/modules/security-web-intercept/services/cifrado-basico.service.d.ts +14 -0
  39. package/Security/src/modules/security-web-intercept/services/cifrado.service.d.ts +21 -0
  40. package/Security/src/modules/security-web-intercept/services/reflection.service.d.ts +58 -0
  41. package/Security/src/modules/security.module.d.ts +11 -0
  42. package/esm2022/Helper/ngx-redi-core-Helper.mjs +5 -0
  43. package/esm2022/Helper/public-api.mjs +4 -0
  44. package/esm2022/Helper/src/helpers/bag-data-subject.service.mjs +61 -0
  45. package/esm2022/Helper/src/helpers/csv.service.mjs +69 -0
  46. package/esm2022/Helper/src/helpers/data-subject.service.mjs +34 -0
  47. package/esm2022/Helper/src/models/interfaces/data-subject.interface.mjs +2 -0
  48. package/esm2022/RediDragDrop/ngx-redi-core-RediDragDrop.mjs +5 -0
  49. package/esm2022/RediDragDrop/public-api.mjs +5 -0
  50. package/esm2022/RediDragDrop/src/models/classes/proceso-archivo-csv.mjs +132 -0
  51. package/esm2022/RediDragDrop/src/models/directives/drag-drop.directive.mjs +95 -0
  52. package/esm2022/RediDragDrop/src/modules/redi-drag-drop/redi-drag-drop.component.mjs +369 -0
  53. package/esm2022/RediDragDrop/src/modules/redi-drag-drop.module.mjs +34 -0
  54. package/esm2022/RediGrid/ngx-redi-core-RediGrid.mjs +5 -0
  55. package/esm2022/RediGrid/public-api.mjs +5 -0
  56. package/esm2022/RediGrid/src/models/interfaces/cell.mjs +2 -0
  57. package/esm2022/RediGrid/src/models/interfaces/data-grid.mjs +2 -0
  58. package/esm2022/RediGrid/src/modules/redi-grid/redi-grid.component.mjs +159 -0
  59. package/esm2022/RediGrid/src/modules/redi-grid.module.mjs +34 -0
  60. package/esm2022/RediTable/ngx-redi-core-RediTable.mjs +5 -0
  61. package/esm2022/RediTable/public-api.mjs +9 -0
  62. package/esm2022/RediTable/src/components/filter-data/filter-data.component.mjs +84 -0
  63. package/esm2022/RediTable/src/components/redi-table/redi-table.component.mjs +404 -0
  64. package/esm2022/RediTable/src/models/interfaces/column-definition.mjs +2 -0
  65. package/esm2022/RediTable/src/models/interfaces/data-table.mjs +2 -0
  66. package/esm2022/RediTable/src/models/interfaces/filter-item.mjs +2 -0
  67. package/esm2022/RediTable/src/models/interfaces/row-action.mjs +2 -0
  68. package/esm2022/RediTable/src/models/types/event-table.type.mjs +2 -0
  69. package/esm2022/Security/ngx-redi-core-Security.mjs +5 -0
  70. package/esm2022/Security/public-api.mjs +7 -0
  71. package/esm2022/Security/src/modules/security-web-intercept/interceptors/redi-secure.interceptor.mjs +88 -0
  72. package/esm2022/Security/src/modules/security-web-intercept/models/secure-factory.model.mjs +27 -0
  73. package/esm2022/Security/src/modules/security-web-intercept/services/cifrado-basico.service.mjs +51 -0
  74. package/esm2022/Security/src/modules/security-web-intercept/services/cifrado.service.mjs +33 -0
  75. package/esm2022/Security/src/modules/security-web-intercept/services/reflection.service.mjs +122 -0
  76. package/esm2022/Security/src/modules/security.module.mjs +23 -0
  77. package/esm2022/ngx-redi-core.mjs +5 -0
  78. package/esm2022/public-api.mjs +8 -0
  79. package/fesm2022/ngx-redi-core-Helper.mjs +166 -0
  80. package/fesm2022/ngx-redi-core-Helper.mjs.map +1 -0
  81. package/fesm2022/ngx-redi-core-RediDragDrop.mjs +628 -0
  82. package/fesm2022/ngx-redi-core-RediDragDrop.mjs.map +1 -0
  83. package/fesm2022/ngx-redi-core-RediGrid.mjs +196 -0
  84. package/fesm2022/ngx-redi-core-RediGrid.mjs.map +1 -0
  85. package/fesm2022/ngx-redi-core-RediTable.mjs +496 -0
  86. package/fesm2022/ngx-redi-core-RediTable.mjs.map +1 -0
  87. package/fesm2022/ngx-redi-core-Security.mjs +339 -0
  88. package/fesm2022/ngx-redi-core-Security.mjs.map +1 -0
  89. package/fesm2022/ngx-redi-core.mjs +14 -0
  90. package/fesm2022/ngx-redi-core.mjs.map +1 -0
  91. package/index.d.ts +5 -0
  92. package/package.json +57 -0
  93. package/public-api.d.ts +4 -0
@@ -0,0 +1,159 @@
1
+ import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
2
+ import { Component, Input, ViewChild } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "ngx-redi-core/Helper";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/cdk/scrolling";
7
+ import * as i4 from "@angular/material/icon";
8
+ /**
9
+ * Componente que representa los datos en un grid
10
+ * @decorators `@Component()`
11
+ */
12
+ export class RediGridComponent {
13
+ /**
14
+ * Constructor del grid
15
+ * @param csv - Servicio CSV
16
+ */
17
+ constructor(csv) {
18
+ this.csv = csv;
19
+ this.data = {};
20
+ this.enumerar = false;
21
+ this.editable = false;
22
+ }
23
+ /**
24
+ * Método de inicialización de visualización
25
+ */
26
+ ngOnInit() {
27
+ if (this.data) {
28
+ this.editable = this.data.editable || false;
29
+ this.enumerar = this.data.enumerable || false;
30
+ }
31
+ }
32
+ /**
33
+ * Método que invierte la ubicación del objeto renderizado
34
+ * @returns Regresa la ubicación invertida en modo texto
35
+ */
36
+ get invertirUbicacion() {
37
+ if (!this.viewPort || !this.viewPort['_renderedContentOffset']) {
38
+ return '-0px';
39
+ }
40
+ const offset = this.viewPort['_renderedContentOffset'];
41
+ return `-${offset}px`;
42
+ }
43
+ /**
44
+ * Método que valida si una columna esta bloqueada
45
+ * @param numeroColumna - Numero de columna
46
+ * @returns True si la columna esta bloqueada
47
+ */
48
+ columnaBloqueada(numeroColumna) {
49
+ return this.data.bloquearColumnas !== undefined &&
50
+ this.data.bloquearColumnas.some(c => c === numeroColumna);
51
+ }
52
+ /**
53
+ * Método que valida si una columna es visible
54
+ * @param numeroColumna - Numero de columna
55
+ * @returns True si es visible
56
+ */
57
+ columnaVisible(numeroColumna) {
58
+ return !(this.data.ocultarColumnas !== undefined &&
59
+ this.data.ocultarColumnas.some(c => c === numeroColumna));
60
+ }
61
+ /**
62
+ * Método que actualiza los datos editados en el grid
63
+ * @param indiceFila - Contiene el indice de la fila editada
64
+ * @param indiceColumna - Contiene el indice de la columna editada
65
+ * @param valor - Contiene el valor de edición de celda
66
+ */
67
+ actualizarDatos(indiceFila, indiceColumna, valor) {
68
+ if (this.data && this.data.filas) {
69
+ const fila = this.data.filas[indiceFila][indiceColumna];
70
+ fila.editado = fila.valor !== valor || fila.editado;
71
+ if (fila.editado) {
72
+ fila.valor = valor;
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * Cambia el foco de las celdas
78
+ * @param event - KeyboardEvent
79
+ */
80
+ moverFoco(event) {
81
+ this.moverDeCelda(event.target, event.key, document.querySelectorAll('#cell'));
82
+ }
83
+ /**
84
+ * Realiza el movimiento de celdas por el teclado
85
+ * @param control - Control que desencadena el evento
86
+ * @param key - Tecla que desencadeno el evento
87
+ * @param nodesControls - Controles del grid
88
+ */
89
+ moverDeCelda(control, key, nodesControls) {
90
+ const index = Array.prototype.map.call(nodesControls, x => { return x; }).indexOf(control);
91
+ let changeFocus = true;
92
+ let newIndex = 0;
93
+ switch (key) {
94
+ case 'Enter':
95
+ case 'ArrowRight':
96
+ changeFocus = key === 'Enter' ||
97
+ control.selectionStart === control.value.length;
98
+ newIndex = index + 1;
99
+ break;
100
+ case 'ArrowLeft':
101
+ changeFocus = control.selectionStart === 0;
102
+ newIndex = index - 1;
103
+ break;
104
+ case 'ArrowUp':
105
+ newIndex = index - this.columnasHabilitadas();
106
+ break;
107
+ case 'ArrowDown':
108
+ newIndex = index + this.columnasHabilitadas();
109
+ break;
110
+ default:
111
+ changeFocus = false;
112
+ break;
113
+ }
114
+ if (changeFocus) {
115
+ this.obtenerControl(nodesControls, newIndex).focus();
116
+ }
117
+ }
118
+ /**
119
+ * Regresa el numero de columnas habilitadas dentro del grid
120
+ * @returns Numero de columnas habilitadas
121
+ */
122
+ columnasHabilitadas() {
123
+ return this.data.columnas.length - (this.data.bloquearColumnas?.length ?? 0);
124
+ }
125
+ /**
126
+ * Obtiene el control de un NodeList por indice
127
+ * @param nodes - Lista de nodos
128
+ * @param index - Indice del control
129
+ * @returns Control del indice especificado
130
+ */
131
+ obtenerControl(nodes, index) {
132
+ return nodes.item(index);
133
+ }
134
+ /**
135
+ * Descarga los datos contenidos en el Grid como un CSV
136
+ * @param archivo - Nombre del archivo
137
+ */
138
+ descargarCsv(archivo) {
139
+ const data = this.data.filas.map((f) => { return f.filter((c, i) => (c.serializable ?? true) && this.columnaVisible(i)).map((c) => c.valor); }).filter(d => d.length > 0);
140
+ data.unshift(this.data.columnas.filter((c, i) => (c.serializable ?? true) && this.columnaVisible(i)).map((c) => c.valor));
141
+ this.csv.descargarCsv(archivo, data);
142
+ }
143
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: RediGridComponent, deps: [{ token: i1.CsvService }], target: i0.ɵɵFactoryTarget.Component }); }
144
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: RediGridComponent, selector: "redi-grid", inputs: { data: "data", enumerar: "enumerar", editable: "editable" }, viewQueries: [{ propertyName: "viewPort", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<div class=\"container\">\r\n <!-- Contenedor principal del grid -->\r\n <cdk-virtual-scroll-viewport #scrollViewport itemSize=\"25\">\r\n <!-- Tabla de datos -->\r\n <table (keydown)=\"moverFoco($event)\">\r\n <caption> RediGridComponent </caption>\r\n <!-- Cabecera de tabla -->\r\n <thead>\r\n <!-- Definici\u00F3n de encabezados -->\r\n <tr>\r\n <th scope=\"col\" [style.top]=\"invertirUbicacion\" *ngIf=\"enumerar\">\r\n <th scope=\"col\" [style.top]=\"invertirUbicacion\" *ngFor=\"let col of data.columnas; let colNum=index\"\r\n [class.oculto]=\"!columnaVisible(colNum)\">\r\n <mat-icon *ngIf=\"columnaBloqueada(colNum)\" class=\"lockIcon\">lock</mat-icon>{{col.valor}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <!-- Cuerpo de tabla -->\r\n <tbody>\r\n <tr *cdkVirtualFor=\"let row of data.filas;let rowNum = index\">\r\n <!-- Contador de fila -->\r\n <td *ngIf=\"enumerar\"> {{ rowNum + 1 }} </td>\r\n <!-- Celdas de datos -->\r\n <td *ngFor=\"let cell of row; let colNum=index;\" [class.warn]=\"cell.esValido !== undefined && !cell.esValido\"\r\n [class.editado]=\"cell.editado\" [class.bloqueado]=\"cell.bloqueado || columnaBloqueada(colNum)\"\r\n [class.oculto]=\"!columnaVisible(colNum)\">\r\n <label for=\"cell\"> Value </label>\r\n <!-- Campo editable -->\r\n <input *ngIf=\"editable && !cell.bloqueado && !columnaBloqueada(colNum)\" type=\"text\" [value]=\"cell.valor\"\r\n name=\"cell\" id=\"cell\" (focusout)=\"actualizarDatos(rowNum,colNum,$any($event.target).value)\"\r\n [class.editado]=\"cell.editado\" />\r\n {{ !editable || cell.bloqueado || columnaBloqueada(colNum) ? cell.valor : '' }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </cdk-virtual-scroll-viewport>\r\n</div>", styles: [".container{border:1px solid #f4f4f4;overflow:auto;max-height:90vh;padding:0;box-shadow:#0000003d 0 3px 8px}.enumerable{width:10px}thead{text-align:center;color:#f9f9f9;height:1.9em}tbody{text-align:center;cursor:cell;color:#717171}input{text-align:center;color:#717171;border:none;background:transparent;outline:0;width:100%;padding:0}td{padding:3px;height:1.5em;border-right:solid 1px #e1e1e1;min-width:2em}tbody>tr:nth-child(2n){background-color:#f4f4f4}tbody>tr:hover{background-color:#cddce9;border:solid 1px #cddce9}thead>tr>th{position:sticky;top:0;border-right:solid 1px white;font-weight:400;background-color:#a5a5a5}tbody>tr>td:last-child,thead>tr>th:last-child{border-right:solid 0px}tbody>tr:last-child{border-bottom:solid 1px #e1e1e1}table{width:100%;-webkit-user-select:none;-ms-user-select:none;user-select:none;overflow:auto}.cdk-virtual-scrollable{min-height:400px}caption,label{display:none}.warn{border-bottom:solid 2px #F44336;border-top:solid 2px #F44336}tr>.warn:last-child{border-right:solid 2px #F44336}tr>.warn:first-child{border-left:solid 2px #F44336}.editado{color:#282;font-weight:600}.bloqueado{background-color:#f4f4f48d;color:#00000070}.oculto{display:none}.lockIcon{width:15px;height:15px;font-size:.8em;float:right}tbody>tr>td:focus-within{border:solid 1px #468b51bd;background:#9fd0fb6b}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
145
+ }
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: RediGridComponent, decorators: [{
147
+ type: Component,
148
+ args: [{ selector: 'redi-grid', template: "<div class=\"container\">\r\n <!-- Contenedor principal del grid -->\r\n <cdk-virtual-scroll-viewport #scrollViewport itemSize=\"25\">\r\n <!-- Tabla de datos -->\r\n <table (keydown)=\"moverFoco($event)\">\r\n <caption> RediGridComponent </caption>\r\n <!-- Cabecera de tabla -->\r\n <thead>\r\n <!-- Definici\u00F3n de encabezados -->\r\n <tr>\r\n <th scope=\"col\" [style.top]=\"invertirUbicacion\" *ngIf=\"enumerar\">\r\n <th scope=\"col\" [style.top]=\"invertirUbicacion\" *ngFor=\"let col of data.columnas; let colNum=index\"\r\n [class.oculto]=\"!columnaVisible(colNum)\">\r\n <mat-icon *ngIf=\"columnaBloqueada(colNum)\" class=\"lockIcon\">lock</mat-icon>{{col.valor}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <!-- Cuerpo de tabla -->\r\n <tbody>\r\n <tr *cdkVirtualFor=\"let row of data.filas;let rowNum = index\">\r\n <!-- Contador de fila -->\r\n <td *ngIf=\"enumerar\"> {{ rowNum + 1 }} </td>\r\n <!-- Celdas de datos -->\r\n <td *ngFor=\"let cell of row; let colNum=index;\" [class.warn]=\"cell.esValido !== undefined && !cell.esValido\"\r\n [class.editado]=\"cell.editado\" [class.bloqueado]=\"cell.bloqueado || columnaBloqueada(colNum)\"\r\n [class.oculto]=\"!columnaVisible(colNum)\">\r\n <label for=\"cell\"> Value </label>\r\n <!-- Campo editable -->\r\n <input *ngIf=\"editable && !cell.bloqueado && !columnaBloqueada(colNum)\" type=\"text\" [value]=\"cell.valor\"\r\n name=\"cell\" id=\"cell\" (focusout)=\"actualizarDatos(rowNum,colNum,$any($event.target).value)\"\r\n [class.editado]=\"cell.editado\" />\r\n {{ !editable || cell.bloqueado || columnaBloqueada(colNum) ? cell.valor : '' }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </cdk-virtual-scroll-viewport>\r\n</div>", styles: [".container{border:1px solid #f4f4f4;overflow:auto;max-height:90vh;padding:0;box-shadow:#0000003d 0 3px 8px}.enumerable{width:10px}thead{text-align:center;color:#f9f9f9;height:1.9em}tbody{text-align:center;cursor:cell;color:#717171}input{text-align:center;color:#717171;border:none;background:transparent;outline:0;width:100%;padding:0}td{padding:3px;height:1.5em;border-right:solid 1px #e1e1e1;min-width:2em}tbody>tr:nth-child(2n){background-color:#f4f4f4}tbody>tr:hover{background-color:#cddce9;border:solid 1px #cddce9}thead>tr>th{position:sticky;top:0;border-right:solid 1px white;font-weight:400;background-color:#a5a5a5}tbody>tr>td:last-child,thead>tr>th:last-child{border-right:solid 0px}tbody>tr:last-child{border-bottom:solid 1px #e1e1e1}table{width:100%;-webkit-user-select:none;-ms-user-select:none;user-select:none;overflow:auto}.cdk-virtual-scrollable{min-height:400px}caption,label{display:none}.warn{border-bottom:solid 2px #F44336;border-top:solid 2px #F44336}tr>.warn:last-child{border-right:solid 2px #F44336}tr>.warn:first-child{border-left:solid 2px #F44336}.editado{color:#282;font-weight:600}.bloqueado{background-color:#f4f4f48d;color:#00000070}.oculto{display:none}.lockIcon{width:15px;height:15px;font-size:.8em;float:right}tbody>tr>td:focus-within{border:solid 1px #468b51bd;background:#9fd0fb6b}\n"] }]
149
+ }], ctorParameters: () => [{ type: i1.CsvService }], propDecorators: { data: [{
150
+ type: Input
151
+ }], enumerar: [{
152
+ type: Input
153
+ }], editable: [{
154
+ type: Input
155
+ }], viewPort: [{
156
+ type: ViewChild,
157
+ args: [CdkVirtualScrollViewport, { static: false }]
158
+ }] } });
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWRpLWNvcmUvUmVkaUdyaWQvc3JjL21vZHVsZXMvcmVkaS1ncmlkL3JlZGktZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVkaS1jb3JlL1JlZGlHcmlkL3NyYy9tb2R1bGVzL3JlZGktZ3JpZC9yZWRpLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBTW5GOzs7R0FHRztBQU1ILE1BQU0sT0FBTyxpQkFBaUI7SUFtQjVCOzs7T0FHRztJQUNILFlBQW9CLEdBQWU7UUFBZixRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBYyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO1lBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBUUQ7OztPQUdHO0lBQ0gsSUFBVyxpQkFBaUI7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJ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QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7OEdBcktVLGlCQUFpQjtrR0FBakIsaUJBQWlCLGlLQTBDakIsd0JBQXdCLGdEQzFEckMsODZEQXFDTTs7MkZEckJPLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxXQUFXOytFQVNkLElBQUk7c0JBRFYsS0FBSztnQkFPQyxRQUFRO3NCQURkLEtBQUs7Z0JBT0MsUUFBUTtzQkFEZCxLQUFLO2dCQTJCQyxRQUFRO3NCQURkLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGFHcmlkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ludGVyZmFjZXMvZGF0YS1ncmlkJztcclxuaW1wb3J0IHsgQ3N2U2VydmljZSB9IGZyb20gJ25neC1yZWRpLWNvcmUvSGVscGVyJztcclxuaW1wb3J0IHsgQ2VsbCB9IGZyb20gJy4uLy4uL21vZGVscy9pbnRlcmZhY2VzL2NlbGwnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIHF1ZSByZXByZXNlbnRhIGxvcyBkYXRvcyBlbiB1biBncmlkXHJcbiAqIEBkZWNvcmF0b3JzIGBAQ29tcG9uZW50KClgXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JlZGktZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZGktZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVkaS1ncmlkLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVkaUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8qKlxyXG4gICAqIERhdG9zIGRlIG9yaWdlbiB5IGNvbmZpZ3VyYWNpw7NuIGRlbCBncmlkXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGF0YTogRGF0YUdyaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzaSBlbCBncmlkIHNlIGVudW1lcmFcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBlbnVtZXJhcjogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNpIGVsIGdyaWQgZXMgZWRpdGFibGVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBlZGl0YWJsZTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0b3IgZGVsIGdyaWRcclxuICAgKiBAcGFyYW0gY3N2IC0gU2VydmljaW8gQ1NWXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjc3Y6IENzdlNlcnZpY2UpIHtcclxuICAgIHRoaXMuZGF0YSA9IHt9IGFzIERhdGFHcmlkO1xyXG4gICAgdGhpcy5lbnVtZXJhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5lZGl0YWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkZSBpbmljaWFsaXphY2nDs24gZGUgdmlzdWFsaXphY2nDs25cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgdGhpcy5lZGl0YWJsZSA9IHRoaXMuZGF0YS5lZGl0YWJsZSB8fCBmYWxzZTtcclxuICAgICAgdGhpcy5lbnVtZXJhciA9IHRoaXMuZGF0YS5lbnVtZXJhYmxlIHx8IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmlld1BvcnQgcGFyYSBlbCBzY3JvbGwgdmlydHVhbFxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgdmlld1BvcnQhOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gcXVlIGludmllcnRlIGxhIHViaWNhY2nDs24gZGVsIG9iamV0byByZW5kZXJpemFkb1xyXG4gICAqIEByZXR1cm5zIFJlZ3Jlc2EgbGEgdWJpY2FjacOzbiBpbnZlcnRpZGEgZW4gbW9kbyB0ZXh0b1xyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaW52ZXJ0aXJVYmljYWNpb24oKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy52aWV3UG9ydCB8fCAhdGhpcy52aWV3UG9ydFsnX3JlbmRlcmVkQ29udGVudE9mZnNldCddKSB7XHJcbiAgICAgIHJldHVybiAnLTBweCc7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLnZpZXdQb3J0WydfcmVuZGVyZWRDb250ZW50T2Zmc2V0J107XHJcbiAgICByZXR1cm4gYC0ke29mZnNldH1weGA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHF1ZSB2YWxpZGEgc2kgdW5hIGNvbHVtbmEgZXN0YSBibG9xdWVhZGFcclxuICAgKiBAcGFyYW0gbnVtZXJvQ29sdW1uYSAtIE51bWVybyBkZSBjb2x1bW5hXHJcbiAgICogQHJldHVybnMgVHJ1ZSBzaSBsYSBjb2x1bW5hIGVzdGEgYmxvcXVlYWRhXHJcbiAgICovXHJcbiAgcHVibGljIGNvbHVtbmFCbG9xdWVhZGEobnVtZXJvQ29sdW1uYTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhLmJsb3F1ZWFyQ29sdW1uYXMgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmRhdGEuYmxvcXVlYXJDb2x1bW5hcy5zb21lKGMgPT4gYyA9PT0gbnVtZXJvQ29sdW1uYSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHF1ZSB2YWxpZGEgc2kgdW5hIGNvbHVtbmEgZXMgdmlzaWJsZVxyXG4gICAqIEBwYXJhbSBudW1lcm9Db2x1bW5hIC0gTnVtZXJvIGRlIGNvbHVtbmFcclxuICAgKiBAcmV0dXJucyBUcnVlIHNpIGVzIHZpc2libGVcclxuICAgKi9cclxuICBwdWJsaWMgY29sdW1uYVZpc2libGUobnVtZXJvQ29sdW1uYTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISh0aGlzLmRhdGEub2N1bHRhckNvbHVtbmFzICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5kYXRhLm9jdWx0YXJDb2x1bW5hcy5zb21lKGMgPT4gYyA9PT0gbnVtZXJvQ29sdW1uYSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBxdWUgYWN0dWFsaXphIGxvcyBkYXRvcyBlZGl0YWRvcyBlbiBlbCBncmlkXHJcbiAgICogQHBhcmFtIGluZGljZUZpbGEgLSBDb250aWVuZSBlbCBpbmRpY2UgZGUgbGEgZmlsYSBlZGl0YWRhXHJcbiAgICogQHBhcmFtIGluZGljZUNvbHVtbmEgLSBDb250aWVuZSBlbCBpbmRpY2UgZGUgbGEgY29sdW1uYSBlZGl0YWRhXHJcbiAgICogQHBhcmFtIHZhbG9yIC0gQ29udGllbmUgZWwgdmFsb3IgZGUgZWRpY2nDs24gZGUgY2VsZGFcclxuICAgKi9cclxuICBwdWJsaWMgYWN0dWFsaXphckRhdG9zKGluZGljZUZpbGE6IG51bWJlciwgaW5kaWNlQ29sdW1uYTogbnVtYmVyLCB2YWxvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5maWxhcykge1xyXG4gICAgICBjb25zdCBmaWxhID0gdGhpcy5kYXRhLmZpbGFzW2luZGljZUZpbGFdW2luZGljZUNvbHVtbmFdO1xyXG4gICAgICBmaWxhLmVkaXRhZG8gPSBmaWxhLnZhbG9yICE9PSB2YWxvciB8fCBmaWxhLmVkaXRhZG87XHJcbiAgICAgIGlmIChmaWxhLmVkaXRhZG8pIHtcclxuICAgICAgICBmaWxhLnZhbG9yID0gdmFsb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbWJpYSBlbCBmb2NvIGRlIGxhcyBjZWxkYXNcclxuICAgKiBAcGFyYW0gZXZlbnQgLSBLZXlib2FyZEV2ZW50XHJcbiAgICovXHJcbiAgcHVibGljIG1vdmVyRm9jbyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgdGhpcy5tb3ZlckRlQ2VsZGEoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQsXHJcbiAgICAgIGV2ZW50LmtleSxcclxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2NlbGwnKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlYWxpemEgZWwgbW92aW1pZW50byBkZSBjZWxkYXMgcG9yIGVsIHRlY2xhZG9cclxuICAgKiBAcGFyYW0gY29udHJvbCAtIENvbnRyb2wgcXVlIGRlc2VuY2FkZW5hIGVsIGV2ZW50b1xyXG4gICAqIEBwYXJhbSBrZXkgLSBUZWNsYSBxdWUgZGVzZW5jYWRlbm8gZWwgZXZlbnRvXHJcbiAgICogQHBhcmFtIG5vZGVzQ29udHJvbHMgLSBDb250cm9sZXMgZGVsIGdyaWRcclxuICAgKi9cclxuICBwcml2YXRlIG1vdmVyRGVDZWxkYShjb250cm9sOiBIVE1MSW5wdXRFbGVtZW50LCBrZXk6IHN0cmluZywgbm9kZXNDb250cm9sczogTm9kZUxpc3QpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKG5vZGVzQ29udHJvbHMsIHggPT4geyByZXR1cm4geCB9KS5pbmRleE9mKGNvbnRyb2wpO1xyXG4gICAgbGV0IGNoYW5nZUZvY3VzID0gdHJ1ZTtcclxuICAgIGxldCBuZXdJbmRleCA9IDA7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxyXG4gICAgICAgIGNoYW5nZUZvY3VzID0ga2V5ID09PSAnRW50ZXInIHx8XHJcbiAgICAgICAgICBjb250cm9sLnNlbGVjdGlvblN0YXJ0ID09PSBjb250cm9sLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBuZXdJbmRleCA9IGluZGV4ICsgMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcclxuICAgICAgICBjaGFuZ2VGb2N1cyA9IGNvbnRyb2wuc2VsZWN0aW9uU3RhcnQgPT09IDA7XHJcbiAgICAgICAgbmV3SW5kZXggPSBpbmRleCAtIDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICAgIG5ld0luZGV4ID0gaW5kZXggLSB0aGlzLmNvbHVtbmFzSGFiaWxpdGFkYXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICBuZXdJbmRleCA9IGluZGV4ICsgdGhpcy5jb2x1bW5hc0hhYmlsaXRhZGFzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY2hhbmdlRm9jdXMgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VGb2N1cykge1xyXG4gICAgICB0aGlzLm9idGVuZXJDb250cm9sKG5vZGVzQ29udHJvbHMsIG5ld0luZGV4KS5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVncmVzYSBlbCBudW1lcm8gZGUgY29sdW1uYXMgaGFiaWxpdGFkYXMgZGVudHJvIGRlbCBncmlkXHJcbiAgICogQHJldHVybnMgTnVtZXJvIGRlIGNvbHVtbmFzIGhhYmlsaXRhZGFzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb2x1bW5hc0hhYmlsaXRhZGFzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhLmNvbHVtbmFzLmxlbmd0aCAtICh0aGlzLmRhdGEuYmxvcXVlYXJDb2x1bW5hcz8ubGVuZ3RoID8/IDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBlbCBjb250cm9sIGRlIHVuIE5vZGVMaXN0IHBvciBpbmRpY2VcclxuICAgKiBAcGFyYW0gbm9kZXMgLSBMaXN0YSBkZSBub2Rvc1xyXG4gICAqIEBwYXJhbSBpbmRleCAtIEluZGljZSBkZWwgY29udHJvbFxyXG4gICAqIEByZXR1cm5zIENvbnRyb2wgZGVsIGluZGljZSBlc3BlY2lmaWNhZG9cclxuICAgKi9cclxuICBwcml2YXRlIG9idGVuZXJDb250cm9sKG5vZGVzOiBOb2RlTGlzdCwgaW5kZXg6IG51bWJlcik6IEhUTUxFbGVtZW50IHtcclxuICAgIHJldHVybiBub2Rlcy5pdGVtKGluZGV4KSBhcyBIVE1MRWxlbWVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc2NhcmdhIGxvcyBkYXRvcyBjb250ZW5pZG9zIGVuIGVsIEdyaWQgY29tbyB1biBDU1ZcclxuICAgKiBAcGFyYW0gYXJjaGl2byAtIE5vbWJyZSBkZWwgYXJjaGl2b1xyXG4gICAqL1xyXG4gIHB1YmxpYyBkZXNjYXJnYXJDc3YoYXJjaGl2bzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhLmZpbGFzLm1hcCgoZjogQXJyYXk8Q2VsbD4pID0+IHsgcmV0dXJuIGYuZmlsdGVyKChjLGkpID0+IChjLnNlcmlhbGl6YWJsZSA/PyB0cnVlKSAmJiB0aGlzLmNvbHVtbmFWaXNpYmxlKGkpKS5tYXAoKGM6IENlbGwpID0+IGMudmFsb3IpOyB9KS5maWx0ZXIoZCA9PiBkLmxlbmd0aCA+IDApO1xyXG4gICAgZGF0YS51bnNoaWZ0KHRoaXMuZGF0YS5jb2x1bW5hcy5maWx0ZXIoKGMsaSkgPT4gKGMuc2VyaWFsaXphYmxlID8/IHRydWUpICYmIHRoaXMuY29sdW1uYVZpc2libGUoaSkpLm1hcCgoYzogQ2VsbCkgPT4gYy52YWxvcikpO1xyXG4gICAgdGhpcy5jc3YuZGVzY2FyZ2FyQ3N2KGFyY2hpdm8sIGRhdGEpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgPCEtLSBDb250ZW5lZG9yIHByaW5jaXBhbCBkZWwgZ3JpZCAtLT5cclxuICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICNzY3JvbGxWaWV3cG9ydCBpdGVtU2l6ZT1cIjI1XCI+XHJcbiAgICA8IS0tIFRhYmxhIGRlIGRhdG9zIC0tPlxyXG4gICAgPHRhYmxlIChrZXlkb3duKT1cIm1vdmVyRm9jbygkZXZlbnQpXCI+XHJcbiAgICAgIDxjYXB0aW9uPiBSZWRpR3JpZENvbXBvbmVudCA8L2NhcHRpb24+XHJcbiAgICAgIDwhLS0gQ2FiZWNlcmEgZGUgdGFibGEgLS0+XHJcbiAgICAgIDx0aGVhZD5cclxuICAgICAgICA8IS0tIERlZmluaWNpw7NuIGRlIGVuY2FiZXphZG9zIC0tPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIFtzdHlsZS50b3BdPVwiaW52ZXJ0aXJVYmljYWNpb25cIiAqbmdJZj1cImVudW1lcmFyXCI+XHJcbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBbc3R5bGUudG9wXT1cImludmVydGlyVWJpY2FjaW9uXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBkYXRhLmNvbHVtbmFzOyBsZXQgY29sTnVtPWluZGV4XCJcclxuICAgICAgICAgICAgW2NsYXNzLm9jdWx0b109XCIhY29sdW1uYVZpc2libGUoY29sTnVtKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJjb2x1bW5hQmxvcXVlYWRhKGNvbE51bSlcIiBjbGFzcz1cImxvY2tJY29uXCI+bG9jazwvbWF0LWljb24+e3tjb2wudmFsb3J9fVxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3RoZWFkPlxyXG4gICAgICA8IS0tIEN1ZXJwbyBkZSB0YWJsYSAtLT5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0ciAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YS5maWxhcztsZXQgcm93TnVtID0gaW5kZXhcIj5cclxuICAgICAgICAgIDwhLS0gQ29udGFkb3IgZGUgZmlsYSAtLT5cclxuICAgICAgICAgIDx0ZCAqbmdJZj1cImVudW1lcmFyXCI+IHt7IHJvd051bSArIDEgfX0gPC90ZD5cclxuICAgICAgICAgIDwhLS0gQ2VsZGFzIGRlIGRhdG9zIC0tPlxyXG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjZWxsIG9mIHJvdzsgbGV0IGNvbE51bT1pbmRleDtcIiBbY2xhc3Mud2Fybl09XCJjZWxsLmVzVmFsaWRvICE9PSB1bmRlZmluZWQgJiYgIWNlbGwuZXNWYWxpZG9cIlxyXG4gICAgICAgICAgICBbY2xhc3MuZWRpdGFkb109XCJjZWxsLmVkaXRhZG9cIiBbY2xhc3MuYmxvcXVlYWRvXT1cImNlbGwuYmxvcXVlYWRvIHx8IGNvbHVtbmFCbG9xdWVhZGEoY29sTnVtKVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5vY3VsdG9dPVwiIWNvbHVtbmFWaXNpYmxlKGNvbE51bSlcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNlbGxcIj4gVmFsdWUgPC9sYWJlbD5cclxuICAgICAgICAgICAgPCEtLSBDYW1wbyBlZGl0YWJsZSAtLT5cclxuICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiZWRpdGFibGUgJiYgIWNlbGwuYmxvcXVlYWRvICYmICFjb2x1bW5hQmxvcXVlYWRhKGNvbE51bSlcIiB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJjZWxsLnZhbG9yXCJcclxuICAgICAgICAgICAgICBuYW1lPVwiY2VsbFwiIGlkPVwiY2VsbFwiIChmb2N1c291dCk9XCJhY3R1YWxpemFyRGF0b3Mocm93TnVtLGNvbE51bSwkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmVkaXRhZG9dPVwiY2VsbC5lZGl0YWRvXCIgLz5cclxuICAgICAgICAgICAge3sgIWVkaXRhYmxlIHx8IGNlbGwuYmxvcXVlYWRvIHx8IGNvbHVtbmFCbG9xdWVhZGEoY29sTnVtKSA/IGNlbGwudmFsb3IgOiAnJyB9fVxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cclxuPC9kaXY+Il19
@@ -0,0 +1,34 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { RediGridComponent } from './redi-grid/redi-grid.component';
4
+ import { ScrollingModule } from '@angular/cdk/scrolling';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Modulo que contiene los componentes de grid
9
+ * @decorators ´@NgModule´
10
+ */
11
+ export class RediGridModule {
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: RediGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
13
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.4", ngImport: i0, type: RediGridModule, declarations: [RediGridComponent], imports: [CommonModule,
14
+ ScrollingModule,
15
+ MatIconModule], exports: [RediGridComponent] }); }
16
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: RediGridModule, imports: [CommonModule,
17
+ ScrollingModule,
18
+ MatIconModule] }); }
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: RediGridModule, decorators: [{
21
+ type: NgModule,
22
+ args: [{
23
+ declarations: [RediGridComponent],
24
+ imports: [
25
+ CommonModule,
26
+ ScrollingModule,
27
+ MatIconModule
28
+ ],
29
+ exports: [
30
+ RediGridComponent
31
+ ]
32
+ }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaS1ncmlkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWRpLWNvcmUvUmVkaUdyaWQvc3JjL21vZHVsZXMvcmVkaS1ncmlkLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUV2RDs7O0dBR0c7QUFZSCxNQUFNLE9BQU8sY0FBYzs4R0FBZCxjQUFjOytHQUFkLGNBQWMsaUJBVlYsaUJBQWlCLGFBRTlCLFlBQVk7WUFDWixlQUFlO1lBQ2YsYUFBYSxhQUdiLGlCQUFpQjsrR0FHUixjQUFjLFlBUnZCLFlBQVk7WUFDWixlQUFlO1lBQ2YsYUFBYTs7MkZBTUosY0FBYztrQkFYMUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDakMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixhQUFhO3FCQUNkO29CQUNELE9BQU8sRUFBRTt3QkFDUCxpQkFBaUI7cUJBQ2xCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUmVkaUdyaWRDb21wb25lbnQgfSBmcm9tICcuL3JlZGktZ3JpZC9yZWRpLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuXHJcbi8qKlxyXG4gKiBNb2R1bG8gcXVlIGNvbnRpZW5lIGxvcyBjb21wb25lbnRlcyBkZSBncmlkXHJcbiAqIEBkZWNvcmF0b3JzIMK0QE5nTW9kdWxlwrRcclxuICovXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbUmVkaUdyaWRDb21wb25lbnRdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFNjcm9sbGluZ01vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIFJlZGlHcmlkQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVkaUdyaWRNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXJlZGktY29yZS1SZWRpVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVkaS1jb3JlL1JlZGlUYWJsZS9uZ3gtcmVkaS1jb3JlLVJlZGlUYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,9 @@
1
+ /** Componentes */
2
+ export * from './src/components/redi-table/redi-table.component';
3
+ /** Modelos */
4
+ export * from './src/models/interfaces/column-definition';
5
+ export * from './src/models/interfaces/data-table';
6
+ export * from './src/models/interfaces/row-action';
7
+ // /** Tipos */
8
+ // export * from './src/models/types/event-table.type';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWRpLWNvcmUvUmVkaVRhYmxlL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLGNBQWMsa0RBQWtELENBQUM7QUFFakUsY0FBYztBQUNkLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGVBQWU7QUFDZix1REFBdUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ29tcG9uZW50ZXMgKi9cclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvY29tcG9uZW50cy9yZWRpLXRhYmxlL3JlZGktdGFibGUuY29tcG9uZW50JztcclxuXHJcbi8qKiBNb2RlbG9zICovXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL21vZGVscy9pbnRlcmZhY2VzL2NvbHVtbi1kZWZpbml0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvbW9kZWxzL2ludGVyZmFjZXMvZGF0YS10YWJsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL21vZGVscy9pbnRlcmZhY2VzL3Jvdy1hY3Rpb24nO1xyXG4vLyAvKiogVGlwb3MgKi9cclxuLy8gZXhwb3J0ICogZnJvbSAnLi9zcmMvbW9kZWxzL3R5cGVzL2V2ZW50LXRhYmxlLnR5cGUnOyJdfQ==
@@ -0,0 +1,84 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { MatFormFieldModule } from '@angular/material/form-field';
4
+ import { MatInputModule } from '@angular/material/input';
5
+ import { MatListModule } from '@angular/material/list';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/form-field";
8
+ import * as i2 from "@angular/material/input";
9
+ import * as i3 from "@angular/material/list";
10
+ export class FilterDataComponent {
11
+ set filtrosColumnas(value) {
12
+ if (value) {
13
+ this._refFiltro = value;
14
+ this.filtros = [...value.map(f => { return { ...f }; })];
15
+ }
16
+ }
17
+ constructor() {
18
+ this.filterEnd = new EventEmitter();
19
+ this._refFiltro = [];
20
+ this.filtros = [];
21
+ }
22
+ ngAfterViewInit() {
23
+ if (this.allItemControl) {
24
+ setTimeout(() => {
25
+ this.allItemControl.selected = this.isAllChecked(this.filtros);
26
+ });
27
+ }
28
+ }
29
+ selectedChange() {
30
+ if (this.allItemControl) {
31
+ this.allItemControl.selected = this.isAllChecked(this.filtros);
32
+ }
33
+ }
34
+ setAllCheck(value) {
35
+ this.filtros.map(f => f.isSelected = value);
36
+ }
37
+ isAllChecked(filters) {
38
+ return filters.every(f => f.isSelected);
39
+ }
40
+ changeFilter() {
41
+ if (this.control) {
42
+ let value = this.control.nativeElement.value ?? '';
43
+ this.filtros.map(f => f.isVisible = value === '' ||
44
+ f.name.trim().toLowerCase().indexOf(value.trim().toLowerCase()) !== -1);
45
+ }
46
+ }
47
+ aplicarFiltros() {
48
+ this._refFiltro.map((d, i) => { this._refFiltro[i].isSelected = this.filtros[i].isSelected; });
49
+ this.filterEnd.emit(true);
50
+ }
51
+ cancelarFiltro() {
52
+ this.filterEnd.emit();
53
+ }
54
+ loadData() {
55
+ this.control.nativeElement.value = '';
56
+ this._refFiltro.map((d, i) => {
57
+ this.filtros[i].isSelected = this._refFiltro[i].isSelected;
58
+ d.isVisible = true;
59
+ this.filtros[i].isVisible = true;
60
+ });
61
+ }
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: FilterDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
63
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: FilterDataComponent, isStandalone: true, selector: "filter-data", inputs: { filtrosColumnas: "filtrosColumnas" }, outputs: { filterEnd: "filterEnd" }, viewQueries: [{ propertyName: "allItemControl", first: true, predicate: ["mainControl"], descendants: true }, { propertyName: "control", first: true, predicate: ["textFilter"], descendants: true }], ngImport: i0, template: "<mat-label>Filtro</mat-label>\r\n<div>\r\n <input #textFilter class=\"inputFilter\" (keyup)=\"changeFilter()\" type=\"text\" placeholder=\"Buscar\" aria-label=\"Filtro\"\r\n matInput>\r\n</div>\r\n<mat-selection-list #elementos>\r\n <mat-list-option #mainControl (click)=\"setAllCheck(mainControl.selected)\"\r\n [disabled]=\"textFilter.value !== ''\">(Seleccionar todo)</mat-list-option>\r\n @for (filtro of filtros; track filtro) {\r\n @if(filtro.isVisible){\r\n <mat-list-option [(selected)]=\"filtro.isSelected\"\r\n (selectedChange)=\"selectedChange()\">{{filtro.name}}</mat-list-option>\r\n }\r\n }\r\n</mat-selection-list>\r\n<button mat-flat-button color=\"primary\" (click)=\"aplicarFiltros()\">Aceptar</button>\r\n<button mat-flat-button color=\"accent\" (click)=\"cancelarFiltro()\">Cancelar</button>", styles: ["mat-selection-list{max-height:40vh;height:20vh;overflow-y:scroll;border:solid 1px gray;margin-top:10px;margin-bottom:10px;background-color:#fff}input,mat-label{width:90%;margin-left:5px}:host{padding:5px}button{float:right;margin-right:5px}mat-list-option{max-height:35px}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i3.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }] }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: FilterDataComponent, decorators: [{
66
+ type: Component,
67
+ args: [{ selector: 'filter-data', standalone: true, imports: [
68
+ MatFormFieldModule,
69
+ FormsModule,
70
+ MatInputModule,
71
+ MatListModule
72
+ ], template: "<mat-label>Filtro</mat-label>\r\n<div>\r\n <input #textFilter class=\"inputFilter\" (keyup)=\"changeFilter()\" type=\"text\" placeholder=\"Buscar\" aria-label=\"Filtro\"\r\n matInput>\r\n</div>\r\n<mat-selection-list #elementos>\r\n <mat-list-option #mainControl (click)=\"setAllCheck(mainControl.selected)\"\r\n [disabled]=\"textFilter.value !== ''\">(Seleccionar todo)</mat-list-option>\r\n @for (filtro of filtros; track filtro) {\r\n @if(filtro.isVisible){\r\n <mat-list-option [(selected)]=\"filtro.isSelected\"\r\n (selectedChange)=\"selectedChange()\">{{filtro.name}}</mat-list-option>\r\n }\r\n }\r\n</mat-selection-list>\r\n<button mat-flat-button color=\"primary\" (click)=\"aplicarFiltros()\">Aceptar</button>\r\n<button mat-flat-button color=\"accent\" (click)=\"cancelarFiltro()\">Cancelar</button>", styles: ["mat-selection-list{max-height:40vh;height:20vh;overflow-y:scroll;border:solid 1px gray;margin-top:10px;margin-bottom:10px;background-color:#fff}input,mat-label{width:90%;margin-left:5px}:host{padding:5px}button{float:right;margin-right:5px}mat-list-option{max-height:35px}\n"] }]
73
+ }], ctorParameters: () => [], propDecorators: { filtrosColumnas: [{
74
+ type: Input
75
+ }], allItemControl: [{
76
+ type: ViewChild,
77
+ args: ['mainControl']
78
+ }], filterEnd: [{
79
+ type: Output
80
+ }], control: [{
81
+ type: ViewChild,
82
+ args: ['textFilter']
83
+ }] } });
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlZGktY29yZS9SZWRpVGFibGUvc3JjL2NvbXBvbmVudHMvZmlsdGVyLWRhdGEvZmlsdGVyLWRhdGEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlZGktY29yZS9SZWRpVGFibGUvc3JjL2NvbXBvbmVudHMvZmlsdGVyLWRhdGEvZmlsdGVyLWRhdGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFpQnRFLE1BQU0sT0FBTyxtQkFBbUI7SUFFOUIsSUFDVyxlQUFlLENBQUMsS0FBd0I7UUFDakQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7SUFjRDtRQUxPLGNBQVMsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQU1wRSxJQUFJLENBQUMsVUFB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LElBQUksV0FDUDt3QkFDUCxrQkFBa0I7d0JBQ2xCLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxhQUFhO3FCQUNkO3dEQU9VLGVBQWU7c0JBRHpCLEtBQUs7Z0JBWUMsY0FBYztzQkFEcEIsU0FBUzt1QkFBQyxhQUFhO2dCQUlqQixTQUFTO3NCQURmLE1BQU07Z0JBSVAsT0FBTztzQkFETixTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdExpc3RNb2R1bGUsIE1hdExpc3RPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcclxuaW1wb3J0IHsgRmlsdGVySXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9pbnRlcmZhY2VzL2ZpbHRlci1pdGVtJztcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ZpbHRlci1kYXRhJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRMaXN0TW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLWRhdGEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9maWx0ZXItZGF0YS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyRGF0YUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZmlsdHJvc0NvbHVtbmFzKHZhbHVlOiBBcnJheTxGaWx0ZXJJdGVtPikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3JlZkZpbHRybyA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmZpbHRyb3MgPSBbLi4udmFsdWUubWFwKGYgPT4geyByZXR1cm4geyAuLi5mIH0gfSldO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIF9yZWZGaWx0cm86IEFycmF5PEZpbHRlckl0ZW0+O1xyXG4gIHB1YmxpYyBmaWx0cm9zOiBBcnJheTxGaWx0ZXJJdGVtPjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWFpbkNvbnRyb2wnKVxyXG4gIHB1YmxpYyBhbGxJdGVtQ29udHJvbCE6IE1hdExpc3RPcHRpb25cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGZpbHRlckVuZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCd0ZXh0RmlsdGVyJylcclxuICBjb250cm9sITogRWxlbWVudFJlZjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl9yZWZGaWx0cm8gPSBbXTtcclxuICAgIHRoaXMuZmlsdHJvcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWxsSXRlbUNvbnRyb2wpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hbGxJdGVtQ29udHJvbC5zZWxlY3RlZCA9IHRoaXMuaXNBbGxDaGVja2VkKHRoaXMuZmlsdHJvcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdGVkQ2hhbmdlKCkge1xyXG4gICAgaWYgKHRoaXMuYWxsSXRlbUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5hbGxJdGVtQ29udHJvbC5zZWxlY3RlZCA9IHRoaXMuaXNBbGxDaGVja2VkKHRoaXMuZmlsdHJvcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QWxsQ2hlY2sodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZmlsdHJvcy5tYXAoZiA9PiBmLmlzU2VsZWN0ZWQgPSB2YWx1ZSlcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgaXNBbGxDaGVja2VkKGZpbHRlcnM6IEFycmF5PEZpbHRlckl0ZW0+KSB7XHJcbiAgICByZXR1cm4gZmlsdGVycy5ldmVyeShmID0+IGYuaXNTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlRmlsdGVyKCkge1xyXG4gICAgaWYgKHRoaXMuY29udHJvbCkge1xyXG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmNvbnRyb2wubmF0aXZlRWxlbWVudC52YWx1ZSA/PyAnJztcclxuICAgICAgdGhpcy5maWx0cm9zLm1hcChmID0+IGYuaXNWaXNpYmxlID0gdmFsdWUgPT09ICcnIHx8XHJcbiAgICAgICAgZi5uYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpICE9PSAtMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXBsaWNhckZpbHRyb3MoKSB7XHJcbiAgICB0aGlzLl9yZWZGaWx0cm8ubWFwKChkLCBpKSA9PiB7IHRoaXMuX3JlZkZpbHRyb1tpXS5pc1NlbGVjdGVkID0gdGhpcy5maWx0cm9zW2ldLmlzU2VsZWN0ZWQgfSk7XHJcbiAgICB0aGlzLmZpbHRlckVuZC5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbGFyRmlsdHJvKCkge1xyXG4gICAgdGhpcy5maWx0ZXJFbmQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWREYXRhKCkge1xyXG4gICAgdGhpcy5jb250cm9sLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIHRoaXMuX3JlZkZpbHRyby5tYXAoKGQsIGkpID0+IHtcclxuICAgICAgdGhpcy5maWx0cm9zW2ldLmlzU2VsZWN0ZWQgPSB0aGlzLl9yZWZGaWx0cm9baV0uaXNTZWxlY3RlZDtcclxuICAgICAgZC5pc1Zpc2libGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZpbHRyb3NbaV0uaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8bWF0LWxhYmVsPkZpbHRybzwvbWF0LWxhYmVsPlxyXG48ZGl2PlxyXG4gICAgPGlucHV0ICN0ZXh0RmlsdGVyIGNsYXNzPVwiaW5wdXRGaWx0ZXJcIiAoa2V5dXApPVwiY2hhbmdlRmlsdGVyKClcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiQnVzY2FyXCIgYXJpYS1sYWJlbD1cIkZpbHRyb1wiXHJcbiAgICAgICAgbWF0SW5wdXQ+XHJcbjwvZGl2PlxyXG48bWF0LXNlbGVjdGlvbi1saXN0ICNlbGVtZW50b3M+XHJcbiAgICA8bWF0LWxpc3Qtb3B0aW9uICNtYWluQ29udHJvbCAoY2xpY2spPVwic2V0QWxsQ2hlY2sobWFpbkNvbnRyb2wuc2VsZWN0ZWQpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwidGV4dEZpbHRlci52YWx1ZSAhPT0gJydcIj4oU2VsZWNjaW9uYXIgdG9kbyk8L21hdC1saXN0LW9wdGlvbj5cclxuICAgIEBmb3IgKGZpbHRybyBvZiBmaWx0cm9zOyB0cmFjayBmaWx0cm8pIHtcclxuICAgIEBpZihmaWx0cm8uaXNWaXNpYmxlKXtcclxuICAgIDxtYXQtbGlzdC1vcHRpb24gWyhzZWxlY3RlZCldPVwiZmlsdHJvLmlzU2VsZWN0ZWRcIlxyXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJzZWxlY3RlZENoYW5nZSgpXCI+e3tmaWx0cm8ubmFtZX19PC9tYXQtbGlzdC1vcHRpb24+XHJcbiAgICB9XHJcbiAgICB9XHJcbjwvbWF0LXNlbGVjdGlvbi1saXN0PlxyXG48YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiYXBsaWNhckZpbHRyb3MoKVwiPkFjZXB0YXI8L2J1dHRvbj5cclxuPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwiY2FuY2VsYXJGaWx0cm8oKVwiPkNhbmNlbGFyPC9idXR0b24+Il19