barsa-tiles 0.0.1

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 (120) hide show
  1. package/README.md +25 -0
  2. package/esm2020/barsa-tiles.mjs +5 -0
  3. package/esm2020/lib/action-item/action-item.component.mjs +17 -0
  4. package/esm2020/lib/action-links.pipe.mjs +16 -0
  5. package/esm2020/lib/actions-link/actions-link.component.mjs +19 -0
  6. package/esm2020/lib/app-finder/app-finder.component.mjs +53 -0
  7. package/esm2020/lib/app-finder-app-list/app-finder-app-list.component.mjs +40 -0
  8. package/esm2020/lib/app-finder-group/app-finder-group.component.mjs +42 -0
  9. package/esm2020/lib/app-finder.service.mjs +121 -0
  10. package/esm2020/lib/barsa-tiles.module.mjs +196 -0
  11. package/esm2020/lib/change-app-tile/change-app-tile.component.mjs +47 -0
  12. package/esm2020/lib/create-app-group/create-app-group.component.mjs +44 -0
  13. package/esm2020/lib/directives/emptylist.directive.mjs +36 -0
  14. package/esm2020/lib/feed-tile/feed-tile.component.mjs +31 -0
  15. package/esm2020/lib/footer-edit-tile/footer-edit-tile.component.mjs +13 -0
  16. package/esm2020/lib/footer-tile/footer-tile.component.mjs +28 -0
  17. package/esm2020/lib/form-app-finder/form-app-finder.component.mjs +94 -0
  18. package/esm2020/lib/form-tile/form-tile.component.mjs +34 -0
  19. package/esm2020/lib/logo-tile/logo-tile.component.mjs +22 -0
  20. package/esm2020/lib/micro-tile-chart-area/micro-tile-chart-area.component.mjs +39 -0
  21. package/esm2020/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.mjs +28 -0
  22. package/esm2020/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +26 -0
  23. package/esm2020/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.mjs +19 -0
  24. package/esm2020/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.mjs +30 -0
  25. package/esm2020/lib/micro-tile-chart-line/micro-tile-chart-line.component.mjs +31 -0
  26. package/esm2020/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.mjs +26 -0
  27. package/esm2020/lib/models/app-tile-footer-section.mjs +2 -0
  28. package/esm2020/lib/models/app-tile-footer.mjs +2 -0
  29. package/esm2020/lib/models/app-tile-group-pin.mjs +2 -0
  30. package/esm2020/lib/models/base-bt-tile-component.mjs +20 -0
  31. package/esm2020/lib/models/base-tile-component.mjs +57 -0
  32. package/esm2020/lib/models/base-tile-setting.mjs +2 -0
  33. package/esm2020/lib/models/feed-tile-setting.mjs +2 -0
  34. package/esm2020/lib/models/index.mjs +14 -0
  35. package/esm2020/lib/models/logo-tile-setting.mjs +2 -0
  36. package/esm2020/lib/models/micro-tile-chart-bullet-setting.mjs +2 -0
  37. package/esm2020/lib/models/news-tile-setting.mjs +2 -0
  38. package/esm2020/lib/models/numeric-tile-setting.mjs +2 -0
  39. package/esm2020/lib/models/profile-tile-setting.mjs +2 -0
  40. package/esm2020/lib/models/tile-setting.mjs +2 -0
  41. package/esm2020/lib/models/user-portal-settings.mjs +2 -0
  42. package/esm2020/lib/news-tile/news-tile.component.mjs +59 -0
  43. package/esm2020/lib/numeric-tile/numeric-tile.component.mjs +33 -0
  44. package/esm2020/lib/pin-tile/pin-tile.component.mjs +111 -0
  45. package/esm2020/lib/pipes/group-tiles.pipe.mjs +31 -0
  46. package/esm2020/lib/pipes/home-group.pipe.mjs +17 -0
  47. package/esm2020/lib/pipes/tile-home-filter.pipe.mjs +28 -0
  48. package/esm2020/lib/profile-tile/profile-tile.component.mjs +25 -0
  49. package/esm2020/lib/shellbar/shellbar.component.mjs +159 -0
  50. package/esm2020/lib/simple-tile/simple-tile.component.mjs +17 -0
  51. package/esm2020/lib/tile/tile.component.mjs +47 -0
  52. package/esm2020/lib/tile-renderer.directive.mjs +69 -0
  53. package/esm2020/lib/tiles-viewer/tiles-viewer.component.mjs +118 -0
  54. package/esm2020/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +158 -0
  55. package/esm2020/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +75 -0
  56. package/esm2020/lib/tiles-viewer.service.mjs +130 -0
  57. package/esm2020/lib/tiles.service.mjs +500 -0
  58. package/esm2020/public-api.mjs +43 -0
  59. package/fesm2015/barsa-tiles.mjs +2415 -0
  60. package/fesm2015/barsa-tiles.mjs.map +1 -0
  61. package/fesm2020/barsa-tiles.mjs +2386 -0
  62. package/fesm2020/barsa-tiles.mjs.map +1 -0
  63. package/index.d.ts +5 -0
  64. package/lib/action-item/action-item.component.d.ts +6 -0
  65. package/lib/action-links.pipe.d.ts +7 -0
  66. package/lib/actions-link/actions-link.component.d.ts +8 -0
  67. package/lib/app-finder/app-finder.component.d.ts +24 -0
  68. package/lib/app-finder-app-list/app-finder-app-list.component.d.ts +20 -0
  69. package/lib/app-finder-group/app-finder-group.component.d.ts +14 -0
  70. package/lib/app-finder.service.d.ts +33 -0
  71. package/lib/barsa-tiles.module.d.ts +65 -0
  72. package/lib/change-app-tile/change-app-tile.component.d.ts +20 -0
  73. package/lib/create-app-group/create-app-group.component.d.ts +19 -0
  74. package/lib/directives/emptylist.directive.d.ts +14 -0
  75. package/lib/feed-tile/feed-tile.component.d.ts +11 -0
  76. package/lib/footer-edit-tile/footer-edit-tile.component.d.ts +6 -0
  77. package/lib/footer-tile/footer-tile.component.d.ts +11 -0
  78. package/lib/form-app-finder/form-app-finder.component.d.ts +38 -0
  79. package/lib/form-tile/form-tile.component.d.ts +24 -0
  80. package/lib/logo-tile/logo-tile.component.d.ts +7 -0
  81. package/lib/micro-tile-chart-area/micro-tile-chart-area.component.d.ts +8 -0
  82. package/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.d.ts +12 -0
  83. package/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.d.ts +16 -0
  84. package/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.d.ts +7 -0
  85. package/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.d.ts +8 -0
  86. package/lib/micro-tile-chart-line/micro-tile-chart-line.component.d.ts +8 -0
  87. package/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.d.ts +8 -0
  88. package/lib/models/app-tile-footer-section.d.ts +6 -0
  89. package/lib/models/app-tile-footer.d.ts +8 -0
  90. package/lib/models/app-tile-group-pin.d.ts +5 -0
  91. package/lib/models/base-bt-tile-component.d.ts +9 -0
  92. package/lib/models/base-tile-component.d.ts +26 -0
  93. package/lib/models/base-tile-setting.d.ts +5 -0
  94. package/lib/models/feed-tile-setting.d.ts +7 -0
  95. package/lib/models/index.d.ts +13 -0
  96. package/lib/models/logo-tile-setting.d.ts +6 -0
  97. package/lib/models/micro-tile-chart-bullet-setting.d.ts +10 -0
  98. package/lib/models/news-tile-setting.d.ts +4 -0
  99. package/lib/models/numeric-tile-setting.d.ts +9 -0
  100. package/lib/models/profile-tile-setting.d.ts +7 -0
  101. package/lib/models/tile-setting.d.ts +9 -0
  102. package/lib/models/user-portal-settings.d.ts +9 -0
  103. package/lib/news-tile/news-tile.component.d.ts +24 -0
  104. package/lib/numeric-tile/numeric-tile.component.d.ts +12 -0
  105. package/lib/pin-tile/pin-tile.component.d.ts +30 -0
  106. package/lib/pipes/group-tiles.pipe.d.ts +14 -0
  107. package/lib/pipes/home-group.pipe.d.ts +9 -0
  108. package/lib/pipes/tile-home-filter.pipe.d.ts +8 -0
  109. package/lib/profile-tile/profile-tile.component.d.ts +7 -0
  110. package/lib/shellbar/shellbar.component.d.ts +64 -0
  111. package/lib/simple-tile/simple-tile.component.d.ts +6 -0
  112. package/lib/tile/tile.component.d.ts +12 -0
  113. package/lib/tile-renderer.directive.d.ts +27 -0
  114. package/lib/tiles-viewer/tiles-viewer.component.d.ts +51 -0
  115. package/lib/tiles-viewer-container/tiles-viewer-container.component.d.ts +55 -0
  116. package/lib/tiles-viewer-group/tiles-viewer-group.component.d.ts +34 -0
  117. package/lib/tiles-viewer.service.d.ts +42 -0
  118. package/lib/tiles.service.d.ts +68 -0
  119. package/package.json +31 -0
  120. package/public-api.d.ts +39 -0
@@ -0,0 +1,130 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, Subject } from 'rxjs';
3
+ import { debounceTime, exhaustMap, finalize, takeUntil, tap } from 'rxjs/operators';
4
+ import { ChangeAppTileComponent } from './change-app-tile/change-app-tile.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@fundamental-ngx/core";
7
+ import * as i2 from "./tiles.service";
8
+ export class TilesViewerService {
9
+ constructor(dialogService, tilesService) {
10
+ this.dialogService = dialogService;
11
+ this.tilesService = tilesService;
12
+ this._onDestroy$ = new Subject();
13
+ this._hideTileSource = new Subject();
14
+ this._updateAppTileSettingSource = new Subject();
15
+ this._deleteGroupSource = new Subject();
16
+ this._loadAppGroupSource = new Subject();
17
+ this._saveAppGroupOrdersSource = new Subject();
18
+ this.saveAppGroupOrders$ = this._saveAppGroupOrdersSource.asObservable();
19
+ this._resetAppGroupSource = new Subject();
20
+ this.resetAppGroup$ = this._resetAppGroupSource.asObservable();
21
+ this._hideAppGroupSource = new Subject();
22
+ this.hideAppGroup$ = this._hideAppGroupSource.asObservable();
23
+ this._viewLoadingSource = new BehaviorSubject(false);
24
+ this.viewLoading$ = this._viewLoadingSource.asObservable().pipe(debounceTime(200));
25
+ this.hideTile$ = this._hideTileSource.asObservable();
26
+ this.updateAppTileSetting$ = this._updateAppTileSettingSource.asObservable();
27
+ this.deleteAppGroup$ = this._deleteGroupSource.asObservable();
28
+ this._loadAppGroupSource
29
+ .asObservable()
30
+ .pipe(takeUntil(this._onDestroy$))
31
+ .subscribe((group) => {
32
+ this.tilesService.loadAppTileGroups(group);
33
+ });
34
+ this.hideTile$
35
+ .pipe(tap(() => this.setLoading()), takeUntil(this._onDestroy$), exhaustMap((appTile) => this.tilesService
36
+ .singlePinTileChanged(appTile.AppTile ? appTile.AppTile.Id : appTile.Id)
37
+ .pipe(finalize(() => this.setLoaded()))), finalize(() => this.setLoaded()))
38
+ .subscribe();
39
+ this.updateAppTileSetting$
40
+ .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appTile) => this.tilesService.changeAppTileSetting(appTile).pipe(finalize(() => {
41
+ this.setLoaded();
42
+ }))), finalize(() => {
43
+ this.setLoaded();
44
+ }))
45
+ .subscribe();
46
+ this.deleteAppGroup$
47
+ .pipe(tap(() => this.setLoading()), takeUntil(this._onDestroy$), exhaustMap((appGroup) => this.tilesService.deleteAppGroup(appGroup).pipe(finalize(() => {
48
+ this.setLoaded();
49
+ }))))
50
+ .subscribe();
51
+ this.resetAppGroup$
52
+ .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroup) => this.tilesService.resetAppGroupSetting(appGroup).pipe(finalize(() => {
53
+ this.setLoaded();
54
+ }))), finalize(() => {
55
+ this.setLoaded();
56
+ }))
57
+ .subscribe();
58
+ this.hideAppGroup$
59
+ .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroup) => this.tilesService.toggleAppGroupSettingVisible(appGroup).pipe(finalize(() => {
60
+ this.setLoaded();
61
+ }))), finalize(() => {
62
+ this.setLoaded();
63
+ }))
64
+ .subscribe();
65
+ this.saveAppGroupOrders$
66
+ .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroups) => this.tilesService.saveAppGroupOrders(appGroups).pipe(finalize(() => {
67
+ this.setLoaded();
68
+ }))), finalize(() => {
69
+ this.setLoaded();
70
+ }))
71
+ .subscribe();
72
+ }
73
+ get selectedAppGroupId() {
74
+ return localStorage.getItem('selectedTab') ?? '';
75
+ }
76
+ set selectedAppGroupId(groupId) {
77
+ localStorage.setItem('selectedTab', groupId);
78
+ }
79
+ setSelectedTab(group) {
80
+ this.selectedAppGroupId = group.Id;
81
+ }
82
+ loadAppGroup(group) {
83
+ this._loadAppGroupSource.next(group);
84
+ }
85
+ ngOnDestroy() {
86
+ this._onDestroy$.next();
87
+ }
88
+ openRenameForm(appTile) {
89
+ const newGroupDialogRef = this.dialogService.open(ChangeAppTileComponent, {
90
+ data: appTile,
91
+ verticalPadding: true,
92
+ responsivePadding: true
93
+ });
94
+ newGroupDialogRef.afterClosed.subscribe((setting) => {
95
+ if (setting) {
96
+ const newAppTile = { ...appTile };
97
+ newAppTile.Title = newAppTile.TileTitle = setting.title;
98
+ newAppTile.Subtitle = setting.subtitle;
99
+ this._updateAppTileSettingSource.next(newAppTile);
100
+ }
101
+ });
102
+ }
103
+ resetAppGroup(appGroup) {
104
+ this._resetAppGroupSource.next(appGroup);
105
+ }
106
+ toggleAppGroupSettingVisible(appGroup) {
107
+ this._hideAppGroupSource.next(appGroup);
108
+ }
109
+ deleteAppGroup(appGroup) {
110
+ this._deleteGroupSource.next(appGroup);
111
+ }
112
+ hideTile(appTile) {
113
+ this._hideTileSource.next(appTile);
114
+ }
115
+ saveAppGroupOrders(appGroups) {
116
+ this._saveAppGroupOrdersSource.next(appGroups);
117
+ }
118
+ setLoaded() {
119
+ this._viewLoadingSource.next(false);
120
+ }
121
+ setLoading() {
122
+ this._viewLoadingSource.next(true);
123
+ }
124
+ }
125
+ TilesViewerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TilesViewerService, deps: [{ token: i1.DialogService }, { token: i2.TilesService }], target: i0.ɵɵFactoryTarget.Injectable });
126
+ TilesViewerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TilesViewerService });
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TilesViewerService, decorators: [{
128
+ type: Injectable
129
+ }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.TilesService }]; } });
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZXMtdmlld2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGVzLXZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU1wRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7OztBQUdyRixNQUFNLE9BQU8sa0JBQWtCO0lBb0IzQixZQUFvQixhQUE0QixFQUFVLFlBQTBCO1FBQWhFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFkakUsZ0JBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU1RCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3JELGdDQUEyQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ2pFLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3hELHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3pELDhCQUF5QixHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO1FBQ2pFLHdCQUFtQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwRSx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztRQUMxRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxRCx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztRQUN6RCxrQkFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4RCx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUc3RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUQsSUFBSSxDQUFDLG1CQUFtQjthQUNuQixZQUFZLEVBQUU7YUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNqQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxDQUFDLFNBQVM7YUFDVCxJQUFJLENBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUMzQixVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNuQixJQUFJLENBQUMsWUFBWTthQUNaLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2FBQ3ZFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FDOUMsRUFDRCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQ25DO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLHFCQUFxQjthQUNyQixJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDM0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUM1QixVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDaEQsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FDTCxDQUNKLEVBQ0QsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxlQUFlO2FBQ2YsSUFBSSxDQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDM0IsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUMzQyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUNMLENBQ0osQ0FDSjthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxjQUFjO2FBQ2QsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQzNCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFDNUIsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ2pELFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQ0wsQ0FDSixFQUNELFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYTthQUNiLElBQUksQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUMzQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQzVCLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN6RCxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUNMLENBQ0osRUFDRCxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLG1CQUFtQjthQUNuQixJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDM0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUM1QixVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDaEQsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FDTCxDQUNKLEVBQ0QsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLGtCQUFrQjtRQUNsQixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFDRCxJQUFJLGtCQUFrQixDQUFDLE9BQWU7UUFDbEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELGNBQWMsQ0FBQyxLQUEwQjtRQUNyQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsWUFBWSxDQUFDLEtBQTBCO1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELFdBQVc7UUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBNEI7UUFDdkMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUN0RSxJQUFJLEVBQUUsT0FBTztZQUNiLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGlCQUFpQixFQUFFLElBQUk7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2hELElBQUksT0FBTyxFQUFFO2dCQUNULE1BQU0sVUFBVSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztnQkFDbEMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3hELFVBQVUsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNyRDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELGFBQWEsQ0FBQyxRQUE2QjtRQUN2QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCw0QkFBNEIsQ0FBQyxRQUE2QjtRQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxjQUFjLENBQUMsUUFBNkI7UUFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsUUFBUSxDQUFDLE9BQTRCO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxTQUFnQztRQUMvQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsVUFBVTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7K0dBcExRLGtCQUFrQjttSEFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZXhoYXVzdE1hcCwgZmluYWxpemUsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNZXRhb2JqZWN0RGF0YU1vZGVsIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBUaWxlc1NlcnZpY2UgfSBmcm9tICcuL3RpbGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGFuZ2VBcHBUaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9jaGFuZ2UtYXBwLXRpbGUvY2hhbmdlLWFwcC10aWxlLmNvbXBvbmVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUaWxlc1ZpZXdlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgdmlld0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgaGlkZVRpbGUkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xyXG4gICAgdXBkYXRlQXBwVGlsZVNldHRpbmckOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xyXG4gICAgZGVsZXRlQXBwR3JvdXAkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xyXG5cclxuICAgIHByb3RlY3RlZCByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfaGlkZVRpbGVTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgcHJpdmF0ZSBfdXBkYXRlQXBwVGlsZVNldHRpbmdTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgcHJpdmF0ZSBfZGVsZXRlR3JvdXBTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgcHJpdmF0ZSBfbG9hZEFwcEdyb3VwU291cmNlID0gbmV3IFN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIHByaXZhdGUgX3NhdmVBcHBHcm91cE9yZGVyc1NvdXJjZSA9IG5ldyBTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWxbXT4oKTtcclxuICAgIHByaXZhdGUgc2F2ZUFwcEdyb3VwT3JkZXJzJCA9IHRoaXMuX3NhdmVBcHBHcm91cE9yZGVyc1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3Jlc2V0QXBwR3JvdXBTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgcHJpdmF0ZSByZXNldEFwcEdyb3VwJCA9IHRoaXMuX3Jlc2V0QXBwR3JvdXBTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwcml2YXRlIF9oaWRlQXBwR3JvdXBTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgcHJpdmF0ZSBoaWRlQXBwR3JvdXAkID0gdGhpcy5faGlkZUFwcEdyb3VwU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfdmlld0xvYWRpbmdTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgdGlsZXNTZXJ2aWNlOiBUaWxlc1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnZpZXdMb2FkaW5nJCA9IHRoaXMuX3ZpZXdMb2FkaW5nU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpO1xyXG4gICAgICAgIHRoaXMuaGlkZVRpbGUkID0gdGhpcy5faGlkZVRpbGVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBcHBUaWxlU2V0dGluZyQgPSB0aGlzLl91cGRhdGVBcHBUaWxlU2V0dGluZ1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZUFwcEdyb3VwJCA9IHRoaXMuX2RlbGV0ZUdyb3VwU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRBcHBHcm91cFNvdXJjZVxyXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChncm91cCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aWxlc1NlcnZpY2UubG9hZEFwcFRpbGVHcm91cHMoZ3JvdXApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmhpZGVUaWxlJFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldExvYWRpbmcoKSksXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICBleGhhdXN0TWFwKChhcHBUaWxlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlsZXNTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zaW5nbGVQaW5UaWxlQ2hhbmdlZChhcHBUaWxlLkFwcFRpbGUgPyBhcHBUaWxlLkFwcFRpbGUuSWQgOiBhcHBUaWxlLklkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLnNldExvYWRlZCgpKSlcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLnNldExvYWRlZCgpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVBcHBUaWxlU2V0dGluZyRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgZXhoYXVzdE1hcCgoYXBwVGlsZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbGVzU2VydmljZS5jaGFuZ2VBcHBUaWxlU2V0dGluZyhhcHBUaWxlKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmRlbGV0ZUFwcEdyb3VwJFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldExvYWRpbmcoKSksXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICBleGhhdXN0TWFwKChhcHBHcm91cCkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbGVzU2VydmljZS5kZWxldGVBcHBHcm91cChhcHBHcm91cCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0QXBwR3JvdXAkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0TG9hZGluZygpKSxcclxuICAgICAgICAgICAgICAgIGV4aGF1c3RNYXAoKGFwcEdyb3VwKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlsZXNTZXJ2aWNlLnJlc2V0QXBwR3JvdXBTZXR0aW5nKGFwcEdyb3VwKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmhpZGVBcHBHcm91cCRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgZXhoYXVzdE1hcCgoYXBwR3JvdXApID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aWxlc1NlcnZpY2UudG9nZ2xlQXBwR3JvdXBTZXR0aW5nVmlzaWJsZShhcHBHcm91cCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zYXZlQXBwR3JvdXBPcmRlcnMkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0TG9hZGluZygpKSxcclxuICAgICAgICAgICAgICAgIGV4aGF1c3RNYXAoKGFwcEdyb3VwcykgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbGVzU2VydmljZS5zYXZlQXBwR3JvdXBPcmRlcnMoYXBwR3JvdXBzKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNlbGVjdGVkQXBwR3JvdXBJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VsZWN0ZWRUYWInKSA/PyAnJztcclxuICAgIH1cclxuICAgIHNldCBzZWxlY3RlZEFwcEdyb3VwSWQoZ3JvdXBJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NlbGVjdGVkVGFiJywgZ3JvdXBJZCk7XHJcbiAgICB9XHJcbiAgICBzZXRTZWxlY3RlZFRhYihncm91cDogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBcHBHcm91cElkID0gZ3JvdXAuSWQ7XHJcbiAgICB9XHJcbiAgICBsb2FkQXBwR3JvdXAoZ3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9sb2FkQXBwR3JvdXBTb3VyY2UubmV4dChncm91cCk7XHJcbiAgICB9XHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuUmVuYW1lRm9ybShhcHBUaWxlOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbmV3R3JvdXBEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDaGFuZ2VBcHBUaWxlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGRhdGE6IGFwcFRpbGUsXHJcbiAgICAgICAgICAgIHZlcnRpY2FsUGFkZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzcG9uc2l2ZVBhZGRpbmc6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbmV3R3JvdXBEaWFsb2dSZWYuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdBcHBUaWxlID0geyAuLi5hcHBUaWxlIH07XHJcbiAgICAgICAgICAgICAgICBuZXdBcHBUaWxlLlRpdGxlID0gbmV3QXBwVGlsZS5UaWxlVGl0bGUgPSBzZXR0aW5nLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgbmV3QXBwVGlsZS5TdWJ0aXRsZSA9IHNldHRpbmcuc3VidGl0bGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVBcHBUaWxlU2V0dGluZ1NvdXJjZS5uZXh0KG5ld0FwcFRpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXNldEFwcEdyb3VwKGFwcEdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRBcHBHcm91cFNvdXJjZS5uZXh0KGFwcEdyb3VwKTtcclxuICAgIH1cclxuICAgIHRvZ2dsZUFwcEdyb3VwU2V0dGluZ1Zpc2libGUoYXBwR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oaWRlQXBwR3JvdXBTb3VyY2UubmV4dChhcHBHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQXBwR3JvdXAoYXBwR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kZWxldGVHcm91cFNvdXJjZS5uZXh0KGFwcEdyb3VwKTtcclxuICAgIH1cclxuICAgIGhpZGVUaWxlKGFwcFRpbGU6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oaWRlVGlsZVNvdXJjZS5uZXh0KGFwcFRpbGUpO1xyXG4gICAgfVxyXG4gICAgc2F2ZUFwcEdyb3VwT3JkZXJzKGFwcEdyb3VwczogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2F2ZUFwcEdyb3VwT3JkZXJzU291cmNlLm5leHQoYXBwR3JvdXBzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRMb2FkZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdmlld0xvYWRpbmdTb3VyY2UubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBzZXRMb2FkaW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdMb2FkaW5nU291cmNlLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbn1cclxuIl19