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
@@ -3,6 +3,8 @@ import { RptIconComponent } from '../icon/rpt-icon.component';
3
3
  import * as i0 from "@angular/core";
4
4
  export class RptButtonComponent {
5
5
  config = input.required();
6
+ control = input(null);
7
+ onAction = input();
6
8
  actionTriggered = output();
7
9
  elementId = computed(() => this.config().id);
8
10
  buttonLabel = computed(() => this.config().label || this.config().properties?.['text'] || 'Submit');
@@ -35,21 +37,30 @@ export class RptButtonComponent {
35
37
  return w && w !== 'auto' ? w : null;
36
38
  });
37
39
  onClick(event) {
40
+ const actionDef = this.resolveAction();
41
+ if (this.onAction()) {
42
+ this.onAction()(actionDef);
43
+ }
44
+ this.actionTriggered.emit(actionDef);
45
+ }
46
+ resolveAction() {
38
47
  const events = this.config().events;
39
48
  if (events && events.length > 0) {
40
49
  const clickEvent = events.find((e) => e.event === 'click');
41
50
  if (clickEvent) {
42
- this.actionTriggered.emit(clickEvent.action);
51
+ return clickEvent.action;
43
52
  }
44
53
  }
45
- else {
46
- // Default action if configured in properties
47
- const actionType = this.config().properties?.['action'] || 'execute-report';
48
- this.actionTriggered.emit({ type: actionType, target: this.config().id });
49
- }
54
+ const actionType = this.config().properties?.['action'] || 'execute-report';
55
+ const params = this.config().properties?.['actionParams'] || {};
56
+ return {
57
+ type: actionType,
58
+ target: this.config().id,
59
+ params,
60
+ };
50
61
  }
51
62
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
52
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RptButtonComponent, isStandalone: true, selector: "rpt-button", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionTriggered: "actionTriggered" }, ngImport: i0, template: `
63
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RptButtonComponent, isStandalone: true, selector: "rpt-button", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, onAction: { classPropertyName: "onAction", publicName: "onAction", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionTriggered: "actionTriggered" }, ngImport: i0, template: `
53
64
  <div class="rpt-button-container">
54
65
  <button
55
66
  [id]="elementId()"
@@ -91,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
91
102
  </div>
92
103
  `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-button-container{display:flex;align-items:flex-end;height:100%;width:100%;box-sizing:border-box;padding-bottom:2px}.rpt-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:38px;width:auto;max-width:100%;box-sizing:border-box;padding:0 20px;font-size:var(--rpt-font-size-base, .875rem);font-weight:500;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.rpt-btn:focus-visible{outline:none;box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-btn:disabled{opacity:.6;cursor:not-allowed}.rpt-btn-primary{background-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-text-inverse, #ffffff);border-color:var(--rpt-color-primary, #2563eb)}.rpt-btn-primary:hover:not(:disabled){background-color:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.rpt-btn-secondary{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border, #cbd5e1)}.rpt-btn-secondary:hover:not(:disabled){background-color:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-btn-outline{background-color:transparent;color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb)}.rpt-btn-outline:hover:not(:disabled){background-color:var(--rpt-color-primary-focus, rgba(37, 99, 235, .1))}.rpt-btn-danger{background-color:var(--rpt-color-danger, #ef4444);color:var(--rpt-color-text-inverse, #ffffff);border-color:var(--rpt-color-danger, #ef4444)}.rpt-btn-danger:hover:not(:disabled){background-color:#dc2626;border-color:#dc2626}.rpt-btn.rpt-btn-full{width:100%}.rpt-btn-icon{display:flex;align-items:center}\n"] }]
93
104
  }] });
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvYnV0dG9uL3JwdC1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQW1IOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkIsQ0FBQztJQUVyRCxlQUFlLEdBQUcsTUFBTSxFQUE2QixDQUFDO0lBRXRELFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLFdBQVcsR0FBRyxRQUFRLENBQzdCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLElBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBWSxJQUFJLFFBQVEsQ0FDeEYsQ0FBQztJQUNPLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQVcsQ0FBQztRQUM5RCxJQUFJLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLGdCQUFnQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEUsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELElBQUksTUFBTSxLQUFLLE9BQU8s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WUFDakI7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCVCxtQkF5RmdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvY29tcG9uZW50LWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1idXR0b24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUnB0SWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1idXR0b24tY29udGFpbmVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtpZF09XCJlbGVtZW50SWQoKVwiXG4gICAgICAgIFt0eXBlXT1cImJ1dHRvbkh0bWxUeXBlKClcIlxuICAgICAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3NlcygpXCJcbiAgICAgICAgW2NsYXNzLnJwdC1idG4tZnVsbF09XCJpc0Z1bGxXaWR0aCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiY3VzdG9tSGVpZ2h0KClcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiY3VzdG9tV2lkdGgoKVwiXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICBAaWYgKGljb24oKSkge1xuICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJpY29uKClcIiBbc2l6ZV09XCIxNVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPHNwYW4+e3sgYnV0dG9uTGFiZWwoKSB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICBgLFxuXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgIH1cbiAgICAucnB0LWJ1dHRvbi1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAycHg7XG4gICAgfVxuICAgIC5ycHQtYnRuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBoZWlnaHQ6IDM4cHg7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBwYWRkaW5nOiAwIDIwcHg7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbiAgICAucnB0LWJ0bjpmb2N1cy12aXNpYmxlIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy1mb2N1cywgMCAwIDAgM3B4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpKTtcbiAgICB9XG4gICAgLnJwdC1idG46ZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gICAgLyogVmFyaWFudHMgKi9cbiAgICAucnB0LWJ0bi1wcmltYXJ5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1pbnZlcnNlLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1wcmltYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1zZWNvbmRhcnkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNlY29uZGFyeTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1vdXRsaW5lIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1vdXRsaW5lOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWZvY3VzLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjEpKTtcbiAgICB9XG4gICAgLnJwdC1idG4tZGFuZ2VyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LWludmVyc2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICB9XG4gICAgLnJwdC1idG4tZGFuZ2VyOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkYzI2MjY7XG4gICAgICBib3JkZXItY29sb3I6ICNkYzI2MjY7XG4gICAgfVxuICAgIC5ycHQtYnRuLnJwdC1idG4tZnVsbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgLnJwdC1idG4taWNvbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUnB0QnV0dG9uQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQucmVxdWlyZWQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcblxuICByZWFkb25seSBhY3Rpb25UcmlnZ2VyZWQgPSBvdXRwdXQ8Q29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbj4oKTtcblxuICByZWFkb25seSBlbGVtZW50SWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmlkKTtcbiAgcmVhZG9ubHkgYnV0dG9uTGFiZWwgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmNvbmZpZygpLmxhYmVsIHx8ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsndGV4dCddIGFzIHN0cmluZykgfHwgJ1N1Ym1pdCdcbiAgKTtcbiAgcmVhZG9ubHkgYnV0dG9uSHRtbFR5cGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ2FjdGlvbiddIGFzIHN0cmluZztcbiAgICBpZiAoYWN0aW9uID09PSAnc3VibWl0JyB8fCBhY3Rpb24gPT09ICdleGVjdXRlLXJlcG9ydCcgfHwgIWFjdGlvbikge1xuICAgICAgcmV0dXJuICdzdWJtaXQnO1xuICAgIH1cbiAgICBpZiAoYWN0aW9uID09PSAncmVzZXQnKSB7XG4gICAgICByZXR1cm4gJ3Jlc2V0JztcbiAgICB9XG4gICAgcmV0dXJuICdidXR0b24nO1xuICB9KTtcbiAgcmVhZG9ubHkgaXNEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuZW5hYmxlZCA9PT0gZmFsc2UpO1xuICByZWFkb25seSBpY29uID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydpY29uJ10gYXMgc3RyaW5nKSB8fCAnJyk7XG5cbiAgcmVhZG9ubHkgYnV0dG9uQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YXJpYW50ID0gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWyd2YXJpYW50J10gYXMgc3RyaW5nKSB8fCAncHJpbWFyeSc7XG4gICAgcmV0dXJuIGBycHQtYnRuIHJwdC1idG4tJHt2YXJpYW50fWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzRnVsbFdpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnZnVsbFdpZHRoJ10gPT09IHRydWUgfHxcbiAgICAgIHRoaXMuY29uZmlnKCkubGF5b3V0Py53aWR0aCA9PT0gJzEwMCUnXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY3VzdG9tSGVpZ2h0ID0gY29tcHV0ZWQ8c3RyaW5nIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbmZpZygpLmxheW91dD8uaGVpZ2h0O1xuICAgIHJldHVybiBoICYmIGggIT09ICdhdXRvJyA/IGggOiBudWxsO1xuICB9KTtcblxuICByZWFkb25seSBjdXN0b21XaWR0aCA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCB3ID0gdGhpcy5jb25maWcoKS5sYXlvdXQ/LndpZHRoO1xuICAgIHJldHVybiB3ICYmIHcgIT09ICdhdXRvJyA/IHcgOiBudWxsO1xuICB9KTtcblxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRzID0gdGhpcy5jb25maWcoKS5ldmVudHM7XG4gICAgaWYgKGV2ZW50cyAmJiBldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2xpY2tFdmVudCA9IGV2ZW50cy5maW5kKChlKSA9PiBlLmV2ZW50ID09PSAnY2xpY2snKTtcbiAgICAgIGlmIChjbGlja0V2ZW50KSB7XG4gICAgICAgIHRoaXMuYWN0aW9uVHJpZ2dlcmVkLmVtaXQoY2xpY2tFdmVudC5hY3Rpb24pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IGFjdGlvbiBpZiBjb25maWd1cmVkIGluIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IGFjdGlvblR5cGUgPSAodGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ2FjdGlvbiddIGFzIHN0cmluZykgfHwgJ2V4ZWN1dGUtcmVwb3J0JztcbiAgICAgIHRoaXMuYWN0aW9uVHJpZ2dlcmVkLmVtaXQoeyB0eXBlOiBhY3Rpb25UeXBlLCB0YXJnZXQ6IHRoaXMuY29uZmlnKCkuaWQgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvYnV0dG9uL3JwdC1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQW1IOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkIsQ0FBQztJQUNyRCxPQUFPLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQy9CLFFBQVEsR0FBRyxLQUFLLEVBQStDLENBQUM7SUFFaEUsZUFBZSxHQUFHLE1BQU0sRUFBNkIsQ0FBQztJQUV0RCxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxXQUFXLEdBQUcsUUFBUSxDQUM3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxJQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQVksSUFBSSxRQUFRLENBQ3hGLENBQUM7SUFDTyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFXLENBQUM7UUFDOUQsSUFBSSxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxnQkFBZ0IsSUFBSSxDQUFD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QUFVLEVBQUUsQ0FBQyxjQUFjLENBQTZCLElBQUksRUFBRSxDQUFDO1FBQzdGLE9BQU87WUFDTCxJQUFJLEVBQUUsVUFBVTtZQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDeEIsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO3dHQXJFVSxrQkFBa0I7NEZBQWxCLGtCQUFrQiw0ZkE3R25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQsbWdFQW5CUyxnQkFBZ0I7OzRGQThHZixrQkFBa0I7a0JBakg5QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUNqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULG1CQXlGZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9jb21wb25lbnQtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWJ1dHRvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtScHRJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2lkXT1cImVsZW1lbnRJZCgpXCJcbiAgICAgICAgW3R5cGVdPVwiYnV0dG9uSHRtbFR5cGUoKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc2VzKClcIlxuICAgICAgICBbY2xhc3MucnB0LWJ0bi1mdWxsXT1cImlzRnVsbFdpZHRoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJjdXN0b21IZWlnaHQoKVwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJjdXN0b21XaWR0aCgpXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoaWNvbigpKSB7XG4gICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImljb24oKVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8c3Bhbj57eyBidXR0b25MYWJlbCgpIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcGFkZGluZy1ib3R0b206IDJweDtcbiAgICB9XG4gICAgLnJwdC1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIGhlaWdodDogMzhweDtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1iYXNlLCAwLjg3NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICAgIC5ycHQtYnRuOmZvY3VzLXZpc2libGUge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXJwdC1ib3gtc2hhZG93LWZvY3VzLCAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4yNSkpO1xuICAgIH1cbiAgICAucnB0LWJ0bjpkaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgICAvKiBWYXJpYW50cyAqL1xuICAgIC5ycHQtYnRuLXByaW1hcnkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LWludmVyc2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtYnRuLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNlY29uZGFyeSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC1idG4tc2Vjb25kYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1ob3ZlciwgIzk0YTNiOCk7XG4gICAgfVxuICAgIC5ycHQtYnRuLW91dGxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtYnRuLW91dGxpbmU6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktZm9jdXMsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMSkpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1kYW5nZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtaW52ZXJzZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgIH1cbiAgICAucnB0LWJ0bi1kYW5nZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RjMjYyNjtcbiAgICAgIGJvcmRlci1jb2xvcjogI2RjMjYyNjtcbiAgICB9XG4gICAgLnJwdC1idG4ucnB0LWJ0bi1mdWxsIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAucnB0LWJ0bi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBScHRCdXR0b25Db21wb25lbnQge1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBjb250cm9sID0gaW5wdXQ8dW5rbm93bj4obnVsbCk7XG4gIHJlYWRvbmx5IG9uQWN0aW9uID0gaW5wdXQ8KGFjdGlvbjogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbikgPT4gdm9pZD4oKTtcblxuICByZWFkb25seSBhY3Rpb25UcmlnZ2VyZWQgPSBvdXRwdXQ8Q29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbj4oKTtcblxuICByZWFkb25seSBlbGVtZW50SWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmlkKTtcbiAgcmVhZG9ubHkgYnV0dG9uTGFiZWwgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmNvbmZpZygpLmxhYmVsIHx8ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsndGV4dCddIGFzIHN0cmluZykgfHwgJ1N1Ym1pdCdcbiAgKTtcbiAgcmVhZG9ubHkgYnV0dG9uSHRtbFR5cGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ2FjdGlvbiddIGFzIHN0cmluZztcbiAgICBpZiAoYWN0aW9uID09PSAnc3VibWl0JyB8fCBhY3Rpb24gPT09ICdleGVjdXRlLXJlcG9ydCcgfHwgIWFjdGlvbikge1xuICAgICAgcmV0dXJuICdzdWJtaXQnO1xuICAgIH1cbiAgICBpZiAoYWN0aW9uID09PSAncmVzZXQnKSB7XG4gICAgICByZXR1cm4gJ3Jlc2V0JztcbiAgICB9XG4gICAgcmV0dXJuICdidXR0b24nO1xuICB9KTtcbiAgcmVhZG9ubHkgaXNEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuZW5hYmxlZCA9PT0gZmFsc2UpO1xuICByZWFkb25seSBpY29uID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydpY29uJ10gYXMgc3RyaW5nKSB8fCAnJyk7XG5cbiAgcmVhZG9ubHkgYnV0dG9uQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YXJpYW50ID0gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWyd2YXJpYW50J10gYXMgc3RyaW5nKSB8fCAncHJpbWFyeSc7XG4gICAgcmV0dXJuIGBycHQtYnRuIHJwdC1idG4tJHt2YXJpYW50fWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzRnVsbFdpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnZnVsbFdpZHRoJ10gPT09IHRydWUgfHxcbiAgICAgIHRoaXMuY29uZmlnKCkubGF5b3V0Py53aWR0aCA9PT0gJzEwMCUnXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY3VzdG9tSGVpZ2h0ID0gY29tcHV0ZWQ8c3RyaW5nIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbmZpZygpLmxheW91dD8uaGVpZ2h0O1xuICAgIHJldHVybiBoICYmIGggIT09ICdhdXRvJyA/IGggOiBudWxsO1xuICB9KTtcblxuICByZWFkb25seSBjdXN0b21XaWR0aCA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCB3ID0gdGhpcy5jb25maWcoKS5sYXlvdXQ/LndpZHRoO1xuICAgIHJldHVybiB3ICYmIHcgIT09ICdhdXRvJyA/IHcgOiBudWxsO1xuICB9KTtcblxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYWN0aW9uRGVmID0gdGhpcy5yZXNvbHZlQWN0aW9uKCk7XG4gICAgaWYgKHRoaXMub25BY3Rpb24oKSkge1xuICAgICAgdGhpcy5vbkFjdGlvbigpIShhY3Rpb25EZWYpO1xuICAgIH1cbiAgICB0aGlzLmFjdGlvblRyaWdnZXJlZC5lbWl0KGFjdGlvbkRlZik7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVBY3Rpb24oKTogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZXZlbnRzID0gdGhpcy5jb25maWcoKS5ldmVudHM7XG4gICAgaWYgKGV2ZW50cyAmJiBldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2xpY2tFdmVudCA9IGV2ZW50cy5maW5kKChlKSA9PiBlLmV2ZW50ID09PSAnY2xpY2snKTtcbiAgICAgIGlmIChjbGlja0V2ZW50KSB7XG4gICAgICAgIHJldHVybiBjbGlja0V2ZW50LmFjdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWN0aW9uVHlwZSA9ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnYWN0aW9uJ10gYXMgc3RyaW5nKSB8fCAnZXhlY3V0ZS1yZXBvcnQnO1xuICAgIGNvbnN0IHBhcmFtcyA9ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnYWN0aW9uUGFyYW1zJ10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHx8IHt9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBhY3Rpb25UeXBlLFxuICAgICAgdGFyZ2V0OiB0aGlzLmNvbmZpZygpLmlkLFxuICAgICAgcGFyYW1zLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -55,6 +55,15 @@ export class ReportChartBridgeComponent {
55
55
  const max = this.maxValue();
56
56
  return Math.round((value / max) * 100);
57
57
  }
58
+ formatValue(val) {
59
+ if (val >= 1_000_000) {
60
+ return (val / 1_000_000).toFixed(1).replace(/\.0$/, '') + 'M';
61
+ }
62
+ if (val >= 1_000) {
63
+ return (val / 1_000).toFixed(1).replace(/\.0$/, '') + 'k';
64
+ }
65
+ return String(val);
66
+ }
58
67
  donutSegments = computed(() => {
59
68
  const items = this.data();
60
69
  const total = this.totalValue();
@@ -125,7 +134,7 @@ export class ReportChartBridgeComponent {
125
134
  <div class="rpt-chart-canvas-area">
126
135
  @if (data().length === 0) {
127
136
  <div class="rpt-chart-empty">No chart data available</div>
128
- } @else if (chartType() === 'bar') {
137
+ } @else if (chartType() === 'bar') {
129
138
  <!-- Vertical Bar Chart -->
130
139
  <div class="rpt-bar-chart">
131
140
  @for (item of data(); track item.label) {
@@ -137,7 +146,8 @@ export class ReportChartBridgeComponent {
137
146
  [style.background-color]="item.color || defaultColors[$index % defaultColors.length]"
138
147
  [title]="item.label + ': ' + item.value"
139
148
  >
140
- <span class="rpt-bar-tooltip">{{ item.value }}</span>
149
+ <span class="rpt-bar-val-badge">{{ formatValue(item.value) }}</span>
150
+ <span class="rpt-bar-tooltip">{{ item.label }}: {{ item.value.toLocaleString() }}</span>
141
151
  </div>
142
152
  </div>
143
153
  <span class="rpt-bar-label" [title]="item.label">{{ item.label }}</span>
@@ -226,7 +236,7 @@ export class ReportChartBridgeComponent {
226
236
  </div>
227
237
  }
228
238
  </div>
229
- `, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-chart-bridge-container{width:100%}.rpt-chart-fallback-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-lg, 12px);padding:var(--rpt-space-md, 20px);box-shadow:0 1px 3px #0000000d;display:flex;flex-direction:column;height:100%;box-sizing:border-box;gap:16px}.rpt-chart-fallback-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.rpt-chart-title{font-size:1rem;font-weight:600;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-chart-badge{font-size:.6875rem;font-weight:700;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b);letter-spacing:.05em}.rpt-chart-canvas-area{min-height:140px;height:100%;flex:1;display:flex;align-items:center;justify-content:center}.rpt-chart-empty{color:var(--rpt-text-muted, #94a3b8);font-size:.875rem}.rpt-bar-chart{display:flex;align-items:flex-end;justify-content:space-around;gap:12px;width:100%;height:180px;padding-top:20px}.rpt-bar-column{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;max-width:48px}.rpt-bar-track{flex:1;width:100%;background:var(--rpt-bg-subtle, #f8fafc);border-radius:6px 6px 0 0;display:flex;align-items:flex-end;overflow:hidden}.rpt-bar-fill{position:relative;width:100%;min-height:4px;border-radius:6px 6px 0 0;transition:height .4s cubic-bezier(.16,1,.3,1);cursor:pointer}.rpt-bar-fill:hover .rpt-bar-tooltip{opacity:1;visibility:visible;transform:translateY(-8px)}.rpt-bar-tooltip{position:absolute;top:-24px;left:50%;transform:translate(-50%);background:#0f172a;color:#fff;font-size:.6875rem;padding:2px 6px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;transition:all .15s ease;pointer-events:none;z-index:10}.rpt-bar-label{font-size:.75rem;color:var(--rpt-text-muted, #64748b);margin-top:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;text-align:center}.rpt-donut-chart-container{display:flex;align-items:center;justify-content:center;gap:32px;width:100%;flex-wrap:wrap}.rpt-donut-svg{width:150px;height:150px;transform:rotate(-90deg)}.rpt-donut-total-val{transform:rotate(90deg);transform-origin:80px 80px;font-size:1.25rem;font-weight:700;fill:var(--rpt-text-color, #0f172a)}.rpt-donut-total-lbl{transform:rotate(90deg);transform-origin:80px 80px;font-size:.6875rem;fill:var(--rpt-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-chart-legend{display:flex;flex-direction:column;gap:8px;min-width:140px}.rpt-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem}.rpt-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.rpt-legend-label{flex:1;color:var(--rpt-text-color, #334155)}.rpt-legend-value{font-weight:600;color:var(--rpt-text-muted, #64748b)}.rpt-line-chart-container{width:100%;display:flex;flex-direction:column;gap:8px}.rpt-line-svg{width:100%;height:140px}.rpt-line-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--rpt-text-muted, #64748b);padding:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
239
+ `, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-chart-bridge-container{width:100%;height:100%;min-height:220px;display:flex;flex-direction:column}.rpt-chart-fallback-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-lg, 12px);padding:var(--rpt-space-md, 20px);box-shadow:0 1px 3px #0000000d;display:flex;flex-direction:column;flex:1;height:100%;min-height:220px;box-sizing:border-box;gap:16px;overflow:hidden}.rpt-chart-fallback-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.rpt-chart-title{font-size:1rem;font-weight:600;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-chart-badge{font-size:.6875rem;font-weight:700;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b);letter-spacing:.05em}.rpt-chart-canvas-area{min-height:140px;height:100%;flex:1;display:flex;align-items:center;justify-content:center;overflow:visible}.rpt-chart-empty{color:var(--rpt-text-muted, #94a3b8);font-size:.875rem}.rpt-bar-chart{display:flex;align-items:flex-end;justify-content:space-around;gap:16px;width:100%;height:100%;min-height:150px;padding-top:24px;box-sizing:border-box}.rpt-bar-column{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;min-width:64px;max-width:140px}.rpt-bar-track{flex:1;width:38px;max-width:44px;margin:0 auto;background:var(--rpt-bg-subtle, #f8fafc);border-radius:6px 6px 0 0;display:flex;align-items:flex-end;position:relative}.rpt-bar-fill{position:relative;width:100%;min-height:4px;border-radius:6px 6px 0 0;transition:height .4s cubic-bezier(.16,1,.3,1);cursor:pointer;display:flex;justify-content:center}.rpt-bar-val-badge{position:absolute;top:-22px;font-size:.6875rem;font-weight:600;color:var(--rpt-text-muted, #64748b);white-space:nowrap;pointer-events:none}.rpt-bar-fill:hover .rpt-bar-val-badge{color:var(--rpt-text-color, #0f172a);font-weight:700}.rpt-bar-tooltip{position:absolute;top:-34px;left:50%;transform:translate(-50%);background:#0f172a;color:#fff;font-size:.6875rem;padding:3px 8px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;transition:all .15s ease;pointer-events:none;z-index:10;box-shadow:0 4px 6px -1px #0000001a}.rpt-bar-fill:hover .rpt-bar-tooltip{opacity:1;visibility:visible;transform:translate(-50%) translateY(-4px)}.rpt-bar-label{font-size:.75rem;color:var(--rpt-text-muted, #64748b);margin-top:10px;white-space:normal;line-height:1.25;text-align:center;word-break:break-word;max-width:100%}.rpt-donut-chart-container{display:flex;align-items:center;justify-content:center;gap:32px;width:100%;flex-wrap:wrap}.rpt-donut-svg{width:150px;height:150px;transform:rotate(-90deg)}.rpt-donut-total-val{transform:rotate(90deg);transform-origin:80px 80px;font-size:1.25rem;font-weight:700;fill:var(--rpt-text-color, #0f172a)}.rpt-donut-total-lbl{transform:rotate(90deg);transform-origin:80px 80px;font-size:.6875rem;fill:var(--rpt-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-chart-legend{display:flex;flex-direction:column;gap:8px;min-width:140px}.rpt-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem}.rpt-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.rpt-legend-label{flex:1;color:var(--rpt-text-color, #334155)}.rpt-legend-value{font-weight:600;color:var(--rpt-text-muted, #64748b)}.rpt-line-chart-container{width:100%;display:flex;flex-direction:column;gap:8px}.rpt-line-svg{width:100%;height:140px}.rpt-line-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--rpt-text-muted, #64748b);padding:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
230
240
  }
231
241
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportChartBridgeComponent, decorators: [{
232
242
  type: Component,
@@ -255,7 +265,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
255
265
  <div class="rpt-chart-canvas-area">
256
266
  @if (data().length === 0) {
257
267
  <div class="rpt-chart-empty">No chart data available</div>
258
- } @else if (chartType() === 'bar') {
268
+ } @else if (chartType() === 'bar') {
259
269
  <!-- Vertical Bar Chart -->
260
270
  <div class="rpt-bar-chart">
261
271
  @for (item of data(); track item.label) {
@@ -267,7 +277,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
267
277
  [style.background-color]="item.color || defaultColors[$index % defaultColors.length]"
268
278
  [title]="item.label + ': ' + item.value"
269
279
  >
270
- <span class="rpt-bar-tooltip">{{ item.value }}</span>
280
+ <span class="rpt-bar-val-badge">{{ formatValue(item.value) }}</span>
281
+ <span class="rpt-bar-tooltip">{{ item.label }}: {{ item.value.toLocaleString() }}</span>
271
282
  </div>
272
283
  </div>
273
284
  <span class="rpt-bar-label" [title]="item.label">{{ item.label }}</span>
@@ -356,6 +367,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
356
367
  </div>
357
368
  }
358
369
  </div>
359
- `, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-chart-bridge-container{width:100%}.rpt-chart-fallback-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-lg, 12px);padding:var(--rpt-space-md, 20px);box-shadow:0 1px 3px #0000000d;display:flex;flex-direction:column;height:100%;box-sizing:border-box;gap:16px}.rpt-chart-fallback-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.rpt-chart-title{font-size:1rem;font-weight:600;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-chart-badge{font-size:.6875rem;font-weight:700;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b);letter-spacing:.05em}.rpt-chart-canvas-area{min-height:140px;height:100%;flex:1;display:flex;align-items:center;justify-content:center}.rpt-chart-empty{color:var(--rpt-text-muted, #94a3b8);font-size:.875rem}.rpt-bar-chart{display:flex;align-items:flex-end;justify-content:space-around;gap:12px;width:100%;height:180px;padding-top:20px}.rpt-bar-column{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;max-width:48px}.rpt-bar-track{flex:1;width:100%;background:var(--rpt-bg-subtle, #f8fafc);border-radius:6px 6px 0 0;display:flex;align-items:flex-end;overflow:hidden}.rpt-bar-fill{position:relative;width:100%;min-height:4px;border-radius:6px 6px 0 0;transition:height .4s cubic-bezier(.16,1,.3,1);cursor:pointer}.rpt-bar-fill:hover .rpt-bar-tooltip{opacity:1;visibility:visible;transform:translateY(-8px)}.rpt-bar-tooltip{position:absolute;top:-24px;left:50%;transform:translate(-50%);background:#0f172a;color:#fff;font-size:.6875rem;padding:2px 6px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;transition:all .15s ease;pointer-events:none;z-index:10}.rpt-bar-label{font-size:.75rem;color:var(--rpt-text-muted, #64748b);margin-top:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;text-align:center}.rpt-donut-chart-container{display:flex;align-items:center;justify-content:center;gap:32px;width:100%;flex-wrap:wrap}.rpt-donut-svg{width:150px;height:150px;transform:rotate(-90deg)}.rpt-donut-total-val{transform:rotate(90deg);transform-origin:80px 80px;font-size:1.25rem;font-weight:700;fill:var(--rpt-text-color, #0f172a)}.rpt-donut-total-lbl{transform:rotate(90deg);transform-origin:80px 80px;font-size:.6875rem;fill:var(--rpt-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-chart-legend{display:flex;flex-direction:column;gap:8px;min-width:140px}.rpt-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem}.rpt-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.rpt-legend-label{flex:1;color:var(--rpt-text-color, #334155)}.rpt-legend-value{font-weight:600;color:var(--rpt-text-muted, #64748b)}.rpt-line-chart-container{width:100%;display:flex;flex-direction:column;gap:8px}.rpt-line-svg{width:100%;height:140px}.rpt-line-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--rpt-text-muted, #64748b);padding:0 8px}\n"] }]
370
+ `, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-chart-bridge-container{width:100%;height:100%;min-height:220px;display:flex;flex-direction:column}.rpt-chart-fallback-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-lg, 12px);padding:var(--rpt-space-md, 20px);box-shadow:0 1px 3px #0000000d;display:flex;flex-direction:column;flex:1;height:100%;min-height:220px;box-sizing:border-box;gap:16px;overflow:hidden}.rpt-chart-fallback-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.rpt-chart-title{font-size:1rem;font-weight:600;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-chart-badge{font-size:.6875rem;font-weight:700;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b);letter-spacing:.05em}.rpt-chart-canvas-area{min-height:140px;height:100%;flex:1;display:flex;align-items:center;justify-content:center;overflow:visible}.rpt-chart-empty{color:var(--rpt-text-muted, #94a3b8);font-size:.875rem}.rpt-bar-chart{display:flex;align-items:flex-end;justify-content:space-around;gap:16px;width:100%;height:100%;min-height:150px;padding-top:24px;box-sizing:border-box}.rpt-bar-column{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;min-width:64px;max-width:140px}.rpt-bar-track{flex:1;width:38px;max-width:44px;margin:0 auto;background:var(--rpt-bg-subtle, #f8fafc);border-radius:6px 6px 0 0;display:flex;align-items:flex-end;position:relative}.rpt-bar-fill{position:relative;width:100%;min-height:4px;border-radius:6px 6px 0 0;transition:height .4s cubic-bezier(.16,1,.3,1);cursor:pointer;display:flex;justify-content:center}.rpt-bar-val-badge{position:absolute;top:-22px;font-size:.6875rem;font-weight:600;color:var(--rpt-text-muted, #64748b);white-space:nowrap;pointer-events:none}.rpt-bar-fill:hover .rpt-bar-val-badge{color:var(--rpt-text-color, #0f172a);font-weight:700}.rpt-bar-tooltip{position:absolute;top:-34px;left:50%;transform:translate(-50%);background:#0f172a;color:#fff;font-size:.6875rem;padding:3px 8px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;transition:all .15s ease;pointer-events:none;z-index:10;box-shadow:0 4px 6px -1px #0000001a}.rpt-bar-fill:hover .rpt-bar-tooltip{opacity:1;visibility:visible;transform:translate(-50%) translateY(-4px)}.rpt-bar-label{font-size:.75rem;color:var(--rpt-text-muted, #64748b);margin-top:10px;white-space:normal;line-height:1.25;text-align:center;word-break:break-word;max-width:100%}.rpt-donut-chart-container{display:flex;align-items:center;justify-content:center;gap:32px;width:100%;flex-wrap:wrap}.rpt-donut-svg{width:150px;height:150px;transform:rotate(-90deg)}.rpt-donut-total-val{transform:rotate(90deg);transform-origin:80px 80px;font-size:1.25rem;font-weight:700;fill:var(--rpt-text-color, #0f172a)}.rpt-donut-total-lbl{transform:rotate(90deg);transform-origin:80px 80px;font-size:.6875rem;fill:var(--rpt-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-chart-legend{display:flex;flex-direction:column;gap:8px;min-width:140px}.rpt-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem}.rpt-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.rpt-legend-label{flex:1;color:var(--rpt-text-color, #334155)}.rpt-legend-value{font-weight:600;color:var(--rpt-text-muted, #64748b)}.rpt-line-chart-container{width:100%;display:flex;flex-direction:column;gap:8px}.rpt-line-svg{width:100%;height:140px}.rpt-line-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--rpt-text-muted, #64748b);padding:0 8px}\n"] }]
360
371
  }] });
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNoYXJ0LWJyaWRnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvY2hhcnQtYnJpZGdlL3JlcG9ydC1jaGFydC1icmlkZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQThXOUUsTUFBTSxPQUFPLDBCQUEwQjtJQUM1QixrQkFBa0IsR0FBeUIsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXZGLFVBQVUsR0FBRyxLQUFLLEVBQTZCLENBQUM7SUFDaEQsVUFBVSxHQUFHLEtBQUssQ0FBOEIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUUsZUFBZSxHQUFHLEtBQUssQ0FBd0IsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEYsV0FBVyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdkUsYUFBYSxHQUFHLEtBQUssQ0FBc0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFckUsYUFBYSxHQUFHO1FBQ3ZCLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNB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QUksQ0FBQztRQUV0RyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7d0dBckhRLDBCQUEwQjs0RkFBMUIsMEJBQTBCLDh2QkE5VjNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4SFQsNm9HQWhJUyxZQUFZOzs0RkFnV1gsMEJBQTBCO2tCQW5XdEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUNOLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThIVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDSEFSVF9DT01QT05FTlQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGFydERhdGFJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbiAgY29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENoYXJ0VHlwZSA9ICdiYXInIHwgJ2xpbmUnIHwgJ2RvbnV0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWNoYXJ0LWJyaWRnZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWJyaWRnZS1jb250YWluZXJcIj5cbiAgICAgIEBpZiAoaG9zdENoYXJ0Q29tcG9uZW50KSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJcbiAgICAgICAgICAgIGhvc3RDaGFydENvbXBvbmVudDtcbiAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICBkYXRhOiBkYXRhKCksXG4gICAgICAgICAgICAgIGNoYXJ0VHlwZTogY2hhcnRUeXBlKCksXG4gICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSgpLFxuICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIlxuICAgICAgICAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gQnVpbHQtaW4gZmFsbGJhY2sgU1ZHL0NTUyBjaGFydCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1mYWxsYmFjay1jYXJkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1mYWxsYmFjay1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cInJwdC1jaGFydC10aXRsZVwiPnt7IHRpdGxlKCkgfX08L2gzPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtY2hhcnQtYmFkZ2VcIj57eyBjaGFydFR5cGUoKSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtY2hhcnQtY2FudmFzLWFyZWFcIj5cbiAgICAgICAgICAgIEBpZiAoZGF0YSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWVtcHR5XCI+Tm8gY2hhcnQgZGF0YSBhdmFpbGFibGU8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKGNoYXJ0VHlwZSgpID09PSAnYmFyJykge1xuICAgICAgICAgICAgICA8IS0tIFZlcnRpY2FsIEJhciBDaGFydCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1iYXItY2hhcnRcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGRhdGEoKTsgdHJhY2sgaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1iYXItY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYmFyLXRyYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtYmFyLWZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC4lXT1cImdldEJhclBlcmNlbnRhZ2UoaXRlbS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXRlbS5jb2xvciB8fCBkZWZhdWx0Q29sb3JzWyRpbmRleCAlIGRlZmF1bHRDb2xvcnMubGVuZ3RoXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbS5sYWJlbCArICc6ICcgKyBpdGVtLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1iYXItdG9vbHRpcFwiPnt7IGl0ZW0udmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1iYXItbGFiZWxcIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoY2hhcnRUeXBlKCkgPT09ICdkb251dCcpIHtcbiAgICAgICAgICAgICAgPCEtLSBTVkcgRG9udXQgQ2hhcnQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZG9udXQtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1kb251dC1zdmdcIiB2aWV3Qm94PVwiMCAwIDE2MCAxNjBcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZG9udXRTZWdtZW50cygpOyB0cmFjayBzZWdtZW50LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBjeD1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICBjeT1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNjBcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlZ21lbnQuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlZ21lbnQuZGFzaEFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaG9mZnNldF09XCJzZWdtZW50LmRhc2hPZmZzZXRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPHRleHQgeD1cIjgwXCIgeT1cIjc2XCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBjbGFzcz1cInJwdC1kb251dC10b3RhbC12YWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdG90YWxWYWx1ZSgpIH19XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCB4PVwiODBcIiB5PVwiOTJcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGNsYXNzPVwicnB0LWRvbnV0LXRvdGFsLWxibFwiPlxuICAgICAgICAgICAgICAgICAgICBUb3RhbFxuICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1sZWdlbmRcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZGF0YSgpOyB0cmFjayBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtbGVnZW5kLWRvdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLmNvbG9yIHx8IGRlZmF1bHRDb2xvcnNbJGluZGV4ICUgZGVmYXVsdENvbG9ycy5sZW5ndGhdXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWxlZ2VuZC1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGVnZW5kLXZhbHVlXCI+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDwhLS0gU1ZHIExpbmUgLyBBcmVhIENoYXJ0IC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWxpbmUtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1saW5lLXN2Z1wiIHZpZXdCb3g9XCIwIDAgNDAwIDE2MFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicnB0TGluZUdyYWRcIiB4MT1cIjBcIiB5MT1cIjBcIiB4Mj1cIjBcIiB5Mj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwJVwiIHN0b3AtY29sb3I9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIiBzdG9wLW9wYWNpdHk9XCIwLjNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjEwMCVcIiBzdG9wLWNvbG9yPVwidmFyKC0tcnB0LXByaW1hcnksICMyNTYzZWIpXCIgc3RvcC1vcGFjaXR5PVwiMC4wXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmFyZWFQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwibGluZVBvaW50cygpLmFyZWFQYXRoXCIgZmlsbD1cInVybCgjcnB0TGluZUdyYWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmxpbmVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZF09XCJsaW5lUG9pbnRzKCkubGluZVBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHB0IG9mIGxpbmVQb2ludHMoKS5wb2ludHM7IHRyYWNrIHB0LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeF09XCJwdC54XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeV09XCJwdC55XCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cInZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1saW5lLWxhYmVsc1wiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGluZS1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtYnJpZGdlLWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWZhbGxiYWNrLWNhcmQge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtcmFkaXVzLWxnLCAxMnB4KTtcbiAgICAgIHBhZGRpbmc6IHZhcigtLXJwdC1zcGFjZS1tZCwgMjBweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGdhcDogMTZweDtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWZhbGxiYWNrLWhlYWRlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC1iYWRnZSB7XG4gICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBwYWRkaW5nOiAycHggOHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWJnLXN1YnRsZSwgI2YxZjVmOSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWNhbnZhcy1hcmVhIHtcbiAgICAgIG1pbi1oZWlnaHQ6IDE0MHB4O1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZmxleDogMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC1lbXB0eSB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM5NGEzYjgpO1xuICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICB9XG5cbiAgICAvKiBCYXIgQ2hhcnQgKi9cbiAgICAucnB0LWJhci1jaGFydCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICBnYXA6IDEycHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTgwcHg7XG4gICAgICBwYWRkaW5nLXRvcDogMjBweDtcbiAgICB9XG5cbiAgICAucnB0LWJhci1jb2x1bW4ge1xuICAgICAgZmxleDogMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1heC13aWR0aDogNDhweDtcbiAgICB9XG5cbiAgICAucnB0LWJhci10cmFjayB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDRweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwO1xuICAgICAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuNHMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbDpob3ZlciAucnB0LWJhci10b29sdGlwIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC04cHgpO1xuICAgIH1cblxuICAgIC5ycHQtYmFyLXRvb2x0aXAge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAtMjRweDtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIGJhY2tncm91bmQ6ICMwZjE3MmE7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgcGFkZGluZzogMnB4IDZweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHotaW5kZXg6IDEwO1xuICAgIH1cblxuICAgIC5ycHQtYmFyLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIC8qIERvbnV0IENoYXJ0ICovXG4gICAgLnJwdC1kb251dC1jaGFydC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGdhcDogMzJweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtc3ZnIHtcbiAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgIGhlaWdodDogMTUwcHg7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtdG90YWwtdmFsIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDgwcHggODBweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnJwdC1kb251dC10b3RhbC1sYmwge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogODBweCA4MHB4O1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWxlZ2VuZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgbWluLXdpZHRoOiAxNDBweDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1pdGVtIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1kb3Qge1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1sYWJlbCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMzM0MTU1KTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC12YWx1ZSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAvKiBMaW5lIENoYXJ0ICovXG4gICAgLnJwdC1saW5lLWNoYXJ0LWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLXN2ZyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLWxhYmVscyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIHBhZGRpbmc6IDAgOHB4O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0Q2hhcnRCcmlkZ2VDb21wb25lbnQge1xuICByZWFkb25seSBob3N0Q2hhcnRDb21wb25lbnQ6IFR5cGU8dW5rbm93bj4gfCBudWxsID0gaW5qZWN0KENIQVJUX0NPTVBPTkVOVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgY3VzdG9tRGF0YSA9IGlucHV0PENoYXJ0RGF0YUl0ZW1bXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnZGF0YScgfSk7XG4gIHJlYWRvbmx5IGN1c3RvbUNoYXJ0VHlwZSA9IGlucHV0PENoYXJ0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnY2hhcnRUeXBlJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tVGl0bGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RpdGxlJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tT3B0aW9ucyA9IGlucHV0PFJlY29yZDxzdHJpbmcsIGFueT4+KHt9LCB7IGFsaWFzOiAnb3B0aW9ucycgfSk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdENvbG9ycyA9IFtcbiAgICAnIzI1NjNlYicsXG4gICAgJyMxMGI5ODEnLFxuICAgICcjZjU5ZTBiJyxcbiAgICAnI2VmNDQ0NCcsXG4gICAgJyM4YjVjZjYnLFxuICAgICcjMDZiNmQ0JyxcbiAgICAnI2VjNDg5OSdcbiAgXTtcblxuICByZWFkb25seSB0aXRsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21UaXRsZSgpID8/XG4gICAgICAodGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsndGl0bGUnXSBhcyBzdHJpbmcpID8/XG4gICAgICB0aGlzLmRlZmluaXRpb24oKT8ubGFiZWwgPz9cbiAgICAgICdDaGFydCdcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBjaGFydFR5cGUgPSBjb21wdXRlZDxDaGFydFR5cGU+KCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21DaGFydFR5cGUoKSA/P1xuICAgICAgKHRoaXMuZGVmaW5pdGlvbigpPy5wcm9wZXJ0aWVzPy5bJ2NoYXJ0VHlwZSddIGFzIENoYXJ0VHlwZSkgPz9cbiAgICAgICdiYXInXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZGF0YSA9IGNvbXB1dGVkPENoYXJ0RGF0YUl0ZW1bXT4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmN1c3RvbURhdGEoKSAmJiB0aGlzLmN1c3RvbURhdGEoKSEubGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMuY3VzdG9tRGF0YSgpITtcbiAgICBjb25zdCBjb25maWdEYXRhID0gdGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsnZGF0YSddIGFzIENoYXJ0RGF0YUl0ZW1bXTtcbiAgICByZXR1cm4gY29uZmlnRGF0YSB8fCBbXTtcbiAgfSk7XG5cblxuICByZWFkb25seSBvcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4odGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXMgfHwge30pLFxuICAgICAgLi4udGhpcy5jdXN0b21PcHRpb25zKClcbiAgICB9O1xuICB9KTtcblxuXG4gIHJlYWRvbmx5IG1heFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5kYXRhKCk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLml0ZW1zLm1hcCgoZCkgPT4gZC52YWx1ZSksIDEpO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEoKS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci52YWx1ZSwgMCk7XG4gIH0pO1xuXG4gIGdldEJhclBlcmNlbnRhZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKCh2YWx1ZSAvIG1heCkgKiAxMDApO1xuICB9XG5cbiAgcmVhZG9ubHkgZG9udXRTZWdtZW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZGF0YSgpO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbFZhbHVlKCk7XG4gICAgaWYgKHRvdGFsID09PSAwKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gMiAqIE1hdGguUEkgKiA2MDsgLy8gcmFkaXVzID0gNjAgPT4gfjM3Ni45OVxuICAgIGxldCBhY2N1bXVsYXRlZCA9IDA7XG5cbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IHJhdGlvID0gaXRlbS52YWx1ZSAvIHRvdGFsO1xuICAgICAgY29uc3Qgc3Ryb2tlTGVuZ3RoID0gcmF0aW8gKiBjaXJjdW1mZXJlbmNlO1xuICAgICAgY29uc3QgZGFzaE9mZnNldCA9IC0oYWNjdW11bGF0ZWQgKiBjaXJjdW1mZXJlbmNlKTtcbiAgICAgIGFjY3VtdWxhdGVkICs9IHJhdGlvO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgY29sb3I6IGl0ZW0uY29sb3IgfHwgdGhpcy5kZWZhdWx0Q29sb3JzW2lkeCAlIHRoaXMuZGVmYXVsdENvbG9ycy5sZW5ndGhdLFxuICAgICAgICBkYXNoQXJyYXk6IGAke3N0cm9rZUxlbmd0aH0gJHtjaXJjdW1mZXJlbmNlfWAsXG4gICAgICAgIGRhc2hPZmZzZXRcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGxpbmVQb2ludHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmRhdGEoKTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4geyBsaW5lUGF0aDogJycsIGFyZWFQYXRoOiAnJywgcG9pbnRzOiBbXSB9O1xuXG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIGNvbnN0IHdpZHRoID0gNDAwO1xuICAgIGNvbnN0IGhlaWdodCA9IDE0MDtcbiAgICBjb25zdCBwYWRkaW5nID0gMjA7XG5cbiAgICBjb25zdCB1c2FibGVXaWR0aCA9IHdpZHRoIC0gcGFkZGluZyAqIDI7XG4gICAgY29uc3QgdXNhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gcGFkZGluZyAqIDI7XG4gICAgY29uc3Qgc3RlcCA9IGl0ZW1zLmxlbmd0aCA+IDEgPyB1c2FibGVXaWR0aCAvIChpdGVtcy5sZW5ndGggLSAxKSA6IDA7XG5cbiAgICBjb25zdCBwdHMgPSBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHBhZGRpbmcgKyBpZHggKiBzdGVwO1xuICAgICAgY29uc3QgeSA9IGhlaWdodCAtIHBhZGRpbmcgLSAoaXRlbS52YWx1ZSAvIG1heCkgKiB1c2FibGVIZWlnaHQ7XG4gICAgICByZXR1cm4geyB4LCB5LCBsYWJlbDogaXRlbS5sYWJlbCwgdmFsdWU6IGl0ZW0udmFsdWUgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpbmVQYXRoID0gcHRzLnJlZHVjZSgoYWNjLCBwdCwgaSkgPT4ge1xuICAgICAgcmV0dXJuIGkgPT09IDAgPyBgTSAke3B0Lnh9ICR7cHQueX1gIDogYCR7YWNjfSBMICR7cHQueH0gJHtwdC55fWA7XG4gICAgfSwgJycpO1xuXG4gICAgY29uc3QgZmlyc3RQdCA9IHB0c1swXTtcbiAgICBjb25zdCBsYXN0UHQgPSBwdHNbcHRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFyZWFQYXRoID0gYCR7bGluZVBhdGh9IEwgJHtsYXN0UHQueH0gJHtoZWlnaHQgLSBwYWRkaW5nfSBMICR7Zmlyc3RQdC54fSAke2hlaWdodCAtIHBhZGRpbmd9IFpgO1xuXG4gICAgcmV0dXJuIHsgbGluZVBhdGgsIGFyZWFQYXRoLCBwb2ludHM6IHB0cyB9O1xuICB9KTtcbn1cbiJdfQ==
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNoYXJ0LWJyaWRnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvY2hhcnQtYnJpZGdlL3JlcG9ydC1jaGFydC1icmlkZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQThZOUUsTUFBTSxPQUFPLDBCQUEwQjtJQUM1QixrQkFBa0IsR0FBeUIsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXZGLFVBQVUsR0FBRyxLQUFLLEVBQTZCLENBQUM7SUFDaEQsVUFBVSxHQUFHLEtBQUssQ0FBOEIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUUsZUFBZSxHQUFHLEtBQUssQ0FBd0IsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEYsV0FBVyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdkUsYUFBYSxHQUFHLEtBQUssQ0FBc0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFckUsYUFBYSxHQUFHO1FBQ3ZCLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDVixDQUFDO0lBRU8sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDN0IsT0FBTyxDQUNMLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBWTtZQUNwRCxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSztZQUN4QixPQUFPLENBQ1IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRU0sU0FBUyxHQUFHLFFBQVEsQ0FBWSxHQUFHLEVBQUU7UUFDNUMsT0FBTyxDQUNMLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDckIsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBZTtZQUMzRCxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRU0sSUFBSSxHQUFHLFFBQVEsQ0FBa0IsR0FBRyxFQUFFO1FBQzdDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRyxDQUFDO1FBQ2xGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQW9CLENBQUM7UUFDOUUsT0FBTyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUFDO0lBR00sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDL0IsT0FBTztZQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUN4QyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUU7U0FDeEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBR00sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDbEMsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVRLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTNCLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLHlCQUF5QjtRQUNqRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFcEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLE1BQU0sWUFBWSxHQUFHLEtBQUssR0FBRyxhQUFhLENBQUM7WUFDM0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsQ0FBQztZQUNsRCxXQUFXLElBQUksS0FBSyxDQUFDO1lBRXJCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztnQkFDeEUsU0FBUyxFQUFFLEdBQUcsWUFBWSxJQUFJLGFBQWEsRUFBRTtnQkFDN0MsVUFBVTthQUNYLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFFMUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNsQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbkIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBRW5CLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNsQyxNQUFNLENBQUMsR0FBRyxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztZQUMvQixNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7WUFDL0QsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFHLEdBQUcsUUFBUSxNQUFNLE1BQU0sQ0FBQyxDQUFDLElBQUksTUFBTSxHQUFHLE9BQU8sTUFBTSxPQUFPLENBQUMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxPQUFPLElBQUksQ0FBQztRQUV0RyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7d0dBL0hRLDBCQUEwQjs0RkFBMUIsMEJBQTBCLDh2QkE5WDNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0hULDhxSEFqSVMsWUFBWTs7NEZBZ1lYLDBCQUEwQjtrQkFuWXRDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFDTix1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0hUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIFR5cGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENIQVJUX0NPTVBPTkVOVCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0RGF0YUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICBjb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2hhcnRUeXBlID0gJ2JhcicgfCAnbGluZScgfCAnZG9udXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtY2hhcnQtYnJpZGdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJycHQtY2hhcnQtYnJpZGdlLWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChob3N0Q2hhcnRDb21wb25lbnQpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxuICAgICAgICAgICAgaG9zdENoYXJ0Q29tcG9uZW50O1xuICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgIGRhdGE6IGRhdGEoKSxcbiAgICAgICAgICAgICAgY2hhcnRUeXBlOiBjaGFydFR5cGUoKSxcbiAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlKCksXG4gICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBCdWlsdC1pbiBmYWxsYmFjayBTVkcvQ1NTIGNoYXJ0IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWZhbGxiYWNrLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWZhbGxiYWNrLWhlYWRlclwiPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwicnB0LWNoYXJ0LXRpdGxlXCI+e3sgdGl0bGUoKSB9fTwvaDM+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1jaGFydC1iYWRnZVwiPnt7IGNoYXJ0VHlwZSgpIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1jYW52YXMtYXJlYVwiPlxuICAgICAgICAgICAgQGlmIChkYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtY2hhcnQtZW1wdHlcIj5ObyBjaGFydCBkYXRhIGF2YWlsYWJsZTwvZGl2PlxuICAgICAgICAgICAgfSAgICAgICAgICAgIEBlbHNlIGlmIChjaGFydFR5cGUoKSA9PT0gJ2JhcicpIHtcbiAgICAgICAgICAgICAgPCEtLSBWZXJ0aWNhbCBCYXIgQ2hhcnQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYmFyLWNoYXJ0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYmFyLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWJhci10cmFja1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQuJV09XCJnZXRCYXJQZXJjZW50YWdlKGl0ZW0udmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0uY29sb3IgfHwgZGVmYXVsdENvbG9yc1skaW5kZXggJSBkZWZhdWx0Q29sb3JzLmxlbmd0aF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW0ubGFiZWwgKyAnOiAnICsgaXRlbS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYmFyLXZhbC1iYWRnZVwiPnt7IGZvcm1hdFZhbHVlKGl0ZW0udmFsdWUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYmFyLXRvb2x0aXBcIj57eyBpdGVtLmxhYmVsIH19OiB7eyBpdGVtLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1iYXItbGFiZWxcIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoY2hhcnRUeXBlKCkgPT09ICdkb251dCcpIHtcbiAgICAgICAgICAgICAgPCEtLSBTVkcgRG9udXQgQ2hhcnQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZG9udXQtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1kb251dC1zdmdcIiB2aWV3Qm94PVwiMCAwIDE2MCAxNjBcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZG9udXRTZWdtZW50cygpOyB0cmFjayBzZWdtZW50LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBjeD1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICBjeT1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNjBcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlZ21lbnQuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlZ21lbnQuZGFzaEFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaG9mZnNldF09XCJzZWdtZW50LmRhc2hPZmZzZXRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPHRleHQgeD1cIjgwXCIgeT1cIjc2XCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBjbGFzcz1cInJwdC1kb251dC10b3RhbC12YWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdG90YWxWYWx1ZSgpIH19XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCB4PVwiODBcIiB5PVwiOTJcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGNsYXNzPVwicnB0LWRvbnV0LXRvdGFsLWxibFwiPlxuICAgICAgICAgICAgICAgICAgICBUb3RhbFxuICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1sZWdlbmRcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZGF0YSgpOyB0cmFjayBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtbGVnZW5kLWRvdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLmNvbG9yIHx8IGRlZmF1bHRDb2xvcnNbJGluZGV4ICUgZGVmYXVsdENvbG9ycy5sZW5ndGhdXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWxlZ2VuZC1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGVnZW5kLXZhbHVlXCI+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDwhLS0gU1ZHIExpbmUgLyBBcmVhIENoYXJ0IC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWxpbmUtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1saW5lLXN2Z1wiIHZpZXdCb3g9XCIwIDAgNDAwIDE2MFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicnB0TGluZUdyYWRcIiB4MT1cIjBcIiB5MT1cIjBcIiB4Mj1cIjBcIiB5Mj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwJVwiIHN0b3AtY29sb3I9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIiBzdG9wLW9wYWNpdHk9XCIwLjNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjEwMCVcIiBzdG9wLWNvbG9yPVwidmFyKC0tcnB0LXByaW1hcnksICMyNTYzZWIpXCIgc3RvcC1vcGFjaXR5PVwiMC4wXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmFyZWFQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwibGluZVBvaW50cygpLmFyZWFQYXRoXCIgZmlsbD1cInVybCgjcnB0TGluZUdyYWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmxpbmVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZF09XCJsaW5lUG9pbnRzKCkubGluZVBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHB0IG9mIGxpbmVQb2ludHMoKS5wb2ludHM7IHRyYWNrIHB0LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeF09XCJwdC54XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeV09XCJwdC55XCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cInZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1saW5lLWxhYmVsc1wiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGluZS1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtYnJpZGdlLWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDIyMHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC1mYWxsYmFjay1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1zdXJmYWNlLWJnLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1ib3JkZXItY29sb3IsICNlMmU4ZjApO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LXJhZGl1cy1sZywgMTJweCk7XG4gICAgICBwYWRkaW5nOiB2YXIoLS1ycHQtc3BhY2UtbWQsIDIwcHgpO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAyMjBweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBnYXA6IDE2cHg7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtZmFsbGJhY2staGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWJhZGdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIHBhZGRpbmc6IDJweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjFmNWY5KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtY2FudmFzLWFyZWEge1xuICAgICAgbWluLWhlaWdodDogMTQwcHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBmbGV4OiAxO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtZW1wdHkge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgfVxuXG4gICAgLyogQmFyIENoYXJ0ICovXG4gICAgLnJwdC1iYXItY2hhcnQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICAgICAgZ2FwOiAxNnB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgICAgIHBhZGRpbmctdG9wOiAyNHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG5cbiAgICAucnB0LWJhci1jb2x1bW4ge1xuICAgICAgZmxleDogMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi13aWR0aDogNjRweDtcbiAgICAgIG1heC13aWR0aDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItdHJhY2sge1xuICAgICAgZmxleDogMTtcbiAgICAgIHdpZHRoOiAzOHB4O1xuICAgICAgbWF4LXdpZHRoOiA0NHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAucnB0LWJhci1maWxsIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogNHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4IDZweCAwIDA7XG4gICAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMC40cyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAucnB0LWJhci12YWwtYmFkZ2Uge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAtMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbDpob3ZlciAucnB0LWJhci12YWwtYmFkZ2Uge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItdG9vbHRpcCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC0zNHB4O1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgYmFja2dyb3VuZDogIzBmMTcyYTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBwYWRkaW5nOiAzcHggOHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbDpob3ZlciAucnB0LWJhci10b29sdGlwIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTRweCk7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItbGFiZWwge1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIC8qIERvbnV0IENoYXJ0ICovXG4gICAgLnJwdC1kb251dC1jaGFydC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGdhcDogMzJweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtc3ZnIHtcbiAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgIGhlaWdodDogMTUwcHg7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtdG90YWwtdmFsIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDgwcHggODBweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnJwdC1kb251dC10b3RhbC1sYmwge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogODBweCA4MHB4O1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWxlZ2VuZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgbWluLXdpZHRoOiAxNDBweDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1pdGVtIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1kb3Qge1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1sYWJlbCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMzM0MTU1KTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC12YWx1ZSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAvKiBMaW5lIENoYXJ0ICovXG4gICAgLnJwdC1saW5lLWNoYXJ0LWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLXN2ZyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLWxhYmVscyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIHBhZGRpbmc6IDAgOHB4O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0Q2hhcnRCcmlkZ2VDb21wb25lbnQge1xuICByZWFkb25seSBob3N0Q2hhcnRDb21wb25lbnQ6IFR5cGU8dW5rbm93bj4gfCBudWxsID0gaW5qZWN0KENIQVJUX0NPTVBPTkVOVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgY3VzdG9tRGF0YSA9IGlucHV0PENoYXJ0RGF0YUl0ZW1bXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnZGF0YScgfSk7XG4gIHJlYWRvbmx5IGN1c3RvbUNoYXJ0VHlwZSA9IGlucHV0PENoYXJ0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnY2hhcnRUeXBlJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tVGl0bGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RpdGxlJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tT3B0aW9ucyA9IGlucHV0PFJlY29yZDxzdHJpbmcsIGFueT4+KHt9LCB7IGFsaWFzOiAnb3B0aW9ucycgfSk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdENvbG9ycyA9IFtcbiAgICAnIzI1NjNlYicsXG4gICAgJyMxMGI5ODEnLFxuICAgICcjZjU5ZTBiJyxcbiAgICAnI2VmNDQ0NCcsXG4gICAgJyM4YjVjZjYnLFxuICAgICcjMDZiNmQ0JyxcbiAgICAnI2VjNDg5OSdcbiAgXTtcblxuICByZWFkb25seSB0aXRsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21UaXRsZSgpID8/XG4gICAgICAodGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsndGl0bGUnXSBhcyBzdHJpbmcpID8/XG4gICAgICB0aGlzLmRlZmluaXRpb24oKT8ubGFiZWwgPz9cbiAgICAgICdDaGFydCdcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBjaGFydFR5cGUgPSBjb21wdXRlZDxDaGFydFR5cGU+KCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21DaGFydFR5cGUoKSA/P1xuICAgICAgKHRoaXMuZGVmaW5pdGlvbigpPy5wcm9wZXJ0aWVzPy5bJ2NoYXJ0VHlwZSddIGFzIENoYXJ0VHlwZSkgPz9cbiAgICAgICdiYXInXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZGF0YSA9IGNvbXB1dGVkPENoYXJ0RGF0YUl0ZW1bXT4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmN1c3RvbURhdGEoKSAmJiB0aGlzLmN1c3RvbURhdGEoKSEubGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMuY3VzdG9tRGF0YSgpITtcbiAgICBjb25zdCBjb25maWdEYXRhID0gdGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsnZGF0YSddIGFzIENoYXJ0RGF0YUl0ZW1bXTtcbiAgICByZXR1cm4gY29uZmlnRGF0YSB8fCBbXTtcbiAgfSk7XG5cblxuICByZWFkb25seSBvcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4odGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXMgfHwge30pLFxuICAgICAgLi4udGhpcy5jdXN0b21PcHRpb25zKClcbiAgICB9O1xuICB9KTtcblxuXG4gIHJlYWRvbmx5IG1heFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5kYXRhKCk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLml0ZW1zLm1hcCgoZCkgPT4gZC52YWx1ZSksIDEpO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEoKS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci52YWx1ZSwgMCk7XG4gIH0pO1xuXG4gIGdldEJhclBlcmNlbnRhZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKCh2YWx1ZSAvIG1heCkgKiAxMDApO1xuICB9XG5cbiAgZm9ybWF0VmFsdWUodmFsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh2YWwgPj0gMV8wMDBfMDAwKSB7XG4gICAgICByZXR1cm4gKHZhbCAvIDFfMDAwXzAwMCkudG9GaXhlZCgxKS5yZXBsYWNlKC9cXC4wJC8sICcnKSArICdNJztcbiAgICB9XG4gICAgaWYgKHZhbCA+PSAxXzAwMCkge1xuICAgICAgcmV0dXJuICh2YWwgLyAxXzAwMCkudG9GaXhlZCgxKS5yZXBsYWNlKC9cXC4wJC8sICcnKSArICdrJztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWwpO1xuICB9XG5cbiAgcmVhZG9ubHkgZG9udXRTZWdtZW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZGF0YSgpO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbFZhbHVlKCk7XG4gICAgaWYgKHRvdGFsID09PSAwKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gMiAqIE1hdGguUEkgKiA2MDsgLy8gcmFkaXVzID0gNjAgPT4gfjM3Ni45OVxuICAgIGxldCBhY2N1bXVsYXRlZCA9IDA7XG5cbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IHJhdGlvID0gaXRlbS52YWx1ZSAvIHRvdGFsO1xuICAgICAgY29uc3Qgc3Ryb2tlTGVuZ3RoID0gcmF0aW8gKiBjaXJjdW1mZXJlbmNlO1xuICAgICAgY29uc3QgZGFzaE9mZnNldCA9IC0oYWNjdW11bGF0ZWQgKiBjaXJjdW1mZXJlbmNlKTtcbiAgICAgIGFjY3VtdWxhdGVkICs9IHJhdGlvO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgY29sb3I6IGl0ZW0uY29sb3IgfHwgdGhpcy5kZWZhdWx0Q29sb3JzW2lkeCAlIHRoaXMuZGVmYXVsdENvbG9ycy5sZW5ndGhdLFxuICAgICAgICBkYXNoQXJyYXk6IGAke3N0cm9rZUxlbmd0aH0gJHtjaXJjdW1mZXJlbmNlfWAsXG4gICAgICAgIGRhc2hPZmZzZXRcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGxpbmVQb2ludHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmRhdGEoKTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4geyBsaW5lUGF0aDogJycsIGFyZWFQYXRoOiAnJywgcG9pbnRzOiBbXSB9O1xuXG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIGNvbnN0IHdpZHRoID0gNDAwO1xuICAgIGNvbnN0IGhlaWdodCA9IDE0MDtcbiAgICBjb25zdCBwYWRkaW5nID0gMjA7XG5cbiAgICBjb25zdCB1c2FibGVXaWR0aCA9IHdpZHRoIC0gcGFkZGluZyAqIDI7XG4gICAgY29uc3QgdXNhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gcGFkZGluZyAqIDI7XG4gICAgY29uc3Qgc3RlcCA9IGl0ZW1zLmxlbmd0aCA+IDEgPyB1c2FibGVXaWR0aCAvIChpdGVtcy5sZW5ndGggLSAxKSA6IDA7XG5cbiAgICBjb25zdCBwdHMgPSBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHBhZGRpbmcgKyBpZHggKiBzdGVwO1xuICAgICAgY29uc3QgeSA9IGhlaWdodCAtIHBhZGRpbmcgLSAoaXRlbS52YWx1ZSAvIG1heCkgKiB1c2FibGVIZWlnaHQ7XG4gICAgICByZXR1cm4geyB4LCB5LCBsYWJlbDogaXRlbS5sYWJlbCwgdmFsdWU6IGl0ZW0udmFsdWUgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpbmVQYXRoID0gcHRzLnJlZHVjZSgoYWNjLCBwdCwgaSkgPT4ge1xuICAgICAgcmV0dXJuIGkgPT09IDAgPyBgTSAke3B0Lnh9ICR7cHQueX1gIDogYCR7YWNjfSBMICR7cHQueH0gJHtwdC55fWA7XG4gICAgfSwgJycpO1xuXG4gICAgY29uc3QgZmlyc3RQdCA9IHB0c1swXTtcbiAgICBjb25zdCBsYXN0UHQgPSBwdHNbcHRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFyZWFQYXRoID0gYCR7bGluZVBhdGh9IEwgJHtsYXN0UHQueH0gJHtoZWlnaHQgLSBwYWRkaW5nfSBMICR7Zmlyc3RQdC54fSAke2hlaWdodCAtIHBhZGRpbmd9IFpgO1xuXG4gICAgcmV0dXJuIHsgbGluZVBhdGgsIGFyZWFQYXRoLCBwb2ludHM6IHB0cyB9O1xuICB9KTtcbn1cbiJdfQ==