vite-plugin-react-server 1.4.0 → 1.4.2

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 (84) hide show
  1. package/README.md +4 -4
  2. package/dist/package.json +1 -1
  3. package/dist/plugin/dev-server/configureReactServer.client.js +1 -1
  4. package/dist/plugin/dev-server/configureReactServer.server.d.ts.map +1 -1
  5. package/dist/plugin/dev-server/configureReactServer.server.js +5 -8
  6. package/dist/plugin/dev-server/plugin.client.d.ts.map +1 -1
  7. package/dist/plugin/dev-server/plugin.client.js +7 -14
  8. package/dist/plugin/dev-server/plugin.server.d.ts.map +1 -1
  9. package/dist/plugin/dev-server/plugin.server.js +2 -36
  10. package/dist/plugin/error/index.d.ts +1 -2
  11. package/dist/plugin/error/index.d.ts.map +1 -1
  12. package/dist/plugin/error/index.js +2 -3
  13. package/dist/plugin/error/panicThresholdHandler.js +14 -3
  14. package/dist/plugin/error/setupGlobalErrorHandler.d.ts.map +1 -1
  15. package/dist/plugin/error/setupGlobalErrorHandler.js +23 -16
  16. package/dist/plugin/helpers/createRscRenderHelpers.d.ts +0 -5
  17. package/dist/plugin/helpers/createRscRenderHelpers.d.ts.map +1 -1
  18. package/dist/plugin/helpers/createRscRenderHelpers.js +0 -22
  19. package/dist/plugin/helpers/headlessStreamState.d.ts +0 -38
  20. package/dist/plugin/helpers/headlessStreamState.d.ts.map +1 -1
  21. package/dist/plugin/helpers/headlessStreamState.js +0 -48
  22. package/dist/plugin/helpers/index.d.ts +0 -3
  23. package/dist/plugin/helpers/index.d.ts.map +1 -1
  24. package/dist/plugin/helpers/index.js +1 -4
  25. package/dist/plugin/helpers/requestInfo.d.ts.map +1 -1
  26. package/dist/plugin/helpers/requestInfo.js +5 -4
  27. package/dist/plugin/helpers/requestToRoute.d.ts.map +1 -1
  28. package/dist/plugin/helpers/requestToRoute.js +2 -2
  29. package/dist/plugin/helpers/workerCleanup.d.ts +1 -12
  30. package/dist/plugin/helpers/workerCleanup.d.ts.map +1 -1
  31. package/dist/plugin/helpers/workerCleanup.js +1 -1
  32. package/dist/plugin/loader/directives/index.d.ts +0 -1
  33. package/dist/plugin/loader/directives/index.d.ts.map +1 -1
  34. package/dist/plugin/loader/directives/index.js +1 -2
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/package.json +1 -1
  37. package/plugin/dev-server/configureReactServer.client.ts +1 -1
  38. package/plugin/dev-server/configureReactServer.server.ts +7 -10
  39. package/plugin/dev-server/plugin.client.ts +14 -20
  40. package/plugin/dev-server/plugin.server.ts +2 -49
  41. package/plugin/error/index.ts +1 -2
  42. package/plugin/error/setupGlobalErrorHandler.ts +24 -25
  43. package/plugin/helpers/createRscRenderHelpers.ts +0 -29
  44. package/plugin/helpers/headlessStreamState.ts +0 -69
  45. package/plugin/helpers/index.ts +0 -3
  46. package/plugin/helpers/requestInfo.ts +6 -4
  47. package/plugin/helpers/requestToRoute.ts +3 -2
  48. package/plugin/helpers/workerCleanup.ts +1 -38
  49. package/plugin/loader/directives/index.ts +0 -1
  50. package/plugin/transformer/README.md +1 -1
  51. package/plugin/worker/html/README.md +1 -1
  52. package/plugin/worker/rsc/README.md +1 -1
  53. package/dist/plugin/error/assertPanic.d.ts +0 -2
  54. package/dist/plugin/error/assertPanic.d.ts.map +0 -1
  55. package/dist/plugin/error/assertPanic.js +0 -15
  56. package/dist/plugin/error/directiveError.d.ts +0 -13
  57. package/dist/plugin/error/directiveError.d.ts.map +0 -1
  58. package/dist/plugin/error/directiveError.js +0 -21
  59. package/dist/plugin/error/enhanceError.d.ts +0 -14
  60. package/dist/plugin/error/enhanceError.d.ts.map +0 -1
  61. package/dist/plugin/error/enhanceError.js +0 -24
  62. package/dist/plugin/helpers/createSafePageComponent.d.ts +0 -36
  63. package/dist/plugin/helpers/createSafePageComponent.d.ts.map +0 -1
  64. package/dist/plugin/helpers/createSafePageComponent.js +0 -50
  65. package/dist/plugin/helpers/moduleResolver.d.ts +0 -25
  66. package/dist/plugin/helpers/moduleResolver.d.ts.map +0 -1
  67. package/dist/plugin/helpers/moduleResolver.js +0 -64
  68. package/dist/plugin/helpers/stashReturnValue.d.ts +0 -3
  69. package/dist/plugin/helpers/stashReturnValue.d.ts.map +0 -1
  70. package/dist/plugin/helpers/stashReturnValue.js +0 -23
  71. package/dist/plugin/helpers/workerManager.d.ts +0 -5
  72. package/dist/plugin/helpers/workerManager.d.ts.map +0 -1
  73. package/dist/plugin/helpers/workerManager.js +0 -18
  74. package/dist/plugin/loader/directives/collectExportsFromModule.d.ts +0 -6
  75. package/dist/plugin/loader/directives/collectExportsFromModule.d.ts.map +0 -1
  76. package/dist/plugin/loader/directives/collectExportsFromModule.js +0 -24
  77. package/plugin/error/assertPanic.ts +0 -9
  78. package/plugin/error/directiveError.ts +0 -29
  79. package/plugin/error/enhanceError.ts +0 -41
  80. package/plugin/helpers/createSafePageComponent.ts +0 -64
  81. package/plugin/helpers/moduleResolver.ts +0 -91
  82. package/plugin/helpers/stashReturnValue.ts +0 -19
  83. package/plugin/helpers/workerManager.ts +0 -16
  84. package/plugin/loader/directives/collectExportsFromModule.ts +0 -25
package/README.md CHANGED
@@ -16,7 +16,7 @@ A Vite plugin that enables React Server Components (RSC) streaming and static HT
16
16
  ## Quick Start
17
17
 
18
18
  ```sh
19
- npm install -D vite-plugin-react-server react@experimental react-dom@experimental
19
+ npm install -D vite-plugin-react-server react@19 react-dom@19
20
20
  ```
21
21
 
22
22
  **Minimal Config:**
@@ -349,9 +349,9 @@ This project uses experimental React features with a vendored ESM transport (`re
349
349
  | [CSS & Styling](./docs/css-handling.md) | CSS collection, inline styles, and global CSS |
350
350
  | [Server Actions](./docs/server-actions.md) | `"use server"` directives and form actions |
351
351
  | [Build & Deployment](./docs/build-orchestration.md) | Multi-step and Environment API builds |
352
- | [Advanced Development](./docs/advanced-topics.md) | Custom workers, streaming, and advanced patterns |
353
- | [Plugin Internals](./docs/transformer-plugin.md) | How the transformer processes directives |
354
- | [Worker System](./docs/rsc-worker.md) | RSC and HTML worker architecture |
352
+ | [Advanced Development](./docs/maintenance/advanced-topics.md) | Custom workers, streaming, and advanced patterns |
353
+ | [Plugin Internals](./docs/maintenance/transformer-plugin.md) | How the transformer processes directives |
354
+ | [Worker System](./docs/maintenance/rsc-worker.md) | RSC and HTML worker architecture |
355
355
  | [API Reference](./docs/api-reference.md) | Exported functions and types |
356
356
  | [React Compatibility](./docs/react-type-compatibility.md) | Version support, vendored ESM transport |
357
357
  | [Troubleshooting](./docs/troubleshooting-guide.md) | Common errors and solutions |
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-react-server",
3
- "version": "1.4.0",
3
+ "version": "1.4.2",
4
4
  "description": "Vite plugin for React Server Components (RSC)",
5
5
  "type": "module",
6
6
  "main": "./dist/plugin/index.js",
@@ -82,4 +82,4 @@ const configureReactServer = function _createReactWorkerServer({
82
82
  };
83
83
 
84
84
  export { configureReactServer };
85
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlUmVhY3RTZXJ2ZXIuY2xpZW50LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vZGV2LXNlcnZlci9jb25maWd1cmVSZWFjdFNlcnZlci5jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uZmlndXJlUmVxdWVzdEhhbmRsZXIgfSBmcm9tIFwiLi9jb25maWd1cmVSZXF1ZXN0SGFuZGxlci5jbGllbnQuanNcIjtcbmltcG9ydCB7IE1lc3NhZ2VDaGFubmVsIH0gZnJvbSBcIm5vZGU6d29ya2VyX3RocmVhZHNcIjtcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVhY3RXb3JrZXJTZXJ2ZXJGbiB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBzZXRNYXhMaXN0ZW5lcnNPblBvcnQsIHVucmVmUG9ydCB9IGZyb20gXCIuLi9zdHJlYW0vc2V0TWF4TGlzdGVuZXJzLmpzXCI7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgUmVhY3QgV29ya2VyIFNlcnZlciB0aGF0IGNvbmZpZ3VyZXMgd29ya2VyLWJhc2VkIHJlbmRlcmluZ1xuICogU2V0cyB1cCBtaWRkbGV3YXJlLCBITVIsIGFuZCB3b3JrZXIgbWFuYWdlbWVudCBsaWtlIHJlYWN0LWNsaWVudC9wbHVnaW4uY2xpZW50LnRzXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maWd1cmVSZWFjdFNlcnZlcjogQ3JlYXRlUmVhY3RXb3JrZXJTZXJ2ZXJGbiA9XG4gIGZ1bmN0aW9uIF9jcmVhdGVSZWFjdFdvcmtlclNlcnZlcih7XG4gICAgc2VydmVyLFxuICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXMsXG4gICAgdXNlck9wdGlvbnMsXG4gICAgY29uZmlnRW52LFxuICAgIGhtckNoYW5uZWwsXG4gICAgb25Xb3JrZXJDcmVhdGVkLFxuICAgIHNlcnZlck1hbmlmZXN0LFxuICAgIHJlc29sdmVkQ29uZmlnLFxuICB9KSB7XG4gICAgY29uc3QgbG9nZ2VyID0gc2VydmVyLmNvbmZpZy5jdXN0b21Mb2dnZXIgfHwgc2VydmVyLmNvbmZpZy5sb2dnZXI7XG4gICAgY29uc3QgdmVyYm9zZSA9IHVzZXJPcHRpb25zLnZlcmJvc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW2NyZWF0ZVJlYWN0V29ya2VyU2VydmVyXSBDb25maWd1cmluZyB3b3JrZXItYmFzZWQgcmVuZGVyaW5nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgcmVzdGFydCBsaXN0ZW5lciBmb3Igd29ya2VyIGNsZWFudXBcbiAgICBzZXJ2ZXIud3Mub24oXCJyZXN0YXJ0XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgXCJbY3JlYXRlUmVhY3RXb3JrZXJTZXJ2ZXJdIFNlcnZlciByZXN0YXJ0aW5nLCBzaHV0dGluZyBkb3duIHdvcmtlci4uLlwiXG4gICAgICApO1xuICAgICAgLy8gV29ya2VyIGNsZWFudXAgd291bGQgYmUgaGFuZGxlZCBieSB0aGUgd29ya2VyIG1hbmFnZW1lbnRcbiAgICB9KTtcblxuICAgIGxldCByZXN0YXJ0Rm46ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjdXJyZW50V29ya2VyOiBhbnkgPSBudWxsO1xuXG4gICAgLy8gQ29uZmlndXJlIHRoZSB3b3JrZXIgcmVxdWVzdCBoYW5kbGVyIChzZXRzIHVwIG1pZGRsZXdhcmUpXG4gICAgY29uc3QgZWZmZWN0aXZlSG1yQ2hhbm5lbCA9ICgoKSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gaG1yQ2hhbm5lbCB8fCBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgIC8vIEluY3JlYXNlIG1heCBsaXN0ZW5lcnMgdG8gcHJldmVudCB3YXJuaW5ncyBkdXJpbmcgZGV2ZWxvcG1lbnRcbiAgICAgIC8vIFRoaXMgaXMgYSB0YXJnZXRlZCBmaXggZm9yIHRoZSBtZW1vcnkgbGVhayB3YXJuaW5nc1xuICAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhpcyBvbiBCT1RIIHBvcnRzIGJlY2F1c2UgbGlzdGVuZXJzIGNhbiBiZSBhZGRlZCB0byBlaXRoZXIgc2lkZVxuICAgICAgLy8gVXNlIGEgaGlnaCBkZWZhdWx0ICg1MDApIHRvIGFjY29tbW9kYXRlIGxhcmdlIHByb2plY3RzIHdpdGggbWFueSByb3V0ZXNcbiAgICAgIC8vIHJlc3RhcnRXb3JrZXIgd2lsbCBhZGp1c3QgdGhpcyBiYXNlZCBvbiBhY3R1YWwgcm91dGUgY291bnRcbiAgICAgIGNvbnN0IGluaXRpYWxNYXhMaXN0ZW5lcnMgPSA1MDA7XG4gICAgICBzZXRNYXhMaXN0ZW5lcnNPblBvcnQoY2hhbm5lbC5wb3J0MSwgaW5pdGlhbE1heExpc3RlbmVycyk7XG4gICAgICBzZXRNYXhMaXN0ZW5lcnNPblBvcnQoY2hhbm5lbC5wb3J0MiwgaW5pdGlhbE1heExpc3RlbmVycyk7XG4gICAgICB1bnJlZlBvcnQoY2hhbm5lbC5wb3J0MSk7XG4gICAgICB1bnJlZlBvcnQoY2hhbm5lbC5wb3J0Mik7XG4gICAgICByZXR1cm4gY2hhbm5lbDtcbiAgICB9KSgpO1xuXG4gICAgY29uZmlndXJlUmVxdWVzdEhhbmRsZXIoe1xuICAgICAgc2VydmVyLFxuICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlcyxcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgICAgY29uZmlnRW52LFxuICAgICAgaG1yQ2hhbm5lbDogZWZmZWN0aXZlSG1yQ2hhbm5lbCxcbiAgICAgIHNlcnZlck1hbmlmZXN0LFxuICAgICAgcmVzb2x2ZWRDb25maWcsXG4gICAgICBvbldvcmtlckNyZWF0ZWQ6ICh3b3JrZXI6IGFueSwgcmVzdGFydD86ICgpID0+IFByb21pc2U8dm9pZD4pID0+IHtcbiAgICAgICAgY3VycmVudFdvcmtlciA9IHdvcmtlcjtcbiAgICAgICAgaWYgKHJlc3RhcnQpIHtcbiAgICAgICAgICByZXN0YXJ0Rm4gPSByZXN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbldvcmtlckNyZWF0ZWQpIHtcbiAgICAgICAgICBvbldvcmtlckNyZWF0ZWQod29ya2VyLCByZXN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgICBcbiAgICAvLyBSZXR1cm4gb2JqZWN0IHdpdGggcmVzdGFydCBmdW5jdGlvbiBhbmQgSE1SIHVwZGF0ZSBzZW5kZXIgZm9yIGhhbmRsZUhvdFVwZGF0ZVxuICAgIHJldHVybiB7XG4gICAgICByZXN0YXJ0OiByZXN0YXJ0Rm4sXG4gICAgICBzZW5kSG1yVXBkYXRlOiAoZmlsZTogc3RyaW5nLCByb3V0ZXM/OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFdvcmtlcikge1xuICAgICAgICAgIC8vIENSSVRJQ0FMOiBJbiBkZXZlbG9wbWVudCBtb2RlLCBITVIgcG9ydCBpcyBkaXNhYmxlZCwgc28gc2VuZCBkaXJlY3RseSB0byB3b3JrZXJcbiAgICAgICAgICAvLyBTZW5kIEhNUl9VUERBVEUgbWVzc2FnZSB0byB3b3JrZXIgdGhyb3VnaCBwYXJlbnRQb3J0IChwb3N0TWVzc2FnZSlcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGZpbGUucmVwbGFjZSh1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3QsICcnKS5yZXBsYWNlKC9eXFwvKy8sICcnKTtcbiAgICAgICAgICBjdXJyZW50V29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHR5cGU6IFwiSE1SX1VQREFURVwiLFxuICAgICAgICAgICAgaWQ6IG5vcm1hbGl6ZWRQYXRoLFxuICAgICAgICAgICAgcGF0aDogZmlsZSxcbiAgICAgICAgICAgIHJvdXRlczogcm91dGVzIHx8IFtdLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgIH0gc2F0aXNmaWVzIGFueSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTWFyayB0aGF0IG1vZHVsZXMgaGF2ZSBiZWVuIGludmFsaWRhdGVkIC0gd29ya2VyIHdpbGwgYmUgcmVzdGFydGVkIG9uIG5leHQgcmVxdWVzdFxuICAgICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgTm9kZS5qcyBjYWNoZXMgRVMgbW9kdWxlcyBhbmQgdGhlIG9ubHkgd2F5IHRvIGNsZWFyXG4gICAgICAgICAgLy8gdGhhdCBjYWNoZSBpcyB0byByZXN0YXJ0IHRoZSB3b3JrZXJcbiAgICAgICAgICAvLyBVc2UgZHluYW1pYyBpbXBvcnQgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgICAgICAgIGltcG9ydChcIi4vY29uZmlndXJlUmVxdWVzdEhhbmRsZXIuY2xpZW50LmpzXCIpLnRoZW4oKHsgbWFya01vZHVsZXNJbnZhbGlkYXRlZCB9KSA9PiB7XG4gICAgICAgICAgICBtYXJrTW9kdWxlc0ludmFsaWRhdGVkKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgIGxvZ2dlcj8uaW5mbyhgW2NyZWF0ZVJlYWN0V29ya2VyU2VydmVyXSBTZW50IEhNUl9VUERBVEUgZm9yICR7ZmlsZX0gdG8gd29ya2VyLCBtYXJrZWQgZm9yIHJlc3RhcnRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVYSxNQUFBLG9CQUFBLEdBQ1gsU0FBUyx3QkFBeUIsQ0FBQTtBQUFBLEVBQ2hDLE1BQUE7QUFBQSxFQUNBLG1CQUFBO0FBQUEsRUFDQSxXQUFBO0FBQUEsRUFDQSxTQUFBO0FBQUEsRUFDQSxVQUFBO0FBQUEsRUFDQSxlQUFBO0FBQUEsRUFDQSxjQUFBO0FBQUEsRUFDQTtBQUNGLENBQUcsRUFBQTtBQUNELEVBQUEsTUFBTSxNQUFTLEdBQUEsTUFBQSxDQUFPLE1BQU8sQ0FBQSxZQUFBLElBQWdCLE9BQU8sTUFBTyxDQUFBLE1BQUE7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
85
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlUmVhY3RTZXJ2ZXIuY2xpZW50LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vZGV2LXNlcnZlci9jb25maWd1cmVSZWFjdFNlcnZlci5jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uZmlndXJlUmVxdWVzdEhhbmRsZXIgfSBmcm9tIFwiLi9jb25maWd1cmVSZXF1ZXN0SGFuZGxlci5jbGllbnQuanNcIjtcbmltcG9ydCB7IE1lc3NhZ2VDaGFubmVsIH0gZnJvbSBcIm5vZGU6d29ya2VyX3RocmVhZHNcIjtcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVhY3RXb3JrZXJTZXJ2ZXJGbiB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBzZXRNYXhMaXN0ZW5lcnNPblBvcnQsIHVucmVmUG9ydCB9IGZyb20gXCIuLi9zdHJlYW0vc2V0TWF4TGlzdGVuZXJzLmpzXCI7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgUmVhY3QgV29ya2VyIFNlcnZlciB0aGF0IGNvbmZpZ3VyZXMgd29ya2VyLWJhc2VkIHJlbmRlcmluZ1xuICogU2V0cyB1cCBtaWRkbGV3YXJlLCBITVIsIGFuZCB3b3JrZXIgbWFuYWdlbWVudCBsaWtlIHJlYWN0LWNsaWVudC9wbHVnaW4uY2xpZW50LnRzXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maWd1cmVSZWFjdFNlcnZlcjogQ3JlYXRlUmVhY3RXb3JrZXJTZXJ2ZXJGbiA9XG4gIGZ1bmN0aW9uIF9jcmVhdGVSZWFjdFdvcmtlclNlcnZlcih7XG4gICAgc2VydmVyLFxuICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXMsXG4gICAgdXNlck9wdGlvbnMsXG4gICAgY29uZmlnRW52LFxuICAgIGhtckNoYW5uZWwsXG4gICAgb25Xb3JrZXJDcmVhdGVkLFxuICAgIHNlcnZlck1hbmlmZXN0LFxuICAgIHJlc29sdmVkQ29uZmlnLFxuICB9KSB7XG4gICAgY29uc3QgbG9nZ2VyID0gc2VydmVyLmNvbmZpZy5jdXN0b21Mb2dnZXIgfHwgc2VydmVyLmNvbmZpZy5sb2dnZXI7XG4gICAgY29uc3QgdmVyYm9zZSA9IHVzZXJPcHRpb25zLnZlcmJvc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW2NyZWF0ZVJlYWN0V29ya2VyU2VydmVyXSBDb25maWd1cmluZyB3b3JrZXItYmFzZWQgcmVuZGVyaW5nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgcmVzdGFydCBsaXN0ZW5lciBmb3Igd29ya2VyIGNsZWFudXBcbiAgICBzZXJ2ZXIud3Mub24oXCJyZXN0YXJ0XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGxvZ2dlcj8uaW5mbyhcbiAgICAgICAgXCJbY3JlYXRlUmVhY3RXb3JrZXJTZXJ2ZXJdIFNlcnZlciByZXN0YXJ0aW5nLCBzaHV0dGluZyBkb3duIHdvcmtlci4uLlwiXG4gICAgICApO1xuICAgICAgLy8gV29ya2VyIGNsZWFudXAgd291bGQgYmUgaGFuZGxlZCBieSB0aGUgd29ya2VyIG1hbmFnZW1lbnRcbiAgICB9KTtcblxuICAgIGxldCByZXN0YXJ0Rm46ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjdXJyZW50V29ya2VyOiBhbnkgPSBudWxsO1xuXG4gICAgLy8gQ29uZmlndXJlIHRoZSB3b3JrZXIgcmVxdWVzdCBoYW5kbGVyIChzZXRzIHVwIG1pZGRsZXdhcmUpXG4gICAgY29uc3QgZWZmZWN0aXZlSG1yQ2hhbm5lbCA9ICgoKSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gaG1yQ2hhbm5lbCB8fCBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgIC8vIEluY3JlYXNlIG1heCBsaXN0ZW5lcnMgdG8gcHJldmVudCB3YXJuaW5ncyBkdXJpbmcgZGV2ZWxvcG1lbnRcbiAgICAgIC8vIFRoaXMgaXMgYSB0YXJnZXRlZCBmaXggZm9yIHRoZSBtZW1vcnkgbGVhayB3YXJuaW5nc1xuICAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhpcyBvbiBCT1RIIHBvcnRzIGJlY2F1c2UgbGlzdGVuZXJzIGNhbiBiZSBhZGRlZCB0byBlaXRoZXIgc2lkZVxuICAgICAgLy8gVXNlIGEgaGlnaCBkZWZhdWx0ICg1MDApIHRvIGFjY29tbW9kYXRlIGxhcmdlIHByb2plY3RzIHdpdGggbWFueSByb3V0ZXNcbiAgICAgIC8vIHJlc3RhcnRXb3JrZXIgd2lsbCBhZGp1c3QgdGhpcyBiYXNlZCBvbiBhY3R1YWwgcm91dGUgY291bnRcbiAgICAgIGNvbnN0IGluaXRpYWxNYXhMaXN0ZW5lcnMgPSA1MDA7XG4gICAgICBzZXRNYXhMaXN0ZW5lcnNPblBvcnQoY2hhbm5lbC5wb3J0MSwgaW5pdGlhbE1heExpc3RlbmVycyk7XG4gICAgICBzZXRNYXhMaXN0ZW5lcnNPblBvcnQoY2hhbm5lbC5wb3J0MiwgaW5pdGlhbE1heExpc3RlbmVycyk7XG4gICAgICB1bnJlZlBvcnQoY2hhbm5lbC5wb3J0MSk7XG4gICAgICB1bnJlZlBvcnQoY2hhbm5lbC5wb3J0Mik7XG4gICAgICByZXR1cm4gY2hhbm5lbDtcbiAgICB9KSgpO1xuXG4gICAgY29uZmlndXJlUmVxdWVzdEhhbmRsZXIoe1xuICAgICAgc2VydmVyLFxuICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlcyxcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgICAgY29uZmlnRW52LFxuICAgICAgaG1yQ2hhbm5lbDogZWZmZWN0aXZlSG1yQ2hhbm5lbCxcbiAgICAgIHNlcnZlck1hbmlmZXN0LFxuICAgICAgcmVzb2x2ZWRDb25maWcsXG4gICAgICBvbldvcmtlckNyZWF0ZWQ6ICh3b3JrZXI6IGFueSwgcmVzdGFydD86ICgpID0+IFByb21pc2U8dm9pZD4pID0+IHtcbiAgICAgICAgY3VycmVudFdvcmtlciA9IHdvcmtlcjtcbiAgICAgICAgaWYgKHJlc3RhcnQpIHtcbiAgICAgICAgICByZXN0YXJ0Rm4gPSByZXN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbldvcmtlckNyZWF0ZWQpIHtcbiAgICAgICAgICBvbldvcmtlckNyZWF0ZWQod29ya2VyLCByZXN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgICBcbiAgICAvLyBSZXR1cm4gb2JqZWN0IHdpdGggcmVzdGFydCBmdW5jdGlvbiBhbmQgSE1SIHVwZGF0ZSBzZW5kZXIgZm9yIGhvdFVwZGF0ZVxuICAgIHJldHVybiB7XG4gICAgICByZXN0YXJ0OiByZXN0YXJ0Rm4sXG4gICAgICBzZW5kSG1yVXBkYXRlOiAoZmlsZTogc3RyaW5nLCByb3V0ZXM/OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFdvcmtlcikge1xuICAgICAgICAgIC8vIENSSVRJQ0FMOiBJbiBkZXZlbG9wbWVudCBtb2RlLCBITVIgcG9ydCBpcyBkaXNhYmxlZCwgc28gc2VuZCBkaXJlY3RseSB0byB3b3JrZXJcbiAgICAgICAgICAvLyBTZW5kIEhNUl9VUERBVEUgbWVzc2FnZSB0byB3b3JrZXIgdGhyb3VnaCBwYXJlbnRQb3J0IChwb3N0TWVzc2FnZSlcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGZpbGUucmVwbGFjZSh1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3QsICcnKS5yZXBsYWNlKC9eXFwvKy8sICcnKTtcbiAgICAgICAgICBjdXJyZW50V29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHR5cGU6IFwiSE1SX1VQREFURVwiLFxuICAgICAgICAgICAgaWQ6IG5vcm1hbGl6ZWRQYXRoLFxuICAgICAgICAgICAgcGF0aDogZmlsZSxcbiAgICAgICAgICAgIHJvdXRlczogcm91dGVzIHx8IFtdLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgIH0gc2F0aXNmaWVzIGFueSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTWFyayB0aGF0IG1vZHVsZXMgaGF2ZSBiZWVuIGludmFsaWRhdGVkIC0gd29ya2VyIHdpbGwgYmUgcmVzdGFydGVkIG9uIG5leHQgcmVxdWVzdFxuICAgICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgTm9kZS5qcyBjYWNoZXMgRVMgbW9kdWxlcyBhbmQgdGhlIG9ubHkgd2F5IHRvIGNsZWFyXG4gICAgICAgICAgLy8gdGhhdCBjYWNoZSBpcyB0byByZXN0YXJ0IHRoZSB3b3JrZXJcbiAgICAgICAgICAvLyBVc2UgZHluYW1pYyBpbXBvcnQgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgICAgICAgIGltcG9ydChcIi4vY29uZmlndXJlUmVxdWVzdEhhbmRsZXIuY2xpZW50LmpzXCIpLnRoZW4oKHsgbWFya01vZHVsZXNJbnZhbGlkYXRlZCB9KSA9PiB7XG4gICAgICAgICAgICBtYXJrTW9kdWxlc0ludmFsaWRhdGVkKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgIGxvZ2dlcj8uaW5mbyhgW2NyZWF0ZVJlYWN0V29ya2VyU2VydmVyXSBTZW50IEhNUl9VUERBVEUgZm9yICR7ZmlsZX0gdG8gd29ya2VyLCBtYXJrZWQgZm9yIHJlc3RhcnRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVYSxNQUFBLG9CQUFBLEdBQ1gsU0FBUyx3QkFBeUIsQ0FBQTtBQUFBLEVBQ2hDLE1BQUE7QUFBQSxFQUNBLG1CQUFBO0FBQUEsRUFDQSxXQUFBO0FBQUEsRUFDQSxTQUFBO0FBQUEsRUFDQSxVQUFBO0FBQUEsRUFDQSxlQUFBO0FBQUEsRUFDQSxjQUFBO0FBQUEsRUFDQTtBQUNGLENBQUcsRUFBQTtBQUNELEVBQUEsTUFBTSxNQUFTLEdBQUEsTUFBQSxDQUFPLE1BQU8sQ0FBQSxZQUFBLElBQWdCLE9BQU8sTUFBTyxDQUFBLE1BQUE7QUFDM0Qs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
@@ -1 +1 @@
1
- {"version":3,"file":"configureReactServer.server.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/configureReactServer.server.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAOzD,eAAO,MAAM,oBAAoB,EAAE,sBA2hBhC,CAAC"}
1
+ {"version":3,"file":"configureReactServer.server.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/configureReactServer.server.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAOzD,eAAO,MAAM,oBAAoB,EAAE,sBAwhBhC,CAAC"}
@@ -65,12 +65,6 @@ const configureReactServer = function _configureReactServer({
65
65
  }
66
66
  activeStreams.clear();
67
67
  activeControllers.clear();
68
- });
69
- server.ws.on("full-reload", () => {
70
- isRestarting = false;
71
- logger.info("[vite-plugin-react-server] ✅ Server restart completed");
72
- });
73
- server.ws.on("restart", () => {
74
68
  setTimeout(() => {
75
69
  if (isRestarting) {
76
70
  isRestarting = false;
@@ -80,6 +74,10 @@ const configureReactServer = function _configureReactServer({
80
74
  }
81
75
  }, 5e3);
82
76
  });
77
+ server.ws.on("full-reload", () => {
78
+ isRestarting = false;
79
+ logger.info("[vite-plugin-react-server] ✅ Server restart completed");
80
+ });
83
81
  const loader = async (id) => {
84
82
  const [moduleID, exportName] = id.split("#");
85
83
  let fullModulePath;
@@ -435,10 +433,9 @@ const configureReactServer = function _configureReactServer({
435
433
  }
436
434
  res.statusCode = 500;
437
435
  res.setHeader("Content-Type", "text/x-component; charset=utf-8");
438
- res.setHeader("Content-Length", "0");
439
436
  }
440
437
  });
441
438
  };
442
439
 
443
440
  export { configureReactServer };
444
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlUmVhY3RTZXJ2ZXIuc2VydmVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vZGV2LXNlcnZlci9jb25maWd1cmVSZWFjdFNlcnZlci5zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCIuLi92ZW5kb3IvdmVuZG9yLnNlcnZlci5qc1wiO1xuaW1wb3J0IHsgY29sbGVjdFZpdGVNb2R1bGVHcmFwaENzcyB9IGZyb20gXCIuLi9oZWxwZXJzL2NvbGxlY3RWaXRlTW9kdWxlR3JhcGhDc3MuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVJzY1N0cmVhbSB9IGZyb20gXCIuLi9zdHJlYW0vY3JlYXRlUnNjU3RyZWFtLnNlcnZlci5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUmVuZGVyVG9QaXBlYWJsZVN0cmVhbUhhbmRsZXIgfSBmcm9tIFwiLi4vc3RyZWFtL2NyZWF0ZVJlbmRlclRvUGlwZWFibGVTdHJlYW1IYW5kbGVyLnNlcnZlci5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlV29ya2VyIH0gZnJvbSBcIi4uL3dvcmtlci9jcmVhdGVXb3JrZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyIH0gZnJvbSBcIm5vZGU6d29ya2VyX3RocmVhZHNcIjtcbmltcG9ydCB7IHNlcmlhbGl6ZWRPcHRpb25zIH0gZnJvbSBcIi4uL2hlbHBlcnMvc2VyaWFsaXplVXNlck9wdGlvbnMuanNcIjtcbmltcG9ydCB7IHJlcXVlc3RJbmZvIH0gZnJvbSBcIi4uL2hlbHBlcnMvcmVxdWVzdEluZm8uanNcIjtcbmltcG9ydCB7IGdldFJvdXRlRmlsZXMgfSBmcm9tIFwiLi4vaGVscGVycy9nZXRSb3V0ZUZpbGVzLmpzXCI7XG5pbXBvcnQgeyBoYW5kbGVTZXJ2ZXJBY3Rpb24gfSBmcm9tIFwiLi9oYW5kbGVTZXJ2ZXJBY3Rpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJlUmVhY3RTZXJ2ZXJGbiB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gXCIuLi9lcnJvci9oYW5kbGVFcnJvci5qc1wiO1xuaW1wb3J0IHsgY2xlYW51cFdvcmtlciB9IGZyb20gXCIuLi9oZWxwZXJzL3dvcmtlckNsZWFudXAuanNcIjtcbmltcG9ydCB7IG1lcmdlQ29uZmlnLCB0eXBlIFJlc29sdmVkQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlc29sdmVQYWdlQW5kUHJvcHMgfSBmcm9tIFwiLi4vaGVscGVycy9yZXNvbHZlUGFnZUFuZFByb3BzLmpzXCI7XG5pbXBvcnQgeyBSb290IGFzIERlZmF1bHRSb290IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcm9vdC5qc1wiO1xuXG5leHBvcnQgY29uc3QgY29uZmlndXJlUmVhY3RTZXJ2ZXI6IENvbmZpZ3VyZVJlYWN0U2VydmVyRm4gPVxuICBmdW5jdGlvbiBfY29uZmlndXJlUmVhY3RTZXJ2ZXIoe1xuICAgIHNlcnZlcixcbiAgICBhdXRvRGlzY292ZXJlZEZpbGVzLFxuICAgIHVzZXJPcHRpb25zOiBfdXNlck9wdGlvbnMsXG4gICAgc2VydmVyTWFuaWZlc3QsXG4gICAgcmVzb2x2ZWRDb25maWcsXG4gIH0pIHtcbiAgICBjb25zdCBhY3RpdmVTdHJlYW1zID0gbmV3IFNldDxTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICBjb25zdCBhY3RpdmVDb250cm9sbGVycyA9IG5ldyBNYXA8XG4gICAgICBTZXJ2ZXJSZXNwb25zZSxcbiAgICAgIHsgYWJvcnQ6IChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkIH1cbiAgICA+KCk7XG4gICAgbGV0IGlzUmVzdGFydGluZyA9IGZhbHNlO1xuICAgIFxuICAgIFxuICAgIGNvbnN0IGxvZ2dlciA9IHNlcnZlci5jb25maWcuY3VzdG9tTG9nZ2VyIHx8IHNlcnZlci5jb25maWcubG9nZ2VyO1xuICAgIGNvbnN0IHtcbiAgICAgIEh0bWw6IF9Vc2VySHRtbENvbXBvbmVudCxcbiAgICAgIC8vIGxvYWRlciBjb25maWcgaXNuJ3QgaW1wb3J0YW50IGhlcmUsIHNpbmNlIHRoYXQncyB1c2VkIGJ5IHRoZSB0cmFuc2Zvcm1lclxuICAgICAgbG9hZGVyOiBfbG9hZGVyQ29uZmlnLFxuICAgICAgdmVyYm9zZSxcbiAgICAgIC8vIHdlIGNhbiB1c2UgdGhlc2UgZGlyZWN0bHkgdG8gY3JlYXRlIHRoZSBoYW5kbGVyXG4gICAgICAuLi51c2VySGFuZGxlck9wdGlvbnNcbiAgICB9ID0gX3VzZXJPcHRpb25zO1xuXG4gICAgc2VydmVyLmNvbmZpZyA9IG1lcmdlQ29uZmlnKFxuICAgICAgc2VydmVyLmNvbmZpZyxcbiAgICAgIHJlc29sdmVkQ29uZmlnXG4gICAgKSBhcyBSZXNvbHZlZENvbmZpZztcblxuXG4gICAgLy8gSGFuZGxlIFZpdGUgc2VydmVyIHJlc3RhcnRzXG4gICAgc2VydmVyLndzLm9uKFwicmVzdGFydFwiLCAocGF0aCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIFwiW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0g8J+UpyBQbHVnaW4gY2hhbmdlZCwgcHJlcGFyaW5nIGZvciByZXN0YXJ0OlwiLFxuICAgICAgICBwYXRoXG4gICAgICApO1xuXG4gICAgICBpc1Jlc3RhcnRpbmcgPSB0cnVlO1xuXG4gICAgICAvLyBBYm9ydCBhbGwgYWN0aXZlIHN0cmVhbXMgZmlyc3QsIHRoZW4gY2xvc2UgcmVzcG9uc2VzXG4gICAgICBmb3IgKGNvbnN0IHJlcyBvZiBhY3RpdmVTdHJlYW1zKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBhY3RpdmVDb250cm9sbGVycy5nZXQocmVzKTtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydChcIlNlcnZlciByZXN0YXJ0aW5nXCIpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIElnbm9yZSBhYm9ydCBlcnJvcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXMud3JpdGVIZWFkKDUwMywge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC94LWNvbXBvbmVudDsgY2hhcnNldD11dGYtOFwiLFxuICAgICAgICAgIFwiUmV0cnktQWZ0ZXJcIjogXCIxXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuZW5kKFxuICAgICAgICAgIGAwOkV7XCJkaWdlc3RcIjpcIlwiLFwibmFtZVwiOlwiRXJyb3JcIixcIm1lc3NhZ2VcIjpcIlNlcnZlciByZXN0YXJ0aW5nLi4uXCIsXCJzdGFja1wiOlwiXCIsXCJlbnZcIjpcIlNlcnZlclwifWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVN0cmVhbXMuY2xlYXIoKTtcbiAgICAgIGFjdGl2ZUNvbnRyb2xsZXJzLmNsZWFyKCk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVzdGFydCBjb21wbGV0aW9uXG4gICAgc2VydmVyLndzLm9uKFwiZnVsbC1yZWxvYWRcIiwgKCkgPT4ge1xuICAgICAgaXNSZXN0YXJ0aW5nID0gZmFsc2U7XG4gICAgICBsb2dnZXIuaW5mbyhcIlt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIOKchSBTZXJ2ZXIgcmVzdGFydCBjb21wbGV0ZWRcIik7XG4gICAgfSk7XG5cbiAgICAvLyBGYWxsYmFjazogcmVzZXQgcmVzdGFydCBmbGFnIGFmdGVyIGEgdGltZW91dFxuICAgIHNlcnZlci53cy5vbihcInJlc3RhcnRcIiwgKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnRpbmcpIHtcbiAgICAgICAgICBpc1Jlc3RhcnRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIFwiW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0g4o+wIFJlc3RhcnQgdGltZW91dCwgcmVzdW1pbmcgbm9ybWFsIG9wZXJhdGlvblwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSwgNTAwMCk7IC8vIDUgc2Vjb25kIHRpbWVvdXRcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvYWRlciA9IGFzeW5jIChpZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBbbW9kdWxlSUQsIGV4cG9ydE5hbWVdID0gaWQuc3BsaXQoXCIjXCIpO1xuICAgICAgXG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGZ1bGwgbW9kdWxlIHBhdGhcbiAgICAgIGxldCBmdWxsTW9kdWxlUGF0aDogc3RyaW5nO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGFuIGFic29sdXRlIHBhdGggKGZyb20gc2VydmVyIGVudmlyb25tZW50IG1vZHVsZSBncmFwaClcbiAgICAgIGlmIChtb2R1bGVJRC5zdGFydHNXaXRoKF91c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCkpIHtcbiAgICAgICAgZnVsbE1vZHVsZVBhdGggPSBtb2R1bGVJRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgcGF0aCBhZ2FpbnN0IHByb2plY3Qgcm9vdFxuICAgICAgICBjb25zdCByZXNvbHZlZE1vZHVsZUlEID0gbW9kdWxlSUQuc3RhcnRzV2l0aChcIi9cIikgXG4gICAgICAgICAgPyBtb2R1bGVJRC5zbGljZSgxKSBcbiAgICAgICAgICA6IG1vZHVsZUlEO1xuICAgICAgICBmdWxsTW9kdWxlUGF0aCA9IGAke191c2VyT3B0aW9ucy5wcm9qZWN0Um9vdH0vJHtyZXNvbHZlZE1vZHVsZUlEfWA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVzZSBzZXJ2ZXIgZW52aXJvbm1lbnQgcnVubmVyIGZvciBwcm9wZXIgcmVhY3Qtc2VydmVyIGNvbmRpdGlvbiBoYW5kbGluZ1xuICAgICAgLy8gVGhpcyBlbnN1cmVzIGNsaWVudCBjb21wb25lbnRzIGFyZSB0cmFuc2Zvcm1lZCB0byByZWdpc3RlckNsaWVudFJlZmVyZW5jZVxuICAgICAgY29uc3Qgc2VydmVyRW52ID0gc2VydmVyLmVudmlyb25tZW50c1snc2VydmVyJ107XG4gICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIFxuICAgICAgaWYgKHNlcnZlckVudiAmJiAncnVubmVyJyBpbiBzZXJ2ZXJFbnYgJiYgc2VydmVyRW52LnJ1bm5lcikge1xuICAgICAgICAvLyBWaXRlIDYgRW52aXJvbm1lbnQgQVBJOiB1c2Ugc2VydmVyIGVudmlyb25tZW50IHJ1bm5lciBmb3IgUlNDXG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IChzZXJ2ZXJFbnYucnVubmVyIGFzIHsgaW1wb3J0OiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IH0pLmltcG9ydChmdWxsTW9kdWxlUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGYWxsYmFjayB0byBzc3JMb2FkTW9kdWxlIChzaG91bGQgbm90IGhhcHBlbiBpbiBWaXRlIDYrKVxuICAgICAgICByZXN1bHQgPSBhd2FpdCBzZXJ2ZXIuc3NyTG9hZE1vZHVsZShmdWxsTW9kdWxlUGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09IG51bGwpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIFxcXCIke21vZHVsZUlEfVxcXCIgZG9lcyBub3QgaGF2ZSBhbnkgZXhwb3J0c2ApO1xuXG4gICAgICBpZiAoIU9iamVjdC5rZXlzKHJlc3VsdCkubGVuZ3RoICYmIGV4cG9ydE5hbWUubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE1vZHVsZSBcXFwiJHttb2R1bGVJRH1cXFwiIGlzIGEgbW9kdWxlLCBidXQgZG9lcyBub3QgaGF2ZSBhbnkgZXhwb3J0cyBzbyBpdCBjYW4ndCBmaW5kICR7ZXhwb3J0TmFtZX1gXG4gICAgICAgICk7XG5cbiAgICAgIC8vIEFsd2F5cyByZXR1cm4gdGhlIGZ1bGwgbW9kdWxlIC0gY2FsbGVycyB3aWxsIGV4dHJhY3QgdGhlIHNwZWNpZmljIGV4cG9ydCBpZiBuZWVkZWRcbiAgICAgIC8vIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIGhvdyByZXNvbHZlUGFnZSBhbmQgcmVzb2x2ZVByb3BzIHdvcmtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBzZXJ2ZXIubWlkZGxld2FyZXMudXNlKGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgaWYgKCFyZXEudXJsKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBoYW5kbGVyT3B0aW9ucyA9IHtcbiAgICAgICAgLi4udXNlckhhbmRsZXJPcHRpb25zLFxuICAgICAgICBtb2R1bGVCYXNlVVJMOiBzZXJ2ZXIuY29uZmlnLmJhc2UsXG4gICAgICAgIG1vZHVsZUJhc2VQYXRoOiB1c2VySGFuZGxlck9wdGlvbnMubW9kdWxlQmFzZVBhdGgsXG4gICAgICAgIHByb2plY3RSb290OiBfdXNlck9wdGlvbnMucHJvamVjdFJvb3QsXG4gICAgICAgIGNzczogdXNlckhhbmRsZXJPcHRpb25zLmNzcyxcbiAgICAgICAgbG9hZGVyOiBsb2FkZXIsXG4gICAgICAgIHZlcmJvc2UsXG4gICAgICAgIGxvZ2dlcixcbiAgICAgICAgcnNjU3RyZWFtOiByZXNcbiAgICAgIH07XG4gICAgICBjb25zdCBpbmZvID0gcmVxdWVzdEluZm8ocmVxLCBoYW5kbGVyT3B0aW9ucywgXCJcIik7XG5cbiAgICAgIC8vIEhhbmRsZSBzZXJ2ZXIgYWN0aW9uc1xuICAgICAgaWYgKGluZm8uaXNTZXJ2ZXJBY3Rpb25SZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVTZXJ2ZXJBY3Rpb24ocmVxLCByZXMsIHNlcnZlciwgaGFuZGxlck9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgaWYgKCFpbmZvLmlzUnNjUmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBzZXJ2ZXIgaXMgcmVzdGFydGluZywgcmV0dXJuIDUwMyBpbW1lZGlhdGVseVxuICAgICAgaWYgKGlzUmVzdGFydGluZykge1xuICAgICAgICByZXMud3JpdGVIZWFkKDUwMywge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC94LWNvbXBvbmVudDsgY2hhcnNldD11dGYtOFwiLFxuICAgICAgICAgIFwiUmV0cnktQWZ0ZXJcIjogXCIxXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuZW5kKFxuICAgICAgICAgIGAwOkV7XCJkaWdlc3RcIjpcIlwiLFwibmFtZVwiOlwiRXJyb3JcIixcIm1lc3NhZ2VcIjpcIlNlcnZlciByZXN0YXJ0aW5nLi4uXCIsXCJzdGFja1wiOlwiXCIsXCJlbnZcIjpcIlNlcnZlclwifWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgUlNDIHdvcmtlciBmb3IgY29uc2lzdGVudCBSU0Mgc3RyZWFtIGZvcm1hdHNcbiAgICAgIGxldCByc2NXb3JrZXI6IFdvcmtlciB8IHVuZGVmaW5lZDtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgcm91dGVGaWxlcyA9IGF3YWl0IGdldFJvdXRlRmlsZXMoXG4gICAgICAgICAgaW5mby5yb3V0ZSxcbiAgICAgICAgICBhdXRvRGlzY292ZXJlZEZpbGVzLFxuICAgICAgICAgIF91c2VyT3B0aW9ucyxcbiAgICAgICAgICBsb2dnZXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHJvdXRlRmlsZXMudHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgY29uc3QgcGFuaWNFcnJvciA9IGhhbmRsZUVycm9yKHtcbiAgICAgICAgICAgIGVycm9yOiByb3V0ZUZpbGVzLmVycm9yLFxuICAgICAgICAgICAgbG9nZ2VyOiBsb2dnZXIsXG4gICAgICAgICAgICBwYW5pY1RocmVzaG9sZDogdXNlckhhbmRsZXJPcHRpb25zLnBhbmljVGhyZXNob2xkLFxuICAgICAgICAgICAgY3JpdGljYWw6IGZhbHNlLFxuICAgICAgICAgICAgY29udGV4dDogXCJjb25maWd1cmVSZWFjdFNlcnZlclwiLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChwYW5pY0Vycm9yICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHBhbmljRXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhZ2VQYXRoID0gcm91dGVGaWxlcy5wYWdlO1xuICAgICAgICBjb25zdCBwcm9wc1BhdGggPSByb3V0ZUZpbGVzLnByb3BzO1xuICAgICAgICBjb25zdCByb290UGF0aCA9IHJvdXRlRmlsZXMucm9vdDtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcGFnZSBwYXRoIC0gaWYgbm90LCBza2lwIHRoaXMgcm91dGVcbiAgICAgICAgaWYgKCFwYWdlUGF0aCkge1xuICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgTm8gcGFnZSBmb3VuZCBmb3Igcm91dGU6ICR7aW5mby5yb3V0ZX0sIHNraXBwaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYENvbXBvbmVudHMgcmVzb2x2ZWQgc3VjY2Vzc2Z1bGx5IGZvciByb3V0ZTogJHtpbmZvLnJvdXRlfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBQYWdlQ29tcG9uZW50IGlzIHZhbGlkLCBjcmVhdGluZyBoYW5kbGVyIG9wdGlvbnMgZm9yIHJvdXRlOiAke2luZm8ucm91dGV9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYW5kbGVyT3B0aW9ucyA9IHtcbiAgICAgICAgICAuLi51c2VySGFuZGxlck9wdGlvbnMsXG4gICAgICAgICAgcm91dGU6IGluZm8ucm91dGUsXG4gICAgICAgICAgcGFnZVBhdGgsXG4gICAgICAgICAgcHJvcHNQYXRoLFxuICAgICAgICAgIGxvZ2dlcjogbG9nZ2VyLFxuICAgICAgICAgIG1hbmlmZXN0OiBzZXJ2ZXJNYW5pZmVzdCxcbiAgICAgICAgICBzZXJ2ZXIsXG4gICAgICAgICAgbW9kdWxlQmFzZVVSTDogc2VydmVyLmNvbmZpZy5iYXNlLFxuICAgICAgICAgIHByb2plY3RSb290OiBfdXNlck9wdGlvbnMucHJvamVjdFJvb3QsXG4gICAgICAgICAgbG9hZGVyOiBsb2FkZXIsXG4gICAgICAgICAgdmVyYm9zZTogdmVyYm9zZSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBMb2FkIGFjdHVhbCBjb21wb25lbnRzIGZpcnN0IC0gdGhpcyByZWdpc3RlcnMgdGhlbSBpbiB0aGUgbW9kdWxlIGdyYXBoXG4gICAgICAgIC8vIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBDU1MgY29sbGVjdGlvbiB0byB3b3JrXG4gICAgICAgIGxldCBQYWdlQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT4gPSBSZWFjdC5GcmFnbWVudDtcbiAgICAgICAgbGV0IFJvb3RDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PiA9IERlZmF1bHRSb290O1xuICAgICAgICBsZXQgcGFnZVByb3BzOiBhbnkgPSB7fTtcbiAgICAgICAgXG4gICAgICAgIC8vIExvYWQgdGhlIFJvb3QgY29tcG9uZW50XG4gICAgICAgIGlmIChyb290UGF0aCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByb290RXhwb3J0TmFtZSA9IHVzZXJIYW5kbGVyT3B0aW9ucy5yb290RXhwb3J0TmFtZSB8fCBcIlJvb3RcIjtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RNb2R1bGUgPSBhd2FpdCBsb2FkZXIocm9vdFBhdGgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocm9vdE1vZHVsZSAmJiByb290TW9kdWxlW3Jvb3RFeHBvcnROYW1lXSAmJiB0eXBlb2Ygcm9vdE1vZHVsZVtyb290RXhwb3J0TmFtZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgUm9vdENvbXBvbmVudCA9IHJvb3RNb2R1bGVbcm9vdEV4cG9ydE5hbWVdIGFzIFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PjtcbiAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgTG9hZGVkIFJvb3QgY29tcG9uZW50IGZvciByb3V0ZSAke2luZm8ucm91dGV9IGZyb20gJHtyb290UGF0aH0jJHtyb290RXhwb3J0TmFtZX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChyb290TW9kdWxlICYmIHJvb3RNb2R1bGVbJ2RlZmF1bHQnXSAmJiB0eXBlb2Ygcm9vdE1vZHVsZVsnZGVmYXVsdCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIFJvb3RDb21wb25lbnQgPSByb290TW9kdWxlWydkZWZhdWx0J10gYXMgUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+O1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBMb2FkZWQgZGVmYXVsdCBleHBvcnQgYXMgUm9vdCBjb21wb25lbnQgZm9yIHJvdXRlICR7aW5mby5yb3V0ZX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybihgUm9vdCBjb21wb25lbnQgbm90IGZvdW5kIGluICR7cm9vdFBhdGh9LCB1c2luZyBSZWFjdC5GcmFnbWVudGApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gbG9hZCBSb290IGNvbXBvbmVudCBmcm9tICR7cm9vdFBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvYWQgdGhlIHBhZ2UgY29tcG9uZW50IChyZWdpc3RlcnMgaXQgaW4gbW9kdWxlIGdyYXBoIGZvciBDU1MgY29sbGVjdGlvbilcbiAgICAgICAgaWYgKHBhZ2VQYXRoKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VFeHBvcnROYW1lID0gdXNlckhhbmRsZXJPcHRpb25zLnBhZ2VFeHBvcnROYW1lIHx8IFwiUGFnZVwiO1xuICAgICAgICAgICAgY29uc3QgcGFnZU1vZHVsZSA9IGF3YWl0IGxvYWRlcihwYWdlUGF0aCk7XG4gICAgICAgICAgICBpZiAocGFnZU1vZHVsZSAmJiBwYWdlTW9kdWxlW3BhZ2VFeHBvcnROYW1lXSAmJiB0eXBlb2YgcGFnZU1vZHVsZVtwYWdlRXhwb3J0TmFtZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgUGFnZUNvbXBvbmVudCA9IHBhZ2VNb2R1bGVbcGFnZUV4cG9ydE5hbWVdIGFzIFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PjtcbiAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgTG9hZGVkIFBhZ2UgY29tcG9uZW50IGZvciByb3V0ZSAke2luZm8ucm91dGV9IGZyb20gJHtwYWdlUGF0aH0jJHtwYWdlRXhwb3J0TmFtZX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYWdlTW9kdWxlICYmIHBhZ2VNb2R1bGVbJ2RlZmF1bHQnXSAmJiB0eXBlb2YgcGFnZU1vZHVsZVsnZGVmYXVsdCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIFBhZ2VDb21wb25lbnQgPSBwYWdlTW9kdWxlWydkZWZhdWx0J10gYXMgUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+O1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBMb2FkZWQgZGVmYXVsdCBleHBvcnQgYXMgUGFnZSBjb21wb25lbnQgZm9yIHJvdXRlICR7aW5mby5yb3V0ZX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYWdlTW9kdWxlICYmIHR5cGVvZiBwYWdlTW9kdWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIFBhZ2VDb21wb25lbnQgPSBwYWdlTW9kdWxlIGFzIFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PjtcbiAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgTG9hZGVkIG1vZHVsZSBhcyBQYWdlIGNvbXBvbmVudCBmb3Igcm91dGUgJHtpbmZvLnJvdXRlfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBQYWdlIGNvbXBvbmVudCBub3QgZm91bmQgaW4gJHtwYWdlUGF0aH0sIHVzaW5nIFJlYWN0LkZyYWdtZW50YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBsb2FkIHBhZ2UgY29tcG9uZW50IGZyb20gJHtwYWdlUGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTk9XIGNvbGxlY3QgQ1NTIC0gcGFnZSBpcyByZWdpc3RlcmVkIGluIG1vZHVsZSBncmFwaFxuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBDb2xsZWN0aW5nIENTUyBmaWxlcyBmb3Igcm91dGU6ICR7aW5mby5yb3V0ZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcnZlckVudiA9IHNlcnZlci5lbnZpcm9ubWVudHNbJ3NlcnZlciddO1xuICAgICAgICBjb25zdCBtb2R1bGVHcmFwaEZvckNzcyA9IHNlcnZlckVudj8ubW9kdWxlR3JhcGggPz8gc2VydmVyLm1vZHVsZUdyYXBoO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgY3NzRmlsZXNSZXN1bHQgPSBhd2FpdCBjb2xsZWN0Vml0ZU1vZHVsZUdyYXBoQ3NzKHtcbiAgICAgICAgICBtb2R1bGVHcmFwaDogbW9kdWxlR3JhcGhGb3JDc3MsXG4gICAgICAgICAgcGFyZW50VXJsOiBwYWdlUGF0aCxcbiAgICAgICAgICBoYW5kbGVyT3B0aW9uczogaGFuZGxlck9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYENTUyBjb2xsZWN0aW9uIGNvbXBsZXRlZCBmb3Igcm91dGU6ICR7aW5mby5yb3V0ZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjc3NGaWxlc1Jlc3VsdC50eXBlID09PSBcInNraXBcIikge1xuICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgQ1NTIGNvbGxlY3Rpb24gc2tpcHBlZCBmb3Igcm91dGU6ICR7aW5mby5yb3V0ZX0sIGNvbnRpbnVpbmcgd2l0aCBSU0MgcmVuZGVyaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjc3NGaWxlc1Jlc3VsdC50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dChjc3NGaWxlc1Jlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xsZWN0ZWRDc3NGaWxlcyA9IGNzc0ZpbGVzUmVzdWx0LnR5cGUgPT09IFwic3VjY2Vzc1wiID8gY3NzRmlsZXNSZXN1bHQuY3NzRmlsZXMgOiBuZXcgTWFwKCk7XG5cbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgQ3JlYXRpbmcgUlNDIGhhbmRsZXIgZm9yIHJvdXRlOiAke2luZm8ucm91dGV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb2FkIHByb3BzIHVzaW5nIHRoZSByZXNvbHZlUGFnZUFuZFByb3BzIGhlbHBlclxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgW2NvbmZpZ3VyZVJlYWN0U2VydmVyXSBMb2FkaW5nIHByb3BzIGZvciByb3V0ZSAke2luZm8ucm91dGV9LCBwYWdlUGF0aDogJHtwYWdlUGF0aH0sIHByb3BzUGF0aDogJHtwcm9wc1BhdGh9LCB1cmw6ICR7aW5mby51cmx9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHByb3BzUmVzdWx0ID0gYXdhaXQgcmVzb2x2ZVBhZ2VBbmRQcm9wcyh7XG4gICAgICAgICAgICBwYWdlUGF0aCxcbiAgICAgICAgICAgIHByb3BzUGF0aCxcbiAgICAgICAgICAgIHBhZ2VFeHBvcnROYW1lOiB1c2VySGFuZGxlck9wdGlvbnMucGFnZUV4cG9ydE5hbWUsXG4gICAgICAgICAgICBwcm9wc0V4cG9ydE5hbWU6IHVzZXJIYW5kbGVyT3B0aW9ucy5wcm9wc0V4cG9ydE5hbWUsXG4gICAgICAgICAgICB1cmw6IGluZm8udXJsLFxuICAgICAgICAgICAgcm91dGU6IGluZm8ucm91dGUsXG4gICAgICAgICAgICBtb2R1bGVCYXNlVVJMOiBzZXJ2ZXIuY29uZmlnLmJhc2UsXG4gICAgICAgICAgICBsb2FkZXIsXG4gICAgICAgICAgICB2ZXJib3NlLFxuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgYnVpbGQ6IHtcbiAgICAgICAgICAgICAgcnNjT3V0cHV0UGF0aDogdXNlckhhbmRsZXJPcHRpb25zLmJ1aWxkPy5yc2NPdXRwdXRQYXRoIHx8IFwiLnJzY1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgW2NvbmZpZ3VyZVJlYWN0U2VydmVyXSBQcm9wcyByZXNvbHV0aW9uIHJlc3VsdCB0eXBlOiAke3Byb3BzUmVzdWx0LnR5cGV9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb3BzUmVzdWx0LnR5cGUgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICBwYWdlUHJvcHMgPSBwcm9wc1Jlc3VsdC5wYWdlUHJvcHMgfHwge307XG4gICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgW2NvbmZpZ3VyZVJlYWN0U2VydmVyXSBMb2FkZWQgcHJvcHMgZm9yIHJvdXRlICR7aW5mby5yb3V0ZX06ICR7SlNPTi5zdHJpbmdpZnkocGFnZVByb3BzLCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzUmVzdWx0LnR5cGUgPT09IFwic2tpcFwiKSB7XG4gICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgW2NvbmZpZ3VyZVJlYWN0U2VydmVyXSBQcm9wcyByZXNvbHV0aW9uIHNraXBwZWQgZm9yIHJvdXRlICR7aW5mby5yb3V0ZX0sIHVzaW5nIGVtcHR5IHByb3BzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWdlUHJvcHMgPSB7fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFtjb25maWd1cmVSZWFjdFNlcnZlcl0gRmFpbGVkIHRvIGxvYWQgcHJvcHMgZm9yIHJvdXRlICR7aW5mby5yb3V0ZX06ICR7cHJvcHNSZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWdlUHJvcHMgPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBbY29uZmlndXJlUmVhY3RTZXJ2ZXJdIEVycm9yIGxvYWRpbmcgcHJvcHMgZm9yIHJvdXRlICR7aW5mby5yb3V0ZX06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgW2NvbmZpZ3VyZVJlYWN0U2VydmVyXSBFcnJvciBzdGFjazogJHtlcnJvci5zdGFja31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ29udGludWUgd2l0aCBlbXB0eSBwcm9wcyBpZiBsb2FkaW5nIGZhaWxzXG4gICAgICAgICAgcGFnZVByb3BzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBERVYgTU9ERSBPUFRJTUlaQVRJT046IFNraXAgd29ya2VyLCB1c2UgZGlyZWN0IHJlbmRlcmluZyBvbiBtYWluIHRocmVhZFxuICAgICAgICAvLyBcbiAgICAgICAgLy8gV2h5OiBJbiBkZXY6cnNjIG1vZGUsIHRoZSBtYWluIHRocmVhZCBhbHJlYWR5IGhhcyByZWFjdC1zZXJ2ZXIgY29uZGl0aW9uIGFuZCBcbiAgICAgICAgLy8gbG9hZHMgbW9kdWxlcyB2aWEgVml0ZSdzIGVudmlyb25tZW50IHJ1bm5lciB3aGljaCBoYW5kbGVzIEhNUiBhdXRvbWF0aWNhbGx5LlxuICAgICAgICAvLyBUaGUgd29ya2VyIHVzZXMgcmF3IGltcG9ydCgpIHdoaWNoIGJ5cGFzc2VzIFZpdGUncyBtb2R1bGUgZ3JhcGggYW5kIEhNUi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQmVuZWZpdHMgb2YgZGlyZWN0IHJlbmRlcmluZyBpbiBkZXY6XG4gICAgICAgIC8vIC0gUHJvcGVyIEhNUjogZmlsZSBjaGFuZ2VzIGFyZSBwaWNrZWQgdXAgaW1tZWRpYXRlbHkgdmlhIFZpdGUncyBtb2R1bGUgZ3JhcGhcbiAgICAgICAgLy8gLSBObyBtb2R1bGUgY2FjaGluZyBpc3N1ZXM6IGVudmlyb25tZW50IHJ1bm5lciBoYW5kbGVzIGNhY2hlIGludmFsaWRhdGlvblxuICAgICAgICAvLyAtIFNpbXBsZXIgZGVidWdnaW5nOiBhbGwgY29kZSBydW5zIGluIG1haW4gdGhyZWFkXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoZSB3b3JrZXIgaXMgc3RpbGwgdmFsdWFibGUgZm9yOlxuICAgICAgICAvLyAtIFByb2R1Y3Rpb24gYnVpbGRzIChpc29sYXRpb24sIGNvbnNpc3RlbnQgYmVoYXZpb3IpXG4gICAgICAgIC8vIC0gRnV0dXJlOiBSdW5uaW5nIFJTQyBpbiBkaWZmZXJlbnQgcnVudGltZXMgKHdvcmtlcmQsIGV0Yy4pXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFVzZXJzIGNhbiBvcHQtaW4gdG8gd29ya2VyIGluIGRldiB2aWEgY29uZmlnIGlmIG5lZWRlZCBmb3IgdGVzdGluZyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAgICAgICBjb25zdCB1c2VXb3JrZXJJbkRldiA9IF91c2VyT3B0aW9ucy5kZXY/LnVzZVJzY1dvcmtlciA9PT0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIGlmICh1c2VXb3JrZXJJbkRldikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgQ3JlYXRpbmcgUlNDIHdvcmtlciBmb3Igcm91dGU6ICR7aW5mby5yb3V0ZX0gKHVzZVJzY1dvcmtlcj10cnVlKWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCB3b3JrZXJSZXN1bHQgPSBhd2FpdCBjcmVhdGVXb3JrZXIoe1xuICAgICAgICAgICAgICBwcm9qZWN0Um9vdDogX3VzZXJPcHRpb25zLnByb2plY3RSb290IHx8IHNlcnZlci5jb25maWcucm9vdCxcbiAgICAgICAgICAgICAgd29ya2VyRGF0YToge1xuICAgICAgICAgICAgICAgIHVzZXJPcHRpb25zOiBzZXJpYWxpemVkT3B0aW9ucyhfdXNlck9wdGlvbnMsIGF1dG9EaXNjb3ZlcmVkRmlsZXMpLFxuICAgICAgICAgICAgICAgIHJlc29sdmVkQ29uZmlnOiBzZXJ2ZXIuY29uZmlnLFxuICAgICAgICAgICAgICAgIGNvbmZpZ0VudjogeyBjb21tYW5kOiBcInNlcnZlXCIsIG1vZGU6IFwiZGV2ZWxvcG1lbnRcIiB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2ZXJib3NlLFxuICAgICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHdvcmtlclJlc3VsdC50eXBlID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICByc2NXb3JrZXIgPSB3b3JrZXJSZXN1bHQud29ya2VyO1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSU0Mgd29ya2VyIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IGZvciByb3V0ZTogJHtpbmZvLnJvdXRlfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBSU0Mgd29ya2VyIGNyZWF0aW9uIHNraXBwZWQgZm9yIHJvdXRlOiAke2luZm8ucm91dGV9OiAke3dvcmtlclJlc3VsdC5yZWFzb259YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBjcmVhdGUgUlNDIHdvcmtlciBmb3Igcm91dGU6ICR7aW5mby5yb3V0ZX06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgW2Rldjpyc2NdIFVzaW5nIGRpcmVjdCByZW5kZXJpbmcgKG5vIHdvcmtlcikgZm9yIHByb3BlciBITVIgc3VwcG9ydGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSB3b3JrZXItYmFzZWQgUlNDIHN0cmVhbSBpZiB3b3JrZXIgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGRpcmVjdCByZW5kZXJpbmdcbiAgICAgICAgLy8gQ1JJVElDQUw6IEZvciBSU0MgcmVxdWVzdHMsIHVzZSBodG1sUGF0aDogXCJcIiBmb3IgaGVhZGxlc3MgbW9kZSAobm8gSHRtbCB3cmFwcGVyKVxuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGh5ZHJhdGlvbiBlcnJvcnMgd2hlcmUgPGh0bWw+IHdvdWxkIGJlIHJlbmRlcmVkIGluc2lkZSAjcm9vdCBkaXZcbiAgICAgICAgY29uc3QgcnNjUmVzdWx0ID0gcnNjV29ya2VyIFxuICAgICAgICAgID8gY3JlYXRlUnNjU3RyZWFtKHtcbiAgICAgICAgICAgICAgLi4uaGFuZGxlck9wdGlvbnMsXG4gICAgICAgICAgICAgIHVybDogaW5mby51cmwsXG4gICAgICAgICAgICAgIHBhZ2VQYXRoLFxuICAgICAgICAgICAgICBwcm9wc1BhdGgsXG4gICAgICAgICAgICAgIHJvb3RQYXRoLCAgLy8gUGFzcyB0aGUgcm9vdCBwYXRoIGZvciB3b3JrZXIgdG8gbG9hZFxuICAgICAgICAgICAgICBodG1sUGF0aDogXCJcIiwgIC8vIEVtcHR5IHN0cmluZyA9IGhlYWRsZXNzIFJTQyAobm8gSHRtbCB3cmFwcGVyKVxuICAgICAgICAgICAgICByc2NXb3JrZXIsXG4gICAgICAgICAgICAgIGNzc0ZpbGVzOiBjb2xsZWN0ZWRDc3NGaWxlcyxcbiAgICAgICAgICAgICAgZ2xvYmFsQ3NzOiBuZXcgTWFwKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogY3JlYXRlUmVuZGVyVG9QaXBlYWJsZVN0cmVhbUhhbmRsZXIoe1xuICAgICAgICAgICAgICAuLi5oYW5kbGVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgdXJsOiBpbmZvLnVybCxcbiAgICAgICAgICAgICAgUGFnZUNvbXBvbmVudDogUGFnZUNvbXBvbmVudCBhcyBhbnksXG4gICAgICAgICAgICAgIFJvb3RDb21wb25lbnQ6IFJvb3RDb21wb25lbnQgYXMgYW55LFxuICAgICAgICAgICAgICBIdG1sQ29tcG9uZW50OiBSZWFjdC5GcmFnbWVudCwgIC8vIEhlYWRsZXNzIHN0cmVhbSAtIG5vIEh0bWwgd3JhcHBlclxuICAgICAgICAgICAgICBwYWdlUHJvcHM6IHBhZ2VQcm9wcywgIC8vIFBhc3MgdGhlIGxvYWRlZCBwcm9wc1xuICAgICAgICAgICAgICBjc3NGaWxlczogY29sbGVjdGVkQ3NzRmlsZXMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFJTQyBoYW5kbGVyIGNyZWF0ZWQgZm9yIHJvdXRlOiAke1xuICAgICAgICAgICAgICBpbmZvLnJvdXRlXG4gICAgICAgICAgICB9LCByZXN1bHQgdHlwZTogJHt0eXBlb2YgcnNjUmVzdWx0fSwgaGFzIHBpcGU6ICR7dHlwZW9mIHJzY1Jlc3VsdD8ucGlwZX0sIGhhcyBhYm9ydDogJHt0eXBlb2YgcnNjUmVzdWx0Py5hYm9ydH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyc2NSZXN1bHQgJiYgdHlwZW9mIHJzY1Jlc3VsdC5waXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFNldHRpbmcgdXAgUlNDIHN0cmVhbSBmb3Igcm91dGU6ICR7aW5mby5yb3V0ZX1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzZXQgaGVhZGVyc1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L3gtY29tcG9uZW50OyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENSSVRJQ0FMOiBEaXNhYmxlIGNhY2hpbmcgaW4gZGV2ZWxvcG1lbnQgbW9kZVxuICAgICAgICAgIC8vIFdpdGhvdXQgdGhpcywgYnJvd3NlcnMgY2FjaGUgUlNDIHN0cmVhbXMgYW5kIGRvbid0IHNob3cgdXBkYXRlc1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDYWNoZS1Db250cm9sXCIsIFwibm8tY2FjaGUsIG5vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGVcIik7XG4gICAgICAgICAgcmVzLnNldEhlYWRlcihcIlByYWdtYVwiLCBcIm5vLWNhY2hlXCIpO1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJFeHBpcmVzXCIsIFwiMFwiKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBBZGQgQ09SUyBoZWFkZXJzIGZvciBSU0MgZmlsZXNcbiAgICAgICAgICBjb25zdCBvcmlnaW4gPSByZXEuaGVhZGVycy5vcmlnaW47XG4gICAgICAgICAgaWYgKG9yaWdpbiAmJiAob3JpZ2luLmluY2x1ZGVzKCdsb2NhbGhvc3QnKSB8fCBvcmlnaW4uaW5jbHVkZXMoJzEyNy4wLjAuMScpKSkge1xuICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiLCBvcmlnaW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIsIFwiKlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzLnNldEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIiwgXCJHRVQsIE9QVElPTlNcIik7XG4gICAgICAgICAgcmVzLnNldEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIiwgXCJBY2NlcHQsIENvbnRlbnQtVHlwZVwiKTtcbiAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtTWF4LUFnZVwiLCBcIjg2NDAwXCIpO1xuICAgICAgICAgIHJzY1Jlc3VsdC5waXBlKHJlcyk7XG5cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY29udHJvbGxlciBmb3IgcG90ZW50aWFsIGFib3J0IGR1cmluZyByZXN0YXJ0XG4gICAgICAgICAgYWN0aXZlQ29udHJvbGxlcnMuc2V0KHJlcywgcnNjUmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICBgUlNDIGhhbmRsZXIgZmFpbGVkIGZvciByb3V0ZTogJHtcbiAgICAgICAgICAgICAgICBpbmZvLnJvdXRlXG4gICAgICAgICAgICAgIH0sIGludmFsaWQgcmVzdWx0OiAke3R5cGVvZiByc2NSZXN1bHR9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvciBjYXNlXG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgcmVzLmVuZChcIkludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgfVxuICAgICAgICBhY3RpdmVTdHJlYW1zLmFkZChyZXMpO1xuICAgICAgICByZXMub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUocmVzKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBBYm9ydCB0aGUgUlNDIHN0cmVhbSB0byBjbGVhbiB1cCBNZXNzYWdlUG9ydHNcbiAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gYWN0aXZlQ29udHJvbGxlcnMuZ2V0KHJlcyk7XG4gICAgICAgICAgaWYgKGNvbnRyb2xsZXIgJiYgdHlwZW9mIGNvbnRyb2xsZXIuYWJvcnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gSWdub3JlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGl2ZUNvbnRyb2xsZXJzLmRlbGV0ZShyZXMpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENsZWFuIHVwIHdvcmtlciB3aGVuIHJlcXVlc3QgY29tcGxldGVzXG4gICAgICAgICAgY2xlYW51cFdvcmtlcihyc2NXb3JrZXIpO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IHBhbmljRXJyb3IgPSBoYW5kbGVFcnJvcih7XG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgIHBhbmljVGhyZXNob2xkOiBoYW5kbGVyT3B0aW9ucy5wYW5pY1RocmVzaG9sZCxcbiAgICAgICAgICBjcml0aWNhbDogZmFsc2UsXG4gICAgICAgICAgY29udGV4dDogXCJjb25maWd1cmVSZWFjdFNlcnZlclwiLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHBhbmljRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBuZXh0KHBhbmljRXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L3gtY29tcG9uZW50OyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIiwgXCIwXCIpOyAvLyBXaWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgc3RyZWFtaW5nXG4gICAgICAgIFxuICAgICAgICAvLyBOb3RlOiBXb3JrZXIgY2xlYW51cCBpcyBoYW5kbGVkIGJ5IHRoZSByZXNwb25zZSBjbG9zZSBoYW5kbGVyXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4iXSwibmFtZXMiOlsiaGFuZGxlck9wdGlvbnMiLCJEZWZhdWx0Um9vdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQmEsTUFBQSxvQkFBQSxHQUNYLFNBQVMscUJBQXNCLENBQUE7QUFBQSxFQUM3QixNQUFBO0FBQUEsRUFDQSxtQkFBQTtBQUFBLEVBQ0EsV0FBYSxFQUFBLFlBQUE7QUFBQSxFQUNiLGNBQUE7QUFBQSxFQUNBO0FBQ0YsQ0FBRyxFQUFBO0FBQ0QsRUFBTSxNQUFBLGFBQUEsdUJBQW9CLEdBQW9CLEVBQUE7QUFDOUMsRUFBTSxNQUFBLGlCQUFBLHVCQUF3QixHQUc1QixFQUFBO0FBQ0YsRUFBQSxJQUFJLFlBQWUsR0FBQSxLQUFBO0FBR25CLEVBQUEsTUFBTSxNQUFTLEdBQUEsTUFBQSxDQUFPLE1BQU8sQ0FBQSxZQUFBLElBQWdCLE9BQU8sTUFBTyxDQUFBLE1BQUE7QUFDM0QsRUFBTSxNQUFBO0FBQUEsSUFDSixJQUFNLEVBQUEsa0JBQUE7QUFBQTtBQUFBLElBRU4sTUFBUSxFQUFBLGFBQUE7QUFBQSxJQUNS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
441
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlUmVhY3RTZXJ2ZXIuc2VydmVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vZGV2LXNlcnZlci9jb25maWd1cmVSZWFjdFNlcnZlci5zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCIuLi92ZW5kb3IvdmVuZG9yLnNlcnZlci5qc1wiO1xuaW1wb3J0IHsgY29sbGVjdFZpdGVNb2R1bGVHcmFwaENzcyB9IGZyb20gXCIuLi9oZWxwZXJzL2NvbGxlY3RWaXRlTW9kdWxlR3JhcGhDc3MuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVJzY1N0cmVhbSB9IGZyb20gXCIuLi9zdHJlYW0vY3JlYXRlUnNjU3RyZWFtLnNlcnZlci5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUmVuZGVyVG9QaXBlYWJsZVN0cmVhbUhhbmRsZXIgfSBmcm9tIFwiLi4vc3RyZWFtL2NyZWF0ZVJlbmRlclRvUGlwZWFibGVTdHJlYW1IYW5kbGVyLnNlcnZlci5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlV29ya2VyIH0gZnJvbSBcIi4uL3dvcmtlci9jcmVhdGVXb3JrZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyIH0gZnJvbSBcIm5vZGU6d29ya2VyX3RocmVhZHNcIjtcbmltcG9ydCB7IHNlcmlhbGl6ZWRPcHRpb25zIH0gZnJvbSBcIi4uL2hlbHBlcnMvc2VyaWFsaXplVXNlck9wdGlvbnMuanNcIjtcbmltcG9ydCB7IHJlcXVlc3RJbmZvIH0gZnJvbSBcIi4uL2hlbHBlcnMvcmVxdWVzdEluZm8uanNcIjtcbmltcG9ydCB7IGdldFJvdXRlRmlsZXMgfSBmcm9tIFwiLi4vaGVscGVycy9nZXRSb3V0ZUZpbGVzLmpzXCI7XG5pbXBvcnQgeyBoYW5kbGVTZXJ2ZXJBY3Rpb24gfSBmcm9tIFwiLi9oYW5kbGVTZXJ2ZXJBY3Rpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJlUmVhY3RTZXJ2ZXJGbiB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gXCIuLi9lcnJvci9oYW5kbGVFcnJvci5qc1wiO1xuaW1wb3J0IHsgY2xlYW51cFdvcmtlciB9IGZyb20gXCIuLi9oZWxwZXJzL3dvcmtlckNsZWFudXAuanNcIjtcbmltcG9ydCB7IG1lcmdlQ29uZmlnLCB0eXBlIFJlc29sdmVkQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlc29sdmVQYWdlQW5kUHJvcHMgfSBmcm9tIFwiLi4vaGVscGVycy9yZXNvbHZlUGFnZUFuZFByb3BzLmpzXCI7XG5pbXBvcnQgeyBSb290IGFzIERlZmF1bHRSb290IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcm9vdC5qc1wiO1xuXG5leHBvcnQgY29uc3QgY29uZmlndXJlUmVhY3RTZXJ2ZXI6IENvbmZpZ3VyZVJlYWN0U2VydmVyRm4gPVxuICBmdW5jdGlvbiBfY29uZmlndXJlUmVhY3RTZXJ2ZXIoe1xuICAgIHNlcnZlcixcbiAgICBhdXRvRGlzY292ZXJlZEZpbGVzLFxuICAgIHVzZXJPcHRpb25zOiBfdXNlck9wdGlvbnMsXG4gICAgc2VydmVyTWFuaWZlc3QsXG4gICAgcmVzb2x2ZWRDb25maWcsXG4gIH0pIHtcbiAgICBjb25zdCBhY3RpdmVTdHJlYW1zID0gbmV3IFNldDxTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICBjb25zdCBhY3RpdmVDb250cm9sbGVycyA9IG5ldyBNYXA8XG4gICAgICBTZXJ2ZXJSZXNwb25zZSxcbiAgICAgIHsgYWJvcnQ6IChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkIH1cbiAgICA+KCk7XG4gICAgbGV0IGlzUmVzdGFydGluZyA9IGZhbHNlO1xuICAgIFxuICAgIFxuICAgIGNvbnN0IGxvZ2dlciA9IHNlcnZlci5jb25maWcuY3VzdG9tTG9nZ2VyIHx8IHNlcnZlci5jb25maWcubG9nZ2VyO1xuICAgIGNvbnN0IHtcbiAgICAgIEh0bWw6IF9Vc2VySHRtbENvbXBvbmVudCxcbiAgICAgIC8vIGxvYWRlciBjb25maWcgaXNuJ3QgaW1wb3J0YW50IGhlcmUsIHNpbmNlIHRoYXQncyB1c2VkIGJ5IHRoZSB0cmFuc2Zvcm1lclxuICAgICAgbG9hZGVyOiBfbG9hZGVyQ29uZmlnLFxuICAgICAgdmVyYm9zZSxcbiAgICAgIC8vIHdlIGNhbiB1c2UgdGhlc2UgZGlyZWN0bHkgdG8gY3JlYXRlIHRoZSBoYW5kbGVyXG4gICAgICAuLi51c2VySGFuZGxlck9wdGlvbnNcbiAgICB9ID0gX3VzZXJPcHRpb25zO1xuXG4gICAgc2VydmVyLmNvbmZpZyA9IG1lcmdlQ29uZmlnKFxuICAgICAgc2VydmVyLmNvbmZpZyxcbiAgICAgIHJlc29sdmVkQ29uZmlnXG4gICAgKSBhcyBSZXNvbHZlZENvbmZpZztcblxuXG4gICAgLy8gSGFuZGxlIFZpdGUgc2VydmVyIHJlc3RhcnRzXG4gICAgc2VydmVyLndzLm9uKFwicmVzdGFydFwiLCAocGF0aCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIFwiW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0g8J+UpyBQbHVnaW4gY2hhbmdlZCwgcHJlcGFyaW5nIGZvciByZXN0YXJ0OlwiLFxuICAgICAgICBwYXRoXG4gICAgICApO1xuXG4gICAgICBpc1Jlc3RhcnRpbmcgPSB0cnVlO1xuXG4gICAgICAvLyBBYm9ydCBhbGwgYWN0aXZlIHN0cmVhbXMgZmlyc3QsIHRoZW4gY2xvc2UgcmVzcG9uc2VzXG4gICAgICBmb3IgKGNvbnN0IHJlcyBvZiBhY3RpdmVTdHJlYW1zKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBhY3RpdmVDb250cm9sbGVycy5nZXQocmVzKTtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydChcIlNlcnZlciByZXN0YXJ0aW5nXCIpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIElnbm9yZSBhYm9ydCBlcnJvcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXMud3JpdGVIZWFkKDUwMywge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC94LWNvbXBvbmVudDsgY2hhcnNldD11dGYtOFwiLFxuICAgICAgICAgIFwiUmV0cnktQWZ0ZXJcIjogXCIxXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuZW5kKFxuICAgICAgICAgIGAwOkV7XCJkaWdlc3RcIjpcIlwiLFwibmFtZVwiOlwiRXJyb3JcIixcIm1lc3NhZ2VcIjpcIlNlcnZlciByZXN0YXJ0aW5nLi4uXCIsXCJzdGFja1wiOlwiXCIsXCJlbnZcIjpcIlNlcnZlclwifWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVN0cmVhbXMuY2xlYXIoKTtcbiAgICAgIGFjdGl2ZUNvbnRyb2xsZXJzLmNsZWFyKCk7XG5cbiAgICAgIC8vIEZhbGxiYWNrOiByZXNldCByZXN0YXJ0IGZsYWcgYWZ0ZXIgYSB0aW1lb3V0XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKGlzUmVzdGFydGluZykge1xuICAgICAgICAgIGlzUmVzdGFydGluZyA9IGZhbHNlO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgXCJbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSDij7AgUmVzdGFydCB0aW1lb3V0LCByZXN1bWluZyBub3JtYWwgb3BlcmF0aW9uXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LCA1MDAwKTsgLy8gNSBzZWNvbmQgdGltZW91dFxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIHJlc3RhcnQgY29tcGxldGlvblxuICAgIHNlcnZlci53cy5vbihcImZ1bGwtcmVsb2FkXCIsICgpID0+IHtcbiAgICAgIGlzUmVzdGFydGluZyA9IGZhbHNlO1xuICAgICAgbG9nZ2VyLmluZm8oXCJbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSDinIUgU2VydmVyIHJlc3RhcnQgY29tcGxldGVkXCIpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbG9hZGVyID0gYXN5bmMgKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IFttb2R1bGVJRCwgZXhwb3J0TmFtZV0gPSBpZC5zcGxpdChcIiNcIik7XG4gICAgICBcbiAgICAgIC8vIERldGVybWluZSB0aGUgZnVsbCBtb2R1bGUgcGF0aFxuICAgICAgbGV0IGZ1bGxNb2R1bGVQYXRoOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGFscmVhZHkgYW4gYWJzb2x1dGUgcGF0aCAoZnJvbSBzZXJ2ZXIgZW52aXJvbm1lbnQgbW9kdWxlIGdyYXBoKVxuICAgICAgaWYgKG1vZHVsZUlELnN0YXJ0c1dpdGgoX3VzZXJPcHRpb25zLnByb2plY3RSb290KSkge1xuICAgICAgICBmdWxsTW9kdWxlUGF0aCA9IG1vZHVsZUlEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBwYXRoIGFnYWluc3QgcHJvamVjdCByb290XG4gICAgICAgIGNvbnN0IHJlc29sdmVkTW9kdWxlSUQgPSBtb2R1bGVJRC5zdGFydHNXaXRoKFwiL1wiKSBcbiAgICAgICAgICA/IG1vZHVsZUlELnNsaWNlKDEpIFxuICAgICAgICAgIDogbW9kdWxlSUQ7XG4gICAgICAgIGZ1bGxNb2R1bGVQYXRoID0gYCR7X3VzZXJPcHRpb25zLnByb2plY3RSb290fS8ke3Jlc29sdmVkTW9kdWxlSUR9YDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXNlIHNlcnZlciBlbnZpcm9ubWVudCBydW5uZXIgZm9yIHByb3BlciByZWFjdC1zZXJ2ZXIgY29uZGl0aW9uIGhhbmRsaW5nXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgY2xpZW50IGNvbXBvbmVudHMgYXJlIHRyYW5zZm9ybWVkIHRvIHJlZ2lzdGVyQ2xpZW50UmVmZXJlbmNlXG4gICAgICBjb25zdCBzZXJ2ZXJFbnYgPSBzZXJ2ZXIuZW52aXJvbm1lbnRzWydzZXJ2ZXInXTtcbiAgICAgIGxldCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgXG4gICAgICBpZiAoc2VydmVyRW52ICYmICdydW5uZXInIGluIHNlcnZlckVudiAmJiBzZXJ2ZXJFbnYucnVubmVyKSB7XG4gICAgICAgIC8vIFZpdGUgNiBFbnZpcm9ubWVudCBBUEk6IHVzZSBzZXJ2ZXIgZW52aXJvbm1lbnQgcnVubmVyIGZvciBSU0NcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgKHNlcnZlckVudi5ydW5uZXIgYXMgeyBpbXBvcnQ6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfSkuaW1wb3J0KGZ1bGxNb2R1bGVQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNzckxvYWRNb2R1bGUgKHNob3VsZCBub3QgaGFwcGVuIGluIFZpdGUgNispXG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHNlcnZlci5zc3JMb2FkTW9kdWxlKGZ1bGxNb2R1bGVQYXRoKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgXFxcIiR7bW9kdWxlSUR9XFxcIiBkb2VzIG5vdCBoYXZlIGFueSBleHBvcnRzYCk7XG5cbiAgICAgIGlmICghT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGggJiYgZXhwb3J0TmFtZS5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTW9kdWxlIFxcXCIke21vZHVsZUlEfVxcXCIgaXMgYSBtb2R1bGUsIGJ1dCBkb2VzIG5vdCBoYXZlIGFueSBleHBvcnRzIHNvIGl0IGNhbid0IGZpbmQgJHtleHBvcnROYW1lfWBcbiAgICAgICAgKTtcblxuICAgICAgLy8gQWx3YXlzIHJldHVybiB0aGUgZnVsbCBtb2R1bGUgLSBjYWxsZXJzIHdpbGwgZXh0cmFjdCB0aGUgc3BlY2lmaWMgZXhwb3J0IGlmIG5lZWRlZFxuICAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggaG93IHJlc29sdmVQYWdlIGFuZCByZXNvbHZlUHJvcHMgd29ya1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIHNlcnZlci5taWRkbGV3YXJlcy51c2UoYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBpZiAoIXJlcS51cmwpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhbmRsZXJPcHRpb25zID0ge1xuICAgICAgICAuLi51c2VySGFuZGxlck9wdGlvbnMsXG4gICAgICAgIG1vZHVsZUJhc2VVUkw6IHNlcnZlci5jb25maWcuYmFzZSxcbiAgICAgICAgbW9kdWxlQmFzZVBhdGg6IHVzZXJIYW5kbGVyT3B0aW9ucy5tb2R1bGVCYXNlUGF0aCxcbiAgICAgICAgcHJvamVjdFJvb3Q6IF91c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCxcbiAgICAgICAgY3NzOiB1c2VySGFuZGxlck9wdGlvbnMuY3NzLFxuICAgICAgICBsb2FkZXI6IGxvYWRlcixcbiAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgICByc2NTdHJlYW06IHJlc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGluZm8gPSByZXF1ZXN0SW5mbyhyZXEsIGhhbmRsZXJPcHRpb25zLCBcIlwiKTtcblxuICAgICAgLy8gSGFuZGxlIHNlcnZlciBhY3Rpb25zXG4gICAgICBpZiAoaW5mby5pc1NlcnZlckFjdGlvblJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNlcnZlckFjdGlvbihyZXEsIHJlcywgc2VydmVyLCBoYW5kbGVyT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAoIWluZm8uaXNSc2NSZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHNlcnZlciBpcyByZXN0YXJ0aW5nLCByZXR1cm4gNTAzIGltbWVkaWF0ZWx5XG4gICAgICBpZiAoaXNSZXN0YXJ0aW5nKSB7XG4gICAgICAgIHJlcy53cml0ZUhlYWQoNTAzLCB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L3gtY29tcG9uZW50OyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgXCJSZXRyeS1BZnRlclwiOiBcIjFcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5lbmQoXG4gICAgICAgICAgYDA6RXtcImRpZ2VzdFwiOlwiXCIsXCJuYW1lXCI6XCJFcnJvclwiLFwibWVzc2FnZVwiOlwiU2VydmVyIHJlc3RhcnRpbmcuLi5cIixcInN0YWNrXCI6XCJcIixcImVudlwiOlwiU2VydmVyXCJ9YFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBSU0Mgd29ya2VyIGZvciBjb25zaXN0ZW50IFJTQyBzdHJlYW0gZm9ybWF0c1xuICAgICAgbGV0IHJzY1dvcmtlcjogV29ya2VyIHwgdW5kZWZpbmVkO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByb3V0ZUZpbGVzID0gYXdhaXQgZ2V0Um91dGVGaWxlcyhcbiAgICAgICAgICBpbmZvLnJvdXRlLFxuICAgICAgICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXMsXG4gICAgICAgICAgX3VzZXJPcHRpb25zLFxuICAgICAgICAgIGxvZ2dlclxuICAgICAgICApO1xuICAgICAgICBpZiAocm91dGVGaWxlcy50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICBjb25zdCBwYW5pY0Vycm9yID0gaGFuZGxlRXJyb3Ioe1xuICAgICAgICAgICAgZXJyb3I6IHJvdXRlRmlsZXMuZXJyb3IsXG4gICAgICAgICAgICBsb2dnZXI6IGxvZ2dlcixcbiAgICAgICAgICAgIHBhbmljVGhyZXNob2xkOiB1c2VySGFuZGxlck9wdGlvbnMucGFuaWNUaHJlc2hvbGQsXG4gICAgICAgICAgICBjcml0aWNhbDogZmFsc2UsXG4gICAgICAgICAgICBjb250ZXh0OiBcImNvbmZpZ3VyZVJlYWN0U2VydmVyXCIsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHBhbmljRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocGFuaWNFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFnZVBhdGggPSByb3V0ZUZpbGVzLnBhZ2U7XG4gICAgICAgIGNvbnN0IHByb3BzUGF0aCA9IHJvdXRlRmlsZXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHJvb3RQYXRoID0gcm91dGVGaWxlcy5yb290O1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwYWdlIHBhdGggLSBpZiBub3QsIHNraXAgdGhpcyByb3V0ZVxuICAgICAgICBpZiAoIXBhZ2VQYXRoKSB7XG4gICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBObyBwYWdlIGZvdW5kIGZvciByb3V0ZTogJHtpbmZvLnJvdXRlfSwgc2tpcHBpbmdgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgQ29tcG9uZW50cyByZXNvbHZlZCBzdWNjZXNzZnVsbHkgZm9yIHJvdXRlOiAke2luZm8ucm91dGV9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFBhZ2VDb21wb25lbnQgaXMgdmFsaWQsIGNyZWF0aW5nIGhhbmRsZXIgb3B0aW9ucyBmb3Igcm91dGU6ICR7aW5mby5yb3V0ZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZXJPcHRpb25zID0ge1xuICAgICAgICAgIC4uLnVzZXJIYW5kbGVyT3B0aW9ucyxcbiAgICAgICAgICByb3V0ZTogaW5mby5yb3V0ZSxcbiAgICAgICAgICBwYWdlUGF0aCxcbiAgICAgICAgICBwcm9wc1BhdGgsXG4gICAgICAgICAgbG9nZ2VyOiBsb2dnZXIsXG4gICAgICAgICAgbWFuaWZlc3Q6IHNlcnZlck1hbmlmZXN0LFxuICAgICAgICAgIHNlcnZlcixcbiAgICAgICAgICBtb2R1bGVCYXNlVVJMOiBzZXJ2ZXIuY29uZmlnLmJhc2UsXG4gICAgICAgICAgcHJvamVjdFJvb3Q6IF91c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCxcbiAgICAgICAgICBsb2FkZXI6IGxvYWRlcixcbiAgICAgICAgICB2ZXJib3NlOiB2ZXJib3NlLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIExvYWQgYWN0dWFsIGNvbXBvbmVudHMgZmlyc3QgLSB0aGlzIHJlZ2lzdGVycyB0aGVtIGluIHRoZSBtb2R1bGUgZ3JhcGhcbiAgICAgICAgLy8gd2hpY2ggaXMgcmVxdWlyZWQgZm9yIENTUyBjb2xsZWN0aW9uIHRvIHdvcmtcbiAgICAgICAgbGV0IFBhZ2VDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PiA9IFJlYWN0LkZyYWdtZW50O1xuICAgICAgICBsZXQgUm9vdENvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+ID0gRGVmYXVsdFJvb3Q7XG4gICAgICAgIGxldCBwYWdlUHJvcHM6IGFueSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgLy8gTG9hZCB0aGUgUm9vdCBjb21wb25lbnRcbiAgICAgICAgaWYgKHJvb3RQYXRoKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RFeHBvcnROYW1lID0gdXNlckhhbmRsZXJPcHRpb25zLnJvb3RFeHBvcnROYW1lIHx8IFwiUm9vdFwiO1xuICAgICAgICAgICAgY29uc3Qgcm9vdE1vZHVsZSA9IGF3YWl0IGxvYWRlcihyb290UGF0aCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChyb290TW9kdWxlICYmIHJvb3RNb2R1bGVbcm9vdEV4cG9ydE5hbWVdICYmIHR5cGVvZiByb290TW9kdWxlW3Jvb3RFeHBvcnROYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBSb290Q29tcG9uZW50ID0gcm9vdE1vZHVsZVtyb290RXhwb3J0TmFtZV0gYXMgUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+O1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBMb2FkZWQgUm9vdCBjb21wb25lbnQgZm9yIHJvdXRlICR7aW5mby5yb3V0ZX0gZnJvbSAke3Jvb3RQYXRofSMke3Jvb3RFeHBvcnROYW1lfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvb3RNb2R1bGUgJiYgcm9vdE1vZHVsZVsnZGVmYXVsdCddICYmIHR5cGVvZiByb290TW9kdWxlWydkZWZhdWx0J10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgUm9vdENvbXBvbmVudCA9IHJvb3RNb2R1bGVbJ2RlZmF1bHQnXSBhcyBSZWFjdC5Db21wb25lbnRUeXBlPGFueT47XG4gICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYExvYWRlZCBkZWZhdWx0IGV4cG9ydCBhcyBSb290IGNvbXBvbmVudCBmb3Igcm91dGUgJHtpbmZvLnJvdXRlfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBSb290IGNvbXBvbmVudCBub3QgZm91bmQgaW4gJHtyb290UGF0aH0sIHVzaW5nIFJlYWN0LkZyYWdtZW50YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBsb2FkIFJvb3QgY29tcG9uZW50IGZyb20gJHtyb290UGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTG9hZCB0aGUgcGFnZSBjb21wb25lbnQgKHJlZ2lzdGVycyBpdCBpbiBtb2R1bGUgZ3JhcGggZm9yIENTUyBjb2xsZWN0aW9uKVxuICAgICAgICBpZiAocGFnZVBhdGgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFnZUV4cG9ydE5hbWUgPSB1c2VySGFuZGxlck9wdGlvbnMucGFnZUV4cG9ydE5hbWUgfHwgXCJQYWdlXCI7XG4gICAgICAgICAgICBjb25zdCBwYWdlTW9kdWxlID0gYXdhaXQgbG9hZGVyKHBhZ2VQYXRoKTtcbiAgICAgICAgICAgIGlmIChwYWdlTW9kdWxlICYmIHBhZ2VNb2R1bGVbcGFnZUV4cG9ydE5hbWVdICYmIHR5cGVvZiBwYWdlTW9kdWxlW3BhZ2VFeHBvcnROYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBQYWdlQ29tcG9uZW50ID0gcGFnZU1vZHVsZVtwYWdlRXhwb3J0TmFtZV0gYXMgUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+O1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBMb2FkZWQgUGFnZSBjb21wb25lbnQgZm9yIHJvdXRlICR7aW5mby5yb3V0ZX0gZnJvbSAke3BhZ2VQYXRofSMke3BhZ2VFeHBvcnROYW1lfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhZ2VNb2R1bGUgJiYgcGFnZU1vZHVsZVsnZGVmYXVsdCddICYmIHR5cGVvZiBwYWdlTW9kdWxlWydkZWZhdWx0J10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgUGFnZUNvbXBvbmVudCA9IHBhZ2VNb2R1bGVbJ2RlZmF1bHQnXSBhcyBSZWFjdC5Db21wb25lbnRUeXBlPGFueT47XG4gICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYExvYWRlZCBkZWZhdWx0IGV4cG9ydCBhcyBQYWdlIGNvbXBvbmVudCBmb3Igcm91dGUgJHtpbmZvLnJvdXRlfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhZ2VNb2R1bGUgJiYgdHlwZW9mIHBhZ2VNb2R1bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgUGFnZUNvbXBvbmVudCA9IHBhZ2VNb2R1bGUgYXMgUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+O1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBMb2FkZWQgbW9kdWxlIGFzIFBhZ2UgY29tcG9uZW50IGZvciByb3V0ZSAke2luZm8ucm91dGV9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFBhZ2UgY29tcG9uZW50IG5vdCBmb3VuZCBpbiAke3BhZ2VQYXRofSwgdXNpbmcgUmVhY3QuRnJhZ21lbnRgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGxvYWQgcGFnZSBjb21wb25lbnQgZnJvbSAke3BhZ2VQYXRofTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOT1cgY29sbGVjdCBDU1MgLSBwYWdlIGlzIHJlZ2lzdGVyZWQgaW4gbW9kdWxlIGdyYXBoXG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYENvbGxlY3RpbmcgQ1NTIGZpbGVzIGZvciByb3V0ZTogJHtpbmZvLnJvdXRlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VydmVyRW52ID0gc2VydmVyLmVudmlyb25tZW50c1snc2VydmVyJ107XG4gICAgICAgIGNvbnN0IG1vZHVsZUdyYXBoRm9yQ3NzID0gc2VydmVyRW52Py5tb2R1bGVHcmFwaCA/PyBzZXJ2ZXIubW9kdWxlR3JhcGg7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBjc3NGaWxlc1Jlc3VsdCA9IGF3YWl0IGNvbGxlY3RWaXRlTW9kdWxlR3JhcGhDc3Moe1xuICAgICAgICAgIG1vZHVsZUdyYXBoOiBtb2R1bGVHcmFwaEZvckNzcyxcbiAgICAgICAgICBwYXJlbnRVcmw6IHBhZ2VQYXRoLFxuICAgICAgICAgIGhhbmRsZXJPcHRpb25zOiBoYW5kbGVyT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgQ1NTIGNvbGxlY3Rpb24gY29tcGxldGVkIGZvciByb3V0ZTogJHtpbmZvLnJvdXRlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNzc0ZpbGVzUmVzdWx0LnR5cGUgPT09IFwic2tpcFwiKSB7XG4gICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBDU1MgY29sbGVjdGlvbiBza2lwcGVkIGZvciByb3V0ZTogJHtpbmZvLnJvdXRlfSwgY29udGludWluZyB3aXRoIFJTQyByZW5kZXJpbmdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNzc0ZpbGVzUmVzdWx0LnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgIHJldHVybiBuZXh0KGNzc0ZpbGVzUmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbGxlY3RlZENzc0ZpbGVzID0gY3NzRmlsZXNSZXN1bHQudHlwZSA9PT0gXCJzdWNjZXNzXCIgPyBjc3NGaWxlc1Jlc3VsdC5jc3NGaWxlcyA6IG5ldyBNYXAoKTtcblxuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBDcmVhdGluZyBSU0MgaGFuZGxlciBmb3Igcm91dGU6ICR7aW5mby5yb3V0ZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvYWQgcHJvcHMgdXNpbmcgdGhlIHJlc29sdmVQYWdlQW5kUHJvcHMgaGVscGVyXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBbY29uZmlndXJlUmVhY3RTZXJ2ZXJdIExvYWRpbmcgcHJvcHMgZm9yIHJvdXRlICR7aW5mby5yb3V0ZX0sIHBhZ2VQYXRoOiAke3BhZ2VQYXRofSwgcHJvcHNQYXRoOiAke3Byb3BzUGF0aH0sIHVybDogJHtpbmZvLnVybH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgcHJvcHNSZXN1bHQgPSBhd2FpdCByZXNvbHZlUGFnZUFuZFByb3BzKHtcbiAgICAgICAgICAgIHBhZ2VQYXRoLFxuICAgICAgICAgICAgcHJvcHNQYXRoLFxuICAgICAgICAgICAgcGFnZUV4cG9ydE5hbWU6IHVzZXJIYW5kbGVyT3B0aW9ucy5wYWdlRXhwb3J0TmFtZSxcbiAgICAgICAgICAgIHByb3BzRXhwb3J0TmFtZTogdXNlckhhbmRsZXJPcHRpb25zLnByb3BzRXhwb3J0TmFtZSxcbiAgICAgICAgICAgIHVybDogaW5mby51cmwsXG4gICAgICAgICAgICByb3V0ZTogaW5mby5yb3V0ZSxcbiAgICAgICAgICAgIG1vZHVsZUJhc2VVUkw6IHNlcnZlci5jb25maWcuYmFzZSxcbiAgICAgICAgICAgIGxvYWRlcixcbiAgICAgICAgICAgIHZlcmJvc2UsXG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBidWlsZDoge1xuICAgICAgICAgICAgICByc2NPdXRwdXRQYXRoOiB1c2VySGFuZGxlck9wdGlvbnMuYnVpbGQ/LnJzY091dHB1dFBhdGggfHwgXCIucnNjXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBbY29uZmlndXJlUmVhY3RTZXJ2ZXJdIFByb3BzIHJlc29sdXRpb24gcmVzdWx0IHR5cGU6ICR7cHJvcHNSZXN1bHQudHlwZX1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocHJvcHNSZXN1bHQudHlwZSA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHBhZ2VQcm9wcyA9IHByb3BzUmVzdWx0LnBhZ2VQcm9wcyB8fCB7fTtcbiAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBbY29uZmlndXJlUmVhY3RTZXJ2ZXJdIExvYWRlZCBwcm9wcyBmb3Igcm91dGUgJHtpbmZvLnJvdXRlfTogJHtKU09OLnN0cmluZ2lmeShwYWdlUHJvcHMsIG51bGwsIDIpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAocHJvcHNSZXN1bHQudHlwZSA9PT0gXCJza2lwXCIpIHtcbiAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBbY29uZmlndXJlUmVhY3RTZXJ2ZXJdIFByb3BzIHJlc29sdXRpb24gc2tpcHBlZCBmb3Igcm91dGUgJHtpbmZvLnJvdXRlfSwgdXNpbmcgZW1wdHkgcHJvcHNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2VQcm9wcyA9IHt9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgW2NvbmZpZ3VyZVJlYWN0U2VydmVyXSBGYWlsZWQgdG8gbG9hZCBwcm9wcyBmb3Igcm91dGUgJHtpbmZvLnJvdXRlfTogJHtwcm9wc1Jlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2VQcm9wcyA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFtjb25maWd1cmVSZWFjdFNlcnZlcl0gRXJyb3IgbG9hZGluZyBwcm9wcyBmb3Igcm91dGUgJHtpbmZvLnJvdXRlfTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBbY29uZmlndXJlUmVhY3RTZXJ2ZXJdIEVycm9yIHN0YWNrOiAke2Vycm9yLnN0YWNrfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBDb250aW51ZSB3aXRoIGVtcHR5IHByb3BzIGlmIGxvYWRpbmcgZmFpbHNcbiAgICAgICAgICBwYWdlUHJvcHMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERFViBNT0RFIE9QVElNSVpBVElPTjogU2tpcCB3b3JrZXIsIHVzZSBkaXJlY3QgcmVuZGVyaW5nIG9uIG1haW4gdGhyZWFkXG4gICAgICAgIC8vIFxuICAgICAgICAvLyBXaHk6IEluIGRldjpyc2MgbW9kZSwgdGhlIG1haW4gdGhyZWFkIGFscmVhZHkgaGFzIHJlYWN0LXNlcnZlciBjb25kaXRpb24gYW5kIFxuICAgICAgICAvLyBsb2FkcyBtb2R1bGVzIHZpYSBWaXRlJ3MgZW52aXJvbm1lbnQgcnVubmVyIHdoaWNoIGhhbmRsZXMgSE1SIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgIC8vIFRoZSB3b3JrZXIgdXNlcyByYXcgaW1wb3J0KCkgd2hpY2ggYnlwYXNzZXMgVml0ZSdzIG1vZHVsZSBncmFwaCBhbmQgSE1SLlxuICAgICAgICAvL1xuICAgICAgICAvLyBCZW5lZml0cyBvZiBkaXJlY3QgcmVuZGVyaW5nIGluIGRldjpcbiAgICAgICAgLy8gLSBQcm9wZXIgSE1SOiBmaWxlIGNoYW5nZXMgYXJlIHBpY2tlZCB1cCBpbW1lZGlhdGVseSB2aWEgVml0ZSdzIG1vZHVsZSBncmFwaFxuICAgICAgICAvLyAtIE5vIG1vZHVsZSBjYWNoaW5nIGlzc3VlczogZW52aXJvbm1lbnQgcnVubmVyIGhhbmRsZXMgY2FjaGUgaW52YWxpZGF0aW9uXG4gICAgICAgIC8vIC0gU2ltcGxlciBkZWJ1Z2dpbmc6IGFsbCBjb2RlIHJ1bnMgaW4gbWFpbiB0aHJlYWRcbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIHdvcmtlciBpcyBzdGlsbCB2YWx1YWJsZSBmb3I6XG4gICAgICAgIC8vIC0gUHJvZHVjdGlvbiBidWlsZHMgKGlzb2xhdGlvbiwgY29uc2lzdGVudCBiZWhhdmlvcilcbiAgICAgICAgLy8gLSBGdXR1cmU6IFJ1bm5pbmcgUlNDIGluIGRpZmZlcmVudCBydW50aW1lcyAod29ya2VyZCwgZXRjLilcbiAgICAgICAgLy9cbiAgICAgICAgLy8gVXNlcnMgY2FuIG9wdC1pbiB0byB3b3JrZXIgaW4gZGV2IHZpYSBjb25maWcgaWYgbmVlZGVkIGZvciB0ZXN0aW5nIHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gICAgICAgIGNvbnN0IHVzZVdvcmtlckluRGV2ID0gX3VzZXJPcHRpb25zLmRldj8udXNlUnNjV29ya2VyID09PSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgaWYgKHVzZVdvcmtlckluRGV2KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBDcmVhdGluZyBSU0Mgd29ya2VyIGZvciByb3V0ZTogJHtpbmZvLnJvdXRlfSAodXNlUnNjV29ya2VyPXRydWUpYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlclJlc3VsdCA9IGF3YWl0IGNyZWF0ZVdvcmtlcih7XG4gICAgICAgICAgICAgIHByb2plY3RSb290OiBfdXNlck9wdGlvbnMucHJvamVjdFJvb3QgfHwgc2VydmVyLmNvbmZpZy5yb290LFxuICAgICAgICAgICAgICB3b3JrZXJEYXRhOiB7XG4gICAgICAgICAgICAgICAgdXNlck9wdGlvbnM6IHNlcmlhbGl6ZWRPcHRpb25zKF91c2VyT3B0aW9ucywgYXV0b0Rpc2NvdmVyZWRGaWxlcyksXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRDb25maWc6IHNlcnZlci5jb25maWcsXG4gICAgICAgICAgICAgICAgY29uZmlnRW52OiB7IGNvbW1hbmQ6IFwic2VydmVcIiwgbW9kZTogXCJkZXZlbG9wbWVudFwiIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZlcmJvc2UsXG4gICAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAod29ya2VyUmVzdWx0LnR5cGUgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgIHJzY1dvcmtlciA9IHdvcmtlclJlc3VsdC53b3JrZXI7XG4gICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJTQyB3b3JrZXIgY3JlYXRlZCBzdWNjZXNzZnVsbHkgZm9yIHJvdXRlOiAke2luZm8ucm91dGV9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFJTQyB3b3JrZXIgY3JlYXRpb24gc2tpcHBlZCBmb3Igcm91dGU6ICR7aW5mby5yb3V0ZX06ICR7d29ya2VyUmVzdWx0LnJlYXNvbn1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGNyZWF0ZSBSU0Mgd29ya2VyIGZvciByb3V0ZTogJHtpbmZvLnJvdXRlfTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBbZGV2OnJzY10gVXNpbmcgZGlyZWN0IHJlbmRlcmluZyAobm8gd29ya2VyKSBmb3IgcHJvcGVyIEhNUiBzdXBwb3J0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIHdvcmtlci1iYXNlZCBSU0Mgc3RyZWFtIGlmIHdvcmtlciBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gZGlyZWN0IHJlbmRlcmluZ1xuICAgICAgICAvLyBDUklUSUNBTDogRm9yIFJTQyByZXF1ZXN0cywgdXNlIGh0bWxQYXRoOiBcIlwiIGZvciBoZWFkbGVzcyBtb2RlIChubyBIdG1sIHdyYXBwZXIpXG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgaHlkcmF0aW9uIGVycm9ycyB3aGVyZSA8aHRtbD4gd291bGQgYmUgcmVuZGVyZWQgaW5zaWRlICNyb290IGRpdlxuICAgICAgICBjb25zdCByc2NSZXN1bHQgPSByc2NXb3JrZXIgXG4gICAgICAgICAgPyBjcmVhdGVSc2NTdHJlYW0oe1xuICAgICAgICAgICAgICAuLi5oYW5kbGVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgdXJsOiBpbmZvLnVybCxcbiAgICAgICAgICAgICAgcGFnZVBhdGgsXG4gICAgICAgICAgICAgIHByb3BzUGF0aCxcbiAgICAgICAgICAgICAgcm9vdFBhdGgsICAvLyBQYXNzIHRoZSByb290IHBhdGggZm9yIHdvcmtlciB0byBsb2FkXG4gICAgICAgICAgICAgIGh0bWxQYXRoOiBcIlwiLCAgLy8gRW1wdHkgc3RyaW5nID0gaGVhZGxlc3MgUlNDIChubyBIdG1sIHdyYXBwZXIpXG4gICAgICAgICAgICAgIHJzY1dvcmtlcixcbiAgICAgICAgICAgICAgY3NzRmlsZXM6IGNvbGxlY3RlZENzc0ZpbGVzLFxuICAgICAgICAgICAgICBnbG9iYWxDc3M6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBjcmVhdGVSZW5kZXJUb1BpcGVhYmxlU3RyZWFtSGFuZGxlcih7XG4gICAgICAgICAgICAgIC4uLmhhbmRsZXJPcHRpb25zLFxuICAgICAgICAgICAgICB1cmw6IGluZm8udXJsLFxuICAgICAgICAgICAgICBQYWdlQ29tcG9uZW50OiBQYWdlQ29tcG9uZW50IGFzIGFueSxcbiAgICAgICAgICAgICAgUm9vdENvbXBvbmVudDogUm9vdENvbXBvbmVudCBhcyBhbnksXG4gICAgICAgICAgICAgIEh0bWxDb21wb25lbnQ6IFJlYWN0LkZyYWdtZW50LCAgLy8gSGVhZGxlc3Mgc3RyZWFtIC0gbm8gSHRtbCB3cmFwcGVyXG4gICAgICAgICAgICAgIHBhZ2VQcm9wczogcGFnZVByb3BzLCAgLy8gUGFzcyB0aGUgbG9hZGVkIHByb3BzXG4gICAgICAgICAgICAgIGNzc0ZpbGVzOiBjb2xsZWN0ZWRDc3NGaWxlcyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgUlNDIGhhbmRsZXIgY3JlYXRlZCBmb3Igcm91dGU6ICR7XG4gICAgICAgICAgICAgIGluZm8ucm91dGVcbiAgICAgICAgICAgIH0sIHJlc3VsdCB0eXBlOiAke3R5cGVvZiByc2NSZXN1bHR9LCBoYXMgcGlwZTogJHt0eXBlb2YgcnNjUmVzdWx0Py5waXBlfSwgaGFzIGFib3J0OiAke3R5cGVvZiByc2NSZXN1bHQ/LmFib3J0fWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJzY1Jlc3VsdCAmJiB0eXBlb2YgcnNjUmVzdWx0LnBpcGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgU2V0dGluZyB1cCBSU0Mgc3RyZWFtIGZvciByb3V0ZTogJHtpbmZvLnJvdXRlfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHNldCBoZWFkZXJzXG4gICAgICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQveC1jb21wb25lbnQ7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ1JJVElDQUw6IERpc2FibGUgY2FjaGluZyBpbiBkZXZlbG9wbWVudCBtb2RlXG4gICAgICAgICAgLy8gV2l0aG91dCB0aGlzLCBicm93c2VycyBjYWNoZSBSU0Mgc3RyZWFtcyBhbmQgZG9uJ3Qgc2hvdyB1cGRhdGVzXG4gICAgICAgICAgcmVzLnNldEhlYWRlcihcIkNhY2hlLUNvbnRyb2xcIiwgXCJuby1jYWNoZSwgbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZVwiKTtcbiAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiUHJhZ21hXCIsIFwibm8tY2FjaGVcIik7XG4gICAgICAgICAgcmVzLnNldEhlYWRlcihcIkV4cGlyZXNcIiwgXCIwXCIpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFkZCBDT1JTIGhlYWRlcnMgZm9yIFJTQyBmaWxlc1xuICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IHJlcS5oZWFkZXJzLm9yaWdpbjtcbiAgICAgICAgICBpZiAob3JpZ2luICYmIChvcmlnaW4uaW5jbHVkZXMoJ2xvY2FsaG9zdCcpIHx8IG9yaWdpbi5pbmNsdWRlcygnMTI3LjAuMC4xJykpKSB7XG4gICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIsIG9yaWdpbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIiwgXCIqXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kc1wiLCBcIkdFVCwgT1BUSU9OU1wiKTtcbiAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1wiLCBcIkFjY2VwdCwgQ29udGVudC1UeXBlXCIpO1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJBY2Nlc3MtQ29udHJvbC1NYXgtQWdlXCIsIFwiODY0MDBcIik7XG4gICAgICAgICAgcnNjUmVzdWx0LnBpcGUocmVzKTtcblxuICAgICAgICAgIC8vIFN0b3JlIHRoZSBjb250cm9sbGVyIGZvciBwb3RlbnRpYWwgYWJvcnQgZHVyaW5nIHJlc3RhcnRcbiAgICAgICAgICBhY3RpdmVDb250cm9sbGVycy5zZXQocmVzLCByc2NSZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBSU0MgaGFuZGxlciBmYWlsZWQgZm9yIHJvdXRlOiAke1xuICAgICAgICAgICAgICAgIGluZm8ucm91dGVcbiAgICAgICAgICAgICAgfSwgaW52YWxpZCByZXN1bHQ6ICR7dHlwZW9mIHJzY1Jlc3VsdH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIGVycm9yIGNhc2VcbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgICByZXMuZW5kKFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xuICAgICAgICB9XG4gICAgICAgIGFjdGl2ZVN0cmVhbXMuYWRkKHJlcyk7XG4gICAgICAgIHJlcy5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShyZXMpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFib3J0IHRoZSBSU0Mgc3RyZWFtIHRvIGNsZWFuIHVwIE1lc3NhZ2VQb3J0c1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBhY3RpdmVDb250cm9sbGVycy5nZXQocmVzKTtcbiAgICAgICAgICBpZiAoY29udHJvbGxlciAmJiB0eXBlb2YgY29udHJvbGxlci5hYm9ydCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aXZlQ29udHJvbGxlcnMuZGVsZXRlKHJlcyk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2xlYW4gdXAgd29ya2VyIHdoZW4gcmVxdWVzdCBjb21wbGV0ZXNcbiAgICAgICAgICBjbGVhbnVwV29ya2VyKHJzY1dvcmtlcik7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgcGFuaWNFcnJvciA9IGhhbmRsZUVycm9yKHtcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgcGFuaWNUaHJlc2hvbGQ6IGhhbmRsZXJPcHRpb25zLnBhbmljVGhyZXNob2xkLFxuICAgICAgICAgIGNyaXRpY2FsOiBmYWxzZSxcbiAgICAgICAgICBjb250ZXh0OiBcImNvbmZpZ3VyZVJlYWN0U2VydmVyXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGFuaWNFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHQocGFuaWNFcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQveC1jb21wb25lbnQ7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgICAgIFxuICAgICAgICAvLyBOb3RlOiBXb3JrZXIgY2xlYW51cCBpcyBoYW5kbGVkIGJ5IHRoZSByZXNwb25zZSBjbG9zZSBoYW5kbGVyXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4iXSwibmFtZXMiOlsiaGFuZGxlck9wdGlvbnMiLCJEZWZhdWx0Um9vdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQmEsTUFBQSxvQkFBQSxHQUNYLFNBQVMscUJBQXNCLENBQUE7QUFBQSxFQUM3QixNQUFBO0FBQUEsRUFDQSxtQkFBQTtBQUFBLEVBQ0EsV0FBYSxFQUFBLFlBQUE7QUFBQSxFQUNiLGNBQUE7QUFBQSxFQUNBO0FBQ0YsQ0FBRyxFQUFBO0FBQ0QsRUFBTSxNQUFBLGFBQUEsdUJBQW9CLEdBQW9CLEVBQUE7QUFDOUMsRUFBTSxNQUFBLGlCQUFBLHVCQUF3QixHQUc1QixFQUFBO0FBQ0YsRUFBQSxJQUFJLFlBQWUsR0FBQSxLQUFBO0FBR25CLEVBQUEsTUFBTSxNQUFTLEdBQUEsTUFBQSxDQUFPLE1BQU8sQ0FBQSxZQUFBLElBQWdCLE9BQU8sTUFBTyxDQUFBLE1BQUE7QUFDM0QsRUFBTSxNQUFBO0FBQUEsSUFDSixJQUFNLEVBQUEsa0JBQUE7QUFBQTtBQUFBLElBRU4sTUFBUSxFQUFBLGFBQUE7QUFBQSxJQUNSLE9BQUE7QUFBQTtBQUFBLElBRUEsR0FBRztBQUFBLEdBQ0QsR0FBQSxZQUFBO0FBRUosRUFBQSxNQUFBLENBQU8sTUFBUyxHQUFBLFdBQUE7QUFBQSxJQUNkLE1BQU8sQ0FBQSxNQUFBO0FBQUEsSUFDUDtBQUFBLEdBQ0Y7QUFJQSxF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
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.client.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/plugin.client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMnD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,YA+JtC,CAAC"}
1
+ {"version":3,"file":"plugin.client.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/plugin.client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMnD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,YAyJtC,CAAC"}
@@ -28,8 +28,7 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevClient(option
28
28
  name: "vite-plugin-react-server:dev-server-client",
29
29
  apply: "serve",
30
30
  // Only apply in dev server mode
31
- // Note: Removed applyToEnvironment - handleHotUpdate needs to run regardless
32
- // The plugin should apply to client environment, but handleHotUpdate is a dev server hook
31
+ // No applyToEnvironment hotUpdate needs to run for all environments
33
32
  // that should work regardless of environment filtering
34
33
  config(_config, viteConfigEnv) {
35
34
  configEnv = viteConfigEnv;
@@ -61,7 +60,10 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevClient(option
61
60
  resolvedConfig: server.config
62
61
  });
63
62
  },
64
- handleHotUpdate({ file, server }) {
63
+ hotUpdate(ctx) {
64
+ const { file, server } = ctx;
65
+ const envName = ctx.environment?.name ?? "unknown";
66
+ if (envName !== "client") return;
65
67
  if (isProcessingHmr) {
66
68
  return void 0;
67
69
  }
@@ -70,6 +72,7 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevClient(option
70
72
  const normalizedFile = file.replace(projectRoot, "").replace(/^\/+/, "");
71
73
  const isSourceFile = normalizedFile.startsWith(moduleBase + "/") && (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js"));
72
74
  const isClientFile = isSourceFile && (() => {
75
+ if (/\.client\.(js|ts|jsx|tsx)$/.test(file)) return true;
73
76
  try {
74
77
  const head = readFileSync(file, "utf-8").slice(0, 200);
75
78
  return /^\s*["']use client["']/.test(head.split("\n")[0]);
@@ -78,20 +81,11 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevClient(option
78
81
  }
79
82
  })();
80
83
  const isServerFile = isSourceFile && !isClientFile;
81
- server.config.logger.info(`[vite-plugin-react-server] handleHotUpdate: file=${file}, normalized=${normalizedFile}, isServerFile=${isServerFile}, isClientFile=${isClientFile}, hasHandler=${!!hmrHandler}`);
82
84
  if (isServerFile && hmrHandler) {
83
85
  isProcessingHmr = true;
84
86
  try {
85
87
  server.config.logger.info(`[vite-plugin-react-server] File changed: ${file}, sending HMR update...`);
86
88
  hmrHandler.sendHmrUpdate(file);
87
- server.ws.send({
88
- type: "custom",
89
- event: "vite-plugin-react-server:server-component-update",
90
- data: {
91
- file: normalizedFile,
92
- path: file
93
- }
94
- });
95
89
  if (hmrHandler.restart) {
96
90
  if (restartTimeout) {
97
91
  clearTimeout(restartTimeout);
@@ -123,10 +117,9 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevClient(option
123
117
  } else if (isServerFile && !hmrHandler) {
124
118
  server.config.logger.warn(`[vite-plugin-react-server] Server file changed but HMR handler not available yet: ${file}`);
125
119
  }
126
- return void 0;
127
120
  }
128
121
  };
129
122
  };
130
123
 
131
124
  export { vitePluginReactDevServer };
132
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLmNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHR5cGUgeyBWaXRlUGx1Z2luRm4gfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuY2xpZW50LmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlnRW52IH0gZnJvbSBcInZpdGVcIjtcblxuXG4vKipcbiAqIERldiBzZXJ2ZXIgcGx1Z2luIGZvciBjbGllbnQgZW52aXJvbm1lbnQuXG4gKiBVc2VzIGNvbmZpZ3VyZVNlcnZlciBob29rIGZvciBwcm9wZXIgZGV2IHNlcnZlciBzZXR1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZpdGVQbHVnaW5SZWFjdERldlNlcnZlcjogVml0ZVBsdWdpbkZuID0gZnVuY3Rpb24gX3ZpdGVQbHVnaW5SZWFjdFNlcnZlckRldkNsaWVudChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICB9XG4gIFxuICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlT3B0aW9ucyhvcHRpb25zKTtcbiAgaWYgKHJlc29sdmVkT3B0aW9ucy50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICBpZiAocmVzb2x2ZWRPcHRpb25zLmVycm9yICE9IG51bGwpIHtcbiAgICAgIHRocm93IHJlc29sdmVkT3B0aW9ucy5lcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlc29sdmUgb3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyT3B0aW9ucyA9IHJlc29sdmVkT3B0aW9ucy51c2VyT3B0aW9ucztcbiAgXG5cbiAgbGV0IGNvbmZpZ0VudjogQ29uZmlnRW52IHwgdW5kZWZpbmVkO1xuICBsZXQgaG1ySGFuZGxlcjogeyByZXN0YXJ0OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsOyBzZW5kSG1yVXBkYXRlOiAoZmlsZTogc3RyaW5nLCByb3V0ZXM/OiBzdHJpbmdbXSkgPT4gdm9pZCB9IHwgbnVsbCA9IG51bGw7XG4gIGxldCBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTsgLy8gUHJldmVudCByZWN1cnNpdmUgSE1SIHVwZGF0ZXNcbiAgbGV0IHJlc3RhcnRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsOyAvLyBEZWJvdW5jZSB3b3JrZXIgcmVzdGFydHNcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwidml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOmRldi1zZXJ2ZXItY2xpZW50XCIsXG4gICAgYXBwbHk6IFwic2VydmVcIiwgLy8gT25seSBhcHBseSBpbiBkZXYgc2VydmVyIG1vZGVcbiAgICAvLyBOb3RlOiBSZW1vdmVkIGFwcGx5VG9FbnZpcm9ubWVudCAtIGhhbmRsZUhvdFVwZGF0ZSBuZWVkcyB0byBydW4gcmVnYXJkbGVzc1xuICAgIC8vIFRoZSBwbHVnaW4gc2hvdWxkIGFwcGx5IHRvIGNsaWVudCBlbnZpcm9ubWVudCwgYnV0IGhhbmRsZUhvdFVwZGF0ZSBpcyBhIGRldiBzZXJ2ZXIgaG9va1xuICAgIC8vIHRoYXQgc2hvdWxkIHdvcmsgcmVnYXJkbGVzcyBvZiBlbnZpcm9ubWVudCBmaWx0ZXJpbmdcbiAgICBjb25maWcoX2NvbmZpZywgdml0ZUNvbmZpZ0Vudikge1xuICAgICAgY29uZmlnRW52ID0gdml0ZUNvbmZpZ0VudjtcbiAgXG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyKSB7ICAgICAgXG4gICAgICAvLyBMb2cgdGhhdCBwbHVnaW4gaXMgYmVpbmcgY29uZmlndXJlZFxuICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRGV2IHNlcnZlciBwbHVnaW4gY29uZmlndXJlZCBmb3IgY2xpZW50IGVudmlyb25tZW50YCk7XG4gICAgICBcbiAgICAgIC8vIENvbmZpZ3VyZSB0aGUgUmVhY3Qgc2VydmVyIGZvciBjbGllbnQgZW52aXJvbm1lbnQgKHdvcmtlci1iYXNlZClcbiAgICAgIC8vIFRoaXMgdXNlcyB0aGUgZXhpc3RpbmcgY29uZmlndXJlUmVhY3RTZXJ2ZXIuY2xpZW50LmpzIGltcGxlbWVudGF0aW9uXG4gICAgICBobXJIYW5kbGVyID0gY29uZmlndXJlUmVhY3RTZXJ2ZXIoe1xuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXM6IHtcbiAgICAgICAgICBwcm9wc01hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHBhZ2VNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICByb290TWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgaHRtbE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHJvdXRlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgdXJsTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICB3b3JrZXJQYXRoczoge30sXG4gICAgICAgICAgc2VydmVyRW50cnk6IG51bGwsXG4gICAgICAgICAgY2xpZW50RW50cnk6IHt9LFxuICAgICAgICAgIGNsaWVudElucHV0czoge30sXG4gICAgICAgICAgc3RhdGljSW5wdXRzOiB7fSxcbiAgICAgICAgICBzZXJ2ZXJJbnB1dHM6IHt9LFxuICAgICAgICAgIC8vIHN0YXRpY01hbmlmZXN0IHJlbW92ZWQgZnJvbSBBdXRvRGlzY292ZXJlZEZpbGVzXG4gICAgICAgICAgc2VydmVyQWN0aW9uczoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJPcHRpb25zLFxuICAgICAgICBjb25maWdFbnY6IGNvbmZpZ0VudiEsXG4gICAgICAgIHNlcnZlck1hbmlmZXN0OiB7fSwgXG4gICAgICAgIHJlc29sdmVkQ29uZmlnOiBzZXJ2ZXIuY29uZmlnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVIb3RVcGRhdGUoeyBmaWxlLCBzZXJ2ZXIgfSkge1xuICAgICAgLy8gUHJldmVudCByZWN1cnNpdmUgSE1SIHVwZGF0ZXNcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdIbXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIHNlcnZlciBjb21wb25lbnQgZmlsZSBjaGFuZ2VzXG4gICAgICBjb25zdCBtb2R1bGVCYXNlID0gdXNlck9wdGlvbnMubW9kdWxlQmFzZSB8fCBcInNyY1wiO1xuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSB1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3Q7XG4gICAgICBcbiAgICAgIC8vIE5vcm1hbGl6ZSBwYXRocyBmb3IgY29tcGFyaXNvbiAoaGFuZGxlIGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlKVxuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBmaWxlLnJlcGxhY2UocHJvamVjdFJvb3QsICcnKS5yZXBsYWNlKC9eXFwvKy8sICcnKTtcbiAgICAgIGNvbnN0IGlzU291cmNlRmlsZSA9IG5vcm1hbGl6ZWRGaWxlLnN0YXJ0c1dpdGgobW9kdWxlQmFzZSArICcvJykgJiYgXG4gICAgICAgIChmaWxlLmVuZHNXaXRoKCcudHN4JykgfHwgZmlsZS5lbmRzV2l0aCgnLnRzJykgfHwgZmlsZS5lbmRzV2l0aCgnLmpzeCcpIHx8IGZpbGUuZW5kc1dpdGgoJy5qcycpKTtcbiAgICAgIFxuICAgICAgLy8gU2tpcCBjbGllbnQgY29tcG9uZW50cyDigJQgbGV0IEB2aXRlanMvcGx1Z2luLXJlYWN0IGhhbmRsZSB0aGVtIHdpdGggRmFzdCBSZWZyZXNoXG4gICAgICBjb25zdCBpc0NsaWVudEZpbGUgPSBpc1NvdXJjZUZpbGUgJiYgKCgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoZWFkID0gcmVhZEZpbGVTeW5jKGZpbGUsICd1dGYtOCcpLnNsaWNlKDAsIDIwMCk7XG4gICAgICAgICAgcmV0dXJuIC9eXFxzKltcIidddXNlIGNsaWVudFtcIiddLy50ZXN0KGhlYWQuc3BsaXQoJ1xcbicpWzBdKTtcbiAgICAgICAgfSBjYXRjaCB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgfSkoKTtcbiAgICAgIFxuICAgICAgY29uc3QgaXNTZXJ2ZXJGaWxlID0gaXNTb3VyY2VGaWxlICYmICFpc0NsaWVudEZpbGU7XG4gICAgICBcbiAgICAgIC8vIEFsd2F5cyBsb2cgZm9yIGRlYnVnZ2luZ1xuICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gaGFuZGxlSG90VXBkYXRlOiBmaWxlPSR7ZmlsZX0sIG5vcm1hbGl6ZWQ9JHtub3JtYWxpemVkRmlsZX0sIGlzU2VydmVyRmlsZT0ke2lzU2VydmVyRmlsZX0sIGlzQ2xpZW50RmlsZT0ke2lzQ2xpZW50RmlsZX0sIGhhc0hhbmRsZXI9JHshIWhtckhhbmRsZXJ9YCk7XG4gICAgICBcbiAgICAgIGlmIChpc1NlcnZlckZpbGUgJiYgaG1ySGFuZGxlcikge1xuICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBGaWxlIGNoYW5nZWQ6ICR7ZmlsZX0sIHNlbmRpbmcgSE1SIHVwZGF0ZS4uLmApO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENSSVRJQ0FMOiBTZW5kIEhNUl9VUERBVEUgbWVzc2FnZSB0byB3b3JrZXIgdG8gaW52YWxpZGF0ZSBtb2R1bGVzXG4gICAgICAgICAgLy8gVGhpcyBjbGVhcnMgY29tcG9uZW50IGNhY2hlcywgYnV0IE5vZGUuanMncyBFUyBtb2R1bGUgY2FjaGUgcGVyc2lzdHNcbiAgICAgICAgICBobXJIYW5kbGVyLnNlbmRIbXJVcGRhdGUoZmlsZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ1JJVElDQUw6IFNlbmQgY3VzdG9tIEhNUiBtZXNzYWdlIHRvIGNsaWVudCB2aWEgV2ViU29ja2V0XG4gICAgICAgICAgLy8gU2VydmVyIGNvbXBvbmVudHMgYXJlbid0IGluIHRoZSBjbGllbnQgYnVuZGxlLCBzbyB2aXRlOmJlZm9yZVVwZGF0ZSBkb2Vzbid0IGZpcmVcbiAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1hbnVhbGx5IG5vdGlmeSB0aGUgY2xpZW50IHRvIHJlZmV0Y2ggdGhlIFJTQyBzdHJlYW1cbiAgICAgICAgICBzZXJ2ZXIud3Muc2VuZCh7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICAgIGV2ZW50OiAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1jb21wb25lbnQtdXBkYXRlJyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgZmlsZTogbm9ybWFsaXplZEZpbGUsXG4gICAgICAgICAgICAgIHBhdGg6IGZpbGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENSSVRJQ0FMOiBOb2RlLmpzIGNhY2hlcyBFUyBtb2R1bGVzLCBzbyB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIHdvcmtlclxuICAgICAgICAgIC8vIHRvIGNsZWFyIHRoZSBtb2R1bGUgY2FjaGUuIERlYm91bmNlIHJlc3RhcnRzIHRvIHByZXZlbnQgcmVjdXJzaW9uLlxuICAgICAgICAgIGlmIChobXJIYW5kbGVyLnJlc3RhcnQpIHtcbiAgICAgICAgICAgIC8vIENsZWFyIGFueSBwZW5kaW5nIHJlc3RhcnRcbiAgICAgICAgICAgIGlmIChyZXN0YXJ0VGltZW91dCkge1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVzdGFydFRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBEZWJvdW5jZSB3b3JrZXIgcmVzdGFydCB0byBwcmV2ZW50IHJlY3Vyc2lvblxuICAgICAgICAgICAgLy8gV2FpdCA1MDBtcyBhZnRlciB0aGUgbGFzdCBmaWxlIGNoYW5nZSBiZWZvcmUgcmVzdGFydGluZ1xuICAgICAgICAgICAgcmVzdGFydFRpbWVvdXQgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBSZXN0YXJ0aW5nIHdvcmtlciB0byBjbGVhciBOb2RlLmpzIG1vZHVsZSBjYWNoZS4uLmApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGhtckhhbmRsZXIhLnJlc3RhcnQhKCk7XG4gICAgICAgICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gV29ya2VyIHJlc3RhcnRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5lcnJvcihgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRmFpbGVkIHRvIHJlc3RhcnQgd29ya2VyOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlc3RhcnRUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBmbGFnIGFmdGVyIHJlc3RhcnQgY29tcGxldGVzXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA1MDApOyAvLyA1MDBtcyBkZWJvdW5jZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyByZXN0YXJ0IGZ1bmN0aW9uIGF2YWlsYWJsZSB5ZXQgLSB3b3JrZXIgaGFzbid0IGJlZW4gY3JlYXRlZFxuICAgICAgICAgICAgLy8gVGhpcyBpcyBleHBlY3RlZCBpZiBoYW5kbGVIb3RVcGRhdGUgZmlyZXMgYmVmb3JlIHRoZSBmaXJzdCByZXF1ZXN0XG4gICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci53YXJuKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBSZXN0YXJ0IGZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgeWV0IC0gd29ya2VyIHdpbGwgYmUgY3JlYXRlZCBvbiBuZXh0IHJlcXVlc3RgKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmVycm9yKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBFcnJvciBoYW5kbGluZyBITVIgdXBkYXRlOiAke2Vycm9yfWApO1xuICAgICAgICAgIGlzUHJvY2Vzc2luZ0htciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzU2VydmVyRmlsZSAmJiAhaG1ySGFuZGxlcikge1xuICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci53YXJuKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBTZXJ2ZXIgZmlsZSBjaGFuZ2VkIGJ1dCBITVIgaGFuZGxlciBub3QgYXZhaWxhYmxlIHlldDogJHtmaWxlfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIHRvIGFsbG93IG90aGVyIHBsdWdpbnMgdG8gaGFuZGxlIHRoZSB1cGRhdGVcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBV2EsTUFBQSx3QkFBQSxHQUF5QyxTQUFTLCtCQUFBLENBQWdDLE9BQVMsRUFBQTtBQUN0RyxFQUFBLElBQUksV0FBVyxJQUFNLEVBQUE7QUFDbkIsSUFBTSxNQUFBLElBQUksTUFBTSxxQkFBcUIsQ0FBQTtBQUFBO0FBR3ZDLEVBQUEsSUFBSSxRQUFRLE9BQVMsRUFBQTtBQUdyQixFQUFNLE1BQUEsZUFBQSxHQUFrQixlQUFlLE9BQU8sQ0FBQTtBQUM5QyxFQUFJLElBQUEsZUFBQSxDQUFnQixTQUFTLE9BQVMsRUFBQTtBQUNwQyxJQUFJLElBQUEsZUFBQSxDQUFnQixTQUFTLElBQU0sRUFBQTtBQUNqQyxNQUFBLE1BQU0sZUFBZ0IsQ0FBQSxLQUFBO0FBQUE7QUFFeEIsSUFBTSxNQUFBLElBQUksTUFBTSwyQkFBMkIsQ0FBQTtBQUFBO0FBRTdDLEVBQUEsTUFBTSxjQUFjLGVBQWdCLENBQUEsV0FBQTtBQUdwQyxFQUFJLElBQUEsU0FBQTtBQUNKLEVBQUEsSUFBSSxVQUF5SCxHQUFBLElBQUE7QUFDN0gsRUFBQSxJQUFJLGVBQWtCLEdBQUEsS0FBQTtBQUN0QixFQUFBLElBQUksY0FBd0MsR0FBQSxJQUFBO0FBRTVDLEVBQU8sT0FBQTtBQUFBLElBQ0wsSUFBTSxFQUFBLDRDQUFBO0FBQUEsSUFDTixLQUFPLEVBQUEsT0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJUCxNQUFBLENBQU8sU0FBUyxhQUFlLEVBQUE7QUFDN0IsTUFBWSxTQUFBLEdBQUEsYUFBQTtBQUFB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
125
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLmNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHR5cGUgeyBWaXRlUGx1Z2luRm4gfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuY2xpZW50LmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlnRW52IH0gZnJvbSBcInZpdGVcIjtcblxuXG4vKipcbiAqIERldiBzZXJ2ZXIgcGx1Z2luIGZvciBjbGllbnQgZW52aXJvbm1lbnQuXG4gKiBVc2VzIGNvbmZpZ3VyZVNlcnZlciBob29rIGZvciBwcm9wZXIgZGV2IHNlcnZlciBzZXR1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZpdGVQbHVnaW5SZWFjdERldlNlcnZlcjogVml0ZVBsdWdpbkZuID0gZnVuY3Rpb24gX3ZpdGVQbHVnaW5SZWFjdFNlcnZlckRldkNsaWVudChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICB9XG4gIFxuICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlT3B0aW9ucyhvcHRpb25zKTtcbiAgaWYgKHJlc29sdmVkT3B0aW9ucy50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICBpZiAocmVzb2x2ZWRPcHRpb25zLmVycm9yICE9IG51bGwpIHtcbiAgICAgIHRocm93IHJlc29sdmVkT3B0aW9ucy5lcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlc29sdmUgb3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyT3B0aW9ucyA9IHJlc29sdmVkT3B0aW9ucy51c2VyT3B0aW9ucztcbiAgXG5cbiAgbGV0IGNvbmZpZ0VudjogQ29uZmlnRW52IHwgdW5kZWZpbmVkO1xuICBsZXQgaG1ySGFuZGxlcjogeyByZXN0YXJ0OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsOyBzZW5kSG1yVXBkYXRlOiAoZmlsZTogc3RyaW5nLCByb3V0ZXM/OiBzdHJpbmdbXSkgPT4gdm9pZCB9IHwgbnVsbCA9IG51bGw7XG4gIGxldCBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTsgLy8gUHJldmVudCByZWN1cnNpdmUgSE1SIHVwZGF0ZXNcbiAgbGV0IHJlc3RhcnRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsOyAvLyBEZWJvdW5jZSB3b3JrZXIgcmVzdGFydHNcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwidml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOmRldi1zZXJ2ZXItY2xpZW50XCIsXG4gICAgYXBwbHk6IFwic2VydmVcIiwgLy8gT25seSBhcHBseSBpbiBkZXYgc2VydmVyIG1vZGVcbiAgICAvLyBObyBhcHBseVRvRW52aXJvbm1lbnQg4oCUIGhvdFVwZGF0ZSBuZWVkcyB0byBydW4gZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICAvLyB0aGF0IHNob3VsZCB3b3JrIHJlZ2FyZGxlc3Mgb2YgZW52aXJvbm1lbnQgZmlsdGVyaW5nXG4gICAgY29uZmlnKF9jb25maWcsIHZpdGVDb25maWdFbnYpIHtcbiAgICAgIGNvbmZpZ0VudiA9IHZpdGVDb25maWdFbnY7XG4gIFxuICAgIH0sXG4gICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikgeyAgICAgIFxuICAgICAgLy8gTG9nIHRoYXQgcGx1Z2luIGlzIGJlaW5nIGNvbmZpZ3VyZWRcbiAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmluZm8oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIERldiBzZXJ2ZXIgcGx1Z2luIGNvbmZpZ3VyZWQgZm9yIGNsaWVudCBlbnZpcm9ubWVudGApO1xuICAgICAgXG4gICAgICAvLyBDb25maWd1cmUgdGhlIFJlYWN0IHNlcnZlciBmb3IgY2xpZW50IGVudmlyb25tZW50ICh3b3JrZXItYmFzZWQpXG4gICAgICAvLyBUaGlzIHVzZXMgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyZVJlYWN0U2VydmVyLmNsaWVudC5qcyBpbXBsZW1lbnRhdGlvblxuICAgICAgaG1ySGFuZGxlciA9IGNvbmZpZ3VyZVJlYWN0U2VydmVyKHtcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBhdXRvRGlzY292ZXJlZEZpbGVzOiB7XG4gICAgICAgICAgcHJvcHNNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICBwYWdlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgcm9vdE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIGh0bWxNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICByb3V0ZU1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHVybE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgd29ya2VyUGF0aHM6IHt9LFxuICAgICAgICAgIHNlcnZlckVudHJ5OiBudWxsLFxuICAgICAgICAgIGNsaWVudEVudHJ5OiB7fSxcbiAgICAgICAgICBjbGllbnRJbnB1dHM6IHt9LFxuICAgICAgICAgIHN0YXRpY0lucHV0czoge30sXG4gICAgICAgICAgc2VydmVySW5wdXRzOiB7fSxcbiAgICAgICAgICAvLyBzdGF0aWNNYW5pZmVzdCByZW1vdmVkIGZyb20gQXV0b0Rpc2NvdmVyZWRGaWxlc1xuICAgICAgICAgIHNlcnZlckFjdGlvbnM6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB1c2VyT3B0aW9ucyxcbiAgICAgICAgY29uZmlnRW52OiBjb25maWdFbnYhLFxuICAgICAgICBzZXJ2ZXJNYW5pZmVzdDoge30sIFxuICAgICAgICByZXNvbHZlZENvbmZpZzogc2VydmVyLmNvbmZpZyxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaG90VXBkYXRlKGN0eDogYW55KSB7XG4gICAgICBjb25zdCB7IGZpbGUsIHNlcnZlciB9ID0gY3R4O1xuICAgICAgY29uc3QgZW52TmFtZSA9IGN0eC5lbnZpcm9ubWVudD8ubmFtZSA/PyAndW5rbm93bic7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgcnVuIHdvcmtlciBpbnZhbGlkYXRpb24gZnJvbSB0aGUgY2xpZW50IGVudmlyb25tZW50IChvbmNlIHBlciBjaGFuZ2UpXG4gICAgICBpZiAoZW52TmFtZSAhPT0gJ2NsaWVudCcpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gUHJldmVudCByZWN1cnNpdmUgSE1SIHVwZGF0ZXNcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdIbXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIHNlcnZlciBjb21wb25lbnQgZmlsZSBjaGFuZ2VzXG4gICAgICBjb25zdCBtb2R1bGVCYXNlID0gdXNlck9wdGlvbnMubW9kdWxlQmFzZSB8fCBcInNyY1wiO1xuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSB1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3Q7XG4gICAgICBcbiAgICAgIC8vIE5vcm1hbGl6ZSBwYXRocyBmb3IgY29tcGFyaXNvbiAoaGFuZGxlIGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlKVxuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBmaWxlLnJlcGxhY2UocHJvamVjdFJvb3QsICcnKS5yZXBsYWNlKC9eXFwvKy8sICcnKTtcbiAgICAgIGNvbnN0IGlzU291cmNlRmlsZSA9IG5vcm1hbGl6ZWRGaWxlLnN0YXJ0c1dpdGgobW9kdWxlQmFzZSArICcvJykgJiYgXG4gICAgICAgIChmaWxlLmVuZHNXaXRoKCcudHN4JykgfHwgZmlsZS5lbmRzV2l0aCgnLnRzJykgfHwgZmlsZS5lbmRzV2l0aCgnLmpzeCcpIHx8IGZpbGUuZW5kc1dpdGgoJy5qcycpKTtcbiAgICAgIFxuICAgICAgLy8gU2tpcCBjbGllbnQgY29tcG9uZW50cyDigJQgbGV0IEB2aXRlanMvcGx1Z2luLXJlYWN0IGhhbmRsZSB0aGVtIHdpdGggRmFzdCBSZWZyZXNoXG4gICAgICBjb25zdCBpc0NsaWVudEZpbGUgPSBpc1NvdXJjZUZpbGUgJiYgKCgpID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgZmlsZW5hbWUgcGF0dGVybiAoLmNsaWVudC50c3gsIGV0Yy4pIOKAlCBtYXRjaGVzIGlzQ2xpZW50Q29tcG9uZW50QnlOYW1lXG4gICAgICAgIGlmICgvXFwuY2xpZW50XFwuKGpzfHRzfGpzeHx0c3gpJC8udGVzdChmaWxlKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaGVhZCA9IHJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKS5zbGljZSgwLCAyMDApO1xuICAgICAgICAgIHJldHVybiAvXlxccypbXCInXXVzZSBjbGllbnRbXCInXS8udGVzdChoZWFkLnNwbGl0KCdcXG4nKVswXSk7XG4gICAgICAgIH0gY2F0Y2ggeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIH0pKCk7XG4gICAgICBcbiAgICAgIGNvbnN0IGlzU2VydmVyRmlsZSA9IGlzU291cmNlRmlsZSAmJiAhaXNDbGllbnRGaWxlO1xuICAgICAgXG4gICAgICBpZiAoaXNTZXJ2ZXJGaWxlICYmIGhtckhhbmRsZXIpIHtcbiAgICAgICAgaXNQcm9jZXNzaW5nSG1yID0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRmlsZSBjaGFuZ2VkOiAke2ZpbGV9LCBzZW5kaW5nIEhNUiB1cGRhdGUuLi5gKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDUklUSUNBTDogU2VuZCBITVJfVVBEQVRFIG1lc3NhZ2UgdG8gd29ya2VyIHRvIGludmFsaWRhdGUgbW9kdWxlc1xuICAgICAgICAgIC8vIFRoaXMgY2xlYXJzIGNvbXBvbmVudCBjYWNoZXMsIGJ1dCBOb2RlLmpzJ3MgRVMgbW9kdWxlIGNhY2hlIHBlcnNpc3RzXG4gICAgICAgICAgaG1ySGFuZGxlci5zZW5kSG1yVXBkYXRlKGZpbGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIE5PVEU6IFRoZSBXUyBldmVudCB0byBub3RpZnkgdGhlIGNsaWVudCBpcyBzZW50IGJ5IHRoZSBob3RVcGRhdGUgaG9va1xuICAgICAgICAgIC8vIGluIHBsdWdpbi5zZXJ2ZXIudHMg4oCUIGRvbid0IGR1cGxpY2F0ZSBpdCBoZXJlLlxuICAgICAgICAgIFxuICAgICAgICAgIC8vIENSSVRJQ0FMOiBOb2RlLmpzIGNhY2hlcyBFUyBtb2R1bGVzLCBzbyB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIHdvcmtlclxuICAgICAgICAgIC8vIHRvIGNsZWFyIHRoZSBtb2R1bGUgY2FjaGUuIERlYm91bmNlIHJlc3RhcnRzIHRvIHByZXZlbnQgcmVjdXJzaW9uLlxuICAgICAgICAgIGlmIChobXJIYW5kbGVyLnJlc3RhcnQpIHtcbiAgICAgICAgICAgIC8vIENsZWFyIGFueSBwZW5kaW5nIHJlc3RhcnRcbiAgICAgICAgICAgIGlmIChyZXN0YXJ0VGltZW91dCkge1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVzdGFydFRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBEZWJvdW5jZSB3b3JrZXIgcmVzdGFydCB0byBwcmV2ZW50IHJlY3Vyc2lvblxuICAgICAgICAgICAgLy8gV2FpdCA1MDBtcyBhZnRlciB0aGUgbGFzdCBmaWxlIGNoYW5nZSBiZWZvcmUgcmVzdGFydGluZ1xuICAgICAgICAgICAgcmVzdGFydFRpbWVvdXQgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBSZXN0YXJ0aW5nIHdvcmtlciB0byBjbGVhciBOb2RlLmpzIG1vZHVsZSBjYWNoZS4uLmApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGhtckhhbmRsZXIhLnJlc3RhcnQhKCk7XG4gICAgICAgICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gV29ya2VyIHJlc3RhcnRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5lcnJvcihgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRmFpbGVkIHRvIHJlc3RhcnQgd29ya2VyOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlc3RhcnRUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBmbGFnIGFmdGVyIHJlc3RhcnQgY29tcGxldGVzXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA1MDApOyAvLyA1MDBtcyBkZWJvdW5jZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyByZXN0YXJ0IGZ1bmN0aW9uIGF2YWlsYWJsZSB5ZXQgLSB3b3JrZXIgaGFzbid0IGJlZW4gY3JlYXRlZFxuICAgICAgICAgICAgLy8gVGhpcyBpcyBleHBlY3RlZCBpZiBob3RVcGRhdGUgZmlyZXMgYmVmb3JlIHRoZSBmaXJzdCByZXF1ZXN0XG4gICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci53YXJuKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBSZXN0YXJ0IGZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgeWV0IC0gd29ya2VyIHdpbGwgYmUgY3JlYXRlZCBvbiBuZXh0IHJlcXVlc3RgKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmVycm9yKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBFcnJvciBoYW5kbGluZyBITVIgdXBkYXRlOiAke2Vycm9yfWApO1xuICAgICAgICAgIGlzUHJvY2Vzc2luZ0htciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzU2VydmVyRmlsZSAmJiAhaG1ySGFuZGxlcikge1xuICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci53YXJuKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBTZXJ2ZXIgZmlsZSBjaGFuZ2VkIGJ1dCBITVIgaGFuZGxlciBub3QgYXZhaWxhYmxlIHlldDogJHtmaWxlfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBEb24ndCBzdXBwcmVzcyDigJQgcGx1Z2luLnNlcnZlci50cyBob3RVcGRhdGUgaGFuZGxlcyBwYWdlIHJlbG9hZCBwcmV2ZW50aW9uXG4gICAgfSxcbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBV2EsTUFBQSx3QkFBQSxHQUF5QyxTQUFTLCtCQUFBLENBQWdDLE9BQVMsRUFBQTtBQUN0RyxFQUFBLElBQUksV0FBVyxJQUFNLEVBQUE7QUFDbkIsSUFBTSxNQUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/plugin.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAA4C,SAAS,mBAAmB,KAAG,MAAM,EA6LrH,CAAC"}
1
+ {"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/plugin.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAA4C,SAAS,mBAAmB,KAAG,MAAM,EA8IrH,CAAC"}
@@ -35,6 +35,7 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevServer(option
35
35
  if (!isSourceFile) return;
36
36
  if (envName === "client") {
37
37
  const isClient = (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js")) && (() => {
38
+ if (/\.client\.(js|ts|jsx|tsx)$/.test(file)) return true;
38
39
  try {
39
40
  const head = readFileSync(file, "utf-8").slice(0, 200);
40
41
  return /^\s*["']use client["']/.test(head.split("\n")[0]);
@@ -60,41 +61,6 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevServer(option
60
61
  }
61
62
  }
62
63
  return [];
63
- },
64
- handleHotUpdate({ file, server }) {
65
- const moduleBase = userOptions.moduleBase || "src";
66
- const projectRoot = userOptions.projectRoot || server.config.root;
67
- const normalizedFile = file.replace(projectRoot, "").replace(/^\/+/, "");
68
- const isSourceFile = normalizedFile.startsWith(moduleBase + "/") && (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js"));
69
- const isClientFile = isSourceFile && (() => {
70
- try {
71
- const head = readFileSync(file, "utf-8").slice(0, 200);
72
- return /^\s*["']use client["']/.test(head.split("\n")[0]);
73
- } catch {
74
- return false;
75
- }
76
- })();
77
- if (isSourceFile && !isClientFile) {
78
- server.config.logger.info(`[vite-plugin-react-server] File changed (RSC refetch): ${normalizedFile}`);
79
- server.ws.send({
80
- type: "custom",
81
- event: "vite-plugin-react-server:server-component-update",
82
- data: {
83
- file: normalizedFile,
84
- path: file
85
- }
86
- });
87
- const mod = server.environments["server"]?.moduleGraph?.getModulesByFile(file);
88
- if (mod) {
89
- for (const m of mod) {
90
- server.environments["server"]?.moduleGraph?.invalidateModule(m);
91
- }
92
- }
93
- return [];
94
- }
95
- if (isClientFile) {
96
- return [];
97
- }
98
64
  }
99
65
  };
100
66
  const serverPlugin = {
@@ -155,4 +121,4 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevServer(option
155
121
  };
156
122
 
157
123
  export { vitePluginReactDevServer };
158
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNlcnZlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0cmVhbVBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuc2VydmVyLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBWaXRlRGV2U2VydmVyIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5cbi8qKlxuICogRGV2IHNlcnZlciBwbHVnaW4gZm9yIHNlcnZlciBlbnZpcm9ubWVudC5cbiAqIFJldHVybnMgdHdvIHBsdWdpbnM6IG9uZSBmb3IgSE1SIGhhbmRsaW5nIChhbGwgZW52aXJvbm1lbnRzKSBhbmQgb25lIGZvciBzZXJ2ZXIgY29uZmlnLlxuICovXG5leHBvcnQgY29uc3Qgdml0ZVBsdWdpblJlYWN0RGV2U2VydmVyID0gZnVuY3Rpb24gX3ZpdGVQbHVnaW5SZWFjdFNlcnZlckRldlNlcnZlcihvcHRpb25zOiBTdHJlYW1QbHVnaW5PcHRpb25zKTogUGx1Z2luW10ge1xuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucyBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVPcHRpb25zKG9wdGlvbnMpO1xuICBpZiAocmVzb2x2ZWRPcHRpb25zLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgIGlmIChyZXNvbHZlZE9wdGlvbnMuZXJyb3IgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgcmVzb2x2ZWRPcHRpb25zLmVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVzb2x2ZSBvcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IHVzZXJPcHRpb25zID0gcmVzb2x2ZWRPcHRpb25zLnVzZXJPcHRpb25zO1xuXG4gIC8vIFNlcGFyYXRlIHBsdWdpbiBmb3IgSE1SIGhhbmRsaW5nIChtdXN0IGFwcGx5IHRvIGFsbCBlbnZpcm9ubWVudHMpXG4gIGNvbnN0IGhtclBsdWdpbiA9IHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpzZXJ2ZXItaG1yXCIsXG4gICAgYXBwbHk6IFwic2VydmVcIiBhcyBjb25zdCxcbiAgICAvLyBTZXJ2ZXItbGV2ZWwgaGFuZGxlSG90VXBkYXRlIOKAlCBzZW5kcyBjdXN0b20gV1MgZXZlbnQgdG8gY2xpZW50XG4gICAgLy8gVml0ZSA2IEVudmlyb25tZW50IEFQSTogaG90VXBkYXRlIHJ1bnMgcGVyLWVudmlyb25tZW50LlxuICAgIC8vIFByZXZlbnQgc2VydmVyL3NzciBlbnZpcm9ubWVudHMgZnJvbSB0cmlnZ2VyaW5nIHBhZ2UgcmVsb2FkIGZvciBjbGllbnQgY29tcG9uZW50cy5cbiAgICBob3RVcGRhdGUoY3R4OiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgZmlsZSwgc2VydmVyIH0gPSBjdHg7XG4gICAgICBjb25zdCBlbnZOYW1lID0gY3R4LmVudmlyb25tZW50Py5uYW1lID8/ICd1bmtub3duJztcbiAgICAgIFxuICAgICAgY29uc3QgbW9kdWxlQmFzZSA9IHVzZXJPcHRpb25zLm1vZHVsZUJhc2UgfHwgXCJzcmNcIjtcbiAgICAgIGNvbnN0IHByb2plY3RSb290ID0gdXNlck9wdGlvbnMucHJvamVjdFJvb3QgfHwgc2VydmVyPy5jb25maWc/LnJvb3QgfHwgJyc7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZShwcm9qZWN0Um9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgY29uc3QgaXNTb3VyY2VGaWxlID0gbm9ybWFsaXplZEZpbGUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgJy8nKTtcbiAgICAgIFxuICAgICAgaWYgKCFpc1NvdXJjZUZpbGUpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gQ2xpZW50IGVudmlyb25tZW50OiBsZXQgVml0ZS9Adml0ZWpzL3BsdWdpbi1yZWFjdCBoYW5kbGUgaXRcbiAgICAgIGlmIChlbnZOYW1lID09PSAnY2xpZW50Jykge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgY2xpZW50IGNvbXBvbmVudCDigJQgbGV0IEZhc3QgUmVmcmVzaCBoYW5kbGUgaXRcbiAgICAgICAgY29uc3QgaXNDbGllbnQgPSAoZmlsZS5lbmRzV2l0aCgnLnRzeCcpIHx8IGZpbGUuZW5kc1dpdGgoJy50cycpIHx8IGZpbGUuZW5kc1dpdGgoJy5qc3gnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanMnKSkgJiYgKCgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaGVhZCA9IHJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKS5zbGljZSgwLCAyMDApO1xuICAgICAgICAgICAgcmV0dXJuIC9eXFxzKltcIidddXNlIGNsaWVudFtcIiddLy50ZXN0KGhlYWQuc3BsaXQoJ1xcbicpWzBdKTtcbiAgICAgICAgICB9IGNhdGNoIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNDbGllbnQpIHJldHVybjsgLy8gTGV0IEZhc3QgUmVmcmVzaCBoYW5kbGUgY2xpZW50IGNvbXBvbmVudHNcbiAgICAgICAgXG4gICAgICAgIC8vIFNlcnZlciBjb21wb25lbnQgY2hhbmdlZCDigJQgc2VuZCBSU0MgcmVmZXRjaCBldmVudCB0byBjbGllbnRcbiAgICAgICAgLy8gT25seSBkbyB0aGlzIG9uY2UgKGZyb20gY2xpZW50IGVudikgdG8gYXZvaWQgZHVwbGljYXRlIGV2ZW50c1xuICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBGaWxlIGNoYW5nZWQgKFJTQyByZWZldGNoKTogJHtub3JtYWxpemVkRmlsZX1gKTtcbiAgICAgICAgc2VydmVyLndzLnNlbmQoe1xuICAgICAgICAgIHR5cGU6ICdjdXN0b20nLFxuICAgICAgICAgIGV2ZW50OiAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1jb21wb25lbnQtdXBkYXRlJyxcbiAgICAgICAgICBkYXRhOiB7IGZpbGU6IG5vcm1hbGl6ZWRGaWxlLCBwYXRoOiBmaWxlIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIFtdOyAvLyBEb24ndCB0cmlnZ2VyIGNsaWVudC1zaWRlIHBhZ2UgcmVsb2FkXG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNlcnZlci9TU1IgZW52aXJvbm1lbnRzOiBzdXBwcmVzcyBwYWdlIHJlbG9hZCBmb3IgYWxsIHNvdXJjZSBmaWxlc1xuICAgICAgLy8gU2VydmVyIGNvbXBvbmVudHMgYXJlIGhhbmRsZWQgYnkgdGhlIFJTQyByZWZldGNoIGV2ZW50IHNlbnQgYWJvdmVcbiAgICAgIC8vIEludmFsaWRhdGUgdGhlIHNlcnZlciBtb2R1bGUgc28gbmV4dCBSU0MgcmVxdWVzdCBnZXRzIGZyZXNoIGNvbnRlbnRcbiAgICAgIGlmIChlbnZOYW1lID09PSAnc2VydmVyJykge1xuICAgICAgICBjb25zdCBtb2QgPSBjdHguZW52aXJvbm1lbnQ/Lm1vZHVsZUdyYXBoPy5nZXRNb2R1bGVzQnlGaWxlKGZpbGUpO1xuICAgICAgICBpZiAobW9kKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1vZCkge1xuICAgICAgICAgICAgY3R4LmVudmlyb25tZW50Lm1vZHVsZUdyYXBoLmludmFsaWRhdGVNb2R1bGUobSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICBoYW5kbGVIb3RVcGRhdGUoeyBmaWxlLCBzZXJ2ZXIgfTogeyBmaWxlOiBzdHJpbmc7IHNlcnZlcjogVml0ZURldlNlcnZlciB9KSB7XG4gICAgICBjb25zdCBtb2R1bGVCYXNlID0gdXNlck9wdGlvbnMubW9kdWxlQmFzZSB8fCBcInNyY1wiO1xuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSB1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3Q7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZShwcm9qZWN0Um9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgY29uc3QgaXNTb3VyY2VGaWxlID0gbm9ybWFsaXplZEZpbGUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgJy8nKSAmJiBcbiAgICAgICAgKGZpbGUuZW5kc1dpdGgoJy50c3gnKSB8fCBmaWxlLmVuZHNXaXRoKCcudHMnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanN4JykgfHwgZmlsZS5lbmRzV2l0aCgnLmpzJykpO1xuICAgICAgXG4gICAgICAvLyBTa2lwIGNsaWVudCBjb21wb25lbnRzIOKAlCBsZXQgQHZpdGVqcy9wbHVnaW4tcmVhY3QgaGFuZGxlIHRoZW1cbiAgICAgIC8vIHdpdGggRmFzdCBSZWZyZXNoIChwcmVzZXJ2ZXMgY29tcG9uZW50LWxldmVsIHN0YXRlKS5cbiAgICAgIGNvbnN0IGlzQ2xpZW50RmlsZSA9IGlzU291cmNlRmlsZSAmJiAoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSByZWFkRmlsZVN5bmMoZmlsZSwgJ3V0Zi04Jykuc2xpY2UoMCwgMjAwKTtcbiAgICAgICAgICByZXR1cm4gL15cXHMqW1wiJ111c2UgY2xpZW50W1wiJ10vLnRlc3QoaGVhZC5zcGxpdCgnXFxuJylbMF0pO1xuICAgICAgICB9IGNhdGNoIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICB9KSgpO1xuICAgICAgXG4gICAgICBpZiAoaXNTb3VyY2VGaWxlICYmICFpc0NsaWVudEZpbGUpIHtcbiAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRmlsZSBjaGFuZ2VkIChSU0MgcmVmZXRjaCk6ICR7bm9ybWFsaXplZEZpbGV9YCk7XG4gICAgICAgIFxuICAgICAgICAvLyBTZW5kIGN1c3RvbSBITVIgZXZlbnQgc28gY2xpZW50IGNhbiByZWZldGNoIFJTQyBzdHJlYW1cbiAgICAgICAgc2VydmVyLndzLnNlbmQoe1xuICAgICAgICAgIHR5cGU6ICdjdXN0b20nLFxuICAgICAgICAgIGV2ZW50OiAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1jb21wb25lbnQtdXBkYXRlJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmaWxlOiBub3JtYWxpemVkRmlsZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBzZXJ2ZXIgbW9kdWxlIHNvIG5leHQgcmVxdWVzdCBnZXRzIGZyZXNoIGNvbnRlbnRcbiAgICAgICAgY29uc3QgbW9kID0gc2VydmVyLmVudmlyb25tZW50c1snc2VydmVyJ10/Lm1vZHVsZUdyYXBoPy5nZXRNb2R1bGVzQnlGaWxlKGZpbGUpO1xuICAgICAgICBpZiAobW9kKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1vZCkge1xuICAgICAgICAgICAgc2VydmVyLmVudmlyb25tZW50c1snc2VydmVyJ10/Lm1vZHVsZUdyYXBoPy5pbnZhbGlkYXRlTW9kdWxlKG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IHRvIHByZXZlbnQgVml0ZSdzIGRlZmF1bHQgZnVsbC1wYWdlIHJlbG9hZFxuICAgICAgICAvLyBUaGUgY2xpZW50IHdpbGwgcmVmZXRjaCB0aGUgUlNDIHN0cmVhbSB2aWEgdGhlIGN1c3RvbSBldmVudFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChpc0NsaWVudEZpbGUpIHtcbiAgICAgICAgLy8gQ2xpZW50IGNvbXBvbmVudHMgYXJlIGhhbmRsZWQgYnkgQHZpdGVqcy9wbHVnaW4tcmVhY3QgKEZhc3QgUmVmcmVzaClcbiAgICAgICAgLy8gb3IgVml0ZSdzIGNsaWVudC1zaWRlIEhNUi4gUmV0dXJuIGVtcHR5IHRvIHByZXZlbnQgdGhlIHNlcnZlclxuICAgICAgICAvLyBlbnZpcm9ubWVudCBmcm9tIHRyaWdnZXJpbmcgYSBmdWxsIHBhZ2UgcmVsb2FkLlxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBzZXJ2ZXJQbHVnaW4gPSB7XG4gICAgbmFtZTogXCJ2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6ZGV2LXNlcnZlci1zZXJ2ZXJcIixcbiAgICBhcHBseTogXCJzZXJ2ZVwiIGFzIGNvbnN0LFxuYXBwbHlUb0Vudmlyb25tZW50KHBhcnRpYWxFbnZpcm9ubWVudDogYW55KSB7XG4gICAgICByZXR1cm4gcGFydGlhbEVudmlyb25tZW50Py5jb25zdW1lciA9PT0gJ3NlcnZlcic7XG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyOiBWaXRlRGV2U2VydmVyKSB7XG4gICAgICAvLyBMb2cgdGhhdCBwbHVnaW4gaXMgYmVpbmcgY29uZmlndXJlZFxuICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRGV2IHNlcnZlciBwbHVnaW4gY29uZmlndXJlZCBmb3Igc2VydmVyIGVudmlyb25tZW50IChyZWFjdC1zZXJ2ZXIgY29uZGl0aW9uKWApO1xuICAgICAgXG4gICAgICAvLyBDb25maWd1cmUgdGhlIFJlYWN0IHNlcnZlciBmb3Igc2VydmVyIGVudmlyb25tZW50IChkaXJlY3QgUlNDIHByb2Nlc3NpbmcpXG4gICAgICAvLyBUaGlzIHVzZXMgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyZVJlYWN0U2VydmVyLnNlcnZlci5qcyBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uZmlndXJlUmVhY3RTZXJ2ZXIoe1xuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXM6IHtcbiAgICAgICAgICBwcm9wc01hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHBhZ2VNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICByb290TWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgaHRtbE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHJvdXRlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgdXJsTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICB3b3JrZXJQYXRoczoge30sXG4gICAgICAgICAgc2VydmVyRW50cnk6IG51bGwsXG4gICAgICAgICAgY2xpZW50RW50cnk6IHt9LFxuICAgICAgICAgIGNsaWVudElucHV0czoge30sXG4gICAgICAgICAgc3RhdGljSW5wdXRzOiB7fSxcbiAgICAgICAgICBzZXJ2ZXJJbnB1dHM6IHt9LFxuICAgICAgICAgIC8vIHN0YXRpY01hbmlmZXN0IHJlbW92ZWQgZnJvbSBBdXRvRGlzY292ZXJlZEZpbGVzXG4gICAgICAgICAgc2VydmVyQWN0aW9uczoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJPcHRpb25zLFxuICAgICAgICBzZXJ2ZXJNYW5pZmVzdDoge30sXG4gICAgICAgIHJlc29sdmVkQ29uZmlnOiBzZXJ2ZXIuY29uZmlnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICAvLyBGaXggQ0pTIG5hbWVkIGltcG9ydHMgaW4gc2VydmVyIGVudmlyb25tZW50LlxuICAvLyBWaXRlJ3MgZXNidWlsZCBKU1ggdHJhbnNmb3JtIChhbmQgQHZpdGVqcy9wbHVnaW4tcmVhY3QgaWYgcHJlc2VudCkgZ2VuZXJhdGVzXG4gIC8vIG5hbWVkIGltcG9ydHMgbGlrZSBgaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCJgLiBJbiB0aGUgc2VydmVyIGVudmlyb25tZW50LFxuICAvLyByZWFjdCdzIHJlYWN0LXNlcnZlciBleHBvcnQgaXMgQ0pTLW9ubHksIGFuZCBOb2RlJ3MgRVNNIGludGVyb3AgZG9lc24ndCBzdXBwb3J0XG4gIC8vIG5hbWVkIGV4cG9ydHMgZnJvbSBDSlMuIFRoaXMgcG9zdC10cmFuc2Zvcm0gcmV3cml0ZXMgdGhlbS5cbiAgY29uc3QgY2pzRml4UGx1Z2luOiBQbHVnaW4gPSB7XG4gICAgbmFtZTogXCJ2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6c2VydmVyLWNqcy1maXhcIixcbiAgICBhcHBseTogXCJzZXJ2ZVwiIGFzIGNvbnN0LFxuICAgIGVuZm9yY2U6IFwicG9zdFwiIGFzIGNvbnN0LFxuICAgIGFwcGx5VG9FbnZpcm9ubWVudChlbnY6IGFueSkge1xuICAgICAgcmV0dXJuIGVudj8ubmFtZSA9PT0gJ3NlcnZlcic7XG4gICAgfSxcbiAgICB0cmFuc2Zvcm0oY29kZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgICBpZiAoaWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcycpKSByZXR1cm47XG4gICAgICBpZiAoIWlkLm1hdGNoKC9cXC5banRdc3g/JC8pKSByZXR1cm47XG4gICAgICBcbiAgICAgIGNvbnN0IG5hbWVkSW1wb3J0UmUgPSAvaW1wb3J0XFxzKlxceyhbXn1dKylcXH1cXHMqZnJvbVxccypbXCInXXJlYWN0W1wiJ11cXHMqOz8vZztcbiAgICAgIGlmICghbmFtZWRJbXBvcnRSZS50ZXN0KGNvZGUpKSByZXR1cm47XG4gICAgICBcbiAgICAgIG5hbWVkSW1wb3J0UmUubGFzdEluZGV4ID0gMDtcbiAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvZGUucmVwbGFjZShuYW1lZEltcG9ydFJlLCAoX21hdGNoLCBpbXBvcnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWFzID0gYF9fcmVhY3RfY2pzXyR7Y291bnRlcisrfWA7XG4gICAgICAgIHJldHVybiBgaW1wb3J0ICR7YWxpYXN9IGZyb20gXCJyZWFjdFwiOyBjb25zdCB7JHtpbXBvcnRzfX0gPSAke2FsaWFzfTtgO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdCwgbWFwOiBudWxsIH07XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gW2htclBsdWdpbiwgY2pzRml4UGx1Z2luLCBzZXJ2ZXJQbHVnaW5dO1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVYSxNQUFBLHdCQUFBLEdBQTJCLFNBQVMsK0JBQUEsQ0FBZ0MsT0FBd0MsRUFBQTtBQUN2SCxFQUFBLElBQUksV0FBVyxJQUFNLEVBQUE7QUFDbkIsSUFBTSxNQUFBLElBQUksTUFBTSxxQkFBcUIsQ0FBQTtBQUFBO0FBR3ZDLEVBQU0sTUFBQSxlQUFBLEdBQWtCLGVBQWUsT0FBTyxDQUFBO0FBQzlDLEVBQUksSUFBQSxlQUFBLENBQWdCLFNBQVMsT0FBUyxFQUFBO0FBQ3BDLElBQUksSUFBQSxlQUFBLENBQWdCLFNBQVMsSUFBTSxFQUFBO0FBQ2pDLE1BQUEsTUFBTSxlQUFnQixDQUFBLEtBQUE7QUFBQTtBQUV4QixJQUFNLE1BQUEsSUFBSSxNQUFNLDJCQUEyQixDQUFBO0FBQUE7QUFFN0MsRUFBQSxNQUFNLGNBQWMsZUFBZ0IsQ0FBQSxXQUFBO0FBR3BDLEVBQUEsTUFBTSxTQUFZLEdBQUE7QUFBQSxJQUNoQixJQUFNLEVBQUEscUNBQUE7QUFBQSxJQUNOLEtBQU8sRUFBQSxPQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJUCxVQUFVLEdBQVUsRUFBQTtBQUNsQixNQUFNLE1BQUEsRUFBRSxJQUFNLEVBQUEsTUFBQSxFQUFXLEdBQUEsR0FBQTtBQUN6QixNQUFNLE1BQUEs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
124
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNlcnZlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0cmVhbVBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuc2VydmVyLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBWaXRlRGV2U2VydmVyIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5cbi8qKlxuICogRGV2IHNlcnZlciBwbHVnaW4gZm9yIHNlcnZlciBlbnZpcm9ubWVudC5cbiAqIFJldHVybnMgdHdvIHBsdWdpbnM6IG9uZSBmb3IgSE1SIGhhbmRsaW5nIChhbGwgZW52aXJvbm1lbnRzKSBhbmQgb25lIGZvciBzZXJ2ZXIgY29uZmlnLlxuICovXG5leHBvcnQgY29uc3Qgdml0ZVBsdWdpblJlYWN0RGV2U2VydmVyID0gZnVuY3Rpb24gX3ZpdGVQbHVnaW5SZWFjdFNlcnZlckRldlNlcnZlcihvcHRpb25zOiBTdHJlYW1QbHVnaW5PcHRpb25zKTogUGx1Z2luW10ge1xuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucyBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVPcHRpb25zKG9wdGlvbnMpO1xuICBpZiAocmVzb2x2ZWRPcHRpb25zLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgIGlmIChyZXNvbHZlZE9wdGlvbnMuZXJyb3IgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgcmVzb2x2ZWRPcHRpb25zLmVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVzb2x2ZSBvcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IHVzZXJPcHRpb25zID0gcmVzb2x2ZWRPcHRpb25zLnVzZXJPcHRpb25zO1xuXG4gIC8vIFNlcGFyYXRlIHBsdWdpbiBmb3IgSE1SIGhhbmRsaW5nIChtdXN0IGFwcGx5IHRvIGFsbCBlbnZpcm9ubWVudHMpXG4gIGNvbnN0IGhtclBsdWdpbiA9IHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpzZXJ2ZXItaG1yXCIsXG4gICAgYXBwbHk6IFwic2VydmVcIiBhcyBjb25zdCxcbiAgICAvLyBTZXJ2ZXItbGV2ZWwgaGFuZGxlSG90VXBkYXRlIOKAlCBzZW5kcyBjdXN0b20gV1MgZXZlbnQgdG8gY2xpZW50XG4gICAgLy8gVml0ZSA2IEVudmlyb25tZW50IEFQSTogaG90VXBkYXRlIHJ1bnMgcGVyLWVudmlyb25tZW50LlxuICAgIC8vIFByZXZlbnQgc2VydmVyL3NzciBlbnZpcm9ubWVudHMgZnJvbSB0cmlnZ2VyaW5nIHBhZ2UgcmVsb2FkIGZvciBjbGllbnQgY29tcG9uZW50cy5cbiAgICBob3RVcGRhdGUoY3R4OiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgZmlsZSwgc2VydmVyIH0gPSBjdHg7XG4gICAgICBjb25zdCBlbnZOYW1lID0gY3R4LmVudmlyb25tZW50Py5uYW1lID8/ICd1bmtub3duJztcbiAgICAgIFxuICAgICAgY29uc3QgbW9kdWxlQmFzZSA9IHVzZXJPcHRpb25zLm1vZHVsZUJhc2UgfHwgXCJzcmNcIjtcbiAgICAgIGNvbnN0IHByb2plY3RSb290ID0gdXNlck9wdGlvbnMucHJvamVjdFJvb3QgfHwgc2VydmVyPy5jb25maWc/LnJvb3QgfHwgJyc7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZShwcm9qZWN0Um9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgY29uc3QgaXNTb3VyY2VGaWxlID0gbm9ybWFsaXplZEZpbGUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgJy8nKTtcbiAgICAgIFxuICAgICAgaWYgKCFpc1NvdXJjZUZpbGUpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gQ2xpZW50IGVudmlyb25tZW50OiBsZXQgVml0ZS9Adml0ZWpzL3BsdWdpbi1yZWFjdCBoYW5kbGUgaXRcbiAgICAgIGlmIChlbnZOYW1lID09PSAnY2xpZW50Jykge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgY2xpZW50IGNvbXBvbmVudCDigJQgbGV0IEZhc3QgUmVmcmVzaCBoYW5kbGUgaXRcbiAgICAgICAgY29uc3QgaXNDbGllbnQgPSAoZmlsZS5lbmRzV2l0aCgnLnRzeCcpIHx8IGZpbGUuZW5kc1dpdGgoJy50cycpIHx8IGZpbGUuZW5kc1dpdGgoJy5qc3gnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanMnKSkgJiYgKCgpID0+IHtcbiAgICAgICAgICAvLyBDaGVjayBmaWxlbmFtZSBwYXR0ZXJuICguY2xpZW50LnRzeCwgLmNsaWVudC50cywgZXRjLikg4oCUIG1hdGNoZXMgaXNDbGllbnRDb21wb25lbnRCeU5hbWVcbiAgICAgICAgICBpZiAoL1xcLmNsaWVudFxcLihqc3x0c3xqc3h8dHN4KSQvLnRlc3QoZmlsZSkpIHJldHVybiB0cnVlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkID0gcmVhZEZpbGVTeW5jKGZpbGUsICd1dGYtOCcpLnNsaWNlKDAsIDIwMCk7XG4gICAgICAgICAgICByZXR1cm4gL15cXHMqW1wiJ111c2UgY2xpZW50W1wiJ10vLnRlc3QoaGVhZC5zcGxpdCgnXFxuJylbMF0pO1xuICAgICAgICAgIH0gY2F0Y2ggeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0NsaWVudCkgcmV0dXJuOyAvLyBMZXQgRmFzdCBSZWZyZXNoIGhhbmRsZSBjbGllbnQgY29tcG9uZW50c1xuICAgICAgICBcbiAgICAgICAgLy8gU2VydmVyIGNvbXBvbmVudCBjaGFuZ2VkIOKAlCBzZW5kIFJTQyByZWZldGNoIGV2ZW50IHRvIGNsaWVudFxuICAgICAgICAvLyBPbmx5IGRvIHRoaXMgb25jZSAoZnJvbSBjbGllbnQgZW52KSB0byBhdm9pZCBkdXBsaWNhdGUgZXZlbnRzXG4gICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmluZm8oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIEZpbGUgY2hhbmdlZCAoUlNDIHJlZmV0Y2gpOiAke25vcm1hbGl6ZWRGaWxlfWApO1xuICAgICAgICBzZXJ2ZXIud3Muc2VuZCh7XG4gICAgICAgICAgdHlwZTogJ2N1c3RvbScsXG4gICAgICAgICAgZXZlbnQ6ICd2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6c2VydmVyLWNvbXBvbmVudC11cGRhdGUnLFxuICAgICAgICAgIGRhdGE6IHsgZmlsZTogbm9ybWFsaXplZEZpbGUsIHBhdGg6IGZpbGUgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gW107IC8vIERvbid0IHRyaWdnZXIgY2xpZW50LXNpZGUgcGFnZSByZWxvYWRcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2VydmVyL1NTUiBlbnZpcm9ubWVudHM6IHN1cHByZXNzIHBhZ2UgcmVsb2FkIGZvciBhbGwgc291cmNlIGZpbGVzXG4gICAgICAvLyBTZXJ2ZXIgY29tcG9uZW50cyBhcmUgaGFuZGxlZCBieSB0aGUgUlNDIHJlZmV0Y2ggZXZlbnQgc2VudCBhYm92ZVxuICAgICAgLy8gSW52YWxpZGF0ZSB0aGUgc2VydmVyIG1vZHVsZSBzbyBuZXh0IFJTQyByZXF1ZXN0IGdldHMgZnJlc2ggY29udGVudFxuICAgICAgaWYgKGVudk5hbWUgPT09ICdzZXJ2ZXInKSB7XG4gICAgICAgIGNvbnN0IG1vZCA9IGN0eC5lbnZpcm9ubWVudD8ubW9kdWxlR3JhcGg/LmdldE1vZHVsZXNCeUZpbGUoZmlsZSk7XG4gICAgICAgIGlmIChtb2QpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbW9kKSB7XG4gICAgICAgICAgICBjdHguZW52aXJvbm1lbnQubW9kdWxlR3JhcGguaW52YWxpZGF0ZU1vZHVsZShtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHNlcnZlclBsdWdpbiA9IHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpkZXYtc2VydmVyLXNlcnZlclwiLFxuICAgIGFwcGx5OiBcInNlcnZlXCIgYXMgY29uc3QsXG5hcHBseVRvRW52aXJvbm1lbnQocGFydGlhbEVudmlyb25tZW50OiBhbnkpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsRW52aXJvbm1lbnQ/LmNvbnN1bWVyID09PSAnc2VydmVyJztcbiAgICB9LFxuICAgIGNvbmZpZ3VyZVNlcnZlcihzZXJ2ZXI6IFZpdGVEZXZTZXJ2ZXIpIHtcbiAgICAgIC8vIExvZyB0aGF0IHBsdWdpbiBpcyBiZWluZyBjb25maWd1cmVkXG4gICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBEZXYgc2VydmVyIHBsdWdpbiBjb25maWd1cmVkIGZvciBzZXJ2ZXIgZW52aXJvbm1lbnQgKHJlYWN0LXNlcnZlciBjb25kaXRpb24pYCk7XG4gICAgICBcbiAgICAgIC8vIENvbmZpZ3VyZSB0aGUgUmVhY3Qgc2VydmVyIGZvciBzZXJ2ZXIgZW52aXJvbm1lbnQgKGRpcmVjdCBSU0MgcHJvY2Vzc2luZylcbiAgICAgIC8vIFRoaXMgdXNlcyB0aGUgZXhpc3RpbmcgY29uZmlndXJlUmVhY3RTZXJ2ZXIuc2VydmVyLmpzIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25maWd1cmVSZWFjdFNlcnZlcih7XG4gICAgICAgIHNlcnZlcixcbiAgICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlczoge1xuICAgICAgICAgIHByb3BzTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgcGFnZU1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHJvb3RNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICBodG1sTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgcm91dGVNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICB1cmxNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgIHdvcmtlclBhdGhzOiB7fSxcbiAgICAgICAgICBzZXJ2ZXJFbnRyeTogbnVsbCxcbiAgICAgICAgICBjbGllbnRFbnRyeToge30sXG4gICAgICAgICAgY2xpZW50SW5wdXRzOiB7fSxcbiAgICAgICAgICBzdGF0aWNJbnB1dHM6IHt9LFxuICAgICAgICAgIHNlcnZlcklucHV0czoge30sXG4gICAgICAgICAgLy8gc3RhdGljTWFuaWZlc3QgcmVtb3ZlZCBmcm9tIEF1dG9EaXNjb3ZlcmVkRmlsZXNcbiAgICAgICAgICBzZXJ2ZXJBY3Rpb25zOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlck9wdGlvbnMsXG4gICAgICAgIHNlcnZlck1hbmlmZXN0OiB7fSxcbiAgICAgICAgcmVzb2x2ZWRDb25maWc6IHNlcnZlci5jb25maWcsXG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xuXG4gIC8vIEZpeCBDSlMgbmFtZWQgaW1wb3J0cyBpbiBzZXJ2ZXIgZW52aXJvbm1lbnQuXG4gIC8vIFZpdGUncyBlc2J1aWxkIEpTWCB0cmFuc2Zvcm0gKGFuZCBAdml0ZWpzL3BsdWdpbi1yZWFjdCBpZiBwcmVzZW50KSBnZW5lcmF0ZXNcbiAgLy8gbmFtZWQgaW1wb3J0cyBsaWtlIGBpbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcImAuIEluIHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQsXG4gIC8vIHJlYWN0J3MgcmVhY3Qtc2VydmVyIGV4cG9ydCBpcyBDSlMtb25seSwgYW5kIE5vZGUncyBFU00gaW50ZXJvcCBkb2Vzbid0IHN1cHBvcnRcbiAgLy8gbmFtZWQgZXhwb3J0cyBmcm9tIENKUy4gVGhpcyBwb3N0LXRyYW5zZm9ybSByZXdyaXRlcyB0aGVtLlxuICBjb25zdCBjanNGaXhQbHVnaW46IFBsdWdpbiA9IHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpzZXJ2ZXItY2pzLWZpeFwiLFxuICAgIGFwcGx5OiBcInNlcnZlXCIgYXMgY29uc3QsXG4gICAgZW5mb3JjZTogXCJwb3N0XCIgYXMgY29uc3QsXG4gICAgYXBwbHlUb0Vudmlyb25tZW50KGVudjogYW55KSB7XG4gICAgICByZXR1cm4gZW52Py5uYW1lID09PSAnc2VydmVyJztcbiAgICB9LFxuICAgIHRyYW5zZm9ybShjb2RlOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICAgIGlmIChpZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzJykpIHJldHVybjtcbiAgICAgIGlmICghaWQubWF0Y2goL1xcLltqdF1zeD8kLykpIHJldHVybjtcbiAgICAgIFxuICAgICAgY29uc3QgbmFtZWRJbXBvcnRSZSA9IC9pbXBvcnRcXHMqXFx7KFtefV0rKVxcfVxccypmcm9tXFxzKltcIiddcmVhY3RbXCInXVxccyo7Py9nO1xuICAgICAgaWYgKCFuYW1lZEltcG9ydFJlLnRlc3QoY29kZSkpIHJldHVybjtcbiAgICAgIFxuICAgICAgbmFtZWRJbXBvcnRSZS5sYXN0SW5kZXggPSAwO1xuICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgY29uc3QgcmVzdWx0ID0gY29kZS5yZXBsYWNlKG5hbWVkSW1wb3J0UmUsIChfbWF0Y2gsIGltcG9ydHMpID0+IHtcbiAgICAgICAgY29uc3QgYWxpYXMgPSBgX19yZWFjdF9janNfJHtjb3VudGVyKyt9YDtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgJHthbGlhc30gZnJvbSBcInJlYWN0XCI7IGNvbnN0IHske2ltcG9ydHN9fSA9ICR7YWxpYXN9O2A7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgY29kZTogcmVzdWx0LCBtYXA6IG51bGwgfTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBbaG1yUGx1Z2luLCBjanNGaXhQbHVnaW4sIHNlcnZlclBsdWdpbl07XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVVhLE1BQUEsd0JBQUEsR0FBMkIsU0FBUywrQkFBQSxDQUFnQyxPQUF3QyxFQUFBO0FBQ3ZILEVBQUEsSUFBSSxXQUFXLElBQU0sRUFBQTtBQUNuQixJQUFNLE1BQUEsSUFBSSxNQUFNLHFCQUFxQixDQUFBO0FBQUE7QUFHdkMsRUFBTSxNQUFBLGVBQUEsR0FBa0IsZUFBZSxPQUFPLENBQUE7QUFDOUMsRUFBSSxJQUFBLGVBQUEsQ0FBZ0IsU0FBUyxPQUFTLEVBQUE7QUFDcEMsSUFBSSxJQUFBLGVBQUEsQ0FBZ0IsU0FBUyxJQUFNLEVBQUE7QUFDakMsTUFBQSxNQUFNLGVBQWdCLENBQUEsS0FBQTtBQUFBO0FBRXhCLElBQU0sTUFBQSxJQUFJLE1BQU0sMkJBQTJCLENBQUE7QUFBQTtBQUU3QyxFQUFBLE1BQU0sY0FBYyxlQUFnQixDQUFBLFdBQUE7QUFHcEMsRUFBQSxNQUFNLFNBQVksR0FBQTtBQUFBLElBQ2hCLElBQU0sRUFBQSxxQ0FBQTtBQUFBLElBQ04sS0FBTyxFQUFBLE9BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlQLFVBQVUsR0FBVSxFQUFBO0FBQ2xCLE1BQU0sTUFBQSxFQUFFLElBQU0sRUFBQSxNQUFBLEVBQVcsR0FBQSxHQUFBO0FBQ3pCLE1BQU0sTUFBQSxPQUFBLEdBQVUsR0FBSSxDQUFBLFdBQUEsRUFBYSxJQUFRLElBQUEsU0FBQTtBQUV6QyxNQUFNLE1BQUEsVUFBQSxHQUFhLFlBQVksVUFBYyxJQUFBLEtBQUE7QUFDN0MsTUFBQSxNQUFNLFdBQWMsR0FBQSxXQUFBLENBQVksV0FBZSxJQUFBLE1BQUEsRUFBUSxRQUFRLElBQVEsSUFBQSxFQUFBO0FBQ3ZFLE1BQU0sTUFB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
@@ -1,7 +1,6 @@
1
1
  export { toError } from "./toError.js";
2
2
  export { logError } from "./logError.js";
3
- export { enhanceError, createContextualError } from "./enhanceError.js";
4
3
  export { handleError } from "./handleError.js";
5
4
  export { shouldPanic, PANIC_SYMBOL, isPanic } from "./shouldPanic.js";
6
- export { assertPanic } from "./assertPanic.js";
5
+ export { shouldCausePanic, handlePanicThreshold, isPanicError } from "./panicThresholdHandler.js";
7
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../plugin/error/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../plugin/error/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC"}