@provoly/dashboard 0.14.11 → 0.14.13

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 (108) hide show
  1. package/admin/admin.module.d.ts +2 -1
  2. package/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.d.ts +1 -0
  3. package/admin/components/admin-classes/store/admin-class.actions.d.ts +11 -0
  4. package/admin/components/admin-classes/store/admin-class.effects.d.ts +5 -0
  5. package/admin/components/admin-classes/store/admin-class.reducer.d.ts +1 -0
  6. package/admin/components/admin-classes/store/admin-class.selectors.d.ts +1 -0
  7. package/admin/i18n/en.translations.d.ts +11 -0
  8. package/admin/i18n/fr.translations.d.ts +11 -0
  9. package/admin/store/admin.service.d.ts +1 -0
  10. package/esm2022/admin/admin.module.mjs +8 -4
  11. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +8 -4
  12. package/esm2022/admin/components/admin-classes/store/admin-class.actions.mjs +5 -2
  13. package/esm2022/admin/components/admin-classes/store/admin-class.effects.mjs +4 -1
  14. package/esm2022/admin/components/admin-classes/store/admin-class.reducer.mjs +6 -2
  15. package/esm2022/admin/components/admin-classes/store/admin-class.selectors.mjs +4 -2
  16. package/esm2022/admin/i18n/en.translations.mjs +12 -1
  17. package/esm2022/admin/i18n/fr.translations.mjs +12 -1
  18. package/esm2022/admin/store/admin.service.mjs +6 -1
  19. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +2 -1
  20. package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
  21. package/esm2022/lib/core/components/about/about.component.mjs +14 -9
  22. package/esm2022/lib/core/i18n/en.translations.mjs +3 -2
  23. package/esm2022/lib/core/i18n/fr.translations.mjs +3 -2
  24. package/esm2022/lib/core/model/widget-aggregated-chart-manifest.interface.mjs +2 -1
  25. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +2 -1
  26. package/esm2022/lib/core/public-api.mjs +4 -1
  27. package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +101 -0
  28. package/esm2022/lib/core/store/aggregation/base-aggregation.service.mjs +16 -0
  29. package/esm2022/lib/core/store/aggregation/frontend-aggregation.service.mjs +210 -0
  30. package/esm2022/lib/core/store/class/class.interface.mjs +1 -1
  31. package/esm2022/lib/core/store/config/config.service.mjs +13 -13
  32. package/esm2022/lib/core/store/config/versions.interface.mjs +1 -1
  33. package/esm2022/lib/core/store/context-menu/context-menu.actions.mjs +1 -1
  34. package/esm2022/lib/core/store/context-menu/context-menu.reducer.mjs +5 -3
  35. package/esm2022/lib/core/store/context-menu/context-menu.selectors.mjs +4 -2
  36. package/esm2022/lib/core/store/field/field.interface.mjs +1 -1
  37. package/esm2022/lib/dashboard/components/context-menu/context-menu.component.mjs +23 -17
  38. package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +1 -1
  39. package/esm2022/lib/dashboard/components/widgets/data-widget.component.mjs +1 -1
  40. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +4 -3
  41. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +5 -3
  42. package/esm2022/toolbox/components/save-view/save-view.component.mjs +5 -4
  43. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +8 -9
  44. package/esm2022/widgets/widget-aggregated-chart/public-api.mjs +1 -4
  45. package/esm2022/widgets/widget-aggregated-chart/widget-aggregated-chart.module.mjs +2 -3
  46. package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +2 -2
  47. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +3 -2
  48. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +2 -1
  49. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +94 -34
  50. package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +3 -2
  51. package/esm2022/widgets/widget-map/utils/xml-utils.class.mjs +3 -2
  52. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +47 -52
  53. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -2
  54. package/esm2022/widgets/widget-vega/i18n/en.translations.mjs +4 -2
  55. package/esm2022/widgets/widget-vega/i18n/fr.translations.mjs +4 -2
  56. package/fesm2022/provoly-dashboard-admin.mjs +55 -9
  57. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-dataset.mjs +2 -1
  59. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-toolbox.mjs +4 -3
  61. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +10 -313
  63. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  64. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +1 -1
  65. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs.map +1 -1
  66. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +2 -1
  67. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
  68. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +98 -36
  69. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  70. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +47 -52
  71. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  72. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +2 -1
  73. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  74. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +6 -2
  75. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
  76. package/fesm2022/provoly-dashboard.mjs +420 -99
  77. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  78. package/lib/core/components/about/about.component.d.ts +3 -1
  79. package/lib/core/i18n/en.translations.d.ts +1 -0
  80. package/lib/core/i18n/fr.translations.d.ts +1 -0
  81. package/lib/core/model/widget-aggregated-chart-manifest.interface.d.ts +2 -1
  82. package/lib/core/model/widget-map-manifest.interface.d.ts +1 -0
  83. package/lib/core/public-api.d.ts +3 -0
  84. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/backend-aggregation.service.d.ts +4 -1
  85. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/base-aggregation.service.d.ts +14 -1
  86. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/frontend-aggregation.service.d.ts +3 -2
  87. package/lib/core/store/class/class.interface.d.ts +1 -0
  88. package/lib/core/store/config/config.service.d.ts +2 -1
  89. package/lib/core/store/config/versions.interface.d.ts +3 -3
  90. package/lib/core/store/context-menu/context-menu.actions.d.ts +2 -0
  91. package/lib/core/store/context-menu/context-menu.reducer.d.ts +1 -0
  92. package/lib/core/store/context-menu/context-menu.selectors.d.ts +1 -0
  93. package/lib/core/store/field/field.interface.d.ts +1 -0
  94. package/lib/dashboard/components/context-menu/context-menu.component.d.ts +1 -0
  95. package/lib/dashboard/store/dashboard.selectors.d.ts +6 -1
  96. package/package.json +1 -1
  97. package/styles/base/_utils.scss +4 -0
  98. package/styles/components/_o-pry-admin-classes-customize.scss +6 -4
  99. package/toolbox/components/save-view/save-view.component.d.ts +2 -1
  100. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +1 -7
  101. package/widgets/widget-aggregated-chart/public-api.d.ts +0 -3
  102. package/widgets/widget-map/component/widget-map.component.d.ts +14 -3
  103. package/widgets/widget-table/component/widget-table.component.d.ts +6 -1
  104. package/widgets/widget-vega/i18n/en.translations.d.ts +2 -0
  105. package/widgets/widget-vega/i18n/fr.translations.d.ts +2 -0
  106. package/esm2022/widgets/widget-aggregated-chart/service/backend-aggregation.service.mjs +0 -96
  107. package/esm2022/widgets/widget-aggregated-chart/service/base-aggregation.service.mjs +0 -16
  108. package/esm2022/widgets/widget-aggregated-chart/service/frontend-aggregation.service.mjs +0 -206
@@ -8,11 +8,10 @@ import { fontConfig } from 'vega-lite/build/src/config';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@ngrx/store";
10
10
  import * as i2 from "@provoly/dashboard";
11
- import * as i3 from "../service/base-aggregation.service";
12
- import * as i4 from "@angular/common";
13
- import * as i5 from "@angular/forms";
14
- import * as i6 from "@provoly/dashboard/components/checkbox";
15
- import * as i7 from "../style/css.component";
11
+ import * as i3 from "@angular/common";
12
+ import * as i4 from "@angular/forms";
13
+ import * as i5 from "@provoly/dashboard/components/checkbox";
14
+ import * as i6 from "../style/css.component";
16
15
  vega.scheme('KO/W/OK', ['#C04D3F', '#FD9843', '#9ABE29']);
17
16
  export class WidgetAggregatedChartComponent extends DataWidgetComponent {
18
17
  constructor(store, translateService, el, aggregationService) {
@@ -637,14 +636,14 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
637
636
  resolve(this.vega.nativeElement.querySelectorAll('canvas')[0].toDataURL('image/png'));
638
637
  });
639
638
  }
640
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetAggregatedChartComponent, deps: [{ token: i1.Store }, { token: i2.PryI18nService }, { token: i0.ElementRef }, { token: i3.PryAggregationService }], target: i0.ɵɵFactoryTarget.Component }); }
641
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetAggregatedChartComponent, selector: "pry-widget-aggregated-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesScheme\">{{ '@pry.widget.chart.colorScheme' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n <div class=\"no-result\" *ngIf=\"(isChartValid$ | async) === false\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n </div>\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"!(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <p class=\"a-p\">\n {{ '@pry.widget.chart.chooseParameters' | i18n }}\n </p>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <p class=\"a-p\">\n {{ '@pry.widget.chart.noData' | i18n }}\n </p>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i6.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i7.PryWidgetAggregatedChartCssComponent, selector: "pry-widget-aggregated-chart-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i2.PrySortDataPipe, name: "prySortData" }] }); }
639
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetAggregatedChartComponent, deps: [{ token: i1.Store }, { token: i2.PryI18nService }, { token: i0.ElementRef }, { token: i2.PryAggregationService }], target: i0.ɵɵFactoryTarget.Component }); }
640
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetAggregatedChartComponent, selector: "pry-widget-aggregated-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesScheme\">{{ '@pry.widget.chart.colorScheme' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n <div class=\"no-result\" *ngIf=\"(isChartValid$ | async) === false\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n </div>\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"!(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <p class=\"a-p\">\n {{ '@pry.widget.chart.chooseParameters' | i18n }}\n </p>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <p class=\"a-p\">\n {{ '@pry.widget.chart.noData' | i18n }}\n </p>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i6.PryWidgetAggregatedChartCssComponent, selector: "pry-widget-aggregated-chart-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i2.PrySortDataPipe, name: "prySortData" }] }); }
642
641
  }
643
642
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetAggregatedChartComponent, decorators: [{
644
643
  type: Component,
645
644
  args: [{ selector: 'pry-widget-aggregated-chart', template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesScheme\">{{ '@pry.widget.chart.colorScheme' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n <div class=\"no-result\" *ngIf=\"(isChartValid$ | async) === false\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n </div>\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"!(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <p class=\"a-p\">\n {{ '@pry.widget.chart.chooseParameters' | i18n }}\n </p>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <p class=\"a-p\">\n {{ '@pry.widget.chart.noData' | i18n }}\n </p>\n </div>\n </ng-container>\n</div>\n" }]
646
- }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.PryI18nService }, { type: i0.ElementRef }, { type: i3.PryAggregationService }]; }, propDecorators: { vega: [{
645
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.PryI18nService }, { type: i0.ElementRef }, { type: i2.PryAggregationService }]; }, propDecorators: { vega: [{
647
646
  type: ViewChild,
648
647
  args: ['vega']
649
648
  }] } });
650
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFJTCxjQUFjLEVBQ2QsbUJBQW1CLEVBRW5CLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFHVCxhQUFhLEVBQ2IsUUFBUSxFQUNSLG9CQUFvQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7O0FBU3hELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxT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QkFDTCxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUs7b0JBQ2pDLE9BQU8sRUFBRSxNQUFNO2lCQUNoQjthQUNGLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVRLE9BQU87UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBL3ZCVSw4QkFBOEI7a0dBQTlCLDhCQUE4Qix3TEN2QzNDLHFpWkErU0E7OzJGRHhRYSw4QkFBOEI7a0JBSjFDLFNBQVM7K0JBQ0UsNkJBQTZCO3NMQUlwQixJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEdyYXBoVHlwZSxcbiAgT3BlcmF0aW9uLFxuICBQcnlJMThuU2VydmljZSxcbiAgVmFsdWVUeXBlLFxuICBWZWdhQ29sb3JUeXBlLFxuICBWZWdhVHlwZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgc3dpdGNoTWFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFZpZXcgfSBmcm9tICd2ZWdhJztcbmltcG9ydCBlbWJlZCwgeyB2ZWdhIH0gZnJvbSAndmVnYS1lbWJlZCc7XG5pbXBvcnQgeyBtZXJnZURlZXAsIFRvcExldmVsU3BlYyB9IGZyb20gJ3ZlZ2EtbGl0ZSc7XG5pbXBvcnQgeyBmb250Q29uZmlnIH0gZnJvbSAndmVnYS1saXRlL2J1aWxkL3NyYy9jb25maWcnO1xuaW1wb3J0IHsgUHJ5QWdncmVnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9iYXNlLWFnZ3JlZ2F0aW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBSYWRhclZhbHVlID0ge1xuICBjYXRlZ29yeTogbnVtYmVyO1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbn07XG5cbnZlZ2Euc2NoZW1lKCdLTy9XL09LJywgWycjQzA0RDNGJywgJyNGRDk4NDMnLCAnIzlBQkUyOSddKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3ZlZ2EnKSB2ZWdhITogRWxlbWVudFJlZjtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8Q2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucz47XG4gIG9wdGlvbnNDb3B5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyB8IG51bGw+KG51bGwpO1xuICB2aWV3PzogVmlldztcbiAgdHJpZ2dlciQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICB2ZWdhTGl0ZVNwZWMkOiBPYnNlcnZhYmxlPFRvcExldmVsU3BlYz47XG4gIGZpZWxkcyQ6IE9ic2VydmFibGU8RmllbGRbXT47XG4gIGNsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuICBhdHRyaWJ1dGVUeXBlcyQ6IE9ic2VydmFibGU8e1xuICAgIG9yZGluYXRlOiB7IHZlZ2FUeXBlOiBWZWdhVHlwZTsgZmllbGRUeXBlOiBhbnk7IG5hbWU6IHN0cmluZyB9O1xuICAgIGFic2Npc3NhOiB7IHZlZ2FUeXBlOiBWZWdhVHlwZTsgZmllbGRUeXBlOiBhbnk7IG5hbWU6IHN0cmluZyB9O1xuICAgIGdyb3VwQnk6IHsgdmVnYVR5cGU/OiBWZWdhVHlwZTsgZmllbGRUeXBlPzogYW55OyBuYW1lOiBzdHJpbmcgfTtcbiAgfT47XG4gIGFnZ3JlZ2F0ZWRWYWx1ZXMkOiBPYnNlcnZhYmxlPHsgZGF0YTogYW55OyBvcGVyYXRpb246IGFueSB9PjtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcbiAgR3JhcGhUeXBlID0gR3JhcGhUeXBlO1xuICBPcGVyYXRpb24gPSBPcGVyYXRpb247XG4gIGlzQ2hhcnRWYWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHR5cGVPcHRpb25zOiB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdID0gW107XG4gIG9wZXJhdGlvbnMkOiBPYnNlcnZhYmxlPHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10+O1xuICBhYnNjaXNzYUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgY2xhc3NlczogQ2xhc3NbXSA9IFtdO1xuICBmaWVsZHM6IEZpZWxkW10gPSBbXTtcbiAgb3JkaW5hdGVBdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIHRyaWdnZXJPcmRpbmF0ZUF0dHJpYnV0ZXMkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29weUFic2Npc3NhRmllbGQ/OiBGaWVsZDtcbiAgY29weU9yZGluYXRlRmllbGQ/OiBGaWVsZDtcbiAgc2NoZW1lczogeyBpZDogc3RyaW5nIH1bXSA9IFtdO1xuICBub0RhdGEkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzb3J0QWN0aXZlPyA9ICduYW1lJztcbiAgc29ydERpcmVjdGlvbj8gPSAnYXNjJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgYWdncmVnYXRpb25TZXJ2aWNlOiBQcnlBZ2dyZWdhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcbiAgICB0aGlzLnNjaGVtZXMgPSBPYmplY3QudmFsdWVzKFZlZ2FDb2xvclR5cGUpLm1hcCgoaWQpID0+ICh7IGlkIH0pKTtcbiAgICB0aGlzLnR5cGVPcHRpb25zID0gT2JqZWN0LnZhbHVlcyhHcmFwaFR5cGUpXG4gICAgICAubWFwKCh2KSA9PiAoe1xuICAgICAgICBpZDogdixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5ncmFwaFR5cGUuJyArIHYpXG4gICAgICB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IHRoaXMubWFuaWZlc3QkLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChtYW5pZmVzdCkgPT5cbiAgICAgICAgICBtZXJnZURlZXAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGdyYXBoOiB7IHR5cGU6IEdyYXBoVHlwZS5CQVIsIHRvb2x0aXA6IHRydWUsIGxlZ2VuZDogZmFsc2UgfSxcbiAgICAgICAgICAgICAgYWJzY2lzc2E6IHsga2VlcDA6IHRydWUgfSxcbiAgICAgICAgICAgICAgb3JkaW5hdGU6IHsga2VlcDA6IHRydWUgfVxuICAgICAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgKG1hbmlmZXN0Lm9wdGlvbnMgPz8ge30pIGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnNcbiAgICAgICAgICApIGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnNcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSkpO1xuICAgIH0pO1xuICAgIHRoaXMuZmllbGRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcyk7XG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuXG4gICAgdGhpcy5vcGVyYXRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzdWx0U2V0JCwgdGhpcy5jbGFzc2VzJCwgdGhpcy5maWVsZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW3JzLCBjbGFzc2VzLCBmaWVsZHNdKSA9PlxuICAgICAgICBjbGFzc2VzXG4gICAgICAgICAgLmZpbHRlcigoY2xhenopID0+IE9iamVjdC5rZXlzKHJzLml0ZW1zKS5pbmNsdWRlcyhjbGF6ei5pZCkpXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpXG4gICAgICAgICAgLm1hcCgoYXR0cnMpID0+XG4gICAgICAgICAgICBhdHRycy5maWx0ZXIoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gISFmaWVsZCAmJiBbRmllbGRUeXBlLklOVEVHRVIsIEZpZWxkVHlwZS5ERUNJTUFMLCBGaWVsZFR5cGUuTE9OR10uaW5jbHVkZXMoZmllbGQudHlwZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGF0dHIpID0+ICEhYXR0cilcbiAgICAgICksXG4gICAgICBtYXAoKGF0dHJpYnV0ZXMpID0+XG4gICAgICAgIChhdHRyaWJ1dGVzLmxlbmd0aCA+IDAgPyBPYmplY3QudmFsdWVzKE9wZXJhdGlvbikgOiBbT3BlcmF0aW9uLkNPVU5ULCBPcGVyYXRpb24uRElTVElOQ1QsIE9wZXJhdGlvbi5OT05FXSlcbiAgICAgICAgICAubWFwKCh2KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHYsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9wZXJhdGlvbi4nICsgdilcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZmllbGRzJC5zdWJzY3JpYmUoKGZpZWxkcykgPT4gKHRoaXMuZmllbGRzID0gZmllbGRzKSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5jbGFzc2VzJC5zdWJzY3JpYmUoKGNsYXNzZXMpID0+ICh0aGlzLmNsYXNzZXMgPSBjbGFzc2VzKSkpO1xuXG4gICAgdGhpcy5hYnNjaXNzYUF0dHJpYnV0ZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5jbGFzc2VzJCwgdGhpcy5maWVsZHMkLCB0aGlzLnJlc3VsdFNldCQsIHRoaXMub3B0aW9uc0NvcHkkXSkucGlwZShcbiAgICAgIG1hcCgoW2NsYXNzZXMsIGZpZWxkcywgcnMsIG9wdGlvbkNvcHldKSA9PlxuICAgICAgICBjbGFzc2VzXG4gICAgICAgICAgLmZpbHRlcigoY2xhenopID0+IE9iamVjdC5rZXlzKHJzLml0ZW1zKS5pbmNsdWRlcyhjbGF6ei5pZCkpXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpXG4gICAgICAgICAgLm1hcCgoYXR0cnMpID0+XG4gICAgICAgICAgICBhdHRycy5maWx0ZXIoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICEhZmllbGQgJiZcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuUkFXICYmXG4gICAgICAgICAgICAgICAgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlNUUklORyAmJlxuICAgICAgICAgICAgICAgIChvcHRpb25Db3B5Py5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuSElTVE9HUkFNIHx8IGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5LRVlXT1JEKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5vcmRpbmF0ZUF0dHJpYnV0ZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy50cmlnZ2VyT3JkaW5hdGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtjbGFzc2VzLCBmaWVsZHMsIHJzXSkgPT5cbiAgICAgICAgY2xhc3Nlc1xuICAgICAgICAgIC5maWx0ZXIoKGNsYXp6KSA9PiBPYmplY3Qua2V5cyhycy5pdGVtcykuaW5jbHVkZXMoY2xhenouaWQpKVxuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmlkID09PSBhdHRyLmZpZWxkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk1BWCxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5NSU4sXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uU1VNLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlExLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlEzLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLkFWRVJBR0UsXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uTUVESUFOLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk5PTkVcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLm9yZGluYXRlLm9wZXJhdGlvbilcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICEhZmllbGQgJiZcbiAgICAgICAgICAgICAgICAgIFtGaWVsZFR5cGUuSU5URUdFUiwgRmllbGRUeXBlLklOU1RBTlQsIEZpZWxkVHlwZS5MT05HLCBGaWVsZFR5cGUuREVDSU1BTF0uaW5jbHVkZXMoZmllbGQudHlwZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAhIWZpZWxkICYmIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcgJiYgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlNUUklORztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuaXNDaGFydFZhbGlkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMuYWJzY2lzc2FBdHRyaWJ1dGVzJCwgdGhpcy5vcmRpbmF0ZUF0dHJpYnV0ZXMkXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIGFic2Npc3NhQXR0cnMsIG9yZGluYXRlQXR0cnNdKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgISFvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSAmJlxuICAgICAgICAgIGFic2Npc3NhQXR0cnMubWFwKChhdHRyKSA9PiBhdHRyLmlkKS5pbmNsdWRlcyhvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSkgJiZcbiAgICAgICAgICAob3B0aW9ucy5vcmRpbmF0ZS5hdHRyaWJ1dGVcbiAgICAgICAgICAgID8gb3JkaW5hdGVBdHRycy5tYXAoKGF0dHIpID0+IGF0dHIuaWQpLmluY2x1ZGVzKG9wdGlvbnMub3JkaW5hdGUuYXR0cmlidXRlKVxuICAgICAgICAgICAgOiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hdHRyaWJ1dGVUeXBlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLmZpZWxkcyQsIHRoaXMuY2xhc3NlcyRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbb3B0aW9ucywgZmllbGRzLCBjbGFzc2VzXSkgPT4gISFvcHRpb25zLmFic2Npc3NhICYmICEhb3B0aW9ucy5vcmRpbmF0ZSksXG4gICAgICBtYXAoKFtvcHRpb25zLCBmaWVsZHMsIGNsYXNzZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFic2Npc3NhID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMuYWJzY2lzc2EuYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3Qgb3JkaW5hdGUgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucy5vcmRpbmF0ZS5hdHRyaWJ1dGUpKVxuICAgICAgICAgIC5maW5kKChhdHRyKSA9PiAhIWF0dHIpO1xuICAgICAgICBjb25zdCBncm91cEJ5ID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMuZ3JvdXBCeT8uYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3QgYWJzY2lzc2FGaWVsZFR5cGUgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhYnNjaXNzYT8uZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgIGNvbnN0IG9yZGluYXRlRmllbGRUeXBlID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gb3JkaW5hdGU/LmZpZWxkKT8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HO1xuICAgICAgICBjb25zdCBncm91cEJ5RmllbGRUeXBlID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gZ3JvdXBCeT8uZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogYWJzY2lzc2FGaWVsZFR5cGUsXG4gICAgICAgICAgICB2ZWdhVHlwZTogdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKGFic2Npc3NhRmllbGRUeXBlLCBhYnNjaXNzYT8ubmFtZSA/PyAnJyksXG4gICAgICAgICAgICBuYW1lOiBhYnNjaXNzYT8ubmFtZSA/PyAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3JkaW5hdGU6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogb3JkaW5hdGVGaWVsZFR5cGUsXG4gICAgICAgICAgICB2ZWdhVHlwZTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5vcmRpbmF0ZS5vcGVyYXRpb24gPT09IE9wZXJhdGlvbi5DT1VOVCB8fCBvcHRpb25zLm9yZGluYXRlLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uLkRJU1RJTkNUXG4gICAgICAgICAgICAgICAgPyBWZWdhVHlwZS5RVUFOVElUQVRJVkVcbiAgICAgICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlVG9WZWdhVHlwZShvcmRpbmF0ZUZpZWxkVHlwZSwgb3JkaW5hdGU/Lm5hbWUgPz8gJycpLFxuICAgICAgICAgICAgbmFtZTogb3JkaW5hdGU/Lm5hbWUgPz8gJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogZ3JvdXBCeUZpZWxkVHlwZSxcbiAgICAgICAgICAgIHZlZ2FUeXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoZ3JvdXBCeUZpZWxkVHlwZSwgZ3JvdXBCeT8ubmFtZSksXG4gICAgICAgICAgICBuYW1lOiBncm91cEJ5Py5uYW1lID8/ICcnXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGVkVmFsdWVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF0YXNvdXJjZUlkcyQsIHRoaXMub3B0aW9ucyQsIHRoaXMucmVzdWx0U2V0JF0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKFtkYXRhc291cmNlcywgb3B0aW9uc10pID0+IHRoaXMuYWdncmVnYXRpb25TZXJ2aWNlLmFnZ3JlZ2F0ZShkYXRhc291cmNlcywgb3B0aW9ucykpLFxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLm9wdGlvbnMkKSxcbiAgICAgIG1hcCgoW2FnZ3JlZ2F0ZSwgb3B0aW9uc10pID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoYWdncmVnYXRlLnZhbHVlcy5sZW5ndGggPiAwICYmICFhZ2dyZWdhdGUudmFsdWVzWzBdLmdyb3VwQnkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBhZ2dyZWdhdGUub3BlcmF0aW9uLFxuICAgICAgICAgICAgZGF0YTogYWdncmVnYXRlLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgc2VyaWVzOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsIH0pKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmxhdHRlbmVkID0gKFxuICAgICAgICAgIGFnZ3JlZ2F0ZS52YWx1ZXMgYXMge1xuICAgICAgICAgICAga2V5OiBWYWx1ZVR5cGU7XG4gICAgICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgICAgIGtleTogVmFsdWVUeXBlO1xuICAgICAgICAgICAgICB2YWx1ZTogVmFsdWVUeXBlO1xuICAgICAgICAgICAgfVtdO1xuICAgICAgICAgIH1bXVxuICAgICAgICApXG4gICAgICAgICAgLm1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICB2YWx1ZS5ncm91cEJ5Lm1hcCgoZ3JvdXBCeSkgPT4gKHtcbiAgICAgICAgICAgICAga2V5OiB2YWx1ZS5rZXksXG4gICAgICAgICAgICAgIHNlcmllczogZ3JvdXBCeS5rZXksXG4gICAgICAgICAgICAgIHZhbHVlOiBncm91cEJ5LnZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSk7XG4gICAgICAgIHJldHVybiB7IG9wZXJhdGlvbjogYWdncmVnYXRlLm9wZXJhdGlvbiwgZGF0YTogZmxhdHRlbmVkIH07XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLm5vRGF0YSQgPSB0aGlzLmFnZ3JlZ2F0ZWRWYWx1ZXMkLnBpcGUobWFwKCh7IG9wZXJhdGlvbiwgZGF0YSB9KSA9PiBkYXRhLmxlbmd0aCA9PT0gMCkpO1xuXG4gICAgdGhpcy52ZWdhTGl0ZVNwZWMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlcyQsXG4gICAgICB0aGlzLmFnZ3JlZ2F0ZWRWYWx1ZXMkLFxuICAgICAgdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSxcbiAgICAgIHRoaXMuZGlzcGxheUhlYWRlciRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgdHlwZXMsIHZhbHVlcywgc2l6ZSwgZGlzcGxheV0pID0+IHtcbiAgICAgICAgY29uc3QgaXNDaXJjdWxhciA9IFtHcmFwaFR5cGUuQ0lSQ1VMQVIsIEdyYXBoVHlwZS5ET05VVF0uaW5jbHVkZXMob3B0aW9ucy5ncmFwaC50eXBlKTtcbiAgICAgICAgY29uc3Qgc3RhY2tlZCA9IG9wdGlvbnMuZ3JhcGgudHlwZS5zdGFydHNXaXRoKCdiYXInKSA/ICFvcHRpb25zLmdyYXBoLnN0YWNrZWQgOiBvcHRpb25zLmdyYXBoLnN0YWNrZWQ7XG4gICAgICAgIGNvbnN0IGxlZ2VuZFRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgb3B0aW9ucy5ncm91cEJ5ID8gdHlwZXMuZ3JvdXBCeS5uYW1lID8/ICcnIDogJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxlZ2VuZExhYmVsJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWVyZ2VEZWVwKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRzY2hlbWE6ICdodHRwczovL3ZlZ2EuZ2l0aHViLmlvL3NjaGVtYS92ZWdhLWxpdGUvdjUuanNvbicsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRUaXRsZShvcHRpb25zKSxcbiAgICAgICAgICAgIHdpZHRoOiAnY29udGFpbmVyJyxcbiAgICAgICAgICAgIGhlaWdodDogKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSAoZGlzcGxheSA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMCksXG4gICAgICAgICAgICBwYWRkaW5nOiAxMCxcbiAgICAgICAgICAgIGF1dG9zaXplOiB7IHR5cGU6ICdmaXQnLCBjb250YWluczogJ3BhZGRpbmcnIH0sXG4gICAgICAgICAgICBkYXRhOiB7IHZhbHVlczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZXMuZGF0YSkpIH0sXG4gICAgICAgICAgICBsYXllcjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFyazoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogb3B0aW9ucy5ncmFwaC50eXBlLnNwbGl0KCctJylbMF0gYXMgJ2FyYycgfCAnbGluZScgfCAncG9pbnQnIHwgJ2JhcicgfCAnYXJlYScsXG4gICAgICAgICAgICAgICAgICBwb2ludDogb3B0aW9ucy5ncmFwaC50eXBlLmluZGV4T2YoJ3BvaW50JykgPj0gMCxcbiAgICAgICAgICAgICAgICAgIGxpbmU6IG9wdGlvbnMuZ3JhcGgudHlwZS5pbmRleE9mKCdsaW5lJykgPj0gMCxcbiAgICAgICAgICAgICAgICAgIGlubmVyUmFkaXVzOiBvcHRpb25zLmdyYXBoLmRvbnV0U2l6ZSA/PyAzMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICAgIHg6ICFpc0NpcmN1bGFyXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnMuYWJzY2lzc2EubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVVbml0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUwgJiYgb3B0aW9ucy5hYnNjaXNzYS5saW1pdD8uaXNUaW1lTGltaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuYWJzY2lzc2EubGltaXQuaW50ZXJ2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbjogb3B0aW9ucy5ncmFwaC50eXBlLmluZGV4T2YoJ2hpc3RvZ3JhbScpID49IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBheGlzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9ybWF0OiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUwgPyAnJVktJUItJWRUJUg6JU06JVMnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uV2lkZ2V0QWdncmVnYXRlZENoYXJ0Q29tcG9uZW50Lm1pblRpY2sodHlwZXMuYWJzY2lzc2EuZmllbGRUeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxFeHByOiBgaGVpZ2h0IDwgMzAwID8gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJ0aW1lRm9ybWF0KGRhdHVtLnZhbHVlLCAnJVktJUItJWRUJUg6JU06JVMnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0cnVuY2F0ZShkYXR1bS52YWx1ZSwgMTApJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IDogJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJ0aW1lRm9ybWF0KGRhdHVtLnZhbHVlLCAnJVktJUItJWRUJUg6JU06JVMnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdkYXR1bS52YWx1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBhIGZhbHNlIHZhbHVlIGhlcmUgc28gdGhhdCB2ZWdhIHVuZGVyc3RhbmRzIHByb3Blcmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHplcm86ICEhb3B0aW9ucy5hYnNjaXNzYS5rZWVwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAvL3R5cGU6IFdpZGdldENoYXJ0Q29tcG9uZW50LmlzVGltZVVuaXRVVEModmFyaWFibGVzWzBdKSA/ICd1dGMnIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHk6ICFpc0NpcmN1bGFyXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXhpczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5XaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQubWluVGljayh0eXBlcy5vcmRpbmF0ZS5maWVsZFR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnNldFRpY2tDb3VudCh2YWx1ZXMuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuUVVBTlRJVEFUSVZFID8gISFvcHRpb25zLm9yZGluYXRlLmtlZXAwIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oc3RhY2tlZCA/IHsgc3RhY2s6IHRydWUgfSA6IHt9KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB0aGV0YTogaXNDaXJjdWxhciA/IHsgZmllbGQ6ICd2YWx1ZScsIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGVnZW5kVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAhaXNDaXJjdWxhciA/ICdzZXJpZXMnIDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgIGxlZ2VuZDogb3B0aW9ucy5ncmFwaC5sZWdlbmQsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiBvcHRpb25zLmdyYXBoLmxlZ2VuZCA/IHsgc2NoZW1lOiBvcHRpb25zLmdyb3VwQnk/LmNvbG9yID8/IHRoaXMuc2NoZW1lc1swXS5pZCB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgeE9mZnNldDogc3RhY2tlZCAmJiBvcHRpb25zLmdyb3VwQnkgPyB7IGZpZWxkOiAnc2VyaWVzJyB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgdG9vbHRpcDogb3B0aW9ucy5ncmFwaC50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5ncm91cEJ5XG4gICAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnMuYWJzY2lzc2EubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSAndGVtcG9yYWwnID8geyBmb3JtYXQ6ICclWS0lQi0lZFQlSDolTTolUycgfSA6IHt9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAndmFsdWUnLCB0eXBlOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSwgdGl0bGU6IG9wdGlvbnMub3JkaW5hdGUubGFiZWwgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnc2VyaWVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGVnZW5kVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ25vbWluYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4odHlwZXMuYWJzY2lzc2EudmVnYVR5cGUgPT09ICd0ZW1wb3JhbCcgPyB7IGZvcm1hdDogJyVZLSVCLSVkVCVIOiVNOiVTJyB9IDoge30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICd2YWx1ZScsIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLCB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29uZmlnOiBmb250Q29uZmlnKCdVYnVudHUsIHNhbnMtc2VyaWYnKVxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICAgIG9wdGlvbnMuYWRkaXRpb25hbFNwZWNcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy52ZWdhTGl0ZVNwZWMkLCB0aGlzLnRyaWdnZXIkXSkuc3Vic2NyaWJlKChbc3BlYywgX10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmVnYSkge1xuICAgICAgICAgIHRoaXMudmlldz8uZmluYWxpemUoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhzcGVjKTtcbiAgICAgICAgICBlbWJlZCh0aGlzLnZlZ2EubmF0aXZlRWxlbWVudCwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzcGVjKSksIHtcbiAgICAgICAgICAgIGFjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgICAgcmVuZGVyZXI6ICdjYW52YXMnLFxuICAgICAgICAgICAgZm9ybWF0TG9jYWxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudE9iamVjdCgnQHByeS53aWRnZXQuY2hhcnQubnVtYmVyTG9jYWxlJykgYXMgYW55LFxuICAgICAgICAgICAgdGltZUZvcm1hdExvY2FsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnRPYmplY3QoJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRpbWVGb3JtYXRMb2NhbGUnKSBhcyBhbnlcbiAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gKHRoaXMudmlldyA9IHJlc3VsdC52aWV3KSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdDYW5ub3QgZGlzcGxheSBjaGFydCcsIGVycikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyJC5uZXh0KCksIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnRyaWdnZXIkLm5leHQoKTtcbiAgfVxuXG4gIHRyYW5zbGF0ZVRvVmVnYVR5cGUodHlwZT86IEZpZWxkVHlwZSwgbmFtZT86IHN0cmluZyk6IFZlZ2FUeXBlIHtcbiAgICBsZXQgaWRSZWdleCA9IG5ldyBSZWdFeHAoL19pZHxpZF98X0lEfElEX3xfSWR8SWRfLywgJ2cnKTtcbiAgICBpZiAoaWRSZWdleC50ZXN0KG5hbWUgPz8gJy0tLS0tLS0nKSkge1xuICAgICAgcmV0dXJuIFZlZ2FUeXBlLk9SRElOQUw7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5ERUNJTUFMOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5URUdFUjpcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxPTkc6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5RVUFOVElUQVRJVkU7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlNUQU5UOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuVEVNUE9SQUw7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5LRVlXT1JEOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuTk9NSU5BTDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5OT01JTkFMO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtaW5UaWNrKHR5cGU6IEZpZWxkVHlwZSk6IHsgdGlja01pblN0ZXA6IG51bWJlciB9IHwge30ge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5URUdFUjpcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxPTkc6XG4gICAgICAgIHJldHVybiB7IHRpY2tNaW5TdGVwOiAxIH07XG4gICAgICBjYXNlIEZpZWxkVHlwZS5ERUNJTUFMOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5TVEFOVDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLktFWVdPUkQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5TVFJJTkc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgZW1pdE1hbmlmZXN0KCkge1xuICAgIHRoaXMubWFuaWZlc3RNb2RpZmllZC5lbWl0KHtcbiAgICAgIHdpZGdldEluZGV4OiB0aGlzLndpZGdldEluZGV4LFxuICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgb3B0aW9uczogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC5nZXRWYWx1ZSgpIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5TZXR0aW5ncygpIHtcbiAgICAodGhpcy5vcGVuJCBhcyBTdWJqZWN0PHZvaWQ+KS5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIGdldFRpdGxlKG9wdGlvbnM6IENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5ncmFwaD8udGl0bGUgPz8gKG9wdGlvbnMuYWJzY2lzc2EubGFiZWwgPz8gJ2tleScpICsgJyAvICcgKyAob3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCA/PyAndmFsdWUnKTtcbiAgfVxuXG4gIGNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0aXRsZTogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVR5cGUoJGV2ZW50OiBHcmFwaFR5cGUpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0eXBlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBpZiAoW0dyYXBoVHlwZS5DSVJDVUxBUiwgR3JhcGhUeXBlLkRPTlVUXS5pbmNsdWRlcygkZXZlbnQpKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgIGdyb3VwQnk6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChbR3JhcGhUeXBlLkhJU1RPR1JBTV0uaW5jbHVkZXMoJGV2ZW50KSkge1xuICAgICAgICB0aGlzLmxpbWl0RWxlbWVudHModHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlRG9udXRTaXplKCRldmVudDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCwgZG9udXRTaXplOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3BlcmF0aW9uKCRldmVudDogT3BlcmF0aW9uKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgb3BlcmF0aW9uOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBpZiAoJGV2ZW50ID09PSBPcGVyYXRpb24uQ09VTlQgfHwgJGV2ZW50ID09PSBPcGVyYXRpb24uRElTVElOQ1QpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgb3JkaW5hdGU6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQub3BlcmF0aW9uLicgKyAkZXZlbnQpLFxuICAgICAgICAgICAgYXR0cmlidXRlOiB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXJPcmRpbmF0ZUF0dHJpYnV0ZXMkLm5leHQoKSwgMTApO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUFic2Npc3NhKCRldmVudDogc3RyaW5nKSB7XG4gICAgaWYgKCRldmVudCAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGF0dHJpYnV0ZTogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuY2xhc3Nlc1xuICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09ICRldmVudCk7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgbGFiZWw6IGF0dHI/Lm5hbWUgPz8gJ2F0dHItbm90LWZvdW5kJyB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb3B5QWJzY2lzc2FGaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBhdHRyPy5maWVsZCA9PT0gZmllbGQuaWQpO1xuXG4gICAgICB0aGlzLmxpbWl0RWxlbWVudHMoISF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUFic2Npc3NhTGFiZWwoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsYWJlbDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU9yZGluYXRlKCRldmVudDogYW55KSB7XG4gICAgaWYgKCRldmVudCAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGF0dHJpYnV0ZTogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuY2xhc3Nlc1xuICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09ICRldmVudCk7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgbGFiZWw6IGF0dHI/Lm5hbWUgPz8gJ2F0dHItbm90LWZvdW5kJyB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb3B5T3JkaW5hdGVGaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBhdHRyPy5maWVsZCA9PT0gZmllbGQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU9yZGluYXRlTGFiZWwoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBsYWJlbDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUtlZXAwQWJzY2lzc2EoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBrZWVwMDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUtlZXAwT3JkaW5hdGUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBrZWVwMDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxpbWl0RWxlbWVudHMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY29weUFic2Npc3NhRmllbGQ/LnR5cGUgIT09IEZpZWxkVHlwZS5JTlNUQU5UICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhPy5saW1pdCAmJlxuICAgICAgICAgICdhdCcgaW4gdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhPy5saW1pdFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgICAgIGF0OiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2E/LmxpbWl0Py5hdCA/PyAzLFxuICAgICAgICAgICAgICAgIG90aGVyczogZmFsc2UsXG4gICAgICAgICAgICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgICAgICAgICAgIGlzVGltZUxpbWl0OiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgbGltaXQ6IHsgaW50ZXJ2YWw6ICdzZWNvbmQnLCBpc1RpbWVMaW1pdDogdHJ1ZSB9IH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsaW1pdDogdW5kZWZpbmVkIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgICF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgYXQ6ICRldmVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXRPdGhlcnMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgICF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgb3RoZXJzOiAkZXZlbnRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUxpbWl0T3JkZXIoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgICF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgb3JkZXI6ICRldmVudCA/ICdhc2MnIDogJ2Rlc2MnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VUaW1lTGltaXQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EsXG4gICAgICAgICAgbGltaXQ6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgaW50ZXJ2YWw6ICRldmVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlTGVnZW5kKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmdyYXBoLCBsZWdlbmQ6ICRldmVudCB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVUb29sdGlwKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCwgdG9vbHRpcDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUdyb3VwQnkoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeTogeyBhdHRyaWJ1dGU6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5Py5hdHRyaWJ1dGUgPz8gJycsIGNvbG9yOiB0aGlzLnNjaGVtZXNbMF0uaWQgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgIGdyb3VwQnk6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VHcm91cEJ5KCRldmVudDogYW55KSB7XG4gICAgaWYgKHR5cGVvZiAkZXZlbnQgPT09ICdzdHJpbmcnICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmdyb3VwQnkpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5LFxuICAgICAgICAgIGF0dHJpYnV0ZTogJGV2ZW50XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUNvbG9yU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmdyb3VwQnkpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgIGF0dHJpYnV0ZTogdGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JvdXBCeT8uYXR0cmlidXRlLFxuICAgICAgICAgIGNvbG9yOiAkZXZlbnRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0VGlja0NvdW50KGRhdGE6IGFueSkge1xuICAgIHJldHVybiBNYXRoLm1heCguLi5kYXRhLm1hcCgodmFsOiBhbnkpID0+IHZhbC52YWx1ZSkpIDwgM1xuICAgICAgPyB7IHRpY2tDb3VudDogTWF0aC5tYXgoLi4uZGF0YS5tYXAoKHZhbDogYW55KSA9PiB2YWwudmFsdWUpKSB9XG4gICAgICA6IHt9O1xuICB9XG5cbiAgc2NoZW1lKCkge1xuICAgIHJldHVybiB2ZWdhLnNjaGVtZSh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JvdXBCeT8uY29sb3IgPz8gJycpO1xuICB9XG5cbiAgdG9nZ2xlU3RhY2tlZCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDoge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCxcbiAgICAgICAgICBzdGFja2VkOiAkZXZlbnRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2NhbnZhcycpWzBdLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJykpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0LWNzcz48L3ByeS13aWRnZXQtYWdncmVnYXRlZC1jaGFydC1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLWNoYXJ0XCIgKm5nSWY9XCJvcHRpb25zQ29weSQgfCBhc3luYyBhcyBvcHRpb25zQ29weVwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAjaGVhZGVyXG4gICAgW2hlYWRlck9wdGlvbnNdPVwiKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8/IHt9XCJcbiAgICBbZGlzcGxheUNvdW50XT1cImZhbHNlXCJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgPHByeS1lZGl0LWlucHV0XG4gICAgICAgICAgbGFiZWw9XCJAcHJ5LndpZGdldC5jaGFydC50aXRsZVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2hhcnRUaXRsZSgkZXZlbnQpXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC50aXRsZVwiXG4gICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zQ29weVwiIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3R5cGVcIj57eyAnQHByeS53aWRnZXQuY2hhcnQudHlwZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVHlwZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cInR5cGVPcHRpb25zXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgaWQ9XCJjaGFydF90eXBlXCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSA9PT0gR3JhcGhUeXBlLkRPTlVUXCI+XG4gICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGguZG9udXRTaXplXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZURvbnV0U2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQuY2hhcnQuZG9udXRTaXplXCJcbiAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgbWF4PVwiNTAwXCJcbiAgICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUxlZ2VuZCgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5ncmFwaC5sZWdlbmRcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5jaGFydC5sZWdlbmQnIHwgaTE4biB9fVxuICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVUb29sdGlwKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmdyYXBoLnRvb2x0aXBcIlxuICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC50b29sdGlwJyB8IGkxOG4gfX1cbiAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuZ3JhcGgudHlwZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImFic2Npc3NhXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmFic2Npc3NhJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWJzY2lzc2EoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiYWJzY2lzc2FBdHRyaWJ1dGVzJCB8IGFzeW5jIHwgcHJ5U29ydERhdGEgOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgaWQ9XCJhYnNjaXNzYVwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHByeS1lZGl0LWlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0LmNoYXJ0LmRhdGFMYWJlbFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBYnNjaXNzYUxhYmVsKCRldmVudClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGFiZWxcIlxuICAgICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgWydxdWFudGl0YXRpdmUnLCAndGVtcG9yYWwnXS5pbmNsdWRlcyh0cmFuc2xhdGVUb1ZlZ2FUeXBlKGNvcHlBYnNjaXNzYUZpZWxkPy50eXBlKSkgJiZcbiAgICAgICAgICAgICAgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkRPTlVUICYmXG4gICAgICAgICAgICAgIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5DSVJDVUxBUlxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUtlZXAwQWJzY2lzc2EoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmtlZXAwXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmlnaW4nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibGltaXRFbGVtZW50cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuSElTVE9HUkFNXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5saW1pdCcgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0ID09PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmF0XCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxpbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC5saW1pdFwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgIG1heD1cIjEwXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktcmFuZ2U+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkhJU1RPR1JBTVwiPlxuICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMaW1pdE90aGVycygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQub3RoZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vdGhlcnMnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJkYXRlX2xpbWl0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yZGVyJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGltaXRPcmRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJbeyBpZDogJ2FzYycgfSwgeyBpZDogJ2Rlc2MnIH1dXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQub3JkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbYmFzZVRyYW5zbGF0ZV09XCInQHByeS53aWRnZXQuY2hhcnQuJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJvdGhlcl9saW1pdFwiXG4gICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJkYXRlX2xpbWl0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRpbWVJbnRlcnZhbCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVGltZUxpbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiW1xuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnc2Vjb25kJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnbWludXRlJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnaG91cicgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ2RheScgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3dlZWsnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdtb250aCcgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3F1YXJ0ZXInIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICd5ZWFyJyB9XG4gICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGJhc2VUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC50aW1lLlwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICBpZD1cImRhdGVfbGltaXRcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwib3BlcmF0aW9uc1wiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcGVyYXRpb24udGl0bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcGVyYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwib3BlcmF0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLm9wZXJhdGlvblwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgIGlkPVwib3BlcmF0aW9uc1wiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLm9wZXJhdGlvbiAhPT0gT3BlcmF0aW9uLkNPVU5UXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJvcmRpbmF0ZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmRpbmF0ZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcmRpbmF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwib3JkaW5hdGVBdHRyaWJ1dGVzJCB8IGFzeW5jIHwgcHJ5U29ydERhdGEgOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkub3JkaW5hdGUuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgIGlkPVwib3JkaW5hdGVcIlxuICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQuZGF0YUxhYmVsXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9yZGluYXRlTGFiZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5sYWJlbFwiXG4gICAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHJhbnNsYXRlVG9WZWdhVHlwZShjb3B5T3JkaW5hdGVGaWVsZD8udHlwZSkgPT09ICdxdWFudGl0YXRpdmUnXCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlS2VlcDBPcmRpbmF0ZSgkZXZlbnQpXCIgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkub3JkaW5hdGUua2VlcDBcIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yaWdpbicgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkRPTlVUICYmIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5DSVJDVUxBUlwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlR3JvdXBCeSgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5ncm91cEJ5XCJcbiAgICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lmdyb3VwQnknIHwgaTE4biB9fVxuICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5ncm91cEJ5XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfc2VyaWVzQXR0clwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5ncm91cEF0dHInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUdyb3VwQnkoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncm91cEJ5LmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiYWJzY2lzc2FBdHRyaWJ1dGVzJCB8IGFzeW5jIHwgcHJ5U29ydERhdGEgOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzQXR0clwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNTY2hlbWVcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY29sb3JTY2hlbWUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNvbG9yU2NoZW1lKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JvdXBCeS5jb2xvclwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJzY2hlbWVzXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzU2NoZW1lXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGJhc2VUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC5zY2hlbWUuXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImlkXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXQtLWNoYXJ0LWNvbG9yLXRodW1iXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNjaGVtZUNvbG9yIG9mIHNjaGVtZSgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiby13aWRnZXQtLWNoYXJ0LWNvbG9yLXRodW1iLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInNjaGVtZUNvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNjaGVtZUNvbG9yXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnN0YWNrZWRcIiAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVTdGFja2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5jaGFydC5zdGFja2VkJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdFwiICpuZ0lmPVwiKGlzQ2hhcnRWYWxpZCQgfCBhc3luYykgPT09IGZhbHNlXCI+XG4gICAgPGltZ1xuICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm5vRGF0YScgfCBpMThuIH19XCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgLz5cbiAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5ub0RhdGEnIHwgaTE4biB9fTwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIoaXNDaGFydFZhbGlkJCB8IGFzeW5jKSAmJiAhKG5vRGF0YSQgfCBhc3luYylcIj5cbiAgICA8ZGl2ICN2ZWdhPjwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShpc0NoYXJ0VmFsaWQkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19jaG9vc2UtcGFyYW1ldGVyc1wiPlxuICAgICAgPHAgY2xhc3M9XCJhLXBcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNob29zZVBhcmFtZXRlcnMnIHwgaTE4biB9fVxuICAgICAgPC9wPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5TZXR0aW5ncygpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiIGljb25Tdmc9XCJjb250cm9sXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0LnNldHRpbmdzLnRpdGxlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YSQgfCBhc3luY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldF9fY2hvb3NlLXBhcmFtZXRlcnNcIj5cbiAgICAgIDxwIGNsYXNzPVwiYS1wXCI+XG4gICAgICAgIHt7ICdAcHJ5LndpZGdldC5jaGFydC5ub0RhdGEnIHwgaTE4biB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
649
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFJTCxjQUFjLEVBQ2QsbUJBQW1CLEVBRW5CLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFJVCxhQUFhLEVBQ2IsUUFBUSxFQUNSLG9CQUFvQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFFeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFNMUQsTUFBTSxPQUFPLDhCQUErQixTQUFRLG1CQUFtQjtJQWlDckUsWUFDRSxLQUFpQixFQUNULGdCQUFnQyxFQUN4QyxFQUFjLEVBQ04sa0JBQXlDO1FBRWpELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFKVCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdCO1FBRWhDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBdUI7UUFsQ25ELGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQXNDLElBQUksQ0FBQyxDQUFDO1FBRTlFLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBVS9CLHlCQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQzVDLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFDdEIsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUV0QixnQkFBVyxHQUFvQyxFQUFFLENBQUM7UUFHbEQsWUFBTyxHQUFZLEVBQUUsQ0FBQztRQUN0QixXQUFNLEdBQVksRUFBRSxDQUFDO1FBRXJCLCtCQUEwQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFHakQsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFFL0IsZUFBVSxHQUFJLE1BQU0sQ0FBQztRQUNyQixrQkFBYSxHQUFJLEtBQUssQ0FBQztRQVNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1gsRUFBRSxFQUFFLENBQUM7WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxDQUFDLENBQUM7U0FDekUsQ0FBQyxDQUFDO2FBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDakMsR0FBRyxDQUNELENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDWCxTQUFTLENBQ1A7WUFDRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDNUQsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUN6QixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1NBQ00sRUFDakMsQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBaUMsQ0FDekIsQ0FDcEMsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNuRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUM1QixPQUFPO2FBQ0osTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzthQUNoQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xDLE9BQU8sS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hHLENBQUMsQ0FBQyxDQUNIO2FBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUNsQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDNUIsRUFDRCxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNqQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1gsRUFBRSxFQUFFLENBQUM7WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxDQUFDLENBQUM7U0FDekUsQ0FBQyxDQUFDO2FBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2xELENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlHLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUN4QyxPQUFPO2FBQ0osTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzthQUNoQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xDLE9BQU8sS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUNMLENBQUMsQ0FBQyxLQUFLO2dCQUNQLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLEdBQUc7Z0JBQzVCLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLE1BQU07Z0JBQy9CLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FDckYsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNIO2FBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUN0QyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRO1lBQ2IsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsVUFBVTtZQUNmLElBQUksQ0FBQywwQkFBMEI7U0FDaEMsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUM1QixPQUFPO2FBQ0osTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzthQUNoQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xDLE9BQU8sS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQ3ZCO29CQUNFLFNBQVMsQ0FBQyxHQUFHO29CQUNiLFNBQVMsQ0FBQyxHQUFHO29CQUNiLFNBQVMsQ0FBQyxHQUFHO29CQUNiLFNBQVMsQ0FBQyxFQUFFO29CQUNaLFNBQVMsQ0FBQyxFQUFFO29CQUNaLFNBQVMsQ0FBQyxPQUFPO29CQUNqQixTQUFTLENBQUMsTUFBTTtvQkFDaEIsU0FBUyxDQUFDLElBQUk7aUJBQ2YsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUN0RDtnQkFDQSxPQUFPLENBQ0wsQ0FBQyxDQUFDLEtBQUs7b0JBQ1AsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDL0YsQ0FBQzthQUNIO1lBQ0QsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQ0g7YUFDQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ3RDLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFO1lBQzlDLE9BQU8sQ0FDTCxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUM1QixhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUN6RSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztvQkFDekIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7b0JBQzNFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDVixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckYsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUNoRixHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPO2lCQUNyQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3ZGLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLE1BQU0sUUFBUSxHQUFHLE9BQU87aUJBQ3JCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDdkYsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsT0FBTztpQkFDcEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2lCQUN2RixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3pHLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDekcsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN2RyxPQUFPO2dCQUNMLFFBQVEsRUFBRTtvQkFDUixTQUFTLEVBQUUsaUJBQWlCO29CQUM1QixRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUMzRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO2lCQUMzQjtnQkFDRCxRQUFRLEVBQUU7b0JBQ1IsU0FBUyxFQUFFLGlCQUFpQjtvQkFDNUIsUUFBUSxFQUNOLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFFBQVE7d0JBQ2pHLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWTt3QkFDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDdkUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtpQkFDM0I7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLFNBQVMsRUFBRSxnQkFBZ0I7b0JBQzNCLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztvQkFDbkUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRTtpQkFDMUI7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNoRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFDOUYsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQzNCLGFBQWE7WUFDYixJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO2dCQUMvRCxPQUFPO29CQUNMLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztvQkFDOUIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDdEYsQ0FBQzthQUNIO1lBQ0QsTUFBTSxTQUFTLEdBQ2IsU0FBUyxDQUFDLE1BT1g7aUJBQ0UsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDYixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDOUIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2dCQUNkLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRztnQkFDbkIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2FBQ3JCLENBQUMsQ0FBQyxDQUNKO2lCQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjO1NBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUM5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDdEcsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FDL0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FDN0UsQ0FBQztZQUNGLE9BQU8sU0FBUyxDQUNkO2dCQUNFLE9BQU8sRUFBRSxpREFBaUQ7Z0JBQzFELEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFDN0IsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtnQkFDOUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDekQsS0FBSyxFQUFFO29CQUNMO3dCQUNFLElBQUksRUFBRTs0QkFDSixJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBOEM7NEJBQ25GLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzs0QkFDL0MsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDOzRCQUM3QyxXQUFXLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRTt5QkFDM0M7d0JBQ0QsUUFBUSxFQUFFOzRCQUNSLENBQUMsRUFBRSxDQUFDLFVBQVU7Z0NBQ1osQ0FBQyxDQUFDO29DQUNFLEtBQUssRUFBRSxLQUFLO29DQUNaLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7b0NBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVE7b0NBQzdCLFFBQVEsRUFDTixLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVc7d0NBQ2xGLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRO3dDQUNqQyxDQUFDLENBQUMsU0FBUztvQ0FDZixHQUFHLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0NBQ2pELElBQUksRUFBRTt3Q0FDSiwwRkFBMEY7d0NBQzFGLElBQUksRUFBRSxLQUFLO3dDQUNYLEdBQUcsOEJBQThCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO3dDQUNuRSxTQUFTLEVBQUUsa0JBQ1QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLFFBQVE7NENBQzNDLENBQUMsQ0FBQyw4Q0FBOEM7NENBQ2hELENBQUMsQ0FBQywyQkFDTixNQUNFLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFROzRDQUMzQyxDQUFDLENBQUMsOENBQThDOzRDQUNoRCxDQUFDLENBQUMsYUFDTixFQUFFO3FDQUNIO29DQUNELEtBQUssRUFBRTt3Q0FDTCw2REFBNkQ7d0NBQzdELElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO3dDQUM5Qiw0RUFBNEU7cUNBQzdFO2lDQUNGO2dDQUNILENBQUMsQ0FBQyxTQUFTOzRCQUNiLENBQUMsRUFBRSxDQUFDLFVBQVU7Z0NBQ1osQ0FBQyxDQUFDO29DQUNFLEtBQUssRUFBRSxPQUFPO29DQUNkLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7b0NBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVE7b0NBQzdCLElBQUksRUFBRTt3Q0FDSixHQUFHLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQzt3Q0FDbkUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7cUNBQ2xDO29DQUNELEtBQUssRUFBRTt3Q0FDTCxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLO3FDQUMzRjtvQ0FDRCxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lDQUNwQztnQ0FDSCxDQUFDLENBQUMsU0FBUzs0QkFDYixLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7NEJBQ2pGLEtBQUssRUFBRTtnQ0FDTCxLQUFLLEVBQUUsV0FBVztnQ0FDbEIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0NBQ3JDLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07Z0NBQzVCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUzs2QkFDbkc7NEJBQ0QsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUzs0QkFDckUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTztnQ0FDNUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPO29DQUNmLENBQUMsQ0FBQzt3Q0FDRTs0Q0FDRSxLQUFLLEVBQUUsS0FBSzs0Q0FDWixJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFROzRDQUM3QixLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLOzRDQUM3QixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7eUNBQ25GO3dDQUNELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO3dDQUNoRjs0Q0FDRSxLQUFLLEVBQUUsUUFBUTs0Q0FDZixLQUFLLEVBQUUsV0FBVzs0Q0FDbEIsSUFBSSxFQUFFLFNBQVM7eUNBQ2hCO3FDQUNGO29DQUNILENBQUMsQ0FBQzt3Q0FDRTs0Q0FDRSxLQUFLLEVBQUUsS0FBSzs0Q0FDWixJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFROzRDQUM3QixLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLOzRDQUM3QixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7eUNBQ25GO3dDQUNELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO3FDQUNqRjtnQ0FDTCxDQUFDLENBQUMsU0FBUzt5QkFDZDtxQkFDRjtpQkFDRjtnQkFDRCxNQUFNLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixDQUFDO2FBQ2xDLEVBQ1IsT0FBTyxDQUFDLGNBQWMsQ0FDdkIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDekUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtvQkFDL0QsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLGdDQUFnQyxDQUFRO29CQUMxRixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLG9DQUFvQyxDQUFRO2lCQUNuRyxDQUFDO3FCQUNDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDM0MsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0Q7aUJBQU07Z0JBQ0wsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDN0M7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBZ0IsRUFBRSxJQUFhO1FBQ2pELElBQUksT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO1NBQ3pCO1FBRUQsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDdkIsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLEtBQUssU0FBUyxDQUFDLElBQUk7Z0JBQ2pCLE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQztZQUMvQixLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNwQixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDM0IsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLEtBQUssU0FBUyxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUMxQjtnQkFDRSxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFlO1FBQzVCLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLEtBQUssU0FBUyxDQUFDLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDNUIsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDdkIsS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3RCO2dCQUNFLE9BQU8sRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRTtnQkFDUixHQUFHLElBQUksQ0FBQyxRQUFRO2dCQUNoQixPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUU7YUFDN0M7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNULElBQUksQ0FBQyxLQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU8sUUFBUSxDQUFDLE9BQXFDO1FBQ3BELE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYztRQUM3QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTthQUM1RCxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsTUFBaUI7UUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7YUFDM0QsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7b0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO29CQUMxQixPQUFPLEVBQUUsU0FBUztpQkFDbkIsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQjtTQUNGO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFjO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO2FBQ2hFLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFpQjtRQUMvQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsUUFBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTthQUN0RSxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sS0FBSyxTQUFTLENBQUMsS0FBSyxJQUFJLE1BQU0sS0FBSyxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7b0JBQzFCLFFBQVEsRUFBRTt3QkFDUixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVE7d0JBQ3BDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDhCQUE4QixHQUFHLE1BQU0sQ0FBQzt3QkFDN0UsU0FBUyxFQUFFLFNBQVM7cUJBQ3JCO2lCQUNGLENBQUMsQ0FBQzthQUNKO1lBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYztRQUMzQixJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7YUFDdEUsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU87aUJBQ3RCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztpQkFDaEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztpQkFDbEMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsUUFBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksZ0JBQWdCLEVBQUU7YUFDMUYsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUvRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0Q7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsUUFBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTthQUNsRSxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsTUFBVztRQUN4QixJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7YUFDdEUsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU87aUJBQ3RCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztpQkFDaEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztpQkFDbEMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsUUFBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksZ0JBQWdCLEVBQUU7YUFDMUYsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNoRjtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFXO1FBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixRQUFRLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2FBQ2xFLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQVc7UUFDN0IsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7YUFDbEUsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBVztRQUM3QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsUUFBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTthQUNsRSxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsTUFBVztRQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQzNCLElBQUksTUFBTSxFQUFFO2dCQUNWLElBQ0UsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksS0FBSyxTQUFTLENBQUMsT0FBTztvQkFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUs7b0JBQ3hDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUNoRDtvQkFDQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzt3QkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7d0JBQzFCLFFBQVEsRUFBRTs0QkFDUixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVE7NEJBQ3BDLEtBQUssRUFBRTtnQ0FDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQztnQ0FDckQsTUFBTSxFQUFFLEtBQUs7Z0NBQ2IsS0FBSyxFQUFFLEtBQUs7Z0NBQ1osV0FBVyxFQUFFLEtBQUs7NkJBQ25CO3lCQUNGO3FCQUNGLENBQUMsQ0FBQztpQkFDSjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzt3QkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7d0JBQzFCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFO3FCQUNyRyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7b0JBQzFCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7aUJBQ3JFLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVc7UUFDckIsSUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7WUFDdEMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFDbkQ7WUFDQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRTtvQkFDUixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVE7b0JBQ3BDLEtBQUssRUFBRTt3QkFDTCxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO3dCQUMxQyxFQUFFLEVBQUUsTUFBTTtxQkFDWDtpQkFDRjthQUNGLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQVc7UUFDM0IsSUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7WUFDdEMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFDbkQ7WUFDQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRTtvQkFDUixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVE7b0JBQ3BDLEtBQUssRUFBRTt3QkFDTCxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO3dCQUMxQyxNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRjthQUNGLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQVc7UUFDMUIsSUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7WUFDdEMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFDbkQ7WUFDQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRTtvQkFDUixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVE7b0JBQ3BDLEtBQUssRUFBRTt3QkFDTCxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO3dCQUMxQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU07cUJBQy9CO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQVc7UUFDekIsSUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQ2xEO1lBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixRQUFRLEVBQUU7b0JBQ1IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRO29CQUNuQyxLQUFLLEVBQUU7d0JBQ0wsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSzt3QkFDekMsUUFBUSxFQUFFLE1BQU07cUJBQ2pCO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVc7UUFDdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7YUFDNUQsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQVc7UUFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7YUFDOUQsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQVc7UUFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUMzQixJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7b0JBQzFCLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7aUJBQ3JHLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO29CQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztvQkFDMUIsT0FBTyxFQUFFLFNBQVM7aUJBQ25CLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQVc7UUFDdkIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQzVGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsT0FBTyxFQUFFO29CQUNQLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTztvQkFDbkMsU0FBUyxFQUFFLE1BQU07aUJBQ2xCO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBVztRQUMzQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLE9BQU8sRUFBRTtvQkFDUCxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVM7b0JBQ3JELEtBQUssRUFBRSxNQUFNO2lCQUNkO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDcEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUN2RCxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQy9ELENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDVCxDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBVztRQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFO29CQUNMLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSztvQkFDakMsT0FBTyxFQUFFLE1BQU07aUJBQ2hCO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRVEsT0FBTztRQUNkLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0EvdkJVLDhCQUE4QjtrR0FBOUIsOEJBQThCLHdMQ2pDM0MscWlaQStTQTs7MkZEOVFhLDhCQUE4QjtrQkFKMUMsU0FBUzsrQkFDRSw2QkFBNkI7c0xBSXBCLElBQUk7c0JBQXRCLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyxcbiAgQ2xhc3MsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBEYXRhV2lkZ2V0Q29tcG9uZW50LFxuICBGaWVsZCxcbiAgRmllbGRTZWxlY3RvcnMsXG4gIEZpZWxkVHlwZSxcbiAgR3JhcGhUeXBlLFxuICBPcGVyYXRpb24sXG4gIFByeUFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFZhbHVlVHlwZSxcbiAgVmVnYUNvbG9yVHlwZSxcbiAgVmVnYVR5cGUsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hUXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QsIHN3aXRjaE1hcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBWaWV3IH0gZnJvbSAndmVnYSc7XG5pbXBvcnQgZW1iZWQsIHsgdmVnYSB9IGZyb20gJ3ZlZ2EtZW1iZWQnO1xuaW1wb3J0IHsgbWVyZ2VEZWVwLCBUb3BMZXZlbFNwZWMgfSBmcm9tICd2ZWdhLWxpdGUnO1xuaW1wb3J0IHsgZm9udENvbmZpZyB9IGZyb20gJ3ZlZ2EtbGl0ZS9idWlsZC9zcmMvY29uZmlnJztcblxudmVnYS5zY2hlbWUoJ0tPL1cvT0snLCBbJyNDMDREM0YnLCAnI0ZEOTg0MycsICcjOUFCRTI5J10pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudCBleHRlbmRzIERhdGFXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgndmVnYScpIHZlZ2EhOiBFbGVtZW50UmVmO1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9uc0NvcHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zIHwgbnVsbD4obnVsbCk7XG4gIHZpZXc/OiBWaWV3O1xuICB0cmlnZ2VyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHZlZ2FMaXRlU3BlYyQ6IE9ic2VydmFibGU8VG9wTGV2ZWxTcGVjPjtcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIGF0dHJpYnV0ZVR5cGVzJDogT2JzZXJ2YWJsZTx7XG4gICAgb3JkaW5hdGU6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBmaWVsZFR5cGU6IGFueTsgbmFtZTogc3RyaW5nIH07XG4gICAgYWJzY2lzc2E6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBmaWVsZFR5cGU6IGFueTsgbmFtZTogc3RyaW5nIH07XG4gICAgZ3JvdXBCeTogeyB2ZWdhVHlwZT86IFZlZ2FUeXBlOyBmaWVsZFR5cGU/OiBhbnk7IG5hbWU6IHN0cmluZyB9O1xuICB9PjtcbiAgYWdncmVnYXRlZFZhbHVlcyQ6IE9ic2VydmFibGU8eyBkYXRhOiBhbnk7IG9wZXJhdGlvbjogYW55IH0+O1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hUO1xuICBHcmFwaFR5cGUgPSBHcmFwaFR5cGU7XG4gIE9wZXJhdGlvbiA9IE9wZXJhdGlvbjtcbiAgaXNDaGFydFZhbGlkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdHlwZU9wdGlvbnM6IHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcbiAgb3BlcmF0aW9ucyQ6IE9ic2VydmFibGU8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXT47XG4gIGFic2Npc3NhQXR0cmlidXRlcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+O1xuICBjbGFzc2VzOiBDbGFzc1tdID0gW107XG4gIGZpZWxkczogRmllbGRbXSA9IFtdO1xuICBvcmRpbmF0ZUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgdHJpZ2dlck9yZGluYXRlQXR0cmlidXRlcyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb3B5QWJzY2lzc2FGaWVsZD86IEZpZWxkO1xuICBjb3B5T3JkaW5hdGVGaWVsZD86IEZpZWxkO1xuICBzY2hlbWVzOiB7IGlkOiBzdHJpbmcgfVtdID0gW107XG4gIG5vRGF0YSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNvcnRBY3RpdmU/ID0gJ25hbWUnO1xuICBzb3J0RGlyZWN0aW9uPyA9ICdhc2MnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUHJ5STE4blNlcnZpY2UsXG4gICAgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGlvblNlcnZpY2U6IFByeUFnZ3JlZ2F0aW9uU2VydmljZVxuICApIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuICAgIHRoaXMuc2NoZW1lcyA9IE9iamVjdC52YWx1ZXMoVmVnYUNvbG9yVHlwZSkubWFwKChpZCkgPT4gKHsgaWQgfSkpO1xuICAgIHRoaXMudHlwZU9wdGlvbnMgPSBPYmplY3QudmFsdWVzKEdyYXBoVHlwZSlcbiAgICAgIC5tYXAoKHYpID0+ICh7XG4gICAgICAgIGlkOiB2LFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LmdyYXBoVHlwZS4nICsgdilcbiAgICAgIH0pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsKSk7XG5cbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG1hbmlmZXN0KSA9PlxuICAgICAgICAgIG1lcmdlRGVlcChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZ3JhcGg6IHsgdHlwZTogR3JhcGhUeXBlLkJBUiwgdG9vbHRpcDogdHJ1ZSwgbGVnZW5kOiBmYWxzZSB9LFxuICAgICAgICAgICAgICBhYnNjaXNzYTogeyBrZWVwMDogdHJ1ZSB9LFxuICAgICAgICAgICAgICBvcmRpbmF0ZTogeyBrZWVwMDogdHJ1ZSB9XG4gICAgICAgICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gICAgICAgICAgICAobWFuaWZlc3Qub3B0aW9ucyA/PyB7fSkgYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9uc1xuICAgICAgICAgICkgYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9uc1xuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5vcHRpb25zJC5waXBlKGZpbHRlcigob3B0KSA9PiAhIW9wdCkpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKSk7XG4gICAgfSk7XG4gICAgdGhpcy5maWVsZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKTtcbiAgICB0aGlzLmNsYXNzZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3Nlcyk7XG5cbiAgICB0aGlzLm9wZXJhdGlvbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRTZXQkLCB0aGlzLmNsYXNzZXMkLCB0aGlzLmZpZWxkcyRdKS5waXBlKFxuICAgICAgbWFwKChbcnMsIGNsYXNzZXMsIGZpZWxkc10pID0+XG4gICAgICAgIGNsYXNzZXNcbiAgICAgICAgICAuZmlsdGVyKChjbGF6eikgPT4gT2JqZWN0LmtleXMocnMuaXRlbXMpLmluY2x1ZGVzKGNsYXp6LmlkKSlcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgICAubWFwKChhdHRycykgPT5cbiAgICAgICAgICAgIGF0dHJzLmZpbHRlcigoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiAhIWZpZWxkICYmIFtGaWVsZFR5cGUuSU5URUdFUiwgRmllbGRUeXBlLkRFQ0lNQUwsIEZpZWxkVHlwZS5MT05HXS5pbmNsdWRlcyhmaWVsZC50eXBlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICAgICAgLmZpbHRlcigoYXR0cikgPT4gISFhdHRyKVxuICAgICAgKSxcbiAgICAgIG1hcCgoYXR0cmlidXRlcykgPT5cbiAgICAgICAgKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCA/IE9iamVjdC52YWx1ZXMoT3BlcmF0aW9uKSA6IFtPcGVyYXRpb24uQ09VTlQsIE9wZXJhdGlvbi5ESVNUSU5DVCwgT3BlcmF0aW9uLk5PTkVdKVxuICAgICAgICAgIC5tYXAoKHYpID0+ICh7XG4gICAgICAgICAgICBpZDogdixcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQub3BlcmF0aW9uLicgKyB2KVxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5maWVsZHMkLnN1YnNjcmliZSgoZmllbGRzKSA9PiAodGhpcy5maWVsZHMgPSBmaWVsZHMpKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmNsYXNzZXMkLnN1YnNjcmliZSgoY2xhc3NlcykgPT4gKHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMpKSk7XG5cbiAgICB0aGlzLmFic2Npc3NhQXR0cmlidXRlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmNsYXNzZXMkLCB0aGlzLmZpZWxkcyQsIHRoaXMucmVzdWx0U2V0JCwgdGhpcy5vcHRpb25zQ29weSRdKS5waXBlKFxuICAgICAgbWFwKChbY2xhc3NlcywgZmllbGRzLCBycywgb3B0aW9uQ29weV0pID0+XG4gICAgICAgIGNsYXNzZXNcbiAgICAgICAgICAuZmlsdGVyKChjbGF6eikgPT4gT2JqZWN0LmtleXMocnMuaXRlbXMpLmluY2x1ZGVzKGNsYXp6LmlkKSlcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgICAubWFwKChhdHRycykgPT5cbiAgICAgICAgICAgIGF0dHJzLmZpbHRlcigoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgISFmaWVsZCAmJlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcgJiZcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuU1RSSU5HICYmXG4gICAgICAgICAgICAgICAgKG9wdGlvbkNvcHk/LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5ISVNUT0dSQU0gfHwgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLktFWVdPUkQpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLm9yZGluYXRlQXR0cmlidXRlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY2xhc3NlcyQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLnRyaWdnZXJPcmRpbmF0ZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2NsYXNzZXMsIGZpZWxkcywgcnNdKSA9PlxuICAgICAgICBjbGFzc2VzXG4gICAgICAgICAgLmZpbHRlcigoY2xhenopID0+IE9iamVjdC5rZXlzKHJzLml0ZW1zKS5pbmNsdWRlcyhjbGF6ei5pZCkpXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpXG4gICAgICAgICAgLm1hcCgoYXR0cnMpID0+XG4gICAgICAgICAgICBhdHRycy5maWx0ZXIoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiZcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uTUFYLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk1JTixcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5TVU0sXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uUTEsXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uUTMsXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uQVZFUkFHRSxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5NRURJQU4sXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uTk9ORVxuICAgICAgICAgICAgICAgIF0uaW5jbHVkZXModGhpcy5vcHRpb25zQ29weSQudmFsdWUub3JkaW5hdGUub3BlcmF0aW9uKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgISFmaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgW0ZpZWxkVHlwZS5JTlRFR0VSLCBGaWVsZFR5cGUuSU5TVEFOVCwgRmllbGRUeXBlLkxPTkcsIEZpZWxkVHlwZS5ERUNJTUFMXS5pbmNsdWRlcyhmaWVsZC50eXBlKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuICEhZmllbGQgJiYgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlJBVyAmJiBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuU1RSSU5HO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5pc0NoYXJ0VmFsaWQkID0gY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zJCwgdGhpcy5hYnNjaXNzYUF0dHJpYnV0ZXMkLCB0aGlzLm9yZGluYXRlQXR0cmlidXRlcyRdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgYWJzY2lzc2FBdHRycywgb3JkaW5hdGVBdHRyc10pID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAhIW9wdGlvbnMuYWJzY2lzc2EuYXR0cmlidXRlICYmXG4gICAgICAgICAgYWJzY2lzc2FBdHRycy5tYXAoKGF0dHIpID0+IGF0dHIuaWQpLmluY2x1ZGVzKG9wdGlvbnMuYWJzY2lzc2EuYXR0cmlidXRlKSAmJlxuICAgICAgICAgIChvcHRpb25zLm9yZGluYXRlLmF0dHJpYnV0ZVxuICAgICAgICAgICAgPyBvcmRpbmF0ZUF0dHJzLm1hcCgoYXR0cikgPT4gYXR0ci5pZCkuaW5jbHVkZXMob3B0aW9ucy5vcmRpbmF0ZS5hdHRyaWJ1dGUpXG4gICAgICAgICAgICA6IHRydWUpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmF0dHJpYnV0ZVR5cGVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMuZmllbGRzJCwgdGhpcy5jbGFzc2VzJF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtvcHRpb25zLCBmaWVsZHMsIGNsYXNzZXNdKSA9PiAhIW9wdGlvbnMuYWJzY2lzc2EgJiYgISFvcHRpb25zLm9yZGluYXRlKSxcbiAgICAgIG1hcCgoW29wdGlvbnMsIGZpZWxkcywgY2xhc3Nlc10pID0+IHtcbiAgICAgICAgY29uc3QgYWJzY2lzc2EgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucy5hYnNjaXNzYS5hdHRyaWJ1dGUpKVxuICAgICAgICAgIC5maW5kKChhdHRyKSA9PiAhIWF0dHIpO1xuICAgICAgICBjb25zdCBvcmRpbmF0ZSA9IGNsYXNzZXNcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLmlkID09PSBvcHRpb25zLm9yZGluYXRlLmF0dHJpYnV0ZSkpXG4gICAgICAgICAgLmZpbmQoKGF0dHIpID0+ICEhYXR0cik7XG4gICAgICAgIGNvbnN0IGdyb3VwQnkgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucy5ncm91cEJ5Py5hdHRyaWJ1dGUpKVxuICAgICAgICAgIC5maW5kKChhdHRyKSA9PiAhIWF0dHIpO1xuICAgICAgICBjb25zdCBhYnNjaXNzYUZpZWxkVHlwZSA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGFic2Npc3NhPy5maWVsZCk/LnR5cGUgPz8gRmllbGRUeXBlLlNUUklORztcbiAgICAgICAgY29uc3Qgb3JkaW5hdGVGaWVsZFR5cGUgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBvcmRpbmF0ZT8uZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgIGNvbnN0IGdyb3VwQnlGaWVsZFR5cGUgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBncm91cEJ5Py5maWVsZCk/LnR5cGUgPz8gRmllbGRUeXBlLlNUUklORztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgICAgZmllbGRUeXBlOiBhYnNjaXNzYUZpZWxkVHlwZSxcbiAgICAgICAgICAgIHZlZ2FUeXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoYWJzY2lzc2FGaWVsZFR5cGUsIGFic2Npc3NhPy5uYW1lID8/ICcnKSxcbiAgICAgICAgICAgIG5hbWU6IGFic2Npc3NhPy5uYW1lID8/ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcmRpbmF0ZToge1xuICAgICAgICAgICAgZmllbGRUeXBlOiBvcmRpbmF0ZUZpZWxkVHlwZSxcbiAgICAgICAgICAgIHZlZ2FUeXBlOlxuICAgICAgICAgICAgICBvcHRpb25zLm9yZGluYXRlLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uLkNPVU5UIHx8IG9wdGlvbnMub3JkaW5hdGUub3BlcmF0aW9uID09PSBPcGVyYXRpb24uRElTVElOQ1RcbiAgICAgICAgICAgICAgICA/IFZlZ2FUeXBlLlFVQU5USVRBVElWRVxuICAgICAgICAgICAgICAgIDogdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKG9yZGluYXRlRmllbGRUeXBlLCBvcmRpbmF0ZT8ubmFtZSA/PyAnJyksXG4gICAgICAgICAgICBuYW1lOiBvcmRpbmF0ZT8ubmFtZSA/PyAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgICAgZmllbGRUeXBlOiBncm91cEJ5RmllbGRUeXBlLFxuICAgICAgICAgICAgdmVnYVR5cGU6IHRoaXMudHJhbnNsYXRlVG9WZWdhVHlwZShncm91cEJ5RmllbGRUeXBlLCBncm91cEJ5Py5uYW1lKSxcbiAgICAgICAgICAgIG5hbWU6IGdyb3VwQnk/Lm5hbWUgPz8gJydcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0ZWRWYWx1ZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRhc291cmNlSWRzJCwgdGhpcy5vcHRpb25zJCwgdGhpcy5yZXN1bHRTZXQkXSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoW2RhdGFzb3VyY2VzLCBvcHRpb25zXSkgPT4gdGhpcy5hZ2dyZWdhdGlvblNlcnZpY2UuYWdncmVnYXRlKGRhdGFzb3VyY2VzLCBvcHRpb25zKSksXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMub3B0aW9ucyQpLFxuICAgICAgbWFwKChbYWdncmVnYXRlLCBvcHRpb25zXSkgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChhZ2dyZWdhdGUudmFsdWVzLmxlbmd0aCA+IDAgJiYgIWFnZ3JlZ2F0ZS52YWx1ZXNbMF0uZ3JvdXBCeSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcGVyYXRpb246IGFnZ3JlZ2F0ZS5vcGVyYXRpb24sXG4gICAgICAgICAgICBkYXRhOiBhZ2dyZWdhdGUudmFsdWVzLm1hcCgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBzZXJpZXM6IG9wdGlvbnMub3JkaW5hdGUubGFiZWwgfSkpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSAoXG4gICAgICAgICAgYWdncmVnYXRlLnZhbHVlcyBhcyB7XG4gICAgICAgICAgICBrZXk6IFZhbHVlVHlwZTtcbiAgICAgICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgICAga2V5OiBWYWx1ZVR5cGU7XG4gICAgICAgICAgICAgIHZhbHVlOiBWYWx1ZVR5cGU7XG4gICAgICAgICAgICB9W107XG4gICAgICAgICAgfVtdXG4gICAgICAgIClcbiAgICAgICAgICAubWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgIHZhbHVlLmdyb3VwQnkubWFwKChncm91cEJ5KSA9PiAoe1xuICAgICAgICAgICAgICBrZXk6IHZhbHVlLmtleSxcbiAgICAgICAgICAgICAgc2VyaWVzOiBncm91cEJ5LmtleSxcbiAgICAgICAgICAgICAgdmFsdWU6IGdyb3VwQnkudmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKTtcbiAgICAgICAgcmV0dXJuIHsgb3BlcmF0aW9uOiBhZ2dyZWdhdGUub3BlcmF0aW9uLCBkYXRhOiBmbGF0dGVuZWQgfTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubm9EYXRhJCA9IHRoaXMuYWdncmVnYXRlZFZhbHVlcyQucGlwZShtYXAoKHsgb3BlcmF0aW9uLCBkYXRhIH0pID0+IGRhdGEubGVuZ3RoID09PSAwKSk7XG5cbiAgICB0aGlzLnZlZ2FMaXRlU3BlYyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmF0dHJpYnV0ZVR5cGVzJCxcbiAgICAgIHRoaXMuYWdncmVnYXRlZFZhbHVlcyQsXG4gICAgICB0aGlzLndpZGdldFNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLFxuICAgICAgdGhpcy5kaXNwbGF5SGVhZGVyJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCB0eXBlcywgdmFsdWVzLCBzaXplLCBkaXNwbGF5XSkgPT4ge1xuICAgICAgICBjb25zdCBpc0NpcmN1bGFyID0gW0dyYXBoVHlwZS5DSVJDVUxBUiwgR3JhcGhUeXBlLkRPTlVUXS5pbmNsdWRlcyhvcHRpb25zLmdyYXBoLnR5cGUpO1xuICAgICAgICBjb25zdCBzdGFja2VkID0gb3B0aW9ucy5ncmFwaC50eXBlLnN0YXJ0c1dpdGgoJ2JhcicpID8gIW9wdGlvbnMuZ3JhcGguc3RhY2tlZCA6IG9wdGlvbnMuZ3JhcGguc3RhY2tlZDtcbiAgICAgICAgY29uc3QgbGVnZW5kVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBvcHRpb25zLmdyb3VwQnkgPyB0eXBlcy5ncm91cEJ5Lm5hbWUgPz8gJycgOiAnQHByeS53aWRnZXQuY2hhcnQubGVnZW5kTGFiZWwnXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBtZXJnZURlZXAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgJHNjaGVtYTogJ2h0dHBzOi8vdmVnYS5naXRodWIuaW8vc2NoZW1hL3ZlZ2EtbGl0ZS92NS5qc29uJyxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldFRpdGxlKG9wdGlvbnMpLFxuICAgICAgICAgICAgd2lkdGg6ICdjb250YWluZXInLFxuICAgICAgICAgICAgaGVpZ2h0OiAoc2l6ZS5oZWlnaHQgPz8gMTAwKSAtIChkaXNwbGF5ID8gV0lER0VUX0hFQURFUl9IRUlHSFQgOiAwKSxcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgICAgICAgYXV0b3NpemU6IHsgdHlwZTogJ2ZpdCcsIGNvbnRhaW5zOiAncGFkZGluZycgfSxcbiAgICAgICAgICAgIGRhdGE6IHsgdmFsdWVzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlcy5kYXRhKSkgfSxcbiAgICAgICAgICAgIGxheWVyOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBvcHRpb25zLmdyYXBoLnR5cGUuc3BsaXQoJy0nKVswXSBhcyAnYXJjJyB8ICdsaW5lJyB8ICdwb2ludCcgfCAnYmFyJyB8ICdhcmVhJyxcbiAgICAgICAgICAgICAgICAgIHBvaW50OiBvcHRpb25zLmdyYXBoLnR5cGUuaW5kZXhPZigncG9pbnQnKSA+PSAwLFxuICAgICAgICAgICAgICAgICAgbGluZTogb3B0aW9ucy5ncmFwaC50eXBlLmluZGV4T2YoJ2xpbmUnKSA+PSAwLFxuICAgICAgICAgICAgICAgICAgaW5uZXJSYWRpdXM6IG9wdGlvbnMuZ3JhcGguZG9udXRTaXplID8/IDMwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbmNvZGluZzoge1xuICAgICAgICAgICAgICAgICAgeDogIWlzQ2lyY3VsYXJcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZVVuaXQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSBWZWdhVHlwZS5URU1QT1JBTCAmJiBvcHRpb25zLmFic2Npc3NhLmxpbWl0Py5pc1RpbWVMaW1pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5hYnNjaXNzYS5saW1pdC5pbnRlcnZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmluOiBvcHRpb25zLmdyYXBoLnR5cGUuaW5kZXhPZignaGlzdG9ncmFtJykgPj0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3JtYXQ6IHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSBWZWdhVHlwZS5URU1QT1JBTCA/ICclWS0lQi0lZFQlSDolTTolUycgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5XaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQubWluVGljayh0eXBlcy5hYnNjaXNzYS5maWVsZFR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbEV4cHI6IGBoZWlnaHQgPCAzMDAgPyAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSBWZWdhVHlwZS5URU1QT1JBTFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInRpbWVGb3JtYXQoZGF0dW0udmFsdWUsICclWS0lQi0lZFQlSDolTTolUycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RydW5jYXRlKGRhdHVtLnZhbHVlLCAxMCknXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSBWZWdhVHlwZS5URU1QT1JBTFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInRpbWVGb3JtYXQoZGF0dW0udmFsdWUsICclWS0lQi0lZFQlSDolTTolUycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RhdHVtLnZhbHVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgZmFsc2UgdmFsdWUgaGVyZSBzbyB0aGF0IHZlZ2EgdW5kZXJzdGFuZHMgcHJvcGVybHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgemVybzogISFvcHRpb25zLmFic2Npc3NhLmtlZXAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vdHlwZTogV2lkZ2V0Q2hhcnRDb21wb25lbnQuaXNUaW1lVW5pdFVUQyh2YXJpYWJsZXNbMF0pID8gJ3V0YycgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgeTogIWlzQ2lyY3VsYXJcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBheGlzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLldpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudC5taW5UaWNrKHR5cGVzLm9yZGluYXRlLmZpZWxkVHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuc2V0VGlja0NvdW50KHZhbHVlcy5kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHplcm86IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlID09PSBWZWdhVHlwZS5RVUFOVElUQVRJVkUgPyAhIW9wdGlvbnMub3JkaW5hdGUua2VlcDAgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihzdGFja2VkID8geyBzdGFjazogdHJ1ZSB9IDoge30pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRoZXRhOiBpc0NpcmN1bGFyID8geyBmaWVsZDogJ3ZhbHVlJywgdHlwZTogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsZWdlbmRUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICFpc0NpcmN1bGFyID8gJ3NlcmllcycgOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kOiBvcHRpb25zLmdyYXBoLmxlZ2VuZCxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IG9wdGlvbnMuZ3JhcGgubGVnZW5kID8geyBzY2hlbWU6IG9wdGlvbnMuZ3JvdXBCeT8uY29sb3IgPz8gdGhpcy5zY2hlbWVzWzBdLmlkIH0gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB4T2Zmc2V0OiBzdGFja2VkICYmIG9wdGlvbnMuZ3JvdXBCeSA/IHsgZmllbGQ6ICdzZXJpZXMnIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBvcHRpb25zLmdyYXBoLnRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmdyb3VwQnlcbiAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4odHlwZXMuYWJzY2lzc2EudmVnYVR5cGUgPT09ICd0ZW1wb3JhbCcgPyB7IGZvcm1hdDogJyVZLSVCLSVkVCVIOiVNOiVTJyB9IDoge30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICd2YWx1ZScsIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLCB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdzZXJpZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsZWdlbmRUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbm9taW5hbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLmFic2Npc3NhLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gJ3RlbXBvcmFsJyA/IHsgZm9ybWF0OiAnJVktJUItJWRUJUg6JU06JVMnIH0gOiB7fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ3ZhbHVlJywgdHlwZTogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUsIHRpdGxlOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjb25maWc6IGZvbnRDb25maWcoJ1VidW50dSwgc2Fucy1zZXJpZicpXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgb3B0aW9ucy5hZGRpdGlvbmFsU3BlY1xuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnZlZ2FMaXRlU3BlYyQsIHRoaXMudHJpZ2dlciRdKS5zdWJzY3JpYmUoKFtzcGVjLCBfXSkgPT4ge1xuICAgICAgICBpZiAodGhpcy52ZWdhKSB7XG4gICAgICAgICAgdGhpcy52aWV3Py5maW5hbGl6ZSgpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKHNwZWMpO1xuICAgICAgICAgIGVtYmVkKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNwZWMpKSwge1xuICAgICAgICAgICAgYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgICByZW5kZXJlcjogJ2NhbnZhcycsXG4gICAgICAgICAgICBmb3JtYXRMb2NhbGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50T2JqZWN0KCdAcHJ5LndpZGdldC5jaGFydC5udW1iZXJMb2NhbGUnKSBhcyBhbnksXG4gICAgICAgICAgICB0aW1lRm9ybWF0TG9jYWxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudE9iamVjdCgnQHByeS53aWRnZXQuY2hhcnQudGltZUZvcm1hdExvY2FsZScpIGFzIGFueVxuICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiAodGhpcy52aWV3ID0gcmVzdWx0LnZpZXcpKVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBkaXNwbGF5IGNoYXJ0JywgZXJyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXIkLm5leHQoKSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlciQubmV4dCgpO1xuICB9XG5cbiAgdHJhbnNsYXRlVG9WZWdhVHlwZSh0eXBlPzogRmllbGRUeXBlLCBuYW1lPzogc3RyaW5nKTogVmVnYVR5cGUge1xuICAgIGxldCBpZFJlZ2V4ID0gbmV3IFJlZ0V4cCgvX2lkfGlkX3xfSUR8SURffF9JZHxJZF8vLCAnZycpO1xuICAgIGlmIChpZFJlZ2V4LnRlc3QobmFtZSA/PyAnLS0tLS0tLScpKSB7XG4gICAgICByZXR1cm4gVmVnYVR5cGUuT1JESU5BTDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRmllbGRUeXBlLkRFQ0lNQUw6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlRFR0VSOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuTE9ORzpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLlFVQU5USVRBVElWRTtcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOU1RBTlQ6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5URU1QT1JBTDtcbiAgICAgIGNhc2UgRmllbGRUeXBlLktFWVdPUkQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5TVFJJTkc6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5OT01JTkFMO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLk5PTUlOQUw7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1pblRpY2sodHlwZTogRmllbGRUeXBlKTogeyB0aWNrTWluU3RlcDogbnVtYmVyIH0gfCB7fSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlRFR0VSOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuTE9ORzpcbiAgICAgICAgcmV0dXJuIHsgdGlja01pblN0ZXA6IDEgfTtcbiAgICAgIGNhc2UgRmllbGRUeXBlLkRFQ0lNQUw6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlNUQU5UOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuS0VZV09SRDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLlNUUklORzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLmdldFZhbHVlKCkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3BlblNldHRpbmdzKCkge1xuICAgICh0aGlzLm9wZW4kIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGl0bGUob3B0aW9uczogQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmdyYXBoPy50aXRsZSA/PyAob3B0aW9ucy5hYnNjaXNzYS5sYWJlbCA/PyAna2V5JykgKyAnIC8gJyArIChvcHRpb25zLm9yZGluYXRlLmxhYmVsID8/ICd2YWx1ZScpO1xuICB9XG5cbiAgY2hhbmdlQ2hhcnRUaXRsZSgkZXZlbnQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIHRpdGxlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVHlwZSgkZXZlbnQ6IEdyYXBoVHlwZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIHR5cGU6ICRldmVudCB9XG4gICAgICB9KTtcbiAgICAgIGlmIChbR3JhcGhUeXBlLkNJUkNVTEFSLCBHcmFwaFR5cGUuRE9OVVRdLmluY2x1ZGVzKCRldmVudCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeTogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKFtHcmFwaFR5cGUuSElTVE9HUkFNXS5pbmNsdWRlcygkZXZlbnQpKSB7XG4gICAgICAgIHRoaXMubGltaXRFbGVtZW50cyh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VEb251dFNpemUoJGV2ZW50OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCBkb251dFNpemU6ICRldmVudCB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VPcGVyYXRpb24oJGV2ZW50OiBPcGVyYXRpb24pIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBvcGVyYXRpb246ICRldmVudCB9XG4gICAgICB9KTtcbiAgICAgIGlmICgkZXZlbnQgPT09IE9wZXJhdGlvbi5DT1VOVCB8fCAkZXZlbnQgPT09IE9wZXJhdGlvbi5ESVNUSU5DVCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBvcmRpbmF0ZToge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5vcGVyYXRpb24uJyArICRldmVudCksXG4gICAgICAgICAgICBhdHRyaWJ1dGU6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlck9yZGluYXRlQXR0cmlidXRlcyQubmV4dCgpLCAxMCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQWJzY2lzc2EoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoJGV2ZW50ICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgYXR0cmlidXRlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5jbGFzc2VzXG4gICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gJGV2ZW50KTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsYWJlbDogYXR0cj8ubmFtZSA/PyAnYXR0ci1ub3QtZm91bmQnIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvcHlBYnNjaXNzYUZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGF0dHI/LmZpZWxkID09PSBmaWVsZC5pZCk7XG5cbiAgICAgIHRoaXMubGltaXRFbGVtZW50cyghIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYS5saW1pdCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQWJzY2lzc2FMYWJlbCgkZXZlbnQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGxhYmVsOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3JkaW5hdGUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50ICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgYXR0cmlidXRlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5jbGFzc2VzXG4gICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gJGV2ZW50KTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBsYWJlbDogYXR0cj8ubmFtZSA/PyAnYXR0ci1ub3QtZm91bmQnIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvcHlPcmRpbmF0ZUZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGF0dHI/LmZpZWxkID09PSBmaWVsZC5pZCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3JkaW5hdGVMYWJlbCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGxhYmVsOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlS2VlcDBBYnNjaXNzYSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGtlZXAwOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlS2VlcDBPcmRpbmF0ZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGtlZXAwOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGltaXRFbGVtZW50cygkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5jb3B5QWJzY2lzc2FGaWVsZD8udHlwZSAhPT0gRmllbGRUeXBlLklOU1RBTlQgJiZcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2E/LmxpbWl0ICYmXG4gICAgICAgICAgJ2F0JyBpbiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2E/LmxpbWl0XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsXG4gICAgICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAgICAgYXQ6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYT8ubGltaXQ/LmF0ID8/IDMsXG4gICAgICAgICAgICAgICAgb3RoZXJzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcmRlcjogJ2FzYycsXG4gICAgICAgICAgICAgICAgaXNUaW1lTGltaXQ6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsaW1pdDogeyBpbnRlcnZhbDogJ3NlY29uZCcsIGlzVGltZUxpbWl0OiB0cnVlIH0gfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGxpbWl0OiB1bmRlZmluZWQgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VMaW1pdCgkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBhdDogJGV2ZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VMaW1pdE90aGVycygkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBvdGhlcnM6ICRldmVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXRPcmRlcigkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBvcmRlcjogJGV2ZW50ID8gJ2FzYycgOiAnZGVzYydcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRpbWVMaW1pdCgkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQuaXNUaW1lTGltaXRcbiAgICApIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBpbnRlcnZhbDogJGV2ZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVMZWdlbmQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JhcGgsIGxlZ2VuZDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVRvb2x0aXAoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0b29sdGlwOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlR3JvdXBCeSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBncm91cEJ5OiB7IGF0dHJpYnV0ZTogdGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lmdyb3VwQnk/LmF0dHJpYnV0ZSA/PyAnJywgY29sb3I6IHRoaXMuc2NoZW1lc1swXS5pZCB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeTogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUdyb3VwQnkoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodHlwZW9mICRldmVudCA9PT0gJ3N0cmluZycgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JvdXBCeSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lmdyb3VwQnksXG4gICAgICAgICAgYXR0cmlidXRlOiAkZXZlbnRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQ29sb3JTY2hlbWUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JvdXBCeSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgYXR0cmlidXRlOiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5ncm91cEJ5Py5hdHRyaWJ1dGUsXG4gICAgICAgICAgY29sb3I6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRUaWNrQ291bnQoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLmRhdGEubWFwKCh2YWw6IGFueSkgPT4gdmFsLnZhbHVlKSkgPCAzXG4gICAgICA/IHsgdGlja0NvdW50OiBNYXRoLm1heCguLi5kYXRhLm1hcCgodmFsOiBhbnkpID0+IHZhbC52YWx1ZSkpIH1cbiAgICAgIDoge307XG4gIH1cblxuICBzY2hlbWUoKSB7XG4gICAgcmV0dXJuIHZlZ2Euc2NoZW1lKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5Py5jb2xvciA/PyAnJyk7XG4gIH1cblxuICB0b2dnbGVTdGFja2VkKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLFxuICAgICAgICAgIHN0YWNrZWQ6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSB0b0ltYWdlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlc29sdmUodGhpcy52ZWdhLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnY2FudmFzJylbMF0udG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQtY3NzPjwvcHJ5LXdpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0LWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tY2hhcnRcIiAqbmdJZj1cIm9wdGlvbnNDb3B5JCB8IGFzeW5jIGFzIG9wdGlvbnNDb3B5XCI+XG4gIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgICNoZWFkZXJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgIFtkaXNwbGF5Q291bnRdPVwiZmFsc2VcIlxuICA+XG4gICAgPHByeS1zZXR0aW5nc1xuICAgICAgKHNhdmVUcmlnZ2VyZWQpPVwiZW1pdE1hbmlmZXN0KClcIlxuICAgICAgKGNoYW5nZVRpdGxlKT1cImNoYW5nZVdpZGdldFRpdGxlKCRldmVudClcIlxuICAgICAgW2hlYWRlclByZXNlbnRdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgW29wZW4kXT1cIm9wZW4kXCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIGNsYXNzPVwiby1zZXR0aW5nc1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0LmNoYXJ0LnRpdGxlXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDaGFydFRpdGxlKCRldmVudClcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnRpdGxlXCJcbiAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnNDb3B5XCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfdHlwZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC50eXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUeXBlKCRldmVudClcIlxuICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwidHlwZU9wdGlvbnNcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZVwiXG4gICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICBpZD1cImNoYXJ0X3R5cGVcIlxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuRE9OVVRcIj5cbiAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC5kb251dFNpemVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlRG9udXRTaXplKCRldmVudClcIlxuICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC5kb251dFNpemVcIlxuICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICBtYXg9XCI1MDBcIlxuICAgICAgICAgID48L3ByeS1yYW5nZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlTGVnZW5kKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmdyYXBoLmxlZ2VuZFwiPlxuICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxlZ2VuZCcgfCBpMThuIH19XG4gICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVRvb2x0aXAoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuZ3JhcGgudG9vbHRpcFwiXG4gICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRvb2x0aXAnIHwgaTE4biB9fVxuICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5ncmFwaC50eXBlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYWJzY2lzc2FcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuYWJzY2lzc2EnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBYnNjaXNzYSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJhYnNjaXNzYUF0dHJpYnV0ZXMkIHwgYXN5bmMgfCBwcnlTb3J0RGF0YSA6IHNvcnRBY3RpdmUgOiBzb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICBpZD1cImFic2Npc3NhXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQuZGF0YUxhYmVsXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUFic2Npc3NhTGFiZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5sYWJlbFwiXG4gICAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBbJ3F1YW50aXRhdGl2ZScsICd0ZW1wb3JhbCddLmluY2x1ZGVzKHRyYW5zbGF0ZVRvVmVnYVR5cGUoY29weUFic2Npc3NhRmllbGQ/LnR5cGUpKSAmJlxuICAgICAgICAgICAgICBvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuRE9OVVQgJiZcbiAgICAgICAgICAgICAgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkNJUkNVTEFSXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlS2VlcDBBYnNjaXNzYSgkZXZlbnQpXCIgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2Eua2VlcDBcIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yaWdpbicgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJsaW1pdEVsZW1lbnRzKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgPT09IEdyYXBoVHlwZS5ISVNUT0dSQU1cIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxpbWl0JyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQuaXNUaW1lTGltaXQgPT09IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQuYXRcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGltaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LmxpbWl0XCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgbWF4PVwiMTBcIlxuICAgICAgICAgICAgICAgID48L3ByeS1yYW5nZT5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuSElTVE9HUkFNXCI+XG4gICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxpbWl0T3RoZXJzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdC5vdGhlcnNcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm90aGVycycgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImRhdGVfbGltaXRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQub3JkZXInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMaW1pdE9yZGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIlt7IGlkOiAnYXNjJyB9LCB7IGlkOiAnZGVzYycgfV1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdC5vcmRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtiYXNlVHJhbnNsYXRlXT1cIidAcHJ5LndpZGdldC5jaGFydC4nXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsVHJhbnNsYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cIm90aGVyX2xpbWl0XCJcbiAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImRhdGVfbGltaXRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQudGltZUludGVydmFsJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUaW1lTGltaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJbXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdzZWNvbmQnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdtaW51dGUnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdob3VyJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnZGF5JyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnd2VlaycgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ21vbnRoJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAncXVhcnRlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3llYXInIH1cbiAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQuaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsVHJhbnNsYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgYmFzZVRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LnRpbWUuXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiZGF0ZV9saW1pdFwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJvcGVyYXRpb25zXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9wZXJhdGlvbi50aXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9wZXJhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJvcGVyYXRpb25zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkub3JkaW5hdGUub3BlcmF0aW9uXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgaWQ9XCJvcGVyYXRpb25zXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkub3JkaW5hdGUub3BlcmF0aW9uICE9PSBPcGVyYXRpb24uQ09VTlRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm9yZGluYXRlXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yZGluYXRlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9yZGluYXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJvcmRpbmF0ZUF0dHJpYnV0ZXMkIHwgYXN5bmMgfCBwcnlTb3J0RGF0YSA6IHNvcnRBY3RpdmUgOiBzb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJvcmRpbmF0ZVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJAcHJ5LndpZGdldC5jaGFydC5kYXRhTGFiZWxcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlT3JkaW5hdGVMYWJlbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLmxhYmVsXCJcbiAgICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0cmFuc2xhdGVUb1ZlZ2FUeXBlKGNvcHlPcmRpbmF0ZUZpZWxkPy50eXBlKSA9PT0gJ3F1YW50aXRhdGl2ZSdcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VLZWVwME9yZGluYXRlKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5rZWVwMFwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQub3JpZ2luJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuRE9OVVQgJiYgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkNJUkNVTEFSXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVHcm91cEJ5KCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5Lmdyb3VwQnlcIlxuICAgICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuZ3JvdXBCeScgfCBpMThuIH19XG4gICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5Lmdyb3VwQnlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNBdHRyXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lmdyb3VwQXR0cicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlR3JvdXBCeSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lmdyb3VwQnkuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJhYnNjaXNzYUF0dHJpYnV0ZXMkIHwgYXN5bmMgfCBwcnlTb3J0RGF0YSA6IHNvcnRBY3RpdmUgOiBzb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zZXJpZXNBdHRyXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3Nlcmllc1NjaGVtZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jb2xvclNjaGVtZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ29sb3JTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncm91cEJ5LmNvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInNjaGVtZXNcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zZXJpZXNTY2hlbWVcIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsVHJhbnNsYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgYmFzZVRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LnNjaGVtZS5cIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwiaWRcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldC0tY2hhcnQtY29sb3ItdGh1bWJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2NoZW1lQ29sb3Igb2Ygc2NoZW1lKClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvLXdpZGdldC0tY2hhcnQtY29sb3ItdGh1bWItaXRlbVwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwic2NoZW1lQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwic2NoZW1lQ29sb3JcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGguc3RhY2tlZFwiIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVN0YWNrZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnN0YWNrZWQnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuICA8ZGl2IGNsYXNzPVwibm8tcmVzdWx0XCIgKm5nSWY9XCIoaXNDaGFydFZhbGlkJCB8IGFzeW5jKSA9PT0gZmFsc2VcIj5cbiAgICA8aW1nXG4gICAgICBjbGFzcz1cIm5vLXJlc3VsdF9fc2VhcmNoXCJcbiAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9zdmdzL3ByeV9yZWNoZXJjaGVfcGFzX2RlX3Jlc3VsdGF0LnN2Z1wiXG4gICAgICBhbHQ9XCJ7eyAnQHByeS53aWRnZXQuY2hhcnQubm9EYXRhJyB8IGkxOG4gfX1cIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAvPlxuICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm5vRGF0YScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpc0NoYXJ0VmFsaWQkIHwgYXN5bmMpICYmICEobm9EYXRhJCB8IGFzeW5jKVwiPlxuICAgIDxkaXYgI3ZlZ2E+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGlzQ2hhcnRWYWxpZCQgfCBhc3luYylcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2Nob29zZS1wYXJhbWV0ZXJzXCI+XG4gICAgICA8cCBjbGFzcz1cImEtcFwiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQuY2hhcnQuY2hvb3NlUGFyYW1ldGVycycgfCBpMThuIH19XG4gICAgICA8L3A+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblNldHRpbmdzKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCIgaWNvblN2Zz1cImNvbnRyb2xcIj48L3ByeS1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQuc2V0dGluZ3MudGl0bGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9EYXRhJCB8IGFzeW5jXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19jaG9vc2UtcGFyYW1ldGVyc1wiPlxuICAgICAgPHAgY2xhc3M9XCJhLXBcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm5vRGF0YScgfCBpMThuIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
@@ -1,6 +1,3 @@
1
1
  export * from './widget-aggregated-chart.module';
2
2
  export * from './component/widget-aggregated-chart.component';
3
- export * from './service/base-aggregation.service';
4
- export * from './service/frontend-aggregation.service';
5
- export * from './service/backend-aggregation.service';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsdUNBQXVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3dpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudC93aWRnZXQtYWdncmVnYXRlZC1jaGFydC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlL2Jhc2UtYWdncmVnYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2UvZnJvbnRlbmQtYWdncmVnYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2UvYmFja2VuZC1hZ2dyZWdhdGlvbi5zZXJ2aWNlJztcbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsK0NBQStDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3dpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudC93aWRnZXQtYWdncmVnYXRlZC1jaGFydC5jb21wb25lbnQnO1xuIl19