asp-lib 2.1.0 → 2.1.1

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.
@@ -12,6 +12,8 @@ import * as i6 from "../recents-dropdown/recents-dropdown.component";
12
12
  import * as i7 from "../company-dropdown/company-dropdown.component";
13
13
  import * as i8 from "../user-dropdown/user-dropdown.component";
14
14
  export class HeaderComponent {
15
+ // Every async callback that changes the view calls `cdr.markForCheck()`: apps without
16
+ // zone.js (Angular 21 zoneless) only re-render on template events, signals or that call.
15
17
  constructor(services, router, route, cdr, snackbar) {
16
18
  this.services = services;
17
19
  this.router = router;
@@ -216,6 +218,7 @@ export class HeaderComponent {
216
218
  });
217
219
  }
218
220
  this.companies = data.load;
221
+ this.cdr.markForCheck();
219
222
  }
220
223
  }
221
224
  else {
@@ -239,9 +242,11 @@ export class HeaderComponent {
239
242
  else {
240
243
  this.menuMode = 'modules';
241
244
  }
245
+ this.cdr.markForCheck();
242
246
  }, (err) => {
243
247
  console.log(err);
244
248
  this.menuMode = 'modules';
249
+ this.cdr.markForCheck();
245
250
  });
246
251
  }
247
252
  checkResource() {
@@ -259,9 +264,11 @@ export class HeaderComponent {
259
264
  else {
260
265
  this.menuMode = 'modules';
261
266
  }
267
+ this.cdr.markForCheck();
262
268
  }, (err) => {
263
269
  console.log(err);
264
270
  this.menuMode = 'modules';
271
+ this.cdr.markForCheck();
265
272
  });
266
273
  }
267
274
  checkResourceByRole() {
@@ -307,8 +314,10 @@ export class HeaderComponent {
307
314
  else {
308
315
  this.currentModule(this.moduleList[0].id);
309
316
  }
317
+ this.cdr.markForCheck();
310
318
  }, (err) => {
311
319
  this.menuMode = 'modules';
320
+ this.cdr.markForCheck();
312
321
  });
313
322
  /*
314
323
  if (this.recentData) {
@@ -388,10 +397,12 @@ export class HeaderComponent {
388
397
  this.moduleOptionsRequest = this.services.menuModuleSelected(this.servicesConfig.baseUrl, event).subscribe((data) => {
389
398
  this.menuData = { categories: data?.load ?? [] };
390
399
  this.menuLoading = false;
400
+ this.cdr.markForCheck();
391
401
  }, (err) => {
392
402
  // Don't keep showing the previous module's options under the new module's name.
393
403
  this.menuData = { categories: [] };
394
404
  this.menuLoading = false;
405
+ this.cdr.markForCheck();
395
406
  });
396
407
  }
397
408
  navigateToOption(option) {
@@ -509,4 +520,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
509
520
  }], lastOption: [{
510
521
  type: Output
511
522
  }] } });
512
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzcC1saWIvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzcC1saWIvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSwyQkFBMkIsRUFBRSxxQkFBcUIsRUFBWSxNQUFNLGtDQUFrQyxDQUFDO0FBSTFJLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUE0QixRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBK0I5RCxNQUFNLE9BQU8sZUFBZTtJQXdFMUIsWUFBb0IsUUFBeUIsRUFBUyxNQUFjLEVBQVMsS0FBcUIsRUFBUyxHQUFzQixFQUFTLFFBQXlCO1FBQS9JLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFTLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQXZFMUosWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixVQUFLLEdBQVcsU0FBUyxDQUFDO1FBQzFCLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLGFBQVEsR0FBUyxFQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUNsQyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QixjQUFTLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLGVBQVUsR0FBUSxFQUFF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QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QixNQUFNLElBQUksR0FBRyxDQUFDO1NBQ2Y7UUFFRCxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7K0dBamdCVSxlQUFlO21HQUFmLGVBQWUsbWhCQ3JDNUIsNG9GQTREQTs7NEZEdkJhLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0UsWUFBWTt1TkFLYixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFPRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRyb3Bkb3duQ29tcGFuaWVzT3B0aW9ucywgZHJvcGRvd25Ob3RpZmljYXRpb25PcHRpb25zLCBkcm9wZG93blJlY2VudE9wdGlvbnMsIG1lbnVEYXRhIH0gZnJvbSAnLi4vYXNzZXRzL21lbnUtZGF0YS9tZW51RGF0YVRlc3QnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIERhdGEsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTZXJ2aWNlc0NvbmZpZyB9IGZyb20gJy4uL3V0aWxzL21vZGVscy9TZXJ2aWNlc0NvbmZpZyc7XG5pbXBvcnQgeyBTZWN1cml0eVNlcnZpY2VzIH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZXMvU2VjdXJpdHlTZXJ2aWNlc0RlZmF1bHQnO1xuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNuYWNrYmFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NuYWNrYmFyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWRlclNob3J0Y3V0IHtcbiAgbW9kdWxlOiBhbnk7XG4gIG9wdGlvbjogYW55O1xufVxuXG4vKiogQSBtb2R1bGUgc2hvd24gb24gaXRzIG93biBzZWxlY3QsIHdpdGggaXRzIG9wdGlvbnMgdHJlZSBhbHJlYWR5IGxvYWRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVySW5saW5lTW9kdWxlIHtcbiAgbW9kdWxlOiBhbnk7XG4gIGRhdGE6IHsgY2F0ZWdvcmllczogYW55W10gfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bk9wdGlvbnMge1xuICBpZDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nO1xuICBwYXJlbnRJZDogYW55O1xuICBvcHRpb25zOiBEcm9wZG93bk9wdGlvbkNhdGVyZ29yeVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duT3B0aW9uQ2F0ZXJnb3J5IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItaGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9hc3NldHMvZm9udHMvc3R5bGUuY3NzJywgJy4uL2Fzc2V0cy90aGVtZS5zY3NzJywnLi9oZWFkZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBIZWFkZXJDb21wb25lbnQge1xuICBASW5wdXQoKSBhcHBMb2dvOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgc2hvd0JhY2tCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBtZW51RGF0YTogRGF0YSA9IHtjYXRlZ29yaWVzOiBbXX07XG4gIEBJbnB1dCgpIHJlY2VudE9wdGlvbnMgOmFueSA9IFtdO1xuICBASW5wdXQoKSBjb21wYW5pZXMgOmFueSA9IFtdO1xuICBASW5wdXQoKSBtb2R1bGVMaXN0OiBhbnkgPSBbXTtcbiAgQElucHV0KCkgYXV0bzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXJ2aWNlc0NvbmZpZzogU2VydmljZXNDb25maWcgPSB7XG4gICAgYmFzZVVybDogJycsXG4gICAgaXNEZXY6IGZhbHNlLFxuICAgIHVzZXJuYW1lOiAnJyxcbiAgICBwYXNzd29yZDogJycsXG4gICAgY2hlY2tSb2xlOiBmYWxzZVxuICB9O1xuICBASW5wdXQoKSBpc01vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogVXAgdG8gdGhpcyBtYW55IHNjcmVlbnMgYXJlIHNob3duIGFzIHNob3J0Y3V0czsgb3RoZXJ3aXNlIHVwIHRvIHRoaXMgbWFueVxuICAgKiBtb2R1bGVzIGFyZSBzaG93biBhcyBzZWxlY3RzIHdpdGhvdXQgdGhlIDktZG90IG1vZHVsZXMgbWVudS5cbiAgICovXG4gIEBJbnB1dCgpIHNob3J0Y3V0TGltaXQ6IG51bWJlciA9IDM7XG4gIEBPdXRwdXQoKSByZXR1cm5DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbWVudUl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgbWVudU5hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByZWNlbnROYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAgXG4gIEBPdXRwdXQoKSBtb2R1bGVTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGxhc3RPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgXG4gIGlzQXV0aCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCB1bmRlZmluZWQ7XG4gIGRyb3Bkb3duT3B0aW9ucyA9IGRyb3Bkb3duUmVjZW50T3B0aW9ucztcbiAgbm90aWZpY2F0aW9uT3B0aW9ucyA9IGRyb3Bkb3duTm90aWZpY2F0aW9uT3B0aW9ucztcbiAgY29tcGFuaWVzRHJvcGRvd24gPSBkcm9wZG93bkNvbXBhbmllc09wdGlvbnM7XG4gIGN1cnJlbnRNb2R1bGVPcHRpb246IGFueTtcbiAgc2VsZWN0ZWRPcHRpb246IGFueTtcbiAgLyoqXG4gICAqIFdoYXQgdGhlIGxlZnQgc2lkZSBzaG93czogdGhlIG1vZHVsZXMgbWVudSwgb25lIHNlbGVjdCBwZXIgbW9kdWxlIHdoZW4gdGhlIHVzZXJcbiAgICogaGFzIGZldyBtb2R1bGVzLCBvciBvbmUgc2hvcnRjdXQgcGVyIHNjcmVlbiB3aGVuIHRoZSB1c2VyIGhhcyBmZXcgc2NyZWVucy5cbiAgICogJ2xvYWRpbmcnIGF2b2lkcyBmbGFzaGluZyB0aGUgbWVudSB3aGlsZSB0aGF0IGlzIGJlaW5nIGNoZWNrZWQuXG4gICAqL1xuICBtZW51TW9kZTogJ2xvYWRpbmcnIHwgJ21vZHVsZXMnIHwgJ2lubGluZU1vZHVsZXMnIHwgJ3Nob3J0Y3V0cycgPSAnbW9kdWxlcyc7XG4gIHNob3J0Y3V0czogSGVhZGVyU2hvcnRjdXRbXSA9IFtdO1xuICBpbmxpbmVNb2R1bGVzOiBIZWFkZXJJbmxpbmVNb2R1bGVbXSA9IFtdO1xuICAvKiogTW9kdWxlcyBvZiB0aGUgOS1kb3QgbWVudSB0aGF0IHJlcGxhY2VzIHRoZSBzZWxlY3RzIG9uIHNtYWxsIHNjcmVlbnMuICovXG4gIGlubGluZU1vZHVsZUxpc3Q6IGFueVtdID0gW107XG4gIC8qKiBUcnVlIHdoaWxlIHRoZSBvcHRpb25zIHRyZWUgb2YgdGhlIHNlbGVjdGVkIG1vZHVsZSBpcyBiZWluZyBsb2FkZWQuICovXG4gIG1lbnVMb2FkaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbW9kdWxlT3B0aW9uc1JlcXVlc3Q6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgZHJvcGRvd25PcHRpb25zTWVudTogRHJvcGRvd25PcHRpb25zW10gPSBbIFxuICAgIHtcbiAgICAgIGlkOiAwLFxuICAgICAgbGFiZWw6ICdMb3JlbSBJcHN1bScsXG4gICAgICBwYXJlbnRJZDogbnVsbCxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xvcmVtIElwc3VtJywgaWNvbjogJ2JyYXNpbGlhLWNvbmZpZ3VyYXRpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdMb3JlbSBJcHN1bScsIGljb246ICdicmFzaWxpYS1idXMtZ2F2aW90YScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0xvcmVtIElwc3VtJywgaWNvbjogJ2JyYXNpbGlhLXNhdGVsaXRlJyB9LFxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDAsXG4gICAgICBsYWJlbDogJ0xvcmVtIElwc3VtJyxcbiAgICAgIHBhcmVudElkOiBudWxsLFxuICAgICAgb3B0aW9uczogW1xuICAgICAgICB7IGxhYmVsOiAnTG9yZW0gSXBzdW0nLCBpY29uOiAnYnJhc2lsaWEtdmlkZW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdMb3JlbSBJcHN1bScsIGljb246ICdicmFzaWxpYS1ydXRlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnTG9yZW0gSXBzdW0nLCBpY29uOiAnYnJhc2lsaWEtY2FsZW5kYXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICdMb3JlbSBJcHN1bScsIGljb246ICdicmFzaWxpYS1kYXNoYm9hcmQnIH0sICBcbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlczpTZWN1cml0eVNlcnZpY2VzLHByaXZhdGUgcm91dGVyOiBSb3V0ZXIscHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUscHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLHByaXZhdGUgc25hY2tiYXI6IFNuYWNrYmFyU2VydmljZSl7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBcbiAgICBpZih0aGlzLmF1dG8pe1xuICAgICAgdGhpcy5tZW51TW9kZSA9ICdsb2FkaW5nJztcbiAgICAgIHRoaXMuaXNBdXRoJCA9IHRoaXMuaXNBdXRoKCk7XG4gICAgICB0aGlzLmlzQXV0aCQuc3Vic2NyaWJlKGlzQXV0aGVudGljYXRlZCA9PiB7XG4gICAgICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICBpZih0aGlzLnNlcnZpY2VzQ29uZmlnLmlzRGV2KXtcbiAgICAgICAgICAgIGlmKHRoaXMuc2VydmljZXNDb25maWcuY2hlY2tSb2xlID09IHRydWUpe1xuICAgICAgICAgICAgICB0aGlzLmNoZWNrUmVzb3VyY2UoKTtcbiAgICAgICAgICAgICAgaWYoIXRoaXMuaXNNb2JpbGUpe1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tSZXNvdXJjZUJ5Um9sZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgdGhpcy5nZXRIaXN0b3J5KCk7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0Q29tcGFuaWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUmVzb3VyY2UoKTtcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzTW9iaWxlKXtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja1Jlc291cmNlQnlSb2xlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgICAgICAgICB3aW5kb3cub3BlbignLycsICdfc2VsZicpO1xuICAgICAgICB9XG4gICAgICB9KTsgICAgICBcbiAgICB9XG4gIH1cblxuICBpc0F1dGgoKXtcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlcy5pc0F1dGhlbnRpY2F0ZWQodGhpcy5zZXJ2aWNlc0NvbmZpZy5iYXNlVXJsKS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICBpZih0aGlzLnNlcnZpY2VzQ29uZmlnLmlzRGV2KXtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kb0xvZ2luKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkb0xvZ2luKCl7XG4gICAgcmV0dXJuIHRoaXMuc2VydmljZXMubG9naW4odGhpcy5zZXJ2aWNlc0NvbmZpZy5iYXNlVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc0NvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXNDb25maWcucGFzc3dvcmQpLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlOmFueSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UuY29kZSA9PSAyMDApe1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgeyAgICAgICBcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7ICAgICAgICBcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZU9wdGlvblNlbGVjdGVkKG9wdGlvbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbjtcbiAgICB0aGlzLm5hdmlnYXRlVG9PcHRpb24ob3B0aW9uKTsgXG4gIH1cblxuICBoYW5kbGVDb21wYW55U2VsZWN0ZWQoYWdlbmN5OmFueSkge1xuICAgIHRoaXMuc2VydmljZXMuc2V0RGVmYXVsdEFnZW5jeSh0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwsYWdlbmN5LmlkKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmKGRhdGEucmVzcG9uc2VDb2RlID09IDIwMCl7XG4gICAgICAgICAgdGhpcy5zbmFja2Jhci5zdWNjZXNzKCdDYW1iaW8gZGUgQWdlbmNpYSByZWFsaXphZG8gY29uIMOpeGl0bycpO1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgb25JdGVtQ2xpY2sodXJsOiBhbnkpIHtcbiAgICBpZighdGhpcy5hdXRvKXtcbiAgICAgIHRoaXMubWVudU5hdmlnYXRlLmVtaXQodXJsKTtcbiAgICB9ZWxzZXtcbiAgICAgIGNvbnN0IHVybE9iaiA9IHVybC51cmxTZW5kO1xuICAgICAgY29uc3QgZXZlbnQgPSB1cmwuZXZlbnQ7XG4gICAgXG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgXG4gICAgICBpZih1cmxPYmoudXJsKXtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5zYXZlSGlzdG9yeSh0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwse29wdGlvbklkOiB1cmxPYmouaWR9KS5zdWJzY3JpYmUoXG4gICAgICAgICAgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvT3B0aW9uKHVybE9iaik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLypcbiAgICAgIHRoaXMuaW5ib3hTZXJ2aWNlLnNhdmVIaXN0b3J5KHtvcHRpb25JZDogdXJsT2JqLmlkfSkuc3Vic2NyaWJlKFxuICAgICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHsgICAgICBcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgICovXG4gICAgfSAgXG4gIH1cblxuICBhcnJvd0NsaWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmKCF0aGlzLmF1dG8pe1xuICAgICAgdGhpcy5yZXR1cm5DbGljay5lbWl0KCRldmVudCk7XG4gICAgfSAgICBcbiAgfVxuXG4gIG9uSXRlbU1vZHVsZVNlbGVjdGVkKGV2ZW50OiBhbnkpe1xuICAgIGlmKCF0aGlzLmF1dG8pe1xuICAgICAgdGhpcy5tb2R1bGVTZWxlY3QuZW1pdChldmVudC5pZCk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmN1cnJlbnRNb2R1bGUoZXZlbnQuaWQpO1xuICAgIH1cbiAgICBcbiAgfVxuXG4gIGdldENvbXBhbmllcygpe1xuICAgIHRoaXMuc2VydmljZXMuZ2V0Q29tcGFuaWVzSW5mbyh0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwpLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBpZihkYXRhLmxvYWQpe1xuICAgICAgICAgICAgICBjb25zdCBjYWMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ0FDJyk7XG4gICAgICAgICAgICAgIGNvbnN0IGNjYyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDQ0MnKTtcbiAgICAgICAgICAgICAgaWYoY2FjICYmIGNjYyl7XG4gICAgICAgICAgICAgICAgZGF0YS5sb2FkLmZvckVhY2goKGM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgYy5hZ2VuY2llcy5mb3JFYWNoKChhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoYS5hZ2VuY3lDb2RlID09IGNhYyAmJiBjLmNvbXBhbnlDb2RlID09IGNjYyl7XG4gICAgICAgICAgICAgICAgICAgICAgYy5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIHRoaXMuY29tcGFuaWVzID0gZGF0YS5sb2FkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0SGlzdG9yeSgpe1xuICAgIHRoaXMuc2VydmljZXMuZ2V0SGlzdG9yeSh0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwpLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBpZihkYXRhLmxvYWQpe1xuICAgICAgICAgICAgdGhpcy5yZWNlbnRPcHRpb25zID0gZGF0YS5sb2FkO1xuICAgICAgICAgICAgaWYodGhpcy5yZWNlbnRPcHRpb25zLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImxhc3Qgb3B0aW9uIGVtaXRcIik7XG4gICAgICAgICAgICAgIHRoaXMubGFzdE9wdGlvbi5lbWl0KHRoaXMucmVjZW50T3B0aW9uc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmdldE1vZHVsZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1lbnVNb2RlID0gJ21vZHVsZXMnO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICB0aGlzLm1lbnVNb2RlID0gJ21vZHVsZXMnO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjaGVja1Jlc291cmNlKCl7XG4gICAgdGhpcy5zZXJ2aWNlcy5nZXRSZXNvdXJjZXNCeVVzZXIodGhpcy5zZXJ2aWNlc0NvbmZpZy5iYXNlVXJsKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgaWYoZGF0YS5sb2FkKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEubG9hZCk7XG4gICAgICAgICAgICB0aGlzLmdldEhpc3RvcnkoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29tcGFuaWVzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVudU1vZGUgPSAnbW9kdWxlcyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVudU1vZGUgPSAnbW9kdWxlcyc7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHRoaXMubWVudU1vZGUgPSAnbW9kdWxlcyc7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNoZWNrUmVzb3VyY2VCeVJvbGUoKXtcbiAgICBsZXQgcGF0aCA9IHRoaXMuZ2V0UGF0aCgpO1xuICAgIGlmKHBhdGggIT0gJy9ob21lJyl7XG4gICAgICBpZiAocGF0aCA9PSAnL29wZW4tZm9ybScpe1xuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnZm9ybScpO1xuICAgICAgICBjb25zdCB1cmxEZWNvZGUgPSB0aGlzLmRlY29kZUJhc2U2NFVybChmb3JtKTtcbiAgICAgICAgcGF0aCA9IHVybERlY29kZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VydmljZXMuZ2V0UmVzb3VyY2VzQnlSb2xlVXNlcih0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwscGF0aCkuc3Vic2NyaWJlKFxuICAgICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGlmKGRhdGEubG9hZCA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgIHdpbmRvdy5vcGVuKCcvaG9tZScsICdfc2VsZicpO1xuICAgICAgICAgICAgfSAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICBcbiAgfVxuXG4gIGdldFBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF07XG4gIH1cblxuICBnZXRNb2R1bGVzKCl7XG4gICAgdGhpcy5zZXJ2aWNlcy5nZXRNb2R1bGVzQnlVc2VyKHRoaXMuc2VydmljZXNDb25maWcuYmFzZVVybCkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZGF0YS5sb2FkKSB7XG4gICAgICAgICAgdGhpcy5tb2R1bGVMaXN0ID0gZGF0YS5sb2FkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tTaG9ydGN1dHMoKTtcbiAgICAgICAgaWYgKHRoaXMucmVjZW50T3B0aW9ucyAmJiB0aGlzLnJlY2VudE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vZHVsZU9wdGlvbiA9IHRoaXMubW9kdWxlTGlzdC5maW5kKChtOiB7IGlkOiBhbnk7IH0pID0+IG0uaWQgPT09IHRoaXMucmVjZW50T3B0aW9uc1swXS5hcHBsaWNhdGlvbklkKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgaWYodGhpcy5yZWNlbnRPcHRpb25zWzBdLmFwcGxpY2F0aW9uSWQpe1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TW9kdWxlKHRoaXMucmVjZW50T3B0aW9uc1swXS5hcHBsaWNhdGlvbklkKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TW9kdWxlKHRoaXMubW9kdWxlTGlzdFswXS5pZClcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9kdWxlKHRoaXMubW9kdWxlTGlzdFswXS5pZClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5tZW51TW9kZSA9ICdtb2R1bGVzJztcbiAgICAgIH1cbiAgICApO1xuICAgIC8qXG4gICAgaWYgKHRoaXMucmVjZW50RGF0YSkge1xuICAgICAgdGhpcy5tb2R1bGVTZWxlY3QodGhpcy5yZWNlbnREYXRhWzBdLmFwcGxpY2F0aW9uSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyggdGhpcy5kcm9wZG93bk9wdGlvbnNNZW51KVxuICAgICAgLy8gY29uc3QgZmlyc3RPcHRpb25JZCA9IHRoaXMuZHJvcGRvd25PcHRpb25zTWVudT8uWzBdPy5pZDtcbiAgICAgIC8vIGlmIChmaXJzdE9wdGlvbklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vICAgdGhpcy5tb2R1bGVTZWxlY3QoZmlyc3RPcHRpb25JZCk7XG4gICAgICAvLyB9XG4gICAgfVxuICAgICovXG4gICAgXG4gIH1cblxuICAvKipcbiAgICogUGlja3Mgd2hhdCB0aGUgbGVmdCBzaWRlIHNob3dzLCBpZ25vcmluZyBtb2R1bGVzIHdpdGhvdXQgc2NyZWVuczpcbiAgICogLSBhdCBtb3N0IGBzaG9ydGN1dExpbWl0YCBzY3JlZW5zIGluIHRvdGFsOiBvbmUgc2hvcnRjdXQgcGVyIHNjcmVlbjtcbiAgICogLSBlbHNlIGF0IG1vc3QgYHNob3J0Y3V0TGltaXRgIG1vZHVsZXM6IG9uZSBzZWxlY3QgcGVyIG1vZHVsZSwgbm8gOS1kb3QgbWVudTtcbiAgICogLSBlbHNlLCBvciBpZiBhbiBvcHRpb25zIHJlcXVlc3QgZmFpbHM6IHRoZSBtb2R1bGVzIG1lbnUuXG4gICAqL1xuICBjaGVja1Nob3J0Y3V0cygpe1xuICAgIGNvbnN0IG1vZHVsZXMgPSB0aGlzLm1vZHVsZUxpc3QgfHwgW107XG4gICAgLy8gUGFzdCB0aGUgbGltaXQgb25seSBlbXB0eSBtb2R1bGVzIGNvdWxkIG1ha2UgYSBydWxlIGFwcGx5OyBub3Qgd29ydGggbG9hZGluZ1xuICAgIC8vIGV2ZXJ5IG1vZHVsZSdzIHRyZWUgZm9yIHVzZXJzIHdpdGggbWFueSBtb2R1bGVzLlxuICAgIGlmIChtb2R1bGVzLmxlbmd0aCA9PT0gMCB8fCBtb2R1bGVzLmxlbmd0aCA+IHRoaXMuc2hvcnRjdXRMaW1pdCkge1xuICAgICAgdGhpcy5tZW51TW9kZSA9ICdtb2R1bGVzJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9ya0pvaW48YW55W10+KG1vZHVsZXMubWFwKChtOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4gPT5cbiAgICAgIHRoaXMuc2VydmljZXMubWVudU1vZHVsZVNlbGVjdGVkKHRoaXMuc2VydmljZXNDb25maWcuYmFzZVVybCwgbS5pZCkucGlwZShcbiAgICAgICAgbWFwKChkYXRhOiBhbnkpID0+IGRhdGE/LmxvYWQgPz8gW10pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKVxuICAgICAgKVxuICAgICkpLnN1YnNjcmliZSgodHJlZXM6IGFueVtdKSA9PiB7XG4gICAgICB0aGlzLm1lbnVNb2RlID0gJ21vZHVsZXMnO1xuICAgICAgaWYgKHRyZWVzLmV2ZXJ5KHRyZWUgPT4gdHJlZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgY29uc3Qgd2l0aFNjcmVlbnMgPSBtb2R1bGVzXG4gICAgICAgICAgLm1hcCgobW9kdWxlOiBhbnksIGk6IG51bWJlcikgPT4gKHsgbW9kdWxlLCB0cmVlOiB0cmVlc1tpXSwgbGVhdmVzOiB0aGlzLmNvbGxlY3RMZWF2ZXModHJlZXNbaV0pIH0pKVxuICAgICAgICAgIC5maWx0ZXIoKG06IGFueSkgPT4gbS5sZWF2ZXMubGVuZ3RoID4gMCk7XG4gICAgICAgIGNvbnN0IHNob3J0Y3V0czogSGVhZGVyU2hvcnRjdXRbXSA9IHdpdGhTY3JlZW5zLnJlZHVjZSgoYWxsOiBIZWFkZXJTaG9ydGN1dFtdLCBtOiBhbnkpID0+XG4gICAgICAgICAgYWxsLmNvbmNhdChtLmxlYXZlcy5tYXAoKG9wdGlvbjogYW55KSA9PiAoeyBtb2R1bGU6IG0ubW9kdWxlLCBvcHRpb24gfSkpKSwgW10pO1xuXG4gICAgICAgIGlmIChzaG9ydGN1dHMubGVuZ3RoID4gMCAmJiBzaG9ydGN1dHMubGVuZ3RoIDw9IHRoaXMuc2hvcnRjdXRMaW1pdCkge1xuICAgICAgICAgIHRoaXMuc2hvcnRjdXRzID0gc2hvcnRjdXRzO1xuICAgICAgICAgIHRoaXMubWVudU1vZGUgPSAnc2hvcnRjdXRzJztcbiAgICAgICAgfSBlbHNlIGlmICh3aXRoU2NyZWVucy5sZW5ndGggPiAwICYmIHdpdGhTY3JlZW5zLmxlbmd0aCA8PSB0aGlzLnNob3J0Y3V0TGltaXQpIHtcbiAgICAgICAgICB0aGlzLmlubGluZU1vZHVsZXMgPSB3aXRoU2NyZWVucy5tYXAoKG06IGFueSkgPT4gKHsgbW9kdWxlOiBtLm1vZHVsZSwgZGF0YTogeyBjYXRlZ29yaWVzOiBtLnRyZWUgfSB9KSk7XG4gICAgICAgICAgdGhpcy5pbmxpbmVNb2R1bGVMaXN0ID0gd2l0aFNjcmVlbnMubWFwKChtOiBhbnkpID0+IG0ubW9kdWxlKTtcbiAgICAgICAgICB0aGlzLm1lbnVNb2RlID0gJ2lubGluZU1vZHVsZXMnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogU2NyZWVucyBhIHVzZXIgY2FuIG9wZW46IHRyZWUgbm9kZXMgd2l0aG91dCBjaGlsZHJlbiwgYXMgc2hvd24gYnkgdGhlIG1lbnUuICovXG4gIGNvbGxlY3RMZWF2ZXMobm9kZXM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiAobm9kZXMgfHwgW10pLnJlZHVjZSgobGVhdmVzOiBhbnlbXSwgbm9kZTogYW55KSA9PiB7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGxlYXZlcy5jb25jYXQodGhpcy5jb2xsZWN0TGVhdmVzKG5vZGUuY2hpbGRyZW4pKTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnR5cGVPcHRpb24gIT0gJzInICYmIG5vZGUuYmFzZVVybCkge1xuICAgICAgICBsZWF2ZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWF2ZXM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgb25TaG9ydGN1dENsaWNrKHNob3J0Y3V0OiBIZWFkZXJTaG9ydGN1dCwgZXZlbnQ6IE1vdXNlRXZlbnQpe1xuICAgIGNvbnN0IG9wdGlvbiA9IHNob3J0Y3V0Lm9wdGlvbjtcbiAgICBjb25zdCB1cmxTZW5kID0ge1xuICAgICAgdXJsOiBvcHRpb24uYmFzZVVybCxcbiAgICAgIHVybE1vYmlsZTogb3B0aW9uLnVybE1vYmlsZSxcbiAgICAgIG5ldzogZmFsc2UsXG4gICAgICBpZDogb3B0aW9uLmlkLFxuICAgICAgd2lzZVVybDogb3B0aW9uLndpc2VVcmwgPz8gZmFsc2UsXG4gICAgICBqZm9ybXNVcmw6IG9wdGlvbi5qZm9ybXNVcmwgPz8gZmFsc2VcbiAgICB9O1xuICAgIHRoaXMub25JdGVtQ2xpY2soeyB1cmxTZW5kLCBldmVudCB9KTtcbiAgfVxuXG4gIGN1cnJlbnRNb2R1bGUoZXZlbnQ6IGFueSl7XG4gICAgdGhpcy5jdXJyZW50TW9kdWxlT3B0aW9uID0gdGhpcy5tb2R1bGVMaXN0LmZpbmQoKG06IHsgaWQ6IGFueTsgfSkgPT4gbS5pZCA9PT0gZXZlbnQpID8/IHRoaXMuY3VycmVudE1vZHVsZU9wdGlvbjtcbiAgICAvLyBPbmx5IHRoZSBsYXN0IHNlbGVjdGVkIG1vZHVsZSdzIG9wdGlvbnMgY291bnQsIGV2ZW4gaWYgYW4gZWFybGllciByZXF1ZXN0IGFuc3dlcnMgbGF0ZXIuXG4gICAgdGhpcy5tb2R1bGVPcHRpb25zUmVxdWVzdD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm1lbnVMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm1vZHVsZU9wdGlvbnNSZXF1ZXN0ID0gdGhpcy5zZXJ2aWNlcy5tZW51TW9kdWxlU2VsZWN0ZWQodGhpcy5zZXJ2aWNlc0NvbmZpZy5iYXNlVXJsLGV2ZW50KS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubWVudURhdGEgPSB7IGNhdGVnb3JpZXM6IGRhdGE/LmxvYWQgPz8gW10gfTtcbiAgICAgICAgdGhpcy5tZW51TG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgLy8gRG9uJ3Qga2VlcCBzaG93aW5nIHRoZSBwcmV2aW91cyBtb2R1bGUncyBvcHRpb25zIHVuZGVyIHRoZSBuZXcgbW9kdWxlJ3MgbmFtZS5cbiAgICAgICAgdGhpcy5tZW51RGF0YSA9IHsgY2F0ZWdvcmllczogW10gfTtcbiAgICAgICAgdGhpcy5tZW51TG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuYXZpZ2F0ZVRvT3B0aW9uKG9wdGlvbjphbnkpe1xuICAgIGNvbnN0IHVybE9iaiA9IG9wdGlvbjtcbiAgICBpZiAodXJsT2JqLm5ldyA9PT0gdHJ1ZSkge1xuICAgICAgaWYodGhpcy5pc01vYmlsZSl7XG4gICAgICAgIGNvbnN0IG5ld1dpbmRvdyA9IHdpbmRvdy5vcGVuKHVybE9iai51cmwsICdfYmxhbmsnKTtcbiAgICAgICAgaWYgKG5ld1dpbmRvdykge1xuICAgICAgICAgIG5ld1dpbmRvdy5vcGVuZXIgPSBudWxsOyBcbiAgICAgICAgfVxuICAgICAgfWVsc2UgaWYodXJsT2JqLndpc2VVcmwpe1xuICAgICAgICB0aGlzLmdldEF1dGhDb2RlKHVybE9iai51cmwpO1xuICAgICAgfWVsc2UgaWYodXJsT2JqLmpmb3Jtc1VybCl7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZW5jb2RlQmFzZTY0VXJsKHVybE9iai51cmwpO1xuICAgICAgICB3aW5kb3cub3BlbignL29wZW4tZm9ybT9mb3JtPScrdmFsLCAnX2JsYW5rJyk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgY29uc3QgbmV3V2luZG93ID0gd2luZG93Lm9wZW4odXJsT2JqLnVybCwgJ19ibGFuaycpO1xuICAgICAgICBpZiAobmV3V2luZG93KSB7XG4gICAgICAgICAgbmV3V2luZG93Lm9wZW5lciA9IG51bGw7IFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHRoaXMuaXNNb2JpbGUpe1xuICAgICAgICB3aW5kb3cub3Blbih1cmxPYmoudXJsLCAnX3NlbGYnKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBpZih1cmxPYmoud2lzZVVybCl7XG4gICAgICAgICAgdGhpcy5nZXRBdXRoQ29kZSh1cmxPYmoudXJsKTtcbiAgICAgICAgfWVsc2UgaWYodXJsT2JqLmpmb3Jtc1VybCl7XG4gICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5lbmNvZGVCYXNlNjRVcmwodXJsT2JqLnVybCk7XG4gICAgICAgICAgd2luZG93Lm9wZW4oJy9vcGVuLWZvcm0/Zm9ybT0nK3ZhbCwgJ19zZWxmJyk7XG4gICAgICAgIH1lbHNlIGlmKHRoaXMuaXNFeHRlcm5hbFVybCh1cmxPYmoudXJsKSl7XG4gICAgICAgICAgd2luZG93Lm9wZW4odXJsT2JqLnVybCwgJ19ibGFuaycpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB3aW5kb3cub3Blbih1cmxPYmoudXJsLCAnX3NlbGYnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzRXh0ZXJuYWxVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15odHRwcz86XFwvXFwvLy50ZXN0KHVybCkgJiYgIXVybC5pbmNsdWRlcyh3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgfVxuXG4gIGdldEF1dGhDb2RlKHVybDpzdHJpbmcpe1xuICAgIHRoaXMuc2VydmljZXMuZ2V0QXV0aENvZGUodGhpcy5zZXJ2aWNlc0NvbmZpZy5iYXNlVXJsKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgaWYoZGF0YS5sb2FkKXtcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCdhdXRoY29kZScsIGRhdGEubG9hZCk7XG4gICAgICAgICAgICAgIGNvbnN0IHdpc2VVcmwgPSB1cmwgKyAnJicgKyBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4od2lzZVVybCwgJ19ibGFuaycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIFxuICBlbmNvZGVCYXNlNjRVcmwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KSkpO1xuICAgIHJldHVybiBiYXNlNjQucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvPSskLywgJycpO1xuICB9XG5cbiAgZGVjb2RlQmFzZTY0VXJsKGJhc2U2NHVybDogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgYmFzZTY0ID0gYmFzZTY0dXJsLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7XG4gICAgd2hpbGUgKGJhc2U2NC5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgICBiYXNlNjQgKz0gJz0nO1xuICAgIH1cblxuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGF0b2IoYmFzZTY0KSkpO1xuICB9XG5cbn1cbiIsIjxoZWFkZXIgW2F0dHIuZGF0YS10aGVtZV09XCJ0aGVtZVwiIGNsYXNzPVwiaGVhZGVyLWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLW1lbnUtZGFzaGJvYXJkLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgKm5nSWY9XCJzaG93QmFja0J1dHRvblwiIGNsYXNzPVwiaGVhZGVyLWJ1dHRvblwiIChjbGljayk9XCJhcnJvd0NsaWNrKCRldmVudClcIj5cbiAgICAgIDxpIGNsYXNzPVwibWVudS1hcnJvdy1sZWZ0XCI+PC9pPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGZXcgc2NyZWVuczogb25lIGRpcmVjdCBzaG9ydGN1dCBwZXIgc2NyZWVuIGluc3RlYWQgb2YgdGhlIG1vZHVsZXMgbWVudSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwibWVudU1vZGUgPT09ICdzaG9ydGN1dHMnXCIgY2xhc3M9XCJoZWFkZXItc2hvcnRjdXRzXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImhlYWRlci1zaG9ydGN1dFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBzaG9ydGN1dCBvZiBzaG9ydGN1dHNcIlxuICAgICAgICBbdGl0bGVdPVwic2hvcnRjdXQub3B0aW9uLmxhYmVsXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uU2hvcnRjdXRDbGljayhzaG9ydGN1dCwgJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyLXNob3J0Y3V0LWljb25cIj48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyLXNob3J0Y3V0LWxhYmVsXCI+e3sgc2hvcnRjdXQub3B0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZldyBtb2R1bGVzOiBvbmUgc2VsZWN0IHBlciBtb2R1bGUsIHdpdGhvdXQgdGhlIDktZG90IG1vZHVsZXMgbWVudSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwibWVudU1vZGUgPT09ICdpbmxpbmVNb2R1bGVzJ1wiIGNsYXNzPVwiaGVhZGVyLWlubGluZS1tb2R1bGVzXCI+XG4gICAgICA8bGliLW1lbnVcbiAgICAgICAgKm5nRm9yPVwibGV0IGlubGluZSBvZiBpbmxpbmVNb2R1bGVzXCJcbiAgICAgICAgY2xhc3M9XCJoZWFkZXItbWVudS1saWJcIlxuICAgICAgICBbZGF0YV09XCJpbmxpbmUuZGF0YVwiXG4gICAgICAgIFt0aGVtZV09XCJ0aGVtZVwiXG4gICAgICAgIFtzZWxlY3RlZE9wdGlvbl09XCJpbmxpbmUubW9kdWxlXCJcbiAgICAgICAgW3Nob3dNb2R1bGVzXT1cImZhbHNlXCJcbiAgICAgICAgW2lzTW9iaWxlXT1cImlzTW9iaWxlXCJcbiAgICAgICAgKG1lbnVJdGVtQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9saWItbWVudT5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGhlIG1vZHVsZXMgbWVudTsgd2l0aCBmZXcgbW9kdWxlcywgb25seSBvbiBzbWFsbCBzY3JlZW5zIHdoZXJlIHRoZSBzZWxlY3RzIGRvbid0IGZpdCAtLT5cbiAgICA8bGliLW1lbnUgKm5nSWY9XCJtZW51TW9kZSA9PT0gJ21vZHVsZXMnIHx8IG1lbnVNb2RlID09PSAnaW5saW5lTW9kdWxlcydcIiBjbGFzcz1cImhlYWRlci1tZW51LWxpYlwiXG4gICAgICBbY2xhc3MuaGVhZGVyLW1lbnUtbGliLXNtYWxsLW9ubHldPVwibWVudU1vZGUgPT09ICdpbmxpbmVNb2R1bGVzJ1wiIFtkYXRhXT1cIm1lbnVEYXRhXCIgW3RoZW1lXT1cInRoZW1lXCJcbiAgICAgIFtkcm9wZG93bk9wdGlvbnNdPVwibWVudU1vZGUgPT09ICdpbmxpbmVNb2R1bGVzJyA/IGlubGluZU1vZHVsZUxpc3QgOiBtb2R1bGVMaXN0XCIgW3NlbGVjdGVkT3B0aW9uXT1cImN1cnJlbnRNb2R1bGVPcHRpb25cIiBbbG9hZGluZ109XCJtZW51TG9hZGluZ1wiIChtZW51SXRlbUNsaWNrKT1cIm9uSXRlbUNsaWNrKCRldmVudClcIiAobW9kdWxlU2VsZWN0ZWQpPVwib25JdGVtTW9kdWxlU2VsZWN0ZWQoJGV2ZW50KVwiIFtpc01vYmlsZV09XCJpc01vYmlsZVwiPjwvbGliLW1lbnU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWxvZ29cIj5cbiAgICA8c3BhbiBbY2xhc3NdPVwiYXBwTG9nb1wiPjwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImhlYWRlci1ub3RpZmljYXRpb25zLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZW51LXJlY2VudHMtY29udGFpbmVyXCI+XG4gICAgICA8bGliLXJlY2VudHMtZHJvcGRvd24gW29wdGlvbnNdPVwicmVjZW50T3B0aW9uc1wiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiaGFuZGxlT3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiPjwvbGliLXJlY2VudHMtZHJvcGRvd24+XG4gICAgPC9kaXY+XG4gICAgICA8IS0tXG4gICAgICA8bGliLW5vdGlmaWNhdGlvbnMgW29wdGlvbnNdPVwibm90aWZpY2F0aW9uT3B0aW9uc1wiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiaGFuZGxlT3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiPjwvbGliLW5vdGlmaWNhdGlvbnM+XG4gICAgICAtLT5cblxuXG4gICAgPGxpYi1jb21wYW55LWRyb3Bkb3duIFtjb21wYW5pZXNdPVwiY29tcGFuaWVzXCJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJoYW5kbGVDb21wYW55U2VsZWN0ZWQoJGV2ZW50KVwiPjwvbGliLWNvbXBhbnktZHJvcGRvd24+XG5cbiAgICA8bGliLXVzZXItZHJvcGRvd24gW2Jhc2VVcmxdPVwic2VydmljZXNDb25maWcuYmFzZVVybFwiIFtpc01vYmlsZV09XCJpc01vYmlsZVwiPjwvbGliLXVzZXItZHJvcGRvd24+XG4gIDwvZGl2PlxuPC9oZWFkZXI+XG4iXX0=
523
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzcC1saWIvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzcC1saWIvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSwyQkFBMkIsRUFBRSxxQkFBcUIsRUFBWSxNQUFNLGtDQUFrQyxDQUFDO0FBSTFJLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUE0QixRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBK0I5RCxNQUFNLE9BQU8sZUFBZTtJQXdFMUIsc0ZBQXNGO0lBQ3RGLHlGQUF5RjtJQUN6RixZQUFvQixRQUF5QixFQUFTLE1BQWMsRUFBUyxLQUFxQixFQUFTLEdBQXNCLEVBQVMsUUFBeUI7UUFBL0ksYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFTLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBekUxSixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLFVBQUssR0FBVyxTQUFTLENBQUM7UUFDMUIsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsYUFBUSxHQUFTLEVBQUMsVUFBVSxFQUFFLEVBQUUsRUFBQyxDQUFDO1FBQ2xDLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLGNBQVMsR0FBUSxFQUFF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QkFPRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRyb3Bkb3duQ29tcGFuaWVzT3B0aW9ucywgZHJvcGRvd25Ob3RpZmljYXRpb25PcHRpb25zLCBkcm9wZG93blJlY2VudE9wdGlvbnMsIG1lbnVEYXRhIH0gZnJvbSAnLi4vYXNzZXRzL21lbnUtZGF0YS9tZW51RGF0YVRlc3QnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIERhdGEsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTZXJ2aWNlc0NvbmZpZyB9IGZyb20gJy4uL3V0aWxzL21vZGVscy9TZXJ2aWNlc0NvbmZpZyc7XG5pbXBvcnQgeyBTZWN1cml0eVNlcnZpY2VzIH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZXMvU2VjdXJpdHlTZXJ2aWNlc0RlZmF1bHQnO1xuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNuYWNrYmFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NuYWNrYmFyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWRlclNob3J0Y3V0IHtcbiAgbW9kdWxlOiBhbnk7XG4gIG9wdGlvbjogYW55O1xufVxuXG4vKiogQSBtb2R1bGUgc2hvd24gb24gaXRzIG93biBzZWxlY3QsIHdpdGggaXRzIG9wdGlvbnMgdHJlZSBhbHJlYWR5IGxvYWRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVySW5saW5lTW9kdWxlIHtcbiAgbW9kdWxlOiBhbnk7XG4gIGRhdGE6IHsgY2F0ZWdvcmllczogYW55W10gfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bk9wdGlvbnMge1xuICBpZDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nO1xuICBwYXJlbnRJZDogYW55O1xuICBvcHRpb25zOiBEcm9wZG93bk9wdGlvbkNhdGVyZ29yeVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duT3B0aW9uQ2F0ZXJnb3J5IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItaGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9hc3NldHMvZm9udHMvc3R5bGUuY3NzJywgJy4uL2Fzc2V0cy90aGVtZS5zY3NzJywnLi9oZWFkZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBIZWFkZXJDb21wb25lbnQge1xuICBASW5wdXQoKSBhcHBMb2dvOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgc2hvd0JhY2tCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBtZW51RGF0YTogRGF0YSA9IHtjYXRlZ29yaWVzOiBbXX07XG4gIEBJbnB1dCgpIHJlY2VudE9wdGlvbnMgOmFueSA9IFtdO1xuICBASW5wdXQoKSBjb21wYW5pZXMgOmFueSA9IFtdO1xuICBASW5wdXQoKSBtb2R1bGVMaXN0OiBhbnkgPSBbXTtcbiAgQElucHV0KCkgYXV0bzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXJ2aWNlc0NvbmZpZzogU2VydmljZXNDb25maWcgPSB7XG4gICAgYmFzZVVybDogJycsXG4gICAgaXNEZXY6IGZhbHNlLFxuICAgIHVzZXJuYW1lOiAnJyxcbiAgICBwYXNzd29yZDogJycsXG4gICAgY2hlY2tSb2xlOiBmYWxzZVxuICB9O1xuICBASW5wdXQoKSBpc01vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogVXAgdG8gdGhpcyBtYW55IHNjcmVlbnMgYXJlIHNob3duIGFzIHNob3J0Y3V0czsgb3RoZXJ3aXNlIHVwIHRvIHRoaXMgbWFueVxuICAgKiBtb2R1bGVzIGFyZSBzaG93biBhcyBzZWxlY3RzIHdpdGhvdXQgdGhlIDktZG90IG1vZHVsZXMgbWVudS5cbiAgICovXG4gIEBJbnB1dCgpIHNob3J0Y3V0TGltaXQ6IG51bWJlciA9IDM7XG4gIEBPdXRwdXQoKSByZXR1cm5DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbWVudUl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgbWVudU5hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByZWNlbnROYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAgXG4gIEBPdXRwdXQoKSBtb2R1bGVTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGxhc3RPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgXG4gIGlzQXV0aCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCB1bmRlZmluZWQ7XG4gIGRyb3Bkb3duT3B0aW9ucyA9IGRyb3Bkb3duUmVjZW50T3B0aW9ucztcbiAgbm90aWZpY2F0aW9uT3B0aW9ucyA9IGRyb3Bkb3duTm90aWZpY2F0aW9uT3B0aW9ucztcbiAgY29tcGFuaWVzRHJvcGRvd24gPSBkcm9wZG93bkNvbXBhbmllc09wdGlvbnM7XG4gIGN1cnJlbnRNb2R1bGVPcHRpb246IGFueTtcbiAgc2VsZWN0ZWRPcHRpb246IGFueTtcbiAgLyoqXG4gICAqIFdoYXQgdGhlIGxlZnQgc2lkZSBzaG93czogdGhlIG1vZHVsZXMgbWVudSwgb25lIHNlbGVjdCBwZXIgbW9kdWxlIHdoZW4gdGhlIHVzZXJcbiAgICogaGFzIGZldyBtb2R1bGVzLCBvciBvbmUgc2hvcnRjdXQgcGVyIHNjcmVlbiB3aGVuIHRoZSB1c2VyIGhhcyBmZXcgc2NyZWVucy5cbiAgICogJ2xvYWRpbmcnIGF2b2lkcyBmbGFzaGluZyB0aGUgbWVudSB3aGlsZSB0aGF0IGlzIGJlaW5nIGNoZWNrZWQuXG4gICAqL1xuICBtZW51TW9kZTogJ2xvYWRpbmcnIHwgJ21vZHVsZXMnIHwgJ2lubGluZU1vZHVsZXMnIHwgJ3Nob3J0Y3V0cycgPSAnbW9kdWxlcyc7XG4gIHNob3J0Y3V0czogSGVhZGVyU2hvcnRjdXRbXSA9IFtdO1xuICBpbmxpbmVNb2R1bGVzOiBIZWFkZXJJbmxpbmVNb2R1bGVbXSA9IFtdO1xuICAvKiogTW9kdWxlcyBvZiB0aGUgOS1kb3QgbWVudSB0aGF0IHJlcGxhY2VzIHRoZSBzZWxlY3RzIG9uIHNtYWxsIHNjcmVlbnMuICovXG4gIGlubGluZU1vZHVsZUxpc3Q6IGFueVtdID0gW107XG4gIC8qKiBUcnVlIHdoaWxlIHRoZSBvcHRpb25zIHRyZWUgb2YgdGhlIHNlbGVjdGVkIG1vZHVsZSBpcyBiZWluZyBsb2FkZWQuICovXG4gIG1lbnVMb2FkaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbW9kdWxlT3B0aW9uc1JlcXVlc3Q6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgZHJvcGRvd25PcHRpb25zTWVudTogRHJvcGRvd25PcHRpb25zW10gPSBbIFxuICAgIHtcbiAgICAgIGlkOiAwLFxuICAgICAgbGFiZWw6ICdMb3JlbSBJcHN1bScsXG4gICAgICBwYXJlbnRJZDogbnVsbCxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xvcmVtIElwc3VtJywgaWNvbjogJ2JyYXNpbGlhLWNvbmZpZ3VyYXRpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdMb3JlbSBJcHN1bScsIGljb246ICdicmFzaWxpYS1idXMtZ2F2aW90YScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0xvcmVtIElwc3VtJywgaWNvbjogJ2JyYXNpbGlhLXNhdGVsaXRlJyB9LFxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDAsXG4gICAgICBsYWJlbDogJ0xvcmVtIElwc3VtJyxcbiAgICAgIHBhcmVudElkOiBudWxsLFxuICAgICAgb3B0aW9uczogW1xuICAgICAgICB7IGxhYmVsOiAnTG9yZW0gSXBzdW0nLCBpY29uOiAnYnJhc2lsaWEtdmlkZW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdMb3JlbSBJcHN1bScsIGljb246ICdicmFzaWxpYS1ydXRlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnTG9yZW0gSXBzdW0nLCBpY29uOiAnYnJhc2lsaWEtY2FsZW5kYXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICdMb3JlbSBJcHN1bScsIGljb246ICdicmFzaWxpYS1kYXNoYm9hcmQnIH0sICBcbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgLy8gRXZlcnkgYXN5bmMgY2FsbGJhY2sgdGhhdCBjaGFuZ2VzIHRoZSB2aWV3IGNhbGxzIGBjZHIubWFya0ZvckNoZWNrKClgOiBhcHBzIHdpdGhvdXRcbiAgLy8gem9uZS5qcyAoQW5ndWxhciAyMSB6b25lbGVzcykgb25seSByZS1yZW5kZXIgb24gdGVtcGxhdGUgZXZlbnRzLCBzaWduYWxzIG9yIHRoYXQgY2FsbC5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlczpTZWN1cml0eVNlcnZpY2VzLHByaXZhdGUgcm91dGVyOiBSb3V0ZXIscHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUscHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLHByaXZhdGUgc25hY2tiYXI6IFNuYWNrYmFyU2VydmljZSl7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBcbiAgICBpZih0aGlzLmF1dG8pe1xuICAgICAgdGhpcy5tZW51TW9kZSA9ICdsb2FkaW5nJztcbiAgICAgIHRoaXMuaXNBdXRoJCA9IHRoaXMuaXNBdXRoKCk7XG4gICAgICB0aGlzLmlzQXV0aCQuc3Vic2NyaWJlKGlzQXV0aGVudGljYXRlZCA9PiB7XG4gICAgICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICBpZih0aGlzLnNlcnZpY2VzQ29uZmlnLmlzRGV2KXtcbiAgICAgICAgICAgIGlmKHRoaXMuc2VydmljZXNDb25maWcuY2hlY2tSb2xlID09IHRydWUpe1xuICAgICAgICAgICAgICB0aGlzLmNoZWNrUmVzb3VyY2UoKTtcbiAgICAgICAgICAgICAgaWYoIXRoaXMuaXNNb2JpbGUpe1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tSZXNvdXJjZUJ5Um9sZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgdGhpcy5nZXRIaXN0b3J5KCk7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0Q29tcGFuaWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUmVzb3VyY2UoKTtcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzTW9iaWxlKXtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja1Jlc291cmNlQnlSb2xlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgICAgICAgICB3aW5kb3cub3BlbignLycsICdfc2VsZicpO1xuICAgICAgICB9XG4gICAgICB9KTsgICAgICBcbiAgICB9XG4gIH1cblxuICBpc0F1dGgoKXtcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlcy5pc0F1dGhlbnRpY2F0ZWQodGhpcy5zZXJ2aWNlc0NvbmZpZy5iYXNlVXJsKS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICBpZih0aGlzLnNlcnZpY2VzQ29uZmlnLmlzRGV2KXtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kb0xvZ2luKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkb0xvZ2luKCl7XG4gICAgcmV0dXJuIHRoaXMuc2VydmljZXMubG9naW4odGhpcy5zZXJ2aWNlc0NvbmZpZy5iYXNlVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc0NvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXNDb25maWcucGFzc3dvcmQpLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlOmFueSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UuY29kZSA9PSAyMDApe1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgeyAgICAgICBcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7ICAgICAgICBcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZU9wdGlvblNlbGVjdGVkKG9wdGlvbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbjtcbiAgICB0aGlzLm5hdmlnYXRlVG9PcHRpb24ob3B0aW9uKTsgXG4gIH1cblxuICBoYW5kbGVDb21wYW55U2VsZWN0ZWQoYWdlbmN5OmFueSkge1xuICAgIHRoaXMuc2VydmljZXMuc2V0RGVmYXVsdEFnZW5jeSh0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwsYWdlbmN5LmlkKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmKGRhdGEucmVzcG9uc2VDb2RlID09IDIwMCl7XG4gICAgICAgICAgdGhpcy5zbmFja2Jhci5zdWNjZXNzKCdDYW1iaW8gZGUgQWdlbmNpYSByZWFsaXphZG8gY29uIMOpeGl0bycpO1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgb25JdGVtQ2xpY2sodXJsOiBhbnkpIHtcbiAgICBpZighdGhpcy5hdXRvKXtcbiAgICAgIHRoaXMubWVudU5hdmlnYXRlLmVtaXQodXJsKTtcbiAgICB9ZWxzZXtcbiAgICAgIGNvbnN0IHVybE9iaiA9IHVybC51cmxTZW5kO1xuICAgICAgY29uc3QgZXZlbnQgPSB1cmwuZXZlbnQ7XG4gICAgXG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgXG4gICAgICBpZih1cmxPYmoudXJsKXtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5zYXZlSGlzdG9yeSh0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwse29wdGlvbklkOiB1cmxPYmouaWR9KS5zdWJzY3JpYmUoXG4gICAgICAgICAgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvT3B0aW9uKHVybE9iaik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLypcbiAgICAgIHRoaXMuaW5ib3hTZXJ2aWNlLnNhdmVIaXN0b3J5KHtvcHRpb25JZDogdXJsT2JqLmlkfSkuc3Vic2NyaWJlKFxuICAgICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHsgICAgICBcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgICovXG4gICAgfSAgXG4gIH1cblxuICBhcnJvd0NsaWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmKCF0aGlzLmF1dG8pe1xuICAgICAgdGhpcy5yZXR1cm5DbGljay5lbWl0KCRldmVudCk7XG4gICAgfSAgICBcbiAgfVxuXG4gIG9uSXRlbU1vZHVsZVNlbGVjdGVkKGV2ZW50OiBhbnkpe1xuICAgIGlmKCF0aGlzLmF1dG8pe1xuICAgICAgdGhpcy5tb2R1bGVTZWxlY3QuZW1pdChldmVudC5pZCk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmN1cnJlbnRNb2R1bGUoZXZlbnQuaWQpO1xuICAgIH1cbiAgICBcbiAgfVxuXG4gIGdldENvbXBhbmllcygpe1xuICAgIHRoaXMuc2VydmljZXMuZ2V0Q29tcGFuaWVzSW5mbyh0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwpLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBpZihkYXRhLmxvYWQpe1xuICAgICAgICAgICAgICBjb25zdCBjYWMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ0FDJyk7XG4gICAgICAgICAgICAgIGNvbnN0IGNjYyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDQ0MnKTtcbiAgICAgICAgICAgICAgaWYoY2FjICYmIGNjYyl7XG4gICAgICAgICAgICAgICAgZGF0YS5sb2FkLmZvckVhY2goKGM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgYy5hZ2VuY2llcy5mb3JFYWNoKChhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoYS5hZ2VuY3lDb2RlID09IGNhYyAmJiBjLmNvbXBhbnlDb2RlID09IGNjYyl7XG4gICAgICAgICAgICAgICAgICAgICAgYy5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIHRoaXMuY29tcGFuaWVzID0gZGF0YS5sb2FkO1xuICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0SGlzdG9yeSgpe1xuICAgIHRoaXMuc2VydmljZXMuZ2V0SGlzdG9yeSh0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwpLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBpZihkYXRhLmxvYWQpe1xuICAgICAgICAgICAgdGhpcy5yZWNlbnRPcHRpb25zID0gZGF0YS5sb2FkO1xuICAgICAgICAgICAgaWYodGhpcy5yZWNlbnRPcHRpb25zLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImxhc3Qgb3B0aW9uIGVtaXRcIik7XG4gICAgICAgICAgICAgIHRoaXMubGFzdE9wdGlvbi5lbWl0KHRoaXMucmVjZW50T3B0aW9uc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmdldE1vZHVsZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1lbnVNb2RlID0gJ21vZHVsZXMnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgdGhpcy5tZW51TW9kZSA9ICdtb2R1bGVzJztcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNoZWNrUmVzb3VyY2UoKXtcbiAgICB0aGlzLnNlcnZpY2VzLmdldFJlc291cmNlc0J5VXNlcih0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwpLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBpZihkYXRhLmxvYWQpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5sb2FkKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0SGlzdG9yeSgpO1xuICAgICAgICAgICAgdGhpcy5nZXRDb21wYW5pZXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZW51TW9kZSA9ICdtb2R1bGVzJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZW51TW9kZSA9ICdtb2R1bGVzJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHRoaXMubWVudU1vZGUgPSAnbW9kdWxlcyc7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjaGVja1Jlc291cmNlQnlSb2xlKCl7XG4gICAgbGV0IHBhdGggPSB0aGlzLmdldFBhdGgoKTtcbiAgICBpZihwYXRoICE9ICcvaG9tZScpe1xuICAgICAgaWYgKHBhdGggPT0gJy9vcGVuLWZvcm0nKXtcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ2Zvcm0nKTtcbiAgICAgICAgY29uc3QgdXJsRGVjb2RlID0gdGhpcy5kZWNvZGVCYXNlNjRVcmwoZm9ybSk7XG4gICAgICAgIHBhdGggPSB1cmxEZWNvZGU7XG4gICAgICB9XG4gICAgICB0aGlzLnNlcnZpY2VzLmdldFJlc291cmNlc0J5Um9sZVVzZXIodGhpcy5zZXJ2aWNlc0NvbmZpZy5iYXNlVXJsLHBhdGgpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBpZihkYXRhLmxvYWQgPT0gZmFsc2Upe1xuICAgICAgICAgICAgICB3aW5kb3cub3BlbignL2hvbWUnLCAnX3NlbGYnKTtcbiAgICAgICAgICAgIH0gICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgXG4gIH1cblxuICBnZXRQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xuICB9XG5cbiAgZ2V0TW9kdWxlcygpe1xuICAgIHRoaXMuc2VydmljZXMuZ2V0TW9kdWxlc0J5VXNlcih0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwpLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEubG9hZCkge1xuICAgICAgICAgIHRoaXMubW9kdWxlTGlzdCA9IGRhdGEubG9hZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrU2hvcnRjdXRzKCk7XG4gICAgICAgIGlmICh0aGlzLnJlY2VudE9wdGlvbnMgJiYgdGhpcy5yZWNlbnRPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRNb2R1bGVPcHRpb24gPSB0aGlzLm1vZHVsZUxpc3QuZmluZCgobTogeyBpZDogYW55OyB9KSA9PiBtLmlkID09PSB0aGlzLnJlY2VudE9wdGlvbnNbMF0uYXBwbGljYXRpb25JZCk7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIGlmKHRoaXMucmVjZW50T3B0aW9uc1swXS5hcHBsaWNhdGlvbklkKXtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1vZHVsZSh0aGlzLnJlY2VudE9wdGlvbnNbMF0uYXBwbGljYXRpb25JZCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1vZHVsZSh0aGlzLm1vZHVsZUxpc3RbMF0uaWQpXG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vZHVsZSh0aGlzLm1vZHVsZUxpc3RbMF0uaWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm1lbnVNb2RlID0gJ21vZHVsZXMnO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICApO1xuICAgIC8qXG4gICAgaWYgKHRoaXMucmVjZW50RGF0YSkge1xuICAgICAgdGhpcy5tb2R1bGVTZWxlY3QodGhpcy5yZWNlbnREYXRhWzBdLmFwcGxpY2F0aW9uSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyggdGhpcy5kcm9wZG93bk9wdGlvbnNNZW51KVxuICAgICAgLy8gY29uc3QgZmlyc3RPcHRpb25JZCA9IHRoaXMuZHJvcGRvd25PcHRpb25zTWVudT8uWzBdPy5pZDtcbiAgICAgIC8vIGlmIChmaXJzdE9wdGlvbklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vICAgdGhpcy5tb2R1bGVTZWxlY3QoZmlyc3RPcHRpb25JZCk7XG4gICAgICAvLyB9XG4gICAgfVxuICAgICovXG4gICAgXG4gIH1cblxuICAvKipcbiAgICogUGlja3Mgd2hhdCB0aGUgbGVmdCBzaWRlIHNob3dzLCBpZ25vcmluZyBtb2R1bGVzIHdpdGhvdXQgc2NyZWVuczpcbiAgICogLSBhdCBtb3N0IGBzaG9ydGN1dExpbWl0YCBzY3JlZW5zIGluIHRvdGFsOiBvbmUgc2hvcnRjdXQgcGVyIHNjcmVlbjtcbiAgICogLSBlbHNlIGF0IG1vc3QgYHNob3J0Y3V0TGltaXRgIG1vZHVsZXM6IG9uZSBzZWxlY3QgcGVyIG1vZHVsZSwgbm8gOS1kb3QgbWVudTtcbiAgICogLSBlbHNlLCBvciBpZiBhbiBvcHRpb25zIHJlcXVlc3QgZmFpbHM6IHRoZSBtb2R1bGVzIG1lbnUuXG4gICAqL1xuICBjaGVja1Nob3J0Y3V0cygpe1xuICAgIGNvbnN0IG1vZHVsZXMgPSB0aGlzLm1vZHVsZUxpc3QgfHwgW107XG4gICAgLy8gUGFzdCB0aGUgbGltaXQgb25seSBlbXB0eSBtb2R1bGVzIGNvdWxkIG1ha2UgYSBydWxlIGFwcGx5OyBub3Qgd29ydGggbG9hZGluZ1xuICAgIC8vIGV2ZXJ5IG1vZHVsZSdzIHRyZWUgZm9yIHVzZXJzIHdpdGggbWFueSBtb2R1bGVzLlxuICAgIGlmIChtb2R1bGVzLmxlbmd0aCA9PT0gMCB8fCBtb2R1bGVzLmxlbmd0aCA+IHRoaXMuc2hvcnRjdXRMaW1pdCkge1xuICAgICAgdGhpcy5tZW51TW9kZSA9ICdtb2R1bGVzJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9ya0pvaW48YW55W10+KG1vZHVsZXMubWFwKChtOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4gPT5cbiAgICAgIHRoaXMuc2VydmljZXMubWVudU1vZHVsZVNlbGVjdGVkKHRoaXMuc2VydmljZXNDb25maWcuYmFzZVVybCwgbS5pZCkucGlwZShcbiAgICAgICAgbWFwKChkYXRhOiBhbnkpID0+IGRhdGE/LmxvYWQgPz8gW10pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKVxuICAgICAgKVxuICAgICkpLnN1YnNjcmliZSgodHJlZXM6IGFueVtdKSA9PiB7XG4gICAgICB0aGlzLm1lbnVNb2RlID0gJ21vZHVsZXMnO1xuICAgICAgaWYgKHRyZWVzLmV2ZXJ5KHRyZWUgPT4gdHJlZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgY29uc3Qgd2l0aFNjcmVlbnMgPSBtb2R1bGVzXG4gICAgICAgICAgLm1hcCgobW9kdWxlOiBhbnksIGk6IG51bWJlcikgPT4gKHsgbW9kdWxlLCB0cmVlOiB0cmVlc1tpXSwgbGVhdmVzOiB0aGlzLmNvbGxlY3RMZWF2ZXModHJlZXNbaV0pIH0pKVxuICAgICAgICAgIC5maWx0ZXIoKG06IGFueSkgPT4gbS5sZWF2ZXMubGVuZ3RoID4gMCk7XG4gICAgICAgIGNvbnN0IHNob3J0Y3V0czogSGVhZGVyU2hvcnRjdXRbXSA9IHdpdGhTY3JlZW5zLnJlZHVjZSgoYWxsOiBIZWFkZXJTaG9ydGN1dFtdLCBtOiBhbnkpID0+XG4gICAgICAgICAgYWxsLmNvbmNhdChtLmxlYXZlcy5tYXAoKG9wdGlvbjogYW55KSA9PiAoeyBtb2R1bGU6IG0ubW9kdWxlLCBvcHRpb24gfSkpKSwgW10pO1xuXG4gICAgICAgIGlmIChzaG9ydGN1dHMubGVuZ3RoID4gMCAmJiBzaG9ydGN1dHMubGVuZ3RoIDw9IHRoaXMuc2hvcnRjdXRMaW1pdCkge1xuICAgICAgICAgIHRoaXMuc2hvcnRjdXRzID0gc2hvcnRjdXRzO1xuICAgICAgICAgIHRoaXMubWVudU1vZGUgPSAnc2hvcnRjdXRzJztcbiAgICAgICAgfSBlbHNlIGlmICh3aXRoU2NyZWVucy5sZW5ndGggPiAwICYmIHdpdGhTY3JlZW5zLmxlbmd0aCA8PSB0aGlzLnNob3J0Y3V0TGltaXQpIHtcbiAgICAgICAgICB0aGlzLmlubGluZU1vZHVsZXMgPSB3aXRoU2NyZWVucy5tYXAoKG06IGFueSkgPT4gKHsgbW9kdWxlOiBtLm1vZHVsZSwgZGF0YTogeyBjYXRlZ29yaWVzOiBtLnRyZWUgfSB9KSk7XG4gICAgICAgICAgdGhpcy5pbmxpbmVNb2R1bGVMaXN0ID0gd2l0aFNjcmVlbnMubWFwKChtOiBhbnkpID0+IG0ubW9kdWxlKTtcbiAgICAgICAgICB0aGlzLm1lbnVNb2RlID0gJ2lubGluZU1vZHVsZXMnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogU2NyZWVucyBhIHVzZXIgY2FuIG9wZW46IHRyZWUgbm9kZXMgd2l0aG91dCBjaGlsZHJlbiwgYXMgc2hvd24gYnkgdGhlIG1lbnUuICovXG4gIGNvbGxlY3RMZWF2ZXMobm9kZXM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiAobm9kZXMgfHwgW10pLnJlZHVjZSgobGVhdmVzOiBhbnlbXSwgbm9kZTogYW55KSA9PiB7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGxlYXZlcy5jb25jYXQodGhpcy5jb2xsZWN0TGVhdmVzKG5vZGUuY2hpbGRyZW4pKTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnR5cGVPcHRpb24gIT0gJzInICYmIG5vZGUuYmFzZVVybCkge1xuICAgICAgICBsZWF2ZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWF2ZXM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgb25TaG9ydGN1dENsaWNrKHNob3J0Y3V0OiBIZWFkZXJTaG9ydGN1dCwgZXZlbnQ6IE1vdXNlRXZlbnQpe1xuICAgIGNvbnN0IG9wdGlvbiA9IHNob3J0Y3V0Lm9wdGlvbjtcbiAgICBjb25zdCB1cmxTZW5kID0ge1xuICAgICAgdXJsOiBvcHRpb24uYmFzZVVybCxcbiAgICAgIHVybE1vYmlsZTogb3B0aW9uLnVybE1vYmlsZSxcbiAgICAgIG5ldzogZmFsc2UsXG4gICAgICBpZDogb3B0aW9uLmlkLFxuICAgICAgd2lzZVVybDogb3B0aW9uLndpc2VVcmwgPz8gZmFsc2UsXG4gICAgICBqZm9ybXNVcmw6IG9wdGlvbi5qZm9ybXNVcmwgPz8gZmFsc2VcbiAgICB9O1xuICAgIHRoaXMub25JdGVtQ2xpY2soeyB1cmxTZW5kLCBldmVudCB9KTtcbiAgfVxuXG4gIGN1cnJlbnRNb2R1bGUoZXZlbnQ6IGFueSl7XG4gICAgdGhpcy5jdXJyZW50TW9kdWxlT3B0aW9uID0gdGhpcy5tb2R1bGVMaXN0LmZpbmQoKG06IHsgaWQ6IGFueTsgfSkgPT4gbS5pZCA9PT0gZXZlbnQpID8/IHRoaXMuY3VycmVudE1vZHVsZU9wdGlvbjtcbiAgICAvLyBPbmx5IHRoZSBsYXN0IHNlbGVjdGVkIG1vZHVsZSdzIG9wdGlvbnMgY291bnQsIGV2ZW4gaWYgYW4gZWFybGllciByZXF1ZXN0IGFuc3dlcnMgbGF0ZXIuXG4gICAgdGhpcy5tb2R1bGVPcHRpb25zUmVxdWVzdD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm1lbnVMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm1vZHVsZU9wdGlvbnNSZXF1ZXN0ID0gdGhpcy5zZXJ2aWNlcy5tZW51TW9kdWxlU2VsZWN0ZWQodGhpcy5zZXJ2aWNlc0NvbmZpZy5iYXNlVXJsLGV2ZW50KS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubWVudURhdGEgPSB7IGNhdGVnb3JpZXM6IGRhdGE/LmxvYWQgPz8gW10gfTtcbiAgICAgICAgdGhpcy5tZW51TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIC8vIERvbid0IGtlZXAgc2hvd2luZyB0aGUgcHJldmlvdXMgbW9kdWxlJ3Mgb3B0aW9ucyB1bmRlciB0aGUgbmV3IG1vZHVsZSdzIG5hbWUuXG4gICAgICAgIHRoaXMubWVudURhdGEgPSB7IGNhdGVnb3JpZXM6IFtdIH07XG4gICAgICAgIHRoaXMubWVudUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9PcHRpb24ob3B0aW9uOmFueSl7XG4gICAgY29uc3QgdXJsT2JqID0gb3B0aW9uO1xuICAgIGlmICh1cmxPYmoubmV3ID09PSB0cnVlKSB7XG4gICAgICBpZih0aGlzLmlzTW9iaWxlKXtcbiAgICAgICAgY29uc3QgbmV3V2luZG93ID0gd2luZG93Lm9wZW4odXJsT2JqLnVybCwgJ19ibGFuaycpO1xuICAgICAgICBpZiAobmV3V2luZG93KSB7XG4gICAgICAgICAgbmV3V2luZG93Lm9wZW5lciA9IG51bGw7IFxuICAgICAgICB9XG4gICAgICB9ZWxzZSBpZih1cmxPYmoud2lzZVVybCl7XG4gICAgICAgIHRoaXMuZ2V0QXV0aENvZGUodXJsT2JqLnVybCk7XG4gICAgICB9ZWxzZSBpZih1cmxPYmouamZvcm1zVXJsKXtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5lbmNvZGVCYXNlNjRVcmwodXJsT2JqLnVybCk7XG4gICAgICAgIHdpbmRvdy5vcGVuKCcvb3Blbi1mb3JtP2Zvcm09Jyt2YWwsICdfYmxhbmsnKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBjb25zdCBuZXdXaW5kb3cgPSB3aW5kb3cub3Blbih1cmxPYmoudXJsLCAnX2JsYW5rJyk7XG4gICAgICAgIGlmIChuZXdXaW5kb3cpIHtcbiAgICAgICAgICBuZXdXaW5kb3cub3BlbmVyID0gbnVsbDsgXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYodGhpcy5pc01vYmlsZSl7XG4gICAgICAgIHdpbmRvdy5vcGVuKHVybE9iai51cmwsICdfc2VsZicpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGlmKHVybE9iai53aXNlVXJsKXtcbiAgICAgICAgICB0aGlzLmdldEF1dGhDb2RlKHVybE9iai51cmwpO1xuICAgICAgICB9ZWxzZSBpZih1cmxPYmouamZvcm1zVXJsKXtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmVuY29kZUJhc2U2NFVybCh1cmxPYmoudXJsKTtcbiAgICAgICAgICB3aW5kb3cub3BlbignL29wZW4tZm9ybT9mb3JtPScrdmFsLCAnX3NlbGYnKTtcbiAgICAgICAgfWVsc2UgaWYodGhpcy5pc0V4dGVybmFsVXJsKHVybE9iai51cmwpKXtcbiAgICAgICAgICB3aW5kb3cub3Blbih1cmxPYmoudXJsLCAnX2JsYW5rJyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHdpbmRvdy5vcGVuKHVybE9iai51cmwsICdfc2VsZicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNFeHRlcm5hbFVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJsKSAmJiAhdXJsLmluY2x1ZGVzKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICB9XG5cbiAgZ2V0QXV0aENvZGUodXJsOnN0cmluZyl7XG4gICAgdGhpcy5zZXJ2aWNlcy5nZXRBdXRoQ29kZSh0aGlzLnNlcnZpY2VzQ29uZmlnLmJhc2VVcmwpLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBpZihkYXRhLmxvYWQpe1xuICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoJ2F1dGhjb2RlJywgZGF0YS5sb2FkKTtcbiAgICAgICAgICAgICAgY29uc3Qgd2lzZVVybCA9IHVybCArICcmJyArIHBhcmFtcy50b1N0cmluZygpO1xuICAgICAgICAgICAgICB3aW5kb3cub3Blbih3aXNlVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgXG4gIGVuY29kZUJhc2U2NFVybCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpKSk7XG4gICAgcmV0dXJuIGJhc2U2NC5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKS5yZXBsYWNlKC89KyQvLCAnJyk7XG4gIH1cblxuICBkZWNvZGVCYXNlNjRVcmwoYmFzZTY0dXJsOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBiYXNlNjQgPSBiYXNlNjR1cmwucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICB3aGlsZSAoYmFzZTY0Lmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICAgIGJhc2U2NCArPSAnPSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoYXRvYihiYXNlNjQpKSk7XG4gIH1cblxufVxuIiwiPGhlYWRlciBbYXR0ci5kYXRhLXRoZW1lXT1cInRoZW1lXCIgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItbWVudS1kYXNoYm9hcmQtY29udGFpbmVyXCI+XG4gICAgPGRpdiAqbmdJZj1cInNob3dCYWNrQnV0dG9uXCIgY2xhc3M9XCJoZWFkZXItYnV0dG9uXCIgKGNsaWNrKT1cImFycm93Q2xpY2soJGV2ZW50KVwiPlxuICAgICAgPGkgY2xhc3M9XCJtZW51LWFycm93LWxlZnRcIj48L2k+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZldyBzY3JlZW5zOiBvbmUgZGlyZWN0IHNob3J0Y3V0IHBlciBzY3JlZW4gaW5zdGVhZCBvZiB0aGUgbW9kdWxlcyBtZW51IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJtZW51TW9kZSA9PT0gJ3Nob3J0Y3V0cydcIiBjbGFzcz1cImhlYWRlci1zaG9ydGN1dHNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiaGVhZGVyLXNob3J0Y3V0XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHNob3J0Y3V0IG9mIHNob3J0Y3V0c1wiXG4gICAgICAgIFt0aXRsZV09XCJzaG9ydGN1dC5vcHRpb24ubGFiZWxcIlxuICAgICAgICAoY2xpY2spPVwib25TaG9ydGN1dENsaWNrKHNob3J0Y3V0LCAkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2hvcnRjdXQtaWNvblwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2hvcnRjdXQtbGFiZWxcIj57eyBzaG9ydGN1dC5vcHRpb24ubGFiZWwgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRmV3IG1vZHVsZXM6IG9uZSBzZWxlY3QgcGVyIG1vZHVsZSwgd2l0aG91dCB0aGUgOS1kb3QgbW9kdWxlcyBtZW51IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJtZW51TW9kZSA9PT0gJ2lubGluZU1vZHVsZXMnXCIgY2xhc3M9XCJoZWFkZXItaW5saW5lLW1vZHVsZXNcIj5cbiAgICAgIDxsaWItbWVudVxuICAgICAgICAqbmdGb3I9XCJsZXQgaW5saW5lIG9mIGlubGluZU1vZHVsZXNcIlxuICAgICAgICBjbGFzcz1cImhlYWRlci1tZW51LWxpYlwiXG4gICAgICAgIFtkYXRhXT1cImlubGluZS5kYXRhXCJcbiAgICAgICAgW3RoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgW3NlbGVjdGVkT3B0aW9uXT1cImlubGluZS5tb2R1bGVcIlxuICAgICAgICBbc2hvd01vZHVsZXNdPVwiZmFsc2VcIlxuICAgICAgICBbaXNNb2JpbGVdPVwiaXNNb2JpbGVcIlxuICAgICAgICAobWVudUl0ZW1DbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQpXCJcbiAgICAgID48L2xpYi1tZW51PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaGUgbW9kdWxlcyBtZW51OyB3aXRoIGZldyBtb2R1bGVzLCBvbmx5IG9uIHNtYWxsIHNjcmVlbnMgd2hlcmUgdGhlIHNlbGVjdHMgZG9uJ3QgZml0IC0tPlxuICAgIDxsaWItbWVudSAqbmdJZj1cIm1lbnVNb2RlID09PSAnbW9kdWxlcycgfHwgbWVudU1vZGUgPT09ICdpbmxpbmVNb2R1bGVzJ1wiIGNsYXNzPVwiaGVhZGVyLW1lbnUtbGliXCJcbiAgICAgIFtjbGFzcy5oZWFkZXItbWVudS1saWItc21hbGwtb25seV09XCJtZW51TW9kZSA9PT0gJ2lubGluZU1vZHVsZXMnXCIgW2RhdGFdPVwibWVudURhdGFcIiBbdGhlbWVdPVwidGhlbWVcIlxuICAgICAgW2Ryb3Bkb3duT3B0aW9uc109XCJtZW51TW9kZSA9PT0gJ2lubGluZU1vZHVsZXMnID8gaW5saW5lTW9kdWxlTGlzdCA6IG1vZHVsZUxpc3RcIiBbc2VsZWN0ZWRPcHRpb25dPVwiY3VycmVudE1vZHVsZU9wdGlvblwiIFtsb2FkaW5nXT1cIm1lbnVMb2FkaW5nXCIgKG1lbnVJdGVtQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50KVwiIChtb2R1bGVTZWxlY3RlZCk9XCJvbkl0ZW1Nb2R1bGVTZWxlY3RlZCgkZXZlbnQpXCIgW2lzTW9iaWxlXT1cImlzTW9iaWxlXCI+PC9saWItbWVudT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItbG9nb1wiPlxuICAgIDxzcGFuIFtjbGFzc109XCJhcHBMb2dvXCI+PC9zcGFuPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLW5vdGlmaWNhdGlvbnMtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lbnUtcmVjZW50cy1jb250YWluZXJcIj5cbiAgICAgIDxsaWItcmVjZW50cy1kcm9wZG93biBbb3B0aW9uc109XCJyZWNlbnRPcHRpb25zXCJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJoYW5kbGVPcHRpb25TZWxlY3RlZCgkZXZlbnQpXCI+PC9saWItcmVjZW50cy1kcm9wZG93bj5cbiAgICA8L2Rpdj5cbiAgICAgIDwhLS1cbiAgICAgIDxsaWItbm90aWZpY2F0aW9ucyBbb3B0aW9uc109XCJub3RpZmljYXRpb25PcHRpb25zXCJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJoYW5kbGVPcHRpb25TZWxlY3RlZCgkZXZlbnQpXCI+PC9saWItbm90aWZpY2F0aW9ucz5cbiAgICAgIC0tPlxuXG5cbiAgICA8bGliLWNvbXBhbnktZHJvcGRvd24gW2NvbXBhbmllc109XCJjb21wYW5pZXNcIlxuICAgICAgKG9wdGlvblNlbGVjdGVkKT1cImhhbmRsZUNvbXBhbnlTZWxlY3RlZCgkZXZlbnQpXCI+PC9saWItY29tcGFueS1kcm9wZG93bj5cblxuICAgIDxsaWItdXNlci1kcm9wZG93biBbYmFzZVVybF09XCJzZXJ2aWNlc0NvbmZpZy5iYXNlVXJsXCIgW2lzTW9iaWxlXT1cImlzTW9iaWxlXCI+PC9saWItdXNlci1kcm9wZG93bj5cbiAgPC9kaXY+XG48L2hlYWRlcj5cbiJdfQ==