bways-report 0.1.2 → 0.1.3

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.
Files changed (100) hide show
  1. package/README.md +150 -51
  2. package/esm2022/lib/core/errors/reporting-errors.mjs +2 -2
  3. package/esm2022/lib/core/index.mjs +3 -1
  4. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  5. package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
  6. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  7. package/esm2022/lib/core/services/report-session-context.service.mjs +50 -5
  8. package/esm2022/lib/core/utils/data-normalization.util.mjs +56 -0
  9. package/esm2022/lib/core/utils/report-parameter.util.mjs +180 -0
  10. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +82 -0
  11. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +34 -9
  12. package/esm2022/lib/data-access/adapters/http-masterdata.adapter.mjs +38 -0
  13. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +217 -0
  14. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +3 -1
  15. package/esm2022/lib/data-access/adapters/index.mjs +8 -3
  16. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +167 -0
  17. package/esm2022/lib/data-access/adapters/mock-datasource.adapter.mjs +60 -0
  18. package/esm2022/lib/data-access/contracts/api-dtos.mjs +6 -0
  19. package/esm2022/lib/data-access/contracts/index.mjs +2 -1
  20. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +555 -92
  21. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +593 -0
  22. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +164 -23
  23. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +410 -12
  24. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +149 -2
  25. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +109 -6
  26. package/esm2022/lib/features/designer/designer.component.mjs +101 -12
  27. package/esm2022/lib/features/designer/index.mjs +4 -1
  28. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +102 -0
  29. package/esm2022/lib/features/designer/services/designer-state.service.mjs +10 -9
  30. package/esm2022/lib/features/designer/services/report-template.service.mjs +318 -0
  31. package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +41 -9
  32. package/esm2022/lib/features/export/index.mjs +2 -2
  33. package/esm2022/lib/features/export/models/export.models.mjs +1 -1
  34. package/esm2022/lib/features/export/services/report-export.service.mjs +420 -5
  35. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +2 -2
  36. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +231 -33
  37. package/esm2022/lib/features/runtime/index.mjs +2 -1
  38. package/esm2022/lib/features/runtime/report-execution.service.mjs +64 -0
  39. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +224 -26
  40. package/esm2022/lib/features/runtime/report-runtime.component.mjs +341 -7
  41. package/esm2022/lib/features/runtime/rpt-report.component.mjs +537 -0
  42. package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +19 -8
  43. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +18 -7
  44. package/esm2022/lib/primitives/components/date-range/rpt-date-range.component.mjs +346 -0
  45. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +727 -73
  46. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
  47. package/esm2022/lib/primitives/components/index.mjs +2 -1
  48. package/esm2022/lib/primitives/register-builtins.mjs +51 -2
  49. package/esm2022/lib/provide-reporting.mjs +145 -24
  50. package/fesm2022/bways-report.mjs +6871 -753
  51. package/fesm2022/bways-report.mjs.map +1 -1
  52. package/lib/core/index.d.ts +2 -0
  53. package/lib/core/models/report-datasource.model.d.ts +9 -0
  54. package/lib/core/models/report-definition.model.d.ts +2 -0
  55. package/lib/core/models/report-grid.model.d.ts +44 -0
  56. package/lib/core/services/report-session-context.service.d.ts +6 -1
  57. package/lib/core/utils/data-normalization.util.d.ts +15 -0
  58. package/lib/core/utils/report-parameter.util.d.ts +35 -0
  59. package/lib/data-access/adapters/http-datasource.adapter.d.ts +20 -0
  60. package/lib/data-access/adapters/http-lookup.adapter.d.ts +3 -0
  61. package/lib/data-access/adapters/http-masterdata.adapter.d.ts +13 -0
  62. package/lib/data-access/adapters/http-persistence.adapter.d.ts +27 -0
  63. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +2 -0
  64. package/lib/data-access/adapters/index.d.ts +7 -2
  65. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +19 -0
  66. package/lib/data-access/adapters/mock-datasource.adapter.d.ts +9 -0
  67. package/lib/data-access/contracts/api-dtos.d.ts +67 -0
  68. package/lib/data-access/contracts/index.d.ts +1 -0
  69. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +22 -0
  70. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +1 -1
  71. package/lib/features/designer/components/property-editor/property-editor-action.component.d.ts +33 -0
  72. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -0
  73. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +16 -2
  74. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +5 -0
  75. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -0
  76. package/lib/features/designer/designer.component.d.ts +5 -0
  77. package/lib/features/designer/index.d.ts +4 -0
  78. package/lib/features/designer/rpt-report-designer.component.d.ts +38 -0
  79. package/lib/features/designer/services/designer-state.service.d.ts +1 -1
  80. package/lib/features/designer/services/report-template.service.d.ts +32 -0
  81. package/lib/features/designer/utilities/canvas-layout.util.d.ts +4 -0
  82. package/lib/features/export/index.d.ts +2 -2
  83. package/lib/features/export/models/export.models.d.ts +23 -0
  84. package/lib/features/export/services/report-export.service.d.ts +31 -2
  85. package/lib/features/runtime/dynamic-renderer.component.d.ts +39 -2
  86. package/lib/features/runtime/index.d.ts +2 -0
  87. package/lib/features/runtime/report-execution.service.d.ts +16 -0
  88. package/lib/features/runtime/report-grid-bridge.component.d.ts +129 -6
  89. package/lib/features/runtime/report-runtime.component.d.ts +83 -1
  90. package/lib/features/runtime/rpt-report.component.d.ts +66 -0
  91. package/lib/primitives/components/button/rpt-button.component.d.ts +5 -2
  92. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +1 -0
  93. package/lib/primitives/components/date-range/rpt-date-range.component.d.ts +43 -0
  94. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +55 -7
  95. package/lib/primitives/components/index.d.ts +2 -0
  96. package/lib/provide-reporting.d.ts +79 -26
  97. package/package.json +2 -1
  98. package/schematics/collection.json +10 -0
  99. package/schematics/ng-add/index.js +45 -0
  100. package/schematics/ng-add/schema.json +17 -0
@@ -32,15 +32,25 @@ export class DesignerComponent {
32
32
  previewData = signal(null);
33
33
  saveMessage = signal(null);
34
34
  copyStatus = signal('Copy JSON');
35
+ isLeftPanelCollapsed = signal(false);
36
+ isRightPanelCollapsed = signal(false);
37
+ toggleLeftPanel() {
38
+ this.isLeftPanelCollapsed.update((v) => !v);
39
+ }
40
+ toggleRightPanel() {
41
+ this.isRightPanelCollapsed.update((v) => !v);
42
+ }
35
43
  formattedJson = computed(() => {
36
44
  return JSON.stringify(this.currentDefinition(), null, 2);
37
45
  });
38
46
  loadedReportId = null;
47
+ loadedReportDef = null;
39
48
  constructor() {
40
49
  effect(() => {
41
50
  const def = this.definition();
42
- if (def && def.id !== this.loadedReportId) {
51
+ if (def && (def !== this.loadedReportDef || def.id !== this.loadedReportId)) {
43
52
  this.loadedReportId = def.id;
53
+ this.loadedReportDef = def;
44
54
  this.designerState.loadDefinition(def);
45
55
  }
46
56
  }, { allowSignalWrites: true });
@@ -99,13 +109,44 @@ export class DesignerComponent {
99
109
  }
100
110
  onPreviewExecute(event) {
101
111
  const grid = event.definition.grid;
102
- if (!grid)
112
+ if (!grid) {
113
+ console.warn('[Designer Preview] No grid attached to report definition.');
103
114
  return;
104
- const ds = event.definition.dataSources.find((d) => d.id === grid.dataSourceId);
105
- if (!ds || !this.dataSourceAdapter)
115
+ }
116
+ let ds = event.definition.dataSources?.find((d) => d.id === grid.dataSourceId);
117
+ if (!ds && event.definition.dataSources?.length > 0) {
118
+ ds = event.definition.dataSources[0];
119
+ }
120
+ if (!ds) {
121
+ // Look for Stored Procedure or Table configured on any component in the report
122
+ const compWithEntity = event.definition.components.find((c) => c.dataSource?.entityName);
123
+ if (compWithEntity?.dataSource?.entityName) {
124
+ ds = {
125
+ id: 'sp-' + compWithEntity.dataSource.entityName,
126
+ name: compWithEntity.dataSource.entityName,
127
+ endpoint: compWithEntity.dataSource.entityName,
128
+ schema: compWithEntity.dataSource.schema || 'dbo',
129
+ type: compWithEntity.dataSource.sourceType || 'procedure',
130
+ method: compWithEntity.dataSource.sourceType === 'table' ? 'GET' : 'STORED_PROCEDURE',
131
+ parameterMappings: compWithEntity.dataSource.parameterMappings,
132
+ };
133
+ }
134
+ }
135
+ if (!ds) {
136
+ ds = {
137
+ id: 'default-ds',
138
+ name: 'Report Data',
139
+ endpoint: 'default',
140
+ method: 'POST',
141
+ };
142
+ }
143
+ if (!this.dataSourceAdapter) {
144
+ console.warn('[Designer Preview] No dataSourceAdapter available.');
106
145
  return;
146
+ }
107
147
  const session = this.sessionService?.getCurrentSessionContext() ?? {};
108
- const executionParams = { ...session, ...event.parameters };
148
+ const compMappings = ds?.parameterMappings || {};
149
+ const executionParams = { ...compMappings, ...session, ...event.parameters };
109
150
  this.dataSourceAdapter.execute(ds, executionParams).subscribe({
110
151
  next: (data) => {
111
152
  this.previewData.set(data);
@@ -137,9 +178,21 @@ export class DesignerComponent {
137
178
  <div class="designer-workbench" cdkDropListGroup>
138
179
  <!-- 1. Left Panel: Component Palette (only shown in design mode) -->
139
180
  @if (viewMode() === 'design') {
140
- <aside class="workbench-left-panel">
181
+ <aside class="workbench-left-panel" [class.is-collapsed]="isLeftPanelCollapsed()">
141
182
  <rpt-component-palette />
142
183
  </aside>
184
+
185
+ <!-- Left Panel Collapse/Expand Toggle -->
186
+ <button
187
+ type="button"
188
+ class="workbench-collapse-btn btn-collapse-left"
189
+ [class.is-collapsed]="isLeftPanelCollapsed()"
190
+ (click)="toggleLeftPanel()"
191
+ [title]="isLeftPanelCollapsed() ? 'Expand Component Palette' : 'Collapse Component Palette'"
192
+ [attr.aria-label]="isLeftPanelCollapsed() ? 'Expand Component Palette' : 'Collapse Component Palette'"
193
+ >
194
+ <rpt-icon [name]="isLeftPanelCollapsed() ? 'chevron-right' : 'chevron-left'" [size]="12" />
195
+ </button>
143
196
  }
144
197
 
145
198
  <!-- 2. Center Panel: Design Canvas OR Live Preview OR JSON Schema -->
@@ -183,7 +236,19 @@ export class DesignerComponent {
183
236
 
184
237
  <!-- 3. Right Panel: Property Editor (only shown in design mode) -->
185
238
  @if (viewMode() === 'design') {
186
- <aside class="workbench-right-panel">
239
+ <!-- Right Panel Collapse/Expand Toggle -->
240
+ <button
241
+ type="button"
242
+ class="workbench-collapse-btn btn-collapse-right"
243
+ [class.is-collapsed]="isRightPanelCollapsed()"
244
+ (click)="toggleRightPanel()"
245
+ [title]="isRightPanelCollapsed() ? 'Expand Property Editor' : 'Collapse Property Editor'"
246
+ [attr.aria-label]="isRightPanelCollapsed() ? 'Expand Property Editor' : 'Collapse Property Editor'"
247
+ >
248
+ <rpt-icon [name]="isRightPanelCollapsed() ? 'chevron-left' : 'chevron-right'" [size]="12" />
249
+ </button>
250
+
251
+ <aside class="workbench-right-panel" [class.is-collapsed]="isRightPanelCollapsed()">
187
252
  <rpt-property-editor />
188
253
  </aside>
189
254
  }
@@ -197,7 +262,7 @@ export class DesignerComponent {
197
262
  </div>
198
263
  }
199
264
  </div>
200
- `, isInline: true, styles: [":host{display:block;width:100%;height:100%;min-height:600px;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative}.workbench-left-panel{width:250px;flex-shrink:0;height:100%;overflow:hidden;z-index:10}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0}.workbench-right-panel{width:320px;flex-shrink:0;height:100%;overflow:hidden;z-index:10}.preview-mode-container{flex:1;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:linear-gradient(135deg,#1e293b,#0f172a);color:#38bdf8;padding:10px 18px;border-radius:8px;font-size:.8rem;font-weight:600;display:flex;align-items:center;box-shadow:0 2px 4px #00000014;box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;overflow-y:auto;padding:24px;background-color:#0f172a;display:flex;flex-direction:column}.json-banner{display:flex;align-items:center;justify-content:space-between;color:#94a3b8;font-size:.8rem;font-weight:600;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #1e293b}.btn-copy-json{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:4px;padding:4px 12px;font-size:.75rem;cursor:pointer;transition:all .15s ease}.btn-copy-json:hover{background:#fff3}.json-display{flex:1;margin:0;padding:20px;background:#090d16;border-radius:8px;border:1px solid #1e293b;color:#38bdf8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.85rem;line-height:1.5;overflow-x:auto}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "component", type: DesignerToolbarComponent, selector: "rpt-designer-toolbar", outputs: ["saveRequested"] }, { kind: "component", type: ComponentPaletteComponent, selector: "rpt-component-palette" }, { kind: "component", type: DesignCanvasComponent, selector: "rpt-design-canvas" }, { kind: "component", type: PropertyEditorComponent, selector: "rpt-property-editor" }, { kind: "component", type: DynamicRendererComponent, selector: "rpt-dynamic-renderer", inputs: ["definition", "initialValues", "resultData"], outputs: ["executeRequested"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
265
+ `, isInline: true, styles: [":host{display:block;width:100%;height:100%;min-height:600px;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative}.workbench-left-panel{width:250px;flex-shrink:0;height:100%;overflow:hidden;z-index:10;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff}.workbench-left-panel.is-collapsed{width:0!important;border-right:none;visibility:hidden}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0}.workbench-right-panel{width:320px;flex-shrink:0;height:100%;overflow:hidden;z-index:10;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff}.workbench-right-panel.is-collapsed{width:0!important;border-left:none;visibility:hidden}.workbench-collapse-btn{position:absolute;top:14px;width:18px;height:36px;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);color:var(--rpt-color-text-muted, #64748b);cursor:pointer;z-index:25;display:flex;align-items:center;justify-content:center;padding:0;box-shadow:0 2px 4px #0000000f;transition:all var(--rpt-transition-speed, .15s) ease}.workbench-collapse-btn:hover{background:var(--rpt-color-surface-hover, #f8fafc);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb)}.btn-collapse-left{left:242px;border-radius:0 6px 6px 0;border-left:none;transition:left var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1)}.btn-collapse-left.is-collapsed{left:0;border-left:1px solid var(--rpt-color-border, #cbd5e1)}.btn-collapse-right{right:312px;border-radius:6px 0 0 6px;border-right:none;transition:right var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1)}.btn-collapse-right.is-collapsed{right:0;border-right:1px solid var(--rpt-color-border, #cbd5e1)}.preview-mode-container{flex:1;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;overflow-y:auto;padding:24px;background-color:#0f172a;display:flex;flex-direction:column}.json-banner{display:flex;align-items:center;justify-content:space-between;color:#94a3b8;font-size:.8rem;font-weight:600;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #1e293b}.btn-copy-json{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:4px;padding:4px 12px;font-size:.75rem;cursor:pointer;transition:all .15s ease}.btn-copy-json:hover{background:#fff3}.json-display{flex:1;margin:0;padding:20px;background:#090d16;border-radius:8px;border:1px solid #1e293b;color:#38bdf8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.85rem;line-height:1.5;overflow-x:auto}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "component", type: DesignerToolbarComponent, selector: "rpt-designer-toolbar", outputs: ["saveRequested"] }, { kind: "component", type: ComponentPaletteComponent, selector: "rpt-component-palette" }, { kind: "component", type: DesignCanvasComponent, selector: "rpt-design-canvas" }, { kind: "component", type: PropertyEditorComponent, selector: "rpt-property-editor" }, { kind: "component", type: DynamicRendererComponent, selector: "rpt-dynamic-renderer", inputs: ["definition", "initialValues", "resultData"], outputs: ["executeRequested", "resetRequested", "exportRequested", "printRequested", "customActionTriggered", "gridStateChanged", "columnDefsChanged", "rowActionTriggered"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
201
266
  }
202
267
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerComponent, decorators: [{
203
268
  type: Component,
@@ -220,9 +285,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
220
285
  <div class="designer-workbench" cdkDropListGroup>
221
286
  <!-- 1. Left Panel: Component Palette (only shown in design mode) -->
222
287
  @if (viewMode() === 'design') {
223
- <aside class="workbench-left-panel">
288
+ <aside class="workbench-left-panel" [class.is-collapsed]="isLeftPanelCollapsed()">
224
289
  <rpt-component-palette />
225
290
  </aside>
291
+
292
+ <!-- Left Panel Collapse/Expand Toggle -->
293
+ <button
294
+ type="button"
295
+ class="workbench-collapse-btn btn-collapse-left"
296
+ [class.is-collapsed]="isLeftPanelCollapsed()"
297
+ (click)="toggleLeftPanel()"
298
+ [title]="isLeftPanelCollapsed() ? 'Expand Component Palette' : 'Collapse Component Palette'"
299
+ [attr.aria-label]="isLeftPanelCollapsed() ? 'Expand Component Palette' : 'Collapse Component Palette'"
300
+ >
301
+ <rpt-icon [name]="isLeftPanelCollapsed() ? 'chevron-right' : 'chevron-left'" [size]="12" />
302
+ </button>
226
303
  }
227
304
 
228
305
  <!-- 2. Center Panel: Design Canvas OR Live Preview OR JSON Schema -->
@@ -266,7 +343,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
266
343
 
267
344
  <!-- 3. Right Panel: Property Editor (only shown in design mode) -->
268
345
  @if (viewMode() === 'design') {
269
- <aside class="workbench-right-panel">
346
+ <!-- Right Panel Collapse/Expand Toggle -->
347
+ <button
348
+ type="button"
349
+ class="workbench-collapse-btn btn-collapse-right"
350
+ [class.is-collapsed]="isRightPanelCollapsed()"
351
+ (click)="toggleRightPanel()"
352
+ [title]="isRightPanelCollapsed() ? 'Expand Property Editor' : 'Collapse Property Editor'"
353
+ [attr.aria-label]="isRightPanelCollapsed() ? 'Expand Property Editor' : 'Collapse Property Editor'"
354
+ >
355
+ <rpt-icon [name]="isRightPanelCollapsed() ? 'chevron-left' : 'chevron-right'" [size]="12" />
356
+ </button>
357
+
358
+ <aside class="workbench-right-panel" [class.is-collapsed]="isRightPanelCollapsed()">
270
359
  <rpt-property-editor />
271
360
  </aside>
272
361
  }
@@ -280,6 +369,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
280
369
  </div>
281
370
  }
282
371
  </div>
283
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;min-height:600px;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative}.workbench-left-panel{width:250px;flex-shrink:0;height:100%;overflow:hidden;z-index:10}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0}.workbench-right-panel{width:320px;flex-shrink:0;height:100%;overflow:hidden;z-index:10}.preview-mode-container{flex:1;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:linear-gradient(135deg,#1e293b,#0f172a);color:#38bdf8;padding:10px 18px;border-radius:8px;font-size:.8rem;font-weight:600;display:flex;align-items:center;box-shadow:0 2px 4px #00000014;box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;overflow-y:auto;padding:24px;background-color:#0f172a;display:flex;flex-direction:column}.json-banner{display:flex;align-items:center;justify-content:space-between;color:#94a3b8;font-size:.8rem;font-weight:600;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #1e293b}.btn-copy-json{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:4px;padding:4px 12px;font-size:.75rem;cursor:pointer;transition:all .15s ease}.btn-copy-json:hover{background:#fff3}.json-display{flex:1;margin:0;padding:20px;background:#090d16;border-radius:8px;border:1px solid #1e293b;color:#38bdf8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.85rem;line-height:1.5;overflow-x:auto}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"] }]
372
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;min-height:600px;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative}.workbench-left-panel{width:250px;flex-shrink:0;height:100%;overflow:hidden;z-index:10;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff}.workbench-left-panel.is-collapsed{width:0!important;border-right:none;visibility:hidden}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0}.workbench-right-panel{width:320px;flex-shrink:0;height:100%;overflow:hidden;z-index:10;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff}.workbench-right-panel.is-collapsed{width:0!important;border-left:none;visibility:hidden}.workbench-collapse-btn{position:absolute;top:14px;width:18px;height:36px;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);color:var(--rpt-color-text-muted, #64748b);cursor:pointer;z-index:25;display:flex;align-items:center;justify-content:center;padding:0;box-shadow:0 2px 4px #0000000f;transition:all var(--rpt-transition-speed, .15s) ease}.workbench-collapse-btn:hover{background:var(--rpt-color-surface-hover, #f8fafc);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb)}.btn-collapse-left{left:242px;border-radius:0 6px 6px 0;border-left:none;transition:left var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1)}.btn-collapse-left.is-collapsed{left:0;border-left:1px solid var(--rpt-color-border, #cbd5e1)}.btn-collapse-right{right:312px;border-radius:6px 0 0 6px;border-right:none;transition:right var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1)}.btn-collapse-right.is-collapsed{right:0;border-right:1px solid var(--rpt-color-border, #cbd5e1)}.preview-mode-container{flex:1;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;overflow-y:auto;padding:24px;background-color:#0f172a;display:flex;flex-direction:column}.json-banner{display:flex;align-items:center;justify-content:space-between;color:#94a3b8;font-size:.8rem;font-weight:600;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #1e293b}.btn-copy-json{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:4px;padding:4px 12px;font-size:.75rem;cursor:pointer;transition:all .15s ease}.btn-copy-json:hover{background:#fff3}.json-display{flex:1;margin:0;padding:20px;background:#090d16;border-radius:8px;border:1px solid #1e293b;color:#38bdf8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.85rem;line-height:1.5;overflow-x:auto}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"] }]
284
373
  }], ctorParameters: () => [] });
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbkcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDdkcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDakcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUF5T3hELE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxRix5REFBeUQ7SUFDaEQsUUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBRXBDLDJDQUEyQztJQUNsQyxVQUFVLEdBQUcsS0FBSyxDQUFzQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUV4Ryw2Q0FBNkM7SUFDcEMsV0FBVyxHQUFHLE1BQU0sQ0FBbUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUVuRSw0RUFBNEU7SUFDbkUsaUJBQWlCLEdBQUcsTUFBTSxDQUFtQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFFNUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7SUFDbEQsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBRXZDLFdBQVcsR0FBRyxNQUFNLENBQW1CLElBQUksQ0FBQyxDQUFDO0lBQzdDLFdBQVcsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQzFDLFVBQVUsR0FBRyxNQUFNLENBQVMsV0FBVyxDQUFDLENBQUM7SUFFekMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDckMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztJQUVLLGNBQWMsR0FBa0IsSUFBSSxDQUFDO0lBRTdDO1FBQ0UsTUFBTSxDQUNKLEdBQUcsRUFBRTtZQUNILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM5QixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzVCLENBQUM7UUFFRixNQUFNLENBQ0osR0FBRyxFQUFFO1lBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNCLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN0RixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUM1QixDQUFDO1FBRUYsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDM0MsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO2dCQUNoQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZELElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLFdBQVcsRUFBRSw2REFBNkQ7Z0JBQzFFLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO2dCQUMvRCxVQUFVLEVBQUUsRUFBRTtnQkFDZCxVQUFVLEVBQUUsRUFBRTtnQkFDZCxXQUFXLEVBQUUsRUFBRTthQUNoQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUM5QyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQzFDLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FHaEI7UUFDQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFFM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0RSxNQUFNLGVBQWUsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1RCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM3RCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4QixTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM1RCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxTQUFTLENBQUMsT0FBZTtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQzt3R0ExSVUsaUJBQWlCOzRGQUFqQixpQkFBaUIsMlpBek5qQixDQUFDLG9CQUFvQixDQUFDLDBCQUN2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUVULCswRUFoRkMsWUFBWSw4QkFDWixXQUFXLDhCQUNYLGNBQWMsdUxBQ2Qsd0JBQXdCLDZGQUN4Qix5QkFBeUIsa0VBQ3pCLHFCQUFxQiw4REFDckIsdUJBQXVCLGdFQUN2Qix3QkFBd0IsdUpBQ3hCLGdCQUFnQjs7NEZBMk5QLGlCQUFpQjtrQkF2TzdCLFNBQVM7K0JBQ0UsY0FBYyxjQUNaLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIscUJBQXFCO3dCQUNyQix1QkFBdUI7d0JBQ3ZCLHdCQUF3Qjt3QkFDeEIsZ0JBQWdCO3FCQUNqQixhQUNVLENBQUMsb0JBQW9CLENBQUMsWUFDdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFFVCxtQkFpSmdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkluaXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvcmVwb3J0LXBlcnNpc3RlbmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2RhdGEtc291cmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IERlc2lnbmVyU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kZXNpZ25lci1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b29sYmFyL2Rlc2lnbmVyLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LXBhbGV0dGUvY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50JztcbmltcG9ydCB7IERlc2lnbkNhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kZXNpZ24tY2FudmFzL2Rlc2lnbi1jYW52YXMuY29tcG9uZW50JztcbmltcG9ydCB7IFByb3BlcnR5RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb3BlcnR5LWVkaXRvci9wcm9wZXJ0eS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL3J1bnRpbWUvZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1kZXNpZ25lcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXG4gICAgRGVzaWduZXJUb29sYmFyQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQsXG4gICAgRGVzaWduQ2FudmFzQ29tcG9uZW50LFxuICAgIFByb3BlcnR5RWRpdG9yQ29tcG9uZW50LFxuICAgIER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCxcbiAgICBScHRJY29uQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtEZXNpZ25lclN0YXRlU2VydmljZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRlc2lnbmVyLXNoZWxsXCI+XG4gICAgICA8IS0tIFRvcCBBY3Rpb25zIFRvb2xiYXIgLS0+XG4gICAgICA8cnB0LWRlc2lnbmVyLXRvb2xiYXIgKHNhdmVSZXF1ZXN0ZWQpPVwib25TYXZlKClcIiAvPlxuXG4gICAgICA8IS0tIE1haW4gMy1QYW5lbCBMYXlvdXQgd2l0aCBDREsgRHJvcCBMaXN0IEdyb3VwIGNvbm5lY3RpbmcgUGFsZXR0ZSAmIENhbnZhcyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ25lci13b3JrYmVuY2hcIiBjZGtEcm9wTGlzdEdyb3VwPlxuICAgICAgICA8IS0tIDEuIExlZnQgUGFuZWw6IENvbXBvbmVudCBQYWxldHRlIChvbmx5IHNob3duIGluIGRlc2lnbiBtb2RlKSAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICAgIDxhc2lkZSBjbGFzcz1cIndvcmtiZW5jaC1sZWZ0LXBhbmVsXCI+XG4gICAgICAgICAgICA8cnB0LWNvbXBvbmVudC1wYWxldHRlIC8+XG4gICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gMi4gQ2VudGVyIFBhbmVsOiBEZXNpZ24gQ2FudmFzIE9SIExpdmUgUHJldmlldyBPUiBKU09OIFNjaGVtYSAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJ3b3JrYmVuY2gtY2VudGVyLXBhbmVsXCI+XG4gICAgICAgICAgQHN3aXRjaCAodmlld01vZGUoKSkge1xuICAgICAgICAgICAgQGNhc2UgKCdkZXNpZ24nKSB7XG4gICAgICAgICAgICAgIDxycHQtZGVzaWduLWNhbnZhcyAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdwcmV2aWV3Jykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1tb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWJhbm5lclwiPlxuICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJleWVcIiBbc2l6ZV09XCIxNVwiIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5MaXZlIFByZXZpZXcgTW9kZSDigJQgUnVubmluZyB3aXRoIGFjdHVhbCBSZWFjdGl2ZSBGb3JtcyAmIER5bmFtaWMgR3JpZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8cnB0LWR5bmFtaWMtcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiY3VycmVudERlZmluaXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXN1bHREYXRhXT1cInByZXZpZXdEYXRhKClcIlxuICAgICAgICAgICAgICAgICAgICAoZXhlY3V0ZVJlcXVlc3RlZCk9XCJvblByZXZpZXdFeGVjdXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2pzb24nKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLW1vZGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tYmFubmVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY29kZVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+TGl2ZSBSZXBvcnREZWZpbml0aW9uIE1ldGFkYXRhIFNjaGVtYTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY29weS1qc29uXCIgKGNsaWNrKT1cImNvcHlKc29uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImNvcHlTdGF0dXMoKSA9PT0gJ0NvcGllZCEnID8gJ2NoZWNrJyA6ICdjb3B5J1wiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29weVN0YXR1cygpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHByZSBjbGFzcz1cImpzb24tZGlzcGxheVwiPjxjb2RlPnt7IGZvcm1hdHRlZEpzb24oKSB9fTwvY29kZT48L3ByZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPCEtLSAzLiBSaWdodCBQYW5lbDogUHJvcGVydHkgRWRpdG9yIChvbmx5IHNob3duIGluIGRlc2lnbiBtb2RlKSAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICAgIDxhc2lkZSBjbGFzcz1cIndvcmtiZW5jaC1yaWdodC1wYW5lbFwiPlxuICAgICAgICAgICAgPHJwdC1wcm9wZXJ0eS1lZGl0b3IgLz5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTYXZlIE5vdGlmaWNhdGlvbiBUb2FzdCAtLT5cbiAgICAgIEBpZiAoc2F2ZU1lc3NhZ2UoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZS10b2FzdFwiPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY2hlY2tcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgPHNwYW4+e3sgc2F2ZU1lc3NhZ2UoKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiA2MDBweDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXNoZWxsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXdvcmtiZW5jaCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1wYW5lbCB7XG4gICAgICB3aWR0aDogMjUwcHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB6LWluZGV4OiAxMDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1jZW50ZXItcGFuZWwge1xuICAgICAgZmxleDogMTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1yaWdodC1wYW5lbCB7XG4gICAgICB3aWR0aDogMzIwcHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB6LWluZGV4OiAxMDtcbiAgICB9XG4gICAgLyogUHJldmlldyBNb2RlICovXG4gICAgLnByZXZpZXctbW9kZS1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWJhbm5lciB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvIDE2cHggYXV0bztcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMxZTI5M2IsICMwZjE3MmEpO1xuICAgICAgY29sb3I6ICMzOGJkZjg7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnByZXZpZXctY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLyogSlNPTiBTY2hlbWEgTW9kZSAqL1xuICAgIC5qc29uLW1vZGUtY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgcGFkZGluZzogMjRweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwZjE3MmE7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gICAgLmpzb24tYmFubmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgY29sb3I6ICM5NGEzYjg7XG4gICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDEycHg7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzFlMjkzYjtcbiAgICB9XG4gICAgLmJ0bi1jb3B5LWpzb24ge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBwYWRkaW5nOiA0cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBlYXNlO1xuICAgIH1cbiAgICAuYnRuLWNvcHktanNvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gICAgfVxuICAgIC5qc29uLWRpc3BsYXkge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMDkwZDE2O1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgIzFlMjkzYjtcbiAgICAgIGNvbG9yOiAjMzhiZGY4O1xuICAgICAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBtb25vc3BhY2U7XG4gICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICB9XG4gICAgLyogU2F2ZSBUb2FzdCBOb3RpZmljYXRpb24gKi9cbiAgICAuc2F2ZS10b2FzdCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDI0cHg7XG4gICAgICByaWdodDogMjRweDtcbiAgICAgIGJhY2tncm91bmQ6ICMxMGI5ODE7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBib3gtc2hhZG93OiAwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICAgIHotaW5kZXg6IDEwMDtcbiAgICAgIGFuaW1hdGlvbjogcnB0LWZhZGUtaW4gMjAwbXMgZWFzZTtcbiAgICB9XG4gICAgQGtleWZyYW1lcyBycHQtZmFkZS1pbiB7XG4gICAgICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOyB9XG4gICAgICB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEZXNpZ25lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlYWRvbmx5IGRlc2lnbmVyU3RhdGUgPSBpbmplY3QoRGVzaWduZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RlbmNlQWRhcHRlciA9IGluamVjdChSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YVNvdXJjZUFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKiBPcHRpb25hbCByZXBvcnRJZCB0byBsb2FkIGZyb20gcGVyc2lzdGVuY2UgYWRhcHRlciAqL1xuICByZWFkb25seSByZXBvcnRJZCA9IGlucHV0PHN0cmluZz4oKTtcblxuICAvKiogT3B0aW9uYWwgZGVmaW5pdGlvbiB0byBsb2FkIGRpcmVjdGx5ICovXG4gIHJlYWRvbmx5IGRlZmluaXRpb24gPSBpbnB1dDxSZXBvcnREZWZpbml0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnaW5pdGlhbFJlcG9ydCcgfSk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBzYXZlcyB0aGUgcmVwb3J0ICovXG4gIHJlYWRvbmx5IHJlcG9ydFNhdmVkID0gb3V0cHV0PFJlcG9ydERlZmluaXRpb24+KHsgYWxpYXM6ICdzYXZlJyB9KTtcblxuICAvKiogRW1pdHRlZCB3aGVuZXZlciB0aGUgcmVwb3J0IGRlZmluaXRpb24gY2hhbmdlcyBpbiB0aGUgdmlzdWFsIGRlc2lnbmVyICovXG4gIHJlYWRvbmx5IGRlZmluaXRpb25DaGFuZ2VkID0gb3V0cHV0PFJlcG9ydERlZmluaXRpb24+KHsgYWxpYXM6ICdkZWZpbml0aW9uQ2hhbmdlJyB9KTtcblxuICByZWFkb25seSBjdXJyZW50RGVmaW5pdGlvbiA9IHRoaXMuZGVzaWduZXJTdGF0ZS5kZWZpbml0aW9uO1xuICByZWFkb25seSB2aWV3TW9kZSA9IHRoaXMuZGVzaWduZXJTdGF0ZS52aWV3TW9kZTtcblxuICByZWFkb25seSBwcmV2aWV3RGF0YSA9IHNpZ25hbDx1bmtub3duW10gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgc2F2ZU1lc3NhZ2UgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGNvcHlTdGF0dXMgPSBzaWduYWw8c3RyaW5nPignQ29weSBKU09OJyk7XG5cbiAgcmVhZG9ubHkgZm9ybWF0dGVkSnNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50RGVmaW5pdGlvbigpLCBudWxsLCAyKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBsb2FkZWRSZXBvcnRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLmRlZmluaXRpb24oKTtcbiAgICAgICAgaWYgKGRlZiAmJiBkZWYuaWQgIT09IHRoaXMubG9hZGVkUmVwb3J0SWQpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gZGVmLmlkO1xuICAgICAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5sb2FkRGVmaW5pdGlvbihkZWYpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnJlcG9ydElkKCk7XG4gICAgICAgIGlmIChpZCAmJiBpZCAhPT0gdGhpcy5sb2FkZWRSZXBvcnRJZCAmJiAhdGhpcy5kZWZpbml0aW9uKCkgJiYgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gaWQ7XG4gICAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIubG9hZChpZCkuc3Vic2NyaWJlKChkZWYpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5sb2FkRGVmaW5pdGlvbihkZWYpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5kZXNpZ25lclN0YXRlLmRlZmluaXRpb24oKTtcbiAgICAgIGlmICh0aGlzLmRlc2lnbmVyU3RhdGUuaXNEaXJ0eSgpKSB7XG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbkNoYW5nZWQuZW1pdChjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlZmluaXRpb24oKSAmJiAhdGhpcy5yZXBvcnRJZCgpKSB7XG4gICAgICAvLyBTdGFydCB3aXRoIGEgY2xlYW4gcmVwb3J0IGRlZmluaXRpb25cbiAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5sb2FkRGVmaW5pdGlvbih7XG4gICAgICAgIGlkOiBgcnB0LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDgpfWAsXG4gICAgICAgIG5hbWU6ICdOZXcgQ3VzdG9tIFJlcG9ydCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlzdWFsbHkgZGVzaWduZWQgcmVwb3J0aW5nIHBhZ2UgY3JlYXRlZCB3aXRoIEJXYXlzLVJlcG9ydC4nLFxuICAgICAgICBzY2hlbWFWZXJzaW9uOiAxLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBsYXlvdXQ6IHsgY29sdW1uczogMTIsIGdhcDogMTYsIHBhZGRpbmc6IDI0LCBkaXJlY3Rpb246ICdsdHInIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgICBwYXJhbWV0ZXJzOiBbXSxcbiAgICAgICAgZGF0YVNvdXJjZXM6IFtdLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25TYXZlKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnREZWZpbml0aW9uKCk7XG4gICAgaWYgKHRoaXMucGVyc2lzdGVuY2VBZGFwdGVyKSB7XG4gICAgICB0aGlzLnBlcnNpc3RlbmNlQWRhcHRlci5zYXZlKGN1cnJlbnQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChzYXZlZERlZikgPT4ge1xuICAgICAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5tYXJrU2F2ZWQoKTtcbiAgICAgICAgICB0aGlzLnJlcG9ydFNhdmVkLmVtaXQoc2F2ZWREZWYpO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KCdSZXBvcnQgc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW0Rlc2lnbmVyXSBTYXZlIGZhaWxlZDonLCBlcnIpO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KCdGYWlsZWQgdG8gc2F2ZSByZXBvcnQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubWFya1NhdmVkKCk7XG4gICAgICB0aGlzLnJlcG9ydFNhdmVkLmVtaXQoY3VycmVudCk7XG4gICAgICB0aGlzLnNob3dUb2FzdCgnUmVwb3J0IHN0YXRlIHNhdmVkJyk7XG4gICAgfVxuICB9XG5cbiAgb25QcmV2aWV3RXhlY3V0ZShldmVudDoge1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0pOiB2b2lkIHtcbiAgICBjb25zdCBncmlkID0gZXZlbnQuZGVmaW5pdGlvbi5ncmlkO1xuICAgIGlmICghZ3JpZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZHMgPSBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzLmZpbmQoKGQpID0+IGQuaWQgPT09IGdyaWQuZGF0YVNvdXJjZUlkKTtcbiAgICBpZiAoIWRzIHx8ICF0aGlzLmRhdGFTb3VyY2VBZGFwdGVyKSByZXR1cm47XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgY29uc3QgZXhlY3V0aW9uUGFyYW1zID0geyAuLi5zZXNzaW9uLCAuLi5ldmVudC5wYXJhbWV0ZXJzIH07XG5cbiAgICB0aGlzLmRhdGFTb3VyY2VBZGFwdGVyLmV4ZWN1dGUoZHMsIGV4ZWN1dGlvblBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMucHJldmlld0RhdGEuc2V0KGRhdGEpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tEZXNpZ25lciBQcmV2aWV3XSBFeGVjdXRpb24gZmFpbGVkOicsIGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgY29weUpzb24oKTogdm9pZCB7XG4gICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZm9ybWF0dGVkSnNvbigpKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb3B5U3RhdHVzLnNldCgnQ29waWVkIScpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29weVN0YXR1cy5zZXQoJ0NvcHkgSlNPTicpLCAyMDAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZU1lc3NhZ2Uuc2V0KG1lc3NhZ2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zYXZlTWVzc2FnZS5zZXQobnVsbCksIDMwMDApO1xuICB9XG59XG4iXX0=
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbkcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDdkcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDakcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUE2VHhELE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxRix5REFBeUQ7SUFDaEQsUUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBRXBDLDJDQUEyQztJQUNsQyxVQUFVLEdBQUcsS0FBSyxDQUFzQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUV4Ryw2Q0FBNkM7SUFDcEMsV0FBVyxHQUFHLE1BQU0sQ0FBbUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUVuRSw0RUFBNEU7SUFDbkUsaUJBQWlCLEdBQUcsTUFBTSxDQUFtQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFFNUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7SUFDbEQsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBRXZDLFdBQVcsR0FBRyxNQUFNLENBQW1CLElBQUksQ0FBQyxDQUFDO0lBQzdDLFdBQVcsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQzFDLFVBQVUsR0FBRyxNQUFNLENBQVMsV0FBVyxDQUFDLENBQUM7SUFDekMsb0JBQW9CLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzlDLHFCQUFxQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUV4RCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVEsYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDckMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztJQUVLLGNBQWMsR0FBa0IsSUFBSSxDQUFDO0lBQ3JDLGVBQWUsR0FBNEIsSUFBSSxDQUFDO0lBRXhEO1FBQ0UsTUFBTSxDQUNKLEdBQUcsRUFBRTtZQUNILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM5QixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZUFBZSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDNUIsQ0FBQztRQUVGLE1BQU0sQ0FDSixHQUFHLEVBQUU7WUFDSCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3RGLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzVCLENBQUM7UUFFRixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUMzQyx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUM7Z0JBQ2hDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDdkQsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsV0FBVyxFQUFFLDZEQUE2RDtnQkFDMUUsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7Z0JBQy9ELFVBQVUsRUFBRSxFQUFFO2dCQUNkLFVBQVUsRUFBRSxFQUFFO2dCQUNkLFdBQVcsRUFBRSxFQUFFO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzlDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDMUMsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUdoQjtRQUNDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkRBQTJELENBQUMsQ0FBQztZQUMxRSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEQsRUFBRSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUiwrRUFBK0U7WUFDL0UsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3pGLElBQUksY0FBYyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQztnQkFDM0MsRUFBRSxHQUFHO29CQUNILEVBQUUsRUFBRSxLQUFLLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVO29CQUNoRCxJQUFJLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVO29CQUMxQyxRQUFRLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVO29CQUM5QyxNQUFNLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksS0FBSztvQkFDakQsSUFBSSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLFdBQVc7b0JBQ3pELE1BQU0sRUFBRSxjQUFjLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsa0JBQWtCO29CQUNyRixpQkFBaUIsRUFBRSxjQUFjLENBQUMsVUFBVSxDQUFDLGlCQUFpQjtpQkFDeEQsQ0FBQztZQUNYLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsRUFBRSxHQUFHO2dCQUNILEVBQUUsRUFBRSxZQUFZO2dCQUNoQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxNQUFNO2FBQ2YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1lBQ25FLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0RSxNQUFNLFlBQVksR0FBSSxFQUFVLEVBQUUsaUJBQWlCLElBQUksRUFBRSxDQUFDO1FBQzFELE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFN0UsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdELENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxPQUFlO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO3dHQTFMVSxpQkFBaUI7NEZBQWpCLGlCQUFpQiwyWkE3U2pCLENBQUMsb0JBQW9CLENBQUMsMEJBQ3ZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2RlQsdzVIQXhHQyxZQUFZLDhCQUNaLFdBQVcsOEJBQ1gsY0FBYyx1TEFDZCx3QkFBd0IsNkZBQ3hCLHlCQUF5QixrRUFDekIscUJBQXFCLDhEQUNyQix1QkFBdUIsZ0VBQ3ZCLHdCQUF3QixzU0FDeEIsZ0JBQWdCOzs0RkErU1AsaUJBQWlCO2tCQTNUN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxjQUFjO3dCQUNkLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3dCQUN6QixxQkFBcUI7d0JBQ3JCLHVCQUF1Qjt3QkFDdkIsd0JBQXdCO3dCQUN4QixnQkFBZ0I7cUJBQ2pCLGFBQ1UsQ0FBQyxvQkFBb0IsQ0FBQyxZQUN2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkZULG1CQTZNZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9yZXBvcnQtcGVyc2lzdGVuY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvZGF0YS1zb3VyY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVzaWduZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Rlc2lnbmVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVzaWduZXJUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Rvb2xiYXIvZGVzaWduZXItdG9vbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tcG9uZW50UGFsZXR0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb21wb25lbnQtcGFsZXR0ZS9jb21wb25lbnQtcGFsZXR0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVzaWduQ2FudmFzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Rlc2lnbi1jYW52YXMvZGVzaWduLWNhbnZhcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvcGVydHlFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHJvcGVydHktZWRpdG9yL3Byb3BlcnR5LWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY1JlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcnVudGltZS9keW5hbWljLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWRlc2lnbmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICBEZXNpZ25lclRvb2xiYXJDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UGFsZXR0ZUNvbXBvbmVudCxcbiAgICBEZXNpZ25DYW52YXNDb21wb25lbnQsXG4gICAgUHJvcGVydHlFZGl0b3JDb21wb25lbnQsXG4gICAgRHluYW1pY1JlbmRlcmVyQ29tcG9uZW50LFxuICAgIFJwdEljb25Db21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW0Rlc2lnbmVyU3RhdGVTZXJ2aWNlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZGVzaWduZXItc2hlbGxcIj5cbiAgICAgIDwhLS0gVG9wIEFjdGlvbnMgVG9vbGJhciAtLT5cbiAgICAgIDxycHQtZGVzaWduZXItdG9vbGJhciAoc2F2ZVJlcXVlc3RlZCk9XCJvblNhdmUoKVwiIC8+XG5cbiAgICAgIDwhLS0gTWFpbiAzLVBhbmVsIExheW91dCB3aXRoIENESyBEcm9wIExpc3QgR3JvdXAgY29ubmVjdGluZyBQYWxldHRlICYgQ2FudmFzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbmVyLXdvcmtiZW5jaFwiIGNka0Ryb3BMaXN0R3JvdXA+XG4gICAgICAgIDwhLS0gMS4gTGVmdCBQYW5lbDogQ29tcG9uZW50IFBhbGV0dGUgKG9ubHkgc2hvd24gaW4gZGVzaWduIG1vZGUpIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nKSB7XG4gICAgICAgICAgPGFzaWRlIGNsYXNzPVwid29ya2JlbmNoLWxlZnQtcGFuZWxcIiBbY2xhc3MuaXMtY29sbGFwc2VkXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIj5cbiAgICAgICAgICAgIDxycHQtY29tcG9uZW50LXBhbGV0dGUgLz5cbiAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgPCEtLSBMZWZ0IFBhbmVsIENvbGxhcHNlL0V4cGFuZCBUb2dnbGUgLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIndvcmtiZW5jaC1jb2xsYXBzZS1idG4gYnRuLWNvbGxhcHNlLWxlZnRcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWNvbGxhcHNlZF09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVMZWZ0UGFuZWwoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSA/ICdFeHBhbmQgQ29tcG9uZW50IFBhbGV0dGUnIDogJ0NvbGxhcHNlIENvbXBvbmVudCBQYWxldHRlJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKCkgPyAnRXhwYW5kIENvbXBvbmVudCBQYWxldHRlJyA6ICdDb2xsYXBzZSBDb21wb25lbnQgUGFsZXR0ZSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpID8gJ2NoZXZyb24tcmlnaHQnIDogJ2NoZXZyb24tbGVmdCdcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDIuIENlbnRlciBQYW5lbDogRGVzaWduIENhbnZhcyBPUiBMaXZlIFByZXZpZXcgT1IgSlNPTiBTY2hlbWEgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwid29ya2JlbmNoLWNlbnRlci1wYW5lbFwiPlxuICAgICAgICAgIEBzd2l0Y2ggKHZpZXdNb2RlKCkpIHtcbiAgICAgICAgICAgIEBjYXNlICgnZGVzaWduJykge1xuICAgICAgICAgICAgICA8cnB0LWRlc2lnbi1jYW52YXMgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgncHJldmlldycpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbW9kZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1iYW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZXllXCIgW3NpemVdPVwiMTVcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TGl2ZSBQcmV2aWV3IE1vZGUg4oCUIFJ1bm5pbmcgd2l0aCBhY3R1YWwgUmVhY3RpdmUgRm9ybXMgJiBEeW5hbWljIEdyaWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHJwdC1keW5hbWljLXJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImN1cnJlbnREZWZpbml0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBbcmVzdWx0RGF0YV09XCJwcmV2aWV3RGF0YSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGV4ZWN1dGVSZXF1ZXN0ZWQpPVwib25QcmV2aWV3RXhlY3V0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdqc29uJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1tb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWJhbm5lclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNvZGVcIiBbc2l6ZV09XCIxNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkxpdmUgUmVwb3J0RGVmaW5pdGlvbiBNZXRhZGF0YSBTY2hlbWE8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNvcHktanNvblwiIChjbGljayk9XCJjb3B5SnNvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJjb3B5U3RhdHVzKCkgPT09ICdDb3BpZWQhJyA/ICdjaGVjaycgOiAnY29weSdcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvcHlTdGF0dXMoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9XCJqc29uLWRpc3BsYXlcIj48Y29kZT57eyBmb3JtYXR0ZWRKc29uKCkgfX08L2NvZGU+PC9wcmU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwhLS0gMy4gUmlnaHQgUGFuZWw6IFByb3BlcnR5IEVkaXRvciAob25seSBzaG93biBpbiBkZXNpZ24gbW9kZSkgLS0+XG4gICAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicpIHtcbiAgICAgICAgICA8IS0tIFJpZ2h0IFBhbmVsIENvbGxhcHNlL0V4cGFuZCBUb2dnbGUgLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIndvcmtiZW5jaC1jb2xsYXBzZS1idG4gYnRuLWNvbGxhcHNlLXJpZ2h0XCJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1jb2xsYXBzZWRdPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkKCkgPyAnRXhwYW5kIFByb3BlcnR5IEVkaXRvcicgOiAnQ29sbGFwc2UgUHJvcGVydHkgRWRpdG9yJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpID8gJ0V4cGFuZCBQcm9wZXJ0eSBFZGl0b3InIDogJ0NvbGxhcHNlIFByb3BlcnR5IEVkaXRvcidcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKSA/ICdjaGV2cm9uLWxlZnQnIDogJ2NoZXZyb24tcmlnaHQnXCIgW3NpemVdPVwiMTJcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGFzaWRlIGNsYXNzPVwid29ya2JlbmNoLXJpZ2h0LXBhbmVsXCIgW2NsYXNzLmlzLWNvbGxhcHNlZF09XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiPlxuICAgICAgICAgICAgPHJwdC1wcm9wZXJ0eS1lZGl0b3IgLz5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTYXZlIE5vdGlmaWNhdGlvbiBUb2FzdCAtLT5cbiAgICAgIEBpZiAoc2F2ZU1lc3NhZ2UoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZS10b2FzdFwiPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY2hlY2tcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgPHNwYW4+e3sgc2F2ZU1lc3NhZ2UoKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiA2MDBweDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXNoZWxsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXdvcmtiZW5jaCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1wYW5lbCB7XG4gICAgICB3aWR0aDogMjUwcHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB6LWluZGV4OiAxMDtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtcGFuZWwuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuICAgIC53b3JrYmVuY2gtY2VudGVyLXBhbmVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtcmlnaHQtcGFuZWwge1xuICAgICAgd2lkdGg6IDMyMHB4O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICB0cmFuc2l0aW9uOiB3aWR0aCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZC1zbW9vdGgsIDI1MG1zKSBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIH1cbiAgICAud29ya2JlbmNoLXJpZ2h0LXBhbmVsLmlzLWNvbGxhcHNlZCB7XG4gICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuICAgIC53b3JrYmVuY2gtY29sbGFwc2UtYnRuIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTRweDtcbiAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHotaW5kZXg6IDI1O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtY29sbGFwc2UtYnRuOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjhmYWZjKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICB9XG4gICAgLmJ0bi1jb2xsYXBzZS1sZWZ0IHtcbiAgICAgIGxlZnQ6IDI0MnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMCA2cHggNnB4IDA7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGxlZnQgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQtc21vb3RoLCAyNTBtcykgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgfVxuICAgIC5idG4tY29sbGFwc2UtbGVmdC5pcy1jb2xsYXBzZWQge1xuICAgICAgbGVmdDogMDtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgfVxuICAgIC5idG4tY29sbGFwc2UtcmlnaHQge1xuICAgICAgcmlnaHQ6IDMxMnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4IDAgMCA2cHg7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICB0cmFuc2l0aW9uOiByaWdodCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZC1zbW9vdGgsIDI1MG1zKSBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICB9XG4gICAgLmJ0bi1jb2xsYXBzZS1yaWdodC5pcy1jb2xsYXBzZWQge1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLyogUHJldmlldyBNb2RlICovXG4gICAgLnByZXZpZXctbW9kZS1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWJhbm5lciB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvIDE2cHggYXV0bztcbiAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7XG4gICAgICBjb2xvcjogIzFlNDBhZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiZmRiZmU7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC44cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3cteHMsIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDQpKTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWNvbnRlbnQge1xuICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC8qIEpTT04gU2NoZW1hIE1vZGUgKi9cbiAgICAuanNvbi1tb2RlLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGYxNzJhO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIC5qc29uLWJhbm5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMxZTI5M2I7XG4gICAgfVxuICAgIC5idG4tY29weS1qc29uIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgcGFkZGluZzogNHB4IDEycHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1jb3B5LWpzb246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICAgIH1cbiAgICAuanNvbi1kaXNwbGF5IHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgYmFja2dyb3VuZDogIzA5MGQxNjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMxZTI5M2I7XG4gICAgICBjb2xvcjogIzM4YmRmODtcbiAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlO1xuICAgICAgZm9udC1zaXplOiAwLjg1cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgfVxuICAgIC8qIFNhdmUgVG9hc3QgTm90aWZpY2F0aW9uICovXG4gICAgLnNhdmUtdG9hc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAyNHB4O1xuICAgICAgcmlnaHQ6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB6LWluZGV4OiAxMDA7XG4gICAgICBhbmltYXRpb246IHJwdC1mYWRlLWluIDIwMG1zIGVhc2U7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgcnB0LWZhZGUtaW4ge1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfVxuICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBkZXNpZ25lclN0YXRlID0gaW5qZWN0KERlc2lnbmVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwZXJzaXN0ZW5jZUFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFTb3VyY2VBZGFwdGVyID0gaW5qZWN0KFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogT3B0aW9uYWwgcmVwb3J0SWQgdG8gbG9hZCBmcm9tIHBlcnNpc3RlbmNlIGFkYXB0ZXIgKi9cbiAgcmVhZG9ubHkgcmVwb3J0SWQgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgLyoqIE9wdGlvbmFsIGRlZmluaXRpb24gdG8gbG9hZCBkaXJlY3RseSAqL1xuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ2luaXRpYWxSZXBvcnQnIH0pO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgc2F2ZXMgdGhlIHJlcG9ydCAqL1xuICByZWFkb25seSByZXBvcnRTYXZlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPih7IGFsaWFzOiAnc2F2ZScgfSk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbmV2ZXIgdGhlIHJlcG9ydCBkZWZpbml0aW9uIGNoYW5nZXMgaW4gdGhlIHZpc3VhbCBkZXNpZ25lciAqL1xuICByZWFkb25seSBkZWZpbml0aW9uQ2hhbmdlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPih7IGFsaWFzOiAnZGVmaW5pdGlvbkNoYW5nZScgfSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERlZmluaXRpb24gPSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgdmlld01vZGUgPSB0aGlzLmRlc2lnbmVyU3RhdGUudmlld01vZGU7XG5cbiAgcmVhZG9ubHkgcHJldmlld0RhdGEgPSBzaWduYWw8dW5rbm93bltdIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNhdmVNZXNzYWdlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBjb3B5U3RhdHVzID0gc2lnbmFsPHN0cmluZz4oJ0NvcHkgSlNPTicpO1xuICByZWFkb25seSBpc0xlZnRQYW5lbENvbGxhcHNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgdG9nZ2xlTGVmdFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQudXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICB0b2dnbGVSaWdodFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnVwZGF0ZSgodikgPT4gIXYpO1xuICB9XG5cbiAgcmVhZG9ubHkgZm9ybWF0dGVkSnNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50RGVmaW5pdGlvbigpLCBudWxsLCAyKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBsb2FkZWRSZXBvcnRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbG9hZGVkUmVwb3J0RGVmOiBSZXBvcnREZWZpbml0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLmRlZmluaXRpb24oKTtcbiAgICAgICAgaWYgKGRlZiAmJiAoZGVmICE9PSB0aGlzLmxvYWRlZFJlcG9ydERlZiB8fCBkZWYuaWQgIT09IHRoaXMubG9hZGVkUmVwb3J0SWQpKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGRlZi5pZDtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydERlZiA9IGRlZjtcbiAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oZGVmKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5yZXBvcnRJZCgpO1xuICAgICAgICBpZiAoaWQgJiYgaWQgIT09IHRoaXMubG9hZGVkUmVwb3J0SWQgJiYgIXRoaXMuZGVmaW5pdGlvbigpICYmIHRoaXMucGVyc2lzdGVuY2VBZGFwdGVyKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGlkO1xuICAgICAgICAgIHRoaXMucGVyc2lzdGVuY2VBZGFwdGVyLmxvYWQoaWQpLnN1YnNjcmliZSgoZGVmKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oZGVmKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZGVzaWduZXJTdGF0ZS5kZWZpbml0aW9uKCk7XG4gICAgICBpZiAodGhpcy5kZXNpZ25lclN0YXRlLmlzRGlydHkoKSkge1xuICAgICAgICB0aGlzLmRlZmluaXRpb25DaGFuZ2VkLmVtaXQoY3VycmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWZpbml0aW9uKCkgJiYgIXRoaXMucmVwb3J0SWQoKSkge1xuICAgICAgLy8gU3RhcnQgd2l0aCBhIGNsZWFuIHJlcG9ydCBkZWZpbml0aW9uXG4gICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oe1xuICAgICAgICBpZDogYHJwdC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA4KX1gLFxuICAgICAgICBuYW1lOiAnTmV3IEN1c3RvbSBSZXBvcnQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1Zpc3VhbGx5IGRlc2lnbmVkIHJlcG9ydGluZyBwYWdlIGNyZWF0ZWQgd2l0aCBCV2F5cy1SZXBvcnQuJyxcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgbGF5b3V0OiB7IGNvbHVtbnM6IDEyLCBnYXA6IDE2LCBwYWRkaW5nOiAyNCwgZGlyZWN0aW9uOiAnbHRyJyB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXSxcbiAgICAgICAgcGFyYW1ldGVyczogW10sXG4gICAgICAgIGRhdGFTb3VyY2VzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50RGVmaW5pdGlvbigpO1xuICAgIGlmICh0aGlzLnBlcnNpc3RlbmNlQWRhcHRlcikge1xuICAgICAgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIuc2F2ZShjdXJyZW50KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoc2F2ZWREZWYpID0+IHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubWFya1NhdmVkKCk7XG4gICAgICAgICAgdGhpcy5yZXBvcnRTYXZlZC5lbWl0KHNhdmVkRGVmKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCgnUmVwb3J0IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tEZXNpZ25lcl0gU2F2ZSBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCgnRmFpbGVkIHRvIHNhdmUgcmVwb3J0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLm1hcmtTYXZlZCgpO1xuICAgICAgdGhpcy5yZXBvcnRTYXZlZC5lbWl0KGN1cnJlbnQpO1xuICAgICAgdGhpcy5zaG93VG9hc3QoJ1JlcG9ydCBzdGF0ZSBzYXZlZCcpO1xuICAgIH1cbiAgfVxuXG4gIG9uUHJldmlld0V4ZWN1dGUoZXZlbnQ6IHtcbiAgICBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uO1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZ3JpZCA9IGV2ZW50LmRlZmluaXRpb24uZ3JpZDtcbiAgICBpZiAoIWdyaWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0Rlc2lnbmVyIFByZXZpZXddIE5vIGdyaWQgYXR0YWNoZWQgdG8gcmVwb3J0IGRlZmluaXRpb24uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGRzID0gZXZlbnQuZGVmaW5pdGlvbi5kYXRhU291cmNlcz8uZmluZCgoZCkgPT4gZC5pZCA9PT0gZ3JpZC5kYXRhU291cmNlSWQpO1xuICAgIGlmICghZHMgJiYgZXZlbnQuZGVmaW5pdGlvbi5kYXRhU291cmNlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgZHMgPSBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzWzBdO1xuICAgIH1cblxuICAgIGlmICghZHMpIHtcbiAgICAgIC8vIExvb2sgZm9yIFN0b3JlZCBQcm9jZWR1cmUgb3IgVGFibGUgY29uZmlndXJlZCBvbiBhbnkgY29tcG9uZW50IGluIHRoZSByZXBvcnRcbiAgICAgIGNvbnN0IGNvbXBXaXRoRW50aXR5ID0gZXZlbnQuZGVmaW5pdGlvbi5jb21wb25lbnRzLmZpbmQoKGMpID0+IGMuZGF0YVNvdXJjZT8uZW50aXR5TmFtZSk7XG4gICAgICBpZiAoY29tcFdpdGhFbnRpdHk/LmRhdGFTb3VyY2U/LmVudGl0eU5hbWUpIHtcbiAgICAgICAgZHMgPSB7XG4gICAgICAgICAgaWQ6ICdzcC0nICsgY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIG5hbWU6IGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2UuZW50aXR5TmFtZSxcbiAgICAgICAgICBlbmRwb2ludDogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIHNjaGVtYTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5zY2hlbWEgfHwgJ2RibycsXG4gICAgICAgICAgdHlwZTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5zb3VyY2VUeXBlIHx8ICdwcm9jZWR1cmUnLFxuICAgICAgICAgIG1ldGhvZDogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5zb3VyY2VUeXBlID09PSAndGFibGUnID8gJ0dFVCcgOiAnU1RPUkVEX1BST0NFRFVSRScsXG4gICAgICAgICAgcGFyYW1ldGVyTWFwcGluZ3M6IGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2UucGFyYW1ldGVyTWFwcGluZ3MsXG4gICAgICAgIH0gYXMgYW55O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZHMpIHtcbiAgICAgIGRzID0ge1xuICAgICAgICBpZDogJ2RlZmF1bHQtZHMnLFxuICAgICAgICBuYW1lOiAnUmVwb3J0IERhdGEnLFxuICAgICAgICBlbmRwb2ludDogJ2RlZmF1bHQnLFxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGFTb3VyY2VBZGFwdGVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tEZXNpZ25lciBQcmV2aWV3XSBObyBkYXRhU291cmNlQWRhcHRlciBhdmFpbGFibGUuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2U/LmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgIGNvbnN0IGNvbXBNYXBwaW5ncyA9IChkcyBhcyBhbnkpPy5wYXJhbWV0ZXJNYXBwaW5ncyB8fCB7fTtcbiAgICBjb25zdCBleGVjdXRpb25QYXJhbXMgPSB7IC4uLmNvbXBNYXBwaW5ncywgLi4uc2Vzc2lvbiwgLi4uZXZlbnQucGFyYW1ldGVycyB9O1xuXG4gICAgdGhpcy5kYXRhU291cmNlQWRhcHRlci5leGVjdXRlKGRzLCBleGVjdXRpb25QYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLnByZXZpZXdEYXRhLnNldChkYXRhKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbRGVzaWduZXIgUHJldmlld10gRXhlY3V0aW9uIGZhaWxlZDonLCBlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvcHlKc29uKCk6IHZvaWQge1xuICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmZvcm1hdHRlZEpzb24oKSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuY29weVN0YXR1cy5zZXQoJ0NvcGllZCEnKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvcHlTdGF0dXMuc2V0KCdDb3B5IEpTT04nKSwgMjAwMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dUb2FzdChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmVNZXNzYWdlLnNldChtZXNzYWdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2F2ZU1lc3NhZ2Uuc2V0KG51bGwpLCAzMDAwKTtcbiAgfVxufVxuIl19
@@ -1,7 +1,10 @@
1
1
  export { DesignerComponent } from './designer.component';
2
+ export { RptReportDesignerComponent } from './rpt-report-designer.component';
2
3
  export { DesignerStateService, } from './services';
3
4
  export { ComponentPaletteComponent } from './components/component-palette/component-palette.component';
4
5
  export { DesignCanvasComponent } from './components/design-canvas/design-canvas.component';
5
6
  export { PropertyEditorComponent } from './components/property-editor/property-editor.component';
7
+ export { PropertyEditorActionComponent } from './components/property-editor/property-editor-action.component';
6
8
  export { DesignerToolbarComponent } from './components/toolbar/designer-toolbar.component';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9kZXNpZ25lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsb0JBQW9CLEdBQ3JCLE1BQU0sWUFBWSxDQUFDO0FBS3BCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRGVzaWduZXJDb21wb25lbnQgfSBmcm9tICcuL2Rlc2lnbmVyLmNvbXBvbmVudCc7XG5leHBvcnQge1xuICBEZXNpZ25lclN0YXRlU2VydmljZSxcbn0gZnJvbSAnLi9zZXJ2aWNlcyc7XG5leHBvcnQgdHlwZSB7XG4gIERlc2lnbmVyVmlld01vZGUsXG4gIERlc2lnbmVyQWN0aXZlVGFiLFxufSBmcm9tICcuL3NlcnZpY2VzJztcbmV4cG9ydCB7IENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LXBhbGV0dGUvY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50JztcbmV4cG9ydCB7IERlc2lnbkNhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kZXNpZ24tY2FudmFzL2Rlc2lnbi1jYW52YXMuY29tcG9uZW50JztcbmV4cG9ydCB7IFByb3BlcnR5RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb3BlcnR5LWVkaXRvci9wcm9wZXJ0eS1lZGl0b3IuY29tcG9uZW50JztcbmV4cG9ydCB7IERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b29sYmFyL2Rlc2lnbmVyLXRvb2xiYXIuY29tcG9uZW50JztcbiJdfQ==
9
+ export { ReportTemplateService } from './services/report-template.service';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9kZXNpZ25lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsb0JBQW9CLEdBQ3JCLE1BQU0sWUFBWSxDQUFDO0FBS3BCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzlHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRGVzaWduZXJDb21wb25lbnQgfSBmcm9tICcuL2Rlc2lnbmVyLmNvbXBvbmVudCc7XG5leHBvcnQgeyBScHRSZXBvcnREZXNpZ25lckNvbXBvbmVudCB9IGZyb20gJy4vcnB0LXJlcG9ydC1kZXNpZ25lci5jb21wb25lbnQnO1xuZXhwb3J0IHtcbiAgRGVzaWduZXJTdGF0ZVNlcnZpY2UsXG59IGZyb20gJy4vc2VydmljZXMnO1xuZXhwb3J0IHR5cGUge1xuICBEZXNpZ25lclZpZXdNb2RlLFxuICBEZXNpZ25lckFjdGl2ZVRhYixcbn0gZnJvbSAnLi9zZXJ2aWNlcyc7XG5leHBvcnQgeyBDb21wb25lbnRQYWxldHRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbXBvbmVudC1wYWxldHRlL2NvbXBvbmVudC1wYWxldHRlLmNvbXBvbmVudCc7XG5leHBvcnQgeyBEZXNpZ25DYW52YXNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGVzaWduLWNhbnZhcy9kZXNpZ24tY2FudmFzLmNvbXBvbmVudCc7XG5leHBvcnQgeyBQcm9wZXJ0eUVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm9wZXJ0eS1lZGl0b3IvcHJvcGVydHktZWRpdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgeyBQcm9wZXJ0eUVkaXRvckFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm9wZXJ0eS1lZGl0b3IvcHJvcGVydHktZWRpdG9yLWFjdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0IHsgRGVzaWduZXJUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Rvb2xiYXIvZGVzaWduZXItdG9vbGJhci5jb21wb25lbnQnO1xuZXhwb3J0IHsgUmVwb3J0VGVtcGxhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9yZXBvcnQtdGVtcGxhdGUuc2VydmljZSc7XG5leHBvcnQgdHlwZSB7IFJlcG9ydEJsdWVwcmludCB9IGZyb20gJy4vc2VydmljZXMvcmVwb3J0LXRlbXBsYXRlLnNlcnZpY2UnO1xuIl19
@@ -0,0 +1,102 @@
1
+ import { ChangeDetectionStrategy, Component, input, output, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DesignerComponent } from './designer.component';
4
+ import { RptIconComponent } from '../../primitives/components/icon/rpt-icon.component';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * `<rpt-report-designer>` (and `<rpt-designer-view>`)
8
+ *
9
+ * 1-tag facade component for visual report building.
10
+ * Simplifies report creation and editing across Angular apps and ERP suites.
11
+ *
12
+ * Usage:
13
+ * ```html
14
+ * <!-- Load and edit by ID with automatic persistence -->
15
+ * <rpt-report-designer [id]="'sales-report'" (saved)="onReportSaved($event)" />
16
+ *
17
+ * <!-- Or pass in-memory report object -->
18
+ * <rpt-report-designer [report]="myReport" (saved)="onReportSaved($event)" />
19
+ * ```
20
+ */
21
+ export class RptReportDesignerComponent {
22
+ /** Report ID to automatically load via configured ReportPersistenceAdapter */
23
+ id = input();
24
+ /** Report definition to load directly in memory */
25
+ report = input(null);
26
+ /** Whether to render a back/close button toolbar */
27
+ showCloseButton = input(false);
28
+ /** Label for close button */
29
+ closeLabel = input('Back');
30
+ /** Emitted when user saves the report */
31
+ saved = output();
32
+ /** Emitted when user clicks the close button */
33
+ closed = output();
34
+ /** Emitted whenever the designer definition changes */
35
+ definitionChange = output();
36
+ onSave(definition) {
37
+ this.saved.emit(definition);
38
+ }
39
+ onDefinitionChange(definition) {
40
+ this.definitionChange.emit(definition);
41
+ }
42
+ onClose() {
43
+ this.closed.emit();
44
+ }
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptReportDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RptReportDesignerComponent, isStandalone: true, selector: "rpt-report-designer, rpt-designer-view", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, report: { classPropertyName: "report", publicName: "report", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, closeLabel: { classPropertyName: "closeLabel", publicName: "closeLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { saved: "saved", closed: "closed", definitionChange: "definitionChange" }, ngImport: i0, template: `
47
+ <div class="rpt-designer-facade">
48
+ @if (showCloseButton()) {
49
+ <div class="rpt-facade-top-bar">
50
+ <button
51
+ type="button"
52
+ class="rpt-btn-close"
53
+ (click)="onClose()"
54
+ aria-label="Close Designer"
55
+ >
56
+ <rpt-icon name="arrow-left" [size]="16" />
57
+ <span>{{ closeLabel() }}</span>
58
+ </button>
59
+ </div>
60
+ }
61
+
62
+ <div class="rpt-designer-wrapper">
63
+ <rpt-designer
64
+ [reportId]="id()"
65
+ [initialReport]="report()"
66
+ (save)="onSave($event)"
67
+ (definitionChange)="onDefinitionChange($event)"
68
+ />
69
+ </div>
70
+ </div>
71
+ `, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-designer-facade{display:flex;flex-direction:column;width:100%;height:100%;position:relative;background:#f8fafc;overflow:hidden}.rpt-facade-top-bar{display:flex;align-items:center;padding:8px 16px;background:#fff;border-bottom:1px solid #e2e8f0;z-index:20}.rpt-btn-close{display:inline-flex;align-items:center;gap:6px;background:#f1f5f9;color:#334155;border:1px solid #cbd5e1;padding:6px 12px;border-radius:6px;font-size:.825rem;font-weight:500;cursor:pointer;transition:all .15s ease}.rpt-btn-close:hover{background:#e2e8f0;color:#0f172a}.rpt-designer-wrapper{flex:1;min-height:0;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DesignerComponent, selector: "rpt-designer", inputs: ["reportId", "initialReport"], outputs: ["save", "definitionChange"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
72
+ }
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptReportDesignerComponent, decorators: [{
74
+ type: Component,
75
+ args: [{ selector: 'rpt-report-designer, rpt-designer-view', standalone: true, imports: [CommonModule, DesignerComponent, RptIconComponent], template: `
76
+ <div class="rpt-designer-facade">
77
+ @if (showCloseButton()) {
78
+ <div class="rpt-facade-top-bar">
79
+ <button
80
+ type="button"
81
+ class="rpt-btn-close"
82
+ (click)="onClose()"
83
+ aria-label="Close Designer"
84
+ >
85
+ <rpt-icon name="arrow-left" [size]="16" />
86
+ <span>{{ closeLabel() }}</span>
87
+ </button>
88
+ </div>
89
+ }
90
+
91
+ <div class="rpt-designer-wrapper">
92
+ <rpt-designer
93
+ [reportId]="id()"
94
+ [initialReport]="report()"
95
+ (save)="onSave($event)"
96
+ (definitionChange)="onDefinitionChange($event)"
97
+ />
98
+ </div>
99
+ </div>
100
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-designer-facade{display:flex;flex-direction:column;width:100%;height:100%;position:relative;background:#f8fafc;overflow:hidden}.rpt-facade-top-bar{display:flex;align-items:center;padding:8px 16px;background:#fff;border-bottom:1px solid #e2e8f0;z-index:20}.rpt-btn-close{display:inline-flex;align-items:center;gap:6px;background:#f1f5f9;color:#334155;border:1px solid #cbd5e1;padding:6px 12px;border-radius:6px;font-size:.825rem;font-weight:500;cursor:pointer;transition:all .15s ease}.rpt-btn-close:hover{background:#e2e8f0;color:#0f172a}.rpt-designer-wrapper{flex:1;min-height:0;position:relative}\n"] }]
101
+ }] });
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LXJlcG9ydC1kZXNpZ25lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9kZXNpZ25lci9ycHQtcmVwb3J0LWRlc2lnbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQzs7QUFFdkY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFpRkgsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyw4RUFBOEU7SUFDckUsRUFBRSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBRTlCLG1EQUFtRDtJQUMxQyxNQUFNLEdBQUcsS0FBSyxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUV2RCxvREFBb0Q7SUFDM0MsZUFBZSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUVqRCw2QkFBNkI7SUFDcEIsVUFBVSxHQUFHLEtBQUssQ0FBUyxNQUFNLENBQUMsQ0FBQztJQUU1Qyx5Q0FBeUM7SUFDaEMsS0FBSyxHQUFHLE1BQU0sRUFBb0IsQ0FBQztJQUU1QyxnREFBZ0Q7SUFDdkMsTUFBTSxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBRWpDLHVEQUF1RDtJQUM5QyxnQkFBZ0IsR0FBRyxNQUFNLEVBQW9CLENBQUM7SUFFdkQsTUFBTSxDQUFDLFVBQTRCO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUE0QjtRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO3dHQWhDVSwwQkFBMEI7NEZBQTFCLDBCQUEwQiwwc0JBNUUzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCVCx1dUJBMUJTLFlBQVksK0JBQUUsaUJBQWlCLHVJQUFFLGdCQUFnQjs7NEZBNkVoRCwwQkFBMEI7a0JBaEZ0QyxTQUFTOytCQUNFLHdDQUF3QyxjQUN0QyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsWUFDbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5QlQsbUJBaURnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IERlc2lnbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9kZXNpZ25lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogYDxycHQtcmVwb3J0LWRlc2lnbmVyPmAgKGFuZCBgPHJwdC1kZXNpZ25lci12aWV3PmApXG4gKlxuICogMS10YWcgZmFjYWRlIGNvbXBvbmVudCBmb3IgdmlzdWFsIHJlcG9ydCBidWlsZGluZy5cbiAqIFNpbXBsaWZpZXMgcmVwb3J0IGNyZWF0aW9uIGFuZCBlZGl0aW5nIGFjcm9zcyBBbmd1bGFyIGFwcHMgYW5kIEVSUCBzdWl0ZXMuXG4gKlxuICogVXNhZ2U6XG4gKiBgYGBodG1sXG4gKiA8IS0tIExvYWQgYW5kIGVkaXQgYnkgSUQgd2l0aCBhdXRvbWF0aWMgcGVyc2lzdGVuY2UgLS0+XG4gKiA8cnB0LXJlcG9ydC1kZXNpZ25lciBbaWRdPVwiJ3NhbGVzLXJlcG9ydCdcIiAoc2F2ZWQpPVwib25SZXBvcnRTYXZlZCgkZXZlbnQpXCIgLz5cbiAqXG4gKiA8IS0tIE9yIHBhc3MgaW4tbWVtb3J5IHJlcG9ydCBvYmplY3QgLS0+XG4gKiA8cnB0LXJlcG9ydC1kZXNpZ25lciBbcmVwb3J0XT1cIm15UmVwb3J0XCIgKHNhdmVkKT1cIm9uUmVwb3J0U2F2ZWQoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LXJlcG9ydC1kZXNpZ25lciwgcnB0LWRlc2lnbmVyLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEZXNpZ25lckNvbXBvbmVudCwgUnB0SWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1kZXNpZ25lci1mYWNhZGVcIj5cbiAgICAgIEBpZiAoc2hvd0Nsb3NlQnV0dG9uKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1mYWNhZGUtdG9wLWJhclwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJycHQtYnRuLWNsb3NlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlKClcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIERlc2lnbmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImFycm93LWxlZnRcIiBbc2l6ZV09XCIxNlwiIC8+XG4gICAgICAgICAgICA8c3Bhbj57eyBjbG9zZUxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwicnB0LWRlc2lnbmVyLXdyYXBwZXJcIj5cbiAgICAgICAgPHJwdC1kZXNpZ25lclxuICAgICAgICAgIFtyZXBvcnRJZF09XCJpZCgpXCJcbiAgICAgICAgICBbaW5pdGlhbFJlcG9ydF09XCJyZXBvcnQoKVwiXG4gICAgICAgICAgKHNhdmUpPVwib25TYXZlKCRldmVudClcIlxuICAgICAgICAgIChkZWZpbml0aW9uQ2hhbmdlKT1cIm9uRGVmaW5pdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5ycHQtZGVzaWduZXItZmFjYWRlIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLnJwdC1mYWNhZGUtdG9wLWJhciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDhweCAxNnB4O1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC5ycHQtYnRuLWNsb3NlIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgYmFja2dyb3VuZDogI2YxZjVmOTtcbiAgICAgIGNvbG9yOiAjMzM0MTU1O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NiZDVlMTtcbiAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgZm9udC1zaXplOiAwLjgyNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1idG4tY2xvc2U6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2UyZThmMDtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgIH1cbiAgICAucnB0LWRlc2lnbmVyLXdyYXBwZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJwdFJlcG9ydERlc2lnbmVyQ29tcG9uZW50IHtcbiAgLyoqIFJlcG9ydCBJRCB0byBhdXRvbWF0aWNhbGx5IGxvYWQgdmlhIGNvbmZpZ3VyZWQgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyICovXG4gIHJlYWRvbmx5IGlkID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBSZXBvcnQgZGVmaW5pdGlvbiB0byBsb2FkIGRpcmVjdGx5IGluIG1lbW9yeSAqL1xuICByZWFkb25seSByZXBvcnQgPSBpbnB1dDxSZXBvcnREZWZpbml0aW9uIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIFdoZXRoZXIgdG8gcmVuZGVyIGEgYmFjay9jbG9zZSBidXR0b24gdG9vbGJhciAqL1xuICByZWFkb25seSBzaG93Q2xvc2VCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyoqIExhYmVsIGZvciBjbG9zZSBidXR0b24gKi9cbiAgcmVhZG9ubHkgY2xvc2VMYWJlbCA9IGlucHV0PHN0cmluZz4oJ0JhY2snKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgc2F2ZXMgdGhlIHJlcG9ydCAqL1xuICByZWFkb25seSBzYXZlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgdGhlIGNsb3NlIGJ1dHRvbiAqL1xuICByZWFkb25seSBjbG9zZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuZXZlciB0aGUgZGVzaWduZXIgZGVmaW5pdGlvbiBjaGFuZ2VzICovXG4gIHJlYWRvbmx5IGRlZmluaXRpb25DaGFuZ2UgPSBvdXRwdXQ8UmVwb3J0RGVmaW5pdGlvbj4oKTtcblxuICBvblNhdmUoZGVmaW5pdGlvbjogUmVwb3J0RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMuc2F2ZWQuZW1pdChkZWZpbml0aW9uKTtcbiAgfVxuXG4gIG9uRGVmaW5pdGlvbkNoYW5nZShkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5kZWZpbml0aW9uQ2hhbmdlLmVtaXQoZGVmaW5pdGlvbik7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxufVxuIl19