@sumaris-net/ngx-components 18.6.11 → 18.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/doc/changelog.md +3 -0
  2. package/esm2022/public_api.mjs +1 -2
  3. package/esm2022/src/app/admin/services/validator/person.validator.mjs +1 -1
  4. package/esm2022/src/app/core/account/account.page.mjs +18 -20
  5. package/esm2022/src/app/core/form/properties/properties.table.mjs +28 -32
  6. package/esm2022/src/app/core/form/properties/properties.utils.mjs +14 -1
  7. package/esm2022/src/app/core/home/home.mjs +1 -3
  8. package/esm2022/src/app/core/services/account.service.mjs +22 -7
  9. package/esm2022/src/app/core/services/local-settings.service.mjs +9 -2
  10. package/esm2022/src/app/core/services/model/account.model.mjs +32 -13
  11. package/esm2022/src/app/core/services/model/entity.model.mjs +1 -1
  12. package/esm2022/src/app/core/services/platform.service.mjs +4 -3
  13. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +3 -3
  14. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +1 -1
  15. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +1 -1
  16. package/esm2022/src/app/shared/markdown/markdown.component.mjs +81 -55
  17. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +10 -17
  18. package/esm2022/src/app/shared/markdown/markdown.service.mjs +3 -4
  19. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +1 -8
  20. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +7 -16
  21. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +1 -1
  22. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  23. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +3 -3
  24. package/esm2022/src/app/social/user-event/user-event.model.mjs +1 -1
  25. package/fesm2022/sumaris-net.ngx-components.mjs +214 -408
  26. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  27. package/package.json +1 -1
  28. package/public_api.d.ts +0 -1
  29. package/src/app/admin/services/validator/person.validator.d.ts +1 -1
  30. package/src/app/core/account/account.page.d.ts +2 -0
  31. package/src/app/core/form/properties/properties.table.d.ts +4 -10
  32. package/src/app/core/form/properties/properties.utils.d.ts +4 -0
  33. package/src/app/core/services/account.service.d.ts +2 -0
  34. package/src/app/core/services/local-settings.service.d.ts +1 -0
  35. package/src/app/core/services/model/account.model.d.ts +17 -2
  36. package/src/app/core/services/model/entity.model.d.ts +2 -2
  37. package/src/app/core/services/validator/base.validator.class.d.ts +5 -5
  38. package/src/app/core/table/entities-async-table-datasource.class.d.ts +2 -2
  39. package/src/app/core/table/entities-table-datasource.class.d.ts +2 -2
  40. package/src/app/shared/inputs.d.ts +1 -1
  41. package/src/app/shared/markdown/markdown.component.d.ts +7 -12
  42. package/src/app/shared/markdown/markdown.modal.d.ts +2 -9
  43. package/src/app/shared/markdown/markdown.utils.d.ts +0 -1
  44. package/src/app/shared/markdown/testing/markdown.test.d.ts +1 -4
  45. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +3 -1
  46. package/src/app/shared/named-filter/named-filter.model.d.ts +2 -2
  47. package/src/app/social/user-event/user-event.model.d.ts +2 -2
  48. package/src/assets/i18n/en-US.json +2 -3
  49. package/src/assets/i18n/en.json +1 -2
  50. package/src/assets/i18n/fr.json +1 -2
  51. package/src/assets/manifest.json +1 -1
  52. package/esm2022/src/app/shared/print/print.service.mjs +0 -254
  53. package/src/app/shared/print/print.service.d.ts +0 -60
@@ -332,8 +332,6 @@ export class HomePage extends RxState {
332
332
  await AppMarkdownModal.show(this.modalCtrl, {
333
333
  title: this.translate.instant(item.title, item.titleArgs),
334
334
  src: url,
335
- enableNavigationHistory: false,
336
- //canPrint: true,
337
335
  });
338
336
  }
339
337
  else {
@@ -365,4 +363,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
365
363
  type: Inject,
366
364
  args: [APP_HOME_BUTTONS]
367
365
  }] }] });
368
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9ob21lL2hvbWUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvaG9tZS9ob21lLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBVyxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUczRSxPQUFPLEVBQUUsV0FBVyxFQUErQixNQUFNLGtDQUFrQyxDQUFDO0FBSzVGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xHLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENB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LE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciwgVG9hc3RDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgUmVnaXN0ZXJNb2RhbCB9IGZyb20gJy4uL3JlZ2lzdGVyL3JlZ2lzdGVyLm1vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBBY2NvdW50LCBhY2NvdW50VG9TdHJpbmcgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgRGVwYXJ0bWVudCB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2RlcGFydG1lbnQubW9kZWwnO1xuaW1wb3J0IHsgQVBQX0xPQ0FMRVMsIExvY2FsZUNvbmZpZywgTG9jYWxTZXR0aW5ncyB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwcEF1dGhNb2RhbCB9IGZyb20gJy4uL2F1dGgvYXV0aC5tb2RhbCc7XG5pbXBvcnQgeyBOZXR3b3JrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBJTWVudUl0ZW0sIE1lbnVJdGVtcyB9IGZyb20gJy4uL21lbnUvbWVudS5tb2RlbCc7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IGZhZGVJbkFuaW1hdGlvbiwgc2xpZGVVcERvd25BbmltYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBpc05pbE9yQmxhbmssIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IEhpc3RvcnlQYWdlUmVmZXJlbmNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvaGlzdG9yeS5tb2RlbCc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJR19PUFRJT05TIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7IFJ4U3RhdGUgfSBmcm9tICdAcngtYW5ndWxhci9zdGF0ZSc7XG5pbXBvcnQgeyBJbWFnZXNVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL2ltYWdlcy51dGlscyc7XG5pbXBvcnQgeyBVcmlVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL3VyaS51dGlscyc7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvcGVlci5tb2RlbCc7XG5pbXBvcnQgeyBBcHBNYXJrZG93bk1vZGFsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21hcmtkb3duL21hcmtkb3duLm1vZGFsJztcblxuLyoqXG4gKiBAcGFyYW0gZmlsZXNcbiAqIEBkZXByZWNhdGVkIHVzZSBgZ2V0UmFuZG9tSW1hZ2VXaXRoQ3JlZGl0KClgIGluc3RlYWRcbiAqKi9cbmV4cG9ydCBjb25zdCBnZXRSYW5kb21JbWFnZSA9IEltYWdlc1V0aWxzLmdldFJhbmRvbUltYWdlO1xuZXhwb3J0IGNvbnN0IGdldFJhbmRvbUltYWdlV2l0aENyZWRpdCA9IEltYWdlc1V0aWxzLmdldFJhbmRvbUltYWdlV2l0aENyZWRpdDtcblxuZXhwb3J0IGNvbnN0IEFQUF9IT01FX0JVVFRPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48SU1lbnVJdGVtW10+KCdob21lQnV0dG9uJyk7XG5leHBvcnQgaW50ZXJmYWNlIEhvbWVQYWdlU3RhdGUge1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBzaG93U3Bpbm5lcjogYm9vbGVhbjtcbiAgc2hvd1BhcnRuZXJCYW5uZXI6IGJvb2xlYW47XG4gIHNob3dMZWdhbEluZm9ybWF0aW9uOiBib29sZWFuO1xuICBzaG93SW5zdGFsbExpbmtzOiBib29sZWFuO1xuICBwYWdlSGlzdG9yeTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBhZ2UtaG9tZScsXG4gIHRlbXBsYXRlVXJsOiAnaG9tZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaG9tZS5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbZmFkZUluQW5pbWF0aW9uLCBzbGlkZVVwRG93bkFuaW1hdGlvbl0sXG59KVxuZXhwb3J0IGNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgUnhTdGF0ZTxIb21lUGFnZVN0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlYnVnOiBib29sZWFuO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2NvbmZpZzogQ29uZmlndXJhdGlvbjtcblxuICBwcm90ZWN0ZWQgcGFnZUhpc3RvcnkkID0gdGhpcy5zZWxlY3QoJ3BhZ2VIaXN0b3J5Jyk7XG4gIHByb3RlY3RlZCBsb2FkaW5nJCA9IHRoaXMuc2VsZWN0KCdsb2FkaW5nJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBtb2JpbGU6IGJvb2xlYW47XG5cbiAgd2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgYWNjb3VudE5hbWUgPSAnJztcbiAgaXNMb2dpbjogYm9vbGVhbjtcbiAgJHBhcnRuZXJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEZXBhcnRtZW50W10+KG51bGwpO1xuICBsb2dvOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFwcE5hbWU6IHN0cmluZztcbiAgaXNXZWI6IGJvb2xlYW47XG4gIGNhblJlZ2lzdGVyOiBib29sZWFuO1xuICBjb250ZW50U3R5bGU6IGFueTtcbiAgY29udGVudENyZWRpdHM6IHN0cmluZztcbiAgbGVnYWxJbmZvcm1hdGlvbjogSU1lbnVJdGVtW107XG4gIG9mZmxpbmU6IGJvb2xlYW47XG4gICRmaWx0ZXJlZEJ1dHRvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElNZW51SXRlbVtdPih1bmRlZmluZWQpO1xuICByZWFkb25seSBzaG93QWNjb3VudEJ1dHRvbjogYm9vbGVhbjtcblxuICBzZXQgcGFnZUhpc3RvcnkodmFsdWU6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10pIHtcbiAgICB0aGlzLnNldCgncGFnZUhpc3RvcnknLCAoKSA9PiB2YWx1ZSk7XG4gIH1cblxuICBnZXQgcGFnZUhpc3RvcnkoKTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdwYWdlSGlzdG9yeScpO1xuICB9XG5cbiAgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldCgnbG9hZGluZycsICgpID0+IHZhbHVlKTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldCgnbG9hZGluZycpO1xuICB9XG5cbiAgc2V0IHNob3dTcGlubmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXQoJ3Nob3dTcGlubmVyJywgKCkgPT4gdmFsdWUpO1xuICB9XG4gIGdldCBzaG93U3Bpbm5lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3Nob3dTcGlubmVyJyk7XG4gIH1cblxuICBzZXQgc2hvd1BhcnRuZXJCYW5uZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldCgnc2hvd1BhcnRuZXJCYW5uZXInLCAoKSA9PiB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNob3dQYXJ0bmVyQmFubmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldCgnc2hvd1BhcnRuZXJCYW5uZXInKTtcbiAgfVxuXG4gIHNldCBzaG93TGVnYWxJbmZvcm1hdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0KCdzaG93TGVnYWxJbmZvcm1hdGlvbicsICgpID0+IHZhbHVlKTtcbiAgfVxuICBnZXQgc2hvd0xlZ2FsSW5mb3JtYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdzaG93TGVnYWxJbmZvcm1hdGlvbicpO1xuICB9XG5cbiAgc2V0IHNob3dJbnN0YWxsTGlua3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldCgnc2hvd0luc3RhbGxMaW5rcycsICgpID0+IHZhbHVlKTtcbiAgfVxuICBnZXQgc2hvd0luc3RhbGxMaW5rcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3Nob3dJbnN0YWxsTGlua3MnKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxlQ29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmcgPyAnJyA6ICh0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZyB8fCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUpPy5zdWJzdHJpbmcoMCwgMik7XG4gIH1cblxuICBnZXQgcGFydG5lckJhbm5lclNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zaG93TGVnYWxJbmZvcm1hdGlvbiA/IDkgOiAxMjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwdWJsaWMgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQEluamVjdChBUFBfTE9DQUxFUykgcHVibGljIGxvY2FsZXM6IExvY2FsZUNvbmZpZ1tdLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0hPTUVfQlVUVE9OUykgcHVibGljIGJ1dHRvbnM6IElNZW51SXRlbVtdXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zZXQoPFBhcnRpYWw8SG9tZVBhZ2VTdGF0ZT4+e1xuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIHNob3dQYXJ0bmVyQmFubmVyOiBmYWxzZSxcbiAgICAgIHNob3dTcGlubmVyOiAhdGhpcy5wbGF0Zm9ybS5zdGFydGVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGUnKTtcbiAgICB0aGlzLnBsYXRmb3JtLnJlYWR5KCkudGhlbigoKSA9PiB0aGlzLnN0YXJ0KCkpO1xuICAgIHRoaXMuc2hvd0FjY291bnRCdXR0b24gPSBlbnZpcm9ubWVudC5hY2NvdW50Py5zaG93QWNjb3VudEJ1dHRvbiA/PyB0cnVlO1xuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgbG9naW4oKSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBBcHBBdXRoTW9kYWwsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKCkge1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogUmVnaXN0ZXJNb2RhbCxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChldmVudDogYW55KSB7XG4gICAgYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5sb2dvdXQoKTtcblxuICAgIC8vIElmIHdhcyBvZmZsaW5lLCB0cnkgdG8gcmVjb25uZWN0IChiZWNhdXNlIGNhbiBiZSBhIGZvcmNlZCBvZmZsaW5lIG1vZGUpXG4gICAgaWYgKHRoaXMub2ZmbGluZSkge1xuICAgICAgYXdhaXQgdGhpcy50cnlPbmxpbmUoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VMYW5ndWFnZShsb2NhbGU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0dGluZ3MuYXBwbHkoeyBsb2NhbGUgfSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGFnZVBhdGgoaW5kZXg6IG51bWJlciwgcGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYWdlPy5wYXRoO1xuICB9XG5cbiAgdHJ5T25saW5lKCkge1xuICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSB0cnVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLm5ldHdvcmtcbiAgICAgIC50cnlPbmxpbmUoe1xuICAgICAgICBzaG93TG9hZGluZ1RvYXN0OiBmYWxzZSxcbiAgICAgICAgc2hvd09ubGluZVRvYXN0OiB0cnVlLFxuICAgICAgICBzaG93T2ZmbGluZVRvYXN0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RhcnQoKSB7XG4gICAgYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5yZWFkeSgpO1xuXG4gICAgdGhpcy5pc0xvZ2luID0gdGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCk7XG4gICAgaWYgKHRoaXMuaXNMb2dpbikge1xuICAgICAgdGhpcy5vbkxvZ2luKHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudCk7XG4gICAgfVxuXG4gICAgdGhpcy5vZmZsaW5lID0gdGhpcy5uZXR3b3JrLm9mZmxpbmU7XG5cbiAgICAvLyBMaXN0ZW4gbG9naW4vbG9nb3V0IGV2ZW50c1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLnN1YnNjcmliZSgoYWNjb3VudCkgPT4gdGhpcy5vbkxvZ2luKGFjY291bnQpKSk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uTG9nb3V0KCkpKTtcblxuICAgIC8vIExpc3RlbiBwb2QgY29uZmlnXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLnN1YnNjcmliZSgoY29uZmlnKSA9PiB0aGlzLm9uQ29uZmlnTG9hZGVkKGNvbmZpZykpKTtcblxuICAgIC8vIExpc3RlbiBzZXR0aW5ncyBjaGFuZ2VzXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuc2V0dGluZ3Mub25DaGFuZ2VcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gQWRkIGEgZGVsYXksIHRvIGF2b2lkIHRvIGFwcGx5IGNoYW5nZXMgdG8gb2Z0ZW5cbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgICAvLyBTdGFydCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAgICAgICBzdGFydFdpdGgoYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4gdGhpcy5vblNldHRpbmdzQ2hhbmdlZChyZXMpKVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gbmV0d29yayBjaGFuZ2VzXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubmV0d29yay5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vZGVib3VuY2VUaW1lKDQ1MCksXG4gICAgICAgICAgLy90YXAoKCkgPT4gdGhpcy53YWl0aW5nTmV0d29yayA9IGZhbHNlKSxcbiAgICAgICAgICBtYXAoKGNvbm5lY3Rpb25UeXBlKSA9PiBjb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob2ZmbGluZSkgPT4ge1xuICAgICAgICAgIHRoaXMub2ZmbGluZSA9IG9mZmxpbmU7XG4gICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKSB7XG4gICAgYXdhaXQgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNvbmZpZ0xvYWRlZChjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbaG9tZV0gQXBwbHlpbmcgY29uZmlndXJhdGlvbicsIGNvbmZpZyk7XG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuXG4gICAgdGhpcy5hcHBOYW1lID0gdGhpcy5fY29uZmlnLmxhYmVsIHx8IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEFwcE5hbWUgfHwgJ1NVTUFSaVMnO1xuICAgIHRoaXMubG9nbyA9IHRoaXMuX2NvbmZpZy5sYXJnZUxvZ28gfHwgdGhpcy5fY29uZmlnLnNtYWxsTG9nbyB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMuaXNXZWIgPSB0aGlzLnBsYXRmb3JtLmlzV2ViKCk7XG4gICAgdGhpcy5jYW5SZWdpc3RlciA9IHRoaXMuX2NvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLlJFR0lTVFJBVElPTl9FTkFCTEUpO1xuICAgIHRoaXMubGVnYWxJbmZvcm1hdGlvbiA9IFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdIT01FLlBSSVZBQ1lfUE9MSUNZJyxcbiAgICAgICAgcGF0aDogdGhpcy5fY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuUFJJVkFDWV9QT0xJQ1lfVVJMKSA/PyAodGhpcy5lbnZpcm9ubWVudC5wcml2YWN5UG9saWN5VXJsIGFzIHN0cmluZyksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0hPTUUuVEVSTVNfT0ZfVVNFJyxcbiAgICAgICAgcGF0aDogdGhpcy5fY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuVEVSTVNfT0ZfVVNFX1VSTCkgPz8gKHRoaXMuZW52aXJvbm1lbnQudGVybXNPZlVzZVVybCBhcyBzdHJpbmcpLFxuICAgICAgfSxcbiAgICBdLmZpbHRlcigoaXRlbSkgPT4gaXNOb3ROaWxPckJsYW5rKGl0ZW0ucGF0aCkpO1xuICAgIHRoaXMuc2hvd0xlZ2FsSW5mb3JtYXRpb24gPSBpc05vdEVtcHR5QXJyYXkodGhpcy5sZWdhbEluZm9ybWF0aW9uKTtcblxuICAgIGNvbnN0IHBhcnRuZXJzID0gKHRoaXMuX2NvbmZpZy5wYXJ0bmVycyB8fCBbXSkuZmlsdGVyKChwKSA9PiBwICYmIHAubG9nbyk7XG4gICAgdGhpcy4kcGFydG5lcnMubmV4dChwYXJ0bmVycyk7XG4gICAgdGhpcy5zaG93UGFydG5lckJhbm5lciA9IHBhcnRuZXJzLmxlbmd0aCA+IDA7XG4gICAgLy8gVE9ETyBsb2FkIGluc3RhbGwgbGlua3NcblxuICAgIC8vIElmIG5vdCBhbHJlYWR5IHNldCwgY29tcHV0ZSB0aGUgYmFja2dyb3VuZCBpbWFnZVxuICAgIGlmICghdGhpcy5jb250ZW50U3R5bGUpIHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmRJbWFnZXMgPSAoY29uZmlnLmJhY2tncm91bmRJbWFnZXMgfHwgW10pXG4gICAgICAgIC8vIEZpbHRlciBvbiBub3QgbmlsLCBiZWNhdXNlIGNhbiBvY2N1ciBpZiBkZXRlY3RlZCBoYXMgbm90IGV4aXN0cyAoc2VlIGNvbmZpZy1zZXJ2aWNlLmpzKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChpbWcpID0+XG4gICAgICAgICAgICBpc05vdE5pbChpbWcpICYmXG4gICAgICAgICAgICAvLyBJZiBvZmZsaW5lLCBmaWx0ZXIgb24gbG9jYWwgZGF0YVVSTCBpbWFnZVxuICAgICAgICAgICAgKCF0aGlzLm9mZmxpbmUgfHwgIWltZy5zdGFydHNXaXRoKCdodHRwJykpXG4gICAgICAgICk7XG5cbiAgICAgIC8vIEJhY2tncm91bmQgaW1hZ2UgZm91bmQ6IHNlbGVjdCBvbmUgcmFuZG9tbHlcbiAgICAgIGlmIChiYWNrZ3JvdW5kSW1hZ2VzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB7IGltYWdlLCBjcmVkaXRzIH0gPSBnZXRSYW5kb21JbWFnZVdpdGhDcmVkaXQoYmFja2dyb3VuZEltYWdlcyk7XG4gICAgICAgIHRoaXMuY29udGVudFN0eWxlID0gaW1hZ2UgPyB7ICdiYWNrZ3JvdW5kLWltYWdlJzogYHVybCgke2ltYWdlfSlgIH0gOiB7fTtcbiAgICAgICAgdGhpcy5jb250ZW50Q3JlZGl0cyA9IGNyZWRpdHMgfHwgJyc7XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBiYWNrZ3JvdW5kIGNvbG9yXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJpbWFyeUNvbG9yID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQ09MT1JfUFJJTUFSWSkgfHwgJ3ZhcigtLWlvbi1jb2xvci1wcmltYXJ5KSc7XG4gICAgICAgIHRoaXMuY29udGVudFN0eWxlID0gKHByaW1hcnlDb2xvciAmJiB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogcHJpbWFyeUNvbG9yIH0pIHx8IHt9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaEJ1dHRvbnMoKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gSWYgZmlyc3QgbG9hZCwgaGlkZSB0aGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblNldHRpbmdzQ2hhbmdlZChzZXR0aW5nczogTG9jYWxTZXR0aW5ncykge1xuICAgIGlmIChzZXR0aW5ncy5wYWdlSGlzdG9yeSAhPT0gdGhpcy5wYWdlSGlzdG9yeSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2hvbWVdIFBhZ2UgaGlzdG9yeSBsb2FkZWQnKTtcbiAgICAgIHRoaXMucGFnZUhpc3RvcnkgPSBzZXR0aW5ncy5wYWdlSGlzdG9yeSB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Mb2dpbihhY2NvdW50OiBBY2NvdW50KSB7XG4gICAgaWYgKCFhY2NvdW50KSByZXR1cm47IC8vIFNraXBcbiAgICAvL2NvbnNvbGUuZGVidWcoJ1tob21lXSBMb2dnZWQgYWNjb3VudDogJywgYWNjb3VudCk7XG4gICAgdGhpcy5pc0xvZ2luID0gdHJ1ZTtcbiAgICB0aGlzLmFjY291bnROYW1lID0gYWNjb3VudFRvU3RyaW5nKGFjY291bnQpO1xuICAgIHRoaXMucmVmcmVzaEJ1dHRvbnMoYWNjb3VudCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvZ291dCgpIHtcbiAgICB0aGlzLmlzTG9naW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjY291bnROYW1lID0gJyc7XG4gICAgdGhpcy5wYWdlSGlzdG9yeSA9IFtdO1xuICAgIHRoaXMucmVmcmVzaEJ1dHRvbnMoKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZnJlc2hCdXR0b25zKGFjY291bnQ/OiBBY2NvdW50KSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcpIHJldHVybjsgLy8gU2tpcCAod2FpdGluZyBjb25maWcgdG8gYmUgbG9hZGVkKVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2hvbWVdIFJlZnJlc2hpbmcgYnV0dG9ucy4uLicpO1xuXG4gICAgYWNjb3VudCA9IGFjY291bnQgfHwgdGhpcy5hY2NvdW50U2VydmljZS5hY2NvdW50O1xuICAgIGNvbnN0IGZpbHRlcmVkQnV0dG9ucyA9ICh0aGlzLmJ1dHRvbnMgfHwgW10pXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBNZW51SXRlbXMuY2hlY2tJZlZpc2libGUoaXRlbSwgYWNjb3VudCwgdGhpcy5fY29uZmlnLCB7XG4gICAgICAgICAgaXNMb2dpbjogdGhpcy5pc0xvZ2luLFxuICAgICAgICAgIGRlYnVnOiB0aGlzLl9kZWJ1ZyxcbiAgICAgICAgICBsb2dQcmVmaXg6ICdbaG9tZV0nLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAvLyBSZXBsYWNlIHRpdGxlIHVzaW5nIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhpdGVtLnRpdGxlUHJvcGVydHkpICYmIHRoaXMuX2NvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fY29uZmlnLnByb3BlcnRpZXNbaXRlbS50aXRsZVByb3BlcnR5XTtcbiAgICAgICAgICBpZiAodGl0bGUpIHJldHVybiB7IC4uLml0ZW0sIHRpdGxlIH07IC8vIENyZWF0ZSBhIGNvcHksIHRvIGtlZXAgdGhlIG9yaWdpbmFsIGl0ZW0udGl0bGVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4kZmlsdGVyZWRCdXR0b25zLm5leHQoZmlsdGVyZWRCdXR0b25zKTtcbiAgfVxuXG4gIGFzeW5jIG9wZW5NYXJrZG93bk1vZGFsKGV2ZW50PzogRXZlbnQsIGl0ZW06IElNZW51SXRlbSA9IG51bGwpIHtcbiAgICBpZiAoaXNOaWxPckJsYW5rKGl0ZW0/LnBhdGgpKSByZXR1cm47XG5cbiAgICAvLyBSZXNvbHZlIHJlbGF0aXZlIHBhdGhcbiAgICBsZXQgdXJsID0gaXRlbS5wYXRoO1xuICAgIGlmICh0aGlzLm5ldHdvcmsucGVlciAmJiAodXJsLnN0YXJ0c1dpdGgoJy4vJykgfHwgdXJsLnN0YXJ0c1dpdGgoJy8nKSkpIHtcbiAgICAgIHVybCA9IFBlZXIucGF0aCh0aGlzLm5ldHdvcmsucGVlciwgdXJsKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoRmlsZW5hbWUgPSBVcmlVdGlscy5nZXRGaWxlbmFtZSh1cmwpO1xuICAgIGNvbnN0IGlzTWFya2Rvd25GaWxlID0gcGF0aEZpbGVuYW1lLmVuZHNXaXRoKCcubWQnKTtcblxuICAgIC8vIE9wZW4gYXMgbWFya2Rvd25cbiAgICBpZiAoaXNNYXJrZG93bkZpbGUpIHtcbiAgICAgIGF3YWl0IEFwcE1hcmtkb3duTW9kYWwuc2hvdyh0aGlzLm1vZGFsQ3RybCwge1xuICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChpdGVtLnRpdGxlLCBpdGVtLnRpdGxlQXJncyksXG4gICAgICAgIHNyYzogdXJsLFxuICAgICAgICBlbmFibGVOYXZpZ2F0aW9uSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIC8vY2FuUHJpbnQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3BlbiBhcyBleHRlcm5hbCBsaW5rXG4gICAgICBhd2FpdCB0aGlzLnBsYXRmb3JtLm9wZW4odXJsKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVtb3ZlUGFnZUhpc3RvcnkocGF0aDogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5yZW1vdmVQYWdlSGlzdG9yeShwYXRoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGFwcC10b29sYmFyIFtjYW5Hb0JhY2tdPVwiZmFsc2VcIiB2aXNpYmxlLXhzIHZpc2libGUtc20gdmlzaWJsZS1tb2JpbGU+XG4gIDwhLS0gQ2hhbmdlIGxvY2FsZSBidXR0b24gLS0+XG4gIDxpb24tYnV0dG9uIHNsb3Q9XCJlbmRcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibG9jYWxlTWVudVwiPlxuICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibGFuZ3VhZ2VcIj48L2lvbi1pY29uPlxuICA8L2lvbi1idXR0b24+XG48L2FwcC10b29sYmFyPlxuXG48IS0tIENoYW5nZSBsb2NhbGUgbWVudSAtLT5cbjxtYXQtbWVudSAjbG9jYWxlTWVudT1cIm1hdE1lbnVcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50PlxuICAgIEBmb3IgKGl0ZW0gb2YgbG9jYWxlczsgdHJhY2sgaXRlbS5rZXkpIHtcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hhbmdlTGFuZ3VhZ2UoaXRlbS5rZXkpXCI+XG4gICAgICAgIDxpb24tbGFiZWw+e3sgaXRlbS52YWx1ZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPGlvbi1jb250ZW50IFtuZ1N0eWxlXT1cImNvbnRlbnRTdHlsZVwiIG5vLXBhZGRpbmcteHM+XG4gIEBpZiAoY29udGVudENyZWRpdHMgfCBpc05vdE5pbE9yQmxhbmspIHtcbiAgICA8c3BhbiBjbGFzcz1cImNvbnRlbnQtY3JlZGl0c1wiPlxuICAgICAgPGlvbi10ZXh0Pnt7IGNvbnRlbnRDcmVkaXRzIH19PC9pb24tdGV4dD5cbiAgICA8L3NwYW4+XG4gIH1cblxuICA8IS0tIGxvYWRpbmcgc3Bpbm5lciAtLT5cbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctcGFnZVwiIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiEobG9hZGluZyQgfCBwdXNoKVwiPlxuICAgIEBpZiAoc2hvd1NwaW5uZXIpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+XG4gICAgICAgIDxwIFtpbm5lckhUTUxdPVwiJ0NPTU1PTi5MT0FESU5HX0RPVFMnIHwgdHJhbnNsYXRlXCI+PC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2stY3ViZTEgc2stY3ViZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2stY3ViZTIgc2stY3ViZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2stY3ViZTQgc2stY3ViZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2stY3ViZTMgc2stY3ViZVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8IS0tIERlc2t0b3A6IHRyYW5zbHVjZW50IHRvcCB0b29sYmFyIC0tPlxuICA8ZGl2IGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cbiAgICA8aW9uLXRvb2xiYXIgdHJhbnNsdWNlbnQ+XG4gICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgIDxpb24tbWVudS10b2dnbGU+XG4gICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwibWVudVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1tZW51LXRvZ2dsZT5cbiAgICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgIDwhLS0gY2hhbmdlIGxvY2FsZSBidXR0b24gLS0+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIGZpbGw9XCJzb2xpZFwiXG4gICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImxvY2FsZU1lbnVcIlxuICAgICAgICAgIFt0aXRsZV09XCInU0VUVElOR1MuTE9DQUxFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJsYW5ndWFnZVwiPjwvaW9uLWljb24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPC9pb24tdG9vbGJhcj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBJbnN0YWxsIChhbmQgdXBncmFkZSkgY2FyZCAtLT5cbiAgPGFwcC1pbnN0YWxsLXVwZ3JhZGUtY2FyZCBbaXNMb2dpbl09XCJpc0xvZ2luXCIgW3Nob3dJbnN0YWxsQnV0dG9uXT1cInRydWVcIj48L2FwcC1pbnN0YWxsLXVwZ3JhZGUtY2FyZD5cblxuICBAaWYgKCEobG9hZGluZyQgfCBwdXNoKSkge1xuICAgIDwhLS0gV2VsY29tZSBjYXJkIC0tPlxuICAgIDxpb24tY2FyZCBjbGFzcz1cIm1haW4gd2VsY29tZSBpb24tcGFkZGluZyBpb24tdGV4dC1jZW50ZXIgaW9uLWFsaWduLXNlbGYtY2VudGVyXCIgQGZhZGVJbkFuaW1hdGlvbj5cbiAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgIDxpb24tY2FyZC10aXRsZSBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNXZWJcIiBbaW5uZXJIVE1MXT1cIidIT01FLldFTENPTUVfV0VCJyB8IHRyYW5zbGF0ZTogeyBhcHBOYW1lOiBhcHBOYW1lIH1cIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNXZWJcIiBbaW5uZXJIVE1MXT1cIidIT01FLldFTENPTUVfQVBQJyB8IHRyYW5zbGF0ZTogeyBhcHBOYW1lOiBhcHBOYW1lIH1cIj48L3NwYW4+XG4gICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZSBbaW5uZXJIVE1MXT1cImRlc2NyaXB0aW9uXCI+PC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgPGlvbi1jYXJkLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgPGltZyAqbmdJZj1cImxvZ29cIiBbYXR0ci5zcmNdPVwibG9nb1wiIGFsdD1cIkxvZ29cIiAvPlxuICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8IS0tIHJlZ2lzdGVyIGhlbHAgdGV4dCAtLT5cbiAgICAgICAgPGlvbi10ZXh0ICpuZ0lmPVwiIWlzTG9naW4gJiYgY2FuUmVnaXN0ZXJcIj5cbiAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+SE9NRS5SRUdJU1RFUl9IRUxQPC9zcGFuPlxuICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW9uLXBhZGRpbmctdG9wXCI+XG4gICAgICAgICAgPCEtLSBJZiBOT1QgbG9naW4gLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvZ2luOyBlbHNlIGxvZ2luQnV0dG9uc1wiPlxuICAgICAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJjYW5SZWdpc3RlclwiIGV4cGFuZD1cImJsb2NrXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIChjbGljayk9XCJyZWdpc3RlcigpXCI+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5IT01FLkJUTl9SRUdJU1RFUjwvc3Bhbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGV4cGFuZD1cImJsb2NrXCIgY29sb3I9XCJsaWdodFwiIFtyb3V0ZXJMaW5rXT1cIlsnLyddXCIgKGNsaWNrKT1cImxvZ2luKClcIj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkFVVEguQlROX0xPR0lOPC9zcGFuPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSBJZiB1c2VyIGxvZ2luIC0tPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9naW5CdXR0b25zPlxuICAgICAgICAgICAgPCEtLSBGZWF0dXJlIGJ1dHRvbnMgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpyeElmPVwiJGZpbHRlcmVkQnV0dG9uczsgbGV0IGJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBidXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgICAgICAgICAgICAgIGNvbG9yPVwidGVydGlhcnlcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uY3NzQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBjbGFzcz1cImlvbi1mbG9hdC1zdGFydFwiICpuZ0lmPVwiaXRlbS5pY29uXCIgW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIiBjbGFzcz1cImlvbi1mbG9hdC1zdGFydFwiICpuZ0lmPVwiaXRlbS5tYXRJY29uXCI+e3sgaXRlbS5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD57eyAnSE9NRS5CVE5fREFUQV9FTlRSWScgfCB0cmFuc2xhdGU6IHsgbmFtZTogKGl0ZW0udGl0bGUgfCB0cmFuc2xhdGUpIH0gfX08L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwhLS0gZGl2aWRlciAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWl0ZW0ucGF0aCAmJiAhaXRlbS5hY3Rpb25cIiBbY2xhc3NdPVwiaXRlbS5jc3NDbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+e3sgaXRlbS50aXRsZSB9fSZuYnNwOzwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tPHAgKm5nSWY9XCJidXR0b25zLmxlbmd0aFwiIGNsYXNzPVwidmlzaWJsZS1tb2JpbGVcIj4mbmJzcDs8L3A+LS0+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJzaG93QWNjb3VudEJ1dHRvblwiIGV4cGFuZD1cImJsb2NrXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBbcm91dGVyTGlua109XCJbJy9hY2NvdW50J11cIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIGNsYXNzPVwiaW9uLWZsb2F0LXN0YXJ0XCIgbmFtZT1cInBlcnNvbi1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8aW9uLXRleHQgdHJhbnNsYXRlPkhPTUUuQlROX01ZX0FDQ09VTlQ8L2lvbi10ZXh0PlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICAgICAgICA8cCBoaWRkZW4teHMgaGlkZGVuLXNtIGhpZGRlbi1tb2JpbGU+XG4gICAgICAgICAgICAgIDxpb24tdGV4dFxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiJ0hPTUUuTk9UX1RISVNfQUNDT1VOVF9RVUVTVElPTicgfCB0cmFuc2xhdGU6IHsgZGlzcGxheU5hbWU6IGFjY291bnROYW1lIH1cIlxuICAgICAgICAgICAgICA+PC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgIDxpb24tdGV4dD5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIChjbGljayk9XCJsb2dvdXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkhPTUUuQlROX0RJU0NPTk5FQ1Q8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgIDwvaW9uLWNhcmQ+XG5cbiAgICA8IS0tIFBhZ2UgaGlzdG9yeSAtLT5cbiAgICBAbGV0IHBhZ2VIaXN0b3J5ID0gaXNMb2dpbiAmJiAocGFnZUhpc3RvcnkkIHwgcHVzaCk7XG4gICAgQGlmIChwYWdlSGlzdG9yeSB8IGlzTm90RW1wdHlBcnJheSkge1xuICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaGlzdG9yeS1jb250YWluZXIgaW9uLWFsaWduLXNlbGYtY2VudGVyXCI+XG4gICAgICAgIDxpb24tcm93PlxuICAgICAgICAgIEBmb3IgKHBhZ2Ugb2YgcGFnZUhpc3Rvcnk7IHRyYWNrIHBhZ2UucGF0aCkge1xuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCIgc2l6ZS14bD1cIlwiIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZCBjbGFzcz1cImlvbi1hbGlnbi1zZWxmLXN0YXJ0IGlvbi10ZXh0LXN0YXJ0XCIgQGZhZGVJbkFuaW1hdGlvbj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gdG9wIGJhciAtLT5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVQYWdlSGlzdG9yeShwYWdlLnBhdGgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlvbi1mbG9hdC1zdGFydCBpb24tbm8tbWFyZ2luIGNsb3NlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBbaW5uZXJIVE1MXT1cInBhZ2Uuc3VidGl0bGUgfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLWZsb2F0LWVuZFwiIFt0aXRsZV09XCJwYWdlLnRpbWUgfCBkYXRlRm9ybWF0OiB7IHRpbWU6IHRydWUgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidGltZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO3t7IHBhZ2UudGltZSB8IGRhdGVGcm9tTm93IH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gbWFpbiBwYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlIGNsYXNzPVwiaW9uLW5vLW1hcmdpbiBpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXBwYWJsZVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC0xeFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicGFnZS5wYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgICAgICAgICAgICBsaW5lcz1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBwYWdlIGljb24tLT5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gKm5nSWY9XCJwYWdlLmljb25cIiBzbG90PVwic3RhcnRcIiBbbmFtZV09XCJwYWdlLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInBhZ2UubWF0SWNvblwiIHNsb3Q9XCJzdGFydFwiPnt7IHBhZ2UubWF0SWNvbiB9fTwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiIFtpbm5lckhUTUxdPVwicGFnZS50aXRsZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cblxuICAgICAgICAgICAgICAgIDwhLS0gY2hpbGRyZW4gcGFnZXMgLS0+XG4gICAgICAgICAgICAgICAgQGlmIChwYWdlLmNoaWxkcmVuIHwgaXNOb3RFbXB0eUFycmF5KSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nIGlvbi1wYWRkaW5nLXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGlzdCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAoY2hpbGRQYWdlIG9mIHBhZ2UuY2hpbGRyZW47IHRyYWNrIGNoaWxkUGFnZS5wYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcHBhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC0xeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImNoaWxkUGFnZS5wYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyRGlyZWN0aW9uPVwicm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gcGFnZSBpY29uLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiAqbmdJZj1cImNoaWxkUGFnZS5pY29uXCIgc2xvdD1cInN0YXJ0XCIgY29sb3I9XCJkYXJrXCIgW25hbWVdPVwiY2hpbGRQYWdlLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJjaGlsZFBhZ2UubWF0SWNvblwiIHNsb3Q9XCJzdGFydFwiIGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoaWxkUGFnZS5tYXRJY29uIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhcmtcIiBbaW5uZXJIVE1MXT1cImNoaWxkUGFnZS50aXRsZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWxpc3Q+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tcm93PlxuICAgICAgPC9pb24tZ3JpZD5cbiAgICB9IEBlbHNlIGlmIChzaG93UGFydG5lckJhbm5lciB8fCBzaG93TGVnYWxJbmZvcm1hdGlvbikge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvdHRvbUJhbm5lclwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgfVxuPC9pb24tY29udGVudD5cblxuPG5nLXRlbXBsYXRlICNib3R0b21CYW5uZXI+XG4gIDxpb24tZ3JpZCBjbGFzcz1cImJvdHRvbS1iYW5uZXIgaW9uLXRleHQtY2VudGVyXCIgW2NsYXNzLmZsb2F0aW5nXT1cIiFtb2JpbGVcIiBAZmFkZUluQW5pbWF0aW9uPlxuICAgIDxpb24tcm93PlxuICAgICAgQGlmIChzaG93UGFydG5lckJhbm5lcikge1xuICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTJcIiBbc2l6ZUxnXT1cInBhcnRuZXJCYW5uZXJTaXplXCIgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICBAaWYgKHNob3dMZWdhbEluZm9ybWF0aW9uKSB7XG4gICAgICAgICAgICA8aW9uLWxpc3QgY2xhc3M9XCJsZWdhbC1pbmZvXCI+XG4gICAgICAgICAgICAgIDxpb24tbGlzdC1oZWFkZXI+e3sgJ0hPTUUuUEFSVE5FUlMnIHwgdHJhbnNsYXRlIH19PC9pb24tbGlzdC1oZWFkZXI+XG4gICAgICAgICAgICA8L2lvbi1saXN0PlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tIHBhcnRuZXJzIC0tPlxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgJHBhcnRuZXJzIHwgYXN5bmM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGEgaHJlZj1cInt7IGl0ZW0uc2l0ZVVybCB9fVwiPlxuICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibG9nb1wiIHNyYz1cInt7IGl0ZW0ubG9nbyB9fVwiIGFsdD1cInt7IGl0ZW0ubGFiZWwgfX1cIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiIC8+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgfVxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICB9XG4gICAgICBAaWYgKHNob3dMZWdhbEluZm9ybWF0aW9uKSB7XG4gICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiIHNpemUtc209XCI2XCIgc2l6ZS1sZz1cIjNcIiBbY2xhc3MubGVmdC1ib3JkZXJdPVwic2hvd1BhcnRuZXJCYW5uZXJcIj5cbiAgICAgICAgICA8aW9uLWxpc3QgY2xhc3M9XCJsZWdhbC1pbmZvXCI+XG4gICAgICAgICAgICA8aW9uLWxpc3QtaGVhZGVyIGNsYXNzPVwiaW9uLXRleHQtbGVmdFwiPnt7ICdIT01FLkxFR0FMX0lORk9STUFUSU9OJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWxpc3QtaGVhZGVyPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBsZWdhbEluZm9ybWF0aW9uOyB0cmFjayBpdGVtLnBhdGgpIHtcbiAgICAgICAgICAgICAgPGlvbi1pdGVtIChjbGljayk9XCJvcGVuTWFya2Rvd25Nb2RhbCgkZXZlbnQsIGl0ZW0pXCIgbGluZXM9XCJub25lXCIgW2J1dHRvbl09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIHwgdHJhbnNsYXRlOiBpdGVtLnRpdGxlQXJncyB9fVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLWxpc3Q+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgQGlmIChzaG93SW5zdGFsbExpbmtzKSB7XG4gICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCIgc2l6ZS1sZz1cIjNcIiBvZmZzZXQtbGc9XCI5XCIgW2NsYXNzLmxlZnQtYm9yZGVyXT1cInNob3dQYXJ0bmVyQmFubmVyXCI+XG4gICAgICAgICAgICA8aW9uLWxpc3QgY2xhc3M9XCJsZWdhbC1pbmZvXCI+XG4gICAgICAgICAgICAgIDxpb24tbGlzdC1oZWFkZXI+e3sgJ0hPTUUuSU5TVEFMTF9BUFAnIHwgdHJhbnNsYXRlIH19PC9pb24tbGlzdC1oZWFkZXI+XG4gICAgICAgICAgICAgIDwhLS0gVE9ETyAtLT5cbiAgICAgICAgICAgIDwvaW9uLWxpc3Q+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9pb24tcm93PlxuICA8L2lvbi1ncmlkPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
366
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9ob21lL2hvbWUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvaG9tZS9ob21lLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBVyxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUczRSxPQUFPLEVBQUUsV0FBVyxFQUErQixNQUFNLGtDQUFrQyxDQUFDO0FBSzVGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xHLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXhFOzs7SUFHSTtBQUNKLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQztBQUU3RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBYyxZQUFZLENBQUMsQ0FBQztBQWlCOUUsTUFBTSxPQUFPLFFBQVMsU0FBUSxPQUFzQjtJQThFeEM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQUNBO0lBQ3dCO0lBQ0g7SUFDaUI7SUF4RjlCLE1BQU0sQ0FBVTtJQUN6QixhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNuQyxPQUFPLENBQWdCO0lBRXJCLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sQ0FBVTtJQUVuQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDakIsT0FBTyxDQUFVO0lBQ2pCLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBZSxJQUFJLENBQUMsQ0FBQztJQUNwRCxJQUFJLENBQVM7SUFDYixXQUFXLENBQVM7SUFDcEIsT0FBTyxDQUFTO0lBQ2hCLEtBQUssQ0FBVTtJQUNmLFdBQVcsQ0FBVTtJQUNyQixZQUFZLENBQU07SUFDbEIsY0FBYyxDQUFTO0lBQ3ZCLGdCQUFnQixDQUFjO0lBQzlCLE9BQU8sQ0FBVTtJQUNqQixnQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztJQUN0RCxpQkFBaUIsQ0FBVTtJQUVwQyxJQUFJLFdBQVcsQ0FBQyxLQUE2QjtRQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFjO1FBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLEtBQWM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxpQkFBaUIsQ0FBQyxLQUFjO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLG9CQUFvQixDQUFDLEtBQWM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNJLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQ1UsY0FBOEIsRUFDOUIsU0FBMEIsRUFDMUIsU0FBMkIsRUFDM0IsZUFBZ0MsRUFDaEMsYUFBNEIsRUFDNUIsUUFBeUIsRUFDekIsRUFBcUIsRUFDdEIsT0FBdUIsRUFDdkIsUUFBOEIsRUFDTixXQUF3QixFQUMzQixPQUF1QixFQUNOLE9BQW9CO1FBRWpFLEtBQUssRUFBRSxDQUFDO1FBYkEsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFzQjtRQUNOLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ04sWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUdqRSxJQUFJLENBQUMsR0FBRyxDQUF5QjtZQUMvQixPQUFPLEVBQUUsSUFBSTtZQUNiLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1NBQ3BDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLElBQUksSUFBSSxDQUFDO1FBRXhFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3hDLFNBQVMsRUFBRSxZQUFZO1NBQ3hCLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDeEMsU0FBUyxFQUFFLGFBQWE7WUFDeEIsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBVTtRQUNyQixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFbkMsMEVBQTBFO1FBQzFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhLEVBQUUsSUFBMEI7UUFDbkQsT0FBTyxJQUFJLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxPQUFPO2FBQ1QsU0FBUyxDQUFDO1lBQ1QsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixlQUFlLEVBQUUsSUFBSTtZQUNyQixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDZCQUE2QjtJQUVuQixLQUFLLENBQUMsS0FBSztRQUNuQixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUVwQyw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV0RixvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRywwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUTthQUNuQixJQUFJO1FBQ0gsa0RBQWtEO1FBQ2xELFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDakIsOEJBQThCO1FBQzlCLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDdkM7YUFDQSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNuRCxDQUFDO1FBRUYseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQjthQUNoQyxJQUFJO1FBQ0gsb0JBQW9CO1FBQ3BCLHlDQUF5QztRQUN6QyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUMsRUFDbEQsb0JBQW9CLEVBQUUsQ0FDdkI7YUFDQSxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFUyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQXNCO1FBQzlDLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVTLGNBQWMsQ0FBQyxNQUFxQjtRQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRXRCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksU0FBUyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDO1FBQzFFLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3RCO2dCQUNFLEtBQUssRUFBRSxxQkFBcUI7Z0JBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQTJCO2FBQ3hIO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLG1CQUFtQjtnQkFDMUIsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUF3QjthQUNuSDtTQUNGLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVuRSxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0MsMEJBQTBCO1FBRTFCLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO2dCQUN0RCwwRkFBMEY7aUJBQ3pGLE1BQU0sQ0FDTCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDYiw0Q0FBNEM7Z0JBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM3QyxDQUFDO1lBRUosOENBQThDO1lBQzlDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxDQUFDO1lBRUQsdUJBQXVCO2lCQUNsQixDQUFDO2dCQUNKLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLElBQUksMEJBQTBCLENBQUM7Z0JBQ3pHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuRixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxRQUF1QjtRQUNqRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBRVMsT0FBTyxDQUFDLE9BQWdCO1FBQ2hDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxDQUFDLE9BQU87UUFDN0Isb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFUyxRQUFRO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVTLGNBQWMsQ0FBQyxPQUFpQjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLENBQUMscUNBQXFDO1FBQ2hFLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFL0QsT0FBTyxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUNqRCxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2FBQ3pDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2YsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDcEQsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNsQixTQUFTLEVBQUUsUUFBUTtTQUNwQixDQUFDLENBQ0g7YUFDQSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNaLGlDQUFpQztZQUNqQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELElBQUksS0FBSztvQkFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxpREFBaUQ7WUFDekYsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBYSxFQUFFLE9BQWtCLElBQUk7UUFDM0QsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztZQUFFLE9BQU87UUFFckMsd0JBQXdCO1FBQ3hCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkUsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwRCxtQkFBbUI7UUFDbkIsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixNQUFNLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUMxQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUN6RCxHQUFHLEVBQUUsR0FBRzthQUNULENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sd0JBQXdCO1lBQ3hCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFUyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBWTtRQUM1QyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVTLFlBQVk7UUFDcEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO3dHQTNWVSxRQUFRLDZTQXVGVCxXQUFXLGFBQ1gsV0FBVyxhQUNDLGdCQUFnQjs0RkF6RjNCLFFBQVEsNEVDckRyQiw4eFdBaVJBLGd5VkQ5TmMsQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQUM7OzRGQUV4QyxRQUFRO2tCQVBwQixTQUFTOytCQUNFLGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQzs7MEJBeUZoRCxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdGlvblRva2VuLCBPbkRlc3Ryb3ksIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFJlZ2lzdGVyTW9kYWwgfSBmcm9tICcuLi9yZWdpc3Rlci9yZWdpc3Rlci5tb2RhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3VudCwgYWNjb3VudFRvU3RyaW5nIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IERlcGFydG1lbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9kZXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7IEFQUF9MT0NBTEVTLCBMb2NhbGVDb25maWcsIExvY2FsU2V0dGluZ3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBBdXRoTW9kYWwgfSBmcm9tICcuLi9hdXRoL2F1dGgubW9kYWwnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgSU1lbnVJdGVtLCBNZW51SXRlbXMgfSBmcm9tICcuLi9tZW51L21lbnUubW9kZWwnO1xuaW1wb3J0IHsgU2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQgeyBmYWRlSW5BbmltYXRpb24sIHNsaWRlVXBEb3duQW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL21hdGVyaWFsLmFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgaXNOaWxPckJsYW5rLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBIaXN0b3J5UGFnZVJlZmVyZW5jZSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQgeyBSeFN0YXRlIH0gZnJvbSAnQHJ4LWFuZ3VsYXIvc3RhdGUnO1xuaW1wb3J0IHsgSW1hZ2VzVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS9pbWFnZXMudXRpbHMnO1xuaW1wb3J0IHsgVXJpVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS91cmkudXRpbHMnO1xuaW1wb3J0IHsgUGVlciB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHsgQXBwTWFya2Rvd25Nb2RhbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXJrZG93bi9tYXJrZG93bi5tb2RhbCc7XG5cbi8qKlxuICogQHBhcmFtIGZpbGVzXG4gKiBAZGVwcmVjYXRlZCB1c2UgYGdldFJhbmRvbUltYWdlV2l0aENyZWRpdCgpYCBpbnN0ZWFkXG4gKiovXG5leHBvcnQgY29uc3QgZ2V0UmFuZG9tSW1hZ2UgPSBJbWFnZXNVdGlscy5nZXRSYW5kb21JbWFnZTtcbmV4cG9ydCBjb25zdCBnZXRSYW5kb21JbWFnZVdpdGhDcmVkaXQgPSBJbWFnZXNVdGlscy5nZXRSYW5kb21JbWFnZVdpdGhDcmVkaXQ7XG5cbmV4cG9ydCBjb25zdCBBUFBfSE9NRV9CVVRUT05TID0gbmV3IEluamVjdGlvblRva2VuPElNZW51SXRlbVtdPignaG9tZUJ1dHRvbicpO1xuZXhwb3J0IGludGVyZmFjZSBIb21lUGFnZVN0YXRlIHtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgc2hvd1NwaW5uZXI6IGJvb2xlYW47XG4gIHNob3dQYXJ0bmVyQmFubmVyOiBib29sZWFuO1xuICBzaG93TGVnYWxJbmZvcm1hdGlvbjogYm9vbGVhbjtcbiAgc2hvd0luc3RhbGxMaW5rczogYm9vbGVhbjtcbiAgcGFnZUhpc3Rvcnk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW107XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1wYWdlLWhvbWUnLFxuICB0ZW1wbGF0ZVVybDogJ2hvbWUuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2hvbWUuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW2ZhZGVJbkFuaW1hdGlvbiwgc2xpZGVVcERvd25BbmltYXRpb25dLFxufSlcbmV4cG9ydCBjbGFzcyBIb21lUGFnZSBleHRlbmRzIFJ4U3RhdGU8SG9tZVBhZ2VTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWJ1ZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9jb25maWc6IENvbmZpZ3VyYXRpb247XG5cbiAgcHJvdGVjdGVkIHBhZ2VIaXN0b3J5JCA9IHRoaXMuc2VsZWN0KCdwYWdlSGlzdG9yeScpO1xuICBwcm90ZWN0ZWQgbG9hZGluZyQgPSB0aGlzLnNlbGVjdCgnbG9hZGluZycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9iaWxlOiBib29sZWFuO1xuXG4gIHdhaXRpbmdOZXR3b3JrID0gZmFsc2U7XG4gIGFjY291bnROYW1lID0gJyc7XG4gIGlzTG9naW46IGJvb2xlYW47XG4gICRwYXJ0bmVycyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGVwYXJ0bWVudFtdPihudWxsKTtcbiAgbG9nbzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhcHBOYW1lOiBzdHJpbmc7XG4gIGlzV2ViOiBib29sZWFuO1xuICBjYW5SZWdpc3RlcjogYm9vbGVhbjtcbiAgY29udGVudFN0eWxlOiBhbnk7XG4gIGNvbnRlbnRDcmVkaXRzOiBzdHJpbmc7XG4gIGxlZ2FsSW5mb3JtYXRpb246IElNZW51SXRlbVtdO1xuICBvZmZsaW5lOiBib29sZWFuO1xuICAkZmlsdGVyZWRCdXR0b25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJTWVudUl0ZW1bXT4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgc2hvd0FjY291bnRCdXR0b246IGJvb2xlYW47XG5cbiAgc2V0IHBhZ2VIaXN0b3J5KHZhbHVlOiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdKSB7XG4gICAgdGhpcy5zZXQoJ3BhZ2VIaXN0b3J5JywgKCkgPT4gdmFsdWUpO1xuICB9XG5cbiAgZ2V0IHBhZ2VIaXN0b3J5KCk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10ge1xuICAgIHJldHVybiB0aGlzLmdldCgncGFnZUhpc3RvcnknKTtcbiAgfVxuXG4gIHNldCBsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXQoJ2xvYWRpbmcnLCAoKSA9PiB2YWx1ZSk7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ2xvYWRpbmcnKTtcbiAgfVxuXG4gIHNldCBzaG93U3Bpbm5lcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0KCdzaG93U3Bpbm5lcicsICgpID0+IHZhbHVlKTtcbiAgfVxuICBnZXQgc2hvd1NwaW5uZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdzaG93U3Bpbm5lcicpO1xuICB9XG5cbiAgc2V0IHNob3dQYXJ0bmVyQmFubmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXQoJ3Nob3dQYXJ0bmVyQmFubmVyJywgKCkgPT4gdmFsdWUpO1xuICB9XG4gIGdldCBzaG93UGFydG5lckJhbm5lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3Nob3dQYXJ0bmVyQmFubmVyJyk7XG4gIH1cblxuICBzZXQgc2hvd0xlZ2FsSW5mb3JtYXRpb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldCgnc2hvd0xlZ2FsSW5mb3JtYXRpb24nLCAoKSA9PiB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNob3dMZWdhbEluZm9ybWF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldCgnc2hvd0xlZ2FsSW5mb3JtYXRpb24nKTtcbiAgfVxuXG4gIHNldCBzaG93SW5zdGFsbExpbmtzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXQoJ3Nob3dJbnN0YWxsTGlua3MnLCAoKSA9PiB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNob3dJbnN0YWxsTGlua3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdzaG93SW5zdGFsbExpbmtzJyk7XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsZUNvZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nID8gJycgOiAodGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdGhpcy50cmFuc2xhdGUuZGVmYXVsdExhbmcgfHwgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlKT8uc3Vic3RyaW5nKDAsIDIpO1xuICB9XG5cbiAgZ2V0IHBhcnRuZXJCYW5uZXJTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0xlZ2FsSW5mb3JtYXRpb24gPyA5IDogMTI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgcHVibGljIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBJbmplY3QoQVBQX0xPQ0FMRVMpIHB1YmxpYyBsb2NhbGVzOiBMb2NhbGVDb25maWdbXSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9IT01FX0JVVFRPTlMpIHB1YmxpYyBidXR0b25zOiBJTWVudUl0ZW1bXVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2V0KDxQYXJ0aWFsPEhvbWVQYWdlU3RhdGU+PntcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBzaG93UGFydG5lckJhbm5lcjogZmFsc2UsXG4gICAgICBzaG93U3Bpbm5lcjogIXRoaXMucGxhdGZvcm0uc3RhcnRlZCxcbiAgICB9KTtcblxuICAgIHRoaXMubW9iaWxlID0gdGhpcy5wbGF0Zm9ybS5pcygnbW9iaWxlJyk7XG4gICAgdGhpcy5wbGF0Zm9ybS5yZWFkeSgpLnRoZW4oKCkgPT4gdGhpcy5zdGFydCgpKTtcbiAgICB0aGlzLnNob3dBY2NvdW50QnV0dG9uID0gZW52aXJvbm1lbnQuYWNjb3VudD8uc2hvd0FjY291bnRCdXR0b24gPz8gdHJ1ZTtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ2luKCkge1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogQXBwQXV0aE1vZGFsLFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RhbC5wcmVzZW50KCk7XG4gIH1cblxuICBhc3luYyByZWdpc3RlcigpIHtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFJlZ2lzdGVyTW9kYWwsXG4gICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlLFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RhbC5wcmVzZW50KCk7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoZXZlbnQ6IGFueSkge1xuICAgIGF3YWl0IHRoaXMuYWNjb3VudFNlcnZpY2UubG9nb3V0KCk7XG5cbiAgICAvLyBJZiB3YXMgb2ZmbGluZSwgdHJ5IHRvIHJlY29ubmVjdCAoYmVjYXVzZSBjYW4gYmUgYSBmb3JjZWQgb2ZmbGluZSBtb2RlKVxuICAgIGlmICh0aGlzLm9mZmxpbmUpIHtcbiAgICAgIGF3YWl0IHRoaXMudHJ5T25saW5lKCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGFuZ3VhZ2UobG9jYWxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldHRpbmdzLmFwcGx5KHsgbG9jYWxlIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBhZ2VQYXRoKGluZGV4OiBudW1iZXIsIHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGFnZT8ucGF0aDtcbiAgfVxuXG4gIHRyeU9ubGluZSgpIHtcbiAgICB0aGlzLndhaXRpbmdOZXR3b3JrID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5uZXR3b3JrXG4gICAgICAudHJ5T25saW5lKHtcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogZmFsc2UsXG4gICAgICAgIHNob3dPbmxpbmVUb2FzdDogdHJ1ZSxcbiAgICAgICAgc2hvd09mZmxpbmVUb2FzdDogZmFsc2UsXG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLndhaXRpbmdOZXR3b3JrID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIHN0YXJ0KCkge1xuICAgIGF3YWl0IHRoaXMuYWNjb3VudFNlcnZpY2UucmVhZHkoKTtcblxuICAgIHRoaXMuaXNMb2dpbiA9IHRoaXMuYWNjb3VudFNlcnZpY2UuaXNMb2dpbigpO1xuICAgIGlmICh0aGlzLmlzTG9naW4pIHtcbiAgICAgIHRoaXMub25Mb2dpbih0aGlzLmFjY291bnRTZXJ2aWNlLmFjY291bnQpO1xuICAgIH1cblxuICAgIHRoaXMub2ZmbGluZSA9IHRoaXMubmV0d29yay5vZmZsaW5lO1xuXG4gICAgLy8gTGlzdGVuIGxvZ2luL2xvZ291dCBldmVudHNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbi5zdWJzY3JpYmUoKGFjY291bnQpID0+IHRoaXMub25Mb2dpbihhY2NvdW50KSkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ291dC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkxvZ291dCgpKSk7XG5cbiAgICAvLyBMaXN0ZW4gcG9kIGNvbmZpZ1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5zdWJzY3JpYmUoKGNvbmZpZykgPT4gdGhpcy5vbkNvbmZpZ0xvYWRlZChjb25maWcpKSk7XG5cbiAgICAvLyBMaXN0ZW4gc2V0dGluZ3MgY2hhbmdlc1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLnNldHRpbmdzLm9uQ2hhbmdlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIEFkZCBhIGRlbGF5LCB0byBhdm9pZCB0byBhcHBseSBjaGFuZ2VzIHRvIG9mdGVuXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgICAgLy8gU3RhcnQgd2l0aCBjdXJyZW50IHNldHRpbmdzXG4gICAgICAgICAgc3RhcnRXaXRoKGF3YWl0IHRoaXMuc2V0dGluZ3MucmVhZHkoKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHRoaXMub25TZXR0aW5nc0NoYW5nZWQocmVzKSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIG5ldHdvcmsgY2hhbmdlc1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm5ldHdvcmsub25OZXR3b3JrU3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvL2RlYm91bmNlVGltZSg0NTApLFxuICAgICAgICAgIC8vdGFwKCgpID0+IHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZSksXG4gICAgICAgICAgbWFwKChjb25uZWN0aW9uVHlwZSkgPT4gY29ubmVjdGlvblR5cGUgPT09ICdub25lJyksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKG9mZmxpbmUpID0+IHtcbiAgICAgICAgICB0aGlzLm9mZmxpbmUgPSBvZmZsaW5lO1xuICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzaG93VG9hc3Qob3B0czogU2hvd1RvYXN0T3B0aW9ucykge1xuICAgIGF3YWl0IFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Db25maWdMb2FkZWQoY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW2hvbWVdIEFwcGx5aW5nIGNvbmZpZ3VyYXRpb24nLCBjb25maWcpO1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcblxuICAgIHRoaXMuYXBwTmFtZSA9IHRoaXMuX2NvbmZpZy5sYWJlbCB8fCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRBcHBOYW1lIHx8ICdTVU1BUmlTJztcbiAgICB0aGlzLmxvZ28gPSB0aGlzLl9jb25maWcubGFyZ2VMb2dvIHx8IHRoaXMuX2NvbmZpZy5zbWFsbExvZ28gfHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBjb25maWcubmFtZTtcbiAgICB0aGlzLmlzV2ViID0gdGhpcy5wbGF0Zm9ybS5pc1dlYigpO1xuICAgIHRoaXMuY2FuUmVnaXN0ZXIgPSB0aGlzLl9jb25maWcuZ2V0UHJvcGVydHlBc0Jvb2xlYW4oQ09SRV9DT05GSUdfT1BUSU9OUy5SRUdJU1RSQVRJT05fRU5BQkxFKTtcbiAgICB0aGlzLmxlZ2FsSW5mb3JtYXRpb24gPSBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnSE9NRS5QUklWQUNZX1BPTElDWScsXG4gICAgICAgIHBhdGg6IHRoaXMuX2NvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLlBSSVZBQ1lfUE9MSUNZX1VSTCkgPz8gKHRoaXMuZW52aXJvbm1lbnQucHJpdmFjeVBvbGljeVVybCBhcyBzdHJpbmcpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdIT01FLlRFUk1TX09GX1VTRScsXG4gICAgICAgIHBhdGg6IHRoaXMuX2NvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLlRFUk1TX09GX1VTRV9VUkwpID8/ICh0aGlzLmVudmlyb25tZW50LnRlcm1zT2ZVc2VVcmwgYXMgc3RyaW5nKSxcbiAgICAgIH0sXG4gICAgXS5maWx0ZXIoKGl0ZW0pID0+IGlzTm90TmlsT3JCbGFuayhpdGVtLnBhdGgpKTtcbiAgICB0aGlzLnNob3dMZWdhbEluZm9ybWF0aW9uID0gaXNOb3RFbXB0eUFycmF5KHRoaXMubGVnYWxJbmZvcm1hdGlvbik7XG5cbiAgICBjb25zdCBwYXJ0bmVycyA9ICh0aGlzLl9jb25maWcucGFydG5lcnMgfHwgW10pLmZpbHRlcigocCkgPT4gcCAmJiBwLmxvZ28pO1xuICAgIHRoaXMuJHBhcnRuZXJzLm5leHQocGFydG5lcnMpO1xuICAgIHRoaXMuc2hvd1BhcnRuZXJCYW5uZXIgPSBwYXJ0bmVycy5sZW5ndGggPiAwO1xuICAgIC8vIFRPRE8gbG9hZCBpbnN0YWxsIGxpbmtzXG5cbiAgICAvLyBJZiBub3QgYWxyZWFkeSBzZXQsIGNvbXB1dGUgdGhlIGJhY2tncm91bmQgaW1hZ2VcbiAgICBpZiAoIXRoaXMuY29udGVudFN0eWxlKSB7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kSW1hZ2VzID0gKGNvbmZpZy5iYWNrZ3JvdW5kSW1hZ2VzIHx8IFtdKVxuICAgICAgICAvLyBGaWx0ZXIgb24gbm90IG5pbCwgYmVjYXVzZSBjYW4gb2NjdXIgaWYgZGV0ZWN0ZWQgaGFzIG5vdCBleGlzdHMgKHNlZSBjb25maWctc2VydmljZS5qcylcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoaW1nKSA9PlxuICAgICAgICAgICAgaXNOb3ROaWwoaW1nKSAmJlxuICAgICAgICAgICAgLy8gSWYgb2ZmbGluZSwgZmlsdGVyIG9uIGxvY2FsIGRhdGFVUkwgaW1hZ2VcbiAgICAgICAgICAgICghdGhpcy5vZmZsaW5lIHx8ICFpbWcuc3RhcnRzV2l0aCgnaHR0cCcpKVxuICAgICAgICApO1xuXG4gICAgICAvLyBCYWNrZ3JvdW5kIGltYWdlIGZvdW5kOiBzZWxlY3Qgb25lIHJhbmRvbWx5XG4gICAgICBpZiAoYmFja2dyb3VuZEltYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgeyBpbWFnZSwgY3JlZGl0cyB9ID0gZ2V0UmFuZG9tSW1hZ2VXaXRoQ3JlZGl0KGJhY2tncm91bmRJbWFnZXMpO1xuICAgICAgICB0aGlzLmNvbnRlbnRTdHlsZSA9IGltYWdlID8geyAnYmFja2dyb3VuZC1pbWFnZSc6IGB1cmwoJHtpbWFnZX0pYCB9IDoge307XG4gICAgICAgIHRoaXMuY29udGVudENyZWRpdHMgPSBjcmVkaXRzIHx8ICcnO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2UgYmFja2dyb3VuZCBjb2xvclxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHByaW1hcnlDb2xvciA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkNPTE9SX1BSSU1BUlkpIHx8ICd2YXIoLS1pb24tY29sb3ItcHJpbWFyeSknO1xuICAgICAgICB0aGlzLmNvbnRlbnRTdHlsZSA9IChwcmltYXJ5Q29sb3IgJiYgeyAnYmFja2dyb3VuZC1jb2xvcic6IHByaW1hcnlDb2xvciB9KSB8fCB7fTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hCdXR0b25zKCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIC8vIElmIGZpcnN0IGxvYWQsIGhpZGUgdGhlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TZXR0aW5nc0NoYW5nZWQoc2V0dGluZ3M6IExvY2FsU2V0dGluZ3MpIHtcbiAgICBpZiAoc2V0dGluZ3MucGFnZUhpc3RvcnkgIT09IHRoaXMucGFnZUhpc3RvcnkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tob21lXSBQYWdlIGhpc3RvcnkgbG9hZGVkJyk7XG4gICAgICB0aGlzLnBhZ2VIaXN0b3J5ID0gc2V0dGluZ3MucGFnZUhpc3RvcnkgfHwgW107XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uTG9naW4oYWNjb3VudDogQWNjb3VudCkge1xuICAgIGlmICghYWNjb3VudCkgcmV0dXJuOyAvLyBTa2lwXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbaG9tZV0gTG9nZ2VkIGFjY291bnQ6ICcsIGFjY291bnQpO1xuICAgIHRoaXMuaXNMb2dpbiA9IHRydWU7XG4gICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnRUb1N0cmluZyhhY2NvdW50KTtcbiAgICB0aGlzLnJlZnJlc2hCdXR0b25zKGFjY291bnQpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Mb2dvdXQoKSB7XG4gICAgdGhpcy5pc0xvZ2luID0gZmFsc2U7XG4gICAgdGhpcy5hY2NvdW50TmFtZSA9ICcnO1xuICAgIHRoaXMucGFnZUhpc3RvcnkgPSBbXTtcbiAgICB0aGlzLnJlZnJlc2hCdXR0b25zKCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoQnV0dG9ucyhhY2NvdW50PzogQWNjb3VudCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnKSByZXR1cm47IC8vIFNraXAgKHdhaXRpbmcgY29uZmlnIHRvIGJlIGxvYWRlZClcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tob21lXSBSZWZyZXNoaW5nIGJ1dHRvbnMuLi4nKTtcblxuICAgIGFjY291bnQgPSBhY2NvdW50IHx8IHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudDtcbiAgICBjb25zdCBmaWx0ZXJlZEJ1dHRvbnMgPSAodGhpcy5idXR0b25zIHx8IFtdKVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgTWVudUl0ZW1zLmNoZWNrSWZWaXNpYmxlKGl0ZW0sIGFjY291bnQsIHRoaXMuX2NvbmZpZywge1xuICAgICAgICAgIGlzTG9naW46IHRoaXMuaXNMb2dpbixcbiAgICAgICAgICBkZWJ1ZzogdGhpcy5fZGVidWcsXG4gICAgICAgICAgbG9nUHJlZml4OiAnW2hvbWVdJyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgLy8gUmVwbGFjZSB0aXRsZSB1c2luZyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsoaXRlbS50aXRsZVByb3BlcnR5KSAmJiB0aGlzLl9jb25maWcpIHtcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX2NvbmZpZy5wcm9wZXJ0aWVzW2l0ZW0udGl0bGVQcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKHRpdGxlKSByZXR1cm4geyAuLi5pdGVtLCB0aXRsZSB9OyAvLyBDcmVhdGUgYSBjb3B5LCB0byBrZWVwIHRoZSBvcmlnaW5hbCBpdGVtLnRpdGxlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcblxuICAgIHRoaXMuJGZpbHRlcmVkQnV0dG9ucy5uZXh0KGZpbHRlcmVkQnV0dG9ucyk7XG4gIH1cblxuICBhc3luYyBvcGVuTWFya2Rvd25Nb2RhbChldmVudD86IEV2ZW50LCBpdGVtOiBJTWVudUl0ZW0gPSBudWxsKSB7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhpdGVtPy5wYXRoKSkgcmV0dXJuO1xuXG4gICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBwYXRoXG4gICAgbGV0IHVybCA9IGl0ZW0ucGF0aDtcbiAgICBpZiAodGhpcy5uZXR3b3JrLnBlZXIgJiYgKHVybC5zdGFydHNXaXRoKCcuLycpIHx8IHVybC5zdGFydHNXaXRoKCcvJykpKSB7XG4gICAgICB1cmwgPSBQZWVyLnBhdGgodGhpcy5uZXR3b3JrLnBlZXIsIHVybCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aEZpbGVuYW1lID0gVXJpVXRpbHMuZ2V0RmlsZW5hbWUodXJsKTtcbiAgICBjb25zdCBpc01hcmtkb3duRmlsZSA9IHBhdGhGaWxlbmFtZS5lbmRzV2l0aCgnLm1kJyk7XG5cbiAgICAvLyBPcGVuIGFzIG1hcmtkb3duXG4gICAgaWYgKGlzTWFya2Rvd25GaWxlKSB7XG4gICAgICBhd2FpdCBBcHBNYXJrZG93bk1vZGFsLnNob3codGhpcy5tb2RhbEN0cmwsIHtcbiAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoaXRlbS50aXRsZSwgaXRlbS50aXRsZUFyZ3MpLFxuICAgICAgICBzcmM6IHVybCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPcGVuIGFzIGV4dGVybmFsIGxpbmtcbiAgICAgIGF3YWl0IHRoaXMucGxhdGZvcm0ub3Blbih1cmwpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZW1vdmVQYWdlSGlzdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnJlbW92ZVBhZ2VIaXN0b3J5KHBhdGgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8YXBwLXRvb2xiYXIgW2NhbkdvQmFja109XCJmYWxzZVwiIHZpc2libGUteHMgdmlzaWJsZS1zbSB2aXNpYmxlLW1vYmlsZT5cbiAgPCEtLSBDaGFuZ2UgbG9jYWxlIGJ1dHRvbiAtLT5cbiAgPGlvbi1idXR0b24gc2xvdD1cImVuZFwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJsb2NhbGVNZW51XCI+XG4gICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsYW5ndWFnZVwiPjwvaW9uLWljb24+XG4gIDwvaW9uLWJ1dHRvbj5cbjwvYXBwLXRvb2xiYXI+XG5cbjwhLS0gQ2hhbmdlIGxvY2FsZSBtZW51IC0tPlxuPG1hdC1tZW51ICNsb2NhbGVNZW51PVwibWF0TWVudVwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQ+XG4gICAgQGZvciAoaXRlbSBvZiBsb2NhbGVzOyB0cmFjayBpdGVtLmtleSkge1xuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjaGFuZ2VMYW5ndWFnZShpdGVtLmtleSlcIj5cbiAgICAgICAgPGlvbi1sYWJlbD57eyBpdGVtLnZhbHVlIH19PC9pb24tbGFiZWw+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PlxuXG48aW9uLWNvbnRlbnQgW25nU3R5bGVdPVwiY29udGVudFN0eWxlXCIgbm8tcGFkZGluZy14cz5cbiAgQGlmIChjb250ZW50Q3JlZGl0cyB8IGlzTm90TmlsT3JCbGFuaykge1xuICAgIDxzcGFuIGNsYXNzPVwiY29udGVudC1jcmVkaXRzXCI+XG4gICAgICA8aW9uLXRleHQ+e3sgY29udGVudENyZWRpdHMgfX08L2lvbi10ZXh0PlxuICAgIDwvc3Bhbj5cbiAgfVxuXG4gIDwhLS0gbG9hZGluZyBzcGlubmVyIC0tPlxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1wYWdlXCIgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIShsb2FkaW5nJCB8IHB1c2gpXCI+XG4gICAgQGlmIChzaG93U3Bpbm5lcikge1xuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj5cbiAgICAgICAgPHAgW2lubmVySFRNTF09XCInQ09NTU9OLkxPQURJTkdfRE9UUycgfCB0cmFuc2xhdGVcIj48L3A+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzay1jdWJlMSBzay1jdWJlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzay1jdWJlMiBzay1jdWJlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzay1jdWJlNCBzay1jdWJlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzay1jdWJlMyBzay1jdWJlXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDwhLS0gRGVza3RvcDogdHJhbnNsdWNlbnQgdG9wIHRvb2xiYXIgLS0+XG4gIDxkaXYgaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbW9iaWxlPlxuICAgIDxpb24tdG9vbGJhciB0cmFuc2x1Y2VudD5cbiAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgICAgPGlvbi1tZW51LXRvZ2dsZT5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cImxpZ2h0XCIgZmlsbD1cImNsZWFyXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJtZW51XCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLW1lbnUtdG9nZ2xlPlxuICAgICAgPC9pb24tYnV0dG9ucz5cblxuICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgPCEtLSBjaGFuZ2UgbG9jYWxlIGJ1dHRvbiAtLT5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgZmlsbD1cInNvbGlkXCJcbiAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibG9jYWxlTWVudVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidTRVRUSU5HUy5MT0NBTEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImxhbmd1YWdlXCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICA8L2lvbi10b29sYmFyPlxuICA8L2Rpdj5cblxuICA8IS0tIEluc3RhbGwgKGFuZCB1cGdyYWRlKSBjYXJkIC0tPlxuICA8YXBwLWluc3RhbGwtdXBncmFkZS1jYXJkIFtpc0xvZ2luXT1cImlzTG9naW5cIiBbc2hvd0luc3RhbGxCdXR0b25dPVwidHJ1ZVwiPjwvYXBwLWluc3RhbGwtdXBncmFkZS1jYXJkPlxuXG4gIEBpZiAoIShsb2FkaW5nJCB8IHB1c2gpKSB7XG4gICAgPCEtLSBXZWxjb21lIGNhcmQgLS0+XG4gICAgPGlvbi1jYXJkIGNsYXNzPVwibWFpbiB3ZWxjb21lIGlvbi1wYWRkaW5nIGlvbi10ZXh0LWNlbnRlciBpb24tYWxpZ24tc2VsZi1jZW50ZXJcIiBAZmFkZUluQW5pbWF0aW9uPlxuICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgPGlvbi1jYXJkLXRpdGxlIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1dlYlwiIFtpbm5lckhUTUxdPVwiJ0hPTUUuV0VMQ09NRV9XRUInIHwgdHJhbnNsYXRlOiB7IGFwcE5hbWU6IGFwcE5hbWUgfVwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc1dlYlwiIFtpbm5lckhUTUxdPVwiJ0hPTUUuV0VMQ09NRV9BUFAnIHwgdHJhbnNsYXRlOiB7IGFwcE5hbWU6IGFwcE5hbWUgfVwiPjwvc3Bhbj5cbiAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlIFtpbm5lckhUTUxdPVwiZGVzY3JpcHRpb25cIj48L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICA8aW9uLWNhcmQtY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgIDxpb24tdGV4dCBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICA8aW1nICpuZ0lmPVwibG9nb1wiIFthdHRyLnNyY109XCJsb2dvXCIgYWx0PVwiTG9nb1wiIC8+XG4gICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwhLS0gcmVnaXN0ZXIgaGVscCB0ZXh0IC0tPlxuICAgICAgICA8aW9uLXRleHQgKm5nSWY9XCIhaXNMb2dpbiAmJiBjYW5SZWdpc3RlclwiPlxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5IT01FLlJFR0lTVEVSX0hFTFA8L3NwYW4+XG4gICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpb24tcGFkZGluZy10b3BcIj5cbiAgICAgICAgICA8IS0tIElmIE5PVCBsb2dpbiAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9naW47IGVsc2UgbG9naW5CdXR0b25zXCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cImNhblJlZ2lzdGVyXCIgZXhwYW5kPVwiYmxvY2tcIiBjb2xvcj1cInRlcnRpYXJ5XCIgKGNsaWNrKT1cInJlZ2lzdGVyKClcIj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkhPTUUuQlROX1JFR0lTVEVSPC9zcGFuPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgPGlvbi1idXR0b24gZXhwYW5kPVwiYmxvY2tcIiBjb2xvcj1cImxpZ2h0XCIgW3JvdXRlckxpbmtdPVwiWycvJ11cIiAoY2xpY2spPVwibG9naW4oKVwiPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+QVVUSC5CVE5fTE9HSU48L3NwYW4+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIElmIHVzZXIgbG9naW4gLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2dpbkJ1dHRvbnM+XG4gICAgICAgICAgICA8IS0tIEZlYXR1cmUgYnV0dG9ucyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnJ4SWY9XCIkZmlsdGVyZWRCdXR0b25zOyBsZXQgYnV0dG9uc1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnBhdGhcIlxuICAgICAgICAgICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5jc3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnBhdGhcIlxuICAgICAgICAgICAgICAgICAgcm91dGVyRGlyZWN0aW9uPVwicm9vdFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIGNsYXNzPVwiaW9uLWZsb2F0LXN0YXJ0XCIgKm5nSWY9XCJpdGVtLmljb25cIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHNsb3Q9XCJzdGFydFwiIGNsYXNzPVwiaW9uLWZsb2F0LXN0YXJ0XCIgKm5nSWY9XCJpdGVtLm1hdEljb25cIj57eyBpdGVtLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0Pnt7ICdIT01FLkJUTl9EQVRBX0VOVFJZJyB8IHRyYW5zbGF0ZTogeyBuYW1lOiAoaXRlbS50aXRsZSB8IHRyYW5zbGF0ZSkgfSB9fTwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBkaXZpZGVyIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS5wYXRoICYmICFpdGVtLmFjdGlvblwiIFtjbGFzc109XCJpdGVtLmNzc0NsYXNzXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT57eyBpdGVtLnRpdGxlIH19Jm5ic3A7PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS08cCAqbmdJZj1cImJ1dHRvbnMubGVuZ3RoXCIgY2xhc3M9XCJ2aXNpYmxlLW1vYmlsZVwiPiZuYnNwOzwvcD4tLT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cInNob3dBY2NvdW50QnV0dG9uXCIgZXhwYW5kPVwiYmxvY2tcIiBjb2xvcj1cInNlY29uZGFyeVwiIFtyb3V0ZXJMaW5rXT1cIlsnL2FjY291bnQnXVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgY2xhc3M9XCJpb24tZmxvYXQtc3RhcnRcIiBuYW1lPVwicGVyc29uLWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDxpb24tdGV4dCB0cmFuc2xhdGU+SE9NRS5CVE5fTVlfQUNDT1VOVDwvaW9uLXRleHQ+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgICAgICAgIDxwIGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0XG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCInSE9NRS5OT1RfVEhJU19BQ0NPVU5UX1FVRVNUSU9OJyB8IHRyYW5zbGF0ZTogeyBkaXNwbGF5TmFtZTogYWNjb3VudE5hbWUgfVwiXG4gICAgICAgICAgICAgID48L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0PlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cImxvZ291dCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+SE9NRS5CVE5fRElTQ09OTkVDVDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgPC9pb24tY2FyZD5cblxuICAgIDwhLS0gUGFnZSBoaXN0b3J5IC0tPlxuICAgIEBsZXQgcGFnZUhpc3RvcnkgPSBpc0xvZ2luICYmIChwYWdlSGlzdG9yeSQgfCBwdXNoKTtcbiAgICBAaWYgKHBhZ2VIaXN0b3J5IHwgaXNOb3RFbXB0eUFycmF5KSB7XG4gICAgICA8aW9uLWdyaWQgY2xhc3M9XCJoaXN0b3J5LWNvbnRhaW5lciBpb24tYWxpZ24tc2VsZi1jZW50ZXJcIj5cbiAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgQGZvciAocGFnZSBvZiBwYWdlSGlzdG9yeTsgdHJhY2sgcGFnZS5wYXRoKSB7XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTJcIiBzaXplLXhsPVwiXCIgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkIGNsYXNzPVwiaW9uLWFsaWduLXNlbGYtc3RhcnQgaW9uLXRleHQtc3RhcnRcIiBAZmFkZUluQW5pbWF0aW9uPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgPCEtLSB0b3AgYmFyIC0tPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVBhZ2VIaXN0b3J5KHBhZ2UucGF0aClcIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW9uLWZsb2F0LXN0YXJ0IGlvbi1uby1tYXJnaW4gY2xvc2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIFtpbm5lckhUTUxdPVwicGFnZS5zdWJ0aXRsZSB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY2xhc3M9XCJpb24tZmxvYXQtZW5kXCIgW3RpdGxlXT1cInBhZ2UudGltZSB8IGRhdGVGb3JtYXQ6IHsgdGltZTogdHJ1ZSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0aW1lLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7e3sgcGFnZS50aW1lIHwgZGF0ZUZyb21Ob3cgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBtYWluIHBhZ2UgLS0+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGUgY2xhc3M9XCJpb24tbm8tbWFyZ2luIGlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24taXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGRldGFpbD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHRhcHBhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LTF4XCJcbiAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJwYWdlLnBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICAgICAgICAgIGxpbmVzPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIHBhZ2UgaWNvbi0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiAqbmdJZj1cInBhZ2UuaWNvblwiIHNsb3Q9XCJzdGFydFwiIFtuYW1lXT1cInBhZ2UuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwicGFnZS5tYXRJY29uXCIgc2xvdD1cInN0YXJ0XCI+e3sgcGFnZS5tYXRJY29uIH19PC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCIgW2lubmVySFRNTF09XCJwYWdlLnRpdGxlXCI+PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBjaGlsZHJlbiBwYWdlcyAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKHBhZ2UuY2hpbGRyZW4gfCBpc05vdEVtcHR5QXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgaW9uLXBhZGRpbmctc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1saXN0IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjaGlsZFBhZ2Ugb2YgcGFnZS5jaGlsZHJlbjsgdHJhY2sgY2hpbGRQYWdlLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwcGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LTF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiY2hpbGRQYWdlLnBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBwYWdlIGljb24tLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uICpuZ0lmPVwiY2hpbGRQYWdlLmljb25cIiBzbG90PVwic3RhcnRcIiBjb2xvcj1cImRhcmtcIiBbbmFtZV09XCJjaGlsZFBhZ2UuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImNoaWxkUGFnZS5tYXRJY29uXCIgc2xvdD1cInN0YXJ0XCIgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hpbGRQYWdlLm1hdEljb24gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFya1wiIFtpbm5lckhUTUxdPVwiY2hpbGRQYWdlLnRpdGxlXCI+PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgfVxuICAgICAgICA8L2lvbi1yb3c+XG4gICAgICA8L2lvbi1ncmlkPlxuICAgIH0gQGVsc2UgaWYgKHNob3dQYXJ0bmVyQmFubmVyIHx8IHNob3dMZWdhbEluZm9ybWF0aW9uKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYm90dG9tQmFubmVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICB9XG48L2lvbi1jb250ZW50PlxuXG48bmctdGVtcGxhdGUgI2JvdHRvbUJhbm5lcj5cbiAgPGlvbi1ncmlkIGNsYXNzPVwiYm90dG9tLWJhbm5lciBpb24tdGV4dC1jZW50ZXJcIiBbY2xhc3MuZmxvYXRpbmddPVwiIW1vYmlsZVwiIEBmYWRlSW5BbmltYXRpb24+XG4gICAgPGlvbi1yb3c+XG4gICAgICBAaWYgKHNob3dQYXJ0bmVyQmFubmVyKSB7XG4gICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiIFtzaXplTGddPVwicGFydG5lckJhbm5lclNpemVcIiBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIEBpZiAoc2hvd0xlZ2FsSW5mb3JtYXRpb24pIHtcbiAgICAgICAgICAgIDxpb24tbGlzdCBjbGFzcz1cImxlZ2FsLWluZm9cIj5cbiAgICAgICAgICAgICAgPGlvbi1saXN0LWhlYWRlcj57eyAnSE9NRS5QQVJUTkVSUycgfCB0cmFuc2xhdGUgfX08L2lvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgICAgIDwvaW9uLWxpc3Q+XG4gICAgICAgICAgfVxuICAgICAgICAgIDwhLS0gcGFydG5lcnMgLS0+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiAkcGFydG5lcnMgfCBhc3luYzsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8YSBocmVmPVwie3sgaXRlbS5zaXRlVXJsIH19XCI+XG4gICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJsb2dvXCIgc3JjPVwie3sgaXRlbS5sb2dvIH19XCIgYWx0PVwie3sgaXRlbS5sYWJlbCB9fVwiIFt0aXRsZV09XCJpdGVtLmxhYmVsXCIgLz5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIH1cbiAgICAgIEBpZiAoc2hvd0xlZ2FsSW5mb3JtYXRpb24pIHtcbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCIgc2l6ZS1zbT1cIjZcIiBzaXplLWxnPVwiM1wiIFtjbGFzcy5sZWZ0LWJvcmRlcl09XCJzaG93UGFydG5lckJhbm5lclwiPlxuICAgICAgICAgIDxpb24tbGlzdCBjbGFzcz1cImxlZ2FsLWluZm9cIj5cbiAgICAgICAgICAgIDxpb24tbGlzdC1oZWFkZXIgY2xhc3M9XCJpb24tdGV4dC1sZWZ0XCI+e3sgJ0hPTUUuTEVHQUxfSU5GT1JNQVRJT04nIHwgdHJhbnNsYXRlIH19PC9pb24tbGlzdC1oZWFkZXI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGxlZ2FsSW5mb3JtYXRpb247IHRyYWNrIGl0ZW0ucGF0aCkge1xuICAgICAgICAgICAgICA8aW9uLWl0ZW0gKGNsaWNrKT1cIm9wZW5NYXJrZG93bk1vZGFsKCRldmVudCwgaXRlbSlcIiBsaW5lcz1cIm5vbmVcIiBbYnV0dG9uXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfCB0cmFuc2xhdGU6IGl0ZW0udGl0bGVBcmdzIH19XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICBAaWYgKHNob3dJbnN0YWxsTGlua3MpIHtcbiAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTJcIiBzaXplLWxnPVwiM1wiIG9mZnNldC1sZz1cIjlcIiBbY2xhc3MubGVmdC1ib3JkZXJdPVwic2hvd1BhcnRuZXJCYW5uZXJcIj5cbiAgICAgICAgICAgIDxpb24tbGlzdCBjbGFzcz1cImxlZ2FsLWluZm9cIj5cbiAgICAgICAgICAgICAgPGlvbi1saXN0LWhlYWRlcj57eyAnSE9NRS5JTlNUQUxMX0FQUCcgfCB0cmFuc2xhdGUgfX08L2lvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgICAgICAgPCEtLSBUT0RPIC0tPlxuICAgICAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2lvbi1yb3c+XG4gIDwvaW9uLWdyaWQ+XG48L25nLXRlbXBsYXRlPlxuIl19