obsidian-dev-utils 101.5.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.
- package/CHANGELOG.md +12 -0
- package/dist/integration-test-plugin/main.js +2612 -1815
- package/dist/lib/cjs/__merged.cjs +29 -1
- package/dist/lib/cjs/__merged.d.cts +5 -1
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/component-ex.cjs +14 -1
- package/dist/lib/cjs/obsidian/components/component-ex.d.cts +11 -0
- package/dist/lib/cjs/obsidian/components/index.cjs +7 -1
- package/dist/lib/cjs/obsidian/components/index.d.cts +2 -0
- package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/plugin-gate-component.cjs +520 -0
- package/dist/lib/cjs/obsidian/components/plugin-gate-component.d.cts +299 -0
- package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.cjs +17 -38
- package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.d.cts +25 -18
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +7 -2
- package/dist/lib/cjs/obsidian/components/settings-migration-component.cjs +232 -0
- package/dist/lib/cjs/obsidian/components/settings-migration-component.d.cts +120 -0
- package/dist/lib/cjs/obsidian/css-class.cjs +3 -1
- package/dist/lib/cjs/obsidian/css-class.d.cts +9 -0
- package/dist/lib/cjs/obsidian/html-element.cjs +27 -3
- package/dist/lib/cjs/obsidian/html-element.d.cts +36 -0
- package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +15 -1
- package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +14 -0
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +14 -0
- package/dist/lib/cjs/obsidian/mobile-trusted-input.cjs +1 -1
- package/dist/lib/cjs/obsidian/mobile-trusted-input.d.cts +5 -3
- package/dist/lib/cjs/obsidian/plugin/index.cjs +12 -3
- package/dist/lib/cjs/obsidian/plugin/index.d.cts +3 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-api.cjs +2 -2
- package/dist/lib/cjs/obsidian/plugin/plugin-api.d.cts +34 -15
- package/dist/lib/cjs/obsidian/plugin/plugin-install-state.cjs +208 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-install-state.d.cts +113 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-lifecycle-events.cjs +161 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-lifecycle-events.d.cts +119 -0
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +241 -21
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +133 -4
- package/dist/lib/cjs/obsidian/plugin/settings-migration-api.cjs +141 -0
- package/dist/lib/cjs/obsidian/plugin/settings-migration-api.d.cts +91 -0
- package/dist/lib/esm/__merged.d.mts +5 -1
- package/dist/lib/esm/__merged.mjs +32 -2
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/components/component-ex.d.mts +11 -0
- package/dist/lib/esm/obsidian/components/component-ex.mjs +14 -1
- package/dist/lib/esm/obsidian/components/index.d.mts +2 -0
- package/dist/lib/esm/obsidian/components/index.mjs +5 -1
- package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/plugin-gate-component.d.mts +299 -0
- package/dist/lib/esm/obsidian/components/plugin-gate-component.mjs +428 -0
- package/dist/lib/esm/obsidian/components/plugin-suggestion-component.d.mts +25 -18
- package/dist/lib/esm/obsidian/components/plugin-suggestion-component.mjs +21 -41
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +7 -2
- package/dist/lib/esm/obsidian/components/settings-migration-component.d.mts +120 -0
- package/dist/lib/esm/obsidian/components/settings-migration-component.mjs +127 -0
- package/dist/lib/esm/obsidian/css-class.d.mts +9 -0
- package/dist/lib/esm/obsidian/css-class.mjs +3 -1
- package/dist/lib/esm/obsidian/html-element.d.mts +36 -0
- package/dist/lib/esm/obsidian/html-element.mjs +24 -2
- package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +14 -0
- package/dist/lib/esm/obsidian/i18n/locales/en.mjs +15 -1
- package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +14 -0
- package/dist/lib/esm/obsidian/mobile-trusted-input.d.mts +5 -3
- package/dist/lib/esm/obsidian/mobile-trusted-input.mjs +1 -1
- package/dist/lib/esm/obsidian/plugin/index.d.mts +3 -0
- package/dist/lib/esm/obsidian/plugin/index.mjs +8 -2
- package/dist/lib/esm/obsidian/plugin/plugin-api.d.mts +34 -15
- package/dist/lib/esm/obsidian/plugin/plugin-api.mjs +2 -2
- package/dist/lib/esm/obsidian/plugin/plugin-install-state.d.mts +113 -0
- package/dist/lib/esm/obsidian/plugin/plugin-install-state.mjs +106 -0
- package/dist/lib/esm/obsidian/plugin/plugin-lifecycle-events.d.mts +119 -0
- package/dist/lib/esm/obsidian/plugin/plugin-lifecycle-events.mjs +54 -0
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +133 -4
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +245 -21
- package/dist/lib/esm/obsidian/plugin/settings-migration-api.d.mts +91 -0
- package/dist/lib/esm/obsidian/plugin/settings-migration-api.mjs +44 -0
- package/obsidian/components/plugin-gate-component/package.json +6 -0
- package/obsidian/components/settings-migration-component/package.json +6 -0
- package/obsidian/plugin/plugin-install-state/package.json +6 -0
- package/obsidian/plugin/plugin-lifecycle-events/package.json +6 -0
- package/obsidian/plugin/settings-migration-api/package.json +6 -0
- package/package.json +15 -15
|
@@ -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+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKCkgPz8gdW5kZWZpbmVkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZFByb21pc2UobG9hZFByb21pc2U6IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBsb2FkUHJvbWlzZVdpdGhSZXNldDogUHJvbWlzZTx2b2lkPiA9IGxvYWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubG9hZFByb21pc2UgPT09IGxvYWRQcm9taXNlV2l0aFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9hZFByb21pc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubG9hZFByb21pc2UgPSBsb2FkUHJvbWlzZVdpdGhSZXNldDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxzQkFBMEI7QUFFMUIsbUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4QixtQkFHTztBQUNQLHNCQUdPO0FBTUEsTUFBTSxvQkFBb0IsMEJBQWdDO0FBQUEsRUFDOUMsY0FBYyxvQkFBSSxJQUFlO0FBQUEsRUFDMUMsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBc0IsQ0FBQztBQUFBLEVBQ3ZCLGNBQW9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFvQjVCLFNBQXVDLFdBQW1DO0FBQ3hGLFFBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsWUFBTSxJQUFJ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
|
|
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,
|
|
@@ -175,6 +176,7 @@ __export(components_exports, {
|
|
|
175
176
|
"registry-component": () => registry_component,
|
|
176
177
|
"rename-delete-handler-component": () => rename_delete_handler_component,
|
|
177
178
|
"rmdir-guard-component": () => rmdir_guard_component,
|
|
179
|
+
"settings-migration-component": () => settings_migration_component,
|
|
178
180
|
"syntax-highlighting-component": () => syntax_highlighting_component
|
|
179
181
|
});
|
|
180
182
|
module.exports = __toCommonJS(components_exports);
|
|
@@ -193,6 +195,7 @@ var menu_event_registrar_component = __toESM(__extractDefault(require('./menu-ev
|
|
|
193
195
|
var monkey_around_component = __toESM(__extractDefault(require('./monkey-around-component.cjs')), 1);
|
|
194
196
|
var notebook_navigator_menu_event_registrar_component = __toESM(__extractDefault(require('./notebook-navigator-menu-event-registrar-component.cjs')), 1);
|
|
195
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);
|
|
196
199
|
var plugin_notice_component = __toESM(__extractDefault(require('./plugin-notice-component.cjs')), 1);
|
|
197
200
|
var plugin_settings_component = __toESM(__extractDefault(require('./plugin-settings-component.cjs')), 1);
|
|
198
201
|
var plugin_settings_tab_component = __toESM(__extractDefault(require('./plugin-settings-tab-component.cjs')), 1);
|
|
@@ -201,6 +204,7 @@ var pointer_position_component = __toESM(__extractDefault(require('./pointer-pos
|
|
|
201
204
|
var registry_component = __toESM(__extractDefault(require('./registry-component.cjs')), 1);
|
|
202
205
|
var rename_delete_handler_component = __toESM(__extractDefault(require('./rename-delete-handler-component.cjs')), 1);
|
|
203
206
|
var rmdir_guard_component = __toESM(__extractDefault(require('./rmdir-guard-component.cjs')), 1);
|
|
207
|
+
var settings_migration_component = __toESM(__extractDefault(require('./settings-migration-component.cjs')), 1);
|
|
204
208
|
var syntax_highlighting_component = __toESM(__extractDefault(require('./syntax-highlighting-component.cjs')), 1);
|
|
205
209
|
// Annotate the CommonJS export names for ESM import in node:
|
|
206
210
|
0 && (module.exports = {
|
|
@@ -219,6 +223,7 @@ var syntax_highlighting_component = __toESM(__extractDefault(require('./syntax-h
|
|
|
219
223
|
"monkey-around-component": null,
|
|
220
224
|
"notebook-navigator-menu-event-registrar-component": null,
|
|
221
225
|
"plugin-context-component": null,
|
|
226
|
+
"plugin-gate-component": null,
|
|
222
227
|
"plugin-notice-component": null,
|
|
223
228
|
"plugin-settings-component": null,
|
|
224
229
|
"plugin-settings-tab-component": null,
|
|
@@ -227,6 +232,7 @@ var syntax_highlighting_component = __toESM(__extractDefault(require('./syntax-h
|
|
|
227
232
|
"registry-component": null,
|
|
228
233
|
"rename-delete-handler-component": null,
|
|
229
234
|
"rmdir-guard-component": null,
|
|
235
|
+
"settings-migration-component": null,
|
|
230
236
|
"syntax-highlighting-component": null
|
|
231
237
|
});
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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';
|
|
@@ -22,4 +23,5 @@ export * as 'pointer-position-component' from './pointer-position-component.cjs'
|
|
|
22
23
|
export * as 'registry-component' from './registry-component.cjs';
|
|
23
24
|
export * as 'rename-delete-handler-component' from './rename-delete-handler-component.cjs';
|
|
24
25
|
export * as 'rmdir-guard-component' from './rmdir-guard-component.cjs';
|
|
26
|
+
export * as 'settings-migration-component' from './settings-migration-component.cjs';
|
|
25
27
|
export * as 'syntax-highlighting-component' from './syntax-highlighting-component.cjs';
|
|
@@ -252,4 +252,4 @@ function getMonkeyAroundPatches() {
|
|
|
252
252
|
around,
|
|
253
253
|
hasPatchToken
|
|
254
254
|
});
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbXByb3ZlZCB0eXBlLXNhZmUgd3JhcHBlciBvZiB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbW9ua2V5LWFyb3VuZH0gbGlicmFyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbmFsS2V5cyB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFyb3VuZCBhcyBvcmlnaW5hbEFyb3VuZCB9IGZyb20gJ21vbmtleS1hcm91bmQnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi8uLi90eXBlLnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEEgdHlwZSBvZiB0aGUgZmFjdG9yaWVzIHRvIGFwcGx5IHRvIHRoZSBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgRmFjdG9yaWVzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0gUGFydGlhbDxGdWxsRmFjdG9yaWVzPCRPYmplY3Q+PjtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGNhbGxhYmxlIFx1MjAxNCBhIG1ldGhvZCwgb3IgYSBmdW5jdGlvbi1saWtlIG9iamVjdCBzdWNoIGFzIGEgYERlYm91bmNlcmAuIFRoZXNlIGFyZSB0aGUgbWVtYmVyc1xuICogYWNjZXB0ZWQgYnkge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgZmlsdGVyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uS2V5czwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IENvbmRpdGlvbmFsS2V5czwkT2JqZWN0LCBHZW5lcmljRnVuY3Rpb24gfCB1bmRlZmluZWQ+ICYga2V5b2YgJE9iamVjdDtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGEgcGxhaW4gZnVuY3Rpb24gKGEgXCJyZWFsIG1ldGhvZFwiKS4gRnVuY3Rpb24tbGlrZSBvYmplY3RzIHRoYXQgY2FycnkgZXh0cmEgbWVtYmVycyBhcmVcbiAqIGV4Y2x1ZGVkIFx1MjAxNCBlLmcuIGEgYERlYm91bmNlcmAgKHdoaWNoIGFkZHMgYGNhbmNlbGAvYHJ1bmApIGJlbG9uZ3MgdG8ge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LFxuICogbm90IHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJNZXRob2RQYXRjaH0uIFRoZSBjaGVjayBpcyB3aGV0aGVyIHRoZSBtZW1iZXIgaGFzIGFueSBvd24ga2V5cyBiZXlvbmQgYSBiYXJlXG4gKiBmdW5jdGlvbidzIChgRXhjbHVkZTxrZXlvZiBULCBrZXlvZiBHZW5lcmljRnVuY3Rpb24+YCBpcyBgbmV2ZXJgKS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIGtleXMgYXJlIGZpbHRlcmVkLlxuICovXG5leHBvcnQgdHlwZSBNZXRob2RLZXlzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0gTWV0aG9kS2V5c01hcDwkT2JqZWN0PltGdW5jdGlvbktleXM8JE9iamVjdD5dO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJGdW5jdGlvblBhdGNofS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHR5cGVQYXJhbSBGdW5jdGlvbk5hbWUgLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3RlckZ1bmN0aW9uUGF0Y2hQYXJhbXM8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgRnVuY3Rpb25OYW1lIGV4dGVuZHMgRnVuY3Rpb25LZXlzPCRPYmplY3Q+PiB7XG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgJG9iamVjdDogJE9iamVjdDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU6IEZ1bmN0aW9uTmFtZTtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBwYXRjaCB1bmluc3RhbGxzIGl0c2VsZiB0aGUgZmlyc3QgdGltZSB0aGUgcGF0Y2hlZCBmdW5jdGlvbiBpcyBpbnZva2VkIChieVxuICAgKiB1bmxvYWRpbmcgdGhpcyBjb21wb25lbnQpLCByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIFx1MjAxNCBzbyB0aGUgaW50ZXJjZXB0aW9uIGhhcHBlbnMgZXhhY3RseSBvbmNlLlxuICAgKiBJbnRlbmRlZCBmb3IgYSBjb21wb25lbnQgZGVkaWNhdGVkIHRvIHRoaXMgc2luZ2xlIHBhdGNoLiBFeGlzdGluZyBjYWxsZXJzIHRoYXQgb21pdCBpdCBhcmVcbiAgICogdW5hZmZlY3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgb25jZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb3JpZ2luYWwgdmFsdWUgYW5kIHJldHVybnMgdGhlIHBhdGNoZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW5hbFZhbHVlIC0gVGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi5cbiAgICogQHJldHVybnMgVGhlIHBhdGNoZWQgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcGF0Y2hIYW5kbGVyKG9yaWdpbmFsVmFsdWU6ICRPYmplY3RbRnVuY3Rpb25OYW1lXSk6ICRPYmplY3RbRnVuY3Rpb25OYW1lXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyTWV0aG9kUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgdG8gcGF0Y2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJNZXRob2RQYXRjaFBhcmFtczwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4ge1xuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5ICRvYmplY3Q6ICRPYmplY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgbmFtZSB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZE5hbWU6IE1ldGhvZE5hbWU7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCB0aGUgcGF0Y2ggdW5pbnN0YWxscyBpdHNlbGYgdGhlIGZpcnN0IHRpbWUgdGhlIHBhdGNoZWQgbWV0aG9kIGlzIGludm9rZWQsIHJlc3RvcmluZ1xuICAgKiB0aGUgb3JpZ2luYWwgXHUyMDE0IHNvIHRoZSBpbnRlcmNlcHRpb24gaGFwcGVucyBleGFjdGx5IG9uY2UuIEV4aXN0aW5nIGNhbGxlcnMgdGhhdCBvbWl0IGl0IGFyZVxuICAgKiB1bmFmZmVjdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBvbmNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGNoIGhhbmRsZXIgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBwYXRjaEhhbmRsZXI6IFBhdGNoSGFuZGxlckZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB0b2tlbiB0byBpZGVudGlmeSB0aGUgcGF0Y2guXG4gICAqXG4gICAqIFRoZSB0b2tlbiBpcyByZWNvcmRlZCBhZ2FpbnN0IHRoZSBtZXRob2QgdGhpcyBwYXRjaCBJTlNUQUxMUywgc28gdGhlIG5leHQgcGF0Y2ggb2YgdGhlIHNhbWUgbWV0aG9kXG4gICAqIGRldGVjdHMgaXQgdmlhIHtAbGluayBoYXNQYXRjaFRva2VufSBvbiBpdHMgb3duIGBvcmlnaW5hbE1ldGhvZGAgYW5kIGNhbiBkZWZlciB0byB0aGlzIG9uZS4gVGhlXG4gICAqIHBhdGNoIHRoYXQgaW5zdGFsbHMgYSB0b2tlbiB0aGVyZWZvcmUgbmV2ZXIgc2VlcyBpdHMgb3duIHRva2VuIFx1MjAxNCBvbmx5IHRoZSBwYXRjaGVzIHN0YWNrZWQgb24gdG9wIG9mXG4gICAqIGl0IGRvLiBVc2UgYSBgU3ltYm9sLmZvcmAgdG9rZW4gdG8gbWFrZSB0aGUgZGV0ZWN0aW9uIHdvcmsgYWNyb3NzIGluZGVwZW5kZW50bHkgYnVuZGxlZCBjb3BpZXMgb2ZcbiAgICogdGhpcyBsaWJyYXJ5LlxuICAgKlxuICAgKiBUaGUgdG9rZW4gaXMgZHJvcHBlZCB3aGVuIHRoaXMgY29tcG9uZW50IHVubG9hZHMsIHNvIGEgbGF0ZXIgcGF0Y2ggdGhhdCBoYWQgZGVmZXJyZWQgdGFrZXMgb3ZlciBvblxuICAgKiBpdHMgbmV4dCBjYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0Y2hUb2tlbj86IHN5bWJvbDtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgcG9zdC1wYXRjaCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgcnVucyBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IHBvc3RQYXRjaEhhbmRsZXI/OiBQb3N0UGF0Y2hIYW5kbGVyRnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT47XG59XG5cbi8qKlxuICogQSBwYXRjaCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgaW50ZXJjZXB0cyBjYWxscyB0byBhIG1ldGhvZCBvbiBhbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGNoSGFuZGxlckZ1bmN0aW9uPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PiA9IChcbiAgcGFyYW1zOiBQYXRjaEhhbmRsZXJQYXJhbXM8JE9iamVjdCwgTWV0aG9kTmFtZT5cbikgPT4gUmV0dXJuVHlwZTxFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT4+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIGEge0BsaW5rIFBhdGNoSGFuZGxlckZ1bmN0aW9ufSBjYWxsYmFjay5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IGJlaW5nIHBhdGNoZWQuXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgYmVpbmcgcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXRjaEhhbmRsZXJQYXJhbXM8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+IHtcbiAgLyoqXG4gICAqIEludm9rZXMgdGhlIG9yaWdpbmFsIG1ldGhvZCB3aXRoIHRoZSBvcmlnaW5hbCBgdGhpc2AgYW5kIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHJldHVybnMgV2hhdGV2ZXIgdGhlIG9yaWdpbmFsIG1ldGhvZCByZXR1cm5zLlxuICAgKi9cbiAgZmFsbGJhY2sodGhpczogdm9pZCk6IFJldHVyblR5cGU8RXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+PjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIGFyZ3VtZW50cyBvZiB0aGUgaW50ZXJjZXB0ZWQgY2FsbCwgYXMgYSB0dXBsZS5cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbmFsQXJndW1lbnRzOiBQYXJhbWV0ZXJzPEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPj47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCAodW5wYXRjaGVkKSBtZXRob2QuIENhbGwgdmlhIGBvcmlnaW5hbEZuLmNhbGwob3JpZ2luYWxUaGlzLCAuLi5vcmlnaW5hbEFyZ3MpYC5cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbmFsTWV0aG9kOiBFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBtZXRob2QsIGJ1dCB3aXRoIHRoZSBgdGhpc2AgY29udGV4dCBhbHJlYWR5IGJvdW5kIHRvIHRoZSBvcmlnaW5hbCBvYmplY3QuIENhbGwgdmlhIGBvcmlnaW5hbE1ldGhvZEJvdW5kKC4uLm9yaWdpbmFsQXJncylgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxNZXRob2RCb3VuZDogT21pdFRoaXNQYXJhbWV0ZXI8RXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+PjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIGB0aGlzYCBjb250ZXh0IG9mIHRoZSBpbnRlcmNlcHRlZCBjYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxUaGlzOiAkT2JqZWN0O1xufVxuXG4vKipcbiAqIEEgcG9zdC1wYXRjaCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgcnVucyBhZnRlciBhIHBhdGNoIGlzIGFwcGxpZWQuXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBvc3RQYXRjaEhhbmRsZXJGdW5jdGlvbjwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4gPSAoXG4gIHBhcmFtczogUG9zdFBhdGNoSGFuZGxlclBhcmFtczwkT2JqZWN0LCBNZXRob2ROYW1lPlxuKSA9PiBNYXliZVJldHVybjxFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT4+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIGEge0BsaW5rIFBvc3RQYXRjaEhhbmRsZXJGdW5jdGlvbn0gY2FsbGJhY2suXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdFBhdGNoSGFuZGxlclBhcmFtczwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4ge1xuICAvKipcbiAgICogVGhlIG9yaWdpbmFsICh1bnBhdGNoZWQpIG1ldGhvZC4gQ2FsbCB2aWEgYG9yaWdpbmFsRm4uY2FsbChvcmlnaW5hbFRoaXMsIC4uLm9yaWdpbmFsQXJncylgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxNZXRob2Q6IEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcblxuICAvKipcbiAgICogVGhlIHBhdGNoZWQgbWV0aG9kLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0Y2hlZE1ldGhvZDogRXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xufVxuXG50eXBlIEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4gPSBHZW5lcmljRnVuY3Rpb248UGFyYW1ldGVyczxFeHRyYWN0PCRPYmplY3RbTWV0aG9kTmFtZV0sIEdlbmVyaWNGdW5jdGlvbj4+LCBSZXR1cm5UeXBlPEV4dHJhY3Q8JE9iamVjdFtNZXRob2ROYW1lXSwgR2VuZXJpY0Z1bmN0aW9uPj4+O1xuXG50eXBlIEZ1bGxGYWN0b3JpZXM8JE9iamVjdCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtLZXkgaW4ga2V5b2YgJE9iamVjdF06IChvcmlnaW5hbFZhbHVlOiAkT2JqZWN0W0tleV0pID0+ICRPYmplY3RbS2V5XTtcbn07XG5cbnR5cGUgTWV0aG9kS2V5c01hcDwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0tleSBpbiBGdW5jdGlvbktleXM8JE9iamVjdD5dOiBbRXhjbHVkZTxrZXlvZiBOb25OdWxsYWJsZTwkT2JqZWN0W0tleV0+LCBrZXlvZiBHZW5lcmljRnVuY3Rpb24+XSBleHRlbmRzIFtuZXZlcl0gPyBLZXkgOiBuZXZlcjtcbn07XG5cbnR5cGUgT3JpZ2luYWxGYWN0b3JpZXM8JE9iamVjdCBleHRlbmRzIEdlbmVyaWNPYmplY3Q+ID0gUGFyYW1ldGVyczx0eXBlb2Ygb3JpZ2luYWxBcm91bmQ8JE9iamVjdD4+WzFdO1xuXG50eXBlIFVuaW5zdGFsbGVyID0gKCkgPT4gdm9pZDtcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1hbmFnZXMgbW9ua2V5LXBhdGNoZXMgd2l0aCBsaWZlY3ljbGUtYm91bmQgY2xlYW51cC5cbiAqIEFsbCBwYXRjaGVzIHJlZ2lzdGVyZWQgdmlhIHRoaXMgY29tcG9uZW50IGFyZSBhdXRvbWF0aWNhbGx5IHVuaW5zdGFsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCB1bmxvYWRzLlxuICovXG5leHBvcnQgY2xhc3MgTW9ua2V5QXJvdW5kQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgcGF0Y2ggZm9yIGEgc2luZ2xlIGZ1bmN0aW9uLWxpa2UgbWVtYmVyIChhIG1ldGhvZCwgb3IgYSBjYWxsYWJsZSBzdWNoIGFzIGEgYERlYm91bmNlcmApIHVzaW5nIGEgc2ltcGxpZmllZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKiBAdHlwZVBhcmFtIEZ1bmN0aW9uTmFtZSAtIFRoZSBmdW5jdGlvbiBuYW1lIHRvIHBhdGNoLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHBhdGNoLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyRnVuY3Rpb25QYXRjaDwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBjb25zdCBGdW5jdGlvbk5hbWUgZXh0ZW5kcyBGdW5jdGlvbktleXM8JE9iamVjdD4+KFxuICAgIHBhcmFtczogTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJGdW5jdGlvblBhdGNoUGFyYW1zPCRPYmplY3QsIEZ1bmN0aW9uTmFtZT5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIGNvbnN0IGZhY3RvcmllczogRmFjdG9yaWVzPCRPYmplY3Q+ID0ge307XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8taW1tZWRpYXRlLW11dGF0aW9uIC0tIEEgY29tcHV0ZWQga2V5IGluIGFuIG9iamVjdCBsaXRlcmFsIGRvZXMgbm90IG1hdGNoIGBQYXJ0aWFsPEZ1bGxGYWN0b3JpZXM8JE9iamVjdD4+YCB3aGVuIHRoZSBrZXkgdHlwZSBpcyBnZW5lcmljOyBhc3NpZ25pbmcgYWZ0ZXIgZGVjbGFyYXRpb24ga2VlcHMgdGhlIHRhcmdldCB0eXBlIGtub3duLlxuICAgIGZhY3Rvcmllc1twYXJhbXMuZnVuY3Rpb25OYW1lXSA9IChvcmlnaW5hbFZhbHVlOiAkT2JqZWN0W0Z1bmN0aW9uTmFtZV0pOiAkT2JqZWN0W0Z1bmN0aW9uTmFtZV0gPT4ge1xuICAgICAgY29uc3QgcGF0Y2hlZFZhbHVlID0gcGFyYW1zLnBhdGNoSGFuZGxlcihvcmlnaW5hbFZhbHVlKTtcbiAgICAgIGlmICghcGFyYW1zLm9uY2UpIHtcbiAgICAgICAgcmV0dXJuIHBhdGNoZWRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQSBgb25jZWAgcGF0Y2ggdW5sb2FkcyB0aGlzIGNvbXBvbmVudCBhZnRlciB0aGUgZmlyc3QgaW52b2NhdGlvbiBcdTIwMTQgcnVubmluZyB0aGUgcmVnaXN0ZXJlZFxuICAgICAgLy8gVW5pbnN0YWxsZXIgYW5kIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwuIGB1bmxvYWRDb21wb25lbnRgIGlzIGFuIGFycm93IHNvIGl0IGNhcHR1cmVzIHRoZVxuICAgICAgLy8gQ29tcG9uZW50IGB0aGlzYDsgdGhlIG5lc3RlZCBgb25jZVBhdGNoZWRWYWx1ZWAgbXVzdCBiZSBhIGZ1bmN0aW9uIHRvIHJlY2VpdmUgdGhlIGNhbGwtdGltZVxuICAgICAgLy8gYHRoaXNgLiBPd24gbWVtYmVycyAoZS5nLiBhIGBEZWJvdW5jZXJgJ3MgYGNhbmNlbGAvYHJ1bmApIGFyZSBjb3BpZWQgb250byBpdCBzbyBmdW5jdGlvbi1saWtlXG4gICAgICAvLyBWYWx1ZXMga2VlcCB3b3JraW5nLlxuICAgICAgY29uc3QgdW5sb2FkQ29tcG9uZW50ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnVubG9hZCgpO1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIG9uY2VQYXRjaGVkVmFsdWUodGhpczogdW5rbm93biwgLi4uJGFyZ3VtZW50czogdW5rbm93bltdKTogdW5rbm93biB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkocGF0Y2hlZFZhbHVlLCB0aGlzLCAkYXJndW1lbnRzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB1bmxvYWRDb21wb25lbnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob25jZVBhdGNoZWRWYWx1ZSwgcGF0Y2hlZFZhbHVlKSBhcyAkT2JqZWN0W0Z1bmN0aW9uTmFtZV07XG4gICAgfTtcblxuICAgIHRoaXMucmVnaXN0ZXJQYXRjaChwYXJhbXMuJG9iamVjdCwgZmFjdG9yaWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBzaW5nbGUtbWV0aG9kIHBhdGNoIHVzaW5nIGEgc2ltcGxpZmllZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBvZiB0aGUgcGF0Y2guXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJNZXRob2RQYXRjaDwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBjb25zdCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4oXG4gICAgcGFyYW1zOiBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3Rlck1ldGhvZFBhdGNoUGFyYW1zPCRPYmplY3QsIE1ldGhvZE5hbWU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICB0eXBlICRGdW5jdGlvbiA9IEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcblxuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvblBhdGNoKHtcbiAgICAgICRvYmplY3Q6IHBhcmFtcy4kb2JqZWN0LFxuICAgICAgZnVuY3Rpb25OYW1lOiBwYXJhbXMubWV0aG9kTmFtZSxcbiAgICAgIG9uY2U6IHBhcmFtcy5vbmNlID8/IGZhbHNlLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAob3JpZ2luYWxNZXRob2RSYXcpID0+IHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbE1ldGhvZFJhdyBhcyAkRnVuY3Rpb247XG4gICAgICAgIGNvbnN0IGZpbmFsUGF0Y2hlZE1ldGhvZCA9IHBhcmFtcy5wb3N0UGF0Y2hIYW5kbGVyPy4oe1xuICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLFxuICAgICAgICAgIHBhdGNoZWRNZXRob2RcbiAgICAgICAgfSkgPz8gcGF0Y2hlZE1ldGhvZDtcbiAgICAgICAgcmV0dXJuIGZpbmFsUGF0Y2hlZE1ldGhvZCBhcyAkT2JqZWN0W01ldGhvZE5hbWVdO1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhdGNoZWRNZXRob2QodGhpczogJE9iamVjdCwgLi4ub3JpZ2luYWxBcmd1bWVudHM6IFBhcmFtZXRlcnM8JEZ1bmN0aW9uPik6IFJldHVyblR5cGU8JEZ1bmN0aW9uPiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtdGhpcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMsIHVuaWNvcm4vbm8tdGhpcy1hc3NpZ25tZW50IC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBgdGhpc2AgY29udGV4dC5cbiAgICAgICAgICBjb25zdCBvcmlnaW5hbFRoaXMgPSB0aGlzO1xuICAgICAgICAgIHJldHVybiBwYXJhbXMucGF0Y2hIYW5kbGVyKHtcbiAgICAgICAgICAgIGZhbGxiYWNrKCkge1xuICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuY2FsbChvcmlnaW5hbFRoaXMsIC4uLm9yaWdpbmFsQXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmlnaW5hbEFyZ3VtZW50cyxcbiAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLFxuICAgICAgICAgICAgb3JpZ2luYWxNZXRob2RCb3VuZDogb3JpZ2luYWxNZXRob2QuYmluZChvcmlnaW5hbFRoaXMpLFxuICAgICAgICAgICAgb3JpZ2luYWxUaGlzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghcGFyYW1zLnBhdGNoVG9rZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGUgdG9rZW4gbWFya3MgdGhlIElOU1RBTExFRCBtZXRob2QsIHJlYWQgYmFjayBvbmNlIHRoZSBwYXRjaCBpcyBpbiBwbGFjZS5cbiAgICAvLyBUaGF0IGlzIHRoZSBpZGVudGl0eSB0aGUgbmV4dCBwYXRjaCBvZiB0aGUgc2FtZSBtZXRob2QgcmVjZWl2ZXMgYXMgaXRzIGBvcmlnaW5hbE1ldGhvZGAuXG4gICAgLy8gYG1vbmtleS1hcm91bmRgIGluc3RhbGxzIGEgd3JhcHBlciBvZiBpdHMgb3duIGFuZCBleHBvc2VzIHRoZSB2YWx1ZSBidWlsdCBhYm92ZSBvbmx5IHZpYSBpdHMgcHJvdG90eXBlLlxuICAgIC8vIE1hcmtpbmcgdGhhdCB2YWx1ZSwgb3IgdGhlIG1ldGhvZCBiZWluZyB3cmFwcGVkIGFzIHRoaXMgb25jZSBkaWQsIG1hdGNoZXMgbm90aGluZyB0aGUgbmV4dCBwYXRjaCBzZWVzLlxuICAgIC8vIERyb3BwaW5nIHRoZSB0b2tlbiBvbiB1bmxvYWQgbGV0cyBhIGRlZmVycmluZyBsYXRlciBwYXRjaCB0YWtlIG92ZXIsIHNpbmNlIHRoZSBndWFyZCBpcyByZWFkIHBlciBjYWxsLlxuICAgIGNvbnN0IHBhdGNoZWRNZXRob2QgPSBwYXJhbXMuJG9iamVjdFtwYXJhbXMubWV0aG9kTmFtZV0gYXMgR2VuZXJpY0Z1bmN0aW9uO1xuICAgIGNvbnN0IG1vbmtleUFyb3VuZFBhdGNoZXMgPSBnZXRNb25rZXlBcm91bmRQYXRjaGVzKCk7XG4gICAgbW9ua2V5QXJvdW5kUGF0Y2hlcy5zZXQocGF0Y2hlZE1ldGhvZCwgcGFyYW1zLnBhdGNoVG9rZW4pO1xuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgbW9ua2V5QXJvdW5kUGF0Y2hlcy5kZWxldGUocGF0Y2hlZE1ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgcGF0Y2ggdXNpbmcgcmF3IGZhY3RvcmllcyAoYWR2YW5jZWQgQVBJKS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKiBAcGFyYW0gZmFjdG9yaWVzIC0gVGhlIGZhY3RvcmllcyB0byBhcHBseSB0byB0aGUgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyUGF0Y2g8JE9iamVjdCBleHRlbmRzIG9iamVjdD4oJG9iamVjdDogJE9iamVjdCwgZmFjdG9yaWVzOiBGYWN0b3JpZXM8JE9iamVjdD4pOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgY29uc3QgdW5pbnN0YWxsZXIgPSBhcm91bmQoJG9iamVjdCwgZmFjdG9yaWVzKTtcbiAgICB0aGlzLnJlZ2lzdGVyKHVuaW5zdGFsbGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBwYXRjaCB0byB0aGUgb2JqZWN0LlxuICogQmV0dGVyIHN0cm9uZ2x5LXR5cGVkIHZlcnNpb24gb2YgYG1vbmtleS1hcm91bmRgLlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gKiBAcGFyYW0gJG9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gKiBAcGFyYW0gZmFjdG9yaWVzIC0gVGhlIGZhY3RvcmllcyB0byBhcHBseSB0byB0aGUgb2JqZWN0LlxuICogQHJldHVybnMgVGhlIHVuaW5zdGFsbGVyIHRoYXQgcmVtb3ZlcyB0aGUgcGF0Y2ggd2hlbiBjYWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcm91bmQ8JE9iamVjdCBleHRlbmRzIG9iamVjdD4oJG9iamVjdDogJE9iamVjdCwgZmFjdG9yaWVzOiBGYWN0b3JpZXM8JE9iamVjdD4pOiBVbmluc3RhbGxlciB7XG4gIHJldHVybiBvcmlnaW5hbEFyb3VuZCgkb2JqZWN0IGFzIEdlbmVyaWNPYmplY3QsIGZhY3RvcmllcyBhcyBPcmlnaW5hbEZhY3RvcmllczxHZW5lcmljT2JqZWN0Pik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZnVuY3Rpb24gaGFzIGEgc3BlY2lmaWMgcGF0Y2ggdG9rZW4uXG4gKlxuICogQSB0b2tlbiBpcyBjYXJyaWVkIGJ5IHRoZSBtZXRob2QgYSB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyTWV0aG9kUGF0Y2h9IGNhbGwgSU5TVEFMTEVELCBzb1xuICogdGhlIGludGVuZGVkIGNhbGxlciBpcyBhIGxhdGVyIHBhdGNoIG9mIHRoZSBzYW1lIG1ldGhvZCwgY2hlY2tpbmcgdGhlIGBvcmlnaW5hbE1ldGhvZGAgaXQgd3JhcHBlZCBpblxuICogb3JkZXIgdG8gZGVmZXIgdG8gdGhlIHBhdGNoIGFscmVhZHkgaW4gcGxhY2U6XG4gKlxuICogYGBgdHNcbiAqIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsTWV0aG9kIH0pID0+IHtcbiAqICAgaWYgKGhhc1BhdGNoVG9rZW4ob3JpZ2luYWxNZXRob2QsIFBBVENIX1RPS0VOKSkge1xuICogICAgIHJldHVybiBmYWxsYmFjaygpO1xuICogICB9XG4gKiAgIC4uLlxuICogfVxuICogYGBgXG4gKlxuICogVGhlIGNoZWNrIGlzIG1hZGUgcGVyIGNhbGwsIHNvIGl0IHN0b3BzIHJlcG9ydGluZyB0aGUgZWFybGllciBwYXRjaCBvbmNlIHRoYXQgcGF0Y2gncyBjb21wb25lbnQgdW5sb2Fkcy5cbiAqXG4gKiBAcGFyYW0gJGZ1bmN0aW9uIC0gVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHBhcmFtIHBhdGNoVG9rZW4gLSBUaGUgcGF0Y2ggdG9rZW4gdG8gY2hlY2sgZm9yLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZnVuY3Rpb24gaGFzIHRoZSBwYXRjaCB0b2tlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1BhdGNoVG9rZW4oJGZ1bmN0aW9uOiBHZW5lcmljRnVuY3Rpb24sIHBhdGNoVG9rZW46IHN5bWJvbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpLmdldCgkZnVuY3Rpb24pID09PSBwYXRjaFRva2VuO1xufVxuXG5mdW5jdGlvbiBnZXRNb25rZXlBcm91bmRQYXRjaGVzKCk6IFdlYWtNYXA8R2VuZXJpY0Z1bmN0aW9uLCBzeW1ib2w+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSgnbW9ua2V5QXJvdW5kUGF0Y2hlcycsIG5ldyBXZWFrTWFwPEdlbmVyaWNGdW5jdGlvbiwgc3ltYm9sPigpKS52YWx1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLDJCQUF5QztBQU16QyxzQ0FBeUM7QUFDekMsMEJBQTRCO0FBNk1yQixNQUFNLDhCQUE4QixnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbXByb3ZlZCB0eXBlLXNhZmUgd3JhcHBlciBvZiB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbW9ua2V5LWFyb3VuZH0gbGlicmFyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbmFsS2V5cyB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFyb3VuZCBhcyBvcmlnaW5hbEFyb3VuZCB9IGZyb20gJ21vbmtleS1hcm91bmQnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi8uLi90eXBlLnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEEgdHlwZSBvZiB0aGUgZmFjdG9yaWVzIHRvIGFwcGx5IHRvIHRoZSBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgRmFjdG9yaWVzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0gUGFydGlhbDxGdWxsRmFjdG9yaWVzPCRPYmplY3Q+PjtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGNhbGxhYmxlIFx1MjAxNCBhIG1ldGhvZCwgb3IgYSBmdW5jdGlvbi1saWtlIG9iamVjdCBzdWNoIGFzIGEgYERlYm91bmNlcmAuIFRoZXNlIGFyZSB0aGUgbWVtYmVyc1xuICogYWNjZXB0ZWQgYnkge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgZmlsdGVyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uS2V5czwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IENvbmRpdGlvbmFsS2V5czwkT2JqZWN0LCBHZW5lcmljRnVuY3Rpb24gfCB1bmRlZmluZWQ+ICYga2V5b2YgJE9iamVjdDtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGEgcGxhaW4gZnVuY3Rpb24gKGEgXCJyZWFsIG1ldGhvZFwiKS4gRnVuY3Rpb24tbGlrZSBvYmplY3RzIHRoYXQgY2FycnkgZXh0cmEgbWVtYmVycyBhcmVcbiAqIGV4Y2x1ZGVkIFx1MjAxNCBlLmcuIGEgYERlYm91bmNlcmAgKHdoaWNoIGFkZHMgYGNhbmNlbGAvYHJ1bmApIGJlbG9uZ3MgdG8ge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LFxuICogbm90IHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJNZXRob2RQYXRjaH0uIFRoZSBjaGVjayBpcyB3aGV0aGVyIHRoZSBtZW1iZXIgaGFzIGFueSBvd24ga2V5cyBiZXlvbmQgYSBiYXJlXG4gKiBmdW5jdGlvbidzIChgRXhjbHVkZTxrZXlvZiBULCBrZXlvZiBHZW5lcmljRnVuY3Rpb24+YCBpcyBgbmV2ZXJgKS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIGtleXMgYXJlIGZpbHRlcmVkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWdlbmVyYXRlZC1lbXB0eS1vYmplY3QtdHlwZSAtLSBGYWxzZSBwb3NpdGl2ZS4gVGhlIHJ1bGUgcmVwb3J0cyB0aGUgYE1ldGhvZEtleXNNYXA8JE9iamVjdD5gIHJlZmVyZW5jZSwgd2hpY2ggaGFzIG5vIG1lbWJlcnMgdW50aWwgYCRPYmplY3RgIGlzIGtub3duLCBzbyBpdCByZWFkcyBhcyBlbXB0eSBpbnNpZGUgdGhpcyBnZW5lcmljIGRlY2xhcmF0aW9uLiBPbmNlIGluc3RhbnRpYXRlZCBpdCBpcyBhIHJlYWwga2V5IHVuaW9uLCBhcyB0aGUgYE1ldGhvZEtleXNgIHR5cGUgdGVzdHMgYXNzZXJ0LlxuZXhwb3J0IHR5cGUgTWV0aG9kS2V5czwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IE1ldGhvZEtleXNNYXA8JE9iamVjdD5bRnVuY3Rpb25LZXlzPCRPYmplY3Q+XTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyRnVuY3Rpb25QYXRjaH0uXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAqIEB0eXBlUGFyYW0gRnVuY3Rpb25OYW1lIC0gVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcGF0Y2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJGdW5jdGlvblBhdGNoUGFyYW1zPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIEZ1bmN0aW9uTmFtZSBleHRlbmRzIEZ1bmN0aW9uS2V5czwkT2JqZWN0Pj4ge1xuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5ICRvYmplY3Q6ICRPYmplY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBuYW1lIHRvIHBhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25OYW1lOiBGdW5jdGlvbk5hbWU7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCB0aGUgcGF0Y2ggdW5pbnN0YWxscyBpdHNlbGYgdGhlIGZpcnN0IHRpbWUgdGhlIHBhdGNoZWQgZnVuY3Rpb24gaXMgaW52b2tlZCAoYnlcbiAgICogdW5sb2FkaW5nIHRoaXMgY29tcG9uZW50KSwgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCBcdTIwMTQgc28gdGhlIGludGVyY2VwdGlvbiBoYXBwZW5zIGV4YWN0bHkgb25jZS5cbiAgICogSW50ZW5kZWQgZm9yIGEgY29tcG9uZW50IGRlZGljYXRlZCB0byB0aGlzIHNpbmdsZSBwYXRjaC4gRXhpc3RpbmcgY2FsbGVycyB0aGF0IG9taXQgaXQgYXJlXG4gICAqIHVuYWZmZWN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IG9uY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQYXRjaCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIG9yaWdpbmFsIHZhbHVlIGFuZCByZXR1cm5zIHRoZSBwYXRjaGVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gb3JpZ2luYWxWYWx1ZSAtIFRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoZSBwYXRjaGVkIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHBhdGNoSGFuZGxlcihvcmlnaW5hbFZhbHVlOiAkT2JqZWN0W0Z1bmN0aW9uTmFtZV0pOiAkT2JqZWN0W0Z1bmN0aW9uTmFtZV07XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBwYXNzZWQgdG8ge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3Rlck1ldGhvZFBhdGNofS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIHRvIHBhdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbmtleUFyb3VuZENvbXBvbmVudFJlZ2lzdGVyTWV0aG9kUGF0Y2hQYXJhbXM8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+IHtcbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSAkb2JqZWN0OiAkT2JqZWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIG5hbWUgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBtZXRob2ROYW1lOiBNZXRob2ROYW1lO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgdGhlIHBhdGNoIHVuaW5zdGFsbHMgaXRzZWxmIHRoZSBmaXJzdCB0aW1lIHRoZSBwYXRjaGVkIG1ldGhvZCBpcyBpbnZva2VkLCByZXN0b3JpbmdcbiAgICogdGhlIG9yaWdpbmFsIFx1MjAxNCBzbyB0aGUgaW50ZXJjZXB0aW9uIGhhcHBlbnMgZXhhY3RseSBvbmNlLiBFeGlzdGluZyBjYWxsZXJzIHRoYXQgb21pdCBpdCBhcmVcbiAgICogdW5hZmZlY3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgb25jZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRjaCBoYW5kbGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0Y2hIYW5kbGVyOiBQYXRjaEhhbmRsZXJGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdG9rZW4gdG8gaWRlbnRpZnkgdGhlIHBhdGNoLlxuICAgKlxuICAgKiBUaGUgdG9rZW4gaXMgcmVjb3JkZWQgYWdhaW5zdCB0aGUgbWV0aG9kIHRoaXMgcGF0Y2ggSU5TVEFMTFMsIHNvIHRoZSBuZXh0IHBhdGNoIG9mIHRoZSBzYW1lIG1ldGhvZFxuICAgKiBkZXRlY3RzIGl0IHZpYSB7QGxpbmsgaGFzUGF0Y2hUb2tlbn0gb24gaXRzIG93biBgb3JpZ2luYWxNZXRob2RgIGFuZCBjYW4gZGVmZXIgdG8gdGhpcyBvbmUuIFRoZVxuICAgKiBwYXRjaCB0aGF0IGluc3RhbGxzIGEgdG9rZW4gdGhlcmVmb3JlIG5ldmVyIHNlZXMgaXRzIG93biB0b2tlbiBcdTIwMTQgb25seSB0aGUgcGF0Y2hlcyBzdGFja2VkIG9uIHRvcCBvZlxuICAgKiBpdCBkby4gVXNlIGEgYFN5bWJvbC5mb3JgIHRva2VuIHRvIG1ha2UgdGhlIGRldGVjdGlvbiB3b3JrIGFjcm9zcyBpbmRlcGVuZGVudGx5IGJ1bmRsZWQgY29waWVzIG9mXG4gICAqIHRoaXMgbGlicmFyeS5cbiAgICpcbiAgICogVGhlIHRva2VuIGlzIGRyb3BwZWQgd2hlbiB0aGlzIGNvbXBvbmVudCB1bmxvYWRzLCBzbyBhIGxhdGVyIHBhdGNoIHRoYXQgaGFkIGRlZmVycmVkIHRha2VzIG92ZXIgb25cbiAgICogaXRzIG5leHQgY2FsbC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGNoVG9rZW4/OiBzeW1ib2w7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHBvc3QtcGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IHJ1bnMgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBwb3N0UGF0Y2hIYW5kbGVyPzogUG9zdFBhdGNoSGFuZGxlckZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xufVxuXG4vKipcbiAqIEEgcGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IGludGVyY2VwdHMgY2FsbHMgdG8gYSBtZXRob2Qgb24gYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgYmVpbmcgcGF0Y2hlZC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSBiZWluZyBwYXRjaGVkLlxuICovXG5leHBvcnQgdHlwZSBQYXRjaEhhbmRsZXJGdW5jdGlvbjwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4gPSAoXG4gIHBhcmFtczogUGF0Y2hIYW5kbGVyUGFyYW1zPCRPYmplY3QsIE1ldGhvZE5hbWU+XG4pID0+IFJldHVyblR5cGU8RXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+PjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byBhIHtAbGluayBQYXRjaEhhbmRsZXJGdW5jdGlvbn0gY2FsbGJhY2suXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0Y2hIYW5kbGVyUGFyYW1zPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PiB7XG4gIC8qKlxuICAgKiBJbnZva2VzIHRoZSBvcmlnaW5hbCBtZXRob2Qgd2l0aCB0aGUgb3JpZ2luYWwgYHRoaXNgIGFuZCBhcmd1bWVudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoYXRldmVyIHRoZSBvcmlnaW5hbCBtZXRob2QgcmV0dXJucy5cbiAgICovXG4gIGZhbGxiYWNrKHRoaXM6IHZvaWQpOiBSZXR1cm5UeXBlPEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPj47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBhcmd1bWVudHMgb2YgdGhlIGludGVyY2VwdGVkIGNhbGwsIGFzIGEgdHVwbGUuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbEFyZ3VtZW50czogUGFyYW1ldGVyczxFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgKHVucGF0Y2hlZCkgbWV0aG9kLiBDYWxsIHZpYSBgb3JpZ2luYWxGbi5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmdzKWAuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbE1ldGhvZDogRXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgbWV0aG9kLCBidXQgd2l0aCB0aGUgYHRoaXNgIGNvbnRleHQgYWxyZWFkeSBib3VuZCB0byB0aGUgb3JpZ2luYWwgb2JqZWN0LiBDYWxsIHZpYSBgb3JpZ2luYWxNZXRob2RCb3VuZCguLi5vcmlnaW5hbEFyZ3MpYC5cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbmFsTWV0aG9kQm91bmQ6IE9taXRUaGlzUGFyYW1ldGVyPEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPj47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBgdGhpc2AgY29udGV4dCBvZiB0aGUgaW50ZXJjZXB0ZWQgY2FsbC5cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbmFsVGhpczogJE9iamVjdDtcbn1cblxuLyoqXG4gKiBBIHBvc3QtcGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IHJ1bnMgYWZ0ZXIgYSBwYXRjaCBpcyBhcHBsaWVkLlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgYmVpbmcgcGF0Y2hlZC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSBiZWluZyBwYXRjaGVkLlxuICovXG5leHBvcnQgdHlwZSBQb3N0UGF0Y2hIYW5kbGVyRnVuY3Rpb248JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+ID0gKFxuICBwYXJhbXM6IFBvc3RQYXRjaEhhbmRsZXJQYXJhbXM8JE9iamVjdCwgTWV0aG9kTmFtZT5cbikgPT4gTWF5YmVSZXR1cm48RXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+PjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byBhIHtAbGluayBQb3N0UGF0Y2hIYW5kbGVyRnVuY3Rpb259IGNhbGxiYWNrLlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgYmVpbmcgcGF0Y2hlZC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSBiZWluZyBwYXRjaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RQYXRjaEhhbmRsZXJQYXJhbXM8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+IHtcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCAodW5wYXRjaGVkKSBtZXRob2QuIENhbGwgdmlhIGBvcmlnaW5hbEZuLmNhbGwob3JpZ2luYWxUaGlzLCAuLi5vcmlnaW5hbEFyZ3MpYC5cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbmFsTWV0aG9kOiBFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRjaGVkIG1ldGhvZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGNoZWRNZXRob2Q6IEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcbn1cblxudHlwZSBFeHRyYWN0RnVuY3Rpb248JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+ID0gR2VuZXJpY0Z1bmN0aW9uPFBhcmFtZXRlcnM8RXh0cmFjdDwkT2JqZWN0W01ldGhvZE5hbWVdLCBHZW5lcmljRnVuY3Rpb24+PiwgUmV0dXJuVHlwZTxFeHRyYWN0PCRPYmplY3RbTWV0aG9kTmFtZV0sIEdlbmVyaWNGdW5jdGlvbj4+PjtcblxudHlwZSBGdWxsRmFjdG9yaWVzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbS2V5IGluIGtleW9mICRPYmplY3RdOiAob3JpZ2luYWxWYWx1ZTogJE9iamVjdFtLZXldKSA9PiAkT2JqZWN0W0tleV07XG59O1xuXG50eXBlIE1ldGhvZEtleXNNYXA8JE9iamVjdCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtLZXkgaW4gRnVuY3Rpb25LZXlzPCRPYmplY3Q+XTogW0V4Y2x1ZGU8a2V5b2YgTm9uTnVsbGFibGU8JE9iamVjdFtLZXldPiwga2V5b2YgR2VuZXJpY0Z1bmN0aW9uPl0gZXh0ZW5kcyBbbmV2ZXJdID8gS2V5IDogbmV2ZXI7XG59O1xuXG50eXBlIE9yaWdpbmFsRmFjdG9yaWVzPCRPYmplY3QgZXh0ZW5kcyBHZW5lcmljT2JqZWN0PiA9IFBhcmFtZXRlcnM8dHlwZW9mIG9yaWdpbmFsQXJvdW5kPCRPYmplY3Q+PlsxXTtcblxudHlwZSBVbmluc3RhbGxlciA9ICgpID0+IHZvaWQ7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBtYW5hZ2VzIG1vbmtleS1wYXRjaGVzIHdpdGggbGlmZWN5Y2xlLWJvdW5kIGNsZWFudXAuXG4gKiBBbGwgcGF0Y2hlcyByZWdpc3RlcmVkIHZpYSB0aGlzIGNvbXBvbmVudCBhcmUgYXV0b21hdGljYWxseSB1bmluc3RhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2Fkcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vbmtleUFyb3VuZENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHBhdGNoIGZvciBhIHNpbmdsZSBmdW5jdGlvbi1saWtlIG1lbWJlciAoYSBtZXRob2QsIG9yIGEgY2FsbGFibGUgc3VjaCBhcyBhIGBEZWJvdW5jZXJgKSB1c2luZyBhIHNpbXBsaWZpZWQgaGFuZGxlci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHR5cGVQYXJhbSBGdW5jdGlvbk5hbWUgLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBwYXRjaC5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBwYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZ1bmN0aW9uUGF0Y2g8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgY29uc3QgRnVuY3Rpb25OYW1lIGV4dGVuZHMgRnVuY3Rpb25LZXlzPCRPYmplY3Q+PihcbiAgICBwYXJhbXM6IE1vbmtleUFyb3VuZENvbXBvbmVudFJlZ2lzdGVyRnVuY3Rpb25QYXRjaFBhcmFtczwkT2JqZWN0LCBGdW5jdGlvbk5hbWU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICBjb25zdCBmYWN0b3JpZXM6IEZhY3RvcmllczwkT2JqZWN0PiA9IHt9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWltbWVkaWF0ZS1tdXRhdGlvbiAtLSBBIGNvbXB1dGVkIGtleSBpbiBhbiBvYmplY3QgbGl0ZXJhbCBkb2VzIG5vdCBtYXRjaCBgUGFydGlhbDxGdWxsRmFjdG9yaWVzPCRPYmplY3Q+PmAgd2hlbiB0aGUga2V5IHR5cGUgaXMgZ2VuZXJpYzsgYXNzaWduaW5nIGFmdGVyIGRlY2xhcmF0aW9uIGtlZXBzIHRoZSB0YXJnZXQgdHlwZSBrbm93bi5cbiAgICBmYWN0b3JpZXNbcGFyYW1zLmZ1bmN0aW9uTmFtZV0gPSAob3JpZ2luYWxWYWx1ZTogJE9iamVjdFtGdW5jdGlvbk5hbWVdKTogJE9iamVjdFtGdW5jdGlvbk5hbWVdID0+IHtcbiAgICAgIGNvbnN0IHBhdGNoZWRWYWx1ZSA9IHBhcmFtcy5wYXRjaEhhbmRsZXIob3JpZ2luYWxWYWx1ZSk7XG4gICAgICBpZiAoIXBhcmFtcy5vbmNlKSB7XG4gICAgICAgIHJldHVybiBwYXRjaGVkVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEEgYG9uY2VgIHBhdGNoIHVubG9hZHMgdGhpcyBjb21wb25lbnQgYWZ0ZXIgdGhlIGZpcnN0IGludm9jYXRpb24gXHUyMDE0IHJ1bm5pbmcgdGhlIHJlZ2lzdGVyZWRcbiAgICAgIC8vIFVuaW5zdGFsbGVyIGFuZCByZXN0b3JpbmcgdGhlIG9yaWdpbmFsLiBgdW5sb2FkQ29tcG9uZW50YCBpcyBhbiBhcnJvdyBzbyBpdCBjYXB0dXJlcyB0aGVcbiAgICAgIC8vIENvbXBvbmVudCBgdGhpc2A7IHRoZSBuZXN0ZWQgYG9uY2VQYXRjaGVkVmFsdWVgIG11c3QgYmUgYSBmdW5jdGlvbiB0byByZWNlaXZlIHRoZSBjYWxsLXRpbWVcbiAgICAgIC8vIGB0aGlzYC4gT3duIG1lbWJlcnMgKGUuZy4gYSBgRGVib3VuY2VyYCdzIGBjYW5jZWxgL2BydW5gKSBhcmUgY29waWVkIG9udG8gaXQgc28gZnVuY3Rpb24tbGlrZVxuICAgICAgLy8gVmFsdWVzIGtlZXAgd29ya2luZy5cbiAgICAgIGNvbnN0IHVubG9hZENvbXBvbmVudCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy51bmxvYWQoKTtcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBvbmNlUGF0Y2hlZFZhbHVlKHRoaXM6IHVua25vd24sIC4uLiRhcmd1bWVudHM6IHVua25vd25bXSk6IHVua25vd24ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHBhdGNoZWRWYWx1ZSwgdGhpcywgJGFyZ3VtZW50cyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdW5sb2FkQ29tcG9uZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9uY2VQYXRjaGVkVmFsdWUsIHBhdGNoZWRWYWx1ZSkgYXMgJE9iamVjdFtGdW5jdGlvbk5hbWVdO1xuICAgIH07XG5cbiAgICB0aGlzLnJlZ2lzdGVyUGF0Y2gocGFyYW1zLiRvYmplY3QsIGZhY3Rvcmllcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2luZ2xlLW1ldGhvZCBwYXRjaCB1c2luZyBhIHNpbXBsaWZpZWQgaGFuZGxlci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIHRvIHBhdGNoLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHBhdGNoLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyTWV0aG9kUGF0Y2g8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgY29uc3QgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+KFxuICAgIHBhcmFtczogTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJNZXRob2RQYXRjaFBhcmFtczwkT2JqZWN0LCBNZXRob2ROYW1lPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgdHlwZSAkRnVuY3Rpb24gPSBFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT47XG5cbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25QYXRjaCh7XG4gICAgICAkb2JqZWN0OiBwYXJhbXMuJG9iamVjdCxcbiAgICAgIGZ1bmN0aW9uTmFtZTogcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICBvbmNlOiBwYXJhbXMub25jZSA/PyBmYWxzZSxcbiAgICAgIHBhdGNoSGFuZGxlcjogKG9yaWdpbmFsTWV0aG9kUmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gb3JpZ2luYWxNZXRob2RSYXcgYXMgJEZ1bmN0aW9uO1xuICAgICAgICBjb25zdCBmaW5hbFBhdGNoZWRNZXRob2QgPSBwYXJhbXMucG9zdFBhdGNoSGFuZGxlcj8uKHtcbiAgICAgICAgICBvcmlnaW5hbE1ldGhvZCxcbiAgICAgICAgICBwYXRjaGVkTWV0aG9kXG4gICAgICAgIH0pID8/IHBhdGNoZWRNZXRob2Q7XG4gICAgICAgIHJldHVybiBmaW5hbFBhdGNoZWRNZXRob2QgYXMgJE9iamVjdFtNZXRob2ROYW1lXTtcblxuICAgICAgICBmdW5jdGlvbiBwYXRjaGVkTWV0aG9kKHRoaXM6ICRPYmplY3QsIC4uLm9yaWdpbmFsQXJndW1lbnRzOiBQYXJhbWV0ZXJzPCRGdW5jdGlvbj4pOiBSZXR1cm5UeXBlPCRGdW5jdGlvbj4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXRoaXMsIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzLCB1bmljb3JuL25vLXRoaXMtYXNzaWdubWVudCAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgYHRoaXNgIGNvbnRleHQuXG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxUaGlzID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gcGFyYW1zLnBhdGNoSGFuZGxlcih7XG4gICAgICAgICAgICBmYWxsYmFjaygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmNhbGwob3JpZ2luYWxUaGlzLCAuLi5vcmlnaW5hbEFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JpZ2luYWxBcmd1bWVudHMsXG4gICAgICAgICAgICBvcmlnaW5hbE1ldGhvZCxcbiAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kQm91bmQ6IG9yaWdpbmFsTWV0aG9kLmJpbmQob3JpZ2luYWxUaGlzKSxcbiAgICAgICAgICAgIG9yaWdpbmFsVGhpc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXBhcmFtcy5wYXRjaFRva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIHRva2VuIG1hcmtzIHRoZSBJTlNUQUxMRUQgbWV0aG9kLCByZWFkIGJhY2sgb25jZSB0aGUgcGF0Y2ggaXMgaW4gcGxhY2UuXG4gICAgLy8gVGhhdCBpcyB0aGUgaWRlbnRpdHkgdGhlIG5leHQgcGF0Y2ggb2YgdGhlIHNhbWUgbWV0aG9kIHJlY2VpdmVzIGFzIGl0cyBgb3JpZ2luYWxNZXRob2RgLlxuICAgIC8vIGBtb25rZXktYXJvdW5kYCBpbnN0YWxscyBhIHdyYXBwZXIgb2YgaXRzIG93biBhbmQgZXhwb3NlcyB0aGUgdmFsdWUgYnVpbHQgYWJvdmUgb25seSB2aWEgaXRzIHByb3RvdHlwZS5cbiAgICAvLyBNYXJraW5nIHRoYXQgdmFsdWUsIG9yIHRoZSBtZXRob2QgYmVpbmcgd3JhcHBlZCBhcyB0aGlzIG9uY2UgZGlkLCBtYXRjaGVzIG5vdGhpbmcgdGhlIG5leHQgcGF0Y2ggc2Vlcy5cbiAgICAvLyBEcm9wcGluZyB0aGUgdG9rZW4gb24gdW5sb2FkIGxldHMgYSBkZWZlcnJpbmcgbGF0ZXIgcGF0Y2ggdGFrZSBvdmVyLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcmVhZCBwZXIgY2FsbC5cbiAgICBjb25zdCBwYXRjaGVkTWV0aG9kID0gcGFyYW1zLiRvYmplY3RbcGFyYW1zLm1ldGhvZE5hbWVdIGFzIEdlbmVyaWNGdW5jdGlvbjtcbiAgICBjb25zdCBtb25rZXlBcm91bmRQYXRjaGVzID0gZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpO1xuICAgIG1vbmtleUFyb3VuZFBhdGNoZXMuc2V0KHBhdGNoZWRNZXRob2QsIHBhcmFtcy5wYXRjaFRva2VuKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIG1vbmtleUFyb3VuZFBhdGNoZXMuZGVsZXRlKHBhdGNoZWRNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHBhdGNoIHVzaW5nIHJhdyBmYWN0b3JpZXMgKGFkdmFuY2VkIEFQSSkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSAkb2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHBhcmFtIGZhY3RvcmllcyAtIFRoZSBmYWN0b3JpZXMgdG8gYXBwbHkgdG8gdGhlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclBhdGNoPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6ICRPYmplY3QsIGZhY3RvcmllczogRmFjdG9yaWVzPCRPYmplY3Q+KTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIGNvbnN0IHVuaW5zdGFsbGVyID0gYXJvdW5kKCRvYmplY3QsIGZhY3Rvcmllcyk7XG4gICAgdGhpcy5yZWdpc3Rlcih1bmluc3RhbGxlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgcGF0Y2ggdG8gdGhlIG9iamVjdC5cbiAqIEJldHRlciBzdHJvbmdseS10eXBlZCB2ZXJzaW9uIG9mIGBtb25rZXktYXJvdW5kYC5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHBhcmFtIGZhY3RvcmllcyAtIFRoZSBmYWN0b3JpZXMgdG8gYXBwbHkgdG8gdGhlIG9iamVjdC5cbiAqIEByZXR1cm5zIFRoZSB1bmluc3RhbGxlciB0aGF0IHJlbW92ZXMgdGhlIHBhdGNoIHdoZW4gY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJvdW5kPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6ICRPYmplY3QsIGZhY3RvcmllczogRmFjdG9yaWVzPCRPYmplY3Q+KTogVW5pbnN0YWxsZXIge1xuICByZXR1cm4gb3JpZ2luYWxBcm91bmQoJG9iamVjdCBhcyBHZW5lcmljT2JqZWN0LCBmYWN0b3JpZXMgYXMgT3JpZ2luYWxGYWN0b3JpZXM8R2VuZXJpY09iamVjdD4pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZ1bmN0aW9uIGhhcyBhIHNwZWNpZmljIHBhdGNoIHRva2VuLlxuICpcbiAqIEEgdG9rZW4gaXMgY2FycmllZCBieSB0aGUgbWV0aG9kIGEge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3Rlck1ldGhvZFBhdGNofSBjYWxsIElOU1RBTExFRCwgc29cbiAqIHRoZSBpbnRlbmRlZCBjYWxsZXIgaXMgYSBsYXRlciBwYXRjaCBvZiB0aGUgc2FtZSBtZXRob2QsIGNoZWNraW5nIHRoZSBgb3JpZ2luYWxNZXRob2RgIGl0IHdyYXBwZWQgaW5cbiAqIG9yZGVyIHRvIGRlZmVyIHRvIHRoZSBwYXRjaCBhbHJlYWR5IGluIHBsYWNlOlxuICpcbiAqIGBgYHRzXG4gKiBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbE1ldGhvZCB9KSA9PiB7XG4gKiAgIGlmIChoYXNQYXRjaFRva2VuKG9yaWdpbmFsTWV0aG9kLCBQQVRDSF9UT0tFTikpIHtcbiAqICAgICByZXR1cm4gZmFsbGJhY2soKTtcbiAqICAgfVxuICogICAuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZSBjaGVjayBpcyBtYWRlIHBlciBjYWxsLCBzbyBpdCBzdG9wcyByZXBvcnRpbmcgdGhlIGVhcmxpZXIgcGF0Y2ggb25jZSB0aGF0IHBhdGNoJ3MgY29tcG9uZW50IHVubG9hZHMuXG4gKlxuICogQHBhcmFtICRmdW5jdGlvbiAtIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEBwYXJhbSBwYXRjaFRva2VuIC0gVGhlIHBhdGNoIHRva2VuIHRvIGNoZWNrIGZvci5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZ1bmN0aW9uIGhhcyB0aGUgcGF0Y2ggdG9rZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNQYXRjaFRva2VuKCRmdW5jdGlvbjogR2VuZXJpY0Z1bmN0aW9uLCBwYXRjaFRva2VuOiBzeW1ib2wpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldE1vbmtleUFyb3VuZFBhdGNoZXMoKS5nZXQoJGZ1bmN0aW9uKSA9PT0gcGF0Y2hUb2tlbjtcbn1cblxuZnVuY3Rpb24gZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpOiBXZWFrTWFwPEdlbmVyaWNGdW5jdGlvbiwgc3ltYm9sPiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoJ21vbmtleUFyb3VuZFBhdGNoZXMnLCBuZXcgV2Vha01hcDxHZW5lcmljRnVuY3Rpb24sIHN5bWJvbD4oKSkudmFsdWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSwyQkFBeUM7QUFNekMsc0NBQXlDO0FBQ3pDLDBCQUE0QjtBQThNckIsTUFBTSw4QkFBOEIsZ0NBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUTlDLHNCQUNMLFFBQ007QUFDTixTQUFLLGFBQWE7QUFFbEIsVUFBTSxZQUFnQyxDQUFDO0FBRXZDLGNBQVUsT0FBTyxZQUFZLElBQUksQ0FBQyxrQkFBZ0U7QUFDaEcsWUFBTSxlQUFlLE9BQU8sYUFBYSxhQUFhO0FBQ3RELFVBQUksQ0FBQyxPQUFPLE1BQU07QUFDaEIsZUFBTztBQUFBLE1BQ1Q7QUFPQSxZQUFNLGtCQUFrQixNQUFZO0FBQ2xDLGFBQUssT0FBTztBQUFBLE1BQ2Q7QUFDQSxlQUFTLG9CQUFtQyxZQUFnQztBQUMxRSxZQUFJO0FBQ0YsaUJBQU8sUUFBUSxNQUFNLGNBQWMsTUFBTSxVQUFVO0FBQUEsUUFDckQsVUFBRTtBQUNBLDBCQUFnQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUNBLGFBQU8sT0FBTyxPQUFPLGtCQUFrQixZQUFZO0FBQUEsSUFDckQ7QUFFQSxTQUFLLGNBQWMsT0FBTyxTQUFTLFNBQVM7QUFBQSxFQUM5QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTTyxvQkFDTCxRQUNNO0FBQ04sU0FBSyxhQUFhO0FBSWxCLFNBQUssc0JBQXNCO0FBQUEsTUFDekIsU0FBUyxPQUFPO0FBQUEsTUFDaEIsY0FBYyxPQUFPO0FBQUEsTUFDckIsTUFBTSxPQUFPLFFBQVE7QUFBQSxNQUNyQixjQUFjLENBQUMsc0JBQXNCO0FBQ25DLGNBQU0saUJBQWlCO0FBQ3ZCLGNBQU0scUJBQXFCLE9BQU8sbUJBQW1CO0FBQUEsVUFDbkQ7QUFBQSxVQUNBLGVBQUFBO0FBQUEsUUFDRixDQUFDLEtBQUtBO0FBQ04sZUFBTztBQUVQLGlCQUFTQSxrQkFBZ0MsbUJBQWlFO0FBRXhHLGdCQUFNLGVBQWU7QUFDckIsaUJBQU8sT0FBTyxhQUFhO0FBQUEsWUFDekIsV0FBVztBQUNULHFCQUFPLGVBQWUsS0FBSyxjQUFjLEdBQUcsaUJBQWlCO0FBQUEsWUFDL0Q7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EscUJBQXFCLGVBQWUsS0FBSyxZQUFZO0FBQUEsWUFDckQ7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUVELFFBQUksQ0FBQyxPQUFPLFlBQVk7QUFDdEI7QUFBQSxJQUNGO0FBT0EsVUFBTSxnQkFBZ0IsT0FBTyxRQUFRLE9BQU8sVUFBVTtBQUN0RCxVQUFNLHNCQUFzQix1QkFBdUI7QUFDbkQsd0JBQW9CLElBQUksZUFBZSxPQUFPLFVBQVU7QUFDeEQsU0FBSyxTQUFTLE1BQU07QUFDbEIsMEJBQW9CLE9BQU8sYUFBYTtBQUFBLElBQzFDLENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNPLGNBQXNDLFNBQWtCLFdBQXFDO0FBQ2xHLFNBQUssYUFBYTtBQUVsQixVQUFNLGNBQWMsT0FBTyxTQUFTLFNBQVM7QUFDN0MsU0FBSyxTQUFTLFdBQVc7QUFBQSxFQUMzQjtBQUNGO0FBV08sU0FBUyxPQUErQixTQUFrQixXQUE0QztBQUMzRyxhQUFPLHFCQUFBQyxRQUFlLFNBQTBCLFNBQTZDO0FBQy9GO0FBd0JPLFNBQVMsY0FBYyxXQUE0QixZQUE2QjtBQUNyRixTQUFPLHVCQUF1QixFQUFFLElBQUksU0FBUyxNQUFNO0FBQ3JEO0FBRUEsU0FBUyx5QkFBMkQ7QUFDbEUsYUFBTywwREFBeUIsdUJBQXVCLG9CQUFJLFFBQWlDLENBQUMsRUFBRTtBQUNqRzsiLAogICJuYW1lcyI6IFsicGF0Y2hlZE1ldGhvZCIsICJvcmlnaW5hbEFyb3VuZCJdCn0K
|