vcomply-workflow-engine 2.9.55 → 2.9.56

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.
@@ -22,76 +22,53 @@ export class ResponsibilityService {
22
22
  getResponsibilityCenterList(params) {
23
23
  var _a;
24
24
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
25
- return this.http
26
- .get(((_a = this.env) === null || _a === void 0 ? void 0 : _a.complianceGet) + 'responsibilityCenterTree', {
27
- params,
28
- headers,
29
- })
30
- .pipe(retry(2));
25
+ return this.http.get(((_a = this.env) === null || _a === void 0 ? void 0 : _a.complianceGet) + 'responsibilityCenterTree', {
26
+ params, headers
27
+ }).pipe(retry(2));
31
28
  }
32
29
  getOrganizationGroups(params) {
33
30
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
34
- return this.http
35
- .get(this.env.organizationGet + 'groupsList&status=1&type=compliance', {
36
- params,
37
- headers,
38
- })
39
- .pipe(retry(2));
31
+ return this.http.get(this.env.organizationGet + 'groupsList&status=1&type=compliance', {
32
+ params, headers,
33
+ }).pipe(retry(2));
40
34
  }
41
35
  getOrganizationPolicyGroups(params) {
42
36
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
43
- return this.http
44
- .get(this.env.organizationGet +
45
- 'groupsList&permType=managePolicies&fetch_all=true', {
46
- params,
47
- headers,
48
- })
49
- .pipe(retry(2));
37
+ return this.http.get(this.env.organizationGet + 'groupsList&permType=managePolicies&fetch_all=true', {
38
+ params, headers,
39
+ }).pipe(retry(2));
50
40
  }
51
41
  getOrganizationOverseersGroups(params) {
52
42
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
53
- return this.http
54
- .get(this.env.organizationGet + 'groupsList&fetch_all=true', {
55
- params,
56
- headers,
57
- })
58
- .pipe(retry(2));
43
+ return this.http.get(this.env.organizationGet + 'groupsList&fetch_all=true', {
44
+ params, headers,
45
+ }).pipe(retry(2));
59
46
  }
60
47
  getOrganizationUsers() {
61
48
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
62
- return this.http
63
- .get(this.env.organizationGet + 'organizationUsers', {
49
+ return this.http.get(this.env.organizationGet + 'organizationUsers', {
64
50
  headers,
65
- })
66
- .pipe(retry(2));
51
+ }).pipe(retry(2));
67
52
  }
68
53
  getOrganizationPeople(params) {
69
54
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
70
- return this.http
71
- .get(this.env.organizationGet + 'people', {
72
- params,
73
- headers,
74
- })
75
- .pipe(retry(2));
55
+ return this.http.get(this.env.organizationGet + 'people', {
56
+ params, headers
57
+ }).pipe(retry(2));
76
58
  }
77
59
  getAssignorsList(params) {
78
60
  var _a;
79
61
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
80
- return this.http
81
- .get(((_a = this.env) === null || _a === void 0 ? void 0 : _a.organizationGet) + 'organizationUsers&isOnBehalf=1', {
82
- params,
83
- headers,
84
- })
85
- .pipe(retry(2));
62
+ return this.http.get(((_a = this.env) === null || _a === void 0 ? void 0 : _a.organizationGet) + 'organizationUsers&isOnBehalf=1', {
63
+ params, headers
64
+ }).pipe(retry(2));
86
65
  }
87
66
  getCategoriesList() {
88
67
  var _a;
89
68
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
90
- return this.http
91
- .get(((_a = this.env) === null || _a === void 0 ? void 0 : _a.complianceGet) + 'complianceCategory/CategoryListTree', {
69
+ return this.http.get(((_a = this.env) === null || _a === void 0 ? void 0 : _a.complianceGet) + 'complianceCategory/CategoryListTree', {
92
70
  headers,
93
- })
94
- .pipe(retry(2));
71
+ }).pipe(retry(2));
95
72
  }
96
73
  getProgramsList(params, ids) {
97
74
  var _a;
@@ -99,58 +76,39 @@ export class ResponsibilityService {
99
76
  const programId = { programId: ids };
100
77
  if (ids === null || ids === void 0 ? void 0 : ids.length) {
101
78
  headers = headers.append('payload-object', JSON.stringify(programId));
102
- return this.http
103
- .post(((_a = this.env) === null || _a === void 0 ? void 0 : _a.compliancePost) + 'complianceCategory/programList', programId, { params, headers })
104
- .pipe(retry(2));
79
+ return this.http.post(((_a = this.env) === null || _a === void 0 ? void 0 : _a.compliancePost) + 'complianceCategory/programList', programId, { params, headers }).pipe(retry(2));
105
80
  }
106
- return this.http
107
- .get(this.env.complianceGet + 'complianceCategory/programList', {
108
- params,
109
- headers,
110
- })
111
- .pipe(retry(2));
81
+ return this.http.get(this.env.complianceGet + 'complianceCategory/programList', {
82
+ params, headers
83
+ }).pipe(retry(2));
112
84
  }
113
85
  getProgramsListCount(params, ids) {
114
86
  let headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
115
- return this.http
116
- .get(this.env.complianceGet + 'complianceCategory/programListCount', {
117
- params,
118
- headers,
119
- })
120
- .pipe(retry(2));
87
+ return this.http.get(this.env.complianceGet + 'complianceCategory/programListCount', {
88
+ params, headers
89
+ }).pipe(retry(2));
121
90
  }
122
91
  getCategoriesUnderProgram(params) {
123
92
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
124
- return this.http
125
- .get(this.env.complianceGet + 'complianceCategory/CategoryListTree', {
126
- params,
127
- headers,
128
- })
129
- .pipe(retry(2));
93
+ return this.http.get(this.env.complianceGet + 'complianceCategory/CategoryListTree', {
94
+ params, headers
95
+ }).pipe(retry(2));
130
96
  }
131
97
  getAssurance() {
132
98
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
133
- return this.http
134
- .get(this.env.assuranceGet + 'category/list&id=1', {
99
+ return this.http.get(this.env.assuranceGet + 'category/list&id=1', {
135
100
  headers,
136
- })
137
- .pipe(retry(2));
101
+ }).pipe(retry(2));
138
102
  }
139
103
  getAssuranceForRequiresAudit() {
140
104
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
141
- return this.http
142
- .get(this.env.assuranceApi + 'Audit/Category/List/?mode=entrust_module', {
105
+ return this.http.get(this.env.assuranceApi + 'Audit/Category/List/?mode=entrust_module', {
143
106
  headers,
144
- })
145
- .pipe(retry(2));
107
+ }).pipe(retry(2));
146
108
  }
147
109
  getRCDetailsOfFramework(rc_id, category_id) {
148
110
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
149
- return this.http.get(this.env.complianceGet +
150
- 'complianceCategory/CategoryRCTreeById&id=' +
151
- category_id +
152
- '&rc_id=' +
153
- rc_id, { headers });
111
+ return this.http.get(this.env.complianceGet + 'complianceCategory/CategoryRCTreeById&id=' + category_id + '&rc_id=' + rc_id, { headers });
154
112
  }
155
113
  submitEntrust(entrust_body) {
156
114
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
@@ -158,16 +116,11 @@ export class ResponsibilityService {
158
116
  }
159
117
  updateEntrust(entrust_body, object_id, isDelegate) {
160
118
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
161
- return this.http.post(this.env.compliancePost +
162
- 'createReport&reportId=' +
163
- object_id +
164
- '&isDelegate=0', entrust_body, { headers });
119
+ return this.http.post(this.env.compliancePost + 'createReport&reportId=' + object_id + '&isDelegate=0', entrust_body, { headers });
165
120
  }
166
121
  editResponsibility(objectId) {
167
122
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
168
- return this.http
169
- .get(this.env.complianceGet + 'complianceReport/reportById&id=' + objectId, { headers })
170
- .pipe(retry(2));
123
+ return this.http.get(this.env.complianceGet + 'complianceReport/reportById&id=' + objectId, { headers }).pipe(retry(2));
171
124
  }
172
125
  addBulkResponsibility(entrust_body) {
173
126
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
@@ -180,9 +133,7 @@ export class ResponsibilityService {
180
133
  }
181
134
  getCategoryDetailsById(id) {
182
135
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
183
- return this.http
184
- .get(this.env.complianceGet + 'complianceCategory/CategoryTreeById&id=' + id, { headers })
185
- .pipe(retry(2));
136
+ return this.http.get(this.env.complianceGet + 'complianceCategory/CategoryTreeById&id=' + id, { headers, }).pipe(retry(2));
186
137
  }
187
138
  getFrameWorkCount(params) {
188
139
  let httpOptions = {};
@@ -190,9 +141,7 @@ export class ResponsibilityService {
190
141
  if (params) {
191
142
  httpOptions.params = params;
192
143
  }
193
- return this.http
194
- .get(this.env.programEndpoint + '/frameworkcount', httpOptions)
195
- .pipe(retry(2));
144
+ return this.http.get(this.env.programEndpoint + '/frameworkcount', httpOptions).pipe(retry(2));
196
145
  }
197
146
  getFrameWorkList(params) {
198
147
  let httpOptions = {};
@@ -200,9 +149,7 @@ export class ResponsibilityService {
200
149
  if (params) {
201
150
  httpOptions.params = params;
202
151
  }
203
- return this.http
204
- .get(this.env.programEndpoint + '/framework', httpOptions)
205
- .pipe(retry(2));
152
+ return this.http.get(this.env.programEndpoint + '/framework', httpOptions).pipe(retry(2));
206
153
  }
207
154
  getFrameworkSubCategories(id, params) {
208
155
  let httpOptions = {};
@@ -210,9 +157,7 @@ export class ResponsibilityService {
210
157
  if (params) {
211
158
  httpOptions.params = params;
212
159
  }
213
- return this.http
214
- .get(this.env.programEndpoint + '/framework/' + id, httpOptions)
215
- .pipe(retry(2));
160
+ return this.http.get(this.env.programEndpoint + '/framework/' + id, httpOptions).pipe(retry(2));
216
161
  }
217
162
  getFrameworkControls(id, params) {
218
163
  let httpOptions = {};
@@ -220,38 +165,23 @@ export class ResponsibilityService {
220
165
  if (params) {
221
166
  httpOptions.params = params;
222
167
  }
223
- return this.http
224
- .get(this.env.programEndpoint + '/controls/' + id, httpOptions)
225
- .pipe(retry(2));
168
+ return this.http.get(this.env.programEndpoint + '/controls/' + id, httpOptions).pipe(retry(2));
226
169
  }
227
170
  fileUpload(file) {
228
171
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
229
- return this.http
230
- .post(this.env.compliancePost + 'file/upload', file, { headers })
231
- .pipe(retry(2));
172
+ return this.http.post(this.env.compliancePost + 'file/upload', file, { headers });
232
173
  }
233
174
  getAssessmentCategory(payload, program_ids) {
234
175
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
235
- return this.http
236
- .post(this.env.assessmentEnpoint +
237
- 'category/list&isCreateResponsibility=true' +
238
- (program_ids ? '&program_ids=' + program_ids : ''), payload, { headers })
239
- .pipe(retry(2));
176
+ return this.http.post(this.env.assessmentEnpoint + 'category/list&isCreateResponsibility=true' + (program_ids ? '&program_ids=' + program_ids : ''), payload, { headers }).pipe(retry(2));
240
177
  }
241
178
  getAssessmentList(payload, id, program_ids) {
242
179
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
243
- return this.http
244
- .post(this.env.assessmentEnpoint +
245
- 'assessment/selectAssessment&isCreateResponsibility=true&catid=' +
246
- id +
247
- (program_ids ? '&program_ids=' + program_ids : ''), payload, { headers })
248
- .pipe(retry(2));
180
+ return this.http.post(this.env.assessmentEnpoint + 'assessment/selectAssessment&isCreateResponsibility=true&catid=' + id + (program_ids ? '&program_ids=' + program_ids : ''), payload, { headers }).pipe(retry(2));
249
181
  }
250
182
  getAssessmentDetailsByID(id) {
251
183
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
252
- return this.http
253
- .post(this.env.assessmentEnpoint + 'assessment/getAssessmentById&id=' + id, {}, { headers })
254
- .pipe(retry(2));
184
+ return this.http.post(this.env.assessmentEnpoint + 'assessment/getAssessmentById&id=' + id, {}, { headers }).pipe(retry(2));
255
185
  }
256
186
  }
257
187
  ResponsibilityService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ResponsibilityService_Factory() { return new ResponsibilityService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.AuthService), i0.ɵɵinject(i3.Configurations, 8)); }, token: ResponsibilityService, providedIn: "root" });
@@ -265,4 +195,4 @@ ResponsibilityService.ctorParameters = () => [
265
195
  { type: AuthService },
266
196
  { type: Configurations, decorators: [{ type: Optional }] }
267
197
  ];
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2liaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFPN0MsTUFBTSxPQUFPLHFCQUFxQjtJQUloQyxZQUNVLElBQWdCLEVBQ2hCLFdBQXdCLEVBQ3BCLE1BQXVCO1FBRjNCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFKbEMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUF5UmpCLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzFCLDhCQUF5QixHQUFVLEVBQUUsQ0FBQztRQXBScEMsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsMkJBQTJCLENBQUMsTUFBbUI7O1FBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUNuQyxPQUFPLEVBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUN6QyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNi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SUFFRCxpQkFBaUIsQ0FBQyxPQUFZLEVBQUUsRUFBVSxFQUFFLFdBQW9CO1FBQzlELE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUNuQyxPQUFPLEVBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUN6QyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FDSCxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQjtZQUN4QixnRUFBZ0U7WUFDaEUsRUFBRTtZQUNGLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDcEQsT0FBTyxFQUNQLEVBQUUsT0FBTyxFQUFFLENBQ1o7YUFDQSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELHdCQUF3QixDQUFDLEVBQVU7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQ25DLE9BQU8sRUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQ3pDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUNILElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsa0NBQWtDLEdBQUcsRUFBRSxFQUNwRSxFQUFFLEVBQ0YsRUFBRSxPQUFPLEVBQUUsQ0FDWjthQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixDQUFDOzs7O1lBN1pGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBVlEsVUFBVTtZQUlWLFdBQVc7WUFEWCxjQUFjLHVCQWVsQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHJldHJ5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRMaXN0IH0gZnJvbSAnLi4vc2hhcmVkQ29tcG9uZW50cy9hc3Nlc3NtZW50LWxpc3Qvc2VydmljZS9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXNwb25zaWJpbGl0eVNlcnZpY2Uge1xyXG4gIGVudiE6IGFueTtcclxuICBkYXRhUGVyUGFnZSA9IDMwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgY29uZmlnPzogQ29uZmlndXJhdGlvbnNcclxuICApIHtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5lbnYgPSBjb25maWcuZW52Q29uZmlnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVzcG9uc2liaWxpdHlDZW50ZXJMaXN0KHBhcmFtcz86IEh0dHBQYXJhbXMpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52Py5jb21wbGlhbmNlR2V0ICsgJ3Jlc3BvbnNpYmlsaXR5Q2VudGVyVHJlZScsIHtcclxuICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgaGVhZGVycyxcclxuICAgICAgfSlcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JnYW5pemF0aW9uR3JvdXBzKHBhcmFtcz86IEh0dHBQYXJhbXMpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52Lm9yZ2FuaXphdGlvbkdldCArICdncm91cHNMaXN0JnN0YXR1cz0xJnR5cGU9Y29tcGxpYW5jZScsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgaGVhZGVycyxcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JnYW5pemF0aW9uUG9saWN5R3JvdXBzKHBhcmFtcz86IEh0dHBQYXJhbXMpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52Lm9yZ2FuaXphdGlvbkdldCArXHJcbiAgICAgICAgICAnZ3JvdXBzTGlzdCZwZXJtVHlwZT1tYW5hZ2VQb2xpY2llcyZmZXRjaF9hbGw9dHJ1ZScsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgaGVhZGVycyxcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JnYW5pemF0aW9uT3ZlcnNlZXJzR3JvdXBzKHBhcmFtcz86IEh0dHBQYXJhbXMpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52Lm9yZ2FuaXphdGlvbkdldCArICdncm91cHNMaXN0JmZldGNoX2FsbD10cnVlJywge1xyXG4gICAgICAgIHBhcmFtcyxcclxuICAgICAgICBoZWFkZXJzLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRPcmdhbml6YXRpb25Vc2VycygpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52Lm9yZ2FuaXphdGlvbkdldCArICdvcmdhbml6YXRpb25Vc2VycycsIHtcclxuICAgICAgICBoZWFkZXJzLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRPcmdhbml6YXRpb25QZW9wbGUocGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudi5vcmdhbml6YXRpb25HZXQgKyAncGVvcGxlJywge1xyXG4gICAgICAgIHBhcmFtcyxcclxuICAgICAgICBoZWFkZXJzLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25vcnNMaXN0KHBhcmFtcz86IEh0dHBQYXJhbXMpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52Py5vcmdhbml6YXRpb25HZXQgKyAnb3JnYW5pemF0aW9uVXNlcnMmaXNPbkJlaGFsZj0xJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRDYXRlZ29yaWVzTGlzdCgpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52Py5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9DYXRlZ29yeUxpc3RUcmVlJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG4gIGdldFByb2dyYW1zTGlzdChwYXJhbXM6IEh0dHBQYXJhbXMsIGlkcz86IGFueSkge1xyXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICBjb25zdCBwcm9ncmFtSWQgPSB7IHByb2dyYW1JZDogaWRzIH07XHJcbiAgICBpZiAoaWRzPy5sZW5ndGgpIHtcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuYXBwZW5kKCdwYXlsb2FkLW9iamVjdCcsIEpTT04uc3RyaW5naWZ5KHByb2dyYW1JZCkpO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wb3N0PGFueVtdPihcclxuICAgICAgICAgIHRoaXMuZW52Py5jb21wbGlhbmNlUG9zdCArICdjb21wbGlhbmNlQ2F0ZWdvcnkvcHJvZ3JhbUxpc3QnLFxyXG4gICAgICAgICAgcHJvZ3JhbUlkLFxyXG4gICAgICAgICAgeyBwYXJhbXMsIGhlYWRlcnMgfVxyXG4gICAgICAgIClcclxuICAgICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9wcm9ncmFtTGlzdCcsIHtcclxuICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgaGVhZGVycyxcclxuICAgICAgfSlcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZ3JhbXNMaXN0Q291bnQocGFyYW1zOiBIdHRwUGFyYW1zLCBpZHM/OiBhbnkpIHtcclxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PGFueVtdPihcclxuICAgICAgICB0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9wcm9ncmFtTGlzdENvdW50JyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG4gIGdldENhdGVnb3JpZXNVbmRlclByb2dyYW0ocGFyYW1zOiBIdHRwUGFyYW1zKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PGFueVtdPihcclxuICAgICAgICB0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9DYXRlZ29yeUxpc3RUcmVlJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG4gIGdldEFzc3VyYW5jZSgpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52LmFzc3VyYW5jZUdldCArICdjYXRlZ29yeS9saXN0JmlkPTEnLCB7XHJcbiAgICAgICAgaGVhZGVycyxcclxuICAgICAgfSlcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzdXJhbmNlRm9yUmVxdWlyZXNBdWRpdCgpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52LmFzc3VyYW5jZUFwaSArICdBdWRpdC9DYXRlZ29yeS9MaXN0Lz9tb2RlPWVudHJ1c3RfbW9kdWxlJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRSQ0RldGFpbHNPZkZyYW1ld29yayhyY19pZDogYW55LCBjYXRlZ29yeV9pZDogYW55KSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VHZXQgK1xyXG4gICAgICAgICdjb21wbGlhbmNlQ2F0ZWdvcnkvQ2F0ZWdvcnlSQ1RyZWVCeUlkJmlkPScgK1xyXG4gICAgICAgIGNhdGVnb3J5X2lkICtcclxuICAgICAgICAnJnJjX2lkPScgK1xyXG4gICAgICAgIHJjX2lkLFxyXG4gICAgICB7IGhlYWRlcnMgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdEVudHJ1c3QoZW50cnVzdF9ib2R5OiBhbnkpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VQb3N0ICsgJ2NyZWF0ZVJlcG9ydCcsXHJcbiAgICAgIGVudHJ1c3RfYm9keSxcclxuICAgICAgeyBoZWFkZXJzIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIHVwZGF0ZUVudHJ1c3QoZW50cnVzdF9ib2R5OiBhbnksIG9iamVjdF9pZDogYW55LCBpc0RlbGVnYXRlOiBhbnkpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VQb3N0ICtcclxuICAgICAgICAnY3JlYXRlUmVwb3J0JnJlcG9ydElkPScgK1xyXG4gICAgICAgIG9iamVjdF9pZCArXHJcbiAgICAgICAgJyZpc0RlbGVnYXRlPTAnLFxyXG4gICAgICBlbnRydXN0X2JvZHksXHJcbiAgICAgIHsgaGVhZGVycyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZWRpdFJlc3BvbnNpYmlsaXR5KG9iamVjdElkOiBhbnkpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQoXHJcbiAgICAgICAgdGhpcy5lbnYuY29tcGxpYW5jZUdldCArICdjb21wbGlhbmNlUmVwb3J0L3JlcG9ydEJ5SWQmaWQ9JyArIG9iamVjdElkLFxyXG4gICAgICAgIHsgaGVhZGVycyB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgYWRkQnVsa1Jlc3BvbnNpYmlsaXR5KGVudHJ1c3RfYm9keTogYW55KSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLmVudi5jb21wbGlhbmNlUG9zdCArICdpbXBvcnQvY3JlYXRlJyxcclxuICAgICAgZW50cnVzdF9ib2R5LFxyXG4gICAgICB7IGhlYWRlcnMgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZFRvTm9kZShwYXlsb2FkOiBhbnksIGRlczogYW55KSB7XHJcbiAgICAvLyBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueVtdPih0aGlzLmVudi5maWxlVXBsb2FkRW5kUG9pbnQgKyAncmlzay9yZXNwb25zaWJpbGl0eUNlbnRlckxpc3QnLCB7IHJjX2lkX2FycjogcmNBcnJheSA/PyBbXSB9LCB7IGhlYWRlcnMgfSkucGlwZShyZXRyeSgyKSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLmVudi5maWxlVXBsb2FkRW5kUG9pbnQgKyBkZXMsIHBheWxvYWQpO1xyXG4gIH1cclxuXHJcbiAgZmlsZXNVcGxvYWRpbmc6IGFueVtdID0gW107XHJcbiAgZmlsZXNVcGxvYWRlZDogYW55W10gPSBbXTtcclxuICBmaWxlc1VwbG9hZGVkQW5kVXBsb2FkaW5nOiBhbnlbXSA9IFtdO1xyXG5cclxuICBnZXRDYXRlZ29yeURldGFpbHNCeUlkKGlkOiBhbnkpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VHZXQgKyAnY29tcGxpYW5jZUNhdGVnb3J5L0NhdGVnb3J5VHJlZUJ5SWQmaWQ9JyArIGlkLFxyXG4gICAgICAgIHsgaGVhZGVycyB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RnJhbWVXb3JrQ291bnQocGFyYW1zPzogSHR0cFBhcmFtcykge1xyXG4gICAgbGV0IGh0dHBPcHRpb25zOiBhbnkgPSB7fTtcclxuICAgIGh0dHBPcHRpb25zLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgIGh0dHBPcHRpb25zLnBhcmFtcyA9IHBhcmFtcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYucHJvZ3JhbUVuZHBvaW50ICsgJy9mcmFtZXdvcmtjb3VudCcsIGh0dHBPcHRpb25zKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRGcmFtZVdvcmtMaXN0KHBhcmFtczogSHR0cFBhcmFtcykge1xyXG4gICAgbGV0IGh0dHBPcHRpb25zOiBhbnkgPSB7fTtcclxuICAgIGh0dHBPcHRpb25zLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgIGh0dHBPcHRpb25zLnBhcmFtcyA9IHBhcmFtcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYucHJvZ3JhbUVuZHBvaW50ICsgJy9mcmFtZXdvcmsnLCBodHRwT3B0aW9ucylcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuICBnZXRGcmFtZXdvcmtTdWJDYXRlZ29yaWVzKGlkOiBhbnksIHBhcmFtczogSHR0cFBhcmFtcykge1xyXG4gICAgbGV0IGh0dHBPcHRpb25zOiBhbnkgPSB7fTtcclxuICAgIGh0dHBPcHRpb25zLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgIGh0dHBPcHRpb25zLnBhcmFtcyA9IHBhcmFtcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYucHJvZ3JhbUVuZHBvaW50ICsgJy9mcmFtZXdvcmsvJyArIGlkLCBodHRwT3B0aW9ucylcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RnJhbWV3b3JrQ29udHJvbHMoaWQ6IGFueSwgcGFyYW1zOiBIdHRwUGFyYW1zKSB7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnM6IGFueSA9IHt9O1xyXG4gICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcclxuICAgICAgJ3Rva2VuJyxcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxyXG4gICAgKTtcclxuICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgaHR0cE9wdGlvbnMucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudi5wcm9ncmFtRW5kcG9pbnQgKyAnL2NvbnRyb2xzLycgKyBpZCwgaHR0cE9wdGlvbnMpXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIGZpbGVVcGxvYWQoZmlsZTogYW55KSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdCh0aGlzLmVudi5jb21wbGlhbmNlUG9zdCArICdmaWxlL3VwbG9hZCcsIGZpbGUsIHsgaGVhZGVycyB9KVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3Nlc3NtZW50Q2F0ZWdvcnkocGF5bG9hZDogYW55LCBwcm9ncmFtX2lkcz86IHN0cmluZykge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcclxuICAgICAgJ3Rva2VuJyxcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QoXHJcbiAgICAgICAgdGhpcy5lbnYuYXNzZXNzbWVudEVucG9pbnQgK1xyXG4gICAgICAgICAgJ2NhdGVnb3J5L2xpc3QmaXNDcmVhdGVSZXNwb25zaWJpbGl0eT10cnVlJyArXHJcbiAgICAgICAgICAocHJvZ3JhbV9pZHMgPyAnJnByb2dyYW1faWRzPScgKyBwcm9ncmFtX2lkcyA6ICcnKSxcclxuICAgICAgICBwYXlsb2FkLFxyXG4gICAgICAgIHsgaGVhZGVycyB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzZXNzbWVudExpc3QocGF5bG9hZDogYW55LCBpZDogc3RyaW5nLCBwcm9ncmFtX2lkcz86IHN0cmluZykge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcclxuICAgICAgJ3Rva2VuJyxcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8QXJyYXk8QXNzZXNzbWVudExpc3Q+PihcclxuICAgICAgICB0aGlzLmVudi5hc3Nlc3NtZW50RW5wb2ludCArXHJcbiAgICAgICAgICAnYXNzZXNzbWVudC9zZWxlY3RBc3Nlc3NtZW50JmlzQ3JlYXRlUmVzcG9uc2liaWxpdHk9dHJ1ZSZjYXRpZD0nICtcclxuICAgICAgICAgIGlkICtcclxuICAgICAgICAgIChwcm9ncmFtX2lkcyA/ICcmcHJvZ3JhbV9pZHM9JyArIHByb2dyYW1faWRzIDogJycpLFxyXG4gICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgeyBoZWFkZXJzIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3Nlc3NtZW50RGV0YWlsc0J5SUQoaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcclxuICAgICAgJ3Rva2VuJyxcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8QXJyYXk8QXNzZXNzbWVudExpc3Q+PihcclxuICAgICAgICB0aGlzLmVudi5hc3Nlc3NtZW50RW5wb2ludCArICdhc3Nlc3NtZW50L2dldEFzc2Vzc21lbnRCeUlkJmlkPScgKyBpZCxcclxuICAgICAgICB7fSxcclxuICAgICAgICB7IGhlYWRlcnMgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcbn1cclxuIl19
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2liaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFPN0MsTUFBTSxPQUFPLHFCQUFxQjtJQUloQyxZQUFvQixJQUFnQixFQUFVLFdBQXdCLEVBQWMsTUFBdUI7UUFBdkYsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRnRFLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBNklqQixtQkFBYyxHQUFVLEVBQUUsQ0FBQztRQUMzQixrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQUMxQiw4QkFBeUIsR0FBVSxFQUFFLENBQUM7UUE1SXBDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1NBRTdCO0lBQ0gsQ0FBQztJQUVELDJCQUEyQixDQUFDLE1BQW1COztRQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFDekYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdB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RSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFDekYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxnRUFBZ0UsR0FBRyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdPLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxFQUFVO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUN6RixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUF3QixJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLGtDQUFrQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNySixDQUFDOzs7O1lBeE5GLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBVlEsVUFBVTtZQUlWLFdBQVc7WUFEWCxjQUFjLHVCQVlvRCxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHJldHJ5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRMaXN0IH0gZnJvbSAnLi4vc2hhcmVkQ29tcG9uZW50cy9hc3Nlc3NtZW50LWxpc3Qvc2VydmljZS9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXNwb25zaWJpbGl0eVNlcnZpY2Uge1xyXG4gIGVudiAhOiBhbnk7XHJcbiAgZGF0YVBlclBhZ2UgPSAzMDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgQE9wdGlvbmFsKCkgY29uZmlnPzogQ29uZmlndXJhdGlvbnMpIHtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5lbnYgPSBjb25maWcuZW52Q29uZmlnO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdChwYXJhbXM/OiBIdHRwUGFyYW1zKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52Py5jb21wbGlhbmNlR2V0ICsgJ3Jlc3BvbnNpYmlsaXR5Q2VudGVyVHJlZScsIHtcclxuICAgICAgcGFyYW1zLCBoZWFkZXJzXHJcbiAgICB9KS5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRPcmdhbml6YXRpb25Hcm91cHMocGFyYW1zPzogSHR0cFBhcmFtcykge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmVudi5vcmdhbml6YXRpb25HZXQgKyAnZ3JvdXBzTGlzdCZzdGF0dXM9MSZ0eXBlPWNvbXBsaWFuY2UnLCB7XHJcbiAgICAgIHBhcmFtcywgaGVhZGVycyxcclxuICAgIH0pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JnYW5pemF0aW9uUG9saWN5R3JvdXBzKHBhcmFtcz86IEh0dHBQYXJhbXMpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4odGhpcy5lbnYub3JnYW5pemF0aW9uR2V0ICsgJ2dyb3Vwc0xpc3QmcGVybVR5cGU9bWFuYWdlUG9saWNpZXMmZmV0Y2hfYWxsPXRydWUnLCB7XHJcbiAgICAgIHBhcmFtcywgaGVhZGVycyxcclxuICAgIH0pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JnYW5pemF0aW9uT3ZlcnNlZXJzR3JvdXBzKHBhcmFtcz86IEh0dHBQYXJhbXMpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4odGhpcy5lbnYub3JnYW5pemF0aW9uR2V0ICsgJ2dyb3Vwc0xpc3QmZmV0Y2hfYWxsPXRydWUnLCB7XHJcbiAgICAgIHBhcmFtcywgaGVhZGVycyxcclxuICAgIH0pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JnYW5pemF0aW9uVXNlcnMoKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52Lm9yZ2FuaXphdGlvbkdldCArICdvcmdhbml6YXRpb25Vc2VycycsIHtcclxuICAgICAgaGVhZGVycyxcclxuICAgIH0pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JnYW5pemF0aW9uUGVvcGxlKHBhcmFtcz86IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmVudi5vcmdhbml6YXRpb25HZXQgKyAncGVvcGxlJywge1xyXG4gICAgICBwYXJhbXMsIGhlYWRlcnNcclxuICAgIH0pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzaWdub3JzTGlzdChwYXJhbXM/OiBIdHRwUGFyYW1zKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52Py5vcmdhbml6YXRpb25HZXQgKyAnb3JnYW5pemF0aW9uVXNlcnMmaXNPbkJlaGFsZj0xJywge1xyXG4gICAgICBwYXJhbXMsIGhlYWRlcnNcclxuICAgIH0pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2F0ZWdvcmllc0xpc3QoKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52Py5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9DYXRlZ29yeUxpc3RUcmVlJywge1xyXG4gICAgICBoZWFkZXJzLFxyXG4gICAgfSkucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG4gIGdldFByb2dyYW1zTGlzdChwYXJhbXM6IEh0dHBQYXJhbXMsIGlkcz86IGFueSkge1xyXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgICBjb25zdCBwcm9ncmFtSWQgPSB7cHJvZ3JhbUlkOiBpZHN9O1xyXG4gICAgaWYoaWRzPy5sZW5ndGgpIHtcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuYXBwZW5kKCdwYXlsb2FkLW9iamVjdCcsSlNPTi5zdHJpbmdpZnkocHJvZ3JhbUlkKSk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55W10+KHRoaXMuZW52Py5jb21wbGlhbmNlUG9zdCArICdjb21wbGlhbmNlQ2F0ZWdvcnkvcHJvZ3JhbUxpc3QnLHByb2dyYW1JZCwge3BhcmFtcywgaGVhZGVyc30pLnBpcGUocmV0cnkoMikpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9wcm9ncmFtTGlzdCcsIHtcclxuICAgICAgcGFyYW1zLCBoZWFkZXJzXHJcbiAgICB9KS5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1zTGlzdENvdW50KHBhcmFtczogSHR0cFBhcmFtcywgaWRzPzogYW55KSB7XHJcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9wcm9ncmFtTGlzdENvdW50Jywge1xyXG4gICAgICBwYXJhbXMsIGhlYWRlcnNcclxuICAgIH0pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuICBnZXRDYXRlZ29yaWVzVW5kZXJQcm9ncmFtKHBhcmFtczogSHR0cFBhcmFtcykge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9DYXRlZ29yeUxpc3RUcmVlJywge1xyXG4gICAgICBwYXJhbXMsIGhlYWRlcnNcclxuICAgIH0pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuICBnZXRBc3N1cmFuY2UoKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52LmFzc3VyYW5jZUdldCArICdjYXRlZ29yeS9saXN0JmlkPTEnLCB7XHJcbiAgICAgIGhlYWRlcnMsXHJcbiAgICB9KS5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIGdldEFzc3VyYW5jZUZvclJlcXVpcmVzQXVkaXQoKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52LmFzc3VyYW5jZUFwaSArICdBdWRpdC9DYXRlZ29yeS9MaXN0Lz9tb2RlPWVudHJ1c3RfbW9kdWxlJywge1xyXG4gICAgICBoZWFkZXJzLFxyXG4gICAgfSkucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRSQ0RldGFpbHNPZkZyYW1ld29yayhyY19pZDogYW55LCBjYXRlZ29yeV9pZDogYW55KSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5lbnYuY29tcGxpYW5jZUdldCArICdjb21wbGlhbmNlQ2F0ZWdvcnkvQ2F0ZWdvcnlSQ1RyZWVCeUlkJmlkPScgKyBjYXRlZ29yeV9pZCArICcmcmNfaWQ9JyArIHJjX2lkLCB7IGhlYWRlcnMgfSk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRFbnRydXN0KGVudHJ1c3RfYm9keTogYW55KSB7XHJcblxyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmVudi5jb21wbGlhbmNlUG9zdCArICdjcmVhdGVSZXBvcnQnLCBlbnRydXN0X2JvZHksIHsgaGVhZGVycyB9KTtcclxuICB9XHJcbiAgdXBkYXRlRW50cnVzdChlbnRydXN0X2JvZHk6IGFueSwgb2JqZWN0X2lkOiBhbnksIGlzRGVsZWdhdGU6IGFueSkge1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbnYuY29tcGxpYW5jZVBvc3QgKyAnY3JlYXRlUmVwb3J0JnJlcG9ydElkPScgKyBvYmplY3RfaWQgKyAnJmlzRGVsZWdhdGU9MCcsIGVudHJ1c3RfYm9keSwgeyBoZWFkZXJzIH0pO1xyXG4gIH1cclxuXHJcbiAgZWRpdFJlc3BvbnNpYmlsaXR5KG9iamVjdElkOiBhbnkpIHtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5lbnYuY29tcGxpYW5jZUdldCArICdjb21wbGlhbmNlUmVwb3J0L3JlcG9ydEJ5SWQmaWQ9JyArIG9iamVjdElkLCB7IGhlYWRlcnMgfSkucGlwZShyZXRyeSgyKSk7XHJcblxyXG4gIH1cclxuXHJcbiAgYWRkQnVsa1Jlc3BvbnNpYmlsaXR5KGVudHJ1c3RfYm9keTogYW55KSB7XHJcblxyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmVudi5jb21wbGlhbmNlUG9zdCArICdpbXBvcnQvY3JlYXRlJywgZW50cnVzdF9ib2R5LCB7IGhlYWRlcnMgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgdXBsb2FkVG9Ob2RlKHBheWxvYWQ6IGFueSwgZGVzOiBhbnkpIHtcclxuICAgIC8vIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55W10+KHRoaXMuZW52LmZpbGVVcGxvYWRFbmRQb2ludCArICdyaXNrL3Jlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdCcsIHsgcmNfaWRfYXJyOiByY0FycmF5ID8/IFtdIH0sIHsgaGVhZGVycyB9KS5waXBlKHJldHJ5KDIpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHRoaXMuZW52LmZpbGVVcGxvYWRFbmRQb2ludCArIGRlcywgcGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICBmaWxlc1VwbG9hZGluZzogYW55W10gPSBbXTtcclxuICBmaWxlc1VwbG9hZGVkOiBhbnlbXSA9IFtdO1xyXG4gIGZpbGVzVXBsb2FkZWRBbmRVcGxvYWRpbmc6IGFueVtdID0gW107XHJcblxyXG5cclxuICBnZXRDYXRlZ29yeURldGFpbHNCeUlkKGlkOiBhbnkpIHtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52LmNvbXBsaWFuY2VHZXQgKyAnY29tcGxpYW5jZUNhdGVnb3J5L0NhdGVnb3J5VHJlZUJ5SWQmaWQ9JyArIGlkLFxyXG4gICAgICB7IGhlYWRlcnMsIH0pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RnJhbWVXb3JrQ291bnQocGFyYW1zPzogSHR0cFBhcmFtcykge1xyXG4gICAgbGV0IGh0dHBPcHRpb25zOiBhbnkgPSB7fTtcclxuICAgIGh0dHBPcHRpb25zLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgIGh0dHBPcHRpb25zLnBhcmFtcyA9IHBhcmFtcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmVudi5wcm9ncmFtRW5kcG9pbnQgKyAnL2ZyYW1ld29ya2NvdW50JywgaHR0cE9wdGlvbnMpLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RnJhbWVXb3JrTGlzdChwYXJhbXM6IEh0dHBQYXJhbXMpIHtcclxuICAgIGxldCBodHRwT3B0aW9uczogYW55ID0ge307XHJcbiAgICBodHRwT3B0aW9ucy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgaWYgKHBhcmFtcykge1xyXG4gICAgICBodHRwT3B0aW9ucy5wYXJhbXMgPSBwYXJhbXM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4odGhpcy5lbnYucHJvZ3JhbUVuZHBvaW50ICsgJy9mcmFtZXdvcmsnLCBodHRwT3B0aW9ucykucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG4gIGdldEZyYW1ld29ya1N1YkNhdGVnb3JpZXMoaWQ6IGFueSwgcGFyYW1zOiBIdHRwUGFyYW1zKSB7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnM6IGFueSA9IHt9O1xyXG4gICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgaHR0cE9wdGlvbnMucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52LnByb2dyYW1FbmRwb2ludCArICcvZnJhbWV3b3JrLycgKyBpZCxcclxuICAgICAgaHR0cE9wdGlvbnMpLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RnJhbWV3b3JrQ29udHJvbHMoaWQ6IGFueSwgcGFyYW1zOiBIdHRwUGFyYW1zKSB7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnM6IGFueSA9IHt9O1xyXG4gICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgaHR0cE9wdGlvbnMucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52LnByb2dyYW1FbmRwb2ludCArICcvY29udHJvbHMvJyArIGlkLFxyXG4gICAgICBodHRwT3B0aW9ucykucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGZpbGVVcGxvYWQoZmlsZTogYW55KSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZW52LmNvbXBsaWFuY2VQb3N0ICsgJ2ZpbGUvdXBsb2FkJywgZmlsZSwgeyBoZWFkZXJzIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldEFzc2Vzc21lbnRDYXRlZ29yeShwYXlsb2FkOiBhbnksIHByb2dyYW1faWRzPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZW52LmFzc2Vzc21lbnRFbnBvaW50ICsgJ2NhdGVnb3J5L2xpc3QmaXNDcmVhdGVSZXNwb25zaWJpbGl0eT10cnVlJyArIChwcm9ncmFtX2lkcyA/ICcmcHJvZ3JhbV9pZHM9JyArIHByb2dyYW1faWRzIDogJycpLCBwYXlsb2FkLCB7IGhlYWRlcnMgfSkucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3Nlc3NtZW50TGlzdChwYXlsb2FkOiBhbnksIGlkOiBzdHJpbmcsIHByb2dyYW1faWRzPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFycmF5PEFzc2Vzc21lbnRMaXN0Pj4odGhpcy5lbnYuYXNzZXNzbWVudEVucG9pbnQgKyAnYXNzZXNzbWVudC9zZWxlY3RBc3Nlc3NtZW50JmlzQ3JlYXRlUmVzcG9uc2liaWxpdHk9dHJ1ZSZjYXRpZD0nICsgaWQgKyAocHJvZ3JhbV9pZHMgPyAnJnByb2dyYW1faWRzPScgKyBwcm9ncmFtX2lkcyA6ICcnKSwgcGF5bG9hZCwgeyBoZWFkZXJzIH0pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzZXNzbWVudERldGFpbHNCeUlEKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXJyYXk8QXNzZXNzbWVudExpc3Q+Pih0aGlzLmVudi5hc3Nlc3NtZW50RW5wb2ludCArICdhc3Nlc3NtZW50L2dldEFzc2Vzc21lbnRCeUlkJmlkPScgKyBpZCwge30sIHsgaGVhZGVycyB9KS5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=