@microsoft/windows-admin-center-sdk 2.128.0 → 2.165.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 (129) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/it-IT/strings.json +1 -1
  7. package/angular/assets/strings/ja-JP/strings.json +1 -1
  8. package/angular/assets/strings/ko-KR/strings.json +1 -1
  9. package/angular/assets/strings/nl-NL/strings.json +1 -1
  10. package/angular/assets/strings/pl-PL/strings.json +1 -1
  11. package/angular/assets/strings/pt-BR/strings.json +1 -1
  12. package/angular/assets/strings/pt-PT/strings.json +1 -1
  13. package/angular/assets/strings/ru-RU/strings.json +1 -1
  14. package/angular/assets/strings/sv-SE/strings.json +1 -1
  15. package/angular/assets/strings/tr-TR/strings.json +1 -1
  16. package/angular/assets/strings/zh-CN/strings.json +1 -1
  17. package/angular/assets/strings/zh-TW/strings.json +1 -1
  18. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +706 -507
  19. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  20. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +1 -1
  21. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  22. package/angular/esm2015/src/controls/accordion/index.js +5 -0
  23. package/angular/esm2015/src/controls/data-table/data-table.component.js +135 -129
  24. package/angular/esm2015/src/controls/dialog/dialog.component.js +11 -5
  25. package/angular/esm2015/src/controls/dialog/dialog.service.js +6 -13
  26. package/angular/esm2015/src/controls/dropdown/dropdown.service.js +3 -2
  27. package/angular/esm2015/src/controls/form/form-field/array/array-form-field.component.js +29 -22
  28. package/angular/esm2015/src/controls/form/form-field/datetime-range/datetime-range-form-field.component.js +4 -3
  29. package/angular/esm2015/src/controls/form/form-field/list/list-form-field.component.js +1 -1
  30. package/angular/esm2015/src/controls/form/validation-alert/validation-alert.component.js +3 -2
  31. package/angular/esm2015/src/controls/index.js +2 -1
  32. package/angular/esm2015/src/controls/pivot/pivot.component.js +21 -9
  33. package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +38 -34
  34. package/angular/esm2015/src/controls/settings/settings-content.component.js +3 -2
  35. package/angular/esm2015/src/controls/settings/settings.component.js +45 -13
  36. package/angular/esm2015/src/controls/settings/settings.module.js +5 -1
  37. package/angular/esm2015/src/controls/tooltip/tooltip-zone.directive.js +2 -2
  38. package/angular/esm2015/src/controls/wizard/models/index.js +1 -1
  39. package/angular/esm2015/src/controls/wizard/models/wizard-builder-interface.js +2 -0
  40. package/angular/esm2015/src/controls/wizard/models/wizard-navigation-interface.js +2 -0
  41. package/angular/esm2015/src/controls/wizard/wizard-builder.js +70 -1
  42. package/angular/esm2015/src/controls/wizard/wizard-navigation-information.js +56 -2
  43. package/angular/esm2015/src/controls/wizard/wizard.component.js +8 -2
  44. package/angular/esm2015/src/service/connectivity-enforcer.js +5 -2
  45. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +656 -462
  46. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  47. package/angular/src/controls/accordion/index.d.ts +4 -0
  48. package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +2 -1
  49. package/angular/src/controls/index.d.ts +1 -0
  50. package/angular/src/controls/pivot/pivot.component.d.ts +2 -2
  51. package/angular/src/controls/settings/settings.component.d.ts +3 -0
  52. package/angular/src/controls/settings/settings.module.d.ts +3 -2
  53. package/angular/src/controls/wizard/models/index.d.ts +2 -0
  54. package/angular/src/controls/wizard/models/wizard-builder-interface.d.ts +8 -0
  55. package/angular/src/controls/wizard/models/wizard-navigation-interface.d.ts +4 -0
  56. package/angular/src/controls/wizard/wizard-builder.d.ts +36 -1
  57. package/angular/src/controls/wizard/wizard-navigation-information.d.ts +48 -5
  58. package/angular/src/controls/wizard/wizard.component.d.ts +2 -1
  59. package/core/azure/azure-constants.d.ts +8 -0
  60. package/core/azure/azure-constants.js +8 -0
  61. package/core/azure/azure-constants.js.map +1 -1
  62. package/core/azure/azure-manager.d.ts +1 -0
  63. package/core/azure/azure-manager.js +7 -1
  64. package/core/azure/azure-manager.js.map +1 -1
  65. package/core/base/environment.d.ts +3 -0
  66. package/core/base/environment.js.map +1 -1
  67. package/core/base/msft-sme.mock.js +3 -0
  68. package/core/base/msft-sme.mock.js.map +1 -1
  69. package/core/base/utilities.d.ts +0 -3
  70. package/core/base/utilities.js +0 -34
  71. package/core/base/utilities.js.map +1 -1
  72. package/core/data/resource-cache.d.ts +1 -1
  73. package/core/data/resource-cache.js +1 -1
  74. package/core/data/resource-cache.js.map +1 -1
  75. package/core/data/settings-manager.d.ts +3 -0
  76. package/core/data/settings-manager.js +14 -1
  77. package/core/data/settings-manager.js.map +1 -1
  78. package/core/dom/dom.d.ts +5 -0
  79. package/core/dom/dom.js +20 -0
  80. package/core/dom/dom.js.map +1 -1
  81. package/core/manifest/environment-modules.js +3 -0
  82. package/core/manifest/environment-modules.js.map +1 -1
  83. package/core/notification/client-notification-instance.d.ts +5 -2
  84. package/core/notification/client-notification-instance.js +9 -5
  85. package/core/notification/client-notification-instance.js.map +1 -1
  86. package/core/notification/client-notification.d.ts +4 -0
  87. package/core/notification/client-notification.js.map +1 -1
  88. package/core/notification/notification.d.ts +6 -1
  89. package/core/notification/notification.js +3 -1
  90. package/core/notification/notification.js.map +1 -1
  91. package/core/rpc/credssp/rpc-credssp-model.d.ts +4 -0
  92. package/core/rpc/credssp/rpc-credssp-model.js.map +1 -1
  93. package/core/rpc/dialog/rpc-dialog-client.js +11 -5
  94. package/core/rpc/dialog/rpc-dialog-client.js.map +1 -1
  95. package/core/rpc/rpc.d.ts +6 -6
  96. package/core/rpc/rpc.js +7 -7
  97. package/core/rpc/rpc.js.map +1 -1
  98. package/core/security/authorization-manager.js +1 -1
  99. package/core/security/authorization-manager.js.map +1 -1
  100. package/core/security/credssp-manager.d.ts +13 -6
  101. package/core/security/credssp-manager.js +37 -21
  102. package/core/security/credssp-manager.js.map +1 -1
  103. package/core/shared/cluster-inventory/cluster-inventory-cache.js +2 -1
  104. package/core/shared/cluster-inventory/cluster-inventory-cache.js.map +1 -1
  105. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  106. package/e2e/assets/strings/de-DE/strings.json +1 -1
  107. package/e2e/assets/strings/es-ES/strings.json +1 -1
  108. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  109. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  110. package/e2e/assets/strings/it-IT/strings.json +1 -1
  111. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  112. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  113. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  114. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  115. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  116. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  117. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  118. package/e2e/assets/strings/strings.json +1 -1
  119. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  120. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  121. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  122. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  123. package/package.json +11 -4
  124. package/styles/css/main.css +1 -1
  125. package/tools/gulp-ps-cim/index.js +1 -1
  126. package/tools/gulp-ps-cim/index.js.map +1 -1
  127. package/angular/assets/strings/en-US/strings.json +0 -1
  128. package/core/assets/strings/en-US/strings.json +0 -1
  129. package/e2e/assets/strings/en-US/strings.json +0 -1
@@ -282,7 +282,6 @@ export class WizardComponent extends DynamicComponentBase {
282
282
  message: this.strings.MsftSmeShell.Angular.Wizard.disabledStepAlert,
283
283
  };
284
284
  this.modelChange = new EventEmitter();
285
- this.navigationInformation = new WizardNavigationInformation(this);
286
285
  this.isExpanded = true;
287
286
  }
288
287
  /**
@@ -494,6 +493,9 @@ export class WizardComponent extends DynamicComponentBase {
494
493
  }
495
494
  else if (!this.onLastStage) {
496
495
  this.stageIndex++;
496
+ while (this.stages[this.stageIndex].steps.length === 0) {
497
+ this.stageIndex++;
498
+ }
497
499
  this.stepIndex = 0;
498
500
  }
499
501
  this.emitStepChanged();
@@ -520,6 +522,9 @@ export class WizardComponent extends DynamicComponentBase {
520
522
  if (this.stageIndex !== 0) {
521
523
  this.stages[this.stageIndex].active = false;
522
524
  this.stageIndex--;
525
+ while (this.stages[this.stageIndex].steps.length === 0) {
526
+ this.stageIndex--;
527
+ }
523
528
  this.stepIndex = this.stages[this.stageIndex].steps.length - 1;
524
529
  this.stages[this.stageIndex].completed = false;
525
530
  }
@@ -543,6 +548,7 @@ export class WizardComponent extends DynamicComponentBase {
543
548
  * The method to run when the component is initialized.
544
549
  */
545
550
  ngOnInit() {
551
+ this.navigationInformation = new WizardNavigationInformation(this, this.wizardBuilder);
546
552
  this.stages = this.wizardBuilder.stages;
547
553
  this.heading = this.wizardBuilder.heading;
548
554
  this.exitButtonTitle = this.wizardBuilder.exitButtonTitle;
@@ -899,4 +905,4 @@ export class WizardComponent extends DynamicComponentBase {
899
905
  }], finished: [{
900
906
  type: Output
901
907
  }] }); })();
902
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3dpemFyZC93aXphcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvd2l6YXJkL3dpemFyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDMUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN6RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUsxRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0scUNBQXFDLENBQUM7QUFNckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSwyQkFBMkIsRUFBNkIsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7OztJQ3ZCckcsZ0NBQXFGOzs7SUFIdkYsK0JBQzRKO0lBQzFKLDhCQUFxQztJQUFBLFlBQWE7SUFBQSxpQkFBSztJQUN2RCxtRkFBcUY7SUFDdkYsaUJBQU07OztJQUpvQyxxQ0FBeUI7SUFFNUIsZUFBYTtJQUFiLG9DQUFhO0lBQ3ZCLGVBQWlCO0lBQWpCLHlDQUFpQjs7Ozs7OztJQU01Qyw4QkFJNEU7SUFBNUIseU5BQTJCO0lBQ3pFLGtDQUs4SDtJQUM1SCxnQ0FDd0Q7SUFDdEQsWUFDRjtJQUFBLGlCQUFPO0lBQ1AsZ0NBRStDO0lBQzdDLFlBQ0Y7SUFBQSxpQkFBTztJQUNULGlCQUFTO0lBQ1gsaUJBQUs7Ozs7O0lBcEJILGtLQUFvTTtJQUVwTSxtRUFBK0M7SUFHN0MsZUFBNkM7SUFBN0MsZ0VBQTZDLG9EQUFBLDhEQUFBO0lBRHNDLDJEQUFzQyxnREFBQSx5REFBQSwyRUFBQTtJQUF0RywyQ0FBOEI7SUFNM0MsZUFBMkU7SUFBM0UseUVBQTJFO0lBRS9FLGVBQ0Y7SUFERSxzRUFDRjtJQUVFLGVBQTJMO0lBQTNMLHFKQUEyTDtJQUUzTCxlQUNGO0lBREUsOENBQ0Y7OztJQXJCTiw4QkFDbUo7SUFDakoscUVBcUJLO0lBQ1AsaUJBQUs7OztJQWxCaUIsZUFBVztJQUFYLHVDQUFXOzs7SUFxQ3ZCLGdDQUF3RDtJQUFBLFlBQWU7SUFBQSxpQkFBTzs7O0lBQXRCLGVBQWU7SUFBZixtQ0FBZTs7Ozs7O0lBWDNFLDhCQUt1RTtJQURyRSxvT0FBNEI7SUFFNUIsa0NBR3dGO0lBQ3RGLGdDQUF5RDtJQUFBLFlBQTBDO0lBQUEsaUJBQU87SUFDMUcsbUZBQThFO0lBQ2hGLGlCQUFTO0lBQ1gsaUJBQUs7Ozs7O0lBWkgsc0ZBQXFGLG9EQUFBO0lBRXJGLGdFQUEwQyx5REFBQTtJQUdwQixlQUFvRDtJQUFwRCxzRkFBb0QsNERBQUEsOEVBQUEsK0NBQUEsa0RBQUE7SUFJZixlQUEwQztJQUExQywrRUFBMEM7SUFDN0QsZUFBZ0I7SUFBaEIseUNBQWdCOzs7O0lBYjVELDhCQUM0RztJQUMxRywyRUFhSztJQUNQLGlCQUFLOzs7SUFmb0Qsd0VBQWtEO0lBSTNDLGVBQXVCO0lBQXZCLG9EQUF1Qjs7Ozs7SUFSekYsK0JBRXNEO0lBQ3BELHFFQWdCSztJQUNMLCtCQUFtRDtJQUNqRCxrQ0FJcUk7SUFGbkksc0xBQXNCO0lBR3RCLDJCQUNrRztJQUNwRyxpQkFBUztJQUNYLGlCQUFNO0lBQ1IsaUJBQU07OztJQTNCZ0IsZUFBaUQ7SUFBakQsZ0ZBQWlEO0lBc0JqRSxlQUFrSTtJQUFsSSxxS0FBa0k7SUFGM0csa0RBQWlDLDZKQUFBO0lBSXRELGVBQXdGO0lBQXhGLDJGQUF3Rjs7O0lBUTlGLDJCQUEyQztJQUN6Qyx5Q0FBeUQ7SUFDM0QsaUJBQU07OztJQURnQixlQUFlO0lBQWYsb0NBQWU7OztJQWdCckMsK0JBQWtIO0lBQ2hILHdDQUFvRDtJQUN0RCxpQkFBTTs7OztJQVZWLCtCQUNxSztJQUNuSywrQkFBOEU7SUFDNUUsa0NBQ3VEO0lBRHlELHVMQUF1QjtJQUNoRixZQUE0QztJQUFBLGlCQUFTO0lBRTVHLGtDQUNrRjtJQURpRCx1TEFBdUI7SUFDeEUsWUFBc0I7SUFBQSxpQkFBUztJQUNqSCx1RUFFTTtJQUNSLGlCQUFNO0lBQ04sa0NBQzRDO0lBRG9FLHVMQUF1QjtJQUMzRixZQUE0QztJQUFBLGlCQUFTO0lBQ2pHLGtDQUMwQjtJQUF4Qix1TEFBdUI7SUFBQyxhQUFzQjtJQUFBLGlCQUFTO0lBQzNELGlCQUFNOzs7SUFkK0IsZUFBMEM7SUFBMUMsMERBQTBDO0lBRXpFLGVBQW9EO0lBQXBELG9FQUFvRDtJQURtQiwyREFBc0Msc0NBQUE7SUFDeEQsZUFBNEM7SUFBNUMscUVBQTRDO0lBRVAsZUFBc0M7SUFBdEMsMkRBQXNDLHNDQUFBLHdEQUFBO0lBQ2hELGVBQXNCO0lBQXRCLDZDQUFzQjtJQUNsRyxlQUFnQjtJQUFoQix3Q0FBZ0I7SUFLdEIsZUFBeUM7SUFBekMseURBQXlDO0lBRDhCLDJEQUFzQztJQUNuRSxlQUE0QztJQUE1QyxxRUFBNEM7SUFDUSxlQUFzQztJQUF0QywyREFBc0M7SUFDNUcsZUFBc0I7SUFBdEIsNkNBQXNCOzs7QURoRXBEOztHQUVHO0FBQ0gsSUFBSyxXQUtKO0FBTEQsV0FBSyxXQUFXO0lBQ1osNEJBQWEsQ0FBQTtJQUNiLDhCQUFlLENBQUE7SUFDZixvQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBaUIsQ0FBQTtBQUNyQixDQUFDLEVBTEksV0FBVyxLQUFYLFdBQVcsUUFLZjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxtQkFBbUI7Q0FPeEI7QUFFRDs7R0FFRztBQUtILE1BQU0sT0FBTyxlQUNULFNBQVEsb0JBQXdEO0lBcUxoRTs7Ozs7T0FLRztJQUNILFlBQ1ksVUFBNkIsRUFDN0IsaUJBQW9DLEVBQzVDLHdCQUFrRDtRQUVsRCxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUp4QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBekdoRDs7OztXQUlHO1FBQ0ksa0JBQWEsR0FBd0I7WUFDeEMsZUFBZSxFQUFFLEtBQUs7WUFDdEIsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQzlDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFDM0UsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDdkMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLO1NBQzNCLENBQUM7UUFRRjs7V0FFRztRQUVhLFNBQUksR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVwRTs7V0FFRztRQUVhLGtCQUFhLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFN0U7O1dBRUc7UUFFYSxnQkFBVyxHQUF5QyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUUvRzs7V0FFRztRQUVhLG9CQUFlLEdBQXVDLElBQUksWUFBWSxFQUF3QixDQUFDO1FBRS9HOztXQUVHO1FBRWEsYUFBUSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXhFOztXQUVHO1FBQ0ksWUFBTyxHQUFZLE9BQU8sQ0FBQyxVQUFVLEVBQVcsQ0FBQztRQWlCeEQ7O1dBRUc7UUFDSSxVQUFLLEdBQWM7WUFDdEIsUUFBUSxFQUFFLG1CQUFtQixDQUFDLElBQUk7WUFDbEMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsaUJBQWlCO1NBQ3RFLENBQUM7UUFrQ0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzlDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFqTUQ7O09BRUc7SUFDSCxJQUNXLEtBQUssQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUQ7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQWtMRDs7T0FFRztJQUNILElBQVcsZ0JBQWdCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxvQkFBb0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFXLGlCQUFpQjtRQUN4QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQVcscUJBQXFCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDdEQsQ0FBQztJQUVELHFEQUFxRDtJQUM5QyxrQkFBa0IsQ0FBQyxLQUFrQixFQUFFLEtBQWE7UUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDaEYsQ0FBQztJQUVELG9EQUFvRDtJQUM3QyxpQkFBaUIsQ0FBQyxJQUFnQixFQUFFLEtBQWE7UUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWM7UUFDakIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xFLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzVDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQzVHO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMzRztTQUNKO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ3hEO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYztRQUNqQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3ZHLENBQUM7SUFFRDs7TUFFRTtJQUNGLElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNwRixDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO2FBQU07WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7U0FDbEc7SUFDTCxDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQztJQUNqRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFNBQVMsQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxPQUFPLENBQUMsUUFBUSxDQUFDLGtDQUFrQyxFQUFFLDhDQUE4QyxFQUFFO2dCQUNqRyxXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSzthQUNqQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFFbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztZQUMzRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZ0JBQWdCLENBQUMsS0FBYTtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixPQUFPLENBQUMsUUFBUSxDQUFDLHVDQUF1QyxFQUFFLHFEQUFxRCxFQUFFO2dCQUM3RyxXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO2FBQ3JCLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUMzQjtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksb0JBQW9CO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2hDO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFtQjtRQUN0QixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQy9CO1FBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGVBQWU7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDM0I7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYztRQUNqQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUM1QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDOUIsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDaEQsaUVBQWlFO1lBQ2pFLDhHQUE4RztZQUM5RyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNwQjthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzFCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0I7UUFDckIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQ2hELGlFQUFpRTtZQUNqRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1NBQ2pEO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBRTNCLENBQUM7SUFFRDs7T0FFRztJQUNJLHNCQUFzQjtRQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUNsRDtTQUNKO2FBQU07WUFDSCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztNQUVFO0lBRU0saUJBQWlCO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1FBQzNGLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ0gsU0FBUyxDQUFDLENBQUMsQ0FBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUM7UUFDdEUsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUM7UUFDaEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDO1FBQzlFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFFbkIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsT0FBTyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxtQ0FBbUMsRUFBRTtnQkFDOUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO2FBQ3JCLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDYixPQUFPLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLHFDQUFxQyxFQUFFO2dCQUNoRixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUVoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBb0IsQ0FBQztRQUM5QyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztTQUN0RDtRQUNELElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO1NBQzFEO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDbkQscURBQXFEO2dCQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO2FBQy9DO1lBQ0QsdUdBQXVHO1lBQ3ZHLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1lBQ25GLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTFELCtFQUErRTtZQUMvRSxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVU7UUFDYixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsRUFBRTtZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNoQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxFQUFFO1lBQ3JDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUM1QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzthQUNqQztpQkFBTTtnQkFDSCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUMvQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNkLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUErQjtnQkFDdkUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM3RCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUc7Z0JBQy9ELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFDckUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2FBQ3BFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO29CQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNwQjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUU3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDO1lBQzFELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsZUFBZTtRQUNmLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7YUFDNUI7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7YUFDakM7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO2dCQUM1QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUM1QjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUMvQjtZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDN0I7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUI7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ3hELENBQUMsZ0JBQXNDLEVBQUUsRUFBRTtZQUN2QyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQkFDMUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2lCQUNqQztxQkFBTTtvQkFDSCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztpQkFDL0I7YUFDSjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDL0M7WUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7O09BR0c7SUFDSyxvQkFBb0I7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDL0I7UUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxzQkFBc0I7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQTBCO1lBQzdELFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXO1lBQ25FLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTztZQUM3RSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUs7U0FDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU8sOEJBQThCLENBQUMsc0JBQWtDO1FBQ3JFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7UUFDaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQztRQUMxRCxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUErQjtnQkFDdkUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM3RCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUc7Z0JBQy9ELE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQ2pHLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSzthQUNwRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDdEIsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDUCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7b0JBQ2xCLHNCQUFzQixFQUFFLENBQUM7aUJBQzVCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDVjthQUFNO1lBQ0gsc0JBQXNCLEVBQUUsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLGlCQUF5QjtRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxpQkFBaUIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3pFLGtEQUFrRDtZQUNsRCxJQUFJLFdBQVcsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7YUFDakM7U0FDSjthQUFNLElBQUksV0FBVyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ3BELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQy9DLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztpQkFDcEM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsZ0JBQXdCO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLENBQUM7UUFDekQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdkUsaURBQWlEO1lBQ2pELElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7YUFDakM7U0FDSjthQUFNO1lBQ0gsSUFBSSxVQUFVLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDOUUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsRUFBRTtvQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0o7SUFDTCxDQUFDO0lBRVMsZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1lBQ3ZFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ3ZFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN4RCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUNMLENBQUM7WUFDRixJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlEO0lBQ0wsQ0FBQztJQUVTLGNBQWM7UUFDcEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQzlCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDJCQUEyQjtRQUMvQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7O09BR0c7SUFDSywwQkFBMEI7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUNyQyxDQUFDO0lBRU8sZUFBZTtRQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRXpHLG9DQUFvQztRQUNwQyxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRTNCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDNUQsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7YUFDNUQsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG1CQUFtQixDQUFDLEtBQW1CO1FBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLHNDQUFzQztRQUUxRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0MsQ0FBQzs7aUdBL3hCUSxlQUFlO3VFQUFmLGVBQWU7UUM1RDVCLDhCQUF1SjtRQUVySixnRUFJTTtRQUdOLDhEQXdCSztRQUVMLDhCQUFrRjtRQUNoRixnRUE4Qk07UUFHTiw4QkFDeUU7UUFDdkUsZ0VBRU07UUFHTiw0QkFBcUQ7UUFDdkQsaUJBQU07UUFDUixpQkFBTTtRQUVOLGtFQWdCTTtRQUNSLGlCQUFNOztRQS9GRSxlQUFrQztRQUFsQywyREFBa0M7UUFPcEIsZUFBdUI7UUFBdkIsNENBQXVCO1FBMkJuQyxlQUFpRDtRQUFqRCwwRUFBaUQ7UUFrQ3JELGVBQXNFO1FBQXRFLDBGQUFzRTtRQUNoRSxlQUFtQztRQUFuQyx3REFBbUM7UUFTdkMsZUFBdUI7UUFBdkIsNENBQXVCOzt1RkRwQmxCLGVBQWU7Y0FKM0IsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixXQUFXLEVBQUUseUJBQXlCO2FBQ3pDOzJJQVNjLEtBQUs7a0JBRGYsS0FBSztZQStCQyxhQUFhO2tCQURuQixLQUFLO1lBaUVVLFdBQVc7a0JBRDFCLE1BQU07WUFPUyxJQUFJO2tCQURuQixNQUFNO1lBT1MsYUFBYTtrQkFENUIsTUFBTTtZQU9TLFdBQVc7a0JBRDFCLE1BQU07WUFPUyxlQUFlO2tCQUQ5QixNQUFNO1lBT1MsUUFBUTtrQkFEdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJ4anNMaWZldGltZU1hbmFnZXIgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2Uvcnhqcy1saWZldGltZS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IFNtZVdlYlRlbGVtZXRyeSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3Mvc21lLXdlYi10ZWxlbWV0cnknO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudE1vZHVsZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvbWFuaWZlc3QvZW52aXJvbm1lbnQtbW9kdWxlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0LFxyXG4gICAgUnBjRGlhbG9nTWVzc2FnZVJlcXVlc3RcclxufSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9kaWFsb2cvcnBjLWRpYWxvZy1tb2RlbCc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvU3RyaW5ncyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21tb24vZHluYW1pYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIZWFsdGhBbGVydFNldmVyaXR5LCBQYWdlQWxlcnQgfSBmcm9tICcuLi9wYWdlLWFsZXJ0LWJhci9tb2RlbHMvcGFnZS1hbGVydCc7XHJcbmltcG9ydCB7IFdpemFyZE1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLW1vZGVsJztcclxuaW1wb3J0IHsgV2l6YXJkU3RhZ2UgfSBmcm9tICcuL21vZGVscy93aXphcmQtc3RhZ2UnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAtY2hhbmdlZC1ldmVudCc7XHJcbmltcG9ydCB7IFdpemFyZFN0ZXBWYWxpZGF0aW9uIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAtdmFsaWRhdGlvbic7XHJcbmltcG9ydCB7IFdpemFyZEJ1aWxkZXIgfSBmcm9tICcuL3dpemFyZC1idWlsZGVyJztcclxuaW1wb3J0IHsgV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uLCBXaXphcmROYXZpZ2F0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi93aXphcmQtbmF2aWdhdGlvbi1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IEdlbmVyaWNXaXphcmRTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi93aXphcmQtc3RlcC93aXphcmQtc3RlcC5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIFdoYXRldmVyIHN0YXRlIHRoZSB3aXphcmQgaXMgaW5cclxuICovXHJcbmVudW0gV2l6YXJkU3RhdGUge1xyXG4gICAgRXhpdCA9ICdFeGl0JyxcclxuICAgIEVudHJ5ID0gJ0VudHJ5JyxcclxuICAgIEZpbmlzaGVkID0gJ0ZpbmlzaGVkJyxcclxuICAgIEFjdGl2ZSA9ICdBY3RpdmUnXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEYXRhIHRvIGNvbGxlY3QgaW4gd2l6YXJkXHJcbiAqL1xyXG5jbGFzcyBXaXphcmRUZWxlbWV0cnlEYXRhIHtcclxuICAgIHN0ZXBJbmRleE51bWJlcjogc3RyaW5nO1xyXG4gICAgc3RlcEluZGV4U3RhcnRUaW1lOiBzdHJpbmc7XHJcbiAgICBlbnRyeVBvaW50Pzogc3RyaW5nO1xyXG4gICAgd2l6YXJkVHlwZT86IHN0cmluZztcclxuICAgIHdpemFyZElkPzogc3RyaW5nO1xyXG4gICAgc3RhdGU/OiBXaXphcmRTdGF0ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBjb21wb25lbnQgY2xhc3MgZGVmaW5pdGlvbiBmb3IgdGhlIHdpemFyZCBjb21wb25lbnQuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLXdpemFyZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vd2l6YXJkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2l6YXJkQ29tcG9uZW50PFRNb2RlbCBleHRlbmRzIFdpemFyZE1vZGVsPlxyXG4gICAgZXh0ZW5kcyBEeW5hbWljQ29tcG9uZW50QmFzZTxHZW5lcmljV2l6YXJkU3RlcENvbXBvbmVudDxUTW9kZWw+PlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIFdpemFyZE5hdmlnYXRpb25JbnRlcmZhY2Uge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZGF0YSBtb2RlbCBmb3Igc2hhcmluZyBkYXRhIGFjcm9zcyB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBtb2RlbCh2YWx1ZTogVE1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbE1vZGVsID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQub25XaXphcmRNb2RlbENoYW5nZWQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZGF0YSBtb2RlbCBmb3Igc2hhcmluZyBkYXRhIGFjcm9zcyB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFRNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgbW9kZWwgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbE1vZGVsOiBUTW9kZWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBjb3B5IG9mIG1vZGVsIHRvIHJvbGxiYWNrIHRvIHdoZW4gdGhlXHJcbiAgICAgKiBjdXJyZW50IHN0ZXAgaXMgc2tpcHBlZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RlcE1vZGVsQ29weTogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHdpemFyZEJ1aWxkZXIgdXNlZCB0byBpbnN0YW50aWF0ZSB0aGUga2V5IHdpemFyZCBwcm9wZXJ0aWVzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHdpemFyZEJ1aWxkZXI6IFdpemFyZEJ1aWxkZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc3RhZ2VzIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGFnZXM6IFdpemFyZFN0YWdlW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaGVhZGluZyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSBleGl0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4aXRCdXR0b25UaXRsZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSBmaW5pc2ggYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluaXNoQnV0dG9uVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBmaW5pc2ggdmlldyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluaXNoVmlldzogV2l6YXJkU3RlcDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIHN0ZXBzIGxpc3Qgc2lkZSBwYW5lIHdpbGwgYmUgdmlzaWJsZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhpZGVTdGVwc0xpc3RTaWRlUGFuZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgYSBjb25maXJtYXRpb24gZGlhbG9nIHdpbGwgYmUgc2hvd24gdXBvbiAnRXhpdCcgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgYXBwbGljYXRpb24gaXMgaW4gcHJldmlldy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzSW5QcmV2aWV3OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgd2l6YXJkIGNhbiBuYXZpZ2F0ZSB0byBhIHByZXZpb3VzIHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsZW1ldHJ5IGRhdGEgY29sbGVjdGVkIHdoaWxlIG5hdmlnYXRpbmcgdGhyb3VnaCB3aXphcmQuIEJ5IGRlZmF1bHQsIHN0YXJ0IGF0IDEuMSBzdGVwIGluZGV4IGFuZFxyXG4gICAgICogRW50cnkgc3RhdGUuXHJcbiAgICAgKiBLZWVwIHNhbWUgZm9ybWF0IGFzIHRlbGVtZXRyeSBldmVudCB0aW1lc3RhbXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRlbGVtZXRyeURhdGE6IFdpemFyZFRlbGVtZXRyeURhdGEgPSB7XHJcbiAgICAgICAgc3RlcEluZGV4TnVtYmVyOiAnMS4xJyxcclxuICAgICAgICBzdGVwSW5kZXhTdGFydFRpbWU6IChuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgIGVudHJ5UG9pbnQ6IEVudmlyb25tZW50TW9kdWxlLmNyZWF0ZUVudHJ5cG9pbnRJZChNc2Z0U21lLnNlbGYoKS5Jbml0Lm1vZHVsZU5hbWUsXHJcbiAgICAgICAgICAgIE1zZnRTbWUuc2VsZigpLkluaXQuZW50cnlQb2ludE5hbWUpLFxyXG4gICAgICAgIHN0YXRlOiBXaXphcmRTdGF0ZS5FbnRyeVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIHdoZW4gdGhlIHdpemFyZCBtb2RlbCBjaGFuZ2VzXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUTW9kZWw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW4gdGhlIHdpemFyZCBpcyBleGl0ZWQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IGV4aXQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuZXZlciBhIHN0ZXAgaXMgc3VibWl0dGVkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzdGVwU3VibWl0dGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbmV2ZXIgYSBzdGVwIGluZGV4IGlzIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IHN0ZXBDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8V2l6YXJkU3RlcENoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBDaGFuZ2VkRXZlbnQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbmV2ZXIgc3RlcCB2YWxpZGF0aW9uIGZhaWxzXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IHN0ZXBJbnZhbGlkYXRlZDogRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBWYWxpZGF0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8V2l6YXJkU3RlcFZhbGlkYXRpb24+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbiB0aGUgd2l6YXJkIGlzIGZpbmlzaGVkXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbmlzaGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNvdXJjZSBzdHJpbmdzIGZvciB0aGUgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RyaW5nczogU3RyaW5ncyA9IE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIHdpemFyZCBpcyB2YWxpZGF0aW5nIGlucHV0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdmFsaWRhdGluZzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgb3Igbm90IGFsbCBvZiB0aGUgd2l6YXJkJ3Mgc3RlcHMgYXJlIGNvbXBsZXRlICYgJ0ZpbmlzaCcgaXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHdpemFyZElzRmluaXNoZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaXphcmQgbmF2aWdhdGlvbiBpbmZvcm1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5hdmlnYXRpb25JbmZvcm1hdGlvbjogV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFsZXJ0IGZvciBhIGRpc2FibGVkIHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbGVydDogUGFnZUFsZXJ0ID0ge1xyXG4gICAgICAgIHNldmVyaXR5OiBIZWFsdGhBbGVydFNldmVyaXR5LkluZm8sXHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5kaXNhYmxlZFN0ZXBBbGVydCxcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWRlIHBhbmUgdG9nZ2xlIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0V4cGFuZGVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGFnZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGFnZUluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcnhqcyBsaWZldGltZSBtYW5hZ2VyIGZvciB0aGUgY3VycmVudCBzdGVwXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3VycmVudFN0ZXBSeGpzTGlmZXRpbWU6IFJ4anNMaWZldGltZU1hbmFnZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgV2l6YXJkQ29tcG9uZW50IGNsYXNzLlxyXG4gICAgICogQHBhcmFtIGFwcENvbnRleHQgLSBUaGUgYXBwbGljYXRpb24gY29udGV4dCBzZXJ2aWNlIGNsYXNzLlxyXG4gICAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIC0gVGhlIGNoYW5nZSBkZXRlY3Rvci5cclxuICAgICAqIEBwYXJhbSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgLSBUaGUgY29tcG9uZW50IGZhY3RvcnkgcmVzb2x2ZXIuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYXBwQ29udGV4dDogQXBwQ29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XHJcbiAgICAgICAgdGhpcy5tb2RlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VE1vZGVsPigpO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkluZm9ybWF0aW9uID0gbmV3IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbih0aGlzKTtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdGFnZXNBcnJheUluZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdGVwSW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjdXJyZW50U3RhZ2UoKTogV2l6YXJkU3RhZ2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlc0FycmF5SW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXAoKTogV2l6YXJkU3RlcCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzW3RoaXMuc3RlcEluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGZpbmlzaCB2aWV3IG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZmluaXNoU3RlcCgpOiBXaXphcmRTdGVwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTdGVwc0ZvclN0YWdlKCk6IFdpemFyZFN0ZXBbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50IG9mIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXBDb21wb25lbnQoKTogR2VuZXJpY1dpemFyZFN0ZXBDb21wb25lbnQ8VE1vZGVsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmID8gdGhpcy5yZWYuaW5zdGFuY2UgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RlcE9mU3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RlcEluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9uTGFzdFN0ZXBPZkxhc3RTdGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbkxhc3RTdGFnZSAmJiB0aGlzLm9uTGFzdFN0ZXBPZlN0YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBzdGFnZSBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAgICBwdWJsaWMgc3RhZ2VJbmRleERpc2FibGVkKHN0YWdlOiBXaXphcmRTdGFnZSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RhZ2UuY29tcGxldGVkICYmIGluZGV4ICE9PSB0aGlzLnN0YWdlc0FycmF5SW5kZXggJiYgIXN0YWdlLmFjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgc3RlcCBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAgICBwdWJsaWMgc3RlcEluZGV4RGlzYWJsZWQoc3RlcDogV2l6YXJkU3RlcCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RlcC5jb21wbGV0ZWQgJiYgaW5kZXggIT09IHRoaXMuc3RlcEluZGV4ICYmICFzdGVwLmRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGV4dCBmb3IgdGhlIG5leHQgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmV4dEJ1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggLSAxID09PSB0aGlzLnN0ZXBJbmRleCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFnZUluZGV4ID09PSB0aGlzLnN0YWdlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hCdXR0b25UaXRsZSA/IHRoaXMuZmluaXNoQnV0dG9uVGl0bGUgOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmZpbmlzaDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLnN0YWdlTmFtZS5mb3JtYXQodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4ICsgMV0ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5uZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRleHQgZm9yIHRoZSBleGl0L2ZpbmlzaCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4aXRCdXR0b25UaXRsZSA/IHRoaXMuZXhpdEJ1dHRvblRpdGxlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5leGl0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgd2l6YXJkIGJ1dHRvbnNcclxuICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVCYWNrQnV0dG9uKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zdGFnZXNBcnJheUluZGV4ID09PSAwICYmIHRoaXMuc3RlcEluZGV4ID09PSAwKSB8fCB0aGlzLnZhbGlkYXRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNhYmxlTmV4dEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LnZhbGlkIHx8IHRoaXMudmFsaWRhdGluZyB8fCB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmlzQnVzeTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG93U2tpcEJ1dHRvbigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlICYmIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuY2FuQmVTa2lwcGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHN0ZXBJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1t2YWx1ZV0pIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcignV2l6YXJkQ29tcG9uZW50LnN0ZXBJbmRleCBzZXR0ZXInLCAnQXR0ZW1wdGVkIHRvIHNldCBzdGVwSW5kZXggdG8gaW52YWxpZCB2YWx1ZS4nLCB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRJbmRleDogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICBzdGVwczogdGhpcy5jdXJyZW50U3RhZ2Uuc3RlcHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbmRleCA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhbkNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0aGlzLmN1cnJlbnRTdGVwLmR5bmFtaWNTdGVwQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXNlcnZlTW9kZWxGb3JDdXJyZW50U3RlcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGFnZSBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHN0YWdlc0FycmF5SW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGFnZXNbdmFsdWVdKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5zdGFnZVN0ZXBJbmRleCBzZXR0ZXInLCAnQXR0ZW1wdGVkIHRvIHNldCBzdGFnZXNBcnJheUluZGV4IHRvIGludmFsaWQgdmFsdWUuJywge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0SW5kZXg6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuc3RhZ2VzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBjdXJyZW50IHN0YWdlIG9mIHRoZSB3aXphcmQgYXMgY29tcGxldGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RhZ2Ugd2FzIGNvbXBsZXRlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tcGxldGVDdXJyZW50U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RhZ2UuY29tcGxldGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFya3MgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkIGFzIGNvbXBsZXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0ZXAgd2FzIGNvbXBsZXRlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tcGxldGVDdXJyZW50U3RlcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCAmJiAhdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQgYXMgaW5jb21wbGV0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGVwIHdhcyBmYWlsZWQgYW5kIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZhaWxDdXJyZW50U3RlcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmZhaWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgd2l6YXJkIHRvIHRoZSBuZXh0IHZpc2libGUgc3RlcCBpbiB0aGUgbGlzdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uTGFzdFN0ZXBPZkxhc3RTdGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTmV4dFN0ZXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPT09IFdpemFyZFN0YXRlLkVudHJ5KSB7XHJcbiAgICAgICAgICAgIC8vIFN3aXRjaCB0byBhY3RpdmUgYWZ0ZXIgb3VyIGZpcnN0IG1vdmUgdG8gbmV4dCBvciBwcmV2aW91cyBzdGVwXHJcbiAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNhbGwgaXQgaGVyZSBiL2Mgc29tZSBtb2R1bGVzIHdpbGwgdXBkYXRlIHN0ZXBJbmRleCBhZnRlciBsb2FkaW5nLCB3aGljaCB0cmlnZ2VycyBlbWl0U3RlcENoYW5nZWQuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncyhXaXphcmRTdGF0ZS5BY3RpdmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgaW5kZXhpbmcgZm9yIG1vdmluZyB0byB0aGUgbmV4dCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmF2aWdhdGVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5vbkxhc3RTdGVwT2ZTdGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCsrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub25MYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4Kys7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIHRoZSB3aXphcmQgdG8gdGhlIHByZXZpb3VzICh2aXNpYmxlKSBzdGVwIGluIHRoZSBsaXN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZVRvUHJldmlvdXNTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1ByZXZpb3VzU3RlcCgpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1ByZXZpb3VzU3RlcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID09PSBXaXphcmRTdGF0ZS5FbnRyeSkge1xyXG4gICAgICAgICAgICAvLyBTd2l0Y2ggdG8gYWN0aXZlIGFmdGVyIG91ciBmaXJzdCBtb3ZlIHRvIG5leHQgb3IgcHJldmlvdXMgc3RlcFxyXG4gICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPSBXaXphcmRTdGF0ZS5BY3RpdmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgaW5kZXhpbmcgZm9yIG1vdmluZyBiYWNrIHRvIGxhc3Qgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5hdmlnYXRlVG9QcmV2aW91c1N0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RlcEluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YWdlSW5kZXggIT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4ID0gdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFRoZSBtZXRob2QgdGhhdCBmb2N1c2VzIG9uIGFuIGFjdGl2ZSBzdGVwIG9yIHN0YWdlXHJcbiAgICAqL1xyXG5cclxuICAgIHByaXZhdGUgZm9jdXNPbkFjdGl2ZVN0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmhpZGVTdGVwc0xpc3RTaWRlUGFuZSA/ICdzbWUtd2l6YXJkLXN0YWdlLWZvY3VzJyA6ICdzbWUtc3RlcC1hY3RpdmUnO1xyXG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoc2VsZWN0b3IpO1xyXG4gICAgICAgIGlmIChmb2N1c2FibGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+Zm9jdXNhYmxlWzBdKS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdG8gcnVuIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy53aXphcmRCdWlsZGVyLnN0YWdlcztcclxuICAgICAgICB0aGlzLmhlYWRpbmcgPSB0aGlzLndpemFyZEJ1aWxkZXIuaGVhZGluZztcclxuICAgICAgICB0aGlzLmV4aXRCdXR0b25UaXRsZSA9IHRoaXMud2l6YXJkQnVpbGRlci5leGl0QnV0dG9uVGl0bGU7XHJcbiAgICAgICAgdGhpcy5maW5pc2hCdXR0b25UaXRsZSA9IHRoaXMud2l6YXJkQnVpbGRlci5maW5pc2hCdXR0b25UaXRsZTtcclxuICAgICAgICB0aGlzLmZpbmlzaFZpZXcgPSB0aGlzLndpemFyZEJ1aWxkZXIuZmluaXNoVmlldztcclxuICAgICAgICB0aGlzLmhpZGVTdGVwc0xpc3RTaWRlUGFuZSA9IHRoaXMud2l6YXJkQnVpbGRlci5oaWRlU3RlcHNMaXN0U2lkZVBhbmU7XHJcbiAgICAgICAgdGhpcy5zaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZyA9IHRoaXMud2l6YXJkQnVpbGRlci5zaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZztcclxuICAgICAgICB0aGlzLmlzSW5QcmV2aWV3ID0gdGhpcy53aXphcmRCdWlsZGVyLmlzSW5QcmV2aWV3U3RhdGU7XHJcbiAgICAgICAgdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwID0gdGhpcy53aXphcmRCdWlsZGVyLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXA7XHJcbiAgICAgICAgdGhpcy5zdGFnZXNBcnJheUluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcblxyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zdGFnZXMpIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcignV2l6YXJkQ29tcG9uZW50Lm5nT25Jbml0JywgYFRoZSAnc3RhZ2VzJyBhcnJheSBpcyBub3QgdmFsaWQhLmAsIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzOiB0aGlzLnN0YWdlc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQubmdPbkluaXQnLCBgVGhlICdtb2RlbCcgYXR0cmlidXRlIGlzIG5vdCB2YWxpZC5gLCB7XHJcbiAgICAgICAgICAgICAgICBtb2RlbDogdGhpcy5tb2RlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsaWRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2l6YXJkSXNGaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGxlZE1vZGVsID0gdGhpcy5pbnRlcm5hbE1vZGVsIGFzIGFueTtcclxuICAgICAgICBpZiAoZmlsbGVkTW9kZWwud2l6YXJkSWQpIHtcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLndpemFyZElkID0gZmlsbGVkTW9kZWwud2l6YXJkSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWxsZWRNb2RlbC53aXphcmRUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS53aXphcmRUeXBlID0gZmlsbGVkTW9kZWwud2l6YXJkVHlwZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkluZm9ybWF0aW9uLnJlc2V0SGlzdG9yeSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncygpO1xyXG5cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgIT09IFdpemFyZFN0YXRlLkZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBzZXQgYXQgdGhpcyBwb2ludCBiL2MgdmlldyBpcyBkZXN0cnVjdGVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID0gV2l6YXJkU3RhdGUuRXhpdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBQb3B1bGF0ZSBvdXJzZWx2ZXMgYi9jIHRoZSBlbGVtZW50IHJlZiBpcyBkZXN0cnVjdGVkIGF0IHRoaXMgcG9pbnQuIENvbnRhaW5lciB0YWdzIHNob3VsZCBub3QgY2hhbmdlXHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXRUZWxlbWV0cnlEYXRhID0geyBjb250ZW50SWQ6ICdzbWUtd2l6YXJkJywgYXJlYU5hbWU6ICdXaXphcmRDb21wb25lbnQnIH07XHJcbiAgICAgICAgICAgIE1zZnRTbWUuZGVlcEFzc2lnbihleGl0VGVsZW1ldHJ5RGF0YSwgdGhpcy50ZWxlbWV0cnlEYXRhKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFjdGlvblR5cGUgQSBmb3IgQXV0byAoYWNjb3JkaW5nIHRvIEFXQSBkaWN0aW9uYXJ5KSB0byBkaWZmZXJlbnRpYXRlIGZyb20gQ0xcclxuICAgICAgICAgICAgU21lV2ViVGVsZW1ldHJ5LnRyYWNlQWN0aW9uKG51bGwsIHsgY29udGVudDogZXhpdFRlbGVtZXRyeURhdGEsIGFjdGlvblR5cGU6ICdBJyB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gb3IgY2xvc2Ugc2lkZSBwYW5lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0b2dnbGVQYW5lKCkge1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25CYWNrQ2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVRvUHJldmlvdXNTdGVwKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkFjdGl2ZVN0ZXAoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIHNraXAgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblNraXBDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsb2dJZkJ1c3lPckp1c3RDb21wbGV0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZU1vZGVsRm9yQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgRXhpdCAvIEZpbmlzaCBidXR0b24gaXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRXhpdENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nQ29uZmlybWF0aW9uKDxScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0PntcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ubm8sXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi55ZXMsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkV4aXQuRGlhbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5FeGl0LkRpYWxvZy50aXRsZVxyXG4gICAgICAgICAgICB9KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmV4aXQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBoYW5kbGVzIGNvbXBsZXRpb24gb2YgdGhlIHdpemFyZCxcclxuICAgICAqIGFuZCByZW5kZXJzIHRoZSBmaW5pc2hWaWV3IGlmIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGVwKCk7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGFnZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncyhXaXphcmRTdGF0ZS5GaW5pc2hlZCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbmlzaFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy53aXphcmRJc0ZpbmlzaGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Db21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gdGhpcy5maW5pc2hWaWV3LmR5bmFtaWNTdGVwQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBuZXh0IGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25OZXh0Q2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgLy8gaWYgZmluaXNoaW5nXHJcbiAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TdGVwVmFsaWRhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudFN0ZXAuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuU3RlcFZhbGlkYXRpb24oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBTdWJtaXR0ZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCB2YWxpZGF0ZXMgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBydW5TdGVwVmFsaWRhdGlvbigpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQudmFsaWRhdGUoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKHZhbGlkYXRpb25SZXN1bHQ6IFdpemFyZFN0ZXBWYWxpZGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbEN1cnJlbnRTdGVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwSW52YWxpZGF0ZWQuZW1pdCh2YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBoYW5kbGVzIGluZGV4ZXMgYW5kXHJcbiAgICAgKiBzdGVwIGFuZCBzdGFnZSBjb21wbGV0aW9uIGZvciB0aGUgTmV4dCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlTmV4dE5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGVwKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9uTGFzdFN0ZXBPZlN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVDdXJyZW50U3RhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb3ZlVG9OZXh0U3RlcCgpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb2N1c09uQWN0aXZlU3RlcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpIHtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHQuZnJhbWUuc2hvd0RpYWxvZ01lc3NhZ2UoPFJwY0RpYWxvZ01lc3NhZ2VSZXF1ZXN0PntcclxuICAgICAgICAgICAgYnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5PSy5hZmZpcm1hdGl2ZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5QcmV2aW91c1N0ZXAuRGlhbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLlByZXZpb3VzU3RlcC5EaWFsb2cudGl0bGVcclxuICAgICAgICB9KS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKG9uQ29uZmlybWF0aW9uQ2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcclxuICAgICAgICBjb25zdCBpc0J1c3kgPSB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmlzQnVzeTtcclxuICAgICAgICBjb25zdCBidXN5TWVzc2FnZSA9IHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuYnVzeU1lc3NhZ2U7XHJcbiAgICAgICAgaWYgKGlzQnVzeSkge1xyXG4gICAgICAgICAgICB0aGlzLmFwcENvbnRleHQuZnJhbWUuc2hvd0RpYWxvZ0NvbmZpcm1hdGlvbig8UnBjRGlhbG9nQ29uZmlybWF0aW9uUmVxdWVzdD57XHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLm5vLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ueWVzLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYnVzeU1lc3NhZ2UgPyBidXN5TWVzc2FnZSA6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuQnVzeS5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkJ1c3kuRGlhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgIH0pLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY29uZmlybWVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvbkNvbmZpcm1hdGlvbkNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiBhIHN0YWdlIGlzIGNsaWNrZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNsaWNrZWRTdGVwSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGNsaWNrZWQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblN0YWdlQ2xpY2soY2xpY2tlZFN0YWdlSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFN0YWdlID0gdGhpcy5zdGFnZXNbY2xpY2tlZFN0YWdlSW5kZXhdO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwICYmIGNsaWNrZWRTdGFnZUluZGV4IDw9IHRoaXMuc3RhZ2VJbmRleCkge1xyXG4gICAgICAgICAgICAvLyBzaG93IGRpYWxvZyB3aGVuIG9ubHkgY2xpY2tpbmcgYSBwcmV2aW91cyBzdGFnZVxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U3RhZ2UuY29tcGxldGVkICYmIHRoaXMuc3RhZ2VJbmRleCAhPT0gY2xpY2tlZFN0YWdlSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRTdGFnZS5jb21wbGV0ZWQgfHwgdGFyZ2V0U3RhZ2UuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCA9IGNsaWNrZWRTdGFnZUluZGV4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uY29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFnZUluZGV4ICsgMTsgaSA8IHRoaXMuc3RhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbaV0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbaV0uY29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gYSBzdGVwIGlzIGNsaWNrZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNsaWNrZWRTdGVwSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGNsaWNrZWQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU3RlcENsaWNrKGNsaWNrZWRTdGVwSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN0ZXBJc0FjdGl2ZSA9IHRoaXMuc3RlcEluZGV4ID09PSBjbGlja2VkU3RlcEluZGV4O1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFN0ZXAgPSB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1tjbGlja2VkU3RlcEluZGV4XTtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcCAmJiBjbGlja2VkU3RlcEluZGV4IDw9IHRoaXMuc3RlcEluZGV4KSB7XHJcbiAgICAgICAgICAgIC8vIHNob3cgZGlhbG9nIHdoZW4gb25seSBjbGlja2luZyBhIHByZXZpb3VzIHN0ZXBcclxuICAgICAgICAgICAgaWYgKCFzdGVwSXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldFN0ZXAgJiYgIXN0ZXBJc0FjdGl2ZSAmJiAodGFyZ2V0U3RlcC5jb21wbGV0ZWQgfHwgdGFyZ2V0U3RlcC5kaXNhYmxlZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSBjbGlja2VkU3RlcEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICgodGhpcy5jdXJyZW50U3RlcCB8fCB0aGlzLmZpbmlzaFN0ZXApICYmICghdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUgPSBuZXcgUnhqc0xpZmV0aW1lTWFuYWdlcigpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lLmFkZFN1YnNjcmlwdGlvbnMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LnN1Ym1pdHRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbk5leHRDbGljaygpKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQubW9kZWxDaGFuZ2VkLnN1YnNjcmliZShuZXdWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbE1vZGVsID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5vbldpemFyZE1vZGVsQ2hhbmdlZCh0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNsZWFuQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLmNsZWFuQ29tcG9uZW50KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhdmVzIHRoZSBzdGF0ZSBvZiB0aGUgbW9kZWwgYXQgdGhlIGJlZ2lubmluZ1xyXG4gICAgICogb2YgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwcmVzZXJ2ZU1vZGVsRm9yQ3VycmVudFN0ZXAoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcE1vZGVsQ29weSA9IE1zZnRTbWUuZGVlcENvcHkodGhpcy5pbnRlcm5hbE1vZGVsIHx8IHt9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgbW9kZWwgYmFjayB0byB0aGUgc3RhdGUgYXQgdGhlXHJcbiAgICAgKiBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZXN0b3JlTW9kZWxGb3JDdXJyZW50U3RlcCgpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdXJyZW50U3RlcE1vZGVsQ29weTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVtaXRTdGVwQ2hhbmdlZCgpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24ucHVzaEhpc3RvcnkoeyBzdGFnZTogdGhpcy5zdGFnZUluZGV4LCBzdGVwOiB0aGlzLnN0ZXBJbmRleCB9KTtcclxuXHJcbiAgICAgICAgLy8gZW1pdCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UuXHJcbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgc3RhZ2VJbmRleDogdGhpcy5zdGFnZUluZGV4LFxyXG4gICAgICAgICAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLmN1cnJlbnRTdGFnZSA/IHRoaXMuY3VycmVudFN0YWdlLm5hbWUgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3RlcEluZGV4OiB0aGlzLnN0ZXBJbmRleCxcclxuICAgICAgICAgICAgICAgIHN0ZXBOYW1lOiB0aGlzLmN1cnJlbnRTdGVwID8gdGhpcy5jdXJyZW50U3RlcC5uYW1lIDogbnVsbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGVsZW1ldHJ5IHN0cmluZyB1c2VkIHRvIHBvcHVsYXRlIHRlbGVtZXRyeSBhY3Rpb24gZXZlbnRzLiBVcGRhdGVzIHdpemFyZCBzdGF0ZSwgc3RlcCBpbmRleCwgYW5kIHRpbWUgc3RlcCBpbmRleCBzdGFydGVkLlxyXG4gICAgICogU3RlcCBpbmRleCBzdGFydCB0aW1lIHNob3VsZCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggZXZlbnQgdGltZXN0YW1wIHRvIG1vcmUgZWFzaWx5IGNhbGN1bGF0ZSB0aW1lIHNwZW50IGluIHN0YWdlLlxyXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBzdGF0ZSB0byBjaGFuZ2UgdG8sIGlmIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZVRlbGVtZXRyeVRhZ3Moc3RhdGU/OiBXaXphcmRTdGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9IHN0YXRlID8gc3RhdGUgOiB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGU7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0ZXBJbmRleE51bWJlciA9IGAke3RoaXMuc3RhZ2VJbmRleCArIDF9LiR7dGhpcy5zdGVwSW5kZXggKyAxfWA7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0ZXBJbmRleFN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpOyAvLyBrZWVwIHNhbWUgZm9ybWF0IGFzIGV2ZW50IHRpbWVzdGFtcFxyXG5cclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic21lLXdpemFyZCBzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1hcnJhbmdlLXN0YWNrLXYgc21lLXBvc2l0aW9uLWluc2V0LW5vbmVcIiBzbWVUZWxlbWV0cnlJZD0nc21lLXdpemFyZCcgc21lVGVsZW1ldHJ5QXJlYT1cIldpemFyZENvbXBvbmVudFwiPlxyXG4gIDwhLS0gSGVhZGluZyAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiaGVhZGluZyAmJiAhd2l6YXJkSXNGaW5pc2hlZFwiIFthdHRyLmFyaWEtcmVhZG9ubHldPXRydWVcclxuICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWJvcmRlci1ib3R0b20tc20gc21lLWJvcmRlci1ib3R0b20tY29sb3ItYmFzZS04MFwiPlxyXG4gICAgPGgzIGlkPVwic21lLXNoZWxsLXdpemFyZC1oZWFkaW5nLWlkXCI+e3sgaGVhZGluZyB9fTwvaDM+XHJcbiAgICA8c21lLWJhZGdlIHR5cGU9XCJwcmV2aWV3XCIgKm5nSWY9XCJpc0luUHJldmlld1wiIGNsYXNzPVwic21lLW1hcmdpbi1sZWZ0LXhzXCI+PC9zbWUtYmFkZ2U+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gU3RhZ2VzIC0tPlxyXG4gIDx1bCByb2xlPVwidGFibGlzdFwiICpuZ0lmPVwiIXdpemFyZElzRmluaXNoZWRcIlxyXG4gICAgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtYm9yZGVyLWJvdHRvbS1zbSBzbWUtYm9yZGVyLWJvdHRvbS1jb2xvci1iYXNlLTgwIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICA8bGlcclxuICAgICAgW25nQ2xhc3NdPVwieydzbWUtd2l6YXJkLXN0YWdlLWNvbXBsZXRlZCc6IHN0YWdlLmNvbXBsZXRlZCwgJ3NtZS13aXphcmQtc3RhZ2UtY2xpY2tlZCc6IHZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleCwgJ3NtZS13aXphcmQtc3RhZ2UtYWN0aXZlJzogc3RhZ2UuYWN0aXZlLCAnc21lLWRpc2FibGVkJzogdmFsICE9PSBzdGFnZXNBcnJheUluZGV4fVwiXHJcbiAgICAgIGNsYXNzPVwic21lLXdpemFyZC1zdGFnZSBzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1tYXJnaW4tcmlnaHQtbWRcIiByb2xlPVwidGFiXCJcclxuICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICAqbmdGb3I9XCJsZXQgc3RhZ2Ugb2Ygc3RhZ2VzOyBsZXQgdmFsID0gaW5kZXhcIiAoY2xpY2spPVwib25TdGFnZUNsaWNrKHZhbClcIj5cclxuICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInN0YWdlLm5hbWVcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiB0eXBlPVwiYnV0dG9uXCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIiBbc21lVGVsZW1ldHJ5SWRdPVwiJ3dpemFyZFN0YWdlJyArICh2YWwgKyAxKVwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS1hY3RpdmVdPVwidmFsID09PSBzdGFnZXNBcnJheUluZGV4XCJcclxuICAgICAgICBbY2xhc3Muc21lLXNlbGVjdGVkXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS13aXphcmQtc3RhZ2UtZm9jdXNdPVwidmFsID09PSBzdGFnZXNBcnJheUluZGV4XCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy5zdGFnZUluZGV4RGlzYWJsZWQoc3RhZ2UsIHZhbClcIiBbc21lVGVsZW1ldHJ5RGlzYWJsZUVsZW1lbnRdID0gXCJ0aGlzLnN0YWdlSW5kZXhEaXNhYmxlZChzdGFnZSwgdmFsKVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLXdpemFyZC1idXR0b24taXRlbSBzbWUtcGFkZGluZy12ZXJ0aWNhbC1zbSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLW5vbmUgc21lLWJ1dHRvbi1hdXRvLXdpZHRoXCI+XHJcbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydzbWUtaWNvbiBzbWUtaWNvbi1hY2NlcHQgc21lLWljb24tc2l6ZS14eHMnOiBzdGFnZS5jb21wbGV0ZWR9XCJcclxuICAgICAgICAgIGNsYXNzPVwic21lLXdpemFyZC1zdGFnZS1pbmRleCBzbWUtcG9zaXRpb24tZmxleC1ub25lXCI+XHJcbiAgICAgICAgICB7eyAhc3RhZ2UuY29tcGxldGVkID8gdmFsICsgMSA6ICcnIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3NtZS1mb250LWVtcGhhc2lzMSBzbWUtd2l6YXJkLXN0YWdlLWFjdGl2ZSc6IHZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleCB8fCBzdGFnZS5hY3RpdmUsICdzbWUtd2l6YXJkLXN0YWdlLWNvbXBsZXRlZCc6IHN0YWdlLmNvbXBsZXRlZCwgJ3NtZS1tYXJnaW4tbGVmdC14cyc6ICFzdGFnZS5jb21wbGV0ZWR9XCJcclxuICAgICAgICAgIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtZm9udC1ib2R5XCI+XHJcbiAgICAgICAgICB7e3N0YWdlLm5hbWV9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2xpPlxyXG4gIDwvdWw+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8gc21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiPlxyXG4gICAgPGRpdiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkICYmICFoaWRlU3RlcHNMaXN0U2lkZVBhbmVcIlxyXG4gICAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLXYgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtZm9jdXMtem9uZVxyXG4gICAgICBzbWUtYm9yZGVyLXJpZ2h0LXNtIHNtZS1ib3JkZXItcmlnaHQtY29sb3ItYmFzZS04MFwiPlxyXG4gICAgICA8dWwgcm9sZT1cInRhYmxpc3RcIiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkICYmICFoaWRlU3RlcHNMaXN0U2lkZVBhbmVcIlxyXG4gICAgICAgIGNsYXNzPVwic21lLXBhZGRpbmctdmVydGljYWwtc20gc21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiIFtuZ0NsYXNzXT1cInsnc21lLWxheW91dC1taW53aWR0aC1zbSc6IGlzRXhwYW5kZWR9XCI+XHJcbiAgICAgICAgPGxpIHJvbGU9XCJ0YWJcIiB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydzbWUtc2NoZW1lLWxpc3QtaXRlbSBzbWUtYWN0aXZlIHNtZS1jb2xvci1iYXNlLTUnOiBpbmRleCA9PT0gc3RlcEluZGV4fVwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXBhZGRpbmctbGVmdC1sZyBzbWUtcGFkZGluZy1yaWdodC14c1wiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImluZGV4ID09PSBzdGVwSW5kZXhcIiAqbmdGb3I9XCJsZXQgc3RlcCBvZiBnZXRTdGVwc0ZvclN0YWdlKCk7IGxldCBpbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgIChjbGljayk9XCJvblN0ZXBDbGljayhpbmRleClcIiBbdGl0bGVdPVwiaXNFeHBhbmRlZCA/IG51bGwgOiBzdGVwLm5hbWVcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpc0V4cGFuZGVkID8gbnVsbCA6IHN0ZXAubmFtZVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW25nQ2xhc3NdPVwieydzbWUtc3RlcC1hY3RpdmUnOiBpbmRleCA9PT0gc3RlcEluZGV4fVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic21lLXdpemFyZC1zdGVwIHNtZS1idXR0b24tdHJpZ2dlciBzbWUtd2l6YXJkLWJ1dHRvbi1pdGVtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbm9uZSBzbWUtcGFkZGluZy12ZXJ0aWNhbC14cyBzbWUtYnV0dG9uLWF1dG8td2lkdGhcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy5zdGVwSW5kZXhEaXNhYmxlZChzdGVwLCBpbmRleClcIiBbc21lVGVsZW1ldHJ5RGlzYWJsZUVsZW1lbnRdPVwidGhpcy5zdGVwSW5kZXhEaXNhYmxlZChzdGVwLCBpbmRleClcIlxyXG4gICAgICAgICAgICBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIFtzbWVUZWxlbWV0cnlJZF09XCInd2l6YXJkU3RlcCcgKyAoaW5kZXggKyAxKVwiID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1tYXJnaW4tcmlnaHQteHNcIj57eyBzdGFnZXNBcnJheUluZGV4ICsgMSB9fS57eyBpbmRleCArIDEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZVwiICpuZ0lmPVwiaXNFeHBhbmRlZFwiPnt7IHN0ZXAubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJzcGxpdC12aWV3LXRvZ2dsZSBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWxheW91dC1mbG9hdC1yaWdodFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZSgpXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNFeHBhbmRlZCA/IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLmNvbGxhcHNlU3RlcHNMaXN0IDogc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuZXhwYW5kU3RlcHNMaXN0XCJcclxuICAgICAgICAgIFt0aXRsZV09XCJpc0V4cGFuZGVkID8gc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuY29sbGFwc2VTdGVwc0xpc3QgOiBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5leHBhbmRTdGVwc0xpc3RcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb25cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzbWUtaWNvbi1jaGV2cm9uTGVmdCc6IGlzRXhwYW5kZWQsICdzbWUtaWNvbi1jaGV2cm9uUmlnaHQnOiAhaXNFeHBhbmRlZCB9XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU3RlcCBjb250ZW50IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLXBvc2l0aW9uLXN0cmV0Y2ggc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0b1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc21lLXBhZGRpbmctaW5zZXQtbGcnOiBjdXJyZW50U3RlcENvbXBvbmVudC5wYWRDb250ZW50c31cIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRTdGVwQ29tcG9uZW50LmRpc2FibGVkXCI+XHJcbiAgICAgICAgPHNtZS1wYWdlLWFsZXJ0LWJhciBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS1wYWdlLWFsZXJ0LWJhcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gRG9uJ3QgcmVtb3ZlIHRoaXMgbGluZSEgLS0+XHJcbiAgICAgIDwhLS0gVGhlIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGNvbXBvbmVudCBsb29rcyBmb3IgI2NvbnRhaW5lciB0byByZW5kZXIgaXRzZWxmIGFzIHRoZSBzaWJsaW5nLiEgLS0+XHJcbiAgICAgIDxkaXYgaWQ9XCJkeW5hbWljLWNvbnRlbnQtY29udGFpbmVyXCIgI2NvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRm9vdGVyIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZFwiXHJcbiAgICBjbGFzcz1cInNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYm9yZGVyLXRvcC1zbSBzbWUtYm9yZGVyLXRvcC1jb2xvci1iYXNlLTgwIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LWZsb2F0LWxlZnRcIiBbY2xhc3Muc21lLXBhZGRpbmctcmlnaHQteGxdPVwiIXZhbGlkYXRpbmdcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lXCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkUHJldlwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uQmFja0NsaWNrKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUJhY2tCdXR0b25cIlxyXG4gICAgICAgIFtjbGFzcy5zbWUtbGF5b3V0LW5vbmVdPVwiIWNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXBcIj57e3N0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmJhY2t9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1idXR0b24tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZE5leHRcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIChjbGljayk9XCJvbk5leHRDbGljaygpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZU5leHRCdXR0b25cIiBbc21lVGVsZW1ldHJ5RGlzYWJsZUVsZW1lbnRdPVwiZGlzYWJsZU5leHRCdXR0b25cIj57eyBuZXh0QnV0dG9uVGV4dCgpIH19PC9idXR0b24+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW5nXCIgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1sYXlvdXQtZmxvYXQtcmlnaHQgc21lLXBhZGRpbmctbGVmdC14bCBzbWUtcGFkZGluZy10b3AtbWRcIj5cclxuICAgICAgICA8c21lLWxvYWRpbmctd2hlZWwgc2l6ZT1cInNtYWxsXCI+PC9zbWUtbG9hZGluZy13aGVlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJzbWUtZm9jdXMtem9uZVwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZFNraXBcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIChjbGljayk9XCJvblNraXBDbGljaygpXCJcclxuICAgICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhc2hvd1NraXBCdXR0b25cIj57e3N0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnNraXB9fTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1sYXlvdXQtZmxvYXQtcmlnaHRcIiB0eXBlPVwiYnV0dG9uXCIgc21lVGVsZW1ldHJ5SWQ9XCJ3aXphcmRFeGl0XCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIlxyXG4gICAgICAoY2xpY2spPVwib25FeGl0Q2xpY2soKVwiPnt7IGV4aXRCdXR0b25UZXh0KCkgfX08L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
908
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3dpemFyZC93aXphcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvd2l6YXJkL3dpemFyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDMUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN6RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUsxRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0scUNBQXFDLENBQUM7QUFPckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7O0lDeEIxRSxnQ0FBcUY7OztJQUh2RiwrQkFDNEo7SUFDMUosOEJBQXFDO0lBQUEsWUFBYTtJQUFBLGlCQUFLO0lBQ3ZELG1GQUFxRjtJQUN2RixpQkFBTTs7O0lBSm9DLHFDQUF5QjtJQUU1Qixl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LENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0MsQ0FBQzs7aUdBenlCUSxlQUFlO3VFQUFmLGVBQWU7UUM3RDVCLDhCQUF1SjtRQUVySixnRUFJTTtRQUdOLDhEQXdCSztRQUVMLDhCQUFrRjtRQUNoRixnRUE4Qk07UUFHTiw4QkFDeUU7UUFDdkUsZ0VBRU07UUFHTiw0QkFBcUQ7UUFDdkQsaUJBQU07UUFDUixpQkFBTTtRQUVOLGtFQWdCTTtRQUNSLGlCQUFNOztRQS9GRSxlQUFrQztRQUFsQywyREFBa0M7UUFPcEIsZUFBdUI7UUFBdkIsNENBQXVCO1FBMkJuQyxlQUFpRDtRQUFqRCwwRUFBaUQ7UUFrQ3JELGVBQXNFO1FBQXRFLDBGQUFzRTtRQUNoRSxlQUFtQztRQUFuQyx3REFBbUM7UUFTdkMsZUFBdUI7UUFBdkIsNENBQXVCOzt1RkRuQmxCLGVBQWU7Y0FKM0IsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixXQUFXLEVBQUUseUJBQXlCO2FBQ3pDOzJJQVNjLEtBQUs7a0JBRGYsS0FBSztZQStCQyxhQUFhO2tCQURuQixLQUFLO1lBaUVVLFdBQVc7a0JBRDFCLE1BQU07WUFPUyxJQUFJO2tCQURuQixNQUFNO1lBT1MsYUFBYTtrQkFENUIsTUFBTTtZQU9TLFdBQVc7a0JBRDFCLE1BQU07WUFPUyxlQUFlO2tCQUQ5QixNQUFNO1lBT1MsUUFBUTtrQkFEdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJ4anNMaWZldGltZU1hbmFnZXIgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2Uvcnhqcy1saWZldGltZS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IFNtZVdlYlRlbGVtZXRyeSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3Mvc21lLXdlYi10ZWxlbWV0cnknO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudE1vZHVsZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvbWFuaWZlc3QvZW52aXJvbm1lbnQtbW9kdWxlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0LFxyXG4gICAgUnBjRGlhbG9nTWVzc2FnZVJlcXVlc3RcclxufSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9kaWFsb2cvcnBjLWRpYWxvZy1tb2RlbCc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvU3RyaW5ncyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21tb24vZHluYW1pYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIZWFsdGhBbGVydFNldmVyaXR5LCBQYWdlQWxlcnQgfSBmcm9tICcuLi9wYWdlLWFsZXJ0LWJhci9tb2RlbHMvcGFnZS1hbGVydCc7XHJcbmltcG9ydCB7IFdpemFyZE1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLW1vZGVsJztcclxuaW1wb3J0IHsgV2l6YXJkTmF2aWdhdGlvbkludGVyZmFjZSB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1uYXZpZ2F0aW9uLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IFdpemFyZFN0YWdlIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0YWdlJztcclxuaW1wb3J0IHsgV2l6YXJkU3RlcCB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1zdGVwJztcclxuaW1wb3J0IHsgV2l6YXJkU3RlcENoYW5nZWRFdmVudCB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1zdGVwLWNoYW5nZWQtZXZlbnQnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwVmFsaWRhdGlvbiB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1zdGVwLXZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBXaXphcmRCdWlsZGVyIH0gZnJvbSAnLi93aXphcmQtYnVpbGRlcic7XHJcbmltcG9ydCB7IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbiB9IGZyb20gJy4vd2l6YXJkLW5hdmlnYXRpb24taW5mb3JtYXRpb24nO1xyXG5pbXBvcnQgeyBHZW5lcmljV2l6YXJkU3RlcENvbXBvbmVudCB9IGZyb20gJy4vd2l6YXJkLXN0ZXAvd2l6YXJkLXN0ZXAuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBXaGF0ZXZlciBzdGF0ZSB0aGUgd2l6YXJkIGlzIGluXHJcbiAqL1xyXG5lbnVtIFdpemFyZFN0YXRlIHtcclxuICAgIEV4aXQgPSAnRXhpdCcsXHJcbiAgICBFbnRyeSA9ICdFbnRyeScsXHJcbiAgICBGaW5pc2hlZCA9ICdGaW5pc2hlZCcsXHJcbiAgICBBY3RpdmUgPSAnQWN0aXZlJ1xyXG59XHJcblxyXG4vKipcclxuICogRGF0YSB0byBjb2xsZWN0IGluIHdpemFyZFxyXG4gKi9cclxuY2xhc3MgV2l6YXJkVGVsZW1ldHJ5RGF0YSB7XHJcbiAgICBzdGVwSW5kZXhOdW1iZXI6IHN0cmluZztcclxuICAgIHN0ZXBJbmRleFN0YXJ0VGltZTogc3RyaW5nO1xyXG4gICAgZW50cnlQb2ludD86IHN0cmluZztcclxuICAgIHdpemFyZFR5cGU/OiBzdHJpbmc7XHJcbiAgICB3aXphcmRJZD86IHN0cmluZztcclxuICAgIHN0YXRlPzogV2l6YXJkU3RhdGU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgY29tcG9uZW50IGNsYXNzIGRlZmluaXRpb24gZm9yIHRoZSB3aXphcmQgY29tcG9uZW50LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS13aXphcmQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemFyZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFdpemFyZENvbXBvbmVudDxUTW9kZWwgZXh0ZW5kcyBXaXphcmRNb2RlbD5cclxuICAgIGV4dGVuZHMgRHluYW1pY0NvbXBvbmVudEJhc2U8R2VuZXJpY1dpemFyZFN0ZXBDb21wb25lbnQ8VE1vZGVsPj5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBXaXphcmROYXZpZ2F0aW9uSW50ZXJmYWNlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRhdGEgbW9kZWwgZm9yIHNoYXJpbmcgZGF0YSBhY3Jvc3MgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgbW9kZWwodmFsdWU6IFRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxNb2RlbCA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50Lm9uV2l6YXJkTW9kZWxDaGFuZ2VkKHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGRhdGEgbW9kZWwgZm9yIHNoYXJpbmcgZGF0YSBhY3Jvc3MgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBtb2RlbCgpOiBUTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsTW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIG1vZGVsIHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxNb2RlbDogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgY29weSBvZiBtb2RlbCB0byByb2xsYmFjayB0byB3aGVuIHRoZVxyXG4gICAgICogY3VycmVudCBzdGVwIGlzIHNraXBwZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3VycmVudFN0ZXBNb2RlbENvcHk6IFRNb2RlbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3aXphcmRCdWlsZGVyIHVzZWQgdG8gaW5zdGFudGlhdGUgdGhlIGtleSB3aXphcmQgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB3aXphcmRCdWlsZGVyOiBXaXphcmRCdWlsZGVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0YWdlcyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhZ2VzOiBXaXphcmRTdGFnZVtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlYWRpbmcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhlYWRpbmc6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgZXhpdCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgZmluaXNoIGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmlzaEJ1dHRvblRpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZmluaXNoIHZpZXcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmlzaFZpZXc6IFdpemFyZFN0ZXA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSBzdGVwcyBsaXN0IHNpZGUgcGFuZSB3aWxsIGJlIHZpc2libGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoaWRlU3RlcHNMaXN0U2lkZVBhbmU6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aWxsIGJlIHNob3duIHVwb24gJ0V4aXQnIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGlzIGluIHByZXZpZXcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0luUHJldmlldzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIHdpemFyZCBjYW4gbmF2aWdhdGUgdG8gYSBwcmV2aW91cyBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGVtZXRyeSBkYXRhIGNvbGxlY3RlZCB3aGlsZSBuYXZpZ2F0aW5nIHRocm91Z2ggd2l6YXJkLiBCeSBkZWZhdWx0LCBzdGFydCBhdCAxLjEgc3RlcCBpbmRleCBhbmRcclxuICAgICAqIEVudHJ5IHN0YXRlLlxyXG4gICAgICogS2VlcCBzYW1lIGZvcm1hdCBhcyB0ZWxlbWV0cnkgZXZlbnQgdGltZXN0YW1wXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0ZWxlbWV0cnlEYXRhOiBXaXphcmRUZWxlbWV0cnlEYXRhID0ge1xyXG4gICAgICAgIHN0ZXBJbmRleE51bWJlcjogJzEuMScsXHJcbiAgICAgICAgc3RlcEluZGV4U3RhcnRUaW1lOiAobmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICBlbnRyeVBvaW50OiBFbnZpcm9ubWVudE1vZHVsZS5jcmVhdGVFbnRyeXBvaW50SWQoTXNmdFNtZS5zZWxmKCkuSW5pdC5tb2R1bGVOYW1lLFxyXG4gICAgICAgICAgICBNc2Z0U21lLnNlbGYoKS5Jbml0LmVudHJ5UG9pbnROYW1lKSxcclxuICAgICAgICBzdGF0ZTogV2l6YXJkU3RhdGUuRW50cnlcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyB3aGVuIHRoZSB3aXphcmQgbW9kZWwgY2hhbmdlc1xyXG4gICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VE1vZGVsPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuIHRoZSB3aXphcmQgaXMgZXhpdGVkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBleGl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbmV2ZXIgYSBzdGVwIGlzIHN1Ym1pdHRlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RlcFN1Ym1pdHRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW5ldmVyIGEgc3RlcCBpbmRleCBpcyBjaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzdGVwQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBDaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwQ2hhbmdlZEV2ZW50PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW5ldmVyIHN0ZXAgdmFsaWRhdGlvbiBmYWlsc1xyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzdGVwSW52YWxpZGF0ZWQ6IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwVmFsaWRhdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBWYWxpZGF0aW9uPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW4gdGhlIHdpemFyZCBpcyBmaW5pc2hlZFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBmaW5pc2hlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb3VyY2Ugc3RyaW5ncyBmb3IgdGhlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0cmluZ3M6IFN0cmluZ3MgPSBNc2Z0U21lLmdldFN0cmluZ3M8U3RyaW5ncz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSB3aXphcmQgaXMgdmFsaWRhdGluZyBpbnB1dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbGlkYXRpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBhbGwgb2YgdGhlIHdpemFyZCdzIHN0ZXBzIGFyZSBjb21wbGV0ZSAmICdGaW5pc2gnIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3aXphcmRJc0ZpbmlzaGVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2l6YXJkIG5hdmlnYXRpb24gaW5mb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuYXZpZ2F0aW9uSW5mb3JtYXRpb246IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhbGVydCBmb3IgYSBkaXNhYmxlZCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWxlcnQ6IFBhZ2VBbGVydCA9IHtcclxuICAgICAgICBzZXZlcml0eTogSGVhbHRoQWxlcnRTZXZlcml0eS5JbmZvLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuZGlzYWJsZWRTdGVwQWxlcnQsXHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2lkZSBwYW5lIHRvZ2dsZSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNFeHBhbmRlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhZ2VJbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJ4anMgbGlmZXRpbWUgbWFuYWdlciBmb3IgdGhlIGN1cnJlbnQgc3RlcFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lOiBSeGpzTGlmZXRpbWVNYW5hZ2VyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFdpemFyZENvbXBvbmVudCBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBhcHBDb250ZXh0IC0gVGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgc2VydmljZSBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiAtIFRoZSBjaGFuZ2UgZGV0ZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyIC0gVGhlIGNvbXBvbmVudCBmYWN0b3J5IHJlc29sdmVyLlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFwcENvbnRleHQ6IEFwcENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRNb2RlbD4oKTtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdGFnZXNBcnJheUluZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdGVwSW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjdXJyZW50U3RhZ2UoKTogV2l6YXJkU3RhZ2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlc0FycmF5SW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXAoKTogV2l6YXJkU3RlcCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzW3RoaXMuc3RlcEluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGZpbmlzaCB2aWV3IG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZmluaXNoU3RlcCgpOiBXaXphcmRTdGVwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTdGVwc0ZvclN0YWdlKCk6IFdpemFyZFN0ZXBbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50IG9mIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXBDb21wb25lbnQoKTogR2VuZXJpY1dpemFyZFN0ZXBDb21wb25lbnQ8VE1vZGVsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmID8gdGhpcy5yZWYuaW5zdGFuY2UgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RlcE9mU3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RlcEluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9uTGFzdFN0ZXBPZkxhc3RTdGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbkxhc3RTdGFnZSAmJiB0aGlzLm9uTGFzdFN0ZXBPZlN0YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBzdGFnZSBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAgICBwdWJsaWMgc3RhZ2VJbmRleERpc2FibGVkKHN0YWdlOiBXaXphcmRTdGFnZSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RhZ2UuY29tcGxldGVkICYmIGluZGV4ICE9PSB0aGlzLnN0YWdlc0FycmF5SW5kZXggJiYgIXN0YWdlLmFjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgc3RlcCBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAgICBwdWJsaWMgc3RlcEluZGV4RGlzYWJsZWQoc3RlcDogV2l6YXJkU3RlcCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RlcC5jb21wbGV0ZWQgJiYgaW5kZXggIT09IHRoaXMuc3RlcEluZGV4ICYmICFzdGVwLmRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGV4dCBmb3IgdGhlIG5leHQgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmV4dEJ1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggLSAxID09PSB0aGlzLnN0ZXBJbmRleCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFnZUluZGV4ID09PSB0aGlzLnN0YWdlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hCdXR0b25UaXRsZSA/IHRoaXMuZmluaXNoQnV0dG9uVGl0bGUgOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmZpbmlzaDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLnN0YWdlTmFtZS5mb3JtYXQodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4ICsgMV0ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5uZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRleHQgZm9yIHRoZSBleGl0L2ZpbmlzaCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4aXRCdXR0b25UaXRsZSA/IHRoaXMuZXhpdEJ1dHRvblRpdGxlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5leGl0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgd2l6YXJkIGJ1dHRvbnNcclxuICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVCYWNrQnV0dG9uKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zdGFnZXNBcnJheUluZGV4ID09PSAwICYmIHRoaXMuc3RlcEluZGV4ID09PSAwKSB8fCB0aGlzLnZhbGlkYXRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNhYmxlTmV4dEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LnZhbGlkIHx8IHRoaXMudmFsaWRhdGluZyB8fCB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmlzQnVzeTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG93U2tpcEJ1dHRvbigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlICYmIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuY2FuQmVTa2lwcGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHN0ZXBJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1t2YWx1ZV0pIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcignV2l6YXJkQ29tcG9uZW50LnN0ZXBJbmRleCBzZXR0ZXInLCAnQXR0ZW1wdGVkIHRvIHNldCBzdGVwSW5kZXggdG8gaW52YWxpZCB2YWx1ZS4nLCB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRJbmRleDogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICBzdGVwczogdGhpcy5jdXJyZW50U3RhZ2Uuc3RlcHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbmRleCA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhbkNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0aGlzLmN1cnJlbnRTdGVwLmR5bmFtaWNTdGVwQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXNlcnZlTW9kZWxGb3JDdXJyZW50U3RlcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGFnZSBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHN0YWdlc0FycmF5SW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGFnZXNbdmFsdWVdKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5zdGFnZVN0ZXBJbmRleCBzZXR0ZXInLCAnQXR0ZW1wdGVkIHRvIHNldCBzdGFnZXNBcnJheUluZGV4IHRvIGludmFsaWQgdmFsdWUuJywge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0SW5kZXg6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuc3RhZ2VzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBjdXJyZW50IHN0YWdlIG9mIHRoZSB3aXphcmQgYXMgY29tcGxldGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RhZ2Ugd2FzIGNvbXBsZXRlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tcGxldGVDdXJyZW50U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RhZ2UuY29tcGxldGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFya3MgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkIGFzIGNvbXBsZXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0ZXAgd2FzIGNvbXBsZXRlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tcGxldGVDdXJyZW50U3RlcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCAmJiAhdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQgYXMgaW5jb21wbGV0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGVwIHdhcyBmYWlsZWQgYW5kIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZhaWxDdXJyZW50U3RlcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmZhaWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgd2l6YXJkIHRvIHRoZSBuZXh0IHZpc2libGUgc3RlcCBpbiB0aGUgbGlzdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uTGFzdFN0ZXBPZkxhc3RTdGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTmV4dFN0ZXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPT09IFdpemFyZFN0YXRlLkVudHJ5KSB7XHJcbiAgICAgICAgICAgIC8vIFN3aXRjaCB0byBhY3RpdmUgYWZ0ZXIgb3VyIGZpcnN0IG1vdmUgdG8gbmV4dCBvciBwcmV2aW91cyBzdGVwXHJcbiAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNhbGwgaXQgaGVyZSBiL2Mgc29tZSBtb2R1bGVzIHdpbGwgdXBkYXRlIHN0ZXBJbmRleCBhZnRlciBsb2FkaW5nLCB3aGljaCB0cmlnZ2VycyBlbWl0U3RlcENoYW5nZWQuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncyhXaXphcmRTdGF0ZS5BY3RpdmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgaW5kZXhpbmcgZm9yIG1vdmluZyB0byB0aGUgbmV4dCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmF2aWdhdGVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5vbkxhc3RTdGVwT2ZTdGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCsrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub25MYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4Kys7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgd2l6YXJkIHRvIHRoZSBwcmV2aW91cyAodmlzaWJsZSkgc3RlcCBpbiB0aGUgbGlzdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVUb1ByZXZpb3VzU3RlcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9PT0gV2l6YXJkU3RhdGUuRW50cnkpIHtcclxuICAgICAgICAgICAgLy8gU3dpdGNoIHRvIGFjdGl2ZSBhZnRlciBvdXIgZmlyc3QgbW92ZSB0byBuZXh0IG9yIHByZXZpb3VzIHN0ZXBcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID0gV2l6YXJkU3RhdGUuQWN0aXZlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdGhlIGluZGV4aW5nIGZvciBtb3ZpbmcgYmFjayB0byBsYXN0IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuYXZpZ2F0ZVRvUHJldmlvdXNTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0ZXBJbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFnZUluZGV4ICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4LS07XHJcblxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uc3RlcHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4LS07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLnN0ZXBzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLmNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXgtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogVGhlIG1ldGhvZCB0aGF0IGZvY3VzZXMgb24gYW4gYWN0aXZlIHN0ZXAgb3Igc3RhZ2VcclxuICAgICovXHJcblxyXG4gICAgcHJpdmF0ZSBmb2N1c09uQWN0aXZlU3RlcCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuaGlkZVN0ZXBzTGlzdFNpZGVQYW5lID8gJ3NtZS13aXphcmQtc3RhZ2UtZm9jdXMnIDogJ3NtZS1zdGVwLWFjdGl2ZSc7XHJcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShzZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKGZvY3VzYWJsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICg8SFRNTElucHV0RWxlbWVudD5mb2N1c2FibGVbMF0pLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0byBydW4gd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24gPSBuZXcgV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uKHRoaXMsIHRoaXMud2l6YXJkQnVpbGRlcik7XHJcbiAgICAgICAgdGhpcy5zdGFnZXMgPSB0aGlzLndpemFyZEJ1aWxkZXIuc3RhZ2VzO1xyXG4gICAgICAgIHRoaXMuaGVhZGluZyA9IHRoaXMud2l6YXJkQnVpbGRlci5oZWFkaW5nO1xyXG4gICAgICAgIHRoaXMuZXhpdEJ1dHRvblRpdGxlID0gdGhpcy53aXphcmRCdWlsZGVyLmV4aXRCdXR0b25UaXRsZTtcclxuICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvblRpdGxlID0gdGhpcy53aXphcmRCdWlsZGVyLmZpbmlzaEJ1dHRvblRpdGxlO1xyXG4gICAgICAgIHRoaXMuZmluaXNoVmlldyA9IHRoaXMud2l6YXJkQnVpbGRlci5maW5pc2hWaWV3O1xyXG4gICAgICAgIHRoaXMuaGlkZVN0ZXBzTGlzdFNpZGVQYW5lID0gdGhpcy53aXphcmRCdWlsZGVyLmhpZGVTdGVwc0xpc3RTaWRlUGFuZTtcclxuICAgICAgICB0aGlzLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nID0gdGhpcy53aXphcmRCdWlsZGVyLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nO1xyXG4gICAgICAgIHRoaXMuaXNJblByZXZpZXcgPSB0aGlzLndpemFyZEJ1aWxkZXIuaXNJblByZXZpZXdTdGF0ZTtcclxuICAgICAgICB0aGlzLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXAgPSB0aGlzLndpemFyZEJ1aWxkZXIuY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcDtcclxuICAgICAgICB0aGlzLnN0YWdlc0FycmF5SW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMuc3RlcEluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YWdlcykge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQubmdPbkluaXQnLCBgVGhlICdzdGFnZXMnIGFycmF5IGlzIG5vdCB2YWxpZCEuYCwge1xyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuc3RhZ2VzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5uZ09uSW5pdCcsIGBUaGUgJ21vZGVsJyBhdHRyaWJ1dGUgaXMgbm90IHZhbGlkLmAsIHtcclxuICAgICAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53aXphcmRJc0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsbGVkTW9kZWwgPSB0aGlzLmludGVybmFsTW9kZWwgYXMgYW55O1xyXG4gICAgICAgIGlmIChmaWxsZWRNb2RlbC53aXphcmRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEud2l6YXJkSWQgPSBmaWxsZWRNb2RlbC53aXphcmRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGxlZE1vZGVsLndpemFyZFR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLndpemFyZFR5cGUgPSBmaWxsZWRNb2RlbC53aXphcmRUeXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24ucmVzZXRIaXN0b3J5KCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKCk7XHJcblxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSAhPT0gV2l6YXJkU3RhdGUuRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IHNldCBhdCB0aGlzIHBvaW50IGIvYyB2aWV3IGlzIGRlc3RydWN0ZWQuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPSBXaXphcmRTdGF0ZS5FeGl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFBvcHVsYXRlIG91cnNlbHZlcyBiL2MgdGhlIGVsZW1lbnQgcmVmIGlzIGRlc3RydWN0ZWQgYXQgdGhpcyBwb2ludC4gQ29udGFpbmVyIHRhZ3Mgc2hvdWxkIG5vdCBjaGFuZ2VcclxuICAgICAgICAgICAgY29uc3QgZXhpdFRlbGVtZXRyeURhdGEgPSB7IGNvbnRlbnRJZDogJ3NtZS13aXphcmQnLCBhcmVhTmFtZTogJ1dpemFyZENvbXBvbmVudCcgfTtcclxuICAgICAgICAgICAgTXNmdFNtZS5kZWVwQXNzaWduKGV4aXRUZWxlbWV0cnlEYXRhLCB0aGlzLnRlbGVtZXRyeURhdGEpO1xyXG5cclxuICAgICAgICAgICAgLy8gYWN0aW9uVHlwZSBBIGZvciBBdXRvIChhY2NvcmRpbmcgdG8gQVdBIGRpY3Rpb25hcnkpIHRvIGRpZmZlcmVudGlhdGUgZnJvbSBDTFxyXG4gICAgICAgICAgICBTbWVXZWJUZWxlbWV0cnkudHJhY2VBY3Rpb24obnVsbCwgeyBjb250ZW50OiBleGl0VGVsZW1ldHJ5RGF0YSwgYWN0aW9uVHlwZTogJ0EnIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBvciBjbG9zZSBzaWRlIHBhbmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZVBhbmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGJhY2sgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkJhY2tDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsb2dJZkJ1c3lPckp1c3RDb21wbGV0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c09uQWN0aXZlU3RlcCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgc2tpcCBidXR0b24gaXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU2tpcENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXN0b3JlTW9kZWxGb3JDdXJyZW50U3RlcCgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBFeGl0IC8gRmluaXNoIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25FeGl0Q2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0V4aXRDb25maXJtYXRpb25EaWFsb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBDb250ZXh0LmZyYW1lLnNob3dEaWFsb2dDb25maXJtYXRpb24oPFJwY0RpYWxvZ0NvbmZpcm1hdGlvblJlcXVlc3Q+e1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5ubyxcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnllcyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuRXhpdC5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkV4aXQuRGlhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvbmZpcm1lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpdC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGhhbmRsZXMgY29tcGxldGlvbiBvZiB0aGUgd2l6YXJkLFxyXG4gICAgICogYW5kIHJlbmRlcnMgdGhlIGZpbmlzaFZpZXcgaWYgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0YWdlKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKFdpemFyZFN0YXRlLkZpbmlzaGVkKTtcclxuXHJcbiAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmluaXNoVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLndpemFyZElzRmluaXNoZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhbkNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0aGlzLmZpbmlzaFZpZXcuZHluYW1pY1N0ZXBDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIG5leHQgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbk5leHRDbGljaygpOiB2b2lkIHtcclxuICAgICAgICAvLyBpZiBmaW5pc2hpbmdcclxuICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJ1blN0ZXBWYWxpZGF0aW9uKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TdGVwVmFsaWRhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcFN1Ym1pdHRlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IHZhbGlkYXRlcyBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJ1blN0ZXBWYWxpZGF0aW9uKCkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC52YWxpZGF0ZSgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAodmFsaWRhdGlvblJlc3VsdDogV2l6YXJkU3RlcFZhbGlkYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWlsQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbnZhbGlkYXRlZC5lbWl0KHZhbGlkYXRpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGhhbmRsZXMgaW5kZXhlcyBhbmRcclxuICAgICAqIHN0ZXAgYW5kIHN0YWdlIGNvbXBsZXRpb24gZm9yIHRoZSBOZXh0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVOZXh0TmF2aWdhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0ZXAoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mU3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vdmVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvY3VzT25BY3RpdmVTdGVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93UHJldmlvdXNTdGVwRGlhbG9nKCkge1xyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nTWVzc2FnZSg8UnBjRGlhbG9nTWVzc2FnZVJlcXVlc3Q+e1xyXG4gICAgICAgICAgICBidXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLk9LLmFmZmlybWF0aXZlLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLlByZXZpb3VzU3RlcC5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuUHJldmlvdXNTdGVwLkRpYWxvZy50aXRsZVxyXG4gICAgICAgIH0pLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUob25Db25maXJtYXRpb25DYWxsYmFjazogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIGNvbnN0IGlzQnVzeSA9IHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuaXNCdXN5O1xyXG4gICAgICAgIGNvbnN0IGJ1c3lNZXNzYWdlID0gdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5idXN5TWVzc2FnZTtcclxuICAgICAgICBpZiAoaXNCdXN5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nQ29uZmlybWF0aW9uKDxScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0PntcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ubm8sXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi55ZXMsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBidXN5TWVzc2FnZSA/IGJ1c3lNZXNzYWdlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5CdXN5LkRpYWxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuQnVzeS5EaWFsb2cudGl0bGVcclxuICAgICAgICAgICAgfSkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtYXRpb25DYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIGEgc3RhZ2UgaXMgY2xpY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2xpY2tlZFN0ZXBJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgY2xpY2tlZCBzdGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU3RhZ2VDbGljayhjbGlja2VkU3RhZ2VJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U3RhZ2UgPSB0aGlzLnN0YWdlc1tjbGlja2VkU3RhZ2VJbmRleF07XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXAgJiYgY2xpY2tlZFN0YWdlSW5kZXggPD0gdGhpcy5zdGFnZUluZGV4KSB7XHJcbiAgICAgICAgICAgIC8vIHNob3cgZGlhbG9nIHdoZW4gb25seSBjbGlja2luZyBhIHByZXZpb3VzIHN0YWdlXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRTdGFnZS5jb21wbGV0ZWQgJiYgdGhpcy5zdGFnZUluZGV4ICE9PSBjbGlja2VkU3RhZ2VJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJldmlvdXNTdGVwRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFN0YWdlLmNvbXBsZXRlZCB8fCB0YXJnZXRTdGFnZS5hY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4ID0gY2xpY2tlZFN0YWdlSW5kZXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWdlSW5kZXggKyAxOyBpIDwgdGhpcy5zdGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1tpXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1tpXS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiBhIHN0ZXAgaXMgY2xpY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2xpY2tlZFN0ZXBJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgY2xpY2tlZCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25TdGVwQ2xpY2soY2xpY2tlZFN0ZXBJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc3RlcElzQWN0aXZlID0gdGhpcy5zdGVwSW5kZXggPT09IGNsaWNrZWRTdGVwSW5kZXg7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U3RlcCA9IHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzW2NsaWNrZWRTdGVwSW5kZXhdO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwICYmIGNsaWNrZWRTdGVwSW5kZXggPD0gdGhpcy5zdGVwSW5kZXgpIHtcclxuICAgICAgICAgICAgLy8gc2hvdyBkaWFsb2cgd2hlbiBvbmx5IGNsaWNraW5nIGEgcHJldmlvdXMgc3RlcFxyXG4gICAgICAgICAgICBpZiAoIXN0ZXBJc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJldmlvdXNTdGVwRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U3RlcCAmJiAhc3RlcElzQWN0aXZlICYmICh0YXJnZXRTdGVwLmNvbXBsZXRlZCB8fCB0YXJnZXRTdGVwLmRpc2FibGVkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IGNsaWNrZWRTdGVwSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjcmVhdGVDb21wb25lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmN1cnJlbnRTdGVwIHx8IHRoaXMuZmluaXNoU3RlcCkgJiYgKCF0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSA9IG5ldyBSeGpzTGlmZXRpbWVNYW5hZ2VyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUuYWRkU3Vic2NyaXB0aW9ucyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuc3VibWl0dGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uTmV4dENsaWNrKCkpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5tb2RlbENoYW5nZWQuc3Vic2NyaWJlKG5ld1ZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsTW9kZWwgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50Lm9uV2l6YXJkTW9kZWxDaGFuZ2VkKHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2xlYW5Db21wb25lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIuY2xlYW5Db21wb25lbnQoKTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBtb2RlbCBhdCB0aGUgYmVnaW5uaW5nXHJcbiAgICAgKiBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHByZXNlcnZlTW9kZWxGb3JDdXJyZW50U3RlcCgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5ID0gTXNmdFNtZS5kZWVwQ29weSh0aGlzLmludGVybmFsTW9kZWwgfHwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBtb2RlbCBiYWNrIHRvIHRoZSBzdGF0ZSBhdCB0aGVcclxuICAgICAqIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlc3RvcmVNb2RlbEZvckN1cnJlbnRTdGVwKCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5O1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBNb2RlbENvcHkgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZW1pdFN0ZXBDaGFuZ2VkKCkge1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLm5hdmlnYXRpb25JbmZvcm1hdGlvbi5wdXNoSGlzdG9yeSh7IHN0YWdlOiB0aGlzLnN0YWdlSW5kZXgsIHN0ZXA6IHRoaXMuc3RlcEluZGV4IH0pO1xyXG5cclxuICAgICAgICAvLyBlbWl0IG9ubHkgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZS5cclxuICAgICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRlbGVtZXRyeVRhZ3MoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBzdGFnZUluZGV4OiB0aGlzLnN0YWdlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICBzdGFnZU5hbWU6IHRoaXMuY3VycmVudFN0YWdlID8gdGhpcy5jdXJyZW50U3RhZ2UubmFtZSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGVwSW5kZXg6IHRoaXMuc3RlcEluZGV4LFxyXG4gICAgICAgICAgICAgICAgc3RlcE5hbWU6IHRoaXMuY3VycmVudFN0ZXAgPyB0aGlzLmN1cnJlbnRTdGVwLm5hbWUgOiBudWxsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0ZWxlbWV0cnkgc3RyaW5nIHVzZWQgdG8gcG9wdWxhdGUgdGVsZW1ldHJ5IGFjdGlvbiBldmVudHMuIFVwZGF0ZXMgd2l6YXJkIHN0YXRlLCBzdGVwIGluZGV4LCBhbmQgdGltZSBzdGVwIGluZGV4IHN0YXJ0ZWQuXHJcbiAgICAgKiBTdGVwIGluZGV4IHN0YXJ0IHRpbWUgc2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBldmVudCB0aW1lc3RhbXAgdG8gbW9yZSBlYXNpbHkgY2FsY3VsYXRlIHRpbWUgc3BlbnQgaW4gc3RhZ2UuXHJcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIHN0YXRlIHRvIGNoYW5nZSB0bywgaWYgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlVGVsZW1ldHJ5VGFncyhzdGF0ZT86IFdpemFyZFN0YXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID0gc3RhdGUgPyBzdGF0ZSA6IHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZTtcclxuICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RlcEluZGV4TnVtYmVyID0gYCR7dGhpcy5zdGFnZUluZGV4ICsgMX0uJHt0aGlzLnN0ZXBJbmRleCArIDF9YDtcclxuICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RlcEluZGV4U3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCk7IC8vIGtlZXAgc2FtZSBmb3JtYXQgYXMgZXZlbnQgdGltZXN0YW1wXHJcblxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtd2l6YXJkIHNtZS1sYXlvdXQtYWJzb2x1dGUgc21lLWFycmFuZ2Utc3RhY2stdiBzbWUtcG9zaXRpb24taW5zZXQtbm9uZVwiIHNtZVRlbGVtZXRyeUlkPSdzbWUtd2l6YXJkJyBzbWVUZWxlbWV0cnlBcmVhPVwiV2l6YXJkQ29tcG9uZW50XCI+XHJcbiAgPCEtLSBIZWFkaW5nIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJoZWFkaW5nICYmICF3aXphcmRJc0ZpbmlzaGVkXCIgW2F0dHIuYXJpYS1yZWFkb25seV09dHJ1ZVxyXG4gICAgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLXBhZGRpbmctdmVydGljYWwtc20gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtYm9yZGVyLWJvdHRvbS1zbSBzbWUtYm9yZGVyLWJvdHRvbS1jb2xvci1iYXNlLTgwXCI+XHJcbiAgICA8aDMgaWQ9XCJzbWUtc2hlbGwtd2l6YXJkLWhlYWRpbmctaWRcIj57eyBoZWFkaW5nIH19PC9oMz5cclxuICAgIDxzbWUtYmFkZ2UgdHlwZT1cInByZXZpZXdcIiAqbmdJZj1cImlzSW5QcmV2aWV3XCIgY2xhc3M9XCJzbWUtbWFyZ2luLWxlZnQteHNcIj48L3NtZS1iYWRnZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBTdGFnZXMgLS0+XHJcbiAgPHVsIHJvbGU9XCJ0YWJsaXN0XCIgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZFwiXHJcbiAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLWxnIHNtZS1ib3JkZXItYm90dG9tLXNtIHNtZS1ib3JkZXItYm90dG9tLWNvbG9yLWJhc2UtODAgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgIDxsaVxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NtZS13aXphcmQtc3RhZ2UtY29tcGxldGVkJzogc3RhZ2UuY29tcGxldGVkLCAnc21lLXdpemFyZC1zdGFnZS1jbGlja2VkJzogdmFsID09PSBzdGFnZXNBcnJheUluZGV4LCAnc21lLXdpemFyZC1zdGFnZS1hY3RpdmUnOiBzdGFnZS5hY3RpdmUsICdzbWUtZGlzYWJsZWQnOiB2YWwgIT09IHN0YWdlc0FycmF5SW5kZXh9XCJcclxuICAgICAgY2xhc3M9XCJzbWUtd2l6YXJkLXN0YWdlIHNtZS1hcnJhbmdlLXN0YWNrLWggc21lLW1hcmdpbi1yaWdodC1tZFwiIHJvbGU9XCJ0YWJcIlxyXG4gICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCBzdGFnZSBvZiBzdGFnZXM7IGxldCB2YWwgPSBpbmRleFwiIChjbGljayk9XCJvblN0YWdlQ2xpY2sodmFsKVwiPlxyXG4gICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIFthdHRyLmFyaWEtbGFiZWxdPVwic3RhZ2UubmFtZVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIHR5cGU9XCJidXR0b25cIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIFtzbWVUZWxlbWV0cnlJZF09XCInd2l6YXJkU3RhZ2UnICsgKHZhbCArIDEpXCJcclxuICAgICAgICBbY2xhc3Muc21lLWFjdGl2ZV09XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICAgIFtjbGFzcy5zbWUtc2VsZWN0ZWRdPVwidmFsID09PSBzdGFnZXNBcnJheUluZGV4XCJcclxuICAgICAgICBbY2xhc3Muc21lLXdpemFyZC1zdGFnZS1mb2N1c109XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLnN0YWdlSW5kZXhEaXNhYmxlZChzdGFnZSwgdmFsKVwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF0gPSBcInRoaXMuc3RhZ2VJbmRleERpc2FibGVkKHN0YWdlLCB2YWwpXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtd2l6YXJkLWJ1dHRvbi1pdGVtIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbm9uZSBzbWUtYnV0dG9uLWF1dG8td2lkdGhcIj5cclxuICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7J3NtZS1pY29uIHNtZS1pY29uLWFjY2VwdCBzbWUtaWNvbi1zaXplLXh4cyc6IHN0YWdlLmNvbXBsZXRlZH1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtd2l6YXJkLXN0YWdlLWluZGV4IHNtZS1wb3NpdGlvbi1mbGV4LW5vbmVcIj5cclxuICAgICAgICAgIHt7ICFzdGFnZS5jb21wbGV0ZWQgPyB2YWwgKyAxIDogJycgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc21lLWZvbnQtZW1waGFzaXMxIHNtZS13aXphcmQtc3RhZ2UtYWN0aXZlJzogdmFsID09PSBzdGFnZXNBcnJheUluZGV4IHx8IHN0YWdlLmFjdGl2ZSwgJ3NtZS13aXphcmQtc3RhZ2UtY29tcGxldGVkJzogc3RhZ2UuY29tcGxldGVkLCAnc21lLW1hcmdpbi1sZWZ0LXhzJzogIXN0YWdlLmNvbXBsZXRlZH1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1mb250LWJvZHlcIj5cclxuICAgICAgICAgIHt7c3RhZ2UubmFtZX19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbGk+XHJcbiAgPC91bD5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0byBzbWUtcG9zaXRpb24tZmxleC1hdXRvXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIXdpemFyZElzRmluaXNoZWQgJiYgIWhpZGVTdGVwc0xpc3RTaWRlUGFuZVwiXHJcbiAgICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2stdiBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXHJcbiAgICAgIHNtZS1ib3JkZXItcmlnaHQtc20gc21lLWJvcmRlci1yaWdodC1jb2xvci1iYXNlLTgwXCI+XHJcbiAgICAgIDx1bCByb2xlPVwidGFibGlzdFwiICpuZ0lmPVwiIXdpemFyZElzRmluaXNoZWQgJiYgIWhpZGVTdGVwc0xpc3RTaWRlUGFuZVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtcGFkZGluZy12ZXJ0aWNhbC1zbSBzbWUtcG9zaXRpb24tZmxleC1hdXRvXCIgW25nQ2xhc3NdPVwieydzbWUtbGF5b3V0LW1pbndpZHRoLXNtJzogaXNFeHBhbmRlZH1cIj5cclxuICAgICAgICA8bGkgcm9sZT1cInRhYlwiIHRhYmluZGV4PVwiMFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3NtZS1zY2hlbWUtbGlzdC1pdGVtIHNtZS1hY3RpdmUgc21lLWNvbG9yLWJhc2UtNSc6IGluZGV4ID09PSBzdGVwSW5kZXh9XCJcclxuICAgICAgICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcGFkZGluZy1sZWZ0LWxnIHNtZS1wYWRkaW5nLXJpZ2h0LXhzXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaW5kZXggPT09IHN0ZXBJbmRleFwiICpuZ0Zvcj1cImxldCBzdGVwIG9mIGdldFN0ZXBzRm9yU3RhZ2UoKTsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU3RlcENsaWNrKGluZGV4KVwiIFt0aXRsZV09XCJpc0V4cGFuZGVkID8gbnVsbCA6IHN0ZXAubmFtZVwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzRXhwYW5kZWQgPyBudWxsIDogc3RlcC5uYW1lXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbmdDbGFzc109XCJ7J3NtZS1zdGVwLWFjdGl2ZSc6IGluZGV4ID09PSBzdGVwSW5kZXh9XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbWUtd2l6YXJkLXN0ZXAgc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS13aXphcmQtYnV0dG9uLWl0ZW0gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1ub25lIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXhzIHNtZS1idXR0b24tYXV0by13aWR0aFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLnN0ZXBJbmRleERpc2FibGVkKHN0ZXAsIGluZGV4KVwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF09XCJ0aGlzLnN0ZXBJbmRleERpc2FibGVkKHN0ZXAsIGluZGV4KVwiXHJcbiAgICAgICAgICAgIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgW3NtZVRlbGVtZXRyeUlkXT1cIid3aXphcmRTdGVwJyArIChpbmRleCArIDEpXCIgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLW1hcmdpbi1yaWdodC14c1wiPnt7IHN0YWdlc0FycmF5SW5kZXggKyAxIH19Lnt7IGluZGV4ICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lXCIgKm5nSWY9XCJpc0V4cGFuZGVkXCI+e3sgc3RlcC5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cInNwbGl0LXZpZXctdG9nZ2xlIHNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtbGF5b3V0LWZsb2F0LXJpZ2h0XCJcclxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lKClcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpc0V4cGFuZGVkID8gc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuY29sbGFwc2VTdGVwc0xpc3QgOiBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5leHBhbmRTdGVwc0xpc3RcIlxyXG4gICAgICAgICAgW3RpdGxlXT1cImlzRXhwYW5kZWQgPyBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5jb2xsYXBzZVN0ZXBzTGlzdCA6IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLmV4cGFuZFN0ZXBzTGlzdFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvblwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NtZS1pY29uLWNoZXZyb25MZWZ0JzogaXNFeHBhbmRlZCwgJ3NtZS1pY29uLWNoZXZyb25SaWdodCc6ICFpc0V4cGFuZGVkIH1cIj48L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTdGVwIGNvbnRlbnQgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tc3RyZXRjaCBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvXCJcclxuICAgICAgW25nQ2xhc3NdPVwieydzbWUtcGFkZGluZy1pbnNldC1sZyc6IGN1cnJlbnRTdGVwQ29tcG9uZW50LnBhZENvbnRlbnRzfVwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWRcIj5cclxuICAgICAgICA8c21lLXBhZ2UtYWxlcnQtYmFyIFthbGVydF09XCJhbGVydFwiPjwvc21lLXBhZ2UtYWxlcnQtYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBEb24ndCByZW1vdmUgdGhpcyBsaW5lISAtLT5cclxuICAgICAgPCEtLSBUaGUgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50IGxvb2tzIGZvciAjY29udGFpbmVyIHRvIHJlbmRlciBpdHNlbGYgYXMgdGhlIHNpYmxpbmcuISAtLT5cclxuICAgICAgPGRpdiBpZD1cImR5bmFtaWMtY29udGVudC1jb250YWluZXJcIiAjY29udGFpbmVyPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBGb290ZXIgLS0+XHJcbiAgPGRpdiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkXCJcclxuICAgIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1ib3JkZXItdG9wLXNtIHNtZS1ib3JkZXItdG9wLWNvbG9yLWJhc2UtODAgc21lLXBhZGRpbmctdmVydGljYWwtc20gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1sYXlvdXQtZmxvYXQtbGVmdFwiIFtjbGFzcy5zbWUtcGFkZGluZy1yaWdodC14bF09XCIhdmFsaWRhdGluZ1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIiB0eXBlPVwiYnV0dG9uXCIgc21lVGVsZW1ldHJ5SWQ9XCJ3aXphcmRQcmV2XCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIiAoY2xpY2spPVwib25CYWNrQ2xpY2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlQmFja0J1dHRvblwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcFwiPnt7c3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uYmFja319PC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWJ1dHRvbi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkTmV4dFwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uTmV4dENsaWNrKClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlTmV4dEJ1dHRvblwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF09XCJkaXNhYmxlTmV4dEJ1dHRvblwiPnt7IG5leHRCdXR0b25UZXh0KCkgfX08L2J1dHRvbj5cclxuICAgICAgPGRpdiAqbmdJZj1cInZhbGlkYXRpbmdcIiBjbGFzcz1cInNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLWxheW91dC1mbG9hdC1yaWdodCBzbWUtcGFkZGluZy1sZWZ0LXhsIHNtZS1wYWRkaW5nLXRvcC1tZFwiPlxyXG4gICAgICAgIDxzbWUtbG9hZGluZy13aGVlbCBzaXplPVwic21hbGxcIj48L3NtZS1sb2FkaW5nLXdoZWVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lXCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkU2tpcFwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uU2tpcENsaWNrKClcIlxyXG4gICAgICBbY2xhc3Muc21lLWxheW91dC1ub25lXT1cIiFzaG93U2tpcEJ1dHRvblwiPnt7c3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uc2tpcH19PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWxheW91dC1mbG9hdC1yaWdodFwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZEV4aXRcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiXHJcbiAgICAgIChjbGljayk9XCJvbkV4aXRDbGljaygpXCI+e3sgZXhpdEJ1dHRvblRleHQoKSB9fTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -98,13 +98,16 @@ export class ConnectivityEnforcer {
98
98
  static isRequestAllowed(connectivityLevel, requestUrl) {
99
99
  const announcementsBlobGlobal = 'https://announcements.blob.core.windows.net';
100
100
  const announcementsBlobChina = 'https://announcements.blob.core.chinacloudapi.cn';
101
+ const announcementsBlobFairfax = 'https://announcements.blob.core.usgovcloudapi.net';
101
102
  // TODO: Load from manifest.
102
103
  if (connectivityLevel === ConnectivityLevel.AzureAndGateway) {
103
104
  const approvedUrls = [
104
105
  AzureConstants.azureGlobalArmEndpoint,
105
106
  AzureConstants.azureChinaArmEndpoint,
107
+ AzureConstants.azureUSGovArmEndpoint,
106
108
  announcementsBlobGlobal,
107
- announcementsBlobChina
109
+ announcementsBlobChina,
110
+ announcementsBlobFairfax
108
111
  ];
109
112
  return approvedUrls.some(url => requestUrl.startsWith(url));
110
113
  }
@@ -134,4 +137,4 @@ export class ConnectivityEnforcer {
134
137
  }
135
138
  }
136
139
  ConnectivityEnforcer.monitorName = 'ConnectivityEnforcer';
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGl2aXR5LWVuZm9yY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvc2VydmljZS9jb25uZWN0aXZpdHktZW5mb3JjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkYsT0FBTyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTXJEOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksaUJBYVg7QUFiRCxXQUFZLGlCQUFpQjtJQUN6Qjs7T0FFRztJQUNILGdDQUFXLENBQUE7SUFDWDs7T0FFRztJQUNILHdEQUFtQyxDQUFBO0lBQ25DOztPQUVHO0lBQ0gsd0NBQW1CLENBQUE7QUFDdkIsQ0FBQyxFQWJXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFhNUI7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFHN0I7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBb0M7UUFDdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUN0RCxJQUFJLENBQUMsaUJBQWlCLElBQUksaUJBQWlCLEtBQUssaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ25FLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMx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LE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDaEgsS0FBSyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUs7Z0JBQzVDLFlBQVksRUFBRSxZQUFZO2FBQzdCLENBQUM7WUFFRixPQUFPLGFBQWEsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7O0FBckljLGdDQUFXLEdBQUcsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBenVyZUNvbnN0YW50cyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYXp1cmUvYXp1cmUtY29uc3RhbnRzJztcclxuaW1wb3J0IHsgSHR0cCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9odHRwJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IGVtcHR5LCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBamF4RXJyb3IsIEFqYXhSZXF1ZXN0LCBBamF4UmVzcG9uc2UgfSBmcm9tICdyeGpzL2FqYXgnO1xyXG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBcHBDb250ZXh0U2VydmljZSB9IGZyb20gJy4nO1xyXG5pbXBvcnQgeyBNZXNzYWdlRGlhbG9nTGluaywgTWVzc2FnZURpYWxvZ09wdGlvbnMgfSBmcm9tICcuLi9jb250cm9scyc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi9jb250cm9scy9kaWFsb2cvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5cclxuLyoqXHJcbiAqIERlZmluZXMgdGhlIGNvbm5lY3Rpdml0eSBsZXZlbHMuXHJcbiAqL1xyXG5leHBvcnQgZW51bSBDb25uZWN0aXZpdHlMZXZlbCB7XHJcbiAgICAvKipcclxuICAgICAqIEFsbCBjb25uZWN0aW9ucyBhcmUgYWxsb3dlZC5cclxuICAgICAqL1xyXG4gICAgQWxsID0gJ0FsbCcsXHJcbiAgICAvKipcclxuICAgICAqIENvbm5lY3Rpb25zIHRvIEF6dXJlIGFuZCBnYXRld2F5IGFyZSBhbGxvd2VkLlxyXG4gICAgICovXHJcbiAgICBBenVyZUFuZEdhdGV3YXkgPSAnQXp1cmVBbmRHYXRld2F5JyxcclxuICAgIC8qKlxyXG4gICAgICogT25seSBjb25uZWN0aW9ucyB0byBnYXRld2F5IGFyZSBhbGxvd2VkLlxyXG4gICAgICovXHJcbiAgICBHYXRld2F5ID0gJ0dhdGV3YXknXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb25uZWN0aXZpdHkgZW5mb3JjZXIgY2xhc3NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb25uZWN0aXZpdHlFbmZvcmNlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBtb25pdG9yTmFtZSA9ICdDb25uZWN0aXZpdHlFbmZvcmNlcic7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgdGhlIGNvbm5lY3Rpdml0eSBlbmZvcmNlciB3aXRoIHRoZSBodHRwIGlmIGNvbm5lY3Rpdml0eSBsZXZlbCBpcyBub3QgJ0FsbCdcclxuICAgICAqIEBwYXJhbSBhcHBDb250ZXh0U2VydmljZSBUaGUgYXBwY29udGV4dCBzZXJ2aWNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVnaXN0ZXIoYXBwQ29udGV4dFNlcnZpY2U6IEFwcENvbnRleHRTZXJ2aWNlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IE1zZnRTbWUuc2VsZigpO1xyXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpdml0eUxldmVsID0gc2VsZi5Jbml0LmNvbm5lY3Rpdml0eUxldmVsO1xyXG4gICAgICAgIGlmICghY29ubmVjdGl2aXR5TGV2ZWwgfHwgY29ubmVjdGl2aXR5TGV2ZWwgPT09IENvbm5lY3Rpdml0eUxldmVsLkFsbCkge1xyXG4gICAgICAgICAgICBIdHRwLnVucmVnaXN0ZXJNb25pdG9ycyhDb25uZWN0aXZpdHlFbmZvcmNlci5tb25pdG9yTmFtZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEh0dHAucmVnaXN0ZXJNb25pdG9yU2V0KHtcclxuICAgICAgICAgICAgbmFtZTogQ29ubmVjdGl2aXR5RW5mb3JjZXIubW9uaXRvck5hbWUsXHJcbiAgICAgICAgICAgIHByZU1vbml0b3I6IChyZXF1ZXN0OiBBamF4UmVxdWVzdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nZ2luZy5sb2dXYXJuaW5nKCdDb25uZWN0aXZpdHlFbmZvcmNlcicsICdDb25uZWN0aXZpdHkgZW5mb3JjZXIgZmFpbGVkIHRvIGFjY2VzcyB0aGUgQWpheFJlcXVlc3Qgb2JqZWN0LicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihyZXF1ZXN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0VXJsID0gcmVxdWVzdC51cmw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0VXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nZ2luZy5sb2dXYXJuaW5nKCdDb25uZWN0aXZpdHlFbmZvcmNlcicsICdDb25uZWN0aXZpdHkgZW5mb3JjZXIgZmFpbGVkIHRvIGdldCB0aGUgcmVxdWVzdCB1cmwuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlcXVlc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChDb25uZWN0aXZpdHlFbmZvcmNlci5pc0dhdGV3YXlSZXF1ZXN0KGFwcENvbnRleHRTZXJ2aWNlLCByZXF1ZXN0VXJsKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICBDb25uZWN0aXZpdHlFbmZvcmNlci5pc1JlcXVlc3RBbGxvd2VkKGNvbm5lY3Rpdml0eUxldmVsLCByZXF1ZXN0VXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIExldCByZXF1ZXN0IGdvIHRocm91Z2hcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YocmVxdWVzdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENvbm5lY3Rpdml0eUVuZm9yY2VyLmdldERpYWxvZ0NvbnRlbnQoYXBwQ29udGV4dFNlcnZpY2UsIGZhbHNlLCByZXF1ZXN0VXJsKVxyXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZU1hcChkaWFsb2dDb250ZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHBDb250ZXh0U2VydmljZS5mcmFtZS5zaG93RGlhbG9nTWVzc2FnZShkaWFsb2dDb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN1Y2Nlc3NNb25pdG9yOiAocmVzcG9uc2U6IEFqYXhSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3JNb25pdG9yOiAoZXJyb3I6IEFqYXhFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgQXp1cmUgbG9naW4gaXMgYWxsb3dlZC4gU2hvd3MgYSBjb25uZWN0aXZpdHkgZGlhbG9nIGlmIGl0cyBub3QuXHJcbiAgICAgKiBAcGFyYW0gYXBwQ29udGV4dFNlcnZpY2UgVGhlIGFwcGNvbnRleHQgc2VydmljZVxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBBenVyZSBsb2dpbiBpcyBhbGxvd2VkLCBlbHNlIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNoZWNrQXp1cmVMb2dpbkFsbG93ZWQoYXBwQ29udGV4dFNlcnZpY2U6IEFwcENvbnRleHRTZXJ2aWNlLCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IE1zZnRTbWUuc2VsZigpO1xyXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpdml0eUxldmVsID0gc2VsZi5Jbml0LmNvbm5lY3Rpdml0eUxldmVsO1xyXG4gICAgICAgIGlmIChjb25uZWN0aXZpdHlMZXZlbCA9PT0gQ29ubmVjdGl2aXR5TGV2ZWwuR2F0ZXdheSkge1xyXG4gICAgICAgICAgICBDb25uZWN0aXZpdHlFbmZvcmNlci5nZXREaWFsb2dDb250ZW50KGFwcENvbnRleHRTZXJ2aWNlLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgICAgICBtZXJnZU1hcChkaWFsb2dDb250ZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpYWxvZ1NlcnZpY2Uuc2hvd01lc3NhZ2UoZGlhbG9nQ29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgcmVxdWVzdCBpcyBhIGdhdGV3YXkgcmVxdWVzdC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNHYXRld2F5UmVxdWVzdChhcHBDb250ZXh0U2VydmljZTogQXBwQ29udGV4dFNlcnZpY2UsIHJlcXVlc3RVcmw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhcmVxdWVzdFVybC5zdGFydHNXaXRoKCdodHRwJykgfHwgcmVxdWVzdFVybC5zdGFydHNXaXRoKGFwcENvbnRleHRTZXJ2aWNlLmdhdGV3YXkuZ2F0ZXdheVVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSByZXF1ZXN0IGNhbiBiZSBhbGxvd2VkIHRvIGdvIHRocm91Z2guXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIGlzUmVxdWVzdEFsbG93ZWQoY29ubmVjdGl2aXR5TGV2ZWw6IHN0cmluZywgcmVxdWVzdFVybDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgYW5ub3VuY2VtZW50c0Jsb2JHbG9iYWwgPSAnaHR0cHM6Ly9hbm5vdW5jZW1lbnRzLmJsb2IuY29yZS53aW5kb3dzLm5ldCc7XHJcbiAgICAgICAgY29uc3QgYW5ub3VuY2VtZW50c0Jsb2JDaGluYSA9ICdodHRwczovL2Fubm91bmNlbWVudHMuYmxvYi5jb3JlLmNoaW5hY2xvdWRhcGkuY24nO1xyXG4gICAgICAgIC8vIFRPRE86IExvYWQgZnJvbSBtYW5pZmVzdC5cclxuICAgICAgICBpZiAoY29ubmVjdGl2aXR5TGV2ZWwgPT09IENvbm5lY3Rpdml0eUxldmVsLkF6dXJlQW5kR2F0ZXdheSkge1xyXG4gICAgICAgICAgICBjb25zdCBhcHByb3ZlZFVybHMgPSBbXHJcbiAgICAgICAgICAgICAgICBBenVyZUNvbnN0YW50cy5henVyZUdsb2JhbEFybUVuZHBvaW50LFxyXG4gICAgICAgICAgICAgICAgQXp1cmVDb25zdGFudHMuYXp1cmVDaGluYUFybUVuZHBvaW50LFxyXG4gICAgICAgICAgICAgICAgYW5ub3VuY2VtZW50c0Jsb2JHbG9iYWwsXHJcbiAgICAgICAgICAgICAgICBhbm5vdW5jZW1lbnRzQmxvYkNoaW5hXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHJldHVybiBhcHByb3ZlZFVybHMuc29tZSh1cmwgPT4gcmVxdWVzdFVybC5zdGFydHNXaXRoKHVybCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXREaWFsb2dDb250ZW50KFxyXG4gICAgICAgIGFwcENvbnRleHRTZXJ2aWNlOiBBcHBDb250ZXh0U2VydmljZSxcclxuICAgICAgICBpc0F6dXJlTG9naW46IGJvb2xlYW4sXHJcbiAgICAgICAgcmVxdWVzdFVybDogc3RyaW5nID0gJycpOiBPYnNlcnZhYmxlPE1lc3NhZ2VEaWFsb2dPcHRpb25zPiB7XHJcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgaWYgc2VydmljZS9kZXNrdG9wIG1vZGVcclxuICAgICAgICByZXR1cm4gYXBwQ29udGV4dFNlcnZpY2UuZ2F0ZXdheS5nZXQoJ2dhdGV3YXkvYWNjZXNzL2NoZWNrJylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWFwKGlzQWRtaW4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ3MgPSBNc2Z0U21lLmdldFN0cmluZ3M8U3RyaW5ncz4oKS5Nc2Z0U21lU2hlbGwuQW5ndWxhcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVybmFsTGluazogTWVzc2FnZURpYWxvZ0xpbms7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxMaW5rID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBhcHBDb250ZXh0U2VydmljZS5nYXRld2F5LmdhdGV3YXlVcmwgKyAnL3NldHRpbmdzL2Nvbm5lY3Rpdml0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogc3RyaW5ncy5Db25uZWN0aXZpdHkuUmVzdHJpY3RlZC5DaGFuZ2VTZXR0aW5ncy50ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWFsb2dDb250ZW50OiBNZXNzYWdlRGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVGV4dDogc3RyaW5ncy5Db21tb24uT0suc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGlzQXp1cmVMb2dpbiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLkNvbm5lY3Rpdml0eS5SZXN0cmljdGVkLkF6dXJlLnRleHQgOiBzdHJpbmdzLkNvbm5lY3Rpdml0eS5SZXN0cmljdGVkLk9mZmxpbmUudGV4dC5mb3JtYXQocmVxdWVzdFVybCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzdHJpbmdzLkNvbm5lY3Rpdml0eS5SZXN0cmljdGVkLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbExpbms6IGV4dGVybmFsTGlua1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWFsb2dDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGl2aXR5LWVuZm9yY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvc2VydmljZS9jb25uZWN0aXZpdHktZW5mb3JjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkYsT0FBTyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTXJEOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksaUJBYVg7QUFiRCxXQUFZLGlCQUFpQjtJQUN6Qjs7T0FFRztJQUNILGdDQUFXLENBQUE7SUFDWDs7T0FFRztJQUNILHdEQUFtQyxDQUFBO0lBQ25DOztPQUVHO0lBQ0gsd0NBQW1CLENBQUE7QUFDdkIsQ0FBQyxFQWJXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFhNUI7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFHN0I7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBb0M7UUFDdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUN0RCxJQUFJLENBQUMsaUJBQWlCLElBQUksaUJBQWlCLEtBQUssaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ25FLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMx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T0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSztnQkFDbkMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUNuQixPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ2hILEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLO2dCQUM1QyxZQUFZLEVBQUUsWUFBWTthQUM3QixDQUFDO1lBRUYsT0FBTyxhQUFhLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixDQUFDOztBQXhJYyxnQ0FBVyxHQUFHLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXp1cmVDb25zdGFudHMgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2F6dXJlL2F6dXJlLWNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEh0dHAgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RhdGEvaHR0cCc7XHJcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL2xvZ2dpbmcnO1xyXG5pbXBvcnQgeyBlbXB0eSwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQWpheEVycm9yLCBBamF4UmVxdWVzdCwgQWpheFJlc3BvbnNlIH0gZnJvbSAncnhqcy9hamF4JztcclxuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQXBwQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuJztcclxuaW1wb3J0IHsgTWVzc2FnZURpYWxvZ0xpbmssIE1lc3NhZ2VEaWFsb2dPcHRpb25zIH0gZnJvbSAnLi4vY29udHJvbHMnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vY29udHJvbHMvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RyaW5ncyB9IGZyb20gJy4uL2dlbmVyYXRlZC9zdHJpbmdzJztcclxuXHJcbi8qKlxyXG4gKiBEZWZpbmVzIHRoZSBjb25uZWN0aXZpdHkgbGV2ZWxzLlxyXG4gKi9cclxuZXhwb3J0IGVudW0gQ29ubmVjdGl2aXR5TGV2ZWwge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBbGwgY29ubmVjdGlvbnMgYXJlIGFsbG93ZWQuXHJcbiAgICAgKi9cclxuICAgIEFsbCA9ICdBbGwnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25uZWN0aW9ucyB0byBBenVyZSBhbmQgZ2F0ZXdheSBhcmUgYWxsb3dlZC5cclxuICAgICAqL1xyXG4gICAgQXp1cmVBbmRHYXRld2F5ID0gJ0F6dXJlQW5kR2F0ZXdheScsXHJcbiAgICAvKipcclxuICAgICAqIE9ubHkgY29ubmVjdGlvbnMgdG8gZ2F0ZXdheSBhcmUgYWxsb3dlZC5cclxuICAgICAqL1xyXG4gICAgR2F0ZXdheSA9ICdHYXRld2F5J1xyXG59XHJcblxyXG4vKipcclxuICogQ29ubmVjdGl2aXR5IGVuZm9yY2VyIGNsYXNzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29ubmVjdGl2aXR5RW5mb3JjZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgbW9uaXRvck5hbWUgPSAnQ29ubmVjdGl2aXR5RW5mb3JjZXInO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJzIHRoZSBjb25uZWN0aXZpdHkgZW5mb3JjZXIgd2l0aCB0aGUgaHR0cCBpZiBjb25uZWN0aXZpdHkgbGV2ZWwgaXMgbm90ICdBbGwnXHJcbiAgICAgKiBAcGFyYW0gYXBwQ29udGV4dFNlcnZpY2UgVGhlIGFwcGNvbnRleHQgc2VydmljZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyKGFwcENvbnRleHRTZXJ2aWNlOiBBcHBDb250ZXh0U2VydmljZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSBNc2Z0U21lLnNlbGYoKTtcclxuICAgICAgICBjb25zdCBjb25uZWN0aXZpdHlMZXZlbCA9IHNlbGYuSW5pdC5jb25uZWN0aXZpdHlMZXZlbDtcclxuICAgICAgICBpZiAoIWNvbm5lY3Rpdml0eUxldmVsIHx8IGNvbm5lY3Rpdml0eUxldmVsID09PSBDb25uZWN0aXZpdHlMZXZlbC5BbGwpIHtcclxuICAgICAgICAgICAgSHR0cC51bnJlZ2lzdGVyTW9uaXRvcnMoQ29ubmVjdGl2aXR5RW5mb3JjZXIubW9uaXRvck5hbWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBIdHRwLnJlZ2lzdGVyTW9uaXRvclNldCh7XHJcbiAgICAgICAgICAgIG5hbWU6IENvbm5lY3Rpdml0eUVuZm9yY2VyLm1vbml0b3JOYW1lLFxyXG4gICAgICAgICAgICBwcmVNb25pdG9yOiAocmVxdWVzdDogQWpheFJlcXVlc3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZ2dpbmcubG9nV2FybmluZygnQ29ubmVjdGl2aXR5RW5mb3JjZXInLCAnQ29ubmVjdGl2aXR5IGVuZm9yY2VyIGZhaWxlZCB0byBhY2Nlc3MgdGhlIEFqYXhSZXF1ZXN0IG9iamVjdC4nKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YocmVxdWVzdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdFVybCA9IHJlcXVlc3QudXJsO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdFVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZ2dpbmcubG9nV2FybmluZygnQ29ubmVjdGl2aXR5RW5mb3JjZXInLCAnQ29ubmVjdGl2aXR5IGVuZm9yY2VyIGZhaWxlZCB0byBnZXQgdGhlIHJlcXVlc3QgdXJsLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihyZXF1ZXN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoQ29ubmVjdGl2aXR5RW5mb3JjZXIuaXNHYXRld2F5UmVxdWVzdChhcHBDb250ZXh0U2VydmljZSwgcmVxdWVzdFVybCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGl2aXR5RW5mb3JjZXIuaXNSZXF1ZXN0QWxsb3dlZChjb25uZWN0aXZpdHlMZXZlbCwgcmVxdWVzdFVybCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBMZXQgcmVxdWVzdCBnbyB0aHJvdWdoXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlcXVlc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBDb25uZWN0aXZpdHlFbmZvcmNlci5nZXREaWFsb2dDb250ZW50KGFwcENvbnRleHRTZXJ2aWNlLCBmYWxzZSwgcmVxdWVzdFVybClcclxuICAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VNYXAoZGlhbG9nQ29udGVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwQ29udGV4dFNlcnZpY2UuZnJhbWUuc2hvd0RpYWxvZ01lc3NhZ2UoZGlhbG9nQ29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWNjZXNzTW9uaXRvcjogKHJlc3BvbnNlOiBBamF4UmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yTW9uaXRvcjogKGVycm9yOiBBamF4RXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIEF6dXJlIGxvZ2luIGlzIGFsbG93ZWQuIFNob3dzIGEgY29ubmVjdGl2aXR5IGRpYWxvZyBpZiBpdHMgbm90LlxyXG4gICAgICogQHBhcmFtIGFwcENvbnRleHRTZXJ2aWNlIFRoZSBhcHBjb250ZXh0IHNlcnZpY2VcclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgQXp1cmUgbG9naW4gaXMgYWxsb3dlZCwgZWxzZSBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjaGVja0F6dXJlTG9naW5BbGxvd2VkKGFwcENvbnRleHRTZXJ2aWNlOiBBcHBDb250ZXh0U2VydmljZSwgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSBNc2Z0U21lLnNlbGYoKTtcclxuICAgICAgICBjb25zdCBjb25uZWN0aXZpdHlMZXZlbCA9IHNlbGYuSW5pdC5jb25uZWN0aXZpdHlMZXZlbDtcclxuICAgICAgICBpZiAoY29ubmVjdGl2aXR5TGV2ZWwgPT09IENvbm5lY3Rpdml0eUxldmVsLkdhdGV3YXkpIHtcclxuICAgICAgICAgICAgQ29ubmVjdGl2aXR5RW5mb3JjZXIuZ2V0RGlhbG9nQ29udGVudChhcHBDb250ZXh0U2VydmljZSwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VNYXAoZGlhbG9nQ29udGVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWFsb2dTZXJ2aWNlLnNob3dNZXNzYWdlKGRpYWxvZ0NvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIHJlcXVlc3QgaXMgYSBnYXRld2F5IHJlcXVlc3QuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIGlzR2F0ZXdheVJlcXVlc3QoYXBwQ29udGV4dFNlcnZpY2U6IEFwcENvbnRleHRTZXJ2aWNlLCByZXF1ZXN0VXJsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXJlcXVlc3RVcmwuc3RhcnRzV2l0aCgnaHR0cCcpIHx8IHJlcXVlc3RVcmwuc3RhcnRzV2l0aChhcHBDb250ZXh0U2VydmljZS5nYXRld2F5LmdhdGV3YXlVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgcmVxdWVzdCBjYW4gYmUgYWxsb3dlZCB0byBnbyB0aHJvdWdoLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBpc1JlcXVlc3RBbGxvd2VkKGNvbm5lY3Rpdml0eUxldmVsOiBzdHJpbmcsIHJlcXVlc3RVcmw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGFubm91bmNlbWVudHNCbG9iR2xvYmFsID0gJ2h0dHBzOi8vYW5ub3VuY2VtZW50cy5ibG9iLmNvcmUud2luZG93cy5uZXQnO1xyXG4gICAgICAgIGNvbnN0IGFubm91bmNlbWVudHNCbG9iQ2hpbmEgPSAnaHR0cHM6Ly9hbm5vdW5jZW1lbnRzLmJsb2IuY29yZS5jaGluYWNsb3VkYXBpLmNuJztcclxuICAgICAgICBjb25zdCBhbm5vdW5jZW1lbnRzQmxvYkZhaXJmYXggPSAnaHR0cHM6Ly9hbm5vdW5jZW1lbnRzLmJsb2IuY29yZS51c2dvdmNsb3VkYXBpLm5ldCc7XHJcbiAgICAgICAgLy8gVE9ETzogTG9hZCBmcm9tIG1hbmlmZXN0LlxyXG4gICAgICAgIGlmIChjb25uZWN0aXZpdHlMZXZlbCA9PT0gQ29ubmVjdGl2aXR5TGV2ZWwuQXp1cmVBbmRHYXRld2F5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFwcHJvdmVkVXJscyA9IFtcclxuICAgICAgICAgICAgICAgIEF6dXJlQ29uc3RhbnRzLmF6dXJlR2xvYmFsQXJtRW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgICBBenVyZUNvbnN0YW50cy5henVyZUNoaW5hQXJtRW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgICBBenVyZUNvbnN0YW50cy5henVyZVVTR292QXJtRW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgICBhbm5vdW5jZW1lbnRzQmxvYkdsb2JhbCxcclxuICAgICAgICAgICAgICAgIGFubm91bmNlbWVudHNCbG9iQ2hpbmEsXHJcbiAgICAgICAgICAgICAgICBhbm5vdW5jZW1lbnRzQmxvYkZhaXJmYXhcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgcmV0dXJuIGFwcHJvdmVkVXJscy5zb21lKHVybCA9PiByZXF1ZXN0VXJsLnN0YXJ0c1dpdGgodXJsKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGdldERpYWxvZ0NvbnRlbnQoXHJcbiAgICAgICAgYXBwQ29udGV4dFNlcnZpY2U6IEFwcENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIGlzQXp1cmVMb2dpbjogYm9vbGVhbixcclxuICAgICAgICByZXF1ZXN0VXJsOiBzdHJpbmcgPSAnJyk6IE9ic2VydmFibGU8TWVzc2FnZURpYWxvZ09wdGlvbnM+IHtcclxuICAgICAgICAvLyBUT0RPOiBDaGVjayBpZiBzZXJ2aWNlL2Rlc2t0b3AgbW9kZVxyXG4gICAgICAgIHJldHVybiBhcHBDb250ZXh0U2VydmljZS5nYXRld2F5LmdldCgnZ2F0ZXdheS9hY2Nlc3MvY2hlY2snKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtYXAoaXNBZG1pbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5ncyA9IE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXh0ZXJuYWxMaW5rOiBNZXNzYWdlRGlhbG9nTGluaztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbExpbmsgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGFwcENvbnRleHRTZXJ2aWNlLmdhdGV3YXkuZ2F0ZXdheVVybCArICcvc2V0dGluZ3MvY29ubmVjdGl2aXR5JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzdHJpbmdzLkNvbm5lY3Rpdml0eS5SZXN0cmljdGVkLkNoYW5nZVNldHRpbmdzLnRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpYWxvZ0NvbnRlbnQ6IE1lc3NhZ2VEaWFsb2dPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25UZXh0OiBzdHJpbmdzLkNvbW1vbi5PSy5zdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogaXNBenVyZUxvZ2luID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MuQ29ubmVjdGl2aXR5LlJlc3RyaWN0ZWQuQXp1cmUudGV4dCA6IHN0cmluZ3MuQ29ubmVjdGl2aXR5LlJlc3RyaWN0ZWQuT2ZmbGluZS50ZXh0LmZvcm1hdChyZXF1ZXN0VXJsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0cmluZ3MuQ29ubmVjdGl2aXR5LlJlc3RyaWN0ZWQudGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsTGluazogZXh0ZXJuYWxMaW5rXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpYWxvZ0NvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICB9XHJcbn1cclxuIl19