valtech-components 4.0.241 → 4.0.243

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.
@@ -4,7 +4,9 @@ import { IonIcon } from '@ionic/angular/standalone';
4
4
  import { addIcons } from 'ionicons';
5
5
  import { alertCircle, checkmark, checkmarkDone, createOutline, documentOutline, happyOutline, arrowUndoOutline, timeOutline, trashOutline, } from 'ionicons/icons';
6
6
  import { I18nService } from '../../../services/i18n';
7
+ import { ModalService } from '../../../services/modal/modal.service';
7
8
  import { formatClockTime } from '../../../shared/utils/datetime';
9
+ import { MediaViewerModalComponent } from '../../organisms/media-viewer-modal/media-viewer-modal.component';
8
10
  import * as i0 from "@angular/core";
9
11
  addIcons({
10
12
  alertCircle,
@@ -49,6 +51,7 @@ const MESSAGE_BUBBLE_I18N = {
49
51
  export class MessageBubbleComponent {
50
52
  constructor() {
51
53
  this.i18n = inject(I18nService);
54
+ this.modal = inject(ModalService);
52
55
  this.msg = input.required();
53
56
  this.showAvatar = input(false);
54
57
  this.showName = input(false);
@@ -92,6 +95,26 @@ export class MessageBubbleComponent {
92
95
  this.actionsOpen.set(false);
93
96
  this.action.emit({ type, msgId: this.msg().msgId, token });
94
97
  }
98
+ /** Abre la imagen adjunta en el visor de medios a pantalla completa. */
99
+ viewAttachment(att) {
100
+ void this.modal.open({
101
+ component: MediaViewerModalComponent,
102
+ componentProps: { url: att.url, name: att.name, mimeType: att.mimeType },
103
+ });
104
+ }
105
+ /** Diagnóstico: el navegador no pudo reproducir el audio recibido. */
106
+ onAudioError(att, event) {
107
+ const el = event.target;
108
+ const codes = { 1: 'ABORTED', 2: 'NETWORK', 3: 'DECODE', 4: 'SRC_NOT_SUPPORTED' };
109
+ const canPlay = att.mimeType ? document.createElement('audio').canPlayType(att.mimeType) : '';
110
+ console.error('[MessageBubble] audio play error', {
111
+ mimeType: att.mimeType,
112
+ url: att.url.slice(0, 80),
113
+ code: el.error?.code,
114
+ reason: el.error ? codes[el.error.code] : 'unknown',
115
+ canPlayThisType: canPlay,
116
+ });
117
+ }
95
118
  t(key) {
96
119
  return this.i18n.t(key, 'MessageBubble');
97
120
  }
@@ -133,14 +156,20 @@ export class MessageBubbleComponent {
133
156
  @if (imageAttachments().length > 0) {
134
157
  <div class="attachments">
135
158
  @for (att of imageAttachments(); track att.url) {
136
- <img class="att-image" [src]="att.url" [alt]="att.name" />
159
+ <img class="att-image" [src]="att.url" [alt]="att.name" (click)="viewAttachment(att)" />
137
160
  }
138
161
  </div>
139
162
  }
140
163
  @if (audioAttachments().length > 0) {
141
164
  <div class="audios">
142
165
  @for (att of audioAttachments(); track att.url) {
143
- <audio class="att-audio" controls preload="metadata" [src]="att.url"></audio>
166
+ <audio
167
+ class="att-audio"
168
+ controls
169
+ preload="metadata"
170
+ [src]="att.url"
171
+ (error)="onAudioError(att, $event)"
172
+ ></audio>
144
173
  }
145
174
  </div>
146
175
  }
@@ -207,7 +236,7 @@ export class MessageBubbleComponent {
207
236
  }
208
237
  </div>
209
238
  </div>
210
- `, isInline: true, styles: [":host{display:block}.row{display:flex;align-items:flex-end;gap:8px;margin:1px 0}.row.mine{flex-direction:row-reverse}.row.tail{margin-bottom:8px}.avatar{width:28px;height:28px;border-radius:50%;overflow:hidden;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--ion-color-primary);color:#fff;font-size:.6875rem;font-weight:700}.avatar.hidden{visibility:hidden}.avatar img{width:100%;height:100%;object-fit:cover}.bubble-wrap{position:relative;max-width:min(78%,520px);display:flex;flex-direction:column}.row.mine .bubble-wrap{align-items:flex-end}.bubble{position:relative;padding:7px 11px;border-radius:16px;background:var(--ion-card-background, var(--ion-background-color, #fff));border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));color:var(--ion-text-color, #000);font-size:.9375rem;line-height:1.35;cursor:pointer;outline:none;word-break:break-word}.row:not(.mine).tail .bubble{border-bottom-left-radius:5px}.mine .bubble{background:var(--ion-color-primary);border-color:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff)}.mine.tail .bubble{border-bottom-right-radius:5px}.bubble.deleted{background:transparent;border-style:dashed;cursor:default}.name{display:block;font-size:.75rem;font-weight:700;color:var(--ion-color-primary);margin-bottom:2px}.reply-preview{display:flex;flex-direction:column;gap:1px;padding:4px 8px;margin-bottom:4px;border-left:3px solid currentColor;border-radius:6px;background:var(--ion-color-step-100, rgba(127, 127, 127, .12));font-size:.8125rem;opacity:.85}.reply-name{font-weight:700}.reply-body{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.body{white-space:pre-wrap}.deleted-text{font-style:italic;opacity:.6}.attachments{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.att-image{max-width:100%;border-radius:10px;display:block}.audios{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.att-audio{width:240px;max-width:100%;height:40px}.files{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.file-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:8px;background:var(--ion-color-step-100, rgba(127, 127, 127, .12));color:inherit;text-decoration:none;font-size:.8125rem}.meta{display:inline-flex;align-items:center;gap:4px;float:right;margin:2px 0 -2px 8px;font-size:.6875rem;opacity:.7}.edited{font-style:italic}.status{font-size:.875rem}.status.read{color:var(--ion-color-secondary, #4fc3f7);opacity:1}.status.failed{color:var(--ion-color-danger, #eb445a);opacity:1}.reactions{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}.reaction{display:inline-flex;align-items:center;gap:3px;padding:1px 7px;border-radius:999px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-card-background, var(--ion-background-color, #fff));font-size:.75rem;cursor:pointer;color:var(--ion-text-color, #000)}.reaction.active{border-color:var(--ion-color-primary);background:var(--ion-color-primary-tint, var(--ion-color-primary));color:var(--ion-color-primary-contrast, #fff)}.reaction .count{opacity:.75}.actions{position:absolute;top:-14px;display:flex;gap:2px;padding:2px;border-radius:999px;background:var(--ion-card-background, var(--ion-background-color, #fff));border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));box-shadow:0 2px 8px #0000001f;opacity:0;pointer-events:none;transition:opacity .12s ease;z-index:2}.row.mine .actions{right:0}.row:not(.mine) .actions{left:0}.bubble-wrap:hover .actions,.actions.open{opacity:1;pointer-events:auto}.act{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:50%;background:transparent;color:var(--ion-color-medium, #92949c);cursor:pointer;font-size:1rem}.act:hover{background:var(--ion-color-step-100, rgba(127, 127, 127, .12));color:var(--ion-text-color, #000)}.act.danger:hover{color:var(--ion-color-danger, #eb445a)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
239
+ `, isInline: true, styles: [":host{display:block}.row{display:flex;align-items:flex-end;gap:8px;margin:1px 0}.row.mine{flex-direction:row-reverse}.row.tail{margin-bottom:8px}.avatar{width:28px;height:28px;border-radius:50%;overflow:hidden;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--ion-color-primary);color:#fff;font-size:.6875rem;font-weight:700}.avatar.hidden{visibility:hidden}.avatar img{width:100%;height:100%;object-fit:cover}.bubble-wrap{position:relative;max-width:min(78%,520px);display:flex;flex-direction:column}.row.mine .bubble-wrap{align-items:flex-end}.bubble{position:relative;padding:7px 11px;border-radius:16px;background:var(--ion-card-background, var(--ion-background-color, #fff));border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));color:var(--ion-text-color, #000);font-size:.9375rem;line-height:1.35;cursor:pointer;outline:none;word-break:break-word}.row:not(.mine).tail .bubble{border-bottom-left-radius:5px}.mine .bubble{background:var(--ion-color-primary);border-color:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff)}.mine.tail .bubble{border-bottom-right-radius:5px}.bubble.deleted{background:transparent;border-style:dashed;cursor:default}.name{display:block;font-size:.75rem;font-weight:700;color:var(--ion-color-primary);margin-bottom:2px}.reply-preview{display:flex;flex-direction:column;gap:1px;padding:4px 8px;margin-bottom:4px;border-left:3px solid currentColor;border-radius:6px;background:var(--ion-color-step-100, rgba(127, 127, 127, .12));font-size:.8125rem;opacity:.85}.reply-name{font-weight:700}.reply-body{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.body{white-space:pre-wrap}.deleted-text{font-style:italic;opacity:.6}.attachments{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.att-image{max-width:100%;border-radius:10px;display:block;cursor:pointer}.audios{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.att-audio{width:240px;max-width:100%;height:40px}.files{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.file-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:8px;background:var(--ion-color-step-100, rgba(127, 127, 127, .12));color:inherit;text-decoration:none;font-size:.8125rem}.meta{display:inline-flex;align-items:center;gap:4px;float:right;margin:2px 0 -2px 8px;font-size:.6875rem;opacity:.7}.edited{font-style:italic}.status{font-size:.875rem}.status.read{color:var(--ion-color-secondary, #4fc3f7);opacity:1}.status.failed{color:var(--ion-color-danger, #eb445a);opacity:1}.reactions{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}.reaction{display:inline-flex;align-items:center;gap:3px;padding:1px 7px;border-radius:999px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-card-background, var(--ion-background-color, #fff));font-size:.75rem;cursor:pointer;color:var(--ion-text-color, #000)}.reaction.active{border-color:var(--ion-color-primary);background:var(--ion-color-primary-tint, var(--ion-color-primary));color:var(--ion-color-primary-contrast, #fff)}.reaction .count{opacity:.75}.actions{position:absolute;top:-14px;display:flex;gap:2px;padding:2px;border-radius:999px;background:var(--ion-card-background, var(--ion-background-color, #fff));border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));box-shadow:0 2px 8px #0000001f;opacity:0;pointer-events:none;transition:opacity .12s ease;z-index:2}.row.mine .actions{right:0}.row:not(.mine) .actions{left:0}.bubble-wrap:hover .actions,.actions.open{opacity:1;pointer-events:auto}.act{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:50%;background:transparent;color:var(--ion-color-medium, #92949c);cursor:pointer;font-size:1rem}.act:hover{background:var(--ion-color-step-100, rgba(127, 127, 127, .12));color:var(--ion-text-color, #000)}.act.danger:hover{color:var(--ion-color-danger, #eb445a)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
211
240
  }
212
241
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MessageBubbleComponent, decorators: [{
213
242
  type: Component,
@@ -248,14 +277,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
248
277
  @if (imageAttachments().length > 0) {
249
278
  <div class="attachments">
250
279
  @for (att of imageAttachments(); track att.url) {
251
- <img class="att-image" [src]="att.url" [alt]="att.name" />
280
+ <img class="att-image" [src]="att.url" [alt]="att.name" (click)="viewAttachment(att)" />
252
281
  }
253
282
  </div>
254
283
  }
255
284
  @if (audioAttachments().length > 0) {
256
285
  <div class="audios">
257
286
  @for (att of audioAttachments(); track att.url) {
258
- <audio class="att-audio" controls preload="metadata" [src]="att.url"></audio>
287
+ <audio
288
+ class="att-audio"
289
+ controls
290
+ preload="metadata"
291
+ [src]="att.url"
292
+ (error)="onAudioError(att, $event)"
293
+ ></audio>
259
294
  }
260
295
  </div>
261
296
  }
@@ -322,6 +357,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
322
357
  }
323
358
  </div>
324
359
  </div>
325
- `, styles: [":host{display:block}.row{display:flex;align-items:flex-end;gap:8px;margin:1px 0}.row.mine{flex-direction:row-reverse}.row.tail{margin-bottom:8px}.avatar{width:28px;height:28px;border-radius:50%;overflow:hidden;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--ion-color-primary);color:#fff;font-size:.6875rem;font-weight:700}.avatar.hidden{visibility:hidden}.avatar img{width:100%;height:100%;object-fit:cover}.bubble-wrap{position:relative;max-width:min(78%,520px);display:flex;flex-direction:column}.row.mine .bubble-wrap{align-items:flex-end}.bubble{position:relative;padding:7px 11px;border-radius:16px;background:var(--ion-card-background, var(--ion-background-color, #fff));border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));color:var(--ion-text-color, #000);font-size:.9375rem;line-height:1.35;cursor:pointer;outline:none;word-break:break-word}.row:not(.mine).tail .bubble{border-bottom-left-radius:5px}.mine .bubble{background:var(--ion-color-primary);border-color:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff)}.mine.tail .bubble{border-bottom-right-radius:5px}.bubble.deleted{background:transparent;border-style:dashed;cursor:default}.name{display:block;font-size:.75rem;font-weight:700;color:var(--ion-color-primary);margin-bottom:2px}.reply-preview{display:flex;flex-direction:column;gap:1px;padding:4px 8px;margin-bottom:4px;border-left:3px solid currentColor;border-radius:6px;background:var(--ion-color-step-100, rgba(127, 127, 127, .12));font-size:.8125rem;opacity:.85}.reply-name{font-weight:700}.reply-body{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.body{white-space:pre-wrap}.deleted-text{font-style:italic;opacity:.6}.attachments{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.att-image{max-width:100%;border-radius:10px;display:block}.audios{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.att-audio{width:240px;max-width:100%;height:40px}.files{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.file-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:8px;background:var(--ion-color-step-100, rgba(127, 127, 127, .12));color:inherit;text-decoration:none;font-size:.8125rem}.meta{display:inline-flex;align-items:center;gap:4px;float:right;margin:2px 0 -2px 8px;font-size:.6875rem;opacity:.7}.edited{font-style:italic}.status{font-size:.875rem}.status.read{color:var(--ion-color-secondary, #4fc3f7);opacity:1}.status.failed{color:var(--ion-color-danger, #eb445a);opacity:1}.reactions{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}.reaction{display:inline-flex;align-items:center;gap:3px;padding:1px 7px;border-radius:999px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-card-background, var(--ion-background-color, #fff));font-size:.75rem;cursor:pointer;color:var(--ion-text-color, #000)}.reaction.active{border-color:var(--ion-color-primary);background:var(--ion-color-primary-tint, var(--ion-color-primary));color:var(--ion-color-primary-contrast, #fff)}.reaction .count{opacity:.75}.actions{position:absolute;top:-14px;display:flex;gap:2px;padding:2px;border-radius:999px;background:var(--ion-card-background, var(--ion-background-color, #fff));border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));box-shadow:0 2px 8px #0000001f;opacity:0;pointer-events:none;transition:opacity .12s ease;z-index:2}.row.mine .actions{right:0}.row:not(.mine) .actions{left:0}.bubble-wrap:hover .actions,.actions.open{opacity:1;pointer-events:auto}.act{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:50%;background:transparent;color:var(--ion-color-medium, #92949c);cursor:pointer;font-size:1rem}.act:hover{background:var(--ion-color-step-100, rgba(127, 127, 127, .12));color:var(--ion-text-color, #000)}.act.danger:hover{color:var(--ion-color-danger, #eb445a)}\n"] }]
360
+ `, styles: [":host{display:block}.row{display:flex;align-items:flex-end;gap:8px;margin:1px 0}.row.mine{flex-direction:row-reverse}.row.tail{margin-bottom:8px}.avatar{width:28px;height:28px;border-radius:50%;overflow:hidden;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--ion-color-primary);color:#fff;font-size:.6875rem;font-weight:700}.avatar.hidden{visibility:hidden}.avatar img{width:100%;height:100%;object-fit:cover}.bubble-wrap{position:relative;max-width:min(78%,520px);display:flex;flex-direction:column}.row.mine .bubble-wrap{align-items:flex-end}.bubble{position:relative;padding:7px 11px;border-radius:16px;background:var(--ion-card-background, var(--ion-background-color, #fff));border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));color:var(--ion-text-color, #000);font-size:.9375rem;line-height:1.35;cursor:pointer;outline:none;word-break:break-word}.row:not(.mine).tail .bubble{border-bottom-left-radius:5px}.mine .bubble{background:var(--ion-color-primary);border-color:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff)}.mine.tail .bubble{border-bottom-right-radius:5px}.bubble.deleted{background:transparent;border-style:dashed;cursor:default}.name{display:block;font-size:.75rem;font-weight:700;color:var(--ion-color-primary);margin-bottom:2px}.reply-preview{display:flex;flex-direction:column;gap:1px;padding:4px 8px;margin-bottom:4px;border-left:3px solid currentColor;border-radius:6px;background:var(--ion-color-step-100, rgba(127, 127, 127, .12));font-size:.8125rem;opacity:.85}.reply-name{font-weight:700}.reply-body{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.body{white-space:pre-wrap}.deleted-text{font-style:italic;opacity:.6}.attachments{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.att-image{max-width:100%;border-radius:10px;display:block;cursor:pointer}.audios{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.att-audio{width:240px;max-width:100%;height:40px}.files{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.file-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:8px;background:var(--ion-color-step-100, rgba(127, 127, 127, .12));color:inherit;text-decoration:none;font-size:.8125rem}.meta{display:inline-flex;align-items:center;gap:4px;float:right;margin:2px 0 -2px 8px;font-size:.6875rem;opacity:.7}.edited{font-style:italic}.status{font-size:.875rem}.status.read{color:var(--ion-color-secondary, #4fc3f7);opacity:1}.status.failed{color:var(--ion-color-danger, #eb445a);opacity:1}.reactions{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}.reaction{display:inline-flex;align-items:center;gap:3px;padding:1px 7px;border-radius:999px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-card-background, var(--ion-background-color, #fff));font-size:.75rem;cursor:pointer;color:var(--ion-text-color, #000)}.reaction.active{border-color:var(--ion-color-primary);background:var(--ion-color-primary-tint, var(--ion-color-primary));color:var(--ion-color-primary-contrast, #fff)}.reaction .count{opacity:.75}.actions{position:absolute;top:-14px;display:flex;gap:2px;padding:2px;border-radius:999px;background:var(--ion-card-background, var(--ion-background-color, #fff));border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));box-shadow:0 2px 8px #0000001f;opacity:0;pointer-events:none;transition:opacity .12s ease;z-index:2}.row.mine .actions{right:0}.row:not(.mine) .actions{left:0}.bubble-wrap:hover .actions,.actions.open{opacity:1;pointer-events:auto}.act{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:50%;background:transparent;color:var(--ion-color-medium, #92949c);cursor:pointer;font-size:1rem}.act:hover{background:var(--ion-color-step-100, rgba(127, 127, 127, .12));color:var(--ion-text-color, #000)}.act.danger:hover{color:var(--ion-color-danger, #eb445a)}\n"] }]
326
361
  }], ctorParameters: () => [] });
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1idWJibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9tZXNzYWdlLWJ1YmJsZS9tZXNzYWdlLWJ1YmJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxhQUFhLEVBQ2IsYUFBYSxFQUNiLGVBQWUsRUFDZixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUdqRSxRQUFRLENBQUM7SUFDUCxXQUFXO0lBQ1gsU0FBUztJQUNULGFBQWE7SUFDYixhQUFhO0lBQ2IsZUFBZTtJQUNmLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLFlBQVk7Q0FDYixDQUFDLENBQUM7QUFFSCxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLEVBQUUsRUFBRTtRQUNGLEtBQUssRUFBRSxXQUFXO1FBQ2xCLElBQUksRUFBRSxRQUFRO1FBQ2QsTUFBTSxFQUFFLFVBQVU7UUFDbEIsS0FBSyxFQUFFLFlBQVk7UUFDbkIsT0FBTyxFQUFFLG1CQUFtQjtRQUM1QixN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QW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFDdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStHVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhbGVydENpcmNsZSxcbiAgY2hlY2ttYXJrLFxuICBjaGVja21hcmtEb25lLFxuICBjcmVhdGVPdXRsaW5lLFxuICBkb2N1bWVudE91dGxpbmUsXG4gIGhhcHB5T3V0bGluZSxcbiAgYXJyb3dVbmRvT3V0bGluZSxcbiAgdGltZU91dGxpbmUsXG4gIHRyYXNoT3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgZm9ybWF0Q2xvY2tUaW1lIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL2RhdGV0aW1lJztcbmltcG9ydCB7IE1lc3NhZ2VCdWJibGVNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5hZGRJY29ucyh7XG4gIGFsZXJ0Q2lyY2xlLFxuICBjaGVja21hcmssXG4gIGNoZWNrbWFya0RvbmUsXG4gIGNyZWF0ZU91dGxpbmUsXG4gIGRvY3VtZW50T3V0bGluZSxcbiAgaGFwcHlPdXRsaW5lLFxuICBhcnJvd1VuZG9PdXRsaW5lLFxuICB0aW1lT3V0bGluZSxcbiAgdHJhc2hPdXRsaW5lLFxufSk7XG5cbmNvbnN0IE1FU1NBR0VfQlVCQkxFX0kxOE4gPSB7XG4gIGVzOiB7XG4gICAgcmVwbHk6ICdSZXNwb25kZXInLFxuICAgIGVkaXQ6ICdFZGl0YXInLFxuICAgIGRlbGV0ZTogJ0VsaW1pbmFyJyxcbiAgICByZWFjdDogJ1JlYWNjaW9uYXInLFxuICAgIGRlbGV0ZWQ6ICdNZW5zYWplIGVsaW1pbmFkbycsXG4gICAgZWRpdGVkOiAnZWRpdGFkbycsXG4gIH0sXG4gIGVuOiB7XG4gICAgcmVwbHk6ICdSZXBseScsXG4gICAgZWRpdDogJ0VkaXQnLFxuICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgcmVhY3Q6ICdSZWFjdCcsXG4gICAgZGVsZXRlZDogJ01lc3NhZ2UgZGVsZXRlZCcsXG4gICAgZWRpdGVkOiAnZWRpdGVkJyxcbiAgfSxcbn07XG5cbi8qKiBBY2Npw7NuIGRpc3BhcmFkYSBkZXNkZSB1bmEgYnVyYnVqYS4gVW4gc29sbyBvdXRwdXQgdGlwYWRvIGVuIHZleiBkZSA0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQnViYmxlQWN0aW9uIHtcbiAgdHlwZTogJ3JlcGx5JyB8ICdlZGl0JyB8ICdkZWxldGUnIHwgJ3JlYWN0JztcbiAgbXNnSWQ6IHN0cmluZztcbiAgLyoqIFRva2VuIGRlbCBlbW9qaSwgc29sbyBwYXJhIHR5cGUgJ3JlYWN0Jy4gKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogdmFsLW1lc3NhZ2UtYnViYmxlIOKAlCBidXJidWphIGRlIG1lbnNhamUgcHJlc2VudGFjaW9uYWwgKHNpZ25hbCBpbnB1dHMpLlxuICpcbiAqIFNpbiBsw7NnaWNhIGRlIG5lZ29jaW86IGVsIGNvbnRlbmVkb3IgKGB2YWwtY2hhdC13aW5kb3dgKSBkZWNpZGUgYWdydXBhY2nDs24geVxuICogcGFzYSBmbGFncyAoc2hvd0F2YXRhci9zaG93TmFtZS90YWlsKS4gTGFzIGFjY2lvbmVzIChyZXNwb25kZXIvZWRpdGFyL2JvcnJhci9cbiAqIHJlYWNjaW9uYXIpIE5PIGVzdMOhbiBzaWVtcHJlIHZpc2libGVzOiBzZSByZXZlbGFuIGVuIGhvdmVyIChkZXNrdG9wKSBvIGFsIHRvY2FyXG4gKiBsYSBidXJidWphIChtw7N2aWwpLCB5IHNlIGVtaXRlbiBwb3IgdW4gw7puaWNvIGAoYWN0aW9uKWAgdGlwYWRvLlxuICpcbiAqIFJlYWQgcmVjZWlwdHMgZXN0aWxvIFdoYXRzQXBwOiBzZW5kaW5nIOKGkiByZWxvaiwgc2VudCDihpIg4pyTLCBkZWxpdmVyZWQvcmVhZCDihpIg4pyT4pyTXG4gKiAocmVhZCBlbiBjb2xvciksIGZhaWxlZCDihpIgYWxlcnRhLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbWVzc2FnZS1idWJibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgW2NsYXNzLm1pbmVdPVwibXNnKCkuaXNNaW5lXCIgW2NsYXNzLnRhaWxdPVwidGFpbCgpXCIgW2NsYXNzLndpdGgtYXZhdGFyXT1cInNob3dBdmF0YXIoKVwiPlxuICAgICAgQGlmIChzaG93QXZhdGFyKCkgJiYgIW1zZygpLmlzTWluZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyXCIgW2NsYXNzLmhpZGRlbl09XCIhdGFpbCgpXCI+XG4gICAgICAgICAgQGlmIChtc2coKS5zZW5kZXJBdmF0YXIpIHtcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJtc2coKS5zZW5kZXJBdmF0YXJcIiBbYWx0XT1cIm1zZygpLnNlbmRlck5hbWVcIiAvPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHNwYW4+e3sgaW5pdGlhbHMoKSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYnViYmxlLXdyYXBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYnViYmxlXCJcbiAgICAgICAgICBbY2xhc3MuZGVsZXRlZF09XCJtc2coKS5pc0RlbGV0ZWRcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKClcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJ0b2dnbGVBY3Rpb25zKClcIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHNob3dOYW1lKCkgJiYgIW1zZygpLmlzTWluZSAmJiAhbXNnKCkuaXNEZWxldGVkKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIj57eyBtc2coKS5zZW5kZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAobXNnKCkucmVwbHlUbyAmJiAhbXNnKCkuaXNEZWxldGVkKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwbHktcHJldmlld1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcGx5LW5hbWVcIj57eyBtc2coKS5yZXBseVRvIS5zZW5kZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcGx5LWJvZHlcIj57eyBtc2coKS5yZXBseVRvIS5ib2R5IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChtc2coKS5pc0RlbGV0ZWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm9keSBkZWxldGVkLXRleHRcIj57eyB0KCdkZWxldGVkJykgfX08L3NwYW4+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYgKGltYWdlQXR0YWNobWVudHMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50c1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGF0dCBvZiBpbWFnZUF0dGFjaG1lbnRzKCk7IHRyYWNrIGF0dC51cmwpIHtcbiAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdHQtaW1hZ2VcIiBbc3JjXT1cImF0dC51cmxcIiBbYWx0XT1cImF0dC5uYW1lXCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChhdWRpb0F0dGFjaG1lbnRzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXVkaW9zXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoYXR0IG9mIGF1ZGlvQXR0YWNobWVudHMoKTsgdHJhY2sgYXR0LnVybCkge1xuICAgICAgICAgICAgICAgICAgPGF1ZGlvIGNsYXNzPVwiYXR0LWF1ZGlvXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCIgW3NyY109XCJhdHQudXJsXCI+PC9hdWRpbz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChmaWxlQXR0YWNobWVudHMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlc1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGF0dCBvZiBmaWxlQXR0YWNobWVudHMoKTsgdHJhY2sgYXR0LnVybCkge1xuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmaWxlLWNoaXBcIiBbaHJlZl09XCJhdHQudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJkb2N1bWVudC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYXR0Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobXNnKCkuYm9keSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvZHlcIj57eyBtc2coKS5ib2R5IH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWV0YVwiPlxuICAgICAgICAgICAgQGlmIChtc2coKS5pc0VkaXRlZCAmJiAhbXNnKCkuaXNEZWxldGVkKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWRpdGVkXCI+e3sgdCgnZWRpdGVkJykgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWVcIj57eyB0aW1lKCkgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKG1zZygpLmlzTWluZSAmJiAhbXNnKCkuaXNEZWxldGVkKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RhdHVzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucmVhZF09XCJtc2coKS5zdGF0dXMgPT09ICdyZWFkJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZhaWxlZF09XCJtc2coKS5zdGF0dXMgPT09ICdmYWlsZWQnXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzdGF0dXNJY29uKClcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKG1zZygpLnJlYWN0aW9ucyAmJiBtc2coKS5yZWFjdGlvbnMhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVhY3Rpb25zXCI+XG4gICAgICAgICAgICBAZm9yIChyIG9mIG1zZygpLnJlYWN0aW9ucyE7IHRyYWNrIHIudG9rZW4pIHtcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlYWN0aW9uXCIgW2NsYXNzLmFjdGl2ZV09XCJyLmFjdGl2ZVwiIChjbGljayk9XCJlbWl0KCdyZWFjdCcsIHIudG9rZW4pXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgci50b2tlbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50XCI+e3sgci5jb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKCFtc2coKS5pc0RlbGV0ZWQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiIFtjbGFzcy5vcGVuXT1cImFjdGlvbnNPcGVuKClcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3RcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3JlYWN0JylcIiAoY2xpY2spPVwiZW1pdCgncmVhY3QnLCAn8J+RjScpXCI+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiaGFwcHktb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3RcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3JlcGx5JylcIiAoY2xpY2spPVwiZW1pdCgncmVwbHknKVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFycm93LXVuZG8tb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIEBpZiAobXNnKCkuaXNNaW5lKSB7XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3RcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2VkaXQnKVwiIChjbGljayk9XCJlbWl0KCdlZGl0JylcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNyZWF0ZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3QgZGFuZ2VyXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdkZWxldGUnKVwiIChjbGljayk9XCJlbWl0KCdkZWxldGUnKVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJhc2gtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC5yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtYXJnaW46IDFweCAwO1xuICAgICAgfVxuICAgICAgLnJvdy5taW5lIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgLnJvdy50YWlsIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuICAgICAgLmF2YXRhciB7XG4gICAgICAgIHdpZHRoOiAyOHB4O1xuICAgICAgICBoZWlnaHQ6IDI4cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIC5hdmF0YXIuaGlkZGVuIHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuICAgICAgLmF2YXRhciBpbWcge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgIH1cbiAgICAgIC5idWJibGUtd3JhcCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWF4LXdpZHRoOiBtaW4oNzglLCA1MjBweCk7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG4gICAgICAucm93Lm1pbmUgLmJ1YmJsZS13cmFwIHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgfVxuICAgICAgLmJ1YmJsZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgcGFkZGluZzogN3B4IDExcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jYXJkLWJhY2tncm91bmQsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMwMDApO1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgIH1cbiAgICAgIC5yb3c6bm90KC5taW5lKS50YWlsIC5idWJibGUge1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XG4gICAgICB9XG4gICAgICAubWluZSAuYnViYmxlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LWNvbnRyYXN0LCAjZmZmKTtcbiAgICAgIH1cbiAgICAgIC5taW5lLnRhaWwgLmJ1YmJsZSB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG4gICAgICB9XG4gICAgICAuYnViYmxlLmRlbGV0ZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIC5uYW1lIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgfVxuICAgICAgLnJlcGx5LXByZXZpZXcge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDFweDtcbiAgICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xMikpO1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgb3BhY2l0eTogMC44NTtcbiAgICAgIH1cbiAgICAgIC5yZXBseS1uYW1lIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIC5yZXBseS1ib2R5IHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIG1heC13aWR0aDogMjQwcHg7XG4gICAgICB9XG4gICAgICAuYm9keSB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICAgIH1cbiAgICAgIC5kZWxldGVkLXRleHQge1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgIH1cbiAgICAgIC5hdHRhY2htZW50cyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICB9XG4gICAgICAuYXR0LWltYWdlIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC5hdWRpb3Mge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgfVxuICAgICAgLmF0dC1hdWRpbyB7XG4gICAgICAgIHdpZHRoOiAyNDBweDtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICB9XG4gICAgICAuZmlsZXMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgfVxuICAgICAgLmZpbGUtY2hpcCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXN0ZXAtMTAwLCByZ2JhKDEyNywgMTI3LCAxMjcsIDAuMTIpKTtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICB9XG4gICAgICAubWV0YSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICBtYXJnaW46IDJweCAwIC0ycHggOHB4O1xuICAgICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgfVxuICAgICAgLmVkaXRlZCB7XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgIH1cbiAgICAgIC5zdGF0dXMge1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgfVxuICAgICAgLnN0YXR1cy5yZWFkIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnksICM0ZmMzZjcpO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgICAgLnN0YXR1cy5mYWlsZWQge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2ViNDQ1YSk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgICAucmVhY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgbWFyZ2luLXRvcDogM3B4O1xuICAgICAgfVxuICAgICAgLnJlYWN0aW9uIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogM3B4O1xuICAgICAgICBwYWRkaW5nOiAxcHggN3B4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICB9XG4gICAgICAucmVhY3Rpb24uYWN0aXZlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LXRpbnQsIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1jb250cmFzdCwgI2ZmZik7XG4gICAgICB9XG4gICAgICAucmVhY3Rpb24gLmNvdW50IHtcbiAgICAgICAgb3BhY2l0eTogMC43NTtcbiAgICAgIH1cbiAgICAgIC5hY3Rpb25zIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IC0xNHB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDJweDtcbiAgICAgICAgcGFkZGluZzogMnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpKTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTJzIGVhc2U7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgICAucm93Lm1pbmUgLmFjdGlvbnMge1xuICAgICAgICByaWdodDogMDtcbiAgICAgIH1cbiAgICAgIC5yb3c6bm90KC5taW5lKSAuYWN0aW9ucyB7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICB9XG4gICAgICAuYnViYmxlLXdyYXA6aG92ZXIgLmFjdGlvbnMsXG4gICAgICAuYWN0aW9ucy5vcGVuIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgICB9XG4gICAgICAuYWN0IHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMjhweDtcbiAgICAgICAgaGVpZ2h0OiAyOHB4O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICB9XG4gICAgICAuYWN0OmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXN0ZXAtMTAwLCByZ2JhKDEyNywgMTI3LCAxMjcsIDAuMTIpKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgIH1cbiAgICAgIC5hY3QuZGFuZ2VyOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYW5nZXIsICNlYjQ0NWEpO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VCdWJibGVDb21wb25lbnQge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IG1zZyA9IGlucHV0LnJlcXVpcmVkPE1lc3NhZ2VCdWJibGVNZXRhZGF0YT4oKTtcbiAgcmVhZG9ubHkgc2hvd0F2YXRhciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd05hbWUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHRhaWwgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgbG9jYWxlID0gaW5wdXQ8c3RyaW5nPignZXMtQ0wnKTtcblxuICByZWFkb25seSBhY3Rpb24gPSBvdXRwdXQ8TWVzc2FnZUJ1YmJsZUFjdGlvbj4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWN0aW9uc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKCdNZXNzYWdlQnViYmxlJywgTUVTU0FHRV9CVUJCTEVfSTE4Tik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGltZSA9IGNvbXB1dGVkKCgpID0+IGZvcm1hdENsb2NrVGltZSh0aGlzLm1zZygpLmNyZWF0ZWRBdCwgdGhpcy5sb2NhbGUoKSkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpbml0aWFscyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5tc2coKS5zZW5kZXJOYW1lPy50cmltKCkgPz8gJyc7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gJz8nO1xuICAgIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdCgvXFxzKy8pO1xuICAgIHJldHVybiAocGFydHNbMF1bMF0gKyAocGFydHNbMV0/LlswXSA/PyAnJykpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpbWFnZUF0dGFjaG1lbnRzID0gY29tcHV0ZWQoKCkgPT5cbiAgICAodGhpcy5tc2coKS5hdHRhY2htZW50cyA/PyBbXSkuZmlsdGVyKGEgPT4gYS5taW1lVHlwZT8uc3RhcnRzV2l0aCgnaW1hZ2UvJykpXG4gICk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1ZGlvQXR0YWNobWVudHMgPSBjb21wdXRlZCgoKSA9PlxuICAgICh0aGlzLm1zZygpLmF0dGFjaG1lbnRzID8/IFtdKS5maWx0ZXIoYSA9PiBhLm1pbWVUeXBlPy5zdGFydHNXaXRoKCdhdWRpby8nKSlcbiAgKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsZUF0dGFjaG1lbnRzID0gY29tcHV0ZWQoKCkgPT5cbiAgICAodGhpcy5tc2coKS5hdHRhY2htZW50cyA/PyBbXSkuZmlsdGVyKGEgPT4gIWEubWltZVR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpICYmICFhLm1pbWVUeXBlPy5zdGFydHNXaXRoKCdhdWRpby8nKSlcbiAgKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhdHVzSWNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMubXNnKCkuc3RhdHVzKSB7XG4gICAgICBjYXNlICdzZW5kaW5nJzpcbiAgICAgICAgcmV0dXJuICd0aW1lLW91dGxpbmUnO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuICdhbGVydC1jaXJjbGUnO1xuICAgICAgY2FzZSAnZGVsaXZlcmVkJzpcbiAgICAgIGNhc2UgJ3JlYWQnOlxuICAgICAgICByZXR1cm4gJ2NoZWNrbWFyay1kb25lJztcbiAgICAgIGNhc2UgJ3NlbnQnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdjaGVja21hcmsnO1xuICAgIH1cbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZUFjdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXNnKCkuaXNEZWxldGVkKSByZXR1cm47XG4gICAgdGhpcy5hY3Rpb25zT3Blbi51cGRhdGUodiA9PiAhdik7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdCh0eXBlOiBNZXNzYWdlQnViYmxlQWN0aW9uWyd0eXBlJ10sIHRva2VuPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hY3Rpb25zT3Blbi5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aW9uLmVtaXQoeyB0eXBlLCBtc2dJZDogdGhpcy5tc2coKS5tc2dJZCwgdG9rZW4gfSk7XG4gIH1cblxuICB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCAnTWVzc2FnZUJ1YmJsZScpO1xuICB9XG59XG4iXX0=
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1idWJibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9tZXNzYWdlLWJ1YmJsZS9tZXNzYWdlLWJ1YmJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxhQUFhLEVBQ2IsYUFBYSxFQUNiLGVBQWUsRUFDZixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQzs7QUFHNUcsUUFBUSxDQUFDO0lBQ1AsV0FBVztJQUNYLFNBQVM7SUFDVCxhQUFhO0lBQ2IsYUFBYTtJQUNiLGVBQWU7SUFDZixZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLFdBQVc7SUFDWCxZQUFZO0NBQ2IsQ0FBQyxDQUFDO0FBRUgsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUU7UUFDRixLQUFLLEVBQUUsV0FBVztRQUNs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxSFQsdThIQXRIUyxZQUFZLCtCQUFFLE9BQU87OzRGQWlYcEIsc0JBQXNCO2tCQXBYbEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUN0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUhUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGFsZXJ0Q2lyY2xlLFxuICBjaGVja21hcmssXG4gIGNoZWNrbWFya0RvbmUsXG4gIGNyZWF0ZU91dGxpbmUsXG4gIGRvY3VtZW50T3V0bGluZSxcbiAgaGFwcHlPdXRsaW5lLFxuICBhcnJvd1VuZG9PdXRsaW5lLFxuICB0aW1lT3V0bGluZSxcbiAgdHJhc2hPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IGZvcm1hdENsb2NrVGltZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9kYXRldGltZSc7XG5pbXBvcnQgeyBNZWRpYVZpZXdlck1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL21lZGlhLXZpZXdlci1tb2RhbC9tZWRpYS12aWV3ZXItbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lc3NhZ2VCdWJibGVNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5hZGRJY29ucyh7XG4gIGFsZXJ0Q2lyY2xlLFxuICBjaGVja21hcmssXG4gIGNoZWNrbWFya0RvbmUsXG4gIGNyZWF0ZU91dGxpbmUsXG4gIGRvY3VtZW50T3V0bGluZSxcbiAgaGFwcHlPdXRsaW5lLFxuICBhcnJvd1VuZG9PdXRsaW5lLFxuICB0aW1lT3V0bGluZSxcbiAgdHJhc2hPdXRsaW5lLFxufSk7XG5cbmNvbnN0IE1FU1NBR0VfQlVCQkxFX0kxOE4gPSB7XG4gIGVzOiB7XG4gICAgcmVwbHk6ICdSZXNwb25kZXInLFxuICAgIGVkaXQ6ICdFZGl0YXInLFxuICAgIGRlbGV0ZTogJ0VsaW1pbmFyJyxcbiAgICByZWFjdDogJ1JlYWNjaW9uYXInLFxuICAgIGRlbGV0ZWQ6ICdNZW5zYWplIGVsaW1pbmFkbycsXG4gICAgZWRpdGVkOiAnZWRpdGFkbycsXG4gIH0sXG4gIGVuOiB7XG4gICAgcmVwbHk6ICdSZXBseScsXG4gICAgZWRpdDogJ0VkaXQnLFxuICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgcmVhY3Q6ICdSZWFjdCcsXG4gICAgZGVsZXRlZDogJ01lc3NhZ2UgZGVsZXRlZCcsXG4gICAgZWRpdGVkOiAnZWRpdGVkJyxcbiAgfSxcbn07XG5cbi8qKiBBY2Npw7NuIGRpc3BhcmFkYSBkZXNkZSB1bmEgYnVyYnVqYS4gVW4gc29sbyBvdXRwdXQgdGlwYWRvIGVuIHZleiBkZSA0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQnViYmxlQWN0aW9uIHtcbiAgdHlwZTogJ3JlcGx5JyB8ICdlZGl0JyB8ICdkZWxldGUnIHwgJ3JlYWN0JztcbiAgbXNnSWQ6IHN0cmluZztcbiAgLyoqIFRva2VuIGRlbCBlbW9qaSwgc29sbyBwYXJhIHR5cGUgJ3JlYWN0Jy4gKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogdmFsLW1lc3NhZ2UtYnViYmxlIOKAlCBidXJidWphIGRlIG1lbnNhamUgcHJlc2VudGFjaW9uYWwgKHNpZ25hbCBpbnB1dHMpLlxuICpcbiAqIFNpbiBsw7NnaWNhIGRlIG5lZ29jaW86IGVsIGNvbnRlbmVkb3IgKGB2YWwtY2hhdC13aW5kb3dgKSBkZWNpZGUgYWdydXBhY2nDs24geVxuICogcGFzYSBmbGFncyAoc2hvd0F2YXRhci9zaG93TmFtZS90YWlsKS4gTGFzIGFjY2lvbmVzIChyZXNwb25kZXIvZWRpdGFyL2JvcnJhci9cbiAqIHJlYWNjaW9uYXIpIE5PIGVzdMOhbiBzaWVtcHJlIHZpc2libGVzOiBzZSByZXZlbGFuIGVuIGhvdmVyIChkZXNrdG9wKSBvIGFsIHRvY2FyXG4gKiBsYSBidXJidWphIChtw7N2aWwpLCB5IHNlIGVtaXRlbiBwb3IgdW4gw7puaWNvIGAoYWN0aW9uKWAgdGlwYWRvLlxuICpcbiAqIFJlYWQgcmVjZWlwdHMgZXN0aWxvIFdoYXRzQXBwOiBzZW5kaW5nIOKGkiByZWxvaiwgc2VudCDihpIg4pyTLCBkZWxpdmVyZWQvcmVhZCDihpIg4pyT4pyTXG4gKiAocmVhZCBlbiBjb2xvciksIGZhaWxlZCDihpIgYWxlcnRhLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbWVzc2FnZS1idWJibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgW2NsYXNzLm1pbmVdPVwibXNnKCkuaXNNaW5lXCIgW2NsYXNzLnRhaWxdPVwidGFpbCgpXCIgW2NsYXNzLndpdGgtYXZhdGFyXT1cInNob3dBdmF0YXIoKVwiPlxuICAgICAgQGlmIChzaG93QXZhdGFyKCkgJiYgIW1zZygpLmlzTWluZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyXCIgW2NsYXNzLmhpZGRlbl09XCIhdGFpbCgpXCI+XG4gICAgICAgICAgQGlmIChtc2coKS5zZW5kZXJBdmF0YXIpIHtcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJtc2coKS5zZW5kZXJBdmF0YXJcIiBbYWx0XT1cIm1zZygpLnNlbmRlck5hbWVcIiAvPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHNwYW4+e3sgaW5pdGlhbHMoKSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYnViYmxlLXdyYXBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYnViYmxlXCJcbiAgICAgICAgICBbY2xhc3MuZGVsZXRlZF09XCJtc2coKS5pc0RlbGV0ZWRcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKClcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJ0b2dnbGVBY3Rpb25zKClcIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHNob3dOYW1lKCkgJiYgIW1zZygpLmlzTWluZSAmJiAhbXNnKCkuaXNEZWxldGVkKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIj57eyBtc2coKS5zZW5kZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAobXNnKCkucmVwbHlUbyAmJiAhbXNnKCkuaXNEZWxldGVkKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwbHktcHJldmlld1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcGx5LW5hbWVcIj57eyBtc2coKS5yZXBseVRvIS5zZW5kZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcGx5LWJvZHlcIj57eyBtc2coKS5yZXBseVRvIS5ib2R5IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChtc2coKS5pc0RlbGV0ZWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm9keSBkZWxldGVkLXRleHRcIj57eyB0KCdkZWxldGVkJykgfX08L3NwYW4+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYgKGltYWdlQXR0YWNobWVudHMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50c1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGF0dCBvZiBpbWFnZUF0dGFjaG1lbnRzKCk7IHRyYWNrIGF0dC51cmwpIHtcbiAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdHQtaW1hZ2VcIiBbc3JjXT1cImF0dC51cmxcIiBbYWx0XT1cImF0dC5uYW1lXCIgKGNsaWNrKT1cInZpZXdBdHRhY2htZW50KGF0dClcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGF1ZGlvQXR0YWNobWVudHMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdWRpb3NcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChhdHQgb2YgYXVkaW9BdHRhY2htZW50cygpOyB0cmFjayBhdHQudXJsKSB7XG4gICAgICAgICAgICAgICAgICA8YXVkaW9cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdHQtYXVkaW9cIlxuICAgICAgICAgICAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgICAgICAgICAgICBwcmVsb2FkPVwibWV0YWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImF0dC51cmxcIlxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25BdWRpb0Vycm9yKGF0dCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+PC9hdWRpbz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChmaWxlQXR0YWNobWVudHMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlc1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGF0dCBvZiBmaWxlQXR0YWNobWVudHMoKTsgdHJhY2sgYXR0LnVybCkge1xuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmaWxlLWNoaXBcIiBbaHJlZl09XCJhdHQudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJkb2N1bWVudC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYXR0Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobXNnKCkuYm9keSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvZHlcIj57eyBtc2coKS5ib2R5IH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWV0YVwiPlxuICAgICAgICAgICAgQGlmIChtc2coKS5pc0VkaXRlZCAmJiAhbXNnKCkuaXNEZWxldGVkKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWRpdGVkXCI+e3sgdCgnZWRpdGVkJykgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWVcIj57eyB0aW1lKCkgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKG1zZygpLmlzTWluZSAmJiAhbXNnKCkuaXNEZWxldGVkKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RhdHVzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucmVhZF09XCJtc2coKS5zdGF0dXMgPT09ICdyZWFkJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZhaWxlZF09XCJtc2coKS5zdGF0dXMgPT09ICdmYWlsZWQnXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzdGF0dXNJY29uKClcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKG1zZygpLnJlYWN0aW9ucyAmJiBtc2coKS5yZWFjdGlvbnMhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVhY3Rpb25zXCI+XG4gICAgICAgICAgICBAZm9yIChyIG9mIG1zZygpLnJlYWN0aW9ucyE7IHRyYWNrIHIudG9rZW4pIHtcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlYWN0aW9uXCIgW2NsYXNzLmFjdGl2ZV09XCJyLmFjdGl2ZVwiIChjbGljayk9XCJlbWl0KCdyZWFjdCcsIHIudG9rZW4pXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgci50b2tlbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50XCI+e3sgci5jb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKCFtc2coKS5pc0RlbGV0ZWQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiIFtjbGFzcy5vcGVuXT1cImFjdGlvbnNPcGVuKClcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3RcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3JlYWN0JylcIiAoY2xpY2spPVwiZW1pdCgncmVhY3QnLCAn8J+RjScpXCI+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiaGFwcHktb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3RcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3JlcGx5JylcIiAoY2xpY2spPVwiZW1pdCgncmVwbHknKVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFycm93LXVuZG8tb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIEBpZiAobXNnKCkuaXNNaW5lKSB7XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3RcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2VkaXQnKVwiIChjbGljayk9XCJlbWl0KCdlZGl0JylcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNyZWF0ZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3QgZGFuZ2VyXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdkZWxldGUnKVwiIChjbGljayk9XCJlbWl0KCdkZWxldGUnKVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJhc2gtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC5yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtYXJnaW46IDFweCAwO1xuICAgICAgfVxuICAgICAgLnJvdy5taW5lIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgLnJvdy50YWlsIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuICAgICAgLmF2YXRhciB7XG4gICAgICAgIHdpZHRoOiAyOHB4O1xuICAgICAgICBoZWlnaHQ6IDI4cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIC5hdmF0YXIuaGlkZGVuIHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuICAgICAgLmF2YXRhciBpbWcge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgIH1cbiAgICAgIC5idWJibGUtd3JhcCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWF4LXdpZHRoOiBtaW4oNzglLCA1MjBweCk7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG4gICAgICAucm93Lm1pbmUgLmJ1YmJsZS13cmFwIHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgfVxuICAgICAgLmJ1YmJsZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgcGFkZGluZzogN3B4IDExcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jYXJkLWJhY2tncm91bmQsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMwMDApO1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgIH1cbiAgICAgIC5yb3c6bm90KC5taW5lKS50YWlsIC5idWJibGUge1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XG4gICAgICB9XG4gICAgICAubWluZSAuYnViYmxlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LWNvbnRyYXN0LCAjZmZmKTtcbiAgICAgIH1cbiAgICAgIC5taW5lLnRhaWwgLmJ1YmJsZSB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG4gICAgICB9XG4gICAgICAuYnViYmxlLmRlbGV0ZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIC5uYW1lIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgfVxuICAgICAgLnJlcGx5LXByZXZpZXcge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDFweDtcbiAgICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xMikpO1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgb3BhY2l0eTogMC44NTtcbiAgICAgIH1cbiAgICAgIC5yZXBseS1uYW1lIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIC5yZXBseS1ib2R5IHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIG1heC13aWR0aDogMjQwcHg7XG4gICAgICB9XG4gICAgICAuYm9keSB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICAgIH1cbiAgICAgIC5kZWxldGVkLXRleHQge1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgIH1cbiAgICAgIC5hdHRhY2htZW50cyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICB9XG4gICAgICAuYXR0LWltYWdlIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuICAgICAgLmF1ZGlvcyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICB9XG4gICAgICAuYXR0LWF1ZGlvIHtcbiAgICAgICAgd2lkdGg6IDI0MHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgIH1cbiAgICAgIC5maWxlcyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICB9XG4gICAgICAuZmlsZS1jaGlwIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBwYWRkaW5nOiA2cHggMTBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xMikpO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgIH1cbiAgICAgIC5tZXRhIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgIG1hcmdpbjogMnB4IDAgLTJweCA4cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICB9XG4gICAgICAuZWRpdGVkIHtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgfVxuICAgICAgLnN0YXR1cyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICB9XG4gICAgICAuc3RhdHVzLnJlYWQge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXNlY29uZGFyeSwgIzRmYzNmNyk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgICAuc3RhdHVzLmZhaWxlZCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLCAjZWI0NDVhKTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cbiAgICAgIC5yZWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAzcHg7XG4gICAgICB9XG4gICAgICAucmVhY3Rpb24ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAzcHg7XG4gICAgICAgIHBhZGRpbmc6IDFweCA3cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciwgI2ZmZikpO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgIH1cbiAgICAgIC5yZWFjdGlvbi5hY3RpdmUge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXByaW1hcnktdGludCwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LWNvbnRyYXN0LCAjZmZmKTtcbiAgICAgIH1cbiAgICAgIC5yZWFjdGlvbiAuY291bnQge1xuICAgICAgICBvcGFjaXR5OiAwLjc1O1xuICAgICAgfVxuICAgICAgLmFjdGlvbnMge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogLTE0cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciwgI2ZmZikpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xMnMgZWFzZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgIH1cbiAgICAgIC5yb3cubWluZSAuYWN0aW9ucyB7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgfVxuICAgICAgLnJvdzpub3QoLm1pbmUpIC5hY3Rpb25zIHtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cbiAgICAgIC5idWJibGUtd3JhcDpob3ZlciAuYWN0aW9ucyxcbiAgICAgIC5hY3Rpb25zLm9wZW4ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAgIH1cbiAgICAgIC5hY3Qge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAyOHB4O1xuICAgICAgICBoZWlnaHQ6IDI4cHg7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgIH1cbiAgICAgIC5hY3Q6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xMikpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMwMDApO1xuICAgICAgfVxuICAgICAgLmFjdC5kYW5nZXI6aG92ZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2ViNDQ1YSk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUJ1YmJsZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgbW9kYWwgPSBpbmplY3QoTW9kYWxTZXJ2aWNlKTtcblxuICByZWFkb25seSBtc2cgPSBpbnB1dC5yZXF1aXJlZDxNZXNzYWdlQnViYmxlTWV0YWRhdGE+KCk7XG4gIHJlYWRvbmx5IHNob3dBdmF0YXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dOYW1lID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB0YWlsID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGxvY2FsZSA9IGlucHV0PHN0cmluZz4oJ2VzLUNMJyk7XG5cbiAgcmVhZG9ubHkgYWN0aW9uID0gb3V0cHV0PE1lc3NhZ2VCdWJibGVBY3Rpb24+KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjdGlvbnNPcGVuID0gc2lnbmFsKGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnTWVzc2FnZUJ1YmJsZScsIE1FU1NBR0VfQlVCQkxFX0kxOE4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRpbWUgPSBjb21wdXRlZCgoKSA9PiBmb3JtYXRDbG9ja1RpbWUodGhpcy5tc2coKS5jcmVhdGVkQXQsIHRoaXMubG9jYWxlKCkpKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5pdGlhbHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMubXNnKCkuc2VuZGVyTmFtZT8udHJpbSgpID8/ICcnO1xuICAgIGlmICghbmFtZSkgcmV0dXJuICc/JztcbiAgICBjb25zdCBwYXJ0cyA9IG5hbWUuc3BsaXQoL1xccysvKTtcbiAgICByZXR1cm4gKHBhcnRzWzBdWzBdICsgKHBhcnRzWzFdPy5bMF0gPz8gJycpKS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW1hZ2VBdHRhY2htZW50cyA9IGNvbXB1dGVkKCgpID0+XG4gICAgKHRoaXMubXNnKCkuYXR0YWNobWVudHMgPz8gW10pLmZpbHRlcihhID0+IGEubWltZVR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpKVxuICApO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBhdWRpb0F0dGFjaG1lbnRzID0gY29tcHV0ZWQoKCkgPT5cbiAgICAodGhpcy5tc2coKS5hdHRhY2htZW50cyA/PyBbXSkuZmlsdGVyKGEgPT4gYS5taW1lVHlwZT8uc3RhcnRzV2l0aCgnYXVkaW8vJykpXG4gICk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbGVBdHRhY2htZW50cyA9IGNvbXB1dGVkKCgpID0+XG4gICAgKHRoaXMubXNnKCkuYXR0YWNobWVudHMgPz8gW10pLmZpbHRlcihhID0+ICFhLm1pbWVUeXBlPy5zdGFydHNXaXRoKCdpbWFnZS8nKSAmJiAhYS5taW1lVHlwZT8uc3RhcnRzV2l0aCgnYXVkaW8vJykpXG4gICk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0YXR1c0ljb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLm1zZygpLnN0YXR1cykge1xuICAgICAgY2FzZSAnc2VuZGluZyc6XG4gICAgICAgIHJldHVybiAndGltZS1vdXRsaW5lJztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiAnYWxlcnQtY2lyY2xlJztcbiAgICAgIGNhc2UgJ2RlbGl2ZXJlZCc6XG4gICAgICBjYXNlICdyZWFkJzpcbiAgICAgICAgcmV0dXJuICdjaGVja21hcmstZG9uZSc7XG4gICAgICBjYXNlICdzZW50JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY2hlY2ttYXJrJztcbiAgICB9XG4gIH0pO1xuXG4gIHByb3RlY3RlZCB0b2dnbGVBY3Rpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1zZygpLmlzRGVsZXRlZCkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aW9uc09wZW4udXBkYXRlKHYgPT4gIXYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXQodHlwZTogTWVzc2FnZUJ1YmJsZUFjdGlvblsndHlwZSddLCB0b2tlbj86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uc09wZW4uc2V0KGZhbHNlKTtcbiAgICB0aGlzLmFjdGlvbi5lbWl0KHsgdHlwZSwgbXNnSWQ6IHRoaXMubXNnKCkubXNnSWQsIHRva2VuIH0pO1xuICB9XG5cbiAgLyoqIEFicmUgbGEgaW1hZ2VuIGFkanVudGEgZW4gZWwgdmlzb3IgZGUgbWVkaW9zIGEgcGFudGFsbGEgY29tcGxldGEuICovXG4gIHByb3RlY3RlZCB2aWV3QXR0YWNobWVudChhdHQ6IHsgdXJsOiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IG1pbWVUeXBlPzogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWwub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE1lZGlhVmlld2VyTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczogeyB1cmw6IGF0dC51cmwsIG5hbWU6IGF0dC5uYW1lLCBtaW1lVHlwZTogYXR0Lm1pbWVUeXBlIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogRGlhZ27Ds3N0aWNvOiBlbCBuYXZlZ2Fkb3Igbm8gcHVkbyByZXByb2R1Y2lyIGVsIGF1ZGlvIHJlY2liaWRvLiAqL1xuICBwcm90ZWN0ZWQgb25BdWRpb0Vycm9yKGF0dDogeyB1cmw6IHN0cmluZzsgbWltZVR5cGU/OiBzdHJpbmcgfSwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSBldmVudC50YXJnZXQgYXMgSFRNTEF1ZGlvRWxlbWVudDtcbiAgICBjb25zdCBjb2RlczogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHsgMTogJ0FCT1JURUQnLCAyOiAnTkVUV09SSycsIDM6ICdERUNPREUnLCA0OiAnU1JDX05PVF9TVVBQT1JURUQnIH07XG4gICAgY29uc3QgY2FuUGxheSA9IGF0dC5taW1lVHlwZSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJykuY2FuUGxheVR5cGUoYXR0Lm1pbWVUeXBlKSA6ICcnO1xuICAgIGNvbnNvbGUuZXJyb3IoJ1tNZXNzYWdlQnViYmxlXSBhdWRpbyBwbGF5IGVycm9yJywge1xuICAgICAgbWltZVR5cGU6IGF0dC5taW1lVHlwZSxcbiAgICAgIHVybDogYXR0LnVybC5zbGljZSgwLCA4MCksXG4gICAgICBjb2RlOiBlbC5lcnJvcj8uY29kZSxcbiAgICAgIHJlYXNvbjogZWwuZXJyb3IgPyBjb2Rlc1tlbC5lcnJvci5jb2RlXSA6ICd1bmtub3duJyxcbiAgICAgIGNhblBsYXlUaGlzVHlwZTogY2FuUGxheSxcbiAgICB9KTtcbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdNZXNzYWdlQnViYmxlJyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,112 @@
1
+ import { Component, Input, inject } from '@angular/core';
2
+ import { IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonToolbar } from '@ionic/angular/standalone';
3
+ import { addIcons } from 'ionicons';
4
+ import { documentOutline, downloadOutline } from 'ionicons/icons';
5
+ import { I18nService } from '../../../services/i18n';
6
+ import * as i0 from "@angular/core";
7
+ addIcons({ documentOutline, downloadOutline });
8
+ const NS = 'MediaViewerModal';
9
+ const MEDIA_VIEWER_I18N = {
10
+ es: { close: 'Cerrar', download: 'Descargar' },
11
+ en: { close: 'Close', download: 'Download' },
12
+ };
13
+ /**
14
+ * `val-media-viewer-modal` — visor de un adjunto a pantalla completa. Imagen →
15
+ * `<img>` contenido; audio → `<audio controls>`; otros → icono + descargar.
16
+ * Se abre con `ModalService.open({ component, componentProps: { url, mimeType, name } })`.
17
+ * Header canónico (Regla #5): botón Cerrar en `slot=end`.
18
+ */
19
+ export class MediaViewerModalComponent {
20
+ constructor() {
21
+ this.i18n = inject(I18nService);
22
+ this.url = '';
23
+ if (!this.i18n.hasNamespace(NS)) {
24
+ this.i18n.registerContent(NS, MEDIA_VIEWER_I18N);
25
+ }
26
+ }
27
+ kind() {
28
+ const m = this.mimeType ?? '';
29
+ if (m.startsWith('image/'))
30
+ return 'image';
31
+ if (m.startsWith('audio/'))
32
+ return 'audio';
33
+ return 'file';
34
+ }
35
+ t(key) {
36
+ return this.i18n.t(key, NS);
37
+ }
38
+ close() {
39
+ this._modalRef?.dismiss(null, 'cancel');
40
+ }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MediaViewerModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MediaViewerModalComponent, isStandalone: true, selector: "val-media-viewer-modal", inputs: { url: "url", name: "name", mimeType: "mimeType", _modalRef: "_modalRef" }, ngImport: i0, template: `
43
+ <ion-header>
44
+ <ion-toolbar>
45
+ <ion-buttons slot="end">
46
+ <ion-button fill="clear" color="dark" (click)="close()">
47
+ <strong>{{ t('close') }}</strong>
48
+ </ion-button>
49
+ </ion-buttons>
50
+ </ion-toolbar>
51
+ </ion-header>
52
+ <ion-content class="viewer">
53
+ @if (kind() === 'image') {
54
+ <img class="media-image" [src]="url" [alt]="name || ''" />
55
+ } @else if (kind() === 'audio') {
56
+ <div class="media-center">
57
+ <audio controls preload="metadata" [src]="url"></audio>
58
+ </div>
59
+ } @else {
60
+ <div class="media-center file">
61
+ <ion-icon name="document-outline" aria-hidden="true" />
62
+ <span class="file-name">{{ name || url }}</span>
63
+ <a class="download" [href]="url" target="_blank" rel="noopener" download>
64
+ <ion-icon name="download-outline" slot="start" aria-hidden="true" />
65
+ {{ t('download') }}
66
+ </a>
67
+ </div>
68
+ }
69
+ </ion-content>
70
+ `, isInline: true, styles: [".viewer{--background: #000}.media-image{width:100%;height:100%;object-fit:contain;display:block}.media-center{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;height:100%;padding:24px;color:var(--ion-color-light, #fff)}.media-center audio{width:min(100%,420px)}.media-center.file ion-icon{font-size:3rem;opacity:.8}.file-name{font-size:.9375rem;text-align:center;word-break:break-word}.download{display:inline-flex;align-items:center;gap:6px;padding:10px 18px;border-radius:999px;background:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff);text-decoration:none;font-weight:600}\n"], dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }] }); }
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MediaViewerModalComponent, decorators: [{
73
+ type: Component,
74
+ args: [{ selector: 'val-media-viewer-modal', standalone: true, imports: [IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonToolbar], template: `
75
+ <ion-header>
76
+ <ion-toolbar>
77
+ <ion-buttons slot="end">
78
+ <ion-button fill="clear" color="dark" (click)="close()">
79
+ <strong>{{ t('close') }}</strong>
80
+ </ion-button>
81
+ </ion-buttons>
82
+ </ion-toolbar>
83
+ </ion-header>
84
+ <ion-content class="viewer">
85
+ @if (kind() === 'image') {
86
+ <img class="media-image" [src]="url" [alt]="name || ''" />
87
+ } @else if (kind() === 'audio') {
88
+ <div class="media-center">
89
+ <audio controls preload="metadata" [src]="url"></audio>
90
+ </div>
91
+ } @else {
92
+ <div class="media-center file">
93
+ <ion-icon name="document-outline" aria-hidden="true" />
94
+ <span class="file-name">{{ name || url }}</span>
95
+ <a class="download" [href]="url" target="_blank" rel="noopener" download>
96
+ <ion-icon name="download-outline" slot="start" aria-hidden="true" />
97
+ {{ t('download') }}
98
+ </a>
99
+ </div>
100
+ }
101
+ </ion-content>
102
+ `, styles: [".viewer{--background: #000}.media-image{width:100%;height:100%;object-fit:contain;display:block}.media-center{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;height:100%;padding:24px;color:var(--ion-color-light, #fff)}.media-center audio{width:min(100%,420px)}.media-center.file ion-icon{font-size:3rem;opacity:.8}.file-name{font-size:.9375rem;text-align:center;word-break:break-word}.download{display:inline-flex;align-items:center;gap:6px;padding:10px 18px;border-radius:999px;background:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff);text-decoration:none;font-weight:600}\n"] }]
103
+ }], ctorParameters: () => [], propDecorators: { url: [{
104
+ type: Input
105
+ }], name: [{
106
+ type: Input
107
+ }], mimeType: [{
108
+ type: Input
109
+ }], _modalRef: [{
110
+ type: Input
111
+ }] } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtdmlld2VyLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWVkaWEtdmlld2VyLW1vZGFsL21lZGlhLXZpZXdlci1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRXJELFFBQVEsQ0FBQyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sRUFBRSxHQUFHLGtCQUFrQixDQUFDO0FBQzlCLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0lBQzlDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtDQUM3QyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFpRkgsTUFBTSxPQUFPLHlCQUF5QjtJQVFwQztRQVBpQixTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5DLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFNaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFFUyxJQUFJO1FBQ1osTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sT0FBTyxDQUFDO1FBQzNDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUMzQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsQ0FBQyxDQUFDLEdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDOytHQTNCVSx5QkFBeUI7bUdBQXpCLHlCQUF5QixzS0E1RTFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJULHdzQkE3QlMsU0FBUyxvUEFBRSxVQUFVLDhFQUFFLFVBQVUsd0tBQUUsU0FBUyxvR0FBRSxPQUFPLDJKQUFFLFVBQVU7OzRGQTZFaEUseUJBQXlCO2tCQWhGckMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsWUFDbEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0QlQ7d0RBbURRLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25CdXR0b24sIElvbkJ1dHRvbnMsIElvbkNvbnRlbnQsIElvbkhlYWRlciwgSW9uSWNvbiwgSW9uVG9vbGJhciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBkb2N1bWVudE91dGxpbmUsIGRvd25sb2FkT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcblxuYWRkSWNvbnMoeyBkb2N1bWVudE91dGxpbmUsIGRvd25sb2FkT3V0bGluZSB9KTtcblxuY29uc3QgTlMgPSAnTWVkaWFWaWV3ZXJNb2RhbCc7XG5jb25zdCBNRURJQV9WSUVXRVJfSTE4TiA9IHtcbiAgZXM6IHsgY2xvc2U6ICdDZXJyYXInLCBkb3dubG9hZDogJ0Rlc2NhcmdhcicgfSxcbiAgZW46IHsgY2xvc2U6ICdDbG9zZScsIGRvd25sb2FkOiAnRG93bmxvYWQnIH0sXG59O1xuXG4vKipcbiAqIGB2YWwtbWVkaWEtdmlld2VyLW1vZGFsYCDigJQgdmlzb3IgZGUgdW4gYWRqdW50byBhIHBhbnRhbGxhIGNvbXBsZXRhLiBJbWFnZW4g4oaSXG4gKiBgPGltZz5gIGNvbnRlbmlkbzsgYXVkaW8g4oaSIGA8YXVkaW8gY29udHJvbHM+YDsgb3Ryb3Mg4oaSIGljb25vICsgZGVzY2FyZ2FyLlxuICogU2UgYWJyZSBjb24gYE1vZGFsU2VydmljZS5vcGVuKHsgY29tcG9uZW50LCBjb21wb25lbnRQcm9wczogeyB1cmwsIG1pbWVUeXBlLCBuYW1lIH0gfSlgLlxuICogSGVhZGVyIGNhbsOzbmljbyAoUmVnbGEgIzUpOiBib3TDs24gQ2VycmFyIGVuIGBzbG90PWVuZGAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1tZWRpYS12aWV3ZXItbW9kYWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbSW9uQnV0dG9uLCBJb25CdXR0b25zLCBJb25Db250ZW50LCBJb25IZWFkZXIsIElvbkljb24sIElvblRvb2xiYXJdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2Nsb3NlJykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJ2aWV3ZXJcIj5cbiAgICAgIEBpZiAoa2luZCgpID09PSAnaW1hZ2UnKSB7XG4gICAgICAgIDxpbWcgY2xhc3M9XCJtZWRpYS1pbWFnZVwiIFtzcmNdPVwidXJsXCIgW2FsdF09XCJuYW1lIHx8ICcnXCIgLz5cbiAgICAgIH0gQGVsc2UgaWYgKGtpbmQoKSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY2VudGVyXCI+XG4gICAgICAgICAgPGF1ZGlvIGNvbnRyb2xzIHByZWxvYWQ9XCJtZXRhZGF0YVwiIFtzcmNdPVwidXJsXCI+PC9hdWRpbz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWNlbnRlciBmaWxlXCI+XG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJkb2N1bWVudC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtbmFtZVwiPnt7IG5hbWUgfHwgdXJsIH19PC9zcGFuPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZG93bmxvYWRcIiBbaHJlZl09XCJ1cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiIGRvd25sb2FkPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJkb3dubG9hZC1vdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIHt7IHQoJ2Rvd25sb2FkJykgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC52aWV3ZXIge1xuICAgICAgICAtLWJhY2tncm91bmQ6ICMwMDA7XG4gICAgICB9XG4gICAgICAubWVkaWEtaW1hZ2Uge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC5tZWRpYS1jZW50ZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxNHB4O1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsICNmZmYpO1xuICAgICAgfVxuICAgICAgLm1lZGlhLWNlbnRlciBhdWRpbyB7XG4gICAgICAgIHdpZHRoOiBtaW4oMTAwJSwgNDIwcHgpO1xuICAgICAgfVxuICAgICAgLm1lZGlhLWNlbnRlci5maWxlIGlvbi1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAzcmVtO1xuICAgICAgICBvcGFjaXR5OiAwLjg7XG4gICAgICB9XG4gICAgICAuZmlsZS1uYW1lIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgIH1cbiAgICAgIC5kb3dubG9hZCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgcGFkZGluZzogMTBweCAxOHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnktY29udHJhc3QsICNmZmYpO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVkaWFWaWV3ZXJNb2RhbENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG5cbiAgQElucHV0KCkgdXJsID0gJyc7XG4gIEBJbnB1dCgpIG5hbWU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1pbWVUeXBlPzogc3RyaW5nO1xuICBASW5wdXQoKSBfbW9kYWxSZWY/OiB7IGRpc21pc3M6IChkYXRhPzogdW5rbm93biwgcm9sZT86IHN0cmluZykgPT4gdm9pZCB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZShOUykpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckNvbnRlbnQoTlMsIE1FRElBX1ZJRVdFUl9JMThOKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQga2luZCgpOiAnaW1hZ2UnIHwgJ2F1ZGlvJyB8ICdmaWxlJyB7XG4gICAgY29uc3QgbSA9IHRoaXMubWltZVR5cGUgPz8gJyc7XG4gICAgaWYgKG0uc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHJldHVybiAnaW1hZ2UnO1xuICAgIGlmIChtLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpKSByZXR1cm4gJ2F1ZGlvJztcbiAgICByZXR1cm4gJ2ZpbGUnO1xuICB9XG5cbiAgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgTlMpO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9kYWxSZWY/LmRpc21pc3MobnVsbCwgJ2NhbmNlbCcpO1xuICB9XG59XG4iXX0=
@@ -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 = '4.0.241';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4yNDEnO1xuIl19
5
+ export const VERSION = '4.0.243';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4yNDMnO1xuIl19