bways-report 0.1.9 → 0.2.0
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/README.md +463 -316
- package/esm2022/lib/core/config/bways-report-config.mjs +29 -32
- package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
- package/esm2022/lib/core/services/report-api-execution.service.mjs +33 -11
- package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
- package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
- package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
- package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
- package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +8 -1
- package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +5 -2
- package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
- package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
- package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
- package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
- package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +4 -37
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +4 -50
- package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
- package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
- package/esm2022/lib/data-access/adapters/index.mjs +1 -1
- package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
- package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
- package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
- package/esm2022/lib/data-access/contracts/index.mjs +1 -1
- package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +50 -40
- package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +546 -119
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +12 -6
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +9 -8
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +9 -4
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
- package/esm2022/lib/features/designer/designer.component.mjs +100 -67
- package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
- package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
- package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
- package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
- package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
- package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
- package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +5 -3
- package/esm2022/lib/features/routing/report-routes.mjs +6 -6
- package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
- package/esm2022/lib/features/runtime/report-execution.service.mjs +18 -5
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +4 -2
- package/esm2022/lib/features/runtime/report-runtime.component.mjs +94 -71
- package/esm2022/lib/features/runtime/rpt-report.component.mjs +49 -41
- package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +13 -1
- package/esm2022/lib/provide-reporting.mjs +9 -29
- package/fesm2022/bways-report.mjs +1789 -1041
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/config/bways-report-config.d.ts +14 -5
- package/lib/core/models/report-datasource.model.d.ts +5 -0
- package/lib/core/services/report-session-context.service.d.ts +9 -0
- package/lib/core/tokens/designer-config.token.d.ts +4 -0
- package/lib/core/tokens/reporting-config.token.d.ts +4 -0
- package/lib/core/utils/report-endpoint.util.d.ts +12 -0
- package/lib/core/utils/report-request-scope.d.ts +14 -0
- package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
- package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
- package/lib/data-access/adapters/endpoint-tokens.d.ts +4 -0
- package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
- package/lib/data-access/adapters/http-lookup.adapter.d.ts +1 -3
- package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
- package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
- package/lib/data-access/adapters/index.d.ts +1 -1
- package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
- package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
- package/lib/data-access/adapters/session-headers.d.ts +3 -0
- package/lib/data-access/contracts/index.d.ts +1 -0
- package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
- package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -3
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +1 -0
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +1 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
- package/lib/features/designer/designer.component.d.ts +15 -2
- package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
- package/lib/features/designer/services/designer-config.service.d.ts +13 -0
- package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
- package/lib/features/persistence/services/report-store.service.d.ts +15 -1
- package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
- package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
- package/lib/features/runtime/report-execution.service.d.ts +3 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +1 -0
- package/lib/features/runtime/report-runtime.component.d.ts +1 -0
- package/lib/features/runtime/rpt-report.component.d.ts +5 -0
- package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
- package/package.json +2 -1
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReportRequestScope } from '../../core/utils/report-request-scope';
|
|
2
|
+
import { normalizeReportDefinition } from '../persistence/services/schema-validator.service';
|
|
3
|
+
import { map } from 'rxjs';
|
|
4
|
+
import { DesignerConfigService } from './services/designer-config.service';
|
|
5
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, computed, effect, HostListener, Input, Injector, inject, input, output, signal, untracked, } from '@angular/core';
|
|
2
6
|
import { CommonModule } from '@angular/common';
|
|
3
7
|
import { FormsModule } from '@angular/forms';
|
|
4
8
|
import { ReportPersistenceAdapter } from '../../data-access/contracts/report-persistence.contract';
|
|
@@ -6,6 +10,7 @@ import { ReportDataSourceAdapter } from '../../data-access/contracts/data-source
|
|
|
6
10
|
import { ReportSessionContextService } from '../../core/services/report-session-context.service';
|
|
7
11
|
import { DesignerStateService } from './services/designer-state.service';
|
|
8
12
|
import { Router } from '@angular/router';
|
|
13
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
9
14
|
import { Dialog, DialogModule } from '@angular/cdk/dialog';
|
|
10
15
|
import { REPORTING_CONFIG } from '../../core/tokens/reporting-config.token';
|
|
11
16
|
import { ReportSavedDialogComponent } from './components/dialogs/report-saved-dialog.component';
|
|
@@ -16,10 +21,28 @@ import { PropertyEditorComponent } from './components/property-editor/property-e
|
|
|
16
21
|
import { ReportRuntimeComponent } from '../runtime/report-runtime.component';
|
|
17
22
|
import { ReportExecutionService } from '../runtime/report-execution.service';
|
|
18
23
|
import { RptIconComponent } from '../../primitives/components/icon/rpt-icon.component';
|
|
24
|
+
import { DesignerEndpointsService, DESIGNER_ENDPOINT_PROVIDERS } from './services/designer-endpoints.service';
|
|
19
25
|
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
20
26
|
import * as i0 from "@angular/core";
|
|
21
27
|
import * as i1 from "@angular/cdk/drag-drop";
|
|
22
28
|
export class DesignerComponent {
|
|
29
|
+
requests = new ReportRequestScope();
|
|
30
|
+
loadError = signal(null);
|
|
31
|
+
injector = inject(Injector);
|
|
32
|
+
destroyRef = inject(DestroyRef);
|
|
33
|
+
saveDialogOpen = false;
|
|
34
|
+
endpointScope = inject(DesignerEndpointsService);
|
|
35
|
+
configuration = inject(DesignerConfigService);
|
|
36
|
+
/** Page-local settings; omitted values inherit optional application defaults. */
|
|
37
|
+
set config(value) {
|
|
38
|
+
this.configuration.set(value);
|
|
39
|
+
this.sessionService?.configureDesignerSession(value);
|
|
40
|
+
this.endpointScope.refresh();
|
|
41
|
+
}
|
|
42
|
+
/** Override any subset of configured URLs for this designer and its preview. */
|
|
43
|
+
set apiUrl(value) {
|
|
44
|
+
this.endpointScope.setOverrides(value);
|
|
45
|
+
}
|
|
23
46
|
designerState = inject(DesignerStateService);
|
|
24
47
|
persistenceAdapter = inject(ReportPersistenceAdapter, { optional: true });
|
|
25
48
|
dataSourceAdapter = inject(ReportDataSourceAdapter, { optional: true });
|
|
@@ -105,10 +128,19 @@ export class DesignerComponent {
|
|
|
105
128
|
loadedReportDef = null;
|
|
106
129
|
lastEmittedDef = null;
|
|
107
130
|
constructor() {
|
|
131
|
+
let previousContext = '';
|
|
132
|
+
effect(() => {
|
|
133
|
+
const context = this.requests.context();
|
|
134
|
+
if (context === previousContext)
|
|
135
|
+
return;
|
|
136
|
+
previousContext = context;
|
|
137
|
+
untracked(() => { this.requests.cancelAll(); this.previewData.set(null); this.loadedReportId = null; });
|
|
138
|
+
}, { allowSignalWrites: true });
|
|
108
139
|
effect(() => {
|
|
109
140
|
const def = this.definition();
|
|
110
141
|
if (!def)
|
|
111
142
|
return;
|
|
143
|
+
this.requests.cancel('definition');
|
|
112
144
|
// Skip if this definition is reference-identical to what the designer just emitted or current internal state
|
|
113
145
|
if (def === this.lastEmittedDef || def === this.designerState.definition()) {
|
|
114
146
|
this.loadedReportDef = def;
|
|
@@ -119,17 +151,29 @@ export class DesignerComponent {
|
|
|
119
151
|
if (isNewReport || (def !== this.loadedReportDef && !this.designerState.isDirty())) {
|
|
120
152
|
this.loadedReportId = def.id;
|
|
121
153
|
this.loadedReportDef = def;
|
|
122
|
-
|
|
154
|
+
try {
|
|
155
|
+
this.designerState.loadDefinition(normalizeReportDefinition(def));
|
|
156
|
+
this.loadError.set(null);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
this.loadError.set(error instanceof Error ? error.message : String(error));
|
|
160
|
+
}
|
|
123
161
|
}
|
|
124
162
|
}, { allowSignalWrites: true });
|
|
125
163
|
effect(() => {
|
|
126
164
|
const id = this.reportId();
|
|
165
|
+
this.requests.context();
|
|
166
|
+
if (!id || this.definition()) {
|
|
167
|
+
this.requests.cancel('definition');
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
127
170
|
if (id && id !== this.loadedReportId && !this.definition() && this.persistenceAdapter) {
|
|
128
171
|
this.loadedReportId = id;
|
|
129
|
-
this.persistenceAdapter.load(id).
|
|
172
|
+
this.requests.run('definition', () => this.persistenceAdapter.load(id).pipe(map(normalizeReportDefinition)), def => {
|
|
130
173
|
this.loadedReportDef = def;
|
|
131
174
|
this.designerState.loadDefinition(def);
|
|
132
|
-
|
|
175
|
+
this.loadError.set(null);
|
|
176
|
+
}, error => { this.loadedReportId = null; this.loadError.set(error.message); });
|
|
133
177
|
}
|
|
134
178
|
}, { allowSignalWrites: true });
|
|
135
179
|
effect(() => {
|
|
@@ -167,66 +211,56 @@ export class DesignerComponent {
|
|
|
167
211
|
});
|
|
168
212
|
}
|
|
169
213
|
}
|
|
170
|
-
|
|
171
|
-
const
|
|
172
|
-
if (this.persistenceAdapter)
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
error: (err) => {
|
|
181
|
-
console.error('[Designer] Save failed:', err);
|
|
182
|
-
this.showToast('Failed to save report');
|
|
183
|
-
},
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
this.designerState.markSaved();
|
|
188
|
-
this.reportSaved.emit(current);
|
|
189
|
-
this.showToast('Report state saved');
|
|
190
|
-
this.openSavedDialog(current);
|
|
191
|
-
}
|
|
214
|
+
retryLoad() {
|
|
215
|
+
const id = this.reportId();
|
|
216
|
+
if (!id || !this.persistenceAdapter)
|
|
217
|
+
return;
|
|
218
|
+
this.requests.run('definition', () => this.persistenceAdapter.load(id).pipe(map(normalizeReportDefinition)), def => {
|
|
219
|
+
this.loadedReportId = id;
|
|
220
|
+
this.loadedReportDef = def;
|
|
221
|
+
this.designerState.loadDefinition(def);
|
|
222
|
+
this.loadError.set(null);
|
|
223
|
+
}, error => this.loadError.set(error.message));
|
|
192
224
|
}
|
|
193
|
-
|
|
194
|
-
if (
|
|
225
|
+
onSave() {
|
|
226
|
+
if (this.saveDialogOpen)
|
|
227
|
+
return;
|
|
228
|
+
if (!this.dialog) {
|
|
229
|
+
this.showToast('The report review dialog is unavailable.');
|
|
195
230
|
return;
|
|
231
|
+
}
|
|
196
232
|
const routeBase = this.reportingConfig?.routeBase || 'reports';
|
|
197
233
|
const dialogRef = this.dialog.open(ReportSavedDialogComponent, {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
maxWidth: '860px',
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
disableClose: false,
|
|
234
|
+
injector: this.injector,
|
|
235
|
+
data: { report: this.currentDefinition(), routeBase },
|
|
236
|
+
width: 'min(860px, 92vw)', maxWidth: '860px', maxHeight: '84vh',
|
|
237
|
+
panelClass: 'rpt-dialog-panel', disableClose: false,
|
|
238
|
+
ariaLabelledBy: 'dialog-title', autoFocus: '#rpt-dlg-id',
|
|
204
239
|
});
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
240
|
+
this.saveDialogOpen = true;
|
|
241
|
+
const unregisterDestroy = this.destroyRef.onDestroy(() => dialogRef.close());
|
|
242
|
+
dialogRef.closed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(result => {
|
|
243
|
+
unregisterDestroy();
|
|
244
|
+
this.saveDialogOpen = false;
|
|
245
|
+
if (!result)
|
|
246
|
+
return;
|
|
247
|
+
this.designerState.updateReportSettings(result.report);
|
|
248
|
+
this.designerState.markSaved();
|
|
249
|
+
this.reportSaved.emit(result.report);
|
|
250
|
+
this.showToast('Report saved successfully');
|
|
251
|
+
if (result.action === 'open_live_page') {
|
|
252
|
+
const slug = result.report.slug || result.report.id;
|
|
253
|
+
const url = '/' + routeBase.replace(/^\/+|\/+$/g, '') + '/' + slug;
|
|
254
|
+
if (this.router)
|
|
219
255
|
this.router.navigateByUrl(url);
|
|
220
|
-
|
|
256
|
+
else if (typeof window !== 'undefined')
|
|
257
|
+
window.location.assign(url);
|
|
221
258
|
}
|
|
222
259
|
});
|
|
223
260
|
}
|
|
224
261
|
onPreviewExecute(event) {
|
|
225
262
|
if (this.executionService) {
|
|
226
|
-
this.executionService.execute(event.definition, event.parameters).
|
|
227
|
-
next: (data) => this.previewData.set(data),
|
|
228
|
-
error: (err) => console.error('[Designer Preview] Execution failed:', err),
|
|
229
|
-
});
|
|
263
|
+
this.requests.run('preview', () => this.executionService.execute(event.definition, event.parameters), data => this.previewData.set(data), error => this.loadError.set(error.message));
|
|
230
264
|
return;
|
|
231
265
|
}
|
|
232
266
|
const grid = event.definition.grid;
|
|
@@ -268,14 +302,7 @@ export class DesignerComponent {
|
|
|
268
302
|
const session = this.sessionService?.getCurrentSessionContext() ?? {};
|
|
269
303
|
const compMappings = ds?.parameterMappings || {};
|
|
270
304
|
const executionParams = { ...compMappings, ...session, ...event.parameters };
|
|
271
|
-
this.dataSourceAdapter.execute(ds, executionParams).
|
|
272
|
-
next: (data) => {
|
|
273
|
-
this.previewData.set(data);
|
|
274
|
-
},
|
|
275
|
-
error: (err) => {
|
|
276
|
-
console.error('[Designer Preview] Execution failed:', err);
|
|
277
|
-
},
|
|
278
|
-
});
|
|
305
|
+
this.requests.run('preview', () => this.dataSourceAdapter.execute(ds, executionParams), data => this.previewData.set(data), error => this.loadError.set(error.message));
|
|
279
306
|
}
|
|
280
307
|
copyJson() {
|
|
281
308
|
if (navigator.clipboard) {
|
|
@@ -333,8 +360,9 @@ export class DesignerComponent {
|
|
|
333
360
|
setTimeout(() => this.saveMessage.set(null), 3000);
|
|
334
361
|
}
|
|
335
362
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
336
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DesignerComponent, isStandalone: true, selector: "rpt-designer", inputs: { reportId: { classPropertyName: "reportId", publicName: "reportId", isSignal: true, isRequired: false, transformFunction: null }, definition: { classPropertyName: "definition", publicName: "initialReport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { reportSaved: "save", definitionChanged: "definitionChange" }, host: { listeners: { "window:resize": "onResize()", "window:keydown": "onKeyDown($event)" } }, providers: [DesignerStateService], ngImport: i0, template: `
|
|
363
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DesignerComponent, isStandalone: true, selector: "rpt-designer", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: false, isRequired: false, transformFunction: null }, apiUrl: { classPropertyName: "apiUrl", publicName: "apiUrl", isSignal: false, isRequired: false, transformFunction: null }, reportId: { classPropertyName: "reportId", publicName: "reportId", isSignal: true, isRequired: false, transformFunction: null }, definition: { classPropertyName: "definition", publicName: "initialReport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { reportSaved: "save", definitionChanged: "definitionChange" }, host: { listeners: { "window:resize": "onResize()", "window:keydown": "onKeyDown($event)" } }, providers: [DesignerStateService, ...DESIGNER_ENDPOINT_PROVIDERS], ngImport: i0, template: `
|
|
337
364
|
<div class="designer-shell">
|
|
365
|
+
@if (loadError()) { <div role="alert">{{ loadError() }} <button type="button" (click)="retryLoad()">Retry</button></div> }
|
|
338
366
|
<!-- Top Actions Toolbar with Sidebar Controls -->
|
|
339
367
|
<rpt-designer-toolbar
|
|
340
368
|
[isLeftPanelCollapsed]="isLeftPanelCollapsed()"
|
|
@@ -533,7 +561,7 @@ export class DesignerComponent {
|
|
|
533
561
|
</div>
|
|
534
562
|
}
|
|
535
563
|
</div>
|
|
536
|
-
`, isInline: true, styles: [":host{display:block;width:100%;height:100%;min-height:400px;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:268px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: DesignerToolbarComponent, selector: "rpt-designer-toolbar", inputs: ["isLeftPanelCollapsed", "isRightPanelCollapsed"], outputs: ["toggleLeftPanel", "toggleRightPanel", "saveRequested"] }, { kind: "component", type: ComponentPaletteComponent, selector: "rpt-component-palette", outputs: ["collapseRequested"] }, { kind: "component", type: DesignCanvasComponent, selector: "rpt-design-canvas" }, { kind: "component", type: PropertyEditorComponent, selector: "rpt-property-editor", outputs: ["collapseRequested"] }, { kind: "component", type: ReportRuntimeComponent, selector: "rpt-report-runtime, rpt-runtime", inputs: ["reportId", "report", "resultData"], outputs: ["resetRequested", "execute", "executed", "exportRequested", "printRequested", "customActionTriggered", "gridStateChange", "columnDefsChange", "selectionChange", "selectionChanged", "rowActionTriggered", "drilldownRequested"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
564
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;flex:1 1 0%;min-width:0;width:100%;height:100%;min-height:0;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{flex:1;min-height:0;display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:268px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;min-height:0;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;min-height:0;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: DesignerToolbarComponent, selector: "rpt-designer-toolbar", inputs: ["isLeftPanelCollapsed", "isRightPanelCollapsed"], outputs: ["toggleLeftPanel", "toggleRightPanel", "saveRequested"] }, { kind: "component", type: ComponentPaletteComponent, selector: "rpt-component-palette", outputs: ["collapseRequested"] }, { kind: "component", type: DesignCanvasComponent, selector: "rpt-design-canvas" }, { kind: "component", type: PropertyEditorComponent, selector: "rpt-property-editor", outputs: ["collapseRequested"] }, { kind: "component", type: ReportRuntimeComponent, selector: "rpt-report-runtime, rpt-runtime", inputs: ["reportId", "report", "resultData"], outputs: ["resetRequested", "execute", "executed", "exportRequested", "printRequested", "customActionTriggered", "gridStateChange", "columnDefsChange", "selectionChange", "selectionChanged", "rowActionTriggered", "drilldownRequested"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
537
565
|
}
|
|
538
566
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerComponent, decorators: [{
|
|
539
567
|
type: Component,
|
|
@@ -548,8 +576,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
548
576
|
PropertyEditorComponent,
|
|
549
577
|
ReportRuntimeComponent,
|
|
550
578
|
RptIconComponent,
|
|
551
|
-
], providers: [DesignerStateService], template: `
|
|
579
|
+
], providers: [DesignerStateService, ...DESIGNER_ENDPOINT_PROVIDERS], template: `
|
|
552
580
|
<div class="designer-shell">
|
|
581
|
+
@if (loadError()) { <div role="alert">{{ loadError() }} <button type="button" (click)="retryLoad()">Retry</button></div> }
|
|
553
582
|
<!-- Top Actions Toolbar with Sidebar Controls -->
|
|
554
583
|
<rpt-designer-toolbar
|
|
555
584
|
[isLeftPanelCollapsed]="isLeftPanelCollapsed()"
|
|
@@ -748,12 +777,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
748
777
|
</div>
|
|
749
778
|
}
|
|
750
779
|
</div>
|
|
751
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;min-height:400px;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:268px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"] }]
|
|
752
|
-
}], ctorParameters: () => [], propDecorators: {
|
|
780
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:flex;flex-direction:column;flex:1 1 0%;min-width:0;width:100%;height:100%;min-height:0;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{flex:1;min-height:0;display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:268px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;min-height:0;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;min-height:0;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"] }]
|
|
781
|
+
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
782
|
+
type: Input
|
|
783
|
+
}], apiUrl: [{
|
|
784
|
+
type: Input
|
|
785
|
+
}], onResize: [{
|
|
753
786
|
type: HostListener,
|
|
754
787
|
args: ['window:resize']
|
|
755
788
|
}], onKeyDown: [{
|
|
756
789
|
type: HostListener,
|
|
757
790
|
args: ['window:keydown', ['$event']]
|
|
758
791
|
}] } });
|
|
759
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSwwQkFBMEIsRUFBMkIsTUFBTSxvREFBb0QsQ0FBQztBQUN6SCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN2RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMz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c1dBQ3RCLGdCQUFnQjs7NEZBaXpCUCxpQkFBaUI7a0JBOXpCN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxjQUFjO3dCQUNkLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4Qix5QkFBeUI7d0JBQ3pCLHFCQUFxQjt3QkFDckIsdUJBQXVCO3dCQUN2QixzQkFBc0I7d0JBQ3RCLGdCQUFnQjtxQkFDakIsYUFDVSxDQUFDLG9CQUFvQixDQUFDLFlBQ3ZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdNVCxtQkFvbUJnQix1QkFBdUIsQ0FBQyxNQUFNO3dEQXlEL0MsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWU7Z0JBVTdCLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3JlcG9ydC1wZXJzaXN0ZW5jZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBEZXNpZ25lclN0YXRlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGVzaWduZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGlhbG9nLCBEaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZGlhbG9nJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFNhdmVkRGlhbG9nQ29tcG9uZW50LCBSZXBvcnRTYXZlZERpYWxvZ1Jlc3VsdCB9IGZyb20gJy4vY29tcG9uZW50cy9kaWFsb2dzL3JlcG9ydC1zYXZlZC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b29sYmFyL2Rlc2lnbmVyLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LXBhbGV0dGUvY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50JztcbmltcG9ydCB7IERlc2lnbkNhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kZXNpZ24tY2FudmFzL2Rlc2lnbi1jYW52YXMuY29tcG9uZW50JztcbmltcG9ydCB7IFByb3BlcnR5RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb3BlcnR5LWVkaXRvci9wcm9wZXJ0eS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgfSBmcm9tICcuLi9ydW50aW1lL3JlcG9ydC1ydW50aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRFeGVjdXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vcnVudGltZS9yZXBvcnQtZXhlY3V0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1kZXNpZ25lcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCxcbiAgICBDb21wb25lbnRQYWxldHRlQ29tcG9uZW50LFxuICAgIERlc2lnbkNhbnZhc0NvbXBvbmVudCxcbiAgICBQcm9wZXJ0eUVkaXRvckNvbXBvbmVudCxcbiAgICBSZXBvcnRSdW50aW1lQ29tcG9uZW50LFxuICAgIFJwdEljb25Db21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW0Rlc2lnbmVyU3RhdGVTZXJ2aWNlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZGVzaWduZXItc2hlbGxcIj5cbiAgICAgIDwhLS0gVG9wIEFjdGlvbnMgVG9vbGJhciB3aXRoIFNpZGViYXIgQ29udHJvbHMgLS0+XG4gICAgICA8cnB0LWRlc2lnbmVyLXRvb2xiYXJcbiAgICAgICAgW2lzTGVmdFBhbmVsQ29sbGFwc2VkXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICBbaXNSaWdodFBhbmVsQ29sbGFwc2VkXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgKHRvZ2dsZUxlZnRQYW5lbCk9XCJ0b2dnbGVMZWZ0UGFuZWwoKVwiXG4gICAgICAgICh0b2dnbGVSaWdodFBhbmVsKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiXG4gICAgICAgIChzYXZlUmVxdWVzdGVkKT1cIm9uU2F2ZSgpXCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gTWFpbiAzLVBhbmVsIExheW91dCB3aXRoIENESyBEcm9wIExpc3QgR3JvdXAgY29ubmVjdGluZyBQYWxldHRlICYgQ2FudmFzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbmVyLXdvcmtiZW5jaFwiIGNka0Ryb3BMaXN0R3JvdXA+XG4gICAgICAgIDwhLS0gQmFja2Ryb3AgZm9yIGNvbXBhY3QvbW9iaWxlIHNsaWRlLW91dCBkcmF3ZXJzIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nICYmICghaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSB8fCAhaXNSaWdodFBhbmVsQ29sbGFwc2VkKCkpKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ3b3JrYmVuY2gtZHJhd2VyLWJhY2tkcm9wXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUFsbFBhbmVscygpXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSAxLiBMZWZ0IFBhbmVsOiBDb21wb25lbnQgUGFsZXR0ZSAob25seSBzaG93biBpbiBkZXNpZ24gbW9kZSkgLS0+XG4gICAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid29ya2JlbmNoLWxlZnQtY29udGFpbmVyXCIgW2NsYXNzLmlzLWNvbGxhcHNlZF09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpXCI+XG4gICAgICAgICAgICA8YXNpZGUgY2xhc3M9XCJ3b3JrYmVuY2gtbGVmdC1wYW5lbFwiPlxuICAgICAgICAgICAgICA8cnB0LWNvbXBvbmVudC1wYWxldHRlIChjb2xsYXBzZVJlcXVlc3RlZCk9XCJ0b2dnbGVMZWZ0UGFuZWwoKVwiIC8+XG4gICAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSAyLiBDZW50ZXIgUGFuZWw6IERlc2lnbiBDYW52YXMgT1IgTGl2ZSBQcmV2aWV3IE9SIEpTT04gU2NoZW1hIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cIndvcmtiZW5jaC1jZW50ZXItcGFuZWxcIj5cbiAgICAgICAgICBAc3dpdGNoICh2aWV3TW9kZSgpKSB7XG4gICAgICAgICAgICBAY2FzZSAoJ2Rlc2lnbicpIHtcbiAgICAgICAgICAgICAgPHJwdC1kZXNpZ24tY2FudmFzIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LW1vZGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctYmFubmVyXCI+XG4gICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImV5ZVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPkxpdmUgUHJldmlldyBNb2RlIOKAlCBSdW5uaW5nIHdpdGggYWN0dWFsIFJlYWN0aXZlIEZvcm1zICYgRHluYW1pYyBHcmlkPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtcnVudGltZSBbcmVwb3J0XT1cImN1cnJlbnREZWZpbml0aW9uKClcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnanNvbicpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tbW9kZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1lZGl0b3ItY2FyZFwiIFtjbGFzcy50aGVtZS1kYXJrXT1cImVkaXRvclRoZW1lKCkgPT09ICdkYXJrJ1wiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBUb3AgU2NoZW1hIFRvb2xiYXIgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tYmFubmVyLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYWRnZS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNvZGVcIiBbc2l6ZV09XCIxNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tdGl0bGUtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLXRpdGxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImpzb24tdGl0bGVcIj5SZXBvcnQgRGVmaW5pdGlvbiBTY2hlbWE8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi1zY2hlbWEtdGFnXCI+dnt7IGN1cnJlbnREZWZpbml0aW9uKCkuc2NoZW1hVmVyc2lvbiB8fCAxIH19LjAg4oCiIEpTT048L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLW1ldGEtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi1zdGF0LXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGN1cnJlbnREZWZpbml0aW9uKCkuY29tcG9uZW50cy5sZW5ndGggfX08L3N0cm9uZz4gY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi1zdGF0LWRpdmlkZXJcIj7igKI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi1zdGF0LXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGpzb25TdGF0cygpLmxpbmVzIH19PC9zdHJvbmc+IGxpbmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtZGl2aWRlclwiPuKAojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGpzb25TdGF0cygpLnNpemVLYiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tYmFubmVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWpzb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwid3JhcExpbmVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVdyYXBMaW5lcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVG9nZ2xlIFdvcmQgV3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJsaXN0XCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+V3JhcDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tanNvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRvclRoZW1lKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImVkaXRvclRoZW1lKCkgPT09ICdkYXJrJyA/ICdTd2l0Y2ggdG8gTGlnaHQgVGhlbWUnIDogJ1N3aXRjaCB0byBEYXJrIFRoZW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImVkaXRvclRoZW1lKCkgPT09ICdkYXJrJyA/ICdzcGFya2xlcycgOiAnc2xpZGVycydcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBlZGl0b3JUaGVtZSgpID09PSAnZGFyaycgPyAnRGFyaycgOiAnTGlnaHQnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1qc29uLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRKc29uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJEb3dubG9hZCBkZWZpbml0aW9uIGFzIEpTT04gZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJkb3dubG9hZFwiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkV4cG9ydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tY29weS1qc29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jb3BpZWRdPVwiY29weVN0YXR1cygpID09PSAnQ29waWVkISdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvcHlKc29uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDb3B5IHNjaGVtYSBKU09OIHRvIGNsaXBib2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImNvcHlTdGF0dXMoKSA9PT0gJ0NvcGllZCEnID8gJ2NoZWNrJyA6ICdjb3B5J1wiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvcHlTdGF0dXMoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBDb2RlIFZpZXdwb3J0IHdpdGggTGluZSBOdW1iZXJzIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tdmlld3BvcnRcIiBbY2xhc3Mud3JhcC1lbmFibGVkXT1cIndyYXBMaW5lcygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLXNjcm9sbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJqc29uLWNvZGUtdGFibGVcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGxpbmUgb2YgaGlnaGxpZ2h0ZWRMaW5lcygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJqc29uLWNvZGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJqc29uLWxpbmUtbnVtYmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3sgJGluZGV4ICsgMSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJqc29uLWxpbmUtdGV4dFwiPjxzcGFuIFtpbm5lckhUTUxdPVwibGluZVwiPjwvc3Bhbj48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPCEtLSAzLiBSaWdodCBQYW5lbDogUHJvcGVydHkgRWRpdG9yIChvbmx5IHNob3duIGluIGRlc2lnbiBtb2RlKSAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyXCIgW2NsYXNzLmlzLWNvbGxhcHNlZF09XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiPlxuICAgICAgICAgICAgPGFzaWRlIGNsYXNzPVwid29ya2JlbmNoLXJpZ2h0LXBhbmVsXCI+XG4gICAgICAgICAgICAgIDxycHQtcHJvcGVydHktZWRpdG9yIChjb2xsYXBzZVJlcXVlc3RlZCk9XCJ0b2dnbGVSaWdodFBhbmVsKClcIiAvPlxuICAgICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ29tcGFjdC9Nb2JpbGUgV29ya2JlbmNoIEJvdHRvbSBOYXZpZ2F0aW9uIEJhciAtLT5cbiAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicpIHtcbiAgICAgICAgPG5hdiBjbGFzcz1cImNvbXBhY3Qtd29ya2JlbmNoLWJhclwiIGFyaWEtbGFiZWw9XCJNb2JpbGUgV29ya2JlbmNoIE5hdmlnYXRpb25cIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29tcGFjdC1uYXYtYnRuXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiIWlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5MZWZ0UGFuZWxPbmx5KClcIlxuICAgICAgICAgICAgdGl0bGU9XCJPcGVuIENvbXBvbmVudCBQYWxldHRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImxheWVyc1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkNvbXBvbmVudHM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29tcGFjdC1uYXYtYnRuXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSAmJiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VBbGxQYW5lbHMoKVwiXG4gICAgICAgICAgICB0aXRsZT1cIkZ1bGwgQ2FudmFzIFZpZXdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZWRpdFwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkNhbnZhczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCIhaXNSaWdodFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5SaWdodFBhbmVsT25seSgpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiT3BlbiBQcm9wZXJ0aWVzIEluc3BlY3RvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJzZXR0aW5nc1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPlByb3BlcnRpZXM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmF2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIFNhdmUgTm90aWZpY2F0aW9uIFRvYXN0IC0tPlxuICAgICAgQGlmIChzYXZlTWVzc2FnZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlLXRvYXN0XCI+XG4gICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJjaGVja1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICA8c3Bhbj57eyBzYXZlTWVzc2FnZSgpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcblxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAuZGVzaWduZXItc2hlbGwge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXdvcmtiZW5jaCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMjY4cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1wYW5lbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCAud29ya2JlbmNoLWxlZnQtcGFuZWwge1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cblxuICAgIC53b3JrYmVuY2gtY2VudGVyLXBhbmVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiA0MjBweDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgdHJhbnNpdGlvbjogd2lkdGggdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQtc21vb3RoLCAyNTBtcykgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgICB6LWluZGV4OiAyMDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtcmlnaHQtcGFuZWwge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAud29ya2JlbmNoLXJpZ2h0LWNvbnRhaW5lci5pcy1jb2xsYXBzZWQgLndvcmtiZW5jaC1yaWdodC1wYW5lbCB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICB9XG5cblxuXG4gICAgLmNvbXBhY3Qtd29ya2JlbmNoLWJhciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWRyYXdlci1iYWNrZHJvcCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xuICAgICAgLmNvbXBhY3Qtd29ya2JlbmNoLWJhciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgICBwYWRkaW5nOiAwIDEycHg7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICB6LWluZGV4OiA0NTtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgLTJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcbiAgICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgcGFkZGluZzogNnB4IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgICBmb250LXdlaWdodDogdmFyKC0tcnB0LWZvbnQtd2VpZ2h0LW1lZGl1bSwgNTAwKTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0biBycHQtaWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLXN1YnRsZSwgI2UyZThmMCk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuOmhvdmVyIHJwdC1pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG4uYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktbGlnaHQsICNlZmY2ZmYpO1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpO1xuICAgICAgICBmb250LXdlaWdodDogdmFyKC0tcnB0LWZvbnQtd2VpZ2h0LXNlbWlib2xkLCA2MDApO1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgzNywgOTksIDIzNSwgMC4wOCk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuLmFjdGl2ZSBycHQtaWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuOmZvY3VzLXZpc2libGUge1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogMXB4O1xuICAgICAgfVxuXG4gICAgICAud29ya2JlbmNoLWRyYXdlci1iYWNrZHJvcCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuMzUpO1xuICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTtcbiAgICAgICAgei1pbmRleDogNTA7XG4gICAgICB9XG5cbiAgICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICB3aWR0aDogMjgwcHg7XG4gICAgICAgIG1heC13aWR0aDogODV2dztcbiAgICAgICAgei1pbmRleDogNjA7XG4gICAgICAgIGJveC1zaGFkb3c6IDRweCAwIDI0cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgICB9XG4gICAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgICAgIHdpZHRoOiAyODBweCAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAud29ya2JlbmNoLXJpZ2h0LWNvbnRhaW5lciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICB3aWR0aDogMzgwcHg7XG4gICAgICAgIG1heC13aWR0aDogOTV2dztcbiAgICAgICAgei1pbmRleDogNjA7XG4gICAgICAgIGJveC1zaGFkb3c6IC00cHggMCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgfVxuICAgICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgICAgICB3aWR0aDogMzgwcHggIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogUHJldmlldyBNb2RlICovXG4gICAgLnByZXZpZXctbW9kZS1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWJhbm5lciB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvIDE2cHggYXV0bztcbiAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7XG4gICAgICBjb2xvcjogIzFlNDBhZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiZmRiZmU7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC44cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3cteHMsIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDQpKTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWNvbnRlbnQge1xuICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC8qIEpTT04gU2NoZW1hIE1vZGUgLSBFbnRlcnByaXNlIExpZ2h0ICYgQWRhcHRhYmxlIERlc2lnbiAqL1xuICAgIC5qc29uLW1vZGUtY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgcGFkZGluZzogMjBweCAyNHB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJnLCAjZjhmYWZjKTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLmpzb24tZWRpdG9yLWNhcmQge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXItc3VidGxlLCAjZTJlOGYwKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KSwgMCAxcHggMnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjAzKTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGVhc2UsIGJvcmRlci1jb2xvciAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5qc29uLWVkaXRvci1jYXJkLnRoZW1lLWRhcmsge1xuICAgICAgYmFja2dyb3VuZDogIzBmMTcyYTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzFlMjkzYjtcbiAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAgIH1cblxuICAgIC8qIFN1Yi1oZWFkZXIgYmFubmVyICovXG4gICAgLmpzb24tYmFubmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZ2FwOiAxNnB4O1xuICAgICAgcGFkZGluZzogMTJweCAxOHB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXItc3VidGxlLCAjZTJlOGYwKTtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyMDBtcyBlYXNlLCBib3JkZXItY29sb3IgMjAwbXMgZWFzZTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1iYW5uZXIge1xuICAgICAgYmFja2dyb3VuZDogIzBiMTEyMDtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICMxZTI5M2I7XG4gICAgfVxuXG4gICAgLmpzb24tYmFubmVyLWxlZnQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDEycHg7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuXG4gICAgLmpzb24tYmFkZ2UtaWNvbiB7XG4gICAgICB3aWR0aDogMzJweDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktbGlnaHQsICNlZmY2ZmYpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTgpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLWJhZGdlLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgzNywgOTksIDIzNSwgMC4yKTtcbiAgICAgIGNvbG9yOiAjNjBhNWZhO1xuICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDk2LCAxNjUsIDI1MCwgMC4zKTtcbiAgICB9XG5cbiAgICAuanNvbi10aXRsZS1ncm91cCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogMnB4O1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cblxuICAgIC5qc29uLXRpdGxlLXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC5qc29uLXRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRpdGxlIHtcbiAgICAgIGNvbG9yOiAjZjFmNWY5O1xuICAgIH1cblxuICAgIC5qc29uLXNjaGVtYS10YWcge1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgICAgIHBhZGRpbmc6IDFweCA3cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjFmNWY5O1xuICAgICAgY29sb3I6ICM0NzU1Njk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1zY2hlbWEtdGFnIHtcbiAgICAgIGJhY2tncm91bmQ6ICMxZTI5M2I7XG4gICAgICBjb2xvcjogIzk0YTNiODtcbiAgICAgIGJvcmRlci1jb2xvcjogIzMzNDE1NTtcbiAgICB9XG5cbiAgICAuanNvbi1tZXRhLXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1tZXRhLXJvdyB7XG4gICAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICB9XG5cbiAgICAuanNvbi1zdGF0LXBpbGwgc3Ryb25nIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXN0YXQtcGlsbCBzdHJvbmcge1xuICAgICAgY29sb3I6ICNjYmQ1ZTE7XG4gICAgfVxuXG4gICAgLmpzb24tc3RhdC1kaXZpZGVyIHtcbiAgICAgIGNvbG9yOiAjY2JkNWUxO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXN0YXQtZGl2aWRlciB7XG4gICAgICBjb2xvcjogIzMzNDE1NTtcbiAgICB9XG5cbiAgICAuanNvbi1iYW5uZXItYWN0aW9ucyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLmJ0bi1qc29uLWFjdGlvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHBhZGRpbmc6IDVweCAxMXB4O1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5idG4tanNvbi1hY3Rpb246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmMWY1ZjkpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLWhvdmVyLCAjOTRhM2I4KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLmJ0bi1qc29uLWFjdGlvbi5hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktbGlnaHQsICNlZmY2ZmYpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuYnRuLWpzb24tYWN0aW9uIHtcbiAgICAgIGJhY2tncm91bmQ6ICMxZTI5M2I7XG4gICAgICBib3JkZXItY29sb3I6ICMzMzQxNTU7XG4gICAgICBjb2xvcjogI2NiZDVlMTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuYnRuLWpzb24tYWN0aW9uOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICMzMzQxNTU7XG4gICAgICBib3JkZXItY29sb3I6ICM0NzU1Njk7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuYnRuLWpzb24tYWN0aW9uLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KTtcbiAgICAgIGNvbG9yOiAjNjBhNWZhO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjM2I4MmY2O1xuICAgIH1cblxuICAgIC5idG4tY29weS1qc29uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgcGFkZGluZzogNXB4IDEzcHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoMzcsIDk5LCAyMzUsIDAuMik7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgZWFzZTtcbiAgICB9XG5cbiAgICAuYnRuLWNvcHktanNvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG5cbiAgICAuYnRuLWNvcHktanNvbi5jb3BpZWQge1xuICAgICAgYmFja2dyb3VuZDogIzEwYjk4MTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzEwYjk4MTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoMTYsIDE4NSwgMTI5LCAwLjIpO1xuICAgIH1cblxuICAgIC8qIFZpZXdwb3J0ICYgQ29kZSBUYWJsZSAqL1xuICAgIC5qc29uLXZpZXdwb3J0IHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjAwbXMgZWFzZTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi12aWV3cG9ydCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGYxNzJhO1xuICAgIH1cblxuICAgIC5qc29uLXNjcm9sbC1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICB9XG5cbiAgICAuanNvbi1jb2RlLXRhYmxlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHktbW9ubywgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIG1vbm9zcGFjZSk7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgfVxuXG4gICAgLmpzb24tY29kZS1yb3cge1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5qc29uLWNvZGUtcm93OmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tY29kZS1yb3c6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgNDEsIDU5LCAwLjYpO1xuICAgIH1cblxuICAgIC5qc29uLWxpbmUtbnVtYmVyIHtcbiAgICAgIHdpZHRoOiA0NHB4O1xuICAgICAgbWluLXdpZHRoOiA0NHB4O1xuICAgICAgbWF4LXdpZHRoOiA1NnB4O1xuICAgICAgcGFkZGluZzogMXB4IDEycHggMXB4IDhweDtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgY29sb3I6ICM5NGEzYjg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2UyZThmMDtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tbGluZS1udW1iZXIge1xuICAgICAgYmFja2dyb3VuZDogIzBiMTEyMDtcbiAgICAgIGNvbG9yOiAjNDc1NTY5O1xuICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMWUyOTNiO1xuICAgIH1cblxuICAgIC5qc29uLWxpbmUtdGV4dCB7XG4gICAgICBwYWRkaW5nOiAxcHggMTZweDtcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgY29sb3I6ICMxZTI5M2I7XG4gICAgfVxuXG4gICAgLndyYXAtZW5hYmxlZCAuanNvbi1saW5lLXRleHQge1xuICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLWxpbmUtdGV4dCB7XG4gICAgICBjb2xvcjogI2UyZThmMDtcbiAgICB9XG5cbiAgICAvKiBTeW50YXggVG9rZW5zOiBMaWdodCBNb2RlIChDcmlzcCAmIEhpZ2gtQ29udHJhc3QpICovXG4gICAgLmpzb24tdG9rZW4ta2V5IHtcbiAgICAgIGNvbG9yOiAjMWU0MGFmO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICAuanNvbi10b2tlbi1zdHJpbmcge1xuICAgICAgY29sb3I6ICMwNDc4NTc7XG4gICAgfVxuXG4gICAgLmpzb24tdG9rZW4tbnVtYmVyIHtcbiAgICAgIGNvbG9yOiAjN2MzYWVkO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB9XG5cbiAgICAuanNvbi10b2tlbi1ib29sZWFuIHtcbiAgICAgIGNvbG9yOiAjZDk3NzA2O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICAuanNvbi10b2tlbi1udWxsIHtcbiAgICAgIGNvbG9yOiAjZGMyNjI2O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICAvKiBTeW50YXggVG9rZW5zOiBEYXJrIE1vZGUgKENhbGlicmF0ZWQgTmlnaHQgTW9kZSkgKi9cbiAgICAudGhlbWUtZGFyayAuanNvbi10b2tlbi1rZXkge1xuICAgICAgY29sb3I6ICM2MGE1ZmE7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLXN0cmluZyB7XG4gICAgICBjb2xvcjogIzRhZGU4MDtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi10b2tlbi1udW1iZXIge1xuICAgICAgY29sb3I6ICNjMDg0ZmM7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLWJvb2xlYW4ge1xuICAgICAgY29sb3I6ICNmYmJmMjQ7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLW51bGwge1xuICAgICAgY29sb3I6ICNmODcxNzE7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgICAvKiBTYXZlIFRvYXN0IE5vdGlmaWNhdGlvbiAqL1xuICAgIC5zYXZlLXRvYXN0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMjRweDtcbiAgICAgIHJpZ2h0OiAyNHB4O1xuICAgICAgYmFja2dyb3VuZDogIzEwYjk4MTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgZm9udC1zaXplOiAwLjg1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAxNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgei1pbmRleDogMTAwO1xuICAgICAgYW5pbWF0aW9uOiBycHQtZmFkZS1pbiAyMDBtcyBlYXNlO1xuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHJwdC1mYWRlLWluIHtcbiAgICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7IH1cbiAgICAgIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERlc2lnbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcmVhZG9ubHkgZGVzaWduZXJTdGF0ZSA9IGluamVjdChEZXNpZ25lclN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVyc2lzdGVuY2VBZGFwdGVyID0gaW5qZWN0KFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhU291cmNlQWRhcHRlciA9IGluamVjdChSZXBvcnREYXRhU291cmNlQWRhcHRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0aW9uU2VydmljZSA9IGluamVjdChSZXBvcnRFeGVjdXRpb25TZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZyA9IGluamVjdChEaWFsb2csIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvcnRpbmdDb25maWcgPSBpbmplY3QoUkVQT1JUSU5HX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogT3B0aW9uYWwgcmVwb3J0SWQgdG8gbG9hZCBmcm9tIHBlcnNpc3RlbmNlIGFkYXB0ZXIgKi9cbiAgcmVhZG9ubHkgcmVwb3J0SWQgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgLyoqIE9wdGlvbmFsIGRlZmluaXRpb24gdG8gbG9hZCBkaXJlY3RseSAqL1xuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ2luaXRpYWxSZXBvcnQnIH0pO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgc2F2ZXMgdGhlIHJlcG9ydCAqL1xuICByZWFkb25seSByZXBvcnRTYXZlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPih7IGFsaWFzOiAnc2F2ZScgfSk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbmV2ZXIgdGhlIHJlcG9ydCBkZWZpbml0aW9uIGNoYW5nZXMgaW4gdGhlIHZpc3VhbCBkZXNpZ25lciAqL1xuICByZWFkb25seSBkZWZpbml0aW9uQ2hhbmdlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPih7IGFsaWFzOiAnZGVmaW5pdGlvbkNoYW5nZScgfSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERlZmluaXRpb24gPSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgdmlld01vZGUgPSB0aGlzLmRlc2lnbmVyU3RhdGUudmlld01vZGU7XG5cbiAgcmVhZG9ubHkgcHJldmlld0RhdGEgPSBzaWduYWw8dW5rbm93bltdIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNhdmVNZXNzYWdlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBjb3B5U3RhdHVzID0gc2lnbmFsPHN0cmluZz4oJ0NvcHkgSlNPTicpO1xuICByZWFkb25seSBpc0xlZnRQYW5lbENvbGxhcHNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgdG9nZ2xlTGVmdFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQudXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICB0b2dnbGVSaWdodFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnVwZGF0ZSgodikgPT4gIXYpO1xuICB9XG5cbiAgb3BlbkxlZnRQYW5lbE9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIG9wZW5SaWdodFBhbmVsT25seSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICB9XG5cbiAgY2xvc2VBbGxQYW5lbHMoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIG9uUmVzaXplKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDkwMCkge1xuICAgICAgaWYgKCF0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkKCkgJiYgIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNDdHJsT3JDbWQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBjb25zdCBpc0lucHV0ID0gdGFyZ2V0ICYmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5pc0NvbnRlbnRFZGl0YWJsZSk7XG4gICAgaWYgKGlzSW5wdXQpIHJldHVybjtcblxuICAgIGlmIChpc0N0cmxPckNtZCAmJiAhZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnRvZ2dsZUxlZnRQYW5lbCgpO1xuICAgIH0gZWxzZSBpZiAoaXNDdHJsT3JDbWQgJiYgZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnRvZ2dsZVJpZ2h0UGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICByZWFkb25seSBmb3JtYXR0ZWRKc29uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnREZWZpbml0aW9uKCksIG51bGwsIDIpO1xuICB9KTtcblxuICByZWFkb25seSBlZGl0b3JUaGVtZSA9IHNpZ25hbDwnbGlnaHQnIHwgJ2RhcmsnPignbGlnaHQnKTtcbiAgcmVhZG9ubHkgd3JhcExpbmVzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBqc29uU3RhdHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZm9ybWF0dGVkSnNvbigpO1xuICAgIGNvbnN0IGxpbmVzID0ganNvbiA/IGpzb24uc3BsaXQoJ1xcbicpLmxlbmd0aCA6IDA7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgQmxvYihbanNvbl0pLnNpemU7XG4gICAgY29uc3Qgc2l6ZUtiID0gYnl0ZXMgPCAxMDI0ID8gYCR7Ynl0ZXN9IEJgIDogYCR7KGJ5dGVzIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgO1xuICAgIHJldHVybiB7IGxpbmVzLCBzaXplS2IgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRMaW5lcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5mb3JtYXR0ZWRKc29uKCk7XG4gICAgaWYgKCFqc29uKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHRoaXMuc3ludGF4SGlnaGxpZ2h0SnNvbihqc29uKS5zcGxpdCgnXFxuJyk7XG4gIH0pO1xuXG4gIHByaXZhdGUgbG9hZGVkUmVwb3J0SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxvYWRlZFJlcG9ydERlZjogUmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxhc3RFbWl0dGVkRGVmOiBSZXBvcnREZWZpbml0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLmRlZmluaXRpb24oKTtcbiAgICAgICAgaWYgKCFkZWYpIHJldHVybjtcblxuICAgICAgICAvLyBTa2lwIGlmIHRoaXMgZGVmaW5pdGlvbiBpcyByZWZlcmVuY2UtaWRlbnRpY2FsIHRvIHdoYXQgdGhlIGRlc2lnbmVyIGp1c3QgZW1pdHRlZCBvciBjdXJyZW50IGludGVybmFsIHN0YXRlXG4gICAgICAgIGlmIChkZWYgPT09IHRoaXMubGFzdEVtaXR0ZWREZWYgfHwgZGVmID09PSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbigpKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBkZWY7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSByZWxvYWQgaWYgcmVwb3J0IElEIGNoYW5nZWQgKGRpZmZlcmVudCByZXBvcnQpLCBvciBpbml0aWFsIGxvYWQsIG9yIGV4dGVybmFsIGRlZmluaXRpb24gd2hlbiBub3QgYWN0aXZlbHkgZWRpdGluZ1xuICAgICAgICBjb25zdCBpc05ld1JlcG9ydCA9IGRlZi5pZCAhPT0gdGhpcy5sb2FkZWRSZXBvcnRJZDtcbiAgICAgICAgaWYgKGlzTmV3UmVwb3J0IHx8IChkZWYgIT09IHRoaXMubG9hZGVkUmVwb3J0RGVmICYmICF0aGlzLmRlc2lnbmVyU3RhdGUuaXNEaXJ0eSgpKSkge1xuICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0SWQgPSBkZWYuaWQ7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBkZWY7XG4gICAgICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKGRlZik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMucmVwb3J0SWQoKTtcbiAgICAgICAgaWYgKGlkICYmIGlkICE9PSB0aGlzLmxvYWRlZFJlcG9ydElkICYmICF0aGlzLmRlZmluaXRpb24oKSAmJiB0aGlzLnBlcnNpc3RlbmNlQWRhcHRlcikge1xuICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0SWQgPSBpZDtcbiAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlQWRhcHRlci5sb2FkKGlkKS5zdWJzY3JpYmUoKGRlZikgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBkZWY7XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oZGVmKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZGVzaWduZXJTdGF0ZS5kZWZpbml0aW9uKCk7XG4gICAgICBpZiAodGhpcy5kZXNpZ25lclN0YXRlLmlzRGlydHkoKSkge1xuICAgICAgICB0aGlzLmxhc3RFbWl0dGVkRGVmID0gY3VycmVudDtcbiAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBjdXJyZW50O1xuICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gY3VycmVudC5pZDtcbiAgICAgICAgdGhpcy5kZWZpbml0aW9uQ2hhbmdlZC5lbWl0KGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDkwMCkge1xuICAgICAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApIHtcbiAgICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5kZWZpbml0aW9uKCkgJiYgIXRoaXMucmVwb3J0SWQoKSkge1xuICAgICAgLy8gU3RhcnQgd2l0aCBhIGNsZWFuIHJlcG9ydCBkZWZpbml0aW9uXG4gICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oe1xuICAgICAgICBpZDogYHJwdC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA4KX1gLFxuICAgICAgICBuYW1lOiAnTmV3IEN1c3RvbSBSZXBvcnQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1Zpc3VhbGx5IGRlc2lnbmVkIHJlcG9ydGluZyBwYWdlIGNyZWF0ZWQgd2l0aCBCV2F5cy1SZXBvcnQuJyxcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgbGF5b3V0OiB7IGNvbHVtbnM6IDEyLCBnYXA6IDE2LCBwYWRkaW5nOiAyNCwgZGlyZWN0aW9uOiAnbHRyJyB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXSxcbiAgICAgICAgcGFyYW1ldGVyczogW10sXG4gICAgICAgIGRhdGFTb3VyY2VzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50RGVmaW5pdGlvbigpO1xuICAgIGlmICh0aGlzLnBlcnNpc3RlbmNlQWRhcHRlcikge1xuICAgICAgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIuc2F2ZShjdXJyZW50KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoc2F2ZWREZWYpID0+IHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubWFya1NhdmVkKCk7XG4gICAgICAgICAgdGhpcy5yZXBvcnRTYXZlZC5lbWl0KHNhdmVkRGVmKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCgnUmVwb3J0IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICAgIHRoaXMub3BlblNhdmVkRGlhbG9nKHNhdmVkRGVmKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbRGVzaWduZXJdIFNhdmUgZmFpbGVkOicsIGVycik7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHJlcG9ydCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5tYXJrU2F2ZWQoKTtcbiAgICAgIHRoaXMucmVwb3J0U2F2ZWQuZW1pdChjdXJyZW50KTtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KCdSZXBvcnQgc3RhdGUgc2F2ZWQnKTtcbiAgICAgIHRoaXMub3BlblNhdmVkRGlhbG9nKGN1cnJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlblNhdmVkRGlhbG9nKHNhdmVkRGVmOiBSZXBvcnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpYWxvZykgcmV0dXJuO1xuXG4gICAgY29uc3Qgcm91dGVCYXNlID0gdGhpcy5yZXBvcnRpbmdDb25maWc/LnJvdXRlQmFzZSB8fCAncmVwb3J0cyc7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxSZXBvcnRTYXZlZERpYWxvZ1Jlc3VsdCwgeyByZXBvcnQ6IFJlcG9ydERlZmluaXRpb247IHJvdXRlQmFzZT86IHN0cmluZyB9PihcbiAgICAgIFJlcG9ydFNhdmVkRGlhbG9nQ29tcG9uZW50LFxuICAgICAge1xuICAgICAgICBkYXRhOiB7IHJlcG9ydDogc2F2ZWREZWYsIHJvdXRlQmFzZSB9LFxuICAgICAgICB3aWR0aDogJ21pbig4NjBweCwgOTJ2dyknLFxuICAgICAgICBtYXhXaWR0aDogJzg2MHB4JyxcbiAgICAgICAgbWF4SGVpZ2h0OiAnODR2aCcsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdycHQtZGlhbG9nLXBhbmVsJyxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZGlhbG9nUmVmLmNsb3NlZC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnJlcG9ydCkge1xuICAgICAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS51cGRhdGVSZXBvcnRTZXR0aW5ncyh7XG4gICAgICAgICAgICBuYW1lOiByZXN1bHQucmVwb3J0Lm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzdWx0LnJlcG9ydC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNsdWc6IHJlc3VsdC5yZXBvcnQuc2x1ZyxcbiAgICAgICAgICAgIG1lbnVHcm91cDogcmVzdWx0LnJlcG9ydC5tZW51R3JvdXAsXG4gICAgICAgICAgICBpc1B1Ymxpc2hlZDogcmVzdWx0LnJlcG9ydC5pc1B1Ymxpc2hlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0LmFjdGlvbiA9PT0gJ29wZW5fbGl2ZV9wYWdlJyAmJiB0aGlzLnJvdXRlcikge1xuICAgICAgICAgIGNvbnN0IHRhcmdldFNsdWcgPSByZXN1bHQucmVwb3J0LnNsdWcgfHwgcmVzdWx0LnJlcG9ydC5pZDtcbiAgICAgICAgICBjb25zdCB1cmwgPSBgLyR7cm91dGVCYXNlLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKX0vJHt0YXJnZXRTbHVnfWA7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblByZXZpZXdFeGVjdXRlKGV2ZW50OiB7XG4gICAgZGVmaW5pdGlvbjogUmVwb3J0RGVmaW5pdGlvbjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV4ZWN1dGlvblNlcnZpY2UpIHtcbiAgICAgIHRoaXMuZXhlY3V0aW9uU2VydmljZS5leGVjdXRlKGV2ZW50LmRlZmluaXRpb24sIGV2ZW50LnBhcmFtZXRlcnMpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB0aGlzLnByZXZpZXdEYXRhLnNldChkYXRhKSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ1tEZXNpZ25lciBQcmV2aWV3XSBFeGVjdXRpb24gZmFpbGVkOicsIGVyciksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBncmlkID0gZXZlbnQuZGVmaW5pdGlvbi5ncmlkO1xuICAgIGlmICghZ3JpZCkge1xuICAgICAgY29uc29sZS53YXJuKCdbRGVzaWduZXIgUHJldmlld10gTm8gZ3JpZCBhdHRhY2hlZCB0byByZXBvcnQgZGVmaW5pdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZHMgPSBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzPy5maW5kKChkKSA9PiBkLmlkID09PSBncmlkLmRhdGFTb3VyY2VJZCk7XG4gICAgaWYgKCFkcyAmJiBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzPy5sZW5ndGggPiAwKSB7XG4gICAgICBkcyA9IGV2ZW50LmRlZmluaXRpb24uZGF0YVNvdXJjZXNbMF07XG4gICAgfVxuXG4gICAgaWYgKCFkcykge1xuICAgICAgLy8gTG9vayBmb3IgU3RvcmVkIFByb2NlZHVyZSBvciBUYWJsZSBjb25maWd1cmVkIG9uIGFueSBjb21wb25lbnQgaW4gdGhlIHJlcG9ydFxuICAgICAgY29uc3QgY29tcFdpdGhFbnRpdHkgPSBldmVudC5kZWZpbml0aW9uLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5kYXRhU291cmNlPy5lbnRpdHlOYW1lKTtcbiAgICAgIGlmIChjb21wV2l0aEVudGl0eT8uZGF0YVNvdXJjZT8uZW50aXR5TmFtZSkge1xuICAgICAgICBkcyA9IHtcbiAgICAgICAgICBpZDogJ3NwLScgKyBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgbmFtZTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIGVuZHBvaW50OiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgc2NoZW1hOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNjaGVtYSB8fCAnZGJvJyxcbiAgICAgICAgICB0eXBlOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNvdXJjZVR5cGUgfHwgJ3Byb2NlZHVyZScsXG4gICAgICAgICAgbWV0aG9kOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICd0YWJsZScgPyAnR0VUJyA6ICdTVE9SRURfUFJPQ0VEVVJFJyxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nczogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5wYXJhbWV0ZXJNYXBwaW5ncyxcbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkcykge1xuICAgICAgZHMgPSB7XG4gICAgICAgIGlkOiAnZGVmYXVsdC1kcycsXG4gICAgICAgIG5hbWU6ICdSZXBvcnQgRGF0YScsXG4gICAgICAgIGVuZHBvaW50OiAnZGVmYXVsdCcsXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZUFkYXB0ZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0Rlc2lnbmVyIFByZXZpZXddIE5vIGRhdGFTb3VyY2VBZGFwdGVyIGF2YWlsYWJsZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgY29uc3QgY29tcE1hcHBpbmdzID0gKGRzIGFzIGFueSk/LnBhcmFtZXRlck1hcHBpbmdzIHx8IHt9O1xuICAgIGNvbnN0IGV4ZWN1dGlvblBhcmFtcyA9IHsgLi4uY29tcE1hcHBpbmdzLCAuLi5zZXNzaW9uLCAuLi5ldmVudC5wYXJhbWV0ZXJzIH07XG5cbiAgICB0aGlzLmRhdGFTb3VyY2VBZGFwdGVyLmV4ZWN1dGUoZHMsIGV4ZWN1dGlvblBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMucHJldmlld0RhdGEuc2V0KGRhdGEpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tEZXNpZ25lciBQcmV2aWV3XSBFeGVjdXRpb24gZmFpbGVkOicsIGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgY29weUpzb24oKTogdm9pZCB7XG4gICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZm9ybWF0dGVkSnNvbigpKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb3B5U3RhdHVzLnNldCgnQ29waWVkIScpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29weVN0YXR1cy5zZXQoJ0NvcHkgSlNPTicpLCAyMDAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRvd25sb2FkSnNvbigpOiB2b2lkIHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5mb3JtYXR0ZWRKc29uKCk7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtqc29uXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGNvbnN0IHNsdWcgPSAodGhpcy5jdXJyZW50RGVmaW5pdGlvbigpLm5hbWUgfHwgJ3JlcG9ydCcpXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teYS16MC05Xy1dL2csICctJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIGxpbmsuZG93bmxvYWQgPSBgJHtzbHVnfS5yZXBvcnQuanNvbmA7XG4gICAgbGluay5jbGljaygpO1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgfVxuXG4gIHRvZ2dsZUVkaXRvclRoZW1lKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yVGhlbWUudXBkYXRlKChjdXJyZW50KSA9PiAoY3VycmVudCA9PT0gJ2xpZ2h0JyA/ICdkYXJrJyA6ICdsaWdodCcpKTtcbiAgfVxuXG4gIHRvZ2dsZVdyYXBMaW5lcygpOiB2b2lkIHtcbiAgICB0aGlzLndyYXBMaW5lcy51cGRhdGUoKHYpID0+ICF2KTtcbiAgfVxuXG4gIHByaXZhdGUgc3ludGF4SGlnaGxpZ2h0SnNvbihqc29uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVzY2FwZWQgPSBqc29uXG4gICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcblxuICAgIHJldHVybiBlc2NhcGVkLnJlcGxhY2UoXG4gICAgICAvKFwiKFxcXFx1W2EtekEtWjAtOV17NH18XFxcXFtedV18W15cXFxcXCJdKSpcIihcXHMqOik/fFxcYih0cnVlfGZhbHNlfG51bGwpXFxifC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/KS9nLFxuICAgICAgKG1hdGNoKSA9PiB7XG4gICAgICAgIGxldCBjbHMgPSAnanNvbi10b2tlbi1udW1iZXInO1xuICAgICAgICBpZiAoL15cIi8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgICBpZiAoLzokLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4ta2V5JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4tc3RyaW5nJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoL3RydWV8ZmFsc2UvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4tYm9vbGVhbic7XG4gICAgICAgIH0gZWxzZSBpZiAoL251bGwvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4tbnVsbCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIiR7Y2xzfVwiPiR7bWF0Y2h9PC9zcGFuPmA7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZU1lc3NhZ2Uuc2V0KG1lc3NhZ2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zYXZlTWVzc2FnZS5zZXQobnVsbCksIDMwMDApO1xuICB9XG59XG4iXX0=
|
|
792
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNaLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxF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QUFDLE1BQU07d0RBYWxDLE1BQU07c0JBQWxCLEtBQUs7Z0JBT08sTUFBTTtzQkFBbEIsS0FBSztnQkEwRE4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWU7Z0JBVTdCLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcG9ydFJlcXVlc3RTY29wZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvcmVwb3J0LXJlcXVlc3Qtc2NvcGUnO1xuaW1wb3J0IHsgbm9ybWFsaXplUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uL3BlcnNpc3RlbmNlL3NlcnZpY2VzL3NjaGVtYS12YWxpZGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJ3YXlzUmVwb3J0Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS9jb25maWcvYndheXMtcmVwb3J0LWNvbmZpZyc7XG5pbXBvcnQgeyBEZXNpZ25lckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Rlc2lnbmVyLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIEluamVjdG9yLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkluaXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9yZXBvcnQtcGVyc2lzdGVuY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvZGF0YS1zb3VyY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVzaWduZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Rlc2lnbmVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERpYWxvZywgRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RpYWxvZyc7XG5pbXBvcnQgeyBSRVBPUlRJTkdfQ09ORklHIH0gZnJvbSAnLi4vLi4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBSZXBvcnRTYXZlZERpYWxvZ0NvbXBvbmVudCwgUmVwb3J0U2F2ZWREaWFsb2dSZXN1bHQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGlhbG9ncy9yZXBvcnQtc2F2ZWQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZXNpZ25lclRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdG9vbGJhci9kZXNpZ25lci10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21wb25lbnRQYWxldHRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbXBvbmVudC1wYWxldHRlL2NvbXBvbmVudC1wYWxldHRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZXNpZ25DYW52YXNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGVzaWduLWNhbnZhcy9kZXNpZ24tY2FudmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9wZXJ0eUVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm9wZXJ0eS1lZGl0b3IvcHJvcGVydHktZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRSdW50aW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vcnVudGltZS9yZXBvcnQtcnVudGltZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0RXhlY3V0aW9uU2VydmljZSB9IGZyb20gJy4uL3J1bnRpbWUvcmVwb3J0LWV4ZWN1dGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBCd2F5c1JlcG9ydEFwaVVybHMgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9lbmRwb2ludC10b2tlbnMnO1xuaW1wb3J0IHsgRGVzaWduZXJFbmRwb2ludHNTZXJ2aWNlLCBERVNJR05FUl9FTkRQT0lOVF9QUk9WSURFUlMgfSBmcm9tICcuL3NlcnZpY2VzL2Rlc2lnbmVyLWVuZHBvaW50cy5zZXJ2aWNlJztcblxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWRlc2lnbmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgRGVzaWduZXJUb29sYmFyQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQsXG4gICAgRGVzaWduQ2FudmFzQ29tcG9uZW50LFxuICAgIFByb3BlcnR5RWRpdG9yQ29tcG9uZW50LFxuICAgIFJlcG9ydFJ1bnRpbWVDb21wb25lbnQsXG4gICAgUnB0SWNvbkNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbRGVzaWduZXJTdGF0ZVNlcnZpY2UsIC4uLkRFU0lHTkVSX0VORFBPSU5UX1BST1ZJREVSU10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRlc2lnbmVyLXNoZWxsXCI+XG4gICAgICBAaWYgKGxvYWRFcnJvcigpKSB7IDxkaXYgcm9sZT1cImFsZXJ0XCI+e3sgbG9hZEVycm9yKCkgfX0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJldHJ5TG9hZCgpXCI+UmV0cnk8L2J1dHRvbj48L2Rpdj4gfVxuICAgICAgPCEtLSBUb3AgQWN0aW9ucyBUb29sYmFyIHdpdGggU2lkZWJhciBDb250cm9scyAtLT5cbiAgICAgIDxycHQtZGVzaWduZXItdG9vbGJhclxuICAgICAgICBbaXNMZWZ0UGFuZWxDb2xsYXBzZWRdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgIFtpc1JpZ2h0UGFuZWxDb2xsYXBzZWRdPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAodG9nZ2xlTGVmdFBhbmVsKT1cInRvZ2dsZUxlZnRQYW5lbCgpXCJcbiAgICAgICAgKHRvZ2dsZVJpZ2h0UGFuZWwpPVwidG9nZ2xlUmlnaHRQYW5lbCgpXCJcbiAgICAgICAgKHNhdmVSZXF1ZXN0ZWQpPVwib25TYXZlKClcIlxuICAgICAgLz5cblxuICAgICAgPCEtLSBNYWluIDMtUGFuZWwgTGF5b3V0IHdpdGggQ0RLIERyb3AgTGlzdCBHcm91cCBjb25uZWN0aW5nIFBhbGV0dGUgJiBDYW52YXMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduZXItd29ya2JlbmNoXCIgY2RrRHJvcExpc3RHcm91cD5cbiAgICAgICAgPCEtLSBCYWNrZHJvcCBmb3IgY29tcGFjdC9tb2JpbGUgc2xpZGUtb3V0IGRyYXdlcnMgLS0+XG4gICAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicgJiYgKCFpc0xlZnRQYW5lbENvbGxhcHNlZCgpIHx8ICFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKSkpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIndvcmtiZW5jaC1kcmF3ZXItYmFja2Ryb3BcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlQWxsUGFuZWxzKClcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDEuIExlZnQgUGFuZWw6IENvbXBvbmVudCBQYWxldHRlIChvbmx5IHNob3duIGluIGRlc2lnbiBtb2RlKSAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3b3JrYmVuY2gtbGVmdC1jb250YWluZXJcIiBbY2xhc3MuaXMtY29sbGFwc2VkXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIj5cbiAgICAgICAgICAgIDxhc2lkZSBjbGFzcz1cIndvcmtiZW5jaC1sZWZ0LXBhbmVsXCI+XG4gICAgICAgICAgICAgIDxycHQtY29tcG9uZW50LXBhbGV0dGUgKGNvbGxhcHNlUmVxdWVzdGVkKT1cInRvZ2dsZUxlZnRQYW5lbCgpXCIgLz5cbiAgICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDIuIENlbnRlciBQYW5lbDogRGVzaWduIENhbnZhcyBPUiBMaXZlIFByZXZpZXcgT1IgSlNPTiBTY2hlbWEgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwid29ya2JlbmNoLWNlbnRlci1wYW5lbFwiPlxuICAgICAgICAgIEBzd2l0Y2ggKHZpZXdNb2RlKCkpIHtcbiAgICAgICAgICAgIEBjYXNlICgnZGVzaWduJykge1xuICAgICAgICAgICAgICA8cnB0LWRlc2lnbi1jYW52YXMgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgncHJldmlldycpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbW9kZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1iYW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZXllXCIgW3NpemVdPVwiMTVcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TGl2ZSBQcmV2aWV3IE1vZGUg4oCUIFJ1bm5pbmcgd2l0aCBhY3R1YWwgUmVhY3RpdmUgRm9ybXMgJiBEeW5hbWljIEdyaWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHJwdC1ydW50aW1lIFtyZXBvcnRdPVwiY3VycmVudERlZmluaXRpb24oKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdqc29uJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1tb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWVkaXRvci1jYXJkXCIgW2NsYXNzLnRoZW1lLWRhcmtdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIFRvcCBTY2hlbWEgVG9vbGJhciAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWJhbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYW5uZXItbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWJhZGdlLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY29kZVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi10aXRsZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi10aXRsZVwiPlJlcG9ydCBEZWZpbml0aW9uIFNjaGVtYTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXNjaGVtYS10YWdcIj52e3sgY3VycmVudERlZmluaXRpb24oKS5zY2hlbWFWZXJzaW9uIHx8IDEgfX0uMCDigKIgSlNPTjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tbWV0YS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgY3VycmVudERlZmluaXRpb24oKS5jb21wb25lbnRzLmxlbmd0aCB9fTwvc3Ryb25nPiBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtZGl2aWRlclwiPuKAojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sganNvblN0YXRzKCkubGluZXMgfX08L3N0cm9uZz4gbGluZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImpzb24tc3RhdC1kaXZpZGVyXCI+4oCiPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImpzb24tc3RhdC1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sganNvblN0YXRzKCkuc2l6ZUtiIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYW5uZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tanNvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJ3cmFwTGluZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlV3JhcExpbmVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJUb2dnbGUgV29yZCBXcmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImxpc3RcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5XcmFwPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1qc29uLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRWRpdG9yVGhlbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnID8gJ1N3aXRjaCB0byBMaWdodCBUaGVtZScgOiAnU3dpdGNoIHRvIERhcmsgVGhlbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnID8gJ3NwYXJrbGVzJyA6ICdzbGlkZXJzJ1wiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGVkaXRvclRoZW1lKCkgPT09ICdkYXJrJyA/ICdEYXJrJyA6ICdMaWdodCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWpzb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEpzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkRvd25sb2FkIGRlZmluaXRpb24gYXMgSlNPTiBmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImRvd25sb2FkXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+RXhwb3J0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1jb3B5LWpzb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvcGllZF09XCJjb3B5U3RhdHVzKCkgPT09ICdDb3BpZWQhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weUpzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNvcHkgc2NoZW1hIEpTT04gdG8gY2xpcGJvYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiY29weVN0YXR1cygpID09PSAnQ29waWVkIScgPyAnY2hlY2snIDogJ2NvcHknXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29weVN0YXR1cygpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIENvZGUgVmlld3BvcnQgd2l0aCBMaW5lIE51bWJlcnMgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi12aWV3cG9ydFwiIFtjbGFzcy53cmFwLWVuYWJsZWRdPVwid3JhcExpbmVzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tc2Nyb2xsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImpzb24tY29kZS10YWJsZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAobGluZSBvZiBoaWdobGlnaHRlZExpbmVzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImpzb24tY29kZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImpzb24tbGluZS1udW1iZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj57eyAkaW5kZXggKyAxIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImpzb24tbGluZS10ZXh0XCI+PHNwYW4gW2lubmVySFRNTF09XCJsaW5lXCI+PC9zcGFuPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tIDMuIFJpZ2h0IFBhbmVsOiBQcm9wZXJ0eSBFZGl0b3IgKG9ubHkgc2hvd24gaW4gZGVzaWduIG1vZGUpIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtiZW5jaC1yaWdodC1jb250YWluZXJcIiBbY2xhc3MuaXMtY29sbGFwc2VkXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCI+XG4gICAgICAgICAgICA8YXNpZGUgY2xhc3M9XCJ3b3JrYmVuY2gtcmlnaHQtcGFuZWxcIj5cbiAgICAgICAgICAgICAgPHJwdC1wcm9wZXJ0eS1lZGl0b3IgKGNvbGxhcHNlUmVxdWVzdGVkKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiIC8+XG4gICAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb21wYWN0L01vYmlsZSBXb3JrYmVuY2ggQm90dG9tIE5hdmlnYXRpb24gQmFyIC0tPlxuICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICA8bmF2IGNsYXNzPVwiY29tcGFjdC13b3JrYmVuY2gtYmFyXCIgYXJpYS1sYWJlbD1cIk1vYmlsZSBXb3JrYmVuY2ggTmF2aWdhdGlvblwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCIhaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkxlZnRQYW5lbE9ubHkoKVwiXG4gICAgICAgICAgICB0aXRsZT1cIk9wZW4gQ29tcG9uZW50IFBhbGV0dGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwibGF5ZXJzXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+Q29tcG9uZW50czwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpICYmIGlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUFsbFBhbmVscygpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiRnVsbCBDYW52YXMgVmlld1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJlZGl0XCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+Q2FudmFzPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbXBhY3QtbmF2LWJ0blwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblJpZ2h0UGFuZWxPbmx5KClcIlxuICAgICAgICAgICAgdGl0bGU9XCJPcGVuIFByb3BlcnRpZXMgSW5zcGVjdG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInNldHRpbmdzXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+UHJvcGVydGllczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uYXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU2F2ZSBOb3RpZmljYXRpb24gVG9hc3QgLS0+XG4gICAgICBAaWYgKHNhdmVNZXNzYWdlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNhdmUtdG9hc3RcIj5cbiAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgIDxzcGFuPnt7IHNhdmVNZXNzYWdlKCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGZsZXg6IDEgMSAwJTtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXNoZWxsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXdvcmtiZW5jaCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMjY4cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1wYW5lbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCAud29ya2JlbmNoLWxlZnQtcGFuZWwge1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cblxuICAgIC53b3JrYmVuY2gtY2VudGVyLXBhbmVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogNDIwcHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCB7XG4gICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAud29ya2JlbmNoLXJpZ2h0LXBhbmVsIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIuaXMtY29sbGFwc2VkIC53b3JrYmVuY2gtcmlnaHQtcGFuZWwge1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgfVxuXG5cblxuICAgIC5jb21wYWN0LXdvcmtiZW5jaC1iYXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1kcmF3ZXItYmFja2Ryb3Age1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcbiAgICAgIC5jb21wYWN0LXdvcmtiZW5jaC1iYXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgICAgcGFkZGluZzogMCAxMnB4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgei1pbmRleDogNDU7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBib3gtc2hhZG93OiAwIC0ycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXJwdC1mb250LXdlaWdodC1tZWRpdW0sIDUwMCk7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtc2Vjb25kYXJ5LCAjMzM0MTU1KTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG4gcnB0LWljb24ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICAgIHRyYW5zaXRpb246IGNvbG9yIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG46aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bjpob3ZlciBycHQtaWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuLmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWxpZ2h0LCAjZWZmNmZmKTtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXJwdC1mb250LXdlaWdodC1zZW1pYm9sZCwgNjAwKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMDgpO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bi5hY3RpdmUgcnB0LWljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDFweDtcbiAgICAgIH1cblxuICAgICAgLndvcmtiZW5jaC1kcmF3ZXItYmFja2Ryb3Age1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjM1KTtcbiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDFweCk7XG4gICAgICAgIHotaW5kZXg6IDUwO1xuICAgICAgfVxuXG4gICAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDI4MHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDg1dnc7XG4gICAgICAgIHotaW5kZXg6IDYwO1xuICAgICAgICBib3gtc2hhZG93OiA0cHggMCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgfVxuICAgICAgLndvcmtiZW5jaC1sZWZ0LWNvbnRhaW5lci5pcy1jb2xsYXBzZWQge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICAgICAgICB3aWR0aDogMjgwcHggIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDM4MHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDk1dnc7XG4gICAgICAgIHotaW5kZXg6IDYwO1xuICAgICAgICBib3gtc2hhZG93OiAtNHB4IDAgMjRweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIH1cbiAgICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICAgICAgd2lkdGg6IDM4MHB4ICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8qIFByZXZpZXcgTW9kZSAqL1xuICAgIC5wcmV2aWV3LW1vZGUtY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNWY5O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnByZXZpZXctYmFubmVyIHtcbiAgICAgIG1heC13aWR0aDogMTQwMHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG8gMTZweCBhdXRvO1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiAjMWU0MGFmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JmZGJmZTtcbiAgICAgIHBhZGRpbmc6IDEwcHggMThweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjhyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy14cywgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnByZXZpZXctY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLyogSlNPTiBTY2hlbWEgTW9kZSAtIEVudGVycHJpc2UgTGlnaHQgJiBBZGFwdGFibGUgRGVzaWduICovXG4gICAgLmpzb24tbW9kZS1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmOGZhZmMpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAuanNvbi1lZGl0b3ItY2FyZCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtbGcsIDhweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpLCAwIDFweCAycHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDMpO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjAwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDIwMG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmpzb24tZWRpdG9yLWNhcmQudGhlbWUtZGFyayB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGYxNzJhO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMWUyOTNiO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gICAgfVxuXG4gICAgLyogU3ViLWhlYWRlciBiYW5uZXIgKi9cbiAgICAuanNvbi1iYW5uZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBnYXA6IDE2cHg7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE4cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGVhc2UsIGJvcmRlci1jb2xvciAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLWJhbm5lciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGIxMTIwO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzFlMjkzYjtcbiAgICB9XG5cbiAgICAuanNvbi1iYW5uZXItbGVmdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMTJweDtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG5cbiAgICAuanNvbi1iYWRnZS1pY29uIHtcbiAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1saWdodCwgI2VmZjZmZik7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNywgOTksIDIzNSwgMC4xOCk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tYmFkZ2UtaWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjIpO1xuICAgICAgY29sb3I6ICM2MGE1ZmE7XG4gICAgICBib3JkZXItY29sb3I6IHJnYmEoOTYsIDE2NSwgMjUwLCAwLjMpO1xuICAgIH1cblxuICAgIC5qc29uLXRpdGxlLWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiAycHg7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuXG4gICAgLmpzb24tdGl0bGUtcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuXG4gICAgLmpzb24tdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdGl0bGUge1xuICAgICAgY29sb3I6ICNmMWY1Zjk7XG4gICAgfVxuXG4gICAgLmpzb24tc2NoZW1hLXRhZyB7XG4gICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICAgICAgcGFkZGluZzogMXB4IDdweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmMWY1Zjk7XG4gICAgICBjb2xvcjogIzQ3NTU2OTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXNjaGVtYS10YWcge1xuICAgICAgYmFja2dyb3VuZDogIzFlMjkzYjtcbiAgICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMzM0MTU1O1xuICAgIH1cblxuICAgIC5qc29uLW1ldGEtcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLW1ldGEtcm93IHtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgIH1cblxuICAgIC5qc29uLXN0YXQtcGlsbCBzdHJvbmcge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tc3RhdC1waWxsIHN0cm9uZyB7XG4gICAgICBjb2xvcjogI2NiZDVlMTtcbiAgICB9XG5cbiAgICAuanNvbi1zdGF0LWRpdmlkZXIge1xuICAgICAgY29sb3I6ICNjYmQ1ZTE7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tc3RhdC1kaXZpZGVyIHtcbiAgICAgIGNvbG9yOiAjMzM0MTU1O1xuICAgIH1cblxuICAgIC5qc29uLWJhbm5lci1hY3Rpb25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAuYnRuLWpzb24tYWN0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgcGFkZGluZzogNXB4IDExcHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzMzNDE1NSk7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmJ0bi1qc29uLWFjdGlvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICB9XG5cbiAgICAuYnRuLWpzb24tYWN0aW9uLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1saWdodCwgI2VmZjZmZik7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb24ge1xuICAgICAgYmFja2dyb3VuZDogIzFlMjkzYjtcbiAgICAgIGJvcmRlci1jb2xvcjogIzMzNDE1NTtcbiAgICAgIGNvbG9yOiAjY2JkNWUxO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogIzMzNDE1NTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzQ3NTU2OTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb24uYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpO1xuICAgICAgY29sb3I6ICM2MGE1ZmE7XG4gICAgICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gICAgfVxuXG4gICAgLmJ0bi1jb3B5LWpzb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBwYWRkaW5nOiA1cHggMTNweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgzNywgOTksIDIzNSwgMC4yKTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5idG4tY29weS1qc29uOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cblxuICAgIC5idG4tY29weS1qc29uLmNvcGllZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMTBiOTgxO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgxNiwgMTg1LCAxMjksIDAuMik7XG4gICAgfVxuXG4gICAgLyogVmlld3BvcnQgJiBDb2RlIFRhYmxlICovXG4gICAgLmpzb24tdmlld3BvcnQge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXZpZXdwb3J0IHtcbiAgICAgIGJhY2tncm91bmQ6ICMwZjE3MmE7XG4gICAgfVxuXG4gICAgLmpzb24tc2Nyb2xsLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIH1cblxuICAgIC5qc29uLWNvZGUtdGFibGUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseS1tb25vLCB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlKTtcbiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICB9XG5cbiAgICAuanNvbi1jb2RlLXJvdyB7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEwMG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmpzb24tY29kZS1yb3c6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1jb2RlLXJvdzpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCA0MSwgNTksIDAuNik7XG4gICAgfVxuXG4gICAgLmpzb24tbGluZS1udW1iZXIge1xuICAgICAgd2lkdGg6IDQ0cHg7XG4gICAgICBtaW4td2lkdGg6IDQ0cHg7XG4gICAgICBtYXgtd2lkdGg6IDU2cHg7XG4gICAgICBwYWRkaW5nOiAxcHggMTJweCAxcHggOHB4O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICBjb2xvcjogIzk0YTNiODtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1saW5lLW51bWJlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGIxMTIwO1xuICAgICAgY29sb3I6ICM0NzU1Njk7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICMxZTI5M2I7XG4gICAgfVxuXG4gICAgLmpzb24tbGluZS10ZXh0IHtcbiAgICAgIHBhZGRpbmc6IDFweCAxNnB4O1xuICAgICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICBjb2xvcjogIzFlMjkzYjtcbiAgICB9XG5cbiAgICAud3JhcC1lbmFibGVkIC5qc29uLWxpbmUtdGV4dCB7XG4gICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tbGluZS10ZXh0IHtcbiAgICAgIGNvbG9yOiAjZTJlOGYwO1xuICAgIH1cblxuICAgIC8qIFN5bnRheCBUb2tlbnM6IExpZ2h0IE1vZGUgKENyaXNwICYgSGlnaC1Db250cmFzdCkgKi9cbiAgICAuanNvbi10b2tlbi1rZXkge1xuICAgICAgY29sb3I6ICMxZTQwYWY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLXN0cmluZyB7XG4gICAgICBjb2xvcjogIzA0Nzg1NztcbiAgICB9XG5cbiAgICAuanNvbi10b2tlbi1udW1iZXIge1xuICAgICAgY29sb3I6ICM3YzNhZWQ7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLWJvb2xlYW4ge1xuICAgICAgY29sb3I6ICNkOTc3MDY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLW51bGwge1xuICAgICAgY29sb3I6ICNkYzI2MjY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC8qIFN5bnRheCBUb2tlbnM6IERhcmsgTW9kZSAoQ2FsaWJyYXRlZCBOaWdodCBNb2RlKSAqL1xuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLWtleSB7XG4gICAgICBjb2xvcjogIzYwYTVmYTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tc3RyaW5nIHtcbiAgICAgIGNvbG9yOiAjNGFkZTgwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLW51bWJlciB7XG4gICAgICBjb2xvcjogI2MwODRmYztcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tYm9vbGVhbiB7XG4gICAgICBjb2xvcjogI2ZiYmYyNDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tbnVsbCB7XG4gICAgICBjb2xvcjogI2Y4NzE3MTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuICAgIC8qIFNhdmUgVG9hc3QgTm90aWZpY2F0aW9uICovXG4gICAgLnNhdmUtdG9hc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAyNHB4O1xuICAgICAgcmlnaHQ6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB6LWluZGV4OiAxMDA7XG4gICAgICBhbmltYXRpb246IHJwdC1mYWRlLWluIDIwMG1zIGVhc2U7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgcnB0LWZhZGUtaW4ge1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfVxuICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RzID0gbmV3IFJlcG9ydFJlcXVlc3RTY29wZSgpO1xuICByZWFkb25seSBsb2FkRXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgc2F2ZURpYWxvZ09wZW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludFNjb3BlID0gaW5qZWN0KERlc2lnbmVyRW5kcG9pbnRzU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWd1cmF0aW9uID0gaW5qZWN0KERlc2lnbmVyQ29uZmlnU2VydmljZSk7XG5cbiAgLyoqIFBhZ2UtbG9jYWwgc2V0dGluZ3M7IG9taXR0ZWQgdmFsdWVzIGluaGVyaXQgb3B0aW9uYWwgYXBwbGljYXRpb24gZGVmYXVsdHMuICovXG4gIEBJbnB1dCgpIHNldCBjb25maWcodmFsdWU6IEJ3YXlzUmVwb3J0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZXQodmFsdWUpO1xuICAgIHRoaXMuc2Vzc2lvblNlcnZpY2U/LmNvbmZpZ3VyZURlc2lnbmVyU2Vzc2lvbih2YWx1ZSk7XG4gICAgdGhpcy5lbmRwb2ludFNjb3BlLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKiBPdmVycmlkZSBhbnkgc3Vic2V0IG9mIGNvbmZpZ3VyZWQgVVJMcyBmb3IgdGhpcyBkZXNpZ25lciBhbmQgaXRzIHByZXZpZXcuICovXG4gIEBJbnB1dCgpIHNldCBhcGlVcmwodmFsdWU6IEJ3YXlzUmVwb3J0QXBpVXJscyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmVuZHBvaW50U2NvcGUuc2V0T3ZlcnJpZGVzKHZhbHVlKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGRlc2lnbmVyU3RhdGUgPSBpbmplY3QoRGVzaWduZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RlbmNlQWRhcHRlciA9IGluamVjdChSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YVNvdXJjZUFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGlvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0RXhlY3V0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2cgPSBpbmplY3QoRGlhbG9nLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwb3J0aW5nQ29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgLyoqIE9wdGlvbmFsIHJlcG9ydElkIHRvIGxvYWQgZnJvbSBwZXJzaXN0ZW5jZSBhZGFwdGVyICovXG4gIHJlYWRvbmx5IHJlcG9ydElkID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBPcHRpb25hbCBkZWZpbml0aW9uIHRvIGxvYWQgZGlyZWN0bHkgKi9cbiAgcmVhZG9ubHkgZGVmaW5pdGlvbiA9IGlucHV0PFJlcG9ydERlZmluaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgYWxpYXM6ICdpbml0aWFsUmVwb3J0JyB9KTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIHNhdmVzIHRoZSByZXBvcnQgKi9cbiAgcmVhZG9ubHkgcmVwb3J0U2F2ZWQgPSBvdXRwdXQ8UmVwb3J0RGVmaW5pdGlvbj4oeyBhbGlhczogJ3NhdmUnIH0pO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW5ldmVyIHRoZSByZXBvcnQgZGVmaW5pdGlvbiBjaGFuZ2VzIGluIHRoZSB2aXN1YWwgZGVzaWduZXIgKi9cbiAgcmVhZG9ubHkgZGVmaW5pdGlvbkNoYW5nZWQgPSBvdXRwdXQ8UmVwb3J0RGVmaW5pdGlvbj4oeyBhbGlhczogJ2RlZmluaXRpb25DaGFuZ2UnIH0pO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnREZWZpbml0aW9uID0gdGhpcy5kZXNpZ25lclN0YXRlLmRlZmluaXRpb247XG4gIHJlYWRvbmx5IHZpZXdNb2RlID0gdGhpcy5kZXNpZ25lclN0YXRlLnZpZXdNb2RlO1xuXG4gIHJlYWRvbmx5IHByZXZpZXdEYXRhID0gc2lnbmFsPHVua25vd25bXSB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBzYXZlTWVzc2FnZSA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgY29weVN0YXR1cyA9IHNpZ25hbDxzdHJpbmc+KCdDb3B5IEpTT04nKTtcbiAgcmVhZG9ubHkgaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHRvZ2dsZUxlZnRQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkLnVwZGF0ZSgodikgPT4gIXYpO1xuICB9XG5cbiAgdG9nZ2xlUmlnaHRQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC51cGRhdGUoKHYpID0+ICF2KTtcbiAgfVxuXG4gIG9wZW5MZWZ0UGFuZWxPbmx5KCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gIH1cblxuICBvcGVuUmlnaHRQYW5lbE9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlQWxsUGFuZWxzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmlubmVyV2lkdGggPCA5MDApIHtcbiAgICAgIGlmICghdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCgpICYmICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCgpKSB7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlzQ3RybE9yQ21kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgY29uc3QgaXNJbnB1dCA9IHRhcmdldCAmJiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgKHRhcmdldCBhcyBIVE1MRWxlbWVudCkuaXNDb250ZW50RWRpdGFibGUpO1xuICAgIGlmIChpc0lucHV0KSByZXR1cm47XG5cbiAgICBpZiAoaXNDdHJsT3JDbWQgJiYgIWV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2InKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVMZWZ0UGFuZWwoKTtcbiAgICB9IGVsc2UgaWYgKGlzQ3RybE9yQ21kICYmIGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2InKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVSaWdodFBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgZm9ybWF0dGVkSnNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50RGVmaW5pdGlvbigpLCBudWxsLCAyKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWRpdG9yVGhlbWUgPSBzaWduYWw8J2xpZ2h0JyB8ICdkYXJrJz4oJ2xpZ2h0Jyk7XG4gIHJlYWRvbmx5IHdyYXBMaW5lcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkganNvblN0YXRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmZvcm1hdHRlZEpzb24oKTtcbiAgICBjb25zdCBsaW5lcyA9IGpzb24gPyBqc29uLnNwbGl0KCdcXG4nKS5sZW5ndGggOiAwO1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IEJsb2IoW2pzb25dKS5zaXplO1xuICAgIGNvbnN0IHNpemVLYiA9IGJ5dGVzIDwgMTAyNCA/IGAke2J5dGVzfSBCYCA6IGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYDtcbiAgICByZXR1cm4geyBsaW5lcywgc2l6ZUtiIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhpZ2hsaWdodGVkTGluZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZm9ybWF0dGVkSnNvbigpO1xuICAgIGlmICghanNvbikgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnN5bnRheEhpZ2hsaWdodEpzb24oanNvbikuc3BsaXQoJ1xcbicpO1xuICB9KTtcblxuICBwcml2YXRlIGxvYWRlZFJlcG9ydElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsb2FkZWRSZXBvcnREZWY6IFJlcG9ydERlZmluaXRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZERlZjogUmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGxldCBwcmV2aW91c0NvbnRleHQgPSAnJztcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucmVxdWVzdHMuY29udGV4dCgpO1xuICAgICAgaWYgKGNvbnRleHQgPT09IHByZXZpb3VzQ29udGV4dCkgcmV0dXJuO1xuICAgICAgcHJldmlvdXNDb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7IHRoaXMucmVxdWVzdHMuY2FuY2VsQWxsKCk7IHRoaXMucHJldmlld0RhdGEuc2V0KG51bGwpOyB0aGlzLmxvYWRlZFJlcG9ydElkID0gbnVsbDsgfSk7XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZiA9IHRoaXMuZGVmaW5pdGlvbigpO1xuICAgICAgICBpZiAoIWRlZikgcmV0dXJuO1xuICAgICAgICB0aGlzLnJlcXVlc3RzLmNhbmNlbCgnZGVmaW5pdGlvbicpO1xuXG4gICAgICAgIC8vIFNraXAgaWYgdGhpcyBkZWZpbml0aW9uIGlzIHJlZmVyZW5jZS1pZGVudGljYWwgdG8gd2hhdCB0aGUgZGVzaWduZXIganVzdCBlbWl0dGVkIG9yIGN1cnJlbnQgaW50ZXJuYWwgc3RhdGVcbiAgICAgICAgaWYgKGRlZiA9PT0gdGhpcy5sYXN0RW1pdHRlZERlZiB8fCBkZWYgPT09IHRoaXMuZGVzaWduZXJTdGF0ZS5kZWZpbml0aW9uKCkpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydERlZiA9IGRlZjtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IHJlbG9hZCBpZiByZXBvcnQgSUQgY2hhbmdlZCAoZGlmZmVyZW50IHJlcG9ydCksIG9yIGluaXRpYWwgbG9hZCwgb3IgZXh0ZXJuYWwgZGVmaW5pdGlvbiB3aGVuIG5vdCBhY3RpdmVseSBlZGl0aW5nXG4gICAgICAgIGNvbnN0IGlzTmV3UmVwb3J0ID0gZGVmLmlkICE9PSB0aGlzLmxvYWRlZFJlcG9ydElkO1xuICAgICAgICBpZiAoaXNOZXdSZXBvcnQgfHwgKGRlZiAhPT0gdGhpcy5sb2FkZWRSZXBvcnREZWYgJiYgIXRoaXMuZGVzaWduZXJTdGF0ZS5pc0RpcnR5KCkpKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGRlZi5pZDtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydERlZiA9IGRlZjtcbiAgICAgICAgICB0cnkgeyB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24obm9ybWFsaXplUmVwb3J0RGVmaW5pdGlvbihkZWYpKTsgdGhpcy5sb2FkRXJyb3Iuc2V0KG51bGwpOyB9XG4gICAgICAgICAgY2F0Y2ggKGVycm9yKSB7IHRoaXMubG9hZEVycm9yLnNldChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpOyB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMucmVwb3J0SWQoKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0cy5jb250ZXh0KCk7XG4gICAgICAgIGlmICghaWQgfHwgdGhpcy5kZWZpbml0aW9uKCkpIHsgdGhpcy5yZXF1ZXN0cy5jYW5jZWwoJ2RlZmluaXRpb24nKTsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChpZCAmJiBpZCAhPT0gdGhpcy5sb2FkZWRSZXBvcnRJZCAmJiAhdGhpcy5kZWZpbml0aW9uKCkgJiYgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gaWQ7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0cy5ydW4oJ2RlZmluaXRpb24nLCAoKSA9PiB0aGlzLnBlcnNpc3RlbmNlQWRhcHRlciEubG9hZChpZCkucGlwZShtYXAobm9ybWFsaXplUmVwb3J0RGVmaW5pdGlvbikpLCBkZWYgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBkZWY7XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oZGVmKTsgdGhpcy5sb2FkRXJyb3Iuc2V0KG51bGwpO1xuICAgICAgICAgIH0sIGVycm9yID0+IHsgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IG51bGw7IHRoaXMubG9hZEVycm9yLnNldChlcnJvci5tZXNzYWdlKTsgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbigpO1xuICAgICAgaWYgKHRoaXMuZGVzaWduZXJTdGF0ZS5pc0RpcnR5KCkpIHtcbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZERlZiA9IGN1cnJlbnQ7XG4gICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gY3VycmVudDtcbiAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGN1cnJlbnQuaWQ7XG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbkNoYW5nZWQuZW1pdChjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA5MDApIHtcbiAgICAgICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPCAxMjAwKSB7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbigpICYmICF0aGlzLnJlcG9ydElkKCkpIHtcbiAgICAgIC8vIFN0YXJ0IHdpdGggYSBjbGVhbiByZXBvcnQgZGVmaW5pdGlvblxuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKHtcbiAgICAgICAgaWQ6IGBycHQtJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOCl9YCxcbiAgICAgICAgbmFtZTogJ05ldyBDdXN0b20gUmVwb3J0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdWaXN1YWxseSBkZXNpZ25lZCByZXBvcnRpbmcgcGFnZSBjcmVhdGVkIHdpdGggQldheXMtUmVwb3J0LicsXG4gICAgICAgIHNjaGVtYVZlcnNpb246IDEsXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGxheW91dDogeyBjb2x1bW5zOiAxMiwgZ2FwOiAxNiwgcGFkZGluZzogMjQsIGRpcmVjdGlvbjogJ2x0cicgfSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxuICAgICAgICBkYXRhU291cmNlczogW10sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXRyeUxvYWQoKTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnJlcG9ydElkKCk7XG4gICAgaWYgKCFpZCB8fCAhdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHJldHVybjtcbiAgICB0aGlzLnJlcXVlc3RzLnJ1bignZGVmaW5pdGlvbicsICgpID0+IHRoaXMucGVyc2lzdGVuY2VBZGFwdGVyIS5sb2FkKGlkKS5waXBlKG1hcChub3JtYWxpemVSZXBvcnREZWZpbml0aW9uKSksIGRlZiA9PiB7XG4gICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gaWQ7IHRoaXMubG9hZGVkUmVwb3J0RGVmID0gZGVmO1xuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKGRlZik7IHRoaXMubG9hZEVycm9yLnNldChudWxsKTtcbiAgICB9LCBlcnJvciA9PiB0aGlzLmxvYWRFcnJvci5zZXQoZXJyb3IubWVzc2FnZSkpO1xuICB9XG5cbiAgb25TYXZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNhdmVEaWFsb2dPcGVuKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmRpYWxvZykge1xuICAgICAgdGhpcy5zaG93VG9hc3QoJ1RoZSByZXBvcnQgcmV2aWV3IGRpYWxvZyBpcyB1bmF2YWlsYWJsZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgcm91dGVCYXNlID0gdGhpcy5yZXBvcnRpbmdDb25maWc/LnJvdXRlQmFzZSB8fCAncmVwb3J0cyc7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxSZXBvcnRTYXZlZERpYWxvZ1Jlc3VsdCwgeyByZXBvcnQ6IFJlcG9ydERlZmluaXRpb247IHJvdXRlQmFzZT86IHN0cmluZyB9PihcbiAgICAgIFJlcG9ydFNhdmVkRGlhbG9nQ29tcG9uZW50LFxuICAgICAge1xuICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcbiAgICAgICAgZGF0YTogeyByZXBvcnQ6IHRoaXMuY3VycmVudERlZmluaXRpb24oKSwgcm91dGVCYXNlIH0sXG4gICAgICAgIHdpZHRoOiAnbWluKDg2MHB4LCA5MnZ3KScsIG1heFdpZHRoOiAnODYwcHgnLCBtYXhIZWlnaHQ6ICc4NHZoJyxcbiAgICAgICAgcGFuZWxDbGFzczogJ3JwdC1kaWFsb2ctcGFuZWwnLCBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBhcmlhTGFiZWxsZWRCeTogJ2RpYWxvZy10aXRsZScsIGF1dG9Gb2N1czogJyNycHQtZGxnLWlkJyxcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuc2F2ZURpYWxvZ09wZW4gPSB0cnVlO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJEZXN0cm95ID0gdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBkaWFsb2dSZWYuY2xvc2UoKSk7XG4gICAgZGlhbG9nUmVmLmNsb3NlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIHVucmVnaXN0ZXJEZXN0cm95KCk7XG4gICAgICB0aGlzLnNhdmVEaWFsb2dPcGVuID0gZmFsc2U7XG4gICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuO1xuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLnVwZGF0ZVJlcG9ydFNldHRpbmdzKHJlc3VsdC5yZXBvcnQpO1xuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLm1hcmtTYXZlZCgpO1xuICAgICAgdGhpcy5yZXBvcnRTYXZlZC5lbWl0KHJlc3VsdC5yZXBvcnQpO1xuICAgICAgdGhpcy5zaG93VG9hc3QoJ1JlcG9ydCBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSAnb3Blbl9saXZlX3BhZ2UnKSB7XG4gICAgICAgIGNvbnN0IHNsdWcgPSByZXN1bHQucmVwb3J0LnNsdWcgfHwgcmVzdWx0LnJlcG9ydC5pZDtcbiAgICAgICAgY29uc3QgdXJsID0gJy8nICsgcm91dGVCYXNlLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSArICcvJyArIHNsdWc7XG4gICAgICAgIGlmICh0aGlzLnJvdXRlcikgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25QcmV2aWV3RXhlY3V0ZShldmVudDoge1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5leGVjdXRpb25TZXJ2aWNlKSB7XG4gICAgICB0aGlzLnJlcXVlc3RzLnJ1bigncHJldmlldycsICgpID0+IHRoaXMuZXhlY3V0aW9uU2VydmljZSEuZXhlY3V0ZShldmVudC5kZWZpbml0aW9uLCBldmVudC5wYXJhbWV0ZXJzKSxcbiAgICAgICAgZGF0YSA9PiB0aGlzLnByZXZpZXdEYXRhLnNldChkYXRhKSwgZXJyb3IgPT4gdGhpcy5sb2FkRXJyb3Iuc2V0KGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBncmlkID0gZXZlbnQuZGVmaW5pdGlvbi5ncmlkO1xuICAgIGlmICghZ3JpZCkge1xuICAgICAgY29uc29sZS53YXJuKCdbRGVzaWduZXIgUHJldmlld10gTm8gZ3JpZCBhdHRhY2hlZCB0byByZXBvcnQgZGVmaW5pdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZHMgPSBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzPy5maW5kKChkKSA9PiBkLmlkID09PSBncmlkLmRhdGFTb3VyY2VJZCk7XG4gICAgaWYgKCFkcyAmJiBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzPy5sZW5ndGggPiAwKSB7XG4gICAgICBkcyA9IGV2ZW50LmRlZmluaXRpb24uZGF0YVNvdXJjZXNbMF07XG4gICAgfVxuXG4gICAgaWYgKCFkcykge1xuICAgICAgLy8gTG9vayBmb3IgU3RvcmVkIFByb2NlZHVyZSBvciBUYWJsZSBjb25maWd1cmVkIG9uIGFueSBjb21wb25lbnQgaW4gdGhlIHJlcG9ydFxuICAgICAgY29uc3QgY29tcFdpdGhFbnRpdHkgPSBldmVudC5kZWZpbml0aW9uLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5kYXRhU291cmNlPy5lbnRpdHlOYW1lKTtcbiAgICAgIGlmIChjb21wV2l0aEVudGl0eT8uZGF0YVNvdXJjZT8uZW50aXR5TmFtZSkge1xuICAgICAgICBkcyA9IHtcbiAgICAgICAgICBpZDogJ3NwLScgKyBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgbmFtZTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIGVuZHBvaW50OiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgc2NoZW1hOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNjaGVtYSB8fCAnZGJvJyxcbiAgICAgICAgICB0eXBlOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNvdXJjZVR5cGUgfHwgJ3Byb2NlZHVyZScsXG4gICAgICAgICAgbWV0aG9kOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICd0YWJsZScgPyAnR0VUJyA6ICdTVE9SRURfUFJPQ0VEVVJFJyxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nczogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5wYXJhbWV0ZXJNYXBwaW5ncyxcbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkcykge1xuICAgICAgZHMgPSB7XG4gICAgICAgIGlkOiAnZGVmYXVsdC1kcycsXG4gICAgICAgIG5hbWU6ICdSZXBvcnQgRGF0YScsXG4gICAgICAgIGVuZHBvaW50OiAnZGVmYXVsdCcsXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZUFkYXB0ZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0Rlc2lnbmVyIFByZXZpZXddIE5vIGRhdGFTb3VyY2VBZGFwdGVyIGF2YWlsYWJsZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgY29uc3QgY29tcE1hcHBpbmdzID0gKGRzIGFzIGFueSk/LnBhcmFtZXRlck1hcHBpbmdzIHx8IHt9O1xuICAgIGNvbnN0IGV4ZWN1dGlvblBhcmFtcyA9IHsgLi4uY29tcE1hcHBpbmdzLCAuLi5zZXNzaW9uLCAuLi5ldmVudC5wYXJhbWV0ZXJzIH07XG5cbiAgICB0aGlzLnJlcXVlc3RzLnJ1bigncHJldmlldycsICgpID0+IHRoaXMuZGF0YVNvdXJjZUFkYXB0ZXIhLmV4ZWN1dGUoZHMhLCBleGVjdXRpb25QYXJhbXMpLFxuICAgICAgZGF0YSA9PiB0aGlzLnByZXZpZXdEYXRhLnNldChkYXRhKSwgZXJyb3IgPT4gdGhpcy5sb2FkRXJyb3Iuc2V0KGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuXG4gIGNvcHlKc29uKCk6IHZvaWQge1xuICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmZvcm1hdHRlZEpzb24oKSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuY29weVN0YXR1cy5zZXQoJ0NvcGllZCEnKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvcHlTdGF0dXMuc2V0KCdDb3B5IEpTT04nKSwgMjAwMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBkb3dubG9hZEpzb24oKTogdm9pZCB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZm9ybWF0dGVkSnNvbigpO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbanNvbl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODsnIH0pO1xuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBjb25zdCBzbHVnID0gKHRoaXMuY3VycmVudERlZmluaXRpb24oKS5uYW1lIHx8ICdyZXBvcnQnKVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV8tXS9nLCAnLScpO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7c2x1Z30ucmVwb3J0Lmpzb25gO1xuICAgIGxpbmsuY2xpY2soKTtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gIH1cblxuICB0b2dnbGVFZGl0b3JUaGVtZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclRoZW1lLnVwZGF0ZSgoY3VycmVudCkgPT4gKGN1cnJlbnQgPT09ICdsaWdodCcgPyAnZGFyaycgOiAnbGlnaHQnKSk7XG4gIH1cblxuICB0b2dnbGVXcmFwTGluZXMoKTogdm9pZCB7XG4gICAgdGhpcy53cmFwTGluZXMudXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICBwcml2YXRlIHN5bnRheEhpZ2hsaWdodEpzb24oanNvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBlc2NhcGVkID0ganNvblxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG5cbiAgICByZXR1cm4gZXNjYXBlZC5yZXBsYWNlKFxuICAgICAgLyhcIihcXFxcdVthLXpBLVowLTldezR9fFxcXFxbXnVdfFteXFxcXFwiXSkqXCIoXFxzKjopP3xcXGIodHJ1ZXxmYWxzZXxudWxsKVxcYnwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPykvZyxcbiAgICAgIChtYXRjaCkgPT4ge1xuICAgICAgICBsZXQgY2xzID0gJ2pzb24tdG9rZW4tbnVtYmVyJztcbiAgICAgICAgaWYgKC9eXCIvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgICAgaWYgKC86JC8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgICAgIGNscyA9ICdqc29uLXRva2VuLWtleSc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNscyA9ICdqc29uLXRva2VuLXN0cmluZyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKC90cnVlfGZhbHNlLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgIGNscyA9ICdqc29uLXRva2VuLWJvb2xlYW4nO1xuICAgICAgICB9IGVsc2UgaWYgKC9udWxsLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgIGNscyA9ICdqc29uLXRva2VuLW51bGwnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCIke2Nsc31cIj4ke21hdGNofTwvc3Bhbj5gO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNob3dUb2FzdChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmVNZXNzYWdlLnNldChtZXNzYWdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2F2ZU1lc3NhZ2Uuc2V0KG51bGwpLCAzMDAwKTtcbiAgfVxufVxuIl19
|