bways-report 0.1.6 → 0.1.7
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 +293 -464
- package/esm2022/lib/core/config/bways-report-config.mjs +83 -0
- package/esm2022/lib/core/index.mjs +2 -1
- package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
- package/esm2022/lib/core/services/report-data-discovery.service.mjs +6 -3
- package/esm2022/lib/core/services/report-session-context.service.mjs +11 -7
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
- package/esm2022/lib/core/utils/data-normalization.util.mjs +87 -1
- package/esm2022/lib/core/utils/report-parameter.util.mjs +119 -3
- package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +69 -0
- package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +98 -0
- package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +57 -0
- package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +85 -0
- package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +163 -0
- package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +12 -0
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +4 -23
- package/esm2022/lib/data-access/adapters/index.mjs +8 -1
- package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
- package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +12 -2
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +5 -5
- package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +407 -0
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +109 -60
- package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +110 -20
- package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +60 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +11 -5
- package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +15 -3
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +204 -10
- package/esm2022/lib/features/designer/designer.component.mjs +43 -2
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +9 -2
- package/esm2022/lib/features/embed/bways-report-builder.component.mjs +207 -0
- package/esm2022/lib/features/embed/bways-report-menu.component.mjs +433 -0
- package/esm2022/lib/features/embed/bways-report-page.component.mjs +204 -0
- package/esm2022/lib/features/embed/index.mjs +5 -0
- package/esm2022/lib/features/embed/inject-report-menu.mjs +99 -0
- package/esm2022/lib/features/index.mjs +2 -1
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +43 -5
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +4 -4
- package/esm2022/lib/features/routing/index.mjs +2 -2
- package/esm2022/lib/features/routing/models/report-route.models.mjs +1 -1
- package/esm2022/lib/features/routing/report-routes.mjs +42 -1
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +6 -8
- package/esm2022/lib/features/routing/services/report-menu.service.mjs +14 -4
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +22 -3
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +16 -2
- package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +28 -5
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +86 -19
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
- package/esm2022/lib/primitives/components/index.mjs +2 -1
- package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +9 -3
- package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +386 -0
- package/esm2022/lib/provide-reporting.mjs +137 -7
- package/fesm2022/bways-report.mjs +4053 -840
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/config/bways-report-config.d.ts +161 -0
- package/lib/core/index.d.ts +1 -0
- package/lib/core/models/report-definition.model.d.ts +16 -0
- package/lib/core/services/report-session-context.service.d.ts +1 -0
- package/lib/core/tokens/reporting-config.token.d.ts +16 -0
- package/lib/core/utils/data-normalization.util.d.ts +10 -0
- package/lib/core/utils/report-parameter.util.d.ts +18 -1
- package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +13 -0
- package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +14 -0
- package/lib/data-access/adapters/endpoint-masterdata.adapter.d.ts +11 -0
- package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +15 -0
- package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +21 -0
- package/lib/data-access/adapters/endpoint-tokens.d.ts +21 -0
- package/lib/data-access/adapters/index.d.ts +7 -0
- package/lib/data-access/contracts/lookup.contract.d.ts +2 -2
- package/lib/features/designer/components/component-palette/component-palette.component.d.ts +1 -0
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +1 -1
- package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +34 -0
- package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +1 -0
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +12 -2
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +10 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +13 -1
- package/lib/features/designer/designer.component.d.ts +4 -0
- package/lib/features/embed/bways-report-builder.component.d.ts +48 -0
- package/lib/features/embed/bways-report-menu.component.d.ts +40 -0
- package/lib/features/embed/bways-report-page.component.d.ts +61 -0
- package/lib/features/embed/index.d.ts +4 -0
- package/lib/features/embed/inject-report-menu.d.ts +44 -0
- package/lib/features/index.d.ts +1 -0
- package/lib/features/persistence/services/report-store.service.d.ts +5 -0
- package/lib/features/routing/index.d.ts +1 -1
- package/lib/features/routing/models/report-route.models.d.ts +3 -0
- package/lib/features/routing/report-routes.d.ts +40 -0
- package/lib/features/routing/resolvers/report.resolver.d.ts +1 -1
- package/lib/features/runtime/dynamic-renderer.component.d.ts +1 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +1 -1
- package/lib/primitives/components/button/rpt-button.component.d.ts +3 -0
- package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +16 -3
- package/lib/primitives/components/index.d.ts +2 -0
- package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +89 -0
- package/lib/provide-reporting.d.ts +22 -6
- package/package.json +1 -1
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, inject, input, output, signal, } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, inject, input, output, signal, } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
3
4
|
import { DesignerStateService } from '../../services/designer-state.service';
|
|
4
5
|
import { RptIconComponent } from '../../../../primitives/components/icon/rpt-icon.component';
|
|
5
6
|
import { ReportTemplateService } from '../../services/report-template.service';
|
|
7
|
+
import { ReportStoreService } from '../../../persistence/services/report-store.service';
|
|
6
8
|
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/forms";
|
|
7
10
|
export class DesignerToolbarComponent {
|
|
8
11
|
designerState = inject(DesignerStateService);
|
|
9
12
|
templateService = inject(ReportTemplateService);
|
|
13
|
+
reportStore = inject(ReportStoreService, { optional: true });
|
|
10
14
|
definition = this.designerState.definition;
|
|
11
15
|
viewMode = this.designerState.viewMode;
|
|
12
16
|
isDirty = this.designerState.isDirty;
|
|
@@ -14,11 +18,103 @@ export class DesignerToolbarComponent {
|
|
|
14
18
|
canRedo = this.designerState.canRedo;
|
|
15
19
|
isTemplatesModalOpen = signal(false);
|
|
16
20
|
availableBlueprints = this.templateService.getTemplates();
|
|
21
|
+
isEditingName = signal(false);
|
|
22
|
+
nameDraft = signal('');
|
|
23
|
+
reportSummaries = computed(() => this.reportStore?.summaries() ?? []);
|
|
17
24
|
isLeftPanelCollapsed = input(false);
|
|
18
25
|
isRightPanelCollapsed = input(false);
|
|
19
26
|
toggleLeftPanel = output();
|
|
20
27
|
toggleRightPanel = output();
|
|
21
28
|
saveRequested = output();
|
|
29
|
+
constructor() {
|
|
30
|
+
if (this.reportStore) {
|
|
31
|
+
try {
|
|
32
|
+
const sub = this.reportStore.loadSummaries();
|
|
33
|
+
if (sub && typeof sub.subscribe === 'function') {
|
|
34
|
+
sub.subscribe({
|
|
35
|
+
error: () => { },
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Safe fallback in isolated test environments
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
startRename() {
|
|
45
|
+
this.nameDraft.set(this.definition().name || '');
|
|
46
|
+
this.isEditingName.set(true);
|
|
47
|
+
setTimeout(() => {
|
|
48
|
+
const inputEl = document.querySelector('.report-name-input');
|
|
49
|
+
if (inputEl) {
|
|
50
|
+
inputEl.focus();
|
|
51
|
+
inputEl.select();
|
|
52
|
+
}
|
|
53
|
+
}, 20);
|
|
54
|
+
}
|
|
55
|
+
saveRename() {
|
|
56
|
+
if (!this.isEditingName())
|
|
57
|
+
return;
|
|
58
|
+
const trimmed = this.nameDraft().trim();
|
|
59
|
+
this.isEditingName.set(false);
|
|
60
|
+
if (!trimmed || trimmed === this.definition().name) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const updates = { name: trimmed };
|
|
64
|
+
if (!this.definition().slug) {
|
|
65
|
+
updates.slug = this.toSlug(trimmed);
|
|
66
|
+
}
|
|
67
|
+
this.designerState.updateReportSettings(updates);
|
|
68
|
+
}
|
|
69
|
+
cancelRename() {
|
|
70
|
+
this.isEditingName.set(false);
|
|
71
|
+
}
|
|
72
|
+
createNewReport() {
|
|
73
|
+
if (this.isDirty()) {
|
|
74
|
+
const confirmDiscard = confirm('You have unsaved changes on the current report. Do you want to discard them and create a new report?');
|
|
75
|
+
if (!confirmDiscard)
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const newId = `rpt-${Math.random().toString(36).substring(2, 8)}`;
|
|
79
|
+
this.designerState.loadDefinition({
|
|
80
|
+
id: newId,
|
|
81
|
+
name: 'New Custom Report',
|
|
82
|
+
description: 'Visually designed reporting page created with BWays-Report.',
|
|
83
|
+
schemaVersion: 1,
|
|
84
|
+
version: 1,
|
|
85
|
+
layout: { columns: 12, gap: 16, padding: 24, direction: 'ltr' },
|
|
86
|
+
components: [],
|
|
87
|
+
parameters: [],
|
|
88
|
+
dataSources: [],
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
onSwitchReport(reportId) {
|
|
92
|
+
if (!reportId || reportId === this.definition().id)
|
|
93
|
+
return;
|
|
94
|
+
if (this.isDirty()) {
|
|
95
|
+
const confirmDiscard = confirm('You have unsaved changes on the current report. Do you want to discard them and switch to another report?');
|
|
96
|
+
if (!confirmDiscard)
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (this.reportStore) {
|
|
100
|
+
this.reportStore.loadReport(reportId).subscribe({
|
|
101
|
+
next: (def) => {
|
|
102
|
+
this.designerState.loadDefinition(def);
|
|
103
|
+
},
|
|
104
|
+
error: (err) => {
|
|
105
|
+
console.error('[DesignerToolbar] Failed to switch report:', err);
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
toSlug(val) {
|
|
111
|
+
return val
|
|
112
|
+
.toLowerCase()
|
|
113
|
+
.trim()
|
|
114
|
+
.replace(/[^\w\s-]/g, '')
|
|
115
|
+
.replace(/[\s_-]+/g, '-')
|
|
116
|
+
.replace(/^-+|-+$/g, '');
|
|
117
|
+
}
|
|
22
118
|
setMode(mode) {
|
|
23
119
|
this.designerState.setViewMode(mode);
|
|
24
120
|
}
|
|
@@ -81,7 +177,7 @@ export class DesignerToolbarComponent {
|
|
|
81
177
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
82
178
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DesignerToolbarComponent, isStandalone: true, selector: "rpt-designer-toolbar", inputs: { isLeftPanelCollapsed: { classPropertyName: "isLeftPanelCollapsed", publicName: "isLeftPanelCollapsed", isSignal: true, isRequired: false, transformFunction: null }, isRightPanelCollapsed: { classPropertyName: "isRightPanelCollapsed", publicName: "isRightPanelCollapsed", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { toggleLeftPanel: "toggleLeftPanel", toggleRightPanel: "toggleRightPanel", saveRequested: "saveRequested" }, ngImport: i0, template: `
|
|
83
179
|
<div class="toolbar-root">
|
|
84
|
-
<!-- Left: Panel toggle, Title & Dirty indicator -->
|
|
180
|
+
<!-- Left: Panel toggle, Title, Inline Rename, + New Report, Switcher & Dirty indicator -->
|
|
85
181
|
<div class="toolbar-left">
|
|
86
182
|
@if (viewMode() === 'design') {
|
|
87
183
|
<button
|
|
@@ -96,7 +192,56 @@ export class DesignerToolbarComponent {
|
|
|
96
192
|
</button>
|
|
97
193
|
}
|
|
98
194
|
<div class="report-identity">
|
|
99
|
-
|
|
195
|
+
@if (isEditingName()) {
|
|
196
|
+
<input
|
|
197
|
+
type="text"
|
|
198
|
+
class="report-name-input"
|
|
199
|
+
[value]="nameDraft()"
|
|
200
|
+
(input)="nameDraft.set($any($event.target).value)"
|
|
201
|
+
(keydown.enter)="saveRename()"
|
|
202
|
+
(keydown.escape)="cancelRename()"
|
|
203
|
+
(blur)="saveRename()"
|
|
204
|
+
aria-label="Report Name"
|
|
205
|
+
/>
|
|
206
|
+
} @else {
|
|
207
|
+
<span
|
|
208
|
+
class="report-name"
|
|
209
|
+
(dblclick)="startRename()"
|
|
210
|
+
title="Double-click to rename report"
|
|
211
|
+
>
|
|
212
|
+
{{ definition().name || 'Untitled Report' }}
|
|
213
|
+
</span>
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
<button
|
|
217
|
+
type="button"
|
|
218
|
+
class="btn-new-report"
|
|
219
|
+
(click)="createNewReport()"
|
|
220
|
+
title="Create new report page (+)"
|
|
221
|
+
aria-label="Create new report page"
|
|
222
|
+
>
|
|
223
|
+
<rpt-icon name="plus" [size]="12" />
|
|
224
|
+
</button>
|
|
225
|
+
|
|
226
|
+
@if (reportSummaries().length > 0) {
|
|
227
|
+
<select
|
|
228
|
+
class="report-switcher-select"
|
|
229
|
+
[value]="definition().id"
|
|
230
|
+
(change)="onSwitchReport($any($event.target).value)"
|
|
231
|
+
title="Switch report"
|
|
232
|
+
aria-label="Switch report"
|
|
233
|
+
>
|
|
234
|
+
<option [value]="definition().id" disabled selected hidden>
|
|
235
|
+
{{ definition().name || 'Current Report' }}
|
|
236
|
+
</option>
|
|
237
|
+
@for (item of reportSummaries(); track item.id) {
|
|
238
|
+
<option [value]="item.id">
|
|
239
|
+
{{ item.name }}
|
|
240
|
+
</option>
|
|
241
|
+
}
|
|
242
|
+
</select>
|
|
243
|
+
}
|
|
244
|
+
|
|
100
245
|
@if (isDirty()) {
|
|
101
246
|
<span class="dirty-badge" title="Unsaved changes">● Unsaved</span>
|
|
102
247
|
}
|
|
@@ -267,13 +412,13 @@ export class DesignerToolbarComponent {
|
|
|
267
412
|
</div>
|
|
268
413
|
}
|
|
269
414
|
</div>
|
|
270
|
-
`, isInline: true, styles: [":host{display:block;background:var(--rpt-color-surface, #ffffff);color:var(--rpt-color-text, #0f172a);height:56px;font-family:var(--rpt-font-family, inherit);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);box-sizing:border-box;position:relative;box-shadow:0 1px 3px #0000000a;z-index:30;flex-shrink:0}.toolbar-root{display:flex;align-items:center;justify-content:flex-start;height:100%;padding:0 16px;gap:8px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;box-sizing:border-box}.toolbar-root::-webkit-scrollbar{display:none}.toolbar-left{display:flex;align-items:center;gap:8px;min-width:0;flex-shrink:0}.toolbar-right{display:flex;align-items:center;gap:6px;min-width:0;flex-shrink:0;margin-left:auto;justify-content:flex-end}.toolbar-center{display:flex;align-items:center;justify-content:center;flex-shrink:0;margin:0 auto}.report-identity{display:flex;align-items:center;gap:8px;min-width:0}.report-name{font-weight:600;font-size:.9rem;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}.dirty-badge{font-size:.65rem;font-weight:600;color:#b45309;background:#fef3c7;border:1px solid #fde68a;padding:1px 6px;border-radius:9999px;white-space:nowrap;flex-shrink:0}.mode-pill-group{display:flex;background:#f1f5f9;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);padding:3px;gap:2px;flex-shrink:0}.mode-btn{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-muted, #64748b);background:transparent;border:none;border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.mode-btn:hover{color:var(--rpt-color-text, #0f172a);background:#0000000a}.mode-btn.active{background:#fff;color:var(--rpt-color-primary, #2563eb);font-weight:600;box-shadow:0 1px 3px #00000014}.history-group{display:flex;gap:2px;flex-shrink:0}.tool-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap;flex-shrink:0}.tool-btn:hover:not(:disabled){background:var(--rpt-color-surface-hover, #f8fafc);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-hover, #94a3b8)}.tool-btn:disabled{opacity:.45;cursor:not-allowed}.btn-panel-toggle{padding:6px 8px;color:var(--rpt-color-text-muted, #64748b)}.btn-panel-toggle:hover:not(:disabled){color:var(--rpt-color-text, #0f172a);background:var(--rpt-color-surface-hover, #f8fafc)}.btn-panel-toggle.active{background:#eff6ff;border-color:#bfdbfe;color:var(--rpt-color-primary, #2563eb)}.actions-divider{width:1px;height:20px;background:var(--rpt-color-border, #cbd5e1);flex-shrink:0}.btn-blueprints{background:#faf5ff;border-color:#e9d5ff;color:#7c3aed}.btn-blueprints:hover:not(:disabled){background:#f3e8ff;color:#6d28d9;border-color:#c084fc}.btn-save{background:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);color:#fff;font-weight:600}.btn-save:hover:not(:disabled){background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-export{background:#fff;color:var(--rpt-color-text-secondary, #334155)}.btn-grid-action{background:#f0fdf4;border-color:#bbf7d0;color:#16a34a}.btn-grid-action:hover:not(:disabled){background:#dcfce7;color:#15803d;border-color:#86efac}.btn-grid-configured{background:#eff6ff;border-color:#bfdbfe;color:#2563eb}.btn-grid-configured:hover:not(:disabled){background:#dbeafe;color:#1d4ed8;border-color:#93c5fd}@media (max-width: 1024px){.toolbar-root{padding:0 12px;gap:6px}.report-name{max-width:140px}.btn-blueprints .btn-label,.btn-export .btn-label{display:none}.tool-btn{padding:6px 9px}}@media (max-width: 900px){:host{height:48px}.toolbar-root{padding:0 8px;gap:4px}.btn-panel-toggle{display:none!important}.report-name{max-width:100px;font-size:.8125rem}.actions-divider{display:none}.tool-btn .btn-label{display:none!important}.tool-btn{padding:5px 7px;min-width:30px;height:30px;justify-content:center}.mode-pill-group{padding:2px;gap:1px}.mode-btn{padding:4px 8px;font-size:.725rem;gap:4px}}@media (max-width: 680px){:host{height:46px}.toolbar-root{padding:0 6px;gap:3px}.report-name{max-width:75px;font-size:.75rem}.dirty-badge{font-size:.6rem;padding:1px 4px}.mode-btn .mode-label{display:none}.mode-btn{padding:5px 8px}.tool-btn{min-width:28px;height:28px;padding:4px 6px}.toolbar-right{gap:3px}}.blueprint-backdrop{position:fixed;inset:0;background:#0f172a73;backdrop-filter:blur(4px);z-index:2000;animation:rpt-fade-in .15s ease-out}.blueprint-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(840px,92vw);max-height:85vh;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-xl, 12px);box-shadow:var(--rpt-box-shadow-xl, 0 20px 25px -5px rgba(0, 0, 0, .15));z-index:2001;display:flex;flex-direction:column;overflow:hidden;animation:rpt-modal-in .18s cubic-bezier(.16,1,.3,1)}@keyframes rpt-fade-in{0%{opacity:0}to{opacity:1}}@keyframes rpt-modal-in{0%{transform:translate(-50%,-46%) scale(.96);opacity:0}to{transform:translate(-50%,-50%) scale(1);opacity:1}}.blueprint-modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--rpt-color-border, #cbd5e1);background:var(--rpt-color-surface, #f8fafc)}.blueprint-modal-title{font-size:var(--rpt-font-size-lg, 1.125rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 4px}.blueprint-modal-sub{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.btn-close-modal{background:transparent;border:none;color:var(--rpt-color-text-muted, #64748b);font-size:1.25rem;cursor:pointer;padding:4px;line-height:1;border-radius:4px;transition:all .12s ease}.btn-close-modal:hover{color:var(--rpt-color-text, #0f172a);background:#e2e8f0}.blueprint-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:20px 24px;overflow-y:auto}.blueprint-card{background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);padding:16px;cursor:pointer;display:flex;flex-direction:column;transition:all .15s ease}.blueprint-card:hover{border-color:var(--rpt-color-primary, #2563eb);transform:translateY(-2px);box-shadow:0 8px 24px #2563eb1f}.blueprint-card-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.blueprint-cat-badge{font-size:.65rem;font-weight:600;color:#7c3aed;background:#f5f3ff;border:1px solid #ddd6fe;padding:2px 6px;border-radius:4px}.blueprint-card-icon{color:var(--rpt-color-primary, #2563eb)}.blueprint-card-title{font-size:var(--rpt-font-size-base, .875rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.blueprint-card-desc{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #64748b);line-height:1.4;margin:0 0 16px;flex:1}.blueprint-card-footer{margin-top:auto}.btn-apply-blueprint{width:100%;background:var(--rpt-color-primary, #2563eb);color:#fff;border:none;border-radius:var(--rpt-border-radius, 6px);padding:6px 12px;font-size:.75rem;font-weight:600;cursor:pointer;transition:background .12s ease}.blueprint-card:hover .btn-apply-blueprint{background:var(--rpt-color-primary-hover, #1d4ed8)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
415
|
+
`, isInline: true, styles: [":host{display:block;background:var(--rpt-color-surface, #ffffff);color:var(--rpt-color-text, #0f172a);height:56px;font-family:var(--rpt-font-family, inherit);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);box-sizing:border-box;position:relative;box-shadow:0 1px 3px #0000000a;z-index:30;flex-shrink:0}.toolbar-root{display:flex;align-items:center;justify-content:flex-start;height:100%;padding:0 16px;gap:8px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;box-sizing:border-box}.toolbar-root::-webkit-scrollbar{display:none}.toolbar-left{display:flex;align-items:center;gap:8px;min-width:0;flex-shrink:0}.toolbar-right{display:flex;align-items:center;gap:6px;min-width:0;flex-shrink:0;margin-left:auto;justify-content:flex-end}.toolbar-center{display:flex;align-items:center;justify-content:center;flex-shrink:0;margin:0 auto}.report-identity{display:flex;align-items:center;gap:8px;min-width:0}.report-name{font-weight:600;font-size:.9rem;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px;cursor:pointer;padding:2px 6px;border-radius:4px;border:1px dashed transparent;transition:all .12s ease}.report-name:hover{background:#f1f5f9;border-color:#cbd5e1}.report-name-input{font-weight:600;font-size:.9rem;color:var(--rpt-color-text, #0f172a);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:4px;padding:2px 6px;outline:none;box-shadow:0 0 0 2px #2563eb33;background:#fff;max-width:220px;box-sizing:border-box}.btn-new-report{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;background:#f8fafc;color:var(--rpt-color-text-muted, #64748b);cursor:pointer;transition:all .12s ease}.btn-new-report:hover{background:#e2e8f0;color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb)}.report-switcher-select{height:26px;padding:0 6px;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;background:#f8fafc;color:var(--rpt-color-text, #334155);font-size:.75rem;font-weight:500;cursor:pointer;max-width:140px;outline:none;transition:border-color .12s ease}.report-switcher-select:hover{border-color:#94a3b8}.dirty-badge{font-size:.65rem;font-weight:600;color:#b45309;background:#fef3c7;border:1px solid #fde68a;padding:1px 6px;border-radius:9999px;white-space:nowrap;flex-shrink:0}.mode-pill-group{display:flex;background:#f1f5f9;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);padding:3px;gap:2px;flex-shrink:0}.mode-btn{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-muted, #64748b);background:transparent;border:none;border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.mode-btn:hover{color:var(--rpt-color-text, #0f172a);background:#0000000a}.mode-btn.active{background:#fff;color:var(--rpt-color-primary, #2563eb);font-weight:600;box-shadow:0 1px 3px #00000014}.history-group{display:flex;gap:2px;flex-shrink:0}.tool-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap;flex-shrink:0}.tool-btn:hover:not(:disabled){background:var(--rpt-color-surface-hover, #f8fafc);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-hover, #94a3b8)}.tool-btn:disabled{opacity:.45;cursor:not-allowed}.btn-panel-toggle{padding:6px 8px;color:var(--rpt-color-text-muted, #64748b)}.btn-panel-toggle:hover:not(:disabled){color:var(--rpt-color-text, #0f172a);background:var(--rpt-color-surface-hover, #f8fafc)}.btn-panel-toggle.active{background:#eff6ff;border-color:#bfdbfe;color:var(--rpt-color-primary, #2563eb)}.actions-divider{width:1px;height:20px;background:var(--rpt-color-border, #cbd5e1);flex-shrink:0}.btn-blueprints{background:#faf5ff;border-color:#e9d5ff;color:#7c3aed}.btn-blueprints:hover:not(:disabled){background:#f3e8ff;color:#6d28d9;border-color:#c084fc}.btn-save{background:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);color:#fff;font-weight:600}.btn-save:hover:not(:disabled){background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-export{background:#fff;color:var(--rpt-color-text-secondary, #334155)}.btn-grid-action{background:#f0fdf4;border-color:#bbf7d0;color:#16a34a}.btn-grid-action:hover:not(:disabled){background:#dcfce7;color:#15803d;border-color:#86efac}.btn-grid-configured{background:#eff6ff;border-color:#bfdbfe;color:#2563eb}.btn-grid-configured:hover:not(:disabled){background:#dbeafe;color:#1d4ed8;border-color:#93c5fd}@media (max-width: 1024px){.toolbar-root{padding:0 12px;gap:6px}.report-name{max-width:140px}.btn-blueprints .btn-label,.btn-export .btn-label{display:none}.tool-btn{padding:6px 9px}}@media (max-width: 900px){:host{height:48px}.toolbar-root{padding:0 8px;gap:4px}.btn-panel-toggle{display:none!important}.report-name{max-width:100px;font-size:.8125rem}.actions-divider{display:none}.tool-btn .btn-label{display:none!important}.tool-btn{padding:5px 7px;min-width:30px;height:30px;justify-content:center}.mode-pill-group{padding:2px;gap:1px}.mode-btn{padding:4px 8px;font-size:.725rem;gap:4px}}@media (max-width: 680px){:host{height:46px}.toolbar-root{padding:0 6px;gap:3px}.report-name{max-width:75px;font-size:.75rem}.dirty-badge{font-size:.6rem;padding:1px 4px}.mode-btn .mode-label{display:none}.mode-btn{padding:5px 8px}.tool-btn{min-width:28px;height:28px;padding:4px 6px}.toolbar-right{gap:3px}}.blueprint-backdrop{position:fixed;inset:0;background:#0f172a73;backdrop-filter:blur(4px);z-index:2000;animation:rpt-fade-in .15s ease-out}.blueprint-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(840px,92vw);max-height:85vh;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-xl, 12px);box-shadow:var(--rpt-box-shadow-xl, 0 20px 25px -5px rgba(0, 0, 0, .15));z-index:2001;display:flex;flex-direction:column;overflow:hidden;animation:rpt-modal-in .18s cubic-bezier(.16,1,.3,1)}@keyframes rpt-fade-in{0%{opacity:0}to{opacity:1}}@keyframes rpt-modal-in{0%{transform:translate(-50%,-46%) scale(.96);opacity:0}to{transform:translate(-50%,-50%) scale(1);opacity:1}}.blueprint-modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--rpt-color-border, #cbd5e1);background:var(--rpt-color-surface, #f8fafc)}.blueprint-modal-title{font-size:var(--rpt-font-size-lg, 1.125rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 4px}.blueprint-modal-sub{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.btn-close-modal{background:transparent;border:none;color:var(--rpt-color-text-muted, #64748b);font-size:1.25rem;cursor:pointer;padding:4px;line-height:1;border-radius:4px;transition:all .12s ease}.btn-close-modal:hover{color:var(--rpt-color-text, #0f172a);background:#e2e8f0}.blueprint-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:20px 24px;overflow-y:auto}.blueprint-card{background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);padding:16px;cursor:pointer;display:flex;flex-direction:column;transition:all .15s ease}.blueprint-card:hover{border-color:var(--rpt-color-primary, #2563eb);transform:translateY(-2px);box-shadow:0 8px 24px #2563eb1f}.blueprint-card-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.blueprint-cat-badge{font-size:.65rem;font-weight:600;color:#7c3aed;background:#f5f3ff;border:1px solid #ddd6fe;padding:2px 6px;border-radius:4px}.blueprint-card-icon{color:var(--rpt-color-primary, #2563eb)}.blueprint-card-title{font-size:var(--rpt-font-size-base, .875rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.blueprint-card-desc{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #64748b);line-height:1.4;margin:0 0 16px;flex:1}.blueprint-card-footer{margin-top:auto}.btn-apply-blueprint{width:100%;background:var(--rpt-color-primary, #2563eb);color:#fff;border:none;border-radius:var(--rpt-border-radius, 6px);padding:6px 12px;font-size:.75rem;font-weight:600;cursor:pointer;transition:background .12s ease}.blueprint-card:hover .btn-apply-blueprint{background:var(--rpt-color-primary-hover, #1d4ed8)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
271
416
|
}
|
|
272
417
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerToolbarComponent, decorators: [{
|
|
273
418
|
type: Component,
|
|
274
|
-
args: [{ selector: 'rpt-designer-toolbar', standalone: true, imports: [CommonModule, RptIconComponent], template: `
|
|
419
|
+
args: [{ selector: 'rpt-designer-toolbar', standalone: true, imports: [CommonModule, FormsModule, RptIconComponent], template: `
|
|
275
420
|
<div class="toolbar-root">
|
|
276
|
-
<!-- Left: Panel toggle, Title & Dirty indicator -->
|
|
421
|
+
<!-- Left: Panel toggle, Title, Inline Rename, + New Report, Switcher & Dirty indicator -->
|
|
277
422
|
<div class="toolbar-left">
|
|
278
423
|
@if (viewMode() === 'design') {
|
|
279
424
|
<button
|
|
@@ -288,7 +433,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
288
433
|
</button>
|
|
289
434
|
}
|
|
290
435
|
<div class="report-identity">
|
|
291
|
-
|
|
436
|
+
@if (isEditingName()) {
|
|
437
|
+
<input
|
|
438
|
+
type="text"
|
|
439
|
+
class="report-name-input"
|
|
440
|
+
[value]="nameDraft()"
|
|
441
|
+
(input)="nameDraft.set($any($event.target).value)"
|
|
442
|
+
(keydown.enter)="saveRename()"
|
|
443
|
+
(keydown.escape)="cancelRename()"
|
|
444
|
+
(blur)="saveRename()"
|
|
445
|
+
aria-label="Report Name"
|
|
446
|
+
/>
|
|
447
|
+
} @else {
|
|
448
|
+
<span
|
|
449
|
+
class="report-name"
|
|
450
|
+
(dblclick)="startRename()"
|
|
451
|
+
title="Double-click to rename report"
|
|
452
|
+
>
|
|
453
|
+
{{ definition().name || 'Untitled Report' }}
|
|
454
|
+
</span>
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
<button
|
|
458
|
+
type="button"
|
|
459
|
+
class="btn-new-report"
|
|
460
|
+
(click)="createNewReport()"
|
|
461
|
+
title="Create new report page (+)"
|
|
462
|
+
aria-label="Create new report page"
|
|
463
|
+
>
|
|
464
|
+
<rpt-icon name="plus" [size]="12" />
|
|
465
|
+
</button>
|
|
466
|
+
|
|
467
|
+
@if (reportSummaries().length > 0) {
|
|
468
|
+
<select
|
|
469
|
+
class="report-switcher-select"
|
|
470
|
+
[value]="definition().id"
|
|
471
|
+
(change)="onSwitchReport($any($event.target).value)"
|
|
472
|
+
title="Switch report"
|
|
473
|
+
aria-label="Switch report"
|
|
474
|
+
>
|
|
475
|
+
<option [value]="definition().id" disabled selected hidden>
|
|
476
|
+
{{ definition().name || 'Current Report' }}
|
|
477
|
+
</option>
|
|
478
|
+
@for (item of reportSummaries(); track item.id) {
|
|
479
|
+
<option [value]="item.id">
|
|
480
|
+
{{ item.name }}
|
|
481
|
+
</option>
|
|
482
|
+
}
|
|
483
|
+
</select>
|
|
484
|
+
}
|
|
485
|
+
|
|
292
486
|
@if (isDirty()) {
|
|
293
487
|
<span class="dirty-badge" title="Unsaved changes">● Unsaved</span>
|
|
294
488
|
}
|
|
@@ -459,6 +653,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
459
653
|
</div>
|
|
460
654
|
}
|
|
461
655
|
</div>
|
|
462
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;background:var(--rpt-color-surface, #ffffff);color:var(--rpt-color-text, #0f172a);height:56px;font-family:var(--rpt-font-family, inherit);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);box-sizing:border-box;position:relative;box-shadow:0 1px 3px #0000000a;z-index:30;flex-shrink:0}.toolbar-root{display:flex;align-items:center;justify-content:flex-start;height:100%;padding:0 16px;gap:8px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;box-sizing:border-box}.toolbar-root::-webkit-scrollbar{display:none}.toolbar-left{display:flex;align-items:center;gap:8px;min-width:0;flex-shrink:0}.toolbar-right{display:flex;align-items:center;gap:6px;min-width:0;flex-shrink:0;margin-left:auto;justify-content:flex-end}.toolbar-center{display:flex;align-items:center;justify-content:center;flex-shrink:0;margin:0 auto}.report-identity{display:flex;align-items:center;gap:8px;min-width:0}.report-name{font-weight:600;font-size:.9rem;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}.dirty-badge{font-size:.65rem;font-weight:600;color:#b45309;background:#fef3c7;border:1px solid #fde68a;padding:1px 6px;border-radius:9999px;white-space:nowrap;flex-shrink:0}.mode-pill-group{display:flex;background:#f1f5f9;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);padding:3px;gap:2px;flex-shrink:0}.mode-btn{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-muted, #64748b);background:transparent;border:none;border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.mode-btn:hover{color:var(--rpt-color-text, #0f172a);background:#0000000a}.mode-btn.active{background:#fff;color:var(--rpt-color-primary, #2563eb);font-weight:600;box-shadow:0 1px 3px #00000014}.history-group{display:flex;gap:2px;flex-shrink:0}.tool-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap;flex-shrink:0}.tool-btn:hover:not(:disabled){background:var(--rpt-color-surface-hover, #f8fafc);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-hover, #94a3b8)}.tool-btn:disabled{opacity:.45;cursor:not-allowed}.btn-panel-toggle{padding:6px 8px;color:var(--rpt-color-text-muted, #64748b)}.btn-panel-toggle:hover:not(:disabled){color:var(--rpt-color-text, #0f172a);background:var(--rpt-color-surface-hover, #f8fafc)}.btn-panel-toggle.active{background:#eff6ff;border-color:#bfdbfe;color:var(--rpt-color-primary, #2563eb)}.actions-divider{width:1px;height:20px;background:var(--rpt-color-border, #cbd5e1);flex-shrink:0}.btn-blueprints{background:#faf5ff;border-color:#e9d5ff;color:#7c3aed}.btn-blueprints:hover:not(:disabled){background:#f3e8ff;color:#6d28d9;border-color:#c084fc}.btn-save{background:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);color:#fff;font-weight:600}.btn-save:hover:not(:disabled){background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-export{background:#fff;color:var(--rpt-color-text-secondary, #334155)}.btn-grid-action{background:#f0fdf4;border-color:#bbf7d0;color:#16a34a}.btn-grid-action:hover:not(:disabled){background:#dcfce7;color:#15803d;border-color:#86efac}.btn-grid-configured{background:#eff6ff;border-color:#bfdbfe;color:#2563eb}.btn-grid-configured:hover:not(:disabled){background:#dbeafe;color:#1d4ed8;border-color:#93c5fd}@media (max-width: 1024px){.toolbar-root{padding:0 12px;gap:6px}.report-name{max-width:140px}.btn-blueprints .btn-label,.btn-export .btn-label{display:none}.tool-btn{padding:6px 9px}}@media (max-width: 900px){:host{height:48px}.toolbar-root{padding:0 8px;gap:4px}.btn-panel-toggle{display:none!important}.report-name{max-width:100px;font-size:.8125rem}.actions-divider{display:none}.tool-btn .btn-label{display:none!important}.tool-btn{padding:5px 7px;min-width:30px;height:30px;justify-content:center}.mode-pill-group{padding:2px;gap:1px}.mode-btn{padding:4px 8px;font-size:.725rem;gap:4px}}@media (max-width: 680px){:host{height:46px}.toolbar-root{padding:0 6px;gap:3px}.report-name{max-width:75px;font-size:.75rem}.dirty-badge{font-size:.6rem;padding:1px 4px}.mode-btn .mode-label{display:none}.mode-btn{padding:5px 8px}.tool-btn{min-width:28px;height:28px;padding:4px 6px}.toolbar-right{gap:3px}}.blueprint-backdrop{position:fixed;inset:0;background:#0f172a73;backdrop-filter:blur(4px);z-index:2000;animation:rpt-fade-in .15s ease-out}.blueprint-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(840px,92vw);max-height:85vh;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-xl, 12px);box-shadow:var(--rpt-box-shadow-xl, 0 20px 25px -5px rgba(0, 0, 0, .15));z-index:2001;display:flex;flex-direction:column;overflow:hidden;animation:rpt-modal-in .18s cubic-bezier(.16,1,.3,1)}@keyframes rpt-fade-in{0%{opacity:0}to{opacity:1}}@keyframes rpt-modal-in{0%{transform:translate(-50%,-46%) scale(.96);opacity:0}to{transform:translate(-50%,-50%) scale(1);opacity:1}}.blueprint-modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--rpt-color-border, #cbd5e1);background:var(--rpt-color-surface, #f8fafc)}.blueprint-modal-title{font-size:var(--rpt-font-size-lg, 1.125rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 4px}.blueprint-modal-sub{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.btn-close-modal{background:transparent;border:none;color:var(--rpt-color-text-muted, #64748b);font-size:1.25rem;cursor:pointer;padding:4px;line-height:1;border-radius:4px;transition:all .12s ease}.btn-close-modal:hover{color:var(--rpt-color-text, #0f172a);background:#e2e8f0}.blueprint-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:20px 24px;overflow-y:auto}.blueprint-card{background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);padding:16px;cursor:pointer;display:flex;flex-direction:column;transition:all .15s ease}.blueprint-card:hover{border-color:var(--rpt-color-primary, #2563eb);transform:translateY(-2px);box-shadow:0 8px 24px #2563eb1f}.blueprint-card-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.blueprint-cat-badge{font-size:.65rem;font-weight:600;color:#7c3aed;background:#f5f3ff;border:1px solid #ddd6fe;padding:2px 6px;border-radius:4px}.blueprint-card-icon{color:var(--rpt-color-primary, #2563eb)}.blueprint-card-title{font-size:var(--rpt-font-size-base, .875rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.blueprint-card-desc{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #64748b);line-height:1.4;margin:0 0 16px;flex:1}.blueprint-card-footer{margin-top:auto}.btn-apply-blueprint{width:100%;background:var(--rpt-color-primary, #2563eb);color:#fff;border:none;border-radius:var(--rpt-border-radius, 6px);padding:6px 12px;font-size:.75rem;font-weight:600;cursor:pointer;transition:background .12s ease}.blueprint-card:hover .btn-apply-blueprint{background:var(--rpt-color-primary-hover, #1d4ed8)}\n"] }]
|
|
463
|
-
}] });
|
|
464
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9kZXNpZ25lci9jb21wb25lbnRzL3Rvb2xiYXIvZGVzaWduZXItdG9vbGJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQW9CLE1BQU0sdUNBQXVDLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFFN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFtQixNQUFNLHdDQUF3QyxDQUFDOztBQXluQmhHLE1BQU0sT0FBTyx3QkFBd0I7SUFDbEIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdDLGVBQWUsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUV4RCxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7SUFDM0MsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztJQUNyQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFDckMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO0lBRXJDLG9CQUFvQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUM5QyxtQkFBbUIsR0FB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Q0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERlc2lnbmVyU3RhdGVTZXJ2aWNlLCBEZXNpZ25lclZpZXdNb2RlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGVzaWduZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydEdyaWREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0VGVtcGxhdGVTZXJ2aWNlLCBSZXBvcnRCbHVlcHJpbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQtdGVtcGxhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1kZXNpZ25lci10b29sYmFyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUnB0SWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcm9vdFwiPlxuICAgICAgPCEtLSBMZWZ0OiBQYW5lbCB0b2dnbGUsIFRpdGxlICYgRGlydHkgaW5kaWNhdG9yIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItbGVmdFwiPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInRvb2wtYnRuIGJ0bi1wYW5lbC10b2dnbGVcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCIhaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTGVmdFBhbmVsLmVtaXQoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSA/ICdTaG93IENvbXBvbmVudCBQYWxldHRlIChDdHJsK0IpJyA6ICdIaWRlIENvbXBvbmVudCBQYWxldHRlIChDdHJsK0IpJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKCkgPyAnU2hvdyBDb21wb25lbnQgUGFsZXR0ZSAoQ3RybCtCKScgOiAnSGlkZSBDb21wb25lbnQgUGFsZXR0ZSAoQ3RybCtCKSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwicGFuZWwtbGVmdFwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0LWlkZW50aXR5XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXBvcnQtbmFtZVwiPnt7IGRlZmluaXRpb24oKS5uYW1lIHx8ICdVbnRpdGxlZCBSZXBvcnQnIH19PC9zcGFuPlxuICAgICAgICAgIEBpZiAoaXNEaXJ0eSgpKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpcnR5LWJhZGdlXCIgdGl0bGU9XCJVbnNhdmVkIGNoYW5nZXNcIj7il48gVW5zYXZlZDwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ2VudGVyOiBNb2RlIFN3aXRjaGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlLXBpbGwtZ3JvdXBcIiByb2xlPVwidGFibGlzdFwiIGFyaWEtbGFiZWw9XCJXb3JrYmVuY2ggVmlldyBNb2RlXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIm1vZGUtYnRuXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwidmlld01vZGUoKSA9PT0gJ2Rlc2lnbidcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNldE1vZGUoJ2Rlc2lnbicpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiVmlzdWFsIERlc2lnbiBDYW52YXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZWRpdFwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9kZS1sYWJlbFwiPkRlc2lnbjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibW9kZS1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJ2aWV3TW9kZSgpID09PSAncHJldmlldydcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNldE1vZGUoJ3ByZXZpZXcnKVwiXG4gICAgICAgICAgICB0aXRsZT1cIkxpdmUgUnVudGltZSBQcmV2aWV3XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImV5ZVwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9kZS1sYWJlbFwiPlByZXZpZXc8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIm1vZGUtYnRuXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwidmlld01vZGUoKSA9PT0gJ2pzb24nXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRNb2RlKCdqc29uJylcIlxuICAgICAgICAgICAgdGl0bGU9XCJKU09OIFJlcG9ydCBTY2hlbWFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY29kZVwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9kZS1sYWJlbFwiPkpTT048L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUmlnaHQ6IFVuZG8sIFJlZG8sIEJsdWVwcmludHMsIEdyaWQsIEV4cG9ydCwgU2F2ZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLXJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoaXN0b3J5LWdyb3VwXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInRvb2wtYnRuXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuVW5kbygpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1bmRvKClcIlxuICAgICAgICAgICAgdGl0bGU9XCJVbmRvIChDdHJsK1opXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInVuZG9cIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInRvb2wtYnRuXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuUmVkbygpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZWRvKClcIlxuICAgICAgICAgICAgdGl0bGU9XCJSZWRvIChDdHJsK1kpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInJlZG9cIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidG9vbC1idG4gYnRuLXBhbmVsLXRvZ2dsZVwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUmlnaHRQYW5lbC5lbWl0KClcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpID8gJ1Nob3cgUHJvcGVydHkgRWRpdG9yIChDdHJsK0FsdCtCKScgOiAnSGlkZSBQcm9wZXJ0eSBFZGl0b3IgKEN0cmwrQWx0K0IpJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpID8gJ1Nob3cgUHJvcGVydHkgRWRpdG9yIChDdHJsK0FsdCtCKScgOiAnSGlkZSBQcm9wZXJ0eSBFZGl0b3IgKEN0cmwrQWx0K0IpJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJwYW5lbC1yaWdodFwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICA8IS0tIDEtQ2xpY2sgQmx1ZXByaW50cyBHYWxsZXJ5IEJ1dHRvbiAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwidG9vbC1idG4gYnRuLWJsdWVwcmludHNcIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuVGVtcGxhdGVzTW9kYWwoKVwiXG4gICAgICAgICAgdGl0bGU9XCJTdGFydCBmcm9tIHByZS1jb25maWd1cmVkIGVudGVycHJpc2UgYmx1ZXByaW50c1wiXG4gICAgICAgID5cbiAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImxheWVyc1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1sYWJlbFwiPkJsdWVwcmludHM8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDwhLS0gQWRkIC8gQ29uZmlndXJlIEdyaWQgUXVpY2sgQnV0dG9uIC0tPlxuICAgICAgICBAaWYgKCFkZWZpbml0aW9uKCkuZ3JpZCkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0b29sLWJ0biBidG4tZ3JpZC1hY3Rpb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZFJlc3VsdEdyaWQoKVwiXG4gICAgICAgICAgICB0aXRsZT1cIkF0dGFjaCBhIFJlc3VsdCBEYXRhIEdyaWQgKFVsdHJhR3JpZCAvIFRhYmxlKSB0byB0aGlzIHJlcG9ydFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJ0YWJsZVwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWxhYmVsXCI+KyBBZGQgR3JpZDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInRvb2wtYnRuIGJ0bi1ncmlkLWNvbmZpZ3VyZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEdyaWRTZXR0aW5ncygpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiQ29uZmlndXJlIFJlc3VsdCBEYXRhIEdyaWQgY29sdW1ucyBhbmQgcGFnaW5hdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJ0YWJsZVwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWxhYmVsXCI+R3JpZCAoe3sgZGVmaW5pdGlvbigpLmdyaWQ/LmNvbHVtbnM/Lmxlbmd0aCA/PyAwIH19KTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJ0b29sLWJ0biBidG4tZXhwb3J0XCJcbiAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0SnNvbigpXCJcbiAgICAgICAgICB0aXRsZT1cIkRvd25sb2FkIEpTT04gRGVmaW5pdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImRvd25sb2FkXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWxhYmVsXCI+RXhwb3J0PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJ0b29sLWJ0biBidG4tc2F2ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNhdmVSZXBvcnQoKVwiXG4gICAgICAgICAgdGl0bGU9XCJTYXZlIFJlcG9ydCBEZWZpbml0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwic2F2ZVwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1sYWJlbFwiPlNhdmU8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQmx1ZXByaW50cyBHYWxsZXJ5IE1vZGFsIC0tPlxuICAgICAgQGlmIChpc1RlbXBsYXRlc01vZGFsT3BlbigpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJibHVlcHJpbnQtYmFja2Ryb3BcIiAoY2xpY2spPVwiY2xvc2VUZW1wbGF0ZXNNb2RhbCgpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJibHVlcHJpbnQtbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsPVwiU3RhcnRlciBSZXBvcnQgQmx1ZXByaW50c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJibHVlcHJpbnQtbW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJibHVlcHJpbnQtbW9kYWwtdGl0bGVcIj5TdGFydGVyIFJlcG9ydCBCbHVlcHJpbnRzPC9oMz5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJibHVlcHJpbnQtbW9kYWwtc3ViXCI+Q2hvb3NlIGEgcHJlLWNvbmZpZ3VyZWQgYXJjaGl0ZWN0dXJlIHBhdHRlcm4gdG8ganVtcHN0YXJ0IHJlcG9ydCBjcmVhdGlvbi48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlLW1vZGFsXCIgKGNsaWNrKT1cImNsb3NlVGVtcGxhdGVzTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPuKclTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJibHVlcHJpbnQtZ3JpZFwiPlxuICAgICAgICAgICAgQGZvciAoYnAgb2YgYXZhaWxhYmxlQmx1ZXByaW50czsgdHJhY2sgYnAuaWQpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsdWVwcmludC1jYXJkXCIgKGNsaWNrKT1cImFwcGx5Qmx1ZXByaW50KGJwLmlkKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJibHVlcHJpbnQtY2FyZC10b3BcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmx1ZXByaW50LWNhdC1iYWRnZVwiPnt7IGJwLmNhdGVnb3J5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsdWVwcmludC1jYXJkLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImJwLmljb24gfHwgJ3RhYmxlJ1wiIFtzaXplXT1cIjIwXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImJsdWVwcmludC1jYXJkLXRpdGxlXCI+e3sgYnAubmFtZSB9fTwvaDQ+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJibHVlcHJpbnQtY2FyZC1kZXNjXCI+e3sgYnAuZGVzY3JpcHRpb24gfX08L3A+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsdWVwcmludC1jYXJkLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tYXBwbHktYmx1ZXByaW50XCI+XG4gICAgICAgICAgICAgICAgICAgIFVzZSBCbHVlcHJpbnQg4oaSXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBoZWlnaHQ6IDU2cHg7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcbiAgICAgIHotaW5kZXg6IDMwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC50b29sYmFyLXJvb3Qge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBwYWRkaW5nOiAwIDE2cHg7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAudG9vbGJhci1yb290Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAudG9vbGJhci1sZWZ0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLnRvb2xiYXItcmlnaHQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIH1cbiAgICAudG9vbGJhci1jZW50ZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgfVxuICAgIC5yZXBvcnQtaWRlbnRpdHkge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gICAgLnJlcG9ydC1uYW1lIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDAuOXJlbTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBtYXgtd2lkdGg6IDIyMHB4O1xuICAgIH1cbiAgICAuZGlydHktYmFkZ2Uge1xuICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjYjQ1MzA5O1xuICAgICAgYmFja2dyb3VuZDogI2ZlZjNjNztcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNmZGU2OGE7XG4gICAgICBwYWRkaW5nOiAxcHggNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAubW9kZS1waWxsLWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjFmNWY5O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIHBhZGRpbmc6IDNweDtcbiAgICAgIGdhcDogMnB4O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC5tb2RlLWJ0biB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHBhZGRpbmc6IDVweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbiAgICAubW9kZS1idG46aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gICAgfVxuICAgIC5tb2RlLWJ0bi5hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gICAgfVxuICAgIC5oaXN0b3J5LWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDJweDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAudG9vbC1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzMzNDE1NSk7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC50b29sLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2Y4ZmFmYyk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLWhvdmVyLCAjOTRhM2I4KTtcbiAgICB9XG4gICAgLnRvb2wtYnRuOmRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNDU7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgICAuYnRuLXBhbmVsLXRvZ2dsZSB7XG4gICAgICBwYWRkaW5nOiA2cHggOHB4O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG4gICAgLmJ0bi1wYW5lbC10b2dnbGU6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjhmYWZjKTtcbiAgICB9XG4gICAgLmJ0bi1wYW5lbC10b2dnbGUuYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7XG4gICAgICBib3JkZXItY29sb3I6ICNiZmRiZmU7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgIH1cbiAgICAuYWN0aW9ucy1kaXZpZGVyIHtcbiAgICAgIHdpZHRoOiAxcHg7XG4gICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAuYnRuLWJsdWVwcmludHMge1xuICAgICAgYmFja2dyb3VuZDogI2ZhZjVmZjtcbiAgICAgIGJvcmRlci1jb2xvcjogI2U5ZDVmZjtcbiAgICAgIGNvbG9yOiAjN2MzYWVkO1xuICAgIH1cbiAgICAuYnRuLWJsdWVwcmludHM6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogI2YzZThmZjtcbiAgICAgIGNvbG9yOiAjNmQyOGQ5O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjYzA4NGZjO1xuICAgIH1cbiAgICAuYnRuLXNhdmUge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuICAgIC5idG4tc2F2ZTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG4gICAgLmJ0bi1leHBvcnQge1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgIH1cbiAgICAuYnRuLWdyaWQtYWN0aW9uIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmMGZkZjQ7XG4gICAgICBib3JkZXItY29sb3I6ICNiYmY3ZDA7XG4gICAgICBjb2xvcjogIzE2YTM0YTtcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWFjdGlvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZGNmY2U3O1xuICAgICAgY29sb3I6ICMxNTgwM2Q7XG4gICAgICBib3JkZXItY29sb3I6ICM4NmVmYWM7XG4gICAgfVxuICAgIC5idG4tZ3JpZC1jb25maWd1cmVkIHtcbiAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7XG4gICAgICBib3JkZXItY29sb3I6ICNiZmRiZmU7XG4gICAgICBjb2xvcjogIzI1NjNlYjtcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWNvbmZpZ3VyZWQ6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogI2RiZWFmZTtcbiAgICAgIGNvbG9yOiAjMWQ0ZWQ4O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjOTNjNWZkO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgICAgIC50b29sYmFyLXJvb3Qge1xuICAgICAgICBwYWRkaW5nOiAwIDEycHg7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgfVxuICAgICAgLnJlcG9ydC1uYW1lIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxNDBweDtcbiAgICAgIH1cbiAgICAgIC5idG4tYmx1ZXByaW50cyAuYnRuLWxhYmVsLFxuICAgICAgLmJ0bi1leHBvcnQgLmJ0bi1sYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgICAudG9vbC1idG4ge1xuICAgICAgICBwYWRkaW5nOiA2cHggOXB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xuICAgICAgOmhvc3Qge1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICB9XG4gICAgICAudG9vbGJhci1yb290IHtcbiAgICAgICAgcGFkZGluZzogMCA4cHg7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgfVxuICAgICAgLmJ0bi1wYW5lbC10b2dnbGUge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgICAucmVwb3J0LW5hbWUge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMHB4O1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgIH1cbiAgICAgIC5hY3Rpb25zLWRpdmlkZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgICAgLnRvb2wtYnRuIC5idG4tbGFiZWwge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgICAudG9vbC1idG4ge1xuICAgICAgICBwYWRkaW5nOiA1cHggN3B4O1xuICAgICAgICBtaW4td2lkdGg6IDMwcHg7XG4gICAgICAgIGhlaWdodDogMzBweDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG4gICAgICAubW9kZS1waWxsLWdyb3VwIHtcbiAgICAgICAgcGFkZGluZzogMnB4O1xuICAgICAgICBnYXA6IDFweDtcbiAgICAgIH1cbiAgICAgIC5tb2RlLWJ0biB7XG4gICAgICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43MjVyZW07XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2ODBweCkge1xuICAgICAgOmhvc3Qge1xuICAgICAgICBoZWlnaHQ6IDQ2cHg7XG4gICAgICB9XG4gICAgICAudG9vbGJhci1yb290IHtcbiAgICAgICAgcGFkZGluZzogMCA2cHg7XG4gICAgICAgIGdhcDogM3B4O1xuICAgICAgfVxuICAgICAgLnJlcG9ydC1uYW1lIHtcbiAgICAgICAgbWF4LXdpZHRoOiA3NXB4O1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICB9XG4gICAgICAuZGlydHktYmFkZ2Uge1xuICAgICAgICBmb250LXNpemU6IDAuNnJlbTtcbiAgICAgICAgcGFkZGluZzogMXB4IDRweDtcbiAgICAgIH1cbiAgICAgIC5tb2RlLWJ0biAubW9kZS1sYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgICAubW9kZS1idG4ge1xuICAgICAgICBwYWRkaW5nOiA1cHggOHB4O1xuICAgICAgfVxuICAgICAgLnRvb2wtYnRuIHtcbiAgICAgICAgbWluLXdpZHRoOiAyOHB4O1xuICAgICAgICBoZWlnaHQ6IDI4cHg7XG4gICAgICAgIHBhZGRpbmc6IDRweCA2cHg7XG4gICAgICB9XG4gICAgICAudG9vbGJhci1yaWdodCB7XG4gICAgICAgIGdhcDogM3B4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIEJsdWVwcmludHMgTW9kYWwgKi9cbiAgICAuYmx1ZXByaW50LWJhY2tkcm9wIHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIGluc2V0OiAwO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjQ1KTtcbiAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig0cHgpO1xuICAgICAgei1pbmRleDogMjAwMDtcbiAgICAgIGFuaW1hdGlvbjogcnB0LWZhZGUtaW4gMTUwbXMgZWFzZS1vdXQ7XG4gICAgfVxuICAgIC5ibHVlcHJpbnQtbW9kYWwge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIHdpZHRoOiBtaW4oODQwcHgsIDkydncpO1xuICAgICAgbWF4LWhlaWdodDogODV2aDtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLXhsLCAxMnB4KTtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXJwdC1ib3gtc2hhZG93LXhsLCAwIDIwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xNSkpO1xuICAgICAgei1pbmRleDogMjAwMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGFuaW1hdGlvbjogcnB0LW1vZGFsLWluIDE4MG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHJwdC1mYWRlLWluIHtcbiAgICAgIGZyb20geyBvcGFjaXR5OiAwOyB9XG4gICAgICB0byB7IG9wYWNpdHk6IDE7IH1cbiAgICB9XG4gICAgQGtleWZyYW1lcyBycHQtbW9kYWwtaW4ge1xuICAgICAgZnJvbSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC00NiUpIHNjYWxlKDAuOTYpOyBvcGFjaXR5OiAwOyB9XG4gICAgICB0byB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpOyBvcGFjaXR5OiAxOyB9XG4gICAgfVxuICAgIC5ibHVlcHJpbnQtbW9kYWwtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIHBhZGRpbmc6IDIwcHggMjRweDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICB9XG4gICAgLmJsdWVwcmludC1tb2RhbC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtbGcsIDEuMTI1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgbWFyZ2luOiAwIDAgNHB4IDA7XG4gICAgfVxuICAgIC5ibHVlcHJpbnQtbW9kYWwtc3ViIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAuYnRuLWNsb3NlLW1vZGFsIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHBhZGRpbmc6IDRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDEyMG1zIGVhc2U7XG4gICAgfVxuICAgIC5idG4tY2xvc2UtbW9kYWw6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGJhY2tncm91bmQ6ICNlMmU4ZjA7XG4gICAgfVxuICAgIC5ibHVlcHJpbnQtZ3JpZCB7XG4gICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyNDBweCwgMWZyKSk7XG4gICAgICBnYXA6IDE2cHg7XG4gICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cbiAgICAuYmx1ZXByaW50LWNhcmQge1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtbGcsIDhweCk7XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgZWFzZTtcbiAgICB9XG4gICAgLmJsdWVwcmludC1jYXJkOmhvdmVyIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICAgICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjEyKTtcbiAgICB9XG4gICAgLmJsdWVwcmludC1jYXJkLXRvcCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgfVxuICAgIC5ibHVlcHJpbnQtY2F0LWJhZGdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC42NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogIzdjM2FlZDtcbiAgICAgIGJhY2tncm91bmQ6ICNmNWYzZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkNmZlO1xuICAgICAgcGFkZGluZzogMnB4IDZweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICB9XG4gICAgLmJsdWVwcmludC1jYXJkLWljb24ge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICB9XG4gICAgLmJsdWVwcmludC1jYXJkLXRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1iYXNlLCAwLjg3NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMCAwIDZweCAwO1xuICAgIH1cbiAgICAuYmx1ZXByaW50LWNhcmQtZGVzYyB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgICBtYXJnaW46IDAgMCAxNnB4IDA7XG4gICAgICBmbGV4OiAxO1xuICAgIH1cbiAgICAuYmx1ZXByaW50LWNhcmQtZm9vdGVyIHtcbiAgICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgfVxuICAgIC5idG4tYXBwbHktYmx1ZXByaW50IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLmJsdWVwcmludC1jYXJkOmhvdmVyIC5idG4tYXBwbHktYmx1ZXByaW50IHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJUb29sYmFyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXNpZ25lclN0YXRlID0gaW5qZWN0KERlc2lnbmVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVNlcnZpY2UgPSBpbmplY3QoUmVwb3J0VGVtcGxhdGVTZXJ2aWNlKTtcblxuICByZWFkb25seSBkZWZpbml0aW9uID0gdGhpcy5kZXNpZ25lclN0YXRlLmRlZmluaXRpb247XG4gIHJlYWRvbmx5IHZpZXdNb2RlID0gdGhpcy5kZXNpZ25lclN0YXRlLnZpZXdNb2RlO1xuICByZWFkb25seSBpc0RpcnR5ID0gdGhpcy5kZXNpZ25lclN0YXRlLmlzRGlydHk7XG4gIHJlYWRvbmx5IGNhblVuZG8gPSB0aGlzLmRlc2lnbmVyU3RhdGUuY2FuVW5kbztcbiAgcmVhZG9ubHkgY2FuUmVkbyA9IHRoaXMuZGVzaWduZXJTdGF0ZS5jYW5SZWRvO1xuXG4gIHJlYWRvbmx5IGlzVGVtcGxhdGVzTW9kYWxPcGVuID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgYXZhaWxhYmxlQmx1ZXByaW50czogUmVwb3J0Qmx1ZXByaW50W10gPSB0aGlzLnRlbXBsYXRlU2VydmljZS5nZXRUZW1wbGF0ZXMoKTtcblxuICByZWFkb25seSBpc0xlZnRQYW5lbENvbGxhcHNlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB0b2dnbGVMZWZ0UGFuZWwgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgdG9nZ2xlUmlnaHRQYW5lbCA9IG91dHB1dDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHNhdmVSZXF1ZXN0ZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBzZXRNb2RlKG1vZGU6IERlc2lnbmVyVmlld01vZGUpOiB2b2lkIHtcbiAgICB0aGlzLmRlc2lnbmVyU3RhdGUuc2V0Vmlld01vZGUobW9kZSk7XG4gIH1cblxuICB1bmRvKCk6IHZvaWQge1xuICAgIHRoaXMuZGVzaWduZXJTdGF0ZS51bmRvKCk7XG4gIH1cblxuICByZWRvKCk6IHZvaWQge1xuICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5yZWRvKCk7XG4gIH1cblxuICBzYXZlUmVwb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZVJlcXVlc3RlZC5lbWl0KCk7XG4gIH1cblxuICBvcGVuVGVtcGxhdGVzTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1RlbXBsYXRlc01vZGFsT3Blbi5zZXQodHJ1ZSk7XG4gIH1cblxuICBjbG9zZVRlbXBsYXRlc01vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNUZW1wbGF0ZXNNb2RhbE9wZW4uc2V0KGZhbHNlKTtcbiAgfVxuXG4gIGFwcGx5Qmx1ZXByaW50KGJsdWVwcmludElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdEZWYgPSB0aGlzLnRlbXBsYXRlU2VydmljZS5pbnN0YW50aWF0ZVRlbXBsYXRlKGJsdWVwcmludElkKTtcbiAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24obmV3RGVmKTtcbiAgICB0aGlzLmNsb3NlVGVtcGxhdGVzTW9kYWwoKTtcbiAgfVxuXG4gIGFkZFJlc3VsdEdyaWQoKTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmdEcyA9IHRoaXMuZGVmaW5pdGlvbigpLmRhdGFTb3VyY2VzWzBdO1xuICAgIGNvbnN0IGRlZmF1bHRHcmlkOiBSZXBvcnRHcmlkRGVmaW5pdGlvbiA9IHtcbiAgICAgIGRhdGFTb3VyY2VJZDogZXhpc3RpbmdEcz8uaWQgPz8gJ2RlZmF1bHQnLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7IGZpZWxkOiAnaWQnLCBsYWJlbDogJ0lEJywgZGF0YVR5cGU6ICdudW1iZXInLCB2aXNpYmxlOiB0cnVlLCBzb3J0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGZpZWxkOiAnbmFtZScsIGxhYmVsOiAnTmFtZScsIGRhdGFUeXBlOiAnc3RyaW5nJywgdmlzaWJsZTogdHJ1ZSwgc29ydGFibGU6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHBhZ2luYXRpb246IHRydWUsXG4gICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgICAgc2hvd1Jvd051bWJlcnM6IHRydWUsXG4gICAgICAgIHNob3dGb290ZXI6IHRydWUsXG4gICAgICAgIHNpZGVCYXI6IHRydWUsXG4gICAgICAgIGdsb2JhbFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgc3RhdHVzQmFyOiB0cnVlLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuZGVzaWduZXJTdGF0ZS51cGRhdGVHcmlkU2V0dGluZ3MoZGVmYXVsdEdyaWQpO1xuICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5zZWxlY3RDb21wb25lbnQobnVsbCk7XG4gICAgdGhpcy5kZXNpZ25lclN0YXRlLnNldEFjdGl2ZVRhYignZ3JpZCcpO1xuICB9XG5cbiAgc2VsZWN0R3JpZFNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5zZWxlY3RDb21wb25lbnQobnVsbCk7XG4gICAgdGhpcy5kZXNpZ25lclN0YXRlLnNldEFjdGl2ZVRhYignZ3JpZCcpO1xuICB9XG5cbiAgZXhwb3J0SnNvbigpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhU3RyID1cbiAgICAgICdkYXRhOnRleHQvanNvbjtjaGFyc2V0PXV0Zi04LCcgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmaW5pdGlvbigpLCBudWxsLCAyKSk7XG4gICAgY29uc3QgZG93bmxvYWRBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgZG93bmxvYWRBbmNob3Iuc2V0QXR0cmlidXRlKCdocmVmJywgZGF0YVN0cik7XG4gICAgZG93bmxvYWRBbmNob3Iuc2V0QXR0cmlidXRlKFxuICAgICAgJ2Rvd25sb2FkJyxcbiAgICAgIGAke3RoaXMuZGVmaW5pdGlvbigpLmlkIHx8ICdyZXBvcnQtZGVmaW5pdGlvbid9Lmpzb25gXG4gICAgKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkQW5jaG9yKTtcbiAgICBkb3dubG9hZEFuY2hvci5jbGljaygpO1xuICAgIGRvd25sb2FkQW5jaG9yLnJlbW92ZSgpO1xuICB9XG59XG4iXX0=
|
|
656
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;background:var(--rpt-color-surface, #ffffff);color:var(--rpt-color-text, #0f172a);height:56px;font-family:var(--rpt-font-family, inherit);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);box-sizing:border-box;position:relative;box-shadow:0 1px 3px #0000000a;z-index:30;flex-shrink:0}.toolbar-root{display:flex;align-items:center;justify-content:flex-start;height:100%;padding:0 16px;gap:8px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;box-sizing:border-box}.toolbar-root::-webkit-scrollbar{display:none}.toolbar-left{display:flex;align-items:center;gap:8px;min-width:0;flex-shrink:0}.toolbar-right{display:flex;align-items:center;gap:6px;min-width:0;flex-shrink:0;margin-left:auto;justify-content:flex-end}.toolbar-center{display:flex;align-items:center;justify-content:center;flex-shrink:0;margin:0 auto}.report-identity{display:flex;align-items:center;gap:8px;min-width:0}.report-name{font-weight:600;font-size:.9rem;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px;cursor:pointer;padding:2px 6px;border-radius:4px;border:1px dashed transparent;transition:all .12s ease}.report-name:hover{background:#f1f5f9;border-color:#cbd5e1}.report-name-input{font-weight:600;font-size:.9rem;color:var(--rpt-color-text, #0f172a);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:4px;padding:2px 6px;outline:none;box-shadow:0 0 0 2px #2563eb33;background:#fff;max-width:220px;box-sizing:border-box}.btn-new-report{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;background:#f8fafc;color:var(--rpt-color-text-muted, #64748b);cursor:pointer;transition:all .12s ease}.btn-new-report:hover{background:#e2e8f0;color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb)}.report-switcher-select{height:26px;padding:0 6px;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;background:#f8fafc;color:var(--rpt-color-text, #334155);font-size:.75rem;font-weight:500;cursor:pointer;max-width:140px;outline:none;transition:border-color .12s ease}.report-switcher-select:hover{border-color:#94a3b8}.dirty-badge{font-size:.65rem;font-weight:600;color:#b45309;background:#fef3c7;border:1px solid #fde68a;padding:1px 6px;border-radius:9999px;white-space:nowrap;flex-shrink:0}.mode-pill-group{display:flex;background:#f1f5f9;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);padding:3px;gap:2px;flex-shrink:0}.mode-btn{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-muted, #64748b);background:transparent;border:none;border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.mode-btn:hover{color:var(--rpt-color-text, #0f172a);background:#0000000a}.mode-btn.active{background:#fff;color:var(--rpt-color-primary, #2563eb);font-weight:600;box-shadow:0 1px 3px #00000014}.history-group{display:flex;gap:2px;flex-shrink:0}.tool-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap;flex-shrink:0}.tool-btn:hover:not(:disabled){background:var(--rpt-color-surface-hover, #f8fafc);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-hover, #94a3b8)}.tool-btn:disabled{opacity:.45;cursor:not-allowed}.btn-panel-toggle{padding:6px 8px;color:var(--rpt-color-text-muted, #64748b)}.btn-panel-toggle:hover:not(:disabled){color:var(--rpt-color-text, #0f172a);background:var(--rpt-color-surface-hover, #f8fafc)}.btn-panel-toggle.active{background:#eff6ff;border-color:#bfdbfe;color:var(--rpt-color-primary, #2563eb)}.actions-divider{width:1px;height:20px;background:var(--rpt-color-border, #cbd5e1);flex-shrink:0}.btn-blueprints{background:#faf5ff;border-color:#e9d5ff;color:#7c3aed}.btn-blueprints:hover:not(:disabled){background:#f3e8ff;color:#6d28d9;border-color:#c084fc}.btn-save{background:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);color:#fff;font-weight:600}.btn-save:hover:not(:disabled){background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-export{background:#fff;color:var(--rpt-color-text-secondary, #334155)}.btn-grid-action{background:#f0fdf4;border-color:#bbf7d0;color:#16a34a}.btn-grid-action:hover:not(:disabled){background:#dcfce7;color:#15803d;border-color:#86efac}.btn-grid-configured{background:#eff6ff;border-color:#bfdbfe;color:#2563eb}.btn-grid-configured:hover:not(:disabled){background:#dbeafe;color:#1d4ed8;border-color:#93c5fd}@media (max-width: 1024px){.toolbar-root{padding:0 12px;gap:6px}.report-name{max-width:140px}.btn-blueprints .btn-label,.btn-export .btn-label{display:none}.tool-btn{padding:6px 9px}}@media (max-width: 900px){:host{height:48px}.toolbar-root{padding:0 8px;gap:4px}.btn-panel-toggle{display:none!important}.report-name{max-width:100px;font-size:.8125rem}.actions-divider{display:none}.tool-btn .btn-label{display:none!important}.tool-btn{padding:5px 7px;min-width:30px;height:30px;justify-content:center}.mode-pill-group{padding:2px;gap:1px}.mode-btn{padding:4px 8px;font-size:.725rem;gap:4px}}@media (max-width: 680px){:host{height:46px}.toolbar-root{padding:0 6px;gap:3px}.report-name{max-width:75px;font-size:.75rem}.dirty-badge{font-size:.6rem;padding:1px 4px}.mode-btn .mode-label{display:none}.mode-btn{padding:5px 8px}.tool-btn{min-width:28px;height:28px;padding:4px 6px}.toolbar-right{gap:3px}}.blueprint-backdrop{position:fixed;inset:0;background:#0f172a73;backdrop-filter:blur(4px);z-index:2000;animation:rpt-fade-in .15s ease-out}.blueprint-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(840px,92vw);max-height:85vh;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-xl, 12px);box-shadow:var(--rpt-box-shadow-xl, 0 20px 25px -5px rgba(0, 0, 0, .15));z-index:2001;display:flex;flex-direction:column;overflow:hidden;animation:rpt-modal-in .18s cubic-bezier(.16,1,.3,1)}@keyframes rpt-fade-in{0%{opacity:0}to{opacity:1}}@keyframes rpt-modal-in{0%{transform:translate(-50%,-46%) scale(.96);opacity:0}to{transform:translate(-50%,-50%) scale(1);opacity:1}}.blueprint-modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--rpt-color-border, #cbd5e1);background:var(--rpt-color-surface, #f8fafc)}.blueprint-modal-title{font-size:var(--rpt-font-size-lg, 1.125rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 4px}.blueprint-modal-sub{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.btn-close-modal{background:transparent;border:none;color:var(--rpt-color-text-muted, #64748b);font-size:1.25rem;cursor:pointer;padding:4px;line-height:1;border-radius:4px;transition:all .12s ease}.btn-close-modal:hover{color:var(--rpt-color-text, #0f172a);background:#e2e8f0}.blueprint-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:20px 24px;overflow-y:auto}.blueprint-card{background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);padding:16px;cursor:pointer;display:flex;flex-direction:column;transition:all .15s ease}.blueprint-card:hover{border-color:var(--rpt-color-primary, #2563eb);transform:translateY(-2px);box-shadow:0 8px 24px #2563eb1f}.blueprint-card-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.blueprint-cat-badge{font-size:.65rem;font-weight:600;color:#7c3aed;background:#f5f3ff;border:1px solid #ddd6fe;padding:2px 6px;border-radius:4px}.blueprint-card-icon{color:var(--rpt-color-primary, #2563eb)}.blueprint-card-title{font-size:var(--rpt-font-size-base, .875rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.blueprint-card-desc{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #64748b);line-height:1.4;margin:0 0 16px;flex:1}.blueprint-card-footer{margin-top:auto}.btn-apply-blueprint{width:100%;background:var(--rpt-color-primary, #2563eb);color:#fff;border:none;border-radius:var(--rpt-border-radius, 6px);padding:6px 12px;font-size:.75rem;font-weight:600;cursor:pointer;transition:background .12s ease}.blueprint-card:hover .btn-apply-blueprint{background:var(--rpt-color-primary-hover, #1d4ed8)}\n"] }]
|
|
657
|
+
}], ctorParameters: () => [] });
|
|
658
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9kZXNpZ25lci9jb21wb25lbnRzL3Rvb2xiYXIvZGVzaWduZXItdG9vbGJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBb0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUU3RixPQUFPLEVBQUUscUJBQXFCLEVBQW1CLE1BQU0sd0NBQXdDLENBQUM7QUFDaEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7OztBQXF1QnhGLE1BQU0sT0FBTyx3QkFBd0I7SUFDbEIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdDLGVBQWUsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNoRCxXQUFXLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFckUsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO0lBQzNDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxPQUFPLEdBQUcsSUFBSSxDQUFD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OEJBQUUsV0FBVyw0T0FBRSxnQkFBZ0I7OzRGQSt0QjFDLHdCQUF3QjtrQkFsdUJwQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDLFlBQzVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2T1QsbUJBK2VnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERlc2lnbmVyU3RhdGVTZXJ2aWNlLCBEZXNpZ25lclZpZXdNb2RlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGVzaWduZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydEdyaWREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0VGVtcGxhdGVTZXJ2aWNlLCBSZXBvcnRCbHVlcHJpbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQtdGVtcGxhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wZXJzaXN0ZW5jZS9zZXJ2aWNlcy9yZXBvcnQtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtZGVzaWduZXItdG9vbGJhcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBScHRJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1yb290XCI+XG4gICAgICA8IS0tIExlZnQ6IFBhbmVsIHRvZ2dsZSwgVGl0bGUsIElubGluZSBSZW5hbWUsICsgTmV3IFJlcG9ydCwgU3dpdGNoZXIgJiBEaXJ0eSBpbmRpY2F0b3IgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1sZWZ0XCI+XG4gICAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidG9vbC1idG4gYnRuLXBhbmVsLXRvZ2dsZVwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIiFpc0xlZnRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVMZWZ0UGFuZWwuZW1pdCgpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpID8gJ1Nob3cgQ29tcG9uZW50IFBhbGV0dGUgKEN0cmwrQiknIDogJ0hpZGUgQ29tcG9uZW50IFBhbGV0dGUgKEN0cmwrQiknXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSA/ICdTaG93IENvbXBvbmVudCBQYWxldHRlIChDdHJsK0IpJyA6ICdIaWRlIENvbXBvbmVudCBQYWxldHRlIChDdHJsK0IpJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJwYW5lbC1sZWZ0XCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXBvcnQtaWRlbnRpdHlcIj5cbiAgICAgICAgICBAaWYgKGlzRWRpdGluZ05hbWUoKSkge1xuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZXBvcnQtbmFtZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJuYW1lRHJhZnQoKVwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJuYW1lRHJhZnQuc2V0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZVJlbmFtZSgpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbFJlbmFtZSgpXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwic2F2ZVJlbmFtZSgpXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlcG9ydCBOYW1lXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cInJlcG9ydC1uYW1lXCJcbiAgICAgICAgICAgICAgKGRibGNsaWNrKT1cInN0YXJ0UmVuYW1lKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkRvdWJsZS1jbGljayB0byByZW5hbWUgcmVwb3J0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZGVmaW5pdGlvbigpLm5hbWUgfHwgJ1VudGl0bGVkIFJlcG9ydCcgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLW5ldy1yZXBvcnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZU5ld1JlcG9ydCgpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiQ3JlYXRlIG5ldyByZXBvcnQgcGFnZSAoKylcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNyZWF0ZSBuZXcgcmVwb3J0IHBhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwicGx1c1wiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIEBpZiAocmVwb3J0U3VtbWFyaWVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cInJlcG9ydC1zd2l0Y2hlci1zZWxlY3RcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZGVmaW5pdGlvbigpLmlkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblN3aXRjaFJlcG9ydCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiU3dpdGNoIHJlcG9ydFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTd2l0Y2ggcmVwb3J0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiZGVmaW5pdGlvbigpLmlkXCIgZGlzYWJsZWQgc2VsZWN0ZWQgaGlkZGVuPlxuICAgICAgICAgICAgICAgIHt7IGRlZmluaXRpb24oKS5uYW1lIHx8ICdDdXJyZW50IFJlcG9ydCcgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgcmVwb3J0U3VtbWFyaWVzKCk7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJpdGVtLmlkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChpc0RpcnR5KCkpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlydHktYmFkZ2VcIiB0aXRsZT1cIlVuc2F2ZWQgY2hhbmdlc1wiPuKXjyBVbnNhdmVkPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDZW50ZXI6IE1vZGUgU3dpdGNoZXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGUtcGlsbC1ncm91cFwiIHJvbGU9XCJ0YWJsaXN0XCIgYXJpYS1sYWJlbD1cIldvcmtiZW5jaCBWaWV3IE1vZGVcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibW9kZS1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJ2aWV3TW9kZSgpID09PSAnZGVzaWduJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0TW9kZSgnZGVzaWduJylcIlxuICAgICAgICAgICAgdGl0bGU9XCJWaXN1YWwgRGVzaWduIENhbnZhc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJlZGl0XCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtb2RlLWxhYmVsXCI+RGVzaWduPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJtb2RlLWJ0blwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInZpZXdNb2RlKCkgPT09ICdwcmV2aWV3J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0TW9kZSgncHJldmlldycpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiTGl2ZSBSdW50aW1lIFByZXZpZXdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZXllXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtb2RlLWxhYmVsXCI+UHJldmlldzwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibW9kZS1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJ2aWV3TW9kZSgpID09PSAnanNvbidcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNldE1vZGUoJ2pzb24nKVwiXG4gICAgICAgICAgICB0aXRsZT1cIkpTT04gUmVwb3J0IFNjaGVtYVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJjb2RlXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtb2RlLWxhYmVsXCI+SlNPTjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBSaWdodDogVW5kbywgUmVkbywgQmx1ZXByaW50cywgR3JpZCwgRXhwb3J0LCBTYXZlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhpc3RvcnktZ3JvdXBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidG9vbC1idG5cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5VbmRvKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVuZG8oKVwiXG4gICAgICAgICAgICB0aXRsZT1cIlVuZG8gKEN0cmwrWilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwidW5kb1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidG9vbC1idG5cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5SZWRvKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlZG8oKVwiXG4gICAgICAgICAgICB0aXRsZT1cIlJlZG8gKEN0cmwrWSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwicmVkb1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0b29sLWJ0biBidG4tcGFuZWwtdG9nZ2xlXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiIWlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSaWdodFBhbmVsLmVtaXQoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkKCkgPyAnU2hvdyBQcm9wZXJ0eSBFZGl0b3IgKEN0cmwrQWx0K0IpJyA6ICdIaWRlIFByb3BlcnR5IEVkaXRvciAoQ3RybCtBbHQrQiknXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkKCkgPyAnU2hvdyBQcm9wZXJ0eSBFZGl0b3IgKEN0cmwrQWx0K0IpJyA6ICdIaWRlIFByb3BlcnR5IEVkaXRvciAoQ3RybCtBbHQrQiknXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInBhbmVsLXJpZ2h0XCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtZGl2aWRlclwiPjwvZGl2PlxuXG4gICAgICAgIDwhLS0gMS1DbGljayBCbHVlcHJpbnRzIEdhbGxlcnkgQnV0dG9uIC0tPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJ0b29sLWJ0biBidG4tYmx1ZXByaW50c1wiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5UZW1wbGF0ZXNNb2RhbCgpXCJcbiAgICAgICAgICB0aXRsZT1cIlN0YXJ0IGZyb20gcHJlLWNvbmZpZ3VyZWQgZW50ZXJwcmlzZSBibHVlcHJpbnRzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwibGF5ZXJzXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWxhYmVsXCI+Qmx1ZXByaW50czwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLSBBZGQgLyBDb25maWd1cmUgR3JpZCBRdWljayBCdXR0b24gLS0+XG4gICAgICAgIEBpZiAoIWRlZmluaXRpb24oKS5ncmlkKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInRvb2wtYnRuIGJ0bi1ncmlkLWFjdGlvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkUmVzdWx0R3JpZCgpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiQXR0YWNoIGEgUmVzdWx0IERhdGEgR3JpZCAoVWx0cmFHcmlkIC8gVGFibGUpIHRvIHRoaXMgcmVwb3J0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInRhYmxlXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tbGFiZWxcIj4rIEFkZCBHcmlkPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidG9vbC1idG4gYnRuLWdyaWQtY29uZmlndXJlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0R3JpZFNldHRpbmdzKClcIlxuICAgICAgICAgICAgdGl0bGU9XCJDb25maWd1cmUgUmVzdWx0IERhdGEgR3JpZCBjb2x1bW5zIGFuZCBwYWdpbmF0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInRhYmxlXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tbGFiZWxcIj5HcmlkICh7eyBkZWZpbml0aW9uKCkuZ3JpZD8uY29sdW1ucz8ubGVuZ3RoID8/IDAgfX0pPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtZGl2aWRlclwiPjwvZGl2PlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInRvb2wtYnRuIGJ0bi1leHBvcnRcIlxuICAgICAgICAgIChjbGljayk9XCJleHBvcnRKc29uKClcIlxuICAgICAgICAgIHRpdGxlPVwiRG93bmxvYWQgSlNPTiBEZWZpbml0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZG93bmxvYWRcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tbGFiZWxcIj5FeHBvcnQ8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInRvb2wtYnRuIGJ0bi1zYXZlXCJcbiAgICAgICAgICAoY2xpY2spPVwic2F2ZVJlcG9ydCgpXCJcbiAgICAgICAgICB0aXRsZT1cIlNhdmUgUmVwb3J0IERlZmluaXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJzYXZlXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWxhYmVsXCI+U2F2ZTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBCbHVlcHJpbnRzIEdhbGxlcnkgTW9kYWwgLS0+XG4gICAgICBAaWYgKGlzVGVtcGxhdGVzTW9kYWxPcGVuKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImJsdWVwcmludC1iYWNrZHJvcFwiIChjbGljayk9XCJjbG9zZVRlbXBsYXRlc01vZGFsKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJsdWVwcmludC1tb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiIGFyaWEtbGFiZWw9XCJTdGFydGVyIFJlcG9ydCBCbHVlcHJpbnRzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJsdWVwcmludC1tb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImJsdWVwcmludC1tb2RhbC10aXRsZVwiPlN0YXJ0ZXIgUmVwb3J0IEJsdWVwcmludHM8L2gzPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImJsdWVwcmludC1tb2RhbC1zdWJcIj5DaG9vc2UgYSBwcmUtY29uZmlndXJlZCBhcmNoaXRlY3R1cmUgcGF0dGVybiB0byBqdW1wc3RhcnQgcmVwb3J0IGNyZWF0aW9uLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UtbW9kYWxcIiAoY2xpY2spPVwiY2xvc2VUZW1wbGF0ZXNNb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+4pyVPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJsdWVwcmludC1ncmlkXCI+XG4gICAgICAgICAgICBAZm9yIChicCBvZiBhdmFpbGFibGVCbHVlcHJpbnRzOyB0cmFjayBicC5pZCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmx1ZXByaW50LWNhcmRcIiAoY2xpY2spPVwiYXBwbHlCbHVlcHJpbnQoYnAuaWQpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsdWVwcmludC1jYXJkLXRvcFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJibHVlcHJpbnQtY2F0LWJhZGdlXCI+e3sgYnAuY2F0ZWdvcnkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmx1ZXByaW50LWNhcmQtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiYnAuaWNvbiB8fCAndGFibGUnXCIgW3NpemVdPVwiMjBcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiYmx1ZXByaW50LWNhcmQtdGl0bGVcIj57eyBicC5uYW1lIH19PC9oND5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImJsdWVwcmludC1jYXJkLWRlc2NcIj57eyBicC5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmx1ZXByaW50LWNhcmQtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1hcHBseS1ibHVlcHJpbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgVXNlIEJsdWVwcmludCDihpJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGhlaWdodDogNTZweDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuICAgICAgei1pbmRleDogMzA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLnRvb2xiYXItcm9vdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHBhZGRpbmc6IDAgMTZweDtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTtcbiAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC50b29sYmFyLXJvb3Q6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC50b29sYmFyLWxlZnQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAudG9vbGJhci1yaWdodCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgfVxuICAgIC50b29sYmFyLWNlbnRlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG4gICAgLnJlcG9ydC1pZGVudGl0eSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgICAucmVwb3J0LW5hbWUge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIG1heC13aWR0aDogMjIwcHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBwYWRkaW5nOiAycHggNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHRyYW5zcGFyZW50O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDEyMG1zIGVhc2U7XG4gICAgfVxuICAgIC5yZXBvcnQtbmFtZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjFmNWY5O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjY2JkNWUxO1xuICAgIH1cbiAgICAucmVwb3J0LW5hbWUtaW5wdXQge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIHBhZGRpbmc6IDJweCA2cHg7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMik7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgbWF4LXdpZHRoOiAyMjBweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5idG4tbmV3LXJlcG9ydCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAyNnB4O1xuICAgICAgaGVpZ2h0OiAyNnB4O1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1uZXctcmVwb3J0OmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICNlMmU4ZjA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5yZXBvcnQtc3dpdGNoZXItc2VsZWN0IHtcbiAgICAgIGhlaWdodDogMjZweDtcbiAgICAgIHBhZGRpbmc6IDAgNnB4O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMzM0MTU1KTtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBtYXgtd2lkdGg6IDE0MHB4O1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxMjBtcyBlYXNlO1xuICAgIH1cbiAgICAucmVwb3J0LXN3aXRjaGVyLXNlbGVjdDpob3ZlciB7XG4gICAgICBib3JkZXItY29sb3I6ICM5NGEzYjg7XG4gICAgfVxuICAgIC5kaXJ0eS1iYWRnZSB7XG4gICAgICBmb250LXNpemU6IDAuNjVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICNiNDUzMDk7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmVmM2M3O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2ZkZTY4YTtcbiAgICAgIHBhZGRpbmc6IDFweCA2cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC5tb2RlLXBpbGwtZ3JvdXAge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGJhY2tncm91bmQ6ICNmMWY1Zjk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgcGFkZGluZzogM3B4O1xuICAgICAgZ2FwOiAycHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLm1vZGUtYnRuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgcGFkZGluZzogNXB4IDEycHg7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICAgIC5tb2RlLWJ0bjpob3ZlciB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA0KTtcbiAgICB9XG4gICAgLm1vZGUtYnRuLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcbiAgICB9XG4gICAgLmhpc3RvcnktZ3JvdXAge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGdhcDogMnB4O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC50b29sLWJ0biB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtc2Vjb25kYXJ5LCAjMzM0MTU1KTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLnRvb2wtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjhmYWZjKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgIH1cbiAgICAudG9vbC1idG46ZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC40NTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICAgIC5idG4tcGFuZWwtdG9nZ2xlIHtcbiAgICAgIHBhZGRpbmc6IDZweCA4cHg7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cbiAgICAuYnRuLXBhbmVsLXRvZ2dsZTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmOGZhZmMpO1xuICAgIH1cbiAgICAuYnRuLXBhbmVsLXRvZ2dsZS5hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGJvcmRlci1jb2xvcjogI2JmZGJmZTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5hY3Rpb25zLWRpdmlkZXIge1xuICAgICAgd2lkdGg6IDFweDtcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC5idG4tYmx1ZXByaW50cyB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmFmNWZmO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjZTlkNWZmO1xuICAgICAgY29sb3I6ICM3YzNhZWQ7XG4gICAgfVxuICAgIC5idG4tYmx1ZXByaW50czpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjNlOGZmO1xuICAgICAgY29sb3I6ICM2ZDI4ZDk7XG4gICAgICBib3JkZXItY29sb3I6ICNjMDg0ZmM7XG4gICAgfVxuICAgIC5idG4tc2F2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG4gICAgLmJ0bi1zYXZlOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cbiAgICAuYnRuLWV4cG9ydCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzMzNDE1NSk7XG4gICAgfVxuICAgIC5idG4tZ3JpZC1hY3Rpb24ge1xuICAgICAgYmFja2dyb3VuZDogI2YwZmRmNDtcbiAgICAgIGJvcmRlci1jb2xvcjogI2JiZjdkMDtcbiAgICAgIGNvbG9yOiAjMTZhMzRhO1xuICAgIH1cbiAgICAuYnRuLWdyaWQtYWN0aW9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgICBjb2xvcjogIzE1ODAzZDtcbiAgICAgIGJvcmRlci1jb2xvcjogIzg2ZWZhYztcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWNvbmZpZ3VyZWQge1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGJvcmRlci1jb2xvcjogI2JmZGJmZTtcbiAgICAgIGNvbG9yOiAjMjU2M2ViO1xuICAgIH1cbiAgICAuYnRuLWdyaWQtY29uZmlndXJlZDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZGJlYWZlO1xuICAgICAgY29sb3I6ICMxZDRlZDg7XG4gICAgICBib3JkZXItY29sb3I6ICM5M2M1ZmQ7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgICAgLnRvb2xiYXItcm9vdCB7XG4gICAgICAgIHBhZGRpbmc6IDAgMTJweDtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICB9XG4gICAgICAucmVwb3J0LW5hbWUge1xuICAgICAgICBtYXgtd2lkdGg6IDE0MHB4O1xuICAgICAgfVxuICAgICAgLmJ0bi1ibHVlcHJpbnRzIC5idG4tbGFiZWwsXG4gICAgICAuYnRuLWV4cG9ydCAuYnRuLWxhYmVsIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICAgIC50b29sLWJ0biB7XG4gICAgICAgIHBhZGRpbmc6IDZweCA5cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XG4gICAgICA6aG9zdCB7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgIH1cbiAgICAgIC50b29sYmFyLXJvb3Qge1xuICAgICAgICBwYWRkaW5nOiAwIDhweDtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICB9XG4gICAgICAuYnRuLXBhbmVsLXRvZ2dsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgIC5yZXBvcnQtbmFtZSB7XG4gICAgICAgIG1heC13aWR0aDogMTAwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgfVxuICAgICAgLmFjdGlvbnMtZGl2aWRlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgICAudG9vbC1idG4gLmJ0bi1sYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgIC50b29sLWJ0biB7XG4gICAgICAgIHBhZGRpbmc6IDVweCA3cHg7XG4gICAgICAgIG1pbi13aWR0aDogMzBweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cbiAgICAgIC5tb2RlLXBpbGwtZ3JvdXAge1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIGdhcDogMXB4O1xuICAgICAgfVxuICAgICAgLm1vZGUtYnRuIHtcbiAgICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgICAgZm9udC1zaXplOiAwLjcyNXJlbTtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDY4MHB4KSB7XG4gICAgICA6aG9zdCB7XG4gICAgICAgIGhlaWdodDogNDZweDtcbiAgICAgIH1cbiAgICAgIC50b29sYmFyLXJvb3Qge1xuICAgICAgICBwYWRkaW5nOiAwIDZweDtcbiAgICAgICAgZ2FwOiAzcHg7XG4gICAgICB9XG4gICAgICAucmVwb3J0LW5hbWUge1xuICAgICAgICBtYXgtd2lkdGg6IDc1cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIH1cbiAgICAgIC5kaXJ0eS1iYWRnZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42cmVtO1xuICAgICAgICBwYWRkaW5nOiAxcHggNHB4O1xuICAgICAgfVxuICAgICAgLm1vZGUtYnRuIC5tb2RlLWxhYmVsIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICAgIC5tb2RlLWJ0biB7XG4gICAgICAgIHBhZGRpbmc6IDVweCA4cHg7XG4gICAgICB9XG4gICAgICAudG9vbC1idG4ge1xuICAgICAgICBtaW4td2lkdGg6IDI4cHg7XG4gICAgICAgIGhlaWdodDogMjhweDtcbiAgICAgICAgcGFkZGluZzogNHB4IDZweDtcbiAgICAgIH1cbiAgICAgIC50b29sYmFyLXJpZ2h0IHtcbiAgICAgICAgZ2FwOiAzcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogQmx1ZXByaW50cyBNb2RhbCAqL1xuICAgIC5ibHVlcHJpbnQtYmFja2Ryb3Age1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgaW5zZXQ6IDA7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuNDUpO1xuICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDRweCk7XG4gICAgICB6LWluZGV4OiAyMDAwO1xuICAgICAgYW5pbWF0aW9uOiBycHQtZmFkZS1pbiAxNTBtcyBlYXNlLW91dDtcbiAgICB9XG4gICAgLmJsdWVwcmludC1tb2RhbCB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgd2lkdGg6IG1pbig4NDBweCwgOTJ2dyk7XG4gICAgICBtYXgtaGVpZ2h0OiA4NXZoO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMteGwsIDEycHgpO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3cteGwsIDAgMjBweCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjE1KSk7XG4gICAgICB6LWluZGV4OiAyMDAxO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYW5pbWF0aW9uOiBycHQtbW9kYWwtaW4gMTgwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgcnB0LWZhZGUtaW4ge1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cbiAgICAgIHRvIHsgb3BhY2l0eTogMTsgfVxuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHJwdC1tb2RhbC1pbiB7XG4gICAgICBmcm9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTQ2JSkgc2NhbGUoMC45Nik7IG9wYWNpdHk6IDA7IH1cbiAgICAgIHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMSk7IG9wYWNpdHk6IDE7IH1cbiAgICB9XG4gICAgLmJsdWVwcmludC1tb2RhbC1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgcGFkZGluZzogMjBweCAyNHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgIH1cbiAgICAuYmx1ZXByaW50LW1vZGFsLXRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1sZywgMS4xMjVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDAgMCA0cHggMDtcbiAgICB9XG4gICAgLmJsdWVwcmludC1tb2RhbC1zdWIge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIC5idG4tY2xvc2UtbW9kYWwge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgcGFkZGluZzogNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1jbG9zZS1tb2RhbDpob3ZlciB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgYmFja2dyb3VuZDogI2UyZThmMDtcbiAgICB9XG4gICAgLmJsdWVwcmludC1ncmlkIHtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI0MHB4LCAxZnIpKTtcbiAgICAgIGdhcDogMTZweDtcbiAgICAgIHBhZGRpbmc6IDIwcHggMjRweDtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgfVxuICAgIC5ibHVlcHJpbnQtY2FyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBlYXNlO1xuICAgIH1cbiAgICAuYmx1ZXByaW50LWNhcmQ6aG92ZXIge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMTIpO1xuICAgIH1cbiAgICAuYmx1ZXByaW50LWNhcmQtdG9wIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICB9XG4gICAgLmJsdWVwcmludC1jYXQtYmFkZ2Uge1xuICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjN2MzYWVkO1xuICAgICAgYmFja2dyb3VuZDogI2Y1ZjNmZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ2ZmU7XG4gICAgICBwYWRkaW5nOiAycHggNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cbiAgICAuYmx1ZXByaW50LWNhcmQtaWNvbiB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgIH1cbiAgICAuYmx1ZXByaW50LWNhcmQtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgbWFyZ2luOiAwIDAgNnB4IDA7XG4gICAgfVxuICAgIC5ibHVlcHJpbnQtY2FyZC1kZXNjIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICAgIG1hcmdpbjogMCAwIDE2cHggMDtcbiAgICAgIGZsZXg6IDE7XG4gICAgfVxuICAgIC5ibHVlcHJpbnQtY2FyZC1mb290ZXIge1xuICAgICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICB9XG4gICAgLmJ0bi1hcHBseS1ibHVlcHJpbnQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMjBtcyBlYXNlO1xuICAgIH1cbiAgICAuYmx1ZXByaW50LWNhcmQ6aG92ZXIgLmJ0bi1hcHBseS1ibHVlcHJpbnQge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEZXNpZ25lclRvb2xiYXJDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc2lnbmVyU3RhdGUgPSBpbmplY3QoRGVzaWduZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlU2VydmljZSA9IGluamVjdChSZXBvcnRUZW1wbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydFN0b3JlID0gaW5qZWN0KFJlcG9ydFN0b3JlU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBkZWZpbml0aW9uID0gdGhpcy5kZXNpZ25lclN0YXRlLmRlZmluaXRpb247XG4gIHJlYWRvbmx5IHZpZXdNb2RlID0gdGhpcy5kZXNpZ25lclN0YXRlLnZpZXdNb2RlO1xuICByZWFkb25seSBpc0RpcnR5ID0gdGhpcy5kZXNpZ25lclN0YXRlLmlzRGlydHk7XG4gIHJlYWRvbmx5IGNhblVuZG8gPSB0aGlzLmRlc2lnbmVyU3RhdGUuY2FuVW5kbztcbiAgcmVhZG9ubHkgY2FuUmVkbyA9IHRoaXMuZGVzaWduZXJTdGF0ZS5jYW5SZWRvO1xuXG4gIHJlYWRvbmx5IGlzVGVtcGxhdGVzTW9kYWxPcGVuID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgYXZhaWxhYmxlQmx1ZXByaW50czogUmVwb3J0Qmx1ZXByaW50W10gPSB0aGlzLnRlbXBsYXRlU2VydmljZS5nZXRUZW1wbGF0ZXMoKTtcblxuICByZWFkb25seSBpc0VkaXRpbmdOYW1lID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbmFtZURyYWZ0ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICByZWFkb25seSByZXBvcnRTdW1tYXJpZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlcG9ydFN0b3JlPy5zdW1tYXJpZXMoKSA/PyBbXSk7XG5cbiAgcmVhZG9ubHkgaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdG9nZ2xlTGVmdFBhbmVsID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IHRvZ2dsZVJpZ2h0UGFuZWwgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICByZWFkb25seSBzYXZlUmVxdWVzdGVkID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMucmVwb3J0U3RvcmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN1YiA9IHRoaXMucmVwb3J0U3RvcmUubG9hZFN1bW1hcmllcygpO1xuICAgICAgICBpZiAoc3ViICYmIHR5cGVvZiBzdWIuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgc3ViLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge30sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTYWZlIGZhbGxiYWNrIGluIGlzb2xhdGVkIHRlc3QgZW52aXJvbm1lbnRzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhcnRSZW5hbWUoKTogdm9pZCB7XG4gICAgdGhpcy5uYW1lRHJhZnQuc2V0KHRoaXMuZGVmaW5pdGlvbigpLm5hbWUgfHwgJycpO1xuICAgIHRoaXMuaXNFZGl0aW5nTmFtZS5zZXQodHJ1ZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnJlcG9ydC1uYW1lLWlucHV0JykgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAoaW5wdXRFbCkge1xuICAgICAgICBpbnB1dEVsLmZvY3VzKCk7XG4gICAgICAgIGlucHV0RWwuc2VsZWN0KCk7XG4gICAgICB9XG4gICAgfSwgMjApO1xuICB9XG5cbiAgc2F2ZVJlbmFtZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNFZGl0aW5nTmFtZSgpKSByZXR1cm47XG4gICAgY29uc3QgdHJpbW1lZCA9IHRoaXMubmFtZURyYWZ0KCkudHJpbSgpO1xuICAgIHRoaXMuaXNFZGl0aW5nTmFtZS5zZXQoZmFsc2UpO1xuXG4gICAgaWYgKCF0cmltbWVkIHx8IHRyaW1tZWQgPT09IHRoaXMuZGVmaW5pdGlvbigpLm5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVzOiBQYXJ0aWFsPFJlcG9ydERlZmluaXRpb24+ID0geyBuYW1lOiB0cmltbWVkIH07XG4gICAgaWYgKCF0aGlzLmRlZmluaXRpb24oKS5zbHVnKSB7XG4gICAgICB1cGRhdGVzLnNsdWcgPSB0aGlzLnRvU2x1Zyh0cmltbWVkKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc2lnbmVyU3RhdGUudXBkYXRlUmVwb3J0U2V0dGluZ3ModXBkYXRlcyk7XG4gIH1cblxuICBjYW5jZWxSZW5hbWUoKTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRpbmdOYW1lLnNldChmYWxzZSk7XG4gIH1cblxuICBjcmVhdGVOZXdSZXBvcnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEaXJ0eSgpKSB7XG4gICAgICBjb25zdCBjb25maXJtRGlzY2FyZCA9IGNvbmZpcm0oXG4gICAgICAgICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgb24gdGhlIGN1cnJlbnQgcmVwb3J0LiBEbyB5b3Ugd2FudCB0byBkaXNjYXJkIHRoZW0gYW5kIGNyZWF0ZSBhIG5ldyByZXBvcnQ/J1xuICAgICAgKTtcbiAgICAgIGlmICghY29uZmlybURpc2NhcmQpIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdJZCA9IGBycHQtJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOCl9YDtcbiAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oe1xuICAgICAgaWQ6IG5ld0lkLFxuICAgICAgbmFtZTogJ05ldyBDdXN0b20gUmVwb3J0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVmlzdWFsbHkgZGVzaWduZWQgcmVwb3J0aW5nIHBhZ2UgY3JlYXRlZCB3aXRoIEJXYXlzLVJlcG9ydC4nLFxuICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBsYXlvdXQ6IHsgY29sdW1uczogMTIsIGdhcDogMTYsIHBhZGRpbmc6IDI0LCBkaXJlY3Rpb246ICdsdHInIH0sXG4gICAgICBjb21wb25lbnRzOiBbXSxcbiAgICAgIHBhcmFtZXRlcnM6IFtdLFxuICAgICAgZGF0YVNvdXJjZXM6IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgb25Td2l0Y2hSZXBvcnQocmVwb3J0SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghcmVwb3J0SWQgfHwgcmVwb3J0SWQgPT09IHRoaXMuZGVmaW5pdGlvbigpLmlkKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5pc0RpcnR5KCkpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1EaXNjYXJkID0gY29uZmlybShcbiAgICAgICAgJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBvbiB0aGUgY3VycmVudCByZXBvcnQuIERvIHlvdSB3YW50IHRvIGRpc2NhcmQgdGhlbSBhbmQgc3dpdGNoIHRvIGFub3RoZXIgcmVwb3J0PydcbiAgICAgICk7XG4gICAgICBpZiAoIWNvbmZpcm1EaXNjYXJkKSByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVwb3J0U3RvcmUpIHtcbiAgICAgIHRoaXMucmVwb3J0U3RvcmUubG9hZFJlcG9ydChyZXBvcnRJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRlZikgPT4ge1xuICAgICAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5sb2FkRGVmaW5pdGlvbihkZWYpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tEZXNpZ25lclRvb2xiYXJdIEZhaWxlZCB0byBzd2l0Y2ggcmVwb3J0OicsIGVycik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvU2x1Zyh2YWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbFxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXBsYWNlKC9bXlxcd1xccy1dL2csICcnKVxuICAgICAgLnJlcGxhY2UoL1tcXHNfLV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csICcnKTtcbiAgfVxuXG4gIHNldE1vZGUobW9kZTogRGVzaWduZXJWaWV3TW9kZSk6IHZvaWQge1xuICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5zZXRWaWV3TW9kZShtb2RlKTtcbiAgfVxuXG4gIHVuZG8oKTogdm9pZCB7XG4gICAgdGhpcy5kZXNpZ25lclN0YXRlLnVuZG8oKTtcbiAgfVxuXG4gIHJlZG8oKTogdm9pZCB7XG4gICAgdGhpcy5kZXNpZ25lclN0YXRlLnJlZG8oKTtcbiAgfVxuXG4gIHNhdmVSZXBvcnQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlUmVxdWVzdGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9wZW5UZW1wbGF0ZXNNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVGVtcGxhdGVzTW9kYWxPcGVuLnNldCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlVGVtcGxhdGVzTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1RlbXBsYXRlc01vZGFsT3Blbi5zZXQoZmFsc2UpO1xuICB9XG5cbiAgYXBwbHlCbHVlcHJpbnQoYmx1ZXByaW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0RlZiA9IHRoaXMudGVtcGxhdGVTZXJ2aWNlLmluc3RhbnRpYXRlVGVtcGxhdGUoYmx1ZXByaW50SWQpO1xuICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5sb2FkRGVmaW5pdGlvbihuZXdEZWYpO1xuICAgIHRoaXMuY2xvc2VUZW1wbGF0ZXNNb2RhbCgpO1xuICB9XG5cbiAgYWRkUmVzdWx0R3JpZCgpOiB2b2lkIHtcbiAgICBjb25zdCBleGlzdGluZ0RzID0gdGhpcy5kZWZpbml0aW9uKCkuZGF0YVNvdXJjZXNbMF07XG4gICAgY29uc3QgZGVmYXVsdEdyaWQ6IFJlcG9ydEdyaWREZWZpbml0aW9uID0ge1xuICAgICAgZGF0YVNvdXJjZUlkOiBleGlzdGluZ0RzPy5pZCA/PyAnZGVmYXVsdCcsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHsgZmllbGQ6ICdpZCcsIGxhYmVsOiAnSUQnLCBkYXRhVHlwZTogJ251bWJlcicsIHZpc2libGU6IHRydWUsIHNvcnRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgZmllbGQ6ICduYW1lJywgbGFiZWw6ICdOYW1lJywgZGF0YVR5cGU6ICdzdHJpbmcnLCB2aXNpYmxlOiB0cnVlLCBzb3J0YWJsZTogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgcGFnaW5hdGlvbjogdHJ1ZSxcbiAgICAgICAgcGFnZVNpemU6IDI1LFxuICAgICAgICBzaG93Um93TnVtYmVyczogdHJ1ZSxcbiAgICAgICAgc2hvd0Zvb3RlcjogdHJ1ZSxcbiAgICAgICAgc2lkZUJhcjogdHJ1ZSxcbiAgICAgICAgZ2xvYmFsU2VhcmNoOiB0cnVlLFxuICAgICAgICBzdGF0dXNCYXI6IHRydWUsXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5kZXNpZ25lclN0YXRlLnVwZGF0ZUdyaWRTZXR0aW5ncyhkZWZhdWx0R3JpZCk7XG4gICAgdGhpcy5kZXNpZ25lclN0YXRlLnNlbGVjdENvbXBvbmVudChudWxsKTtcbiAgICB0aGlzLmRlc2lnbmVyU3RhdGUuc2V0QWN0aXZlVGFiKCdncmlkJyk7XG4gIH1cblxuICBzZWxlY3RHcmlkU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5kZXNpZ25lclN0YXRlLnNlbGVjdENvbXBvbmVudChudWxsKTtcbiAgICB0aGlzLmRlc2lnbmVyU3RhdGUuc2V0QWN0aXZlVGFiKCdncmlkJyk7XG4gIH1cblxuICBleHBvcnRKc29uKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFTdHIgPVxuICAgICAgJ2RhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsJyArXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWZpbml0aW9uKCksIG51bGwsIDIpKTtcbiAgICBjb25zdCBkb3dubG9hZEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBkb3dubG9hZEFuY2hvci5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBkYXRhU3RyKTtcbiAgICBkb3dubG9hZEFuY2hvci5zZXRBdHRyaWJ1dGUoXG4gICAgICAnZG93bmxvYWQnLFxuICAgICAgYCR7dGhpcy5kZWZpbml0aW9uKCkuaWQgfHwgJ3JlcG9ydC1kZWZpbml0aW9uJ30uanNvbmBcbiAgICApO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRBbmNob3IpO1xuICAgIGRvd25sb2FkQW5jaG9yLmNsaWNrKCk7XG4gICAgZG93bmxvYWRBbmNob3IucmVtb3ZlKCk7XG4gIH1cbn1cbiJdfQ==
|