@valtimo/dossier 12.4.1 → 12.5.0

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 (23) hide show
  1. package/esm2022/lib/components/dossier-detail/dossier-detail.component.mjs +74 -39
  2. package/esm2022/lib/components/dossier-detail/tab/widgets/components/widgets-container/widgets-container.component.mjs +3 -3
  3. package/esm2022/lib/components/dossier-detail-task-detail/dossier-detail-task-detail.component.mjs +3 -3
  4. package/esm2022/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.mjs +13 -6
  5. package/esm2022/lib/components/dossier-list/dossier-list.component.mjs +6 -5
  6. package/esm2022/lib/components/dossier-list-actions/dossier-list-actions.component.mjs +30 -8
  7. package/esm2022/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.mjs +13 -4
  8. package/esm2022/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.mjs +13 -16
  9. package/esm2022/lib/components/note-modal/note-modal.component.mjs +1 -1
  10. package/fesm2022/valtimo-dossier.mjs +151 -86
  11. package/fesm2022/valtimo-dossier.mjs.map +1 -1
  12. package/lib/components/dossier-detail/dossier-detail.component.d.ts +18 -11
  13. package/lib/components/dossier-detail/dossier-detail.component.d.ts.map +1 -1
  14. package/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.d.ts +4 -2
  15. package/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.d.ts.map +1 -1
  16. package/lib/components/dossier-list/dossier-list.component.d.ts.map +1 -1
  17. package/lib/components/dossier-list-actions/dossier-list-actions.component.d.ts +9 -2
  18. package/lib/components/dossier-list-actions/dossier-list-actions.component.d.ts.map +1 -1
  19. package/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.d.ts +2 -1
  20. package/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.d.ts.map +1 -1
  21. package/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts +6 -8
  22. package/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts.map +1 -1
  23. package/package.json +1 -1
@@ -153,6 +153,7 @@ export class DossierListComponent {
153
153
  this.listService.forceRefresh$,
154
154
  this._hasEnvColumnConfig$,
155
155
  this._hasApiColumnConfig$,
156
+ this.statusService.caseStatuses$,
156
157
  ]).pipe(debounceTime(50))), distinctUntilChanged(([prevSearchRequest, prevAssigneeFilter, prevSearchFieldValues, prevSelectedStatuses, prevForceRefresh,], [currSearchRequest, currAssigneeFilter, currSearchFieldValues, currSelectedStatuses, currForceRefresh,]) => isEqual({
157
158
  ...prevSearchRequest,
158
159
  assignee: prevAssigneeFilter,
@@ -165,7 +166,7 @@ export class DossierListComponent {
165
166
  ...currSearchFieldValues,
166
167
  ...currSelectedStatuses.map((status) => status.key),
167
168
  forceRefresh: currForceRefresh,
168
- })), switchMap(([documentSearchRequest, assigneeFilter, searchValues, selectedStatuses, _, hasEnvColumnConfig, hasApiColumnConfig,]) => {
169
+ })), switchMap(([documentSearchRequest, assigneeFilter, searchValues, selectedStatuses, _, hasEnvColumnConfig, hasApiColumnConfig, allStatuses,]) => {
169
170
  const obsEnv = of(hasEnvColumnConfig);
170
171
  const obsApi = of(hasApiColumnConfig);
171
172
  const statusKeys = selectedStatuses.map((status) => status.key === CASES_WITHOUT_STATUS_KEY ? null : status.key);
@@ -177,7 +178,7 @@ export class DossierListComponent {
177
178
  hasEnvColumnConfig: obsEnv,
178
179
  hasApiColumnConfig: obsApi,
179
180
  isSearchResult: of(true),
180
- selectedStatuses: of(selectedStatuses),
181
+ allStatuses: of(allStatuses),
181
182
  });
182
183
  }
183
184
  return forkJoin({
@@ -187,7 +188,7 @@ export class DossierListComponent {
187
188
  hasEnvColumnConfig: obsEnv,
188
189
  hasApiColumnConfig: obsApi,
189
190
  isSearchResult: of(false),
190
- selectedStatuses: of(selectedStatuses),
191
+ allStatuses: of(allStatuses),
191
192
  });
192
193
  }), switchMap(res => combineLatest([
193
194
  of(res),
@@ -212,7 +213,7 @@ export class DossierListComponent {
212
213
  this.updateNoResultsMessage(res.isSearchResult);
213
214
  return {
214
215
  data: this.listService.mapDocuments(res.documents, res.hasEnvColumnConfig, res.hasApiColumnConfig),
215
- statuses: res.selectedStatuses,
216
+ statuses: res.allStatuses,
216
217
  };
217
218
  }), map(res => {
218
219
  if (!Array.isArray(res.data))
@@ -412,4 +413,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
412
413
  type: ViewChild,
413
414
  args: [Tabs]
414
415
  }] } });
415
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUMsU0FBUyxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJdEUsT0FBTyxFQUVMLG1CQUFtQixFQUduQix3QkFBd0IsRUFJeEIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFXN0IsT0FBTyxFQUVMLGlDQUFpQyxFQUtqQyx1QkFBdUIsR0FFeEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQU0sSUFBSSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osY0FBYyxFQUNkLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFFSCxFQUFFLEVBRUYsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLCtCQUErQixFQUMvQiwrQkFBK0IsR0FDaEMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHdCQUF3QixFQUN4QixrQ0FBa0MsR0FDbkMsTUFBTSxtQkFBbUIsQ0FBQztBQUMz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QXNCLENBQUMsY0FBdUI7UUFDcEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDekIsY0FBYztZQUNaLENBQUMsQ0FBQztnQkFDRSxXQUFXLEVBQUUsc0NBQXNDO2dCQUNuRCxjQUFjO2dCQUNkLEtBQUssRUFBRSxnQ0FBZ0M7YUFDeEM7WUFDSCxDQUFDLENBQUM7Z0JBQ0UsV0FBVyxFQUFFLHFCQUFxQixJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssY0FBYztnQkFDdkUsY0FBYztnQkFDZCxLQUFLLEVBQUUscUJBQXFCLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxRQUFRO2FBQzVELENBQ04sQ0FBQztJQUNKLENBQUM7K0dBL2lCVSxvQkFBb0I7bUdBQXBCLG9CQUFvQiwrQ0FWcEI7WUFDVCxrQkFBa0I7WUFDbEIsb0JBQW9CO1lBQ3BCLDBCQUEwQjtZQUMxQix1QkFBdUI7WUFDdkIsNEJBQTRCO1lBQzVCLHdCQUF3QjtZQUN4Qix3QkFBd0I7U0FDekIsc0VBR1UsbUJBQW1CLHVGQUNuQiwyQkFBMkIsZ0ZBQzNCLElBQUksZ0RDNUdqQixtak9BeU1BOzs0RkRoR2Esb0JBQW9CO2tCQWRoQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQjt3QkFDVCxrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3dCQUN4Qix3QkFBd0I7cUJBQ3pCO21sQkFHK0IsVUFBVTtzQkFBekMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ1Usb0JBQW9CO3NCQUEzRCxTQUFTO3VCQUFDLDJCQUEyQjtnQkFDckIsYUFBYTtzQkFBN0IsU0FBUzt1QkFBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFBhcmFtcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UGVybWlzc2lvblNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2FjY2Vzcy1jb250cm9sJztcbmltcG9ydCB7XG4gIEJyZWFkY3J1bWJTZXJ2aWNlLFxuICBDYXJib25MaXN0Q29tcG9uZW50LFxuICBDYXJib25MaXN0Tm9SZXN1bHRzTWVzc2FnZSxcbiAgQ2FyYm9uUGFnaW5hdGlvblNlbGVjdGlvbixcbiAgQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZLFxuICBMaXN0RmllbGQsXG4gIFBhZ2VUaXRsZVNlcnZpY2UsXG4gIFBhZ2luYXRpb24sXG4gIFZpZXdUeXBlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEFzc2lnbmVlRmlsdGVyLFxuICBDb25maWdTZXJ2aWNlLFxuICBEZWZpbml0aW9uQ29sdW1uLFxuICBEaXJlY3Rpb24sXG4gIERvc3NpZXJMaXN0VGFiLFxuICBTZWFyY2hGaWVsZCxcbiAgU2VhcmNoRmllbGRWYWx1ZXMsXG4gIFNvcnRTdGF0ZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7XG4gIEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwsXG4gIERvY3VtZW50LFxuICBEb2N1bWVudHMsXG4gIERvY3VtZW50U2VydmljZSxcbiAgSW50ZXJuYWxDYXNlU3RhdHVzLFxuICBJbnRlcm5hbENhc2VTdGF0dXNVdGlscyxcbiAgU3BlY2lmaWVkRG9jdW1lbnRzLFxufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1RhYiwgVGFic30gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge2lzRXF1YWx9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGVmYXVsdElmRW1wdHksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZvcmtKb2luLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgREVGQVVMVF9ET1NTSUVSX0xJU1RfVEFCUyxcbiAgRE9TU0lFUl9MSVNUX05PX1JFU1VMVFNfTUVTU0FHRSxcbiAgRE9TU0lFUl9MSVNUX1RBQkxFX1RSQU5TTEFUSU9OUyxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIENBTl9DUkVBVEVfQ0FTRV9QRVJNSVNTSU9OLFxuICBDQU5fVklFV19DQVNFX1BFUk1JU1NJT04sXG4gIERPU1NJRVJfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UsXG59IGZyb20gJy4uLy4uL3Blcm1pc3Npb25zJztcbmltcG9ydCB7XG4gIERvc3NpZXJCdWxrQXNzaWduU2VydmljZSxcbiAgRG9zc2llckNvbHVtblNlcnZpY2UsXG4gIERvc3NpZXJMaXN0QXNzaWduZWVTZXJ2aWNlLFxuICBEb3NzaWVyTGlzdFBhZ2luYXRpb25TZXJ2aWNlLFxuICBEb3NzaWVyTGlzdFNlYXJjaFNlcnZpY2UsXG4gIERvc3NpZXJMaXN0U2VydmljZSxcbiAgRG9zc2llckxpc3RTdGF0dXNTZXJ2aWNlLFxuICBEb3NzaWVyUGFyYW1ldGVyU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtEb3NzaWVyTGlzdEFjdGlvbnNDb21wb25lbnR9IGZyb20gJy4uL2Rvc3NpZXItbGlzdC1hY3Rpb25zL2Rvc3NpZXItbGlzdC1hY3Rpb25zLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBEb3NzaWVyTGlzdFNlcnZpY2UsXG4gICAgRG9zc2llckNvbHVtblNlcnZpY2UsXG4gICAgRG9zc2llckxpc3RBc3NpZ25lZVNlcnZpY2UsXG4gICAgRG9zc2llclBhcmFtZXRlclNlcnZpY2UsXG4gICAgRG9zc2llckxpc3RQYWdpbmF0aW9uU2VydmljZSxcbiAgICBEb3NzaWVyTGlzdFNlYXJjaFNlcnZpY2UsXG4gICAgRG9zc2llckxpc3RTdGF0dXNTZXJ2aWNlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChDYXJib25MaXN0Q29tcG9uZW50KSBjYXJib25MaXN0OiBDYXJib25MaXN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKERvc3NpZXJMaXN0QWN0aW9uc0NvbXBvbmVudCkgbGlzdEFjdGlvbnNDb21wb25lbnQ6IERvc3NpZXJMaXN0QWN0aW9uc0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChUYWJzKSB0YWJzQ29tcG9uZW50OiBUYWJzO1xuXG4gIHB1YmxpYyBhY3RpdmVUYWI6IERvc3NpZXJMaXN0VGFiID0gbnVsbDtcbiAgcHVibGljIGxvYWRpbmdGaWVsZHMgPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ1BhZ2luYXRpb24gPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ1NlYXJjaEZpZWxkcyA9IHRydWU7XG4gIHB1YmxpYyBsb2FkaW5nQXNzaWduZWVGaWx0ZXIgPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ0RvY3VtZW50SXRlbXMgPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ1N0YXR1c2VzID0gdHJ1ZTtcbiAgcHVibGljIHBhZ2luYXRpb24hOiBQYWdpbmF0aW9uO1xuICBwdWJsaWMgY2FuSGF2ZUFzc2lnbmVlITogYm9vbGVhbjtcbiAgcHVibGljIHZpc2libGVEb3NzaWVyVGFiczogQXJyYXk8RG9zc2llckxpc3RUYWI+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRUYWJzID0gREVGQVVMVF9ET1NTSUVSX0xJU1RfVEFCUztcbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlVHJhbnNsYXRpb25zID0gRE9TU0lFUl9MSVNUX1RBQkxFX1RSQU5TTEFUSU9OUztcblxuICBwdWJsaWMgcmVhZG9ubHkgbm9SZXN1bHRzTWVzc2FnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3ROb1Jlc3VsdHNNZXNzYWdlPihcbiAgICBET1NTSUVSX0xJU1RfTk9fUkVTVUxUU19NRVNTQUdFXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBkaXNhYmxlU3RhcnRCdXR0b24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93QXNzaWduTW9kYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93Q2hhbmdlUGFnZU1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0NoYW5nZVRhYk1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZWFyY2hGaWVsZHMkOiBPYnNlcnZhYmxlPEFycmF5PFNlYXJjaEZpZWxkPiB8IG51bGw+ID1cbiAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZG9jdW1lbnRTZWFyY2hGaWVsZHMkLnBpcGUodGFwKCgpID0+ICh0aGlzLmxvYWRpbmdTZWFyY2hGaWVsZHMgPSBmYWxzZSkpKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzZXMkID0gdGhpcy5zdGF0dXNTZXJ2aWNlLmNhc2VTdGF0dXNlcyQucGlwZShcbiAgICB0YXAoKCkgPT4gKHRoaXMubG9hZGluZ1N0YXR1c2VzID0gZmFsc2UpKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRTdGF0dXNlcyQgPSB0aGlzLnN0YXR1c1NlcnZpY2Uuc2VsZWN0ZWRDYXNlU3RhdHVzZXMkO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJCA9IHRoaXMubGlzdFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkRG9jdW1lbnRJZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBzY2hlbWEkID0gdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudERlZmluaXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICApLFxuICAgIG1hcChkb2N1bWVudERlZmluaXRpb24gPT4gZG9jdW1lbnREZWZpbml0aW9uPy5zY2hlbWEpLFxuICAgIHRhcChzY2hlbWEgPT4ge1xuICAgICAgaWYgKHNjaGVtYT8udGl0bGUpIHtcbiAgICAgICAgdGhpcy5wYWdlVGl0bGVTZXJ2aWNlLnNldEN1c3RvbVBhZ2VUaXRsZShzY2hlbWE/LnRpdGxlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuQ3JlYXRlRG9jdW1lbnQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9DUkVBVEVfQ0FTRV9QRVJNSVNTSU9OLCB7XG4gICAgICAgIHJlc291cmNlOiBET1NTSUVSX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLmpzb25TY2hlbWFEb2N1bWVudERlZmluaXRpb24sXG4gICAgICAgIGlkZW50aWZpZXI6IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoRmllbGRWYWx1ZXMkID0gdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLnNlYXJjaEZpZWxkVmFsdWVzJDtcbiAgcHVibGljIHJlYWRvbmx5IGFzc2lnbmVlRmlsdGVyJDogT2JzZXJ2YWJsZTxBc3NpZ25lZUZpbHRlcj4gPVxuICAgIHRoaXMuYXNzaWduZWVTZXJ2aWNlLmFzc2lnbmVlRmlsdGVyJC5waXBlKFxuICAgICAgdGFwKGFzc2lnbmVlRmlsdGVyID0+ICh0aGlzLmFjdGl2ZVRhYiA9IGFzc2lnbmVlRmlsdGVyIGFzIERvc3NpZXJMaXN0VGFiKSlcbiAgICApO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnaW5hdGlvbkNoYW5nZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvblBhZ2luYXRpb25TZWxlY3Rpb24gfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHRhYkNoYW5nZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERvc3NpZXJMaXN0VGFiIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2luYXRpb24kID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdpbmF0aW9uJC5waXBlKFxuICAgIHRhcChwYWdpbmF0aW9uID0+IHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHBhZ2luYXRpb247XG4gICAgICB0aGlzLmxvYWRpbmdQYWdpbmF0aW9uID0gZmFsc2U7XG4gICAgfSlcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFzRW52Q29sdW1uQ29uZmlnJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubGlzdFNlcnZpY2UuaGFzRW52Q29sdW1uQ29uZmlnJDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFzQXBpQ29sdW1uQ29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYW5IYXZlQXNzaWduZWUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5hc3NpZ25lZVNlcnZpY2UuY2FuSGF2ZUFzc2lnbmVlJDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1ucyQ6IE9ic2VydmFibGU8QXJyYXk8RGVmaW5pdGlvbkNvbHVtbj4+ID1cbiAgICB0aGlzLmxpc3RTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICB0aGlzLmNvbHVtblNlcnZpY2UuZ2V0RGVmaW5pdGlvbkNvbHVtbnMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgICksXG4gICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgdGhpcy5faGFzQXBpQ29sdW1uQ29uZmlnJC5uZXh0KHJlcy5oYXNBcGlDb25maWcpO1xuICAgICAgICByZXR1cm4gcmVzLmNvbHVtbnM7XG4gICAgICB9KSxcbiAgICAgIHRhcChjb2x1bW5zID0+IHtcbiAgICAgICAgdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNldFBhZ2luYXRpb24oY29sdW1ucyk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaG93U3RhdHVzU2VsZWN0b3IkID0gdGhpcy5zdGF0dXNTZXJ2aWNlLnNob3dTdGF0dXNTZWxlY3RvciQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdHVzRmllbGQ6IExpc3RGaWVsZCA9IHtcbiAgICBsYWJlbDogJ2RvY3VtZW50LnN0YXR1cycsXG4gICAga2V5OiAnaW50ZXJuYWxTdGF0dXMnLFxuICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5UQUdTLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICB9O1xuICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0RmllbGQ+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2NhbkhhdmVBc3NpZ25lZSQsXG4gICAgdGhpcy5fY29sdW1ucyQsXG4gICAgdGhpcy5faGFzRW52Q29sdW1uQ29uZmlnJCxcbiAgICB0aGlzLl9oYXNBcGlDb2x1bW5Db25maWckLFxuICAgIHRoaXMuc3RhdHVzZXMkLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIHRhcCgoW2NhbkhhdmVBc3NpZ25lZV0pID0+IHtcbiAgICAgIHRoaXMuY2FuSGF2ZUFzc2lnbmVlID0gY2FuSGF2ZUFzc2lnbmVlO1xuICAgIH0pLFxuICAgIG1hcCgoW2NhbkhhdmVBc3NpZ25lZSwgY29sdW1ucywgaGFzRW52Q29uZmlnLCBoYXNBcGlDb25maWcsIHN0YXR1c2VzXSkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRBc3NpZ25lZUNvbHVtbnMgPSB0aGlzLmFzc2lnbmVlU2VydmljZS5maWx0ZXJBc3NpZ25lZUNvbHVtbnMoXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGNhbkhhdmVBc3NpZ25lZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZHMgPSB0aGlzLmNvbHVtblNlcnZpY2UubWFwRGVmaW5pdGlvbkNvbHVtbnNUb0xpc3RGaWVsZHMoXG4gICAgICAgIGZpbHRlcmVkQXNzaWduZWVDb2x1bW5zLFxuICAgICAgICBoYXNFbnZDb25maWcsXG4gICAgICAgIGhhc0FwaUNvbmZpZ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGZpZWxkc1RvUmV0dXJuID0gdGhpcy5hc3NpZ25lZVNlcnZpY2UuYWRkQXNzaWduZWVMaXN0RmllbGQoXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGxpc3RGaWVsZHMsXG4gICAgICAgIGNhbkhhdmVBc3NpZ25lZVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHN0YXR1c2VzLnNvbWUoXG4gICAgICAgIChzdGF0dXM6IEludGVybmFsQ2FzZVN0YXR1cykgPT4gc3RhdHVzLmtleSAhPT0gQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZXG4gICAgICApICYmICFoYXNBcGlDb25maWdcbiAgICAgICAgPyBbLi4uZmllbGRzVG9SZXR1cm4sIHRoaXMuX3N0YXR1c0ZpZWxkXVxuICAgICAgICA6IGZpZWxkc1RvUmV0dXJuO1xuICAgIH0pLFxuICAgIHRhcChsaXN0RmllbGRzID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRMaXN0RmllbGQgPSBsaXN0RmllbGRzLmZpbmQoZmllbGQgPT4gZmllbGQuZGVmYXVsdCk7XG4gICAgICAvLyBzZXQgZGVmYXVsdCBzb3J0IHN0YXRlIGlmIG5vIHBhZ2luYXRpb24gcXVlcnkgcGFyYW1ldGVycyBmb3Igc29ydGluZyBhcmUgYXZhaWxhYmxlXG4gICAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UucXVlcnlQYWdpbmF0aW9uUGFyYW1zJFxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKHF1ZXJ5UGFnaW5hdGlvblBhcmFtcyA9PiB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRMaXN0RmllbGQgJiYgIXF1ZXJ5UGFnaW5hdGlvblBhcmFtcz8uc29ydD8uaXNTb3J0aW5nKSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0RGlyZWN0aW9uID1cbiAgICAgICAgICAgICAgdHlwZW9mIGRlZmF1bHRMaXN0RmllbGQuZGVmYXVsdCA9PT0gJ3N0cmluZycgPyBkZWZhdWx0TGlzdEZpZWxkLmRlZmF1bHQgOiAnREVTQyc7XG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNvcnRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgaXNTb3J0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICBzdGF0ZToge25hbWU6IGRlZmF1bHRMaXN0RmllbGQua2V5LCBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gYXMgRGlyZWN0aW9ufSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSksXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZ0ZpZWxkcyA9IGZhbHNlO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnRTZWFyY2hSZXF1ZXN0JDogT2JzZXJ2YWJsZTxBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdD4gPVxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3BhZ2luYXRpb24kLCB0aGlzLmxpc3RTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW3BhZ2luYXRpb25dKSA9PiAhIXBhZ2luYXRpb24pLFxuICAgICAgbWFwKChbcGFnaW5hdGlvbiwgZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+IHtcbiAgICAgICAgY29uc3QgcGFnZSA9IHBhZ2luYXRpb24ucGFnZSAtIDE7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwoXG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICBwYWdlID49IDAgPyBwYWdlIDogMCxcbiAgICAgICAgICBwYWdpbmF0aW9uLnNpemUsXG4gICAgICAgICAgcGFnaW5hdGlvbi5zb3J0XG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50SXRlbXMkOiBPYnNlcnZhYmxlPGFueVtdPiA9IHRoaXMubGlzdFNlcnZpY2UuY2hlY2tSZWZyZXNoJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuX2RvY3VtZW50U2VhcmNoUmVxdWVzdCQsXG4gICAgICAgIHRoaXMuYXNzaWduZWVGaWx0ZXIkLFxuICAgICAgICB0aGlzLnNlYXJjaEZpZWxkVmFsdWVzJCxcbiAgICAgICAgdGhpcy5zdGF0dXNTZXJ2aWNlLnNlbGVjdGVkQ2FzZVN0YXR1c2VzJCxcbiAgICAgICAgdGhpcy5saXN0U2VydmljZS5mb3JjZVJlZnJlc2gkLFxuICAgICAgICB0aGlzLl9oYXNFbnZDb2x1bW5Db25maWckLFxuICAgICAgICB0aGlzLl9oYXNBcGlDb2x1bW5Db25maWckLFxuICAgICAgXSkucGlwZShkZWJvdW5jZVRpbWUoNTApKVxuICAgICksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAoXG4gICAgICAgIFtcbiAgICAgICAgICBwcmV2U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICBwcmV2QXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgcHJldlNlYXJjaEZpZWxkVmFsdWVzLFxuICAgICAgICAgIHByZXZTZWxlY3RlZFN0YXR1c2VzLFxuICAgICAgICAgIHByZXZGb3JjZVJlZnJlc2gsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICBjdXJyU2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICBjdXJyQXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgY3VyclNlYXJjaEZpZWxkVmFsdWVzLFxuICAgICAgICAgIGN1cnJTZWxlY3RlZFN0YXR1c2VzLFxuICAgICAgICAgIGN1cnJGb3JjZVJlZnJlc2gsXG4gICAgICAgIF1cbiAgICAgICkgPT5cbiAgICAgICAgaXNFcXVhbChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5wcmV2U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAgIGFzc2lnbmVlOiBwcmV2QXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgICAuLi5wcmV2U2VhcmNoRmllbGRWYWx1ZXMsXG4gICAgICAgICAgICAuLi5wcmV2U2VsZWN0ZWRTdGF0dXNlcy5tYXAoKHN0YXR1czogSW50ZXJuYWxDYXNlU3RhdHVzKSA9PiBzdGF0dXMua2V5KSxcbiAgICAgICAgICAgIGZvcmNlUmVmcmVzaDogcHJldkZvcmNlUmVmcmVzaCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmN1cnJTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgYXNzaWduZWU6IGN1cnJBc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgIC4uLmN1cnJTZWFyY2hGaWVsZFZhbHVlcyxcbiAgICAgICAgICAgIC4uLmN1cnJTZWxlY3RlZFN0YXR1c2VzLm1hcCgoc3RhdHVzOiBJbnRlcm5hbENhc2VTdGF0dXMpID0+IHN0YXR1cy5rZXkpLFxuICAgICAgICAgICAgZm9yY2VSZWZyZXNoOiBjdXJyRm9yY2VSZWZyZXNoLFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICksXG4gICAgc3dpdGNoTWFwKFxuICAgICAgKFtcbiAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgc2VhcmNoVmFsdWVzLFxuICAgICAgICBzZWxlY3RlZFN0YXR1c2VzLFxuICAgICAgICBfLFxuICAgICAgICBoYXNFbnZDb2x1bW5Db25maWcsXG4gICAgICAgIGhhc0FwaUNvbHVtbkNvbmZpZyxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3Qgb2JzRW52OiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YoaGFzRW52Q29sdW1uQ29uZmlnKTtcbiAgICAgICAgY29uc3Qgb2JzQXBpOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YoaGFzQXBpQ29sdW1uQ29uZmlnKTtcbiAgICAgICAgY29uc3Qgc3RhdHVzS2V5czogKHN0cmluZyB8IG51bGwpW10gPSBzZWxlY3RlZFN0YXR1c2VzLm1hcCgoc3RhdHVzOiBJbnRlcm5hbENhc2VTdGF0dXMpID0+XG4gICAgICAgICAgc3RhdHVzLmtleSA9PT0gQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZID8gbnVsbCA6IHN0YXR1cy5rZXlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKChPYmplY3Qua2V5cyhzZWFyY2hWYWx1ZXMpIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgICAgIGRvY3VtZW50czpcbiAgICAgICAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnIHx8ICFoYXNBcGlDb2x1bW5Db25maWdcbiAgICAgICAgICAgICAgICA/IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50c1NlYXJjaChcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICAnQU5EJyxcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5tYXBTZWFyY2hWYWx1ZXNUb0ZpbHRlcnMoc2VhcmNoVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzS2V5c1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0U3BlY2lmaWVkRG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLm1hcFNlYXJjaFZhbHVlc1RvRmlsdGVycyhzZWFyY2hWYWx1ZXMpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNLZXlzXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnOiBvYnNFbnYsXG4gICAgICAgICAgICBoYXNBcGlDb2x1bW5Db25maWc6IG9ic0FwaSxcbiAgICAgICAgICAgIGlzU2VhcmNoUmVzdWx0OiBvZih0cnVlKSxcbiAgICAgICAgICAgIHNlbGVjdGVkU3RhdHVzZXM6IG9mKHNlbGVjdGVkU3RhdHVzZXMpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgICBkb2N1bWVudHM6XG4gICAgICAgICAgICBoYXNFbnZDb2x1bW5Db25maWcgfHwgIWhhc0FwaUNvbHVtbkNvbmZpZ1xuICAgICAgICAgICAgICA/IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50c1NlYXJjaChcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICdBTkQnLFxuICAgICAgICAgICAgICAgICAgYXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBzdGF0dXNLZXlzXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldFNwZWNpZmllZERvY3VtZW50c1NlYXJjaChcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICdBTkQnLFxuICAgICAgICAgICAgICAgICAgYXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBzdGF0dXNLZXlzXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICBoYXNFbnZDb2x1bW5Db25maWc6IG9ic0VudixcbiAgICAgICAgICBoYXNBcGlDb2x1bW5Db25maWc6IG9ic0FwaSxcbiAgICAgICAgICBpc1NlYXJjaFJlc3VsdDogb2YoZmFsc2UpLFxuICAgICAgICAgIHNlbGVjdGVkU3RhdHVzZXM6IG9mKHNlbGVjdGVkU3RhdHVzZXMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApLFxuICAgIHN3aXRjaE1hcChyZXMgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZihyZXMpLFxuICAgICAgICBmb3JrSm9pbihcbiAgICAgICAgICByZXMuZG9jdW1lbnRzLmNvbnRlbnQubWFwKGRvY3VtZW50ID0+XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlXG4gICAgICAgICAgICAgIC5yZXF1ZXN0UGVybWlzc2lvbihDQU5fVklFV19DQVNFX1BFUk1JU1NJT04sIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogRE9TU0lFUl9ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRS5qc29uU2NoZW1hRG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgaWRlbnRpZmllcjogZG9jdW1lbnQuaWQsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgKVxuICAgICAgICApLnBpcGUoZGVmYXVsdElmRW1wdHkoW10gYXMgYm9vbGVhbltdKSksXG4gICAgICBdKVxuICAgICksXG4gICAgbWFwKChbcmVzLCBkb2N1bWVudHNBdXRob3JpemF0aW9uXSkgPT4gKHtcbiAgICAgIC4uLnJlcyxcbiAgICAgIGRvY3VtZW50czoge1xuICAgICAgICAuLi5yZXMuZG9jdW1lbnRzLFxuICAgICAgICBjb250ZW50OiByZXMuZG9jdW1lbnRzLmNvbnRlbnQubWFwKChkb2N1bWVudCwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgLi4uZG9jdW1lbnQsXG4gICAgICAgICAgbG9ja2VkOiAhZG9jdW1lbnRzQXV0aG9yaXphdGlvbltpbmRleF0sXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgfSkpLFxuICAgIG1hcChcbiAgICAgIChyZXM6IHtcbiAgICAgICAgZG9jdW1lbnRzOiBEb2N1bWVudHMgfCBTcGVjaWZpZWREb2N1bWVudHM7XG4gICAgICAgIGhhc0VudkNvbHVtbkNvbmZpZzogYm9vbGVhbjtcbiAgICAgICAgaGFzQXBpQ29sdW1uQ29uZmlnOiBib29sZWFuO1xuICAgICAgICBpc1NlYXJjaFJlc3VsdDogYm9vbGVhbjtcbiAgICAgICAgc2VsZWN0ZWRTdGF0dXNlczogSW50ZXJuYWxDYXNlU3RhdHVzW107XG4gICAgICB9KSA9PiB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0Q29sbGVjdGlvblNpemUocmVzLmRvY3VtZW50cyk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY2hlY2tQYWdlKHJlcy5kb2N1bWVudHMpO1xuICAgICAgICB0aGlzLnVwZGF0ZU5vUmVzdWx0c01lc3NhZ2UocmVzLmlzU2VhcmNoUmVzdWx0KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHRoaXMubGlzdFNlcnZpY2UubWFwRG9jdW1lbnRzKFxuICAgICAgICAgICAgcmVzLmRvY3VtZW50cyxcbiAgICAgICAgICAgIHJlcy5oYXNFbnZDb2x1bW5Db25maWcsXG4gICAgICAgICAgICByZXMuaGFzQXBpQ29sdW1uQ29uZmlnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdGF0dXNlczogcmVzLnNlbGVjdGVkU3RhdHVzZXMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKSxcbiAgICBtYXAocmVzID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXMuZGF0YSkpIHJldHVybiByZXMuZGF0YTtcblxuICAgICAgcmV0dXJuIHJlcy5kYXRhLm1hcChpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzLnN0YXR1c2VzLmZpbmQoXG4gICAgICAgICAgKHN0YXR1czogSW50ZXJuYWxDYXNlU3RhdHVzKSA9PlxuICAgICAgICAgICAgc3RhdHVzLmtleSA9PT0gaXRlbS5pbnRlcm5hbFN0YXR1cyB8fCBzdGF0dXMua2V5ID09PSBpdGVtLnN0YXR1c1xuICAgICAgICApO1xuICAgICAgICBpZiAoIXN0YXR1cykgcmV0dXJuIGl0ZW07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudDogc3RhdHVzLnRpdGxlLFxuICAgICAgICAgICAgICB0eXBlOiBJbnRlcm5hbENhc2VTdGF0dXNVdGlscy5nZXRUYWdUeXBlRnJvbUludGVybmFsQ2FzZVN0YXR1c0NvbG9yKHN0YXR1cy5jb2xvciksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICB0YXAoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nQXNzaWduZWVGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMubG9hZGluZ0RvY3VtZW50SXRlbXMgPSBmYWxzZTtcbiAgICB9KVxuICApO1xuXG4gIHByaXZhdGUgX3ByZXZpb3VzRG9jdW1lbnREZWZpbml0aW9uTmFtZSE6IHN0cmluZztcbiAgcHJpdmF0ZSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFzc2lnbmVlU2VydmljZTogRG9zc2llckxpc3RBc3NpZ25lZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBicmVhZGNydW1iU2VydmljZTogQnJlYWRjcnVtYlNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBidWxrQXNzaWduU2VydmljZTogRG9zc2llckJ1bGtBc3NpZ25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29sdW1uU2VydmljZTogRG9zc2llckNvbHVtblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0U2VydmljZTogRG9zc2llckxpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZVRpdGxlU2VydmljZTogUGFnZVRpdGxlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luYXRpb25TZXJ2aWNlOiBEb3NzaWVyTGlzdFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyU2VydmljZTogRG9zc2llclBhcmFtZXRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaFNlcnZpY2U6IERvc3NpZXJMaXN0U2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0dXNTZXJ2aWNlOiBEb3NzaWVyTGlzdFN0YXR1c1NlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFZpc2libGVUYWJzKCk7XG4gICAgdGhpcy5vcGVuRG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wYWdlVGl0bGVTZXJ2aWNlLmVuYWJsZVJlc2V0KCk7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2goc2VhcmNoRmllbGRWYWx1ZXM6IFNlYXJjaEZpZWxkVmFsdWVzKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaChzZWFyY2hGaWVsZFZhbHVlcyk7XG4gIH1cblxuICBwdWJsaWMgcm93Q2xpY2soaXRlbTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgIHRoaXMuYnJlYWRjcnVtYlNlcnZpY2UuY2FjaGVRdWVyeVBhcmFtcyhcbiAgICAgICAgYC9kb3NzaWVycy8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9YCxcbiAgICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1xuICAgICAgKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgL2Rvc3NpZXJzLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vZG9jdW1lbnQvJHtpdGVtLmlkfWBdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB0YWJDaGFuZ2UodGFiOiBEb3NzaWVyTGlzdFRhYik6IHZvaWQge1xuICAgIGlmICghdGhpcy5hY3RpdmVUYWIpIHtcbiAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgICAgdGhpcy51cGRhdGVOb1Jlc3VsdHNNZXNzYWdlKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVUYWIudG9Mb3dlckNhc2UoKSA9PT0gdGFiLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jYXJib25MaXN0Lm1vZGVsLnNlbGVjdGVkUm93c0NvdW50KCkpIHtcbiAgICAgIHRoaXMuc2hvd0NoYW5nZVRhYk1vZGFsJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy50YWJDaGFuZ2UkLm5leHQodGFiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlVGFiQ29uZmlybSh0YWIpO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlVGFiQ2FuY2VsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJzQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJldlRhYjogVGFiIHwgdW5kZWZpbmVkID0gdGhpcy50YWJzQ29tcG9uZW50LnRhYnMuZmluZChcbiAgICAgICh0YWI6IFRhYikgPT4gdGFiLmlkID09PSB0aGlzLmFjdGl2ZVRhYlxuICAgICk7XG5cbiAgICBpZiAoIXByZXZUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRhYnNDb21wb25lbnQudGFicy5maW5kKCh0YWI6IFRhYikgPT4gdGFiLmFjdGl2ZSkuYWN0aXZlID0gZmFsc2U7XG4gICAgcHJldlRhYi5hY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FyYm9uTGlzdD8ubW9kZWwuc2VsZWN0ZWRSb3dzQ291bnQoKSkge1xuICAgICAgdGhpcy5zaG93Q2hhbmdlUGFnZU1vZGFsJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlJC5uZXh0KHtwYWdlLCBzaXplOiB0aGlzLnBhZ2luYXRpb24uc2l6ZX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VDaGFuZ2UocGFnZSk7XG4gIH1cblxuICBwdWJsaWMgcGFnZVNpemVDaGFuZ2Uoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FyYm9uTGlzdD8ubW9kZWwuc2VsZWN0ZWRSb3dzQ291bnQoKSkge1xuICAgICAgdGhpcy5zaG93Q2hhbmdlUGFnZU1vZGFsJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlJC5uZXh0KHtwYWdlOiB0aGlzLnBhZ2luYXRpb24ucGFnZSwgc2l6ZX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VTaXplQ2hhbmdlKHNpemUpO1xuICB9XG5cbiAgcHVibGljIHNvcnRDaGFuZ2VkKG5ld1NvcnRTdGF0ZTogU29ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zb3J0Q2hhbmdlZChuZXdTb3J0U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZVRhYkNvbmZpcm0odGFiOiBEb3NzaWVyTGlzdFRhYik6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZ0Fzc2lnbmVlRmlsdGVyID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgICB0aGlzLnVwZGF0ZU5vUmVzdWx0c01lc3NhZ2UoZmFsc2UpO1xuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZSgxKTtcbiAgICB0aGlzLmFzc2lnbmVlU2VydmljZS5zZXRBc3NpZ25lZUZpbHRlcih0YWIpO1xuICB9XG5cbiAgcHVibGljIHNob3dBc3NpZ25Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRG9jdW1lbnRJZHMkLm5leHQoXG4gICAgICB0aGlzLmNhcmJvbkxpc3Quc2VsZWN0ZWRJdGVtcy5tYXAoKGRvY3VtZW50OiBEb2N1bWVudCkgPT4gZG9jdW1lbnQuaWQpXG4gICAgKTtcbiAgICB0aGlzLnNob3dBc3NpZ25Nb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlRXZlbnQoYXNzaWduZWVJZDogbnVsbCB8IHN0cmluZywgZG9jdW1lbnRJZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5zaG93QXNzaWduTW9kYWwkLm5leHQoZmFsc2UpO1xuICAgIGlmICghYXNzaWduZWVJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYnVsa0Fzc2lnblNlcnZpY2UuYnVsa0Fzc2lnbihhc3NpZ25lZUlkLCBkb2N1bWVudElkcykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZm9yY2VSZWZyZXNoKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VQYWdlQ29uZmlybShwYWdpbmF0aW9uOiBDYXJib25QYWdpbmF0aW9uU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKHBhZ2luYXRpb24uc2l6ZSAhPT0gdGhpcy5wYWdpbmF0aW9uLnNpemUpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGFnZVNpemVDaGFuZ2UocGFnaW5hdGlvbi5zaXplKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VDaGFuZ2UocGFnaW5hdGlvbi5wYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydERvc3NpZXIoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0QWN0aW9uc0NvbXBvbmVudC5zdGFydERvc3NpZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JjZVJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5saXN0U2VydmljZS5mb3JjZVJlZnJlc2goKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdGVkU3RhdHVzZXNDaGFuZ2Uoc3RhdHVzZXM6IEludGVybmFsQ2FzZVN0YXR1c1tdKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXNTZXJ2aWNlLnNldFNlbGVjdGVkU3RhdHVzZXMoc3RhdHVzZXMpO1xuICB9XG5cbiAgcHVibGljIG9uU3RhcnRCdXR0b25EaXNhYmxlRXZlbnQoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVTdGFydEJ1dHRvbiQubmV4dChkaXNhYmxlZCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Eb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlLnBhcmFtc1xuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocGFyYW1zOiBQYXJhbXMpID0+IHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICAgIGZpbHRlcihkb2NEZWZOYW1lID0+ICEhZG9jRGVmTmFtZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0b25OYW1lID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzRG9jdW1lbnREZWZpbml0aW9uTmFtZSkge1xuICAgICAgICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5jbGVhclBhcmFtZXRlcnMoKTtcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuY2xlYXJTZWFyY2hGaWVsZFZhbHVlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzRG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IGRvY3VtZW50RGVmaW5pdG9uTmFtZTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jbGVhclBhZ2luYXRpb24oKTtcbiAgICAgICAgdGhpcy5hc3NpZ25lZVNlcnZpY2UucmVzZXRBc3NpZ25lZUZpbHRlcigpO1xuICAgICAgICB0aGlzLmxpc3RTZXJ2aWNlLnNldERvY3VtZW50RGVmaW5pdGlvbk5hbWUoZG9jdW1lbnREZWZpbml0b25OYW1lKTtcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmdGaWVsZHMgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ1BhZ2luYXRpb24gPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ1NlYXJjaEZpZWxkcyA9IHRydWU7XG4gICAgdGhpcy5sb2FkaW5nQXNzaWduZWVGaWx0ZXIgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ0RvY3VtZW50SXRlbXMgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ1N0YXR1c2VzID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmlzaWJsZVRhYnMoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlRG9zc2llclRhYnMgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnPy52aXNpYmxlRG9zc2llckxpc3RUYWJzIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU5vUmVzdWx0c01lc3NhZ2UoaXNTZWFyY2hSZXN1bHQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm5vUmVzdWx0c01lc3NhZ2UkLm5leHQoXG4gICAgICBpc1NlYXJjaFJlc3VsdFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZG9zc2llci5ub1Jlc3VsdHMuc2VhcmNoLmRlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgIGlzU2VhcmNoUmVzdWx0LFxuICAgICAgICAgICAgdGl0bGU6ICdkb3NzaWVyLm5vUmVzdWx0cy5zZWFyY2gudGl0bGUnLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYGRvc3NpZXIubm9SZXN1bHRzLiR7dGhpcy5hY3RpdmVUYWIgPz8gJ0FMTCd9LmRlc2NyaXB0aW9uYCxcbiAgICAgICAgICAgIGlzU2VhcmNoUmVzdWx0LFxuICAgICAgICAgICAgdGl0bGU6IGBkb3NzaWVyLm5vUmVzdWx0cy4ke3RoaXMuYWN0aXZlVGFiID8/ICdBTEwnfS50aXRsZWAsXG4gICAgICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBmaWVsZHM6IGZpZWxkcyQgfCBhc3luYyxcbiAgICBkb2N1bWVudEl0ZW1zOiBkb2N1bWVudEl0ZW1zJCB8IGFzeW5jLFxuICAgIG5vUmVzdWx0c01lc3NhZ2U6IG5vUmVzdWx0c01lc3NhZ2UkIHwgYXN5bmMsXG4gICAgc2VhcmNoRmllbGRzOiBzZWFyY2hGaWVsZHMkIHwgYXN5bmMsXG4gICAgc2NoZW1hOiBzY2hlbWEkIHwgYXN5bmMsXG4gICAgc2hvd0Fzc2lnbk1vZGFsOiBzaG93QXNzaWduTW9kYWwkIHwgYXN5bmMsXG4gICAgc2VsZWN0ZWREb2N1bWVudElkczogc2VsZWN0ZWREb2N1bWVudElkcyQgfCBhc3luYyxcbiAgICBzdGF0dXNlczogc3RhdHVzZXMkIHwgYXN5bmMsXG4gICAgc2VsZWN0ZWRTdGF0dXNlczogc2VsZWN0ZWRTdGF0dXNlcyQgfCBhc3luYyxcbiAgICBzaG93U3RhdHVzU2VsZWN0b3I6IHNob3dTdGF0dXNTZWxlY3RvciQgfCBhc3luYyxcbiAgICBsb2FkZWQ6XG4gICAgICAhbG9hZGluZ0ZpZWxkcyAmJlxuICAgICAgIWxvYWRpbmdQYWdpbmF0aW9uICYmXG4gICAgICAhbG9hZGluZ1NlYXJjaEZpZWxkcyAmJlxuICAgICAgIWxvYWRpbmdBc3NpZ25lZUZpbHRlciAmJlxuICAgICAgIWxvYWRpbmdEb2N1bWVudEl0ZW1zLFxuICB9IGFzIG9ic1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnQgcHQtMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHgtMCBtYi01XCI+XG4gICAgICAgIDx2YWx0aW1vLWRvc3NpZXItbGlzdC1hY3Rpb25zXG4gICAgICAgICAgW2xvYWRpbmddPVwiIW9icy5sb2FkZWRcIlxuICAgICAgICAgIChmb3JtRmxvd0NvbXBsZXRlKT1cImZvcmNlUmVmcmVzaCgpXCJcbiAgICAgICAgICAoc3RhcnRCdXR0b25EaXNhYmxlRXZlbnQpPVwib25TdGFydEJ1dHRvbkRpc2FibGVFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgPjwvdmFsdGltby1kb3NzaWVyLWxpc3QtYWN0aW9ucz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaEZpZWxkczsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYnMubG9hZGVkOyBlbHNlIGxvYWRpbmdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdDsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnVsa0Fzc2lnbk1vZGFsOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoYW5nZVBhZ2VNb2RhbFwiPjwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGFuZ2VUYWJNb2RhbFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRzIGxldC1vYnM9XCJvYnNcIj5cbiAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICA8dmFsdGltby1zZWFyY2gtZmllbGRzXG4gICAgICBbc2VhcmNoRmllbGRzXT1cIm9icy5zZWFyY2hGaWVsZHNcIlxuICAgICAgKGRvU2VhcmNoKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgIFtkb2N1bWVudERlZmluaXRpb25OYW1lXT1cImRvY3VtZW50RGVmaW5pdGlvbk5hbWUkIHwgYXN5bmNcIlxuICAgICAgW2RlZmF1bHRWYWx1ZXNdPVwic2VhcmNoRmllbGRWYWx1ZXMkIHwgYXN5bmNcIlxuICAgICAgW2lucHV0RGlzYWJsZWRdPVwiIW9icy5sb2FkZWRcIlxuICAgICAgW2V4dGVybmFsU2VhcmNoRmllbGRdPVwib2JzLnNob3dTdGF0dXNTZWxlY3RvclwiXG4gICAgPlxuICAgICAgPHZhbHRpbW8tc3RhdHVzLXNlbGVjdG9yXG4gICAgICAgICpuZ0lmPVwib2JzLnNob3dTdGF0dXNTZWxlY3RvclwiXG4gICAgICAgIFtzdGF0dXNlc109XCJvYnMuc3RhdHVzZXNcIlxuICAgICAgICBbc2VsZWN0ZWRTdGF0dXNlc109XCJvYnMuc2VsZWN0ZWRTdGF0dXNlc1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhb2JzLmxvYWRlZFwiXG4gICAgICAgIChzZWxlY3RlZFN0YXR1c2VzQ2hhbmdlRXZlbnQpPVwib25TZWxlY3RlZFN0YXR1c2VzQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvdmFsdGltby1zdGF0dXMtc2VsZWN0b3I+XG4gICAgPC92YWx0aW1vLXNlYXJjaC1maWVsZHM+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaXN0IGxldC1vYnM9XCJvYnNcIj5cbiAgPHZhbHRpbW8tY2FyYm9uLWxpc3RcbiAgICBbZmllbGRzXT1cIm9icy5maWVsZHNcIlxuICAgIFtoZWFkZXJdPVwiZmFsc2VcIlxuICAgIFtpbml0aWFsU29ydFN0YXRlXT1cInBhZ2luYXRpb24uc29ydFwiXG4gICAgW2l0ZW1zXT1cIm9icy5kb2N1bWVudEl0ZW1zXCJcbiAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICBwYWdpbmF0aW9uSWRlbnRpZmllcj1cImRvc3NpZXJMaXN0XCJcbiAgICBsb2NrZWRUb29sdGlwVHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLnJvd0xvY2tlZFwiXG4gICAgW3Nob3dTZWxlY3Rpb25Db2x1bW5dPVwiY2FuSGF2ZUFzc2lnbmVlXCJcbiAgICBbdGFibGVUcmFuc2xhdGlvbnNdPVwidGFibGVUcmFuc2xhdGlvbnNcIlxuICAgIChwYWdpbmF0aW9uQ2xpY2tlZCk9XCJwYWdlQ2hhbmdlKCRldmVudClcIlxuICAgIChwYWdpbmF0aW9uU2V0KT1cInBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgIChyb3dDbGlja2VkKT1cInJvd0NsaWNrKCRldmVudClcIlxuICAgIChzb3J0Q2hhbmdlZCk9XCJzb3J0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgY2FyYm9uVG9vbGJhckFjdGlvbnM+XG4gICAgICA8YnV0dG9uIGNkc0J1dHRvbj1cInByaW1hcnlcIiAoY2xpY2spPVwic2hvd0Fzc2lnbk1vZGFsKClcIj5cbiAgICAgICAge3sgJ2Rvc3NpZXIuYnVsa0Fzc2lnbi5hc3NpZ24nIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2FyYm9uVG9vbGJhckNvbnRlbnQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZG9zc2llckxpc3RBY3Rpb25zXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cIm9icy5ub1Jlc3VsdHNNZXNzYWdlLmlzU2VhcmNoUmVzdWx0ID8gbnVsbCA6IGRvc3NpZXJMaXN0QWN0aW9uc1wiXG4gICAgICBbZGVzY3JpcHRpb25dPVwib2JzLm5vUmVzdWx0c01lc3NhZ2UuZGVzY3JpcHRpb24gfCB0cmFuc2xhdGVcIlxuICAgICAgW3RpdGxlXT1cIm9icy5ub1Jlc3VsdHNNZXNzYWdlLnRpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG5cbiAgICA8ZGl2IHRhYnMgKm5nSWY9XCJjYW5IYXZlQXNzaWduZWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJzXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvdmFsdGltby1jYXJib24tbGlzdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFicz5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFzc2lnbmVlRmlsdGVyJCB8IGFzeW5jIGFzIGFzc2lnbmVlRmlsdGVyXCI+XG4gICAgPGNkcy10YWJzXG4gICAgICAqbmdJZj1cIiF2aXNpYmxlRG9zc2llclRhYnM7IGVsc2UgY29uZmlndXJlZFRhYnNcIlxuICAgICAgdHlwZT1cImNvbnRhaW5lZFwiXG4gICAgICBjbGFzcz1cImRvc3NpZXItbGlzdC10YWJzXCJcbiAgICA+XG4gICAgICA8Y2RzLXRhYlxuICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIGRlZmF1bHRUYWJzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIlxuICAgICAgICBbYWN0aXZlXT1cImFzc2lnbmVlRmlsdGVyID09PSB0YWJcIlxuICAgICAgICBoZWFkaW5nPVwie3sgJ2Rvc3NpZXIudGFicy4nICsgdGFiIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2lkXT1cInRhYlwiXG4gICAgICAgIChzZWxlY3RlZCk9XCJ0YWJDaGFuZ2UodGFiKVwiXG4gICAgICA+PC9jZHMtdGFiPlxuICAgIDwvY2RzLXRhYnM+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb25maWd1cmVkVGFicz5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFzc2lnbmVlRmlsdGVyJCB8IGFzeW5jIGFzIGFzc2lnbmVlRmlsdGVyXCI+XG4gICAgPGNkcy10YWJzIHR5cGU9XCJjb250YWluZWRcIiBjbGFzcz1cImRvc3NpZXItbGlzdC10YWJzXCI+XG4gICAgICA8Y2RzLXRhYlxuICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIHZpc2libGVEb3NzaWVyVGFiczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCJcbiAgICAgICAgW2FjdGl2ZV09XCJhc3NpZ25lZUZpbHRlciA9PT0gdGFiXCJcbiAgICAgICAgaGVhZGluZz1cInt7ICdkb3NzaWVyLnRhYnMuJyArIHRhYiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtpZF09XCJ0YWJcIlxuICAgICAgICAoc2VsZWN0ZWQpPVwidGFiQ2hhbmdlKHRhYilcIlxuICAgICAgPjwvY2RzLXRhYj5cbiAgICA8L2Nkcy10YWJzPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1xuICA+PHZhbHRpbW8tY2FyYm9uLWxpc3QgW2xvYWRpbmddPVwidHJ1ZVwiPlxuICAgIDxkaXYgdGFicyAqbmdJZj1cImNhbkhhdmVBc3NpZ25lZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj4gPC92YWx0aW1vLWNhcmJvbi1saXN0XG4+PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidWxrQXNzaWduTW9kYWwgbGV0LW9icz1cIm9ic1wiPlxuICA8dmFsdGltby1kb3NzaWVyLWJ1bGstYXNzaWduLW1vZGFsXG4gICAgW2RvY3VtZW50SWRzXT1cIm9icy5zZWxlY3RlZERvY3VtZW50SWRzXCJcbiAgICBbb3Blbl09XCJvYnMuc2hvd0Fzc2lnbk1vZGFsXCJcbiAgICAoY2xvc2VFdmVudCk9XCJvbkNsb3NlRXZlbnQoJGV2ZW50LCBvYnMuc2VsZWN0ZWREb2N1bWVudElkcylcIlxuICA+PC92YWx0aW1vLWRvc3NpZXItYnVsay1hc3NpZ24tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NoYW5nZVBhZ2VNb2RhbD5cbiAgPHZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsXG4gICAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuY2hhbmdlUGFnZU1vZGFsLmNvbmZpcm1cIlxuICAgIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuY2hhbmdlUGFnZU1vZGFsLmNvbnRlbnRcIlxuICAgIFtvdXRwdXRPbkNvbmZpcm1dPVwicGFnaW5hdGlvbkNoYW5nZSQgfCBhc3luY1wiXG4gICAgW3Nob3dNb2RhbFN1YmplY3QkXT1cInNob3dDaGFuZ2VQYWdlTW9kYWwkXCJcbiAgICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5jaGFuZ2VQYWdlTW9kYWwudGl0bGVcIlxuICAgIChjb25maXJtRXZlbnQpPVwib25DaGFuZ2VQYWdlQ29uZmlybSgkZXZlbnQpXCJcbiAgPjwvdmFsdGltby1jb25maXJtYXRpb24tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NoYW5nZVRhYk1vZGFsPlxuICA8dmFsdGltby1jb25maXJtYXRpb24tbW9kYWxcbiAgICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5jaGFuZ2VUYWJNb2RhbC5jb25maXJtXCJcbiAgICBjb250ZW50VHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVRhYk1vZGFsLmNvbnRlbnRcIlxuICAgIFtvdXRwdXRPbkNvbmZpcm1dPVwidGFiQ2hhbmdlJCB8IGFzeW5jXCJcbiAgICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0NoYW5nZVRhYk1vZGFsJFwiXG4gICAgdGl0bGVUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuY2hhbmdlVGFiTW9kYWwudGl0bGVcIlxuICAgIChjYW5jZWxFdmVudCk9XCJvbkNoYW5nZVRhYkNhbmNlbCgpXCJcbiAgICAoY29uZmlybUV2ZW50KT1cIm9uQ2hhbmdlVGFiQ29uZmlybSgkZXZlbnQpXCJcbiAgPjwvdmFsdGltby1jb25maXJtYXRpb24tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Rvc3NpZXJMaXN0QWN0aW9ucz5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwiY2FuQ3JlYXRlRG9jdW1lbnQkIHwgYXN5bmNcIlxuICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU3RhcnRCdXR0b24kIHwgYXN5bmNcIlxuICAgIChjbGljayk9XCJzdGFydERvc3NpZXIoKVwiXG4gID5cbiAgICB7eyAnU3RhcnQgRG9zc2llcicgfCB0cmFuc2xhdGUgfX1cblxuICAgIDxzdmcgY2RzSWNvbj1cImFkZFwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
416
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUMsU0FBUyxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJdEUsT0FBTyxFQUVMLG1CQUFtQixFQUduQix3QkFBd0IsRUFJeEIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFXN0IsT0FBTyxFQUVMLGlDQUFpQyxFQUtqQyx1QkFBdUIsR0FFeEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQU0sSUFBSSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osY0FBYyxFQUNkLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFFSCxFQUFFLEVBRUYsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLCtCQUErQixFQUMvQiwrQkFBK0IsR0FDaEMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHdCQUF3QixFQUN4QixrQ0FBa0MsR0FDbkMsTUFBTSxtQkFBbUIsQ0FBQztBQUMz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SSxJQUFJLENBQUM7SUFDdEYsQ0FBQztJQUVPLHNCQUFzQixDQUFDLGNBQXVCO1FBQ3BELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3pCLGNBQWM7WUFDWixDQUFDLENBQUM7Z0JBQ0UsV0FBVyxFQUFFLHNDQUFzQztnQkFDbkQsY0FBYztnQkFDZCxLQUFLLEVBQUUsZ0NBQWdDO2FBQ3hDO1lBQ0gsQ0FBQyxDQUFDO2dCQUNFLFdBQVcsRUFBRSxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLGNBQWM7Z0JBQ3ZFLGNBQWM7Z0JBQ2QsS0FBSyxFQUFFLHFCQUFxQixJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssUUFBUTthQUM1RCxDQUNOLENBQUM7SUFDSixDQUFDOytHQWxqQlUsb0JBQW9CO21HQUFwQixvQkFBb0IsK0NBVnBCO1lBQ1Qsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQiwwQkFBMEI7WUFDMUIsdUJBQXVCO1lBQ3ZCLDRCQUE0QjtZQUM1Qix3QkFBd0I7WUFDeEIsd0JBQXdCO1NBQ3pCLHNFQUdVLG1CQUFtQix1RkFDbkIsMkJBQTJCLGdGQUMzQixJQUFJLGdEQzVHakIsbWpPQXlNQTs7NEZEaEdhLG9CQUFvQjtrQkFkaEMsU0FBUzsrQkFDRSxzQkFBc0IsYUFHckI7d0JBQ1Qsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLDBCQUEwQjt3QkFDMUIsdUJBQXVCO3dCQUN2Qiw0QkFBNEI7d0JBQzVCLHdCQUF3Qjt3QkFDeEIsd0JBQXdCO3FCQUN6QjttbEJBRytCLFVBQVU7c0JBQXpDLFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNVLG9CQUFvQjtzQkFBM0QsU0FBUzt1QkFBQywyQkFBMkI7Z0JBQ3JCLGFBQWE7c0JBQTdCLFNBQVM7dUJBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1Blcm1pc3Npb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9hY2Nlc3MtY29udHJvbCc7XG5pbXBvcnQge1xuICBCcmVhZGNydW1iU2VydmljZSxcbiAgQ2FyYm9uTGlzdENvbXBvbmVudCxcbiAgQ2FyYm9uTGlzdE5vUmVzdWx0c01lc3NhZ2UsXG4gIENhcmJvblBhZ2luYXRpb25TZWxlY3Rpb24sXG4gIENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWSxcbiAgTGlzdEZpZWxkLFxuICBQYWdlVGl0bGVTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBWaWV3VHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBBc3NpZ25lZUZpbHRlcixcbiAgQ29uZmlnU2VydmljZSxcbiAgRGVmaW5pdGlvbkNvbHVtbixcbiAgRGlyZWN0aW9uLFxuICBEb3NzaWVyTGlzdFRhYixcbiAgU2VhcmNoRmllbGQsXG4gIFNlYXJjaEZpZWxkVmFsdWVzLFxuICBTb3J0U3RhdGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1xuICBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgQWR2YW5jZWREb2N1bWVudFNlYXJjaFJlcXVlc3RJbXBsLFxuICBEb2N1bWVudCxcbiAgRG9jdW1lbnRzLFxuICBEb2N1bWVudFNlcnZpY2UsXG4gIEludGVybmFsQ2FzZVN0YXR1cyxcbiAgSW50ZXJuYWxDYXNlU3RhdHVzVXRpbHMsXG4gIFNwZWNpZmllZERvY3VtZW50cyxcbn0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtUYWIsIFRhYnN9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtpc0VxdWFsfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRlZmF1bHRJZkVtcHR5LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBmb3JrSm9pbixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIERFRkFVTFRfRE9TU0lFUl9MSVNUX1RBQlMsXG4gIERPU1NJRVJfTElTVF9OT19SRVNVTFRTX01FU1NBR0UsXG4gIERPU1NJRVJfTElTVF9UQUJMRV9UUkFOU0xBVElPTlMsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBDQU5fQ1JFQVRFX0NBU0VfUEVSTUlTU0lPTixcbiAgQ0FOX1ZJRVdfQ0FTRV9QRVJNSVNTSU9OLFxuICBET1NTSUVSX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLFxufSBmcm9tICcuLi8uLi9wZXJtaXNzaW9ucyc7XG5pbXBvcnQge1xuICBEb3NzaWVyQnVsa0Fzc2lnblNlcnZpY2UsXG4gIERvc3NpZXJDb2x1bW5TZXJ2aWNlLFxuICBEb3NzaWVyTGlzdEFzc2lnbmVlU2VydmljZSxcbiAgRG9zc2llckxpc3RQYWdpbmF0aW9uU2VydmljZSxcbiAgRG9zc2llckxpc3RTZWFyY2hTZXJ2aWNlLFxuICBEb3NzaWVyTGlzdFNlcnZpY2UsXG4gIERvc3NpZXJMaXN0U3RhdHVzU2VydmljZSxcbiAgRG9zc2llclBhcmFtZXRlclNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7RG9zc2llckxpc3RBY3Rpb25zQ29tcG9uZW50fSBmcm9tICcuLi9kb3NzaWVyLWxpc3QtYWN0aW9ucy9kb3NzaWVyLWxpc3QtYWN0aW9ucy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRG9zc2llckxpc3RTZXJ2aWNlLFxuICAgIERvc3NpZXJDb2x1bW5TZXJ2aWNlLFxuICAgIERvc3NpZXJMaXN0QXNzaWduZWVTZXJ2aWNlLFxuICAgIERvc3NpZXJQYXJhbWV0ZXJTZXJ2aWNlLFxuICAgIERvc3NpZXJMaXN0UGFnaW5hdGlvblNlcnZpY2UsXG4gICAgRG9zc2llckxpc3RTZWFyY2hTZXJ2aWNlLFxuICAgIERvc3NpZXJMaXN0U3RhdHVzU2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoQ2FyYm9uTGlzdENvbXBvbmVudCkgY2FyYm9uTGlzdDogQ2FyYm9uTGlzdENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChEb3NzaWVyTGlzdEFjdGlvbnNDb21wb25lbnQpIGxpc3RBY3Rpb25zQ29tcG9uZW50OiBEb3NzaWVyTGlzdEFjdGlvbnNDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoVGFicykgdGFic0NvbXBvbmVudDogVGFicztcblxuICBwdWJsaWMgYWN0aXZlVGFiOiBEb3NzaWVyTGlzdFRhYiA9IG51bGw7XG4gIHB1YmxpYyBsb2FkaW5nRmllbGRzID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdQYWdpbmF0aW9uID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdTZWFyY2hGaWVsZHMgPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ0Fzc2lnbmVlRmlsdGVyID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdEb2N1bWVudEl0ZW1zID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdTdGF0dXNlcyA9IHRydWU7XG4gIHB1YmxpYyBwYWdpbmF0aW9uITogUGFnaW5hdGlvbjtcbiAgcHVibGljIGNhbkhhdmVBc3NpZ25lZSE6IGJvb2xlYW47XG4gIHB1YmxpYyB2aXNpYmxlRG9zc2llclRhYnM6IEFycmF5PERvc3NpZXJMaXN0VGFiPiB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0VGFicyA9IERFRkFVTFRfRE9TU0lFUl9MSVNUX1RBQlM7XG4gIHB1YmxpYyByZWFkb25seSB0YWJsZVRyYW5zbGF0aW9ucyA9IERPU1NJRVJfTElTVF9UQUJMRV9UUkFOU0xBVElPTlM7XG5cbiAgcHVibGljIHJlYWRvbmx5IG5vUmVzdWx0c01lc3NhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25MaXN0Tm9SZXN1bHRzTWVzc2FnZT4oXG4gICAgRE9TU0lFUl9MSVNUX05PX1JFU1VMVFNfTUVTU0FHRVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZVN0YXJ0QnV0dG9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0Fzc2lnbk1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0NoYW5nZVBhZ2VNb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dDaGFuZ2VUYWJNb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZD4gfCBudWxsPiA9XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmRvY3VtZW50U2VhcmNoRmllbGRzJC5waXBlKHRhcCgoKSA9PiAodGhpcy5sb2FkaW5nU2VhcmNoRmllbGRzID0gZmFsc2UpKSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c2VzJCA9IHRoaXMuc3RhdHVzU2VydmljZS5jYXNlU3RhdHVzZXMkLnBpcGUoXG4gICAgdGFwKCgpID0+ICh0aGlzLmxvYWRpbmdTdGF0dXNlcyA9IGZhbHNlKSlcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkU3RhdHVzZXMkID0gdGhpcy5zdGF0dXNTZXJ2aWNlLnNlbGVjdGVkQ2FzZVN0YXR1c2VzJDtcblxuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSB0aGlzLmxpc3RTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZERvY3VtZW50SWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2NoZW1hJCA9IHRoaXMubGlzdFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnREZWZpbml0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICBtYXAoZG9jdW1lbnREZWZpbml0aW9uID0+IGRvY3VtZW50RGVmaW5pdGlvbj8uc2NoZW1hKSxcbiAgICB0YXAoc2NoZW1hID0+IHtcbiAgICAgIGlmIChzY2hlbWE/LnRpdGxlKSB7XG4gICAgICAgIHRoaXMucGFnZVRpdGxlU2VydmljZS5zZXRDdXN0b21QYWdlVGl0bGUoc2NoZW1hPy50aXRsZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IGNhbkNyZWF0ZURvY3VtZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5yZXF1ZXN0UGVybWlzc2lvbihDQU5fQ1JFQVRFX0NBU0VfUEVSTUlTU0lPTiwge1xuICAgICAgICByZXNvdXJjZTogRE9TU0lFUl9ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRS5qc29uU2NoZW1hRG9jdW1lbnREZWZpbml0aW9uLFxuICAgICAgICBpZGVudGlmaWVyOiBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaEZpZWxkVmFsdWVzJCA9IHRoaXMucGFyYW1ldGVyU2VydmljZS5zZWFyY2hGaWVsZFZhbHVlcyQ7XG4gIHB1YmxpYyByZWFkb25seSBhc3NpZ25lZUZpbHRlciQ6IE9ic2VydmFibGU8QXNzaWduZWVGaWx0ZXI+ID1cbiAgICB0aGlzLmFzc2lnbmVlU2VydmljZS5hc3NpZ25lZUZpbHRlciQucGlwZShcbiAgICAgIHRhcChhc3NpZ25lZUZpbHRlciA9PiAodGhpcy5hY3RpdmVUYWIgPSBhc3NpZ25lZUZpbHRlciBhcyBEb3NzaWVyTGlzdFRhYikpXG4gICAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2luYXRpb25DaGFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25QYWdpbmF0aW9uU2VsZWN0aW9uIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSB0YWJDaGFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb3NzaWVyTGlzdFRhYiB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdpbmF0aW9uJCA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGFnaW5hdGlvbiQucGlwZShcbiAgICB0YXAocGFnaW5hdGlvbiA9PiB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSBwYWdpbmF0aW9uO1xuICAgICAgdGhpcy5sb2FkaW5nUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIH0pXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhc0VudkNvbHVtbkNvbmZpZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxpc3RTZXJ2aWNlLmhhc0VudkNvbHVtbkNvbmZpZyQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhc0FwaUNvbHVtbkNvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FuSGF2ZUFzc2lnbmVlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYXNzaWduZWVTZXJ2aWNlLmNhbkhhdmVBc3NpZ25lZSQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnMkOiBPYnNlcnZhYmxlPEFycmF5PERlZmluaXRpb25Db2x1bW4+PiA9XG4gICAgdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5jb2x1bW5TZXJ2aWNlLmdldERlZmluaXRpb25Db2x1bW5zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICApLFxuICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuX2hhc0FwaUNvbHVtbkNvbmZpZyQubmV4dChyZXMuaGFzQXBpQ29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlcy5jb2x1bW5zO1xuICAgICAgfSksXG4gICAgICB0YXAoY29sdW1ucyA9PiB7XG4gICAgICAgIHRoaXMubGlzdFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRQYWdpbmF0aW9uKGNvbHVtbnMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1N0YXR1c1NlbGVjdG9yJCA9IHRoaXMuc3RhdHVzU2VydmljZS5zaG93U3RhdHVzU2VsZWN0b3IkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXR1c0ZpZWxkOiBMaXN0RmllbGQgPSB7XG4gICAgbGFiZWw6ICdkb2N1bWVudC5zdGF0dXMnLFxuICAgIGtleTogJ2ludGVybmFsU3RhdHVzJyxcbiAgICB2aWV3VHlwZTogVmlld1R5cGUuVEFHUyxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgfTtcbiAgcHVibGljIHJlYWRvbmx5IGZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEZpZWxkPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9jYW5IYXZlQXNzaWduZWUkLFxuICAgIHRoaXMuX2NvbHVtbnMkLFxuICAgIHRoaXMuX2hhc0VudkNvbHVtbkNvbmZpZyQsXG4gICAgdGhpcy5faGFzQXBpQ29sdW1uQ29uZmlnJCxcbiAgICB0aGlzLnN0YXR1c2VzJCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICB0YXAoKFtjYW5IYXZlQXNzaWduZWVdKSA9PiB7XG4gICAgICB0aGlzLmNhbkhhdmVBc3NpZ25lZSA9IGNhbkhhdmVBc3NpZ25lZTtcbiAgICB9KSxcbiAgICBtYXAoKFtjYW5IYXZlQXNzaWduZWUsIGNvbHVtbnMsIGhhc0VudkNvbmZpZywgaGFzQXBpQ29uZmlnLCBzdGF0dXNlc10pID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQXNzaWduZWVDb2x1bW5zID0gdGhpcy5hc3NpZ25lZVNlcnZpY2UuZmlsdGVyQXNzaWduZWVDb2x1bW5zKFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjYW5IYXZlQXNzaWduZWVcbiAgICAgICk7XG4gICAgICBjb25zdCBsaXN0RmllbGRzID0gdGhpcy5jb2x1bW5TZXJ2aWNlLm1hcERlZmluaXRpb25Db2x1bW5zVG9MaXN0RmllbGRzKFxuICAgICAgICBmaWx0ZXJlZEFzc2lnbmVlQ29sdW1ucyxcbiAgICAgICAgaGFzRW52Q29uZmlnLFxuICAgICAgICBoYXNBcGlDb25maWdcbiAgICAgICk7XG4gICAgICBjb25zdCBmaWVsZHNUb1JldHVybiA9IHRoaXMuYXNzaWduZWVTZXJ2aWNlLmFkZEFzc2lnbmVlTGlzdEZpZWxkKFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBsaXN0RmllbGRzLFxuICAgICAgICBjYW5IYXZlQXNzaWduZWVcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBzdGF0dXNlcy5zb21lKFxuICAgICAgICAoc3RhdHVzOiBJbnRlcm5hbENhc2VTdGF0dXMpID0+IHN0YXR1cy5rZXkgIT09IENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWVxuICAgICAgKSAmJiAhaGFzQXBpQ29uZmlnXG4gICAgICAgID8gWy4uLmZpZWxkc1RvUmV0dXJuLCB0aGlzLl9zdGF0dXNGaWVsZF1cbiAgICAgICAgOiBmaWVsZHNUb1JldHVybjtcbiAgICB9KSxcbiAgICB0YXAobGlzdEZpZWxkcyA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0TGlzdEZpZWxkID0gbGlzdEZpZWxkcy5maW5kKGZpZWxkID0+IGZpZWxkLmRlZmF1bHQpO1xuICAgICAgLy8gc2V0IGRlZmF1bHQgc29ydCBzdGF0ZSBpZiBubyBwYWdpbmF0aW9uIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHNvcnRpbmcgYXJlIGF2YWlsYWJsZVxuICAgICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLnF1ZXJ5UGFnaW5hdGlvblBhcmFtcyRcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShxdWVyeVBhZ2luYXRpb25QYXJhbXMgPT4ge1xuICAgICAgICAgIGlmIChkZWZhdWx0TGlzdEZpZWxkICYmICFxdWVyeVBhZ2luYXRpb25QYXJhbXM/LnNvcnQ/LmlzU29ydGluZykge1xuICAgICAgICAgICAgY29uc3Qgc29ydERpcmVjdGlvbiA9XG4gICAgICAgICAgICAgIHR5cGVvZiBkZWZhdWx0TGlzdEZpZWxkLmRlZmF1bHQgPT09ICdzdHJpbmcnID8gZGVmYXVsdExpc3RGaWVsZC5kZWZhdWx0IDogJ0RFU0MnO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zb3J0Q2hhbmdlZCh7XG4gICAgICAgICAgICAgIGlzU29ydGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgc3RhdGU6IHtuYW1lOiBkZWZhdWx0TGlzdEZpZWxkLmtleSwgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIGFzIERpcmVjdGlvbn0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmdGaWVsZHMgPSBmYWxzZTtcbiAgICB9KVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50U2VhcmNoUmVxdWVzdCQ6IE9ic2VydmFibGU8QWR2YW5jZWREb2N1bWVudFNlYXJjaFJlcXVlc3Q+ID1cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9wYWdpbmF0aW9uJCwgdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtwYWdpbmF0aW9uXSkgPT4gISFwYWdpbmF0aW9uKSxcbiAgICAgIG1hcCgoW3BhZ2luYXRpb24sIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBwYWdpbmF0aW9uLnBhZ2UgLSAxO1xuXG4gICAgICAgIHJldHVybiBuZXcgQWR2YW5jZWREb2N1bWVudFNlYXJjaFJlcXVlc3RJbXBsKFxuICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgcGFnZSA+PSAwID8gcGFnZSA6IDAsXG4gICAgICAgICAgcGFnaW5hdGlvbi5zaXplLFxuICAgICAgICAgIHBhZ2luYXRpb24uc29ydFxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudEl0ZW1zJDogT2JzZXJ2YWJsZTxhbnlbXT4gPSB0aGlzLmxpc3RTZXJ2aWNlLmNoZWNrUmVmcmVzaCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLl9kb2N1bWVudFNlYXJjaFJlcXVlc3QkLFxuICAgICAgICB0aGlzLmFzc2lnbmVlRmlsdGVyJCxcbiAgICAgICAgdGhpcy5zZWFyY2hGaWVsZFZhbHVlcyQsXG4gICAgICAgIHRoaXMuc3RhdHVzU2VydmljZS5zZWxlY3RlZENhc2VTdGF0dXNlcyQsXG4gICAgICAgIHRoaXMubGlzdFNlcnZpY2UuZm9yY2VSZWZyZXNoJCxcbiAgICAgICAgdGhpcy5faGFzRW52Q29sdW1uQ29uZmlnJCxcbiAgICAgICAgdGhpcy5faGFzQXBpQ29sdW1uQ29uZmlnJCxcbiAgICAgICAgdGhpcy5zdGF0dXNTZXJ2aWNlLmNhc2VTdGF0dXNlcyQsXG4gICAgICBdKS5waXBlKGRlYm91bmNlVGltZSg1MCkpXG4gICAgKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcbiAgICAgIChcbiAgICAgICAgW1xuICAgICAgICAgIHByZXZTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgIHByZXZBc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICBwcmV2U2VhcmNoRmllbGRWYWx1ZXMsXG4gICAgICAgICAgcHJldlNlbGVjdGVkU3RhdHVzZXMsXG4gICAgICAgICAgcHJldkZvcmNlUmVmcmVzaCxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgIGN1cnJTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgIGN1cnJBc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICBjdXJyU2VhcmNoRmllbGRWYWx1ZXMsXG4gICAgICAgICAgY3VyclNlbGVjdGVkU3RhdHVzZXMsXG4gICAgICAgICAgY3VyckZvcmNlUmVmcmVzaCxcbiAgICAgICAgXVxuICAgICAgKSA9PlxuICAgICAgICBpc0VxdWFsKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnByZXZTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgYXNzaWduZWU6IHByZXZBc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgIC4uLnByZXZTZWFyY2hGaWVsZFZhbHVlcyxcbiAgICAgICAgICAgIC4uLnByZXZTZWxlY3RlZFN0YXR1c2VzLm1hcCgoc3RhdHVzOiBJbnRlcm5hbENhc2VTdGF0dXMpID0+IHN0YXR1cy5rZXkpLFxuICAgICAgICAgICAgZm9yY2VSZWZyZXNoOiBwcmV2Rm9yY2VSZWZyZXNoLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uY3VyclNlYXJjaFJlcXVlc3QsXG4gICAgICAgICAgICBhc3NpZ25lZTogY3VyckFzc2lnbmVlRmlsdGVyLFxuICAgICAgICAgICAgLi4uY3VyclNlYXJjaEZpZWxkVmFsdWVzLFxuICAgICAgICAgICAgLi4uY3VyclNlbGVjdGVkU3RhdHVzZXMubWFwKChzdGF0dXM6IEludGVybmFsQ2FzZVN0YXR1cykgPT4gc3RhdHVzLmtleSksXG4gICAgICAgICAgICBmb3JjZVJlZnJlc2g6IGN1cnJGb3JjZVJlZnJlc2gsXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgKSxcbiAgICBzd2l0Y2hNYXAoXG4gICAgICAoW1xuICAgICAgICBkb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gICAgICAgIGFzc2lnbmVlRmlsdGVyLFxuICAgICAgICBzZWFyY2hWYWx1ZXMsXG4gICAgICAgIHNlbGVjdGVkU3RhdHVzZXMsXG4gICAgICAgIF8sXG4gICAgICAgIGhhc0VudkNvbHVtbkNvbmZpZyxcbiAgICAgICAgaGFzQXBpQ29sdW1uQ29uZmlnLFxuICAgICAgICBhbGxTdGF0dXNlcyxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3Qgb2JzRW52OiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YoaGFzRW52Q29sdW1uQ29uZmlnKTtcbiAgICAgICAgY29uc3Qgb2JzQXBpOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YoaGFzQXBpQ29sdW1uQ29uZmlnKTtcbiAgICAgICAgY29uc3Qgc3RhdHVzS2V5czogKHN0cmluZyB8IG51bGwpW10gPSBzZWxlY3RlZFN0YXR1c2VzLm1hcCgoc3RhdHVzOiBJbnRlcm5hbENhc2VTdGF0dXMpID0+XG4gICAgICAgICAgc3RhdHVzLmtleSA9PT0gQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZID8gbnVsbCA6IHN0YXR1cy5rZXlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKChPYmplY3Qua2V5cyhzZWFyY2hWYWx1ZXMpIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgICAgIGRvY3VtZW50czpcbiAgICAgICAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnIHx8ICFoYXNBcGlDb2x1bW5Db25maWdcbiAgICAgICAgICAgICAgICA/IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50c1NlYXJjaChcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICAnQU5EJyxcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5tYXBTZWFyY2hWYWx1ZXNUb0ZpbHRlcnMoc2VhcmNoVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzS2V5c1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0U3BlY2lmaWVkRG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLm1hcFNlYXJjaFZhbHVlc1RvRmlsdGVycyhzZWFyY2hWYWx1ZXMpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNLZXlzXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnOiBvYnNFbnYsXG4gICAgICAgICAgICBoYXNBcGlDb2x1bW5Db25maWc6IG9ic0FwaSxcbiAgICAgICAgICAgIGlzU2VhcmNoUmVzdWx0OiBvZih0cnVlKSxcbiAgICAgICAgICAgIGFsbFN0YXR1c2VzOiBvZihhbGxTdGF0dXNlcyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oe1xuICAgICAgICAgIGRvY3VtZW50czpcbiAgICAgICAgICAgIGhhc0VudkNvbHVtbkNvbmZpZyB8fCAhaGFzQXBpQ29sdW1uQ29uZmlnXG4gICAgICAgICAgICAgID8gdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgJ0FORCcsXG4gICAgICAgICAgICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHN0YXR1c0tleXNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0U3BlY2lmaWVkRG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgJ0FORCcsXG4gICAgICAgICAgICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHN0YXR1c0tleXNcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgIGhhc0VudkNvbHVtbkNvbmZpZzogb2JzRW52LFxuICAgICAgICAgIGhhc0FwaUNvbHVtbkNvbmZpZzogb2JzQXBpLFxuICAgICAgICAgIGlzU2VhcmNoUmVzdWx0OiBvZihmYWxzZSksXG4gICAgICAgICAgYWxsU3RhdHVzZXM6IG9mKGFsbFN0YXR1c2VzKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKSxcbiAgICBzd2l0Y2hNYXAocmVzID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2YocmVzKSxcbiAgICAgICAgZm9ya0pvaW4oXG4gICAgICAgICAgcmVzLmRvY3VtZW50cy5jb250ZW50Lm1hcChkb2N1bWVudCA9PlxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZVxuICAgICAgICAgICAgICAucmVxdWVzdFBlcm1pc3Npb24oQ0FOX1ZJRVdfQ0FTRV9QRVJNSVNTSU9OLCB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IERPU1NJRVJfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UuanNvblNjaGVtYURvY3VtZW50LFxuICAgICAgICAgICAgICAgIGlkZW50aWZpZXI6IGRvY3VtZW50LmlkLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgIClcbiAgICAgICAgKS5waXBlKGRlZmF1bHRJZkVtcHR5KFtdIGFzIGJvb2xlYW5bXSkpLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW3JlcywgZG9jdW1lbnRzQXV0aG9yaXphdGlvbl0pID0+ICh7XG4gICAgICAuLi5yZXMsXG4gICAgICBkb2N1bWVudHM6IHtcbiAgICAgICAgLi4ucmVzLmRvY3VtZW50cyxcbiAgICAgICAgY29udGVudDogcmVzLmRvY3VtZW50cy5jb250ZW50Lm1hcCgoZG9jdW1lbnQsIGluZGV4KSA9PiAoe1xuICAgICAgICAgIC4uLmRvY3VtZW50LFxuICAgICAgICAgIGxvY2tlZDogIWRvY3VtZW50c0F1dGhvcml6YXRpb25baW5kZXhdLFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgIH0pKSxcbiAgICBtYXAoXG4gICAgICAocmVzOiB7XG4gICAgICAgIGRvY3VtZW50czogRG9jdW1lbnRzIHwgU3BlY2lmaWVkRG9jdW1lbnRzO1xuICAgICAgICBoYXNFbnZDb2x1bW5Db25maWc6IGJvb2xlYW47XG4gICAgICAgIGhhc0FwaUNvbHVtbkNvbmZpZzogYm9vbGVhbjtcbiAgICAgICAgaXNTZWFyY2hSZXN1bHQ6IGJvb2xlYW47XG4gICAgICAgIHNlbGVjdGVkU3RhdHVzZXM6IEludGVybmFsQ2FzZVN0YXR1c1tdO1xuICAgICAgICBhbGxTdGF0dXNlczogSW50ZXJuYWxDYXNlU3RhdHVzW107XG4gICAgICB9KSA9PiB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0Q29sbGVjdGlvblNpemUocmVzLmRvY3VtZW50cyk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY2hlY2tQYWdlKHJlcy5kb2N1bWVudHMpO1xuICAgICAgICB0aGlzLnVwZGF0ZU5vUmVzdWx0c01lc3NhZ2UocmVzLmlzU2VhcmNoUmVzdWx0KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHRoaXMubGlzdFNlcnZpY2UubWFwRG9jdW1lbnRzKFxuICAgICAgICAgICAgcmVzLmRvY3VtZW50cyxcbiAgICAgICAgICAgIHJlcy5oYXNFbnZDb2x1bW5Db25maWcsXG4gICAgICAgICAgICByZXMuaGFzQXBpQ29sdW1uQ29uZmlnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdGF0dXNlczogcmVzLmFsbFN0YXR1c2VzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICksXG4gICAgbWFwKHJlcyA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzLmRhdGEpKSByZXR1cm4gcmVzLmRhdGE7XG5cbiAgICAgIHJldHVybiByZXMuZGF0YS5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlcy5zdGF0dXNlcy5maW5kKFxuICAgICAgICAgIChzdGF0dXM6IEludGVybmFsQ2FzZVN0YXR1cykgPT5cbiAgICAgICAgICAgIHN0YXR1cy5rZXkgPT09IGl0ZW0uaW50ZXJuYWxTdGF0dXMgfHwgc3RhdHVzLmtleSA9PT0gaXRlbS5zdGF0dXNcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFzdGF0dXMpIHJldHVybiBpdGVtO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICB0YWdzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHN0YXR1cy50aXRsZSxcbiAgICAgICAgICAgICAgdHlwZTogSW50ZXJuYWxDYXNlU3RhdHVzVXRpbHMuZ2V0VGFnVHlwZUZyb21JbnRlcm5hbENhc2VTdGF0dXNDb2xvcihzdGF0dXMuY29sb3IpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSksXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZ0Fzc2lnbmVlRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmxvYWRpbmdEb2N1bWVudEl0ZW1zID0gZmFsc2U7XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIF9wcmV2aW91c0RvY3VtZW50RGVmaW5pdGlvbk5hbWUhOiBzdHJpbmc7XG4gIHByaXZhdGUgX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhc3NpZ25lZVNlcnZpY2U6IERvc3NpZXJMaXN0QXNzaWduZWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYnJlYWRjcnVtYlNlcnZpY2U6IEJyZWFkY3J1bWJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYnVsa0Fzc2lnblNlcnZpY2U6IERvc3NpZXJCdWxrQXNzaWduU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbHVtblNlcnZpY2U6IERvc3NpZXJDb2x1bW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlzdFNlcnZpY2U6IERvc3NpZXJMaXN0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VUaXRsZVNlcnZpY2U6IFBhZ2VUaXRsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWdpbmF0aW9uU2VydmljZTogRG9zc2llckxpc3RQYWdpbmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlclNlcnZpY2U6IERvc3NpZXJQYXJhbWV0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZWFyY2hTZXJ2aWNlOiBEb3NzaWVyTGlzdFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdHVzU2VydmljZTogRG9zc2llckxpc3RTdGF0dXNTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRWaXNpYmxlVGFicygpO1xuICAgIHRoaXMub3BlbkRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucGFnZVRpdGxlU2VydmljZS5lbmFibGVSZXNldCgpO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoKHNlYXJjaEZpZWxkVmFsdWVzOiBTZWFyY2hGaWVsZFZhbHVlcyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2goc2VhcmNoRmllbGRWYWx1ZXMpO1xuICB9XG5cbiAgcHVibGljIHJvd0NsaWNrKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIHRoaXMubGlzdFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICB0aGlzLmJyZWFkY3J1bWJTZXJ2aWNlLmNhY2hlUXVlcnlQYXJhbXMoXG4gICAgICAgIGAvZG9zc2llcnMvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfWAsXG4gICAgICAgIHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNcbiAgICAgICk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9kb3NzaWVycy8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2RvY3VtZW50LyR7aXRlbS5pZH1gXSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdGFiQ2hhbmdlKHRhYjogRG9zc2llckxpc3RUYWIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlVGFiKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgICAgIHRoaXMudXBkYXRlTm9SZXN1bHRzTWVzc2FnZShmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZlVGFiLnRvTG93ZXJDYXNlKCkgPT09IHRhYi50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FyYm9uTGlzdC5tb2RlbC5zZWxlY3RlZFJvd3NDb3VudCgpKSB7XG4gICAgICB0aGlzLnNob3dDaGFuZ2VUYWJNb2RhbCQubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMudGFiQ2hhbmdlJC5uZXh0KHRhYik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZVRhYkNvbmZpcm0odGFiKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZVRhYkNhbmNlbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFic0NvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZUYWI6IFRhYiB8IHVuZGVmaW5lZCA9IHRoaXMudGFic0NvbXBvbmVudC50YWJzLmZpbmQoXG4gICAgICAodGFiOiBUYWIpID0+IHRhYi5pZCA9PT0gdGhpcy5hY3RpdmVUYWJcbiAgICApO1xuXG4gICAgaWYgKCFwcmV2VGFiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50YWJzQ29tcG9uZW50LnRhYnMuZmluZCgodGFiOiBUYWIpID0+IHRhYi5hY3RpdmUpLmFjdGl2ZSA9IGZhbHNlO1xuICAgIHByZXZUYWIuYWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBwYWdlQ2hhbmdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhcmJvbkxpc3Q/Lm1vZGVsLnNlbGVjdGVkUm93c0NvdW50KCkpIHtcbiAgICAgIHRoaXMuc2hvd0NoYW5nZVBhZ2VNb2RhbCQubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMucGFnaW5hdGlvbkNoYW5nZSQubmV4dCh7cGFnZSwgc2l6ZTogdGhpcy5wYWdpbmF0aW9uLnNpemV9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdlQ2hhbmdlKHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIHBhZ2VTaXplQ2hhbmdlKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhcmJvbkxpc3Q/Lm1vZGVsLnNlbGVjdGVkUm93c0NvdW50KCkpIHtcbiAgICAgIHRoaXMuc2hvd0NoYW5nZVBhZ2VNb2RhbCQubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMucGFnaW5hdGlvbkNoYW5nZSQubmV4dCh7cGFnZTogdGhpcy5wYWdpbmF0aW9uLnBhZ2UsIHNpemV9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdlU2l6ZUNoYW5nZShzaXplKTtcbiAgfVxuXG4gIHB1YmxpYyBzb3J0Q2hhbmdlZChuZXdTb3J0U3RhdGU6IFNvcnRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc29ydENoYW5nZWQobmV3U29ydFN0YXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgb25DaGFuZ2VUYWJDb25maXJtKHRhYjogRG9zc2llckxpc3RUYWIpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmdBc3NpZ25lZUZpbHRlciA9IHRydWU7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XG4gICAgdGhpcy51cGRhdGVOb1Jlc3VsdHNNZXNzYWdlKGZhbHNlKTtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNldFBhZ2UoMSk7XG4gICAgdGhpcy5hc3NpZ25lZVNlcnZpY2Uuc2V0QXNzaWduZWVGaWx0ZXIodGFiKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93QXNzaWduTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZERvY3VtZW50SWRzJC5uZXh0KFxuICAgICAgdGhpcy5jYXJib25MaXN0LnNlbGVjdGVkSXRlbXMubWFwKChkb2N1bWVudDogRG9jdW1lbnQpID0+IGRvY3VtZW50LmlkKVxuICAgICk7XG4gICAgdGhpcy5zaG93QXNzaWduTW9kYWwkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZUV2ZW50KGFzc2lnbmVlSWQ6IG51bGwgfCBzdHJpbmcsIGRvY3VtZW50SWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Fzc2lnbk1vZGFsJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoIWFzc2lnbmVlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJ1bGtBc3NpZ25TZXJ2aWNlLmJ1bGtBc3NpZ24oYXNzaWduZWVJZCwgZG9jdW1lbnRJZHMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmZvcmNlUmVmcmVzaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlUGFnZUNvbmZpcm0ocGFnaW5hdGlvbjogQ2FyYm9uUGFnaW5hdGlvblNlbGVjdGlvbik6IHZvaWQge1xuICAgIGlmIChwYWdpbmF0aW9uLnNpemUgIT09IHRoaXMucGFnaW5hdGlvbi5zaXplKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VTaXplQ2hhbmdlKHBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdlQ2hhbmdlKHBhZ2luYXRpb24ucGFnZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnREb3NzaWVyKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdEFjdGlvbnNDb21wb25lbnQuc3RhcnREb3NzaWVyKCk7XG4gIH1cblxuICBwdWJsaWMgZm9yY2VSZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdFNlcnZpY2UuZm9yY2VSZWZyZXNoKCk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RlZFN0YXR1c2VzQ2hhbmdlKHN0YXR1c2VzOiBJbnRlcm5hbENhc2VTdGF0dXNbXSk6IHZvaWQge1xuICAgIHRoaXMuc3RhdHVzU2VydmljZS5zZXRTZWxlY3RlZFN0YXR1c2VzKHN0YXR1c2VzKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN0YXJ0QnV0dG9uRGlzYWJsZUV2ZW50KGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlU3RhcnRCdXR0b24kLm5leHQoZGlzYWJsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZS5wYXJhbXNcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHBhcmFtczogUGFyYW1zKSA9PiBwYXJhbXM/LmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgICBmaWx0ZXIoZG9jRGVmTmFtZSA9PiAhIWRvY0RlZk5hbWUpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGRvY3VtZW50RGVmaW5pdG9uTmFtZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9wcmV2aW91c0RvY3VtZW50RGVmaW5pdGlvbk5hbWUpIHtcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuY2xlYXJQYXJhbWV0ZXJzKCk7XG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmNsZWFyU2VhcmNoRmllbGRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wcmV2aW91c0RvY3VtZW50RGVmaW5pdGlvbk5hbWUgPSBkb2N1bWVudERlZmluaXRvbk5hbWU7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY2xlYXJQYWdpbmF0aW9uKCk7XG4gICAgICAgIHRoaXMuYXNzaWduZWVTZXJ2aWNlLnJlc2V0QXNzaWduZWVGaWx0ZXIoKTtcbiAgICAgICAgdGhpcy5saXN0U2VydmljZS5zZXREb2N1bWVudERlZmluaXRpb25OYW1lKGRvY3VtZW50RGVmaW5pdG9uTmFtZSk7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nRmllbGRzID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRpbmdQYWdpbmF0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRpbmdTZWFyY2hGaWVsZHMgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ0Fzc2lnbmVlRmlsdGVyID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRpbmdEb2N1bWVudEl0ZW1zID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRpbmdTdGF0dXNlcyA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNldFZpc2libGVUYWJzKCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZURvc3NpZXJUYWJzID0gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZz8udmlzaWJsZURvc3NpZXJMaXN0VGFicyB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVOb1Jlc3VsdHNNZXNzYWdlKGlzU2VhcmNoUmVzdWx0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5ub1Jlc3VsdHNNZXNzYWdlJC5uZXh0KFxuICAgICAgaXNTZWFyY2hSZXN1bHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2Rvc3NpZXIubm9SZXN1bHRzLnNlYXJjaC5kZXNjcmlwdGlvbicsXG4gICAgICAgICAgICBpc1NlYXJjaFJlc3VsdCxcbiAgICAgICAgICAgIHRpdGxlOiAnZG9zc2llci5ub1Jlc3VsdHMuc2VhcmNoLnRpdGxlJyxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBkb3NzaWVyLm5vUmVzdWx0cy4ke3RoaXMuYWN0aXZlVGFiID8/ICdBTEwnfS5kZXNjcmlwdGlvbmAsXG4gICAgICAgICAgICBpc1NlYXJjaFJlc3VsdCxcbiAgICAgICAgICAgIHRpdGxlOiBgZG9zc2llci5ub1Jlc3VsdHMuJHt0aGlzLmFjdGl2ZVRhYiA/PyAnQUxMJ30udGl0bGVgLFxuICAgICAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJ7XG4gICAgZmllbGRzOiBmaWVsZHMkIHwgYXN5bmMsXG4gICAgZG9jdW1lbnRJdGVtczogZG9jdW1lbnRJdGVtcyQgfCBhc3luYyxcbiAgICBub1Jlc3VsdHNNZXNzYWdlOiBub1Jlc3VsdHNNZXNzYWdlJCB8IGFzeW5jLFxuICAgIHNlYXJjaEZpZWxkczogc2VhcmNoRmllbGRzJCB8IGFzeW5jLFxuICAgIHNjaGVtYTogc2NoZW1hJCB8IGFzeW5jLFxuICAgIHNob3dBc3NpZ25Nb2RhbDogc2hvd0Fzc2lnbk1vZGFsJCB8IGFzeW5jLFxuICAgIHNlbGVjdGVkRG9jdW1lbnRJZHM6IHNlbGVjdGVkRG9jdW1lbnRJZHMkIHwgYXN5bmMsXG4gICAgc3RhdHVzZXM6IHN0YXR1c2VzJCB8IGFzeW5jLFxuICAgIHNlbGVjdGVkU3RhdHVzZXM6IHNlbGVjdGVkU3RhdHVzZXMkIHwgYXN5bmMsXG4gICAgc2hvd1N0YXR1c1NlbGVjdG9yOiBzaG93U3RhdHVzU2VsZWN0b3IkIHwgYXN5bmMsXG4gICAgbG9hZGVkOlxuICAgICAgIWxvYWRpbmdGaWVsZHMgJiZcbiAgICAgICFsb2FkaW5nUGFnaW5hdGlvbiAmJlxuICAgICAgIWxvYWRpbmdTZWFyY2hGaWVsZHMgJiZcbiAgICAgICFsb2FkaW5nQXNzaWduZWVGaWx0ZXIgJiZcbiAgICAgICFsb2FkaW5nRG9jdW1lbnRJdGVtcyxcbiAgfSBhcyBvYnNcIlxuPlxuICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50IHB0LTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbWItNVwiPlxuICAgICAgICA8dmFsdGltby1kb3NzaWVyLWxpc3QtYWN0aW9uc1xuICAgICAgICAgIFtsb2FkaW5nXT1cIiFvYnMubG9hZGVkXCJcbiAgICAgICAgICAoZm9ybUZsb3dDb21wbGV0ZSk9XCJmb3JjZVJlZnJlc2goKVwiXG4gICAgICAgICAgKHN0YXJ0QnV0dG9uRGlzYWJsZUV2ZW50KT1cIm9uU3RhcnRCdXR0b25EaXNhYmxlRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgID48L3ZhbHRpbW8tZG9zc2llci1saXN0LWFjdGlvbnM+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hGaWVsZHM7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib2JzLmxvYWRlZDsgZWxzZSBsb2FkaW5nXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3Q7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1bGtBc3NpZ25Nb2RhbDsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGFuZ2VQYWdlTW9kYWxcIj48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hhbmdlVGFiTW9kYWxcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3NlYXJjaEZpZWxkcyBsZXQtb2JzPVwib2JzXCI+XG4gIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgPHZhbHRpbW8tc2VhcmNoLWZpZWxkc1xuICAgICAgW3NlYXJjaEZpZWxkc109XCJvYnMuc2VhcmNoRmllbGRzXCJcbiAgICAgIChkb1NlYXJjaCk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICBbZG9jdW1lbnREZWZpbml0aW9uTmFtZV09XCJkb2N1bWVudERlZmluaXRpb25OYW1lJCB8IGFzeW5jXCJcbiAgICAgIFtkZWZhdWx0VmFsdWVzXT1cInNlYXJjaEZpZWxkVmFsdWVzJCB8IGFzeW5jXCJcbiAgICAgIFtpbnB1dERpc2FibGVkXT1cIiFvYnMubG9hZGVkXCJcbiAgICAgIFtleHRlcm5hbFNlYXJjaEZpZWxkXT1cIm9icy5zaG93U3RhdHVzU2VsZWN0b3JcIlxuICAgID5cbiAgICAgIDx2YWx0aW1vLXN0YXR1cy1zZWxlY3RvclxuICAgICAgICAqbmdJZj1cIm9icy5zaG93U3RhdHVzU2VsZWN0b3JcIlxuICAgICAgICBbc3RhdHVzZXNdPVwib2JzLnN0YXR1c2VzXCJcbiAgICAgICAgW3NlbGVjdGVkU3RhdHVzZXNdPVwib2JzLnNlbGVjdGVkU3RhdHVzZXNcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIW9icy5sb2FkZWRcIlxuICAgICAgICAoc2VsZWN0ZWRTdGF0dXNlc0NoYW5nZUV2ZW50KT1cIm9uU2VsZWN0ZWRTdGF0dXNlc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L3ZhbHRpbW8tc3RhdHVzLXNlbGVjdG9yPlxuICAgIDwvdmFsdGltby1zZWFyY2gtZmllbGRzPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdCBsZXQtb2JzPVwib2JzXCI+XG4gIDx2YWx0aW1vLWNhcmJvbi1saXN0XG4gICAgW2ZpZWxkc109XCJvYnMuZmllbGRzXCJcbiAgICBbaGVhZGVyXT1cImZhbHNlXCJcbiAgICBbaW5pdGlhbFNvcnRTdGF0ZV09XCJwYWdpbmF0aW9uLnNvcnRcIlxuICAgIFtpdGVtc109XCJvYnMuZG9jdW1lbnRJdGVtc1wiXG4gICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgcGFnaW5hdGlvbklkZW50aWZpZXI9XCJkb3NzaWVyTGlzdFwiXG4gICAgbG9ja2VkVG9vbHRpcFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5yb3dMb2NrZWRcIlxuICAgIFtzaG93U2VsZWN0aW9uQ29sdW1uXT1cImNhbkhhdmVBc3NpZ25lZVwiXG4gICAgW3RhYmxlVHJhbnNsYXRpb25zXT1cInRhYmxlVHJhbnNsYXRpb25zXCJcbiAgICAocGFnaW5hdGlvbkNsaWNrZWQpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAocGFnaW5hdGlvblNldCk9XCJwYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAocm93Q2xpY2tlZCk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAoc29ydENoYW5nZWQpPVwic29ydENoYW5nZWQoJGV2ZW50KVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyIGNhcmJvblRvb2xiYXJBY3Rpb25zPlxuICAgICAgPGJ1dHRvbiBjZHNCdXR0b249XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNob3dBc3NpZ25Nb2RhbCgpXCI+XG4gICAgICAgIHt7ICdkb3NzaWVyLmJ1bGtBc3NpZ24uYXNzaWduJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNhcmJvblRvb2xiYXJDb250ZW50PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRvc3NpZXJMaXN0QWN0aW9uc1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2FjdGlvbl09XCJvYnMubm9SZXN1bHRzTWVzc2FnZS5pc1NlYXJjaFJlc3VsdCA/IG51bGwgOiBkb3NzaWVyTGlzdEFjdGlvbnNcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIm9icy5ub1Jlc3VsdHNNZXNzYWdlLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCJvYnMubm9SZXN1bHRzTWVzc2FnZS50aXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuXG4gICAgPGRpdiB0YWJzICpuZ0lmPVwiY2FuSGF2ZUFzc2lnbmVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFic1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L3ZhbHRpbW8tY2FyYm9uLWxpc3Q+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhYnM+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhc3NpZ25lZUZpbHRlciQgfCBhc3luYyBhcyBhc3NpZ25lZUZpbHRlclwiPlxuICAgIDxjZHMtdGFic1xuICAgICAgKm5nSWY9XCIhdmlzaWJsZURvc3NpZXJUYWJzOyBlbHNlIGNvbmZpZ3VyZWRUYWJzXCJcbiAgICAgIHR5cGU9XCJjb250YWluZWRcIlxuICAgICAgY2xhc3M9XCJkb3NzaWVyLWxpc3QtdGFic1wiXG4gICAgPlxuICAgICAgPGNkcy10YWJcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiBkZWZhdWx0VGFiczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCJcbiAgICAgICAgW2FjdGl2ZV09XCJhc3NpZ25lZUZpbHRlciA9PT0gdGFiXCJcbiAgICAgICAgaGVhZGluZz1cInt7ICdkb3NzaWVyLnRhYnMuJyArIHRhYiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtpZF09XCJ0YWJcIlxuICAgICAgICAoc2VsZWN0ZWQpPVwidGFiQ2hhbmdlKHRhYilcIlxuICAgICAgPjwvY2RzLXRhYj5cbiAgICA8L2Nkcy10YWJzPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29uZmlndXJlZFRhYnM+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhc3NpZ25lZUZpbHRlciQgfCBhc3luYyBhcyBhc3NpZ25lZUZpbHRlclwiPlxuICAgIDxjZHMtdGFicyB0eXBlPVwiY29udGFpbmVkXCIgY2xhc3M9XCJkb3NzaWVyLWxpc3QtdGFic1wiPlxuICAgICAgPGNkcy10YWJcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB2aXNpYmxlRG9zc2llclRhYnM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiXG4gICAgICAgIFthY3RpdmVdPVwiYXNzaWduZWVGaWx0ZXIgPT09IHRhYlwiXG4gICAgICAgIGhlYWRpbmc9XCJ7eyAnZG9zc2llci50YWJzLicgKyB0YWIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbaWRdPVwidGFiXCJcbiAgICAgICAgKHNlbGVjdGVkKT1cInRhYkNoYW5nZSh0YWIpXCJcbiAgICAgID48L2Nkcy10YWI+XG4gICAgPC9jZHMtdGFicz5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdcbiAgPjx2YWx0aW1vLWNhcmJvbi1saXN0IFtsb2FkaW5nXT1cInRydWVcIj5cbiAgICA8ZGl2IHRhYnMgKm5nSWY9XCJjYW5IYXZlQXNzaWduZWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJzXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+IDwvdmFsdGltby1jYXJib24tbGlzdFxuPjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnVsa0Fzc2lnbk1vZGFsIGxldC1vYnM9XCJvYnNcIj5cbiAgPHZhbHRpbW8tZG9zc2llci1idWxrLWFzc2lnbi1tb2RhbFxuICAgIFtkb2N1bWVudElkc109XCJvYnMuc2VsZWN0ZWREb2N1bWVudElkc1wiXG4gICAgW29wZW5dPVwib2JzLnNob3dBc3NpZ25Nb2RhbFwiXG4gICAgKGNsb3NlRXZlbnQpPVwib25DbG9zZUV2ZW50KCRldmVudCwgb2JzLnNlbGVjdGVkRG9jdW1lbnRJZHMpXCJcbiAgPjwvdmFsdGltby1kb3NzaWVyLWJ1bGstYXNzaWduLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaGFuZ2VQYWdlTW9kYWw+XG4gIDx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICAgIGNvbmZpcm1CdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVBhZ2VNb2RhbC5jb25maXJtXCJcbiAgICBjb250ZW50VHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVBhZ2VNb2RhbC5jb250ZW50XCJcbiAgICBbb3V0cHV0T25Db25maXJtXT1cInBhZ2luYXRpb25DaGFuZ2UkIHwgYXN5bmNcIlxuICAgIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93Q2hhbmdlUGFnZU1vZGFsJFwiXG4gICAgdGl0bGVUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuY2hhbmdlUGFnZU1vZGFsLnRpdGxlXCJcbiAgICAoY29uZmlybUV2ZW50KT1cIm9uQ2hhbmdlUGFnZUNvbmZpcm0oJGV2ZW50KVwiXG4gID48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaGFuZ2VUYWJNb2RhbD5cbiAgPHZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsXG4gICAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuY2hhbmdlVGFiTW9kYWwuY29uZmlybVwiXG4gICAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5jaGFuZ2VUYWJNb2RhbC5jb250ZW50XCJcbiAgICBbb3V0cHV0T25Db25maXJtXT1cInRhYkNoYW5nZSQgfCBhc3luY1wiXG4gICAgW3Nob3dNb2RhbFN1YmplY3QkXT1cInNob3dDaGFuZ2VUYWJNb2RhbCRcIlxuICAgIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVRhYk1vZGFsLnRpdGxlXCJcbiAgICAoY2FuY2VsRXZlbnQpPVwib25DaGFuZ2VUYWJDYW5jZWwoKVwiXG4gICAgKGNvbmZpcm1FdmVudCk9XCJvbkNoYW5nZVRhYkNvbmZpcm0oJGV2ZW50KVwiXG4gID48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkb3NzaWVyTGlzdEFjdGlvbnM+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImNhbkNyZWF0ZURvY3VtZW50JCB8IGFzeW5jXCJcbiAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVN0YXJ0QnV0dG9uJCB8IGFzeW5jXCJcbiAgICAoY2xpY2spPVwic3RhcnREb3NzaWVyKClcIlxuICA+XG4gICAge3sgJ1N0YXJ0IERvc3NpZXInIHwgdHJhbnNsYXRlIH19XG5cbiAgICA8c3ZnIGNkc0ljb249XCJhZGRcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -14,20 +14,27 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
17
+ import { CARBON_CONSTANTS } from '@valtimo/components';
18
+ import { NotificationService } from 'carbon-components-angular';
17
19
  import { BehaviorSubject, combineLatest, map, of, switchMap } from 'rxjs';
18
20
  import * as i0 from "@angular/core";
19
21
  import * as i1 from "@valtimo/document";
20
22
  import * as i2 from "../../services";
21
- import * as i3 from "@angular/common";
22
- import * as i4 from "../dossier-process-start-modal/dossier-process-start-modal.component";
23
+ import * as i3 from "carbon-components-angular";
24
+ import * as i4 from "@angular/router";
23
25
  import * as i5 from "@ngx-translate/core";
26
+ import * as i6 from "@angular/common";
27
+ import * as i7 from "../dossier-process-start-modal/dossier-process-start-modal.component";
24
28
  export class DossierListActionsComponent {
25
29
  set loading(value) {
26
30
  this._loading$.next(value);
27
31
  }
28
- constructor(documentService, listService) {
32
+ constructor(documentService, listService, notificationService, router, translateService) {
29
33
  this.documentService = documentService;
30
34
  this.listService = listService;
35
+ this.notificationService = notificationService;
36
+ this.router = router;
37
+ this.translateService = translateService;
31
38
  this._loading$ = new BehaviorSubject(true);
32
39
  this.formFlowComplete = new EventEmitter();
33
40
  this.startButtonDisableEvent = new EventEmitter();
@@ -70,19 +77,34 @@ export class DossierListActionsComponent {
70
77
  onFormFlowComplete() {
71
78
  this.formFlowComplete.emit(null);
72
79
  }
80
+ onNoProcessLinked() {
81
+ this.notificationService.ngOnDestroy();
82
+ this.notificationService.showActionable({
83
+ type: 'warning',
84
+ lowContrast: true,
85
+ title: this.translateService.instant('dossier.noLinkedStartProcessNotification'),
86
+ actions: [
87
+ {
88
+ text: this.translateService.instant('dossier.configure'),
89
+ click: () => this.router.navigate(['/process-links']),
90
+ },
91
+ ],
92
+ duration: CARBON_CONSTANTS.notificationDuration,
93
+ });
94
+ }
73
95
  showStartProcessModal() {
74
96
  if (this.selectedProcessDocumentDefinition !== null) {
75
97
  this.processStart.openModal(this.selectedProcessDocumentDefinition);
76
98
  this.selectedProcessDocumentDefinition = null;
77
99
  }
78
100
  }
79
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierListActionsComponent, deps: [{ token: i1.DocumentService }, { token: i2.DossierListService }], target: i0.ɵɵFactoryTarget.Component }); }
80
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DossierListActionsComponent, selector: "valtimo-dossier-list-actions", inputs: { loading: "loading" }, outputs: { formFlowComplete: "formFlowComplete", startButtonDisableEvent: "startButtonDisableEvent" }, viewQueries: [{ propertyName: "processStart", first: true, predicate: ["processStartModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div *ngIf=\"associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\">\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<valtimo-dossier-process-start-modal\n #processStartModal\n (formFlowComplete)=\"onFormFlowComplete()\"\n></valtimo-dossier-process-start-modal>\n", styles: ["/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DossierProcessStartModalComponent, selector: "valtimo-dossier-process-start-modal", outputs: ["formFlowComplete"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierListActionsComponent, deps: [{ token: i1.DocumentService }, { token: i2.DossierListService }, { token: i3.NotificationService }, { token: i4.Router }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
102
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DossierListActionsComponent, selector: "valtimo-dossier-list-actions", inputs: { loading: "loading" }, outputs: { formFlowComplete: "formFlowComplete", startButtonDisableEvent: "startButtonDisableEvent" }, providers: [NotificationService], viewQueries: [{ propertyName: "processStart", first: true, predicate: ["processStartModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div *ngIf=\"associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\">\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<valtimo-dossier-process-start-modal\n #processStartModal\n (formFlowComplete)=\"onFormFlowComplete()\"\n (noProcessLinked)=\"onNoProcessLinked()\"\n></valtimo-dossier-process-start-modal>\n", styles: ["/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.DossierProcessStartModalComponent, selector: "valtimo-dossier-process-start-modal", outputs: ["formFlowComplete", "noProcessLinked"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
81
103
  }
82
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierListActionsComponent, decorators: [{
83
105
  type: Component,
84
- args: [{ selector: 'valtimo-dossier-list-actions', template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div *ngIf=\"associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\">\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<valtimo-dossier-process-start-modal\n #processStartModal\n (formFlowComplete)=\"onFormFlowComplete()\"\n></valtimo-dossier-process-start-modal>\n", styles: ["/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
85
- }], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.DossierListService }], propDecorators: { processStart: [{
106
+ args: [{ selector: 'valtimo-dossier-list-actions', providers: [NotificationService], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div *ngIf=\"associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\">\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<valtimo-dossier-process-start-modal\n #processStartModal\n (formFlowComplete)=\"onFormFlowComplete()\"\n (noProcessLinked)=\"onNoProcessLinked()\"\n></valtimo-dossier-process-start-modal>\n", styles: ["/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
107
+ }], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.DossierListService }, { type: i3.NotificationService }, { type: i4.Router }, { type: i5.TranslateService }], propDecorators: { processStart: [{
86
108
  type: ViewChild,
87
109
  args: ['processStartModal']
88
110
  }], loading: [{
@@ -92,4 +114,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
92
114
  }], startButtonDisableEvent: [{
93
115
  type: Output
94
116
  }] } });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWxpc3QtYWN0aW9ucy9kb3NzaWVyLWxpc3QtYWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbGlzdC1hY3Rpb25zL2Rvc3NpZXItbGlzdC1hY3Rpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFXcEYsTUFBTSxPQUFPLDJCQUEyQjtJQUl0QyxJQUFhLE9BQU8sQ0FBQyxLQUFjO1FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFnQ0QsWUFDbUIsZUFBZ0MsRUFDaEMsV0FBK0I7UUFEL0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQXJDakMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBS3RELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEIsNEJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVoRSwwQ0FBcUMsR0FFakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQy9DLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQ2pDLGFBQWEsQ0FBQztZQUNaLHNCQUFzQjtnQkFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMscURBQXFELENBQ3hFLHNCQUFzQixFQUN0QixJQUFJLENBQ0w7Z0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsU0FBUztTQUNmLENBQUMsQ0FDSCxFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsMkNBQTJDLEdBQUcsMEJBQTBCLENBQUM7WUFDOUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDO1lBQ3RGLE9BQU8sMEJBQTBCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVNLHNDQUFpQyxHQUFxQyxJQUFJLENBQUM7UUFFM0UsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTNCLGdEQUEyQyxHQUFxQyxFQUFFLENBQUM7SUFLeEYsQ0FBQztJQUVHLFFBQVE7UUFDYixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE1BQU0sb0NBQW9DLEdBQUcsSUFBSSxDQUFDLDJDQUEyQyxDQUFDO1FBRTlGLElBQUksb0NBQW9DLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BELENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsaUNBQWlDLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFTSxhQUFhLENBQUMseUJBQW9EO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlDQUFpQyxHQUFHLHlCQUF5QixDQUFDO1FBQ25FLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsaUNBQWlDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQzsrR0E3RVUsMkJBQTJCO21HQUEzQiwyQkFBMkIsOFRDNUJ4Qyw2eEVBZ0VBOzs0RkRwQ2EsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLDhCQUE4QjtxSEFLUixZQUFZO3NCQUEzQyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFHakIsT0FBTztzQkFBbkIsS0FBSztnQkFJSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ21CLHVCQUF1QjtzQkFBaEQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RvY3VtZW50U2VydmljZSwgUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbn0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Rvc3NpZXJMaXN0U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtEb3NzaWVyUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnR9IGZyb20gJy4uL2Rvc3NpZXItcHJvY2Vzcy1zdGFydC1tb2RhbC9kb3NzaWVyLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50JztcblxuZGVjbGFyZSBjb25zdCAkO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItbGlzdC1hY3Rpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbGlzdC1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1saXN0LWFjdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llckxpc3RBY3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgncHJvY2Vzc1N0YXJ0TW9kYWwnKSBwcm9jZXNzU3RhcnQ6IERvc3NpZXJQcm9jZXNzU3RhcnRNb2RhbENvbXBvbmVudDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9sb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIEBJbnB1dCgpIHNldCBsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbG9hZGluZyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBAT3V0cHV0KCkgZm9ybUZsb3dDb21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzdGFydEJ1dHRvbkRpc2FibGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zJDogT2JzZXJ2YWJsZTxcbiAgICBBcnJheTxQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPlxuICA+ID0gdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZVxuICAgICAgICAgID8gdGhpcy5kb2N1bWVudFNlcnZpY2UuZmluZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zQnlDYW5Jbml0aWFsaXplRG9jdW1lbnQoXG4gICAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IG9mKFtdKSxcbiAgICAgICAgdGhpcy5fbG9hZGluZyQsXG4gICAgICBdKVxuICAgICksXG4gICAgbWFwKChbcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMsIGxvYWRpbmddKSA9PiB7XG4gICAgICB0aGlzLl9jYWNoZWRBc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMgPSBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucztcbiAgICAgIHRoaXMuc3RhcnRCdXR0b25EaXNhYmxlRXZlbnQuZW1pdChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPT09IDAgfHwgbG9hZGluZyk7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMuZmlsdGVyKGRlZmluaXRpb24gPT4gZGVmaW5pdGlvbi5jYW5Jbml0aWFsaXplRG9jdW1lbnQpO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb246IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIG1vZGFsTGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2NhY2hlZEFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uczogQXJyYXk8UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbj4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlzdFNlcnZpY2U6IERvc3NpZXJMaXN0U2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxMaXN0ZW5lckFkZGVkID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc3RhcnREb3NzaWVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyA9IHRoaXMuX2NhY2hlZEFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucztcblxuICAgIGlmIChhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgJCgnI3N0YXJ0UHJvY2VzcycpLm1vZGFsKCdzaG93Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uID0gYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zWzBdO1xuICAgICAgdGhpcy5zaG93U3RhcnRQcm9jZXNzTW9kYWwoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0UHJvY2Vzcyhwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uOiBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgbW9kYWwgPSAkKCcjc3RhcnRQcm9jZXNzJyk7XG4gICAgaWYgKCF0aGlzLm1vZGFsTGlzdGVuZXJBZGRlZCkge1xuICAgICAgbW9kYWwub24oJ2hpZGRlbi5icy5tb2RhbCcsIHRoaXMuc2hvd1N0YXJ0UHJvY2Vzc01vZGFsLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tb2RhbExpc3RlbmVyQWRkZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb247XG4gICAgbW9kYWwubW9kYWwoJ2hpZGUnKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZvcm1GbG93Q29tcGxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtRmxvd0NvbXBsZXRlLmVtaXQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dTdGFydFByb2Nlc3NNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1N0YXJ0Lm9wZW5Nb2RhbCh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbik7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgKm5nSWY9XCJhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMkIHwgYXN5bmMgYXMgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1vZGFsIGZhZGVcIlxuICAgIGlkPVwic3RhcnRQcm9jZXNzXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICByb2xlPVwiZGlhbG9nXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJzdGFydFByb2Nlc3NMYWJlbFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInN0YXJ0UHJvY2Vzc0xhYmVsXCI+XG4gICAgICAgICAgICB7eyAnZGFzaGJvYXJkLnN0YXJ0UHJvY2Vzcy50aXRsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2gzPlxuXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbS0wXCI+XG4gICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uIG9mIGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByb2Nlc3MocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbilcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx0ZD57eyBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLnByb2Nlc3NOYW1lIH19PC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5cbiAgICAgICAgICAgIHt7ICdjdGEuY2xvc2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjx2YWx0aW1vLWRvc3NpZXItcHJvY2Vzcy1zdGFydC1tb2RhbFxuICAjcHJvY2Vzc1N0YXJ0TW9kYWxcbiAgKGZvcm1GbG93Q29tcGxldGUpPVwib25Gb3JtRmxvd0NvbXBsZXRlKClcIlxuPjwvdmFsdGltby1kb3NzaWVyLXByb2Nlc3Mtc3RhcnQtbW9kYWw+XG4iXX0=
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWxpc3QtYWN0aW9ucy9kb3NzaWVyLWxpc3QtYWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbGlzdC1hY3Rpb25zL2Rvc3NpZXItbGlzdC1hY3Rpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHeEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVlwRixNQUFNLE9BQU8sMkJBQTJCO0lBSXRDLElBQWEsT0FBTyxDQUFDLEtBQWM7UUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQThCRCxZQUNtQixlQUFnQyxFQUNoQyxXQUErQixFQUMvQixtQkFBd0MsRUFDeEMsTUFBYyxFQUNkLGdCQUFrQztRQUpsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7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QUNQO29CQUNFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO29CQUN4RCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2lCQUN0RDthQUNGO1lBQ0QsUUFBUSxFQUFFLGdCQUFnQixDQUFDLG9CQUFvQjtTQUNoRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksSUFBSSxDQUFDLGlDQUFpQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7K0dBL0ZVLDJCQUEyQjttR0FBM0IsMkJBQTJCLDhMQUYzQixDQUFDLG1CQUFtQixDQUFDLDZJQy9CbEMsMDBFQWlFQTs7NEZEaENhLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSw4QkFBOEIsYUFHN0IsQ0FBQyxtQkFBbUIsQ0FBQzsyTUFHQSxZQUFZO3NCQUEzQyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFHakIsT0FBTztzQkFBbkIsS0FBSztnQkFJb0IsZ0JBQWdCO3NCQUF6QyxNQUFNO2dCQUNtQix1QkFBdUI7c0JBQWhELE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDQVJCT05fQ09OU1RBTlRTfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlLCBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge05vdGlmaWNhdGlvblNlcnZpY2V9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Rvc3NpZXJMaXN0U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtEb3NzaWVyUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnR9IGZyb20gJy4uL2Rvc3NpZXItcHJvY2Vzcy1zdGFydC1tb2RhbC9kb3NzaWVyLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50JztcblxuZGVjbGFyZSBjb25zdCAkO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItbGlzdC1hY3Rpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbGlzdC1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1saXN0LWFjdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbTm90aWZpY2F0aW9uU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJMaXN0QWN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3Byb2Nlc3NTdGFydE1vZGFsJykgcHJvY2Vzc1N0YXJ0OiBEb3NzaWVyUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBASW5wdXQoKSBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmckLm5leHQodmFsdWUpO1xuICB9XG5cbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBmb3JtRmxvd0NvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHN0YXJ0QnV0dG9uRGlzYWJsZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMkOiBPYnNlcnZhYmxlPFxuICAgIEFycmF5PFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24+XG4gID4gPSB0aGlzLmxpc3RTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lXG4gICAgICAgICAgPyB0aGlzLmRvY3VtZW50U2VydmljZS5maW5kUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNCeUNhbkluaXRpYWxpemVEb2N1bWVudChcbiAgICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogb2YoW10pLFxuICAgICAgICB0aGlzLl9sb2FkaW5nJCxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFtwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucywgbG9hZGluZ10pID0+IHtcbiAgICAgIHRoaXMuX2NhY2hlZEFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyA9IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zO1xuICAgICAgdGhpcy5zdGFydEJ1dHRvbkRpc2FibGVFdmVudC5lbWl0KHByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zLmxlbmd0aCA9PT0gMCB8fCBsb2FkaW5nKTtcbiAgICAgIHJldHVybiBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5maWx0ZXIoZGVmaW5pdGlvbiA9PiBkZWZpbml0aW9uLmNhbkluaXRpYWxpemVEb2N1bWVudCk7XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIHNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1vZGFsTGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9jYWNoZWRBc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnM6IEFycmF5PFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24+ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RTZXJ2aWNlOiBEb3NzaWVyTGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbExpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydERvc3NpZXIoKTogdm9pZCB7XG4gICAgY29uc3QgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zID0gdGhpcy5fY2FjaGVkQXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zO1xuXG4gICAgaWYgKGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAkKCcjc3RhcnRQcm9jZXNzJykubW9kYWwoJ3Nob3cnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPSBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNbMF07XG4gICAgICB0aGlzLnNob3dTdGFydFByb2Nlc3NNb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RQcm9jZXNzKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb246IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBtb2RhbCA9ICQoJyNzdGFydFByb2Nlc3MnKTtcbiAgICBpZiAoIXRoaXMubW9kYWxMaXN0ZW5lckFkZGVkKSB7XG4gICAgICBtb2RhbC5vbignaGlkZGVuLmJzLm1vZGFsJywgdGhpcy5zaG93U3RhcnRQcm9jZXNzTW9kYWwuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1vZGFsTGlzdGVuZXJBZGRlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uID0gcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjtcbiAgICBtb2RhbC5tb2RhbCgnaGlkZScpO1xuICB9XG5cbiAgcHVibGljIG9uRm9ybUZsb3dDb21wbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1GbG93Q29tcGxldGUuZW1pdChudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5vUHJvY2Vzc0xpbmtlZCgpOiB2b2lkIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UubmdPbkRlc3Ryb3koKTtcblxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93QWN0aW9uYWJsZSh7XG4gICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICBsb3dDb250cmFzdDogdHJ1ZSxcbiAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZG9zc2llci5ub0xpbmtlZFN0YXJ0UHJvY2Vzc05vdGlmaWNhdGlvbicpLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Rvc3NpZXIuY29uZmlndXJlJyksXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3Byb2Nlc3MtbGlua3MnXSksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZHVyYXRpb246IENBUkJPTl9DT05TVEFOVFMubm90aWZpY2F0aW9uRHVyYXRpb24sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dTdGFydFByb2Nlc3NNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1N0YXJ0Lm9wZW5Nb2RhbCh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbik7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgKm5nSWY9XCJhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMkIHwgYXN5bmMgYXMgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1vZGFsIGZhZGVcIlxuICAgIGlkPVwic3RhcnRQcm9jZXNzXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICByb2xlPVwiZGlhbG9nXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJzdGFydFByb2Nlc3NMYWJlbFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInN0YXJ0UHJvY2Vzc0xhYmVsXCI+XG4gICAgICAgICAgICB7eyAnZGFzaGJvYXJkLnN0YXJ0UHJvY2Vzcy50aXRsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2gzPlxuXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbS0wXCI+XG4gICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uIG9mIGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByb2Nlc3MocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbilcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx0ZD57eyBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLnByb2Nlc3NOYW1lIH19PC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5cbiAgICAgICAgICAgIHt7ICdjdGEuY2xvc2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjx2YWx0aW1vLWRvc3NpZXItcHJvY2Vzcy1zdGFydC1tb2RhbFxuICAjcHJvY2Vzc1N0YXJ0TW9kYWxcbiAgKGZvcm1GbG93Q29tcGxldGUpPVwib25Gb3JtRmxvd0NvbXBsZXRlKClcIlxuICAobm9Qcm9jZXNzTGlua2VkKT1cIm9uTm9Qcm9jZXNzTGlua2VkKClcIlxuPjwvdmFsdGltby1kb3NzaWVyLXByb2Nlc3Mtc3RhcnQtbW9kYWw+XG4iXX0=