obsidian-integration-testing 8.4.0 → 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +82 -11
  2. package/dist/lib/cjs/avd-list.cjs +36 -0
  3. package/dist/lib/cjs/avd-list.d.cts +38 -0
  4. package/dist/lib/cjs/demo-vault-populate.cjs +77 -0
  5. package/dist/lib/cjs/demo-vault-populate.d.cts +71 -0
  6. package/dist/lib/cjs/demo-vault-tree.cjs +52 -0
  7. package/dist/lib/cjs/demo-vault-tree.d.cts +34 -0
  8. package/dist/lib/cjs/enable-plugin.cjs +56 -5
  9. package/dist/lib/cjs/enable-plugin.d.cts +26 -1
  10. package/dist/lib/cjs/global-setup-core.cjs +92 -26
  11. package/dist/lib/cjs/global-setup-core.d.cts +24 -3
  12. package/dist/lib/cjs/index.cjs +10 -1
  13. package/dist/lib/cjs/index.d.cts +6 -0
  14. package/dist/lib/cjs/jest/global-setup-no-plugin.cjs +41 -0
  15. package/dist/lib/cjs/jest/global-setup-no-plugin.d.cts +26 -0
  16. package/dist/lib/cjs/jest/global-setup.cjs +7 -2
  17. package/dist/lib/cjs/jest/global-setup.d.cts +20 -3
  18. package/dist/lib/cjs/jest/global-teardown-no-plugin.cjs +26 -0
  19. package/dist/lib/cjs/jest/global-teardown-no-plugin.d.cts +11 -0
  20. package/dist/lib/cjs/library.cjs +1 -1
  21. package/dist/lib/cjs/plugin-enable-retry.cjs +53 -0
  22. package/dist/lib/cjs/plugin-enable-retry.d.cts +71 -0
  23. package/dist/lib/cjs/poll-in-obsidian.cjs +72 -0
  24. package/dist/lib/cjs/poll-in-obsidian.d.cts +92 -0
  25. package/dist/lib/cjs/poll-until.cjs +43 -0
  26. package/dist/lib/cjs/poll-until.d.cts +42 -0
  27. package/dist/lib/cjs/process-exit-message.cjs +47 -0
  28. package/dist/lib/cjs/process-exit-message.d.cts +48 -0
  29. package/dist/lib/cjs/transport-appium.cjs +51 -1
  30. package/dist/lib/cjs/transport-appium.d.cts +24 -1
  31. package/dist/lib/cjs/transport-desktop-cdp.cjs +20 -11
  32. package/dist/lib/cjs/transport-desktop-cdp.d.cts +9 -2
  33. package/dist/lib/cjs/transport-factory.cjs +122 -23
  34. package/dist/lib/cjs/transport-options.cjs +1 -1
  35. package/dist/lib/cjs/transport-options.d.cts +28 -0
  36. package/dist/lib/cjs/transport.cjs +1 -1
  37. package/dist/lib/cjs/transport.d.cts +37 -0
  38. package/dist/lib/cjs/vault-path-match.cjs +49 -0
  39. package/dist/lib/cjs/vault-path-match.d.cts +36 -0
  40. package/dist/lib/cjs/vitest/global-setup-no-plugin.cjs +37 -0
  41. package/dist/lib/cjs/vitest/global-setup-no-plugin.d.cts +26 -0
  42. package/dist/lib/cjs/vitest/global-setup.cjs +7 -2
  43. package/dist/lib/cjs/vitest/global-setup.d.cts +20 -3
  44. package/dist/lib/esm/avd-list.d.mts +38 -0
  45. package/dist/lib/esm/avd-list.mjs +11 -0
  46. package/dist/lib/esm/demo-vault-populate.d.mts +71 -0
  47. package/dist/lib/esm/demo-vault-populate.mjs +57 -0
  48. package/dist/lib/esm/demo-vault-tree.d.mts +34 -0
  49. package/dist/lib/esm/demo-vault-tree.mjs +35 -0
  50. package/dist/lib/esm/enable-plugin.d.mts +26 -1
  51. package/dist/lib/esm/enable-plugin.mjs +54 -4
  52. package/dist/lib/esm/global-setup-core.d.mts +24 -3
  53. package/dist/lib/esm/global-setup-core.mjs +101 -27
  54. package/dist/lib/esm/index.d.mts +6 -0
  55. package/dist/lib/esm/index.mjs +7 -1
  56. package/dist/lib/esm/jest/global-setup-no-plugin.d.mts +26 -0
  57. package/dist/lib/esm/jest/global-setup-no-plugin.mjs +17 -0
  58. package/dist/lib/esm/jest/global-setup.d.mts +20 -3
  59. package/dist/lib/esm/jest/global-setup.mjs +7 -2
  60. package/dist/lib/esm/jest/global-teardown-no-plugin.d.mts +11 -0
  61. package/dist/lib/esm/jest/global-teardown-no-plugin.mjs +6 -0
  62. package/dist/lib/esm/library.mjs +1 -1
  63. package/dist/lib/esm/plugin-enable-retry.d.mts +71 -0
  64. package/dist/lib/esm/plugin-enable-retry.mjs +24 -0
  65. package/dist/lib/esm/poll-in-obsidian.d.mts +92 -0
  66. package/dist/lib/esm/poll-in-obsidian.mjs +48 -0
  67. package/dist/lib/esm/poll-until.d.mts +42 -0
  68. package/dist/lib/esm/poll-until.mjs +19 -0
  69. package/dist/lib/esm/process-exit-message.d.mts +48 -0
  70. package/dist/lib/esm/process-exit-message.mjs +23 -0
  71. package/dist/lib/esm/transport-appium.d.mts +24 -1
  72. package/dist/lib/esm/transport-appium.mjs +51 -1
  73. package/dist/lib/esm/transport-desktop-cdp.d.mts +9 -2
  74. package/dist/lib/esm/transport-desktop-cdp.mjs +20 -11
  75. package/dist/lib/esm/transport-factory.mjs +125 -23
  76. package/dist/lib/esm/transport-options.d.mts +28 -0
  77. package/dist/lib/esm/transport.d.mts +37 -0
  78. package/dist/lib/esm/vault-path-match.d.mts +36 -0
  79. package/dist/lib/esm/vault-path-match.mjs +14 -0
  80. package/dist/lib/esm/vitest/global-setup-no-plugin.d.mts +26 -0
  81. package/dist/lib/esm/vitest/global-setup-no-plugin.mjs +11 -0
  82. package/dist/lib/esm/vitest/global-setup.d.mts +20 -3
  83. package/dist/lib/esm/vitest/global-setup.mjs +7 -2
  84. package/dist/obsidian-integration-testing-9.1.0.tgz +0 -0
  85. package/package.json +38 -8
  86. package/dist/obsidian-integration-testing-8.4.0.tgz +0 -0
@@ -14,4 +14,4 @@ var __copyProps = (to, from, except, desc) => {
14
14
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
15
  var transport_options_exports = {};
16
16
  module.exports = __toCommonJS(transport_options_exports);
17
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1vcHRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiB0eXBlcyBmb3IgY29uZmlndXJpbmcgdGhlIE9ic2lkaWFuIHRyYW5zcG9ydFxuICogdmlhIHZpdGVzdCBgZW52aXJvbm1lbnRPcHRpb25zYC5cbiAqL1xuXG4vKipcbiAqIFRyYW5zcG9ydCBvcHRpb25zIGZvciBBbmRyb2lkIHRlc3RpbmcgdmlhIEFwcGl1bSBXZWJWaWV3IGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFwcCBwYWNrYWdlIChBbmRyb2lkKSBvciBidW5kbGUgSUQgKGlPUykuXG4gICAqIERlZmF1bHRzIHRvIGAnbWQub2JzaWRpYW4nYFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgYXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgdG8gYmVjb21lIHJlYWR5XG4gICAqIChpdHMgYC9zdGF0dXNgIGVuZHBvaW50IHRvIHJlc3BvbmQpLlxuICAgKlxuICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgaGFybmVzcyBhdXRvLXN0YXJ0cyB0aGUgQXBwaXVtIHNlcnZlclxuICAgKiAoe0BsaW5rIHNob3VsZEF1dG9TdGFydEFwcGl1bX0pOyBpZ25vcmVkIHdoZW4gYXR0YWNoaW5nIHRvIGFuXG4gICAqIGFscmVhZHktcnVubmluZyBzZXJ2ZXIuIE9uIGEgY29sZCBtYWNoaW5lIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIGNhbiB0YWtlXG4gICAqIGEgd2hpbGUgdG8gZmluaXNoIGJvb3RpbmcsIHNvIHJhaXNlIHRoaXMgaWYgc3RhcnR1cCB0aW1lcyBvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxODAwMDBgXG4gICAqL1xuICByZWFkb25seSBhcHBpdW1TdGFydFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIEFwcGl1bSBzZXJ2ZXIgVVJMIChlLmcuIGAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJ2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwaXVtVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbmRyb2lkIEFWRCAoQW5kcm9pZCBWaXJ0dWFsIERldmljZSkgbmFtZS5cbiAgICpcbiAgICogVGhlIHRyYW5zcG9ydCBmYWN0b3J5IGxhdW5jaGVzIGBlbXVsYXRvciAtYXZkIDxhdmROYW1lPmAgYXMgYSBiYWNrZ3JvdW5kXG4gICAqIHByb2Nlc3MgYW5kIHBvbGxzIHVudGlsIHRoZSBkZXZpY2UgYXBwZWFycy4gVGhlIGVtdWxhdG9yIGlzIGtpbGxlZFxuICAgKiBvbiB0cmFuc3BvcnQgZGlzcG9zYWwuXG4gICAqXG4gICAqIFJ1biBgZW11bGF0b3IgLWxpc3QtYXZkc2AgdG8gc2VlIGF2YWlsYWJsZSBBVkQgbmFtZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgVURJRCB0byByZXVzZSAoZS5nLiBgJ2VtdWxhdG9yLTU1NTQnYCkuXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYWZ0ZXIgdGhlIEFwcGl1bSBzZXNzaW9uIGlzXG4gICAqIGVzdGFibGlzaGVkLiBXaGVuIHByZXNlbnQgYWxvbmdzaWRlIHtAbGluayBzZXNzaW9uSWR9LCB0aGUgdHJhbnNwb3J0XG4gICAqIGZhY3Rvcnkgc2tpcHMgZW11bGF0b3Igc3RhcnR1cCBhbmQgYXR0YWNoZXMgdG8gdGhlIGV4aXN0aW5nIHNlc3Npb24uXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHdhaXRpbmcsIGFmdGVyIGBzeXMuYm9vdF9jb21wbGV0ZWRgLCBmb3IgYVxuICAgKiBoYXJuZXNzLXN0YXJ0ZWQgZW11bGF0b3IgdG8gYmVjb21lIGlkbGUgYmVmb3JlIHRoZSBBcHBpdW0gc2Vzc2lvbiBpc1xuICAgKiBlc3RhYmxpc2hlZC5cbiAgICpcbiAgICogYHN5cy5ib290X2NvbXBsZXRlZGAgZmlyZXMgKmJlZm9yZSogdGhlIGd1ZXN0IGlzIGFjdHVhbGx5IGlkbGU6IHBhY2thZ2VcbiAgICogb3B0aW1pemF0aW9uIGFuZCBzeXN0ZW0gc2VydmljZXMga2VlcCBjaHVybmluZywgc28gZXN0YWJsaXNoaW5nIHRoZSBzZXNzaW9uXG4gICAqIGltbWVkaWF0ZWx5IG1ha2VzIGV2ZXJ5IG9uZSBvZiBVaUF1dG9tYXRvcjIncyBzZXJpYWxpemVkIGBhZGJgIHJvdW5kLXRyaXBzXG4gICAqIGNvbnRlbmQgd2l0aCB0aGF0IHdvcmsgYW5kIGluZmxhdGVzIHNlc3Npb24gZXN0YWJsaXNobWVudCB+M3guIFRoZSBmYWN0b3J5XG4gICAqIGluc3RlYWQgd2FpdHMgdW50aWwgdGhlIGJvb3QgYW5pbWF0aW9uIGhhcyBzdG9wcGVkIGFuZCB0aGUgcGFja2FnZSBtYW5hZ2VyXG4gICAqIGlzIHNlcnZpbmcsIHByb2NlZWRpbmcgZWFybHkgb25jZSBpZGxlIG9yIGFmdGVyIHRoaXMgYnVkZ2V0IChiZXN0LWVmZm9ydCBcdTIwMTQgYVxuICAgKiB0aW1lb3V0IGxvZ3MgYSB3YXJuaW5nIGFuZCBwcm9jZWVkcykuIFNldCBgMGAgdG8gc2tpcCB0aGUgd2FpdC4gT25seSBhcHBsaWVzXG4gICAqIHRvIGEgaGFybmVzcy1zdGFydGVkIGVtdWxhdG9yLCBub3QgYSByZXVzZWQgb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZGxlVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBjb25zb2xlIHdpbmRvdyBpcyBzaG93bi5cbiAgICpcbiAgICogV2hlbiBgZmFsc2VgICh0aGUgZGVmYXVsdCksIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIHByb2Nlc3MgaXMgc3Bhd25lZCB3aXRoXG4gICAqIGl0cyBjb25zb2xlIHdpbmRvdyBoaWRkZW4gKGB3aW5kb3dzSGlkZWApIGFuZCBpdHMgb3V0cHV0IGRpc2NhcmRlZCwgc28gaXRcbiAgICogbmVpdGhlciBzdGVhbHMgZm9jdXMgbm9yIHdyaXRlcyB0byB0aGUgaW52b2tpbmcgdGVybWluYWwuIElnbm9yZWQgd2hlblxuICAgKiBhdHRhY2hpbmcgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIEFwcGl1bSBzZXJ2ZXIgKHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19XG4gICAqIGBmYWxzZWAsIG9yIHRoZSBzZXJ2ZXIgYWxyZWFkeSByZWFjaGFibGUpLiBTZXQgYHRydWVgIHRvIHNlZSB0aGUgc2VydmVyIGxvZyB3aW5kb3dcbiAgICogYW5kIGl0cyBsaXZlIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNBcHBpdW1Db25zb2xlVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGF1dG8tc3RhcnRlZCBBbmRyb2lkIGVtdWxhdG9yIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCAodGhlIGRlZmF1bHQpLCB0aGUgZW11bGF0b3IgaXMgc3RhcnRlZCB3aXRoIGAtbm8td2luZG93YFxuICAgKiAoaGVhZGxlc3MpLCBzbyBpdCBuZXZlciBzdGVhbHMgZm9jdXMuIElnbm9yZWQgd2hlbiByZXVzaW5nIGFuIGFscmVhZHktcnVubmluZ1xuICAgKiBkZXZpY2UgKG5vdGhpbmcgaXMgbGF1bmNoZWQgdG8gaGlkZSkuIFNldCBgdHJ1ZWAgdG8gd2F0Y2ggdGhlIGVtdWxhdG9yIFVJLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0VtdWxhdG9yVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciBgYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeWAgYWZ0ZXJcbiAgICogdGhlIHZhdWx0IGlzIChyZSlvcGVuZWQuXG4gICAqXG4gICAqIFJlZ2lzdGVyaW5nIGEgdmF1bHQgdHJpZ2dlcnMgYSBmdWxsIE9ic2lkaWFuIHJlLWluaXQgKGBsb2NhdGlvbi5yZWxvYWQoKWBcbiAgICogcmVvcGVucyB0aGUgdmF1bHQgYW5kIHJlbG9hZHMgZXZlcnkgcGx1Z2luIFx1MjAxNCB0aGUgaGVhdmllc3Qgc3RhcnR1cCBzdGVwKS4gT25cbiAgICogYSBjb2xkLWJvb3RlZCBvciB1bmRlci1wcm92aXNpb25lZCBlbXVsYXRvciB0aGF0IGluaXQgY2FuIHRha2UgYSB3aGlsZSwgc29cbiAgICogdGhpcyBidWRnZXQgaXMgdGhlIGxhcmdlc3Qgb2YgdGhlIHRyYW5zcG9ydCB0aW1lb3V0cy4gUmFpc2UgaXQgZnVydGhlciBpZlxuICAgKiByZWxlYXNlcyBzdGlsbCBmbGFrZSBvbiBzbG93IENJIGVtdWxhdG9ycy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDkwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbGF5b3V0UmVhZHlUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBlc3RhYmxpc2hpbmcgdGhlIEFwcGl1bSBzZXNzaW9uIChXZWJEcml2ZXJJT1xuICAgKiBgcmVtb3RlKClgIFx1MjAxNCBVaUF1dG9tYXRvcjIgc2VydmVyIGluc3RhbGwgKyBhcHAgbGF1bmNoKS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbGFyZ2VzdCBhbmQgbW9zdCBsb2FkLXNlbnNpdGl2ZSBzdGVwIG9mIHRoZSBBbmRyb2lkIHNldHVwOlxuICAgKiBvbiBhIGNvbGQgb3IgY29udGVuZGVkIGVtdWxhdG9yIGl0IGRvbWluYXRlcyBzdGFydHVwIGFuZCBjYW4gdGFrZSBhIGZld1xuICAgKiBtaW51dGVzLiBSYWlzZSBpdCBpZiBzZXNzaW9uIGVzdGFibGlzaG1lbnQgdGltZXMgb3V0IHVuZGVyIGxvYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxODAwMDBgXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29ubmVjdGlvblJldHJ5VGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbiBleGlzdGluZyBBcHBpdW0gc2Vzc2lvbiBJRCB0byByZWF0dGFjaCB0by5cbiAgICpcbiAgICogUG9wdWxhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGdsb2JhbCBzZXR1cCBhbmQgcHJvdmlkZWQgdG8gdGVzdCB3b3JrZXJzXG4gICAqIHZpYSB0aGUgZnJhbWV3b3JrJ3MgY29udGV4dCBtZWNoYW5pc20gKGUuZy4gVml0ZXN0IGBwcm92aWRlYC9gaW5qZWN0YCkuXG4gICAqIFdoZW4gcHJlc2VudCwgdGhlIHRyYW5zcG9ydCBmYWN0b3J5IHVzZXMgV2ViRHJpdmVySU8ncyBgYXR0YWNoKClgIGluc3RlYWRcbiAgICogb2YgY3JlYXRpbmcgYSBuZXcgc2Vzc2lvbiwgYXZvaWRpbmcgZHVwbGljYXRlIEFwcGl1bS9BREIgY29ubmVjdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIG1pc3NpbmcgQXBwaXVtIGRlcGVuZGVuY2llcyAodGhlXG4gICAqIGB1aWF1dG9tYXRvcjJgIGRyaXZlciwgYW5kIEFwcGl1bSBpdHNlbGYpIGJlZm9yZSBhdXRvLXN0YXJ0aW5nIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCkgYW5kIHRoZSBoYXJuZXNzIGlzIGFib3V0IHRvIGF1dG8tc3RhcnQgdGhlIEFwcGl1bVxuICAgKiBzZXJ2ZXIgKHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19KSwgdGhlIGZhY3RvcnkgZmlyc3QgZW5zdXJlcyBBcHBpdW0gaXNcbiAgICogaW5zdGFsbGVkIChnbG9iYWxseSwgdmlhIGBucG0gaW5zdGFsbCAtZyBhcHBpdW1gKSBhbmQgdGhhdCB0aGVcbiAgICogYHVpYXV0b21hdG9yMmAgZHJpdmVyIGlzIGluc3RhbGxlZCAoYGFwcGl1bSBkcml2ZXIgaW5zdGFsbCB1aWF1dG9tYXRvcjJgKSxcbiAgICogaW5zdGFsbGluZyB3aGljaGV2ZXIgaXMgbWlzc2luZy4gSWdub3JlZCB3aGVuIGF0dGFjaGluZyB0byBhblxuICAgKiBhbHJlYWR5LXJ1bm5pbmcgc2VydmVyIChub3RoaW5nIGlzIGF1dG8tc3RhcnRlZCwgc28gbm90aGluZyBpcyBpbnN0YWxsZWQpIG9yXG4gICAqIHdoZW4ge0BsaW5rIHNob3VsZEF1dG9TdGFydEFwcGl1bX0gaXMgYGZhbHNlYC4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gbWFuYWdlXG4gICAqIHRoZSBBcHBpdW0gdG9vbGNoYWluIHlvdXJzZWxmIGFuZCBza2lwIHRoZSBtYWNoaW5lLW11dGF0aW5nIGdsb2JhbCBpbnN0YWxsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEF1dG9JbnN0YWxsQXBwaXVtRGVwZW5kZW5jaWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRoZSBBcHBpdW0gc2VydmVyIGlmIGl0IGlzIG5vdCByZWFjaGFibGUuXG4gICAqXG4gICAqIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIHRoZSB0cmFuc3BvcnQgZmFjdG9yeSBzcGF3bnMgYG5weCBhcHBpdW1gXG4gICAqIGFzIGEgYmFja2dyb3VuZCBwcm9jZXNzIHdoZW4gdGhlIHByZWZsaWdodCBjaGVjayBmYWlscywgYW5kIGtpbGxzIGl0XG4gICAqIG9uIHRyYW5zcG9ydCBkaXNwb3NhbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRBdXRvU3RhcnRBcHBpdW0/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXNjcmltaW5hbnQgZm9yIHRoZSB0cmFuc3BvcnQgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdvYnNpZGlhbi1hbmRyb2lkLWFwcGl1bSc7XG5cbiAgLyoqXG4gICAqIEJhc2UgcGF0aCBvbiB0aGUgZGV2aWNlIHdoZXJlIE9ic2lkaWFuIHN0b3JlcyB2YXVsdHMuXG4gICAqXG4gICAqIERlZmF1bHRzOlxuICAgKiAtIEFuZHJvaWQ6IGAvc2RjYXJkL0RvY3VtZW50cy9gXG4gICAqIC0gaU9TOiBgQG1kLm9ic2lkaWFuOmRvY3VtZW50cy9gXG4gICAqL1xuICByZWFkb25seSB2YXVsdEJhc2VQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3Igd2FpdGluZyBmb3IgdGhlIFdlYlZpZXcgY29udGV4dCB0byBiZWNvbWUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBPbiBzbG93IGVtdWxhdG9ycywgdGhlIENocm9tZURyaXZlciBwcm94eSB0aGF0IGhhbmRsZXMgV2ViVmlldyBjb21tYW5kc1xuICAgKiBtYXkgbm90IGJlIHJlYWR5IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBBcHBpdW0gc2Vzc2lvbiBzdGFydHMuIFRoaXMgdGltZW91dFxuICAgKiBjb250cm9scyBob3cgbG9uZyB0byBwb2xsIGJlZm9yZSBnaXZpbmcgdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA2MDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IHdlYnZpZXdUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVHJhbnNwb3J0IG9wdGlvbnMgZm9yIGRlc2t0b3AgdGVzdGluZyB2aWEgQ2hyb21lIERldlRvb2xzIFByb3RvY29sLlxuICpcbiAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgZGVza3RvcCB0cmFuc3BvcnQuIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgKipsYXVuY2hlcyBhbmRcbiAqIG93bnMgYW4gaXNvbGF0ZWQgT2JzaWRpYW4gaW5zdGFuY2UqKiBpbiBhIHRlbXBvcmFyeSB1c2VyLWRhdGEgZGlyIChuZXZlclxuICogdG91Y2hpbmcgdGhlIHVzZXIncyBPYnNpZGlhbiksIGNvbm5lY3RlZCBvdmVyIGEgZnJlZSBDRFAgcG9ydC4gUHJvdmlkZVxuICoge0BsaW5rIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucy5wb3J0fSB0byBpbnN0ZWFkIGF0dGFjaCB0byBhblxuICogYWxyZWFkeS1ydW5uaW5nIE9ic2lkaWFuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgaW5kaXZpZHVhbCBDRFAgY29tbWFuZHMuXG4gICAqIERlZmF1bHRzIHRvIDMwMDAwXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHcmFjZSB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGZvciBmYXN0LWZhaWxpbmcgYSAqKmRlYWQgYm9vdCoqIG9mIHRoZSBvd25lZFxuICAgKiBpbnN0YW5jZS5cbiAgICpcbiAgICogV2hlbiBhbiBhc2FyIGNhbm5vdCBydW4gb24gdGhlIGxhdW5jaGVkIEVsZWN0cm9uIHNoZWxsICh0aGUgaW5zdGFsbGVyXG4gICAqIHZlcnNpb24gaXMgdG9vIG9sZCBmb3IgdGhlIGFwcCB2ZXJzaW9uKSwgdGhlIHJlbmRlcmVyIGxvYWRzIGJ1dCBuZXZlclxuICAgKiBib290c3RyYXBzOiBgZG9jdW1lbnQuYm9keWAgc3RheXMgZW1wdHkgYW5kIGB3aW5kb3cuYXBwYCByZW1haW5zXG4gICAqIGB1bmRlZmluZWRgIFx1MjAxNCBhIGJsYWNrIHNjcmVlbi4gUmF0aGVyIHRoYW4gd2FpdGluZyBvdXQgdGhlIGZ1bGwgcmVhZGluZXNzXG4gICAqIHRpbWVvdXQsIHRoZSBvd25lZC12YXVsdCByZWFkaW5lc3MgcG9sbCBjb25jbHVkZXMgdGhlIGJvb3QgaXMgZGVhZCBvbmNlIHRoZVxuICAgKiByZW5kZXJlciBoYXMgYmVlbiBgZG9jdW1lbnQucmVhZHlTdGF0ZWAgYCdjb21wbGV0ZSdgIGZvciB0aGlzIGxvbmcgd2l0aCBub1xuICAgKiBgd2luZG93LmFwcGAgYW5kIGFuIGVtcHR5IGA8Ym9keT5gLCBhbmQgdGhyb3dzIGFcbiAgICogYFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3JgLiBPbmx5IGFwcGxpZXMgdG8gYW4gb3duZWQgaW5zdGFuY2VcbiAgICogKGlnbm9yZWQgaW4gYXR0YWNoIG1vZGUsIHtAbGluayBwb3J0fSBzZXQpLiBTZXQgYDBgIHRvIGRpc2FibGUgZmFzdC1mYWlsIGFuZFxuICAgKiByZXN0b3JlIHRoZSBwbGFpbiB3YWl0LW91dC10aGUtcmVhZGluZXNzLXRpbWVvdXQgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ0RQIGhvc3QuXG4gICAqIERlZmF1bHRzIHRvIGAnbG9jYWxob3N0J2BcbiAgICovXG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hcmtzIHtAbGluayBwb3J0fSBhcyB0aGUgQ0RQIHBvcnQgb2YgYSAqKmhhcm5lc3Mtb3duZWQsIGlzb2xhdGVkIGluc3RhbmNlKipcbiAgICogdGhhdCB0aGUgZ2xvYmFsIHNldHVwIGFscmVhZHkgbGF1bmNoZWQgYW5kIHByZXBhcmVkICh2YXVsdCByZWdpc3RlcmVkLFxuICAgKiBwbHVnaW4gZW5hYmxlZCkuXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYW5kIHByb3ZpZGVkIHRvIHRlc3Qgd29ya2VycyB2aWFcbiAgICogdGhlIGZyYW1ld29yaydzIGNvbnRleHQgbWVjaGFuaXNtIChlLmcuIFZpdGVzdCBgcHJvdmlkZWAvYGluamVjdGApLiBXaGVuIHNldCxcbiAgICogdGhlIHdvcmtlciAqKmF0dGFjaGVzKiogdG8gdGhlIG93bmVkIGluc3RhbmNlIG9uIHtAbGluayBwb3J0fSBpbnN0ZWFkIG9mXG4gICAqIGxhdW5jaGluZyBpdHMgb3duLCBhbmQgc2tpcHMgdGhlIHVzZXItc2NvcGUgdmF1bHQtcmVnaXN0cmF0aW9uIHByZWZsaWdodCBcdTIwMTRcbiAgICogdGhlIG93bmVkIGluc3RhbmNlJ3MgdmF1bHQgbGl2ZXMgaW4gYW4gaXNvbGF0ZWQgdXNlci1kYXRhIGNvbmZpZywgbm90IHRoZVxuICAgKiB1c2VyLXNjb3BlIHJlZ2lzdHJ5LiBEbyBub3Qgc2V0IHRoaXMgbWFudWFsbHk7IGZvciBwbGFpbiBhdHRhY2ggbW9kZSB1c2VcbiAgICoge0BsaW5rIHBvcnR9IGFsb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNIYXJuZXNzT3duZWRJbnN0YW5jZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG93bmVkIGRlc2t0b3AgT2JzaWRpYW4gd2luZG93IGlzIHNob3duIG9uIHNjcmVlbi5cbiAgICpcbiAgICogV2hlbiBgZmFsc2VgLCB0aGUgaGFybmVzcyBsYXVuY2hlcyB0aGUgb3duZWQgaW5zdGFuY2Ugd2l0aFxuICAgKiBrZWVwLWFsaXZlIENocm9taXVtIGZsYWdzIGFuZCBtb3ZlcyBpdHMgd2luZG93ICoqb2ZmLXNjcmVlbioqIG9uY2UgRWxlY3Ryb24nc1xuICAgKiByZW1vdGUgYnJpZGdlIGlzIGF2YWlsYWJsZSwgc28gdGhlIHJ1biBuZXZlciBzdGVhbHMgZm9jdXMgb3IgcG9wcyBhIHdpbmRvdyBpblxuICAgKiBmcm9udCBvZiB5b3UuIE9mZi1zY3JlZW4gKG5vdCBtaW5pbWl6ZWQpIGtlZXBzIHRoZSByZW5kZXJlciBsaXZlLCBzb1xuICAgKiBgc2V0VGltZW91dGAsIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLCBgOmhvdmVyYCwgYW5kIHRydXN0ZWQgaW5wdXQgYmVoYXZlXG4gICAqIGlkZW50aWNhbGx5IHRvIGEgdmlzaWJsZSB3aW5kb3cuIERlZmF1bHRzIHRvIGB0cnVlYDsgaW50ZWdyYXRpb24gc2V0dXBcbiAgICogZXhwbGljaXRseSBwYXNzZXMgYGZhbHNlYCB0byBhdm9pZCBzdGVhbGluZyBmb2N1cy4gSWdub3JlZCBpbiBhdHRhY2ggbW9kZVxuICAgKiAoe0BsaW5rIHBvcnR9IHNldCkgXHUyMDE0IHRoZSBoYXJuZXNzIG5ldmVyXG4gICAqIG1vdmVzIHRoZSB1c2VyJ3Mgb3duIHJ1bm5pbmcgd2luZG93LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzT2JzaWRpYW5BcHBWaXNpYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipFbGVjdHJvbiBzaGVsbCoqIChpbnN0YWxsZXIgYnVpbGQpIHRoZSBvd25lZCBpbnN0YW5jZSBydW5zLlxuICAgKlxuICAgKiBBY2NlcHRzIGFuIGV4cGxpY2l0IGAneC55LnonYCwgYCdwdWJsaWMtbGF0ZXN0J2AsIG9yIGAnY2F0YWx5c3QtbGF0ZXN0J2AuXG4gICAqIFRoZSBtYXRjaGluZyBHaXRIdWIgcmVsZWFzZSBpbnN0YWxsZXIgaXMgZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkIHRvIGFcbiAgICogcG9ydGFibGUgc2hlbGwgKGNhY2hlZCBmb3IgcmV1c2UpLiBQdWJsaWMgcmVsZWFzZXMgb25seSBcdTIwMTQgY2F0YWx5c3QgYnVpbGRzXG4gICAqIGhhdmUgbm8gcHVibGljIGluc3RhbGxlci4gSWdub3JlZCB3aGVuIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipPYnNpZGlhbiBhcHAgdmVyc2lvbioqIChhc2FyKSB0aGUgb3duZWQgaW5zdGFuY2UgcnVucy5cbiAgICpcbiAgICogQWNjZXB0cyBhbiBleHBsaWNpdCBgJ3gueS56J2AsIGAncHVibGljLWxhdGVzdCdgLCBvciBgJ2NhdGFseXN0LWxhdGVzdCdgLlxuICAgKiBWZXJzaW9ucyBhdCBvciBhYm92ZSB0aGUgc2hlbGwgdmVyc2lvbiBhcmUgYXBwbGllZCBhcyBhIGNoZWFwIGFzYXIgc3dhcDtcbiAgICogb2xkZXIgdmVyc2lvbnMgdHJhbnNwYXJlbnRseSB1c2UgdGhlIG1hdGNoaW5nIGluc3RhbGxlciBzaGVsbC4gV2hlbiBvbWl0dGVkLFxuICAgKiB0aGUgdXNlcidzIGN1cnJlbnRseS1pbnN0YWxsZWQgdmVyc2lvbiBpcyB1c2VkLiBJZ25vcmVkIHdoZW4ge0BsaW5rIHBvcnR9XG4gICAqIChhdHRhY2ggbW9kZSkgaXMgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDRFAgcG9ydCBvZiBhbiBhbHJlYWR5LXJ1bm5pbmcgT2JzaWRpYW4gdG8gKiphdHRhY2gqKiB0byAodGhlXG4gICAqIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydGAgaXQgd2FzIGxhdW5jaGVkIHdpdGgpLiBXaGVuIHNldCwgdGhlIGhhcm5lc3NcbiAgICogYXR0YWNoZXMgaW5zdGVhZCBvZiBvd25pbmcgYW4gaW5zdGFuY2UsIGFuZCB0aGUgdmVyc2lvbiBrbm9icyBhcmUgaWdub3JlZC5cbiAgICogV2hlbiBvbWl0dGVkLCBhbiBvd25lZCBpc29sYXRlZCBpbnN0YW5jZSBpcyBsYXVuY2hlZCBvbiBhbiBhdXRvbWF0aWNhbGx5XG4gICAqIGNob3NlbiBmcmVlIHBvcnQgKG5vIHBvcnQgaXMgaGFyZGNvZGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbGF1bmNoIHRoZSBvd25lZCBpbnN0YW5jZSB3aXRoIENocm9taXVtJ3Mgc2FuZGJveCBkaXNhYmxlZFxuICAgKiAoYC0tbm8tc2FuZGJveGApLlxuICAgKlxuICAgKiBOZWVkZWQgdG8gYm9vdCBhbiBvd25lZCBpbnN0YW5jZSBvbiBMaW51eCB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIGNvcnJlY3RseS1jb25maWd1cmVkIHNldHVpZCBgY2hyb21lLXNhbmRib3hgIGhlbHBlciBcdTIwMTQgZS5nLiBhIHBvcnRhYmxlIHNoZWxsXG4gICAqIGV4dHJhY3RlZCBmcm9tIGFuIGluc3RhbGxlciwgb3IgYSBDSSBydW5uZXIgbGF1bmNoaW5nIGFzIGEgbm9uLXJvb3QgdXNlciwgaW5cbiAgICogd2hpY2ggY2FzZSB0aGUgcmVuZGVyZXIgb3RoZXJ3aXNlIHJlZnVzZXMgdG8gc3RhcnQuIEhhcm1sZXNzIG9uXG4gICAqIFdpbmRvd3MvbWFjT1MuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpIFx1MjAxNCB0aGUgaGFybmVzcyBuZXZlclxuICAgKiByZWxhdW5jaGVzIHRoZSB1c2VyJ3MgcnVubmluZyBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGlzYWJsZVNhbmRib3g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGFuICoqdW5ydW5uYWJsZSoqIGluc3RhbGxlclx1MjE5NGFwcCB2ZXJzaW9uIHBhaXIgZmFpbHMgZmFzdCBiZWZvcmUgbGF1bmNoLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBhbiBpbnN0YWxsZXIgYmVsb3cgdGhlIGFwcCdzIHJ1biBmbG9vciAodGhlXG4gICAqIG9sZGVzdCBpbnN0YWxsZXIgdGhlIGFwcCdzIGFzYXIgY2FuIGJvb3Qgb24pIHRocm93c1xuICAgKiBgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yYCBmcm9tIHZlcnNpb24gcmVzb2x1dGlvbiwgYmVmb3JlIGFueXRoaW5nXG4gICAqIGlzIGRvd25sb2FkZWQgb3IgbGF1bmNoZWQuIFNldCBgZmFsc2VgIHRvIGxldCB0aGUgcGluIHByb2NlZWQgdG8gbGF1bmNoXG4gICAqIGluc3RlYWQgXHUyMDE0IHdoZXJlIHRoZSByZWFjdGl2ZSBkZWFkLWJvb3QgZmFzdC1mYWlsXG4gICAqIChgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvcmAsIHNlZSB7QGxpbmsgZGVhZEJvb3RHcmFjZUluTWlsbGlzZWNvbmRzfSlcbiAgICogc3RpbGwgY2F0Y2hlcyB0aGUgYmxhY2stc2NyZWVuIGJvb3QsIGFuZCB0aGUgYCd1bnJ1bm5hYmxlJ2AgdmVyZGljdCBpc1xuICAgKiBzdXJmYWNlZCBhcyBkYXRhIHJhdGhlciB0aGFuIHRocm93bi4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkIGluc3RhbmNlXG4gICAqIChpZ25vcmVkIGluIGF0dGFjaCBtb2RlLCB7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhICoqc2lsZW50IGFzYXIgZmFsbGJhY2sqKiBmYWlscyBmYXN0IGFmdGVyIGJvb3QuXG4gICAqXG4gICAqIFdoZW4gYW4gYXNhciBpcyBzd2FwcGVkIG9udG8gYW4gaW5zdGFsbGVyIHNoZWxsIHRvbyBvbGQgZm9yIGl0LCB0aGUgaW5zdGFuY2VcbiAgICogbWF5IG5vdCBkZWFkLWJvb3QgXHUyMDE0IGl0IGNhbiBzaWxlbnRseSByZXZlcnQgdG8gdGhlIGluc3RhbGxlcidzIG93biBidW5kbGVkXG4gICAqIGFzYXIgYW5kIHJ1biB0aGUgKip3cm9uZyAob2xkZXIpKiogdmVyc2lvbiBiZWhpbmQgYSBoZWFsdGh5IFVJLiBXaGVuIGB0cnVlYFxuICAgKiAodGhlIGRlZmF1bHQpLCB0aGUgdHJhbnNwb3J0IHZlcmlmaWVzIHRoZSBydW5uaW5nIGFwcCB2ZXJzaW9uIGFnYWluc3QgdGhlIHBpblxuICAgKiBwb3N0LWJvb3QgYW5kIHRocm93cyBgU2lsZW50QXNhckZhbGxiYWNrRXJyb3JgIG9uIGEgbWlzbWF0Y2guIFNldCBgZmFsc2VgIHRvXG4gICAqIGxldCB0aGUgYm9vdCBwcm9jZWVkIFx1MjAxNCB0aGUgbWlzbWF0Y2ggaXMgdGhlbiBzdXJmYWNlZCBhcyBkYXRhICh0aGUgZmFsbGJhY2tcbiAgICogdmVyZGljdCkgcmF0aGVyIHRoYW4gdGhyb3duLiBPbmx5IGFwcGxpZXMgdG8gYW4gb3duZWQgaW5zdGFuY2UgcnVubmluZyBhXG4gICAqIHN3YXBwZWQtaW4gYXNhciAoaWdub3JlZCBpbiBhdHRhY2ggbW9kZSwge0BsaW5rIHBvcnR9IHNldCwgYW5kIHdoZW4gbm8gYXNhciBpc1xuICAgKiBzd2FwcGVkIFx1MjAxNCB0aGVyZSBpcyBub3RoaW5nIHRvIHZlcmlmeSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG93bmVkLWluc3RhbmNlIGNvbXBhdGliaWxpdHkgKipuYWcgd2FybmluZ3MqKiBhcmUgZW1pdHRlZC5cbiAgICpcbiAgICogQ292ZXJzICoqYm90aCoqIGNvbXBhdGliaWxpdHkgbmFnczogdGhlIG9mZmxpbmUgaW5zdGFsbGVyXHUyMTk0YXBwIHdhcm5pbmcgKGFcbiAgICogcnVubmFibGUgaW5zdGFsbGVyIGJlbG93IHRoZSByZWNvbW1lbmRlZCBmbG9vcikgYW5kIHRoZSBwb3N0LWJvb3RcbiAgICogcnVudGltZS1FbGVjdHJvbiB3YXJuaW5nIChhIGxpdmUgRWxlY3Ryb24gYmVsb3cgdGhlIGFwcCdzIHJlY29tbWVuZGVkXG4gICAqIG1pbmltdW0pLiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpIGVhY2ggZmlyZXMgdmlhIHRoZSBoYXJuZXNzIGxvZzsgc2V0XG4gICAqIGBmYWxzZWAgdG8gc2lsZW5jZSBib3RoIFx1MjAxNCB0aGUgdmVyZGljdHMgYXJlIHN0aWxsIGNvbXB1dGVkIGFuZCBzdXJmYWNlZCBhc1xuICAgKiBkYXRhIChgY29tcGF0aWJpbGl0eWAgLyBgZWxlY3Ryb25Db21wYXRpYmlsaXR5YCksIG9ubHkgdGhlIGxvZyBpcyBzdXBwcmVzc2VkLlxuICAgKiBEb2VzIG5vdCBhZmZlY3QgdGhlIGAndW5ydW5uYWJsZSdgIHRocm93IChzZWVcbiAgICoge0BsaW5rIHNob3VsZFRocm93T25JbmNvbXBhdGlibGVJbnN0YWxsZXJ9KS4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkXG4gICAqIGluc3RhbmNlIChpZ25vcmVkIGluIGF0dGFjaCBtb2RlLCB7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzY3JpbWluYW50IGZvciB0aGUgdHJhbnNwb3J0IHR5cGUuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnb2JzaWRpYW4tY2RwJztcbn1cblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIHVuaW9uIG9mIGFsbCBzdXBwb3J0ZWQgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFVzZWQgaW4gdml0ZXN0IGBlbnZpcm9ubWVudE9wdGlvbnMub2JzaWRpYW5UcmFuc3BvcnRgIHRvIHNlbGVjdCBhbmRcbiAqIGNvbmZpZ3VyZSB0aGUgdHJhbnNwb3J0IGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IHR5cGUgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zID1cbiAgfCBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zXG4gIHwgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
17
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1vcHRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiB0eXBlcyBmb3IgY29uZmlndXJpbmcgdGhlIE9ic2lkaWFuIHRyYW5zcG9ydFxuICogdmlhIHZpdGVzdCBgZW52aXJvbm1lbnRPcHRpb25zYC5cbiAqL1xuXG4vKipcbiAqIFRyYW5zcG9ydCBvcHRpb25zIGZvciBBbmRyb2lkIHRlc3RpbmcgdmlhIEFwcGl1bSBXZWJWaWV3IGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFwcCBwYWNrYWdlIChBbmRyb2lkKSBvciBidW5kbGUgSUQgKGlPUykuXG4gICAqIERlZmF1bHRzIHRvIGAnbWQub2JzaWRpYW4nYFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgYXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgdG8gYmVjb21lIHJlYWR5XG4gICAqIChpdHMgYC9zdGF0dXNgIGVuZHBvaW50IHRvIHJlc3BvbmQpLlxuICAgKlxuICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgaGFybmVzcyBhdXRvLXN0YXJ0cyB0aGUgQXBwaXVtIHNlcnZlclxuICAgKiAoe0BsaW5rIHNob3VsZEF1dG9TdGFydEFwcGl1bX0pOyBpZ25vcmVkIHdoZW4gYXR0YWNoaW5nIHRvIGFuXG4gICAqIGFscmVhZHktcnVubmluZyBzZXJ2ZXIuIE9uIGEgY29sZCBtYWNoaW5lIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIGNhbiB0YWtlXG4gICAqIGEgd2hpbGUgdG8gZmluaXNoIGJvb3RpbmcsIHNvIHJhaXNlIHRoaXMgaWYgc3RhcnR1cCB0aW1lcyBvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxODAwMDBgXG4gICAqL1xuICByZWFkb25seSBhcHBpdW1TdGFydFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIEFwcGl1bSBzZXJ2ZXIgVVJMIChlLmcuIGAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJ2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwaXVtVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbmRyb2lkIEFWRCAoQW5kcm9pZCBWaXJ0dWFsIERldmljZSkgbmFtZS5cbiAgICpcbiAgICogVGhlIHRyYW5zcG9ydCBmYWN0b3J5IGxhdW5jaGVzIGBlbXVsYXRvciAtYXZkIDxhdmROYW1lPmAgYXMgYSBiYWNrZ3JvdW5kXG4gICAqIHByb2Nlc3MgYW5kIHBvbGxzIHVudGlsIHRoZSBkZXZpY2UgYXBwZWFycy4gVGhlIGVtdWxhdG9yIGlzIGtpbGxlZFxuICAgKiBvbiB0cmFuc3BvcnQgZGlzcG9zYWwuXG4gICAqXG4gICAqIFJ1biBgZW11bGF0b3IgLWxpc3QtYXZkc2AgdG8gc2VlIGF2YWlsYWJsZSBBVkQgbmFtZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgVURJRCB0byByZXVzZSAoZS5nLiBgJ2VtdWxhdG9yLTU1NTQnYCkuXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYWZ0ZXIgdGhlIEFwcGl1bSBzZXNzaW9uIGlzXG4gICAqIGVzdGFibGlzaGVkLiBXaGVuIHByZXNlbnQgYWxvbmdzaWRlIHtAbGluayBzZXNzaW9uSWR9LCB0aGUgdHJhbnNwb3J0XG4gICAqIGZhY3Rvcnkgc2tpcHMgZW11bGF0b3Igc3RhcnR1cCBhbmQgYXR0YWNoZXMgdG8gdGhlIGV4aXN0aW5nIHNlc3Npb24uXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHdhaXRpbmcsIGFmdGVyIGBzeXMuYm9vdF9jb21wbGV0ZWRgLCBmb3IgYVxuICAgKiBoYXJuZXNzLXN0YXJ0ZWQgZW11bGF0b3IgdG8gYmVjb21lIGlkbGUgYmVmb3JlIHRoZSBBcHBpdW0gc2Vzc2lvbiBpc1xuICAgKiBlc3RhYmxpc2hlZC5cbiAgICpcbiAgICogYHN5cy5ib290X2NvbXBsZXRlZGAgZmlyZXMgKmJlZm9yZSogdGhlIGd1ZXN0IGlzIGFjdHVhbGx5IGlkbGU6IHBhY2thZ2VcbiAgICogb3B0aW1pemF0aW9uIGFuZCBzeXN0ZW0gc2VydmljZXMga2VlcCBjaHVybmluZywgc28gZXN0YWJsaXNoaW5nIHRoZSBzZXNzaW9uXG4gICAqIGltbWVkaWF0ZWx5IG1ha2VzIGV2ZXJ5IG9uZSBvZiBVaUF1dG9tYXRvcjIncyBzZXJpYWxpemVkIGBhZGJgIHJvdW5kLXRyaXBzXG4gICAqIGNvbnRlbmQgd2l0aCB0aGF0IHdvcmsgYW5kIGluZmxhdGVzIHNlc3Npb24gZXN0YWJsaXNobWVudCB+M3guIFRoZSBmYWN0b3J5XG4gICAqIGluc3RlYWQgd2FpdHMgdW50aWwgdGhlIGJvb3QgYW5pbWF0aW9uIGhhcyBzdG9wcGVkIGFuZCB0aGUgcGFja2FnZSBtYW5hZ2VyXG4gICAqIGlzIHNlcnZpbmcsIHByb2NlZWRpbmcgZWFybHkgb25jZSBpZGxlIG9yIGFmdGVyIHRoaXMgYnVkZ2V0IChiZXN0LWVmZm9ydCBcdTIwMTQgYVxuICAgKiB0aW1lb3V0IGxvZ3MgYSB3YXJuaW5nIGFuZCBwcm9jZWVkcykuIFNldCBgMGAgdG8gc2tpcCB0aGUgd2FpdC4gT25seSBhcHBsaWVzXG4gICAqIHRvIGEgaGFybmVzcy1zdGFydGVkIGVtdWxhdG9yLCBub3QgYSByZXVzZWQgb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZGxlVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBjb25zb2xlIHdpbmRvdyBpcyBzaG93bi5cbiAgICpcbiAgICogV2hlbiBgZmFsc2VgICh0aGUgZGVmYXVsdCksIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIHByb2Nlc3MgaXMgc3Bhd25lZCB3aXRoXG4gICAqIGl0cyBjb25zb2xlIHdpbmRvdyBoaWRkZW4gKGB3aW5kb3dzSGlkZWApIGFuZCBpdHMgb3V0cHV0IGRpc2NhcmRlZCwgc28gaXRcbiAgICogbmVpdGhlciBzdGVhbHMgZm9jdXMgbm9yIHdyaXRlcyB0byB0aGUgaW52b2tpbmcgdGVybWluYWwuIElnbm9yZWQgd2hlblxuICAgKiBhdHRhY2hpbmcgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIEFwcGl1bSBzZXJ2ZXIgKHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19XG4gICAqIGBmYWxzZWAsIG9yIHRoZSBzZXJ2ZXIgYWxyZWFkeSByZWFjaGFibGUpLiBTZXQgYHRydWVgIHRvIHNlZSB0aGUgc2VydmVyIGxvZyB3aW5kb3dcbiAgICogYW5kIGl0cyBsaXZlIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNBcHBpdW1Db25zb2xlVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGF1dG8tc3RhcnRlZCBBbmRyb2lkIGVtdWxhdG9yIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCAodGhlIGRlZmF1bHQpLCB0aGUgZW11bGF0b3IgaXMgc3RhcnRlZCB3aXRoIGAtbm8td2luZG93YFxuICAgKiAoaGVhZGxlc3MpLCBzbyBpdCBuZXZlciBzdGVhbHMgZm9jdXMuIElnbm9yZWQgd2hlbiByZXVzaW5nIGFuIGFscmVhZHktcnVubmluZ1xuICAgKiBkZXZpY2UgKG5vdGhpbmcgaXMgbGF1bmNoZWQgdG8gaGlkZSkuIFNldCBgdHJ1ZWAgdG8gd2F0Y2ggdGhlIGVtdWxhdG9yIFVJLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0VtdWxhdG9yVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciBgYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeWAgYWZ0ZXJcbiAgICogdGhlIHZhdWx0IGlzIChyZSlvcGVuZWQuXG4gICAqXG4gICAqIFJlZ2lzdGVyaW5nIGEgdmF1bHQgdHJpZ2dlcnMgYSBmdWxsIE9ic2lkaWFuIHJlLWluaXQgKGBsb2NhdGlvbi5yZWxvYWQoKWBcbiAgICogcmVvcGVucyB0aGUgdmF1bHQgYW5kIHJlbG9hZHMgZXZlcnkgcGx1Z2luIFx1MjAxNCB0aGUgaGVhdmllc3Qgc3RhcnR1cCBzdGVwKS4gT25cbiAgICogYSBjb2xkLWJvb3RlZCBvciB1bmRlci1wcm92aXNpb25lZCBlbXVsYXRvciB0aGF0IGluaXQgY2FuIHRha2UgYSB3aGlsZSwgc29cbiAgICogdGhpcyBidWRnZXQgaXMgdGhlIGxhcmdlc3Qgb2YgdGhlIHRyYW5zcG9ydCB0aW1lb3V0cy4gUmFpc2UgaXQgZnVydGhlciBpZlxuICAgKiByZWxlYXNlcyBzdGlsbCBmbGFrZSBvbiBzbG93IENJIGVtdWxhdG9ycy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDkwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbGF5b3V0UmVhZHlUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBleHRyYSBhdHRlbXB0cyB0byBlbmFibGUgdGhlIHBsdWdpbiBhbmQgdmVyaWZ5IGl0IGxvYWRlZCwgb24gdG9wXG4gICAqIG9mIHRoZSBmaXJzdCBhdHRlbXB0LlxuICAgKlxuICAgKiBPbiBhIGZyZXNobHkgY29sZC1ib290ZWQgZW11bGF0b3IgdGhlIHBsdWdpbiBzdWJzeXN0ZW0gY2FuIHN0aWxsIGJlIHNldHRsaW5nXG4gICAqIHdoZW4gdGhlIGhhcm5lc3MgZW5hYmxlcyB0aGUgcGx1Z2luLCBzbyB0aGUgZW5hYmxlIGxhbmRzIGluIHRoZSBlbmFibGVkIHNldFxuICAgKiBidXQgdGhlIGxvYWQgcmFjZXMgYW5kIGZhaWxzIChgXCI8aWQ+XCIgaXMgaW4gdGhlIGVuYWJsZWQgc2V0IGJ1dCBub3QgbG9hZGVkYCkuXG4gICAqIERldmljZS1pZGxlIGFuZCBgbGF5b3V0UmVhZHlgIGFyZSBhbHJlYWR5IGF3YWl0ZWQsIHNvIHRoaXMgaXMgdGhlIG5hcnJvd1xuICAgKiByZXNpZHVhbCByYWNlOiB0aGUgaGFybmVzcyByZXRyaWVzIHRoZSBlbmFibGUgKyBsb2FkLXZlcmlmaWNhdGlvbiB0aGlzIG1hbnlcbiAgICogdGltZXMgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmIChzZWVcbiAgICoge0BsaW5rIHBsdWdpbkVuYWJsZVJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kc30pLCBmb3JjaW5nIGEgZ2VudWluZSByZWxvYWQgZWFjaFxuICAgKiBhdHRlbXB0LiBBIGNhcHR1cmVkIHBsdWdpbiBsb2FkIGVycm9yIGlzIHRyZWF0ZWQgYXMgYSBkZXRlcm1pbmlzdGljIGJ1ZyBhbmRcbiAgICogaXMgKipub3QqKiByZXRyaWVkLiBTZXQgYDBgIHRvIGRpc2FibGUgcmV0cnkgKGEgc2luZ2xlIGF0dGVtcHQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgM2BcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkVuYWJsZVJldHJ5Q291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEJhc2UgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gcGx1Z2luLWVuYWJsZSBhdHRlbXB0cyAoc2VlXG4gICAqIHtAbGluayBwbHVnaW5FbmFibGVSZXRyeUNvdW50fSkuXG4gICAqXG4gICAqIFRoZSBkZWxheSBncm93cyBleHBvbmVudGlhbGx5IHBlciByZXRyeTogdGhlIGZpcnN0IHJldHJ5IHdhaXRzIHRoaXMgbG9uZyxcbiAgICogdGhlIHNlY29uZCB0d2ljZSBhcyBsb25nLCB0aGUgdGhpcmQgZm91ciB0aW1lcywgYW5kIHNvIG9uIFx1MjAxNCBnaXZpbmcgYVxuICAgKiBzdGlsbC1zZXR0bGluZyBjb2xkIGd1ZXN0IHByb2dyZXNzaXZlbHkgbW9yZSB0aW1lIHRvIGJlY29tZSByZWFkeS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDIwMDBgXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5FbmFibGVSZXRyeURlbGF5SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBlc3RhYmxpc2hpbmcgdGhlIEFwcGl1bSBzZXNzaW9uIChXZWJEcml2ZXJJT1xuICAgKiBgcmVtb3RlKClgIFx1MjAxNCBVaUF1dG9tYXRvcjIgc2VydmVyIGluc3RhbGwgKyBhcHAgbGF1bmNoKS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbGFyZ2VzdCBhbmQgbW9zdCBsb2FkLXNlbnNpdGl2ZSBzdGVwIG9mIHRoZSBBbmRyb2lkIHNldHVwOlxuICAgKiBvbiBhIGNvbGQgb3IgY29udGVuZGVkIGVtdWxhdG9yIGl0IGRvbWluYXRlcyBzdGFydHVwIGFuZCBjYW4gdGFrZSBhIGZld1xuICAgKiBtaW51dGVzLiBSYWlzZSBpdCBpZiBzZXNzaW9uIGVzdGFibGlzaG1lbnQgdGltZXMgb3V0IHVuZGVyIGxvYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxODAwMDBgXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29ubmVjdGlvblJldHJ5VGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbiBleGlzdGluZyBBcHBpdW0gc2Vzc2lvbiBJRCB0byByZWF0dGFjaCB0by5cbiAgICpcbiAgICogUG9wdWxhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGdsb2JhbCBzZXR1cCBhbmQgcHJvdmlkZWQgdG8gdGVzdCB3b3JrZXJzXG4gICAqIHZpYSB0aGUgZnJhbWV3b3JrJ3MgY29udGV4dCBtZWNoYW5pc20gKGUuZy4gVml0ZXN0IGBwcm92aWRlYC9gaW5qZWN0YCkuXG4gICAqIFdoZW4gcHJlc2VudCwgdGhlIHRyYW5zcG9ydCBmYWN0b3J5IHVzZXMgV2ViRHJpdmVySU8ncyBgYXR0YWNoKClgIGluc3RlYWRcbiAgICogb2YgY3JlYXRpbmcgYSBuZXcgc2Vzc2lvbiwgYXZvaWRpbmcgZHVwbGljYXRlIEFwcGl1bS9BREIgY29ubmVjdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIG1pc3NpbmcgQXBwaXVtIGRlcGVuZGVuY2llcyAodGhlXG4gICAqIGB1aWF1dG9tYXRvcjJgIGRyaXZlciwgYW5kIEFwcGl1bSBpdHNlbGYpIGJlZm9yZSBhdXRvLXN0YXJ0aW5nIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCkgYW5kIHRoZSBoYXJuZXNzIGlzIGFib3V0IHRvIGF1dG8tc3RhcnQgdGhlIEFwcGl1bVxuICAgKiBzZXJ2ZXIgKHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19KSwgdGhlIGZhY3RvcnkgZmlyc3QgZW5zdXJlcyBBcHBpdW0gaXNcbiAgICogaW5zdGFsbGVkIChnbG9iYWxseSwgdmlhIGBucG0gaW5zdGFsbCAtZyBhcHBpdW1gKSBhbmQgdGhhdCB0aGVcbiAgICogYHVpYXV0b21hdG9yMmAgZHJpdmVyIGlzIGluc3RhbGxlZCAoYGFwcGl1bSBkcml2ZXIgaW5zdGFsbCB1aWF1dG9tYXRvcjJgKSxcbiAgICogaW5zdGFsbGluZyB3aGljaGV2ZXIgaXMgbWlzc2luZy4gSWdub3JlZCB3aGVuIGF0dGFjaGluZyB0byBhblxuICAgKiBhbHJlYWR5LXJ1bm5pbmcgc2VydmVyIChub3RoaW5nIGlzIGF1dG8tc3RhcnRlZCwgc28gbm90aGluZyBpcyBpbnN0YWxsZWQpIG9yXG4gICAqIHdoZW4ge0BsaW5rIHNob3VsZEF1dG9TdGFydEFwcGl1bX0gaXMgYGZhbHNlYC4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gbWFuYWdlXG4gICAqIHRoZSBBcHBpdW0gdG9vbGNoYWluIHlvdXJzZWxmIGFuZCBza2lwIHRoZSBtYWNoaW5lLW11dGF0aW5nIGdsb2JhbCBpbnN0YWxsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEF1dG9JbnN0YWxsQXBwaXVtRGVwZW5kZW5jaWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRoZSBBcHBpdW0gc2VydmVyIGlmIGl0IGlzIG5vdCByZWFjaGFibGUuXG4gICAqXG4gICAqIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIHRoZSB0cmFuc3BvcnQgZmFjdG9yeSBzcGF3bnMgYG5weCBhcHBpdW1gXG4gICAqIGFzIGEgYmFja2dyb3VuZCBwcm9jZXNzIHdoZW4gdGhlIHByZWZsaWdodCBjaGVjayBmYWlscywgYW5kIGtpbGxzIGl0XG4gICAqIG9uIHRyYW5zcG9ydCBkaXNwb3NhbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRBdXRvU3RhcnRBcHBpdW0/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXNjcmltaW5hbnQgZm9yIHRoZSB0cmFuc3BvcnQgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdvYnNpZGlhbi1hbmRyb2lkLWFwcGl1bSc7XG5cbiAgLyoqXG4gICAqIEJhc2UgcGF0aCBvbiB0aGUgZGV2aWNlIHdoZXJlIE9ic2lkaWFuIHN0b3JlcyB2YXVsdHMuXG4gICAqXG4gICAqIERlZmF1bHRzOlxuICAgKiAtIEFuZHJvaWQ6IGAvc2RjYXJkL0RvY3VtZW50cy9gXG4gICAqIC0gaU9TOiBgQG1kLm9ic2lkaWFuOmRvY3VtZW50cy9gXG4gICAqL1xuICByZWFkb25seSB2YXVsdEJhc2VQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3Igd2FpdGluZyBmb3IgdGhlIFdlYlZpZXcgY29udGV4dCB0byBiZWNvbWUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBPbiBzbG93IGVtdWxhdG9ycywgdGhlIENocm9tZURyaXZlciBwcm94eSB0aGF0IGhhbmRsZXMgV2ViVmlldyBjb21tYW5kc1xuICAgKiBtYXkgbm90IGJlIHJlYWR5IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBBcHBpdW0gc2Vzc2lvbiBzdGFydHMuIFRoaXMgdGltZW91dFxuICAgKiBjb250cm9scyBob3cgbG9uZyB0byBwb2xsIGJlZm9yZSBnaXZpbmcgdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA2MDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IHdlYnZpZXdUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVHJhbnNwb3J0IG9wdGlvbnMgZm9yIGRlc2t0b3AgdGVzdGluZyB2aWEgQ2hyb21lIERldlRvb2xzIFByb3RvY29sLlxuICpcbiAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgZGVza3RvcCB0cmFuc3BvcnQuIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgKipsYXVuY2hlcyBhbmRcbiAqIG93bnMgYW4gaXNvbGF0ZWQgT2JzaWRpYW4gaW5zdGFuY2UqKiBpbiBhIHRlbXBvcmFyeSB1c2VyLWRhdGEgZGlyIChuZXZlclxuICogdG91Y2hpbmcgdGhlIHVzZXIncyBPYnNpZGlhbiksIGNvbm5lY3RlZCBvdmVyIGEgZnJlZSBDRFAgcG9ydC4gUHJvdmlkZVxuICoge0BsaW5rIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucy5wb3J0fSB0byBpbnN0ZWFkIGF0dGFjaCB0byBhblxuICogYWxyZWFkeS1ydW5uaW5nIE9ic2lkaWFuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgaW5kaXZpZHVhbCBDRFAgY29tbWFuZHMuXG4gICAqIERlZmF1bHRzIHRvIDMwMDAwXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHcmFjZSB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGZvciBmYXN0LWZhaWxpbmcgYSAqKmRlYWQgYm9vdCoqIG9mIHRoZSBvd25lZFxuICAgKiBpbnN0YW5jZS5cbiAgICpcbiAgICogV2hlbiBhbiBhc2FyIGNhbm5vdCBydW4gb24gdGhlIGxhdW5jaGVkIEVsZWN0cm9uIHNoZWxsICh0aGUgaW5zdGFsbGVyXG4gICAqIHZlcnNpb24gaXMgdG9vIG9sZCBmb3IgdGhlIGFwcCB2ZXJzaW9uKSwgdGhlIHJlbmRlcmVyIGxvYWRzIGJ1dCBuZXZlclxuICAgKiBib290c3RyYXBzOiBgZG9jdW1lbnQuYm9keWAgc3RheXMgZW1wdHkgYW5kIGB3aW5kb3cuYXBwYCByZW1haW5zXG4gICAqIGB1bmRlZmluZWRgIFx1MjAxNCBhIGJsYWNrIHNjcmVlbi4gUmF0aGVyIHRoYW4gd2FpdGluZyBvdXQgdGhlIGZ1bGwgcmVhZGluZXNzXG4gICAqIHRpbWVvdXQsIHRoZSBvd25lZC12YXVsdCByZWFkaW5lc3MgcG9sbCBjb25jbHVkZXMgdGhlIGJvb3QgaXMgZGVhZCBvbmNlIHRoZVxuICAgKiByZW5kZXJlciBoYXMgYmVlbiBgZG9jdW1lbnQucmVhZHlTdGF0ZWAgYCdjb21wbGV0ZSdgIGZvciB0aGlzIGxvbmcgd2l0aCBub1xuICAgKiBgd2luZG93LmFwcGAgYW5kIGFuIGVtcHR5IGA8Ym9keT5gLCBhbmQgdGhyb3dzIGFcbiAgICogYFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3JgLiBPbmx5IGFwcGxpZXMgdG8gYW4gb3duZWQgaW5zdGFuY2VcbiAgICogKGlnbm9yZWQgaW4gYXR0YWNoIG1vZGUsIHtAbGluayBwb3J0fSBzZXQpLiBTZXQgYDBgIHRvIGRpc2FibGUgZmFzdC1mYWlsIGFuZFxuICAgKiByZXN0b3JlIHRoZSBwbGFpbiB3YWl0LW91dC10aGUtcmVhZGluZXNzLXRpbWVvdXQgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ0RQIGhvc3QuXG4gICAqIERlZmF1bHRzIHRvIGAnbG9jYWxob3N0J2BcbiAgICovXG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hcmtzIHtAbGluayBwb3J0fSBhcyB0aGUgQ0RQIHBvcnQgb2YgYSAqKmhhcm5lc3Mtb3duZWQsIGlzb2xhdGVkIGluc3RhbmNlKipcbiAgICogdGhhdCB0aGUgZ2xvYmFsIHNldHVwIGFscmVhZHkgbGF1bmNoZWQgYW5kIHByZXBhcmVkICh2YXVsdCByZWdpc3RlcmVkLFxuICAgKiBwbHVnaW4gZW5hYmxlZCkuXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYW5kIHByb3ZpZGVkIHRvIHRlc3Qgd29ya2VycyB2aWFcbiAgICogdGhlIGZyYW1ld29yaydzIGNvbnRleHQgbWVjaGFuaXNtIChlLmcuIFZpdGVzdCBgcHJvdmlkZWAvYGluamVjdGApLiBXaGVuIHNldCxcbiAgICogdGhlIHdvcmtlciAqKmF0dGFjaGVzKiogdG8gdGhlIG93bmVkIGluc3RhbmNlIG9uIHtAbGluayBwb3J0fSBpbnN0ZWFkIG9mXG4gICAqIGxhdW5jaGluZyBpdHMgb3duLCBhbmQgc2tpcHMgdGhlIHVzZXItc2NvcGUgdmF1bHQtcmVnaXN0cmF0aW9uIHByZWZsaWdodCBcdTIwMTRcbiAgICogdGhlIG93bmVkIGluc3RhbmNlJ3MgdmF1bHQgbGl2ZXMgaW4gYW4gaXNvbGF0ZWQgdXNlci1kYXRhIGNvbmZpZywgbm90IHRoZVxuICAgKiB1c2VyLXNjb3BlIHJlZ2lzdHJ5LiBEbyBub3Qgc2V0IHRoaXMgbWFudWFsbHk7IGZvciBwbGFpbiBhdHRhY2ggbW9kZSB1c2VcbiAgICoge0BsaW5rIHBvcnR9IGFsb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNIYXJuZXNzT3duZWRJbnN0YW5jZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG93bmVkIGRlc2t0b3AgT2JzaWRpYW4gd2luZG93IGlzIHNob3duIG9uIHNjcmVlbi5cbiAgICpcbiAgICogV2hlbiBgZmFsc2VgLCB0aGUgaGFybmVzcyBsYXVuY2hlcyB0aGUgb3duZWQgaW5zdGFuY2Ugd2l0aFxuICAgKiBrZWVwLWFsaXZlIENocm9taXVtIGZsYWdzIGFuZCBtb3ZlcyBpdHMgd2luZG93ICoqb2ZmLXNjcmVlbioqIG9uY2UgRWxlY3Ryb24nc1xuICAgKiByZW1vdGUgYnJpZGdlIGlzIGF2YWlsYWJsZSwgc28gdGhlIHJ1biBuZXZlciBzdGVhbHMgZm9jdXMgb3IgcG9wcyBhIHdpbmRvdyBpblxuICAgKiBmcm9udCBvZiB5b3UuIE9mZi1zY3JlZW4gKG5vdCBtaW5pbWl6ZWQpIGtlZXBzIHRoZSByZW5kZXJlciBsaXZlLCBzb1xuICAgKiBgc2V0VGltZW91dGAsIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLCBgOmhvdmVyYCwgYW5kIHRydXN0ZWQgaW5wdXQgYmVoYXZlXG4gICAqIGlkZW50aWNhbGx5IHRvIGEgdmlzaWJsZSB3aW5kb3cuIERlZmF1bHRzIHRvIGB0cnVlYDsgaW50ZWdyYXRpb24gc2V0dXBcbiAgICogZXhwbGljaXRseSBwYXNzZXMgYGZhbHNlYCB0byBhdm9pZCBzdGVhbGluZyBmb2N1cy4gSWdub3JlZCBpbiBhdHRhY2ggbW9kZVxuICAgKiAoe0BsaW5rIHBvcnR9IHNldCkgXHUyMDE0IHRoZSBoYXJuZXNzIG5ldmVyXG4gICAqIG1vdmVzIHRoZSB1c2VyJ3Mgb3duIHJ1bm5pbmcgd2luZG93LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzT2JzaWRpYW5BcHBWaXNpYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipFbGVjdHJvbiBzaGVsbCoqIChpbnN0YWxsZXIgYnVpbGQpIHRoZSBvd25lZCBpbnN0YW5jZSBydW5zLlxuICAgKlxuICAgKiBBY2NlcHRzIGFuIGV4cGxpY2l0IGAneC55LnonYCwgYCdwdWJsaWMtbGF0ZXN0J2AsIG9yIGAnY2F0YWx5c3QtbGF0ZXN0J2AuXG4gICAqIFRoZSBtYXRjaGluZyBHaXRIdWIgcmVsZWFzZSBpbnN0YWxsZXIgaXMgZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkIHRvIGFcbiAgICogcG9ydGFibGUgc2hlbGwgKGNhY2hlZCBmb3IgcmV1c2UpLiBQdWJsaWMgcmVsZWFzZXMgb25seSBcdTIwMTQgY2F0YWx5c3QgYnVpbGRzXG4gICAqIGhhdmUgbm8gcHVibGljIGluc3RhbGxlci4gSWdub3JlZCB3aGVuIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipPYnNpZGlhbiBhcHAgdmVyc2lvbioqIChhc2FyKSB0aGUgb3duZWQgaW5zdGFuY2UgcnVucy5cbiAgICpcbiAgICogQWNjZXB0cyBhbiBleHBsaWNpdCBgJ3gueS56J2AsIGAncHVibGljLWxhdGVzdCdgLCBvciBgJ2NhdGFseXN0LWxhdGVzdCdgLlxuICAgKiBWZXJzaW9ucyBhdCBvciBhYm92ZSB0aGUgc2hlbGwgdmVyc2lvbiBhcmUgYXBwbGllZCBhcyBhIGNoZWFwIGFzYXIgc3dhcDtcbiAgICogb2xkZXIgdmVyc2lvbnMgdHJhbnNwYXJlbnRseSB1c2UgdGhlIG1hdGNoaW5nIGluc3RhbGxlciBzaGVsbC4gV2hlbiBvbWl0dGVkLFxuICAgKiB0aGUgdXNlcidzIGN1cnJlbnRseS1pbnN0YWxsZWQgdmVyc2lvbiBpcyB1c2VkLiBJZ25vcmVkIHdoZW4ge0BsaW5rIHBvcnR9XG4gICAqIChhdHRhY2ggbW9kZSkgaXMgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDRFAgcG9ydCBvZiBhbiBhbHJlYWR5LXJ1bm5pbmcgT2JzaWRpYW4gdG8gKiphdHRhY2gqKiB0byAodGhlXG4gICAqIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydGAgaXQgd2FzIGxhdW5jaGVkIHdpdGgpLiBXaGVuIHNldCwgdGhlIGhhcm5lc3NcbiAgICogYXR0YWNoZXMgaW5zdGVhZCBvZiBvd25pbmcgYW4gaW5zdGFuY2UsIGFuZCB0aGUgdmVyc2lvbiBrbm9icyBhcmUgaWdub3JlZC5cbiAgICogV2hlbiBvbWl0dGVkLCBhbiBvd25lZCBpc29sYXRlZCBpbnN0YW5jZSBpcyBsYXVuY2hlZCBvbiBhbiBhdXRvbWF0aWNhbGx5XG4gICAqIGNob3NlbiBmcmVlIHBvcnQgKG5vIHBvcnQgaXMgaGFyZGNvZGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbGF1bmNoIHRoZSBvd25lZCBpbnN0YW5jZSB3aXRoIENocm9taXVtJ3Mgc2FuZGJveCBkaXNhYmxlZFxuICAgKiAoYC0tbm8tc2FuZGJveGApLlxuICAgKlxuICAgKiBOZWVkZWQgdG8gYm9vdCBhbiBvd25lZCBpbnN0YW5jZSBvbiBMaW51eCB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIGNvcnJlY3RseS1jb25maWd1cmVkIHNldHVpZCBgY2hyb21lLXNhbmRib3hgIGhlbHBlciBcdTIwMTQgZS5nLiBhIHBvcnRhYmxlIHNoZWxsXG4gICAqIGV4dHJhY3RlZCBmcm9tIGFuIGluc3RhbGxlciwgb3IgYSBDSSBydW5uZXIgbGF1bmNoaW5nIGFzIGEgbm9uLXJvb3QgdXNlciwgaW5cbiAgICogd2hpY2ggY2FzZSB0aGUgcmVuZGVyZXIgb3RoZXJ3aXNlIHJlZnVzZXMgdG8gc3RhcnQuIEhhcm1sZXNzIG9uXG4gICAqIFdpbmRvd3MvbWFjT1MuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpIFx1MjAxNCB0aGUgaGFybmVzcyBuZXZlclxuICAgKiByZWxhdW5jaGVzIHRoZSB1c2VyJ3MgcnVubmluZyBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGlzYWJsZVNhbmRib3g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGFuICoqdW5ydW5uYWJsZSoqIGluc3RhbGxlclx1MjE5NGFwcCB2ZXJzaW9uIHBhaXIgZmFpbHMgZmFzdCBiZWZvcmUgbGF1bmNoLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBhbiBpbnN0YWxsZXIgYmVsb3cgdGhlIGFwcCdzIHJ1biBmbG9vciAodGhlXG4gICAqIG9sZGVzdCBpbnN0YWxsZXIgdGhlIGFwcCdzIGFzYXIgY2FuIGJvb3Qgb24pIHRocm93c1xuICAgKiBgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yYCBmcm9tIHZlcnNpb24gcmVzb2x1dGlvbiwgYmVmb3JlIGFueXRoaW5nXG4gICAqIGlzIGRvd25sb2FkZWQgb3IgbGF1bmNoZWQuIFNldCBgZmFsc2VgIHRvIGxldCB0aGUgcGluIHByb2NlZWQgdG8gbGF1bmNoXG4gICAqIGluc3RlYWQgXHUyMDE0IHdoZXJlIHRoZSByZWFjdGl2ZSBkZWFkLWJvb3QgZmFzdC1mYWlsXG4gICAqIChgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvcmAsIHNlZSB7QGxpbmsgZGVhZEJvb3RHcmFjZUluTWlsbGlzZWNvbmRzfSlcbiAgICogc3RpbGwgY2F0Y2hlcyB0aGUgYmxhY2stc2NyZWVuIGJvb3QsIGFuZCB0aGUgYCd1bnJ1bm5hYmxlJ2AgdmVyZGljdCBpc1xuICAgKiBzdXJmYWNlZCBhcyBkYXRhIHJhdGhlciB0aGFuIHRocm93bi4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkIGluc3RhbmNlXG4gICAqIChpZ25vcmVkIGluIGF0dGFjaCBtb2RlLCB7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhICoqc2lsZW50IGFzYXIgZmFsbGJhY2sqKiBmYWlscyBmYXN0IGFmdGVyIGJvb3QuXG4gICAqXG4gICAqIFdoZW4gYW4gYXNhciBpcyBzd2FwcGVkIG9udG8gYW4gaW5zdGFsbGVyIHNoZWxsIHRvbyBvbGQgZm9yIGl0LCB0aGUgaW5zdGFuY2VcbiAgICogbWF5IG5vdCBkZWFkLWJvb3QgXHUyMDE0IGl0IGNhbiBzaWxlbnRseSByZXZlcnQgdG8gdGhlIGluc3RhbGxlcidzIG93biBidW5kbGVkXG4gICAqIGFzYXIgYW5kIHJ1biB0aGUgKip3cm9uZyAob2xkZXIpKiogdmVyc2lvbiBiZWhpbmQgYSBoZWFsdGh5IFVJLiBXaGVuIGB0cnVlYFxuICAgKiAodGhlIGRlZmF1bHQpLCB0aGUgdHJhbnNwb3J0IHZlcmlmaWVzIHRoZSBydW5uaW5nIGFwcCB2ZXJzaW9uIGFnYWluc3QgdGhlIHBpblxuICAgKiBwb3N0LWJvb3QgYW5kIHRocm93cyBgU2lsZW50QXNhckZhbGxiYWNrRXJyb3JgIG9uIGEgbWlzbWF0Y2guIFNldCBgZmFsc2VgIHRvXG4gICAqIGxldCB0aGUgYm9vdCBwcm9jZWVkIFx1MjAxNCB0aGUgbWlzbWF0Y2ggaXMgdGhlbiBzdXJmYWNlZCBhcyBkYXRhICh0aGUgZmFsbGJhY2tcbiAgICogdmVyZGljdCkgcmF0aGVyIHRoYW4gdGhyb3duLiBPbmx5IGFwcGxpZXMgdG8gYW4gb3duZWQgaW5zdGFuY2UgcnVubmluZyBhXG4gICAqIHN3YXBwZWQtaW4gYXNhciAoaWdub3JlZCBpbiBhdHRhY2ggbW9kZSwge0BsaW5rIHBvcnR9IHNldCwgYW5kIHdoZW4gbm8gYXNhciBpc1xuICAgKiBzd2FwcGVkIFx1MjAxNCB0aGVyZSBpcyBub3RoaW5nIHRvIHZlcmlmeSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG93bmVkLWluc3RhbmNlIGNvbXBhdGliaWxpdHkgKipuYWcgd2FybmluZ3MqKiBhcmUgZW1pdHRlZC5cbiAgICpcbiAgICogQ292ZXJzICoqYm90aCoqIGNvbXBhdGliaWxpdHkgbmFnczogdGhlIG9mZmxpbmUgaW5zdGFsbGVyXHUyMTk0YXBwIHdhcm5pbmcgKGFcbiAgICogcnVubmFibGUgaW5zdGFsbGVyIGJlbG93IHRoZSByZWNvbW1lbmRlZCBmbG9vcikgYW5kIHRoZSBwb3N0LWJvb3RcbiAgICogcnVudGltZS1FbGVjdHJvbiB3YXJuaW5nIChhIGxpdmUgRWxlY3Ryb24gYmVsb3cgdGhlIGFwcCdzIHJlY29tbWVuZGVkXG4gICAqIG1pbmltdW0pLiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpIGVhY2ggZmlyZXMgdmlhIHRoZSBoYXJuZXNzIGxvZzsgc2V0XG4gICAqIGBmYWxzZWAgdG8gc2lsZW5jZSBib3RoIFx1MjAxNCB0aGUgdmVyZGljdHMgYXJlIHN0aWxsIGNvbXB1dGVkIGFuZCBzdXJmYWNlZCBhc1xuICAgKiBkYXRhIChgY29tcGF0aWJpbGl0eWAgLyBgZWxlY3Ryb25Db21wYXRpYmlsaXR5YCksIG9ubHkgdGhlIGxvZyBpcyBzdXBwcmVzc2VkLlxuICAgKiBEb2VzIG5vdCBhZmZlY3QgdGhlIGAndW5ydW5uYWJsZSdgIHRocm93IChzZWVcbiAgICoge0BsaW5rIHNob3VsZFRocm93T25JbmNvbXBhdGlibGVJbnN0YWxsZXJ9KS4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkXG4gICAqIGluc3RhbmNlIChpZ25vcmVkIGluIGF0dGFjaCBtb2RlLCB7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzY3JpbWluYW50IGZvciB0aGUgdHJhbnNwb3J0IHR5cGUuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnb2JzaWRpYW4tY2RwJztcbn1cblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIHVuaW9uIG9mIGFsbCBzdXBwb3J0ZWQgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFVzZWQgaW4gdml0ZXN0IGBlbnZpcm9ubWVudE9wdGlvbnMub2JzaWRpYW5UcmFuc3BvcnRgIHRvIHNlbGVjdCBhbmRcbiAqIGNvbmZpZ3VyZSB0aGUgdHJhbnNwb3J0IGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IHR5cGUgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zID1cbiAgfCBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zXG4gIHwgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -100,6 +100,34 @@ export interface ObsidianAndroidAppiumTransportOptions {
100
100
  * @default `90000`
101
101
  */
102
102
  readonly layoutReadyTimeoutInMilliseconds?: number;
103
+ /**
104
+ * Number of extra attempts to enable the plugin and verify it loaded, on top
105
+ * of the first attempt.
106
+ *
107
+ * On a freshly cold-booted emulator the plugin subsystem can still be settling
108
+ * when the harness enables the plugin, so the enable lands in the enabled set
109
+ * but the load races and fails (`"<id>" is in the enabled set but not loaded`).
110
+ * Device-idle and `layoutReady` are already awaited, so this is the narrow
111
+ * residual race: the harness retries the enable + load-verification this many
112
+ * times with exponential backoff (see
113
+ * {@link pluginEnableRetryDelayInMilliseconds}), forcing a genuine reload each
114
+ * attempt. A captured plugin load error is treated as a deterministic bug and
115
+ * is **not** retried. Set `0` to disable retry (a single attempt).
116
+ *
117
+ * @default `3`
118
+ */
119
+ readonly pluginEnableRetryCount?: number;
120
+ /**
121
+ * Base delay in milliseconds between plugin-enable attempts (see
122
+ * {@link pluginEnableRetryCount}).
123
+ *
124
+ * The delay grows exponentially per retry: the first retry waits this long,
125
+ * the second twice as long, the third four times, and so on — giving a
126
+ * still-settling cold guest progressively more time to become ready.
127
+ *
128
+ * @default `2000`
129
+ */
130
+ readonly pluginEnableRetryDelayInMilliseconds?: number;
103
131
  /**
104
132
  * Timeout in milliseconds for establishing the Appium session (WebDriverIO
105
133
  * `remote()` — UiAutomator2 server install + app launch).
@@ -14,4 +14,4 @@ var __copyProps = (to, from, except, desc) => {
14
14
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
15
  var transport_exports = {};
16
16
  module.exports = __toCommonJS(transport_exports);
17
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlZmluZXMgdGhlIHRyYW5zcG9ydCBpbnRlcmZhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBhIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UuXG4gKi9cblxuLyoqXG4gKiBBIHBsdWdnYWJsZSB0cmFuc3BvcnQgdGhhdCBldmFsdWF0ZXMgSmF2YVNjcmlwdCBleHByZXNzaW9ucyBpbnNpZGUgYSBydW5uaW5nXG4gKiBPYnNpZGlhbiBpbnN0YW5jZSBhbmQgbWFuYWdlcyB2YXVsdCBsaWZlY3ljbGUuXG4gKlxuICogSW1wbGVtZW50YXRpb25zIGhhbmRsZSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZGV0YWlsczpcbiAqIC0ge0BsaW5rIERlc2t0b3BDZHBUcmFuc3BvcnR9IFx1MjAxNCBEZXNrdG9wIE9ic2lkaWFuIHZpYSBDaHJvbWUgRGV2VG9vbHMgUHJvdG9jb2xcbiAqICAgKGEgaGFybmVzcy1vd25lZCBpc29sYXRlZCBpbnN0YW5jZSBieSBkZWZhdWx0LCBvciBhdHRhY2ggdG8gYSBydW5uaW5nIG9uZSlcbiAqIC0ge0BsaW5rIEFwcGl1bVRyYW5zcG9ydH0gXHUyMDE0IE1vYmlsZSBPYnNpZGlhbiB2aWEgQXBwaXVtIFdlYlZpZXcgSlMgaW5qZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5UcmFuc3BvcnQge1xuICAvKipcbiAgICogRGlzcG9zZXMgb2YgdHJhbnNwb3J0IHJlc291cmNlcyAoZS5nLiBXZWJTb2NrZXQgY29ubmVjdGlvbnMsIEFwcGl1bSBzZXNzaW9ucykuXG4gICAqL1xuICBkaXNwb3NlPygpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91cyBkaXNwb3NhbCBmb3IgdXNlIGluIGBwcm9jZXNzLm9uKCdleGl0JylgIGhhbmRsZXJzIHdoZXJlXG4gICAqIGFzeW5jIHdvcmsgaXMgbm90IHBvc3NpYmxlLlxuICAgKlxuICAgKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHBlcmZvcm0gb25seSBzeW5jaHJvbm91cyBjbGVhbnVwIGhlcmUgKGUuZy4ga2lsbGluZ1xuICAgKiBjaGlsZCBwcm9jZXNzZXMpLiBBc3luYyBvcGVyYXRpb25zIGxpa2UgdW5yZWdpc3RlcmluZyB2YXVsdHMgYXJlIHNraXBwZWQuXG4gICAqL1xuICBkaXNwb3NlU3luYz8oKTogdm9pZDtcblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgSmF2YVNjcmlwdCBleHByZXNzaW9uIHN0cmluZyBpbnNpZGUgT2JzaWRpYW4gYW5kIHJldHVybnMgdGhlXG4gICAqIHJhdyBzdHJpbmcgcmVzdWx0LlxuICAgKlxuICAgKiBUaGUgdHJhbnNwb3J0IG5vcm1hbGl6ZXMgdGhlIG91dHB1dCBcdTIwMTQgc3RyaXBwaW5nIHRyYW5zcG9ydC1zcGVjaWZpYyBwcmVmaXhlc1xuICAgKiBhbmQgaGFuZGxpbmcgdHJhbnNwb3J0LXNwZWNpZmljIGVycm9ycyBcdTIwMTQgc28gY2FsbGVycyByZWNlaXZlIGEgY2xlYW4gcmVzdWx0XG4gICAqIHN0cmluZyAoZS5nLiBhIEpTT04gc3RyaW5nLCBvciBgKG5vIG91dHB1dClgKS5cbiAgICpcbiAgICogQHBhcmFtIGV4cHJlc3Npb24gLSBBIHNlbGYtY29udGFpbmVkIEphdmFTY3JpcHQgZXhwcmVzc2lvbiAodHlwaWNhbGx5IGFuIGFzeW5jIElJRkUpLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEV2YWx1YXRpb24gb3B0aW9ucyBpbmNsdWRpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKiBAcmV0dXJucyBUaGUgcmF3IHJlc3VsdCBzdHJpbmcgZnJvbSBPYnNpZGlhbi5cbiAgICovXG4gIGV2YWx1YXRlKGV4cHJlc3Npb246IHN0cmluZywgb3B0aW9uczogVHJhbnNwb3J0RXZhbE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyB0cmFuc3BvcnQgdGFyZ2V0cyBhIG1vYmlsZSBPYnNpZGlhbiBpbnN0YW5jZS5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAsIGRlc2t0b3Atb25seSBwbHVnaW5zICh3aXRoIGBpc0Rlc2t0b3BPbmx5OiB0cnVlYCBpbiBtYW5pZmVzdClcbiAgICogd2lsbCByZWZ1c2UgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzLlxuICAgKi9cbiAgaXNNb2JpbGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJ1bnMgdHJhbnNwb3J0LXNwZWNpZmljIHByZWZsaWdodCBjaGVja3MgYmVmb3JlIGV2YWx1YXRpb24uXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0aGUgQ0xJIHRyYW5zcG9ydCB2ZXJpZmllcyB0aGF0IHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkLFxuICAgKiB0aGUgQ0xJIGlzIGVuYWJsZWQsIGFuZCB0aGUgQ0xJIGJpbmFyeSBpcyBpbiBQQVRILlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHByZWZsaWdodENoZWNrKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUHVzaGVzIGZpbGVzIGludG8gYSB2YXVsdCBkaXJlY3Rvcnkgb24gdGhlIHRhcmdldCBkZXZpY2UuXG4gICAqXG4gICAqIE9uIGRlc2t0b3AgdGhpcyBpcyBhIG5vLW9wIChmaWxlcyBhcmUgd3JpdHRlbiB0byB0aGUgbG9jYWwgZmlsZXN5c3RlbSBkaXJlY3RseSkuXG4gICAqIE9uIG1vYmlsZSB0aGlzIHVzZXMgdGhlIGRldmljZSdzIGZpbGUgdHJhbnNmZXIgbWVjaGFuaXNtIChlLmcuIEFwcGl1bSBgcHVzaEZpbGVgKS5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqIEBwYXJhbSBmaWxlcyAtIE1hcCBvZiByZWxhdGl2ZSBmaWxlIHBhdGhzIHRvIGNvbnRlbnQgYnVmZmVycy5cbiAgICovXG4gIHB1c2hGaWxlcz8odmF1bHRQYXRoOiBzdHJpbmcsIGZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBVaW50OEFycmF5Pik6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IHBhdGggc28gT2JzaWRpYW4gY2FuIHRhcmdldCBpdC5cbiAgICpcbiAgICogT24gZGVza3RvcDogdXNlcyBFbGVjdHJvbiBJUEMgdG8gb3BlbiB0aGUgdmF1bHQgYW5kIHBvbGxzIGZvciByZWFkaW5lc3MuXG4gICAqIE9uIG1vYmlsZTogcHVzaGVzIHZhdWx0IGZpbGVzIHRvIHRoZSBkZXZpY2UgYW5kIHJlc3RhcnRzIHRoZSBhcHAuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXJzIGEgdmF1bHQgcGF0aCBmcm9tIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlLlxuICAgKlxuICAgKiBPbiBkZXNrdG9wOiBjbG9zZXMgdGhlIHZhdWx0IHdpbmRvdyBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSByZWdpc3RyeS5cbiAgICogT24gbW9iaWxlOiByZW1vdmVzIHZhdWx0IGZpbGVzIGZyb20gdGhlIGRldmljZS5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICB1bnJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydC5ldmFsdWF0ZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNwb3J0RXZhbE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5ICh2YXVsdCBwYXRoKSBmb3IgdGhlIGV2YWx1YXRpb24uXG4gICAqL1xuICByZWFkb25seSBjd2Q6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHRoZSBldmFsdWF0aW9uIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
17
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlZmluZXMgdGhlIHRyYW5zcG9ydCBpbnRlcmZhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBhIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UuXG4gKi9cblxuLyoqXG4gKiBBbiBvcGFxdWUgaGFuZGxlIGlkZW50aWZ5aW5nIGEgY29uc29sZS1jYXB0dXJlIHdpbmRvdyBvcGVuZWQgYnlcbiAqIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydC5iZWdpbkNvbnNvbGVDYXB0dXJlfSBhbmQgY29uc3VtZWQgYnlcbiAqIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydC5yZWFkQ29uc29sZUNhcHR1cmVTaW5jZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc29sZUNhcHR1cmVIYW5kbGUge1xuICAvKipcbiAgICogQSB1bmlxdWUgbWFya2VyIHdyaXR0ZW4gaW50byB0aGUgdGFyZ2V0J3MgbG9nIHN0cmVhbSBhdCBjYXB0dXJlIHN0YXJ0LFxuICAgKiB1c2VkIHRvIHNsaWNlIG91dCBldmVyeXRoaW5nIGxvZ2dlZCBhZnRlciB0aGlzIHBvaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbWFya2VyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwbHVnZ2FibGUgdHJhbnNwb3J0IHRoYXQgZXZhbHVhdGVzIEphdmFTY3JpcHQgZXhwcmVzc2lvbnMgaW5zaWRlIGEgcnVubmluZ1xuICogT2JzaWRpYW4gaW5zdGFuY2UgYW5kIG1hbmFnZXMgdmF1bHQgbGlmZWN5Y2xlLlxuICpcbiAqIEltcGxlbWVudGF0aW9ucyBoYW5kbGUgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGRldGFpbHM6XG4gKiAtIHtAbGluayBEZXNrdG9wQ2RwVHJhbnNwb3J0fSBcdTIwMTQgRGVza3RvcCBPYnNpZGlhbiB2aWEgQ2hyb21lIERldlRvb2xzIFByb3RvY29sXG4gKiAgIChhIGhhcm5lc3Mtb3duZWQgaXNvbGF0ZWQgaW5zdGFuY2UgYnkgZGVmYXVsdCwgb3IgYXR0YWNoIHRvIGEgcnVubmluZyBvbmUpXG4gKiAtIHtAbGluayBBcHBpdW1UcmFuc3BvcnR9IFx1MjAxNCBNb2JpbGUgT2JzaWRpYW4gdmlhIEFwcGl1bSBXZWJWaWV3IEpTIGluamVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuVHJhbnNwb3J0IHtcbiAgLyoqXG4gICAqIEJlZ2lucyBjYXB0dXJpbmcgdGhlIHRhcmdldCdzIG5hdGl2ZSBjb25zb2xlL2Vycm9yIHN0cmVhbSBzbyBhIGxhdGVyXG4gICAqIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydC5yZWFkQ29uc29sZUNhcHR1cmVTaW5jZX0gY2FuIHJldHVybiBldmVyeXRoaW5nXG4gICAqIGxvZ2dlZCBzaW5jZSB0aGlzIGNhbGwuXG4gICAqXG4gICAqIFVzZWQgdG8gc3VyZmFjZSB0aGUgKnJlYWwqIHBsdWdpbi1sb2FkIGVycm9yIHdoZW4gT2JzaWRpYW4gc3dhbGxvd3MgaXRcbiAgICogYmVmb3JlIHRoZSBoYXJuZXNzJ3MgYGxvYWRQbHVnaW5gIG1vbmtleS1wYXRjaCBzZWVzIGl0ICh0aGUgZXJyb3IgdGhlblxuICAgKiBvbmx5IGV4aXN0cyBpbiB0aGUgcmVuZGVyZXIvV2ViVmlldyBjb25zb2xlKS4gT3B0aW9uYWwgYW5kIHBsYXRmb3JtLXNwZWNpZmljOlxuICAgKiBpbXBsZW1lbnRlZCBieSB7QGxpbmsgQXBwaXVtVHJhbnNwb3J0fSAodGFpbHMgYGFkYiBsb2djYXRgKTsgYWJzZW50IG9uXG4gICAqIHtAbGluayBEZXNrdG9wQ2RwVHJhbnNwb3J0fSAoZGVza3RvcCBlcnJvcnMgYXJlIHN1cmZhY2VkIGluLXJlbmRlcmVyLCBhbmQgYVxuICAgKiBkZXZlbG9wZXIgY2FuIG9wZW4gRGV2VG9vbHMgZGlyZWN0bHkpLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBvcGFxdWUgaGFuZGxlIHRvIHBhc3MgdG8ge0BsaW5rIE9ic2lkaWFuVHJhbnNwb3J0LnJlYWRDb25zb2xlQ2FwdHVyZVNpbmNlfSwgb3IgYHVuZGVmaW5lZGAgd2hlbiB1bnN1cHBvcnRlZC5cbiAgICovXG4gIGJlZ2luQ29uc29sZUNhcHR1cmU/KCk6IFByb21pc2U8Q29uc29sZUNhcHR1cmVIYW5kbGUgfCB1bmRlZmluZWQ+O1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyBvZiB0cmFuc3BvcnQgcmVzb3VyY2VzIChlLmcuIFdlYlNvY2tldCBjb25uZWN0aW9ucywgQXBwaXVtIHNlc3Npb25zKS5cbiAgICovXG4gIGRpc3Bvc2U/KCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzIGRpc3Bvc2FsIGZvciB1c2UgaW4gYHByb2Nlc3Mub24oJ2V4aXQnKWAgaGFuZGxlcnMgd2hlcmVcbiAgICogYXN5bmMgd29yayBpcyBub3QgcG9zc2libGUuXG4gICAqXG4gICAqIEltcGxlbWVudGF0aW9ucyBzaG91bGQgcGVyZm9ybSBvbmx5IHN5bmNocm9ub3VzIGNsZWFudXAgaGVyZSAoZS5nLiBraWxsaW5nXG4gICAqIGNoaWxkIHByb2Nlc3NlcykuIEFzeW5jIG9wZXJhdGlvbnMgbGlrZSB1bnJlZ2lzdGVyaW5nIHZhdWx0cyBhcmUgc2tpcHBlZC5cbiAgICovXG4gIGRpc3Bvc2VTeW5jPygpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gc3RyaW5nIGluc2lkZSBPYnNpZGlhbiBhbmQgcmV0dXJucyB0aGVcbiAgICogcmF3IHN0cmluZyByZXN1bHQuXG4gICAqXG4gICAqIFRoZSB0cmFuc3BvcnQgbm9ybWFsaXplcyB0aGUgb3V0cHV0IFx1MjAxNCBzdHJpcHBpbmcgdHJhbnNwb3J0LXNwZWNpZmljIHByZWZpeGVzXG4gICAqIGFuZCBoYW5kbGluZyB0cmFuc3BvcnQtc3BlY2lmaWMgZXJyb3JzIFx1MjAxNCBzbyBjYWxsZXJzIHJlY2VpdmUgYSBjbGVhbiByZXN1bHRcbiAgICogc3RyaW5nIChlLmcuIGEgSlNPTiBzdHJpbmcsIG9yIGAobm8gb3V0cHV0KWApLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIEEgc2VsZi1jb250YWluZWQgSmF2YVNjcmlwdCBleHByZXNzaW9uICh0eXBpY2FsbHkgYW4gYXN5bmMgSUlGRSkuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRXZhbHVhdGlvbiBvcHRpb25zIGluY2x1ZGluZyB0aGUgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqIEByZXR1cm5zIFRoZSByYXcgcmVzdWx0IHN0cmluZyBmcm9tIE9ic2lkaWFuLlxuICAgKi9cbiAgZXZhbHVhdGUoZXhwcmVzc2lvbjogc3RyaW5nLCBvcHRpb25zOiBUcmFuc3BvcnRFdmFsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHRyYW5zcG9ydCB0YXJnZXRzIGEgbW9iaWxlIE9ic2lkaWFuIGluc3RhbmNlLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCwgZGVza3RvcC1vbmx5IHBsdWdpbnMgKHdpdGggYGlzRGVza3RvcE9ubHk6IHRydWVgIGluIG1hbmlmZXN0KVxuICAgKiB3aWxsIHJlZnVzZSB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMuXG4gICAqL1xuICBpc01vYmlsZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogUnVucyB0cmFuc3BvcnQtc3BlY2lmaWMgcHJlZmxpZ2h0IGNoZWNrcyBiZWZvcmUgZXZhbHVhdGlvbi5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIHRoZSBDTEkgdHJhbnNwb3J0IHZlcmlmaWVzIHRoYXQgdGhlIHZhdWx0IGlzIHJlZ2lzdGVyZWQsXG4gICAqIHRoZSBDTEkgaXMgZW5hYmxlZCwgYW5kIHRoZSBDTEkgYmluYXJ5IGlzIGluIFBBVEguXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcHJlZmxpZ2h0Q2hlY2sodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBQdXNoZXMgZmlsZXMgaW50byBhIHZhdWx0IGRpcmVjdG9yeSBvbiB0aGUgdGFyZ2V0IGRldmljZS5cbiAgICpcbiAgICogT24gZGVza3RvcCB0aGlzIGlzIGEgbm8tb3AgKGZpbGVzIGFyZSB3cml0dGVuIHRvIHRoZSBsb2NhbCBmaWxlc3lzdGVtIGRpcmVjdGx5KS5cbiAgICogT24gbW9iaWxlIHRoaXMgdXNlcyB0aGUgZGV2aWNlJ3MgZmlsZSB0cmFuc2ZlciBtZWNoYW5pc20gKGUuZy4gQXBwaXVtIGBwdXNoRmlsZWApLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICogQHBhcmFtIGZpbGVzIC0gTWFwIG9mIHJlbGF0aXZlIGZpbGUgcGF0aHMgdG8gY29udGVudCBidWZmZXJzLlxuICAgKi9cbiAgcHVzaEZpbGVzPyh2YXVsdFBhdGg6IHN0cmluZywgZmlsZXM6IFJlY29yZDxzdHJpbmcsIFVpbnQ4QXJyYXk+KTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmVhZHMgdGhlIG5hdGl2ZSBjb25zb2xlL2Vycm9yIG91dHB1dCBjYXB0dXJlZCBzaW5jZSB0aGUgbWF0Y2hpbmdcbiAgICoge0BsaW5rIE9ic2lkaWFuVHJhbnNwb3J0LmJlZ2luQ29uc29sZUNhcHR1cmV9IGNhbGwuXG4gICAqXG4gICAqIEEgYm91bmRlZCwgcG9zdC1ob2MsIGZhaWx1cmUtcGF0aC1vbmx5IGR1bXAgXHUyMDE0IG5vdCBhIGxpdmUgbW9uaXRvci5cbiAgICpcbiAgICogQHBhcmFtIGhhbmRsZSAtIFRoZSBoYW5kbGUgcmV0dXJuZWQgYnkge0BsaW5rIE9ic2lkaWFuVHJhbnNwb3J0LmJlZ2luQ29uc29sZUNhcHR1cmV9IChvciBgdW5kZWZpbmVkYCB3aGVuIGNhcHR1cmUgd2FzIHVuc3VwcG9ydGVkKS5cbiAgICogQHJldHVybnMgVGhlIGNhcHR1cmVkIGNvbnNvbGUvZXJyb3IgdGV4dCwgb3IgYHVuZGVmaW5lZGAgd2hlbiB1bnN1cHBvcnRlZCBvciBub3RoaW5nIHJlbGV2YW50IHdhcyBsb2dnZWQuXG4gICAqL1xuICByZWFkQ29uc29sZUNhcHR1cmVTaW5jZT8oaGFuZGxlOiBDb25zb2xlQ2FwdHVyZUhhbmRsZSB8IHVuZGVmaW5lZCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdmF1bHQgcGF0aCBzbyBPYnNpZGlhbiBjYW4gdGFyZ2V0IGl0LlxuICAgKlxuICAgKiBPbiBkZXNrdG9wOiB1c2VzIEVsZWN0cm9uIElQQyB0byBvcGVuIHRoZSB2YXVsdCBhbmQgcG9sbHMgZm9yIHJlYWRpbmVzcy5cbiAgICogT24gbW9iaWxlOiBwdXNoZXMgdmF1bHQgZmlsZXMgdG8gdGhlIGRldmljZSBhbmQgcmVzdGFydHMgdGhlIGFwcC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICByZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgYSB2YXVsdCBwYXRoIGZyb20gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UuXG4gICAqXG4gICAqIE9uIGRlc2t0b3A6IGNsb3NlcyB0aGUgdmF1bHQgd2luZG93IGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIHJlZ2lzdHJ5LlxuICAgKiBPbiBtb2JpbGU6IHJlbW92ZXMgdmF1bHQgZmlsZXMgZnJvbSB0aGUgZGV2aWNlLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHVucmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIE9ic2lkaWFuVHJhbnNwb3J0LmV2YWx1YXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc3BvcnRFdmFsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgKHZhdWx0IHBhdGgpIGZvciB0aGUgZXZhbHVhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIGV2YWx1YXRpb24gY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -3,6 +3,18 @@
3
3
  *
4
4
  * Defines the transport interface for communicating with a running Obsidian instance.
5
5
  */
6
+ /**
7
+ * An opaque handle identifying a console-capture window opened by
8
+ * {@link ObsidianTransport.beginConsoleCapture} and consumed by
9
+ * {@link ObsidianTransport.readConsoleCaptureSince}.
10
+ */
11
+ export interface ConsoleCaptureHandle {
12
+ /**
13
+ * A unique marker written into the target's log stream at capture start,
14
+ * used to slice out everything logged after this point.
15
+ */
16
+ readonly marker: string;
17
+ }
6
18
  /**
7
19
  * A pluggable transport that evaluates JavaScript expressions inside a running
8
20
  * Obsidian instance and manages vault lifecycle.
@@ -13,6 +25,21 @@
13
25
  * - {@link AppiumTransport} — Mobile Obsidian via Appium WebView JS injection
14
26
  */
15
27
  export interface ObsidianTransport {
28
+ /**
29
+ * Begins capturing the target's native console/error stream so a later
30
+ * {@link ObsidianTransport.readConsoleCaptureSince} can return everything
31
+ * logged since this call.
32
+ *
33
+ * Used to surface the *real* plugin-load error when Obsidian swallows it
34
+ * before the harness's `loadPlugin` monkey-patch sees it (the error then
35
+ * only exists in the renderer/WebView console). Optional and platform-specific:
36
+ * implemented by {@link AppiumTransport} (tails `adb logcat`); absent on
37
+ * {@link DesktopCdpTransport} (desktop errors are surfaced in-renderer, and a
38
+ * developer can open DevTools directly).
39
+ *
40
+ * @returns An opaque handle to pass to {@link ObsidianTransport.readConsoleCaptureSince}, or `undefined` when unsupported.
41
+ */
42
+ beginConsoleCapture?(): Promise<ConsoleCaptureHandle | undefined>;
16
43
  /**
17
44
  * Disposes of transport resources (e.g. WebSocket connections, Appium sessions).
18
45
  */
@@ -64,6 +91,16 @@ export interface ObsidianTransport {
64
91
  * @param files - Map of relative file paths to content buffers.
65
92
  */
66
93
  pushFiles?(vaultPath: string, files: Record<string, Uint8Array>): Promise<void>;
94
+ /**
95
+ * Reads the native console/error output captured since the matching
96
+ * {@link ObsidianTransport.beginConsoleCapture} call.
97
+ *
98
+ * A bounded, post-hoc, failure-path-only dump — not a live monitor.
99
+ *
100
+ * @param handle - The handle returned by {@link ObsidianTransport.beginConsoleCapture} (or `undefined` when capture was unsupported).
101
+ * @returns The captured console/error text, or `undefined` when unsupported or nothing relevant was logged.
102
+ */
103
+ readConsoleCaptureSince?(handle: ConsoleCaptureHandle | undefined): Promise<string | undefined>;
67
104
  /**
68
105
  * Registers a vault path so Obsidian can target it.
69
106
  *
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var vault_path_match_exports = {};
30
+ __export(vault_path_match_exports, {
31
+ normalizeVaultPathForComparison: () => normalizeVaultPathForComparison,
32
+ vaultPathsMatch: () => vaultPathsMatch
33
+ });
34
+ module.exports = __toCommonJS(vault_path_match_exports);
35
+ var import_node_process = __toESM(require("node:process"), 1);
36
+ const IS_CASE_INSENSITIVE_FILESYSTEM = import_node_process.default.platform === "win32";
37
+ function normalizeVaultPathForComparison(path, isCaseInsensitive = IS_CASE_INSENSITIVE_FILESYSTEM) {
38
+ const unifiedSeparators = path.replace(/[\\/]+/g, "/").replace(/\/+$/, "");
39
+ return isCaseInsensitive ? unifiedSeparators.toLowerCase() : unifiedSeparators;
40
+ }
41
+ function vaultPathsMatch(basePath, vaultPath, isCaseInsensitive = IS_CASE_INSENSITIVE_FILESYSTEM) {
42
+ return normalizeVaultPathForComparison(basePath, isCaseInsensitive) === normalizeVaultPathForComparison(vaultPath, isCaseInsensitive);
43
+ }
44
+ // Annotate the CommonJS export names for ESM import in node:
45
+ 0 && (module.exports = {
46
+ normalizeVaultPathForComparison,
47
+ vaultPathsMatch
48
+ });
49
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZhdWx0LXBhdGgtbWF0Y2gudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIG1hdGNoaW5nIG9mIGEgcHJvYmVkIHZhdWx0IGJhc2UgcGF0aCBhZ2FpbnN0IGEgcmVxdWVzdGVkIHZhdWx0IHBhdGguXG4gKlxuICogVGhlIGRlc2t0b3AgQ0RQIHRyYW5zcG9ydCByb3V0ZXMgYW4gYGV2YWxJbk9ic2lkaWFuYCBjYWxsIHRvIHRoZSBjb3JyZWN0XG4gKiBPYnNpZGlhbiB3aW5kb3cgYnkgcHJvYmluZyBlYWNoIHRhcmdldCdzIGBhcHAudmF1bHQuYWRhcHRlci5nZXRCYXNlUGF0aCgpYCBhbmRcbiAqIGNvbXBhcmluZyBpdCB0byB0aGUgcmVxdWVzdGVkIHZhdWx0IHBhdGguIFRoYXQgY29tcGFyaXNvbiBtdXN0IHRvbGVyYXRlIGJlbmlnblxuICogZm9ybWF0dGluZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSByZW5kZXJlci1yZXBvcnRlZCBiYXNlIHBhdGggYW5kIHRoZVxuICogTm9kZS1zaWRlIHBhdGggKHBhdGgtc2VwYXJhdG9yIGZsYXZvciwgYW5kIGNhc2Ugb24gY2FzZS1pbnNlbnNpdGl2ZVxuICogZmlsZXN5c3RlbXMpLCBzbyBpdCBsaXZlcyBoZXJlIGFzIGEgcHVyZSwgdW5pdC10ZXN0ZWQgaGVscGVyIHJhdGhlciB0aGFuIGFzIGFcbiAqIHJhdyBgPT09YCBpbnNpZGUgdGhlIGludGVncmF0aW9uLW9ubHkgdHJhbnNwb3J0IG1vZHVsZSAod2hpY2ggaXMgZXhjbHVkZWQgZnJvbVxuICogdW5pdCB0ZXN0cykuXG4gKi9cblxuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBob3N0IGZpbGVzeXN0ZW0gY29tcGFyZXMgcGF0aHMgY2FzZS1pbnNlbnNpdGl2ZWx5LiBXaW5kb3dzIChhbmQsIGluXG4gKiBwcmFjdGljZSwgdGhlIGRlZmF1bHQgbWFjT1Mgdm9sdW1lKSBhcmUgY2FzZS1pbnNlbnNpdGl2ZTsgdHJlYXQgb25seSBXaW5kb3dzIGFzXG4gKiBzdWNoIGJ5IGRlZmF1bHQsIG1hdGNoaW5nIHdoZXJlIHRoZSBoYXJuZXNzIHJ1bnMuXG4gKi9cbmNvbnN0IElTX0NBU0VfSU5TRU5TSVRJVkVfRklMRVNZU1RFTSA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMic7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHZhdWx0IHBhdGggZm9yIGNvbXBhcmlzb246IHVuaWZpZXMgcGF0aCBzZXBhcmF0b3JzIHRvIGAvYCwgc3RyaXBzXG4gKiBhbnkgdHJhaWxpbmcgc2VwYXJhdG9ycywgYW5kIChvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgbG93ZXJjYXNlcyBpdC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIG5vcm1hbGl6ZS5cbiAqIEBwYXJhbSBpc0Nhc2VJbnNlbnNpdGl2ZSAtIFdoZXRoZXIgdG8gY29tcGFyZSBjYXNlLWluc2Vuc2l0aXZlbHkuIERlZmF1bHRzIHRvXG4gKiAgIHRoZSBob3N0IGZpbGVzeXN0ZW0ncyBiZWhhdmlvciAoY2FzZS1pbnNlbnNpdGl2ZSBvbiBXaW5kb3dzKS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVWYXVsdFBhdGhGb3JDb21wYXJpc29uKHBhdGg6IHN0cmluZywgaXNDYXNlSW5zZW5zaXRpdmUgPSBJU19DQVNFX0lOU0VOU0lUSVZFX0ZJTEVTWVNURU0pOiBzdHJpbmcge1xuICBjb25zdCB1bmlmaWVkU2VwYXJhdG9ycyA9IHBhdGgucmVwbGFjZSgvW1xcXFwvXSsvZywgJy8nKS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgcmV0dXJuIGlzQ2FzZUluc2Vuc2l0aXZlID8gdW5pZmllZFNlcGFyYXRvcnMudG9Mb3dlckNhc2UoKSA6IHVuaWZpZWRTZXBhcmF0b3JzO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYSBwcm9iZWQgYmFzZSBwYXRoIGFuZCBhIHJlcXVlc3RlZCB2YXVsdCBwYXRoIHJlZmVyIHRvIHRoZSBzYW1lIHZhdWx0LFxuICogY29tcGFyaW5nIHZpYSB7QGxpbmsgbm9ybWFsaXplVmF1bHRQYXRoRm9yQ29tcGFyaXNvbn0gc28gc2VwYXJhdG9yLWZsYXZvciBhbmRcbiAqIChvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zKSBjYXNlIGRpZmZlcmVuY2VzIGRvIG5vdCBjYXVzZSBhIGZhbHNlIG1pc3MuXG4gKlxuICogQHBhcmFtIGJhc2VQYXRoIC0gVGhlIGJhc2UgcGF0aCBwcm9iZWQgZnJvbSBhbiBPYnNpZGlhbiB0YXJnZXQuXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIHJlcXVlc3RlZCB2YXVsdCBwYXRoLlxuICogQHBhcmFtIGlzQ2FzZUluc2Vuc2l0aXZlIC0gV2hldGhlciB0byBjb21wYXJlIGNhc2UtaW5zZW5zaXRpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgdGhlIGhvc3QgZmlsZXN5c3RlbSdzIGJlaGF2aW9yIChjYXNlLWluc2Vuc2l0aXZlIG9uIFdpbmRvd3MpLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIHR3byBwYXRocyByZWZlciB0byB0aGUgc2FtZSB2YXVsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhdWx0UGF0aHNNYXRjaChiYXNlUGF0aDogc3RyaW5nLCB2YXVsdFBhdGg6IHN0cmluZywgaXNDYXNlSW5zZW5zaXRpdmUgPSBJU19DQVNFX0lOU0VOU0lUSVZFX0ZJTEVTWVNURU0pOiBib29sZWFuIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVZhdWx0UGF0aEZvckNvbXBhcmlzb24oYmFzZVBhdGgsIGlzQ2FzZUluc2Vuc2l0aXZlKSA9PT0gbm9ybWFsaXplVmF1bHRQYXRoRm9yQ29tcGFyaXNvbih2YXVsdFBhdGgsIGlzQ2FzZUluc2Vuc2l0aXZlKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFlQSwwQkFBb0I7QUFPcEIsTUFBTSxpQ0FBaUMsb0JBQUFBLFFBQVEsYUFBYTtBQVdyRCxTQUFTLGdDQUFnQyxNQUFjLG9CQUFvQixnQ0FBd0M7QUFDeEgsUUFBTSxvQkFBb0IsS0FBSyxRQUFRLFdBQVcsR0FBRyxFQUFFLFFBQVEsUUFBUSxFQUFFO0FBQ3pFLFNBQU8sb0JBQW9CLGtCQUFrQixZQUFZLElBQUk7QUFDL0Q7QUFhTyxTQUFTLGdCQUFnQixVQUFrQixXQUFtQixvQkFBb0IsZ0NBQXlDO0FBQ2hJLFNBQU8sZ0NBQWdDLFVBQVUsaUJBQWlCLE1BQU0sZ0NBQWdDLFdBQVcsaUJBQWlCO0FBQ3RJOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Pure matching of a probed vault base path against a requested vault path.
5
+ *
6
+ * The desktop CDP transport routes an `evalInObsidian` call to the correct
7
+ * Obsidian window by probing each target's `app.vault.adapter.getBasePath()` and
8
+ * comparing it to the requested vault path. That comparison must tolerate benign
9
+ * formatting differences between the renderer-reported base path and the
10
+ * Node-side path (path-separator flavor, and case on case-insensitive
11
+ * filesystems), so it lives here as a pure, unit-tested helper rather than as a
12
+ * raw `===` inside the integration-only transport module (which is excluded from
13
+ * unit tests).
14
+ */
15
+ /**
16
+ * Normalizes a vault path for comparison: unifies path separators to `/`, strips
17
+ * any trailing separators, and (on a case-insensitive filesystem) lowercases it.
18
+ *
19
+ * @param path - The path to normalize.
20
+ * @param isCaseInsensitive - Whether to compare case-insensitively. Defaults to
21
+ * the host filesystem's behavior (case-insensitive on Windows).
22
+ * @returns The normalized path.
23
+ */
24
+ export declare function normalizeVaultPathForComparison(path: string, isCaseInsensitive?: boolean): string;
25
+ /**
26
+ * Whether a probed base path and a requested vault path refer to the same vault,
27
+ * comparing via {@link normalizeVaultPathForComparison} so separator-flavor and
28
+ * (on case-insensitive filesystems) case differences do not cause a false miss.
29
+ *
30
+ * @param basePath - The base path probed from an Obsidian target.
31
+ * @param vaultPath - The requested vault path.
32
+ * @param isCaseInsensitive - Whether to compare case-insensitively. Defaults to
33
+ * the host filesystem's behavior (case-insensitive on Windows).
34
+ * @returns `true` when the two paths refer to the same vault.
35
+ */
36
+ export declare function vaultPathsMatch(basePath: string, vaultPath: string, isCaseInsensitive?: boolean): boolean;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var global_setup_no_plugin_exports = {};
20
+ __export(global_setup_no_plugin_exports, {
21
+ getTempVault: () => import_global_setup2.getTempVault,
22
+ setup: () => setup,
23
+ teardown: () => teardown
24
+ });
25
+ module.exports = __toCommonJS(global_setup_no_plugin_exports);
26
+ var import_global_setup = require("./global-setup.cjs");
27
+ var import_global_setup2 = require("./global-setup.cjs");
28
+ const noPluginGlobalSetup = (0, import_global_setup.createSetup)({ installPlugin: false });
29
+ const setup = noPluginGlobalSetup.setup;
30
+ const teardown = noPluginGlobalSetup.teardown;
31
+ // Annotate the CommonJS export names for ESM import in node:
32
+ 0 && (module.exports = {
33
+ getTempVault,
34
+ setup,
35
+ teardown
36
+ });
37
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3ZpdGVzdC9nbG9iYWwtc2V0dXAtbm8tcGx1Z2luLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVml0ZXN0ICoqcGx1Z2luLWxlc3MqKiBnbG9iYWwgc2V0dXAvdGVhcmRvd24gYWRhcHRlci5cbiAqXG4gKiBUaGUgY291bnRlcnBhcnQgdG8gYC4vZ2xvYmFsLXNldHVwLnRzYCAod2hpY2ggaW5zdGFsbHMgYW5kIGVuYWJsZXMgdGhlIGJ1aWx0XG4gKiBwbHVnaW4pLiBUaGlzIG9uZSBydW5zIHtAbGluayBjcmVhdGVTZXR1cH0gd2l0aCBgaW5zdGFsbFBsdWdpbjogZmFsc2VgLCBzbyBpdFxuICogbGF1bmNoZXMgdGhlIG93bmVkIE9ic2lkaWFuIGluc3RhbmNlLCByZWdpc3RlcnMgYW4gKiplbXB0eSoqIHRlbXAgdmF1bHQsIGFuZFxuICogcHVibGlzaGVzIHRoZSBvd25lZC1pbnN0YW5jZSBlbmRwb2ludCB0byB3b3JrZXJzIFx1MjAxNCBidXQgY29waWVzL2VuYWJsZXMgbm9cbiAqIHBsdWdpbi4gUG9pbnQgYSBub24tcGx1Z2luIGNvbnN1bWVyJ3MgYGdsb2JhbFNldHVwYCBzdHJhaWdodCBhdFxuICogYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3Rpbmcvdml0ZXN0LWdsb2JhbC1zZXR1cC1uby1wbHVnaW5gOyBubyB3cmFwcGVyIG5lZWRlZC5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBzZXR1cCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHsgY3JlYXRlU2V0dXAgfSBmcm9tICcuL2dsb2JhbC1zZXR1cC5janMnO1xuXG5jb25zdCBub1BsdWdpbkdsb2JhbFNldHVwID0gY3JlYXRlU2V0dXAoeyBpbnN0YWxsUGx1Z2luOiBmYWxzZSB9KTtcblxuLyoqXG4gKiBWaXRlc3QgZ2xvYmFsIHNldHVwIGZ1bmN0aW9uIChwbHVnaW4tbGVzczsgbm8gcHJlLXBvcHVsYXRpb24pLlxuICpcbiAqIFJlZ2lzdGVycyBhbiBlbXB0eSB0ZW1wIHZhdWx0IGFuZCBwcm92aWRlcyBgdGVtcFZhdWx0UGF0aGAgdG8gdGVzdHMsIHdpdGhvdXRcbiAqIGNvcHlpbmcgb3IgZW5hYmxpbmcgYW55IHBsdWdpbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldHVwID0gbm9QbHVnaW5HbG9iYWxTZXR1cC5zZXR1cDtcblxuLyoqXG4gKiBWaXRlc3QgZ2xvYmFsIHRlYXJkb3duIGZ1bmN0aW9uLlxuICpcbiAqIFJlbW92ZXMgdGhlIHRlbXBvcmFyeSB2YXVsdCBjcmVhdGVkIGR1cmluZyBzZXR1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlYXJkb3duID0gbm9QbHVnaW5HbG9iYWxTZXR1cC50ZWFyZG93bjtcblxuZXhwb3J0IHsgZ2V0VGVtcFZhdWx0IH0gZnJvbSAnLi9nbG9iYWwtc2V0dXAuY2pzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUEsMEJBQTRCO0FBbUI1QixJQUFBQSx1QkFBNkI7QUFqQjdCLE1BQU0sMEJBQXNCLGlDQUFZLEVBQUUsZUFBZSxNQUFNLENBQUM7QUFRekQsTUFBTSxRQUFRLG9CQUFvQjtBQU9sQyxNQUFNLFdBQVcsb0JBQW9COyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfZ2xvYmFsX3NldHVwIl0KfQo=
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Vitest **plugin-less** global setup/teardown adapter.
5
+ *
6
+ * The counterpart to `./global-setup.ts` (which installs and enables the built
7
+ * plugin). This one runs {@link createSetup} with `installPlugin: false`, so it
8
+ * launches the owned Obsidian instance, registers an **empty** temp vault, and
9
+ * publishes the owned-instance endpoint to workers — but copies/enables no
10
+ * plugin. Point a non-plugin consumer's `globalSetup` straight at
11
+ * `obsidian-integration-testing/vitest-global-setup-no-plugin`; no wrapper needed.
12
+ */
13
+ /**
14
+ * Vitest global setup function (plugin-less; no pre-population).
15
+ *
16
+ * Registers an empty temp vault and provides `tempVaultPath` to tests, without
17
+ * copying or enabling any plugin.
18
+ */
19
+ export declare const setup: (this: void, project: import("vitest/node").TestProject) => Promise<void>;
20
+ /**
21
+ * Vitest global teardown function.
22
+ *
23
+ * Removes the temporary vault created during setup.
24
+ */
25
+ export declare const teardown: (this: void) => Promise<void>;
26
+ export { getTempVault } from './global-setup.cjs';
@@ -40,7 +40,12 @@ function createSetup(options) {
40
40
  const transportOptions = environmentOptions?.["obsidianTransport"];
41
41
  const label = transportOptions?.type ?? "obsidian-cdp";
42
42
  try {
43
- setupResult = await (0, import_global_setup_core.coreSetup)({ populate: options?.populate?.(), transportOptions });
43
+ setupResult = await (0, import_global_setup_core.coreSetup)({
44
+ enableCommunityPlugins: options?.enableCommunityPlugins,
45
+ installPlugin: options?.installPlugin,
46
+ populate: options?.populate?.(),
47
+ transportOptions
48
+ });
44
49
  } catch (error) {
45
50
  (0, import_log.log)(`[integration-setup:${label}] Setup failed (tests for this project will be skipped): ${(0, import_error_to_string.errorToString)(error)}`);
46
51
  project.provide("setupError", (0, import_error_to_string.errorToString)(error));
@@ -71,4 +76,4 @@ const teardown = defaultGlobalSetup.teardown;
71
76
  setup,
72
77
  teardown
73
78
  });
74
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3ZpdGVzdC9nbG9iYWwtc2V0dXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBWaXRlc3QgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93biBhZGFwdGVyLlxuICpcbiAqIERlbGVnYXRlcyB0byB0aGUgZnJhbWV3b3JrLWFnbm9zdGljIGNvcmUgYW5kIGJyaWRnZXMgY29udGV4dFxuICogdG8gdGVzdCB3b3JrZXJzIHZpYSBWaXRlc3QncyBgcHJvamVjdC5wcm92aWRlYCAvIGBpbmplY3RgLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFRlc3RQcm9qZWN0IH0gZnJvbSAndml0ZXN0L25vZGUnO1xuXG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IENvcmVTZXR1cFJlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLmNqcyc7XG5pbXBvcnQgdHlwZSB7IFBvcHVsYXRlRmlsZXNQYXJhbXMgfSBmcm9tICcuLi90ZW1wLXZhdWx0LmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5cbmltcG9ydCB7XG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi4vY29udGV4dC1wcm92aWRlci5janMnO1xuaW1wb3J0IHsgZXJyb3JUb1N0cmluZyB9IGZyb20gJy4uL2Vycm9yLXRvLXN0cmluZy5janMnO1xuaW1wb3J0IHtcbiAgY29yZVNldHVwLFxuICBjb3JlVGVhcmRvd25cbn0gZnJvbSAnLi4vZ2xvYmFsLXNldHVwLWNvcmUuY2pzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4uL2xvZy5janMnO1xuaW1wb3J0IHsgVGVtcFZhdWx0IH0gZnJvbSAnLi4vdGVtcC12YXVsdC5janMnO1xuXG5zZXRUcmFuc3BvcnRPcHRpb25zUmVzb2x2ZXIoKCkgPT4gaW5qZWN0KCdvYnNpZGlhblRyYW5zcG9ydCcpKTtcbnNldFZhdWx0UGF0aFJlc29sdmVyKCgpID0+IGluamVjdCgndGVtcFZhdWx0UGF0aCcpKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgY3JlYXRlU2V0dXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVNldHVwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGZpbGVzL2ZvbGRlcnMgdG8gd3JpdGUgaW50byB0aGUgdmF1bHQgYmVmb3JlIE9ic2lkaWFuIG9wZW5zIGl0IChzZWVcbiAgICoge0BsaW5rIENvcmVTZXR1cFBhcmFtcy5wb3B1bGF0ZX0pLiBBIHRodW5rIHNvIGxhcmdlIGZpeHR1cmVzIGFyZSBidWlsdCBsYXppbHksXG4gICAqIG9uY2UsIGluIHRoZSBzZXR1cCBwcm9jZXNzLlxuICAgKi9cbiAgcG9wdWxhdGU/KHRoaXM6IHZvaWQpOiBQb3B1bGF0ZUZpbGVzUGFyYW1zO1xufVxuXG4vKipcbiAqIEEgVml0ZXN0IGBnbG9iYWxTZXR1cGAgbW9kdWxlJ3MgYHNldHVwYCAvIGB0ZWFyZG93bmAgcGFpci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RHbG9iYWxTZXR1cCB7XG4gIHNldHVwKHRoaXM6IHZvaWQsIHByb2plY3Q6IFRlc3RQcm9qZWN0KTogUHJvbWlzZTx2b2lkPjtcbiAgdGVhcmRvd24odGhpczogdm9pZCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFZpdGVzdCBnbG9iYWwgc2V0dXAvdGVhcmRvd24gcGFpciwgb3B0aW9uYWxseSBwcmUtcG9wdWxhdGluZyB0aGUgdmF1bHRcbiAqIGJlZm9yZSBPYnNpZGlhbiBvcGVucyBpdCBcdTIwMTQgdXNlIHRoaXMgZm9yIGEgZGVkaWNhdGVkIGxhcmdlLXZhdWx0L3BlcmZvcm1hbmNlXG4gKiBwcm9qZWN0LiBUaGUgcGxhaW4ge0BsaW5rIHNldHVwfSAvIHtAbGluayB0ZWFyZG93bn0gZXhwb3J0cyBhcmUgdGhlIG5vLXBvcHVsYXRlXG4gKiBjYXNlIChgY3JlYXRlU2V0dXAoKWApLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gU2V0dXAgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBgc2V0dXBgIGFuZCBgdGVhcmRvd25gIGZ1bmN0aW9ucyB0byByZS1leHBvcnQgZnJvbSBhIGBnbG9iYWxTZXR1cGAgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2V0dXAob3B0aW9ucz86IENyZWF0ZVNldHVwT3B0aW9ucyk6IFZpdGVzdEdsb2JhbFNldHVwIHtcbiAgbGV0IHNldHVwUmVzdWx0OiBDb3JlU2V0dXBSZXN1bHQgfCB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHsgc2V0dXAsIHRlYXJkb3duIH07XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2V0dXAocHJvamVjdDogVGVzdFByb2plY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlbnZpcm9ubWVudE9wdGlvbnMgPSBwcm9qZWN0LmNvbmZpZy5lbnZpcm9ubWVudE9wdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdHJhbnNwb3J0T3B0aW9ucyA9IGVudmlyb25tZW50T3B0aW9ucz8uWydvYnNpZGlhblRyYW5zcG9ydCddIGFzIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsYWJlbCA9IHRyYW5zcG9ydE9wdGlvbnM/LnR5cGUgPz8gJ29ic2lkaWFuLWNkcCc7XG5cbiAgICB0cnkge1xuICAgICAgc2V0dXBSZXN1bHQgPSBhd2FpdCBjb3JlU2V0dXAoeyBwb3B1bGF0ZTogb3B0aW9ucz8ucG9wdWxhdGU/LigpLCB0cmFuc3BvcnRPcHRpb25zIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAvLyBDYXRjaCBzZXR1cCBlcnJvcnMgc28gdGhhdCBvdGhlciBwcm9qZWN0cycgdGVzdHMgY2FuIHN0aWxsIHJ1bi5cbiAgICAgIC8vIEluZGl2aWR1YWwgdGVzdHMgaW4gdGhpcyBwcm9qZWN0IHdpbGwgZmFpbCB3aXRoIHRoZSBzdG9yZWQgZXJyb3JcbiAgICAgIC8vIFdoZW4gdGhleSB0cnkgdG8gaW5qZWN0IHRoZSB0ZW1wIHZhdWx0IHBhdGguXG4gICAgICBsb2coYFtpbnRlZ3JhdGlvbi1zZXR1cDoke2xhYmVsfV0gU2V0dXAgZmFpbGVkICh0ZXN0cyBmb3IgdGhpcyBwcm9qZWN0IHdpbGwgYmUgc2tpcHBlZCk6ICR7ZXJyb3JUb1N0cmluZyhlcnJvcil9YCk7XG4gICAgICBwcm9qZWN0LnByb3ZpZGUoJ3NldHVwRXJyb3InLCBlcnJvclRvU3RyaW5nKGVycm9yKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvamVjdC5wcm92aWRlKCdvYnNpZGlhblRyYW5zcG9ydCcsIHNldHVwUmVzdWx0LnRyYW5zcG9ydE9wdGlvbnMpO1xuICAgIHByb2plY3QucHJvdmlkZSgndGVtcFZhdWx0UGF0aCcsIHNldHVwUmVzdWx0LnRlbXBWYXVsdC5wYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHRlYXJkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGNvcmVUZWFyZG93bihzZXR1cFJlc3VsdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0ZW1wb3JhcnkgdmF1bHQgcHJvdmlkZWQgYnkgdGhlIGdsb2JhbCBzZXR1cC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdGVtcG9yYXJ5IHZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcFZhdWx0KCk6IFRlbXBWYXVsdCB7XG4gIGNvbnN0IHRlbXBWYXVsdFBhdGggPSBpbmplY3QoJ3RlbXBWYXVsdFBhdGgnKTtcbiAgY29uc3Qgc2V0dXBFcnJvck1lc3NhZ2UgPSBpbmplY3QoJ3NldHVwRXJyb3InKTtcbiAgaWYgKHNldHVwRXJyb3JNZXNzYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlZ3JhdGlvbiBzZXR1cCBmYWlsZWQgXHUyMDE0IGNhbm5vdCBnZXQgdGVtcCB2YXVsdDogJHtzZXR1cEVycm9yTWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gbmV3IFRlbXBWYXVsdCh0ZW1wVmF1bHRQYXRoKTtcbn1cblxuY29uc3QgZGVmYXVsdEdsb2JhbFNldHVwID0gY3JlYXRlU2V0dXAoKTtcblxuLyoqXG4gKiBWaXRlc3QgZ2xvYmFsIHNldHVwIGZ1bmN0aW9uIChubyBwcmUtcG9wdWxhdGlvbikuXG4gKlxuICogQ29waWVzIHRoZSBidWlsdCBwbHVnaW4gaW50byBhIHRlbXBvcmFyeSB2YXVsdCwgZW5hYmxlcyBpdCB2aWEgdGhlIE9ic2lkaWFuIENMSSxcbiAqIGFuZCBwcm92aWRlcyBgdGVtcFZhdWx0UGF0aGAgdG8gdGVzdHMuXG4gKlxuICogQHBhcmFtIHByb2plY3QgLSBUaGUgVml0ZXN0IHByb2plY3QuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHNldHVwIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldHVwID0gZGVmYXVsdEdsb2JhbFNldHVwLnNldHVwO1xuXG4vKipcbiAqIFZpdGVzdCBnbG9iYWwgdGVhcmRvd24gZnVuY3Rpb24uXG4gKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGVhcmRvd24gY29tcGxldGVzLlxuICovXG5leHBvcnQgY29uc3QgdGVhcmRvd24gPSBkZWZhdWx0R2xvYmFsU2V0dXAudGVhcmRvd247XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUEsb0JBQXVCO0FBTXZCLDhCQUdPO0FBQ1AsNkJBQThCO0FBQzlCLCtCQUdPO0FBQ1AsaUJBQW9CO0FBQ3BCLHdCQUEwQjtBQUFBLElBRTFCLHFEQUE0QixVQUFNLHNCQUFPLG1CQUFtQixDQUFDO0FBQUEsSUFDN0QsOENBQXFCLFVBQU0sc0JBQU8sZUFBZSxDQUFDO0FBK0IzQyxTQUFTLFlBQVksU0FBaUQ7QUFDM0UsTUFBSTtBQUVKLFNBQU8sRUFBRSxPQUFBQSxRQUFPLFVBQUFDLFVBQVM7QUFFekIsaUJBQWVELE9BQU0sU0FBcUM7QUFDeEQsVUFBTSxxQkFBcUIsUUFBUSxPQUFPO0FBQzFDLFVBQU0sbUJBQW1CLHFCQUFxQixtQkFBbUI7QUFDakUsVUFBTSxRQUFRLGtCQUFrQixRQUFRO0FBRXhDLFFBQUk7QUFDRixvQkFBYyxVQUFNLG9DQUFVLEVBQUUsVUFBVSxTQUFTLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztBQUFBLElBQ3JGLFNBQVMsT0FBZ0I7QUFJdkIsMEJBQUksc0JBQXNCLEtBQUssZ0VBQTRELHNDQUFjLEtBQUssQ0FBQyxFQUFFO0FBQ2pILGNBQVEsUUFBUSxrQkFBYyxzQ0FBYyxLQUFLLENBQUM7QUFDbEQ7QUFBQSxJQUNGO0FBRUEsWUFBUSxRQUFRLHFCQUFxQixZQUFZLGdCQUFnQjtBQUNqRSxZQUFRLFFBQVEsaUJBQWlCLFlBQVksVUFBVSxJQUFJO0FBQUEsRUFDN0Q7QUFFQSxpQkFBZUMsWUFBMEI7QUFDdkMsY0FBTSx1Q0FBYSxXQUFXO0FBQUEsRUFDaEM7QUFDRjtBQU9PLFNBQVMsZUFBMEI7QUFDeEMsUUFBTSxvQkFBZ0Isc0JBQU8sZUFBZTtBQUM1QyxRQUFNLHdCQUFvQixzQkFBTyxZQUFZO0FBQzdDLE1BQUksbUJBQW1CO0FBQ3JCLFVBQU0sSUFBSSxNQUFNLDBEQUFxRCxpQkFBaUIsRUFBRTtBQUFBLEVBQzFGO0FBQ0EsU0FBTyxJQUFJLDRCQUFVLGFBQWE7QUFDcEM7QUFFQSxNQUFNLHFCQUFxQixZQUFZO0FBV2hDLE1BQU0sUUFBUSxtQkFBbUI7QUFTakMsTUFBTSxXQUFXLG1CQUFtQjsiLAogICJuYW1lcyI6IFsic2V0dXAiLCAidGVhcmRvd24iXQp9Cg==
79
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3ZpdGVzdC9nbG9iYWwtc2V0dXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBWaXRlc3QgZ2xvYmFsIHNldHVwIGFuZCB0ZWFyZG93biBhZGFwdGVyLlxuICpcbiAqIERlbGVnYXRlcyB0byB0aGUgZnJhbWV3b3JrLWFnbm9zdGljIGNvcmUgYW5kIGJyaWRnZXMgY29udGV4dFxuICogdG8gdGVzdCB3b3JrZXJzIHZpYSBWaXRlc3QncyBgcHJvamVjdC5wcm92aWRlYCAvIGBpbmplY3RgLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHNldHVwIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IFRlc3RQcm9qZWN0IH0gZnJvbSAndml0ZXN0L25vZGUnO1xuXG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IENvcmVTZXR1cFJlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC1zZXR1cC1jb3JlLmNqcyc7XG5pbXBvcnQgdHlwZSB7IFBvcHVsYXRlRmlsZXNQYXJhbXMgfSBmcm9tICcuLi90ZW1wLXZhdWx0LmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5cbmltcG9ydCB7XG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi4vY29udGV4dC1wcm92aWRlci5janMnO1xuaW1wb3J0IHsgZXJyb3JUb1N0cmluZyB9IGZyb20gJy4uL2Vycm9yLXRvLXN0cmluZy5janMnO1xuaW1wb3J0IHtcbiAgY29yZVNldHVwLFxuICBjb3JlVGVhcmRvd25cbn0gZnJvbSAnLi4vZ2xvYmFsLXNldHVwLWNvcmUuY2pzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4uL2xvZy5janMnO1xuaW1wb3J0IHsgVGVtcFZhdWx0IH0gZnJvbSAnLi4vdGVtcC12YXVsdC5janMnO1xuXG5zZXRUcmFuc3BvcnRPcHRpb25zUmVzb2x2ZXIoKCkgPT4gaW5qZWN0KCdvYnNpZGlhblRyYW5zcG9ydCcpKTtcbnNldFZhdWx0UGF0aFJlc29sdmVyKCgpID0+IGluamVjdCgndGVtcFZhdWx0UGF0aCcpKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgY3JlYXRlU2V0dXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVNldHVwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb21tdW5pdHktcGx1Z2luIGlkcyB0byBlbmFibGUgaW4gdGhlIHZhdWx0IGluIGFkZGl0aW9uIHRvIHRoZSBwbHVnaW4tdW5kZXItdGVzdCxcbiAgICogYWZ0ZXIgaXQgaXMgZW5hYmxlZCAoc2VlIHtAbGluayBDb3JlU2V0dXBQYXJhbXMuZW5hYmxlQ29tbXVuaXR5UGx1Z2luc30pLiBTZWVkIGVhY2hcbiAgICogcGx1Z2luJ3MgYnVpbHQgZmlsZXMgdmlhIHtAbGluayBDcmVhdGVTZXR1cE9wdGlvbnMucG9wdWxhdGV9IChlLmcuIHdpdGggYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVgKVxuICAgKiBzbyB0aGUgZW5hYmxlIGZpbmRzIHRoZW0gb24gZGlzay5cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUNvbW11bml0eVBsdWdpbnM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIGJ1aWx0IHBsdWdpbiBpbiB0aGUgdGVtcCB2YXVsdC4gRGVmYXVsdHNcbiAgICogdG8gYHRydWVgLiBTZXQgdG8gYGZhbHNlYCBmb3IgYSAqKm5vbi1wbHVnaW4qKiBjb25zdW1lciB0aGF0IG9ubHkgbmVlZHMgYVxuICAgKiByZWdpc3RlcmVkLCBlbXB0eSB2YXVsdCB0byBgZXZhbEluT2JzaWRpYW5gIGFnYWluc3QgXHUyMDE0IHRoZSBvd25lZCBpbnN0YW5jZSBpc1xuICAgKiBzdGlsbCBsYXVuY2hlZCBhbmQgaXRzIGVuZHBvaW50IHB1Ymxpc2hlZCB0byB3b3JrZXJzLCBzbyByZS1leHBvcnRpbmdcbiAgICogYGNyZWF0ZVNldHVwKHsgaW5zdGFsbFBsdWdpbjogZmFsc2UgfSlgIHJldXNlcyB0aGUgc2FtZSBhdHRhY2ggd2lyaW5nIHdpdGggbm9cbiAgICogcGx1Z2luIGNvcHkvZW5hYmxlLiBTZWUge0BsaW5rIENvcmVTZXR1cFBhcmFtcy5pbnN0YWxsUGx1Z2lufS5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxQbHVnaW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGZpbGVzL2ZvbGRlcnMgdG8gd3JpdGUgaW50byB0aGUgdmF1bHQgYmVmb3JlIE9ic2lkaWFuIG9wZW5zIGl0IChzZWVcbiAgICoge0BsaW5rIENvcmVTZXR1cFBhcmFtcy5wb3B1bGF0ZX0pLiBBIHRodW5rIHNvIGxhcmdlIGZpeHR1cmVzIGFyZSBidWlsdCBsYXppbHksXG4gICAqIG9uY2UsIGluIHRoZSBzZXR1cCBwcm9jZXNzLlxuICAgKi9cbiAgcG9wdWxhdGU/KHRoaXM6IHZvaWQpOiBQb3B1bGF0ZUZpbGVzUGFyYW1zO1xufVxuXG4vKipcbiAqIEEgVml0ZXN0IGBnbG9iYWxTZXR1cGAgbW9kdWxlJ3MgYHNldHVwYCAvIGB0ZWFyZG93bmAgcGFpci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RHbG9iYWxTZXR1cCB7XG4gIHNldHVwKHRoaXM6IHZvaWQsIHByb2plY3Q6IFRlc3RQcm9qZWN0KTogUHJvbWlzZTx2b2lkPjtcbiAgdGVhcmRvd24odGhpczogdm9pZCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFZpdGVzdCBnbG9iYWwgc2V0dXAvdGVhcmRvd24gcGFpciwgb3B0aW9uYWxseSBwcmUtcG9wdWxhdGluZyB0aGUgdmF1bHRcbiAqIGJlZm9yZSBPYnNpZGlhbiBvcGVucyBpdCBcdTIwMTQgdXNlIHRoaXMgZm9yIGEgZGVkaWNhdGVkIGxhcmdlLXZhdWx0L3BlcmZvcm1hbmNlXG4gKiBwcm9qZWN0LiBUaGUgcGxhaW4ge0BsaW5rIHNldHVwfSAvIHtAbGluayB0ZWFyZG93bn0gZXhwb3J0cyBhcmUgdGhlIG5vLXBvcHVsYXRlXG4gKiBjYXNlIChgY3JlYXRlU2V0dXAoKWApLiBQYXNzIGB7IGluc3RhbGxQbHVnaW46IGZhbHNlIH1gIGZvciBhIG5vbi1wbHVnaW4gY29uc3VtZXJcbiAqIHRoYXQgb25seSBuZWVkcyBhIHJlZ2lzdGVyZWQsIGVtcHR5IHZhdWx0IChzZWUge0BsaW5rIENyZWF0ZVNldHVwT3B0aW9ucy5pbnN0YWxsUGx1Z2lufSkuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBTZXR1cCBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGBzZXR1cGAgYW5kIGB0ZWFyZG93bmAgZnVuY3Rpb25zIHRvIHJlLWV4cG9ydCBmcm9tIGEgYGdsb2JhbFNldHVwYCBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXR1cChvcHRpb25zPzogQ3JlYXRlU2V0dXBPcHRpb25zKTogVml0ZXN0R2xvYmFsU2V0dXAge1xuICBsZXQgc2V0dXBSZXN1bHQ6IENvcmVTZXR1cFJlc3VsdCB8IHVuZGVmaW5lZDtcblxuICByZXR1cm4geyBzZXR1cCwgdGVhcmRvd24gfTtcblxuICBhc3luYyBmdW5jdGlvbiBzZXR1cChwcm9qZWN0OiBUZXN0UHJvamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudmlyb25tZW50T3B0aW9ucyA9IHByb2plY3QuY29uZmlnLmVudmlyb25tZW50T3B0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0cmFuc3BvcnRPcHRpb25zID0gZW52aXJvbm1lbnRPcHRpb25zPy5bJ29ic2lkaWFuVHJhbnNwb3J0J10gYXMgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxhYmVsID0gdHJhbnNwb3J0T3B0aW9ucz8udHlwZSA/PyAnb2JzaWRpYW4tY2RwJztcblxuICAgIHRyeSB7XG4gICAgICBzZXR1cFJlc3VsdCA9IGF3YWl0IGNvcmVTZXR1cCh7XG4gICAgICAgIGVuYWJsZUNvbW11bml0eVBsdWdpbnM6IG9wdGlvbnM/LmVuYWJsZUNvbW11bml0eVBsdWdpbnMsXG4gICAgICAgIGluc3RhbGxQbHVnaW46IG9wdGlvbnM/Lmluc3RhbGxQbHVnaW4sXG4gICAgICAgIHBvcHVsYXRlOiBvcHRpb25zPy5wb3B1bGF0ZT8uKCksXG4gICAgICAgIHRyYW5zcG9ydE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAvLyBDYXRjaCBzZXR1cCBlcnJvcnMgc28gdGhhdCBvdGhlciBwcm9qZWN0cycgdGVzdHMgY2FuIHN0aWxsIHJ1bi5cbiAgICAgIC8vIEluZGl2aWR1YWwgdGVzdHMgaW4gdGhpcyBwcm9qZWN0IHdpbGwgZmFpbCB3aXRoIHRoZSBzdG9yZWQgZXJyb3JcbiAgICAgIC8vIFdoZW4gdGhleSB0cnkgdG8gaW5qZWN0IHRoZSB0ZW1wIHZhdWx0IHBhdGguXG4gICAgICBsb2coYFtpbnRlZ3JhdGlvbi1zZXR1cDoke2xhYmVsfV0gU2V0dXAgZmFpbGVkICh0ZXN0cyBmb3IgdGhpcyBwcm9qZWN0IHdpbGwgYmUgc2tpcHBlZCk6ICR7ZXJyb3JUb1N0cmluZyhlcnJvcil9YCk7XG4gICAgICBwcm9qZWN0LnByb3ZpZGUoJ3NldHVwRXJyb3InLCBlcnJvclRvU3RyaW5nKGVycm9yKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvamVjdC5wcm92aWRlKCdvYnNpZGlhblRyYW5zcG9ydCcsIHNldHVwUmVzdWx0LnRyYW5zcG9ydE9wdGlvbnMpO1xuICAgIHByb2plY3QucHJvdmlkZSgndGVtcFZhdWx0UGF0aCcsIHNldHVwUmVzdWx0LnRlbXBWYXVsdC5wYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHRlYXJkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGNvcmVUZWFyZG93bihzZXR1cFJlc3VsdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0ZW1wb3JhcnkgdmF1bHQgcHJvdmlkZWQgYnkgdGhlIGdsb2JhbCBzZXR1cC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdGVtcG9yYXJ5IHZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcFZhdWx0KCk6IFRlbXBWYXVsdCB7XG4gIGNvbnN0IHRlbXBWYXVsdFBhdGggPSBpbmplY3QoJ3RlbXBWYXVsdFBhdGgnKTtcbiAgY29uc3Qgc2V0dXBFcnJvck1lc3NhZ2UgPSBpbmplY3QoJ3NldHVwRXJyb3InKTtcbiAgaWYgKHNldHVwRXJyb3JNZXNzYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlZ3JhdGlvbiBzZXR1cCBmYWlsZWQgXHUyMDE0IGNhbm5vdCBnZXQgdGVtcCB2YXVsdDogJHtzZXR1cEVycm9yTWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gbmV3IFRlbXBWYXVsdCh0ZW1wVmF1bHRQYXRoKTtcbn1cblxuY29uc3QgZGVmYXVsdEdsb2JhbFNldHVwID0gY3JlYXRlU2V0dXAoKTtcblxuLyoqXG4gKiBWaXRlc3QgZ2xvYmFsIHNldHVwIGZ1bmN0aW9uIChubyBwcmUtcG9wdWxhdGlvbikuXG4gKlxuICogQ29waWVzIHRoZSBidWlsdCBwbHVnaW4gaW50byBhIHRlbXBvcmFyeSB2YXVsdCwgZW5hYmxlcyBpdCB2aWEgYSByZW5kZXJlciBldmFsXG4gKiBvdmVyIHRoZSB0cmFuc3BvcnQsIGFuZCBwcm92aWRlcyBgdGVtcFZhdWx0UGF0aGAgdG8gdGVzdHMuXG4gKlxuICogQHBhcmFtIHByb2plY3QgLSBUaGUgVml0ZXN0IHByb2plY3QuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHNldHVwIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldHVwID0gZGVmYXVsdEdsb2JhbFNldHVwLnNldHVwO1xuXG4vKipcbiAqIFZpdGVzdCBnbG9iYWwgdGVhcmRvd24gZnVuY3Rpb24uXG4gKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGVhcmRvd24gY29tcGxldGVzLlxuICovXG5leHBvcnQgY29uc3QgdGVhcmRvd24gPSBkZWZhdWx0R2xvYmFsU2V0dXAudGVhcmRvd247XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUEsb0JBQXVCO0FBTXZCLDhCQUdPO0FBQ1AsNkJBQThCO0FBQzlCLCtCQUdPO0FBQ1AsaUJBQW9CO0FBQ3BCLHdCQUEwQjtBQUFBLElBRTFCLHFEQUE0QixVQUFNLHNCQUFPLG1CQUFtQixDQUFDO0FBQUEsSUFDN0QsOENBQXFCLFVBQU0sc0JBQU8sZUFBZSxDQUFDO0FBa0QzQyxTQUFTLFlBQVksU0FBaUQ7QUFDM0UsTUFBSTtBQUVKLFNBQU8sRUFBRSxPQUFBQSxRQUFPLFVBQUFDLFVBQVM7QUFFekIsaUJBQWVELE9BQU0sU0FBcUM7QUFDeEQsVUFBTSxxQkFBcUIsUUFBUSxPQUFPO0FBQzFDLFVBQU0sbUJBQW1CLHFCQUFxQixtQkFBbUI7QUFDakUsVUFBTSxRQUFRLGtCQUFrQixRQUFRO0FBRXhDLFFBQUk7QUFDRixvQkFBYyxVQUFNLG9DQUFVO0FBQUEsUUFDNUIsd0JBQXdCLFNBQVM7QUFBQSxRQUNqQyxlQUFlLFNBQVM7QUFBQSxRQUN4QixVQUFVLFNBQVMsV0FBVztBQUFBLFFBQzlCO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxTQUFTLE9BQWdCO0FBSXZCLDBCQUFJLHNCQUFzQixLQUFLLGdFQUE0RCxzQ0FBYyxLQUFLLENBQUMsRUFBRTtBQUNqSCxjQUFRLFFBQVEsa0JBQWMsc0NBQWMsS0FBSyxDQUFDO0FBQ2xEO0FBQUEsSUFDRjtBQUVBLFlBQVEsUUFBUSxxQkFBcUIsWUFBWSxnQkFBZ0I7QUFDakUsWUFBUSxRQUFRLGlCQUFpQixZQUFZLFVBQVUsSUFBSTtBQUFBLEVBQzdEO0FBRUEsaUJBQWVDLFlBQTBCO0FBQ3ZDLGNBQU0sdUNBQWEsV0FBVztBQUFBLEVBQ2hDO0FBQ0Y7QUFPTyxTQUFTLGVBQTBCO0FBQ3hDLFFBQU0sb0JBQWdCLHNCQUFPLGVBQWU7QUFDNUMsUUFBTSx3QkFBb0Isc0JBQU8sWUFBWTtBQUM3QyxNQUFJLG1CQUFtQjtBQUNyQixVQUFNLElBQUksTUFBTSwwREFBcUQsaUJBQWlCLEVBQUU7QUFBQSxFQUMxRjtBQUNBLFNBQU8sSUFBSSw0QkFBVSxhQUFhO0FBQ3BDO0FBRUEsTUFBTSxxQkFBcUIsWUFBWTtBQVdoQyxNQUFNLFFBQVEsbUJBQW1CO0FBU2pDLE1BQU0sV0FBVyxtQkFBbUI7IiwKICAibmFtZXMiOiBbInNldHVwIiwgInRlYXJkb3duIl0KfQo=
@@ -13,6 +13,22 @@ import { TempVault } from '../temp-vault.cjs';
13
13
  * Options for {@link createSetup}.
14
14
  */
15
15
  export interface CreateSetupOptions {
16
+ /**
17
+ * Community-plugin ids to enable in the vault in addition to the plugin-under-test,
18
+ * after it is enabled (see {@link CoreSetupParams.enableCommunityPlugins}). Seed each
19
+ * plugin's built files via {@link CreateSetupOptions.populate} (e.g. with `buildDemoVaultPopulate`)
20
+ * so the enable finds them on disk.
21
+ */
22
+ readonly enableCommunityPlugins?: readonly string[];
23
+ /**
24
+ * Whether to install and enable the built plugin in the temp vault. Defaults
25
+ * to `true`. Set to `false` for a **non-plugin** consumer that only needs a
26
+ * registered, empty vault to `evalInObsidian` against — the owned instance is
27
+ * still launched and its endpoint published to workers, so re-exporting
28
+ * `createSetup({ installPlugin: false })` reuses the same attach wiring with no
29
+ * plugin copy/enable. See {@link CoreSetupParams.installPlugin}.
30
+ */
31
+ readonly installPlugin?: boolean;
16
32
  /**
17
33
  * Returns files/folders to write into the vault before Obsidian opens it (see
18
34
  * {@link CoreSetupParams.populate}). A thunk so large fixtures are built lazily,
@@ -31,7 +47,8 @@ export interface VitestGlobalSetup {
31
47
  * Creates a Vitest global setup/teardown pair, optionally pre-populating the vault
32
48
  * before Obsidian opens it — use this for a dedicated large-vault/performance
33
49
  * project. The plain {@link setup} / {@link teardown} exports are the no-populate
34
- * case (`createSetup()`).
50
+ * case (`createSetup()`). Pass `{ installPlugin: false }` for a non-plugin consumer
51
+ * that only needs a registered, empty vault (see {@link CreateSetupOptions.installPlugin}).
35
52
  *
36
53
  * @param options - Setup options.
37
54
  * @returns The `setup` and `teardown` functions to re-export from a `globalSetup` module.
@@ -46,8 +63,8 @@ export declare function getTempVault(): TempVault;
46
63
  /**
47
64
  * Vitest global setup function (no pre-population).
48
65
  *
49
- * Copies the built plugin into a temporary vault, enables it via the Obsidian CLI,
50
- * and provides `tempVaultPath` to tests.
66
+ * Copies the built plugin into a temporary vault, enables it via a renderer eval
67
+ * over the transport, and provides `tempVaultPath` to tests.
51
68
  *
52
69
  * @param project - The Vitest project.
53
70
  * @returns A promise that resolves when setup completes.
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Pure helpers for parsing `emulator -list-avds` output: extracting the
5
+ * available AVD names and checking whether a requested AVD exists.
6
+ *
7
+ * Kept separate from the integration-only `transport-factory` (excluded from
8
+ * unit tests) so the parsing stays unit-testable — the factory itself shells out
9
+ * to the `emulator` binary.
10
+ */
11
+ /**
12
+ * Parameters for {@link checkAvdExists}.
13
+ */
14
+ export interface CheckAvdExistsParams {
15
+ /** Raw stdout of `emulator -list-avds` — one AVD name per line. */
16
+ readonly avdListOutput: string;
17
+ /** The AVD name to look for. */
18
+ readonly avdName: string;
19
+ }
20
+ /**
21
+ * Decides whether a given AVD exists, from the raw stdout of
22
+ * `emulator -list-avds`.
23
+ *
24
+ * @param params - The listing output and the AVD name to check.
25
+ * @returns `true` when the AVD name appears in the listing.
26
+ */
27
+ export declare function checkAvdExists(params: CheckAvdExistsParams): boolean;
28
+ /**
29
+ * Parses the available AVD names from the raw stdout of `emulator -list-avds`.
30
+ *
31
+ * The command prints one AVD name per line; blank lines and surrounding
32
+ * whitespace are ignored. Some emulator builds emit an informational banner
33
+ * (e.g. `INFO | ...`) to stdout before the list, so those lines are dropped.
34
+ *
35
+ * @param avdListOutput - Raw stdout of `emulator -list-avds`.
36
+ * @returns The available AVD names, in listed order.
37
+ */
38
+ export declare function listAvailableAvds(avdListOutput: string): string[];
@@ -0,0 +1,11 @@
1
+ function checkAvdExists(params) {
2
+ return listAvailableAvds(params.avdListOutput).includes(params.avdName);
3
+ }
4
+ function listAvailableAvds(avdListOutput) {
5
+ return avdListOutput.split("\n").map((line) => line.trim()).filter((line) => line.length > 0 && !line.includes("|"));
6
+ }
7
+ export {
8
+ checkAvdExists,
9
+ listAvailableAvds
10
+ };
11
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F2ZC1saXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBoZWxwZXJzIGZvciBwYXJzaW5nIGBlbXVsYXRvciAtbGlzdC1hdmRzYCBvdXRwdXQ6IGV4dHJhY3RpbmcgdGhlXG4gKiBhdmFpbGFibGUgQVZEIG5hbWVzIGFuZCBjaGVja2luZyB3aGV0aGVyIGEgcmVxdWVzdGVkIEFWRCBleGlzdHMuXG4gKlxuICogS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBpbnRlZ3JhdGlvbi1vbmx5IGB0cmFuc3BvcnQtZmFjdG9yeWAgKGV4Y2x1ZGVkIGZyb21cbiAqIHVuaXQgdGVzdHMpIHNvIHRoZSBwYXJzaW5nIHN0YXlzIHVuaXQtdGVzdGFibGUgXHUyMDE0IHRoZSBmYWN0b3J5IGl0c2VsZiBzaGVsbHMgb3V0XG4gKiB0byB0aGUgYGVtdWxhdG9yYCBiaW5hcnkuXG4gKi9cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY2hlY2tBdmRFeGlzdHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrQXZkRXhpc3RzUGFyYW1zIHtcbiAgLyoqIFJhdyBzdGRvdXQgb2YgYGVtdWxhdG9yIC1saXN0LWF2ZHNgIFx1MjAxNCBvbmUgQVZEIG5hbWUgcGVyIGxpbmUuICovXG4gIHJlYWRvbmx5IGF2ZExpc3RPdXRwdXQ6IHN0cmluZztcblxuICAvKiogVGhlIEFWRCBuYW1lIHRvIGxvb2sgZm9yLiAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgZ2l2ZW4gQVZEIGV4aXN0cywgZnJvbSB0aGUgcmF3IHN0ZG91dCBvZlxuICogYGVtdWxhdG9yIC1saXN0LWF2ZHNgLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbGlzdGluZyBvdXRwdXQgYW5kIHRoZSBBVkQgbmFtZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBBVkQgbmFtZSBhcHBlYXJzIGluIHRoZSBsaXN0aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBdmRFeGlzdHMocGFyYW1zOiBDaGVja0F2ZEV4aXN0c1BhcmFtcyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGlzdEF2YWlsYWJsZUF2ZHMocGFyYW1zLmF2ZExpc3RPdXRwdXQpLmluY2x1ZGVzKHBhcmFtcy5hdmROYW1lKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGF2YWlsYWJsZSBBVkQgbmFtZXMgZnJvbSB0aGUgcmF3IHN0ZG91dCBvZiBgZW11bGF0b3IgLWxpc3QtYXZkc2AuXG4gKlxuICogVGhlIGNvbW1hbmQgcHJpbnRzIG9uZSBBVkQgbmFtZSBwZXIgbGluZTsgYmxhbmsgbGluZXMgYW5kIHN1cnJvdW5kaW5nXG4gKiB3aGl0ZXNwYWNlIGFyZSBpZ25vcmVkLiBTb21lIGVtdWxhdG9yIGJ1aWxkcyBlbWl0IGFuIGluZm9ybWF0aW9uYWwgYmFubmVyXG4gKiAoZS5nLiBgSU5GTyAgICB8IC4uLmApIHRvIHN0ZG91dCBiZWZvcmUgdGhlIGxpc3QsIHNvIHRob3NlIGxpbmVzIGFyZSBkcm9wcGVkLlxuICpcbiAqIEBwYXJhbSBhdmRMaXN0T3V0cHV0IC0gUmF3IHN0ZG91dCBvZiBgZW11bGF0b3IgLWxpc3QtYXZkc2AuXG4gKiBAcmV0dXJucyBUaGUgYXZhaWxhYmxlIEFWRCBuYW1lcywgaW4gbGlzdGVkIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdEF2YWlsYWJsZUF2ZHMoYXZkTGlzdE91dHB1dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gYXZkTGlzdE91dHB1dFxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSlcbiAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLmxlbmd0aCA+IDAgJiYgIWxpbmUuaW5jbHVkZXMoJ3wnKSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUE2Qk8sU0FBUyxlQUFlLFFBQXVDO0FBQ3BFLFNBQU8sa0JBQWtCLE9BQU8sYUFBYSxFQUFFLFNBQVMsT0FBTyxPQUFPO0FBQ3hFO0FBWU8sU0FBUyxrQkFBa0IsZUFBaUM7QUFDakUsU0FBTyxjQUNKLE1BQU0sSUFBSSxFQUNWLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLEVBQ3pCLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxLQUFLLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQztBQUM1RDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Builds a complete {@link PopulateFilesParams} map for a plugin's in-repo `demo-vault/`, ready to seed into
5
+ * the temp vault before Obsidian opens it. Composes {@link readDemoVaultTree} (the note tree) with the two
6
+ * pieces it deliberately omits: selected `.obsidian/*` config files, and the built binaries (+ `data.json`)
7
+ * of any extra community plugins the demo vault depends on (e.g. CodeScript Toolkit, `demo-vault-helper`).
8
+ *
9
+ * Pairs with the `enableCommunityPlugins` option of the global-setup `createSetup`: this seeds the binaries,
10
+ * that turns them on. It intentionally does NOT write `community-plugins.json` — the harness owns that file
11
+ * (it lists the plugin-under-test), and enabling the extras persists them.
12
+ */
13
+ import type { PopulateFilesParams } from './temp-vault.mjs';
14
+ /**
15
+ * Parameters for {@link buildDemoVaultPopulate}.
16
+ */
17
+ export interface BuildDemoVaultPopulateParams {
18
+ /**
19
+ * Absolute path to the plugin repo's `demo-vault/` directory.
20
+ */
21
+ readonly demoVaultPath: string;
22
+ /**
23
+ * Names (of files or directories, matched at any depth) to skip while reading the note tree — forwarded to
24
+ * {@link readDemoVaultTree}.
25
+ *
26
+ * @default `['.git', '.obsidian']`
27
+ */
28
+ readonly excludedNames?: Iterable<string>;
29
+ /**
30
+ * Community plugins to seed into `.obsidian/plugins/<pluginId>/` (binaries + optional `data.json`). Turn
31
+ * them on with the global-setup `createSetup({ enableCommunityPlugins })` option.
32
+ */
33
+ readonly injectPlugins?: readonly InjectPluginParams[];
34
+ /**
35
+ * `.obsidian/*` config files to carry over from the demo vault. {@link readDemoVaultTree} excludes the whole
36
+ * `.obsidian` directory, so config the vault relies on (preview-mode default, core plugins, appearance) must
37
+ * be re-added explicitly. Files that do not exist are skipped.
38
+ *
39
+ * @default `['app.json', 'appearance.json', 'core-plugins.json']`
40
+ */
41
+ readonly obsidianConfigFiles?: readonly string[];
42
+ }
43
+ /**
44
+ * A community plugin to seed into the demo vault alongside the note tree.
45
+ */
46
+ export interface InjectPluginParams {
47
+ /**
48
+ * Overlay written as `.obsidian/plugins/<pluginId>/data.json` (JSON, 2-space indent). Omit to keep whatever
49
+ * `data.json` (if any) already lives in {@link InjectPluginParams.sourceDir}.
50
+ */
51
+ readonly data?: unknown;
52
+ /**
53
+ * The community plugin's id (its `.obsidian/plugins/<pluginId>` folder name).
54
+ */
55
+ readonly pluginId: string;
56
+ /**
57
+ * Directory to read the plugin's built files from. Every file directly inside it is copied into
58
+ * `.obsidian/plugins/<pluginId>/`; `main.js` and `manifest.json` are required.
59
+ *
60
+ * @default `<demoVaultPath>/.obsidian/plugins/<pluginId>`
61
+ */
62
+ readonly sourceDir?: string;
63
+ }
64
+ /**
65
+ * Builds the full populate map for a plugin's `demo-vault/`: the note tree, the selected `.obsidian/*` config
66
+ * files, and every injected plugin's binaries (+ optional `data.json`).
67
+ *
68
+ * @param params - The {@link BuildDemoVaultPopulateParams}.
69
+ * @returns The populate map, ready to hand to a global setup's `populate` or {@link TempVault.populate}.
70
+ */
71
+ export declare function buildDemoVaultPopulate(params: BuildDemoVaultPopulateParams): PopulateFilesParams;