@mnaoumov/obsidian-lib 10.12.0 → 11.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.
Files changed (399) hide show
  1. package/components/worker-component/package.json +6 -0
  2. package/components/worker-pool-component/package.json +6 -0
  3. package/dist/lib/cjs/__merged.cjs +409 -292
  4. package/dist/lib/cjs/__merged.d.cts +17 -8
  5. package/dist/lib/cjs/anchored-suggest.cjs +1 -1
  6. package/dist/lib/cjs/app.cjs +2 -2
  7. package/dist/lib/cjs/async-with-notice.cjs +4 -4
  8. package/dist/lib/cjs/attachment-path.cjs +9 -9
  9. package/dist/lib/cjs/attachment-path.d.cts +3 -3
  10. package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
  11. package/dist/lib/cjs/backlink-index.cjs +5 -5
  12. package/dist/lib/cjs/backlink.cjs +7 -7
  13. package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
  14. package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
  15. package/dist/lib/cjs/bug-report.cjs +3 -3
  16. package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
  17. package/dist/lib/cjs/bulk-operation.cjs +2 -2
  18. package/dist/lib/cjs/callout.cjs +6 -6
  19. package/dist/lib/cjs/canvas.cjs +11 -9
  20. package/dist/lib/cjs/canvas.d.cts +13 -0
  21. package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
  22. package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
  23. package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
  24. package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
  25. package/dist/lib/cjs/codemirror/index.cjs +7 -7
  26. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
  27. package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
  28. package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
  29. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
  30. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
  31. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
  32. package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
  33. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
  34. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
  35. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
  36. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
  37. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
  38. package/dist/lib/cjs/command-handlers/index.cjs +15 -15
  39. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +6 -6
  40. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
  41. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
  42. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
  43. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
  44. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
  45. package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
  46. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
  47. package/dist/lib/cjs/community-plugins.cjs +3 -3
  48. package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
  49. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  50. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +3 -3
  51. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  52. package/dist/lib/cjs/components/async-events-component.cjs +1 -1
  53. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
  54. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
  55. package/dist/lib/cjs/components/component-ex.cjs +21 -11
  56. package/dist/lib/cjs/components/component-ex.d.cts +11 -0
  57. package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
  58. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
  59. package/dist/lib/cjs/components/disposable-component.cjs +2 -2
  60. package/dist/lib/cjs/components/embed-extensions-component.cjs +1 -1
  61. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +8 -8
  62. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
  63. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
  64. package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
  65. package/dist/lib/cjs/components/index.cjs +46 -40
  66. package/dist/lib/cjs/components/index.d.cts +2 -0
  67. package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
  68. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
  69. package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
  70. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  71. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  72. package/dist/lib/cjs/components/plugin-gate-component.cjs +68 -28
  73. package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
  74. package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
  75. package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
  76. package/dist/lib/cjs/components/plugin-settings-component.cjs +113 -17
  77. package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
  78. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
  79. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
  80. package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
  81. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
  82. package/dist/lib/cjs/components/registry-component.cjs +2 -2
  83. package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
  84. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
  85. package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
  86. package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
  87. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  88. package/dist/lib/cjs/components/shared-component-pool-component.cjs +6 -6
  89. package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
  90. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
  91. package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
  92. package/dist/lib/cjs/components/worker-component.cjs +363 -0
  93. package/dist/lib/cjs/components/worker-component.d.cts +156 -0
  94. package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
  95. package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
  96. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +7 -7
  97. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  98. package/dist/lib/cjs/constructors/index.cjs +1 -1
  99. package/dist/lib/cjs/data-handler.cjs +111 -4
  100. package/dist/lib/cjs/data-handler.d.cts +92 -1
  101. package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
  102. package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
  103. package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
  104. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  105. package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
  106. package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
  107. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
  108. package/dist/lib/cjs/data-stores/index.cjs +6 -6
  109. package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
  110. package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
  111. package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
  112. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
  113. package/dist/lib/cjs/dataview-link.cjs +2 -2
  114. package/dist/lib/cjs/dataview.cjs +27 -7
  115. package/dist/lib/cjs/dataview.d.cts +14 -0
  116. package/dist/lib/cjs/debug.cjs +3 -3
  117. package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
  118. package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
  119. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
  120. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
  121. package/dist/lib/cjs/desktop-git-runner.cjs +2 -2
  122. package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
  123. package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
  124. package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
  125. package/dist/lib/cjs/disposable.cjs +150 -0
  126. package/dist/lib/cjs/disposable.d.cts +39 -0
  127. package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
  128. package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
  129. package/dist/lib/cjs/editor-suggest.cjs +1 -1
  130. package/dist/lib/cjs/editor.cjs +6 -6
  131. package/dist/lib/cjs/events.cjs +2 -2
  132. package/dist/lib/cjs/extensions-registrar.cjs +1 -1
  133. package/dist/lib/cjs/feature-request.cjs +1 -1
  134. package/dist/lib/cjs/file-change.cjs +10 -10
  135. package/dist/lib/cjs/file-explorer.cjs +2 -2
  136. package/dist/lib/cjs/file-manager.cjs +5 -5
  137. package/dist/lib/cjs/file-system.cjs +10 -10
  138. package/dist/lib/cjs/folder-note.cjs +4 -4
  139. package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
  140. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
  141. package/dist/lib/cjs/frontmatter.cjs +5 -5
  142. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  143. package/dist/lib/cjs/hotkey.cjs +1 -1
  144. package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
  145. package/dist/lib/cjs/html-element.cjs +2 -2
  146. package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
  147. package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
  148. package/dist/lib/cjs/i18n/i18n.cjs +7 -7
  149. package/dist/lib/cjs/i18n/index.cjs +4 -4
  150. package/dist/lib/cjs/i18n/locales/en.cjs +5 -1
  151. package/dist/lib/cjs/i18n/locales/en.d.cts +4 -0
  152. package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
  153. package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
  154. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +4 -0
  155. package/dist/lib/cjs/index.cjs +145 -127
  156. package/dist/lib/cjs/index.d.cts +6 -0
  157. package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
  158. package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
  159. package/dist/lib/cjs/library-styles.cjs +3 -3
  160. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
  161. package/dist/lib/cjs/link.cjs +76 -56
  162. package/dist/lib/cjs/link.d.cts +20 -14
  163. package/dist/lib/cjs/logger.cjs +4 -4
  164. package/dist/lib/cjs/loop.cjs +10 -16
  165. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
  166. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
  167. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
  168. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
  169. package/dist/lib/cjs/markdown-view.cjs +3 -3
  170. package/dist/lib/cjs/markdown.cjs +12 -12
  171. package/dist/lib/cjs/metadata-cache.cjs +23 -23
  172. package/dist/lib/cjs/metadata-cache.d.cts +5 -4
  173. package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
  174. package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
  175. package/dist/lib/cjs/mobile-app-info.cjs +1 -1
  176. package/dist/lib/cjs/modals/alert.cjs +4 -4
  177. package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
  178. package/dist/lib/cjs/modals/confirm.cjs +4 -4
  179. package/dist/lib/cjs/modals/copy-text-manually.cjs +4 -4
  180. package/dist/lib/cjs/modals/index.cjs +12 -12
  181. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  182. package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
  183. package/dist/lib/cjs/modals/modal.cjs +3 -3
  184. package/dist/lib/cjs/modals/prompt.cjs +10 -10
  185. package/dist/lib/cjs/modals/prompt.d.cts +1 -1
  186. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +5 -5
  187. package/dist/lib/cjs/modals/select-item.cjs +6 -6
  188. package/dist/lib/cjs/modals/select-option.cjs +3 -3
  189. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
  190. package/dist/lib/cjs/note-priority.cjs +2 -2
  191. package/dist/lib/cjs/notebook-navigator.cjs +12 -2
  192. package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
  193. package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
  194. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
  195. package/dist/lib/cjs/obsidian-settings.cjs +1 -1
  196. package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
  197. package/dist/lib/cjs/parse-link.cjs +14 -14
  198. package/dist/lib/cjs/path-compatibility.cjs +368 -0
  199. package/dist/lib/cjs/path-compatibility.d.cts +263 -0
  200. package/dist/lib/cjs/path-settings.cjs +3 -3
  201. package/dist/lib/cjs/pdf.cjs +2 -2
  202. package/dist/lib/cjs/plugin/index.cjs +16 -13
  203. package/dist/lib/cjs/plugin/index.d.cts +1 -0
  204. package/dist/lib/cjs/plugin/plugin-api.cjs +8 -8
  205. package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
  206. package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
  207. package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
  208. package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
  209. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
  210. package/dist/lib/cjs/plugin/plugin-install-state.cjs +4 -4
  211. package/dist/lib/cjs/plugin/plugin-instance.cjs +14 -12
  212. package/dist/lib/cjs/plugin/plugin-instance.d.cts +7 -0
  213. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
  214. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
  215. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
  216. package/dist/lib/cjs/plugin/plugin.cjs +118 -34
  217. package/dist/lib/cjs/plugin/plugin.d.cts +28 -5
  218. package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
  219. package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
  220. package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
  221. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
  222. package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
  223. package/dist/lib/cjs/popovers/index.cjs +3 -3
  224. package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
  225. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  226. package/dist/lib/cjs/queue.cjs +8 -8
  227. package/dist/lib/cjs/react/app-context.cjs +3 -3
  228. package/dist/lib/cjs/react/index.cjs +1 -1
  229. package/dist/lib/cjs/reference-definition.cjs +1 -1
  230. package/dist/lib/cjs/reference.cjs +3 -3
  231. package/dist/lib/cjs/release-asset.cjs +5 -5
  232. package/dist/lib/cjs/rendered-markdown.cjs +4 -4
  233. package/dist/lib/cjs/request-url.cjs +4 -4
  234. package/dist/lib/cjs/resource-lock.cjs +46 -42
  235. package/dist/lib/cjs/resource-lock.d.cts +8 -7
  236. package/dist/lib/cjs/resource-url.cjs +3 -3
  237. package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
  238. package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
  239. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
  240. package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
  241. package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
  242. package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
  243. package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
  244. package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
  245. package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
  246. package/dist/lib/cjs/setting-components/index.cjs +30 -30
  247. package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
  248. package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
  249. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
  250. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
  251. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
  252. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
  253. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
  254. package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
  255. package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
  256. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
  257. package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
  258. package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
  259. package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
  260. package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
  261. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
  262. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
  263. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
  264. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
  265. package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
  266. package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
  267. package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
  268. package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
  269. package/dist/lib/cjs/setting-ex.cjs +26 -26
  270. package/dist/lib/cjs/setting-group-ex.cjs +2 -2
  271. package/dist/lib/cjs/settings-recovery.cjs +217 -0
  272. package/dist/lib/cjs/settings-recovery.d.cts +178 -0
  273. package/dist/lib/cjs/settings-tabs.cjs +5 -5
  274. package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
  275. package/dist/lib/cjs/templater.cjs +14 -4
  276. package/dist/lib/cjs/templater.d.cts +6 -0
  277. package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
  278. package/dist/lib/cjs/transformers/index.cjs +1 -1
  279. package/dist/lib/cjs/trusted-input.cjs +1 -1
  280. package/dist/lib/cjs/validation.cjs +4 -4
  281. package/dist/lib/cjs/vault-delete.cjs +6 -6
  282. package/dist/lib/cjs/vault-transaction.cjs +5 -5
  283. package/dist/lib/cjs/vault.cjs +12 -12
  284. package/dist/lib/cjs/view-registrar.cjs +1 -1
  285. package/dist/lib/cjs/virtual-file.cjs +16 -14
  286. package/dist/lib/cjs/virtual-file.d.cts +2 -1
  287. package/dist/lib/cjs/wasm.cjs +119 -0
  288. package/dist/lib/cjs/wasm.d.cts +54 -0
  289. package/dist/lib/cjs/worker-protocol.cjs +209 -0
  290. package/dist/lib/cjs/worker-protocol.d.cts +282 -0
  291. package/dist/lib/cjs/workspace.cjs +1 -1
  292. package/dist/lib/esm/__merged.d.mts +17 -8
  293. package/dist/lib/esm/__merged.mjs +133 -3
  294. package/dist/lib/esm/app.mjs +2 -2
  295. package/dist/lib/esm/attachment-path.d.mts +3 -3
  296. package/dist/lib/esm/attachment-path.mjs +2 -2
  297. package/dist/lib/esm/backlink-index.mjs +2 -2
  298. package/dist/lib/esm/canvas.d.mts +13 -0
  299. package/dist/lib/esm/canvas.mjs +6 -5
  300. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
  301. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
  302. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
  303. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
  304. package/dist/lib/esm/components/component-ex.d.mts +11 -0
  305. package/dist/lib/esm/components/component-ex.mjs +19 -6
  306. package/dist/lib/esm/components/disposable-component.mjs +1 -1
  307. package/dist/lib/esm/components/index.d.mts +2 -0
  308. package/dist/lib/esm/components/index.mjs +5 -1
  309. package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
  310. package/dist/lib/esm/components/plugin-gate-component.mjs +57 -14
  311. package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
  312. package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
  313. package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
  314. package/dist/lib/esm/components/plugin-settings-component.mjs +99 -3
  315. package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
  316. package/dist/lib/esm/components/worker-component.d.mts +156 -0
  317. package/dist/lib/esm/components/worker-component.mjs +279 -0
  318. package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
  319. package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
  320. package/dist/lib/esm/components/workspace-layout-state-component.mjs +1 -1
  321. package/dist/lib/esm/data-handler.d.mts +92 -1
  322. package/dist/lib/esm/data-handler.mjs +112 -3
  323. package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
  324. package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
  325. package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
  326. package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
  327. package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
  328. package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
  329. package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
  330. package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
  331. package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
  332. package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
  333. package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
  334. package/dist/lib/esm/dataview.d.mts +14 -0
  335. package/dist/lib/esm/dataview.mjs +19 -1
  336. package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
  337. package/dist/lib/esm/demo-vault-helper.mjs +29 -1
  338. package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
  339. package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
  340. package/dist/lib/esm/disposable.d.mts +39 -0
  341. package/dist/lib/esm/disposable.mjs +64 -0
  342. package/dist/lib/esm/file-system.mjs +2 -2
  343. package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
  344. package/dist/lib/esm/generated-during-build.mjs +1 -1
  345. package/dist/lib/esm/i18n/locales/en.d.mts +4 -0
  346. package/dist/lib/esm/i18n/locales/en.mjs +5 -1
  347. package/dist/lib/esm/i18n/locales/translations-map.d.mts +4 -0
  348. package/dist/lib/esm/index.d.mts +6 -0
  349. package/dist/lib/esm/index.mjs +13 -1
  350. package/dist/lib/esm/link.d.mts +20 -14
  351. package/dist/lib/esm/link.mjs +57 -38
  352. package/dist/lib/esm/loop.mjs +2 -8
  353. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
  354. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
  355. package/dist/lib/esm/metadata-cache.d.mts +5 -4
  356. package/dist/lib/esm/metadata-cache.mjs +6 -6
  357. package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
  358. package/dist/lib/esm/misplaced-attachment.mjs +212 -0
  359. package/dist/lib/esm/modals/prompt.d.mts +1 -1
  360. package/dist/lib/esm/modals/prompt.mjs +1 -1
  361. package/dist/lib/esm/notebook-navigator.d.mts +6 -0
  362. package/dist/lib/esm/notebook-navigator.mjs +11 -2
  363. package/dist/lib/esm/parse-link.mjs +4 -4
  364. package/dist/lib/esm/path-compatibility.d.mts +263 -0
  365. package/dist/lib/esm/path-compatibility.mjs +277 -0
  366. package/dist/lib/esm/plugin/index.d.mts +1 -0
  367. package/dist/lib/esm/plugin/index.mjs +4 -2
  368. package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
  369. package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
  370. package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
  371. package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
  372. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  373. package/dist/lib/esm/plugin/plugin-instance.d.mts +7 -0
  374. package/dist/lib/esm/plugin/plugin-instance.mjs +2 -1
  375. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
  376. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
  377. package/dist/lib/esm/plugin/plugin.d.mts +28 -5
  378. package/dist/lib/esm/plugin/plugin.mjs +103 -9
  379. package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
  380. package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
  381. package/dist/lib/esm/release-asset.mjs +1 -1
  382. package/dist/lib/esm/resource-lock.d.mts +8 -7
  383. package/dist/lib/esm/resource-lock.mjs +31 -26
  384. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
  385. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
  386. package/dist/lib/esm/settings-recovery.d.mts +178 -0
  387. package/dist/lib/esm/settings-recovery.mjs +125 -0
  388. package/dist/lib/esm/settings-tabs.mjs +2 -2
  389. package/dist/lib/esm/templater.d.mts +6 -0
  390. package/dist/lib/esm/templater.mjs +11 -2
  391. package/dist/lib/esm/vault.mjs +1 -1
  392. package/dist/lib/esm/virtual-file.d.mts +2 -1
  393. package/dist/lib/esm/virtual-file.mjs +7 -5
  394. package/dist/lib/esm/wasm.d.mts +54 -0
  395. package/dist/lib/esm/wasm.mjs +30 -0
  396. package/dist/lib/esm/worker-protocol.d.mts +282 -0
  397. package/dist/lib/esm/worker-protocol.mjs +113 -0
  398. package/package.json +9 -8
  399. package/plugin/third-party-plugin/package.json +6 -0
@@ -0,0 +1,185 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function patchObsidianRequire() {
6
+ const originalRequire = require;
7
+ if (!originalRequire || originalRequire.__isPatched) {
8
+ return;
9
+ }
10
+ require = Object.assign(
11
+ (id) => requirePatched(id),
12
+ originalRequire,
13
+ {
14
+ __isPatched: true
15
+ }
16
+ );
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
+ }
20
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
+ "@codemirror/autocomplete",
22
+ "@codemirror/collab",
23
+ "@codemirror/commands",
24
+ "@codemirror/language",
25
+ "@codemirror/lint",
26
+ "@codemirror/search",
27
+ "@codemirror/state",
28
+ "@codemirror/text",
29
+ "@codemirror/view",
30
+ "@lezer/common",
31
+ "@lezer/highlight",
32
+ "@lezer/lr",
33
+ "obsidian"
34
+ ]);
35
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
36
+ "@codemirror/closebrackets",
37
+ "@codemirror/comment",
38
+ "@codemirror/fold",
39
+ "@codemirror/gutter",
40
+ "@codemirror/highlight",
41
+ "@codemirror/history",
42
+ "@codemirror/matchbrackets",
43
+ "@codemirror/panel",
44
+ "@codemirror/rangeset",
45
+ "@codemirror/rectangular-selection",
46
+ "@codemirror/stream-parser",
47
+ "@codemirror/tooltip"
48
+ ]);
49
+ function requirePatched(id) {
50
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
51
+ return originalRequire?.(id);
52
+ }
53
+ const app = globalThis.app;
54
+ if (app?.isMobile) {
55
+ if (id === "process" || id === "node:process") {
56
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
57
+ return process;
58
+ }
59
+ } else {
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
+ }
64
+ }
65
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
66
+ return {};
67
+ }
68
+ })();
69
+
70
+ "use strict";
71
+ var __defProp = Object.defineProperty;
72
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
73
+ var __getOwnPropNames = Object.getOwnPropertyNames;
74
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
75
+ var __export = (target, all) => {
76
+ for (var name in all)
77
+ __defProp(target, name, { get: all[name], enumerable: true });
78
+ };
79
+ var __copyProps = (to, from, except, desc) => {
80
+ if (from && typeof from === "object" || typeof from === "function") {
81
+ for (let key of __getOwnPropNames(from))
82
+ if (!__hasOwnProp.call(to, key) && key !== except)
83
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
84
+ }
85
+ return to;
86
+ };
87
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
88
+ var worker_pool_component_exports = {};
89
+ __export(worker_pool_component_exports, {
90
+ MAX_DEFAULT_WORKER_POOL_SIZE: () => MAX_DEFAULT_WORKER_POOL_SIZE,
91
+ WorkerPoolComponent: () => WorkerPoolComponent,
92
+ getDefaultWorkerPoolSize: () => getDefaultWorkerPoolSize
93
+ });
94
+ module.exports = __toCommonJS(worker_pool_component_exports);
95
+ var import_component_ex = require("./component-ex.cjs");
96
+ var import_worker_component = require("./worker-component.cjs");
97
+ const MAX_DEFAULT_WORKER_POOL_SIZE = 4;
98
+ class WorkerPoolComponent extends import_component_ex.ComponentEx {
99
+ /**
100
+ * Creates the pool.
101
+ *
102
+ * @param params - The parameters.
103
+ */
104
+ constructor(params) {
105
+ super();
106
+ this.params = params;
107
+ const size = params.size ?? getDefaultWorkerPoolSize();
108
+ if (!Number.isSafeInteger(size) || size < 1) {
109
+ throw new Error(`A worker pool needs a positive integer size, not ${String(size)}`);
110
+ }
111
+ for (let index = 0; index < size; index++) {
112
+ const workerParams = {
113
+ source: params.source,
114
+ ...params.fallbackHandlers !== void 0 && { fallbackHandlers: params.fallbackHandlers },
115
+ ...params.name !== void 0 && { name: `${params.name} ${String(index)}` }
116
+ };
117
+ this.workers.push(this.addChild(new import_worker_component.WorkerComponent(workerParams)));
118
+ }
119
+ }
120
+ params;
121
+ /**
122
+ * The number of workers.
123
+ *
124
+ * @returns The size.
125
+ */
126
+ get size() {
127
+ return this.workers.length;
128
+ }
129
+ workers = [];
130
+ /**
131
+ * Calls a method on the least busy worker.
132
+ *
133
+ * @typeParam TMethod - The method.
134
+ * @param method - The method name.
135
+ * @param callArguments - The method's arguments.
136
+ * @param options - The call options.
137
+ * @returns The method's result.
138
+ */
139
+ async call(method, callArguments, options) {
140
+ let leastBusy = this.getWorker(0);
141
+ for (const worker of this.workers) {
142
+ if (worker.pendingCallCount < leastBusy.pendingCallCount) {
143
+ leastBusy = worker;
144
+ }
145
+ }
146
+ return await leastBusy.call(method, callArguments, options);
147
+ }
148
+ /**
149
+ * Calls a method on every worker with the same arguments, for instance to configure them all.
150
+ *
151
+ * @typeParam TMethod - The method.
152
+ * @param method - The method name.
153
+ * @param callArguments - The method's arguments, cloned for each worker; nothing can be transferred to all of them.
154
+ * @param abortSignal - Cancels every call.
155
+ * @returns The results, in worker order.
156
+ */
157
+ async callAll(method, callArguments, abortSignal) {
158
+ const options = abortSignal === void 0 ? {} : { abortSignal };
159
+ return await Promise.all(this.workers.map(async (worker) => await worker.call(method, callArguments, options)));
160
+ }
161
+ /**
162
+ * Gets one worker, for jobs that keep state in a particular worker.
163
+ *
164
+ * @param index - The worker index, from `0` to {@link WorkerPoolComponent.size} minus one.
165
+ * @returns The worker.
166
+ */
167
+ getWorker(index) {
168
+ const worker = this.workers[index];
169
+ if (!worker) {
170
+ throw new Error(`The worker pool has no worker at index ${String(index)}`);
171
+ }
172
+ return worker;
173
+ }
174
+ }
175
+ function getDefaultWorkerPoolSize(hardwareConcurrency) {
176
+ const processorCount = hardwareConcurrency ?? window.navigator.hardwareConcurrency;
177
+ return Math.max(1, Math.min(MAX_DEFAULT_WORKER_POOL_SIZE, processorCount - 1));
178
+ }
179
+ // Annotate the CommonJS export names for ESM import in node:
180
+ 0 && (module.exports = {
181
+ MAX_DEFAULT_WORKER_POOL_SIZE,
182
+ WorkerPoolComponent,
183
+ getDefaultWorkerPoolSize
184
+ });
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3dvcmtlci1wb29sLWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSBjb21wb25lbnQgdGhhdCBvd25zIHNldmVyYWwgd29ya2VycyBidWlsdCBmcm9tIHRoZSBzYW1lIGJ1bmRsZWQgc291cmNlIGFuZCBzcHJlYWRzIGNhbGxzIG92ZXIgdGhlbS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFdvcmtlckFwaSxcbiAgV29ya2VyQXBpSGFuZGxlcnNcbn0gZnJvbSAnLi4vd29ya2VyLXByb3RvY29sLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgV29ya2VyQ29tcG9uZW50Q2FsbE9wdGlvbnMsXG4gIFdvcmtlck1ldGhvZCxcbiAgV29ya2VyTWV0aG9kUmVzdWx0XG59IGZyb20gJy4vd29ya2VyLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgV29ya2VyQ29tcG9uZW50IH0gZnJvbSAnLi93b3JrZXItY29tcG9uZW50LnRzJztcblxuLyoqXG4gKiBUaGUgbW9zdCB3b3JrZXJzIHtAbGluayBnZXREZWZhdWx0V29ya2VyUG9vbFNpemV9IHN1Z2dlc3RzLCBzbyBhIHBvb2wgb24gYSBtYW55LWNvcmUgZGVza3RvcCBkb2VzIG5vdCBzdGFydmVcbiAqIE9ic2lkaWFuJ3Mgb3duIHJlbmRlcmVyIG9mIG1lbW9yeS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9ERUZBVUxUX1dPUktFUl9QT09MX1NJWkUgPSA0O1xuXG4vKipcbiAqIE9wdGlvbnMgb2Yge0BsaW5rIFdvcmtlclBvb2xDb21wb25lbnQuY2FsbH06IHRoZSBzYW1lIGFzIHtAbGluayBXb3JrZXJDb21wb25lbnQuY2FsbH0ncy5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2VyUG9vbENvbXBvbmVudENhbGxPcHRpb25zID0gV29ya2VyQ29tcG9uZW50Q2FsbE9wdGlvbnM7XG5cbi8qKlxuICogUGFyYW1ldGVycyBvZiB7QGxpbmsgV29ya2VyUG9vbENvbXBvbmVudH0uXG4gKlxuICogQHR5cGVQYXJhbSBUQXBpIC0gVGhlIEFQSSBldmVyeSB3b3JrZXIgZXhwb3Nlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJQb29sQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXM8VEFwaSBleHRlbmRzIFdvcmtlckFwaTxUQXBpPj4ge1xuICAvKipcbiAgICogVGhlIGhhbmRsZXJzIHRvIHJ1biBvbiB0aGUgbWFpbiB0aHJlYWQgd2hlbiBubyBgV29ya2VyYCBjYW4gYmUgY3JlYXRlZC4gU2VlIHtAbGluayBXb3JrZXJDb21wb25lbnR9LlxuICAgKi9cbiAgcmVhZG9ubHkgZmFsbGJhY2tIYW5kbGVycz86IFdvcmtlckFwaUhhbmRsZXJzPFRBcGk+O1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2VycycgbmFtZSBwcmVmaXgsIHNob3duIGJ5IHRoZSBkZXZlbG9wZXIgdG9vbHM7IGVhY2ggd29ya2VyIGdldHMgYDxuYW1lPiA8aW5kZXg+YC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygd29ya2Vycy4gRGVmYXVsdHMgdG8ge0BsaW5rIGdldERlZmF1bHRXb3JrZXJQb29sU2l6ZX0uXG4gICAqL1xuICByZWFkb25seSBzaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVuZGxlZCB3b3JrZXIgc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3ducyBhIGZpeGVkIG51bWJlciBvZiB7QGxpbmsgV29ya2VyQ29tcG9uZW50fSBjaGlsZHJlbiBhbmQgc2VuZHMgZWFjaCBjYWxsIHRvIHRoZSBvbmUgd2l0aCB0aGUgZmV3ZXN0IHBlbmRpbmcgY2FsbHMuXG4gKlxuICogVXNlIGl0IGZvciBDUFUtYm91bmQgam9icyB0aGF0IHNwbGl0IGludG8gaW5kZXBlbmRlbnQgY2FsbHMuIEEgam9iIHRoYXQga2VlcHMgc3RhdGUgaW4gYSB3b3JrZXIgKGEgbG9hZGVkIGNvcnB1cywgYW5cbiAqIGluc3RhbnRpYXRlZCBtb2R1bGUpIGFkZHJlc3NlcyBlYWNoIHdvcmtlciBieSBpbmRleCB0aHJvdWdoIHtAbGluayBXb3JrZXJQb29sQ29tcG9uZW50LmdldFdvcmtlcn0gaW5zdGVhZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIGV2ZXJ5IHdvcmtlciBleHBvc2VzLlxuICovXG5leHBvcnQgY2xhc3MgV29ya2VyUG9vbENvbXBvbmVudDxUQXBpIGV4dGVuZHMgV29ya2VyQXBpPFRBcGk+PiBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygd29ya2Vycy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNpemUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy53b3JrZXJzLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2VyczogV29ya2VyQ29tcG9uZW50PFRBcGk+W10gPSBbXTtcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcG9vbC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBwYXJhbXM6IFdvcmtlclBvb2xDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxUQXBpPikge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3Qgc2l6ZSA9IHBhcmFtcy5zaXplID8/IGdldERlZmF1bHRXb3JrZXJQb29sU2l6ZSgpO1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoc2l6ZSkgfHwgc2l6ZSA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSB3b3JrZXIgcG9vbCBuZWVkcyBhIHBvc2l0aXZlIGludGVnZXIgc2l6ZSwgbm90ICR7U3RyaW5nKHNpemUpfWApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgaW5kZXgrKykge1xuICAgICAgY29uc3Qgd29ya2VyUGFyYW1zID0ge1xuICAgICAgICBzb3VyY2U6IHBhcmFtcy5zb3VyY2UsXG4gICAgICAgIC4uLihwYXJhbXMuZmFsbGJhY2tIYW5kbGVycyAhPT0gdW5kZWZpbmVkICYmIHsgZmFsbGJhY2tIYW5kbGVyczogcGFyYW1zLmZhbGxiYWNrSGFuZGxlcnMgfSksXG4gICAgICAgIC4uLihwYXJhbXMubmFtZSAhPT0gdW5kZWZpbmVkICYmIHsgbmFtZTogYCR7cGFyYW1zLm5hbWV9ICR7U3RyaW5nKGluZGV4KX1gIH0pXG4gICAgICB9O1xuICAgICAgdGhpcy53b3JrZXJzLnB1c2godGhpcy5hZGRDaGlsZChuZXcgV29ya2VyQ29tcG9uZW50PFRBcGk+KHdvcmtlclBhcmFtcykpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgYSBtZXRob2Qgb24gdGhlIGxlYXN0IGJ1c3kgd29ya2VyLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRNZXRob2QgLSBUaGUgbWV0aG9kLlxuICAgKiBAcGFyYW0gbWV0aG9kIC0gVGhlIG1ldGhvZCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbEFyZ3VtZW50cyAtIFRoZSBtZXRob2QncyBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNhbGwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIG1ldGhvZCdzIHJlc3VsdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjYWxsPFRNZXRob2QgZXh0ZW5kcyBXb3JrZXJNZXRob2Q8VEFwaT4+KFxuICAgIG1ldGhvZDogVE1ldGhvZCxcbiAgICBjYWxsQXJndW1lbnRzOiBQYXJhbWV0ZXJzPFRBcGlbVE1ldGhvZF0+LFxuICAgIG9wdGlvbnM/OiBXb3JrZXJQb29sQ29tcG9uZW50Q2FsbE9wdGlvbnNcbiAgKTogUHJvbWlzZTxXb3JrZXJNZXRob2RSZXN1bHQ8VEFwaSwgVE1ldGhvZD4+IHtcbiAgICBsZXQgbGVhc3RCdXN5ID0gdGhpcy5nZXRXb3JrZXIoMCk7XG4gICAgZm9yIChjb25zdCB3b3JrZXIgb2YgdGhpcy53b3JrZXJzKSB7XG4gICAgICBpZiAod29ya2VyLnBlbmRpbmdDYWxsQ291bnQgPCBsZWFzdEJ1c3kucGVuZGluZ0NhbGxDb3VudCkge1xuICAgICAgICBsZWFzdEJ1c3kgPSB3b3JrZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBsZWFzdEJ1c3kuY2FsbChtZXRob2QsIGNhbGxBcmd1bWVudHMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIGEgbWV0aG9kIG9uIGV2ZXJ5IHdvcmtlciB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cywgZm9yIGluc3RhbmNlIHRvIGNvbmZpZ3VyZSB0aGVtIGFsbC5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUTWV0aG9kIC0gVGhlIG1ldGhvZC5cbiAgICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxBcmd1bWVudHMgLSBUaGUgbWV0aG9kJ3MgYXJndW1lbnRzLCBjbG9uZWQgZm9yIGVhY2ggd29ya2VyOyBub3RoaW5nIGNhbiBiZSB0cmFuc2ZlcnJlZCB0byBhbGwgb2YgdGhlbS5cbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gQ2FuY2VscyBldmVyeSBjYWxsLlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0cywgaW4gd29ya2VyIG9yZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNhbGxBbGw8VE1ldGhvZCBleHRlbmRzIFdvcmtlck1ldGhvZDxUQXBpPj4oXG4gICAgbWV0aG9kOiBUTWV0aG9kLFxuICAgIGNhbGxBcmd1bWVudHM6IFBhcmFtZXRlcnM8VEFwaVtUTWV0aG9kXT4sXG4gICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICApOiBQcm9taXNlPFdvcmtlck1ldGhvZFJlc3VsdDxUQXBpLCBUTWV0aG9kPltdPiB7XG4gICAgY29uc3Qgb3B0aW9uczogV29ya2VyQ29tcG9uZW50Q2FsbE9wdGlvbnMgPSBhYm9ydFNpZ25hbCA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGFib3J0U2lnbmFsIH07XG4gICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHRoaXMud29ya2Vycy5tYXAoYXN5bmMgKHdvcmtlcikgPT4gYXdhaXQgd29ya2VyLmNhbGwobWV0aG9kLCBjYWxsQXJndW1lbnRzLCBvcHRpb25zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb25lIHdvcmtlciwgZm9yIGpvYnMgdGhhdCBrZWVwIHN0YXRlIGluIGEgcGFydGljdWxhciB3b3JrZXIuXG4gICAqXG4gICAqIEBwYXJhbSBpbmRleCAtIFRoZSB3b3JrZXIgaW5kZXgsIGZyb20gYDBgIHRvIHtAbGluayBXb3JrZXJQb29sQ29tcG9uZW50LnNpemV9IG1pbnVzIG9uZS5cbiAgICogQHJldHVybnMgVGhlIHdvcmtlci5cbiAgICovXG4gIHB1YmxpYyBnZXRXb3JrZXIoaW5kZXg6IG51bWJlcik6IFdvcmtlckNvbXBvbmVudDxUQXBpPiB7XG4gICAgY29uc3Qgd29ya2VyID0gdGhpcy53b3JrZXJzW2luZGV4XTtcbiAgICBpZiAoIXdvcmtlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgd29ya2VyIHBvb2wgaGFzIG5vIHdvcmtlciBhdCBpbmRleCAke1N0cmluZyhpbmRleCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB3b3JrZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBTdWdnZXN0cyBhIHBvb2wgc2l6ZTogb25lIGZld2VyIHRoYW4gdGhlIGxvZ2ljYWwgcHJvY2Vzc29ycywgc28gdGhlIG1haW4gdGhyZWFkIGtlZXBzIG9uZSwgYmV0d2VlbiBgMWAgYW5kXG4gKiB7QGxpbmsgTUFYX0RFRkFVTFRfV09SS0VSX1BPT0xfU0laRX0uXG4gKlxuICogQHBhcmFtIGhhcmR3YXJlQ29uY3VycmVuY3kgLSBUaGUgbnVtYmVyIG9mIGxvZ2ljYWwgcHJvY2Vzc29ycy4gRGVmYXVsdHMgdG8gYG5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5YC5cbiAqIEByZXR1cm5zIFRoZSBzdWdnZXN0ZWQgc2l6ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRXb3JrZXJQb29sU2l6ZShoYXJkd2FyZUNvbmN1cnJlbmN5PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgcHJvY2Vzc29yQ291bnQgPSBoYXJkd2FyZUNvbmN1cnJlbmN5ID8/IHdpbmRvdy5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTtcbiAgcmV0dXJuIE1hdGgubWF4KDEsIE1hdGgubWluKE1BWF9ERUZBVUxUX1dPUktFUl9QT09MX1NJWkUsIHByb2Nlc3NvckNvdW50IC0gMSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSwwQkFBNEI7QUFDNUIsOEJBQWdDO0FBTXpCLE1BQU0sK0JBQStCO0FBMENyQyxNQUFNLDRCQUEwRCxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWlCMUUsWUFBK0IsUUFBb0Q7QUFDeEYsVUFBTTtBQUQ4QjtBQUVwQyxVQUFNLE9BQU8sT0FBTyxRQUFRLHlCQUF5QjtBQUNyRCxRQUFJLENBQUMsT0FBTyxjQUFjLElBQUksS0FBSyxPQUFPLEdBQUc7QUFDM0MsWUFBTSxJQUFJLE1BQU0sb0RBQW9ELE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFBQSxJQUNwRjtBQUNBLGFBQVMsUUFBUSxHQUFHLFFBQVEsTUFBTSxTQUFTO0FBQ3pDLFlBQU0sZUFBZTtBQUFBLFFBQ25CLFFBQVEsT0FBTztBQUFBLFFBQ2YsR0FBSSxPQUFPLHFCQUFxQixVQUFhLEVBQUUsa0JBQWtCLE9BQU8saUJBQWlCO0FBQUEsUUFDekYsR0FBSSxPQUFPLFNBQVMsVUFBYSxFQUFFLE1BQU0sR0FBRyxPQUFPLElBQUksSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHO0FBQUEsTUFDN0U7QUFDQSxXQUFLLFFBQVEsS0FBSyxLQUFLLFNBQVMsSUFBSSx3Q0FBc0IsWUFBWSxDQUFDLENBQUM7QUFBQSxJQUMxRTtBQUFBLEVBQ0Y7QUFBQSxFQWRzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVh0QyxJQUFXLE9BQWU7QUFDeEIsV0FBTyxLQUFLLFFBQVE7QUFBQSxFQUN0QjtBQUFBLEVBRWlCLFVBQW1DLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWdDckQsTUFBYSxLQUNYLFFBQ0EsZUFDQSxTQUM0QztBQUM1QyxRQUFJLFlBQVksS0FBSyxVQUFVLENBQUM7QUFDaEMsZUFBVyxVQUFVLEtBQUssU0FBUztBQUNqQyxVQUFJLE9BQU8sbUJBQW1CLFVBQVUsa0JBQWtCO0FBQ3hELG9CQUFZO0FBQUEsTUFDZDtBQUFBLElBQ0Y7QUFDQSxXQUFPLE1BQU0sVUFBVSxLQUFLLFFBQVEsZUFBZSxPQUFPO0FBQUEsRUFDNUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdBLE1BQWEsUUFDWCxRQUNBLGVBQ0EsYUFDOEM7QUFDOUMsVUFBTSxVQUFzQyxnQkFBZ0IsU0FBWSxDQUFDLElBQUksRUFBRSxZQUFZO0FBQzNGLFdBQU8sTUFBTSxRQUFRLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxXQUFXLE1BQU0sT0FBTyxLQUFLLFFBQVEsZUFBZSxPQUFPLENBQUMsQ0FBQztBQUFBLEVBQ2hIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxVQUFVLE9BQXNDO0FBQ3JELFVBQU0sU0FBUyxLQUFLLFFBQVEsS0FBSztBQUNqQyxRQUFJLENBQUMsUUFBUTtBQUNYLFlBQU0sSUFBSSxNQUFNLDBDQUEwQyxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQUEsSUFDM0U7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGO0FBU08sU0FBUyx5QkFBeUIscUJBQXNDO0FBQzdFLFFBQU0saUJBQWlCLHVCQUF1QixPQUFPLFVBQVU7QUFDL0QsU0FBTyxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksOEJBQThCLGlCQUFpQixDQUFDLENBQUM7QUFDL0U7IiwibmFtZXMiOltdfQ==
@@ -0,0 +1,102 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /// <reference lib="dom" />
3
+ /**
4
+ * @file
5
+ *
6
+ * A component that owns several workers built from the same bundled source and spreads calls over them.
7
+ */
8
+ import type { WorkerApi, WorkerApiHandlers } from '../worker-protocol.cjs';
9
+ import type { WorkerComponentCallOptions, WorkerMethod, WorkerMethodResult } from './worker-component.cjs';
10
+ import { ComponentEx } from './component-ex.cjs';
11
+ import { WorkerComponent } from './worker-component.cjs';
12
+ /**
13
+ * The most workers {@link getDefaultWorkerPoolSize} suggests, so a pool on a many-core desktop does not starve
14
+ * Obsidian's own renderer of memory.
15
+ */
16
+ export declare const MAX_DEFAULT_WORKER_POOL_SIZE = 4;
17
+ /**
18
+ * Options of {@link WorkerPoolComponent.call}: the same as {@link WorkerComponent.call}'s.
19
+ */
20
+ export type WorkerPoolComponentCallOptions = WorkerComponentCallOptions;
21
+ /**
22
+ * Parameters of {@link WorkerPoolComponent}.
23
+ *
24
+ * @typeParam TApi - The API every worker exposes.
25
+ */
26
+ export interface WorkerPoolComponentConstructorParams<TApi extends WorkerApi<TApi>> {
27
+ /**
28
+ * The handlers to run on the main thread when no `Worker` can be created. See {@link WorkerComponent}.
29
+ */
30
+ readonly fallbackHandlers?: WorkerApiHandlers<TApi>;
31
+ /**
32
+ * The workers' name prefix, shown by the developer tools; each worker gets `<name> <index>`.
33
+ */
34
+ readonly name?: string;
35
+ /**
36
+ * The number of workers. Defaults to {@link getDefaultWorkerPoolSize}.
37
+ */
38
+ readonly size?: number;
39
+ /**
40
+ * The bundled worker source.
41
+ */
42
+ readonly source: string;
43
+ }
44
+ /**
45
+ * Owns a fixed number of {@link WorkerComponent} children and sends each call to the one with the fewest pending calls.
46
+ *
47
+ * Use it for CPU-bound jobs that split into independent calls. A job that keeps state in a worker (a loaded corpus, an
48
+ * instantiated module) addresses each worker by index through {@link WorkerPoolComponent.getWorker} instead.
49
+ *
50
+ * @typeParam TApi - The API every worker exposes.
51
+ */
52
+ export declare class WorkerPoolComponent<TApi extends WorkerApi<TApi>> extends ComponentEx {
53
+ protected readonly params: WorkerPoolComponentConstructorParams<TApi>;
54
+ /**
55
+ * The number of workers.
56
+ *
57
+ * @returns The size.
58
+ */
59
+ get size(): number;
60
+ private readonly workers;
61
+ /**
62
+ * Creates the pool.
63
+ *
64
+ * @param params - The parameters.
65
+ */
66
+ constructor(params: WorkerPoolComponentConstructorParams<TApi>);
67
+ /**
68
+ * Calls a method on the least busy worker.
69
+ *
70
+ * @typeParam TMethod - The method.
71
+ * @param method - The method name.
72
+ * @param callArguments - The method's arguments.
73
+ * @param options - The call options.
74
+ * @returns The method's result.
75
+ */
76
+ call<TMethod extends WorkerMethod<TApi>>(method: TMethod, callArguments: Parameters<TApi[TMethod]>, options?: WorkerPoolComponentCallOptions): Promise<WorkerMethodResult<TApi, TMethod>>;
77
+ /**
78
+ * Calls a method on every worker with the same arguments, for instance to configure them all.
79
+ *
80
+ * @typeParam TMethod - The method.
81
+ * @param method - The method name.
82
+ * @param callArguments - The method's arguments, cloned for each worker; nothing can be transferred to all of them.
83
+ * @param abortSignal - Cancels every call.
84
+ * @returns The results, in worker order.
85
+ */
86
+ callAll<TMethod extends WorkerMethod<TApi>>(method: TMethod, callArguments: Parameters<TApi[TMethod]>, abortSignal?: AbortSignal): Promise<WorkerMethodResult<TApi, TMethod>[]>;
87
+ /**
88
+ * Gets one worker, for jobs that keep state in a particular worker.
89
+ *
90
+ * @param index - The worker index, from `0` to {@link WorkerPoolComponent.size} minus one.
91
+ * @returns The worker.
92
+ */
93
+ getWorker(index: number): WorkerComponent<TApi>;
94
+ }
95
+ /**
96
+ * Suggests a pool size: one fewer than the logical processors, so the main thread keeps one, between `1` and
97
+ * {@link MAX_DEFAULT_WORKER_POOL_SIZE}.
98
+ *
99
+ * @param hardwareConcurrency - The number of logical processors. Defaults to `navigator.hardwareConcurrency`.
100
+ * @returns The suggested size.
101
+ */
102
+ export declare function getDefaultWorkerPoolSize(hardwareConcurrency?: number): number;
@@ -120,12 +120,12 @@ __export(workspace_layout_state_component_exports, {
120
120
  serializeWorkspaceLayoutStateRecord: () => serializeWorkspaceLayoutStateRecord
121
121
  });
122
122
  module.exports = __toCommonJS(workspace_layout_state_component_exports);
123
- var import_array = require('@mnaoumov/typescript-lib/array');
124
- var import_async = require('@mnaoumov/typescript-lib/async');
125
- var import_data_store_replica = require('../data-stores/data-store-replica.cjs');
126
- var import_obsidian_lib_state = require('../obsidian-lib-state.cjs');
127
- var import_component_ex = require('./component-ex.cjs');
128
- var import_monkey_around_component = require('./monkey-around-component.cjs');
123
+ var import_array = require("@mnaoumov/typescript-lib/array");
124
+ var import_async = require("@mnaoumov/typescript-lib/async");
125
+ var import_data_store_replica = require("../data-stores/data-store-replica.cjs");
126
+ var import_obsidian_lib_state = require("../obsidian-lib-state.cjs");
127
+ var import_component_ex = require("./component-ex.cjs");
128
+ var import_monkey_around_component = require("./monkey-around-component.cjs");
129
129
  const WORKSPACE_LAYOUT_STATE_LAYOUT_KEY = "obsidianLibLayoutStateV1";
130
130
  const SHARED_STATE_KEY = "workspaceLayoutStateV1";
131
131
  const KNOWN_PLUGIN_RECORD_FIELD_COUNT = 2;
@@ -492,4 +492,4 @@ function readRawValue(state, pluginId, key, leafId) {
492
492
  parseWorkspaceLayoutStateRecord,
493
493
  serializeWorkspaceLayoutStateRecord
494
494
  });
495
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3dvcmtzcGFjZS1sYXlvdXQtc3RhdGUtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBLZWVwcyBhIHBsdWdpbidzIGxheW91dC1zY29wZWQgc3RhdGUgaW4gdGhlIHdvcmtzcGFjZSBsYXlvdXQgaXRzZWxmLCBzbyBlYWNoIHNhdmVkIHdvcmtzcGFjZSByZW1lbWJlcnMgaXRzIG93biB2YWx1ZVxuICogYW5kIHN3aXRjaGluZyB3b3Jrc3BhY2VzIHJlc3RvcmVzIGl0LCBpbnN0ZWFkIG9mIG9uZSBnbG9iYWwgdmFsdWUgaW4gYGRhdGEuanNvbmAuXG4gKlxuICogUmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjFgOiBgV29ya3NwYWNlLmdldExheW91dCgpYCBidWlsZHMgYSBmcmVzaCBvYmplY3QgKGBtYWluYCwgYGxlZnRgLCBgcmlnaHRgLCBgbGVmdC1yaWJib25gLFxuICogYGZsb2F0aW5nYCwgYGFjdGl2ZWApIGFuZCBgV29ya3NwYWNlLnNldExheW91dCgpYCBpZ25vcmVzIGV2ZXJ5IG90aGVyIHRvcC1sZXZlbCBrZXkuIGBkZXNlcmlhbGl6ZUxheW91dGAga2VlcHMgZWFjaFxuICogaXRlbSdzIGBpZGAsIHBvcG91dCBsZWF2ZXMgaW5jbHVkZWQuIFRoZSBXb3Jrc3BhY2VzIGNvcmUgcGx1Z2luIHNhdmVzIHRocm91Z2ggYGdldExheW91dCgpYCBhbmQgbG9hZHMgdGhyb3VnaFxuICogYGNoYW5nZUxheW91dCgpYCwgd2hpY2ggY2FsbHMgYHNldExheW91dCgpYC4gU3RhcnR1cCBnb2VzIHRocm91Z2ggYGxvYWRMYXlvdXQoKWAsIGByZWFkV29ya3NwYWNlRmlsZSgpYCBhbmRcbiAqIGBzZXRMYXlvdXQoKWAsIGFmdGVyIHRoZSBwbHVnaW5zIGVuYWJsZWQgYXQgc3RhcnR1cCBoYXZlIGxvYWRlZC4gU28gdHdvIHBhdGNoZXMgb24gdGhlIGBhcHAud29ya3NwYWNlYCBpbnN0YW5jZSBjYXJyeVxuICogdGhlIHdob2xlIHRoaW5nOiBgZ2V0TGF5b3V0YCB3cml0ZXMgdGhlIHJlY29yZHMgdW5kZXIge0BsaW5rIFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWX0sIGFuZCBgc2V0TGF5b3V0YFxuICogcmVwbGFjZXMgdGhlbSBmcm9tIHRoZSBsYXlvdXQgaXQgaXMgaGFuZGVkIGJlZm9yZSBhbnkgdmlldyBpcyByZXN0b3JlZC4gUGVyLWxlYWYgc3RhdGUgaXMga2V5ZWQgYnkgbGVhZiBpZCBhdCB0aGVcbiAqIGxheW91dCBsZXZlbCwgc28gbm8gYFdvcmtzcGFjZUl0ZW0uc2VyaWFsaXplYCBvciBgZGVzZXJpYWxpemVMYXlvdXRgIHBhdGNoIGlzIG5lZWRlZC5cbiAqXG4gKiBBIHZpZXcgdGhlIHBsdWdpbiBvd25zIG5lZWRzIG5vbmUgb2YgdGhpczogYFZpZXcuZ2V0U3RhdGVgIC8gYHNldFN0YXRlYCBhbHJlYWR5IHJpZGUgaW4gZWFjaCBsZWFmJ3Mgc3RhdGUuIFRoaXNcbiAqIGNvbXBvbmVudCBpcyBmb3IgdGhlIHNjb3BlIHRob3NlIG1ldGhvZHMgY2Fubm90IHJlcHJlc2VudDogdGhlIHdob2xlIGxheW91dCwgYW5kIGxlYXZlcyBvZiB2aWV3cyB0aGUgcGx1Z2luIGRvZXMgbm90XG4gKiBvd24uXG4gKlxuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIG93biBjb3B5IG9mIHRoaXMgbGlicmFyeSwgc28gdGhlIHJlY29yZHMsIHRoZSBzdWJzY3JpcHRpb25zIGFuZCBPTkUgaW5zdGFsbGF0aW9uIG9mIHRoZVxuICogcGF0Y2hlcyBsaXZlIGluIHRoZSBzaGFyZWQtc3RhdGUgYmFnIHVuZGVyIGEgdmVyc2lvbmVkIGtleSwgb3duZWQgYnkgb25lIHN1YnNjcmliZXIuIFdoZW4gdGhlIG93bmVyIHVubG9hZHMgd2hpbGVcbiAqIG90aGVycyByZW1haW4sIHRoZSBuZXh0IHN1YnNjcmliZXIgaW5zdGFsbHMgYWdhaW4gZnJvbSBpdHMgb3duIGNvcHkuIFdoYXQgY3Jvc3NlcyB0aGF0IGJvdW5kYXJ5IGlzIGEgd2lyZSBmb3JtYXRcbiAqIGJldHdlZW4gY29waWVzIG9mIGRpZmZlcmVudCB2ZXJzaW9uczogcGxhaW4gb2JqZWN0cyBhbmQgcGxhaW4gZnVuY3Rpb25zIG9ubHksIGZpZWxkcyBvbmx5IGV2ZXIgYWRkZWQsIGFuZCBhIGNoYW5nZSBvZlxuICogbWVhbmluZyBtb3ZlcyB0byBhIG5ldyBrZXkuIFRoZSBsYXlvdXQgcmVjb3JkIGlzIGEgd2lyZSBmb3JtYXQgdG9vLCBwZXJzaXN0ZWQgaW4gYHdvcmtzcGFjZS5qc29uYCBhbmQgaW4gZXZlcnkgc2F2ZWRcbiAqIHdvcmtzcGFjZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgV29ya3NwYWNlLFxuICBXb3Jrc3BhY2VMZWFmXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHtcbiAgSnNvbk9iamVjdCxcbiAgSnNvblZhbHVlXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FycmF5JztcbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcblxuaW1wb3J0IHsgaXNEYXRhU3RvcmVKc29uVmFsdWUgfSBmcm9tICcuLi9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLXJlcGxpY2EudHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4uL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IGFyb3VuZCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFRoZSB0b3AtbGV2ZWwga2V5IG9mIGEgc2VyaWFsaXplZCBsYXlvdXQgdGhhdCBob2xkcyB0aGUgcmVjb3Jkcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWSA9ICdvYnNpZGlhbkxpYkxheW91dFN0YXRlVjEnO1xuXG5jb25zdCBTSEFSRURfU1RBVEVfS0VZID0gJ3dvcmtzcGFjZUxheW91dFN0YXRlVjEnO1xuXG4vKipcbiAqIFRoZSBmaWVsZHMgb2YgYSBwbHVnaW4gcmVjb3JkIHRoaXMgdmVyc2lvbiBrbm93czogYGxlYXZlc2AgYW5kIGB3b3Jrc3BhY2VgLlxuICovXG5jb25zdCBLTk9XTl9QTFVHSU5fUkVDT1JEX0ZJRUxEX0NPVU5UID0gMjtcblxuLyoqXG4gKiBBIGNoYW5nZSBvZiBvbmUga2V5J3MgdmFsdWUsIGluIG9uZSBzY29wZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdmFsdWUgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUNoYW5nZTxUPiB7XG4gIC8qKlxuICAgKiBUaGUgbGVhZiB3aG9zZSB2YWx1ZSBjaGFuZ2VkLCBvciBgbnVsbGAgZm9yIHRoZSB3b3Jrc3BhY2Ugc2NvcGUgb3IgYSBsZWFmIG5vIGxvbmdlciBpbiB0aGUgbGF5b3V0LlxuICAgKi9cbiAgcmVhZG9ubHkgbGVhZjogbnVsbCB8IFdvcmtzcGFjZUxlYWY7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgbGVhZiB3aG9zZSB2YWx1ZSBjaGFuZ2VkLCBvciBgbnVsbGAgZm9yIHRoZSB3b3Jrc3BhY2Ugc2NvcGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmSWQ6IG51bGwgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBiZWZvcmUgdGhlIGNoYW5nZSwgYXMge0BsaW5rIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5LmdldH0gcmVhZCBpdC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBUO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgYWZ0ZXIgdGhlIGNoYW5nZSwgYXMge0BsaW5rIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5LmdldH0gcmVhZHMgaXQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogVDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgV29ya3NwYWNlTGF5b3V0U3RhdGVDb21wb25lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHBsdWdpbiB0aGUgdmFsdWVzIGJlbG9uZyB0by4gRXZlcnkgdmFsdWUgaXMgbmFtZXNwYWNlZCBieSBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSB0eXBlZCBoYW5kbGUgdG8gb25lIGxheW91dC1zY29wZWQga2V5LlxuICpcbiAqIEV2ZXJ5IG1ldGhvZCB0YWtlcyBhbiBvcHRpb25hbCBsZWFmLiBXaXRob3V0IG9uZSwgdGhlIHZhbHVlIGJlbG9uZ3MgdG8gdGhlIHdob2xlIGxheW91dCAodGhlIHdvcmtzcGFjZSBzY29wZSkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHZhbHVlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXk8VD4ge1xuICAvKipcbiAgICogUmVhZHMgdGhlIHZhbHVlOiBhIGNsb25lIG9mIHRoZSBzdG9yZWQgb25lLCBvciBvZiB0aGUgZGVmYXVsdCB3aGVuIG5vdGhpbmcgaXMgc3RvcmVkIG9yIHRoZSBzdG9yZWQgdmFsdWUgZmFpbHMgdGhlXG4gICAqIGtleSdzIGd1YXJkLlxuICAgKlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSBsZWFmLCBvciBub3RoaW5nIGZvciB0aGUgd29ya3NwYWNlIHNjb3BlLlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBnZXQ6IChsZWFmPzogV29ya3NwYWNlTGVhZikgPT4gVDtcblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSB2YWx1ZSBpcyBzdG9yZWQsIHZhbGlkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGxlYWYgLSBUaGUgbGVhZiwgb3Igbm90aGluZyBmb3IgdGhlIHdvcmtzcGFjZSBzY29wZS5cbiAgICogQHJldHVybnMgV2hldGhlciBhIHZhbHVlIGlzIHN0b3JlZC5cbiAgICovXG4gIHJlYWRvbmx5IGhhczogKGxlYWY/OiBXb3Jrc3BhY2VMZWFmKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IG5hbWUsIHVuaXF1ZSB3aXRoaW4gdGhlIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIGNoYW5nZXMgb2YgdGhpcyBrZXkgbWFkZSB0aHJvdWdoIGBzZXRgIG9yIGB1bnNldGAsIGluIGFueSBzY29wZSBhbmQgZnJvbSBhbnkgY29weSBvZiB0aGUgbGlicmFyeS4gQVxuICAgKiBsYXlvdXQgbG9hZCBpcyByZXBvcnRlZCB0aHJvdWdoIHtAbGluayBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUNvbXBvbmVudC5vbkxheW91dExvYWR9IGluc3RlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxlZCBhZnRlciBlYWNoIGNoYW5nZS5cbiAgICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHVuc3Vic2NyaWJlcy4gVW5sb2FkaW5nIHRoZSBjb21wb25lbnQgdW5zdWJzY3JpYmVzIHRvby5cbiAgICovXG4gIHJlYWRvbmx5IG9uQ2hhbmdlOiAoY2FsbGJhY2s6IChjaGFuZ2U6IFdvcmtzcGFjZUxheW91dFN0YXRlQ2hhbmdlPFQ+KSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgYSBjbG9uZSBvZiB0aGUgdmFsdWUgYW5kIHJlcXVlc3RzIGEgbGF5b3V0IHNhdmUuIFN0b3JpbmcgYSB2YWx1ZSBlcXVhbCB0byB0aGUgc3RvcmVkIG9uZSBkb2VzIG5vdGhpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZS4gSXQgbXVzdCBiZSBKU09OLXNhZmU7IGBudWxsYCBpcyBzdG9yZWQgYXMgYG51bGxgLlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSBsZWFmLCBvciBub3RoaW5nIGZvciB0aGUgd29ya3NwYWNlIHNjb3BlLlxuICAgKiBAdGhyb3dzIEEgYFR5cGVFcnJvcmAgaWYgdGhlIHZhbHVlIGlzIG5vdCBKU09OLXNhZmUuXG4gICAqL1xuICByZWFkb25seSBzZXQ6ICh2YWx1ZTogVCwgbGVhZj86IFdvcmtzcGFjZUxlYWYpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHN0b3JlZCB2YWx1ZSwgc28gYGdldGAgcmVhZHMgdGhlIGRlZmF1bHQgYWdhaW4sIGFuZCByZXF1ZXN0cyBhIGxheW91dCBzYXZlLlxuICAgKlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSBsZWFmLCBvciBub3RoaW5nIGZvciB0aGUgd29ya3NwYWNlIHNjb3BlLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5zZXQ6IChsZWFmPzogV29ya3NwYWNlTGVhZikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgbGF5b3V0LXNjb3BlZCBrZXkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHZhbHVlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlEZWZpbml0aW9uPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSByZWFkIHdoZW4gbm90aGluZyB2YWxpZCBpcyBzdG9yZWQuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0VmFsdWU6IFQ7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBhIHN0b3JlZCB2YWx1ZS4gQSB2YWx1ZSB0aGF0IGZhaWxzIHJlYWRzIGFzIHRoZSBkZWZhdWx0IGFuZCBzdGF5cyBzdG9yZWQgdW50aWwgaXQgaXMgcmVwbGFjZWQgb3IgdW5zZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFjY2VwdHMgZXZlcnkgSlNPTiB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzVmFsaWQ/OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFQ7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT25lIHBsdWdpbidzIHJlY29yZHMuIEZpZWxkcyBhIG5ld2VyIGNvcHkgYWRkcyBhcmUgcHJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlUGx1Z2luUmVjb3JkIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMgYnkgbGVhZiBpZCwgdGhlbiBieSBrZXkuXG4gICAqL1xuICByZWFkb25seSBsZWF2ZXM6IFJlY29yZDxzdHJpbmcsIEpzb25SZWNvcmQ+O1xuXG4gIC8qKlxuICAgKiBGaWVsZHMgYSBuZXdlciBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFkZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgW2ZpZWxkOiBzdHJpbmddOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlLXNjb3BlIHZhbHVlcyBieSBrZXkuXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2U6IEpzb25SZWNvcmQ7XG59XG5cbi8qKlxuICogVGhlIHJlY29yZCBwZXJzaXN0ZWQgdW5kZXIge0BsaW5rIFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWX0uIEZpZWxkcyBhIG5ld2VyIGNvcHkgYWRkcyBhcmUgcHJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkIHtcbiAgLyoqXG4gICAqIFRoZSByZWNvcmRzIGJ5IHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbnM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUxheW91dFN0YXRlUGx1Z2luUmVjb3JkPjtcblxuICAvKipcbiAgICogRmllbGRzIGEgbmV3ZXIgY29weSBvZiB0aGUgbGlicmFyeSBhZGRlZC5cbiAgICovXG4gIHJlYWRvbmx5IFtmaWVsZDogc3RyaW5nXTogdW5rbm93bjtcbn1cblxudHlwZSBKc29uUmVjb3JkID0gUmVjb3JkPHN0cmluZywgSnNvblZhbHVlPjtcblxuaW50ZXJmYWNlIFJlY29yZENoYW5nZSB7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSBsZWFmSWQ6IG51bGwgfCBzdHJpbmc7XG4gIHJlYWRvbmx5IG5ld1ZhbHVlOiBKc29uVmFsdWUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBKc29uVmFsdWUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUluc3RhbGxhdGlvbiB7XG4gIHJlYWRvbmx5IG93bmVyOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVN1YnNjcmlwdGlvbjtcbiAgcmVhZG9ubHkgdW5pbnN0YWxsOiAoKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlJbXBsUGFyYW1zPFQ+IHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZTogVDtcbiAgcmVhZG9ubHkgaXNWYWxpZDogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUO1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3Vic2NyaWJlOiAobGlzdGVuZXI6IChjaGFuZ2U6IFJlY29yZENoYW5nZSkgPT4gdm9pZCkgPT4gKCkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBTdWJzY3JpYmVyIGNoYW5nZXMgcmVwbGFjZSBvciBjbGVhciB0aGUgc2hhcmVkIGluc3RhbGxhdGlvbi5cbiAgaW5zdGFsbGF0aW9uOiBudWxsIHwgV29ya3NwYWNlTGF5b3V0U3RhdGVJbnN0YWxsYXRpb247XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIFNldCBvbmNlIGEgbGF5b3V0IG9yIHRoZSBzYXZlZCBsYXlvdXQgZmlsZSBoYXMgYmVlbiByZWFkLlxuICBpc0h5ZHJhdGVkOiBib29sZWFuO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBBIGxheW91dCBsb2FkIHJlcGxhY2VzIHRoZSByZWNvcmRzLlxuICByZWNvcmQ6IFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkO1xuICByZWFkb25seSBzdWJzY3JpcHRpb25zOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVN1YnNjcmlwdGlvbltdO1xufVxuXG4vKipcbiAqIEEgc3Vic2NyaWJlciBpbiB0aGUgc2hhcmVkIHN0YXRlLiBUaGUgc2hhcGUgaXMgcGFydCBvZiB0aGUgd2lyZSBmb3JtYXQgYmV0d2VlbiBjb3BpZXM6IGZpZWxkcyBhcmUgb25seSBldmVyIGFkZGVkLlxuICovXG5pbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVTdWJzY3JpcHRpb24ge1xuICByZWFkb25seSBpbnN0YWxsOiAoKSA9PiAoKSA9PiB2b2lkO1xuICByZWFkb25seSBvbkxheW91dExvYWQ6ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uUmVjb3JkQ2hhbmdlOiAoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5SW1wbDxUPiBpbXBsZW1lbnRzIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5PFQ+IHtcbiAgcHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFZhbHVlOiBUO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzVmFsaWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgVDtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmliZTogKGxpc3RlbmVyOiAoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlJbXBsUGFyYW1zPFQ+KSB7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gcGFyYW1zLmRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLmlzVmFsaWQgPSBwYXJhbXMuaXNWYWxpZDtcbiAgICB0aGlzLmtleSA9IHBhcmFtcy5rZXk7XG4gICAgdGhpcy5wbHVnaW5JZCA9IHBhcmFtcy5wbHVnaW5JZDtcbiAgICB0aGlzLnN1YnNjcmliZSA9IHBhcmFtcy5zdWJzY3JpYmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGxlYWY/OiBXb3Jrc3BhY2VMZWFmKTogVCB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShyZWFkUmF3VmFsdWUoZ2V0U2hhcmVkU3RhdGUoKSwgdGhpcy5wbHVnaW5JZCwgdGhpcy5rZXksIGdldExlYWZJZChsZWFmKSkpO1xuICB9XG5cbiAgcHVibGljIGhhcyhsZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkUmF3VmFsdWUoZ2V0U2hhcmVkU3RhdGUoKSwgdGhpcy5wbHVnaW5JZCwgdGhpcy5rZXksIGdldExlYWZJZChsZWFmKSkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZShjYWxsYmFjazogKGNoYW5nZTogV29ya3NwYWNlTGF5b3V0U3RhdGVDaGFuZ2U8VD4pID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5rZXkgIT09IHRoaXMua2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgbGVhZjogY2hhbmdlLmxlYWZJZCA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZkJ5SWQoY2hhbmdlLmxlYWZJZCksXG4gICAgICAgIGxlYWZJZDogY2hhbmdlLmxlYWZJZCxcbiAgICAgICAgb2xkVmFsdWU6IHRoaXMucmVzb2x2ZShjaGFuZ2Uub2xkVmFsdWUpLFxuICAgICAgICB2YWx1ZTogdGhpcy5yZXNvbHZlKGNoYW5nZS5uZXdWYWx1ZSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldCh2YWx1ZTogVCwgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiB2b2lkIHtcbiAgICBhc3NlcnRKc29uVmFsdWUodmFsdWUpO1xuICAgIHRoaXMud3JpdGUoY2xvbmVKc29uKHZhbHVlKSwgZ2V0TGVhZklkKGxlYWYpKTtcbiAgfVxuXG4gIHB1YmxpYyB1bnNldChsZWFmPzogV29ya3NwYWNlTGVhZik6IHZvaWQge1xuICAgIHRoaXMud3JpdGUodW5kZWZpbmVkLCBnZXRMZWFmSWQobGVhZikpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlKHJhd1ZhbHVlOiBKc29uVmFsdWUgfCB1bmRlZmluZWQpOiBUIHtcbiAgICByZXR1cm4gY2xvbmVKc29uKHJhd1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pc1ZhbGlkKHJhd1ZhbHVlKSA/IHJhd1ZhbHVlIDogdGhpcy5kZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZShuZXdWYWx1ZTogSnNvblZhbHVlIHwgdW5kZWZpbmVkLCBsZWFmSWQ6IG51bGwgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFNoYXJlZFN0YXRlKCk7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSByZWFkUmF3VmFsdWUoc3RhdGUsIHRoaXMucGx1Z2luSWQsIHRoaXMua2V5LCBsZWFmSWQpO1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShvbGRWYWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIHN0b3JlZCBvbGQgdmFsdWUgbWVhbnMgdGhlIGJ1Y2tldCBleGlzdHMsIHNvIHRoaXMgY3JlYXRlcyBub3RoaW5nLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBUaGUgYnVja2V0IGlzIGEgcGxhaW4gcmVjb3JkIGtleWVkIGJ5IHVzZXItY2hvc2VuIG5hbWVzLlxuICAgICAgZGVsZXRlIGVuc3VyZUJ1Y2tldChzdGF0ZSwgdGhpcy5wbHVnaW5JZCwgbGVhZklkKVt0aGlzLmtleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuc3VyZUJ1Y2tldChzdGF0ZSwgdGhpcy5wbHVnaW5JZCwgbGVhZklkKVt0aGlzLmtleV0gPSBuZXdWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcC53b3Jrc3BhY2UucmVxdWVzdFNhdmVMYXlvdXQoKTtcbiAgICBjb25zdCBjaGFuZ2U6IFJlY29yZENoYW5nZSA9IHsga2V5OiB0aGlzLmtleSwgbGVhZklkLCBuZXdWYWx1ZSwgb2xkVmFsdWUsIHBsdWdpbklkOiB0aGlzLnBsdWdpbklkIH07XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc25hcHNob3Qoc3RhdGUuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblJlY29yZENoYW5nZShjaGFuZ2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEtlZXBzIGEgcGx1Z2luJ3MgbGF5b3V0LXNjb3BlZCB2YWx1ZXMgaW4gdGhlIHdvcmtzcGFjZSBsYXlvdXQsIHNvIHNhdmVkIHdvcmtzcGFjZXMgZWFjaCByZXN0b3JlIHRoZWlyIG93bi5cbiAqXG4gKiBBbnkgbnVtYmVyIG9mIHRoZXNlLCBpbiBhbnkgbnVtYmVyIG9mIHBsdWdpbnMsIHNoYXJlIG9uZSBpbnN0YWxsYXRpb24gcGVyIHtAbGluayBBcHB9LiBWYWx1ZXMgYXJlIHJlc3RvcmVkIHdoZW4gYVxuICogbGF5b3V0IGxvYWRzLCB3aGljaCBSRVBMQUNFUyBldmVyeSB2YWx1ZTogd3JpdGUgdGhlbSBhZnRlciB7QGxpbmsgV29ya3NwYWNlLm9uTGF5b3V0UmVhZHl9LCBhbmQgcmUtcmVhZCB0aGVtIGluXG4gKiB7QGxpbmsgb25MYXlvdXRMb2FkfS5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzcGFjZUxheW91dFN0YXRlQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBwbHVnaW4gdGhlIHZhbHVlcyBiZWxvbmcgdG8uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGxheW91dExvYWRMaXN0ZW5lcnMgPSBuZXcgU2V0PCgpID0+IHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVjb3JkQ2hhbmdlTGlzdGVuZXJzID0gbmV3IFNldDwoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgd29ya3NwYWNlIGxheW91dCBzdGF0ZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHRocm93cyBBIGBUeXBlRXJyb3JgIGlmIHRoZSBwbHVnaW4gaWQgaXMgZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoIXBhcmFtcy5wbHVnaW5JZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBsdWdpbiBpZCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5wbHVnaW5JZCA9IHBhcmFtcy5wbHVnaW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgdHlwZWQga2V5LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdmFsdWUgdHlwZS5cbiAgICogQHBhcmFtIGRlZmluaXRpb24gLSBUaGUga2V5IGRlZmluaXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBrZXkgaGFuZGxlLlxuICAgKiBAdGhyb3dzIEEgYFR5cGVFcnJvcmAgaWYgdGhlIGtleSBpcyBlbXB0eSBvciB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBub3QgSlNPTi1zYWZlLlxuICAgKi9cbiAgcHVibGljIGRlZmluZUtleTxUPihkZWZpbml0aW9uOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUtleURlZmluaXRpb248VD4pOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUtleTxUPiB7XG4gICAgaWYgKCFkZWZpbml0aW9uLmtleSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGtleSBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICBhc3NlcnRKc29uVmFsdWUoZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBuZXcgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlJbXBsPFQ+KHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBkZWZhdWx0VmFsdWU6IGNsb25lSnNvbihkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSksXG4gICAgICBpc1ZhbGlkOiBkZWZpbml0aW9uLmlzVmFsaWQgPz8gKChfdmFsdWUpOiBfdmFsdWUgaXMgVCA9PiB0cnVlKSxcbiAgICAgIGtleTogZGVmaW5pdGlvbi5rZXksXG4gICAgICBwbHVnaW5JZDogdGhpcy5wbHVnaW5JZCxcbiAgICAgIHN1YnNjcmliZTogKGxpc3RlbmVyKSA9PiB0aGlzLnN1YnNjcmliZVRvUmVjb3JkQ2hhbmdlcyhsaXN0ZW5lcilcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIGxheW91dCBsb2FkczogYSBzYXZlZCB3b3Jrc3BhY2UgbG9hZGVkLCB0aGUgbGF5b3V0IHJlc3RvcmVkIGF0IHN0YXJ0dXAsIG9yIHRoZSBzYXZlZCBsYXlvdXQgcmVhZCB3aGVuXG4gICAqIHRoZSBjb21wb25lbnQgaXMgZmlyc3QgbG9hZGVkIGFmdGVyIGxheW91dC1yZWFkeS4gRXZlcnkgdmFsdWUgbWF5IGhhdmUgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGVkIGFmdGVyIHRoZSBsYXlvdXQgaXMgbG9hZGVkLCBvbmNlIGl0cyBsZWF2ZXMgZXhpc3QuXG4gICAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB1bnN1YnNjcmliZXMuIFVubG9hZGluZyB0aGUgY29tcG9uZW50IHVuc3Vic2NyaWJlcyB0b28uXG4gICAqL1xuICBwdWJsaWMgb25MYXlvdXRMb2FkKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5sYXlvdXRMb2FkTGlzdGVuZXJzLmFkZChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMubGF5b3V0TG9hZExpc3RlbmVycy5kZWxldGUoY2FsbGJhY2spO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgc2hhcmVkIGluc3RhbGxhdGlvbiwgaW5zdGFsbGluZyBpdCB3aGVuIG5vYm9keSBoYXMgeWV0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcblxuICAgIGNvbnN0IHN0YXRlID0gZ2V0U2hhcmVkU3RhdGUoKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb246IFdvcmtzcGFjZUxheW91dFN0YXRlU3Vic2NyaXB0aW9uID0ge1xuICAgICAgaW5zdGFsbDogKCkgPT4gaW5zdGFsbExheW91dFN0YXRlKHRoaXMuYXBwLCBzdGF0ZSksXG4gICAgICBvbkxheW91dExvYWQ6ICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBzbmFwc2hvdCh0aGlzLmxheW91dExvYWRMaXN0ZW5lcnMpKSB7XG4gICAgICAgICAgaW52b2tlTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25SZWNvcmRDaGFuZ2U6IChjaGFuZ2UpID0+IHtcbiAgICAgICAgaWYgKGNoYW5nZS5wbHVnaW5JZCAhPT0gdGhpcy5wbHVnaW5JZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHNuYXBzaG90KHRoaXMucmVjb3JkQ2hhbmdlTGlzdGVuZXJzKSkge1xuICAgICAgICAgIGludm9rZUxpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgIGxpc3RlbmVyKGNoYW5nZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHN0YXRlLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIHN0YXRlLmluc3RhbGxhdGlvbiA/Pz0geyBvd25lcjogc3Vic2NyaXB0aW9uLCB1bmluc3RhbGw6IHN1YnNjcmlwdGlvbi5pbnN0YWxsKCkgfTtcblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRMb2FkTGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgICB0aGlzLnJlY29yZENoYW5nZUxpc3RlbmVycy5jbGVhcigpO1xuICAgICAgc3RhdGUuc3Vic2NyaXB0aW9ucy5zcGxpY2Uoc3RhdGUuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHN1YnNjcmlwdGlvbiksIDEpO1xuICAgICAgaWYgKHN0YXRlLmluc3RhbGxhdGlvbj8ub3duZXIgIT09IHN1YnNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLmluc3RhbGxhdGlvbi51bmluc3RhbGwoKTtcbiAgICAgIGNvbnN0IG5leHRPd25lciA9IHN0YXRlLnN1YnNjcmlwdGlvbnNbMF07XG4gICAgICBzdGF0ZS5pbnN0YWxsYXRpb24gPSBuZXh0T3duZXIgPyB7IG93bmVyOiBuZXh0T3duZXIsIHVuaW5zdGFsbDogbmV4dE93bmVyLmluc3RhbGwoKSB9IDogbnVsbDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9SZWNvcmRDaGFuZ2VzKGxpc3RlbmVyOiAoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZENoYW5nZUxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLnJlY29yZENoYW5nZUxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBwZXJzaXN0ZWQgcmVjb3JkLiBBIHBhcnQgdGhhdCBpcyBtYWxmb3JtZWQgaXMgZHJvcHBlZCBvbmUgbGV2ZWwgYXQgYSB0aW1lOiBhIG1hbGZvcm1lZCByZWNvcmQgcmVhZHMgYXNcbiAqIGVtcHR5LCBhIG1hbGZvcm1lZCBwbHVnaW4gcmVjb3JkIGRyb3BzIG9ubHkgdGhhdCBwbHVnaW4sIGFuZCBhIG1hbGZvcm1lZCBsZWFmIGJ1Y2tldCBkcm9wcyBvbmx5IHRoYXQgbGVhZi4gRmllbGRzIHRoaXNcbiAqIGNvcHkgZG9lcyBub3Qga25vdyBhcmUga2VwdC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgZm91bmQgdW5kZXIge0BsaW5rIFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWX0uXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHJlY29yZCwgc2hhcmluZyBub3RoaW5nIHdpdGggdGhlIGlucHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VXb3Jrc3BhY2VMYXlvdXRTdGF0ZVJlY29yZCh2YWx1ZTogdW5rbm93bik6IFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkIHtcbiAgaWYgKCFpc0pzb25PYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHsgcGx1Z2luczoge30gfTtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbnM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUxheW91dFN0YXRlUGx1Z2luUmVjb3JkPiA9IHt9O1xuICBjb25zdCByYXdQbHVnaW5zID0gdmFsdWVbJ3BsdWdpbnMnXTtcbiAgaWYgKGlzSnNvbk9iamVjdChyYXdQbHVnaW5zKSkge1xuICAgIGZvciAoY29uc3QgW3BsdWdpbklkLCByYXdQbHVnaW5SZWNvcmRdIG9mIE9iamVjdC5lbnRyaWVzKHJhd1BsdWdpbnMpKSB7XG4gICAgICBjb25zdCBwbHVnaW5SZWNvcmQgPSBwYXJzZVBsdWdpblJlY29yZChyYXdQbHVnaW5SZWNvcmQpO1xuICAgICAgaWYgKHBsdWdpblJlY29yZCkge1xuICAgICAgICBwbHVnaW5zW3BsdWdpbklkXSA9IHBsdWdpblJlY29yZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyAuLi5jbG9uZUpzb24odmFsdWUpLCBwbHVnaW5zIH07XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSByZWNvcmQgdG8gcGVyc2lzdCBpbnRvIGEgc2VyaWFsaXplZCBsYXlvdXQ6IGxlYWYgYnVja2V0cyBmb3IgbGVhdmVzIGFic2VudCBmcm9tIHRoZSBsYXlvdXQgYXJlIGxlZnQgb3V0LFxuICogYW5kIHNvIGFyZSBwbHVnaW5zIHdpdGggbm90aGluZyBsZWZ0LlxuICpcbiAqIEBwYXJhbSByZWNvcmQgLSBUaGUgY3VycmVudCByZWNvcmQuXG4gKiBAcGFyYW0gbGF5b3V0IC0gVGhlIHNlcmlhbGl6ZWQgbGF5b3V0LlxuICogQHJldHVybnMgVGhlIHJlY29yZCB0byBwZXJzaXN0LCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIHBlcnNpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVXb3Jrc3BhY2VMYXlvdXRTdGF0ZVJlY29yZChyZWNvcmQ6IFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkLCBsYXlvdXQ6IHVua25vd24pOiBudWxsIHwgV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQge1xuICBjb25zdCBsZWFmSWRzID0gY29sbGVjdExlYWZJZHMobGF5b3V0KTtcbiAgY29uc3Qgc2VyaWFsaXplZCA9IGNsb25lSnNvbihyZWNvcmQpO1xuICBjb25zdCBwbHVnaW5zID0gc2VyaWFsaXplZC5wbHVnaW5zO1xuICBmb3IgKGNvbnN0IFtwbHVnaW5JZCwgcGx1Z2luUmVjb3JkXSBvZiBPYmplY3QuZW50cmllcyhwbHVnaW5zKSkge1xuICAgIGZvciAoY29uc3QgW2xlYWZJZCwgYnVja2V0XSBvZiBPYmplY3QuZW50cmllcyhwbHVnaW5SZWNvcmQubGVhdmVzKSkge1xuICAgICAgaWYgKCFsZWFmSWRzLmhhcyhsZWFmSWQpIHx8IE9iamVjdC5rZXlzKGJ1Y2tldCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gTGVhZiBpZHMgYXJlIHJlY29yZCBrZXlzLlxuICAgICAgICBkZWxldGUgcGx1Z2luUmVjb3JkLmxlYXZlc1tsZWFmSWRdO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpc0VtcHR5ID0gT2JqZWN0LmtleXMocGx1Z2luUmVjb3JkLndvcmtzcGFjZSkubGVuZ3RoID09PSAwICYmIE9iamVjdC5rZXlzKHBsdWdpblJlY29yZC5sZWF2ZXMpLmxlbmd0aCA9PT0gMFxuICAgICAgJiYgT2JqZWN0LmtleXMocGx1Z2luUmVjb3JkKS5sZW5ndGggPT09IEtOT1dOX1BMVUdJTl9SRUNPUkRfRklFTERfQ09VTlQ7XG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gUGx1Z2luIGlkcyBhcmUgcmVjb3JkIGtleXMuXG4gICAgICBkZWxldGUgcGx1Z2luc1twbHVnaW5JZF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHBsdWdpbnMpLmxlbmd0aCA9PT0gMCAmJiBPYmplY3Qua2V5cyhzZXJpYWxpemVkKS5sZW5ndGggPT09IDEgPyBudWxsIDogc2VyaWFsaXplZDtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SnNvblZhbHVlKHZhbHVlOiB1bmtub3duKTogYXNzZXJ0cyB2YWx1ZSBpcyBKc29uVmFsdWUge1xuICBpZiAoIWlzRGF0YVN0b3JlSnNvblZhbHVlKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Egd29ya3NwYWNlIGxheW91dCBzdGF0ZSB2YWx1ZSBtdXN0IGJlIEpTT04tc2FmZScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lSnNvbjxUPih2YWx1ZTogVCk6IFQge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkgYXMgc3RyaW5nKSBhcyBUO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0TGVhZklkcyhsYXlvdXQ6IHVua25vd24pOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IGxlYWZJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZnVuY3Rpb24gdmlzaXQoaXRlbTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICghaXNQbGFpblJlY29yZChpdGVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGl0ZW1bJ2lkJ107XG4gICAgaWYgKGl0ZW1bJ3R5cGUnXSA9PT0gJ2xlYWYnICYmIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxlYWZJZHMuYWRkKGlkKTtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRyZW4gPSBpdGVtWydjaGlsZHJlbiddO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICB2aXNpdChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzUGxhaW5SZWNvcmQobGF5b3V0KSkge1xuICAgIGZvciAoY29uc3Qgcm9vdEtleSBvZiBbJ21haW4nLCAnbGVmdCcsICdyaWdodCcsICdmbG9hdGluZyddKSB7XG4gICAgICB2aXNpdChsYXlvdXRbcm9vdEtleV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGVhZklkcztcbn1cblxuZnVuY3Rpb24gZW5zdXJlQnVja2V0KHN0YXRlOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVNoYXJlZFN0YXRlLCBwbHVnaW5JZDogc3RyaW5nLCBsZWFmSWQ6IG51bGwgfCBzdHJpbmcpOiBKc29uUmVjb3JkIHtcbiAgY29uc3QgcGx1Z2luUmVjb3JkID0gc3RhdGUucmVjb3JkLnBsdWdpbnNbcGx1Z2luSWRdID8/IHsgbGVhdmVzOiB7fSwgd29ya3NwYWNlOiB7fSB9O1xuICBzdGF0ZS5yZWNvcmQucGx1Z2luc1twbHVnaW5JZF0gPSBwbHVnaW5SZWNvcmQ7XG4gIGlmIChsZWFmSWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gcGx1Z2luUmVjb3JkLndvcmtzcGFjZTtcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldCA9IHBsdWdpblJlY29yZC5sZWF2ZXNbbGVhZklkXSA/PyB7fTtcbiAgcGx1Z2luUmVjb3JkLmxlYXZlc1tsZWFmSWRdID0gYnVja2V0O1xuICByZXR1cm4gYnVja2V0O1xufVxuXG5mdW5jdGlvbiBnZXRCdWNrZXQoc3RhdGU6IFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUsIHBsdWdpbklkOiBzdHJpbmcsIGxlYWZJZDogbnVsbCB8IHN0cmluZyk6IEpzb25SZWNvcmQgfCBudWxsIHtcbiAgY29uc3QgcGx1Z2luUmVjb3JkID0gc3RhdGUucmVjb3JkLnBsdWdpbnNbcGx1Z2luSWRdO1xuICBpZiAoIXBsdWdpblJlY29yZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBsZWFmSWQgPT09IG51bGwgPyBwbHVnaW5SZWNvcmQud29ya3NwYWNlIDogcGx1Z2luUmVjb3JkLmxlYXZlc1tsZWFmSWRdID8/IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldExheW91dFJlY29yZFZhbHVlKGxheW91dDogdW5rbm93bik6IHVua25vd24ge1xuICByZXR1cm4gaXNQbGFpblJlY29yZChsYXlvdXQpID8gbGF5b3V0W1dPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWV0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldExlYWZJZChsZWFmOiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmKTogbnVsbCB8IHN0cmluZyB7XG4gIHJldHVybiBsZWFmID8gbGVhZi5pZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZFN0YXRlKCk6IFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxXb3Jrc3BhY2VMYXlvdXRTdGF0ZVNoYXJlZFN0YXRlPihTSEFSRURfU1RBVEVfS0VZLCB7XG4gICAgaW5zdGFsbGF0aW9uOiBudWxsLFxuICAgIGlzSHlkcmF0ZWQ6IGZhbHNlLFxuICAgIHJlY29yZDogeyBwbHVnaW5zOiB7fSB9LFxuICAgIHN1YnNjcmlwdGlvbnM6IFtdXG4gIH0pLnZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsTGF5b3V0U3RhdGUoYXBwOiBBcHAsIHN0YXRlOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVNoYXJlZFN0YXRlKTogKCkgPT4gdm9pZCB7XG4gIGxldCBpc1VuaW5zdGFsbGVkID0gZmFsc2U7XG4gIGNvbnN0IHVuaW5zdGFsbFBhdGNoID0gYXJvdW5kKGFwcC53b3Jrc3BhY2UsIHtcbiAgICBnZXRMYXlvdXQ6IChuZXh0KSA9PlxuICAgICAgZnVuY3Rpb24gcGF0Y2hlZEdldExheW91dCh0aGlzOiBXb3Jrc3BhY2UpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IGxheW91dCA9IG5leHQuY2FsbCh0aGlzKTtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gc2VyaWFsaXplV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQoc3RhdGUucmVjb3JkLCBsYXlvdXQpO1xuICAgICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgICAgbGF5b3V0W1dPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWV0gPSByZWNvcmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheW91dDtcbiAgICAgIH0sXG4gICAgc2V0TGF5b3V0OiAobmV4dCkgPT5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIHBhdGNoZWRTZXRMYXlvdXQodGhpczogV29ya3NwYWNlLCBsYXlvdXQ6IFBhcmFtZXRlcnM8V29ya3NwYWNlWydzZXRMYXlvdXQnXT5bMF0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgc3RhdGUucmVjb3JkID0gcGFyc2VXb3Jrc3BhY2VMYXlvdXRTdGF0ZVJlY29yZChnZXRMYXlvdXRSZWNvcmRWYWx1ZShsYXlvdXQpKTtcbiAgICAgICAgc3RhdGUuaXNIeWRyYXRlZCA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgbmV4dC5jYWxsKHRoaXMsIGxheW91dCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgbm90aWZ5TGF5b3V0TG9hZChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFzdGF0ZS5pc0h5ZHJhdGVkICYmIGFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkpIHtcbiAgICAvLyBMb2FkZWQgYWZ0ZXIgdGhlIGxheW91dDogcmVhZCB0aGUgbGF5b3V0IHRoZSBsYXN0IGluc3RhbGxhdGlvbiBzYXZlZCwgb25jZSwga2VlcGluZyB3aGF0IHdhcyBzZXQgbWVhbndoaWxlLlxuICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgYXBwLndvcmtzcGFjZS5yZWFkV29ya3NwYWNlRmlsZSgpO1xuICAgICAgaWYgKGlzVW5pbnN0YWxsZWQgfHwgc3RhdGUuaXNIeWRyYXRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZXJnZU1pc3Npbmcoc3RhdGUucmVjb3JkLCBwYXJzZVdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkKGdldExheW91dFJlY29yZFZhbHVlKHNhdmVkKSkpO1xuICAgICAgc3RhdGUuaXNIeWRyYXRlZCA9IHRydWU7XG4gICAgICBub3RpZnlMYXlvdXRMb2FkKHN0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaXNVbmluc3RhbGxlZCA9IHRydWU7XG4gICAgdW5pbnN0YWxsUGF0Y2goKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW52b2tlTGlzdGVuZXIobGlzdGVuZXI6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBsaXN0ZW5lcigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Egd29ya3NwYWNlIGxheW91dCBzdGF0ZSBsaXN0ZW5lciBmYWlsZWQnLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNKc29uT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSnNvbk9iamVjdCB7XG4gIHJldHVybiBpc1BsYWluUmVjb3JkKHZhbHVlKSAmJiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5SZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VNaXNzaW5nKHRhcmdldDogV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQsIHNvdXJjZTogV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbcGx1Z2luSWQsIHNvdXJjZVBsdWdpbl0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlLnBsdWdpbnMpKSB7XG4gICAgY29uc3QgdGFyZ2V0UGx1Z2luID0gdGFyZ2V0LnBsdWdpbnNbcGx1Z2luSWRdO1xuICAgIGlmICghdGFyZ2V0UGx1Z2luKSB7XG4gICAgICB0YXJnZXQucGx1Z2luc1twbHVnaW5JZF0gPSBzb3VyY2VQbHVnaW47XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlUGx1Z2luLndvcmtzcGFjZSkpIHtcbiAgICAgIHRhcmdldFBsdWdpbi53b3Jrc3BhY2Vba2V5XSA/Pz0gdmFsdWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2xlYWZJZCwgYnVja2V0XSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2VQbHVnaW4ubGVhdmVzKSkge1xuICAgICAgdGFyZ2V0UGx1Z2luLmxlYXZlc1tsZWFmSWRdID8/PSBidWNrZXQ7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vdGlmeUxheW91dExvYWQoc3RhdGU6IFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc25hcHNob3Qoc3RhdGUuc3Vic2NyaXB0aW9ucykpIHtcbiAgICBzdWJzY3JpcHRpb24ub25MYXlvdXRMb2FkKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQbHVnaW5SZWNvcmQodmFsdWU6IHVua25vd24pOiBudWxsIHwgV29ya3NwYWNlTGF5b3V0U3RhdGVQbHVnaW5SZWNvcmQge1xuICBpZiAoIWlzSnNvbk9iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGxlYXZlczogUmVjb3JkPHN0cmluZywgSnNvblJlY29yZD4gPSB7fTtcbiAgY29uc3QgcmF3TGVhdmVzID0gdmFsdWVbJ2xlYXZlcyddO1xuICBpZiAoaXNKc29uT2JqZWN0KHJhd0xlYXZlcykpIHtcbiAgICBmb3IgKGNvbnN0IFtsZWFmSWQsIGJ1Y2tldF0gb2YgT2JqZWN0LmVudHJpZXMocmF3TGVhdmVzKSkge1xuICAgICAgaWYgKGlzSnNvbk9iamVjdChidWNrZXQpKSB7XG4gICAgICAgIGxlYXZlc1tsZWFmSWRdID0gY2xvbmVKc29uPEpzb25SZWNvcmQ+KGJ1Y2tldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmF3V29ya3NwYWNlID0gdmFsdWVbJ3dvcmtzcGFjZSddO1xuICByZXR1cm4ge1xuICAgIC4uLmNsb25lSnNvbih2YWx1ZSksXG4gICAgbGVhdmVzLFxuICAgIHdvcmtzcGFjZTogaXNKc29uT2JqZWN0KHJhd1dvcmtzcGFjZSkgPyBjbG9uZUpzb248SnNvblJlY29yZD4ocmF3V29ya3NwYWNlKSA6IHt9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlYWRSYXdWYWx1ZShzdGF0ZTogV29ya3NwYWNlTGF5b3V0U3RhdGVTaGFyZWRTdGF0ZSwgcGx1Z2luSWQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGxlYWZJZDogbnVsbCB8IHN0cmluZyk6IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRCdWNrZXQoc3RhdGUsIHBsdWdpbklkLCBsZWFmSWQpPy5ba2V5XTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFDQSxtQkFBeUI7QUFDekIsbUJBQWtDO0FBRWxDLGdDQUFxQztBQUNyQyxnQ0FBb0M7QUFDcEMsMEJBQTRCO0FBQzVCLHFDQUF1QjtBQUtoQixNQUFNLG9DQUFvQztBQUVqRCxNQUFNLG1CQUFtQjtBQUt6QixNQUFNLGtDQUFrQztBQTBNeEMsTUFBTSw0QkFBcUU7QUFBQSxFQUN6RDtBQUFBLEVBRUM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFVixZQUFZLFFBQThDO0FBQy9ELFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssZUFBZSxPQUFPO0FBQzNCLFNBQUssVUFBVSxPQUFPO0FBQ3RCLFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssV0FBVyxPQUFPO0FBQ3ZCLFNBQUssWUFBWSxPQUFPO0FBQUEsRUFDMUI7QUFBQSxFQUVPLElBQUksTUFBeUI7QUFDbEMsV0FBTyxLQUFLLFFBQVEsYUFBYSxlQUFlLEdBQUcsS0FBSyxVQUFVLEtBQUssS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDO0FBQUEsRUFDOUY7QUFBQSxFQUVPLElBQUksTUFBK0I7QUFDeEMsV0FBTyxhQUFhLGVBQWUsR0FBRyxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsSUFBSSxDQUFDLE1BQU07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
495
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3dvcmtzcGFjZS1sYXlvdXQtc3RhdGUtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBLZWVwcyBhIHBsdWdpbidzIGxheW91dC1zY29wZWQgc3RhdGUgaW4gdGhlIHdvcmtzcGFjZSBsYXlvdXQgaXRzZWxmLCBzbyBlYWNoIHNhdmVkIHdvcmtzcGFjZSByZW1lbWJlcnMgaXRzIG93biB2YWx1ZVxuICogYW5kIHN3aXRjaGluZyB3b3Jrc3BhY2VzIHJlc3RvcmVzIGl0LCBpbnN0ZWFkIG9mIG9uZSBnbG9iYWwgdmFsdWUgaW4gYGRhdGEuanNvbmAuXG4gKlxuICogUmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjFgOiBgV29ya3NwYWNlLmdldExheW91dCgpYCBidWlsZHMgYSBmcmVzaCBvYmplY3QgKGBtYWluYCwgYGxlZnRgLCBgcmlnaHRgLCBgbGVmdC1yaWJib25gLFxuICogYGZsb2F0aW5nYCwgYGFjdGl2ZWApIGFuZCBgV29ya3NwYWNlLnNldExheW91dCgpYCBpZ25vcmVzIGV2ZXJ5IG90aGVyIHRvcC1sZXZlbCBrZXkuIGBkZXNlcmlhbGl6ZUxheW91dGAga2VlcHMgZWFjaFxuICogaXRlbSdzIGBpZGAsIHBvcG91dCBsZWF2ZXMgaW5jbHVkZWQuIFRoZSBXb3Jrc3BhY2VzIGNvcmUgcGx1Z2luIHNhdmVzIHRocm91Z2ggYGdldExheW91dCgpYCBhbmQgbG9hZHMgdGhyb3VnaFxuICogYGNoYW5nZUxheW91dCgpYCwgd2hpY2ggY2FsbHMgYHNldExheW91dCgpYC4gU3RhcnR1cCBnb2VzIHRocm91Z2ggYGxvYWRMYXlvdXQoKWAsIGByZWFkV29ya3NwYWNlRmlsZSgpYCBhbmRcbiAqIGBzZXRMYXlvdXQoKWAsIGFmdGVyIHRoZSBwbHVnaW5zIGVuYWJsZWQgYXQgc3RhcnR1cCBoYXZlIGxvYWRlZC4gU28gdHdvIHBhdGNoZXMgb24gdGhlIGBhcHAud29ya3NwYWNlYCBpbnN0YW5jZSBjYXJyeVxuICogdGhlIHdob2xlIHRoaW5nOiBgZ2V0TGF5b3V0YCB3cml0ZXMgdGhlIHJlY29yZHMgdW5kZXIge0BsaW5rIFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWX0sIGFuZCBgc2V0TGF5b3V0YFxuICogcmVwbGFjZXMgdGhlbSBmcm9tIHRoZSBsYXlvdXQgaXQgaXMgaGFuZGVkIGJlZm9yZSBhbnkgdmlldyBpcyByZXN0b3JlZC4gUGVyLWxlYWYgc3RhdGUgaXMga2V5ZWQgYnkgbGVhZiBpZCBhdCB0aGVcbiAqIGxheW91dCBsZXZlbCwgc28gbm8gYFdvcmtzcGFjZUl0ZW0uc2VyaWFsaXplYCBvciBgZGVzZXJpYWxpemVMYXlvdXRgIHBhdGNoIGlzIG5lZWRlZC5cbiAqXG4gKiBBIHZpZXcgdGhlIHBsdWdpbiBvd25zIG5lZWRzIG5vbmUgb2YgdGhpczogYFZpZXcuZ2V0U3RhdGVgIC8gYHNldFN0YXRlYCBhbHJlYWR5IHJpZGUgaW4gZWFjaCBsZWFmJ3Mgc3RhdGUuIFRoaXNcbiAqIGNvbXBvbmVudCBpcyBmb3IgdGhlIHNjb3BlIHRob3NlIG1ldGhvZHMgY2Fubm90IHJlcHJlc2VudDogdGhlIHdob2xlIGxheW91dCwgYW5kIGxlYXZlcyBvZiB2aWV3cyB0aGUgcGx1Z2luIGRvZXMgbm90XG4gKiBvd24uXG4gKlxuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIG93biBjb3B5IG9mIHRoaXMgbGlicmFyeSwgc28gdGhlIHJlY29yZHMsIHRoZSBzdWJzY3JpcHRpb25zIGFuZCBPTkUgaW5zdGFsbGF0aW9uIG9mIHRoZVxuICogcGF0Y2hlcyBsaXZlIGluIHRoZSBzaGFyZWQtc3RhdGUgYmFnIHVuZGVyIGEgdmVyc2lvbmVkIGtleSwgb3duZWQgYnkgb25lIHN1YnNjcmliZXIuIFdoZW4gdGhlIG93bmVyIHVubG9hZHMgd2hpbGVcbiAqIG90aGVycyByZW1haW4sIHRoZSBuZXh0IHN1YnNjcmliZXIgaW5zdGFsbHMgYWdhaW4gZnJvbSBpdHMgb3duIGNvcHkuIFdoYXQgY3Jvc3NlcyB0aGF0IGJvdW5kYXJ5IGlzIGEgd2lyZSBmb3JtYXRcbiAqIGJldHdlZW4gY29waWVzIG9mIGRpZmZlcmVudCB2ZXJzaW9uczogcGxhaW4gb2JqZWN0cyBhbmQgcGxhaW4gZnVuY3Rpb25zIG9ubHksIGZpZWxkcyBvbmx5IGV2ZXIgYWRkZWQsIGFuZCBhIGNoYW5nZSBvZlxuICogbWVhbmluZyBtb3ZlcyB0byBhIG5ldyBrZXkuIFRoZSBsYXlvdXQgcmVjb3JkIGlzIGEgd2lyZSBmb3JtYXQgdG9vLCBwZXJzaXN0ZWQgaW4gYHdvcmtzcGFjZS5qc29uYCBhbmQgaW4gZXZlcnkgc2F2ZWRcbiAqIHdvcmtzcGFjZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgV29ya3NwYWNlLFxuICBXb3Jrc3BhY2VMZWFmXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHtcbiAgSnNvbk9iamVjdCxcbiAgSnNvblZhbHVlXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FycmF5JztcbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcblxuaW1wb3J0IHsgaXNEYXRhU3RvcmVKc29uVmFsdWUgfSBmcm9tICcuLi9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLXJlcGxpY2EudHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4uL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IGFyb3VuZCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFRoZSB0b3AtbGV2ZWwga2V5IG9mIGEgc2VyaWFsaXplZCBsYXlvdXQgdGhhdCBob2xkcyB0aGUgcmVjb3Jkcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWSA9ICdvYnNpZGlhbkxpYkxheW91dFN0YXRlVjEnO1xuXG5jb25zdCBTSEFSRURfU1RBVEVfS0VZID0gJ3dvcmtzcGFjZUxheW91dFN0YXRlVjEnO1xuXG4vKipcbiAqIFRoZSBmaWVsZHMgb2YgYSBwbHVnaW4gcmVjb3JkIHRoaXMgdmVyc2lvbiBrbm93czogYGxlYXZlc2AgYW5kIGB3b3Jrc3BhY2VgLlxuICovXG5jb25zdCBLTk9XTl9QTFVHSU5fUkVDT1JEX0ZJRUxEX0NPVU5UID0gMjtcblxuLyoqXG4gKiBBIGNoYW5nZSBvZiBvbmUga2V5J3MgdmFsdWUsIGluIG9uZSBzY29wZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdmFsdWUgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUNoYW5nZTxUPiB7XG4gIC8qKlxuICAgKiBUaGUgbGVhZiB3aG9zZSB2YWx1ZSBjaGFuZ2VkLCBvciBgbnVsbGAgZm9yIHRoZSB3b3Jrc3BhY2Ugc2NvcGUgb3IgYSBsZWFmIG5vIGxvbmdlciBpbiB0aGUgbGF5b3V0LlxuICAgKi9cbiAgcmVhZG9ubHkgbGVhZjogbnVsbCB8IFdvcmtzcGFjZUxlYWY7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgbGVhZiB3aG9zZSB2YWx1ZSBjaGFuZ2VkLCBvciBgbnVsbGAgZm9yIHRoZSB3b3Jrc3BhY2Ugc2NvcGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmSWQ6IG51bGwgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBiZWZvcmUgdGhlIGNoYW5nZSwgYXMge0BsaW5rIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5LmdldH0gcmVhZCBpdC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBUO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgYWZ0ZXIgdGhlIGNoYW5nZSwgYXMge0BsaW5rIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5LmdldH0gcmVhZHMgaXQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogVDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgV29ya3NwYWNlTGF5b3V0U3RhdGVDb21wb25lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHBsdWdpbiB0aGUgdmFsdWVzIGJlbG9uZyB0by4gRXZlcnkgdmFsdWUgaXMgbmFtZXNwYWNlZCBieSBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSB0eXBlZCBoYW5kbGUgdG8gb25lIGxheW91dC1zY29wZWQga2V5LlxuICpcbiAqIEV2ZXJ5IG1ldGhvZCB0YWtlcyBhbiBvcHRpb25hbCBsZWFmLiBXaXRob3V0IG9uZSwgdGhlIHZhbHVlIGJlbG9uZ3MgdG8gdGhlIHdob2xlIGxheW91dCAodGhlIHdvcmtzcGFjZSBzY29wZSkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHZhbHVlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXk8VD4ge1xuICAvKipcbiAgICogUmVhZHMgdGhlIHZhbHVlOiBhIGNsb25lIG9mIHRoZSBzdG9yZWQgb25lLCBvciBvZiB0aGUgZGVmYXVsdCB3aGVuIG5vdGhpbmcgaXMgc3RvcmVkIG9yIHRoZSBzdG9yZWQgdmFsdWUgZmFpbHMgdGhlXG4gICAqIGtleSdzIGd1YXJkLlxuICAgKlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSBsZWFmLCBvciBub3RoaW5nIGZvciB0aGUgd29ya3NwYWNlIHNjb3BlLlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBnZXQ6IChsZWFmPzogV29ya3NwYWNlTGVhZikgPT4gVDtcblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSB2YWx1ZSBpcyBzdG9yZWQsIHZhbGlkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGxlYWYgLSBUaGUgbGVhZiwgb3Igbm90aGluZyBmb3IgdGhlIHdvcmtzcGFjZSBzY29wZS5cbiAgICogQHJldHVybnMgV2hldGhlciBhIHZhbHVlIGlzIHN0b3JlZC5cbiAgICovXG4gIHJlYWRvbmx5IGhhczogKGxlYWY/OiBXb3Jrc3BhY2VMZWFmKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IG5hbWUsIHVuaXF1ZSB3aXRoaW4gdGhlIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIGNoYW5nZXMgb2YgdGhpcyBrZXkgbWFkZSB0aHJvdWdoIGBzZXRgIG9yIGB1bnNldGAsIGluIGFueSBzY29wZSBhbmQgZnJvbSBhbnkgY29weSBvZiB0aGUgbGlicmFyeS4gQVxuICAgKiBsYXlvdXQgbG9hZCBpcyByZXBvcnRlZCB0aHJvdWdoIHtAbGluayBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUNvbXBvbmVudC5vbkxheW91dExvYWR9IGluc3RlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxlZCBhZnRlciBlYWNoIGNoYW5nZS5cbiAgICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHVuc3Vic2NyaWJlcy4gVW5sb2FkaW5nIHRoZSBjb21wb25lbnQgdW5zdWJzY3JpYmVzIHRvby5cbiAgICovXG4gIHJlYWRvbmx5IG9uQ2hhbmdlOiAoY2FsbGJhY2s6IChjaGFuZ2U6IFdvcmtzcGFjZUxheW91dFN0YXRlQ2hhbmdlPFQ+KSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgYSBjbG9uZSBvZiB0aGUgdmFsdWUgYW5kIHJlcXVlc3RzIGEgbGF5b3V0IHNhdmUuIFN0b3JpbmcgYSB2YWx1ZSBlcXVhbCB0byB0aGUgc3RvcmVkIG9uZSBkb2VzIG5vdGhpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZS4gSXQgbXVzdCBiZSBKU09OLXNhZmU7IGBudWxsYCBpcyBzdG9yZWQgYXMgYG51bGxgLlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSBsZWFmLCBvciBub3RoaW5nIGZvciB0aGUgd29ya3NwYWNlIHNjb3BlLlxuICAgKiBAdGhyb3dzIEEgYFR5cGVFcnJvcmAgaWYgdGhlIHZhbHVlIGlzIG5vdCBKU09OLXNhZmUuXG4gICAqL1xuICByZWFkb25seSBzZXQ6ICh2YWx1ZTogVCwgbGVhZj86IFdvcmtzcGFjZUxlYWYpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHN0b3JlZCB2YWx1ZSwgc28gYGdldGAgcmVhZHMgdGhlIGRlZmF1bHQgYWdhaW4sIGFuZCByZXF1ZXN0cyBhIGxheW91dCBzYXZlLlxuICAgKlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSBsZWFmLCBvciBub3RoaW5nIGZvciB0aGUgd29ya3NwYWNlIHNjb3BlLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5zZXQ6IChsZWFmPzogV29ya3NwYWNlTGVhZikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgbGF5b3V0LXNjb3BlZCBrZXkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHZhbHVlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlEZWZpbml0aW9uPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSByZWFkIHdoZW4gbm90aGluZyB2YWxpZCBpcyBzdG9yZWQuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0VmFsdWU6IFQ7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBhIHN0b3JlZCB2YWx1ZS4gQSB2YWx1ZSB0aGF0IGZhaWxzIHJlYWRzIGFzIHRoZSBkZWZhdWx0IGFuZCBzdGF5cyBzdG9yZWQgdW50aWwgaXQgaXMgcmVwbGFjZWQgb3IgdW5zZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFjY2VwdHMgZXZlcnkgSlNPTiB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzVmFsaWQ/OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFQ7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT25lIHBsdWdpbidzIHJlY29yZHMuIEZpZWxkcyBhIG5ld2VyIGNvcHkgYWRkcyBhcmUgcHJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlUGx1Z2luUmVjb3JkIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMgYnkgbGVhZiBpZCwgdGhlbiBieSBrZXkuXG4gICAqL1xuICByZWFkb25seSBsZWF2ZXM6IFJlY29yZDxzdHJpbmcsIEpzb25SZWNvcmQ+O1xuXG4gIC8qKlxuICAgKiBGaWVsZHMgYSBuZXdlciBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFkZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgW2ZpZWxkOiBzdHJpbmddOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlLXNjb3BlIHZhbHVlcyBieSBrZXkuXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2U6IEpzb25SZWNvcmQ7XG59XG5cbi8qKlxuICogVGhlIHJlY29yZCBwZXJzaXN0ZWQgdW5kZXIge0BsaW5rIFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWX0uIEZpZWxkcyBhIG5ld2VyIGNvcHkgYWRkcyBhcmUgcHJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkIHtcbiAgLyoqXG4gICAqIFRoZSByZWNvcmRzIGJ5IHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbnM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUxheW91dFN0YXRlUGx1Z2luUmVjb3JkPjtcblxuICAvKipcbiAgICogRmllbGRzIGEgbmV3ZXIgY29weSBvZiB0aGUgbGlicmFyeSBhZGRlZC5cbiAgICovXG4gIHJlYWRvbmx5IFtmaWVsZDogc3RyaW5nXTogdW5rbm93bjtcbn1cblxudHlwZSBKc29uUmVjb3JkID0gUmVjb3JkPHN0cmluZywgSnNvblZhbHVlPjtcblxuaW50ZXJmYWNlIFJlY29yZENoYW5nZSB7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSBsZWFmSWQ6IG51bGwgfCBzdHJpbmc7XG4gIHJlYWRvbmx5IG5ld1ZhbHVlOiBKc29uVmFsdWUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBKc29uVmFsdWUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUluc3RhbGxhdGlvbiB7XG4gIHJlYWRvbmx5IG93bmVyOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVN1YnNjcmlwdGlvbjtcbiAgcmVhZG9ubHkgdW5pbnN0YWxsOiAoKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlJbXBsUGFyYW1zPFQ+IHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZTogVDtcbiAgcmVhZG9ubHkgaXNWYWxpZDogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUO1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3Vic2NyaWJlOiAobGlzdGVuZXI6IChjaGFuZ2U6IFJlY29yZENoYW5nZSkgPT4gdm9pZCkgPT4gKCkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBTdWJzY3JpYmVyIGNoYW5nZXMgcmVwbGFjZSBvciBjbGVhciB0aGUgc2hhcmVkIGluc3RhbGxhdGlvbi5cbiAgaW5zdGFsbGF0aW9uOiBudWxsIHwgV29ya3NwYWNlTGF5b3V0U3RhdGVJbnN0YWxsYXRpb247XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIFNldCBvbmNlIGEgbGF5b3V0IG9yIHRoZSBzYXZlZCBsYXlvdXQgZmlsZSBoYXMgYmVlbiByZWFkLlxuICBpc0h5ZHJhdGVkOiBib29sZWFuO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBBIGxheW91dCBsb2FkIHJlcGxhY2VzIHRoZSByZWNvcmRzLlxuICByZWNvcmQ6IFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkO1xuICByZWFkb25seSBzdWJzY3JpcHRpb25zOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVN1YnNjcmlwdGlvbltdO1xufVxuXG4vKipcbiAqIEEgc3Vic2NyaWJlciBpbiB0aGUgc2hhcmVkIHN0YXRlLiBUaGUgc2hhcGUgaXMgcGFydCBvZiB0aGUgd2lyZSBmb3JtYXQgYmV0d2VlbiBjb3BpZXM6IGZpZWxkcyBhcmUgb25seSBldmVyIGFkZGVkLlxuICovXG5pbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVTdWJzY3JpcHRpb24ge1xuICByZWFkb25seSBpbnN0YWxsOiAoKSA9PiAoKSA9PiB2b2lkO1xuICByZWFkb25seSBvbkxheW91dExvYWQ6ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uUmVjb3JkQ2hhbmdlOiAoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5SW1wbDxUPiBpbXBsZW1lbnRzIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5PFQ+IHtcbiAgcHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFZhbHVlOiBUO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzVmFsaWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgVDtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmliZTogKGxpc3RlbmVyOiAoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlJbXBsUGFyYW1zPFQ+KSB7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gcGFyYW1zLmRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLmlzVmFsaWQgPSBwYXJhbXMuaXNWYWxpZDtcbiAgICB0aGlzLmtleSA9IHBhcmFtcy5rZXk7XG4gICAgdGhpcy5wbHVnaW5JZCA9IHBhcmFtcy5wbHVnaW5JZDtcbiAgICB0aGlzLnN1YnNjcmliZSA9IHBhcmFtcy5zdWJzY3JpYmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGxlYWY/OiBXb3Jrc3BhY2VMZWFmKTogVCB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShyZWFkUmF3VmFsdWUoZ2V0U2hhcmVkU3RhdGUoKSwgdGhpcy5wbHVnaW5JZCwgdGhpcy5rZXksIGdldExlYWZJZChsZWFmKSkpO1xuICB9XG5cbiAgcHVibGljIGhhcyhsZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkUmF3VmFsdWUoZ2V0U2hhcmVkU3RhdGUoKSwgdGhpcy5wbHVnaW5JZCwgdGhpcy5rZXksIGdldExlYWZJZChsZWFmKSkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZShjYWxsYmFjazogKGNoYW5nZTogV29ya3NwYWNlTGF5b3V0U3RhdGVDaGFuZ2U8VD4pID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5rZXkgIT09IHRoaXMua2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgbGVhZjogY2hhbmdlLmxlYWZJZCA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZkJ5SWQoY2hhbmdlLmxlYWZJZCksXG4gICAgICAgIGxlYWZJZDogY2hhbmdlLmxlYWZJZCxcbiAgICAgICAgb2xkVmFsdWU6IHRoaXMucmVzb2x2ZShjaGFuZ2Uub2xkVmFsdWUpLFxuICAgICAgICB2YWx1ZTogdGhpcy5yZXNvbHZlKGNoYW5nZS5uZXdWYWx1ZSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldCh2YWx1ZTogVCwgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiB2b2lkIHtcbiAgICBhc3NlcnRKc29uVmFsdWUodmFsdWUpO1xuICAgIHRoaXMud3JpdGUoY2xvbmVKc29uKHZhbHVlKSwgZ2V0TGVhZklkKGxlYWYpKTtcbiAgfVxuXG4gIHB1YmxpYyB1bnNldChsZWFmPzogV29ya3NwYWNlTGVhZik6IHZvaWQge1xuICAgIHRoaXMud3JpdGUodW5kZWZpbmVkLCBnZXRMZWFmSWQobGVhZikpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlKHJhd1ZhbHVlOiBKc29uVmFsdWUgfCB1bmRlZmluZWQpOiBUIHtcbiAgICByZXR1cm4gY2xvbmVKc29uKHJhd1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pc1ZhbGlkKHJhd1ZhbHVlKSA/IHJhd1ZhbHVlIDogdGhpcy5kZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZShuZXdWYWx1ZTogSnNvblZhbHVlIHwgdW5kZWZpbmVkLCBsZWFmSWQ6IG51bGwgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFNoYXJlZFN0YXRlKCk7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSByZWFkUmF3VmFsdWUoc3RhdGUsIHRoaXMucGx1Z2luSWQsIHRoaXMua2V5LCBsZWFmSWQpO1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShvbGRWYWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIHN0b3JlZCBvbGQgdmFsdWUgbWVhbnMgdGhlIGJ1Y2tldCBleGlzdHMsIHNvIHRoaXMgY3JlYXRlcyBub3RoaW5nLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBUaGUgYnVja2V0IGlzIGEgcGxhaW4gcmVjb3JkIGtleWVkIGJ5IHVzZXItY2hvc2VuIG5hbWVzLlxuICAgICAgZGVsZXRlIGVuc3VyZUJ1Y2tldChzdGF0ZSwgdGhpcy5wbHVnaW5JZCwgbGVhZklkKVt0aGlzLmtleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuc3VyZUJ1Y2tldChzdGF0ZSwgdGhpcy5wbHVnaW5JZCwgbGVhZklkKVt0aGlzLmtleV0gPSBuZXdWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcC53b3Jrc3BhY2UucmVxdWVzdFNhdmVMYXlvdXQoKTtcbiAgICBjb25zdCBjaGFuZ2U6IFJlY29yZENoYW5nZSA9IHsga2V5OiB0aGlzLmtleSwgbGVhZklkLCBuZXdWYWx1ZSwgb2xkVmFsdWUsIHBsdWdpbklkOiB0aGlzLnBsdWdpbklkIH07XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc25hcHNob3Qoc3RhdGUuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblJlY29yZENoYW5nZShjaGFuZ2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEtlZXBzIGEgcGx1Z2luJ3MgbGF5b3V0LXNjb3BlZCB2YWx1ZXMgaW4gdGhlIHdvcmtzcGFjZSBsYXlvdXQsIHNvIHNhdmVkIHdvcmtzcGFjZXMgZWFjaCByZXN0b3JlIHRoZWlyIG93bi5cbiAqXG4gKiBBbnkgbnVtYmVyIG9mIHRoZXNlLCBpbiBhbnkgbnVtYmVyIG9mIHBsdWdpbnMsIHNoYXJlIG9uZSBpbnN0YWxsYXRpb24gcGVyIHtAbGluayBBcHB9LiBWYWx1ZXMgYXJlIHJlc3RvcmVkIHdoZW4gYVxuICogbGF5b3V0IGxvYWRzLCB3aGljaCBSRVBMQUNFUyBldmVyeSB2YWx1ZTogd3JpdGUgdGhlbSBhZnRlciB7QGxpbmsgV29ya3NwYWNlLm9uTGF5b3V0UmVhZHl9LCBhbmQgcmUtcmVhZCB0aGVtIGluXG4gKiB7QGxpbmsgb25MYXlvdXRMb2FkfS5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzcGFjZUxheW91dFN0YXRlQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBwbHVnaW4gdGhlIHZhbHVlcyBiZWxvbmcgdG8uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGxheW91dExvYWRMaXN0ZW5lcnMgPSBuZXcgU2V0PCgpID0+IHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVjb3JkQ2hhbmdlTGlzdGVuZXJzID0gbmV3IFNldDwoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgd29ya3NwYWNlIGxheW91dCBzdGF0ZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHRocm93cyBBIGBUeXBlRXJyb3JgIGlmIHRoZSBwbHVnaW4gaWQgaXMgZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoIXBhcmFtcy5wbHVnaW5JZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBsdWdpbiBpZCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5wbHVnaW5JZCA9IHBhcmFtcy5wbHVnaW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgdHlwZWQga2V5LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdmFsdWUgdHlwZS5cbiAgICogQHBhcmFtIGRlZmluaXRpb24gLSBUaGUga2V5IGRlZmluaXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBrZXkgaGFuZGxlLlxuICAgKiBAdGhyb3dzIEEgYFR5cGVFcnJvcmAgaWYgdGhlIGtleSBpcyBlbXB0eSBvciB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBub3QgSlNPTi1zYWZlLlxuICAgKi9cbiAgcHVibGljIGRlZmluZUtleTxUPihkZWZpbml0aW9uOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUtleURlZmluaXRpb248VD4pOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUtleTxUPiB7XG4gICAgaWYgKCFkZWZpbml0aW9uLmtleSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGtleSBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICBhc3NlcnRKc29uVmFsdWUoZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBuZXcgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlJbXBsPFQ+KHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBkZWZhdWx0VmFsdWU6IGNsb25lSnNvbihkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSksXG4gICAgICBpc1ZhbGlkOiBkZWZpbml0aW9uLmlzVmFsaWQgPz8gKChfdmFsdWUpOiBfdmFsdWUgaXMgVCA9PiB0cnVlKSxcbiAgICAgIGtleTogZGVmaW5pdGlvbi5rZXksXG4gICAgICBwbHVnaW5JZDogdGhpcy5wbHVnaW5JZCxcbiAgICAgIHN1YnNjcmliZTogKGxpc3RlbmVyKSA9PiB0aGlzLnN1YnNjcmliZVRvUmVjb3JkQ2hhbmdlcyhsaXN0ZW5lcilcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIGxheW91dCBsb2FkczogYSBzYXZlZCB3b3Jrc3BhY2UgbG9hZGVkLCB0aGUgbGF5b3V0IHJlc3RvcmVkIGF0IHN0YXJ0dXAsIG9yIHRoZSBzYXZlZCBsYXlvdXQgcmVhZCB3aGVuXG4gICAqIHRoZSBjb21wb25lbnQgaXMgZmlyc3QgbG9hZGVkIGFmdGVyIGxheW91dC1yZWFkeS4gRXZlcnkgdmFsdWUgbWF5IGhhdmUgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGVkIGFmdGVyIHRoZSBsYXlvdXQgaXMgbG9hZGVkLCBvbmNlIGl0cyBsZWF2ZXMgZXhpc3QuXG4gICAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB1bnN1YnNjcmliZXMuIFVubG9hZGluZyB0aGUgY29tcG9uZW50IHVuc3Vic2NyaWJlcyB0b28uXG4gICAqL1xuICBwdWJsaWMgb25MYXlvdXRMb2FkKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5sYXlvdXRMb2FkTGlzdGVuZXJzLmFkZChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMubGF5b3V0TG9hZExpc3RlbmVycy5kZWxldGUoY2FsbGJhY2spO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgc2hhcmVkIGluc3RhbGxhdGlvbiwgaW5zdGFsbGluZyBpdCB3aGVuIG5vYm9keSBoYXMgeWV0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcblxuICAgIGNvbnN0IHN0YXRlID0gZ2V0U2hhcmVkU3RhdGUoKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb246IFdvcmtzcGFjZUxheW91dFN0YXRlU3Vic2NyaXB0aW9uID0ge1xuICAgICAgaW5zdGFsbDogKCkgPT4gaW5zdGFsbExheW91dFN0YXRlKHRoaXMuYXBwLCBzdGF0ZSksXG4gICAgICBvbkxheW91dExvYWQ6ICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBzbmFwc2hvdCh0aGlzLmxheW91dExvYWRMaXN0ZW5lcnMpKSB7XG4gICAgICAgICAgaW52b2tlTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25SZWNvcmRDaGFuZ2U6IChjaGFuZ2UpID0+IHtcbiAgICAgICAgaWYgKGNoYW5nZS5wbHVnaW5JZCAhPT0gdGhpcy5wbHVnaW5JZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHNuYXBzaG90KHRoaXMucmVjb3JkQ2hhbmdlTGlzdGVuZXJzKSkge1xuICAgICAgICAgIGludm9rZUxpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgIGxpc3RlbmVyKGNoYW5nZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHN0YXRlLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIHN0YXRlLmluc3RhbGxhdGlvbiA/Pz0geyBvd25lcjogc3Vic2NyaXB0aW9uLCB1bmluc3RhbGw6IHN1YnNjcmlwdGlvbi5pbnN0YWxsKCkgfTtcblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRMb2FkTGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgICB0aGlzLnJlY29yZENoYW5nZUxpc3RlbmVycy5jbGVhcigpO1xuICAgICAgc3RhdGUuc3Vic2NyaXB0aW9ucy5zcGxpY2Uoc3RhdGUuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHN1YnNjcmlwdGlvbiksIDEpO1xuICAgICAgaWYgKHN0YXRlLmluc3RhbGxhdGlvbj8ub3duZXIgIT09IHN1YnNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLmluc3RhbGxhdGlvbi51bmluc3RhbGwoKTtcbiAgICAgIGNvbnN0IG5leHRPd25lciA9IHN0YXRlLnN1YnNjcmlwdGlvbnNbMF07XG4gICAgICBzdGF0ZS5pbnN0YWxsYXRpb24gPSBuZXh0T3duZXIgPyB7IG93bmVyOiBuZXh0T3duZXIsIHVuaW5zdGFsbDogbmV4dE93bmVyLmluc3RhbGwoKSB9IDogbnVsbDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9SZWNvcmRDaGFuZ2VzKGxpc3RlbmVyOiAoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZENoYW5nZUxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLnJlY29yZENoYW5nZUxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBwZXJzaXN0ZWQgcmVjb3JkLiBBIHBhcnQgdGhhdCBpcyBtYWxmb3JtZWQgaXMgZHJvcHBlZCBvbmUgbGV2ZWwgYXQgYSB0aW1lOiBhIG1hbGZvcm1lZCByZWNvcmQgcmVhZHMgYXNcbiAqIGVtcHR5LCBhIG1hbGZvcm1lZCBwbHVnaW4gcmVjb3JkIGRyb3BzIG9ubHkgdGhhdCBwbHVnaW4sIGFuZCBhIG1hbGZvcm1lZCBsZWFmIGJ1Y2tldCBkcm9wcyBvbmx5IHRoYXQgbGVhZi4gRmllbGRzIHRoaXNcbiAqIGNvcHkgZG9lcyBub3Qga25vdyBhcmUga2VwdC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgZm91bmQgdW5kZXIge0BsaW5rIFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWX0uXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHJlY29yZCwgc2hhcmluZyBub3RoaW5nIHdpdGggdGhlIGlucHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VXb3Jrc3BhY2VMYXlvdXRTdGF0ZVJlY29yZCh2YWx1ZTogdW5rbm93bik6IFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkIHtcbiAgaWYgKCFpc0pzb25PYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHsgcGx1Z2luczoge30gfTtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbnM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUxheW91dFN0YXRlUGx1Z2luUmVjb3JkPiA9IHt9O1xuICBjb25zdCByYXdQbHVnaW5zID0gdmFsdWVbJ3BsdWdpbnMnXTtcbiAgaWYgKGlzSnNvbk9iamVjdChyYXdQbHVnaW5zKSkge1xuICAgIGZvciAoY29uc3QgW3BsdWdpbklkLCByYXdQbHVnaW5SZWNvcmRdIG9mIE9iamVjdC5lbnRyaWVzKHJhd1BsdWdpbnMpKSB7XG4gICAgICBjb25zdCBwbHVnaW5SZWNvcmQgPSBwYXJzZVBsdWdpblJlY29yZChyYXdQbHVnaW5SZWNvcmQpO1xuICAgICAgaWYgKHBsdWdpblJlY29yZCkge1xuICAgICAgICBwbHVnaW5zW3BsdWdpbklkXSA9IHBsdWdpblJlY29yZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyAuLi5jbG9uZUpzb24odmFsdWUpLCBwbHVnaW5zIH07XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSByZWNvcmQgdG8gcGVyc2lzdCBpbnRvIGEgc2VyaWFsaXplZCBsYXlvdXQ6IGxlYWYgYnVja2V0cyBmb3IgbGVhdmVzIGFic2VudCBmcm9tIHRoZSBsYXlvdXQgYXJlIGxlZnQgb3V0LFxuICogYW5kIHNvIGFyZSBwbHVnaW5zIHdpdGggbm90aGluZyBsZWZ0LlxuICpcbiAqIEBwYXJhbSByZWNvcmQgLSBUaGUgY3VycmVudCByZWNvcmQuXG4gKiBAcGFyYW0gbGF5b3V0IC0gVGhlIHNlcmlhbGl6ZWQgbGF5b3V0LlxuICogQHJldHVybnMgVGhlIHJlY29yZCB0byBwZXJzaXN0LCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIHBlcnNpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVXb3Jrc3BhY2VMYXlvdXRTdGF0ZVJlY29yZChyZWNvcmQ6IFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkLCBsYXlvdXQ6IHVua25vd24pOiBudWxsIHwgV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQge1xuICBjb25zdCBsZWFmSWRzID0gY29sbGVjdExlYWZJZHMobGF5b3V0KTtcbiAgY29uc3Qgc2VyaWFsaXplZCA9IGNsb25lSnNvbihyZWNvcmQpO1xuICBjb25zdCBwbHVnaW5zID0gc2VyaWFsaXplZC5wbHVnaW5zO1xuICBmb3IgKGNvbnN0IFtwbHVnaW5JZCwgcGx1Z2luUmVjb3JkXSBvZiBPYmplY3QuZW50cmllcyhwbHVnaW5zKSkge1xuICAgIGZvciAoY29uc3QgW2xlYWZJZCwgYnVja2V0XSBvZiBPYmplY3QuZW50cmllcyhwbHVnaW5SZWNvcmQubGVhdmVzKSkge1xuICAgICAgaWYgKCFsZWFmSWRzLmhhcyhsZWFmSWQpIHx8IE9iamVjdC5rZXlzKGJ1Y2tldCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gTGVhZiBpZHMgYXJlIHJlY29yZCBrZXlzLlxuICAgICAgICBkZWxldGUgcGx1Z2luUmVjb3JkLmxlYXZlc1tsZWFmSWRdO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpc0VtcHR5ID0gT2JqZWN0LmtleXMocGx1Z2luUmVjb3JkLndvcmtzcGFjZSkubGVuZ3RoID09PSAwICYmIE9iamVjdC5rZXlzKHBsdWdpblJlY29yZC5sZWF2ZXMpLmxlbmd0aCA9PT0gMFxuICAgICAgJiYgT2JqZWN0LmtleXMocGx1Z2luUmVjb3JkKS5sZW5ndGggPT09IEtOT1dOX1BMVUdJTl9SRUNPUkRfRklFTERfQ09VTlQ7XG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gUGx1Z2luIGlkcyBhcmUgcmVjb3JkIGtleXMuXG4gICAgICBkZWxldGUgcGx1Z2luc1twbHVnaW5JZF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHBsdWdpbnMpLmxlbmd0aCA9PT0gMCAmJiBPYmplY3Qua2V5cyhzZXJpYWxpemVkKS5sZW5ndGggPT09IDEgPyBudWxsIDogc2VyaWFsaXplZDtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SnNvblZhbHVlKHZhbHVlOiB1bmtub3duKTogYXNzZXJ0cyB2YWx1ZSBpcyBKc29uVmFsdWUge1xuICBpZiAoIWlzRGF0YVN0b3JlSnNvblZhbHVlKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Egd29ya3NwYWNlIGxheW91dCBzdGF0ZSB2YWx1ZSBtdXN0IGJlIEpTT04tc2FmZScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lSnNvbjxUPih2YWx1ZTogVCk6IFQge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkgYXMgc3RyaW5nKSBhcyBUO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0TGVhZklkcyhsYXlvdXQ6IHVua25vd24pOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IGxlYWZJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZnVuY3Rpb24gdmlzaXQoaXRlbTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICghaXNQbGFpblJlY29yZChpdGVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGl0ZW1bJ2lkJ107XG4gICAgaWYgKGl0ZW1bJ3R5cGUnXSA9PT0gJ2xlYWYnICYmIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxlYWZJZHMuYWRkKGlkKTtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRyZW4gPSBpdGVtWydjaGlsZHJlbiddO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICB2aXNpdChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzUGxhaW5SZWNvcmQobGF5b3V0KSkge1xuICAgIGZvciAoY29uc3Qgcm9vdEtleSBvZiBbJ21haW4nLCAnbGVmdCcsICdyaWdodCcsICdmbG9hdGluZyddKSB7XG4gICAgICB2aXNpdChsYXlvdXRbcm9vdEtleV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGVhZklkcztcbn1cblxuZnVuY3Rpb24gZW5zdXJlQnVja2V0KHN0YXRlOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVNoYXJlZFN0YXRlLCBwbHVnaW5JZDogc3RyaW5nLCBsZWFmSWQ6IG51bGwgfCBzdHJpbmcpOiBKc29uUmVjb3JkIHtcbiAgY29uc3QgcGx1Z2luUmVjb3JkID0gc3RhdGUucmVjb3JkLnBsdWdpbnNbcGx1Z2luSWRdID8/IHsgbGVhdmVzOiB7fSwgd29ya3NwYWNlOiB7fSB9O1xuICBzdGF0ZS5yZWNvcmQucGx1Z2luc1twbHVnaW5JZF0gPSBwbHVnaW5SZWNvcmQ7XG4gIGlmIChsZWFmSWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gcGx1Z2luUmVjb3JkLndvcmtzcGFjZTtcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldCA9IHBsdWdpblJlY29yZC5sZWF2ZXNbbGVhZklkXSA/PyB7fTtcbiAgcGx1Z2luUmVjb3JkLmxlYXZlc1tsZWFmSWRdID0gYnVja2V0O1xuICByZXR1cm4gYnVja2V0O1xufVxuXG5mdW5jdGlvbiBnZXRCdWNrZXQoc3RhdGU6IFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUsIHBsdWdpbklkOiBzdHJpbmcsIGxlYWZJZDogbnVsbCB8IHN0cmluZyk6IEpzb25SZWNvcmQgfCBudWxsIHtcbiAgY29uc3QgcGx1Z2luUmVjb3JkID0gc3RhdGUucmVjb3JkLnBsdWdpbnNbcGx1Z2luSWRdO1xuICBpZiAoIXBsdWdpblJlY29yZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBsZWFmSWQgPT09IG51bGwgPyBwbHVnaW5SZWNvcmQud29ya3NwYWNlIDogcGx1Z2luUmVjb3JkLmxlYXZlc1tsZWFmSWRdID8/IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldExheW91dFJlY29yZFZhbHVlKGxheW91dDogdW5rbm93bik6IHVua25vd24ge1xuICByZXR1cm4gaXNQbGFpblJlY29yZChsYXlvdXQpID8gbGF5b3V0W1dPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWV0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldExlYWZJZChsZWFmOiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmKTogbnVsbCB8IHN0cmluZyB7XG4gIHJldHVybiBsZWFmID8gbGVhZi5pZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZFN0YXRlKCk6IFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxXb3Jrc3BhY2VMYXlvdXRTdGF0ZVNoYXJlZFN0YXRlPihTSEFSRURfU1RBVEVfS0VZLCB7XG4gICAgaW5zdGFsbGF0aW9uOiBudWxsLFxuICAgIGlzSHlkcmF0ZWQ6IGZhbHNlLFxuICAgIHJlY29yZDogeyBwbHVnaW5zOiB7fSB9LFxuICAgIHN1YnNjcmlwdGlvbnM6IFtdXG4gIH0pLnZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsTGF5b3V0U3RhdGUoYXBwOiBBcHAsIHN0YXRlOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVNoYXJlZFN0YXRlKTogKCkgPT4gdm9pZCB7XG4gIGxldCBpc1VuaW5zdGFsbGVkID0gZmFsc2U7XG4gIGNvbnN0IHVuaW5zdGFsbFBhdGNoID0gYXJvdW5kKGFwcC53b3Jrc3BhY2UsIHtcbiAgICBnZXRMYXlvdXQ6IChuZXh0KSA9PlxuICAgICAgZnVuY3Rpb24gcGF0Y2hlZEdldExheW91dCh0aGlzOiBXb3Jrc3BhY2UpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IGxheW91dCA9IG5leHQuY2FsbCh0aGlzKTtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gc2VyaWFsaXplV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQoc3RhdGUucmVjb3JkLCBsYXlvdXQpO1xuICAgICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgICAgbGF5b3V0W1dPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWV0gPSByZWNvcmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheW91dDtcbiAgICAgIH0sXG4gICAgc2V0TGF5b3V0OiAobmV4dCkgPT5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIHBhdGNoZWRTZXRMYXlvdXQodGhpczogV29ya3NwYWNlLCBsYXlvdXQ6IFBhcmFtZXRlcnM8V29ya3NwYWNlWydzZXRMYXlvdXQnXT5bMF0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgc3RhdGUucmVjb3JkID0gcGFyc2VXb3Jrc3BhY2VMYXlvdXRTdGF0ZVJlY29yZChnZXRMYXlvdXRSZWNvcmRWYWx1ZShsYXlvdXQpKTtcbiAgICAgICAgc3RhdGUuaXNIeWRyYXRlZCA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgbmV4dC5jYWxsKHRoaXMsIGxheW91dCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgbm90aWZ5TGF5b3V0TG9hZChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFzdGF0ZS5pc0h5ZHJhdGVkICYmIGFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkpIHtcbiAgICAvLyBMb2FkZWQgYWZ0ZXIgdGhlIGxheW91dDogcmVhZCB0aGUgbGF5b3V0IHRoZSBsYXN0IGluc3RhbGxhdGlvbiBzYXZlZCwgb25jZSwga2VlcGluZyB3aGF0IHdhcyBzZXQgbWVhbndoaWxlLlxuICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgYXBwLndvcmtzcGFjZS5yZWFkV29ya3NwYWNlRmlsZSgpO1xuICAgICAgaWYgKGlzVW5pbnN0YWxsZWQgfHwgc3RhdGUuaXNIeWRyYXRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZXJnZU1pc3Npbmcoc3RhdGUucmVjb3JkLCBwYXJzZVdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkKGdldExheW91dFJlY29yZFZhbHVlKHNhdmVkKSkpO1xuICAgICAgc3RhdGUuaXNIeWRyYXRlZCA9IHRydWU7XG4gICAgICBub3RpZnlMYXlvdXRMb2FkKHN0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaXNVbmluc3RhbGxlZCA9IHRydWU7XG4gICAgdW5pbnN0YWxsUGF0Y2goKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW52b2tlTGlzdGVuZXIobGlzdGVuZXI6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBsaXN0ZW5lcigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Egd29ya3NwYWNlIGxheW91dCBzdGF0ZSBsaXN0ZW5lciBmYWlsZWQnLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNKc29uT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSnNvbk9iamVjdCB7XG4gIHJldHVybiBpc1BsYWluUmVjb3JkKHZhbHVlKSAmJiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5SZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VNaXNzaW5nKHRhcmdldDogV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQsIHNvdXJjZTogV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbcGx1Z2luSWQsIHNvdXJjZVBsdWdpbl0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlLnBsdWdpbnMpKSB7XG4gICAgY29uc3QgdGFyZ2V0UGx1Z2luID0gdGFyZ2V0LnBsdWdpbnNbcGx1Z2luSWRdO1xuICAgIGlmICghdGFyZ2V0UGx1Z2luKSB7XG4gICAgICB0YXJnZXQucGx1Z2luc1twbHVnaW5JZF0gPSBzb3VyY2VQbHVnaW47XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlUGx1Z2luLndvcmtzcGFjZSkpIHtcbiAgICAgIHRhcmdldFBsdWdpbi53b3Jrc3BhY2Vba2V5XSA/Pz0gdmFsdWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2xlYWZJZCwgYnVja2V0XSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2VQbHVnaW4ubGVhdmVzKSkge1xuICAgICAgdGFyZ2V0UGx1Z2luLmxlYXZlc1tsZWFmSWRdID8/PSBidWNrZXQ7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vdGlmeUxheW91dExvYWQoc3RhdGU6IFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc25hcHNob3Qoc3RhdGUuc3Vic2NyaXB0aW9ucykpIHtcbiAgICBzdWJzY3JpcHRpb24ub25MYXlvdXRMb2FkKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQbHVnaW5SZWNvcmQodmFsdWU6IHVua25vd24pOiBudWxsIHwgV29ya3NwYWNlTGF5b3V0U3RhdGVQbHVnaW5SZWNvcmQge1xuICBpZiAoIWlzSnNvbk9iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGxlYXZlczogUmVjb3JkPHN0cmluZywgSnNvblJlY29yZD4gPSB7fTtcbiAgY29uc3QgcmF3TGVhdmVzID0gdmFsdWVbJ2xlYXZlcyddO1xuICBpZiAoaXNKc29uT2JqZWN0KHJhd0xlYXZlcykpIHtcbiAgICBmb3IgKGNvbnN0IFtsZWFmSWQsIGJ1Y2tldF0gb2YgT2JqZWN0LmVudHJpZXMocmF3TGVhdmVzKSkge1xuICAgICAgaWYgKGlzSnNvbk9iamVjdChidWNrZXQpKSB7XG4gICAgICAgIGxlYXZlc1tsZWFmSWRdID0gY2xvbmVKc29uPEpzb25SZWNvcmQ+KGJ1Y2tldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmF3V29ya3NwYWNlID0gdmFsdWVbJ3dvcmtzcGFjZSddO1xuICByZXR1cm4ge1xuICAgIC4uLmNsb25lSnNvbih2YWx1ZSksXG4gICAgbGVhdmVzLFxuICAgIHdvcmtzcGFjZTogaXNKc29uT2JqZWN0KHJhd1dvcmtzcGFjZSkgPyBjbG9uZUpzb248SnNvblJlY29yZD4ocmF3V29ya3NwYWNlKSA6IHt9XG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLXVuZGVmaW5lZC1yZXR1cm4tdHlwZSAtLSBBIHN0b3JlZCBKU09OIGBudWxsYCBpcyBhIHZhbHVlLCBzbyBhIG1pc3Npbmcgb25lIG11c3QgcmVhZCBkaWZmZXJlbnRseS5cbmZ1bmN0aW9uIHJlYWRSYXdWYWx1ZShzdGF0ZTogV29ya3NwYWNlTGF5b3V0U3RhdGVTaGFyZWRTdGF0ZSwgcGx1Z2luSWQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGxlYWZJZDogbnVsbCB8IHN0cmluZyk6IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRCdWNrZXQoc3RhdGUsIHBsdWdpbklkLCBsZWFmSWQpPy5ba2V5XTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFDQSxtQkFBeUI7QUFDekIsbUJBQWtDO0FBRWxDLGdDQUFxQztBQUNyQyxnQ0FBb0M7QUFDcEMsMEJBQTRCO0FBQzVCLHFDQUF1QjtBQUtoQixNQUFNLG9DQUFvQztBQUVqRCxNQUFNLG1CQUFtQjtBQUt6QixNQUFNLGtDQUFrQztBQTBNeEMsTUFBTSw0QkFBcUU7QUFBQSxFQUN6RDtBQUFBLEVBRUM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFVixZQUFZLFFBQThDO0FBQy9ELFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssZUFBZSxPQUFPO0FBQzNCLFNBQUssVUFBVSxPQUFPO0FBQ3RCLFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssV0FBVyxPQUFPO0FBQ3ZCLFNBQUssWUFBWSxPQUFPO0FBQUEsRUFDMUI7QUFBQSxFQUVPLElBQUksTUFBeUI7QUFDbEMsV0FBTyxLQUFLLFFBQVEs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
@@ -168,11 +168,11 @@ __export(get_dom_events_handlers_constructor_exports, {
168
168
  getDomEventsHandlersConstructor: () => getDomEventsHandlersConstructor
169
169
  });
170
170
  module.exports = __toCommonJS(get_dom_events_handlers_constructor_exports);
171
- var import_async = require('@mnaoumov/typescript-lib/async');
172
- var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
173
- var import_obsidian = require('obsidian');
174
- var import_monkey_around_component = require('../components/monkey-around-component.cjs');
175
- var import_vault = require('../vault.cjs');
171
+ var import_async = require("@mnaoumov/typescript-lib/async");
172
+ var import_type_guards = require("@mnaoumov/typescript-lib/type-guards");
173
+ var import_obsidian = require("obsidian");
174
+ var import_monkey_around_component = require("../components/monkey-around-component.cjs");
175
+ var import_vault = require("../vault.cjs");
176
176
  class MarkdownPreviewRendererRegisterDomEventsPatchComponent extends import_monkey_around_component.MonkeyAroundComponent {
177
177
  domEventsHandlersConstructor = null;
178
178
  onload() {
@@ -100,7 +100,7 @@ __export(constructors_exports, {
100
100
  "get-dom-events-handlers-constructor": () => get_dom_events_handlers_constructor
101
101
  });
102
102
  module.exports = __toCommonJS(constructors_exports);
103
- var get_dom_events_handlers_constructor = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./get-dom-events-handlers-constructor.cjs')), 1);
103
+ var get_dom_events_handlers_constructor = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require("./get-dom-events-handlers-constructor.cjs")), 1);
104
104
  // Annotate the CommonJS export names for ESM import in node:
105
105
  0 && (module.exports = {
106
106
  "get-dom-events-handlers-constructor": null