obsidian-dev-utils 92.0.0 → 93.0.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 (87) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/demo-vault-helper/main.js +30 -44
  3. package/dist/integration-test-plugin/main.js +10029 -9743
  4. package/dist/lib/cjs/__merged.cjs +9 -1
  5. package/dist/lib/cjs/__merged.d.cts +2 -2
  6. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  7. package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +1 -1
  8. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +5 -0
  9. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +118 -36
  10. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +88 -19
  11. package/dist/lib/cjs/obsidian/demo-vault-helper-settings.cjs +120 -0
  12. package/dist/lib/cjs/obsidian/demo-vault-helper-settings.d.cts +29 -0
  13. package/dist/lib/cjs/obsidian/demo-vault-helper.cjs +31 -32
  14. package/dist/lib/cjs/obsidian/demo-vault-helper.d.cts +7 -3
  15. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +4 -2
  16. package/dist/lib/cjs/obsidian/index.cjs +4 -1
  17. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  18. package/dist/lib/cjs/obsidian/vault.cjs +1 -1
  19. package/dist/lib/cjs/obsidian/vault.d.cts +3 -0
  20. package/dist/lib/cjs/obsidian/workspace.cjs +28 -3
  21. package/dist/lib/cjs/obsidian/workspace.d.cts +50 -0
  22. package/dist/lib/cjs/script-utils/demo-vault.cjs +8 -3
  23. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +1 -1
  24. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +3 -0
  25. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +1 -1
  26. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +3 -0
  27. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +1 -1
  28. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +3 -0
  29. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +1 -1
  30. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +3 -0
  31. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.cjs +1 -1
  32. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +3 -0
  33. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +1 -1
  34. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +3 -0
  35. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.cjs +1 -1
  36. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +3 -0
  37. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +1 -1
  38. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +3 -0
  39. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +1 -1
  40. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +3 -0
  41. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +1 -1
  42. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +3 -0
  43. package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +1 -1
  44. package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +12 -0
  45. package/dist/lib/esm/__merged.d.mts +2 -2
  46. package/dist/lib/esm/__merged.mjs +13 -3
  47. package/dist/lib/esm/generated-during-build.mjs +1 -1
  48. package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +5 -0
  49. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +1 -1
  50. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +88 -19
  51. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +116 -35
  52. package/dist/lib/esm/obsidian/demo-vault-helper-settings.d.mts +29 -0
  53. package/dist/lib/esm/obsidian/demo-vault-helper-settings.mjs +24 -0
  54. package/dist/lib/esm/obsidian/demo-vault-helper.d.mts +7 -3
  55. package/dist/lib/esm/obsidian/demo-vault-helper.mjs +32 -36
  56. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +4 -2
  57. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  58. package/dist/lib/esm/obsidian/index.mjs +3 -1
  59. package/dist/lib/esm/obsidian/vault.d.mts +3 -0
  60. package/dist/lib/esm/obsidian/vault.mjs +1 -1
  61. package/dist/lib/esm/obsidian/workspace.d.mts +50 -0
  62. package/dist/lib/esm/obsidian/workspace.mjs +24 -2
  63. package/dist/lib/esm/script-utils/demo-vault.mjs +10 -4
  64. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +3 -0
  65. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +1 -1
  66. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.d.mts +3 -0
  67. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +1 -1
  68. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.d.mts +3 -0
  69. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +1 -1
  70. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +3 -0
  71. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +1 -1
  72. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +3 -0
  73. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.mjs +1 -1
  74. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -0
  75. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +1 -1
  76. package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.mts +3 -0
  77. package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.mjs +1 -1
  78. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +3 -0
  79. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +1 -1
  80. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +3 -0
  81. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +1 -1
  82. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.d.mts +3 -0
  83. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +1 -1
  84. package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +12 -0
  85. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +1 -1
  86. package/obsidian/demo-vault-helper-settings/package.json +6 -0
  87. package/package.json +1 -1
@@ -574,4 +574,4 @@ export {
574
574
  saveNote,
575
575
  trashSafe
576
576
  };
577
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgT2JzaWRpYW4gVmF1bHQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIExpc3RlZEZpbGVzXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgZ2V0RGF0YUFkYXB0ZXJFeCxcbiAgcGFyZW50Rm9sZGVyUGF0aCxcbiAgVmlld1R5cGVcbn0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgTWFya2Rvd25WaWV3LFxuICBUQWJzdHJhY3RGaWxlLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vYXN5bmMudHMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUge1xuICBQYXRoT3JBYnN0cmFjdEZpbGUsXG4gIFBhdGhPckZpbGUsXG4gIFBhdGhPckZvbGRlclxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VMb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuaW1wb3J0IHsgYWJvcnRTaWduYWxBbnkgfSBmcm9tICcuLi9hYm9ydC1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgbm9vcEFzeW5jIH0gZnJvbSAnLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL3ZhbHVlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB7IHJldHJ5V2l0aFRpbWVvdXROb3RpY2UgfSBmcm9tICcuL2FzeW5jLXdpdGgtbm90aWNlLnRzJztcbmltcG9ydCB7XG4gIGFzRmlsZSxcbiAgYXNGb2xkZXIsXG4gIEZpbGVTeXN0ZW1UeXBlLFxuICBnZXRBYnN0cmFjdEZpbGUsXG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZVN5c3RlbVR5cGUsXG4gIGdldEZvbGRlcixcbiAgZ2V0Rm9sZGVyT3JOdWxsLFxuICBnZXRQYXRoLFxuICBpc0ZpbGUsXG4gIGlzTWFya2Rvd25GaWxlLFxuICBpc05vdGVcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi9pMThuL2kxOG4udHMnO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2Yge0BsaW5rIGNyZWF0ZUZvbGRlclNhZmV9LlxuICovXG5leHBvcnQgZW51bSBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBDcmVhdGVkID0gJ2NyZWF0ZWQnLFxuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdhcyBub3QgY3JlYXRlZCBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzLlxuICAgKi9cbiAgTm90Q3JlYXRlZCA9ICdub3QtY3JlYXRlZCdcbn1cblxuLyoqXG4gKiBBIGJlaGF2aW9yIGZvciBoYW5kbGluZyBlbXB0eSBmb2xkZXJzIGR1cmluZyBjbGVhbnVwLlxuICovXG5leHBvcnQgZW51bSBFbXB0eUZvbGRlckJlaGF2aW9yIHtcbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZW1wdHkgZm9sZGVyLlxuICAgKi9cbiAgRGVsZXRlID0gJ0RlbGV0ZScsXG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZW1wdHkgZm9sZGVyIGFuZCBhbGwgaXRzIGVtcHR5IHBhcmVudHMuXG4gICAqL1xuICBEZWxldGVXaXRoRW1wdHlQYXJlbnRzID0gJ0RlbGV0ZVdpdGhFbXB0eVBhcmVudHMnLFxuXG4gIC8qKlxuICAgKiBLZWVwIHRoZSBlbXB0eSBmb2xkZXIuXG4gICAqL1xuICBLZWVwID0gJ0tlZXAnXG59XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB7QGxpbmsgaW52b2tlRmlsZUFjdGlvblNhZmV9LlxuICovXG5leHBvcnQgZW51bSBJbnZva2VGaWxlQWN0aW9uU2FmZVJlc3VsdCB7XG4gIEludm9rZWQgPSAnaW52b2tlZCcsXG4gIE5vdEludm9rZWQgPSAnbm90LWludm9rZWQnXG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNsZWFudXBFbXB0eUZvbGRlcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsZWFudXBFbXB0eUZvbGRlcnNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBiZWhhdmlvciBkZXRlcm1pbmluZyBob3cgZW1wdHkgZm9sZGVycyBhcmUgY2xlYW5lZCB1cC5cbiAgICovXG4gIHJlYWRvbmx5IGVtcHR5Rm9sZGVyQmVoYXZpb3I6IEVtcHR5Rm9sZGVyQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRocyBvZiB0aGUgZm9sZGVycyB0byBjbGVhbiB1cCB3aGVuIGVtcHR5LlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyUGF0aHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3Ige0BsaW5rIHByb2Nlc3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRBcmd1bWVudHMge1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvcHlTYWZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb3B5U2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIG5ldyBwYXRoIHRvIGNvcHkgdGhlIGZpbGUgdG8uXG4gICAqL1xuICByZWFkb25seSBuZXdQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvciBmaWxlIHRvIGNvcHkuXG4gICAqL1xuICByZWFkb25seSBvbGRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBYnN0cmFjdEZpbGVQYXRoU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QWJzdHJhY3RGaWxlUGF0aFNhZmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlciB0byBnZXQgYSBzYWZlIHBhdGggZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogRmlsZVN5c3RlbVR5cGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0T3JDcmVhdGVBYnN0cmFjdEZpbGVTYWZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgYWJzdHJhY3QgZmlsZSB0byBnZXQgb3IgY3JlYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgYWJzdHJhY3QgZmlsZSB0byBnZXQgb3IgY3JlYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogRmlsZVN5c3RlbVR5cGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldFNhZmVSZW5hbWVQYXRofS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRTYWZlUmVuYW1lUGF0aFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIG5ldyBwYXRoIHRvIHJlbmFtZSB0aGUgYWJzdHJhY3QgZmlsZSB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gcmVuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGludm9rZVdpdGhGaWxlU3lzdGVtTG9ja30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2tlV2l0aEZpbGVTeXN0ZW1Mb2NrUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGVudCAtIFRoZSBjb250ZW50IG9mIHRoZSBmaWxlLlxuICAgKi9cbiAgJGZ1bmN0aW9uKHRoaXM6IHZvaWQsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGZpbGUgc3lzdGVtIGxvY2sgb2YuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpc0NoaWxkT3JTZWxmfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0NoaWxkT3JTZWxmUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBjaGlsZCBvciBzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIHBhcmVudCBvciBzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50UGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpc0NoaWxkfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0NoaWxkUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBjaGlsZC5cbiAgICovXG4gIHJlYWRvbmx5IGNoaWxkUGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBwYXJlbnQuXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByb2Nlc3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NPcHRpb25zIGV4dGVuZHMgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBsdWdpbiBub3RpY2UgY29tcG9uZW50IHVzZWQgdG8gc2hvdyB0aGUgdGltZW91dCBub3RpY2UuIFdoZW4gYG51bGxgLCBubyB0aW1lb3V0IG5vdGljZSBpcyBzaG93blxuICAgKiByZWdhcmRsZXNzIG9mIHtAbGluayBQcm9jZXNzT3B0aW9ucy5zaG91bGRTaG93VGltZW91dE5vdGljZX07IHRoZSB0aW1lb3V0IGlzIG9ubHkgbG9nZ2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBudWxsIHwgUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBBbiByZXNvdXJjZS1sb2NrIGNvbXBvbmVudCB1c2VkIHRvIGxvY2sgdGhlIGZpbGUncyBlZGl0b3IgcmVhZC1vbmx5IGZvciB0aGUgZHVyYXRpb24gb2ZcbiAgICogcHJvY2Vzc2luZy4gVGhlIGxvY2sgaXMgcmVmZXJlbmNlLWNvdW50ZWQsIHNvIGl0IGNvbXBvc2VzIHdpdGggYW55IG91dGVyIG9wZXJhdGlvbi1sZXZlbCBsb2NrXG4gICAqIG9uIHRoZSBzYW1lIG5vdGUuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUxvY2tDb21wb25lbnQ6IG51bGwgfCBSZXNvdXJjZUxvY2tDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZmFpbCBpZiB0aGUgZmlsZSBpcyBtaXNzaW5nIG9yIGRlbGV0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRmFpbE9uTWlzc2luZ0ZpbGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgYSB0aW1lb3V0IG5vdGljZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTaG93VGltZW91dE5vdGljZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHByb2Nlc3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NQYXJhbXMgZXh0ZW5kcyBQcm9jZXNzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UsIHR5cGljYWxseSB1c2VkIGZvciBhY2Nlc3NpbmcgdGhlIHZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgdmFsdWUgcHJvdmlkZXIgdGhhdCByZXR1cm5zIHRoZSBuZXcgY29udGVudCBiYXNlZCBvbiB0aGUgb2xkIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gICAqIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIG9sZCBjb250ZW50IGFzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIHRoZSBuZXcgY29udGVudC5cbiAgICogSWYgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGl0IHNob3VsZCByZXR1cm4gYG51bGxgIGlmIHRoZSBwcm9jZXNzIHNob3VsZCBiZSByZXRyaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV3Q29udGVudFByb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPG51bGwgfCBzdHJpbmcsIENvbnRlbnRBcmd1bWVudHM+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGJlIHByb2Nlc3NlZC4gSXQgY2FuIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCBvciBhIGZpbGUgb2JqZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVuYW1lU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIG5ldyBwYXRoIHRvIHJlbmFtZSB0aGUgZmlsZSB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gcmVuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbmludGVyZmFjZSBJbnZva2VGaWxlQWN0aW9uU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGFjdGlvbiB0byBwZXJmb3JtIG9uIHRoZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhY3Rpb24gaXMgY29tcGxldGUuXG4gICAqL1xuICBmaWxlQWN0aW9uKHRoaXM6IHZvaWQsIGZpbGU6IFRGaWxlKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBlbXB0eSBmb2xkZXJzIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4ge0BsaW5rIEVtcHR5Rm9sZGVyQmVoYXZpb3J9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgY2xlYW5pbmcgdXAgZW1wdHkgZm9sZGVycy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY2xlYW51cCBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFudXBFbXB0eUZvbGRlcnMocGFyYW1zOiBDbGVhbnVwRW1wdHlGb2xkZXJzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZW1wdHlGb2xkZXJCZWhhdmlvcixcbiAgICBmb2xkZXJQYXRoc1xuICB9ID0gcGFyYW1zO1xuICBmb3IgKGNvbnN0IGZvbGRlclBhdGggb2YgZm9sZGVyUGF0aHMpIHtcbiAgICBzd2l0Y2ggKGVtcHR5Rm9sZGVyQmVoYXZpb3IpIHtcbiAgICAgIGNhc2UgRW1wdHlGb2xkZXJCZWhhdmlvci5EZWxldGU6IHtcbiAgICAgICAgYXdhaXQgZGVsZXRlRW1wdHlGb2xkZXIoYXBwLCBmb2xkZXJQYXRoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVtcHR5Rm9sZGVyQmVoYXZpb3IuRGVsZXRlV2l0aEVtcHR5UGFyZW50czoge1xuICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHAsIGZvbGRlclBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRW1wdHlGb2xkZXJCZWhhdmlvci5LZWVwOiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBhc3NlcnROZXZlcihlbXB0eUZvbGRlckJlaGF2aW9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb3BpZXMgYSBmaWxlIHNhZmVseSBpbiB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBjb3B5aW5nIHRoZSBmaWxlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbmV3IHBhdGggb2YgdGhlIGNvcGllZCBmaWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weVNhZmUocGFyYW1zOiBDb3B5U2FmZVBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3UGF0aCxcbiAgICBvbGRQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlOiBvbGRQYXRoT3JGaWxlIH0pO1xuXG4gIGlmIChmaWxlLnBhdGggPT09IG5ld1BhdGgpIHtcbiAgICByZXR1cm4gbmV3UGF0aDtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZvbGRlclBhdGggPSBwYXJlbnRGb2xkZXJQYXRoKG5ld1BhdGgpO1xuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgbmV3Rm9sZGVyUGF0aCk7XG5cbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jb3B5KGZpbGUsIG5ld0F2YWlsYWJsZVBhdGgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhuZXdBdmFpbGFibGVQYXRoKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZvbGRlciBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB7QGxpbmsgQ3JlYXRlRm9sZGVyU2FmZVJlc3VsdC5DcmVhdGVkfSBpZiB0aGUgZm9sZGVyIHdhc1xuICogY3JlYXRlZCwgb3Ige0BsaW5rIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQuTm90Q3JlYXRlZH0gaWYgaXQgYWxyZWFkeSBleGlzdGVkLlxuICogQHRocm93cyBJZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgY3JlYXRpbmcgdGhlIGZvbGRlciBhbmQgaXQgc3RpbGwgZG9lc24ndCBleGlzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUZvbGRlclNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8Q3JlYXRlRm9sZGVyU2FmZVJlc3VsdD4ge1xuICBpZiAoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKHBhdGgpKSB7XG4gICAgcmV0dXJuIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQuTm90Q3JlYXRlZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihwYXRoKTtcbiAgICByZXR1cm4gQ3JlYXRlRm9sZGVyU2FmZVJlc3VsdC5DcmVhdGVkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHZhdWx0IHdpdGggcGFyZW50IGZvbGRlcnMgaWYgbmVlZGVkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjYWxsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSBhbmQgYWxsIGl0cyBjcmVhdGVkIHBhcmVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZW1wb3JhcnlGaWxlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPCgpID0+IFByb21pc2U8dm9pZD4+IHtcbiAgbGV0IGZpbGUgPSBnZXRGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoIH0pO1xuICBpZiAoZmlsZSkge1xuICAgIHJldHVybiBub29wQXN5bmM7XG4gIH1cblxuICBjb25zdCBmb2xkZXJDbGVhbnVwID0gYXdhaXQgY3JlYXRlVGVtcG9yYXJ5Rm9sZGVyKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKHBhdGgsICcnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG4gICAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGF3YWl0IHRyYXNoU2FmZShhcHAsIGZpbGUpO1xuICAgIH1cbiAgICBhd2FpdCBmb2xkZXJDbGVhbnVwKCk7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBmb2xkZXIgaW4gdGhlIHZhdWx0IHdpdGggcGFyZW50IGZvbGRlcnMgaWYgbmVlZGVkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmb2xkZXIgYW5kIGFsbCBpdHMgY3JlYXRlZCBwYXJlbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcG9yYXJ5Rm9sZGVyKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPCgpID0+IFByb21pc2U8dm9pZD4+IHtcbiAgbGV0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgcGF0aE9yRm9sZGVyOiBwYXRoIH0pO1xuICBpZiAoZm9sZGVyKSB7XG4gICAgcmV0dXJuIG5vb3BBc3luYztcbiAgfVxuXG4gIGNvbnN0IGZvbGRlclBhdGggPSBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpO1xuICBhd2FpdCBjcmVhdGVUZW1wb3JhcnlGb2xkZXIoYXBwLCBmb2xkZXJQYXRoKTtcblxuICBjb25zdCBmb2xkZXJDbGVhbnVwID0gYXdhaXQgY3JlYXRlVGVtcG9yYXJ5Rm9sZGVyKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG5cbiAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZShhcHAsIHBhdGgpO1xuXG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgZm9sZGVyID0gZ2V0Rm9sZGVyKHsgYXBwLCBwYXRoT3JGb2xkZXI6IHBhdGggfSk7XG4gICAgaWYgKCFmb2xkZXIuZGVsZXRlZCkge1xuICAgICAgYXdhaXQgdHJhc2hTYWZlKGFwcCwgZm9sZGVyKTtcbiAgICB9XG4gICAgYXdhaXQgZm9sZGVyQ2xlYW51cCgpO1xuICB9O1xufVxuXG4vKipcbiAqIERlbGV0ZXMgYW4gZW1wdHkgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIGZvbGRlciB0byBkZWxldGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZvbGRlciBpcyBkZWxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlRW1wdHlGb2xkZXIoYXBwOiBBcHAsIHBhdGhPckZvbGRlcjogbnVsbCB8IFBhdGhPckZvbGRlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoeyBhcHAsIHBhdGhPckZvbGRlciB9KTtcbiAgaWYgKCFmb2xkZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFhd2FpdCBpc0VtcHR5Rm9sZGVyKGFwcCwgZm9sZGVyKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCB0cmFzaFNhZmUoYXBwLCBmb2xkZXIpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgZW1wdHkgZm9sZGVyIGhpZXJhcmNoeSBzdGFydGluZyBmcm9tIHRoZSBnaXZlbiBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgZm9sZGVyIHRvIHN0YXJ0IHJlbW92aW5nIGVtcHR5IGhpZXJhcmNoeSBmcm9tLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbXB0eSBoaWVyYXJjaHkgaXMgZGVsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUVtcHR5Rm9sZGVySGllcmFyY2h5KGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IG51bGwgfCBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgcGF0aE9yRm9sZGVyIH0pO1xuXG4gIHdoaWxlIChmb2xkZXIpIHtcbiAgICBpZiAoIWF3YWl0IGlzRW1wdHlGb2xkZXIoYXBwLCBmb2xkZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGZvbGRlci5wYXJlbnQ7XG4gICAgYXdhaXQgZGVsZXRlRW1wdHlGb2xkZXIoYXBwLCBmb2xkZXIpO1xuICAgIGZvbGRlciA9IHBhcmVudDtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgYSBzYWZlIHBhdGggZm9yIGEgZmlsZSBvciBmb2xkZXIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBnZXR0aW5nIGEgc2FmZSBwYXRoLlxuICogQHJldHVybnMgVGhlIHNhZmUgcGF0aCBmb3IgdGhlIGZpbGUgb3IgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmUocGFyYW1zOiBHZXRBYnN0cmFjdEZpbGVQYXRoU2FmZVBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgcGF0aCxcbiAgICB0eXBlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcblxuICBpZiAoYWJzdHJhY3RGaWxlICYmIGdldEZpbGVTeXN0ZW1UeXBlKGFic3RyYWN0RmlsZSkgPT09IHR5cGUpIHtcbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIHJldHVybiBnZXRBdmFpbGFibGVQYXRoKGFwcCwgcGF0aCk7XG59XG5cbi8qKlxuICogR2V0cyBhbiBhdmFpbGFibGUgcGF0aCBmb3IgYSBmaWxlIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBnZXQgYW4gYXZhaWxhYmxlIHBhdGggZm9yLlxuICogQHJldHVybnMgVGhlIGF2YWlsYWJsZSBwYXRoIGZvciB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF2YWlsYWJsZVBhdGgoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUocGF0aCk7XG4gIHJldHVybiBhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChqb2luKGRpcm5hbWUocGF0aCksIGJhc2VuYW1lKHBhdGgsIGV4dGVuc2lvbikpLCBleHRlbnNpb24uc2xpY2UoMSkpO1xufVxuXG4vKipcbiAqIEdldHMgYSBzYWZlIGZpbGUgcGF0aCBmb3IgYSBmaWxlIG9yIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBvciBmb2xkZXIgdG8gZ2V0IGEgc2FmZSBwYXRoIGZvci5cbiAqIEByZXR1cm5zIFRoZSBzYWZlIHBhdGggZm9yIHRoZSBmaWxlIG9yIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVQYXRoU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldEFic3RyYWN0RmlsZVBhdGhTYWZlKHsgYXBwLCBwYXRoLCB0eXBlOiBGaWxlU3lzdGVtVHlwZS5GaWxlIH0pO1xufVxuXG4vKipcbiAqIEdldHMgYSBzYWZlIGZvbGRlciBwYXRoIGZvciBhIGZpbGUgb3IgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlciB0byBnZXQgYSBzYWZlIHBhdGggZm9yLlxuICogQHJldHVybnMgVGhlIHNhZmUgcGF0aCBmb3IgdGhlIGZpbGUgb3IgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9sZGVyUGF0aFNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBYnN0cmFjdEZpbGVQYXRoU2FmZSh7IGFwcCwgcGF0aCwgdHlwZTogRmlsZVN5c3RlbVR5cGUuRm9sZGVyIH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBmcm9tIHRoZSBhcHAncyB2YXVsdCBhbmQgc29ydHMgdGhlbSBhbHBoYWJldGljYWxseSBieSB0aGVpciBmaWxlIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBzb3J0ZWQgYnkgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlc1NvcnRlZChhcHA6IEFwcCk6IFRGaWxlW10ge1xuICByZXR1cm4gYXBwLnZhdWx0LmdldE1hcmtkb3duRmlsZXMoKS5zb3J0KChhLCBiKSA9PiBhLnBhdGgubG9jYWxlQ29tcGFyZShiLnBhdGgpKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgYWxsIG5vdGUgZmlsZXMgZnJvbSB0aGUgYXBwJ3MgdmF1bHQgYW5kIHNvcnRzIHRoZW0gYWxwaGFiZXRpY2FsbHkgYnkgdGhlaXIgZmlsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWxsIG5vdGUgZmlsZXMgaW4gdGhlIHZhdWx0IHNvcnRlZCBieSBmaWxlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3RlRmlsZXNTb3J0ZWQoYXBwOiBBcHApOiBURmlsZVtdIHtcbiAgcmV0dXJuIGFwcC52YXVsdC5nZXRBbGxMb2FkZWRGaWxlcygpLmZpbHRlcigoZmlsZSkgPT4gaXNGaWxlKGZpbGUpICYmIGlzTm90ZShmaWxlKSkuc29ydCgoYSwgYikgPT4gYS5wYXRoLmxvY2FsZUNvbXBhcmUoYi5wYXRoKSkgYXMgVEZpbGVbXTtcbn1cblxuLyoqXG4gKiBHZXRzIG9yIGNyZWF0ZXMgYW4gYWJzdHJhY3QgZmlsZSBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBnZXR0aW5nIG9yIGNyZWF0aW5nIHRoZSBhYnN0cmFjdCBmaWxlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYWJzdHJhY3QgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZShwYXJhbXM6IEdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZVBhcmFtcyk6IFByb21pc2U8VEFic3RyYWN0RmlsZT4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIHR5cGVcbiAgfSA9IHBhcmFtcztcbiAgbGV0IHsgcGF0aCB9ID0gcGFyYW1zO1xuICBwYXRoID0gZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmUoeyBhcHAsIHBhdGgsIHR5cGUgfSk7XG4gIGNvbnN0IGFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgaWYgKGFic3RyYWN0RmlsZSkge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEZpbGVTeXN0ZW1UeXBlLkZpbGU6IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKHBhdGgsICcnKTtcbiAgICB9XG4gICAgY2FzZSBGaWxlU3lzdGVtVHlwZS5Gb2xkZXI6IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHAudmF1bHQuY3JlYXRlRm9sZGVyKHBhdGgpO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBhc3NlcnROZXZlcih0eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIG9yIGNyZWF0ZXMgYSBmaWxlIHNhZmVseSBpbiB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBnZXQgb3IgY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRmlsZVNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8VEZpbGU+IHtcbiAgcmV0dXJuIGFzRmlsZShhd2FpdCBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmUoeyBhcHAsIHBhdGgsIHR5cGU6IEZpbGVTeXN0ZW1UeXBlLkZpbGUgfSkpO1xufVxuXG4vKipcbiAqIEdldHMgb3IgY3JlYXRlcyBhIGZvbGRlciBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIElmIHRoZSBmb2xkZXIgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgZm9sZGVyIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZvbGRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxURm9sZGVyPiB7XG4gIHJldHVybiBhc0ZvbGRlcihhd2FpdCBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmUoeyBhcHAsIHBhdGgsIHR5cGU6IEZpbGVTeXN0ZW1UeXBlLkZvbGRlciB9KSk7XG59XG5cbi8qKlxuICogR2V0cyBhIHNhZmUgcmVuYW1lIHBhdGggZm9yIGEgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGdldHRpbmcgYSBzYWZlIHJlbmFtZSBwYXRoLlxuICogQHJldHVybnMgVGhlIHNhZmUgcmVuYW1lIHBhdGggZm9yIHRoZSBhYnN0cmFjdCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FmZVJlbmFtZVBhdGgocGFyYW1zOiBHZXRTYWZlUmVuYW1lUGF0aFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYXBwLCBvbGRQYXRoT3JBYnN0cmFjdEZpbGUgfSA9IHBhcmFtcztcbiAgbGV0IHsgbmV3UGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBvbGRQYXRoID0gZ2V0UGF0aChhcHAsIG9sZFBhdGhPckFic3RyYWN0RmlsZSk7XG5cbiAgaWYgKGdldERhdGFBZGFwdGVyRXgoYXBwKS5pbnNlbnNpdGl2ZSkge1xuICAgIGxldCBmb2xkZXJQYXRoID0gZGlybmFtZShuZXdQYXRoKTtcbiAgICBsZXQgbm9uRXhpc3RpbmdQYXRoID0gYmFzZW5hbWUobmV3UGF0aCk7XG4gICAgbGV0IGZvbGRlcjogbnVsbCB8IFRGb2xkZXI7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gVGhlcmUgaXMgbm8gZWxlZ2FudCB3YXkgdG8gcGVyZm9ybSBpbmZpbml0ZSBsb29wcy5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBpc0Nhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwgcGF0aE9yRm9sZGVyOiBmb2xkZXJQYXRoIH0pO1xuICAgICAgaWYgKGZvbGRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG5vbkV4aXN0aW5nUGF0aCA9IGpvaW4oYmFzZW5hbWUoZm9sZGVyUGF0aCksIG5vbkV4aXN0aW5nUGF0aCk7XG4gICAgICBmb2xkZXJQYXRoID0gZGlybmFtZShmb2xkZXJQYXRoKTtcbiAgICB9XG4gICAgbmV3UGF0aCA9IGpvaW4oZm9sZGVyLmdldFBhcmVudFByZWZpeCgpLCBub25FeGlzdGluZ1BhdGgpO1xuICB9XG5cbiAgaWYgKG9sZFBhdGgudG9Mb3dlckNhc2UoKSA9PT0gbmV3UGF0aC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIG5ld1BhdGg7XG4gIH1cblxuICByZXR1cm4gZ2V0QXZhaWxhYmxlUGF0aChhcHAsIG5ld1BhdGgpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBmaWxlIHN5c3RlbSBsb2NrLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgaW52b2tpbmcgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGZpbGUgc3lzdGVtIGxvY2suXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGludm9rZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnZva2VXaXRoRmlsZVN5c3RlbUxvY2socGFyYW1zOiBJbnZva2VXaXRoRmlsZVN5c3RlbUxvY2tQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgICRmdW5jdGlvbixcbiAgICBhcHAsXG4gICAgcGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgYXdhaXQgYXBwLnZhdWx0LnByb2Nlc3MoZmlsZSwgKGNvbnRlbnQpID0+IHtcbiAgICAkZnVuY3Rpb24oY29udGVudCk7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9mIGFub3RoZXIgcGF0aCBvciBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgY2hpbGQgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb2YgdGhlIHBhcmVudCBwYXRoIG9yIGZpbGUuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjaGlsZCBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvZiB0aGUgcGFyZW50IHBhdGggb3IgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hpbGQocGFyYW1zOiBJc0NoaWxkUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgY2hpbGRQYXRoT3JGaWxlLFxuICAgIHBhcmVudFBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgY2hpbGRQYXRoID0gZ2V0UGF0aChhcHAsIGNoaWxkUGF0aE9yRmlsZSk7XG4gIGNvbnN0IHBhcmVudFBhdGggPSBnZXRQYXRoKGFwcCwgcGFyZW50UGF0aE9yRmlsZSk7XG5cbiAgaWYgKGNoaWxkUGF0aCA9PT0gcGFyZW50UGF0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwYXJlbnRQYXRoID09PSAnLycpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZFBhdGguc3RhcnRzV2l0aChgJHtwYXJlbnRQYXRofS9gKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvciBzZWxmIG9mIGFub3RoZXIgcGF0aCBvciBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgY2hpbGQgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb3Igc2VsZiBvZiB0aGUgcGFyZW50IHBhdGggb3IgZmlsZS5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNoaWxkIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9yIHNlbGYgb2YgdGhlIHBhcmVudCBwYXRoIG9yIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NoaWxkT3JTZWxmKHBhcmFtczogSXNDaGlsZE9yU2VsZlBhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGNoaWxkUGF0aE9yRmlsZSxcbiAgICBwYXJlbnRQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNoaWxkUGF0aCA9IGdldFBhdGgoYXBwLCBjaGlsZFBhdGhPckZpbGUpO1xuICBjb25zdCBwYXJlbnRQYXRoID0gZ2V0UGF0aChhcHAsIHBhcmVudFBhdGhPckZpbGUpO1xuICByZXR1cm4gY2hpbGRQYXRoID09PSBwYXJlbnRQYXRoIHx8IGlzQ2hpbGQoeyBhcHAsIGNoaWxkUGF0aE9yRmlsZSwgcGFyZW50UGF0aE9yRmlsZSB9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmb2xkZXIgaXMgZW1wdHkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgcGF0aCBvciBmb2xkZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZvbGRlciBpcyBlbXB0eS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzRW1wdHlGb2xkZXIoYXBwOiBBcHAsIHBhdGhPckZvbGRlcjogUGF0aE9yRm9sZGVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGxpc3RlZEZpbGVzID0gYXdhaXQgbGlzdFNhZmUoYXBwLCBnZXRQYXRoKGFwcCwgcGF0aE9yRm9sZGVyKSk7XG4gIHJldHVybiBsaXN0ZWRGaWxlcy5maWxlcy5sZW5ndGggPT09IDAgJiYgbGlzdGVkRmlsZXMuZm9sZGVycy5sZW5ndGggPT09IDA7XG59XG5cbi8qKlxuICogU2FmZWx5IGxpc3RzIHRoZSBmaWxlcyBhbmQgZm9sZGVycyBhdCB0aGUgc3BlY2lmaWVkIHBhdGggaW4gdGhlIHZhdWx0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIHBhdGggb3IgZm9sZGVyIHRvIGxpc3QuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIExpc3RlZEZpbGVzfSBvYmplY3QgY29udGFpbmluZyB0aGUgbGlzdGVkIGZpbGVzIGFuZCBmb2xkZXJzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNhZmUoYXBwOiBBcHAsIHBhdGhPckZvbGRlcjogUGF0aE9yRm9sZGVyKTogUHJvbWlzZTxMaXN0ZWRGaWxlcz4ge1xuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZvbGRlcik7XG4gIGNvbnN0IEVNUFRZID0geyBmaWxlczogW10sIGZvbGRlcnM6IFtdIH07XG5cbiAgY29uc3QgcGF0aFN0YXRzID0gYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuc3RhdChwYXRoKTtcbiAgaWYgKHBhdGhTdGF0cz8udHlwZSAhPT0gJ2ZvbGRlcicpIHtcbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5saXN0KHBhdGgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChhd2FpdCBhcHAudmF1bHQuZXhpc3RzKHBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgZmlsZSB3aXRoIHJldHJ5IGxvZ2ljLCB1cGRhdGluZyBpdHMgY29udGVudCBiYXNlZCBvbiBhIHByb3ZpZGVkIHZhbHVlIG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcHJvY2Vzc2luZyB0aGUgZmlsZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHByb2Nlc3MgaXMgY29tcGxldGUuXG4gKlxuICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBwcm9jZXNzIGZhaWxzIGFmdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldHJpZXMgb3IgdGltZW91dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3MocGFyYW1zOiBQcm9jZXNzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3Q29udGVudFByb3ZpZGVyLFxuICAgIHBhdGhPckZpbGUsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LFxuICAgIHJlc291cmNlTG9ja0NvbXBvbmVudFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgc2hvdWxkRmFpbE9uTWlzc2luZ0ZpbGU6IHRydWUsXG4gICAgc2hvdWxkU2hvd1RpbWVvdXROb3RpY2U6IHRydWUsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRGVmYXVsdCB2YWx1ZS5cbiAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IDUwMFxuICB9O1xuICBjb25zdCBmdWxsT3B0aW9ucyA9IHsgLi4uREVGQVVMVF9SRVRSWV9PUFRJT05TLCAuLi5wYXJhbXMgfTtcbiAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBmdWxsT3B0aW9ucy5hYm9ydFNpZ25hbCA9IGFib3J0U2lnbmFsQW55KGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsLCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgY29uc3QgcGF0aCA9IGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKTtcblxuICAvLyBSZWZlcmVuY2UtY291bnRlZCBsb2NrOyBjb21wb3NlcyB3aXRoIGFueSBvdXRlciBsb2NrLiBSZWxlYXNlZCBhdCBmdW5jdGlvbiBzY29wZSBleGl0LlxuICB1c2luZyBfbG9jayA9IHJlc291cmNlTG9ja0NvbXBvbmVudD8ubG9ja0ZvclBhdGgoeyBvcGVyYXRpb25OYW1lOiAnUHJvY2VzcyBub3RlJywgcGF0aE9yRmlsZSB9KTtcblxuICBhd2FpdCByZXRyeVdpdGhUaW1lb3V0Tm90aWNlKHtcbiAgICBhc3luYyBvcGVyYXRpb25GdW5jdGlvbihhYm9ydFNpZ25hbCkge1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgY29uc3Qgb2xkQ29udGVudCA9IGF3YWl0IHJlYWRTYWZlKGFwcCwgcGF0aE9yRmlsZSk7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBpZiAob2xkQ29udGVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc2hvdWxkVHJlYXRNaXNzaW5nRmlsZUFzU3VjY2VzcygpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdDb250ZW50ID0gYXdhaXQgcmVzb2x2ZVZhbHVlKG5ld0NvbnRlbnRQcm92aWRlciwgeyBhYm9ydFNpZ25hbCwgY29udGVudDogb2xkQ29udGVudCB9KTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGlmIChuZXdDb250ZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzU3VjY2VzcyA9IHRydWU7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnZva2VGaWxlQWN0aW9uU2FmZSh7XG4gICAgICAgIGFwcCxcbiAgICAgICAgYXN5bmMgZmlsZUFjdGlvbihmaWxlKSB7XG4gICAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgICBhd2FpdCBhcHAudmF1bHQucHJvY2VzcyhmaWxlLCAoY29udGVudCkgPT4ge1xuICAgICAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgICAgIGlmIChjb250ZW50ICE9PSBvbGRDb250ZW50KSB7XG4gICAgICAgICAgICAgIGdldExpYkRlYnVnZ2VyKCdWYXVsdDpwcm9jZXNzJykoJ0NvbnRlbnQgaGFzIGNoYW5nZWQgc2luY2UgaXQgd2FzIHJlYWQuIFJldHJ5aW5nLi4uJywge1xuICAgICAgICAgICAgICAgIGFjdHVhbENvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBvbGRDb250ZW50LFxuICAgICAgICAgICAgICAgIHBhdGg6IGZpbGUucGF0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3Q29udGVudDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHBhdGhPckZpbGVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSBJbnZva2VGaWxlQWN0aW9uU2FmZVJlc3VsdC5Ob3RJbnZva2VkKSB7XG4gICAgICAgIHJldHVybiBzaG91bGRUcmVhdE1pc3NpbmdGaWxlQXNTdWNjZXNzKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpc1N1Y2Nlc3M7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyAtLSBDbG9zZXMgb3ZlciBgZnVsbE9wdGlvbnNgIGFuZCBgcGF0aGAgZnJvbSB0aGUgZW5jbG9zaW5nIHNjb3BlLCBzbyBpdCBjYW5ub3QgYmUgaG9pc3RlZC5cbiAgICAgIGZ1bmN0aW9uIHNob3VsZFRyZWF0TWlzc2luZ0ZpbGVBc1N1Y2Nlc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChmdWxsT3B0aW9ucy5zaG91bGRGYWlsT25NaXNzaW5nRmlsZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAnJHtwYXRofScgbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBvcGVyYXRpb25OYW1lOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMudmF1bHQucHJvY2Vzc0ZpbGUsIHsgZmlsZVBhdGg6IHBhdGggfSksXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LFxuICAgIHJldHJ5T3B0aW9uczogZnVsbE9wdGlvbnMsXG4gICAgc2hvdWxkU2hvd1RpbWVvdXROb3RpY2U6IGZ1bGxPcHRpb25zLnNob3VsZFNob3dUaW1lb3V0Tm90aWNlXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjb250ZW50IG9mIGEgZmlsZSBzYWZlbHkgZnJvbSB0aGUgdmF1bHQuXG4gKlxuICogSXQgY292ZXJzIHRoZSBjYXNlIHdoZW4gdGhlIGZpbGUgd2FzIHJlbW92ZWQgZHVyaW5nIHRoZSByZWFkaW5nLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gcmVhZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgb3IgYG51bGxgIGlmIHRoZSBmaWxlIGlzIG1pc3Npbmcgb3IgZGVsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTYWZlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGxldCBjb250ZW50OiBudWxsIHwgc3RyaW5nID0gbnVsbDtcbiAgYXdhaXQgaW52b2tlRmlsZUFjdGlvblNhZmUoe1xuICAgIGFwcCxcbiAgICBhc3luYyBmaWxlQWN0aW9uKGZpbGUpIHtcbiAgICAgIGF3YWl0IHNhdmVOb3RlKGFwcCwgZmlsZSk7XG4gICAgICBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XG4gICAgfSxcbiAgICBwYXRoT3JGaWxlXG4gIH0pO1xuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBSZW5hbWVzIGEgZmlsZSBzYWZlbHkgaW4gdGhlIHZhdWx0LlxuICogSWYgdGhlIG5ldyBwYXRoIGFscmVhZHkgZXhpc3RzLCB0aGUgZmlsZSB3aWxsIGJlIHJlbmFtZWQgdG8gYW4gYXZhaWxhYmxlIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5hbWluZyB0aGUgZmlsZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyBwYXRoIG9mIHRoZSBmaWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuYW1lU2FmZShwYXJhbXM6IFJlbmFtZVNhZmVQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5ld1BhdGgsXG4gICAgb2xkUGF0aE9yQWJzdHJhY3RGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IG9sZEFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZTogb2xkUGF0aE9yQWJzdHJhY3RGaWxlIH0pO1xuXG4gIGNvbnN0IG5ld0F2YWlsYWJsZVBhdGggPSBnZXRTYWZlUmVuYW1lUGF0aCh7IGFwcCwgbmV3UGF0aCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlIH0pO1xuXG4gIGlmIChvbGRBYnN0cmFjdEZpbGUucGF0aC50b0xvd2VyQ2FzZSgpID09PSBuZXdBdmFpbGFibGVQYXRoLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBpZiAob2xkQWJzdHJhY3RGaWxlLnBhdGggIT09IG5ld1BhdGgpIHtcbiAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci5yZW5hbWVGaWxlKG9sZEFic3RyYWN0RmlsZSwgbmV3QXZhaWxhYmxlUGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdBdmFpbGFibGVQYXRoO1xuICB9XG5cbiAgY29uc3QgbmV3Rm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgobmV3QXZhaWxhYmxlUGF0aCk7XG4gIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBuZXdGb2xkZXJQYXRoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci5yZW5hbWVGaWxlKG9sZEFic3RyYWN0RmlsZSwgbmV3QXZhaWxhYmxlUGF0aCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKG5ld0F2YWlsYWJsZVBhdGgpIHx8IGF3YWl0IGFwcC52YXVsdC5leGlzdHMob2xkQWJzdHJhY3RGaWxlLnBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QXZhaWxhYmxlUGF0aDtcbn1cblxuLyoqXG4gKiBTYXZlcyB0aGUgc3BlY2lmaWVkIG5vdGUgaW4gdGhlIE9ic2lkaWFuIGFwcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIG5vdGUgdG8gYmUgc2F2ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5vdGUgaXMgc2F2ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlTm90ZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWlzTWFya2Rvd25GaWxlKHBhdGhPckZpbGUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGF0aCA9IGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKTtcblxuICBmb3IgKGNvbnN0IGxlYWYgb2YgYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUoVmlld1R5cGUuTWFya2Rvd24pKSB7XG4gICAgaWYgKGxlYWYudmlldyBpbnN0YW5jZW9mIE1hcmtkb3duVmlldyAmJiBsZWFmLnZpZXcuZmlsZT8ucGF0aCA9PT0gcGF0aCAmJiBsZWFmLnZpZXcuZGlydHkpIHtcbiAgICAgIGF3YWl0IGxlYWYudmlldy5zYXZlKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVHJhc2hlcyBhbiBhYnN0cmFjdCBmaWxlIHNhZmVseSBmcm9tIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIHRyYXNoLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGlzIHRyYXNoZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFzaFNhZmUoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlIH0pO1xuICBpZiAoIWZpbGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci50cmFzaEZpbGUoZmlsZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGF3YWl0IGFwcC52YXVsdC5leGlzdHMoZmlsZS5wYXRoKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgZ2V0TGliRGVidWdnZXIoJ1ZhdWx0OnRyYXNoU2FmZScpKGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cmFzaGluZyAke2ZpbGUucGF0aH0sIGJ1dCB0aGUgZmlsZSBubyBsb25nZXIgZXhpc3RzLmAsIHsgZXJyb3IsIHBhdGg6IGZpbGUucGF0aCB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbnZva2VGaWxlQWN0aW9uU2FmZShwYXJhbXM6IEludm9rZUZpbGVBY3Rpb25TYWZlUGFyYW1zKTogUHJvbWlzZTxJbnZva2VGaWxlQWN0aW9uU2FmZVJlc3VsdD4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGZpbGVBY3Rpb24sXG4gICAgcGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuICBsZXQgZmlsZSA9IGdldEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG4gIGlmICghZmlsZSB8fCBmaWxlLmRlbGV0ZWQpIHtcbiAgICByZXR1cm4gSW52b2tlRmlsZUFjdGlvblNhZmVSZXN1bHQuTm90SW52b2tlZDtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGZpbGVBY3Rpb24oZmlsZSk7XG4gICAgcmV0dXJuIEludm9rZUZpbGVBY3Rpb25TYWZlUmVzdWx0Lkludm9rZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZmlsZSA9IGdldEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG4gICAgaWYgKCFmaWxlIHx8IGZpbGUuZGVsZXRlZCkge1xuICAgICAgcmV0dXJuIEludm9rZUZpbGVBY3Rpb25TYWZlUmVzdWx0Lk5vdEludm9rZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFZUCxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGlCQUFpQjtBQUMxQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyw4QkFBOEI7QUFDdkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFNBQVM7QUFLWCxJQUFLLHlCQUFMLGtCQUFLQSw0QkFB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
577
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgT2JzaWRpYW4gVmF1bHQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIExpc3RlZEZpbGVzXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgZ2V0RGF0YUFkYXB0ZXJFeCxcbiAgcGFyZW50Rm9sZGVyUGF0aCxcbiAgVmlld1R5cGVcbn0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgTWFya2Rvd25WaWV3LFxuICBUQWJzdHJhY3RGaWxlLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vYXN5bmMudHMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUge1xuICBQYXRoT3JBYnN0cmFjdEZpbGUsXG4gIFBhdGhPckZpbGUsXG4gIFBhdGhPckZvbGRlclxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VMb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuaW1wb3J0IHsgYWJvcnRTaWduYWxBbnkgfSBmcm9tICcuLi9hYm9ydC1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgbm9vcEFzeW5jIH0gZnJvbSAnLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL3ZhbHVlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB7IHJldHJ5V2l0aFRpbWVvdXROb3RpY2UgfSBmcm9tICcuL2FzeW5jLXdpdGgtbm90aWNlLnRzJztcbmltcG9ydCB7XG4gIGFzRmlsZSxcbiAgYXNGb2xkZXIsXG4gIEZpbGVTeXN0ZW1UeXBlLFxuICBnZXRBYnN0cmFjdEZpbGUsXG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZVN5c3RlbVR5cGUsXG4gIGdldEZvbGRlcixcbiAgZ2V0Rm9sZGVyT3JOdWxsLFxuICBnZXRQYXRoLFxuICBpc0ZpbGUsXG4gIGlzTWFya2Rvd25GaWxlLFxuICBpc05vdGVcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi9pMThuL2kxOG4udHMnO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2Yge0BsaW5rIGNyZWF0ZUZvbGRlclNhZmV9LlxuICovXG5leHBvcnQgZW51bSBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBDcmVhdGVkID0gJ2NyZWF0ZWQnLFxuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdhcyBub3QgY3JlYXRlZCBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzLlxuICAgKi9cbiAgTm90Q3JlYXRlZCA9ICdub3QtY3JlYXRlZCdcbn1cblxuLyoqXG4gKiBBIGJlaGF2aW9yIGZvciBoYW5kbGluZyBlbXB0eSBmb2xkZXJzIGR1cmluZyBjbGVhbnVwLlxuICovXG5leHBvcnQgZW51bSBFbXB0eUZvbGRlckJlaGF2aW9yIHtcbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZW1wdHkgZm9sZGVyLlxuICAgKi9cbiAgRGVsZXRlID0gJ0RlbGV0ZScsXG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZW1wdHkgZm9sZGVyIGFuZCBhbGwgaXRzIGVtcHR5IHBhcmVudHMuXG4gICAqL1xuICBEZWxldGVXaXRoRW1wdHlQYXJlbnRzID0gJ0RlbGV0ZVdpdGhFbXB0eVBhcmVudHMnLFxuXG4gIC8qKlxuICAgKiBLZWVwIHRoZSBlbXB0eSBmb2xkZXIuXG4gICAqL1xuICBLZWVwID0gJ0tlZXAnXG59XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB7QGxpbmsgaW52b2tlRmlsZUFjdGlvblNhZmV9LlxuICovXG5leHBvcnQgZW51bSBJbnZva2VGaWxlQWN0aW9uU2FmZVJlc3VsdCB7XG4gIEludm9rZWQgPSAnaW52b2tlZCcsXG4gIE5vdEludm9rZWQgPSAnbm90LWludm9rZWQnXG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNsZWFudXBFbXB0eUZvbGRlcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsZWFudXBFbXB0eUZvbGRlcnNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBiZWhhdmlvciBkZXRlcm1pbmluZyBob3cgZW1wdHkgZm9sZGVycyBhcmUgY2xlYW5lZCB1cC5cbiAgICovXG4gIHJlYWRvbmx5IGVtcHR5Rm9sZGVyQmVoYXZpb3I6IEVtcHR5Rm9sZGVyQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRocyBvZiB0aGUgZm9sZGVycyB0byBjbGVhbiB1cCB3aGVuIGVtcHR5LlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyUGF0aHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3Ige0BsaW5rIHByb2Nlc3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRBcmd1bWVudHMge1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29weVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcHlTYWZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHBhdGggdG8gY29weSB0aGUgZmlsZSB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBwYXRoIG9yIGZpbGUgdG8gY29weS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEFic3RyYWN0RmlsZVBhdGhTYWZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBYnN0cmFjdEZpbGVQYXRoU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIGZpbGUgb3IgZm9sZGVyIHRvIGdldCBhIHNhZmUgcGF0aCBmb3IuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBGaWxlU3lzdGVtVHlwZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0T3JDcmVhdGVBYnN0cmFjdEZpbGVTYWZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9mIHRoZSBhYnN0cmFjdCBmaWxlIHRvIGdldCBvciBjcmVhdGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBhYnN0cmFjdCBmaWxlIHRvIGdldCBvciBjcmVhdGUuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBGaWxlU3lzdGVtVHlwZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0U2FmZVJlbmFtZVBhdGh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldFNhZmVSZW5hbWVQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHBhdGggdG8gcmVuYW1lIHRoZSBhYnN0cmFjdCBmaWxlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV3UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZW5hbWUuXG4gICAqL1xuICByZWFkb25seSBvbGRQYXRoT3JBYnN0cmFjdEZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaW52b2tlV2l0aEZpbGVTeXN0ZW1Mb2NrfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnZva2VXaXRoRmlsZVN5c3RlbUxvY2tQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gICAqL1xuICAkZnVuY3Rpb24odGhpczogdm9pZCwgY29udGVudDogc3RyaW5nKTogdm9pZDtcblxuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZmlsZSBzeXN0ZW0gbG9jayBvZi5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGlzQ2hpbGRPclNlbGZ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzQ2hpbGRPclNlbGZQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIGNoaWxkIG9yIHNlbGYuXG4gICAqL1xuICByZWFkb25seSBjaGlsZFBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byBjaGVjayB3aGV0aGVyIGl0IGlzIGEgcGFyZW50IG9yIHNlbGYuXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGlzQ2hpbGR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzQ2hpbGRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIGNoaWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIHBhcmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudFBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcHJvY2Vzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc09wdGlvbnMgZXh0ZW5kcyBSZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogUGx1Z2luIG5vdGljZSBjb21wb25lbnQgdXNlZCB0byBzaG93IHRoZSB0aW1lb3V0IG5vdGljZS4gV2hlbiBgbnVsbGAsIG5vIHRpbWVvdXQgbm90aWNlIGlzIHNob3duXG4gICAqIHJlZ2FyZGxlc3Mgb2Yge0BsaW5rIFByb2Nlc3NPcHRpb25zLnNob3VsZFNob3dUaW1lb3V0Tm90aWNlfTsgdGhlIHRpbWVvdXQgaXMgb25seSBsb2dnZWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwgfCBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIEFuIHJlc291cmNlLWxvY2sgY29tcG9uZW50IHVzZWQgdG8gbG9jayB0aGUgZmlsZSdzIGVkaXRvciByZWFkLW9ubHkgZm9yIHRoZSBkdXJhdGlvbiBvZlxuICAgKiBwcm9jZXNzaW5nLiBUaGUgbG9jayBpcyByZWZlcmVuY2UtY291bnRlZCwgc28gaXQgY29tcG9zZXMgd2l0aCBhbnkgb3V0ZXIgb3BlcmF0aW9uLWxldmVsIGxvY2tcbiAgICogb24gdGhlIHNhbWUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbCB8IFJlc291cmNlTG9ja0NvbXBvbmVudDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmYWlsIGlmIHRoZSBmaWxlIGlzIG1pc3Npbmcgb3IgZGVsZXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGYWlsT25NaXNzaW5nRmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcHJvY2Vzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1BhcmFtcyBleHRlbmRzIFByb2Nlc3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSwgdHlwaWNhbGx5IHVzZWQgZm9yIGFjY2Vzc2luZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSB2YWx1ZSBwcm92aWRlciB0aGF0IHJldHVybnMgdGhlIG5ldyBjb250ZW50IGJhc2VkIG9uIHRoZSBvbGQgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICogSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb2xkIGNvbnRlbnQgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgdGhlIG5ldyBjb250ZW50LlxuICAgKiBJZiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIHJldHVybiBgbnVsbGAgaWYgdGhlIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHJpZWQuXG4gICAqL1xuICByZWFkb25seSBuZXdDb250ZW50UHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8bnVsbCB8IHN0cmluZywgQ29udGVudEFyZ3VtZW50cz47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gYmUgcHJvY2Vzc2VkLiBJdCBjYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwYXRoIG9yIGEgZmlsZSBvYmplY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZW5hbWVTYWZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5hbWVTYWZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHBhdGggdG8gcmVuYW1lIHRoZSBmaWxlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV3UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZW5hbWUuXG4gICAqL1xuICByZWFkb25seSBvbGRQYXRoT3JBYnN0cmFjdEZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuaW50ZXJmYWNlIEludm9rZUZpbGVBY3Rpb25TYWZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHBlcmZvcm0gb24gdGhlIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gcGVyZm9ybSB0aGUgYWN0aW9uIG9uLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFjdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIGZpbGVBY3Rpb24odGhpczogdm9pZCwgZmlsZTogVEZpbGUpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGVtcHR5IGZvbGRlcnMgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiB7QGxpbmsgRW1wdHlGb2xkZXJCZWhhdmlvcn0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBjbGVhbmluZyB1cCBlbXB0eSBmb2xkZXJzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjbGVhbnVwIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYW51cEVtcHR5Rm9sZGVycyhwYXJhbXM6IENsZWFudXBFbXB0eUZvbGRlcnNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBlbXB0eUZvbGRlckJlaGF2aW9yLFxuICAgIGZvbGRlclBhdGhzXG4gIH0gPSBwYXJhbXM7XG4gIGZvciAoY29uc3QgZm9sZGVyUGF0aCBvZiBmb2xkZXJQYXRocykge1xuICAgIHN3aXRjaCAoZW1wdHlGb2xkZXJCZWhhdmlvcikge1xuICAgICAgY2FzZSBFbXB0eUZvbGRlckJlaGF2aW9yLkRlbGV0ZToge1xuICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlcihhcHAsIGZvbGRlclBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRW1wdHlGb2xkZXJCZWhhdmlvci5EZWxldGVXaXRoRW1wdHlQYXJlbnRzOiB7XG4gICAgICAgIGF3YWl0IGRlbGV0ZUVtcHR5Rm9sZGVySGllcmFyY2h5KGFwcCwgZm9sZGVyUGF0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFbXB0eUZvbGRlckJlaGF2aW9yLktlZXA6IHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGFzc2VydE5ldmVyKGVtcHR5Rm9sZGVyQmVoYXZpb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvcGllcyBhIGZpbGUgc2FmZWx5IGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGNvcHlpbmcgdGhlIGZpbGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXcgcGF0aCBvZiB0aGUgY29waWVkIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5U2FmZShwYXJhbXM6IENvcHlTYWZlUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBuZXdQYXRoLFxuICAgIG9sZFBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGU6IG9sZFBhdGhPckZpbGUgfSk7XG5cbiAgaWYgKGZpbGUucGF0aCA9PT0gbmV3UGF0aCkge1xuICAgIHJldHVybiBuZXdQYXRoO1xuICB9XG5cbiAgY29uc3QgbmV3Rm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgobmV3UGF0aCk7XG4gIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBuZXdGb2xkZXJQYXRoKTtcblxuICBjb25zdCBuZXdBdmFpbGFibGVQYXRoID0gZ2V0QXZhaWxhYmxlUGF0aChhcHAsIG5ld1BhdGgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNvcHkoZmlsZSwgbmV3QXZhaWxhYmxlUGF0aCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKG5ld0F2YWlsYWJsZVBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QXZhaWxhYmxlUGF0aDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZm9sZGVyIHNhZmVseSBpbiB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHtAbGluayBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWR9IGlmIHRoZSBmb2xkZXIgd2FzXG4gKiBjcmVhdGVkLCBvciB7QGxpbmsgQ3JlYXRlRm9sZGVyU2FmZVJlc3VsdC5Ob3RDcmVhdGVkfSBpZiBpdCBhbHJlYWR5IGV4aXN0ZWQuXG4gKiBAdGhyb3dzIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjcmVhdGluZyB0aGUgZm9sZGVyIGFuZCBpdCBzdGlsbCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVGb2xkZXJTYWZlUmVzdWx0PiB7XG4gIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICByZXR1cm4gQ3JlYXRlRm9sZGVyU2FmZVJlc3VsdC5Ob3RDcmVhdGVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAudmF1bHQuY3JlYXRlRm9sZGVyKHBhdGgpO1xuICAgIHJldHVybiBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKHBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQuQ3JlYXRlZDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgdmF1bHQgd2l0aCBwYXJlbnQgZm9sZGVycyBpZiBuZWVkZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlIGFuZCBhbGwgaXRzIGNyZWF0ZWQgcGFyZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBvcmFyeUZpbGUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZmlsZSA9IGdldEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG4gIGlmIChmaWxlKSB7XG4gICAgcmV0dXJuIG5vb3BBc3luYztcbiAgfVxuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wb3JhcnlGb2xkZXIoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jcmVhdGUocGF0aCwgJycpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoIWZpbGUuZGVsZXRlZCkge1xuICAgICAgYXdhaXQgdHJhc2hTYWZlKGFwcCwgZmlsZSk7XG4gICAgfVxuICAgIGF3YWl0IGZvbGRlckNsZWFudXAoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZvbGRlciBpbiB0aGUgdmF1bHQgd2l0aCBwYXJlbnQgZm9sZGVycyBpZiBuZWVkZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZvbGRlciBhbmQgYWxsIGl0cyBjcmVhdGVkIHBhcmVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZW1wb3JhcnlGb2xkZXIoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBwYXRoT3JGb2xkZXI6IHBhdGggfSk7XG4gIGlmIChmb2xkZXIpIHtcbiAgICByZXR1cm4gbm9vcEFzeW5jO1xuICB9XG5cbiAgY29uc3QgZm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgocGF0aCk7XG4gIGF3YWl0IGNyZWF0ZVRlbXBvcmFyeUZvbGRlcihhcHAsIGZvbGRlclBhdGgpO1xuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wb3JhcnlGb2xkZXIoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcblxuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgcGF0aCk7XG5cbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBmb2xkZXIgPSBnZXRGb2xkZXIoeyBhcHAsIHBhdGhPckZvbGRlcjogcGF0aCB9KTtcbiAgICBpZiAoIWZvbGRlci5kZWxldGVkKSB7XG4gICAgICBhd2FpdCB0cmFzaFNhZmUoYXBwLCBmb2xkZXIpO1xuICAgIH1cbiAgICBhd2FpdCBmb2xkZXJDbGVhbnVwKCk7XG4gIH07XG59XG5cbi8qKlxuICogRGVsZXRlcyBhbiBlbXB0eSBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgZm9sZGVyIHRvIGRlbGV0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZm9sZGVyIGlzIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVFbXB0eUZvbGRlcihhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBudWxsIHwgUGF0aE9yRm9sZGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgcGF0aE9yRm9sZGVyIH0pO1xuICBpZiAoIWZvbGRlcikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWF3YWl0IGlzRW1wdHlGb2xkZXIoYXBwLCBmb2xkZXIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IHRyYXNoU2FmZShhcHAsIGZvbGRlcik7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBlbXB0eSBmb2xkZXIgaGllcmFyY2h5IHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBmb2xkZXIgdG8gc3RhcnQgcmVtb3ZpbmcgZW1wdHkgaGllcmFyY2h5IGZyb20uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVtcHR5IGhpZXJhcmNoeSBpcyBkZWxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHkoYXBwOiBBcHAsIHBhdGhPckZvbGRlcjogbnVsbCB8IFBhdGhPckZvbGRlcik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBwYXRoT3JGb2xkZXIgfSk7XG5cbiAgd2hpbGUgKGZvbGRlcikge1xuICAgIGlmICghYXdhaXQgaXNFbXB0eUZvbGRlcihhcHAsIGZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gZm9sZGVyLnBhcmVudDtcbiAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlcihhcHAsIGZvbGRlcik7XG4gICAgZm9sZGVyID0gcGFyZW50O1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBhIHNhZmUgcGF0aCBmb3IgYSBmaWxlIG9yIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGdldHRpbmcgYSBzYWZlIHBhdGguXG4gKiBAcmV0dXJucyBUaGUgc2FmZSBwYXRoIGZvciB0aGUgZmlsZSBvciBmb2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYnN0cmFjdEZpbGVQYXRoU2FmZShwYXJhbXM6IEdldEFic3RyYWN0RmlsZVBhdGhTYWZlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBwYXRoLFxuICAgIHR5cGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgYWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoIH0pO1xuXG4gIGlmIChhYnN0cmFjdEZpbGUgJiYgZ2V0RmlsZVN5c3RlbVR5cGUoYWJzdHJhY3RGaWxlKSA9PT0gdHlwZSkge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgcmV0dXJuIGdldEF2YWlsYWJsZVBhdGgoYXBwLCBwYXRoKTtcbn1cblxuLyoqXG4gKiBHZXRzIGFuIGF2YWlsYWJsZSBwYXRoIGZvciBhIGZpbGUgaW4gdGhlIHZhdWx0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGdldCBhbiBhdmFpbGFibGUgcGF0aCBmb3IuXG4gKiBAcmV0dXJucyBUaGUgYXZhaWxhYmxlIHBhdGggZm9yIHRoZSBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlUGF0aChhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZXh0bmFtZShwYXRoKTtcbiAgcmV0dXJuIGFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoKGpvaW4oZGlybmFtZShwYXRoKSwgYmFzZW5hbWUocGF0aCwgZXh0ZW5zaW9uKSksIGV4dGVuc2lvbi5zbGljZSgxKSk7XG59XG5cbi8qKlxuICogR2V0cyBhIHNhZmUgZmlsZSBwYXRoIGZvciBhIGZpbGUgb3IgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlciB0byBnZXQgYSBzYWZlIHBhdGggZm9yLlxuICogQHJldHVybnMgVGhlIHNhZmUgcGF0aCBmb3IgdGhlIGZpbGUgb3IgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVBhdGhTYWZlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmUoeyBhcHAsIHBhdGgsIHR5cGU6IEZpbGVTeXN0ZW1UeXBlLkZpbGUgfSk7XG59XG5cbi8qKlxuICogR2V0cyBhIHNhZmUgZm9sZGVyIHBhdGggZm9yIGEgZmlsZSBvciBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgb3IgZm9sZGVyIHRvIGdldCBhIHNhZmUgcGF0aCBmb3IuXG4gKiBAcmV0dXJucyBUaGUgc2FmZSBwYXRoIGZvciB0aGUgZmlsZSBvciBmb2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJQYXRoU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldEFic3RyYWN0RmlsZVBhdGhTYWZlKHsgYXBwLCBwYXRoLCB0eXBlOiBGaWxlU3lzdGVtVHlwZS5Gb2xkZXIgfSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFuIGFycmF5IG9mIE1hcmtkb3duIGZpbGVzIGZyb20gdGhlIGFwcCdzIHZhdWx0IGFuZCBzb3J0cyB0aGVtIGFscGhhYmV0aWNhbGx5IGJ5IHRoZWlyIGZpbGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIE1hcmtkb3duIGZpbGVzIHNvcnRlZCBieSBmaWxlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZG93bkZpbGVzU29ydGVkKGFwcDogQXBwKTogVEZpbGVbXSB7XG4gIHJldHVybiBhcHAudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpLnNvcnQoKGEsIGIpID0+IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBhbGwgbm90ZSBmaWxlcyBmcm9tIHRoZSBhcHAncyB2YXVsdCBhbmQgc29ydHMgdGhlbSBhbHBoYWJldGljYWxseSBieSB0aGVpciBmaWxlIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhbGwgbm90ZSBmaWxlcyBpbiB0aGUgdmF1bHQgc29ydGVkIGJ5IGZpbGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGVGaWxlc1NvcnRlZChhcHA6IEFwcCk6IFRGaWxlW10ge1xuICByZXR1cm4gYXBwLnZhdWx0LmdldEFsbExvYWRlZEZpbGVzKCkuZmlsdGVyKChmaWxlKSA9PiBpc0ZpbGUoZmlsZSkgJiYgaXNOb3RlKGZpbGUpKS5zb3J0KChhLCBiKSA9PiBhLnBhdGgubG9jYWxlQ29tcGFyZShiLnBhdGgpKSBhcyBURmlsZVtdO1xufVxuXG4vKipcbiAqIEdldHMgb3IgY3JlYXRlcyBhbiBhYnN0cmFjdCBmaWxlIHNhZmVseSBpbiB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGdldHRpbmcgb3IgY3JlYXRpbmcgdGhlIGFic3RyYWN0IGZpbGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhYnN0cmFjdCBmaWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVBYnN0cmFjdEZpbGVTYWZlKHBhcmFtczogR2V0T3JDcmVhdGVBYnN0cmFjdEZpbGVTYWZlUGFyYW1zKTogUHJvbWlzZTxUQWJzdHJhY3RGaWxlPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgdHlwZVxuICB9ID0gcGFyYW1zO1xuICBsZXQgeyBwYXRoIH0gPSBwYXJhbXM7XG4gIHBhdGggPSBnZXRBYnN0cmFjdEZpbGVQYXRoU2FmZSh7IGFwcCwgcGF0aCwgdHlwZSB9KTtcbiAgY29uc3QgYWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoIH0pO1xuICBpZiAoYWJzdHJhY3RGaWxlKSB7XG4gICAgcmV0dXJuIGFic3RyYWN0RmlsZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRmlsZVN5c3RlbVR5cGUuRmlsZToge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5jcmVhdGUocGF0aCwgJycpO1xuICAgIH1cbiAgICBjYXNlIEZpbGVTeXN0ZW1UeXBlLkZvbGRlcjoge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5jcmVhdGVGb2xkZXIocGF0aCk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdldHMgb3IgY3JlYXRlcyBhIGZpbGUgc2FmZWx5IGluIHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAqXG4gKiBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZSByZXR1cm5lZC5cbiAqIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGdldCBvciBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBmaWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGaWxlU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxURmlsZT4ge1xuICByZXR1cm4gYXNGaWxlKGF3YWl0IGdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZSh7IGFwcCwgcGF0aCwgdHlwZTogRmlsZVN5c3RlbVR5cGUuRmlsZSB9KSk7XG59XG5cbi8qKlxuICogR2V0cyBvciBjcmVhdGVzIGEgZm9sZGVyIHNhZmVseSBpbiB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogSWYgdGhlIGZvbGRlciBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZSByZXR1cm5lZC5cbiAqIElmIHRoZSBmb2xkZXIgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBnZXQgb3IgY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZm9sZGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGb2xkZXJTYWZlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFRGb2xkZXI+IHtcbiAgcmV0dXJuIGFzRm9sZGVyKGF3YWl0IGdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZSh7IGFwcCwgcGF0aCwgdHlwZTogRmlsZVN5c3RlbVR5cGUuRm9sZGVyIH0pKTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgc2FmZSByZW5hbWUgcGF0aCBmb3IgYSBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZ2V0dGluZyBhIHNhZmUgcmVuYW1lIHBhdGguXG4gKiBAcmV0dXJucyBUaGUgc2FmZSByZW5hbWUgcGF0aCBmb3IgdGhlIGFic3RyYWN0IGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYWZlUmVuYW1lUGF0aChwYXJhbXM6IEdldFNhZmVSZW5hbWVQYXRoUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcHAsIG9sZFBhdGhPckFic3RyYWN0RmlsZSB9ID0gcGFyYW1zO1xuICBsZXQgeyBuZXdQYXRoIH0gPSBwYXJhbXM7XG4gIGNvbnN0IG9sZFBhdGggPSBnZXRQYXRoKGFwcCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlKTtcblxuICBpZiAoZ2V0RGF0YUFkYXB0ZXJFeChhcHApLmluc2Vuc2l0aXZlKSB7XG4gICAgbGV0IGZvbGRlclBhdGggPSBkaXJuYW1lKG5ld1BhdGgpO1xuICAgIGxldCBub25FeGlzdGluZ1BhdGggPSBiYXNlbmFtZShuZXdQYXRoKTtcbiAgICBsZXQgZm9sZGVyOiBudWxsIHwgVEZvbGRlcjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBUaGVyZSBpcyBubyBlbGVnYW50IHdheSB0byBwZXJmb3JtIGluZmluaXRlIGxvb3BzLlxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoeyBhcHAsIGlzQ2FzZUluc2Vuc2l0aXZlOiB0cnVlLCBwYXRoT3JGb2xkZXI6IGZvbGRlclBhdGggfSk7XG4gICAgICBpZiAoZm9sZGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbm9uRXhpc3RpbmdQYXRoID0gam9pbihiYXNlbmFtZShmb2xkZXJQYXRoKSwgbm9uRXhpc3RpbmdQYXRoKTtcbiAgICAgIGZvbGRlclBhdGggPSBkaXJuYW1lKGZvbGRlclBhdGgpO1xuICAgIH1cbiAgICBuZXdQYXRoID0gam9pbihmb2xkZXIuZ2V0UGFyZW50UHJlZml4KCksIG5vbkV4aXN0aW5nUGF0aCk7XG4gIH1cblxuICBpZiAob2xkUGF0aC50b0xvd2VyQ2FzZSgpID09PSBuZXdQYXRoLnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gbmV3UGF0aDtcbiAgfVxuXG4gIHJldHVybiBnZXRBdmFpbGFibGVQYXRoKGFwcCwgbmV3UGF0aCk7XG59XG5cbi8qKlxuICogSW52b2tlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIGZpbGUgc3lzdGVtIGxvY2suXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBpbnZva2luZyB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZmlsZSBzeXN0ZW0gbG9jay5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludm9rZVdpdGhGaWxlU3lzdGVtTG9jayhwYXJhbXM6IEludm9rZVdpdGhGaWxlU3lzdGVtTG9ja1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgJGZ1bmN0aW9uLFxuICAgIGFwcCxcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlIH0pO1xuICBhd2FpdCBhcHAudmF1bHQucHJvY2VzcyhmaWxlLCAoY29udGVudCkgPT4ge1xuICAgICRmdW5jdGlvbihjb250ZW50KTtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb2YgYW5vdGhlciBwYXRoIG9yIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSBjaGlsZCBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvZiB0aGUgcGFyZW50IHBhdGggb3IgZmlsZS5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNoaWxkIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9mIHRoZSBwYXJlbnQgcGF0aCBvciBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDaGlsZChwYXJhbXM6IElzQ2hpbGRQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjaGlsZFBhdGhPckZpbGUsXG4gICAgcGFyZW50UGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBjaGlsZFBhdGggPSBnZXRQYXRoKGFwcCwgY2hpbGRQYXRoT3JGaWxlKTtcbiAgY29uc3QgcGFyZW50UGF0aCA9IGdldFBhdGgoYXBwLCBwYXJlbnRQYXRoT3JGaWxlKTtcblxuICBpZiAoY2hpbGRQYXRoID09PSBwYXJlbnRQYXRoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHBhcmVudFBhdGggPT09ICcvJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkUGF0aC5zdGFydHNXaXRoKGAke3BhcmVudFBhdGh9L2ApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9yIHNlbGYgb2YgYW5vdGhlciBwYXRoIG9yIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSBjaGlsZCBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvciBzZWxmIG9mIHRoZSBwYXJlbnQgcGF0aCBvciBmaWxlLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2hpbGQgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb3Igc2VsZiBvZiB0aGUgcGFyZW50IHBhdGggb3IgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hpbGRPclNlbGYocGFyYW1zOiBJc0NoaWxkT3JTZWxmUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgY2hpbGRQYXRoT3JGaWxlLFxuICAgIHBhcmVudFBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgY2hpbGRQYXRoID0gZ2V0UGF0aChhcHAsIGNoaWxkUGF0aE9yRmlsZSk7XG4gIGNvbnN0IHBhcmVudFBhdGggPSBnZXRQYXRoKGFwcCwgcGFyZW50UGF0aE9yRmlsZSk7XG4gIHJldHVybiBjaGlsZFBhdGggPT09IHBhcmVudFBhdGggfHwgaXNDaGlsZCh7IGFwcCwgY2hpbGRQYXRoT3JGaWxlLCBwYXJlbnRQYXRoT3JGaWxlIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZvbGRlciBpcyBlbXB0eS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBwYXRoIG9yIGZvbGRlciB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZm9sZGVyIGlzIGVtcHR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNFbXB0eUZvbGRlcihhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgbGlzdGVkRmlsZXMgPSBhd2FpdCBsaXN0U2FmZShhcHAsIGdldFBhdGgoYXBwLCBwYXRoT3JGb2xkZXIpKTtcbiAgcmV0dXJuIGxpc3RlZEZpbGVzLmZpbGVzLmxlbmd0aCA9PT0gMCAmJiBsaXN0ZWRGaWxlcy5mb2xkZXJzLmxlbmd0aCA9PT0gMDtcbn1cblxuLyoqXG4gKiBTYWZlbHkgbGlzdHMgdGhlIGZpbGVzIGFuZCBmb2xkZXJzIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBpbiB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgcGF0aCBvciBmb2xkZXIgdG8gbGlzdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgTGlzdGVkRmlsZXN9IG9iamVjdCBjb250YWluaW5nIHRoZSBsaXN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0U2FmZShhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPExpc3RlZEZpbGVzPiB7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRm9sZGVyKTtcbiAgY29uc3QgRU1QVFkgPSB7IGZpbGVzOiBbXSwgZm9sZGVyczogW10gfTtcblxuICBjb25zdCBwYXRoU3RhdHMgPSBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5zdGF0KHBhdGgpO1xuICBpZiAocGF0aFN0YXRzPy50eXBlICE9PSAnZm9sZGVyJykge1xuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmxpc3QocGF0aCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGF3YWl0IGFwcC52YXVsdC5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgYSBmaWxlIHdpdGggcmV0cnkgbG9naWMsIHVwZGF0aW5nIGl0cyBjb250ZW50IGJhc2VkIG9uIGEgcHJvdmlkZWQgdmFsdWUgb3IgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBwcm9jZXNzaW5nIHRoZSBmaWxlLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcHJvY2VzcyBpcyBjb21wbGV0ZS5cbiAqXG4gKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHByb2Nlc3MgZmFpbHMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV0cmllcyBvciB0aW1lb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2VzcyhwYXJhbXM6IFByb2Nlc3NQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBuZXdDb250ZW50UHJvdmlkZXIsXG4gICAgcGF0aE9yRmlsZSxcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50XG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyA9IHtcbiAgICBzaG91bGRGYWlsT25NaXNzaW5nRmlsZTogdHJ1ZSxcbiAgICBzaG91bGRTaG93VGltZW91dE5vdGljZTogdHJ1ZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBEZWZhdWx0IHZhbHVlLlxuICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogNTAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnBhcmFtcyB9O1xuICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsID0gYWJvcnRTaWduYWxBbnkoZnVsbE9wdGlvbnMuYWJvcnRTaWduYWwsIGFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIC8vIFJlZmVyZW5jZS1jb3VudGVkIGxvY2s7IGNvbXBvc2VzIHdpdGggYW55IG91dGVyIGxvY2suIFJlbGVhc2VkIGF0IGZ1bmN0aW9uIHNjb3BlIGV4aXQuXG4gIHVzaW5nIF9sb2NrID0gcmVzb3VyY2VMb2NrQ29tcG9uZW50Py5sb2NrRm9yUGF0aCh7IG9wZXJhdGlvbk5hbWU6ICdQcm9jZXNzIG5vdGUnLCBwYXRoT3JGaWxlIH0pO1xuXG4gIGF3YWl0IHJldHJ5V2l0aFRpbWVvdXROb3RpY2Uoe1xuICAgIGFzeW5jIG9wZXJhdGlvbkZ1bmN0aW9uKGFib3J0U2lnbmFsKSB7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBjb25zdCBvbGRDb250ZW50ID0gYXdhaXQgcmVhZFNhZmUoYXBwLCBwYXRoT3JGaWxlKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGlmIChvbGRDb250ZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzaG91bGRUcmVhdE1pc3NpbmdGaWxlQXNTdWNjZXNzKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBhd2FpdCByZXNvbHZlVmFsdWUobmV3Q29udGVudFByb3ZpZGVyLCB7IGFib3J0U2lnbmFsLCBjb250ZW50OiBvbGRDb250ZW50IH0pO1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgaWYgKG5ld0NvbnRlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBsZXQgaXNTdWNjZXNzID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGludm9rZUZpbGVBY3Rpb25TYWZlKHtcbiAgICAgICAgYXBwLFxuICAgICAgICBhc3luYyBmaWxlQWN0aW9uKGZpbGUpIHtcbiAgICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICAgIGF3YWl0IGFwcC52YXVsdC5wcm9jZXNzKGZpbGUsIChjb250ZW50KSA9PiB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQgIT09IG9sZENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgZ2V0TGliRGVidWdnZXIoJ1ZhdWx0OnByb2Nlc3MnKSgnQ29udGVudCBoYXMgY2hhbmdlZCBzaW5jZSBpdCB3YXMgcmVhZC4gUmV0cnlpbmcuLi4nLCB7XG4gICAgICAgICAgICAgICAgYWN0dWFsQ29udGVudDogY29udGVudCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IG9sZENvbnRlbnQsXG4gICAgICAgICAgICAgICAgcGF0aDogZmlsZS5wYXRoXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdDb250ZW50O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgcGF0aE9yRmlsZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IEludm9rZUZpbGVBY3Rpb25TYWZlUmVzdWx0Lk5vdEludm9rZWQpIHtcbiAgICAgICAgcmV0dXJuIHNob3VsZFRyZWF0TWlzc2luZ0ZpbGVBc1N1Y2Nlc3MoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlzU3VjY2VzcztcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nIC0tIENsb3NlcyBvdmVyIGBmdWxsT3B0aW9uc2AgYW5kIGBwYXRoYCBmcm9tIHRoZSBlbmNsb3Npbmcgc2NvcGUsIHNvIGl0IGNhbm5vdCBiZSBob2lzdGVkLlxuICAgICAgZnVuY3Rpb24gc2hvdWxkVHJlYXRNaXNzaW5nRmlsZUFzU3VjY2VzcygpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGZ1bGxPcHRpb25zLnNob3VsZEZhaWxPbk1pc3NpbmdGaWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICcke3BhdGh9JyBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9wZXJhdGlvbk5hbWU6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy52YXVsdC5wcm9jZXNzRmlsZSwgeyBmaWxlUGF0aDogcGF0aCB9KSxcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgcmV0cnlPcHRpb25zOiBmdWxsT3B0aW9ucyxcbiAgICBzaG91bGRTaG93VGltZW91dE5vdGljZTogZnVsbE9wdGlvbnMuc2hvdWxkU2hvd1RpbWVvdXROb3RpY2VcbiAgfSk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGNvbnRlbnQgb2YgYSBmaWxlIHNhZmVseSBmcm9tIHRoZSB2YXVsdC5cbiAqXG4gKiBJdCBjb3ZlcnMgdGhlIGNhc2Ugd2hlbiB0aGUgZmlsZSB3YXMgcmVtb3ZlZCBkdXJpbmcgdGhlIHJlYWRpbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byByZWFkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBvciBgbnVsbGAgaWYgdGhlIGZpbGUgaXMgbWlzc2luZyBvciBkZWxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFNhZmUoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgbGV0IGNvbnRlbnQ6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBhd2FpdCBpbnZva2VGaWxlQWN0aW9uU2FmZSh7XG4gICAgYXBwLFxuICAgIGFzeW5jIGZpbGVBY3Rpb24oZmlsZSkge1xuICAgICAgYXdhaXQgc2F2ZU5vdGUoYXBwLCBmaWxlKTtcbiAgICAgIGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcbiAgICB9LFxuICAgIHBhdGhPckZpbGVcbiAgfSk7XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIFJlbmFtZXMgYSBmaWxlIHNhZmVseSBpbiB0aGUgdmF1bHQuXG4gKiBJZiB0aGUgbmV3IHBhdGggYWxyZWFkeSBleGlzdHMsIHRoZSBmaWxlIHdpbGwgYmUgcmVuYW1lZCB0byBhbiBhdmFpbGFibGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbmFtaW5nIHRoZSBmaWxlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbmV3IHBhdGggb2YgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5hbWVTYWZlKHBhcmFtczogUmVuYW1lU2FmZVBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3UGF0aCxcbiAgICBvbGRQYXRoT3JBYnN0cmFjdEZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3Qgb2xkQWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlKHsgYXBwLCBwYXRoT3JGaWxlOiBvbGRQYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG5cbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldFNhZmVSZW5hbWVQYXRoKHsgYXBwLCBuZXdQYXRoLCBvbGRQYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG5cbiAgaWYgKG9sZEFic3RyYWN0RmlsZS5wYXRoLnRvTG93ZXJDYXNlKCkgPT09IG5ld0F2YWlsYWJsZVBhdGgudG9Mb3dlckNhc2UoKSkge1xuICAgIGlmIChvbGRBYnN0cmFjdEZpbGUucGF0aCAhPT0gbmV3UGF0aCkge1xuICAgICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUob2xkQWJzdHJhY3RGaWxlLCBuZXdBdmFpbGFibGVQYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG4gIH1cblxuICBjb25zdCBuZXdGb2xkZXJQYXRoID0gcGFyZW50Rm9sZGVyUGF0aChuZXdBdmFpbGFibGVQYXRoKTtcbiAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZShhcHAsIG5ld0ZvbGRlclBhdGgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUob2xkQWJzdHJhY3RGaWxlLCBuZXdBdmFpbGFibGVQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMobmV3QXZhaWxhYmxlUGF0aCkgfHwgYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhvbGRBYnN0cmFjdEZpbGUucGF0aCkpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdBdmFpbGFibGVQYXRoO1xufVxuXG4vKipcbiAqIFNhdmVzIHRoZSBzcGVjaWZpZWQgbm90ZSBpbiB0aGUgT2JzaWRpYW4gYXBwLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgbm90ZSB0byBiZSBzYXZlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbm90ZSBpcyBzYXZlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVOb3RlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghaXNNYXJrZG93bkZpbGUocGF0aE9yRmlsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGZvciAoY29uc3QgbGVhZiBvZiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShWaWV3VHlwZS5NYXJrZG93bikpIHtcbiAgICBpZiAobGVhZi52aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIGxlYWYudmlldy5maWxlPy5wYXRoID09PSBwYXRoICYmIGxlYWYudmlldy5kaXJ0eSkge1xuICAgICAgYXdhaXQgbGVhZi52aWV3LnNhdmUoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFzaGVzIGFuIGFic3RyYWN0IGZpbGUgc2FmZWx5IGZyb20gdGhlIHZhdWx0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gdHJhc2guXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaXMgdHJhc2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYXNoU2FmZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGUgfSk7XG4gIGlmICghZmlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShmaWxlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhmaWxlLnBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBnZXRMaWJEZWJ1Z2dlcignVmF1bHQ6dHJhc2hTYWZlJykoYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyYXNoaW5nICR7ZmlsZS5wYXRofSwgYnV0IHRoZSBmaWxlIG5vIGxvbmdlciBleGlzdHMuYCwgeyBlcnJvciwgcGF0aDogZmlsZS5wYXRoIH0pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGludm9rZUZpbGVBY3Rpb25TYWZlKHBhcmFtczogSW52b2tlRmlsZUFjdGlvblNhZmVQYXJhbXMpOiBQcm9taXNlPEludm9rZUZpbGVBY3Rpb25TYWZlUmVzdWx0PiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZmlsZUFjdGlvbixcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG4gIGxldCBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgaWYgKCFmaWxlIHx8IGZpbGUuZGVsZXRlZCkge1xuICAgIHJldHVybiBJbnZva2VGaWxlQWN0aW9uU2FmZVJlc3VsdC5Ob3RJbnZva2VkO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgZmlsZUFjdGlvbihmaWxlKTtcbiAgICByZXR1cm4gSW52b2tlRmlsZUFjdGlvblNhZmVSZXN1bHQuSW52b2tlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoIWZpbGUgfHwgZmlsZS5kZWxldGVkKSB7XG4gICAgICByZXR1cm4gSW52b2tlRmlsZUFjdGlvblNhZmVSZXN1bHQuTm90SW52b2tlZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQVlQLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsaUJBQWlCO0FBQzFCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLG9CQUFvQjtBQUM3QixTQUFTLDhCQUE4QjtBQUN2QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNB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
@@ -5,6 +5,7 @@
5
5
  * This module provides additional utilities for working with the Obsidian {@link Workspace}.
6
6
  */
7
7
  import type { App, WorkspaceContainer } from 'obsidian';
8
+ import type { DisposableEx } from '../disposable.mjs';
8
9
  /**
9
10
  * Waits until the workspace layout is ready.
10
11
  *
@@ -29,3 +30,52 @@ export declare function getAllContainers(app: App): WorkspaceContainer[];
29
30
  * @returns All DOM windows in the workspace.
30
31
  */
31
32
  export declare function getAllDomWindows(app: App): Window[];
33
+ /**
34
+ * Returns the app's main window — the one the vault opened in, as opposed to any popout window.
35
+ *
36
+ * Read from the root split, which is the one workspace container that always lives in the main window
37
+ * (every popout is a {@link WorkspaceWindow} under `floatingSplit`). Prefer this over the global
38
+ * `window`, which only happens to be the main window because plugin code runs in its context.
39
+ *
40
+ * @param app - The Obsidian app.
41
+ * @returns The app's main window.
42
+ */
43
+ export declare function getMainWindow(app: App): Window;
44
+ /**
45
+ * Makes the app's main window the active one until the returned {@link DisposableEx} is disposed.
46
+ *
47
+ * See {@link switchToWindow} for why this is needed and what it changes, and {@link getMainWindow} for
48
+ * what counts as the main window.
49
+ *
50
+ * @param app - The Obsidian app.
51
+ * @returns A {@link DisposableEx} that restores the previously active window when disposed.
52
+ * @example
53
+ * ```ts
54
+ * // Raise a notice in the main window even while the settings window is open.
55
+ * using _mainWindowSwitch = switchToMainWindow(app);
56
+ * new Notice('This vault is a temporary sandbox.');
57
+ * ```
58
+ */
59
+ export declare function switchToMainWindow(app: App): DisposableEx;
60
+ /**
61
+ * Makes the given window the active one until the returned {@link DisposableEx} is disposed.
62
+ *
63
+ * Obsidian tracks the focused window in the `activeWindow` / `activeDocument` globals and updates them
64
+ * whenever a window takes focus — including when a popout such as the settings window opens. UI it
65
+ * creates for "the current window" reads those globals at creation time and offers no way to name a
66
+ * window: `new Notice(...)`, for instance, is built inside whatever window `activeWindow` points at,
67
+ * and cannot be moved afterwards. Pointing the globals at the wanted window for exactly that creation,
68
+ * then putting them back, is what this does.
69
+ *
70
+ * Restore is what makes it safe, so always bind it with `using` (or dispose it in a `finally`): leaving
71
+ * the globals pointed at the wrong window would misplace every later window-sensitive Obsidian call.
72
+ *
73
+ * @param win - The window to make active.
74
+ * @returns A {@link DisposableEx} that restores the previously active window when disposed.
75
+ * @example
76
+ * ```ts
77
+ * using _windowSwitch = switchToWindow(otherWindow);
78
+ * new Notice('This notice belongs to the other window.');
79
+ * ```
80
+ */
81
+ export declare function switchToWindow(win: Window): DisposableEx;
@@ -21,6 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
21
21
  globalThis.process = browserProcess;
22
22
  })();
23
23
 
24
+ import { CallbackDisposable } from "../disposable.mjs";
24
25
  async function ensureLayoutReady(app) {
25
26
  await new Promise((resolve) => {
26
27
  app.workspace.onLayoutReady(resolve);
@@ -36,9 +37,30 @@ function getAllContainers(app) {
36
37
  function getAllDomWindows(app) {
37
38
  return getAllContainers(app).map((container) => container.win);
38
39
  }
40
+ function getMainWindow(app) {
41
+ return app.workspace.rootSplit.win;
42
+ }
43
+ function switchToMainWindow(app) {
44
+ return switchToWindow(getMainWindow(app));
45
+ }
46
+ function switchToWindow(win) {
47
+ const previousActiveWindow = activeWindow;
48
+ const previousActiveDocument = activeDocument;
49
+ window.activeWindow = win;
50
+ window.activeDocument = win.document;
51
+ return new CallbackDisposable({
52
+ callback: () => {
53
+ window.activeWindow = previousActiveWindow;
54
+ window.activeDocument = previousActiveDocument;
55
+ }
56
+ });
57
+ }
39
58
  export {
40
59
  ensureLayoutReady,
41
60
  getAllContainers,
42
- getAllDomWindows
61
+ getAllDomWindows,
62
+ getMainWindow,
63
+ switchToMainWindow,
64
+ switchToWindow
43
65
  };
44
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3dvcmtzcGFjZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFkZGl0aW9uYWwgdXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggdGhlIE9ic2lkaWFuIHtAbGluayBXb3Jrc3BhY2V9LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIC0tIFdlIG5lZWQgdG8gaW1wb3J0IGBXb3Jrc3BhY2VgIHRvIHVzZSBpdCBpbiB0aGUgdHNkb2NzLlxuICBXb3Jrc3BhY2UsXG4gIFdvcmtzcGFjZUNvbnRhaW5lclxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogV2FpdHMgdW50aWwgdGhlIHdvcmtzcGFjZSBsYXlvdXQgaXMgcmVhZHkuXG4gKlxuICogUmVzb2x2ZXMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgbGF5b3V0IGlzIGFscmVhZHkgcmVhZHk7IG90aGVyd2lzZSByZXNvbHZlcyBvbmNlIE9ic2lkaWFuIGZpcmVzIHRoZVxuICogbGF5b3V0LXJlYWR5IGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSB3b3Jrc3BhY2UgbGF5b3V0IGlzIHJlYWR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTGF5b3V0UmVhZHkoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICBhcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkocmVzb2x2ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNvbnRhaW5lcnMgaW4gdGhlIHdvcmtzcGFjZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcC5cbiAqIEByZXR1cm5zIEFsbCBjb250YWluZXJzIGluIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxDb250YWluZXJzKGFwcDogQXBwKTogV29ya3NwYWNlQ29udGFpbmVyW10ge1xuICBjb25zdCBjb250YWluZXJzID0gbmV3IFNldDxXb3Jrc3BhY2VDb250YWluZXI+KCk7XG4gIGFwcC53b3Jrc3BhY2UuaXRlcmF0ZUFsbExlYXZlcygobGVhZikgPT4ge1xuICAgIGNvbnRhaW5lcnMuYWRkKGxlYWYuZ2V0Q29udGFpbmVyKCkpO1xuICB9KTtcbiAgcmV0dXJuIFsuLi5jb250YWluZXJzXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBET00gd2luZG93cyBpbiB0aGUgd29ya3NwYWNlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwLlxuICogQHJldHVybnMgQWxsIERPTSB3aW5kb3dzIGluIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxEb21XaW5kb3dzKGFwcDogQXBwKTogV2luZG93W10ge1xuICByZXR1cm4gZ2V0QWxsQ29udGFpbmVycyhhcHApLm1hcCgoY29udGFpbmVyKSA9PiBjb250YWluZXIud2luKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLGVBQXNCLGtCQUFrQixLQUF5QjtBQUMvRCxRQUFNLElBQUksUUFBYyxDQUFDLFlBQVk7QUFDbkMsUUFBSSxVQUFVLGNBQWMsT0FBTztBQUFBLEVBQ3JDLENBQUM7QUFDSDtBQVFPLFNBQVMsaUJBQWlCLEtBQWdDO0FBQy9ELFFBQU0sYUFBYSxvQkFBSSxJQUF3QjtBQUMvQyxNQUFJLFVBQVUsaUJBQWlCLENBQUMsU0FBUztBQUN2QyxlQUFXLElBQUksS0FBSyxhQUFhLENBQUM7QUFBQSxFQUNwQyxDQUFDO0FBQ0QsU0FBTyxDQUFDLEdBQUcsVUFBVTtBQUN2QjtBQVFPLFNBQVMsaUJBQWlCLEtBQW9CO0FBQ25ELFNBQU8saUJBQWlCLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxVQUFVLEdBQUc7QUFDL0Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
66
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3dvcmtzcGFjZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFkZGl0aW9uYWwgdXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggdGhlIE9ic2lkaWFuIHtAbGluayBXb3Jrc3BhY2V9LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIC0tIFdlIG5lZWQgdG8gaW1wb3J0IGBXb3Jrc3BhY2VgIHRvIHVzZSBpdCBpbiB0aGUgdHNkb2NzLlxuICBXb3Jrc3BhY2UsXG4gIFdvcmtzcGFjZUNvbnRhaW5lcixcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAtLSBXZSBuZWVkIHRvIGltcG9ydCBgV29ya3NwYWNlV2luZG93YCB0byB1c2UgaXQgaW4gdGhlIHRzZG9jcy5cbiAgV29ya3NwYWNlV2luZG93XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBEaXNwb3NhYmxlRXggfSBmcm9tICcuLi9kaXNwb3NhYmxlLnRzJztcblxuaW1wb3J0IHsgQ2FsbGJhY2tEaXNwb3NhYmxlIH0gZnJvbSAnLi4vZGlzcG9zYWJsZS50cyc7XG5cbi8qKlxuICogV2FpdHMgdW50aWwgdGhlIHdvcmtzcGFjZSBsYXlvdXQgaXMgcmVhZHkuXG4gKlxuICogUmVzb2x2ZXMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgbGF5b3V0IGlzIGFscmVhZHkgcmVhZHk7IG90aGVyd2lzZSByZXNvbHZlcyBvbmNlIE9ic2lkaWFuIGZpcmVzIHRoZVxuICogbGF5b3V0LXJlYWR5IGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSB3b3Jrc3BhY2UgbGF5b3V0IGlzIHJlYWR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTGF5b3V0UmVhZHkoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICBhcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkocmVzb2x2ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNvbnRhaW5lcnMgaW4gdGhlIHdvcmtzcGFjZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcC5cbiAqIEByZXR1cm5zIEFsbCBjb250YWluZXJzIGluIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxDb250YWluZXJzKGFwcDogQXBwKTogV29ya3NwYWNlQ29udGFpbmVyW10ge1xuICBjb25zdCBjb250YWluZXJzID0gbmV3IFNldDxXb3Jrc3BhY2VDb250YWluZXI+KCk7XG4gIGFwcC53b3Jrc3BhY2UuaXRlcmF0ZUFsbExlYXZlcygobGVhZikgPT4ge1xuICAgIGNvbnRhaW5lcnMuYWRkKGxlYWYuZ2V0Q29udGFpbmVyKCkpO1xuICB9KTtcbiAgcmV0dXJuIFsuLi5jb250YWluZXJzXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBET00gd2luZG93cyBpbiB0aGUgd29ya3NwYWNlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwLlxuICogQHJldHVybnMgQWxsIERPTSB3aW5kb3dzIGluIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxEb21XaW5kb3dzKGFwcDogQXBwKTogV2luZG93W10ge1xuICByZXR1cm4gZ2V0QWxsQ29udGFpbmVycyhhcHApLm1hcCgoY29udGFpbmVyKSA9PiBjb250YWluZXIud2luKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcHAncyBtYWluIHdpbmRvdyBcdTIwMTQgdGhlIG9uZSB0aGUgdmF1bHQgb3BlbmVkIGluLCBhcyBvcHBvc2VkIHRvIGFueSBwb3BvdXQgd2luZG93LlxuICpcbiAqIFJlYWQgZnJvbSB0aGUgcm9vdCBzcGxpdCwgd2hpY2ggaXMgdGhlIG9uZSB3b3Jrc3BhY2UgY29udGFpbmVyIHRoYXQgYWx3YXlzIGxpdmVzIGluIHRoZSBtYWluIHdpbmRvd1xuICogKGV2ZXJ5IHBvcG91dCBpcyBhIHtAbGluayBXb3Jrc3BhY2VXaW5kb3d9IHVuZGVyIGBmbG9hdGluZ1NwbGl0YCkuIFByZWZlciB0aGlzIG92ZXIgdGhlIGdsb2JhbFxuICogYHdpbmRvd2AsIHdoaWNoIG9ubHkgaGFwcGVucyB0byBiZSB0aGUgbWFpbiB3aW5kb3cgYmVjYXVzZSBwbHVnaW4gY29kZSBydW5zIGluIGl0cyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwLlxuICogQHJldHVybnMgVGhlIGFwcCdzIG1haW4gd2luZG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFpbldpbmRvdyhhcHA6IEFwcCk6IFdpbmRvdyB7XG4gIHJldHVybiBhcHAud29ya3NwYWNlLnJvb3RTcGxpdC53aW47XG59XG5cbi8qKlxuICogTWFrZXMgdGhlIGFwcCdzIG1haW4gd2luZG93IHRoZSBhY3RpdmUgb25lIHVudGlsIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZUV4fSBpcyBkaXNwb3NlZC5cbiAqXG4gKiBTZWUge0BsaW5rIHN3aXRjaFRvV2luZG93fSBmb3Igd2h5IHRoaXMgaXMgbmVlZGVkIGFuZCB3aGF0IGl0IGNoYW5nZXMsIGFuZCB7QGxpbmsgZ2V0TWFpbldpbmRvd30gZm9yXG4gKiB3aGF0IGNvdW50cyBhcyB0aGUgbWFpbiB3aW5kb3cuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlRXh9IHRoYXQgcmVzdG9yZXMgdGhlIHByZXZpb3VzbHkgYWN0aXZlIHdpbmRvdyB3aGVuIGRpc3Bvc2VkLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBSYWlzZSBhIG5vdGljZSBpbiB0aGUgbWFpbiB3aW5kb3cgZXZlbiB3aGlsZSB0aGUgc2V0dGluZ3Mgd2luZG93IGlzIG9wZW4uXG4gKiB1c2luZyBfbWFpbldpbmRvd1N3aXRjaCA9IHN3aXRjaFRvTWFpbldpbmRvdyhhcHApO1xuICogbmV3IE5vdGljZSgnVGhpcyB2YXVsdCBpcyBhIHRlbXBvcmFyeSBzYW5kYm94LicpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzd2l0Y2hUb01haW5XaW5kb3coYXBwOiBBcHApOiBEaXNwb3NhYmxlRXgge1xuICByZXR1cm4gc3dpdGNoVG9XaW5kb3coZ2V0TWFpbldpbmRvdyhhcHApKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgZ2l2ZW4gd2luZG93IHRoZSBhY3RpdmUgb25lIHVudGlsIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZUV4fSBpcyBkaXNwb3NlZC5cbiAqXG4gKiBPYnNpZGlhbiB0cmFja3MgdGhlIGZvY3VzZWQgd2luZG93IGluIHRoZSBgYWN0aXZlV2luZG93YCAvIGBhY3RpdmVEb2N1bWVudGAgZ2xvYmFscyBhbmQgdXBkYXRlcyB0aGVtXG4gKiB3aGVuZXZlciBhIHdpbmRvdyB0YWtlcyBmb2N1cyBcdTIwMTQgaW5jbHVkaW5nIHdoZW4gYSBwb3BvdXQgc3VjaCBhcyB0aGUgc2V0dGluZ3Mgd2luZG93IG9wZW5zLiBVSSBpdFxuICogY3JlYXRlcyBmb3IgXCJ0aGUgY3VycmVudCB3aW5kb3dcIiByZWFkcyB0aG9zZSBnbG9iYWxzIGF0IGNyZWF0aW9uIHRpbWUgYW5kIG9mZmVycyBubyB3YXkgdG8gbmFtZSBhXG4gKiB3aW5kb3c6IGBuZXcgTm90aWNlKC4uLilgLCBmb3IgaW5zdGFuY2UsIGlzIGJ1aWx0IGluc2lkZSB3aGF0ZXZlciB3aW5kb3cgYGFjdGl2ZVdpbmRvd2AgcG9pbnRzIGF0LFxuICogYW5kIGNhbm5vdCBiZSBtb3ZlZCBhZnRlcndhcmRzLiBQb2ludGluZyB0aGUgZ2xvYmFscyBhdCB0aGUgd2FudGVkIHdpbmRvdyBmb3IgZXhhY3RseSB0aGF0IGNyZWF0aW9uLFxuICogdGhlbiBwdXR0aW5nIHRoZW0gYmFjaywgaXMgd2hhdCB0aGlzIGRvZXMuXG4gKlxuICogUmVzdG9yZSBpcyB3aGF0IG1ha2VzIGl0IHNhZmUsIHNvIGFsd2F5cyBiaW5kIGl0IHdpdGggYHVzaW5nYCAob3IgZGlzcG9zZSBpdCBpbiBhIGBmaW5hbGx5YCk6IGxlYXZpbmdcbiAqIHRoZSBnbG9iYWxzIHBvaW50ZWQgYXQgdGhlIHdyb25nIHdpbmRvdyB3b3VsZCBtaXNwbGFjZSBldmVyeSBsYXRlciB3aW5kb3ctc2Vuc2l0aXZlIE9ic2lkaWFuIGNhbGwuXG4gKlxuICogQHBhcmFtIHdpbiAtIFRoZSB3aW5kb3cgdG8gbWFrZSBhY3RpdmUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlRXh9IHRoYXQgcmVzdG9yZXMgdGhlIHByZXZpb3VzbHkgYWN0aXZlIHdpbmRvdyB3aGVuIGRpc3Bvc2VkLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiB1c2luZyBfd2luZG93U3dpdGNoID0gc3dpdGNoVG9XaW5kb3cob3RoZXJXaW5kb3cpO1xuICogbmV3IE5vdGljZSgnVGhpcyBub3RpY2UgYmVsb25ncyB0byB0aGUgb3RoZXIgd2luZG93LicpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzd2l0Y2hUb1dpbmRvdyh3aW46IFdpbmRvdyk6IERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IHByZXZpb3VzQWN0aXZlV2luZG93ID0gYWN0aXZlV2luZG93O1xuICBjb25zdCBwcmV2aW91c0FjdGl2ZURvY3VtZW50ID0gYWN0aXZlRG9jdW1lbnQ7XG4gIHdpbmRvdy5hY3RpdmVXaW5kb3cgPSB3aW47XG4gIHdpbmRvdy5hY3RpdmVEb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIHdpbmRvdy5hY3RpdmVXaW5kb3cgPSBwcmV2aW91c0FjdGl2ZVdpbmRvdztcbiAgICAgIHdpbmRvdy5hY3RpdmVEb2N1bWVudCA9IHByZXZpb3VzQWN0aXZlRG9jdW1lbnQ7XG4gICAgfVxuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBLFNBQVMsMEJBQTBCO0FBV25DLGVBQXNCLGtCQUFrQixLQUF5QjtBQUMvRCxRQUFNLElBQUksUUFBYyxDQUFDLFlBQVk7QUFDbkMsUUFBSSxVQUFVLGNBQWMsT0FBTztBQUFBLEVBQ3JDLENBQUM7QUFDSDtBQVFPLFNBQVMsaUJBQWlCLEtBQWdDO0FBQy9ELFFBQU0sYUFBYSxvQkFBSSxJQUF3QjtBQUMvQyxNQUFJLFVBQVUsaUJBQWlCLENBQUMsU0FBUztBQUN2QyxlQUFXLElBQUksS0FBSyxhQUFhLENBQUM7QUFBQSxFQUNwQyxDQUFDO0FBQ0QsU0FBTyxDQUFDLEdBQUcsVUFBVTtBQUN2QjtBQVFPLFNBQVMsaUJBQWlCLEtBQW9CO0FBQ25ELFNBQU8saUJBQWlCLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxVQUFVLEdBQUc7QUFDL0Q7QUFZTyxTQUFTLGNBQWMsS0FBa0I7QUFDOUMsU0FBTyxJQUFJLFVBQVUsVUFBVTtBQUNqQztBQWlCTyxTQUFTLG1CQUFtQixLQUF3QjtBQUN6RCxTQUFPLGVBQWUsY0FBYyxHQUFHLENBQUM7QUFDMUM7QUF1Qk8sU0FBUyxlQUFlLEtBQTJCO0FBQ3hELFFBQU0sdUJBQXVCO0FBQzdCLFFBQU0seUJBQXlCO0FBQy9CLFNBQU8sZUFBZTtBQUN0QixTQUFPLGlCQUFpQixJQUFJO0FBRTVCLFNBQU8sSUFBSSxtQkFBbUI7QUFBQSxJQUM1QixVQUFVLE1BQVk7QUFDcEIsYUFBTyxlQUFlO0FBQ3RCLGFBQU8saUJBQWlCO0FBQUEsSUFDMUI7QUFBQSxFQUNGLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -26,7 +26,8 @@ import { existsSync } from "node:fs";
26
26
  import {
27
27
  cp,
28
28
  mkdir,
29
- readFile
29
+ readFile,
30
+ writeFile
30
31
  } from "node:fs/promises";
31
32
  import { ObsidianPluginRepoPaths } from "../obsidian/plugin/obsidian-plugin-repo-paths.mjs";
32
33
  import {
@@ -39,6 +40,8 @@ import {
39
40
  resolvePathFromRootSafe
40
41
  } from "./root.mjs";
41
42
  const DEMO_VAULT_HELPER_PLUGIN_ID = "demo-vault-helper";
43
+ const DATA_JSON_FILE_NAME = "data.json";
44
+ const DATA_JSON_INDENT = 2;
42
45
  async function archivePluginDemoVault() {
43
46
  const demoVaultPath = resolvePathFromRootSafe({ path: ObsidianPluginRepoPaths.DemoVault });
44
47
  if (!existsSync(demoVaultPath)) {
@@ -57,7 +60,7 @@ async function archivePluginDemoVault() {
57
60
  await mkdir(pluginFolder, { recursive: true });
58
61
  const distBuildPath = resolvePathFromRootSafe({ path: ObsidianPluginRepoPaths.DistBuild });
59
62
  await cp(distBuildPath, pluginFolder, { recursive: true });
60
- await injectDemoVaultHelper();
63
+ await injectDemoVaultHelper(manifest.id);
61
64
  const zipPath = resolvePathFromRootSafe({
62
65
  path: join(ObsidianPluginRepoPaths.DistBuild, `${manifest.id}-demo-vault-${manifest.version}.zip`)
63
66
  });
@@ -66,7 +69,7 @@ async function archivePluginDemoVault() {
66
69
  await zip.writeZipPromise(zipPath);
67
70
  return zipPath;
68
71
  }
69
- async function injectDemoVaultHelper() {
72
+ async function injectDemoVaultHelper(demoedPluginId) {
70
73
  const packageFolder = getRootFolder(getFolderName(import.meta.url));
71
74
  if (!packageFolder) {
72
75
  throw new Error("Could not resolve the obsidian-dev-utils package folder to inject the demo-vault-helper plugin.");
@@ -82,8 +85,11 @@ async function injectDemoVaultHelper() {
82
85
  });
83
86
  await mkdir(helperFolder, { recursive: true });
84
87
  await cp(helperSourcePath, helperFolder, { recursive: true });
88
+ const settings = { demoedPluginId };
89
+ await writeFile(join(helperFolder, DATA_JSON_FILE_NAME), `${JSON.stringify(settings, null, DATA_JSON_INDENT)}
90
+ `, "utf-8");
85
91
  }
86
92
  export {
87
93
  archivePluginDemoVault
88
94
  };
89
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQXJjaGl2ZXMgYSBwbHVnaW4ncyBkZW1vIHZhdWx0IGFzIGEgcmVsZWFzZSBhcnRpZmFjdC5cbiAqXG4gKiBBIHBsdWdpbiBjYW4gc2hpcCBhIGN1cmF0ZWQgZGVtbyB2YXVsdCBhdCBgZGVtby12YXVsdC9gIGluIGl0cyByZXBvIHJvb3QuIEF0IHJlbGVhc2UgdGltZSB0aGlzXG4gKiBtb2R1bGUgaW5zdGFsbHMgdGhlIGZyZXNobHkgYnVpbHQgcGx1Z2luIGludG8gdGhhdCB2YXVsdCdzIGAub2JzaWRpYW4vcGx1Z2lucy88aWQ+L2AgZm9sZGVyIGFuZFxuICogemlwcyB0aGUgd2hvbGUgdmF1bHQgaW50byBgZGlzdC9idWlsZC88cGx1Z2luLWlkPi1kZW1vLXZhdWx0LTx2ZXJzaW9uPi56aXBgLCBzbyB0aGUgZXhpc3RpbmdcbiAqIEdpdEh1Yi1yZWxlYXNlIHN0ZXAgKHdoaWNoIHVwbG9hZHMgZXZlcnkgZmlsZSBpbiBgZGlzdC9idWlsZC9gKSBhdHRhY2hlcyBpdCBhdXRvbWF0aWNhbGx5LiBUaGVcbiAqIGFyY2hpdmUgbmFtZSBjYXJyaWVzIHRoZSBwbHVnaW4gaWQgKHNvIHNldmVyYWwgcGx1Z2lucycgZGVtbyB2YXVsdHMgbmV2ZXIgY29sbGlkZSkgYW5kIHRoZSB2ZXJzaW9uXG4gKiAoc28gZWFjaCByZWxlYXNlIHNoaXBzIGl0cyBvd24gZGlzdGluY3RseSBuYW1lZCBhcnRpZmFjdCkuXG4gKi9cblxuaW1wb3J0IEFkbVppcCBmcm9tICdhZG0temlwJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGNwLFxuICBta2RpcixcbiAgcmVhZEZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGdldEZvbGRlck5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuL3Jvb3QudHMnO1xuXG5jb25zdCBERU1PX1ZBVUxUX0hFTFBFUl9QTFVHSU5fSUQgPSAnZGVtby12YXVsdC1oZWxwZXInO1xuXG4vKipcbiAqIFRoZSBtaW5pbWFsIHNoYXBlIG9mIGEgcGx1Z2luIGBtYW5pZmVzdC5qc29uYCByZWFkIGJ5IHtAbGluayBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0fS5cbiAqL1xuaW50ZXJmYWNlIFBsdWdpbk1hbmlmZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQsIHVzZWQgYXMgdGhlIGZvbGRlciBuYW1lIHVuZGVyIGBkZW1vLXZhdWx0Ly5vYnNpZGlhbi9wbHVnaW5zL2AuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIHZlcnNpb24sIGVtYmVkZGVkIGluIHRoZSBhcmNoaXZlIGZpbGUgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBBcmNoaXZlcyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdCAoYGRlbW8tdmF1bHQvYCBpbiB0aGUgcmVwbyByb290KSBhcyBhIHJlbGVhc2UgYXJ0aWZhY3QuXG4gKlxuICogSW5zdGFsbHMgdGhlIGZyZXNobHkgYnVpbHQgcGx1Z2luIGZyb20gYGRpc3QvYnVpbGQvYCBpbnRvIHRoZSB2YXVsdCdzXG4gKiBgLm9ic2lkaWFuL3BsdWdpbnMvPGlkPi9gIGZvbGRlciwgdGhlbiB6aXBzIHRoZSB3aG9sZSB2YXVsdCB0b1xuICogYGRpc3QvYnVpbGQvPHBsdWdpbi1pZD4tZGVtby12YXVsdC08dmVyc2lvbj4uemlwYC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBjcmVhdGVkIHppcCBhcmNoaXZlLCBvclxuICogYG51bGxgIGlmIHRoZSByZXBvIGhhcyBubyBgZGVtby12YXVsdC9gIGZvbGRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFyY2hpdmVQbHVnaW5EZW1vVmF1bHQoKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGRlbW9WYXVsdFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCB9KTtcbiAgaWYgKCFleGlzdHNTeW5jKGRlbW9WYXVsdFBhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYW5pZmVzdFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbiB9KTtcbiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKG1hbmlmZXN0UGF0aCwgJ3V0Zi04JykpIGFzIFBsdWdpbk1hbmlmZXN0O1xuXG4gIGNvbnN0IHBsdWdpbkZvbGRlciA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHtcbiAgICBwYXRoOiBqb2luKFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGVtb1ZhdWx0LFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRG90T2JzaWRpYW4sXG4gICAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QbHVnaW5zLFxuICAgICAgbWFuaWZlc3QuaWRcbiAgICApXG4gIH0pO1xuICBhd2FpdCBta2RpcihwbHVnaW5Gb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IGRpc3RCdWlsZFBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCB9KTtcbiAgYXdhaXQgY3AoZGlzdEJ1aWxkUGF0aCwgcGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBhd2FpdCBpbmplY3REZW1vVmF1bHRIZWxwZXIoKTtcblxuICAvLyBBcmNoaXZlIG5hbWUgaXMgaGFuZC1zeW5jZWQgd2l0aCB0aGUgcnVudGltZSBgb3BlbkRlbW9WYXVsdGAgb3BlbmVyLCB3aGljaCBkb3dubG9hZHMgdGhpcyBleGFjdCBhc3NldCBuYW1lLlxuICBjb25zdCB6aXBQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoe1xuICAgIHBhdGg6IGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGlzdEJ1aWxkLCBgJHttYW5pZmVzdC5pZH0tZGVtby12YXVsdC0ke21hbmlmZXN0LnZlcnNpb259LnppcGApXG4gIH0pO1xuICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKCk7XG4gIHppcC5hZGRMb2NhbEZvbGRlcihkZW1vVmF1bHRQYXRoKTtcbiAgYXdhaXQgemlwLndyaXRlWmlwUHJvbWlzZSh6aXBQYXRoKTtcbiAgcmV0dXJuIHppcFBhdGg7XG59XG5cbi8vIEluamVjdHMgdGhlIGJ1aWx0LCBgb2JzaWRpYW4tZGV2LXV0aWxzYC1vd25lZCBgZGVtby12YXVsdC1oZWxwZXJgIGJvb3RzdHJhcCBwbHVnaW4gKHNoaXBwZWQgaW4gdGhpcyBwYWNrYWdlKSBpbnRvIHRoZSBkZW1vIHZhdWx0LCBzbyBubyBwZXItdmF1bHQgY29weSBpcyBjb21taXR0ZWQgYW5kIGFuIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGJ1bXAgcHJvcGFnYXRlcyBmaXhlcy5cbmFzeW5jIGZ1bmN0aW9uIGluamVjdERlbW9WYXVsdEhlbHBlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGFja2FnZUZvbGRlciA9IGdldFJvb3RGb2xkZXIoZ2V0Rm9sZGVyTmFtZShpbXBvcnQubWV0YS51cmwpKTtcbiAgaWYgKCFwYWNrYWdlRm9sZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSB0aGUgb2JzaWRpYW4tZGV2LXV0aWxzIHBhY2thZ2UgZm9sZGVyIHRvIGluamVjdCB0aGUgZGVtby12YXVsdC1oZWxwZXIgcGx1Z2luLicpO1xuICB9XG5cbiAgY29uc3QgaGVscGVyU291cmNlUGF0aCA9IGpvaW4ocGFja2FnZUZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0RGVtb1ZhdWx0SGVscGVyKTtcbiAgY29uc3QgaGVscGVyRm9sZGVyID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoe1xuICAgIHBhdGg6IGpvaW4oXG4gICAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EZW1vVmF1bHQsXG4gICAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Eb3RPYnNpZGlhbixcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlBsdWdpbnMsXG4gICAgICBERU1PX1ZBVUxUX0hFTFBFUl9QTFVHSU5fSURcbiAgICApXG4gIH0pO1xuICBhd2FpdCBta2RpcihoZWxwZXJGb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCBjcChoZWxwZXJTb3VyY2VQYXRoLCBoZWxwZXJGb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhQSxPQUFPLFlBQVk7QUFDbkIsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGlDQUFpQztBQUMxQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLE1BQU0sOEJBQThCO0FBMkJwQyxlQUFzQix5QkFBaUQ7QUFDckUsUUFBTSxnQkFBZ0Isd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsVUFBVSxDQUFDO0FBQ3pGLE1BQUksQ0FBQyxXQUFXLGFBQWEsR0FBRztBQUM5QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZUFBZSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixhQUFhLENBQUM7QUFDM0YsUUFBTSxXQUFXLEtBQUssTUFBTSxNQUFNLFNBQVMsY0FBYyxPQUFPLENBQUM7QUFFakUsUUFBTSxlQUFlLHdCQUF3QjtBQUFBLElBQzNDLE1BQU07QUFBQSxNQUNKLHdCQUF3QjtBQUFBLE1BQ3hCLHdCQUF3QjtBQUFBLE1BQ3hCLHdCQUF3QjtBQUFBLE1BQ3hCLFNBQVM7QUFBQSxJQUNYO0FBQUEsRUFDRixDQUFDO0FBQ0QsUUFBTSxNQUFNLGNBQWMsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUU3QyxRQUFNLGdCQUFnQix3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixVQUFVLENBQUM7QUFDekYsUUFBTSxHQUFHLGVBQWUsY0FBYyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBRXpELFFBQU0sc0JBQXNCO0FBRzVCLFFBQU0sVUFBVSx3QkFBd0I7QUFBQSxJQUN0QyxNQUFNLEtBQUssd0JBQXdCLFdBQVcsR0FBRyxTQUFTLEVBQUUsZUFBZSxTQUFTLE9BQU8sTUFBTTtBQUFBLEVBQ25HLENBQUM7QUFDRCxRQUFNLE1BQU0sSUFBSSxPQUFPO0FBQ3ZCLE1BQUksZUFBZSxhQUFhO0FBQ2hDLFFBQU0sSUFBSSxnQkFBZ0IsT0FBTztBQUNqQyxTQUFPO0FBQ1Q7QUFHQSxlQUFlLHdCQUF1QztBQUNwRCxRQUFNLGdCQUFnQixjQUFjLGNBQWMsWUFBWSxHQUFHLENBQUM7QUFDbEUsTUFBSSxDQUFDLGVBQWU7QUFDbEIsVUFBTSxJQUFJLE1BQU0saUdBQWlHO0FBQUEsRUFDbkg7QUFFQSxRQUFNLG1CQUFtQixLQUFLLGVBQWUsMEJBQTBCLG1CQUFtQjtBQUMxRixRQUFNLGVBQWUsd0JBQXdCO0FBQUEsSUFDM0MsTUFBTTtBQUFBLE1BQ0osd0JBQXdCO0FBQUEsTUFDeEIsd0JBQXdCO0FBQUEsTUFDeEIsd0JBQXdCO0FBQUEsTUFDeEI7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0QsUUFBTSxNQUFNLGNBQWMsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUM3QyxRQUFNLEdBQUcsa0JBQWtCLGNBQWMsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUM5RDsiLAogICJuYW1lcyI6IFtdCn0K
95
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQXJjaGl2ZXMgYSBwbHVnaW4ncyBkZW1vIHZhdWx0IGFzIGEgcmVsZWFzZSBhcnRpZmFjdC5cbiAqXG4gKiBBIHBsdWdpbiBjYW4gc2hpcCBhIGN1cmF0ZWQgZGVtbyB2YXVsdCBhdCBgZGVtby12YXVsdC9gIGluIGl0cyByZXBvIHJvb3QuIEF0IHJlbGVhc2UgdGltZSB0aGlzXG4gKiBtb2R1bGUgaW5zdGFsbHMgdGhlIGZyZXNobHkgYnVpbHQgcGx1Z2luIGludG8gdGhhdCB2YXVsdCdzIGAub2JzaWRpYW4vcGx1Z2lucy88aWQ+L2AgZm9sZGVyIGFuZFxuICogemlwcyB0aGUgd2hvbGUgdmF1bHQgaW50byBgZGlzdC9idWlsZC88cGx1Z2luLWlkPi1kZW1vLXZhdWx0LTx2ZXJzaW9uPi56aXBgLCBzbyB0aGUgZXhpc3RpbmdcbiAqIEdpdEh1Yi1yZWxlYXNlIHN0ZXAgKHdoaWNoIHVwbG9hZHMgZXZlcnkgZmlsZSBpbiBgZGlzdC9idWlsZC9gKSBhdHRhY2hlcyBpdCBhdXRvbWF0aWNhbGx5LiBUaGVcbiAqIGFyY2hpdmUgbmFtZSBjYXJyaWVzIHRoZSBwbHVnaW4gaWQgKHNvIHNldmVyYWwgcGx1Z2lucycgZGVtbyB2YXVsdHMgbmV2ZXIgY29sbGlkZSkgYW5kIHRoZSB2ZXJzaW9uXG4gKiAoc28gZWFjaCByZWxlYXNlIHNoaXBzIGl0cyBvd24gZGlzdGluY3RseSBuYW1lZCBhcnRpZmFjdCkuXG4gKi9cblxuaW1wb3J0IEFkbVppcCBmcm9tICdhZG0temlwJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGNwLFxuICBta2RpcixcbiAgcmVhZEZpbGUsXG4gIHdyaXRlRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHR5cGUgeyBEZW1vVmF1bHRIZWxwZXJTZXR0aW5ncyB9IGZyb20gJy4uL29ic2lkaWFuL2RlbW8tdmF1bHQtaGVscGVyLXNldHRpbmdzLnRzJztcblxuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi9vYnNpZGlhbi9wbHVnaW4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0Rm9sZGVyTmFtZSxcbiAgam9pblxufSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMgfSBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGdldFJvb3RGb2xkZXIsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlXG59IGZyb20gJy4vcm9vdC50cyc7XG5cbmNvbnN0IERFTU9fVkFVTFRfSEVMUEVSX1BMVUdJTl9JRCA9ICdkZW1vLXZhdWx0LWhlbHBlcic7XG5jb25zdCBEQVRBX0pTT05fRklMRV9OQU1FID0gJ2RhdGEuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuLyoqXG4gKiBUaGUgbWluaW1hbCBzaGFwZSBvZiBhIHBsdWdpbiBgbWFuaWZlc3QuanNvbmAgcmVhZCBieSB7QGxpbmsgYXJjaGl2ZVBsdWdpbkRlbW9WYXVsdH0uXG4gKi9cbmludGVyZmFjZSBQbHVnaW5NYW5pZmVzdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLCB1c2VkIGFzIHRoZSBmb2xkZXIgbmFtZSB1bmRlciBgZGVtby12YXVsdC8ub2JzaWRpYW4vcGx1Z2lucy9gLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiB2ZXJzaW9uLCBlbWJlZGRlZCBpbiB0aGUgYXJjaGl2ZSBmaWxlIG5hbWUuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXJjaGl2ZXMgdGhlIHBsdWdpbidzIGRlbW8gdmF1bHQgKGBkZW1vLXZhdWx0L2AgaW4gdGhlIHJlcG8gcm9vdCkgYXMgYSByZWxlYXNlIGFydGlmYWN0LlxuICpcbiAqIEluc3RhbGxzIHRoZSBmcmVzaGx5IGJ1aWx0IHBsdWdpbiBmcm9tIGBkaXN0L2J1aWxkL2AgaW50byB0aGUgdmF1bHQnc1xuICogYC5vYnNpZGlhbi9wbHVnaW5zLzxpZD4vYCBmb2xkZXIsIHRoZW4gemlwcyB0aGUgd2hvbGUgdmF1bHQgdG9cbiAqIGBkaXN0L2J1aWxkLzxwbHVnaW4taWQ+LWRlbW8tdmF1bHQtPHZlcnNpb24+LnppcGAuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgY3JlYXRlZCB6aXAgYXJjaGl2ZSwgb3JcbiAqIGBudWxsYCBpZiB0aGUgcmVwbyBoYXMgbm8gYGRlbW8tdmF1bHQvYCBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0KCk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBjb25zdCBkZW1vVmF1bHRQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EZW1vVmF1bHQgfSk7XG4gIGlmICghZXhpc3RzU3luYyhkZW1vVmF1bHRQYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb24gfSk7XG4gIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShtYW5pZmVzdFBhdGgsICd1dGYtOCcpKSBhcyBQbHVnaW5NYW5pZmVzdDtcblxuICBjb25zdCBwbHVnaW5Gb2xkZXIgPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7XG4gICAgcGF0aDogam9pbihcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCxcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRvdE9ic2lkaWFuLFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuUGx1Z2lucyxcbiAgICAgIG1hbmlmZXN0LmlkXG4gICAgKVxuICB9KTtcbiAgYXdhaXQgbWtkaXIocGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBkaXN0QnVpbGRQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EaXN0QnVpbGQgfSk7XG4gIGF3YWl0IGNwKGRpc3RCdWlsZFBhdGgsIHBsdWdpbkZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgaW5qZWN0RGVtb1ZhdWx0SGVscGVyKG1hbmlmZXN0LmlkKTtcblxuICAvLyBBcmNoaXZlIG5hbWUgaXMgaGFuZC1zeW5jZWQgd2l0aCB0aGUgcnVudGltZSBgb3BlbkRlbW9WYXVsdGAgb3BlbmVyLCB3aGljaCBkb3dubG9hZHMgdGhpcyBleGFjdCBhc3NldCBuYW1lLlxuICBjb25zdCB6aXBQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoe1xuICAgIHBhdGg6IGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGlzdEJ1aWxkLCBgJHttYW5pZmVzdC5pZH0tZGVtby12YXVsdC0ke21hbmlmZXN0LnZlcnNpb259LnppcGApXG4gIH0pO1xuICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKCk7XG4gIHppcC5hZGRMb2NhbEZvbGRlcihkZW1vVmF1bHRQYXRoKTtcbiAgYXdhaXQgemlwLndyaXRlWmlwUHJvbWlzZSh6aXBQYXRoKTtcbiAgcmV0dXJuIHppcFBhdGg7XG59XG5cbi8vIEluamVjdHMgdGhlIGJ1aWx0LCBgb2JzaWRpYW4tZGV2LXV0aWxzYC1vd25lZCBgZGVtby12YXVsdC1oZWxwZXJgIGJvb3RzdHJhcCBwbHVnaW4gKHNoaXBwZWQgaW4gdGhpcyBwYWNrYWdlKSBpbnRvIHRoZSBkZW1vIHZhdWx0LCBzbyBubyBwZXItdmF1bHQgY29weSBpcyBjb21taXR0ZWQgYW5kIGFuIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGJ1bXAgcHJvcGFnYXRlcyBmaXhlcy5cbi8vXG4vLyBBbG9uZ3NpZGUgdGhlIGJpbmFyaWVzIGl0IHdyaXRlcyB0aGUgaGVscGVyJ3Mgb3duIGBkYXRhLmpzb25gIG5hbWluZyB0aGUgZGVtb25zdHJhdGVkIHBsdWdpbi4gVGhhdCBpc1xuLy8gVGhlIG9uZSBtb21lbnQgdGhlIGlkIGlzIGtub3duIGZvciBjZXJ0YWluIFx1MjAxNCBpdCBjb21lcyBmcm9tIHRoZSBwbHVnaW4ncyBvd24gbWFuaWZlc3QgXHUyMDE0IHdoZXJlYXMgdGhlXG4vLyBPcGVuZWQgdmF1bHQgb25seSBvZmZlcnMgcGx1Z2luIGZvbGRlcnMgdG8gY291bnQsIHdoaWNoIHRoZSBib290c3RyYXAgaXRzZWxmIGFkZHMgdG8gKHNlZVxuLy8gYERlbW9WYXVsdEhlbHBlclNldHRpbmdzYCkuXG5hc3luYyBmdW5jdGlvbiBpbmplY3REZW1vVmF1bHRIZWxwZXIoZGVtb2VkUGx1Z2luSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlRm9sZGVyID0gZ2V0Um9vdEZvbGRlcihnZXRGb2xkZXJOYW1lKGltcG9ydC5tZXRhLnVybCkpO1xuICBpZiAoIXBhY2thZ2VGb2xkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHRoZSBvYnNpZGlhbi1kZXYtdXRpbHMgcGFja2FnZSBmb2xkZXIgdG8gaW5qZWN0IHRoZSBkZW1vLXZhdWx0LWhlbHBlciBwbHVnaW4uJyk7XG4gIH1cblxuICBjb25zdCBoZWxwZXJTb3VyY2VQYXRoID0gam9pbihwYWNrYWdlRm9sZGVyLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3REZW1vVmF1bHRIZWxwZXIpO1xuICBjb25zdCBoZWxwZXJGb2xkZXIgPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7XG4gICAgcGF0aDogam9pbihcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRlbW9WYXVsdCxcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRvdE9ic2lkaWFuLFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuUGx1Z2lucyxcbiAgICAgIERFTU9fVkFVTFRfSEVMUEVSX1BMVUdJTl9JRFxuICAgIClcbiAgfSk7XG4gIGF3YWl0IG1rZGlyKGhlbHBlckZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGNwKGhlbHBlclNvdXJjZVBhdGgsIGhlbHBlckZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3Qgc2V0dGluZ3M6IERlbW9WYXVsdEhlbHBlclNldHRpbmdzID0geyBkZW1vZWRQbHVnaW5JZCB9O1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbihoZWxwZXJGb2xkZXIsIERBVEFfSlNPTl9GSUxFX05BTUUpLCBgJHtKU09OLnN0cmluZ2lmeShzZXR0aW5ncywgbnVsbCwgREFUQV9KU09OX0lOREVOVCl9XFxuYCwgJ3V0Zi04Jyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWFBLE9BQU8sWUFBWTtBQUNuQixTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBSVAsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGlDQUFpQztBQUMxQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLE1BQU0sOEJBQThCO0FBQ3BDLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sbUJBQW1CO0FBMkJ6QixlQUFzQix5QkFBaUQ7QUFDckUsUUFBTSxnQkFBZ0Isd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsVUFBVSxDQUFDO0FBQ3pGLE1BQUksQ0FBQyxXQUFXLGFBQWEsR0FBRztBQUM5QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZUFBZSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixhQUFhLENBQUM7QUFDM0YsUUFBTSxXQUFXLEtBQUssTUFBTSxNQUFNLFNBQVMsY0FBYyxPQUFPLENBQUM7QUFFakUsUUFBTSxlQUFlLHdCQUF3QjtBQUFBLElBQzNDLE1BQU07QUFBQSxNQUNKLHdCQUF3QjtBQUFBLE1BQ3hCLHdCQUF3QjtBQUFBLE1BQ3hCLHdCQUF3QjtBQUFBLE1BQ3hCLFNBQVM7QUFBQSxJQUNYO0FBQUEsRUFDRixDQUFDO0FBQ0QsUUFBTSxNQUFNLGNBQWMsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUU3QyxRQUFNLGdCQUFnQix3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixVQUFVLENBQUM7QUFDekYsUUFBTSxHQUFHLGVBQWUsY0FBYyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBRXpELFFBQU0sc0JBQXNCLFNBQVMsRUFBRTtBQUd2QyxRQUFNLFVBQVUsd0JBQXdCO0FBQUEsSUFDdEMsTUFBTSxLQUFLLHdCQUF3QixXQUFXLEdBQUcsU0FBUyxFQUFFLGVBQWUsU0FBUyxPQUFPLE1BQU07QUFBQSxFQUNuRyxDQUFDO0FBQ0QsUUFBTSxNQUFNLElBQUksT0FBTztBQUN2QixNQUFJLGVBQWUsYUFBYTtBQUNoQyxRQUFNLElBQUksZ0JBQWdCLE9BQU87QUFDakMsU0FBTztBQUNUO0FBUUEsZUFBZSxzQkFBc0IsZ0JBQXVDO0FBQzFFLFFBQU0sZ0JBQWdCLGNBQWMsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQUNsRSxNQUFJLENBQUMsZUFBZTtBQUNsQixVQUFNLElBQUksTUFBTSxpR0FBaUc7QUFBQSxFQUNuSDtBQUVBLFFBQU0sbUJBQW1CLEtBQUssZUFBZSwwQkFBMEIsbUJBQW1CO0FBQzFGLFFBQU0sZUFBZSx3QkFBd0I7QUFBQSxJQUMzQyxNQUFNO0FBQUEsTUFDSix3QkFBd0I7QUFBQSxNQUN4Qix3QkFBd0I7QUFBQSxNQUN4Qix3QkFBd0I7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDRCxRQUFNLE1BQU0sY0FBYyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQzdDLFFBQU0sR0FBRyxrQkFBa0IsY0FBYyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBRTVELFFBQU0sV0FBb0MsRUFBRSxlQUFlO0FBQzNELFFBQU0sVUFBVSxLQUFLLGNBQWMsbUJBQW1CLEdBQUcsR0FBRyxLQUFLLFVBQVUsVUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQUEsR0FBTSxPQUFPO0FBQzNIOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -4,4 +4,7 @@ import type { Rule } from 'eslint';
4
4
  Message ID reported when an async function is passed as a callback to a parameter whose return type is `any`/`unknown`, risking an unhandled promise rejection.
5
5
  */
6
6
  export declare const MESSAGE_ID = "noAsyncCallbackToUnsafeReturn";
7
+ /**
8
+ * ESLint rule disallowing async functions passed as callbacks to parameters with an `any` or `unknown` return type, where the returned promise is silently dropped.
9
+ */
7
10
  export declare const noAsyncCallbackToUnsafeReturn: Rule.RuleModule;
@@ -116,4 +116,4 @@ export {
116
116
  MESSAGE_ID,
117
117
  noAsyncCallbackToUnsafeReturn
118
118
  };
119
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9uby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IG5vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm5cbiAqXG4gKiBSZXBvcnRzIGFuIGVycm9yIHdoZW4gYW4gYXN5bmMgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2sgYXJndW1lbnRcbiAqIHRvIGEgZnVuY3Rpb24gcGFyYW1ldGVyIHdob3NlIHJldHVybiB0eXBlIGlzIGBhbnlgIG9yIGB1bmtub3duYC4gQmVjYXVzZVxuICogdGhlc2UgdHlwZXMgc2lsZW50bHkgYWNjZXB0IGBQcm9taXNlPFQ+YCwgdGhlIGNhbGxlciB3b24ndCBhd2FpdCB0aGVcbiAqIHJlc3VsdCwgbGVhZGluZyB0byB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zIGF0IHJ1bnRpbWUuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIG9uQ2xpY2soZm46IChldnQ6IE1vdXNlRXZlbnQpID0+IGFueSlcbiAqIGJ1dHRvbi5vbkNsaWNrKGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgc29tZUZuKCk7IC8vIFVuaGFuZGxlZCByZWplY3Rpb24gaWYgc29tZUZuIHRocm93c1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXNgIG9ubHkgY2F0Y2hlcyBgPT4gdm9pZGAgY2FsbGJhY2tzLlxuICogVGhpcyBydWxlIGNsb3NlcyB0aGUgZ2FwIGZvciBgPT4gYW55YCBhbmQgYD0+IHVua25vd25gIGNhbGxiYWNrcy5cbiAqL1xuaW1wb3J0IHR5cGUge1xuICBQYXJzZXJTZXJ2aWNlc1dpdGhUeXBlSW5mb3JtYXRpb24sXG4gIFRTRVNUcmVlXG59IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuaW1wb3J0IHR5cGUge1xuICBTaWduYXR1cmUsXG4gIFR5cGUsXG4gIFR5cGVDaGVja2VyLFxuICBUeXBlTm9kZVxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgaXNJZGVudGlmaWVyLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1R5cGVSZWZlcmVuY2VOb2RlLFxuICBpc1VuaW9uVHlwZU5vZGUsXG4gIFN5bWJvbEZsYWdzLFxuICBUeXBlRmxhZ3Ncbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhbiBhc3luYyBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjayB0byBhIHBhcmFtZXRlciB3aG9zZSByZXR1cm4gdHlwZSBpcyBgYW55YC9gdW5rbm93bmAsIHJpc2tpbmcgYW4gdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRCA9ICdub0FzeW5jQ2FsbGJhY2tUb1Vuc2FmZVJldHVybic7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIFR5cGVTY3JpcHQgdHlwZSBpcyBhIGZ1bmN0aW9uIHR5cGUgd2l0aCBhbiB1bnNhZmVcbiAqIHJldHVybiB0eXBlIGZvciBhc3luYyBjYWxsYmFja3MuXG4gKlxuICogQHBhcmFtIGNoZWNrZXIgLSBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEBwYXJhbSB0eXBlIC0gVGhlIHR5cGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdHlwZSBoYXMgYXQgbGVhc3Qgb25lIGNhbGwgc2lnbmF0dXJlIHdpdGggYW4gdW5zYWZlIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gaGFzVW5zYWZlUmV0dXJuQ2FsbFNpZ25hdHVyZShjaGVja2VyOiBUeXBlQ2hlY2tlciwgdHlwZTogVHlwZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZS5nZXRDYWxsU2lnbmF0dXJlcygpLnNvbWUoKHNpZykgPT4gaXNVbnNhZmVSZXR1cm5TaWduYXR1cmUoY2hlY2tlciwgc2lnKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBub2RlIGlzIGFuIGFzeW5jIGZ1bmN0aW9uIGV4cHJlc3Npb24gKGFycm93IG9yIHJlZ3VsYXIpLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gQVNUIG5vZGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYW4gYXN5bmMgYXJyb3cgb3IgZnVuY3Rpb24gZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gaXNBc3luY0Z1bmN0aW9uTm9kZShub2RlOiBUU0VTVHJlZS5Ob2RlKTogbm9kZSBpcyBUU0VTVHJlZS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiB8IFRTRVNUcmVlLkZ1bmN0aW9uRXhwcmVzc2lvbiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuXG4gIHJldHVybiAobm9kZS50eXBlID09PSAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nIHx8IG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRXhwcmVzc2lvbicpICYmIG5vZGUuYXN5bmM7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlIC0tIEJpdHdpc2UgZmxhZyBtYXNrIGlzIGlkaW9tYXRpYyBmb3IgVHlwZVNjcmlwdCBjb21waWxlciBBUEkuXG5jb25zdCBVTlNBRkVfUkVUVVJOX0ZMQUdTID0gVHlwZUZsYWdzLkFueSB8IFR5cGVGbGFncy5Vbmtub3duO1xuXG5jb25zdCBQUk9NSVNFX1RZUEVfTkFNRVMgPSBuZXcgU2V0KFsnUHJvbWlzZScsICdQcm9taXNlTGlrZSddKTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHR5cGUgbm9kZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byBgUHJvbWlzZWAgb3IgYFByb21pc2VMaWtlYCxcbiAqIGVpdGhlciBkaXJlY3RseSBvciB0aHJvdWdoIGEgdHlwZSBhbGlhcy4gVGhpcyBpbmRpY2F0ZXMgdGhlIGNhbGxlciBleHBsaWNpdGx5XG4gKiBhY2NvdW50cyBmb3IgcHJvbWlzZSByZXR1cm5zLlxuICpcbiAqIEBwYXJhbSBjaGVja2VyIC0gVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSB0eXBlIG5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSByZWZlcmVuY2VzIGBQcm9taXNlYCBvciBgUHJvbWlzZUxpa2VgLlxuICovXG5mdW5jdGlvbiBjb250YWluc1Byb21pc2VSZWZlcmVuY2UoY2hlY2tlcjogVHlwZUNoZWNrZXIsIG5vZGU6IFR5cGVOb2RlKTogYm9vbGVhbiB7XG4gIGlmIChpc1VuaW9uVHlwZU5vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlcy5zb21lKChtZW1iZXIpID0+IGNvbnRhaW5zUHJvbWlzZVJlZmVyZW5jZShjaGVja2VyLCBtZW1iZXIpKTtcbiAgfVxuXG4gIGlmIChpc1R5cGVSZWZlcmVuY2VOb2RlKG5vZGUpKSB7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFF1YWxpZmllZCBuYW1lcyAoZS5nLiwgbnMuUHJvbWlzZSkgYW5kIGltcG9ydCBhbGlhc2VzIHJlcXVpcmUgbXVsdGktZmlsZSBzZXR1cCBub3QgYXZhaWxhYmxlIGluIFJ1bGVUZXN0ZXIuICovXG4gICAgY29uc3QgbmFtZSA9IGlzSWRlbnRpZmllcihub2RlLnR5cGVOYW1lKSA/IG5vZGUudHlwZU5hbWUudGV4dCA6ICcnO1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgaWYgKFBST01JU0VfVFlQRV9OQU1FUy5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgdHlwZSBhbGlhcyAoZm9sbG93aW5nIGltcG9ydHMpIGFuZCBjaGVjayBpdHMgZGVmaW5pdGlvbiBib2R5XG4gICAgbGV0ICRzeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZS50eXBlTmFtZSk7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEltcG9ydCBhbGlhc2VzIHJlcXVpcmUgbXVsdGktZmlsZSBzZXR1cCBub3QgYXZhaWxhYmxlIGluIFJ1bGVUZXN0ZXIuICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UgLS0gQml0d2lzZSBmbGFnIGNoZWNrIGlzIGlkaW9tYXRpYyBmb3IgVHlwZVNjcmlwdCBjb21waWxlciBBUEkuXG4gICAgaWYgKCRzeW1ib2wgJiYgJHN5bWJvbC5mbGFncyAmIFN5bWJvbEZsYWdzLkFsaWFzKSB7XG4gICAgICAkc3ltYm9sID0gY2hlY2tlci5nZXRBbGlhc2VkU3ltYm9sKCRzeW1ib2wpO1xuICAgIH1cbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gJHN5bWJvbD8uZGVjbGFyYXRpb25zPy5bMF07XG4gICAgaWYgKGRlY2xhcmF0aW9uICYmIGlzVHlwZUFsaWFzRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXJlY3Vyc2lvbiAtLSBUaGlzIGZ1bmN0aW9uIHJlY3Vyc2VzIGluIHR3byBwbGFjZXM6IGhlcmUsIGZvbGxvd2luZyBhIHR5cGUgYWxpYXMsIGFuZCBhYm92ZSwgZmFubmluZyBvdXQgb3ZlciB0aGUgbWVtYmVycyBvZiBhIHVuaW9uLiBPbmx5IHRoaXMgb25lIGlzIGEgdGFpbCBjYWxsLCBzbyB0dXJuaW5nIGl0IGludG8gYSBsb29wIHdvdWxkIGxlYXZlIHRoZSBmdW5jdGlvbiBoYWxmIHJlY3Vyc2l2ZSBhbmQgaGFsZiBpdGVyYXRpdmUgb3ZlciB0aGUgc2FtZSB0cmVlLlxuICAgICAgcmV0dXJuIGNvbnRhaW5zUHJvbWlzZVJlZmVyZW5jZShjaGVja2VyLCBkZWNsYXJhdGlvbi50eXBlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBjYWxsIHNpZ25hdHVyZSBoYXMgYW4gdW5zYWZlIHJldHVybiB0eXBlIChgYW55YCBvciBgdW5rbm93bmApXG4gKiB3aXRob3V0IGV4cGxpY2l0bHkgYWNjb3VudGluZyBmb3IgcHJvbWlzZXMuXG4gKlxuICogRmxhZ3MgYmFyZSBgYW55YCwgYHVua25vd25gLCBhbmQgdW5pb25zIGxpa2UgYGFueSB8IHN0cmluZ2AgdGhhdCByZXNvbHZlIHRvXG4gKiBgYW55YC9gdW5rbm93bmAgd2l0aG91dCBpbmNsdWRpbmcgYFByb21pc2VgL2BQcm9taXNlTGlrZWAuIERvZXMgTk9UIGZsYWcgdHlwZVxuICogYWxpYXNlcyBsaWtlIGBBd2FpdGFibGU8VD5gIG9yIHVuaW9ucyBsaWtlIGBhbnkgfCBQcm9taXNlPGFueT5gIHRoYXQgZXhwbGljaXRseVxuICogaGFuZGxlIHByb21pc2UgcmV0dXJucy5cbiAqXG4gKiBAcGFyYW0gY2hlY2tlciAtIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHBhcmFtIHNpZyAtIFRoZSBjYWxsIHNpZ25hdHVyZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZXR1cm4gdHlwZSBpcyB1bnNhZmUgZm9yIGFzeW5jIGNhbGxiYWNrcy5cbiAqL1xuZnVuY3Rpb24gaXNVbnNhZmVSZXR1cm5TaWduYXR1cmUoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHNpZzogU2lnbmF0dXJlKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJldHVyblR5cGUgPSBjaGVja2VyLmdldFJldHVyblR5cGVPZlNpZ25hdHVyZShzaWcpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlIC0tIEJpdHdpc2UgZmxhZyBjaGVjayBpcyBpZGlvbWF0aWMgZm9yIFR5cGVTY3JpcHQgY29tcGlsZXIgQVBJLlxuICBpZiAoIShyZXR1cm5UeXBlLmZsYWdzICYgVU5TQUZFX1JFVFVSTl9GTEFHUykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayB0aGUgc3ludGFjdGljIHJldHVybiB0eXBlIGFubm90YXRpb24uIElmIGl0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvXG4gIC8vIFByb21pc2UvUHJvbWlzZUxpa2UgKGRpcmVjdGx5IG9yIHZpYSBhIHR5cGUgYWxpYXMpLCB0aGUgY2FsbGVyIGV4cGxpY2l0bHlcbiAgLy8gSGFuZGxlcyBhc3luYyByZXR1cm5zIGFuZCBzaG91bGQgbm90IGJlIGZsYWdnZWQuXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gc2lnLmdldERlY2xhcmF0aW9uKCk7XG4gIGNvbnN0IHJldHVyblR5cGVOb2RlID0gZGVjbGFyYXRpb24udHlwZTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUocmV0dXJuVHlwZU5vZGUsICdTaWduYXR1cmUgZGVjbGFyYXRpb25zIHdpdGggYW55L3Vua25vd24gcmV0dXJuIGFsd2F5cyBoYXZlIGEgcmV0dXJuIHR5cGUgYW5ub3RhdGlvbicpO1xuXG4gIHJldHVybiAhY29udGFpbnNQcm9taXNlUmVmZXJlbmNlKGNoZWNrZXIsIHJldHVyblR5cGVOb2RlKTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vQXN5bmNDYWxsYmFja1RvVW5zYWZlUmV0dXJuOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qgc2VydmljZXMgPSBjb250ZXh0LnNvdXJjZUNvZGUucGFyc2VyU2VydmljZXMgYXMgUGFyc2VyU2VydmljZXNXaXRoVHlwZUluZm9ybWF0aW9uO1xuICAgIGNvbnN0IGNoZWNrZXIgPSBzZXJ2aWNlcy5wcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNhbGxOb2RlID0gbm9kZSBhcyBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2FsbE5vZGUuYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGFyZ3VtZW50ID0gY2FsbE5vZGUuYXJndW1lbnRzW2luZGV4XTtcbiAgICAgICAgICBpZiAoIWFyZ3VtZW50IHx8ICFpc0FzeW5jRnVuY3Rpb25Ob2RlKGFyZ3VtZW50KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdHNDYWxsZWVOb2RlID0gc2VydmljZXMuZXNUcmVlTm9kZVRvVFNOb2RlTWFwLmdldChjYWxsTm9kZS5jYWxsZWUpO1xuICAgICAgICAgIGNvbnN0IGNhbGxlZVR5cGUgPSBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHRzQ2FsbGVlTm9kZSk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHNpZyBvZiBjYWxsZWVUeXBlLmdldENhbGxTaWduYXR1cmVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlciA9IHNpZy5nZXRQYXJhbWV0ZXJzKClbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXIpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlclR5cGUgPSBjaGVja2VyLmdldFR5cGVPZlN5bWJvbChwYXJhbWV0ZXIpO1xuXG4gICAgICAgICAgICBpZiAoaGFzVW5zYWZlUmV0dXJuQ2FsbFNpZ25hdHVyZShjaGVja2VyLCBwYXJhbWV0ZXJUeXBlKSkge1xuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgICAgICAgIG5vZGU6IGFyZ3VtZW50XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBwYXNzaW5nIGFzeW5jIGZ1bmN0aW9ucyBhcyBjYWxsYmFja3MgdG8gcGFyYW1ldGVycyB3aXRoIGBhbnlgIG9yIGB1bmtub3duYCByZXR1cm4gdHlwZSdcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdBc3luYyBmdW5jdGlvbiBwYXNzZWQgYXMgY2FsbGJhY2sgdG8gYSBwYXJhbWV0ZXIgd2l0aCBgYW55YC9gdW5rbm93bmAgcmV0dXJuIHR5cGUuIFRoaXMgbWF5IGNhdXNlIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbnMuIFdyYXAgdGhlIGNhbGw6IGAoLi4uYXJncykgPT4geyB5b3VyQXN5bmNGbiguLi5hcmdzKTsgfWAuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMseUJBQXlCO0FBSzNCLE1BQU0sYUFBYTtBQVUxQixTQUFTLDZCQUE2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
119
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9uby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IG5vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm5cbiAqXG4gKiBSZXBvcnRzIGFuIGVycm9yIHdoZW4gYW4gYXN5bmMgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2sgYXJndW1lbnRcbiAqIHRvIGEgZnVuY3Rpb24gcGFyYW1ldGVyIHdob3NlIHJldHVybiB0eXBlIGlzIGBhbnlgIG9yIGB1bmtub3duYC4gQmVjYXVzZVxuICogdGhlc2UgdHlwZXMgc2lsZW50bHkgYWNjZXB0IGBQcm9taXNlPFQ+YCwgdGhlIGNhbGxlciB3b24ndCBhd2FpdCB0aGVcbiAqIHJlc3VsdCwgbGVhZGluZyB0byB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zIGF0IHJ1bnRpbWUuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIG9uQ2xpY2soZm46IChldnQ6IE1vdXNlRXZlbnQpID0+IGFueSlcbiAqIGJ1dHRvbi5vbkNsaWNrKGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgc29tZUZuKCk7IC8vIFVuaGFuZGxlZCByZWplY3Rpb24gaWYgc29tZUZuIHRocm93c1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXNgIG9ubHkgY2F0Y2hlcyBgPT4gdm9pZGAgY2FsbGJhY2tzLlxuICogVGhpcyBydWxlIGNsb3NlcyB0aGUgZ2FwIGZvciBgPT4gYW55YCBhbmQgYD0+IHVua25vd25gIGNhbGxiYWNrcy5cbiAqL1xuaW1wb3J0IHR5cGUge1xuICBQYXJzZXJTZXJ2aWNlc1dpdGhUeXBlSW5mb3JtYXRpb24sXG4gIFRTRVNUcmVlXG59IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuaW1wb3J0IHR5cGUge1xuICBTaWduYXR1cmUsXG4gIFR5cGUsXG4gIFR5cGVDaGVja2VyLFxuICBUeXBlTm9kZVxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgaXNJZGVudGlmaWVyLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1R5cGVSZWZlcmVuY2VOb2RlLFxuICBpc1VuaW9uVHlwZU5vZGUsXG4gIFN5bWJvbEZsYWdzLFxuICBUeXBlRmxhZ3Ncbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhbiBhc3luYyBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjayB0byBhIHBhcmFtZXRlciB3aG9zZSByZXR1cm4gdHlwZSBpcyBgYW55YC9gdW5rbm93bmAsIHJpc2tpbmcgYW4gdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRCA9ICdub0FzeW5jQ2FsbGJhY2tUb1Vuc2FmZVJldHVybic7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIFR5cGVTY3JpcHQgdHlwZSBpcyBhIGZ1bmN0aW9uIHR5cGUgd2l0aCBhbiB1bnNhZmVcbiAqIHJldHVybiB0eXBlIGZvciBhc3luYyBjYWxsYmFja3MuXG4gKlxuICogQHBhcmFtIGNoZWNrZXIgLSBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEBwYXJhbSB0eXBlIC0gVGhlIHR5cGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdHlwZSBoYXMgYXQgbGVhc3Qgb25lIGNhbGwgc2lnbmF0dXJlIHdpdGggYW4gdW5zYWZlIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gaGFzVW5zYWZlUmV0dXJuQ2FsbFNpZ25hdHVyZShjaGVja2VyOiBUeXBlQ2hlY2tlciwgdHlwZTogVHlwZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZS5nZXRDYWxsU2lnbmF0dXJlcygpLnNvbWUoKHNpZykgPT4gaXNVbnNhZmVSZXR1cm5TaWduYXR1cmUoY2hlY2tlciwgc2lnKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBub2RlIGlzIGFuIGFzeW5jIGZ1bmN0aW9uIGV4cHJlc3Npb24gKGFycm93IG9yIHJlZ3VsYXIpLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gQVNUIG5vZGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYW4gYXN5bmMgYXJyb3cgb3IgZnVuY3Rpb24gZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gaXNBc3luY0Z1bmN0aW9uTm9kZShub2RlOiBUU0VTVHJlZS5Ob2RlKTogbm9kZSBpcyBUU0VTVHJlZS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiB8IFRTRVNUcmVlLkZ1bmN0aW9uRXhwcmVzc2lvbiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuXG4gIHJldHVybiAobm9kZS50eXBlID09PSAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nIHx8IG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRXhwcmVzc2lvbicpICYmIG5vZGUuYXN5bmM7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlIC0tIEJpdHdpc2UgZmxhZyBtYXNrIGlzIGlkaW9tYXRpYyBmb3IgVHlwZVNjcmlwdCBjb21waWxlciBBUEkuXG5jb25zdCBVTlNBRkVfUkVUVVJOX0ZMQUdTID0gVHlwZUZsYWdzLkFueSB8IFR5cGVGbGFncy5Vbmtub3duO1xuXG5jb25zdCBQUk9NSVNFX1RZUEVfTkFNRVMgPSBuZXcgU2V0KFsnUHJvbWlzZScsICdQcm9taXNlTGlrZSddKTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHR5cGUgbm9kZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byBgUHJvbWlzZWAgb3IgYFByb21pc2VMaWtlYCxcbiAqIGVpdGhlciBkaXJlY3RseSBvciB0aHJvdWdoIGEgdHlwZSBhbGlhcy4gVGhpcyBpbmRpY2F0ZXMgdGhlIGNhbGxlciBleHBsaWNpdGx5XG4gKiBhY2NvdW50cyBmb3IgcHJvbWlzZSByZXR1cm5zLlxuICpcbiAqIEBwYXJhbSBjaGVja2VyIC0gVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSB0eXBlIG5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSByZWZlcmVuY2VzIGBQcm9taXNlYCBvciBgUHJvbWlzZUxpa2VgLlxuICovXG5mdW5jdGlvbiBjb250YWluc1Byb21pc2VSZWZlcmVuY2UoY2hlY2tlcjogVHlwZUNoZWNrZXIsIG5vZGU6IFR5cGVOb2RlKTogYm9vbGVhbiB7XG4gIGlmIChpc1VuaW9uVHlwZU5vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlcy5zb21lKChtZW1iZXIpID0+IGNvbnRhaW5zUHJvbWlzZVJlZmVyZW5jZShjaGVja2VyLCBtZW1iZXIpKTtcbiAgfVxuXG4gIGlmIChpc1R5cGVSZWZlcmVuY2VOb2RlKG5vZGUpKSB7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFF1YWxpZmllZCBuYW1lcyAoZS5nLiwgbnMuUHJvbWlzZSkgYW5kIGltcG9ydCBhbGlhc2VzIHJlcXVpcmUgbXVsdGktZmlsZSBzZXR1cCBub3QgYXZhaWxhYmxlIGluIFJ1bGVUZXN0ZXIuICovXG4gICAgY29uc3QgbmFtZSA9IGlzSWRlbnRpZmllcihub2RlLnR5cGVOYW1lKSA/IG5vZGUudHlwZU5hbWUudGV4dCA6ICcnO1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgaWYgKFBST01JU0VfVFlQRV9OQU1FUy5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgdHlwZSBhbGlhcyAoZm9sbG93aW5nIGltcG9ydHMpIGFuZCBjaGVjayBpdHMgZGVmaW5pdGlvbiBib2R5XG4gICAgbGV0ICRzeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZS50eXBlTmFtZSk7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEltcG9ydCBhbGlhc2VzIHJlcXVpcmUgbXVsdGktZmlsZSBzZXR1cCBub3QgYXZhaWxhYmxlIGluIFJ1bGVUZXN0ZXIuICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UgLS0gQml0d2lzZSBmbGFnIGNoZWNrIGlzIGlkaW9tYXRpYyBmb3IgVHlwZVNjcmlwdCBjb21waWxlciBBUEkuXG4gICAgaWYgKCRzeW1ib2wgJiYgJHN5bWJvbC5mbGFncyAmIFN5bWJvbEZsYWdzLkFsaWFzKSB7XG4gICAgICAkc3ltYm9sID0gY2hlY2tlci5nZXRBbGlhc2VkU3ltYm9sKCRzeW1ib2wpO1xuICAgIH1cbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gJHN5bWJvbD8uZGVjbGFyYXRpb25zPy5bMF07XG4gICAgaWYgKGRlY2xhcmF0aW9uICYmIGlzVHlwZUFsaWFzRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXJlY3Vyc2lvbiAtLSBUaGlzIGZ1bmN0aW9uIHJlY3Vyc2VzIGluIHR3byBwbGFjZXM6IGhlcmUsIGZvbGxvd2luZyBhIHR5cGUgYWxpYXMsIGFuZCBhYm92ZSwgZmFubmluZyBvdXQgb3ZlciB0aGUgbWVtYmVycyBvZiBhIHVuaW9uLiBPbmx5IHRoaXMgb25lIGlzIGEgdGFpbCBjYWxsLCBzbyB0dXJuaW5nIGl0IGludG8gYSBsb29wIHdvdWxkIGxlYXZlIHRoZSBmdW5jdGlvbiBoYWxmIHJlY3Vyc2l2ZSBhbmQgaGFsZiBpdGVyYXRpdmUgb3ZlciB0aGUgc2FtZSB0cmVlLlxuICAgICAgcmV0dXJuIGNvbnRhaW5zUHJvbWlzZVJlZmVyZW5jZShjaGVja2VyLCBkZWNsYXJhdGlvbi50eXBlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBjYWxsIHNpZ25hdHVyZSBoYXMgYW4gdW5zYWZlIHJldHVybiB0eXBlIChgYW55YCBvciBgdW5rbm93bmApXG4gKiB3aXRob3V0IGV4cGxpY2l0bHkgYWNjb3VudGluZyBmb3IgcHJvbWlzZXMuXG4gKlxuICogRmxhZ3MgYmFyZSBgYW55YCwgYHVua25vd25gLCBhbmQgdW5pb25zIGxpa2UgYGFueSB8IHN0cmluZ2AgdGhhdCByZXNvbHZlIHRvXG4gKiBgYW55YC9gdW5rbm93bmAgd2l0aG91dCBpbmNsdWRpbmcgYFByb21pc2VgL2BQcm9taXNlTGlrZWAuIERvZXMgTk9UIGZsYWcgdHlwZVxuICogYWxpYXNlcyBsaWtlIGBBd2FpdGFibGU8VD5gIG9yIHVuaW9ucyBsaWtlIGBhbnkgfCBQcm9taXNlPGFueT5gIHRoYXQgZXhwbGljaXRseVxuICogaGFuZGxlIHByb21pc2UgcmV0dXJucy5cbiAqXG4gKiBAcGFyYW0gY2hlY2tlciAtIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHBhcmFtIHNpZyAtIFRoZSBjYWxsIHNpZ25hdHVyZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZXR1cm4gdHlwZSBpcyB1bnNhZmUgZm9yIGFzeW5jIGNhbGxiYWNrcy5cbiAqL1xuZnVuY3Rpb24gaXNVbnNhZmVSZXR1cm5TaWduYXR1cmUoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHNpZzogU2lnbmF0dXJlKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJldHVyblR5cGUgPSBjaGVja2VyLmdldFJldHVyblR5cGVPZlNpZ25hdHVyZShzaWcpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlIC0tIEJpdHdpc2UgZmxhZyBjaGVjayBpcyBpZGlvbWF0aWMgZm9yIFR5cGVTY3JpcHQgY29tcGlsZXIgQVBJLlxuICBpZiAoIShyZXR1cm5UeXBlLmZsYWdzICYgVU5TQUZFX1JFVFVSTl9GTEFHUykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayB0aGUgc3ludGFjdGljIHJldHVybiB0eXBlIGFubm90YXRpb24uIElmIGl0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvXG4gIC8vIFByb21pc2UvUHJvbWlzZUxpa2UgKGRpcmVjdGx5IG9yIHZpYSBhIHR5cGUgYWxpYXMpLCB0aGUgY2FsbGVyIGV4cGxpY2l0bHlcbiAgLy8gSGFuZGxlcyBhc3luYyByZXR1cm5zIGFuZCBzaG91bGQgbm90IGJlIGZsYWdnZWQuXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gc2lnLmdldERlY2xhcmF0aW9uKCk7XG4gIGNvbnN0IHJldHVyblR5cGVOb2RlID0gZGVjbGFyYXRpb24udHlwZTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUocmV0dXJuVHlwZU5vZGUsICdTaWduYXR1cmUgZGVjbGFyYXRpb25zIHdpdGggYW55L3Vua25vd24gcmV0dXJuIGFsd2F5cyBoYXZlIGEgcmV0dXJuIHR5cGUgYW5ub3RhdGlvbicpO1xuXG4gIHJldHVybiAhY29udGFpbnNQcm9taXNlUmVmZXJlbmNlKGNoZWNrZXIsIHJldHVyblR5cGVOb2RlKTtcbn1cblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBkaXNhbGxvd2luZyBhc3luYyBmdW5jdGlvbnMgcGFzc2VkIGFzIGNhbGxiYWNrcyB0byBwYXJhbWV0ZXJzIHdpdGggYW4gYGFueWAgb3IgYHVua25vd25gIHJldHVybiB0eXBlLCB3aGVyZSB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBzaWxlbnRseSBkcm9wcGVkLlxuICovXG5leHBvcnQgY29uc3Qgbm9Bc3luY0NhbGxiYWNrVG9VbnNhZmVSZXR1cm46IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IGNvbnRleHQuc291cmNlQ29kZS5wYXJzZXJTZXJ2aWNlcyBhcyBQYXJzZXJTZXJ2aWNlc1dpdGhUeXBlSW5mb3JtYXRpb247XG4gICAgY29uc3QgY2hlY2tlciA9IHNlcnZpY2VzLnByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBDYWxsRXhwcmVzc2lvbihub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2FsbE5vZGUgPSBub2RlIGFzIFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjYWxsTm9kZS5hcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgYXJndW1lbnQgPSBjYWxsTm9kZS5hcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgIGlmICghYXJndW1lbnQgfHwgIWlzQXN5bmNGdW5jdGlvbk5vZGUoYXJndW1lbnQpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0c0NhbGxlZU5vZGUgPSBzZXJ2aWNlcy5lc1RyZWVOb2RlVG9UU05vZGVNYXAuZ2V0KGNhbGxOb2RlLmNhbGxlZSk7XG4gICAgICAgICAgY29uc3QgY2FsbGVlVHlwZSA9IGNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24odHNDYWxsZWVOb2RlKTtcblxuICAgICAgICAgIGZvciAoY29uc3Qgc2lnIG9mIGNhbGxlZVR5cGUuZ2V0Q2FsbFNpZ25hdHVyZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVyID0gc2lnLmdldFBhcmFtZXRlcnMoKVtpbmRleF07XG4gICAgICAgICAgICBpZiAoIXBhcmFtZXRlcikge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IGNoZWNrZXIuZ2V0VHlwZU9mU3ltYm9sKHBhcmFtZXRlcik7XG5cbiAgICAgICAgICAgIGlmIChoYXNVbnNhZmVSZXR1cm5DYWxsU2lnbmF0dXJlKGNoZWNrZXIsIHBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSUQsXG4gICAgICAgICAgICAgICAgbm9kZTogYXJndW1lbnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0Rpc2FsbG93IHBhc3NpbmcgYXN5bmMgZnVuY3Rpb25zIGFzIGNhbGxiYWNrcyB0byBwYXJhbWV0ZXJzIHdpdGggYGFueWAgb3IgYHVua25vd25gIHJldHVybiB0eXBlJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ0FzeW5jIGZ1bmN0aW9uIHBhc3NlZCBhcyBjYWxsYmFjayB0byBhIHBhcmFtZXRlciB3aXRoIGBhbnlgL2B1bmtub3duYCByZXR1cm4gdHlwZS4gVGhpcyBtYXkgY2F1c2UgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9ucy4gV3JhcCB0aGUgY2FsbDogYCguLi5hcmdzKSA9PiB7IHlvdXJBc3luY0ZuKC4uLmFyZ3MpOyB9YC4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdwcm9ibGVtJ1xuICB9XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQ0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyx5QkFBeUI7QUFLM0IsTUFBTSxhQUFhO0FBVTFCLFNBQVMsNkJBQTZCLFNBQXNCLE1BQXFCO0FBQy9FLFNBQU8sS0FBSyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsUUFBUSx3QkFBd0IsU0FBUyxHQUFHLENBQUM7QUFDckY7QUFRQSxTQUFTLG9CQUFvQixNQUE2RjtBQUV4SCxVQUFRLEtBQUssU0FBUyw2QkFBNkIsS0FBSyxTQUFTLHlCQUF5QixLQUFLO0FBQ2pHO0FBR0EsTUFBTSxzQkFBc0IsVUFBVSxNQUFNLFVBQVU7QUFFdEQsTUFBTSxxQkFBcUIsb0JBQUksSUFBSSxDQUFDLFdBQVcsYUFBYSxDQUFDO0FBVzdELFNBQVMseUJBQXlCLFNBQXNCLE1BQXlCO0FBQy9FLE1BQUksZ0JBQWdCLElBQUksR0FBRztBQUN6QixXQUFPLEtBQUssTUFBTSxLQUFLLENBQUMsV0FBVyx5QkFBeUIsU0FBUyxNQUFNLENBQUM7QUFBQSxFQUM5RTtBQUVBLE1BQUksb0JBQW9CLElBQUksR0FBRztBQUU3QixVQUFNLE9BQU8sYUFBYSxLQUFLLFFBQVEsSUFBSSxLQUFLLFNBQVMsT0FBTztBQUVoRSxRQUFJLG1CQUFtQixJQUFJLElBQUksR0FBRztBQUNoQyxhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUksVUFBVSxRQUFRLG9CQUFvQixLQUFLLFFBQVE7QUFHdkQsUUFBSSxXQUFXLFFBQVEsUUFBUSxZQUFZLE9BQU87QUFDaEQsZ0JBQVUsUUFBUSxpQkFBaUIsT0FBTztBQUFBLElBQzVDO0FBRUEsVUFBTSxjQUFjLFNBQVMsZUFBZSxDQUFDO0FBQzdDLFFBQUksZUFBZSx1QkFBdUIsV0FBVyxHQUFHO0FBRXRELGFBQU8seUJBQXlCLFNBQVMsWUFBWSxJQUFJO0FBQUEsSUFDM0Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBZUEsU0FBUyx3QkFBd0IsU0FBc0IsS0FBeUI7QUFDOUUsUUFBTSxhQUFhLFFBQVEseUJBQXlCLEdBQUc7QUFHdkQsTUFBSSxFQUFFLFdBQVcsUUFBUSxzQkFBc0I7QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFLQSxRQUFNLGNBQWMsSUFBSSxlQUFlO0FBQ3ZDLFFBQU0saUJBQWlCLFlBQVk7QUFDbkMsb0JBQWtCLGdCQUFnQixxRkFBcUY7QUFFdkgsU0FBTyxDQUFDLHlCQUF5QixTQUFTLGNBQWM7QUFDMUQ7QUFLTyxNQUFNLGdDQUFpRDtBQUFBLEVBQzVELE9BQU8sU0FBUztBQUNkLFVBQU0sV0FBVyxRQUFRLFdBQVc7QUFDcEMsVUFBTSxVQUFVLFNBQVMsUUFBUSxlQUFlO0FBRWhELFdBQU87QUFBQSxNQUNMLGVBQWUsTUFBdUI7QUFDcEMsY0FBTSxXQUFXO0FBRWpCLGlCQUFTLFFBQVEsR0FBRyxRQUFRLFNBQVMsVUFBVSxRQUFRLFNBQVM7QUFDOUQsZ0JBQU0sV0FBVyxTQUFTLFVBQVUsS0FBSztBQUN6QyxjQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixRQUFRLEdBQUc7QUFDL0M7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sZUFBZSxTQUFTLHNCQUFzQixJQUFJLFNBQVMsTUFBTTtBQUN2RSxnQkFBTSxhQUFhLFFBQVEsa0JBQWtCLFlBQVk7QUFFekQscUJBQVcsT0FBTyxXQUFXLGtCQUFrQixHQUFHO0FBQ2hELGtCQUFNLFlBQVksSUFBSSxjQUFjLEVBQUUsS0FBSztBQUMzQyxnQkFBSSxDQUFDLFdBQVc7QUFDZDtBQUFBLFlBQ0Y7QUFFQSxrQkFBTSxnQkFBZ0IsUUFBUSxnQkFBZ0IsU0FBUztBQUV2RCxnQkFBSSw2QkFBNkIsU0FBUyxhQUFhLEdBQUc7QUFDeEQsc0JBQVEsT0FBTztBQUFBLGdCQUNiLFdBQVc7QUFBQSxnQkFDWCxNQUFNO0FBQUEsY0FDUixDQUFDO0FBQ0Q7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixDQUFDLFVBQVUsR0FBRztBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULE1BQU07QUFBQSxFQUNSO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -35,4 +35,7 @@ import type { Rule } from 'eslint';
35
35
  Message ID reported when a `*Params`/`*Options` interface member is never accessed by the function that receives it.
36
36
  */
37
37
  export declare const MESSAGE_ID = "unusedParamsMember";
38
+ /**
39
+ * ESLint rule flagging `*Params`/`*Options` interface members that the function receiving them never accesses.
40
+ */
38
41
  export declare const noUnusedParamsMembers: Rule.RuleModule;