@myclub_se/data-access 3.1.0 → 3.1.3

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 (30) hide show
  1. package/esm2022/lib/api-models/api-member-team.mjs +1 -1
  2. package/esm2022/lib/api-models/api-search-team.mjs +1 -1
  3. package/esm2022/lib/authentication/authentication.interceptor.mjs +15 -28
  4. package/esm2022/lib/models/member-team.mjs +4 -2
  5. package/esm2022/lib/models/search-team.mjs +4 -2
  6. package/esm2022/lib/services/activity.service.mjs +84 -50
  7. package/esm2022/lib/services/bookable.service.mjs +113 -67
  8. package/esm2022/lib/services/booking-calendar.service.mjs +282 -130
  9. package/esm2022/lib/services/factories/member-team-factory.mjs +2 -2
  10. package/esm2022/lib/services/factories/search-team-factory.mjs +2 -2
  11. package/esm2022/lib/services/feature-flags.service.mjs +16 -8
  12. package/esm2022/lib/services/member.service.mjs +9 -8
  13. package/esm2022/lib/services/team.service.mjs +7 -5
  14. package/esm2022/lib/store/effects/token.effects.mjs +10 -6
  15. package/esm2022/lib/store/reducers/calendar.reducer.mjs +38 -10
  16. package/fesm2022/myclub_se-data-access.mjs +572 -306
  17. package/fesm2022/myclub_se-data-access.mjs.map +1 -1
  18. package/lib/api-models/api-member-team.d.ts +1 -0
  19. package/lib/api-models/api-search-team.d.ts +1 -0
  20. package/lib/authentication/authentication.interceptor.d.ts +3 -3
  21. package/lib/models/member-team.d.ts +2 -1
  22. package/lib/models/search-team.d.ts +2 -1
  23. package/lib/services/activity.service.d.ts +57 -55
  24. package/lib/services/bookable.service.d.ts +10 -5
  25. package/lib/services/booking-calendar.service.d.ts +25 -12
  26. package/lib/services/feature-flags.service.d.ts +2 -1
  27. package/lib/services/member.service.d.ts +1 -1
  28. package/lib/services/team.service.d.ts +1 -1
  29. package/lib/store/effects/token.effects.d.ts +1 -1
  30. package/package.json +1 -1
@@ -10,10 +10,6 @@ const CLUB_BOOKABLE_GROUP_PATH = ':clubId/activities/bookables/groups/:groupId/'
10
10
  const CLUB_BOOKABLE_TAGS_PATH = ':clubId/activities/bookables/tags/';
11
11
  const CLUB_BOOKABLE_TAG_PATH = ':clubId/activities/bookables/tags/:tagId/';
12
12
  const CLUB_BOOKABLE_PARTS_PATH = ':clubId/activities/bookables/:bookableId/parts/';
13
- const TEAM_BOOKABLES_PATH = ':teamId/activities/bookables/';
14
- const TEAM_BOOKABLE_GROUPS_PATH = ':teamId/activities/bookables/groups/';
15
- const TEAM_BOOKABLE_TAGS_PATH = ':teamId/activities/bookables/tags/';
16
- const TEAM_BOOKABLE_PARTS_PATH = ':teamId/activities/bookables/:bookableId/parts/';
17
13
  const SECTION_BOOKABLES_PATH = ':sectionId/activities/bookables/';
18
14
  const SECTION_BOOKABLE_PATH = ':sectionId/activities/bookables/:bookableId/';
19
15
  const SECTION_BOOKABLE_GROUPS_PATH = ':sectionId/activities/bookables/groups/';
@@ -21,25 +17,40 @@ const SECTION_BOOKABLE_GROUP_PATH = ':sectionId/activities/bookables/groups/:gro
21
17
  const SECTION_BOOKABLE_TAGS_PATH = ':sectionId/activities/bookables/tags/';
22
18
  const SECTION_BOOKABLE_TAG_PATH = ':sectionId/activities/bookables/tags/:tagId/';
23
19
  const SECTION_BOOKABLE_PARTS_PATH = ':sectionId/activities/bookables/:bookableId/parts/';
20
+ const TEAM_BOOKABLES_PATH = ':teamId/activities/bookables/';
21
+ const TEAM_BOOKABLE_GROUPS_PATH = ':teamId/activities/bookables/groups/';
22
+ const TEAM_BOOKABLE_TAGS_PATH = ':teamId/activities/bookables/tags/';
23
+ const TEAM_BOOKABLE_PARTS_PATH = ':teamId/activities/bookables/:bookableId/parts/';
24
+ const MEMBER_BOOKABLES_PATH = ':memberId/activities/bookables/';
25
+ const MEMBER_BOOKABLE_GROUPS_PATH = ':memberId/activities/bookables/groups/';
26
+ const MEMBER_BOOKABLE_TAGS_PATH = ':memberId/activities/bookables/tags/';
27
+ const MEMBER_BOOKABLE_PARTS_PATH = ':memberId/activities/bookables/:bookableId/parts/';
24
28
  export class BookableService {
25
29
  apiService;
26
30
  constructor(apiService) {
27
31
  this.apiService = apiService;
28
32
  }
29
33
  // region Bookable Items
30
- getBookableItems(role, clubOrSectionOrTeamId) {
31
- if (role == Role.ClubAdmin) {
32
- return this.getClubBookableItems(clubOrSectionOrTeamId);
33
- }
34
- else if (role == Role.SectionAdmin) {
35
- return this.getSectionBookableItems(clubOrSectionOrTeamId);
34
+ getBookableItems(role, itemId) {
35
+ switch (role) {
36
+ case Role.ClubAdmin:
37
+ return this.getClubBookableItems(itemId);
38
+ case Role.SectionAdmin:
39
+ return this.getSectionBookableItems(itemId);
40
+ case Role.TeamAdmin:
41
+ return this.getTeamBookableItems(itemId);
42
+ default:
43
+ return this.getMemberBookableItems(itemId);
36
44
  }
37
- return this.getTeamBookableItems(clubOrSectionOrTeamId);
38
45
  }
39
46
  getTeamBookableItems(teamId) {
40
47
  return this.apiService
41
48
  .getCollection(bookableItemFactory, Role.TeamAdmin, TEAM_BOOKABLES_PATH, { teamId }, { params: { limit: 'null' } });
42
49
  }
50
+ getMemberBookableItems(memberId) {
51
+ return this.apiService
52
+ .getCollection(bookableItemFactory, Role.MemberAdmin, MEMBER_BOOKABLES_PATH, { memberId }, { params: { limit: 'null' } });
53
+ }
43
54
  getClubBookableItems(clubId) {
44
55
  return this.apiService
45
56
  .getCollection(bookableItemFactory, Role.ClubAdmin, CLUB_BOOKABLES_PATH, { clubId }, { params: { limit: 'null' } });
@@ -49,10 +60,12 @@ export class BookableService {
49
60
  .getCollection(bookableItemFactory, Role.SectionAdmin, SECTION_BOOKABLES_PATH, { sectionId }, { params: { limit: 'null' } });
50
61
  }
51
62
  updateBookableItem(role, clubOrSectionOrTeamId, bookableItem) {
52
- if (role === Role.ClubAdmin) {
53
- return this.updateClubBookableItem(clubOrSectionOrTeamId, bookableItem);
63
+ switch (role) {
64
+ case Role.ClubAdmin:
65
+ return this.updateClubBookableItem(clubOrSectionOrTeamId, bookableItem);
66
+ default:
67
+ return this.updateSectionBookableItem(clubOrSectionOrTeamId, bookableItem);
54
68
  }
55
- return this.updateSectionBookableItem(clubOrSectionOrTeamId, bookableItem);
56
69
  }
57
70
  updateClubBookableItem(clubId, bookableItem) {
58
71
  return this.apiService
@@ -69,10 +82,12 @@ export class BookableService {
69
82
  }, bookableItem);
70
83
  }
71
84
  createBookableItem(role, clubOrSectionOrTeamId, bookableItem) {
72
- if (role === Role.ClubAdmin) {
73
- return this.createClubBookableItem(clubOrSectionOrTeamId, bookableItem);
85
+ switch (role) {
86
+ case Role.ClubAdmin:
87
+ return this.createClubBookableItem(clubOrSectionOrTeamId, bookableItem);
88
+ default:
89
+ return this.createSectionBookableItem(clubOrSectionOrTeamId, bookableItem);
74
90
  }
75
- return this.createSectionBookableItem(clubOrSectionOrTeamId, bookableItem);
76
91
  }
77
92
  createClubBookableItem(clubId, bookableItem) {
78
93
  delete bookableItem.id;
@@ -90,14 +105,17 @@ export class BookableService {
90
105
  }
91
106
  // endregion
92
107
  // region Bookable Groups
93
- getBookableGroups(role, clubOrSectionOrTeamId) {
94
- if (role == Role.ClubAdmin) {
95
- return this.getClubBookableGroups(clubOrSectionOrTeamId);
108
+ getBookableGroups(role, itemId) {
109
+ switch (role) {
110
+ case Role.ClubAdmin:
111
+ return this.getClubBookableGroups(itemId);
112
+ case Role.SectionAdmin:
113
+ return this.getSectionBookableGroups(itemId);
114
+ case Role.TeamAdmin:
115
+ return this.getTeamBookableGroups(itemId);
116
+ default:
117
+ return this.getMemberBookableGroups(itemId);
96
118
  }
97
- else if (role == Role.SectionAdmin) {
98
- return this.getSectionBookableGroups(clubOrSectionOrTeamId);
99
- }
100
- return this.getTeamBookableGroups(clubOrSectionOrTeamId);
101
119
  }
102
120
  getClubBookableGroups(clubId) {
103
121
  return this.apiService
@@ -111,11 +129,17 @@ export class BookableService {
111
129
  return this.apiService
112
130
  .getCollection(bookableGroupFactory, Role.TeamAdmin, TEAM_BOOKABLE_GROUPS_PATH, { teamId }, { params: { limit: 'null' } });
113
131
  }
132
+ getMemberBookableGroups(memberId) {
133
+ return this.apiService
134
+ .getCollection(bookableGroupFactory, Role.MemberAdmin, MEMBER_BOOKABLE_GROUPS_PATH, { memberId }, { params: { limit: 'null' } });
135
+ }
114
136
  updateBookableGroup(role, clubOrSectionOrTeamId, bookableGroup) {
115
- if (role === Role.ClubAdmin) {
116
- return this.updateClubBookableGroup(clubOrSectionOrTeamId, bookableGroup);
137
+ switch (role) {
138
+ case Role.ClubAdmin:
139
+ return this.updateClubBookableGroup(clubOrSectionOrTeamId, bookableGroup);
140
+ default:
141
+ return this.updateSectionBookableGroup(clubOrSectionOrTeamId, bookableGroup);
117
142
  }
118
- return this.updateSectionBookableGroup(clubOrSectionOrTeamId, bookableGroup);
119
143
  }
120
144
  updateClubBookableGroup(clubId, bookableGroup) {
121
145
  return this.apiService
@@ -132,10 +156,12 @@ export class BookableService {
132
156
  }, bookableGroup);
133
157
  }
134
158
  createBookableGroup(role, clubOrSectionOrTeamId, bookableGroup) {
135
- if (role === Role.ClubAdmin) {
136
- return this.createClubBookableGroup(clubOrSectionOrTeamId, bookableGroup);
159
+ switch (role) {
160
+ case Role.ClubAdmin:
161
+ return this.createClubBookableGroup(clubOrSectionOrTeamId, bookableGroup);
162
+ default:
163
+ return this.createSectionBookableGroup(clubOrSectionOrTeamId, bookableGroup);
137
164
  }
138
- return this.createSectionBookableGroup(clubOrSectionOrTeamId, bookableGroup);
139
165
  }
140
166
  createClubBookableGroup(clubId, bookableGroup) {
141
167
  delete bookableGroup.id;
@@ -153,14 +179,17 @@ export class BookableService {
153
179
  }
154
180
  // endregion
155
181
  // region Bookable Tags
156
- getBookableTags(role, clubOrSectionOrTeamId) {
157
- if (role == Role.ClubAdmin) {
158
- return this.getClubBookableTags(clubOrSectionOrTeamId);
182
+ getBookableTags(role, itemId) {
183
+ switch (role) {
184
+ case Role.ClubAdmin:
185
+ return this.getClubBookableTags(itemId);
186
+ case Role.SectionAdmin:
187
+ return this.getSectionBookableTags(itemId);
188
+ case Role.TeamAdmin:
189
+ return this.getTeamBookableTags(itemId);
190
+ default:
191
+ return this.getMemberBookableTags(itemId);
159
192
  }
160
- else if (role == Role.SectionAdmin) {
161
- return this.getSectionBookableTags(clubOrSectionOrTeamId);
162
- }
163
- return this.getTeamBookableTags(clubOrSectionOrTeamId);
164
193
  }
165
194
  getClubBookableTags(clubId) {
166
195
  return this.apiService
@@ -174,41 +203,49 @@ export class BookableService {
174
203
  return this.apiService
175
204
  .getCollection(bookableTagFactory, Role.TeamAdmin, TEAM_BOOKABLE_TAGS_PATH, { teamId }, { params: { limit: 'null' } });
176
205
  }
177
- createBookableTag(role, clubOrSectionOrTeamId, tag) {
178
- if (role == Role.ClubAdmin) {
179
- return this.createClubBookableTag(clubOrSectionOrTeamId, tag);
180
- }
181
- else if (role == Role.SectionAdmin) {
182
- return this.createSectionBookableTag(clubOrSectionOrTeamId, tag);
206
+ getMemberBookableTags(memberId) {
207
+ return this.apiService
208
+ .getCollection(bookableTagFactory, Role.MemberAdmin, MEMBER_BOOKABLE_TAGS_PATH, { memberId }, { params: { limit: 'null' } });
209
+ }
210
+ createBookableTag(role, itemId, tag) {
211
+ switch (role) {
212
+ case Role.ClubAdmin:
213
+ return this.createClubBookableTag(itemId, tag);
214
+ case Role.SectionAdmin:
215
+ return this.createSectionBookableTag(itemId, tag);
216
+ case Role.TeamAdmin:
217
+ return this.createTeamBookableTag(itemId, tag);
218
+ default:
219
+ return this.createMemberBookableTag(itemId, tag);
183
220
  }
184
- return this.createTeamBookableTag(clubOrSectionOrTeamId, tag);
185
221
  }
186
222
  createClubBookableTag(clubId, tag) {
187
223
  delete tag.id;
188
224
  return this.apiService
189
- .postResource(bookableTagFactory, Role.ClubAdmin, CLUB_BOOKABLE_TAGS_PATH, {
190
- clubId,
191
- }, tag);
225
+ .postResource(bookableTagFactory, Role.ClubAdmin, CLUB_BOOKABLE_TAGS_PATH, { clubId }, tag);
192
226
  }
193
227
  createSectionBookableTag(sectionId, tag) {
194
228
  delete tag.id;
195
229
  return this.apiService
196
- .postResource(bookableTagFactory, Role.SectionAdmin, SECTION_BOOKABLE_TAGS_PATH, {
197
- sectionId,
198
- }, tag);
230
+ .postResource(bookableTagFactory, Role.SectionAdmin, SECTION_BOOKABLE_TAGS_PATH, { sectionId }, tag);
199
231
  }
200
232
  createTeamBookableTag(teamId, tag) {
201
233
  delete tag.id;
202
234
  return this.apiService
203
- .postResource(bookableTagFactory, Role.TeamAdmin, TEAM_BOOKABLE_TAGS_PATH, {
204
- teamId,
205
- }, tag);
235
+ .postResource(bookableTagFactory, Role.TeamAdmin, TEAM_BOOKABLE_TAGS_PATH, { teamId }, tag);
236
+ }
237
+ createMemberBookableTag(memberId, tag) {
238
+ delete tag.id;
239
+ return this.apiService
240
+ .postResource(bookableTagFactory, Role.MemberAdmin, MEMBER_BOOKABLE_TAGS_PATH, { memberId }, tag);
206
241
  }
207
242
  updateBookableTag(role, clubOrSectionOrTeamId, tag) {
208
- if (role == Role.ClubAdmin) {
209
- return this.updateClubBookableTag(clubOrSectionOrTeamId, tag);
243
+ switch (role) {
244
+ case Role.ClubAdmin:
245
+ return this.updateClubBookableTag(clubOrSectionOrTeamId, tag);
246
+ default:
247
+ return this.updateSectionBookableTag(clubOrSectionOrTeamId, tag);
210
248
  }
211
- return this.updateSectionBookableTag(clubOrSectionOrTeamId, tag);
212
249
  }
213
250
  updateClubBookableTag(clubId, tag) {
214
251
  return this.apiService
@@ -225,10 +262,12 @@ export class BookableService {
225
262
  }, tag);
226
263
  }
227
264
  deleteBookableTag(role, clubOrSectionOrTeamId, tag) {
228
- if (role == Role.ClubAdmin) {
229
- return this.deleteClubBookableTag(clubOrSectionOrTeamId, tag);
265
+ switch (role) {
266
+ case Role.ClubAdmin:
267
+ return this.deleteClubBookableTag(clubOrSectionOrTeamId, tag);
268
+ default:
269
+ return this.deleteSectionBookableTag(clubOrSectionOrTeamId, tag);
230
270
  }
231
- return this.deleteSectionBookableTag(clubOrSectionOrTeamId, tag);
232
271
  }
233
272
  deleteClubBookableTag(clubId, tag) {
234
273
  return this.apiService
@@ -246,14 +285,17 @@ export class BookableService {
246
285
  }
247
286
  // endregion
248
287
  // region Bookable Parts
249
- getBookableParts(role, clubOrSectionOrTeamId, bookableId) {
250
- if (role == Role.ClubAdmin) {
251
- return this.getClubBookableParts(clubOrSectionOrTeamId, bookableId);
288
+ getBookableParts(role, itemId, bookableId) {
289
+ switch (role) {
290
+ case Role.ClubAdmin:
291
+ return this.getClubBookableParts(itemId, bookableId);
292
+ case Role.SectionAdmin:
293
+ return this.getSectionBookableParts(itemId, bookableId);
294
+ case Role.TeamAdmin:
295
+ return this.getTeamBookableParts(itemId, bookableId);
296
+ default:
297
+ return this.getMemberBookableParts(itemId, bookableId);
252
298
  }
253
- else if (role == Role.SectionAdmin) {
254
- return this.getSectionBookableParts(clubOrSectionOrTeamId, bookableId);
255
- }
256
- return this.getTeamBookableParts(clubOrSectionOrTeamId, bookableId);
257
299
  }
258
300
  getClubBookableParts(clubId, bookableId) {
259
301
  return this.apiService
@@ -267,6 +309,10 @@ export class BookableService {
267
309
  return this.apiService
268
310
  .getCollection(bookablePartFactory, Role.TeamAdmin, TEAM_BOOKABLE_PARTS_PATH, { teamId, bookableId }, { params: { limit: 'null' } });
269
311
  }
312
+ getMemberBookableParts(memberId, bookableId) {
313
+ return this.apiService
314
+ .getCollection(bookablePartFactory, Role.MemberAdmin, MEMBER_BOOKABLE_PARTS_PATH, { memberId, bookableId }, { params: { limit: 'null' } });
315
+ }
270
316
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BookableService, deps: [{ token: i1.ApiService }], target: i0.ɵɵFactoryTarget.Injectable });
271
317
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BookableService, providedIn: 'root' });
272
318
  }
@@ -276,4 +322,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
276
322
  providedIn: 'root'
277
323
  }]
278
324
  }], ctorParameters: () => [{ type: i1.ApiService }] });
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2FibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvc2VydmljZXMvYm9va2FibGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBMkMsSUFBSSxHQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsR0FBRSxNQUFNLGFBQWEsQ0FBQzs7O0FBRWhILE1BQU0sbUJBQW1CLEdBQUcsK0JBQStCLENBQUM7QUFDNUQsTUFBTSxrQkFBa0IsR0FBRywyQ0FBMkMsQ0FBQztBQUN2RSxNQUFNLHlCQUF5QixHQUFHLHNDQUFzQyxDQUFDO0FBQ3pFLE1BQU0sd0JBQXdCLEdBQUcsK0NBQStDLENBQUM7QUFDakYsTUFBTSx1QkFBdUIsR0FBRyxvQ0FBb0MsQ0FBQztBQUNyRSxNQUFNLHNCQUFzQixHQUFHLDJDQUEyQyxDQUFDO0FBQzNFLE1BQU0sd0JBQXdCLEdBQUcsaURBQWlELENBQUM7QUFFbkYsTUFBTSxtQkFBbUIsR0FBRywrQkFBK0IsQ0FBQztBQUM1RCxNQUFNLHlCQUF5QixHQUFHLHNDQUFzQyxDQUFDO0FBQ3pFLE1BQU0sdUJBQXVCLEdBQUcsb0NBQW9DLENBQUM7QUFDckUsTUFBTSx3QkFBd0IsR0FBRyxpREFBaUQsQ0FBQztBQUVuRixNQUFNLHNCQUFzQixHQUFHLGtDQUFrQyxDQUFDO0FBQ2xFLE1BQU0scUJBQXFCLEdBQUcsOENBQThDLENBQUM7QUFDN0UsTUFBTSw0QkFBNEIsR0FBRyx5Q0FBeUMsQ0FBQztBQUMvRSxNQUFNLDJCQUEyQixHQUFHLGtEQUFrRCxDQUFDO0FBQ3ZGLE1BQU0sMEJBQTBCLEdBQUcsdUNBQXVDLENBQUM7QUFDM0UsTUFB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LE1BQU0sRUFBQyxFQUFDLENBQzFCLENBQUM7SUFDTixDQUFDO0lBRUQsdUJBQXVCLENBQUMsU0FBaUIsRUFBRSxVQUFrQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWixtQkFBbUIsRUFDbkIsSUFBSSxDQUFDLFlBQVksRUFDakIsMkJBQTJCLEVBQzNCLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBQyxFQUN2QixFQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsRUFBQyxDQUMxQixDQUFDO0lBQ04sQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQWMsRUFBRSxVQUFrQjtRQUNyRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWixtQkFBbUIsRUFDbkIsSUFBSSxDQUFDLFNBQVMsRUFDZCx3QkFBd0IsRUFDeEIsRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLEVBQ3BCLEVBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxFQUFDLENBQzFCLENBQUM7SUFDTixDQUFDO3VHQXpiVSxlQUFlOzJHQUFmLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FwaVNlcnZpY2V9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHtCb29rYWJsZUdyb3VwLCBCb29rYWJsZUl0ZW0sIEJvb2thYmxlVGFnLCBSb2xlLH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7Ym9va2FibGVHcm91cEZhY3RvcnksIGJvb2thYmxlSXRlbUZhY3RvcnksIGJvb2thYmxlUGFydEZhY3RvcnksIGJvb2thYmxlVGFnRmFjdG9yeSx9IGZyb20gJy4vZmFjdG9yaWVzJztcblxuY29uc3QgQ0xVQl9CT09LQUJMRVNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvYm9va2FibGVzLyc7XG5jb25zdCBDTFVCX0JPT0tBQkxFX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy86Ym9va2FibGVJZC8nO1xuY29uc3QgQ0xVQl9CT09LQUJMRV9HUk9VUFNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvYm9va2FibGVzL2dyb3Vwcy8nO1xuY29uc3QgQ0xVQl9CT09LQUJMRV9HUk9VUF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9ib29rYWJsZXMvZ3JvdXBzLzpncm91cElkLyc7XG5jb25zdCBDTFVCX0JPT0tBQkxFX1RBR1NfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvYm9va2FibGVzL3RhZ3MvJztcbmNvbnN0IENMVUJfQk9PS0FCTEVfVEFHX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy90YWdzLzp0YWdJZC8nO1xuY29uc3QgQ0xVQl9CT09LQUJMRV9QQVJUU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9ib29rYWJsZXMvOmJvb2thYmxlSWQvcGFydHMvJztcblxuY29uc3QgVEVBTV9CT09LQUJMRVNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYm9va2FibGVzLyc7XG5jb25zdCBURUFNX0JPT0tBQkxFX0dST1VQU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9ib29rYWJsZXMvZ3JvdXBzLyc7XG5jb25zdCBURUFNX0JPT0tBQkxFX1RBR1NfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYm9va2FibGVzL3RhZ3MvJztcbmNvbnN0IFRFQU1fQk9PS0FCTEVfUEFSVFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYm9va2FibGVzLzpib29rYWJsZUlkL3BhcnRzLyc7XG5cbmNvbnN0IFNFQ1RJT05fQk9PS0FCTEVTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy8nO1xuY29uc3QgU0VDVElPTl9CT09LQUJMRV9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9ib29rYWJsZXMvOmJvb2thYmxlSWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0FCTEVfR1JPVVBTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy9ncm91cHMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0FCTEVfR1JPVVBfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYm9va2FibGVzL2dyb3Vwcy86Z3JvdXBJZC8nO1xuY29uc3QgU0VDVElPTl9CT09LQUJMRV9UQUdTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy90YWdzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tBQkxFX1RBR19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9ib29rYWJsZXMvdGFncy86dGFnSWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0FCTEVfUEFSVFNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYm9va2FibGVzLzpib29rYWJsZUlkL3BhcnRzLyc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQm9va2FibGVTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlKSB7XG4gIH1cblxuICAvLyByZWdpb24gQm9va2FibGUgSXRlbXNcblxuICBnZXRCb29rYWJsZUl0ZW1zKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29rYWJsZUl0ZW1zKGNsdWJPclNlY3Rpb25PclRlYW1JZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2FibGVJdGVtcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2FibGVJdGVtcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQpXG4gIH1cblxuICBnZXRUZWFtQm9va2FibGVJdGVtcyh0ZWFtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LQUJMRVNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRDbHViQm9va2FibGVJdGVtcyhjbHViSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LQUJMRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRTZWN0aW9uQm9va2FibGVJdGVtcyhzZWN0aW9uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LQUJMRVNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVCb29rYWJsZUl0ZW0ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2thYmxlSXRlbTogUGFydGlhbDxCb29rYWJsZUl0ZW0+KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2FibGVJdGVtKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2FibGVJdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2thYmxlSXRlbShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2thYmxlSXRlbSk7XG4gIH1cblxuICB1cGRhdGVDbHViQm9va2FibGVJdGVtKGNsdWJJZDogc3RyaW5nLCBib29rYWJsZUl0ZW06IFBhcnRpYWw8Qm9va2FibGVJdGVtPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVJdGVtRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0FCTEVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBib29rYWJsZUlkOiBib29rYWJsZUl0ZW0uaWQgYXMgc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICBib29rYWJsZUl0ZW1cbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVTZWN0aW9uQm9va2FibGVJdGVtKHNlY3Rpb25JZDogc3RyaW5nLCBib29rYWJsZUl0ZW06IFBhcnRpYWw8Qm9va2FibGVJdGVtPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVJdGVtRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0FCTEVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBib29rYWJsZUlkOiBib29rYWJsZUl0ZW0uaWQgYXMgc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICBib29rYWJsZUl0ZW1cbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGVCb29rYWJsZUl0ZW0ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2thYmxlSXRlbTogUGFydGlhbDxCb29rYWJsZUl0ZW0+KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2FibGVJdGVtKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2FibGVJdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlU2VjdGlvbkJvb2thYmxlSXRlbShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2thYmxlSXRlbSk7XG4gIH1cblxuICBjcmVhdGVDbHViQm9va2FibGVJdGVtKGNsdWJJZDogc3RyaW5nLCBib29rYWJsZUl0ZW06IFBhcnRpYWw8Qm9va2FibGVJdGVtPikge1xuICAgIGRlbGV0ZSBib29rYWJsZUl0ZW0uaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVJdGVtRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0FCTEVTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2thYmxlSXRlbSxcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGVTZWN0aW9uQm9va2FibGVJdGVtKHNlY3Rpb25JZDogc3RyaW5nLCBib29rYWJsZUl0ZW06IFBhcnRpYWw8Qm9va2FibGVJdGVtPikge1xuICAgIGRlbGV0ZSBib29rYWJsZUl0ZW0uaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVJdGVtRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0FCTEVTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2thYmxlSXRlbVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29rYWJsZSBHcm91cHNcblxuICBnZXRCb29rYWJsZUdyb3Vwcyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2FibGVHcm91cHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29rYWJsZUdyb3VwcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2FibGVHcm91cHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgfVxuXG4gIGdldENsdWJCb29rYWJsZUdyb3VwcyhjbHViSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZUdyb3VwRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0FCTEVfR1JPVVBTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApO1xuICB9XG5cbiAgZ2V0U2VjdGlvbkJvb2thYmxlR3JvdXBzKHNlY3Rpb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2thYmxlR3JvdXBGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LQUJMRV9HUk9VUFNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRUZWFtQm9va2FibGVHcm91cHModGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2FibGVHcm91cEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tBQkxFX0dST1VQU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUJvb2thYmxlR3JvdXAocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2thYmxlR3JvdXA6IFBhcnRpYWw8Qm9va2FibGVHcm91cD4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29rYWJsZUdyb3VwKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2FibGVHcm91cCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29rYWJsZUdyb3VwKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2FibGVHcm91cCk7XG4gIH1cblxuICB1cGRhdGVDbHViQm9va2FibGVHcm91cChjbHViSWQ6IHN0cmluZywgYm9va2FibGVHcm91cDogUGFydGlhbDxCb29rYWJsZUdyb3VwPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVHcm91cEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tBQkxFX0dST1VQX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgZ3JvdXBJZDogYm9va2FibGVHcm91cC5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2thYmxlR3JvdXAsXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlU2VjdGlvbkJvb2thYmxlR3JvdXAoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2thYmxlR3JvdXA6IFBhcnRpYWw8Qm9va2FibGVHcm91cD4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2thYmxlR3JvdXBGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LQUJMRV9HUk9VUF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGdyb3VwSWQ6IGJvb2thYmxlR3JvdXAuaWQgYXMgc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICBib29rYWJsZUdyb3VwXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlQm9va2FibGVHcm91cChyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2FibGVHcm91cDogUGFydGlhbDxCb29rYWJsZUdyb3VwPikge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ2x1YkJvb2thYmxlR3JvdXAoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29rYWJsZUdyb3VwKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlU2VjdGlvbkJvb2thYmxlR3JvdXAoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29rYWJsZUdyb3VwKTtcbiAgfVxuXG4gIGNyZWF0ZUNsdWJCb29rYWJsZUdyb3VwKGNsdWJJZDogc3RyaW5nLCBib29rYWJsZUdyb3VwOiBQYXJ0aWFsPEJvb2thYmxlR3JvdXA+KSB7XG4gICAgZGVsZXRlIGJvb2thYmxlR3JvdXAuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVHcm91cEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tBQkxFX0dST1VQU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBib29rYWJsZUdyb3VwLFxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVNlY3Rpb25Cb29rYWJsZUdyb3VwKHNlY3Rpb25JZDogc3RyaW5nLCBib29rYWJsZUdyb3VwOiBQYXJ0aWFsPEJvb2thYmxlR3JvdXA+KSB7XG4gICAgZGVsZXRlIGJvb2thYmxlR3JvdXAuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVHcm91cEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tBQkxFX0dST1VQU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBib29rYWJsZUdyb3VwXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2thYmxlIFRhZ3NcblxuICBnZXRCb29rYWJsZVRhZ3Mocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2thYmxlVGFncyhjbHViT3JTZWN0aW9uT3JUZWFtSWQpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2thYmxlVGFncyhjbHViT3JTZWN0aW9uT3JUZWFtSWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2FibGVUYWdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCk7XG4gIH1cblxuICBnZXRDbHViQm9va2FibGVUYWdzKGNsdWJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2thYmxlVGFnRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0FCTEVfVEFHU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFNlY3Rpb25Cb29rYWJsZVRhZ3Moc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2FibGVUYWdGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LQUJMRV9UQUdTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApO1xuICB9XG5cbiAgZ2V0VGVhbUJvb2thYmxlVGFncyh0ZWFtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZVRhZ0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tBQkxFX1RBR1NfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGVCb29rYWJsZVRhZyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgdGFnOiBQYXJ0aWFsPEJvb2thYmxlVGFnPikge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2FibGVUYWcoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCB0YWcpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2VjdGlvbkJvb2thYmxlVGFnKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgdGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVGVhbUJvb2thYmxlVGFnKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgdGFnKTtcbiAgfVxuXG4gIGNyZWF0ZUNsdWJCb29rYWJsZVRhZyhjbHViSWQ6IHN0cmluZywgdGFnOiBQYXJ0aWFsPEJvb2thYmxlVGFnPikge1xuICAgIGRlbGV0ZSB0YWcuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVUYWdGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LQUJMRV9UQUdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHRhZyxcbiAgICAgIClcbiAgfVxuXG4gIGNyZWF0ZVNlY3Rpb25Cb29rYWJsZVRhZyhzZWN0aW9uSWQ6IHN0cmluZywgdGFnOiBQYXJ0aWFsPEJvb2thYmxlVGFnPikge1xuICAgIGRlbGV0ZSB0YWcuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVUYWdGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LQUJMRV9UQUdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHRhZyxcbiAgICAgIClcbiAgfVxuXG4gIGNyZWF0ZVRlYW1Cb29rYWJsZVRhZyh0ZWFtSWQ6IHN0cmluZywgdGFnOiBQYXJ0aWFsPEJvb2thYmxlVGFnPikge1xuICAgIGRlbGV0ZSB0YWcuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVUYWdGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LQUJMRV9UQUdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHRhZyxcbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2thYmxlVGFnKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCB0YWc6IFBhcnRpYWw8Qm9va2FibGVUYWc+KSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29rYWJsZVRhZyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHRhZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29rYWJsZVRhZyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHRhZyk7XG4gIH1cblxuICB1cGRhdGVDbHViQm9va2FibGVUYWcoY2x1YklkOiBzdHJpbmcsIHRhZzogUGFydGlhbDxCb29rYWJsZVRhZz4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2thYmxlVGFnRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0FCTEVfVEFHX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgdGFnSWQ6IHRhZy5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHRhZyxcbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZVNlY3Rpb25Cb29rYWJsZVRhZyhzZWN0aW9uSWQ6IHN0cmluZywgdGFnOiBQYXJ0aWFsPEJvb2thYmxlVGFnPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVUYWdGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LQUJMRV9UQUdfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICB0YWdJZDogdGFnLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgdGFnLFxuICAgICAgKVxuICB9XG5cbiAgZGVsZXRlQm9va2FibGVUYWcocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHRhZzogQm9va2FibGVUYWcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2thYmxlVGFnKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgdGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2thYmxlVGFnKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgdGFnKTtcbiAgfVxuXG4gIGRlbGV0ZUNsdWJCb29rYWJsZVRhZyhjbHViSWQ6IHN0cmluZywgdGFnOiBCb29rYWJsZVRhZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0FCTEVfVEFHX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgdGFnSWQ6IHRhZy5pZCxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgfVxuXG4gIGRlbGV0ZVNlY3Rpb25Cb29rYWJsZVRhZyhzZWN0aW9uSWQ6IHN0cmluZywgdGFnOiBCb29rYWJsZVRhZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0FCTEVfVEFHX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgdGFnSWQ6IHRhZy5pZCxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29rYWJsZSBQYXJ0c1xuXG4gIGdldEJvb2thYmxlUGFydHMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2thYmxlSWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2FibGVQYXJ0cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2thYmxlSWQpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2thYmxlUGFydHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29rYWJsZUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2thYmxlUGFydHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29rYWJsZUlkKTtcbiAgfVxuXG4gIGdldENsdWJCb29rYWJsZVBhcnRzKGNsdWJJZDogc3RyaW5nLCBib29rYWJsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2FibGVQYXJ0RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0FCTEVfUEFSVFNfUEFUSCxcbiAgICAgICAge2NsdWJJZCwgYm9va2FibGVJZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRTZWN0aW9uQm9va2FibGVQYXJ0cyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2FibGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2thYmxlUGFydEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tBQkxFX1BBUlRTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWQsIGJvb2thYmxlSWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApO1xuICB9XG5cbiAgZ2V0VGVhbUJvb2thYmxlUGFydHModGVhbUlkOiBzdHJpbmcsIGJvb2thYmxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZVBhcnRGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LQUJMRV9QQVJUU19QQVRILFxuICAgICAgICB7dGVhbUlkLCBib29rYWJsZUlkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxufVxuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2FibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvc2VydmljZXMvYm9va2FibGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBMkMsSUFBSSxHQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsR0FBRSxNQUFNLGFBQWEsQ0FBQzs7O0FBRWhILE1BQU0sbUJBQW1CLEdBQUcsK0JBQStCLENBQUM7QUFDNUQsTUFBTSxrQkFBa0IsR0FBRywyQ0FBMkMsQ0FBQztBQUN2RSxNQUFNLHlCQUF5QixHQUFHLHNDQUFzQyxDQUFDO0FBQ3pFLE1BQU0sd0JBQXdCLEdBQUcsK0NBQStDLENBQUM7QUFDakYsTUFBTSx1QkFBdUIsR0FBRyxvQ0FBb0MsQ0FBQztBQUNyRSxNQUFNLHNCQUFzQixHQUFHLDJDQUEyQyxDQUFDO0FBQzNFLE1BQU0sd0JBQXdCLEdBQUcsaURBQWlELENBQUM7QUFFbkYsTUFBTSxzQkFBc0IsR0FBRyxrQ0FBa0MsQ0FBQztBQUNsRSxNQUFNLHFCQUFxQixHQUFHLDhDQUE4QyxDQUFDO0FBQzdFLE1BQU0sNEJBQTRCLEdBQUcseUNBQXlDLENBQUM7QUFDL0UsTUFBTSwyQkFBMkIsR0FBRyxrREFBa0QsQ0FBQztBQUN2RixNQUFNLDBCQUEwQixHQUFHLHVDQUF1QyxDQUFDO0FBQzNFLE1BQU0seUJBQXlCLEdBQUcsOENBQThDLENBQUM7QUFDakYsTUFBTSwyQkFBMkIsR0FBRyxvREFBb0QsQ0FBQztBQUV6RixNQUFNLG1CQUFtQixHQUFHLCtCQUErQixDQUFDO0FBQzVELE1BQU0seUJBQXlCLEdBQUcsc0NBQXNDLENBQUM7QUFDekUsTUFB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QUFDLFVBQVU7YUFDbkIsYUFBYSxDQUNaLG1CQUFtQixFQUNuQixJQUFJLENBQUMsV0FBVyxFQUNoQiwwQkFBMEIsRUFDMUIsRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFDLEVBQ3RCLEVBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxFQUFDLENBQzFCLENBQUM7SUFDTixDQUFDO3VHQTNnQlUsZUFBZTsyR0FBZixlQUFlLGNBRmQsTUFBTTs7MkZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcGlTZXJ2aWNlfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7Qm9va2FibGVHcm91cCwgQm9va2FibGVJdGVtLCBCb29rYWJsZVRhZywgUm9sZSx9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge2Jvb2thYmxlR3JvdXBGYWN0b3J5LCBib29rYWJsZUl0ZW1GYWN0b3J5LCBib29rYWJsZVBhcnRGYWN0b3J5LCBib29rYWJsZVRhZ0ZhY3RvcnksfSBmcm9tICcuL2ZhY3Rvcmllcyc7XG5cbmNvbnN0IENMVUJfQk9PS0FCTEVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy8nO1xuY29uc3QgQ0xVQl9CT09LQUJMRV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9ib29rYWJsZXMvOmJvb2thYmxlSWQvJztcbmNvbnN0IENMVUJfQk9PS0FCTEVfR1JPVVBTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy9ncm91cHMvJztcbmNvbnN0IENMVUJfQk9PS0FCTEVfR1JPVVBfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvYm9va2FibGVzL2dyb3Vwcy86Z3JvdXBJZC8nO1xuY29uc3QgQ0xVQl9CT09LQUJMRV9UQUdTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy90YWdzLyc7XG5jb25zdCBDTFVCX0JPT0tBQkxFX1RBR19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9ib29rYWJsZXMvdGFncy86dGFnSWQvJztcbmNvbnN0IENMVUJfQk9PS0FCTEVfUEFSVFNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvYm9va2FibGVzLzpib29rYWJsZUlkL3BhcnRzLyc7XG5cbmNvbnN0IFNFQ1RJT05fQk9PS0FCTEVTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy8nO1xuY29uc3QgU0VDVElPTl9CT09LQUJMRV9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9ib29rYWJsZXMvOmJvb2thYmxlSWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0FCTEVfR1JPVVBTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy9ncm91cHMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0FCTEVfR1JPVVBfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYm9va2FibGVzL2dyb3Vwcy86Z3JvdXBJZC8nO1xuY29uc3QgU0VDVElPTl9CT09LQUJMRV9UQUdTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy90YWdzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tBQkxFX1RBR19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9ib29rYWJsZXMvdGFncy86dGFnSWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0FCTEVfUEFSVFNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYm9va2FibGVzLzpib29rYWJsZUlkL3BhcnRzLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0FCTEVTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy8nO1xuY29uc3QgVEVBTV9CT09LQUJMRV9HUk9VUFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYm9va2FibGVzL2dyb3Vwcy8nO1xuY29uc3QgVEVBTV9CT09LQUJMRV9UQUdTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy90YWdzLyc7XG5jb25zdCBURUFNX0JPT0tBQkxFX1BBUlRTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy86Ym9va2FibGVJZC9wYXJ0cy8nO1xuXG5jb25zdCBNRU1CRVJfQk9PS0FCTEVTX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvYm9va2FibGVzLyc7XG5jb25zdCBNRU1CRVJfQk9PS0FCTEVfR1JPVVBTX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvYm9va2FibGVzL2dyb3Vwcy8nO1xuY29uc3QgTUVNQkVSX0JPT0tBQkxFX1RBR1NfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9ib29rYWJsZXMvdGFncy8nO1xuY29uc3QgTUVNQkVSX0JPT0tBQkxFX1BBUlRTX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvYm9va2FibGVzLzpib29rYWJsZUlkL3BhcnRzLyc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQm9va2FibGVTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlKSB7XG4gIH1cblxuICAvLyByZWdpb24gQm9va2FibGUgSXRlbXNcblxuICBnZXRCb29rYWJsZUl0ZW1zKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2FibGVJdGVtcyhpdGVtSWQpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2thYmxlSXRlbXMoaXRlbUlkKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29rYWJsZUl0ZW1zKGl0ZW1JZClcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lbWJlckJvb2thYmxlSXRlbXMoaXRlbUlkKVxuICAgIH1cbiAgfVxuXG4gIGdldFRlYW1Cb29rYWJsZUl0ZW1zKHRlYW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2thYmxlSXRlbUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tBQkxFU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKTtcbiAgfVxuXG4gIGdldE1lbWJlckJvb2thYmxlSXRlbXMobWVtYmVySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0FCTEVTX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRDbHViQm9va2FibGVJdGVtcyhjbHViSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LQUJMRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRTZWN0aW9uQm9va2FibGVJdGVtcyhzZWN0aW9uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LQUJMRVNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVCb29rYWJsZUl0ZW0ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2thYmxlSXRlbTogUGFydGlhbDxCb29rYWJsZUl0ZW0+KSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2FibGVJdGVtKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2FibGVJdGVtKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29rYWJsZUl0ZW0oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29rYWJsZUl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNsdWJCb29rYWJsZUl0ZW0oY2x1YklkOiBzdHJpbmcsIGJvb2thYmxlSXRlbTogUGFydGlhbDxCb29rYWJsZUl0ZW0+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LQUJMRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGJvb2thYmxlSWQ6IGJvb2thYmxlSXRlbS5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2thYmxlSXRlbVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVNlY3Rpb25Cb29rYWJsZUl0ZW0oc2VjdGlvbklkOiBzdHJpbmcsIGJvb2thYmxlSXRlbTogUGFydGlhbDxCb29rYWJsZUl0ZW0+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LQUJMRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGJvb2thYmxlSWQ6IGJvb2thYmxlSXRlbS5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2thYmxlSXRlbVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUJvb2thYmxlSXRlbShyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2FibGVJdGVtOiBQYXJ0aWFsPEJvb2thYmxlSXRlbT4pIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29rYWJsZUl0ZW0oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29rYWJsZUl0ZW0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2VjdGlvbkJvb2thYmxlSXRlbShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2thYmxlSXRlbSk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQ2x1YkJvb2thYmxlSXRlbShjbHViSWQ6IHN0cmluZywgYm9va2FibGVJdGVtOiBQYXJ0aWFsPEJvb2thYmxlSXRlbT4pIHtcbiAgICBkZWxldGUgYm9va2FibGVJdGVtLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2thYmxlSXRlbUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tBQkxFU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBib29rYWJsZUl0ZW0sXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlU2VjdGlvbkJvb2thYmxlSXRlbShzZWN0aW9uSWQ6IHN0cmluZywgYm9va2FibGVJdGVtOiBQYXJ0aWFsPEJvb2thYmxlSXRlbT4pIHtcbiAgICBkZWxldGUgYm9va2FibGVJdGVtLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2thYmxlSXRlbUZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tBQkxFU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBib29rYWJsZUl0ZW1cbiAgICAgICk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2FibGUgR3JvdXBzXG5cbiAgZ2V0Qm9va2FibGVHcm91cHMocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29rYWJsZUdyb3VwcyhpdGVtSWQpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2thYmxlR3JvdXBzKGl0ZW1JZCk7XG4gICAgICBjYXNlIFJvbGUuVGVhbUFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2FibGVHcm91cHMoaXRlbUlkKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lbWJlckJvb2thYmxlR3JvdXBzKGl0ZW1JZCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2x1YkJvb2thYmxlR3JvdXBzKGNsdWJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2thYmxlR3JvdXBGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LQUJMRV9HUk9VUFNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRTZWN0aW9uQm9va2FibGVHcm91cHMoc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2FibGVHcm91cEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tBQkxFX0dST1VQU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFRlYW1Cb29rYWJsZUdyb3Vwcyh0ZWFtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZUdyb3VwRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0FCTEVfR1JPVVBTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApO1xuICB9XG5cbiAgZ2V0TWVtYmVyQm9va2FibGVHcm91cHMobWVtYmVySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZUdyb3VwRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tBQkxFX0dST1VQU19QQVRILFxuICAgICAgICB7bWVtYmVySWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlQm9va2FibGVHcm91cChyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2FibGVHcm91cDogUGFydGlhbDxCb29rYWJsZUdyb3VwPikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2thYmxlR3JvdXAoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29rYWJsZUdyb3VwKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29rYWJsZUdyb3VwKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2FibGVHcm91cCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ2x1YkJvb2thYmxlR3JvdXAoY2x1YklkOiBzdHJpbmcsIGJvb2thYmxlR3JvdXA6IFBhcnRpYWw8Qm9va2FibGVHcm91cD4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2thYmxlR3JvdXBGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LQUJMRV9HUk9VUF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGdyb3VwSWQ6IGJvb2thYmxlR3JvdXAuaWQgYXMgc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICBib29rYWJsZUdyb3VwLFxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVNlY3Rpb25Cb29rYWJsZUdyb3VwKHNlY3Rpb25JZDogc3RyaW5nLCBib29rYWJsZUdyb3VwOiBQYXJ0aWFsPEJvb2thYmxlR3JvdXA+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29rYWJsZUdyb3VwRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0FCTEVfR1JPVVBfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBncm91cElkOiBib29rYWJsZUdyb3VwLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2FibGVHcm91cFxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUJvb2thYmxlR3JvdXAocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2thYmxlR3JvdXA6IFBhcnRpYWw8Qm9va2FibGVHcm91cD4pIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29rYWJsZUdyb3VwKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2FibGVHcm91cCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTZWN0aW9uQm9va2FibGVHcm91cChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2thYmxlR3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUNsdWJCb29rYWJsZUdyb3VwKGNsdWJJZDogc3RyaW5nLCBib29rYWJsZUdyb3VwOiBQYXJ0aWFsPEJvb2thYmxlR3JvdXA+KSB7XG4gICAgZGVsZXRlIGJvb2thYmxlR3JvdXAuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVHcm91cEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tBQkxFX0dST1VQU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBib29rYWJsZUdyb3VwLFxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVNlY3Rpb25Cb29rYWJsZUdyb3VwKHNlY3Rpb25JZDogc3RyaW5nLCBib29rYWJsZUdyb3VwOiBQYXJ0aWFsPEJvb2thYmxlR3JvdXA+KSB7XG4gICAgZGVsZXRlIGJvb2thYmxlR3JvdXAuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVHcm91cEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tBQkxFX0dST1VQU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBib29rYWJsZUdyb3VwXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2thYmxlIFRhZ3NcblxuICBnZXRCb29rYWJsZVRhZ3Mocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29rYWJsZVRhZ3MoaXRlbUlkKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29rYWJsZVRhZ3MoaXRlbUlkKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29rYWJsZVRhZ3MoaXRlbUlkKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lbWJlckJvb2thYmxlVGFncyhpdGVtSWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldENsdWJCb29rYWJsZVRhZ3MoY2x1YklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2FibGVUYWdGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LQUJMRV9UQUdTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApO1xuICB9XG5cbiAgZ2V0U2VjdGlvbkJvb2thYmxlVGFncyhzZWN0aW9uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZVRhZ0ZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tBQkxFX1RBR1NfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRUZWFtQm9va2FibGVUYWdzKHRlYW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2thYmxlVGFnRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0FCTEVfVEFHU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKTtcbiAgfVxuXG4gIGdldE1lbWJlckJvb2thYmxlVGFncyhtZW1iZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2thYmxlVGFnRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tBQkxFX1RBR1NfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUJvb2thYmxlVGFnKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCB0YWc6IFBhcnRpYWw8Qm9va2FibGVUYWc+KSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2FibGVUYWcoaXRlbUlkLCB0YWcpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2VjdGlvbkJvb2thYmxlVGFnKGl0ZW1JZCwgdGFnKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRlYW1Cb29rYWJsZVRhZyhpdGVtSWQsIHRhZyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVNZW1iZXJCb29rYWJsZVRhZyhpdGVtSWQsIHRhZyk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQ2x1YkJvb2thYmxlVGFnKGNsdWJJZDogc3RyaW5nLCB0YWc6IFBhcnRpYWw8Qm9va2FibGVUYWc+KSB7XG4gICAgZGVsZXRlIHRhZy5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29rYWJsZVRhZ0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tBQkxFX1RBR1NfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHRhZyxcbiAgICAgIClcbiAgfVxuXG4gIGNyZWF0ZVNlY3Rpb25Cb29rYWJsZVRhZyhzZWN0aW9uSWQ6IHN0cmluZywgdGFnOiBQYXJ0aWFsPEJvb2thYmxlVGFnPikge1xuICAgIGRlbGV0ZSB0YWcuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVUYWdGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LQUJMRV9UQUdTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB0YWcsXG4gICAgICApXG4gIH1cblxuICBjcmVhdGVUZWFtQm9va2FibGVUYWcodGVhbUlkOiBzdHJpbmcsIHRhZzogUGFydGlhbDxCb29rYWJsZVRhZz4pIHtcbiAgICBkZWxldGUgdGFnLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2thYmxlVGFnRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0FCTEVfVEFHU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAgdGFnLFxuICAgICAgKVxuICB9XG5cbiAgY3JlYXRlTWVtYmVyQm9va2FibGVUYWcobWVtYmVySWQ6IHN0cmluZywgdGFnOiBQYXJ0aWFsPEJvb2thYmxlVGFnPikge1xuICAgIGRlbGV0ZSB0YWcuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2FibGVUYWdGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0FCTEVfVEFHU19QQVRILFxuICAgICAgICB7bWVtYmVySWR9LFxuICAgICAgICB0YWcsXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29rYWJsZVRhZyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgdGFnOiBQYXJ0aWFsPEJvb2thYmxlVGFnPikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2thYmxlVGFnKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgdGFnKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29rYWJsZVRhZyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHRhZyk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ2x1YkJvb2thYmxlVGFnKGNsdWJJZDogc3RyaW5nLCB0YWc6IFBhcnRpYWw8Qm9va2FibGVUYWc+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29rYWJsZVRhZ0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tBQkxFX1RBR19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIHRhZ0lkOiB0YWcuaWQgYXMgc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICB0YWcsXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVTZWN0aW9uQm9va2FibGVUYWcoc2VjdGlvbklkOiBzdHJpbmcsIHRhZzogUGFydGlhbDxCb29rYWJsZVRhZz4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2thYmxlVGFnRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0FCTEVfVEFHX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgdGFnSWQ6IHRhZy5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHRhZyxcbiAgICAgIClcbiAgfVxuXG4gIGRlbGV0ZUJvb2thYmxlVGFnKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCB0YWc6IEJvb2thYmxlVGFnKSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVDbHViQm9va2FibGVUYWcoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCB0YWcpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2thYmxlVGFnKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgdGFnKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVDbHViQm9va2FibGVUYWcoY2x1YklkOiBzdHJpbmcsIHRhZzogQm9va2FibGVUYWcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tBQkxFX1RBR19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIHRhZ0lkOiB0YWcuaWQsXG4gICAgICAgIH0sXG4gICAgICApXG4gIH1cblxuICBkZWxldGVTZWN0aW9uQm9va2FibGVUYWcoc2VjdGlvbklkOiBzdHJpbmcsIHRhZzogQm9va2FibGVUYWcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tBQkxFX1RBR19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIHRhZ0lkOiB0YWcuaWQsXG4gICAgICAgIH0sXG4gICAgICApXG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2FibGUgUGFydHNcblxuICBnZXRCb29rYWJsZVBhcnRzKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCBib29rYWJsZUlkOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29rYWJsZVBhcnRzKGl0ZW1JZCwgYm9va2FibGVJZCk7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2FibGVQYXJ0cyhpdGVtSWQsIGJvb2thYmxlSWQpO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2thYmxlUGFydHMoaXRlbUlkLCBib29rYWJsZUlkKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lbWJlckJvb2thYmxlUGFydHMoaXRlbUlkLCBib29rYWJsZUlkKTtcbiAgICB9XG4gIH1cblxuICBnZXRDbHViQm9va2FibGVQYXJ0cyhjbHViSWQ6IHN0cmluZywgYm9va2FibGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2thYmxlUGFydEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tBQkxFX1BBUlRTX1BBVEgsXG4gICAgICAgIHtjbHViSWQsIGJvb2thYmxlSWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApO1xuICB9XG5cbiAgZ2V0U2VjdGlvbkJvb2thYmxlUGFydHMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2thYmxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZVBhcnRGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LQUJMRV9QQVJUU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkLCBib29rYWJsZUlkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFRlYW1Cb29rYWJsZVBhcnRzKHRlYW1JZDogc3RyaW5nLCBib29rYWJsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2FibGVQYXJ0RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0FCTEVfUEFSVFNfUEFUSCxcbiAgICAgICAge3RlYW1JZCwgYm9va2FibGVJZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRNZW1iZXJCb29rYWJsZVBhcnRzKG1lbWJlcklkOiBzdHJpbmcsIGJvb2thYmxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29rYWJsZVBhcnRGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0FCTEVfUEFSVFNfUEFUSCxcbiAgICAgICAge21lbWJlcklkLCBib29rYWJsZUlkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxufVxuIl19