obsidian-dev-utils 55.4.1 → 56.0.1
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 +11 -0
- package/dist/lib/cjs/abort-controller.cjs +6 -4
- package/dist/lib/cjs/array.cjs +5 -3
- package/dist/lib/cjs/async-events.cjs +7 -5
- package/dist/lib/cjs/async.cjs +6 -4
- package/dist/lib/cjs/blob.cjs +6 -4
- package/dist/lib/cjs/codemirror/index.cjs +5 -3
- package/dist/lib/cjs/codemirror/state-field-spec.cjs +5 -3
- package/dist/lib/cjs/css-class.cjs +5 -3
- package/dist/lib/cjs/debug-controller.cjs +5 -3
- package/dist/lib/cjs/debug.cjs +5 -3
- package/dist/lib/cjs/enum.cjs +5 -3
- package/dist/lib/cjs/error.cjs +5 -3
- package/dist/lib/cjs/function.cjs +5 -3
- package/dist/lib/cjs/html-element.cjs +18 -16
- package/dist/lib/cjs/index.cjs +5 -3
- package/dist/lib/cjs/library.cjs +6 -4
- package/dist/lib/cjs/object-utils.cjs +5 -3
- package/dist/lib/cjs/obsidian/@types/i18next.d.cts +3 -3
- package/dist/lib/cjs/obsidian/app.cjs +5 -3
- package/dist/lib/cjs/obsidian/async-with-notice.cjs +8 -6
- package/dist/lib/cjs/obsidian/attachment-path.cjs +5 -3
- package/dist/lib/cjs/obsidian/backlink.cjs +5 -3
- package/dist/lib/cjs/obsidian/callout.cjs +5 -3
- package/dist/lib/cjs/obsidian/code-block-markdown-information.cjs +5 -3
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +355 -0
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +178 -0
- package/dist/lib/cjs/obsidian/{commands/index.cjs → command-handlers/app-active-file-provider.cjs} +29 -34
- package/dist/lib/cjs/obsidian/command-handlers/app-active-file-provider.d.cts +25 -0
- package/dist/lib/cjs/obsidian/command-handlers/app-menu-event-registrar.cjs +173 -0
- package/dist/lib/cjs/obsidian/command-handlers/app-menu-event-registrar.d.cts +41 -0
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +164 -0
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +26 -0
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.cjs +174 -0
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +143 -0
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +269 -0
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +114 -0
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +261 -0
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +112 -0
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +261 -0
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +112 -0
- package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.cjs +177 -0
- package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.d.cts +38 -0
- package/dist/lib/cjs/obsidian/command-handlers/index.cjs +170 -0
- package/dist/lib/cjs/obsidian/command-handlers/index.d.cts +9 -0
- package/dist/lib/cjs/obsidian/components/all-windows-event-handler.cjs +6 -4
- package/dist/lib/cjs/obsidian/components/async-component.cjs +164 -0
- package/dist/lib/cjs/obsidian/components/async-component.d.cts +28 -0
- package/dist/lib/cjs/obsidian/components/async-events-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/index.cjs +8 -3
- package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/components/setting-components/checkbox-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/code-highlighter-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/date-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/date-time-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/email-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/file-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/index.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/month-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/multiple-dropdown-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/multiple-email-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/multiple-file-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/multiple-text-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/number-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/password-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/setting-component-wrapper.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/telephone-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/text-based-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/time-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/tri-state-checkbox-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/typed-dropdown-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/typed-multiple-dropdown-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/typed-range-text-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/typed-text-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/url-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/validator-component.cjs +7 -5
- package/dist/lib/cjs/obsidian/components/setting-components/value-component-with-change-tracking.cjs +5 -3
- package/dist/lib/cjs/obsidian/components/setting-components/week-component.cjs +5 -3
- package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.cjs +5 -3
- package/dist/lib/cjs/obsidian/constructors/index.cjs +5 -3
- package/dist/lib/cjs/obsidian/dataview-link.cjs +5 -3
- package/dist/lib/cjs/obsidian/dataview.cjs +6 -4
- package/dist/lib/cjs/obsidian/editor.cjs +5 -3
- package/dist/lib/cjs/obsidian/file-change.cjs +5 -3
- package/dist/lib/cjs/obsidian/file-manager.cjs +5 -3
- package/dist/lib/cjs/obsidian/file-system.cjs +5 -3
- package/dist/lib/cjs/obsidian/frontmatter-link-cache-with-offsets.cjs +5 -3
- package/dist/lib/cjs/obsidian/frontmatter.cjs +5 -3
- package/dist/lib/cjs/obsidian/i18n/{custom-type-options-base.cjs → custom-type-options.cjs} +7 -5
- package/dist/lib/cjs/obsidian/i18n/custom-type-options.d.cts +37 -0
- package/dist/lib/cjs/obsidian/{plugin/plugin-settings-wrapper.cjs → i18n/default-translations.cjs} +8 -5
- package/dist/lib/cjs/obsidian/i18n/default-translations.d.cts +14 -0
- package/dist/lib/cjs/obsidian/i18n/i18n.cjs +5 -3
- package/dist/lib/cjs/obsidian/i18n/i18n.d.cts +2 -13
- package/dist/lib/cjs/obsidian/i18n/index.cjs +11 -9
- package/dist/lib/cjs/obsidian/i18n/index.d.cts +2 -2
- package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +5 -3
- package/dist/lib/cjs/obsidian/i18n/locales/index.cjs +5 -3
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.cjs +5 -3
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +1 -2
- package/dist/lib/cjs/obsidian/index.cjs +8 -6
- package/dist/lib/cjs/obsidian/index.d.cts +1 -1
- package/dist/lib/cjs/obsidian/is-in-obsidian.cjs +5 -3
- package/dist/lib/cjs/obsidian/link.cjs +5 -3
- package/dist/lib/cjs/obsidian/logger.cjs +5 -3
- package/dist/lib/cjs/obsidian/loop.cjs +5 -3
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +5 -3
- package/dist/lib/cjs/obsidian/markdown-view.cjs +5 -3
- package/dist/lib/cjs/obsidian/markdown.cjs +5 -3
- package/dist/lib/cjs/obsidian/metadata-cache.cjs +5 -3
- package/dist/lib/cjs/obsidian/modals/alert.cjs +8 -6
- package/dist/lib/cjs/obsidian/modals/confirm.cjs +8 -6
- package/dist/lib/cjs/obsidian/modals/index.cjs +8 -6
- package/dist/lib/cjs/obsidian/modals/index.d.cts +1 -1
- package/dist/lib/cjs/obsidian/modals/{modal-base.cjs → modal.cjs} +8 -6
- package/dist/lib/cjs/obsidian/modals/prompt.cjs +8 -6
- package/dist/lib/cjs/obsidian/modals/select-item.cjs +7 -5
- package/dist/lib/cjs/obsidian/monkey-around.cjs +5 -3
- package/dist/lib/cjs/obsidian/obsidian-settings.cjs +5 -3
- package/dist/lib/cjs/obsidian/pdf.cjs +8 -6
- package/dist/lib/cjs/obsidian/plugin/components/abort-signal-component.cjs +162 -0
- package/dist/lib/cjs/obsidian/plugin/components/abort-signal-component.d.cts +27 -0
- package/dist/lib/cjs/obsidian/plugin/components/async-error-handler-component.cjs +165 -0
- package/dist/lib/cjs/obsidian/plugin/components/async-error-handler-component.d.cts +29 -0
- package/dist/lib/cjs/obsidian/{commands/non-editor-command-base.cjs → plugin/components/console-debug-component.cjs} +26 -20
- package/dist/lib/cjs/obsidian/plugin/components/console-debug-component.d.cts +29 -0
- package/dist/lib/cjs/obsidian/{i18n/default-translations-base.cjs → plugin/components/i18n-component.cjs} +39 -6
- package/dist/lib/cjs/obsidian/plugin/components/i18n-component.d.cts +23 -0
- package/dist/lib/cjs/obsidian/plugin/components/index.cjs +170 -0
- package/dist/lib/cjs/obsidian/plugin/components/index.d.cts +9 -0
- package/dist/lib/cjs/obsidian/plugin/components/lifecycle-events-component.cjs +207 -0
- package/dist/lib/cjs/obsidian/plugin/components/lifecycle-events-component.d.cts +59 -0
- package/dist/lib/cjs/obsidian/plugin/components/plugin-context-component.cjs +162 -0
- package/dist/lib/cjs/obsidian/plugin/components/plugin-context-component.d.cts +25 -0
- package/dist/lib/cjs/obsidian/plugin/components/plugin-notice-component.cjs +161 -0
- package/dist/lib/cjs/obsidian/plugin/components/plugin-notice-component.d.cts +25 -0
- package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-component.cjs +566 -0
- package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-component.d.cts +302 -0
- package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-tab-component.cjs +166 -0
- package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-tab-component.d.cts +28 -0
- package/dist/lib/cjs/obsidian/plugin/index.cjs +11 -18
- package/dist/lib/cjs/obsidian/plugin/index.d.cts +2 -5
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +5 -3
- package/dist/lib/cjs/obsidian/plugin/path-settings.cjs +5 -3
- package/dist/lib/cjs/obsidian/plugin/plugin-context.cjs +16 -7
- package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +3 -2
- package/dist/lib/cjs/obsidian/plugin/plugin-id.cjs +5 -3
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +412 -0
- package/dist/lib/cjs/obsidian/plugin/{plugin-settings-tab-base.d.cts → plugin-settings-tab.d.cts} +29 -11
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +135 -3
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +106 -5
- package/dist/lib/cjs/obsidian/queue.cjs +5 -3
- package/dist/lib/cjs/obsidian/react/app-context.cjs +5 -3
- package/dist/lib/cjs/obsidian/react/index.cjs +5 -3
- package/dist/lib/cjs/obsidian/reference.cjs +5 -3
- package/dist/lib/cjs/obsidian/rename-delete-handler.cjs +5 -3
- package/dist/lib/cjs/obsidian/resource-url.cjs +5 -3
- package/dist/lib/cjs/obsidian/setting-ex.cjs +5 -3
- package/dist/lib/cjs/obsidian/setting-group-ex.cjs +5 -3
- package/dist/lib/cjs/obsidian/validation.cjs +5 -3
- package/dist/lib/cjs/obsidian/vault-delete.cjs +5 -3
- package/dist/lib/cjs/obsidian/vault.cjs +5 -3
- package/dist/lib/cjs/obsidian/workspace.cjs +5 -3
- package/dist/lib/cjs/path.cjs +5 -3
- package/dist/lib/cjs/reg-exp.cjs +5 -3
- package/dist/lib/cjs/script-utils/build.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +6 -4
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/index.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +8 -6
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/rename-css-plugin.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild.cjs +5 -3
- package/dist/lib/cjs/script-utils/bundlers/index.cjs +5 -3
- package/dist/lib/cjs/script-utils/cli-utils.cjs +5 -3
- package/dist/lib/cjs/script-utils/code-generator.cjs +5 -3
- package/dist/lib/cjs/script-utils/commitlint-config.cjs +5 -3
- package/dist/lib/cjs/script-utils/exec.cjs +5 -3
- package/dist/lib/cjs/script-utils/formatters/dprint.cjs +6 -4
- package/dist/lib/cjs/script-utils/formatters/index.cjs +5 -3
- package/dist/lib/cjs/script-utils/fs.cjs +5 -3
- package/dist/lib/cjs/script-utils/index.cjs +5 -3
- package/dist/lib/cjs/script-utils/json.cjs +5 -3
- package/dist/lib/cjs/script-utils/linters/cspell.cjs +5 -3
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +6 -4
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +5 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +5 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +5 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +5 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/rule-tester-helper.cjs +5 -3
- package/dist/lib/cjs/script-utils/linters/eslint.cjs +6 -4
- package/dist/lib/cjs/script-utils/linters/index.cjs +5 -3
- package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +5 -3
- package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +9 -5
- package/dist/lib/cjs/script-utils/nano-staged-config.cjs +5 -3
- package/dist/lib/cjs/script-utils/npm-publish.cjs +5 -3
- package/dist/lib/cjs/script-utils/npm-run.cjs +5 -3
- package/dist/lib/cjs/script-utils/npm.cjs +5 -3
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +5 -3
- package/dist/lib/cjs/script-utils/root.cjs +5 -3
- package/dist/lib/cjs/script-utils/test-runners/index.cjs +5 -3
- package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +5 -3
- package/dist/lib/cjs/script-utils/version.cjs +5 -3
- package/dist/lib/cjs/strict-proxy.cjs +5 -3
- package/dist/lib/cjs/string.cjs +5 -3
- package/dist/lib/cjs/transformers/date-transformer.cjs +5 -3
- package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -3
- package/dist/lib/cjs/transformers/group-transformer.cjs +5 -3
- package/dist/lib/cjs/transformers/index.cjs +5 -3
- package/dist/lib/cjs/transformers/map-transformer.cjs +5 -3
- package/dist/lib/cjs/transformers/set-transformer.cjs +5 -3
- package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +5 -3
- package/dist/lib/cjs/transformers/transformer.cjs +5 -3
- package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +5 -3
- package/dist/lib/cjs/transformers/typed-transformer.cjs +5 -3
- package/dist/lib/cjs/two-way-map.cjs +5 -3
- package/dist/lib/cjs/type-guards.cjs +5 -3
- package/dist/lib/cjs/type.cjs +5 -3
- package/dist/lib/cjs/url.cjs +5 -3
- package/dist/lib/cjs/value-provider.cjs +5 -3
- package/dist/lib/esm/abort-controller.mjs +4 -2
- package/dist/lib/esm/array.mjs +3 -1
- package/dist/lib/esm/async-events.mjs +5 -3
- package/dist/lib/esm/async.mjs +4 -2
- package/dist/lib/esm/blob.mjs +4 -2
- package/dist/lib/esm/codemirror/index.mjs +3 -1
- package/dist/lib/esm/codemirror/state-field-spec.mjs +2 -0
- package/dist/lib/esm/css-class.mjs +3 -1
- package/dist/lib/esm/debug-controller.mjs +2 -0
- package/dist/lib/esm/debug.mjs +3 -1
- package/dist/lib/esm/enum.mjs +3 -1
- package/dist/lib/esm/error.mjs +3 -1
- package/dist/lib/esm/function.mjs +3 -1
- package/dist/lib/esm/html-element.mjs +16 -14
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/library.mjs +4 -2
- package/dist/lib/esm/object-utils.mjs +3 -1
- package/dist/lib/esm/obsidian/@types/i18next.d.mts +3 -3
- package/dist/lib/esm/obsidian/app.mjs +3 -1
- package/dist/lib/esm/obsidian/async-with-notice.mjs +6 -4
- package/dist/lib/esm/obsidian/attachment-path.mjs +3 -1
- package/dist/lib/esm/obsidian/backlink.mjs +3 -1
- package/dist/lib/esm/obsidian/callout.mjs +3 -1
- package/dist/lib/esm/obsidian/code-block-markdown-information.mjs +2 -0
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +178 -0
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +247 -0
- package/dist/lib/esm/obsidian/command-handlers/app-active-file-provider.d.mts +25 -0
- package/dist/lib/esm/obsidian/command-handlers/app-active-file-provider.mjs +46 -0
- package/dist/lib/esm/obsidian/command-handlers/app-menu-event-registrar.d.mts +41 -0
- package/dist/lib/esm/obsidian/command-handlers/app-menu-event-registrar.mjs +65 -0
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +26 -0
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +56 -0
- package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +143 -0
- package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +66 -0
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +114 -0
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +161 -0
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.d.mts +112 -0
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +157 -0
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.d.mts +112 -0
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +157 -0
- package/dist/lib/esm/obsidian/command-handlers/global-command-handler.d.mts +38 -0
- package/dist/lib/esm/obsidian/command-handlers/global-command-handler.mjs +69 -0
- package/dist/lib/esm/obsidian/command-handlers/index.d.mts +9 -0
- package/dist/lib/esm/obsidian/command-handlers/index.mjs +44 -0
- package/dist/lib/esm/obsidian/components/all-windows-event-handler.mjs +4 -2
- package/dist/lib/esm/obsidian/components/async-component.d.mts +28 -0
- package/dist/lib/esm/obsidian/components/async-component.mjs +56 -0
- package/dist/lib/esm/obsidian/components/async-events-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/components/index.mjs +5 -1
- package/dist/lib/esm/obsidian/components/setting-components/checkbox-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/code-highlighter-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/date-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/date-time-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/email-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/file-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/index.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/month-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/multiple-dropdown-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/multiple-email-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/multiple-file-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/multiple-text-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/number-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/password-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/setting-component-wrapper.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/telephone-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/text-based-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/time-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/tri-state-checkbox-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/typed-dropdown-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/typed-multiple-dropdown-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/typed-range-text-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/typed-text-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/url-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/setting-components/validator-component.mjs +5 -3
- package/dist/lib/esm/obsidian/components/setting-components/value-component-with-change-tracking.mjs +2 -0
- package/dist/lib/esm/obsidian/components/setting-components/week-component.mjs +3 -1
- package/dist/lib/esm/obsidian/constructors/getDomEventsHandlersConstructor.mjs +3 -1
- package/dist/lib/esm/obsidian/constructors/index.mjs +3 -1
- package/dist/lib/esm/obsidian/dataview-link.mjs +3 -1
- package/dist/lib/esm/obsidian/dataview.mjs +4 -2
- package/dist/lib/esm/obsidian/editor.mjs +3 -1
- package/dist/lib/esm/obsidian/file-change.mjs +3 -1
- package/dist/lib/esm/obsidian/file-manager.mjs +3 -1
- package/dist/lib/esm/obsidian/file-system.mjs +3 -1
- package/dist/lib/esm/obsidian/frontmatter-link-cache-with-offsets.mjs +3 -1
- package/dist/lib/esm/obsidian/frontmatter.mjs +3 -1
- package/dist/lib/esm/obsidian/i18n/custom-type-options.d.mts +37 -0
- package/dist/lib/esm/obsidian/i18n/custom-type-options.mjs +25 -0
- package/dist/lib/esm/obsidian/i18n/default-translations.d.mts +14 -0
- package/dist/lib/esm/obsidian/i18n/default-translations.mjs +25 -0
- package/dist/lib/esm/obsidian/i18n/i18n.d.mts +2 -13
- package/dist/lib/esm/obsidian/i18n/i18n.mjs +3 -1
- package/dist/lib/esm/obsidian/i18n/index.d.mts +2 -2
- package/dist/lib/esm/obsidian/i18n/index.mjs +7 -5
- package/dist/lib/esm/obsidian/i18n/locales/en.mjs +3 -1
- package/dist/lib/esm/obsidian/i18n/locales/index.mjs +3 -1
- package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +1 -2
- package/dist/lib/esm/obsidian/i18n/locales/translations-map.mjs +3 -1
- package/dist/lib/esm/obsidian/index.d.mts +1 -1
- package/dist/lib/esm/obsidian/index.mjs +5 -3
- package/dist/lib/esm/obsidian/is-in-obsidian.mjs +3 -1
- package/dist/lib/esm/obsidian/link.mjs +3 -1
- package/dist/lib/esm/obsidian/logger.mjs +3 -1
- package/dist/lib/esm/obsidian/loop.mjs +3 -1
- package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +3 -1
- package/dist/lib/esm/obsidian/markdown-view.mjs +3 -1
- package/dist/lib/esm/obsidian/markdown.mjs +3 -1
- package/dist/lib/esm/obsidian/metadata-cache.mjs +3 -1
- package/dist/lib/esm/obsidian/modals/alert.mjs +4 -2
- package/dist/lib/esm/obsidian/modals/confirm.mjs +4 -2
- package/dist/lib/esm/obsidian/modals/index.d.mts +1 -1
- package/dist/lib/esm/obsidian/modals/index.mjs +5 -3
- package/dist/lib/esm/obsidian/modals/modal.mjs +54 -0
- package/dist/lib/esm/obsidian/modals/prompt.mjs +4 -2
- package/dist/lib/esm/obsidian/modals/select-item.mjs +4 -2
- package/dist/lib/esm/obsidian/monkey-around.mjs +3 -1
- package/dist/lib/esm/obsidian/obsidian-settings.mjs +3 -1
- package/dist/lib/esm/obsidian/pdf.mjs +6 -4
- package/dist/lib/esm/obsidian/plugin/components/abort-signal-component.d.mts +27 -0
- package/dist/lib/esm/obsidian/plugin/components/abort-signal-component.mjs +54 -0
- package/dist/lib/esm/obsidian/plugin/components/async-error-handler-component.d.mts +29 -0
- package/dist/lib/esm/obsidian/plugin/components/async-error-handler-component.mjs +57 -0
- package/dist/lib/esm/obsidian/plugin/components/console-debug-component.d.mts +29 -0
- package/dist/lib/esm/obsidian/plugin/components/console-debug-component.mjs +52 -0
- package/dist/lib/esm/obsidian/plugin/components/i18n-component.d.mts +23 -0
- package/dist/lib/esm/obsidian/plugin/components/i18n-component.mjs +48 -0
- package/dist/lib/esm/obsidian/plugin/components/index.d.mts +9 -0
- package/dist/lib/esm/obsidian/plugin/components/index.mjs +44 -0
- package/dist/lib/esm/obsidian/plugin/components/lifecycle-events-component.d.mts +59 -0
- package/dist/lib/esm/obsidian/plugin/components/lifecycle-events-component.mjs +102 -0
- package/dist/lib/esm/obsidian/plugin/components/plugin-context-component.d.mts +25 -0
- package/dist/lib/esm/obsidian/plugin/components/plugin-context-component.mjs +57 -0
- package/dist/lib/esm/obsidian/plugin/components/plugin-notice-component.d.mts +25 -0
- package/dist/lib/esm/obsidian/plugin/components/plugin-notice-component.mjs +56 -0
- package/dist/lib/esm/obsidian/plugin/components/plugin-settings-component.d.mts +302 -0
- package/dist/lib/esm/obsidian/plugin/components/plugin-settings-component.mjs +463 -0
- package/dist/lib/esm/obsidian/plugin/components/plugin-settings-tab-component.d.mts +28 -0
- package/dist/lib/esm/obsidian/plugin/components/plugin-settings-tab-component.mjs +58 -0
- package/dist/lib/esm/obsidian/plugin/index.d.mts +2 -5
- package/dist/lib/esm/obsidian/plugin/index.mjs +7 -11
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +3 -1
- package/dist/lib/esm/obsidian/plugin/path-settings.mjs +3 -1
- package/dist/lib/esm/obsidian/plugin/plugin-context.d.mts +3 -2
- package/dist/lib/esm/obsidian/plugin/plugin-context.mjs +14 -5
- package/dist/lib/esm/obsidian/plugin/plugin-id.mjs +3 -1
- package/dist/lib/esm/obsidian/plugin/{plugin-settings-tab-base.d.mts → plugin-settings-tab.d.mts} +29 -11
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +313 -0
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +106 -5
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +140 -2
- package/dist/lib/esm/obsidian/queue.mjs +3 -1
- package/dist/lib/esm/obsidian/react/app-context.mjs +3 -1
- package/dist/lib/esm/obsidian/react/index.mjs +3 -1
- package/dist/lib/esm/obsidian/reference.mjs +3 -1
- package/dist/lib/esm/obsidian/rename-delete-handler.mjs +3 -1
- package/dist/lib/esm/obsidian/resource-url.mjs +3 -1
- package/dist/lib/esm/obsidian/setting-ex.mjs +3 -1
- package/dist/lib/esm/obsidian/setting-group-ex.mjs +3 -1
- package/dist/lib/esm/obsidian/validation.mjs +3 -1
- package/dist/lib/esm/obsidian/vault-delete.mjs +3 -1
- package/dist/lib/esm/obsidian/vault.mjs +3 -1
- package/dist/lib/esm/obsidian/workspace.mjs +3 -1
- package/dist/lib/esm/path.mjs +3 -1
- package/dist/lib/esm/reg-exp.mjs +3 -1
- package/dist/lib/esm/script-utils/build.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/index.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +5 -3
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/rename-css-plugin.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild.mjs +3 -1
- package/dist/lib/esm/script-utils/bundlers/index.mjs +3 -1
- package/dist/lib/esm/script-utils/cli-utils.mjs +3 -1
- package/dist/lib/esm/script-utils/code-generator.mjs +3 -1
- package/dist/lib/esm/script-utils/commitlint-config.mjs +3 -1
- package/dist/lib/esm/script-utils/exec.mjs +3 -1
- package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -1
- package/dist/lib/esm/script-utils/formatters/index.mjs +3 -1
- package/dist/lib/esm/script-utils/fs.mjs +3 -1
- package/dist/lib/esm/script-utils/index.mjs +3 -1
- package/dist/lib/esm/script-utils/json.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/cspell.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +4 -2
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/rule-tester-helper.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/markdownlint.mjs +6 -2
- package/dist/lib/esm/script-utils/nano-staged-config.mjs +3 -1
- package/dist/lib/esm/script-utils/npm-publish.mjs +3 -1
- package/dist/lib/esm/script-utils/npm-run.mjs +3 -1
- package/dist/lib/esm/script-utils/npm.mjs +3 -1
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +3 -1
- package/dist/lib/esm/script-utils/root.mjs +3 -1
- package/dist/lib/esm/script-utils/test-runners/index.mjs +3 -1
- package/dist/lib/esm/script-utils/test-runners/vitest.mjs +3 -1
- package/dist/lib/esm/script-utils/version.mjs +3 -1
- package/dist/lib/esm/strict-proxy.mjs +3 -1
- package/dist/lib/esm/string.mjs +3 -1
- package/dist/lib/esm/transformers/date-transformer.mjs +3 -1
- package/dist/lib/esm/transformers/duration-transformer.mjs +3 -1
- package/dist/lib/esm/transformers/group-transformer.mjs +3 -1
- package/dist/lib/esm/transformers/index.mjs +3 -1
- package/dist/lib/esm/transformers/map-transformer.mjs +3 -1
- package/dist/lib/esm/transformers/set-transformer.mjs +3 -1
- package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +3 -1
- package/dist/lib/esm/transformers/transformer.mjs +3 -1
- package/dist/lib/esm/transformers/two-way-map-transformer.mjs +3 -1
- package/dist/lib/esm/transformers/typed-transformer.mjs +3 -1
- package/dist/lib/esm/two-way-map.mjs +3 -1
- package/dist/lib/esm/type-guards.mjs +3 -1
- package/dist/lib/esm/type.mjs +3 -1
- package/dist/lib/esm/url.mjs +3 -1
- package/dist/lib/esm/value-provider.mjs +3 -1
- package/obsidian/Components/async-component/package.json +6 -0
- package/obsidian/Modals/modal/package.json +6 -0
- package/obsidian/Plugin/components/abort-signal-component/package.json +6 -0
- package/obsidian/Plugin/components/async-error-handler-component/package.json +6 -0
- package/obsidian/Plugin/components/console-debug-component/package.json +6 -0
- package/obsidian/Plugin/components/i18n-component/package.json +6 -0
- package/obsidian/Plugin/components/index/package.json +6 -0
- package/obsidian/Plugin/components/lifecycle-events-component/package.json +6 -0
- package/obsidian/Plugin/components/package.json +6 -0
- package/obsidian/Plugin/components/plugin-context-component/package.json +6 -0
- package/obsidian/Plugin/components/plugin-notice-component/package.json +6 -0
- package/obsidian/Plugin/components/plugin-settings-component/package.json +6 -0
- package/obsidian/Plugin/components/plugin-settings-tab-component/package.json +6 -0
- package/obsidian/Plugin/{plugin-settings-wrapper → plugin-settings-tab}/package.json +3 -3
- package/obsidian/command-handlers/abstract-file-command-handler/package.json +6 -0
- package/obsidian/command-handlers/app-active-file-provider/package.json +6 -0
- package/obsidian/command-handlers/app-menu-event-registrar/package.json +6 -0
- package/obsidian/command-handlers/command-handler/package.json +6 -0
- package/obsidian/command-handlers/command-handler-component/package.json +6 -0
- package/obsidian/command-handlers/editor-command-handler/package.json +6 -0
- package/obsidian/command-handlers/file-command-handler/package.json +6 -0
- package/obsidian/command-handlers/folder-command-handler/package.json +6 -0
- package/obsidian/command-handlers/global-command-handler/package.json +6 -0
- package/obsidian/command-handlers/index/package.json +6 -0
- package/obsidian/command-handlers/package.json +6 -0
- package/obsidian/i18n/{custom-type-options-base → custom-type-options}/package.json +3 -3
- package/obsidian/i18n/{default-translations-base → default-translations}/package.json +3 -3
- package/package.json +33 -12
- package/dist/lib/cjs/obsidian/commands/abstract-file-command-base.cjs +0 -441
- package/dist/lib/cjs/obsidian/commands/abstract-file-command-base.d.cts +0 -264
- package/dist/lib/cjs/obsidian/commands/command-base.cjs +0 -255
- package/dist/lib/cjs/obsidian/commands/command-base.d.cts +0 -125
- package/dist/lib/cjs/obsidian/commands/editor-command-base.cjs +0 -282
- package/dist/lib/cjs/obsidian/commands/editor-command-base.d.cts +0 -139
- package/dist/lib/cjs/obsidian/commands/file-command-base.cjs +0 -343
- package/dist/lib/cjs/obsidian/commands/file-command-base.d.cts +0 -191
- package/dist/lib/cjs/obsidian/commands/folder-command-base.cjs +0 -335
- package/dist/lib/cjs/obsidian/commands/folder-command-base.d.cts +0 -184
- package/dist/lib/cjs/obsidian/commands/index.d.cts +0 -6
- package/dist/lib/cjs/obsidian/commands/non-editor-command-base.d.cts +0 -34
- package/dist/lib/cjs/obsidian/i18n/custom-type-options-base.d.cts +0 -37
- package/dist/lib/cjs/obsidian/i18n/default-translations-base.d.cts +0 -25
- package/dist/lib/cjs/obsidian/plugin/plugin-base.cjs +0 -409
- package/dist/lib/cjs/obsidian/plugin/plugin-base.d.cts +0 -176
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-manager-base.cjs +0 -486
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-manager-base.d.cts +0 -186
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab-base.cjs +0 -401
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-wrapper.d.cts +0 -25
- package/dist/lib/cjs/obsidian/plugin/plugin-types-base.cjs +0 -122
- package/dist/lib/cjs/obsidian/plugin/plugin-types-base.d.cts +0 -87
- package/dist/lib/esm/obsidian/commands/abstract-file-command-base.d.mts +0 -264
- package/dist/lib/esm/obsidian/commands/abstract-file-command-base.mjs +0 -329
- package/dist/lib/esm/obsidian/commands/command-base.d.mts +0 -125
- package/dist/lib/esm/obsidian/commands/command-base.mjs +0 -146
- package/dist/lib/esm/obsidian/commands/editor-command-base.d.mts +0 -139
- package/dist/lib/esm/obsidian/commands/editor-command-base.mjs +0 -176
- package/dist/lib/esm/obsidian/commands/file-command-base.d.mts +0 -191
- package/dist/lib/esm/obsidian/commands/file-command-base.mjs +0 -240
- package/dist/lib/esm/obsidian/commands/folder-command-base.d.mts +0 -184
- package/dist/lib/esm/obsidian/commands/folder-command-base.mjs +0 -232
- package/dist/lib/esm/obsidian/commands/index.d.mts +0 -6
- package/dist/lib/esm/obsidian/commands/index.mjs +0 -36
- package/dist/lib/esm/obsidian/commands/non-editor-command-base.d.mts +0 -34
- package/dist/lib/esm/obsidian/commands/non-editor-command-base.mjs +0 -46
- package/dist/lib/esm/obsidian/i18n/custom-type-options-base.d.mts +0 -37
- package/dist/lib/esm/obsidian/i18n/custom-type-options-base.mjs +0 -23
- package/dist/lib/esm/obsidian/i18n/default-translations-base.d.mts +0 -25
- package/dist/lib/esm/obsidian/i18n/default-translations-base.mjs +0 -23
- package/dist/lib/esm/obsidian/modals/modal-base.mjs +0 -52
- package/dist/lib/esm/obsidian/plugin/plugin-base.d.mts +0 -176
- package/dist/lib/esm/obsidian/plugin/plugin-base.mjs +0 -317
- package/dist/lib/esm/obsidian/plugin/plugin-settings-manager-base.d.mts +0 -186
- package/dist/lib/esm/obsidian/plugin/plugin-settings-manager-base.mjs +0 -385
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab-base.mjs +0 -302
- package/dist/lib/esm/obsidian/plugin/plugin-settings-wrapper.d.mts +0 -25
- package/dist/lib/esm/obsidian/plugin/plugin-settings-wrapper.mjs +0 -22
- package/dist/lib/esm/obsidian/plugin/plugin-types-base.d.mts +0 -87
- package/dist/lib/esm/obsidian/plugin/plugin-types-base.mjs +0 -22
- package/obsidian/Commands/abstract-file-command-base/package.json +0 -6
- package/obsidian/Commands/command-base/package.json +0 -6
- package/obsidian/Commands/editor-command-base/package.json +0 -6
- package/obsidian/Commands/file-command-base/package.json +0 -6
- package/obsidian/Commands/folder-command-base/package.json +0 -6
- package/obsidian/Commands/index/package.json +0 -6
- package/obsidian/Commands/non-editor-command-base/package.json +0 -6
- package/obsidian/Commands/package.json +0 -6
- package/obsidian/Modals/modal-base/package.json +0 -6
- package/obsidian/Plugin/plugin-base/package.json +0 -6
- package/obsidian/Plugin/plugin-settings-manager-base/package.json +0 -6
- package/obsidian/Plugin/plugin-settings-tab-base/package.json +0 -6
- package/obsidian/Plugin/plugin-types-base/package.json +0 -6
- /package/dist/lib/cjs/obsidian/modals/{modal-base.d.cts → modal.d.cts} +0 -0
- /package/dist/lib/esm/obsidian/modals/{modal-base.d.mts → modal.d.mts} +0 -0
|
@@ -4,6 +4,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
(function initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
7
8
|
if (globalThis.process) {
|
|
8
9
|
return;
|
|
9
10
|
}
|
|
@@ -16,6 +17,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
16
17
|
env: {},
|
|
17
18
|
platform: 'android'
|
|
18
19
|
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
19
21
|
globalThis.process = browserProcess;
|
|
20
22
|
})();
|
|
21
23
|
|
|
@@ -788,4 +790,4 @@ export {
|
|
|
788
790
|
EmptyFolderBehavior,
|
|
789
791
|
registerRenameDeleteHandlers
|
|
790
792
|
};
|
|
791
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3JlbmFtZS1kZWxldGUtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBoYW5kbGluZyByZW5hbWUgYW5kIGRlbGV0ZSBldmVudHMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIENhY2hlZE1ldGFkYXRhLFxuICBGaWxlTWFuYWdlcixcbiAgUGx1Z2luLFxuICBSZWZlcmVuY2UsXG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHtcbiAgTGlua1VwZGF0ZSxcbiAgTGlua1VwZGF0ZXNIYW5kbGVyXG59IGZyb20gJ29ic2lkaWFuLXR5cGluZ3MnO1xuXG5pbXBvcnQgeyB0IH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQge1xuICBOb3RpY2UsXG4gIFZhdWx0XG59IGZyb20gJ29ic2lkaWFuJztcbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZWVwbHkgY291cGxlZCB0byBPYnNpZGlhbiBydW50aW1lOyByZXF1aXJlcyBydW5uaW5nIHZhdWx0IGZvciBtZWFuaW5nZnVsIHRlc3RpbmcuICovXG5pbXBvcnQge1xuICBnZXREYXRhQWRhcHRlckV4LFxuICBJbnRlcm5hbFBsdWdpbk5hbWVcbn0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIFVwZGF0ZUxpbmtQYXJhbXMsXG4gIFVwZGF0ZUxpbmtzSW5GaWxlUGFyYW1zXG59IGZyb20gJy4vbGluay50cyc7XG5cbmltcG9ydCB7IGFib3J0U2lnbmFsTmV2ZXIgfSBmcm9tICcuLi9hYm9ydC1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGZpbHRlckluUGxhY2UgfSBmcm9tICcuLi9hcnJheS50cyc7XG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyxcbiAgdG9Kc29uXG59IGZyb20gJy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL2FwcC50cyc7XG5pbXBvcnQge1xuICBBdHRhY2htZW50UGF0aENvbnRleHQsXG4gIGdldEF0dGFjaG1lbnRGaWxlUGF0aCxcbiAgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgsXG4gIGhhc093bkF0dGFjaG1lbnRGb2xkZXJcbn0gZnJvbSAnLi9hdHRhY2htZW50LXBhdGgudHMnO1xuaW1wb3J0IHtcbiAgQ0FOVkFTX0ZJTEVfRVhURU5TSU9OLFxuICBnZXRGaWxlLFxuICBnZXRGaWxlT3JOdWxsLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGlzRmlsZSxcbiAgaXNNYXJrZG93bkZpbGUsXG4gIGlzTm90ZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIGVkaXRMaW5rcyxcbiAgZXh0cmFjdExpbmtGaWxlLFxuICB1cGRhdGVMaW5rLFxuICB1cGRhdGVMaW5rc0luRmlsZVxufSBmcm9tICcuL2xpbmsudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlLFxuICByZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZSxcbiAgdGVtcFJlZ2lzdGVyRmlsZXNBbmRSdW4sXG4gIHRlbXBSZWdpc3RlckZpbGVzQW5kUnVuQXN5bmMsXG4gIHVucmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGVcbn0gZnJvbSAnLi9tZXRhZGF0YS1jYWNoZS50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhdGNoIH0gZnJvbSAnLi9tb25rZXktYXJvdW5kLnRzJztcbmltcG9ydCB7IGFkZFRvUXVldWUgfSBmcm9tICcuL3F1ZXVlLnRzJztcbmltcG9ydCB7IGRlbGV0ZUlmTm90VXNlZCB9IGZyb20gJy4vdmF1bHQtZGVsZXRlLnRzJztcbmltcG9ydCB7XG4gIGRlbGV0ZUVtcHR5Rm9sZGVyLFxuICBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeSxcbiAgZ2V0U2FmZVJlbmFtZVBhdGgsXG4gIHJlbmFtZVNhZmUsXG4gIHRyYXNoU2FmZVxufSBmcm9tICcuL3ZhdWx0LnRzJztcblxuLyoqXG4gKiBBIGJlaGF2aW9yIG9mIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIgd2hlbiBkZWxldGluZyBlbXB0eSBmb2xkZXJzLlxuICovXG5leHBvcnQgZW51bSBFbXB0eUZvbGRlckJlaGF2aW9yIHtcbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZW1wdHkgZm9sZGVyLlxuICAgKi9cbiAgRGVsZXRlID0gJ0RlbGV0ZScsXG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZW1wdHkgZm9sZGVyIGFuZCBhbGwgaXRzIGVtcHR5IHBhcmVudHMuXG4gICAqL1xuICBEZWxldGVXaXRoRW1wdHlQYXJlbnRzID0gJ0RlbGV0ZVdpdGhFbXB0eVBhcmVudHMnLFxuXG4gIC8qKlxuICAgKiBLZWVwIHRoZSBlbXB0eSBmb2xkZXIuXG4gICAqL1xuICBLZWVwID0gJ0tlZXAnXG59XG5cbi8qKlxuICogU2V0dGluZ3MgZm9yIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEEgYmVoYXZpb3Igb2YgdGhlIHJlbmFtZS9kZWxldGUgaGFuZGxlciB3aGVuIGRlbGV0aW5nIGVtcHR5IGZvbGRlcnMuXG4gICAqL1xuICBlbXB0eUZvbGRlckJlaGF2aW9yOiBFbXB0eUZvbGRlckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwYXRoIGlzIGEgbm90ZS5cbiAgICovXG4gIGlzTm90ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGlnbm9yZSB0aGUgcGF0aC5cbiAgICovXG4gIGlzUGF0aElnbm9yZWQocGF0aDogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkZWxldGUgY29uZmxpY3RpbmcgYXR0YWNobWVudHMuXG4gICAqL1xuICBzaG91bGREZWxldGVDb25mbGljdGluZ0F0dGFjaG1lbnRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGhhbmRsZSBkZWxldGlvbnMuXG4gICAqL1xuICBzaG91bGRIYW5kbGVEZWxldGlvbnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaGFuZGxlIHJlbmFtZXMuXG4gICAqL1xuICBzaG91bGRIYW5kbGVSZW5hbWVzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlbmFtZSBhdHRhY2htZW50IGZpbGVzIHdoZW4gYSBub3RlIGlzIHJlbmFtZWQuXG4gICAqL1xuICBzaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVuYW1lIGF0dGFjaG1lbnQgZm9sZGVyIHdoZW4gYSBub3RlIGlzIHJlbmFtZWQuXG4gICAqL1xuICBzaG91bGRSZW5hbWVBdHRhY2htZW50Rm9sZGVyOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBmaWxlIG5hbWUgYWxpYXNlcyB3aGVuIGEgbm90ZSBpcyByZW5hbWVkLlxuICAgKi9cbiAgc2hvdWxkVXBkYXRlRmlsZU5hbWVBbGlhc2VzOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQWJvcnRhYmxlUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuaW50ZXJmYWNlIEhhbmRsZWRSZW5hbWVLZXkge1xuICBuZXdQYXRoOiBzdHJpbmc7XG4gIG9sZFBhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEludGVycnVwdGVkUmVuYW1lIHtcbiAgY29tYmluZWRCYWNrbGlua3NNYXA6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+O1xuICBvbGRQYXRoOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSZW5hbWVIYW5kbGVyUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgcmVhZG9ubHkgaGFuZGxlZFJlbmFtZXM6IEhhbmRsZWRSZW5hbWVzO1xuICByZWFkb25seSBpbnRlcnJ1cHRlZENvbWJpbmVkQmFja2xpbmtzTWFwPzogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj47XG4gIHJlYWRvbmx5IGludGVycnVwdGVkUmVuYW1lc01hcDogTWFwPHN0cmluZywgSW50ZXJydXB0ZWRSZW5hbWVbXT47XG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgb2xkQ2FjaGU6IENhY2hlZE1ldGFkYXRhIHwgbnVsbDtcbiAgcmVhZG9ubHkgb2xkUGF0aDogc3RyaW5nO1xuICByZWFkb25seSBvbGRQYXRoQmFja2xpbmtzTWFwOiBNYXA8c3RyaW5nLCBSZWZlcmVuY2VbXT47XG4gIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyO1xufVxuXG5pbnRlcmZhY2UgUmVuYW1lTWFwUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgcmVhZG9ubHkgbmV3UGF0aDogc3RyaW5nO1xuICByZWFkb25seSBvbGRDYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsO1xuICByZWFkb25seSBvbGRQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyO1xufVxuXG50eXBlIFJ1bkFzeW5jTGlua1VwZGF0ZUZuID0geyByZW5hbWVEZWxldGVIYW5kbGVyUGF0Y2hlZD86IGJvb2xlYW4gfSAmIEZpbGVNYW5hZ2VyWydydW5Bc3luY0xpbmtVcGRhdGUnXTtcblxuY2xhc3MgRGVsZXRlSGFuZGxlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsZTogVEFic3RyYWN0RmlsZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXA6IE1hcDxzdHJpbmcsIENhY2hlZE1ldGFkYXRhPlxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmhhbmRsZURlbGV0ZScpKGBIYW5kbGUgRGVsZXRlICR7dGhpcy5maWxlLnBhdGh9YCk7XG4gICAgaWYgKCFpc05vdGUodGhpcy5hcHAsIHRoaXMuZmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKCk7XG5cbiAgICBpZiAoc2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKHRoaXMuZmlsZS5wYXRoKSkge1xuICAgICAgZ2V0TGliRGVidWdnZXIoJ1JlbmFtZURlbGV0ZUhhbmRsZXI6aGFuZGxlRGVsZXRlJykoYFNraXBwaW5nIGRlbGV0ZSBoYW5kbGVyIG9mICR7dGhpcy5maWxlLnBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Rm9sZGVyUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oW2Rpcm5hbWUodGhpcy5maWxlLnBhdGgpXSk7XG5cbiAgICBpZiAoc2V0dGluZ3Muc2hvdWxkSGFuZGxlRGVsZXRpb25zKSB7XG4gICAgICBjb25zdCBjYWNoZSA9IHRoaXMuZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXAuZ2V0KHRoaXMuZmlsZS5wYXRoKTtcbiAgICAgIHRoaXMuZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXAuZGVsZXRlKHRoaXMuZmlsZS5wYXRoKTtcbiAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICBjb25zdCBsaW5rcyA9IGdldEFsbExpbmtzKGNhY2hlKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICBjb25zdCBhdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZSh0aGlzLmFwcCwgbGluaywgdGhpcy5maWxlLnBhdGgpO1xuICAgICAgICAgIGlmICghYXR0YWNobWVudEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzTWFuYWdlci5pc05vdGVFeChhdHRhY2htZW50RmlsZS5wYXRoKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyZW50Rm9sZGVyUGF0aHMuYWRkKGF0dGFjaG1lbnRGaWxlLnBhcmVudD8ucGF0aCA/PyAnJyk7XG4gICAgICAgICAgYXdhaXQgZGVsZXRlSWZOb3RVc2VkKHRoaXMuYXBwLCBhdHRhY2htZW50RmlsZSwgdGhpcy5maWxlLnBhdGgsIGZhbHNlLCBzZXR0aW5ncy5lbXB0eUZvbGRlckJlaGF2aW9yICE9PSBFbXB0eUZvbGRlckJlaGF2aW9yLktlZXApO1xuICAgICAgICAgIHRoaXMuYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcmVudEZvbGRlclBhdGhzLmRlbGV0ZSgnJyk7XG4gICAgYXdhaXQgY2xlYW51cFBhcmVudEZvbGRlcnModGhpcy5hcHAsIHRoaXMuc2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKCksIEFycmF5LmZyb20ocGFyZW50Rm9sZGVyUGF0aHMpKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoIXNldHRpbmdzLnNob3VsZEhhbmRsZURlbGV0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgodGhpcy5hcHAsIHRoaXMuZmlsZS5wYXRoLCBBdHRhY2htZW50UGF0aENvbnRleHQuRGVsZXRlTm90ZSk7XG4gICAgY29uc3QgYXR0YWNobWVudEZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh0aGlzLmFwcCwgYXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gICAgaWYgKCFhdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBoYXNPd25BdHRhY2htZW50Rm9sZGVyKHRoaXMuYXBwLCB0aGlzLmZpbGUucGF0aCwgQXR0YWNobWVudFBhdGhDb250ZXh0LkRlbGV0ZU5vdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgYXdhaXQgZGVsZXRlSWZOb3RVc2VkKHRoaXMuYXBwLCBhdHRhY2htZW50Rm9sZGVyLCB0aGlzLmZpbGUucGF0aCwgZmFsc2UsIHNldHRpbmdzLmVtcHR5Rm9sZGVyQmVoYXZpb3IgIT09IEVtcHR5Rm9sZGVyQmVoYXZpb3IuS2VlcCk7XG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICB9XG59XG5cbmNsYXNzIEhhbmRsZWRSZW5hbWVzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXAgPSBuZXcgTWFwPHN0cmluZywgSGFuZGxlZFJlbmFtZUtleT4oKTtcblxuICBwdWJsaWMgYWRkKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tYXAuc2V0KHRoaXMua2V5VG9TdHJpbmcob2xkUGF0aCwgbmV3UGF0aCksIHsgbmV3UGF0aCwgb2xkUGF0aCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUob2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1hcC5kZWxldGUodGhpcy5rZXlUb1N0cmluZyhvbGRQYXRoLCBuZXdQYXRoKSk7XG4gIH1cblxuICBwdWJsaWMgaGFzKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmhhcyh0aGlzLmtleVRvU3RyaW5nKG9sZFBhdGgsIG5ld1BhdGgpKTtcbiAgfVxuXG4gIHB1YmxpYyBrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SGFuZGxlZFJlbmFtZUtleT4ge1xuICAgIHJldHVybiB0aGlzLm1hcC52YWx1ZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUga2V5VG9TdHJpbmcob2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtvbGRQYXRofSAtPiAke25ld1BhdGh9YDtcbiAgfVxufVxuXG5jbGFzcyBNZXRhZGF0YURlbGV0ZWRIYW5kbGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHAsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWxlOiBUQWJzdHJhY3RGaWxlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJldkNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGwsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nc01hbmFnZXI6IFNldHRpbmdzTWFuYWdlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGV0ZWRNZXRhZGF0YUNhY2hlTWFwOiBNYXA8c3RyaW5nLCBDYWNoZWRNZXRhZGF0YT5cbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoKTtcblxuICAgIGlmICghc2V0dGluZ3Muc2hvdWxkSGFuZGxlRGVsZXRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLmlzUGF0aElnbm9yZWQ/Lih0aGlzLmZpbGUucGF0aCkpIHtcbiAgICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmhhbmRsZU1ldGFkYXRhRGVsZXRlZCcpKGBTa2lwcGluZyBtZXRhZGF0YSBkZWxldGUgaGFuZGxlciBvZiAke3RoaXMuZmlsZS5wYXRofSBhcyB0aGUgcGF0aCBpcyBpZ25vcmVkLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc01hcmtkb3duRmlsZSh0aGlzLmFwcCwgdGhpcy5maWxlKSAmJiB0aGlzLnByZXZDYWNoZSkge1xuICAgICAgdGhpcy5kZWxldGVkTWV0YWRhdGFDYWNoZU1hcC5zZXQodGhpcy5maWxlLnBhdGgsIHRoaXMucHJldkNhY2hlKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWxldGVkTWV0YWRhdGFDYWNoZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZWRNZXRhZGF0YT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVkUmVuYW1lcyA9IG5ldyBIYW5kbGVkUmVuYW1lcygpO1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVycnVwdGVkUmVuYW1lc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBJbnRlcnJ1cHRlZFJlbmFtZVtdPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBBYm9ydGFibGVQbHVnaW4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nc0J1aWxkZXI6ICgpID0+IFBhcnRpYWw8UmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyXG4gICkge1xuICAgIHRoaXMuYXBwID0gcGx1Z2luLmFwcDtcbiAgICB0aGlzLnBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuICAgIHRoaXMuYWJvcnRTaWduYWwgPSBwbHVnaW4uYWJvcnRTaWduYWwgPz8gYWJvcnRTaWduYWxOZXZlcigpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwID0gdGhpcy5zZXR0aW5nc01hbmFnZXIucmVuYW1lRGVsZXRlSGFuZGxlcnNNYXA7XG5cbiAgICByZW5hbWVEZWxldGVIYW5kbGVyc01hcC5zZXQodGhpcy5wbHVnaW5JZCwgdGhpcy5zZXR0aW5nc0J1aWxkZXIpO1xuICAgIHRoaXMubG9nUmVnaXN0ZXJlZEhhbmRsZXJzKCk7XG5cbiAgICB0aGlzLnBsdWdpbi5yZWdpc3RlcigoKSA9PiB7XG4gICAgICByZW5hbWVEZWxldGVIYW5kbGVyc01hcC5kZWxldGUodGhpcy5wbHVnaW5JZCk7XG4gICAgICB0aGlzLmxvZ1JlZ2lzdGVyZWRIYW5kbGVycygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wbHVnaW4ucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC52YXVsdC5vbignZGVsZXRlJywgdGhpcy5oYW5kbGVEZWxldGUuYmluZCh0aGlzKSkpO1xuICAgIHRoaXMucGx1Z2luLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAudmF1bHQub24oJ3JlbmFtZScsIHRoaXMuaGFuZGxlUmVuYW1lLmJpbmQodGhpcykpKTtcbiAgICB0aGlzLnBsdWdpbi5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUub24oJ2RlbGV0ZWQnLCB0aGlzLmhhbmRsZU1ldGFkYXRhRGVsZXRlZC5iaW5kKHRoaXMpKSk7XG5cbiAgICByZWdpc3RlclBhdGNoKHRoaXMucGx1Z2luLCB0aGlzLmFwcC5maWxlTWFuYWdlciwge1xuICAgICAgcnVuQXN5bmNMaW5rVXBkYXRlOiAobmV4dDogUnVuQXN5bmNMaW5rVXBkYXRlRm4pOiBSdW5Bc3luY0xpbmtVcGRhdGVGbiA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKChsaW5rVXBkYXRlc0hhbmRsZXIpID0+IHRoaXMucnVuQXN5bmNMaW5rVXBkYXRlKG5leHQsIGxpbmtVcGRhdGVzSGFuZGxlciksIHsgcmVuYW1lRGVsZXRlSGFuZGxlclBhdGNoZWQ6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURlbGV0ZShmaWxlOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEludm9rZUhhbmRsZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhZGRUb1F1ZXVlKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBvcGVyYXRpb25GbjogKGFib3J0U2lnbmFsKSA9PiBuZXcgRGVsZXRlSGFuZGxlcih0aGlzLmFwcCwgZmlsZSwgYWJvcnRTaWduYWwsIHRoaXMuc2V0dGluZ3NNYW5hZ2VyLCB0aGlzLmRlbGV0ZWRNZXRhZGF0YUNhY2hlTWFwKS5oYW5kbGUoKSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5yZW5hbWVEZWxldGVIYW5kbGVyLmhhbmRsZURlbGV0ZSwgeyBmaWxlUGF0aDogZmlsZS5wYXRoIH0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1ldGFkYXRhRGVsZXRlZChmaWxlOiBUQWJzdHJhY3RGaWxlLCBwcmV2Q2FjaGU6IENhY2hlZE1ldGFkYXRhIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGRJbnZva2VIYW5kbGVyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbmV3IE1ldGFkYXRhRGVsZXRlZEhhbmRsZXIodGhpcy5hcHAsIGZpbGUsIHByZXZDYWNoZSwgdGhpcy5zZXR0aW5nc01hbmFnZXIsIHRoaXMuZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXApLmhhbmRsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZW5hbWUoZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEludm9rZUhhbmRsZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghaXNGaWxlKGZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGF0aCA9IGZpbGUucGF0aDtcblxuICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmhhbmRsZVJlbmFtZScpKGBIYW5kbGUgUmVuYW1lICR7b2xkUGF0aH0gLT4gJHtuZXdQYXRofWApO1xuICAgIGlmICh0aGlzLmhhbmRsZWRSZW5hbWVzLmhhcyhvbGRQYXRoLCBuZXdQYXRoKSkge1xuICAgICAgdGhpcy5oYW5kbGVkUmVuYW1lcy5kZWxldGUob2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncygpO1xuICAgIGlmICghc2V0dGluZ3Muc2hvdWxkSGFuZGxlUmVuYW1lcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncy5pc1BhdGhJZ25vcmVkPy4ob2xkUGF0aCkpIHtcbiAgICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmhhbmRsZVJlbmFtZScpKGBTa2lwcGluZyByZW5hbWUgaGFuZGxlciBvZiBvbGQgcGF0aCAke29sZFBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLmlzUGF0aElnbm9yZWQ/LihuZXdQYXRoKSkge1xuICAgICAgZ2V0TGliRGVidWdnZXIoJ1JlbmFtZURlbGV0ZUhhbmRsZXI6aGFuZGxlUmVuYW1lJykoYFNraXBwaW5nIHJlbmFtZSBoYW5kbGVyIG9mIG5ldyBwYXRoICR7bmV3UGF0aH0gYXMgdGhlIHBhdGggaXMgaWdub3JlZC5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRDYWNoZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Q2FjaGUob2xkUGF0aCkgPz8gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRDYWNoZShuZXdQYXRoKTtcbiAgICBjb25zdCBvbGRQYXRoQmFja2xpbmtzTWFwID0gZ2V0QmFja2xpbmtzRm9yRmlsZU9yUGF0aCh0aGlzLmFwcCwgb2xkUGF0aCkuZGF0YTtcbiAgICBhZGRUb1F1ZXVlKHtcbiAgICAgIGFib3J0U2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIG9wZXJhdGlvbkZuOiAoYWJvcnRTaWduYWwpID0+XG4gICAgICAgIG5ldyBSZW5hbWVIYW5kbGVyKHtcbiAgICAgICAgICBhYm9ydFNpZ25hbCxcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIGhhbmRsZWRSZW5hbWVzOiB0aGlzLmhhbmRsZWRSZW5hbWVzLFxuICAgICAgICAgIGludGVycnVwdGVkUmVuYW1lc01hcDogdGhpcy5pbnRlcnJ1cHRlZFJlbmFtZXNNYXAsXG4gICAgICAgICAgbmV3UGF0aCxcbiAgICAgICAgICBvbGRDYWNoZSxcbiAgICAgICAgICBvbGRQYXRoLFxuICAgICAgICAgIG9sZFBhdGhCYWNrbGlua3NNYXAsXG4gICAgICAgICAgc2V0dGluZ3NNYW5hZ2VyOiB0aGlzLnNldHRpbmdzTWFuYWdlclxuICAgICAgICB9KS5oYW5kbGUoKSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5yZW5hbWVEZWxldGVIYW5kbGVyLmhhbmRsZVJlbmFtZSwgeyBuZXdQYXRoLCBvbGRQYXRoIH0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1JlZ2lzdGVyZWRIYW5kbGVycygpOiB2b2lkIHtcbiAgICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLnJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwO1xuICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmxvZ1JlZ2lzdGVyZWRIYW5kbGVycycpKFxuICAgICAgYFBsdWdpbnMgd2l0aCByZWdpc3RlcmVkIHJlbmFtZS9kZWxldGUgaGFuZGxlcnM6ICR7SlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyZW5hbWVEZWxldGVIYW5kbGVyc01hcC5rZXlzKCkpKX1gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuQXN5bmNMaW5rVXBkYXRlKG5leHQ6IFJ1bkFzeW5jTGlua1VwZGF0ZUZuLCBsaW5rVXBkYXRlc0hhbmRsZXI6IExpbmtVcGRhdGVzSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChuZXh0LnJlbmFtZURlbGV0ZUhhbmRsZXJQYXRjaGVkKSB7XG4gICAgICBhd2FpdCBuZXh0LmNhbGwodGhpcy5hcHAuZmlsZU1hbmFnZXIsIGxpbmtVcGRhdGVzSGFuZGxlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IG5leHQuY2FsbCh0aGlzLmFwcC5maWxlTWFuYWdlciwgKGxpbmtVcGRhdGVzKSA9PiB0aGlzLndyYXBMaW5rVXBkYXRlc0hhbmRsZXIobGlua1VwZGF0ZXMsIGxpbmtVcGRhdGVzSGFuZGxlcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRJbnZva2VIYW5kbGVyKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBsdWdpbklkID0gdGhpcy5wbHVnaW4ubWFuaWZlc3QuaWQ7XG5cbiAgICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLnJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwO1xuICAgIGNvbnN0IG1haW5QbHVnaW5JZCA9IEFycmF5LmZyb20ocmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAua2V5cygpKVswXTtcbiAgICByZXR1cm4gbWFpblBsdWdpbklkID09PSBwbHVnaW5JZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd3JhcExpbmtVcGRhdGVzSGFuZGxlcihsaW5rVXBkYXRlczogTGlua1VwZGF0ZVtdLCBsaW5rVXBkYXRlc0hhbmRsZXI6IExpbmtVcGRhdGVzSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBpc1JlbmFtZUNhbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGV2ZW50UmVmID0gdGhpcy5hcHAudmF1bHQub24oJ3JlbmFtZScsICgpID0+IHtcbiAgICAgIGlzUmVuYW1lQ2FsbGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbGlua1VwZGF0ZXNIYW5kbGVyKGxpbmtVcGRhdGVzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5hcHAudmF1bHQub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IG1pZ2h0IGNoYW5nZWQgaW4gYHJlbmFtZWAgZXZlbnQgaGFuZGxlci4gRVNMaW50IG1pc3Rha2VubHkgZG9lcyBub3QgcmVjb2duaXplIGl0LlxuICAgIGlmICghaXNSZW5hbWVDYWxsZWQgfHwgIXNldHRpbmdzLnNob3VsZEhhbmRsZVJlbmFtZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmaWx0ZXJJblBsYWNlKFxuICAgICAgbGlua1VwZGF0ZXMsXG4gICAgICAobGlua1VwZGF0ZSkgPT4ge1xuICAgICAgICBpZiAoc2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKGxpbmtVcGRhdGUuc291cmNlRmlsZS5wYXRoKSkge1xuICAgICAgICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOnJ1bkFzeW5jTGlua1VwZGF0ZScpKFxuICAgICAgICAgICAgYFJvbGwgYmFjayB0byBkZWZhdWx0IGxpbmsgdXBkYXRlIG9mIHNvdXJjZSBmaWxlICR7bGlua1VwZGF0ZS5zb3VyY2VGaWxlLnBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKGxpbmtVcGRhdGUucmVzb2x2ZWRGaWxlLnBhdGgpKSB7XG4gICAgICAgICAgZ2V0TGliRGVidWdnZXIoJ1JlbmFtZURlbGV0ZUhhbmRsZXI6cnVuQXN5bmNMaW5rVXBkYXRlJykoXG4gICAgICAgICAgICBgUm9sbCBiYWNrIHRvIGRlZmF1bHQgbGluayB1cGRhdGUgb2YgcmVzb2x2ZWQgZmlsZSAke2xpbmtVcGRhdGUucmVzb2x2ZWRGaWxlLnBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYXBwLmludGVybmFsUGx1Z2lucy5nZXRFbmFibGVkUGx1Z2luQnlJZChJbnRlcm5hbFBsdWdpbk5hbWUuQ2FudmFzKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFwcC5wbHVnaW5zLmdldFBsdWdpbignYmFja2xpbmstY2FjaGUnKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5rVXBkYXRlLnNvdXJjZUZpbGUuZXh0ZW5zaW9uID09PSBDQU5WQVNfRklMRV9FWFRFTlNJT04pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5rVXBkYXRlLnJlc29sdmVkRmlsZS5leHRlbnNpb24gPT09IENBTlZBU19GSUxFX0VYVEVOU0lPTikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgU2V0dGluZ3NNYW5hZ2VyIHtcbiAgcHVibGljIHJlYWRvbmx5IHJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwOiBNYXA8c3RyaW5nLCAoKSA9PiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwKSB7XG4gICAgdGhpcy5yZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9XG4gICAgICBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoYXBwLCAncmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAnLCBuZXcgTWFwPHN0cmluZywgKCkgPT4gUGFydGlhbDxSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3M+PigpKS52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZXR0aW5ncygpOiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4ge1xuICAgIGNvbnN0IHNldHRpbmdzQnVpbGRlcnMgPSBBcnJheS5mcm9tKHRoaXMucmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAudmFsdWVzKCkpLnJldmVyc2UoKTtcblxuICAgIGNvbnN0IHNldHRpbmdzOiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4gPSB7fTtcbiAgICBzZXR0aW5ncy5pc05vdGUgPSAocGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiBpc05vdGUodGhpcy5hcHAsIHBhdGgpO1xuICAgIHNldHRpbmdzLmlzUGF0aElnbm9yZWQgPSAoKTogYm9vbGVhbiA9PiBmYWxzZTtcblxuICAgIGZvciAoY29uc3Qgc2V0dGluZ3NCdWlsZGVyIG9mIHNldHRpbmdzQnVpbGRlcnMpIHtcbiAgICAgIGNvbnN0IG5ld1NldHRpbmdzID0gc2V0dGluZ3NCdWlsZGVyKCk7XG4gICAgICBzZXR0aW5ncy5zaG91bGREZWxldGVDb25mbGljdGluZ0F0dGFjaG1lbnRzIHx8PSBuZXdTZXR0aW5ncy5zaG91bGREZWxldGVDb25mbGljdGluZ0F0dGFjaG1lbnRzID8/IGZhbHNlO1xuICAgICAgaWYgKG5ld1NldHRpbmdzLmVtcHR5Rm9sZGVyQmVoYXZpb3IpIHtcbiAgICAgICAgc2V0dGluZ3MuZW1wdHlGb2xkZXJCZWhhdmlvciA/Pz0gbmV3U2V0dGluZ3MuZW1wdHlGb2xkZXJCZWhhdmlvcjtcbiAgICAgIH1cbiAgICAgIHNldHRpbmdzLnNob3VsZEhhbmRsZURlbGV0aW9ucyB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkSGFuZGxlRGVsZXRpb25zID8/IGZhbHNlO1xuICAgICAgc2V0dGluZ3Muc2hvdWxkSGFuZGxlUmVuYW1lcyB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkSGFuZGxlUmVuYW1lcyA/PyBmYWxzZTtcbiAgICAgIHNldHRpbmdzLnNob3VsZFJlbmFtZUF0dGFjaG1lbnRGaWxlcyB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZpbGVzID8/IGZhbHNlO1xuICAgICAgc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlciB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlciA/PyBmYWxzZTtcbiAgICAgIHNldHRpbmdzLnNob3VsZFVwZGF0ZUZpbGVOYW1lQWxpYXNlcyB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkVXBkYXRlRmlsZU5hbWVBbGlhc2VzID8/IGZhbHNlO1xuICAgICAgY29uc3QgaXNQYXRoSWdub3JlZCA9IHNldHRpbmdzLmlzUGF0aElnbm9yZWQ7XG4gICAgICBzZXR0aW5ncy5pc1BhdGhJZ25vcmVkID0gKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4gaXNQYXRoSWdub3JlZChwYXRoKSB8fCAobmV3U2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKHBhdGgpID8/IGZhbHNlKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJc05vdGUgPSBzZXR0aW5ncy5pc05vdGU7XG4gICAgICBzZXR0aW5ncy5pc05vdGUgPSAocGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiBjdXJyZW50SXNOb3RlKHBhdGgpICYmIChuZXdTZXR0aW5ncy5pc05vdGU/LihwYXRoKSA/PyB0cnVlKTtcbiAgICB9XG5cbiAgICBzZXR0aW5ncy5lbXB0eUZvbGRlckJlaGF2aW9yID8/PSBFbXB0eUZvbGRlckJlaGF2aW9yLktlZXA7XG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9XG5cbiAgcHVibGljIGlzTm90ZUV4KHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncygpO1xuICAgIHJldHVybiBzZXR0aW5ncy5pc05vdGU/LihwYXRoKSA/PyBmYWxzZTtcbiAgfVxufVxuXG5jbGFzcyBSZW5hbWVIYW5kbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlZFJlbmFtZXM6IEhhbmRsZWRSZW5hbWVzO1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVycnVwdGVkQ29tYmluZWRCYWNrbGlua3NNYXA6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+O1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVycnVwdGVkUmVuYW1lc01hcDogTWFwPHN0cmluZywgSW50ZXJydXB0ZWRSZW5hbWVbXT47XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV3UGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG9sZENhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgb2xkUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG9sZFBhdGhCYWNrbGlua3NNYXA6IE1hcDxzdHJpbmcsIFJlZmVyZW5jZVtdPjtcbiAgcHJpdmF0ZSByZWFkb25seSBvbGRQYXRoTGlua3M6IFJlZmVyZW5jZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFJlbmFtZUhhbmRsZXJQYXJhbXMpIHtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5vbGRQYXRoID0gcGFyYW1zLm9sZFBhdGg7XG4gICAgdGhpcy5uZXdQYXRoID0gcGFyYW1zLm5ld1BhdGg7XG4gICAgdGhpcy5vbGRQYXRoQmFja2xpbmtzTWFwID0gcGFyYW1zLm9sZFBhdGhCYWNrbGlua3NNYXA7XG4gICAgdGhpcy5vbGRDYWNoZSA9IHBhcmFtcy5vbGRDYWNoZTtcbiAgICB0aGlzLmFib3J0U2lnbmFsID0gcGFyYW1zLmFib3J0U2lnbmFsO1xuICAgIHRoaXMuc2V0dGluZ3NNYW5hZ2VyID0gcGFyYW1zLnNldHRpbmdzTWFuYWdlcjtcbiAgICB0aGlzLmludGVycnVwdGVkUmVuYW1lc01hcCA9IHBhcmFtcy5pbnRlcnJ1cHRlZFJlbmFtZXNNYXA7XG4gICAgdGhpcy5vbGRQYXRoTGlua3MgPSB0aGlzLm9sZENhY2hlID8gZ2V0QWxsTGlua3ModGhpcy5vbGRDYWNoZSkgOiBbXTtcbiAgICB0aGlzLmhhbmRsZWRSZW5hbWVzID0gcGFyYW1zLmhhbmRsZWRSZW5hbWVzO1xuICAgIHRoaXMuaW50ZXJydXB0ZWRDb21iaW5lZEJhY2tsaW5rc01hcCA9IHBhcmFtcy5pbnRlcnJ1cHRlZENvbWJpbmVkQmFja2xpbmtzTWFwID8/IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+PigpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5vbGRQYXRoID09PSB0aGlzLm5ld1BhdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGF3YWl0IHRoaXMuY29udGludWVJbnRlcnJ1cHRlZFJlbmFtZXMoKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoTGlua3MoKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgaWYgKGF3YWl0IHRoaXMuaGFuZGxlQ2FzZUNvbGxpc2lvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgY29uc3QgcmVuYW1lZEZpbGVQYXRocyA9IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSh0aGlzLmFwcCwgJ3JlbmFtZWRGaWxlUGF0aHMnLCBuZXcgU2V0PHN0cmluZz4oKSkudmFsdWU7XG4gICAgY29uc3QgcmVuYW1lZExpbmtzID0gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKHRoaXMuYXBwLCAncmVuYW1lZExpbmtQYXRocycsIG5ldyBTZXQ8c3RyaW5nPigpKS52YWx1ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZW5hbWVNYXAgPSBuZXcgUmVuYW1lTWFwKHtcbiAgICAgICAgYWJvcnRTaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgIG5ld1BhdGg6IHRoaXMubmV3UGF0aCxcbiAgICAgICAgb2xkQ2FjaGU6IHRoaXMub2xkQ2FjaGUsXG4gICAgICAgIG9sZFBhdGg6IHRoaXMub2xkUGF0aCxcbiAgICAgICAgc2V0dGluZ3NNYW5hZ2VyOiB0aGlzLnNldHRpbmdzTWFuYWdlclxuICAgICAgfSk7XG4gICAgICBhd2FpdCByZW5hbWVNYXAuZmlsbCgpO1xuICAgICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBjb25zdCBjb21iaW5lZEJhY2tsaW5rc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+PigpO1xuICAgICAgcmVuYW1lTWFwLmluaXRPcmlnaW5hbExpbmtzTWFwKGNvbWJpbmVkQmFja2xpbmtzTWFwKTtcbiAgICAgIHJlbmFtZU1hcC5pbml0QmFja2xpbmtzTWFwKHRoaXMub2xkUGF0aEJhY2tsaW5rc01hcCwgY29tYmluZWRCYWNrbGlua3NNYXAsIHRoaXMub2xkUGF0aCk7XG5cbiAgICAgIGZvciAoY29uc3QgYXR0YWNobWVudE9sZFBhdGggb2YgcmVuYW1lTWFwLmtleXMoKSkge1xuICAgICAgICBpZiAoYXR0YWNobWVudE9sZFBhdGggPT09IHRoaXMub2xkUGF0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnRPbGRQYXRoQmFja2xpbmtzTWFwID0gKGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKHRoaXMuYXBwLCBhdHRhY2htZW50T2xkUGF0aCkpLmRhdGE7XG4gICAgICAgIHRoaXMuYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgcmVuYW1lTWFwLmluaXRCYWNrbGlua3NNYXAoYXR0YWNobWVudE9sZFBhdGhCYWNrbGlua3NNYXAsIGNvbWJpbmVkQmFja2xpbmtzTWFwLCBhdHRhY2htZW50T2xkUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudEZvbGRlclBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIGZvciAoY29uc3QgW29sZEF0dGFjaG1lbnRQYXRoLCBuZXdBdHRhY2htZW50UGF0aF0gb2YgcmVuYW1lTWFwLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAob2xkQXR0YWNobWVudFBhdGggIT09IHRoaXMub2xkUGF0aCkge1xuICAgICAgICAgIGNvbnN0IGZpeGVkTmV3QXR0YWNobWVudFBhdGggPSBhd2FpdCB0aGlzLnJlbmFtZUhhbmRsZWQob2xkQXR0YWNobWVudFBhdGgsIG5ld0F0dGFjaG1lbnRQYXRoKTtcbiAgICAgICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgICAgcmVuYW1lTWFwLnNldChvbGRBdHRhY2htZW50UGF0aCwgZml4ZWROZXdBdHRhY2htZW50UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzTWFuYWdlci5pc05vdGVFeChvbGRBdHRhY2htZW50UGF0aCkpIHtcbiAgICAgICAgICBwYXJlbnRGb2xkZXJQYXRocy5hZGQoZGlybmFtZShvbGRBdHRhY2htZW50UGF0aCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNsZWFudXBQYXJlbnRGb2xkZXJzKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncygpLCBBcnJheS5mcm9tKHBhcmVudEZvbGRlclBhdGhzKSk7XG4gICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKCk7XG5cbiAgICAgIGZvciAoXG4gICAgICAgIGNvbnN0IFtuZXdCYWNrbGlua1BhdGgsIGxpbmtKc29uVG9QYXRoTWFwXSBvZiBBcnJheS5mcm9tKGNvbWJpbmVkQmFja2xpbmtzTWFwLmVudHJpZXMoKSkuY29uY2F0KFxuICAgICAgICAgIEFycmF5LmZyb20odGhpcy5pbnRlcnJ1cHRlZENvbWJpbmVkQmFja2xpbmtzTWFwLmVudHJpZXMoKSlcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGxldCBsaW5rSW5kZXggPSAwO1xuICAgICAgICBhd2FpdCBlZGl0TGlua3ModGhpcy5hcHAsIG5ld0JhY2tsaW5rUGF0aCwgKGxpbmspID0+IHtcbiAgICAgICAgICBsaW5rSW5kZXgrKztcbiAgICAgICAgICBjb25zdCBvbGRBdHRhY2htZW50UGF0aCA9IGxpbmtKc29uVG9QYXRoTWFwLmdldCh0b0pzb24obGluaykpO1xuICAgICAgICAgIGlmICghb2xkQXR0YWNobWVudFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBuZXdBdHRhY2htZW50UGF0aCA9IHJlbmFtZU1hcC5nZXQob2xkQXR0YWNobWVudFBhdGgpID8/IG9sZEF0dGFjaG1lbnRQYXRoO1xuXG4gICAgICAgICAgcmVuYW1lZEZpbGVQYXRocy5hZGQobmV3QmFja2xpbmtQYXRoKTtcbiAgICAgICAgICByZW5hbWVkTGlua3MuYWRkKGAke25ld0JhY2tsaW5rUGF0aH0vLyR7U3RyaW5nKGxpbmtJbmRleCl9YCk7XG5cbiAgICAgICAgICByZXR1cm4gdXBkYXRlTGluayhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8VXBkYXRlTGlua1BhcmFtcz4oe1xuICAgICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICAgIGxpbmssXG4gICAgICAgICAgICBuZXdTb3VyY2VQYXRoT3JGaWxlOiBuZXdCYWNrbGlua1BhdGgsXG4gICAgICAgICAgICBuZXdUYXJnZXRQYXRoT3JGaWxlOiBuZXdBdHRhY2htZW50UGF0aCxcbiAgICAgICAgICAgIG9sZFRhcmdldFBhdGhPckZpbGU6IG9sZEF0dGFjaG1lbnRQYXRoLFxuICAgICAgICAgICAgc2hvdWxkVXBkYXRlRmlsZU5hbWVBbGlhczogc2V0dGluZ3Muc2hvdWxkVXBkYXRlRmlsZU5hbWVBbGlhc2VzXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgc2hvdWxkRmFpbE9uTWlzc2luZ0ZpbGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05vdGUodGhpcy5hcHAsIHRoaXMubmV3UGF0aCkpIHtcbiAgICAgICAgYXdhaXQgdXBkYXRlTGlua3NJbkZpbGUobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFVwZGF0ZUxpbmtzSW5GaWxlUGFyYW1zPih7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBuZXdTb3VyY2VQYXRoT3JGaWxlOiB0aGlzLm5ld1BhdGgsXG4gICAgICAgICAgb2xkU291cmNlUGF0aE9yRmlsZTogdGhpcy5vbGRQYXRoLFxuICAgICAgICAgIHNob3VsZEZhaWxPbk1pc3NpbmdGaWxlOiBmYWxzZSxcbiAgICAgICAgICBzaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzOiBzZXR0aW5ncy5zaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzZXNcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ2V0RmlsZU9yTnVsbCh0aGlzLmFwcCwgdGhpcy5uZXdQYXRoKSkge1xuICAgICAgICBsZXQgaW50ZXJydXB0ZWRSZW5hbWVzID0gdGhpcy5pbnRlcnJ1cHRlZFJlbmFtZXNNYXAuZ2V0KHRoaXMubmV3UGF0aCk7XG4gICAgICAgIGlmICghaW50ZXJydXB0ZWRSZW5hbWVzKSB7XG4gICAgICAgICAgaW50ZXJydXB0ZWRSZW5hbWVzID0gW107XG4gICAgICAgICAgdGhpcy5pbnRlcnJ1cHRlZFJlbmFtZXNNYXAuc2V0KHRoaXMubmV3UGF0aCwgaW50ZXJydXB0ZWRSZW5hbWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpbnRlcnJ1cHRlZFJlbmFtZXMucHVzaCh7XG4gICAgICAgICAgY29tYmluZWRCYWNrbGlua3NNYXAsXG4gICAgICAgICAgb2xkUGF0aDogdGhpcy5vbGRQYXRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCBvcnBoYW5LZXlzID0gQXJyYXkuZnJvbSh0aGlzLmhhbmRsZWRSZW5hbWVzLmtleXMoKSk7XG4gICAgICBhZGRUb1F1ZXVlKHtcbiAgICAgICAgYWJvcnRTaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgIG9wZXJhdGlvbkZuOiAoKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBvcnBoYW5LZXkgb2Ygb3JwaGFuS2V5cykge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVkUmVuYW1lcy5kZWxldGUob3JwaGFuS2V5Lm9sZFBhdGgsIG9ycGhhbktleS5uZXdQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVuYW1lZExpbmtzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucmVuYW1lRGVsZXRlSGFuZGxlci51cGRhdGVkTGlua3MsIHsgZmlsZXNDb3VudDogcmVuYW1lZEZpbGVQYXRocy5zaXplLCBsaW5rc0NvdW50OiByZW5hbWVkTGlua3Muc2l6ZSB9KSk7XG4gICAgICAgICAgcmVuYW1lZEZpbGVQYXRocy5jbGVhcigpO1xuICAgICAgICAgIHJlbmFtZWRMaW5rcy5jbGVhcigpO1xuICAgICAgICB9LFxuICAgICAgICBvcGVyYXRpb25OYW1lOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucmVuYW1lRGVsZXRlSGFuZGxlci5oYW5kbGVPcnBoYW5lZFJlbmFtZXMpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnRpbnVlSW50ZXJydXB0ZWRSZW5hbWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGludGVycnVwdGVkUmVuYW1lcyA9IHRoaXMuaW50ZXJydXB0ZWRSZW5hbWVzTWFwLmdldCh0aGlzLm9sZFBhdGgpO1xuICAgIGlmIChpbnRlcnJ1cHRlZFJlbmFtZXMpIHtcbiAgICAgIHRoaXMuaW50ZXJydXB0ZWRSZW5hbWVzTWFwLmRlbGV0ZSh0aGlzLm9sZFBhdGgpO1xuICAgICAgZm9yIChjb25zdCBpbnRlcnJ1cHRlZFJlbmFtZSBvZiBpbnRlcnJ1cHRlZFJlbmFtZXMpIHtcbiAgICAgICAgYXdhaXQgbmV3IFJlbmFtZUhhbmRsZXIoe1xuICAgICAgICAgIGFib3J0U2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgaGFuZGxlZFJlbmFtZXM6IHRoaXMuaGFuZGxlZFJlbmFtZXMsXG4gICAgICAgICAgaW50ZXJydXB0ZWRDb21iaW5lZEJhY2tsaW5rc01hcDogaW50ZXJydXB0ZWRSZW5hbWUuY29tYmluZWRCYWNrbGlua3NNYXAsXG4gICAgICAgICAgaW50ZXJydXB0ZWRSZW5hbWVzTWFwOiB0aGlzLmludGVycnVwdGVkUmVuYW1lc01hcCxcbiAgICAgICAgICBuZXdQYXRoOiB0aGlzLm5ld1BhdGgsXG4gICAgICAgICAgb2xkQ2FjaGU6IHRoaXMub2xkQ2FjaGUsXG4gICAgICAgICAgb2xkUGF0aDogaW50ZXJydXB0ZWRSZW5hbWUub2xkUGF0aCxcbiAgICAgICAgICBvbGRQYXRoQmFja2xpbmtzTWFwOiB0aGlzLm9sZFBhdGhCYWNrbGlua3NNYXAsXG4gICAgICAgICAgc2V0dGluZ3NNYW5hZ2VyOiB0aGlzLnNldHRpbmdzTWFuYWdlclxuICAgICAgICB9KS5oYW5kbGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUNhc2VDb2xsaXNpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFnZXREYXRhQWRhcHRlckV4KHRoaXMuYXBwKS5pbnNlbnNpdGl2ZSB8fCB0aGlzLm9sZFBhdGgudG9Mb3dlckNhc2UoKSAhPT0gdGhpcy5uZXdQYXRoLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wUGF0aCA9IGpvaW4oZGlybmFtZSh0aGlzLm5ld1BhdGgpLCBgX190ZW1wX18ke2Jhc2VuYW1lKHRoaXMubmV3UGF0aCl9YCk7XG4gICAgYXdhaXQgdGhpcy5yZW5hbWVIYW5kbGVkKHRoaXMubmV3UGF0aCwgdGVtcFBhdGgpO1xuXG4gICAgYXdhaXQgbmV3IFJlbmFtZUhhbmRsZXIoe1xuICAgICAgYWJvcnRTaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgaGFuZGxlZFJlbmFtZXM6IHRoaXMuaGFuZGxlZFJlbmFtZXMsXG4gICAgICBpbnRlcnJ1cHRlZFJlbmFtZXNNYXA6IHRoaXMuaW50ZXJydXB0ZWRSZW5hbWVzTWFwLFxuICAgICAgbmV3UGF0aDogdGVtcFBhdGgsXG4gICAgICBvbGRDYWNoZTogdGhpcy5vbGRDYWNoZSxcbiAgICAgIG9sZFBhdGg6IHRoaXMub2xkUGF0aCxcbiAgICAgIG9sZFBhdGhCYWNrbGlua3NNYXA6IHRoaXMub2xkUGF0aEJhY2tsaW5rc01hcCxcbiAgICAgIHNldHRpbmdzTWFuYWdlcjogdGhpcy5zZXR0aW5nc01hbmFnZXJcbiAgICB9KS5oYW5kbGUoKTtcblxuICAgIGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUoZ2V0RmlsZSh0aGlzLmFwcCwgdGVtcFBhdGgpLCB0aGlzLm5ld1BhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoTGlua3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldENhY2hlKHRoaXMub2xkUGF0aCkgPz8gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRDYWNoZSh0aGlzLm5ld1BhdGgpO1xuICAgIGNvbnN0IG9sZFBhdGhMaW5rc1JlZnJlc2hlZCA9IGNhY2hlID8gZ2V0QWxsTGlua3MoY2FjaGUpIDogW107XG4gICAgY29uc3QgZmFrZU9sZEZpbGUgPSBnZXRGaWxlKHRoaXMuYXBwLCB0aGlzLm9sZFBhdGgsIHRydWUpO1xuICAgIGxldCBvbGRQYXRoQmFja2xpbmtzTWFwUmVmcmVzaGVkID0gbmV3IE1hcDxzdHJpbmcsIFJlZmVyZW5jZVtdPigpO1xuICAgIGF3YWl0IHRlbXBSZWdpc3RlckZpbGVzQW5kUnVuKHRoaXMuYXBwLCBbZmFrZU9sZEZpbGVdLCBhc3luYyAoKSA9PiB7XG4gICAgICBvbGRQYXRoQmFja2xpbmtzTWFwUmVmcmVzaGVkID0gKGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKHRoaXMuYXBwLCBmYWtlT2xkRmlsZSkpLmRhdGE7XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmsgb2Ygb2xkUGF0aExpbmtzUmVmcmVzaGVkKSB7XG4gICAgICBpZiAodGhpcy5vbGRQYXRoTGlua3MuaW5jbHVkZXMobGluaykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLm9sZFBhdGhMaW5rcy5wdXNoKGxpbmspO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2JhY2tsaW5rUGF0aCwgcmVmcmVzaGVkTGlua3NdIG9mIG9sZFBhdGhCYWNrbGlua3NNYXBSZWZyZXNoZWQuZW50cmllcygpKSB7XG4gICAgICBsZXQgb2xkTGlua3MgPSB0aGlzLm9sZFBhdGhCYWNrbGlua3NNYXAuZ2V0KGJhY2tsaW5rUGF0aCk7XG4gICAgICBpZiAoIW9sZExpbmtzKSB7XG4gICAgICAgIG9sZExpbmtzID0gW107XG4gICAgICAgIHRoaXMub2xkUGF0aEJhY2tsaW5rc01hcC5zZXQoYmFja2xpbmtQYXRoLCBvbGRMaW5rcyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgbGluayBvZiByZWZyZXNoZWRMaW5rcykge1xuICAgICAgICBpZiAob2xkTGlua3MuaW5jbHVkZXMobGluaykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBvbGRMaW5rcy5wdXNoKGxpbmspO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVuYW1lSGFuZGxlZChvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbmV3UGF0aCA9IGdldFNhZmVSZW5hbWVQYXRoKHRoaXMuYXBwLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICBpZiAob2xkUGF0aCA9PT0gbmV3UGF0aCkge1xuICAgICAgcmV0dXJuIG5ld1BhdGg7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlZFJlbmFtZXMuYWRkKG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgIG5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKHRoaXMuYXBwLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICByZXR1cm4gbmV3UGF0aDtcbiAgfVxufVxuXG5jbGFzcyBSZW5hbWVNYXAge1xuICBwcml2YXRlIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBvbGRDYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IG9sZFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBvbGRQYXRoTGlua3M6IFJlZmVyZW5jZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFJlbmFtZU1hcFBhcmFtcykge1xuICAgIHRoaXMuYWJvcnRTaWduYWwgPSBwYXJhbXMuYWJvcnRTaWduYWw7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMuc2V0dGluZ3NNYW5hZ2VyID0gcGFyYW1zLnNldHRpbmdzTWFuYWdlcjtcbiAgICB0aGlzLm9sZENhY2hlID0gcGFyYW1zLm9sZENhY2hlO1xuICAgIHRoaXMub2xkUGF0aCA9IHBhcmFtcy5vbGRQYXRoO1xuICAgIHRoaXMubmV3UGF0aCA9IHBhcmFtcy5uZXdQYXRoO1xuICAgIHRoaXMub2xkUGF0aExpbmtzID0gdGhpcy5vbGRDYWNoZSA/IGdldEFsbExpbmtzKHRoaXMub2xkQ2FjaGUpIDogW107XG4gIH1cblxuICBwdWJsaWMgZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZW50cmllcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHRoaXMubWFwLnNldCh0aGlzLm9sZFBhdGgsIHRoaXMubmV3UGF0aCk7XG5cbiAgICBpZiAoIWlzTm90ZSh0aGlzLmFwcCwgdGhpcy5vbGRQYXRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoKTtcblxuICAgIGNvbnN0IG9sZEZpbGUgPSBnZXRGaWxlKHRoaXMuYXBwLCB0aGlzLm9sZFBhdGgsIHRydWUpO1xuICAgIGxldCBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9ICcnO1xuICAgIGF3YWl0IHRlbXBSZWdpc3RlckZpbGVzQW5kUnVuQXN5bmModGhpcy5hcHAsIFtvbGRGaWxlXSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkRmFrZU9sZFBhdGhDYWNoZSA9IHRoaXMub2xkQ2FjaGUgJiYgb2xkRmlsZS5kZWxldGVkO1xuICAgICAgaWYgKHNob3VsZEZha2VPbGRQYXRoQ2FjaGUpIHtcbiAgICAgICAgcmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGUodGhpcy5hcHAsIG9sZEZpbGUsIHRoaXMub2xkQ2FjaGUpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCB0aGlzLm9sZFBhdGgsIEF0dGFjaG1lbnRQYXRoQ29udGV4dC5SZW5hbWVOb3RlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChzaG91bGRGYWtlT2xkUGF0aENhY2hlKSB7XG4gICAgICAgICAgdW5yZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZSh0aGlzLmFwcCwgb2xkRmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoID0gc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlclxuICAgICAgPyBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCh0aGlzLmFwcCwgdGhpcy5uZXdQYXRoLCBBdHRhY2htZW50UGF0aENvbnRleHQuUmVuYW1lTm90ZSlcbiAgICAgIDogb2xkQXR0YWNobWVudEZvbGRlclBhdGg7XG5cbiAgICBjb25zdCBpc09sZEF0dGFjaG1lbnRGb2xkZXJBdFJvb3QgPSBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gJy8nO1xuXG4gICAgY29uc3Qgb2xkQXR0YWNobWVudEZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh0aGlzLmFwcCwgb2xkQXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gICAgaWYgKCFvbGRBdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCAmJiAhc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZpbGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb2xkQXR0YWNobWVudEZpbGVzOiBURmlsZVtdID0gW107XG5cbiAgICBpZiAoYXdhaXQgaGFzT3duQXR0YWNobWVudEZvbGRlcih0aGlzLmFwcCwgdGhpcy5vbGRQYXRoLCBBdHRhY2htZW50UGF0aENvbnRleHQuUmVuYW1lTm90ZSkpIHtcbiAgICAgIFZhdWx0LnJlY3Vyc2VDaGlsZHJlbihvbGRBdHRhY2htZW50Rm9sZGVyLCAob2xkQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAgICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBpZiAoaXNGaWxlKG9sZEF0dGFjaG1lbnRGaWxlKSkge1xuICAgICAgICAgIG9sZEF0dGFjaG1lbnRGaWxlcy5wdXNoKG9sZEF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3Qgb2xkUGF0aExpbmsgb2YgdGhpcy5vbGRQYXRoTGlua3MpIHtcbiAgICAgICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBjb25zdCBvbGRBdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZSh0aGlzLmFwcCwgb2xkUGF0aExpbmssIHRoaXMub2xkUGF0aCk7XG4gICAgICAgIGlmICghb2xkQXR0YWNobWVudEZpbGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09sZEF0dGFjaG1lbnRGb2xkZXJBdFJvb3QgfHwgb2xkQXR0YWNobWVudEZpbGUucGF0aC5zdGFydHNXaXRoKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKSkge1xuICAgICAgICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRCYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZSh0aGlzLmFwcCwgb2xkQXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIHRoaXMuYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgICBjb25zdCBrZXlzID0gbmV3IFNldDxzdHJpbmc+KG9sZEF0dGFjaG1lbnRCYWNrbGlua3Mua2V5cygpKTtcbiAgICAgICAgICBrZXlzLmRlbGV0ZSh0aGlzLm9sZFBhdGgpO1xuICAgICAgICAgIGtleXMuZGVsZXRlKHRoaXMubmV3UGF0aCk7XG4gICAgICAgICAgaWYgKGtleXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgb2xkQXR0YWNobWVudEZpbGVzLnB1c2gob2xkQXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb2xkQXR0YWNobWVudEZpbGUgb2Ygb2xkQXR0YWNobWVudEZpbGVzKSB7XG4gICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBpZiAodGhpcy5zZXR0aW5nc01hbmFnZXIuaXNOb3RlRXgob2xkQXR0YWNobWVudEZpbGUucGF0aCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBuZXdBdHRhY2htZW50RmlsZVBhdGg6IHN0cmluZztcbiAgICAgIGlmIChzZXR0aW5ncy5zaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXMpIHtcbiAgICAgICAgbmV3QXR0YWNobWVudEZpbGVQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZpbGVQYXRoKHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIGNvbnRleHQ6IEF0dGFjaG1lbnRQYXRoQ29udGV4dC5SZW5hbWVOb3RlLFxuICAgICAgICAgIG5vdGVQYXRoT3JGaWxlOiB0aGlzLm5ld1BhdGgsXG4gICAgICAgICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IG9sZEF0dGFjaG1lbnRGaWxlLFxuICAgICAgICAgIG9sZE5vdGVQYXRoT3JGaWxlOiB0aGlzLm9sZFBhdGgsXG4gICAgICAgICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBpc09sZEF0dGFjaG1lbnRGb2xkZXJBdFJvb3QgPyBvbGRBdHRhY2htZW50RmlsZS5wYXRoIDogcmVsYXRpdmUob2xkQXR0YWNobWVudEZvbGRlclBhdGgsIG9sZEF0dGFjaG1lbnRGaWxlLnBhdGgpO1xuICAgICAgICBjb25zdCBuZXdGb2xkZXIgPSBqb2luKG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoLCBkaXJuYW1lKHJlbGF0aXZlUGF0aCkpO1xuICAgICAgICBuZXdBdHRhY2htZW50RmlsZVBhdGggPSBqb2luKG5ld0ZvbGRlciwgb2xkQXR0YWNobWVudEZpbGUubmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvbGRBdHRhY2htZW50RmlsZS5wYXRoID09PSBuZXdBdHRhY2htZW50RmlsZVBhdGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoc2V0dGluZ3Muc2hvdWxkRGVsZXRlQ29uZmxpY3RpbmdBdHRhY2htZW50cykge1xuICAgICAgICBjb25zdCBuZXdBdHRhY2htZW50RmlsZSA9IGdldEZpbGVPck51bGwodGhpcy5hcHAsIG5ld0F0dGFjaG1lbnRGaWxlUGF0aCk7XG4gICAgICAgIGlmIChuZXdBdHRhY2htZW50RmlsZSkge1xuICAgICAgICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmZpbGxSZW5hbWVNYXAnKShgUmVtb3ZpbmcgY29uZmxpY3RpbmcgYXR0YWNobWVudCAke25ld0F0dGFjaG1lbnRGaWxlLnBhdGh9LmApO1xuICAgICAgICAgIGF3YWl0IHRyYXNoU2FmZSh0aGlzLmFwcCwgbmV3QXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIHRoaXMuYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGlyID0gZGlybmFtZShuZXdBdHRhY2htZW50RmlsZVBhdGgpO1xuICAgICAgICBjb25zdCBleHQgPSBleHRuYW1lKG5ld0F0dGFjaG1lbnRGaWxlUGF0aCk7XG4gICAgICAgIGNvbnN0IGJhc2VOYW1lID0gYmFzZW5hbWUobmV3QXR0YWNobWVudEZpbGVQYXRoLCBleHQpO1xuICAgICAgICBuZXdBdHRhY2htZW50RmlsZVBhdGggPSB0aGlzLmFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoKGpvaW4oZGlyLCBiYXNlTmFtZSksIGV4dC5zbGljZSgxKSk7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcC5zZXQob2xkQXR0YWNobWVudEZpbGUucGF0aCwgbmV3QXR0YWNobWVudEZpbGVQYXRoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0KG9sZFBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldChvbGRQYXRoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0QmFja2xpbmtzTWFwKFxuICAgIHNpbmdsZUJhY2tsaW5rc01hcDogTWFwPHN0cmluZywgUmVmZXJlbmNlW10+LFxuICAgIGNvbWJpbmVkQmFja2xpbmtzTWFwOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+PixcbiAgICBwYXRoOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbYmFja2xpbmtQYXRoLCBsaW5rc10gb2Ygc2luZ2xlQmFja2xpbmtzTWFwLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgbmV3QmFja2xpbmtQYXRoID0gdGhpcy5tYXAuZ2V0KGJhY2tsaW5rUGF0aCkgPz8gYmFja2xpbmtQYXRoO1xuICAgICAgY29uc3QgbGlua0pzb25Ub1BhdGhNYXAgPSBjb21iaW5lZEJhY2tsaW5rc01hcC5nZXQobmV3QmFja2xpbmtQYXRoKSA/PyBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgY29tYmluZWRCYWNrbGlua3NNYXAuc2V0KG5ld0JhY2tsaW5rUGF0aCwgbGlua0pzb25Ub1BhdGhNYXApO1xuICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgIGxpbmtKc29uVG9QYXRoTWFwLnNldCh0b0pzb24obGluayksIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbml0T3JpZ2luYWxMaW5rc01hcChjb21iaW5lZEJhY2tsaW5rc01hcDogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG9sZFBhdGhMaW5rIG9mIHRoaXMub2xkUGF0aExpbmtzKSB7XG4gICAgICBjb25zdCBvbGRBdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZSh0aGlzLmFwcCwgb2xkUGF0aExpbmssIHRoaXMub2xkUGF0aCk7XG4gICAgICBpZiAoIW9sZEF0dGFjaG1lbnRGaWxlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFja2xpbmtzTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlZmVyZW5jZVtdPigpO1xuICAgICAgYmFja2xpbmtzTWFwLnNldCh0aGlzLm5ld1BhdGgsIFtvbGRQYXRoTGlua10pO1xuICAgICAgdGhpcy5pbml0QmFja2xpbmtzTWFwKGJhY2tsaW5rc01hcCwgY29tYmluZWRCYWNrbGlua3NNYXAsIG9sZEF0dGFjaG1lbnRGaWxlLnBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmtleXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQob2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1hcC5zZXQob2xkUGF0aCwgbmV3UGF0aCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIHJlbmFtZS9kZWxldGUgaGFuZGxlcnMuXG4gKlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gKiBAcGFyYW0gc2V0dGluZ3NCdWlsZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHNldHRpbmdzIGZvciB0aGUgcmVuYW1lIGRlbGV0ZSBoYW5kbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSZW5hbWVEZWxldGVIYW5kbGVycyhwbHVnaW46IEFib3J0YWJsZVBsdWdpbiwgc2V0dGluZ3NCdWlsZGVyOiAoKSA9PiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4pOiB2b2lkIHtcbiAgbmV3IFJlZ2lzdHJ5KHBsdWdpbiwgc2V0dGluZ3NCdWlsZGVyLCBuZXcgU2V0dGluZ3NNYW5hZ2VyKHBsdWdpbi5hcHApKS5yZWdpc3RlcigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwUGFyZW50Rm9sZGVycyhhcHA6IEFwcCwgc2V0dGluZ3M6IFBhcnRpYWw8UmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzPiwgcGFyZW50Rm9sZGVyUGF0aHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzZXR0aW5ncy5lbXB0eUZvbGRlckJlaGF2aW9yID09PSBFbXB0eUZvbGRlckJlaGF2aW9yLktlZXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBwYXJlbnRGb2xkZXJQYXRoIG9mIHBhcmVudEZvbGRlclBhdGhzKSB7XG4gICAgc3dpdGNoIChzZXR0aW5ncy5lbXB0eUZvbGRlckJlaGF2aW9yKSB7XG4gICAgICBjYXNlIEVtcHR5Rm9sZGVyQmVoYXZpb3IuRGVsZXRlOlxuICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlcihhcHAsIHBhcmVudEZvbGRlclBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRW1wdHlGb2xkZXJCZWhhdmlvci5EZWxldGVXaXRoRW1wdHlQYXJlbnRzOlxuICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHAsIHBhcmVudEZvbGRlclBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLFNBQVMsU0FBUztBQUNsQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBT1AsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZ0NBQWdDO0FBQ3pDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFB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
|
|
793
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3JlbmFtZS1kZWxldGUtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBoYW5kbGluZyByZW5hbWUgYW5kIGRlbGV0ZSBldmVudHMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIENhY2hlZE1ldGFkYXRhLFxuICBGaWxlTWFuYWdlcixcbiAgUGx1Z2luLFxuICBSZWZlcmVuY2UsXG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHtcbiAgTGlua1VwZGF0ZSxcbiAgTGlua1VwZGF0ZXNIYW5kbGVyXG59IGZyb20gJ29ic2lkaWFuLXR5cGluZ3MnO1xuXG5pbXBvcnQgeyB0IH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQge1xuICBOb3RpY2UsXG4gIFZhdWx0XG59IGZyb20gJ29ic2lkaWFuJztcbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZWVwbHkgY291cGxlZCB0byBPYnNpZGlhbiBydW50aW1lOyByZXF1aXJlcyBydW5uaW5nIHZhdWx0IGZvciBtZWFuaW5nZnVsIHRlc3RpbmcuICovXG5pbXBvcnQge1xuICBnZXREYXRhQWRhcHRlckV4LFxuICBJbnRlcm5hbFBsdWdpbk5hbWVcbn0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIFVwZGF0ZUxpbmtQYXJhbXMsXG4gIFVwZGF0ZUxpbmtzSW5GaWxlUGFyYW1zXG59IGZyb20gJy4vbGluay50cyc7XG5cbmltcG9ydCB7IGFib3J0U2lnbmFsTmV2ZXIgfSBmcm9tICcuLi9hYm9ydC1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGZpbHRlckluUGxhY2UgfSBmcm9tICcuLi9hcnJheS50cyc7XG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyxcbiAgdG9Kc29uXG59IGZyb20gJy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL2FwcC50cyc7XG5pbXBvcnQge1xuICBBdHRhY2htZW50UGF0aENvbnRleHQsXG4gIGdldEF0dGFjaG1lbnRGaWxlUGF0aCxcbiAgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgsXG4gIGhhc093bkF0dGFjaG1lbnRGb2xkZXJcbn0gZnJvbSAnLi9hdHRhY2htZW50LXBhdGgudHMnO1xuaW1wb3J0IHtcbiAgQ0FOVkFTX0ZJTEVfRVhURU5TSU9OLFxuICBnZXRGaWxlLFxuICBnZXRGaWxlT3JOdWxsLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGlzRmlsZSxcbiAgaXNNYXJrZG93bkZpbGUsXG4gIGlzTm90ZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIGVkaXRMaW5rcyxcbiAgZXh0cmFjdExpbmtGaWxlLFxuICB1cGRhdGVMaW5rLFxuICB1cGRhdGVMaW5rc0luRmlsZVxufSBmcm9tICcuL2xpbmsudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlLFxuICByZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZSxcbiAgdGVtcFJlZ2lzdGVyRmlsZXNBbmRSdW4sXG4gIHRlbXBSZWdpc3RlckZpbGVzQW5kUnVuQXN5bmMsXG4gIHVucmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGVcbn0gZnJvbSAnLi9tZXRhZGF0YS1jYWNoZS50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhdGNoIH0gZnJvbSAnLi9tb25rZXktYXJvdW5kLnRzJztcbmltcG9ydCB7IGFkZFRvUXVldWUgfSBmcm9tICcuL3F1ZXVlLnRzJztcbmltcG9ydCB7IGRlbGV0ZUlmTm90VXNlZCB9IGZyb20gJy4vdmF1bHQtZGVsZXRlLnRzJztcbmltcG9ydCB7XG4gIGRlbGV0ZUVtcHR5Rm9sZGVyLFxuICBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeSxcbiAgZ2V0U2FmZVJlbmFtZVBhdGgsXG4gIHJlbmFtZVNhZmUsXG4gIHRyYXNoU2FmZVxufSBmcm9tICcuL3ZhdWx0LnRzJztcblxuLyoqXG4gKiBBIGJlaGF2aW9yIG9mIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIgd2hlbiBkZWxldGluZyBlbXB0eSBmb2xkZXJzLlxuICovXG5leHBvcnQgZW51bSBFbXB0eUZvbGRlckJlaGF2aW9yIHtcbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZW1wdHkgZm9sZGVyLlxuICAgKi9cbiAgRGVsZXRlID0gJ0RlbGV0ZScsXG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZW1wdHkgZm9sZGVyIGFuZCBhbGwgaXRzIGVtcHR5IHBhcmVudHMuXG4gICAqL1xuICBEZWxldGVXaXRoRW1wdHlQYXJlbnRzID0gJ0RlbGV0ZVdpdGhFbXB0eVBhcmVudHMnLFxuXG4gIC8qKlxuICAgKiBLZWVwIHRoZSBlbXB0eSBmb2xkZXIuXG4gICAqL1xuICBLZWVwID0gJ0tlZXAnXG59XG5cbi8qKlxuICogU2V0dGluZ3MgZm9yIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEEgYmVoYXZpb3Igb2YgdGhlIHJlbmFtZS9kZWxldGUgaGFuZGxlciB3aGVuIGRlbGV0aW5nIGVtcHR5IGZvbGRlcnMuXG4gICAqL1xuICBlbXB0eUZvbGRlckJlaGF2aW9yOiBFbXB0eUZvbGRlckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwYXRoIGlzIGEgbm90ZS5cbiAgICovXG4gIGlzTm90ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGlnbm9yZSB0aGUgcGF0aC5cbiAgICovXG4gIGlzUGF0aElnbm9yZWQocGF0aDogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkZWxldGUgY29uZmxpY3RpbmcgYXR0YWNobWVudHMuXG4gICAqL1xuICBzaG91bGREZWxldGVDb25mbGljdGluZ0F0dGFjaG1lbnRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGhhbmRsZSBkZWxldGlvbnMuXG4gICAqL1xuICBzaG91bGRIYW5kbGVEZWxldGlvbnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaGFuZGxlIHJlbmFtZXMuXG4gICAqL1xuICBzaG91bGRIYW5kbGVSZW5hbWVzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlbmFtZSBhdHRhY2htZW50IGZpbGVzIHdoZW4gYSBub3RlIGlzIHJlbmFtZWQuXG4gICAqL1xuICBzaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVuYW1lIGF0dGFjaG1lbnQgZm9sZGVyIHdoZW4gYSBub3RlIGlzIHJlbmFtZWQuXG4gICAqL1xuICBzaG91bGRSZW5hbWVBdHRhY2htZW50Rm9sZGVyOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBmaWxlIG5hbWUgYWxpYXNlcyB3aGVuIGEgbm90ZSBpcyByZW5hbWVkLlxuICAgKi9cbiAgc2hvdWxkVXBkYXRlRmlsZU5hbWVBbGlhc2VzOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQWJvcnRhYmxlUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuaW50ZXJmYWNlIEhhbmRsZWRSZW5hbWVLZXkge1xuICBuZXdQYXRoOiBzdHJpbmc7XG4gIG9sZFBhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEludGVycnVwdGVkUmVuYW1lIHtcbiAgY29tYmluZWRCYWNrbGlua3NNYXA6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+O1xuICBvbGRQYXRoOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSZW5hbWVIYW5kbGVyUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgcmVhZG9ubHkgaGFuZGxlZFJlbmFtZXM6IEhhbmRsZWRSZW5hbWVzO1xuICByZWFkb25seSBpbnRlcnJ1cHRlZENvbWJpbmVkQmFja2xpbmtzTWFwPzogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj47XG4gIHJlYWRvbmx5IGludGVycnVwdGVkUmVuYW1lc01hcDogTWFwPHN0cmluZywgSW50ZXJydXB0ZWRSZW5hbWVbXT47XG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgb2xkQ2FjaGU6IENhY2hlZE1ldGFkYXRhIHwgbnVsbDtcbiAgcmVhZG9ubHkgb2xkUGF0aDogc3RyaW5nO1xuICByZWFkb25seSBvbGRQYXRoQmFja2xpbmtzTWFwOiBNYXA8c3RyaW5nLCBSZWZlcmVuY2VbXT47XG4gIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyO1xufVxuXG5pbnRlcmZhY2UgUmVuYW1lTWFwUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgcmVhZG9ubHkgbmV3UGF0aDogc3RyaW5nO1xuICByZWFkb25seSBvbGRDYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsO1xuICByZWFkb25seSBvbGRQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyO1xufVxuXG50eXBlIFJ1bkFzeW5jTGlua1VwZGF0ZUZuID0geyByZW5hbWVEZWxldGVIYW5kbGVyUGF0Y2hlZD86IGJvb2xlYW4gfSAmIEZpbGVNYW5hZ2VyWydydW5Bc3luY0xpbmtVcGRhdGUnXTtcblxuY2xhc3MgRGVsZXRlSGFuZGxlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsZTogVEFic3RyYWN0RmlsZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXA6IE1hcDxzdHJpbmcsIENhY2hlZE1ldGFkYXRhPlxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmhhbmRsZURlbGV0ZScpKGBIYW5kbGUgRGVsZXRlICR7dGhpcy5maWxlLnBhdGh9YCk7XG4gICAgaWYgKCFpc05vdGUodGhpcy5hcHAsIHRoaXMuZmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKCk7XG5cbiAgICBpZiAoc2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKHRoaXMuZmlsZS5wYXRoKSkge1xuICAgICAgZ2V0TGliRGVidWdnZXIoJ1JlbmFtZURlbGV0ZUhhbmRsZXI6aGFuZGxlRGVsZXRlJykoYFNraXBwaW5nIGRlbGV0ZSBoYW5kbGVyIG9mICR7dGhpcy5maWxlLnBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Rm9sZGVyUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oW2Rpcm5hbWUodGhpcy5maWxlLnBhdGgpXSk7XG5cbiAgICBpZiAoc2V0dGluZ3Muc2hvdWxkSGFuZGxlRGVsZXRpb25zKSB7XG4gICAgICBjb25zdCBjYWNoZSA9IHRoaXMuZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXAuZ2V0KHRoaXMuZmlsZS5wYXRoKTtcbiAgICAgIHRoaXMuZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXAuZGVsZXRlKHRoaXMuZmlsZS5wYXRoKTtcbiAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICBjb25zdCBsaW5rcyA9IGdldEFsbExpbmtzKGNhY2hlKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICBjb25zdCBhdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZSh0aGlzLmFwcCwgbGluaywgdGhpcy5maWxlLnBhdGgpO1xuICAgICAgICAgIGlmICghYXR0YWNobWVudEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzTWFuYWdlci5pc05vdGVFeChhdHRhY2htZW50RmlsZS5wYXRoKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyZW50Rm9sZGVyUGF0aHMuYWRkKGF0dGFjaG1lbnRGaWxlLnBhcmVudD8ucGF0aCA/PyAnJyk7XG4gICAgICAgICAgYXdhaXQgZGVsZXRlSWZOb3RVc2VkKHRoaXMuYXBwLCBhdHRhY2htZW50RmlsZSwgdGhpcy5maWxlLnBhdGgsIGZhbHNlLCBzZXR0aW5ncy5lbXB0eUZvbGRlckJlaGF2aW9yICE9PSBFbXB0eUZvbGRlckJlaGF2aW9yLktlZXApO1xuICAgICAgICAgIHRoaXMuYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcmVudEZvbGRlclBhdGhzLmRlbGV0ZSgnJyk7XG4gICAgYXdhaXQgY2xlYW51cFBhcmVudEZvbGRlcnModGhpcy5hcHAsIHRoaXMuc2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKCksIEFycmF5LmZyb20ocGFyZW50Rm9sZGVyUGF0aHMpKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoIXNldHRpbmdzLnNob3VsZEhhbmRsZURlbGV0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgodGhpcy5hcHAsIHRoaXMuZmlsZS5wYXRoLCBBdHRhY2htZW50UGF0aENvbnRleHQuRGVsZXRlTm90ZSk7XG4gICAgY29uc3QgYXR0YWNobWVudEZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh0aGlzLmFwcCwgYXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gICAgaWYgKCFhdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBoYXNPd25BdHRhY2htZW50Rm9sZGVyKHRoaXMuYXBwLCB0aGlzLmZpbGUucGF0aCwgQXR0YWNobWVudFBhdGhDb250ZXh0LkRlbGV0ZU5vdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgYXdhaXQgZGVsZXRlSWZOb3RVc2VkKHRoaXMuYXBwLCBhdHRhY2htZW50Rm9sZGVyLCB0aGlzLmZpbGUucGF0aCwgZmFsc2UsIHNldHRpbmdzLmVtcHR5Rm9sZGVyQmVoYXZpb3IgIT09IEVtcHR5Rm9sZGVyQmVoYXZpb3IuS2VlcCk7XG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICB9XG59XG5cbmNsYXNzIEhhbmRsZWRSZW5hbWVzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXAgPSBuZXcgTWFwPHN0cmluZywgSGFuZGxlZFJlbmFtZUtleT4oKTtcblxuICBwdWJsaWMgYWRkKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tYXAuc2V0KHRoaXMua2V5VG9TdHJpbmcob2xkUGF0aCwgbmV3UGF0aCksIHsgbmV3UGF0aCwgb2xkUGF0aCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUob2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1hcC5kZWxldGUodGhpcy5rZXlUb1N0cmluZyhvbGRQYXRoLCBuZXdQYXRoKSk7XG4gIH1cblxuICBwdWJsaWMgaGFzKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmhhcyh0aGlzLmtleVRvU3RyaW5nKG9sZFBhdGgsIG5ld1BhdGgpKTtcbiAgfVxuXG4gIHB1YmxpYyBrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SGFuZGxlZFJlbmFtZUtleT4ge1xuICAgIHJldHVybiB0aGlzLm1hcC52YWx1ZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUga2V5VG9TdHJpbmcob2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtvbGRQYXRofSAtPiAke25ld1BhdGh9YDtcbiAgfVxufVxuXG5jbGFzcyBNZXRhZGF0YURlbGV0ZWRIYW5kbGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHAsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWxlOiBUQWJzdHJhY3RGaWxlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJldkNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGwsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nc01hbmFnZXI6IFNldHRpbmdzTWFuYWdlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGV0ZWRNZXRhZGF0YUNhY2hlTWFwOiBNYXA8c3RyaW5nLCBDYWNoZWRNZXRhZGF0YT5cbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoKTtcblxuICAgIGlmICghc2V0dGluZ3Muc2hvdWxkSGFuZGxlRGVsZXRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLmlzUGF0aElnbm9yZWQ/Lih0aGlzLmZpbGUucGF0aCkpIHtcbiAgICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmhhbmRsZU1ldGFkYXRhRGVsZXRlZCcpKGBTa2lwcGluZyBtZXRhZGF0YSBkZWxldGUgaGFuZGxlciBvZiAke3RoaXMuZmlsZS5wYXRofSBhcyB0aGUgcGF0aCBpcyBpZ25vcmVkLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc01hcmtkb3duRmlsZSh0aGlzLmFwcCwgdGhpcy5maWxlKSAmJiB0aGlzLnByZXZDYWNoZSkge1xuICAgICAgdGhpcy5kZWxldGVkTWV0YWRhdGFDYWNoZU1hcC5zZXQodGhpcy5maWxlLnBhdGgsIHRoaXMucHJldkNhY2hlKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWxldGVkTWV0YWRhdGFDYWNoZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZWRNZXRhZGF0YT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVkUmVuYW1lcyA9IG5ldyBIYW5kbGVkUmVuYW1lcygpO1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVycnVwdGVkUmVuYW1lc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBJbnRlcnJ1cHRlZFJlbmFtZVtdPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBBYm9ydGFibGVQbHVnaW4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nc0J1aWxkZXI6ICgpID0+IFBhcnRpYWw8UmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyXG4gICkge1xuICAgIHRoaXMuYXBwID0gcGx1Z2luLmFwcDtcbiAgICB0aGlzLnBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuICAgIHRoaXMuYWJvcnRTaWduYWwgPSBwbHVnaW4uYWJvcnRTaWduYWwgPz8gYWJvcnRTaWduYWxOZXZlcigpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwID0gdGhpcy5zZXR0aW5nc01hbmFnZXIucmVuYW1lRGVsZXRlSGFuZGxlcnNNYXA7XG5cbiAgICByZW5hbWVEZWxldGVIYW5kbGVyc01hcC5zZXQodGhpcy5wbHVnaW5JZCwgdGhpcy5zZXR0aW5nc0J1aWxkZXIpO1xuICAgIHRoaXMubG9nUmVnaXN0ZXJlZEhhbmRsZXJzKCk7XG5cbiAgICB0aGlzLnBsdWdpbi5yZWdpc3RlcigoKSA9PiB7XG4gICAgICByZW5hbWVEZWxldGVIYW5kbGVyc01hcC5kZWxldGUodGhpcy5wbHVnaW5JZCk7XG4gICAgICB0aGlzLmxvZ1JlZ2lzdGVyZWRIYW5kbGVycygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wbHVnaW4ucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC52YXVsdC5vbignZGVsZXRlJywgdGhpcy5oYW5kbGVEZWxldGUuYmluZCh0aGlzKSkpO1xuICAgIHRoaXMucGx1Z2luLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAudmF1bHQub24oJ3JlbmFtZScsIHRoaXMuaGFuZGxlUmVuYW1lLmJpbmQodGhpcykpKTtcbiAgICB0aGlzLnBsdWdpbi5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUub24oJ2RlbGV0ZWQnLCB0aGlzLmhhbmRsZU1ldGFkYXRhRGVsZXRlZC5iaW5kKHRoaXMpKSk7XG5cbiAgICByZWdpc3RlclBhdGNoKHRoaXMucGx1Z2luLCB0aGlzLmFwcC5maWxlTWFuYWdlciwge1xuICAgICAgcnVuQXN5bmNMaW5rVXBkYXRlOiAobmV4dDogUnVuQXN5bmNMaW5rVXBkYXRlRm4pOiBSdW5Bc3luY0xpbmtVcGRhdGVGbiA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKChsaW5rVXBkYXRlc0hhbmRsZXIpID0+IHRoaXMucnVuQXN5bmNMaW5rVXBkYXRlKG5leHQsIGxpbmtVcGRhdGVzSGFuZGxlciksIHsgcmVuYW1lRGVsZXRlSGFuZGxlclBhdGNoZWQ6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURlbGV0ZShmaWxlOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEludm9rZUhhbmRsZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhZGRUb1F1ZXVlKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBvcGVyYXRpb25GbjogKGFib3J0U2lnbmFsKSA9PiBuZXcgRGVsZXRlSGFuZGxlcih0aGlzLmFwcCwgZmlsZSwgYWJvcnRTaWduYWwsIHRoaXMuc2V0dGluZ3NNYW5hZ2VyLCB0aGlzLmRlbGV0ZWRNZXRhZGF0YUNhY2hlTWFwKS5oYW5kbGUoKSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5yZW5hbWVEZWxldGVIYW5kbGVyLmhhbmRsZURlbGV0ZSwgeyBmaWxlUGF0aDogZmlsZS5wYXRoIH0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1ldGFkYXRhRGVsZXRlZChmaWxlOiBUQWJzdHJhY3RGaWxlLCBwcmV2Q2FjaGU6IENhY2hlZE1ldGFkYXRhIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGRJbnZva2VIYW5kbGVyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbmV3IE1ldGFkYXRhRGVsZXRlZEhhbmRsZXIodGhpcy5hcHAsIGZpbGUsIHByZXZDYWNoZSwgdGhpcy5zZXR0aW5nc01hbmFnZXIsIHRoaXMuZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXApLmhhbmRsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZW5hbWUoZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEludm9rZUhhbmRsZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghaXNGaWxlKGZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGF0aCA9IGZpbGUucGF0aDtcblxuICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmhhbmRsZVJlbmFtZScpKGBIYW5kbGUgUmVuYW1lICR7b2xkUGF0aH0gLT4gJHtuZXdQYXRofWApO1xuICAgIGlmICh0aGlzLmhhbmRsZWRSZW5hbWVzLmhhcyhvbGRQYXRoLCBuZXdQYXRoKSkge1xuICAgICAgdGhpcy5oYW5kbGVkUmVuYW1lcy5kZWxldGUob2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncygpO1xuICAgIGlmICghc2V0dGluZ3Muc2hvdWxkSGFuZGxlUmVuYW1lcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncy5pc1BhdGhJZ25vcmVkPy4ob2xkUGF0aCkpIHtcbiAgICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmhhbmRsZVJlbmFtZScpKGBTa2lwcGluZyByZW5hbWUgaGFuZGxlciBvZiBvbGQgcGF0aCAke29sZFBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLmlzUGF0aElnbm9yZWQ/LihuZXdQYXRoKSkge1xuICAgICAgZ2V0TGliRGVidWdnZXIoJ1JlbmFtZURlbGV0ZUhhbmRsZXI6aGFuZGxlUmVuYW1lJykoYFNraXBwaW5nIHJlbmFtZSBoYW5kbGVyIG9mIG5ldyBwYXRoICR7bmV3UGF0aH0gYXMgdGhlIHBhdGggaXMgaWdub3JlZC5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRDYWNoZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Q2FjaGUob2xkUGF0aCkgPz8gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRDYWNoZShuZXdQYXRoKTtcbiAgICBjb25zdCBvbGRQYXRoQmFja2xpbmtzTWFwID0gZ2V0QmFja2xpbmtzRm9yRmlsZU9yUGF0aCh0aGlzLmFwcCwgb2xkUGF0aCkuZGF0YTtcbiAgICBhZGRUb1F1ZXVlKHtcbiAgICAgIGFib3J0U2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIG9wZXJhdGlvbkZuOiAoYWJvcnRTaWduYWwpID0+XG4gICAgICAgIG5ldyBSZW5hbWVIYW5kbGVyKHtcbiAgICAgICAgICBhYm9ydFNpZ25hbCxcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIGhhbmRsZWRSZW5hbWVzOiB0aGlzLmhhbmRsZWRSZW5hbWVzLFxuICAgICAgICAgIGludGVycnVwdGVkUmVuYW1lc01hcDogdGhpcy5pbnRlcnJ1cHRlZFJlbmFtZXNNYXAsXG4gICAgICAgICAgbmV3UGF0aCxcbiAgICAgICAgICBvbGRDYWNoZSxcbiAgICAgICAgICBvbGRQYXRoLFxuICAgICAgICAgIG9sZFBhdGhCYWNrbGlua3NNYXAsXG4gICAgICAgICAgc2V0dGluZ3NNYW5hZ2VyOiB0aGlzLnNldHRpbmdzTWFuYWdlclxuICAgICAgICB9KS5oYW5kbGUoKSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5yZW5hbWVEZWxldGVIYW5kbGVyLmhhbmRsZVJlbmFtZSwgeyBuZXdQYXRoLCBvbGRQYXRoIH0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1JlZ2lzdGVyZWRIYW5kbGVycygpOiB2b2lkIHtcbiAgICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLnJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwO1xuICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmxvZ1JlZ2lzdGVyZWRIYW5kbGVycycpKFxuICAgICAgYFBsdWdpbnMgd2l0aCByZWdpc3RlcmVkIHJlbmFtZS9kZWxldGUgaGFuZGxlcnM6ICR7SlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyZW5hbWVEZWxldGVIYW5kbGVyc01hcC5rZXlzKCkpKX1gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuQXN5bmNMaW5rVXBkYXRlKG5leHQ6IFJ1bkFzeW5jTGlua1VwZGF0ZUZuLCBsaW5rVXBkYXRlc0hhbmRsZXI6IExpbmtVcGRhdGVzSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChuZXh0LnJlbmFtZURlbGV0ZUhhbmRsZXJQYXRjaGVkKSB7XG4gICAgICBhd2FpdCBuZXh0LmNhbGwodGhpcy5hcHAuZmlsZU1hbmFnZXIsIGxpbmtVcGRhdGVzSGFuZGxlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IG5leHQuY2FsbCh0aGlzLmFwcC5maWxlTWFuYWdlciwgKGxpbmtVcGRhdGVzKSA9PiB0aGlzLndyYXBMaW5rVXBkYXRlc0hhbmRsZXIobGlua1VwZGF0ZXMsIGxpbmtVcGRhdGVzSGFuZGxlcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRJbnZva2VIYW5kbGVyKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBsdWdpbklkID0gdGhpcy5wbHVnaW4ubWFuaWZlc3QuaWQ7XG5cbiAgICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLnJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwO1xuICAgIGNvbnN0IG1haW5QbHVnaW5JZCA9IEFycmF5LmZyb20ocmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAua2V5cygpKVswXTtcbiAgICByZXR1cm4gbWFpblBsdWdpbklkID09PSBwbHVnaW5JZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd3JhcExpbmtVcGRhdGVzSGFuZGxlcihsaW5rVXBkYXRlczogTGlua1VwZGF0ZVtdLCBsaW5rVXBkYXRlc0hhbmRsZXI6IExpbmtVcGRhdGVzSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBpc1JlbmFtZUNhbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGV2ZW50UmVmID0gdGhpcy5hcHAudmF1bHQub24oJ3JlbmFtZScsICgpID0+IHtcbiAgICAgIGlzUmVuYW1lQ2FsbGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbGlua1VwZGF0ZXNIYW5kbGVyKGxpbmtVcGRhdGVzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5hcHAudmF1bHQub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IG1pZ2h0IGNoYW5nZWQgaW4gYHJlbmFtZWAgZXZlbnQgaGFuZGxlci4gRVNMaW50IG1pc3Rha2VubHkgZG9lcyBub3QgcmVjb2duaXplIGl0LlxuICAgIGlmICghaXNSZW5hbWVDYWxsZWQgfHwgIXNldHRpbmdzLnNob3VsZEhhbmRsZVJlbmFtZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmaWx0ZXJJblBsYWNlKFxuICAgICAgbGlua1VwZGF0ZXMsXG4gICAgICAobGlua1VwZGF0ZSkgPT4ge1xuICAgICAgICBpZiAoc2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKGxpbmtVcGRhdGUuc291cmNlRmlsZS5wYXRoKSkge1xuICAgICAgICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOnJ1bkFzeW5jTGlua1VwZGF0ZScpKFxuICAgICAgICAgICAgYFJvbGwgYmFjayB0byBkZWZhdWx0IGxpbmsgdXBkYXRlIG9mIHNvdXJjZSBmaWxlICR7bGlua1VwZGF0ZS5zb3VyY2VGaWxlLnBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKGxpbmtVcGRhdGUucmVzb2x2ZWRGaWxlLnBhdGgpKSB7XG4gICAgICAgICAgZ2V0TGliRGVidWdnZXIoJ1JlbmFtZURlbGV0ZUhhbmRsZXI6cnVuQXN5bmNMaW5rVXBkYXRlJykoXG4gICAgICAgICAgICBgUm9sbCBiYWNrIHRvIGRlZmF1bHQgbGluayB1cGRhdGUgb2YgcmVzb2x2ZWQgZmlsZSAke2xpbmtVcGRhdGUucmVzb2x2ZWRGaWxlLnBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYXBwLmludGVybmFsUGx1Z2lucy5nZXRFbmFibGVkUGx1Z2luQnlJZChJbnRlcm5hbFBsdWdpbk5hbWUuQ2FudmFzKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFwcC5wbHVnaW5zLmdldFBsdWdpbignYmFja2xpbmstY2FjaGUnKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5rVXBkYXRlLnNvdXJjZUZpbGUuZXh0ZW5zaW9uID09PSBDQU5WQVNfRklMRV9FWFRFTlNJT04pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5rVXBkYXRlLnJlc29sdmVkRmlsZS5leHRlbnNpb24gPT09IENBTlZBU19GSUxFX0VYVEVOU0lPTikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgU2V0dGluZ3NNYW5hZ2VyIHtcbiAgcHVibGljIHJlYWRvbmx5IHJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwOiBNYXA8c3RyaW5nLCAoKSA9PiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwKSB7XG4gICAgdGhpcy5yZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9XG4gICAgICBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoYXBwLCAncmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAnLCBuZXcgTWFwPHN0cmluZywgKCkgPT4gUGFydGlhbDxSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3M+PigpKS52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZXR0aW5ncygpOiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4ge1xuICAgIGNvbnN0IHNldHRpbmdzQnVpbGRlcnMgPSBBcnJheS5mcm9tKHRoaXMucmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAudmFsdWVzKCkpLnJldmVyc2UoKTtcblxuICAgIGNvbnN0IHNldHRpbmdzOiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4gPSB7fTtcbiAgICBzZXR0aW5ncy5pc05vdGUgPSAocGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiBpc05vdGUodGhpcy5hcHAsIHBhdGgpO1xuICAgIHNldHRpbmdzLmlzUGF0aElnbm9yZWQgPSAoKTogYm9vbGVhbiA9PiBmYWxzZTtcblxuICAgIGZvciAoY29uc3Qgc2V0dGluZ3NCdWlsZGVyIG9mIHNldHRpbmdzQnVpbGRlcnMpIHtcbiAgICAgIGNvbnN0IG5ld1NldHRpbmdzID0gc2V0dGluZ3NCdWlsZGVyKCk7XG4gICAgICBzZXR0aW5ncy5zaG91bGREZWxldGVDb25mbGljdGluZ0F0dGFjaG1lbnRzIHx8PSBuZXdTZXR0aW5ncy5zaG91bGREZWxldGVDb25mbGljdGluZ0F0dGFjaG1lbnRzID8/IGZhbHNlO1xuICAgICAgaWYgKG5ld1NldHRpbmdzLmVtcHR5Rm9sZGVyQmVoYXZpb3IpIHtcbiAgICAgICAgc2V0dGluZ3MuZW1wdHlGb2xkZXJCZWhhdmlvciA/Pz0gbmV3U2V0dGluZ3MuZW1wdHlGb2xkZXJCZWhhdmlvcjtcbiAgICAgIH1cbiAgICAgIHNldHRpbmdzLnNob3VsZEhhbmRsZURlbGV0aW9ucyB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkSGFuZGxlRGVsZXRpb25zID8/IGZhbHNlO1xuICAgICAgc2V0dGluZ3Muc2hvdWxkSGFuZGxlUmVuYW1lcyB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkSGFuZGxlUmVuYW1lcyA/PyBmYWxzZTtcbiAgICAgIHNldHRpbmdzLnNob3VsZFJlbmFtZUF0dGFjaG1lbnRGaWxlcyB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZpbGVzID8/IGZhbHNlO1xuICAgICAgc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlciB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlciA/PyBmYWxzZTtcbiAgICAgIHNldHRpbmdzLnNob3VsZFVwZGF0ZUZpbGVOYW1lQWxpYXNlcyB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkVXBkYXRlRmlsZU5hbWVBbGlhc2VzID8/IGZhbHNlO1xuICAgICAgY29uc3QgaXNQYXRoSWdub3JlZCA9IHNldHRpbmdzLmlzUGF0aElnbm9yZWQ7XG4gICAgICBzZXR0aW5ncy5pc1BhdGhJZ25vcmVkID0gKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4gaXNQYXRoSWdub3JlZChwYXRoKSB8fCAobmV3U2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKHBhdGgpID8/IGZhbHNlKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJc05vdGUgPSBzZXR0aW5ncy5pc05vdGU7XG4gICAgICBzZXR0aW5ncy5pc05vdGUgPSAocGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiBjdXJyZW50SXNOb3RlKHBhdGgpICYmIChuZXdTZXR0aW5ncy5pc05vdGU/LihwYXRoKSA/PyB0cnVlKTtcbiAgICB9XG5cbiAgICBzZXR0aW5ncy5lbXB0eUZvbGRlckJlaGF2aW9yID8/PSBFbXB0eUZvbGRlckJlaGF2aW9yLktlZXA7XG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9XG5cbiAgcHVibGljIGlzTm90ZUV4KHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncygpO1xuICAgIHJldHVybiBzZXR0aW5ncy5pc05vdGU/LihwYXRoKSA/PyBmYWxzZTtcbiAgfVxufVxuXG5jbGFzcyBSZW5hbWVIYW5kbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlZFJlbmFtZXM6IEhhbmRsZWRSZW5hbWVzO1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVycnVwdGVkQ29tYmluZWRCYWNrbGlua3NNYXA6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+O1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVycnVwdGVkUmVuYW1lc01hcDogTWFwPHN0cmluZywgSW50ZXJydXB0ZWRSZW5hbWVbXT47XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV3UGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG9sZENhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgb2xkUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG9sZFBhdGhCYWNrbGlua3NNYXA6IE1hcDxzdHJpbmcsIFJlZmVyZW5jZVtdPjtcbiAgcHJpdmF0ZSByZWFkb25seSBvbGRQYXRoTGlua3M6IFJlZmVyZW5jZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFJlbmFtZUhhbmRsZXJQYXJhbXMpIHtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5vbGRQYXRoID0gcGFyYW1zLm9sZFBhdGg7XG4gICAgdGhpcy5uZXdQYXRoID0gcGFyYW1zLm5ld1BhdGg7XG4gICAgdGhpcy5vbGRQYXRoQmFja2xpbmtzTWFwID0gcGFyYW1zLm9sZFBhdGhCYWNrbGlua3NNYXA7XG4gICAgdGhpcy5vbGRDYWNoZSA9IHBhcmFtcy5vbGRDYWNoZTtcbiAgICB0aGlzLmFib3J0U2lnbmFsID0gcGFyYW1zLmFib3J0U2lnbmFsO1xuICAgIHRoaXMuc2V0dGluZ3NNYW5hZ2VyID0gcGFyYW1zLnNldHRpbmdzTWFuYWdlcjtcbiAgICB0aGlzLmludGVycnVwdGVkUmVuYW1lc01hcCA9IHBhcmFtcy5pbnRlcnJ1cHRlZFJlbmFtZXNNYXA7XG4gICAgdGhpcy5vbGRQYXRoTGlua3MgPSB0aGlzLm9sZENhY2hlID8gZ2V0QWxsTGlua3ModGhpcy5vbGRDYWNoZSkgOiBbXTtcbiAgICB0aGlzLmhhbmRsZWRSZW5hbWVzID0gcGFyYW1zLmhhbmRsZWRSZW5hbWVzO1xuICAgIHRoaXMuaW50ZXJydXB0ZWRDb21iaW5lZEJhY2tsaW5rc01hcCA9IHBhcmFtcy5pbnRlcnJ1cHRlZENvbWJpbmVkQmFja2xpbmtzTWFwID8/IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+PigpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5vbGRQYXRoID09PSB0aGlzLm5ld1BhdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGF3YWl0IHRoaXMuY29udGludWVJbnRlcnJ1cHRlZFJlbmFtZXMoKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoTGlua3MoKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgaWYgKGF3YWl0IHRoaXMuaGFuZGxlQ2FzZUNvbGxpc2lvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgY29uc3QgcmVuYW1lZEZpbGVQYXRocyA9IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSh0aGlzLmFwcCwgJ3JlbmFtZWRGaWxlUGF0aHMnLCBuZXcgU2V0PHN0cmluZz4oKSkudmFsdWU7XG4gICAgY29uc3QgcmVuYW1lZExpbmtzID0gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKHRoaXMuYXBwLCAncmVuYW1lZExpbmtQYXRocycsIG5ldyBTZXQ8c3RyaW5nPigpKS52YWx1ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZW5hbWVNYXAgPSBuZXcgUmVuYW1lTWFwKHtcbiAgICAgICAgYWJvcnRTaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgIG5ld1BhdGg6IHRoaXMubmV3UGF0aCxcbiAgICAgICAgb2xkQ2FjaGU6IHRoaXMub2xkQ2FjaGUsXG4gICAgICAgIG9sZFBhdGg6IHRoaXMub2xkUGF0aCxcbiAgICAgICAgc2V0dGluZ3NNYW5hZ2VyOiB0aGlzLnNldHRpbmdzTWFuYWdlclxuICAgICAgfSk7XG4gICAgICBhd2FpdCByZW5hbWVNYXAuZmlsbCgpO1xuICAgICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBjb25zdCBjb21iaW5lZEJhY2tsaW5rc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+PigpO1xuICAgICAgcmVuYW1lTWFwLmluaXRPcmlnaW5hbExpbmtzTWFwKGNvbWJpbmVkQmFja2xpbmtzTWFwKTtcbiAgICAgIHJlbmFtZU1hcC5pbml0QmFja2xpbmtzTWFwKHRoaXMub2xkUGF0aEJhY2tsaW5rc01hcCwgY29tYmluZWRCYWNrbGlua3NNYXAsIHRoaXMub2xkUGF0aCk7XG5cbiAgICAgIGZvciAoY29uc3QgYXR0YWNobWVudE9sZFBhdGggb2YgcmVuYW1lTWFwLmtleXMoKSkge1xuICAgICAgICBpZiAoYXR0YWNobWVudE9sZFBhdGggPT09IHRoaXMub2xkUGF0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnRPbGRQYXRoQmFja2xpbmtzTWFwID0gKGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKHRoaXMuYXBwLCBhdHRhY2htZW50T2xkUGF0aCkpLmRhdGE7XG4gICAgICAgIHRoaXMuYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgcmVuYW1lTWFwLmluaXRCYWNrbGlua3NNYXAoYXR0YWNobWVudE9sZFBhdGhCYWNrbGlua3NNYXAsIGNvbWJpbmVkQmFja2xpbmtzTWFwLCBhdHRhY2htZW50T2xkUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudEZvbGRlclBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIGZvciAoY29uc3QgW29sZEF0dGFjaG1lbnRQYXRoLCBuZXdBdHRhY2htZW50UGF0aF0gb2YgcmVuYW1lTWFwLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAob2xkQXR0YWNobWVudFBhdGggIT09IHRoaXMub2xkUGF0aCkge1xuICAgICAgICAgIGNvbnN0IGZpeGVkTmV3QXR0YWNobWVudFBhdGggPSBhd2FpdCB0aGlzLnJlbmFtZUhhbmRsZWQob2xkQXR0YWNobWVudFBhdGgsIG5ld0F0dGFjaG1lbnRQYXRoKTtcbiAgICAgICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgICAgcmVuYW1lTWFwLnNldChvbGRBdHRhY2htZW50UGF0aCwgZml4ZWROZXdBdHRhY2htZW50UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzTWFuYWdlci5pc05vdGVFeChvbGRBdHRhY2htZW50UGF0aCkpIHtcbiAgICAgICAgICBwYXJlbnRGb2xkZXJQYXRocy5hZGQoZGlybmFtZShvbGRBdHRhY2htZW50UGF0aCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNsZWFudXBQYXJlbnRGb2xkZXJzKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncygpLCBBcnJheS5mcm9tKHBhcmVudEZvbGRlclBhdGhzKSk7XG4gICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKCk7XG5cbiAgICAgIGZvciAoXG4gICAgICAgIGNvbnN0IFtuZXdCYWNrbGlua1BhdGgsIGxpbmtKc29uVG9QYXRoTWFwXSBvZiBBcnJheS5mcm9tKGNvbWJpbmVkQmFja2xpbmtzTWFwLmVudHJpZXMoKSkuY29uY2F0KFxuICAgICAgICAgIEFycmF5LmZyb20odGhpcy5pbnRlcnJ1cHRlZENvbWJpbmVkQmFja2xpbmtzTWFwLmVudHJpZXMoKSlcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGxldCBsaW5rSW5kZXggPSAwO1xuICAgICAgICBhd2FpdCBlZGl0TGlua3ModGhpcy5hcHAsIG5ld0JhY2tsaW5rUGF0aCwgKGxpbmspID0+IHtcbiAgICAgICAgICBsaW5rSW5kZXgrKztcbiAgICAgICAgICBjb25zdCBvbGRBdHRhY2htZW50UGF0aCA9IGxpbmtKc29uVG9QYXRoTWFwLmdldCh0b0pzb24obGluaykpO1xuICAgICAgICAgIGlmICghb2xkQXR0YWNobWVudFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBuZXdBdHRhY2htZW50UGF0aCA9IHJlbmFtZU1hcC5nZXQob2xkQXR0YWNobWVudFBhdGgpID8/IG9sZEF0dGFjaG1lbnRQYXRoO1xuXG4gICAgICAgICAgcmVuYW1lZEZpbGVQYXRocy5hZGQobmV3QmFja2xpbmtQYXRoKTtcbiAgICAgICAgICByZW5hbWVkTGlua3MuYWRkKGAke25ld0JhY2tsaW5rUGF0aH0vLyR7U3RyaW5nKGxpbmtJbmRleCl9YCk7XG5cbiAgICAgICAgICByZXR1cm4gdXBkYXRlTGluayhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8VXBkYXRlTGlua1BhcmFtcz4oe1xuICAgICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICAgIGxpbmssXG4gICAgICAgICAgICBuZXdTb3VyY2VQYXRoT3JGaWxlOiBuZXdCYWNrbGlua1BhdGgsXG4gICAgICAgICAgICBuZXdUYXJnZXRQYXRoT3JGaWxlOiBuZXdBdHRhY2htZW50UGF0aCxcbiAgICAgICAgICAgIG9sZFRhcmdldFBhdGhPckZpbGU6IG9sZEF0dGFjaG1lbnRQYXRoLFxuICAgICAgICAgICAgc2hvdWxkVXBkYXRlRmlsZU5hbWVBbGlhczogc2V0dGluZ3Muc2hvdWxkVXBkYXRlRmlsZU5hbWVBbGlhc2VzXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgc2hvdWxkRmFpbE9uTWlzc2luZ0ZpbGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05vdGUodGhpcy5hcHAsIHRoaXMubmV3UGF0aCkpIHtcbiAgICAgICAgYXdhaXQgdXBkYXRlTGlua3NJbkZpbGUobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFVwZGF0ZUxpbmtzSW5GaWxlUGFyYW1zPih7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBuZXdTb3VyY2VQYXRoT3JGaWxlOiB0aGlzLm5ld1BhdGgsXG4gICAgICAgICAgb2xkU291cmNlUGF0aE9yRmlsZTogdGhpcy5vbGRQYXRoLFxuICAgICAgICAgIHNob3VsZEZhaWxPbk1pc3NpbmdGaWxlOiBmYWxzZSxcbiAgICAgICAgICBzaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzOiBzZXR0aW5ncy5zaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzZXNcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ2V0RmlsZU9yTnVsbCh0aGlzLmFwcCwgdGhpcy5uZXdQYXRoKSkge1xuICAgICAgICBsZXQgaW50ZXJydXB0ZWRSZW5hbWVzID0gdGhpcy5pbnRlcnJ1cHRlZFJlbmFtZXNNYXAuZ2V0KHRoaXMubmV3UGF0aCk7XG4gICAgICAgIGlmICghaW50ZXJydXB0ZWRSZW5hbWVzKSB7XG4gICAgICAgICAgaW50ZXJydXB0ZWRSZW5hbWVzID0gW107XG4gICAgICAgICAgdGhpcy5pbnRlcnJ1cHRlZFJlbmFtZXNNYXAuc2V0KHRoaXMubmV3UGF0aCwgaW50ZXJydXB0ZWRSZW5hbWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpbnRlcnJ1cHRlZFJlbmFtZXMucHVzaCh7XG4gICAgICAgICAgY29tYmluZWRCYWNrbGlua3NNYXAsXG4gICAgICAgICAgb2xkUGF0aDogdGhpcy5vbGRQYXRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCBvcnBoYW5LZXlzID0gQXJyYXkuZnJvbSh0aGlzLmhhbmRsZWRSZW5hbWVzLmtleXMoKSk7XG4gICAgICBhZGRUb1F1ZXVlKHtcbiAgICAgICAgYWJvcnRTaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgIG9wZXJhdGlvbkZuOiAoKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBvcnBoYW5LZXkgb2Ygb3JwaGFuS2V5cykge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVkUmVuYW1lcy5kZWxldGUob3JwaGFuS2V5Lm9sZFBhdGgsIG9ycGhhbktleS5uZXdQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVuYW1lZExpbmtzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucmVuYW1lRGVsZXRlSGFuZGxlci51cGRhdGVkTGlua3MsIHsgZmlsZXNDb3VudDogcmVuYW1lZEZpbGVQYXRocy5zaXplLCBsaW5rc0NvdW50OiByZW5hbWVkTGlua3Muc2l6ZSB9KSk7XG4gICAgICAgICAgcmVuYW1lZEZpbGVQYXRocy5jbGVhcigpO1xuICAgICAgICAgIHJlbmFtZWRMaW5rcy5jbGVhcigpO1xuICAgICAgICB9LFxuICAgICAgICBvcGVyYXRpb25OYW1lOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucmVuYW1lRGVsZXRlSGFuZGxlci5oYW5kbGVPcnBoYW5lZFJlbmFtZXMpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnRpbnVlSW50ZXJydXB0ZWRSZW5hbWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGludGVycnVwdGVkUmVuYW1lcyA9IHRoaXMuaW50ZXJydXB0ZWRSZW5hbWVzTWFwLmdldCh0aGlzLm9sZFBhdGgpO1xuICAgIGlmIChpbnRlcnJ1cHRlZFJlbmFtZXMpIHtcbiAgICAgIHRoaXMuaW50ZXJydXB0ZWRSZW5hbWVzTWFwLmRlbGV0ZSh0aGlzLm9sZFBhdGgpO1xuICAgICAgZm9yIChjb25zdCBpbnRlcnJ1cHRlZFJlbmFtZSBvZiBpbnRlcnJ1cHRlZFJlbmFtZXMpIHtcbiAgICAgICAgYXdhaXQgbmV3IFJlbmFtZUhhbmRsZXIoe1xuICAgICAgICAgIGFib3J0U2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgaGFuZGxlZFJlbmFtZXM6IHRoaXMuaGFuZGxlZFJlbmFtZXMsXG4gICAgICAgICAgaW50ZXJydXB0ZWRDb21iaW5lZEJhY2tsaW5rc01hcDogaW50ZXJydXB0ZWRSZW5hbWUuY29tYmluZWRCYWNrbGlua3NNYXAsXG4gICAgICAgICAgaW50ZXJydXB0ZWRSZW5hbWVzTWFwOiB0aGlzLmludGVycnVwdGVkUmVuYW1lc01hcCxcbiAgICAgICAgICBuZXdQYXRoOiB0aGlzLm5ld1BhdGgsXG4gICAgICAgICAgb2xkQ2FjaGU6IHRoaXMub2xkQ2FjaGUsXG4gICAgICAgICAgb2xkUGF0aDogaW50ZXJydXB0ZWRSZW5hbWUub2xkUGF0aCxcbiAgICAgICAgICBvbGRQYXRoQmFja2xpbmtzTWFwOiB0aGlzLm9sZFBhdGhCYWNrbGlua3NNYXAsXG4gICAgICAgICAgc2V0dGluZ3NNYW5hZ2VyOiB0aGlzLnNldHRpbmdzTWFuYWdlclxuICAgICAgICB9KS5oYW5kbGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUNhc2VDb2xsaXNpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFnZXREYXRhQWRhcHRlckV4KHRoaXMuYXBwKS5pbnNlbnNpdGl2ZSB8fCB0aGlzLm9sZFBhdGgudG9Mb3dlckNhc2UoKSAhPT0gdGhpcy5uZXdQYXRoLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wUGF0aCA9IGpvaW4oZGlybmFtZSh0aGlzLm5ld1BhdGgpLCBgX190ZW1wX18ke2Jhc2VuYW1lKHRoaXMubmV3UGF0aCl9YCk7XG4gICAgYXdhaXQgdGhpcy5yZW5hbWVIYW5kbGVkKHRoaXMubmV3UGF0aCwgdGVtcFBhdGgpO1xuXG4gICAgYXdhaXQgbmV3IFJlbmFtZUhhbmRsZXIoe1xuICAgICAgYWJvcnRTaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgaGFuZGxlZFJlbmFtZXM6IHRoaXMuaGFuZGxlZFJlbmFtZXMsXG4gICAgICBpbnRlcnJ1cHRlZFJlbmFtZXNNYXA6IHRoaXMuaW50ZXJydXB0ZWRSZW5hbWVzTWFwLFxuICAgICAgbmV3UGF0aDogdGVtcFBhdGgsXG4gICAgICBvbGRDYWNoZTogdGhpcy5vbGRDYWNoZSxcbiAgICAgIG9sZFBhdGg6IHRoaXMub2xkUGF0aCxcbiAgICAgIG9sZFBhdGhCYWNrbGlua3NNYXA6IHRoaXMub2xkUGF0aEJhY2tsaW5rc01hcCxcbiAgICAgIHNldHRpbmdzTWFuYWdlcjogdGhpcy5zZXR0aW5nc01hbmFnZXJcbiAgICB9KS5oYW5kbGUoKTtcblxuICAgIGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUoZ2V0RmlsZSh0aGlzLmFwcCwgdGVtcFBhdGgpLCB0aGlzLm5ld1BhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoTGlua3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldENhY2hlKHRoaXMub2xkUGF0aCkgPz8gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRDYWNoZSh0aGlzLm5ld1BhdGgpO1xuICAgIGNvbnN0IG9sZFBhdGhMaW5rc1JlZnJlc2hlZCA9IGNhY2hlID8gZ2V0QWxsTGlua3MoY2FjaGUpIDogW107XG4gICAgY29uc3QgZmFrZU9sZEZpbGUgPSBnZXRGaWxlKHRoaXMuYXBwLCB0aGlzLm9sZFBhdGgsIHRydWUpO1xuICAgIGxldCBvbGRQYXRoQmFja2xpbmtzTWFwUmVmcmVzaGVkID0gbmV3IE1hcDxzdHJpbmcsIFJlZmVyZW5jZVtdPigpO1xuICAgIGF3YWl0IHRlbXBSZWdpc3RlckZpbGVzQW5kUnVuKHRoaXMuYXBwLCBbZmFrZU9sZEZpbGVdLCBhc3luYyAoKSA9PiB7XG4gICAgICBvbGRQYXRoQmFja2xpbmtzTWFwUmVmcmVzaGVkID0gKGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKHRoaXMuYXBwLCBmYWtlT2xkRmlsZSkpLmRhdGE7XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmsgb2Ygb2xkUGF0aExpbmtzUmVmcmVzaGVkKSB7XG4gICAgICBpZiAodGhpcy5vbGRQYXRoTGlua3MuaW5jbHVkZXMobGluaykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLm9sZFBhdGhMaW5rcy5wdXNoKGxpbmspO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2JhY2tsaW5rUGF0aCwgcmVmcmVzaGVkTGlua3NdIG9mIG9sZFBhdGhCYWNrbGlua3NNYXBSZWZyZXNoZWQuZW50cmllcygpKSB7XG4gICAgICBsZXQgb2xkTGlua3MgPSB0aGlzLm9sZFBhdGhCYWNrbGlua3NNYXAuZ2V0KGJhY2tsaW5rUGF0aCk7XG4gICAgICBpZiAoIW9sZExpbmtzKSB7XG4gICAgICAgIG9sZExpbmtzID0gW107XG4gICAgICAgIHRoaXMub2xkUGF0aEJhY2tsaW5rc01hcC5zZXQoYmFja2xpbmtQYXRoLCBvbGRMaW5rcyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgbGluayBvZiByZWZyZXNoZWRMaW5rcykge1xuICAgICAgICBpZiAob2xkTGlua3MuaW5jbHVkZXMobGluaykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBvbGRMaW5rcy5wdXNoKGxpbmspO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVuYW1lSGFuZGxlZChvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbmV3UGF0aCA9IGdldFNhZmVSZW5hbWVQYXRoKHRoaXMuYXBwLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICBpZiAob2xkUGF0aCA9PT0gbmV3UGF0aCkge1xuICAgICAgcmV0dXJuIG5ld1BhdGg7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlZFJlbmFtZXMuYWRkKG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgIG5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKHRoaXMuYXBwLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICByZXR1cm4gbmV3UGF0aDtcbiAgfVxufVxuXG5jbGFzcyBSZW5hbWVNYXAge1xuICBwcml2YXRlIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBvbGRDYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IG9sZFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBvbGRQYXRoTGlua3M6IFJlZmVyZW5jZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFJlbmFtZU1hcFBhcmFtcykge1xuICAgIHRoaXMuYWJvcnRTaWduYWwgPSBwYXJhbXMuYWJvcnRTaWduYWw7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMuc2V0dGluZ3NNYW5hZ2VyID0gcGFyYW1zLnNldHRpbmdzTWFuYWdlcjtcbiAgICB0aGlzLm9sZENhY2hlID0gcGFyYW1zLm9sZENhY2hlO1xuICAgIHRoaXMub2xkUGF0aCA9IHBhcmFtcy5vbGRQYXRoO1xuICAgIHRoaXMubmV3UGF0aCA9IHBhcmFtcy5uZXdQYXRoO1xuICAgIHRoaXMub2xkUGF0aExpbmtzID0gdGhpcy5vbGRDYWNoZSA/IGdldEFsbExpbmtzKHRoaXMub2xkQ2FjaGUpIDogW107XG4gIH1cblxuICBwdWJsaWMgZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZW50cmllcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHRoaXMubWFwLnNldCh0aGlzLm9sZFBhdGgsIHRoaXMubmV3UGF0aCk7XG5cbiAgICBpZiAoIWlzTm90ZSh0aGlzLmFwcCwgdGhpcy5vbGRQYXRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoKTtcblxuICAgIGNvbnN0IG9sZEZpbGUgPSBnZXRGaWxlKHRoaXMuYXBwLCB0aGlzLm9sZFBhdGgsIHRydWUpO1xuICAgIGxldCBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9ICcnO1xuICAgIGF3YWl0IHRlbXBSZWdpc3RlckZpbGVzQW5kUnVuQXN5bmModGhpcy5hcHAsIFtvbGRGaWxlXSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkRmFrZU9sZFBhdGhDYWNoZSA9IHRoaXMub2xkQ2FjaGUgJiYgb2xkRmlsZS5kZWxldGVkO1xuICAgICAgaWYgKHNob3VsZEZha2VPbGRQYXRoQ2FjaGUpIHtcbiAgICAgICAgcmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGUodGhpcy5hcHAsIG9sZEZpbGUsIHRoaXMub2xkQ2FjaGUpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCB0aGlzLm9sZFBhdGgsIEF0dGFjaG1lbnRQYXRoQ29udGV4dC5SZW5hbWVOb3RlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChzaG91bGRGYWtlT2xkUGF0aENhY2hlKSB7XG4gICAgICAgICAgdW5yZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZSh0aGlzLmFwcCwgb2xkRmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoID0gc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlclxuICAgICAgPyBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCh0aGlzLmFwcCwgdGhpcy5uZXdQYXRoLCBBdHRhY2htZW50UGF0aENvbnRleHQuUmVuYW1lTm90ZSlcbiAgICAgIDogb2xkQXR0YWNobWVudEZvbGRlclBhdGg7XG5cbiAgICBjb25zdCBpc09sZEF0dGFjaG1lbnRGb2xkZXJBdFJvb3QgPSBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gJy8nO1xuXG4gICAgY29uc3Qgb2xkQXR0YWNobWVudEZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh0aGlzLmFwcCwgb2xkQXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gICAgaWYgKCFvbGRBdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCAmJiAhc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZpbGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb2xkQXR0YWNobWVudEZpbGVzOiBURmlsZVtdID0gW107XG5cbiAgICBpZiAoYXdhaXQgaGFzT3duQXR0YWNobWVudEZvbGRlcih0aGlzLmFwcCwgdGhpcy5vbGRQYXRoLCBBdHRhY2htZW50UGF0aENvbnRleHQuUmVuYW1lTm90ZSkpIHtcbiAgICAgIFZhdWx0LnJlY3Vyc2VDaGlsZHJlbihvbGRBdHRhY2htZW50Rm9sZGVyLCAob2xkQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAgICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBpZiAoaXNGaWxlKG9sZEF0dGFjaG1lbnRGaWxlKSkge1xuICAgICAgICAgIG9sZEF0dGFjaG1lbnRGaWxlcy5wdXNoKG9sZEF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3Qgb2xkUGF0aExpbmsgb2YgdGhpcy5vbGRQYXRoTGlua3MpIHtcbiAgICAgICAgdGhpcy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBjb25zdCBvbGRBdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZSh0aGlzLmFwcCwgb2xkUGF0aExpbmssIHRoaXMub2xkUGF0aCk7XG4gICAgICAgIGlmICghb2xkQXR0YWNobWVudEZpbGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09sZEF0dGFjaG1lbnRGb2xkZXJBdFJvb3QgfHwgb2xkQXR0YWNobWVudEZpbGUucGF0aC5zdGFydHNXaXRoKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKSkge1xuICAgICAgICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRCYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZSh0aGlzLmFwcCwgb2xkQXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIHRoaXMuYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgICBjb25zdCBrZXlzID0gbmV3IFNldDxzdHJpbmc+KG9sZEF0dGFjaG1lbnRCYWNrbGlua3Mua2V5cygpKTtcbiAgICAgICAgICBrZXlzLmRlbGV0ZSh0aGlzLm9sZFBhdGgpO1xuICAgICAgICAgIGtleXMuZGVsZXRlKHRoaXMubmV3UGF0aCk7XG4gICAgICAgICAgaWYgKGtleXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgb2xkQXR0YWNobWVudEZpbGVzLnB1c2gob2xkQXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb2xkQXR0YWNobWVudEZpbGUgb2Ygb2xkQXR0YWNobWVudEZpbGVzKSB7XG4gICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBpZiAodGhpcy5zZXR0aW5nc01hbmFnZXIuaXNOb3RlRXgob2xkQXR0YWNobWVudEZpbGUucGF0aCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBuZXdBdHRhY2htZW50RmlsZVBhdGg6IHN0cmluZztcbiAgICAgIGlmIChzZXR0aW5ncy5zaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXMpIHtcbiAgICAgICAgbmV3QXR0YWNobWVudEZpbGVQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZpbGVQYXRoKHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIGNvbnRleHQ6IEF0dGFjaG1lbnRQYXRoQ29udGV4dC5SZW5hbWVOb3RlLFxuICAgICAgICAgIG5vdGVQYXRoT3JGaWxlOiB0aGlzLm5ld1BhdGgsXG4gICAgICAgICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IG9sZEF0dGFjaG1lbnRGaWxlLFxuICAgICAgICAgIG9sZE5vdGVQYXRoT3JGaWxlOiB0aGlzLm9sZFBhdGgsXG4gICAgICAgICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBpc09sZEF0dGFjaG1lbnRGb2xkZXJBdFJvb3QgPyBvbGRBdHRhY2htZW50RmlsZS5wYXRoIDogcmVsYXRpdmUob2xkQXR0YWNobWVudEZvbGRlclBhdGgsIG9sZEF0dGFjaG1lbnRGaWxlLnBhdGgpO1xuICAgICAgICBjb25zdCBuZXdGb2xkZXIgPSBqb2luKG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoLCBkaXJuYW1lKHJlbGF0aXZlUGF0aCkpO1xuICAgICAgICBuZXdBdHRhY2htZW50RmlsZVBhdGggPSBqb2luKG5ld0ZvbGRlciwgb2xkQXR0YWNobWVudEZpbGUubmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvbGRBdHRhY2htZW50RmlsZS5wYXRoID09PSBuZXdBdHRhY2htZW50RmlsZVBhdGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoc2V0dGluZ3Muc2hvdWxkRGVsZXRlQ29uZmxpY3RpbmdBdHRhY2htZW50cykge1xuICAgICAgICBjb25zdCBuZXdBdHRhY2htZW50RmlsZSA9IGdldEZpbGVPck51bGwodGhpcy5hcHAsIG5ld0F0dGFjaG1lbnRGaWxlUGF0aCk7XG4gICAgICAgIGlmIChuZXdBdHRhY2htZW50RmlsZSkge1xuICAgICAgICAgIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmZpbGxSZW5hbWVNYXAnKShgUmVtb3ZpbmcgY29uZmxpY3RpbmcgYXR0YWNobWVudCAke25ld0F0dGFjaG1lbnRGaWxlLnBhdGh9LmApO1xuICAgICAgICAgIGF3YWl0IHRyYXNoU2FmZSh0aGlzLmFwcCwgbmV3QXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIHRoaXMuYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGlyID0gZGlybmFtZShuZXdBdHRhY2htZW50RmlsZVBhdGgpO1xuICAgICAgICBjb25zdCBleHQgPSBleHRuYW1lKG5ld0F0dGFjaG1lbnRGaWxlUGF0aCk7XG4gICAgICAgIGNvbnN0IGJhc2VOYW1lID0gYmFzZW5hbWUobmV3QXR0YWNobWVudEZpbGVQYXRoLCBleHQpO1xuICAgICAgICBuZXdBdHRhY2htZW50RmlsZVBhdGggPSB0aGlzLmFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoKGpvaW4oZGlyLCBiYXNlTmFtZSksIGV4dC5zbGljZSgxKSk7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcC5zZXQob2xkQXR0YWNobWVudEZpbGUucGF0aCwgbmV3QXR0YWNobWVudEZpbGVQYXRoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0KG9sZFBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldChvbGRQYXRoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0QmFja2xpbmtzTWFwKFxuICAgIHNpbmdsZUJhY2tsaW5rc01hcDogTWFwPHN0cmluZywgUmVmZXJlbmNlW10+LFxuICAgIGNvbWJpbmVkQmFja2xpbmtzTWFwOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+PixcbiAgICBwYXRoOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbYmFja2xpbmtQYXRoLCBsaW5rc10gb2Ygc2luZ2xlQmFja2xpbmtzTWFwLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgbmV3QmFja2xpbmtQYXRoID0gdGhpcy5tYXAuZ2V0KGJhY2tsaW5rUGF0aCkgPz8gYmFja2xpbmtQYXRoO1xuICAgICAgY29uc3QgbGlua0pzb25Ub1BhdGhNYXAgPSBjb21iaW5lZEJhY2tsaW5rc01hcC5nZXQobmV3QmFja2xpbmtQYXRoKSA/PyBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgY29tYmluZWRCYWNrbGlua3NNYXAuc2V0KG5ld0JhY2tsaW5rUGF0aCwgbGlua0pzb25Ub1BhdGhNYXApO1xuICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgIGxpbmtKc29uVG9QYXRoTWFwLnNldCh0b0pzb24obGluayksIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbml0T3JpZ2luYWxMaW5rc01hcChjb21iaW5lZEJhY2tsaW5rc01hcDogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG9sZFBhdGhMaW5rIG9mIHRoaXMub2xkUGF0aExpbmtzKSB7XG4gICAgICBjb25zdCBvbGRBdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZSh0aGlzLmFwcCwgb2xkUGF0aExpbmssIHRoaXMub2xkUGF0aCk7XG4gICAgICBpZiAoIW9sZEF0dGFjaG1lbnRGaWxlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFja2xpbmtzTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlZmVyZW5jZVtdPigpO1xuICAgICAgYmFja2xpbmtzTWFwLnNldCh0aGlzLm5ld1BhdGgsIFtvbGRQYXRoTGlua10pO1xuICAgICAgdGhpcy5pbml0QmFja2xpbmtzTWFwKGJhY2tsaW5rc01hcCwgY29tYmluZWRCYWNrbGlua3NNYXAsIG9sZEF0dGFjaG1lbnRGaWxlLnBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmtleXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQob2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1hcC5zZXQob2xkUGF0aCwgbmV3UGF0aCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIHJlbmFtZS9kZWxldGUgaGFuZGxlcnMuXG4gKlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gKiBAcGFyYW0gc2V0dGluZ3NCdWlsZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHNldHRpbmdzIGZvciB0aGUgcmVuYW1lIGRlbGV0ZSBoYW5kbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSZW5hbWVEZWxldGVIYW5kbGVycyhwbHVnaW46IEFib3J0YWJsZVBsdWdpbiwgc2V0dGluZ3NCdWlsZGVyOiAoKSA9PiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4pOiB2b2lkIHtcbiAgbmV3IFJlZ2lzdHJ5KHBsdWdpbiwgc2V0dGluZ3NCdWlsZGVyLCBuZXcgU2V0dGluZ3NNYW5hZ2VyKHBsdWdpbi5hcHApKS5yZWdpc3RlcigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwUGFyZW50Rm9sZGVycyhhcHA6IEFwcCwgc2V0dGluZ3M6IFBhcnRpYWw8UmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzPiwgcGFyZW50Rm9sZGVyUGF0aHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzZXR0aW5ncy5lbXB0eUZvbGRlckJlaGF2aW9yID09PSBFbXB0eUZvbGRlckJlaGF2aW9yLktlZXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBwYXJlbnRGb2xkZXJQYXRoIG9mIHBhcmVudEZvbGRlclBhdGhzKSB7XG4gICAgc3dpdGNoIChzZXR0aW5ncy5lbXB0eUZvbGRlckJlaGF2aW9yKSB7XG4gICAgICBjYXNlIEVtcHR5Rm9sZGVyQmVoYXZpb3IuRGVsZXRlOlxuICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlcihhcHAsIHBhcmVudEZvbGRlclBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRW1wdHlGb2xkZXJCZWhhdmlvci5EZWxldGVXaXRoRW1wdHlQYXJlbnRzOlxuICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHAsIHBhcmVudEZvbGRlclBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkEsU0FBUyxTQUFTO0FBQ2xCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFPUCxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLHFCQUFxQjtBQUM5QixTQUFTLHNCQUFzQjtBQUMvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxnQ0FBZ0M7QUFDekM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FB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
|
|
@@ -4,6 +4,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
(function initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
7
8
|
if (globalThis.process) {
|
|
8
9
|
return;
|
|
9
10
|
}
|
|
@@ -16,6 +17,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
16
17
|
env: {},
|
|
17
18
|
platform: 'android'
|
|
18
19
|
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
19
21
|
globalThis.process = browserProcess;
|
|
20
22
|
})();
|
|
21
23
|
|
|
@@ -31,4 +33,4 @@ function relativePathToResourceUrl(app, relativePath, notePath) {
|
|
|
31
33
|
export {
|
|
32
34
|
relativePathToResourceUrl
|
|
33
35
|
};
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3Jlc291cmNlLXVybC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggcmVzb3VyY2UgVVJMcyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBnZXREYXRhQWRhcHRlckV4IH0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgeyB0b1Bvc2l4UGF0aCB9IGZyb20gJy4uL3BhdGgudHMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgcmVsYXRpdmUgcGF0aCB0byBhIHJlc291cmNlIFVSTC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHJlbGF0aXZlUGF0aCAtIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSByZXNvdXJjZS5cbiAqIEBwYXJhbSBub3RlUGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBub3RlLlxuICogQHJldHVybnMgVGhlIHJlc291cmNlIFVSTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aXZlUGF0aFRvUmVzb3VyY2VVcmwoYXBwOiBBcHAsIHJlbGF0aXZlUGF0aDogc3RyaW5nLCBub3RlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm90ZUZ1bGxQYXRoID0gdG9Qb3NpeFBhdGgoZ2V0RGF0YUFkYXB0ZXJFeChhcHApLmdldEZ1bGxSZWFsUGF0aChub3RlUGF0aCkpO1xuICBjb25zdCBub3RlVXJsID0gYCR7UGxhdGZvcm0ucmVzb3VyY2VQYXRoUHJlZml4fSR7bm90ZUZ1bGxQYXRofWA7XG4gIGNvbnN0IHJlbGF0aXZlVXJsID0gbmV3IFVSTChyZWxhdGl2ZVBhdGgsIG5vdGVVcmwpO1xuICByZXR1cm4gU3RyaW5nKHJlbGF0aXZlVXJsKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyx3QkFBd0I7QUFFakMsU0FBUyxtQkFBbUI7QUFVckIsU0FBUywwQkFBMEIsS0FBVSxjQUFzQixVQUEwQjtBQUNsRyxRQUFNLGVBQWUsWUFBWSxpQkFBaUIsR0FBRyxFQUFFLGdCQUFnQixRQUFRLENBQUM7QUFDaEYsUUFBTSxVQUFVLEdBQUcsU0FBUyxrQkFBa0IsR0FBRyxZQUFZO0FBQzdELFFBQU0sY0FBYyxJQUFJLElBQUksY0FBYyxPQUFPO0FBQ2pELFNBQU8sT0FBTyxXQUFXO0FBQzNCOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -4,6 +4,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
(function initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
7
8
|
if (globalThis.process) {
|
|
8
9
|
return;
|
|
9
10
|
}
|
|
@@ -16,6 +17,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
16
17
|
env: {},
|
|
17
18
|
platform: 'android'
|
|
18
19
|
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
19
21
|
globalThis.process = browserProcess;
|
|
20
22
|
})();
|
|
21
23
|
|
|
@@ -255,4 +257,4 @@ class SettingEx extends Setting {
|
|
|
255
257
|
export {
|
|
256
258
|
SettingEx
|
|
257
259
|
};
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3NldHRpbmctZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFeHRlbmRzIHRoZSBTZXR0aW5nIGNsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBhZGRpbmcgY29tcG9uZW50cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIHJlcXVpcmVBcGlWZXJzaW9uLFxuICBTZXR0aW5nXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL2NoZWNrYm94LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb2RlSGlnaGxpZ2h0ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL2NvZGUtaGlnaGxpZ2h0ZXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IERhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL2RhdGUtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IERhdGVUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy9kYXRlLXRpbWUtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IEVtYWlsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy9lbWFpbC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgRmlsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvZmlsZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTW9udGhDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL21vbnRoLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy9tdWx0aXBsZS1kcm9wZG93bi1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTXVsdGlwbGVFbWFpbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvbXVsdGlwbGUtZW1haWwtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE11bHRpcGxlRmlsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvbXVsdGlwbGUtZmlsZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTXVsdGlwbGVUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy9tdWx0aXBsZS10ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL251bWJlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGFzc3dvcmRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL3Bhc3N3b3JkLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBUZWxlcGhvbmVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL3RlbGVwaG9uZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVGltZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvdGltZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvdHJpLXN0YXRlLWNoZWNrYm94LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBUeXBlZERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy90eXBlZC1kcm9wZG93bi1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVHlwZWRNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy90eXBlZC1tdWx0aXBsZS1kcm9wZG93bi1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVXJsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy91cmwtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFdlZWtDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL3dlZWstY29tcG9uZW50LnRzJztcblxuLyoqXG4gKiBFeHRlbmRzIHRoZSBTZXR0aW5nIGNsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBhZGRpbmcgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldHRpbmdFeCBleHRlbmRzIFNldHRpbmcge1xuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBDaGVja2JveENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hlY2tib3goY2I6IChjaGVja2JveDogQ2hlY2tib3hDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhDaGVja2JveENvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgQ29kZUhpZ2hsaWdodGVyQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRDb2RlSGlnaGxpZ2h0ZXIoY2I6IChjb2RlSGlnaGxpZ2h0ZXI6IENvZGVIaWdobGlnaHRlckNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKENvZGVIaWdobGlnaHRlckNvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21wb25lbnQgdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50Q2xhc3MgLSBUaGUgY2xhc3Mgb2YgdGhlIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcG9uZW50Q2xhc3M8VCBleHRlbmRzIEJhc2VDb21wb25lbnQ+KGNvbXBvbmVudENsYXNzOiBuZXcgKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkgPT4gVCwgY2I6IChjb21wb25lbnQ6IFQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRTYWZlKChlbCkgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IGNvbXBvbmVudENsYXNzKGVsKTtcbiAgICAgIGNiKGNvbXBvbmVudCk7XG4gICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgRGF0ZUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0ZShjYjogKGRhdGU6IERhdGVDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhEYXRlQ29tcG9uZW50LCBjYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBEYXRlVGltZUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0ZVRpbWUoY2I6IChkYXRlVGltZTogRGF0ZVRpbWVDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhEYXRlVGltZUNvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4ge0BsaW5rIEVtYWlsQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRFbWFpbChjYjogKGVtYWlsOiBFbWFpbENvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKEVtYWlsQ29tcG9uZW50LCBjYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBGaWxlQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRGaWxlKGNiOiAoZmlsZTogRmlsZUNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKEZpbGVDb21wb25lbnQsIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIE1vbnRoQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRNb250aChjYjogKG1vbnRoOiBNb250aENvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE1vbnRoQ29tcG9uZW50LCBjYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRNdWx0aXBsZURyb3Bkb3duKGNiOiAobXVsdGlwbGVEcm9wZG93bjogTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE11bHRpcGxlRHJvcGRvd25Db21wb25lbnQsIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIE11bHRpcGxlRW1haWxDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE11bHRpcGxlRW1haWwoY2I6IChtdWx0aXBsZUVtYWlsOiBNdWx0aXBsZUVtYWlsQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTXVsdGlwbGVFbWFpbENvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgTXVsdGlwbGVGaWxlQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRNdWx0aXBsZUZpbGUoY2I6IChtdWx0aXBsZUZpbGU6IE11bHRpcGxlRmlsZUNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE11bHRpcGxlRmlsZUNvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgTXVsdGlwbGVUZXh0Q29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRNdWx0aXBsZVRleHQoY2I6IChtdWx0aXBsZVRleHQ6IE11bHRpcGxlVGV4dENvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE11bHRpcGxlVGV4dENvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgTnVtYmVyQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGROdW1iZXIoY2I6IChudW1iZXI6IE51bWJlckNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE51bWJlckNvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgUGFzc3dvcmRDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFBhc3N3b3JkKGNiOiAocGFzc3dvcmQ6IFBhc3N3b3JkQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoUGFzc3dvcmRDb21wb25lbnQsIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFRlbGVwaG9uZUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVGVsZXBob25lKGNiOiAodGVsZXBob25lOiBUZWxlcGhvbmVDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhUZWxlcGhvbmVDb21wb25lbnQsIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFRpbWVDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFRpbWUoY2I6ICh0aW1lOiBUaW1lQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoVGltZUNvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVHJpU3RhdGVDaGVja2JveChjYjogKHRyaVN0YXRlQ2hlY2tib3g6IFRyaVN0YXRlQ2hlY2tib3hDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhUcmlTdGF0ZUNoZWNrYm94Q29tcG9uZW50LCBjYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBUeXBlZERyb3Bkb3duQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRUeXBlZERyb3Bkb3duPFQ+KGNiOiAodHlwZWREcm9wZG93bjogVHlwZWREcm9wZG93bkNvbXBvbmVudDxUPikgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKFR5cGVkRHJvcGRvd25Db21wb25lbnQ8VD4sIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFR5cGVkTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVHlwZWRNdWx0aXBsZURyb3Bkb3duPFQ+KGNiOiAodHlwZWRNdWx0aXBsZURyb3Bkb3duOiBUeXBlZE11bHRpcGxlRHJvcGRvd25Db21wb25lbnQ8VD4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhUeXBlZE11bHRpcGxlRHJvcGRvd25Db21wb25lbnQ8VD4sIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIHtAbGluayBVcmxDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFVybChjYjogKHVybDogVXJsQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoVXJsQ29tcG9uZW50LCBjYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBXZWVrQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRXZWVrKGNiOiAod2VlazogV2Vla0NvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKFdlZWtDb21wb25lbnQsIGNiKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29tcG9uZW50U2FmZShjYjogKGVsOiBIVE1MRWxlbWVudCkgPT4gQmFzZUNvbXBvbmVudCk6IHRoaXMge1xuICAgIGlmIChyZXF1aXJlQXBpVmVyc2lvbignMS4xMS4wJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudCgoZWwpID0+IHtcbiAgICAgICAgaWYgKCFyZXF1aXJlQXBpVmVyc2lvbignMC4xNi4wJykpIHtcbiAgICAgICAgICByZXR1cm4gY2IoZWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYihlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudHMucHVzaChjYih0aGlzLmNvbnRyb2xFbCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsaUNBQWlDO0FBQzFDLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsNkJBQTZC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
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3NldHRpbmctZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFeHRlbmRzIHRoZSBTZXR0aW5nIGNsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBhZGRpbmcgY29tcG9uZW50cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIHJlcXVpcmVBcGlWZXJzaW9uLFxuICBTZXR0aW5nXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL2NoZWNrYm94LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb2RlSGlnaGxpZ2h0ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL2NvZGUtaGlnaGxpZ2h0ZXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IERhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL2RhdGUtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IERhdGVUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy9kYXRlLXRpbWUtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IEVtYWlsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy9lbWFpbC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgRmlsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvZmlsZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTW9udGhDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL21vbnRoLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy9tdWx0aXBsZS1kcm9wZG93bi1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTXVsdGlwbGVFbWFpbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvbXVsdGlwbGUtZW1haWwtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE11bHRpcGxlRmlsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvbXVsdGlwbGUtZmlsZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTXVsdGlwbGVUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy9tdWx0aXBsZS10ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL251bWJlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGFzc3dvcmRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL3Bhc3N3b3JkLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBUZWxlcGhvbmVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL3RlbGVwaG9uZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVGltZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvdGltZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5nLWNvbXBvbmVudHMvdHJpLXN0YXRlLWNoZWNrYm94LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBUeXBlZERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy90eXBlZC1kcm9wZG93bi1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVHlwZWRNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy90eXBlZC1tdWx0aXBsZS1kcm9wZG93bi1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVXJsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmctY29tcG9uZW50cy91cmwtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFdlZWtDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnRzL3dlZWstY29tcG9uZW50LnRzJztcblxuLyoqXG4gKiBFeHRlbmRzIHRoZSBTZXR0aW5nIGNsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBhZGRpbmcgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldHRpbmdFeCBleHRlbmRzIFNldHRpbmcge1xuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBDaGVja2JveENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hlY2tib3goY2I6IChjaGVja2JveDogQ2hlY2tib3hDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhDaGVja2JveENvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgQ29kZUhpZ2hsaWdodGVyQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRDb2RlSGlnaGxpZ2h0ZXIoY2I6IChjb2RlSGlnaGxpZ2h0ZXI6IENvZGVIaWdobGlnaHRlckNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKENvZGVIaWdobGlnaHRlckNvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21wb25lbnQgdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50Q2xhc3MgLSBUaGUgY2xhc3Mgb2YgdGhlIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcG9uZW50Q2xhc3M8VCBleHRlbmRzIEJhc2VDb21wb25lbnQ+KGNvbXBvbmVudENsYXNzOiBuZXcgKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkgPT4gVCwgY2I6IChjb21wb25lbnQ6IFQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRTYWZlKChlbCkgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IGNvbXBvbmVudENsYXNzKGVsKTtcbiAgICAgIGNiKGNvbXBvbmVudCk7XG4gICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgRGF0ZUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0ZShjYjogKGRhdGU6IERhdGVDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhEYXRlQ29tcG9uZW50LCBjYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBEYXRlVGltZUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0ZVRpbWUoY2I6IChkYXRlVGltZTogRGF0ZVRpbWVDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhEYXRlVGltZUNvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4ge0BsaW5rIEVtYWlsQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRFbWFpbChjYjogKGVtYWlsOiBFbWFpbENvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKEVtYWlsQ29tcG9uZW50LCBjYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBGaWxlQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRGaWxlKGNiOiAoZmlsZTogRmlsZUNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKEZpbGVDb21wb25lbnQsIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIE1vbnRoQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRNb250aChjYjogKG1vbnRoOiBNb250aENvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE1vbnRoQ29tcG9uZW50LCBjYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRNdWx0aXBsZURyb3Bkb3duKGNiOiAobXVsdGlwbGVEcm9wZG93bjogTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE11bHRpcGxlRHJvcGRvd25Db21wb25lbnQsIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIE11bHRpcGxlRW1haWxDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE11bHRpcGxlRW1haWwoY2I6IChtdWx0aXBsZUVtYWlsOiBNdWx0aXBsZUVtYWlsQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTXVsdGlwbGVFbWFpbENvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgTXVsdGlwbGVGaWxlQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRNdWx0aXBsZUZpbGUoY2I6IChtdWx0aXBsZUZpbGU6IE11bHRpcGxlRmlsZUNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE11bHRpcGxlRmlsZUNvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgTXVsdGlwbGVUZXh0Q29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRNdWx0aXBsZVRleHQoY2I6IChtdWx0aXBsZVRleHQ6IE11bHRpcGxlVGV4dENvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE11bHRpcGxlVGV4dENvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgTnVtYmVyQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGROdW1iZXIoY2I6IChudW1iZXI6IE51bWJlckNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE51bWJlckNvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgUGFzc3dvcmRDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFBhc3N3b3JkKGNiOiAocGFzc3dvcmQ6IFBhc3N3b3JkQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoUGFzc3dvcmRDb21wb25lbnQsIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFRlbGVwaG9uZUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVGVsZXBob25lKGNiOiAodGVsZXBob25lOiBUZWxlcGhvbmVDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhUZWxlcGhvbmVDb21wb25lbnQsIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFRpbWVDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFRpbWUoY2I6ICh0aW1lOiBUaW1lQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoVGltZUNvbXBvbmVudCwgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVHJpU3RhdGVDaGVja2JveChjYjogKHRyaVN0YXRlQ2hlY2tib3g6IFRyaVN0YXRlQ2hlY2tib3hDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhUcmlTdGF0ZUNoZWNrYm94Q29tcG9uZW50LCBjYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBUeXBlZERyb3Bkb3duQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRUeXBlZERyb3Bkb3duPFQ+KGNiOiAodHlwZWREcm9wZG93bjogVHlwZWREcm9wZG93bkNvbXBvbmVudDxUPikgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKFR5cGVkRHJvcGRvd25Db21wb25lbnQ8VD4sIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFR5cGVkTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVHlwZWRNdWx0aXBsZURyb3Bkb3duPFQ+KGNiOiAodHlwZWRNdWx0aXBsZURyb3Bkb3duOiBUeXBlZE11bHRpcGxlRHJvcGRvd25Db21wb25lbnQ8VD4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhUeXBlZE11bHRpcGxlRHJvcGRvd25Db21wb25lbnQ8VD4sIGNiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIHtAbGluayBVcmxDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFVybChjYjogKHVybDogVXJsQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoVXJsQ29tcG9uZW50LCBjYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBXZWVrQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRXZWVrKGNiOiAod2VlazogV2Vla0NvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKFdlZWtDb21wb25lbnQsIGNiKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29tcG9uZW50U2FmZShjYjogKGVsOiBIVE1MRWxlbWVudCkgPT4gQmFzZUNvbXBvbmVudCk6IHRoaXMge1xuICAgIGlmIChyZXF1aXJlQXBpVmVyc2lvbignMS4xMS4wJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudCgoZWwpID0+IHtcbiAgICAgICAgaWYgKCFyZXF1aXJlQXBpVmVyc2lvbignMC4xNi4wJykpIHtcbiAgICAgICAgICByZXR1cm4gY2IoZWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYihlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudHMucHVzaChjYih0aGlzLmNvbnRyb2xFbCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxpQ0FBaUM7QUFDMUMsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyw2QkFB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
|
|
@@ -4,6 +4,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
(function initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
7
8
|
if (globalThis.process) {
|
|
8
9
|
return;
|
|
9
10
|
}
|
|
@@ -16,6 +17,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
16
17
|
env: {},
|
|
17
18
|
platform: 'android'
|
|
18
19
|
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
19
21
|
globalThis.process = browserProcess;
|
|
20
22
|
})();
|
|
21
23
|
|
|
@@ -45,4 +47,4 @@ class SettingGroupEx extends SettingGroup {
|
|
|
45
47
|
export {
|
|
46
48
|
SettingGroupEx
|
|
47
49
|
};
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3NldHRpbmctZ3JvdXAtZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFeHRlbmRzIHRoZSBTZXR0aW5nR3JvdXAgY2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGFkZGluZyBzZXR0aW5ncy5cbiAqL1xuXG5pbXBvcnQgeyBTZXR0aW5nR3JvdXAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFNldHRpbmdFeCB9IGZyb20gJy4vc2V0dGluZy1leC50cyc7XG5cbi8qKlxuICogQW4gZXh0ZW5kZWQgc2V0dGluZyBncm91cCB0aGF0IGFsbG93cyB5b3UgdG8gYWRkIGV4dGVuZGVkIHNldHRpbmdzIHRvIHRoZSBzZXR0aW5nIGdyb3VwLlxuICovXG5leHBvcnQgY2xhc3MgU2V0dGluZ0dyb3VwRXggZXh0ZW5kcyBTZXR0aW5nR3JvdXAge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBzZXR0aW5nIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSB7XG4gICAgc3VwZXIoY29udGFpbmVyRWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBleHRlbmRlZCBzZXR0aW5nIHRvIHRoZSBzZXR0aW5nIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gYWRkIHRoZSBzZXR0aW5nLlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBncm91cC5cbiAgICovXG4gIHB1YmxpYyBhZGRTZXR0aW5nRXgoY2I6IChzZXR0aW5nOiBTZXR0aW5nRXgpID0+
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3NldHRpbmctZ3JvdXAtZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFeHRlbmRzIHRoZSBTZXR0aW5nR3JvdXAgY2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGFkZGluZyBzZXR0aW5ncy5cbiAqL1xuXG5pbXBvcnQgeyBTZXR0aW5nR3JvdXAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFNldHRpbmdFeCB9IGZyb20gJy4vc2V0dGluZy1leC50cyc7XG5cbi8qKlxuICogQW4gZXh0ZW5kZWQgc2V0dGluZyBncm91cCB0aGF0IGFsbG93cyB5b3UgdG8gYWRkIGV4dGVuZGVkIHNldHRpbmdzIHRvIHRoZSBzZXR0aW5nIGdyb3VwLlxuICovXG5leHBvcnQgY2xhc3MgU2V0dGluZ0dyb3VwRXggZXh0ZW5kcyBTZXR0aW5nR3JvdXAge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBzZXR0aW5nIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSB7XG4gICAgc3VwZXIoY29udGFpbmVyRWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBleHRlbmRlZCBzZXR0aW5nIHRvIHRoZSBzZXR0aW5nIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gYWRkIHRoZSBzZXR0aW5nLlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBncm91cC5cbiAgICovXG4gIHB1YmxpYyBhZGRTZXR0aW5nRXgoY2I6IChzZXR0aW5nOiBTZXR0aW5nRXgpID0+IHZvaWQpOiB0aGlzIHtcbiAgICBjb25zdCBzZXR0aW5nID0gbmV3IFNldHRpbmdFeCh0aGlzLmxpc3RFbCk7XG4gICAgY2Ioc2V0dGluZyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsU0FBUyxvQkFBb0I7QUFFN0IsU0FBUyxpQkFBaUI7QUFLbkIsTUFBTSx1QkFBdUIsYUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU14QyxZQUFZLGFBQTBCO0FBQzNDLFVBQU0sV0FBVztBQUFBLEVBQ25CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxhQUFhLElBQXdDO0FBQzFELFVBQU0sVUFBVSxJQUFJLFVBQVUsS0FBSyxNQUFNO0FBQ3pDLE9BQUcsT0FBTztBQUNWLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -4,6 +4,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
(function initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
7
8
|
if (globalThis.process) {
|
|
8
9
|
return;
|
|
9
10
|
}
|
|
@@ -16,6 +17,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
16
17
|
env: {},
|
|
17
18
|
platform: 'android'
|
|
18
19
|
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
19
21
|
globalThis.process = browserProcess;
|
|
20
22
|
})();
|
|
21
23
|
|
|
@@ -45,4 +47,4 @@ export {
|
|
|
45
47
|
getOsUnsafePathCharsRegExp,
|
|
46
48
|
isValidationMessageHolder
|
|
47
49
|
};
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhbGlkYXRpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBWYWxpZGF0aW9uIHV0aWxpdGllcy5cbiAqL1xuXG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgb25lT2YgfSBmcm9tICcuLi9yZWctZXhwLnRzJztcblxuLyoqXG4gKiBIb2xkcyBhIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uTWVzc2FnZUhvbGRlciB7XG4gIC8qKlxuICAgKiBBIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICovXG4gIHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGhvbGRlci5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGhvbGRlciwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkYXRpb25NZXNzYWdlSG9sZGVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXIge1xuICByZXR1cm4gKHZhbHVlIGFzIFBhcnRpYWw8VmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXI+KS52YWxpZGF0aW9uTWVzc2FnZSAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE1hdGNoZXMgY2hhcmFjdGVycyB0aGF0IGFyZSBub3Qgc2FmZSB0byB1c2UgaW4gZmlsZSBuYW1lcyB3aXRoaW4gT2JzaWRpYW4uXG4gKi9cbmV4cG9ydCBjb25zdCBPQlNJRElBTl9VTlNBRkVfRklMRU5BTUVfQ0hBUlMgPSAvWyNeW1xcXXxdL2c7XG5cbi8qKlxuICogV2luZG93cy1zcGVjaWZpYyB1bnNhZmUgZmlsZSBuYW1lIHBhdGggY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFdJTkRPV1NfVU5TQUZFX1BBVEhfQ0hBUlMgPSAvWypcXFxcLzw+Onw/XCJdL2c7XG5cbi8qKlxuICogVW5peC1zcGVjaWZpYyB1bnNhZmUgZmlsZSBuYW1lIHBhdGggY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFVOSVhfVU5TQUZFX1BBVEhfQ0hBUlMgPSAvW1xcMC9dL2c7XG5cbi8qKlxuICogUmV0dXJucyBhIHJlZ2V4cCBtYXRjaGluZyBhbGwgdW5zYWZlIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lcy9wYXRocy5cbiAqXG4gKiBJbmNsdWRlcyBib3RoIE9TLXNwZWNpZmljIHJlc3RyaWN0aW9ucyBhbmQgT2JzaWRpYW4tc3BlY2lmaWMgb25lcy5cbiAqXG4gKiBAcGFyYW0gaXNXaW5kb3dzIC0gV2hldGhlciB0byBpbmNsdWRlIFdpbmRvd3Mtc3BlY2lmaWMgcmVzdHJpY3Rpb25zLiBEZWZhdWx0cyB0byBgUGxhdGZvcm0uaXNXaW5gLlxuICogQHJldHVybnMgQSByZWdleHAgbWF0Y2hpbmcgYWxsIHVuc2FmZSBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZXMvcGF0aHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPc0FuZE9ic2lkaWFuVW5zYWZlUGF0aENoYXJzUmVnRXhwKGlzV2luZG93cz86IGJvb2xlYW4pOiBSZWdFeHAge1xuICByZXR1cm4gb25lT2YoW1xuICAgIGdldE9zVW5zYWZlUGF0aENoYXJzUmVnRXhwKGlzV2luZG93cyksXG4gICAgT0JTSURJQU5fVU5TQUZFX0ZJTEVOQU1FX0NIQVJTXG4gIF0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByZWdleHAgbWF0Y2hpbmcgY2hhcmFjdGVycyB0aGF0IGFyZSBub3Qgc2FmZSB0byB1c2UgaW4gZmlsZSBuYW1lcy9wYXRocyBhdCB0aGUgT1MgbGV2ZWwuXG4gKlxuICogQHBhcmFtIGlzV2luZG93cyAtIFdoZXRoZXIgdG8gaW5jbHVkZSBXaW5kb3dzLXNwZWNpZmljIHJlc3RyaWN0aW9ucy4gRGVmYXVsdHMgdG8gYFBsYXRmb3JtLmlzV2luYC5cbiAqIEByZXR1cm5zIEEgcmVnZXhwIG1hdGNoaW5nIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHNhZmUgdG8gdXNlIGluIGZpbGUgbmFtZXMvcGF0aHMgYXQgdGhlIE9TIGxldmVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3NVbnNhZmVQYXRoQ2hhcnNSZWdFeHAoaXNXaW5kb3dzPzogYm9vbGVhbik6IFJlZ0V4cCB7XG4gIGlzV2luZG93cyA/
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhbGlkYXRpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBWYWxpZGF0aW9uIHV0aWxpdGllcy5cbiAqL1xuXG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgb25lT2YgfSBmcm9tICcuLi9yZWctZXhwLnRzJztcblxuLyoqXG4gKiBIb2xkcyBhIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uTWVzc2FnZUhvbGRlciB7XG4gIC8qKlxuICAgKiBBIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICovXG4gIHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGhvbGRlci5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGhvbGRlciwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkYXRpb25NZXNzYWdlSG9sZGVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXIge1xuICByZXR1cm4gKHZhbHVlIGFzIFBhcnRpYWw8VmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXI+KS52YWxpZGF0aW9uTWVzc2FnZSAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE1hdGNoZXMgY2hhcmFjdGVycyB0aGF0IGFyZSBub3Qgc2FmZSB0byB1c2UgaW4gZmlsZSBuYW1lcyB3aXRoaW4gT2JzaWRpYW4uXG4gKi9cbmV4cG9ydCBjb25zdCBPQlNJRElBTl9VTlNBRkVfRklMRU5BTUVfQ0hBUlMgPSAvWyNeW1xcXXxdL2c7XG5cbi8qKlxuICogV2luZG93cy1zcGVjaWZpYyB1bnNhZmUgZmlsZSBuYW1lIHBhdGggY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFdJTkRPV1NfVU5TQUZFX1BBVEhfQ0hBUlMgPSAvWypcXFxcLzw+Onw/XCJdL2c7XG5cbi8qKlxuICogVW5peC1zcGVjaWZpYyB1bnNhZmUgZmlsZSBuYW1lIHBhdGggY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFVOSVhfVU5TQUZFX1BBVEhfQ0hBUlMgPSAvW1xcMC9dL2c7XG5cbi8qKlxuICogUmV0dXJucyBhIHJlZ2V4cCBtYXRjaGluZyBhbGwgdW5zYWZlIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lcy9wYXRocy5cbiAqXG4gKiBJbmNsdWRlcyBib3RoIE9TLXNwZWNpZmljIHJlc3RyaWN0aW9ucyBhbmQgT2JzaWRpYW4tc3BlY2lmaWMgb25lcy5cbiAqXG4gKiBAcGFyYW0gaXNXaW5kb3dzIC0gV2hldGhlciB0byBpbmNsdWRlIFdpbmRvd3Mtc3BlY2lmaWMgcmVzdHJpY3Rpb25zLiBEZWZhdWx0cyB0byBgUGxhdGZvcm0uaXNXaW5gLlxuICogQHJldHVybnMgQSByZWdleHAgbWF0Y2hpbmcgYWxsIHVuc2FmZSBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZXMvcGF0aHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPc0FuZE9ic2lkaWFuVW5zYWZlUGF0aENoYXJzUmVnRXhwKGlzV2luZG93cz86IGJvb2xlYW4pOiBSZWdFeHAge1xuICByZXR1cm4gb25lT2YoW1xuICAgIGdldE9zVW5zYWZlUGF0aENoYXJzUmVnRXhwKGlzV2luZG93cyksXG4gICAgT0JTSURJQU5fVU5TQUZFX0ZJTEVOQU1FX0NIQVJTXG4gIF0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByZWdleHAgbWF0Y2hpbmcgY2hhcmFjdGVycyB0aGF0IGFyZSBub3Qgc2FmZSB0byB1c2UgaW4gZmlsZSBuYW1lcy9wYXRocyBhdCB0aGUgT1MgbGV2ZWwuXG4gKlxuICogQHBhcmFtIGlzV2luZG93cyAtIFdoZXRoZXIgdG8gaW5jbHVkZSBXaW5kb3dzLXNwZWNpZmljIHJlc3RyaWN0aW9ucy4gRGVmYXVsdHMgdG8gYFBsYXRmb3JtLmlzV2luYC5cbiAqIEByZXR1cm5zIEEgcmVnZXhwIG1hdGNoaW5nIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHNhZmUgdG8gdXNlIGluIGZpbGUgbmFtZXMvcGF0aHMgYXQgdGhlIE9TIGxldmVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3NVbnNhZmVQYXRoQ2hhcnNSZWdFeHAoaXNXaW5kb3dzPzogYm9vbGVhbik6IFJlZ0V4cCB7XG4gIGlzV2luZG93cyA/Pz0gUGxhdGZvcm0uaXNXaW47XG4gIHJldHVybiBpc1dpbmRvd3MgPyBXSU5ET1dTX1VOU0FGRV9QQVRIX0NIQVJTIDogVU5JWF9VTlNBRkVfUEFUSF9DSEFSUztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsU0FBUyxnQkFBZ0I7QUFFekIsU0FBUyxhQUFhO0FBa0JmLFNBQVMsMEJBQTBCLE9BQWtEO0FBQzFGLFNBQVEsTUFBMkMsc0JBQXNCO0FBQzNFO0FBS08sTUFBTSxpQ0FBaUM7QUFLdkMsTUFBTSw0QkFBNEI7QUFLbEMsTUFBTSx5QkFBeUI7QUFVL0IsU0FBUyxzQ0FBc0MsV0FBNkI7QUFDakYsU0FBTyxNQUFNO0FBQUEsSUFDWCwyQkFBMkIsU0FBUztBQUFBLElBQ3BDO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFRTyxTQUFTLDJCQUEyQixXQUE2QjtBQUN0RSxnQkFBYyxTQUFTO0FBQ3ZCLFNBQU8sWUFBWSw0QkFBNEI7QUFDakQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -4,6 +4,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
(function initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
7
8
|
if (globalThis.process) {
|
|
8
9
|
return;
|
|
9
10
|
}
|
|
@@ -16,6 +17,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
16
17
|
env: {},
|
|
17
18
|
platform: 'android'
|
|
18
19
|
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/prefer-active-doc -- Actively use globalThis.
|
|
19
21
|
globalThis.process = browserProcess;
|
|
20
22
|
})();
|
|
21
23
|
|
|
@@ -70,4 +72,4 @@ async function deleteIfNotUsed(app, pathOrFile, deletedNotePath, shouldReportUse
|
|
|
70
72
|
export {
|
|
71
73
|
deleteIfNotUsed
|
|
72
74
|
};
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhdWx0LWRlbGV0ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGRlbGV0aW9uIHV0aWxpdGllcyB0aGF0IHJlcXVpcmUgbWV0YWRhdGEgY2FjaGUgYWNjZXNzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBOb3RpY2UgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUGF0aE9yQWJzdHJhY3RGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbmltcG9ydCB7IHByaW50RXJyb3IgfSBmcm9tICcuLi9lcnJvci50cyc7XG5pbXBvcnQge1xuICBnZXRBYnN0cmFjdEZpbGVPck51bGwsXG4gIGlzRmlsZSxcbiAgaXNGb2xkZXJcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUgfSBmcm9tICcuL21ldGFkYXRhLWNhY2hlLnRzJztcbmltcG9ydCB7XG4gIGlzRW1wdHlGb2xkZXIsXG4gIGxpc3RTYWZlLFxuICB0cmFzaFNhZmVcbn0gZnJvbSAnLi92YXVsdC50cyc7XG5cbi8qKlxuICogRGVsZXRlcyBhbiBhYnN0cmFjdCBmaWxlIHNhZmVseSBmcm9tIHRoZSB2YXVsdCwgYnV0IG9ubHkgaWYgaXQgaXMgbm90IHJlZmVyZW5jZWQgYnkgb3RoZXIgbm90ZXMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byBkZWxldGUuXG4gKiBAcGFyYW0gZGVsZXRlZE5vdGVQYXRoIC0gT3B0aW9uYWwuIFRoZSBwYXRoIG9mIHRoZSBub3RlIHRoYXQgdHJpZ2dlcmVkIHRoZSByZW1vdmFsLlxuICogQHBhcmFtIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cyAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIGEgbm90aWNlIHdpbGwgYmUgc2hvd24gZm9yIGVhY2ggYXR0YWNobWVudCB0aGF0IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgbm90ZXMuXG4gKiBAcGFyYW0gc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzIC0gT3B0aW9uYWwuIElmIGB0cnVlYCwgZW1wdHkgZm9sZGVycyB3aWxsIGJlIGRlbGV0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJlbW92YWwgd2FzIHN1Y2Nlc3NmdWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVJZk5vdFVzZWQoXG4gIGFwcDogQXBwLFxuICBwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsXG4gIGRlbGV0ZWROb3RlUGF0aD86IHN0cmluZyxcbiAgc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzPzogYm9vbGVhbixcbiAgc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzPzogYm9vbGVhblxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoYXBwLCBwYXRoT3JGaWxlKTtcblxuICBpZiAoIWZpbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgY2FuRGVsZXRlID0gaXNGaWxlKGZpbGUpIHx8IChzaG91bGREZWxldGVFbXB0eUZvbGRlcnMgPz8gdHJ1ZSk7XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRBYnN0cmFjdEZpbGUgaXMgYWx3YXlzIFRGaWxlIG9yIFRGb2xkZXIgaW4gT2JzaWRpYW47IHRoZSBmYWxzZSBicmFuY2ggb2YgaXNGaWxlIGxlYWRzIHRvIGlzRm9sZGVyLiAqL1xuICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShhcHAsIGZpbGUpO1xuICAgIGlmIChkZWxldGVkTm90ZVBhdGgpIHtcbiAgICAgIGJhY2tsaW5rcy5jbGVhcihkZWxldGVkTm90ZVBhdGgpO1xuICAgIH1cbiAgICBpZiAoYmFja2xpbmtzLmNvdW50KCkgIT09IDApIHtcbiAgICAgIGlmIChzaG91bGRSZXBvcnRVc2VkQXR0YWNobWVudHMpIHtcbiAgICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubm90aWNlcy5hdHRhY2htZW50SXNTdGlsbFVzZWQsIHsgYXR0YWNobWVudFBhdGg6IGZpbGUucGF0aCB9KSk7XG4gICAgICB9XG4gICAgICBjYW5EZWxldGUgPSBmYWxzZTtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRBYnN0cmFjdEZpbGUgaXMgYWx3YXlzIFRGaWxlIG9yIFRGb2xkZXIgaW4gT2JzaWRpYW47IGRlZmVuc2l2ZSBmYWxsYmFjay4gKi9cbiAgfSBlbHNlIGlmIChpc0ZvbGRlcihmaWxlKSkge1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgY29uc3QgbGlzdGVkRmlsZXMgPSBhd2FpdCBsaXN0U2FmZShhcHAsIGZpbGUpO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgWy4uLmxpc3RlZEZpbGVzLmZpbGVzLCAuLi5saXN0ZWRGaWxlcy5mb2xkZXJzXSkge1xuICAgICAgY2FuRGVsZXRlICYmPSBhd2FpdCBkZWxldGVJZk5vdFVzZWQoYXBwLCBjaGlsZCwgZGVsZXRlZE5vdGVQYXRoLCBzaG91bGRSZXBvcnRVc2VkQXR0YWNobWVudHMpO1xuICAgIH1cblxuICAgIGNhbkRlbGV0ZSAmJj0gYXdhaXQgaXNFbXB0eUZvbGRlcihhcHAsIGZpbGUpO1xuICB9XG5cbiAgaWYgKGNhbkRlbGV0ZSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0cmFzaFNhZmUoYXBwLCBmaWxlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcmludEVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSAke2ZpbGUucGF0aH1gLCB7IGNhdXNlOiBlIH0pKTtcbiAgICAgIGNhbkRlbGV0ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYW5EZWxldGU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLFNBQVMsY0FBYztBQUl2QixTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFNBQVM7QUFDbEIsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBWVAsZUFBc0IsZ0JBQ3BCLEtBQ0EsWUFDQSxpQkFDQSw2QkFDQSwwQkFDa0I7QUFDbEIsUUFBTSxPQUFPLHNCQUFzQixLQUFLLFVBQVU7QUFFbEQsTUFBSSxDQUFDLE1BQU07QUFDVCxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksWUFBWSxPQUFPLElBQUksTUFBTSw0QkFBNEI7QUFHN0QsTUFBSSxPQUFPLElBQUksR0FBRztBQUVoQixVQUFNLFlBQVksTUFBTSx3QkFBd0IsS0FBSyxJQUFJO0FBQ3pELFFBQUksaUJBQWlCO0FBQ25CLGdCQUFVLE1BQU0sZUFBZTtBQUFBLElBQ2pDO0FBQ0EsUUFBSSxVQUFVLE1BQU0sTUFBTSxHQUFHO0FBQzNCLFVBQUksNkJBQTZCO0FBQy9CLFlBQUksT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQixRQUFRLHVCQUF1QixFQUFFLGdCQUFnQixLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFDdEc7QUFDQSxrQkFBWTtBQUFBLElBQ2Q7QUFBQSxFQUVGLFdBQVcsU0FBUyxJQUFJLEdBQUc7QUFFekIsVUFBTSxjQUFjLE1BQU0sU0FBUyxLQUFLLElBQUk7QUFDNUMsZUFBVyxTQUFTLENBQUMsR0FBRyxZQUFZLE9BQU8sR0FBRyxZQUFZLE9BQU8sR0FBRztBQUNsRSxvQkFBYyxNQUFNLGdCQUFnQixLQUFLLE9BQU8saUJBQWlCLDJCQUEyQjtBQUFBLElBQzlGO0FBRUEsa0JBQWMsTUFBTSxjQUFjLEtBQUssSUFBSTtBQUFBLEVBQzdDO0FBRUEsTUFBSSxXQUFXO0FBQ2IsUUFBSTtBQUNGLFlBQU0sVUFBVSxLQUFLLElBQUk7QUFBQSxJQUMzQixTQUFTLEdBQUc7QUFDVixpQkFBVyxJQUFJLE1BQU0sb0JBQW9CLEtBQUssSUFBSSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNuRSxrQkFBWTtBQUFBLElBQ2Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
|