@tiba-spark/client-shared-lib 26.1.1-519 → 26.1.1-521

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.
@@ -322,6 +322,8 @@ export class SignalR {
322
322
  console.debug(`SignalR Connection Established!`);
323
323
  this.handleRealTimeAwaitingSubscriptions();
324
324
  this.handleNotificationAwaitingSubscription();
325
+ this.resubscribeActiveRealtimeEvents();
326
+ this.resubscribeActiveNotifications();
325
327
  })
326
328
  .catch(async (error) => {
327
329
  if (isUnauthorizedOrExpired(error, this.sessionStorageService.accessToken, this.authTokenService)) {
@@ -352,6 +354,8 @@ export class SignalR {
352
354
  console.debug(`SignalR Connection Established! Retry #${retryCount}`);
353
355
  this.handleRealTimeAwaitingSubscriptions();
354
356
  this.handleNotificationAwaitingSubscription();
357
+ this.resubscribeActiveRealtimeEvents();
358
+ this.resubscribeActiveNotifications();
355
359
  })
356
360
  .catch((error) => {
357
361
  if (isUnauthorizedOrExpired(error, this.sessionStorageService.accessToken, this.authTokenService)) {
@@ -375,6 +379,24 @@ export class SignalR {
375
379
  this.notificationSubscriptionQueue.forEach(awaitingSubscription => awaitingSubscription());
376
380
  this.notificationSubscriptionQueue.splice(0);
377
381
  }
382
+ // Server-side SignalR group membership is keyed to the connection id, so a fresh start()
383
+ // (e.g. the rebuild after a token-expiry refresh) begins with no group memberships.
384
+ // Re-register every realtime and notification subscription that was active on the previous
385
+ // connection, otherwise in-flight operations (like report generation) never receive their
386
+ // notification and realtime events stop arriving (the client-side refcounts still mark them
387
+ // as subscribed, so no delta ever re-triggers RegisterPark).
388
+ resubscribeActiveRealtimeEvents() {
389
+ const rtEventSubscriptions = this.realtimeEventService.getSubscriptionForReconnect();
390
+ if (rtEventSubscriptions.subscribe.length) {
391
+ this.invokeRealtimeRegistration(rtEventSubscriptions);
392
+ }
393
+ }
394
+ resubscribeActiveNotifications() {
395
+ const notificationSubscriptions = this.notificationEventService.getSubscriptionForReconnect();
396
+ notificationSubscriptions.forEach(notificationSubscription => {
397
+ this.invokeNotificationRegistration(notificationSubscription);
398
+ });
399
+ }
378
400
  handleDisconnect() {
379
401
  this.subscriptionQueue = [];
380
402
  this.notificationSubscriptionQueue = [];
@@ -468,4 +490,4 @@ function isUnauthorizedOrExpired(error, token, authTokenService) {
468
490
  const unauthorized = error?.message?.includes(`Status code '${HttpStatusCode.Unauthorized}'`);
469
491
  return unauthorized || authTokenService.isTokenExpired(token);
470
492
  }
471
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFpQixvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQTRCLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDakcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQzlNLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxtQ0FBbUMsRUFBRSxrQ0FBa0MsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pLLE9BQU8sRUFB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGF0YWRvZ0xvZ3MgfSBmcm9tICdAZGF0YWRvZy9icm93c2VyLWxvZ3MnO1xuaW1wb3J0IHsgSHR0cFRyYW5zcG9ydFR5cGUsIEh1YkNvbm5lY3Rpb24sIEh1YkNvbm5lY3Rpb25CdWlsZGVyLCBIdWJDb25uZWN0aW9uU3RhdGUgfSBmcm9tICdAbWljcm9zb2Z0L3NpZ25hbHInO1xuaW1wb3J0IHsgRGlzcGF0Y2ggfSBmcm9tICdAbmd4cy1sYWJzL2Rpc3BhdGNoLWRlY29yYXRvcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkV2ZW50U2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgQWxlcnRDaGFuZ2VkQWN0aW9uLCBIYW5kbGVBbGVydHNBY3Rpb24sIEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24sIEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbiwgTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbiB9IGZyb20gJy4uL21vZHVsZXMvYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5hY3Rpb25zJztcbmltcG9ydCB7IFNpZ25hbFJSZWZyZXNoVG9rZW5BY3Rpb24gfSBmcm9tICcuLi9tb2R1bGVzL2F1dGgvcmVmcmVzaC10b2tlbi5hY3Rpb25zJztcbmltcG9ydCB7IEZhY2lsaXR5Q2hhbmdlZEFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24sIFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24sIFpvbmVDaGFuZ2VkQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IEZhY2lsaXR5U3RhdGUgfSBmcm9tICcuLi9tb2R1bGVzL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcbmltcG9ydCB7IFBhcmtBY3Rpdml0eUNoYW5nZWRBY3Rpb24gfSBmcm9tICcuLi9tb2R1bGVzL3BhcmstYWN0aXZpdGllcy9wYXJrLWFjdGl2aXRpZXMuYWN0aW9ucyc7XG5pbXBvcnQgeyBEZXZpY2VBY3Rpdml0eUNoYW5nZWRBY3Rpb24sIERldmljZUV2ZW50Q2hhbmdlZEFjdGlvbiwgRGV2aWNlU3RhdHVzQ2hhbmdlZEFjdGlvbiwgTHByVHJhbnNhY3Rpb25zQ2hhbmdlZEFjdGlvbiB9IGZyb20gJy4uL21vZHVsZXMvcGFyay1tYW5hZ2VyL3BhcmstbWFuYWdlci5hY3Rpb25zJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL21vZHVsZXMvc2lkZW5hdi9zaWRlbmF2LnN0YXRlJztcbmltcG9ydCB7IEFkZFNtYXJ0cGFya0FjdGlvbiB9IGZyb20gJy4uL21vZHVsZXMvc21hcnRwYXJrcy9zbWFydHBhcmstZGlhbG9nLmFjdGlvbnMnO1xuaW1wb3J0IHsgQWxlcnREdG8sIE5vdGlmaWNhdGlvbkR0bywgU21hcnRwYXJrRHRvIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHtcbiAgRGV2aWNlRXZlbnREdG8sIERldmljZVN0YXR1c0R0bywgRXZlbnRBY3Rpdml0eUR0bywgRmFjaWxpdHlEdG8sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcyxcbiAgTHByVHJhbnNhY3Rpb25EdG8sIE5vdGlmaWNhdGlvbkV2ZW50VHlwZSwgTm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRHRvLCBSVEV2ZW50U3Vic2NyaXB0aW9uRHRvLCBSdEV2ZW50VHlwZSwgWm9uZUR0b1xufSBmcm9tICcuLi9zZXJ2aWNlLXByb3h5L3JwYy1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4vYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEdlbmVyYWxBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9nZW5lcmFsLWFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFJlYWx0aW1lRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9yZWFsdGltZS1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFRva2VuU2VydmljZSB9IGZyb20gJy4vYXV0aC10b2tlbi5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIFNpZ25hbFJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3VpZDogc3RyaW5nLCBwdWJsaWMganNvblBheWxvYWQ6IHN0cmluZykge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSVE9iamVjdE9iamVjdCBleHRlbmRzIFNpZ25hbFJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcnRFdmVudFR5cGU6IFJ0RXZlbnRUeXBlLCBwdWJsaWMgcGFya0lkOiBudW1iZXIsIHB1YmxpYyBndWlkOiBzdHJpbmcsIHB1YmxpYyBqc29uUGF5bG9hZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoZ3VpZCwganNvblBheWxvYWQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTcGFya05vdGlmaWNhdGlvbiBleHRlbmRzIFNpZ25hbFJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbm90aWZpY2F0aW9uVHlwZTogTm90aWZpY2F0aW9uRXZlbnRUeXBlLCBwdWJsaWMgZ3VpZDogc3RyaW5nLCBwdWJsaWMgaWRlbnRpZmllcjogc3RyaW5nLCBwdWJsaWMganNvblBheWxvYWQ6IHN0cmluZykge1xuICAgIHN1cGVyKGd1aWQsIGpzb25QYXlsb2FkKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2lnbmFsUiB7XG5cbiAgcHVibGljIGNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb247XG4gIHB1YmxpYyBzdWJzY3JpcHRpb25RdWV1ZTogYW55W10gPSBbXTtcbiAgcHVibGljIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvblF1ZXVlOiBhbnlbXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBzdG9yZTogU3RvcmU7XG4gIHByb3RlY3RlZCByZWFsdGltZUV2ZW50U2VydmljZTogUmVhbHRpbWVFdmVudFNlcnZpY2U7XG4gIHByb3RlY3RlZCBub3RpZmljYXRpb25FdmVudFNlcnZpY2U6IE5vdGlmaWNhdGlvbkV2ZW50U2VydmljZTtcbiAgcHJvdGVjdGVkIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgZ2VuZXJhbEFjdGlvblNlcnZpY2U6IEdlbmVyYWxBY3Rpb25TZXJ2aWNlO1xuICBwcm90ZWN0ZWQgYXV0aFRva2VuU2VydmljZTogQXV0aFRva2VuU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5zdG9yZSA9IGluamVjdG9yLmdldChTdG9yZSk7XG4gICAgdGhpcy5yZWFsdGltZUV2ZW50U2VydmljZSA9IGluamVjdG9yLmdldChSZWFsdGltZUV2ZW50U2VydmljZSk7XG4gICAgdGhpcy5ub3RpZmljYXRpb25FdmVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTm90aWZpY2F0aW9uRXZlbnRTZXJ2aWNlKTtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZSA9IGluamVjdG9yLmdldChTZXNzaW9uU3RvcmFnZVNlcnZpY2UpO1xuICAgIHRoaXMuYXBwQ29uZmlnID0gaW5qZWN0b3IuZ2V0KEFwcENvbmZpZ1NlcnZpY2UpO1xuICAgIHRoaXMuZ2VuZXJhbEFjdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoR2VuZXJhbEFjdGlvblNlcnZpY2UpO1xuICAgIHRoaXMuYXV0aFRva2VuU2VydmljZSA9IGluamVjdG9yLmdldChBdXRoVG9rZW5TZXJ2aWNlKTtcblxuICB9XG5cbiAgcHVibGljIGluaXRSZWFsdGltZUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpO1xuICAgIGNvbnN0IGJhc2VVcmwgPSBjb25maWcuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGUgPyBjb25maWcuYXBpQmFzZVVSTCA6ICcnO1xuICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3JlYWx0aW1lJHtjb25maWcuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGUgPyBgP3ZlcnNpb249JHtjb25maWcucGFja2FnZUluZm8udmVyc2lvbn1gIDogJyd9YDtcbiAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgUlQgQVBJIEJhc2UgVXJsIC0gJHt1cmx9YCk7XG5cbiAgICBjb25zdCBtYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQgPSBjb25maWcuc2lnbmFsUi5tYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQ7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgSHViQ29ubmVjdGlvbkJ1aWxkZXIoKVxuICAgICAgLndpdGhVcmwodXJsLCB7XG4gICAgICAgIGFjY2Vzc1Rva2VuRmFjdG9yeTogKCkgPT4gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW4sXG4gICAgICAgIHNraXBOZWdvdGlhdGlvbjogdHJ1ZSwgIC8vIFNraXAgdGhlIG5lZ290aWF0aW9uIHN0ZXBcbiAgICAgICAgdHJhbnNwb3J0OiBIdHRwVHJhbnNwb3J0VHlwZS5XZWJTb2NrZXRzICAvLyBVc2UgV2ViU29ja2V0cyBkaXJlY3RseVxuICAgICAgfSlcbiAgICAgIC53aXRoQXV0b21hdGljUmVjb25uZWN0KG5ldyBUaWJhUmV0cnlQb2xpY3kobWF4Q29uc2VjdXRpdmVGYWlsZWRSZXRyeUNvdW50LCB0aGlzLmluamVjdG9yKSlcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uLmtlZXBBbGl2ZUludGVydmFsSW5NaWxsaXNlY29uZHMgPSA4MDAwO1xuICAgIHRoaXMuY29ubmVjdGlvbi5zZXJ2ZXJUaW1lb3V0SW5NaWxsaXNlY29uZHMgPSAzMDAwMDtcblxuICAgIHRoaXMuY29ubmVjdGlvbi5vbnJlY29ubmVjdGluZygoZXJyb3IpID0+IHtcbiAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5pbmZvKCdBdHRlbXB0aW5nIHRvIHJlY29ubmVjdDonLCBlcnJvcik7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24ub25jbG9zZSgoZXJyb3IpID0+IHtcbiAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5pbmZvKCdDb25uZWN0aW9uIGNsb3NlZCBhZnRlciBhbGwgcmV0cnkgYXR0ZW1wdHM6JywgZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uLm9ucmVjb25uZWN0ZWQoKGNvbm5lY3Rpb25JZCkgPT4ge1xuICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmluZm8oYFN1Y2Nlc3NmdWxseSByZWNvbm5lY3RlZCBTSUdOQUxSIS4gQ29ubmVjdGlvbklkOiAke2Nvbm5lY3Rpb25JZH1gKTtcblxuICAgICAgdGhpcy5jaGVja0ZvclVwZGF0ZSgpO1xuICAgICAgY29uc3QgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICAgIGlmICghIWd1aWQpIHtcbiAgICAgICAgdGhpcy5zZXRTcGFya0NvcmVDb25uZWN0aW9uKHRydWUsIGd1aWQpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjb25uZWN0UnRFdmVudHNTdWJzY3JpcHRpb25zID0gdGhpcy5yZWFsdGltZUV2ZW50U2VydmljZS5nZXRTdWJzY3JpcHRpb25Gb3JSZWNvbm5lY3QoKTtcbiAgICAgIHRoaXMuaW52b2tlUmVhbHRpbWVSZWdpc3RyYXRpb24ocmVjb25uZWN0UnRFdmVudHNTdWJzY3JpcHRpb25zLCB0aGlzLmhhbmRsZVJlYWxUaW1lQXdhaXRpbmdTdWJzY3JpcHRpb25zLmJpbmQodGhpcykpO1xuXG4gICAgICBjb25zdCBub3RpZmljYXRpb25TdWJzY3JpcHRpb25zID0gdGhpcy5ub3RpZmljYXRpb25FdmVudFNlcnZpY2UuZ2V0U3Vic2NyaXB0aW9uRm9yUmVjb25uZWN0KCk7XG4gICAgICBub3RpZmljYXRpb25TdWJzY3JpcHRpb25zLmZvckVhY2gobm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uID0+IHtcbiAgICAgICAgdGhpcy5pbnZva2VOb3RpZmljYXRpb25SZWdpc3RyYXRpb24obm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkF3YWl0aW5nU3Vic2NyaXB0aW9uKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24ub24oJ1J0RXZlbnQnLCAocnRFdmVudFR5cGU6IFJ0RXZlbnRUeXBlLCBwYXJrSWQ6IG51bWJlciwgZ3VpZDogc3RyaW5nLCBqc29uUGF5bG9hZDogc3RyaW5nKSA9PiB7XG4gICAgICBvZihuZXcgUlRPYmplY3RPYmplY3QocnRFdmVudFR5cGUsIHBhcmtJZCwgZ3VpZCwganNvblBheWxvYWQpKVxuICAgICAgICAucGlwZSh0aGlzLmhhbmRsZUpzb25QYXlsb2FkVG9Mb3dlcigpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLl9kaXNwYXRjaFJ0RXZlbnQocmVzIGFzIFJUT2JqZWN0T2JqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24ub24oJ05vdGlmaWNhdGlvbicsICh0eXBlOiBOb3RpZmljYXRpb25FdmVudFR5cGUsIGd1aWQ6IHN0cmluZywgaWRlbnRpZmllcjogc3RyaW5nLCBqc29uUGF5bG9hZDogc3RyaW5nKSA9PiB7XG4gICAgICBvZihuZXcgU3BhcmtOb3RpZmljYXRpb24odHlwZSwgZ3VpZCwgaWRlbnRpZmllciwganNvblBheWxvYWQpKVxuICAgICAgICAucGlwZSh0aGlzLmhhbmRsZUpzb25QYXlsb2FkVG9Mb3dlcigpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLl9kaXNwYXRjaE5vdGlmaWNhdGlvbihyZXMgYXMgU3BhcmtOb3RpZmljYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjaGVja0ZvclVwZGF0ZSgpOiB2b2lkO1xuXG4gIHB1YmxpYyBjb25uZWN0KCkge1xuICAgIHRoaXMuX2Nvbm5lY3QodGhpcy5jb25uZWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNjb25uZWN0KCkge1xuICAgIHRoaXMuX2Rpc2Nvbm5lY3QodGhpcy5jb25uZWN0aW9uKTtcbiAgfVxuXG4gIHN1YnNjcmliZUZvclJlYWx0aW1lKHJ0RXZlbnRTdWJzY3JpcHRpb25zOiBSVEV2ZW50U3Vic2NyaXB0aW9uRHRvLCB0cmlnZ2VyRnVuY3Rpb24/OiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbikge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSAhPT0gSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblF1ZXVlLnB1c2goKCkgPT4gdGhpcy5zdWJzY3JpYmVGb3JSZWFsdGltZShydEV2ZW50U3Vic2NyaXB0aW9ucywgdHJpZ2dlckZ1bmN0aW9uKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBydEV2ZW50U3Vic2NyaXB0aW9uRGVsdGEgPSB0aGlzLnJlYWx0aW1lRXZlbnRTZXJ2aWNlLmhhbmRsZVJlYWx0aW1lRXZlbnRzU3Vic2NyaXB0aW9ucyhydEV2ZW50U3Vic2NyaXB0aW9ucyk7XG4gICAgICAgIGlmIChydEV2ZW50U3Vic2NyaXB0aW9uRGVsdGEuc3Vic2NyaWJlLmxlbmd0aCB8fCBydEV2ZW50U3Vic2NyaXB0aW9uRGVsdGEudW5TdWJzY3JpYmUubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5pbnZva2VSZWFsdGltZVJlZ2lzdHJhdGlvbihydEV2ZW50U3Vic2NyaXB0aW9uRGVsdGEsIHRyaWdnZXJGdW5jdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVGb3JOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbjogTm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRHRvLCB0cmlnZ2VyRnVuY3Rpb24/OiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbikge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSAhPT0gSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblN1YnNjcmlwdGlvblF1ZXVlLnB1c2goKCkgPT4gdGhpcy5zdWJzY3JpYmVGb3JOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbiwgdHJpZ2dlckZ1bmN0aW9uKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25TdWJzY3JpcHRpb25EZWx0YSA9IHRoaXMubm90aWZpY2F0aW9uRXZlbnRTZXJ2aWNlLmhhbmRsZU5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbnMobm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgaWYgKCEhbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRGVsdGEpIHtcbiAgICAgICAgICB0aGlzLmludm9rZU5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihub3RpZmljYXRpb25TdWJzY3JpcHRpb25EZWx0YSwgdHJpZ2dlckZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW52b2tlUmVhbHRpbWVSZWdpc3RyYXRpb24ocnRFdmVudFN1YnNjcmlwdGlvbnM6IFJURXZlbnRTdWJzY3JpcHRpb25EdG8sIHRyaWdnZXJGdW5jdGlvbj86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBhcHBNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpO1xuICAgIGlmIChydEV2ZW50U3Vic2NyaXB0aW9ucy51c2VySWQpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5pbnZva2U8UlRFdmVudFN1YnNjcmlwdGlvbkR0bz4oJ1JlZ2lzdGVyUGFyaycsIHJ0RXZlbnRTdWJzY3JpcHRpb25zLCBhcHBNb2R1bGUpLnRoZW4oKHN1YlRvKSA9PiB7XG4gICAgICAgIGlmICh0cmlnZ2VyRnVuY3Rpb24pIHtcbiAgICAgICAgICB0cmlnZ2VyRnVuY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnZva2VOb3RpZmljYXRpb25SZWdpc3RyYXRpb24obm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uOiBOb3RpZmljYXRpb25TdWJzY3JpcHRpb25EdG8sIHRyaWdnZXJGdW5jdGlvbj86ICgpID0+IHZvaWQpIHtcbiAgICBpZiAobm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uICYmIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbi51c2VySWQpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5pbnZva2U8Tm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRHRvPignUmVnaXN0ZXJOb3RpZmljYXRpb25zJywgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uKS50aGVuKChzdWJUbykgPT4ge1xuICAgICAgICBpZiAodHJpZ2dlckZ1bmN0aW9uKSB7XG4gICAgICAgICAgdHJpZ2dlckZ1bmN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTcGFya0NvcmVDb25uZWN0aW9uKGlzQ29ubmVjdGVkOiBib29sZWFuLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSlbZ3VpZF07XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDb3JlQ29ubmVjdGVkID0gaXNDb25uZWN0ZWQ7XG4gICAgaWYgKCFpc0Nvbm5lY3RlZCkge1xuICAgICAgY29uc3QgZmFjaWxpdHlHdWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgICAgY29uc3Qgc2VydmVyQ2xpZW50VGltZVNwYW4gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpW2ZhY2lsaXR5R3VpZF0gfHwgMDtcbiAgICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBtb21lbnQoKS5zdWJ0cmFjdChzZXJ2ZXJDbGllbnRUaW1lU3BhbiwgJ21pbGxpc2Vjb25kcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkKHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZ3VpZCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUpzb25QYXlsb2FkVG9Mb3dlcigpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248U2lnbmFsUk9iamVjdD4ge1xuICAgIHJldHVybiAkaW5wdXQgPT4gJGlucHV0LnBpcGUobWFwKHJlcyA9PiB7XG4gICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKHJlcy5qc29uUGF5bG9hZCk7XG4gICAgICByZXMuanNvblBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShvYmosIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBrIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgIGlmIChrLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50W2sgJiYgay50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlW2tdO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50W2sgJiYgay5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGsuc3Vic3RyaW5nKDEpXSA9IHZhbHVlW2tdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGRpc3BhdGNoTm90aWZpY2F0aW9uKG9iajogU3BhcmtOb3RpZmljYXRpb24pOiB2b2lkO1xuXG4gIHByaXZhdGUgX2Rpc3BhdGNoTm90aWZpY2F0aW9uKG9iajogU3BhcmtOb3RpZmljYXRpb24pIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShvYmouanNvblBheWxvYWQpO1xuICAgIGNvbnNvbGUuZGVidWcoYFJlY2VpdmVkIE5vdGlmaWNhdGlvbiB0eXBlID09PT4gJHtvYmoubm90aWZpY2F0aW9uVHlwZX1gKTtcbiAgICBzd2l0Y2ggKG9iai5ub3RpZmljYXRpb25UeXBlKSB7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5Jbml0aWFsQ2xvdWRDb25uZWN0OlxuICAgICAgICB0aGlzLmluaXRpYWxpemVTbWFydFBhcmtDb25uZWN0aW9uKGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkOlxuICAgICAgICAvLyBUT0RPOiB0aGlzIGNvbmRpdGlvbiB3aWxsIGJlIHJlbW92ZWQgd2hlbiBhbGwgXCJGYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZFwiIG5vdGlmaWNhdGlvblxuICAgICAgICAvLyB3aWxsIGJlIHJlbW92ZWQgdXBvbiBiZWluZyBleGVjdXRlZCBpbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIEZvciBtb3JlIGV4cGxhbmF0aW9uIHNlZTogU1BSSzMtNjcwNFxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5UcmFuc21pdFNwZWNpYWxEYXlzIHx8IGRhdGEudHlwZSA9PT0gRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMuVXBkYXRlU2V0dGluZ3MpIHtcbiAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLm5vdGlmaWNhdGlvbkV2ZW50U2VydmljZS5nZXROb3RpZmljYXRpb25TdWJzY3JpcHRpb25zRW50aXR5KCk7XG4gICAgICAgICAgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uLnR5cGUgPSBvYmoubm90aWZpY2F0aW9uVHlwZTtcbiAgICAgICAgICBub3RpZmljYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUgPSB0cnVlO1xuICAgICAgICAgIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbi5pZGVudGlmaWVyID0gdGhpcy5ub3RpZmljYXRpb25FdmVudFNlcnZpY2UuZ2V0Tm90aWZpY2F0aW9uSWRlbnRpZmllcihkYXRhLmd1aWQsIGRhdGEucGFya0lkLFxuICAgICAgICAgICAgb2JqLm5vdGlmaWNhdGlvblR5cGUsIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbi51c2VySWQpO1xuICAgICAgICAgIHRoaXMuc3Vic2NyaWJlRm9yTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25TdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5HZW5lcmFsQWN0aW9uczpcbiAgICAgICAgdGhpcy5nZW5lcmFsQWN0aW9uU2VydmljZS5kaXNwYXRjaEdlbmVyYWxBY3Rpb25zKGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkhhbmRsZUFsZXJ0OlxuICAgICAgICB0aGlzLmhhbmRsZUFsZXJ0cyhBbGVydER0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5IYW5kbGVkTm90aWZpY2F0aW9uOlxuICAgICAgICB0aGlzLmhhbmRsZWROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uRHRvLmZyb21KUyhkYXRhKSwgb2JqLmd1aWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkhhbmRsZU5vdGlmaWNhdGlvbjpcbiAgICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uRHRvLmZyb21KUyhkYXRhKSwgb2JqLmd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuUmVwb3J0R2VuZXJhdGVkOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuUmVjZWlwdEdlbmVyYXRlZDpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLlN0aWNrZXJHZW5lcmF0ZWQ6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5BcHBsaWNhdGlvblVwZGF0ZTpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkNyZWF0ZVJvbGU6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5VcGRhdGVSb2xlOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuTW9udGhsaWVzQnVsa1VwZGF0ZTpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLk1vbnRobGllc0J1bGtEZWxldGU6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5Nb250aGxpZXNCdWxrVXBkYXRlTG9jYXRpb246XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5Nb250aGxpZXNCdWxrU2VuZEVtYWlsOlxuICAgICAgICB0aGlzLmRpc3BhdGNoTm90aWZpY2F0aW9uKG9iaik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhgVW5rbm93biBub3RpZmljYXRpb24gdHlwZSA9PT0+ICR7b2JqLm5vdGlmaWNhdGlvblR5cGV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBkaXNwYXRjaFJ0RXZlbnQob2JqOiBSVE9iamVjdE9iamVjdCk6IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hSdEV2ZW50KG9iajogUlRPYmplY3RPYmplY3QpIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShvYmouanNvblBheWxvYWQpO1xuICAgIHN3aXRjaCAob2JqLnJ0RXZlbnRUeXBlKSB7XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkRldmljZVN0YXR1czpcbiAgICAgICAgdGhpcy5kZXZpY2VzU3RhdHVzQ2hhbmdlZChEZXZpY2VTdGF0dXNEdG8uZnJvbUpTKGRhdGEpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XG4gICAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5kZWJ1ZyhgUlQgLSBHb3QgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0gZXZlbnRgKTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DaGFuZ2VkKE5vdGlmaWNhdGlvbkR0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuQWxlcnQ6XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkxvc3RUaWNrZXQ6XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkxQUm1pc21hdGNoOlxuICAgICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuZGVidWcoYFJUIC0gR290ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9IGV2ZW50YCk7XG4gICAgICAgIHRoaXMuYWxlcnRDaGFuZ2VkKEFsZXJ0RHRvLmZyb21KUyhkYXRhKSwgb2JqLmd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5QYXJrU3RhdGU6XG4gICAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5kZWJ1ZyhgUlQgLSBHb3QgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0gZXZlbnRgKTtcbiAgICAgICAgdGhpcy5kZXZpY2VBY3Rpdml0eUNoYW5nZWQoZGF0YSk7XG4gICAgICAgIHRoaXMucGFya0FjdGl2aXR5Q2hhbmdlZChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuRGV2aWNlRXZlbnQ6XG4gICAgICAgIHRoaXMuZGV2aWNlRXZlbnRDaGFuZ2VkKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5TZXJ2aWNlc1N0YXR1czpcbiAgICAgICAgdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkKFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuWm9uZTpcbiAgICAgICAgdGhpcy56b25lQ2hhbmdlZChab25lRHRvLmZyb21KUyhkYXRhKSwgb2JqLnBhcmtJZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkZhY2lsaXR5OlxuICAgICAgICB0aGlzLmZhY2lsaXR5Q2hhbmdlZChGYWNpbGl0eUR0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuT2NjdXBhbmN5OlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5SZXZlbnVlOlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5PcGVuVGlja2V0VHJhbnNhY3Rpb246XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkNsb3NlVGlja2V0VHJhbnNhY3Rpb246XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLk1vbnRobHlUcmFuc2FjdGlvbjpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuR3Vlc3RUcmFuc2FjdGlvbjpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuUGF5bWVudFRyYW5zYWN0aW9uOlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5MUFJUcmFuc2FjdGlvbjpcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJ0RXZlbnQob2JqKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZGVidWcoYFVua25vd24gZXZlbnQgdHlwZSA9PT0+ICR7b2JqLnJ0RXZlbnRUeXBlfWApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb25uZWN0KGNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb24pIHtcbiAgICBjb25zb2xlLmRlYnVnKCdTaWduYWxSIEVzdGFibGlzaGluZyBDb25uZWN0aW9uLi4uJyk7XG4gICAgY29ubmVjdGlvbi5zdGFydCgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoYFNpZ25hbFIgQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCFgKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSZWFsVGltZUF3YWl0aW5nU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkF3YWl0aW5nU3Vic2NyaXB0aW9uKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGFzeW5jIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGlmIChpc1VuYXV0aG9yaXplZE9yRXhwaXJlZChlcnJvciwgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW4sIHRoaXMuYXV0aFRva2VuU2VydmljZSkpIHtcbiAgICAgICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgU2lnbmFsUiBpbml0aWFsIGNvbm5lY3QgLT4gdW5hdXRob3JpemVkLiBNZXNzYWdlOiAke2Vycm9yPy5tZXNzYWdlfWApO1xuICAgICAgICAgIHRoaXMuc2lnbmFsUlJlZnJlc2hUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmV0cnlDb25uZWN0aW9uKGNvbm5lY3Rpb24sIDEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2Nvbm5lY3QoY29ubmVjdGlvbjogSHViQ29ubmVjdGlvbikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1NpZ25hbFIgU3RvcHBpbmcgQ29ubmVjdGlvbi4uLicpO1xuICAgIGNvbm5lY3Rpb24/LnN0b3AoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmRlYnVnKGBTaWduYWxSIENvbm5lY3Rpb24gU3RvcHBlZCFgKTtcbiAgICAgICAgdGhpcy5oYW5kbGVEaXNjb25uZWN0KCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgPT4gJHtlcnJ9LCBUaW1lc3RhbXA6ICR7bmV3IERhdGUoKX1gKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyeUNvbm5lY3Rpb24oY29ubmVjdGlvbjogSHViQ29ubmVjdGlvbiwgcmV0cnlDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBTaWduYWxSIEVzdGFibGlzaGluZyBDb25uZWN0aW9uLiBSZXRyeSAjJHtyZXRyeUNvdW50fS4gVGltZXN0YW1wOiAke25ldyBEYXRlKCl9YCk7XG4gICAgICBjb25uZWN0aW9uLnN0YXJ0KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFNpZ25hbFIgQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCEgUmV0cnkgIyR7cmV0cnlDb3VudH1gKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlYWxUaW1lQXdhaXRpbmdTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb25Bd2FpdGluZ1N1YnNjcmlwdGlvbigpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoaXNVbmF1dGhvcml6ZWRPckV4cGlyZWQoZXJyb3IsIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuLCB0aGlzLmF1dGhUb2tlblNlcnZpY2UpKSB7XG4gICAgICAgICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgU2lnbmFsUiByZXRyeSBjb25uZWN0IC0+IHVuYXV0aG9yaXplZC4gTWVzc2FnZTogJHtlcnJvcj8ubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsUlJlZnJlc2hUb2tlbigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKTtcbiAgICAgICAgICAgIGlmIChyZXRyeUNvdW50IDw9IGNvbmZpZy5zaWduYWxSLm1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudCkge1xuICAgICAgICAgICAgICB0aGlzLnJldHJ5Q29ubmVjdGlvbihjb25uZWN0aW9uLCByZXRyeUNvdW50ICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LCBnZXRTZWNvbmRzQmFja29mZihyZXRyeUNvdW50KSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlYWxUaW1lQXdhaXRpbmdTdWJzY3JpcHRpb25zKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uUXVldWUuZm9yRWFjaChhd2FpdGluZ1N1YnNjcmlwdGlvbiA9PiBhd2FpdGluZ1N1YnNjcmlwdGlvbigpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblF1ZXVlLnNwbGljZSgwKTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZU5vdGlmaWNhdGlvbkF3YWl0aW5nU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMubm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uUXVldWUuZm9yRWFjaChhd2FpdGluZ1N1YnNjcmlwdGlvbiA9PiBhd2FpdGluZ1N1YnNjcmlwdGlvbigpKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblN1YnNjcmlwdGlvblF1ZXVlLnNwbGljZSgwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGlzY29ubmVjdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblF1ZXVlID0gW107XG4gICAgdGhpcy5ub3RpZmljYXRpb25TdWJzY3JpcHRpb25RdWV1ZSA9IFtdO1xuICAgIHRoaXMucmVhbHRpbWVFdmVudFNlcnZpY2UucmVzZXRBbGxTdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICBARGlzcGF0Y2goKSBkZXZpY2VzU3RhdHVzQ2hhbmdlZCA9IChkZXZpY2VTdGF0dXM6IERldmljZVN0YXR1c0R0bykgPT5cbiAgICBuZXcgRGV2aWNlU3RhdHVzQ2hhbmdlZEFjdGlvbihkZXZpY2VTdGF0dXMpO1xuICBARGlzcGF0Y2goKSBmYWNpbGl0eUNoYW5nZWQgPSAoZGF0YTogRmFjaWxpdHlEdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKGRhdGEsIGd1aWQpO1xuICBARGlzcGF0Y2goKSBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkID0gKHNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24oc2VydmljZXNSdW5uaW5nU3RhdHVzLCBndWlkKTtcbiAgQERpc3BhdGNoKCkgcGFya0FjdGl2aXR5Q2hhbmdlZCA9IChhY3Rpdml0eTogRXZlbnRBY3Rpdml0eUR0bykgPT5cbiAgICBuZXcgUGFya0FjdGl2aXR5Q2hhbmdlZEFjdGlvbihhY3Rpdml0eSk7XG4gIEBEaXNwYXRjaCgpIGRldmljZUV2ZW50Q2hhbmdlZCA9IChkZXZFdmVudDogRGV2aWNlRXZlbnREdG8pID0+XG4gICAgbmV3IERldmljZUV2ZW50Q2hhbmdlZEFjdGlvbihkZXZFdmVudCk7XG4gIEBEaXNwYXRjaCgpIGRldmljZUFjdGl2aXR5Q2hhbmdlZCA9IChldmVudEFjdGl2aXR5OiBFdmVudEFjdGl2aXR5RHRvKSA9PlxuICAgIG5ldyBEZXZpY2VBY3Rpdml0eUNoYW5nZWRBY3Rpb24oZXZlbnRBY3Rpdml0eSk7XG4gIEBEaXNwYXRjaCgpIGxwclRyYW5zYWN0aW9uc0NoYW5nZWQgPSAobHByVHJhbnM6IExwclRyYW5zYWN0aW9uRHRvKSA9PlxuICAgIG5ldyBMcHJUcmFuc2FjdGlvbnNDaGFuZ2VkQWN0aW9uKGxwclRyYW5zKTtcbiAgQERpc3BhdGNoKCkgYWxlcnRDaGFuZ2VkID0gKGFsZXJ0RHRvOiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSA9PlxuICAgIG5ldyBBbGVydENoYW5nZWRBY3Rpb24oYWxlcnREdG8sIGd1aWQpO1xuICBARGlzcGF0Y2goKSBub3RpZmljYXRpb25DaGFuZ2VkID0gKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IE5vdGlmaWNhdGlvbkNoYW5nZWRBY3Rpb24obm90aWZpY2F0aW9uRHRvLCBndWlkKTtcbiAgQERpc3BhdGNoKCkgaGFuZGxlZE5vdGlmaWNhdGlvbiA9IChub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSA9PlxuICAgIG5ldyBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG4gIEBEaXNwYXRjaCgpIGhhbmRsZUFsZXJ0cyA9IChhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgSGFuZGxlQWxlcnRzQWN0aW9uKGFsZXJ0RHRvLCBndWlkKTtcbiAgQERpc3BhdGNoKCkgaGFuZGxlTm90aWZpY2F0aW9uID0gKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbihub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuICBARGlzcGF0Y2goKSB6b25lQ2hhbmdlZCA9ICh6b25lRHRvOiBab25lRHRvLCBwYXJrSWQ6IG51bWJlcikgPT5cbiAgICBuZXcgWm9uZUNoYW5nZWRBY3Rpb24oem9uZUR0bywgcGFya0lkKTtcbiAgQERpc3BhdGNoKCkgaW5pdGlhbGl6ZVNtYXJ0UGFya0Nvbm5lY3Rpb24gPSAoc21hcnRwYXJrOiBTbWFydHBhcmtEdG8pID0+XG4gICAgbmV3IEFkZFNtYXJ0cGFya0FjdGlvbihzbWFydHBhcmspO1xuICBARGlzcGF0Y2goKSBmYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZCA9IChmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudDogRmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQpID0+XG4gICAgbmV3IEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50KTtcbiAgQERpc3BhdGNoKCkgcHJpdmF0ZSBzaWduYWxSUmVmcmVzaFRva2VuID0gKCkgPT4gbmV3IFNpZ25hbFJSZWZyZXNoVG9rZW5BY3Rpb24oKTtcbn1cblxuZXhwb3J0IGNsYXNzIFRpYmFSZXRyeVBvbGljeSBpbXBsZW1lbnRzIHNpZ25hbFIuSVJldHJ5UG9saWN5IHtcbiAgcHJpdmF0ZSBtYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZTtcbiAgcHJpdmF0ZSBhdXRoVG9rZW5TZXJ2aWNlOiBBdXRoVG9rZW5TZXJ2aWNlO1xuICBjb25zdHJ1Y3RvcihtYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQ6IG51bWJlciwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5tYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQgPSBtYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQ7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKTtcbiAgICB0aGlzLmF1dGhUb2tlblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQXV0aFRva2VuU2VydmljZSk7XG4gIH1cblxuICBuZXh0UmV0cnlEZWxheUluTWlsbGlzZWNvbmRzKHJldHJ5Q29udGV4dDogc2lnbmFsUi5SZXRyeUNvbnRleHQpOiBudW1iZXIge1xuICAgIGxldCBtaWxsaXNlY29uZHM6IG51bWJlciA9IG51bGw7XG4gICAgY29uc3QgY3VycmVudFJldHJ5Q291bnQgPSByZXRyeUNvbnRleHQucHJldmlvdXNSZXRyeUNvdW50ICsgMTtcbiAgICBpZiAoaXNVbmF1dGhvcml6ZWRPckV4cGlyZWQocmV0cnlDb250ZXh0LnJldHJ5UmVhc29uLCB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbiwgdGhpcy5hdXRoVG9rZW5TZXJ2aWNlKSkge1xuICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmluZm8oYFRpYmFSZXRyeVBvbGljeSAtPiB1bmF1dGhvcml6ZWQgdG9rZW4uIE1lc3NhZ2U6ICAke3JldHJ5Q29udGV4dC5yZXRyeVJlYXNvbi5tZXNzYWdlfWApO1xuICAgICAgdGhpcy5zaWduYWxSUmVmcmVzaFRva2VuKCk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50UmV0cnlDb3VudCA8IHRoaXMubWF4Q29uc2VjdXRpdmVGYWlsZWRSZXRyeUNvdW50KSB7XG4gICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgVGliYVJldHJ5UG9saWN5IC0+IGZhaWxlZCBuZWdvdGlhdGlvbiAjJHtjdXJyZW50UmV0cnlDb3VudH0uIE1lc3NhZ2U6ICR7cmV0cnlDb250ZXh0LnJldHJ5UmVhc29uLm1lc3NhZ2V9YCk7XG4gICAgICBtaWxsaXNlY29uZHMgPSBnZXRTZWNvbmRzQmFja29mZihjdXJyZW50UmV0cnlDb3VudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbGxpc2Vjb25kcztcbiAgfVxuXG4gIEBEaXNwYXRjaCgpIHNpZ25hbFJSZWZyZXNoVG9rZW4gPSAoKSA9PiBuZXcgU2lnbmFsUlJlZnJlc2hUb2tlbkFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Vjb25kc0JhY2tvZmYocmV0cnlDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgZGVsYXlzVGFibGVJblNlY29uZHM6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyW107IH0gPSB7XG4gICAgMTogWzUsIDIwXSwgLy81cyAtIDIwc1xuICAgIDI6IFsyNSwgNDBdLCAvLyAyNXMgLSA0MHNcbiAgICAzOiBbNDUsIDYwXSwgLy8gNDVzIC0gNjBzXG4gICAgNDogWzY1LCA4MF0sIC8vIDY1cyAtIDgwc1xuICAgIDU6IFs2MDAsIDkwMF0sICAvLyAxMG0gLSAxNW1cbiAgfTtcbiAgY29uc3QgW21pblNlY29uZHMsIG1heFNlY29uZHNdID0gZGVsYXlzVGFibGVJblNlY29uZHNbcmV0cnlDb3VudF0gfHwgWzAsIDBdO1xuICByZXR1cm4gKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXhTZWNvbmRzIC0gbWluU2Vjb25kcyArIDEpKSArIG1pblNlY29uZHMpICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFM7XG59XG5cbmZ1bmN0aW9uIGlzVW5hdXRob3JpemVkT3JFeHBpcmVkKGVycm9yOiBhbnksIHRva2VuOiBzdHJpbmcsIGF1dGhUb2tlblNlcnZpY2U6IEF1dGhUb2tlblNlcnZpY2UpOiBib29sZWFuIHtcbiAgY29uc3QgdW5hdXRob3JpemVkID0gKGVycm9yPy5tZXNzYWdlIGFzIHN0cmluZyk/LmluY2x1ZGVzKGBTdGF0dXMgY29kZSAnJHtIdHRwU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWR9J2ApO1xuICByZXR1cm4gdW5hdXRob3JpemVkIHx8IGF1dGhUb2tlblNlcnZpY2UuaXNUb2tlbkV4cGlyZWQodG9rZW4pO1xufVxuIl19
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFpQixvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQTRCLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDakcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQzlNLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxtQ0FBbUMsRUFBRSxrQ0FBa0MsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pLLE9BQU8sRUFB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Q0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWTtRQUN6QixDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWTtRQUN6QixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUcsWUFBWTtLQUM3QixDQUFDO0lBQ0YsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDL0csQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsS0FBVSxFQUFFLEtBQWEsRUFBRSxnQkFBa0M7SUFDNUYsTUFBTSxZQUFZLEdBQUksS0FBSyxFQUFFLE9BQWtCLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixjQUFjLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUMxRyxPQUFPLFlBQVksSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRhdGFkb2dMb2dzIH0gZnJvbSAnQGRhdGFkb2cvYnJvd3Nlci1sb2dzJztcbmltcG9ydCB7IEh0dHBUcmFuc3BvcnRUeXBlLCBIdWJDb25uZWN0aW9uLCBIdWJDb25uZWN0aW9uQnVpbGRlciwgSHViQ29ubmVjdGlvblN0YXRlIH0gZnJvbSAnQG1pY3Jvc29mdC9zaWduYWxyJztcbmltcG9ydCB7IERpc3BhdGNoIH0gZnJvbSAnQG5neHMtbGFicy9kaXNwYXRjaC1kZWNvcmF0b3InO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25FdmVudFNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24tZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyB9IGZyb20gJy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFsZXJ0Q2hhbmdlZEFjdGlvbiwgSGFuZGxlQWxlcnRzQWN0aW9uLCBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24sIE5vdGlmaWNhdGlvbkNoYW5nZWRBY3Rpb24gfSBmcm9tICcuLi9tb2R1bGVzL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuYWN0aW9ucyc7XG5pbXBvcnQgeyBTaWduYWxSUmVmcmVzaFRva2VuQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9hdXRoL3JlZnJlc2gtdG9rZW4uYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eUNoYW5nZWRBY3Rpb24sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uLCBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uLCBab25lQ2hhbmdlZEFjdGlvbiB9IGZyb20gJy4uL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eVN0YXRlIH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5zdGF0ZSc7XG5pbXBvcnQgeyBQYXJrQWN0aXZpdHlDaGFuZ2VkQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9wYXJrLWFjdGl2aXRpZXMvcGFyay1hY3Rpdml0aWVzLmFjdGlvbnMnO1xuaW1wb3J0IHsgRGV2aWNlQWN0aXZpdHlDaGFuZ2VkQWN0aW9uLCBEZXZpY2VFdmVudENoYW5nZWRBY3Rpb24sIERldmljZVN0YXR1c0NoYW5nZWRBY3Rpb24sIExwclRyYW5zYWN0aW9uc0NoYW5nZWRBY3Rpb24gfSBmcm9tICcuLi9tb2R1bGVzL3BhcmstbWFuYWdlci9wYXJrLW1hbmFnZXIuYWN0aW9ucyc7XG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9tb2R1bGVzL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBBZGRTbWFydHBhcmtBY3Rpb24gfSBmcm9tICcuLi9tb2R1bGVzL3NtYXJ0cGFya3Mvc21hcnRwYXJrLWRpYWxvZy5hY3Rpb25zJztcbmltcG9ydCB7IEFsZXJ0RHRvLCBOb3RpZmljYXRpb25EdG8sIFNtYXJ0cGFya0R0byB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7XG4gIERldmljZUV2ZW50RHRvLCBEZXZpY2VTdGF0dXNEdG8sIEV2ZW50QWN0aXZpdHlEdG8sIEZhY2lsaXR5RHRvLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMsXG4gIExwclRyYW5zYWN0aW9uRHRvLCBOb3RpZmljYXRpb25FdmVudFR5cGUsIE5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbkR0bywgUlRFdmVudFN1YnNjcmlwdGlvbkR0bywgUnRFdmVudFR5cGUsIFpvbmVEdG9cbn0gZnJvbSAnLi4vc2VydmljZS1wcm94eS9ycGMtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBHZW5lcmFsQWN0aW9uU2VydmljZSB9IGZyb20gJy4vZ2VuZXJhbC1hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBSZWFsdGltZUV2ZW50U2VydmljZSB9IGZyb20gJy4vcmVhbHRpbWUtZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhUb2tlblNlcnZpY2UgfSBmcm9tICcuL2F1dGgtdG9rZW4uc2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBTaWduYWxST2JqZWN0IHtcbiAgY29uc3RydWN0b3IocHVibGljIGd1aWQ6IHN0cmluZywgcHVibGljIGpzb25QYXlsb2FkOiBzdHJpbmcpIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUlRPYmplY3RPYmplY3QgZXh0ZW5kcyBTaWduYWxST2JqZWN0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHJ0RXZlbnRUeXBlOiBSdEV2ZW50VHlwZSwgcHVibGljIHBhcmtJZDogbnVtYmVyLCBwdWJsaWMgZ3VpZDogc3RyaW5nLCBwdWJsaWMganNvblBheWxvYWQ6IHN0cmluZykge1xuICAgIHN1cGVyKGd1aWQsIGpzb25QYXlsb2FkKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3BhcmtOb3RpZmljYXRpb24gZXh0ZW5kcyBTaWduYWxST2JqZWN0IHtcbiAgY29uc3RydWN0b3IocHVibGljIG5vdGlmaWNhdGlvblR5cGU6IE5vdGlmaWNhdGlvbkV2ZW50VHlwZSwgcHVibGljIGd1aWQ6IHN0cmluZywgcHVibGljIGlkZW50aWZpZXI6IHN0cmluZywgcHVibGljIGpzb25QYXlsb2FkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihndWlkLCBqc29uUGF5bG9hZCk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNpZ25hbFIge1xuXG4gIHB1YmxpYyBjb25uZWN0aW9uOiBIdWJDb25uZWN0aW9uO1xuICBwdWJsaWMgc3Vic2NyaXB0aW9uUXVldWU6IGFueVtdID0gW107XG4gIHB1YmxpYyBub3RpZmljYXRpb25TdWJzY3JpcHRpb25RdWV1ZTogYW55W10gPSBbXTtcblxuICBwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlO1xuICBwcm90ZWN0ZWQgcmVhbHRpbWVFdmVudFNlcnZpY2U6IFJlYWx0aW1lRXZlbnRTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbm90aWZpY2F0aW9uRXZlbnRTZXJ2aWNlOiBOb3RpZmljYXRpb25FdmVudFNlcnZpY2U7XG4gIHByb3RlY3RlZCBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZTtcbiAgcHJvdGVjdGVkIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZTtcbiAgcHJvdGVjdGVkIGdlbmVyYWxBY3Rpb25TZXJ2aWNlOiBHZW5lcmFsQWN0aW9uU2VydmljZTtcbiAgcHJvdGVjdGVkIGF1dGhUb2tlblNlcnZpY2U6IEF1dGhUb2tlblNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHRoaXMuc3RvcmUgPSBpbmplY3Rvci5nZXQoU3RvcmUpO1xuICAgIHRoaXMucmVhbHRpbWVFdmVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoUmVhbHRpbWVFdmVudFNlcnZpY2UpO1xuICAgIHRoaXMubm90aWZpY2F0aW9uRXZlbnRTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5vdGlmaWNhdGlvbkV2ZW50U2VydmljZSk7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKTtcbiAgICB0aGlzLmFwcENvbmZpZyA9IGluamVjdG9yLmdldChBcHBDb25maWdTZXJ2aWNlKTtcbiAgICB0aGlzLmdlbmVyYWxBY3Rpb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KEdlbmVyYWxBY3Rpb25TZXJ2aWNlKTtcbiAgICB0aGlzLmF1dGhUb2tlblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQXV0aFRva2VuU2VydmljZSk7XG5cbiAgfVxuXG4gIHB1YmxpYyBpbml0UmVhbHRpbWVFdmVudExpc3RlbmVycygpIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKTtcbiAgICBjb25zdCBiYXNlVXJsID0gY29uZmlnLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlID8gY29uZmlnLmFwaUJhc2VVUkwgOiAnJztcbiAgICBjb25zdCB1cmwgPSBgJHtiYXNlVXJsfS9yZWFsdGltZSR7Y29uZmlnLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlID8gYD92ZXJzaW9uPSR7Y29uZmlnLnBhY2thZ2VJbmZvLnZlcnNpb259YCA6ICcnfWA7XG4gICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmluZm8oYFJUIEFQSSBCYXNlIFVybCAtICR7dXJsfWApO1xuXG4gICAgY29uc3QgbWF4Q29uc2VjdXRpdmVGYWlsZWRSZXRyeUNvdW50ID0gY29uZmlnLnNpZ25hbFIubWF4Q29uc2VjdXRpdmVGYWlsZWRSZXRyeUNvdW50O1xuXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbmV3IEh1YkNvbm5lY3Rpb25CdWlsZGVyKClcbiAgICAgIC53aXRoVXJsKHVybCwge1xuICAgICAgICBhY2Nlc3NUb2tlbkZhY3Rvcnk6ICgpID0+IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuLFxuICAgICAgICBza2lwTmVnb3RpYXRpb246IHRydWUsICAvLyBTa2lwIHRoZSBuZWdvdGlhdGlvbiBzdGVwXG4gICAgICAgIHRyYW5zcG9ydDogSHR0cFRyYW5zcG9ydFR5cGUuV2ViU29ja2V0cyAgLy8gVXNlIFdlYlNvY2tldHMgZGlyZWN0bHlcbiAgICAgIH0pXG4gICAgICAud2l0aEF1dG9tYXRpY1JlY29ubmVjdChuZXcgVGliYVJldHJ5UG9saWN5KG1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudCwgdGhpcy5pbmplY3RvcikpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbi5rZWVwQWxpdmVJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gODAwMDtcbiAgICB0aGlzLmNvbm5lY3Rpb24uc2VydmVyVGltZW91dEluTWlsbGlzZWNvbmRzID0gMzAwMDA7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24ub25yZWNvbm5lY3RpbmcoKGVycm9yKSA9PiB7XG4gICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbygnQXR0ZW1wdGluZyB0byByZWNvbm5lY3Q6JywgZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uLm9uY2xvc2UoKGVycm9yKSA9PiB7XG4gICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbygnQ29ubmVjdGlvbiBjbG9zZWQgYWZ0ZXIgYWxsIHJldHJ5IGF0dGVtcHRzOicsIGVycm9yKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY29ubmVjdGlvbi5vbnJlY29ubmVjdGVkKChjb25uZWN0aW9uSWQpID0+IHtcbiAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5pbmZvKGBTdWNjZXNzZnVsbHkgcmVjb25uZWN0ZWQgU0lHTkFMUiEuIENvbm5lY3Rpb25JZDogJHtjb25uZWN0aW9uSWR9YCk7XG5cbiAgICAgIHRoaXMuY2hlY2tGb3JVcGRhdGUoKTtcbiAgICAgIGNvbnN0IGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgICBpZiAoISFndWlkKSB7XG4gICAgICAgIHRoaXMuc2V0U3BhcmtDb3JlQ29ubmVjdGlvbih0cnVlLCBndWlkKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY29ubmVjdFJ0RXZlbnRzU3Vic2NyaXB0aW9ucyA9IHRoaXMucmVhbHRpbWVFdmVudFNlcnZpY2UuZ2V0U3Vic2NyaXB0aW9uRm9yUmVjb25uZWN0KCk7XG4gICAgICB0aGlzLmludm9rZVJlYWx0aW1lUmVnaXN0cmF0aW9uKHJlY29ubmVjdFJ0RXZlbnRzU3Vic2NyaXB0aW9ucywgdGhpcy5oYW5kbGVSZWFsVGltZUF3YWl0aW5nU3Vic2NyaXB0aW9ucy5iaW5kKHRoaXMpKTtcblxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9ucyA9IHRoaXMubm90aWZpY2F0aW9uRXZlbnRTZXJ2aWNlLmdldFN1YnNjcmlwdGlvbkZvclJlY29ubmVjdCgpO1xuICAgICAgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9ucy5mb3JFYWNoKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuaW52b2tlTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb25Bd2FpdGluZ1N1YnNjcmlwdGlvbigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uLm9uKCdSdEV2ZW50JywgKHJ0RXZlbnRUeXBlOiBSdEV2ZW50VHlwZSwgcGFya0lkOiBudW1iZXIsIGd1aWQ6IHN0cmluZywganNvblBheWxvYWQ6IHN0cmluZykgPT4ge1xuICAgICAgb2YobmV3IFJUT2JqZWN0T2JqZWN0KHJ0RXZlbnRUeXBlLCBwYXJrSWQsIGd1aWQsIGpzb25QYXlsb2FkKSlcbiAgICAgICAgLnBpcGUodGhpcy5oYW5kbGVKc29uUGF5bG9hZFRvTG93ZXIoKSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGlzcGF0Y2hSdEV2ZW50KHJlcyBhcyBSVE9iamVjdE9iamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uLm9uKCdOb3RpZmljYXRpb24nLCAodHlwZTogTm90aWZpY2F0aW9uRXZlbnRUeXBlLCBndWlkOiBzdHJpbmcsIGlkZW50aWZpZXI6IHN0cmluZywganNvblBheWxvYWQ6IHN0cmluZykgPT4ge1xuICAgICAgb2YobmV3IFNwYXJrTm90aWZpY2F0aW9uKHR5cGUsIGd1aWQsIGlkZW50aWZpZXIsIGpzb25QYXlsb2FkKSlcbiAgICAgICAgLnBpcGUodGhpcy5oYW5kbGVKc29uUGF5bG9hZFRvTG93ZXIoKSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGlzcGF0Y2hOb3RpZmljYXRpb24ocmVzIGFzIFNwYXJrTm90aWZpY2F0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2hlY2tGb3JVcGRhdGUoKTogdm9pZDtcblxuICBwdWJsaWMgY29ubmVjdCgpIHtcbiAgICB0aGlzLl9jb25uZWN0KHRoaXMuY29ubmVjdGlvbik7XG4gIH1cblxuICBwdWJsaWMgZGlzY29ubmVjdCgpIHtcbiAgICB0aGlzLl9kaXNjb25uZWN0KHRoaXMuY29ubmVjdGlvbik7XG4gIH1cblxuICBzdWJzY3JpYmVGb3JSZWFsdGltZShydEV2ZW50U3Vic2NyaXB0aW9uczogUlRFdmVudFN1YnNjcmlwdGlvbkR0bywgdHJpZ2dlckZ1bmN0aW9uPzogKCkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpb24pIHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uc3RhdGUgIT09IEh1YkNvbm5lY3Rpb25TdGF0ZS5Db25uZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25RdWV1ZS5wdXNoKCgpID0+IHRoaXMuc3Vic2NyaWJlRm9yUmVhbHRpbWUocnRFdmVudFN1YnNjcmlwdGlvbnMsIHRyaWdnZXJGdW5jdGlvbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcnRFdmVudFN1YnNjcmlwdGlvbkRlbHRhID0gdGhpcy5yZWFsdGltZUV2ZW50U2VydmljZS5oYW5kbGVSZWFsdGltZUV2ZW50c1N1YnNjcmlwdGlvbnMocnRFdmVudFN1YnNjcmlwdGlvbnMpO1xuICAgICAgICBpZiAocnRFdmVudFN1YnNjcmlwdGlvbkRlbHRhLnN1YnNjcmliZS5sZW5ndGggfHwgcnRFdmVudFN1YnNjcmlwdGlvbkRlbHRhLnVuU3Vic2NyaWJlLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuaW52b2tlUmVhbHRpbWVSZWdpc3RyYXRpb24ocnRFdmVudFN1YnNjcmlwdGlvbkRlbHRhLCB0cmlnZ2VyRnVuY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlRm9yTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25TdWJzY3JpcHRpb246IE5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbkR0bywgdHJpZ2dlckZ1bmN0aW9uPzogKCkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpb24pIHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uc3RhdGUgIT09IEh1YkNvbm5lY3Rpb25TdGF0ZS5Db25uZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TdWJzY3JpcHRpb25RdWV1ZS5wdXNoKCgpID0+IHRoaXMuc3Vic2NyaWJlRm9yTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25TdWJzY3JpcHRpb24sIHRyaWdnZXJGdW5jdGlvbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRGVsdGEgPSB0aGlzLm5vdGlmaWNhdGlvbkV2ZW50U2VydmljZS5oYW5kbGVOb3RpZmljYXRpb25TdWJzY3JpcHRpb25zKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbik7XG4gICAgICAgIGlmICghIW5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbkRlbHRhKSB7XG4gICAgICAgICAgdGhpcy5pbnZva2VOb3RpZmljYXRpb25SZWdpc3RyYXRpb24obm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRGVsdGEsIHRyaWdnZXJGdW5jdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGludm9rZVJlYWx0aW1lUmVnaXN0cmF0aW9uKHJ0RXZlbnRTdWJzY3JpcHRpb25zOiBSVEV2ZW50U3Vic2NyaXB0aW9uRHRvLCB0cmlnZ2VyRnVuY3Rpb24/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgYXBwTW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICBpZiAocnRFdmVudFN1YnNjcmlwdGlvbnMudXNlcklkKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24uaW52b2tlPFJURXZlbnRTdWJzY3JpcHRpb25EdG8+KCdSZWdpc3RlclBhcmsnLCBydEV2ZW50U3Vic2NyaXB0aW9ucywgYXBwTW9kdWxlKS50aGVuKChzdWJUbykgPT4ge1xuICAgICAgICBpZiAodHJpZ2dlckZ1bmN0aW9uKSB7XG4gICAgICAgICAgdHJpZ2dlckZ1bmN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW52b2tlTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbjogTm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRHRvLCB0cmlnZ2VyRnVuY3Rpb24/OiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbiAmJiBub3RpZmljYXRpb25TdWJzY3JpcHRpb24udXNlcklkKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24uaW52b2tlPE5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbkR0bz4oJ1JlZ2lzdGVyTm90aWZpY2F0aW9ucycsIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbikudGhlbigoc3ViVG8pID0+IHtcbiAgICAgICAgaWYgKHRyaWdnZXJGdW5jdGlvbikge1xuICAgICAgICAgIHRyaWdnZXJGdW5jdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0U3BhcmtDb3JlQ29ubmVjdGlvbihpc0Nvbm5lY3RlZDogYm9vbGVhbiwgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkpW2d1aWRdO1xuICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NwYXJrQ29yZUNvbm5lY3RlZCA9IGlzQ29ubmVjdGVkO1xuICAgIGlmICghaXNDb25uZWN0ZWQpIHtcbiAgICAgIGNvbnN0IGZhY2lsaXR5R3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICAgIGNvbnN0IHNlcnZlckNsaWVudFRpbWVTcGFuID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KVtmYWNpbGl0eUd1aWRdIHx8IDA7XG4gICAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbW9tZW50KCkuc3VidHJhY3Qoc2VydmVyQ2xpZW50VGltZVNwYW4sICdtaWxsaXNlY29uZHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuc2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZChzZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGd1aWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVKc29uUGF5bG9hZFRvTG93ZXIoKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFNpZ25hbFJPYmplY3Q+IHtcbiAgICByZXR1cm4gJGlucHV0ID0+ICRpbnB1dC5waXBlKG1hcChyZXMgPT4ge1xuICAgICAgY29uc3Qgb2JqID0gSlNPTi5wYXJzZShyZXMuanNvblBheWxvYWQpO1xuICAgICAgcmVzLmpzb25QYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkob2JqLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgayBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkge1xuICAgICAgICAgICAgICBpZiAoay5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudFtrICYmIGsudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZVtrXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudFtrICYmIGsuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBrLnN1YnN0cmluZygxKV0gPSB2YWx1ZVtrXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBkaXNwYXRjaE5vdGlmaWNhdGlvbihvYmo6IFNwYXJrTm90aWZpY2F0aW9uKTogdm9pZDtcblxuICBwcml2YXRlIF9kaXNwYXRjaE5vdGlmaWNhdGlvbihvYmo6IFNwYXJrTm90aWZpY2F0aW9uKSB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uob2JqLmpzb25QYXlsb2FkKTtcbiAgICBjb25zb2xlLmRlYnVnKGBSZWNlaXZlZCBOb3RpZmljYXRpb24gdHlwZSA9PT0+ICR7b2JqLm5vdGlmaWNhdGlvblR5cGV9YCk7XG4gICAgc3dpdGNoIChvYmoubm90aWZpY2F0aW9uVHlwZSkge1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuSW5pdGlhbENsb3VkQ29ubmVjdDpcbiAgICAgICAgdGhpcy5pbml0aWFsaXplU21hcnRQYXJrQ29ubmVjdGlvbihkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5GYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZDpcbiAgICAgICAgLy8gVE9ETzogdGhpcyBjb25kaXRpb24gd2lsbCBiZSByZW1vdmVkIHdoZW4gYWxsIFwiRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRcIiBub3RpZmljYXRpb25cbiAgICAgICAgLy8gd2lsbCBiZSByZW1vdmVkIHVwb24gYmVpbmcgZXhlY3V0ZWQgaW4gdGhlIHNlcnZlclxuICAgICAgICAvLyBGb3IgbW9yZSBleHBsYW5hdGlvbiBzZWU6IFNQUkszLTY3MDRcbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMuVHJhbnNtaXRTcGVjaWFsRGF5cyB8fCBkYXRhLnR5cGUgPT09IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlVwZGF0ZVNldHRpbmdzKSB7XG4gICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5ub3RpZmljYXRpb25FdmVudFNlcnZpY2UuZ2V0Tm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uc0VudGl0eSgpO1xuICAgICAgICAgIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbi50eXBlID0gb2JqLm5vdGlmaWNhdGlvblR5cGU7XG4gICAgICAgICAgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlID0gdHJ1ZTtcbiAgICAgICAgICBub3RpZmljYXRpb25TdWJzY3JpcHRpb24uaWRlbnRpZmllciA9IHRoaXMubm90aWZpY2F0aW9uRXZlbnRTZXJ2aWNlLmdldE5vdGlmaWNhdGlvbklkZW50aWZpZXIoZGF0YS5ndWlkLCBkYXRhLnBhcmtJZCxcbiAgICAgICAgICAgIG9iai5ub3RpZmljYXRpb25UeXBlLCBub3RpZmljYXRpb25TdWJzY3JpcHRpb24udXNlcklkKTtcbiAgICAgICAgICB0aGlzLnN1YnNjcmliZUZvck5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuR2VuZXJhbEFjdGlvbnM6XG4gICAgICAgIHRoaXMuZ2VuZXJhbEFjdGlvblNlcnZpY2UuZGlzcGF0Y2hHZW5lcmFsQWN0aW9ucyhkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5IYW5kbGVBbGVydDpcbiAgICAgICAgdGhpcy5oYW5kbGVBbGVydHMoQWxlcnREdG8uZnJvbUpTKGRhdGEpLCBvYmouZ3VpZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuSGFuZGxlZE5vdGlmaWNhdGlvbjpcbiAgICAgICAgdGhpcy5oYW5kbGVkTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbkR0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5IYW5kbGVOb3RpZmljYXRpb246XG4gICAgICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbkR0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLlJlcG9ydEdlbmVyYXRlZDpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLlJlY2VpcHRHZW5lcmF0ZWQ6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5TdGlja2VyR2VuZXJhdGVkOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuQXBwbGljYXRpb25VcGRhdGU6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5DcmVhdGVSb2xlOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuVXBkYXRlUm9sZTpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLk1vbnRobGllc0J1bGtVcGRhdGU6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5Nb250aGxpZXNCdWxrRGVsZXRlOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuTW9udGhsaWVzQnVsa1VwZGF0ZUxvY2F0aW9uOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuTW9udGhsaWVzQnVsa1NlbmRFbWFpbDpcbiAgICAgICAgdGhpcy5kaXNwYXRjaE5vdGlmaWNhdGlvbihvYmopO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZGVidWcoYFVua25vd24gbm90aWZpY2F0aW9uIHR5cGUgPT09PiAke29iai5ub3RpZmljYXRpb25UeXBlfWApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZGlzcGF0Y2hSdEV2ZW50KG9iajogUlRPYmplY3RPYmplY3QpOiB2b2lkO1xuXG4gIHByaXZhdGUgX2Rpc3BhdGNoUnRFdmVudChvYmo6IFJUT2JqZWN0T2JqZWN0KSB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uob2JqLmpzb25QYXlsb2FkKTtcbiAgICBzd2l0Y2ggKG9iai5ydEV2ZW50VHlwZSkge1xuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5EZXZpY2VTdGF0dXM6XG4gICAgICAgIHRoaXMuZGV2aWNlc1N0YXR1c0NoYW5nZWQoRGV2aWNlU3RhdHVzRHRvLmZyb21KUyhkYXRhKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uOlxuICAgICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuZGVidWcoYFJUIC0gR290ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9IGV2ZW50YCk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2hhbmdlZChOb3RpZmljYXRpb25EdG8uZnJvbUpTKGRhdGEpLCBvYmouZ3VpZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkFsZXJ0OlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5Mb3N0VGlja2V0OlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5MUFJtaXNtYXRjaDpcbiAgICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmRlYnVnKGBSVCAtIEdvdCAke0pTT04uc3RyaW5naWZ5KGRhdGEpfSBldmVudGApO1xuICAgICAgICB0aGlzLmFsZXJ0Q2hhbmdlZChBbGVydER0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuUGFya1N0YXRlOlxuICAgICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuZGVidWcoYFJUIC0gR290ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9IGV2ZW50YCk7XG4gICAgICAgIHRoaXMuZGV2aWNlQWN0aXZpdHlDaGFuZ2VkKGRhdGEpO1xuICAgICAgICB0aGlzLnBhcmtBY3Rpdml0eUNoYW5nZWQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkRldmljZUV2ZW50OlxuICAgICAgICB0aGlzLmRldmljZUV2ZW50Q2hhbmdlZChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuU2VydmljZXNTdGF0dXM6XG4gICAgICAgIHRoaXMuc2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZChTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8uZnJvbUpTKGRhdGEpLCBvYmouZ3VpZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLlpvbmU6XG4gICAgICAgIHRoaXMuem9uZUNoYW5nZWQoWm9uZUR0by5mcm9tSlMoZGF0YSksIG9iai5wYXJrSWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5GYWNpbGl0eTpcbiAgICAgICAgdGhpcy5mYWNpbGl0eUNoYW5nZWQoRmFjaWxpdHlEdG8uZnJvbUpTKGRhdGEpLCBvYmouZ3VpZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLk9jY3VwYW5jeTpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuUmV2ZW51ZTpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuT3BlblRpY2tldFRyYW5zYWN0aW9uOlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5DbG9zZVRpY2tldFRyYW5zYWN0aW9uOlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5Nb250aGx5VHJhbnNhY3Rpb246XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkd1ZXN0VHJhbnNhY3Rpb246XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLlBheW1lbnRUcmFuc2FjdGlvbjpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuTFBSVHJhbnNhY3Rpb246XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hSdEV2ZW50KG9iaik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmRlYnVnKGBVbmtub3duIGV2ZW50IHR5cGUgPT09PiAke29iai5ydEV2ZW50VHlwZX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY29ubmVjdChjb25uZWN0aW9uOiBIdWJDb25uZWN0aW9uKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnU2lnbmFsUiBFc3RhYmxpc2hpbmcgQ29ubmVjdGlvbi4uLicpO1xuICAgIGNvbm5lY3Rpb24uc3RhcnQoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmRlYnVnKGBTaWduYWxSIENvbm5lY3Rpb24gRXN0YWJsaXNoZWQhYCk7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVhbFRpbWVBd2FpdGluZ1N1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb25Bd2FpdGluZ1N1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLnJlc3Vic2NyaWJlQWN0aXZlUmVhbHRpbWVFdmVudHMoKTtcbiAgICAgICAgdGhpcy5yZXN1YnNjcmliZUFjdGl2ZU5vdGlmaWNhdGlvbnMoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goYXN5bmMgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGlzVW5hdXRob3JpemVkT3JFeHBpcmVkKGVycm9yLCB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbiwgdGhpcy5hdXRoVG9rZW5TZXJ2aWNlKSkge1xuICAgICAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5pbmZvKGBTaWduYWxSIGluaXRpYWwgY29ubmVjdCAtPiB1bmF1dGhvcml6ZWQuIE1lc3NhZ2U6ICR7ZXJyb3I/Lm1lc3NhZ2V9YCk7XG4gICAgICAgICAgdGhpcy5zaWduYWxSUmVmcmVzaFRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXRyeUNvbm5lY3Rpb24oY29ubmVjdGlvbiwgMSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzY29ubmVjdChjb25uZWN0aW9uOiBIdWJDb25uZWN0aW9uKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnU2lnbmFsUiBTdG9wcGluZyBDb25uZWN0aW9uLi4uJyk7XG4gICAgY29ubmVjdGlvbj8uc3RvcCgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoYFNpZ25hbFIgQ29ubmVjdGlvbiBTdG9wcGVkIWApO1xuICAgICAgICB0aGlzLmhhbmRsZURpc2Nvbm5lY3QoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goYXN5bmMgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciA9PiAke2Vycn0sIFRpbWVzdGFtcDogJHtuZXcgRGF0ZSgpfWApO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJldHJ5Q29ubmVjdGlvbihjb25uZWN0aW9uOiBIdWJDb25uZWN0aW9uLCByZXRyeUNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFNpZ25hbFIgRXN0YWJsaXNoaW5nIENvbm5lY3Rpb24uIFJldHJ5ICMke3JldHJ5Q291bnR9LiBUaW1lc3RhbXA6ICR7bmV3IERhdGUoKX1gKTtcbiAgICAgIGNvbm5lY3Rpb24uc3RhcnQoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhgU2lnbmFsUiBDb25uZWN0aW9uIEVzdGFibGlzaGVkISBSZXRyeSAjJHtyZXRyeUNvdW50fWApO1xuICAgICAgICAgIHRoaXMuaGFuZGxlUmVhbFRpbWVBd2FpdGluZ1N1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkF3YWl0aW5nU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgdGhpcy5yZXN1YnNjcmliZUFjdGl2ZVJlYWx0aW1lRXZlbnRzKCk7XG4gICAgICAgICAgdGhpcy5yZXN1YnNjcmliZUFjdGl2ZU5vdGlmaWNhdGlvbnMoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGlzVW5hdXRob3JpemVkT3JFeHBpcmVkKGVycm9yLCB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbiwgdGhpcy5hdXRoVG9rZW5TZXJ2aWNlKSkge1xuICAgICAgICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmluZm8oYFNpZ25hbFIgcmV0cnkgY29ubmVjdCAtPiB1bmF1dGhvcml6ZWQuIE1lc3NhZ2U6ICR7ZXJyb3I/Lm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB0aGlzLnNpZ25hbFJSZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBpZiAocmV0cnlDb3VudCA8PSBjb25maWcuc2lnbmFsUi5tYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXRyeUNvbm5lY3Rpb24oY29ubmVjdGlvbiwgcmV0cnlDb3VudCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgZ2V0U2Vjb25kc0JhY2tvZmYocmV0cnlDb3VudCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsVGltZUF3YWl0aW5nU3Vic2NyaXB0aW9ucygpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblF1ZXVlLmZvckVhY2goYXdhaXRpbmdTdWJzY3JpcHRpb24gPT4gYXdhaXRpbmdTdWJzY3JpcHRpb24oKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25RdWV1ZS5zcGxpY2UoMCk7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVOb3RpZmljYXRpb25Bd2FpdGluZ1N1YnNjcmlwdGlvbigpIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblN1YnNjcmlwdGlvblF1ZXVlLmZvckVhY2goYXdhaXRpbmdTdWJzY3JpcHRpb24gPT4gYXdhaXRpbmdTdWJzY3JpcHRpb24oKSk7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TdWJzY3JpcHRpb25RdWV1ZS5zcGxpY2UoMCk7XG4gIH1cblxuICAvLyBTZXJ2ZXItc2lkZSBTaWduYWxSIGdyb3VwIG1lbWJlcnNoaXAgaXMga2V5ZWQgdG8gdGhlIGNvbm5lY3Rpb24gaWQsIHNvIGEgZnJlc2ggc3RhcnQoKVxuICAvLyAoZS5nLiB0aGUgcmVidWlsZCBhZnRlciBhIHRva2VuLWV4cGlyeSByZWZyZXNoKSBiZWdpbnMgd2l0aCBubyBncm91cCBtZW1iZXJzaGlwcy5cbiAgLy8gUmUtcmVnaXN0ZXIgZXZlcnkgcmVhbHRpbWUgYW5kIG5vdGlmaWNhdGlvbiBzdWJzY3JpcHRpb24gdGhhdCB3YXMgYWN0aXZlIG9uIHRoZSBwcmV2aW91c1xuICAvLyBjb25uZWN0aW9uLCBvdGhlcndpc2UgaW4tZmxpZ2h0IG9wZXJhdGlvbnMgKGxpa2UgcmVwb3J0IGdlbmVyYXRpb24pIG5ldmVyIHJlY2VpdmUgdGhlaXJcbiAgLy8gbm90aWZpY2F0aW9uIGFuZCByZWFsdGltZSBldmVudHMgc3RvcCBhcnJpdmluZyAodGhlIGNsaWVudC1zaWRlIHJlZmNvdW50cyBzdGlsbCBtYXJrIHRoZW1cbiAgLy8gYXMgc3Vic2NyaWJlZCwgc28gbm8gZGVsdGEgZXZlciByZS10cmlnZ2VycyBSZWdpc3RlclBhcmspLlxuICBwcml2YXRlIHJlc3Vic2NyaWJlQWN0aXZlUmVhbHRpbWVFdmVudHMoKSB7XG4gICAgY29uc3QgcnRFdmVudFN1YnNjcmlwdGlvbnMgPSB0aGlzLnJlYWx0aW1lRXZlbnRTZXJ2aWNlLmdldFN1YnNjcmlwdGlvbkZvclJlY29ubmVjdCgpO1xuICAgIGlmIChydEV2ZW50U3Vic2NyaXB0aW9ucy5zdWJzY3JpYmUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmludm9rZVJlYWx0aW1lUmVnaXN0cmF0aW9uKHJ0RXZlbnRTdWJzY3JpcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc3Vic2NyaWJlQWN0aXZlTm90aWZpY2F0aW9ucygpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25TdWJzY3JpcHRpb25zID0gdGhpcy5ub3RpZmljYXRpb25FdmVudFNlcnZpY2UuZ2V0U3Vic2NyaXB0aW9uRm9yUmVjb25uZWN0KCk7XG4gICAgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9ucy5mb3JFYWNoKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICB0aGlzLmludm9rZU5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihub3RpZmljYXRpb25TdWJzY3JpcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEaXNjb25uZWN0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uUXVldWUgPSBbXTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblN1YnNjcmlwdGlvblF1ZXVlID0gW107XG4gICAgdGhpcy5yZWFsdGltZUV2ZW50U2VydmljZS5yZXNldEFsbFN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIEBEaXNwYXRjaCgpIGRldmljZXNTdGF0dXNDaGFuZ2VkID0gKGRldmljZVN0YXR1czogRGV2aWNlU3RhdHVzRHRvKSA9PlxuICAgIG5ldyBEZXZpY2VTdGF0dXNDaGFuZ2VkQWN0aW9uKGRldmljZVN0YXR1cyk7XG4gIEBEaXNwYXRjaCgpIGZhY2lsaXR5Q2hhbmdlZCA9IChkYXRhOiBGYWNpbGl0eUR0bywgZ3VpZDogc3RyaW5nKSA9PlxuICAgIG5ldyBGYWNpbGl0eUNoYW5nZWRBY3Rpb24oZGF0YSwgZ3VpZCk7XG4gIEBEaXNwYXRjaCgpIHNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWQgPSAoc2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbihzZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGd1aWQpO1xuICBARGlzcGF0Y2goKSBwYXJrQWN0aXZpdHlDaGFuZ2VkID0gKGFjdGl2aXR5OiBFdmVudEFjdGl2aXR5RHRvKSA9PlxuICAgIG5ldyBQYXJrQWN0aXZpdHlDaGFuZ2VkQWN0aW9uKGFjdGl2aXR5KTtcbiAgQERpc3BhdGNoKCkgZGV2aWNlRXZlbnRDaGFuZ2VkID0gKGRldkV2ZW50OiBEZXZpY2VFdmVudER0bykgPT5cbiAgICBuZXcgRGV2aWNlRXZlbnRDaGFuZ2VkQWN0aW9uKGRldkV2ZW50KTtcbiAgQERpc3BhdGNoKCkgZGV2aWNlQWN0aXZpdHlDaGFuZ2VkID0gKGV2ZW50QWN0aXZpdHk6IEV2ZW50QWN0aXZpdHlEdG8pID0+XG4gICAgbmV3IERldmljZUFjdGl2aXR5Q2hhbmdlZEFjdGlvbihldmVudEFjdGl2aXR5KTtcbiAgQERpc3BhdGNoKCkgbHByVHJhbnNhY3Rpb25zQ2hhbmdlZCA9IChscHJUcmFuczogTHByVHJhbnNhY3Rpb25EdG8pID0+XG4gICAgbmV3IExwclRyYW5zYWN0aW9uc0NoYW5nZWRBY3Rpb24obHByVHJhbnMpO1xuICBARGlzcGF0Y2goKSBhbGVydENoYW5nZWQgPSAoYWxlcnREdG86IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IEFsZXJ0Q2hhbmdlZEFjdGlvbihhbGVydER0bywgZ3VpZCk7XG4gIEBEaXNwYXRjaCgpIG5vdGlmaWNhdGlvbkNoYW5nZWQgPSAobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbihub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuICBARGlzcGF0Y2goKSBoYW5kbGVkTm90aWZpY2F0aW9uID0gKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24obm90aWZpY2F0aW9uRHRvLCBndWlkKTtcbiAgQERpc3BhdGNoKCkgaGFuZGxlQWxlcnRzID0gKGFsZXJ0RHRvOiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSA9PlxuICAgIG5ldyBIYW5kbGVBbGVydHNBY3Rpb24oYWxlcnREdG8sIGd1aWQpO1xuICBARGlzcGF0Y2goKSBoYW5kbGVOb3RpZmljYXRpb24gPSAobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG4gIEBEaXNwYXRjaCgpIHpvbmVDaGFuZ2VkID0gKHpvbmVEdG86IFpvbmVEdG8sIHBhcmtJZDogbnVtYmVyKSA9PlxuICAgIG5ldyBab25lQ2hhbmdlZEFjdGlvbih6b25lRHRvLCBwYXJrSWQpO1xuICBARGlzcGF0Y2goKSBpbml0aWFsaXplU21hcnRQYXJrQ29ubmVjdGlvbiA9IChzbWFydHBhcms6IFNtYXJ0cGFya0R0bykgPT5cbiAgICBuZXcgQWRkU21hcnRwYXJrQWN0aW9uKHNtYXJ0cGFyayk7XG4gIEBEaXNwYXRjaCgpIGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkID0gKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50OiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCkgPT5cbiAgICBuZXcgRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24oZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQpO1xuICBARGlzcGF0Y2goKSBwcml2YXRlIHNpZ25hbFJSZWZyZXNoVG9rZW4gPSAoKSA9PiBuZXcgU2lnbmFsUlJlZnJlc2hUb2tlbkFjdGlvbigpO1xufVxuXG5leHBvcnQgY2xhc3MgVGliYVJldHJ5UG9saWN5IGltcGxlbWVudHMgc2lnbmFsUi5JUmV0cnlQb2xpY3kge1xuICBwcml2YXRlIG1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudDogbnVtYmVyO1xuICBwcml2YXRlIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlO1xuICBwcml2YXRlIGF1dGhUb2tlblNlcnZpY2U6IEF1dGhUb2tlblNlcnZpY2U7XG4gIGNvbnN0cnVjdG9yKG1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudDogbnVtYmVyLCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLm1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudCA9IG1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudDtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZSA9IGluamVjdG9yLmdldChTZXNzaW9uU3RvcmFnZVNlcnZpY2UpO1xuICAgIHRoaXMuYXV0aFRva2VuU2VydmljZSA9IGluamVjdG9yLmdldChBdXRoVG9rZW5TZXJ2aWNlKTtcbiAgfVxuXG4gIG5leHRSZXRyeURlbGF5SW5NaWxsaXNlY29uZHMocmV0cnlDb250ZXh0OiBzaWduYWxSLlJldHJ5Q29udGV4dCk6IG51bWJlciB7XG4gICAgbGV0IG1pbGxpc2Vjb25kczogbnVtYmVyID0gbnVsbDtcbiAgICBjb25zdCBjdXJyZW50UmV0cnlDb3VudCA9IHJldHJ5Q29udGV4dC5wcmV2aW91c1JldHJ5Q291bnQgKyAxO1xuICAgIGlmIChpc1VuYXV0aG9yaXplZE9yRXhwaXJlZChyZXRyeUNvbnRleHQucmV0cnlSZWFzb24sIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuLCB0aGlzLmF1dGhUb2tlblNlcnZpY2UpKSB7XG4gICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgVGliYVJldHJ5UG9saWN5IC0+IHVuYXV0aG9yaXplZCB0b2tlbi4gTWVzc2FnZTogICR7cmV0cnlDb250ZXh0LnJldHJ5UmVhc29uLm1lc3NhZ2V9YCk7XG4gICAgICB0aGlzLnNpZ25hbFJSZWZyZXNoVG9rZW4oKTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZXRyeUNvdW50IDwgdGhpcy5tYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQpIHtcbiAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5pbmZvKGBUaWJhUmV0cnlQb2xpY3kgLT4gZmFpbGVkIG5lZ290aWF0aW9uICMke2N1cnJlbnRSZXRyeUNvdW50fS4gTWVzc2FnZTogJHtyZXRyeUNvbnRleHQucmV0cnlSZWFzb24ubWVzc2FnZX1gKTtcbiAgICAgIG1pbGxpc2Vjb25kcyA9IGdldFNlY29uZHNCYWNrb2ZmKGN1cnJlbnRSZXRyeUNvdW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWlsbGlzZWNvbmRzO1xuICB9XG5cbiAgQERpc3BhdGNoKCkgc2lnbmFsUlJlZnJlc2hUb2tlbiA9ICgpID0+IG5ldyBTaWduYWxSUmVmcmVzaFRva2VuQWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWNvbmRzQmFja29mZihyZXRyeUNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBkZWxheXNUYWJsZUluU2Vjb25kczogeyBba2V5OiBudW1iZXJdOiBudW1iZXJbXTsgfSA9IHtcbiAgICAxOiBbNSwgMjBdLCAvLzVzIC0gMjBzXG4gICAgMjogWzI1LCA0MF0sIC8vIDI1cyAtIDQwc1xuICAgIDM6IFs0NSwgNjBdLCAvLyA0NXMgLSA2MHNcbiAgICA0OiBbNjUsIDgwXSwgLy8gNjVzIC0gODBzXG4gICAgNTogWzYwMCwgOTAwXSwgIC8vIDEwbSAtIDE1bVxuICB9O1xuICBjb25zdCBbbWluU2Vjb25kcywgbWF4U2Vjb25kc10gPSBkZWxheXNUYWJsZUluU2Vjb25kc1tyZXRyeUNvdW50XSB8fCBbMCwgMF07XG4gIHJldHVybiAoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heFNlY29uZHMgLSBtaW5TZWNvbmRzICsgMSkpICsgbWluU2Vjb25kcykgKiBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUztcbn1cblxuZnVuY3Rpb24gaXNVbmF1dGhvcml6ZWRPckV4cGlyZWQoZXJyb3I6IGFueSwgdG9rZW46IHN0cmluZywgYXV0aFRva2VuU2VydmljZTogQXV0aFRva2VuU2VydmljZSk6IGJvb2xlYW4ge1xuICBjb25zdCB1bmF1dGhvcml6ZWQgPSAoZXJyb3I/Lm1lc3NhZ2UgYXMgc3RyaW5nKT8uaW5jbHVkZXMoYFN0YXR1cyBjb2RlICcke0h0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZH0nYCk7XG4gIHJldHVybiB1bmF1dGhvcml6ZWQgfHwgYXV0aFRva2VuU2VydmljZS5pc1Rva2VuRXhwaXJlZCh0b2tlbik7XG59XG4iXX0=
@@ -120443,6 +120443,8 @@ class SignalR {
120443
120443
  console.debug(`SignalR Connection Established!`);
120444
120444
  this.handleRealTimeAwaitingSubscriptions();
120445
120445
  this.handleNotificationAwaitingSubscription();
120446
+ this.resubscribeActiveRealtimeEvents();
120447
+ this.resubscribeActiveNotifications();
120446
120448
  })
120447
120449
  .catch(async (error) => {
120448
120450
  if (isUnauthorizedOrExpired(error, this.sessionStorageService.accessToken, this.authTokenService)) {
@@ -120473,6 +120475,8 @@ class SignalR {
120473
120475
  console.debug(`SignalR Connection Established! Retry #${retryCount}`);
120474
120476
  this.handleRealTimeAwaitingSubscriptions();
120475
120477
  this.handleNotificationAwaitingSubscription();
120478
+ this.resubscribeActiveRealtimeEvents();
120479
+ this.resubscribeActiveNotifications();
120476
120480
  })
120477
120481
  .catch((error) => {
120478
120482
  if (isUnauthorizedOrExpired(error, this.sessionStorageService.accessToken, this.authTokenService)) {
@@ -120496,6 +120500,24 @@ class SignalR {
120496
120500
  this.notificationSubscriptionQueue.forEach(awaitingSubscription => awaitingSubscription());
120497
120501
  this.notificationSubscriptionQueue.splice(0);
120498
120502
  }
120503
+ // Server-side SignalR group membership is keyed to the connection id, so a fresh start()
120504
+ // (e.g. the rebuild after a token-expiry refresh) begins with no group memberships.
120505
+ // Re-register every realtime and notification subscription that was active on the previous
120506
+ // connection, otherwise in-flight operations (like report generation) never receive their
120507
+ // notification and realtime events stop arriving (the client-side refcounts still mark them
120508
+ // as subscribed, so no delta ever re-triggers RegisterPark).
120509
+ resubscribeActiveRealtimeEvents() {
120510
+ const rtEventSubscriptions = this.realtimeEventService.getSubscriptionForReconnect();
120511
+ if (rtEventSubscriptions.subscribe.length) {
120512
+ this.invokeRealtimeRegistration(rtEventSubscriptions);
120513
+ }
120514
+ }
120515
+ resubscribeActiveNotifications() {
120516
+ const notificationSubscriptions = this.notificationEventService.getSubscriptionForReconnect();
120517
+ notificationSubscriptions.forEach(notificationSubscription => {
120518
+ this.invokeNotificationRegistration(notificationSubscription);
120519
+ });
120520
+ }
120499
120521
  handleDisconnect() {
120500
120522
  this.subscriptionQueue = [];
120501
120523
  this.notificationSubscriptionQueue = [];