@openziti/ziti-console-lib 0.4.1 → 0.4.3

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 (68) hide show
  1. package/esm2022/lib/features/config-editor/config-editor.component.mjs +19 -4
  2. package/esm2022/lib/features/json-view/json-view.component.mjs +6 -3
  3. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +32 -20
  4. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +2 -1
  5. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +68 -51
  6. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +37 -1
  7. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +2 -1
  8. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +3 -1
  9. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +2 -1
  10. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +273 -0
  11. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +197 -0
  12. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +54 -66
  13. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +49 -1
  14. package/esm2022/lib/models/service-edge-router-policy.mjs +10 -0
  15. package/esm2022/lib/pages/configurations/configurations-page.component.mjs +9 -15
  16. package/esm2022/lib/pages/configurations/configurations-page.service.mjs +13 -9
  17. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +10 -12
  18. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +19 -15
  19. package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +129 -0
  20. package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +382 -0
  21. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +10 -12
  22. package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +21 -17
  23. package/esm2022/lib/pages/services/services-page.service.mjs +2 -2
  24. package/esm2022/lib/version.mjs +2 -2
  25. package/esm2022/lib/ziti-console-lib.module.mjs +9 -3
  26. package/esm2022/public-api.mjs +5 -1
  27. package/fesm2022/openziti-ziti-console-lib.mjs +6671 -5623
  28. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  29. package/lib/features/config-editor/config-editor.component.d.ts +4 -0
  30. package/lib/features/config-editor/config-editor.component.d.ts.map +1 -1
  31. package/lib/features/json-view/json-view.component.d.ts +1 -0
  32. package/lib/features/json-view/json-view.component.d.ts.map +1 -1
  33. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +10 -2
  34. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  35. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
  36. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +9 -8
  37. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  38. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts +8 -0
  39. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
  40. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  41. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
  42. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  43. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +53 -0
  44. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -0
  45. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts +38 -0
  46. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -0
  47. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +8 -11
  48. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  49. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts +11 -0
  50. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
  51. package/lib/models/service-edge-router-policy.d.ts +7 -0
  52. package/lib/models/service-edge-router-policy.d.ts.map +1 -0
  53. package/lib/pages/configurations/configurations-page.component.d.ts.map +1 -1
  54. package/lib/pages/configurations/configurations-page.service.d.ts +3 -1
  55. package/lib/pages/configurations/configurations-page.service.d.ts.map +1 -1
  56. package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts +3 -1
  57. package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts.map +1 -1
  58. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts +35 -0
  59. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts.map +1 -0
  60. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts +59 -0
  61. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts.map +1 -0
  62. package/lib/pages/service-policies/service-policies-page.service.d.ts +3 -1
  63. package/lib/pages/service-policies/service-policies-page.service.d.ts.map +1 -1
  64. package/lib/ziti-console-lib.module.d.ts +19 -17
  65. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  66. package/package.json +1 -1
  67. package/public-api.d.ts +4 -0
  68. package/public-api.d.ts.map +1 -1
@@ -211,6 +211,7 @@ class SimpleServiceComponent extends ProjectableForm {
211
211
  }
212
212
  }
213
213
  async save(refresh) {
214
+ this.serviceApiData.name = this.serviceApiData.name.trim();
214
215
  if (!this.validate()) {
215
216
  return;
216
217
  }
@@ -681,4 +682,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
681
682
  }], selected: [{
682
683
  type: Output
683
684
  }] } });
684
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUMseUJBQXlCLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHdDQUF3QyxDQUFDO0FBRzFGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU5RCxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLeEUsYUFBYTtBQUNiLE1BQU0sRUFBQyxHQUFHLEVBQUMsR0FBRyxNQUFNLENBQUM7QUFFckIsTUFLYSxzQkFB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LEdBQUcsY0FBYyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsSUFBSSxtQkFBbUIsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQztRQUNsSCxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSztJQUNMLENBQUM7K0dBbnBCVSxzQkFBc0Isa0JBOEZyQixnQkFBZ0IsK0NBRWhCLGlCQUFpQiwyQ0FFakIseUJBQXlCO21HQWxHMUIsc0JBQXNCLHNTQ3ZCbkMsMDlaQTJMTTs7U0RwS08sc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9COzswQkFrR3pCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFFdkIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLHlCQUF5Qjt3TEFqRzVCLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQXVGSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1Byb2plY3RhYmxlRm9ybX0gZnJvbSBcIi4uLy4uL3Byb2plY3RhYmxlLWZvcm0uY2xhc3NcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtTRVJWSUNFX0VYVEVOU0lPTl9TRVJWSUNFLCBTZXJ2aWNlRm9ybVNlcnZpY2V9IGZyb20gXCIuLi9zZXJ2aWNlLWZvcm0uc2VydmljZVwiO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0V4dGVuc2lvblNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9leHRlbmRhYmxlL2V4dGVuc2lvbnMtbm9vcC5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uLy4uLy4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHtDcmVhdGlvblN1bW1hcnlEaWFsb2dDb21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi9jcmVhdGlvbi1zdW1tYXJ5LWRpYWxvZy9jcmVhdGlvbi1zdW1tYXJ5LWRpYWxvZy5jb21wb25lbnRcIjtcbmltcG9ydCB7aXNFbXB0eSwgaXNOaWwsIGlzTmFOLCB1bnNldCwgY2xvbmVEZWVwLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtWYWxpZGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7U2VydmljZXNQYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3BhZ2VzL3NlcnZpY2VzL3NlcnZpY2VzLXBhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHthcHB9ID0gd2luZG93O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc2ltcGxlLXNlcnZpY2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zaW1wbGUtc2VydmljZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNpbXBsZVNlcnZpY2VDb21wb25lbnQgZXh0ZW5kcyBQcm9qZWN0YWJsZUZvcm0ge1xuICBASW5wdXQoKSBzZXJ2aWNlUm9sZUF0dHJpYnV0ZXM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGlkZW50aXR5Um9sZUF0dHJpYnV0ZXM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdO1xuXG4gIHNob3dGb3JtID0gdHJ1ZTtcbiAgZm9ybVZpZXcgPSAnc2ltcGxlJztcbiAgY29udHJvbGxlckRvbWFpbiA9ICcnO1xuICB6aXRpU2Vzc2lvbklkO1xuICBpbnRlcmNlcHRQb3J0O1xuICBob3N0UHJvdG9jb2wgPSAndGNwJztcbiAgc2VydmljZUNsaUNvbW1hbmQgPSAnJztcbiAgaW50ZXJjZXB0Q29uZmlnQ2xpQ29tbWFuZCA9ICcnO1xuICBob3N0Q29uZmlnQ2xpQ29tbWFuZCA9ICcnO1xuICBkaWFsUG9saWN5Q2xpQ29tbWFuZCA9ICcnO1xuICBiaW5kUG9saWN5Q2xpQ29tbWFuZCA9ICcnO1xuICBzZXJ2aWNlQXBpVXJsID0gJyc7XG4gIGludGVyY2VwdENvbmZpZ0FwaVVybCA9ICcnO1xuICBob3N0Q29uZmlnQXBpVXJsID0gJyc7XG4gIGRpYWxQb2xpY3lBcGlVcmwgPSAnJztcbiAgYmluZFBvbGljeUFwaVVybCA9ICcnO1xuICBpbml0U2VydmljZUFwaURhdGEgPSB7XG4gICAgbmFtZTogXCJcIixcbiAgICByb2xlQXR0cmlidXRlczogW10sXG4gICAgY29uZmlnczogW10sXG4gICAgZW5jcnlwdGlvblJlcXVpcmVkOiB0cnVlXG4gIH07XG4gIGluaXRJbnRlcmNlcHRDb25maWdBcGlEYXRhID0ge1xuICAgIG5hbWU6IFwiXCIsXG4gICAgY29uZmlnVHlwZUlkOlwiZzdjSVdiY0dnXCIsXG4gICAgZGF0YToge1xuICAgICAgcG9ydFJhbmdlczogW10sXG4gICAgICBhZGRyZXNzZXM6IFtdLFxuICAgICAgcHJvdG9jb2xzOiBbJ3RjcCcsICd1ZHAnXVxuICAgIH1cbiAgfTtcbiAgaW5pdEhvc3RDb25maWdBcGlEYXRhID0ge1xuICAgIG5hbWU6ICcnLFxuICAgIGNvbmZpZ1R5cGVJZDogXCJOSDVwNEZwR1JcIixcbiAgICBkYXRhOiB7XG4gICAgICBhZGRyZXNzOiBcIlwiLFxuICAgICAgcG9ydDogdW5kZWZpbmVkLFxuICAgICAgZm9yd2FyZFByb3RvY29sOiB0cnVlLFxuICAgICAgYWxsb3dlZFByb3RvY29sczogWyd0Y3AnXVxuICAgIH1cbiAgfTtcbiAgaW5pdERpYWxQb2xpY3lBcGlEYXRhID0ge1xuICAgIG5hbWU6IFwiXCIsXG4gICAgdHlwZTogXCJEaWFsXCIsXG4gICAgc2VtYW50aWM6IFwiQW55T2ZcIixcbiAgICBzZXJ2aWNlUm9sZXM6IFtdLFxuICAgIGlkZW50aXR5Um9sZXM6IFtdXG4gIH07XG4gIGluaXRCaW5kUG9saWN5QXBpRGF0YSA9IHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIHR5cGU6IFwiQmluZFwiLFxuICAgIHNlbWFudGljOiBcIkFueU9mXCIsXG4gICAgc2VydmljZVJvbGVzOiBbXSxcbiAgICBpZGVudGl0eVJvbGVzOiBbXVxuICB9O1xuICBzZXJ2aWNlQXBpRGF0YTtcbiAgaW50ZXJjZXB0Q29uZmlnQXBpRGF0YTtcbiAgaG9zdENvbmZpZ0FwaURhdGE7XG4gIGRpYWxQb2xpY3lBcGlEYXRhO1xuICBiaW5kUG9saWN5QXBpRGF0YTtcbiAgZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICBkaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgYmluZFBvbGljeU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICBiaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgaWRlbnRpdGllc05hbWVJZE1hcCA9IHt9O1xuICBpbnRlcmNlcHRDb25maWdJZDtcbiAgaG9zdENvbmZpZ0lkO1xuICBzZXJ2aWNlSWQ7XG4gIHNka09ubHlEaWFsID0gZmFsc2U7XG4gIHNka09ubHlCaW5kID0gZmFsc2U7XG4gIGZvcm1EYXRhID0ge307XG4gIGRpYWxvZ1JlZjogYW55O1xuXG4gIGludGVyY2VwdEluY3JlbWVudCA9IC0xO1xuICBob3N0SW5jcmVtZW50ID0gLTE7XG4gIHNlcnZpY2VJbmNyZW1lbnQgPSAtMTtcbiAgZGlhbEluY3JlbWVudCA9IC0xO1xuICBiaW5kSW5jcmVtZW50ID0gLTE7XG5cbiAgc2VydmljZURhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgaW50ZXJjZXB0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICBob3N0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICBkaWFsRGF0YUNoYW5nZSA9IGZhbHNlO1xuICBiaW5kRGF0YUNoYW5nZSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgICBwdWJsaWMgc3ZjOiBTZXJ2aWNlRm9ybVNlcnZpY2UsXG4gICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBvdmVycmlkZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgQEluamVjdChTRVJWSUNFX0VYVEVOU0lPTl9TRVJWSUNFKSBleHRTZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSBkaWFsb2dGb3JtOiBNYXREaWFsb2csXG4gICAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgIHByaXZhdGUgc2VydmljZXNQYWdlU2VydmljZTogU2VydmljZXNQYWdlU2VydmljZSxcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICkge1xuICAgIHN1cGVyKGdyb3dsZXJTZXJ2aWNlLCBleHRTZXJ2aWNlLCB6aXRpU2VydmljZSwgcm91dGVyLCByb3V0ZSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuY29udHJvbGxlckRvbWFpbiA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlPy5zZXR0aW5ncz8uc2VsZWN0ZWRFZGdlQ29udHJvbGxlcjtcbiAgICB0aGlzLnppdGlTZXNzaW9uSWQgPSB0aGlzLnNldHRpbmdzU2VydmljZT8uc2V0dGluZ3M/LnNlc3Npb24/LmlkO1xuICAgIHRoaXMuaW5pdEZvcm1EYXRhKCk7XG4gICAgdGhpcy5nZXRJZGVudGl0eU5hbWVkQXR0cmlidXRlcygpO1xuICB9XG5cbiAgaW5pdEZvcm1EYXRhKCkge1xuICAgIHRoaXMuc2VydmljZUFwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2VzYDtcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3NgO1xuICAgIHRoaXMuaG9zdENvbmZpZ0FwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3NgO1xuICAgIHRoaXMuZGlhbFBvbGljeUFwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2UtcG9saWNpZXNgO1xuICAgIHRoaXMuYmluZFBvbGljeUFwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2UtcG9saWNpZXNgO1xuICAgIHRoaXMuc2VydmljZUNsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmhvc3RDb25maWdDbGlDb21tYW5kID0gJyc7XG4gICAgdGhpcy5kaWFsUG9saWN5Q2xpQ29tbWFuZCA9ICcnO1xuICAgIHRoaXMuYmluZFBvbGljeUNsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0lkID0gJyc7XG4gICAgdGhpcy5ob3N0Q29uZmlnSWQgPSAnJztcbiAgICB0aGlzLnNlcnZpY2VJZCA9ICcnO1xuICAgIHRoaXMuc2RrT25seURpYWwgPSBmYWxzZTtcbiAgICB0aGlzLnNka09ubHlCaW5kID0gZmFsc2U7XG4gICAgdGhpcy5pbnRlcmNlcHRQb3J0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5iaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5iaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdFNlcnZpY2VBcGlEYXRhKTtcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEgPSBjbG9uZURlZXAodGhpcy5pbml0SW50ZXJjZXB0Q29uZmlnQXBpRGF0YSk7XG4gICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXRIb3N0Q29uZmlnQXBpRGF0YSk7XG4gICAgdGhpcy5kaWFsUG9saWN5QXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXREaWFsUG9saWN5QXBpRGF0YSk7XG4gICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXRCaW5kUG9saWN5QXBpRGF0YSk7XG4gICAgdGhpcy5zZXJ2aWNlc1BhZ2VTZXJ2aWNlLmdldFNlcnZpY2VSb2xlQXR0cmlidXRlcygpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy5zZXJ2aWNlUm9sZUF0dHJpYnV0ZXMgPSByZXN1bHQuZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKGZpbHRlcj8pIHtcbiAgICBjb25zdCBwYWdpbmcgPSB7XG4gICAgICBzZWFyY2hPbjogJ25hbWUnLFxuICAgICAgZmlsdGVyOiBmaWx0ZXIgfHwgJycsXG4gICAgICB0b3RhbDogMzAsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc29ydDogJ25hbWUnLFxuICAgICAgb3JkZXI6ICdhc2MnXG4gICAgfTtcbiAgICB0aGlzLnppdGlTZXJ2aWNlLmdldCgnaWRlbnRpdGllcycsIHBhZ2luZywgW10pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgbmFtZWRBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGEubWFwKChpZGVudGl0eSkgPT4ge1xuICAgICAgICB0aGlzLmlkZW50aXRpZXNOYW1lSWRNYXBbaWRlbnRpdHkubmFtZV0gPSBpZGVudGl0eS5pZDtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5Lm5hbWU7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgfSk7XG4gIH1cblxuICBoZWFkZXJBY3Rpb25SZXF1ZXN0ZWQoYWN0aW9uKSB7XG4gICAgc3dpdGNoKGFjdGlvbi5uYW1lKSB7XG4gICAgICBjYXNlICdzYXZlJzpcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2xvc2UnOlxuICAgICAgICB0aGlzLnJvdXRlcj8ubmF2aWdhdGVCeVVybChgL3NlcnZpY2VzL3NlbGVjdGApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvZ2dsZS12aWV3JzpcbiAgICAgICAgdGhpcy5mb3JtVmlldyA9IGFjdGlvbi5kYXRhO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTZGtPbmx5RGlhbCgpIHtcbiAgICB0aGlzLnNka09ubHlEaWFsID0gIXRoaXMuc2RrT25seURpYWw7XG4gIH1cblxuICB0b2dnbGVTZGtPbmx5QmluZCgpIHtcbiAgICB0aGlzLnNka09ubHlCaW5kID0gIXRoaXMuc2RrT25seUJpbmQ7XG4gIH1cblxuICBzZXJ2aWNlTmFtZUNoYW5nZWQoZXZlbnQpIHtcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEubmFtZSA9IGAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0taW50ZXJjZXB0LWNvbmZpZ2BcbiAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWUgPSBgJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9LWhvc3QtY29uZmlnYFxuICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSA9IGAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0tZGlhbC1wb2xpY3lgXG4gICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YS5uYW1lID0gYCR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfS1iaW5kLXBvbGljeWBcbiAgfVxuXG4gIGludGVyY2VwdFBvcnRDaGFuZ2VkKCRldmVudCkge1xuICAgIGlmIChpc05pbCh0aGlzLmludGVyY2VwdFBvcnQpIHx8IGlzTmFOKHRoaXMuaW50ZXJjZXB0UG9ydCkpIHtcbiAgICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnRSYW5nZXMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlc1swXSA9IHtcbiAgICAgIGhpZ2g6IHRoaXMuaW50ZXJjZXB0UG9ydCxcbiAgICAgIGxvdzogdGhpcy5pbnRlcmNlcHRQb3J0XG4gICAgfTtcbiAgfVxuXG4gIGhvc3RQcm90b2NvbHNDaGFuZ2VkKCRldmVudCkge1xuICAgIHN3aXRjaCAodGhpcy5ob3N0UHJvdG9jb2wpIHtcbiAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEuYWxsb3dlZFByb3RvY29scyA9IFsndGNwJywgJ3VkcCddXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLmFsbG93ZWRQcm90b2NvbHMgPSBbdGhpcy5ob3N0UHJvdG9jb2xdO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlKHJlZnJlc2g/KSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3VtbWFyeURhdGEgPSB0aGlzLnNob3dTdW1tYXJ5KCk7XG4gICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS5jb25maWdzID0gW107XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVJbnRlcmNlcHRDb25maWcoc3VtbWFyeURhdGEpO1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlSG9zdENvbmZpZyhzdW1tYXJ5RGF0YSk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVTZXJ2aWNlKHN1bW1hcnlEYXRhKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBvbGljeShzdW1tYXJ5RGF0YSwgJ0RpYWwnKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBvbGljeShzdW1tYXJ5RGF0YSwgJ0JpbmQnKTtcblxuICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgIGBTaW1wbGUgU2VydmljZSAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0gQ3JlYXRlZGAsXG4gICAgICAgIGBTdWNjZXNzZnVsbHkgY3JlYXRlZCBlbnRpdGllcyBmb3Igc2ltcGxlIHNlcnZpY2UgJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9YCxcbiAgICApO1xuICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG5cbiAgICBzdW1tYXJ5RGF0YT8uZm9yRWFjaCgoZW50aXR5VHlwZSkgPT4ge1xuICAgICAgZW50aXR5VHlwZS5lbnRpdGllcz8uZm9yRWFjaCgoZW50aXR5KSA9PiB7XG4gICAgICAgIGlmIChlbnRpdHkudHlwZSA9PT0gJ3NlcnZpY2VzJykge1xuICAgICAgICAgIGVudGl0eS5jbGlDb21tYW5kID0gdGhpcy5zZXJ2aWNlQ2xpQ29tbWFuZDtcbiAgICAgICAgICBlbnRpdHkuYXBpUmVxdWVzdCA9IHRoaXMuZ2V0U2VydmljZXNBcGlSZXF1ZXN0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5LnR5cGUgPT09ICdjb25maWdzJyAmJiBlbnRpdHkuc3VidHlwZSA9PT0gJ2ludGVyY2VwdCcpIHtcbiAgICAgICAgICBlbnRpdHkuY2xpQ29tbWFuZCA9IHRoaXMuaW50ZXJjZXB0Q29uZmlnQ2xpQ29tbWFuZDtcbiAgICAgICAgICBlbnRpdHkuYXBpUmVxdWVzdCA9IHRoaXMuZ2V0SW50ZXJjZXB0Q29uZmlnQXBpUmVxdWVzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eS50eXBlID09PSAnY29uZmlncycgJiYgZW50aXR5LnN1YnR5cGUgPT09ICdob3N0Jykge1xuICAgICAgICAgIGVudGl0eS5jbGlDb21tYW5kID0gdGhpcy5ob3N0Q29uZmlnQ2xpQ29tbWFuZDtcbiAgICAgICAgICBlbnRpdHkuYXBpUmVxdWVzdCA9IHRoaXMuZ2V0SG9zdENvbmZpZ0FwaVJlcXVlc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkudHlwZSA9PT0gJ3NlcnZpY2UtcG9saWNpZXMnICYmIGVudGl0eS5zdWJ0eXBlID09PSAnZGlhbCcpIHtcbiAgICAgICAgICBlbnRpdHkuY2xpQ29tbWFuZCA9IHRoaXMuZGlhbFBvbGljeUNsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldERpYWxBcGlSZXF1ZXN0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5LnR5cGUgPT09ICdzZXJ2aWNlLXBvbGljaWVzJyAmJiBlbnRpdHkuc3VidHlwZSA9PT0gJ2JpbmQnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLmJpbmRQb2xpY3lDbGlDb21tYW5kO1xuICAgICAgICAgIGVudGl0eS5hcGlSZXF1ZXN0ID0gdGhpcy5nZXRCaW5kQXBpUmVxdWVzdCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNob3dTdW1tYXJ5KCkge1xuICAgIGNvbnN0IGludGVyY2VwdFN1bW1hcnkgPSB7XG4gICAgICBuYW1lOiB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEubmFtZSxcbiAgICAgIHR5cGU6ICdjb25maWdzJyxcbiAgICAgIHN1YnR5cGU6ICdpbnRlcmNlcHQnLFxuICAgICAgYXBpRGF0YTogdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLFxuICAgICAgY2xpQ29tbWFuZDogdGhpcy5pbnRlcmNlcHRDb25maWdDbGlDb21tYW5kLFxuICAgICAgYXBpUmVxdWVzdDogJycsXG4gICAgICBhcGlVcmw6IHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpVXJsLFxuICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICByZXRyeTogdGhpcy5jcmVhdGVJbnRlcmNlcHRDb25maWcuYmluZCh0aGlzKSxcbiAgICB9O1xuICAgIGNvbnN0IGhvc3RTdW1tYXJ5ID0ge1xuICAgICAgbmFtZTogdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5uYW1lLFxuICAgICAgdHlwZTogJ2NvbmZpZ3MnLFxuICAgICAgc3VidHlwZTogJ2hvc3QnLFxuICAgICAgYXBpRGF0YTogdGhpcy5ob3N0Q29uZmlnQXBpRGF0YSxcbiAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuaG9zdENvbmZpZ0NsaUNvbW1hbmQsXG4gICAgICBhcGlSZXF1ZXN0OiAnJyxcbiAgICAgIGFwaVVybDogdGhpcy5ob3N0Q29uZmlnQXBpVXJsLFxuICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICByZXRyeTogdGhpcy5jcmVhdGVIb3N0Q29uZmlnLmJpbmQodGhpcylcbiAgICB9O1xuICAgIGNvbnN0IHN1bW1hcnlEYXRhOiBhbnkgPSBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnU2VydmljZXMnLFxuICAgICAgICBlbnRpdGllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc2VydmljZUFwaURhdGEubmFtZSxcbiAgICAgICAgICAgIHR5cGU6ICdzZXJ2aWNlcycsXG4gICAgICAgICAgICBhcGlEYXRhOiB0aGlzLnNlcnZpY2VBcGlEYXRhLFxuICAgICAgICAgICAgY2xpQ29tbWFuZDogdGhpcy5zZXJ2aWNlQ2xpQ29tbWFuZCxcbiAgICAgICAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgICAgICAgYXBpVXJsOiB0aGlzLnNlcnZpY2VBcGlVcmwsXG4gICAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIHJldHJ5OiB0aGlzLmNyZWF0ZVNlcnZpY2UuYmluZCh0aGlzKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdTZXJ2aWNlIFBvbGljaWVzJyxcbiAgICAgICAgZW50aXRpZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiAnc2VydmljZS1wb2xpY2llcycsXG4gICAgICAgICAgICBzdWJ0eXBlOiAnZGlhbCcsXG4gICAgICAgICAgICBhcGlEYXRhOiB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhLFxuICAgICAgICAgICAgY2xpQ29tbWFuZDogdGhpcy5kaWFsUG9saWN5Q2xpQ29tbWFuZCxcbiAgICAgICAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgICAgICAgYXBpVXJsOiB0aGlzLmRpYWxQb2xpY3lBcGlVcmwsXG4gICAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIHJldHJ5OiAoc3VtbWFyeURhdGEpID0+IHsgdGhpcy5jcmVhdGVQb2xpY3koc3VtbWFyeURhdGEsICdEaWFsJykgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5iaW5kUG9saWN5QXBpRGF0YS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogJ3NlcnZpY2UtcG9saWNpZXMnLFxuICAgICAgICAgICAgc3VidHlwZTogJ2JpbmQnLFxuICAgICAgICAgICAgYXBpRGF0YTogdGhpcy5iaW5kUG9saWN5QXBpRGF0YSxcbiAgICAgICAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuYmluZFBvbGljeUNsaUNvbW1hbmQsXG4gICAgICAgICAgICBhcGlSZXF1ZXN0OiAnJyxcbiAgICAgICAgICAgIGFwaVVybDogdGhpcy5iaW5kUG9saWN5QXBpVXJsLFxuICAgICAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgICAgICByZXRyeTogKHN1bW1hcnlEYXRhKSA9PiB7IHRoaXMuY3JlYXRlUG9saWN5KHN1bW1hcnlEYXRhLCAnQmluZCcpIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdO1xuICAgIGlmICghdGhpcy5zZGtPbmx5RGlhbCAmJiAhdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgc3VtbWFyeURhdGEuc3BsaWNlKDAsMCx7XG4gICAgICAgIHRpdGxlOiAnQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICBlbnRpdGllczogW2ludGVyY2VwdFN1bW1hcnksIGhvc3RTdW1tYXJ5XVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgc3VtbWFyeURhdGEuc3BsaWNlKDAsMCx7XG4gICAgICAgIHRpdGxlOiAnQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICBlbnRpdGllczogW2ludGVyY2VwdFN1bW1hcnldXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICBzdW1tYXJ5RGF0YS5zcGxpY2UoMCwwLHtcbiAgICAgICAgdGl0bGU6ICdDb25maWd1cmF0aW9ucycsXG4gICAgICAgIGVudGl0aWVzOiBbaG9zdFN1bW1hcnldXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHN1bW1hcnlEYXRhOiBzdW1tYXJ5RGF0YVxuICAgIH07XG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihDcmVhdGlvblN1bW1hcnlEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICduZXcnKSB7XG4gICAgICAgIHRoaXMuaW5pdEZvcm1EYXRhKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gJ2NhbmNlbCcpIHtcbiAgICAgICAgLy8vIERvIG5vdGhpbmcsIHN0YXkgb24gcGFnZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbG9zZU1vZGFsKHRydWUsIHRydWUsICcnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3VtbWFyeURhdGE7XG4gIH1cblxuICBhc3luYyBjcmVhdGVJbnRlcmNlcHRDb25maWcoc3VtbWFyeURhdGEpIHtcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc3RhdHVzO1xuICAgIHRoaXMuaW50ZXJjZXB0SW5jcmVtZW50Kys7XG4gICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICBpZiAodGhpcy5pbnRlcmNlcHRJbmNyZW1lbnQgPiAwKSB7XG4gICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5pbnRlcmNlcHRJbmNyZW1lbnQ7XG4gICAgfVxuICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5uYW1lID0gdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLm5hbWUgKyBwb3N0Rml4O1xuICAgIGNvbnN0IGludGVyY2VwdENvbmZpZ1Jlc3VsdDogYW55ID0gYXdhaXQgdGhpcy56aXRpU2VydmljZS5wb3N0KCdjb25maWdzJywgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLCB0cnVlKS5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICAgIGlmIChpbnRlcmNlcHRDb25maWdSZXN1bHQuZXJyb3IpIHtcbiAgICAgIHN0YXR1cyA9ICdlcnJvcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnSWQgPSBpbnRlcmNlcHRDb25maWdSZXN1bHQuaWQgPyBpbnRlcmNlcHRDb25maWdSZXN1bHQuaWQgOiBpbnRlcmNlcHRDb25maWdSZXN1bHQuZGF0YS5pZDtcbiAgICAgIHRoaXMuc2VydmljZUFwaURhdGEuY29uZmlncy5wdXNoKHRoaXMuaW50ZXJjZXB0Q29uZmlnSWQpO1xuICAgICAgdGhpcy5pbnRlcmNlcHRDb25maWdDbGlDb21tYW5kID0gYHppdGkgZWRnZSBjcmVhdGUgY29uZmlnICcke3RoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5uYW1lfScgJyR7dGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmNvbmZpZ1R5cGVJZH0nICcke0pTT04uc3RyaW5naWZ5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhKX0nYDtcbiAgICAgIHN0YXR1cyA9ICdkb25lJztcbiAgICAgIHRoaXMuaW50ZXJjZXB0SW5jcmVtZW50ID0gLTE7XG4gICAgfVxuICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzBdLnN0YXR1cyA9IHN0YXR1cztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUhvc3RDb25maWcoc3VtbWFyeURhdGEpIHtcbiAgICBpZiAodGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc3RhdHVzO1xuICAgIHRoaXMuaG9zdEluY3JlbWVudCsrO1xuICAgIGxldCBwb3N0Rml4ID0gJyc7XG4gICAgaWYgKHRoaXMuaG9zdEluY3JlbWVudCA+IDApIHtcbiAgICAgIHBvc3RGaXggPSAnXycgKyB0aGlzLmhvc3RJbmNyZW1lbnQ7XG4gICAgfVxuICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEubmFtZSA9IHRoaXMuaG9zdENvbmZpZ0FwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgY29uc3QgaG9zdENvbmZpZ1Jlc3VsdDogYW55ID0gYXdhaXQgdGhpcy56aXRpU2VydmljZS5wb3N0KCdjb25maWdzJywgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YSwgdHJ1ZSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICBpZiAoaG9zdENvbmZpZ1Jlc3VsdC5lcnJvcikge1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3N0Q29uZmlnSWQgPSBob3N0Q29uZmlnUmVzdWx0LmlkID8gaG9zdENvbmZpZ1Jlc3VsdC5pZCA6IGhvc3RDb25maWdSZXN1bHQuZGF0YS5pZDtcbiAgICAgIHRoaXMuc2VydmljZUFwaURhdGEuY29uZmlncy5wdXNoKHRoaXMuaG9zdENvbmZpZ0lkKTtcbiAgICAgIHRoaXMuaG9zdENvbmZpZ0NsaUNvbW1hbmQgPSBgeml0aSBlZGdlIGNyZWF0ZSBjb25maWcgJyR7dGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5uYW1lfScgJyR7dGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5jb25maWdUeXBlSWR9JyAnJHtKU09OLnN0cmluZ2lmeSh0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEpfSdgO1xuICAgICAgc3RhdHVzID0gJ2RvbmUnO1xuICAgICAgdGhpcy5ob3N0SW5jcmVtZW50ID0gLTE7XG4gICAgfVxuICAgIGlmICh0aGlzLnNka09ubHlEaWFsKSB7XG4gICAgICBzdW1tYXJ5RGF0YVswXS5lbnRpdGllc1swXS5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICBzdW1tYXJ5RGF0YVswXS5lbnRpdGllc1swXS5hcGlEYXRhID0gdGhpcy5ob3N0Q29uZmlnQXBpRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMV0uc3RhdHVzID0gc3RhdHVzO1xuICAgICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uYXBpRGF0YSA9IHRoaXMuaG9zdENvbmZpZ0FwaURhdGE7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2VydmljZShzdW1tYXJ5RGF0YSkge1xuICAgIHRoaXMuc2VydmljZUluY3JlbWVudCsrO1xuICAgIGxldCBwb3N0Rml4ID0gJyc7XG4gICAgaWYgKHRoaXMuc2VydmljZUluY3JlbWVudCA+IDApIHtcbiAgICAgIHBvc3RGaXggPSAnXycgKyB0aGlzLnNlcnZpY2VJbmNyZW1lbnQ7XG4gICAgfVxuICAgIHRoaXMuc2VydmljZUFwaURhdGEubmFtZSA9IHRoaXMuc2VydmljZUFwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgY29uc3Qgc2VydmljZVJlc3VsdDogYW55ID0gYXdhaXQgdGhpcy56aXRpU2VydmljZS5wb3N0KCdzZXJ2aWNlcycsIHRoaXMuc2VydmljZUFwaURhdGEsIHRydWUpLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgbGV0IHNlcnZpY2VTdGF0dXM7XG4gICAgaWYgKHNlcnZpY2VSZXN1bHQuZXJyb3IpIHtcbiAgICAgIHNlcnZpY2VTdGF0dXMgPSAnZXJyb3InO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2VJZCA9IHNlcnZpY2VSZXN1bHQuaWQgPyBzZXJ2aWNlUmVzdWx0LmlkIDogc2VydmljZVJlc3VsdC5kYXRhLmlkO1xuICAgICAgc2VydmljZVN0YXR1cyA9ICdkb25lJztcbiAgICAgIGxldCBjbGlDb25maWdJZHMgPSAnJztcbiAgICAgIGlmICghdGhpcy5zZGtPbmx5RGlhbCAmJiAhdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgICBjbGlDb25maWdJZHMgPSBgLS1jb25maWdzICcke3RoaXMuaW50ZXJjZXB0Q29uZmlnSWR9LCR7dGhpcy5ob3N0Q29uZmlnSWR9J2A7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnNka09ubHlCaW5kICYmIHRoaXMuc2RrT25seUJpbmQpIHtcbiAgICAgICAgY2xpQ29uZmlnSWRzID0gYC0tY29uZmlncyAnJHt0aGlzLmludGVyY2VwdENvbmZpZ0lkfSdgO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNka09ubHlCaW5kICYmICF0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICAgIGNsaUNvbmZpZ0lkcyA9IGAtLWNvbmZpZ3MgJyR7dGhpcy5pbnRlcmNlcHRDb25maWdJZH0nYDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VydmljZUNsaUNvbW1hbmQgPSBgeml0aSBlZGdlIGNyZWF0ZSBzZXJ2aWNlICcke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0nICR7Y2xpQ29uZmlnSWRzfWBcbiAgICAgIHRoaXMuc2VydmljZUluY3JlbWVudCA9IC0xO1xuICAgIH1cbiAgICBjb25zdCBzdW1tYXJ5SW5kZXggPSAodGhpcy5zZGtPbmx5RGlhbCAmJiB0aGlzLnNka09ubHlCaW5kKSA/IDAgOiAxO1xuICAgIHN1bW1hcnlEYXRhW3N1bW1hcnlJbmRleF0uZW50aXRpZXNbMF0uc3RhdHVzID0gc2VydmljZVN0YXR1cztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVBvbGljeShzdW1tYXJ5RGF0YSwgdHlwZSA9ICdEaWFsJykge1xuICAgIGxldCBwb2xpY3lBcGlEYXRhLCByb2xlQXR0cmlidXRlcywgbmFtZWRBdHRyaWJ1dGVzO1xuICAgIGlmICh0eXBlID09PSAnRGlhbCcpIHtcbiAgICAgIHRoaXMuZGlhbEluY3JlbWVudCsrO1xuICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgIGlmICh0aGlzLmRpYWxJbmNyZW1lbnQgPiAwKSB7XG4gICAgICAgIHBvc3RGaXggPSAnXycgKyB0aGlzLmRpYWxJbmNyZW1lbnQ7XG4gICAgICB9XG4gICAgICB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhLm5hbWUgPSB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhLm5hbWUgKyBwb3N0Rml4O1xuICAgICAgcG9saWN5QXBpRGF0YSA9IHRoaXMuZGlhbFBvbGljeUFwaURhdGE7XG4gICAgICByb2xlQXR0cmlidXRlcyA9IHRoaXMuZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzO1xuICAgICAgbmFtZWRBdHRyaWJ1dGVzID0gdGhpcy5kaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJpbmRJbmNyZW1lbnQrKztcbiAgICAgIGxldCBwb3N0Rml4ID0gJyc7XG4gICAgICBpZiAodGhpcy5iaW5kSW5jcmVtZW50ID4gMCkge1xuICAgICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5iaW5kSW5jcmVtZW50O1xuICAgICAgfVxuICAgICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YS5uYW1lID0gdGhpcy5iaW5kUG9saWN5QXBpRGF0YS5uYW1lICsgcG9zdEZpeDtcbiAgICAgIHBvbGljeUFwaURhdGEgPSB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhO1xuICAgICAgcm9sZUF0dHJpYnV0ZXMgPSB0aGlzLmJpbmRQb2xpY3lSb2xlQXR0cmlidXRlcztcbiAgICAgIG5hbWVkQXR0cmlidXRlcyA9IHRoaXMuYmluZFBvbGljeU5hbWVkQXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBwb2xpY3lBcGlEYXRhLnNlcnZpY2VSb2xlcyA9IFtgQCR7dGhpcy5zZXJ2aWNlSWR9YF07XG4gICAgbGV0IGNsaVJvbGVzID0gJyc7XG4gICAgbGV0IHN0YXR1cyA9ICcnO1xuICAgIHBvbGljeUFwaURhdGEuaWRlbnRpdHlSb2xlcyA9IG5hbWVkQXR0cmlidXRlcy5tYXAoKG5hbWUpID0+IHtcbiAgICAgIGNsaVJvbGVzICs9ICdAJyArIHRoaXMuaWRlbnRpdGllc05hbWVJZE1hcFtuYW1lXSArICcsJztcbiAgICAgIHJldHVybiAnQCcgKyB0aGlzLmlkZW50aXRpZXNOYW1lSWRNYXBbbmFtZV07XG4gICAgfSk7XG4gICAgcG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzID0gWy4uLnBvbGljeUFwaURhdGEuaWRlbnRpdHlSb2xlcywgLi4ucm9sZUF0dHJpYnV0ZXMubWFwKChyb2xlKSA9PiB7XG4gICAgICBjbGlSb2xlcyArPSAnIycgKyByb2xlICsgJywnO1xuICAgICAgcmV0dXJuICcjJyArIHJvbGU7XG4gICAgfSldO1xuICAgIGNsaVJvbGVzID0gY2xpUm9sZXMuc2xpY2UoMCwgLTEpO1xuICAgIGNvbnN0IGRpYWxQb2xpY3lSZXN1bHQgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLnBvc3QoJ3NlcnZpY2UtcG9saWNpZXMnLCBwb2xpY3lBcGlEYXRhKS5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICAgIGlmIChkaWFsUG9saWN5UmVzdWx0LmVycm9yKSB7XG4gICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0dXMgPSAnZG9uZSc7XG4gICAgfVxuICAgIGNvbnN0IHN1bW1hcnlJbmRleCA9ICh0aGlzLnNka09ubHlEaWFsICYmIHRoaXMuc2RrT25seUJpbmQpID8gMSA6IDI7XG4gICAgY29uc3QgZW50aXR5SW5kZXggPSB0eXBlID09PSAnRGlhbCcgPyAwIDogMTtcbiAgICBzdW1tYXJ5RGF0YVtzdW1tYXJ5SW5kZXhdLmVudGl0aWVzW2VudGl0eUluZGV4XS5zdGF0dXMgPSBzdGF0dXM7XG4gICAgY29uc3QgY2xpQ29tbWFuZCA9IGB6aXRpIGVkZ2UgY3JlYXRlIHNlcnZpY2UtcG9saWN5ICcke3BvbGljeUFwaURhdGEubmFtZX0nICR7dHlwZX0gLS1zZW1hbnRpYyBBbnlPZiAtLXNlcnZpY2Utcm9sZXMgJ0Ake3RoaXMuc2VydmljZUlkfScgLS1pZGVudGl0eS1yb2xlcyAnJHtjbGlSb2xlc30nYDtcbiAgICBpZiAodHlwZSA9PT0gJ0RpYWwnKSB7XG4gICAgICB0aGlzLmRpYWxQb2xpY3lDbGlDb21tYW5kID0gY2xpQ29tbWFuZDtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdkb25lJykge1xuICAgICAgICB0aGlzLmRpYWxJbmNyZW1lbnQgPSAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYmluZEluY3JlbWVudCA9IC0xO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJpbmRQb2xpY3lDbGlDb21tYW5kID0gY2xpQ29tbWFuZDtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB0aGlzLmVycm9ycyA9IHt9O1xuICAgIHRoaXMudmFsaWRhdGVTZXJ2aWNlTmFtZSgpO1xuICAgIHRoaXMudmFsaWRhdGVJbnRlcmNlcHRBZGRyZXNzKCk7XG4gICAgdGhpcy52YWxpZGF0ZUludGVyY2VwdFBvcnQoKTtcbiAgICB0aGlzLnZhbGlkYXRlSG9zdEFkZHJlc3MoKTtcbiAgICB0aGlzLnZhbGlkYXRlSG9zdFBvcnQoKTtcbiAgICB0aGlzLnZhbGlkYXRlRGlhbElkZW50aXRpZXMoKVxuICAgIHRoaXMudmFsaWRhdGVCaW5kSWRlbnRpdGllcygpO1xuICAgIHJldHVybiBpc0VtcHR5KHRoaXMuZXJyb3JzKTtcbiAgfVxuXG4gIHZhbGlkYXRlU2VydmljZU5hbWUoKSB7XG4gICAgaWYgKGlzRW1wdHkodGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lKSkge1xuICAgICAgdGhpcy5lcnJvcnMubmFtZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnbmFtZScpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSW50ZXJjZXB0QWRkcmVzcygpIHtcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRBZGRyZXNzJyk7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdEFkZHJlc3NGb3JtYXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzRW1wdHkodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc2VzKSB8fCBpc0VtcHR5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3Nlc1swXSkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmludGVyY2VwdEFkZHJlc3MgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuaXNWYWxpZEludGVyY2VwdEhvc3QodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc2VzWzBdKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0QWRkcmVzcyA9IHRydWU7XG4gICAgICB0aGlzLmVycm9ycy5pbnRlcmNlcHRBZGRyZXNzRm9ybWF0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRBZGRyZXNzJyk7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdEFkZHJlc3NGb3JtYXQnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUludGVyY2VwdFBvcnQoKSB7XG4gICAgaWYgKHRoaXMuc2RrT25seURpYWwpIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0UG9ydCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNFbXB0eSh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUG9ydFJhbmdlcyh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0UG9ydCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSG9zdEFkZHJlc3MoKSB7XG4gICAgaWYgKCF0aGlzLnNka09ubHlCaW5kICYmIGlzRW1wdHkodGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3MpKSB7XG4gICAgICB0aGlzLmVycm9ycy5ob3N0QWRkcmVzcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaG9zdEFkZHJlc3MnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUhvc3RQb3J0KCkge1xuICAgIGlmICh0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2hvc3RQb3J0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc05pbCh0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydCkgfHwgaXNOYU4odGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnQpKSB7XG4gICAgICB0aGlzLmVycm9ycy5ob3N0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghdGhpcy52YWxpZGF0aW9uU2VydmljZS5pc1ZhbGlkUG9ydCh0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydCkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhvc3RQb3J0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdob3N0UG9ydCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGlhbElkZW50aXRpZXMoKSB7XG4gICAgaWYgKGlzRW1wdHkoWy4uLnRoaXMuZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlcywgLi4udGhpcy5kaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXNdKSkge1xuICAgICAgdGhpcy5lcnJvcnMuZGlhbElkZW50aXRpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2RpYWxJZGVudGl0aWVzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCaW5kSWRlbnRpdGllcygpIHtcbiAgICBpZiAoaXNFbXB0eShbLi4udGhpcy5iaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzLCAuLi50aGlzLmJpbmRQb2xpY3lSb2xlQXR0cmlidXRlc10pKSB7XG4gICAgICB0aGlzLmVycm9ycy5iaW5kSWRlbnRpdGllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnYmluZElkZW50aXRpZXMnKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZXJ2aWNlc0FwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2VzJyBcXFxcXG4gICAgICAtSCAnYWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonIFxcXFxcbiAgICAgIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgICAgIC1IICd6dC1zZXNzaW9uOiAke3RoaXMueml0aVNlc3Npb25JZH0nIFxcXFxcbiAgICAgIC0tZGF0YS1yYXcgJyR7SlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2aWNlQXBpRGF0YSl9JyBcXFxcYFxuICB9XG5cbiAgZ2V0SW50ZXJjZXB0Q29uZmlnQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvY29uZmlncycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YSl9JyBcXFxcYFxuICB9XG5cbiAgZ2V0SG9zdENvbmZpZ0FwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3MnIFxcXFxcbiAgICAgIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicgXFxcXFxuICAgICAgLUggJ2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbicgXFxcXFxuICAgICAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy56aXRpU2Vzc2lvbklkfScgXFxcXFxuICAgICAgLS1kYXRhLXJhdyAnJHtKU09OLnN0cmluZ2lmeSh0aGlzLmhvc3RDb25maWdBcGlEYXRhKX0nIFxcXFxgXG4gIH1cblxuICBnZXREaWFsQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZS1wb2xpY2llcycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuZGlhbFBvbGljeUFwaURhdGEpfScgXFxcXGA7XG4gIH1cblxuICBnZXRCaW5kQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZS1wb2xpY2llcycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuYmluZFBvbGljeUFwaURhdGEpfScgXFxcXGA7XG4gIH1cblxuICBvdmVycmlkZSBjaGVja0RhdGFDaGFuZ2UoKSB7XG4gICAgY29uc3Qgc2VydmljZURhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXRTZXJ2aWNlQXBpRGF0YSwgdGhpcy5zZXJ2aWNlQXBpRGF0YSk7XG4gICAgY29uc3QgaW50ZXJjZXB0RGF0YUNoYW5nZSA9ICFpc0VxdWFsKHRoaXMuaW5pdEludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YSwgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEpO1xuICAgIGNvbnN0IGhvc3REYXRhQ2hhbmdlID0gIWlzRXF1YWwodGhpcy5pbml0SG9zdENvbmZpZ0FwaURhdGEuZGF0YSwgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhKTtcbiAgICBjb25zdCBkaWFsRGF0YUNoYW5nZSA9ICFpc0VxdWFsKHRoaXMuaW5pdERpYWxQb2xpY3lBcGlEYXRhLCB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhKTtcbiAgICBjb25zdCBiaW5kRGF0YUNoYW5nZSA9ICFpc0VxdWFsKHRoaXMuaW5pdEJpbmRQb2xpY3lBcGlEYXRhLCB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhKTtcbiAgICBjb25zdCBkYXRhQ2hhbmdlID0gc2VydmljZURhdGFDaGFuZ2UgIT09IHRoaXMuc2VydmljZURhdGFDaGFuZ2UgfHwgaW50ZXJjZXB0RGF0YUNoYW5nZSAhPT0gdGhpcy5pbnRlcmNlcHREYXRhQ2hhbmdlIHx8IGhvc3REYXRhQ2hhbmdlICE9PSB0aGlzLmhvc3REYXRhQ2hhbmdlIHx8XG4gICAgICAgIGRpYWxEYXRhQ2hhbmdlICE9PSB0aGlzLmRpYWxEYXRhQ2hhbmdlIHx8IGJpbmREYXRhQ2hhbmdlICE9PSB0aGlzLmJpbmREYXRhQ2hhbmdlO1xuICAgIGlmIChkYXRhQ2hhbmdlKSB7XG4gICAgICB0aGlzLnNlcnZpY2VEYXRhQ2hhbmdlID0gc2VydmljZURhdGFDaGFuZ2U7XG4gICAgICB0aGlzLmludGVyY2VwdERhdGFDaGFuZ2UgPSBpbnRlcmNlcHREYXRhQ2hhbmdlO1xuICAgICAgdGhpcy5ob3N0RGF0YUNoYW5nZSA9IGhvc3REYXRhQ2hhbmdlO1xuICAgICAgdGhpcy5kaWFsRGF0YUNoYW5nZSA9IGRpYWxEYXRhQ2hhbmdlO1xuICAgICAgdGhpcy5iaW5kRGF0YUNoYW5nZSA9IGJpbmREYXRhQ2hhbmdlO1xuICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoZGF0YUNoYW5nZSk7XG4gICAgfVxuICAgIHRoaXMuX2RhdGFDaGFuZ2UgPSBzZXJ2aWNlRGF0YUNoYW5nZSB8fCBpbnRlcmNlcHREYXRhQ2hhbmdlIHx8IGhvc3REYXRhQ2hhbmdlIHx8IGRpYWxEYXRhQ2hhbmdlIHx8IGJpbmREYXRhQ2hhbmdlO1xuICAgIGFwcC5pc0RpcnR5ID0gZmFsc2U7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInByb2plY3RhYmxlLWZvcm0td3JhcHBlciBzaW1wbGUtc2VydmljZS13cmFwcGVyXCJcbiAgICAgKGtleXVwLmVudGVyKT1cInNhdmUoJGV2ZW50KVwiXG4gICAgIChrZXl1cC5lc2NhcGUpPVwiY2xvc2VNb2RhbCh0cnVlLCBmYWxzZSwgJ2NhcmRzJywgJGV2ZW50KVwiXG4gICAgIHRhYmluZGV4PVwiMFwiXG4+XG4gICAgPGxpYi1mb3JtLWhlYWRlclxuICAgICAgICAgICAgW2RhdGFdPVwiZm9ybURhdGFcIlxuICAgICAgICAgICAgW3RpdGxlXT1cInNob3dGb3JtID8gJ0NyZWF0ZSBhIFNpbXBsZSBTZXJ2aWNlJyA6ICdTZXJ2aWNlIENyZWF0aW9uIFN1bW1hcnknXCJcbiAgICAgICAgICAgIFthY3Rpb25CdXR0b25UZXh0XT1cIidTYXZlJ1wiXG4gICAgICAgICAgICAoYWN0aW9uUmVxdWVzdGVkKT1cImhlYWRlckFjdGlvblJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFsoZm9ybVZpZXcpXT1cImZvcm1WaWV3XCJcbiAgICA+PC9saWItZm9ybS1oZWFkZXI+XG4gICAgPGRpdiBjbGFzcz1cInNpbXBsZS1zZXJ2aWNlLWZvcm0tY29udGFpbmVyIHByb2plY3RhYmxlLWZvcm0tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtbiB0aHJlZS1maWZ0aHNcIiAqbmdJZj1cInNob3dGb3JtXCI+XG4gICAgICAgICAgICA8ZGl2ICBpZD1cIklubGluZVNlcnZpY2VBcmVhXCIgY2xhc3M9XCJhbnlhZGRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLXNlcnZpY2UtaW5wdXRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXIgW3RpdGxlXT1cIidTZXJ2aWNlIERldGFpbHMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dC1ncm91cCBzZXJ2aWNlLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5TZXJ2aWNlIE5hbWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5hbWUgdGhpcyBzZXJ2aWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25hbWVGaWVsZElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5uYW1lfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlcnZpY2VBcGlEYXRhLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInNlcnZpY2VOYW1lQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidmFsaWRhdGVTZXJ2aWNlTmFtZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1zdWItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPlNFTEVDVCBPUiBDUkVBVEUgU0VSVklDRSBBVFRSSUJVVEVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwic2VydmljZUFwaURhdGEucm9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZVJvbGVBdHRyaWJ1dGVzXT1cInNlcnZpY2VSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0FkZCBhdHRyaWJ1dGVzIHRvIGdyb3VwIHNlcnZpY2VzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaW1wbGUtc2VydmljZS1jZW50ZXItY29udGVudFwiICpuZ0lmPVwic2hvd0Zvcm1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQUNDRVNTSU5HIENPTkZJR1VSQVRJT04nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDk5OTk5OTk5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ0hvdyB3aWxsIGNsaWVudCBhcHBsaWNhdGlvbnMgdXNlIHRoaXMgc2VydmljZT8gU3BlY2lmeSBhIGhvc3RuYW1lL0lQIGFuZCBwb3J0LCBvciB1c2UgdGhlICZxdW90O1NESyBPbmx5JnF1b3Q7IHRvZ2dsZSBmb3IgYW4gYXBwbGljYXRpb24gZW1iZWRkZWQgY29uZmlndXJhdGlvbi4nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0LWdyb3VwIGFjY2Vzc2luZy1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hhdCBpZGVudGl0aWVzIGNhbiBhY2Nlc3MgdGhpcyBzZXJ2aWNlPzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyldPVwiZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cImRpYWxQb2xpY3lSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cImlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVSb2xlQXR0cmlidXRlc109XCJpZGVudGl0eVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGlkZW50aXR5IGF0dHJpYnV0ZXMgdG8gZ3JhbnQgYWNjZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzRXJyb3JdPVwiZXJyb3JzLmRpYWxJZGVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZE5hbWVkQXR0cmlidXRlc0NoYW5nZSk9XCJ2YWxpZGF0ZURpYWxJZGVudGl0aWVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwidmFsaWRhdGVEaWFsSWRlbnRpdGllcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZ2V0SWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+SG93IHdpbGwgdGhlIHNlcnZpY2UgYmUgYWNjZXNzZWQ/PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFkZHJlc3NQb3J0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5TREsgT05MWTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGstdG9nZ2xlIGZvcm0tZmllbGQtdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoR3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2RrT25seURpYWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgb246IHNka09ubHlEaWFsIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCIhc2RrT25seURpYWxcIiBjbGFzcz1cIm9uLWxhYmVsXCI+WUVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwic2RrT25seURpYWxcIiBjbGFzcz1cIm9mZi1sYWJlbFwiPk5PPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seURpYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWhvc3RuYW1lLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPkhPU1ROQU1FIC8gSVA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtaW5mbyBpbmZvaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBY2Nlc3NpbmcgaG9zdG5hbWVzIG11c3QgaW5jbHVkZSBhICcuJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlcnJvcnMuaW50ZXJjZXB0QWRkcmVzc0Zvcm1hdFwiIGNsYXNzPVwiZXJyb3ItbGFiZWxcIj5BY2Nlc3NpbmcgaG9zdG5hbWVzIG11c3QgaW5jbHVkZSBhICcuJzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG93VG9cIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjEwMFwiIGRhdGEtaTE4bj1cIkVnSG9zdFwiIChjaGFuZ2UpPVwidmFsaWRhdGVJbnRlcmNlcHRBZGRyZXNzKClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5pbnRlcmNlcHRBZGRyZXNzfVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5RGlhbCA/ICcnIDogJ2UuZy4gbXlzZXJ2aWNlLnppdGknXCIgWyhuZ01vZGVsKV09XCJzZGtPbmx5RGlhbCA/ICcnIDogaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3Nlc1swXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seURpYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+UE9SVDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvd1RvUG9ydFwiIHR5cGU9XCJudW1iZXJcIiBtYXhsZW5ndGg9XCIxMFwiIChjaGFuZ2UpPVwidmFsaWRhdGVJbnRlcmNlcHRQb3J0KClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5pbnRlcmNlcHRQb3J0fVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5RGlhbCA/ICcnIDogNDQzXCIgKGtleXVwKT1cImludGVyY2VwdFBvcnRDaGFuZ2VkKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNka09ubHlEaWFsID8gJycgOiBpbnRlcmNlcHRQb3J0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInSE9TVElORyBDT05GSUdVUkFUSU9OJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudFN0eWxlXT1cIid6LWluZGV4OiA5OTk5OTk5OSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidXaGVyZSBzaG91bGQgdHJhZmZpYyBmb3IgdGhpcyBzZXJ2aWNlIGJlIHNlbnQ/IFNwZWNpZnkgYSBwcm90b2NvbCwgaG9zdG5hbWUvSVAsIGFuZCBwb3J0LCBvciB1c2UgdGhlICZxdW90O1NESyBPbmx5JnF1b3Q7IHRvZ2dsZSBmb3IgYW4gYXBwbGljYXRpb24gZW1iZWRkZWQgY29uZmlndXJhdGlvbi4nXCJcblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXQtZ3JvdXAgaG9zdGluZy1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hhdCBpZGVudGl0aWVzIGNhbiBob3N0IHRoaXMgc2VydmljZT88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpXT1cImJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKV09XCJiaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZU5hbWVkQXR0cmlidXRlc109XCJpZGVudGl0eU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwiaWRlbnRpdHlSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBpZGVudGl0eSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzRXJyb3JdPVwiZXJyb3JzLmJpbmRJZGVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZE5hbWVkQXR0cmlidXRlc0NoYW5nZSk9XCJ2YWxpZGF0ZUJpbmRJZGVudGl0aWVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwidmFsaWRhdGVCaW5kSWRlbnRpdGllcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1zdWItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLXRpdGxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5XaGVyZSBzaG91bGQgdHJhZmZpYyBiZSBzZW50Pzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBhZGRyZXNzRnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWl0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+U0RLIE9OTFk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RrLXRvZ2dsZSBmb3JtLWZpZWxkLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaEdyaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNka09ubHlCaW5kKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IG9uOiBzZGtPbmx5QmluZCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwiIXNka09ubHlCaW5kXCIgY2xhc3M9XCJvbi1sYWJlbFwiPllFUzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInNka09ubHlCaW5kXCIgY2xhc3M9XCJvZmYtbGFiZWxcIj5OTzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IHNka09ubHlCaW5kfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPlBST1RPQ09MPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cIkhvc3RlZFByb3RvY29sXCIgKGNoYW5nZSk9XCJob3N0UHJvdG9jb2xzQ2hhbmdlZCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJzZGtPbmx5QmluZCA/ICcnIDogaG9zdFByb3RvY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInRjcFwiPlRDUDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ1ZHBcIiA+VURQPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJvdGhcIiA+VENQL1VEUDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWl0ZW0tY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBzZGtPbmx5QmluZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5IT1NUTkFNRSAvIElQPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG9zdGVkSG9zdFwiIHR5cGU9XCJ0ZXh0XCIgbWF4bGVuZ3RoPVwiMTAwXCIgZGF0YS1pMThuPVwiRWdIb3N0XCIgKGNoYW5nZSk9XCJ2YWxpZGF0ZUhvc3RBZGRyZXNzKClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5ob3N0QWRkcmVzc31cIiBbcGxhY2Vob2xkZXJdPVwic2RrT25seUJpbmQgPyAnJyA6ICdlLmcuIG15c2VydmljZS56aXRpJ1wiIFsobmdNb2RlbCldPVwic2RrT25seUJpbmQgPyAnJyA6IGhvc3RDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seUJpbmR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+UE9SVDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvc3RlZFBvcnRcIiB0eXBlPVwibnVtYmVyXCIgbWF4bGVuZ3RoPVwiMTBcIiAoY2hhbmdlKT1cInZhbGlkYXRlSG9zdFBvcnQoKVwiIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzLmhvc3RQb3J0fVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5QmluZCA/ICcnIDogNDQzXCIgWyhuZ01vZGVsKV09XCJzZGtPbmx5QmluZCA/ICcnIDogaG9zdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
685
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUMseUJBQXlCLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHdDQUF3QyxDQUFDO0FBRzFGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU5RCxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLeEUsYUFBYTtBQUNiLE1BQU0sRUFBQyxHQUFHLEVBQUMsR0FBRyxNQUFNLENBQUM7QUFFckIsTUFLYSxzQkFB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QWlCLEdBQUcsaUJBQWlCLENBQUM7WUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO1lBQy9DLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsSUFBSSxtQkFBbUIsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQztRQUNsSCxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSztJQUNMLENBQUM7K0dBcHBCVSxzQkFBc0Isa0JBOEZyQixnQkFBZ0IsK0NBRWhCLGlCQUFpQiwyQ0FFakIseUJBQXlCO21HQWxHMUIsc0JBQXNCLHNTQ3ZCbkMsMDlaQTJMTTs7U0RwS08sc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9COzswQkFrR3pCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFFdkIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLHlCQUF5Qjt3TEFqRzVCLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQXVGSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1Byb2plY3RhYmxlRm9ybX0gZnJvbSBcIi4uLy4uL3Byb2plY3RhYmxlLWZvcm0uY2xhc3NcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtTRVJWSUNFX0VYVEVOU0lPTl9TRVJWSUNFLCBTZXJ2aWNlRm9ybVNlcnZpY2V9IGZyb20gXCIuLi9zZXJ2aWNlLWZvcm0uc2VydmljZVwiO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0V4dGVuc2lvblNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9leHRlbmRhYmxlL2V4dGVuc2lvbnMtbm9vcC5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uLy4uLy4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHtDcmVhdGlvblN1bW1hcnlEaWFsb2dDb21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi9jcmVhdGlvbi1zdW1tYXJ5LWRpYWxvZy9jcmVhdGlvbi1zdW1tYXJ5LWRpYWxvZy5jb21wb25lbnRcIjtcbmltcG9ydCB7aXNFbXB0eSwgaXNOaWwsIGlzTmFOLCB1bnNldCwgY2xvbmVEZWVwLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtWYWxpZGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7U2VydmljZXNQYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3BhZ2VzL3NlcnZpY2VzL3NlcnZpY2VzLXBhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHthcHB9ID0gd2luZG93O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc2ltcGxlLXNlcnZpY2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zaW1wbGUtc2VydmljZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNpbXBsZVNlcnZpY2VDb21wb25lbnQgZXh0ZW5kcyBQcm9qZWN0YWJsZUZvcm0ge1xuICBASW5wdXQoKSBzZXJ2aWNlUm9sZUF0dHJpYnV0ZXM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGlkZW50aXR5Um9sZUF0dHJpYnV0ZXM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdO1xuXG4gIHNob3dGb3JtID0gdHJ1ZTtcbiAgZm9ybVZpZXcgPSAnc2ltcGxlJztcbiAgY29udHJvbGxlckRvbWFpbiA9ICcnO1xuICB6aXRpU2Vzc2lvbklkO1xuICBpbnRlcmNlcHRQb3J0O1xuICBob3N0UHJvdG9jb2wgPSAndGNwJztcbiAgc2VydmljZUNsaUNvbW1hbmQgPSAnJztcbiAgaW50ZXJjZXB0Q29uZmlnQ2xpQ29tbWFuZCA9ICcnO1xuICBob3N0Q29uZmlnQ2xpQ29tbWFuZCA9ICcnO1xuICBkaWFsUG9saWN5Q2xpQ29tbWFuZCA9ICcnO1xuICBiaW5kUG9saWN5Q2xpQ29tbWFuZCA9ICcnO1xuICBzZXJ2aWNlQXBpVXJsID0gJyc7XG4gIGludGVyY2VwdENvbmZpZ0FwaVVybCA9ICcnO1xuICBob3N0Q29uZmlnQXBpVXJsID0gJyc7XG4gIGRpYWxQb2xpY3lBcGlVcmwgPSAnJztcbiAgYmluZFBvbGljeUFwaVVybCA9ICcnO1xuICBpbml0U2VydmljZUFwaURhdGEgPSB7XG4gICAgbmFtZTogXCJcIixcbiAgICByb2xlQXR0cmlidXRlczogW10sXG4gICAgY29uZmlnczogW10sXG4gICAgZW5jcnlwdGlvblJlcXVpcmVkOiB0cnVlXG4gIH07XG4gIGluaXRJbnRlcmNlcHRDb25maWdBcGlEYXRhID0ge1xuICAgIG5hbWU6IFwiXCIsXG4gICAgY29uZmlnVHlwZUlkOlwiZzdjSVdiY0dnXCIsXG4gICAgZGF0YToge1xuICAgICAgcG9ydFJhbmdlczogW10sXG4gICAgICBhZGRyZXNzZXM6IFtdLFxuICAgICAgcHJvdG9jb2xzOiBbJ3RjcCcsICd1ZHAnXVxuICAgIH1cbiAgfTtcbiAgaW5pdEhvc3RDb25maWdBcGlEYXRhID0ge1xuICAgIG5hbWU6ICcnLFxuICAgIGNvbmZpZ1R5cGVJZDogXCJOSDVwNEZwR1JcIixcbiAgICBkYXRhOiB7XG4gICAgICBhZGRyZXNzOiBcIlwiLFxuICAgICAgcG9ydDogdW5kZWZpbmVkLFxuICAgICAgZm9yd2FyZFByb3RvY29sOiB0cnVlLFxuICAgICAgYWxsb3dlZFByb3RvY29sczogWyd0Y3AnXVxuICAgIH1cbiAgfTtcbiAgaW5pdERpYWxQb2xpY3lBcGlEYXRhID0ge1xuICAgIG5hbWU6IFwiXCIsXG4gICAgdHlwZTogXCJEaWFsXCIsXG4gICAgc2VtYW50aWM6IFwiQW55T2ZcIixcbiAgICBzZXJ2aWNlUm9sZXM6IFtdLFxuICAgIGlkZW50aXR5Um9sZXM6IFtdXG4gIH07XG4gIGluaXRCaW5kUG9saWN5QXBpRGF0YSA9IHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIHR5cGU6IFwiQmluZFwiLFxuICAgIHNlbWFudGljOiBcIkFueU9mXCIsXG4gICAgc2VydmljZVJvbGVzOiBbXSxcbiAgICBpZGVudGl0eVJvbGVzOiBbXVxuICB9O1xuICBzZXJ2aWNlQXBpRGF0YTtcbiAgaW50ZXJjZXB0Q29uZmlnQXBpRGF0YTtcbiAgaG9zdENvbmZpZ0FwaURhdGE7XG4gIGRpYWxQb2xpY3lBcGlEYXRhO1xuICBiaW5kUG9saWN5QXBpRGF0YTtcbiAgZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICBkaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgYmluZFBvbGljeU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICBiaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgaWRlbnRpdGllc05hbWVJZE1hcCA9IHt9O1xuICBpbnRlcmNlcHRDb25maWdJZDtcbiAgaG9zdENvbmZpZ0lkO1xuICBzZXJ2aWNlSWQ7XG4gIHNka09ubHlEaWFsID0gZmFsc2U7XG4gIHNka09ubHlCaW5kID0gZmFsc2U7XG4gIGZvcm1EYXRhID0ge307XG4gIGRpYWxvZ1JlZjogYW55O1xuXG4gIGludGVyY2VwdEluY3JlbWVudCA9IC0xO1xuICBob3N0SW5jcmVtZW50ID0gLTE7XG4gIHNlcnZpY2VJbmNyZW1lbnQgPSAtMTtcbiAgZGlhbEluY3JlbWVudCA9IC0xO1xuICBiaW5kSW5jcmVtZW50ID0gLTE7XG5cbiAgc2VydmljZURhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgaW50ZXJjZXB0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICBob3N0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICBkaWFsRGF0YUNoYW5nZSA9IGZhbHNlO1xuICBiaW5kRGF0YUNoYW5nZSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgICBwdWJsaWMgc3ZjOiBTZXJ2aWNlRm9ybVNlcnZpY2UsXG4gICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBvdmVycmlkZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgQEluamVjdChTRVJWSUNFX0VYVEVOU0lPTl9TRVJWSUNFKSBleHRTZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSBkaWFsb2dGb3JtOiBNYXREaWFsb2csXG4gICAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgIHByaXZhdGUgc2VydmljZXNQYWdlU2VydmljZTogU2VydmljZXNQYWdlU2VydmljZSxcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICkge1xuICAgIHN1cGVyKGdyb3dsZXJTZXJ2aWNlLCBleHRTZXJ2aWNlLCB6aXRpU2VydmljZSwgcm91dGVyLCByb3V0ZSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuY29udHJvbGxlckRvbWFpbiA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlPy5zZXR0aW5ncz8uc2VsZWN0ZWRFZGdlQ29udHJvbGxlcjtcbiAgICB0aGlzLnppdGlTZXNzaW9uSWQgPSB0aGlzLnNldHRpbmdzU2VydmljZT8uc2V0dGluZ3M/LnNlc3Npb24/LmlkO1xuICAgIHRoaXMuaW5pdEZvcm1EYXRhKCk7XG4gICAgdGhpcy5nZXRJZGVudGl0eU5hbWVkQXR0cmlidXRlcygpO1xuICB9XG5cbiAgaW5pdEZvcm1EYXRhKCkge1xuICAgIHRoaXMuc2VydmljZUFwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2VzYDtcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3NgO1xuICAgIHRoaXMuaG9zdENvbmZpZ0FwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3NgO1xuICAgIHRoaXMuZGlhbFBvbGljeUFwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2UtcG9saWNpZXNgO1xuICAgIHRoaXMuYmluZFBvbGljeUFwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2UtcG9saWNpZXNgO1xuICAgIHRoaXMuc2VydmljZUNsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmhvc3RDb25maWdDbGlDb21tYW5kID0gJyc7XG4gICAgdGhpcy5kaWFsUG9saWN5Q2xpQ29tbWFuZCA9ICcnO1xuICAgIHRoaXMuYmluZFBvbGljeUNsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0lkID0gJyc7XG4gICAgdGhpcy5ob3N0Q29uZmlnSWQgPSAnJztcbiAgICB0aGlzLnNlcnZpY2VJZCA9ICcnO1xuICAgIHRoaXMuc2RrT25seURpYWwgPSBmYWxzZTtcbiAgICB0aGlzLnNka09ubHlCaW5kID0gZmFsc2U7XG4gICAgdGhpcy5pbnRlcmNlcHRQb3J0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5iaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5iaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdFNlcnZpY2VBcGlEYXRhKTtcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEgPSBjbG9uZURlZXAodGhpcy5pbml0SW50ZXJjZXB0Q29uZmlnQXBpRGF0YSk7XG4gICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXRIb3N0Q29uZmlnQXBpRGF0YSk7XG4gICAgdGhpcy5kaWFsUG9saWN5QXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXREaWFsUG9saWN5QXBpRGF0YSk7XG4gICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXRCaW5kUG9saWN5QXBpRGF0YSk7XG4gICAgdGhpcy5zZXJ2aWNlc1BhZ2VTZXJ2aWNlLmdldFNlcnZpY2VSb2xlQXR0cmlidXRlcygpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy5zZXJ2aWNlUm9sZUF0dHJpYnV0ZXMgPSByZXN1bHQuZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKGZpbHRlcj8pIHtcbiAgICBjb25zdCBwYWdpbmcgPSB7XG4gICAgICBzZWFyY2hPbjogJ25hbWUnLFxuICAgICAgZmlsdGVyOiBmaWx0ZXIgfHwgJycsXG4gICAgICB0b3RhbDogMzAsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc29ydDogJ25hbWUnLFxuICAgICAgb3JkZXI6ICdhc2MnXG4gICAgfTtcbiAgICB0aGlzLnppdGlTZXJ2aWNlLmdldCgnaWRlbnRpdGllcycsIHBhZ2luZywgW10pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgbmFtZWRBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGEubWFwKChpZGVudGl0eSkgPT4ge1xuICAgICAgICB0aGlzLmlkZW50aXRpZXNOYW1lSWRNYXBbaWRlbnRpdHkubmFtZV0gPSBpZGVudGl0eS5pZDtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5Lm5hbWU7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgfSk7XG4gIH1cblxuICBoZWFkZXJBY3Rpb25SZXF1ZXN0ZWQoYWN0aW9uKSB7XG4gICAgc3dpdGNoKGFjdGlvbi5uYW1lKSB7XG4gICAgICBjYXNlICdzYXZlJzpcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2xvc2UnOlxuICAgICAgICB0aGlzLnJvdXRlcj8ubmF2aWdhdGVCeVVybChgL3NlcnZpY2VzL3NlbGVjdGApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvZ2dsZS12aWV3JzpcbiAgICAgICAgdGhpcy5mb3JtVmlldyA9IGFjdGlvbi5kYXRhO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTZGtPbmx5RGlhbCgpIHtcbiAgICB0aGlzLnNka09ubHlEaWFsID0gIXRoaXMuc2RrT25seURpYWw7XG4gIH1cblxuICB0b2dnbGVTZGtPbmx5QmluZCgpIHtcbiAgICB0aGlzLnNka09ubHlCaW5kID0gIXRoaXMuc2RrT25seUJpbmQ7XG4gIH1cblxuICBzZXJ2aWNlTmFtZUNoYW5nZWQoZXZlbnQpIHtcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEubmFtZSA9IGAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0taW50ZXJjZXB0LWNvbmZpZ2BcbiAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWUgPSBgJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9LWhvc3QtY29uZmlnYFxuICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSA9IGAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0tZGlhbC1wb2xpY3lgXG4gICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YS5uYW1lID0gYCR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfS1iaW5kLXBvbGljeWBcbiAgfVxuXG4gIGludGVyY2VwdFBvcnRDaGFuZ2VkKCRldmVudCkge1xuICAgIGlmIChpc05pbCh0aGlzLmludGVyY2VwdFBvcnQpIHx8IGlzTmFOKHRoaXMuaW50ZXJjZXB0UG9ydCkpIHtcbiAgICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnRSYW5nZXMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlc1swXSA9IHtcbiAgICAgIGhpZ2g6IHRoaXMuaW50ZXJjZXB0UG9ydCxcbiAgICAgIGxvdzogdGhpcy5pbnRlcmNlcHRQb3J0XG4gICAgfTtcbiAgfVxuXG4gIGhvc3RQcm90b2NvbHNDaGFuZ2VkKCRldmVudCkge1xuICAgIHN3aXRjaCAodGhpcy5ob3N0UHJvdG9jb2wpIHtcbiAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEuYWxsb3dlZFByb3RvY29scyA9IFsndGNwJywgJ3VkcCddXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLmFsbG93ZWRQcm90b2NvbHMgPSBbdGhpcy5ob3N0UHJvdG9jb2xdO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlKHJlZnJlc2g/KSB7XG4gICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lID0gdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lLnRyaW0oKTtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdW1tYXJ5RGF0YSA9IHRoaXMuc2hvd1N1bW1hcnkoKTtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhLmNvbmZpZ3MgPSBbXTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZUludGVyY2VwdENvbmZpZyhzdW1tYXJ5RGF0YSk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVIb3N0Q29uZmlnKHN1bW1hcnlEYXRhKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVNlcnZpY2Uoc3VtbWFyeURhdGEpO1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlUG9saWN5KHN1bW1hcnlEYXRhLCAnRGlhbCcpO1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlUG9saWN5KHN1bW1hcnlEYXRhLCAnQmluZCcpO1xuXG4gICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgYFNpbXBsZSBTZXJ2aWNlICR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfSBDcmVhdGVkYCxcbiAgICAgICAgYFN1Y2Nlc3NmdWxseSBjcmVhdGVkIGVudGl0aWVzIGZvciBzaW1wbGUgc2VydmljZSAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX1gLFxuICAgICk7XG4gICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcblxuICAgIHN1bW1hcnlEYXRhPy5mb3JFYWNoKChlbnRpdHlUeXBlKSA9PiB7XG4gICAgICBlbnRpdHlUeXBlLmVudGl0aWVzPy5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgICAgaWYgKGVudGl0eS50eXBlID09PSAnc2VydmljZXMnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLnNlcnZpY2VDbGlDb21tYW5kO1xuICAgICAgICAgIGVudGl0eS5hcGlSZXF1ZXN0ID0gdGhpcy5nZXRTZXJ2aWNlc0FwaVJlcXVlc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkudHlwZSA9PT0gJ2NvbmZpZ3MnICYmIGVudGl0eS5zdWJ0eXBlID09PSAnaW50ZXJjZXB0Jykge1xuICAgICAgICAgIGVudGl0eS5jbGlDb21tYW5kID0gdGhpcy5pbnRlcmNlcHRDb25maWdDbGlDb21tYW5kO1xuICAgICAgICAgIGVudGl0eS5hcGlSZXF1ZXN0ID0gdGhpcy5nZXRJbnRlcmNlcHRDb25maWdBcGlSZXF1ZXN0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5LnR5cGUgPT09ICdjb25maWdzJyAmJiBlbnRpdHkuc3VidHlwZSA9PT0gJ2hvc3QnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLmhvc3RDb25maWdDbGlDb21tYW5kO1xuICAgICAgICAgIGVudGl0eS5hcGlSZXF1ZXN0ID0gdGhpcy5nZXRIb3N0Q29uZmlnQXBpUmVxdWVzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eS50eXBlID09PSAnc2VydmljZS1wb2xpY2llcycgJiYgZW50aXR5LnN1YnR5cGUgPT09ICdkaWFsJykge1xuICAgICAgICAgIGVudGl0eS5jbGlDb21tYW5kID0gdGhpcy5kaWFsUG9saWN5Q2xpQ29tbWFuZDtcbiAgICAgICAgICBlbnRpdHkuYXBpUmVxdWVzdCA9IHRoaXMuZ2V0RGlhbEFwaVJlcXVlc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkudHlwZSA9PT0gJ3NlcnZpY2UtcG9saWNpZXMnICYmIGVudGl0eS5zdWJ0eXBlID09PSAnYmluZCcpIHtcbiAgICAgICAgICBlbnRpdHkuY2xpQ29tbWFuZCA9IHRoaXMuYmluZFBvbGljeUNsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldEJpbmRBcGlSZXF1ZXN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2hvd1N1bW1hcnkoKSB7XG4gICAgY29uc3QgaW50ZXJjZXB0U3VtbWFyeSA9IHtcbiAgICAgIG5hbWU6IHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5uYW1lLFxuICAgICAgdHlwZTogJ2NvbmZpZ3MnLFxuICAgICAgc3VidHlwZTogJ2ludGVyY2VwdCcsXG4gICAgICBhcGlEYXRhOiB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEsXG4gICAgICBjbGlDb21tYW5kOiB0aGlzLmludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQsXG4gICAgICBhcGlSZXF1ZXN0OiAnJyxcbiAgICAgIGFwaVVybDogdGhpcy5pbnRlcmNlcHRDb25maWdBcGlVcmwsXG4gICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgIHJldHJ5OiB0aGlzLmNyZWF0ZUludGVyY2VwdENvbmZpZy5iaW5kKHRoaXMpLFxuICAgIH07XG4gICAgY29uc3QgaG9zdFN1bW1hcnkgPSB7XG4gICAgICBuYW1lOiB0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWUsXG4gICAgICB0eXBlOiAnY29uZmlncycsXG4gICAgICBzdWJ0eXBlOiAnaG9zdCcsXG4gICAgICBhcGlEYXRhOiB0aGlzLmhvc3RDb25maWdBcGlEYXRhLFxuICAgICAgY2xpQ29tbWFuZDogdGhpcy5ob3N0Q29uZmlnQ2xpQ29tbWFuZCxcbiAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgYXBpVXJsOiB0aGlzLmhvc3RDb25maWdBcGlVcmwsXG4gICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgIHJldHJ5OiB0aGlzLmNyZWF0ZUhvc3RDb25maWcuYmluZCh0aGlzKVxuICAgIH07XG4gICAgY29uc3Qgc3VtbWFyeURhdGE6IGFueSA9IFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdTZXJ2aWNlcycsXG4gICAgICAgIGVudGl0aWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogJ3NlcnZpY2VzJyxcbiAgICAgICAgICAgIGFwaURhdGE6IHRoaXMuc2VydmljZUFwaURhdGEsXG4gICAgICAgICAgICBjbGlDb21tYW5kOiB0aGlzLnNlcnZpY2VDbGlDb21tYW5kLFxuICAgICAgICAgICAgYXBpUmVxdWVzdDogJycsXG4gICAgICAgICAgICBhcGlVcmw6IHRoaXMuc2VydmljZUFwaVVybCxcbiAgICAgICAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgICAgICAgcmV0cnk6IHRoaXMuY3JlYXRlU2VydmljZS5iaW5kKHRoaXMpXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1NlcnZpY2UgUG9saWNpZXMnLFxuICAgICAgICBlbnRpdGllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSxcbiAgICAgICAgICAgIHR5cGU6ICdzZXJ2aWNlLXBvbGljaWVzJyxcbiAgICAgICAgICAgIHN1YnR5cGU6ICdkaWFsJyxcbiAgICAgICAgICAgIGFwaURhdGE6IHRoaXMuZGlhbFBvbGljeUFwaURhdGEsXG4gICAgICAgICAgICBjbGlDb21tYW5kOiB0aGlzLmRpYWxQb2xpY3lDbGlDb21tYW5kLFxuICAgICAgICAgICAgYXBpUmVxdWVzdDogJycsXG4gICAgICAgICAgICBhcGlVcmw6IHRoaXMuZGlhbFBvbGljeUFwaVVybCxcbiAgICAgICAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgICAgICAgcmV0cnk6IChzdW1tYXJ5RGF0YSkgPT4geyB0aGlzLmNyZWF0ZVBvbGljeShzdW1tYXJ5RGF0YSwgJ0RpYWwnKSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiAnc2VydmljZS1wb2xpY2llcycsXG4gICAgICAgICAgICBzdWJ0eXBlOiAnYmluZCcsXG4gICAgICAgICAgICBhcGlEYXRhOiB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLFxuICAgICAgICAgICAgY2xpQ29tbWFuZDogdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZCxcbiAgICAgICAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgICAgICAgYXBpVXJsOiB0aGlzLmJpbmRQb2xpY3lBcGlVcmwsXG4gICAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIHJldHJ5OiAoc3VtbWFyeURhdGEpID0+IHsgdGhpcy5jcmVhdGVQb2xpY3koc3VtbWFyeURhdGEsICdCaW5kJykgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF07XG4gICAgaWYgKCF0aGlzLnNka09ubHlEaWFsICYmICF0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICBzdW1tYXJ5RGF0YS5zcGxpY2UoMCwwLHtcbiAgICAgICAgdGl0bGU6ICdDb25maWd1cmF0aW9ucycsXG4gICAgICAgIGVudGl0aWVzOiBbaW50ZXJjZXB0U3VtbWFyeSwgaG9zdFN1bW1hcnldXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNka09ubHlEaWFsKSB7XG4gICAgICBzdW1tYXJ5RGF0YS5zcGxpY2UoMCwwLHtcbiAgICAgICAgdGl0bGU6ICdDb25maWd1cmF0aW9ucycsXG4gICAgICAgIGVudGl0aWVzOiBbaW50ZXJjZXB0U3VtbWFyeV1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuc2RrT25seUJpbmQpIHtcbiAgICAgIHN1bW1hcnlEYXRhLnNwbGljZSgwLDAse1xuICAgICAgICB0aXRsZTogJ0NvbmZpZ3VyYXRpb25zJyxcbiAgICAgICAgZW50aXRpZXM6IFtob3N0U3VtbWFyeV1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgc3VtbWFyeURhdGE6IHN1bW1hcnlEYXRhXG4gICAgfTtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nRm9ybS5vcGVuKENyZWF0aW9uU3VtbWFyeURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ25ldycpIHtcbiAgICAgICAgdGhpcy5pbml0Rm9ybURhdGEoKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSAnY2FuY2VsJykge1xuICAgICAgICAvLy8gRG8gbm90aGluZywgc3RheSBvbiBwYWdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNsb3NlTW9kYWwodHJ1ZSwgdHJ1ZSwgJycpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzdW1tYXJ5RGF0YTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUludGVyY2VwdENvbmZpZyhzdW1tYXJ5RGF0YSkge1xuICAgIGlmICh0aGlzLnNka09ubHlEaWFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBzdGF0dXM7XG4gICAgdGhpcy5pbnRlcmNlcHRJbmNyZW1lbnQrKztcbiAgICBsZXQgcG9zdEZpeCA9ICcnO1xuICAgIGlmICh0aGlzLmludGVyY2VwdEluY3JlbWVudCA+IDApIHtcbiAgICAgIHBvc3RGaXggPSAnXycgKyB0aGlzLmludGVyY2VwdEluY3JlbWVudDtcbiAgICB9XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLm5hbWUgPSB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgY29uc3QgaW50ZXJjZXB0Q29uZmlnUmVzdWx0OiBhbnkgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLnBvc3QoJ2NvbmZpZ3MnLCB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEsIHRydWUpLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgaWYgKGludGVyY2VwdENvbmZpZ1Jlc3VsdC5lcnJvcikge1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcmNlcHRDb25maWdJZCA9IGludGVyY2VwdENvbmZpZ1Jlc3VsdC5pZCA/IGludGVyY2VwdENvbmZpZ1Jlc3VsdC5pZCA6IGludGVyY2VwdENvbmZpZ1Jlc3VsdC5kYXRhLmlkO1xuICAgICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS5jb25maWdzLnB1c2godGhpcy5pbnRlcmNlcHRDb25maWdJZCk7XG4gICAgICB0aGlzLmludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQgPSBgeml0aSBlZGdlIGNyZWF0ZSBjb25maWcgJyR7dGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLm5hbWV9JyAnJHt0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuY29uZmlnVHlwZUlkfScgJyR7SlNPTi5zdHJpbmdpZnkodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEpfSdgO1xuICAgICAgc3RhdHVzID0gJ2RvbmUnO1xuICAgICAgdGhpcy5pbnRlcmNlcHRJbmNyZW1lbnQgPSAtMTtcbiAgICB9XG4gICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uc3RhdHVzID0gc3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlSG9zdENvbmZpZyhzdW1tYXJ5RGF0YSkge1xuICAgIGlmICh0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBzdGF0dXM7XG4gICAgdGhpcy5ob3N0SW5jcmVtZW50Kys7XG4gICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICBpZiAodGhpcy5ob3N0SW5jcmVtZW50ID4gMCkge1xuICAgICAgcG9zdEZpeCA9ICdfJyArIHRoaXMuaG9zdEluY3JlbWVudDtcbiAgICB9XG4gICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5uYW1lID0gdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5uYW1lICsgcG9zdEZpeDtcbiAgICBjb25zdCBob3N0Q29uZmlnUmVzdWx0OiBhbnkgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLnBvc3QoJ2NvbmZpZ3MnLCB0aGlzLmhvc3RDb25maWdBcGlEYXRhLCB0cnVlKS5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICAgIGlmIChob3N0Q29uZmlnUmVzdWx0LmVycm9yKSB7XG4gICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvc3RDb25maWdJZCA9IGhvc3RDb25maWdSZXN1bHQuaWQgPyBob3N0Q29uZmlnUmVzdWx0LmlkIDogaG9zdENvbmZpZ1Jlc3VsdC5kYXRhLmlkO1xuICAgICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS5jb25maWdzLnB1c2godGhpcy5ob3N0Q29uZmlnSWQpO1xuICAgICAgdGhpcy5ob3N0Q29uZmlnQ2xpQ29tbWFuZCA9IGB6aXRpIGVkZ2UgY3JlYXRlIGNvbmZpZyAnJHt0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWV9JyAnJHt0aGlzLmhvc3RDb25maWdBcGlEYXRhLmNvbmZpZ1R5cGVJZH0nICcke0pTT04uc3RyaW5naWZ5KHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YSl9J2A7XG4gICAgICBzdGF0dXMgPSAnZG9uZSc7XG4gICAgICB0aGlzLmhvc3RJbmNyZW1lbnQgPSAtMTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2RrT25seURpYWwpIHtcbiAgICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzBdLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzBdLmFwaURhdGEgPSB0aGlzLmhvc3RDb25maWdBcGlEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdW1tYXJ5RGF0YVswXS5lbnRpdGllc1sxXS5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICBzdW1tYXJ5RGF0YVswXS5lbnRpdGllc1swXS5hcGlEYXRhID0gdGhpcy5ob3N0Q29uZmlnQXBpRGF0YTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXJ2aWNlKHN1bW1hcnlEYXRhKSB7XG4gICAgdGhpcy5zZXJ2aWNlSW5jcmVtZW50Kys7XG4gICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICBpZiAodGhpcy5zZXJ2aWNlSW5jcmVtZW50ID4gMCkge1xuICAgICAgcG9zdEZpeCA9ICdfJyArIHRoaXMuc2VydmljZUluY3JlbWVudDtcbiAgICB9XG4gICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lID0gdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lICsgcG9zdEZpeDtcbiAgICBjb25zdCBzZXJ2aWNlUmVzdWx0OiBhbnkgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLnBvc3QoJ3NlcnZpY2VzJywgdGhpcy5zZXJ2aWNlQXBpRGF0YSwgdHJ1ZSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICBsZXQgc2VydmljZVN0YXR1cztcbiAgICBpZiAoc2VydmljZVJlc3VsdC5lcnJvcikge1xuICAgICAgc2VydmljZVN0YXR1cyA9ICdlcnJvcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VydmljZUlkID0gc2VydmljZVJlc3VsdC5pZCA/IHNlcnZpY2VSZXN1bHQuaWQgOiBzZXJ2aWNlUmVzdWx0LmRhdGEuaWQ7XG4gICAgICBzZXJ2aWNlU3RhdHVzID0gJ2RvbmUnO1xuICAgICAgbGV0IGNsaUNvbmZpZ0lkcyA9ICcnO1xuICAgICAgaWYgKCF0aGlzLnNka09ubHlEaWFsICYmICF0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICAgIGNsaUNvbmZpZ0lkcyA9IGAtLWNvbmZpZ3MgJyR7dGhpcy5pbnRlcmNlcHRDb25maWdJZH0sJHt0aGlzLmhvc3RDb25maWdJZH0nYDtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2RrT25seUJpbmQgJiYgdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgICBjbGlDb25maWdJZHMgPSBgLS1jb25maWdzICcke3RoaXMuaW50ZXJjZXB0Q29uZmlnSWR9J2A7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2RrT25seUJpbmQgJiYgIXRoaXMuc2RrT25seUJpbmQpIHtcbiAgICAgICAgY2xpQ29uZmlnSWRzID0gYC0tY29uZmlncyAnJHt0aGlzLmludGVyY2VwdENvbmZpZ0lkfSdgO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlQ2xpQ29tbWFuZCA9IGB6aXRpIGVkZ2UgY3JlYXRlIHNlcnZpY2UgJyR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfScgJHtjbGlDb25maWdJZHN9YFxuICAgICAgdGhpcy5zZXJ2aWNlSW5jcmVtZW50ID0gLTE7XG4gICAgfVxuICAgIGNvbnN0IHN1bW1hcnlJbmRleCA9ICh0aGlzLnNka09ubHlEaWFsICYmIHRoaXMuc2RrT25seUJpbmQpID8gMCA6IDE7XG4gICAgc3VtbWFyeURhdGFbc3VtbWFyeUluZGV4XS5lbnRpdGllc1swXS5zdGF0dXMgPSBzZXJ2aWNlU3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUG9saWN5KHN1bW1hcnlEYXRhLCB0eXBlID0gJ0RpYWwnKSB7XG4gICAgbGV0IHBvbGljeUFwaURhdGEsIHJvbGVBdHRyaWJ1dGVzLCBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgaWYgKHR5cGUgPT09ICdEaWFsJykge1xuICAgICAgdGhpcy5kaWFsSW5jcmVtZW50Kys7XG4gICAgICBsZXQgcG9zdEZpeCA9ICcnO1xuICAgICAgaWYgKHRoaXMuZGlhbEluY3JlbWVudCA+IDApIHtcbiAgICAgICAgcG9zdEZpeCA9ICdfJyArIHRoaXMuZGlhbEluY3JlbWVudDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSA9IHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgICBwb2xpY3lBcGlEYXRhID0gdGhpcy5kaWFsUG9saWN5QXBpRGF0YTtcbiAgICAgIHJvbGVBdHRyaWJ1dGVzID0gdGhpcy5kaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXM7XG4gICAgICBuYW1lZEF0dHJpYnV0ZXMgPSB0aGlzLmRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmluZEluY3JlbWVudCsrO1xuICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgIGlmICh0aGlzLmJpbmRJbmNyZW1lbnQgPiAwKSB7XG4gICAgICAgIHBvc3RGaXggPSAnXycgKyB0aGlzLmJpbmRJbmNyZW1lbnQ7XG4gICAgICB9XG4gICAgICB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUgPSB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUgKyBwb3N0Rml4O1xuICAgICAgcG9saWN5QXBpRGF0YSA9IHRoaXMuYmluZFBvbGljeUFwaURhdGE7XG4gICAgICByb2xlQXR0cmlidXRlcyA9IHRoaXMuYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzO1xuICAgICAgbmFtZWRBdHRyaWJ1dGVzID0gdGhpcy5iaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHBvbGljeUFwaURhdGEuc2VydmljZVJvbGVzID0gW2BAJHt0aGlzLnNlcnZpY2VJZH1gXTtcbiAgICBsZXQgY2xpUm9sZXMgPSAnJztcbiAgICBsZXQgc3RhdHVzID0gJyc7XG4gICAgcG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzID0gbmFtZWRBdHRyaWJ1dGVzLm1hcCgobmFtZSkgPT4ge1xuICAgICAgY2xpUm9sZXMgKz0gJ0AnICsgdGhpcy5pZGVudGl0aWVzTmFtZUlkTWFwW25hbWVdICsgJywnO1xuICAgICAgcmV0dXJuICdAJyArIHRoaXMuaWRlbnRpdGllc05hbWVJZE1hcFtuYW1lXTtcbiAgICB9KTtcbiAgICBwb2xpY3lBcGlEYXRhLmlkZW50aXR5Um9sZXMgPSBbLi4ucG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzLCAuLi5yb2xlQXR0cmlidXRlcy5tYXAoKHJvbGUpID0+IHtcbiAgICAgIGNsaVJvbGVzICs9ICcjJyArIHJvbGUgKyAnLCc7XG4gICAgICByZXR1cm4gJyMnICsgcm9sZTtcbiAgICB9KV07XG4gICAgY2xpUm9sZXMgPSBjbGlSb2xlcy5zbGljZSgwLCAtMSk7XG4gICAgY29uc3QgZGlhbFBvbGljeVJlc3VsdCA9IGF3YWl0IHRoaXMueml0aVNlcnZpY2UucG9zdCgnc2VydmljZS1wb2xpY2llcycsIHBvbGljeUFwaURhdGEpLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgaWYgKGRpYWxQb2xpY3lSZXN1bHQuZXJyb3IpIHtcbiAgICAgIHN0YXR1cyA9ICdlcnJvcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXR1cyA9ICdkb25lJztcbiAgICB9XG4gICAgY29uc3Qgc3VtbWFyeUluZGV4ID0gKHRoaXMuc2RrT25seURpYWwgJiYgdGhpcy5zZGtPbmx5QmluZCkgPyAxIDogMjtcbiAgICBjb25zdCBlbnRpdHlJbmRleCA9IHR5cGUgPT09ICdEaWFsJyA/IDAgOiAxO1xuICAgIHN1bW1hcnlEYXRhW3N1bW1hcnlJbmRleF0uZW50aXRpZXNbZW50aXR5SW5kZXhdLnN0YXR1cyA9IHN0YXR1cztcbiAgICBjb25zdCBjbGlDb21tYW5kID0gYHppdGkgZWRnZSBjcmVhdGUgc2VydmljZS1wb2xpY3kgJyR7cG9saWN5QXBpRGF0YS5uYW1lfScgJHt0eXBlfSAtLXNlbWFudGljIEFueU9mIC0tc2VydmljZS1yb2xlcyAnQCR7dGhpcy5zZXJ2aWNlSWR9JyAtLWlkZW50aXR5LXJvbGVzICcke2NsaVJvbGVzfSdgO1xuICAgIGlmICh0eXBlID09PSAnRGlhbCcpIHtcbiAgICAgIHRoaXMuZGlhbFBvbGljeUNsaUNvbW1hbmQgPSBjbGlDb21tYW5kO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ2RvbmUnKSB7XG4gICAgICAgIHRoaXMuZGlhbEluY3JlbWVudCA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5iaW5kSW5jcmVtZW50ID0gLTE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmluZFBvbGljeUNsaUNvbW1hbmQgPSBjbGlDb21tYW5kO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgdGhpcy52YWxpZGF0ZVNlcnZpY2VOYW1lKCk7XG4gICAgdGhpcy52YWxpZGF0ZUludGVyY2VwdEFkZHJlc3MoKTtcbiAgICB0aGlzLnZhbGlkYXRlSW50ZXJjZXB0UG9ydCgpO1xuICAgIHRoaXMudmFsaWRhdGVIb3N0QWRkcmVzcygpO1xuICAgIHRoaXMudmFsaWRhdGVIb3N0UG9ydCgpO1xuICAgIHRoaXMudmFsaWRhdGVEaWFsSWRlbnRpdGllcygpXG4gICAgdGhpcy52YWxpZGF0ZUJpbmRJZGVudGl0aWVzKCk7XG4gICAgcmV0dXJuIGlzRW1wdHkodGhpcy5lcnJvcnMpO1xuICB9XG5cbiAgdmFsaWRhdGVTZXJ2aWNlTmFtZSgpIHtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWUpKSB7XG4gICAgICB0aGlzLmVycm9ycy5uYW1lID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICduYW1lJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVJbnRlcmNlcHRBZGRyZXNzKCkge1xuICAgIGlmICh0aGlzLnNka09ubHlEaWFsKSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdEFkZHJlc3MnKTtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0QWRkcmVzc0Zvcm1hdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNFbXB0eSh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5hZGRyZXNzZXMpIHx8IGlzRW1wdHkodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc2VzWzBdKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0QWRkcmVzcyA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghdGhpcy52YWxpZGF0aW9uU2VydmljZS5pc1ZhbGlkSW50ZXJjZXB0SG9zdCh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5hZGRyZXNzZXNbMF0pKSB7XG4gICAgICB0aGlzLmVycm9ycy5pbnRlcmNlcHRBZGRyZXNzID0gdHJ1ZTtcbiAgICAgIHRoaXMuZXJyb3JzLmludGVyY2VwdEFkZHJlc3NGb3JtYXQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdEFkZHJlc3MnKTtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0QWRkcmVzc0Zvcm1hdCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSW50ZXJjZXB0UG9ydCgpIHtcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRQb3J0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0VtcHR5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnRSYW5nZXMpKSB7XG4gICAgICB0aGlzLmVycm9ycy5pbnRlcmNlcHRQb3J0ID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVQb3J0UmFuZ2VzKHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnRSYW5nZXMpKSB7XG4gICAgICB0aGlzLmVycm9ycy5pbnRlcmNlcHRQb3J0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRQb3J0Jyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVIb3N0QWRkcmVzcygpIHtcbiAgICBpZiAoIXRoaXMuc2RrT25seUJpbmQgJiYgaXNFbXB0eSh0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzcykpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhvc3RBZGRyZXNzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdob3N0QWRkcmVzcycpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSG9zdFBvcnQoKSB7XG4gICAgaWYgKHRoaXMuc2RrT25seUJpbmQpIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaG9zdFBvcnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzTmlsKHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0KSB8fCBpc05hTih0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydCkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhvc3RQb3J0ID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmlzVmFsaWRQb3J0KHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0KSkge1xuICAgICAgdGhpcy5lcnJvcnMuaG9zdFBvcnQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2hvc3RQb3J0Jyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVEaWFsSWRlbnRpdGllcygpIHtcbiAgICBpZiAoaXNFbXB0eShbLi4udGhpcy5kaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzLCAuLi50aGlzLmRpYWxQb2xpY3lSb2xlQXR0cmlidXRlc10pKSB7XG4gICAgICB0aGlzLmVycm9ycy5kaWFsSWRlbnRpdGllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnZGlhbElkZW50aXRpZXMnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUJpbmRJZGVudGl0aWVzKCkge1xuICAgIGlmIChpc0VtcHR5KFsuLi50aGlzLmJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXMsIC4uLnRoaXMuYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzXSkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmJpbmRJZGVudGl0aWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdiaW5kSWRlbnRpdGllcycpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlcnZpY2VzQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZXMnIFxcXFxcbiAgICAgIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicgXFxcXFxuICAgICAgLUggJ2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbicgXFxcXFxuICAgICAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy56aXRpU2Vzc2lvbklkfScgXFxcXFxuICAgICAgLS1kYXRhLXJhdyAnJHtKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZpY2VBcGlEYXRhKX0nIFxcXFxgXG4gIH1cblxuICBnZXRJbnRlcmNlcHRDb25maWdBcGlSZXF1ZXN0KCkge1xuICAgIHJldHVybiBgY3VybCAnJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9jb25maWdzJyBcXFxcXG4gICAgICAtSCAnYWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonIFxcXFxcbiAgICAgIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgICAgIC1IICd6dC1zZXNzaW9uOiAke3RoaXMueml0aVNlc3Npb25JZH0nIFxcXFxcbiAgICAgIC0tZGF0YS1yYXcgJyR7SlNPTi5zdHJpbmdpZnkodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhKX0nIFxcXFxgXG4gIH1cblxuICBnZXRIb3N0Q29uZmlnQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvY29uZmlncycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuaG9zdENvbmZpZ0FwaURhdGEpfScgXFxcXGBcbiAgfVxuXG4gIGdldERpYWxBcGlSZXF1ZXN0KCkge1xuICAgIHJldHVybiBgY3VybCAnJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlLXBvbGljaWVzJyBcXFxcXG4gICAgICAtSCAnYWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonIFxcXFxcbiAgICAgIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgICAgIC1IICd6dC1zZXNzaW9uOiAke3RoaXMueml0aVNlc3Npb25JZH0nIFxcXFxcbiAgICAgIC0tZGF0YS1yYXcgJyR7SlNPTi5zdHJpbmdpZnkodGhpcy5kaWFsUG9saWN5QXBpRGF0YSl9JyBcXFxcYDtcbiAgfVxuXG4gIGdldEJpbmRBcGlSZXF1ZXN0KCkge1xuICAgIHJldHVybiBgY3VybCAnJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlLXBvbGljaWVzJyBcXFxcXG4gICAgICAtSCAnYWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonIFxcXFxcbiAgICAgIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgICAgIC1IICd6dC1zZXNzaW9uOiAke3RoaXMueml0aVNlc3Npb25JZH0nIFxcXFxcbiAgICAgIC0tZGF0YS1yYXcgJyR7SlNPTi5zdHJpbmdpZnkodGhpcy5iaW5kUG9saWN5QXBpRGF0YSl9JyBcXFxcYDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNoZWNrRGF0YUNoYW5nZSgpIHtcbiAgICBjb25zdCBzZXJ2aWNlRGF0YUNoYW5nZSA9ICFpc0VxdWFsKHRoaXMuaW5pdFNlcnZpY2VBcGlEYXRhLCB0aGlzLnNlcnZpY2VBcGlEYXRhKTtcbiAgICBjb25zdCBpbnRlcmNlcHREYXRhQ2hhbmdlID0gIWlzRXF1YWwodGhpcy5pbml0SW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLCB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YSk7XG4gICAgY29uc3QgaG9zdERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXRIb3N0Q29uZmlnQXBpRGF0YS5kYXRhLCB0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEpO1xuICAgIGNvbnN0IGRpYWxEYXRhQ2hhbmdlID0gIWlzRXF1YWwodGhpcy5pbml0RGlhbFBvbGljeUFwaURhdGEsIHRoaXMuZGlhbFBvbGljeUFwaURhdGEpO1xuICAgIGNvbnN0IGJpbmREYXRhQ2hhbmdlID0gIWlzRXF1YWwodGhpcy5pbml0QmluZFBvbGljeUFwaURhdGEsIHRoaXMuYmluZFBvbGljeUFwaURhdGEpO1xuICAgIGNvbnN0IGRhdGFDaGFuZ2UgPSBzZXJ2aWNlRGF0YUNoYW5nZSAhPT0gdGhpcy5zZXJ2aWNlRGF0YUNoYW5nZSB8fCBpbnRlcmNlcHREYXRhQ2hhbmdlICE9PSB0aGlzLmludGVyY2VwdERhdGFDaGFuZ2UgfHwgaG9zdERhdGFDaGFuZ2UgIT09IHRoaXMuaG9zdERhdGFDaGFuZ2UgfHxcbiAgICAgICAgZGlhbERhdGFDaGFuZ2UgIT09IHRoaXMuZGlhbERhdGFDaGFuZ2UgfHwgYmluZERhdGFDaGFuZ2UgIT09IHRoaXMuYmluZERhdGFDaGFuZ2U7XG4gICAgaWYgKGRhdGFDaGFuZ2UpIHtcbiAgICAgIHRoaXMuc2VydmljZURhdGFDaGFuZ2UgPSBzZXJ2aWNlRGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuaW50ZXJjZXB0RGF0YUNoYW5nZSA9IGludGVyY2VwdERhdGFDaGFuZ2U7XG4gICAgICB0aGlzLmhvc3REYXRhQ2hhbmdlID0gaG9zdERhdGFDaGFuZ2U7XG4gICAgICB0aGlzLmRpYWxEYXRhQ2hhbmdlID0gZGlhbERhdGFDaGFuZ2U7XG4gICAgICB0aGlzLmJpbmREYXRhQ2hhbmdlID0gYmluZERhdGFDaGFuZ2U7XG4gICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdChkYXRhQ2hhbmdlKTtcbiAgICB9XG4gICAgdGhpcy5fZGF0YUNoYW5nZSA9IHNlcnZpY2VEYXRhQ2hhbmdlIHx8IGludGVyY2VwdERhdGFDaGFuZ2UgfHwgaG9zdERhdGFDaGFuZ2UgfHwgZGlhbERhdGFDaGFuZ2UgfHwgYmluZERhdGFDaGFuZ2U7XG4gICAgYXBwLmlzRGlydHkgPSBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHJvamVjdGFibGUtZm9ybS13cmFwcGVyIHNpbXBsZS1zZXJ2aWNlLXdyYXBwZXJcIlxuICAgICAoa2V5dXAuZW50ZXIpPVwic2F2ZSgkZXZlbnQpXCJcbiAgICAgKGtleXVwLmVzY2FwZSk9XCJjbG9zZU1vZGFsKHRydWUsIGZhbHNlLCAnY2FyZHMnLCAkZXZlbnQpXCJcbiAgICAgdGFiaW5kZXg9XCIwXCJcbj5cbiAgICA8bGliLWZvcm0taGVhZGVyXG4gICAgICAgICAgICBbZGF0YV09XCJmb3JtRGF0YVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwic2hvd0Zvcm0gPyAnQ3JlYXRlIGEgU2ltcGxlIFNlcnZpY2UnIDogJ1NlcnZpY2UgQ3JlYXRpb24gU3VtbWFyeSdcIlxuICAgICAgICAgICAgW2FjdGlvbkJ1dHRvblRleHRdPVwiJ1NhdmUnXCJcbiAgICAgICAgICAgIChhY3Rpb25SZXF1ZXN0ZWQpPVwiaGVhZGVyQWN0aW9uUmVxdWVzdGVkKCRldmVudClcIlxuICAgICAgICAgICAgWyhmb3JtVmlldyldPVwiZm9ybVZpZXdcIlxuICAgID48L2xpYi1mb3JtLWhlYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLXNlcnZpY2UtZm9ybS1jb250YWluZXIgcHJvamVjdGFibGUtZm9ybS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uIHRocmVlLWZpZnRoc1wiICpuZ0lmPVwic2hvd0Zvcm1cIj5cbiAgICAgICAgICAgIDxkaXYgIGlkPVwiSW5saW5lU2VydmljZUFyZWFcIiBjbGFzcz1cImFueWFkZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW1wbGUtc2VydmljZS1pbnB1dHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lciBbdGl0bGVdPVwiJ1NlcnZpY2UgRGV0YWlscydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0LWdyb3VwIHNlcnZpY2UtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1zdWItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPlNlcnZpY2UgTmFtZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZSB0aGlzIHNlcnZpY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbmFtZUZpZWxkSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzLm5hbWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VydmljZUFwaURhdGEubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwic2VydmljZU5hbWVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ2YWxpZGF0ZVNlcnZpY2VOYW1lKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLXN1Yi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLXRpdGxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+U0VMRUNUIE9SIENSRUFURSBTRVJWSUNFIEFUVFJJQlVURVM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKV09XCJzZXJ2aWNlQXBpRGF0YS5yb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwic2VydmljZVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQWRkIGF0dHJpYnV0ZXMgdG8gZ3JvdXAgc2VydmljZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNpbXBsZS1zZXJ2aWNlLWNlbnRlci1jb250ZW50XCIgKm5nSWY9XCJzaG93Rm9ybVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBQ0NFU1NJTkcgQ09ORklHVVJBVElPTidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRTdHlsZV09XCInei1pbmRleDogOTk5OTk5OTknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwVGV4dF09XCInSG93IHdpbGwgY2xpZW50IGFwcGxpY2F0aW9ucyB1c2UgdGhpcyBzZXJ2aWNlPyBTcGVjaWZ5IGEgaG9zdG5hbWUvSVAgYW5kIHBvcnQsIG9yIHVzZSB0aGUgJnF1b3Q7U0RLIE9ubHkmcXVvdDsgdG9nZ2xlIGZvciBhbiBhcHBsaWNhdGlvbiBlbWJlZGRlZCBjb25maWd1cmF0aW9uLidcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXQtZ3JvdXAgYWNjZXNzaW5nLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1zdWItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLXRpdGxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5XaGF0IGlkZW50aXRpZXMgY2FuIGFjY2VzcyB0aGlzIHNlcnZpY2U/PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItdGFnLXNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV09XCJkaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwiZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVOYW1lZEF0dHJpYnV0ZXNdPVwiaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZVJvbGVBdHRyaWJ1dGVzXT1cImlkZW50aXR5Um9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgaWRlbnRpdHkgYXR0cmlidXRlcyB0byBncmFudCBhY2Nlc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXNFcnJvcl09XCJlcnJvcnMuZGlhbElkZW50aXRpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzQ2hhbmdlKT1cInZhbGlkYXRlRGlhbElkZW50aXRpZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRSb2xlQXR0cmlidXRlc0NoYW5nZSk9XCJ2YWxpZGF0ZURpYWxJZGVudGl0aWVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJnZXRJZGVudGl0eU5hbWVkQXR0cmlidXRlcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1zdWItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLXRpdGxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5Ib3cgd2lsbCB0aGUgc2VydmljZSBiZSBhY2Nlc3NlZD88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgYWRkcmVzc1BvcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPlNESyBPTkxZPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkay10b2dnbGUgZm9ybS1maWVsZC10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hHcmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZGtPbmx5RGlhbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvbjogc2RrT25seURpYWwgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cIiFzZGtPbmx5RGlhbFwiIGNsYXNzPVwib24tbGFiZWxcIj5ZRVM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJzZGtPbmx5RGlhbFwiIGNsYXNzPVwib2ZmLWxhYmVsXCI+Tk88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWl0ZW0tY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBzZGtPbmx5RGlhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaG9zdG5hbWUtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+SE9TVE5BTUUgLyBJUDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1pbmZvIGluZm9pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFjY2Vzc2luZyBob3N0bmFtZXMgbXVzdCBpbmNsdWRlIGEgJy4nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVycm9ycy5pbnRlcmNlcHRBZGRyZXNzRm9ybWF0XCIgY2xhc3M9XCJlcnJvci1sYWJlbFwiPkFjY2Vzc2luZyBob3N0bmFtZXMgbXVzdCBpbmNsdWRlIGEgJy4nPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJIb3dUb1wiIHR5cGU9XCJ0ZXh0XCIgbWF4bGVuZ3RoPVwiMTAwXCIgZGF0YS1pMThuPVwiRWdIb3N0XCIgKGNoYW5nZSk9XCJ2YWxpZGF0ZUludGVyY2VwdEFkZHJlc3MoKVwiIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzLmludGVyY2VwdEFkZHJlc3N9XCIgW3BsYWNlaG9sZGVyXT1cInNka09ubHlEaWFsID8gJycgOiAnZS5nLiBteXNlcnZpY2Uueml0aSdcIiBbKG5nTW9kZWwpXT1cInNka09ubHlEaWFsID8gJycgOiBpbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc2VzWzBdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWl0ZW0tY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBzZGtPbmx5RGlhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5QT1JUPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG93VG9Qb3J0XCIgdHlwZT1cIm51bWJlclwiIG1heGxlbmd0aD1cIjEwXCIgKGNoYW5nZSk9XCJ2YWxpZGF0ZUludGVyY2VwdFBvcnQoKVwiIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzLmludGVyY2VwdFBvcnR9XCIgW3BsYWNlaG9sZGVyXT1cInNka09ubHlEaWFsID8gJycgOiA0NDNcIiAoa2V5dXApPVwiaW50ZXJjZXB0UG9ydENoYW5nZWQoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwic2RrT25seURpYWwgPyAnJyA6IGludGVyY2VwdFBvcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidIT1NUSU5HIENPTkZJR1VSQVRJT04nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDk5OTk5OTk5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ1doZXJlIHNob3VsZCB0cmFmZmljIGZvciB0aGlzIHNlcnZpY2UgYmUgc2VudD8gU3BlY2lmeSBhIHByb3RvY29sLCBob3N0bmFtZS9JUCwgYW5kIHBvcnQsIG9yIHVzZSB0aGUgJnF1b3Q7U0RLIE9ubHkmcXVvdDsgdG9nZ2xlIGZvciBhbiBhcHBsaWNhdGlvbiBlbWJlZGRlZCBjb25maWd1cmF0aW9uLidcIlxuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dC1ncm91cCBob3N0aW5nLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1zdWItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLXRpdGxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5XaGF0IGlkZW50aXRpZXMgY2FuIGhvc3QgdGhpcyBzZXJ2aWNlPzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyldPVwiYmluZFBvbGljeU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cImJpbmRQb2xpY3lSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cImlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVSb2xlQXR0cmlidXRlc109XCJpZGVudGl0eVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGlkZW50aXR5IGF0dHJpYnV0ZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXNFcnJvcl09XCJlcnJvcnMuYmluZElkZW50aXRpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzQ2hhbmdlKT1cInZhbGlkYXRlQmluZElkZW50aXRpZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRSb2xlQXR0cmlidXRlc0NoYW5nZSk9XCJ2YWxpZGF0ZUJpbmRJZGVudGl0aWVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLXN1Yi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPldoZXJlIHNob3VsZCB0cmFmZmljIGJlIHNlbnQ/PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFkZHJlc3NGdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5TREsgT05MWTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGstdG9nZ2xlIGZvcm0tZmllbGQtdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoR3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2RrT25seUJpbmQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgb246IHNka09ubHlCaW5kIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCIhc2RrT25seUJpbmRcIiBjbGFzcz1cIm9uLWxhYmVsXCI+WUVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwic2RrT25seUJpbmRcIiBjbGFzcz1cIm9mZi1sYWJlbFwiPk5PPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seUJpbmR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+UFJPVE9DT0w8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwiSG9zdGVkUHJvdG9jb2xcIiAoY2hhbmdlKT1cImhvc3RQcm90b2NvbHNDaGFuZ2VkKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNka09ubHlCaW5kID8gJycgOiBob3N0UHJvdG9jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidGNwXCI+VENQPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInVkcFwiID5VRFA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYm90aFwiID5UQ1AvVURQPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IHNka09ubHlCaW5kfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPkhPU1ROQU1FIC8gSVA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJIb3N0ZWRIb3N0XCIgdHlwZT1cInRleHRcIiBtYXhsZW5ndGg9XCIxMDBcIiBkYXRhLWkxOG49XCJFZ0hvc3RcIiAoY2hhbmdlKT1cInZhbGlkYXRlSG9zdEFkZHJlc3MoKVwiIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzLmhvc3RBZGRyZXNzfVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5QmluZCA/ICcnIDogJ2UuZy4gbXlzZXJ2aWNlLnppdGknXCIgWyhuZ01vZGVsKV09XCJzZGtPbmx5QmluZCA/ICcnIDogaG9zdENvbmZpZ0FwaURhdGEuZGF0YS5hZGRyZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWl0ZW0tY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBzZGtPbmx5QmluZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5QT1JUPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG9zdGVkUG9ydFwiIHR5cGU9XCJudW1iZXJcIiBtYXhsZW5ndGg9XCIxMFwiIChjaGFuZ2UpPVwidmFsaWRhdGVIb3N0UG9ydCgpXCIgW25nQ2xhc3NdPVwie2Vycm9yOiBlcnJvcnMuaG9zdFBvcnR9XCIgW3BsYWNlaG9sZGVyXT1cInNka09ubHlCaW5kID8gJycgOiA0NDNcIiBbKG5nTW9kZWwpXT1cInNka09ubHlCaW5kID8gJycgOiBob3N0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=