@mnaoumov/typescript-dev-toolkit 4.0.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/bundlers/esbuild-impl/svelte-preprocessor/package.json +6 -0
  2. package/dist/lib/cjs/bulk-concurrency.cjs +49 -0
  3. package/dist/lib/cjs/bulk-concurrency.d.cts +14 -0
  4. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +4 -1
  5. package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -0
  6. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +3 -3
  7. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-preprocessor.cjs +152 -0
  8. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-preprocessor.d.cts +95 -0
  9. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +4 -3
  10. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -1
  11. package/dist/lib/cjs/docs-site/docs-links.cjs +3 -2
  12. package/dist/lib/cjs/docs-site/og-images.cjs +3 -2
  13. package/dist/lib/cjs/index.cjs +4 -1
  14. package/dist/lib/cjs/index.d.cts +1 -0
  15. package/dist/lib/cjs/library-build.cjs +8 -8
  16. package/dist/lib/cjs/linters/eslint-config.cjs +7 -5
  17. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +5 -1
  18. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +5 -1
  19. package/dist/lib/cjs/linters/eslint-rules/index.cjs +7 -1
  20. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +2 -0
  21. package/dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.cjs +144 -0
  22. package/dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.d.cts +11 -0
  23. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +5 -5
  24. package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +80 -3
  25. package/dist/lib/cjs/linters/eslint-rules/readonly-member-arrays.cjs +130 -0
  26. package/dist/lib/cjs/linters/eslint-rules/readonly-member-arrays.d.cts +6 -0
  27. package/dist/lib/cjs/linters/markdownlint.cjs +8 -2
  28. package/dist/lib/cjs/linters/over-exposure.cjs +14 -3
  29. package/dist/lib/cjs/linters/over-exposure.d.cts +3 -1
  30. package/dist/lib/cjs/nano-staged-config.cjs +24 -3
  31. package/dist/lib/cjs/nano-staged-config.d.cts +4 -0
  32. package/dist/lib/cjs/released-issues.cjs +4 -4
  33. package/dist/lib/cjs/test-runners/auto.cjs +1 -1
  34. package/dist/lib/cjs/test-runners/auto.d.cts +5 -0
  35. package/dist/lib/cjs/test-runners/forwarded-arguments.cjs +50 -0
  36. package/dist/lib/cjs/test-runners/forwarded-arguments.d.cts +49 -0
  37. package/dist/lib/cjs/test-runners/index.cjs +4 -1
  38. package/dist/lib/cjs/test-runners/index.d.cts +1 -0
  39. package/dist/lib/cjs/test-runners/jest.cjs +16 -3
  40. package/dist/lib/cjs/test-runners/jest.d.cts +5 -0
  41. package/dist/lib/cjs/test-runners/vitest.cjs +111 -5
  42. package/dist/lib/cjs/test-runners/vitest.d.cts +5 -0
  43. package/dist/lib/cjs/upstream-sync.cjs +3 -3
  44. package/dist/lib/esm/bulk-concurrency.d.mts +14 -0
  45. package/dist/lib/esm/bulk-concurrency.mjs +15 -0
  46. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -0
  47. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +3 -1
  48. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +3 -3
  49. package/dist/lib/esm/bundlers/esbuild-impl/svelte-preprocessor.d.mts +95 -0
  50. package/dist/lib/esm/bundlers/esbuild-impl/svelte-preprocessor.mjs +126 -0
  51. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +1 -1
  52. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +4 -3
  53. package/dist/lib/esm/docs-site/docs-links.mjs +3 -2
  54. package/dist/lib/esm/docs-site/og-images.mjs +3 -2
  55. package/dist/lib/esm/index.d.mts +1 -0
  56. package/dist/lib/esm/index.mjs +3 -1
  57. package/dist/lib/esm/library-build.mjs +8 -8
  58. package/dist/lib/esm/linters/eslint-config.mjs +7 -5
  59. package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +5 -1
  60. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +5 -1
  61. package/dist/lib/esm/linters/eslint-rules/index.d.mts +2 -0
  62. package/dist/lib/esm/linters/eslint-rules/index.mjs +5 -1
  63. package/dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.d.mts +11 -0
  64. package/dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.mjs +120 -0
  65. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +5 -5
  66. package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +80 -3
  67. package/dist/lib/esm/linters/eslint-rules/readonly-member-arrays.d.mts +6 -0
  68. package/dist/lib/esm/linters/eslint-rules/readonly-member-arrays.mjs +106 -0
  69. package/dist/lib/esm/linters/markdownlint.mjs +8 -2
  70. package/dist/lib/esm/linters/over-exposure.d.mts +3 -1
  71. package/dist/lib/esm/linters/over-exposure.mjs +16 -3
  72. package/dist/lib/esm/nano-staged-config.d.mts +4 -0
  73. package/dist/lib/esm/nano-staged-config.mjs +24 -3
  74. package/dist/lib/esm/released-issues.mjs +4 -4
  75. package/dist/lib/esm/test-runners/auto.d.mts +5 -0
  76. package/dist/lib/esm/test-runners/auto.mjs +1 -1
  77. package/dist/lib/esm/test-runners/forwarded-arguments.d.mts +49 -0
  78. package/dist/lib/esm/test-runners/forwarded-arguments.mjs +26 -0
  79. package/dist/lib/esm/test-runners/index.d.mts +1 -0
  80. package/dist/lib/esm/test-runners/index.mjs +3 -1
  81. package/dist/lib/esm/test-runners/jest.d.mts +5 -0
  82. package/dist/lib/esm/test-runners/jest.mjs +16 -3
  83. package/dist/lib/esm/test-runners/vitest.d.mts +5 -0
  84. package/dist/lib/esm/test-runners/vitest.mjs +105 -6
  85. package/dist/lib/esm/upstream-sync.mjs +3 -3
  86. package/linters/eslint-rules/no-keyword-identifiers/package.json +6 -0
  87. package/linters/eslint-rules/readonly-member-arrays/package.json +6 -0
  88. package/package.json +5 -2
  89. package/test-runners/forwarded-arguments/package.json +6 -0
@@ -259,8 +259,8 @@ function initCjs() {
259
259
  globalThisRecord["__name"] ??= keepName;
260
260
  globalThisRecord["__extractDefault"] ??= extractDefault;
261
261
  ensureBrowserProcess();
262
- function extractDefault(module) {
263
- return module && module.__esModule && "default" in module ? module.default : module;
262
+ function extractDefault($module) {
263
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
264
264
  }
265
265
  }
266
266
  function initEsm() {
@@ -313,4 +313,4 @@ export {
313
313
  makePreprocessBanner,
314
314
  preprocessPlugin
315
315
  };
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBBbiB1bmJ1bmRsZWRcbiAqIGJ1aWxkIChgYnVuZGxlOiBmYWxzZWAsIG9uZSBvdXRwdXQgcGVyIHNvdXJjZSkgZ2V0cyBubyBiYW5uZXI6IGVhY2ggZW1pdHRlZCBtb2R1bGUgZ2V0cyBhIHByZWFtYmxlIGhvbGRpbmcgb25seSB0aGVcbiAqIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIGEgbW9kdWxlIHRoYXQgbmVlZHMgbm9uZSBnZXRzIG5vdGhpbmcuIFRoYXQgaXNcbiAqIHdoeSB0aGV5IGFsbCBsaXZlIGluIHRoaXMgbW9kdWxlOiBlc2J1aWxkIGNvbXBpbGVzIGEgY3Jvc3MtbW9kdWxlIGNhbGwgdG8gYCgwLCBpbXBvcnRfbW9kdWxlLmZuKSjigKYpYCxcbiAqIHdoaWNoIHdvdWxkIG5hbWUgYSBiaW5kaW5nIHRoZSBlbWl0dGVkIGJ1bmRsZSBkb2VzIG5vdCBoYXZlLiBTYW1lLW1vZHVsZSByZWZlcmVuY2VzIHN0YXkgYmFyZSwgYW5kXG4gKiB7QGxpbmsgbWFrZVByZXByb2Nlc3NCYW5uZXJ9IHNlcmlhbGl6ZXMgdGhlIHNoaW1zIGFsb25nc2lkZSB0aGUgYGluaXRgIGZ1bmN0aW9uIHNvIHRoZXkgYXJlIGluIHNjb3BlIHRoZXJlLiBBIHNoaW1cbiAqIHRoYXQgaXMgbm90IHNlcmlhbGl6ZWQgc2lsZW50bHkgZGVncmFkZXMgdG8gd2hhdGV2ZXIgdGhlIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGhvbGRzIHVuZGVyIHRoYXQgbmFtZSDigJQgd2hpY2hcbiAqIGlzIGhvdyBgX19uYW1lYCB1c2VkIHRvIGVuZCB1cCBob2xkaW5nIGB3aW5kb3cubmFtZWAuXG4gKlxuICogQSBjYWxsZXIgdGhhdCBuZWVkcyBtb3JlIGluIHRoZSBiYW5uZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gYnVpbGRlciBwYXRjaGVzIGByZXF1aXJlYCkgaGFuZHMgaW5cbiAqIHtAbGluayBQcmVwcm9jZXNzUGx1Z2luT3B0aW9ucy5hZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uc30uIEVhY2ggb25lIGlzIHNlcmlhbGl6ZWQgYXMgaXRzIE9XTiBpbW1lZGlhdGVseVxuICogaW52b2tlZCBmdW5jdGlvbiBhZnRlciB0aGUgc2hhcmVkIHNjb3BlLCBzbyBpdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkOiBpdCBjYW5ub3Qgc2VlIHRoZSBzaGltcywgYW5kIGNhbGxpbmcgb25lXG4gKiBmcm9tIGFub3RoZXIgbW9kdWxlIHdvdWxkIGhpdCBleGFjdGx5IHRoZSBjcm9zcy1tb2R1bGUgdHJhcCBhYm92ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHR5cGUge1xuICBPdXRwdXRGaWxlLFxuICBQbHVnaW5cbn0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7XG4gIElkZW50aWZpZXIsXG4gIE5vZGVcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU291cmNlRmlsZSxcbiAgZm9yRWFjaENoaWxkLFxuICBpc0JpbmRpbmdFbGVtZW50LFxuICBpc0NhbGxFeHByZXNzaW9uLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRXhwb3J0RGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW1wb3J0Q2xhdXNlLFxuICBpc0ltcG9ydERlY2xhcmF0aW9uLFxuICBpc0ltcG9ydFNwZWNpZmllcixcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNOYW1lc3BhY2VJbXBvcnQsXG4gIGlzUGFyYW1ldGVyLFxuICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbixcbiAgaXNQcm9wZXJ0eUFzc2lnbm1lbnQsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIGlzVmFyaWFibGVEZWNsYXJhdGlvbixcbiAgU2NyaXB0S2luZCxcbiAgU2NyaXB0VGFyZ2V0LFxuICBTeW50YXhLaW5kXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5jb25zdCBESVNQT1NFX1NZTUJPTF9OQU1FUyA9IG5ldyBTZXQoWydhc3luY0Rpc3Bvc2UnLCAnZGlzcG9zZSddKTtcbmNvbnN0IElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCA9ICcvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCc7XG5jb25zdCBKU19PVVRQVVRfUkVHX0VYUCA9IC9cXC5bY21dP2pzJC87XG4vLyBFc2J1aWxkJ3MgaGVscGVyIGJlaGluZCBhIGxvd2VyZWQgYHVzaW5nYCwgd2hpY2ggbG9va3MgdXAgYFN5bWJvbC5kaXNwb3NlYCBieSBuYW1lLlxuY29uc3QgS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FID0gJ19fa25vd25TeW1ib2wnO1xuLy8gQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBvciBhIGBub2RlOmAgYnVpbHQtaW46IGFueXRoaW5nIGVsc2UgbmFtZXMgYSBwYWNrYWdlLlxuY29uc3QgTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAgPSAvXig/OlxcLnxcXC98bm9kZTopLztcblxuZW51bSBJZGVudGlmaWVyVXNhZ2Uge1xuICBCaW5kaW5nID0gJ2JpbmRpbmcnLFxuICBNZW1iZXIgPSAnbWVtYmVyJyxcbiAgUmVhZCA9ICdyZWFkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBZGRNb2R1bGVQcmVhbWJsZXNQYXJhbXMge1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW107XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZXM6IHJlYWRvbmx5IE91dHB1dEZpbGVbXTtcbn1cblxuLyoqXG4gKiBBIGJyb3dzZXItZmxhdm9yZWQgc3RhbmQtaW4gZm9yIE5vZGUncyBgcHJvY2Vzc2AgZ2xvYmFsLlxuICovXG5pbnRlcmZhY2UgQnJvd3NlclByb2Nlc3MgZXh0ZW5kcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgcHJvY2VzcyBhcyBhIGJyb3dzZXIgb25lLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2Ugc2VsZWN0cyBpdHMgYnJvd3NlciBlbnRyeSBwb2ludCBvbiBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGJyb3dzZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIHRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB7QGxpbmsgZW5zdXJlRGlzcG9zZVN5bWJvbHN9IHJlYWRzIGFuZCB3cml0ZXMsIHdpdGggdGhlIHR3byBkaXNwb3NlXG4gKiBzeW1ib2xzIG9wdGlvbmFsIGJlY2F1c2UgYW4gZW5naW5lIHdpdGhvdXQgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBkb2VzIG5vdCBoYXZlIHRoZW0uXG4gKi9cbmludGVyZmFjZSBEaXNwb3NlU3ltYm9sSG9zdCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE1pc3NpbmcgZGlzcG9zYWwgc3ltYm9scyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxuICBhc3luY0Rpc3Bvc2U/OiBzeW1ib2w7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE1pc3NpbmcgZGlzcG9zYWwgc3ltYm9scyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxuICBkaXNwb3NlPzogc3ltYm9sO1xuICByZWFkb25seSBmb3I6IChrZXk6IHN0cmluZykgPT4gc3ltYm9sO1xufVxuXG5pbnRlcmZhY2UgRXNtTW9kdWxlIHtcbiAgcmVhZG9ubHkgX19lc01vZHVsZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVmYXVsdDogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgYSBicm93c2VyIGdsb2JhbCB7QGxpbmsgZ2V0Q2pzSW1wb3J0TWV0YVVybH0gcmVhZHMsIG9wdGlvbmFsIGJlY2F1c2UgYSBub24tYnJvd3NlciBob3N0IGhhcyBub25lLlxuICovXG5pbnRlcmZhY2UgSW5zZXJ0UHJlYW1ibGVQYXJhbXMge1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJlYW1ibGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIExvY2F0aW9uSG9zdCB7XG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogUGFnZUxvY2F0aW9uO1xufVxuXG5pbnRlcmZhY2UgTW9kdWxlU2hpbU5lZWRzIHtcbiAgcmVhZG9ubHkgaXNCcm93c2VyUHJvY2Vzc05lZWRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNEaXNwb3NlU3ltYm9sc05lZWRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNOYW1lTmVlZGVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGFnZUxvY2F0aW9uIHtcbiAgcmVhZG9ubHkgaHJlZjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU291cmNlTWFwV2l0aE1hcHBpbmdzIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMgLS0gQWRkaW5nIGEgcHJlYW1ibGUgc2hpZnRzIHRoZSBzb3VyY2UgbWFwIG1hcHBpbmdzLlxuICBtYXBwaW5nczogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVXJsTW9kdWxlIHtcbiAgcmVhZG9ubHkgcGF0aFRvRmlsZVVSTDogdHlwZW9mIHBhdGhUb0ZpbGVVUkw7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgYnVuZGxlIHJ1bnMgYWdhaW5zdCBhIGBwcm9jZXNzYCBnbG9iYWwgdGhhdCBicm93c2VyLXRhcmdldGluZyBwYWNrYWdlcyByZWNvZ25pemUuXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHNvIGl0IG5ldmVyIHJ1bnMgaW4gdGhlIGJ1aWxkZXIgcHJvY2VzcyDigJQgYnV0IGl0IGlzIGFuIG9yZGluYXJ5XG4gKiBmdW5jdGlvbiBoZXJlLCBzbyBpdCBpcyB1bml0LXRlc3RlZCBkaXJlY3RseSByYXRoZXIgdGhhbiBieSBldmFsdWF0aW5nIHRoZSBiYW5uZXIgdGV4dC5cbiAqXG4gKiBGaWxscyBpbiB0aGUga2V5cyBNSVNTSU5HIGZyb20gYSBob3N0LXByb3ZpZGVkIGBwcm9jZXNzYCByYXRoZXIgdGhhbiByZXBsYWNpbmcgb3Igc2tpcHBpbmcgaXQuIE9ic2lkaWFuXG4gKiBNb2JpbGUgZXhwb3NlcyBhIHBhcnRpYWwgYHByb2Nlc3NgLCBhbmQgdGhlIHdob2xlLW9iamVjdCBndWFyZHMgdGhpcyByZXBsYWNlZCAoYGlmIChnbG9iYWxUaGlzLnByb2Nlc3MpIHtcbiAqIHJldHVybjsgfWAgLyBgZ2xvYmFsVGhpc1JlY29yZFsncHJvY2VzcyddID8/PSDigKZgKSB0b29rIHRoYXQgYXMgXCJhbHJlYWR5IHNoaW1tZWRcIiwgc28gYGJyb3dzZXJgIG5ldmVyXG4gKiBsYW5kZWQuIFRoZSBidW5kbGVkIGBkZWJ1Z2AgcGFja2FnZSB0aGVuIHNlbGVjdGVkIGl0cyBOb2RlIGVudHJ5IHBvaW50LCB3aGljaCBjYWxsc1xuICogYHJlcXVpcmUoJ3V0aWwnKS5kZXByZWNhdGUoKWAgYXQgbW9kdWxlIHRvcCBsZXZlbCwgYW5kIG9uIG1vYmlsZSB0aGUgcGF0Y2hlZCBgcmVxdWlyZWAgcmV0dXJucyBge31gIOKAlCBzb1xuICogdGhlIHBsdWdpbiB0aHJldyBiZWZvcmUgaXRzIGBvbmxvYWRgIHJhbi5cbiAqXG4gKiBBIHJlYWwgTm9kZSBvciBFbGVjdHJvbiBgcHJvY2Vzc2AgaXMgbGVmdCBjb21wbGV0ZWx5IHVudG91Y2hlZC4gYHByb2Nlc3MudmVyc2lvbnMubm9kZWAgaXMgdGhlIHNpZ25hbCBmb3JcbiAqIGl0LCBhbmQgaXQgaXMgc2VsZi1jb250YWluZWQsIHNvIGl0IGFsc28gaG9sZHMgaW4gdGhlIE5vZGUgQ0xJIGJ1bmRsZXMgdGhpcyBiYW5uZXIgaXMgZW1pdHRlZCBpbnRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQnJvd3NlclByb2Nlc3MoKTogdm9pZCB7XG4gIGNvbnN0IGJyb3dzZXJQcm9jZXNzOiBHZW5lcmljT2JqZWN0PEJyb3dzZXJQcm9jZXNzPiA9IHtcbiAgICBicm93c2VyOiB0cnVlLFxuICAgIGN3ZCgpIHtcbiAgICAgIHJldHVybiAnLyc7XG4gICAgfSxcbiAgICBlbnY6IHt9LFxuICAgIHBsYXRmb3JtOiAnYW5kcm9pZCdcbiAgfTtcblxuICBjb25zdCBleGlzdGluZ1Byb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3MgYXMgUGFydGlhbDxOb2RlSlMuUHJvY2Vzcz4gfCB1bmRlZmluZWQ7XG5cbiAgaWYgKCFleGlzdGluZ1Byb2Nlc3MpIHtcbiAgICBnbG9iYWxUaGlzLnByb2Nlc3MgPSBicm93c2VyUHJvY2VzcyBhcyBOb2RlSlMuUHJvY2VzcztcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZXhpc3RpbmdQcm9jZXNzLnZlcnNpb25zPy5ub2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdQcm9jZXNzUmVjb3JkID0gZXhpc3RpbmdQcm9jZXNzIGFzIEdlbmVyaWNPYmplY3Q7XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYnJvd3NlclByb2Nlc3MpKSB7XG4gICAgZXhpc3RpbmdQcm9jZXNzUmVjb3JkW2tleV0gPz89IHZhbHVlO1xuICB9XG5cbiAgZXhpc3RpbmdQcm9jZXNzUmVjb3JkWydicm93c2VyJ10gPSB0cnVlO1xufVxuXG4vKipcbiAqIE1ha2VzIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCBleGlzdCwgZmFsbGluZyBiYWNrIHRvIHRoZSByZWdpc3RyeSBzeW1ib2xzIGVzYnVpbGQnc1xuICogYHVzaW5nYCBoZWxwZXJzIGxvb2sgdXAuXG4gKlxuICogQHBhcmFtIHN5bWJvbENvbnN0cnVjdG9yIC0gVGhlIGBTeW1ib2xgIGNvbnN0cnVjdG9yIHRvIHBhdGNoLiBEZWZhdWx0cyB0byB0aGUgYW1iaWVudCBvbmU7IHRoZSBwYXJhbWV0ZXJcbiAqIGV4aXN0cyBzbyBhIHRlc3QgY2FuIGhhbmQgaW4gYW4gZW5naW5lIHRoYXQgbGFja3MgdGhlIHdlbGwta25vd24gc3ltYm9scy5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lci4gQSBkaXNwb3NhYmxlIGRlY2xhcmVzIGl0cyBtZXRob2QgdW5kZXIgdGhlIExJVEVSQUwga2V5XG4gKiBgW1N5bWJvbC5kaXNwb3NlXWAsIHdoaWxlIGVzYnVpbGQgbG93ZXJzIGV2ZXJ5IGB1c2luZ2AgdG8gYSBsb29rdXAgdGhyb3VnaCBgX19rbm93blN5bWJvbCgnZGlzcG9zZScpYCxcbiAqIHdoaWNoIGZhbGxzIGJhY2sgdG8gYFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJylgIHdoZW4gdGhlIGVuZ2luZSBoYXMgbm8gd2VsbC1rbm93biBzeW1ib2wuIE9uIHN1Y2ggYW5cbiAqIGVuZ2luZSB0aGUgbGl0ZXJhbCBrZXkgZXZhbHVhdGVzIHRvIGB1bmRlZmluZWRgLCB0aGUgbWV0aG9kIGxhbmRzIHVuZGVyIHRoZSBzdHJpbmcgYFwidW5kZWZpbmVkXCJgLCBhbmRcbiAqIGV2ZXJ5IGB1c2luZ2Agb2YgaXQgdGhyb3dzIGBPYmplY3Qgbm90IGRpc3Bvc2FibGVgLiBGaWxsaW5nIHRoZSB3ZWxsLWtub3duIHNsb3Qgd2l0aCB0aGF0IHNhbWUgcmVnaXN0cnlcbiAqIHN5bWJvbCBtYWtlcyBib3RoIHNpZGVzIG5hbWUgb25lIGtleSBvbiBldmVyeSBlbmdpbmUuIEEgaG9zdCB0aGF0IGFscmVhZHkgaGFzIHRoZSBzeW1ib2wgaXMgbGVmdFxuICogdW50b3VjaGVkOiBgPz89YCBuZXZlciByZWFjaGVzIHRoZSBhc3NpZ25tZW50LCB3aGljaCB0aGUgaG9zdCdzIG5vbi13cml0YWJsZSBwcm9wZXJ0eSB3b3VsZCByZWZ1c2UuXG4gKlxuICogVGhlIGRlZmF1bHQgbmFtZXMgYFN5bWJvbGAgYmFyZSBvbiBwdXJwb3NlOiBpdCBleGlzdHMgb24gZXZlcnkgZW5naW5lIHRoaXMgcnVucyBvbiwgYW5kIGEgYmFyZSByZWZlcmVuY2VcbiAqIHJlc29sdmVzIGFnYWluc3Qgd2hhdGV2ZXIgc2NvcGUgdGhlIGJhbm5lciBpcyBldmFsdWF0ZWQgaW4sIGV4YWN0bHkgYXMgdGhlIGJ1bmRsZSdzIG93blxuICogYFtTeW1ib2wuZGlzcG9zZV1gIGtleXMgZG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVEaXNwb3NlU3ltYm9scyhzeW1ib2xDb25zdHJ1Y3RvcjogRGlzcG9zZVN5bWJvbEhvc3QgPSBTeW1ib2wpOiB2b2lkIHtcbiAgc3ltYm9sQ29uc3RydWN0b3IuYXN5bmNEaXNwb3NlID8/PSBzeW1ib2xDb25zdHJ1Y3Rvci5mb3IoJ1N5bWJvbC5hc3luY0Rpc3Bvc2UnKTtcbiAgc3ltYm9sQ29uc3RydWN0b3IuZGlzcG9zZSA/Pz0gc3ltYm9sQ29uc3RydWN0b3IuZm9yKCdTeW1ib2wuZGlzcG9zZScpO1xufVxuXG4vKipcbiAqIFJldHVybnMgaXRzIGFyZ3VtZW50IHVuY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSBUaGUgdmFsdWUgdG8gcmV0dXJuLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHBhc3NlZCBpbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgd2hlcmUgaXQgc3RhbmRzIGluIGZvciBlc2J1aWxkJ3MgYF9fbmFtZWAgaGVscGVyIOKAlCB3aGljaCBuYW1lcyBhXG4gKiBmdW5jdGlvbiBhbmQgcmV0dXJucyBpdCDigJQgZm9yIGJ1bmRsZXMgdGhhdCByZWZlcmVuY2UgdGhlIGhlbHBlciB3aXRob3V0IGVtaXR0aW5nIHRoZWlyIG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlZXBOYW1lKCR1bmtub3duOiB1bmtub3duKTogdW5rbm93biB7XG4gIHJldHVybiAkdW5rbm93bjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGJhbm5lciBpbmplY3RlZCBhdCB0aGUgdG9wIG9mIGV2ZXJ5IGVtaXR0ZWQgYnVuZGxlLlxuICpcbiAqIGBTdHJpbmcoZm4pYCBjYXB0dXJlcyBvbmx5IHRoZSBmdW5jdGlvbidzIG93biBib2R5LCBzbyBldmVyeSBzaGltIHRoZSBgaW5pdGAgZnVuY3Rpb24gY2FsbHMgaGFzIHRvIGJlXG4gKiBzZXJpYWxpemVkIG5leHQgdG8gaXQgYW5kIHdyYXBwZWQgaW4gb25lIHNoYXJlZCBzY29wZTsgb3RoZXJ3aXNlIHRoZSBjYWxsIGl0IG1ha2VzIHJlc29sdmVzIGFnYWluc3QgdGhlXG4gKiBjb25zdW1lcidzIGdsb2JhbCBzY29wZSBhdCBydW50aW1lLiBTZWUgdGhpcyBmaWxlJ3MgYEBmaWxlYCByZW1hcmtzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGJhbm5lciBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGJhbm5lciBzb3VyY2UgdG8gcHJlcGVuZCB0byB0aGUgZW1pdHRlZCBidW5kbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUHJlcHJvY2Vzc0Jhbm5lcihvcHRpb25zOiBNYWtlUHJlcHJvY2Vzc0Jhbm5lck9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc2hpbXMgPSBpc0VzbSA/IFtlbnN1cmVEaXNwb3NlU3ltYm9scywgZW5zdXJlQnJvd3NlclByb2Nlc3NdIDogW2Vuc3VyZURpc3Bvc2VTeW1ib2xzLCBlbnN1cmVCcm93c2VyUHJvY2Vzcywga2VlcE5hbWVdO1xuICBjb25zdCBpbml0ID0gaXNFc20gPyBpbml0RXNtIDogaW5pdENqcztcbiAgY29uc3QgYWRkaXRpb25hbEluaXRzID0gYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMubWFwKChmdW5jdGlvbl8pID0+IGAoJHtTdHJpbmcoZnVuY3Rpb25fKX0pKCk7XFxuYCkuam9pbignJyk7XG4gIHJldHVybiBgXFxuKGZ1bmN0aW9uICgpIHtcXG4ke3NoaW1zLm1hcChTdHJpbmcpLmpvaW4oJ1xcblxcbicpfVxcblxcbigke1N0cmluZyhpbml0KX0pKCk7XFxufSkoKTtcXG4ke2FkZGl0aW9uYWxJbml0c31gO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBsdWdpbidzIHNldHVwIG5lZWRzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQsIGFuZCB0aGUgZnVuY3Rpb25zIGluIHRoZSBsYXRlciBpZ25vcmVkIHJhbmdlcyBhcmUgc2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciBhbmQgc28gcnVuIGluc2lkZSB0aGUgYnVpbHQgYnVuZGxlLCBuZXZlciBpbiB0aGlzIHByb2Nlc3MuIFRoZSBzaGltcyBhYm92ZSBhcmUgZGVsaWJlcmF0ZWx5IE5PVCBpZ25vcmVkOiB0aGV5IGFyZSBvcmRpbmFyeSBmdW5jdGlvbnMgaGVyZSBhbmQgYXJlIHVuaXQtdGVzdGVkIGRpcmVjdGx5LCBhbmQgbmVpdGhlciBhcmUgdGhlIHVuYnVuZGxlZC1idWlsZCBoZWxwZXJzLCB3aGljaCB0aGUgdGVzdHMgZHJpdmUgdGhyb3VnaCBhIHN0dWIgYnVpbGQuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IHByZXByb2Nlc3NlcyBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IGZpbGVzLlxuICpcbiAqIFRoaXMgcGx1Z2luIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6XG4gKiAtIFJlcGxhY2VzIGluc3RhbmNlcyBvZiBgaW1wb3J0KGRvdCltZXRhKGRvdCl1cmxgIHdpdGggYSBDb21tb25KUy1jb21wYXRpYmxlIGBfX2ZpbGVuYW1lYCBhbHRlcm5hdGl2ZS5cbiAqIC0gTW9kaWZpZXMgdGhlIGBzb3VyY2VNYXBwaW5nVVJMYCBjb21tZW50IHNvIGEgdGVtcGxhdGUgbGl0ZXJhbCBlbmRpbmcgYSBmaWxlIGRvZXMgbm90IHN3YWxsb3cgaXQuXG4gKiAtIEFkZHMgYSBiYXNpYyBgcHJvY2Vzc2Agb2JqZWN0IHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgYHByb2Nlc3NgIGlzIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkLlxuICogLSBGaWxscyBpbiBgU3ltYm9sLmRpc3Bvc2VgIC8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIG9uIGVuZ2luZXMgdGhhdCBsYWNrIHRoZW0sIHNvIGB1c2luZ2Agd29ya3MgdGhlcmUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIGBQbHVnaW5gIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhlIHByZXByb2Nlc3NpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwcm9jZXNzUGx1Z2luKG9wdGlvbnM6IFByZXByb2Nlc3NQbHVnaW5PcHRpb25zID0ge30pOiBQbHVnaW4ge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zID0gW10sIGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlciA9IGdldENqc0ltcG9ydE1ldGFVcmwsIGlzRXNtID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlcGxhY2VtZW50cyA9IGlzRXNtXG4gICAgPyB7fVxuICAgIDoge1xuICAgICAgW1xuICAgICAgICByZXBsYWNlQWxsKHtcbiAgICAgICAgICAkc3RyaW5nOiAnaW1wb3J0KGRvdCltZXRhKGRvdCl1cmwnLFxuICAgICAgICAgIHJlcGxhY2VyOiAnLicsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6ICcoZG90KSdcbiAgICAgICAgfSlcbiAgICAgIF06IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlclxuICAgIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAncHJlcHJvY2VzcycsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmRlZmluZSA/Pz0ge307XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lW2tleV0gPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChidWlsZC5pbml0aWFsT3B0aW9ucy5idW5kbGUgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIE9uZSBvdXRwdXQgcGVyIHNvdXJjZTogZWFjaCBtb2R1bGUgZ2V0cyBvbmx5IHRoZSBzaGltcyBpdHMgb3duIGNvZGUgbmVlZHMsIHNvIGEgcGFnZSBpbXBvcnRpbmcgYSBwdXJlXG4gICAgICAgIC8vIG1vZHVsZSBvZiBhIGxpYnJhcnkgaXMgbGVmdCB3aXRoIGl0cyBnbG9iYWxzIHVudG91Y2hlZC5cbiAgICAgICAgY29uc3QgbGVhZGluZ0Jhbm5lciA9IGJ1aWxkLmluaXRpYWxPcHRpb25zLmJhbm5lcj8uWydqcyddID8/ICcnO1xuICAgICAgICBidWlsZC5vbkVuZCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgYWRkTW9kdWxlUHJlYW1ibGVzKHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGxlYWRpbmdCYW5uZXIsIG91dHB1dEZpbGVzOiByZXN1bHQub3V0cHV0RmlsZXMgPz8gW10gfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyID8/PSB7fTtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddID8/PSAnJztcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddICs9IG1ha2VQcmVwcm9jZXNzQmFubmVyKHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGlzRXNtIH0pO1xuICAgICAgfVxuXG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IC9cXC4oPzpqc3x0c3xjanN8bWpzfGN0c3xtdHMpJC8gfSwgYXN5bmMgKCRhcmd1bWVudHMpID0+IHtcbiAgICAgICAgbGV0IGNvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoJGFyZ3VtZW50cy5wYXRoLCAndXRmLTgnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXBsYWNlbWVudHMpKSB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGUgPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICAgICAgaWYgKCFjb250ZW50cy5pbmNsdWRlcyhrZXkpIHx8IGNvbnRlbnRzLmluY2x1ZGVzKGB2YXIgJHt2YXJpYWJsZX1gKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYCgke1N0cmluZyh2YWx1ZSl9KSgpYCA6IHRvSnNvbih2YWx1ZSwgeyBmdW5jdGlvbkhhbmRsaW5nTW9kZTogRnVuY3Rpb25IYW5kbGluZ01vZGUuRnVsbCB9KTtcbiAgICAgICAgICBjb250ZW50cyA9IGB2YXIgJHt2YXJpYWJsZX0gPSBnbG9iYWxUaGlzWycke2tleX0nXSA/PyAke3ZhbHVlU3RyaW5nfTtcXG4ke2NvbnRlbnRzfWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIQUNLOiBUaGUgJHsnJ30gcGFydCBpcyB1c2VkIHRvIGVuc3VyZSBPYnNpZGlhbiBsb2FkcyB0aGUgcGx1Z2luIHByb3Blcmx5LFxuICAgICAgICAvLyBPdGhlcndpc2UsIGl0IHN0b3BzIGxvYWRpbmcgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNvdXJjZU1hcHBpbmdVUkwgY29tbWVudC5cblxuICAgICAgICBjb250ZW50cyA9IHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6IGNvbnRlbnRzLFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgLS0gSXQgaXMgaW50ZW50aW9uYWwsIHRoZSBzdHJpbmcgbG9va3MgbGlrZSBhIHRlbXBsYXRlIGxpdGVyYWwsIGJ1dCBpdCBpcyBub3QuXG4gICAgICAgICAgcmVwbGFjZXI6ICdgXFxuLy8jJHtcXCdcXCd9IHNvdXJjZU1hcHBpbmdVUkwnLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiAvYFxccj9cXG5cXC9cXC8jIHNvdXJjZU1hcHBpbmdVUkwvZ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnRzLFxuICAgICAgICAgIGxvYWRlcjogJ3RzJ1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4vKipcbiAqIFByZXBlbmRzIHRvIGVhY2ggZW1pdHRlZCBtb2R1bGUgdGhlIHByZWFtYmxlIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIG5vdGhpbmcgd2hlbiBpdCBuZWVkcyBub25lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZW1pdHRlZCBtb2R1bGVzLCB0aGUgYmFubmVyIHRoZSBjYWxsZXIgYWxyZWFkeSBwdXQgZmlyc3QsIGFuZCB0aGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMuXG4gKi9cbmZ1bmN0aW9uIGFkZE1vZHVsZVByZWFtYmxlcyhwYXJhbXM6IEFkZE1vZHVsZVByZWFtYmxlc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLCBsZWFkaW5nQmFubmVyLCBvdXRwdXRGaWxlcyB9ID0gcGFyYW1zO1xuICBmb3IgKGNvbnN0IG91dHB1dEZpbGUgb2Ygb3V0cHV0RmlsZXMpIHtcbiAgICBpZiAoIUpTX09VVFBVVF9SRUdfRVhQLnRlc3Qob3V0cHV0RmlsZS5wYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29kZSA9IG91dHB1dEZpbGUudGV4dDtcbiAgICBjb25zdCBwcmVhbWJsZSA9IG1ha2VNb2R1bGVQcmVhbWJsZShnZXRNb2R1bGVTaGltTmVlZHMoY29kZSksIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zKTtcbiAgICBpZiAocHJlYW1ibGUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBvdXRwdXRGaWxlLmNvbnRlbnRzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGluc2VydFByZWFtYmxlKHsgY29kZSwgbGVhZGluZ0Jhbm5lciwgcHJlYW1ibGUgfSkpO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgbW9kdWxlLCBzZWUgYWJvdmUuICovXG5mdW5jdGlvbiBnZXRDanNJbXBvcnRNZXRhVXJsKCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZSgnbm9kZTp1cmwnKSBhcyBVcmxNb2R1bGU7XG4gICAgaWYgKHR5cGVvZiB1cmwucGF0aFRvRmlsZVVSTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gdGhlIHBhZ2UgVVJMLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGVudmlyb25tZW50IGlzIHVua25vd24uXG4gIHJldHVybiAoZ2xvYmFsVGhpcyBhcyBMb2NhdGlvbkhvc3QpLmxvY2F0aW9uPy5ocmVmID8/ICcnO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuZnVuY3Rpb24gZ2V0SWRlbnRpZmllclVzYWdlKG5vZGU6IElkZW50aWZpZXIpOiBJZGVudGlmaWVyVXNhZ2Uge1xuICBjb25zdCB7IHBhcmVudCB9ID0gbm9kZTtcbiAgaWYgKFxuICAgIChpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihwYXJlbnQpIHx8IGlzUHJvcGVydHlBc3NpZ25tZW50KHBhcmVudCkgfHwgaXNNZXRob2REZWNsYXJhdGlvbihwYXJlbnQpIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihwYXJlbnQpXG4gICAgICB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24ocGFyZW50KSlcbiAgICAmJiBwYXJlbnQubmFtZSA9PT0gbm9kZVxuICApIHtcbiAgICByZXR1cm4gSWRlbnRpZmllclVzYWdlLk1lbWJlcjtcbiAgfVxuXG4gIHJldHVybiAoaXNWYXJpYWJsZURlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNGdW5jdGlvbkRlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNDbGFzc0RlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNQYXJhbWV0ZXIocGFyZW50KSB8fCBpc0JpbmRpbmdFbGVtZW50KHBhcmVudClcbiAgICAgIHx8IGlzSW1wb3J0Q2xhdXNlKHBhcmVudCkgfHwgaXNJbXBvcnRTcGVjaWZpZXIocGFyZW50KSB8fCBpc05hbWVzcGFjZUltcG9ydChwYXJlbnQpKVxuICAgICAgJiYgcGFyZW50Lm5hbWUgPT09IG5vZGVcbiAgICA/IElkZW50aWZpZXJVc2FnZS5CaW5kaW5nXG4gICAgOiBJZGVudGlmaWVyVXNhZ2UuUmVhZDtcbn1cblxuLyoqXG4gKiBSZWFkcyB3aGljaCBzaGltcyBhbiBlbWl0dGVkIG1vZHVsZSBuZWVkcyBmcm9tIGl0cyBjb2RlLlxuICpcbiAqIC0gYGVuc3VyZUJyb3dzZXJQcm9jZXNzYDogaXQgcmVhZHMgYSBgcHJvY2Vzc2AgaXQgZG9lcyBub3QgYmluZCBpdHNlbGYsIG9yIGl0IGxvYWRzIGEgYmFyZSBwYWNrYWdlIHRoYXQgaXMgbm90IGFcbiAqICAgYG5vZGU6YCBidWlsdC1pbi4gVGhlIHNlY29uZCBjYXNlIGlzIHRoZXJlIGJlY2F1c2Ugc3VjaCBhIHBhY2thZ2UgKGBwYXRoLWJyb3dzZXJpZnlgIHJlYWRzIGBwcm9jZXNzLmN3ZCgpYCkgY2Fubm90XG4gKiAgIGNhcnJ5IGEgc2hpbSBvZiBpdHMgb3duLCBhbmQgaW4gYW4gdW5idW5kbGVkIGJ1aWxkIGl0cyBpbXBvcnRlciBpcyB0aGUgb25seSBtb2R1bGUgdGhhdCBjYW4uXG4gKiAtIGBlbnN1cmVEaXNwb3NlU3ltYm9sc2A6IGl0IG5hbWVzIGBTeW1ib2wuZGlzcG9zZWAgb3IgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgLCBvciBob2xkcyBlc2J1aWxkJ3MgYF9fa25vd25TeW1ib2xgXG4gKiAgIGhlbHBlciwgd2hpY2ggYSBsb3dlcmVkIGB1c2luZ2AgZW1pdHMuXG4gKiAtIGBfX25hbWVgOiBpdCByZWFkcyBhIGBfX25hbWVgIGl0IGRvZXMgbm90IGRlY2xhcmUuXG4gKlxuICogQHBhcmFtIGNvZGUgLSBUaGUgZW1pdHRlZCBtb2R1bGUuXG4gKiBAcmV0dXJucyBXaGF0IHRoZSBtb2R1bGUgbmVlZHMuXG4gKi9cbmZ1bmN0aW9uIGdldE1vZHVsZVNoaW1OZWVkcyhjb2RlOiBzdHJpbmcpOiBNb2R1bGVTaGltTmVlZHMge1xuICBjb25zdCBzb3VyY2VGaWxlID0gY3JlYXRlU291cmNlRmlsZSgnbW9kdWxlLmpzJywgY29kZSwgU2NyaXB0VGFyZ2V0LkxhdGVzdCwgdHJ1ZSwgU2NyaXB0S2luZC5KUyk7XG4gIGNvbnN0IGJvdW5kTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgcmVhZE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGxldCBpc0JhcmVJbXBvcnRGb3VuZCA9IGZhbHNlO1xuICBsZXQgaXNEaXNwb3NlU3ltYm9sRm91bmQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiB2aXNpdChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgY29uc3Qgc3BlY2lmaWVyID0gZ2V0TW9kdWxlU3BlY2lmaWVyKG5vZGUpO1xuICAgIGlmIChzcGVjaWZpZXIgIT09IHVuZGVmaW5lZCAmJiAhTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAudGVzdChzcGVjaWZpZXIpKSB7XG4gICAgICBpc0JhcmVJbXBvcnRGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSkgJiYgaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikgJiYgbm9kZS5leHByZXNzaW9uLnRleHQgPT09ICdTeW1ib2wnXG4gICAgICAmJiBESVNQT1NFX1NZTUJPTF9OQU1FUy5oYXMobm9kZS5uYW1lLnRleHQpXG4gICAgKSB7XG4gICAgICBpc0Rpc3Bvc2VTeW1ib2xGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlzSWRlbnRpZmllcihub2RlKSkge1xuICAgICAgaWYgKG5vZGUudGV4dCA9PT0gS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FKSB7XG4gICAgICAgIGlzRGlzcG9zZVN5bWJvbEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNhZ2UgPSBnZXRJZGVudGlmaWVyVXNhZ2Uobm9kZSk7XG4gICAgICBpZiAodXNhZ2UgPT09IElkZW50aWZpZXJVc2FnZS5CaW5kaW5nKSB7XG4gICAgICAgIGJvdW5kTmFtZXMuYWRkKG5vZGUudGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKHVzYWdlID09PSBJZGVudGlmaWVyVXNhZ2UuUmVhZCkge1xuICAgICAgICByZWFkTmFtZXMuYWRkKG5vZGUudGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0KTtcbiAgfVxuICB2aXNpdChzb3VyY2VGaWxlKTtcblxuICBmdW5jdGlvbiBpc0ZyZWVSZWFkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkTmFtZXMuaGFzKG5hbWUpICYmICFib3VuZE5hbWVzLmhhcyhuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNCcm93c2VyUHJvY2Vzc05lZWRlZDogaXNGcmVlUmVhZCgncHJvY2VzcycpIHx8IGlzQmFyZUltcG9ydEZvdW5kLFxuICAgIGlzRGlzcG9zZVN5bWJvbHNOZWVkZWQ6IGlzRGlzcG9zZVN5bWJvbEZvdW5kLFxuICAgIGlzTmFtZU5lZWRlZDogaXNGcmVlUmVhZCgnX19uYW1lJylcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TW9kdWxlU3BlY2lmaWVyKG5vZGU6IE5vZGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoKGlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkgfHwgaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkgJiYgbm9kZS5tb2R1bGVTcGVjaWZpZXIgIT09IHVuZGVmaW5lZCAmJiBpc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpKSB7XG4gICAgcmV0dXJuIG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQ7XG4gIH1cblxuICBpZiAoaXNDYWxsRXhwcmVzc2lvbihub2RlKSkge1xuICAgIGNvbnN0IFtmaXJzdEFyZ3VtZW50XSA9IG5vZGUuYXJndW1lbnRzO1xuICAgIGNvbnN0IGlzTG9hZGVyID0gbm9kZS5leHByZXNzaW9uLmtpbmQgPT09IFN5bnRheEtpbmQuSW1wb3J0S2V5d29yZCB8fCAoaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikgJiYgbm9kZS5leHByZXNzaW9uLnRleHQgPT09ICdyZXF1aXJlJyk7XG4gICAgaWYgKGlzTG9hZGVyICYmIGZpcnN0QXJndW1lbnQgIT09IHVuZGVmaW5lZCAmJiBpc1N0cmluZ0xpdGVyYWwoZmlyc3RBcmd1bWVudCkpIHtcbiAgICAgIHJldHVybiBmaXJzdEFyZ3VtZW50LnRleHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHNlZSBhYm92ZS4gKi9cbmZ1bmN0aW9uIGluaXRDanMoKTogdm9pZCB7XG4gIGNvbnN0IGdsb2JhbFRoaXNSZWNvcmQgPSBnbG9iYWxUaGlzIGFzIEdlbmVyaWNPYmplY3Q7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGdsb2JhbFRoaXNSZWNvcmRbJ19fbmFtZSddID8/PSBrZWVwTmFtZTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19leHRyYWN0RGVmYXVsdCddID8/PSBleHRyYWN0RGVmYXVsdDtcblxuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyAtLSBTZXJpYWxpemVkIHdpdGggaW5pdENqcyBpbnRvIHRoZSBiYW5uZXI7IGF0IG1vZHVsZSBzY29wZSBpdCB3b3VsZCBiZSBsZWZ0IG91dCBvZiBpdC5cbiAgZnVuY3Rpb24gZXh0cmFjdERlZmF1bHQobW9kdWxlOiBQYXJ0aWFsPEVzbU1vZHVsZT4gfCB1bmRlZmluZWQpOiB1bmtub3duIHtcbiAgICByZXR1cm4gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtb2R1bGUgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RXNtKCk6IHZvaWQge1xuICBlbnN1cmVEaXNwb3NlU3ltYm9scygpO1xuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuLyoqXG4gKiBJbnNlcnRzIHRoZSBwcmVhbWJsZSBhZnRlciB0aGUgY2FsbGVyJ3MgbGVhZGluZyBiYW5uZXIsIGFuZCBzaGlmdHMgYW4gaW5saW5lIHNvdXJjZSBtYXAgZG93biBieSB0aGUgbGluZXMgaXQgYWRkcyxcbiAqIHNvIHRoZSBtb2R1bGUncyBvd24gbGluZXMga2VlcCBtYXBwaW5nIG9udG8gdGhlaXIgc291cmNlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG1vZHVsZSwgaXRzIGxlYWRpbmcgYmFubmVyIGFuZCB0aGUgcHJlYW1ibGUuXG4gKiBAcmV0dXJucyBUaGUgbW9kdWxlIHdpdGggdGhlIHByZWFtYmxlIGluIGl0LlxuICovXG5mdW5jdGlvbiBpbnNlcnRQcmVhbWJsZShwYXJhbXM6IEluc2VydFByZWFtYmxlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBjb2RlLCBsZWFkaW5nQmFubmVyLCBwcmVhbWJsZSB9ID0gcGFyYW1zO1xuICBjb25zdCBpbnNlcnRBdCA9IGxlYWRpbmdCYW5uZXIuZW5kc1dpdGgoJ1xcbicpICYmIGNvZGUuc3RhcnRzV2l0aChsZWFkaW5nQmFubmVyKSA/IGxlYWRpbmdCYW5uZXIubGVuZ3RoIDogMDtcbiAgY29uc3QgYWRkZWRMaW5lQ291bnQgPSBwcmVhbWJsZS5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMTtcbiAgbGV0IHNoaWZ0ZWRDb2RlID0gY29kZTtcbiAgY29uc3Qgc291cmNlTWFwU3RhcnQgPSBjb2RlLmxhc3RJbmRleE9mKElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCk7XG4gIGlmIChzb3VyY2VNYXBTdGFydCAhPT0gLTEpIHtcbiAgICBjb25zdCBkYXRhU3RhcnQgPSBzb3VyY2VNYXBTdGFydCArIElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWC5sZW5ndGg7XG4gICAgY29uc3QgZGF0YSA9IGNvZGUuc2xpY2UoZGF0YVN0YXJ0KS50cmltRW5kKCk7XG4gICAgY29uc3Qgc291cmNlTWFwID0gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShkYXRhLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04JykpIGFzIFNvdXJjZU1hcFdpdGhNYXBwaW5ncztcbiAgICBzb3VyY2VNYXAubWFwcGluZ3MgPSAnOycucmVwZWF0KGFkZGVkTGluZUNvdW50KSArIHNvdXJjZU1hcC5tYXBwaW5ncztcbiAgICBzaGlmdGVkQ29kZSA9IGNvZGUuc2xpY2UoMCwgZGF0YVN0YXJ0KSArIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKSArIGNvZGUuc2xpY2UoZGF0YVN0YXJ0ICsgZGF0YS5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBzaGlmdGVkQ29kZS5zbGljZSgwLCBpbnNlcnRBdCkgKyBwcmVhbWJsZSArIHNoaWZ0ZWRDb2RlLnNsaWNlKGluc2VydEF0KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHByZWFtYmxlIG9mIG9uZSB1bmJ1bmRsZWQgbW9kdWxlOiB0aGUgc2hpbXMgaXQgbmVlZHMgaW4gb25lIHNoYXJlZCBzY29wZSwgdGhlbiB0aGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMuXG4gKlxuICogQHBhcmFtIG5lZWRzIC0gV2hhdCB0aGUgbW9kdWxlIG5lZWRzLlxuICogQHBhcmFtIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zIC0gVGhlIGNhbGxlcidzIGV4dHJhIGluaXRzLCB3aGljaCBldmVyeSBtb2R1bGUgZ2V0cy5cbiAqIEByZXR1cm5zIFRoZSBwcmVhbWJsZSwgZW1wdHkgd2hlbiB0aGUgbW9kdWxlIG5lZWRzIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNb2R1bGVQcmVhbWJsZShuZWVkczogTW9kdWxlU2hpbU5lZWRzLCBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW10pOiBzdHJpbmcge1xuICBjb25zdCBzaGltczogKCguLi5hcmd1bWVudHNfOiBuZXZlcltdKSA9PiB1bmtub3duKVtdID0gW107XG4gIGNvbnN0IGNhbGxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuZWVkcy5pc0Rpc3Bvc2VTeW1ib2xzTmVlZGVkKSB7XG4gICAgc2hpbXMucHVzaChlbnN1cmVEaXNwb3NlU3ltYm9scyk7XG4gICAgY2FsbHMucHVzaCgnZW5zdXJlRGlzcG9zZVN5bWJvbHMoKTsnKTtcbiAgfVxuXG4gIGlmIChuZWVkcy5pc0Jyb3dzZXJQcm9jZXNzTmVlZGVkKSB7XG4gICAgc2hpbXMucHVzaChlbnN1cmVCcm93c2VyUHJvY2Vzcyk7XG4gICAgY2FsbHMucHVzaCgnZW5zdXJlQnJvd3NlclByb2Nlc3MoKTsnKTtcbiAgfVxuXG4gIGlmIChuZWVkcy5pc05hbWVOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGtlZXBOYW1lKTtcbiAgICBjYWxscy5wdXNoKCdnbG9iYWxUaGlzW1xcJ19fbmFtZVxcJ10gPz89IGtlZXBOYW1lOycpO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVkU2NvcGUgPSBzaGltcy5sZW5ndGggPT09IDAgPyAnJyA6IGAoZnVuY3Rpb24gKCkge1xcbiR7c2hpbXMubWFwKFN0cmluZykuam9pbignXFxuXFxuJyl9XFxuXFxuJHtjYWxscy5qb2luKCdcXG4nKX1cXG59KSgpO1xcbmA7XG4gIHJldHVybiBzaGFyZWRTY29wZSArIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLm1hcCgoZnVuY3Rpb25fKSA9PiBgKCR7U3RyaW5nKGZ1bmN0aW9uXyl9KSgpO1xcbmApLmpvaW4oJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1DQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsZ0JBQWdCO0FBQ3pCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLE1BQU0sdUJBQXVCLG9CQUFJLElBQUksQ0FBQyxnQkFBZ0IsU0FBUyxDQUFDO0FBQ2hFLE1BQU0sMkJBQTJCO0FBQ2pDLE1BQU0sb0JBQW9CO0FBRTFCLE1BQU0sMkJBQTJCO0FBRWpDLE1BQU0sNkJBQTZCO0FBbUk1QixTQUFTLHVCQUE2QjtBQUMzQyxRQUFNLGlCQUFnRDtBQUFBLElBQ3BELFNBQVM7QUFBQSxJQUNULE1BQU07QUFDSixhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FBSyxDQUFDO0FBQUEsSUFDTixVQUFVO0FBQUEsRUFDWjtBQUVBLFFBQU0sa0JBQWtCLFdBQVc7QUFFbkMsTUFBSSxDQUFDLGlCQUFpQjtBQUNwQixlQUFXLFVBQVU7QUFDckI7QUFBQSxFQUNGO0FBRUEsTUFBSSxnQkFBZ0IsVUFBVSxNQUFNO0FBQ2xDO0FBQUEsRUFDRjtBQUVBLFFBQU0sd0JBQXdCO0FBRTlCLGFBQVcsQ0FBQyxLQUFLLEtBQUss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
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBBbiB1bmJ1bmRsZWRcbiAqIGJ1aWxkIChgYnVuZGxlOiBmYWxzZWAsIG9uZSBvdXRwdXQgcGVyIHNvdXJjZSkgZ2V0cyBubyBiYW5uZXI6IGVhY2ggZW1pdHRlZCBtb2R1bGUgZ2V0cyBhIHByZWFtYmxlIGhvbGRpbmcgb25seSB0aGVcbiAqIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIGEgbW9kdWxlIHRoYXQgbmVlZHMgbm9uZSBnZXRzIG5vdGhpbmcuIFRoYXQgaXNcbiAqIHdoeSB0aGV5IGFsbCBsaXZlIGluIHRoaXMgbW9kdWxlOiBlc2J1aWxkIGNvbXBpbGVzIGEgY3Jvc3MtbW9kdWxlIGNhbGwgdG8gYCgwLCBpbXBvcnRfbW9kdWxlLmZuKSjigKYpYCxcbiAqIHdoaWNoIHdvdWxkIG5hbWUgYSBiaW5kaW5nIHRoZSBlbWl0dGVkIGJ1bmRsZSBkb2VzIG5vdCBoYXZlLiBTYW1lLW1vZHVsZSByZWZlcmVuY2VzIHN0YXkgYmFyZSwgYW5kXG4gKiB7QGxpbmsgbWFrZVByZXByb2Nlc3NCYW5uZXJ9IHNlcmlhbGl6ZXMgdGhlIHNoaW1zIGFsb25nc2lkZSB0aGUgYGluaXRgIGZ1bmN0aW9uIHNvIHRoZXkgYXJlIGluIHNjb3BlIHRoZXJlLiBBIHNoaW1cbiAqIHRoYXQgaXMgbm90IHNlcmlhbGl6ZWQgc2lsZW50bHkgZGVncmFkZXMgdG8gd2hhdGV2ZXIgdGhlIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGhvbGRzIHVuZGVyIHRoYXQgbmFtZSDigJQgd2hpY2hcbiAqIGlzIGhvdyBgX19uYW1lYCB1c2VkIHRvIGVuZCB1cCBob2xkaW5nIGB3aW5kb3cubmFtZWAuXG4gKlxuICogQSBjYWxsZXIgdGhhdCBuZWVkcyBtb3JlIGluIHRoZSBiYW5uZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gYnVpbGRlciBwYXRjaGVzIGByZXF1aXJlYCkgaGFuZHMgaW5cbiAqIHtAbGluayBQcmVwcm9jZXNzUGx1Z2luT3B0aW9ucy5hZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uc30uIEVhY2ggb25lIGlzIHNlcmlhbGl6ZWQgYXMgaXRzIE9XTiBpbW1lZGlhdGVseVxuICogaW52b2tlZCBmdW5jdGlvbiBhZnRlciB0aGUgc2hhcmVkIHNjb3BlLCBzbyBpdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkOiBpdCBjYW5ub3Qgc2VlIHRoZSBzaGltcywgYW5kIGNhbGxpbmcgb25lXG4gKiBmcm9tIGFub3RoZXIgbW9kdWxlIHdvdWxkIGhpdCBleGFjdGx5IHRoZSBjcm9zcy1tb2R1bGUgdHJhcCBhYm92ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHR5cGUge1xuICBPdXRwdXRGaWxlLFxuICBQbHVnaW5cbn0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7XG4gIElkZW50aWZpZXIsXG4gIE5vZGVcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU291cmNlRmlsZSxcbiAgZm9yRWFjaENoaWxkLFxuICBpc0JpbmRpbmdFbGVtZW50LFxuICBpc0NhbGxFeHByZXNzaW9uLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRXhwb3J0RGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW1wb3J0Q2xhdXNlLFxuICBpc0ltcG9ydERlY2xhcmF0aW9uLFxuICBpc0ltcG9ydFNwZWNpZmllcixcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNOYW1lc3BhY2VJbXBvcnQsXG4gIGlzUGFyYW1ldGVyLFxuICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbixcbiAgaXNQcm9wZXJ0eUFzc2lnbm1lbnQsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIGlzVmFyaWFibGVEZWNsYXJhdGlvbixcbiAgU2NyaXB0S2luZCxcbiAgU2NyaXB0VGFyZ2V0LFxuICBTeW50YXhLaW5kXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5jb25zdCBESVNQT1NFX1NZTUJPTF9OQU1FUyA9IG5ldyBTZXQoWydhc3luY0Rpc3Bvc2UnLCAnZGlzcG9zZSddKTtcbmNvbnN0IElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCA9ICcvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCc7XG5jb25zdCBKU19PVVRQVVRfUkVHX0VYUCA9IC9cXC5bY21dP2pzJC87XG4vLyBFc2J1aWxkJ3MgaGVscGVyIGJlaGluZCBhIGxvd2VyZWQgYHVzaW5nYCwgd2hpY2ggbG9va3MgdXAgYFN5bWJvbC5kaXNwb3NlYCBieSBuYW1lLlxuY29uc3QgS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FID0gJ19fa25vd25TeW1ib2wnO1xuLy8gQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBvciBhIGBub2RlOmAgYnVpbHQtaW46IGFueXRoaW5nIGVsc2UgbmFtZXMgYSBwYWNrYWdlLlxuY29uc3QgTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAgPSAvXig/OlxcLnxcXC98bm9kZTopLztcblxuZW51bSBJZGVudGlmaWVyVXNhZ2Uge1xuICBCaW5kaW5nID0gJ2JpbmRpbmcnLFxuICBNZW1iZXIgPSAnbWVtYmVyJyxcbiAgUmVhZCA9ICdyZWFkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBZGRNb2R1bGVQcmVhbWJsZXNQYXJhbXMge1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW107XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZXM6IHJlYWRvbmx5IE91dHB1dEZpbGVbXTtcbn1cblxuLyoqXG4gKiBBIGJyb3dzZXItZmxhdm9yZWQgc3RhbmQtaW4gZm9yIE5vZGUncyBgcHJvY2Vzc2AgZ2xvYmFsLlxuICovXG5pbnRlcmZhY2UgQnJvd3NlclByb2Nlc3MgZXh0ZW5kcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgcHJvY2VzcyBhcyBhIGJyb3dzZXIgb25lLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2Ugc2VsZWN0cyBpdHMgYnJvd3NlciBlbnRyeSBwb2ludCBvbiBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGJyb3dzZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIHRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB7QGxpbmsgZW5zdXJlRGlzcG9zZVN5bWJvbHN9IHJlYWRzIGFuZCB3cml0ZXMsIHdpdGggdGhlIHR3byBkaXNwb3NlXG4gKiBzeW1ib2xzIG9wdGlvbmFsIGJlY2F1c2UgYW4gZW5naW5lIHdpdGhvdXQgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBkb2VzIG5vdCBoYXZlIHRoZW0uXG4gKi9cbmludGVyZmFjZSBEaXNwb3NlU3ltYm9sSG9zdCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE1pc3NpbmcgZGlzcG9zYWwgc3ltYm9scyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxuICBhc3luY0Rpc3Bvc2U/OiBzeW1ib2w7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE1pc3NpbmcgZGlzcG9zYWwgc3ltYm9scyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxuICBkaXNwb3NlPzogc3ltYm9sO1xuICByZWFkb25seSBmb3I6IChrZXk6IHN0cmluZykgPT4gc3ltYm9sO1xufVxuXG5pbnRlcmZhY2UgRXNtTW9kdWxlIHtcbiAgcmVhZG9ubHkgX19lc01vZHVsZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVmYXVsdDogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgYSBicm93c2VyIGdsb2JhbCB7QGxpbmsgZ2V0Q2pzSW1wb3J0TWV0YVVybH0gcmVhZHMsIG9wdGlvbmFsIGJlY2F1c2UgYSBub24tYnJvd3NlciBob3N0IGhhcyBub25lLlxuICovXG5pbnRlcmZhY2UgSW5zZXJ0UHJlYW1ibGVQYXJhbXMge1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJlYW1ibGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIExvY2F0aW9uSG9zdCB7XG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogUGFnZUxvY2F0aW9uO1xufVxuXG5pbnRlcmZhY2UgTW9kdWxlU2hpbU5lZWRzIHtcbiAgcmVhZG9ubHkgaXNCcm93c2VyUHJvY2Vzc05lZWRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNEaXNwb3NlU3ltYm9sc05lZWRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNOYW1lTmVlZGVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGFnZUxvY2F0aW9uIHtcbiAgcmVhZG9ubHkgaHJlZjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU291cmNlTWFwV2l0aE1hcHBpbmdzIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMgLS0gQWRkaW5nIGEgcHJlYW1ibGUgc2hpZnRzIHRoZSBzb3VyY2UgbWFwIG1hcHBpbmdzLlxuICBtYXBwaW5nczogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVXJsTW9kdWxlIHtcbiAgcmVhZG9ubHkgcGF0aFRvRmlsZVVSTDogdHlwZW9mIHBhdGhUb0ZpbGVVUkw7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgYnVuZGxlIHJ1bnMgYWdhaW5zdCBhIGBwcm9jZXNzYCBnbG9iYWwgdGhhdCBicm93c2VyLXRhcmdldGluZyBwYWNrYWdlcyByZWNvZ25pemUuXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHNvIGl0IG5ldmVyIHJ1bnMgaW4gdGhlIGJ1aWxkZXIgcHJvY2VzcyDigJQgYnV0IGl0IGlzIGFuIG9yZGluYXJ5XG4gKiBmdW5jdGlvbiBoZXJlLCBzbyBpdCBpcyB1bml0LXRlc3RlZCBkaXJlY3RseSByYXRoZXIgdGhhbiBieSBldmFsdWF0aW5nIHRoZSBiYW5uZXIgdGV4dC5cbiAqXG4gKiBGaWxscyBpbiB0aGUga2V5cyBNSVNTSU5HIGZyb20gYSBob3N0LXByb3ZpZGVkIGBwcm9jZXNzYCByYXRoZXIgdGhhbiByZXBsYWNpbmcgb3Igc2tpcHBpbmcgaXQuIE9ic2lkaWFuXG4gKiBNb2JpbGUgZXhwb3NlcyBhIHBhcnRpYWwgYHByb2Nlc3NgLCBhbmQgdGhlIHdob2xlLW9iamVjdCBndWFyZHMgdGhpcyByZXBsYWNlZCAoYGlmIChnbG9iYWxUaGlzLnByb2Nlc3MpIHtcbiAqIHJldHVybjsgfWAgLyBgZ2xvYmFsVGhpc1JlY29yZFsncHJvY2VzcyddID8/PSDigKZgKSB0b29rIHRoYXQgYXMgXCJhbHJlYWR5IHNoaW1tZWRcIiwgc28gYGJyb3dzZXJgIG5ldmVyXG4gKiBsYW5kZWQuIFRoZSBidW5kbGVkIGBkZWJ1Z2AgcGFja2FnZSB0aGVuIHNlbGVjdGVkIGl0cyBOb2RlIGVudHJ5IHBvaW50LCB3aGljaCBjYWxsc1xuICogYHJlcXVpcmUoJ3V0aWwnKS5kZXByZWNhdGUoKWAgYXQgbW9kdWxlIHRvcCBsZXZlbCwgYW5kIG9uIG1vYmlsZSB0aGUgcGF0Y2hlZCBgcmVxdWlyZWAgcmV0dXJucyBge31gIOKAlCBzb1xuICogdGhlIHBsdWdpbiB0aHJldyBiZWZvcmUgaXRzIGBvbmxvYWRgIHJhbi5cbiAqXG4gKiBBIHJlYWwgTm9kZSBvciBFbGVjdHJvbiBgcHJvY2Vzc2AgaXMgbGVmdCBjb21wbGV0ZWx5IHVudG91Y2hlZC4gYHByb2Nlc3MudmVyc2lvbnMubm9kZWAgaXMgdGhlIHNpZ25hbCBmb3JcbiAqIGl0LCBhbmQgaXQgaXMgc2VsZi1jb250YWluZWQsIHNvIGl0IGFsc28gaG9sZHMgaW4gdGhlIE5vZGUgQ0xJIGJ1bmRsZXMgdGhpcyBiYW5uZXIgaXMgZW1pdHRlZCBpbnRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQnJvd3NlclByb2Nlc3MoKTogdm9pZCB7XG4gIGNvbnN0IGJyb3dzZXJQcm9jZXNzOiBHZW5lcmljT2JqZWN0PEJyb3dzZXJQcm9jZXNzPiA9IHtcbiAgICBicm93c2VyOiB0cnVlLFxuICAgIGN3ZCgpIHtcbiAgICAgIHJldHVybiAnLyc7XG4gICAgfSxcbiAgICBlbnY6IHt9LFxuICAgIHBsYXRmb3JtOiAnYW5kcm9pZCdcbiAgfTtcblxuICBjb25zdCBleGlzdGluZ1Byb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3MgYXMgUGFydGlhbDxOb2RlSlMuUHJvY2Vzcz4gfCB1bmRlZmluZWQ7XG5cbiAgaWYgKCFleGlzdGluZ1Byb2Nlc3MpIHtcbiAgICBnbG9iYWxUaGlzLnByb2Nlc3MgPSBicm93c2VyUHJvY2VzcyBhcyBOb2RlSlMuUHJvY2VzcztcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZXhpc3RpbmdQcm9jZXNzLnZlcnNpb25zPy5ub2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdQcm9jZXNzUmVjb3JkID0gZXhpc3RpbmdQcm9jZXNzIGFzIEdlbmVyaWNPYmplY3Q7XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYnJvd3NlclByb2Nlc3MpKSB7XG4gICAgZXhpc3RpbmdQcm9jZXNzUmVjb3JkW2tleV0gPz89IHZhbHVlO1xuICB9XG5cbiAgZXhpc3RpbmdQcm9jZXNzUmVjb3JkWydicm93c2VyJ10gPSB0cnVlO1xufVxuXG4vKipcbiAqIE1ha2VzIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCBleGlzdCwgZmFsbGluZyBiYWNrIHRvIHRoZSByZWdpc3RyeSBzeW1ib2xzIGVzYnVpbGQnc1xuICogYHVzaW5nYCBoZWxwZXJzIGxvb2sgdXAuXG4gKlxuICogQHBhcmFtIHN5bWJvbENvbnN0cnVjdG9yIC0gVGhlIGBTeW1ib2xgIGNvbnN0cnVjdG9yIHRvIHBhdGNoLiBEZWZhdWx0cyB0byB0aGUgYW1iaWVudCBvbmU7IHRoZSBwYXJhbWV0ZXJcbiAqIGV4aXN0cyBzbyBhIHRlc3QgY2FuIGhhbmQgaW4gYW4gZW5naW5lIHRoYXQgbGFja3MgdGhlIHdlbGwta25vd24gc3ltYm9scy5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lci4gQSBkaXNwb3NhYmxlIGRlY2xhcmVzIGl0cyBtZXRob2QgdW5kZXIgdGhlIExJVEVSQUwga2V5XG4gKiBgW1N5bWJvbC5kaXNwb3NlXWAsIHdoaWxlIGVzYnVpbGQgbG93ZXJzIGV2ZXJ5IGB1c2luZ2AgdG8gYSBsb29rdXAgdGhyb3VnaCBgX19rbm93blN5bWJvbCgnZGlzcG9zZScpYCxcbiAqIHdoaWNoIGZhbGxzIGJhY2sgdG8gYFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJylgIHdoZW4gdGhlIGVuZ2luZSBoYXMgbm8gd2VsbC1rbm93biBzeW1ib2wuIE9uIHN1Y2ggYW5cbiAqIGVuZ2luZSB0aGUgbGl0ZXJhbCBrZXkgZXZhbHVhdGVzIHRvIGB1bmRlZmluZWRgLCB0aGUgbWV0aG9kIGxhbmRzIHVuZGVyIHRoZSBzdHJpbmcgYFwidW5kZWZpbmVkXCJgLCBhbmRcbiAqIGV2ZXJ5IGB1c2luZ2Agb2YgaXQgdGhyb3dzIGBPYmplY3Qgbm90IGRpc3Bvc2FibGVgLiBGaWxsaW5nIHRoZSB3ZWxsLWtub3duIHNsb3Qgd2l0aCB0aGF0IHNhbWUgcmVnaXN0cnlcbiAqIHN5bWJvbCBtYWtlcyBib3RoIHNpZGVzIG5hbWUgb25lIGtleSBvbiBldmVyeSBlbmdpbmUuIEEgaG9zdCB0aGF0IGFscmVhZHkgaGFzIHRoZSBzeW1ib2wgaXMgbGVmdFxuICogdW50b3VjaGVkOiBgPz89YCBuZXZlciByZWFjaGVzIHRoZSBhc3NpZ25tZW50LCB3aGljaCB0aGUgaG9zdCdzIG5vbi13cml0YWJsZSBwcm9wZXJ0eSB3b3VsZCByZWZ1c2UuXG4gKlxuICogVGhlIGRlZmF1bHQgbmFtZXMgYFN5bWJvbGAgYmFyZSBvbiBwdXJwb3NlOiBpdCBleGlzdHMgb24gZXZlcnkgZW5naW5lIHRoaXMgcnVucyBvbiwgYW5kIGEgYmFyZSByZWZlcmVuY2VcbiAqIHJlc29sdmVzIGFnYWluc3Qgd2hhdGV2ZXIgc2NvcGUgdGhlIGJhbm5lciBpcyBldmFsdWF0ZWQgaW4sIGV4YWN0bHkgYXMgdGhlIGJ1bmRsZSdzIG93blxuICogYFtTeW1ib2wuZGlzcG9zZV1gIGtleXMgZG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVEaXNwb3NlU3ltYm9scyhzeW1ib2xDb25zdHJ1Y3RvcjogRGlzcG9zZVN5bWJvbEhvc3QgPSBTeW1ib2wpOiB2b2lkIHtcbiAgc3ltYm9sQ29uc3RydWN0b3IuYXN5bmNEaXNwb3NlID8/PSBzeW1ib2xDb25zdHJ1Y3Rvci5mb3IoJ1N5bWJvbC5hc3luY0Rpc3Bvc2UnKTtcbiAgc3ltYm9sQ29uc3RydWN0b3IuZGlzcG9zZSA/Pz0gc3ltYm9sQ29uc3RydWN0b3IuZm9yKCdTeW1ib2wuZGlzcG9zZScpO1xufVxuXG4vKipcbiAqIFJldHVybnMgaXRzIGFyZ3VtZW50IHVuY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSBUaGUgdmFsdWUgdG8gcmV0dXJuLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHBhc3NlZCBpbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgd2hlcmUgaXQgc3RhbmRzIGluIGZvciBlc2J1aWxkJ3MgYF9fbmFtZWAgaGVscGVyIOKAlCB3aGljaCBuYW1lcyBhXG4gKiBmdW5jdGlvbiBhbmQgcmV0dXJucyBpdCDigJQgZm9yIGJ1bmRsZXMgdGhhdCByZWZlcmVuY2UgdGhlIGhlbHBlciB3aXRob3V0IGVtaXR0aW5nIHRoZWlyIG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlZXBOYW1lKCR1bmtub3duOiB1bmtub3duKTogdW5rbm93biB7XG4gIHJldHVybiAkdW5rbm93bjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGJhbm5lciBpbmplY3RlZCBhdCB0aGUgdG9wIG9mIGV2ZXJ5IGVtaXR0ZWQgYnVuZGxlLlxuICpcbiAqIGBTdHJpbmcoZm4pYCBjYXB0dXJlcyBvbmx5IHRoZSBmdW5jdGlvbidzIG93biBib2R5LCBzbyBldmVyeSBzaGltIHRoZSBgaW5pdGAgZnVuY3Rpb24gY2FsbHMgaGFzIHRvIGJlXG4gKiBzZXJpYWxpemVkIG5leHQgdG8gaXQgYW5kIHdyYXBwZWQgaW4gb25lIHNoYXJlZCBzY29wZTsgb3RoZXJ3aXNlIHRoZSBjYWxsIGl0IG1ha2VzIHJlc29sdmVzIGFnYWluc3QgdGhlXG4gKiBjb25zdW1lcidzIGdsb2JhbCBzY29wZSBhdCBydW50aW1lLiBTZWUgdGhpcyBmaWxlJ3MgYEBmaWxlYCByZW1hcmtzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGJhbm5lciBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGJhbm5lciBzb3VyY2UgdG8gcHJlcGVuZCB0byB0aGUgZW1pdHRlZCBidW5kbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUHJlcHJvY2Vzc0Jhbm5lcihvcHRpb25zOiBNYWtlUHJlcHJvY2Vzc0Jhbm5lck9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc2hpbXMgPSBpc0VzbSA/IFtlbnN1cmVEaXNwb3NlU3ltYm9scywgZW5zdXJlQnJvd3NlclByb2Nlc3NdIDogW2Vuc3VyZURpc3Bvc2VTeW1ib2xzLCBlbnN1cmVCcm93c2VyUHJvY2Vzcywga2VlcE5hbWVdO1xuICBjb25zdCBpbml0ID0gaXNFc20gPyBpbml0RXNtIDogaW5pdENqcztcbiAgY29uc3QgYWRkaXRpb25hbEluaXRzID0gYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMubWFwKChmdW5jdGlvbl8pID0+IGAoJHtTdHJpbmcoZnVuY3Rpb25fKX0pKCk7XFxuYCkuam9pbignJyk7XG4gIHJldHVybiBgXFxuKGZ1bmN0aW9uICgpIHtcXG4ke3NoaW1zLm1hcChTdHJpbmcpLmpvaW4oJ1xcblxcbicpfVxcblxcbigke1N0cmluZyhpbml0KX0pKCk7XFxufSkoKTtcXG4ke2FkZGl0aW9uYWxJbml0c31gO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBsdWdpbidzIHNldHVwIG5lZWRzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQsIGFuZCB0aGUgZnVuY3Rpb25zIGluIHRoZSBsYXRlciBpZ25vcmVkIHJhbmdlcyBhcmUgc2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciBhbmQgc28gcnVuIGluc2lkZSB0aGUgYnVpbHQgYnVuZGxlLCBuZXZlciBpbiB0aGlzIHByb2Nlc3MuIFRoZSBzaGltcyBhYm92ZSBhcmUgZGVsaWJlcmF0ZWx5IE5PVCBpZ25vcmVkOiB0aGV5IGFyZSBvcmRpbmFyeSBmdW5jdGlvbnMgaGVyZSBhbmQgYXJlIHVuaXQtdGVzdGVkIGRpcmVjdGx5LCBhbmQgbmVpdGhlciBhcmUgdGhlIHVuYnVuZGxlZC1idWlsZCBoZWxwZXJzLCB3aGljaCB0aGUgdGVzdHMgZHJpdmUgdGhyb3VnaCBhIHN0dWIgYnVpbGQuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IHByZXByb2Nlc3NlcyBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IGZpbGVzLlxuICpcbiAqIFRoaXMgcGx1Z2luIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6XG4gKiAtIFJlcGxhY2VzIGluc3RhbmNlcyBvZiBgaW1wb3J0KGRvdCltZXRhKGRvdCl1cmxgIHdpdGggYSBDb21tb25KUy1jb21wYXRpYmxlIGBfX2ZpbGVuYW1lYCBhbHRlcm5hdGl2ZS5cbiAqIC0gTW9kaWZpZXMgdGhlIGBzb3VyY2VNYXBwaW5nVVJMYCBjb21tZW50IHNvIGEgdGVtcGxhdGUgbGl0ZXJhbCBlbmRpbmcgYSBmaWxlIGRvZXMgbm90IHN3YWxsb3cgaXQuXG4gKiAtIEFkZHMgYSBiYXNpYyBgcHJvY2Vzc2Agb2JqZWN0IHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgYHByb2Nlc3NgIGlzIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkLlxuICogLSBGaWxscyBpbiBgU3ltYm9sLmRpc3Bvc2VgIC8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIG9uIGVuZ2luZXMgdGhhdCBsYWNrIHRoZW0sIHNvIGB1c2luZ2Agd29ya3MgdGhlcmUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIGBQbHVnaW5gIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhlIHByZXByb2Nlc3NpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwcm9jZXNzUGx1Z2luKG9wdGlvbnM6IFByZXByb2Nlc3NQbHVnaW5PcHRpb25zID0ge30pOiBQbHVnaW4ge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zID0gW10sIGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlciA9IGdldENqc0ltcG9ydE1ldGFVcmwsIGlzRXNtID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlcGxhY2VtZW50cyA9IGlzRXNtXG4gICAgPyB7fVxuICAgIDoge1xuICAgICAgW1xuICAgICAgICByZXBsYWNlQWxsKHtcbiAgICAgICAgICAkc3RyaW5nOiAnaW1wb3J0KGRvdCltZXRhKGRvdCl1cmwnLFxuICAgICAgICAgIHJlcGxhY2VyOiAnLicsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6ICcoZG90KSdcbiAgICAgICAgfSlcbiAgICAgIF06IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlclxuICAgIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAncHJlcHJvY2VzcycsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmRlZmluZSA/Pz0ge307XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lW2tleV0gPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChidWlsZC5pbml0aWFsT3B0aW9ucy5idW5kbGUgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIE9uZSBvdXRwdXQgcGVyIHNvdXJjZTogZWFjaCBtb2R1bGUgZ2V0cyBvbmx5IHRoZSBzaGltcyBpdHMgb3duIGNvZGUgbmVlZHMsIHNvIGEgcGFnZSBpbXBvcnRpbmcgYSBwdXJlXG4gICAgICAgIC8vIG1vZHVsZSBvZiBhIGxpYnJhcnkgaXMgbGVmdCB3aXRoIGl0cyBnbG9iYWxzIHVudG91Y2hlZC5cbiAgICAgICAgY29uc3QgbGVhZGluZ0Jhbm5lciA9IGJ1aWxkLmluaXRpYWxPcHRpb25zLmJhbm5lcj8uWydqcyddID8/ICcnO1xuICAgICAgICBidWlsZC5vbkVuZCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgYWRkTW9kdWxlUHJlYW1ibGVzKHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGxlYWRpbmdCYW5uZXIsIG91dHB1dEZpbGVzOiByZXN1bHQub3V0cHV0RmlsZXMgPz8gW10gfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyID8/PSB7fTtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddID8/PSAnJztcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddICs9IG1ha2VQcmVwcm9jZXNzQmFubmVyKHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGlzRXNtIH0pO1xuICAgICAgfVxuXG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IC9cXC4oPzpqc3x0c3xjanN8bWpzfGN0c3xtdHMpJC8gfSwgYXN5bmMgKCRhcmd1bWVudHMpID0+IHtcbiAgICAgICAgbGV0IGNvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoJGFyZ3VtZW50cy5wYXRoLCAndXRmLTgnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXBsYWNlbWVudHMpKSB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGUgPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICAgICAgaWYgKCFjb250ZW50cy5pbmNsdWRlcyhrZXkpIHx8IGNvbnRlbnRzLmluY2x1ZGVzKGB2YXIgJHt2YXJpYWJsZX1gKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYCgke1N0cmluZyh2YWx1ZSl9KSgpYCA6IHRvSnNvbih2YWx1ZSwgeyBmdW5jdGlvbkhhbmRsaW5nTW9kZTogRnVuY3Rpb25IYW5kbGluZ01vZGUuRnVsbCB9KTtcbiAgICAgICAgICBjb250ZW50cyA9IGB2YXIgJHt2YXJpYWJsZX0gPSBnbG9iYWxUaGlzWycke2tleX0nXSA/PyAke3ZhbHVlU3RyaW5nfTtcXG4ke2NvbnRlbnRzfWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIQUNLOiBUaGUgJHsnJ30gcGFydCBpcyB1c2VkIHRvIGVuc3VyZSBPYnNpZGlhbiBsb2FkcyB0aGUgcGx1Z2luIHByb3Blcmx5LFxuICAgICAgICAvLyBPdGhlcndpc2UsIGl0IHN0b3BzIGxvYWRpbmcgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNvdXJjZU1hcHBpbmdVUkwgY29tbWVudC5cblxuICAgICAgICBjb250ZW50cyA9IHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6IGNvbnRlbnRzLFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgLS0gSXQgaXMgaW50ZW50aW9uYWwsIHRoZSBzdHJpbmcgbG9va3MgbGlrZSBhIHRlbXBsYXRlIGxpdGVyYWwsIGJ1dCBpdCBpcyBub3QuXG4gICAgICAgICAgcmVwbGFjZXI6ICdgXFxuLy8jJHtcXCdcXCd9IHNvdXJjZU1hcHBpbmdVUkwnLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiAvYFxccj9cXG5cXC9cXC8jIHNvdXJjZU1hcHBpbmdVUkwvZ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnRzLFxuICAgICAgICAgIGxvYWRlcjogJ3RzJ1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4vKipcbiAqIFByZXBlbmRzIHRvIGVhY2ggZW1pdHRlZCBtb2R1bGUgdGhlIHByZWFtYmxlIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIG5vdGhpbmcgd2hlbiBpdCBuZWVkcyBub25lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZW1pdHRlZCBtb2R1bGVzLCB0aGUgYmFubmVyIHRoZSBjYWxsZXIgYWxyZWFkeSBwdXQgZmlyc3QsIGFuZCB0aGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMuXG4gKi9cbmZ1bmN0aW9uIGFkZE1vZHVsZVByZWFtYmxlcyhwYXJhbXM6IEFkZE1vZHVsZVByZWFtYmxlc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLCBsZWFkaW5nQmFubmVyLCBvdXRwdXRGaWxlcyB9ID0gcGFyYW1zO1xuICBmb3IgKGNvbnN0IG91dHB1dEZpbGUgb2Ygb3V0cHV0RmlsZXMpIHtcbiAgICBpZiAoIUpTX09VVFBVVF9SRUdfRVhQLnRlc3Qob3V0cHV0RmlsZS5wYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29kZSA9IG91dHB1dEZpbGUudGV4dDtcbiAgICBjb25zdCBwcmVhbWJsZSA9IG1ha2VNb2R1bGVQcmVhbWJsZShnZXRNb2R1bGVTaGltTmVlZHMoY29kZSksIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zKTtcbiAgICBpZiAocHJlYW1ibGUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBvdXRwdXRGaWxlLmNvbnRlbnRzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGluc2VydFByZWFtYmxlKHsgY29kZSwgbGVhZGluZ0Jhbm5lciwgcHJlYW1ibGUgfSkpO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgbW9kdWxlLCBzZWUgYWJvdmUuICovXG5mdW5jdGlvbiBnZXRDanNJbXBvcnRNZXRhVXJsKCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZSgnbm9kZTp1cmwnKSBhcyBVcmxNb2R1bGU7XG4gICAgaWYgKHR5cGVvZiB1cmwucGF0aFRvRmlsZVVSTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gdGhlIHBhZ2UgVVJMLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGVudmlyb25tZW50IGlzIHVua25vd24uXG4gIHJldHVybiAoZ2xvYmFsVGhpcyBhcyBMb2NhdGlvbkhvc3QpLmxvY2F0aW9uPy5ocmVmID8/ICcnO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuZnVuY3Rpb24gZ2V0SWRlbnRpZmllclVzYWdlKG5vZGU6IElkZW50aWZpZXIpOiBJZGVudGlmaWVyVXNhZ2Uge1xuICBjb25zdCB7IHBhcmVudCB9ID0gbm9kZTtcbiAgaWYgKFxuICAgIChpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihwYXJlbnQpIHx8IGlzUHJvcGVydHlBc3NpZ25tZW50KHBhcmVudCkgfHwgaXNNZXRob2REZWNsYXJhdGlvbihwYXJlbnQpIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihwYXJlbnQpXG4gICAgICB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24ocGFyZW50KSlcbiAgICAmJiBwYXJlbnQubmFtZSA9PT0gbm9kZVxuICApIHtcbiAgICByZXR1cm4gSWRlbnRpZmllclVzYWdlLk1lbWJlcjtcbiAgfVxuXG4gIHJldHVybiAoaXNWYXJpYWJsZURlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNGdW5jdGlvbkRlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNDbGFzc0RlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNQYXJhbWV0ZXIocGFyZW50KSB8fCBpc0JpbmRpbmdFbGVtZW50KHBhcmVudClcbiAgICAgIHx8IGlzSW1wb3J0Q2xhdXNlKHBhcmVudCkgfHwgaXNJbXBvcnRTcGVjaWZpZXIocGFyZW50KSB8fCBpc05hbWVzcGFjZUltcG9ydChwYXJlbnQpKVxuICAgICAgJiYgcGFyZW50Lm5hbWUgPT09IG5vZGVcbiAgICA/IElkZW50aWZpZXJVc2FnZS5CaW5kaW5nXG4gICAgOiBJZGVudGlmaWVyVXNhZ2UuUmVhZDtcbn1cblxuLyoqXG4gKiBSZWFkcyB3aGljaCBzaGltcyBhbiBlbWl0dGVkIG1vZHVsZSBuZWVkcyBmcm9tIGl0cyBjb2RlLlxuICpcbiAqIC0gYGVuc3VyZUJyb3dzZXJQcm9jZXNzYDogaXQgcmVhZHMgYSBgcHJvY2Vzc2AgaXQgZG9lcyBub3QgYmluZCBpdHNlbGYsIG9yIGl0IGxvYWRzIGEgYmFyZSBwYWNrYWdlIHRoYXQgaXMgbm90IGFcbiAqICAgYG5vZGU6YCBidWlsdC1pbi4gVGhlIHNlY29uZCBjYXNlIGlzIHRoZXJlIGJlY2F1c2Ugc3VjaCBhIHBhY2thZ2UgKGBwYXRoLWJyb3dzZXJpZnlgIHJlYWRzIGBwcm9jZXNzLmN3ZCgpYCkgY2Fubm90XG4gKiAgIGNhcnJ5IGEgc2hpbSBvZiBpdHMgb3duLCBhbmQgaW4gYW4gdW5idW5kbGVkIGJ1aWxkIGl0cyBpbXBvcnRlciBpcyB0aGUgb25seSBtb2R1bGUgdGhhdCBjYW4uXG4gKiAtIGBlbnN1cmVEaXNwb3NlU3ltYm9sc2A6IGl0IG5hbWVzIGBTeW1ib2wuZGlzcG9zZWAgb3IgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgLCBvciBob2xkcyBlc2J1aWxkJ3MgYF9fa25vd25TeW1ib2xgXG4gKiAgIGhlbHBlciwgd2hpY2ggYSBsb3dlcmVkIGB1c2luZ2AgZW1pdHMuXG4gKiAtIGBfX25hbWVgOiBpdCByZWFkcyBhIGBfX25hbWVgIGl0IGRvZXMgbm90IGRlY2xhcmUuXG4gKlxuICogQHBhcmFtIGNvZGUgLSBUaGUgZW1pdHRlZCBtb2R1bGUuXG4gKiBAcmV0dXJucyBXaGF0IHRoZSBtb2R1bGUgbmVlZHMuXG4gKi9cbmZ1bmN0aW9uIGdldE1vZHVsZVNoaW1OZWVkcyhjb2RlOiBzdHJpbmcpOiBNb2R1bGVTaGltTmVlZHMge1xuICBjb25zdCBzb3VyY2VGaWxlID0gY3JlYXRlU291cmNlRmlsZSgnbW9kdWxlLmpzJywgY29kZSwgU2NyaXB0VGFyZ2V0LkxhdGVzdCwgdHJ1ZSwgU2NyaXB0S2luZC5KUyk7XG4gIGNvbnN0IGJvdW5kTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgcmVhZE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGxldCBpc0JhcmVJbXBvcnRGb3VuZCA9IGZhbHNlO1xuICBsZXQgaXNEaXNwb3NlU3ltYm9sRm91bmQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiB2aXNpdChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgY29uc3Qgc3BlY2lmaWVyID0gZ2V0TW9kdWxlU3BlY2lmaWVyKG5vZGUpO1xuICAgIGlmIChzcGVjaWZpZXIgIT09IHVuZGVmaW5lZCAmJiAhTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAudGVzdChzcGVjaWZpZXIpKSB7XG4gICAgICBpc0JhcmVJbXBvcnRGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSkgJiYgaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikgJiYgbm9kZS5leHByZXNzaW9uLnRleHQgPT09ICdTeW1ib2wnXG4gICAgICAmJiBESVNQT1NFX1NZTUJPTF9OQU1FUy5oYXMobm9kZS5uYW1lLnRleHQpXG4gICAgKSB7XG4gICAgICBpc0Rpc3Bvc2VTeW1ib2xGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlzSWRlbnRpZmllcihub2RlKSkge1xuICAgICAgaWYgKG5vZGUudGV4dCA9PT0gS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FKSB7XG4gICAgICAgIGlzRGlzcG9zZVN5bWJvbEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNhZ2UgPSBnZXRJZGVudGlmaWVyVXNhZ2Uobm9kZSk7XG4gICAgICBpZiAodXNhZ2UgPT09IElkZW50aWZpZXJVc2FnZS5CaW5kaW5nKSB7XG4gICAgICAgIGJvdW5kTmFtZXMuYWRkKG5vZGUudGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKHVzYWdlID09PSBJZGVudGlmaWVyVXNhZ2UuUmVhZCkge1xuICAgICAgICByZWFkTmFtZXMuYWRkKG5vZGUudGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0KTtcbiAgfVxuICB2aXNpdChzb3VyY2VGaWxlKTtcblxuICBmdW5jdGlvbiBpc0ZyZWVSZWFkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkTmFtZXMuaGFzKG5hbWUpICYmICFib3VuZE5hbWVzLmhhcyhuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNCcm93c2VyUHJvY2Vzc05lZWRlZDogaXNGcmVlUmVhZCgncHJvY2VzcycpIHx8IGlzQmFyZUltcG9ydEZvdW5kLFxuICAgIGlzRGlzcG9zZVN5bWJvbHNOZWVkZWQ6IGlzRGlzcG9zZVN5bWJvbEZvdW5kLFxuICAgIGlzTmFtZU5lZWRlZDogaXNGcmVlUmVhZCgnX19uYW1lJylcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TW9kdWxlU3BlY2lmaWVyKG5vZGU6IE5vZGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoKGlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkgfHwgaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkgJiYgbm9kZS5tb2R1bGVTcGVjaWZpZXIgIT09IHVuZGVmaW5lZCAmJiBpc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpKSB7XG4gICAgcmV0dXJuIG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQ7XG4gIH1cblxuICBpZiAoaXNDYWxsRXhwcmVzc2lvbihub2RlKSkge1xuICAgIGNvbnN0IFtmaXJzdEFyZ3VtZW50XSA9IG5vZGUuYXJndW1lbnRzO1xuICAgIGNvbnN0IGlzTG9hZGVyID0gbm9kZS5leHByZXNzaW9uLmtpbmQgPT09IFN5bnRheEtpbmQuSW1wb3J0S2V5d29yZCB8fCAoaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikgJiYgbm9kZS5leHByZXNzaW9uLnRleHQgPT09ICdyZXF1aXJlJyk7XG4gICAgaWYgKGlzTG9hZGVyICYmIGZpcnN0QXJndW1lbnQgIT09IHVuZGVmaW5lZCAmJiBpc1N0cmluZ0xpdGVyYWwoZmlyc3RBcmd1bWVudCkpIHtcbiAgICAgIHJldHVybiBmaXJzdEFyZ3VtZW50LnRleHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHNlZSBhYm92ZS4gKi9cbmZ1bmN0aW9uIGluaXRDanMoKTogdm9pZCB7XG4gIGNvbnN0IGdsb2JhbFRoaXNSZWNvcmQgPSBnbG9iYWxUaGlzIGFzIEdlbmVyaWNPYmplY3Q7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGdsb2JhbFRoaXNSZWNvcmRbJ19fbmFtZSddID8/PSBrZWVwTmFtZTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19leHRyYWN0RGVmYXVsdCddID8/PSBleHRyYWN0RGVmYXVsdDtcblxuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyAtLSBTZXJpYWxpemVkIHdpdGggaW5pdENqcyBpbnRvIHRoZSBiYW5uZXI7IGF0IG1vZHVsZSBzY29wZSBpdCB3b3VsZCBiZSBsZWZ0IG91dCBvZiBpdC5cbiAgZnVuY3Rpb24gZXh0cmFjdERlZmF1bHQoJG1vZHVsZTogUGFydGlhbDxFc21Nb2R1bGU+IHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gICAgcmV0dXJuICRtb2R1bGUgJiYgJG1vZHVsZS5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiAkbW9kdWxlID8gJG1vZHVsZS5kZWZhdWx0IDogJG1vZHVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RXNtKCk6IHZvaWQge1xuICBlbnN1cmVEaXNwb3NlU3ltYm9scygpO1xuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuLyoqXG4gKiBJbnNlcnRzIHRoZSBwcmVhbWJsZSBhZnRlciB0aGUgY2FsbGVyJ3MgbGVhZGluZyBiYW5uZXIsIGFuZCBzaGlmdHMgYW4gaW5saW5lIHNvdXJjZSBtYXAgZG93biBieSB0aGUgbGluZXMgaXQgYWRkcyxcbiAqIHNvIHRoZSBtb2R1bGUncyBvd24gbGluZXMga2VlcCBtYXBwaW5nIG9udG8gdGhlaXIgc291cmNlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG1vZHVsZSwgaXRzIGxlYWRpbmcgYmFubmVyIGFuZCB0aGUgcHJlYW1ibGUuXG4gKiBAcmV0dXJucyBUaGUgbW9kdWxlIHdpdGggdGhlIHByZWFtYmxlIGluIGl0LlxuICovXG5mdW5jdGlvbiBpbnNlcnRQcmVhbWJsZShwYXJhbXM6IEluc2VydFByZWFtYmxlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBjb2RlLCBsZWFkaW5nQmFubmVyLCBwcmVhbWJsZSB9ID0gcGFyYW1zO1xuICBjb25zdCBpbnNlcnRBdCA9IGxlYWRpbmdCYW5uZXIuZW5kc1dpdGgoJ1xcbicpICYmIGNvZGUuc3RhcnRzV2l0aChsZWFkaW5nQmFubmVyKSA/IGxlYWRpbmdCYW5uZXIubGVuZ3RoIDogMDtcbiAgY29uc3QgYWRkZWRMaW5lQ291bnQgPSBwcmVhbWJsZS5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMTtcbiAgbGV0IHNoaWZ0ZWRDb2RlID0gY29kZTtcbiAgY29uc3Qgc291cmNlTWFwU3RhcnQgPSBjb2RlLmxhc3RJbmRleE9mKElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCk7XG4gIGlmIChzb3VyY2VNYXBTdGFydCAhPT0gLTEpIHtcbiAgICBjb25zdCBkYXRhU3RhcnQgPSBzb3VyY2VNYXBTdGFydCArIElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWC5sZW5ndGg7XG4gICAgY29uc3QgZGF0YSA9IGNvZGUuc2xpY2UoZGF0YVN0YXJ0KS50cmltRW5kKCk7XG4gICAgY29uc3Qgc291cmNlTWFwID0gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShkYXRhLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04JykpIGFzIFNvdXJjZU1hcFdpdGhNYXBwaW5ncztcbiAgICBzb3VyY2VNYXAubWFwcGluZ3MgPSAnOycucmVwZWF0KGFkZGVkTGluZUNvdW50KSArIHNvdXJjZU1hcC5tYXBwaW5ncztcbiAgICBzaGlmdGVkQ29kZSA9IGNvZGUuc2xpY2UoMCwgZGF0YVN0YXJ0KSArIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKSArIGNvZGUuc2xpY2UoZGF0YVN0YXJ0ICsgZGF0YS5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBzaGlmdGVkQ29kZS5zbGljZSgwLCBpbnNlcnRBdCkgKyBwcmVhbWJsZSArIHNoaWZ0ZWRDb2RlLnNsaWNlKGluc2VydEF0KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHByZWFtYmxlIG9mIG9uZSB1bmJ1bmRsZWQgbW9kdWxlOiB0aGUgc2hpbXMgaXQgbmVlZHMgaW4gb25lIHNoYXJlZCBzY29wZSwgdGhlbiB0aGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMuXG4gKlxuICogQHBhcmFtIG5lZWRzIC0gV2hhdCB0aGUgbW9kdWxlIG5lZWRzLlxuICogQHBhcmFtIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zIC0gVGhlIGNhbGxlcidzIGV4dHJhIGluaXRzLCB3aGljaCBldmVyeSBtb2R1bGUgZ2V0cy5cbiAqIEByZXR1cm5zIFRoZSBwcmVhbWJsZSwgZW1wdHkgd2hlbiB0aGUgbW9kdWxlIG5lZWRzIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNb2R1bGVQcmVhbWJsZShuZWVkczogTW9kdWxlU2hpbU5lZWRzLCBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW10pOiBzdHJpbmcge1xuICBjb25zdCBzaGltczogKCguLi5hcmd1bWVudHNfOiBuZXZlcltdKSA9PiB1bmtub3duKVtdID0gW107XG4gIGNvbnN0IGNhbGxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuZWVkcy5pc0Rpc3Bvc2VTeW1ib2xzTmVlZGVkKSB7XG4gICAgc2hpbXMucHVzaChlbnN1cmVEaXNwb3NlU3ltYm9scyk7XG4gICAgY2FsbHMucHVzaCgnZW5zdXJlRGlzcG9zZVN5bWJvbHMoKTsnKTtcbiAgfVxuXG4gIGlmIChuZWVkcy5pc0Jyb3dzZXJQcm9jZXNzTmVlZGVkKSB7XG4gICAgc2hpbXMucHVzaChlbnN1cmVCcm93c2VyUHJvY2Vzcyk7XG4gICAgY2FsbHMucHVzaCgnZW5zdXJlQnJvd3NlclByb2Nlc3MoKTsnKTtcbiAgfVxuXG4gIGlmIChuZWVkcy5pc05hbWVOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGtlZXBOYW1lKTtcbiAgICBjYWxscy5wdXNoKCdnbG9iYWxUaGlzW1xcJ19fbmFtZVxcJ10gPz89IGtlZXBOYW1lOycpO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVkU2NvcGUgPSBzaGltcy5sZW5ndGggPT09IDAgPyAnJyA6IGAoZnVuY3Rpb24gKCkge1xcbiR7c2hpbXMubWFwKFN0cmluZykuam9pbignXFxuXFxuJyl9XFxuXFxuJHtjYWxscy5qb2luKCdcXG4nKX1cXG59KSgpO1xcbmA7XG4gIHJldHVybiBzaGFyZWRTY29wZSArIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLm1hcCgoZnVuY3Rpb25fKSA9PiBgKCR7U3RyaW5nKGZ1bmN0aW9uXyl9KSgpO1xcbmApLmpvaW4oJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1DQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsZ0JBQWdCO0FBQ3pCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLE1BQU0sdUJBQXVCLG9CQUFJLElBQUksQ0FBQyxnQkFBZ0IsU0FBUyxDQUFDO0FBQ2hFLE1BQU0sMkJBQTJCO0FBQ2pDLE1BQU0sb0JBQW9CO0FBRTFCLE1BQU0sMkJBQTJCO0FBRWpDLE1BQU0sNkJBQTZCO0FBbUk1QixTQUFTLHVCQUE2QjtBQUMzQyxRQUFNLGlCQUFnRDtBQUFBLElBQ3BELFNBQVM7QUFBQSxJQUNULE1BQU07QUFDSixhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FBSyxDQUFDO0FBQUEsSUFDTixVQUFVO0FBQUEsRUFDWjtBQUVBLFFBQU0sa0JBQWtCLFdBQVc7QUFFbkMsTUFBSSxDQUFDLGlCQUFpQjtBQUNwQixlQUFXLFVBQVU7QUFDckI7QUFBQSxFQUNGO0FBRUEsTUFBSSxnQkFBZ0IsVUFBVSxNQUFNO0FBQ2xDO0FBQUEsRUFDRjtBQUVBLFFBQU0sd0JBQXdCO0FBRTlCLGFBQVcsQ0FBQyxLQUFL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
@@ -0,0 +1,95 @@
1
+ /// <reference path="../../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Svelte preprocessor that compiles TypeScript scripts with esbuild.
6
+ *
7
+ * It replaces `svelte-preprocess` for the one language every Svelte component of these projects uses, `lang="ts"`, so
8
+ * the toolkit no longer depends on `svelte-preprocess`, whose optional `@babel/core` 7 peer conflicts with the Babel 8
9
+ * that Stryker installs. Any other script or style language is handed to `svelte-preprocess`, an optional peer, when the
10
+ * project installs it.
11
+ */
12
+ /**
13
+ * The attributes of a `<script>` or `<style>` block.
14
+ */
15
+ export type SvelteBlockAttributes = Record<string, boolean | string>;
16
+ /**
17
+ * A Svelte preprocessor for one kind of block.
18
+ */
19
+ export type SvelteBlockPreprocessor = (params: SveltePreprocessorParams) => Promise<SveltePreprocessorResult | undefined>;
20
+ /**
21
+ * A Svelte preprocessor group, in the shape `svelte/compiler`'s `preprocess` takes.
22
+ */
23
+ export interface SveltePreprocessorGroup {
24
+ /**
25
+ * The name of the group.
26
+ */
27
+ readonly name: string;
28
+ /**
29
+ * The preprocessor of `<script>` blocks.
30
+ */
31
+ readonly script: SvelteBlockPreprocessor;
32
+ /**
33
+ * The preprocessor of `<style>` blocks.
34
+ */
35
+ readonly style: SvelteBlockPreprocessor;
36
+ }
37
+ /**
38
+ * What a Svelte preprocessor is given for one `<script>` or `<style>` block.
39
+ */
40
+ export interface SveltePreprocessorParams {
41
+ /**
42
+ * The attributes of the block.
43
+ */
44
+ readonly attributes: SvelteBlockAttributes;
45
+ /**
46
+ * The content of the block.
47
+ */
48
+ readonly content: string;
49
+ /**
50
+ * The path of the component.
51
+ */
52
+ readonly filename?: string;
53
+ /**
54
+ * The whole component.
55
+ */
56
+ readonly markup: string;
57
+ }
58
+ /**
59
+ * What a Svelte preprocessor returns for a block it changed.
60
+ */
61
+ export interface SveltePreprocessorResult {
62
+ /**
63
+ * The new content of the block.
64
+ */
65
+ readonly code: string;
66
+ /**
67
+ * The source map of the change.
68
+ */
69
+ readonly map?: object | string;
70
+ }
71
+ /**
72
+ * Creates the Svelte preprocessor the toolkit's esbuild build uses.
73
+ *
74
+ * A `<script lang="ts">` block is transpiled with esbuild under `verbatimModuleSyntax`, as Svelte's own `vitePreprocess`
75
+ * does, so an import that only the markup uses is kept and a type import must say `import type`. A plain script or
76
+ * style block is left alone. Any other language is handed to `svelte-preprocess`, loaded only then; when the project
77
+ * does not install it, preprocessing that block fails naming the package.
78
+ *
79
+ * @returns The preprocessor group.
80
+ */
81
+ export declare function createSveltePreprocessor(): SveltePreprocessorGroup;
82
+ /**
83
+ * Gets the language of a `<script>` or `<style>` block from its `lang` attribute, or else its `type` attribute.
84
+ *
85
+ * @param attributes - The attributes of the block.
86
+ * @returns The language, lowercased, or `undefined` when the block names none.
87
+ */
88
+ export declare function getBlockLanguage(attributes: SvelteBlockAttributes): string | undefined;
89
+ /**
90
+ * Checks whether an error is the one loading `svelte-preprocess` throws when the project does not install it.
91
+ *
92
+ * @param error - The error to check.
93
+ * @returns Whether the error says that the `svelte-preprocess` package cannot be found.
94
+ */
95
+ export declare function isMissingSveltePreprocessError(error: unknown): boolean;
@@ -0,0 +1,126 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return '/';
11
+ },
12
+ env: {},
13
+ platform: 'android'
14
+ };
15
+
16
+ const existingProcess = globalThis.process;
17
+
18
+ if (!existingProcess) {
19
+ globalThis.process = browserProcess;
20
+ return;
21
+ }
22
+
23
+ if (existingProcess.versions?.node) {
24
+ return;
25
+ }
26
+
27
+ const existingProcessRecord = existingProcess;
28
+
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+
33
+ existingProcessRecord['browser'] = true;
34
+ }
35
+
36
+ ensureBrowserProcess();
37
+ })();
38
+
39
+ import { transform } from "esbuild";
40
+ const SVELTE_PREPROCESS_PACKAGE_NAME = "svelte-preprocess";
41
+ const JAVASCRIPT_LANGUAGES = /* @__PURE__ */ new Set(["javascript", "js"]);
42
+ const MISSING_SVELTE_PREPROCESS_MESSAGE_REG_EXP = /Cannot find (?:module|package) 'svelte-preprocess'/;
43
+ const MODULE_NOT_FOUND_CODES = /* @__PURE__ */ new Set(["ERR_MODULE_NOT_FOUND", "MODULE_NOT_FOUND"]);
44
+ const TEXT_TYPE_PREFIX = "text/";
45
+ const TYPESCRIPT_LANGUAGES = /* @__PURE__ */ new Set(["ts", "typescript"]);
46
+ function createSveltePreprocessor() {
47
+ let fallbackPromise;
48
+ async function getFallbackPreprocessorGroup() {
49
+ fallbackPromise ??= loadFallbackPreprocessorGroup().catch((error) => {
50
+ fallbackPromise = void 0;
51
+ throw error;
52
+ });
53
+ return await fallbackPromise;
54
+ }
55
+ async function preprocessWithFallback(kind, language, params) {
56
+ let fallback;
57
+ try {
58
+ fallback = await getFallbackPreprocessorGroup();
59
+ } catch (error) {
60
+ if (!isMissingSveltePreprocessError(error)) {
61
+ throw error;
62
+ }
63
+ throw new Error(
64
+ `Cannot preprocess the <${kind} lang="${language}"> block of ${params.filename ?? "a Svelte component"}: install \`svelte-preprocess\` in the project to compile ${language}.`,
65
+ { cause: error }
66
+ );
67
+ }
68
+ return await fallback[kind]?.(params) ?? void 0;
69
+ }
70
+ return {
71
+ name: "typescript-dev-toolkit-svelte",
72
+ async script(params) {
73
+ const language = getBlockLanguage(params.attributes);
74
+ if (language === void 0 || JAVASCRIPT_LANGUAGES.has(language)) {
75
+ return void 0;
76
+ }
77
+ return TYPESCRIPT_LANGUAGES.has(language) ? await transpileTypeScript(params) : await preprocessWithFallback("script", language, params);
78
+ },
79
+ async style(params) {
80
+ const language = getBlockLanguage(params.attributes);
81
+ return language === void 0 || language === "css" ? void 0 : await preprocessWithFallback("style", language, params);
82
+ }
83
+ };
84
+ }
85
+ function getBlockLanguage(attributes) {
86
+ const lang = attributes["lang"];
87
+ if (typeof lang === "string" && lang !== "") {
88
+ return lang.toLowerCase();
89
+ }
90
+ const type = attributes["type"];
91
+ return typeof type === "string" && type.toLowerCase().startsWith(TEXT_TYPE_PREFIX) ? type.slice(TEXT_TYPE_PREFIX.length).toLowerCase() : void 0;
92
+ }
93
+ function isMissingSveltePreprocessError(error) {
94
+ if (!(error instanceof Error)) {
95
+ return false;
96
+ }
97
+ const code = error.code;
98
+ return typeof code === "string" && MODULE_NOT_FOUND_CODES.has(code) && MISSING_SVELTE_PREPROCESS_MESSAGE_REG_EXP.test(error.message);
99
+ }
100
+ async function loadFallbackPreprocessorGroup() {
101
+ const svelteFallbackModule = await import(SVELTE_PREPROCESS_PACKAGE_NAME);
102
+ return svelteFallbackModule.sveltePreprocess();
103
+ }
104
+ async function transpileTypeScript(params) {
105
+ const result = await transform(params.content, {
106
+ loader: "ts",
107
+ sourcefile: params.filename ?? "",
108
+ sourcemap: "external",
109
+ target: "esnext",
110
+ tsconfigRaw: {
111
+ compilerOptions: {
112
+ verbatimModuleSyntax: true
113
+ }
114
+ }
115
+ });
116
+ return {
117
+ code: result.code,
118
+ map: result.map
119
+ };
120
+ }
121
+ export {
122
+ createSveltePreprocessor,
123
+ getBlockLanguage,
124
+ isMissingSveltePreprocessError
125
+ };
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvc3ZlbHRlLXByZXByb2Nlc3Nvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogU3ZlbHRlIHByZXByb2Nlc3NvciB0aGF0IGNvbXBpbGVzIFR5cGVTY3JpcHQgc2NyaXB0cyB3aXRoIGVzYnVpbGQuXG4gKlxuICogSXQgcmVwbGFjZXMgYHN2ZWx0ZS1wcmVwcm9jZXNzYCBmb3IgdGhlIG9uZSBsYW5ndWFnZSBldmVyeSBTdmVsdGUgY29tcG9uZW50IG9mIHRoZXNlIHByb2plY3RzIHVzZXMsIGBsYW5nPVwidHNcImAsIHNvXG4gKiB0aGUgdG9vbGtpdCBubyBsb25nZXIgZGVwZW5kcyBvbiBgc3ZlbHRlLXByZXByb2Nlc3NgLCB3aG9zZSBvcHRpb25hbCBgQGJhYmVsL2NvcmVgIDcgcGVlciBjb25mbGljdHMgd2l0aCB0aGUgQmFiZWwgOFxuICogdGhhdCBTdHJ5a2VyIGluc3RhbGxzLiBBbnkgb3RoZXIgc2NyaXB0IG9yIHN0eWxlIGxhbmd1YWdlIGlzIGhhbmRlZCB0byBgc3ZlbHRlLXByZXByb2Nlc3NgLCBhbiBvcHRpb25hbCBwZWVyLCB3aGVuIHRoZVxuICogcHJvamVjdCBpbnN0YWxscyBpdC5cbiAqL1xuXG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICdlc2J1aWxkJztcblxuLyoqXG4gKiBUaGUgYXR0cmlidXRlcyBvZiBhIGA8c2NyaXB0PmAgb3IgYDxzdHlsZT5gIGJsb2NrLlxuICovXG5leHBvcnQgdHlwZSBTdmVsdGVCbG9ja0F0dHJpYnV0ZXMgPSBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgc3RyaW5nPjtcblxuLyoqXG4gKiBBIFN2ZWx0ZSBwcmVwcm9jZXNzb3IgZm9yIG9uZSBraW5kIG9mIGJsb2NrLlxuICovXG5leHBvcnQgdHlwZSBTdmVsdGVCbG9ja1ByZXByb2Nlc3NvciA9IChwYXJhbXM6IFN2ZWx0ZVByZXByb2Nlc3NvclBhcmFtcykgPT4gUHJvbWlzZTxTdmVsdGVQcmVwcm9jZXNzb3JSZXN1bHQgfCB1bmRlZmluZWQ+O1xuXG4vKipcbiAqIEEgU3ZlbHRlIHByZXByb2Nlc3NvciBncm91cCwgaW4gdGhlIHNoYXBlIGBzdmVsdGUvY29tcGlsZXJgJ3MgYHByZXByb2Nlc3NgIHRha2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN2ZWx0ZVByZXByb2Nlc3Nvckdyb3VwIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBncm91cC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByZXByb2Nlc3NvciBvZiBgPHNjcmlwdD5gIGJsb2Nrcy5cbiAgICovXG4gIHJlYWRvbmx5IHNjcmlwdDogU3ZlbHRlQmxvY2tQcmVwcm9jZXNzb3I7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVwcm9jZXNzb3Igb2YgYDxzdHlsZT5gIGJsb2Nrcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0eWxlOiBTdmVsdGVCbG9ja1ByZXByb2Nlc3Nvcjtcbn1cblxuLyoqXG4gKiBXaGF0IGEgU3ZlbHRlIHByZXByb2Nlc3NvciBpcyBnaXZlbiBmb3Igb25lIGA8c2NyaXB0PmAgb3IgYDxzdHlsZT5gIGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN2ZWx0ZVByZXByb2Nlc3NvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlcyBvZiB0aGUgYmxvY2suXG4gICAqL1xuICByZWFkb25seSBhdHRyaWJ1dGVzOiBTdmVsdGVCbG9ja0F0dHJpYnV0ZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBibG9jay5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbWFya3VwOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBhIFN2ZWx0ZSBwcmVwcm9jZXNzb3IgcmV0dXJucyBmb3IgYSBibG9jayBpdCBjaGFuZ2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN2ZWx0ZVByZXByb2Nlc3NvclJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgbmV3IGNvbnRlbnQgb2YgdGhlIGJsb2NrLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG1hcCBvZiB0aGUgY2hhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFwPzogb2JqZWN0IHwgc3RyaW5nO1xufVxuXG50eXBlIEJsb2NrS2luZCA9ICdzY3JpcHQnIHwgJ3N0eWxlJztcblxudHlwZSBGYWxsYmFja1ByZXByb2Nlc3Nvckdyb3VwID0gUGFydGlhbDxSZWNvcmQ8QmxvY2tLaW5kLCAocGFyYW1zOiBTdmVsdGVQcmVwcm9jZXNzb3JQYXJhbXMpID0+IHVua25vd24+PjtcblxuaW50ZXJmYWNlIFN2ZWx0ZVByZXByb2Nlc3NNb2R1bGUge1xuICByZWFkb25seSBzdmVsdGVQcmVwcm9jZXNzOiAoKSA9PiBGYWxsYmFja1ByZXByb2Nlc3Nvckdyb3VwO1xufVxuXG5jb25zdCBTVkVMVEVfUFJFUFJPQ0VTU19QQUNLQUdFX05BTUUgPSAnc3ZlbHRlLXByZXByb2Nlc3MnO1xuXG5jb25zdCBKQVZBU0NSSVBUX0xBTkdVQUdFUyA9IG5ldyBTZXQoWydqYXZhc2NyaXB0JywgJ2pzJ10pO1xuY29uc3QgTUlTU0lOR19TVkVMVEVfUFJFUFJPQ0VTU19NRVNTQUdFX1JFR19FWFAgPSAvQ2Fubm90IGZpbmQgKD86bW9kdWxlfHBhY2thZ2UpICdzdmVsdGUtcHJlcHJvY2VzcycvO1xuY29uc3QgTU9EVUxFX05PVF9GT1VORF9DT0RFUyA9IG5ldyBTZXQoWydFUlJfTU9EVUxFX05PVF9GT1VORCcsICdNT0RVTEVfTk9UX0ZPVU5EJ10pO1xuY29uc3QgVEVYVF9UWVBFX1BSRUZJWCA9ICd0ZXh0Lyc7XG5jb25zdCBUWVBFU0NSSVBUX0xBTkdVQUdFUyA9IG5ldyBTZXQoWyd0cycsICd0eXBlc2NyaXB0J10pO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFN2ZWx0ZSBwcmVwcm9jZXNzb3IgdGhlIHRvb2xraXQncyBlc2J1aWxkIGJ1aWxkIHVzZXMuXG4gKlxuICogQSBgPHNjcmlwdCBsYW5nPVwidHNcIj5gIGJsb2NrIGlzIHRyYW5zcGlsZWQgd2l0aCBlc2J1aWxkIHVuZGVyIGB2ZXJiYXRpbU1vZHVsZVN5bnRheGAsIGFzIFN2ZWx0ZSdzIG93biBgdml0ZVByZXByb2Nlc3NgXG4gKiBkb2VzLCBzbyBhbiBpbXBvcnQgdGhhdCBvbmx5IHRoZSBtYXJrdXAgdXNlcyBpcyBrZXB0IGFuZCBhIHR5cGUgaW1wb3J0IG11c3Qgc2F5IGBpbXBvcnQgdHlwZWAuIEEgcGxhaW4gc2NyaXB0IG9yXG4gKiBzdHlsZSBibG9jayBpcyBsZWZ0IGFsb25lLiBBbnkgb3RoZXIgbGFuZ3VhZ2UgaXMgaGFuZGVkIHRvIGBzdmVsdGUtcHJlcHJvY2Vzc2AsIGxvYWRlZCBvbmx5IHRoZW47IHdoZW4gdGhlIHByb2plY3RcbiAqIGRvZXMgbm90IGluc3RhbGwgaXQsIHByZXByb2Nlc3NpbmcgdGhhdCBibG9jayBmYWlscyBuYW1pbmcgdGhlIHBhY2thZ2UuXG4gKlxuICogQHJldHVybnMgVGhlIHByZXByb2Nlc3NvciBncm91cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN2ZWx0ZVByZXByb2Nlc3NvcigpOiBTdmVsdGVQcmVwcm9jZXNzb3JHcm91cCB7XG4gIGxldCBmYWxsYmFja1Byb21pc2U6IFByb21pc2U8RmFsbGJhY2tQcmVwcm9jZXNzb3JHcm91cD4gfCB1bmRlZmluZWQ7XG5cbiAgLy8gQSBmYWlsZWQgbG9hZCBpcyBmb3Jnb3R0ZW4sIHNvIGEgYmxvY2sgYWZ0ZXIgdGhlIHByb2plY3QgaW5zdGFsbHMgdGhlIHBhY2thZ2UgdHJpZXMgYWdhaW4uXG4gIGFzeW5jIGZ1bmN0aW9uIGdldEZhbGxiYWNrUHJlcHJvY2Vzc29yR3JvdXAoKTogUHJvbWlzZTxGYWxsYmFja1ByZXByb2Nlc3Nvckdyb3VwPiB7XG4gICAgZmFsbGJhY2tQcm9taXNlID8/PSBsb2FkRmFsbGJhY2tQcmVwcm9jZXNzb3JHcm91cCgpLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgZmFsbGJhY2tQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gICAgcmV0dXJuIGF3YWl0IGZhbGxiYWNrUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHByZXByb2Nlc3NXaXRoRmFsbGJhY2soa2luZDogQmxvY2tLaW5kLCBsYW5ndWFnZTogc3RyaW5nLCBwYXJhbXM6IFN2ZWx0ZVByZXByb2Nlc3NvclBhcmFtcyk6IFByb21pc2U8U3ZlbHRlUHJlcHJvY2Vzc29yUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGZhbGxiYWNrOiBGYWxsYmFja1ByZXByb2Nlc3Nvckdyb3VwO1xuICAgIHRyeSB7XG4gICAgICBmYWxsYmFjayA9IGF3YWl0IGdldEZhbGxiYWNrUHJlcHJvY2Vzc29yR3JvdXAoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFpc01pc3NpbmdTdmVsdGVQcmVwcm9jZXNzRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHByZXByb2Nlc3MgdGhlIDwke2tpbmR9IGxhbmc9XCIke2xhbmd1YWdlfVwiPiBibG9jayBvZiAke3BhcmFtcy5maWxlbmFtZSA/PyAnYSBTdmVsdGUgY29tcG9uZW50J306IGluc3RhbGwgXFxgc3ZlbHRlLXByZXByb2Nlc3NcXGAgaW4gdGhlIHByb2plY3QgdG8gY29tcGlsZSAke2xhbmd1YWdlfS5gLFxuICAgICAgICB7IGNhdXNlOiBlcnJvciB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgZmFsbGJhY2tba2luZF0/LihwYXJhbXMpIGFzIFN2ZWx0ZVByZXByb2Nlc3NvclJlc3VsdCB8IHVuZGVmaW5lZCA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd0eXBlc2NyaXB0LWRldi10b29sa2l0LXN2ZWx0ZScsXG4gICAgYXN5bmMgc2NyaXB0KHBhcmFtcyk6IFByb21pc2U8U3ZlbHRlUHJlcHJvY2Vzc29yUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IGdldEJsb2NrTGFuZ3VhZ2UocGFyYW1zLmF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKGxhbmd1YWdlID09PSB1bmRlZmluZWQgfHwgSkFWQVNDUklQVF9MQU5HVUFHRVMuaGFzKGxhbmd1YWdlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFRZUEVTQ1JJUFRfTEFOR1VBR0VTLmhhcyhsYW5ndWFnZSkgPyAoYXdhaXQgdHJhbnNwaWxlVHlwZVNjcmlwdChwYXJhbXMpKSA6IChhd2FpdCBwcmVwcm9jZXNzV2l0aEZhbGxiYWNrKCdzY3JpcHQnLCBsYW5ndWFnZSwgcGFyYW1zKSk7XG4gICAgfSxcbiAgICBhc3luYyBzdHlsZShwYXJhbXMpOiBQcm9taXNlPFN2ZWx0ZVByZXByb2Nlc3NvclJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRCbG9ja0xhbmd1YWdlKHBhcmFtcy5hdHRyaWJ1dGVzKTtcbiAgICAgIHJldHVybiBsYW5ndWFnZSA9PT0gdW5kZWZpbmVkIHx8IGxhbmd1YWdlID09PSAnY3NzJyA/IHVuZGVmaW5lZCA6IChhd2FpdCBwcmVwcm9jZXNzV2l0aEZhbGxiYWNrKCdzdHlsZScsIGxhbmd1YWdlLCBwYXJhbXMpKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGFuZ3VhZ2Ugb2YgYSBgPHNjcmlwdD5gIG9yIGA8c3R5bGU+YCBibG9jayBmcm9tIGl0cyBgbGFuZ2AgYXR0cmlidXRlLCBvciBlbHNlIGl0cyBgdHlwZWAgYXR0cmlidXRlLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJ1dGVzIC0gVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGJsb2NrLlxuICogQHJldHVybnMgVGhlIGxhbmd1YWdlLCBsb3dlcmNhc2VkLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBibG9jayBuYW1lcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmxvY2tMYW5ndWFnZShhdHRyaWJ1dGVzOiBTdmVsdGVCbG9ja0F0dHJpYnV0ZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsYW5nID0gYXR0cmlidXRlc1snbGFuZyddO1xuICBpZiAodHlwZW9mIGxhbmcgPT09ICdzdHJpbmcnICYmIGxhbmcgIT09ICcnKSB7XG4gICAgcmV0dXJuIGxhbmcudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSBhdHRyaWJ1dGVzWyd0eXBlJ107XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgJiYgdHlwZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoVEVYVF9UWVBFX1BSRUZJWCkgPyB0eXBlLnNsaWNlKFRFWFRfVFlQRV9QUkVGSVgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIGVycm9yIGlzIHRoZSBvbmUgbG9hZGluZyBgc3ZlbHRlLXByZXByb2Nlc3NgIHRocm93cyB3aGVuIHRoZSBwcm9qZWN0IGRvZXMgbm90IGluc3RhbGwgaXQuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZXJyb3Igc2F5cyB0aGF0IHRoZSBgc3ZlbHRlLXByZXByb2Nlc3NgIHBhY2thZ2UgY2Fubm90IGJlIGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNaXNzaW5nU3ZlbHRlUHJlcHJvY2Vzc0Vycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29kZSA9IChlcnJvciBhcyBQYXJ0aWFsPFJlY29yZDwnY29kZScsIHVua25vd24+PikuY29kZTtcbiAgcmV0dXJuIHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJyAmJiBNT0RVTEVfTk9UX0ZPVU5EX0NPREVTLmhhcyhjb2RlKSAmJiBNSVNTSU5HX1NWRUxURV9QUkVQUk9DRVNTX01FU1NBR0VfUkVHX0VYUC50ZXN0KGVycm9yLm1lc3NhZ2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkRmFsbGJhY2tQcmVwcm9jZXNzb3JHcm91cCgpOiBQcm9taXNlPEZhbGxiYWNrUHJlcHJvY2Vzc29yR3JvdXA+IHtcbiAgLypcbiAgICogVGhlIHNwZWNpZmllciBpcyBhIHZhcmlhYmxlIHNvIHRoYXQgdHlwZS1jaGVja2luZyBkb2VzIG5vdCBuZWVkIHRoZSBwYWNrYWdlOiBpbnN0YWxsaW5nIGl0IGhlcmUgd291bGQgYnJpbmcgYmFjayB0aGVcbiAgICogYEBiYWJlbC9jb3JlYCBwZWVyIGNvbmZsaWN0IHdpdGggU3RyeWtlciB0aGlzIG1vZHVsZSBleGlzdHMgdG8gYXZvaWQuXG4gICAqL1xuICBjb25zdCBzdmVsdGVGYWxsYmFja01vZHVsZSA9IGF3YWl0IGltcG9ydChTVkVMVEVfUFJFUFJPQ0VTU19QQUNLQUdFX05BTUUpIGFzIFN2ZWx0ZVByZXByb2Nlc3NNb2R1bGU7XG4gIHJldHVybiBzdmVsdGVGYWxsYmFja01vZHVsZS5zdmVsdGVQcmVwcm9jZXNzKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRyYW5zcGlsZVR5cGVTY3JpcHQocGFyYW1zOiBTdmVsdGVQcmVwcm9jZXNzb3JQYXJhbXMpOiBQcm9taXNlPFN2ZWx0ZVByZXByb2Nlc3NvclJlc3VsdD4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm0ocGFyYW1zLmNvbnRlbnQsIHtcbiAgICBsb2FkZXI6ICd0cycsXG4gICAgc291cmNlZmlsZTogcGFyYW1zLmZpbGVuYW1lID8/ICcnLFxuICAgIHNvdXJjZW1hcDogJ2V4dGVybmFsJyxcbiAgICB0YXJnZXQ6ICdlc25leHQnLFxuICAgIHRzY29uZmlnUmF3OiB7XG4gICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgdmVyYmF0aW1Nb2R1bGVTeW50YXg6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNvZGU6IHJlc3VsdC5jb2RlLFxuICAgIG1hcDogcmVzdWx0Lm1hcFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBLFNBQVMsaUJBQWlCO0FBZ0YxQixNQUFNLGlDQUFpQztBQUV2QyxNQUFNLHVCQUF1QixvQkFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUM7QUFDekQsTUFBTSw0Q0FBNEM7QUFDbEQsTUFBTSx5QkFBeUIsb0JBQUksSUFBSSxDQUFDLHdCQUF3QixrQkFBa0IsQ0FBQztBQUNuRixNQUFNLG1CQUFtQjtBQUN6QixNQUFNLHVCQUF1QixvQkFBSSxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUM7QUFZbEQsU0FBUywyQkFBb0Q7QUFDbEUsTUFBSTtBQUdKLGlCQUFlLCtCQUFtRTtBQUNoRix3QkFBb0IsOEJBQThCLEVBQUUsTUFBTSxDQUFDLFVBQW1CO0FBQzVFLHdCQUFrQjtBQUNsQixZQUFNO0FBQUEsSUFDUixDQUFDO0FBQ0QsV0FBTyxNQUFNO0FBQUEsRUFDZjtBQUVBLGlCQUFlLHVCQUF1QixNQUFpQixVQUFrQixRQUFpRjtBQUN4SixRQUFJO0FBQ0osUUFBSTtBQUNGLGlCQUFXLE1BQU0sNkJBQTZCO0FBQUEsSUFDaEQsU0FBUyxPQUFPO0FBQ2QsVUFBSSxDQUFDLCtCQUErQixLQUFLLEdBQUc7QUFDMUMsY0FBTTtBQUFBLE1BQ1I7QUFDQSxZQUFNLElBQUk7QUFBQSxRQUNSLDBCQUEwQixJQUFJLFVBQVUsUUFBUSxlQUFlLE9BQU8sWUFBWSxvQkFBb0IsNkRBQTZELFFBQVE7QUFBQSxRQUMzSyxFQUFFLE9BQU8sTUFBTTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUNBLFdBQU8sTUFBTSxTQUFTLElBQUksSUFBSSxNQUFNLEtBQTZDO0FBQUEsRUFDbkY7QUFFQSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNLE9BQU8sUUFBdUQ7QUFDbEUsWUFBTSxXQUFXLGlCQUFpQixPQUFPLFVBQVU7QUFDbkQsVUFBSSxhQUFhLFVBQWEscUJBQXFCLElBQUksUUFBUSxHQUFHO0FBQ2hFLGVBQU87QUFBQSxNQUNUO0FBQ0EsYUFBTyxxQkFBcUIsSUFBSSxRQUFRLElBQUssTUFBTSxvQkFBb0IsTUFBTSxJQUFNLE1BQU0sdUJBQXVCLFVBQVUsVUFBVSxNQUFNO0FBQUEsSUFDNUk7QUFBQSxJQUNBLE1BQU0sTUFBTSxRQUF1RDtBQUNqRSxZQUFNLFdBQVcsaUJBQWlCLE9BQU8sVUFBVTtBQUNuRCxhQUFPLGFBQWEsVUFBYSxhQUFhLFFBQVEsU0FBYSxNQUFNLHVCQUF1QixTQUFTLFVBQVUsTUFBTTtBQUFBLElBQzNIO0FBQUEsRUFDRjtBQUNGO0FBUU8sU0FBUyxpQkFBaUIsWUFBdUQ7QUFDdEYsUUFBTSxPQUFPLFdBQVcsTUFBTTtBQUM5QixNQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVMsSUFBSTtBQUMzQyxXQUFPLEtBQUssWUFBWTtBQUFBLEVBQzFCO0FBRUEsUUFBTSxPQUFPLFdBQVcsTUFBTTtBQUM5QixTQUFPLE9BQU8sU0FBUyxZQUFZLEtBQUssWUFBWSxFQUFFLFdBQVcsZ0JBQWdCLElBQUksS0FBSyxNQUFNLGlCQUFpQixNQUFNLEVBQUUsWUFBWSxJQUFJO0FBQzNJO0FBUU8sU0FBUywrQkFBK0IsT0FBeUI7QUFDdEUsTUFBSSxFQUFFLGlCQUFpQixRQUFRO0FBQzdCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxPQUFRLE1BQTJDO0FBQ3pELFNBQU8sT0FBTyxTQUFTLFlBQVksdUJBQXVCLElBQUksSUFBSSxLQUFLLDBDQUEwQyxLQUFLLE1BQU0sT0FBTztBQUNySTtBQUVBLGVBQWUsZ0NBQW9FO0FBS2pGLFFBQU0sdUJBQXVCLE1BQU0sT0FBTztBQUMxQyxTQUFPLHFCQUFxQixpQkFBaUI7QUFDL0M7QUFFQSxlQUFlLG9CQUFvQixRQUFxRTtBQUN0RyxRQUFNLFNBQVMsTUFBTSxVQUFVLE9BQU8sU0FBUztBQUFBLElBQzdDLFFBQVE7QUFBQSxJQUNSLFlBQVksT0FBTyxZQUFZO0FBQUEsSUFDL0IsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDZixzQkFBc0I7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDRCxTQUFPO0FBQUEsSUFDTCxNQUFNLE9BQU87QUFBQSxJQUNiLEtBQUssT0FBTztBQUFBLEVBQ2Q7QUFDRjsiLCJuYW1lcyI6W119
@@ -18,7 +18,7 @@ export declare function isMissingSveltePackageError(error: unknown): boolean;
18
18
  /**
19
19
  * Wraps the esbuild-svelte plugin to ensure that the correct format is used.
20
20
  *
21
- * `esbuild-svelte` and `svelte-preprocess` are loaded when the plugin is set up, not when this module is imported. When
21
+ * `esbuild-svelte` is loaded when the plugin is set up, not when this module is imported. When
22
22
  * the `svelte` package is not installed, a build with no `.svelte` file succeeds, and a build that reaches one fails
23
23
  * with an error that names the missing package.
24
24
  *
@@ -38,6 +38,7 @@ ensureBrowserProcess();
38
38
 
39
39
  import { extractDefaultExportInterop } from "@mnaoumov/typescript-lib/object-utils";
40
40
  import { readPackageJson } from "../../npm.mjs";
41
+ import { createSveltePreprocessor } from "./svelte-preprocessor.mjs";
41
42
  const MISSING_SVELTE_MESSAGE_REG_EXP = /Cannot find (?:module|package) 'svelte(?:\/[^']*)?'/;
42
43
  const MODULE_NOT_FOUND_CODES = /* @__PURE__ */ new Set(["ERR_MODULE_NOT_FOUND", "MODULE_NOT_FOUND"]);
43
44
  const SVELTE_FILTER = /\.svelte$/;
@@ -75,7 +76,7 @@ function svelteWrapperPlugin(isProductionBuild) {
75
76
  };
76
77
  }
77
78
  async function createEsbuildSveltePlugin(isProductionBuild) {
78
- const [esbuildSvelteModule, { sveltePreprocess }] = await Promise.all([import("esbuild-svelte"), import("svelte-preprocess")]);
79
+ const esbuildSvelteModule = await import("esbuild-svelte");
79
80
  const esbuildSvelte = extractDefaultExportInterop(esbuildSvelteModule.default);
80
81
  return esbuildSvelte({
81
82
  compilerOptions: {
@@ -85,7 +86,7 @@ async function createEsbuildSveltePlugin(isProductionBuild) {
85
86
  moduleCompilerOptions: {
86
87
  dev: !isProductionBuild
87
88
  },
88
- preprocess: sveltePreprocess()
89
+ preprocess: createSveltePreprocessor()
89
90
  });
90
91
  }
91
92
  function registerMissingSvelteLoader(build) {
@@ -99,4 +100,4 @@ export {
99
100
  isMissingSveltePackageError,
100
101
  svelteWrapperPlugin
101
102
  };
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvc3ZlbHRlLXdyYXBwZXItcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTdmVsdGUgd3JhcHBlciBlc2J1aWxkIHBsdWdpbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBsdWdpbixcbiAgUGx1Z2luQnVpbGRcbn0gZnJvbSAnZXNidWlsZCc7XG5cbmltcG9ydCB7IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuXG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb24gfSBmcm9tICcuLi8uLi9ucG0udHMnO1xuXG5jb25zdCBNSVNTSU5HX1NWRUxURV9NRVNTQUdFX1JFR19FWFAgPSAvQ2Fubm90IGZpbmQgKD86bW9kdWxlfHBhY2thZ2UpICdzdmVsdGUoPzpcXC9bXiddKik/Jy87XG5jb25zdCBNT0RVTEVfTk9UX0ZPVU5EX0NPREVTID0gbmV3IFNldChbJ0VSUl9NT0RVTEVfTk9UX0ZPVU5EJywgJ01PRFVMRV9OT1RfRk9VTkQnXSk7XG5jb25zdCBTVkVMVEVfRklMVEVSID0gL1xcLnN2ZWx0ZSQvO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIGVycm9yIGlzIHRoZSBvbmUgbG9hZGluZyBgZXNidWlsZC1zdmVsdGVgIHRocm93cyB3aGVuIHRoZSBgc3ZlbHRlYCBwYWNrYWdlIGlzIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogYGVzYnVpbGQtc3ZlbHRlYCBpbXBvcnRzIGBzdmVsdGUvY29tcGlsZXJgIHdoZW4gaXQgbG9hZHMsIGFuZCBwYWNrYWdlIG1hbmFnZXJzIHRoYXQgZG8gbm90IGluc3RhbGwgcGVlcnMgKFlhcm4gMSlcbiAqIGxlYXZlIGBzdmVsdGVgIG91dCBvZiBhIHByb2plY3QgdGhhdCBoYXMgbm8gU3ZlbHRlIGNvbXBvbmVudHMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZXJyb3Igc2F5cyB0aGF0IHRoZSBgc3ZlbHRlYCBwYWNrYWdlIGNhbm5vdCBiZSBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWlzc2luZ1N2ZWx0ZVBhY2thZ2VFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSAoZXJyb3IgYXMgUGFydGlhbDxSZWNvcmQ8J2NvZGUnLCB1bmtub3duPj4pLmNvZGU7XG4gIHJldHVybiB0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycgJiYgTU9EVUxFX05PVF9GT1VORF9DT0RFUy5oYXMoY29kZSkgJiYgTUlTU0lOR19TVkVMVEVfTUVTU0FHRV9SRUdfRVhQLnRlc3QoZXJyb3IubWVzc2FnZSk7XG59XG5cbi8qKlxuICogV3JhcHMgdGhlIGVzYnVpbGQtc3ZlbHRlIHBsdWdpbiB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBmb3JtYXQgaXMgdXNlZC5cbiAqXG4gKiBgZXNidWlsZC1zdmVsdGVgIGFuZCBgc3ZlbHRlLXByZXByb2Nlc3NgIGFyZSBsb2FkZWQgd2hlbiB0aGUgcGx1Z2luIGlzIHNldCB1cCwgbm90IHdoZW4gdGhpcyBtb2R1bGUgaXMgaW1wb3J0ZWQuIFdoZW5cbiAqIHRoZSBgc3ZlbHRlYCBwYWNrYWdlIGlzIG5vdCBpbnN0YWxsZWQsIGEgYnVpbGQgd2l0aCBubyBgLnN2ZWx0ZWAgZmlsZSBzdWNjZWVkcywgYW5kIGEgYnVpbGQgdGhhdCByZWFjaGVzIG9uZSBmYWlsc1xuICogd2l0aCBhbiBlcnJvciB0aGF0IG5hbWVzIHRoZSBtaXNzaW5nIHBhY2thZ2UuXG4gKlxuICogQHBhcmFtIGlzUHJvZHVjdGlvbkJ1aWxkIC0gV2hldGhlciB0aGUgYnVpbGQgaXMgYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICogQHJldHVybnMgVGhlIGVzYnVpbGQgcGx1Z2luLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ZlbHRlV3JhcHBlclBsdWdpbihpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbik6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3N2ZWx0ZS13cmFwcGVyJyxcbiAgICBhc3luYyBzZXR1cChidWlsZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgbGV0IHN2ZWx0ZVBsdWdpbjogUGx1Z2luO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3ZlbHRlUGx1Z2luID0gYXdhaXQgY3JlYXRlRXNidWlsZFN2ZWx0ZVBsdWdpbihpc1Byb2R1Y3Rpb25CdWlsZCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWlzTWlzc2luZ1N2ZWx0ZVBhY2thZ2VFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3Rlck1pc3NpbmdTdmVsdGVMb2FkZXIoYnVpbGQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gICAgICBjb25zdCBmb3JtYXQgPSBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJyA/ICdlc20nIDogJ2Nqcyc7XG4gICAgICBhd2FpdCBzdmVsdGVQbHVnaW4uc2V0dXAoe1xuICAgICAgICAuLi5idWlsZCxcbiAgICAgICAgaW5pdGlhbE9wdGlvbnM6IHtcbiAgICAgICAgICAuLi5idWlsZC5pbml0aWFsT3B0aW9ucyxcbiAgICAgICAgICBmb3JtYXRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gbG9hZHMgZXNidWlsZC1zdmVsdGUgd2l0aCBzdmVsdGUtcHJlcHJvY2VzczsgZXNidWlsZC1zdmVsdGUgY29tcGlsZXMgb25seSBpbnNpZGUgYSBsaXZlIGVzYnVpbGQgYnVpbGQuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVFc2J1aWxkU3ZlbHRlUGx1Z2luKGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuKTogUHJvbWlzZTxQbHVnaW4+IHtcbiAgY29uc3QgW2VzYnVpbGRTdmVsdGVNb2R1bGUsIHsgc3ZlbHRlUHJlcHJvY2VzcyB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtpbXBvcnQoJ2VzYnVpbGQtc3ZlbHRlJyksIGltcG9ydCgnc3ZlbHRlLXByZXByb2Nlc3MnKV0pO1xuICBjb25zdCBlc2J1aWxkU3ZlbHRlID0gZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wKGVzYnVpbGRTdmVsdGVNb2R1bGUuZGVmYXVsdCk7XG4gIHJldHVybiBlc2J1aWxkU3ZlbHRlKHtcbiAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgIGNzczogJ2luamVjdGVkJyxcbiAgICAgIGRldjogIWlzUHJvZHVjdGlvbkJ1aWxkXG4gICAgfSxcbiAgICBtb2R1bGVDb21waWxlck9wdGlvbnM6IHtcbiAgICAgIGRldjogIWlzUHJvZHVjdGlvbkJ1aWxkXG4gICAgfSxcbiAgICBwcmVwcm9jZXNzOiBzdmVsdGVQcmVwcm9jZXNzKClcbiAgfSk7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG5mdW5jdGlvbiByZWdpc3Rlck1pc3NpbmdTdmVsdGVMb2FkZXIoYnVpbGQ6IFBsdWdpbkJ1aWxkKTogdm9pZCB7XG4gIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogU1ZFTFRFX0ZJTFRFUiB9LCAoYXJndW1lbnRzXykgPT4gKHtcbiAgICBlcnJvcnM6IFt7XG4gICAgICB0ZXh0OiBgQ2Fubm90IGNvbXBpbGUgJHthcmd1bWVudHNfLnBhdGh9OiB0aGUgXFxgc3ZlbHRlXFxgIHBhY2thZ2UgaXMgbm90IGluc3RhbGxlZC4gSW5zdGFsbCBcXGBzdmVsdGVcXGAgaW4gdGhlIHByb2plY3QgdG8gYnVpbGQgU3ZlbHRlIGNvbXBvbmVudHMuYFxuICAgIH1dXG4gIH0pKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxTQUFTLG1DQUFtQztBQUU1QyxTQUFTLHVCQUF1QjtBQUVoQyxNQUFNLGlDQUFpQztBQUN2QyxNQUFNLHlCQUF5QixvQkFBSSxJQUFJLENBQUMsd0JBQXdCLGtCQUFrQixDQUFDO0FBQ25GLE1BQU0sZ0JBQWdCO0FBV2YsU0FBUyw0QkFBNEIsT0FBeUI7QUFDbkUsTUFBSSxFQUFFLGlCQUFpQixRQUFRO0FBQzdCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxPQUFRLE1BQTJDO0FBQ3pELFNBQU8sT0FBTyxTQUFTLFlBQVksdUJBQXVCLElBQUksSUFBSSxLQUFLLCtCQUErQixLQUFLLE1BQU0sT0FBTztBQUMxSDtBQVlPLFNBQVMsb0JBQW9CLG1CQUFvQztBQUN0RSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNLE1BQU0sT0FBc0I7QUFDaEMsVUFBSTtBQUNKLFVBQUk7QUFDRix1QkFBZSxNQUFNLDBCQUEwQixpQkFBaUI7QUFBQSxNQUNsRSxTQUFTLE9BQU87QUFDZCxZQUFJLENBQUMsNEJBQTRCLEtBQUssR0FBRztBQUN2QyxnQkFBTTtBQUFBLFFBQ1I7QUFDQSxvQ0FBNEIsS0FBSztBQUNqQztBQUFBLE1BQ0Y7QUFFQSxZQUFNLGNBQWMsTUFBTSxnQkFBZ0I7QUFDMUMsWUFBTSxTQUFTLFlBQVksU0FBUyxXQUFXLFFBQVE7QUFDdkQsWUFBTSxhQUFhLE1BQU07QUFBQSxRQUN2QixHQUFHO0FBQUEsUUFDSCxnQkFBZ0I7QUFBQSxVQUNkLEdBQUcsTUFBTTtBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjtBQUdBLGVBQWUsMEJBQTBCLG1CQUE2QztBQUNwRixRQUFNLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxNQUFNLFFBQVEsSUFBSSxDQUFDLE9BQU8sZ0JBQWdCLEdBQUcsT0FBTyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzdILFFBQU0sZ0JBQWdCLDRCQUE0QixvQkFBb0IsT0FBTztBQUM3RSxTQUFPLGNBQWM7QUFBQSxJQUNuQixpQkFBaUI7QUFBQSxNQUNmLEtBQUs7QUFBQSxNQUNMLEtBQUssQ0FBQztBQUFBLElBQ1I7QUFBQSxJQUNBLHVCQUF1QjtBQUFBLE1BQ3JCLEtBQUssQ0FBQztBQUFBLElBQ1I7QUFBQSxJQUNBLFlBQVksaUJBQWlCO0FBQUEsRUFDL0IsQ0FBQztBQUNIO0FBR0EsU0FBUyw0QkFBNEIsT0FBMEI7QUFDN0QsUUFBTSxPQUFPLEVBQUUsUUFBUSxjQUFjLEdBQUcsQ0FBQyxnQkFBZ0I7QUFBQSxJQUN2RCxRQUFRLENBQUM7QUFBQSxNQUNQLE1BQU0sa0JBQWtCLFdBQVcsSUFBSTtBQUFBLElBQ3pDLENBQUM7QUFBQSxFQUNILEVBQUU7QUFDSjsiLCJuYW1lcyI6W119
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvc3ZlbHRlLXdyYXBwZXItcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTdmVsdGUgd3JhcHBlciBlc2J1aWxkIHBsdWdpbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBsdWdpbixcbiAgUGx1Z2luQnVpbGRcbn0gZnJvbSAnZXNidWlsZCc7XG5cbmltcG9ydCB7IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuXG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb24gfSBmcm9tICcuLi8uLi9ucG0udHMnO1xuaW1wb3J0IHsgY3JlYXRlU3ZlbHRlUHJlcHJvY2Vzc29yIH0gZnJvbSAnLi9zdmVsdGUtcHJlcHJvY2Vzc29yLnRzJztcblxuY29uc3QgTUlTU0lOR19TVkVMVEVfTUVTU0FHRV9SRUdfRVhQID0gL0Nhbm5vdCBmaW5kICg/Om1vZHVsZXxwYWNrYWdlKSAnc3ZlbHRlKD86XFwvW14nXSopPycvO1xuY29uc3QgTU9EVUxFX05PVF9GT1VORF9DT0RFUyA9IG5ldyBTZXQoWydFUlJfTU9EVUxFX05PVF9GT1VORCcsICdNT0RVTEVfTk9UX0ZPVU5EJ10pO1xuY29uc3QgU1ZFTFRFX0ZJTFRFUiA9IC9cXC5zdmVsdGUkLztcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBlcnJvciBpcyB0aGUgb25lIGxvYWRpbmcgYGVzYnVpbGQtc3ZlbHRlYCB0aHJvd3Mgd2hlbiB0aGUgYHN2ZWx0ZWAgcGFja2FnZSBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIGBlc2J1aWxkLXN2ZWx0ZWAgaW1wb3J0cyBgc3ZlbHRlL2NvbXBpbGVyYCB3aGVuIGl0IGxvYWRzLCBhbmQgcGFja2FnZSBtYW5hZ2VycyB0aGF0IGRvIG5vdCBpbnN0YWxsIHBlZXJzIChZYXJuIDEpXG4gKiBsZWF2ZSBgc3ZlbHRlYCBvdXQgb2YgYSBwcm9qZWN0IHRoYXQgaGFzIG5vIFN2ZWx0ZSBjb21wb25lbnRzLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGVycm9yIHNheXMgdGhhdCB0aGUgYHN2ZWx0ZWAgcGFja2FnZSBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01pc3NpbmdTdmVsdGVQYWNrYWdlRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjb2RlID0gKGVycm9yIGFzIFBhcnRpYWw8UmVjb3JkPCdjb2RlJywgdW5rbm93bj4+KS5jb2RlO1xuICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIE1PRFVMRV9OT1RfRk9VTkRfQ09ERVMuaGFzKGNvZGUpICYmIE1JU1NJTkdfU1ZFTFRFX01FU1NBR0VfUkVHX0VYUC50ZXN0KGVycm9yLm1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFdyYXBzIHRoZSBlc2J1aWxkLXN2ZWx0ZSBwbHVnaW4gdG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgZm9ybWF0IGlzIHVzZWQuXG4gKlxuICogYGVzYnVpbGQtc3ZlbHRlYCBpcyBsb2FkZWQgd2hlbiB0aGUgcGx1Z2luIGlzIHNldCB1cCwgbm90IHdoZW4gdGhpcyBtb2R1bGUgaXMgaW1wb3J0ZWQuIFdoZW5cbiAqIHRoZSBgc3ZlbHRlYCBwYWNrYWdlIGlzIG5vdCBpbnN0YWxsZWQsIGEgYnVpbGQgd2l0aCBubyBgLnN2ZWx0ZWAgZmlsZSBzdWNjZWVkcywgYW5kIGEgYnVpbGQgdGhhdCByZWFjaGVzIG9uZSBmYWlsc1xuICogd2l0aCBhbiBlcnJvciB0aGF0IG5hbWVzIHRoZSBtaXNzaW5nIHBhY2thZ2UuXG4gKlxuICogQHBhcmFtIGlzUHJvZHVjdGlvbkJ1aWxkIC0gV2hldGhlciB0aGUgYnVpbGQgaXMgYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICogQHJldHVybnMgVGhlIGVzYnVpbGQgcGx1Z2luLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ZlbHRlV3JhcHBlclBsdWdpbihpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbik6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3N2ZWx0ZS13cmFwcGVyJyxcbiAgICBhc3luYyBzZXR1cChidWlsZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgbGV0IHN2ZWx0ZVBsdWdpbjogUGx1Z2luO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3ZlbHRlUGx1Z2luID0gYXdhaXQgY3JlYXRlRXNidWlsZFN2ZWx0ZVBsdWdpbihpc1Byb2R1Y3Rpb25CdWlsZCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWlzTWlzc2luZ1N2ZWx0ZVBhY2thZ2VFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3Rlck1pc3NpbmdTdmVsdGVMb2FkZXIoYnVpbGQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gICAgICBjb25zdCBmb3JtYXQgPSBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJyA/ICdlc20nIDogJ2Nqcyc7XG4gICAgICBhd2FpdCBzdmVsdGVQbHVnaW4uc2V0dXAoe1xuICAgICAgICAuLi5idWlsZCxcbiAgICAgICAgaW5pdGlhbE9wdGlvbnM6IHtcbiAgICAgICAgICAuLi5idWlsZC5pbml0aWFsT3B0aW9ucyxcbiAgICAgICAgICBmb3JtYXRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gZXNidWlsZC1zdmVsdGUgY29tcGlsZXMgb25seSBpbnNpZGUgYSBsaXZlIGVzYnVpbGQgYnVpbGQ7IHN2ZWx0ZS13cmFwcGVyLXBsdWdpbi5pbnRlZ3JhdGlvbi50ZXN0LnRzIHJ1bnMgb25lLiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlRXNidWlsZFN2ZWx0ZVBsdWdpbihpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbik6IFByb21pc2U8UGx1Z2luPiB7XG4gIGNvbnN0IGVzYnVpbGRTdmVsdGVNb2R1bGUgPSBhd2FpdCBpbXBvcnQoJ2VzYnVpbGQtc3ZlbHRlJyk7XG4gIGNvbnN0IGVzYnVpbGRTdmVsdGUgPSBleHRyYWN0RGVmYXVsdEV4cG9ydEludGVyb3AoZXNidWlsZFN2ZWx0ZU1vZHVsZS5kZWZhdWx0KTtcbiAgcmV0dXJuIGVzYnVpbGRTdmVsdGUoe1xuICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgY3NzOiAnaW5qZWN0ZWQnLFxuICAgICAgZGV2OiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICB9LFxuICAgIG1vZHVsZUNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgZGV2OiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICB9LFxuICAgIHByZXByb2Nlc3M6IGNyZWF0ZVN2ZWx0ZVByZXByb2Nlc3NvcigpXG4gIH0pO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuZnVuY3Rpb24gcmVnaXN0ZXJNaXNzaW5nU3ZlbHRlTG9hZGVyKGJ1aWxkOiBQbHVnaW5CdWlsZCk6IHZvaWQge1xuICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IFNWRUxURV9GSUxURVIgfSwgKGFyZ3VtZW50c18pID0+ICh7XG4gICAgZXJyb3JzOiBbe1xuICAgICAgdGV4dDogYENhbm5vdCBjb21waWxlICR7YXJndW1lbnRzXy5wYXRofTogdGhlIFxcYHN2ZWx0ZVxcYCBwYWNrYWdlIGlzIG5vdCBpbnN0YWxsZWQuIEluc3RhbGwgXFxgc3ZlbHRlXFxgIGluIHRoZSBwcm9qZWN0IHRvIGJ1aWxkIFN2ZWx0ZSBjb21wb25lbnRzLmBcbiAgICB9XVxuICB9KSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0EsU0FBUyxtQ0FBbUM7QUFFNUMsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyxnQ0FBZ0M7QUFFekMsTUFBTSxpQ0FBaUM7QUFDdkMsTUFBTSx5QkFBeUIsb0JBQUksSUFBSSxDQUFDLHdCQUF3QixrQkFBa0IsQ0FBQztBQUNuRixNQUFNLGdCQUFnQjtBQVdmLFNBQVMsNEJBQTRCLE9BQXlCO0FBQ25FLE1BQUksRUFBRSxpQkFBaUIsUUFBUTtBQUM3QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sT0FBUSxNQUEyQztBQUN6RCxTQUFPLE9BQU8sU0FBUyxZQUFZLHVCQUF1QixJQUFJLElBQUksS0FBSywrQkFBK0IsS0FBSyxNQUFNLE9BQU87QUFDMUg7QUFZTyxTQUFTLG9CQUFvQixtQkFBb0M7QUFDdEUsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTSxNQUFNLE9BQXNCO0FBQ2hDLFVBQUk7QUFDSixVQUFJO0FBQ0YsdUJBQWUsTUFBTSwwQkFBMEIsaUJBQWlCO0FBQUEsTUFDbEUsU0FBUyxPQUFPO0FBQ2QsWUFBSSxDQUFDLDRCQUE0QixLQUFLLEdBQUc7QUFDdkMsZ0JBQU07QUFBQSxRQUNSO0FBQ0Esb0NBQTRCLEtBQUs7QUFDakM7QUFBQSxNQUNGO0FBRUEsWUFBTSxjQUFjLE1BQU0sZ0JBQWdCO0FBQzFDLFlBQU0sU0FBUyxZQUFZLFNBQVMsV0FBVyxRQUFRO0FBQ3ZELFlBQU0sYUFBYSxNQUFNO0FBQUEsUUFDdkIsR0FBRztBQUFBLFFBQ0gsZ0JBQWdCO0FBQUEsVUFDZCxHQUFHLE1BQU07QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0Y7QUFHQSxlQUFlLDBCQUEwQixtQkFBNkM7QUFDcEYsUUFBTSxzQkFBc0IsTUFBTSxPQUFPLGdCQUFnQjtBQUN6RCxRQUFNLGdCQUFnQiw0QkFBNEIsb0JBQW9CLE9BQU87QUFDN0UsU0FBTyxjQUFjO0FBQUEsSUFDbkIsaUJBQWlCO0FBQUEsTUFDZixLQUFLO0FBQUEsTUFDTCxLQUFLLENBQUM7QUFBQSxJQUNSO0FBQUEsSUFDQSx1QkFBdUI7QUFBQSxNQUNyQixLQUFLLENBQUM7QUFBQSxJQUNSO0FBQUEsSUFDQSxZQUFZLHlCQUF5QjtBQUFBLEVBQ3ZDLENBQUM7QUFDSDtBQUdBLFNBQVMsNEJBQTRCLE9BQTBCO0FBQzdELFFBQU0sT0FBTyxFQUFFLFFBQVEsY0FBYyxHQUFHLENBQUMsZ0JBQWdCO0FBQUEsSUFDdkQsUUFBUSxDQUFDO0FBQUEsTUFDUCxNQUFNLGtCQUFrQixXQUFXLElBQUk7QUFBQSxJQUN6QyxDQUFDO0FBQUEsRUFDSCxFQUFFO0FBQ0o7IiwibmFtZXMiOltdfQ==
@@ -8,6 +8,7 @@ import {
8
8
  readFile
9
9
  } from "node:fs/promises";
10
10
  import { resolve } from "node:path";
11
+ import { getBulkConcurrency } from "../bulk-concurrency.mjs";
11
12
  import {
12
13
  collectBrokenExternalLinks,
13
14
  collectBrokenLinks,
@@ -41,7 +42,7 @@ ${formatUnrenderedAlerts(unrenderedAlerts)}`
41
42
  }
42
43
  const internalBrokenLinks = collectBrokenLinks(pages, createFileSystem({ allFiles, outputDirectory, pages }), options.siteBaseUrl);
43
44
  const externalTargets = collectExternalTargets(pages, options.siteBaseUrl);
44
- const externalBrokenLinks = await collectBrokenExternalLinks(externalTargets, fetchUrlStatus, EXTERNAL_LINK_CONCURRENCY);
45
+ const externalBrokenLinks = await collectBrokenExternalLinks(externalTargets, fetchUrlStatus, getBulkConcurrency(EXTERNAL_LINK_CONCURRENCY));
45
46
  const brokenLinks = [...internalBrokenLinks, ...externalBrokenLinks];
46
47
  if (brokenLinks.length > 0) {
47
48
  throw new Error(`Detected ${String(brokenLinks.length)} broken documentation link(s):
@@ -119,4 +120,4 @@ function toCheckableUrl(url) {
119
120
  export {
120
121
  assertDocsLinksResolve
121
122
  };
122
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9kb2NzLWxpbmtzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmFsaWRhdGVzIHRoZSBsaW5rcyBlbWl0dGVkIGJ5IGEgYnVpbHQgZG9jdW1lbnRhdGlvbiBzaXRlLlxuICpcbiAqIEludGVybmFsIGxpbmtzIGFyZSByZXNvbHZlZCBvZmZsaW5lIGFnYWluc3QgdGhlIGJ1aWxkIG91dHB1dDsgZXh0ZXJuYWwgbGlua3MgYXJlIHZhbGlkYXRlZCBvdmVyIHRoZSBuZXR3b3JrLFxuICogZGVkdXBsaWNhdGVkIHNvIGVhY2ggdW5pcXVlIFVSTCBpcyBmZXRjaGVkIGF0IG1vc3Qgb25jZS4gU2VlIHtAbGluayAuL2xpbmstY2hlY2sudHN9IGZvciB0aGUgZGVjaXNpb24gbG9naWMuXG4gKlxuICogSXQgYWxzbyBmYWlscyBvbiBhIEdpdEh1YiBhbGVydCB0aGF0IHJlYWNoZWQgYSBwYWdlIGFzIGEgcGxhaW4gYmxvY2txdW90ZSAoc2VlIHtAbGluayAuL3VucmVuZGVyZWQtYWxlcnRzLnRzfSksXG4gKiBzaW5jZSBub3RoaW5nIGVsc2Ugbm90aWNlcyB3aGVuIHRoZSBjb252ZXJzaW9uIHN0b3BzLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJlYWRGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRG9jdW1lbnRhdGlvblBhZ2UsXG4gIEV4dGVybmFsTGlua1Byb2JlUmVzdWx0LFxuICBMaW5rQ2hlY2tGaWxlU3lzdGVtXG59IGZyb20gJy4vbGluay1jaGVjay50cyc7XG5cbmltcG9ydCB7XG4gIGNvbGxlY3RCcm9rZW5FeHRlcm5hbExpbmtzLFxuICBjb2xsZWN0QnJva2VuTGlua3MsXG4gIGNvbGxlY3RFeHRlcm5hbFRhcmdldHMsXG4gIGV4dHJhY3RJZHMsXG4gIGZvcm1hdEJyb2tlbkxpbmtzLFxuICBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTLFxuICBwYXJzZVJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kcyxcbiAgcmVzb2x2ZVdpdGhpblJvb3Rcbn0gZnJvbSAnLi9saW5rLWNoZWNrLnRzJztcbmltcG9ydCB7XG4gIGNvbGxlY3RVbnJlbmRlcmVkQWxlcnRzLFxuICBmb3JtYXRVbnJlbmRlcmVkQWxlcnRzXG59IGZyb20gJy4vdW5yZW5kZXJlZC1hbGVydHMudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBhc3NlcnREb2NzTGlua3NSZXNvbHZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlcnREb2NzTGlua3NSZXNvbHZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBidWlsZCBvdXRwdXQgZm9sZGVyLCBub3JtYWxseSBgPGRvY3M+L2Rpc3RgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBVUkwgdGhlIHNpdGUgaXMgc2VydmVkIGZyb20sIHdpdGggYSB0cmFpbGluZyBzbGFzaCwgZS5nLiBgaHR0cHM6Ly9tbmFvdW1vdi5kZXYvdHlwZXNjcmlwdC1saWIvYC5cbiAgICovXG4gIHJlYWRvbmx5IHNpdGVCYXNlVXJsOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVYVEVSTkFMX0xJTktfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5jb25zdCBFWFRFUk5BTF9MSU5LX0NPTkNVUlJFTkNZID0gMjA7XG5jb25zdCBIVE1MX0ZJTEVfRVhURU5TSU9OID0gJy5odG1sJztcbmNvbnN0IE5QTV9QQUNLQUdFX1VSTF9QUkVGSVggPSAnaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvJztcbmNvbnN0IE5QTV9SRUdJU1RSWV9VUkxfUFJFRklYID0gJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyc7XG5cbi8vIFRoZSBob3N0IHNlcnZlcyB0aGlzIHBhZ2UgYXMgdGhlIGZhbGxiYWNrIGZvciBhbnkgbWlzc2luZyBwYXRoICh3aXRoIGEgNDA0IHN0YXR1cyksIHNvIGl0IGlzIG5vdCBhXG4vLyByZWFsIG5hdmlnYWJsZSByb3V0ZTogU3RhcmxpZ2h0IGdpdmVzIGl0IGEgc2VsZi1gcmVsPVwiY2Fub25pY2FsXCJgIG9mIGAvNDA0L2AgdGhhdCBpbmhlcmVudGx5IGNhbm5vdFxuLy8gcmVzb2x2ZSwgYW5kIGl0cyBib2R5IGxpbmtzIChuYXYsIGxvZ28pIGFyZSBpZGVudGljYWwgdG8gZXZlcnkgcmVhbCBwYWdlIHdlIGFscmVhZHkgdmFsaWRhdGUuXG5jb25zdCBGQUxMQkFDS19QQUdFX1JFTEFUSVZFX1BBVEggPSAnNDA0Lmh0bWwnO1xuXG5pbnRlcmZhY2UgQ3JlYXRlRmlsZVN5c3RlbVBhcmFtcyB7XG4gIHJlYWRvbmx5IGFsbEZpbGVzOiBTZXQ8c3RyaW5nPjtcbiAgcmVhZG9ubHkgb3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhZ2VzOiBEb2N1bWVudGF0aW9uUGFnZVtdO1xufVxuXG4vKipcbiAqIENoZWNrcyBldmVyeSBsaW5rIG9mIHRoZSBidWlsdCBzaXRlLCBhbmQgdGhhdCBldmVyeSBHaXRIdWIgYWxlcnQgcmVuZGVyZWQgYXMgYW4gYXNpZGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAqIEB0aHJvd3MgSWYgYW4gYWxlcnQgcmVuZGVyZWQgYXMgYSBwbGFpbiBibG9ja3F1b3RlLCBvciBhIGxpbmsgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydERvY3NMaW5rc1Jlc29sdmUob3B0aW9uczogQXNzZXJ0RG9jc0xpbmtzUmVzb2x2ZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBvdXRwdXREaXJlY3RvcnkgPSByZXNvbHZlKG9wdGlvbnMub3V0cHV0RGlyZWN0b3J5KS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgY29uc3QgYWxsRmlsZXMgPSBhd2FpdCBnZXRBbGxGaWxlcyhvdXRwdXREaXJlY3RvcnkpO1xuICBjb25zdCBwYWdlcyA9IGF3YWl0IHJlYWRQYWdlcyhvdXRwdXREaXJlY3RvcnksIGFsbEZpbGVzKTtcblxuICAvLyBPZmZsaW5lIGFuZCBpbnN0YW50LCBzbyBpdCBydW5zIGJlZm9yZSB0aGUgbmV0d29yayBoYWxmIGFuZCBmYWlscyBmaXJzdC5cbiAgY29uc3QgdW5yZW5kZXJlZEFsZXJ0cyA9IGNvbGxlY3RVbnJlbmRlcmVkQWxlcnRzKHBhZ2VzKTtcbiAgaWYgKHVucmVuZGVyZWRBbGVydHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEZXRlY3RlZCAke1N0cmluZyh1bnJlbmRlcmVkQWxlcnRzLmxlbmd0aCl9IEdpdEh1YiBhbGVydChzKSByZW5kZXJlZCBhcyBhIHBsYWluIGJsb2NrcXVvdGUgaW5zdGVhZCBvZiBhbiBhc2lkZTpcXG4ke2Zvcm1hdFVucmVuZGVyZWRBbGVydHModW5yZW5kZXJlZEFsZXJ0cyl9YFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbnRlcm5hbEJyb2tlbkxpbmtzID0gY29sbGVjdEJyb2tlbkxpbmtzKHBhZ2VzLCBjcmVhdGVGaWxlU3lzdGVtKHsgYWxsRmlsZXMsIG91dHB1dERpcmVjdG9yeSwgcGFnZXMgfSksIG9wdGlvbnMuc2l0ZUJhc2VVcmwpO1xuXG4gIGNvbnN0IGV4dGVybmFsVGFyZ2V0cyA9IGNvbGxlY3RFeHRlcm5hbFRhcmdldHMocGFnZXMsIG9wdGlvbnMuc2l0ZUJhc2VVcmwpO1xuICBjb25zdCBleHRlcm5hbEJyb2tlbkxpbmtzID0gYXdhaXQgY29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3MoZXh0ZXJuYWxUYXJnZXRzLCBmZXRjaFVybFN0YXR1cywgRVhURVJOQUxfTElOS19DT05DVVJSRU5DWSk7XG5cbiAgY29uc3QgYnJva2VuTGlua3MgPSBbLi4uaW50ZXJuYWxCcm9rZW5MaW5rcywgLi4uZXh0ZXJuYWxCcm9rZW5MaW5rc107XG4gIGlmIChicm9rZW5MaW5rcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXRlY3RlZCAke1N0cmluZyhicm9rZW5MaW5rcy5sZW5ndGgpfSBicm9rZW4gZG9jdW1lbnRhdGlvbiBsaW5rKHMpOlxcbiR7Zm9ybWF0QnJva2VuTGlua3MoYnJva2VuTGlua3MpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVTeXN0ZW0ocGFyYW1zOiBDcmVhdGVGaWxlU3lzdGVtUGFyYW1zKTogTGlua0NoZWNrRmlsZVN5c3RlbSB7XG4gIGNvbnN0IHsgYWxsRmlsZXMsIG91dHB1dERpcmVjdG9yeSwgcGFnZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgaHRtbEJ5UmVsYXRpdmVQYXRoID0gbmV3IE1hcChwYWdlcy5tYXAoKHBhZ2UpID0+IFtwYWdlLnJlbGF0aXZlUGF0aCwgcGFnZS5odG1sXSkpO1xuICBjb25zdCBpZHNDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICByZXR1cm4ge1xuICAgIHJlYWRJZHM6IChwYWdlS2V5KTogU2V0PHN0cmluZz4gPT4ge1xuICAgICAgbGV0IGlkcyA9IGlkc0NhY2hlLmdldChwYWdlS2V5KTtcbiAgICAgIGlmIChpZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBodG1sID0gaHRtbEJ5UmVsYXRpdmVQYXRoLmdldChwYWdlS2V5KTtcbiAgICAgICAgaWRzID0gaHRtbCA9PT0gdW5kZWZpbmVkID8gbmV3IFNldDxzdHJpbmc+KCkgOiBleHRyYWN0SWRzKGh0bWwpO1xuICAgICAgICBpZHNDYWNoZS5zZXQocGFnZUtleSwgaWRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9LFxuICAgIHJlc29sdmVFeGlzdGluZ1BhZ2U6IChvdXRwdXRSZWxhdGl2ZVBhdGgpOiBudWxsIHwgc3RyaW5nID0+IHtcbiAgICAgIGlmIChyZXNvbHZlV2l0aGluUm9vdChvdXRwdXREaXJlY3RvcnksIG91dHB1dFJlbGF0aXZlUGF0aCkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBvdXRwdXRSZWxhdGl2ZVBhdGgucmVwbGFjZSgvXFwvJC91LCAnJyk7XG4gICAgICBjb25zdCBjYW5kaWRhdGVzID0gdHJpbW1lZCA9PT0gJycgPyBbJ2luZGV4Lmh0bWwnXSA6IFt0cmltbWVkLCBgJHt0cmltbWVkfS9pbmRleC5odG1sYF07XG4gICAgICByZXR1cm4gY2FuZGlkYXRlcy5maW5kKChjYW5kaWRhdGUpID0+IGFsbEZpbGVzLmhhcyhjYW5kaWRhdGUpKSA/PyBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hVcmxTdGF0dXModXJsOiBzdHJpbmcpOiBQcm9taXNlPEV4dGVybmFsTGlua1Byb2JlUmVzdWx0PiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXRJZCA9IGdsb2JhbFRoaXMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBFWFRFUk5BTF9MSU5LX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godG9DaGVja2FibGVVcmwodXJsKSwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuICAgIC8vIENhbmNlbCB0aGUgdW5yZWFkIGJvZHkgc28gdW5kaWNpIHJlbGVhc2VzIHRoZSBjb25uZWN0aW9uIGltbWVkaWF0ZWx5LlxuICAgIC8vIFdpdGhvdXQgdGhpcyB0aGUgcGVyLWhvc3QgY29ubmVjdGlvbiBwb29sIHN0YWxscyBhbmQgc2FtZS1ob3N0IHJlcXVlc3RzXG4gICAgLy8gc2VyaWFsaXplLCB0dXJuaW5nIGEgfjNzIHJ1biBpbnRvIG1pbnV0ZXMuXG4gICAgYXdhaXQgcmVzcG9uc2UuYm9keT8uY2FuY2VsKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kczogcGFyc2VSZXRyeUFmdGVySW5NaWxsaXNlY29uZHMocmVzcG9uc2UuaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJyksIERhdGUubm93KCkpLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBzdGF0dXM6IE5FVFdPUktfRkFJTFVSRV9TVEFUVVMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICBnbG9iYWxUaGlzLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFsbEZpbGVzKG91dHB1dFJvb3RQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKG91dHB1dFJvb3RQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKCFlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gcmVzb2x2ZShlbnRyeS5wYXJlbnRQYXRoLCBlbnRyeS5uYW1lKS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgICBmaWxlcy5hZGQoYWJzb2x1dGVQYXRoLnNsaWNlKGAke291dHB1dFJvb3RQYXRofS9gLmxlbmd0aCkpO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUGFnZXMob3V0cHV0Um9vdFBhdGg6IHN0cmluZywgYWxsRmlsZXM6IFNldDxzdHJpbmc+KTogUHJvbWlzZTxEb2N1bWVudGF0aW9uUGFnZVtdPiB7XG4gIGNvbnN0IHBhZ2VzOiBEb2N1bWVudGF0aW9uUGFnZVtdID0gW107XG4gIGZvciAoY29uc3QgcmVsYXRpdmVQYXRoIG9mIGFsbEZpbGVzKSB7XG4gICAgaWYgKCFyZWxhdGl2ZVBhdGguZW5kc1dpdGgoSFRNTF9GSUxFX0VYVEVOU0lPTikgfHwgcmVsYXRpdmVQYXRoID09PSBGQUxMQkFDS19QQUdFX1JFTEFUSVZFX1BBVEgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGh0bWwgPSBhd2FpdCByZWFkRmlsZShyZXNvbHZlKG91dHB1dFJvb3RQYXRoLCByZWxhdGl2ZVBhdGgpLCAndXRmLTgnKTtcbiAgICBwYWdlcy5wdXNoKHsgaHRtbCwgcmVsYXRpdmVQYXRoIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBhZ2VzO1xufVxuXG4vLyBUaGUgbnBtanMgc2l0ZSBhbnN3ZXJzIGFuIHVuYXR0ZW5kZWQgYGZldGNoYCBvZiBhIHBhY2thZ2UgcGFnZSB3aXRoIDQwMywgc28gdGhlIHBhY2thZ2UgaXMgcHJvYmVkIG9uIHRoZSByZWdpc3RyeVxuLy8gaW5zdGVhZCwgdGhlIHJld3JpdGUgdGhlIG1hcmtkb3duIGxpbmsgY2hlY2sgZ2l2ZXMgbGlua2luYXRvci5cbmZ1bmN0aW9uIHRvQ2hlY2thYmxlVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHVybC5zdGFydHNXaXRoKE5QTV9QQUNLQUdFX1VSTF9QUkVGSVgpID8gTlBNX1JFR0lTVFJZX1VSTF9QUkVGSVggKyB1cmwuc2xpY2UoTlBNX1BBQ0tBR0VfVVJMX1BSRUZJWC5sZW5ndGgpIDogdXJsO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFZQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZUFBZTtBQVF4QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFB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
123
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9kb2NzLWxpbmtzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmFsaWRhdGVzIHRoZSBsaW5rcyBlbWl0dGVkIGJ5IGEgYnVpbHQgZG9jdW1lbnRhdGlvbiBzaXRlLlxuICpcbiAqIEludGVybmFsIGxpbmtzIGFyZSByZXNvbHZlZCBvZmZsaW5lIGFnYWluc3QgdGhlIGJ1aWxkIG91dHB1dDsgZXh0ZXJuYWwgbGlua3MgYXJlIHZhbGlkYXRlZCBvdmVyIHRoZSBuZXR3b3JrLFxuICogZGVkdXBsaWNhdGVkIHNvIGVhY2ggdW5pcXVlIFVSTCBpcyBmZXRjaGVkIGF0IG1vc3Qgb25jZS4gU2VlIHtAbGluayAuL2xpbmstY2hlY2sudHN9IGZvciB0aGUgZGVjaXNpb24gbG9naWMuXG4gKlxuICogSXQgYWxzbyBmYWlscyBvbiBhIEdpdEh1YiBhbGVydCB0aGF0IHJlYWNoZWQgYSBwYWdlIGFzIGEgcGxhaW4gYmxvY2txdW90ZSAoc2VlIHtAbGluayAuL3VucmVuZGVyZWQtYWxlcnRzLnRzfSksXG4gKiBzaW5jZSBub3RoaW5nIGVsc2Ugbm90aWNlcyB3aGVuIHRoZSBjb252ZXJzaW9uIHN0b3BzLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJlYWRGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRG9jdW1lbnRhdGlvblBhZ2UsXG4gIEV4dGVybmFsTGlua1Byb2JlUmVzdWx0LFxuICBMaW5rQ2hlY2tGaWxlU3lzdGVtXG59IGZyb20gJy4vbGluay1jaGVjay50cyc7XG5cbmltcG9ydCB7IGdldEJ1bGtDb25jdXJyZW5jeSB9IGZyb20gJy4uL2J1bGstY29uY3VycmVuY3kudHMnO1xuaW1wb3J0IHtcbiAgY29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3MsXG4gIGNvbGxlY3RCcm9rZW5MaW5rcyxcbiAgY29sbGVjdEV4dGVybmFsVGFyZ2V0cyxcbiAgZXh0cmFjdElkcyxcbiAgZm9ybWF0QnJva2VuTGlua3MsXG4gIE5FVFdPUktfRkFJTFVSRV9TVEFUVVMsXG4gIHBhcnNlUmV0cnlBZnRlckluTWlsbGlzZWNvbmRzLFxuICByZXNvbHZlV2l0aGluUm9vdFxufSBmcm9tICcuL2xpbmstY2hlY2sudHMnO1xuaW1wb3J0IHtcbiAgY29sbGVjdFVucmVuZGVyZWRBbGVydHMsXG4gIGZvcm1hdFVucmVuZGVyZWRBbGVydHNcbn0gZnJvbSAnLi91bnJlbmRlcmVkLWFsZXJ0cy50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGFzc2VydERvY3NMaW5rc1Jlc29sdmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc2VydERvY3NMaW5rc1Jlc29sdmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGJ1aWxkIG91dHB1dCBmb2xkZXIsIG5vcm1hbGx5IGA8ZG9jcz4vZGlzdGAuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXREaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFic29sdXRlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSwgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLCBlLmcuIGBodHRwczovL21uYW91bW92LmRldi90eXBlc2NyaXB0LWxpYi9gLlxuICAgKi9cbiAgcmVhZG9ubHkgc2l0ZUJhc2VVcmw6IHN0cmluZztcbn1cblxuY29uc3QgRVhURVJOQUxfTElOS19USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEwXzAwMDtcbmNvbnN0IEVYVEVSTkFMX0xJTktfQ09OQ1VSUkVOQ1kgPSAyMDtcbmNvbnN0IEhUTUxfRklMRV9FWFRFTlNJT04gPSAnLmh0bWwnO1xuY29uc3QgTlBNX1BBQ0tBR0VfVVJMX1BSRUZJWCA9ICdodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS8nO1xuY29uc3QgTlBNX1JFR0lTVFJZX1VSTF9QUkVGSVggPSAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJztcblxuLy8gVGhlIGhvc3Qgc2VydmVzIHRoaXMgcGFnZSBhcyB0aGUgZmFsbGJhY2sgZm9yIGFueSBtaXNzaW5nIHBhdGggKHdpdGggYSA0MDQgc3RhdHVzKSwgc28gaXQgaXMgbm90IGFcbi8vIHJlYWwgbmF2aWdhYmxlIHJvdXRlOiBTdGFybGlnaHQgZ2l2ZXMgaXQgYSBzZWxmLWByZWw9XCJjYW5vbmljYWxcImAgb2YgYC80MDQvYCB0aGF0IGluaGVyZW50bHkgY2Fubm90XG4vLyByZXNvbHZlLCBhbmQgaXRzIGJvZHkgbGlua3MgKG5hdiwgbG9nbykgYXJlIGlkZW50aWNhbCB0byBldmVyeSByZWFsIHBhZ2Ugd2UgYWxyZWFkeSB2YWxpZGF0ZS5cbmNvbnN0IEZBTExCQUNLX1BBR0VfUkVMQVRJVkVfUEFUSCA9ICc0MDQuaHRtbCc7XG5cbmludGVyZmFjZSBDcmVhdGVGaWxlU3lzdGVtUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWxsRmlsZXM6IFNldDxzdHJpbmc+O1xuICByZWFkb25seSBvdXRwdXREaXJlY3Rvcnk6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFnZXM6IERvY3VtZW50YXRpb25QYWdlW107XG59XG5cbi8qKlxuICogQ2hlY2tzIGV2ZXJ5IGxpbmsgb2YgdGhlIGJ1aWx0IHNpdGUsIGFuZCB0aGF0IGV2ZXJ5IEdpdEh1YiBhbGVydCByZW5kZXJlZCBhcyBhbiBhc2lkZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zLlxuICogQHRocm93cyBJZiBhbiBhbGVydCByZW5kZXJlZCBhcyBhIHBsYWluIGJsb2NrcXVvdGUsIG9yIGEgbGluayBkb2VzIG5vdCByZXNvbHZlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0RG9jc0xpbmtzUmVzb2x2ZShvcHRpb25zOiBBc3NlcnREb2NzTGlua3NSZXNvbHZlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG91dHB1dERpcmVjdG9yeSA9IHJlc29sdmUob3B0aW9ucy5vdXRwdXREaXJlY3RvcnkpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBjb25zdCBhbGxGaWxlcyA9IGF3YWl0IGdldEFsbEZpbGVzKG91dHB1dERpcmVjdG9yeSk7XG4gIGNvbnN0IHBhZ2VzID0gYXdhaXQgcmVhZFBhZ2VzKG91dHB1dERpcmVjdG9yeSwgYWxsRmlsZXMpO1xuXG4gIC8vIE9mZmxpbmUgYW5kIGluc3RhbnQsIHNvIGl0IHJ1bnMgYmVmb3JlIHRoZSBuZXR3b3JrIGhhbGYgYW5kIGZhaWxzIGZpcnN0LlxuICBjb25zdCB1bnJlbmRlcmVkQWxlcnRzID0gY29sbGVjdFVucmVuZGVyZWRBbGVydHMocGFnZXMpO1xuICBpZiAodW5yZW5kZXJlZEFsZXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYERldGVjdGVkICR7U3RyaW5nKHVucmVuZGVyZWRBbGVydHMubGVuZ3RoKX0gR2l0SHViIGFsZXJ0KHMpIHJlbmRlcmVkIGFzIGEgcGxhaW4gYmxvY2txdW90ZSBpbnN0ZWFkIG9mIGFuIGFzaWRlOlxcbiR7Zm9ybWF0VW5yZW5kZXJlZEFsZXJ0cyh1bnJlbmRlcmVkQWxlcnRzKX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGludGVybmFsQnJva2VuTGlua3MgPSBjb2xsZWN0QnJva2VuTGlua3MocGFnZXMsIGNyZWF0ZUZpbGVTeXN0ZW0oeyBhbGxGaWxlcywgb3V0cHV0RGlyZWN0b3J5LCBwYWdlcyB9KSwgb3B0aW9ucy5zaXRlQmFzZVVybCk7XG5cbiAgY29uc3QgZXh0ZXJuYWxUYXJnZXRzID0gY29sbGVjdEV4dGVybmFsVGFyZ2V0cyhwYWdlcywgb3B0aW9ucy5zaXRlQmFzZVVybCk7XG4gIGNvbnN0IGV4dGVybmFsQnJva2VuTGlua3MgPSBhd2FpdCBjb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rcyhleHRlcm5hbFRhcmdldHMsIGZldGNoVXJsU3RhdHVzLCBnZXRCdWxrQ29uY3VycmVuY3koRVhURVJOQUxfTElOS19DT05DVVJSRU5DWSkpO1xuXG4gIGNvbnN0IGJyb2tlbkxpbmtzID0gWy4uLmludGVybmFsQnJva2VuTGlua3MsIC4uLmV4dGVybmFsQnJva2VuTGlua3NdO1xuICBpZiAoYnJva2VuTGlua3MubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV0ZWN0ZWQgJHtTdHJpbmcoYnJva2VuTGlua3MubGVuZ3RoKX0gYnJva2VuIGRvY3VtZW50YXRpb24gbGluayhzKTpcXG4ke2Zvcm1hdEJyb2tlbkxpbmtzKGJyb2tlbkxpbmtzKX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWxlU3lzdGVtKHBhcmFtczogQ3JlYXRlRmlsZVN5c3RlbVBhcmFtcyk6IExpbmtDaGVja0ZpbGVTeXN0ZW0ge1xuICBjb25zdCB7IGFsbEZpbGVzLCBvdXRwdXREaXJlY3RvcnksIHBhZ2VzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGh0bWxCeVJlbGF0aXZlUGF0aCA9IG5ldyBNYXAocGFnZXMubWFwKChwYWdlKSA9PiBbcGFnZS5yZWxhdGl2ZVBhdGgsIHBhZ2UuaHRtbF0pKTtcbiAgY29uc3QgaWRzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG5cbiAgcmV0dXJuIHtcbiAgICByZWFkSWRzOiAocGFnZUtleSk6IFNldDxzdHJpbmc+ID0+IHtcbiAgICAgIGxldCBpZHMgPSBpZHNDYWNoZS5nZXQocGFnZUtleSk7XG4gICAgICBpZiAoaWRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgaHRtbCA9IGh0bWxCeVJlbGF0aXZlUGF0aC5nZXQocGFnZUtleSk7XG4gICAgICAgIGlkcyA9IGh0bWwgPT09IHVuZGVmaW5lZCA/IG5ldyBTZXQ8c3RyaW5nPigpIDogZXh0cmFjdElkcyhodG1sKTtcbiAgICAgICAgaWRzQ2FjaGUuc2V0KHBhZ2VLZXksIGlkcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpZHM7XG4gICAgfSxcbiAgICByZXNvbHZlRXhpc3RpbmdQYWdlOiAob3V0cHV0UmVsYXRpdmVQYXRoKTogbnVsbCB8IHN0cmluZyA9PiB7XG4gICAgICBpZiAocmVzb2x2ZVdpdGhpblJvb3Qob3V0cHV0RGlyZWN0b3J5LCBvdXRwdXRSZWxhdGl2ZVBhdGgpID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmltbWVkID0gb3V0cHV0UmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcLyQvdSwgJycpO1xuICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IHRyaW1tZWQgPT09ICcnID8gWydpbmRleC5odG1sJ10gOiBbdHJpbW1lZCwgYCR7dHJpbW1lZH0vaW5kZXguaHRtbGBdO1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBhbGxGaWxlcy5oYXMoY2FuZGlkYXRlKSkgPz8gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVXJsU3RhdHVzKHVybDogc3RyaW5nKTogUHJvbWlzZTxFeHRlcm5hbExpbmtQcm9iZVJlc3VsdD4ge1xuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lb3V0SWQgPSBnbG9iYWxUaGlzLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgRVhURVJOQUxfTElOS19USU1FT1VUX0lOX01JTExJU0VDT05EUyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRvQ2hlY2thYmxlVXJsKHVybCksIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcbiAgICAvLyBDYW5jZWwgdGhlIHVucmVhZCBib2R5IHNvIHVuZGljaSByZWxlYXNlcyB0aGUgY29ubmVjdGlvbiBpbW1lZGlhdGVseS5cbiAgICAvLyBXaXRob3V0IHRoaXMgdGhlIHBlci1ob3N0IGNvbm5lY3Rpb24gcG9vbCBzdGFsbHMgYW5kIHNhbWUtaG9zdCByZXF1ZXN0c1xuICAgIC8vIHNlcmlhbGl6ZSwgdHVybmluZyBhIH4zcyBydW4gaW50byBtaW51dGVzLlxuICAgIGF3YWl0IHJlc3BvbnNlLmJvZHk/LmNhbmNlbCgpO1xuICAgIHJldHVybiB7XG4gICAgICByZXRyeUFmdGVySW5NaWxsaXNlY29uZHM6IHBhcnNlUmV0cnlBZnRlckluTWlsbGlzZWNvbmRzKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpLCBEYXRlLm5vdygpKSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTIH07XG4gIH0gZmluYWxseSB7XG4gICAgZ2xvYmFsVGhpcy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBbGxGaWxlcyhvdXRwdXRSb290UGF0aDogc3RyaW5nKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihvdXRwdXRSb290UGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICghZW50cnkuaXNGaWxlKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHJlc29sdmUoZW50cnkucGFyZW50UGF0aCwgZW50cnkubmFtZSkucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gICAgZmlsZXMuYWRkKGFic29sdXRlUGF0aC5zbGljZShgJHtvdXRwdXRSb290UGF0aH0vYC5sZW5ndGgpKTtcbiAgfVxuXG4gIHJldHVybiBmaWxlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFBhZ2VzKG91dHB1dFJvb3RQYXRoOiBzdHJpbmcsIGFsbEZpbGVzOiBTZXQ8c3RyaW5nPik6IFByb21pc2U8RG9jdW1lbnRhdGlvblBhZ2VbXT4ge1xuICBjb25zdCBwYWdlczogRG9jdW1lbnRhdGlvblBhZ2VbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJlbGF0aXZlUGF0aCBvZiBhbGxGaWxlcykge1xuICAgIGlmICghcmVsYXRpdmVQYXRoLmVuZHNXaXRoKEhUTUxfRklMRV9FWFRFTlNJT04pIHx8IHJlbGF0aXZlUGF0aCA9PT0gRkFMTEJBQ0tfUEFHRV9SRUxBVElWRV9QQVRIKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBodG1sID0gYXdhaXQgcmVhZEZpbGUocmVzb2x2ZShvdXRwdXRSb290UGF0aCwgcmVsYXRpdmVQYXRoKSwgJ3V0Zi04Jyk7XG4gICAgcGFnZXMucHVzaCh7IGh0bWwsIHJlbGF0aXZlUGF0aCB9KTtcbiAgfVxuXG4gIHJldHVybiBwYWdlcztcbn1cblxuLy8gVGhlIG5wbWpzIHNpdGUgYW5zd2VycyBhbiB1bmF0dGVuZGVkIGBmZXRjaGAgb2YgYSBwYWNrYWdlIHBhZ2Ugd2l0aCA0MDMsIHNvIHRoZSBwYWNrYWdlIGlzIHByb2JlZCBvbiB0aGUgcmVnaXN0cnlcbi8vIGluc3RlYWQsIHRoZSByZXdyaXRlIHRoZSBtYXJrZG93biBsaW5rIGNoZWNrIGdpdmVzIGxpbmtpbmF0b3IuXG5mdW5jdGlvbiB0b0NoZWNrYWJsZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB1cmwuc3RhcnRzV2l0aChOUE1fUEFDS0FHRV9VUkxfUFJFRklYKSA/IE5QTV9SRUdJU1RSWV9VUkxfUFJFRklYICsgdXJsLnNsaWNlKE5QTV9QQUNLQUdFX1VSTF9QUkVGSVgubGVuZ3RoKSA6IHVybDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBWUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGVB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