valtech-components 2.0.830 → 2.0.832

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.
@@ -0,0 +1,44 @@
1
+ /**
2
+ * DebugConsole Provider
3
+ *
4
+ * Provider e injection token para el overlay de logs `val-debug-console`.
5
+ */
6
+ import { InjectionToken, makeEnvironmentProviders } from '@angular/core';
7
+ import { DEFAULT_DEBUG_CONSOLE_CONFIG } from './types';
8
+ /**
9
+ * Token de inyección para la configuración de DebugConsole.
10
+ */
11
+ export const VALTECH_DEBUG_CONSOLE = new InjectionToken('ValtechDebugConsole');
12
+ /**
13
+ * Provee el overlay de logs `val-debug-console` a la aplicación Angular.
14
+ *
15
+ * El componente parchea `console.*` para espejar cada llamada a un panel en
16
+ * pantalla — útil para leer logs en un PWA iOS añadido al home screen, donde
17
+ * la consola del navegador no es accesible.
18
+ *
19
+ * El gate `enabled` lo decide la app (la lib no puede importar su
20
+ * `environment`). Sin provider, el componente queda inerte (`enabled: false`).
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // main.ts
25
+ * import { provideValtechDebugConsole } from 'valtech-components';
26
+ * import { environment } from './environments/environment';
27
+ *
28
+ * bootstrapApplication(AppComponent, {
29
+ * providers: [
30
+ * provideValtechDebugConsole({ enabled: !environment.production }),
31
+ * ],
32
+ * });
33
+ * ```
34
+ *
35
+ * Luego declarar `<val-debug-console />` una vez en el componente raíz.
36
+ */
37
+ export function provideValtechDebugConsole(config = {}) {
38
+ const mergedConfig = {
39
+ ...DEFAULT_DEBUG_CONSOLE_CONFIG,
40
+ ...config,
41
+ };
42
+ return makeEnvironmentProviders([{ provide: VALTECH_DEBUG_CONSOLE, useValue: mergedConfig }]);
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9kZWJ1Zy1jb25zb2xlL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUF3QixjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0YsT0FBTyxFQUFzQiw0QkFBNEIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUzRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUNyRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsU0FBNkIsRUFBRTtJQUN4RSxNQUFNLFlBQVksR0FBaUM7UUFDakQsR0FBRyw0QkFBNEI7UUFDL0IsR0FBRyxNQUFNO0tBQ1YsQ0FBQztJQUVGLE9BQU8sd0JBQXdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlYnVnQ29uc29sZSBQcm92aWRlclxuICpcbiAqIFByb3ZpZGVyIGUgaW5qZWN0aW9uIHRva2VuIHBhcmEgZWwgb3ZlcmxheSBkZSBsb2dzIGB2YWwtZGVidWctY29uc29sZWAuXG4gKi9cblxuaW1wb3J0IHsgRW52aXJvbm1lbnRQcm92aWRlcnMsIEluamVjdGlvblRva2VuLCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGVidWdDb25zb2xlQ29uZmlnLCBERUZBVUxUX0RFQlVHX0NPTlNPTEVfQ09ORklHIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVG9rZW4gZGUgaW55ZWNjacOzbiBwYXJhIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIERlYnVnQ29uc29sZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBTFRFQ0hfREVCVUdfQ09OU09MRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZXF1aXJlZDxEZWJ1Z0NvbnNvbGVDb25maWc+PihcbiAgJ1ZhbHRlY2hEZWJ1Z0NvbnNvbGUnXG4pO1xuXG4vKipcbiAqIFByb3ZlZSBlbCBvdmVybGF5IGRlIGxvZ3MgYHZhbC1kZWJ1Zy1jb25zb2xlYCBhIGxhIGFwbGljYWNpw7NuIEFuZ3VsYXIuXG4gKlxuICogRWwgY29tcG9uZW50ZSBwYXJjaGVhIGBjb25zb2xlLipgIHBhcmEgZXNwZWphciBjYWRhIGxsYW1hZGEgYSB1biBwYW5lbCBlblxuICogcGFudGFsbGEg4oCUIMO6dGlsIHBhcmEgbGVlciBsb2dzIGVuIHVuIFBXQSBpT1MgYcOxYWRpZG8gYWwgaG9tZSBzY3JlZW4sIGRvbmRlXG4gKiBsYSBjb25zb2xhIGRlbCBuYXZlZ2Fkb3Igbm8gZXMgYWNjZXNpYmxlLlxuICpcbiAqIEVsIGdhdGUgYGVuYWJsZWRgIGxvIGRlY2lkZSBsYSBhcHAgKGxhIGxpYiBubyBwdWVkZSBpbXBvcnRhciBzdVxuICogYGVudmlyb25tZW50YCkuIFNpbiBwcm92aWRlciwgZWwgY29tcG9uZW50ZSBxdWVkYSBpbmVydGUgKGBlbmFibGVkOiBmYWxzZWApLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBtYWluLnRzXG4gKiBpbXBvcnQgeyBwcm92aWRlVmFsdGVjaERlYnVnQ29uc29sZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKiBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbiAqXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZVZhbHRlY2hEZWJ1Z0NvbnNvbGUoeyBlbmFibGVkOiAhZW52aXJvbm1lbnQucHJvZHVjdGlvbiB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogTHVlZ28gZGVjbGFyYXIgYDx2YWwtZGVidWctY29uc29sZSAvPmAgdW5hIHZleiBlbiBlbCBjb21wb25lbnRlIHJhw616LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVZhbHRlY2hEZWJ1Z0NvbnNvbGUoY29uZmlnOiBEZWJ1Z0NvbnNvbGVDb25maWcgPSB7fSk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3QgbWVyZ2VkQ29uZmlnOiBSZXF1aXJlZDxEZWJ1Z0NvbnNvbGVDb25maWc+ID0ge1xuICAgIC4uLkRFRkFVTFRfREVCVUdfQ09OU09MRV9DT05GSUcsXG4gICAgLi4uY29uZmlnLFxuICB9O1xuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW3sgcHJvdmlkZTogVkFMVEVDSF9ERUJVR19DT05TT0xFLCB1c2VWYWx1ZTogbWVyZ2VkQ29uZmlnIH1dKTtcbn1cbiJdfQ==
@@ -0,0 +1,237 @@
1
+ import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';
2
+ import { VALTECH_DEBUG_CONSOLE } from './config';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * `val-debug-console` — overlay de logs en pantalla para diagnóstico.
6
+ *
7
+ * Herramienta de desarrollo. Permite leer los `console.*` desde un PWA en iOS
8
+ * añadido a la pantalla de inicio, donde la consola del navegador no es
9
+ * accesible.
10
+ *
11
+ * Comportamiento:
12
+ * - Monkey-patch de `console.log/warn/error/info`: cada llamada también empuja
13
+ * una entrada al buffer (últimas ~150) además de llamar al `console` original.
14
+ * - Botón flotante (esquina) que abre/cierra un panel scrollable con las
15
+ * entradas más nuevas abajo, coloreadas por nivel.
16
+ * - Botones "copiar" (al portapapeles) y "limpiar".
17
+ *
18
+ * Gate maestro vía `provideValtechDebugConsole({ enabled })` en `main.ts`. Sin
19
+ * provider — o con `enabled: false` — el componente NO parchea `console` y NO
20
+ * renderiza nada. La app decide el valor (normalmente `!environment.production`).
21
+ *
22
+ * i18n: NO usa i18n a propósito — es un dev-tool que ningún end-user ve;
23
+ * los labels van en español plano.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * // main.ts
28
+ * provideValtechDebugConsole({ enabled: !environment.production }),
29
+ * ```
30
+ * ```html
31
+ * <!-- componente raíz, una sola vez -->
32
+ * <val-debug-console />
33
+ * ```
34
+ */
35
+ /** Máximo de entradas retenidas en el buffer. */
36
+ const MAX_ENTRIES = 150;
37
+ export class DebugConsoleComponent {
38
+ constructor() {
39
+ /** Gate maestro: `false` (sin provider o `enabled: false`) → todo inerte. */
40
+ this.enabled = inject(VALTECH_DEBUG_CONSOLE, { optional: true })?.enabled ?? false;
41
+ this.open = signal(false);
42
+ this.entries = signal([]);
43
+ /**
44
+ * Buffer plano (NO signal). `console.log` puede invocarse dentro de un
45
+ * `effect()`/`computed()`; escribir el signal `entries` ahí mismo dispara
46
+ * NG0600. Acumulamos en este array y volcamos al signal en un microtask,
47
+ * fuera de todo contexto reactivo.
48
+ */
49
+ this.buffer = [];
50
+ this.flushScheduled = false;
51
+ /** Referencias a los métodos originales para restaurarlos en destroy. */
52
+ this.original = {};
53
+ }
54
+ ngOnInit() {
55
+ if (!this.enabled)
56
+ return;
57
+ this.patchConsole();
58
+ }
59
+ ngOnDestroy() {
60
+ if (!this.enabled)
61
+ return;
62
+ this.restoreConsole();
63
+ }
64
+ toggle() {
65
+ this.open.update(v => !v);
66
+ }
67
+ clear() {
68
+ this.buffer = [];
69
+ this.entries.set([]);
70
+ }
71
+ async copy() {
72
+ const text = this.entries()
73
+ .map(e => `${e.ts} [${e.level}] ${e.text}`)
74
+ .join('\n');
75
+ try {
76
+ await navigator.clipboard.writeText(text);
77
+ }
78
+ catch {
79
+ // Fallback para WebViews sin Clipboard API.
80
+ const ta = document.createElement('textarea');
81
+ ta.value = text;
82
+ ta.style.position = 'fixed';
83
+ ta.style.opacity = '0';
84
+ document.body.appendChild(ta);
85
+ ta.select();
86
+ try {
87
+ document.execCommand('copy');
88
+ }
89
+ catch {
90
+ /* sin recurso de copia disponible */
91
+ }
92
+ document.body.removeChild(ta);
93
+ }
94
+ }
95
+ /** Reemplaza los métodos de `console` para espejar cada llamada al buffer. */
96
+ patchConsole() {
97
+ const levels = ['log', 'warn', 'error', 'info'];
98
+ for (const level of levels) {
99
+ const orig = console[level].bind(console);
100
+ this.original[level] = orig;
101
+ console[level] = (...args) => {
102
+ orig(...args);
103
+ this.push(level, args);
104
+ };
105
+ }
106
+ }
107
+ /** Restaura los métodos originales de `console`. */
108
+ restoreConsole() {
109
+ for (const level of Object.keys(this.original)) {
110
+ const orig = this.original[level];
111
+ if (orig) {
112
+ console[level] = orig;
113
+ }
114
+ }
115
+ this.original = {};
116
+ }
117
+ /**
118
+ * Agrega una entrada al buffer plano y programa el volcado al signal.
119
+ * El volcado se difiere a un microtask: `console.log` puede llamarse desde
120
+ * dentro de un `effect()`, y escribir un signal ahí lanzaría NG0600.
121
+ */
122
+ push(level, args) {
123
+ const text = args.map(a => this.stringify(a)).join(' ');
124
+ const ts = new Date().toISOString().slice(11, 23);
125
+ this.buffer.push({ ts, level, text });
126
+ if (this.buffer.length > MAX_ENTRIES) {
127
+ this.buffer = this.buffer.slice(this.buffer.length - MAX_ENTRIES);
128
+ }
129
+ this.scheduleFlush();
130
+ }
131
+ /**
132
+ * Vuelca el buffer al signal `entries` en un microtask — fuera del contexto
133
+ * reactivo desde el que se haya llamado `console.log`. Batchea: múltiples
134
+ * logs del mismo tick resultan en una sola escritura del signal.
135
+ */
136
+ scheduleFlush() {
137
+ if (this.flushScheduled)
138
+ return;
139
+ this.flushScheduled = true;
140
+ queueMicrotask(() => {
141
+ this.flushScheduled = false;
142
+ this.entries.set([...this.buffer]);
143
+ });
144
+ }
145
+ /** Convierte cualquier argumento a una representación legible de una línea. */
146
+ stringify(value) {
147
+ if (typeof value === 'string')
148
+ return value;
149
+ if (value instanceof Error)
150
+ return `${value.name}: ${value.message}`;
151
+ try {
152
+ return JSON.stringify(value);
153
+ }
154
+ catch {
155
+ return String(value);
156
+ }
157
+ }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DebugConsoleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DebugConsoleComponent, isStandalone: true, selector: "val-debug-console", ngImport: i0, template: `
160
+ @if (enabled) {
161
+ <button
162
+ type="button"
163
+ class="dbg-fab"
164
+ (click)="toggle()"
165
+ [attr.aria-label]="open() ? 'Cerrar consola' : 'Abrir consola'"
166
+ >
167
+ {{ open() ? '×' : '‹/›' }}
168
+ @if (!open() && entries().length) {
169
+ <span class="dbg-fab__count">{{ entries().length }}</span>
170
+ }
171
+ </button>
172
+
173
+ @if (open()) {
174
+ <div class="dbg-panel" role="log">
175
+ <div class="dbg-panel__bar">
176
+ <span class="dbg-panel__title"> Debug · {{ entries().length }} </span>
177
+ <span class="dbg-panel__actions">
178
+ <button type="button" (click)="copy()">copiar</button>
179
+ <button type="button" (click)="clear()">limpiar</button>
180
+ </span>
181
+ </div>
182
+ <div class="dbg-panel__body">
183
+ @for (e of entries(); track $index) {
184
+ <div class="dbg-line" [class]="'dbg-line--' + e.level">
185
+ <span class="dbg-line__ts">{{ e.ts }}</span>
186
+ <span class="dbg-line__text">{{ e.text }}</span>
187
+ </div>
188
+ } @empty {
189
+ <div class="dbg-empty">Sin logs todavía.</div>
190
+ }
191
+ </div>
192
+ </div>
193
+ }
194
+ }
195
+ `, isInline: true, styles: [":host{position:fixed;z-index:2147483000;inset:auto 0 0 auto;pointer-events:none}.dbg-fab,.dbg-panel{pointer-events:auto}.dbg-fab{position:fixed;right:calc(12px + env(safe-area-inset-right,0px));bottom:calc(12px + env(safe-area-inset-bottom,0px));width:48px;height:48px;border-radius:50%;border:0;background:#1a1a1a;color:#fff;font-size:16px;font-weight:700;cursor:pointer;box-shadow:0 2px 10px #0006;display:flex;align-items:center;justify-content:center}.dbg-fab__count{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:#d33;color:#fff;font-size:11px;line-height:18px;text-align:center}.dbg-panel{position:fixed;right:calc(8px + env(safe-area-inset-right,0px));left:calc(8px + env(safe-area-inset-left,0px));bottom:calc(68px + env(safe-area-inset-bottom,0px));max-width:560px;margin:0 auto;max-height:55vh;display:flex;flex-direction:column;background:#101010;color:#eee;border-radius:10px;box-shadow:0 6px 24px #00000080;overflow:hidden;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.dbg-panel__bar{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;background:#1c1c1c;border-bottom:1px solid #2c2c2c}.dbg-panel__title{font-size:12px;font-weight:700}.dbg-panel__actions button{margin-left:8px;background:#2c2c2c;color:#eee;border:0;border-radius:6px;padding:4px 10px;font-size:11px;cursor:pointer}.dbg-panel__body{overflow-y:auto;padding:6px 8px;-webkit-overflow-scrolling:touch}.dbg-line{display:flex;gap:6px;padding:3px 0;font-size:11px;line-height:1.4;border-bottom:1px solid rgba(255,255,255,.04);word-break:break-word}.dbg-line__ts{flex-shrink:0;color:#777}.dbg-line__text{white-space:pre-wrap}.dbg-line--log .dbg-line__text{color:#ddd}.dbg-line--info .dbg-line__text{color:#6cb6ff}.dbg-line--warn .dbg-line__text{color:#f1c40f}.dbg-line--error .dbg-line__text{color:#ff6b6b}.dbg-empty{padding:12px;font-size:11px;color:#777;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
196
+ }
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DebugConsoleComponent, decorators: [{
198
+ type: Component,
199
+ args: [{ selector: 'val-debug-console', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
200
+ @if (enabled) {
201
+ <button
202
+ type="button"
203
+ class="dbg-fab"
204
+ (click)="toggle()"
205
+ [attr.aria-label]="open() ? 'Cerrar consola' : 'Abrir consola'"
206
+ >
207
+ {{ open() ? '×' : '‹/›' }}
208
+ @if (!open() && entries().length) {
209
+ <span class="dbg-fab__count">{{ entries().length }}</span>
210
+ }
211
+ </button>
212
+
213
+ @if (open()) {
214
+ <div class="dbg-panel" role="log">
215
+ <div class="dbg-panel__bar">
216
+ <span class="dbg-panel__title"> Debug · {{ entries().length }} </span>
217
+ <span class="dbg-panel__actions">
218
+ <button type="button" (click)="copy()">copiar</button>
219
+ <button type="button" (click)="clear()">limpiar</button>
220
+ </span>
221
+ </div>
222
+ <div class="dbg-panel__body">
223
+ @for (e of entries(); track $index) {
224
+ <div class="dbg-line" [class]="'dbg-line--' + e.level">
225
+ <span class="dbg-line__ts">{{ e.ts }}</span>
226
+ <span class="dbg-line__text">{{ e.text }}</span>
227
+ </div>
228
+ } @empty {
229
+ <div class="dbg-empty">Sin logs todavía.</div>
230
+ }
231
+ </div>
232
+ </div>
233
+ }
234
+ }
235
+ `, styles: [":host{position:fixed;z-index:2147483000;inset:auto 0 0 auto;pointer-events:none}.dbg-fab,.dbg-panel{pointer-events:auto}.dbg-fab{position:fixed;right:calc(12px + env(safe-area-inset-right,0px));bottom:calc(12px + env(safe-area-inset-bottom,0px));width:48px;height:48px;border-radius:50%;border:0;background:#1a1a1a;color:#fff;font-size:16px;font-weight:700;cursor:pointer;box-shadow:0 2px 10px #0006;display:flex;align-items:center;justify-content:center}.dbg-fab__count{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:#d33;color:#fff;font-size:11px;line-height:18px;text-align:center}.dbg-panel{position:fixed;right:calc(8px + env(safe-area-inset-right,0px));left:calc(8px + env(safe-area-inset-left,0px));bottom:calc(68px + env(safe-area-inset-bottom,0px));max-width:560px;margin:0 auto;max-height:55vh;display:flex;flex-direction:column;background:#101010;color:#eee;border-radius:10px;box-shadow:0 6px 24px #00000080;overflow:hidden;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.dbg-panel__bar{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;background:#1c1c1c;border-bottom:1px solid #2c2c2c}.dbg-panel__title{font-size:12px;font-weight:700}.dbg-panel__actions button{margin-left:8px;background:#2c2c2c;color:#eee;border:0;border-radius:6px;padding:4px 10px;font-size:11px;cursor:pointer}.dbg-panel__body{overflow-y:auto;padding:6px 8px;-webkit-overflow-scrolling:touch}.dbg-line{display:flex;gap:6px;padding:3px 0;font-size:11px;line-height:1.4;border-bottom:1px solid rgba(255,255,255,.04);word-break:break-word}.dbg-line__ts{flex-shrink:0;color:#777}.dbg-line__text{white-space:pre-wrap}.dbg-line--log .dbg-line__text{color:#ddd}.dbg-line--info .dbg-line__text{color:#6cb6ff}.dbg-line--warn .dbg-line__text{color:#f1c40f}.dbg-line--error .dbg-line__text{color:#ff6b6b}.dbg-empty{padding:12px;font-size:11px;color:#777;text-align:center}\n"] }]
236
+ }] });
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWctY29uc29sZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2RlYnVnLWNvbnNvbGUvZGVidWctY29uc29sZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBR2pEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFFSCxpREFBaUQ7QUFDakQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBNkN4QixNQUFNLE9BQU8scUJBQXFCO0lBM0NsQztRQTRDRSw2RUFBNkU7UUFDcEUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUM7UUFFOUUsU0FBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixZQUFPLEdBQUcsTUFBTSxDQUFrQixFQUFFLENBQUMsQ0FBQztRQUUvQzs7Ozs7V0FLRztRQUNLLFdBQU0sR0FBb0IsRUFBRSxDQUFDO1FBQzdCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRS9CLHlFQUF5RTtRQUNqRSxhQUFRLEdBQWlFLEVBQUUsQ0FBQztLQTJHckY7SUF6R0MsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENB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T0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzsrR0EzSFUscUJBQXFCO21HQUFyQixxQkFBcUIsNkVBdkN0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NUOzs0RkFHVSxxQkFBcUI7a0JBM0NqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0RFQlVHX0NPTlNPTEUgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBEZWJ1Z0xvZ0VudHJ5LCBEZWJ1Z0xvZ0xldmVsIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogYHZhbC1kZWJ1Zy1jb25zb2xlYCDigJQgb3ZlcmxheSBkZSBsb2dzIGVuIHBhbnRhbGxhIHBhcmEgZGlhZ27Ds3N0aWNvLlxuICpcbiAqIEhlcnJhbWllbnRhIGRlIGRlc2Fycm9sbG8uIFBlcm1pdGUgbGVlciBsb3MgYGNvbnNvbGUuKmAgZGVzZGUgdW4gUFdBIGVuIGlPU1xuICogYcOxYWRpZG8gYSBsYSBwYW50YWxsYSBkZSBpbmljaW8sIGRvbmRlIGxhIGNvbnNvbGEgZGVsIG5hdmVnYWRvciBubyBlc1xuICogYWNjZXNpYmxlLlxuICpcbiAqIENvbXBvcnRhbWllbnRvOlxuICogIC0gTW9ua2V5LXBhdGNoIGRlIGBjb25zb2xlLmxvZy93YXJuL2Vycm9yL2luZm9gOiBjYWRhIGxsYW1hZGEgdGFtYmnDqW4gZW1wdWphXG4gKiAgICB1bmEgZW50cmFkYSBhbCBidWZmZXIgKMO6bHRpbWFzIH4xNTApIGFkZW3DoXMgZGUgbGxhbWFyIGFsIGBjb25zb2xlYCBvcmlnaW5hbC5cbiAqICAtIEJvdMOzbiBmbG90YW50ZSAoZXNxdWluYSkgcXVlIGFicmUvY2llcnJhIHVuIHBhbmVsIHNjcm9sbGFibGUgY29uIGxhc1xuICogICAgZW50cmFkYXMgbcOhcyBudWV2YXMgYWJham8sIGNvbG9yZWFkYXMgcG9yIG5pdmVsLlxuICogIC0gQm90b25lcyBcImNvcGlhclwiIChhbCBwb3J0YXBhcGVsZXMpIHkgXCJsaW1waWFyXCIuXG4gKlxuICogR2F0ZSBtYWVzdHJvIHbDrWEgYHByb3ZpZGVWYWx0ZWNoRGVidWdDb25zb2xlKHsgZW5hYmxlZCB9KWAgZW4gYG1haW4udHNgLiBTaW5cbiAqIHByb3ZpZGVyIOKAlCBvIGNvbiBgZW5hYmxlZDogZmFsc2VgIOKAlCBlbCBjb21wb25lbnRlIE5PIHBhcmNoZWEgYGNvbnNvbGVgIHkgTk9cbiAqIHJlbmRlcml6YSBuYWRhLiBMYSBhcHAgZGVjaWRlIGVsIHZhbG9yIChub3JtYWxtZW50ZSBgIWVudmlyb25tZW50LnByb2R1Y3Rpb25gKS5cbiAqXG4gKiBpMThuOiBOTyB1c2EgaTE4biBhIHByb3DDs3NpdG8g4oCUIGVzIHVuIGRldi10b29sIHF1ZSBuaW5nw7puIGVuZC11c2VyIHZlO1xuICogbG9zIGxhYmVscyB2YW4gZW4gZXNwYcOxb2wgcGxhbm8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIG1haW4udHNcbiAqIHByb3ZpZGVWYWx0ZWNoRGVidWdDb25zb2xlKHsgZW5hYmxlZDogIWVudmlyb25tZW50LnByb2R1Y3Rpb24gfSksXG4gKiBgYGBcbiAqIGBgYGh0bWxcbiAqIDwhLS0gY29tcG9uZW50ZSByYcOteiwgdW5hIHNvbGEgdmV6IC0tPlxuICogPHZhbC1kZWJ1Zy1jb25zb2xlIC8+XG4gKiBgYGBcbiAqL1xuXG4vKiogTcOheGltbyBkZSBlbnRyYWRhcyByZXRlbmlkYXMgZW4gZWwgYnVmZmVyLiAqL1xuY29uc3QgTUFYX0VOVFJJRVMgPSAxNTA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1kZWJ1Zy1jb25zb2xlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChlbmFibGVkKSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImRiZy1mYWJcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wZW4oKSA/ICdDZXJyYXIgY29uc29sYScgOiAnQWJyaXIgY29uc29sYSdcIlxuICAgICAgPlxuICAgICAgICB7eyBvcGVuKCkgPyAnw5cnIDogJ+KAuS/igLonIH19XG4gICAgICAgIEBpZiAoIW9wZW4oKSAmJiBlbnRyaWVzKCkubGVuZ3RoKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYmctZmFiX19jb3VudFwiPnt7IGVudHJpZXMoKS5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICBAaWYgKG9wZW4oKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGJnLXBhbmVsXCIgcm9sZT1cImxvZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYmctcGFuZWxfX2JhclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYmctcGFuZWxfX3RpdGxlXCI+IERlYnVnIMK3IHt7IGVudHJpZXMoKS5sZW5ndGggfX0gPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYmctcGFuZWxfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNvcHkoKVwiPmNvcGlhcjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xlYXIoKVwiPmxpbXBpYXI8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGJnLXBhbmVsX19ib2R5XCI+XG4gICAgICAgICAgICBAZm9yIChlIG9mIGVudHJpZXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYmctbGluZVwiIFtjbGFzc109XCInZGJnLWxpbmUtLScgKyBlLmxldmVsXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYmctbGluZV9fdHNcIj57eyBlLnRzIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGJnLWxpbmVfX3RleHRcIj57eyBlLnRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGJnLWVtcHR5XCI+U2luIGxvZ3MgdG9kYXbDrWEuPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vZGVidWctY29uc29sZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEZWJ1Z0NvbnNvbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBHYXRlIG1hZXN0cm86IGBmYWxzZWAgKHNpbiBwcm92aWRlciBvIGBlbmFibGVkOiBmYWxzZWApIOKGkiB0b2RvIGluZXJ0ZS4gKi9cbiAgcmVhZG9ubHkgZW5hYmxlZCA9IGluamVjdChWQUxURUNIX0RFQlVHX0NPTlNPTEUsIHsgb3B0aW9uYWw6IHRydWUgfSk/LmVuYWJsZWQgPz8gZmFsc2U7XG5cbiAgcmVhZG9ubHkgb3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGVudHJpZXMgPSBzaWduYWw8RGVidWdMb2dFbnRyeVtdPihbXSk7XG5cbiAgLyoqXG4gICAqIEJ1ZmZlciBwbGFubyAoTk8gc2lnbmFsKS4gYGNvbnNvbGUubG9nYCBwdWVkZSBpbnZvY2Fyc2UgZGVudHJvIGRlIHVuXG4gICAqIGBlZmZlY3QoKWAvYGNvbXB1dGVkKClgOyBlc2NyaWJpciBlbCBzaWduYWwgYGVudHJpZXNgIGFow60gbWlzbW8gZGlzcGFyYVxuICAgKiBORzA2MDAuIEFjdW11bGFtb3MgZW4gZXN0ZSBhcnJheSB5IHZvbGNhbW9zIGFsIHNpZ25hbCBlbiB1biBtaWNyb3Rhc2ssXG4gICAqIGZ1ZXJhIGRlIHRvZG8gY29udGV4dG8gcmVhY3Rpdm8uXG4gICAqL1xuICBwcml2YXRlIGJ1ZmZlcjogRGVidWdMb2dFbnRyeVtdID0gW107XG4gIHByaXZhdGUgZmx1c2hTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvKiogUmVmZXJlbmNpYXMgYSBsb3MgbcOpdG9kb3Mgb3JpZ2luYWxlcyBwYXJhIHJlc3RhdXJhcmxvcyBlbiBkZXN0cm95LiAqL1xuICBwcml2YXRlIG9yaWdpbmFsOiBQYXJ0aWFsPFJlY29yZDxEZWJ1Z0xvZ0xldmVsLCAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkPj4gPSB7fTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMucGF0Y2hDb25zb2xlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMucmVzdG9yZUNvbnNvbGUoKTtcbiAgfVxuXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4udXBkYXRlKHYgPT4gIXYpO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICB0aGlzLmVudHJpZXMuc2V0KFtdKTtcbiAgfVxuXG4gIGFzeW5jIGNvcHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMuZW50cmllcygpXG4gICAgICAubWFwKGUgPT4gYCR7ZS50c30gWyR7ZS5sZXZlbH1dICR7ZS50ZXh0fWApXG4gICAgICAuam9pbignXFxuJyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmFsbGJhY2sgcGFyYSBXZWJWaWV3cyBzaW4gQ2xpcGJvYXJkIEFQSS5cbiAgICAgIGNvbnN0IHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgIHRhLnZhbHVlID0gdGV4dDtcbiAgICAgIHRhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgIHRhLnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRhKTtcbiAgICAgIHRhLnNlbGVjdCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvKiBzaW4gcmVjdXJzbyBkZSBjb3BpYSBkaXNwb25pYmxlICovXG4gICAgICB9XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRhKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVlbXBsYXphIGxvcyBtw6l0b2RvcyBkZSBgY29uc29sZWAgcGFyYSBlc3BlamFyIGNhZGEgbGxhbWFkYSBhbCBidWZmZXIuICovXG4gIHByaXZhdGUgcGF0Y2hDb25zb2xlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxldmVsczogRGVidWdMb2dMZXZlbFtdID0gWydsb2cnLCAnd2FybicsICdlcnJvcicsICdpbmZvJ107XG4gICAgZm9yIChjb25zdCBsZXZlbCBvZiBsZXZlbHMpIHtcbiAgICAgIGNvbnN0IG9yaWcgPSBjb25zb2xlW2xldmVsXS5iaW5kKGNvbnNvbGUpIGFzICguLi5hOiB1bmtub3duW10pID0+IHZvaWQ7XG4gICAgICB0aGlzLm9yaWdpbmFsW2xldmVsXSA9IG9yaWc7XG4gICAgICBjb25zb2xlW2xldmVsXSA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgb3JpZyguLi5hcmdzKTtcbiAgICAgICAgdGhpcy5wdXNoKGxldmVsLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlc3RhdXJhIGxvcyBtw6l0b2RvcyBvcmlnaW5hbGVzIGRlIGBjb25zb2xlYC4gKi9cbiAgcHJpdmF0ZSByZXN0b3JlQ29uc29sZSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGxldmVsIG9mIE9iamVjdC5rZXlzKHRoaXMub3JpZ2luYWwpIGFzIERlYnVnTG9nTGV2ZWxbXSkge1xuICAgICAgY29uc3Qgb3JpZyA9IHRoaXMub3JpZ2luYWxbbGV2ZWxdO1xuICAgICAgaWYgKG9yaWcpIHtcbiAgICAgICAgY29uc29sZVtsZXZlbF0gPSBvcmlnO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9yaWdpbmFsID0ge307XG4gIH1cblxuICAvKipcbiAgICogQWdyZWdhIHVuYSBlbnRyYWRhIGFsIGJ1ZmZlciBwbGFubyB5IHByb2dyYW1hIGVsIHZvbGNhZG8gYWwgc2lnbmFsLlxuICAgKiBFbCB2b2xjYWRvIHNlIGRpZmllcmUgYSB1biBtaWNyb3Rhc2s6IGBjb25zb2xlLmxvZ2AgcHVlZGUgbGxhbWFyc2UgZGVzZGVcbiAgICogZGVudHJvIGRlIHVuIGBlZmZlY3QoKWAsIHkgZXNjcmliaXIgdW4gc2lnbmFsIGFow60gbGFuemFyw61hIE5HMDYwMC5cbiAgICovXG4gIHByaXZhdGUgcHVzaChsZXZlbDogRGVidWdMb2dMZXZlbCwgYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dCA9IGFyZ3MubWFwKGEgPT4gdGhpcy5zdHJpbmdpZnkoYSkpLmpvaW4oJyAnKTtcbiAgICBjb25zdCB0cyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgxMSwgMjMpO1xuICAgIHRoaXMuYnVmZmVyLnB1c2goeyB0cywgbGV2ZWwsIHRleHQgfSk7XG4gICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA+IE1BWF9FTlRSSUVTKSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMuYnVmZmVyLmxlbmd0aCAtIE1BWF9FTlRSSUVTKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlZHVsZUZsdXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogVnVlbGNhIGVsIGJ1ZmZlciBhbCBzaWduYWwgYGVudHJpZXNgIGVuIHVuIG1pY3JvdGFzayDigJQgZnVlcmEgZGVsIGNvbnRleHRvXG4gICAqIHJlYWN0aXZvIGRlc2RlIGVsIHF1ZSBzZSBoYXlhIGxsYW1hZG8gYGNvbnNvbGUubG9nYC4gQmF0Y2hlYTogbcO6bHRpcGxlc1xuICAgKiBsb2dzIGRlbCBtaXNtbyB0aWNrIHJlc3VsdGFuIGVuIHVuYSBzb2xhIGVzY3JpdHVyYSBkZWwgc2lnbmFsLlxuICAgKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZUZsdXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZsdXNoU2NoZWR1bGVkKSByZXR1cm47XG4gICAgdGhpcy5mbHVzaFNjaGVkdWxlZCA9IHRydWU7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgdGhpcy5mbHVzaFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5lbnRyaWVzLnNldChbLi4udGhpcy5idWZmZXJdKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDb252aWVydGUgY3VhbHF1aWVyIGFyZ3VtZW50byBhIHVuYSByZXByZXNlbnRhY2nDs24gbGVnaWJsZSBkZSB1bmEgbMOtbmVhLiAqL1xuICBwcml2YXRlIHN0cmluZ2lmeSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGAke3ZhbHVlLm5hbWV9OiAke3ZhbHVlLm1lc3NhZ2V9YDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,12 @@
1
+ /**
2
+ * DebugConsole Types
3
+ *
4
+ * Tipos para el overlay de logs en pantalla (`val-debug-console`).
5
+ */
6
+ /**
7
+ * Configuración por defecto: deshabilitado (inerte).
8
+ */
9
+ export const DEFAULT_DEBUG_CONSOLE_CONFIG = {
10
+ enabled: false,
11
+ };
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2RlYnVnLWNvbnNvbGUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQWFIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQWlDO0lBQ3hFLE9BQU8sRUFBRSxLQUFLO0NBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGVidWdDb25zb2xlIFR5cGVzXG4gKlxuICogVGlwb3MgcGFyYSBlbCBvdmVybGF5IGRlIGxvZ3MgZW4gcGFudGFsbGEgKGB2YWwtZGVidWctY29uc29sZWApLlxuICovXG5cbi8qKlxuICogQ29uZmlndXJhY2nDs24gZGVsIHByb3ZlZWRvciBkZSBEZWJ1Z0NvbnNvbGUuXG4gKlxuICogQHByb3BlcnR5IGVuYWJsZWQgLSBHYXRlIG1hZXN0cm8uIEN1YW5kbyBlcyBgZmFsc2VgIGVsIGNvbXBvbmVudGUgTk8gcGFyY2hlYVxuICogICBgY29uc29sZWAgeSBOTyByZW5kZXJpemEgbmFkYS4gTGEgYXBwIGRlY2lkZSBlbCB2YWxvciDigJQgbm9ybWFsbWVudGVcbiAqICAgYCFlbnZpcm9ubWVudC5wcm9kdWN0aW9uYC4gU2luIHByb3ZpZGVyLCBlbCBkZWZhdWx0IGVzIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVidWdDb25zb2xlQ29uZmlnIHtcbiAgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uZmlndXJhY2nDs24gcG9yIGRlZmVjdG86IGRlc2hhYmlsaXRhZG8gKGluZXJ0ZSkuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RFQlVHX0NPTlNPTEVfQ09ORklHOiBSZXF1aXJlZDxEZWJ1Z0NvbnNvbGVDb25maWc+ID0ge1xuICBlbmFibGVkOiBmYWxzZSxcbn07XG5cbi8qKiBOaXZlbCBkZSBsb2cgY2FwdHVyYWRvLiAqL1xuZXhwb3J0IHR5cGUgRGVidWdMb2dMZXZlbCA9ICdsb2cnIHwgJ3dhcm4nIHwgJ2Vycm9yJyB8ICdpbmZvJztcblxuLyoqIEVudHJhZGEgZGVsIGJ1ZmZlciBkZSBsb2dzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWJ1Z0xvZ0VudHJ5IHtcbiAgdHM6IHN0cmluZztcbiAgbGV2ZWw6IERlYnVnTG9nTGV2ZWw7XG4gIHRleHQ6IHN0cmluZztcbn1cbiJdfQ==
@@ -278,4 +278,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
278
278
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.FirestoreCollectionFactory, decorators: [{
279
279
  type: Optional
280
280
  }] }] });
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9ub3RpZmljYXRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUlyRCxvREFBb0Q7QUFDcEQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBNkJ6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQWUvQixZQUNVLFFBQWtCLEVBQ04saUJBQTZDO1FBRHpELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDTixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTRCO1FBaEIzRCxlQUFVLEdBQWlELElBQUksQ0FBQztRQUNoRSxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDcEMscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQzVDLElBQUksQ0FDTCxDQUFDO1FBRUYsOERBQThEO1FBQ3RELGdCQUFXLEdBQXVCLElBQUksQ0FBQztRQUUvQyx3RUFBd0U7UUFDeEUsNkVBQTZFO1FBQzdFLHlCQUF5QjtRQUNqQixvQkFBZSxHQUEyQixJQUFJLENBQUM7UUFNckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMs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QixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQzsrR0E1UVUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FEUCxNQUFNOzs0RkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBa0I3QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOb3RpZmljYXRpb25zIFNlcnZpY2VcbiAqXG4gKiBTZXJ2aWNpbyBwYXJhIGxlZXIgbm90aWZpY2FjaW9uZXMgZGVzZGUgRmlyZXN0b3JlLlxuICogRWwgYmFja2VuZCBlc2NyaWJlIGxhcyBub3RpZmljYWNpb25lcywgZWwgZnJvbnRlbmQgc29sbyBsYXMgbGVlIHkgYWN0dWFsaXphIGVzdGFkby5cbiAqXG4gKiBTZSBhdXRvLWluaWNpYWxpemEgY3VhbmRvIEF1dGhTZXJ2aWNlIHRpZW5lIHVuIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gKiBUYW1iacOpbiBwdWVkZSBpbmljaWFsaXphcnNlIG1hbnVhbG1lbnRlIGNvbiBgaW5pdGlhbGl6ZSh1c2VySWQpYC5cbiAqL1xuXG5pbXBvcnQgeyBlZmZlY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9maXJlYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpcmVzdG9yZUNvbGxlY3Rpb25GYWN0b3J5LCBUeXBlZENvbGxlY3Rpb24gfSBmcm9tICcuL2ZpcmVzdG9yZS1jb2xsZWN0aW9uJztcbmltcG9ydCB7IEZpcmVzdG9yZURvY3VtZW50IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKiBMw61taXRlIHBvciBkZWZlY3RvIGRlIG5vdGlmaWNhY2lvbmVzIGEgY2FyZ2FyICovXG5jb25zdCBERUZBVUxUX0xJTUlUID0gNTA7XG5cbi8qKlxuICogRG9jdW1lbnRvIGRlIG5vdGlmaWNhY2nDs24gZW4gRmlyZXN0b3JlLlxuICogRXN0cnVjdHVyYSBlc2NyaXRhIHBvciBlbCBiYWNrZW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkRvY3VtZW50IGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQge1xuICAvKiogVMOtdHVsbyBkZSBsYSBub3RpZmljYWNpw7NuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICAvKiogQ3VlcnBvIGRlbCBtZW5zYWplICovXG4gIGJvZHk/OiBzdHJpbmc7XG4gIC8qKiBVUkwgZGUgaW1hZ2VuICovXG4gIGltYWdlPzogc3RyaW5nO1xuICAvKiogRGF0b3MgcGVyc29uYWxpemFkb3MgKGVqOiByb3V0ZSwgYWN0aW9uVHlwZSkuIExlZ2FjeSDigJQgcHJlZmVyaXIgYWN0aW9uUm91dGUgKyBwYXlsb2FkICovXG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogVGlwbyBkZSBub3RpZmljYWNpw7NuICovXG4gIHR5cGU/OiAnZmNtJyB8ICdzeXN0ZW0nIHwgJ3JlbWluZGVyJyB8IHN0cmluZztcbiAgLyoqIFNpIGxhIG5vdGlmaWNhY2nDs24gZnVlIGxlw61kYSAqL1xuICBpc1JlYWQ6IGJvb2xlYW47XG4gIC8qKiBBcHBJRCBvcmlnZW4gKGVqOiAnc2hvd2Nhc2UnLCAnc2lnaWZ5JykuIFBlcm1pdGUgY3Jvc3MtYXBwIHJvdXRpbmcgKi9cbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIC8qKiBPcmdJRCBhc29jaWFkbyAoc2kgbGEgbm90aWYgZXMgb3JnLXNjb3BlZCkuIEhhYmlsaXRhIHN3aXRjaC1vcmcgYWwgYWJyaXIgKi9cbiAgb3JnSWQ/OiBzdHJpbmc7XG4gIC8qKiBSb3V0ZSBkZXN0aW5vIGFsIGNsaWNrIChlajogJy9hcHAvZG9jcy8xMjMnKSAqL1xuICBhY3Rpb25Sb3V0ZT86IHN0cmluZztcbiAgLyoqIFBheWxvYWQgZXN0cnVjdHVyYWRvIHBhcmEgYWNjaW9uZXMgKHJlZW1wbGF6byB0aXBhZG8gZGUgYGRhdGFgKSAqL1xuICBwYXlsb2FkPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBsZWVyIG5vdGlmaWNhY2lvbmVzIGRlc2RlIEZpcmVzdG9yZS5cbiAqXG4gKiBTZSBhdXRvLWluaWNpYWxpemEgY3VhbmRvIEF1dGhTZXJ2aWNlIHRpZW5lIHVuIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gKiBObyByZXF1aWVyZSBsbGFtYXIgYSBgaW5pdGlhbGl6ZSgpYCBtYW51YWxtZW50ZSBzaSBBdXRoU2VydmljZSBlc3TDoSBjb25maWd1cmFkby5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ29uIEF1dGhTZXJ2aWNlIGNvbmZpZ3VyYWRvOiBhdXRvLWluaWNpYWxpemFjacOzblxuICogLy8gU29sbyBpbnllY3RhciB5IHVzYXIgZGlyZWN0YW1lbnRlXG4gKiBwcml2YXRlIG5vdGlmaWNhdGlvbnMgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICpcbiAqIG5vdGlmaWNhdGlvbnMkID0gdGhpcy5ub3RpZmljYXRpb25zLmdldEFsbCgpO1xuICogdW5yZWFkQ291bnQkID0gdGhpcy5ub3RpZmljYXRpb25zLmdldFVucmVhZENvdW50KCk7XG4gKlxuICogLy8gU2luIEF1dGhTZXJ2aWNlOiBpbmljaWFsaXphY2nDs24gbWFudWFsXG4gKiB0aGlzLm5vdGlmaWNhdGlvbnMuaW5pdGlhbGl6ZSh1c2VySWQpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uc1NlcnZpY2Uge1xuICBwcml2YXRlIGNvbGxlY3Rpb246IFR5cGVkQ29sbGVjdGlvbjxOb3RpZmljYXRpb25Eb2N1bWVudD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VXNlcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uUmVhZHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUeXBlZENvbGxlY3Rpb248Tm90aWZpY2F0aW9uRG9jdW1lbnQ+IHwgbnVsbD4oXG4gICAgbnVsbFxuICApO1xuXG4gIC8vIElueWVjY2nDs24gb3BjaW9uYWwgLSBBdXRoU2VydmljZSBwdWVkZSBubyBlc3RhciBjb25maWd1cmFkb1xuICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIElueWVjY2nDs24gb3BjaW9uYWwgLSBGaXJlYmFzZVNlcnZpY2UgZ2F0ZWEgbG9zIGxpc3RlbmVycyBoYXN0YSBxdWUgbGFcbiAgLy8gc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoIGVzdMOpIGxpc3RhIChjaWVycmEgbGEgdmVudGFuYSBkZSBwZXJtaXNzaW9uLWRlbmllZFxuICAvLyBlbiBjb2xkIHN0YXJ0IGRlIFBXQSkuXG4gIHByaXZhdGUgZmlyZWJhc2VTZXJ2aWNlOiBGaXJlYmFzZVNlcnZpY2UgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbGxlY3Rpb25GYWN0b3J5OiBGaXJlc3RvcmVDb2xsZWN0aW9uRmFjdG9yeVxuICApIHtcbiAgICB0aGlzLmZpcmViYXNlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEZpcmViYXNlU2VydmljZSwgbnVsbCk7XG4gICAgLy8gSW50ZW50YXIgb2J0ZW5lciBBdXRoU2VydmljZSBkZSBmb3JtYSBsYXp5IChwdWVkZSBubyBlc3RhciBjb25maWd1cmFkbylcbiAgICB0aGlzLnNldHVwQXV0b0luaXRpYWxpemF0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogR2F0ZSBkZSBGaXJlYmFzZSBBdXRoOiBlbWl0ZSBsYSBjb2xlY2Npw7NuIGxpc3RhIFNPTE8gY3VhbmRvIGxhIHNlc2nDs24gZGVcbiAgICogRmlyZWJhc2UgQXV0aCBlc3TDoSBjb25maXJtYWRhLiBTaW4gRmlyZWJhc2VTZXJ2aWNlIGRpc3BvbmlibGUsIG5vIGdhdGVhXG4gICAqIChkZWdyYWRhIGFsIGNvbXBvcnRhbWllbnRvIHByZXZpbykuIEVzcGVyYSBhIHF1ZSBgZmlyZWJhc2VBdXRoUmVhZHkkYFxuICAgKiBlbWl0YSBhbnRlcyBkZSBwcm9wYWdhciBsYSBjb2xlY2Npw7NuIOKAlCBhc8OtIGVsIGxpc3RlbmVyIEZpcmVzdG9yZSBudW5jYSBzZVxuICAgKiBhZGp1bnRhIGFudGVzIGRlIHF1ZSBgcmVxdWVzdC5hdXRoYCBlc3TDqSBkaXNwb25pYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBjb2xsZWN0aW9uV2hlbkF1dGhSZWFkeSQoKTogT2JzZXJ2YWJsZTxUeXBlZENvbGxlY3Rpb248Tm90aWZpY2F0aW9uRG9jdW1lbnQ+IHwgbnVsbD4ge1xuICAgIGNvbnN0IGZiID0gdGhpcy5maXJlYmFzZVNlcnZpY2U7XG4gICAgaWYgKCFmYikge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvblJlYWR5JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvblJlYWR5JC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNvbGxlY3Rpb24gPT4ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnW05vdGlmc10gY29sbGVjdGlvbldoZW5BdXRoUmVhZHkkIOKAlCBjb2xsZWN0aW9uIGlzIG51bGwgKG5vdCBpbml0aWFsaXplZCknKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ1tOb3RpZnNdIGNvbGxlY3Rpb25XaGVuQXV0aFJlYWR5JCDigJQgY29sbGVjdGlvbiByZWFkeSwgYXdhaXRpbmcgRmlyZWJhc2UgQXV0aCcpO1xuICAgICAgICByZXR1cm4gZnJvbShmYi53aGVuRmlyZWJhc2VBdXRoUmVhZHkoKSkucGlwZShtYXAoKCkgPT4gY29sbGVjdGlvbikpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBhdXRvLWluaWNpYWxpemFjacOzbiBvYnNlcnZhbmRvIGVsIGVzdGFkbyBkZSBBdXRoU2VydmljZS5cbiAgICogU2UgZWplY3V0YSBlbiBlbCBjb250ZXh0byBkZWwgaW5qZWN0b3IgcGFyYSBwb2RlciB1c2FyIGVmZmVjdCgpLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cEF1dG9Jbml0aWFsaXphdGlvbigpOiB2b2lkIHtcbiAgICAvLyBPYnRlbmVyIEF1dGhTZXJ2aWNlIGRlIGZvcm1hIGxhenlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hdXRoU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEF1dGhTZXJ2aWNlLCBudWxsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEF1dGhTZXJ2aWNlIG5vIGVzdMOhIGNvbmZpZ3VyYWRvLCBubyBoYXkgYXV0by1pbmljaWFsaXphY2nDs25cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVc2FyIHJ1bkluSW5qZWN0aW9uQ29udGV4dCBwYXJhIHBvZGVyIGNyZWFyIGVsIGVmZmVjdFxuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5hdXRoU2VydmljZSEudXNlcigpO1xuXG4gICAgICAgIGlmICh1c2VyPy51c2VySWQgJiYgdGhpcy5jdXJyZW50VXNlcklkICE9PSB1c2VyLnVzZXJJZCkge1xuICAgICAgICAgIC8vIFVzdWFyaW8gYXV0ZW50aWNhZG86IGluaWNpYWxpemFyIGNvbiBzdSBJRFxuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSh1c2VyLnVzZXJJZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXVzZXIgJiYgdGhpcy5jdXJyZW50VXNlcklkKSB7XG4gICAgICAgICAgLy8gTG9nb3V0OiBsaW1waWFyIGVzdGFkb1xuICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBwYXJhIHVuIHVzdWFyaW8gZXNwZWPDrWZpY28uXG4gICAqXG4gICAqIE5PVEE6IFNlIGxsYW1hIGF1dG9tw6F0aWNhbWVudGUgc2kgQXV0aFNlcnZpY2UgZXN0w6EgY29uZmlndXJhZG8uXG4gICAqIFNvbG8gdXNhciBtYW51YWxtZW50ZSBzaSBBdXRoU2VydmljZSBubyBlc3TDoSBkaXNwb25pYmxlIG8gc2UgbmVjZXNpdGFcbiAgICogdW4gdXNlcklkIGRpZmVyZW50ZSBhbCBkZWwgdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAgICovXG4gIGluaXRpYWxpemUodXNlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhgW05vdGlmc10gaW5pdGlhbGl6ZSB1aWQ9JHt1c2VySWR9YCk7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb25GYWN0b3J5KSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdbTm90aWZpY2F0aW9uc10gRmlyZXN0b3JlQ29sbGVjdGlvbkZhY3Rvcnkgbm90IGF2YWlsYWJsZS4gRW5zdXJlIHByb3ZpZGVWYWx0ZWNoRmlyZWJhc2UoKSBpcyBjb25maWd1cmVkLidcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50VXNlcklkID0gdXNlcklkO1xuXG4gICAgLy8gUGF0aCBnbG9iYWwgY3Jvc3MtYXBwOiAvdXNlcnMve3VpZH0vbm90aWZpY2F0aW9ucyAoc2luIHByZWZpam8gYXBwcy97YXBwSWR9LykuXG4gICAgLy8gc2tpcEFwcFByZWZpeCBieXBhc3NhIEZpcmVzdG9yZVNlcnZpY2UucHJlZml4Q29sbGVjdGlvblBhdGggcGFyYSBmYW4tb3V0IGNvbXBhcnRpZG8uXG4gICAgY29uc3QgYmFzZVBhdGggPSBgdXNlcnMvJHt1c2VySWR9L25vdGlmaWNhdGlvbnNgO1xuXG4gICAgdGhpcy5jb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uRmFjdG9yeS5jcmVhdGU8Tm90aWZpY2F0aW9uRG9jdW1lbnQ+KGJhc2VQYXRoLCB7XG4gICAgICB0aW1lc3RhbXBzOiB0cnVlLFxuICAgICAgc2tpcEFwcFByZWZpeDogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmNvbGxlY3Rpb25SZWFkeSQubmV4dCh0aGlzLmNvbGxlY3Rpb24pO1xuXG4gICAgY29uc29sZS5sb2coJ1tOb3RpZmljYXRpb25zXSBJbml0aWFsaXplZCB3aXRoIHBhdGg6JywgYmFzZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHNlcnZpY2lvIGVzdMOhIGluaWNpYWxpemFkby5cbiAgICovXG4gIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24gIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCBJRCBkZWwgdXN1YXJpbyBhY3R1YWwuXG4gICAqL1xuICBnZXQgdXNlcklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VySWQ7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVDVFVSQVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSBub3RpZmljYWNpb25lcyBvcmRlbmFkYXMgcG9yIGZlY2hhIGRlc2NlbmRlbnRlIChyZWFsLXRpbWUpLlxuICAgKiBTZSBhY3R1YWxpemEgYXV0b23DoXRpY2FtZW50ZSBjdWFuZG8gY2FtYmlhbiBsb3MgZGF0b3MuXG4gICAqXG4gICAqIEVsIGxpc3RlbmVyIEZpcmVzdG9yZSBOTyBzZSBhZGp1bnRhIGhhc3RhIHF1ZSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGhcbiAgICogZXN0w6kgY29uZmlybWFkYSAoYEZpcmViYXNlU2VydmljZS5maXJlYmFzZUF1dGhSZWFkeWApLiBFc3RvIGNpZXJyYSBsYVxuICAgKiB2ZW50YW5hIGRlIGBwZXJtaXNzaW9uLWRlbmllZGAgZW4gY29sZCBzdGFydCBkZSBQV0EsIGRvbmRlIGVsIEpXVCBkZWxcbiAgICogYmFja2VuZCBwdWVkZSBlc3RhciBsaXN0byBhbnRlcyBxdWUgbGEgc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoLlxuICAgKlxuICAgKiBAcGFyYW0gbGltaXQgLSBNw6F4aW1vIGRlIG5vdGlmaWNhY2lvbmVzIGEgY2FyZ2FyIChkZWZhdWx0OiA1MClcbiAgICovXG4gIGdldEFsbChsaW1pdCA9IERFRkFVTFRfTElNSVQpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbkRvY3VtZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uV2hlbkF1dGhSZWFkeSQoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNvbGxlY3Rpb24gPT4ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tOb3RpZnNdIGdldEFsbCDigJQgY29sbGVjdGlvbiBudWxsIOKGkiByZXR1cm5pbmcgRU1QVFkgKG5vIGVtaXNzaW9uKScpO1xuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnW05vdGlmc10gZ2V0QWxsIOKAlCBhdHRhY2hpbmcgRmlyZXN0b3JlIHdhdGNoQWxsIGxpc3RlbmVyJyk7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uLndhdGNoQWxsKHtcbiAgICAgICAgICBvcmRlckJ5OiBbeyBmaWVsZDogJ2NyZWF0ZWRBdCcsIGRpcmVjdGlvbjogJ2Rlc2MnIH1dLFxuICAgICAgICAgIGxpbWl0LFxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIG5vdGlmaWNhY2lvbmVzIChvbmUtdGltZSBmZXRjaCBzaW4gbGlzdGVuZXIpLlxuICAgKiDDmnRpbCBwYXJhIGNhcmdhcyBpbmljaWFsZXMgc2luIG5lY2VzaWRhZCBkZSB1cGRhdGVzIGVuIHRpZW1wbyByZWFsLlxuICAgKlxuICAgKiBAcGFyYW0gbGltaXQgLSBNw6F4aW1vIGRlIG5vdGlmaWNhY2lvbmVzIGEgY2FyZ2FyIChkZWZhdWx0OiA1MClcbiAgICovXG4gIGFzeW5jIGdldEFsbE9uY2UobGltaXQgPSBERUZBVUxUX0xJTUlUKTogUHJvbWlzZTxOb3RpZmljYXRpb25Eb2N1bWVudFtdPiB7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHJldHVybiBbXTtcblxuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24uZ2V0QWxsT25jZSh7XG4gICAgICBvcmRlckJ5OiBbeyBmaWVsZDogJ2NyZWF0ZWRBdCcsIGRpcmVjdGlvbjogJ2Rlc2MnIH1dLFxuICAgICAgbGltaXQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBzb2xvIG5vdGlmaWNhY2lvbmVzIG5vIGxlw61kYXMgKHJlYWwtdGltZSwgZmlsdHJhZG8gc2VydmVyLXNpZGUpLlxuICAgKlxuICAgKiBAcGFyYW0gbGltaXQgLSBNw6F4aW1vIGRlIG5vdGlmaWNhY2lvbmVzIChkZWZhdWx0OiA1MClcbiAgICovXG4gIGdldFVucmVhZChsaW1pdCA9IERFRkFVTFRfTElNSVQpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbkRvY3VtZW50W10+IHtcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikgcmV0dXJuIG9mKFtdKTtcblxuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24ud2F0Y2hBbGwoe1xuICAgICAgd2hlcmU6IFt7IGZpZWxkOiAnaXNSZWFkJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmYWxzZSB9XSxcbiAgICAgIG9yZGVyQnk6IFt7IGZpZWxkOiAnY3JlYXRlZEF0JywgZGlyZWN0aW9uOiAnZGVzYycgfV0sXG4gICAgICBsaW1pdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdWVudGEgbm90aWZpY2FjaW9uZXMgbm8gbGXDrWRhcyB1c2FuZG8gc2VydmVyLXNpZGUgYWdncmVnYXRpb24gcXVlcnkuXG4gICAqIE5vIGRlc2NhcmdhIGRvY3VtZW50b3Mg4oCUIGVmaWNpZW50ZSBwYXJhIGJhZGdlcyBlbiBVSS5cbiAgICpcbiAgICogR2F0ZWFkbyBwb3IgYGZpcmViYXNlQXV0aFJlYWR5YCDigJQgbGEgYWdncmVnYXRpb24gcXVlcnkgbm8gc2UgZWplY3V0YSBoYXN0YVxuICAgKiBxdWUgbGEgc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoIGVzdMOpIGxpc3RhLlxuICAgKi9cbiAgZ2V0VW5yZWFkQ291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uV2hlbkF1dGhSZWFkeSQoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNvbGxlY3Rpb24gPT4ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHJldHVybiBvZigwKTtcbiAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgY29sbGVjdGlvbi5jb3VudCh7XG4gICAgICAgICAgICB3aGVyZTogW3sgZmllbGQ6ICdpc1JlYWQnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZhbHNlIH1dLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSB1bmEgbm90aWZpY2FjacOzbiBwb3IgSUQuXG4gICAqL1xuICBhc3luYyBnZXRCeUlkKG5vdGlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPE5vdGlmaWNhdGlvbkRvY3VtZW50IHwgbnVsbD4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uLmdldEJ5SWQobm90aWZpY2F0aW9uSWQpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEFDQ0lPTkVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBNYXJjYSB1bmEgbm90aWZpY2FjacOzbiBjb21vIGxlw61kYS5cbiAgICovXG4gIGFzeW5jIG1hcmtBc1JlYWQobm90aWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZShub3RpZmljYXRpb25JZCwgeyBpc1JlYWQ6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFyY2EgdG9kYXMgbGFzIG5vdGlmaWNhY2lvbmVzIG5vIGxlw61kYXMgY29tbyBsZcOtZGFzIChiYXRjaCB3cml0ZSkuXG4gICAqL1xuICBhc3luYyBtYXJrQWxsQXNSZWFkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm47XG5cbiAgICBjb25zdCB1bnJlYWQgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24ucXVlcnkoe1xuICAgICAgd2hlcmU6IFt7IGZpZWxkOiAnaXNSZWFkJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmYWxzZSB9XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlkcyA9IHVucmVhZC5tYXAobiA9PiBuLmlkISkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5iYXRjaFVwZGF0ZShpZHMsIHsgaXNSZWFkOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgdW5hIG5vdGlmaWNhY2nDs24uXG4gICAqL1xuICBhc3luYyBkZWxldGUobm90aWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZShub3RpZmljYXRpb25JZCk7XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSB0b2RhcyBsYXMgbm90aWZpY2FjaW9uZXMgZGVsIHVzdWFyaW8gKGJhdGNoIGRlbGV0ZSkuXG4gICAqL1xuICBhc3luYyBkZWxldGVBbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHJldHVybjtcblxuICAgIGNvbnN0IGFsbCA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5nZXRBbGwoKTtcbiAgICBjb25zdCBpZHMgPSBhbGwubWFwKG4gPT4gbi5pZCEpLmZpbHRlcihCb29sZWFuKTtcbiAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uYmF0Y2hEZWxldGUoaWRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgZWwgZXN0YWRvIGRlbCBzZXJ2aWNpby5cbiAgICogw5p0aWwgcGFyYSBsb2dvdXQuXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbGxlY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFVzZXJJZCA9IG51bGw7XG4gICAgdGhpcy5jb2xsZWN0aW9uUmVhZHkkLm5leHQobnVsbCk7XG4gIH1cbn1cbiJdfQ==
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9ub3RpZmljYXRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUlyRCxvREFBb0Q7QUFDcEQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBMkJ6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQWUvQixZQUNVLFFBQWtCLEVBQ04saUJBQTZDO1FBRHpELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDTixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTRCO1FBaEIzRCxlQUFVLEdBQWlELElBQUksQ0FBQztRQUNoRSxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDcEMscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQzVDLElBQUksQ0FDTCxDQUFDO1FBRUYsOERBQThEO1FBQ3RELGdCQUFXLEdBQXVCLElBQUksQ0FBQztRQUUvQyx3RUFBd0U7UUFDeEUsNkVBQTZFO1FBQzdFLHlCQUF5QjtRQUNqQixvQkFBZSxHQUEyQixJQUFJLENBQUM7UUFNckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMs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QixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQzsrR0E1UVUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FEUCxNQUFNOzs0RkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBa0I3QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOb3RpZmljYXRpb25zIFNlcnZpY2VcbiAqXG4gKiBTZXJ2aWNpbyBwYXJhIGxlZXIgbm90aWZpY2FjaW9uZXMgZGVzZGUgRmlyZXN0b3JlLlxuICogRWwgYmFja2VuZCBlc2NyaWJlIGxhcyBub3RpZmljYWNpb25lcywgZWwgZnJvbnRlbmQgc29sbyBsYXMgbGVlIHkgYWN0dWFsaXphIGVzdGFkby5cbiAqXG4gKiBTZSBhdXRvLWluaWNpYWxpemEgY3VhbmRvIEF1dGhTZXJ2aWNlIHRpZW5lIHVuIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gKiBUYW1iacOpbiBwdWVkZSBpbmljaWFsaXphcnNlIG1hbnVhbG1lbnRlIGNvbiBgaW5pdGlhbGl6ZSh1c2VySWQpYC5cbiAqL1xuXG5pbXBvcnQgeyBlZmZlY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9maXJlYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpcmVzdG9yZUNvbGxlY3Rpb25GYWN0b3J5LCBUeXBlZENvbGxlY3Rpb24gfSBmcm9tICcuL2ZpcmVzdG9yZS1jb2xsZWN0aW9uJztcbmltcG9ydCB7IEZpcmVzdG9yZURvY3VtZW50IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKiBMw61taXRlIHBvciBkZWZlY3RvIGRlIG5vdGlmaWNhY2lvbmVzIGEgY2FyZ2FyICovXG5jb25zdCBERUZBVUxUX0xJTUlUID0gNTA7XG5cbi8qKlxuICogRG9jdW1lbnRvIGRlIG5vdGlmaWNhY2nDs24gZW4gRmlyZXN0b3JlLlxuICogRXN0cnVjdHVyYSBlc2NyaXRhIHBvciBlbCBiYWNrZW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkRvY3VtZW50IGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQge1xuICAvKiogVMOtdHVsbyBkZSBsYSBub3RpZmljYWNpw7NuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICAvKiogQ3VlcnBvIGRlbCBtZW5zYWplICovXG4gIGJvZHk/OiBzdHJpbmc7XG4gIC8qKiBEYXRvcyBwZXJzb25hbGl6YWRvcyAoZWo6IHJvdXRlLCBhY3Rpb25UeXBlKS4gTGVnYWN5IOKAlCBwcmVmZXJpciBhY3Rpb25Sb3V0ZSArIHBheWxvYWQgKi9cbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBUaXBvIGRlIG5vdGlmaWNhY2nDs24gKi9cbiAgdHlwZT86ICdmY20nIHwgJ3N5c3RlbScgfCAncmVtaW5kZXInIHwgc3RyaW5nO1xuICAvKiogU2kgbGEgbm90aWZpY2FjacOzbiBmdWUgbGXDrWRhICovXG4gIGlzUmVhZDogYm9vbGVhbjtcbiAgLyoqIEFwcElEIG9yaWdlbiAoZWo6ICdzaG93Y2FzZScsICdzaWdpZnknKS4gUGVybWl0ZSBjcm9zcy1hcHAgcm91dGluZyAqL1xuICBhcHBJZD86IHN0cmluZztcbiAgLyoqIE9yZ0lEIGFzb2NpYWRvIChzaSBsYSBub3RpZiBlcyBvcmctc2NvcGVkKS4gSGFiaWxpdGEgc3dpdGNoLW9yZyBhbCBhYnJpciAqL1xuICBvcmdJZD86IHN0cmluZztcbiAgLyoqIFJvdXRlIGRlc3Rpbm8gYWwgY2xpY2sgKGVqOiAnL2FwcC9kb2NzLzEyMycpICovXG4gIGFjdGlvblJvdXRlPzogc3RyaW5nO1xuICAvKiogUGF5bG9hZCBlc3RydWN0dXJhZG8gcGFyYSBhY2Npb25lcyAocmVlbXBsYXpvIHRpcGFkbyBkZSBgZGF0YWApICovXG4gIHBheWxvYWQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBTZXJ2aWNpbyBwYXJhIGxlZXIgbm90aWZpY2FjaW9uZXMgZGVzZGUgRmlyZXN0b3JlLlxuICpcbiAqIFNlIGF1dG8taW5pY2lhbGl6YSBjdWFuZG8gQXV0aFNlcnZpY2UgdGllbmUgdW4gdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAqIE5vIHJlcXVpZXJlIGxsYW1hciBhIGBpbml0aWFsaXplKClgIG1hbnVhbG1lbnRlIHNpIEF1dGhTZXJ2aWNlIGVzdMOhIGNvbmZpZ3VyYWRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDb24gQXV0aFNlcnZpY2UgY29uZmlndXJhZG86IGF1dG8taW5pY2lhbGl6YWNpw7NuXG4gKiAvLyBTb2xvIGlueWVjdGFyIHkgdXNhciBkaXJlY3RhbWVudGVcbiAqIHByaXZhdGUgbm90aWZpY2F0aW9ucyA9IGluamVjdChOb3RpZmljYXRpb25zU2VydmljZSk7XG4gKlxuICogbm90aWZpY2F0aW9ucyQgPSB0aGlzLm5vdGlmaWNhdGlvbnMuZ2V0QWxsKCk7XG4gKiB1bnJlYWRDb3VudCQgPSB0aGlzLm5vdGlmaWNhdGlvbnMuZ2V0VW5yZWFkQ291bnQoKTtcbiAqXG4gKiAvLyBTaW4gQXV0aFNlcnZpY2U6IGluaWNpYWxpemFjacOzbiBtYW51YWxcbiAqIHRoaXMubm90aWZpY2F0aW9ucy5pbml0aWFsaXplKHVzZXJJZCk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25zU2VydmljZSB7XG4gIHByaXZhdGUgY29sbGVjdGlvbjogVHlwZWRDb2xsZWN0aW9uPE5vdGlmaWNhdGlvbkRvY3VtZW50PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRVc2VySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbGxlY3Rpb25SZWFkeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFR5cGVkQ29sbGVjdGlvbjxOb3RpZmljYXRpb25Eb2N1bWVudD4gfCBudWxsPihcbiAgICBudWxsXG4gICk7XG5cbiAgLy8gSW55ZWNjacOzbiBvcGNpb25hbCAtIEF1dGhTZXJ2aWNlIHB1ZWRlIG5vIGVzdGFyIGNvbmZpZ3VyYWRvXG4gIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gSW55ZWNjacOzbiBvcGNpb25hbCAtIEZpcmViYXNlU2VydmljZSBnYXRlYSBsb3MgbGlzdGVuZXJzIGhhc3RhIHF1ZSBsYVxuICAvLyBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggZXN0w6kgbGlzdGEgKGNpZXJyYSBsYSB2ZW50YW5hIGRlIHBlcm1pc3Npb24tZGVuaWVkXG4gIC8vIGVuIGNvbGQgc3RhcnQgZGUgUFdBKS5cbiAgcHJpdmF0ZSBmaXJlYmFzZVNlcnZpY2U6IEZpcmViYXNlU2VydmljZSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgY29sbGVjdGlvbkZhY3Rvcnk6IEZpcmVzdG9yZUNvbGxlY3Rpb25GYWN0b3J5XG4gICkge1xuICAgIHRoaXMuZmlyZWJhc2VTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoRmlyZWJhc2VTZXJ2aWNlLCBudWxsKTtcbiAgICAvLyBJbnRlbnRhciBvYnRlbmVyIEF1dGhTZXJ2aWNlIGRlIGZvcm1hIGxhenkgKHB1ZWRlIG5vIGVzdGFyIGNvbmZpZ3VyYWRvKVxuICAgIHRoaXMuc2V0dXBBdXRvSW5pdGlhbGl6YXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHYXRlIGRlIEZpcmViYXNlIEF1dGg6IGVtaXRlIGxhIGNvbGVjY2nDs24gbGlzdGEgU09MTyBjdWFuZG8gbGEgc2VzacOzbiBkZVxuICAgKiBGaXJlYmFzZSBBdXRoIGVzdMOhIGNvbmZpcm1hZGEuIFNpbiBGaXJlYmFzZVNlcnZpY2UgZGlzcG9uaWJsZSwgbm8gZ2F0ZWFcbiAgICogKGRlZ3JhZGEgYWwgY29tcG9ydGFtaWVudG8gcHJldmlvKS4gRXNwZXJhIGEgcXVlIGBmaXJlYmFzZUF1dGhSZWFkeSRgXG4gICAqIGVtaXRhIGFudGVzIGRlIHByb3BhZ2FyIGxhIGNvbGVjY2nDs24g4oCUIGFzw60gZWwgbGlzdGVuZXIgRmlyZXN0b3JlIG51bmNhIHNlXG4gICAqIGFkanVudGEgYW50ZXMgZGUgcXVlIGByZXF1ZXN0LmF1dGhgIGVzdMOpIGRpc3BvbmlibGUuXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3Rpb25XaGVuQXV0aFJlYWR5JCgpOiBPYnNlcnZhYmxlPFR5cGVkQ29sbGVjdGlvbjxOb3RpZmljYXRpb25Eb2N1bWVudD4gfCBudWxsPiB7XG4gICAgY29uc3QgZmIgPSB0aGlzLmZpcmViYXNlU2VydmljZTtcbiAgICBpZiAoIWZiKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uUmVhZHkkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uUmVhZHkkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY29sbGVjdGlvbiA9PiB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdbTm90aWZzXSBjb2xsZWN0aW9uV2hlbkF1dGhSZWFkeSQg4oCUIGNvbGxlY3Rpb24gaXMgbnVsbCAobm90IGluaXRpYWxpemVkKScpO1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnW05vdGlmc10gY29sbGVjdGlvbldoZW5BdXRoUmVhZHkkIOKAlCBjb2xsZWN0aW9uIHJlYWR5LCBhd2FpdGluZyBGaXJlYmFzZSBBdXRoJyk7XG4gICAgICAgIHJldHVybiBmcm9tKGZiLndoZW5GaXJlYmFzZUF1dGhSZWFkeSgpKS5waXBlKG1hcCgoKSA9PiBjb2xsZWN0aW9uKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhIGF1dG8taW5pY2lhbGl6YWNpw7NuIG9ic2VydmFuZG8gZWwgZXN0YWRvIGRlIEF1dGhTZXJ2aWNlLlxuICAgKiBTZSBlamVjdXRhIGVuIGVsIGNvbnRleHRvIGRlbCBpbmplY3RvciBwYXJhIHBvZGVyIHVzYXIgZWZmZWN0KCkuXG4gICAqL1xuICBwcml2YXRlIHNldHVwQXV0b0luaXRpYWxpemF0aW9uKCk6IHZvaWQge1xuICAgIC8vIE9idGVuZXIgQXV0aFNlcnZpY2UgZGUgZm9ybWEgbGF6eVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoQXV0aFNlcnZpY2UsIG51bGwpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQXV0aFNlcnZpY2Ugbm8gZXN0w6EgY29uZmlndXJhZG8sIG5vIGhheSBhdXRvLWluaWNpYWxpemFjacOzblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hdXRoU2VydmljZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFVzYXIgcnVuSW5JbmplY3Rpb25Db250ZXh0IHBhcmEgcG9kZXIgY3JlYXIgZWwgZWZmZWN0XG4gICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLmF1dGhTZXJ2aWNlIS51c2VyKCk7XG5cbiAgICAgICAgaWYgKHVzZXI/LnVzZXJJZCAmJiB0aGlzLmN1cnJlbnRVc2VySWQgIT09IHVzZXIudXNlcklkKSB7XG4gICAgICAgICAgLy8gVXN1YXJpbyBhdXRlbnRpY2FkbzogaW5pY2lhbGl6YXIgY29uIHN1IElEXG4gICAgICAgICAgdGhpcy5pbml0aWFsaXplKHVzZXIudXNlcklkKTtcbiAgICAgICAgfSBlbHNlIGlmICghdXNlciAmJiB0aGlzLmN1cnJlbnRVc2VySWQpIHtcbiAgICAgICAgICAvLyBMb2dvdXQ6IGxpbXBpYXIgZXN0YWRvXG4gICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIHBhcmEgdW4gdXN1YXJpbyBlc3BlY8OtZmljby5cbiAgICpcbiAgICogTk9UQTogU2UgbGxhbWEgYXV0b23DoXRpY2FtZW50ZSBzaSBBdXRoU2VydmljZSBlc3TDoSBjb25maWd1cmFkby5cbiAgICogU29sbyB1c2FyIG1hbnVhbG1lbnRlIHNpIEF1dGhTZXJ2aWNlIG5vIGVzdMOhIGRpc3BvbmlibGUgbyBzZSBuZWNlc2l0YVxuICAgKiB1biB1c2VySWQgZGlmZXJlbnRlIGFsIGRlbCB1c3VhcmlvIGF1dGVudGljYWRvLlxuICAgKi9cbiAgaW5pdGlhbGl6ZSh1c2VySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGBbTm90aWZzXSBpbml0aWFsaXplIHVpZD0ke3VzZXJJZH1gKTtcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbkZhY3RvcnkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tOb3RpZmljYXRpb25zXSBGaXJlc3RvcmVDb2xsZWN0aW9uRmFjdG9yeSBub3QgYXZhaWxhYmxlLiBFbnN1cmUgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSgpIGlzIGNvbmZpZ3VyZWQuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRVc2VySWQgPSB1c2VySWQ7XG5cbiAgICAvLyBQYXRoIGdsb2JhbCBjcm9zcy1hcHA6IC91c2Vycy97dWlkfS9ub3RpZmljYXRpb25zIChzaW4gcHJlZmlqbyBhcHBzL3thcHBJZH0vKS5cbiAgICAvLyBza2lwQXBwUHJlZml4IGJ5cGFzc2EgRmlyZXN0b3JlU2VydmljZS5wcmVmaXhDb2xsZWN0aW9uUGF0aCBwYXJhIGZhbi1vdXQgY29tcGFydGlkby5cbiAgICBjb25zdCBiYXNlUGF0aCA9IGB1c2Vycy8ke3VzZXJJZH0vbm90aWZpY2F0aW9uc2A7XG5cbiAgICB0aGlzLmNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb25GYWN0b3J5LmNyZWF0ZTxOb3RpZmljYXRpb25Eb2N1bWVudD4oYmFzZVBhdGgsIHtcbiAgICAgIHRpbWVzdGFtcHM6IHRydWUsXG4gICAgICBza2lwQXBwUHJlZml4OiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMuY29sbGVjdGlvblJlYWR5JC5uZXh0KHRoaXMuY29sbGVjdGlvbik7XG5cbiAgICBjb25zb2xlLmxvZygnW05vdGlmaWNhdGlvbnNdIEluaXRpYWxpemVkIHdpdGggcGF0aDonLCBiYXNlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgc2VydmljaW8gZXN0w6EgaW5pY2lhbGl6YWRvLlxuICAgKi9cbiAgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbiAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIElEIGRlbCB1c3VhcmlvIGFjdHVhbC5cbiAgICovXG4gIGdldCB1c2VySWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXJJZDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRUNUVVJBXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIG5vdGlmaWNhY2lvbmVzIG9yZGVuYWRhcyBwb3IgZmVjaGEgZGVzY2VuZGVudGUgKHJlYWwtdGltZSkuXG4gICAqIFNlIGFjdHVhbGl6YSBhdXRvbcOhdGljYW1lbnRlIGN1YW5kbyBjYW1iaWFuIGxvcyBkYXRvcy5cbiAgICpcbiAgICogRWwgbGlzdGVuZXIgRmlyZXN0b3JlIE5PIHNlIGFkanVudGEgaGFzdGEgcXVlIGxhIHNlc2nDs24gZGUgRmlyZWJhc2UgQXV0aFxuICAgKiBlc3TDqSBjb25maXJtYWRhIChgRmlyZWJhc2VTZXJ2aWNlLmZpcmViYXNlQXV0aFJlYWR5YCkuIEVzdG8gY2llcnJhIGxhXG4gICAqIHZlbnRhbmEgZGUgYHBlcm1pc3Npb24tZGVuaWVkYCBlbiBjb2xkIHN0YXJ0IGRlIFBXQSwgZG9uZGUgZWwgSldUIGRlbFxuICAgKiBiYWNrZW5kIHB1ZWRlIGVzdGFyIGxpc3RvIGFudGVzIHF1ZSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGguXG4gICAqXG4gICAqIEBwYXJhbSBsaW1pdCAtIE3DoXhpbW8gZGUgbm90aWZpY2FjaW9uZXMgYSBjYXJnYXIgKGRlZmF1bHQ6IDUwKVxuICAgKi9cbiAgZ2V0QWxsKGxpbWl0ID0gREVGQVVMVF9MSU1JVCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uRG9jdW1lbnRbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25XaGVuQXV0aFJlYWR5JCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY29sbGVjdGlvbiA9PiB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbikge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW05vdGlmc10gZ2V0QWxsIOKAlCBjb2xsZWN0aW9uIG51bGwg4oaSIHJldHVybmluZyBFTVBUWSAobm8gZW1pc3Npb24pJyk7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdbTm90aWZzXSBnZXRBbGwg4oCUIGF0dGFjaGluZyBGaXJlc3RvcmUgd2F0Y2hBbGwgbGlzdGVuZXInKTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24ud2F0Y2hBbGwoe1xuICAgICAgICAgIG9yZGVyQnk6IFt7IGZpZWxkOiAnY3JlYXRlZEF0JywgZGlyZWN0aW9uOiAnZGVzYycgfV0sXG4gICAgICAgICAgbGltaXQsXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbm90aWZpY2FjaW9uZXMgKG9uZS10aW1lIGZldGNoIHNpbiBsaXN0ZW5lcikuXG4gICAqIMOadGlsIHBhcmEgY2FyZ2FzIGluaWNpYWxlcyBzaW4gbmVjZXNpZGFkIGRlIHVwZGF0ZXMgZW4gdGllbXBvIHJlYWwuXG4gICAqXG4gICAqIEBwYXJhbSBsaW1pdCAtIE3DoXhpbW8gZGUgbm90aWZpY2FjaW9uZXMgYSBjYXJnYXIgKGRlZmF1bHQ6IDUwKVxuICAgKi9cbiAgYXN5bmMgZ2V0QWxsT25jZShsaW1pdCA9IERFRkFVTFRfTElNSVQpOiBQcm9taXNlPE5vdGlmaWNhdGlvbkRvY3VtZW50W10+IHtcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbi5nZXRBbGxPbmNlKHtcbiAgICAgIG9yZGVyQnk6IFt7IGZpZWxkOiAnY3JlYXRlZEF0JywgZGlyZWN0aW9uOiAnZGVzYycgfV0sXG4gICAgICBsaW1pdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHNvbG8gbm90aWZpY2FjaW9uZXMgbm8gbGXDrWRhcyAocmVhbC10aW1lLCBmaWx0cmFkbyBzZXJ2ZXItc2lkZSkuXG4gICAqXG4gICAqIEBwYXJhbSBsaW1pdCAtIE3DoXhpbW8gZGUgbm90aWZpY2FjaW9uZXMgKGRlZmF1bHQ6IDUwKVxuICAgKi9cbiAgZ2V0VW5yZWFkKGxpbWl0ID0gREVGQVVMVF9MSU1JVCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uRG9jdW1lbnRbXT4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm4gb2YoW10pO1xuXG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbi53YXRjaEFsbCh7XG4gICAgICB3aGVyZTogW3sgZmllbGQ6ICdpc1JlYWQnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZhbHNlIH1dLFxuICAgICAgb3JkZXJCeTogW3sgZmllbGQ6ICdjcmVhdGVkQXQnLCBkaXJlY3Rpb246ICdkZXNjJyB9XSxcbiAgICAgIGxpbWl0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1ZW50YSBub3RpZmljYWNpb25lcyBubyBsZcOtZGFzIHVzYW5kbyBzZXJ2ZXItc2lkZSBhZ2dyZWdhdGlvbiBxdWVyeS5cbiAgICogTm8gZGVzY2FyZ2EgZG9jdW1lbnRvcyDigJQgZWZpY2llbnRlIHBhcmEgYmFkZ2VzIGVuIFVJLlxuICAgKlxuICAgKiBHYXRlYWRvIHBvciBgZmlyZWJhc2VBdXRoUmVhZHlgIOKAlCBsYSBhZ2dyZWdhdGlvbiBxdWVyeSBubyBzZSBlamVjdXRhIGhhc3RhXG4gICAqIHF1ZSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggZXN0w6kgbGlzdGEuXG4gICAqL1xuICBnZXRVbnJlYWRDb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25XaGVuQXV0aFJlYWR5JCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY29sbGVjdGlvbiA9PiB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbikgcmV0dXJuIG9mKDApO1xuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICBjb2xsZWN0aW9uLmNvdW50KHtcbiAgICAgICAgICAgIHdoZXJlOiBbeyBmaWVsZDogJ2lzUmVhZCcsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZmFsc2UgfV0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHVuYSBub3RpZmljYWNpw7NuIHBvciBJRC5cbiAgICovXG4gIGFzeW5jIGdldEJ5SWQobm90aWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Tm90aWZpY2F0aW9uRG9jdW1lbnQgfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24uZ2V0QnlJZChub3RpZmljYXRpb25JZCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQUNDSU9ORVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE1hcmNhIHVuYSBub3RpZmljYWNpw7NuIGNvbW8gbGXDrWRhLlxuICAgKi9cbiAgYXN5bmMgbWFya0FzUmVhZChub3RpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlKG5vdGlmaWNhdGlvbklkLCB7IGlzUmVhZDogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJjYSB0b2RhcyBsYXMgbm90aWZpY2FjaW9uZXMgbm8gbGXDrWRhcyBjb21vIGxlw61kYXMgKGJhdGNoIHdyaXRlKS5cbiAgICovXG4gIGFzeW5jIG1hcmtBbGxBc1JlYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHJldHVybjtcblxuICAgIGNvbnN0IHVucmVhZCA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5xdWVyeSh7XG4gICAgICB3aGVyZTogW3sgZmllbGQ6ICdpc1JlYWQnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZhbHNlIH1dLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaWRzID0gdW5yZWFkLm1hcChuID0+IG4uaWQhKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmJhdGNoVXBkYXRlKGlkcywgeyBpc1JlYWQ6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSB1bmEgbm90aWZpY2FjacOzbi5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZShub3RpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZGVsZXRlKG5vdGlmaWNhdGlvbklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbGltaW5hIHRvZGFzIGxhcyBub3RpZmljYWNpb25lcyBkZWwgdXN1YXJpbyAoYmF0Y2ggZGVsZXRlKS5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgYWxsID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmdldEFsbCgpO1xuICAgIGNvbnN0IGlkcyA9IGFsbC5tYXAobiA9PiBuLmlkISkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5iYXRjaERlbGV0ZShpZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpbXBpYSBlbCBlc3RhZG8gZGVsIHNlcnZpY2lvLlxuICAgKiDDmnRpbCBwYXJhIGxvZ291dC5cbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuY29sbGVjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50VXNlcklkID0gbnVsbDtcbiAgICB0aGlzLmNvbGxlY3Rpb25SZWFkeSQubmV4dChudWxsKTtcbiAgfVxufVxuIl19
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '2.0.830';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC44MzAnO1xuIl19
5
+ export const VERSION = '2.0.832';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC44MzInO1xuIl19