@provoly/dashboard 1.3.11 → 1.3.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 (38) hide show
  1. package/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.d.ts +1 -0
  2. package/admin/i18n/en.translations.d.ts +1 -0
  3. package/admin/i18n/fr.translations.d.ts +1 -0
  4. package/components/paginator/paginator.component.d.ts +2 -1
  5. package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +9 -6
  6. package/esm2022/admin/i18n/en.translations.mjs +2 -1
  7. package/esm2022/admin/i18n/fr.translations.mjs +2 -1
  8. package/esm2022/components/data-format/data-format.pipe.mjs +2 -2
  9. package/esm2022/components/paginator/paginator.component.mjs +9 -2
  10. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +3 -3
  11. package/esm2022/import/components/list/import-list.component.mjs +16 -8
  12. package/esm2022/lib/core/store/data-source/data-source.actions.mjs +1 -1
  13. package/esm2022/lib/core/store/data-source/data-source.service.mjs +4 -4
  14. package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +4 -3
  15. package/esm2022/widgets/widget-detail/widget-detail.module.mjs +8 -4
  16. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +1 -1
  17. package/fesm2022/provoly-dashboard-admin.mjs +10 -5
  18. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  19. package/fesm2022/provoly-dashboard-components-data-format.mjs +1 -1
  20. package/fesm2022/provoly-dashboard-components-data-format.mjs.map +1 -1
  21. package/fesm2022/provoly-dashboard-components-paginator.mjs +8 -1
  22. package/fesm2022/provoly-dashboard-components-paginator.mjs.map +1 -1
  23. package/fesm2022/provoly-dashboard-dataset.mjs +2 -2
  24. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  25. package/fesm2022/provoly-dashboard-import.mjs +15 -8
  26. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  27. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +10 -5
  28. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs.map +1 -1
  29. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +1 -1
  30. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  31. package/fesm2022/provoly-dashboard.mjs +3 -3
  32. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  33. package/import/components/list/import-list.component.d.ts +5 -3
  34. package/lib/core/store/data-source/data-source.actions.d.ts +4 -4
  35. package/lib/core/store/data-source/data-source.effects.d.ts +2 -2
  36. package/lib/core/store/data-source/data-source.service.d.ts +2 -2
  37. package/package.json +37 -37
  38. package/widgets/widget-detail/widget-detail.module.d.ts +2 -1
@@ -158,11 +158,11 @@ export class PryDatasetDetailComponent extends SubscriptionnerDirective {
158
158
  $event?.stopPropagation();
159
159
  }
160
160
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryDatasetDetailComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }, { token: i2.PryDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
161
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryDatasetDetailComponent, selector: "pry-dataset-detail", inputs: { dataset: "dataset" }, outputs: { goToCatalog: "goToCatalog" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-manifest-layout__toolbox\">\n <button class=\"a-btn a-btn--primary\" (click)=\"goBack()\">{{ '@pry.dataset.returnToList' | i18n }}</button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"refresh()\">\n {{ '@pry.dataset.refresh' | i18n }}\n <pry-icon iconSvg=\"synchro\"></pry-icon>\n </button>\n</div>\n\n<div class=\"o-dataset-layout\">\n <div class=\"o-dataset-layout__content\">\n <div class=\"a-p\">\n <h2 class=\"a-h1\">{{ dataset.name }}</h2>\n </div>\n\n <div class=\"o-dataset-detail\">\n <div class=\"o-dataset-detail__content\">\n <pry-tab-group translationStringBase=\"@pry.dataset.\" (clickedTabIdx)=\"onTabSwitch($event)\">\n <pry-tab [templateRef]=\"information\" name=\"information\"></pry-tab>\n <pry-tab [templateRef]=\"table\" name=\"data\"></pry-tab>\n <pry-tab [templateRef]=\"map\" name=\"map\"></pry-tab>\n <pry-tab [templateRef]=\"datasetVersions\" name=\"versionHistory\"></pry-tab>\n </pry-tab-group>\n </div>\n </div>\n </div>\n @if (isPanelOpen) {\n <div class=\"o-dataset-layout__panel\">\n <div class=\"panel__header u-display-flex -justify-space-between\">\n <h3>{{ '@pry.dataset.information' | i18n }}</h3>\n <button role=\"button\" (click)=\"togglePanel()\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div class=\"panel__content u-display-flex -column\">\n @if (!isEditingVersion) {\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.productionDate' | i18n }}</span>\n <span>{{\n (selectedVersion?.productionDate | date: 'dd-MM-yyyy, HH:mm') ??\n ('@pry.dataset.version.notProvided' | i18n)\n }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.producer' | i18n }}</span>\n <span>{{ selectedVersion?.producer ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</span>\n <div\n class=\"version-information\"\n [innerHTML]=\"\n selectedVersion?.additionalInformation ?? ('@pry.dataset.version.notProvided' | i18n) | mdToHtml\n \"\n ></div>\n </div>\n <button\n *pryAccess=\"{ module: 'admin', page: 'list-dataset', action: 'edit_version' }\"\n role=\"button\"\n class=\"a-btn a-btn--primary u-self-end\"\n (click)=\"editVersion()\"\n >\n {{ '@pry.action.edit' | i18n }}\n </button>\n } @else {\n <pry-dataset-version-form\n [version]=\"selectedVersion\"\n (formValidated)=\"formValidated($event)\"\n ></pry-dataset-version-form>\n }\n </div>\n </div>\n }\n</div>\n\n<ng-template #information>\n <div class=\"u-display-flex -column o-dataset-detail__information\">\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.description' | i18n }}</span>\n <span>{{ dataset.description ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n @if (dataset.activeVersion) {\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.productionDate' | i18n }}</span>\n <span>{{\n (dataset.activeVersion.productionDate | date: 'dd-MM-yyyy, HH:mm') ??\n ('@pry.dataset.version.notProvided' | i18n)\n }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.producer' | i18n }}</span>\n <span>{{ dataset.activeVersion.producer ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</span>\n <div\n class=\"version-information\"\n [innerHTML]=\"\n dataset.activeVersion.additionalInformation ?? ('@pry.dataset.version.notProvided' | i18n) | mdToHtml\n \"\n ></div>\n </div>\n } @else {\n <div class=\"a-p\">\n <p>{{ '@pry.dataset.noActiveVersion' | i18n }}</p>\n </div>\n }\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.tags' | i18n }}</span>\n <div class=\"u-display-flex -wrap\">\n @for (category of dataset.categories; track category.id) {\n <span class=\"a-chip -md\"> {{ category.name }}</span>\n }\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #table>\n <div class=\"dashboard-container\">\n <pry-dashboard [staticDashboard]=\"{ widgets: [widgetManifest['table']] }\"></pry-dashboard>\n </div>\n</ng-template>\n<ng-template #map>\n <div class=\"dashboard-container\">\n <pry-dashboard [staticDashboard]=\"{ widgets: [widgetManifest['map']] }\"></pry-dashboard>\n </div>\n</ng-template>\n<ng-template #datasetVersions>\n <div class=\"dataset-detail__table table-container\">\n <table class=\"a-table\">\n <caption>\n {{\n '@pry.admin.dataset.title' | i18n\n }},\n {{\n '@pry.action.sortableColumnHeader' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th>{{ '@pry.dataset.version.title' | i18n }}</th>\n <th>{{ '@pry.dataset.date' | i18n }}</th>\n <th>{{ '@pry.dataset.status' | i18n }}</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let version of datasetVersions$ | async\"\n (click)=\"togglePanel(version)\"\n [class.-selected]=\"version.id === selectedVersion?.id\"\n >\n <td>\n {{ version.version }}\n <pry-icon *ngIf=\"dataset.activeVersion?.id === version.id\" iconSvg=\"check\" class=\"check\"></pry-icon>\n </td>\n <td>\n <div\n class=\"a-tooltip\"\n [attr.data-tooltip]=\"version.lastModified | sinceDate: { onlyLocale: true }\"\n data-tooltip-position=\"right\"\n >\n {{ version.lastModified | sinceDate: { onlyLocale: true } }}\n </div>\n </td>\n <td>\n {{\n version.id === dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : ('@pry.dataset.version.state.' + version.state | i18n)\n }}\n <div\n *ngIf=\"version.state !== 'DELETING'\"\n class=\"m-info-icon a-tooltip -tooltip-width-md\"\n [attr.data-tooltip]=\"\n '@pry.dataset.tooltip.' + getVersionTooltipContent(version, dataset.activeVersion?.id) | i18n\n \"\n data-tooltip-position=\"right\"\n >\n <span>i</span>\n </div>\n </td>\n <td>\n <ng-container\n *ngIf=\"\n version.state !== 'LOADING' &&\n version.state !== 'INDEXING' &&\n version.state !== 'ERROR' &&\n version.state !== 'DELETING'\n \"\n >\n <ng-container\n *ngIf=\"(canModify$ | async) && (version.state === 'ACTIVE' || version.state === 'INACTIVE')\"\n >\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'list-dataset', action: 'activate' }\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--primary a-btn--icon-text ng-star-inserted\"\n (click)=\"handleButtonAction($event, version)\"\n >\n {{ '@pry.dataset.buttonAction.' + version.state | i18n }}\n </button>\n <ng-container *ngIf=\"version.state === 'ACTIVE' || version.state === 'INACTIVE'\">\n <div\n class=\"m-info-icon a-tooltip -tooltip-width-lg\"\n [attr.data-tooltip]=\"\n (version.state === 'ACTIVE'\n ? '@pry.dataset.tooltip.invalidateButton'\n : '@pry.dataset.tooltip.validateButton'\n ) | i18n\n \"\n data-tooltip-position=\"right\"\n >\n <span>i</span>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </td>\n <td>\n <ng-container *ngIf=\"version.hasWarnings || version.state === 'ERROR'\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary a-btn--icon-text ng-star-inserted\"\n (click)=\"consultErrors($event, version)\"\n >\n {{\n (version.state === 'ERROR' ? '@pry.dataset.buttonAction.ERROR' : '@pry.dataset.buttonAction.WARNING')\n | i18n\n }}\n </button>\n </ng-container>\n </td>\n <td>\n <ng-container\n *ngIf=\"\n (canModify$ | async) &&\n (version.state === 'ACTIVE' || version.state === 'ERROR' || version.state === 'INACTIVE')\n \"\n >\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary a-btn--icon-text ng-star-inserted\"\n (click)=\"askDelete(version, $event)\"\n >\n {{ '@pry.dataset.buttonAction.delete' | i18n }}\n </button>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</ng-template>\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: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i2.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i2.TabGroupComponent, selector: "pry-tab-group", inputs: ["translationStringBase"], outputs: ["clickedTabIdx"] }, { kind: "component", type: i2.TabComponent, selector: "pry-tab", inputs: ["name", "templateRef", "index"] }, { kind: "component", type: i2.DashboardComponent, selector: "pry-dashboard", inputs: ["staticDashboard", "forceModeEdition", "CloseOnDragOut", "displayOptions", "noBackground", "breakpoint"], outputs: ["rowHeight", "rows"] }, { kind: "component", type: i4.PryDatasetVersionFormComponent, selector: "pry-dataset-version-form", inputs: ["version"], outputs: ["formValidated"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i5.MdToHtmlPipe, name: "mdToHtml" }, { kind: "pipe", type: i2.SinceDatePipe, name: "sinceDate" }] }); }
161
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryDatasetDetailComponent, selector: "pry-dataset-detail", inputs: { dataset: "dataset" }, outputs: { goToCatalog: "goToCatalog" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-manifest-layout__toolbox\">\n <button class=\"a-btn a-btn--primary\" (click)=\"goBack()\">{{ '@pry.dataset.returnToList' | i18n }}</button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"refresh()\">\n {{ '@pry.dataset.refresh' | i18n }}\n <pry-icon iconSvg=\"synchro\"></pry-icon>\n </button>\n</div>\n\n<div class=\"o-dataset-layout\">\n <div class=\"o-dataset-layout__content\">\n <div class=\"a-p\">\n <h2 class=\"a-h1\">{{ dataset.name }}</h2>\n </div>\n\n <div class=\"o-dataset-detail\">\n <div class=\"o-dataset-detail__content\">\n <pry-tab-group translationStringBase=\"@pry.dataset.\" (clickedTabIdx)=\"onTabSwitch($event)\">\n <pry-tab [templateRef]=\"information\" name=\"information\"></pry-tab>\n <pry-tab [templateRef]=\"table\" name=\"data\"></pry-tab>\n <pry-tab [templateRef]=\"map\" name=\"map\"></pry-tab>\n <pry-tab [templateRef]=\"datasetVersions\" name=\"versionHistory\"></pry-tab>\n </pry-tab-group>\n </div>\n </div>\n </div>\n @if (isPanelOpen) {\n <div class=\"o-dataset-layout__panel\">\n <div class=\"panel__header u-display-flex -justify-space-between\">\n <h3>{{ '@pry.dataset.information' | i18n }}</h3>\n <button role=\"button\" (click)=\"togglePanel()\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div class=\"panel__content u-display-flex -column\">\n @if (!isEditingVersion) {\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.productionDate' | i18n }}</span>\n <span>{{\n (selectedVersion?.productionDate | date: 'dd-MM-yyyy, HH:mm') ??\n ('@pry.dataset.version.notProvided' | i18n)\n }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.producer' | i18n }}</span>\n <span>{{ selectedVersion?.producer ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</span>\n <div\n class=\"version-information\"\n [innerHTML]=\"\n selectedVersion?.additionalInformation ?? ('@pry.dataset.version.notProvided' | i18n) | mdToHtml\n \"\n ></div>\n </div>\n <button\n *pryAccess=\"{ module: 'admin', page: 'list-dataset', action: 'edit_version' }\"\n role=\"button\"\n class=\"a-btn a-btn--primary u-self-end\"\n (click)=\"editVersion()\"\n >\n {{ '@pry.action.edit' | i18n }}\n </button>\n } @else {\n <pry-dataset-version-form\n [version]=\"selectedVersion\"\n (formValidated)=\"formValidated($event)\"\n ></pry-dataset-version-form>\n }\n </div>\n </div>\n }\n</div>\n\n<ng-template #information>\n <div class=\"u-display-flex -column o-dataset-detail__information\">\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.description' | i18n }}</span>\n <span>{{ dataset.description ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n @if (dataset.activeVersion) {\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.productionDate' | i18n }}</span>\n <span>{{\n (dataset.activeVersion.productionDate | date: 'dd-MM-yyyy, HH:mm') ??\n ('@pry.dataset.version.notProvided' | i18n)\n }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.producer' | i18n }}</span>\n <span>{{ dataset.activeVersion.producer ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</span>\n <div\n class=\"version-information\"\n [innerHTML]=\"\n dataset.activeVersion.additionalInformation ?? ('@pry.dataset.version.notProvided' | i18n) | mdToHtml\n \"\n ></div>\n </div>\n } @else {\n <div class=\"a-p\">\n <p>{{ '@pry.dataset.noActiveVersion' | i18n }}</p>\n </div>\n }\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.tags' | i18n }}</span>\n <div class=\"u-display-flex -wrap\">\n @for (category of dataset.categories; track category.id) {\n <span class=\"a-chip -md\"> {{ category.name }}</span>\n }\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #table>\n <div class=\"dashboard-container\">\n <pry-dashboard [staticDashboard]=\"{ widgets: [widgetManifest['table']] }\"></pry-dashboard>\n </div>\n</ng-template>\n<ng-template #map>\n <div class=\"dashboard-container\">\n <pry-dashboard [staticDashboard]=\"{ widgets: [widgetManifest['map']] }\"></pry-dashboard>\n </div>\n</ng-template>\n<ng-template #datasetVersions>\n <div class=\"dataset-detail__table table-container\">\n <table class=\"a-table\">\n <caption>\n {{\n '@pry.admin.dataset.title' | i18n\n }},\n {{\n '@pry.action.sortableColumnHeader' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th>{{ '@pry.dataset.version.title' | i18n }}</th>\n <th>{{ '@pry.dataset.date' | i18n }}</th>\n <th>{{ '@pry.dataset.status' | i18n }}</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let version of datasetVersions$ | async\"\n (click)=\"togglePanel(version)\"\n [class.-selected]=\"version.id === selectedVersion?.id\"\n >\n <td>\n {{ version.version }}\n <pry-icon *ngIf=\"dataset.activeVersion?.id === version.id\" iconSvg=\"check\" class=\"check\"></pry-icon>\n </td>\n <td>\n <div\n class=\"a-tooltip\"\n [attr.data-tooltip]=\"version.lastModified | sinceDate: { onlyLocale: true }\"\n data-tooltip-position=\"right\"\n >\n {{ version.lastModified | sinceDate: { onlyLocale: true } }}\n </div>\n </td>\n <td>\n {{\n (version.id === dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : '@pry.dataset.version.state.' + version.state\n ) | i18n\n }}\n <div\n *ngIf=\"version.state !== 'DELETING'\"\n class=\"m-info-icon a-tooltip -tooltip-width-md\"\n [attr.data-tooltip]=\"\n '@pry.dataset.tooltip.' + getVersionTooltipContent(version, dataset.activeVersion?.id) | i18n\n \"\n data-tooltip-position=\"right\"\n >\n <span>i</span>\n </div>\n </td>\n <td>\n <ng-container\n *ngIf=\"\n version.state !== 'LOADING' &&\n version.state !== 'INDEXING' &&\n version.state !== 'ERROR' &&\n version.state !== 'DELETING'\n \"\n >\n <ng-container\n *ngIf=\"(canModify$ | async) && (version.state === 'ACTIVE' || version.state === 'INACTIVE')\"\n >\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'list-dataset', action: 'activate' }\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--primary a-btn--icon-text ng-star-inserted\"\n (click)=\"handleButtonAction($event, version)\"\n >\n {{ '@pry.dataset.buttonAction.' + version.state | i18n }}\n </button>\n <ng-container *ngIf=\"version.state === 'ACTIVE' || version.state === 'INACTIVE'\">\n <div\n class=\"m-info-icon a-tooltip -tooltip-width-lg\"\n [attr.data-tooltip]=\"\n (version.state === 'ACTIVE'\n ? '@pry.dataset.tooltip.invalidateButton'\n : '@pry.dataset.tooltip.validateButton'\n ) | i18n\n \"\n data-tooltip-position=\"right\"\n >\n <span>i</span>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </td>\n <td>\n <ng-container *ngIf=\"version.hasWarnings || version.state === 'ERROR'\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary a-btn--icon-text ng-star-inserted\"\n (click)=\"consultErrors($event, version)\"\n >\n {{\n (version.state === 'ERROR' ? '@pry.dataset.buttonAction.ERROR' : '@pry.dataset.buttonAction.WARNING')\n | i18n\n }}\n </button>\n </ng-container>\n </td>\n <td>\n <ng-container\n *ngIf=\"\n (canModify$ | async) &&\n (version.state === 'ACTIVE' || version.state === 'ERROR' || version.state === 'INACTIVE')\n \"\n >\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary a-btn--icon-text ng-star-inserted\"\n (click)=\"askDelete(version, $event)\"\n >\n {{ '@pry.dataset.buttonAction.delete' | i18n }}\n </button>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</ng-template>\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: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i2.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i2.TabGroupComponent, selector: "pry-tab-group", inputs: ["translationStringBase"], outputs: ["clickedTabIdx"] }, { kind: "component", type: i2.TabComponent, selector: "pry-tab", inputs: ["name", "templateRef", "index"] }, { kind: "component", type: i2.DashboardComponent, selector: "pry-dashboard", inputs: ["staticDashboard", "forceModeEdition", "CloseOnDragOut", "displayOptions", "noBackground", "breakpoint"], outputs: ["rowHeight", "rows"] }, { kind: "component", type: i4.PryDatasetVersionFormComponent, selector: "pry-dataset-version-form", inputs: ["version"], outputs: ["formValidated"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i5.MdToHtmlPipe, name: "mdToHtml" }, { kind: "pipe", type: i2.SinceDatePipe, name: "sinceDate" }] }); }
162
162
  }
163
163
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryDatasetDetailComponent, decorators: [{
164
164
  type: Component,
165
- args: [{ selector: 'pry-dataset-detail', template: "<div class=\"o-manifest-layout__toolbox\">\n <button class=\"a-btn a-btn--primary\" (click)=\"goBack()\">{{ '@pry.dataset.returnToList' | i18n }}</button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"refresh()\">\n {{ '@pry.dataset.refresh' | i18n }}\n <pry-icon iconSvg=\"synchro\"></pry-icon>\n </button>\n</div>\n\n<div class=\"o-dataset-layout\">\n <div class=\"o-dataset-layout__content\">\n <div class=\"a-p\">\n <h2 class=\"a-h1\">{{ dataset.name }}</h2>\n </div>\n\n <div class=\"o-dataset-detail\">\n <div class=\"o-dataset-detail__content\">\n <pry-tab-group translationStringBase=\"@pry.dataset.\" (clickedTabIdx)=\"onTabSwitch($event)\">\n <pry-tab [templateRef]=\"information\" name=\"information\"></pry-tab>\n <pry-tab [templateRef]=\"table\" name=\"data\"></pry-tab>\n <pry-tab [templateRef]=\"map\" name=\"map\"></pry-tab>\n <pry-tab [templateRef]=\"datasetVersions\" name=\"versionHistory\"></pry-tab>\n </pry-tab-group>\n </div>\n </div>\n </div>\n @if (isPanelOpen) {\n <div class=\"o-dataset-layout__panel\">\n <div class=\"panel__header u-display-flex -justify-space-between\">\n <h3>{{ '@pry.dataset.information' | i18n }}</h3>\n <button role=\"button\" (click)=\"togglePanel()\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div class=\"panel__content u-display-flex -column\">\n @if (!isEditingVersion) {\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.productionDate' | i18n }}</span>\n <span>{{\n (selectedVersion?.productionDate | date: 'dd-MM-yyyy, HH:mm') ??\n ('@pry.dataset.version.notProvided' | i18n)\n }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.producer' | i18n }}</span>\n <span>{{ selectedVersion?.producer ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</span>\n <div\n class=\"version-information\"\n [innerHTML]=\"\n selectedVersion?.additionalInformation ?? ('@pry.dataset.version.notProvided' | i18n) | mdToHtml\n \"\n ></div>\n </div>\n <button\n *pryAccess=\"{ module: 'admin', page: 'list-dataset', action: 'edit_version' }\"\n role=\"button\"\n class=\"a-btn a-btn--primary u-self-end\"\n (click)=\"editVersion()\"\n >\n {{ '@pry.action.edit' | i18n }}\n </button>\n } @else {\n <pry-dataset-version-form\n [version]=\"selectedVersion\"\n (formValidated)=\"formValidated($event)\"\n ></pry-dataset-version-form>\n }\n </div>\n </div>\n }\n</div>\n\n<ng-template #information>\n <div class=\"u-display-flex -column o-dataset-detail__information\">\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.description' | i18n }}</span>\n <span>{{ dataset.description ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n @if (dataset.activeVersion) {\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.productionDate' | i18n }}</span>\n <span>{{\n (dataset.activeVersion.productionDate | date: 'dd-MM-yyyy, HH:mm') ??\n ('@pry.dataset.version.notProvided' | i18n)\n }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.producer' | i18n }}</span>\n <span>{{ dataset.activeVersion.producer ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</span>\n <div\n class=\"version-information\"\n [innerHTML]=\"\n dataset.activeVersion.additionalInformation ?? ('@pry.dataset.version.notProvided' | i18n) | mdToHtml\n \"\n ></div>\n </div>\n } @else {\n <div class=\"a-p\">\n <p>{{ '@pry.dataset.noActiveVersion' | i18n }}</p>\n </div>\n }\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.tags' | i18n }}</span>\n <div class=\"u-display-flex -wrap\">\n @for (category of dataset.categories; track category.id) {\n <span class=\"a-chip -md\"> {{ category.name }}</span>\n }\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #table>\n <div class=\"dashboard-container\">\n <pry-dashboard [staticDashboard]=\"{ widgets: [widgetManifest['table']] }\"></pry-dashboard>\n </div>\n</ng-template>\n<ng-template #map>\n <div class=\"dashboard-container\">\n <pry-dashboard [staticDashboard]=\"{ widgets: [widgetManifest['map']] }\"></pry-dashboard>\n </div>\n</ng-template>\n<ng-template #datasetVersions>\n <div class=\"dataset-detail__table table-container\">\n <table class=\"a-table\">\n <caption>\n {{\n '@pry.admin.dataset.title' | i18n\n }},\n {{\n '@pry.action.sortableColumnHeader' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th>{{ '@pry.dataset.version.title' | i18n }}</th>\n <th>{{ '@pry.dataset.date' | i18n }}</th>\n <th>{{ '@pry.dataset.status' | i18n }}</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let version of datasetVersions$ | async\"\n (click)=\"togglePanel(version)\"\n [class.-selected]=\"version.id === selectedVersion?.id\"\n >\n <td>\n {{ version.version }}\n <pry-icon *ngIf=\"dataset.activeVersion?.id === version.id\" iconSvg=\"check\" class=\"check\"></pry-icon>\n </td>\n <td>\n <div\n class=\"a-tooltip\"\n [attr.data-tooltip]=\"version.lastModified | sinceDate: { onlyLocale: true }\"\n data-tooltip-position=\"right\"\n >\n {{ version.lastModified | sinceDate: { onlyLocale: true } }}\n </div>\n </td>\n <td>\n {{\n version.id === dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : ('@pry.dataset.version.state.' + version.state | i18n)\n }}\n <div\n *ngIf=\"version.state !== 'DELETING'\"\n class=\"m-info-icon a-tooltip -tooltip-width-md\"\n [attr.data-tooltip]=\"\n '@pry.dataset.tooltip.' + getVersionTooltipContent(version, dataset.activeVersion?.id) | i18n\n \"\n data-tooltip-position=\"right\"\n >\n <span>i</span>\n </div>\n </td>\n <td>\n <ng-container\n *ngIf=\"\n version.state !== 'LOADING' &&\n version.state !== 'INDEXING' &&\n version.state !== 'ERROR' &&\n version.state !== 'DELETING'\n \"\n >\n <ng-container\n *ngIf=\"(canModify$ | async) && (version.state === 'ACTIVE' || version.state === 'INACTIVE')\"\n >\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'list-dataset', action: 'activate' }\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--primary a-btn--icon-text ng-star-inserted\"\n (click)=\"handleButtonAction($event, version)\"\n >\n {{ '@pry.dataset.buttonAction.' + version.state | i18n }}\n </button>\n <ng-container *ngIf=\"version.state === 'ACTIVE' || version.state === 'INACTIVE'\">\n <div\n class=\"m-info-icon a-tooltip -tooltip-width-lg\"\n [attr.data-tooltip]=\"\n (version.state === 'ACTIVE'\n ? '@pry.dataset.tooltip.invalidateButton'\n : '@pry.dataset.tooltip.validateButton'\n ) | i18n\n \"\n data-tooltip-position=\"right\"\n >\n <span>i</span>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </td>\n <td>\n <ng-container *ngIf=\"version.hasWarnings || version.state === 'ERROR'\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary a-btn--icon-text ng-star-inserted\"\n (click)=\"consultErrors($event, version)\"\n >\n {{\n (version.state === 'ERROR' ? '@pry.dataset.buttonAction.ERROR' : '@pry.dataset.buttonAction.WARNING')\n | i18n\n }}\n </button>\n </ng-container>\n </td>\n <td>\n <ng-container\n *ngIf=\"\n (canModify$ | async) &&\n (version.state === 'ACTIVE' || version.state === 'ERROR' || version.state === 'INACTIVE')\n \"\n >\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary a-btn--icon-text ng-star-inserted\"\n (click)=\"askDelete(version, $event)\"\n >\n {{ '@pry.dataset.buttonAction.delete' | i18n }}\n </button>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</ng-template>\n" }]
165
+ args: [{ selector: 'pry-dataset-detail', template: "<div class=\"o-manifest-layout__toolbox\">\n <button class=\"a-btn a-btn--primary\" (click)=\"goBack()\">{{ '@pry.dataset.returnToList' | i18n }}</button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"refresh()\">\n {{ '@pry.dataset.refresh' | i18n }}\n <pry-icon iconSvg=\"synchro\"></pry-icon>\n </button>\n</div>\n\n<div class=\"o-dataset-layout\">\n <div class=\"o-dataset-layout__content\">\n <div class=\"a-p\">\n <h2 class=\"a-h1\">{{ dataset.name }}</h2>\n </div>\n\n <div class=\"o-dataset-detail\">\n <div class=\"o-dataset-detail__content\">\n <pry-tab-group translationStringBase=\"@pry.dataset.\" (clickedTabIdx)=\"onTabSwitch($event)\">\n <pry-tab [templateRef]=\"information\" name=\"information\"></pry-tab>\n <pry-tab [templateRef]=\"table\" name=\"data\"></pry-tab>\n <pry-tab [templateRef]=\"map\" name=\"map\"></pry-tab>\n <pry-tab [templateRef]=\"datasetVersions\" name=\"versionHistory\"></pry-tab>\n </pry-tab-group>\n </div>\n </div>\n </div>\n @if (isPanelOpen) {\n <div class=\"o-dataset-layout__panel\">\n <div class=\"panel__header u-display-flex -justify-space-between\">\n <h3>{{ '@pry.dataset.information' | i18n }}</h3>\n <button role=\"button\" (click)=\"togglePanel()\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div class=\"panel__content u-display-flex -column\">\n @if (!isEditingVersion) {\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.productionDate' | i18n }}</span>\n <span>{{\n (selectedVersion?.productionDate | date: 'dd-MM-yyyy, HH:mm') ??\n ('@pry.dataset.version.notProvided' | i18n)\n }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.producer' | i18n }}</span>\n <span>{{ selectedVersion?.producer ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</span>\n <div\n class=\"version-information\"\n [innerHTML]=\"\n selectedVersion?.additionalInformation ?? ('@pry.dataset.version.notProvided' | i18n) | mdToHtml\n \"\n ></div>\n </div>\n <button\n *pryAccess=\"{ module: 'admin', page: 'list-dataset', action: 'edit_version' }\"\n role=\"button\"\n class=\"a-btn a-btn--primary u-self-end\"\n (click)=\"editVersion()\"\n >\n {{ '@pry.action.edit' | i18n }}\n </button>\n } @else {\n <pry-dataset-version-form\n [version]=\"selectedVersion\"\n (formValidated)=\"formValidated($event)\"\n ></pry-dataset-version-form>\n }\n </div>\n </div>\n }\n</div>\n\n<ng-template #information>\n <div class=\"u-display-flex -column o-dataset-detail__information\">\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.description' | i18n }}</span>\n <span>{{ dataset.description ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n @if (dataset.activeVersion) {\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.productionDate' | i18n }}</span>\n <span>{{\n (dataset.activeVersion.productionDate | date: 'dd-MM-yyyy, HH:mm') ??\n ('@pry.dataset.version.notProvided' | i18n)\n }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.producer' | i18n }}</span>\n <span>{{ dataset.activeVersion.producer ?? ('@pry.dataset.version.notProvided' | i18n) }}</span>\n </div>\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</span>\n <div\n class=\"version-information\"\n [innerHTML]=\"\n dataset.activeVersion.additionalInformation ?? ('@pry.dataset.version.notProvided' | i18n) | mdToHtml\n \"\n ></div>\n </div>\n } @else {\n <div class=\"a-p\">\n <p>{{ '@pry.dataset.noActiveVersion' | i18n }}</p>\n </div>\n }\n <div>\n <span class=\"a-label\">{{ '@pry.dataset.tags' | i18n }}</span>\n <div class=\"u-display-flex -wrap\">\n @for (category of dataset.categories; track category.id) {\n <span class=\"a-chip -md\"> {{ category.name }}</span>\n }\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #table>\n <div class=\"dashboard-container\">\n <pry-dashboard [staticDashboard]=\"{ widgets: [widgetManifest['table']] }\"></pry-dashboard>\n </div>\n</ng-template>\n<ng-template #map>\n <div class=\"dashboard-container\">\n <pry-dashboard [staticDashboard]=\"{ widgets: [widgetManifest['map']] }\"></pry-dashboard>\n </div>\n</ng-template>\n<ng-template #datasetVersions>\n <div class=\"dataset-detail__table table-container\">\n <table class=\"a-table\">\n <caption>\n {{\n '@pry.admin.dataset.title' | i18n\n }},\n {{\n '@pry.action.sortableColumnHeader' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th>{{ '@pry.dataset.version.title' | i18n }}</th>\n <th>{{ '@pry.dataset.date' | i18n }}</th>\n <th>{{ '@pry.dataset.status' | i18n }}</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let version of datasetVersions$ | async\"\n (click)=\"togglePanel(version)\"\n [class.-selected]=\"version.id === selectedVersion?.id\"\n >\n <td>\n {{ version.version }}\n <pry-icon *ngIf=\"dataset.activeVersion?.id === version.id\" iconSvg=\"check\" class=\"check\"></pry-icon>\n </td>\n <td>\n <div\n class=\"a-tooltip\"\n [attr.data-tooltip]=\"version.lastModified | sinceDate: { onlyLocale: true }\"\n data-tooltip-position=\"right\"\n >\n {{ version.lastModified | sinceDate: { onlyLocale: true } }}\n </div>\n </td>\n <td>\n {{\n (version.id === dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : '@pry.dataset.version.state.' + version.state\n ) | i18n\n }}\n <div\n *ngIf=\"version.state !== 'DELETING'\"\n class=\"m-info-icon a-tooltip -tooltip-width-md\"\n [attr.data-tooltip]=\"\n '@pry.dataset.tooltip.' + getVersionTooltipContent(version, dataset.activeVersion?.id) | i18n\n \"\n data-tooltip-position=\"right\"\n >\n <span>i</span>\n </div>\n </td>\n <td>\n <ng-container\n *ngIf=\"\n version.state !== 'LOADING' &&\n version.state !== 'INDEXING' &&\n version.state !== 'ERROR' &&\n version.state !== 'DELETING'\n \"\n >\n <ng-container\n *ngIf=\"(canModify$ | async) && (version.state === 'ACTIVE' || version.state === 'INACTIVE')\"\n >\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'list-dataset', action: 'activate' }\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--primary a-btn--icon-text ng-star-inserted\"\n (click)=\"handleButtonAction($event, version)\"\n >\n {{ '@pry.dataset.buttonAction.' + version.state | i18n }}\n </button>\n <ng-container *ngIf=\"version.state === 'ACTIVE' || version.state === 'INACTIVE'\">\n <div\n class=\"m-info-icon a-tooltip -tooltip-width-lg\"\n [attr.data-tooltip]=\"\n (version.state === 'ACTIVE'\n ? '@pry.dataset.tooltip.invalidateButton'\n : '@pry.dataset.tooltip.validateButton'\n ) | i18n\n \"\n data-tooltip-position=\"right\"\n >\n <span>i</span>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </td>\n <td>\n <ng-container *ngIf=\"version.hasWarnings || version.state === 'ERROR'\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary a-btn--icon-text ng-star-inserted\"\n (click)=\"consultErrors($event, version)\"\n >\n {{\n (version.state === 'ERROR' ? '@pry.dataset.buttonAction.ERROR' : '@pry.dataset.buttonAction.WARNING')\n | i18n\n }}\n </button>\n </ng-container>\n </td>\n <td>\n <ng-container\n *ngIf=\"\n (canModify$ | async) &&\n (version.state === 'ACTIVE' || version.state === 'ERROR' || version.state === 'INACTIVE')\n \"\n >\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary a-btn--icon-text ng-star-inserted\"\n (click)=\"askDelete(version, $event)\"\n >\n {{ '@pry.dataset.buttonAction.delete' | i18n }}\n </button>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</ng-template>\n" }]
166
166
  }], ctorParameters: () => [{ type: i1.Store }, { type: i2.PryBaseAccess, decorators: [{
167
167
  type: Optional
168
168
  }, {
@@ -173,4 +173,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
173
173
  }], goToCatalog: [{
174
174
  type: Output
175
175
  }] } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNldC1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvZGF0YXNldC9jb21wb25lbnRzL2RhdGFzZXQtZGV0YWlsL2RhdGFzZXQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2RhdGFzZXQvY29tcG9uZW50cy9kYXRhc2V0LWRldGFpbC9kYXRhc2V0LWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakcsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQkFBa0IsRUFHbEIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFHaEIsdUJBQXVCLEVBRXZCLGFBQWEsRUFDYix3QkFBd0IsRUFDeEIsUUFBUSxFQUVULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFtQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFFM0MsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBTW5CLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSx3QkFBd0I7SUFvQ3JFLFlBQ1UsS0FBWSxFQUM0QixNQUFxQixFQUM3RCxNQUF3QjtRQUVoQyxLQUFLLEVBQUUsQ0FBQztRQUpBLFVBQUssR0FBTCxLQUFLLENBQU87UUFDNEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUM3RCxXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQXJDeEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDLG1CQUFjLEdBQUc7WUFDZixLQUFLLEVBQUU7Z0JBQ0wsTUFBTSxFQUFF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UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQztJQUM1QixDQUFDOzhHQXZMVSx5QkFBeUIsdUNBc0NkLGdCQUFnQjtrR0F0QzNCLHlCQUF5QiwwSkMzQnRDLGd1VEFpUUE7OzJGRHRPYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0Usb0JBQW9COzswQkF5QzNCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCO3dFQXJDN0IsT0FBTztzQkFBZixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgRGF0YXNldCxcbiAgRGF0YXNldFZlcnNpb24sXG4gIERhdGFTb3VyY2VBY3Rpb25zLFxuICBEYXRhU291cmNlU2VsZWN0b3JzLFxuICBQUllfQUNDRVNTX1RPS0VOLFxuICBQcnlCYXNlQWNjZXNzLFxuICBQcnlEaWFsb2dTZXJ2aWNlLFxuICBQcnlTdGF0dXNNb2RhbENvbXBvbmVudCxcbiAgUmVzdWx0U2V0cyxcbiAgU2VhcmNoQWN0aW9ucyxcbiAgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlLFxuICBWaWV3TW9kZSxcbiAgV2lkZ2V0TWFuaWZlc3Rcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxubGV0IG5leHRDb21wSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktZGF0YXNldC1kZXRhaWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXNldC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeURhdGFzZXREZXRhaWxDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkYXRhc2V0ITogRGF0YXNldDtcbiAgQE91dHB1dCgpIGdvVG9DYXRhbG9nID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB3aWRnZXRNYW5pZmVzdCA9IHtcbiAgICB0YWJsZToge1xuICAgICAgaGVhZGVyOiB0cnVlLFxuICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgIGxheW91dDogeyB4OiAxLCB5OiAxLCBoZWlnaHQ6IDEyLCB3aWR0aDogMTIgfSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgZGF0YXNvdXJjZTogWycnXVxuICAgIH0sXG4gICAgbWFwOiB7XG4gICAgICBoZWFkZXI6IGZhbHNlLFxuICAgICAgdHlwZTogJ21hcCcsXG4gICAgICBsYXlvdXQ6IHsgeDogMSwgeTogMSwgaGVpZ2h0OiAxMiwgd2lkdGg6IDEyIH0sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGxheWVyczogW10sXG4gICAgICAgIGZpdDogdHJ1ZSxcbiAgICAgICAgYXV0b21hdGljTGF5ZXJzOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGF0YXNvdXJjZTogWycnXVxuICAgIH1cbiAgfSBhcyB7IFtrZXk6IHN0cmluZ106IFdpZGdldE1hbmlmZXN0IH07XG4gIHByb3RlY3RlZCByZWFkb25seSBWaWV3TW9kZSA9IFZpZXdNb2RlO1xuICBjb21wSWQ6IG51bWJlciA9IDA7XG4gIHRhYjogbnVtYmVyID0gMDtcbiAgZGF0YXNldEl0ZW1zJDogT2JzZXJ2YWJsZTxSZXN1bHRTZXRzIHwgbnVsbD47XG4gIHB1YmxpYyBkYXRhc2V0VmVyc2lvbnMkITogT2JzZXJ2YWJsZTxEYXRhc2V0VmVyc2lvbltdPjtcbiAgc2VsZWN0ZWREYXRhc2V0VmVyc2lvbj86IERhdGFzZXRWZXJzaW9uO1xuICBzZWxlY3RlZE1vZGU6IFZpZXdNb2RlID0gVmlld01vZGUuQ09OU1VMVDtcbiAgaXNFZGl0aW5nVmVyc2lvbiA9IGZhbHNlO1xuICBjYW5Nb2RpZnkkITogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBpc1BhbmVsT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZFZlcnNpb24/OiBEYXRhc2V0VmVyc2lvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBSWV9BQ0NFU1NfVE9LRU4pIHByb3RlY3RlZCBhY2Nlc3M6IFByeUJhc2VBY2Nlc3MsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IFByeURpYWxvZ1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRhdGFzZXRJdGVtcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmVzdWx0U2V0cyk7XG4gICAgdGhpcy5jb21wSWQgPSBuZXh0Q29tcElkKys7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXNoYm9hcmRFZGl0aW9uTW9kZSkuc3Vic2NyaWJlKChlZGl0aW9uTW9kZSkgPT4ge1xuICAgICAgICBpZiAoZWRpdGlvbk1vZGUpIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7fSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYW5Nb2RpZnkkID0gdGhpcy5hY2Nlc3M/LmNhbk1vZGlmeURhdGFzZXQodGhpcy5kYXRhc2V0KSA/PyBvZihmYWxzZSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXRhU291cmNlQWN0aW9ucy5kYXRhc2V0Lmxpc3RWZXJzaW9uc0J5RGF0YXNldElkKHsgaWQ6IHRoaXMuZGF0YXNldC5pZCB9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnJlbW92ZUZpbHRlcnMoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIFNlYXJjaEFjdGlvbnMuZ2V0RGF0YXNvdXJjZUl0ZW1zKHtcbiAgICAgICAgaWQ6IHRoaXMuZGF0YXNldC5pZCxcbiAgICAgICAgZXhjbHVkZUdlbzogZmFsc2UsXG4gICAgICAgIGZyb206ICdQcnlEYXRhc2V0RGV0YWlsQ29tcG9uZW50Lm5nT25Jbml0KCknXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmRhdGFzZXRWZXJzaW9ucyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmRhdGFzZXRWZXJzaW9ucyk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZGF0YXNldFZlcnNpb25zJC5zdWJzY3JpYmUoKHZlcnNpb25zKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmVyc2lvbikge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uID0ge1xuICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZFZlcnNpb24sXG4gICAgICAgICAgICAuLi52ZXJzaW9ucy5maW5kKCh2ZXJzaW9uKSA9PiB2ZXJzaW9uLmlkID09PSB0aGlzLnNlbGVjdGVkVmVyc2lvbj8uaWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy53aWRnZXRNYW5pZmVzdFsndGFibGUnXS5kYXRhc291cmNlID0gW3RoaXMuZGF0YXNldC5pZF07XG4gICAgdGhpcy53aWRnZXRNYW5pZmVzdFsnbWFwJ10uZGF0YXNvdXJjZSA9IFt0aGlzLmRhdGFzZXQuaWRdO1xuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIHRoaXMuZ29Ub0NhdGFsb2cuZW1pdCgpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMuZGF0YXNldC5saXN0VmVyc2lvbnMoe30pKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIFNlYXJjaEFjdGlvbnMuZ2V0RGF0YXNvdXJjZUl0ZW1zKHtcbiAgICAgICAgaWQ6IHRoaXMuZGF0YXNldC5pZCxcbiAgICAgICAgZXhjbHVkZUdlbzogZmFsc2UsXG4gICAgICAgIGZyb206ICdQcnlEYXRhc2V0RGV0YWlsQ29tcG9uZW50LnJlZnJlc2goKSdcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQubGlzdFZlcnNpb25zKHt9KSk7XG4gIH1cblxuICBzd2l0Y2gobnVtYmVyOiBudW1iZXIpIHtcbiAgICB0aGlzLnRhYiA9IG51bWJlcjtcbiAgfVxuXG4gIGhhbmRsZUJ1dHRvbkFjdGlvbigkZXZlbnQ6IEV2ZW50LCB2ZXJzaW9uOiBEYXRhc2V0VmVyc2lvbikge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YXNldFZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHN3aXRjaCAodmVyc2lvbi5zdGF0ZSkge1xuICAgICAgY2FzZSAnQUNUSVZFJzpcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlVmVyc2lvbih2ZXJzaW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdJTkFDVElWRSc6XG4gICAgICAgIHRoaXMuYWN0aXZhdGVWZXJzaW9uKHZlcnNpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN1bHRFcnJvcnMoJGV2ZW50OiBFdmVudCwgdmVyc2lvbjogRGF0YXNldFZlcnNpb24pIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5kaWFsb2cub3BlbihQcnlTdGF0dXNNb2RhbENvbXBvbmVudCwgeyBkYXRhOiB7IHZlcnNpb246IHZlcnNpb24gfSB9KTtcbiAgfVxuXG4gIGdldFZlcnNpb25Ub29sdGlwQ29udGVudCh2ZXJzaW9uOiBEYXRhc2V0VmVyc2lvbiwgYWN0aXZlVmVyc2lvbklkPzogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh2ZXJzaW9uLnN0YXRlKSB7XG4gICAgICBjYXNlICdFUlJPUic6XG4gICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgY2FzZSAnQUNUSVZFJzpcbiAgICAgICAgcmV0dXJuIHZlcnNpb24uaWQgPT09IGFjdGl2ZVZlcnNpb25JZCA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJztcbiAgICAgIGNhc2UgJ0xPQURJTkcnOlxuICAgICAgY2FzZSAnSU5ERVhJTkcnOlxuICAgICAgICByZXR1cm4gJ2xvYWRpbmcnO1xuICAgICAgY2FzZSAnSU5BQ1RJVkUnOlxuICAgICAgICByZXR1cm4gJ2ludmFsaWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlYWN0aXZhdGVWZXJzaW9uKHZlcnNpb246IERhdGFzZXRWZXJzaW9uKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQuZGVhY3RpdmF0ZURhdGFzZXRWZXJzaW9uKHtcbiAgICAgICAgZGF0YXNldElkOiB0aGlzLmRhdGFzZXQuaWQsXG4gICAgICAgIHZlcnNpb25JZDogdmVyc2lvbi5pZFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZVZlcnNpb24odmVyc2lvbjogRGF0YXNldFZlcnNpb24pIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgRGF0YVNvdXJjZUFjdGlvbnMuZGF0YXNldC5hY3RpdmF0ZURhdGFzZXRWZXJzaW9uKHtcbiAgICAgICAgZGF0YXNldElkOiB0aGlzLmRhdGFzZXQuaWQsXG4gICAgICAgIHZlcnNpb25JZDogdmVyc2lvbi5pZFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb25UYWJTd2l0Y2goJGV2ZW50OiBudW1iZXIpIHtcbiAgICBpZiAoWzAsIDEsIDJdLmluY2x1ZGVzKCRldmVudCkpIHtcbiAgICAgIHRoaXMuaXNQYW5lbE9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVQYW5lbChzZWxlY3RlZFZlcnNpb24/OiBEYXRhc2V0VmVyc2lvbikge1xuICAgIGlmIChzZWxlY3RlZFZlcnNpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uID0gc2VsZWN0ZWRWZXJzaW9uO1xuICAgICAgdGhpcy5pc1BhbmVsT3BlbiA9IHRydWU7XG4gICAgICB0aGlzLmlzRWRpdGluZ1ZlcnNpb24gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1BhbmVsT3BlbiA9ICF0aGlzLmlzUGFuZWxPcGVuO1xuICAgICAgdGhpcy5zZWxlY3RlZFZlcnNpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgZWRpdFZlcnNpb24oKSB7XG4gICAgdGhpcy5pc0VkaXRpbmdWZXJzaW9uID0gdHJ1ZTtcbiAgfVxuXG4gIGZvcm1WYWxpZGF0ZWQoJGV2ZW50OiBQYXJ0aWFsPERhdGFzZXRWZXJzaW9uPikge1xuICAgIHRoaXMuaXNFZGl0aW5nVmVyc2lvbiA9IGZhbHNlO1xuICB9XG5cbiAgYXNrRGVsZXRlKHZlcnNpb246IERhdGFzZXRWZXJzaW9uLCAkZXZlbnQ/OiBFdmVudCkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMuZGF0YXNldC5jb25maXJtRGVsZXRlVmVyc2lvbih7IHZlcnNpb24gfSkpO1xuICAgICRldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvLW1hbmlmZXN0LWxheW91dF9fdG9vbGJveFwiPlxuICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiAoY2xpY2spPVwiZ29CYWNrKClcIj57eyAnQHByeS5kYXRhc2V0LnJldHVyblRvTGlzdCcgfCBpMThuIH19PC9idXR0b24+XG4gIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cInJlZnJlc2goKVwiPlxuICAgIHt7ICdAcHJ5LmRhdGFzZXQucmVmcmVzaCcgfCBpMThuIH19XG4gICAgPHByeS1pY29uIGljb25Tdmc9XCJzeW5jaHJvXCI+PC9wcnktaWNvbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm8tZGF0YXNldC1sYXlvdXRcIj5cbiAgPGRpdiBjbGFzcz1cIm8tZGF0YXNldC1sYXlvdXRfX2NvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYS1wXCI+XG4gICAgICA8aDIgY2xhc3M9XCJhLWgxXCI+e3sgZGF0YXNldC5uYW1lIH19PC9oMj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJvLWRhdGFzZXQtZGV0YWlsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1kYXRhc2V0LWRldGFpbF9fY29udGVudFwiPlxuICAgICAgICA8cHJ5LXRhYi1ncm91cCB0cmFuc2xhdGlvblN0cmluZ0Jhc2U9XCJAcHJ5LmRhdGFzZXQuXCIgKGNsaWNrZWRUYWJJZHgpPVwib25UYWJTd2l0Y2goJGV2ZW50KVwiPlxuICAgICAgICAgIDxwcnktdGFiIFt0ZW1wbGF0ZVJlZl09XCJpbmZvcm1hdGlvblwiIG5hbWU9XCJpbmZvcm1hdGlvblwiPjwvcHJ5LXRhYj5cbiAgICAgICAgICA8cHJ5LXRhYiBbdGVtcGxhdGVSZWZdPVwidGFibGVcIiBuYW1lPVwiZGF0YVwiPjwvcHJ5LXRhYj5cbiAgICAgICAgICA8cHJ5LXRhYiBbdGVtcGxhdGVSZWZdPVwibWFwXCIgbmFtZT1cIm1hcFwiPjwvcHJ5LXRhYj5cbiAgICAgICAgICA8cHJ5LXRhYiBbdGVtcGxhdGVSZWZdPVwiZGF0YXNldFZlcnNpb25zXCIgbmFtZT1cInZlcnNpb25IaXN0b3J5XCI+PC9wcnktdGFiPlxuICAgICAgICA8L3ByeS10YWItZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIEBpZiAoaXNQYW5lbE9wZW4pIHtcbiAgICA8ZGl2IGNsYXNzPVwiby1kYXRhc2V0LWxheW91dF9fcGFuZWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbF9faGVhZGVyIHUtZGlzcGxheS1mbGV4IC1qdXN0aWZ5LXNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgPGgzPnt7ICdAcHJ5LmRhdGFzZXQuaW5mb3JtYXRpb24nIHwgaTE4biB9fTwvaDM+XG4gICAgICAgIDxidXR0b24gcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVQYW5lbCgpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZWxfX2NvbnRlbnQgdS1kaXNwbGF5LWZsZXggLWNvbHVtblwiPlxuICAgICAgICBAaWYgKCFpc0VkaXRpbmdWZXJzaW9uKSB7XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYS1sYWJlbFwiPnt7ICdAcHJ5LmRhdGFzZXQudmVyc2lvbi5wcm9kdWN0aW9uRGF0ZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgKHNlbGVjdGVkVmVyc2lvbj8ucHJvZHVjdGlvbkRhdGUgfCBkYXRlOiAnZGQtTU0teXl5eSwgSEg6bW0nKSA/P1xuICAgICAgICAgICAgICAgICgnQHByeS5kYXRhc2V0LnZlcnNpb24ubm90UHJvdmlkZWQnIHwgaTE4bilcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5kYXRhc2V0LnZlcnNpb24ucHJvZHVjZXInIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkVmVyc2lvbj8ucHJvZHVjZXIgPz8gKCdAcHJ5LmRhdGFzZXQudmVyc2lvbi5ub3RQcm92aWRlZCcgfCBpMThuKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZGF0YXNldC52ZXJzaW9uLmFkZGl0aW9uYWxJbmZvcm1hdGlvbicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInZlcnNpb24taW5mb3JtYXRpb25cIlxuICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmVyc2lvbj8uYWRkaXRpb25hbEluZm9ybWF0aW9uID8/ICgnQHByeS5kYXRhc2V0LnZlcnNpb24ubm90UHJvdmlkZWQnIHwgaTE4bikgfCBtZFRvSHRtbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpwcnlBY2Nlc3M9XCJ7IG1vZHVsZTogJ2FkbWluJywgcGFnZTogJ2xpc3QtZGF0YXNldCcsIGFjdGlvbjogJ2VkaXRfdmVyc2lvbicgfVwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnkgdS1zZWxmLWVuZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdFZlcnNpb24oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0BwcnkuYWN0aW9uLmVkaXQnIHwgaTE4biB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8cHJ5LWRhdGFzZXQtdmVyc2lvbi1mb3JtXG4gICAgICAgICAgICBbdmVyc2lvbl09XCJzZWxlY3RlZFZlcnNpb25cIlxuICAgICAgICAgICAgKGZvcm1WYWxpZGF0ZWQpPVwiZm9ybVZhbGlkYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9wcnktZGF0YXNldC12ZXJzaW9uLWZvcm0+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNpbmZvcm1hdGlvbj5cbiAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1jb2x1bW4gby1kYXRhc2V0LWRldGFpbF9faW5mb3JtYXRpb25cIj5cbiAgICA8ZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZGF0YXNldC5kZXNjcmlwdGlvbicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPHNwYW4+e3sgZGF0YXNldC5kZXNjcmlwdGlvbiA/PyAoJ0BwcnkuZGF0YXNldC52ZXJzaW9uLm5vdFByb3ZpZGVkJyB8IGkxOG4pIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIEBpZiAoZGF0YXNldC5hY3RpdmVWZXJzaW9uKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5kYXRhc2V0LnZlcnNpb24ucHJvZHVjdGlvbkRhdGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAoZGF0YXNldC5hY3RpdmVWZXJzaW9uLnByb2R1Y3Rpb25EYXRlIHwgZGF0ZTogJ2RkLU1NLXl5eXksIEhIOm1tJykgPz9cbiAgICAgICAgICAgICgnQHByeS5kYXRhc2V0LnZlcnNpb24ubm90UHJvdmlkZWQnIHwgaTE4bilcbiAgICAgICAgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYS1sYWJlbFwiPnt7ICdAcHJ5LmRhdGFzZXQudmVyc2lvbi5wcm9kdWNlcicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBkYXRhc2V0LmFjdGl2ZVZlcnNpb24ucHJvZHVjZXIgPz8gKCdAcHJ5LmRhdGFzZXQudmVyc2lvbi5ub3RQcm92aWRlZCcgfCBpMThuKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZGF0YXNldC52ZXJzaW9uLmFkZGl0aW9uYWxJbmZvcm1hdGlvbicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ2ZXJzaW9uLWluZm9ybWF0aW9uXCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgZGF0YXNldC5hY3RpdmVWZXJzaW9uLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiA/PyAoJ0BwcnkuZGF0YXNldC52ZXJzaW9uLm5vdFByb3ZpZGVkJyB8IGkxOG4pIHwgbWRUb0h0bWxcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJhLXBcIj5cbiAgICAgICAgPHA+e3sgJ0BwcnkuZGF0YXNldC5ub0FjdGl2ZVZlcnNpb24nIHwgaTE4biB9fTwvcD5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZGF0YXNldC50YWdzJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLXdyYXBcIj5cbiAgICAgICAgQGZvciAoY2F0ZWdvcnkgb2YgZGF0YXNldC5jYXRlZ29yaWVzOyB0cmFjayBjYXRlZ29yeS5pZCkge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYS1jaGlwIC1tZFwiPiB7eyBjYXRlZ29yeS5uYW1lIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhYmxlPlxuICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLWNvbnRhaW5lclwiPlxuICAgIDxwcnktZGFzaGJvYXJkIFtzdGF0aWNEYXNoYm9hcmRdPVwieyB3aWRnZXRzOiBbd2lkZ2V0TWFuaWZlc3RbJ3RhYmxlJ11dIH1cIj48L3ByeS1kYXNoYm9hcmQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbWFwPlxuICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLWNvbnRhaW5lclwiPlxuICAgIDxwcnktZGFzaGJvYXJkIFtzdGF0aWNEYXNoYm9hcmRdPVwieyB3aWRnZXRzOiBbd2lkZ2V0TWFuaWZlc3RbJ21hcCddXSB9XCI+PC9wcnktZGFzaGJvYXJkPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGFzZXRWZXJzaW9ucz5cbiAgPGRpdiBjbGFzcz1cImRhdGFzZXQtZGV0YWlsX190YWJsZSB0YWJsZS1jb250YWluZXJcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJhLXRhYmxlXCI+XG4gICAgICA8Y2FwdGlvbj5cbiAgICAgICAge3tcbiAgICAgICAgICAnQHByeS5hZG1pbi5kYXRhc2V0LnRpdGxlJyB8IGkxOG5cbiAgICAgICAgfX0sXG4gICAgICAgIHt7XG4gICAgICAgICAgJ0BwcnkuYWN0aW9uLnNvcnRhYmxlQ29sdW1uSGVhZGVyJyB8IGkxOG5cbiAgICAgICAgfX1cbiAgICAgIDwvY2FwdGlvbj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aD57eyAnQHByeS5kYXRhc2V0LnZlcnNpb24udGl0bGUnIHwgaTE4biB9fTwvdGg+XG4gICAgICAgICAgPHRoPnt7ICdAcHJ5LmRhdGFzZXQuZGF0ZScgfCBpMThuIH19PC90aD5cbiAgICAgICAgICA8dGg+e3sgJ0BwcnkuZGF0YXNldC5zdGF0dXMnIHwgaTE4biB9fTwvdGg+XG4gICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdmVyc2lvbiBvZiBkYXRhc2V0VmVyc2lvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lbCh2ZXJzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzLi1zZWxlY3RlZF09XCJ2ZXJzaW9uLmlkID09PSBzZWxlY3RlZFZlcnNpb24/LmlkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIHt7IHZlcnNpb24udmVyc2lvbiB9fVxuICAgICAgICAgICAgPHByeS1pY29uICpuZ0lmPVwiZGF0YXNldC5hY3RpdmVWZXJzaW9uPy5pZCA9PT0gdmVyc2lvbi5pZFwiIGljb25Tdmc9XCJjaGVja1wiIGNsYXNzPVwiY2hlY2tcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImEtdG9vbHRpcFwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCJ2ZXJzaW9uLmxhc3RNb2RpZmllZCB8IHNpbmNlRGF0ZTogeyBvbmx5TG9jYWxlOiB0cnVlIH1cIlxuICAgICAgICAgICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHZlcnNpb24ubGFzdE1vZGlmaWVkIHwgc2luY2VEYXRlOiB7IG9ubHlMb2NhbGU6IHRydWUgfSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICB2ZXJzaW9uLmlkID09PSBkYXRhc2V0LmFjdGl2ZVZlcnNpb24/LmlkXG4gICAgICAgICAgICAgICAgPyAnQHByeS5kYXRhc2V0LnZlcnNpb24uc3RhdGUuY3VycmVudGx5QWN0aXZlJ1xuICAgICAgICAgICAgICAgIDogKCdAcHJ5LmRhdGFzZXQudmVyc2lvbi5zdGF0ZS4nICsgdmVyc2lvbi5zdGF0ZSB8IGkxOG4pXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cInZlcnNpb24uc3RhdGUgIT09ICdERUxFVElORydcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm0taW5mby1pY29uIGEtdG9vbHRpcCAtdG9vbHRpcC13aWR0aC1tZFwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAnQHByeS5kYXRhc2V0LnRvb2x0aXAuJyArIGdldFZlcnNpb25Ub29sdGlwQ29udGVudCh2ZXJzaW9uLCBkYXRhc2V0LmFjdGl2ZVZlcnNpb24/LmlkKSB8IGkxOG5cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3Bhbj5pPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgdmVyc2lvbi5zdGF0ZSAhPT0gJ0xPQURJTkcnICYmXG4gICAgICAgICAgICAgICAgdmVyc2lvbi5zdGF0ZSAhPT0gJ0lOREVYSU5HJyAmJlxuICAgICAgICAgICAgICAgIHZlcnNpb24uc3RhdGUgIT09ICdFUlJPUicgJiZcbiAgICAgICAgICAgICAgICB2ZXJzaW9uLnN0YXRlICE9PSAnREVMRVRJTkcnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIihjYW5Nb2RpZnkkIHwgYXN5bmMpICYmICh2ZXJzaW9uLnN0YXRlID09PSAnQUNUSVZFJyB8fCB2ZXJzaW9uLnN0YXRlID09PSAnSU5BQ1RJVkUnKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpwcnlBY2Nlc3M9XCJ7IG1vZHVsZTogJ2Rhc2hib2FyZCcsIHBhZ2U6ICdsaXN0LWRhdGFzZXQnLCBhY3Rpb246ICdhY3RpdmF0ZScgfVwiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi10ZXh0IG5nLXN0YXItaW5zZXJ0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQnV0dG9uQWN0aW9uKCRldmVudCwgdmVyc2lvbilcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQHByeS5kYXRhc2V0LmJ1dHRvbkFjdGlvbi4nICsgdmVyc2lvbi5zdGF0ZSB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZlcnNpb24uc3RhdGUgPT09ICdBQ1RJVkUnIHx8IHZlcnNpb24uc3RhdGUgPT09ICdJTkFDVElWRSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1pbmZvLWljb24gYS10b29sdGlwIC10b29sdGlwLXdpZHRoLWxnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbi5zdGF0ZSA9PT0gJ0FDVElWRSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnQHByeS5kYXRhc2V0LnRvb2x0aXAuaW52YWxpZGF0ZUJ1dHRvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnQHByeS5kYXRhc2V0LnRvb2x0aXAudmFsaWRhdGVCdXR0b24nXG4gICAgICAgICAgICAgICAgICAgICAgICApIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+aTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2ZXJzaW9uLmhhc1dhcm5pbmdzIHx8IHZlcnNpb24uc3RhdGUgPT09ICdFUlJPUidcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeSBhLWJ0bi0taWNvbi10ZXh0IG5nLXN0YXItaW5zZXJ0ZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb25zdWx0RXJyb3JzKCRldmVudCwgdmVyc2lvbilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLnN0YXRlID09PSAnRVJST1InID8gJ0BwcnkuZGF0YXNldC5idXR0b25BY3Rpb24uRVJST1InIDogJ0BwcnkuZGF0YXNldC5idXR0b25BY3Rpb24uV0FSTklORycpXG4gICAgICAgICAgICAgICAgICAgIHwgaTE4blxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgKGNhbk1vZGlmeSQgfCBhc3luYykgJiZcbiAgICAgICAgICAgICAgICAodmVyc2lvbi5zdGF0ZSA9PT0gJ0FDVElWRScgfHwgdmVyc2lvbi5zdGF0ZSA9PT0gJ0VSUk9SJyB8fCB2ZXJzaW9uLnN0YXRlID09PSAnSU5BQ1RJVkUnKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5IGEtYnRuLS1pY29uLXRleHQgbmctc3Rhci1pbnNlcnRlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFza0RlbGV0ZSh2ZXJzaW9uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdAcHJ5LmRhdGFzZXQuYnV0dG9uQWN0aW9uLmRlbGV0ZScgfCBpMThuIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNldC1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvZGF0YXNldC9jb21wb25lbnRzL2RhdGFzZXQtZGV0YWlsL2RhdGFzZXQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2RhdGFzZXQvY29tcG9uZW50cy9kYXRhc2V0LWRldGFpbC9kYXRhc2V0LWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakcsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQkFBa0IsRUFHbEIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFHaEIsdUJBQXVCLEVBRXZCLGFBQWEsRUFDYix3QkFBd0IsRUFDeEIsUUFBUSxFQUVULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFtQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFFM0MsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBTW5CLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSx3QkFBd0I7SUFvQ3JFLFlBQ1UsS0FBWSxFQUM0QixNQUFxQixFQUM3RCxNQUF3QjtRQUVoQyxLQUFLLEVBQUUsQ0FBQztRQUpBLFVBQUssR0FBTCxLQUFLLENBQU87UUFDNEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUM3RCxXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQXJDeEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDLG1CQUFjLEdBQUc7WUFDZixLQUFLLEVBQUU7Z0JBQ0wsTUFBTSxFQUFF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UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQztJQUM1QixDQUFDOzhHQXZMVSx5QkFBeUIsdUNBc0NkLGdCQUFnQjtrR0F0QzNCLHlCQUF5QiwwSkMzQnRDLGd2VEFrUUE7OzJGRHZPYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0Usb0JBQW9COzswQkF5QzNCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCO3dFQXJDN0IsT0FBTztzQkFBZixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgRGF0YXNldCxcbiAgRGF0YXNldFZlcnNpb24sXG4gIERhdGFTb3VyY2VBY3Rpb25zLFxuICBEYXRhU291cmNlU2VsZWN0b3JzLFxuICBQUllfQUNDRVNTX1RPS0VOLFxuICBQcnlCYXNlQWNjZXNzLFxuICBQcnlEaWFsb2dTZXJ2aWNlLFxuICBQcnlTdGF0dXNNb2RhbENvbXBvbmVudCxcbiAgUmVzdWx0U2V0cyxcbiAgU2VhcmNoQWN0aW9ucyxcbiAgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlLFxuICBWaWV3TW9kZSxcbiAgV2lkZ2V0TWFuaWZlc3Rcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxubGV0IG5leHRDb21wSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktZGF0YXNldC1kZXRhaWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXNldC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeURhdGFzZXREZXRhaWxDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkYXRhc2V0ITogRGF0YXNldDtcbiAgQE91dHB1dCgpIGdvVG9DYXRhbG9nID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB3aWRnZXRNYW5pZmVzdCA9IHtcbiAgICB0YWJsZToge1xuICAgICAgaGVhZGVyOiB0cnVlLFxuICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgIGxheW91dDogeyB4OiAxLCB5OiAxLCBoZWlnaHQ6IDEyLCB3aWR0aDogMTIgfSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgZGF0YXNvdXJjZTogWycnXVxuICAgIH0sXG4gICAgbWFwOiB7XG4gICAgICBoZWFkZXI6IGZhbHNlLFxuICAgICAgdHlwZTogJ21hcCcsXG4gICAgICBsYXlvdXQ6IHsgeDogMSwgeTogMSwgaGVpZ2h0OiAxMiwgd2lkdGg6IDEyIH0sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGxheWVyczogW10sXG4gICAgICAgIGZpdDogdHJ1ZSxcbiAgICAgICAgYXV0b21hdGljTGF5ZXJzOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGF0YXNvdXJjZTogWycnXVxuICAgIH1cbiAgfSBhcyB7IFtrZXk6IHN0cmluZ106IFdpZGdldE1hbmlmZXN0IH07XG4gIHByb3RlY3RlZCByZWFkb25seSBWaWV3TW9kZSA9IFZpZXdNb2RlO1xuICBjb21wSWQ6IG51bWJlciA9IDA7XG4gIHRhYjogbnVtYmVyID0gMDtcbiAgZGF0YXNldEl0ZW1zJDogT2JzZXJ2YWJsZTxSZXN1bHRTZXRzIHwgbnVsbD47XG4gIHB1YmxpYyBkYXRhc2V0VmVyc2lvbnMkITogT2JzZXJ2YWJsZTxEYXRhc2V0VmVyc2lvbltdPjtcbiAgc2VsZWN0ZWREYXRhc2V0VmVyc2lvbj86IERhdGFzZXRWZXJzaW9uO1xuICBzZWxlY3RlZE1vZGU6IFZpZXdNb2RlID0gVmlld01vZGUuQ09OU1VMVDtcbiAgaXNFZGl0aW5nVmVyc2lvbiA9IGZhbHNlO1xuICBjYW5Nb2RpZnkkITogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBpc1BhbmVsT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZFZlcnNpb24/OiBEYXRhc2V0VmVyc2lvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBSWV9BQ0NFU1NfVE9LRU4pIHByb3RlY3RlZCBhY2Nlc3M6IFByeUJhc2VBY2Nlc3MsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IFByeURpYWxvZ1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRhdGFzZXRJdGVtcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmVzdWx0U2V0cyk7XG4gICAgdGhpcy5jb21wSWQgPSBuZXh0Q29tcElkKys7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXNoYm9hcmRFZGl0aW9uTW9kZSkuc3Vic2NyaWJlKChlZGl0aW9uTW9kZSkgPT4ge1xuICAgICAgICBpZiAoZWRpdGlvbk1vZGUpIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7fSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYW5Nb2RpZnkkID0gdGhpcy5hY2Nlc3M/LmNhbk1vZGlmeURhdGFzZXQodGhpcy5kYXRhc2V0KSA/PyBvZihmYWxzZSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXRhU291cmNlQWN0aW9ucy5kYXRhc2V0Lmxpc3RWZXJzaW9uc0J5RGF0YXNldElkKHsgaWQ6IHRoaXMuZGF0YXNldC5pZCB9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnJlbW92ZUZpbHRlcnMoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIFNlYXJjaEFjdGlvbnMuZ2V0RGF0YXNvdXJjZUl0ZW1zKHtcbiAgICAgICAgaWQ6IHRoaXMuZGF0YXNldC5pZCxcbiAgICAgICAgZXhjbHVkZUdlbzogZmFsc2UsXG4gICAgICAgIGZyb206ICdQcnlEYXRhc2V0RGV0YWlsQ29tcG9uZW50Lm5nT25Jbml0KCknXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmRhdGFzZXRWZXJzaW9ucyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmRhdGFzZXRWZXJzaW9ucyk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZGF0YXNldFZlcnNpb25zJC5zdWJzY3JpYmUoKHZlcnNpb25zKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmVyc2lvbikge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uID0ge1xuICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZFZlcnNpb24sXG4gICAgICAgICAgICAuLi52ZXJzaW9ucy5maW5kKCh2ZXJzaW9uKSA9PiB2ZXJzaW9uLmlkID09PSB0aGlzLnNlbGVjdGVkVmVyc2lvbj8uaWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy53aWRnZXRNYW5pZmVzdFsndGFibGUnXS5kYXRhc291cmNlID0gW3RoaXMuZGF0YXNldC5pZF07XG4gICAgdGhpcy53aWRnZXRNYW5pZmVzdFsnbWFwJ10uZGF0YXNvdXJjZSA9IFt0aGlzLmRhdGFzZXQuaWRdO1xuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIHRoaXMuZ29Ub0NhdGFsb2cuZW1pdCgpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMuZGF0YXNldC5saXN0VmVyc2lvbnMoe30pKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIFNlYXJjaEFjdGlvbnMuZ2V0RGF0YXNvdXJjZUl0ZW1zKHtcbiAgICAgICAgaWQ6IHRoaXMuZGF0YXNldC5pZCxcbiAgICAgICAgZXhjbHVkZUdlbzogZmFsc2UsXG4gICAgICAgIGZyb206ICdQcnlEYXRhc2V0RGV0YWlsQ29tcG9uZW50LnJlZnJlc2goKSdcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQubGlzdFZlcnNpb25zKHt9KSk7XG4gIH1cblxuICBzd2l0Y2gobnVtYmVyOiBudW1iZXIpIHtcbiAgICB0aGlzLnRhYiA9IG51bWJlcjtcbiAgfVxuXG4gIGhhbmRsZUJ1dHRvbkFjdGlvbigkZXZlbnQ6IEV2ZW50LCB2ZXJzaW9uOiBEYXRhc2V0VmVyc2lvbikge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YXNldFZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHN3aXRjaCAodmVyc2lvbi5zdGF0ZSkge1xuICAgICAgY2FzZSAnQUNUSVZFJzpcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlVmVyc2lvbih2ZXJzaW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdJTkFDVElWRSc6XG4gICAgICAgIHRoaXMuYWN0aXZhdGVWZXJzaW9uKHZlcnNpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN1bHRFcnJvcnMoJGV2ZW50OiBFdmVudCwgdmVyc2lvbjogRGF0YXNldFZlcnNpb24pIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5kaWFsb2cub3BlbihQcnlTdGF0dXNNb2RhbENvbXBvbmVudCwgeyBkYXRhOiB7IHZlcnNpb246IHZlcnNpb24gfSB9KTtcbiAgfVxuXG4gIGdldFZlcnNpb25Ub29sdGlwQ29udGVudCh2ZXJzaW9uOiBEYXRhc2V0VmVyc2lvbiwgYWN0aXZlVmVyc2lvbklkPzogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh2ZXJzaW9uLnN0YXRlKSB7XG4gICAgICBjYXNlICdFUlJPUic6XG4gICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgY2FzZSAnQUNUSVZFJzpcbiAgICAgICAgcmV0dXJuIHZlcnNpb24uaWQgPT09IGFjdGl2ZVZlcnNpb25JZCA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJztcbiAgICAgIGNhc2UgJ0xPQURJTkcnOlxuICAgICAgY2FzZSAnSU5ERVhJTkcnOlxuICAgICAgICByZXR1cm4gJ2xvYWRpbmcnO1xuICAgICAgY2FzZSAnSU5BQ1RJVkUnOlxuICAgICAgICByZXR1cm4gJ2ludmFsaWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlYWN0aXZhdGVWZXJzaW9uKHZlcnNpb246IERhdGFzZXRWZXJzaW9uKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQuZGVhY3RpdmF0ZURhdGFzZXRWZXJzaW9uKHtcbiAgICAgICAgZGF0YXNldElkOiB0aGlzLmRhdGFzZXQuaWQsXG4gICAgICAgIHZlcnNpb25JZDogdmVyc2lvbi5pZFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZVZlcnNpb24odmVyc2lvbjogRGF0YXNldFZlcnNpb24pIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgRGF0YVNvdXJjZUFjdGlvbnMuZGF0YXNldC5hY3RpdmF0ZURhdGFzZXRWZXJzaW9uKHtcbiAgICAgICAgZGF0YXNldElkOiB0aGlzLmRhdGFzZXQuaWQsXG4gICAgICAgIHZlcnNpb25JZDogdmVyc2lvbi5pZFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb25UYWJTd2l0Y2goJGV2ZW50OiBudW1iZXIpIHtcbiAgICBpZiAoWzAsIDEsIDJdLmluY2x1ZGVzKCRldmVudCkpIHtcbiAgICAgIHRoaXMuaXNQYW5lbE9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVQYW5lbChzZWxlY3RlZFZlcnNpb24/OiBEYXRhc2V0VmVyc2lvbikge1xuICAgIGlmIChzZWxlY3RlZFZlcnNpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uID0gc2VsZWN0ZWRWZXJzaW9uO1xuICAgICAgdGhpcy5pc1BhbmVsT3BlbiA9IHRydWU7XG4gICAgICB0aGlzLmlzRWRpdGluZ1ZlcnNpb24gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1BhbmVsT3BlbiA9ICF0aGlzLmlzUGFuZWxPcGVuO1xuICAgICAgdGhpcy5zZWxlY3RlZFZlcnNpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgZWRpdFZlcnNpb24oKSB7XG4gICAgdGhpcy5pc0VkaXRpbmdWZXJzaW9uID0gdHJ1ZTtcbiAgfVxuXG4gIGZvcm1WYWxpZGF0ZWQoJGV2ZW50OiBQYXJ0aWFsPERhdGFzZXRWZXJzaW9uPikge1xuICAgIHRoaXMuaXNFZGl0aW5nVmVyc2lvbiA9IGZhbHNlO1xuICB9XG5cbiAgYXNrRGVsZXRlKHZlcnNpb246IERhdGFzZXRWZXJzaW9uLCAkZXZlbnQ/OiBFdmVudCkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMuZGF0YXNldC5jb25maXJtRGVsZXRlVmVyc2lvbih7IHZlcnNpb24gfSkpO1xuICAgICRldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvLW1hbmlmZXN0LWxheW91dF9fdG9vbGJveFwiPlxuICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiAoY2xpY2spPVwiZ29CYWNrKClcIj57eyAnQHByeS5kYXRhc2V0LnJldHVyblRvTGlzdCcgfCBpMThuIH19PC9idXR0b24+XG4gIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cInJlZnJlc2goKVwiPlxuICAgIHt7ICdAcHJ5LmRhdGFzZXQucmVmcmVzaCcgfCBpMThuIH19XG4gICAgPHByeS1pY29uIGljb25Tdmc9XCJzeW5jaHJvXCI+PC9wcnktaWNvbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm8tZGF0YXNldC1sYXlvdXRcIj5cbiAgPGRpdiBjbGFzcz1cIm8tZGF0YXNldC1sYXlvdXRfX2NvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYS1wXCI+XG4gICAgICA8aDIgY2xhc3M9XCJhLWgxXCI+e3sgZGF0YXNldC5uYW1lIH19PC9oMj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJvLWRhdGFzZXQtZGV0YWlsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1kYXRhc2V0LWRldGFpbF9fY29udGVudFwiPlxuICAgICAgICA8cHJ5LXRhYi1ncm91cCB0cmFuc2xhdGlvblN0cmluZ0Jhc2U9XCJAcHJ5LmRhdGFzZXQuXCIgKGNsaWNrZWRUYWJJZHgpPVwib25UYWJTd2l0Y2goJGV2ZW50KVwiPlxuICAgICAgICAgIDxwcnktdGFiIFt0ZW1wbGF0ZVJlZl09XCJpbmZvcm1hdGlvblwiIG5hbWU9XCJpbmZvcm1hdGlvblwiPjwvcHJ5LXRhYj5cbiAgICAgICAgICA8cHJ5LXRhYiBbdGVtcGxhdGVSZWZdPVwidGFibGVcIiBuYW1lPVwiZGF0YVwiPjwvcHJ5LXRhYj5cbiAgICAgICAgICA8cHJ5LXRhYiBbdGVtcGxhdGVSZWZdPVwibWFwXCIgbmFtZT1cIm1hcFwiPjwvcHJ5LXRhYj5cbiAgICAgICAgICA8cHJ5LXRhYiBbdGVtcGxhdGVSZWZdPVwiZGF0YXNldFZlcnNpb25zXCIgbmFtZT1cInZlcnNpb25IaXN0b3J5XCI+PC9wcnktdGFiPlxuICAgICAgICA8L3ByeS10YWItZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIEBpZiAoaXNQYW5lbE9wZW4pIHtcbiAgICA8ZGl2IGNsYXNzPVwiby1kYXRhc2V0LWxheW91dF9fcGFuZWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbF9faGVhZGVyIHUtZGlzcGxheS1mbGV4IC1qdXN0aWZ5LXNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgPGgzPnt7ICdAcHJ5LmRhdGFzZXQuaW5mb3JtYXRpb24nIHwgaTE4biB9fTwvaDM+XG4gICAgICAgIDxidXR0b24gcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVQYW5lbCgpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZWxfX2NvbnRlbnQgdS1kaXNwbGF5LWZsZXggLWNvbHVtblwiPlxuICAgICAgICBAaWYgKCFpc0VkaXRpbmdWZXJzaW9uKSB7XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYS1sYWJlbFwiPnt7ICdAcHJ5LmRhdGFzZXQudmVyc2lvbi5wcm9kdWN0aW9uRGF0ZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgKHNlbGVjdGVkVmVyc2lvbj8ucHJvZHVjdGlvbkRhdGUgfCBkYXRlOiAnZGQtTU0teXl5eSwgSEg6bW0nKSA/P1xuICAgICAgICAgICAgICAgICgnQHByeS5kYXRhc2V0LnZlcnNpb24ubm90UHJvdmlkZWQnIHwgaTE4bilcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5kYXRhc2V0LnZlcnNpb24ucHJvZHVjZXInIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkVmVyc2lvbj8ucHJvZHVjZXIgPz8gKCdAcHJ5LmRhdGFzZXQudmVyc2lvbi5ub3RQcm92aWRlZCcgfCBpMThuKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZGF0YXNldC52ZXJzaW9uLmFkZGl0aW9uYWxJbmZvcm1hdGlvbicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInZlcnNpb24taW5mb3JtYXRpb25cIlxuICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmVyc2lvbj8uYWRkaXRpb25hbEluZm9ybWF0aW9uID8/ICgnQHByeS5kYXRhc2V0LnZlcnNpb24ubm90UHJvdmlkZWQnIHwgaTE4bikgfCBtZFRvSHRtbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpwcnlBY2Nlc3M9XCJ7IG1vZHVsZTogJ2FkbWluJywgcGFnZTogJ2xpc3QtZGF0YXNldCcsIGFjdGlvbjogJ2VkaXRfdmVyc2lvbicgfVwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnkgdS1zZWxmLWVuZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdFZlcnNpb24oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0BwcnkuYWN0aW9uLmVkaXQnIHwgaTE4biB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8cHJ5LWRhdGFzZXQtdmVyc2lvbi1mb3JtXG4gICAgICAgICAgICBbdmVyc2lvbl09XCJzZWxlY3RlZFZlcnNpb25cIlxuICAgICAgICAgICAgKGZvcm1WYWxpZGF0ZWQpPVwiZm9ybVZhbGlkYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9wcnktZGF0YXNldC12ZXJzaW9uLWZvcm0+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNpbmZvcm1hdGlvbj5cbiAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1jb2x1bW4gby1kYXRhc2V0LWRldGFpbF9faW5mb3JtYXRpb25cIj5cbiAgICA8ZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZGF0YXNldC5kZXNjcmlwdGlvbicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPHNwYW4+e3sgZGF0YXNldC5kZXNjcmlwdGlvbiA/PyAoJ0BwcnkuZGF0YXNldC52ZXJzaW9uLm5vdFByb3ZpZGVkJyB8IGkxOG4pIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIEBpZiAoZGF0YXNldC5hY3RpdmVWZXJzaW9uKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5kYXRhc2V0LnZlcnNpb24ucHJvZHVjdGlvbkRhdGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAoZGF0YXNldC5hY3RpdmVWZXJzaW9uLnByb2R1Y3Rpb25EYXRlIHwgZGF0ZTogJ2RkLU1NLXl5eXksIEhIOm1tJykgPz9cbiAgICAgICAgICAgICgnQHByeS5kYXRhc2V0LnZlcnNpb24ubm90UHJvdmlkZWQnIHwgaTE4bilcbiAgICAgICAgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYS1sYWJlbFwiPnt7ICdAcHJ5LmRhdGFzZXQudmVyc2lvbi5wcm9kdWNlcicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBkYXRhc2V0LmFjdGl2ZVZlcnNpb24ucHJvZHVjZXIgPz8gKCdAcHJ5LmRhdGFzZXQudmVyc2lvbi5ub3RQcm92aWRlZCcgfCBpMThuKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZGF0YXNldC52ZXJzaW9uLmFkZGl0aW9uYWxJbmZvcm1hdGlvbicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ2ZXJzaW9uLWluZm9ybWF0aW9uXCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgZGF0YXNldC5hY3RpdmVWZXJzaW9uLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiA/PyAoJ0BwcnkuZGF0YXNldC52ZXJzaW9uLm5vdFByb3ZpZGVkJyB8IGkxOG4pIHwgbWRUb0h0bWxcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJhLXBcIj5cbiAgICAgICAgPHA+e3sgJ0BwcnkuZGF0YXNldC5ub0FjdGl2ZVZlcnNpb24nIHwgaTE4biB9fTwvcD5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZGF0YXNldC50YWdzJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLXdyYXBcIj5cbiAgICAgICAgQGZvciAoY2F0ZWdvcnkgb2YgZGF0YXNldC5jYXRlZ29yaWVzOyB0cmFjayBjYXRlZ29yeS5pZCkge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYS1jaGlwIC1tZFwiPiB7eyBjYXRlZ29yeS5uYW1lIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhYmxlPlxuICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLWNvbnRhaW5lclwiPlxuICAgIDxwcnktZGFzaGJvYXJkIFtzdGF0aWNEYXNoYm9hcmRdPVwieyB3aWRnZXRzOiBbd2lkZ2V0TWFuaWZlc3RbJ3RhYmxlJ11dIH1cIj48L3ByeS1kYXNoYm9hcmQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbWFwPlxuICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLWNvbnRhaW5lclwiPlxuICAgIDxwcnktZGFzaGJvYXJkIFtzdGF0aWNEYXNoYm9hcmRdPVwieyB3aWRnZXRzOiBbd2lkZ2V0TWFuaWZlc3RbJ21hcCddXSB9XCI+PC9wcnktZGFzaGJvYXJkPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGFzZXRWZXJzaW9ucz5cbiAgPGRpdiBjbGFzcz1cImRhdGFzZXQtZGV0YWlsX190YWJsZSB0YWJsZS1jb250YWluZXJcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJhLXRhYmxlXCI+XG4gICAgICA8Y2FwdGlvbj5cbiAgICAgICAge3tcbiAgICAgICAgICAnQHByeS5hZG1pbi5kYXRhc2V0LnRpdGxlJyB8IGkxOG5cbiAgICAgICAgfX0sXG4gICAgICAgIHt7XG4gICAgICAgICAgJ0BwcnkuYWN0aW9uLnNvcnRhYmxlQ29sdW1uSGVhZGVyJyB8IGkxOG5cbiAgICAgICAgfX1cbiAgICAgIDwvY2FwdGlvbj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aD57eyAnQHByeS5kYXRhc2V0LnZlcnNpb24udGl0bGUnIHwgaTE4biB9fTwvdGg+XG4gICAgICAgICAgPHRoPnt7ICdAcHJ5LmRhdGFzZXQuZGF0ZScgfCBpMThuIH19PC90aD5cbiAgICAgICAgICA8dGg+e3sgJ0BwcnkuZGF0YXNldC5zdGF0dXMnIHwgaTE4biB9fTwvdGg+XG4gICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdmVyc2lvbiBvZiBkYXRhc2V0VmVyc2lvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lbCh2ZXJzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzLi1zZWxlY3RlZF09XCJ2ZXJzaW9uLmlkID09PSBzZWxlY3RlZFZlcnNpb24/LmlkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIHt7IHZlcnNpb24udmVyc2lvbiB9fVxuICAgICAgICAgICAgPHByeS1pY29uICpuZ0lmPVwiZGF0YXNldC5hY3RpdmVWZXJzaW9uPy5pZCA9PT0gdmVyc2lvbi5pZFwiIGljb25Tdmc9XCJjaGVja1wiIGNsYXNzPVwiY2hlY2tcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImEtdG9vbHRpcFwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCJ2ZXJzaW9uLmxhc3RNb2RpZmllZCB8IHNpbmNlRGF0ZTogeyBvbmx5TG9jYWxlOiB0cnVlIH1cIlxuICAgICAgICAgICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHZlcnNpb24ubGFzdE1vZGlmaWVkIHwgc2luY2VEYXRlOiB7IG9ubHlMb2NhbGU6IHRydWUgfSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAodmVyc2lvbi5pZCA9PT0gZGF0YXNldC5hY3RpdmVWZXJzaW9uPy5pZFxuICAgICAgICAgICAgICAgID8gJ0BwcnkuZGF0YXNldC52ZXJzaW9uLnN0YXRlLmN1cnJlbnRseUFjdGl2ZSdcbiAgICAgICAgICAgICAgICA6ICdAcHJ5LmRhdGFzZXQudmVyc2lvbi5zdGF0ZS4nICsgdmVyc2lvbi5zdGF0ZVxuICAgICAgICAgICAgICApIHwgaTE4blxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJ2ZXJzaW9uLnN0YXRlICE9PSAnREVMRVRJTkcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLWluZm8taWNvbiBhLXRvb2x0aXAgLXRvb2x0aXAtd2lkdGgtbWRcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ0BwcnkuZGF0YXNldC50b29sdGlwLicgKyBnZXRWZXJzaW9uVG9vbHRpcENvbnRlbnQodmVyc2lvbiwgZGF0YXNldC5hY3RpdmVWZXJzaW9uPy5pZCkgfCBpMThuXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+aTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHZlcnNpb24uc3RhdGUgIT09ICdMT0FESU5HJyAmJlxuICAgICAgICAgICAgICAgIHZlcnNpb24uc3RhdGUgIT09ICdJTkRFWElORycgJiZcbiAgICAgICAgICAgICAgICB2ZXJzaW9uLnN0YXRlICE9PSAnRVJST1InICYmXG4gICAgICAgICAgICAgICAgdmVyc2lvbi5zdGF0ZSAhPT0gJ0RFTEVUSU5HJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIoY2FuTW9kaWZ5JCB8IGFzeW5jKSAmJiAodmVyc2lvbi5zdGF0ZSA9PT0gJ0FDVElWRScgfHwgdmVyc2lvbi5zdGF0ZSA9PT0gJ0lOQUNUSVZFJylcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcHJ5QWNjZXNzPVwieyBtb2R1bGU6ICdkYXNoYm9hcmQnLCBwYWdlOiAnbGlzdC1kYXRhc2V0JywgYWN0aW9uOiAnYWN0aXZhdGUnIH1cIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnkgYS1idG4tLWljb24tdGV4dCBuZy1zdGFyLWluc2VydGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUJ1dHRvbkFjdGlvbigkZXZlbnQsIHZlcnNpb24pXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0BwcnkuZGF0YXNldC5idXR0b25BY3Rpb24uJyArIHZlcnNpb24uc3RhdGUgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2ZXJzaW9uLnN0YXRlID09PSAnQUNUSVZFJyB8fCB2ZXJzaW9uLnN0YXRlID09PSAnSU5BQ1RJVkUnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0taW5mby1pY29uIGEtdG9vbHRpcCAtdG9vbHRpcC13aWR0aC1sZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24uc3RhdGUgPT09ICdBQ1RJVkUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ0BwcnkuZGF0YXNldC50b29sdGlwLmludmFsaWRhdGVCdXR0b24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJ0BwcnkuZGF0YXNldC50b29sdGlwLnZhbGlkYXRlQnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKSB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPmk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmVyc2lvbi5oYXNXYXJuaW5ncyB8fCB2ZXJzaW9uLnN0YXRlID09PSAnRVJST1InXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnkgYS1idG4tLWljb24tdGV4dCBuZy1zdGFyLWluc2VydGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29uc3VsdEVycm9ycygkZXZlbnQsIHZlcnNpb24pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAodmVyc2lvbi5zdGF0ZSA9PT0gJ0VSUk9SJyA/ICdAcHJ5LmRhdGFzZXQuYnV0dG9uQWN0aW9uLkVSUk9SJyA6ICdAcHJ5LmRhdGFzZXQuYnV0dG9uQWN0aW9uLldBUk5JTkcnKVxuICAgICAgICAgICAgICAgICAgICB8IGkxOG5cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIChjYW5Nb2RpZnkkIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAgICAgKHZlcnNpb24uc3RhdGUgPT09ICdBQ1RJVkUnIHx8IHZlcnNpb24uc3RhdGUgPT09ICdFUlJPUicgfHwgdmVyc2lvbi5zdGF0ZSA9PT0gJ0lOQUNUSVZFJylcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeSBhLWJ0bi0taWNvbi10ZXh0IG5nLXN0YXItaW5zZXJ0ZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhc2tEZWxldGUodmVyc2lvbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAnQHByeS5kYXRhc2V0LmJ1dHRvbkFjdGlvbi5kZWxldGUnIHwgaTE4biB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  import { Component, input, signal } from '@angular/core';
2
2
  import { DataSourceActions, DataSourceSelectors, PryStatusModalComponent, SubscriptionnerDirective } from '@provoly/dashboard';
3
+ import { Subject } from 'rxjs';
3
4
  import { PryVersionModalComponent } from '../version-modal/version-modal.component';
4
5
  import { GlobalPositionStrategy } from '@angular/cdk/overlay';
5
6
  import * as i0 from "@angular/core";
@@ -14,7 +15,7 @@ export class PryImportListComponent extends SubscriptionnerDirective {
14
15
  super();
15
16
  this.store = store;
16
17
  this.dialog = dialog;
17
- this.loadDataAction = signal(DataSourceActions.dataset.listVersions({}));
18
+ this.loadDataAction = signal(DataSourceActions.dataset.listVersions({ orderBy: 'DATE', sortBy: 'desc' }));
18
19
  this.refreshClick = input();
19
20
  this.possibleStatus = ['LOADING', 'INDEXING', 'INACTIVE', 'ERROR', 'ACTIVE', 'DELETING', 'DELETE_ERROR'];
20
21
  this.filters = {
@@ -23,7 +24,8 @@ export class PryImportListComponent extends SubscriptionnerDirective {
23
24
  dateMin: undefined,
24
25
  dateMax: undefined
25
26
  };
26
- this.sort = {};
27
+ this.sort = { orderBy: 'DATE', sortBy: 'desc' };
28
+ this.goBackToFirstPage$ = new Subject();
27
29
  this.store.dispatch(DataSourceActions.dataset.loadDataset());
28
30
  this.datasets$ = this.store.select(DataSourceSelectors.datasets);
29
31
  this.datasetVersions$ = this.store.select(DataSourceSelectors.datasetVersions);
@@ -34,19 +36,20 @@ export class PryImportListComponent extends SubscriptionnerDirective {
34
36
  }
35
37
  clearFilters() {
36
38
  this.filters = { dataset: undefined, status: undefined, dateMin: undefined, dateMax: undefined };
39
+ this.loadDataAction.update((loadDataAction) => ({ ...loadDataAction, offset: 0 }));
37
40
  this.store.dispatch({
38
41
  ...this.loadDataAction(),
39
42
  limit: 10,
40
43
  ...this.sort
41
44
  });
45
+ this.goBackToFirstPage();
42
46
  }
43
47
  loadData() {
44
48
  this.store.dispatch({
45
49
  ...this.loadDataAction(),
46
- limit: 10,
47
- ...this.filters,
48
- ...this.sort
50
+ limit: 10
49
51
  });
52
+ this.goBackToFirstPage();
50
53
  }
51
54
  openInfoModal(version) {
52
55
  this.dialog.open(PryVersionModalComponent, {
@@ -66,16 +69,21 @@ export class PryImportListComponent extends SubscriptionnerDirective {
66
69
  sortChange($event) {
67
70
  this.sort.sortBy = $event.direction;
68
71
  this.sort.orderBy = $event.active;
72
+ this.loadDataAction.update((loadDataAction) => ({ ...loadDataAction, ...this.sort }));
69
73
  this.loadData();
70
74
  }
71
75
  updateFilters() {
72
76
  this.loadDataAction.update((loadDataAction) => ({ ...loadDataAction, ...this.filters }));
73
77
  }
78
+ goBackToFirstPage() {
79
+ this.goBackToFirstPage$.next(true);
80
+ setTimeout(() => this.goBackToFirstPage$.next(false), 50);
81
+ }
74
82
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportListComponent, deps: [{ token: i1.Store }, { token: i2.PryDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
75
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryImportListComponent, selector: "pry-import-list", inputs: { refreshClick: { classPropertyName: "refreshClick", publicName: "refreshClick", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<pry-import-css></pry-import-css>\n<div class=\"o-import-list u-display-flex -column -gap-20\">\n <h1 class=\"a-h1\">{{ '@pry.importList.title' | i18n }}</h1>\n <div class=\"o-import-list__filters u-display-flex -gap-20\">\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__dataset-filter\" #dsRef>\n <label class=\"a-label m-filter__label\" for=\"dataset_name_filter\">\n {{ '@pry.importList.filter.dsName' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"dataset_name_filter\"\n [items]=\"datasets$ | async\"\n [(ngModel)]=\"filters.dataset\"\n (ngModelChange)=\"updateFilters()\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n aria-labelledby=\"item-label\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [elementRef]=\"dsRef\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__state-filter\" #statusRef>\n <label class=\"a-label m-filter__label\" for=\"import_status\">\n {{ '@pry.importList.filter.status' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"import_status\"\n [items]=\"possibleStatus\"\n [(ngModel)]=\"filters.status\"\n (ngModelChange)=\"updateFilters()\"\n [clearable]=\"true\"\n aria-labelledby=\"item-label\"\n [elementRef]=\"statusRef\"\n i18nPrefix=\"@pry.dataset.version.stateFilter.\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__date-filter\">\n <fieldset class=\"u-display-flex -align-center\">\n <legend class=\"a-label m-filter__label\">{{ '@pry.importList.filter.date' | i18n }}&nbsp;:&nbsp;</legend>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMin\" (ngModelChange)=\"updateFilters()\" />\n <span class=\"m-filter__date-input-separator\">&nbsp;-&nbsp;</span>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMax\" (ngModelChange)=\"updateFilters()\" />\n </fieldset>\n </div>\n <button type=\"button\" class=\"a-btn a-btn--icon-only u-self-center\" (click)=\"clearFilters()\">\n <pry-icon iconSvg=\"clear_filter\" [width]=\"30\" [height]=\"30\"></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"loadData()\">\n {{ '@pry.toolbox.apply' | i18n }}\n <pry-icon iconSvg=\"refresh_filter\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n </div>\n <div class=\"o-import-list__content\">\n <table class=\"a-table\" prySortTable (prySortChange)=\"sortChange($event)\">\n <caption>\n {{\n '@pry.admin.dataset.title' | i18n\n }},\n {{\n '@pry.action.sortableColumnHeader' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th id=\"import_list_header_dataset\" prySortHeader=\"DATASET_NAME\">\n {{ '@pry.importList.dsName' | i18n }}\n </th>\n <th>{{ '@pry.importList.number' | i18n }}</th>\n <th id=\"import_list_header_date\" prySortHeader=\"DATE\" (sortChange)=\"sortChange($event)\">\n {{ '@pry.importList.date' | i18n }}\n </th>\n <th>{{ '@pry.importList.status' | i18n }}</th>\n <th>{{ '@pry.importList.actions' | i18n }}</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (version of datasetVersions$ | async; track version.id) {\n <tr>\n <td>{{ version.dataset.name }}</td>\n <td>\n {{ version.version }}\n </td>\n <td>\n {{ version.productionDate | date: 'dd/MM/yyyy HH:mm' }}\n </td>\n <td class=\"u-display-flex -align-center -cell-with-icon\">\n @if (version.state === 'ACTIVE') {\n <pry-icon iconSvg=\"check\" class=\"check\" [height]=\"20\" [width]=\"20\"></pry-icon>\n } @else if (version.state === 'WARNING' || version.state === 'ERROR') {\n <pry-icon iconSvg=\"warning-triangle\" class=\"warning\" [height]=\"20\" [width]=\"20\"></pry-icon>\n }\n {{\n version.id === version.dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : ('@pry.dataset.version.state.' + version.state | i18n)\n }}\n </td>\n @if (version.state === 'ACTIVE' || version.state === 'INACTIVE') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openInfoModal(version)\">Consulter</button>\n </td>\n } @else if (version.state === 'ERROR' || version.state === 'WARNING') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openErrorModal(version)\">\n {{ version.state === 'ERROR' ? 'Consulter erreurs' : 'Consulter warnings' }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <pry-paginator\n [action]=\"loadDataAction()\"\n [nbPerPage]=\"10\"\n [totalItemNb]=\"(totalVersionCount$ | async)!\"\n class=\"u-self-center\"\n ></pry-paginator>\n</div>\n", dependencies: [{ kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PryPaginatorComponent, selector: "pry-paginator", inputs: ["action", "nbPerPage", "totalItemNb", "mode"], outputs: ["pageChange"] }, { kind: "component", type: i2.PrySortHeaderComponent, selector: "th[prySortHeader]", inputs: ["prySortHeader"], outputs: ["sortChange"] }, { kind: "directive", type: i2.PrySortHeaderDirective, selector: "[prySortHeader]" }, { kind: "directive", type: i2.PrySortTableDirective, selector: "[prySortTable]", inputs: ["prySortActive", "prySortDirection"], outputs: ["prySortChange"] }, { kind: "component", type: i5.PryImportCssComponent, selector: "pry-import-css" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] }); }
83
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryImportListComponent, selector: "pry-import-list", inputs: { refreshClick: { classPropertyName: "refreshClick", publicName: "refreshClick", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<pry-import-css></pry-import-css>\n<div class=\"o-import-list u-display-flex -column -gap-20\">\n <h1 class=\"a-h1\">{{ '@pry.importList.title' | i18n }}</h1>\n <div class=\"o-import-list__filters u-display-flex -gap-20\">\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__dataset-filter\" #dsRef>\n <label class=\"a-label m-filter__label\" for=\"dataset_name_filter\">\n {{ '@pry.importList.filter.dsName' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"dataset_name_filter\"\n [items]=\"datasets$ | async\"\n [(ngModel)]=\"filters.dataset\"\n (ngModelChange)=\"updateFilters()\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n aria-labelledby=\"item-label\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [elementRef]=\"dsRef\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__state-filter\" #statusRef>\n <label class=\"a-label m-filter__label\" for=\"import_status\">\n {{ '@pry.importList.filter.status' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"import_status\"\n [items]=\"possibleStatus\"\n [(ngModel)]=\"filters.status\"\n (ngModelChange)=\"updateFilters()\"\n [clearable]=\"true\"\n aria-labelledby=\"item-label\"\n [elementRef]=\"statusRef\"\n i18nPrefix=\"@pry.dataset.version.stateFilter.\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__date-filter\">\n <fieldset class=\"u-display-flex -align-center\">\n <legend class=\"a-label m-filter__label\">{{ '@pry.importList.filter.date' | i18n }}&nbsp;:&nbsp;</legend>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMin\" (ngModelChange)=\"updateFilters()\" />\n <span class=\"m-filter__date-input-separator\">&nbsp;-&nbsp;</span>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMax\" (ngModelChange)=\"updateFilters()\" />\n </fieldset>\n </div>\n <button type=\"button\" class=\"a-btn a-btn--icon-only u-self-center\" (click)=\"clearFilters()\">\n <pry-icon iconSvg=\"clear_filter\" [width]=\"30\" [height]=\"30\"></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"loadData()\">\n {{ '@pry.toolbox.apply' | i18n }}\n <pry-icon iconSvg=\"refresh_filter\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n </div>\n <div class=\"o-import-list__content\">\n <table\n class=\"a-table\"\n prySortTable\n (prySortChange)=\"sortChange($event)\"\n [prySortDirection]=\"sort.sortBy\"\n [prySortActive]=\"sort.orderBy\"\n >\n <caption>\n {{\n '@pry.admin.dataset.title' | i18n\n }},\n {{\n '@pry.action.sortableColumnHeader' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th id=\"import_list_header_dataset\" prySortHeader=\"DATASET_NAME\">\n {{ '@pry.importList.dsName' | i18n }}\n </th>\n <th>{{ '@pry.importList.number' | i18n }}</th>\n <th id=\"import_list_header_date\" prySortHeader=\"DATE\" (sortChange)=\"sortChange($event)\">\n {{ '@pry.importList.date' | i18n }}\n </th>\n <th>{{ '@pry.importList.status' | i18n }}</th>\n <th>{{ '@pry.importList.actions' | i18n }}</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (version of datasetVersions$ | async; track version.id) {\n <tr>\n <td>{{ version.dataset.name }}</td>\n <td>\n {{ version.version }}\n </td>\n <td>\n {{ version.productionDate | date: 'dd/MM/yyyy HH:mm' }}\n </td>\n <td class=\"u-display-flex -align-center -cell-with-icon\">\n @if (version.state === 'ACTIVE') {\n <pry-icon iconSvg=\"check\" class=\"check\" [height]=\"20\" [width]=\"20\"></pry-icon>\n } @else if (version.state === 'WARNING' || version.state === 'ERROR') {\n <pry-icon iconSvg=\"warning-triangle\" class=\"warning\" [height]=\"20\" [width]=\"20\"></pry-icon>\n }\n {{\n version.id === version.dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : ('@pry.dataset.version.state.' + version.state | i18n)\n }}\n </td>\n @if (version.state === 'ACTIVE' || version.state === 'INACTIVE') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openInfoModal(version)\">Consulter</button>\n </td>\n } @else if (version.state === 'ERROR' || version.state === 'WARNING') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openErrorModal(version)\">\n {{ version.state === 'ERROR' ? 'Consulter erreurs' : 'Consulter warnings' }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <pry-paginator\n [action]=\"loadDataAction()\"\n [nbPerPage]=\"10\"\n [totalItemNb]=\"(totalVersionCount$ | async)!\"\n class=\"u-self-center\"\n [goBackToFirstPage]=\"goBackToFirstPage$ | async\"\n ></pry-paginator>\n</div>\n", dependencies: [{ kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PryPaginatorComponent, selector: "pry-paginator", inputs: ["action", "nbPerPage", "totalItemNb", "mode", "goBackToFirstPage"], outputs: ["pageChange"] }, { kind: "component", type: i2.PrySortHeaderComponent, selector: "th[prySortHeader]", inputs: ["prySortHeader"], outputs: ["sortChange"] }, { kind: "directive", type: i2.PrySortHeaderDirective, selector: "[prySortHeader]" }, { kind: "directive", type: i2.PrySortTableDirective, selector: "[prySortTable]", inputs: ["prySortActive", "prySortDirection"], outputs: ["prySortChange"] }, { kind: "component", type: i5.PryImportCssComponent, selector: "pry-import-css" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] }); }
76
84
  }
77
85
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportListComponent, decorators: [{
78
86
  type: Component,
79
- args: [{ selector: 'pry-import-list', template: "<pry-import-css></pry-import-css>\n<div class=\"o-import-list u-display-flex -column -gap-20\">\n <h1 class=\"a-h1\">{{ '@pry.importList.title' | i18n }}</h1>\n <div class=\"o-import-list__filters u-display-flex -gap-20\">\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__dataset-filter\" #dsRef>\n <label class=\"a-label m-filter__label\" for=\"dataset_name_filter\">\n {{ '@pry.importList.filter.dsName' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"dataset_name_filter\"\n [items]=\"datasets$ | async\"\n [(ngModel)]=\"filters.dataset\"\n (ngModelChange)=\"updateFilters()\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n aria-labelledby=\"item-label\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [elementRef]=\"dsRef\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__state-filter\" #statusRef>\n <label class=\"a-label m-filter__label\" for=\"import_status\">\n {{ '@pry.importList.filter.status' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"import_status\"\n [items]=\"possibleStatus\"\n [(ngModel)]=\"filters.status\"\n (ngModelChange)=\"updateFilters()\"\n [clearable]=\"true\"\n aria-labelledby=\"item-label\"\n [elementRef]=\"statusRef\"\n i18nPrefix=\"@pry.dataset.version.stateFilter.\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__date-filter\">\n <fieldset class=\"u-display-flex -align-center\">\n <legend class=\"a-label m-filter__label\">{{ '@pry.importList.filter.date' | i18n }}&nbsp;:&nbsp;</legend>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMin\" (ngModelChange)=\"updateFilters()\" />\n <span class=\"m-filter__date-input-separator\">&nbsp;-&nbsp;</span>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMax\" (ngModelChange)=\"updateFilters()\" />\n </fieldset>\n </div>\n <button type=\"button\" class=\"a-btn a-btn--icon-only u-self-center\" (click)=\"clearFilters()\">\n <pry-icon iconSvg=\"clear_filter\" [width]=\"30\" [height]=\"30\"></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"loadData()\">\n {{ '@pry.toolbox.apply' | i18n }}\n <pry-icon iconSvg=\"refresh_filter\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n </div>\n <div class=\"o-import-list__content\">\n <table class=\"a-table\" prySortTable (prySortChange)=\"sortChange($event)\">\n <caption>\n {{\n '@pry.admin.dataset.title' | i18n\n }},\n {{\n '@pry.action.sortableColumnHeader' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th id=\"import_list_header_dataset\" prySortHeader=\"DATASET_NAME\">\n {{ '@pry.importList.dsName' | i18n }}\n </th>\n <th>{{ '@pry.importList.number' | i18n }}</th>\n <th id=\"import_list_header_date\" prySortHeader=\"DATE\" (sortChange)=\"sortChange($event)\">\n {{ '@pry.importList.date' | i18n }}\n </th>\n <th>{{ '@pry.importList.status' | i18n }}</th>\n <th>{{ '@pry.importList.actions' | i18n }}</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (version of datasetVersions$ | async; track version.id) {\n <tr>\n <td>{{ version.dataset.name }}</td>\n <td>\n {{ version.version }}\n </td>\n <td>\n {{ version.productionDate | date: 'dd/MM/yyyy HH:mm' }}\n </td>\n <td class=\"u-display-flex -align-center -cell-with-icon\">\n @if (version.state === 'ACTIVE') {\n <pry-icon iconSvg=\"check\" class=\"check\" [height]=\"20\" [width]=\"20\"></pry-icon>\n } @else if (version.state === 'WARNING' || version.state === 'ERROR') {\n <pry-icon iconSvg=\"warning-triangle\" class=\"warning\" [height]=\"20\" [width]=\"20\"></pry-icon>\n }\n {{\n version.id === version.dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : ('@pry.dataset.version.state.' + version.state | i18n)\n }}\n </td>\n @if (version.state === 'ACTIVE' || version.state === 'INACTIVE') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openInfoModal(version)\">Consulter</button>\n </td>\n } @else if (version.state === 'ERROR' || version.state === 'WARNING') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openErrorModal(version)\">\n {{ version.state === 'ERROR' ? 'Consulter erreurs' : 'Consulter warnings' }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <pry-paginator\n [action]=\"loadDataAction()\"\n [nbPerPage]=\"10\"\n [totalItemNb]=\"(totalVersionCount$ | async)!\"\n class=\"u-self-center\"\n ></pry-paginator>\n</div>\n" }]
87
+ args: [{ selector: 'pry-import-list', template: "<pry-import-css></pry-import-css>\n<div class=\"o-import-list u-display-flex -column -gap-20\">\n <h1 class=\"a-h1\">{{ '@pry.importList.title' | i18n }}</h1>\n <div class=\"o-import-list__filters u-display-flex -gap-20\">\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__dataset-filter\" #dsRef>\n <label class=\"a-label m-filter__label\" for=\"dataset_name_filter\">\n {{ '@pry.importList.filter.dsName' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"dataset_name_filter\"\n [items]=\"datasets$ | async\"\n [(ngModel)]=\"filters.dataset\"\n (ngModelChange)=\"updateFilters()\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n aria-labelledby=\"item-label\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [elementRef]=\"dsRef\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__state-filter\" #statusRef>\n <label class=\"a-label m-filter__label\" for=\"import_status\">\n {{ '@pry.importList.filter.status' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"import_status\"\n [items]=\"possibleStatus\"\n [(ngModel)]=\"filters.status\"\n (ngModelChange)=\"updateFilters()\"\n [clearable]=\"true\"\n aria-labelledby=\"item-label\"\n [elementRef]=\"statusRef\"\n i18nPrefix=\"@pry.dataset.version.stateFilter.\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown o-import-list__date-filter\">\n <fieldset class=\"u-display-flex -align-center\">\n <legend class=\"a-label m-filter__label\">{{ '@pry.importList.filter.date' | i18n }}&nbsp;:&nbsp;</legend>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMin\" (ngModelChange)=\"updateFilters()\" />\n <span class=\"m-filter__date-input-separator\">&nbsp;-&nbsp;</span>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMax\" (ngModelChange)=\"updateFilters()\" />\n </fieldset>\n </div>\n <button type=\"button\" class=\"a-btn a-btn--icon-only u-self-center\" (click)=\"clearFilters()\">\n <pry-icon iconSvg=\"clear_filter\" [width]=\"30\" [height]=\"30\"></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"loadData()\">\n {{ '@pry.toolbox.apply' | i18n }}\n <pry-icon iconSvg=\"refresh_filter\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n </div>\n <div class=\"o-import-list__content\">\n <table\n class=\"a-table\"\n prySortTable\n (prySortChange)=\"sortChange($event)\"\n [prySortDirection]=\"sort.sortBy\"\n [prySortActive]=\"sort.orderBy\"\n >\n <caption>\n {{\n '@pry.admin.dataset.title' | i18n\n }},\n {{\n '@pry.action.sortableColumnHeader' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th id=\"import_list_header_dataset\" prySortHeader=\"DATASET_NAME\">\n {{ '@pry.importList.dsName' | i18n }}\n </th>\n <th>{{ '@pry.importList.number' | i18n }}</th>\n <th id=\"import_list_header_date\" prySortHeader=\"DATE\" (sortChange)=\"sortChange($event)\">\n {{ '@pry.importList.date' | i18n }}\n </th>\n <th>{{ '@pry.importList.status' | i18n }}</th>\n <th>{{ '@pry.importList.actions' | i18n }}</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (version of datasetVersions$ | async; track version.id) {\n <tr>\n <td>{{ version.dataset.name }}</td>\n <td>\n {{ version.version }}\n </td>\n <td>\n {{ version.productionDate | date: 'dd/MM/yyyy HH:mm' }}\n </td>\n <td class=\"u-display-flex -align-center -cell-with-icon\">\n @if (version.state === 'ACTIVE') {\n <pry-icon iconSvg=\"check\" class=\"check\" [height]=\"20\" [width]=\"20\"></pry-icon>\n } @else if (version.state === 'WARNING' || version.state === 'ERROR') {\n <pry-icon iconSvg=\"warning-triangle\" class=\"warning\" [height]=\"20\" [width]=\"20\"></pry-icon>\n }\n {{\n version.id === version.dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : ('@pry.dataset.version.state.' + version.state | i18n)\n }}\n </td>\n @if (version.state === 'ACTIVE' || version.state === 'INACTIVE') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openInfoModal(version)\">Consulter</button>\n </td>\n } @else if (version.state === 'ERROR' || version.state === 'WARNING') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openErrorModal(version)\">\n {{ version.state === 'ERROR' ? 'Consulter erreurs' : 'Consulter warnings' }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <pry-paginator\n [action]=\"loadDataAction()\"\n [nbPerPage]=\"10\"\n [totalItemNb]=\"(totalVersionCount$ | async)!\"\n class=\"u-self-center\"\n [goBackToFirstPage]=\"goBackToFirstPage$ | async\"\n ></pry-paginator>\n</div>\n" }]
80
88
  }], ctorParameters: () => [{ type: i1.Store }, { type: i2.PryDialogService }] });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvaW1wb3J0L2NvbXBvbmVudHMvbGlzdC9pbXBvcnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9pbXBvcnQvY29tcG9uZW50cy9saXN0L2ltcG9ydC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFVLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFekYsT0FBTyxFQUdMLGlCQUFpQixFQUNqQixtQkFBbUIsRUFHbkIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN6QixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQU05RCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsd0JBQXdCO0lBZ0JsRSxZQUNVLEtBQVksRUFDWixNQUF3QjtRQUVoQyxLQUFLLEVBQUUsQ0FBQztRQUhBLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQWpCbEMsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLGlCQUFZLEdBQUcsS0FBSyxFQUFvQixDQUFDO1FBR3pDLG1CQUFjLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUdwRyxZQUFPLEdBQThF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QXlIQTs7MkZEckdhLHNCQUFzQjtrQkFKbEMsU0FBUzsrQkFDRSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgaW5wdXQsIE9uSW5pdCwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIERhdGFzZXQsXG4gIERhdGFzZXRWZXJzaW9uLFxuICBEYXRhU291cmNlQWN0aW9ucyxcbiAgRGF0YVNvdXJjZVNlbGVjdG9ycyxcbiAgUHJ5RGlhbG9nU2VydmljZSxcbiAgUHJ5U29ydENoYW5nZSxcbiAgUHJ5U3RhdHVzTW9kYWxDb21wb25lbnQsXG4gIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZVxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJ5VmVyc2lvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdmVyc2lvbi1tb2RhbC92ZXJzaW9uLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktaW1wb3J0LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1wb3J0LWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeUltcG9ydExpc3RDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBsb2FkRGF0YUFjdGlvbiA9IHNpZ25hbChEYXRhU291cmNlQWN0aW9ucy5kYXRhc2V0Lmxpc3RWZXJzaW9ucyh7fSkpO1xuICByZWZyZXNoQ2xpY2sgPSBpbnB1dDxPYnNlcnZhYmxlPHZvaWQ+PigpO1xuXG4gIGRhdGFzZXRzJDogT2JzZXJ2YWJsZTxEYXRhc2V0W10+O1xuICBwb3NzaWJsZVN0YXR1cyA9IFsnTE9BRElORycsICdJTkRFWElORycsICdJTkFDVElWRScsICdFUlJPUicsICdBQ1RJVkUnLCAnREVMRVRJTkcnLCAnREVMRVRFX0VSUk9SJ107XG4gIGRhdGFzZXRWZXJzaW9ucyQ6IE9ic2VydmFibGU8RGF0YXNldFZlcnNpb25bXT47XG4gIHRvdGFsVmVyc2lvbkNvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBmaWx0ZXJzOiB7IGRhdGFzZXQ/OiBzdHJpbmc7IHN0YXR1cz86IHN0cmluZzsgZGF0ZU1pbj86IHN0cmluZzsgZGF0ZU1heD86IHN0cmluZyB9ID0ge1xuICAgIGRhdGFzZXQ6IHVuZGVmaW5lZCxcbiAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICBkYXRlTWluOiB1bmRlZmluZWQsXG4gICAgZGF0ZU1heDogdW5kZWZpbmVkXG4gIH07XG4gIHNvcnQ6IHsgb3JkZXJCeT86ICdEQVRBU0VUX05BTUUnIHwgJ0RBVEUnOyBzb3J0Qnk/OiAnYXNjJyB8ICdkZXNjJyB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IFByeURpYWxvZ1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQubG9hZERhdGFzZXQoKSk7XG4gICAgdGhpcy5kYXRhc2V0cyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmRhdGFzZXRzKTtcbiAgICB0aGlzLmRhdGFzZXRWZXJzaW9ucyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmRhdGFzZXRWZXJzaW9ucyk7XG4gICAgdGhpcy50b3RhbFZlcnNpb25Db3VudCQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLnRvdGFsVmVyc2lvbkNvdW50KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5yZWZyZXNoQ2xpY2soKT8uc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZERhdGEoKSkpO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVycyA9IHsgZGF0YXNldDogdW5kZWZpbmVkLCBzdGF0dXM6IHVuZGVmaW5lZCwgZGF0ZU1pbjogdW5kZWZpbmVkLCBkYXRlTWF4OiB1bmRlZmluZWQgfTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHtcbiAgICAgIC4uLnRoaXMubG9hZERhdGFBY3Rpb24oKSxcbiAgICAgIGxpbWl0OiAxMCxcbiAgICAgIC4uLnRoaXMuc29ydFxuICAgIH0pO1xuICB9XG5cbiAgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaCh7XG4gICAgICAuLi50aGlzLmxvYWREYXRhQWN0aW9uKCksXG4gICAgICBsaW1pdDogMTAsXG4gICAgICAuLi50aGlzLmZpbHRlcnMsXG4gICAgICAuLi50aGlzLnNvcnRcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5JbmZvTW9kYWwodmVyc2lvbjogRGF0YXNldFZlcnNpb24pIHtcbiAgICB0aGlzLmRpYWxvZy5vcGVuKFByeVZlcnNpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyB2ZXJzaW9uIH0sXG4gICAgICBvdmVybGF5Q29uZmlnOiB7XG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KCkuY2VudGVyVmVydGljYWxseSgpLnJpZ2h0KCcyMHB4JyksXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBiYWNrZHJvcENsYXNzOiAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvcGVuRXJyb3JNb2RhbCh2ZXJzaW9uOiBEYXRhc2V0VmVyc2lvbikge1xuICAgIHRoaXMuZGlhbG9nLm9wZW4oUHJ5U3RhdHVzTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHsgdmVyc2lvbiB9XG4gICAgfSk7XG4gIH1cblxuICBzb3J0Q2hhbmdlKCRldmVudDogUHJ5U29ydENoYW5nZSkge1xuICAgIHRoaXMuc29ydC5zb3J0QnkgPSAkZXZlbnQuZGlyZWN0aW9uIGFzICdhc2MnIHwgJ2Rlc2MnO1xuICAgIHRoaXMuc29ydC5vcmRlckJ5ID0gJGV2ZW50LmFjdGl2ZSBhcyAnREFUQVNFVF9OQU1FJyB8ICdEQVRFJztcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJzKCkge1xuICAgIHRoaXMubG9hZERhdGFBY3Rpb24udXBkYXRlKChsb2FkRGF0YUFjdGlvbikgPT4gKHsgLi4ubG9hZERhdGFBY3Rpb24sIC4uLnRoaXMuZmlsdGVycyB9KSk7XG4gIH1cbn1cbiIsIjxwcnktaW1wb3J0LWNzcz48L3ByeS1pbXBvcnQtY3NzPlxuPGRpdiBjbGFzcz1cIm8taW1wb3J0LWxpc3QgdS1kaXNwbGF5LWZsZXggLWNvbHVtbiAtZ2FwLTIwXCI+XG4gIDxoMSBjbGFzcz1cImEtaDFcIj57eyAnQHByeS5pbXBvcnRMaXN0LnRpdGxlJyB8IGkxOG4gfX08L2gxPlxuICA8ZGl2IGNsYXNzPVwiby1pbXBvcnQtbGlzdF9fZmlsdGVycyB1LWRpc3BsYXktZmxleCAtZ2FwLTIwXCI+XG4gICAgPGRpdiBjbGFzcz1cIm0tZmlsdGVyX19pbnB1dC13cmFwcGVyIG0tZmlsdGVyX19pbnB1dC13cmFwcGVyLS1kcm9wZG93biBvLWltcG9ydC1saXN0X19kYXRhc2V0LWZpbHRlclwiICNkc1JlZj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWwgbS1maWx0ZXJfX2xhYmVsXCIgZm9yPVwiZGF0YXNldF9uYW1lX2ZpbHRlclwiPlxuICAgICAgICB7eyAnQHByeS5pbXBvcnRMaXN0LmZpbHRlci5kc05hbWUnIHwgaTE4biB9fSZuYnNwOzombmJzcDtcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICBpZD1cImRhdGFzZXRfbmFtZV9maWx0ZXJcIlxuICAgICAgICBbaXRlbXNdPVwiZGF0YXNldHMkIHwgYXN5bmNcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlcnMuZGF0YXNldFwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpbHRlcnMoKVwiXG4gICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIml0ZW0tbGFiZWxcIlxuICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICBbZWxlbWVudFJlZl09XCJkc1JlZlwiXG4gICAgICA+PC9wcnktc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLWZpbHRlcl9faW5wdXQtd3JhcHBlciBtLWZpbHRlcl9faW5wdXQtd3JhcHBlci0tZHJvcGRvd24gby1pbXBvcnQtbGlzdF9fc3RhdGUtZmlsdGVyXCIgI3N0YXR1c1JlZj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWwgbS1maWx0ZXJfX2xhYmVsXCIgZm9yPVwiaW1wb3J0X3N0YXR1c1wiPlxuICAgICAgICB7eyAnQHByeS5pbXBvcnRMaXN0LmZpbHRlci5zdGF0dXMnIHwgaTE4biB9fSZuYnNwOzombmJzcDtcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICBpZD1cImltcG9ydF9zdGF0dXNcIlxuICAgICAgICBbaXRlbXNdPVwicG9zc2libGVTdGF0dXNcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlcnMuc3RhdHVzXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRmlsdGVycygpXCJcbiAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiaXRlbS1sYWJlbFwiXG4gICAgICAgIFtlbGVtZW50UmVmXT1cInN0YXR1c1JlZlwiXG4gICAgICAgIGkxOG5QcmVmaXg9XCJAcHJ5LmRhdGFzZXQudmVyc2lvbi5zdGF0ZUZpbHRlci5cIlxuICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibS1maWx0ZXJfX2lucHV0LXdyYXBwZXIgbS1maWx0ZXJfX2lucHV0LXdyYXBwZXItLWRyb3Bkb3duIG8taW1wb3J0LWxpc3RfX2RhdGUtZmlsdGVyXCI+XG4gICAgICA8ZmllbGRzZXQgY2xhc3M9XCJ1LWRpc3BsYXktZmxleCAtYWxpZ24tY2VudGVyXCI+XG4gICAgICAgIDxsZWdlbmQgY2xhc3M9XCJhLWxhYmVsIG0tZmlsdGVyX19sYWJlbFwiPnt7ICdAcHJ5LmltcG9ydExpc3QuZmlsdGVyLmRhdGUnIHwgaTE4biB9fSZuYnNwOzombmJzcDs8L2xlZ2VuZD5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwibS1maWx0ZXJfX2lucHV0XCIgdHlwZT1cImRhdGVcIiBbKG5nTW9kZWwpXT1cImZpbHRlcnMuZGF0ZU1pblwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpbHRlcnMoKVwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibS1maWx0ZXJfX2RhdGUtaW5wdXQtc2VwYXJhdG9yXCI+Jm5ic3A7LSZuYnNwOzwvc3Bhbj5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwibS1maWx0ZXJfX2lucHV0XCIgdHlwZT1cImRhdGVcIiBbKG5nTW9kZWwpXT1cImZpbHRlcnMuZGF0ZU1heFwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpbHRlcnMoKVwiIC8+XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seSB1LXNlbGYtY2VudGVyXCIgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCI+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsZWFyX2ZpbHRlclwiIFt3aWR0aF09XCIzMFwiIFtoZWlnaHRdPVwiMzBcIj48L3ByeS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiAoY2xpY2spPVwibG9hZERhdGEoKVwiPlxuICAgICAge3sgJ0BwcnkudG9vbGJveC5hcHBseScgfCBpMThuIH19XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInJlZnJlc2hfZmlsdGVyXCIgW3dpZHRoXT1cIjE4XCIgW2hlaWdodF09XCIxOFwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiby1pbXBvcnQtbGlzdF9fY29udGVudFwiPlxuICAgIDx0YWJsZSBjbGFzcz1cImEtdGFibGVcIiBwcnlTb3J0VGFibGUgKHByeVNvcnRDaGFuZ2UpPVwic29ydENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8Y2FwdGlvbj5cbiAgICAgICAge3tcbiAgICAgICAgICAnQHByeS5hZG1pbi5kYXRhc2V0LnRpdGxlJyB8IGkxOG5cbiAgICAgICAgfX0sXG4gICAgICAgIHt7XG4gICAgICAgICAgJ0BwcnkuYWN0aW9uLnNvcnRhYmxlQ29sdW1uSGVhZGVyJyB8IGkxOG5cbiAgICAgICAgfX1cbiAgICAgIDwvY2FwdGlvbj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCBpZD1cImltcG9ydF9saXN0X2hlYWRlcl9kYXRhc2V0XCIgcHJ5U29ydEhlYWRlcj1cIkRBVEFTRVRfTkFNRVwiPlxuICAgICAgICAgICAge3sgJ0BwcnkuaW1wb3J0TGlzdC5kc05hbWUnIHwgaTE4biB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoPnt7ICdAcHJ5LmltcG9ydExpc3QubnVtYmVyJyB8IGkxOG4gfX08L3RoPlxuICAgICAgICAgIDx0aCBpZD1cImltcG9ydF9saXN0X2hlYWRlcl9kYXRlXCIgcHJ5U29ydEhlYWRlcj1cIkRBVEVcIiAoc29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LmltcG9ydExpc3QuZGF0ZScgfCBpMThuIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGg+e3sgJ0BwcnkuaW1wb3J0TGlzdC5zdGF0dXMnIHwgaTE4biB9fTwvdGg+XG4gICAgICAgICAgPHRoPnt7ICdAcHJ5LmltcG9ydExpc3QuYWN0aW9ucycgfCBpMThuIH19PC90aD5cbiAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIEBmb3IgKHZlcnNpb24gb2YgZGF0YXNldFZlcnNpb25zJCB8IGFzeW5jOyB0cmFjayB2ZXJzaW9uLmlkKSB7XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkPnt7IHZlcnNpb24uZGF0YXNldC5uYW1lIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAge3sgdmVyc2lvbi52ZXJzaW9uIH19XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICB7eyB2ZXJzaW9uLnByb2R1Y3Rpb25EYXRlIHwgZGF0ZTogJ2RkL01NL3l5eXkgSEg6bW0nIH19XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLWFsaWduLWNlbnRlciAtY2VsbC13aXRoLWljb25cIj5cbiAgICAgICAgICAgICAgQGlmICh2ZXJzaW9uLnN0YXRlID09PSAnQUNUSVZFJykge1xuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2hlY2tcIiBjbGFzcz1cImNoZWNrXCIgW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHZlcnNpb24uc3RhdGUgPT09ICdXQVJOSU5HJyB8fCB2ZXJzaW9uLnN0YXRlID09PSAnRVJST1InKSB7XG4gICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJ3YXJuaW5nLXRyaWFuZ2xlXCIgY2xhc3M9XCJ3YXJuaW5nXCIgW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICB2ZXJzaW9uLmlkID09PSB2ZXJzaW9uLmRhdGFzZXQuYWN0aXZlVmVyc2lvbj8uaWRcbiAgICAgICAgICAgICAgICAgID8gJ0BwcnkuZGF0YXNldC52ZXJzaW9uLnN0YXRlLmN1cnJlbnRseUFjdGl2ZSdcbiAgICAgICAgICAgICAgICAgIDogKCdAcHJ5LmRhdGFzZXQudmVyc2lvbi5zdGF0ZS4nICsgdmVyc2lvbi5zdGF0ZSB8IGkxOG4pXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgQGlmICh2ZXJzaW9uLnN0YXRlID09PSAnQUNUSVZFJyB8fCB2ZXJzaW9uLnN0YXRlID09PSAnSU5BQ1RJVkUnKSB7XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiIChjbGljayk9XCJvcGVuSW5mb01vZGFsKHZlcnNpb24pXCI+Q29uc3VsdGVyPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICB9IEBlbHNlIGlmICh2ZXJzaW9uLnN0YXRlID09PSAnRVJST1InIHx8IHZlcnNpb24uc3RhdGUgPT09ICdXQVJOSU5HJykge1xuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwib3BlbkVycm9yTW9kYWwodmVyc2lvbilcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHZlcnNpb24uc3RhdGUgPT09ICdFUlJPUicgPyAnQ29uc3VsdGVyIGVycmV1cnMnIDogJ0NvbnN1bHRlciB3YXJuaW5ncycgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvZGl2PlxuICA8cHJ5LXBhZ2luYXRvclxuICAgIFthY3Rpb25dPVwibG9hZERhdGFBY3Rpb24oKVwiXG4gICAgW25iUGVyUGFnZV09XCIxMFwiXG4gICAgW3RvdGFsSXRlbU5iXT1cIih0b3RhbFZlcnNpb25Db3VudCQgfCBhc3luYykhXCJcbiAgICBjbGFzcz1cInUtc2VsZi1jZW50ZXJcIlxuICA+PC9wcnktcGFnaW5hdG9yPlxuPC9kaXY+XG4iXX0=
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvaW1wb3J0L2NvbXBvbmVudHMvbGlzdC9pbXBvcnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9pbXBvcnQvY29tcG9uZW50cy9saXN0L2ltcG9ydC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFVLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFekYsT0FBTyxFQUdMLGlCQUFpQixFQUNqQixtQkFBbUIsRUFHbkIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN6QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7O0FBTTlELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSx3QkFBd0I7SUFpQmxFLFlBQ1UsS0FBWSxFQUNaLE1BQXdCO1FBRWhDLEtBQUssRUFBRSxDQUFDO1FBSEEsVUFBSyxHQUFMLEtBQUssQ0FBTztRQUNaLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBbEJsQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLGlCQUFZLEdBQUcsS0FBSyxFQUFvQixDQUFDO1FBR3pDLG1CQUFjLEdBQUcsQ0FBQyxTQUFTLEVBQUUs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LFNBQTJCLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQWlDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQzs4R0FsRlUsc0JBQXNCO2tHQUF0QixzQkFBc0IsdU9DcEJuQyxtOEtBZ0lBOzsyRkQ1R2Esc0JBQXNCO2tCQUpsQyxTQUFTOytCQUNFLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZWZmZWN0LCBpbnB1dCwgT25Jbml0LCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgRGF0YXNldCxcbiAgRGF0YXNldFZlcnNpb24sXG4gIERhdGFTb3VyY2VBY3Rpb25zLFxuICBEYXRhU291cmNlU2VsZWN0b3JzLFxuICBQcnlEaWFsb2dTZXJ2aWNlLFxuICBQcnlTb3J0Q2hhbmdlLFxuICBQcnlTdGF0dXNNb2RhbENvbXBvbmVudCxcbiAgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcnlWZXJzaW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi92ZXJzaW9uLW1vZGFsL3ZlcnNpb24tbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IEdsb2JhbFBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1pbXBvcnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBvcnQtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUHJ5SW1wb3J0TGlzdENvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGxvYWREYXRhQWN0aW9uID0gc2lnbmFsKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQubGlzdFZlcnNpb25zKHsgb3JkZXJCeTogJ0RBVEUnLCBzb3J0Qnk6ICdkZXNjJyB9KSk7XG4gIHJlZnJlc2hDbGljayA9IGlucHV0PE9ic2VydmFibGU8dm9pZD4+KCk7XG5cbiAgZGF0YXNldHMkOiBPYnNlcnZhYmxlPERhdGFzZXRbXT47XG4gIHBvc3NpYmxlU3RhdHVzID0gWydMT0FESU5HJywgJ0lOREVYSU5HJywgJ0lOQUNUSVZFJywgJ0VSUk9SJywgJ0FDVElWRScsICdERUxFVElORycsICdERUxFVEVfRVJST1InXTtcbiAgZGF0YXNldFZlcnNpb25zJDogT2JzZXJ2YWJsZTxEYXRhc2V0VmVyc2lvbltdPjtcbiAgdG90YWxWZXJzaW9uQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGZpbHRlcnM6IHsgZGF0YXNldD86IHN0cmluZzsgc3RhdHVzPzogc3RyaW5nOyBkYXRlTWluPzogc3RyaW5nOyBkYXRlTWF4Pzogc3RyaW5nIH0gPSB7XG4gICAgZGF0YXNldDogdW5kZWZpbmVkLFxuICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgIGRhdGVNaW46IHVuZGVmaW5lZCxcbiAgICBkYXRlTWF4OiB1bmRlZmluZWRcbiAgfTtcbiAgc29ydDogeyBvcmRlckJ5PzogJ0RBVEFTRVRfTkFNRScgfCAnREFURSc7IHNvcnRCeT86ICdhc2MnIHwgJ2Rlc2MnIH0gPSB7IG9yZGVyQnk6ICdEQVRFJywgc29ydEJ5OiAnZGVzYycgfTtcbiAgZ29CYWNrVG9GaXJzdFBhZ2UkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIGRpYWxvZzogUHJ5RGlhbG9nU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGF0YVNvdXJjZUFjdGlvbnMuZGF0YXNldC5sb2FkRGF0YXNldCgpKTtcbiAgICB0aGlzLmRhdGFzZXRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZGF0YXNldHMpO1xuICAgIHRoaXMuZGF0YXNldFZlcnNpb25zJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZGF0YXNldFZlcnNpb25zKTtcbiAgICB0aGlzLnRvdGFsVmVyc2lvbkNvdW50JCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMudG90YWxWZXJzaW9uQ291bnQpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnJlZnJlc2hDbGljaygpPy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sb2FkRGF0YSgpKSk7XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJzID0geyBkYXRhc2V0OiB1bmRlZmluZWQsIHN0YXR1czogdW5kZWZpbmVkLCBkYXRlTWluOiB1bmRlZmluZWQsIGRhdGVNYXg6IHVuZGVmaW5lZCB9O1xuICAgIHRoaXMubG9hZERhdGFBY3Rpb24udXBkYXRlKChsb2FkRGF0YUFjdGlvbikgPT4gKHsgLi4ubG9hZERhdGFBY3Rpb24sIG9mZnNldDogMCB9KSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaCh7XG4gICAgICAuLi50aGlzLmxvYWREYXRhQWN0aW9uKCksXG4gICAgICBsaW1pdDogMTAsXG4gICAgICAuLi50aGlzLnNvcnRcbiAgICB9KTtcbiAgICB0aGlzLmdvQmFja1RvRmlyc3RQYWdlKCk7XG4gIH1cblxuICBsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHtcbiAgICAgIC4uLnRoaXMubG9hZERhdGFBY3Rpb24oKSxcbiAgICAgIGxpbWl0OiAxMFxuICAgIH0pO1xuICAgIHRoaXMuZ29CYWNrVG9GaXJzdFBhZ2UoKTtcbiAgfVxuXG4gIG9wZW5JbmZvTW9kYWwodmVyc2lvbjogRGF0YXNldFZlcnNpb24pIHtcbiAgICB0aGlzLmRpYWxvZy5vcGVuKFByeVZlcnNpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyB2ZXJzaW9uIH0sXG4gICAgICBvdmVybGF5Q29uZmlnOiB7XG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KCkuY2VudGVyVmVydGljYWxseSgpLnJpZ2h0KCcyMHB4JyksXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBiYWNrZHJvcENsYXNzOiAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvcGVuRXJyb3JNb2RhbCh2ZXJzaW9uOiBEYXRhc2V0VmVyc2lvbikge1xuICAgIHRoaXMuZGlhbG9nLm9wZW4oUHJ5U3RhdHVzTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHsgdmVyc2lvbiB9XG4gICAgfSk7XG4gIH1cblxuICBzb3J0Q2hhbmdlKCRldmVudDogUHJ5U29ydENoYW5nZSkge1xuICAgIHRoaXMuc29ydC5zb3J0QnkgPSAkZXZlbnQuZGlyZWN0aW9uIGFzICdhc2MnIHwgJ2Rlc2MnO1xuICAgIHRoaXMuc29ydC5vcmRlckJ5ID0gJGV2ZW50LmFjdGl2ZSBhcyAnREFUQVNFVF9OQU1FJyB8ICdEQVRFJztcbiAgICB0aGlzLmxvYWREYXRhQWN0aW9uLnVwZGF0ZSgobG9hZERhdGFBY3Rpb24pID0+ICh7IC4uLmxvYWREYXRhQWN0aW9uLCAuLi50aGlzLnNvcnQgfSkpO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcnMoKSB7XG4gICAgdGhpcy5sb2FkRGF0YUFjdGlvbi51cGRhdGUoKGxvYWREYXRhQWN0aW9uKSA9PiAoeyAuLi5sb2FkRGF0YUFjdGlvbiwgLi4udGhpcy5maWx0ZXJzIH0pKTtcbiAgfVxuXG4gIGdvQmFja1RvRmlyc3RQYWdlKCkge1xuICAgIHRoaXMuZ29CYWNrVG9GaXJzdFBhZ2UkLm5leHQodHJ1ZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmdvQmFja1RvRmlyc3RQYWdlJC5uZXh0KGZhbHNlKSwgNTApO1xuICB9XG59XG4iLCI8cHJ5LWltcG9ydC1jc3M+PC9wcnktaW1wb3J0LWNzcz5cbjxkaXYgY2xhc3M9XCJvLWltcG9ydC1saXN0IHUtZGlzcGxheS1mbGV4IC1jb2x1bW4gLWdhcC0yMFwiPlxuICA8aDEgY2xhc3M9XCJhLWgxXCI+e3sgJ0BwcnkuaW1wb3J0TGlzdC50aXRsZScgfCBpMThuIH19PC9oMT5cbiAgPGRpdiBjbGFzcz1cIm8taW1wb3J0LWxpc3RfX2ZpbHRlcnMgdS1kaXNwbGF5LWZsZXggLWdhcC0yMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtLWZpbHRlcl9faW5wdXQtd3JhcHBlciBtLWZpbHRlcl9faW5wdXQtd3JhcHBlci0tZHJvcGRvd24gby1pbXBvcnQtbGlzdF9fZGF0YXNldC1maWx0ZXJcIiAjZHNSZWY+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsIG0tZmlsdGVyX19sYWJlbFwiIGZvcj1cImRhdGFzZXRfbmFtZV9maWx0ZXJcIj5cbiAgICAgICAge3sgJ0BwcnkuaW1wb3J0TGlzdC5maWx0ZXIuZHNOYW1lJyB8IGkxOG4gfX0mbmJzcDs6Jm5ic3A7XG4gICAgICA8L2xhYmVsPlxuICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgaWQ9XCJkYXRhc2V0X25hbWVfZmlsdGVyXCJcbiAgICAgICAgW2l0ZW1zXT1cImRhdGFzZXRzJCB8IGFzeW5jXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJzLmRhdGFzZXRcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVGaWx0ZXJzKClcIlxuICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJpdGVtLWxhYmVsXCJcbiAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgW2VsZW1lbnRSZWZdPVwiZHNSZWZcIlxuICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibS1maWx0ZXJfX2lucHV0LXdyYXBwZXIgbS1maWx0ZXJfX2lucHV0LXdyYXBwZXItLWRyb3Bkb3duIG8taW1wb3J0LWxpc3RfX3N0YXRlLWZpbHRlclwiICNzdGF0dXNSZWY+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsIG0tZmlsdGVyX19sYWJlbFwiIGZvcj1cImltcG9ydF9zdGF0dXNcIj5cbiAgICAgICAge3sgJ0BwcnkuaW1wb3J0TGlzdC5maWx0ZXIuc3RhdHVzJyB8IGkxOG4gfX0mbmJzcDs6Jm5ic3A7XG4gICAgICA8L2xhYmVsPlxuICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgaWQ9XCJpbXBvcnRfc3RhdHVzXCJcbiAgICAgICAgW2l0ZW1zXT1cInBvc3NpYmxlU3RhdHVzXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJzLnN0YXR1c1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpbHRlcnMoKVwiXG4gICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIml0ZW0tbGFiZWxcIlxuICAgICAgICBbZWxlbWVudFJlZl09XCJzdGF0dXNSZWZcIlxuICAgICAgICBpMThuUHJlZml4PVwiQHByeS5kYXRhc2V0LnZlcnNpb24uc3RhdGVGaWx0ZXIuXCJcbiAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm0tZmlsdGVyX19pbnB1dC13cmFwcGVyIG0tZmlsdGVyX19pbnB1dC13cmFwcGVyLS1kcm9wZG93biBvLWltcG9ydC1saXN0X19kYXRlLWZpbHRlclwiPlxuICAgICAgPGZpZWxkc2V0IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLWFsaWduLWNlbnRlclwiPlxuICAgICAgICA8bGVnZW5kIGNsYXNzPVwiYS1sYWJlbCBtLWZpbHRlcl9fbGFiZWxcIj57eyAnQHByeS5pbXBvcnRMaXN0LmZpbHRlci5kYXRlJyB8IGkxOG4gfX0mbmJzcDs6Jm5ic3A7PC9sZWdlbmQ+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cIm0tZmlsdGVyX19pbnB1dFwiIHR5cGU9XCJkYXRlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzLmRhdGVNaW5cIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVGaWx0ZXJzKClcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm0tZmlsdGVyX19kYXRlLWlucHV0LXNlcGFyYXRvclwiPiZuYnNwOy0mbmJzcDs8L3NwYW4+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cIm0tZmlsdGVyX19pbnB1dFwiIHR5cGU9XCJkYXRlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzLmRhdGVNYXhcIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVGaWx0ZXJzKClcIiAvPlxuICAgICAgPC9maWVsZHNldD5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHkgdS1zZWxmLWNlbnRlclwiIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbGVhcl9maWx0ZXJcIiBbd2lkdGhdPVwiMzBcIiBbaGVpZ2h0XT1cIjMwXCI+PC9wcnktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCIgKGNsaWNrKT1cImxvYWREYXRhKClcIj5cbiAgICAgIHt7ICdAcHJ5LnRvb2xib3guYXBwbHknIHwgaTE4biB9fVxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJyZWZyZXNoX2ZpbHRlclwiIFt3aWR0aF09XCIxOFwiIFtoZWlnaHRdPVwiMThcIj48L3ByeS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm8taW1wb3J0LWxpc3RfX2NvbnRlbnRcIj5cbiAgICA8dGFibGVcbiAgICAgIGNsYXNzPVwiYS10YWJsZVwiXG4gICAgICBwcnlTb3J0VGFibGVcbiAgICAgIChwcnlTb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbcHJ5U29ydERpcmVjdGlvbl09XCJzb3J0LnNvcnRCeVwiXG4gICAgICBbcHJ5U29ydEFjdGl2ZV09XCJzb3J0Lm9yZGVyQnlcIlxuICAgID5cbiAgICAgIDxjYXB0aW9uPlxuICAgICAgICB7e1xuICAgICAgICAgICdAcHJ5LmFkbWluLmRhdGFzZXQudGl0bGUnIHwgaTE4blxuICAgICAgICB9fSxcbiAgICAgICAge3tcbiAgICAgICAgICAnQHByeS5hY3Rpb24uc29ydGFibGVDb2x1bW5IZWFkZXInIHwgaTE4blxuICAgICAgICB9fVxuICAgICAgPC9jYXB0aW9uPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIGlkPVwiaW1wb3J0X2xpc3RfaGVhZGVyX2RhdGFzZXRcIiBwcnlTb3J0SGVhZGVyPVwiREFUQVNFVF9OQU1FXCI+XG4gICAgICAgICAgICB7eyAnQHByeS5pbXBvcnRMaXN0LmRzTmFtZScgfCBpMThuIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGg+e3sgJ0BwcnkuaW1wb3J0TGlzdC5udW1iZXInIHwgaTE4biB9fTwvdGg+XG4gICAgICAgICAgPHRoIGlkPVwiaW1wb3J0X2xpc3RfaGVhZGVyX2RhdGVcIiBwcnlTb3J0SGVhZGVyPVwiREFURVwiIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAge3sgJ0BwcnkuaW1wb3J0TGlzdC5kYXRlJyB8IGkxOG4gfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aD57eyAnQHByeS5pbXBvcnRMaXN0LnN0YXR1cycgfCBpMThuIH19PC90aD5cbiAgICAgICAgICA8dGg+e3sgJ0BwcnkuaW1wb3J0TGlzdC5hY3Rpb25zJyB8IGkxOG4gfX08L3RoPlxuICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgQGZvciAodmVyc2lvbiBvZiBkYXRhc2V0VmVyc2lvbnMkIHwgYXN5bmM7IHRyYWNrIHZlcnNpb24uaWQpIHtcbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQ+e3sgdmVyc2lvbi5kYXRhc2V0Lm5hbWUgfX08L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICB7eyB2ZXJzaW9uLnZlcnNpb24gfX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIHt7IHZlcnNpb24ucHJvZHVjdGlvbkRhdGUgfCBkYXRlOiAnZGQvTU0veXl5eSBISDptbScgfX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ1LWRpc3BsYXktZmxleCAtYWxpZ24tY2VudGVyIC1jZWxsLXdpdGgtaWNvblwiPlxuICAgICAgICAgICAgICBAaWYgKHZlcnNpb24uc3RhdGUgPT09ICdBQ1RJVkUnKSB7XG4gICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjaGVja1wiIGNsYXNzPVwiY2hlY2tcIiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAodmVyc2lvbi5zdGF0ZSA9PT0gJ1dBUk5JTkcnIHx8IHZlcnNpb24uc3RhdGUgPT09ICdFUlJPUicpIHtcbiAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIndhcm5pbmctdHJpYW5nbGVcIiBjbGFzcz1cIndhcm5pbmdcIiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHZlcnNpb24uaWQgPT09IHZlcnNpb24uZGF0YXNldC5hY3RpdmVWZXJzaW9uPy5pZFxuICAgICAgICAgICAgICAgICAgPyAnQHByeS5kYXRhc2V0LnZlcnNpb24uc3RhdGUuY3VycmVudGx5QWN0aXZlJ1xuICAgICAgICAgICAgICAgICAgOiAoJ0BwcnkuZGF0YXNldC52ZXJzaW9uLnN0YXRlLicgKyB2ZXJzaW9uLnN0YXRlIHwgaTE4bilcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICBAaWYgKHZlcnNpb24uc3RhdGUgPT09ICdBQ1RJVkUnIHx8IHZlcnNpb24uc3RhdGUgPT09ICdJTkFDVElWRScpIHtcbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cIm9wZW5JbmZvTW9kYWwodmVyc2lvbilcIj5Db25zdWx0ZXI8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKHZlcnNpb24uc3RhdGUgPT09ICdFUlJPUicgfHwgdmVyc2lvbi5zdGF0ZSA9PT0gJ1dBUk5JTkcnKSB7XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiIChjbGljayk9XCJvcGVuRXJyb3JNb2RhbCh2ZXJzaW9uKVwiPlxuICAgICAgICAgICAgICAgICAge3sgdmVyc2lvbi5zdGF0ZSA9PT0gJ0VSUk9SJyA/ICdDb25zdWx0ZXIgZXJyZXVycycgOiAnQ29uc3VsdGVyIHdhcm5pbmdzJyB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIH1cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG4gIDxwcnktcGFnaW5hdG9yXG4gICAgW2FjdGlvbl09XCJsb2FkRGF0YUFjdGlvbigpXCJcbiAgICBbbmJQZXJQYWdlXT1cIjEwXCJcbiAgICBbdG90YWxJdGVtTmJdPVwiKHRvdGFsVmVyc2lvbkNvdW50JCB8IGFzeW5jKSFcIlxuICAgIGNsYXNzPVwidS1zZWxmLWNlbnRlclwiXG4gICAgW2dvQmFja1RvRmlyc3RQYWdlXT1cImdvQmFja1RvRmlyc3RQYWdlJCB8IGFzeW5jXCJcbiAgPjwvcHJ5LXBhZ2luYXRvcj5cbjwvZGl2PlxuIl19
@@ -46,4 +46,4 @@ export const DataSourceActions = {
46
46
  getCategoriesSuccess: createAction('[Dataset] Get Categories Success', props())
47
47
  }
48
48
  };
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UuYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLmFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFPbEQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsSUFBSSxFQUFFLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztJQUN2QyxVQUFVLEVBQUU7UUFDVixJQUFJLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxZQUFZLENBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUEwQixDQUFDO1FBQzVFLE9BQU8sRUFBRSxZQUFZLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxFQUFvQixDQUFDO1FBQ3hFLElBQUksRUFBRSxZQUFZLENBQ2hCLG1CQUFtQixFQUNuQixLQUFLLEVBU0QsQ0FDTDtRQUNELE1BQU0sRUFBRSxZQUFZLENBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFrQixDQUFDO1FBQ3BFLFdBQVcsRUFBRSxZQUFZLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxFQUFrQixDQUFDO1FBQy9FLGNBQWMsRUFBRSxZQUFZLENBQUMsOEJBQThCLEVBQUUsS0FBSyxFQUFrQixDQUFDO1FBQ3JGLElBQUksRUFBRSxZQUFZLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxFQUFxRCxDQUFDO1FBQzFHLGlCQUFpQixFQUFFLFlBQVksQ0FDN0Isd0NBQXdDLEVBQ3hDLEtBQUssRUFBd0MsQ0FDOUM7UUFDRCxRQUFRLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBcUQsQ0FBQztRQUN2RyxRQUFRLEVBQUUsWUFBWSxDQUFDLDBCQUEwQixDQUFDO1FBQ2xELFVBQVUsRUFBRSxZQUFZLENBQUMscUJBQXFCLENBQUM7UUFDL0MsVUFBVSxFQUFFLFlBQVksQ0FBQywwQkFBMEIsQ0FBQztLQUNyRDtJQUNELE9BQU8sRUFBRTtRQUNQLFdBQVcsRUFBRSxZQUFZLENBQUMseUJBQXlCLENBQUM7UUFDcEQsYUFBYSxFQUFFLFlBQVksQ0FBQywyQkFBMkIsRUFBRSxLQUFLLEVBQTJCLENBQUM7UUFDMUYsT0FBTyxFQUFFLFlBQVksQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLEVBQWtCLENBQUM7UUFFbEYsWUFBWSxFQUFFLFlBQVksQ0FDeEIsZ0NBQWdDLEVBQ2hDLEtBQUssRUFTRCxDQUNMO1FBQ0QsbUJBQW1CLEVBQUUsWUFBWSxDQUMvQix3Q0FBd0MsRUFDeEMsS0FBSyxFQUE2RCxDQUNuRTtRQUNELG1CQUFtQixFQUFFLFlBQVksQ0FBQyx3Q0FBd0MsQ0FBQztRQUMzRSx1QkFBdUIsRUFBRSxZQUFZLENBQUMsOENBQThDLEVBQUUsS0FBSyxFQUFrQixDQUFDO1FBQzlHLGlCQUFpQixFQUFFLFlBQVksQ0FDN0IsdUNBQXVDLEVBQ3ZDLEtBQUssRUFBOEMsQ0FDcEQ7UUFDRCxzQkFBc0IsRUFBRSxZQUFZLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxFQUErQixDQUFDO1FBQzlHLHdCQUF3QixFQUFFLFlBQVksQ0FDcEMsc0NBQXNDLEVBQ3RDLEtBQUssRUFHRCxDQUNMO1FBQ0QsK0JBQStCLEVBQUUsWUFBWSxDQUMzQyw4Q0FBOEMsRUFDOUMsS0FBSyxFQUVELENBQ0w7UUFDRCwrQkFBK0IsRUFBRSxZQUFZLENBQzNDLDhDQUE4QyxFQUM5QyxLQUFLLEVBRUQsQ0FDTDtRQUNELHNCQUFzQixFQUFFLFlBQVksQ0FDbEMsb0NBQW9DLEVBQ3BDLEtBQUssRUFHRCxDQUNMO1FBQ0QsNkJBQTZCLEVBQUUsWUFBWSxDQUN6Qyw0Q0FBNEMsRUFDNUMsS0FBSyxFQUVELENBQ0w7UUFDRCw2QkFBNkIsRUFBRSxZQUFZLENBQ3pDLDRDQUE0QyxFQUM1QyxLQUFLLEVBRUQsQ0FDTDtRQUNELFFBQVEsRUFBRTtZQUNSLE9BQU8sRUFBRSxZQUFZLENBQUMsOEJBQThCLEVBQUUsS0FBSyxFQUFrQixDQUFDO1lBQzlFLGNBQWMsRUFBRSxZQUFZLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxFQUFrQyxDQUFDO1lBQzdHLGNBQWMsRUFBRSxZQUFZLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxFQUFrQixDQUFDO1NBQzlGO1FBQ0Qsd0JBQXdCLEVBQUUsWUFBWSxDQUNwQyx1Q0FBdUMsRUFDdkMsS0FBSyxFQUF3QyxDQUM5QztRQUNELCtCQUErQixFQUFFLFlBQVksQ0FDM0MsK0NBQStDLEVBQy9DLEtBQUssRUFBd0MsQ0FDOUM7UUFDRCxvQkFBb0IsRUFBRSxZQUFZLENBQUMseUNBQXlDLEVBQUUsS0FBSyxFQUErQixDQUFDO1FBQ25ILGFBQWEsRUFBRSxZQUFZLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxFQUErQixDQUFDO1FBQ3BHLG9CQUFvQixFQUFFLFlBQVksQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLEVBQWdCLENBQUM7UUFDcEcsYUFBYSxFQUFFLFlBQVksQ0FBQywwQkFBMEIsQ0FBQztRQUN2RCxvQkFBb0IsRUFBRSxZQUFZLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxFQUE4QixDQUFDO0tBQzVHO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgcHJvcHMgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBEYXRhc2V0UHJldmlldyB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGFzZXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1vbm9DbGFzc1NlYXJjaFBheWxvYWQgfSBmcm9tICcuLi8uLi9tb2RlbC9zZWFyY2gtbW9uby1jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBGdWxsVGV4dFNlYXJjaFBheWxvYWQsIE11bHRpQ2xhc3NTZWFyY2hQYXlsb2FkIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2VhcmNoLW11bHRpLWNsYXNzLm1vZGVsJztcbmltcG9ydCB7IERhdGFzZXQsIERhdGFzZXRWZXJzaW9uLCBOYW1lZFF1ZXJ5LCBQcnlWaXNpYmlsaXR5VHlwZSB9IGZyb20gJy4vZGF0YS1zb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICcuLi9jYXRlZ29yeS9jYXRlZ29yeS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgRGF0YVNvdXJjZUFjdGlvbnMgPSB7XG4gIGxvYWQ6IGNyZWF0ZUFjdGlvbignW0RhdGFzb3VyY2VdIGxvYWQnKSxcbiAgbmFtZWRRdWVyeToge1xuICAgIGxvYWQ6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIGxvYWQnKSxcbiAgICBsb2FkZWQ6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIGxvYWRlZCcsIHByb3BzPHsgbGlzdDogTmFtZWRRdWVyeVtdIH0+KCkpLFxuICAgIGZhaWx1cmU6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIGZhaWx1cmUnLCBwcm9wczx7IGVycm9yOiBFcnJvciB9PigpKSxcbiAgICBwb3N0OiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW05hbWVkUXVlcnldIHBvc3QnLFxuICAgICAgcHJvcHM8e1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGlkPzogc3RyaW5nO1xuICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgdmlzaWJpbGl0eT86IHsgdHlwZTogUHJ5VmlzaWJpbGl0eVR5cGU7IHVzZXJzPzogYW55W10gfTtcbiAgICAgICAgcGF5bG9hZDogTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCB8IE11bHRpQ2xhc3NTZWFyY2hQYXlsb2FkIHwgRnVsbFRleHRTZWFyY2hQYXlsb2FkO1xuICAgICAgICBjb2xvcj86IHN0cmluZztcbiAgICAgICAgZmF2b3JpdGU6IGJvb2xlYW47XG4gICAgICAgIGlzRWRpdDogYm9vbGVhbjtcbiAgICAgIH0+KClcbiAgICApLFxuICAgIGRlbGV0ZTogY3JlYXRlQWN0aW9uKCdbTmFtZWRRdWVyeV0gZGVsZXRlJywgcHJvcHM8eyBpZDogc3RyaW5nIH0+KCkpLFxuICAgIGFkZEZhdm9yaXRlOiBjcmVhdGVBY3Rpb24oJ1tOYW1lZFF1ZXJ5XSBhZGQgZmF2b3JpdGUnLCBwcm9wczx7IGlkOiBzdHJpbmcgfT4oKSksXG4gICAgZGVsZXRlRmF2b3JpdGU6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIGRlbGV0ZSBmYXZvcml0ZScsIHByb3BzPHsgaWQ6IHN0cmluZyB9PigpKSxcbiAgICBlZGl0OiBjcmVhdGVBY3Rpb24oJ1tOYW1lZFF1ZXJ5XSB0cnkgdG8gZWRpdCcsIHByb3BzPHsgY3VycmVudEVkaXQ6IE5hbWVkUXVlcnk7IHdpZGdldEluZGV4PzogbnVtYmVyIH0+KCkpLFxuICAgIHVwZGF0ZUN1cnJlbnRFZGl0OiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW05hbWVkUXVlcnldIHVwZGF0ZSBlZGl0ZWQgbmFtZWQgcXVlcnknLFxuICAgICAgcHJvcHM8eyBjdXJyZW50RWRpdDogUGFydGlhbDxOYW1lZFF1ZXJ5PiB9PigpXG4gICAgKSxcbiAgICBvcGVuRWRpdDogY3JlYXRlQWN0aW9uKCdbTmFtZWRRdWVyeV0gZWRpdCcsIHByb3BzPHsgY3VycmVudEVkaXQ6IE5hbWVkUXVlcnk7IHdpZGdldEluZGV4PzogbnVtYmVyIH0+KCkpLFxuICAgIHN0b3BFZGl0OiBjcmVhdGVBY3Rpb24oJ1tOYW1lZFF1ZXJ5XSBkZWxldGUgZWRpdCcpLFxuICAgIG9wZW5SZW5hbWU6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIHJlbmFtZScpLFxuICAgIHN0b3BSZW5hbWU6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIHN0b3AgcmVuYW1lJylcbiAgfSxcbiAgZGF0YXNldDoge1xuICAgIGxvYWREYXRhc2V0OiBjcmVhdGVBY3Rpb24oJ1tEYXRhc2V0XSBsb2FkIGRhdGFzZXRzJyksXG4gICAgbG9hZGVkRGF0YXNldDogY3JlYXRlQWN0aW9uKCdbRGF0YXNldF0gbG9hZGVkIGRhdGFzZXRzJywgcHJvcHM8eyBkYXRhc2V0czogRGF0YXNldFtdIH0+KCkpLFxuICAgIGZhaWx1cmU6IGNyZWF0ZUFjdGlvbignW0RhdGFzZXRdIGZhaWx1cmUgZWZmZWN0IERhdGFzZXQnLCBwcm9wczx7IGVycm9yOiBhbnkgfT4oKSksXG5cbiAgICBsaXN0VmVyc2lvbnM6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdbRGF0YXNldF0gR2V0IERhdGFzZXQgdmVyc2lvbnMnLFxuICAgICAgcHJvcHM8e1xuICAgICAgICBsaW1pdD86IG51bWJlcjtcbiAgICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgICBkYXRhc2V0Pzogc3RyaW5nO1xuICAgICAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgICAgIG9yZGVyQnk/OiAnQVNDJyB8ICdERVNDJztcbiAgICAgICAgZGF0ZU1pbj86IHN0cmluZztcbiAgICAgICAgZGF0ZU1heD86IHN0cmluZztcbiAgICAgICAgc3RhdHVzPzogc3RyaW5nO1xuICAgICAgfT4oKVxuICAgICksXG4gICAgbGlzdFZlcnNpb25zU3VjY2VzczogY3JlYXRlQWN0aW9uKFxuICAgICAgJ1tEYXRhc2V0XSBHZXQgRGF0YXNldCB2ZXJzaW9ucyBTdWNjZXNzJyxcbiAgICAgIHByb3BzPHsgdmVyc2lvbnM6IERhdGFzZXRWZXJzaW9uW107IHRvdGFsVmVyc2lvbkNvdW50OiBudW1iZXIgfT4oKVxuICAgICksXG4gICAgbGlzdFZlcnNpb25zRmFpbHVyZTogY3JlYXRlQWN0aW9uKCdbRGF0YXNldF0gR2V0IERhdGFzZXQgdmVyc2lvbnMgRmFpbHVyZScpLFxuICAgIGxpc3RWZXJzaW9uc0J5RGF0YXNldElkOiBjcmVhdGVBY3Rpb24oJ1tEYXRhc2V0XSBHZXQgRGF0YXNldCBWZXJzaW9ucyBieSBEYXRhc2V0IElkJywgcHJvcHM8eyBpZDogc3RyaW5nIH0+KCkpLFxuICAgIHVwZGF0ZVZlcnNpb25MaXN0OiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW0RhdGFzZXRdIFVwZGF0ZSBEYXRhc2V0IHZlcnNpb24gbGlzdCcsXG4gICAgICBwcm9wczx7IGlkOiBzdHJpbmc7IHZlcnNpb25zOiBEYXRhc2V0VmVyc2lvbltdIH0+KClcbiAgICApLFxuICAgIHNlbGVjdGVkRGF0YXNldFZlcnNpb246IGNyZWF0ZUFjdGlvbignW0RhdGFzZXRdIFNlbGVjdCBEYXRhc2V0IHZlcnNpb24nLCBwcm9wczx7IHZlcnNpb246IERhdGFzZXRWZXJzaW9uIH0+KCkpLFxuICAgIGRlYWN0aXZhdGVEYXRhc2V0VmVyc2lvbjogY3JlYXRlQWN0aW9uKFxuICAgICAgJ1tEYXRhc2V0XSBEZWFjdGl2YXRlIGRhdGFzZXQgdmVyc2lvbicsXG4gICAgICBwcm9wczx7XG4gICAgICAgIGRhdGFzZXRJZDogc3RyaW5nO1xuICAgICAgICB2ZXJzaW9uSWQ6IHN0cmluZztcbiAgICAgIH0+KClcbiAgICApLFxuICAgIGRlYWN0aXZhdGVEYXRhc2V0VmVyc2lvblN1Y2Nlc3M6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdbRGF0YXNldF0gRGVhY3RpdmF0ZSBkYXRhc2V0IHZlcnNpb24gc3VjY2VzcycsXG4gICAgICBwcm9wczx7XG4gICAgICAgIGRhdGFzZXRWZXJzaW9uOiBEYXRhc2V0VmVyc2lvbjtcbiAgICAgIH0+KClcbiAgICApLFxuICAgIGRlYWN0aXZhdGVEYXRhc2V0VmVyc2lvbkZhaWx1cmU6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdbRGF0YXNldF0gRGVhY3RpdmF0ZSBkYXRhc2V0IHZlcnNpb24gZmFpbHVyZScsXG4gICAgICBwcm9wczx7XG4gICAgICAgIGVycm9yOiBhbnk7XG4gICAgICB9PigpXG4gICAgKSxcbiAgICBhY3RpdmF0ZURhdGFzZXRWZXJzaW9uOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW0RhdGFzZXRdIEFjdGl2YXRlIGRhdGFzZXQgdmVyc2lvbicsXG4gICAgICBwcm9wczx7XG4gICAgICAgIGRhdGFzZXRJZDogc3RyaW5nO1xuICAgICAgICB2ZXJzaW9uSWQ6IHN0cmluZztcbiAgICAgIH0+KClcbiAgICApLFxuICAgIGFjdGl2YXRlRGF0YXNldFZlcnNpb25TdWNjZXNzOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW0RhdGFzZXRdIEFjdGl2YXRlIGRhdGFzZXQgdmVyc2lvbiBzdWNjZXNzJyxcbiAgICAgIHByb3BzPHtcbiAgICAgICAgZGF0YXNldFZlcnNpb246IERhdGFzZXRWZXJzaW9uO1xuICAgICAgfT4oKVxuICAgICksXG4gICAgYWN0aXZhdGVEYXRhc2V0VmVyc2lvbkZhaWx1cmU6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdbRGF0YXNldF0gQWN0aXZhdGUgZGF0YXNldCB2ZXJzaW9uIGZhaWx1cmUnLFxuICAgICAgcHJvcHM8e1xuICAgICAgICBlcnJvcjogYW55O1xuICAgICAgfT4oKVxuICAgICksXG4gICAgcHJldmlld3M6IHtcbiAgICAgIGdldEJ5SWQ6IGNyZWF0ZUFjdGlvbignW0RhdGFzZXQvUHJldmlld3NdIGdldCBieSBpZCcsIHByb3BzPHsgaWQ6IHN0cmluZyB9PigpKSxcbiAgICAgIGdldEJ5SWRTdWNjZXNzOiBjcmVhdGVBY3Rpb24oJ1tEYXRhc2V0L1ByZXZpZXdzXSBnZXQgYnkgaWQgU3VjY2VzcycsIHByb3BzPHsgcHJldmlld3M6IERhdGFzZXRQcmV2aWV3W10gfT4oKSksXG4gICAgICBnZXRCeUlkRmFpbHVyZTogY3JlYXRlQWN0aW9uKCdbRGF0YXNldC9QcmV2aWV3c10gZ2V0IGJ5IGlkIEZhaWx1cmUnLCBwcm9wczx7IGVycm9yOiBhbnkgfT4oKSlcbiAgICB9LFxuICAgIHVwZGF0ZURhdGFzZXRWZXJzaW9uSW5mbzogY3JlYXRlQWN0aW9uKFxuICAgICAgJ1tEYXRhc2V0XSBVcGRhdGUgRGF0YXNldCB2ZXJzaW9uIGluZm8nLFxuICAgICAgcHJvcHM8eyB2ZXJzaW9uOiBQYXJ0aWFsPERhdGFzZXRWZXJzaW9uPiB9PigpXG4gICAgKSxcbiAgICB1cGRhdGVEYXRhc2V0VmVyc2lvbkluZm9TdWNjZXNzOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW0RhdGFzZXRdIFVwZGF0ZSBEYXRhc2V0IHZlcnNpb24gaW5mbyBzdWNjZXNzJyxcbiAgICAgIHByb3BzPHsgdmVyc2lvbjogUGFydGlhbDxEYXRhc2V0VmVyc2lvbj4gfT4oKVxuICAgICksXG4gICAgY29uZmlybURlbGV0ZVZlcnNpb246IGNyZWF0ZUFjdGlvbignW0RhdGFzZXRdIGNvbmZpcm0gRGVsZXRlIGRhdGFzZXRWZXJzaW9uJywgcHJvcHM8eyB2ZXJzaW9uOiBEYXRhc2V0VmVyc2lvbiB9PigpKSxcbiAgICBkZWxldGVWZXJzaW9uOiBjcmVhdGVBY3Rpb24oJ1tEYXRhc2V0XSBEZWxldGUgZGF0YXNldFZlcnNpb24nLCBwcm9wczx7IHZlcnNpb246IERhdGFzZXRWZXJzaW9uIH0+KCkpLFxuICAgIGRlbGV0ZVZlcnNpb25GYWlsdXJlOiBjcmVhdGVBY3Rpb24oJ1tEYXRhc2V0XSBEZWxldGUgZGF0YXNldFZlcnNpb24gZmFpbHVyZScsIHByb3BzPHsgZXJyOiBhbnkgfT4oKSksXG4gICAgZ2V0Q2F0ZWdvcmllczogY3JlYXRlQWN0aW9uKCdbRGF0YXNldF0gR2V0IENhdGVnb3JpZXMnKSxcbiAgICBnZXRDYXRlZ29yaWVzU3VjY2VzczogY3JlYXRlQWN0aW9uKCdbRGF0YXNldF0gR2V0IENhdGVnb3JpZXMgU3VjY2VzcycsIHByb3BzPHsgY2F0ZWdvcmllczogQ2F0ZWdvcnlbXSB9PigpKVxuICB9XG59O1xuIl19
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UuYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLmFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFPbEQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsSUFBSSxFQUFFLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztJQUN2QyxVQUFVLEVBQUU7UUFDVixJQUFJLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxZQUFZLENBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUEwQixDQUFDO1FBQzVFLE9BQU8sRUFBRSxZQUFZLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxFQUFvQixDQUFDO1FBQ3hFLElBQUksRUFBRSxZQUFZLENBQ2hCLG1CQUFtQixFQUNuQixLQUFLLEVBU0QsQ0FDTDtRQUNELE1BQU0sRUFBRSxZQUFZLENBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFrQixDQUFDO1FBQ3BFLFdBQVcsRUFBRSxZQUFZLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxFQUFrQixDQUFDO1FBQy9FLGNBQWMsRUFBRSxZQUFZLENBQUMsOEJBQThCLEVBQUUsS0FBSyxFQUFrQixDQUFDO1FBQ3JGLElBQUksRUFBRSxZQUFZLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxFQUFxRCxDQUFDO1FBQzFHLGlCQUFpQixFQUFFLFlBQVksQ0FDN0Isd0NBQXdDLEVBQ3hDLEtBQUssRUFBd0MsQ0FDOUM7UUFDRCxRQUFRLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBcUQsQ0FBQztRQUN2RyxRQUFRLEVBQUUsWUFBWSxDQUFDLDBCQUEwQixDQUFDO1FBQ2xELFVBQVUsRUFBRSxZQUFZLENBQUMscUJBQXFCLENBQUM7UUFDL0MsVUFBVSxFQUFFLFlBQVksQ0FBQywwQkFBMEIsQ0FBQztLQUNyRDtJQUNELE9BQU8sRUFBRTtRQUNQLFdBQVcsRUFBRSxZQUFZLENBQUMseUJBQXlCLENBQUM7UUFDcEQsYUFBYSxFQUFFLFlBQVksQ0FBQywyQkFBMkIsRUFBRSxLQUFLLEVBQTJCLENBQUM7UUFDMUYsT0FBTyxFQUFFLFlBQVksQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLEVBQWtCLENBQUM7UUFFbEYsWUFBWSxFQUFFLFlBQVksQ0FDeEIsZ0NBQWdDLEVBQ2hDLEtBQUssRUFTRCxDQUNMO1FBQ0QsbUJBQW1CLEVBQUUsWUFBWSxDQUMvQix3Q0FBd0MsRUFDeEMsS0FBSyxFQUE2RCxDQUNuRTtRQUNELG1CQUFtQixFQUFFLFlBQVksQ0FBQyx3Q0FBd0MsQ0FBQztRQUMzRSx1QkFBdUIsRUFBRSxZQUFZLENBQUMsOENBQThDLEVBQUUsS0FBSyxFQUFrQixDQUFDO1FBQzlHLGlCQUFpQixFQUFFLFlBQVksQ0FDN0IsdUNBQXVDLEVBQ3ZDLEtBQUssRUFBOEMsQ0FDcEQ7UUFDRCxzQkFBc0IsRUFBRSxZQUFZLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxFQUErQixDQUFDO1FBQzlHLHdCQUF3QixFQUFFLFlBQVksQ0FDcEMsc0NBQXNDLEVBQ3RDLEtBQUssRUFHRCxDQUNMO1FBQ0QsK0JBQStCLEVBQUUsWUFBWSxDQUMzQyw4Q0FBOEMsRUFDOUMsS0FBSyxFQUVELENBQ0w7UUFDRCwrQkFBK0IsRUFBRSxZQUFZLENBQzNDLDhDQUE4QyxFQUM5QyxLQUFLLEVBRUQsQ0FDTDtRQUNELHNCQUFzQixFQUFFLFlBQVksQ0FDbEMsb0NBQW9DLEVBQ3BDLEtBQUssRUFHRCxDQUNMO1FBQ0QsNkJBQTZCLEVBQUUsWUFBWSxDQUN6Qyw0Q0FBNEMsRUFDNUMsS0FBSyxFQUVELENBQ0w7UUFDRCw2QkFBNkIsRUFBRSxZQUFZLENBQ3pDLDRDQUE0QyxFQUM1QyxLQUFLLEVBRUQsQ0FDTDtRQUNELFFBQVEsRUFBRTtZQUNSLE9BQU8sRUFBRSxZQUFZLENBQUMsOEJBQThCLEVBQUUsS0FBSyxFQUFrQixDQUFDO1lBQzlFLGNBQWMsRUFBRSxZQUFZLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxFQUFrQyxDQUFDO1lBQzdHLGNBQWMsRUFBRSxZQUFZLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxFQUFrQixDQUFDO1NBQzlGO1FBQ0Qsd0JBQXdCLEVBQUUsWUFBWSxDQUNwQyx1Q0FBdUMsRUFDdkMsS0FBSyxFQUF3QyxDQUM5QztRQUNELCtCQUErQixFQUFFLFlBQVksQ0FDM0MsK0NBQStDLEVBQy9DLEtBQUssRUFBd0MsQ0FDOUM7UUFDRCxvQkFBb0IsRUFBRSxZQUFZLENBQUMseUNBQXlDLEVBQUUsS0FBSyxFQUErQixDQUFDO1FBQ25ILGFBQWEsRUFBRSxZQUFZLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxFQUErQixDQUFDO1FBQ3BHLG9CQUFvQixFQUFFLFlBQVksQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLEVBQWdCLENBQUM7UUFDcEcsYUFBYSxFQUFFLFlBQVksQ0FBQywwQkFBMEIsQ0FBQztRQUN2RCxvQkFBb0IsRUFBRSxZQUFZLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxFQUE4QixDQUFDO0tBQzVHO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgcHJvcHMgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBEYXRhc2V0UHJldmlldyB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGFzZXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1vbm9DbGFzc1NlYXJjaFBheWxvYWQgfSBmcm9tICcuLi8uLi9tb2RlbC9zZWFyY2gtbW9uby1jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBGdWxsVGV4dFNlYXJjaFBheWxvYWQsIE11bHRpQ2xhc3NTZWFyY2hQYXlsb2FkIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2VhcmNoLW11bHRpLWNsYXNzLm1vZGVsJztcbmltcG9ydCB7IERhdGFzZXQsIERhdGFzZXRWZXJzaW9uLCBOYW1lZFF1ZXJ5LCBQcnlWaXNpYmlsaXR5VHlwZSB9IGZyb20gJy4vZGF0YS1zb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICcuLi9jYXRlZ29yeS9jYXRlZ29yeS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgRGF0YVNvdXJjZUFjdGlvbnMgPSB7XG4gIGxvYWQ6IGNyZWF0ZUFjdGlvbignW0RhdGFzb3VyY2VdIGxvYWQnKSxcbiAgbmFtZWRRdWVyeToge1xuICAgIGxvYWQ6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIGxvYWQnKSxcbiAgICBsb2FkZWQ6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIGxvYWRlZCcsIHByb3BzPHsgbGlzdDogTmFtZWRRdWVyeVtdIH0+KCkpLFxuICAgIGZhaWx1cmU6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIGZhaWx1cmUnLCBwcm9wczx7IGVycm9yOiBFcnJvciB9PigpKSxcbiAgICBwb3N0OiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW05hbWVkUXVlcnldIHBvc3QnLFxuICAgICAgcHJvcHM8e1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGlkPzogc3RyaW5nO1xuICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgdmlzaWJpbGl0eT86IHsgdHlwZTogUHJ5VmlzaWJpbGl0eVR5cGU7IHVzZXJzPzogYW55W10gfTtcbiAgICAgICAgcGF5bG9hZDogTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCB8IE11bHRpQ2xhc3NTZWFyY2hQYXlsb2FkIHwgRnVsbFRleHRTZWFyY2hQYXlsb2FkO1xuICAgICAgICBjb2xvcj86IHN0cmluZztcbiAgICAgICAgZmF2b3JpdGU6IGJvb2xlYW47XG4gICAgICAgIGlzRWRpdDogYm9vbGVhbjtcbiAgICAgIH0+KClcbiAgICApLFxuICAgIGRlbGV0ZTogY3JlYXRlQWN0aW9uKCdbTmFtZWRRdWVyeV0gZGVsZXRlJywgcHJvcHM8eyBpZDogc3RyaW5nIH0+KCkpLFxuICAgIGFkZEZhdm9yaXRlOiBjcmVhdGVBY3Rpb24oJ1tOYW1lZFF1ZXJ5XSBhZGQgZmF2b3JpdGUnLCBwcm9wczx7IGlkOiBzdHJpbmcgfT4oKSksXG4gICAgZGVsZXRlRmF2b3JpdGU6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIGRlbGV0ZSBmYXZvcml0ZScsIHByb3BzPHsgaWQ6IHN0cmluZyB9PigpKSxcbiAgICBlZGl0OiBjcmVhdGVBY3Rpb24oJ1tOYW1lZFF1ZXJ5XSB0cnkgdG8gZWRpdCcsIHByb3BzPHsgY3VycmVudEVkaXQ6IE5hbWVkUXVlcnk7IHdpZGdldEluZGV4PzogbnVtYmVyIH0+KCkpLFxuICAgIHVwZGF0ZUN1cnJlbnRFZGl0OiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW05hbWVkUXVlcnldIHVwZGF0ZSBlZGl0ZWQgbmFtZWQgcXVlcnknLFxuICAgICAgcHJvcHM8eyBjdXJyZW50RWRpdDogUGFydGlhbDxOYW1lZFF1ZXJ5PiB9PigpXG4gICAgKSxcbiAgICBvcGVuRWRpdDogY3JlYXRlQWN0aW9uKCdbTmFtZWRRdWVyeV0gZWRpdCcsIHByb3BzPHsgY3VycmVudEVkaXQ6IE5hbWVkUXVlcnk7IHdpZGdldEluZGV4PzogbnVtYmVyIH0+KCkpLFxuICAgIHN0b3BFZGl0OiBjcmVhdGVBY3Rpb24oJ1tOYW1lZFF1ZXJ5XSBkZWxldGUgZWRpdCcpLFxuICAgIG9wZW5SZW5hbWU6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIHJlbmFtZScpLFxuICAgIHN0b3BSZW5hbWU6IGNyZWF0ZUFjdGlvbignW05hbWVkUXVlcnldIHN0b3AgcmVuYW1lJylcbiAgfSxcbiAgZGF0YXNldDoge1xuICAgIGxvYWREYXRhc2V0OiBjcmVhdGVBY3Rpb24oJ1tEYXRhc2V0XSBsb2FkIGRhdGFzZXRzJyksXG4gICAgbG9hZGVkRGF0YXNldDogY3JlYXRlQWN0aW9uKCdbRGF0YXNldF0gbG9hZGVkIGRhdGFzZXRzJywgcHJvcHM8eyBkYXRhc2V0czogRGF0YXNldFtdIH0+KCkpLFxuICAgIGZhaWx1cmU6IGNyZWF0ZUFjdGlvbignW0RhdGFzZXRdIGZhaWx1cmUgZWZmZWN0IERhdGFzZXQnLCBwcm9wczx7IGVycm9yOiBhbnkgfT4oKSksXG5cbiAgICBsaXN0VmVyc2lvbnM6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdbRGF0YXNldF0gR2V0IERhdGFzZXQgdmVyc2lvbnMnLFxuICAgICAgcHJvcHM8e1xuICAgICAgICBsaW1pdD86IG51bWJlcjtcbiAgICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgICBkYXRhc2V0Pzogc3RyaW5nO1xuICAgICAgICBzb3J0Qnk/OiAnYXNjJyB8ICdkZXNjJztcbiAgICAgICAgb3JkZXJCeT86ICdEQVRBU0VUX05BTUUnIHwgJ0RBVEUnO1xuICAgICAgICBkYXRlTWluPzogc3RyaW5nO1xuICAgICAgICBkYXRlTWF4Pzogc3RyaW5nO1xuICAgICAgICBzdGF0dXM/OiBzdHJpbmc7XG4gICAgICB9PigpXG4gICAgKSxcbiAgICBsaXN0VmVyc2lvbnNTdWNjZXNzOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW0RhdGFzZXRdIEdldCBEYXRhc2V0IHZlcnNpb25zIFN1Y2Nlc3MnLFxuICAgICAgcHJvcHM8eyB2ZXJzaW9uczogRGF0YXNldFZlcnNpb25bXTsgdG90YWxWZXJzaW9uQ291bnQ6IG51bWJlciB9PigpXG4gICAgKSxcbiAgICBsaXN0VmVyc2lvbnNGYWlsdXJlOiBjcmVhdGVBY3Rpb24oJ1tEYXRhc2V0XSBHZXQgRGF0YXNldCB2ZXJzaW9ucyBGYWlsdXJlJyksXG4gICAgbGlzdFZlcnNpb25zQnlEYXRhc2V0SWQ6IGNyZWF0ZUFjdGlvbignW0RhdGFzZXRdIEdldCBEYXRhc2V0IFZlcnNpb25zIGJ5IERhdGFzZXQgSWQnLCBwcm9wczx7IGlkOiBzdHJpbmcgfT4oKSksXG4gICAgdXBkYXRlVmVyc2lvbkxpc3Q6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdbRGF0YXNldF0gVXBkYXRlIERhdGFzZXQgdmVyc2lvbiBsaXN0JyxcbiAgICAgIHByb3BzPHsgaWQ6IHN0cmluZzsgdmVyc2lvbnM6IERhdGFzZXRWZXJzaW9uW10gfT4oKVxuICAgICksXG4gICAgc2VsZWN0ZWREYXRhc2V0VmVyc2lvbjogY3JlYXRlQWN0aW9uKCdbRGF0YXNldF0gU2VsZWN0IERhdGFzZXQgdmVyc2lvbicsIHByb3BzPHsgdmVyc2lvbjogRGF0YXNldFZlcnNpb24gfT4oKSksXG4gICAgZGVhY3RpdmF0ZURhdGFzZXRWZXJzaW9uOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW0RhdGFzZXRdIERlYWN0aXZhdGUgZGF0YXNldCB2ZXJzaW9uJyxcbiAgICAgIHByb3BzPHtcbiAgICAgICAgZGF0YXNldElkOiBzdHJpbmc7XG4gICAgICAgIHZlcnNpb25JZDogc3RyaW5nO1xuICAgICAgfT4oKVxuICAgICksXG4gICAgZGVhY3RpdmF0ZURhdGFzZXRWZXJzaW9uU3VjY2VzczogY3JlYXRlQWN0aW9uKFxuICAgICAgJ1tEYXRhc2V0XSBEZWFjdGl2YXRlIGRhdGFzZXQgdmVyc2lvbiBzdWNjZXNzJyxcbiAgICAgIHByb3BzPHtcbiAgICAgICAgZGF0YXNldFZlcnNpb246IERhdGFzZXRWZXJzaW9uO1xuICAgICAgfT4oKVxuICAgICksXG4gICAgZGVhY3RpdmF0ZURhdGFzZXRWZXJzaW9uRmFpbHVyZTogY3JlYXRlQWN0aW9uKFxuICAgICAgJ1tEYXRhc2V0XSBEZWFjdGl2YXRlIGRhdGFzZXQgdmVyc2lvbiBmYWlsdXJlJyxcbiAgICAgIHByb3BzPHtcbiAgICAgICAgZXJyb3I6IGFueTtcbiAgICAgIH0+KClcbiAgICApLFxuICAgIGFjdGl2YXRlRGF0YXNldFZlcnNpb246IGNyZWF0ZUFjdGlvbihcbiAgICAgICdbRGF0YXNldF0gQWN0aXZhdGUgZGF0YXNldCB2ZXJzaW9uJyxcbiAgICAgIHByb3BzPHtcbiAgICAgICAgZGF0YXNldElkOiBzdHJpbmc7XG4gICAgICAgIHZlcnNpb25JZDogc3RyaW5nO1xuICAgICAgfT4oKVxuICAgICksXG4gICAgYWN0aXZhdGVEYXRhc2V0VmVyc2lvblN1Y2Nlc3M6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdbRGF0YXNldF0gQWN0aXZhdGUgZGF0YXNldCB2ZXJzaW9uIHN1Y2Nlc3MnLFxuICAgICAgcHJvcHM8e1xuICAgICAgICBkYXRhc2V0VmVyc2lvbjogRGF0YXNldFZlcnNpb247XG4gICAgICB9PigpXG4gICAgKSxcbiAgICBhY3RpdmF0ZURhdGFzZXRWZXJzaW9uRmFpbHVyZTogY3JlYXRlQWN0aW9uKFxuICAgICAgJ1tEYXRhc2V0XSBBY3RpdmF0ZSBkYXRhc2V0IHZlcnNpb24gZmFpbHVyZScsXG4gICAgICBwcm9wczx7XG4gICAgICAgIGVycm9yOiBhbnk7XG4gICAgICB9PigpXG4gICAgKSxcbiAgICBwcmV2aWV3czoge1xuICAgICAgZ2V0QnlJZDogY3JlYXRlQWN0aW9uKCdbRGF0YXNldC9QcmV2aWV3c10gZ2V0IGJ5IGlkJywgcHJvcHM8eyBpZDogc3RyaW5nIH0+KCkpLFxuICAgICAgZ2V0QnlJZFN1Y2Nlc3M6IGNyZWF0ZUFjdGlvbignW0RhdGFzZXQvUHJldmlld3NdIGdldCBieSBpZCBTdWNjZXNzJywgcHJvcHM8eyBwcmV2aWV3czogRGF0YXNldFByZXZpZXdbXSB9PigpKSxcbiAgICAgIGdldEJ5SWRGYWlsdXJlOiBjcmVhdGVBY3Rpb24oJ1tEYXRhc2V0L1ByZXZpZXdzXSBnZXQgYnkgaWQgRmFpbHVyZScsIHByb3BzPHsgZXJyb3I6IGFueSB9PigpKVxuICAgIH0sXG4gICAgdXBkYXRlRGF0YXNldFZlcnNpb25JbmZvOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnW0RhdGFzZXRdIFVwZGF0ZSBEYXRhc2V0IHZlcnNpb24gaW5mbycsXG4gICAgICBwcm9wczx7IHZlcnNpb246IFBhcnRpYWw8RGF0YXNldFZlcnNpb24+IH0+KClcbiAgICApLFxuICAgIHVwZGF0ZURhdGFzZXRWZXJzaW9uSW5mb1N1Y2Nlc3M6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdbRGF0YXNldF0gVXBkYXRlIERhdGFzZXQgdmVyc2lvbiBpbmZvIHN1Y2Nlc3MnLFxuICAgICAgcHJvcHM8eyB2ZXJzaW9uOiBQYXJ0aWFsPERhdGFzZXRWZXJzaW9uPiB9PigpXG4gICAgKSxcbiAgICBjb25maXJtRGVsZXRlVmVyc2lvbjogY3JlYXRlQWN0aW9uKCdbRGF0YXNldF0gY29uZmlybSBEZWxldGUgZGF0YXNldFZlcnNpb24nLCBwcm9wczx7IHZlcnNpb246IERhdGFzZXRWZXJzaW9uIH0+KCkpLFxuICAgIGRlbGV0ZVZlcnNpb246IGNyZWF0ZUFjdGlvbignW0RhdGFzZXRdIERlbGV0ZSBkYXRhc2V0VmVyc2lvbicsIHByb3BzPHsgdmVyc2lvbjogRGF0YXNldFZlcnNpb24gfT4oKSksXG4gICAgZGVsZXRlVmVyc2lvbkZhaWx1cmU6IGNyZWF0ZUFjdGlvbignW0RhdGFzZXRdIERlbGV0ZSBkYXRhc2V0VmVyc2lvbiBmYWlsdXJlJywgcHJvcHM8eyBlcnI6IGFueSB9PigpKSxcbiAgICBnZXRDYXRlZ29yaWVzOiBjcmVhdGVBY3Rpb24oJ1tEYXRhc2V0XSBHZXQgQ2F0ZWdvcmllcycpLFxuICAgIGdldENhdGVnb3JpZXNTdWNjZXNzOiBjcmVhdGVBY3Rpb24oJ1tEYXRhc2V0XSBHZXQgQ2F0ZWdvcmllcyBTdWNjZXNzJywgcHJvcHM8eyBjYXRlZ29yaWVzOiBDYXRlZ29yeVtdIH0+KCkpXG4gIH1cbn07XG4iXX0=