@alfresco/aca-content 5.2.0 → 5.3.0-11951005495

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 (80) hide show
  1. package/esm2022/folder-rules/manage-rules/manage-rules.smart-component.mjs +13 -17
  2. package/esm2022/folder-rules/rule-details/actions/rule-action.ui-component.mjs +9 -12
  3. package/esm2022/folder-rules/rule-details/conditions/rule-simple-condition.ui-component.mjs +8 -12
  4. package/esm2022/folder-rules/rule-details/rule-details.ui-component.mjs +8 -12
  5. package/esm2022/folder-rules/rule-list/rule-list/rule-list.ui-component.mjs +5 -7
  6. package/esm2022/folder-rules/rule-set-picker/rule-set-picker.smart-component.mjs +7 -10
  7. package/esm2022/lib/components/bulk-actions-dropdown/bulk-actions-dropdown.component.mjs +8 -11
  8. package/esm2022/lib/components/common/toggle-shared/toggle-shared.component.mjs +6 -11
  9. package/esm2022/lib/components/context-menu/context-menu-outside-event.directive.mjs +7 -12
  10. package/esm2022/lib/components/context-menu/context-menu.component.mjs +2 -2
  11. package/esm2022/lib/components/details/details.component.mjs +4 -3
  12. package/esm2022/lib/components/dl-custom-components/datatable-cell-badges/datatable-cell-badges.component.mjs +5 -10
  13. package/esm2022/lib/components/dl-custom-components/name-column/name-column.component.mjs +8 -12
  14. package/esm2022/lib/components/files/files.component.mjs +9 -8
  15. package/esm2022/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.mjs +12 -15
  16. package/esm2022/lib/components/info-drawer/metadata-tab/metadata-tab.component.mjs +12 -16
  17. package/esm2022/lib/components/knowledge-retrieval/search-ai/agents-button/agents-button.component.mjs +7 -10
  18. package/esm2022/lib/components/knowledge-retrieval/search-ai/search-ai-input/search-ai-input.component.mjs +6 -11
  19. package/esm2022/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component.mjs +5 -8
  20. package/esm2022/lib/components/search/search-input/search-input.component.mjs +6 -9
  21. package/esm2022/lib/components/search/search-input-control/search-input-control.component.mjs +2 -8
  22. package/esm2022/lib/components/search/search-libraries-results/search-libraries-results.component.mjs +3 -3
  23. package/esm2022/lib/components/search/search-results/search-results.component.mjs +2 -3
  24. package/esm2022/lib/components/search/search-results-row/search-results-row.component.mjs +7 -11
  25. package/esm2022/lib/components/search/search-save/sidenav/save-search-sidenav.component.mjs +5 -10
  26. package/esm2022/lib/components/shared-link-view/shared-link-view.component.mjs +8 -11
  27. package/esm2022/lib/components/sidenav/components/sidenav-header.component.mjs +5 -10
  28. package/esm2022/lib/components/sidenav/directives/active-link.directive.mjs +6 -6
  29. package/esm2022/lib/components/sidenav/directives/expansion-panel.directive.mjs +7 -11
  30. package/esm2022/lib/components/sidenav/directives/menu-panel.directive.mjs +7 -11
  31. package/esm2022/lib/components/sidenav/sidenav.component.mjs +9 -13
  32. package/esm2022/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.mjs +6 -10
  33. package/esm2022/lib/components/upload-files-dialog/upload-files-dialog.component.mjs +4 -9
  34. package/esm2022/lib/components/view-profile/view-profile.component.mjs +4 -9
  35. package/esm2022/lib/directives/document-list.directive.mjs +8 -12
  36. package/esm2022/viewer/lib/components/preview/preview.component.mjs +9 -11
  37. package/esm2022/viewer/lib/components/viewer/viewer.component.mjs +15 -16
  38. package/fesm2022/alfresco-aca-content-folder-rules.mjs +27 -49
  39. package/fesm2022/alfresco-aca-content-folder-rules.mjs.map +1 -1
  40. package/fesm2022/alfresco-aca-content-viewer.mjs +16 -20
  41. package/fesm2022/alfresco-aca-content-viewer.mjs.map +1 -1
  42. package/fesm2022/alfresco-aca-content.mjs +73 -168
  43. package/fesm2022/alfresco-aca-content.mjs.map +1 -1
  44. package/folder-rules/manage-rules/manage-rules.smart-component.d.ts +3 -5
  45. package/folder-rules/rule-details/actions/rule-action.ui-component.d.ts +4 -5
  46. package/folder-rules/rule-details/conditions/rule-simple-condition.ui-component.d.ts +3 -4
  47. package/folder-rules/rule-details/rule-details.ui-component.d.ts +4 -5
  48. package/folder-rules/rule-list/rule-list/rule-list.ui-component.d.ts +3 -4
  49. package/folder-rules/rule-set-picker/rule-set-picker.smart-component.d.ts +3 -5
  50. package/lib/components/bulk-actions-dropdown/bulk-actions-dropdown.component.d.ts +3 -4
  51. package/lib/components/common/toggle-shared/toggle-shared.component.d.ts +4 -5
  52. package/lib/components/context-menu/context-menu-outside-event.directive.d.ts +3 -4
  53. package/lib/components/context-menu/context-menu.component.d.ts +1 -1
  54. package/lib/components/details/details.component.d.ts +1 -2
  55. package/lib/components/dl-custom-components/datatable-cell-badges/datatable-cell-badges.component.d.ts +3 -4
  56. package/lib/components/dl-custom-components/name-column/name-column.component.d.ts +3 -4
  57. package/lib/components/files/files.component.d.ts +1 -1
  58. package/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.d.ts +4 -6
  59. package/lib/components/info-drawer/metadata-tab/metadata-tab.component.d.ts +6 -7
  60. package/lib/components/knowledge-retrieval/search-ai/agents-button/agents-button.component.d.ts +3 -4
  61. package/lib/components/knowledge-retrieval/search-ai/search-ai-input/search-ai-input.component.d.ts +3 -4
  62. package/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component.d.ts +2 -3
  63. package/lib/components/search/search-input/search-input.component.d.ts +1 -2
  64. package/lib/components/search/search-input-control/search-input-control.component.d.ts +2 -5
  65. package/lib/components/search/search-results/search-results.component.d.ts +0 -1
  66. package/lib/components/search/search-results-row/search-results-row.component.d.ts +3 -4
  67. package/lib/components/search/search-save/sidenav/save-search-sidenav.component.d.ts +3 -5
  68. package/lib/components/shared-link-view/shared-link-view.component.d.ts +4 -5
  69. package/lib/components/sidenav/components/sidenav-header.component.d.ts +3 -4
  70. package/lib/components/sidenav/directives/active-link.directive.d.ts +1 -1
  71. package/lib/components/sidenav/directives/expansion-panel.directive.d.ts +3 -4
  72. package/lib/components/sidenav/directives/menu-panel.directive.d.ts +3 -4
  73. package/lib/components/sidenav/sidenav.component.d.ts +3 -4
  74. package/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.d.ts +3 -4
  75. package/lib/components/upload-files-dialog/upload-files-dialog.component.d.ts +1 -27
  76. package/lib/components/view-profile/view-profile.component.d.ts +2 -4
  77. package/lib/directives/document-list.directive.d.ts +3 -5
  78. package/package.json +5 -5
  79. package/viewer/lib/components/preview/preview.component.d.ts +3 -4
  80. package/viewer/lib/components/viewer/viewer.component.d.ts +2 -2
@@ -21,15 +21,14 @@
21
21
  * You should have received a copy of the GNU Lesser General Public License
22
22
  * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
23
  */
24
- import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
24
+ import { ChangeDetectionStrategy, Component, DestroyRef, inject, ViewEncapsulation } from '@angular/core';
25
25
  import { CommonModule, Location } from '@angular/common';
26
26
  import { FolderRulesService } from '../services/folder-rules.service';
27
- import { Subject } from 'rxjs';
28
27
  import { ActivatedRoute, RouterModule } from '@angular/router';
29
- import { delay, takeUntil } from 'rxjs/operators';
28
+ import { delay } from 'rxjs/operators';
30
29
  import { EditRuleDialogUiComponent } from '../rule-details/edit-rule-dialog.ui-component';
31
30
  import { MatDialog, MatDialogModule } from '@angular/material/dialog';
32
- import { NotificationService, TemplateModule, ToolbarModule, ConfirmDialogComponent } from '@alfresco/adf-core';
31
+ import { ConfirmDialogComponent, NotificationService, TemplateModule, ToolbarModule } from '@alfresco/adf-core';
33
32
  import { ActionsService } from '../services/actions.service';
34
33
  import { FolderRuleSetsService } from '../services/folder-rule-sets.service';
35
34
  import { RuleSetPickerSmartComponent } from '../rule-set-picker/rule-set-picker.smart-component';
@@ -42,6 +41,7 @@ import { MatProgressBarModule } from '@angular/material/progress-bar';
42
41
  import { MatDividerModule } from '@angular/material/divider';
43
42
  import { RuleListUiComponent } from '../rule-list/rule-list/rule-list.ui-component';
44
43
  import { RuleDetailsUiComponent } from '../rule-details/rule-details.ui-component';
44
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
45
45
  import * as i0 from "@angular/core";
46
46
  import * as i1 from "@angular/common";
47
47
  import * as i2 from "../services/folder-rules.service";
@@ -81,8 +81,7 @@ class ManageRulesSmartComponent {
81
81
  canEditSelectedRule = false;
82
82
  isMainRuleSetNotEmpty = false;
83
83
  isInheritedRuleSetsNotEmpty = false;
84
- destroyed$ = new Subject();
85
- _actionDefinitionsSub;
84
+ destroyRef = inject(DestroyRef);
86
85
  constructor(location, folderRulesService, route, matDialogService, notificationService, actionsService, folderRuleSetsService) {
87
86
  this.location = location;
88
87
  this.folderRulesService = folderRulesService;
@@ -103,7 +102,7 @@ class ManageRulesSmartComponent {
103
102
  this.actionsLoading$ = this.actionsService.loading$.pipe(delay(0));
104
103
  this.actionDefinitions$ = this.actionsService.actionDefinitionsListing$;
105
104
  this.parameterConstraints$ = this.actionsService.parameterConstraints$;
106
- this.folderRulesService.deletedRuleId$.pipe(takeUntil(this.destroyed$)).subscribe((deletedRuleId) => this.onRuleDelete(deletedRuleId));
105
+ this.folderRulesService.deletedRuleId$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((deletedRuleId) => this.onRuleDelete(deletedRuleId));
107
106
  this.actionsService.loadActionDefinitions();
108
107
  this.route.params.subscribe((params) => {
109
108
  this.nodeId = params.nodeId;
@@ -114,23 +113,20 @@ class ManageRulesSmartComponent {
114
113
  this.folderRuleSetsService.loadRuleSets(this.nodeId);
115
114
  }
116
115
  });
117
- this._actionDefinitionsSub = this.actionDefinitions$.subscribe((actionDefinitions) => this.actionsService.loadActionParameterConstraints(actionDefinitions));
118
- this.mainRuleSet$.pipe(takeUntil(this.destroyed$)).subscribe((ruleSet) => {
116
+ this.actionDefinitions$
117
+ .pipe(takeUntilDestroyed(this.destroyRef))
118
+ .subscribe((actionDefinitions) => this.actionsService.loadActionParameterConstraints(actionDefinitions));
119
+ this.mainRuleSet$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((ruleSet) => {
119
120
  this.canEditMainRule = this.canEditRule(ruleSet);
120
121
  this.isMainRuleSetNotEmpty = !!ruleSet;
121
122
  });
122
- this.inheritedRuleSets$.pipe(takeUntil(this.destroyed$)).subscribe((inheritedRuleSet) => {
123
+ this.inheritedRuleSets$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((inheritedRuleSet) => {
123
124
  this.isInheritedRuleSetsNotEmpty = inheritedRuleSet.some((ruleSet) => ruleSet.rules.some((rule) => rule.isEnabled));
124
125
  });
125
- this.selectedRuleSet$.pipe(takeUntil(this.destroyed$)).subscribe((ruleSet) => {
126
+ this.selectedRuleSet$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((ruleSet) => {
126
127
  this.canEditSelectedRule = this.canEditRule(ruleSet);
127
128
  });
128
129
  }
129
- ngOnDestroy() {
130
- this.destroyed$.next();
131
- this.destroyed$.complete();
132
- this._actionDefinitionsSub.unsubscribe();
133
- }
134
130
  goBack() {
135
131
  this.location.back();
136
132
  }
@@ -277,4 +273,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
277
273
  MatDialogModule
278
274
  ], selector: 'aca-manage-rules', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, host: { class: 'aca-manage-rules' }, template: "<aca-page-layout>\n\n <div class=\"aca-page-layout-header\">\n <adf-toolbar class=\"adf-toolbar--inline\">\n <button mat-icon-button (click)=\"goBack()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n </adf-toolbar>\n <h1 class=\"aca-page-title\">{{ 'ACA_FOLDER_RULES.ACTIONS.MANAGE_RULES' | translate }}</h1>\n </div>\n\n <div class=\"aca-page-layout-content\">\n <div class=\"aca-main-content\">\n\n <ng-container *ngIf=\"((ruleSetsLoading$ | async) && (inheritedRuleSets$ | async).length === 0) || (actionsLoading$ | async); else onLoaded\">\n <mat-progress-bar color=\"primary\" mode=\"indeterminate\" />\n </ng-container>\n\n <ng-template #onLoaded>\n <ng-container *ngIf=\"folderInfo$ | async; else genericError\">\n <adf-toolbar class=\"adf-toolbar--inline aca-manage-rules__actions-bar\">\n\n <adf-toolbar-title class=\"aca-manage-rules__actions-bar__title\">\n <mat-icon class=\"icon-aligner\">folder</mat-icon>\n <h2 class=\"aca-page-title\">{{ (folderInfo$ | async).name }}:{{'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.BREADCRUMB.RULES' | translate}}</h2>\n </adf-toolbar-title>\n\n <mat-slide-toggle\n data-automation-id=\"manage-rules-inheritance-toggle-button\"\n class=\"aca-manage-rules__actions-bar__toggle\"\n [checked]=\"isInheritanceEnabled\"\n (change)=\"onInheritanceToggleChange($event)\"\n [disabled]=\"isInheritanceToggleDisabled\"\n [labelPosition]=\"'before'\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.INHERIT_RULES' | translate }}\n </mat-slide-toggle>\n\n <mat-divider vertical class=\"aca-manage-rules__actions-bar__vertical-divider\" />\n\n <div class=\"aca-manage-rules__actions-bar__buttons\">\n <button\n *ngIf=\"!(mainRuleSet$ | async)\"\n data-automation-id=\"manage-rules-link-button\"\n mat-stroked-button\n (click)=\"openLinkRulesDialog()\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.LINK_RULES' | translate }}\n </button>\n\n <button\n *ngIf=\"canEditMainRule\"\n data-automation-id=\"manage-rules-create-button\"\n mat-flat-button color=\"primary\"\n (click)=\"openCreateUpdateRuleDialog()\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.CREATE_RULE' | translate }}\n </button>\n </div>\n\n </adf-toolbar>\n <mat-divider />\n\n <div class=\"aca-manage-rules__container\" *ngIf=\"isMainRuleSetNotEmpty || isInheritedRuleSetsNotEmpty; else emptyContent\">\n <aca-rule-list\n [mainRuleSet$]=\"mainRuleSet$\"\n [folderId]=\"nodeId\"\n [inheritedRuleSets]=\"inheritedRuleSets$ | async\"\n [hasMoreRuleSets]=\"hasMoreRuleSets$ | async\"\n [ruleSetsLoading]=\"ruleSetsLoading$ | async\"\n [selectedRule]=\"selectedRule$ | async\"\n (loadMoreRuleSets)=\"onLoadMoreRuleSets()\"\n (loadMoreRules)=\"onLoadMoreRules($event)\"\n (selectRule)=\"onSelectRule($event)\"\n (ruleEnabledChanged)=\"onRuleEnabledToggle($event[0], $event[1])\"\n (ruleSetEditLinkClicked)=\"openLinkRulesDialog($event)\"\n (ruleSetUnlinkClicked)=\"onRuleSetUnlinkClicked($event)\" />\n\n <div class=\"aca-manage-rules__container__rule-details\">\n\n <div class=\"aca-manage-rules__container__rule-details__header\" *ngIf=\"(selectedRule$ | async) as selectedRule\">\n <div class=\"aca-manage-rules__container__rule-details__header__title\">\n <div class=\"aca-manage-rules__container__rule-details__header__title__name\">\n {{ selectedRule.name }}\n </div>\n <div class=\"aca-manage-rules__container__rule-details__header__title__description\">\n {{ selectedRule.description }}\n </div>\n </div>\n\n <div class=\"aca-manage-rules__container__rule-details__header__buttons\">\n <ng-container *ngIf=\"canEditSelectedRule; else goToFolderButton\">\n <button mat-stroked-button (click)=\"onRuleDeleteButtonClicked(selectedRule)\" id=\"delete-rule-btn\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n <button mat-stroked-button (click)=\"openCreateUpdateRuleDialog(selectedRule)\" id=\"edit-rule-btn\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.EDIT_RULE' | translate }}\n </button>\n </ng-container>\n\n <ng-template #goToFolderButton>\n <button mat-stroked-button [routerLink]=\"['/nodes', (selectedRuleSet$ | async).owningFolder.id, 'rules']\">\n {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.SEE_IN_FOLDER' | translate }}\n </button>\n </ng-template>\n </div>\n </div>\n\n <div class=\"aca-manage-rules__container__rule-details__content\" *ngIf=\"(selectedRule$ | async) as selectedRule\">\n <aca-rule-details\n [actionDefinitions]=\"actionDefinitions$ | async\"\n [parameterConstraints]=\"parameterConstraints$ | async\"\n [readOnly]=\"true\"\n [preview]=\"true\"\n [value]=\"selectedRule\"\n [nodeId]=\"nodeId\" />\n </div>\n </div>\n </div>\n\n <ng-template #emptyContent>\n <adf-empty-content\n icon=\"library_books\"\n [title]=\"'ACA_FOLDER_RULES.MANAGE_RULES.EMPTY_RULES_LIST.TITLE' | translate\"\n [subtitle]=\"'ACA_FOLDER_RULES.MANAGE_RULES.EMPTY_RULES_LIST.SUBTITLE' | translate\"\n />\n </ng-template>\n </ng-container>\n\n <ng-template #genericError>\n <div class=\"aca-page-layout-error\">\n <aca-generic-error />\n </div>\n </ng-template>\n\n </ng-template>\n\n </div>\n </div>\n\n</aca-page-layout>\n", styles: [".aca-manage-rules .mat-mdc-slide-toggle:is(mat-slide-toggle) .mdc-switch:enabled .mdc-switch__track:after{background:var(--mdc-switch-selected-track-color)}.aca-manage-rules .mat-mdc-slide-toggle .mdc-switch .mdc-switch__handle:before{background:var(--mdc-switch-selected-pressed-handle-color)}.aca-manage-rules__actions-bar{padding:0 30px;display:flex;align-items:center}.aca-manage-rules__actions-bar .aca-page-title{margin-left:18px}.aca-manage-rules__actions-bar__title{align-items:center;flex:1}.aca-manage-rules__actions-bar__buttons{display:flex;align-items:stretch;gap:12px}.aca-manage-rules__actions-bar__toggle{font-weight:600;font-size:14px}.aca-manage-rules__actions-bar__vertical-divider{height:50%;margin:0 12px}.aca-manage-rules__container{display:grid;grid-template-columns:minmax(250px,1fr) 3fr;padding:20px;gap:12px;overflow-y:auto;flex:1}.aca-manage-rules__container__rule-details{border:1px solid var(--theme-border-color);border-radius:12px;overflow-y:auto}.aca-manage-rules__container__rule-details__header{position:sticky;top:0;z-index:1;display:flex;flex-direction:row;align-items:flex-start;overflow-x:auto;justify-content:space-between;padding:12px 20px;border-bottom:1px solid var(--theme-border-color);background-color:var(--theme-background-color);column-gap:20px}.aca-manage-rules__container__rule-details__header__title{display:flex;flex-direction:column;gap:4px;word-wrap:break-word;min-width:100px}.aca-manage-rules__container__rule-details__header__title__name{font-size:1.2em;font-weight:700}.aca-manage-rules__container__rule-details__header__title__description{font-size:.8em;font-style:italic}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons{display:flex;flex-direction:row;align-items:stretch;gap:4px}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons button{color:var(--theme-text-color)}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons button#delete-rule-btn{padding:0 8px;margin:0;min-width:unset}.aca-manage-rules__container__rule-details__header .aca-manage-rules__container__rule-details__header__buttons button#delete-rule-btn mat-icon{margin:0;padding:0;width:24px;height:24px;font-size:24px}\n"] }]
279
275
  }], ctorParameters: function () { return [{ type: i1.Location }, { type: i2.FolderRulesService }, { type: i3.ActivatedRoute }, { type: i4.MatDialog }, { type: i5.NotificationService }, { type: i6.ActionsService }, { type: i7.FolderRuleSetsService }]; } });
280
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJ1bGVzLnNtYXJ0LWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L2ZvbGRlci1ydWxlcy9zcmMvbWFuYWdlLXJ1bGVzL21hbmFnZS1ydWxlcy5zbWFydC1jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9mb2xkZXItcnVsZXMvc3JjL21hbmFnZS1ydWxlcy9tYW5hZ2UtcnVsZXMuc21hcnQtY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBYyxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFB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LGVBQWUsd2FBQ2YsYUFBYSxvTEFDYixvQkFBb0IseU5BQ3BCLG9CQUFvQix1TUFDcEIsZ0JBQWdCLG9JQUNoQixtQkFBbUIsZ1RBQ25CLFlBQVksdVFBQ1osY0FBYyw0SkFDZCxxQkFBcUIsZ0ZBQ3JCLHNCQUFzQixxTkFDdEIsZUFBZTs7U0FTTix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkExQnJDLFNBQVM7aUNBQ0ksSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixjQUFjO3dCQUNkLHFCQUFxQjt3QkFDckIsc0JBQXNCO3dCQUN0QixlQUFlO3FCQUNoQixZQUNTLGtCQUFrQixpQkFHYixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxPQUFPLFFBQzFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI0IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBmcm9tIEh5bGFuZCBTb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb2xkZXJSdWxlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb2xkZXItcnVsZXMuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJ1bGUgfSBmcm9tICcuLi9tb2RlbC9ydWxlLm1vZGVsJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTm9kZUluZm8gfSBmcm9tICdAYWxmcmVzY28vYWNhLXNoYXJlZC9zdG9yZSc7XG5pbXBvcnQgeyBkZWxheSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWRpdFJ1bGVEaWFsb2dVaUNvbXBvbmVudCB9IGZyb20gJy4uL3J1bGUtZGV0YWlscy9lZGl0LXJ1bGUtZGlhbG9nLnVpLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlLCBUZW1wbGF0ZU1vZHVsZSwgVG9vbGJhck1vZHVsZSwgQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25EZWZpbml0aW9uVHJhbnNmb3JtZWQgfSBmcm9tICcuLi9tb2RlbC9ydWxlLWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBBY3Rpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBGb2xkZXJSdWxlU2V0c1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb2xkZXItcnVsZS1zZXRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnVsZVNldCB9IGZyb20gJy4uL21vZGVsL3J1bGUtc2V0Lm1vZGVsJztcbmltcG9ydCB7IFJ1bGVTZXRQaWNrZXJTbWFydENvbXBvbmVudCB9IGZyb20gJy4uL3J1bGUtc2V0LXBpY2tlci9ydWxlLXNldC1waWNrZXIuc21hcnQtY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlLCBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBBY3Rpb25QYXJhbWV0ZXJDb25zdHJhaW50IH0gZnJvbSAnLi4vbW9kZWwvYWN0aW9uLXBhcmFtZXRlci1jb25zdHJhaW50Lm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgR2VuZXJpY0Vycm9yQ29tcG9uZW50LCBQYWdlTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnQGFsZnJlc2NvL2FjYS1zaGFyZWQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IFJ1bGVMaXN0VWlDb21wb25lbnQgfSBmcm9tICcuLi9ydWxlLWxpc3QvcnVsZS1saXN0L3J1bGUtbGlzdC51aS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUnVsZURldGFpbHNVaUNvbXBvbmVudCB9IGZyb20gJy4uL3J1bGUtZGV0YWlscy9ydWxlLWRldGFpbHMudWktY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFBhZ2VMYXlvdXRDb21wb25lbnQsXG4gICAgVG9vbGJhck1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIFJ1bGVMaXN0VWlDb21wb25lbnQsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIFRlbXBsYXRlTW9kdWxlLFxuICAgIEdlbmVyaWNFcnJvckNvbXBvbmVudCxcbiAgICBSdWxlRGV0YWlsc1VpQ29tcG9uZW50LFxuICAgIE1hdERpYWxvZ01vZHVsZVxuICBdLFxuICBzZWxlY3RvcjogJ2FjYS1tYW5hZ2UtcnVsZXMnLFxuICB0ZW1wbGF0ZVVybDogJ21hbmFnZS1ydWxlcy5zbWFydC1jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydtYW5hZ2UtcnVsZXMuc21hcnQtY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBob3N0OiB7IGNsYXNzOiAnYWNhLW1hbmFnZS1ydWxlcycgfVxufSlcbmV4cG9ydCBjbGFzcyBNYW5hZ2VSdWxlc1NtYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBub2RlSWQgPSAnJztcbiAgaXNJbmhlcml0YW5jZUVuYWJsZWQgPSB0cnVlO1xuICBpc0luaGVyaXRhbmNlVG9nZ2xlRGlzYWJsZWQgPSBmYWxzZTtcblxuICBtYWluUnVsZVNldCQ6IE9ic2VydmFibGU8UnVsZVNldD47XG4gIGluaGVyaXRlZFJ1bGVTZXRzJDogT2JzZXJ2YWJsZTxSdWxlU2V0W10+O1xuICBzZWxlY3RlZFJ1bGUkOiBPYnNlcnZhYmxlPFJ1bGU+O1xuICBzZWxlY3RlZFJ1bGVTZXQkOiBPYnNlcnZhYmxlPFJ1bGVTZXQ+O1xuICBoYXNNb3JlUnVsZVNldHMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBydWxlU2V0c0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBmb2xkZXJJbmZvJDogT2JzZXJ2YWJsZTxOb2RlSW5mbz47XG5cbiAgYWN0aW9uc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhY3Rpb25EZWZpbml0aW9ucyQ6IE9ic2VydmFibGU8QWN0aW9uRGVmaW5pdGlvblRyYW5zZm9ybWVkW10+O1xuICBwYXJhbWV0ZXJDb25zdHJhaW50cyQ6IE9ic2VydmFibGU8QWN0aW9uUGFyYW1ldGVyQ29uc3RyYWludFtdPjtcbiAgY2FuRWRpdE1haW5SdWxlID0gZmFsc2U7XG4gIGNhbkVkaXRTZWxlY3RlZFJ1bGUgPSBmYWxzZTtcbiAgaXNNYWluUnVsZVNldE5vdEVtcHR5ID0gZmFsc2U7XG4gIGlzSW5oZXJpdGVkUnVsZVNldHNOb3RFbXB0eSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2FjdGlvbkRlZmluaXRpb25zU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBmb2xkZXJSdWxlc1NlcnZpY2U6IEZvbGRlclJ1bGVzU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIG1hdERpYWxvZ1NlcnZpY2U6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25zU2VydmljZTogQWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb2xkZXJSdWxlU2V0c1NlcnZpY2U6IEZvbGRlclJ1bGVTZXRzU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tYWluUnVsZVNldCQgPSB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5tYWluUnVsZVNldCQ7XG4gICAgdGhpcy5pbmhlcml0ZWRSdWxlU2V0cyQgPSB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5pbmhlcml0ZWRSdWxlU2V0cyQ7XG4gICAgdGhpcy5zZWxlY3RlZFJ1bGUkID0gdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2Uuc2VsZWN0ZWRSdWxlJDtcbiAgICB0aGlzLnNlbGVjdGVkUnVsZVNldCQgPSB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5zZWxlY3RlZFJ1bGVTZXQkO1xuICAgIHRoaXMuaGFzTW9yZVJ1bGVTZXRzJCA9IHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmhhc01vcmVSdWxlU2V0cyQ7XG4gICAgdGhpcy5ydWxlU2V0c0xvYWRpbmckID0gdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UuaXNMb2FkaW5nJDtcbiAgICB0aGlzLmZvbGRlckluZm8kID0gdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UuZm9sZGVySW5mbyQ7XG5cbiAgICB0aGlzLmFjdGlvbnNMb2FkaW5nJCA9IHRoaXMuYWN0aW9uc1NlcnZpY2UubG9hZGluZyQucGlwZShkZWxheSgwKSk7XG4gICAgdGhpcy5hY3Rpb25EZWZpbml0aW9ucyQgPSB0aGlzLmFjdGlvbnNTZXJ2aWNlLmFjdGlvbkRlZmluaXRpb25zTGlzdGluZyQ7XG4gICAgdGhpcy5wYXJhbWV0ZXJDb25zdHJhaW50cyQgPSB0aGlzLmFjdGlvbnNTZXJ2aWNlLnBhcmFtZXRlckNvbnN0cmFpbnRzJDtcblxuICAgIHRoaXMuZm9sZGVyUnVsZXNTZXJ2aWNlLmRlbGV0ZWRSdWxlSWQkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZSgoZGVsZXRlZFJ1bGVJZCkgPT4gdGhpcy5vblJ1bGVEZWxldGUoZGVsZXRlZFJ1bGVJZCkpO1xuXG4gICAgdGhpcy5hY3Rpb25zU2VydmljZS5sb2FkQWN0aW9uRGVmaW5pdGlvbnMoKTtcblxuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICB0aGlzLm5vZGVJZCA9IHBhcmFtcy5ub2RlSWQ7XG4gICAgICBpZiAodGhpcy5ub2RlSWQpIHtcbiAgICAgICAgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2UuZ2V0UnVsZVNldHRpbmdzKHRoaXMubm9kZUlkKS50aGVuKChydWxlU2V0dGluZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLmlzSW5oZXJpdGFuY2VFbmFibGVkID0gcnVsZVNldHRpbmdzLnZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5sb2FkUnVsZVNldHModGhpcy5ub2RlSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fYWN0aW9uRGVmaW5pdGlvbnNTdWIgPSB0aGlzLmFjdGlvbkRlZmluaXRpb25zJC5zdWJzY3JpYmUoKGFjdGlvbkRlZmluaXRpb25zOiBBY3Rpb25EZWZpbml0aW9uVHJhbnNmb3JtZWRbXSkgPT5cbiAgICAgIHRoaXMuYWN0aW9uc1NlcnZpY2UubG9hZEFjdGlvblBhcmFtZXRlckNvbnN0cmFpbnRzKGFjdGlvbkRlZmluaXRpb25zKVxuICAgICk7XG5cbiAgICB0aGlzLm1haW5SdWxlU2V0JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHJ1bGVTZXQpID0+IHtcbiAgICAgIHRoaXMuY2FuRWRpdE1haW5SdWxlID0gdGhpcy5jYW5FZGl0UnVsZShydWxlU2V0KTtcbiAgICAgIHRoaXMuaXNNYWluUnVsZVNldE5vdEVtcHR5ID0gISFydWxlU2V0O1xuICAgIH0pO1xuXG4gICAgdGhpcy5pbmhlcml0ZWRSdWxlU2V0cyQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKChpbmhlcml0ZWRSdWxlU2V0KSA9PiB7XG4gICAgICB0aGlzLmlzSW5oZXJpdGVkUnVsZVNldHNOb3RFbXB0eSA9IGluaGVyaXRlZFJ1bGVTZXQuc29tZSgocnVsZVNldCkgPT4gcnVsZVNldC5ydWxlcy5zb21lKChydWxlOiBSdWxlKSA9PiBydWxlLmlzRW5hYmxlZCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZWxlY3RlZFJ1bGVTZXQkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZSgocnVsZVNldCkgPT4ge1xuICAgICAgdGhpcy5jYW5FZGl0U2VsZWN0ZWRSdWxlID0gdGhpcy5jYW5FZGl0UnVsZShydWxlU2V0KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fYWN0aW9uRGVmaW5pdGlvbnNTdWIudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdvQmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgfVxuXG4gIG9uU2VsZWN0UnVsZShydWxlOiBSdWxlKSB7XG4gICAgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2Uuc2VsZWN0UnVsZShydWxlKTtcbiAgfVxuXG4gIG9wZW5DcmVhdGVVcGRhdGVSdWxlRGlhbG9nKG1vZGVsID0ge30pIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm1hdERpYWxvZ1NlcnZpY2Uub3BlbihFZGl0UnVsZURpYWxvZ1VpQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzkwJScsXG4gICAgICBwYW5lbENsYXNzOiAnYWNhLWVkaXQtcnVsZS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIG5vZGVJZDogdGhpcy5ub2RlSWQsXG4gICAgICAgIHBhcmFtZXRlckNvbnN0cmFpbnRzJDogdGhpcy5wYXJhbWV0ZXJDb25zdHJhaW50cyQsXG4gICAgICAgIGFjdGlvbkRlZmluaXRpb25zJDogdGhpcy5hY3Rpb25EZWZpbml0aW9ucyRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub25TdWJtaXRSdWxlRGlhbG9nKGRpYWxvZ1JlZik7XG4gIH1cblxuICBvblN1Ym1pdFJ1bGVEaWFsb2coZGlhbG9nUmVmKSB7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLnN1Ym1pdHRlZC5zdWJzY3JpYmUoYXN5bmMgKHJ1bGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChydWxlLmlkKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vblJ1bGVVcGRhdGUocnVsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vblJ1bGVDcmVhdGUocnVsZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKGVycm9yLnJlc3BvbnNlLmJvZHkuZXJyb3IuZXJyb3JLZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25SdWxlVXBkYXRlKHJ1bGU6IFJ1bGUpIHtcbiAgICBjb25zdCBuZXdSdWxlID0gYXdhaXQgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2UudXBkYXRlUnVsZSh0aGlzLm5vZGVJZCwgcnVsZS5pZCwgcnVsZSk7XG4gICAgdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UuYWRkT3JVcGRhdGVSdWxlSW5NYWluUnVsZVNldChuZXdSdWxlKTtcbiAgfVxuXG4gIGFzeW5jIG9uUnVsZUNyZWF0ZShydWxlQ3JlYXRlUGFyYW1zOiBQYXJ0aWFsPFJ1bGU+KSB7XG4gICAgY29uc3QgbmV3UnVsZSA9IGF3YWl0IHRoaXMuZm9sZGVyUnVsZXNTZXJ2aWNlLmNyZWF0ZVJ1bGUodGhpcy5ub2RlSWQsIHJ1bGVDcmVhdGVQYXJhbXMpO1xuICAgIHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmFkZE9yVXBkYXRlUnVsZUluTWFpblJ1bGVTZXQobmV3UnVsZSk7XG4gIH1cblxuICBhc3luYyBvblJ1bGVFbmFibGVkVG9nZ2xlKHJ1bGU6IFJ1bGUsIGlzRW5hYmxlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IHVwZGF0ZWRSdWxlID0gYXdhaXQgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2UudXBkYXRlUnVsZSh0aGlzLm5vZGVJZCwgcnVsZS5pZCwgeyAuLi5ydWxlLCBpc0VuYWJsZWQgfSk7XG4gICAgdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UuYWRkT3JVcGRhdGVSdWxlSW5NYWluUnVsZVNldCh1cGRhdGVkUnVsZSk7XG4gIH1cblxuICBhc3luYyBvbkluaGVyaXRhbmNlVG9nZ2xlQ2hhbmdlKGV2ZW50OiBNYXRTbGlkZVRvZ2dsZUNoYW5nZSkge1xuICAgIHRoaXMuaXNJbmhlcml0YW5jZVRvZ2dsZURpc2FibGVkID0gdHJ1ZTtcbiAgICBjb25zdCBydWxlU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmZvbGRlclJ1bGVzU2VydmljZS51cGRhdGVSdWxlU2V0dGluZ3ModGhpcy5ub2RlSWQsICctaXNJbmhlcml0YW5jZUVuYWJsZWQtJywgeyB2YWx1ZTogZXZlbnQuY2hlY2tlZCB9KTtcbiAgICB0aGlzLmlzSW5oZXJpdGFuY2VFbmFibGVkID0gcnVsZVNldHRpbmdzLnZhbHVlO1xuICAgIHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmxvYWRSdWxlU2V0cyh0aGlzLm5vZGVJZCk7XG4gICAgdGhpcy5pc0luaGVyaXRhbmNlVG9nZ2xlRGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uUnVsZURlbGV0ZUJ1dHRvbkNsaWNrZWQocnVsZTogUnVsZSkge1xuICAgIHRoaXMubWF0RGlhbG9nU2VydmljZVxuICAgICAgLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdGl0bGU6ICdBQ0FfRk9MREVSX1JVTEVTLkNPTkZJUk1BVElPTl9ESUFMT0cuREVMRVRFX1JVTEUuVElUTEUnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdBQ0FfRk9MREVSX1JVTEVTLkNPTkZJUk1BVElPTl9ESUFMT0cuREVMRVRFX1JVTEUuTUVTU0FHRSdcbiAgICAgICAgfSxcbiAgICAgICAgbWluV2lkdGg6ICczNDZweCdcbiAgICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLmZvbGRlclJ1bGVzU2VydmljZS5kZWxldGVSdWxlKHRoaXMubm9kZUlkLCBydWxlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBvblJ1bGVEZWxldGUoZGVsZXRlZFJ1bGVJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UucmVtb3ZlUnVsZUZyb21NYWluUnVsZVNldChkZWxldGVkUnVsZUlkKTtcbiAgfVxuXG4gIG9uTG9hZE1vcmVSdWxlU2V0cygpIHtcbiAgICB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5sb2FkTW9yZUluaGVyaXRlZFJ1bGVTZXRzKCk7XG4gIH1cblxuICBvbkxvYWRNb3JlUnVsZXMocnVsZVNldDogUnVsZVNldCkge1xuICAgIHRoaXMuZm9sZGVyUnVsZXNTZXJ2aWNlLmxvYWRSdWxlcyhydWxlU2V0KTtcbiAgfVxuXG4gIGNhbkVkaXRSdWxlKHJ1bGVTZXQ6IFJ1bGVTZXQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXJ1bGVTZXQgfHwgRm9sZGVyUnVsZVNldHNTZXJ2aWNlLmlzT3duZWRSdWxlU2V0KHJ1bGVTZXQsIHRoaXMubm9kZUlkKTtcbiAgfVxuXG4gIG9wZW5MaW5rUnVsZXNEaWFsb2coZXhpc3RpbmdSdWxlU2V0PzogUnVsZVNldCkge1xuICAgIHRoaXMubWF0RGlhbG9nU2VydmljZVxuICAgICAgLm9wZW4oUnVsZVNldFBpY2tlclNtYXJ0Q29tcG9uZW50LCB7XG4gICAgICAgIHdpZHRoOiAnOTAlJyxcbiAgICAgICAgcGFuZWxDbGFzczogJ2FjYS1ydWxlLXNldC1waWNrZXItY29udGFpbmVyJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG5vZGVJZDogdGhpcy5ub2RlSWQsXG4gICAgICAgICAgZGVmYXVsdE5vZGVJZDogdGhpcy5ub2RlSWQsXG4gICAgICAgICAgZXhpc3RpbmdSdWxlU2V0XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5yZWZyZXNoTWFpblJ1bGVTZXQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBvblJ1bGVTZXRVbmxpbmtDbGlja2VkKGxpbmtlZFJ1bGVTZXQ6IFJ1bGVTZXQpIHtcbiAgICB0aGlzLm1hdERpYWxvZ1NlcnZpY2VcbiAgICAgIC5vcGVuKENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHRpdGxlOiAnQUNBX0ZPTERFUl9SVUxFUy5DT05GSVJNQVRJT05fRElBTE9HLkRFTEVURV9SVUxFX1NFVF9MSU5LLlRJVExFJyxcbiAgICAgICAgICBtZXNzYWdlOiAnQUNBX0ZPTERFUl9SVUxFUy5DT05GSVJNQVRJT05fRElBTE9HLkRFTEVURV9SVUxFX1NFVF9MSU5LLk1FU1NBR0UnXG4gICAgICAgIH0sXG4gICAgICAgIG1pbldpZHRoOiAnMzQ2cHgnXG4gICAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmRlbGV0ZVJ1bGVTZXRMaW5rKHRoaXMubm9kZUlkLCBsaW5rZWRSdWxlU2V0LmlkKTtcbiAgICAgICAgICAgIHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLnJlZnJlc2hNYWluUnVsZVNldCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKCdBQ0FfRk9MREVSX1JVTEVTLkVSUk9SUy5ERUxFVEVfUlVMRV9TRVRfTElOS19GQUlMRUQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iLCI8YWNhLXBhZ2UtbGF5b3V0PlxuXG4gIDxkaXYgY2xhc3M9XCJhY2EtcGFnZS1sYXlvdXQtaGVhZGVyXCI+XG4gICAgPGFkZi10b29sYmFyIGNsYXNzPVwiYWRmLXRvb2xiYXItLWlubGluZVwiPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvYWRmLXRvb2xiYXI+XG4gICAgPGgxIGNsYXNzPVwiYWNhLXBhZ2UtdGl0bGVcIj57eyAnQUNBX0ZPTERFUl9SVUxFUy5BQ1RJT05TLk1BTkFHRV9SVUxFUycgfCB0cmFuc2xhdGUgfX08L2gxPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWNhLXBhZ2UtbGF5b3V0LWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWNhLW1haW4tY29udGVudFwiPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKChydWxlU2V0c0xvYWRpbmckIHwgYXN5bmMpICYmIChpbmhlcml0ZWRSdWxlU2V0cyQgfCBhc3luYykubGVuZ3RoID09PSAwKSB8fCAoYWN0aW9uc0xvYWRpbmckIHwgYXN5bmMpOyBlbHNlIG9uTG9hZGVkXCI+XG4gICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIGNvbG9yPVwicHJpbWFyeVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCIgLz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI29uTG9hZGVkPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9sZGVySW5mbyQgfCBhc3luYzsgZWxzZSBnZW5lcmljRXJyb3JcIj5cbiAgICAgICAgICA8YWRmLXRvb2xiYXIgY2xhc3M9XCJhZGYtdG9vbGJhci0taW5saW5lIGFjYS1tYW5hZ2UtcnVsZXNfX2FjdGlvbnMtYmFyXCI+XG5cbiAgICAgICAgICAgIDxhZGYtdG9vbGJhci10aXRsZSBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2FjdGlvbnMtYmFyX190aXRsZVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLWFsaWduZXJcIj5mb2xkZXI8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJhY2EtcGFnZS10aXRsZVwiPnt7IChmb2xkZXJJbmZvJCB8IGFzeW5jKS5uYW1lIH19Ont7J0FDQV9GT0xERVJfUlVMRVMuTUFOQUdFX1JVTEVTLlRPT0xCQVIuQlJFQURDUlVNQi5SVUxFUycgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgICAgICAgICA8L2FkZi10b29sYmFyLXRpdGxlPlxuXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJtYW5hZ2UtcnVsZXMtaW5oZXJpdGFuY2UtdG9nZ2xlLWJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWNhLW1hbmFnZS1ydWxlc19fYWN0aW9ucy1iYXJfX3RvZ2dsZVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzSW5oZXJpdGFuY2VFbmFibGVkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkluaGVyaXRhbmNlVG9nZ2xlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJbmhlcml0YW5jZVRvZ2dsZURpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIj5cbiAgICAgICAgICAgICAge3sgJ0FDQV9GT0xERVJfUlVMRVMuTUFOQUdFX1JVTEVTLlRPT0xCQVIuQUNUSU9OUy5JTkhFUklUX1JVTEVTJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXIgdmVydGljYWwgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19hY3Rpb25zLWJhcl9fdmVydGljYWwtZGl2aWRlclwiIC8+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19hY3Rpb25zLWJhcl9fYnV0dG9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhKG1haW5SdWxlU2V0JCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwibWFuYWdlLXJ1bGVzLWxpbmstYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkxpbmtSdWxlc0RpYWxvZygpXCI+XG4gICAgICAgICAgICAgICAge3sgJ0FDQV9GT0xERVJfUlVMRVMuTUFOQUdFX1JVTEVTLlRPT0xCQVIuQUNUSU9OUy5MSU5LX1JVTEVTJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5FZGl0TWFpblJ1bGVcIlxuICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cIm1hbmFnZS1ydWxlcy1jcmVhdGUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNyZWF0ZVVwZGF0ZVJ1bGVEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdBQ0FfRk9MREVSX1JVTEVTLk1BTkFHRV9SVUxFUy5UT09MQkFSLkFDVElPTlMuQ1JFQVRFX1JVTEUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2FkZi10b29sYmFyPlxuICAgICAgICAgIDxtYXQtZGl2aWRlciAvPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2NvbnRhaW5lclwiICpuZ0lmPVwiaXNNYWluUnVsZVNldE5vdEVtcHR5IHx8IGlzSW5oZXJpdGVkUnVsZVNldHNOb3RFbXB0eTsgZWxzZSBlbXB0eUNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxhY2EtcnVsZS1saXN0XG4gICAgICAgICAgICAgIFttYWluUnVsZVNldCRdPVwibWFpblJ1bGVTZXQkXCJcbiAgICAgICAgICAgICAgW2ZvbGRlcklkXT1cIm5vZGVJZFwiXG4gICAgICAgICAgICAgIFtpbmhlcml0ZWRSdWxlU2V0c109XCJpbmhlcml0ZWRSdWxlU2V0cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFtoYXNNb3JlUnVsZVNldHNdPVwiaGFzTW9yZVJ1bGVTZXRzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW3J1bGVTZXRzTG9hZGluZ109XCJydWxlU2V0c0xvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRSdWxlXT1cInNlbGVjdGVkUnVsZSQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIChsb2FkTW9yZVJ1bGVTZXRzKT1cIm9uTG9hZE1vcmVSdWxlU2V0cygpXCJcbiAgICAgICAgICAgICAgKGxvYWRNb3JlUnVsZXMpPVwib25Mb2FkTW9yZVJ1bGVzKCRldmVudClcIlxuICAgICAgICAgICAgICAoc2VsZWN0UnVsZSk9XCJvblNlbGVjdFJ1bGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChydWxlRW5hYmxlZENoYW5nZWQpPVwib25SdWxlRW5hYmxlZFRvZ2dsZSgkZXZlbnRbMF0sICRldmVudFsxXSlcIlxuICAgICAgICAgICAgICAocnVsZVNldEVkaXRMaW5rQ2xpY2tlZCk9XCJvcGVuTGlua1J1bGVzRGlhbG9nKCRldmVudClcIlxuICAgICAgICAgICAgICAocnVsZVNldFVubGlua0NsaWNrZWQpPVwib25SdWxlU2V0VW5saW5rQ2xpY2tlZCgkZXZlbnQpXCIgLz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2NvbnRhaW5lcl9fcnVsZS1kZXRhaWxzXCI+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2NvbnRhaW5lcl9fcnVsZS1kZXRhaWxzX19oZWFkZXJcIiAqbmdJZj1cIihzZWxlY3RlZFJ1bGUkIHwgYXN5bmMpIGFzIHNlbGVjdGVkUnVsZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19jb250YWluZXJfX3J1bGUtZGV0YWlsc19faGVhZGVyX190aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2NvbnRhaW5lcl9fcnVsZS1kZXRhaWxzX19oZWFkZXJfX3RpdGxlX19uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkUnVsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19jb250YWluZXJfX3J1bGUtZGV0YWlsc19faGVhZGVyX190aXRsZV9fZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRSdWxlLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19jb250YWluZXJfX3J1bGUtZGV0YWlsc19faGVhZGVyX19idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuRWRpdFNlbGVjdGVkUnVsZTsgZWxzZSBnb1RvRm9sZGVyQnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJvblJ1bGVEZWxldGVCdXR0b25DbGlja2VkKHNlbGVjdGVkUnVsZSlcIiBpZD1cImRlbGV0ZS1ydWxlLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGVfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwib3BlbkNyZWF0ZVVwZGF0ZVJ1bGVEaWFsb2coc2VsZWN0ZWRSdWxlKVwiIGlkPVwiZWRpdC1ydWxlLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdBQ0FfRk9MREVSX1JVTEVTLk1BTkFHRV9SVUxFUy5UT09MQkFSLkFDVElPTlMuRURJVF9SVUxFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2dvVG9Gb2xkZXJCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFtyb3V0ZXJMaW5rXT1cIlsnL25vZGVzJywgKHNlbGVjdGVkUnVsZVNldCQgfCBhc3luYykub3duaW5nRm9sZGVyLmlkLCAncnVsZXMnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdBQ0FfRk9MREVSX1JVTEVTLk1BTkFHRV9SVUxFUy5UT09MQkFSLkFDVElPTlMuU0VFX0lOX0ZPTERFUicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNhLW1hbmFnZS1ydWxlc19fY29udGFpbmVyX19ydWxlLWRldGFpbHNfX2NvbnRlbnRcIiAqbmdJZj1cIihzZWxlY3RlZFJ1bGUkIHwgYXN5bmMpIGFzIHNlbGVjdGVkUnVsZVwiPlxuICAgICAgICAgICAgICAgIDxhY2EtcnVsZS1kZXRhaWxzXG4gICAgICAgICAgICAgICAgICBbYWN0aW9uRGVmaW5pdGlvbnNdPVwiYWN0aW9uRGVmaW5pdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgW3BhcmFtZXRlckNvbnN0cmFpbnRzXT1cInBhcmFtZXRlckNvbnN0cmFpbnRzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtwcmV2aWV3XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkUnVsZVwiXG4gICAgICAgICAgICAgICAgICBbbm9kZUlkXT1cIm5vZGVJZFwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5Q29udGVudD5cbiAgICAgICAgICAgIDxhZGYtZW1wdHktY29udGVudFxuICAgICAgICAgICAgICBpY29uPVwibGlicmFyeV9ib29rc1wiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQUNBX0ZPTERFUl9SVUxFUy5NQU5BR0VfUlVMRVMuRU1QVFlfUlVMRVNfTElTVC5USVRMRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbc3VidGl0bGVdPVwiJ0FDQV9GT0xERVJfUlVMRVMuTUFOQUdFX1JVTEVTLkVNUFRZX1JVTEVTX0xJU1QuU1VCVElUTEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNnZW5lcmljRXJyb3I+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1wYWdlLWxheW91dC1lcnJvclwiPlxuICAgICAgICAgICAgPGFjYS1nZW5lcmljLWVycm9yIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvYWNhLXBhZ2UtbGF5b3V0PlxuIl19
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJ1bGVzLnNtYXJ0LWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L2ZvbGRlci1ydWxlcy9zcmMvbWFuYWdlLXJ1bGVzL21hbmFnZS1ydWxlcy5zbWFydC1jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9mb2xkZXItcnVsZXMvc3JjL21hbmFnZS1ydWxlcy9tYW5hZ2UtcnVsZXMuc21hcnQtY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUd0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTdFLE9BQU8sRUFB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LGdGQUNyQixzQkFBc0IscU5BQ3RCLGVBQWU7O1NBU04seUJBQXlCOzJGQUF6Qix5QkFBeUI7a0JBMUJyQyxTQUFTO2lDQUNJLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxxQkFBcUI7d0JBQ3JCLHNCQUFzQjt3QkFDdEIsZUFBZTtxQkFDaEIsWUFDUyxrQkFBa0IsaUJBR2IsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsT0FBTyxRQUMxQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNCBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBpbmplY3QsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9sZGVyUnVsZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9sZGVyLXJ1bGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUnVsZSB9IGZyb20gJy4uL21vZGVsL3J1bGUubW9kZWwnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOb2RlSW5mbyB9IGZyb20gJ0BhbGZyZXNjby9hY2Etc2hhcmVkL3N0b3JlJztcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWRpdFJ1bGVEaWFsb2dVaUNvbXBvbmVudCB9IGZyb20gJy4uL3J1bGUtZGV0YWlscy9lZGl0LXJ1bGUtZGlhbG9nLnVpLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDb25maXJtRGlhbG9nQ29tcG9uZW50LCBOb3RpZmljYXRpb25TZXJ2aWNlLCBUZW1wbGF0ZU1vZHVsZSwgVG9vbGJhck1vZHVsZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25EZWZpbml0aW9uVHJhbnNmb3JtZWQgfSBmcm9tICcuLi9tb2RlbC9ydWxlLWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBBY3Rpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBGb2xkZXJSdWxlU2V0c1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb2xkZXItcnVsZS1zZXRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnVsZVNldCB9IGZyb20gJy4uL21vZGVsL3J1bGUtc2V0Lm1vZGVsJztcbmltcG9ydCB7IFJ1bGVTZXRQaWNrZXJTbWFydENvbXBvbmVudCB9IGZyb20gJy4uL3J1bGUtc2V0LXBpY2tlci9ydWxlLXNldC1waWNrZXIuc21hcnQtY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlLCBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBBY3Rpb25QYXJhbWV0ZXJDb25zdHJhaW50IH0gZnJvbSAnLi4vbW9kZWwvYWN0aW9uLXBhcmFtZXRlci1jb25zdHJhaW50Lm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgR2VuZXJpY0Vycm9yQ29tcG9uZW50LCBQYWdlTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnQGFsZnJlc2NvL2FjYS1zaGFyZWQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IFJ1bGVMaXN0VWlDb21wb25lbnQgfSBmcm9tICcuLi9ydWxlLWxpc3QvcnVsZS1saXN0L3J1bGUtbGlzdC51aS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUnVsZURldGFpbHNVaUNvbXBvbmVudCB9IGZyb20gJy4uL3J1bGUtZGV0YWlscy9ydWxlLWRldGFpbHMudWktY29tcG9uZW50JztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFBhZ2VMYXlvdXRDb21wb25lbnQsXG4gICAgVG9vbGJhck1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIFJ1bGVMaXN0VWlDb21wb25lbnQsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIFRlbXBsYXRlTW9kdWxlLFxuICAgIEdlbmVyaWNFcnJvckNvbXBvbmVudCxcbiAgICBSdWxlRGV0YWlsc1VpQ29tcG9uZW50LFxuICAgIE1hdERpYWxvZ01vZHVsZVxuICBdLFxuICBzZWxlY3RvcjogJ2FjYS1tYW5hZ2UtcnVsZXMnLFxuICB0ZW1wbGF0ZVVybDogJ21hbmFnZS1ydWxlcy5zbWFydC1jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydtYW5hZ2UtcnVsZXMuc21hcnQtY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBob3N0OiB7IGNsYXNzOiAnYWNhLW1hbmFnZS1ydWxlcycgfVxufSlcbmV4cG9ydCBjbGFzcyBNYW5hZ2VSdWxlc1NtYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbm9kZUlkID0gJyc7XG4gIGlzSW5oZXJpdGFuY2VFbmFibGVkID0gdHJ1ZTtcbiAgaXNJbmhlcml0YW5jZVRvZ2dsZURpc2FibGVkID0gZmFsc2U7XG5cbiAgbWFpblJ1bGVTZXQkOiBPYnNlcnZhYmxlPFJ1bGVTZXQ+O1xuICBpbmhlcml0ZWRSdWxlU2V0cyQ6IE9ic2VydmFibGU8UnVsZVNldFtdPjtcbiAgc2VsZWN0ZWRSdWxlJDogT2JzZXJ2YWJsZTxSdWxlPjtcbiAgc2VsZWN0ZWRSdWxlU2V0JDogT2JzZXJ2YWJsZTxSdWxlU2V0PjtcbiAgaGFzTW9yZVJ1bGVTZXRzJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcnVsZVNldHNMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZm9sZGVySW5mbyQ6IE9ic2VydmFibGU8Tm9kZUluZm8+O1xuXG4gIGFjdGlvbnNMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgYWN0aW9uRGVmaW5pdGlvbnMkOiBPYnNlcnZhYmxlPEFjdGlvbkRlZmluaXRpb25UcmFuc2Zvcm1lZFtdPjtcbiAgcGFyYW1ldGVyQ29uc3RyYWludHMkOiBPYnNlcnZhYmxlPEFjdGlvblBhcmFtZXRlckNvbnN0cmFpbnRbXT47XG4gIGNhbkVkaXRNYWluUnVsZSA9IGZhbHNlO1xuICBjYW5FZGl0U2VsZWN0ZWRSdWxlID0gZmFsc2U7XG4gIGlzTWFpblJ1bGVTZXROb3RFbXB0eSA9IGZhbHNlO1xuICBpc0luaGVyaXRlZFJ1bGVTZXRzTm90RW1wdHkgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBmb2xkZXJSdWxlc1NlcnZpY2U6IEZvbGRlclJ1bGVzU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIG1hdERpYWxvZ1NlcnZpY2U6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25zU2VydmljZTogQWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb2xkZXJSdWxlU2V0c1NlcnZpY2U6IEZvbGRlclJ1bGVTZXRzU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tYWluUnVsZVNldCQgPSB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5tYWluUnVsZVNldCQ7XG4gICAgdGhpcy5pbmhlcml0ZWRSdWxlU2V0cyQgPSB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5pbmhlcml0ZWRSdWxlU2V0cyQ7XG4gICAgdGhpcy5zZWxlY3RlZFJ1bGUkID0gdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2Uuc2VsZWN0ZWRSdWxlJDtcbiAgICB0aGlzLnNlbGVjdGVkUnVsZVNldCQgPSB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5zZWxlY3RlZFJ1bGVTZXQkO1xuICAgIHRoaXMuaGFzTW9yZVJ1bGVTZXRzJCA9IHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmhhc01vcmVSdWxlU2V0cyQ7XG4gICAgdGhpcy5ydWxlU2V0c0xvYWRpbmckID0gdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UuaXNMb2FkaW5nJDtcbiAgICB0aGlzLmZvbGRlckluZm8kID0gdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UuZm9sZGVySW5mbyQ7XG5cbiAgICB0aGlzLmFjdGlvbnNMb2FkaW5nJCA9IHRoaXMuYWN0aW9uc1NlcnZpY2UubG9hZGluZyQucGlwZShkZWxheSgwKSk7XG4gICAgdGhpcy5hY3Rpb25EZWZpbml0aW9ucyQgPSB0aGlzLmFjdGlvbnNTZXJ2aWNlLmFjdGlvbkRlZmluaXRpb25zTGlzdGluZyQ7XG4gICAgdGhpcy5wYXJhbWV0ZXJDb25zdHJhaW50cyQgPSB0aGlzLmFjdGlvbnNTZXJ2aWNlLnBhcmFtZXRlckNvbnN0cmFpbnRzJDtcblxuICAgIHRoaXMuZm9sZGVyUnVsZXNTZXJ2aWNlLmRlbGV0ZWRSdWxlSWQkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoZGVsZXRlZFJ1bGVJZCkgPT4gdGhpcy5vblJ1bGVEZWxldGUoZGVsZXRlZFJ1bGVJZCkpO1xuXG4gICAgdGhpcy5hY3Rpb25zU2VydmljZS5sb2FkQWN0aW9uRGVmaW5pdGlvbnMoKTtcblxuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICB0aGlzLm5vZGVJZCA9IHBhcmFtcy5ub2RlSWQ7XG4gICAgICBpZiAodGhpcy5ub2RlSWQpIHtcbiAgICAgICAgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2UuZ2V0UnVsZVNldHRpbmdzKHRoaXMubm9kZUlkKS50aGVuKChydWxlU2V0dGluZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLmlzSW5oZXJpdGFuY2VFbmFibGVkID0gcnVsZVNldHRpbmdzLnZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5sb2FkUnVsZVNldHModGhpcy5ub2RlSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hY3Rpb25EZWZpbml0aW9ucyRcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoYWN0aW9uRGVmaW5pdGlvbnM6IEFjdGlvbkRlZmluaXRpb25UcmFuc2Zvcm1lZFtdKSA9PiB0aGlzLmFjdGlvbnNTZXJ2aWNlLmxvYWRBY3Rpb25QYXJhbWV0ZXJDb25zdHJhaW50cyhhY3Rpb25EZWZpbml0aW9ucykpO1xuXG4gICAgdGhpcy5tYWluUnVsZVNldCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChydWxlU2V0KSA9PiB7XG4gICAgICB0aGlzLmNhbkVkaXRNYWluUnVsZSA9IHRoaXMuY2FuRWRpdFJ1bGUocnVsZVNldCk7XG4gICAgICB0aGlzLmlzTWFpblJ1bGVTZXROb3RFbXB0eSA9ICEhcnVsZVNldDtcbiAgICB9KTtcblxuICAgIHRoaXMuaW5oZXJpdGVkUnVsZVNldHMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5oZXJpdGVkUnVsZVNldCkgPT4ge1xuICAgICAgdGhpcy5pc0luaGVyaXRlZFJ1bGVTZXRzTm90RW1wdHkgPSBpbmhlcml0ZWRSdWxlU2V0LnNvbWUoKHJ1bGVTZXQpID0+IHJ1bGVTZXQucnVsZXMuc29tZSgocnVsZTogUnVsZSkgPT4gcnVsZS5pc0VuYWJsZWQpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0ZWRSdWxlU2V0JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHJ1bGVTZXQpID0+IHtcbiAgICAgIHRoaXMuY2FuRWRpdFNlbGVjdGVkUnVsZSA9IHRoaXMuY2FuRWRpdFJ1bGUocnVsZVNldCk7XG4gICAgfSk7XG4gIH1cblxuICBnb0JhY2soKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gIH1cblxuICBvblNlbGVjdFJ1bGUocnVsZTogUnVsZSkge1xuICAgIHRoaXMuZm9sZGVyUnVsZXNTZXJ2aWNlLnNlbGVjdFJ1bGUocnVsZSk7XG4gIH1cblxuICBvcGVuQ3JlYXRlVXBkYXRlUnVsZURpYWxvZyhtb2RlbCA9IHt9KSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5tYXREaWFsb2dTZXJ2aWNlLm9wZW4oRWRpdFJ1bGVEaWFsb2dVaUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc5MCUnLFxuICAgICAgcGFuZWxDbGFzczogJ2FjYS1lZGl0LXJ1bGUtZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBub2RlSWQ6IHRoaXMubm9kZUlkLFxuICAgICAgICBwYXJhbWV0ZXJDb25zdHJhaW50cyQ6IHRoaXMucGFyYW1ldGVyQ29uc3RyYWludHMkLFxuICAgICAgICBhY3Rpb25EZWZpbml0aW9ucyQ6IHRoaXMuYWN0aW9uRGVmaW5pdGlvbnMkXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uU3VibWl0UnVsZURpYWxvZyhkaWFsb2dSZWYpO1xuICB9XG5cbiAgb25TdWJtaXRSdWxlRGlhbG9nKGRpYWxvZ1JlZikge1xuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5zdWJtaXR0ZWQuc3Vic2NyaWJlKGFzeW5jIChydWxlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocnVsZS5pZCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMub25SdWxlVXBkYXRlKHJ1bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMub25SdWxlQ3JlYXRlKHJ1bGUpO1xuICAgICAgICB9XG4gICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dFcnJvcihlcnJvci5yZXNwb25zZS5ib2R5LmVycm9yLmVycm9yS2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uUnVsZVVwZGF0ZShydWxlOiBSdWxlKSB7XG4gICAgY29uc3QgbmV3UnVsZSA9IGF3YWl0IHRoaXMuZm9sZGVyUnVsZXNTZXJ2aWNlLnVwZGF0ZVJ1bGUodGhpcy5ub2RlSWQsIHJ1bGUuaWQsIHJ1bGUpO1xuICAgIHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmFkZE9yVXBkYXRlUnVsZUluTWFpblJ1bGVTZXQobmV3UnVsZSk7XG4gIH1cblxuICBhc3luYyBvblJ1bGVDcmVhdGUocnVsZUNyZWF0ZVBhcmFtczogUGFydGlhbDxSdWxlPikge1xuICAgIGNvbnN0IG5ld1J1bGUgPSBhd2FpdCB0aGlzLmZvbGRlclJ1bGVzU2VydmljZS5jcmVhdGVSdWxlKHRoaXMubm9kZUlkLCBydWxlQ3JlYXRlUGFyYW1zKTtcbiAgICB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5hZGRPclVwZGF0ZVJ1bGVJbk1haW5SdWxlU2V0KG5ld1J1bGUpO1xuICB9XG5cbiAgYXN5bmMgb25SdWxlRW5hYmxlZFRvZ2dsZShydWxlOiBSdWxlLCBpc0VuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCB1cGRhdGVkUnVsZSA9IGF3YWl0IHRoaXMuZm9sZGVyUnVsZXNTZXJ2aWNlLnVwZGF0ZVJ1bGUodGhpcy5ub2RlSWQsIHJ1bGUuaWQsIHsgLi4ucnVsZSwgaXNFbmFibGVkIH0pO1xuICAgIHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLmFkZE9yVXBkYXRlUnVsZUluTWFpblJ1bGVTZXQodXBkYXRlZFJ1bGUpO1xuICB9XG5cbiAgYXN5bmMgb25Jbmhlcml0YW5jZVRvZ2dsZUNoYW5nZShldmVudDogTWF0U2xpZGVUb2dnbGVDaGFuZ2UpIHtcbiAgICB0aGlzLmlzSW5oZXJpdGFuY2VUb2dnbGVEaXNhYmxlZCA9IHRydWU7XG4gICAgY29uc3QgcnVsZVNldHRpbmdzID0gYXdhaXQgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2UudXBkYXRlUnVsZVNldHRpbmdzKHRoaXMubm9kZUlkLCAnLWlzSW5oZXJpdGFuY2VFbmFibGVkLScsIHsgdmFsdWU6IGV2ZW50LmNoZWNrZWQgfSk7XG4gICAgdGhpcy5pc0luaGVyaXRhbmNlRW5hYmxlZCA9IHJ1bGVTZXR0aW5ncy52YWx1ZTtcbiAgICB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5sb2FkUnVsZVNldHModGhpcy5ub2RlSWQpO1xuICAgIHRoaXMuaXNJbmhlcml0YW5jZVRvZ2dsZURpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBvblJ1bGVEZWxldGVCdXR0b25DbGlja2VkKHJ1bGU6IFJ1bGUpIHtcbiAgICB0aGlzLm1hdERpYWxvZ1NlcnZpY2VcbiAgICAgIC5vcGVuKENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHRpdGxlOiAnQUNBX0ZPTERFUl9SVUxFUy5DT05GSVJNQVRJT05fRElBTE9HLkRFTEVURV9SVUxFLlRJVExFJyxcbiAgICAgICAgICBtZXNzYWdlOiAnQUNBX0ZPTERFUl9SVUxFUy5DT05GSVJNQVRJT05fRElBTE9HLkRFTEVURV9SVUxFLk1FU1NBR0UnXG4gICAgICAgIH0sXG4gICAgICAgIG1pbldpZHRoOiAnMzQ2cHgnXG4gICAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5mb2xkZXJSdWxlc1NlcnZpY2UuZGVsZXRlUnVsZSh0aGlzLm5vZGVJZCwgcnVsZS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25SdWxlRGVsZXRlKGRlbGV0ZWRSdWxlSWQ6IHN0cmluZykge1xuICAgIHRoaXMuZm9sZGVyUnVsZVNldHNTZXJ2aWNlLnJlbW92ZVJ1bGVGcm9tTWFpblJ1bGVTZXQoZGVsZXRlZFJ1bGVJZCk7XG4gIH1cblxuICBvbkxvYWRNb3JlUnVsZVNldHMoKSB7XG4gICAgdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UubG9hZE1vcmVJbmhlcml0ZWRSdWxlU2V0cygpO1xuICB9XG5cbiAgb25Mb2FkTW9yZVJ1bGVzKHJ1bGVTZXQ6IFJ1bGVTZXQpIHtcbiAgICB0aGlzLmZvbGRlclJ1bGVzU2VydmljZS5sb2FkUnVsZXMocnVsZVNldCk7XG4gIH1cblxuICBjYW5FZGl0UnVsZShydWxlU2V0OiBSdWxlU2V0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFydWxlU2V0IHx8IEZvbGRlclJ1bGVTZXRzU2VydmljZS5pc093bmVkUnVsZVNldChydWxlU2V0LCB0aGlzLm5vZGVJZCk7XG4gIH1cblxuICBvcGVuTGlua1J1bGVzRGlhbG9nKGV4aXN0aW5nUnVsZVNldD86IFJ1bGVTZXQpIHtcbiAgICB0aGlzLm1hdERpYWxvZ1NlcnZpY2VcbiAgICAgIC5vcGVuKFJ1bGVTZXRQaWNrZXJTbWFydENvbXBvbmVudCwge1xuICAgICAgICB3aWR0aDogJzkwJScsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdhY2EtcnVsZS1zZXQtcGlja2VyLWNvbnRhaW5lcicsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBub2RlSWQ6IHRoaXMubm9kZUlkLFxuICAgICAgICAgIGRlZmF1bHROb2RlSWQ6IHRoaXMubm9kZUlkLFxuICAgICAgICAgIGV4aXN0aW5nUnVsZVNldFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5mb2xkZXJSdWxlU2V0c1NlcnZpY2UucmVmcmVzaE1haW5SdWxlU2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25SdWxlU2V0VW5saW5rQ2xpY2tlZChsaW5rZWRSdWxlU2V0OiBSdWxlU2V0KSB7XG4gICAgdGhpcy5tYXREaWFsb2dTZXJ2aWNlXG4gICAgICAub3BlbihDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB0aXRsZTogJ0FDQV9GT0xERVJfUlVMRVMuQ09ORklSTUFUSU9OX0RJQUxPRy5ERUxFVEVfUlVMRV9TRVRfTElOSy5USVRMRScsXG4gICAgICAgICAgbWVzc2FnZTogJ0FDQV9GT0xERVJfUlVMRVMuQ09ORklSTUFUSU9OX0RJQUxPRy5ERUxFVEVfUlVMRV9TRVRfTElOSy5NRVNTQUdFJ1xuICAgICAgICB9LFxuICAgICAgICBtaW5XaWR0aDogJzM0NnB4J1xuICAgICAgfSlcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5kZWxldGVSdWxlU2V0TGluayh0aGlzLm5vZGVJZCwgbGlua2VkUnVsZVNldC5pZCk7XG4gICAgICAgICAgICB0aGlzLmZvbGRlclJ1bGVTZXRzU2VydmljZS5yZWZyZXNoTWFpblJ1bGVTZXQoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dFcnJvcignQUNBX0ZPTERFUl9SVUxFUy5FUlJPUlMuREVMRVRFX1JVTEVfU0VUX0xJTktfRkFJTEVEJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGFjYS1wYWdlLWxheW91dD5cblxuICA8ZGl2IGNsYXNzPVwiYWNhLXBhZ2UtbGF5b3V0LWhlYWRlclwiPlxuICAgIDxhZGYtdG9vbGJhciBjbGFzcz1cImFkZi10b29sYmFyLS1pbmxpbmVcIj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICA8bWF0LWljb24+YXJyb3dfYmFjazwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2FkZi10b29sYmFyPlxuICAgIDxoMSBjbGFzcz1cImFjYS1wYWdlLXRpdGxlXCI+e3sgJ0FDQV9GT0xERVJfUlVMRVMuQUNUSU9OUy5NQU5BR0VfUlVMRVMnIHwgdHJhbnNsYXRlIH19PC9oMT5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImFjYS1wYWdlLWxheW91dC1jb250ZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cImFjYS1tYWluLWNvbnRlbnRcIj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIigocnVsZVNldHNMb2FkaW5nJCB8IGFzeW5jKSAmJiAoaW5oZXJpdGVkUnVsZVNldHMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMCkgfHwgKGFjdGlvbnNMb2FkaW5nJCB8IGFzeW5jKTsgZWxzZSBvbkxvYWRlZFwiPlxuICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIC8+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNvbkxvYWRlZD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvbGRlckluZm8kIHwgYXN5bmM7IGVsc2UgZ2VuZXJpY0Vycm9yXCI+XG4gICAgICAgICAgPGFkZi10b29sYmFyIGNsYXNzPVwiYWRmLXRvb2xiYXItLWlubGluZSBhY2EtbWFuYWdlLXJ1bGVzX19hY3Rpb25zLWJhclwiPlxuXG4gICAgICAgICAgICA8YWRmLXRvb2xiYXItdGl0bGUgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19hY3Rpb25zLWJhcl9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1hbGlnbmVyXCI+Zm9sZGVyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiYWNhLXBhZ2UtdGl0bGVcIj57eyAoZm9sZGVySW5mbyQgfCBhc3luYykubmFtZSB9fTp7eydBQ0FfRk9MREVSX1JVTEVTLk1BTkFHRV9SVUxFUy5UT09MQkFSLkJSRUFEQ1JVTUIuUlVMRVMnIHwgdHJhbnNsYXRlfX08L2gyPlxuICAgICAgICAgICAgPC9hZGYtdG9vbGJhci10aXRsZT5cblxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwibWFuYWdlLXJ1bGVzLWluaGVyaXRhbmNlLXRvZ2dsZS1idXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2FjdGlvbnMtYmFyX190b2dnbGVcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0luaGVyaXRhbmNlRW5hYmxlZFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Jbmhlcml0YW5jZVRvZ2dsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSW5oZXJpdGFuY2VUb2dnbGVEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCI+XG4gICAgICAgICAgICAgIHt7ICdBQ0FfRk9MREVSX1JVTEVTLk1BTkFHRV9SVUxFUy5UT09MQkFSLkFDVElPTlMuSU5IRVJJVF9SVUxFUycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cblxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyIHZlcnRpY2FsIGNsYXNzPVwiYWNhLW1hbmFnZS1ydWxlc19fYWN0aW9ucy1iYXJfX3ZlcnRpY2FsLWRpdmlkZXJcIiAvPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNhLW1hbmFnZS1ydWxlc19fYWN0aW9ucy1iYXJfX2J1dHRvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIShtYWluUnVsZVNldCQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cIm1hbmFnZS1ydWxlcy1saW5rLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5MaW5rUnVsZXNEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdBQ0FfRk9MREVSX1JVTEVTLk1BTkFHRV9SVUxFUy5UT09MQkFSLkFDVElPTlMuTElOS19SVUxFUycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuRWRpdE1haW5SdWxlXCJcbiAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJtYW5hZ2UtcnVsZXMtY3JlYXRlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DcmVhdGVVcGRhdGVSdWxlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICB7eyAnQUNBX0ZPTERFUl9SVUxFUy5NQU5BR0VfUlVMRVMuVE9PTEJBUi5BQ1RJT05TLkNSRUFURV9SVUxFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9hZGYtdG9vbGJhcj5cbiAgICAgICAgICA8bWF0LWRpdmlkZXIgLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19jb250YWluZXJcIiAqbmdJZj1cImlzTWFpblJ1bGVTZXROb3RFbXB0eSB8fCBpc0luaGVyaXRlZFJ1bGVTZXRzTm90RW1wdHk7IGVsc2UgZW1wdHlDb250ZW50XCI+XG4gICAgICAgICAgICA8YWNhLXJ1bGUtbGlzdFxuICAgICAgICAgICAgICBbbWFpblJ1bGVTZXQkXT1cIm1haW5SdWxlU2V0JFwiXG4gICAgICAgICAgICAgIFtmb2xkZXJJZF09XCJub2RlSWRcIlxuICAgICAgICAgICAgICBbaW5oZXJpdGVkUnVsZVNldHNdPVwiaW5oZXJpdGVkUnVsZVNldHMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbaGFzTW9yZVJ1bGVTZXRzXT1cImhhc01vcmVSdWxlU2V0cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFtydWxlU2V0c0xvYWRpbmddPVwicnVsZVNldHNMb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkUnVsZV09XCJzZWxlY3RlZFJ1bGUkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAobG9hZE1vcmVSdWxlU2V0cyk9XCJvbkxvYWRNb3JlUnVsZVNldHMoKVwiXG4gICAgICAgICAgICAgIChsb2FkTW9yZVJ1bGVzKT1cIm9uTG9hZE1vcmVSdWxlcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdFJ1bGUpPVwib25TZWxlY3RSdWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAocnVsZUVuYWJsZWRDaGFuZ2VkKT1cIm9uUnVsZUVuYWJsZWRUb2dnbGUoJGV2ZW50WzBdLCAkZXZlbnRbMV0pXCJcbiAgICAgICAgICAgICAgKHJ1bGVTZXRFZGl0TGlua0NsaWNrZWQpPVwib3BlbkxpbmtSdWxlc0RpYWxvZygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHJ1bGVTZXRVbmxpbmtDbGlja2VkKT1cIm9uUnVsZVNldFVubGlua0NsaWNrZWQoJGV2ZW50KVwiIC8+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19jb250YWluZXJfX3J1bGUtZGV0YWlsc1wiPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19jb250YWluZXJfX3J1bGUtZGV0YWlsc19faGVhZGVyXCIgKm5nSWY9XCIoc2VsZWN0ZWRSdWxlJCB8IGFzeW5jKSBhcyBzZWxlY3RlZFJ1bGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNhLW1hbmFnZS1ydWxlc19fY29udGFpbmVyX19ydWxlLWRldGFpbHNfX2hlYWRlcl9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtbWFuYWdlLXJ1bGVzX19jb250YWluZXJfX3J1bGUtZGV0YWlsc19faGVhZGVyX190aXRsZV9fbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZFJ1bGUubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNhLW1hbmFnZS1ydWxlc19fY29udGFpbmVyX19ydWxlLWRldGFpbHNfX2hlYWRlcl9fdGl0bGVfX2Rlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkUnVsZS5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNhLW1hbmFnZS1ydWxlc19fY29udGFpbmVyX19ydWxlLWRldGFpbHNfX2hlYWRlcl9fYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbkVkaXRTZWxlY3RlZFJ1bGU7IGVsc2UgZ29Ub0ZvbGRlckJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwib25SdWxlRGVsZXRlQnV0dG9uQ2xpY2tlZChzZWxlY3RlZFJ1bGUpXCIgaWQ9XCJkZWxldGUtcnVsZS1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cIm9wZW5DcmVhdGVVcGRhdGVSdWxlRGlhbG9nKHNlbGVjdGVkUnVsZSlcIiBpZD1cImVkaXQtcnVsZS1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAnQUNBX0ZPTERFUl9SVUxFUy5NQU5BR0VfUlVMRVMuVE9PTEJBUi5BQ1RJT05TLkVESVRfUlVMRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNnb1RvRm9sZGVyQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBbcm91dGVyTGlua109XCJbJy9ub2RlcycsIChzZWxlY3RlZFJ1bGVTZXQkIHwgYXN5bmMpLm93bmluZ0ZvbGRlci5pZCwgJ3J1bGVzJ11cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAnQUNBX0ZPTERFUl9SVUxFUy5NQU5BR0VfUlVMRVMuVE9PTEJBUi5BQ1RJT05TLlNFRV9JTl9GT0xERVInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjYS1tYW5hZ2UtcnVsZXNfX2NvbnRhaW5lcl9fcnVsZS1kZXRhaWxzX19jb250ZW50XCIgKm5nSWY9XCIoc2VsZWN0ZWRSdWxlJCB8IGFzeW5jKSBhcyBzZWxlY3RlZFJ1bGVcIj5cbiAgICAgICAgICAgICAgICA8YWNhLXJ1bGUtZGV0YWlsc1xuICAgICAgICAgICAgICAgICAgW2FjdGlvbkRlZmluaXRpb25zXT1cImFjdGlvbkRlZmluaXRpb25zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJDb25zdHJhaW50c109XCJwYXJhbWV0ZXJDb25zdHJhaW50cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbcHJldmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZFJ1bGVcIlxuICAgICAgICAgICAgICAgICAgW25vZGVJZF09XCJub2RlSWRcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eUNvbnRlbnQ+XG4gICAgICAgICAgICA8YWRmLWVtcHR5LWNvbnRlbnRcbiAgICAgICAgICAgICAgaWNvbj1cImxpYnJhcnlfYm9va3NcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FDQV9GT0xERVJfUlVMRVMuTUFOQUdFX1JVTEVTLkVNUFRZX1JVTEVTX0xJU1QuVElUTEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cIidBQ0FfRk9MREVSX1JVTEVTLk1BTkFHRV9SVUxFUy5FTVBUWV9SVUxFU19MSVNULlNVQlRJVExFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZ2VuZXJpY0Vycm9yPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2EtcGFnZS1sYXlvdXQtZXJyb3JcIj5cbiAgICAgICAgICAgIDxhY2EtZ2VuZXJpYy1lcnJvciAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48L2FjYS1wYWdlLWxheW91dD5cbiJdfQ==
@@ -21,17 +21,18 @@
21
21
  * You should have received a copy of the GNU Lesser General Public License
22
22
  * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
23
  */
24
- import { Component, forwardRef, Input, ViewEncapsulation } from '@angular/core';
24
+ import { Component, DestroyRef, forwardRef, inject, Input, ViewEncapsulation } from '@angular/core';
25
25
  import { FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';
26
26
  import { CardViewBoolItemModel, CardViewModule, CardViewSelectItemModel, CardViewTextItemModel, CardViewUpdateService } from '@alfresco/adf-core';
27
27
  import { from, of, Subject } from 'rxjs';
28
- import { map, takeUntil } from 'rxjs/operators';
29
- import { CategoryService, ContentNodeSelectorComponent, NodeAction, TagService, CategorySelectorDialogComponent, SecurityControlsService } from '@alfresco/adf-content-services';
28
+ import { map } from 'rxjs/operators';
29
+ import { CategorySelectorDialogComponent, CategoryService, ContentNodeSelectorComponent, NodeAction, SecurityControlsService, TagService } from '@alfresco/adf-content-services';
30
30
  import { MatDialog } from '@angular/material/dialog';
31
31
  import { TranslateModule, TranslateService } from '@ngx-translate/core';
32
32
  import { CommonModule } from '@angular/common';
33
33
  import { MatFormFieldModule } from '@angular/material/form-field';
34
34
  import { MatSelectModule } from '@angular/material/select';
35
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
35
36
  import * as i0 from "@angular/core";
36
37
  import * as i1 from "@alfresco/adf-core";
37
38
  import * as i2 from "@angular/material/dialog";
@@ -71,7 +72,6 @@ class RuleActionUiComponent {
71
72
  });
72
73
  cardViewItems = [];
73
74
  parameters = {};
74
- onDestroy$ = new Subject();
75
75
  get selectedActionDefinitionId() {
76
76
  return this.form.get('actionDefinitionId').value;
77
77
  }
@@ -80,6 +80,7 @@ class RuleActionUiComponent {
80
80
  }
81
81
  onChange = () => undefined;
82
82
  onTouch = () => undefined;
83
+ destroyRef = inject(DestroyRef);
83
84
  constructor(cardViewUpdateService, dialog, translate, tagService, categoryService, securityControlsService) {
84
85
  this.cardViewUpdateService = cardViewUpdateService;
85
86
  this.dialog = dialog;
@@ -109,7 +110,7 @@ class RuleActionUiComponent {
109
110
  }
110
111
  ngOnInit() {
111
112
  this.actionDefinitions = this.actionDefinitions.sort((firstActionDefinition, secondActionDefinition) => firstActionDefinition.title.localeCompare(secondActionDefinition.title));
112
- this.form.valueChanges.pipe(takeUntil(this.onDestroy$)).subscribe(() => {
113
+ this.form.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
113
114
  this.setDefaultParameters();
114
115
  this.setCardViewProperties();
115
116
  this.onChange({
@@ -118,7 +119,7 @@ class RuleActionUiComponent {
118
119
  });
119
120
  this.onTouch();
120
121
  });
121
- this.cardViewUpdateService.itemUpdated$.pipe(takeUntil(this.onDestroy$)).subscribe((updateNotification) => {
122
+ this.cardViewUpdateService.itemUpdated$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((updateNotification) => {
122
123
  const isSecurityGroupUpdated = updateNotification.target.key === 'securityGroupId';
123
124
  if (isSecurityGroupUpdated) {
124
125
  this.parameters.securityMarkId = null;
@@ -151,10 +152,6 @@ class RuleActionUiComponent {
151
152
  }
152
153
  }
153
154
  }
154
- ngOnDestroy() {
155
- this.onDestroy$.next();
156
- this.onDestroy$.complete();
157
- }
158
155
  setCardViewProperties(securityMarkOptions) {
159
156
  const disabledTags = !this.tagService.areTagsEnabled();
160
157
  const disabledCategories = !this.categoryService.areCategoriesEnabled();
@@ -268,7 +265,7 @@ class RuleActionUiComponent {
268
265
  data,
269
266
  width: '630px'
270
267
  });
271
- data.select.pipe(takeUntil(this.onDestroy$)).subscribe((selections) => {
268
+ data.select.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((selections) => {
272
269
  if (selections[0].id) {
273
270
  this.writeValue({
274
271
  actionDefinitionId: this.selectedActionDefinitionId,
@@ -356,4 +353,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
356
353
  }], parameterConstraints: [{
357
354
  type: Input
358
355
  }] } });
359
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1hY3Rpb24udWktY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLWNvbnRlbnQvZm9sZGVyLXJ1bGVzL3NyYy9ydWxlLWRldGFpbHMvYWN0aW9ucy9ydWxlLWFjdGlvbi51aS1jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9mb2xkZXItcnVsZXMvc3JjL3J1bGUtZGV0YWlscy9hY3Rpb25zL3J1bGUtYWN0aW9uLnVpLWNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUErQyxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SCxPQUFPLEVBQXdCLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEksT0FBTyxFQUNMLHFCQUFxQixFQUVyQixjQUFjLEVBQ2QsdUJBQXVCLEVBRXZCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFFdEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLDRCQUE0QixFQUU1QixVQUFVLEVBQ1YsVUFBVSxFQUNWLCtCQUErQixFQUUvQix1QkFBdUIsRUFDeEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFB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RSxlQUFlLDJGQUFFLG1CQUFtQiw0ckJBQUUsa0JBQWtCLHlPQUFFLGVBQWUsdVRBQUUsY0FBYzs7U0FldEcscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBakJqQyxTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxZQUN4RyxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSSxRQUMvQixFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxhQUN2Qjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzt5QkFDckQ7d0JBQ0QscUJBQXFCO3FCQUN0QjtnUUFJRCxNQUFNO3NCQURMLEtBQUs7Z0JBSU4saUJBQWlCO3NCQURoQixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFLRixvQkFBb0I7c0JBRHZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGlvbkRlZmluaXRpb25UcmFuc2Zvcm1lZCwgUnVsZUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL3J1bGUtYWN0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIENhcmRWaWV3Qm9vbEl0ZW1Nb2RlbCxcbiAgQ2FyZFZpZXdJdGVtLFxuICBDYXJkVmlld01vZHVsZSxcbiAgQ2FyZFZpZXdTZWxlY3RJdGVtTW9kZWwsXG4gIENhcmRWaWV3U2VsZWN0SXRlbU9wdGlvbixcbiAgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsLFxuICBDYXJkVmlld1VwZGF0ZVNlcnZpY2UsXG4gIFVwZGF0ZU5vdGlmaWNhdGlvblxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQWN0aW9uUGFyYW1ldGVyRGVmaW5pdGlvbiwgQ2F0ZWdvcnksIE5vZGUsIFNlY3VyaXR5TWFyayB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgZnJvbSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWN0aW9uUGFyYW1ldGVyQ29uc3RyYWludCwgQ29uc3RyYWludFZhbHVlIH0gZnJvbSAnLi4vLi4vbW9kZWwvYWN0aW9uLXBhcmFtZXRlci1jb25zdHJhaW50Lm1vZGVsJztcbmltcG9ydCB7XG4gIENhdGVnb3J5U2VydmljZSxcbiAgQ29udGVudE5vZGVTZWxlY3RvckNvbXBvbmVudCxcbiAgQ29udGVudE5vZGVTZWxlY3RvckNvbXBvbmVudERhdGEsXG4gIE5vZGVBY3Rpb24sXG4gIFRhZ1NlcnZpY2UsXG4gIENhdGVnb3J5U2VsZWN0b3JEaWFsb2dDb21wb25lbnQsXG4gIENhdGVnb3J5U2VsZWN0b3JEaWFsb2dPcHRpb25zLFxuICBTZWN1cml0eUNvbnRyb2xzU2VydmljZVxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvbnRlbnQtc2VydmljZXMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRTZWxlY3RNb2R1bGUsIENhcmRWaWV3TW9kdWxlXSxcbiAgc2VsZWN0b3I6ICdhY2EtcnVsZS1hY3Rpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcnVsZS1hY3Rpb24udWktY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ydWxlLWFjdGlvbi51aS1jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7IGNsYXNzOiAnYWNhLXJ1bGUtYWN0aW9uJyB9LFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUnVsZUFjdGlvblVpQ29tcG9uZW50KVxuICAgIH0sXG4gICAgQ2FyZFZpZXdVcGRhdGVTZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUnVsZUFjdGlvblVpQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBub2RlSWQgPSAnJztcblxuICBASW5wdXQoKVxuICBhY3Rpb25EZWZpbml0aW9uczogQWN0aW9uRGVmaW5pdGlvblRyYW5zZm9ybWVkW107XG5cbiAgQElucHV0KClcbiAgcmVhZE9ubHkgPSBmYWxzZTtcblxuICBwcml2YXRlIF9wYXJhbWV0ZXJDb25zdHJhaW50cyA9IFtdO1xuICBASW5wdXQoKVxuICBnZXQgcGFyYW1ldGVyQ29uc3RyYWludHMoKTogQWN0aW9uUGFyYW1ldGVyQ29uc3RyYWludFtdIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1ldGVyQ29uc3RyYWludHM7XG4gIH1cblxuICBzZXQgcGFyYW1ldGVyQ29uc3RyYWludHModmFsdWUpIHtcbiAgICB0aGlzLl9wYXJhbWV0ZXJDb25zdHJhaW50cyA9IHZhbHVlLm1hcCgob2JqKSA9PiAoe1xuICAgICAgLi4ub2JqLFxuICAgICAgY29uc3RyYWludHM6IHRoaXMucGFyc2VDb25zdHJhaW50c1RvU2VsZWN0T3B0aW9ucyhvYmouY29uc3RyYWludHMpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0YWdzUmVsYXRlZFByb3BlcnRpZXNBbmRBc3BlY3RzID0gWydjbTp0YWdzY29wZScsICdjbTp0YWdTY29wZUNhY2hlJywgJ2NtOnRhZ2dhYmxlJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcmllc1JlbGF0ZWRQcm9wZXJ0aWVzQW5kQXNwZWN0cyA9IFsnY206Y2F0ZWdvcmllcycsICdjbTpnZW5lcmFsY2xhc3NpZmlhYmxlJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zVG9Gb3JtYXREaXNwbGF5ZWRWYWx1ZSA9IFsnc2VjdXJpdHlNYXJrSWQnLCAnc2VjdXJpdHlHcm91cElkJ107XG5cbiAgaXNGdWxsV2lkdGggPSBmYWxzZTtcblxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgYWN0aW9uRGVmaW5pdGlvbklkOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gIH0pO1xuXG4gIGNhcmRWaWV3SXRlbXM6IENhcmRWaWV3SXRlbVtdID0gW107XG4gIHBhcmFtZXRlcnM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge307XG4gIHByaXZhdGUgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ2V0IHNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2FjdGlvbkRlZmluaXRpb25JZCcpLnZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbigpOiBBY3Rpb25EZWZpbml0aW9uVHJhbnNmb3JtZWQge1xuICAgIHJldHVybiB0aGlzLmFjdGlvbkRlZmluaXRpb25zLmZpbmQoKGFjdGlvbkRlZmluaXRpb246IEFjdGlvbkRlZmluaXRpb25UcmFuc2Zvcm1lZCkgPT4gYWN0aW9uRGVmaW5pdGlvbi5pZCA9PT0gdGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb25JZCk7XG4gIH1cblxuICBvbkNoYW5nZTogKGFjdGlvbjogUnVsZUFjdGlvbikgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcbiAgb25Ub3VjaDogKCkgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhcmRWaWV3VXBkYXRlU2VydmljZTogQ2FyZFZpZXdVcGRhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2F0ZWdvcnlTZXJ2aWNlOiBDYXRlZ29yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWN1cml0eUNvbnRyb2xzU2VydmljZTogU2VjdXJpdHlDb250cm9sc1NlcnZpY2VcbiAgKSB7fVxuXG4gIHdyaXRlVmFsdWUoYWN0aW9uOiBSdWxlQWN0aW9uKSB7XG4gICAgdGhpcy5mb3JtLnNldFZhbHVlKHtcbiAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogYWN0aW9uLmFjdGlvbkRlZmluaXRpb25JZFxuICAgIH0pO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IHtcbiAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgIC4uLmFjdGlvbi5wYXJhbXNcbiAgICB9O1xuICAgIHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgaWYgKHRoaXMucGFyYW1ldGVycz8uc2VjdXJpdHlHcm91cElkKSB7XG4gICAgICB0aGlzLmxvYWRTZWN1cml0eU1hcmtPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGFjdGlvbjogUnVsZUFjdGlvbikgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWN0aW9uRGVmaW5pdGlvbnMgPSB0aGlzLmFjdGlvbkRlZmluaXRpb25zLnNvcnQoKGZpcnN0QWN0aW9uRGVmaW5pdGlvbiwgc2Vjb25kQWN0aW9uRGVmaW5pdGlvbikgPT5cbiAgICAgIGZpcnN0QWN0aW9uRGVmaW5pdGlvbi50aXRsZS5sb2NhbGVDb21wYXJlKHNlY29uZEFjdGlvbkRlZmluaXRpb24udGl0bGUpXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0RGVmYXVsdFBhcmFtZXRlcnMoKTtcbiAgICAgIHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHtcbiAgICAgICAgYWN0aW9uRGVmaW5pdGlvbklkOiB0aGlzLnNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbklkLFxuICAgICAgICBwYXJhbXM6IHRoaXMucGFyYW1ldGVyc1xuICAgICAgfSk7XG4gICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FyZFZpZXdVcGRhdGVTZXJ2aWNlLml0ZW1VcGRhdGVkJC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKS5zdWJzY3JpYmUoKHVwZGF0ZU5vdGlmaWNhdGlvbjogVXBkYXRlTm90aWZpY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpc1NlY3VyaXR5R3JvdXBVcGRhdGVkID0gdXBkYXRlTm90aWZpY2F0aW9uLnRhcmdldC5rZXkgPT09ICdzZWN1cml0eUdyb3VwSWQnO1xuICAgICAgaWYgKGlzU2VjdXJpdHlHcm91cFVwZGF0ZWQpIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNlY3VyaXR5TWFya0lkID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gdGhpcy5jbGVhckVtcHR5UGFyYW1ldGVycyh7XG4gICAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgICAgLi4udXBkYXRlTm90aWZpY2F0aW9uLmNoYW5nZWRcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vbkNoYW5nZSh7XG4gICAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogdGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb25JZCxcbiAgICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtZXRlcnNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vblRvdWNoKCk7XG5cbiAgICAgIGlmIChpc1NlY3VyaXR5R3JvdXBVcGRhdGVkKSB7XG4gICAgICAgIHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMubG9hZFNlY3VyaXR5TWFya09wdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCByZWFkT25seSA9IGNoYW5nZXNbJ3JlYWRPbmx5J10/LmN1cnJlbnRWYWx1ZTtcbiAgICBpZiAocmVhZE9ubHkgIT09IHVuZGVmaW5lZCAmJiByZWFkT25seSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWFkT25seSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm0uZW5hYmxlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHNldENhcmRWaWV3UHJvcGVydGllcyhzZWN1cml0eU1hcmtPcHRpb25zPzogQ2FyZFZpZXdTZWxlY3RJdGVtT3B0aW9uPHN0cmluZz5bXSkge1xuICAgIGNvbnN0IGRpc2FibGVkVGFncyA9ICF0aGlzLnRhZ1NlcnZpY2UuYXJlVGFnc0VuYWJsZWQoKTtcbiAgICBjb25zdCBkaXNhYmxlZENhdGVnb3JpZXMgPSAhdGhpcy5jYXRlZ29yeVNlcnZpY2UuYXJlQ2F0ZWdvcmllc0VuYWJsZWQoKTtcbiAgICB0aGlzLmNhcmRWaWV3SXRlbXMgPSAodGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb24/LnBhcmFtZXRlckRlZmluaXRpb25zID8/IFtdKS5tYXAoKHBhcmFtRGVmKSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJhaW50c0ZvckRyb3Bkb3duQm94ID1cbiAgICAgICAgcGFyYW1EZWYubmFtZSA9PT0gJ3NlY3VyaXR5TWFya0lkJ1xuICAgICAgICAgID8geyBuYW1lOiBwYXJhbURlZi5uYW1lLCBjb25zdHJhaW50czogc2VjdXJpdHlNYXJrT3B0aW9ucyB8fCBbXSB9XG4gICAgICAgICAgOiB0aGlzLl9wYXJhbWV0ZXJDb25zdHJhaW50cy5maW5kKChvYmopID0+IG9iai5uYW1lID09PSBwYXJhbURlZi5uYW1lKTtcbiAgICAgIGNvbnN0IGNhcmRWaWV3UHJvcGVydGllc01vZGVsID0ge1xuICAgICAgICBsYWJlbDogcGFyYW1EZWYuZGlzcGxheUxhYmVsICsgKHBhcmFtRGVmLm1hbmRhdG9yeSA/ICcgKicgOiAnJyksXG4gICAgICAgIGtleTogcGFyYW1EZWYubmFtZSxcbiAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIC4uLihwYXJhbURlZi5tYW5kYXRvcnlcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5FUlJPUi5SRVFVSVJFRCcsXG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiAodmFsdWU6IHVua25vd24pID0+ICEhdmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICAgIHN3aXRjaCAocGFyYW1EZWYudHlwZSkge1xuICAgICAgICBjYXNlICdkOmJvb2xlYW4nOlxuICAgICAgICAgIHJldHVybiBuZXcgQ2FyZFZpZXdCb29sSXRlbU1vZGVsKHtcbiAgICAgICAgICAgIC4uLmNhcmRWaWV3UHJvcGVydGllc01vZGVsLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMucGFyYW1ldGVyc1twYXJhbURlZi5uYW1lXSA/PyBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlICdkOm5vZGVyZWYnOlxuICAgICAgICAgIGlmICghY29uc3RyYWludHNGb3JEcm9wZG93bkJveCAmJiAhdGhpcy5yZWFkT25seSAmJiBwYXJhbURlZi5uYW1lICE9PSAnY2F0ZWdvcnktdmFsdWUnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENhcmRWaWV3VGV4dEl0ZW1Nb2RlbCh7XG4gICAgICAgICAgICAgIC4uLmNhcmRWaWV3UHJvcGVydGllc01vZGVsLFxuICAgICAgICAgICAgICBpY29uOiAnZm9sZGVyJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgICAgICAgIGNsaWNrYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgY2xpY2tDYWxsQmFjazogdGhpcy5vcGVuU2VsZWN0b3JEaWFsb2cuYmluZCh0aGlzLCBwYXJhbURlZi5uYW1lKSxcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMucGFyYW1ldGVyc1twYXJhbURlZi5uYW1lXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXJhbURlZi5uYW1lID09PSAnY2F0ZWdvcnktdmFsdWUnICYmICF0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENhcmRWaWV3VGV4dEl0ZW1Nb2RlbCh7XG4gICAgICAgICAgICAgIC4uLmNhcmRWaWV3UHJvcGVydGllc01vZGVsLFxuICAgICAgICAgICAgICBpY29uOiAnbGlicmFyeV9hZGQnLFxuICAgICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgICAgICAgY2xpY2thYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBjbGlja0NhbGxCYWNrOiB0aGlzLm9wZW5DYXREaWFsb2cuYmluZCh0aGlzLCBwYXJhbURlZi5uYW1lKSxcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMucGFyYW1ldGVyc1twYXJhbURlZi5uYW1lXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAvLyAgZmFsbHMgdGhyb3VnaFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChjb25zdHJhaW50c0ZvckRyb3Bkb3duQm94ICYmICF0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENhcmRWaWV3U2VsZWN0SXRlbU1vZGVsKHtcbiAgICAgICAgICAgICAgLi4uY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiAodGhpcy5wYXJhbWV0ZXJzW3BhcmFtRGVmLm5hbWVdIGFzIHN0cmluZykgPz8gJycsXG4gICAgICAgICAgICAgIG9wdGlvbnMkOiBvZihjb25zdHJhaW50c0ZvckRyb3Bkb3duQm94LmNvbnN0cmFpbnRzKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAob3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGlzYWJsZWRUYWdzICYmIHRoaXMudGFnc1JlbGF0ZWRQcm9wZXJ0aWVzQW5kQXNwZWN0cy5pbmNsdWRlcyhvcHRpb24ua2V5KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkaXNhYmxlZENhdGVnb3JpZXMgJiYgdGhpcy5jYXRlZ29yaWVzUmVsYXRlZFByb3BlcnRpZXNBbmRBc3BlY3RzLmluY2x1ZGVzKG9wdGlvbi5rZXkpKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsKHtcbiAgICAgICAgICAgIC4uLmNhcmRWaWV3UHJvcGVydGllc01vZGVsLFxuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzRm9yRHJvcGRvd25Cb3ggJiYgdGhpcy5yZWFkT25seSAmJiB0aGlzLnBhcmFtc1RvRm9ybWF0RGlzcGxheWVkVmFsdWUuaW5jbHVkZXMocGFyYW1EZWYubmFtZSlcbiAgICAgICAgICAgICAgICA/IGNvbnN0cmFpbnRzRm9yRHJvcGRvd25Cb3guY29uc3RyYWludHMuZmluZCgoY29uc3RyYWludCkgPT4gY29uc3RyYWludC5rZXkgPT09IHRoaXMucGFyYW1ldGVyc1twYXJhbURlZi5uYW1lXSk/LmxhYmVsID8/ICcnXG4gICAgICAgICAgICAgICAgOiB0aGlzLnBhcmFtZXRlcnNbcGFyYW1EZWYubmFtZV0gPz8gJydcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNlbGVjdG9yRGlhbG9nKHBhcmFtRGVmTmFtZSkge1xuICAgIGNvbnN0IGRhdGE6IENvbnRlbnROb2RlU2VsZWN0b3JDb21wb25lbnREYXRhID0ge1xuICAgICAgc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScsXG4gICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQUNBX0ZPTERFUl9SVUxFUy5SVUxFX0RFVEFJTFMuUExBQ0VIT0xERVIuQ0hPT1NFX0ZPTERFUicpLFxuICAgICAgYWN0aW9uTmFtZTogTm9kZUFjdGlvbi5DSE9PU0UsXG4gICAgICBjdXJyZW50Rm9sZGVySWQ6IHRoaXMubm9kZUlkLFxuICAgICAgc2VsZWN0OiBuZXcgU3ViamVjdDxOb2RlW10+KClcbiAgICB9O1xuXG4gICAgdGhpcy5kaWFsb2cub3BlbihDb250ZW50Tm9kZVNlbGVjdG9yQ29tcG9uZW50LCB7XG4gICAgICBkYXRhLFxuICAgICAgcGFuZWxDbGFzczogJ2FkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItZGlhbG9nJyxcbiAgICAgIHdpZHRoOiAnNjMwcHgnXG4gICAgfSk7XG5cbiAgICBkYXRhLnNlbGVjdC5zdWJzY3JpYmUoXG4gICAgICAoc2VsZWN0aW9uczogTm9kZVtdKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3Rpb25zWzBdLmlkKSB7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHtcbiAgICAgICAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogdGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb25JZCxcbiAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAuLi50aGlzLnBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgIFtwYXJhbURlZk5hbWVdOiBzZWxlY3Rpb25zWzBdLmlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSh7XG4gICAgICAgICAgICBhY3Rpb25EZWZpbml0aW9uSWQ6IHRoaXMuc2VsZWN0ZWRBY3Rpb25EZWZpbml0aW9uSWQsXG4gICAgICAgICAgICBwYXJhbXM6IHRoaXMucGFyYW1ldGVyc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMub25Ub3VjaCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5kaWFsb2cuY2xvc2VBbGwoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ2F0RGlhbG9nKHBhcmFtRGVmTmFtZSkge1xuICAgIGNvbnN0IGRhdGE6IENhdGVnb3J5U2VsZWN0b3JEaWFsb2dPcHRpb25zID0ge1xuICAgICAgc2VsZWN0OiBuZXcgU3ViamVjdDxDYXRlZ29yeVtdPigpLFxuICAgICAgbXVsdGlTZWxlY3Q6IGZhbHNlXG4gICAgfTtcblxuICAgIHRoaXMuZGlhbG9nLm9wZW4oQ2F0ZWdvcnlTZWxlY3RvckRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YSxcbiAgICAgIHdpZHRoOiAnNjMwcHgnXG4gICAgfSk7XG5cbiAgICBkYXRhLnNlbGVjdC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKS5zdWJzY3JpYmUoKHNlbGVjdGlvbnM6IENhdGVnb3J5W10pID0+IHtcbiAgICAgIGlmIChzZWxlY3Rpb25zWzBdLmlkKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh7XG4gICAgICAgICAgYWN0aW9uRGVmaW5pdGlvbklkOiB0aGlzLnNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbklkLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgLi4udGhpcy5wYXJhbWV0ZXJzLFxuICAgICAgICAgICAgW3BhcmFtRGVmTmFtZV06IHNlbGVjdGlvbnNbMF0uaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHtcbiAgICAgICAgICBhY3Rpb25EZWZpbml0aW9uSWQ6IHRoaXMuc2VsZWN0ZWRBY3Rpb25EZWZpbml0aW9uSWQsXG4gICAgICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtZXRlcnNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25Ub3VjaCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGVmYXVsdFBhcmFtZXRlcnMoKSB7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0ge307XG4gICAgKHRoaXMuc2VsZWN0ZWRBY3Rpb25EZWZpbml0aW9uPy5wYXJhbWV0ZXJEZWZpbml0aW9ucyA/PyBbXSkuZm9yRWFjaCgocGFyYW1EZWY6IEFjdGlvblBhcmFtZXRlckRlZmluaXRpb24pID0+IHtcbiAgICAgIGlmIChwYXJhbURlZi50eXBlID09PSAnZDpib29sZWFuJykge1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnNbcGFyYW1EZWYubmFtZV0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDb25zdHJhaW50c1RvU2VsZWN0T3B0aW9ucyhjb25zdHJhaW50czogQ29uc3RyYWludFZhbHVlW10pOiBDYXJkVmlld1NlbGVjdEl0ZW1PcHRpb248dW5rbm93bj5bXSB7XG4gICAgcmV0dXJuIGNvbnN0cmFpbnRzXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAoIWEubGFiZWwgJiYgYi5sYWJlbCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYi5sYWJlbCAmJiBhLmxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhLmxhYmVsPy5sb2NhbGVDb21wYXJlKGIubGFiZWwpID8/IC0xO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGNvbnN0cmFpbnQpID0+ICh7XG4gICAgICAgIGtleTogY29uc3RyYWludC52YWx1ZSxcbiAgICAgICAgbGFiZWw6IGNvbnN0cmFpbnQubGFiZWwgPyBgJHtjb25zdHJhaW50LmxhYmVsfSBbJHtjb25zdHJhaW50LnZhbHVlfV1gIDogY29uc3RyYWludC52YWx1ZVxuICAgICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVtcHR5UGFyYW1ldGVycyhwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9KTogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0ge1xuICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiAocGFyYW1zW2tleV0gPT09IG51bGwgfHwgcGFyYW1zW2tleV0gPT09IHVuZGVmaW5lZCB8fCBwYXJhbXNba2V5XSA9PT0gJycpICYmIGRlbGV0ZSBwYXJhbXNba2V5XSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIGxvYWRTZWN1cml0eU1hcmtPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhcmFtZXRlcnM/LnNlY3VyaXR5R3JvdXBJZCkge1xuICAgICAgZnJvbSh0aGlzLnNlY3VyaXR5Q29udHJvbHNTZXJ2aWNlLmdldFNlY3VyaXR5TWFyayh0aGlzLnBhcmFtZXRlcnMuc2VjdXJpdHlHcm91cElkIGFzIHN0cmluZykpXG4gICAgICAgIC5waXBlKG1hcCgoc2VjdXJpdHlNYXJrcykgPT4gc2VjdXJpdHlNYXJrcy5lbnRyaWVzLm1hcCgoZW50cnkpID0+IHRoaXMuZm9ybWF0U2VjdXJpdHlNYXJrQ29uc3RyYWludChlbnRyeSkpKSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB0aGlzLnNldENhcmRWaWV3UHJvcGVydGllcyh0aGlzLnBhcnNlQ29uc3RyYWludHNUb1NlbGVjdE9wdGlvbnMocmVzKSBhcyBDYXJkVmlld1NlbGVjdEl0ZW1PcHRpb248c3RyaW5nPltdKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRTZWN1cml0eU1hcmtDb25zdHJhaW50KHNlY3VyaXR5TWFyazogU2VjdXJpdHlNYXJrKTogQ29uc3RyYWludFZhbHVlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHNlY3VyaXR5TWFyay5pZCxcbiAgICAgIGxhYmVsOiBzZWN1cml0eU1hcmsubmFtZVxuICAgIH07XG4gIH1cbn1cbiIsIjxmb3JtIGNsYXNzPVwiYWNhLXJ1bGUtYWN0aW9uX19mb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYWNhLXJ1bGUtYWN0aW9uLWZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwiZmlsbFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICA8bWF0LXNlbGVjdFxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aW9uRGVmaW5pdGlvbklkXCJcbiAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cInJ1bGUtYWN0aW9uLXNlbGVjdFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ0FDQV9GT0xERVJfUlVMRVMuUlVMRV9ERVRBSUxTLkFDVElPTl9TRUxFQ1RfUExBQ0VIT0xERVInIHwgdHJhbnNsYXRlXCI+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uRGVmaW5pdGlvbiBvZiBhY3Rpb25EZWZpbml0aW9uc1wiXG4gICAgICAgIFt2YWx1ZV09XCJhY3Rpb25EZWZpbml0aW9uLmlkXCI+XG4gICAgICAgIHt7IGFjdGlvbkRlZmluaXRpb24udGl0bGUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPGFkZi1jYXJkLXZpZXdcbiAgICAqbmdJZj1cImNhcmRWaWV3SXRlbXM/Lmxlbmd0aCA+IDBcIlxuICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cInJ1bGUtYWN0aW9uLWNhcmQtdmlld1wiXG4gICAgW3Byb3BlcnRpZXNdPVwiY2FyZFZpZXdJdGVtc1wiXG4gICAgY2xhc3M9XCJhY2EtcnVsZS1hY3Rpb24tZnVsbC13aWR0aFwiXG4gICAgW2VkaXRhYmxlXT1cIiFyZWFkT25seVwiIC8+XG5cbjwvZm9ybT5cbiJdfQ==
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1hY3Rpb24udWktY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLWNvbnRlbnQvZm9sZGVyLXJ1bGVzL3NyYy9ydWxlLWRldGFpbHMvYWN0aW9ucy9ydWxlLWFjdGlvbi51aS1jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9mb2xkZXItcnVsZXMvc3JjL3J1bGUtZGV0YWlscy9hY3Rpb25zL3J1bGUtYWN0aW9uLnVpLWNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQW9DLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RJLE9BQU8sRUFBd0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsSSxPQUFPLEVBQ0wscUJBQXFCLEVBRXJCLGNBQWMsRUFDZCx1QkFBdUIsRUFFdkIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUV0QixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUNMLCtCQUErQixFQUUvQixlQUFlLEVBQ2YsNEJBQTRCLEVBRTVCLFVBQVUsRUFDVix1QkFBdUIsRUFDdkIsVUFBVSxFQUNYLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFl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QUFFLGVBQWUsdVRBQUUsY0FBYzs7U0FldEcscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBakJqQyxTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxZQUN4RyxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSSxRQUMvQixFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxhQUN2Qjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzt5QkFDckQ7d0JBQ0QscUJBQXFCO3FCQUN0QjtnUUFJRCxNQUFNO3NCQURMLEtBQUs7Z0JBSU4saUJBQWlCO3NCQURoQixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFLRixvQkFBb0I7c0JBRHZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBmb3J3YXJkUmVmLCBpbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGlvbkRlZmluaXRpb25UcmFuc2Zvcm1lZCwgUnVsZUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL3J1bGUtYWN0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIENhcmRWaWV3Qm9vbEl0ZW1Nb2RlbCxcbiAgQ2FyZFZpZXdJdGVtLFxuICBDYXJkVmlld01vZHVsZSxcbiAgQ2FyZFZpZXdTZWxlY3RJdGVtTW9kZWwsXG4gIENhcmRWaWV3U2VsZWN0SXRlbU9wdGlvbixcbiAgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsLFxuICBDYXJkVmlld1VwZGF0ZVNlcnZpY2UsXG4gIFVwZGF0ZU5vdGlmaWNhdGlvblxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQWN0aW9uUGFyYW1ldGVyRGVmaW5pdGlvbiwgQ2F0ZWdvcnksIE5vZGUsIFNlY3VyaXR5TWFyayB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgZnJvbSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGlvblBhcmFtZXRlckNvbnN0cmFpbnQsIENvbnN0cmFpbnRWYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVsL2FjdGlvbi1wYXJhbWV0ZXItY29uc3RyYWludC5tb2RlbCc7XG5pbXBvcnQge1xuICBDYXRlZ29yeVNlbGVjdG9yRGlhbG9nQ29tcG9uZW50LFxuICBDYXRlZ29yeVNlbGVjdG9yRGlhbG9nT3B0aW9ucyxcbiAgQ2F0ZWdvcnlTZXJ2aWNlLFxuICBDb250ZW50Tm9kZVNlbGVjdG9yQ29tcG9uZW50LFxuICBDb250ZW50Tm9kZVNlbGVjdG9yQ29tcG9uZW50RGF0YSxcbiAgTm9kZUFjdGlvbixcbiAgU2VjdXJpdHlDb250cm9sc1NlcnZpY2UsXG4gIFRhZ1NlcnZpY2Vcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb250ZW50LXNlcnZpY2VzJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBDYXJkVmlld01vZHVsZV0sXG4gIHNlbGVjdG9yOiAnYWNhLXJ1bGUtYWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3J1bGUtYWN0aW9uLnVpLWNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcnVsZS1hY3Rpb24udWktY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDogeyBjbGFzczogJ2FjYS1ydWxlLWFjdGlvbicgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJ1bGVBY3Rpb25VaUNvbXBvbmVudClcbiAgICB9LFxuICAgIENhcmRWaWV3VXBkYXRlU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFJ1bGVBY3Rpb25VaUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIG5vZGVJZCA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIGFjdGlvbkRlZmluaXRpb25zOiBBY3Rpb25EZWZpbml0aW9uVHJhbnNmb3JtZWRbXTtcblxuICBASW5wdXQoKVxuICByZWFkT25seSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3BhcmFtZXRlckNvbnN0cmFpbnRzID0gW107XG4gIEBJbnB1dCgpXG4gIGdldCBwYXJhbWV0ZXJDb25zdHJhaW50cygpOiBBY3Rpb25QYXJhbWV0ZXJDb25zdHJhaW50W10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbWV0ZXJDb25zdHJhaW50cztcbiAgfVxuXG4gIHNldCBwYXJhbWV0ZXJDb25zdHJhaW50cyh2YWx1ZSkge1xuICAgIHRoaXMuX3BhcmFtZXRlckNvbnN0cmFpbnRzID0gdmFsdWUubWFwKChvYmopID0+ICh7XG4gICAgICAuLi5vYmosXG4gICAgICBjb25zdHJhaW50czogdGhpcy5wYXJzZUNvbnN0cmFpbnRzVG9TZWxlY3RPcHRpb25zKG9iai5jb25zdHJhaW50cylcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHRhZ3NSZWxhdGVkUHJvcGVydGllc0FuZEFzcGVjdHMgPSBbJ2NtOnRhZ3Njb3BlJywgJ2NtOnRhZ1Njb3BlQ2FjaGUnLCAnY206dGFnZ2FibGUnXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yaWVzUmVsYXRlZFByb3BlcnRpZXNBbmRBc3BlY3RzID0gWydjbTpjYXRlZ29yaWVzJywgJ2NtOmdlbmVyYWxjbGFzc2lmaWFibGUnXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJhbXNUb0Zvcm1hdERpc3BsYXllZFZhbHVlID0gWydzZWN1cml0eU1hcmtJZCcsICdzZWN1cml0eUdyb3VwSWQnXTtcblxuICBpc0Z1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBhY3Rpb25EZWZpbml0aW9uSWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgfSk7XG5cbiAgY2FyZFZpZXdJdGVtczogQ2FyZFZpZXdJdGVtW10gPSBbXTtcbiAgcGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7fTtcblxuICBnZXQgc2VsZWN0ZWRBY3Rpb25EZWZpbml0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnYWN0aW9uRGVmaW5pdGlvbklkJykudmFsdWU7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRBY3Rpb25EZWZpbml0aW9uKCk6IEFjdGlvbkRlZmluaXRpb25UcmFuc2Zvcm1lZCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uRGVmaW5pdGlvbnMuZmluZCgoYWN0aW9uRGVmaW5pdGlvbjogQWN0aW9uRGVmaW5pdGlvblRyYW5zZm9ybWVkKSA9PiBhY3Rpb25EZWZpbml0aW9uLmlkID09PSB0aGlzLnNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbklkKTtcbiAgfVxuXG4gIG9uQ2hhbmdlOiAoYWN0aW9uOiBSdWxlQWN0aW9uKSA9PiB2b2lkID0gKCkgPT4gdW5kZWZpbmVkO1xuICBvblRvdWNoOiAoKSA9PiB2b2lkID0gKCkgPT4gdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhcmRWaWV3VXBkYXRlU2VydmljZTogQ2FyZFZpZXdVcGRhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2F0ZWdvcnlTZXJ2aWNlOiBDYXRlZ29yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWN1cml0eUNvbnRyb2xzU2VydmljZTogU2VjdXJpdHlDb250cm9sc1NlcnZpY2VcbiAgKSB7fVxuXG4gIHdyaXRlVmFsdWUoYWN0aW9uOiBSdWxlQWN0aW9uKSB7XG4gICAgdGhpcy5mb3JtLnNldFZhbHVlKHtcbiAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogYWN0aW9uLmFjdGlvbkRlZmluaXRpb25JZFxuICAgIH0pO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IHtcbiAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgIC4uLmFjdGlvbi5wYXJhbXNcbiAgICB9O1xuICAgIHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgaWYgKHRoaXMucGFyYW1ldGVycz8uc2VjdXJpdHlHcm91cElkKSB7XG4gICAgICB0aGlzLmxvYWRTZWN1cml0eU1hcmtPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGFjdGlvbjogUnVsZUFjdGlvbikgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWN0aW9uRGVmaW5pdGlvbnMgPSB0aGlzLmFjdGlvbkRlZmluaXRpb25zLnNvcnQoKGZpcnN0QWN0aW9uRGVmaW5pdGlvbiwgc2Vjb25kQWN0aW9uRGVmaW5pdGlvbikgPT5cbiAgICAgIGZpcnN0QWN0aW9uRGVmaW5pdGlvbi50aXRsZS5sb2NhbGVDb21wYXJlKHNlY29uZEFjdGlvbkRlZmluaXRpb24udGl0bGUpXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0RGVmYXVsdFBhcmFtZXRlcnMoKTtcbiAgICAgIHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHtcbiAgICAgICAgYWN0aW9uRGVmaW5pdGlvbklkOiB0aGlzLnNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbklkLFxuICAgICAgICBwYXJhbXM6IHRoaXMucGFyYW1ldGVyc1xuICAgICAgfSk7XG4gICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FyZFZpZXdVcGRhdGVTZXJ2aWNlLml0ZW1VcGRhdGVkJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHVwZGF0ZU5vdGlmaWNhdGlvbjogVXBkYXRlTm90aWZpY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpc1NlY3VyaXR5R3JvdXBVcGRhdGVkID0gdXBkYXRlTm90aWZpY2F0aW9uLnRhcmdldC5rZXkgPT09ICdzZWN1cml0eUdyb3VwSWQnO1xuICAgICAgaWYgKGlzU2VjdXJpdHlHcm91cFVwZGF0ZWQpIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNlY3VyaXR5TWFya0lkID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gdGhpcy5jbGVhckVtcHR5UGFyYW1ldGVycyh7XG4gICAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgICAgLi4udXBkYXRlTm90aWZpY2F0aW9uLmNoYW5nZWRcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vbkNoYW5nZSh7XG4gICAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogdGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb25JZCxcbiAgICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtZXRlcnNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vblRvdWNoKCk7XG5cbiAgICAgIGlmIChpc1NlY3VyaXR5R3JvdXBVcGRhdGVkKSB7XG4gICAgICAgIHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMubG9hZFNlY3VyaXR5TWFya09wdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCByZWFkT25seSA9IGNoYW5nZXNbJ3JlYWRPbmx5J10/LmN1cnJlbnRWYWx1ZTtcbiAgICBpZiAocmVhZE9ubHkgIT09IHVuZGVmaW5lZCAmJiByZWFkT25seSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWFkT25seSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm0uZW5hYmxlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKHNlY3VyaXR5TWFya09wdGlvbnM/OiBDYXJkVmlld1NlbGVjdEl0ZW1PcHRpb248c3RyaW5nPltdKSB7XG4gICAgY29uc3QgZGlzYWJsZWRUYWdzID0gIXRoaXMudGFnU2VydmljZS5hcmVUYWdzRW5hYmxlZCgpO1xuICAgIGNvbnN0IGRpc2FibGVkQ2F0ZWdvcmllcyA9ICF0aGlzLmNhdGVnb3J5U2VydmljZS5hcmVDYXRlZ29yaWVzRW5hYmxlZCgpO1xuICAgIHRoaXMuY2FyZFZpZXdJdGVtcyA9ICh0aGlzLnNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbj8ucGFyYW1ldGVyRGVmaW5pdGlvbnMgPz8gW10pLm1hcCgocGFyYW1EZWYpID0+IHtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRzRm9yRHJvcGRvd25Cb3ggPVxuICAgICAgICBwYXJhbURlZi5uYW1lID09PSAnc2VjdXJpdHlNYXJrSWQnXG4gICAgICAgICAgPyB7IG5hbWU6IHBhcmFtRGVmLm5hbWUsIGNvbnN0cmFpbnRzOiBzZWN1cml0eU1hcmtPcHRpb25zIHx8IFtdIH1cbiAgICAgICAgICA6IHRoaXMuX3BhcmFtZXRlckNvbnN0cmFpbnRzLmZpbmQoKG9iaikgPT4gb2JqLm5hbWUgPT09IHBhcmFtRGVmLm5hbWUpO1xuICAgICAgY29uc3QgY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwgPSB7XG4gICAgICAgIGxhYmVsOiBwYXJhbURlZi5kaXNwbGF5TGFiZWwgKyAocGFyYW1EZWYubWFuZGF0b3J5ID8gJyAqJyA6ICcnKSxcbiAgICAgICAga2V5OiBwYXJhbURlZi5uYW1lLFxuICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgLi4uKHBhcmFtRGVmLm1hbmRhdG9yeVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0FDQV9GT0xERVJfUlVMRVMuUlVMRV9ERVRBSUxTLkVSUk9SLlJFUVVJUkVEJyxcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gISF2YWx1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgICAgc3dpdGNoIChwYXJhbURlZi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2Q6Ym9vbGVhbic6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDYXJkVmlld0Jvb2xJdGVtTW9kZWwoe1xuICAgICAgICAgICAgLi4uY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJhbWV0ZXJzW3BhcmFtRGVmLm5hbWVdID8/IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJ2Q6bm9kZXJlZic6XG4gICAgICAgICAgaWYgKCFjb25zdHJhaW50c0ZvckRyb3Bkb3duQm94ICYmICF0aGlzLnJlYWRPbmx5ICYmIHBhcmFtRGVmLm5hbWUgIT09ICdjYXRlZ29yeS12YWx1ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsKHtcbiAgICAgICAgICAgICAgLi4uY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwsXG4gICAgICAgICAgICAgIGljb246ICdmb2xkZXInLFxuICAgICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgICAgICAgY2xpY2thYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBjbGlja0NhbGxCYWNrOiB0aGlzLm9wZW5TZWxlY3RvckRpYWxvZy5iaW5kKHRoaXMsIHBhcmFtRGVmLm5hbWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJhbWV0ZXJzW3BhcmFtRGVmLm5hbWVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtRGVmLm5hbWUgPT09ICdjYXRlZ29yeS12YWx1ZScgJiYgIXRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsKHtcbiAgICAgICAgICAgICAgLi4uY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwsXG4gICAgICAgICAgICAgIGljb246ICdsaWJyYXJ5X2FkZCcsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICAgICAgICBjbGlja2FibGU6IHRydWUsXG4gICAgICAgICAgICAgIGNsaWNrQ2FsbEJhY2s6IHRoaXMub3BlbkNhdERpYWxvZy5iaW5kKHRoaXMsIHBhcmFtRGVmLm5hbWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJhbWV0ZXJzW3BhcmFtRGVmLm5hbWVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIC8vICBmYWxscyB0aHJvdWdoXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGNvbnN0cmFpbnRzRm9yRHJvcGRvd25Cb3ggJiYgIXRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FyZFZpZXdTZWxlY3RJdGVtTW9kZWwoe1xuICAgICAgICAgICAgICAuLi5jYXJkVmlld1Byb3BlcnRpZXNNb2RlbCxcbiAgICAgICAgICAgICAgdmFsdWU6ICh0aGlzLnBhcmFtZXRlcnNbcGFyYW1EZWYubmFtZV0gYXMgc3RyaW5nKSA/PyAnJyxcbiAgICAgICAgICAgICAgb3B0aW9ucyQ6IG9mKGNvbnN0cmFpbnRzRm9yRHJvcGRvd25Cb3guY29uc3RyYWludHMpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICAgIChkaXNhYmxlZFRhZ3MgJiYgdGhpcy50YWdzUmVsYXRlZFByb3BlcnRpZXNBbmRBc3BlY3RzLmluY2x1ZGVzKG9wdGlvbi5rZXkpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2FibGVkQ2F0ZWdvcmllcyAmJiB0aGlzLmNhdGVnb3JpZXNSZWxhdGVkUHJvcGVydGllc0FuZEFzcGVjdHMuaW5jbHVkZXMob3B0aW9uLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBDYXJkVmlld1RleHRJdGVtTW9kZWwoe1xuICAgICAgICAgICAgLi4uY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwsXG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgY29uc3RyYWludHNGb3JEcm9wZG93bkJveCAmJiB0aGlzLnJlYWRPbmx5ICYmIHRoaXMucGFyYW1zVG9Gb3JtYXREaXNwbGF5ZWRWYWx1ZS5pbmNsdWRlcyhwYXJhbURlZi5uYW1lKVxuICAgICAgICAgICAgICAgID8gY29uc3RyYWludHNGb3JEcm9wZG93bkJveC5jb25zdHJhaW50cy5maW5kKChjb25zdHJhaW50KSA9PiBjb25zdHJhaW50LmtleSA9PT0gdGhpcy5wYXJhbWV0ZXJzW3BhcmFtRGVmLm5hbWVdKT8ubGFiZWwgPz8gJydcbiAgICAgICAgICAgICAgICA6IHRoaXMucGFyYW1ldGVyc1twYXJhbURlZi5uYW1lXSA/PyAnJ1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuU2VsZWN0b3JEaWFsb2cocGFyYW1EZWZOYW1lKSB7XG4gICAgY29uc3QgZGF0YTogQ29udGVudE5vZGVTZWxlY3RvckNvbXBvbmVudERhdGEgPSB7XG4gICAgICBzZWxlY3Rpb25Nb2RlOiAnc2luZ2xlJyxcbiAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5QTEFDRUhPTERFUi5DSE9PU0VfRk9MREVSJyksXG4gICAgICBhY3Rpb25OYW1lOiBOb2RlQWN0aW9uLkNIT09TRSxcbiAgICAgIGN1cnJlbnRGb2xkZXJJZDogdGhpcy5ub2RlSWQsXG4gICAgICBzZWxlY3Q6IG5ldyBTdWJqZWN0PE5vZGVbXT4oKVxuICAgIH07XG5cbiAgICB0aGlzLmRpYWxvZy5vcGVuKENvbnRlbnROb2RlU2VsZWN0b3JDb21wb25lbnQsIHtcbiAgICAgIGRhdGEsXG4gICAgICBwYW5lbENsYXNzOiAnYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1kaWFsb2cnLFxuICAgICAgd2lkdGg6ICc2MzBweCdcbiAgICB9KTtcblxuICAgIGRhdGEuc2VsZWN0LnN1YnNjcmliZShcbiAgICAgIChzZWxlY3Rpb25zOiBOb2RlW10pID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbnNbMF0uaWQpIHtcbiAgICAgICAgICB0aGlzLndyaXRlVmFsdWUoe1xuICAgICAgICAgICAgYWN0aW9uRGVmaW5pdGlvbklkOiB0aGlzLnNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbklkLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgW3BhcmFtRGVmTmFtZV06IHNlbGVjdGlvbnNbMF0uaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHtcbiAgICAgICAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogdGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb25JZCxcbiAgICAgICAgICAgIHBhcmFtczogdGhpcy5wYXJhbWV0ZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5vblRvdWNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5DYXREaWFsb2cocGFyYW1EZWZOYW1lKSB7XG4gICAgY29uc3QgZGF0YTogQ2F0ZWdvcnlTZWxlY3RvckRpYWxvZ09wdGlvbnMgPSB7XG4gICAgICBzZWxlY3Q6IG5ldyBTdWJqZWN0PENhdGVnb3J5W10+KCksXG4gICAgICBtdWx0aVNlbGVjdDogZmFsc2VcbiAgICB9O1xuXG4gICAgdGhpcy5kaWFsb2cub3BlbihDYXRlZ29yeVNlbGVjdG9yRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhLFxuICAgICAgd2lkdGg6ICc2MzBweCdcbiAgICB9KTtcblxuICAgIGRhdGEuc2VsZWN0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoc2VsZWN0aW9uczogQ2F0ZWdvcnlbXSkgPT4ge1xuICAgICAgaWYgKHNlbGVjdGlvbnNbMF0uaWQpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHtcbiAgICAgICAgICBhY3Rpb25EZWZpbml0aW9uSWQ6IHRoaXMuc2VsZWN0ZWRBY3Rpb25EZWZpbml0aW9uSWQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAuLi50aGlzLnBhcmFtZXRlcnMsXG4gICAgICAgICAgICBbcGFyYW1EZWZOYW1lXTogc2VsZWN0aW9uc1swXS5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25DaGFuZ2Uoe1xuICAgICAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogdGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb25JZCxcbiAgICAgICAgICBwYXJhbXM6IHRoaXMucGFyYW1ldGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vblRvdWNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXREZWZhdWx0UGFyYW1ldGVycygpIHtcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSB7fTtcbiAgICAodGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb24/LnBhcmFtZXRlckRlZmluaXRpb25zID8/IFtdKS5mb3JFYWNoKChwYXJhbURlZjogQWN0aW9uUGFyYW1ldGVyRGVmaW5pdGlvbikgPT4ge1xuICAgICAgaWYgKHBhcmFtRGVmLnR5cGUgPT09ICdkOmJvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMucGFyYW1ldGVyc1twYXJhbURlZi5uYW1lXSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNvbnN0cmFpbnRzVG9TZWxlY3RPcHRpb25zKGNvbnN0cmFpbnRzOiBDb25zdHJhaW50VmFsdWVbXSk6IENhcmRWaWV3U2VsZWN0SXRlbU9wdGlvbjx1bmtub3duPltdIHtcbiAgICByZXR1cm4gY29uc3RyYWludHNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGlmICghYS5sYWJlbCAmJiBiLmxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFiLmxhYmVsICYmIGEubGFiZWwpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEubGFiZWw/LmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkgPz8gLTE7XG4gICAgICB9KVxuICAgICAgLm1hcCgoY29uc3RyYWludCkgPT4gKHtcbiAgICAgICAga2V5OiBjb25zdHJhaW50LnZhbHVlLFxuICAgICAgICBsYWJlbDogY29uc3RyYWludC5sYWJlbCA/IGAke2NvbnN0cmFpbnQubGFiZWx9IFske2NvbnN0cmFpbnQudmFsdWV9XWAgOiBjb25zdHJhaW50LnZhbHVlXG4gICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRW1wdHlQYXJhbWV0ZXJzKHBhcmFtczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSB7XG4gICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IChwYXJhbXNba2V5XSA9PT0gbnVsbCB8fCBwYXJhbXNba2V5XSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtc1trZXldID09PSAnJykgJiYgZGVsZXRlIHBhcmFtc1trZXldKTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgbG9hZFNlY3VyaXR5TWFya09wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFyYW1ldGVycz8uc2VjdXJpdHlHcm91cElkKSB7XG4gICAgICBmcm9tKHRoaXMuc2VjdXJpdHlDb250cm9sc1NlcnZpY2UuZ2V0U2VjdXJpdHlNYXJrKHRoaXMucGFyYW1ldGVycy5zZWN1cml0eUdyb3VwSWQgYXMgc3RyaW5nKSlcbiAgICAgICAgLnBpcGUobWFwKChzZWN1cml0eU1hcmtzKSA9PiBzZWN1cml0eU1hcmtzLmVudHJpZXMubWFwKChlbnRyeSkgPT4gdGhpcy5mb3JtYXRTZWN1cml0eU1hcmtDb25zdHJhaW50KGVudHJ5KSkpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKHRoaXMucGFyc2VDb25zdHJhaW50c1RvU2VsZWN0T3B0aW9ucyhyZXMpIGFzIENhcmRWaWV3U2VsZWN0SXRlbU9wdGlvbjxzdHJpbmc+W10pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFNlY3VyaXR5TWFya0NvbnN0cmFpbnQoc2VjdXJpdHlNYXJrOiBTZWN1cml0eU1hcmspOiBDb25zdHJhaW50VmFsdWUge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogc2VjdXJpdHlNYXJrLmlkLFxuICAgICAgbGFiZWw6IHNlY3VyaXR5TWFyay5uYW1lXG4gICAgfTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJhY2EtcnVsZS1hY3Rpb25fX2Zvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cblxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJhY2EtcnVsZS1hY3Rpb24tZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJmaWxsXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgIDxtYXQtc2VsZWN0XG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJhY3Rpb25EZWZpbml0aW9uSWRcIlxuICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwicnVsZS1hY3Rpb24tc2VsZWN0XCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInQUNBX0ZPTERFUl9SVUxFUy5SVUxFX0RFVEFJTFMuQUNUSU9OX1NFTEVDVF9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGVcIj5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb25EZWZpbml0aW9uIG9mIGFjdGlvbkRlZmluaXRpb25zXCJcbiAgICAgICAgW3ZhbHVlXT1cImFjdGlvbkRlZmluaXRpb24uaWRcIj5cbiAgICAgICAge3sgYWN0aW9uRGVmaW5pdGlvbi50aXRsZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8YWRmLWNhcmQtdmlld1xuICAgICpuZ0lmPVwiY2FyZFZpZXdJdGVtcz8ubGVuZ3RoID4gMFwiXG4gICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwicnVsZS1hY3Rpb24tY2FyZC12aWV3XCJcbiAgICBbcHJvcGVydGllc109XCJjYXJkVmlld0l0ZW1zXCJcbiAgICBjbGFzcz1cImFjYS1ydWxlLWFjdGlvbi1mdWxsLXdpZHRoXCJcbiAgICBbZWRpdGFibGVdPVwiIXJlYWRPbmx5XCIgLz5cblxuPC9mb3JtPlxuIl19