obsidian-dev-utils 101.6.0 → 101.7.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 (64) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/integration-test-plugin/main.js +4410 -3705
  3. package/dist/lib/cjs/__merged.cjs +26 -1
  4. package/dist/lib/cjs/__merged.d.cts +4 -1
  5. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  6. package/dist/lib/cjs/obsidian/components/component-ex.cjs +14 -1
  7. package/dist/lib/cjs/obsidian/components/component-ex.d.cts +11 -0
  8. package/dist/lib/cjs/obsidian/components/index.cjs +4 -1
  9. package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
  10. package/dist/lib/cjs/obsidian/components/plugin-gate-component.cjs +520 -0
  11. package/dist/lib/cjs/obsidian/components/plugin-gate-component.d.cts +299 -0
  12. package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.cjs +17 -38
  13. package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.d.cts +25 -18
  14. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +7 -2
  15. package/dist/lib/cjs/obsidian/css-class.cjs +3 -1
  16. package/dist/lib/cjs/obsidian/css-class.d.cts +9 -0
  17. package/dist/lib/cjs/obsidian/html-element.cjs +27 -3
  18. package/dist/lib/cjs/obsidian/html-element.d.cts +36 -0
  19. package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +15 -1
  20. package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +14 -0
  21. package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +14 -0
  22. package/dist/lib/cjs/obsidian/plugin/index.cjs +7 -1
  23. package/dist/lib/cjs/obsidian/plugin/index.d.cts +2 -0
  24. package/dist/lib/cjs/obsidian/plugin/plugin-api.cjs +2 -2
  25. package/dist/lib/cjs/obsidian/plugin/plugin-api.d.cts +34 -15
  26. package/dist/lib/cjs/obsidian/plugin/plugin-install-state.cjs +208 -0
  27. package/dist/lib/cjs/obsidian/plugin/plugin-install-state.d.cts +113 -0
  28. package/dist/lib/cjs/obsidian/plugin/plugin-lifecycle-events.cjs +161 -0
  29. package/dist/lib/cjs/obsidian/plugin/plugin-lifecycle-events.d.cts +119 -0
  30. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +241 -21
  31. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +133 -4
  32. package/dist/lib/esm/__merged.d.mts +4 -1
  33. package/dist/lib/esm/__merged.mjs +30 -2
  34. package/dist/lib/esm/generated-during-build.mjs +1 -1
  35. package/dist/lib/esm/obsidian/components/component-ex.d.mts +11 -0
  36. package/dist/lib/esm/obsidian/components/component-ex.mjs +14 -1
  37. package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
  38. package/dist/lib/esm/obsidian/components/index.mjs +3 -1
  39. package/dist/lib/esm/obsidian/components/plugin-gate-component.d.mts +299 -0
  40. package/dist/lib/esm/obsidian/components/plugin-gate-component.mjs +428 -0
  41. package/dist/lib/esm/obsidian/components/plugin-suggestion-component.d.mts +25 -18
  42. package/dist/lib/esm/obsidian/components/plugin-suggestion-component.mjs +21 -41
  43. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +7 -2
  44. package/dist/lib/esm/obsidian/css-class.d.mts +9 -0
  45. package/dist/lib/esm/obsidian/css-class.mjs +3 -1
  46. package/dist/lib/esm/obsidian/html-element.d.mts +36 -0
  47. package/dist/lib/esm/obsidian/html-element.mjs +24 -2
  48. package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +14 -0
  49. package/dist/lib/esm/obsidian/i18n/locales/en.mjs +15 -1
  50. package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +14 -0
  51. package/dist/lib/esm/obsidian/plugin/index.d.mts +2 -0
  52. package/dist/lib/esm/obsidian/plugin/index.mjs +5 -1
  53. package/dist/lib/esm/obsidian/plugin/plugin-api.d.mts +34 -15
  54. package/dist/lib/esm/obsidian/plugin/plugin-api.mjs +2 -2
  55. package/dist/lib/esm/obsidian/plugin/plugin-install-state.d.mts +113 -0
  56. package/dist/lib/esm/obsidian/plugin/plugin-install-state.mjs +106 -0
  57. package/dist/lib/esm/obsidian/plugin/plugin-lifecycle-events.d.mts +119 -0
  58. package/dist/lib/esm/obsidian/plugin/plugin-lifecycle-events.mjs +54 -0
  59. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +133 -4
  60. package/dist/lib/esm/obsidian/plugin/plugin.mjs +245 -21
  61. package/obsidian/components/plugin-gate-component/package.json +6 -0
  62. package/obsidian/plugin/plugin-install-state/package.json +6 -0
  63. package/obsidian/plugin/plugin-lifecycle-events/package.json +6 -0
  64. package/package.json +1 -1
@@ -184,6 +184,19 @@ class ComponentEx extends import_obsidian.Component {
184
184
  }
185
185
  return component;
186
186
  }
187
+ /**
188
+ * Checks whether a component is a direct child of this one.
189
+ *
190
+ * Only DIRECT children are reported — this is an ownership question, not a containment one. The caller that
191
+ * needs it is one holding several parents and deciding which of them a component belongs to, and for that a
192
+ * grandchild is the wrong answer: removing it from the parent that merely contains its parent would fail.
193
+ *
194
+ * @param component - The component to look for.
195
+ * @returns Whether the component is a direct child of this one.
196
+ */
197
+ hasChild(component) {
198
+ return this.childrenSet.has(component);
199
+ }
187
200
  /**
188
201
  * Loads the component.
189
202
  *
@@ -456,4 +469,4 @@ class ComponentEx extends import_obsidian.Component {
456
469
  0 && (module.exports = {
457
470
  ComponentEx
458
471
  });
459
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBzbmFwc2hvdCB9IGZyb20gJy4uLy4uL2FycmF5LnRzJztcbmltcG9ydCB7IGRpc3Bvc2UgfSBmcm9tICcuLi8uLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7XG4gIEVycm9yV3JhcHBlcixcbiAgU2lsZW50RXJyb3Jcbn0gZnJvbSAnLi4vLi4vZXJyb3IudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jU2luZ2xldG9uUHJvbWlzZVxufSBmcm9tICcuLi8uLi9mdW5jdGlvbi50cyc7XG5cbi8qKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcmVxdWlyZS1jb21wb25lbnQtc3VmZml4IC0tIEV4dGVuZGVkIGJhc2UgY2xhc3MuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RXggZXh0ZW5kcyBDb21wb25lbnQgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlsZHJlblNldCA9IG5ldyBTZXQ8Q29tcG9uZW50PigpO1xuICBwcml2YXRlIGhhc0JlZW5Mb2FkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBsb2FkRXJyb3JzOiBFcnJvcltdID0gW107XG4gIHByaXZhdGUgbG9hZFByb21pc2U6IG51bGwgfCBQcm9taXNlPHZvaWQ+ID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogTWlycm9ycyB0aGUgbmF0aXZlIGBDb21wb25lbnQuYWRkQ2hpbGRgIGNvbnRyYWN0OiBpZiB0aGlzIGNvbXBvbmVudCBpcyBhbHJlYWR5IGxvYWRlZCwgdGhlIGNoaWxkIGlzIGxvYWRlZFxuICAgKiBpbW1lZGlhdGVseSwgc28gYGNoaWxkLl9sb2FkZWRgIGlzIHNldCBiZWZvcmUgdGhpcyBtZXRob2QgcmV0dXJucyBldmVuIHdoZW4gdGhpcyBjb21wb25lbnQgaGFzIGFzeW5jIGxvYWQgbG9naWMuXG4gICAqIFRoZSBjaGlsZCdzIGFzeW5jIHRhaWwgKGlmIGFueSkgaXMgc2VxdWVuY2VkIGludG8gdGhlIGxvYWQgcHJvbWlzZSBzbyBhIGxhdGVyIHtAbGluayBsb2FkV2l0aFByb21pc2VzfSBjYWxsIGF3YWl0cyBpdC5cbiAgICpcbiAgICogQWRkaW5nIGEgY2hpbGQgQkVGT1JFIHRoZSBmaXJzdCBsb2FkIGlzIGxlZ2l0aW1hdGU6IHRoZSBjaGlsZCBpcyBxdWV1ZWQgYW5kIGxvYWRlZCB3aGVuIHRoaXMgY29tcG9uZW50IGxvYWRzLlxuICAgKiBBZGRpbmcgb25lIEFGVEVSIHRoaXMgY29tcG9uZW50IGhhcyBiZWVuIHVubG9hZGVkIGlzIG5vdCBcdTIwMTQgdGhlIGNoaWxkIHdvdWxkIG5ldmVyIGJlIGxvYWRlZCBhbmQgbmV2ZXIgdW5sb2FkZWRcbiAgICogKGEgbGVhayksIHNvIGl0IGlzIHJlZnVzZWQgd2l0aCBhIHtAbGluayBTaWxlbnRFcnJvcn0uIFRoZSB0eXBpY2FsIHNvdXJjZSBvZiBzdWNoIGEgY2FsbCBpcyBhbiBgYXN5bmNgIG1ldGhvZFxuICAgKiB0aGF0IHdhcyBzdXNwZW5kZWQgb24gYW4gYGF3YWl0YCB3aGVuIHRoZSBjb21wb25lbnQgZ290IHVubG9hZGVkIGFuZCB0aGVuIHJlc3VtZWQgb24gdGhlIGRlYWQgY29tcG9uZW50OyB0aGVcbiAgICoge0BsaW5rIFNpbGVudEVycm9yfSB1bndpbmRzIGl0IHF1aWV0bHkgKHNlZSB7QGxpbmsgaXNVbmxvYWRlZH0pLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqIEB0aHJvd3MgQSB7QGxpbmsgU2lsZW50RXJyb3J9IGlmIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bmxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTaWxlbnRFcnJvcignQ29tcG9uZW50IGlzIGFscmVhZHkgdW5sb2FkZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5hZGQoY29tcG9uZW50KTtcblxuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcCh0aGlzLmV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIERlc3BpdGUgdGhlIGRlY2xhcmVkIGB2b2lkYCByZXR1cm4gdHlwZSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgbG9hZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLmhhc0JlZW5Mb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRMb2FkU3RhdGUoKTtcblxuICAgIHRoaXMub25sb2FkKCk7XG5cbiAgICBjb25zdCBvbmxvYWRBc3luY1Byb21pc2UgPSB0aGlzLm9ubG9hZEFzeW5jKCk7XG4gICAgaWYgKG9ubG9hZEFzeW5jUHJvbWlzZSAhPT0gbm9vcEFzeW5jU2luZ2xldG9uUHJvbWlzZSkge1xuICAgICAgdGhpcy5hcHBlbmRFYWdlckxvYWRTdGVwKG9ubG9hZEFzeW5jUHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBzbmFwc2hvdCh0aGlzLl9jaGlsZHJlbikpIHtcbiAgICAgIHRoaXMuYXBwZW5kU2VxdWVudGlhbExvYWRTdGVwKCgpID0+IHRoaXMuZXh0cmFjdExvYWRQcm9taXNhYmxlKGNoaWxkKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9hZFByb21pc2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUsIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIFdlIG5lZWQgdG8gYnlwYXNzIHR5cGUgc3lzdGVtIHRvIHJldHVybiBgUHJvbWlzZTx2b2lkPmAuXG4gICAgICByZXR1cm4gdGhpcy5sb2FkUHJvbWlzZSBhcyB1bmtub3duIGFzIHZvaWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQgd2l0aCBwcm9taXNlcy5cbiAgICpcbiAgICogVW5saWtlIHtAbGluayBsb2FkfSwgdGhpcyBtZXRob2QgbmV2ZXIgcmVqZWN0cyB3aXRoIGFuIGluZGl2aWR1YWwgZXJyb3I6IGV2ZXJ5IGZhaWx1cmUgcmFpc2VkIGJ5IHtAbGluayBvbmxvYWRBc3luY31cbiAgICogb3IgYSBjaGlsZCdzIGxvYWQgaXMgY29sbGVjdGVkLCBhbmQgb25jZSBldmVyeXRoaW5nIHNldHRsZXMgdGhlIHJldHVybmVkIHtAbGluayBQcm9taXNlfSByZWplY3RzIHdpdGggYSBzaW5nbGVcbiAgICoge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfSBob2xkaW5nIGFsbCBvZiB0aGVtLiBOb24tYEVycm9yYCB0aHJvd2FibGVzIGFyZSBub3JtYWxpemVkIHZpYSB7QGxpbmsgRXJyb3JXcmFwcGVyLmNyZWF0ZX0uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gZmluaXNoIGxvYWRpbmcsIHJlamVjdHMgd2l0aCBhbiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IGlmIGFueSBsb2FkIHN0ZXAgZmFpbGVkLCBvciBgbnVsbGAgaWYgdGhlIGNvbXBvbmVudCBhbmQgaXRzIGNoaWxkcmVuIGRvbid0IHVzZSBgYXN5bmNgIGxvZ2ljIGFuZCBub25lIGZhaWxlZCBzeW5jaHJvbm91c2x5LlxuICAgKi9cbiAgcHVibGljIGxvYWRXaXRoUHJvbWlzZXMoKTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9hZCgpO1xuXG4gICAgY29uc3QgbG9hZFByb21pc2UgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIGlmICghbG9hZFByb21pc2UpIHtcbiAgICAgIGlmICh0aGlzLmxvYWRFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKHRoaXMubG9hZEVycm9ycykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvYWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcih0aGlzLmxvYWRFcnJvcnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jaHJvbm91c2x5IGxvYWRzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIE92ZXJyaWRlIHRvIGFkZCBhc3luYyBsb2FkIGxvZ2ljLCB3aGljaCBpcyBleGVjdXRlZCBhZnRlciB7QGxpbmsgQ29tcG9uZW50Lm9ubG9hZH0uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyBvbmxvYWRBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbm9vcEFzeW5jU2luZ2xldG9uUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB7QGxpbmsgRGlzcG9zYWJsZX0gc28gaXQgaXMgZGlzcG9zZWQgd2hlbiB0aGlzIGNvbXBvbmVudCB1bmxvYWRzLCBhbmQgcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoZSByZWN1cnJpbmcgXCJ0aWUgYSBkaXNwb3NhYmxlIHRvIHRoZSBjb21wb25lbnQncyBsaWZlY3ljbGUsIHRoZW4ga2VlcCB1c2luZyBpdFwiIGlkaW9tOiB0aGUgZGlzcG9zYWJsZSBpc1xuICAgKiBkaXNwb3NlZCBvbiB7QGxpbmsgQ29tcG9uZW50LnVubG9hZH0gKG9yIGVhcmxpZXIsIGlmIHRoZSBjYWxsZXIgZGlzcG9zZXMgaXQgZGlyZWN0bHkgXHUyMDE0IGRpc3Bvc2UgaXMgZXhwZWN0ZWQgdG9cbiAgICogYmUgaWRlbXBvdGVudCkuIEd1YXJkIHdpdGgge0BsaW5rIGVuc3VyZUxvYWRlZH0gYXQgdGhlIGNhbGwgc2l0ZSB3aGVuIHJlZ2lzdGVyaW5nIGJlZm9yZSBsb2FkIHdvdWxkIGJlIHVuc2FmZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBURGlzcG9zYWJsZSAtIFRoZSB0eXBlIG9mIHRoZSBkaXNwb3NhYmxlLlxuICAgKiBAcGFyYW0gZGlzcG9zYWJsZSAtIFRoZSBkaXNwb3NhYmxlIHRvIHJlZ2lzdGVyLlxuICAgKiBAcmV0dXJucyBUaGUgc2FtZSBkaXNwb3NhYmxlLCBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJEaXNwb3NhYmxlPFREaXNwb3NhYmxlIGV4dGVuZHMgRGlzcG9zYWJsZT4oZGlzcG9zYWJsZTogVERpc3Bvc2FibGUpOiBURGlzcG9zYWJsZSB7XG4gICAgdGhpcy5yZWdpc3RlcigoKSA9PiB7XG4gICAgICBkaXNwb3NlKGRpc3Bvc2FibGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBkaXNwb3NhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byByZW1vdmUuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIHN1cGVyLnJlbW92ZUNoaWxkKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5kZWxldGUoY29tcG9uZW50KTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQsIHRocm93aW5nIGlmIGl0IGlzIG5vdC5cbiAgICpcbiAgICogVXNlIHRoaXMgdG8gZ3VhcmQgcHVibGljIG1ldGhvZHMgdGhhdCByZWdpc3RlciB0ZWFyZG93bi1iZWFyaW5nIHJlc291cmNlcyAodmlhIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJ9LFxuICAgKiB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyRXZlbnR9LCB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyRG9tRXZlbnR9LCBldGMuKS4gUmVnaXN0ZXJpbmcgYmVmb3JlIGxvYWQgaXMgdW5zYWZlOlxuICAgKiB7QGxpbmsgQ29tcG9uZW50LnVubG9hZH0gaXMgYSBuby1vcCB3aGlsZSB0aGUgY29tcG9uZW50IGlzIG5vdCBsb2FkZWQsIHNvIGFueSB0ZWFyZG93biByZWdpc3RlcmVkIGJlZm9yZWhhbmQgd291bGRcbiAgICogbmV2ZXIgcnVuIGlmIHRoZSBjb21wb25lbnQgaXMgdW5sb2FkZWQgd2l0aG91dCBmaXJzdCBiZWluZyBsb2FkZWQuXG4gICAqXG4gICAqIFRoZSB0d28gbm90LWxvYWRlZCBjYXNlcyBhcmUgZGVsaWJlcmF0ZWx5IGRpc3Rpbmd1aXNoZWQuIEEgY29tcG9uZW50IHRoYXQgd2FzIE5FVkVSIGxvYWRlZCBpcyBhIGdlbnVpbmVcbiAgICogcHJvZ3JhbW1pbmcgZXJyb3IsIHNvIGl0IHRocm93cyBhIGxvdWQge0BsaW5rIEVycm9yfS4gQSBjb21wb25lbnQgdGhhdCBoYXMgQUxSRUFEWSBiZWVuIHVubG9hZGVkIGlzIG5vdCBcdTIwMTRcbiAgICogaXQgaXMgdGhlIGV4cGVjdGVkIG91dGNvbWUgb2Ygd29yayB0aGF0IG91dGxpdmVkIGl0cyBjb21wb25lbnQgKGUuZy4gYW4gYGFzeW5jYCBtZXRob2Qgc3VzcGVuZGVkIG9uIGFuXG4gICAqIGBhd2FpdGAgd2hpbGUgdGhlIGNvbXBvbmVudCB3YXMgdW5sb2FkZWQsIHRoZW4gcmVzdW1lZCkgXHUyMDE0IHNvIGl0IHRocm93cyBhIHtAbGluayBTaWxlbnRFcnJvcn0sIHdoaWNoXG4gICAqIGBoYW5kbGVTaWxlbnRFcnJvcmAgc3VwcHJlc3NlcywgbGV0dGluZyBzdWNoIHdvcmsgdW53aW5kIHF1aWV0bHkgaW5zdGVhZCBvZiByZXBvcnRpbmcgYW4gYXN5bmMgZXJyb3IuXG4gICAqXG4gICAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBpZiB0aGUgY29tcG9uZW50IHdhcyBuZXZlciBsb2FkZWQsIG9yIGEge0BsaW5rIFNpbGVudEVycm9yfSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHVubG9hZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGVuc3VyZUxvYWRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVbmxvYWRlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2lsZW50RXJyb3IoJ0NvbXBvbmVudCBpcyBhbHJlYWR5IHVubG9hZGVkJyk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgaXMgbm90IGxvYWRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbXBvbmVudCdzIGluLWZsaWdodCBsb2FkIHtAbGluayBQcm9taXNlfSAoaXRzIHtAbGluayBvbmxvYWRBc3luY30gcGx1cyBjaGlsZHJlbiksIG9yIGBudWxsYCB3aGVuXG4gICAqIG5vdGhpbmcgaXMgbG9hZGluZyBcdTIwMTQgZWl0aGVyIHRoZSBjb21wb25lbnQgbG9hZGVkIGZ1bGx5IHN5bmNocm9ub3VzbHkgb3IgaXRzIGFzeW5jIGxvYWQgaGFzIGFscmVhZHkgc2V0dGxlZC5cbiAgICpcbiAgICogTGV0cyBhIGNhbGxlciBzY2hlZHVsZWQgd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBzdGlsbCBsb2FkaW5nIGF3YWl0IHRoZSBhc3luYyBsb2FkIHRhaWwgYmVmb3JlIGFjdGluZywgaW5zdGVhZCBvZlxuICAgKiByYWNpbmcgaXQuIFRoZSBtb3RpdmF0aW5nIGNhc2UgaXMgYSBsYXlvdXQtcmVhZHkgaGFuZGxlciAoc2VlIGBMYXlvdXRSZWFkeUNvbXBvbmVudGApIHRoYXQgZmlyZXMgYmVjYXVzZSB0aGVcbiAgICogY29tcG9uZW50IHdhcyBsb2FkZWQgYWZ0ZXIgdGhlIHdvcmtzcGFjZSBsYXlvdXQgd2FzIGFscmVhZHkgcmVhZHk6IHtAbGluayBDb21wb25lbnQub25sb2FkfSBoYXMgcnVuIChzbyBgX2xvYWRlZGBcbiAgICogaXMgc2V0KSBidXQge0BsaW5rIG9ubG9hZEFzeW5jfSBtYXkgbm90IGhhdmUgZmluaXNoZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpbi1mbGlnaHQgbG9hZCBwcm9taXNlLCBvciBgbnVsbGAgaWYgbm8gbG9hZCBpcyBpbiBmbGlnaHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0SW5GbGlnaHRMb2FkUHJvbWlzZSgpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBtb3N0IHJlY2VudCBsb2FkIHJlY29yZGVkIGFueSBmYWlsdXJlLlxuICAgKlxuICAgKiBSZWZsZWN0cyB0aGUgb3V0Y29tZSBvZiB0aGUgbGFzdCB7QGxpbmsgbG9hZH0gLyB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc306IGB0cnVlYCB3aGVuIHtAbGluayBvbmxvYWRBc3luY30gb3IgYW55XG4gICAqIGNoaWxkJ3MgbG9hZCB0aHJldyAoc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseSkuIFVubGlrZSB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc30sIHJlYWRpbmcgdGhpcyBkb2VzIE5PVFxuICAgKiByZS1yYWlzZSB0aGUgY29sbGVjdGVkIGVycm9ycyBcdTIwMTQgaXQgbGV0cyBhIGJ5c3RhbmRlciAoZS5nLiBhIGxheW91dC1yZWFkeSBoYW5kbGVyIGF3YWl0aW5nIHRoZSBpbi1mbGlnaHQgbG9hZCkgdGVsbFxuICAgKiB3aGV0aGVyIHRoZSBsb2FkIHN1Y2NlZWRlZCB3aXRob3V0IGFkb3B0aW5nIGEgZmFpbHVyZSB0aGF0IHRoZSBsb2FkJ3Mgb3duZXIgaXMgYWxyZWFkeSByZXNwb25zaWJsZSBmb3IuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbGFzdCBsb2FkIHJlY29yZGVkIGF0IGxlYXN0IG9uZSBlcnJvciwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFzTG9hZEVycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bmxvYWRlZCwgYXMgb3Bwb3NlZCB0byBzaW1wbHkgbm90IGhhdmluZyBiZWVuIGxvYWRlZCB5ZXQuXG4gICAqXG4gICAqIEJvdGggc3RhdGVzIGxlYXZlIGBfbG9hZGVkYCBmYWxzZSwgYnV0IHRoZXkgbWVhbiBvcHBvc2l0ZSB0aGluZ3M6IGEgY29tcG9uZW50IHRoYXQgd2FzIG5ldmVyIGxvYWRlZCBpcyBzdGlsbFxuICAgKiBhaGVhZCBvZiBpdHMgbGlmZWN5Y2xlIChxdWV1ZWluZyBjaGlsZHJlbiBiZWZvcmUgbG9hZCBpcyBsZWdpdGltYXRlKSwgd2hpbGUgYW4gdW5sb2FkZWQgb25lIGlzIGJlaGluZCBpdCBhbmRcbiAgICogbXVzdCBub3QgYmUgdXNlZCBhbnkgZnVydGhlci4gVGhlIGRpc3RpbmN0aW9uIGlzIHRyYWNrZWQgYnkgYSBmbGFnIHNldCBpbiB7QGxpbmsgbG9hZH0sIE5PVCBieSBhblxuICAgKiB7QGxpbmsgQ29tcG9uZW50Lm9udW5sb2FkfSBvdmVycmlkZSwgYmVjYXVzZSBzdWJjbGFzc2VzIG92ZXJyaWRlIGBvbnVubG9hZGAgYW5kIG1heSBub3QgY2FsbCBgc3VwZXJgLlxuICAgKlxuICAgKiBVc2UgaXQgaW4gYSBsb25nLXJ1bm5pbmcgYGFzeW5jYCBtZXRob2QgdG8gYWJhbmRvbiB3b3JrIHdob3NlIGNvbXBvbmVudCB3YXMgdW5sb2FkZWQgbWlkLWZsaWdodCwgd2hlblxuICAgKiB1bndpbmRpbmcgdmlhIHRoZSB7QGxpbmsgU2lsZW50RXJyb3J9IHRocm93biBieSB7QGxpbmsgZW5zdXJlTG9hZGVkfSAvIHtAbGluayBhZGRDaGlsZH0gaXMgbm90IGRlc2lyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29tcG9uZW50IHdhcyBsb2FkZWQgYXQgc29tZSBwb2ludCBhbmQgaXMgY3VycmVudGx5IHVubG9hZGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBpc1VubG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0JlZW5Mb2FkZWQgJiYgIXRoaXMuX2xvYWRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXF1ZW5jZXMgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgc3RlcCBpbnRvIHRoZSBsb2FkIHByb21pc2UuXG4gICAqXG4gICAqIFRoZSBzdGVwIGlzIHByZXN1bWVkIHRvIGhhdmUgc3RhcnRlZCBzeW5jaHJvbm91c2x5IChzbyBhbnkgYF9sb2FkZWRgIGZsYWcgaXQgc2V0cyBpcyBhbHJlYWR5IHZpc2libGUpOyBvbmx5IHRoZVxuICAgKiBhd2FpdGluZyBvZiBpdHMgYXN5bmMgdGFpbCBpcyBzZXF1ZW5jZWQgaGVyZS5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlIC0gVGhlIHJlc3VsdCBvZiBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCBzdGVwLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRFYWdlckxvYWRTdGVwKGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IGNhcHR1cmVkID0gdGhpcy5jYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZSk7XG4gICAgaWYgKCFjYXB0dXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICB0aGlzLnNldExvYWRQcm9taXNlKHByZXZpb3VzID8gcHJldmlvdXMudGhlbigoKSA9PiBjYXB0dXJlZCkgOiBjYXB0dXJlZCk7XG4gIH1cblxuICAvKipcbiAgICogU2VxdWVuY2VzIGEgZGVmZXJyZWQgbG9hZCBzdGVwIGludG8gdGhlIGxvYWQgcHJvbWlzZSwgcnVubmluZyBpdCBvbmx5IGFmdGVyIHByZXZpb3VzbHktYXBwZW5kZWQgc3RlcHMgc2V0dGxlLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAobG9hZFByb21pc2FibGVGdW5jdGlvbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICB0aGlzLnNldExvYWRQcm9taXNlKHByZXZpb3VzLnRoZW4oKCkgPT4gdGhpcy5ydW5BbmRDYXB0dXJlKGxvYWRQcm9taXNhYmxlRnVuY3Rpb24pKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FwdHVyZWQgPSB0aGlzLmNhcHR1cmVTeW5jKGxvYWRQcm9taXNhYmxlRnVuY3Rpb24pO1xuICAgIGlmIChjYXB0dXJlZCkge1xuICAgICAgdGhpcy5zZXRMb2FkUHJvbWlzZShjYXB0dXJlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgYSBsb2FkIGZhaWx1cmUuXG4gICAqXG4gICAqIEEgZmFpbHVyZSByYWlzZWQgYnkgYSBjaGlsZCB7QGxpbmsgQ29tcG9uZW50RXh9IGlzIGl0c2VsZiBhbiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9OyBpdCBpcyByZWNvcmRlZCBhcy1pcyBzbyB0aGVcbiAgICogZ3JvdXBpbmcgYnkgY2hpbGQgY29tcG9uZW50IGlzIHByZXNlcnZlZCAob3duIGZhaWx1cmVzIHN0YXkgZmxhdCwgY2hpbGQtc3VidHJlZSBmYWlsdXJlcyBzdGF5IG5lc3RlZCkuXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSB0aHJvd24gdmFsdWUgdG8gcmVjb3JkLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlRXJyb3IoZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRFcnJvcnMucHVzaChFcnJvcldyYXBwZXIuY3JlYXRlKGVycm9yKSk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHMgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgcmVzdWx0IHNvIGl0IG5ldmVyIHJlamVjdHM6IGFueSBmYWlsdXJlIGlzIHJlY29yZGVkIGludG8gYGxvYWRFcnJvcnNgLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGUgLSBUaGUgbG9hZCByZXN1bHQgdG8gb2JzZXJ2ZS5cbiAgICogQHJldHVybnMgQSBuZXZlci1yZWplY3Rpbmcge0BsaW5rIFByb21pc2V9LCBvciBgbnVsbGAgaWYgdGhlIHJlc3VsdCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChsb2FkUHJvbWlzYWJsZSA9PT0gbnVsbCB8fCBsb2FkUHJvbWlzYWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGxvYWRQcm9taXNhYmxlKS50aGVuKG5vb3ApLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBsb2FkIHN0ZXAgc3luY2hyb25vdXNseSwgcmVjb3JkaW5nIGEgc3luY2hyb25vdXMgdGhyb3csIGFuZCB3cmFwcyBhbnkgYXN5bmMgdGFpbCBzbyBpdCBuZXZlciByZWplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKiBAcmV0dXJucyBBIG5ldmVyLXJlamVjdGluZyB7QGxpbmsgUHJvbWlzZX0sIG9yIGBudWxsYCBpZiB0aGUgc3RlcCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZVN5bmMobG9hZFByb21pc2FibGVGdW5jdGlvbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPjtcbiAgICB0cnkge1xuICAgICAgbG9hZFByb21pc2FibGUgPSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdExvYWRQcm9taXNhYmxlKGNvbXBvbmVudDogQ29tcG9uZW50KTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jaGlsZHJlblNldC5oYXMoY29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRFeCkge1xuICAgICAgcmV0dXJuIGNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tY29uZnVzaW5nLXZvaWQtZXhwcmVzc2lvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uIC0tIEl0IGNhbiBiZSBgUHJvbWlzZTx2b2lkPmAgaW4gcnVudGltZS4gV2FudCBleHBsaWNpdGx5IGNhc3QgdG8gc2hvdyB3ZSBrbm93IGl0IG1heSBiZSBwcm9taXNlLCBkZXNwaXRlIHRoZSBkZWNsYXJlZCB0eXBlIGB2b2lkYC5cbiAgICByZXR1cm4gY29tcG9uZW50LmxvYWQoKSBhcyBQcm9taXNhYmxlPHZvaWQ+O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldExvYWRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRFcnJvcnMgPSBbXTtcbiAgICB0aGlzLmxvYWRQcm9taXNlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgZGVmZXJyZWQgbG9hZCBzdGVwLCByZWNvcmRpbmcgYSBzeW5jaHJvbm91cyB0aHJvdyBvciBhbiBhc3luYyByZWplY3Rpb24gd2l0aG91dCBldmVyIHJlLXRocm93aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBydW5BbmRDYXB0dXJlKGxvYWRQcm9taXNhYmxlRnVuY3Rpb246ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKCkgPz8gdW5kZWZpbmVkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZFByb21pc2UobG9hZFByb21pc2U6IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBsb2FkUHJvbWlzZVdpdGhSZXNldDogUHJvbWlzZTx2b2lkPiA9IGxvYWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubG9hZFByb21pc2UgPT09IGxvYWRQcm9taXNlV2l0aFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9hZFByb21pc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubG9hZFByb21pc2UgPSBsb2FkUHJvbWlzZVdpdGhSZXNldDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxzQkFBMEI7QUFFMUIsbUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4QixtQkFHTztBQUNQLHNCQUdPO0FBTUEsTUFBTSxvQkFBb0IsMEJBQWdDO0FBQUEsRUFDOUMsY0FBYyxvQkFBSSxJQUFlO0FBQUEsRUFDMUMsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBc0IsQ0FBQztBQUFBLEVBQ3ZCLGNBQW9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFvQjVCLFNBQXVDLFdBQW1DO0FBQ3hGLFFBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsWUFBTSxJQUFJLHlCQUFZLCtCQUErQjtBQUFBLElBQ3ZEO0FBRUEsU0FBSyxVQUFVLEtBQUssU0FBUztBQUM3QixTQUFLLFlBQVksSUFBSSxTQUFTO0FBRTlCLFFBQUksS0FBSyxTQUFTO0FBQ2hCLFdBQUssb0JBQW9CLEtBQUssc0JBQXNCLFNBQVMsQ0FBQztBQUFBLElBQ2hFO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPZ0IsT0FBYTtBQUMzQixRQUFJLEtBQUssU0FBUztBQUNoQjtBQUFBLElBQ0Y7QUFFQSxTQUFLLFVBQVU7QUFDZixTQUFLLGdCQUFnQjtBQUNyQixTQUFLLGVBQWU7QUFFcEIsU0FBSyxPQUFPO0FBRVosVUFBTSxxQkFBcUIsS0FBSyxZQUFZO0FBQzVDLFFBQUksdUJBQXVCLDJDQUEyQjtBQUNwRCxXQUFLLG9CQUFvQixrQkFBa0I7QUFBQSxJQUM3QztBQUVBLGVBQVcsYUFBUyx1QkFBUyxLQUFLLFNBQVMsR0FBRztBQUM1QyxXQUFLLHlCQUF5QixNQUFNLEtBQUssc0JBQXNCLEtBQUssQ0FBQztBQUFBLElBQ3ZFO0FBRUEsUUFBSSxLQUFLLGFBQWE7QUFFcEIsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdPLG1CQUF5QztBQUM5QyxTQUFLLEtBQUs7QUFFVixVQUFNLGNBQWMsS0FBSztBQUN6QixRQUFJLENBQUMsYUFBYTtBQUNoQixVQUFJLEtBQUssV0FBVyxTQUFTLEdBQUc7QUFDOUIsZUFBTyxRQUFRLE9BQU8sSUFBSSxlQUFlLEtBQUssVUFBVSxDQUFDO0FBQUEsTUFDM0Q7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sWUFBWSxLQUFLLE1BQU07QUFDNUIsVUFBSSxLQUFLLFdBQVcsU0FBUyxHQUFHO0FBQzlCLGNBQU0sSUFBSSxlQUFlLEtBQUssVUFBVTtBQUFBLE1BQzFDO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTTyxjQUE2QjtBQUNsQyxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWFPLG1CQUFtRCxZQUFzQztBQUM5RixTQUFLLFNBQVMsTUFBTTtBQUNsQixxQ0FBUSxVQUFVO0FBQUEsSUFDcEIsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNnQixZQUEwQyxXQUFtQztBQUMzRixVQUFNLFlBQVksU0FBUztBQUMzQixTQUFLLFlBQVksT0FBTyxTQUFTO0FBQ2pDLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxDQUFRLE9BQU8sT0FBTyxJQUFVO0FBQzlCLFNBQUssT0FBTztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBa0JVLGVBQXFCO0FBQzdCLFFBQUksS0FBSyxTQUFTO0FBQ2hCO0FBQUEsSUFDRjtBQUVBLFFBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsWUFBTSxJQUFJLHlCQUFZLCtCQUErQjtBQUFBLElBQ3ZEO0FBRUEsVUFBTSxJQUFJLE1BQU0seUJBQXlCO0FBQUEsRUFDM0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFhVSx5QkFBK0M7QUFDdkQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFZVSxnQkFBeUI7QUFDakMsV0FBTyxLQUFLLFdBQVcsU0FBUztBQUFBLEVBQ2xDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWVVLGFBQXNCO0FBQzlCLFdBQU8sS0FBSyxpQkFBaUIsQ0FBQyxLQUFLO0FBQUEsRUFDckM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVUSxvQkFBb0IsZ0JBQStDO0FBQ3pFLFVBQU0sV0FBVyxLQUFLLGVBQWUsY0FBYztBQUNuRCxRQUFJLENBQUMsVUFBVTtBQUNiO0FBQUEsSUFDRjtBQUVBLFVBQU0sV0FBVyxLQUFLO0FBQ3RCLFNBQUssZUFBZSxXQUFXLFNBQVMsS0FBSyxNQUFNLFFBQVEsSUFBSSxRQUFRO0FBQUEsRUFDekU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPUSx5QkFBeUIsd0JBQTZEO0FBQzVGLFVBQU0sV0FBVyxLQUFLO0FBQ3RCLFFBQUksVUFBVTtBQUNaLFdBQUssZUFBZSxTQUFTLEtBQUssTUFBTSxLQUFLLGNBQWMsc0JBQXNCLENBQUMsQ0FBQztBQUNuRjtBQUFBLElBQ0Y7QUFFQSxVQUFNLFdBQVcsS0FBSyxZQUFZLHNCQUFzQjtBQUN4RCxRQUFJLFVBQVU7QUFDWixXQUFLLGVBQWUsUUFBUTtBQUFBLElBQzlCO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVRLGFBQWEsT0FBc0I7QUFDekMsU0FBSyxXQUFXLEtBQUssMEJBQWEsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNqRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUVEsZUFBZSxnQkFBK0Q7QUFDcEYsUUFBSSxtQkFBbUIsUUFBUSxtQkFBbUIsUUFBVztBQUMzRCxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sUUFBUSxRQUFRLGNBQWMsRUFBRSxLQUFLLG9CQUFJLEVBQUUsTUFBTSxDQUFDLFVBQW1CO0FBQzFFLFdBQUssYUFBYSxLQUFLO0FBQUEsSUFDekIsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFRLFlBQVksd0JBQTZFO0FBQy9GLFFBQUk7QUFDSixRQUFJO0FBQ0YsdUJBQWlCLHVCQUF1QjtBQUFBLElBQzFDLFNBQVMsT0FBTztBQUNkLFdBQUssYUFBYSxLQUFLO0FBQ3ZCLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTyxLQUFLLGVBQWUsY0FBYztBQUFBLEVBQzNDO0FBQUEsRUFFUSxzQkFBc0IsV0FBK0M7QUFDM0UsUUFBSSxDQUFDLEtBQUssWUFBWSxJQUFJLFNBQVMsR0FBRztBQUNwQyxhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUkscUJBQXFCLGFBQWE7QUFDcEMsYUFBTyxVQUFVLGlCQUFpQjtBQUFBLElBQ3BDO0FBRUEsV0FBTyxVQUFVLEtBQUs7QUFBQSxFQUN4QjtBQUFBLEVBRVEsaUJBQXVCO0FBQzdCLFNBQUssYUFBYSxDQUFDO0FBQ25CLFNBQUssY0FBYztBQUFBLEVBQ3JCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsTUFBYyxjQUFjLHdCQUFzRTtBQUNoRyxRQUFJO0FBQ0YsYUFBTyx1QkFBdUIsS0FBSztBQUFBLElBQ3JDLFNBQVMsT0FBTztBQUNkLFdBQUssYUFBYSxLQUFLO0FBQUEsSUFDekI7QUFBQSxFQUNGO0FBQUEsRUFFUSxlQUFlLGFBQWtDO0FBQ3ZELFVBQU0sdUJBQXNDLFlBQVksS0FBSyxNQUFNO0FBQ2pFLFVBQUksS0FBSyxnQkFBZ0Isc0JBQXNCO0FBQzdDLGFBQUssY0FBYztBQUFBLE1BQ3JCO0FBQUEsSUFDRixDQUFDO0FBQ0QsU0FBSyxjQUFjO0FBQUEsRUFDckI7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
472
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBzbmFwc2hvdCB9IGZyb20gJy4uLy4uL2FycmF5LnRzJztcbmltcG9ydCB7IGRpc3Bvc2UgfSBmcm9tICcuLi8uLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7XG4gIEVycm9yV3JhcHBlcixcbiAgU2lsZW50RXJyb3Jcbn0gZnJvbSAnLi4vLi4vZXJyb3IudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jU2luZ2xldG9uUHJvbWlzZVxufSBmcm9tICcuLi8uLi9mdW5jdGlvbi50cyc7XG5cbi8qKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcmVxdWlyZS1jb21wb25lbnQtc3VmZml4IC0tIEV4dGVuZGVkIGJhc2UgY2xhc3MuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RXggZXh0ZW5kcyBDb21wb25lbnQgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlsZHJlblNldCA9IG5ldyBTZXQ8Q29tcG9uZW50PigpO1xuICBwcml2YXRlIGhhc0JlZW5Mb2FkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBsb2FkRXJyb3JzOiBFcnJvcltdID0gW107XG4gIHByaXZhdGUgbG9hZFByb21pc2U6IG51bGwgfCBQcm9taXNlPHZvaWQ+ID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogTWlycm9ycyB0aGUgbmF0aXZlIGBDb21wb25lbnQuYWRkQ2hpbGRgIGNvbnRyYWN0OiBpZiB0aGlzIGNvbXBvbmVudCBpcyBhbHJlYWR5IGxvYWRlZCwgdGhlIGNoaWxkIGlzIGxvYWRlZFxuICAgKiBpbW1lZGlhdGVseSwgc28gYGNoaWxkLl9sb2FkZWRgIGlzIHNldCBiZWZvcmUgdGhpcyBtZXRob2QgcmV0dXJucyBldmVuIHdoZW4gdGhpcyBjb21wb25lbnQgaGFzIGFzeW5jIGxvYWQgbG9naWMuXG4gICAqIFRoZSBjaGlsZCdzIGFzeW5jIHRhaWwgKGlmIGFueSkgaXMgc2VxdWVuY2VkIGludG8gdGhlIGxvYWQgcHJvbWlzZSBzbyBhIGxhdGVyIHtAbGluayBsb2FkV2l0aFByb21pc2VzfSBjYWxsIGF3YWl0cyBpdC5cbiAgICpcbiAgICogQWRkaW5nIGEgY2hpbGQgQkVGT1JFIHRoZSBmaXJzdCBsb2FkIGlzIGxlZ2l0aW1hdGU6IHRoZSBjaGlsZCBpcyBxdWV1ZWQgYW5kIGxvYWRlZCB3aGVuIHRoaXMgY29tcG9uZW50IGxvYWRzLlxuICAgKiBBZGRpbmcgb25lIEFGVEVSIHRoaXMgY29tcG9uZW50IGhhcyBiZWVuIHVubG9hZGVkIGlzIG5vdCBcdTIwMTQgdGhlIGNoaWxkIHdvdWxkIG5ldmVyIGJlIGxvYWRlZCBhbmQgbmV2ZXIgdW5sb2FkZWRcbiAgICogKGEgbGVhayksIHNvIGl0IGlzIHJlZnVzZWQgd2l0aCBhIHtAbGluayBTaWxlbnRFcnJvcn0uIFRoZSB0eXBpY2FsIHNvdXJjZSBvZiBzdWNoIGEgY2FsbCBpcyBhbiBgYXN5bmNgIG1ldGhvZFxuICAgKiB0aGF0IHdhcyBzdXNwZW5kZWQgb24gYW4gYGF3YWl0YCB3aGVuIHRoZSBjb21wb25lbnQgZ290IHVubG9hZGVkIGFuZCB0aGVuIHJlc3VtZWQgb24gdGhlIGRlYWQgY29tcG9uZW50OyB0aGVcbiAgICoge0BsaW5rIFNpbGVudEVycm9yfSB1bndpbmRzIGl0IHF1aWV0bHkgKHNlZSB7QGxpbmsgaXNVbmxvYWRlZH0pLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqIEB0aHJvd3MgQSB7QGxpbmsgU2lsZW50RXJyb3J9IGlmIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bmxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTaWxlbnRFcnJvcignQ29tcG9uZW50IGlzIGFscmVhZHkgdW5sb2FkZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5hZGQoY29tcG9uZW50KTtcblxuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcCh0aGlzLmV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgY29tcG9uZW50IGlzIGEgZGlyZWN0IGNoaWxkIG9mIHRoaXMgb25lLlxuICAgKlxuICAgKiBPbmx5IERJUkVDVCBjaGlsZHJlbiBhcmUgcmVwb3J0ZWQgXHUyMDE0IHRoaXMgaXMgYW4gb3duZXJzaGlwIHF1ZXN0aW9uLCBub3QgYSBjb250YWlubWVudCBvbmUuIFRoZSBjYWxsZXIgdGhhdFxuICAgKiBuZWVkcyBpdCBpcyBvbmUgaG9sZGluZyBzZXZlcmFsIHBhcmVudHMgYW5kIGRlY2lkaW5nIHdoaWNoIG9mIHRoZW0gYSBjb21wb25lbnQgYmVsb25ncyB0bywgYW5kIGZvciB0aGF0IGFcbiAgICogZ3JhbmRjaGlsZCBpcyB0aGUgd3JvbmcgYW5zd2VyOiByZW1vdmluZyBpdCBmcm9tIHRoZSBwYXJlbnQgdGhhdCBtZXJlbHkgY29udGFpbnMgaXRzIHBhcmVudCB3b3VsZCBmYWlsLlxuICAgKlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0byBsb29rIGZvci5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGEgZGlyZWN0IGNoaWxkIG9mIHRoaXMgb25lLlxuICAgKi9cbiAgcHVibGljIGhhc0NoaWxkKGNvbXBvbmVudDogQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5TZXQuaGFzKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgRGVzcGl0ZSB0aGUgZGVjbGFyZWQgYHZvaWRgIHJldHVybiB0eXBlLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBvciBgbnVsbGAgaWYgdGhlIGNvbXBvbmVudCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBsb2FkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMuaGFzQmVlbkxvYWRlZCA9IHRydWU7XG4gICAgdGhpcy5yZXNldExvYWRTdGF0ZSgpO1xuXG4gICAgdGhpcy5vbmxvYWQoKTtcblxuICAgIGNvbnN0IG9ubG9hZEFzeW5jUHJvbWlzZSA9IHRoaXMub25sb2FkQXN5bmMoKTtcbiAgICBpZiAob25sb2FkQXN5bmNQcm9taXNlICE9PSBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlKSB7XG4gICAgICB0aGlzLmFwcGVuZEVhZ2VyTG9hZFN0ZXAob25sb2FkQXN5bmNQcm9taXNlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHNuYXBzaG90KHRoaXMuX2NoaWxkcmVuKSkge1xuICAgICAgdGhpcy5hcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAoKCkgPT4gdGhpcy5leHRyYWN0TG9hZFByb21pc2FibGUoY2hpbGQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSwgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gV2UgbmVlZCB0byBieXBhc3MgdHlwZSBzeXN0ZW0gdG8gcmV0dXJuIGBQcm9taXNlPHZvaWQ+YC5cbiAgICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlIGFzIHVua25vd24gYXMgdm9pZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudCB3aXRoIHByb21pc2VzLlxuICAgKlxuICAgKiBVbmxpa2Uge0BsaW5rIGxvYWR9LCB0aGlzIG1ldGhvZCBuZXZlciByZWplY3RzIHdpdGggYW4gaW5kaXZpZHVhbCBlcnJvcjogZXZlcnkgZmFpbHVyZSByYWlzZWQgYnkge0BsaW5rIG9ubG9hZEFzeW5jfVxuICAgKiBvciBhIGNoaWxkJ3MgbG9hZCBpcyBjb2xsZWN0ZWQsIGFuZCBvbmNlIGV2ZXJ5dGhpbmcgc2V0dGxlcyB0aGUgcmV0dXJuZWQge0BsaW5rIFByb21pc2V9IHJlamVjdHMgd2l0aCBhIHNpbmdsZVxuICAgKiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IGhvbGRpbmcgYWxsIG9mIHRoZW0uIE5vbi1gRXJyb3JgIHRocm93YWJsZXMgYXJlIG5vcm1hbGl6ZWQgdmlhIHtAbGluayBFcnJvcldyYXBwZXIuY3JlYXRlfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjaGlsZHJlbiBmaW5pc2ggbG9hZGluZywgcmVqZWN0cyB3aXRoIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gaWYgYW55IGxvYWQgc3RlcCBmYWlsZWQsIG9yIGBudWxsYCBpZiB0aGUgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gZG9uJ3QgdXNlIGBhc3luY2AgbG9naWMgYW5kIG5vbmUgZmFpbGVkIHN5bmNocm9ub3VzbHkuXG4gICAqL1xuICBwdWJsaWMgbG9hZFdpdGhQcm9taXNlcygpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkKCk7XG5cbiAgICBjb25zdCBsb2FkUHJvbWlzZSA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKCFsb2FkUHJvbWlzZSkge1xuICAgICAgaWYgKHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IodGhpcy5sb2FkRXJyb3JzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKHRoaXMubG9hZEVycm9ycyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgbG9hZHMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogT3ZlcnJpZGUgdG8gYWRkIGFzeW5jIGxvYWQgbG9naWMsIHdoaWNoIGlzIGV4ZWN1dGVkIGFmdGVyIHtAbGluayBDb21wb25lbnQub25sb2FkfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHtAbGluayBEaXNwb3NhYmxlfSBzbyBpdCBpcyBkaXNwb3NlZCB3aGVuIHRoaXMgY29tcG9uZW50IHVubG9hZHMsIGFuZCByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICpcbiAgICogVGhlIHJlY3VycmluZyBcInRpZSBhIGRpc3Bvc2FibGUgdG8gdGhlIGNvbXBvbmVudCdzIGxpZmVjeWNsZSwgdGhlbiBrZWVwIHVzaW5nIGl0XCIgaWRpb206IHRoZSBkaXNwb3NhYmxlIGlzXG4gICAqIGRpc3Bvc2VkIG9uIHtAbGluayBDb21wb25lbnQudW5sb2FkfSAob3IgZWFybGllciwgaWYgdGhlIGNhbGxlciBkaXNwb3NlcyBpdCBkaXJlY3RseSBcdTIwMTQgZGlzcG9zZSBpcyBleHBlY3RlZCB0b1xuICAgKiBiZSBpZGVtcG90ZW50KS4gR3VhcmQgd2l0aCB7QGxpbmsgZW5zdXJlTG9hZGVkfSBhdCB0aGUgY2FsbCBzaXRlIHdoZW4gcmVnaXN0ZXJpbmcgYmVmb3JlIGxvYWQgd291bGQgYmUgdW5zYWZlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFREaXNwb3NhYmxlIC0gVGhlIHR5cGUgb2YgdGhlIGRpc3Bvc2FibGUuXG4gICAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gVGhlIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIFRoZSBzYW1lIGRpc3Bvc2FibGUsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckRpc3Bvc2FibGU8VERpc3Bvc2FibGUgZXh0ZW5kcyBEaXNwb3NhYmxlPihkaXNwb3NhYmxlOiBURGlzcG9zYWJsZSk6IFREaXNwb3NhYmxlIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIGRpc3Bvc2UoZGlzcG9zYWJsZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpc3Bvc2FibGU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgc3VwZXIucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgICB0aGlzLmNoaWxkcmVuU2V0LmRlbGV0ZShjb21wb25lbnQpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCwgdGhyb3dpbmcgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBndWFyZCBwdWJsaWMgbWV0aG9kcyB0aGF0IHJlZ2lzdGVyIHRlYXJkb3duLWJlYXJpbmcgcmVzb3VyY2VzICh2aWEge0BsaW5rIENvbXBvbmVudC5yZWdpc3Rlcn0sXG4gICAqIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJFdmVudH0sIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJEb21FdmVudH0sIGV0Yy4pLiBSZWdpc3RlcmluZyBiZWZvcmUgbG9hZCBpcyB1bnNhZmU6XG4gICAqIHtAbGluayBDb21wb25lbnQudW5sb2FkfSBpcyBhIG5vLW9wIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgbm90IGxvYWRlZCwgc28gYW55IHRlYXJkb3duIHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCB3b3VsZFxuICAgKiBuZXZlciBydW4gaWYgdGhlIGNvbXBvbmVudCBpcyB1bmxvYWRlZCB3aXRob3V0IGZpcnN0IGJlaW5nIGxvYWRlZC5cbiAgICpcbiAgICogVGhlIHR3byBub3QtbG9hZGVkIGNhc2VzIGFyZSBkZWxpYmVyYXRlbHkgZGlzdGluZ3Vpc2hlZC4gQSBjb21wb25lbnQgdGhhdCB3YXMgTkVWRVIgbG9hZGVkIGlzIGEgZ2VudWluZVxuICAgKiBwcm9ncmFtbWluZyBlcnJvciwgc28gaXQgdGhyb3dzIGEgbG91ZCB7QGxpbmsgRXJyb3J9LiBBIGNvbXBvbmVudCB0aGF0IGhhcyBBTFJFQURZIGJlZW4gdW5sb2FkZWQgaXMgbm90IFx1MjAxNFxuICAgKiBpdCBpcyB0aGUgZXhwZWN0ZWQgb3V0Y29tZSBvZiB3b3JrIHRoYXQgb3V0bGl2ZWQgaXRzIGNvbXBvbmVudCAoZS5nLiBhbiBgYXN5bmNgIG1ldGhvZCBzdXNwZW5kZWQgb24gYW5cbiAgICogYGF3YWl0YCB3aGlsZSB0aGUgY29tcG9uZW50IHdhcyB1bmxvYWRlZCwgdGhlbiByZXN1bWVkKSBcdTIwMTQgc28gaXQgdGhyb3dzIGEge0BsaW5rIFNpbGVudEVycm9yfSwgd2hpY2hcbiAgICogYGhhbmRsZVNpbGVudEVycm9yYCBzdXBwcmVzc2VzLCBsZXR0aW5nIHN1Y2ggd29yayB1bndpbmQgcXVpZXRseSBpbnN0ZWFkIG9mIHJlcG9ydGluZyBhbiBhc3luYyBlcnJvci5cbiAgICpcbiAgICogQHRocm93cyBBbiB7QGxpbmsgRXJyb3J9IGlmIHRoZSBjb21wb25lbnQgd2FzIG5ldmVyIGxvYWRlZCwgb3IgYSB7QGxpbmsgU2lsZW50RXJyb3J9IGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4gdW5sb2FkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZW5zdXJlTG9hZGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTaWxlbnRFcnJvcignQ29tcG9uZW50IGlzIGFscmVhZHkgdW5sb2FkZWQnKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBpcyBub3QgbG9hZGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29tcG9uZW50J3MgaW4tZmxpZ2h0IGxvYWQge0BsaW5rIFByb21pc2V9IChpdHMge0BsaW5rIG9ubG9hZEFzeW5jfSBwbHVzIGNoaWxkcmVuKSwgb3IgYG51bGxgIHdoZW5cbiAgICogbm90aGluZyBpcyBsb2FkaW5nIFx1MjAxNCBlaXRoZXIgdGhlIGNvbXBvbmVudCBsb2FkZWQgZnVsbHkgc3luY2hyb25vdXNseSBvciBpdHMgYXN5bmMgbG9hZCBoYXMgYWxyZWFkeSBzZXR0bGVkLlxuICAgKlxuICAgKiBMZXRzIGEgY2FsbGVyIHNjaGVkdWxlZCB3aGlsZSB0aGUgY29tcG9uZW50IGlzIHN0aWxsIGxvYWRpbmcgYXdhaXQgdGhlIGFzeW5jIGxvYWQgdGFpbCBiZWZvcmUgYWN0aW5nLCBpbnN0ZWFkIG9mXG4gICAqIHJhY2luZyBpdC4gVGhlIG1vdGl2YXRpbmcgY2FzZSBpcyBhIGxheW91dC1yZWFkeSBoYW5kbGVyIChzZWUgYExheW91dFJlYWR5Q29tcG9uZW50YCkgdGhhdCBmaXJlcyBiZWNhdXNlIHRoZVxuICAgKiBjb21wb25lbnQgd2FzIGxvYWRlZCBhZnRlciB0aGUgd29ya3NwYWNlIGxheW91dCB3YXMgYWxyZWFkeSByZWFkeToge0BsaW5rIENvbXBvbmVudC5vbmxvYWR9IGhhcyBydW4gKHNvIGBfbG9hZGVkYFxuICAgKiBpcyBzZXQpIGJ1dCB7QGxpbmsgb25sb2FkQXN5bmN9IG1heSBub3QgaGF2ZSBmaW5pc2hlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGluLWZsaWdodCBsb2FkIHByb21pc2UsIG9yIGBudWxsYCBpZiBubyBsb2FkIGlzIGluIGZsaWdodC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRJbkZsaWdodExvYWRQcm9taXNlKCk6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG1vc3QgcmVjZW50IGxvYWQgcmVjb3JkZWQgYW55IGZhaWx1cmUuXG4gICAqXG4gICAqIFJlZmxlY3RzIHRoZSBvdXRjb21lIG9mIHRoZSBsYXN0IHtAbGluayBsb2FkfSAvIHtAbGluayBsb2FkV2l0aFByb21pc2VzfTogYHRydWVgIHdoZW4ge0BsaW5rIG9ubG9hZEFzeW5jfSBvciBhbnlcbiAgICogY2hpbGQncyBsb2FkIHRocmV3IChzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5KS4gVW5saWtlIHtAbGluayBsb2FkV2l0aFByb21pc2VzfSwgcmVhZGluZyB0aGlzIGRvZXMgTk9UXG4gICAqIHJlLXJhaXNlIHRoZSBjb2xsZWN0ZWQgZXJyb3JzIFx1MjAxNCBpdCBsZXRzIGEgYnlzdGFuZGVyIChlLmcuIGEgbGF5b3V0LXJlYWR5IGhhbmRsZXIgYXdhaXRpbmcgdGhlIGluLWZsaWdodCBsb2FkKSB0ZWxsXG4gICAqIHdoZXRoZXIgdGhlIGxvYWQgc3VjY2VlZGVkIHdpdGhvdXQgYWRvcHRpbmcgYSBmYWlsdXJlIHRoYXQgdGhlIGxvYWQncyBvd25lciBpcyBhbHJlYWR5IHJlc3BvbnNpYmxlIGZvci5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBsYXN0IGxvYWQgcmVjb3JkZWQgYXQgbGVhc3Qgb25lIGVycm9yLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBoYXNMb2FkRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRFcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubG9hZGVkLCBhcyBvcHBvc2VkIHRvIHNpbXBseSBub3QgaGF2aW5nIGJlZW4gbG9hZGVkIHlldC5cbiAgICpcbiAgICogQm90aCBzdGF0ZXMgbGVhdmUgYF9sb2FkZWRgIGZhbHNlLCBidXQgdGhleSBtZWFuIG9wcG9zaXRlIHRoaW5nczogYSBjb21wb25lbnQgdGhhdCB3YXMgbmV2ZXIgbG9hZGVkIGlzIHN0aWxsXG4gICAqIGFoZWFkIG9mIGl0cyBsaWZlY3ljbGUgKHF1ZXVlaW5nIGNoaWxkcmVuIGJlZm9yZSBsb2FkIGlzIGxlZ2l0aW1hdGUpLCB3aGlsZSBhbiB1bmxvYWRlZCBvbmUgaXMgYmVoaW5kIGl0IGFuZFxuICAgKiBtdXN0IG5vdCBiZSB1c2VkIGFueSBmdXJ0aGVyLiBUaGUgZGlzdGluY3Rpb24gaXMgdHJhY2tlZCBieSBhIGZsYWcgc2V0IGluIHtAbGluayBsb2FkfSwgTk9UIGJ5IGFuXG4gICAqIHtAbGluayBDb21wb25lbnQub251bmxvYWR9IG92ZXJyaWRlLCBiZWNhdXNlIHN1YmNsYXNzZXMgb3ZlcnJpZGUgYG9udW5sb2FkYCBhbmQgbWF5IG5vdCBjYWxsIGBzdXBlcmAuXG4gICAqXG4gICAqIFVzZSBpdCBpbiBhIGxvbmctcnVubmluZyBgYXN5bmNgIG1ldGhvZCB0byBhYmFuZG9uIHdvcmsgd2hvc2UgY29tcG9uZW50IHdhcyB1bmxvYWRlZCBtaWQtZmxpZ2h0LCB3aGVuXG4gICAqIHVud2luZGluZyB2aWEgdGhlIHtAbGluayBTaWxlbnRFcnJvcn0gdGhyb3duIGJ5IHtAbGluayBlbnN1cmVMb2FkZWR9IC8ge0BsaW5rIGFkZENoaWxkfSBpcyBub3QgZGVzaXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjb21wb25lbnQgd2FzIGxvYWRlZCBhdCBzb21lIHBvaW50IGFuZCBpcyBjdXJyZW50bHkgdW5sb2FkZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzVW5sb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQmVlbkxvYWRlZCAmJiAhdGhpcy5fbG9hZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcXVlbmNlcyBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCBzdGVwIGludG8gdGhlIGxvYWQgcHJvbWlzZS5cbiAgICpcbiAgICogVGhlIHN0ZXAgaXMgcHJlc3VtZWQgdG8gaGF2ZSBzdGFydGVkIHN5bmNocm9ub3VzbHkgKHNvIGFueSBgX2xvYWRlZGAgZmxhZyBpdCBzZXRzIGlzIGFscmVhZHkgdmlzaWJsZSk7IG9ubHkgdGhlXG4gICAqIGF3YWl0aW5nIG9mIGl0cyBhc3luYyB0YWlsIGlzIHNlcXVlbmNlZCBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGUgLSBUaGUgcmVzdWx0IG9mIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHN0ZXAuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZEVhZ2VyTG9hZFN0ZXAobG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgY2FwdHVyZWQgPSB0aGlzLmNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlKTtcbiAgICBpZiAoIWNhcHR1cmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIHRoaXMuc2V0TG9hZFByb21pc2UocHJldmlvdXMgPyBwcmV2aW91cy50aGVuKCgpID0+IGNhcHR1cmVkKSA6IGNhcHR1cmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXF1ZW5jZXMgYSBkZWZlcnJlZCBsb2FkIHN0ZXAgaW50byB0aGUgbG9hZCBwcm9taXNlLCBydW5uaW5nIGl0IG9ubHkgYWZ0ZXIgcHJldmlvdXNseS1hcHBlbmRlZCBzdGVwcyBzZXR0bGUuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZFNlcXVlbnRpYWxMb2FkU3RlcChsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgIHRoaXMuc2V0TG9hZFByb21pc2UocHJldmlvdXMudGhlbigoKSA9PiB0aGlzLnJ1bkFuZENhcHR1cmUobG9hZFByb21pc2FibGVGdW5jdGlvbikpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYXB0dXJlZCA9IHRoaXMuY2FwdHVyZVN5bmMobG9hZFByb21pc2FibGVGdW5jdGlvbik7XG4gICAgaWYgKGNhcHR1cmVkKSB7XG4gICAgICB0aGlzLnNldExvYWRQcm9taXNlKGNhcHR1cmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkcyBhIGxvYWQgZmFpbHVyZS5cbiAgICpcbiAgICogQSBmYWlsdXJlIHJhaXNlZCBieSBhIGNoaWxkIHtAbGluayBDb21wb25lbnRFeH0gaXMgaXRzZWxmIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn07IGl0IGlzIHJlY29yZGVkIGFzLWlzIHNvIHRoZVxuICAgKiBncm91cGluZyBieSBjaGlsZCBjb21wb25lbnQgaXMgcHJlc2VydmVkIChvd24gZmFpbHVyZXMgc3RheSBmbGF0LCBjaGlsZC1zdWJ0cmVlIGZhaWx1cmVzIHN0YXkgbmVzdGVkKS5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIHRocm93biB2YWx1ZSB0byByZWNvcmQuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVFcnJvcihlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMubG9hZEVycm9ycy5wdXNoKEVycm9yV3JhcHBlci5jcmVhdGUoZXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcyBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCByZXN1bHQgc28gaXQgbmV2ZXIgcmVqZWN0czogYW55IGZhaWx1cmUgaXMgcmVjb3JkZWQgaW50byBgbG9hZEVycm9yc2AuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZSAtIFRoZSBsb2FkIHJlc3VsdCB0byBvYnNlcnZlLlxuICAgKiBAcmV0dXJucyBBIG5ldmVyLXJlamVjdGluZyB7QGxpbmsgUHJvbWlzZX0sIG9yIGBudWxsYCBpZiB0aGUgcmVzdWx0IGlzIGZ1bGx5IHN5bmNocm9ub3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGxvYWRQcm9taXNhYmxlID09PSBudWxsIHx8IGxvYWRQcm9taXNhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobG9hZFByb21pc2FibGUpLnRoZW4obm9vcCkuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGxvYWQgc3RlcCBzeW5jaHJvbm91c2x5LCByZWNvcmRpbmcgYSBzeW5jaHJvbm91cyB0aHJvdywgYW5kIHdyYXBzIGFueSBhc3luYyB0YWlsIHNvIGl0IG5ldmVyIHJlamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqIEByZXR1cm5zIEEgbmV2ZXItcmVqZWN0aW5nIHtAbGluayBQcm9taXNlfSwgb3IgYG51bGxgIGlmIHRoZSBzdGVwIGlzIGZ1bGx5IHN5bmNocm9ub3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlU3luYyhsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+O1xuICAgIHRyeSB7XG4gICAgICBsb2FkUHJvbWlzYWJsZSA9IGxvYWRQcm9taXNhYmxlRnVuY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0TG9hZFByb21pc2FibGUoY29tcG9uZW50OiBDb21wb25lbnQpOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNoaWxkcmVuU2V0Lmhhcyhjb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEV4KSB7XG4gICAgICByZXR1cm4gY29tcG9uZW50LmxvYWRXaXRoUHJvbWlzZXMoKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1jb25mdXNpbmctdm9pZC1leHByZXNzaW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb24gLS0gSXQgY2FuIGJlIGBQcm9taXNlPHZvaWQ+YCBpbiBydW50aW1lLiBXYW50IGV4cGxpY2l0bHkgY2FzdCB0byBzaG93IHdlIGtub3cgaXQgbWF5IGJlIHByb21pc2UsIGRlc3BpdGUgdGhlIGRlY2xhcmVkIHR5cGUgYHZvaWRgLlxuICAgIHJldHVybiBjb21wb25lbnQubG9hZCgpIGFzIFByb21pc2FibGU8dm9pZD47XG4gIH1cblxuICBwcml2YXRlIHJlc2V0TG9hZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZEVycm9ycyA9IFtdO1xuICAgIHRoaXMubG9hZFByb21pc2UgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBkZWZlcnJlZCBsb2FkIHN0ZXAsIHJlY29yZGluZyBhIHN5bmNocm9ub3VzIHRocm93IG9yIGFuIGFzeW5jIHJlamVjdGlvbiB3aXRob3V0IGV2ZXIgcmUtdGhyb3dpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkFuZENhcHR1cmUobG9hZFByb21pc2FibGVGdW5jdGlvbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgKGxvYWRQcm9taXNhYmxlRnVuY3Rpb24oKSA/PyB1bmRlZmluZWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkUHJvbWlzZShsb2FkUHJvbWlzZTogUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IGxvYWRQcm9taXNlV2l0aFJlc2V0OiBQcm9taXNlPHZvaWQ+ID0gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSA9PT0gbG9hZFByb21pc2VXaXRoUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2FkUHJvbWlzZSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5sb2FkUHJvbWlzZSA9IGxvYWRQcm9taXNlV2l0aFJlc2V0O1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHNCQUEwQjtBQUUxQixtQkFBeUI7QUFDekIsd0JBQXdCO0FBQ3hCLG1CQUdPO0FBQ1Asc0JBR087QUFNQSxNQUFNLG9CQUFvQiwwQkFBZ0M7QUFBQSxFQUM5QyxjQUFjLG9CQUFJLElBQWU7QUFBQSxFQUMxQyxnQkFBZ0I7QUFBQSxFQUNoQixhQUFzQixDQUFDO0FBQUEsRUFDdkIsY0FBb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQW9CNUIsU0FBdUMsV0FBbUM7QUFDeEYsUUFBSSxLQUFLLFdBQVcsR0FBRztBQUNyQixZQUFNLElBQUkseUJBQVksK0JBQStCO0FBQUEsSUFDdkQ7QUFFQSxTQUFLLFVBQVUsS0FBSyxTQUFTO0FBQzdCLFNBQUssWUFBWSxJQUFJLFNBQVM7QUFFOUIsUUFBSSxLQUFLLFNBQVM7QUFDaEIsV0FBSyxvQkFBb0IsS0FBSyxzQkFBc0IsU0FBUyxDQUFDO0FBQUEsSUFDaEU7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFZTyxTQUFTLFdBQStCO0FBQzdDLFdB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
@@ -32,6 +32,17 @@ export declare class ComponentEx extends Component implements Disposable {
32
32
  * @throws A {@link SilentError} if the component has already been unloaded.
33
33
  */
34
34
  addChild<TComponent extends Component>(component: TComponent): TComponent;
35
+ /**
36
+ * Checks whether a component is a direct child of this one.
37
+ *
38
+ * Only DIRECT children are reported — this is an ownership question, not a containment one. The caller that
39
+ * needs it is one holding several parents and deciding which of them a component belongs to, and for that a
40
+ * grandchild is the wrong answer: removing it from the parent that merely contains its parent would fail.
41
+ *
42
+ * @param component - The component to look for.
43
+ * @returns Whether the component is a direct child of this one.
44
+ */
45
+ hasChild(component: Component): boolean;
35
46
  /**
36
47
  * Loads the component.
37
48
  *
@@ -167,6 +167,7 @@ __export(components_exports, {
167
167
  "monkey-around-component": () => monkey_around_component,
168
168
  "notebook-navigator-menu-event-registrar-component": () => notebook_navigator_menu_event_registrar_component,
169
169
  "plugin-context-component": () => plugin_context_component,
170
+ "plugin-gate-component": () => plugin_gate_component,
170
171
  "plugin-notice-component": () => plugin_notice_component,
171
172
  "plugin-settings-component": () => plugin_settings_component,
172
173
  "plugin-settings-tab-component": () => plugin_settings_tab_component,
@@ -194,6 +195,7 @@ var menu_event_registrar_component = __toESM(__extractDefault(require('./menu-ev
194
195
  var monkey_around_component = __toESM(__extractDefault(require('./monkey-around-component.cjs')), 1);
195
196
  var notebook_navigator_menu_event_registrar_component = __toESM(__extractDefault(require('./notebook-navigator-menu-event-registrar-component.cjs')), 1);
196
197
  var plugin_context_component = __toESM(__extractDefault(require('./plugin-context-component.cjs')), 1);
198
+ var plugin_gate_component = __toESM(__extractDefault(require('./plugin-gate-component.cjs')), 1);
197
199
  var plugin_notice_component = __toESM(__extractDefault(require('./plugin-notice-component.cjs')), 1);
198
200
  var plugin_settings_component = __toESM(__extractDefault(require('./plugin-settings-component.cjs')), 1);
199
201
  var plugin_settings_tab_component = __toESM(__extractDefault(require('./plugin-settings-tab-component.cjs')), 1);
@@ -221,6 +223,7 @@ var syntax_highlighting_component = __toESM(__extractDefault(require('./syntax-h
221
223
  "monkey-around-component": null,
222
224
  "notebook-navigator-menu-event-registrar-component": null,
223
225
  "plugin-context-component": null,
226
+ "plugin-gate-component": null,
224
227
  "plugin-notice-component": null,
225
228
  "plugin-settings-component": null,
226
229
  "plugin-settings-tab-component": null,
@@ -232,4 +235,4 @@ var syntax_highlighting_component = __toESM(__extractDefault(require('./syntax-h
232
235
  "settings-migration-component": null,
233
236
  "syntax-highlighting-component": null
234
237
  });
235
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnYWJvcnQtc2lnbmFsLWNvbXBvbmVudCcgZnJvbSAnLi9hYm9ydC1zaWduYWwtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhbGwtd2luZG93cy1ldmVudC1jb21wb25lbnQnIGZyb20gJy4vYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnYXN5bmMtZXZlbnRzLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdjYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgtY29tcG9uZW50JyBmcm9tICcuL2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2NvbXBvbmVudC1leCcgZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NvbnNvbGUtZGVidWctY29tcG9uZW50JyBmcm9tICcuL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdkaXNwb3NhYmxlLWNvbXBvbmVudCcgZnJvbSAnLi9kaXNwb3NhYmxlLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQnIGZyb20gJy4vZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2dlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50JyBmcm9tICcuL2dlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdsYXlvdXQtcmVhZHktY29tcG9uZW50JyBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ21lbnUtZXZlbnQtcmVnaXN0cmFyLWNvbXBvbmVudCcgZnJvbSAnLi9tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ21vbmtleS1hcm91bmQtY29tcG9uZW50JyBmcm9tICcuL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50JyBmcm9tICcuL25vdGVib29rLW5hdmlnYXRvci1tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudCcgZnJvbSAnLi9wbHVnaW4tY29udGV4dC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1ub3RpY2UtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc3VnZ2VzdGlvbi1jb21wb25lbnQnIGZyb20gJy4vcGx1Z2luLXN1Z2dlc3Rpb24tY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudCcgZnJvbSAnLi9wb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVnaXN0cnktY29tcG9uZW50JyBmcm9tICcuL3JlZ2lzdHJ5LWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVuYW1lLWRlbGV0ZS1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9yZW5hbWUtZGVsZXRlLWhhbmRsZXItY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdybWRpci1ndWFyZC1jb21wb25lbnQnIGZyb20gJy4vcm1kaXItZ3VhcmQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5ncy1taWdyYXRpb24tY29tcG9uZW50JyBmcm9tICcuL3NldHRpbmdzLW1pZ3JhdGlvbi1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3N5bnRheC1oaWdobGlnaHRpbmctY29tcG9uZW50JyBmcm9tICcuL3N5bnRheC1oaWdobGlnaHRpbmctY29tcG9uZW50LnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBLGtDQUFBQTtBQUFBLEVBQUEscUNBQUFDO0FBQUEsRUFBQSx1Q0FBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBLEVBQUEsK0NBQUFDO0FBQUEsRUFBQSxzQkFBQUM7QUFBQSxFQUFBLGlDQUFBQztBQUFBLEVBQUEsOEJBQUFDO0FBQUEsRUFBQSxvQ0FBQUM7QUFBQSxFQUFBLHlEQUFBQztBQUFBLEVBQUEsZ0NBQUFDO0FBQUEsRUFBQSx3Q0FBQUM7QUFBQSxFQUFBLGlDQUFBQztBQUFBLEVBQUEsMkRBQUFDO0FBQUEsRUFBQSxrQ0FBQUM7QUFBQSxFQUFBLGlDQUFBQztBQUFBLEVBQUEsbUNBQUFDO0FBQUEsRUFBQSx1Q0FBQUM7QUFBQSxFQUFBLHFDQUFBQztBQUFBLEVBQUEsb0NBQUFDO0FBQUEsRUFBQSw0QkFBQUM7QUFBQSxFQUFBLHlDQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUEsRUFBQSxzQ0FBQUM7QUFBQSxFQUFBLHVDQUFBQztBQUFBO0FBQUE7QUFFQSxJQUFBeEIseUJBQTBDO0FBQzFDLElBQUFDLDhCQUErQztBQUMvQyxJQUFBQyxnQ0FBaUQ7QUFDakQsSUFBQUMseUJBQTBDO0FBQzFDLElBQUFDLHdDQUF5RDtBQUN6RCxJQUFBQyxlQUFnQztBQUNoQyxJQUFBQywwQkFBMkM7QUFDM0MsSUFBQUMsdUJBQXdDO0FBQ3hDLElBQUFDLDZCQUE4QztBQUM5QyxJQUFBQyxrREFBbUU7QUFDbkUsSUFBQUMseUJBQTBDO0FBQzFDLElBQUFDLGlDQUFrRDtBQUNsRCxJQUFBQywwQkFBMkM7QUFDM0MsSUFBQUMsb0RBQXFFO0FBQ3JFLElBQUFDLDJCQUE0QztBQUM1QyxJQUFBQywwQkFBMkM7QUFDM0MsSUFBQUMsNEJBQTZDO0FBQzdDLElBQUFDLGdDQUFpRDtBQUNqRCxJQUFBQyw4QkFBK0M7QUFDL0MsSUFBQUMsNkJBQThDO0FBQzlDLElBQUFDLHFCQUFzQztBQUN0QyxJQUFBQyxrQ0FBbUQ7QUFDbkQsSUFBQUMsd0JBQXlDO0FBQ3pDLElBQUFDLCtCQUFnRDtBQUNoRCxJQUFBQyxnQ0FBaUQ7IiwKICAibmFtZXMiOiBbImFib3J0LXNpZ25hbC1jb21wb25lbnQiLCAiYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50IiwgImFzeW5jLWVycm9yLWhhbmRsZXItY29tcG9uZW50IiwgImFzeW5jLWV2ZW50cy1jb21wb25lbnQiLCAiY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4LWNvbXBvbmVudCIsICJjb21wb25lbnQtZXgiLCAiY29uc29sZS1kZWJ1Zy1jb21wb25lbnQiLCAiZGlzcG9zYWJsZS1jb21wb25lbnQiLCAiZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQiLCAiZ2VuZXJhdGUtbWFya2Rvd24tbGluay1kZWZhdWx0LXBhcmFtcy1jb21wb25lbnQiLCAibGF5b3V0LXJlYWR5LWNvbXBvbmVudCIsICJtZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQiLCAibW9ua2V5LWFyb3VuZC1jb21wb25lbnQiLCAibm90ZWJvb2stbmF2aWdhdG9yLW1lbnUtZXZlbnQtcmVnaXN0cmFyLWNvbXBvbmVudCIsICJwbHVnaW4tY29udGV4dC1jb21wb25lbnQiLCAicGx1Z2luLW5vdGljZS1jb21wb25lbnQiLCAicGx1Z2luLXNldHRpbmdzLWNvbXBvbmVudCIsICJwbHVnaW4tc2V0dGluZ3MtdGFiLWNvbXBvbmVudCIsICJwbHVnaW4tc3VnZ2VzdGlvbi1jb21wb25lbnQiLCAicG9pbnRlci1wb3NpdGlvbi1jb21wb25lbnQiLCAicmVnaXN0cnktY29tcG9uZW50IiwgInJlbmFtZS1kZWxldGUtaGFuZGxlci1jb21wb25lbnQiLCAicm1kaXItZ3VhcmQtY29tcG9uZW50IiwgInNldHRpbmdzLW1pZ3JhdGlvbi1jb21wb25lbnQiLCAic3ludGF4LWhpZ2hsaWdodGluZy1jb21wb25lbnQiXQp9Cg==
238
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnYWJvcnQtc2lnbmFsLWNvbXBvbmVudCcgZnJvbSAnLi9hYm9ydC1zaWduYWwtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhbGwtd2luZG93cy1ldmVudC1jb21wb25lbnQnIGZyb20gJy4vYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnYXN5bmMtZXZlbnRzLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdjYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgtY29tcG9uZW50JyBmcm9tICcuL2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2NvbXBvbmVudC1leCcgZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NvbnNvbGUtZGVidWctY29tcG9uZW50JyBmcm9tICcuL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdkaXNwb3NhYmxlLWNvbXBvbmVudCcgZnJvbSAnLi9kaXNwb3NhYmxlLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQnIGZyb20gJy4vZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2dlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50JyBmcm9tICcuL2dlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdsYXlvdXQtcmVhZHktY29tcG9uZW50JyBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ21lbnUtZXZlbnQtcmVnaXN0cmFyLWNvbXBvbmVudCcgZnJvbSAnLi9tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ21vbmtleS1hcm91bmQtY29tcG9uZW50JyBmcm9tICcuL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50JyBmcm9tICcuL25vdGVib29rLW5hdmlnYXRvci1tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudCcgZnJvbSAnLi9wbHVnaW4tY29udGV4dC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1nYXRlLWNvbXBvbmVudCcgZnJvbSAnLi9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1ub3RpY2UtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc3VnZ2VzdGlvbi1jb21wb25lbnQnIGZyb20gJy4vcGx1Z2luLXN1Z2dlc3Rpb24tY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudCcgZnJvbSAnLi9wb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVnaXN0cnktY29tcG9uZW50JyBmcm9tICcuL3JlZ2lzdHJ5LWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVuYW1lLWRlbGV0ZS1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9yZW5hbWUtZGVsZXRlLWhhbmRsZXItY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdybWRpci1ndWFyZC1jb21wb25lbnQnIGZyb20gJy4vcm1kaXItZ3VhcmQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5ncy1taWdyYXRpb24tY29tcG9uZW50JyBmcm9tICcuL3NldHRpbmdzLW1pZ3JhdGlvbi1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3N5bnRheC1oaWdobGlnaHRpbmctY29tcG9uZW50JyBmcm9tICcuL3N5bnRheC1oaWdobGlnaHRpbmctY29tcG9uZW50LnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBLGtDQUFBQTtBQUFBLEVBQUEscUNBQUFDO0FBQUEsRUFBQSx1Q0FBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBLEVBQUEsK0NBQUFDO0FBQUEsRUFBQSxzQkFBQUM7QUFBQSxFQUFBLGlDQUFBQztBQUFBLEVBQUEsOEJBQUFDO0FBQUEsRUFBQSxvQ0FBQUM7QUFBQSxFQUFBLHlEQUFBQztBQUFBLEVBQUEsZ0NBQUFDO0FBQUEsRUFBQSx3Q0FBQUM7QUFBQSxFQUFBLGlDQUFBQztBQUFBLEVBQUEsMkRBQUFDO0FBQUEsRUFBQSxrQ0FBQUM7QUFBQSxFQUFBLCtCQUFBQztBQUFBLEVBQUEsaUNBQUFDO0FBQUEsRUFBQSxtQ0FBQUM7QUFBQSxFQUFBLHVDQUFBQztBQUFBLEVBQUEscUNBQUFDO0FBQUEsRUFBQSxvQ0FBQUM7QUFBQSxFQUFBLDRCQUFBQztBQUFBLEVBQUEseUNBQUFDO0FBQUEsRUFBQSwrQkFBQUM7QUFBQSxFQUFBLHNDQUFBQztBQUFBLEVBQUEsdUNBQUFDO0FBQUE7QUFBQTtBQUVBLElBQUF6Qix5QkFBMEM7QUFDMUMsSUFBQUMsOEJBQStDO0FBQy9DLElBQUFDLGdDQUFpRDtBQUNqRCxJQUFBQyx5QkFBMEM7QUFDMUMsSUFBQUMsd0NBQXlEO0FBQ3pELElBQUFDLGVBQWdDO0FBQ2hDLElBQUFDLDBCQUEyQztBQUMzQyxJQUFBQyx1QkFBd0M7QUFDeEMsSUFBQUMsNkJBQThDO0FBQzlDLElBQUFDLGtEQUFtRTtBQUNuRSxJQUFBQyx5QkFBMEM7QUFDMUMsSUFBQUMsaUNBQWtEO0FBQ2xELElBQUFDLDBCQUEyQztBQUMzQyxJQUFBQyxvREFBcUU7QUFDckUsSUFBQUMsMkJBQTRDO0FBQzVDLElBQUFDLHdCQUF5QztBQUN6QyxJQUFBQywwQkFBMkM7QUFDM0MsSUFBQUMsNEJBQTZDO0FBQzdDLElBQUFDLGdDQUFpRDtBQUNqRCxJQUFBQyw4QkFBK0M7QUFDL0MsSUFBQUMsNkJBQThDO0FBQzlDLElBQUFDLHFCQUFzQztBQUN0QyxJQUFBQyxrQ0FBbUQ7QUFDbkQsSUFBQUMsd0JBQXlDO0FBQ3pDLElBQUFDLCtCQUFnRDtBQUNoRCxJQUFBQyxnQ0FBaUQ7IiwKICAibmFtZXMiOiBbImFib3J0LXNpZ25hbC1jb21wb25lbnQiLCAiYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50IiwgImFzeW5jLWVycm9yLWhhbmRsZXItY29tcG9uZW50IiwgImFzeW5jLWV2ZW50cy1jb21wb25lbnQiLCAiY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4LWNvbXBvbmVudCIsICJjb21wb25lbnQtZXgiLCAiY29uc29sZS1kZWJ1Zy1jb21wb25lbnQiLCAiZGlzcG9zYWJsZS1jb21wb25lbnQiLCAiZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQiLCAiZ2VuZXJhdGUtbWFya2Rvd24tbGluay1kZWZhdWx0LXBhcmFtcy1jb21wb25lbnQiLCAibGF5b3V0LXJlYWR5LWNvbXBvbmVudCIsICJtZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQiLCAibW9ua2V5LWFyb3VuZC1jb21wb25lbnQiLCAibm90ZWJvb2stbmF2aWdhdG9yLW1lbnUtZXZlbnQtcmVnaXN0cmFyLWNvbXBvbmVudCIsICJwbHVnaW4tY29udGV4dC1jb21wb25lbnQiLCAicGx1Z2luLWdhdGUtY29tcG9uZW50IiwgInBsdWdpbi1ub3RpY2UtY29tcG9uZW50IiwgInBsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQiLCAicGx1Z2luLXNldHRpbmdzLXRhYi1jb21wb25lbnQiLCAicGx1Z2luLXN1Z2dlc3Rpb24tY29tcG9uZW50IiwgInBvaW50ZXItcG9zaXRpb24tY29tcG9uZW50IiwgInJlZ2lzdHJ5LWNvbXBvbmVudCIsICJyZW5hbWUtZGVsZXRlLWhhbmRsZXItY29tcG9uZW50IiwgInJtZGlyLWd1YXJkLWNvbXBvbmVudCIsICJzZXR0aW5ncy1taWdyYXRpb24tY29tcG9uZW50IiwgInN5bnRheC1oaWdobGlnaHRpbmctY29tcG9uZW50Il0KfQo=
@@ -14,6 +14,7 @@ export * as 'menu-event-registrar-component' from './menu-event-registrar-compon
14
14
  export * as 'monkey-around-component' from './monkey-around-component.cjs';
15
15
  export * as 'notebook-navigator-menu-event-registrar-component' from './notebook-navigator-menu-event-registrar-component.cjs';
16
16
  export * as 'plugin-context-component' from './plugin-context-component.cjs';
17
+ export * as 'plugin-gate-component' from './plugin-gate-component.cjs';
17
18
  export * as 'plugin-notice-component' from './plugin-notice-component.cjs';
18
19
  export * as 'plugin-settings-component' from './plugin-settings-component.cjs';
19
20
  export * as 'plugin-settings-tab-component' from './plugin-settings-tab-component.cjs';