@myclub_se/data-access 3.7.10 → 3.7.11

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 (180) hide show
  1. package/esm2022/lib/api-models/api-invoice/api-payment-attempt-create.mjs +1 -8
  2. package/esm2022/lib/authentication/authentication.interceptor.mjs +6 -8
  3. package/esm2022/lib/authentication/authentication.service.mjs +8 -11
  4. package/esm2022/lib/authentication/guards/authenticated.guard.mjs +4 -6
  5. package/esm2022/lib/authentication/guards/handle-grant-token.guard.mjs +4 -7
  6. package/esm2022/lib/data-access.module.mjs +6 -6
  7. package/esm2022/lib/maintenance/maintenance.interceptor.mjs +4 -5
  8. package/esm2022/lib/models/activity-extra-member.mjs +1 -8
  9. package/esm2022/lib/models/activity-invite.mjs +1 -23
  10. package/esm2022/lib/models/activity-location-group.mjs +1 -7
  11. package/esm2022/lib/models/activity-location-part.mjs +1 -3
  12. package/esm2022/lib/models/activity-location-tag.mjs +1 -6
  13. package/esm2022/lib/models/activity-location.mjs +1 -11
  14. package/esm2022/lib/models/activity-participant.mjs +1 -8
  15. package/esm2022/lib/models/activity-question-connection.mjs +1 -8
  16. package/esm2022/lib/models/activity-question-response.mjs +1 -3
  17. package/esm2022/lib/models/activity-question.mjs +1 -8
  18. package/esm2022/lib/models/activity-rule-relation.mjs +1 -9
  19. package/esm2022/lib/models/activity-rule.mjs +1 -8
  20. package/esm2022/lib/models/activity-settings.mjs +1 -18
  21. package/esm2022/lib/models/activity-type.mjs +1 -9
  22. package/esm2022/lib/models/activity-waiting-list-entry.mjs +1 -16
  23. package/esm2022/lib/models/activity.mjs +1 -82
  24. package/esm2022/lib/models/app-settings.mjs +1 -5
  25. package/esm2022/lib/models/auth/auth-member.mjs +3 -7
  26. package/esm2022/lib/models/auth/auth-section.mjs +1 -6
  27. package/esm2022/lib/models/auth/auth-team-section.mjs +1 -3
  28. package/esm2022/lib/models/auth/auth-team.mjs +1 -6
  29. package/esm2022/lib/models/auth/auth.mjs +1 -17
  30. package/esm2022/lib/models/authentication.mjs +1 -3
  31. package/esm2022/lib/models/bookable-item.mjs +1 -11
  32. package/esm2022/lib/models/bookable-part.mjs +1 -3
  33. package/esm2022/lib/models/bookable-tag.mjs +1 -6
  34. package/esm2022/lib/models/booking-calendar-application-time.mjs +1 -33
  35. package/esm2022/lib/models/booking-calendar-slot-session.mjs +1 -35
  36. package/esm2022/lib/models/booking-calendar-slot-validate-copy-result.mjs +1 -5
  37. package/esm2022/lib/models/booking-calendar-slot.mjs +1 -26
  38. package/esm2022/lib/models/booking-calendar.mjs +1 -33
  39. package/esm2022/lib/models/booking-settings.mjs +1 -8
  40. package/esm2022/lib/models/booking-slot-filter.mjs +1 -12
  41. package/esm2022/lib/models/calendar-event.mjs +1 -16
  42. package/esm2022/lib/models/calendar.mjs +1 -6
  43. package/esm2022/lib/models/card/card-deal.mjs +1 -6
  44. package/esm2022/lib/models/card/card-logo-urls.mjs +1 -9
  45. package/esm2022/lib/models/card/card-logo.mjs +1 -4
  46. package/esm2022/lib/models/card/card-member-ticket.mjs +1 -7
  47. package/esm2022/lib/models/card/card-theme.mjs +1 -6
  48. package/esm2022/lib/models/card/card-ticket-location.mjs +1 -5
  49. package/esm2022/lib/models/card/card-ticket.mjs +1 -17
  50. package/esm2022/lib/models/card/card.mjs +1 -9
  51. package/esm2022/lib/models/card/home-team.mjs +1 -4
  52. package/esm2022/lib/models/card/member-card.mjs +1 -11
  53. package/esm2022/lib/models/card/search-member-card.mjs +1 -5
  54. package/esm2022/lib/models/card/selected-field.mjs +1 -3
  55. package/esm2022/lib/models/club-image.mjs +1 -14
  56. package/esm2022/lib/models/club-section.mjs +1 -3
  57. package/esm2022/lib/models/club.mjs +1 -3
  58. package/esm2022/lib/models/collection.mjs +1 -5
  59. package/esm2022/lib/models/contact.mjs +1 -19
  60. package/esm2022/lib/models/databank-category.mjs +1 -7
  61. package/esm2022/lib/models/databank-item.mjs +1 -7
  62. package/esm2022/lib/models/directory.mjs +1 -10
  63. package/esm2022/lib/models/email.mjs +1 -4
  64. package/esm2022/lib/models/event.mjs +1 -28
  65. package/esm2022/lib/models/external-link.mjs +1 -3
  66. package/esm2022/lib/models/feature-flags.mjs +1 -14
  67. package/esm2022/lib/models/file-object.mjs +1 -10
  68. package/esm2022/lib/models/general-image.mjs +1 -4
  69. package/esm2022/lib/models/group-role.mjs +1 -7
  70. package/esm2022/lib/models/guest.mjs +1 -5
  71. package/esm2022/lib/models/image-urls.mjs +1 -6
  72. package/esm2022/lib/models/invoice/member-fee.mjs +1 -6
  73. package/esm2022/lib/models/invoice/member-invoice-row.mjs +1 -14
  74. package/esm2022/lib/models/invoice/member-invoice.mjs +1 -24
  75. package/esm2022/lib/models/invoice/payment-attempt.mjs +1 -10
  76. package/esm2022/lib/models/invoice/payment-order-row.mjs +1 -3
  77. package/esm2022/lib/models/invoice/payment-order.mjs +1 -18
  78. package/esm2022/lib/models/invoice/payment-types/credit-card.mjs +1 -12
  79. package/esm2022/lib/models/invoice/payment-types/giro.mjs +1 -7
  80. package/esm2022/lib/models/invoice/payment-types/swish.mjs +1 -14
  81. package/esm2022/lib/models/invoice/payment-types/zimpler.mjs +1 -8
  82. package/esm2022/lib/models/invoice/search-member-invoice.mjs +1 -10
  83. package/esm2022/lib/models/invoice/swish-qr-code.mjs +1 -2
  84. package/esm2022/lib/models/invoice/unpaid-member-invoice.mjs +1 -5
  85. package/esm2022/lib/models/leader-activity.mjs +1 -12
  86. package/esm2022/lib/models/member/member-attribute.mjs +1 -12
  87. package/esm2022/lib/models/member/member-contact.mjs +1 -6
  88. package/esm2022/lib/models/member/member-function.mjs +1 -6
  89. package/esm2022/lib/models/member/member-validation-settings.mjs +1 -9
  90. package/esm2022/lib/models/member/member.mjs +1 -27
  91. package/esm2022/lib/models/member/other-member-field.mjs +1 -4
  92. package/esm2022/lib/models/member/other-member.mjs +1 -9
  93. package/esm2022/lib/models/member/search-member.mjs +1 -17
  94. package/esm2022/lib/models/member-activity-invite.mjs +1 -12
  95. package/esm2022/lib/models/member-public-form-field-option.mjs +1 -5
  96. package/esm2022/lib/models/member-public-form-field.mjs +1 -12
  97. package/esm2022/lib/models/member-public-form.mjs +1 -26
  98. package/esm2022/lib/models/member-team-through.mjs +1 -10
  99. package/esm2022/lib/models/member-team.mjs +1 -10
  100. package/esm2022/lib/models/member-type.mjs +1 -4
  101. package/esm2022/lib/models/mypages-menu-item.mjs +1 -4
  102. package/esm2022/lib/models/news.mjs +1 -20
  103. package/esm2022/lib/models/open-activity.mjs +3 -79
  104. package/esm2022/lib/models/optional-fee.mjs +2 -7
  105. package/esm2022/lib/models/overbooked-bookable-item.mjs +1 -6
  106. package/esm2022/lib/models/overbooked-location.mjs +1 -6
  107. package/esm2022/lib/models/partner.mjs +1 -5
  108. package/esm2022/lib/models/public-authentication.mjs +1 -3
  109. package/esm2022/lib/models/registration-qr-code.mjs +1 -8
  110. package/esm2022/lib/models/retrieve-2fa.mjs +1 -3
  111. package/esm2022/lib/models/saved-search.mjs +1 -3
  112. package/esm2022/lib/models/search-attribute.mjs +1 -5
  113. package/esm2022/lib/models/search-club.mjs +1 -10
  114. package/esm2022/lib/models/search-team.mjs +1 -9
  115. package/esm2022/lib/models/section.mjs +1 -3
  116. package/esm2022/lib/models/swish-incident.mjs +1 -11
  117. package/esm2022/lib/models/token.mjs +1 -4
  118. package/esm2022/lib/models/user-notification.mjs +1 -9
  119. package/esm2022/lib/models/user.mjs +1 -13
  120. package/esm2022/lib/services/activity.service.mjs +4 -7
  121. package/esm2022/lib/services/api.service.mjs +4 -6
  122. package/esm2022/lib/services/auth.service.mjs +4 -5
  123. package/esm2022/lib/services/bookable.service.mjs +4 -5
  124. package/esm2022/lib/services/booking-calendar.service.mjs +22 -6
  125. package/esm2022/lib/services/club.service.mjs +4 -5
  126. package/esm2022/lib/services/constant.service.mjs +4 -5
  127. package/esm2022/lib/services/databank.service.mjs +4 -5
  128. package/esm2022/lib/services/email.service.mjs +4 -5
  129. package/esm2022/lib/services/external-link.service.mjs +4 -5
  130. package/esm2022/lib/services/feature-flags.service.mjs +4 -5
  131. package/esm2022/lib/services/file.service.mjs +4 -5
  132. package/esm2022/lib/services/invoice/invoice.service.mjs +4 -5
  133. package/esm2022/lib/services/invoice/payment-attempt.service.mjs +4 -5
  134. package/esm2022/lib/services/invoice/payment-order.service.mjs +4 -5
  135. package/esm2022/lib/services/leader-notification.service.mjs +4 -5
  136. package/esm2022/lib/services/maintenance-mode.service.mjs +8 -7
  137. package/esm2022/lib/services/member-card.service.mjs +4 -5
  138. package/esm2022/lib/services/member-fee.service.mjs +4 -5
  139. package/esm2022/lib/services/member-public-form.service.mjs +4 -5
  140. package/esm2022/lib/services/member.service.mjs +4 -5
  141. package/esm2022/lib/services/news.service.mjs +4 -5
  142. package/esm2022/lib/services/registration-qr-code.service.mjs +4 -5
  143. package/esm2022/lib/services/saved-search.service.mjs +4 -5
  144. package/esm2022/lib/services/section.service.mjs +4 -5
  145. package/esm2022/lib/services/storage.service.mjs +5 -6
  146. package/esm2022/lib/services/swish-incident.service.mjs +4 -5
  147. package/esm2022/lib/services/team.service.mjs +4 -5
  148. package/esm2022/lib/services/token.service.mjs +4 -5
  149. package/esm2022/lib/services/user-notification.service.mjs +4 -5
  150. package/esm2022/lib/services/user.service.mjs +4 -5
  151. package/esm2022/lib/store/actions/booking.actions.mjs +7 -1
  152. package/esm2022/lib/store/effects/activity.effects.mjs +358 -355
  153. package/esm2022/lib/store/effects/auth.effects.mjs +121 -119
  154. package/esm2022/lib/store/effects/booking.effects.mjs +139 -134
  155. package/esm2022/lib/store/effects/calendar.effects.mjs +61 -59
  156. package/esm2022/lib/store/effects/club-info.effects.mjs +17 -15
  157. package/esm2022/lib/store/effects/constant.effects.mjs +78 -76
  158. package/esm2022/lib/store/effects/databank.effects.mjs +23 -21
  159. package/esm2022/lib/store/effects/email.effects.mjs +16 -14
  160. package/esm2022/lib/store/effects/external-link.effects.mjs +11 -9
  161. package/esm2022/lib/store/effects/file.effects.mjs +92 -90
  162. package/esm2022/lib/store/effects/invoice.effects.mjs +176 -174
  163. package/esm2022/lib/store/effects/member-card.effects.mjs +73 -71
  164. package/esm2022/lib/store/effects/member-fee.effects.mjs +9 -7
  165. package/esm2022/lib/store/effects/member.effects.mjs +41 -39
  166. package/esm2022/lib/store/effects/mixins/extra-members-mixin.mjs +4 -2
  167. package/esm2022/lib/store/effects/news.effects.mjs +47 -45
  168. package/esm2022/lib/store/effects/public-form.effects.mjs +24 -22
  169. package/esm2022/lib/store/effects/registration-qr-code.effects.mjs +14 -12
  170. package/esm2022/lib/store/effects/saved-search.effects.mjs +9 -7
  171. package/esm2022/lib/store/effects/swish-incidents.effects.mjs +11 -9
  172. package/esm2022/lib/store/effects/team.effects.mjs +82 -79
  173. package/esm2022/lib/store/effects/token.effects.mjs +93 -91
  174. package/esm2022/lib/store/effects/user.effects.mjs +35 -35
  175. package/fesm2022/myclub_se-data-access.mjs +1771 -2857
  176. package/fesm2022/myclub_se-data-access.mjs.map +1 -1
  177. package/lib/services/booking-calendar.service.d.ts +3 -0
  178. package/lib/store/actions/booking.actions.d.ts +24 -0
  179. package/lib/store/effects/booking.effects.d.ts +5 -0
  180. package/package.json +1 -1
@@ -7,92 +7,94 @@ import { catchError, map } from 'rxjs/operators';
7
7
  import { HttpErrorResponse } from '@angular/common/http';
8
8
  import * as i0 from "@angular/core";
9
9
  export class FileEffects {
10
- actions$ = inject(Actions);
11
- fileService = inject(FileService);
12
- createTeamDirectory$ = createEffect(() => this.actions$
13
- .pipe(ofType(createTeamDirectoryAction), exhaustMap(({ payload }) => this.fileService.createTeamDirectory(payload.teamId, { name: payload.directory.name })
14
- .pipe(map((directory) => createTeamDirectorySuccessAction({
15
- payload: {
16
- teamId: payload.teamId,
17
- directory
18
- }
19
- })), catchError((error) => of(createTeamDirectoryFailureAction({ payload: error })))))));
20
- createTeamFile$ = createEffect(() => this.actions$
21
- .pipe(ofType(createTeamFileAction), exhaustMap(({ payload }) => this.fileService.createTeamFile(payload.teamId, payload.directoryId, payload.file)
22
- .pipe(map((file) => createTeamFileSuccessAction({
23
- payload: {
24
- teamId: payload.teamId,
25
- directoryId: payload.directoryId,
26
- file
27
- }
28
- })), catchError((error) => of(createTeamFileFailureAction({ payload: error })))))));
29
- deleteTeamDirectory$ = createEffect(() => this.actions$
30
- .pipe(ofType(deleteTeamDirectoryAction), exhaustMap(({ payload }) => this.fileService.deleteTeamDirectory(payload.teamId, payload.directoryId)
31
- .pipe(map((success) => {
32
- if (success) {
33
- return deleteTeamDirectorySuccessAction({ payload: { ...payload } });
34
- }
35
- else {
36
- return deleteTeamDirectoryFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
37
- }
38
- }), catchError((error) => of(deleteTeamDirectoryFailureAction({ payload: error })))))));
39
- deleteTeamFile$ = createEffect(() => this.actions$
40
- .pipe(ofType(deleteTeamFileAction), exhaustMap(({ payload }) => this.fileService.deleteTeamFile(payload.teamId, payload.directoryId, payload.fileId)
41
- .pipe(map((success) => {
42
- if (success) {
43
- return deleteTeamFileSuccessAction({ payload: { ...payload } });
44
- }
45
- else {
46
- return deleteTeamFileFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
47
- }
48
- }), catchError((error) => of(deleteTeamFileFailureAction({ payload: error })))))));
49
- retrieveTeamDirectories$ = createEffect(() => this.actions$
50
- .pipe(ofType(retrieveTeamDirectoriesAction), exhaustMap(({ payload }) => this.fileService.getTeamDirectories(payload)
51
- .pipe(map((directories) => {
52
- const files = new Map();
53
- directories.toArray().forEach((directory) => {
54
- this.addDirectory(directory, files, payload);
55
- });
56
- let locations = [...this.processLocations(files, payload)];
57
- locations.sort((a) => (a.teamId === payload ? -1 : 1));
58
- return retrieveTeamDirectoriesSuccessAction({ payload: { locations, files } });
59
- }), catchError((error) => of(retrieveTeamDirectoriesFailureAction({ payload: error })))))));
60
- retrieveMemberDirectories$ = createEffect(() => this.actions$
61
- .pipe(ofType(retrieveMemberDirectoriesAction), mergeMap(({ payload }) => {
62
- if (payload.length) {
63
- return forkJoin(payload.map((id) => this.fileService.getMemberDirectories(id)
64
- .pipe(map((directories) => ({ id, directories: directories.toArray() })), catchError((error) => of({ id, error }))))).pipe(map(results => {
65
- const files = new Map();
66
- // Process and add directories to the files map
67
- results.forEach(result => {
68
- if ('directories' in result) {
69
- result.directories.forEach((directory) => {
70
- this.addDirectory(directory, files);
71
- });
72
- }
73
- else if ('error' in result) {
74
- throw (result.error);
75
- }
76
- });
77
- const locations = this.processLocations(files);
78
- // Dispatch success action with the processed result
79
- return retrieveMemberDirectoriesSuccessAction({
80
- payload: {
81
- locations,
82
- files
83
- }
84
- });
85
- }), catchError((error) => of(retrieveMemberDirectoriesFailureAction({ payload: error }))));
86
- }
87
- else {
88
- return [retrieveMemberDirectoriesSuccessAction({
89
- payload: {
90
- locations: [],
91
- files: new Map()
92
- }
93
- })];
94
- }
95
- })));
10
+ constructor() {
11
+ this.actions$ = inject(Actions);
12
+ this.fileService = inject(FileService);
13
+ this.createTeamDirectory$ = createEffect(() => this.actions$
14
+ .pipe(ofType(createTeamDirectoryAction), exhaustMap(({ payload }) => this.fileService.createTeamDirectory(payload.teamId, { name: payload.directory.name })
15
+ .pipe(map((directory) => createTeamDirectorySuccessAction({
16
+ payload: {
17
+ teamId: payload.teamId,
18
+ directory
19
+ }
20
+ })), catchError((error) => of(createTeamDirectoryFailureAction({ payload: error })))))));
21
+ this.createTeamFile$ = createEffect(() => this.actions$
22
+ .pipe(ofType(createTeamFileAction), exhaustMap(({ payload }) => this.fileService.createTeamFile(payload.teamId, payload.directoryId, payload.file)
23
+ .pipe(map((file) => createTeamFileSuccessAction({
24
+ payload: {
25
+ teamId: payload.teamId,
26
+ directoryId: payload.directoryId,
27
+ file
28
+ }
29
+ })), catchError((error) => of(createTeamFileFailureAction({ payload: error })))))));
30
+ this.deleteTeamDirectory$ = createEffect(() => this.actions$
31
+ .pipe(ofType(deleteTeamDirectoryAction), exhaustMap(({ payload }) => this.fileService.deleteTeamDirectory(payload.teamId, payload.directoryId)
32
+ .pipe(map((success) => {
33
+ if (success) {
34
+ return deleteTeamDirectorySuccessAction({ payload: { ...payload } });
35
+ }
36
+ else {
37
+ return deleteTeamDirectoryFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
38
+ }
39
+ }), catchError((error) => of(deleteTeamDirectoryFailureAction({ payload: error })))))));
40
+ this.deleteTeamFile$ = createEffect(() => this.actions$
41
+ .pipe(ofType(deleteTeamFileAction), exhaustMap(({ payload }) => this.fileService.deleteTeamFile(payload.teamId, payload.directoryId, payload.fileId)
42
+ .pipe(map((success) => {
43
+ if (success) {
44
+ return deleteTeamFileSuccessAction({ payload: { ...payload } });
45
+ }
46
+ else {
47
+ return deleteTeamFileFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
48
+ }
49
+ }), catchError((error) => of(deleteTeamFileFailureAction({ payload: error })))))));
50
+ this.retrieveTeamDirectories$ = createEffect(() => this.actions$
51
+ .pipe(ofType(retrieveTeamDirectoriesAction), exhaustMap(({ payload }) => this.fileService.getTeamDirectories(payload)
52
+ .pipe(map((directories) => {
53
+ const files = new Map();
54
+ directories.toArray().forEach((directory) => {
55
+ this.addDirectory(directory, files, payload);
56
+ });
57
+ let locations = [...this.processLocations(files, payload)];
58
+ locations.sort((a) => (a.teamId === payload ? -1 : 1));
59
+ return retrieveTeamDirectoriesSuccessAction({ payload: { locations, files } });
60
+ }), catchError((error) => of(retrieveTeamDirectoriesFailureAction({ payload: error })))))));
61
+ this.retrieveMemberDirectories$ = createEffect(() => this.actions$
62
+ .pipe(ofType(retrieveMemberDirectoriesAction), mergeMap(({ payload }) => {
63
+ if (payload.length) {
64
+ return forkJoin(payload.map((id) => this.fileService.getMemberDirectories(id)
65
+ .pipe(map((directories) => ({ id, directories: directories.toArray() })), catchError((error) => of({ id, error }))))).pipe(map(results => {
66
+ const files = new Map();
67
+ // Process and add directories to the files map
68
+ results.forEach(result => {
69
+ if ('directories' in result) {
70
+ result.directories.forEach((directory) => {
71
+ this.addDirectory(directory, files);
72
+ });
73
+ }
74
+ else if ('error' in result) {
75
+ throw (result.error);
76
+ }
77
+ });
78
+ const locations = this.processLocations(files);
79
+ // Dispatch success action with the processed result
80
+ return retrieveMemberDirectoriesSuccessAction({
81
+ payload: {
82
+ locations,
83
+ files
84
+ }
85
+ });
86
+ }), catchError((error) => of(retrieveMemberDirectoriesFailureAction({ payload: error }))));
87
+ }
88
+ else {
89
+ return [retrieveMemberDirectoriesSuccessAction({
90
+ payload: {
91
+ locations: [],
92
+ files: new Map()
93
+ }
94
+ })];
95
+ }
96
+ })));
97
+ }
96
98
  addDirectory(directory, files, teamId) {
97
99
  const locationId = directory.belongsToTeam() ? 't' + directory.team_id : directory.belongsToSection()
98
100
  ? 's' + directory.section_id : 'c' + directory.club_id;
@@ -140,10 +142,10 @@ export class FileEffects {
140
142
  }
141
143
  return locations;
142
144
  }
143
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FileEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
144
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FileEffects });
145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
146
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileEffects }); }
145
147
  }
146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FileEffects, decorators: [{
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileEffects, decorators: [{
147
149
  type: Injectable
148
150
  }] });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zdG9yZS9lZmZlY3RzL2ZpbGUuZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxFQUNoQyxvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQix5QkFBeUIsRUFDekIsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxFQUNoQyxvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFDL0Isc0NBQXNDLEVBQ3RDLHNDQUFzQyxFQUN0Qyw2QkFBNkIsRUFDN0Isb0NBQW9DLEVBQ3BDLG9DQUFvQyxFQUNyQyxNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBSXpELE1BQU0sT0FBTyxXQUFXO0lBQ2QsUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FB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WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFvQixFQUFFLENBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7dUdBaE5VLFdBQVc7MkdBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9ucywgY3JlYXRlRWZmZWN0LCBvZlR5cGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IEZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlVGVhbURpcmVjdG9yeUFjdGlvbixcbiAgY3JlYXRlVGVhbURpcmVjdG9yeUZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVRlYW1EaXJlY3RvcnlTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVUZWFtRmlsZUFjdGlvbixcbiAgY3JlYXRlVGVhbUZpbGVGYWlsdXJlQWN0aW9uLFxuICBjcmVhdGVUZWFtRmlsZVN1Y2Nlc3NBY3Rpb24sXG4gIGRlbGV0ZVRlYW1EaXJlY3RvcnlBY3Rpb24sXG4gIGRlbGV0ZVRlYW1EaXJlY3RvcnlGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVUZWFtRGlyZWN0b3J5U3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlVGVhbUZpbGVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1GaWxlRmFpbHVyZUFjdGlvbixcbiAgZGVsZXRlVGVhbUZpbGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckRpcmVjdG9yaWVzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckRpcmVjdG9yaWVzRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJEaXJlY3Rvcmllc1N1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlVGVhbURpcmVjdG9yaWVzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1EaXJlY3Rvcmllc0ZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlVGVhbURpcmVjdG9yaWVzU3VjY2Vzc0FjdGlvblxufSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCB7IGV4aGF1c3RNYXAsIGZvcmtKb2luLCBtZXJnZU1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbGxlY3Rpb24sIERpcmVjdG9yeSwgRmlsZU9iamVjdCB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBMb2NhdGlvbkludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZpbGVFZmZlY3RzIHtcbiAgcHJpdmF0ZSBhY3Rpb25zJCA9IGluamVjdChBY3Rpb25zKTtcbiAgcHJpdmF0ZSBmaWxlU2VydmljZSA9IGluamVjdChGaWxlU2VydmljZSk7XG5cbiAgY3JlYXRlVGVhbURpcmVjdG9yeSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVRlYW1EaXJlY3RvcnlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgZGlyZWN0b3J5OiBQYXJ0aWFsPERpcmVjdG9yeT4gfVxuICAgICAgICB9KSA9PiB0aGlzLmZpbGVTZXJ2aWNlLmNyZWF0ZVRlYW1EaXJlY3RvcnkocGF5bG9hZC50ZWFtSWQsIHtuYW1lOiBwYXlsb2FkLmRpcmVjdG9yeS5uYW1lfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZGlyZWN0b3J5OiBEaXJlY3RvcnkpID0+IGNyZWF0ZVRlYW1EaXJlY3RvcnlTdWNjZXNzQWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgIHRlYW1JZDogcGF5bG9hZC50ZWFtSWQsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlVGVhbURpcmVjdG9yeUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlVGVhbUZpbGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVUZWFtRmlsZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBkaXJlY3RvcnlJZDogc3RyaW5nLCBmaWxlOiBQYXJ0aWFsPEZpbGVPYmplY3Q+IH1cbiAgICAgICAgfSkgPT4gdGhpcy5maWxlU2VydmljZS5jcmVhdGVUZWFtRmlsZShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5kaXJlY3RvcnlJZCwgcGF5bG9hZC5maWxlKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChmaWxlOiBGaWxlT2JqZWN0KSA9PiBjcmVhdGVUZWFtRmlsZVN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgdGVhbUlkOiBwYXlsb2FkLnRlYW1JZCxcbiAgICAgICAgICAgICAgICBkaXJlY3RvcnlJZDogcGF5bG9hZC5kaXJlY3RvcnlJZCxcbiAgICAgICAgICAgICAgICBmaWxlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlVGVhbUZpbGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGRlbGV0ZVRlYW1EaXJlY3RvcnkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShkZWxldGVUZWFtRGlyZWN0b3J5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGRpcmVjdG9yeUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmZpbGVTZXJ2aWNlLmRlbGV0ZVRlYW1EaXJlY3RvcnkocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuZGlyZWN0b3J5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbURpcmVjdG9yeVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHsuLi5wYXlsb2FkfX0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtRGlyZWN0b3J5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWxldGVUZWFtRGlyZWN0b3J5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWxldGVUZWFtRmlsZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGRlbGV0ZVRlYW1GaWxlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGRpcmVjdG9yeUlkOiBzdHJpbmcsIGZpbGVJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5maWxlU2VydmljZS5kZWxldGVUZWFtRmlsZShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5kaXJlY3RvcnlJZCwgcGF5bG9hZC5maWxlSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbUZpbGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7Li4ucGF5bG9hZH19KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbUZpbGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGRlbGV0ZVRlYW1GaWxlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVRlYW1EaXJlY3RvcmllcyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlVGVhbURpcmVjdG9yaWVzQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfTogeyBwYXlsb2FkOiBzdHJpbmcgfSkgPT4gdGhpcy5maWxlU2VydmljZS5nZXRUZWFtRGlyZWN0b3JpZXMocGF5bG9hZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChkaXJlY3RvcmllczogQ29sbGVjdGlvbjxEaXJlY3Rvcnk+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBMb2NhdGlvbkludGVyZmFjZT4oKTtcblxuICAgICAgICAgICAgZGlyZWN0b3JpZXMudG9BcnJheSgpLmZvckVhY2goKGRpcmVjdG9yeTogRGlyZWN0b3J5KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkRGlyZWN0b3J5KGRpcmVjdG9yeSwgZmlsZXMsIHBheWxvYWQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxldCBsb2NhdGlvbnMgPSBbLi4udGhpcy5wcm9jZXNzTG9jYXRpb25zKGZpbGVzLCBwYXlsb2FkKV07XG4gICAgICAgICAgICBsb2NhdGlvbnMuc29ydCgoYTogTG9jYXRpb25JbnRlcmZhY2UpID0+IChhLnRlYW1JZCA9PT0gcGF5bG9hZCA/IC0xIDogMSkpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmV0cmlldmVUZWFtRGlyZWN0b3JpZXNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7bG9jYXRpb25zLCBmaWxlc319KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlVGVhbURpcmVjdG9yaWVzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVNZW1iZXJEaXJlY3RvcmllcyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVyRGlyZWN0b3JpZXNBY3Rpb24pLFxuICAgICAgbWVyZ2VNYXAoKHtwYXlsb2FkfTogeyBwYXlsb2FkOiBBcnJheTxzdHJpbmc+IH0pID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHBheWxvYWQubWFwKChpZDogc3RyaW5nKSA9PlxuICAgICAgICAgICAgdGhpcy5maWxlU2VydmljZS5nZXRNZW1iZXJEaXJlY3RvcmllcyhpZClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChkaXJlY3RvcmllczogQ29sbGVjdGlvbjxEaXJlY3Rvcnk+KSA9PiAoe2lkLCBkaXJlY3RvcmllczogZGlyZWN0b3JpZXMudG9BcnJheSgpfSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2Yoe2lkLCBlcnJvcn0pKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICkpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gbmV3IE1hcDxzdHJpbmcsIExvY2F0aW9uSW50ZXJmYWNlPigpO1xuXG4gICAgICAgICAgICAgIC8vIFByb2Nlc3MgYW5kIGFkZCBkaXJlY3RvcmllcyB0byB0aGUgZmlsZXMgbWFwXG4gICAgICAgICAgICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgnZGlyZWN0b3JpZXMnIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0LmRpcmVjdG9yaWVzLmZvckVhY2goKGRpcmVjdG9yeTogRGlyZWN0b3J5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRGlyZWN0b3J5KGRpcmVjdG9yeSwgZmlsZXMpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnZXJyb3InIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgKHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbnMgPSB0aGlzLnByb2Nlc3NMb2NhdGlvbnMoZmlsZXMpO1xuXG4gICAgICAgICAgICAgIC8vIERpc3BhdGNoIHN1Y2Nlc3MgYWN0aW9uIHdpdGggdGhlIHByb2Nlc3NlZCByZXN1bHRcbiAgICAgICAgICAgICAgcmV0dXJuIHJldHJpZXZlTWVtYmVyRGlyZWN0b3JpZXNTdWNjZXNzQWN0aW9uKHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgICBsb2NhdGlvbnMsXG4gICAgICAgICAgICAgICAgICBmaWxlc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVNZW1iZXJEaXJlY3Rvcmllc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW3JldHJpZXZlTWVtYmVyRGlyZWN0b3JpZXNTdWNjZXNzQWN0aW9uKHtcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgbG9jYXRpb25zOiBbXSxcbiAgICAgICAgICAgICAgZmlsZXM6IG5ldyBNYXA8c3RyaW5nLCBMb2NhdGlvbkludGVyZmFjZT4oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBhZGREaXJlY3RvcnkoZGlyZWN0b3J5OiBEaXJlY3RvcnksIGZpbGVzOiBNYXA8c3RyaW5nLCBMb2NhdGlvbkludGVyZmFjZT4sIHRlYW1JZD86IHN0cmluZykge1xuICAgIGNvbnN0IGxvY2F0aW9uSWQgPSBkaXJlY3RvcnkuYmVsb25nc1RvVGVhbSgpID8gJ3QnICsgZGlyZWN0b3J5LnRlYW1faWQgOiBkaXJlY3RvcnkuYmVsb25nc1RvU2VjdGlvbigpXG4gICAgICA/ICdzJyArIGRpcmVjdG9yeS5zZWN0aW9uX2lkIDogJ2MnICsgZGlyZWN0b3J5LmNsdWJfaWQ7XG4gICAgbGV0IGxvY2F0aW9uID0gZmlsZXMuZ2V0KGxvY2F0aW9uSWQpO1xuXG4gICAgaWYgKHR5cGVvZiBsb2NhdGlvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbGVzLnNldChsb2NhdGlvbklkLCB7XG4gICAgICAgIGlkOiBsb2NhdGlvbklkLFxuICAgICAgICBuYW1lOiBkaXJlY3RvcnkubG9jYXRpb25fbmFtZSxcbiAgICAgICAgZGlyZWN0b3JpZXM6IFtdLFxuICAgICAgICB0ZWFtSWQ6IGRpcmVjdG9yeS50ZWFtX2lkIGFzIHN0cmluZ1xuICAgICAgfSk7XG4gICAgICBsb2NhdGlvbiA9IGZpbGVzLmdldChsb2NhdGlvbklkKTtcbiAgICB9XG5cbiAgICBpZiAobG9jYXRpb24gJiZcbiAgICAgICFsb2NhdGlvbi5kaXJlY3Rvcmllcy5maW5kKCh2YWx1ZTogRGlyZWN0b3J5KSA9PiB2YWx1ZS5pZCA9PT0gZGlyZWN0b3J5LmlkKSAmJlxuICAgICAgKGRpcmVjdG9yeS5maWxlcy5sZW5ndGggIT09IDAgfHwgZGlyZWN0b3J5LnRlYW1faWQgPT09IHRlYW1JZCkpIHtcbiAgICAgIGxvY2F0aW9uLmRpcmVjdG9yaWVzLnB1c2goZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NMb2NhdGlvbnMoZmlsZXM6IE1hcDxzdHJpbmcsIExvY2F0aW9uSW50ZXJmYWNlPiwgdGVhbUlkPzogc3RyaW5nKTogQXJyYXk8TG9jYXRpb25JbnRlcmZhY2U+IHtcbiAgICBsZXQgbG9jYXRpb25zOiBBcnJheTxMb2NhdGlvbkludGVyZmFjZT4gPSBbXTtcblxuICAgIGlmIChmaWxlcy5zaXplICYmIEFycmF5LmZyb20oZmlsZXMudmFsdWVzKCkpLnNvbWUoKGxvY2F0aW9uOiBMb2NhdGlvbkludGVyZmFjZSkgPT4gbG9jYXRpb24uZGlyZWN0b3JpZXMubGVuZ3RoICE9PSAwIHx8IHRlYW1JZCkpIHtcbiAgICAgIGxldCBmaXJzdEl0ZW06IExvY2F0aW9uSW50ZXJmYWNlO1xuICAgICAgaWYgKHR5cGVvZiBmaWxlcy5nZXQoJycpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmaXJzdEl0ZW0gPSBmaWxlcy5nZXQoJycpIGFzIExvY2F0aW9uSW50ZXJmYWNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgW2ZpcnN0SXRlbV0gPSBmaWxlcy52YWx1ZXMoKTtcbiAgICAgIH1cbiAgICAgIGxvY2F0aW9ucyA9IFtmaXJzdEl0ZW1dO1xuXG4gICAgICBjb25zdCBvdGhlckxvY2F0aW9uczogQXJyYXk8TG9jYXRpb25JbnRlcmZhY2U+ID0gW107XG4gICAgICBmaWxlcy5mb3JFYWNoKChsb2NhdGlvbjogTG9jYXRpb25JbnRlcmZhY2UsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICAgIGlmIChrZXkgJiYgIWxvY2F0aW9ucy5maW5kKChzZWFyY2hMb2NhdGlvbikgPT5cbiAgICAgICAgICAgIGxvY2F0aW9uLm5hbWUgPT09IHNlYXJjaExvY2F0aW9uLm5hbWUgJiZcbiAgICAgICAgICAgIGxvY2F0aW9uLmRpcmVjdG9yaWVzLmxlbmd0aCA9PT0gc2VhcmNoTG9jYXRpb24uZGlyZWN0b3JpZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgb3RoZXJMb2NhdGlvbnMucHVzaChsb2NhdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb3RoZXJMb2NhdGlvbnMuc29ydCgoYTogTG9jYXRpb25JbnRlcmZhY2UsIGI6IExvY2F0aW9uSW50ZXJmYWNlKSA9PiAoYS5uYW1lIDwgYi5uYW1lID8gLTEgOiAxKSk7XG4gICAgICBsb2NhdGlvbnMgPSBsb2NhdGlvbnMuY29uY2F0KG90aGVyTG9jYXRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYXRpb25zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvY2F0aW9ucztcbiAgfVxufVxuIl19
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zdG9yZS9lZmZlY3RzL2ZpbGUuZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxFQUNoQyxvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQix5QkFBeUIsRUFDekIsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxFQUNoQyxvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFDL0Isc0NBQXNDLEVBQ3RDLHNDQUFzQyxFQUN0Qyw2QkFBNkIsRUFDN0Isb0NBQW9DLEVBQ3BDLG9DQUFvQyxFQUNyQyxNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBSXpELE1BQU0sT0FBTyxXQUFXO0lBRHhCO1FBRVUsYUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUxQyx5QkFBb0IsR0FBRyxZQUFZLENBQUMsR0FBRyxF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QUFDLENBQUM7b0JBQ2hDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQW9CLEVBQUUsQ0FBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hHLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzsrR0FoTlUsV0FBVzttSEFBWCxXQUFXOzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBjcmVhdGVUZWFtRGlyZWN0b3J5QWN0aW9uLFxuICBjcmVhdGVUZWFtRGlyZWN0b3J5RmFpbHVyZUFjdGlvbixcbiAgY3JlYXRlVGVhbURpcmVjdG9yeVN1Y2Nlc3NBY3Rpb24sXG4gIGNyZWF0ZVRlYW1GaWxlQWN0aW9uLFxuICBjcmVhdGVUZWFtRmlsZUZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVRlYW1GaWxlU3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlVGVhbURpcmVjdG9yeUFjdGlvbixcbiAgZGVsZXRlVGVhbURpcmVjdG9yeUZhaWx1cmVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1EaXJlY3RvcnlTdWNjZXNzQWN0aW9uLFxuICBkZWxldGVUZWFtRmlsZUFjdGlvbixcbiAgZGVsZXRlVGVhbUZpbGVGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVUZWFtRmlsZVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyRGlyZWN0b3JpZXNBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyRGlyZWN0b3JpZXNGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckRpcmVjdG9yaWVzU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtRGlyZWN0b3JpZXNBY3Rpb24sXG4gIHJldHJpZXZlVGVhbURpcmVjdG9yaWVzRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVUZWFtRGlyZWN0b3JpZXNTdWNjZXNzQWN0aW9uXG59IGZyb20gJy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgZXhoYXVzdE1hcCwgZm9ya0pvaW4sIG1lcmdlTWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbiwgRGlyZWN0b3J5LCBGaWxlT2JqZWN0IH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IExvY2F0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmlsZUVmZmVjdHMge1xuICBwcml2YXRlIGFjdGlvbnMkID0gaW5qZWN0KEFjdGlvbnMpO1xuICBwcml2YXRlIGZpbGVTZXJ2aWNlID0gaW5qZWN0KEZpbGVTZXJ2aWNlKTtcblxuICBjcmVhdGVUZWFtRGlyZWN0b3J5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlVGVhbURpcmVjdG9yeUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBkaXJlY3Rvcnk6IFBhcnRpYWw8RGlyZWN0b3J5PiB9XG4gICAgICAgIH0pID0+IHRoaXMuZmlsZVNlcnZpY2UuY3JlYXRlVGVhbURpcmVjdG9yeShwYXlsb2FkLnRlYW1JZCwge25hbWU6IHBheWxvYWQuZGlyZWN0b3J5Lm5hbWV9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChkaXJlY3Rvcnk6IERpcmVjdG9yeSkgPT4gY3JlYXRlVGVhbURpcmVjdG9yeVN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgdGVhbUlkOiBwYXlsb2FkLnRlYW1JZCxcbiAgICAgICAgICAgICAgICBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVUZWFtRGlyZWN0b3J5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVUZWFtRmlsZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVRlYW1GaWxlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGRpcmVjdG9yeUlkOiBzdHJpbmcsIGZpbGU6IFBhcnRpYWw8RmlsZU9iamVjdD4gfVxuICAgICAgICB9KSA9PiB0aGlzLmZpbGVTZXJ2aWNlLmNyZWF0ZVRlYW1GaWxlKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmRpcmVjdG9yeUlkLCBwYXlsb2FkLmZpbGUpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGZpbGU6IEZpbGVPYmplY3QpID0+IGNyZWF0ZVRlYW1GaWxlU3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICB0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLFxuICAgICAgICAgICAgICAgIGRpcmVjdG9yeUlkOiBwYXlsb2FkLmRpcmVjdG9yeUlkLFxuICAgICAgICAgICAgICAgIGZpbGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVUZWFtRmlsZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZGVsZXRlVGVhbURpcmVjdG9yeSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGRlbGV0ZVRlYW1EaXJlY3RvcnlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgZGlyZWN0b3J5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuZmlsZVNlcnZpY2UuZGVsZXRlVGVhbURpcmVjdG9yeShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5kaXJlY3RvcnlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtRGlyZWN0b3J5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogey4uLnBheWxvYWR9fSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVRlYW1EaXJlY3RvcnlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGRlbGV0ZVRlYW1EaXJlY3RvcnlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGRlbGV0ZVRlYW1GaWxlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoZGVsZXRlVGVhbUZpbGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgZGlyZWN0b3J5SWQ6IHN0cmluZywgZmlsZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmZpbGVTZXJ2aWNlLmRlbGV0ZVRlYW1GaWxlKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmRpcmVjdG9yeUlkLCBwYXlsb2FkLmZpbGVJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtRmlsZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHsuLi5wYXlsb2FkfX0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtRmlsZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlVGVhbUZpbGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlVGVhbURpcmVjdG9yaWVzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVUZWFtRGlyZWN0b3JpZXNBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IHN0cmluZyB9KSA9PiB0aGlzLmZpbGVTZXJ2aWNlLmdldFRlYW1EaXJlY3RvcmllcyhwYXlsb2FkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGRpcmVjdG9yaWVzOiBDb2xsZWN0aW9uPERpcmVjdG9yeT4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gbmV3IE1hcDxzdHJpbmcsIExvY2F0aW9uSW50ZXJmYWNlPigpO1xuXG4gICAgICAgICAgICBkaXJlY3Rvcmllcy50b0FycmF5KCkuZm9yRWFjaCgoZGlyZWN0b3J5OiBEaXJlY3RvcnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hZGREaXJlY3RvcnkoZGlyZWN0b3J5LCBmaWxlcywgcGF5bG9hZCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IGxvY2F0aW9ucyA9IFsuLi50aGlzLnByb2Nlc3NMb2NhdGlvbnMoZmlsZXMsIHBheWxvYWQpXTtcbiAgICAgICAgICAgIGxvY2F0aW9ucy5zb3J0KChhOiBMb2NhdGlvbkludGVyZmFjZSkgPT4gKGEudGVhbUlkID09PSBwYXlsb2FkID8gLTEgOiAxKSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXRyaWV2ZVRlYW1EaXJlY3Rvcmllc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHtsb2NhdGlvbnMsIGZpbGVzfX0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVUZWFtRGlyZWN0b3JpZXNGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlckRpcmVjdG9yaWVzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVNZW1iZXJEaXJlY3Rvcmllc0FjdGlvbiksXG4gICAgICBtZXJnZU1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IEFycmF5PHN0cmluZz4gfSkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZC5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZm9ya0pvaW4ocGF5bG9hZC5tYXAoKGlkOiBzdHJpbmcpID0+XG4gICAgICAgICAgICB0aGlzLmZpbGVTZXJ2aWNlLmdldE1lbWJlckRpcmVjdG9yaWVzKGlkKVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGRpcmVjdG9yaWVzOiBDb2xsZWN0aW9uPERpcmVjdG9yeT4pID0+ICh7aWQsIGRpcmVjdG9yaWVzOiBkaXJlY3Rvcmllcy50b0FycmF5KCl9KSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih7aWQsIGVycm9yfSkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKSkucGlwZShcbiAgICAgICAgICAgIG1hcChyZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBuZXcgTWFwPHN0cmluZywgTG9jYXRpb25JbnRlcmZhY2U+KCk7XG5cbiAgICAgICAgICAgICAgLy8gUHJvY2VzcyBhbmQgYWRkIGRpcmVjdG9yaWVzIHRvIHRoZSBmaWxlcyBtYXBcbiAgICAgICAgICAgICAgcmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCdkaXJlY3RvcmllcycgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQuZGlyZWN0b3JpZXMuZm9yRWFjaCgoZGlyZWN0b3J5OiBEaXJlY3RvcnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGREaXJlY3RvcnkoZGlyZWN0b3J5LCBmaWxlcyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdlcnJvcicgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyAocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9ucyA9IHRoaXMucHJvY2Vzc0xvY2F0aW9ucyhmaWxlcyk7XG5cbiAgICAgICAgICAgICAgLy8gRGlzcGF0Y2ggc3VjY2VzcyBhY3Rpb24gd2l0aCB0aGUgcHJvY2Vzc2VkIHJlc3VsdFxuICAgICAgICAgICAgICByZXR1cm4gcmV0cmlldmVNZW1iZXJEaXJlY3Rvcmllc1N1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucyxcbiAgICAgICAgICAgICAgICAgIGZpbGVzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZU1lbWJlckRpcmVjdG9yaWVzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbcmV0cmlldmVNZW1iZXJEaXJlY3Rvcmllc1N1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBsb2NhdGlvbnM6IFtdLFxuICAgICAgICAgICAgICBmaWxlczogbmV3IE1hcDxzdHJpbmcsIExvY2F0aW9uSW50ZXJmYWNlPigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSldO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBwcml2YXRlIGFkZERpcmVjdG9yeShkaXJlY3Rvcnk6IERpcmVjdG9yeSwgZmlsZXM6IE1hcDxzdHJpbmcsIExvY2F0aW9uSW50ZXJmYWNlPiwgdGVhbUlkPzogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9jYXRpb25JZCA9IGRpcmVjdG9yeS5iZWxvbmdzVG9UZWFtKCkgPyAndCcgKyBkaXJlY3RvcnkudGVhbV9pZCA6IGRpcmVjdG9yeS5iZWxvbmdzVG9TZWN0aW9uKClcbiAgICAgID8gJ3MnICsgZGlyZWN0b3J5LnNlY3Rpb25faWQgOiAnYycgKyBkaXJlY3RvcnkuY2x1Yl9pZDtcbiAgICBsZXQgbG9jYXRpb24gPSBmaWxlcy5nZXQobG9jYXRpb25JZCk7XG5cbiAgICBpZiAodHlwZW9mIGxvY2F0aW9uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZmlsZXMuc2V0KGxvY2F0aW9uSWQsIHtcbiAgICAgICAgaWQ6IGxvY2F0aW9uSWQsXG4gICAgICAgIG5hbWU6IGRpcmVjdG9yeS5sb2NhdGlvbl9uYW1lLFxuICAgICAgICBkaXJlY3RvcmllczogW10sXG4gICAgICAgIHRlYW1JZDogZGlyZWN0b3J5LnRlYW1faWQgYXMgc3RyaW5nXG4gICAgICB9KTtcbiAgICAgIGxvY2F0aW9uID0gZmlsZXMuZ2V0KGxvY2F0aW9uSWQpO1xuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbiAmJlxuICAgICAgIWxvY2F0aW9uLmRpcmVjdG9yaWVzLmZpbmQoKHZhbHVlOiBEaXJlY3RvcnkpID0+IHZhbHVlLmlkID09PSBkaXJlY3RvcnkuaWQpICYmXG4gICAgICAoZGlyZWN0b3J5LmZpbGVzLmxlbmd0aCAhPT0gMCB8fCBkaXJlY3RvcnkudGVhbV9pZCA9PT0gdGVhbUlkKSkge1xuICAgICAgbG9jYXRpb24uZGlyZWN0b3JpZXMucHVzaChkaXJlY3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0xvY2F0aW9ucyhmaWxlczogTWFwPHN0cmluZywgTG9jYXRpb25JbnRlcmZhY2U+LCB0ZWFtSWQ/OiBzdHJpbmcpOiBBcnJheTxMb2NhdGlvbkludGVyZmFjZT4ge1xuICAgIGxldCBsb2NhdGlvbnM6IEFycmF5PExvY2F0aW9uSW50ZXJmYWNlPiA9IFtdO1xuXG4gICAgaWYgKGZpbGVzLnNpemUgJiYgQXJyYXkuZnJvbShmaWxlcy52YWx1ZXMoKSkuc29tZSgobG9jYXRpb246IExvY2F0aW9uSW50ZXJmYWNlKSA9PiBsb2NhdGlvbi5kaXJlY3Rvcmllcy5sZW5ndGggIT09IDAgfHwgdGVhbUlkKSkge1xuICAgICAgbGV0IGZpcnN0SXRlbTogTG9jYXRpb25JbnRlcmZhY2U7XG4gICAgICBpZiAodHlwZW9mIGZpbGVzLmdldCgnJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGZpcnN0SXRlbSA9IGZpbGVzLmdldCgnJykgYXMgTG9jYXRpb25JbnRlcmZhY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBbZmlyc3RJdGVtXSA9IGZpbGVzLnZhbHVlcygpO1xuICAgICAgfVxuICAgICAgbG9jYXRpb25zID0gW2ZpcnN0SXRlbV07XG5cbiAgICAgIGNvbnN0IG90aGVyTG9jYXRpb25zOiBBcnJheTxMb2NhdGlvbkludGVyZmFjZT4gPSBbXTtcbiAgICAgIGZpbGVzLmZvckVhY2goKGxvY2F0aW9uOiBMb2NhdGlvbkludGVyZmFjZSwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgICAgaWYgKGtleSAmJiAhbG9jYXRpb25zLmZpbmQoKHNlYXJjaExvY2F0aW9uKSA9PlxuICAgICAgICAgICAgbG9jYXRpb24ubmFtZSA9PT0gc2VhcmNoTG9jYXRpb24ubmFtZSAmJlxuICAgICAgICAgICAgbG9jYXRpb24uZGlyZWN0b3JpZXMubGVuZ3RoID09PSBzZWFyY2hMb2NhdGlvbi5kaXJlY3Rvcmllcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICBvdGhlckxvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvdGhlckxvY2F0aW9ucy5zb3J0KChhOiBMb2NhdGlvbkludGVyZmFjZSwgYjogTG9jYXRpb25JbnRlcmZhY2UpID0+IChhLm5hbWUgPCBiLm5hbWUgPyAtMSA6IDEpKTtcbiAgICAgIGxvY2F0aW9ucyA9IGxvY2F0aW9ucy5jb25jYXQob3RoZXJMb2NhdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhdGlvbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9jYXRpb25zO1xuICB9XG59XG4iXX0=