@mnaoumov/obsidian-lib 7.1.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/__merged.cjs +5 -5
- package/dist/lib/cjs/active-file-provider.cjs +6 -6
- package/dist/lib/cjs/active-file-provider.d.cts +1 -1
- package/dist/lib/cjs/app.cjs +5 -5
- package/dist/lib/cjs/async-with-notice.cjs +5 -5
- package/dist/lib/cjs/attachment-path.cjs +6 -6
- package/dist/lib/cjs/attachment-unit-folder.cjs +5 -5
- package/dist/lib/cjs/backlink-index.cjs +13 -19
- package/dist/lib/cjs/backlink-index.d.cts +1 -1
- package/dist/lib/cjs/backlink.cjs +5 -5
- package/dist/lib/cjs/bases-view-registrar.cjs +6 -6
- package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
- package/dist/lib/cjs/callout.cjs +5 -5
- package/dist/lib/cjs/canvas.cjs +5 -5
- package/dist/lib/cjs/case-insensitive-file-index.cjs +5 -5
- package/dist/lib/cjs/code-block-markdown-information.cjs +6 -6
- package/dist/lib/cjs/code-block-markdown-information.d.cts +9 -9
- package/dist/lib/cjs/code-block-reg-exp.cjs +5 -5
- package/dist/lib/cjs/codemirror/index.cjs +5 -5
- package/dist/lib/cjs/codemirror/state-field-spec.cjs +6 -6
- package/dist/lib/cjs/codemirror/state-field-spec.d.cts +6 -6
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/command-handler-component.cjs +5 -5
- package/dist/lib/cjs/command-handlers/command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/global-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/index.cjs +5 -5
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-registrar.cjs +6 -6
- package/dist/lib/cjs/command-registrar.d.cts +2 -2
- package/dist/lib/cjs/community-plugins.cjs +6 -6
- package/dist/lib/cjs/components/abort-signal-component.cjs +5 -5
- package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
- package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
- package/dist/lib/cjs/components/async-events-component.cjs +5 -5
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +5 -5
- package/dist/lib/cjs/components/component-ex.cjs +5 -5
- package/dist/lib/cjs/components/console-debug-component.cjs +5 -5
- package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +5 -5
- package/dist/lib/cjs/components/disposable-component.cjs +5 -5
- package/dist/lib/cjs/components/embed-extensions-component.cjs +5 -5
- package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +13 -16
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +5 -5
- package/dist/lib/cjs/components/incremental-file-index-component.cjs +5 -5
- package/dist/lib/cjs/components/index.cjs +5 -5
- package/dist/lib/cjs/components/layout-ready-component.cjs +5 -5
- package/dist/lib/cjs/components/menu-event-registrar-component.cjs +5 -5
- package/dist/lib/cjs/components/monkey-around-component.cjs +5 -5
- package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-gate-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-notice-component.cjs +6 -6
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -3
- package/dist/lib/cjs/components/plugin-settings-component.cjs +6 -6
- package/dist/lib/cjs/components/plugin-settings-component.d.cts +5 -5
- package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +5 -5
- package/dist/lib/cjs/components/pointer-position-component.cjs +5 -5
- package/dist/lib/cjs/components/registry-component.cjs +5 -5
- package/dist/lib/cjs/components/release-notes-component.cjs +5 -5
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +6 -6
- package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +10 -10
- package/dist/lib/cjs/components/rmdir-guard-component.cjs +5 -5
- package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
- package/dist/lib/cjs/components/syntax-highlighting-component.cjs +5 -5
- package/dist/lib/cjs/components/templates-language-component.cjs +5 -5
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
- package/dist/lib/cjs/constructors/index.cjs +5 -5
- package/dist/lib/cjs/css-class.cjs +5 -5
- package/dist/lib/cjs/data-handler.cjs +6 -6
- package/dist/lib/cjs/data-handler.d.cts +2 -2
- package/dist/lib/cjs/data-stores/data-store-replica.cjs +5 -5
- package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
- package/dist/lib/cjs/data-stores/data-store-transport.cjs +5 -5
- package/dist/lib/cjs/data-stores/index.cjs +5 -5
- package/dist/lib/cjs/data-stores/local-data-store.cjs +5 -5
- package/dist/lib/cjs/data-stores/shared-data-store.cjs +6 -6
- package/dist/lib/cjs/dataview-link.cjs +5 -5
- package/dist/lib/cjs/dataview.cjs +12 -12
- package/dist/lib/cjs/dataview.d.cts +6 -6
- package/dist/lib/cjs/debug.cjs +5 -5
- package/dist/lib/cjs/demo-vault-helper-settings.cjs +5 -5
- package/dist/lib/cjs/demo-vault-helper.cjs +5 -5
- package/dist/lib/cjs/demo-vault-naming.cjs +5 -5
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +5 -5
- package/dist/lib/cjs/desktop-trusted-input.cjs +6 -6
- package/dist/lib/cjs/desktop-trusted-input.d.cts +1 -1
- package/dist/lib/cjs/editor-extension-registrar.cjs +6 -6
- package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
- package/dist/lib/cjs/editor-suggest-registrar.cjs +6 -6
- package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
- package/dist/lib/cjs/editor.cjs +5 -5
- package/dist/lib/cjs/events.cjs +5 -5
- package/dist/lib/cjs/extensions-registrar.cjs +6 -6
- package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
- package/dist/lib/cjs/file-change.cjs +6 -6
- package/dist/lib/cjs/file-change.d.cts +3 -3
- package/dist/lib/cjs/file-explorer.cjs +5 -5
- package/dist/lib/cjs/file-manager.cjs +5 -5
- package/dist/lib/cjs/file-system.cjs +5 -5
- package/dist/lib/cjs/folder-note.cjs +6 -6
- package/dist/lib/cjs/folder-note.d.cts +1 -1
- package/dist/lib/cjs/frontmatter-formatting.cjs +5 -5
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +6 -6
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +2 -2
- package/dist/lib/cjs/frontmatter.cjs +6 -6
- package/dist/lib/cjs/frontmatter.d.cts +7 -7
- package/dist/lib/cjs/generated-during-build.cjs +7 -7
- package/dist/lib/cjs/hover-link-source-registrar.cjs +6 -6
- package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
- package/dist/lib/cjs/html-element.cjs +5 -5
- package/dist/lib/cjs/i18n/custom-type-options.cjs +6 -6
- package/dist/lib/cjs/i18n/custom-type-options.d.cts +4 -4
- package/dist/lib/cjs/i18n/default-translations.cjs +5 -5
- package/dist/lib/cjs/i18n/i18n.cjs +5 -5
- package/dist/lib/cjs/i18n/index.cjs +5 -5
- package/dist/lib/cjs/i18n/locales/en.cjs +5 -5
- package/dist/lib/cjs/i18n/locales/index.cjs +5 -5
- package/dist/lib/cjs/i18n/locales/translations-map.cjs +5 -5
- package/dist/lib/cjs/index.cjs +5 -5
- package/dist/lib/cjs/is-in-obsidian.cjs +5 -5
- package/dist/lib/cjs/library-styles.cjs +5 -5
- package/dist/lib/cjs/library.cjs +5 -5
- package/dist/lib/cjs/link-name.cjs +5 -5
- package/dist/lib/cjs/link-update-progress.cjs +5 -5
- package/dist/lib/cjs/link.cjs +7 -7
- package/dist/lib/cjs/link.d.cts +2 -2
- package/dist/lib/cjs/logger.cjs +5 -5
- package/dist/lib/cjs/loop.cjs +5 -5
- package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +6 -6
- package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +1 -1
- package/dist/lib/cjs/markdown-code-block-processor.cjs +5 -5
- package/dist/lib/cjs/markdown-post-processor-registrar.cjs +6 -6
- package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +1 -1
- package/dist/lib/cjs/markdown-view.cjs +5 -5
- package/dist/lib/cjs/markdown.cjs +5 -5
- package/dist/lib/cjs/menu-event-registrar.cjs +6 -6
- package/dist/lib/cjs/menu-event-registrar.d.cts +4 -4
- package/dist/lib/cjs/metadata-cache.cjs +6 -6
- package/dist/lib/cjs/mobile-trusted-input.cjs +6 -6
- package/dist/lib/cjs/modals/alert.cjs +5 -5
- package/dist/lib/cjs/modals/confirm.cjs +5 -5
- package/dist/lib/cjs/modals/index.cjs +5 -5
- package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
- package/dist/lib/cjs/modals/modal-command-builder.cjs +6 -6
- package/dist/lib/cjs/modals/modal-command-builder.d.cts +12 -12
- package/dist/lib/cjs/modals/modal.cjs +5 -5
- package/dist/lib/cjs/modals/prompt.cjs +14 -14
- package/dist/lib/cjs/modals/select-item.cjs +5 -5
- package/dist/lib/cjs/modals/select-option.cjs +5 -5
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +5 -5
- package/dist/lib/cjs/note-priority.cjs +5 -5
- package/dist/lib/cjs/notebook-navigator.cjs +6 -6
- package/dist/lib/cjs/notebook-navigator.d.cts +3 -3
- package/dist/lib/cjs/obsidian-lib-state.cjs +6 -6
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +6 -6
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian-settings.cjs +5 -5
- package/dist/lib/cjs/obsidian-word-characters.cjs +6 -6
- package/dist/lib/cjs/parse-link.cjs +6 -6
- package/dist/lib/cjs/parse-link.d.cts +2 -2
- package/dist/lib/cjs/path-settings.cjs +6 -6
- package/dist/lib/cjs/pdf.cjs +5 -5
- package/dist/lib/cjs/plugin/index.cjs +5 -5
- package/dist/lib/cjs/plugin/plugin-api.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-api.d.cts +2 -2
- package/dist/lib/cjs/plugin/plugin-context.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-event-source.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +5 -5
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +5 -5
- package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +3 -3
- package/dist/lib/cjs/plugin/plugin.cjs +6 -6
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +6 -6
- package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
- package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +6 -6
- package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
- package/dist/lib/cjs/popovers/field-popover.cjs +5 -5
- package/dist/lib/cjs/popovers/index.cjs +5 -5
- package/dist/lib/cjs/popovers/popover-anchor.cjs +5 -5
- package/dist/lib/cjs/popovers/popover.cjs +5 -5
- package/dist/lib/cjs/property-entry.cjs +5 -5
- package/dist/lib/cjs/queue.cjs +6 -6
- package/dist/lib/cjs/react/app-context.cjs +5 -5
- package/dist/lib/cjs/react/index.cjs +5 -5
- package/dist/lib/cjs/reference.cjs +6 -6
- package/dist/lib/cjs/reference.d.cts +6 -6
- package/dist/lib/cjs/resource-lock.cjs +6 -6
- package/dist/lib/cjs/resource-url.cjs +5 -5
- package/dist/lib/cjs/ribbon-icon-registrar.cjs +6 -6
- package/dist/lib/cjs/ribbon-icon-registrar.d.cts +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/date-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/date-time-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/email-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/file-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/index.cjs +5 -5
- package/dist/lib/cjs/setting-components/month-component.cjs +6 -6
- package/dist/lib/cjs/setting-components/month-component.d.cts +2 -2
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/number-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/password-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +5 -5
- package/dist/lib/cjs/setting-components/telephone-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/text-based-component.cjs +6 -6
- package/dist/lib/cjs/setting-components/text-based-component.d.cts +3 -3
- package/dist/lib/cjs/setting-components/time-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-text-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/url-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/validator-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +6 -6
- package/dist/lib/cjs/setting-components/week-component.cjs +6 -6
- package/dist/lib/cjs/setting-components/week-component.d.cts +2 -2
- package/dist/lib/cjs/setting-ex.cjs +5 -5
- package/dist/lib/cjs/setting-group-ex.cjs +5 -5
- package/dist/lib/cjs/status-bar-item-registrar.cjs +6 -6
- package/dist/lib/cjs/status-bar-item-registrar.d.cts +1 -1
- package/dist/lib/cjs/templater.cjs +6 -6
- package/dist/lib/cjs/templater.d.cts +9 -9
- package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -5
- package/dist/lib/cjs/transformers/index.cjs +5 -5
- package/dist/lib/cjs/trusted-input.cjs +5 -5
- package/dist/lib/cjs/validation.cjs +6 -6
- package/dist/lib/cjs/validation.d.cts +1 -1
- package/dist/lib/cjs/vault-delete.cjs +5 -5
- package/dist/lib/cjs/vault-transaction.cjs +6 -6
- package/dist/lib/cjs/vault.cjs +5 -5
- package/dist/lib/cjs/view-registrar.cjs +6 -6
- package/dist/lib/cjs/view-registrar.d.cts +1 -1
- package/dist/lib/cjs/workspace.cjs +5 -5
- package/dist/lib/esm/active-file-provider.d.mts +1 -1
- package/dist/lib/esm/active-file-provider.mjs +1 -1
- package/dist/lib/esm/attachment-path.mjs +1 -1
- package/dist/lib/esm/backlink-index.d.mts +1 -1
- package/dist/lib/esm/backlink-index.mjs +8 -14
- package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
- package/dist/lib/esm/bases-view-registrar.mjs +1 -1
- package/dist/lib/esm/code-block-markdown-information.d.mts +9 -9
- package/dist/lib/esm/codemirror/state-field-spec.d.mts +6 -6
- package/dist/lib/esm/command-registrar.d.mts +2 -2
- package/dist/lib/esm/command-registrar.mjs +1 -1
- package/dist/lib/esm/community-plugins.mjs +1 -1
- package/dist/lib/esm/components/file-explorer-root-menu-component.mjs +8 -11
- package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -3
- package/dist/lib/esm/components/plugin-notice-component.mjs +1 -1
- package/dist/lib/esm/components/plugin-settings-component.d.mts +5 -5
- package/dist/lib/esm/components/plugin-settings-component.mjs +1 -1
- package/dist/lib/esm/components/rename-delete-handler-component.d.mts +10 -10
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +1 -1
- package/dist/lib/esm/data-handler.d.mts +2 -2
- package/dist/lib/esm/data-handler.mjs +1 -1
- package/dist/lib/esm/data-stores/data-store-seeds.mjs +1 -1
- package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
- package/dist/lib/esm/dataview.d.mts +6 -6
- package/dist/lib/esm/dataview.mjs +7 -7
- package/dist/lib/esm/desktop-trusted-input.d.mts +1 -1
- package/dist/lib/esm/desktop-trusted-input.mjs +1 -1
- package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
- package/dist/lib/esm/editor-extension-registrar.mjs +1 -1
- package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
- package/dist/lib/esm/editor-suggest-registrar.mjs +1 -1
- package/dist/lib/esm/extensions-registrar.d.mts +1 -1
- package/dist/lib/esm/extensions-registrar.mjs +1 -1
- package/dist/lib/esm/file-change.d.mts +3 -3
- package/dist/lib/esm/file-change.mjs +1 -1
- package/dist/lib/esm/folder-note.d.mts +1 -1
- package/dist/lib/esm/folder-note.mjs +1 -1
- package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +2 -2
- package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +1 -1
- package/dist/lib/esm/frontmatter.d.mts +7 -7
- package/dist/lib/esm/frontmatter.mjs +1 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
- package/dist/lib/esm/hover-link-source-registrar.mjs +1 -1
- package/dist/lib/esm/i18n/custom-type-options.d.mts +4 -4
- package/dist/lib/esm/i18n/custom-type-options.mjs +1 -1
- package/dist/lib/esm/link.d.mts +2 -2
- package/dist/lib/esm/link.mjs +2 -2
- package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +1 -1
- package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +1 -1
- package/dist/lib/esm/markdown-post-processor-registrar.d.mts +1 -1
- package/dist/lib/esm/markdown-post-processor-registrar.mjs +1 -1
- package/dist/lib/esm/menu-event-registrar.d.mts +4 -4
- package/dist/lib/esm/metadata-cache.mjs +1 -1
- package/dist/lib/esm/mobile-trusted-input.mjs +1 -1
- package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
- package/dist/lib/esm/modals/modal-command-builder.d.mts +12 -12
- package/dist/lib/esm/modals/modal-command-builder.mjs +1 -1
- package/dist/lib/esm/modals/prompt.mjs +9 -9
- package/dist/lib/esm/notebook-navigator.d.mts +3 -3
- package/dist/lib/esm/notebook-navigator.mjs +1 -1
- package/dist/lib/esm/obsidian-lib-state.mjs +1 -1
- package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian-word-characters.mjs +1 -1
- package/dist/lib/esm/parse-link.d.mts +2 -2
- package/dist/lib/esm/parse-link.mjs +1 -1
- package/dist/lib/esm/path-settings.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-api.d.mts +2 -2
- package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-context.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +3 -3
- package/dist/lib/esm/plugin/plugin-settings-tab.mjs +1 -1
- package/dist/lib/esm/plugin/plugin.mjs +1 -1
- package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
- package/dist/lib/esm/plugin/settings-migration-api.mjs +1 -1
- package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
- package/dist/lib/esm/plugin-cli-handler-registrar.mjs +1 -1
- package/dist/lib/esm/queue.mjs +1 -1
- package/dist/lib/esm/reference.d.mts +6 -6
- package/dist/lib/esm/reference.mjs +1 -1
- package/dist/lib/esm/resource-lock.mjs +1 -1
- package/dist/lib/esm/ribbon-icon-registrar.d.mts +1 -1
- package/dist/lib/esm/ribbon-icon-registrar.mjs +1 -1
- package/dist/lib/esm/setting-components/month-component.d.mts +2 -2
- package/dist/lib/esm/setting-components/month-component.mjs +1 -1
- package/dist/lib/esm/setting-components/text-based-component.d.mts +3 -3
- package/dist/lib/esm/setting-components/text-based-component.mjs +1 -1
- package/dist/lib/esm/setting-components/week-component.d.mts +2 -2
- package/dist/lib/esm/setting-components/week-component.mjs +1 -1
- package/dist/lib/esm/status-bar-item-registrar.d.mts +1 -1
- package/dist/lib/esm/status-bar-item-registrar.mjs +1 -1
- package/dist/lib/esm/templater.d.mts +9 -9
- package/dist/lib/esm/templater.mjs +1 -1
- package/dist/lib/esm/validation.d.mts +1 -1
- package/dist/lib/esm/validation.mjs +1 -1
- package/dist/lib/esm/vault-transaction.mjs +1 -1
- package/dist/lib/esm/view-registrar.d.mts +1 -1
- package/dist/lib/esm/view-registrar.mjs +1 -1
- package/dist/styles.css +2 -2
- package/package.json +6 -3
|
@@ -542,4 +542,4 @@ class PluginSettingsComponentBase extends ComponentEx {
|
|
|
542
542
|
export {
|
|
543
543
|
PluginSettingsComponentBase
|
|
544
544
|
};
|
|
545
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IG1hbmFnZXMgcGx1Z2luIHNldHRpbmdzOiBkYXRhLCBwZXJzaXN0ZW5jZSwgdmFsaWRhdGlvbiwgYW5kIGV2ZW50cy5cbiAqXG4gKiBUaGlzIGlzIHRoZSBzaW5nbGUgcHVibGljLWZhY2luZyBzZXR0aW5ncyBBUEkgZm9yIHBsdWdpbiBhdXRob3JzLlxuICogQWxsIHNldHRpbmdzIGxvZ2ljIChsb2FkLCBzYXZlLCB2YWxpZGF0ZSwgdHJhbnNmb3JtLCBjbG9uZSkgaXMgaGFuZGxlZCBkaXJlY3RseVxuICogYnkgdGhpcyBjb21wb25lbnQg4oCUIG5vIHNlcGFyYXRlIG1hbmFnZXIgY2xhc3MgaXMgbmVlZGVkLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXN5bmNFdmVudFJlZixcbiAgQXN5bmNFdmVudFNvdXJjZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMtZXZlbnRzJztcbmltcG9ydCB0eXBlIHsgVHJhbnNmb3JtZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHJhbnNmb3JtZXJzL3RyYW5zZm9ybWVyJztcbmltcG9ydCB0eXBlIHtcbiAgTWF5YmVSZXR1cm4sXG4gIFN0cmluZ0tleXNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUnO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmljT2JqZWN0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29uc3RydWN0b3IsXG4gIFByb21pc2FibGUsXG4gIFJlYWRvbmx5RGVlcFxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBBc3luY0V2ZW50cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYy1ldmVudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQge1xuICBjYXN0VG8sXG4gIGdldEFsbEtleXMsXG4gIGlzRGVlcEVxdWFsXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgRGF0ZVRyYW5zZm9ybWVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3RyYW5zZm9ybWVycy9kYXRlLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IEdyb3VwVHJhbnNmb3JtZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHJhbnNmb3JtZXJzL2dyb3VwLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IE1hcFRyYW5zZm9ybWVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3RyYW5zZm9ybWVycy9tYXAtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgU2V0VHJhbnNmb3JtZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHJhbnNmb3JtZXJzL3NldC10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBTa2lwUHJpdmF0ZVByb3BlcnR5VHJhbnNmb3JtZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHJhbnNmb3JtZXJzL3NraXAtcHJpdmF0ZS1wcm9wZXJ0eS10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBUd29XYXlNYXBUcmFuc2Zvcm1lciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90cmFuc2Zvcm1lcnMvdHdvLXdheS1tYXAtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgVmFsdWVXcmFwcGVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3ZhbHVlLXdyYXBwZXInO1xuXG5pbXBvcnQgdHlwZSB7IERhdGFIYW5kbGVyIH0gZnJvbSAnLi4vZGF0YS1oYW5kbGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luRXZlbnRTb3VyY2UgfSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWV2ZW50LXNvdXJjZS50cyc7XG5cbmltcG9ydCB7IGdldE9ic2lkaWFuTGliRGVidWdnZXIgfSBmcm9tICcuLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBEdXJhdGlvblRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL2R1cmF0aW9uLXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4vYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuY29uc3QgZGVmYXVsdFRyYW5zZm9ybWVyID0gbmV3IEdyb3VwVHJhbnNmb3JtZXIoW1xuICBuZXcgU2tpcFByaXZhdGVQcm9wZXJ0eVRyYW5zZm9ybWVyKCksXG4gIG5ldyBEYXRlVHJhbnNmb3JtZXIoKSxcbiAgbmV3IER1cmF0aW9uVHJhbnNmb3JtZXIoKSxcbiAgbmV3IE1hcFRyYW5zZm9ybWVyKCksXG4gIG5ldyBTZXRUcmFuc2Zvcm1lcigpLFxuICBuZXcgVHdvV2F5TWFwVHJhbnNmb3JtZXIoKVxuXSk7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlQ29uc3RydWN0b3JQYXJhbXM8UGx1Z2luU2V0dGluZ3M+IHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhIGhhbmRsZXIgZm9yIHRoZSBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBkYXRhSGFuZGxlcjogRGF0YUhhbmRsZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZXZlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luRXZlbnRTb3VyY2U6IFBsdWdpbkV2ZW50U291cmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIHNldHRpbmdzIGNsYXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDbGFzczogQ29uc3RydWN0b3I8UGx1Z2luU2V0dGluZ3MsIFtdPjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLm9uU2F2ZVNldHRpbmdzfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHNhdmUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgc2V0dGluZ3Mgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSBuZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogVGhlIG9sZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIEEgc25hcHNob3Qgb2YgcGx1Z2luIHNldHRpbmdzIHN0YXRlLCBpbmNsdWRpbmcgcmF3IGlucHV0IHZhbHVlcywgZWZmZWN0aXZlICh2YWxpZGF0ZWQpIHZhbHVlcyxcbiAqIGFuZCBwZXItcHJvcGVydHkgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBUaGUgZWZmZWN0aXZlIHNldHRpbmdzIHZhbHVlcyB1c2VkIGJ5IHRoZSBwbHVnaW4uIEludmFsaWQgcHJvcGVydGllcyBhcmUgcmVwbGFjZWQgd2l0aCBkZWZhdWx0cy5cbiAgICovXG4gIGVmZmVjdGl2ZVZhbHVlczogUGx1Z2luU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSByYXcgaW5wdXQgdmFsdWVzIGFzIGVudGVyZWQgYnkgdGhlIHVzZXIuIE1heSBjb250YWluIGludmFsaWQgdmFsdWVzLlxuICAgKi9cbiAgaW5wdXRWYWx1ZXM6IFBsdWdpblNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBQZXItcHJvcGVydHkgdmFsaWRhdGlvbiBtZXNzYWdlcy4gRW1wdHkgc3RyaW5nIG1lYW5zIHZhbGlkLlxuICAgKi9cbiAgdmFsaWRhdGlvbk1lc3NhZ2VzOiBSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz47XG59XG5cbi8qKlxuICogUmVhZG9ubHkgdmVyc2lvbiBvZiB7QGxpbmsgUGx1Z2luU2V0dGluZ3N9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVBsdWdpblNldHRpbmdzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG5cbi8qKlxuICogUmVhZG9ubHkgdmVyc2lvbiBvZiB7QGxpbmsgUGx1Z2luU2V0dGluZ3NTdGF0ZX0gZm9yIHVzZSBpbiBldmVudCBjYWxsYmFja3MgYW5kIHB1YmxpYyBnZXR0ZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+ID0gUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+PjtcblxuLyoqXG4gKiBBIHZhbGlkYXRvciBmdW5jdGlvbiBmb3IgYSBzZXR0aW5ncyBwcm9wZXJ0eS5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgcHJvcGVydHkgbmFtZS5cbiAqL1xuZXhwb3J0IHR5cGUgU2V0dGluZ3NWYWxpZGF0b3I8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+ID0gU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+ID0gKFxuICB2YWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSxcbiAgc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzXG4pID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj47XG5cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VFdmVudE1hcDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICBsb2FkU2V0dGluZ3M6IFtcbiAgICBsb2FkZWRTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICBpc0luaXRpYWxMb2FkOiBib29sZWFuXG4gIF07XG4gIHNhdmVTZXR0aW5nczogW1xuICAgIG5ld1N0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgIG9sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgIGNvbnRleHQ6IHVua25vd25cbiAgXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLnNldFByb3BlcnR5SW1wbH0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VTZXRQcm9wZXJ0eUltcGxQYXJhbXM8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+O1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlLiBFbXB0eSBvciB1bnNldCBtZWFucyB2YWxpZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRpb25NZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdG8gc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzPjtcbn1cblxudHlwZSBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+O1xuXG50eXBlIFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+XTtcblxudHlwZSBWYWxpZGF0aW9uUmVzdWx0PFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFBhcnRpYWw8UmVjb3JkPFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+PjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBwbHVnaW4gc2V0dGluZ3MgY29tcG9uZW50cy5cbiAqXG4gKiBNYW5hZ2VzIHNldHRpbmdzIGRhdGEsIHBlcnNpc3RlbmNlLCB2YWxpZGF0aW9uLCBhbmQgZXZlbnRzLlxuICogUGx1Z2luIGF1dGhvcnMgZXh0ZW5kIHRoaXMgY2xhc3MgYW5kIHBhc3MgdGhlaXIgc2V0dGluZ3MgY2xhc3MgYXNcbiAqIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VDb25zdHJ1Y3RvclBhcmFtcy5wbHVnaW5TZXR0aW5nc0NsYXNzfSwgd2hvc2UgZGVmYXVsdC1jb25zdHJ1Y3RlZCBpbnN0YW5jZSBzdXBwbGllcyB0aGUgZGVmYXVsdHMuXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi10b29sa2l0L3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeCAtLSBOb24tYWJzdHJhY3QgYmFzZSBjbGFzczsgY29uc3VtZXJzIGV4dGVuZCBpdC5cbmV4cG9ydCBjbGFzcyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgQ29tcG9uZW50RXggaW1wbGVtZW50cyBBc3luY0V2ZW50U291cmNlPFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZUV2ZW50TWFwPFBsdWdpblNldHRpbmdzPj4ge1xuICAvKipcbiAgICogR2V0cyB0aGUgcmVhZG9ubHkgZGVmYXVsdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlZmF1bHQgc2V0dGluZ3MgKGFzIGEgcmVhZG9ubHkgb2JqZWN0KS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0U2V0dGluZ3M6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlYWRvbmx5IGVmZmVjdGl2ZSBzZXR0aW5ncyAodmFsaWRhdGVkLCB3aXRoIGRlZmF1bHRzIHN1YnN0aXR1dGVkIGZvciBpbnZhbGlkIHZhbHVlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZWFkb25seSBlZmZlY3RpdmUgc2V0dGluZ3MuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzU3RhdGUuZWZmZWN0aXZlVmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2V0dGluZ3Mgc3RhdGUgc25hcHNob3QuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNldHRpbmdzIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXR0aW5nc1N0YXRlKCk6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZSBhcyBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIGhhbmRsZXIgdXNlZCB0byBsb2FkIGFuZCBzYXZlIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YUhhbmRsZXI6IERhdGFIYW5kbGVyO1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBldmVudCBzb3VyY2UgdGhlIGNvbXBvbmVudCBsaXN0ZW5zIHRvIGZvciBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbkV2ZW50U291cmNlOiBQbHVnaW5FdmVudFNvdXJjZTtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBzZXR0aW5ncyBjbGFzcyB1c2VkIHRvIGNvbnN0cnVjdCBzZXR0aW5ncyBpbnN0YW5jZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDbGFzczogQ29uc3RydWN0b3I8UGx1Z2luU2V0dGluZ3MsIFtdPjtcbiAgcHJpdmF0ZSByZWFkb25seSBhc3luY0V2ZW50cyA9IG5ldyBBc3luY0V2ZW50czxQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VFdmVudE1hcDxQbHVnaW5TZXR0aW5ncz4+KCk7XG4gIHByaXZhdGUgY3VycmVudFN0YXRlOiBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICBwcml2YXRlIGlzTG9hZGVkRnJvbUZpbGUgPSBmYWxzZTtcblxuICBwcml2YXRlIGxhc3RTYXZlZFN0YXRlOiBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxlZ2FjeVNldHRpbmdzQ29udmVydGVyczogKChyZWNvcmQ6IEdlbmVyaWNPYmplY3QpID0+IHZvaWQpW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkZWRGcm9tRmlsZVJlc29sdmVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0eU5hbWVzOiBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPltdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9ycyA9IG5ldyBNYXA8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzPj4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gc2V0dGluZ3MgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZGF0YUhhbmRsZXIgPSBwYXJhbXMuZGF0YUhhbmRsZXI7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NsYXNzID0gcGFyYW1zLnBsdWdpblNldHRpbmdzQ2xhc3M7XG4gICAgdGhpcy5wbHVnaW5FdmVudFNvdXJjZSA9IHBhcmFtcy5wbHVnaW5FdmVudFNvdXJjZTtcblxuICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0gbmV3IHRoaXMucGx1Z2luU2V0dGluZ3NDbGFzcygpIGFzIFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG4gICAgdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMucHJvcGVydHlOYW1lcyA9IGdldEFsbEtleXModGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgIHRoaXMucmVnaXN0ZXJWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy5yZWdpc3RlckxlZ2FjeVNldHRpbmdzQ29udmVydGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgYW5kIHNhdmVzIHRoZW0uXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5nc0VkaXRvciAtIFRoZSBlZGl0b3IuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVkaXRBbmRTYXZlKHNldHRpbmdzRWRpdG9yOiAoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCBjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgYXdhaXQgdGhpcy5lZGl0KHNldHRpbmdzRWRpdG9yKTtcbiAgICBhd2FpdCB0aGlzLnNhdmVUb0ZpbGUoY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgc2V0dGluZ3MgYXJlIHNhZmUuXG4gICAqXG4gICAqIEl0IHJ1bnMgdmFsaWRhdGlvbiBmb3IgZWFjaCBwcm9wZXJ0eSBhbmQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGUgdmFsaWRhdGlvbiBmYWlscy5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmdzIC0gVGhlIHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSBzYWZlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVuc3VyZVNhZmUoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMudmFsaWRhdGUoc2V0dGluZ3MpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgdGhpcy5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1jb21wdXRlZC1wcm9wZXJ0eS1leGlzdGVuY2UtY2hlY2sgLS0gVGhpcyB0ZXN0cyB3aGV0aGVyIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIG5vbi1lbXB0eSwgbm90IHdoZXRoZXIgdGhlIGtleSBleGlzdHMuXG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdFtwcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgIHNldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgc2FmZSBjb3B5IG9mIHRoZSBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmdzIC0gVGhlIHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzYWZlIGNvcHkgb2YgdGhlIHNldHRpbmdzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNhZmVDb3B5KHNldHRpbmdzOiBQbHVnaW5TZXR0aW5ncyk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICBjb25zdCBzYWZlU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmNsb25lU2V0dGluZ3Moc2V0dGluZ3MpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU2FmZShzYWZlU2V0dGluZ3MpO1xuICAgIHJldHVybiBzYWZlU2V0dGluZ3M7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHBsdWdpbiBzZXR0aW5ncyBmcm9tIHRoZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gaXNJbml0aWFsTG9hZCAtIFdoZXRoZXIgdGhlIHNldHRpbmdzIGFyZSBiZWluZyBsb2FkZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZEZyb21GaWxlKGlzSW5pdGlhbExvYWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRhdGFIYW5kbGVyLmxvYWREYXRhKCk7XG4gICAgdGhpcy5sYXN0U2F2ZWRTdGF0ZSA9IHRoaXMuY3JlYXRlRGVmYXVsdFN0YXRlKCk7XG4gICAgdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBzZXR0aW5ncyBmcm9tIGRhdGEuanNvbi4gRXhwZWN0ZWQgT2JqZWN0LCBnb3Q6ICR7dHlwZW9mIGRhdGF9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTm90aGluZyBzdG9yZWQgaXMgcmVhZCBhcyBhbiBlbXB0eSByZWNvcmQgcmF0aGVyIHRoYW4gc2tpcHBlZCwgc28gdGhlIHNhdmUgYmVsb3cgd3JpdGVzIHRoZSBmdWxsXG4gICAgICAvLyBkZWZhdWx0IHJlY29yZC4gV2l0aG91dCBpdCBhIHVzZXIgd2hvIG5ldmVyIGNoYW5nZWQgYSBzZXR0aW5nIGhhcyBubyBgZGF0YS5qc29uYCBhdCBhbGwsIGxvb2tzXG4gICAgICAvLyBleGFjdGx5IGxpa2UgYSBmcmVzaCBpbnN0YWxsLCBhbmQgc2lsZW50bHkgcGlja3MgdXAgZXZlcnkgZGVmYXVsdCBhIGxhdGVyIHJlbGVhc2UgY2hhbmdlcy5cbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IChkYXRhID8/IHt9KSBhcyBHZW5lcmljT2JqZWN0O1xuICAgICAgY29uc3QgcGFyc2VkU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnJhd1JlY29yZFRvU2V0dGluZ3MocmF3UmVjb3JkKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnZhbGlkYXRlKHBhcnNlZFNldHRpbmdzKTtcblxuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgdGhpcy5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlJbXBsKHtcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2U6IHZhbGlkYXRpb25SZXN1bHRbcHJvcGVydHlOYW1lXSxcbiAgICAgICAgICB2YWx1ZTogcGFyc2VkU2V0dGluZ3NbcHJvcGVydHlOYW1lXVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sYXN0U2F2ZWRTdGF0ZSA9IGF3YWl0IHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZSk7XG5cbiAgICAgIC8vIEEgY29tcG9uZW50IHRoYXQga25vd3Mgbm8gcHJvcGVydHkgbmFtZXMgY2Fubm90IG5vcm1hbGl6ZSBhbnl0aGluZzogYHNldHRpbmdzVG9SYXdSZWNvcmQoKWAgY2FuXG4gICAgICAvLyBvbmx5IGV2ZXIgcmV0dXJuIGB7fWAsIHNvIHRoZSBzYXZlIGJlbG93IHdvdWxkIG5vdCByZXdyaXRlIGBkYXRhLmpzb25gIC0tIGl0IHdvdWxkIGVtcHR5IGl0LlxuICAgICAgLy8gYFBsdWdpbkJhc2VgIGFkZHMgYSBwbGFjZWhvbGRlciBgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD5gIGJlZm9yZSBgb25sb2FkSW1wbCgpYCBzd2Fwc1xuICAgICAgLy8gaW4gdGhlIHBsdWdpbidzIG93biBjb21wb25lbnQsIGFuZCB0aGF0IHBsYWNlaG9sZGVyIGlzIGV4YWN0bHkgdGhpcyBjYXNlOiBpdCByZWFkIGV2ZXJ5IHJlYWxcbiAgICAgIC8vIHNldHRpbmcsIGtlcHQgbm9uZSBvZiB0aGVtLCBhbmQgc2F2ZWQgdGhlIGRpZmZlcmVuY2UgYmFjayBvdmVyIHRoZSBmaWxlLlxuICAgICAgaWYgKHRoaXMucHJvcGVydHlOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdSZWNvcmQgPSBhd2FpdCB0aGlzLnNldHRpbmdzVG9SYXdSZWNvcmQodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuXG4gICAgICBpZiAoIWlzRGVlcEVxdWFsKG5ld1JlY29yZCwgZGF0YSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlVG9GaWxlSW1wbCgpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLm1hcmtMb2FkZWRGcm9tRmlsZSgpO1xuICAgICAgYXdhaXQgdGhpcy5hc3luY0V2ZW50cy50cmlnZ2VyQXN5bmMoJ2xvYWRTZXR0aW5ncycsIHRoaXMuY3VycmVudFN0YXRlIGFzIFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sIGlzSW5pdGlhbExvYWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAdHlwZVBhcmFtIEFyZ3VtZW50cyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBldmVudCBjYWxsYmFjayBhY2NlcHRzLlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIHJlbW92ZS5cbiAgICovXG4gIHB1YmxpYyBvZmY8XG4gICAgRXZlbnROYW1lIGV4dGVuZHMga2V5b2YgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlRXZlbnRNYXA8UGx1Z2luU2V0dGluZ3M+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuICAgIEFyZ3VtZW50cyBleHRlbmRzIEV2ZW50TmFtZSBleHRlbmRzIGtleW9mIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZUV2ZW50TWFwPFBsdWdpblNldHRpbmdzPiA/IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZUV2ZW50TWFwPFBsdWdpblNldHRpbmdzPltFdmVudE5hbWVdXG4gICAgICA6IHVua25vd25bXVxuICA+KG5hbWU6IEV2ZW50TmFtZSwgY2FsbGJhY2s6ICguLi4kYXJndW1lbnRzOiBBcmd1bWVudHMpID0+IFByb21pc2FibGU8dm9pZD4pOiB2b2lkIHtcbiAgICB0aGlzLmFzeW5jRXZlbnRzLm9mZihuYW1lLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyIGJ5IHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50UmVmIC0gVGhlIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgb2ZmcmVmKGV2ZW50UmVmOiBBc3luY0V2ZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy5hc3luY0V2ZW50cy5vZmZyZWYoZXZlbnRSZWYpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEB0eXBlUGFyYW0gQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGV2ZW50IGNhbGxiYWNrIGFjY2VwdHMuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB0aGlzQXJndW1lbnQgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgLlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGgge0BsaW5rIG9ic2lkaWFuI0V2ZW50cyNvbn0gKG9yIG9uY2UsIGNvcnJlc3BvbmRpbmdseSkuXG4gICAqL1xuICBwdWJsaWMgb248XG4gICAgRXZlbnROYW1lIGV4dGVuZHMga2V5b2YgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlRXZlbnRNYXA8UGx1Z2luU2V0dGluZ3M+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuICAgIEFyZ3VtZW50cyBleHRlbmRzIEV2ZW50TmFtZSBleHRlbmRzIGtleW9mIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZUV2ZW50TWFwPFBsdWdpblNldHRpbmdzPiA/IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZUV2ZW50TWFwPFBsdWdpblNldHRpbmdzPltFdmVudE5hbWVdXG4gICAgICA6IHVua25vd25bXVxuICA+KG5hbWU6IEV2ZW50TmFtZSwgY2FsbGJhY2s6ICguLi4kYXJndW1lbnRzOiBBcmd1bWVudHMpID0+IFByb21pc2FibGU8dm9pZD4sIHRoaXNBcmd1bWVudD86IHVua25vd24pOiBBc3luY0V2ZW50UmVmIHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0V2ZW50cy5vbihuYW1lLCBjYWxsYmFjaywgdGhpc0FyZ3VtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGFuIGV2ZW50LCBleGVjdXRpbmcgYWxsIHRoZSBsaXN0ZW5lcnMgaW4gb3JkZXIgZXZlbiBpZiBzb21lIG9mIHRoZW0gdGhyb3cgYW4gZXJyb3IuXG4gICAqXG4gICAqIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEB0eXBlUGFyYW0gQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGV2ZW50IGNhbGxiYWNrIGFjY2VwdHMuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB0aGlzQXJndW1lbnQgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgLlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGgge0BsaW5rIG9ic2lkaWFuI0V2ZW50cyNvbn0gKG9yIG9uY2UsIGNvcnJlc3BvbmRpbmdseSkuXG4gICAqL1xuICBwdWJsaWMgb25jZTxcbiAgICBFdmVudE5hbWUgZXh0ZW5kcyBrZXlvZiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VFdmVudE1hcDxQbHVnaW5TZXR0aW5ncz4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gICAgQXJndW1lbnRzIGV4dGVuZHMgRXZlbnROYW1lIGV4dGVuZHMga2V5b2YgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlRXZlbnRNYXA8UGx1Z2luU2V0dGluZ3M+ID8gUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlRXZlbnRNYXA8UGx1Z2luU2V0dGluZ3M+W0V2ZW50TmFtZV1cbiAgICAgIDogdW5rbm93bltdXG4gID4obmFtZTogRXZlbnROYW1lLCBjYWxsYmFjazogKC4uLiRhcmd1bWVudHM6IEFyZ3VtZW50cykgPT4gUHJvbWlzYWJsZTx2b2lkPiwgdGhpc0FyZ3VtZW50PzogdW5rbm93bik6IEFzeW5jRXZlbnRSZWYge1xuICAgIHJldHVybiB0aGlzLmFzeW5jRXZlbnRzLm9uY2UobmFtZSwgY2FsbGJhY2ssIHRoaXNBcmd1bWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGV4dGVybmFsIHNldHRpbmdzIGNoYW5nZS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgcmVsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgb25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkRnJvbUZpbGUoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHNldHRpbmdzIGZyb20gZmlsZSBhbmQgcmVnaXN0ZXJzIGV2ZW50IGhhbmRsZXJzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCB0aGlzLm9uKCdsb2FkU2V0dGluZ3MnLCB0aGlzLm9uTG9hZFNldHRpbmdzLmJpbmQodGhpcykpKTtcbiAgICByZWdpc3RlckFzeW5jRXZlbnQodGhpcywgdGhpcy5vbignc2F2ZVNldHRpbmdzJywgKG5ld1N0YXRlLCBvbGRTdGF0ZSwgY29udGV4dCkgPT4gdGhpcy5vblNhdmVTZXR0aW5ncyh7IGNvbnRleHQsIG5ld1N0YXRlLCBvbGRTdGF0ZSB9KSkpO1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCB0aGlzLnBsdWdpbkV2ZW50U291cmNlLm9uKCdleHRlcm5hbFNldHRpbmdzQ2hhbmdlJywgdGhpcy5vbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UuYmluZCh0aGlzKSkpO1xuICAgIGF3YWl0IHRoaXMubG9hZEZyb21GaWxlKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGxlZ2FjeSBzZXR0aW5ncyBjb252ZXJ0ZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gTGVnYWN5U2V0dGluZ3MgLSBUaGUgbGVnYWN5IHNldHRpbmdzIGNsYXNzLlxuICAgKiBAcGFyYW0gbGVnYWN5U2V0dGluZ3NDbGFzcyAtIFRoZSBsZWdhY3kgc2V0dGluZ3MgY2xhc3MuXG4gICAqIEBwYXJhbSBjb252ZXJ0ZXIgLSBUaGUgY29udmVydGVyLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyTGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXI8TGVnYWN5U2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIGxlZ2FjeVNldHRpbmdzQ2xhc3M6IG5ldyAoKSA9PiBMZWdhY3lTZXR0aW5ncyxcbiAgICBjb252ZXJ0ZXI6IChsZWdhY3lTZXR0aW5nczogUGFydGlhbDxMZWdhY3lTZXR0aW5ncz4gJiBQYXJ0aWFsPFBsdWdpblNldHRpbmdzPikgPT4gdm9pZFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB0aGlzV3JhcHBlciA9IFZhbHVlV3JhcHBlci5vZih0aGlzKTtcbiAgICB0aGlzLmxlZ2FjeVNldHRpbmdzQ29udmVydGVycy5wdXNoKGxlZ2FjeVNldHRpbmdzQ29udmVydGVyKTtcblxuICAgIGZ1bmN0aW9uIGxlZ2FjeVNldHRpbmdzQ29udmVydGVyKHJlY29yZDogR2VuZXJpY09iamVjdCk6IHZvaWQge1xuICAgICAgY29uc3QgbGVnYWN5U2V0dGluZ3NLZXlzID0gbmV3IFNldDxzdHJpbmc+KE9iamVjdC5rZXlzKG5ldyBsZWdhY3lTZXR0aW5nc0NsYXNzKCkpKTtcbiAgICAgIGNvbnN0IHBsdWdpblNldHRpbmdLZXlzID0gbmV3IFNldDxzdHJpbmc+KHRoaXNXcmFwcGVyLnZhbHVlLnByb3BlcnR5TmFtZXMpO1xuICAgICAgY29uc3QgbGVnYWN5U2V0dGluZ3MgPSByZWNvcmQgYXMgUGFydGlhbDxMZWdhY3lTZXR0aW5ncz4gJiBQYXJ0aWFsPFBsdWdpblNldHRpbmdzPjtcbiAgICAgIGNvbnZlcnRlcihsZWdhY3lTZXR0aW5ncyk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhsZWdhY3lTZXR0aW5ncykpIHtcbiAgICAgICAgaWYgKHBsdWdpblNldHRpbmdLZXlzLmhhcyhrZXkpIHx8ICFsZWdhY3lTZXR0aW5nc0tleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgICAgICAgZGVsZXRlIHJlY29yZFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB2YWxpZGF0b3IgZm9yIGEgcHJvcGVydHkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHNldHRpbmdzIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yIC0gVGhlIHZhbGlkYXRvci5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclZhbGlkYXRvcjxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgdmFsaWRhdG9yOiBTZXR0aW5nc1ZhbGlkYXRvcjxQbHVnaW5TZXR0aW5ncywgUHJvcGVydHlOYW1lPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRvcnMuc2V0KHByb3BlcnR5TmFtZSwgdmFsaWRhdG9yIGFzIFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzPik7XG4gIH1cblxuICAvKipcbiAgICogUmV2YWxpZGF0ZXMgdGhlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXZhbGlkYXRlKCk6IFByb21pc2U8UmVjb3JkPFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+PiB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcbiAgICBhd2FpdCB0aGlzLmVkaXQobm9vcCk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgbmV3IHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBvZiB0aGUgc2F2ZSB0byBmaWxlIG9wZXJhdGlvbi5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2F2ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVRvRmlsZShjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgaWYgKGlzRGVlcEVxdWFsKHRoaXMubGFzdFNhdmVkU3RhdGUuaW5wdXRWYWx1ZXMsIHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2F2ZVRvRmlsZUltcGwoKTtcbiAgICBhd2FpdCB0aGlzLmFzeW5jRXZlbnRzLnRyaWdnZXJBc3luYyhcbiAgICAgICdzYXZlU2V0dGluZ3MnLFxuICAgICAgdGhpcy5jdXJyZW50U3RhdGUgYXMgUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgYXMgUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSBhd2FpdCB0aGlzLmNsb25lU3RhdGUodGhpcy5jdXJyZW50U3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0UHJvcGVydHk8UHJvcGVydHlOYW1lIGV4dGVuZHMgUHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4+KFxuICAgIHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lLFxuICAgIHZhbHVlOiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcbiAgICBhd2FpdCB0aGlzLmVkaXQoKHNldHRpbmdzKSA9PiB7XG4gICAgICBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWRhdGlvbiByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGUoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PFBsdWdpblNldHRpbmdzPj4ge1xuICAgIGNvbnN0IHJlc3VsdDogVmFsaWRhdGlvblJlc3VsdDxQbHVnaW5TZXR0aW5ncz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbGlkYXRvcl0gb2YgdGhpcy52YWxpZGF0b3JzKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZSA9IGF3YWl0IHZhbGlkYXRvcihzZXR0aW5nc1twcm9wZXJ0eU5hbWVdLCBzZXR0aW5ncyk7XG4gICAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgcmVzdWx0W3Byb3BlcnR5TmFtZV0gPSB2YWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXRzIHVudGlsIHRoZSBzZXR0aW5ncyBoYXZlIGJlZW4gcmVhZCBmcm9tIGBkYXRhLmpzb25gIGF0IGxlYXN0IG9uY2UuXG4gICAqXG4gICAqIEFueXRoaW5nIHRoYXQgcmVhZHMgYSBzZXR0aW5nIGZyb20gb3V0c2lkZSB0aGlzIGNvbXBvbmVudCBoYXMgdG8gd2FpdCBmb3IgdGhpcywgYmVjYXVzZSB1bnRpbCB0aGUgZmlyc3RcbiAgICoge0BsaW5rIGxvYWRGcm9tRmlsZX0gY29tcGxldGVzIHtAbGluayBzZXR0aW5nc30gc3RpbGwgaG9sZHMgdGhlIERFRkFVTFRTIOKAlCByZWFkaW5nIGl0IGVhcmxpZXIgYW5zd2Vyc1xuICAgKiB3aXRoIGEgZGVmYXVsdCByYXRoZXIgdGhhbiB3aXRoIHdoYXQgdGhlIHVzZXIgYWN0dWFsbHkgc3RvcmVkLiBUaGF0IHdpbmRvdyBpcyBlYXN5IHRvIG1pc3MsIHNpbmNlIGl0IGlzXG4gICAqIGVtcHR5IG9uIGEgY29sZCBzdGFydCAodGhlIHdvcmtzcGFjZSBsYXlvdXQgaXMgbm90IHJlYWR5IHlldCwgc28gbm90aGluZyBoYXMgcnVuKSBidXQgd2lkZSBvcGVuIG9uIGFcbiAgICogcnVudGltZSBlbmFibGUgZnJvbSB0aGUgQ29tbXVuaXR5IFBsdWdpbnMgdGFiIG9yIGEgcmUtZW5hYmxlIGFmdGVyIGFuIHVwZGF0ZSwgd2hlcmUgYSBsYXlvdXQtcmVhZHlcbiAgICogaGFuZGxlciBmaXJlcyBpbW1lZGlhdGVseSB3aGlsZSB0aGlzIGNvbXBvbmVudCdzIG93biBhc3luYyBsb2FkIGlzIHN0aWxsIGluIGZsaWdodC5cbiAgICpcbiAgICogUmVzb2x2ZXMgaW1tZWRpYXRlbHkgb25jZSB0aGUgc2V0dGluZ3MgaGF2ZSBsb2FkZWQsIHNvIGEgY2FsbGVyIHRoYXQgYXJyaXZlcyBsYXRlIGlzIG5vdCBzdHJhbmRlZFxuICAgKiB3YWl0aW5nIGZvciBhbiBldmVudCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmFpc2VkLiBMYXRlciByZWxvYWRzIChhbiBleHRlcm5hbCBgZGF0YS5qc29uYCBjaGFuZ2UpIGRvXG4gICAqIG5vdCByZXNldCBpdCDigJQgdGhlIHF1ZXN0aW9uIGl0IGFuc3dlcnMgaXMgd2hldGhlciB0aGUgc2V0dGluZ3MgaGF2ZSBFVkVSIGJlZW4gcmVhZCwgbm90IHdoZXRoZXIgdGhlXG4gICAqIG1vc3QgcmVjZW50IHJlYWQgaGFzIGZpbmlzaGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHNldHRpbmdzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSB0aGUgZmlsZS5cbiAgICovXG4gIHB1YmxpYyB3aGVuTG9hZGVkRnJvbUZpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkZWRGcm9tRmlsZVxuICAgICAgPyBub29wQXN5bmMoKVxuICAgICAgOiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRlZEZyb21GaWxlUmVzb2x2ZXJzLnB1c2gocmVzb2x2ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0cmFuc2Zvcm1lci5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFRyYW5zZm9ybWVyKCk6IFRyYW5zZm9ybWVyIHtcbiAgICByZXR1cm4gZGVmYXVsdFRyYW5zZm9ybWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gc2V0dGluZ3MgcmVjb3JkIGlzIGxvYWRlZCBmcm9tIGRpc2suXG4gICAqXG4gICAqIEBwYXJhbSByZWNvcmQgLSBUaGUgcmVjb3JkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTG9hZFJlY29yZChyZWNvcmQ6IEdlbmVyaWNPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGNvbnZlcnRlciBvZiB0aGlzLmxlZ2FjeVNldHRpbmdzQ29udmVydGVycykge1xuICAgICAgY29udmVydGVyKHJlY29yZCk7XG4gICAgfVxuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHNldHRpbmdzIGFyZSBsb2FkZWQgb3IgcmVsb2FkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBfbG9hZGVkU3RhdGUgLSBUaGUgbG9hZGVkIHNldHRpbmdzIHN0YXRlLlxuICAgKiBAcGFyYW0gX2lzSW5pdGlhbExvYWQgLSBXaGV0aGVyIHRoaXMgaXMgdGhlIGluaXRpYWwgbG9hZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbkxvYWRTZXR0aW5ncyhcbiAgICBfbG9hZGVkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgX2lzSW5pdGlhbExvYWQ6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25TYXZlU2V0dGluZ3MocGFyYW1zOiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZXh0OiBfY29udGV4dCxcbiAgICAgIG5ld1N0YXRlOiBfbmV3U3RhdGUsXG4gICAgICBvbGRTdGF0ZTogX29sZFN0YXRlXG4gICAgfSA9IHBhcmFtcztcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIHJlY29yZCBpcyBhYm91dCB0byBiZSBzYXZlZCB0byBkaXNrLlxuICAgKlxuICAgKiBAcGFyYW0gX3JlY29yZCAtIFRoZSByZWNvcmQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25TYXZpbmdSZWNvcmQoX3JlY29yZDogR2VuZXJpY09iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgbGVnYWN5IHNldHRpbmdzIGNvbnZlcnRlcnMuXG4gICAqIE92ZXJyaWRlIHRvIHJlZ2lzdGVyIGxlZ2FjeSBzZXR0aW5ncyBjb252ZXJ0ZXJzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyTGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXJzKCk6IHZvaWQge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIHZhbGlkYXRvcnMuXG4gICAqIE92ZXJyaWRlIHRvIHJlZ2lzdGVyIHZhbGlkYXRvcnMgZm9yIHByb3BlcnRpZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVnaXN0ZXJWYWxpZGF0b3JzKCk6IHZvaWQge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xvbmVTZXR0aW5ncyhzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpOiBQcm9taXNlPFBsdWdpblNldHRpbmdzPiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5zZXR0aW5nc1RvUmF3UmVjb3JkKHNldHRpbmdzKTtcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkocmVjb3JkKTtcbiAgICBjb25zdCBjbG9uZVJlY29yZCA9IEpTT04ucGFyc2UoanNvbikgYXMgR2VuZXJpY09iamVjdDtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yYXdSZWNvcmRUb1NldHRpbmdzKGNsb25lUmVjb3JkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xvbmVTdGF0ZShcbiAgICBzdGF0ZTogUGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz5cbiAgKTogUHJvbWlzZTxQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPj4ge1xuICAgIHJldHVybiB7XG4gICAgICBlZmZlY3RpdmVWYWx1ZXM6IGF3YWl0IHRoaXMuY2xvbmVTZXR0aW5ncyhzdGF0ZS5lZmZlY3RpdmVWYWx1ZXMpLFxuICAgICAgaW5wdXRWYWx1ZXM6IGF3YWl0IHRoaXMuY2xvbmVTZXR0aW5ncyhzdGF0ZS5pbnB1dFZhbHVlcyksXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZXM6IHsgLi4uc3RhdGUudmFsaWRhdGlvbk1lc3NhZ2VzIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0U3RhdGUoKTogUGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB7XG4gICAgICBlZmZlY3RpdmVWYWx1ZXM6IG5ldyB0aGlzLnBsdWdpblNldHRpbmdzQ2xhc3MoKSxcbiAgICAgIGlucHV0VmFsdWVzOiBuZXcgdGhpcy5wbHVnaW5TZXR0aW5nc0NsYXNzKCksXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZXM6IGNhc3RUbzxSZWNvcmQ8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4+KHt9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVkaXQoc2V0dGluZ3NFZGl0b3I6IChzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2V0dGluZ3NFZGl0b3IodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy52YWxpZGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZS5pbnB1dFZhbHVlcyk7XG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiB0aGlzLnByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2UgPSB2YWxpZGF0aW9uUmVzdWx0W3Byb3BlcnR5TmFtZV0gPz8gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmVmZmVjdGl2ZVZhbHVlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2VcbiAgICAgICAgICA/IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV1cbiAgICAgICAgICA6IHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkUHJvcGVydHlOYW1lKHByb3BlcnR5OiB1bmtub3duKTogcHJvcGVydHkgaXMgUHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcGVydHkgPT09ICdzdHJpbmcnICYmICh0aGlzLnByb3BlcnR5TmFtZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKHByb3BlcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0xvYWRlZEZyb21GaWxlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMb2FkZWRGcm9tRmlsZSA9IHRydWU7XG4gICAgLy8gRHJhaW5lZCByYXRoZXIgdGhhbiBpdGVyYXRlZCwgc28gdGhlIGxpc3QgZG9lcyBub3Qga2VlcCBldmVyeSBwYXN0IHdhaXRlciBhbGl2ZSBhY3Jvc3MgcmVsb2Fkcy5cbiAgICBjb25zdCByZXNvbHZlcnMgPSB0aGlzLmxvYWRlZEZyb21GaWxlUmVzb2x2ZXJzLnNwbGljZSgwKTtcbiAgICBmb3IgKGNvbnN0IHJlc29sdmUgb2YgcmVzb2x2ZXJzKSB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByYXdSZWNvcmRUb1NldHRpbmdzKHJhd1JlY29yZDogR2VuZXJpY09iamVjdCk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByYXdSZWNvcmQgPSB0aGlzLmdldFRyYW5zZm9ybWVyKCkudHJhbnNmb3JtT2JqZWN0UmVjdXJzaXZlbHkocmF3UmVjb3JkKTtcbiAgICBhd2FpdCB0aGlzLm9uTG9hZFJlY29yZChyYXdSZWNvcmQpO1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBuZXcgdGhpcy5wbHVnaW5TZXR0aW5nc0NsYXNzKCk7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB0aGlzLmRlZmF1bHRTZXR0aW5ncyBhcyBQbHVnaW5TZXR0aW5ncztcblxuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJhd1JlY29yZCkpIHtcbiAgICAgIGlmICghdGhpcy5pc1ZhbGlkUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcignUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlOnJhd1JlY29yZFRvU2V0dGluZ3MnKShgVW5rbm93biBwcm9wZXJ0eTogJHtwcm9wZXJ0eU5hbWV9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBKU09OIGNhbm5vdCBob2xkIGB1bmRlZmluZWRgLCBzbyBvbmx5IGEgbGVnYWN5IGNvbnZlcnRlciBwcm9kdWNlcyBpdC4gS2VlcCB0aGUgZGVmYXVsdCByYXRoZXIgdGhhblxuICAgICAgLy8gbGV0dGluZyBhIGNvbnZlcnRlciB0aGF0IGFzc2lnbmVkIGEga2V5IGl0IGhhZCBub3RoaW5nIGZvciB3aXBlIGl0IG91dC5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlb2YgZGVmYXVsdHNbcHJvcGVydHlOYW1lXSkge1xuICAgICAgICBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyKCdQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U6cmF3UmVjb3JkVG9TZXR0aW5ncycpKFxuICAgICAgICAgICdQb3NzaWJsZSBpbnZhbGlkIHZhbHVlIHR5cGUuIEl0IG1pZ2h0IGxlYWQgdG8gYW4gdW5leHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgcGx1Z2luLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmNlIGl0IGlzIGEgZmFsc2UtbmVnYXRpdmUgd2FybmluZywgYXMgd2UgYXJlIHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHR5cGUgb2YgdGhlIHZhbHVlIGluIHJ1bnRpbWUuJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV0sXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHZhbHVlIGFzIFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzPjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVUb0ZpbGVJbXBsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGF0YUhhbmRsZXIuc2F2ZURhdGEoYXdhaXQgdGhpcy5zZXR0aW5nc1RvUmF3UmVjb3JkKHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzKSk7XG4gIH1cblxuICBwcml2YXRlIHNldFByb3BlcnR5SW1wbChwYXJhbXM6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZVNldFByb3BlcnR5SW1wbFBhcmFtczxQbHVnaW5TZXR0aW5ncz4pOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHBhcmFtcztcbiAgICBjb25zdCBkZWZhdWx0cyA9IHRoaXMuZGVmYXVsdFNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuICAgIHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB0aGlzLmN1cnJlbnRTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXNbcHJvcGVydHlOYW1lXSA9IHZhbGlkYXRpb25NZXNzYWdlID8/ICcnO1xuICAgIHRoaXMuY3VycmVudFN0YXRlLmVmZmVjdGl2ZVZhbHVlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2UgPyBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldHRpbmdzVG9SYXdSZWNvcmQoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxHZW5lcmljT2JqZWN0PiB7XG4gICAgY29uc3QgcmF3UmVjb3JkOiBHZW5lcmljT2JqZWN0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiB0aGlzLnByb3BlcnR5TmFtZXMpIHtcbiAgICAgIHJhd1JlY29yZFtwcm9wZXJ0eU5hbWVdID0gc2V0dGluZ3NbcHJvcGVydHlOYW1lXTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9uU2F2aW5nUmVjb3JkKHJhd1JlY29yZCk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2Zvcm1lcigpLnRyYW5zZm9ybU9iamVjdFJlY3Vyc2l2ZWx5KHJhd1JlY29yZCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkEsU0FBUyxtQkFBbUI7QUFDNUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNDQUFzQztBQUMvQyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLG9CQUFvQjtBQUs3QixTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLG1CQUFtQjtBQUU1QixNQUFNLHFCQUFxQixJQUFJLGlCQUFpQjtBQUFB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
|
|
545
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IG1hbmFnZXMgcGx1Z2luIHNldHRpbmdzOiBkYXRhLCBwZXJzaXN0ZW5jZSwgdmFsaWRhdGlvbiwgYW5kIGV2ZW50cy5cbiAqXG4gKiBUaGlzIGlzIHRoZSBzaW5nbGUgcHVibGljLWZhY2luZyBzZXR0aW5ncyBBUEkgZm9yIHBsdWdpbiBhdXRob3JzLlxuICogQWxsIHNldHRpbmdzIGxvZ2ljIChsb2FkLCBzYXZlLCB2YWxpZGF0ZSwgdHJhbnNmb3JtLCBjbG9uZSkgaXMgaGFuZGxlZCBkaXJlY3RseVxuICogYnkgdGhpcyBjb21wb25lbnQg4oCUIG5vIHNlcGFyYXRlIG1hbmFnZXIgY2xhc3MgaXMgbmVlZGVkLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXN5bmNFdmVudFJlZixcbiAgQXN5bmNFdmVudFNvdXJjZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMtZXZlbnRzJztcbmltcG9ydCB0eXBlIHsgVHJhbnNmb3JtZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHJhbnNmb3JtZXJzL3RyYW5zZm9ybWVyJztcbmltcG9ydCB0eXBlIHtcbiAgTWF5YmVSZXR1cm4sXG4gIFN0cmluZ0tleXNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUnO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmljT2JqZWN0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29uc3RydWN0b3IsXG4gIFByb21pc2FibGUsXG4gIFJlYWRvbmx5RGVlcFxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBBc3luY0V2ZW50cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYy1ldmVudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQge1xuICBjYXN0VG8sXG4gIGdldEFsbEtleXMsXG4gIGlzRGVlcEVxdWFsXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgRGF0ZVRyYW5zZm9ybWVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3RyYW5zZm9ybWVycy9kYXRlLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IEdyb3VwVHJhbnNmb3JtZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHJhbnNmb3JtZXJzL2dyb3VwLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IE1hcFRyYW5zZm9ybWVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3RyYW5zZm9ybWVycy9tYXAtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgU2V0VHJhbnNmb3JtZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHJhbnNmb3JtZXJzL3NldC10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBTa2lwUHJpdmF0ZVByb3BlcnR5VHJhbnNmb3JtZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHJhbnNmb3JtZXJzL3NraXAtcHJpdmF0ZS1wcm9wZXJ0eS10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBUd29XYXlNYXBUcmFuc2Zvcm1lciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90cmFuc2Zvcm1lcnMvdHdvLXdheS1tYXAtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgVmFsdWVXcmFwcGVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3ZhbHVlLXdyYXBwZXInO1xuXG5pbXBvcnQgdHlwZSB7IERhdGFIYW5kbGVyIH0gZnJvbSAnLi4vZGF0YS1oYW5kbGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luRXZlbnRTb3VyY2UgfSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWV2ZW50LXNvdXJjZS50cyc7XG5cbmltcG9ydCB7IGdldE9ic2lkaWFuTGliRGVidWdnZXIgfSBmcm9tICcuLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBEdXJhdGlvblRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL2R1cmF0aW9uLXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4vYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuY29uc3QgZGVmYXVsdFRyYW5zZm9ybWVyID0gbmV3IEdyb3VwVHJhbnNmb3JtZXIoW1xuICBuZXcgU2tpcFByaXZhdGVQcm9wZXJ0eVRyYW5zZm9ybWVyKCksXG4gIG5ldyBEYXRlVHJhbnNmb3JtZXIoKSxcbiAgbmV3IER1cmF0aW9uVHJhbnNmb3JtZXIoKSxcbiAgbmV3IE1hcFRyYW5zZm9ybWVyKCksXG4gIG5ldyBTZXRUcmFuc2Zvcm1lcigpLFxuICBuZXcgVHdvV2F5TWFwVHJhbnNmb3JtZXIoKVxuXSk7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlQ29uc3RydWN0b3JQYXJhbXM8UGx1Z2luU2V0dGluZ3M+IHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhIGhhbmRsZXIgZm9yIHRoZSBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBkYXRhSGFuZGxlcjogRGF0YUhhbmRsZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZXZlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luRXZlbnRTb3VyY2U6IFBsdWdpbkV2ZW50U291cmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIHNldHRpbmdzIGNsYXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDbGFzczogQ29uc3RydWN0b3I8UGx1Z2luU2V0dGluZ3MsIFtdPjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLm9uU2F2ZVNldHRpbmdzfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHNhdmUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgc2V0dGluZ3Mgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSBuZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogVGhlIG9sZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIEEgc25hcHNob3Qgb2YgcGx1Z2luIHNldHRpbmdzIHN0YXRlLCBpbmNsdWRpbmcgcmF3IGlucHV0IHZhbHVlcywgZWZmZWN0aXZlICh2YWxpZGF0ZWQpIHZhbHVlcyxcbiAqIGFuZCBwZXItcHJvcGVydHkgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBUaGUgZWZmZWN0aXZlIHNldHRpbmdzIHZhbHVlcyB1c2VkIGJ5IHRoZSBwbHVnaW4uIEludmFsaWQgcHJvcGVydGllcyBhcmUgcmVwbGFjZWQgd2l0aCBkZWZhdWx0cy5cbiAgICovXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZVZhbHVlczogUGx1Z2luU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSByYXcgaW5wdXQgdmFsdWVzIGFzIGVudGVyZWQgYnkgdGhlIHVzZXIuIE1heSBjb250YWluIGludmFsaWQgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXRWYWx1ZXM6IFBsdWdpblNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBQZXItcHJvcGVydHkgdmFsaWRhdGlvbiBtZXNzYWdlcy4gRW1wdHkgc3RyaW5nIG1lYW5zIHZhbGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvbk1lc3NhZ2VzOiBSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz47XG59XG5cbi8qKlxuICogUmVhZG9ubHkgdmVyc2lvbiBvZiB7QGxpbmsgUGx1Z2luU2V0dGluZ3N9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVBsdWdpblNldHRpbmdzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG5cbi8qKlxuICogUmVhZG9ubHkgdmVyc2lvbiBvZiB7QGxpbmsgUGx1Z2luU2V0dGluZ3NTdGF0ZX0gZm9yIHVzZSBpbiBldmVudCBjYWxsYmFja3MgYW5kIHB1YmxpYyBnZXR0ZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+ID0gUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+PjtcblxuLyoqXG4gKiBBIHZhbGlkYXRvciBmdW5jdGlvbiBmb3IgYSBzZXR0aW5ncyBwcm9wZXJ0eS5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgcHJvcGVydHkgbmFtZS5cbiAqL1xuZXhwb3J0IHR5cGUgU2V0dGluZ3NWYWxpZGF0b3I8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+ID0gU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+ID0gKFxuICB2YWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSxcbiAgc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzXG4pID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj47XG5cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VFdmVudE1hcDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICByZWFkb25seSBsb2FkU2V0dGluZ3M6IFtcbiAgICBsb2FkZWRTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICBpc0luaXRpYWxMb2FkOiBib29sZWFuXG4gIF07XG4gIHJlYWRvbmx5IHNhdmVTZXR0aW5nczogW1xuICAgIG5ld1N0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgIG9sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgIGNvbnRleHQ6IHVua25vd25cbiAgXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLnNldFByb3BlcnR5SW1wbH0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VTZXRQcm9wZXJ0eUltcGxQYXJhbXM8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+O1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlLiBFbXB0eSBvciB1bnNldCBtZWFucyB2YWxpZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRpb25NZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdG8gc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzPjtcbn1cblxudHlwZSBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+O1xuXG50eXBlIFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+XTtcblxudHlwZSBWYWxpZGF0aW9uUmVzdWx0PFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFBhcnRpYWw8UmVjb3JkPFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+PjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBwbHVnaW4gc2V0dGluZ3MgY29tcG9uZW50cy5cbiAqXG4gKiBNYW5hZ2VzIHNldHRpbmdzIGRhdGEsIHBlcnNpc3RlbmNlLCB2YWxpZGF0aW9uLCBhbmQgZXZlbnRzLlxuICogUGx1Z2luIGF1dGhvcnMgZXh0ZW5kIHRoaXMgY2xhc3MgYW5kIHBhc3MgdGhlaXIgc2V0dGluZ3MgY2xhc3MgYXNcbiAqIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VDb25zdHJ1Y3RvclBhcmFtcy5wbHVnaW5TZXR0aW5nc0NsYXNzfSwgd2hvc2UgZGVmYXVsdC1jb25zdHJ1Y3RlZCBpbnN0YW5jZSBzdXBwbGllcyB0aGUgZGVmYXVsdHMuXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi10b29sa2l0L3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeCAtLSBOb24tYWJzdHJhY3QgYmFzZSBjbGFzczsgY29uc3VtZXJzIGV4dGVuZCBpdC5cbmV4cG9ydCBjbGFzcyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgQ29tcG9uZW50RXggaW1wbGVtZW50cyBBc3luY0V2ZW50U291cmNlPFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZUV2ZW50TWFwPFBsdWdpblNldHRpbmdzPj4ge1xuICAvKipcbiAgICogR2V0cyB0aGUgcmVhZG9ubHkgZGVmYXVsdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlZmF1bHQgc2V0dGluZ3MgKGFzIGEgcmVhZG9ubHkgb2JqZWN0KS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0U2V0dGluZ3M6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlYWRvbmx5IGVmZmVjdGl2ZSBzZXR0aW5ncyAodmFsaWRhdGVkLCB3aXRoIGRlZmF1bHRzIHN1YnN0aXR1dGVkIGZvciBpbnZhbGlkIHZhbHVlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZWFkb25seSBlZmZlY3RpdmUgc2V0dGluZ3MuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzU3RhdGUuZWZmZWN0aXZlVmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2V0dGluZ3Mgc3RhdGUgc25hcHNob3QuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNldHRpbmdzIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXR0aW5nc1N0YXRlKCk6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZSBhcyBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIGhhbmRsZXIgdXNlZCB0byBsb2FkIGFuZCBzYXZlIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YUhhbmRsZXI6IERhdGFIYW5kbGVyO1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBldmVudCBzb3VyY2UgdGhlIGNvbXBvbmVudCBsaXN0ZW5zIHRvIGZvciBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbkV2ZW50U291cmNlOiBQbHVnaW5FdmVudFNvdXJjZTtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBzZXR0aW5ncyBjbGFzcyB1c2VkIHRvIGNvbnN0cnVjdCBzZXR0aW5ncyBpbnN0YW5jZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDbGFzczogQ29uc3RydWN0b3I8UGx1Z2luU2V0dGluZ3MsIFtdPjtcbiAgcHJpdmF0ZSByZWFkb25seSBhc3luY0V2ZW50cyA9IG5ldyBBc3luY0V2ZW50czxQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VFdmVudE1hcDxQbHVnaW5TZXR0aW5ncz4+KCk7XG4gIHByaXZhdGUgY3VycmVudFN0YXRlOiBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICBwcml2YXRlIGlzTG9hZGVkRnJvbUZpbGUgPSBmYWxzZTtcblxuICBwcml2YXRlIGxhc3RTYXZlZFN0YXRlOiBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxlZ2FjeVNldHRpbmdzQ29udmVydGVyczogKChyZWNvcmQ6IEdlbmVyaWNPYmplY3QpID0+IHZvaWQpW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkZWRGcm9tRmlsZVJlc29sdmVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0eU5hbWVzOiBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPltdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9ycyA9IG5ldyBNYXA8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzPj4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gc2V0dGluZ3MgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZGF0YUhhbmRsZXIgPSBwYXJhbXMuZGF0YUhhbmRsZXI7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NsYXNzID0gcGFyYW1zLnBsdWdpblNldHRpbmdzQ2xhc3M7XG4gICAgdGhpcy5wbHVnaW5FdmVudFNvdXJjZSA9IHBhcmFtcy5wbHVnaW5FdmVudFNvdXJjZTtcblxuICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0gbmV3IHRoaXMucGx1Z2luU2V0dGluZ3NDbGFzcygpIGFzIFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG4gICAgdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMucHJvcGVydHlOYW1lcyA9IGdldEFsbEtleXModGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgIHRoaXMucmVnaXN0ZXJWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy5yZWdpc3RlckxlZ2FjeVNldHRpbmdzQ29udmVydGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgYW5kIHNhdmVzIHRoZW0uXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5nc0VkaXRvciAtIFRoZSBlZGl0b3IuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVkaXRBbmRTYXZlKHNldHRpbmdzRWRpdG9yOiAoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCBjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgYXdhaXQgdGhpcy5lZGl0KHNldHRpbmdzRWRpdG9yKTtcbiAgICBhd2FpdCB0aGlzLnNhdmVUb0ZpbGUoY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgc2V0dGluZ3MgYXJlIHNhZmUuXG4gICAqXG4gICAqIEl0IHJ1bnMgdmFsaWRhdGlvbiBmb3IgZWFjaCBwcm9wZXJ0eSBhbmQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGUgdmFsaWRhdGlvbiBmYWlscy5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmdzIC0gVGhlIHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSBzYWZlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVuc3VyZVNhZmUoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMudmFsaWRhdGUoc2V0dGluZ3MpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgdGhpcy5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1jb21wdXRlZC1wcm9wZXJ0eS1leGlzdGVuY2UtY2hlY2sgLS0gVGhpcyB0ZXN0cyB3aGV0aGVyIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIG5vbi1lbXB0eSwgbm90IHdoZXRoZXIgdGhlIGtleSBleGlzdHMuXG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdFtwcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgIHNldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgc2FmZSBjb3B5IG9mIHRoZSBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmdzIC0gVGhlIHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzYWZlIGNvcHkgb2YgdGhlIHNldHRpbmdzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNhZmVDb3B5KHNldHRpbmdzOiBQbHVnaW5TZXR0aW5ncyk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICBjb25zdCBzYWZlU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmNsb25lU2V0dGluZ3Moc2V0dGluZ3MpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU2FmZShzYWZlU2V0dGluZ3MpO1xuICAgIHJldHVybiBzYWZlU2V0dGluZ3M7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHBsdWdpbiBzZXR0aW5ncyBmcm9tIHRoZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gaXNJbml0aWFsTG9hZCAtIFdoZXRoZXIgdGhlIHNldHRpbmdzIGFyZSBiZWluZyBsb2FkZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZEZyb21GaWxlKGlzSW5pdGlhbExvYWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRhdGFIYW5kbGVyLmxvYWREYXRhKCk7XG4gICAgdGhpcy5sYXN0U2F2ZWRTdGF0ZSA9IHRoaXMuY3JlYXRlRGVmYXVsdFN0YXRlKCk7XG4gICAgdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBzZXR0aW5ncyBmcm9tIGRhdGEuanNvbi4gRXhwZWN0ZWQgT2JqZWN0LCBnb3Q6ICR7dHlwZW9mIGRhdGF9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTm90aGluZyBzdG9yZWQgaXMgcmVhZCBhcyBhbiBlbXB0eSByZWNvcmQgcmF0aGVyIHRoYW4gc2tpcHBlZCwgc28gdGhlIHNhdmUgYmVsb3cgd3JpdGVzIHRoZSBmdWxsXG4gICAgICAvLyBkZWZhdWx0IHJlY29yZC4gV2l0aG91dCBpdCBhIHVzZXIgd2hvIG5ldmVyIGNoYW5nZWQgYSBzZXR0aW5nIGhhcyBubyBgZGF0YS5qc29uYCBhdCBhbGwsIGxvb2tzXG4gICAgICAvLyBleGFjdGx5IGxpa2UgYSBmcmVzaCBpbnN0YWxsLCBhbmQgc2lsZW50bHkgcGlja3MgdXAgZXZlcnkgZGVmYXVsdCBhIGxhdGVyIHJlbGVhc2UgY2hhbmdlcy5cbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IChkYXRhID8/IHt9KSBhcyBHZW5lcmljT2JqZWN0O1xuICAgICAgY29uc3QgcGFyc2VkU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnJhd1JlY29yZFRvU2V0dGluZ3MocmF3UmVjb3JkKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnZhbGlkYXRlKHBhcnNlZFNldHRpbmdzKTtcblxuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgdGhpcy5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlJbXBsKHtcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2U6IHZhbGlkYXRpb25SZXN1bHRbcHJvcGVydHlOYW1lXSxcbiAgICAgICAgICB2YWx1ZTogcGFyc2VkU2V0dGluZ3NbcHJvcGVydHlOYW1lXVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sYXN0U2F2ZWRTdGF0ZSA9IGF3YWl0IHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZSk7XG5cbiAgICAgIC8vIEEgY29tcG9uZW50IHRoYXQga25vd3Mgbm8gcHJvcGVydHkgbmFtZXMgY2Fubm90IG5vcm1hbGl6ZSBhbnl0aGluZzogYHNldHRpbmdzVG9SYXdSZWNvcmQoKWAgY2FuXG4gICAgICAvLyBvbmx5IGV2ZXIgcmV0dXJuIGB7fWAsIHNvIHRoZSBzYXZlIGJlbG93IHdvdWxkIG5vdCByZXdyaXRlIGBkYXRhLmpzb25gIC0tIGl0IHdvdWxkIGVtcHR5IGl0LlxuICAgICAgLy8gYFBsdWdpbkJhc2VgIGFkZHMgYSBwbGFjZWhvbGRlciBgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD5gIGJlZm9yZSBgb25sb2FkSW1wbCgpYCBzd2Fwc1xuICAgICAgLy8gaW4gdGhlIHBsdWdpbidzIG93biBjb21wb25lbnQsIGFuZCB0aGF0IHBsYWNlaG9sZGVyIGlzIGV4YWN0bHkgdGhpcyBjYXNlOiBpdCByZWFkIGV2ZXJ5IHJlYWxcbiAgICAgIC8vIHNldHRpbmcsIGtlcHQgbm9uZSBvZiB0aGVtLCBhbmQgc2F2ZWQgdGhlIGRpZmZlcmVuY2UgYmFjayBvdmVyIHRoZSBmaWxlLlxuICAgICAgaWYgKHRoaXMucHJvcGVydHlOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdSZWNvcmQgPSBhd2FpdCB0aGlzLnNldHRpbmdzVG9SYXdSZWNvcmQodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuXG4gICAgICBpZiAoIWlzRGVlcEVxdWFsKG5ld1JlY29yZCwgZGF0YSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlVG9GaWxlSW1wbCgpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLm1hcmtMb2FkZWRGcm9tRmlsZSgpO1xuICAgICAgYXdhaXQgdGhpcy5hc3luY0V2ZW50cy50cmlnZ2VyQXN5bmMoJ2xvYWRTZXR0aW5ncycsIHRoaXMuY3VycmVudFN0YXRlIGFzIFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sIGlzSW5pdGlhbExvYWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAdHlwZVBhcmFtIEFyZ3VtZW50cyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBldmVudCBjYWxsYmFjayBhY2NlcHRzLlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIHJlbW92ZS5cbiAgICovXG4gIHB1YmxpYyBvZmY8XG4gICAgRXZlbnROYW1lIGV4dGVuZHMga2V5b2YgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlRXZlbnRNYXA8UGx1Z2luU2V0dGluZ3M+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuICAgIEFyZ3VtZW50cyBleHRlbmRzIEV2ZW50TmFtZSBleHRlbmRzIGtleW9mIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZUV2ZW50TWFwPFBsdWdpblNldHRpbmdzPiA/IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZUV2ZW50TWFwPFBsdWdpblNldHRpbmdzPltFdmVudE5hbWVdXG4gICAgICA6IHVua25vd25bXVxuICA+KG5hbWU6IEV2ZW50TmFtZSwgY2FsbGJhY2s6ICguLi4kYXJndW1lbnRzOiBBcmd1bWVudHMpID0+IFByb21pc2FibGU8dm9pZD4pOiB2b2lkIHtcbiAgICB0aGlzLmFzeW5jRXZlbnRzLm9mZihuYW1lLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyIGJ5IHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50UmVmIC0gVGhlIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgb2ZmcmVmKGV2ZW50UmVmOiBBc3luY0V2ZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy5hc3luY0V2ZW50cy5vZmZyZWYoZXZlbnRSZWYpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEB0eXBlUGFyYW0gQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGV2ZW50IGNhbGxiYWNrIGFjY2VwdHMuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB0aGlzQXJndW1lbnQgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgLlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGgge0BsaW5rIG9ic2lkaWFuI0V2ZW50cyNvbn0gKG9yIG9uY2UsIGNvcnJlc3BvbmRpbmdseSkuXG4gICAqL1xuICBwdWJsaWMgb248XG4gICAgRXZlbnROYW1lIGV4dGVuZHMga2V5b2YgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlRXZlbnRNYXA8UGx1Z2luU2V0dGluZ3M+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuICAgIEFyZ3VtZW50cyBleHRlbmRzIEV2ZW50TmFtZSBleHRlbmRzIGtleW9mIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZUV2ZW50TWFwPFBsdWdpblNldHRpbmdzPiA/IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZUV2ZW50TWFwPFBsdWdpblNldHRpbmdzPltFdmVudE5hbWVdXG4gICAgICA6IHVua25vd25bXVxuICA+KG5hbWU6IEV2ZW50TmFtZSwgY2FsbGJhY2s6ICguLi4kYXJndW1lbnRzOiBBcmd1bWVudHMpID0+IFByb21pc2FibGU8dm9pZD4sIHRoaXNBcmd1bWVudD86IHVua25vd24pOiBBc3luY0V2ZW50UmVmIHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0V2ZW50cy5vbihuYW1lLCBjYWxsYmFjaywgdGhpc0FyZ3VtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGFuIGV2ZW50LCBleGVjdXRpbmcgYWxsIHRoZSBsaXN0ZW5lcnMgaW4gb3JkZXIgZXZlbiBpZiBzb21lIG9mIHRoZW0gdGhyb3cgYW4gZXJyb3IuXG4gICAqXG4gICAqIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEB0eXBlUGFyYW0gQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGV2ZW50IGNhbGxiYWNrIGFjY2VwdHMuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB0aGlzQXJndW1lbnQgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgLlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGgge0BsaW5rIG9ic2lkaWFuI0V2ZW50cyNvbn0gKG9yIG9uY2UsIGNvcnJlc3BvbmRpbmdseSkuXG4gICAqL1xuICBwdWJsaWMgb25jZTxcbiAgICBFdmVudE5hbWUgZXh0ZW5kcyBrZXlvZiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VFdmVudE1hcDxQbHVnaW5TZXR0aW5ncz4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gICAgQXJndW1lbnRzIGV4dGVuZHMgRXZlbnROYW1lIGV4dGVuZHMga2V5b2YgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlRXZlbnRNYXA8UGx1Z2luU2V0dGluZ3M+ID8gUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlRXZlbnRNYXA8UGx1Z2luU2V0dGluZ3M+W0V2ZW50TmFtZV1cbiAgICAgIDogdW5rbm93bltdXG4gID4obmFtZTogRXZlbnROYW1lLCBjYWxsYmFjazogKC4uLiRhcmd1bWVudHM6IEFyZ3VtZW50cykgPT4gUHJvbWlzYWJsZTx2b2lkPiwgdGhpc0FyZ3VtZW50PzogdW5rbm93bik6IEFzeW5jRXZlbnRSZWYge1xuICAgIHJldHVybiB0aGlzLmFzeW5jRXZlbnRzLm9uY2UobmFtZSwgY2FsbGJhY2ssIHRoaXNBcmd1bWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGV4dGVybmFsIHNldHRpbmdzIGNoYW5nZS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgcmVsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgb25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkRnJvbUZpbGUoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHNldHRpbmdzIGZyb20gZmlsZSBhbmQgcmVnaXN0ZXJzIGV2ZW50IGhhbmRsZXJzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCB0aGlzLm9uKCdsb2FkU2V0dGluZ3MnLCB0aGlzLm9uTG9hZFNldHRpbmdzLmJpbmQodGhpcykpKTtcbiAgICByZWdpc3RlckFzeW5jRXZlbnQodGhpcywgdGhpcy5vbignc2F2ZVNldHRpbmdzJywgKG5ld1N0YXRlLCBvbGRTdGF0ZSwgY29udGV4dCkgPT4gdGhpcy5vblNhdmVTZXR0aW5ncyh7IGNvbnRleHQsIG5ld1N0YXRlLCBvbGRTdGF0ZSB9KSkpO1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCB0aGlzLnBsdWdpbkV2ZW50U291cmNlLm9uKCdleHRlcm5hbFNldHRpbmdzQ2hhbmdlJywgdGhpcy5vbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UuYmluZCh0aGlzKSkpO1xuICAgIGF3YWl0IHRoaXMubG9hZEZyb21GaWxlKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGxlZ2FjeSBzZXR0aW5ncyBjb252ZXJ0ZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gTGVnYWN5U2V0dGluZ3MgLSBUaGUgbGVnYWN5IHNldHRpbmdzIGNsYXNzLlxuICAgKiBAcGFyYW0gbGVnYWN5U2V0dGluZ3NDbGFzcyAtIFRoZSBsZWdhY3kgc2V0dGluZ3MgY2xhc3MuXG4gICAqIEBwYXJhbSBjb252ZXJ0ZXIgLSBUaGUgY29udmVydGVyLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyTGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXI8TGVnYWN5U2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIGxlZ2FjeVNldHRpbmdzQ2xhc3M6IG5ldyAoKSA9PiBMZWdhY3lTZXR0aW5ncyxcbiAgICBjb252ZXJ0ZXI6IChsZWdhY3lTZXR0aW5nczogUGFydGlhbDxMZWdhY3lTZXR0aW5ncz4gJiBQYXJ0aWFsPFBsdWdpblNldHRpbmdzPikgPT4gdm9pZFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB0aGlzV3JhcHBlciA9IFZhbHVlV3JhcHBlci5vZih0aGlzKTtcbiAgICB0aGlzLmxlZ2FjeVNldHRpbmdzQ29udmVydGVycy5wdXNoKGxlZ2FjeVNldHRpbmdzQ29udmVydGVyKTtcblxuICAgIGZ1bmN0aW9uIGxlZ2FjeVNldHRpbmdzQ29udmVydGVyKHJlY29yZDogR2VuZXJpY09iamVjdCk6IHZvaWQge1xuICAgICAgY29uc3QgbGVnYWN5U2V0dGluZ3NLZXlzID0gbmV3IFNldDxzdHJpbmc+KE9iamVjdC5rZXlzKG5ldyBsZWdhY3lTZXR0aW5nc0NsYXNzKCkpKTtcbiAgICAgIGNvbnN0IHBsdWdpblNldHRpbmdLZXlzID0gbmV3IFNldDxzdHJpbmc+KHRoaXNXcmFwcGVyLnZhbHVlLnByb3BlcnR5TmFtZXMpO1xuICAgICAgY29uc3QgbGVnYWN5U2V0dGluZ3MgPSByZWNvcmQgYXMgUGFydGlhbDxMZWdhY3lTZXR0aW5ncz4gJiBQYXJ0aWFsPFBsdWdpblNldHRpbmdzPjtcbiAgICAgIGNvbnZlcnRlcihsZWdhY3lTZXR0aW5ncyk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhsZWdhY3lTZXR0aW5ncykpIHtcbiAgICAgICAgaWYgKHBsdWdpblNldHRpbmdLZXlzLmhhcyhrZXkpIHx8ICFsZWdhY3lTZXR0aW5nc0tleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgICAgICAgZGVsZXRlIHJlY29yZFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB2YWxpZGF0b3IgZm9yIGEgcHJvcGVydHkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHNldHRpbmdzIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yIC0gVGhlIHZhbGlkYXRvci5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclZhbGlkYXRvcjxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgdmFsaWRhdG9yOiBTZXR0aW5nc1ZhbGlkYXRvcjxQbHVnaW5TZXR0aW5ncywgUHJvcGVydHlOYW1lPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRvcnMuc2V0KHByb3BlcnR5TmFtZSwgdmFsaWRhdG9yIGFzIFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzPik7XG4gIH1cblxuICAvKipcbiAgICogUmV2YWxpZGF0ZXMgdGhlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXZhbGlkYXRlKCk6IFByb21pc2U8UmVjb3JkPFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+PiB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcbiAgICBhd2FpdCB0aGlzLmVkaXQobm9vcCk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgbmV3IHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBvZiB0aGUgc2F2ZSB0byBmaWxlIG9wZXJhdGlvbi5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2F2ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVRvRmlsZShjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgaWYgKGlzRGVlcEVxdWFsKHRoaXMubGFzdFNhdmVkU3RhdGUuaW5wdXRWYWx1ZXMsIHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2F2ZVRvRmlsZUltcGwoKTtcbiAgICBhd2FpdCB0aGlzLmFzeW5jRXZlbnRzLnRyaWdnZXJBc3luYyhcbiAgICAgICdzYXZlU2V0dGluZ3MnLFxuICAgICAgdGhpcy5jdXJyZW50U3RhdGUgYXMgUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgYXMgUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSBhd2FpdCB0aGlzLmNsb25lU3RhdGUodGhpcy5jdXJyZW50U3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0UHJvcGVydHk8UHJvcGVydHlOYW1lIGV4dGVuZHMgUHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4+KFxuICAgIHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lLFxuICAgIHZhbHVlOiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcbiAgICBhd2FpdCB0aGlzLmVkaXQoKHNldHRpbmdzKSA9PiB7XG4gICAgICBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWRhdGlvbiByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGUoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PFBsdWdpblNldHRpbmdzPj4ge1xuICAgIGNvbnN0IHJlc3VsdDogVmFsaWRhdGlvblJlc3VsdDxQbHVnaW5TZXR0aW5ncz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbGlkYXRvcl0gb2YgdGhpcy52YWxpZGF0b3JzKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZSA9IGF3YWl0IHZhbGlkYXRvcihzZXR0aW5nc1twcm9wZXJ0eU5hbWVdLCBzZXR0aW5ncyk7XG4gICAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgcmVzdWx0W3Byb3BlcnR5TmFtZV0gPSB2YWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXRzIHVudGlsIHRoZSBzZXR0aW5ncyBoYXZlIGJlZW4gcmVhZCBmcm9tIGBkYXRhLmpzb25gIGF0IGxlYXN0IG9uY2UuXG4gICAqXG4gICAqIEFueXRoaW5nIHRoYXQgcmVhZHMgYSBzZXR0aW5nIGZyb20gb3V0c2lkZSB0aGlzIGNvbXBvbmVudCBoYXMgdG8gd2FpdCBmb3IgdGhpcywgYmVjYXVzZSB1bnRpbCB0aGUgZmlyc3RcbiAgICoge0BsaW5rIGxvYWRGcm9tRmlsZX0gY29tcGxldGVzIHtAbGluayBzZXR0aW5nc30gc3RpbGwgaG9sZHMgdGhlIERFRkFVTFRTIOKAlCByZWFkaW5nIGl0IGVhcmxpZXIgYW5zd2Vyc1xuICAgKiB3aXRoIGEgZGVmYXVsdCByYXRoZXIgdGhhbiB3aXRoIHdoYXQgdGhlIHVzZXIgYWN0dWFsbHkgc3RvcmVkLiBUaGF0IHdpbmRvdyBpcyBlYXN5IHRvIG1pc3MsIHNpbmNlIGl0IGlzXG4gICAqIGVtcHR5IG9uIGEgY29sZCBzdGFydCAodGhlIHdvcmtzcGFjZSBsYXlvdXQgaXMgbm90IHJlYWR5IHlldCwgc28gbm90aGluZyBoYXMgcnVuKSBidXQgd2lkZSBvcGVuIG9uIGFcbiAgICogcnVudGltZSBlbmFibGUgZnJvbSB0aGUgQ29tbXVuaXR5IFBsdWdpbnMgdGFiIG9yIGEgcmUtZW5hYmxlIGFmdGVyIGFuIHVwZGF0ZSwgd2hlcmUgYSBsYXlvdXQtcmVhZHlcbiAgICogaGFuZGxlciBmaXJlcyBpbW1lZGlhdGVseSB3aGlsZSB0aGlzIGNvbXBvbmVudCdzIG93biBhc3luYyBsb2FkIGlzIHN0aWxsIGluIGZsaWdodC5cbiAgICpcbiAgICogUmVzb2x2ZXMgaW1tZWRpYXRlbHkgb25jZSB0aGUgc2V0dGluZ3MgaGF2ZSBsb2FkZWQsIHNvIGEgY2FsbGVyIHRoYXQgYXJyaXZlcyBsYXRlIGlzIG5vdCBzdHJhbmRlZFxuICAgKiB3YWl0aW5nIGZvciBhbiBldmVudCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmFpc2VkLiBMYXRlciByZWxvYWRzIChhbiBleHRlcm5hbCBgZGF0YS5qc29uYCBjaGFuZ2UpIGRvXG4gICAqIG5vdCByZXNldCBpdCDigJQgdGhlIHF1ZXN0aW9uIGl0IGFuc3dlcnMgaXMgd2hldGhlciB0aGUgc2V0dGluZ3MgaGF2ZSBFVkVSIGJlZW4gcmVhZCwgbm90IHdoZXRoZXIgdGhlXG4gICAqIG1vc3QgcmVjZW50IHJlYWQgaGFzIGZpbmlzaGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHNldHRpbmdzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSB0aGUgZmlsZS5cbiAgICovXG4gIHB1YmxpYyB3aGVuTG9hZGVkRnJvbUZpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkZWRGcm9tRmlsZVxuICAgICAgPyBub29wQXN5bmMoKVxuICAgICAgOiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRlZEZyb21GaWxlUmVzb2x2ZXJzLnB1c2gocmVzb2x2ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0cmFuc2Zvcm1lci5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFRyYW5zZm9ybWVyKCk6IFRyYW5zZm9ybWVyIHtcbiAgICByZXR1cm4gZGVmYXVsdFRyYW5zZm9ybWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gc2V0dGluZ3MgcmVjb3JkIGlzIGxvYWRlZCBmcm9tIGRpc2suXG4gICAqXG4gICAqIEBwYXJhbSByZWNvcmQgLSBUaGUgcmVjb3JkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTG9hZFJlY29yZChyZWNvcmQ6IEdlbmVyaWNPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGNvbnZlcnRlciBvZiB0aGlzLmxlZ2FjeVNldHRpbmdzQ29udmVydGVycykge1xuICAgICAgY29udmVydGVyKHJlY29yZCk7XG4gICAgfVxuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHNldHRpbmdzIGFyZSBsb2FkZWQgb3IgcmVsb2FkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBfbG9hZGVkU3RhdGUgLSBUaGUgbG9hZGVkIHNldHRpbmdzIHN0YXRlLlxuICAgKiBAcGFyYW0gX2lzSW5pdGlhbExvYWQgLSBXaGV0aGVyIHRoaXMgaXMgdGhlIGluaXRpYWwgbG9hZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbkxvYWRTZXR0aW5ncyhcbiAgICBfbG9hZGVkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgX2lzSW5pdGlhbExvYWQ6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25TYXZlU2V0dGluZ3MocGFyYW1zOiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZXh0OiBfY29udGV4dCxcbiAgICAgIG5ld1N0YXRlOiBfbmV3U3RhdGUsXG4gICAgICBvbGRTdGF0ZTogX29sZFN0YXRlXG4gICAgfSA9IHBhcmFtcztcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIHJlY29yZCBpcyBhYm91dCB0byBiZSBzYXZlZCB0byBkaXNrLlxuICAgKlxuICAgKiBAcGFyYW0gX3JlY29yZCAtIFRoZSByZWNvcmQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25TYXZpbmdSZWNvcmQoX3JlY29yZDogR2VuZXJpY09iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgbGVnYWN5IHNldHRpbmdzIGNvbnZlcnRlcnMuXG4gICAqIE92ZXJyaWRlIHRvIHJlZ2lzdGVyIGxlZ2FjeSBzZXR0aW5ncyBjb252ZXJ0ZXJzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyTGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXJzKCk6IHZvaWQge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIHZhbGlkYXRvcnMuXG4gICAqIE92ZXJyaWRlIHRvIHJlZ2lzdGVyIHZhbGlkYXRvcnMgZm9yIHByb3BlcnRpZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVnaXN0ZXJWYWxpZGF0b3JzKCk6IHZvaWQge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xvbmVTZXR0aW5ncyhzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpOiBQcm9taXNlPFBsdWdpblNldHRpbmdzPiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5zZXR0aW5nc1RvUmF3UmVjb3JkKHNldHRpbmdzKTtcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkocmVjb3JkKTtcbiAgICBjb25zdCBjbG9uZVJlY29yZCA9IEpTT04ucGFyc2UoanNvbikgYXMgR2VuZXJpY09iamVjdDtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yYXdSZWNvcmRUb1NldHRpbmdzKGNsb25lUmVjb3JkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xvbmVTdGF0ZShcbiAgICBzdGF0ZTogUGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz5cbiAgKTogUHJvbWlzZTxQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPj4ge1xuICAgIHJldHVybiB7XG4gICAgICBlZmZlY3RpdmVWYWx1ZXM6IGF3YWl0IHRoaXMuY2xvbmVTZXR0aW5ncyhzdGF0ZS5lZmZlY3RpdmVWYWx1ZXMpLFxuICAgICAgaW5wdXRWYWx1ZXM6IGF3YWl0IHRoaXMuY2xvbmVTZXR0aW5ncyhzdGF0ZS5pbnB1dFZhbHVlcyksXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZXM6IHsgLi4uc3RhdGUudmFsaWRhdGlvbk1lc3NhZ2VzIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0U3RhdGUoKTogUGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB7XG4gICAgICBlZmZlY3RpdmVWYWx1ZXM6IG5ldyB0aGlzLnBsdWdpblNldHRpbmdzQ2xhc3MoKSxcbiAgICAgIGlucHV0VmFsdWVzOiBuZXcgdGhpcy5wbHVnaW5TZXR0aW5nc0NsYXNzKCksXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZXM6IGNhc3RUbzxSZWNvcmQ8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4+KHt9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVkaXQoc2V0dGluZ3NFZGl0b3I6IChzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2V0dGluZ3NFZGl0b3IodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy52YWxpZGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZS5pbnB1dFZhbHVlcyk7XG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiB0aGlzLnByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2UgPSB2YWxpZGF0aW9uUmVzdWx0W3Byb3BlcnR5TmFtZV0gPz8gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmVmZmVjdGl2ZVZhbHVlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2VcbiAgICAgICAgICA/IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV1cbiAgICAgICAgICA6IHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkUHJvcGVydHlOYW1lKHByb3BlcnR5OiB1bmtub3duKTogcHJvcGVydHkgaXMgUHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcGVydHkgPT09ICdzdHJpbmcnICYmICh0aGlzLnByb3BlcnR5TmFtZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKHByb3BlcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0xvYWRlZEZyb21GaWxlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMb2FkZWRGcm9tRmlsZSA9IHRydWU7XG4gICAgLy8gRHJhaW5lZCByYXRoZXIgdGhhbiBpdGVyYXRlZCwgc28gdGhlIGxpc3QgZG9lcyBub3Qga2VlcCBldmVyeSBwYXN0IHdhaXRlciBhbGl2ZSBhY3Jvc3MgcmVsb2Fkcy5cbiAgICBjb25zdCByZXNvbHZlcnMgPSB0aGlzLmxvYWRlZEZyb21GaWxlUmVzb2x2ZXJzLnNwbGljZSgwKTtcbiAgICBmb3IgKGNvbnN0IHJlc29sdmUgb2YgcmVzb2x2ZXJzKSB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByYXdSZWNvcmRUb1NldHRpbmdzKHJhd1JlY29yZDogR2VuZXJpY09iamVjdCk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByYXdSZWNvcmQgPSB0aGlzLmdldFRyYW5zZm9ybWVyKCkudHJhbnNmb3JtT2JqZWN0UmVjdXJzaXZlbHkocmF3UmVjb3JkKTtcbiAgICBhd2FpdCB0aGlzLm9uTG9hZFJlY29yZChyYXdSZWNvcmQpO1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBuZXcgdGhpcy5wbHVnaW5TZXR0aW5nc0NsYXNzKCk7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB0aGlzLmRlZmF1bHRTZXR0aW5ncyBhcyBQbHVnaW5TZXR0aW5ncztcblxuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJhd1JlY29yZCkpIHtcbiAgICAgIGlmICghdGhpcy5pc1ZhbGlkUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcignUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlOnJhd1JlY29yZFRvU2V0dGluZ3MnKShgVW5rbm93biBwcm9wZXJ0eTogJHtwcm9wZXJ0eU5hbWV9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBKU09OIGNhbm5vdCBob2xkIGB1bmRlZmluZWRgLCBzbyBvbmx5IGEgbGVnYWN5IGNvbnZlcnRlciBwcm9kdWNlcyBpdC4gS2VlcCB0aGUgZGVmYXVsdCByYXRoZXIgdGhhblxuICAgICAgLy8gbGV0dGluZyBhIGNvbnZlcnRlciB0aGF0IGFzc2lnbmVkIGEga2V5IGl0IGhhZCBub3RoaW5nIGZvciB3aXBlIGl0IG91dC5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlb2YgZGVmYXVsdHNbcHJvcGVydHlOYW1lXSkge1xuICAgICAgICBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyKCdQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U6cmF3UmVjb3JkVG9TZXR0aW5ncycpKFxuICAgICAgICAgICdQb3NzaWJsZSBpbnZhbGlkIHZhbHVlIHR5cGUuIEl0IG1pZ2h0IGxlYWQgdG8gYW4gdW5leHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgcGx1Z2luLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmNlIGl0IGlzIGEgZmFsc2UtbmVnYXRpdmUgd2FybmluZywgYXMgd2UgYXJlIHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHR5cGUgb2YgdGhlIHZhbHVlIGluIHJ1bnRpbWUuJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV0sXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHZhbHVlIGFzIFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzPjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVUb0ZpbGVJbXBsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGF0YUhhbmRsZXIuc2F2ZURhdGEoYXdhaXQgdGhpcy5zZXR0aW5nc1RvUmF3UmVjb3JkKHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzKSk7XG4gIH1cblxuICBwcml2YXRlIHNldFByb3BlcnR5SW1wbChwYXJhbXM6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZVNldFByb3BlcnR5SW1wbFBhcmFtczxQbHVnaW5TZXR0aW5ncz4pOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHBhcmFtcztcbiAgICBjb25zdCBkZWZhdWx0cyA9IHRoaXMuZGVmYXVsdFNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuICAgIHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB0aGlzLmN1cnJlbnRTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXNbcHJvcGVydHlOYW1lXSA9IHZhbGlkYXRpb25NZXNzYWdlID8/ICcnO1xuICAgIHRoaXMuY3VycmVudFN0YXRlLmVmZmVjdGl2ZVZhbHVlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2UgPyBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldHRpbmdzVG9SYXdSZWNvcmQoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxHZW5lcmljT2JqZWN0PiB7XG4gICAgY29uc3QgcmF3UmVjb3JkOiBHZW5lcmljT2JqZWN0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiB0aGlzLnByb3BlcnR5TmFtZXMpIHtcbiAgICAgIHJhd1JlY29yZFtwcm9wZXJ0eU5hbWVdID0gc2V0dGluZ3NbcHJvcGVydHlOYW1lXTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9uU2F2aW5nUmVjb3JkKHJhd1JlY29yZCk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2Zvcm1lcigpLnRyYW5zZm9ybU9iamVjdFJlY3Vyc2l2ZWx5KHJhd1JlY29yZCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkEsU0FBUyxtQkFBbUI7QUFDNUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNDQUFzQztBQUMvQyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLG9CQUFvQjtBQUs3QixTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLG1CQUFtQjtBQUU1QixNQUFNLHFCQUFxQixJQUFJLGlCQUFpQjtBQUFBLEVBQzlDLElBQUksK0JBQStCO0FBQUEsRUFDbkMsSUFBSSxnQkFBZ0I7QUFBQSxFQUNwQixJQUFJLG9CQUFvQjtBQUFBLEVBQ3hCLElBQUksZUFBZTtBQUFBLEVBQ25CLElBQUksZUFBZTtBQUFBLEVBQ25CLElBQUkscUJBQXFCO0FBQzNCLENBQUM7QUFnSk0sTUFBTSxvQ0FBbUUsWUFBNkY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNM0o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPaEIsSUFBVyxXQUF5QztBQUNsRCxXQUFPLEtBQUssY0FBYztBQUFBLEVBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBVyxnQkFBNkQ7QUFDdEUsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS21CO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQSxFQUNGLGNBQWMsSUFBSSxZQUFpRTtBQUFBLEVBQzVGO0FBQUEsRUFFQSxtQkFBbUI7QUFBQSxFQUVuQjtBQUFBLEVBRVMsMkJBQWdFLENBQUM7QUFBQSxFQUNqRSwwQkFBMEMsQ0FBQztBQUFBLEVBQzNDO0FBQUEsRUFFQSxhQUFhLG9CQUFJLElBQXNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT2pHLFlBQVksUUFBc0U7QUFDdkYsVUFBTTtBQUNOLFNBQUssY0FBYyxPQUFPO0FBQzFCLFNBQUssc0JBQXNCLE9BQU87QUFDbEMsU0FBSyxvQkFBb0IsT0FBTztBQUVoQyxTQUFLLGtCQUFrQixJQUFJLEtBQUssb0JBQW9CO0FBQ3BELFNBQUssZUFBZSxLQUFLLG1CQUFtQjtBQUM1QyxTQUFLLGlCQUFpQixLQUFLLG1CQUFtQjtBQUM5QyxTQUFLLGdCQUFnQixXQUFXLEtBQUssYUFBYSxXQUFXO0FBQzdELFNBQUssbUJBQW1CO0FBQ3hCLFNBQUssaUNBQWlDO0FBQUEsRUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU0EsTUFBYSxZQUFZLGdCQUFnRSxTQUFrQztBQUN6SCxTQUFLLGFBQWE7QUFDbEIsVUFBTSxLQUFLLEtBQUssY0FBYztBQUM5QixVQUFNLEtBQUssV0FBVyxPQUFPO0FBQUEsRUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxNQUFhLFdBQVcsVUFBeUM7QUFDL0QsVUFBTSxtQkFBbUIsTUFBTSxLQUFLLFNBQVMsUUFBUTtBQUNyRCxVQUFNLFdBQVcsS0FBSztBQUN0QixlQUFXLGdCQUFnQixLQUFLLGVBQWU7QUFFN0MsVUFBSSxpQkFBaUIsWUFBWSxHQUFHO0FBQ2xDLGlCQUFTLFlBQVksSUFBSSxTQUFTLFlBQVk7QUFBQSxNQUNoRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxNQUFhLFlBQVksVUFBbUQ7QUFDMUUsVUFBTSxlQUFlLE1BQU0sS0FBSyxjQUFjLFFBQVE7QUFDdEQsVUFBTSxLQUFLLFdBQVcsWUFBWTtBQUNsQyxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxhQUFhLGVBQXVDO0FBQy9ELFNBQUssYUFBYTtBQUNsQixVQUFNLE9BQU8sTUFBTSxLQUFLLFlBQVksU0FBUztBQUM3QyxTQUFLLGlCQUFpQixLQUFLLG1CQUFtQjtBQUM5QyxTQUFLLGVBQWUsS0FBSyxtQkFBbUI7QUFFNUMsUUFBSTtBQUNGLFVBQUksU0FBUyxVQUFhLFNBQVMsUUFBUSxPQUFPLFNBQVMsVUFBVTtBQUNuRSxnQkFBUSxNQUFNLDBEQUEwRCxPQUFPLElBQUksRUFBRTtBQUNyRjtBQUFBLE1BQ0Y7QUFLQSxZQUFNLFlBQWEsUUFBUSxDQUFDO0FBQzVCLFlBQU0saUJBQWlCLE1BQU0sS0FBSyxvQkFBb0IsU0FBUztBQUMvRCxZQUFNLG1CQUFtQixNQUFNLEtBQUssU0FBUyxjQUFjO0FBRTNELGlCQUFXLGdCQUFnQixLQUFLLGVBQWU7QUFDN0MsYUFBSyxnQkFBZ0I7QUFBQSxVQUNuQjtBQUFBLFVBQ0EsbUJBQW1CLGlCQUFpQixZQUFZO0FBQUEsVUFDaEQsT0FBTyxlQUFlLFlBQVk7QUFBQSxRQUNwQyxDQUFDO0FBQUEsTUFDSDtBQUVBLFdBQUssaUJBQWlCLE1BQU0sS0FBSyxXQUFXLEtBQUssWUFBWTtBQU83RCxVQUFJLEtBQUssY0FBYyxXQUFXLEdBQUc7QUFDbkM7QUFBQSxNQUNGO0FBRUEsWUFBTSxZQUFZLE1BQU0sS0FBSyxvQkFBb0IsS0FBSyxhQUFhLFdBQVc7QUFFOUUsVUFBSSxDQUFDLFlBQVksV0FBVyxJQUFJLEdBQUc7QUFDakMsY0FBTSxLQUFLLGVBQWU7QUFBQSxNQUM1QjtBQUFBLElBQ0YsVUFBRTtBQUNBLFdBQUssbUJBQW1CO0FBQ3hCLFlBQU0sS0FBSyxZQUFZLGFBQWEsZ0JBQWdCLEtBQUssY0FBNkQsYUFBYTtBQUFBLElBQ3JJO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVPLElBS0wsTUFBaUIsVUFBZ0U7QUFDakYsU0FBSyxZQUFZLElBQUksTUFBTSxRQUFRO0FBQUEsRUFDckM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxPQUFPLFVBQStCO0FBQzNDLFNBQUssWUFBWSxPQUFPLFFBQVE7QUFBQSxFQUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBY08sR0FLTCxNQUFpQixVQUEwRCxjQUF1QztBQUNsSCxXQUFPLEtBQUssWUFBWSxHQUFHLE1BQU0sVUFBVSxZQUFZO0FBQUEsRUFDekQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFnQk8sS0FLTCxNQUFpQixVQUEwRCxjQUF1QztBQUNsSCxXQUFPLEtBQUssWUFBWSxLQUFLLE1BQU0sVUFBVSxZQUFZO0FBQUEsRUFDM0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUFhLDJCQUEwQztBQUNyRCxTQUFLLGFBQWE7QUFDbEIsVUFBTSxLQUFLLGFBQWEsS0FBSztBQUFBLEVBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFzQixjQUE2QjtBQUNqRCx1QkFBbUIsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLEtBQUssZUFBZSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2hGLHVCQUFtQixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLFVBQVUsWUFBWSxLQUFLLGVBQWUsRUFBRSxTQUFTLFVBQVUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2SSx1QkFBbUIsTUFBTSxLQUFLLGtCQUFrQixHQUFHLDBCQUEwQixLQUFLLHlCQUF5QixLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3RILFVBQU0sS0FBSyxhQUFhLElBQUk7QUFBQSxFQUM5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTTyxnQ0FDTCxxQkFDQSxXQUNNO0FBQ04sVUFBTSxjQUFjLGFBQWEsR0FBRyxJQUFJO0FBQ3hDLFNBQUsseUJBQXlCLEtBQUssdUJBQXVCO0FBRTFELGFBQVMsd0JBQXdCLFFBQTZCO0FBQzVELFlBQU0scUJBQXFCLElBQUksSUFBWSxPQUFPLEtBQUssSUFBSSxvQkFBb0IsQ0FBQyxDQUFDO0FBQ2pGLFlBQU0sb0JBQW9CLElBQUksSUFBWSxZQUFZLE1BQU0sYUFBYTtBQUN6RSxZQUFNLGlCQUFpQjtBQUN2QixnQkFBVSxjQUFjO0FBQ3hCLGlCQUFXLE9BQU8sT0FBTyxLQUFLLGNBQWMsR0FBRztBQUM3QyxZQUFJLGtCQUFrQixJQUFJLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixJQUFJLEdBQUcsR0FBRztBQUM5RDtBQUFBLFFBQ0Y7QUFHQSxlQUFPLE9BQU8sR0FBRztBQUFBLE1BQ25CO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sa0JBQ0wsY0FDQSxXQUNNO0FBQ04sU0FBSyxXQUFXLElBQUksY0FBYyxTQUE4QztBQUFBLEVBQ2xGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsTUFBYSxhQUFxRTtBQUNoRixTQUFLLGFBQWE7QUFDbEIsVUFBTSxLQUFLLEtBQUssSUFBSTtBQUNwQixXQUFPLEtBQUssYUFBYTtBQUFBLEVBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxNQUFhLFdBQVcsU0FBa0M7QUFDeEQsU0FBSyxhQUFhO0FBQ2xCLFFBQUksWUFBWSxLQUFLLGVBQWUsYUFBYSxLQUFLLGFBQWEsV0FBVyxHQUFHO0FBQy9FO0FBQUEsSUFDRjtBQUVBLFVBQU0sS0FBSyxlQUFlO0FBQzFCLFVBQU0sS0FBSyxZQUFZO0FBQUEsTUFDckI7QUFBQSxNQUNBLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMO0FBQUEsSUFDRjtBQUNBLFNBQUssaUJBQWlCLE1BQU0sS0FBSyxXQUFXLEtBQUssWUFBWTtBQUFBLEVBQy9EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsTUFBYSxZQUNYLGNBQ0EsT0FDaUI7QUFDakIsU0FBSyxhQUFhO0FBQ2xCLFVBQU0sS0FBSyxLQUFLLENBQUMsYUFBYTtBQUM1QixlQUFTLFlBQVksSUFBSTtBQUFBLElBQzNCLENBQUM7QUFDRCxXQUFPLEtBQUssYUFBYSxtQkFBbUIsWUFBWTtBQUFBLEVBQzFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxNQUFhLFNBQVMsVUFBcUU7QUFDekYsVUFBTSxTQUEyQyxDQUFDO0FBQ2xELGVBQVcsQ0FBQyxjQUFjLFNBQVMsS0FBSyxLQUFLLFlBQVk7QUFDdkQsWUFBTSxvQkFBb0IsTUFBTSxVQUFVLFNBQVMsWUFBWSxHQUFHLFFBQVE7QUFDMUUsVUFBSSxtQkFBbUI7QUFDckIsZUFBTyxZQUFZLElBQUk7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQW1CTyxxQkFBb0M7QUFDekMsV0FBTyxLQUFLLG1CQUNSLFVBQVUsSUFDVixJQUFJLFFBQWMsQ0FBQyxZQUFZO0FBQy9CLFdBQUssd0JBQXdCLEtBQUssT0FBTztBQUFBLElBQzNDLENBQUM7QUFBQSxFQUNMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1UsaUJBQThCO0FBQ3RDLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsTUFBZ0IsYUFBYSxRQUFzQztBQUNqRSxlQUFXLGFBQWEsS0FBSywwQkFBMEI7QUFDckQsZ0JBQVUsTUFBTTtBQUFBLElBQ2xCO0FBQ0EsVUFBTSxVQUFVO0FBQUEsRUFDbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE1BQWdCLGVBQ2QsY0FDQSxnQkFDZTtBQUNmLFVBQU0sVUFBVTtBQUFBLEVBQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsTUFBZ0IsZUFBZSxRQUF3RjtBQUNySCxVQUFNO0FBQUEsTUFDSixTQUFTO0FBQUEsTUFDVCxVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsSUFDWixJQUFJO0FBQ0osVUFBTSxVQUFVO0FBQUEsRUFDbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUFnQixlQUFlLFNBQXVDO0FBQ3BFLFVBQU0sVUFBVTtBQUFBLEVBQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1VLG1DQUF5QztBQUNqRCxTQUFLO0FBQUEsRUFDUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNVSxxQkFBMkI7QUFDbkMsU0FBSztBQUFBLEVBQ1A7QUFBQSxFQUVBLE1BQWMsY0FBYyxVQUFtRDtBQUM3RSxVQUFNLFNBQVMsTUFBTSxLQUFLLG9CQUFvQixRQUFRO0FBQ3RELFVBQU0sT0FBTyxLQUFLLFVBQVUsTUFBTTtBQUNsQyxVQUFNLGNBQWMsS0FBSyxNQUFNLElBQUk7QUFDbkMsV0FBTyxNQUFNLEtBQUssb0JBQW9CLFdBQVc7QUFBQSxFQUNuRDtBQUFBLEVBRUEsTUFBYyxXQUNaLE9BQzhDO0FBQzlDLFdBQU87QUFBQSxNQUNMLGlCQUFpQixNQUFNLEtBQUssY0FBYyxNQUFNLGVBQWU7QUFBQSxNQUMvRCxhQUFhLE1BQU0sS0FBSyxjQUFjLE1BQU0sV0FBVztBQUFBLE1BQ3ZELG9CQUFvQixFQUFFLEdBQUcsTUFBTSxtQkFBbUI7QUFBQSxJQUNwRDtBQUFBLEVBQ0Y7QUFBQSxFQUVRLHFCQUEwRDtBQUNoRSxXQUFPO0FBQUEsTUFDTCxpQkFBaUIsSUFBSSxLQUFLLG9CQUFvQjtBQUFBLE1BQzlDLGFBQWEsSUFBSSxLQUFLLG9CQUFvQjtBQUFBLE1BQzFDLG9CQUFvQixPQUFzRCxDQUFDLENBQUM7QUFBQSxJQUM5RTtBQUFBLEVBQ0Y7QUFBQSxFQUVBLE1BQWMsS0FBSyxnQkFBK0U7QUFDaEcsUUFBSTtBQUNGLFlBQU0sZUFBZSxLQUFLLGFBQWEsV0FBVztBQUFBLElBQ3BELFVBQUU7QUFDQSxZQUFNLG1CQUFtQixNQUFNLEtBQUssU0FBUyxLQUFLLGFBQWEsV0FBVztBQUMxRSxpQkFBVyxnQkFBZ0IsS0FBSyxlQUFlO0FBQzdDLGNBQU0sb0JBQW9CLGlCQUFpQixZQUFZLEtBQUs7QUFDNUQsYUFBSyxhQUFhLG1CQUFtQixZQUFZLElBQUk7QUFDckQsY0FBTSxXQUFXLEtBQUs7QUFDdEIsYUFBSyxhQUFhLGdCQUFnQixZQUFZLElBQUksb0JBQzlDLFNBQVMsWUFBWSxJQUNyQixLQUFLLGFBQWEsWUFBWSxZQUFZO0FBQUEsTUFDaEQ7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRVEsb0JBQW9CLFVBQThEO0FBQ3hGLFdBQU8sT0FBTyxhQUFhLFlBQWEsS0FBSyxjQUEyQixTQUFTLFFBQVE7QUFBQSxFQUMzRjtBQUFBLEVBRVEscUJBQTJCO0FBQ2pDLFNBQUssbUJBQW1CO0FBRXhCLFVBQU0sWUFBWSxLQUFLLHdCQUF3QixPQUFPLENBQUM7QUFDdkQsZUFBVyxXQUFXLFdBQVc7QUFDL0IsY0FBUTtBQUFBLElBQ1Y7QUFBQSxFQUNGO0FBQUEsRUFFQSxNQUFjLG9CQUFvQixXQUFtRDtBQUNuRixnQkFBWSxLQUFLLGVBQWUsRUFBRSwyQkFBMkIsU0FBUztBQUN0RSxVQUFNLEtBQUssYUFBYSxTQUFTO0FBRWpDLFVBQU0sV0FBVyxJQUFJLEtBQUssb0JBQW9CO0FBQzlDLFVBQU0sV0FBVyxLQUFLO0FBRXRCLGVBQVcsQ0FBQyxjQUFjLEtBQUssS0FBSyxPQUFPLFFBQVEsU0FBUyxHQUFHO0FBQzdELFVBQUksQ0FBQyxLQUFLLG9CQUFvQixZQUFZLEdBQUc7QUFDM0MsK0JBQXVCLGlEQUFpRCxFQUFFLHFCQUFxQixZQUFZLEVBQUU7QUFDN0c7QUFBQSxNQUNGO0FBSUEsVUFBSSxVQUFVLFFBQVc7QUFDdkI7QUFBQSxNQUNGO0FBRUEsVUFBSSxPQUFPLFVBQVUsT0FBTyxTQUFTLFlBQVksR0FBRztBQUNsRCwrQkFBdUIsaURBQWlEO0FBQUEsVUFDdEU7QUFBQSxVQUNBO0FBQUEsWUFDRSxjQUFjLFNBQVMsWUFBWTtBQUFBLFlBQ25DO0FBQUEsWUFDQTtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGVBQVMsWUFBWSxJQUFJO0FBQUEsSUFDM0I7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsTUFBYyxpQkFBZ0M7QUFDNUMsVUFBTSxLQUFLLFlBQVksU0FBUyxNQUFNLEtBQUssb0JBQW9CLEtBQUssYUFBYSxXQUFXLENBQUM7QUFBQSxFQUMvRjtBQUFBLEVBRVEsZ0JBQWdCLFFBQWdGO0FBQ3RHLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixVQUFNLFdBQVcsS0FBSztBQUN0QixTQUFLLGFBQWEsWUFBWSxZQUFZLElBQUk7QUFDOUMsU0FBSyxhQUFhLG1CQUFtQixZQUFZLElBQUkscUJBQXFCO0FBQzFFLFNBQUssYUFBYSxnQkFBZ0IsWUFBWSxJQUFJLG9CQUFvQixTQUFTLFlBQVksSUFBSTtBQUFBLEVBQ2pHO0FBQUEsRUFFQSxNQUFjLG9CQUFvQixVQUFrRDtBQUNsRixVQUFNLFlBQTJCLENBQUM7QUFFbEMsZUFBVyxnQkFBZ0IsS0FBSyxlQUFlO0FBQzdDLGdCQUFVLFlBQVksSUFBSSxTQUFTLFlBQVk7QUFBQSxJQUNqRDtBQUVBLFVBQU0sS0FBSyxlQUFlLFNBQVM7QUFFbkMsV0FBTyxLQUFLLGVBQWUsRUFBRSwyQkFBMkIsU0FBUztBQUFBLEVBQ25FO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
@@ -31,7 +31,7 @@ export interface RenameDeleteHandlerSettings {
|
|
|
31
31
|
/**
|
|
32
32
|
* A behavior of the rename/delete handler when deleting empty folders.
|
|
33
33
|
*/
|
|
34
|
-
emptyFolderBehavior: EmptyFolderBehavior;
|
|
34
|
+
readonly emptyFolderBehavior: EmptyFolderBehavior;
|
|
35
35
|
/**
|
|
36
36
|
* Where to move an attachment that a deletion would otherwise strand — one that survives because another
|
|
37
37
|
* note still references it, but is left sitting in a folder whose owning note is gone.
|
|
@@ -40,39 +40,39 @@ export interface RenameDeleteHandlerSettings {
|
|
|
40
40
|
* than guesses. Returning `null` — or not implementing this at all — keeps the attachment where it is,
|
|
41
41
|
* which is the behavior every consumer had before this member existed.
|
|
42
42
|
*/
|
|
43
|
-
getRescuePath?: (params: GetRescuePathParams) => Promise<null | string>;
|
|
43
|
+
readonly getRescuePath?: (params: GetRescuePathParams) => Promise<null | string>;
|
|
44
44
|
/**
|
|
45
45
|
* Whether the path is a note.
|
|
46
46
|
*/
|
|
47
|
-
isNote: (path: string) => boolean;
|
|
47
|
+
readonly isNote: (path: string) => boolean;
|
|
48
48
|
/**
|
|
49
49
|
* Whether to ignore the path.
|
|
50
50
|
*/
|
|
51
|
-
isPathIgnored: (path: string) => boolean;
|
|
51
|
+
readonly isPathIgnored: (path: string) => boolean;
|
|
52
52
|
/**
|
|
53
53
|
* Whether to delete conflicting attachments.
|
|
54
54
|
*/
|
|
55
|
-
shouldDeleteConflictingAttachments: boolean;
|
|
55
|
+
readonly shouldDeleteConflictingAttachments: boolean;
|
|
56
56
|
/**
|
|
57
57
|
* Whether to handle deletions.
|
|
58
58
|
*/
|
|
59
|
-
shouldHandleDeletions: boolean;
|
|
59
|
+
readonly shouldHandleDeletions: boolean;
|
|
60
60
|
/**
|
|
61
61
|
* Whether to handle renames.
|
|
62
62
|
*/
|
|
63
|
-
shouldHandleRenames: boolean;
|
|
63
|
+
readonly shouldHandleRenames: boolean;
|
|
64
64
|
/**
|
|
65
65
|
* Whether to rename attachment files when a note is renamed.
|
|
66
66
|
*/
|
|
67
|
-
shouldRenameAttachmentFiles: boolean;
|
|
67
|
+
readonly shouldRenameAttachmentFiles: boolean;
|
|
68
68
|
/**
|
|
69
69
|
* Whether to rename attachment folder when a note is renamed.
|
|
70
70
|
*/
|
|
71
|
-
shouldRenameAttachmentFolder: boolean;
|
|
71
|
+
readonly shouldRenameAttachmentFolder: boolean;
|
|
72
72
|
/**
|
|
73
73
|
* Whether to update file name aliases when a note is renamed.
|
|
74
74
|
*/
|
|
75
|
-
shouldUpdateFileNameAliases: boolean;
|
|
75
|
+
readonly shouldUpdateFileNameAliases: boolean;
|
|
76
76
|
}
|
|
77
77
|
interface RenameDeleteHandlerComponentConstructorParams {
|
|
78
78
|
readonly abortSignalComponent: AbortSignalComponent;
|