speechrecorderng 3.3.2 → 3.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +92 -77
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +11 -5
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +50 -37
- package/esm2020/lib/speechrecorder/session/prompting.mjs +19 -15
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +14 -11
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +2 -2
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +9 -9
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +77 -62
- package/esm2020/lib/speechrecorderng.component.mjs +2 -1
- package/esm2020/lib/speechrecorderng.module.mjs +5 -5
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/recordingitem_display.mjs +29 -25
- package/esm2020/lib/ui/responsive_component.mjs +24 -0
- package/fesm2015/speechrecorderng.mjs +282 -204
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +282 -204
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/speechrecorder/session/audiorecorder.d.ts +5 -3
- package/lib/speechrecorder/session/basicrecorder.d.ts +6 -3
- package/lib/speechrecorder/session/controlpanel.d.ts +9 -3
- package/lib/speechrecorder/session/prompting.d.ts +5 -1
- package/lib/speechrecorder/session/recorder_combi_pane.d.ts +5 -2
- package/lib/speechrecorder/session/sessionmanager.d.ts +5 -3
- package/lib/speechrecorderng.component.d.ts +1 -1
- package/lib/speechrecorderng.module.d.ts +18 -19
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/recordingitem_display.d.ts +8 -4
- package/lib/ui/responsive_component.d.ts +9 -0
- package/package.json +1 -2
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Action } from '../../action/action';
|
|
2
2
|
import { Component, ViewChild, Input } from "@angular/core";
|
|
3
|
+
import { ResponsiveComponent } from "../../ui/responsive_component";
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "@angular/common";
|
|
5
6
|
import * as i2 from "@angular/material/icon";
|
|
6
7
|
import * as i3 from "@angular/material/progress-spinner";
|
|
7
8
|
import * as i4 from "@angular/material/tooltip";
|
|
8
|
-
import * as i5 from "@angular/
|
|
9
|
+
import * as i5 from "@angular/cdk/layout";
|
|
9
10
|
import * as i6 from "@angular/material/button";
|
|
10
11
|
import * as i7 from "@angular/material/dialog";
|
|
11
|
-
import * as i8 from "@angular/flex-layout/flex";
|
|
12
12
|
export class StatusDisplay {
|
|
13
13
|
constructor() {
|
|
14
14
|
this.statusAlertType = 'info';
|
|
@@ -42,6 +42,7 @@ export class UploadStatus {
|
|
|
42
42
|
constructor() {
|
|
43
43
|
this._awaitNewUpload = false;
|
|
44
44
|
this.spinnerMode = 'determinate';
|
|
45
|
+
this._colorStatus = 'primary';
|
|
45
46
|
this._value = 100;
|
|
46
47
|
this.displayValue = null;
|
|
47
48
|
this.toolTipText = '';
|
|
@@ -79,6 +80,15 @@ export class UploadStatus {
|
|
|
79
80
|
}
|
|
80
81
|
set status(status) {
|
|
81
82
|
this._status = status;
|
|
83
|
+
if ('accent' === status) {
|
|
84
|
+
this._colorStatus = 'accent';
|
|
85
|
+
}
|
|
86
|
+
else if ('warn' === status) {
|
|
87
|
+
this._colorStatus = 'warn';
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this._colorStatus = 'primary';
|
|
91
|
+
}
|
|
82
92
|
this._updateSpinner();
|
|
83
93
|
}
|
|
84
94
|
get status() {
|
|
@@ -127,8 +137,9 @@ export class TransportActions {
|
|
|
127
137
|
this.bwdAction = new Action('Backward');
|
|
128
138
|
}
|
|
129
139
|
}
|
|
130
|
-
export class TransportPanel {
|
|
131
|
-
constructor() {
|
|
140
|
+
export class TransportPanel extends ResponsiveComponent {
|
|
141
|
+
constructor(breakpointObserver) {
|
|
142
|
+
super(breakpointObserver);
|
|
132
143
|
this.navigationEnabled = true;
|
|
133
144
|
this.pausingEnabled = true;
|
|
134
145
|
}
|
|
@@ -200,28 +211,28 @@ export class TransportPanel {
|
|
|
200
211
|
}
|
|
201
212
|
}
|
|
202
213
|
}
|
|
203
|
-
TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
204
|
-
TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, ngImport: i0, template: `
|
|
214
|
+
TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, deps: [{ token: i5.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
|
|
215
|
+
TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, usesInheritance: true, ngImport: i0, template: `
|
|
205
216
|
<button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
|
|
206
217
|
mat-raised-button>
|
|
207
218
|
<mat-icon>chevron_left</mat-icon>
|
|
208
219
|
</button>
|
|
209
220
|
<button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled()" mat-raised-button>
|
|
210
221
|
<mat-icon [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon *ngIf="!nextDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon>
|
|
211
|
-
<span
|
|
222
|
+
<span *ngIf="!screenXs">{{startStopNextName()}}</span>
|
|
212
223
|
</button>
|
|
213
224
|
<button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button>
|
|
214
225
|
<mat-icon>pause</mat-icon>
|
|
215
|
-
<span
|
|
226
|
+
<span *ngIf="!screenXs">Pause</span>
|
|
216
227
|
</button>
|
|
217
|
-
<button id="fwdNextBtn" *ngIf="navigationEnabled"
|
|
228
|
+
<button id="fwdNextBtn" *ngIf="navigationEnabled && !screenXs" (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
|
|
218
229
|
<mat-icon>redo</mat-icon>
|
|
219
230
|
</button>
|
|
220
231
|
<button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button>
|
|
221
232
|
<mat-icon>chevron_right</mat-icon>
|
|
222
233
|
</button>
|
|
223
234
|
|
|
224
|
-
`, isInline: true, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n", "button{touch-action:manipulation}\n"], dependencies: [{ kind: "directive", type:
|
|
235
|
+
`, isInline: true, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n", "button{touch-action:manipulation}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
|
|
225
236
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, decorators: [{
|
|
226
237
|
type: Component,
|
|
227
238
|
args: [{ selector: 'app-sprtransport', template: `
|
|
@@ -231,13 +242,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
231
242
|
</button>
|
|
232
243
|
<button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled()" mat-raised-button>
|
|
233
244
|
<mat-icon [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon *ngIf="!nextDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon>
|
|
234
|
-
<span
|
|
245
|
+
<span *ngIf="!screenXs">{{startStopNextName()}}</span>
|
|
235
246
|
</button>
|
|
236
247
|
<button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button>
|
|
237
248
|
<mat-icon>pause</mat-icon>
|
|
238
|
-
<span
|
|
249
|
+
<span *ngIf="!screenXs">Pause</span>
|
|
239
250
|
</button>
|
|
240
|
-
<button id="fwdNextBtn" *ngIf="navigationEnabled"
|
|
251
|
+
<button id="fwdNextBtn" *ngIf="navigationEnabled && !screenXs" (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
|
|
241
252
|
<mat-icon>redo</mat-icon>
|
|
242
253
|
</button>
|
|
243
254
|
<button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button>
|
|
@@ -245,7 +256,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
245
256
|
</button>
|
|
246
257
|
|
|
247
258
|
`, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n", "button{touch-action:manipulation}\n"] }]
|
|
248
|
-
}], propDecorators: { readonly: [{
|
|
259
|
+
}], ctorParameters: function () { return [{ type: i5.BreakpointObserver }]; }, propDecorators: { readonly: [{
|
|
249
260
|
type: Input
|
|
250
261
|
}], actions: [{
|
|
251
262
|
type: Input
|
|
@@ -301,8 +312,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
301
312
|
}], ctorParameters: function () { return []; }, propDecorators: { ready: [{
|
|
302
313
|
type: Input
|
|
303
314
|
}] } });
|
|
304
|
-
export class ControlPanel {
|
|
305
|
-
constructor(dialog) {
|
|
315
|
+
export class ControlPanel extends ResponsiveComponent {
|
|
316
|
+
constructor(bpo, dialog) {
|
|
317
|
+
super(bpo);
|
|
318
|
+
this.bpo = bpo;
|
|
306
319
|
this.dialog = dialog;
|
|
307
320
|
this.processing = false;
|
|
308
321
|
this.navigationEnabled = true;
|
|
@@ -315,44 +328,44 @@ export class ControlPanel {
|
|
|
315
328
|
return this._ready;
|
|
316
329
|
}
|
|
317
330
|
}
|
|
318
|
-
ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, deps: [{ token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
319
|
-
ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ControlPanel, selector: "app-sprcontrolpanel", inputs: { readonly: "readonly", transportActions: "transportActions", processing: "processing", statusMsg: "statusMsg", statusAlertType: "statusAlertType", statusWaiting: "statusWaiting", uploadStatus: "uploadStatus", uploadProgress: "uploadProgress", currentRecording: "currentRecording", enableUploadRecordings: "enableUploadRecordings", navigationEnabled: "navigationEnabled", ready: "ready" }, viewQueries: [{ propertyName: "statusDisplay", first: true, predicate: StatusDisplay, descendants: true, static: true }, { propertyName: "transportPanel", first: true, predicate: TransportPanel, descendants: true, static: true }], ngImport: i0, template: `
|
|
320
|
-
<div
|
|
321
|
-
<app-sprstatusdisplay
|
|
331
|
+
ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, deps: [{ token: i5.BreakpointObserver }, { token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
332
|
+
ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ControlPanel, selector: "app-sprcontrolpanel", inputs: { readonly: "readonly", transportActions: "transportActions", processing: "processing", statusMsg: "statusMsg", statusAlertType: "statusAlertType", statusWaiting: "statusWaiting", uploadStatus: "uploadStatus", uploadProgress: "uploadProgress", currentRecording: "currentRecording", enableUploadRecordings: "enableUploadRecordings", navigationEnabled: "navigationEnabled", ready: "ready" }, viewQueries: [{ propertyName: "statusDisplay", first: true, predicate: StatusDisplay, descendants: true, static: true }, { propertyName: "transportPanel", first: true, predicate: TransportPanel, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
333
|
+
<div *ngIf="!screenXs" style="flex-direction: row" >
|
|
334
|
+
<app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
322
335
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
323
|
-
<app-sprtransport
|
|
324
|
-
<app-uploadstatus
|
|
336
|
+
<app-sprtransport style="flex:10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
|
|
337
|
+
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
325
338
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
326
339
|
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
327
340
|
</div>
|
|
328
|
-
<div
|
|
329
|
-
<div
|
|
330
|
-
<app-sprstatusdisplay
|
|
341
|
+
<div *ngIf="screenXs"style="flex-direction: column" >
|
|
342
|
+
<div style="flex-direction: row" class="flexFill" >
|
|
343
|
+
<app-sprstatusdisplay style="flex:10 0 0;flex-align:left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
331
344
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
332
|
-
<app-uploadstatus
|
|
345
|
+
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
333
346
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
334
347
|
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
335
348
|
</div>
|
|
336
349
|
<app-sprtransport [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
|
|
337
350
|
|
|
338
351
|
</div>
|
|
339
|
-
`, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], dependencies: [{ kind: "directive", type:
|
|
352
|
+
`, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { kind: "component", type: TransportPanel, selector: "app-sprtransport", inputs: ["readonly", "actions", "navigationEnabled", "pausingEnabled"] }, { kind: "component", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }] });
|
|
340
353
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, decorators: [{
|
|
341
354
|
type: Component,
|
|
342
355
|
args: [{ selector: 'app-sprcontrolpanel', template: `
|
|
343
|
-
<div
|
|
344
|
-
<app-sprstatusdisplay
|
|
356
|
+
<div *ngIf="!screenXs" style="flex-direction: row" >
|
|
357
|
+
<app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
345
358
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
346
|
-
<app-sprtransport
|
|
347
|
-
<app-uploadstatus
|
|
359
|
+
<app-sprtransport style="flex:10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
|
|
360
|
+
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
348
361
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
349
362
|
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
350
363
|
</div>
|
|
351
|
-
<div
|
|
352
|
-
<div
|
|
353
|
-
<app-sprstatusdisplay
|
|
364
|
+
<div *ngIf="screenXs"style="flex-direction: column" >
|
|
365
|
+
<div style="flex-direction: row" class="flexFill" >
|
|
366
|
+
<app-sprstatusdisplay style="flex:10 0 0;flex-align:left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
354
367
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
355
|
-
<app-uploadstatus
|
|
368
|
+
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
356
369
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
357
370
|
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
358
371
|
</div>
|
|
@@ -360,7 +373,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
360
373
|
|
|
361
374
|
</div>
|
|
362
375
|
`, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"] }]
|
|
363
|
-
}], ctorParameters: function () { return [{ type: i7.MatDialog }]; }, propDecorators: { statusDisplay: [{
|
|
376
|
+
}], ctorParameters: function () { return [{ type: i5.BreakpointObserver }, { type: i7.MatDialog }]; }, propDecorators: { statusDisplay: [{
|
|
364
377
|
type: ViewChild,
|
|
365
378
|
args: [StatusDisplay, { static: true }]
|
|
366
379
|
}], transportPanel: [{
|
|
@@ -391,4 +404,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
391
404
|
}], ready: [{
|
|
392
405
|
type: Input
|
|
393
406
|
}] } });
|
|
394
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbHBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vY29udHJvbHBhbmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQzVCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBdUN2QixNQUFNLE9BQU8sYUFBYTtJQWpDMUI7UUFrQ1csb0JBQWUsR0FBRyxNQUFNLENBQUM7UUFDekIsY0FBUyxHQUFHLGVBQWUsQ0FBQztRQUM1QixrQkFBYSxHQUFFLEtBQUssQ0FBQztLQUMvQjs7MkdBSlksYUFBYTsrRkFBYixhQUFhLG9LQTdCZDs7Ozs7R0FLVDs0RkF3QlUsYUFBYTtrQkFqQ3pCLFNBQVM7K0JBRUUsc0JBQXNCLFlBRXRCOzs7OztHQUtUOzhCQXlCUSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSzs7QUFrQlIsTUFBTSxPQUFPLFlBQVk7SUFkekI7UUFlVSxvQkFBZSxHQUFDLEtBQUssQ0FBQztRQUM5QixnQkFBVyxHQUF1QixhQUFhLENBQUM7UUFFaEQsV0FBTSxHQUFHLEdBQUcsQ0FBQTtRQUNaLGlCQUFZLEdBQWEsSUFBSSxDQUFBO1FBQzdCLGdCQUFXLEdBQVEsRUFBRSxDQUFBO0tBNEN0QjtJQTFDUyxjQUFjO1FBRXBCLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFBO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUMsMEJBQTBCLENBQUE7WUFDNUMsTUFBTSxHQUFDLG1CQUFtQixDQUFBO1NBQzNCO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQTtZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsR0FBRyxDQUFBO1lBQ2pDLElBQUcsSUFBSSxDQUFDLE1BQU0sS0FBRyxHQUFHLEVBQUM7Z0JBQ25CLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQTthQUMzQjtpQkFBSztnQkFDSixNQUFNLEdBQUcsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTthQUNqRDtTQUNGO1FBQ0QsSUFBRyxJQUFJLENBQUMsTUFBTSxLQUFHLE1BQU0sRUFBQztZQUN0QixNQUFNLEdBQUMsK0RBQStELEdBQUMsTUFBTSxDQUFBO1NBQzlFO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBQyxNQUFNLENBQUE7SUFDekIsQ0FBQztJQUVELElBQ0ksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFBQSxDQUFDO0lBRUYsSUFBYSxjQUFjLENBQUMsY0FBc0I7UUFDaEQsSUFBSSxDQUFDLGVBQWUsR0FBQyxjQUFjLENBQUE7UUFDbkMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxNQUFhO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUMsTUFBTSxDQUFBO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3JCLENBQUM7OzBHQWhEVSxZQUFZOzhGQUFaLFlBQVksd0lBWmI7O0dBRVQ7NEZBVVUsWUFBWTtrQkFkeEIsU0FBUzsrQkFDRSxrQkFBa0IsWUFDbEI7O0dBRVQ7OEJBeUNHLEtBQUs7c0JBRFIsS0FBSztnQkFNTyxjQUFjO3NCQUExQixLQUFLO2dCQUtPLE1BQU07c0JBQWxCLEtBQUs7O0FBeUJSLE1BQU0sT0FBTyxlQUFlO0lBYjVCO1FBY0UsZ0JBQVcsR0FBRyxZQUFZLENBQUM7S0FDNUI7OzZHQUZZLGVBQWU7aUdBQWYsZUFBZSw4REFYaEI7O0dBRVQ7NEZBU1UsZUFBZTtrQkFiM0IsU0FBUzsrQkFDRSx3QkFBd0IsWUFDeEI7O0dBRVQ7O0FBZ0JILE1BQU0sT0FBTyxnQkFBZ0I7SUFTM0I7UUFDRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUMsQ0FBQztDQUNGO0FBOENELE1BQU0sT0FBTyxjQUFjO0lBNUMzQjtRQWdEVyxzQkFBaUIsR0FBQyxJQUFJLENBQUM7UUFDdkIsbUJBQWMsR0FBQyxJQUFJLENBQUM7S0F5RTlCO0lBcEVDLGFBQWE7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQTtJQUM1RSxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQTtJQUMxRCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUN0RixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDcEYsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDckYsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDekYsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDckYsQ0FBQztJQUVDLGlCQUFpQjtRQUNiLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUM7WUFDcEIsSUFBSSxDQUFDLHVCQUF1QixHQUFFLE1BQU0sQ0FBQTtTQUN2QzthQUFLLElBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUM7WUFDM0IsSUFBSSxDQUFDLHVCQUF1QixHQUFDLE9BQU8sQ0FBQTtTQUN2QzthQUFLLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQTtTQUN4QztRQUNELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3hDLENBQUM7SUFDSCxxQkFBcUI7UUFDakIsSUFBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBQztZQUN0QixJQUFJLENBQUMsMkJBQTJCLEdBQUMscUJBQXFCLENBQUE7U0FDeEQ7YUFBSyxJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFDO1lBQzFCLElBQUksQ0FBQywyQkFBMkIsR0FBQyxNQUFNLENBQUE7U0FDMUM7YUFBSyxJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFDO1lBQzFCLElBQUksQ0FBQywyQkFBMkIsR0FBQyxNQUFNLENBQUE7U0FDMUM7UUFDRCxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQTtJQUMzQyxDQUFDO0lBQ0Msc0JBQXNCO1FBQ2xCLElBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUM7WUFDckIsT0FBTyxLQUFLLENBQUE7U0FDZjthQUFLLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUM7WUFDbEQsT0FBTyxRQUFRLENBQUE7U0FDbEI7YUFBSTtZQUNELE9BQU8sTUFBTSxDQUFDO1NBQ2pCO0lBQ0wsQ0FBQztJQUVILG9CQUFvQjtRQUNsQixJQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3BDO2FBQUssSUFBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBQztZQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNuQzthQUFLLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbkM7SUFDSCxDQUFDOzs0R0E1RVUsY0FBYztnR0FBZCxjQUFjLHdMQXhDZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQlQ7NEZBb0JVLGNBQWM7a0JBNUMxQixTQUFTOytCQUVFLGtCQUFrQixZQUVsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQlQ7OEJBc0JRLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLOztBQWtGUixNQUFNLE9BQU8saUJBQWlCO0lBRzVCO1FBRkEsa0JBQWEsR0FBQyxLQUFLLENBQUM7SUFFTCxDQUFDO0lBRWhCLElBQWEsWUFBWSxDQUFDLFVBQWtCO1FBQzFDLElBQUksQ0FBQyxhQUFhLEdBQUMsVUFBVSxDQUFDO0lBQ2hDLENBQUM7OytHQVBVLGlCQUFpQjttR0FBakIsaUJBQWlCLHVHQUxsQjs7R0FFVDs0RkFHVSxpQkFBaUI7a0JBUDdCLFNBQVM7K0JBQ0UsdUJBQXVCLFlBQ3ZCOztHQUVUOzBFQVFZLFlBQVk7c0JBQXhCLEtBQUs7O0FBY1IsTUFBTSxPQUFPLG1CQUFtQjtJQUs5QjtRQUpBLFdBQU0sR0FBQyxJQUFJLENBQUM7UUFDWixzQkFBaUIsR0FBQyxpQkFBaUIsQ0FBQTtRQUNuQyxzQkFBaUIsR0FBUSxFQUFFLENBQUE7SUFFWixDQUFDO0lBRWhCLElBQWEsS0FBSyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBQyxLQUFLLENBQUE7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixHQUFDLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLGlCQUFpQixDQUFBLENBQUMsQ0FBQSxnQkFBZ0IsQ0FBQTtRQUNyRSxJQUFJLENBQUMsaUJBQWlCLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUEsNkVBQTZFLENBQUEsQ0FBQyxDQUFBLDRGQUE0RixDQUFBO0lBQy9NLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDcEIsQ0FBQzs7aUhBZlUsbUJBQW1CO3FHQUFuQixtQkFBbUIsMkZBTHBCOztHQUVUOzRGQUdVLG1CQUFtQjtrQkFUL0IsU0FBUzsrQkFFRSx5QkFBeUIsWUFFekI7O0dBRVQ7MEVBVVksS0FBSztzQkFBakIsS0FBSzs7QUE0Q1IsTUFBTSxPQUFPLFlBQVk7SUFrQnZCLFlBQW1CLE1BQWlCO1FBQWpCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFaM0IsZUFBVSxHQUFDLEtBQUssQ0FBQTtRQVFoQixzQkFBaUIsR0FBQyxJQUFJLENBQUM7UUFFaEMsV0FBTSxHQUFDLElBQUksQ0FBQTtJQUlYLENBQUM7SUFFRCxJQUFhLEtBQUssQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUMsS0FBSyxDQUFBO0lBQ25CLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDcEIsQ0FBQzs7MEdBNUJVLFlBQVk7OEZBQVosWUFBWSx3ZkFDWixhQUFhLCtGQUNiLGNBQWMsOERBL0JmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVCxxNkZBblRVLGFBQWEsNEhBcUJiLFlBQVksNEdBMElaLGNBQWMscUlBMEdkLG1CQUFtQjs0RkFtRG5CLFlBQVk7a0JBakN4QixTQUFTOytCQUVFLHFCQUFxQixZQUVyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQlQ7Z0dBVTJDLGFBQWE7c0JBQXhELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRyxjQUFjO3NCQUExRCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRWxDLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFPLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FjdGlvbn0gZnJvbSAnLi4vLi4vYWN0aW9uL2FjdGlvbidcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsIFZpZXdDaGlsZCwgSW5wdXRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHsgTWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3NTcGlubmVyTW9kZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXJcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc3Byc3RhdHVzZGlzcGxheScsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cCBtYXRUb29sdGlwPVwiU3RhdHVzXCI+XHJcbiAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciAqbmdJZj1cInN0YXR1c1dhaXRpbmdcIiBjb2xvcj1cImJsYWNrXCIgIG1vZGU9XCJpbmRldGVybWluYXRlXCIgW2RpYW1ldGVyXT1cIjMwXCIgW3N0cm9rZVdpZHRoXT1cIjVcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPjxtYXQtaWNvbiAqbmdJZj1cInN0YXR1c0FsZXJ0VHlwZT09PSdlcnJvcidcIiBzdHlsZT1cImNvbG9yOnJlZFwiPnJlcG9ydF9wcm9ibGVtPC9tYXQtaWNvbj5cclxuICAgICAge3tzdGF0dXNNc2d9fVxyXG4gICAgPC9wPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGRpc3BsYXk6IGlubGluZTtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICBmb250LXNpemU6IHNtYWxsZXI7XHJcbiAgfWAsIGBcclxuICAgIHAge1xyXG4gICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgIHdoaXRlLXNwYWNlOm5vd3JhcDtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIG1hdC1wcm9ncmVzcy1zcGlubmVyIHtcclxuICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB9XHJcbiAgYCwgYFxyXG4gICAgc3BhbiB7XHJcbiAgICAgIGNvbG9yOiByZWQ7XHJcbiAgICB9XHJcbiAgYF1cclxuXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU3RhdHVzRGlzcGxheSB7XHJcbiAgQElucHV0KCkgc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c01zZyA9ICdJbml0aWFsaXplLi4uJztcclxuICBASW5wdXQoKSBzdGF0dXNXYWl0aW5nID1mYWxzZTtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXVwbG9hZHN0YXR1cycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbbW9kZV09XCJzcGlubmVyTW9kZVwiIFtjb2xvcl09XCJzdGF0dXNcIiBbZGlhbWV0ZXJdPVwiMzBcIiBbc3Ryb2tlV2lkdGhdPVwiNVwiIFt2YWx1ZV09XCJfdmFsdWVcIiBbbWF0VG9vbHRpcF09XCJ0b29sVGlwVGV4dFwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgZmxleDogMTtcclxuICAvKiBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OyAqL1xyXG4gICAgLypkaXNwbGF5OiBpbmxpbmU7ICovXHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gIH1gLGBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lcntcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIH1gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXBsb2FkU3RhdHVzIHtcclxuICBwcml2YXRlIF9hd2FpdE5ld1VwbG9hZD1mYWxzZTtcclxuICBzcGlubmVyTW9kZTpQcm9ncmVzc1NwaW5uZXJNb2RlID0gJ2RldGVybWluYXRlJztcclxuICBfc3RhdHVzITpzdHJpbmdcclxuICBfdmFsdWUgPSAxMDBcclxuICBkaXNwbGF5VmFsdWU6c3RyaW5nfG51bGw9bnVsbFxyXG4gIHRvb2xUaXBUZXh0OnN0cmluZz0nJ1xyXG5cclxuICBwcml2YXRlIF91cGRhdGVTcGlubmVyKCl7XHJcblxyXG4gICAgbGV0IHVwbE1zZztcclxuICAgIGlmICh0aGlzLl9hd2FpdE5ld1VwbG9hZCB8fCB0aGlzLl92YWx1ZSA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNwaW5uZXJNb2RlID0gJ2luZGV0ZXJtaW5hdGUnXHJcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlPScmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsnXHJcbiAgICAgIHVwbE1zZz0nUHJlcGFyaW5nIHVwbG9hZC4nXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNwaW5uZXJNb2RlID0gJ2RldGVybWluYXRlJ1xyXG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZT10aGlzLl92YWx1ZSsnJSdcclxuICAgICAgaWYodGhpcy5fdmFsdWU9PT0xMDApe1xyXG4gICAgICAgIHVwbE1zZyA9ICdVcGxvYWQgY29tcGxldGUnXHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICB1cGxNc2cgPSAnVXBsb2FkIHByb2dyZXNzOiAnICsgdGhpcy5kaXNwbGF5VmFsdWVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYodGhpcy5zdGF0dXM9PT0nd2Fybicpe1xyXG4gICAgICB1cGxNc2c9J1VwbG9hZCBlcnJvciBvY2N1cnJlZC4gUGxlYXNlIGNoZWNrIHlvdXIgbmV0d29yayBjb25uZWN0aW9uLiAnK3VwbE1zZ1xyXG4gICAgfVxyXG4gICAgdGhpcy50b29sVGlwVGV4dD11cGxNc2dcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVTcGlubmVyKClcclxuICB9O1xyXG5cclxuICBASW5wdXQoKSBzZXQgYXdhaXROZXdVcGxvYWQoYXdhaXROZXdVcGxvYWQ6Ym9vbGVhbil7XHJcbiAgICB0aGlzLl9hd2FpdE5ld1VwbG9hZD1hd2FpdE5ld1VwbG9hZFxyXG4gICAgdGhpcy5fdXBkYXRlU3Bpbm5lcigpXHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgc3RhdHVzKHN0YXR1czpzdHJpbmcpe1xyXG4gICAgdGhpcy5fc3RhdHVzPXN0YXR1c1xyXG4gICAgdGhpcy5fdXBkYXRlU3Bpbm5lcigpXHJcbiAgfVxyXG5cclxuICBnZXQgc3RhdHVzKCk6c3RyaW5ne1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1c1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9ncmVzc2Rpc3BsYXknLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cD57e3Byb2dyZXNzTXNnfX08L3A+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgZmxleDogMTtcclxuICAvKiBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OyAqL1xyXG4gICAgLypkaXNwbGF5OiBpbmxpbmU7ICovXHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICB9YF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzRGlzcGxheSB7XHJcbiAgcHJvZ3Jlc3NNc2cgPSAnW2l0ZW1jb2RlXSc7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFuc3BvcnRBY3Rpb25zIHtcclxuICBzdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIHN0b3BBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuICBuZXh0QWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgZndkTmV4dEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIHBhdXNlQWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgZndkQWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgYndkQWN0aW9uOiBBY3Rpb248dm9pZD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5zdGFydEFjdGlvbiA9IG5ldyBBY3Rpb24oJ1N0YXJ0Jyk7XHJcbiAgICB0aGlzLnN0b3BBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdG9wJyk7XHJcbiAgICB0aGlzLm5leHRBY3Rpb24gPSBuZXcgQWN0aW9uKCdOZXh0Jyk7XHJcbiAgICB0aGlzLnBhdXNlQWN0aW9uID0gbmV3IEFjdGlvbignUGF1c2UnKTtcclxuICAgIHRoaXMuZndkTmV4dEFjdGlvbiA9IG5ldyBBY3Rpb24oJ05leHQgcmVjb3JkaW5nJyk7XHJcbiAgICB0aGlzLmZ3ZEFjdGlvbiA9IG5ldyBBY3Rpb24oJ0ZvcndhcmQnKTtcclxuICAgIHRoaXMuYndkQWN0aW9uID0gbmV3IEFjdGlvbignQmFja3dhcmQnKTtcclxuXHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc3BydHJhbnNwb3J0JyxcclxuXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxidXR0b24gaWQ9XCJid2RCdG5cIiAqbmdJZj1cIm5hdmlnYXRpb25FbmFibGVkXCIgIChjbGljayk9XCJhY3Rpb25zLmJ3ZEFjdGlvbi5wZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwiYndkRGlzYWJsZWQoKVwiXHJcbiAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICA8bWF0LWljb24+Y2hldnJvbl9sZWZ0PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic3RhcnRTdG9wTmV4dFBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJzdGFydERpc2FibGVkKCkgJiYgc3RvcERpc2FibGVkKCkgJiYgbmV4dERpc2FibGVkKClcIiAgbWF0LXJhaXNlZC1idXR0b24+XHJcbiAgICAgIDxtYXQtaWNvbiBbc3R5bGUuY29sb3JdPVwic3RhcnRTdG9wTmV4dEljb25Db2xvcigpXCI+e3tzdGFydFN0b3BOZXh0SWNvbk5hbWUoKX19PC9tYXQtaWNvbj48bWF0LWljb24gKm5nSWY9XCIhbmV4dERpc2FibGVkKClcIiBbc3R5bGUuY29sb3JdPVwibmV4dERpc2FibGVkKCkgPyAnZ3JleScgOiAnYmxhY2snXCI+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuIGZ4U2hvdy54cz1cImZhbHNlXCI+e3tzdGFydFN0b3BOZXh0TmFtZSgpfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJwYXVzaW5nRW5hYmxlZFwiIChjbGljayk9XCJhY3Rpb25zLnBhdXNlQWN0aW9uLnBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJwYXVzZURpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbj5cclxuICAgICAgPG1hdC1pY29uPnBhdXNlPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4gZnhTaG93LnhzPVwiZmFsc2VcIj5QYXVzZTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImZ3ZE5leHRCdG5cIiAqbmdJZj1cIm5hdmlnYXRpb25FbmFibGVkXCIgZnhIaWRlLnhzIChjbGljayk9XCJhY3Rpb25zLmZ3ZE5leHRBY3Rpb24ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cImZ3ZE5leHREaXNhYmxlZCgpXCIgbWF0LXJhaXNlZC1idXR0b24+XHJcbiAgICAgIDxtYXQtaWNvbj5yZWRvPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImZ3ZEJ0blwiICpuZ0lmPVwibmF2aWdhdGlvbkVuYWJsZWRcIiAgKGNsaWNrKT1cImFjdGlvbnMuZndkQWN0aW9uLnBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJmd2REaXNhYmxlZCgpXCIgbWF0LXJhaXNlZC1idXR0b24+XHJcbiAgICAgIDxtYXQtaWNvbj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcbiAgICBmbGV4OiAyMDtcclxuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyO1xyXG4gICAgbWFyZ2luOiAwO1xyXG5cclxuICB9YCwgYFxyXG4gICAgZGl2IHtcclxuICAgICAgZGlzcGxheTogaW5saW5lO1xyXG4gICAgICBmbGV4OiAwO1xyXG4gICAgfWAsYFxyXG4gICAgIGJ1dHRvbiB7XHJcbiAgICAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcclxuICAgICB9YFxyXG4gIF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmFuc3BvcnRQYW5lbCB7XHJcblxyXG4gIEBJbnB1dCgpIHJlYWRvbmx5ITpib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFjdGlvbnMhOiBUcmFuc3BvcnRBY3Rpb25zO1xyXG4gIEBJbnB1dCgpIG5hdmlnYXRpb25FbmFibGVkPXRydWU7XHJcbiAgQElucHV0KCkgcGF1c2luZ0VuYWJsZWQ9dHJ1ZTtcclxuXHJcbiAgc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWUhOnN0cmluZztcclxuICBzdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWUhOnN0cmluZztcclxuXHJcbiAgc3RhcnREaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5hY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkXHJcbiAgfVxyXG5cclxuICBzdG9wRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZFxyXG4gIH1cclxuXHJcbiAgbmV4dERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMubmF2aWdhdGlvbkVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwYXVzZURpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkIHx8ICF0aGlzLnBhdXNpbmdFbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgZndkRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkIHx8ICF0aGlzLm5hdmlnYXRpb25FbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgZndkTmV4dERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLmZ3ZE5leHRBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMubmF2aWdhdGlvbkVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBid2REaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMubmF2aWdhdGlvbkVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAgIHN0YXJ0U3RvcE5leHROYW1lKCk6c3RyaW5ne1xyXG4gICAgICAgIGlmKCF0aGlzLm5leHREaXNhYmxlZCgpKXtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uTmFtZT0gXCJOZXh0XCJcclxuICAgICAgICB9ZWxzZSBpZighdGhpcy5zdGFydERpc2FibGVkKCkpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25OYW1lPVwiU3RhcnRcIlxyXG4gICAgICAgIH1lbHNlIGlmKCF0aGlzLnN0b3BEaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWUgPSBcIlN0b3BcIlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uTmFtZTtcclxuICAgIH1cclxuICBzdGFydFN0b3BOZXh0SWNvbk5hbWUoKTpzdHJpbmd7XHJcbiAgICAgIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbkljb25OYW1lPVwiZmliZXJfbWFudWFsX3JlY29yZFwiXHJcbiAgICAgIH1lbHNlIGlmKCF0aGlzLnN0b3BEaXNhYmxlZCgpKXtcclxuICAgICAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbkljb25OYW1lPVwic3RvcFwiXHJcbiAgICAgIH1lbHNlIGlmKCF0aGlzLm5leHREaXNhYmxlZCgpKXtcclxuICAgICAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbkljb25OYW1lPVwic3RvcFwiXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbkljb25OYW1lXHJcbiAgfVxyXG4gICAgc3RhcnRTdG9wTmV4dEljb25Db2xvcigpOnN0cmluZ3tcclxuICAgICAgICBpZighdGhpcy5zdGFydERpc2FibGVkKCkpe1xyXG4gICAgICAgICAgICByZXR1cm4gXCJyZWRcIlxyXG4gICAgICAgIH1lbHNlIGlmKCF0aGlzLnN0b3BEaXNhYmxlZCgpIHx8ICF0aGlzLm5leHREaXNhYmxlZCgpKXtcclxuICAgICAgICAgICAgcmV0dXJuIFwieWVsbG93XCJcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuIFwiZ3JleVwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgc3RhcnRTdG9wTmV4dFBlcmZvcm0oKXtcclxuICAgIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgIHRoaXMuYWN0aW9ucy5zdGFydEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9ZWxzZSBpZighdGhpcy5zdG9wRGlzYWJsZWQoKSl7XHJcbiAgICAgIHRoaXMuYWN0aW9ucy5zdG9wQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1lbHNlIGlmKCF0aGlzLm5leHREaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy5hY3Rpb25zLm5leHRBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXdha2Vsb2NraW5kaWNhdG9yJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiX3NjcmVlbkxvY2tlZFwiPnNjcmVlbl9sb2NrX3BvcnRyYWl0PC9tYXQtaWNvbj5cclxuICBgLFxyXG4gIHN0eWxlczogW11cclxufSlcclxuZXhwb3J0IGNsYXNzIFdha2VMb2NrSW5kaWNhdG9yIHtcclxuICBfc2NyZWVuTG9ja2VkPWZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzY3JlZW5Mb2NrZWQoc2NyZWVuTG9jazpib29sZWFuKXtcclxuICAgIHRoaXMuX3NjcmVlbkxvY2tlZD1zY3JlZW5Mb2NrO1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3InLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cInJlYWR5U3RhdGVUb29sVGlwXCI+e3tob3VyR2xhc3NJY29uTmFtZX19PC9tYXQtaWNvbj5cclxuICBgLFxyXG4gIHN0eWxlczogW11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlYWR5U3RhdGVJbmRpY2F0b3Ige1xyXG4gIF9yZWFkeT10cnVlO1xyXG4gIGhvdXJHbGFzc0ljb25OYW1lPSdob3VyZ2xhc3NfZW1wdHknXHJcbiAgcmVhZHlTdGF0ZVRvb2xUaXA6c3RyaW5nPScnXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgQElucHV0KCkgc2V0IHJlYWR5KHJlYWR5OmJvb2xlYW4pe1xyXG4gICAgdGhpcy5fcmVhZHk9cmVhZHlcclxuICAgIHRoaXMuaG91ckdsYXNzSWNvbk5hbWU9dGhpcy5fcmVhZHk/J2hvdXJnbGFzc19lbXB0eSc6J2hvdXJnbGFzc19mdWxsJ1xyXG4gICAgdGhpcy5yZWFkeVN0YXRlVG9vbFRpcD10aGlzLl9yZWFkeT8nQXVkaW8gcHJvY2Vzc2luZyBhbmQgdXBsb2FkIGRvbmUuIFlvdSBjYW4gbGVhdmUgdGhlIHBhZ2Ugd2l0aG91dCBkYXRhIGxvc3MuJzonUGxlYXNlIHdhaXQgdW50aWwgYXVkaW8gcHJvY2Vzc2luZyBhbmQgdXBsb2FkIGhhdmUgZmluaXNoZWQuIFBsZWFzZSBkbyBub3QgbGVhdmUgdGhlIHBhZ2UuJ1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlYWR5KCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLl9yZWFkeVxyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcmNvbnRyb2xwYW5lbCcsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGZ4SGlkZS54cyAgZnhMYXlvdXQ9XCJyb3dcIiA+XHJcbiAgICAgPGFwcC1zcHJzdGF0dXNkaXNwbGF5IGZ4RmxleD1cIjAgMCAwXCIgW3N0YXR1c01zZ109XCJzdGF0dXNNc2dcIiBbc3RhdHVzQWxlcnRUeXBlXT1cInN0YXR1c0FsZXJ0VHlwZVwiIFtzdGF0dXNXYWl0aW5nXT1cInN0YXR1c1dhaXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgPGFwcC1zcHJ0cmFuc3BvcnQgZnhGbGV4PVwiMTAgMCAwXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2FjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiIFtuYXZpZ2F0aW9uRW5hYmxlZF09XCJuYXZpZ2F0aW9uRW5hYmxlZFwiPjwvYXBwLXNwcnRyYW5zcG9ydD5cclxuICAgICAgPGFwcC11cGxvYWRzdGF0dXMgZnhGbGV4PVwiMCAwIDBcIiAqbmdJZj1cImVuYWJsZVVwbG9hZFJlY29yZGluZ3NcIiBbdmFsdWVdPVwidXBsb2FkUHJvZ3Jlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJ1cGxvYWRTdGF0dXNcIiBbYXdhaXROZXdVcGxvYWRdPVwicHJvY2Vzc2luZ1wiPjwvYXBwLXVwbG9hZHN0YXR1cz5cclxuICAgICAgPGFwcC1yZWFkeXN0YXRlaW5kaWNhdG9yIFtyZWFkeV09XCJfcmVhZHlcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGZ4U2hvdy54cyBmeEhpZGUgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4RmxleEZpbGw+XHJcbiAgICAgICA8YXBwLXNwcnN0YXR1c2Rpc3BsYXkgZnhGbGV4PVwiMTAgMCAwXCIgZnhGbGV4QWxpZ249XCJsZWZ0XCIgW3N0YXR1c01zZ109XCJzdGF0dXNNc2dcIiBbc3RhdHVzQWxlcnRUeXBlXT1cInN0YXR1c0FsZXJ0VHlwZVwiIFtzdGF0dXNXYWl0aW5nXT1cInN0YXR1c1dhaXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW4teHNcIj48L2FwcC1zcHJzdGF0dXNkaXNwbGF5PlxyXG4gICAgICAgPGFwcC11cGxvYWRzdGF0dXMgZnhGbGV4PVwiMCAwIDBcIiAqbmdJZj1cImVuYWJsZVVwbG9hZFJlY29yZGluZ3NcIiBbdmFsdWVdPVwidXBsb2FkUHJvZ3Jlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICAgIDxhcHAtcmVhZHlzdGF0ZWluZGljYXRvciBbcmVhZHldPVwiX3JlYWR5XCI+PC9hcHAtcmVhZHlzdGF0ZWluZGljYXRvcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxhcHAtc3BydHJhbnNwb3J0IFtyZWFkb25seV09XCJyZWFkb25seVwiIFthY3Rpb25zXT1cInRyYW5zcG9ydEFjdGlvbnNcIiBbbmF2aWdhdGlvbkVuYWJsZWRdPVwibmF2aWdhdGlvbkVuYWJsZWRcIj48L2FwcC1zcHJ0cmFuc3BvcnQ+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgZGl2IHtcclxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgbWluLWhlaWdodDogbWluLWNvbnRlbnQ7IC8qIGltcG9ydGFudCAqL1xyXG4gIH1gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udHJvbFBhbmVsIHtcclxuICBAVmlld0NoaWxkKFN0YXR1c0Rpc3BsYXksIHsgc3RhdGljOiB0cnVlIH0pIHN0YXR1c0Rpc3BsYXkhOiBTdGF0dXNEaXNwbGF5O1xyXG4gIEBWaWV3Q2hpbGQoVHJhbnNwb3J0UGFuZWwsIHsgc3RhdGljOiB0cnVlIH0pIHRyYW5zcG9ydFBhbmVsITogVHJhbnNwb3J0UGFuZWw7XHJcblxyXG4gIEBJbnB1dCgpIHJlYWRvbmx5ITpib29sZWFuXHJcbiAgQElucHV0KCkgdHJhbnNwb3J0QWN0aW9ucyE6IFRyYW5zcG9ydEFjdGlvbnNcclxuICBASW5wdXQoKSBwcm9jZXNzaW5nPWZhbHNlXHJcbiAgQElucHV0KCkgc3RhdHVzTXNnITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c0FsZXJ0VHlwZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGF0dXNXYWl0aW5nITogYm9vbGVhbjtcclxuICBASW5wdXQoKSB1cGxvYWRTdGF0dXMhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdXBsb2FkUHJvZ3Jlc3MhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgY3VycmVudFJlY29yZGluZzogQXVkaW9CdWZmZXJ8IG51bGx8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBlbmFibGVVcGxvYWRSZWNvcmRpbmdzITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBuYXZpZ2F0aW9uRW5hYmxlZD10cnVlO1xyXG5cclxuICBfcmVhZHk9dHJ1ZVxyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2cpIHtcclxuXHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgcmVhZHkocmVhZHk6Ym9vbGVhbil7XHJcbiAgICB0aGlzLl9yZWFkeT1yZWFkeVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJlYWR5KCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLl9yZWFkeVxyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
407
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbHBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vY29udHJvbHBhbmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQzVCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7QUFzQ2xFLE1BQU0sT0FBTyxhQUFhO0lBakMxQjtRQWtDVyxvQkFBZSxHQUFHLE1BQU0sQ0FBQztRQUN6QixjQUFTLEdBQUcsZUFBZSxDQUFDO1FBQzVCLGtCQUFhLEdBQUUsS0FBSyxDQUFDO0tBQy9COzsyR0FKWSxhQUFhOytGQUFiLGFBQWEsb0tBN0JkOzs7OztHQUtUOzRGQXdCVSxhQUFhO2tCQWpDekIsU0FBUzsrQkFFRSxzQkFBc0IsWUFFdEI7Ozs7O0dBS1Q7OEJBeUJRLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLOztBQWtCUixNQUFNLE9BQU8sWUFBWTtJQWR6QjtRQWVVLG9CQUFlLEdBQUMsS0FBSyxDQUFDO1FBQzlCLGdCQUFXLEdBQXVCLGFBQWEsQ0FBQztRQUVoRCxpQkFBWSxHQUFjLFNBQVMsQ0FBQztRQUNwQyxXQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2IsaUJBQVksR0FBYSxJQUFJLENBQUM7UUFDOUIsZ0JBQVcsR0FBUSxFQUFFLENBQUM7S0FtRHZCO0lBakRTLGNBQWM7UUFFcEIsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVB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YyxxSUE4R2QsbUJBQW1COzRGQW1EbkIsWUFBWTtrQkFqQ3hCLFNBQVM7K0JBRUUscUJBQXFCLFlBRXJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVDtpSUFVMkMsYUFBYTtzQkFBeEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNHLGNBQWM7c0JBQTFELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFbEMsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUU8sS0FBSztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aW9ufSBmcm9tICcuLi8uLi9hY3Rpb24vYWN0aW9uJ1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCwgVmlld0NoaWxkLCBJbnB1dFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgeyBNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NwaW5uZXJNb2RlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lclwiO1xyXG5pbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XHJcbmltcG9ydCB7UmVzcG9uc2l2ZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL3VpL3Jlc3BvbnNpdmVfY29tcG9uZW50XCI7XHJcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc3Byc3RhdHVzZGlzcGxheScsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cCBtYXRUb29sdGlwPVwiU3RhdHVzXCI+XHJcbiAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciAqbmdJZj1cInN0YXR1c1dhaXRpbmdcIiBjb2xvcj1cImJsYWNrXCIgIG1vZGU9XCJpbmRldGVybWluYXRlXCIgW2RpYW1ldGVyXT1cIjMwXCIgW3N0cm9rZVdpZHRoXT1cIjVcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPjxtYXQtaWNvbiAqbmdJZj1cInN0YXR1c0FsZXJ0VHlwZT09PSdlcnJvcidcIiBzdHlsZT1cImNvbG9yOnJlZFwiPnJlcG9ydF9wcm9ibGVtPC9tYXQtaWNvbj5cclxuICAgICAge3tzdGF0dXNNc2d9fVxyXG4gICAgPC9wPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGRpc3BsYXk6IGlubGluZTtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICBmb250LXNpemU6IHNtYWxsZXI7XHJcbiAgfWAsIGBcclxuICAgIHAge1xyXG4gICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgIHdoaXRlLXNwYWNlOm5vd3JhcDtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIG1hdC1wcm9ncmVzcy1zcGlubmVyIHtcclxuICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB9XHJcbiAgYCwgYFxyXG4gICAgc3BhbiB7XHJcbiAgICAgIGNvbG9yOiByZWQ7XHJcbiAgICB9XHJcbiAgYF1cclxuXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU3RhdHVzRGlzcGxheSB7XHJcbiAgQElucHV0KCkgc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c01zZyA9ICdJbml0aWFsaXplLi4uJztcclxuICBASW5wdXQoKSBzdGF0dXNXYWl0aW5nID1mYWxzZTtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXVwbG9hZHN0YXR1cycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbbW9kZV09XCJzcGlubmVyTW9kZVwiIFtjb2xvcl09XCJzdGF0dXNcIiBbZGlhbWV0ZXJdPVwiMzBcIiBbc3Ryb2tlV2lkdGhdPVwiNVwiIFt2YWx1ZV09XCJfdmFsdWVcIiBbbWF0VG9vbHRpcF09XCJ0b29sVGlwVGV4dFwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgZmxleDogMTtcclxuICAvKiBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OyAqL1xyXG4gICAgLypkaXNwbGF5OiBpbmxpbmU7ICovXHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gIH1gLGBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lcntcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIH1gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXBsb2FkU3RhdHVzIHtcclxuICBwcml2YXRlIF9hd2FpdE5ld1VwbG9hZD1mYWxzZTtcclxuICBzcGlubmVyTW9kZTpQcm9ncmVzc1NwaW5uZXJNb2RlID0gJ2RldGVybWluYXRlJztcclxuICBfc3RhdHVzITpzdHJpbmc7XHJcbiAgX2NvbG9yU3RhdHVzOlRoZW1lUGFsZXR0ZT0ncHJpbWFyeSc7XHJcbiAgX3ZhbHVlID0gMTAwO1xyXG4gIGRpc3BsYXlWYWx1ZTpzdHJpbmd8bnVsbD1udWxsO1xyXG4gIHRvb2xUaXBUZXh0OnN0cmluZz0nJztcclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlU3Bpbm5lcigpe1xyXG5cclxuICAgIGxldCB1cGxNc2c7XHJcbiAgICBpZiAodGhpcy5fYXdhaXROZXdVcGxvYWQgfHwgdGhpcy5fdmFsdWUgPT09IDApIHtcclxuICAgICAgdGhpcy5zcGlubmVyTW9kZSA9ICdpbmRldGVybWluYXRlJ1xyXG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZT0nJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7J1xyXG4gICAgICB1cGxNc2c9J1ByZXBhcmluZyB1cGxvYWQuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zcGlubmVyTW9kZSA9ICdkZXRlcm1pbmF0ZSdcclxuICAgICAgdGhpcy5kaXNwbGF5VmFsdWU9dGhpcy5fdmFsdWUrJyUnXHJcbiAgICAgIGlmKHRoaXMuX3ZhbHVlPT09MTAwKXtcclxuICAgICAgICB1cGxNc2cgPSAnVXBsb2FkIGNvbXBsZXRlJ1xyXG4gICAgICB9ZWxzZSB7XHJcbiAgICAgICAgdXBsTXNnID0gJ1VwbG9hZCBwcm9ncmVzczogJyArIHRoaXMuZGlzcGxheVZhbHVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHRoaXMuc3RhdHVzPT09J3dhcm4nKXtcclxuICAgICAgdXBsTXNnPSdVcGxvYWQgZXJyb3Igb2NjdXJyZWQuIFBsZWFzZSBjaGVjayB5b3VyIG5ldHdvcmsgY29ubmVjdGlvbi4gJyt1cGxNc2dcclxuICAgIH1cclxuICAgIHRoaXMudG9vbFRpcFRleHQ9dXBsTXNnXHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlU3Bpbm5lcigpXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgc2V0IGF3YWl0TmV3VXBsb2FkKGF3YWl0TmV3VXBsb2FkOmJvb2xlYW4pe1xyXG4gICAgdGhpcy5fYXdhaXROZXdVcGxvYWQ9YXdhaXROZXdVcGxvYWRcclxuICAgIHRoaXMuX3VwZGF0ZVNwaW5uZXIoKVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHN0YXR1cyhzdGF0dXM6c3RyaW5nKSB7XHJcbiAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICBpZiAoJ2FjY2VudCcgPT09IHN0YXR1cykge1xyXG4gICAgICB0aGlzLl9jb2xvclN0YXR1cyA9ICdhY2NlbnQnO1xyXG4gICAgfSBlbHNlIGlmICgnd2FybicgPT09IHN0YXR1cykge1xyXG4gICAgICB0aGlzLl9jb2xvclN0YXR1cyA9ICd3YXJuJztcclxuICAgIH0gZWxzZXtcclxuICAgICAgdGhpcy5fY29sb3JTdGF0dXMgPSAncHJpbWFyeSc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVTcGlubmVyKClcclxuICB9XHJcblxyXG4gIGdldCBzdGF0dXMoKTpzdHJpbmd7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzXHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnByb2dyZXNzZGlzcGxheScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxwPnt7cHJvZ3Jlc3NNc2d9fTwvcD5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcbiAgICBmbGV4OiAxO1xyXG4gIC8qIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7ICovXHJcbiAgICAvKmRpc3BsYXk6IGlubGluZTsgKi9cclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gIH1gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NEaXNwbGF5IHtcclxuICBwcm9ncmVzc01zZyA9ICdbaXRlbWNvZGVdJztcclxufVxyXG5cclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRyYW5zcG9ydEFjdGlvbnMge1xyXG4gIHN0YXJ0QWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgc3RvcEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIG5leHRBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuICBmd2ROZXh0QWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgcGF1c2VBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuICBmd2RBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuICBid2RBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnN0YXJ0QWN0aW9uID0gbmV3IEFjdGlvbignU3RhcnQnKTtcclxuICAgIHRoaXMuc3RvcEFjdGlvbiA9IG5ldyBBY3Rpb24oJ1N0b3AnKTtcclxuICAgIHRoaXMubmV4dEFjdGlvbiA9IG5ldyBBY3Rpb24oJ05leHQnKTtcclxuICAgIHRoaXMucGF1c2VBY3Rpb24gPSBuZXcgQWN0aW9uKCdQYXVzZScpO1xyXG4gICAgdGhpcy5md2ROZXh0QWN0aW9uID0gbmV3IEFjdGlvbignTmV4dCByZWNvcmRpbmcnKTtcclxuICAgIHRoaXMuZndkQWN0aW9uID0gbmV3IEFjdGlvbignRm9yd2FyZCcpO1xyXG4gICAgdGhpcy5id2RBY3Rpb24gPSBuZXcgQWN0aW9uKCdCYWNrd2FyZCcpO1xyXG5cclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJ0cmFuc3BvcnQnLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGJ1dHRvbiBpZD1cImJ3ZEJ0blwiICpuZ0lmPVwibmF2aWdhdGlvbkVuYWJsZWRcIiAgKGNsaWNrKT1cImFjdGlvbnMuYndkQWN0aW9uLnBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJid2REaXNhYmxlZCgpXCJcclxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b24+XHJcbiAgICAgIDxtYXQtaWNvbj5jaGV2cm9uX2xlZnQ8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJzdGFydFN0b3BOZXh0UGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cInN0YXJ0RGlzYWJsZWQoKSAmJiBzdG9wRGlzYWJsZWQoKSAmJiBuZXh0RGlzYWJsZWQoKVwiICBtYXQtcmFpc2VkLWJ1dHRvbj5cclxuICAgICAgPG1hdC1pY29uIFtzdHlsZS5jb2xvcl09XCJzdGFydFN0b3BOZXh0SWNvbkNvbG9yKClcIj57e3N0YXJ0U3RvcE5leHRJY29uTmFtZSgpfX08L21hdC1pY29uPjxtYXQtaWNvbiAqbmdJZj1cIiFuZXh0RGlzYWJsZWQoKVwiIFtzdHlsZS5jb2xvcl09XCJuZXh0RGlzYWJsZWQoKSA/ICdncmV5JyA6ICdibGFjaydcIj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhc2NyZWVuWHNcIj57e3N0YXJ0U3RvcE5leHROYW1lKCl9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cInBhdXNpbmdFbmFibGVkXCIgKGNsaWNrKT1cImFjdGlvbnMucGF1c2VBY3Rpb24ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cInBhdXNlRGlzYWJsZWQoKVwiIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICA8bWF0LWljb24+cGF1c2U8L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFzY3JlZW5Yc1wiPlBhdXNlPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZndkTmV4dEJ0blwiICpuZ0lmPVwibmF2aWdhdGlvbkVuYWJsZWQgJiYgIXNjcmVlblhzXCIgKGNsaWNrKT1cImFjdGlvbnMuZndkTmV4dEFjdGlvbi5wZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwiZndkTmV4dERpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbj5cclxuICAgICAgPG1hdC1pY29uPnJlZG88L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZndkQnRuXCIgKm5nSWY9XCJuYXZpZ2F0aW9uRW5hYmxlZFwiICAoY2xpY2spPVwiYWN0aW9ucy5md2RBY3Rpb24ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cImZ3ZERpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbj5cclxuICAgICAgPG1hdC1pY29uPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDIwO1xyXG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDA7XHJcblxyXG4gIH1gLCBgXHJcbiAgICBkaXYge1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmU7XHJcbiAgICAgIGZsZXg6IDA7XHJcbiAgICB9YCxgXHJcbiAgICAgYnV0dG9uIHtcclxuICAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xyXG4gICAgIH1gXHJcbiAgXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIFRyYW5zcG9ydFBhbmVsIGV4dGVuZHMgUmVzcG9uc2l2ZUNvbXBvbmVudHtcclxuXHJcbiAgQElucHV0KCkgcmVhZG9ubHkhOmJvb2xlYW47XHJcbiAgQElucHV0KCkgYWN0aW9ucyE6IFRyYW5zcG9ydEFjdGlvbnM7XHJcbiAgQElucHV0KCkgbmF2aWdhdGlvbkVuYWJsZWQ9dHJ1ZTtcclxuICBASW5wdXQoKSBwYXVzaW5nRW5hYmxlZD10cnVlO1xyXG5cclxuICBzdGFydFN0b3BOZXh0QnV0dG9uTmFtZSE6c3RyaW5nO1xyXG4gIHN0YXJ0U3RvcE5leHRCdXR0b25JY29uTmFtZSE6c3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyKSB7XHJcbiAgICAgIHN1cGVyKGJyZWFrcG9pbnRPYnNlcnZlcik7XHJcbiAgICB9XHJcblxyXG4gIHN0YXJ0RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuYWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZFxyXG4gIH1cclxuXHJcbiAgc3RvcERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWRcclxuICB9XHJcblxyXG4gIG5leHREaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkIHx8ICF0aGlzLm5hdmlnYXRpb25FbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgcGF1c2VEaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucy5wYXVzZUFjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5wYXVzaW5nRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIGZ3ZERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLmZ3ZEFjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIGZ3ZE5leHREaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucy5md2ROZXh0QWN0aW9uLmRpc2FibGVkIHx8ICF0aGlzLm5hdmlnYXRpb25FbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgYndkRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMuYndkQWN0aW9uLmRpc2FibGVkIHx8ICF0aGlzLm5hdmlnYXRpb25FbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgICBzdGFydFN0b3BOZXh0TmFtZSgpOnN0cmluZ3tcclxuICAgICAgICBpZighdGhpcy5uZXh0RGlzYWJsZWQoKSl7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWU9IFwiTmV4dFwiXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uTmFtZT1cIlN0YXJ0XCJcclxuICAgICAgICB9ZWxzZSBpZighdGhpcy5zdG9wRGlzYWJsZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25OYW1lID0gXCJTdG9wXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWU7XHJcbiAgICB9XHJcbiAgc3RhcnRTdG9wTmV4dEljb25OYW1lKCk6c3RyaW5ne1xyXG4gICAgICBpZighdGhpcy5zdGFydERpc2FibGVkKCkpe1xyXG4gICAgICAgICB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25JY29uTmFtZT1cImZpYmVyX21hbnVhbF9yZWNvcmRcIlxyXG4gICAgICB9ZWxzZSBpZighdGhpcy5zdG9wRGlzYWJsZWQoKSl7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25JY29uTmFtZT1cInN0b3BcIlxyXG4gICAgICB9ZWxzZSBpZighdGhpcy5uZXh0RGlzYWJsZWQoKSl7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25JY29uTmFtZT1cInN0b3BcIlxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25JY29uTmFtZVxyXG4gIH1cclxuICAgIHN0YXJ0U3RvcE5leHRJY29uQ29sb3IoKTpzdHJpbmd7XHJcbiAgICAgICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmVkXCJcclxuICAgICAgICB9ZWxzZSBpZighdGhpcy5zdG9wRGlzYWJsZWQoKSB8fCAhdGhpcy5uZXh0RGlzYWJsZWQoKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBcInllbGxvd1wiXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiBcImdyZXlcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gIHN0YXJ0U3RvcE5leHRQZXJmb3JtKCl7XHJcbiAgICBpZighdGhpcy5zdGFydERpc2FibGVkKCkpe1xyXG4gICAgICB0aGlzLmFjdGlvbnMuc3RhcnRBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfWVsc2UgaWYoIXRoaXMuc3RvcERpc2FibGVkKCkpe1xyXG4gICAgICB0aGlzLmFjdGlvbnMuc3RvcEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9ZWxzZSBpZighdGhpcy5uZXh0RGlzYWJsZWQoKSl7XHJcbiAgICAgIHRoaXMuYWN0aW9ucy5uZXh0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC13YWtlbG9ja2luZGljYXRvcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtaWNvbiAqbmdJZj1cIl9zY3JlZW5Mb2NrZWRcIj5zY3JlZW5fbG9ja19wb3J0cmFpdDwvbWF0LWljb24+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXYWtlTG9ja0luZGljYXRvciB7XHJcbiAgX3NjcmVlbkxvY2tlZD1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBASW5wdXQoKSBzZXQgc2NyZWVuTG9ja2VkKHNjcmVlbkxvY2s6Ym9vbGVhbil7XHJcbiAgICB0aGlzLl9zY3JlZW5Mb2NrZWQ9c2NyZWVuTG9jaztcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yJyxcclxuXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtaWNvbiBbbWF0VG9vbHRpcF09XCJyZWFkeVN0YXRlVG9vbFRpcFwiPnt7aG91ckdsYXNzSWNvbk5hbWV9fTwvbWF0LWljb24+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWFkeVN0YXRlSW5kaWNhdG9yIHtcclxuICBfcmVhZHk9dHJ1ZTtcclxuICBob3VyR2xhc3NJY29uTmFtZT0naG91cmdsYXNzX2VtcHR5J1xyXG4gIHJlYWR5U3RhdGVUb29sVGlwOnN0cmluZz0nJ1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIEBJbnB1dCgpIHNldCByZWFkeShyZWFkeTpib29sZWFuKXtcclxuICAgIHRoaXMuX3JlYWR5PXJlYWR5XHJcbiAgICB0aGlzLmhvdXJHbGFzc0ljb25OYW1lPXRoaXMuX3JlYWR5Pydob3VyZ2xhc3NfZW1wdHknOidob3VyZ2xhc3NfZnVsbCdcclxuICAgIHRoaXMucmVhZHlTdGF0ZVRvb2xUaXA9dGhpcy5fcmVhZHk/J0F1ZGlvIHByb2Nlc3NpbmcgYW5kIHVwbG9hZCBkb25lLiBZb3UgY2FuIGxlYXZlIHRoZSBwYWdlIHdpdGhvdXQgZGF0YSBsb3NzLic6J1BsZWFzZSB3YWl0IHVudGlsIGF1ZGlvIHByb2Nlc3NpbmcgYW5kIHVwbG9hZCBoYXZlIGZpbmlzaGVkLiBQbGVhc2UgZG8gbm90IGxlYXZlIHRoZSBwYWdlLidcclxuICB9XHJcblxyXG4gIGdldCByZWFkeSgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5fcmVhZHlcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJjb250cm9scGFuZWwnLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiAqbmdJZj1cIiFzY3JlZW5Yc1wiIHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IHJvd1wiID5cclxuICAgICA8YXBwLXNwcnN0YXR1c2Rpc3BsYXkgc3R5bGU9XCJmbGV4OjAgMCAwXCIgW3N0YXR1c01zZ109XCJzdGF0dXNNc2dcIiBbc3RhdHVzQWxlcnRUeXBlXT1cInN0YXR1c0FsZXJ0VHlwZVwiIFtzdGF0dXNXYWl0aW5nXT1cInN0YXR1c1dhaXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgPGFwcC1zcHJ0cmFuc3BvcnQgc3R5bGU9XCJmbGV4OjEwIDAgMFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFthY3Rpb25zXT1cInRyYW5zcG9ydEFjdGlvbnNcIiBbbmF2aWdhdGlvbkVuYWJsZWRdPVwibmF2aWdhdGlvbkVuYWJsZWRcIj48L2FwcC1zcHJ0cmFuc3BvcnQ+XHJcbiAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIHN0eWxlPVwiZmxleDowIDAgMFwiICpuZ0lmPVwiZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgW3JlYWR5XT1cIl9yZWFkeVwiPjwvYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3I+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJzY3JlZW5Yc1wic3R5bGU9XCJmbGV4LWRpcmVjdGlvbjogY29sdW1uXCIgID5cclxuICAgICAgPGRpdiBzdHlsZT1cImZsZXgtZGlyZWN0aW9uOiByb3dcIiBjbGFzcz1cImZsZXhGaWxsXCIgPlxyXG4gICAgICAgPGFwcC1zcHJzdGF0dXNkaXNwbGF5IHN0eWxlPVwiZmxleDoxMCAwIDA7ZmxleC1hbGlnbjpsZWZ0XCIgW3N0YXR1c01zZ109XCJzdGF0dXNNc2dcIiBbc3RhdHVzQWxlcnRUeXBlXT1cInN0YXR1c0FsZXJ0VHlwZVwiIFtzdGF0dXNXYWl0aW5nXT1cInN0YXR1c1dhaXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW4teHNcIj48L2FwcC1zcHJzdGF0dXNkaXNwbGF5PlxyXG4gICAgICAgPGFwcC11cGxvYWRzdGF0dXMgc3R5bGU9XCJmbGV4OjAgMCAwXCIgKm5nSWY9XCJlbmFibGVVcGxvYWRSZWNvcmRpbmdzXCIgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJ1cGxvYWRTdGF0dXNcIiBbYXdhaXROZXdVcGxvYWRdPVwicHJvY2Vzc2luZ1wiPjwvYXBwLXVwbG9hZHN0YXR1cz5cclxuICAgICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgW3JlYWR5XT1cIl9yZWFkeVwiPjwvYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YXBwLXNwcnRyYW5zcG9ydCBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbYWN0aW9uc109XCJ0cmFuc3BvcnRBY3Rpb25zXCIgW25hdmlnYXRpb25FbmFibGVkXT1cIm5hdmlnYXRpb25FbmFibGVkXCI+PC9hcHAtc3BydHJhbnNwb3J0PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYGRpdiB7XHJcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMjBweDtcclxuICAgIG1pbi1oZWlnaHQ6IG1pbi1jb250ZW50OyAvKiBpbXBvcnRhbnQgKi9cclxuICB9YF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnRyb2xQYW5lbCBleHRlbmRzIFJlc3BvbnNpdmVDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoU3RhdHVzRGlzcGxheSwgeyBzdGF0aWM6IHRydWUgfSkgc3RhdHVzRGlzcGxheSE6IFN0YXR1c0Rpc3BsYXk7XHJcbiAgQFZpZXdDaGlsZChUcmFuc3BvcnRQYW5lbCwgeyBzdGF0aWM6IHRydWUgfSkgdHJhbnNwb3J0UGFuZWwhOiBUcmFuc3BvcnRQYW5lbDtcclxuXHJcbiAgQElucHV0KCkgcmVhZG9ubHkhOmJvb2xlYW5cclxuICBASW5wdXQoKSB0cmFuc3BvcnRBY3Rpb25zITogVHJhbnNwb3J0QWN0aW9uc1xyXG4gIEBJbnB1dCgpIHByb2Nlc3Npbmc9ZmFsc2VcclxuICBASW5wdXQoKSBzdGF0dXNNc2chOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3RhdHVzQWxlcnRUeXBlITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c1dhaXRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHVwbG9hZFN0YXR1cyE6IHN0cmluZztcclxuICBASW5wdXQoKSB1cGxvYWRQcm9ncmVzcyE6IG51bWJlcjtcclxuICBASW5wdXQoKSBjdXJyZW50UmVjb3JkaW5nOiBBdWRpb0J1ZmZlcnwgbnVsbHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGVuYWJsZVVwbG9hZFJlY29yZGluZ3MhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG5hdmlnYXRpb25FbmFibGVkPXRydWU7XHJcblxyXG4gIF9yZWFkeT10cnVlXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBicG86QnJlYWtwb2ludE9ic2VydmVyLHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZykge1xyXG4gICAgc3VwZXIoYnBvKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCByZWFkeShyZWFkeTpib29sZWFuKXtcclxuICAgIHRoaXMuX3JlYWR5PXJlYWR5XHJcbiAgfVxyXG5cclxuICBnZXQgcmVhZHkoKTpib29sZWFue1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlYWR5XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbiJdfQ==
|