@mnaoumov/obsidian-lib 1.0.0 → 2.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 (412) hide show
  1. package/README.md +9 -1
  2. package/dist/lib/cjs/__merged.cjs +54 -64
  3. package/dist/lib/cjs/__merged.d.cts +5 -3
  4. package/dist/lib/cjs/active-file-provider.cjs +40 -64
  5. package/dist/lib/cjs/app.cjs +40 -64
  6. package/dist/lib/cjs/async-with-notice.cjs +40 -64
  7. package/dist/lib/cjs/attachment-path.cjs +101 -72
  8. package/dist/lib/cjs/attachment-path.d.cts +21 -43
  9. package/dist/lib/cjs/attachment-unit-folder.cjs +40 -64
  10. package/dist/lib/cjs/attachment-unit-folder.d.cts +8 -9
  11. package/dist/lib/cjs/backlink-index.cjs +41 -65
  12. package/dist/lib/cjs/backlink.cjs +40 -64
  13. package/dist/lib/cjs/bases-view-registrar.cjs +40 -64
  14. package/dist/lib/cjs/callout.cjs +40 -64
  15. package/dist/lib/cjs/canvas.cjs +40 -64
  16. package/dist/lib/cjs/case-insensitive-file-index.cjs +40 -64
  17. package/dist/lib/cjs/code-block-markdown-information.cjs +40 -64
  18. package/dist/lib/cjs/code-block-reg-exp.cjs +40 -64
  19. package/dist/lib/cjs/codemirror/index.cjs +40 -64
  20. package/dist/lib/cjs/codemirror/state-field-spec.cjs +40 -64
  21. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +40 -64
  22. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +40 -64
  23. package/dist/lib/cjs/command-handlers/command-handler.cjs +40 -64
  24. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +40 -64
  25. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +40 -64
  26. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +40 -64
  27. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +40 -64
  28. package/dist/lib/cjs/command-handlers/index.cjs +40 -64
  29. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +40 -64
  30. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +40 -64
  31. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +40 -64
  32. package/dist/lib/cjs/command-registrar.cjs +40 -64
  33. package/dist/lib/cjs/community-plugins.cjs +40 -64
  34. package/dist/lib/cjs/components/abort-signal-component.cjs +40 -64
  35. package/dist/lib/cjs/components/all-windows-event-component.cjs +40 -64
  36. package/dist/lib/cjs/components/async-error-handler-component.cjs +40 -64
  37. package/dist/lib/cjs/components/async-events-component.cjs +40 -64
  38. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +40 -64
  39. package/dist/lib/cjs/components/component-ex.cjs +41 -65
  40. package/dist/lib/cjs/components/console-debug-component.cjs +40 -64
  41. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +40 -64
  42. package/dist/lib/cjs/components/disposable-component.cjs +40 -64
  43. package/dist/lib/cjs/components/embed-extensions-component.cjs +40 -64
  44. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +40 -64
  45. package/dist/lib/cjs/components/index.cjs +40 -64
  46. package/dist/lib/cjs/components/layout-ready-component.cjs +40 -64
  47. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +40 -64
  48. package/dist/lib/cjs/components/monkey-around-component.cjs +40 -64
  49. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +40 -64
  50. package/dist/lib/cjs/components/plugin-context-component.cjs +40 -64
  51. package/dist/lib/cjs/components/plugin-gate-component.cjs +41 -65
  52. package/dist/lib/cjs/components/plugin-notice-component.cjs +46 -65
  53. package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -0
  54. package/dist/lib/cjs/components/plugin-settings-component.cjs +41 -65
  55. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +40 -64
  56. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +40 -64
  57. package/dist/lib/cjs/components/pointer-position-component.cjs +40 -64
  58. package/dist/lib/cjs/components/registry-component.cjs +40 -64
  59. package/dist/lib/cjs/components/release-notes-component.cjs +42 -65
  60. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +40 -64
  61. package/dist/lib/cjs/components/rmdir-guard-component.cjs +40 -64
  62. package/dist/lib/cjs/components/settings-migration-component.cjs +44 -68
  63. package/dist/lib/cjs/components/settings-migration-component.d.cts +6 -4
  64. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +40 -64
  65. package/dist/lib/cjs/components/templates-language-component.cjs +40 -64
  66. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +40 -64
  67. package/dist/lib/cjs/constructors/index.cjs +40 -64
  68. package/dist/lib/cjs/css-class.cjs +40 -64
  69. package/dist/lib/cjs/data-handler.cjs +40 -64
  70. package/dist/lib/cjs/dataview-link.cjs +40 -64
  71. package/dist/lib/cjs/dataview.cjs +40 -64
  72. package/dist/lib/cjs/debug.cjs +40 -64
  73. package/dist/lib/cjs/demo-vault-helper-settings.cjs +40 -64
  74. package/dist/lib/cjs/demo-vault-helper.cjs +42 -65
  75. package/dist/lib/cjs/demo-vault-naming.cjs +40 -64
  76. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +48 -71
  77. package/dist/lib/cjs/desktop-trusted-input.cjs +40 -64
  78. package/dist/lib/cjs/editor-extension-registrar.cjs +40 -64
  79. package/dist/lib/cjs/editor-suggest-registrar.cjs +40 -64
  80. package/dist/lib/cjs/editor.cjs +40 -64
  81. package/dist/lib/cjs/events.cjs +40 -64
  82. package/dist/lib/cjs/extensions-registrar.cjs +40 -64
  83. package/dist/lib/cjs/file-change.cjs +40 -64
  84. package/dist/lib/cjs/file-explorer.cjs +40 -64
  85. package/dist/lib/cjs/file-manager.cjs +40 -64
  86. package/dist/lib/cjs/file-system.cjs +45 -64
  87. package/dist/lib/cjs/file-system.d.cts +7 -0
  88. package/dist/lib/cjs/folder-note.cjs +40 -64
  89. package/dist/lib/cjs/frontmatter-formatting.cjs +41 -65
  90. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +40 -64
  91. package/dist/lib/cjs/frontmatter.cjs +40 -64
  92. package/dist/lib/cjs/generated-during-build.cjs +42 -66
  93. package/dist/lib/cjs/generated-during-build.d.cts +8 -2
  94. package/dist/lib/cjs/hover-link-source-registrar.cjs +40 -64
  95. package/dist/lib/cjs/html-element.cjs +40 -64
  96. package/dist/lib/cjs/i18n/custom-type-options.cjs +40 -64
  97. package/dist/lib/cjs/i18n/default-translations.cjs +40 -64
  98. package/dist/lib/cjs/i18n/i18n.cjs +40 -64
  99. package/dist/lib/cjs/i18n/index.cjs +40 -64
  100. package/dist/lib/cjs/i18n/locales/en.cjs +40 -64
  101. package/dist/lib/cjs/i18n/locales/index.cjs +40 -64
  102. package/dist/lib/cjs/i18n/locales/translations-map.cjs +40 -64
  103. package/dist/lib/cjs/index.cjs +40 -64
  104. package/dist/lib/cjs/is-in-obsidian.cjs +40 -64
  105. package/dist/lib/cjs/library-styles.cjs +40 -64
  106. package/dist/lib/cjs/library.cjs +40 -64
  107. package/dist/lib/cjs/link-name.cjs +40 -64
  108. package/dist/lib/cjs/link-update-progress.cjs +40 -64
  109. package/dist/lib/cjs/link.cjs +40 -64
  110. package/dist/lib/cjs/logger.cjs +40 -64
  111. package/dist/lib/cjs/loop.cjs +40 -64
  112. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +40 -64
  113. package/dist/lib/cjs/markdown-code-block-processor.cjs +40 -64
  114. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +40 -64
  115. package/dist/lib/cjs/markdown-view.cjs +40 -64
  116. package/dist/lib/cjs/markdown.cjs +40 -64
  117. package/dist/lib/cjs/menu-event-registrar.cjs +40 -64
  118. package/dist/lib/cjs/metadata-cache.cjs +64 -70
  119. package/dist/lib/cjs/metadata-cache.d.cts +8 -19
  120. package/dist/lib/cjs/mobile-trusted-input.cjs +40 -64
  121. package/dist/lib/cjs/modals/alert.cjs +40 -64
  122. package/dist/lib/cjs/modals/confirm.cjs +40 -64
  123. package/dist/lib/cjs/modals/index.cjs +40 -64
  124. package/dist/lib/cjs/modals/minimizable-modal.cjs +40 -64
  125. package/dist/lib/cjs/modals/modal-command-builder.cjs +40 -64
  126. package/dist/lib/cjs/modals/modal.cjs +40 -64
  127. package/dist/lib/cjs/modals/prompt.cjs +40 -64
  128. package/dist/lib/cjs/modals/select-item.cjs +40 -64
  129. package/dist/lib/cjs/modals/select-option.cjs +40 -64
  130. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +40 -64
  131. package/dist/lib/cjs/note-priority.cjs +41 -65
  132. package/dist/lib/cjs/notebook-navigator.cjs +40 -64
  133. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +40 -64
  134. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +40 -64
  135. package/dist/lib/cjs/obsidian-settings.cjs +40 -64
  136. package/dist/lib/cjs/parse-link.cjs +40 -64
  137. package/dist/lib/cjs/path-settings.cjs +40 -64
  138. package/dist/lib/cjs/pdf.cjs +40 -64
  139. package/dist/lib/cjs/plugin/index.cjs +43 -64
  140. package/dist/lib/cjs/plugin/index.d.cts +1 -0
  141. package/dist/lib/cjs/plugin/plugin-api-schema.cjs +171 -0
  142. package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +59 -0
  143. package/dist/lib/cjs/plugin/plugin-api.cjs +46 -64
  144. package/dist/lib/cjs/plugin/plugin-api.d.cts +83 -10
  145. package/dist/lib/cjs/plugin/plugin-context.cjs +40 -64
  146. package/dist/lib/cjs/plugin/plugin-event-source.cjs +40 -64
  147. package/dist/lib/cjs/plugin/plugin-install-state.cjs +40 -64
  148. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +40 -64
  149. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +41 -65
  150. package/dist/lib/cjs/plugin/plugin.cjs +41 -65
  151. package/dist/lib/cjs/plugin/settings-migration-api.cjs +69 -64
  152. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +16 -3
  153. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +40 -64
  154. package/dist/lib/cjs/popovers/field-popover.cjs +40 -64
  155. package/dist/lib/cjs/popovers/index.cjs +40 -64
  156. package/dist/lib/cjs/popovers/popover-anchor.cjs +40 -64
  157. package/dist/lib/cjs/popovers/popover.cjs +40 -64
  158. package/dist/lib/cjs/property-entry.cjs +40 -64
  159. package/dist/lib/cjs/queue.cjs +40 -64
  160. package/dist/lib/cjs/react/app-context.cjs +40 -64
  161. package/dist/lib/cjs/react/index.cjs +40 -64
  162. package/dist/lib/cjs/reference.cjs +40 -64
  163. package/dist/lib/cjs/resource-lock.cjs +40 -64
  164. package/dist/lib/cjs/resource-url.cjs +40 -64
  165. package/dist/lib/cjs/ribbon-icon-registrar.cjs +40 -64
  166. package/dist/lib/cjs/setting-components/checkbox-component.cjs +40 -64
  167. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +40 -64
  168. package/dist/lib/cjs/setting-components/date-component.cjs +40 -64
  169. package/dist/lib/cjs/setting-components/date-time-component.cjs +40 -64
  170. package/dist/lib/cjs/setting-components/email-component.cjs +40 -64
  171. package/dist/lib/cjs/setting-components/file-component.cjs +40 -64
  172. package/dist/lib/cjs/setting-components/index.cjs +40 -64
  173. package/dist/lib/cjs/setting-components/month-component.cjs +40 -64
  174. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +41 -65
  175. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +40 -64
  176. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +40 -64
  177. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +40 -64
  178. package/dist/lib/cjs/setting-components/number-component.cjs +40 -64
  179. package/dist/lib/cjs/setting-components/password-component.cjs +40 -64
  180. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +40 -64
  181. package/dist/lib/cjs/setting-components/telephone-component.cjs +40 -64
  182. package/dist/lib/cjs/setting-components/text-based-component.cjs +40 -64
  183. package/dist/lib/cjs/setting-components/time-component.cjs +40 -64
  184. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +40 -64
  185. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +40 -64
  186. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +40 -64
  187. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +40 -64
  188. package/dist/lib/cjs/setting-components/typed-text-component.cjs +41 -65
  189. package/dist/lib/cjs/setting-components/url-component.cjs +40 -64
  190. package/dist/lib/cjs/setting-components/validator-component.cjs +41 -65
  191. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +40 -64
  192. package/dist/lib/cjs/setting-components/week-component.cjs +40 -64
  193. package/dist/lib/cjs/setting-ex.cjs +40 -64
  194. package/dist/lib/cjs/setting-group-ex.cjs +40 -64
  195. package/dist/lib/cjs/status-bar-item-registrar.cjs +40 -64
  196. package/dist/lib/cjs/templater.cjs +40 -64
  197. package/dist/lib/cjs/transformers/duration-transformer.cjs +40 -64
  198. package/dist/lib/cjs/transformers/index.cjs +40 -64
  199. package/dist/lib/cjs/trusted-input.cjs +40 -64
  200. package/dist/lib/cjs/validation.cjs +40 -64
  201. package/dist/lib/cjs/vault-delete.cjs +40 -64
  202. package/dist/lib/cjs/vault-transaction.cjs +40 -64
  203. package/dist/lib/cjs/vault.cjs +41 -65
  204. package/dist/lib/cjs/view-registrar.cjs +40 -64
  205. package/dist/lib/cjs/workspace.cjs +40 -64
  206. package/dist/lib/esm/__merged.d.mts +5 -3
  207. package/dist/lib/esm/__merged.mjs +20 -14
  208. package/dist/lib/esm/active-file-provider.mjs +6 -14
  209. package/dist/lib/esm/app.mjs +6 -14
  210. package/dist/lib/esm/async-with-notice.mjs +6 -14
  211. package/dist/lib/esm/attachment-path.d.mts +21 -43
  212. package/dist/lib/esm/attachment-path.mjs +70 -22
  213. package/dist/lib/esm/attachment-unit-folder.d.mts +8 -9
  214. package/dist/lib/esm/attachment-unit-folder.mjs +6 -14
  215. package/dist/lib/esm/backlink-index.mjs +6 -14
  216. package/dist/lib/esm/backlink.mjs +6 -14
  217. package/dist/lib/esm/bases-view-registrar.mjs +6 -14
  218. package/dist/lib/esm/callout.mjs +6 -14
  219. package/dist/lib/esm/canvas.mjs +6 -14
  220. package/dist/lib/esm/case-insensitive-file-index.mjs +6 -14
  221. package/dist/lib/esm/code-block-markdown-information.mjs +5 -13
  222. package/dist/lib/esm/code-block-reg-exp.mjs +6 -14
  223. package/dist/lib/esm/codemirror/index.mjs +6 -14
  224. package/dist/lib/esm/codemirror/state-field-spec.mjs +5 -13
  225. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +6 -14
  226. package/dist/lib/esm/command-handlers/command-handler-component.mjs +6 -14
  227. package/dist/lib/esm/command-handlers/command-handler.mjs +6 -14
  228. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +6 -14
  229. package/dist/lib/esm/command-handlers/file-command-handler.mjs +6 -14
  230. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +6 -14
  231. package/dist/lib/esm/command-handlers/global-command-handler.mjs +6 -14
  232. package/dist/lib/esm/command-handlers/index.mjs +6 -14
  233. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +6 -14
  234. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -14
  235. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +6 -14
  236. package/dist/lib/esm/command-registrar.mjs +6 -14
  237. package/dist/lib/esm/community-plugins.mjs +6 -14
  238. package/dist/lib/esm/components/abort-signal-component.mjs +6 -14
  239. package/dist/lib/esm/components/all-windows-event-component.mjs +6 -14
  240. package/dist/lib/esm/components/async-error-handler-component.mjs +6 -14
  241. package/dist/lib/esm/components/async-events-component.mjs +6 -14
  242. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +6 -14
  243. package/dist/lib/esm/components/component-ex.mjs +6 -14
  244. package/dist/lib/esm/components/console-debug-component.mjs +6 -14
  245. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +6 -14
  246. package/dist/lib/esm/components/disposable-component.mjs +6 -14
  247. package/dist/lib/esm/components/embed-extensions-component.mjs +6 -14
  248. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +6 -14
  249. package/dist/lib/esm/components/index.mjs +6 -14
  250. package/dist/lib/esm/components/layout-ready-component.mjs +6 -14
  251. package/dist/lib/esm/components/menu-event-registrar-component.mjs +6 -14
  252. package/dist/lib/esm/components/monkey-around-component.mjs +6 -14
  253. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +6 -14
  254. package/dist/lib/esm/components/plugin-context-component.mjs +6 -14
  255. package/dist/lib/esm/components/plugin-gate-component.mjs +6 -14
  256. package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -0
  257. package/dist/lib/esm/components/plugin-notice-component.mjs +12 -15
  258. package/dist/lib/esm/components/plugin-settings-component.mjs +6 -14
  259. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +6 -14
  260. package/dist/lib/esm/components/plugin-suggestion-component.mjs +6 -14
  261. package/dist/lib/esm/components/pointer-position-component.mjs +6 -14
  262. package/dist/lib/esm/components/registry-component.mjs +6 -14
  263. package/dist/lib/esm/components/release-notes-component.mjs +11 -15
  264. package/dist/lib/esm/components/rename-delete-handler-component.mjs +6 -14
  265. package/dist/lib/esm/components/rmdir-guard-component.mjs +6 -14
  266. package/dist/lib/esm/components/settings-migration-component.d.mts +6 -4
  267. package/dist/lib/esm/components/settings-migration-component.mjs +10 -18
  268. package/dist/lib/esm/components/syntax-highlighting-component.mjs +6 -14
  269. package/dist/lib/esm/components/templates-language-component.mjs +6 -14
  270. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +6 -14
  271. package/dist/lib/esm/constructors/index.mjs +6 -14
  272. package/dist/lib/esm/css-class.mjs +6 -14
  273. package/dist/lib/esm/data-handler.mjs +6 -14
  274. package/dist/lib/esm/dataview-link.mjs +6 -14
  275. package/dist/lib/esm/dataview.mjs +6 -14
  276. package/dist/lib/esm/debug.mjs +6 -14
  277. package/dist/lib/esm/demo-vault-helper-settings.mjs +5 -13
  278. package/dist/lib/esm/demo-vault-helper.mjs +8 -15
  279. package/dist/lib/esm/demo-vault-naming.mjs +6 -14
  280. package/dist/lib/esm/desktop-demo-vault-opener.mjs +17 -21
  281. package/dist/lib/esm/desktop-trusted-input.mjs +6 -14
  282. package/dist/lib/esm/editor-extension-registrar.mjs +6 -14
  283. package/dist/lib/esm/editor-suggest-registrar.mjs +6 -14
  284. package/dist/lib/esm/editor.mjs +6 -14
  285. package/dist/lib/esm/events.mjs +6 -14
  286. package/dist/lib/esm/extensions-registrar.mjs +6 -14
  287. package/dist/lib/esm/file-change.mjs +6 -14
  288. package/dist/lib/esm/file-explorer.mjs +6 -14
  289. package/dist/lib/esm/file-manager.mjs +6 -14
  290. package/dist/lib/esm/file-system.d.mts +7 -0
  291. package/dist/lib/esm/file-system.mjs +10 -14
  292. package/dist/lib/esm/folder-note.mjs +6 -14
  293. package/dist/lib/esm/frontmatter-formatting.mjs +6 -14
  294. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +6 -14
  295. package/dist/lib/esm/frontmatter.mjs +6 -14
  296. package/dist/lib/esm/generated-during-build.d.mts +8 -2
  297. package/dist/lib/esm/generated-during-build.mjs +8 -16
  298. package/dist/lib/esm/hover-link-source-registrar.mjs +6 -14
  299. package/dist/lib/esm/html-element.mjs +6 -14
  300. package/dist/lib/esm/i18n/custom-type-options.mjs +6 -14
  301. package/dist/lib/esm/i18n/default-translations.mjs +6 -14
  302. package/dist/lib/esm/i18n/i18n.mjs +6 -14
  303. package/dist/lib/esm/i18n/index.mjs +6 -14
  304. package/dist/lib/esm/i18n/locales/en.mjs +6 -14
  305. package/dist/lib/esm/i18n/locales/index.mjs +6 -14
  306. package/dist/lib/esm/i18n/locales/translations-map.mjs +6 -14
  307. package/dist/lib/esm/index.mjs +6 -14
  308. package/dist/lib/esm/is-in-obsidian.mjs +6 -14
  309. package/dist/lib/esm/library-styles.mjs +6 -14
  310. package/dist/lib/esm/library.mjs +6 -14
  311. package/dist/lib/esm/link-name.mjs +6 -14
  312. package/dist/lib/esm/link-update-progress.mjs +5 -13
  313. package/dist/lib/esm/link.mjs +6 -14
  314. package/dist/lib/esm/logger.mjs +6 -14
  315. package/dist/lib/esm/loop.mjs +6 -14
  316. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +6 -14
  317. package/dist/lib/esm/markdown-code-block-processor.mjs +6 -14
  318. package/dist/lib/esm/markdown-post-processor-registrar.mjs +6 -14
  319. package/dist/lib/esm/markdown-view.mjs +6 -14
  320. package/dist/lib/esm/markdown.mjs +6 -14
  321. package/dist/lib/esm/menu-event-registrar.mjs +5 -13
  322. package/dist/lib/esm/metadata-cache.d.mts +8 -19
  323. package/dist/lib/esm/metadata-cache.mjs +35 -21
  324. package/dist/lib/esm/mobile-trusted-input.mjs +6 -14
  325. package/dist/lib/esm/modals/alert.mjs +6 -14
  326. package/dist/lib/esm/modals/confirm.mjs +6 -14
  327. package/dist/lib/esm/modals/index.mjs +6 -14
  328. package/dist/lib/esm/modals/minimizable-modal.mjs +6 -14
  329. package/dist/lib/esm/modals/modal-command-builder.mjs +6 -14
  330. package/dist/lib/esm/modals/modal.mjs +6 -14
  331. package/dist/lib/esm/modals/prompt.mjs +6 -14
  332. package/dist/lib/esm/modals/select-item.mjs +6 -14
  333. package/dist/lib/esm/modals/select-option.mjs +6 -14
  334. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +6 -14
  335. package/dist/lib/esm/note-priority.mjs +6 -14
  336. package/dist/lib/esm/notebook-navigator.mjs +6 -14
  337. package/dist/lib/esm/obsidian-dev-utils-state.mjs +6 -14
  338. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +6 -14
  339. package/dist/lib/esm/obsidian-settings.mjs +6 -14
  340. package/dist/lib/esm/parse-link.mjs +6 -14
  341. package/dist/lib/esm/path-settings.mjs +6 -14
  342. package/dist/lib/esm/pdf.mjs +6 -14
  343. package/dist/lib/esm/plugin/index.d.mts +1 -0
  344. package/dist/lib/esm/plugin/index.mjs +8 -14
  345. package/dist/lib/esm/plugin/plugin-api-schema.d.mts +59 -0
  346. package/dist/lib/esm/plugin/plugin-api-schema.mjs +73 -0
  347. package/dist/lib/esm/plugin/plugin-api.d.mts +83 -10
  348. package/dist/lib/esm/plugin/plugin-api.mjs +11 -14
  349. package/dist/lib/esm/plugin/plugin-context.mjs +6 -14
  350. package/dist/lib/esm/plugin/plugin-event-source.mjs +6 -14
  351. package/dist/lib/esm/plugin/plugin-install-state.mjs +6 -14
  352. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +6 -14
  353. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +6 -14
  354. package/dist/lib/esm/plugin/plugin.mjs +6 -14
  355. package/dist/lib/esm/plugin/settings-migration-api.d.mts +16 -3
  356. package/dist/lib/esm/plugin/settings-migration-api.mjs +30 -14
  357. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +6 -14
  358. package/dist/lib/esm/popovers/field-popover.mjs +6 -14
  359. package/dist/lib/esm/popovers/index.mjs +6 -14
  360. package/dist/lib/esm/popovers/popover-anchor.mjs +6 -14
  361. package/dist/lib/esm/popovers/popover.mjs +6 -14
  362. package/dist/lib/esm/property-entry.mjs +6 -14
  363. package/dist/lib/esm/queue.mjs +6 -14
  364. package/dist/lib/esm/react/app-context.mjs +6 -14
  365. package/dist/lib/esm/react/index.mjs +6 -14
  366. package/dist/lib/esm/reference.mjs +6 -14
  367. package/dist/lib/esm/resource-lock.mjs +6 -14
  368. package/dist/lib/esm/resource-url.mjs +6 -14
  369. package/dist/lib/esm/ribbon-icon-registrar.mjs +6 -14
  370. package/dist/lib/esm/setting-components/checkbox-component.mjs +6 -14
  371. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +6 -14
  372. package/dist/lib/esm/setting-components/date-component.mjs +6 -14
  373. package/dist/lib/esm/setting-components/date-time-component.mjs +6 -14
  374. package/dist/lib/esm/setting-components/email-component.mjs +6 -14
  375. package/dist/lib/esm/setting-components/file-component.mjs +6 -14
  376. package/dist/lib/esm/setting-components/index.mjs +6 -14
  377. package/dist/lib/esm/setting-components/month-component.mjs +6 -14
  378. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +6 -14
  379. package/dist/lib/esm/setting-components/multiple-email-component.mjs +6 -14
  380. package/dist/lib/esm/setting-components/multiple-file-component.mjs +6 -14
  381. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -14
  382. package/dist/lib/esm/setting-components/number-component.mjs +6 -14
  383. package/dist/lib/esm/setting-components/password-component.mjs +6 -14
  384. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +6 -14
  385. package/dist/lib/esm/setting-components/telephone-component.mjs +6 -14
  386. package/dist/lib/esm/setting-components/text-based-component.mjs +6 -14
  387. package/dist/lib/esm/setting-components/time-component.mjs +6 -14
  388. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +6 -14
  389. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +6 -14
  390. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +6 -14
  391. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +6 -14
  392. package/dist/lib/esm/setting-components/typed-text-component.mjs +6 -14
  393. package/dist/lib/esm/setting-components/url-component.mjs +6 -14
  394. package/dist/lib/esm/setting-components/validator-component.mjs +6 -14
  395. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +5 -13
  396. package/dist/lib/esm/setting-components/week-component.mjs +6 -14
  397. package/dist/lib/esm/setting-ex.mjs +6 -14
  398. package/dist/lib/esm/setting-group-ex.mjs +6 -14
  399. package/dist/lib/esm/status-bar-item-registrar.mjs +6 -14
  400. package/dist/lib/esm/templater.mjs +6 -14
  401. package/dist/lib/esm/transformers/duration-transformer.mjs +6 -14
  402. package/dist/lib/esm/transformers/index.mjs +6 -14
  403. package/dist/lib/esm/trusted-input.mjs +6 -14
  404. package/dist/lib/esm/validation.mjs +6 -14
  405. package/dist/lib/esm/vault-delete.mjs +6 -14
  406. package/dist/lib/esm/vault-transaction.mjs +6 -14
  407. package/dist/lib/esm/vault.mjs +6 -14
  408. package/dist/lib/esm/view-registrar.mjs +6 -14
  409. package/dist/lib/esm/workspace.mjs +6 -14
  410. package/dist/styles.css +4 -1
  411. package/package.json +69 -24
  412. package/plugin/plugin-api-schema/package.json +6 -0
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  function keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -65,8 +53,6 @@ function keepName($unknown) {
65
53
  if (!originalRequire || originalRequire.__isPatched) {
66
54
  return;
67
55
  }
68
-
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
56
  require = Object.assign(
71
57
  (id) => requirePatched(id),
72
58
  originalRequire,
@@ -74,53 +60,45 @@ function keepName($unknown) {
74
60
  __isPatched: true
75
61
  }
76
62
  );
77
-
78
63
  function extractDefault(module) {
79
- return module && module.__esModule && 'default' in module ? module.default : module;
64
+ return module && module.__esModule && "default" in module ? module.default : module;
80
65
  }
81
-
82
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
83
- '@codemirror/autocomplete',
84
- '@codemirror/collab',
85
- '@codemirror/commands',
86
- '@codemirror/language',
87
- '@codemirror/lint',
88
- '@codemirror/search',
89
- '@codemirror/state',
90
- '@codemirror/text',
91
- '@codemirror/view',
92
- '@lezer/common',
93
- '@lezer/highlight',
94
- '@lezer/lr',
95
- 'obsidian']
96
- );
97
-
98
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
99
- '@codemirror/closebrackets',
100
- '@codemirror/comment',
101
- '@codemirror/fold',
102
- '@codemirror/gutter',
103
- '@codemirror/highlight',
104
- '@codemirror/history',
105
- '@codemirror/matchbrackets',
106
- '@codemirror/panel',
107
- '@codemirror/rangeset',
108
- '@codemirror/rectangular-selection',
109
- '@codemirror/stream-parser',
110
- '@codemirror/tooltip']
111
- );
112
-
66
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
67
+ "@codemirror/autocomplete",
68
+ "@codemirror/collab",
69
+ "@codemirror/commands",
70
+ "@codemirror/language",
71
+ "@codemirror/lint",
72
+ "@codemirror/search",
73
+ "@codemirror/state",
74
+ "@codemirror/text",
75
+ "@codemirror/view",
76
+ "@lezer/common",
77
+ "@lezer/highlight",
78
+ "@lezer/lr",
79
+ "obsidian"
80
+ ]);
81
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
82
+ "@codemirror/closebrackets",
83
+ "@codemirror/comment",
84
+ "@codemirror/fold",
85
+ "@codemirror/gutter",
86
+ "@codemirror/highlight",
87
+ "@codemirror/history",
88
+ "@codemirror/matchbrackets",
89
+ "@codemirror/panel",
90
+ "@codemirror/rangeset",
91
+ "@codemirror/rectangular-selection",
92
+ "@codemirror/stream-parser",
93
+ "@codemirror/tooltip"
94
+ ]);
113
95
  function requirePatched(id) {
114
96
  if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
115
97
  return originalRequire?.(id);
116
98
  }
117
-
118
- // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
119
99
  if (globalThis.app.isMobile) {
120
- if (id === 'process' || id === 'node:process') {
121
- // eslint-disable-next-line no-console -- Valid usage.
100
+ if (id === "process" || id === "node:process") {
122
101
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
123
-
124
102
  return process;
125
103
  }
126
104
  } else {
@@ -129,8 +107,6 @@ function keepName($unknown) {
129
107
  return extractDefault(module);
130
108
  }
131
109
  }
132
-
133
- // eslint-disable-next-line no-console -- Valid usage.
134
110
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
135
111
  return {};
136
112
  }
@@ -207,4 +183,4 @@ class CaseInsensitiveFileIndexComponent extends import_component_ex.ComponentEx
207
183
  0 && (module.exports = {
208
184
  CaseInsensitiveFileIndexComponent
209
185
  });
210
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4LWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IGluc3RhbGxzIGFuZCBtYWludGFpbnMgYW4gb3B0LWluIE8oMSkgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIGluZGV4IGZvciBhIHZhdWx0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgsXG4gIHNldENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCxcbiAgdW5zZXRDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXhcbn0gZnJvbSAnLi4vY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEluc3RhbGxzIGEge0BsaW5rIENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleH0gZm9yIHRoZSB2YXVsdCB3aGlsZSBsb2FkZWQgYW5kIGtlZXBzIGl0IGluIHN5bmMgd2l0aFxuICogYGNyZWF0ZWAvYGRlbGV0ZWAvYHJlbmFtZWAgZXZlbnRzLiBPbmNlIGxvYWRlZCwgY2FzZS1pbnNlbnNpdGl2ZSBwYXRoIHJlc29sdXRpb24gaW5cbiAqIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGJlY29tZXMgTygxKSBldmVuIG9uIGEgbWlzczsgb24gdW5sb2FkIHRoZSBpbmRleCBpcyByZW1vdmVkIGFuZCByZXNvbHV0aW9uXG4gKiBmYWxscyBiYWNrIHRvIHRoZSBuYXRpdmUgTyh2YXVsdCktb24tbWlzcyBsb29rdXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXhDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIGluZGV4IGluc3RhbGxlZCBmb3IgdGhlIHZhdWx0IGFuZCBrZXB0IGluIHN5bmMgd2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGluZGV4OiBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIGluZGV4IGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aG9zZSB2YXVsdCB0byBpbmRleC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihhcHA6IEFwcCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgdGhpcy5pbmRleCA9IG5ldyBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgoYXBwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGluZGV4IGZyb20gdGhlIGN1cnJlbnRseS1sb2FkZWQgZmlsZXMsIGluc3RhbGxzIGl0LCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGhhbmRsZXJzIHRvXG4gICAqIGtlZXAgaXQgaW4gc3luYy4gUmVtb3ZlcyB0aGUgaW5kZXggb24gdW5sb2FkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGFic3RyYWN0RmlsZSBvZiB0aGlzLmFwcC52YXVsdC5nZXRBbGxMb2FkZWRGaWxlcygpKSB7XG4gICAgICB0aGlzLmluZGV4LmFkZChhYnN0cmFjdEZpbGUpO1xuICAgIH1cblxuICAgIHNldENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCh0aGlzLmluZGV4KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIHVuc2V0Q2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4KHRoaXMuaW5kZXgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLnZhdWx0Lm9uKCdjcmVhdGUnLCAoZmlsZSkgPT4ge1xuICAgICAgdGhpcy5pbmRleC5hZGQoZmlsZSk7XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC52YXVsdC5vbignZGVsZXRlJywgKGZpbGUpID0+IHtcbiAgICAgIHRoaXMuaW5kZXguZGVsZXRlKGZpbGUucGF0aCk7XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC52YXVsdC5vbigncmVuYW1lJywgKGZpbGUsIG9sZFBhdGgpID0+IHtcbiAgICAgIHRoaXMuaW5kZXgucmVuYW1lKG9sZFBhdGgsIGZpbGUpO1xuICAgIH0pKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHlDQUlPO0FBQ1AsMEJBQTRCO0FBUXJCLE1BQU0sMENBQTBDLGdDQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJOUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1osWUFBWSxLQUFVO0FBQzNCLFVBQU07QUFDTixTQUFLLE1BQU07QUFDWCxTQUFLLFFBQVEsSUFBSSw0REFBeUIsR0FBRztBQUFBLEVBQy9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1nQixTQUFlO0FBQzdCLGVBQVcsZ0JBQWdCLEtBQUssSUFBSSxNQUFNLGtCQUFrQixHQUFHO0FBQzdELFdBQUssTUFBTSxJQUFJLFlBQVk7QUFBQSxJQUM3QjtBQUVBLHdFQUE0QixLQUFLLEtBQUs7QUFDdEMsU0FBSyxTQUFTLE1BQU07QUFDbEIsNEVBQThCLEtBQUssS0FBSztBQUFBLElBQzFDLENBQUM7QUFFRCxTQUFLLGNBQWMsS0FBSyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsU0FBUztBQUN2RCxXQUFLLE1BQU0sSUFBSSxJQUFJO0FBQUEsSUFDckIsQ0FBQyxDQUFDO0FBQ0YsU0FBSyxjQUFjLEtBQUssSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVM7QUFDdkQsV0FBSyxNQUFNLE9BQU8sS0FBSyxJQUFJO0FBQUEsSUFDN0IsQ0FBQyxDQUFDO0FBQ0YsU0FBSyxjQUFjLEtBQUssSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sWUFBWTtBQUNoRSxXQUFLLE1BQU0sT0FBTyxTQUFTLElBQUk7QUFBQSxJQUNqQyxDQUFDLENBQUM7QUFBQSxFQUNKO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
186
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4LWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IGluc3RhbGxzIGFuZCBtYWludGFpbnMgYW4gb3B0LWluIE8oMSkgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIGluZGV4IGZvciBhIHZhdWx0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgsXG4gIHNldENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCxcbiAgdW5zZXRDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXhcbn0gZnJvbSAnLi4vY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEluc3RhbGxzIGEge0BsaW5rIENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleH0gZm9yIHRoZSB2YXVsdCB3aGlsZSBsb2FkZWQgYW5kIGtlZXBzIGl0IGluIHN5bmMgd2l0aFxuICogYGNyZWF0ZWAvYGRlbGV0ZWAvYHJlbmFtZWAgZXZlbnRzLiBPbmNlIGxvYWRlZCwgY2FzZS1pbnNlbnNpdGl2ZSBwYXRoIHJlc29sdXRpb24gaW5cbiAqIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGJlY29tZXMgTygxKSBldmVuIG9uIGEgbWlzczsgb24gdW5sb2FkIHRoZSBpbmRleCBpcyByZW1vdmVkIGFuZCByZXNvbHV0aW9uXG4gKiBmYWxscyBiYWNrIHRvIHRoZSBuYXRpdmUgTyh2YXVsdCktb24tbWlzcyBsb29rdXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXhDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIGluZGV4IGluc3RhbGxlZCBmb3IgdGhlIHZhdWx0IGFuZCBrZXB0IGluIHN5bmMgd2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGluZGV4OiBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIGluZGV4IGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aG9zZSB2YXVsdCB0byBpbmRleC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihhcHA6IEFwcCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgdGhpcy5pbmRleCA9IG5ldyBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgoYXBwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGluZGV4IGZyb20gdGhlIGN1cnJlbnRseS1sb2FkZWQgZmlsZXMsIGluc3RhbGxzIGl0LCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGhhbmRsZXJzIHRvXG4gICAqIGtlZXAgaXQgaW4gc3luYy4gUmVtb3ZlcyB0aGUgaW5kZXggb24gdW5sb2FkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGFic3RyYWN0RmlsZSBvZiB0aGlzLmFwcC52YXVsdC5nZXRBbGxMb2FkZWRGaWxlcygpKSB7XG4gICAgICB0aGlzLmluZGV4LmFkZChhYnN0cmFjdEZpbGUpO1xuICAgIH1cblxuICAgIHNldENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCh0aGlzLmluZGV4KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIHVuc2V0Q2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4KHRoaXMuaW5kZXgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLnZhdWx0Lm9uKCdjcmVhdGUnLCAoZmlsZSkgPT4ge1xuICAgICAgdGhpcy5pbmRleC5hZGQoZmlsZSk7XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC52YXVsdC5vbignZGVsZXRlJywgKGZpbGUpID0+IHtcbiAgICAgIHRoaXMuaW5kZXguZGVsZXRlKGZpbGUucGF0aCk7XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC52YXVsdC5vbigncmVuYW1lJywgKGZpbGUsIG9sZFBhdGgpID0+IHtcbiAgICAgIHRoaXMuaW5kZXgucmVuYW1lKG9sZFBhdGgsIGZpbGUpO1xuICAgIH0pKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHlDQUlPO0FBQ1AsMEJBQTRCO0FBUXJCLE1BQU0sMENBQTBDLGdDQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJOUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1osWUFBWSxLQUFVO0FBQzNCLFVBQU07QUFDTixTQUFLLE1BQU07QUFDWCxTQUFLLFFBQVEsSUFBSSw0REFBeUIsR0FBRztBQUFBLEVBQy9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1nQixTQUFlO0FBQzdCLGVBQVcsZ0JBQWdCLEtBQUssSUFBSSxNQUFNLGtCQUFrQixHQUFHO0FBQzdELFdBQUssTUFBTSxJQUFJLFlBQVk7QUFBQSxJQUM3QjtBQUVBLHdFQUE0QixLQUFLLEtBQUs7QUFDdEMsU0FBSyxTQUFTLE1BQU07QUFDbEIsNEVBQThCLEtBQUssS0FBSztBQUFBLElBQzFDLENBQUM7QUFFRCxTQUFLLGNBQWMsS0FBSyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsU0FBUztBQUN2RCxXQUFLLE1BQU0sSUFBSSxJQUFJO0FBQUEsSUFDckIsQ0FBQyxDQUFDO0FBQ0YsU0FBSyxjQUFjLEtBQUssSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVM7QUFDdkQsV0FBSyxNQUFNLE9BQU8sS0FBSyxJQUFJO0FBQUEsSUFDN0IsQ0FBQyxDQUFDO0FBQ0YsU0FBSyxjQUFjLEtBQUssSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sWUFBWTtBQUNoRSxXQUFLLE1BQU0sT0FBTyxTQUFTLElBQUk7QUFBQSxJQUNqQyxDQUFDLENBQUM7QUFBQSxFQUNKO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  function keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -65,8 +53,6 @@ function keepName($unknown) {
65
53
  if (!originalRequire || originalRequire.__isPatched) {
66
54
  return;
67
55
  }
68
-
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
56
  require = Object.assign(
71
57
  (id) => requirePatched(id),
72
58
  originalRequire,
@@ -74,53 +60,45 @@ function keepName($unknown) {
74
60
  __isPatched: true
75
61
  }
76
62
  );
77
-
78
63
  function extractDefault(module) {
79
- return module && module.__esModule && 'default' in module ? module.default : module;
80
- }
81
-
82
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
83
- '@codemirror/autocomplete',
84
- '@codemirror/collab',
85
- '@codemirror/commands',
86
- '@codemirror/language',
87
- '@codemirror/lint',
88
- '@codemirror/search',
89
- '@codemirror/state',
90
- '@codemirror/text',
91
- '@codemirror/view',
92
- '@lezer/common',
93
- '@lezer/highlight',
94
- '@lezer/lr',
95
- 'obsidian']
96
- );
97
-
98
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
99
- '@codemirror/closebrackets',
100
- '@codemirror/comment',
101
- '@codemirror/fold',
102
- '@codemirror/gutter',
103
- '@codemirror/highlight',
104
- '@codemirror/history',
105
- '@codemirror/matchbrackets',
106
- '@codemirror/panel',
107
- '@codemirror/rangeset',
108
- '@codemirror/rectangular-selection',
109
- '@codemirror/stream-parser',
110
- '@codemirror/tooltip']
111
- );
112
-
64
+ return module && module.__esModule && "default" in module ? module.default : module;
65
+ }
66
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
67
+ "@codemirror/autocomplete",
68
+ "@codemirror/collab",
69
+ "@codemirror/commands",
70
+ "@codemirror/language",
71
+ "@codemirror/lint",
72
+ "@codemirror/search",
73
+ "@codemirror/state",
74
+ "@codemirror/text",
75
+ "@codemirror/view",
76
+ "@lezer/common",
77
+ "@lezer/highlight",
78
+ "@lezer/lr",
79
+ "obsidian"
80
+ ]);
81
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
82
+ "@codemirror/closebrackets",
83
+ "@codemirror/comment",
84
+ "@codemirror/fold",
85
+ "@codemirror/gutter",
86
+ "@codemirror/highlight",
87
+ "@codemirror/history",
88
+ "@codemirror/matchbrackets",
89
+ "@codemirror/panel",
90
+ "@codemirror/rangeset",
91
+ "@codemirror/rectangular-selection",
92
+ "@codemirror/stream-parser",
93
+ "@codemirror/tooltip"
94
+ ]);
113
95
  function requirePatched(id) {
114
96
  if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
115
97
  return originalRequire?.(id);
116
98
  }
117
-
118
- // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
119
99
  if (globalThis.app.isMobile) {
120
- if (id === 'process' || id === 'node:process') {
121
- // eslint-disable-next-line no-console -- Valid usage.
100
+ if (id === "process" || id === "node:process") {
122
101
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
123
-
124
102
  return process;
125
103
  }
126
104
  } else {
@@ -129,8 +107,6 @@ function keepName($unknown) {
129
107
  return extractDefault(module);
130
108
  }
131
109
  }
132
-
133
- // eslint-disable-next-line no-console -- Valid usage.
134
110
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
135
111
  return {};
136
112
  }
@@ -525,4 +501,4 @@ class ComponentEx extends import_obsidian.Component {
525
501
  0 && (module.exports = {
526
502
  ComponentEx
527
503
  });
528
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgY3JlYXRlQWdncmVnYXRlRXJyb3IgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYWdncmVnYXRlLWVycm9yJztcbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FycmF5JztcbmltcG9ydCB7IGRpc3Bvc2UgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGlzcG9zYWJsZSc7XG5pbXBvcnQge1xuICBFcnJvcldyYXBwZXIsXG4gIFNpbGVudEVycm9yXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9lcnJvcic7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcmVxdWlyZS1jb21wb25lbnQtc3VmZml4IC0tIEV4dGVuZGVkIGJhc2UgY2xhc3MuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RXggZXh0ZW5kcyBDb21wb25lbnQgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlsZHJlblNldCA9IG5ldyBTZXQ8Q29tcG9uZW50PigpO1xuICBwcml2YXRlIGhhc0JlZW5Mb2FkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBsb2FkRXJyb3JzOiBFcnJvcltdID0gW107XG4gIHByaXZhdGUgbG9hZFByb21pc2U6IG51bGwgfCBQcm9taXNlPHZvaWQ+ID0gbnVsbDtcbiAgcHJpdmF0ZSBwYXJlbnRDb21wb25lbnQ6IENvbXBvbmVudEV4IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIE1pcnJvcnMgdGhlIG5hdGl2ZSBgQ29tcG9uZW50LmFkZENoaWxkYCBjb250cmFjdDogaWYgdGhpcyBjb21wb25lbnQgaXMgYWxyZWFkeSBsb2FkZWQsIHRoZSBjaGlsZCBpcyBsb2FkZWRcbiAgICogaW1tZWRpYXRlbHksIHNvIGBjaGlsZC5fbG9hZGVkYCBpcyBzZXQgYmVmb3JlIHRoaXMgbWV0aG9kIHJldHVybnMgZXZlbiB3aGVuIHRoaXMgY29tcG9uZW50IGhhcyBhc3luYyBsb2FkIGxvZ2ljLlxuICAgKiBUaGUgY2hpbGQncyBhc3luYyB0YWlsIChpZiBhbnkpIGlzIHNlcXVlbmNlZCBpbnRvIHRoZSBsb2FkIHByb21pc2Ugc28gYSBsYXRlciB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc30gY2FsbCBhd2FpdHMgaXQuXG4gICAqXG4gICAqIEFkZGluZyBhIGNoaWxkIEJFRk9SRSB0aGUgZmlyc3QgbG9hZCBpcyBsZWdpdGltYXRlOiB0aGUgY2hpbGQgaXMgcXVldWVkIGFuZCBsb2FkZWQgd2hlbiB0aGlzIGNvbXBvbmVudCBsb2Fkcy5cbiAgICogQWRkaW5nIG9uZSBBRlRFUiB0aGlzIGNvbXBvbmVudCBoYXMgYmVlbiB1bmxvYWRlZCBpcyBub3QgXHUyMDE0IHRoZSBjaGlsZCB3b3VsZCBuZXZlciBiZSBsb2FkZWQgYW5kIG5ldmVyIHVubG9hZGVkXG4gICAqIChhIGxlYWspLCBzbyBpdCBpcyByZWZ1c2VkIHdpdGggYSB7QGxpbmsgU2lsZW50RXJyb3J9LiBUaGUgdHlwaWNhbCBzb3VyY2Ugb2Ygc3VjaCBhIGNhbGwgaXMgYW4gYGFzeW5jYCBtZXRob2RcbiAgICogdGhhdCB3YXMgc3VzcGVuZGVkIG9uIGFuIGBhd2FpdGAgd2hlbiB0aGUgY29tcG9uZW50IGdvdCB1bmxvYWRlZCBhbmQgdGhlbiByZXN1bWVkIG9uIHRoZSBkZWFkIGNvbXBvbmVudDsgdGhlXG4gICAqIHtAbGluayBTaWxlbnRFcnJvcn0gdW53aW5kcyBpdCBxdWlldGx5IChzZWUge0BsaW5rIGlzVW5sb2FkZWR9KS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIGFkZC5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYWRkZWQgY29tcG9uZW50LlxuICAgKiBAdGhyb3dzIEEge0BsaW5rIFNpbGVudEVycm9yfSBpZiB0aGUgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5sb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYWRkQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgaWYgKHRoaXMuaXNVbmxvYWRlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2lsZW50RXJyb3IoJ0NvbXBvbmVudCBpcyBhbHJlYWR5IHVubG9hZGVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hpbGRyZW4ucHVzaChjb21wb25lbnQpO1xuICAgIHRoaXMuY2hpbGRyZW5TZXQuYWRkKGNvbXBvbmVudCk7XG4gICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEV4KSB7XG4gICAgICBjb21wb25lbnQucGFyZW50Q29tcG9uZW50ID0gdGhpcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICB0aGlzLmFwcGVuZEVhZ2VyTG9hZFN0ZXAodGhpcy5leHRyYWN0TG9hZFByb21pc2FibGUoY29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIGNvbXBvbmVudCBpcyBhIGRpcmVjdCBjaGlsZCBvZiB0aGlzIG9uZS5cbiAgICpcbiAgICogT25seSBESVJFQ1QgY2hpbGRyZW4gYXJlIHJlcG9ydGVkIFx1MjAxNCB0aGlzIGlzIGFuIG93bmVyc2hpcCBxdWVzdGlvbiwgbm90IGEgY29udGFpbm1lbnQgb25lLiBUaGUgY2FsbGVyIHRoYXRcbiAgICogbmVlZHMgaXQgaXMgb25lIGhvbGRpbmcgc2V2ZXJhbCBwYXJlbnRzIGFuZCBkZWNpZGluZyB3aGljaCBvZiB0aGVtIGEgY29tcG9uZW50IGJlbG9uZ3MgdG8sIGFuZCBmb3IgdGhhdCBhXG4gICAqIGdyYW5kY2hpbGQgaXMgdGhlIHdyb25nIGFuc3dlcjogcmVtb3ZpbmcgaXQgZnJvbSB0aGUgcGFyZW50IHRoYXQgbWVyZWx5IGNvbnRhaW5zIGl0cyBwYXJlbnQgd291bGQgZmFpbC5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdG8gbG9vayBmb3IuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBhIGRpcmVjdCBjaGlsZCBvZiB0aGlzIG9uZS5cbiAgICovXG4gIHB1YmxpYyBoYXNDaGlsZChjb21wb25lbnQ6IENvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuU2V0Lmhhcyhjb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIERlc3BpdGUgdGhlIGRlY2xhcmVkIGB2b2lkYCByZXR1cm4gdHlwZSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgbG9hZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLmhhc0JlZW5Mb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRMb2FkU3RhdGUoKTtcblxuICAgIHRoaXMub25sb2FkKCk7XG5cbiAgICBjb25zdCBvbmxvYWRBc3luY1Byb21pc2UgPSB0aGlzLm9ubG9hZEFzeW5jKCk7XG4gICAgaWYgKG9ubG9hZEFzeW5jUHJvbWlzZSAhPT0gbm9vcEFzeW5jU2luZ2xldG9uUHJvbWlzZSkge1xuICAgICAgdGhpcy5hcHBlbmRFYWdlckxvYWRTdGVwKG9ubG9hZEFzeW5jUHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBzbmFwc2hvdCh0aGlzLl9jaGlsZHJlbikpIHtcbiAgICAgIHRoaXMuYXBwZW5kU2VxdWVudGlhbExvYWRTdGVwKCgpID0+IHRoaXMuZXh0cmFjdExvYWRQcm9taXNhYmxlKGNoaWxkKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9hZFByb21pc2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUsIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIFdlIG5lZWQgdG8gYnlwYXNzIHR5cGUgc3lzdGVtIHRvIHJldHVybiBgUHJvbWlzZTx2b2lkPmAuXG4gICAgICByZXR1cm4gdGhpcy5sb2FkUHJvbWlzZSBhcyB1bmtub3duIGFzIHZvaWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQgd2l0aCBwcm9taXNlcy5cbiAgICpcbiAgICogVW5saWtlIHtAbGluayBsb2FkfSwgdGhpcyBtZXRob2QgbmV2ZXIgcmVqZWN0cyB3aXRoIGFuIGluZGl2aWR1YWwgZXJyb3I6IGV2ZXJ5IGZhaWx1cmUgcmFpc2VkIGJ5IHtAbGluayBvbmxvYWRBc3luY31cbiAgICogb3IgYSBjaGlsZCdzIGxvYWQgaXMgY29sbGVjdGVkLCBhbmQgb25jZSBldmVyeXRoaW5nIHNldHRsZXMgdGhlIHJldHVybmVkIHtAbGluayBQcm9taXNlfSByZWplY3RzIHdpdGggYSBzaW5nbGVcbiAgICoge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfSBob2xkaW5nIGFsbCBvZiB0aGVtLiBOb24tYEVycm9yYCB0aHJvd2FibGVzIGFyZSBub3JtYWxpemVkIHZpYSB7QGxpbmsgRXJyb3JXcmFwcGVyLmNyZWF0ZX0uXG4gICAqXG4gICAqIFRoZSBgQWdncmVnYXRlRXJyb3JgIGlzIGJ1aWx0IGJ5IHtAbGluayBjcmVhdGVBZ2dyZWdhdGVFcnJvcn0sIHNvIGl0cyBvd24gYG1lc3NhZ2VgIG5hbWVzIHRoZSBmYWlsdXJlIHJhdGhlclxuICAgKiB0aGFuIGJlaW5nIGVtcHR5OiBhIGxvbmUgZmFpbHVyZSBsZW5kcyBpdHMgbWVzc2FnZSB0byBldmVyeSBhZ2dyZWdhdGUgYWJvdmUgaXQsIHdoaWNoIGlzIHdoYXQgbGV0cyBhIGNhbGxlclxuICAgKiBhc3NlcnQgb24gdGhlIHNlbnRlbmNlIHRoYXQgd2FzIGFjdHVhbGx5IHRocm93biB3aXRob3V0IHdhbGtpbmcgYGVycm9yc2AgdG8gZmluZCBpdC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjaGlsZHJlbiBmaW5pc2ggbG9hZGluZywgcmVqZWN0cyB3aXRoIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gaWYgYW55IGxvYWQgc3RlcCBmYWlsZWQsIG9yIGBudWxsYCBpZiB0aGUgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gZG9uJ3QgdXNlIGBhc3luY2AgbG9naWMgYW5kIG5vbmUgZmFpbGVkIHN5bmNocm9ub3VzbHkuXG4gICAqL1xuICBwdWJsaWMgbG9hZFdpdGhQcm9taXNlcygpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkKCk7XG5cbiAgICBjb25zdCBsb2FkUHJvbWlzZSA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKCFsb2FkUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwID8gUHJvbWlzZS5yZWplY3QoY3JlYXRlQWdncmVnYXRlRXJyb3IodGhpcy5sb2FkRXJyb3JzKSkgOiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBsb2FkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxvYWRFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBjcmVhdGVBZ2dyZWdhdGVFcnJvcih0aGlzLmxvYWRFcnJvcnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jaHJvbm91c2x5IGxvYWRzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIE92ZXJyaWRlIHRvIGFkZCBhc3luYyBsb2FkIGxvZ2ljLCB3aGljaCBpcyBleGVjdXRlZCBhZnRlciB7QGxpbmsgQ29tcG9uZW50Lm9ubG9hZH0uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyBvbmxvYWRBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbm9vcEFzeW5jU2luZ2xldG9uUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB7QGxpbmsgRGlzcG9zYWJsZX0gc28gaXQgaXMgZGlzcG9zZWQgd2hlbiB0aGlzIGNvbXBvbmVudCB1bmxvYWRzLCBhbmQgcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoZSByZWN1cnJpbmcgXCJ0aWUgYSBkaXNwb3NhYmxlIHRvIHRoZSBjb21wb25lbnQncyBsaWZlY3ljbGUsIHRoZW4ga2VlcCB1c2luZyBpdFwiIGlkaW9tOiB0aGUgZGlzcG9zYWJsZSBpc1xuICAgKiBkaXNwb3NlZCBvbiB7QGxpbmsgQ29tcG9uZW50LnVubG9hZH0gKG9yIGVhcmxpZXIsIGlmIHRoZSBjYWxsZXIgZGlzcG9zZXMgaXQgZGlyZWN0bHkgXHUyMDE0IGRpc3Bvc2UgaXMgZXhwZWN0ZWQgdG9cbiAgICogYmUgaWRlbXBvdGVudCkuIEd1YXJkIHdpdGgge0BsaW5rIGVuc3VyZUxvYWRlZH0gYXQgdGhlIGNhbGwgc2l0ZSB3aGVuIHJlZ2lzdGVyaW5nIGJlZm9yZSBsb2FkIHdvdWxkIGJlIHVuc2FmZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBURGlzcG9zYWJsZSAtIFRoZSB0eXBlIG9mIHRoZSBkaXNwb3NhYmxlLlxuICAgKiBAcGFyYW0gZGlzcG9zYWJsZSAtIFRoZSBkaXNwb3NhYmxlIHRvIHJlZ2lzdGVyLlxuICAgKiBAcmV0dXJucyBUaGUgc2FtZSBkaXNwb3NhYmxlLCBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJEaXNwb3NhYmxlPFREaXNwb3NhYmxlIGV4dGVuZHMgRGlzcG9zYWJsZT4oZGlzcG9zYWJsZTogVERpc3Bvc2FibGUpOiBURGlzcG9zYWJsZSB7XG4gICAgdGhpcy5yZWdpc3RlcigoKSA9PiB7XG4gICAgICBkaXNwb3NlKGRpc3Bvc2FibGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBkaXNwb3NhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byByZW1vdmUuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIHN1cGVyLnJlbW92ZUNoaWxkKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5kZWxldGUoY29tcG9uZW50KTtcbiAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50RXggJiYgY29tcG9uZW50LnBhcmVudENvbXBvbmVudCA9PT0gdGhpcykge1xuICAgICAgY29tcG9uZW50LnBhcmVudENvbXBvbmVudCA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCwgdGhyb3dpbmcgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBndWFyZCBwdWJsaWMgbWV0aG9kcyB0aGF0IHJlZ2lzdGVyIHRlYXJkb3duLWJlYXJpbmcgcmVzb3VyY2VzICh2aWEge0BsaW5rIENvbXBvbmVudC5yZWdpc3Rlcn0sXG4gICAqIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJFdmVudH0sIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJEb21FdmVudH0sIGV0Yy4pLiBSZWdpc3RlcmluZyBiZWZvcmUgbG9hZCBpcyB1bnNhZmU6XG4gICAqIHtAbGluayBDb21wb25lbnQudW5sb2FkfSBpcyBhIG5vLW9wIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgbm90IGxvYWRlZCwgc28gYW55IHRlYXJkb3duIHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCB3b3VsZFxuICAgKiBuZXZlciBydW4gaWYgdGhlIGNvbXBvbmVudCBpcyB1bmxvYWRlZCB3aXRob3V0IGZpcnN0IGJlaW5nIGxvYWRlZC5cbiAgICpcbiAgICogVGhlIHR3byBub3QtbG9hZGVkIGNhc2VzIGFyZSBkZWxpYmVyYXRlbHkgZGlzdGluZ3Vpc2hlZC4gQSBjb21wb25lbnQgdGhhdCB3YXMgTkVWRVIgbG9hZGVkIGlzIGEgZ2VudWluZVxuICAgKiBwcm9ncmFtbWluZyBlcnJvciwgc28gaXQgdGhyb3dzIGEgbG91ZCB7QGxpbmsgRXJyb3J9LiBBIGNvbXBvbmVudCB0aGF0IGhhcyBBTFJFQURZIGJlZW4gdW5sb2FkZWQgaXMgbm90IFx1MjAxNFxuICAgKiBpdCBpcyB0aGUgZXhwZWN0ZWQgb3V0Y29tZSBvZiB3b3JrIHRoYXQgb3V0bGl2ZWQgaXRzIGNvbXBvbmVudCAoZS5nLiBhbiBgYXN5bmNgIG1ldGhvZCBzdXNwZW5kZWQgb24gYW5cbiAgICogYGF3YWl0YCB3aGlsZSB0aGUgY29tcG9uZW50IHdhcyB1bmxvYWRlZCwgdGhlbiByZXN1bWVkKSBcdTIwMTQgc28gaXQgdGhyb3dzIGEge0BsaW5rIFNpbGVudEVycm9yfSwgd2hpY2hcbiAgICogYGhhbmRsZVNpbGVudEVycm9yYCBzdXBwcmVzc2VzLCBsZXR0aW5nIHN1Y2ggd29yayB1bndpbmQgcXVpZXRseSBpbnN0ZWFkIG9mIHJlcG9ydGluZyBhbiBhc3luYyBlcnJvci5cbiAgICpcbiAgICogQHRocm93cyBBbiB7QGxpbmsgRXJyb3J9IGlmIHRoZSBjb21wb25lbnQgd2FzIG5ldmVyIGxvYWRlZCwgb3IgYSB7QGxpbmsgU2lsZW50RXJyb3J9IGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4gdW5sb2FkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZW5zdXJlTG9hZGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTaWxlbnRFcnJvcignQ29tcG9uZW50IGlzIGFscmVhZHkgdW5sb2FkZWQnKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBpcyBub3QgbG9hZGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHNldHRsZXMgb25jZSBuZWl0aGVyIHRoaXMgY29tcG9uZW50IG5vciBhbnkge0BsaW5rIENvbXBvbmVudEV4fSBhbmNlc3RvciBoYXMgYSBsb2FkXG4gICAqIGluIGZsaWdodCwgb3IgYG51bGxgIHdoZW4gbm9uZSBvZiB0aGVtIGhhcyBvbmUgcmlnaHQgbm93LlxuICAgKlxuICAgKiB7QGxpbmsgZ2V0SW5GbGlnaHRMb2FkUHJvbWlzZX0gY292ZXJzIHRoaXMgY29tcG9uZW50J3MgT1dOIGxvYWQgb25seS4gQSBzaWJsaW5nIHRoaXMgY29tcG9uZW50IGRlcGVuZHMgb24gXHUyMDE0IG1vc3RcbiAgICogb2Z0ZW4gdGhlIG93bmluZyBwbHVnaW4ncyBzZXR0aW5ncyBjb21wb25lbnQsIHdoaWNoIHJlYWRzIGBkYXRhLmpzb25gIGFzeW5jaHJvbm91c2x5IFx1MjAxNCBpcyBvdXRzaWRlIGl0LCBidXQgaXQgaXNcbiAgICogaW5zaWRlIHRoZSBsb2FkIG9mIGEgc2hhcmVkIGFuY2VzdG9yLiBXYWl0aW5nIGZvciBldmVyeSBhbmNlc3RvciB0aGVyZWZvcmUgd2FpdHMgZm9yIHRoZSB3aG9sZSB0cmVlIHRoZSBjb21wb25lbnRcbiAgICogd2FzIGxvYWRlZCBhcyBwYXJ0IG9mOiB1bmRlciBgUGx1Z2luQmFzZWAgdGhlIGNoYWluIGVuZHMgYXQgdGhlIHBsdWdpbidzIHVuaXZlcnNhbCB3cmFwcGVyLCB3aG9zZSBsb2FkIGNvdmVycyB0aGVcbiAgICogZGVwZW5kZW5jeSBnYXRlLCB0aGUgZmVhdHVyZSBzdXJmYWNlIGFuZCBgb25sb2FkSW1wbGAuXG4gICAqXG4gICAqIFRoZSBjaGFpbiBpcyBmb2xsb3dlZCB0aHJvdWdoIHtAbGluayBDb21wb25lbnRFeH0gcGFyZW50cyBvbmx5LiBBIHBsYWluIHtAbGluayBDb21wb25lbnR9IGFueXdoZXJlIGJldHdlZW4gdGhpc1xuICAgKiBjb21wb25lbnQgYW5kIGFuIGFuY2VzdG9yIGVuZHMgaXQsIGJlY2F1c2UgYSBwbGFpbiBjb21wb25lbnQgcmVjb3JkcyBubyBwYXJlbnQgYW5kIGV4cG9zZXMgbm8gbG9hZCBwcm9taXNlLlxuICAgKlxuICAgKiBOZXZlciBhd2FpdCB0aGlzIGZyb20gaW5zaWRlIGEgbG9hZCBzdGVwIG9mIG9uZSBvZiB0aG9zZSBhbmNlc3RvcnM6IHRoZSBhbmNlc3RvcidzIGxvYWQgd291bGQgdGhlbiBiZSB3YWl0aW5nIGZvclxuICAgKiBpdHNlbGYuIEl0IGlzIG1lYW50IGZvciB3b3JrIHNjaGVkdWxlZCBPVVRTSURFIHRoZSBsb2FkLCBzdWNoIGFzIGEgbGF5b3V0LXJlYWR5IGhhbmRsZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBwcm9taXNlLCBvciBgbnVsbGAgaWYgbm90aGluZyBpbiB0aGUgYW5jZXN0cnkgaXMgbG9hZGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmZpbmRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKSA/IHRoaXMud2FpdEZvckFuY2VzdHJ5TG9hZCgpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb21wb25lbnQncyBpbi1mbGlnaHQgbG9hZCB7QGxpbmsgUHJvbWlzZX0gKGl0cyB7QGxpbmsgb25sb2FkQXN5bmN9IHBsdXMgY2hpbGRyZW4pLCBvciBgbnVsbGAgd2hlblxuICAgKiBub3RoaW5nIGlzIGxvYWRpbmcgXHUyMDE0IGVpdGhlciB0aGUgY29tcG9uZW50IGxvYWRlZCBmdWxseSBzeW5jaHJvbm91c2x5IG9yIGl0cyBhc3luYyBsb2FkIGhhcyBhbHJlYWR5IHNldHRsZWQuXG4gICAqXG4gICAqIExldHMgYSBjYWxsZXIgc2NoZWR1bGVkIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgc3RpbGwgbG9hZGluZyBhd2FpdCB0aGUgYXN5bmMgbG9hZCB0YWlsIGJlZm9yZSBhY3RpbmcsIGluc3RlYWQgb2ZcbiAgICogcmFjaW5nIGl0OiB7QGxpbmsgQ29tcG9uZW50Lm9ubG9hZH0gaGFzIHJ1biAoc28gYF9sb2FkZWRgIGlzIHNldCkgYnV0IHtAbGluayBvbmxvYWRBc3luY30gbWF5IG5vdCBoYXZlIGZpbmlzaGVkLlxuICAgKlxuICAgKiBJdCBjb3ZlcnMgdGhpcyBjb21wb25lbnQncyBPV04gbG9hZCBvbmx5LiBBIGNhbGxlciB0aGF0IGFsc28gZGVwZW5kcyBvbiBhIHNpYmxpbmcncyBzdGF0ZSBcdTIwMTQgYSBsYXlvdXQtcmVhZHkgaGFuZGxlclxuICAgKiByZWFkaW5nIHNldHRpbmdzIGlzIHRoZSBjb21tb24gb25lIFx1MjAxNCB3YW50cyB7QGxpbmsgZ2V0SW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlfSwgd2hpY2ggYExheW91dFJlYWR5Q29tcG9uZW50YFxuICAgKiB1c2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaW4tZmxpZ2h0IGxvYWQgcHJvbWlzZSwgb3IgYG51bGxgIGlmIG5vIGxvYWQgaXMgaW4gZmxpZ2h0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEluRmxpZ2h0TG9hZFByb21pc2UoKTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgbW9zdCByZWNlbnQgbG9hZCByZWNvcmRlZCBhbnkgZmFpbHVyZS5cbiAgICpcbiAgICogUmVmbGVjdHMgdGhlIG91dGNvbWUgb2YgdGhlIGxhc3Qge0BsaW5rIGxvYWR9IC8ge0BsaW5rIGxvYWRXaXRoUHJvbWlzZXN9OiBgdHJ1ZWAgd2hlbiB7QGxpbmsgb25sb2FkQXN5bmN9IG9yIGFueVxuICAgKiBjaGlsZCdzIGxvYWQgdGhyZXcgKHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkpLiBVbmxpa2Uge0BsaW5rIGxvYWRXaXRoUHJvbWlzZXN9LCByZWFkaW5nIHRoaXMgZG9lcyBOT1RcbiAgICogcmUtcmFpc2UgdGhlIGNvbGxlY3RlZCBlcnJvcnMgXHUyMDE0IGl0IGxldHMgYSBieXN0YW5kZXIgKGUuZy4gYSBsYXlvdXQtcmVhZHkgaGFuZGxlciBhd2FpdGluZyB0aGUgaW4tZmxpZ2h0IGxvYWQpIHRlbGxcbiAgICogd2hldGhlciB0aGUgbG9hZCBzdWNjZWVkZWQgd2l0aG91dCBhZG9wdGluZyBhIGZhaWx1cmUgdGhhdCB0aGUgbG9hZCdzIG93bmVyIGlzIGFscmVhZHkgcmVzcG9uc2libGUgZm9yLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGxhc3QgbG9hZCByZWNvcmRlZCBhdCBsZWFzdCBvbmUgZXJyb3IsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGhhc0xvYWRFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5sb2FkZWQsIGFzIG9wcG9zZWQgdG8gc2ltcGx5IG5vdCBoYXZpbmcgYmVlbiBsb2FkZWQgeWV0LlxuICAgKlxuICAgKiBCb3RoIHN0YXRlcyBsZWF2ZSBgX2xvYWRlZGAgZmFsc2UsIGJ1dCB0aGV5IG1lYW4gb3Bwb3NpdGUgdGhpbmdzOiBhIGNvbXBvbmVudCB0aGF0IHdhcyBuZXZlciBsb2FkZWQgaXMgc3RpbGxcbiAgICogYWhlYWQgb2YgaXRzIGxpZmVjeWNsZSAocXVldWVpbmcgY2hpbGRyZW4gYmVmb3JlIGxvYWQgaXMgbGVnaXRpbWF0ZSksIHdoaWxlIGFuIHVubG9hZGVkIG9uZSBpcyBiZWhpbmQgaXQgYW5kXG4gICAqIG11c3Qgbm90IGJlIHVzZWQgYW55IGZ1cnRoZXIuIFRoZSBkaXN0aW5jdGlvbiBpcyB0cmFja2VkIGJ5IGEgZmxhZyBzZXQgaW4ge0BsaW5rIGxvYWR9LCBOT1QgYnkgYW5cbiAgICoge0BsaW5rIENvbXBvbmVudC5vbnVubG9hZH0gb3ZlcnJpZGUsIGJlY2F1c2Ugc3ViY2xhc3NlcyBvdmVycmlkZSBgb251bmxvYWRgIGFuZCBtYXkgbm90IGNhbGwgYHN1cGVyYC5cbiAgICpcbiAgICogVXNlIGl0IGluIGEgbG9uZy1ydW5uaW5nIGBhc3luY2AgbWV0aG9kIHRvIGFiYW5kb24gd29yayB3aG9zZSBjb21wb25lbnQgd2FzIHVubG9hZGVkIG1pZC1mbGlnaHQsIHdoZW5cbiAgICogdW53aW5kaW5nIHZpYSB0aGUge0BsaW5rIFNpbGVudEVycm9yfSB0aHJvd24gYnkge0BsaW5rIGVuc3VyZUxvYWRlZH0gLyB7QGxpbmsgYWRkQ2hpbGR9IGlzIG5vdCBkZXNpcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNvbXBvbmVudCB3YXMgbG9hZGVkIGF0IHNvbWUgcG9pbnQgYW5kIGlzIGN1cnJlbnRseSB1bmxvYWRlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNVbmxvYWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNCZWVuTG9hZGVkICYmICF0aGlzLl9sb2FkZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2VxdWVuY2VzIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHN0ZXAgaW50byB0aGUgbG9hZCBwcm9taXNlLlxuICAgKlxuICAgKiBUaGUgc3RlcCBpcyBwcmVzdW1lZCB0byBoYXZlIHN0YXJ0ZWQgc3luY2hyb25vdXNseSAoc28gYW55IGBfbG9hZGVkYCBmbGFnIGl0IHNldHMgaXMgYWxyZWFkeSB2aXNpYmxlKTsgb25seSB0aGVcbiAgICogYXdhaXRpbmcgb2YgaXRzIGFzeW5jIHRhaWwgaXMgc2VxdWVuY2VkIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZSAtIFRoZSByZXN1bHQgb2YgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgc3RlcC5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kRWFnZXJMb2FkU3RlcChsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBjYXB0dXJlZCA9IHRoaXMuY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGUpO1xuICAgIGlmICghY2FwdHVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgdGhpcy5zZXRMb2FkUHJvbWlzZShwcmV2aW91cyA/IHByZXZpb3VzLnRoZW4oKCkgPT4gY2FwdHVyZWQpIDogY2FwdHVyZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcXVlbmNlcyBhIGRlZmVycmVkIGxvYWQgc3RlcCBpbnRvIHRoZSBsb2FkIHByb21pc2UsIHJ1bm5pbmcgaXQgb25seSBhZnRlciBwcmV2aW91c2x5LWFwcGVuZGVkIHN0ZXBzIHNldHRsZS5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRnVuY3Rpb24gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kU2VxdWVudGlhbExvYWRTdGVwKGxvYWRQcm9taXNhYmxlRnVuY3Rpb246ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIGlmIChwcmV2aW91cykge1xuICAgICAgdGhpcy5zZXRMb2FkUHJvbWlzZShwcmV2aW91cy50aGVuKCgpID0+IHRoaXMucnVuQW5kQ2FwdHVyZShsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNhcHR1cmVkID0gdGhpcy5jYXB0dXJlU3luYyhsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKTtcbiAgICBpZiAoY2FwdHVyZWQpIHtcbiAgICAgIHRoaXMuc2V0TG9hZFByb21pc2UoY2FwdHVyZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIGEgbG9hZCBmYWlsdXJlLlxuICAgKlxuICAgKiBBIGZhaWx1cmUgcmFpc2VkIGJ5IGEgY2hpbGQge0BsaW5rIENvbXBvbmVudEV4fSBpcyBpdHNlbGYgYW4ge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfTsgaXQgaXMgcmVjb3JkZWQgYXMtaXMgc28gdGhlXG4gICAqIGdyb3VwaW5nIGJ5IGNoaWxkIGNvbXBvbmVudCBpcyBwcmVzZXJ2ZWQgKG93biBmYWlsdXJlcyBzdGF5IGZsYXQsIGNoaWxkLXN1YnRyZWUgZmFpbHVyZXMgc3RheSBuZXN0ZWQpLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3IgLSBUaGUgdGhyb3duIHZhbHVlIHRvIHJlY29yZC5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZUVycm9yKGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRXJyb3JzLnB1c2goRXJyb3JXcmFwcGVyLmNyZWF0ZShlcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBzIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHJlc3VsdCBzbyBpdCBuZXZlciByZWplY3RzOiBhbnkgZmFpbHVyZSBpcyByZWNvcmRlZCBpbnRvIGBsb2FkRXJyb3JzYC5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlIC0gVGhlIGxvYWQgcmVzdWx0IHRvIG9ic2VydmUuXG4gICAqIEByZXR1cm5zIEEgbmV2ZXItcmVqZWN0aW5nIHtAbGluayBQcm9taXNlfSwgb3IgYG51bGxgIGlmIHRoZSByZXN1bHQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbG9hZFByb21pc2FibGUgPT09IG51bGwgfHwgbG9hZFByb21pc2FibGUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBudWxsXG4gICAgICA6IFByb21pc2UucmVzb2x2ZShsb2FkUHJvbWlzYWJsZSkudGhlbihub29wKS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGxvYWQgc3RlcCBzeW5jaHJvbm91c2x5LCByZWNvcmRpbmcgYSBzeW5jaHJvbm91cyB0aHJvdywgYW5kIHdyYXBzIGFueSBhc3luYyB0YWlsIHNvIGl0IG5ldmVyIHJlamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqIEByZXR1cm5zIEEgbmV2ZXItcmVqZWN0aW5nIHtAbGluayBQcm9taXNlfSwgb3IgYG51bGxgIGlmIHRoZSBzdGVwIGlzIGZ1bGx5IHN5bmNocm9ub3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlU3luYyhsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+O1xuICAgIHRyeSB7XG4gICAgICBsb2FkUHJvbWlzYWJsZSA9IGxvYWRQcm9taXNhYmxlRnVuY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0TG9hZFByb21pc2FibGUoY29tcG9uZW50OiBDb21wb25lbnQpOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNoaWxkcmVuU2V0Lmhhcyhjb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1jb25mdXNpbmctdm9pZC1leHByZXNzaW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb24gLS0gSXQgY2FuIGJlIGBQcm9taXNlPHZvaWQ+YCBpbiBydW50aW1lLiBXYW50IGV4cGxpY2l0bHkgY2FzdCB0byBzaG93IHdlIGtub3cgaXQgbWF5IGJlIHByb21pc2UsIGRlc3BpdGUgdGhlIGRlY2xhcmVkIHR5cGUgYHZvaWRgLlxuICAgIHJldHVybiBjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRFeCA/IGNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCkgOiBjb21wb25lbnQubG9hZCgpIGFzIFByb21pc2FibGU8dm9pZD47XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlID8/IHRoaXMucGFyZW50Q29tcG9uZW50Py5maW5kSW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCkgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRMb2FkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRXJyb3JzID0gW107XG4gICAgdGhpcy5sb2FkUHJvbWlzZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGRlZmVycmVkIGxvYWQgc3RlcCwgcmVjb3JkaW5nIGEgc3luY2hyb25vdXMgdGhyb3cgb3IgYW4gYXN5bmMgcmVqZWN0aW9uIHdpdGhvdXQgZXZlciByZS10aHJvd2luZy5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRnVuY3Rpb24gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcnVuQW5kQ2FwdHVyZShsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCAobG9hZFByb21pc2FibGVGdW5jdGlvbigpID8/IHVuZGVmaW5lZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRQcm9taXNlKGxvYWRQcm9taXNlOiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgbG9hZFByb21pc2VXaXRoUmVzZXQ6IFByb21pc2U8dm9pZD4gPSBsb2FkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxvYWRQcm9taXNlID09PSBsb2FkUHJvbWlzZVdpdGhSZXNldCkge1xuICAgICAgICB0aGlzLmxvYWRQcm9taXNlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmxvYWRQcm9taXNlID0gbG9hZFByb21pc2VXaXRoUmVzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQXdhaXRzIGluLWZsaWdodCBsb2FkcyBpbiB0aGUgYW5jZXN0cnkgdW50aWwgbm9uZSBpcyBsZWZ0LlxuICAgKlxuICAgKiBMb29wZWQgcmF0aGVyIHRoYW4gYXdhaXRlZCBvbmNlLCBiZWNhdXNlIGFuIGFuY2VzdG9yJ3MgbG9hZCBjYW4gZ3JvdyB3aGlsZSBpdCBpcyBiZWluZyBhd2FpdGVkOiBhIGNoaWxkIGFkZGVkXG4gICAqIHRvIGFuIGFscmVhZHktbG9hZGVkIGNvbXBvbmVudCBhcHBlbmRzIGl0cyBhc3luYyB0YWlsIHRvIHRoYXQgY29tcG9uZW50J3MgbG9hZCBwcm9taXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQW5jZXN0cnlMb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBsb2FkUHJvbWlzZSA9IHRoaXMuZmluZEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpO1xuICAgIHdoaWxlIChsb2FkUHJvbWlzZSkge1xuICAgICAgYXdhaXQgbG9hZFByb21pc2U7XG4gICAgICBsb2FkUHJvbWlzZSA9IHRoaXMuZmluZEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLDZCQUFxQztBQUNyQyxtQkFBeUI7QUFDekIsd0JBQXdCO0FBQ3hCLG1CQUdPO0FBQ1Asc0JBR087QUFDUCxzQkFBMEI7QUFNbkIsTUFBTSxvQkFBb0IsMEJBQWdDO0FBQUEsRUFDOUMsY0FBYyxvQkFBSSxJQUFlO0FBQUEsRUFDMUMsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBc0IsQ0FBQztBQUFBLEVBQ3ZCLGNBQW9DO0FBQUEsRUFDcEMsa0JBQXNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFvQjlCLFNBQXVDLFdBQW1DO0FBQ3hGLFFBQUksS0FBSyxX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
504
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgY3JlYXRlQWdncmVnYXRlRXJyb3IgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYWdncmVnYXRlLWVycm9yJztcbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FycmF5JztcbmltcG9ydCB7IGRpc3Bvc2UgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGlzcG9zYWJsZSc7XG5pbXBvcnQge1xuICBFcnJvcldyYXBwZXIsXG4gIFNpbGVudEVycm9yXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9lcnJvcic7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcmVxdWlyZS1jb21wb25lbnQtc3VmZml4IC0tIEV4dGVuZGVkIGJhc2UgY2xhc3MuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RXggZXh0ZW5kcyBDb21wb25lbnQgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlsZHJlblNldCA9IG5ldyBTZXQ8Q29tcG9uZW50PigpO1xuICBwcml2YXRlIGhhc0JlZW5Mb2FkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBsb2FkRXJyb3JzOiBFcnJvcltdID0gW107XG4gIHByaXZhdGUgbG9hZFByb21pc2U6IG51bGwgfCBQcm9taXNlPHZvaWQ+ID0gbnVsbDtcbiAgcHJpdmF0ZSBwYXJlbnRDb21wb25lbnQ6IENvbXBvbmVudEV4IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIE1pcnJvcnMgdGhlIG5hdGl2ZSBgQ29tcG9uZW50LmFkZENoaWxkYCBjb250cmFjdDogaWYgdGhpcyBjb21wb25lbnQgaXMgYWxyZWFkeSBsb2FkZWQsIHRoZSBjaGlsZCBpcyBsb2FkZWRcbiAgICogaW1tZWRpYXRlbHksIHNvIGBjaGlsZC5fbG9hZGVkYCBpcyBzZXQgYmVmb3JlIHRoaXMgbWV0aG9kIHJldHVybnMgZXZlbiB3aGVuIHRoaXMgY29tcG9uZW50IGhhcyBhc3luYyBsb2FkIGxvZ2ljLlxuICAgKiBUaGUgY2hpbGQncyBhc3luYyB0YWlsIChpZiBhbnkpIGlzIHNlcXVlbmNlZCBpbnRvIHRoZSBsb2FkIHByb21pc2Ugc28gYSBsYXRlciB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc30gY2FsbCBhd2FpdHMgaXQuXG4gICAqXG4gICAqIEFkZGluZyBhIGNoaWxkIEJFRk9SRSB0aGUgZmlyc3QgbG9hZCBpcyBsZWdpdGltYXRlOiB0aGUgY2hpbGQgaXMgcXVldWVkIGFuZCBsb2FkZWQgd2hlbiB0aGlzIGNvbXBvbmVudCBsb2Fkcy5cbiAgICogQWRkaW5nIG9uZSBBRlRFUiB0aGlzIGNvbXBvbmVudCBoYXMgYmVlbiB1bmxvYWRlZCBpcyBub3QgXHUyMDE0IHRoZSBjaGlsZCB3b3VsZCBuZXZlciBiZSBsb2FkZWQgYW5kIG5ldmVyIHVubG9hZGVkXG4gICAqIChhIGxlYWspLCBzbyBpdCBpcyByZWZ1c2VkIHdpdGggYSB7QGxpbmsgU2lsZW50RXJyb3J9LiBUaGUgdHlwaWNhbCBzb3VyY2Ugb2Ygc3VjaCBhIGNhbGwgaXMgYW4gYGFzeW5jYCBtZXRob2RcbiAgICogdGhhdCB3YXMgc3VzcGVuZGVkIG9uIGFuIGBhd2FpdGAgd2hlbiB0aGUgY29tcG9uZW50IGdvdCB1bmxvYWRlZCBhbmQgdGhlbiByZXN1bWVkIG9uIHRoZSBkZWFkIGNvbXBvbmVudDsgdGhlXG4gICAqIHtAbGluayBTaWxlbnRFcnJvcn0gdW53aW5kcyBpdCBxdWlldGx5IChzZWUge0BsaW5rIGlzVW5sb2FkZWR9KS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIGFkZC5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYWRkZWQgY29tcG9uZW50LlxuICAgKiBAdGhyb3dzIEEge0BsaW5rIFNpbGVudEVycm9yfSBpZiB0aGUgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5sb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYWRkQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgaWYgKHRoaXMuaXNVbmxvYWRlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2lsZW50RXJyb3IoJ0NvbXBvbmVudCBpcyBhbHJlYWR5IHVubG9hZGVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hpbGRyZW4ucHVzaChjb21wb25lbnQpO1xuICAgIHRoaXMuY2hpbGRyZW5TZXQuYWRkKGNvbXBvbmVudCk7XG4gICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEV4KSB7XG4gICAgICBjb21wb25lbnQucGFyZW50Q29tcG9uZW50ID0gdGhpcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICB0aGlzLmFwcGVuZEVhZ2VyTG9hZFN0ZXAodGhpcy5leHRyYWN0TG9hZFByb21pc2FibGUoY29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIGNvbXBvbmVudCBpcyBhIGRpcmVjdCBjaGlsZCBvZiB0aGlzIG9uZS5cbiAgICpcbiAgICogT25seSBESVJFQ1QgY2hpbGRyZW4gYXJlIHJlcG9ydGVkIFx1MjAxNCB0aGlzIGlzIGFuIG93bmVyc2hpcCBxdWVzdGlvbiwgbm90IGEgY29udGFpbm1lbnQgb25lLiBUaGUgY2FsbGVyIHRoYXRcbiAgICogbmVlZHMgaXQgaXMgb25lIGhvbGRpbmcgc2V2ZXJhbCBwYXJlbnRzIGFuZCBkZWNpZGluZyB3aGljaCBvZiB0aGVtIGEgY29tcG9uZW50IGJlbG9uZ3MgdG8sIGFuZCBmb3IgdGhhdCBhXG4gICAqIGdyYW5kY2hpbGQgaXMgdGhlIHdyb25nIGFuc3dlcjogcmVtb3ZpbmcgaXQgZnJvbSB0aGUgcGFyZW50IHRoYXQgbWVyZWx5IGNvbnRhaW5zIGl0cyBwYXJlbnQgd291bGQgZmFpbC5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdG8gbG9vayBmb3IuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBhIGRpcmVjdCBjaGlsZCBvZiB0aGlzIG9uZS5cbiAgICovXG4gIHB1YmxpYyBoYXNDaGlsZChjb21wb25lbnQ6IENvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuU2V0Lmhhcyhjb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIERlc3BpdGUgdGhlIGRlY2xhcmVkIGB2b2lkYCByZXR1cm4gdHlwZSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgbG9hZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLmhhc0JlZW5Mb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRMb2FkU3RhdGUoKTtcblxuICAgIHRoaXMub25sb2FkKCk7XG5cbiAgICBjb25zdCBvbmxvYWRBc3luY1Byb21pc2UgPSB0aGlzLm9ubG9hZEFzeW5jKCk7XG4gICAgaWYgKG9ubG9hZEFzeW5jUHJvbWlzZSAhPT0gbm9vcEFzeW5jU2luZ2xldG9uUHJvbWlzZSkge1xuICAgICAgdGhpcy5hcHBlbmRFYWdlckxvYWRTdGVwKG9ubG9hZEFzeW5jUHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBzbmFwc2hvdCh0aGlzLl9jaGlsZHJlbikpIHtcbiAgICAgIHRoaXMuYXBwZW5kU2VxdWVudGlhbExvYWRTdGVwKCgpID0+IHRoaXMuZXh0cmFjdExvYWRQcm9taXNhYmxlKGNoaWxkKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9hZFByb21pc2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUsIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIFdlIG5lZWQgdG8gYnlwYXNzIHR5cGUgc3lzdGVtIHRvIHJldHVybiBgUHJvbWlzZTx2b2lkPmAuXG4gICAgICByZXR1cm4gdGhpcy5sb2FkUHJvbWlzZSBhcyB1bmtub3duIGFzIHZvaWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQgd2l0aCBwcm9taXNlcy5cbiAgICpcbiAgICogVW5saWtlIHtAbGluayBsb2FkfSwgdGhpcyBtZXRob2QgbmV2ZXIgcmVqZWN0cyB3aXRoIGFuIGluZGl2aWR1YWwgZXJyb3I6IGV2ZXJ5IGZhaWx1cmUgcmFpc2VkIGJ5IHtAbGluayBvbmxvYWRBc3luY31cbiAgICogb3IgYSBjaGlsZCdzIGxvYWQgaXMgY29sbGVjdGVkLCBhbmQgb25jZSBldmVyeXRoaW5nIHNldHRsZXMgdGhlIHJldHVybmVkIHtAbGluayBQcm9taXNlfSByZWplY3RzIHdpdGggYSBzaW5nbGVcbiAgICoge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfSBob2xkaW5nIGFsbCBvZiB0aGVtLiBOb24tYEVycm9yYCB0aHJvd2FibGVzIGFyZSBub3JtYWxpemVkIHZpYSB7QGxpbmsgRXJyb3JXcmFwcGVyLmNyZWF0ZX0uXG4gICAqXG4gICAqIFRoZSBgQWdncmVnYXRlRXJyb3JgIGlzIGJ1aWx0IGJ5IHtAbGluayBjcmVhdGVBZ2dyZWdhdGVFcnJvcn0sIHNvIGl0cyBvd24gYG1lc3NhZ2VgIG5hbWVzIHRoZSBmYWlsdXJlIHJhdGhlclxuICAgKiB0aGFuIGJlaW5nIGVtcHR5OiBhIGxvbmUgZmFpbHVyZSBsZW5kcyBpdHMgbWVzc2FnZSB0byBldmVyeSBhZ2dyZWdhdGUgYWJvdmUgaXQsIHdoaWNoIGlzIHdoYXQgbGV0cyBhIGNhbGxlclxuICAgKiBhc3NlcnQgb24gdGhlIHNlbnRlbmNlIHRoYXQgd2FzIGFjdHVhbGx5IHRocm93biB3aXRob3V0IHdhbGtpbmcgYGVycm9yc2AgdG8gZmluZCBpdC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjaGlsZHJlbiBmaW5pc2ggbG9hZGluZywgcmVqZWN0cyB3aXRoIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gaWYgYW55IGxvYWQgc3RlcCBmYWlsZWQsIG9yIGBudWxsYCBpZiB0aGUgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gZG9uJ3QgdXNlIGBhc3luY2AgbG9naWMgYW5kIG5vbmUgZmFpbGVkIHN5bmNocm9ub3VzbHkuXG4gICAqL1xuICBwdWJsaWMgbG9hZFdpdGhQcm9taXNlcygpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkKCk7XG5cbiAgICBjb25zdCBsb2FkUHJvbWlzZSA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKCFsb2FkUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwID8gUHJvbWlzZS5yZWplY3QoY3JlYXRlQWdncmVnYXRlRXJyb3IodGhpcy5sb2FkRXJyb3JzKSkgOiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBsb2FkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxvYWRFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBjcmVhdGVBZ2dyZWdhdGVFcnJvcih0aGlzLmxvYWRFcnJvcnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jaHJvbm91c2x5IGxvYWRzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIE92ZXJyaWRlIHRvIGFkZCBhc3luYyBsb2FkIGxvZ2ljLCB3aGljaCBpcyBleGVjdXRlZCBhZnRlciB7QGxpbmsgQ29tcG9uZW50Lm9ubG9hZH0uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyBvbmxvYWRBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbm9vcEFzeW5jU2luZ2xldG9uUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB7QGxpbmsgRGlzcG9zYWJsZX0gc28gaXQgaXMgZGlzcG9zZWQgd2hlbiB0aGlzIGNvbXBvbmVudCB1bmxvYWRzLCBhbmQgcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoZSByZWN1cnJpbmcgXCJ0aWUgYSBkaXNwb3NhYmxlIHRvIHRoZSBjb21wb25lbnQncyBsaWZlY3ljbGUsIHRoZW4ga2VlcCB1c2luZyBpdFwiIGlkaW9tOiB0aGUgZGlzcG9zYWJsZSBpc1xuICAgKiBkaXNwb3NlZCBvbiB7QGxpbmsgQ29tcG9uZW50LnVubG9hZH0gKG9yIGVhcmxpZXIsIGlmIHRoZSBjYWxsZXIgZGlzcG9zZXMgaXQgZGlyZWN0bHkgXHUyMDE0IGRpc3Bvc2UgaXMgZXhwZWN0ZWQgdG9cbiAgICogYmUgaWRlbXBvdGVudCkuIEd1YXJkIHdpdGgge0BsaW5rIGVuc3VyZUxvYWRlZH0gYXQgdGhlIGNhbGwgc2l0ZSB3aGVuIHJlZ2lzdGVyaW5nIGJlZm9yZSBsb2FkIHdvdWxkIGJlIHVuc2FmZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBURGlzcG9zYWJsZSAtIFRoZSB0eXBlIG9mIHRoZSBkaXNwb3NhYmxlLlxuICAgKiBAcGFyYW0gZGlzcG9zYWJsZSAtIFRoZSBkaXNwb3NhYmxlIHRvIHJlZ2lzdGVyLlxuICAgKiBAcmV0dXJucyBUaGUgc2FtZSBkaXNwb3NhYmxlLCBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJEaXNwb3NhYmxlPFREaXNwb3NhYmxlIGV4dGVuZHMgRGlzcG9zYWJsZT4oZGlzcG9zYWJsZTogVERpc3Bvc2FibGUpOiBURGlzcG9zYWJsZSB7XG4gICAgdGhpcy5yZWdpc3RlcigoKSA9PiB7XG4gICAgICBkaXNwb3NlKGRpc3Bvc2FibGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBkaXNwb3NhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byByZW1vdmUuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIHN1cGVyLnJlbW92ZUNoaWxkKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5kZWxldGUoY29tcG9uZW50KTtcbiAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50RXggJiYgY29tcG9uZW50LnBhcmVudENvbXBvbmVudCA9PT0gdGhpcykge1xuICAgICAgY29tcG9uZW50LnBhcmVudENvbXBvbmVudCA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCwgdGhyb3dpbmcgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBndWFyZCBwdWJsaWMgbWV0aG9kcyB0aGF0IHJlZ2lzdGVyIHRlYXJkb3duLWJlYXJpbmcgcmVzb3VyY2VzICh2aWEge0BsaW5rIENvbXBvbmVudC5yZWdpc3Rlcn0sXG4gICAqIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJFdmVudH0sIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJEb21FdmVudH0sIGV0Yy4pLiBSZWdpc3RlcmluZyBiZWZvcmUgbG9hZCBpcyB1bnNhZmU6XG4gICAqIHtAbGluayBDb21wb25lbnQudW5sb2FkfSBpcyBhIG5vLW9wIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgbm90IGxvYWRlZCwgc28gYW55IHRlYXJkb3duIHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCB3b3VsZFxuICAgKiBuZXZlciBydW4gaWYgdGhlIGNvbXBvbmVudCBpcyB1bmxvYWRlZCB3aXRob3V0IGZpcnN0IGJlaW5nIGxvYWRlZC5cbiAgICpcbiAgICogVGhlIHR3byBub3QtbG9hZGVkIGNhc2VzIGFyZSBkZWxpYmVyYXRlbHkgZGlzdGluZ3Vpc2hlZC4gQSBjb21wb25lbnQgdGhhdCB3YXMgTkVWRVIgbG9hZGVkIGlzIGEgZ2VudWluZVxuICAgKiBwcm9ncmFtbWluZyBlcnJvciwgc28gaXQgdGhyb3dzIGEgbG91ZCB7QGxpbmsgRXJyb3J9LiBBIGNvbXBvbmVudCB0aGF0IGhhcyBBTFJFQURZIGJlZW4gdW5sb2FkZWQgaXMgbm90IFx1MjAxNFxuICAgKiBpdCBpcyB0aGUgZXhwZWN0ZWQgb3V0Y29tZSBvZiB3b3JrIHRoYXQgb3V0bGl2ZWQgaXRzIGNvbXBvbmVudCAoZS5nLiBhbiBgYXN5bmNgIG1ldGhvZCBzdXNwZW5kZWQgb24gYW5cbiAgICogYGF3YWl0YCB3aGlsZSB0aGUgY29tcG9uZW50IHdhcyB1bmxvYWRlZCwgdGhlbiByZXN1bWVkKSBcdTIwMTQgc28gaXQgdGhyb3dzIGEge0BsaW5rIFNpbGVudEVycm9yfSwgd2hpY2hcbiAgICogYGhhbmRsZVNpbGVudEVycm9yYCBzdXBwcmVzc2VzLCBsZXR0aW5nIHN1Y2ggd29yayB1bndpbmQgcXVpZXRseSBpbnN0ZWFkIG9mIHJlcG9ydGluZyBhbiBhc3luYyBlcnJvci5cbiAgICpcbiAgICogQHRocm93cyBBbiB7QGxpbmsgRXJyb3J9IGlmIHRoZSBjb21wb25lbnQgd2FzIG5ldmVyIGxvYWRlZCwgb3IgYSB7QGxpbmsgU2lsZW50RXJyb3J9IGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4gdW5sb2FkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZW5zdXJlTG9hZGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTaWxlbnRFcnJvcignQ29tcG9uZW50IGlzIGFscmVhZHkgdW5sb2FkZWQnKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBpcyBub3QgbG9hZGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHNldHRsZXMgb25jZSBuZWl0aGVyIHRoaXMgY29tcG9uZW50IG5vciBhbnkge0BsaW5rIENvbXBvbmVudEV4fSBhbmNlc3RvciBoYXMgYSBsb2FkXG4gICAqIGluIGZsaWdodCwgb3IgYG51bGxgIHdoZW4gbm9uZSBvZiB0aGVtIGhhcyBvbmUgcmlnaHQgbm93LlxuICAgKlxuICAgKiB7QGxpbmsgZ2V0SW5GbGlnaHRMb2FkUHJvbWlzZX0gY292ZXJzIHRoaXMgY29tcG9uZW50J3MgT1dOIGxvYWQgb25seS4gQSBzaWJsaW5nIHRoaXMgY29tcG9uZW50IGRlcGVuZHMgb24gXHUyMDE0IG1vc3RcbiAgICogb2Z0ZW4gdGhlIG93bmluZyBwbHVnaW4ncyBzZXR0aW5ncyBjb21wb25lbnQsIHdoaWNoIHJlYWRzIGBkYXRhLmpzb25gIGFzeW5jaHJvbm91c2x5IFx1MjAxNCBpcyBvdXRzaWRlIGl0LCBidXQgaXQgaXNcbiAgICogaW5zaWRlIHRoZSBsb2FkIG9mIGEgc2hhcmVkIGFuY2VzdG9yLiBXYWl0aW5nIGZvciBldmVyeSBhbmNlc3RvciB0aGVyZWZvcmUgd2FpdHMgZm9yIHRoZSB3aG9sZSB0cmVlIHRoZSBjb21wb25lbnRcbiAgICogd2FzIGxvYWRlZCBhcyBwYXJ0IG9mOiB1bmRlciBgUGx1Z2luQmFzZWAgdGhlIGNoYWluIGVuZHMgYXQgdGhlIHBsdWdpbidzIHVuaXZlcnNhbCB3cmFwcGVyLCB3aG9zZSBsb2FkIGNvdmVycyB0aGVcbiAgICogZGVwZW5kZW5jeSBnYXRlLCB0aGUgZmVhdHVyZSBzdXJmYWNlIGFuZCBgb25sb2FkSW1wbGAuXG4gICAqXG4gICAqIFRoZSBjaGFpbiBpcyBmb2xsb3dlZCB0aHJvdWdoIHtAbGluayBDb21wb25lbnRFeH0gcGFyZW50cyBvbmx5LiBBIHBsYWluIHtAbGluayBDb21wb25lbnR9IGFueXdoZXJlIGJldHdlZW4gdGhpc1xuICAgKiBjb21wb25lbnQgYW5kIGFuIGFuY2VzdG9yIGVuZHMgaXQsIGJlY2F1c2UgYSBwbGFpbiBjb21wb25lbnQgcmVjb3JkcyBubyBwYXJlbnQgYW5kIGV4cG9zZXMgbm8gbG9hZCBwcm9taXNlLlxuICAgKlxuICAgKiBOZXZlciBhd2FpdCB0aGlzIGZyb20gaW5zaWRlIGEgbG9hZCBzdGVwIG9mIG9uZSBvZiB0aG9zZSBhbmNlc3RvcnM6IHRoZSBhbmNlc3RvcidzIGxvYWQgd291bGQgdGhlbiBiZSB3YWl0aW5nIGZvclxuICAgKiBpdHNlbGYuIEl0IGlzIG1lYW50IGZvciB3b3JrIHNjaGVkdWxlZCBPVVRTSURFIHRoZSBsb2FkLCBzdWNoIGFzIGEgbGF5b3V0LXJlYWR5IGhhbmRsZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBwcm9taXNlLCBvciBgbnVsbGAgaWYgbm90aGluZyBpbiB0aGUgYW5jZXN0cnkgaXMgbG9hZGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmZpbmRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKSA/IHRoaXMud2FpdEZvckFuY2VzdHJ5TG9hZCgpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb21wb25lbnQncyBpbi1mbGlnaHQgbG9hZCB7QGxpbmsgUHJvbWlzZX0gKGl0cyB7QGxpbmsgb25sb2FkQXN5bmN9IHBsdXMgY2hpbGRyZW4pLCBvciBgbnVsbGAgd2hlblxuICAgKiBub3RoaW5nIGlzIGxvYWRpbmcgXHUyMDE0IGVpdGhlciB0aGUgY29tcG9uZW50IGxvYWRlZCBmdWxseSBzeW5jaHJvbm91c2x5IG9yIGl0cyBhc3luYyBsb2FkIGhhcyBhbHJlYWR5IHNldHRsZWQuXG4gICAqXG4gICAqIExldHMgYSBjYWxsZXIgc2NoZWR1bGVkIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgc3RpbGwgbG9hZGluZyBhd2FpdCB0aGUgYXN5bmMgbG9hZCB0YWlsIGJlZm9yZSBhY3RpbmcsIGluc3RlYWQgb2ZcbiAgICogcmFjaW5nIGl0OiB7QGxpbmsgQ29tcG9uZW50Lm9ubG9hZH0gaGFzIHJ1biAoc28gYF9sb2FkZWRgIGlzIHNldCkgYnV0IHtAbGluayBvbmxvYWRBc3luY30gbWF5IG5vdCBoYXZlIGZpbmlzaGVkLlxuICAgKlxuICAgKiBJdCBjb3ZlcnMgdGhpcyBjb21wb25lbnQncyBPV04gbG9hZCBvbmx5LiBBIGNhbGxlciB0aGF0IGFsc28gZGVwZW5kcyBvbiBhIHNpYmxpbmcncyBzdGF0ZSBcdTIwMTQgYSBsYXlvdXQtcmVhZHkgaGFuZGxlclxuICAgKiByZWFkaW5nIHNldHRpbmdzIGlzIHRoZSBjb21tb24gb25lIFx1MjAxNCB3YW50cyB7QGxpbmsgZ2V0SW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlfSwgd2hpY2ggYExheW91dFJlYWR5Q29tcG9uZW50YFxuICAgKiB1c2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaW4tZmxpZ2h0IGxvYWQgcHJvbWlzZSwgb3IgYG51bGxgIGlmIG5vIGxvYWQgaXMgaW4gZmxpZ2h0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEluRmxpZ2h0TG9hZFByb21pc2UoKTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgbW9zdCByZWNlbnQgbG9hZCByZWNvcmRlZCBhbnkgZmFpbHVyZS5cbiAgICpcbiAgICogUmVmbGVjdHMgdGhlIG91dGNvbWUgb2YgdGhlIGxhc3Qge0BsaW5rIGxvYWR9IC8ge0BsaW5rIGxvYWRXaXRoUHJvbWlzZXN9OiBgdHJ1ZWAgd2hlbiB7QGxpbmsgb25sb2FkQXN5bmN9IG9yIGFueVxuICAgKiBjaGlsZCdzIGxvYWQgdGhyZXcgKHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkpLiBVbmxpa2Uge0BsaW5rIGxvYWRXaXRoUHJvbWlzZXN9LCByZWFkaW5nIHRoaXMgZG9lcyBOT1RcbiAgICogcmUtcmFpc2UgdGhlIGNvbGxlY3RlZCBlcnJvcnMgXHUyMDE0IGl0IGxldHMgYSBieXN0YW5kZXIgKGUuZy4gYSBsYXlvdXQtcmVhZHkgaGFuZGxlciBhd2FpdGluZyB0aGUgaW4tZmxpZ2h0IGxvYWQpIHRlbGxcbiAgICogd2hldGhlciB0aGUgbG9hZCBzdWNjZWVkZWQgd2l0aG91dCBhZG9wdGluZyBhIGZhaWx1cmUgdGhhdCB0aGUgbG9hZCdzIG93bmVyIGlzIGFscmVhZHkgcmVzcG9uc2libGUgZm9yLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGxhc3QgbG9hZCByZWNvcmRlZCBhdCBsZWFzdCBvbmUgZXJyb3IsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGhhc0xvYWRFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5sb2FkZWQsIGFzIG9wcG9zZWQgdG8gc2ltcGx5IG5vdCBoYXZpbmcgYmVlbiBsb2FkZWQgeWV0LlxuICAgKlxuICAgKiBCb3RoIHN0YXRlcyBsZWF2ZSBgX2xvYWRlZGAgZmFsc2UsIGJ1dCB0aGV5IG1lYW4gb3Bwb3NpdGUgdGhpbmdzOiBhIGNvbXBvbmVudCB0aGF0IHdhcyBuZXZlciBsb2FkZWQgaXMgc3RpbGxcbiAgICogYWhlYWQgb2YgaXRzIGxpZmVjeWNsZSAocXVldWVpbmcgY2hpbGRyZW4gYmVmb3JlIGxvYWQgaXMgbGVnaXRpbWF0ZSksIHdoaWxlIGFuIHVubG9hZGVkIG9uZSBpcyBiZWhpbmQgaXQgYW5kXG4gICAqIG11c3Qgbm90IGJlIHVzZWQgYW55IGZ1cnRoZXIuIFRoZSBkaXN0aW5jdGlvbiBpcyB0cmFja2VkIGJ5IGEgZmxhZyBzZXQgaW4ge0BsaW5rIGxvYWR9LCBOT1QgYnkgYW5cbiAgICoge0BsaW5rIENvbXBvbmVudC5vbnVubG9hZH0gb3ZlcnJpZGUsIGJlY2F1c2Ugc3ViY2xhc3NlcyBvdmVycmlkZSBgb251bmxvYWRgIGFuZCBtYXkgbm90IGNhbGwgYHN1cGVyYC5cbiAgICpcbiAgICogVXNlIGl0IGluIGEgbG9uZy1ydW5uaW5nIGBhc3luY2AgbWV0aG9kIHRvIGFiYW5kb24gd29yayB3aG9zZSBjb21wb25lbnQgd2FzIHVubG9hZGVkIG1pZC1mbGlnaHQsIHdoZW5cbiAgICogdW53aW5kaW5nIHZpYSB0aGUge0BsaW5rIFNpbGVudEVycm9yfSB0aHJvd24gYnkge0BsaW5rIGVuc3VyZUxvYWRlZH0gLyB7QGxpbmsgYWRkQ2hpbGR9IGlzIG5vdCBkZXNpcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNvbXBvbmVudCB3YXMgbG9hZGVkIGF0IHNvbWUgcG9pbnQgYW5kIGlzIGN1cnJlbnRseSB1bmxvYWRlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNVbmxvYWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNCZWVuTG9hZGVkICYmICF0aGlzLl9sb2FkZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2VxdWVuY2VzIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHN0ZXAgaW50byB0aGUgbG9hZCBwcm9taXNlLlxuICAgKlxuICAgKiBUaGUgc3RlcCBpcyBwcmVzdW1lZCB0byBoYXZlIHN0YXJ0ZWQgc3luY2hyb25vdXNseSAoc28gYW55IGBfbG9hZGVkYCBmbGFnIGl0IHNldHMgaXMgYWxyZWFkeSB2aXNpYmxlKTsgb25seSB0aGVcbiAgICogYXdhaXRpbmcgb2YgaXRzIGFzeW5jIHRhaWwgaXMgc2VxdWVuY2VkIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZSAtIFRoZSByZXN1bHQgb2YgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgc3RlcC5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kRWFnZXJMb2FkU3RlcChsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBjYXB0dXJlZCA9IHRoaXMuY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGUpO1xuICAgIGlmICghY2FwdHVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgdGhpcy5zZXRMb2FkUHJvbWlzZShwcmV2aW91cyA/IHByZXZpb3VzLnRoZW4oKCkgPT4gY2FwdHVyZWQpIDogY2FwdHVyZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcXVlbmNlcyBhIGRlZmVycmVkIGxvYWQgc3RlcCBpbnRvIHRoZSBsb2FkIHByb21pc2UsIHJ1bm5pbmcgaXQgb25seSBhZnRlciBwcmV2aW91c2x5LWFwcGVuZGVkIHN0ZXBzIHNldHRsZS5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRnVuY3Rpb24gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kU2VxdWVudGlhbExvYWRTdGVwKGxvYWRQcm9taXNhYmxlRnVuY3Rpb246ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIGlmIChwcmV2aW91cykge1xuICAgICAgdGhpcy5zZXRMb2FkUHJvbWlzZShwcmV2aW91cy50aGVuKCgpID0+IHRoaXMucnVuQW5kQ2FwdHVyZShsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNhcHR1cmVkID0gdGhpcy5jYXB0dXJlU3luYyhsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKTtcbiAgICBpZiAoY2FwdHVyZWQpIHtcbiAgICAgIHRoaXMuc2V0TG9hZFByb21pc2UoY2FwdHVyZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIGEgbG9hZCBmYWlsdXJlLlxuICAgKlxuICAgKiBBIGZhaWx1cmUgcmFpc2VkIGJ5IGEgY2hpbGQge0BsaW5rIENvbXBvbmVudEV4fSBpcyBpdHNlbGYgYW4ge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfTsgaXQgaXMgcmVjb3JkZWQgYXMtaXMgc28gdGhlXG4gICAqIGdyb3VwaW5nIGJ5IGNoaWxkIGNvbXBvbmVudCBpcyBwcmVzZXJ2ZWQgKG93biBmYWlsdXJlcyBzdGF5IGZsYXQsIGNoaWxkLXN1YnRyZWUgZmFpbHVyZXMgc3RheSBuZXN0ZWQpLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3IgLSBUaGUgdGhyb3duIHZhbHVlIHRvIHJlY29yZC5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZUVycm9yKGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRXJyb3JzLnB1c2goRXJyb3JXcmFwcGVyLmNyZWF0ZShlcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBzIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHJlc3VsdCBzbyBpdCBuZXZlciByZWplY3RzOiBhbnkgZmFpbHVyZSBpcyByZWNvcmRlZCBpbnRvIGBsb2FkRXJyb3JzYC5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlIC0gVGhlIGxvYWQgcmVzdWx0IHRvIG9ic2VydmUuXG4gICAqIEByZXR1cm5zIEEgbmV2ZXItcmVqZWN0aW5nIHtAbGluayBQcm9taXNlfSwgb3IgYG51bGxgIGlmIHRoZSByZXN1bHQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbG9hZFByb21pc2FibGUgPT09IG51bGwgfHwgbG9hZFByb21pc2FibGUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBudWxsXG4gICAgICA6IFByb21pc2UucmVzb2x2ZShsb2FkUHJvbWlzYWJsZSkudGhlbihub29wKS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGxvYWQgc3RlcCBzeW5jaHJvbm91c2x5LCByZWNvcmRpbmcgYSBzeW5jaHJvbm91cyB0aHJvdywgYW5kIHdyYXBzIGFueSBhc3luYyB0YWlsIHNvIGl0IG5ldmVyIHJlamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqIEByZXR1cm5zIEEgbmV2ZXItcmVqZWN0aW5nIHtAbGluayBQcm9taXNlfSwgb3IgYG51bGxgIGlmIHRoZSBzdGVwIGlzIGZ1bGx5IHN5bmNocm9ub3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlU3luYyhsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+O1xuICAgIHRyeSB7XG4gICAgICBsb2FkUHJvbWlzYWJsZSA9IGxvYWRQcm9taXNhYmxlRnVuY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0TG9hZFByb21pc2FibGUoY29tcG9uZW50OiBDb21wb25lbnQpOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNoaWxkcmVuU2V0Lmhhcyhjb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1jb25mdXNpbmctdm9pZC1leHByZXNzaW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb24gLS0gSXQgY2FuIGJlIGBQcm9taXNlPHZvaWQ+YCBpbiBydW50aW1lLiBXYW50IGV4cGxpY2l0bHkgY2FzdCB0byBzaG93IHdlIGtub3cgaXQgbWF5IGJlIHByb21pc2UsIGRlc3BpdGUgdGhlIGRlY2xhcmVkIHR5cGUgYHZvaWRgLlxuICAgIHJldHVybiBjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRFeCA/IGNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCkgOiBjb21wb25lbnQubG9hZCgpIGFzIFByb21pc2FibGU8dm9pZD47XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlID8/IHRoaXMucGFyZW50Q29tcG9uZW50Py5maW5kSW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCkgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRMb2FkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRXJyb3JzID0gW107XG4gICAgdGhpcy5sb2FkUHJvbWlzZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGRlZmVycmVkIGxvYWQgc3RlcCwgcmVjb3JkaW5nIGEgc3luY2hyb25vdXMgdGhyb3cgb3IgYW4gYXN5bmMgcmVqZWN0aW9uIHdpdGhvdXQgZXZlciByZS10aHJvd2luZy5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRnVuY3Rpb24gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcnVuQW5kQ2FwdHVyZShsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCAobG9hZFByb21pc2FibGVGdW5jdGlvbigpID8/IHVuZGVmaW5lZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRQcm9taXNlKGxvYWRQcm9taXNlOiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgbG9hZFByb21pc2VXaXRoUmVzZXQ6IFByb21pc2U8dm9pZD4gPSBsb2FkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxvYWRQcm9taXNlID09PSBsb2FkUHJvbWlzZVdpdGhSZXNldCkge1xuICAgICAgICB0aGlzLmxvYWRQcm9taXNlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmxvYWRQcm9taXNlID0gbG9hZFByb21pc2VXaXRoUmVzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQXdhaXRzIGluLWZsaWdodCBsb2FkcyBpbiB0aGUgYW5jZXN0cnkgdW50aWwgbm9uZSBpcyBsZWZ0LlxuICAgKlxuICAgKiBMb29wZWQgcmF0aGVyIHRoYW4gYXdhaXRlZCBvbmNlLCBiZWNhdXNlIGFuIGFuY2VzdG9yJ3MgbG9hZCBjYW4gZ3JvdyB3aGlsZSBpdCBpcyBiZWluZyBhd2FpdGVkOiBhIGNoaWxkIGFkZGVkXG4gICAqIHRvIGFuIGFscmVhZHktbG9hZGVkIGNvbXBvbmVudCBhcHBlbmRzIGl0cyBhc3luYyB0YWlsIHRvIHRoYXQgY29tcG9uZW50J3MgbG9hZCBwcm9taXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQW5jZXN0cnlMb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBsb2FkUHJvbWlzZSA9IHRoaXMuZmluZEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpO1xuICAgIHdoaWxlIChsb2FkUHJvbWlzZSkge1xuICAgICAgYXdhaXQgbG9hZFByb21pc2U7XG4gICAgICBsb2FkUHJvbWlzZSA9IHRoaXMuZmluZEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLDZCQUFxQztBQUNyQyxtQkFBeUI7QUFDekIsd0JBQXdCO0FBQ3hCLG1CQUdPO0FBQ1Asc0JBR087QUFDUCxzQkFBMEI7QUFNbkIsTUFBTSxvQkFBb0IsMEJBQWdDO0FBQUEsRUFDOUMsY0FBYyxvQkFBSSxJQUFlO0FBQUEsRUFDMUMsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBc0IsQ0FBQztBQUFBLEVBQ3ZCLGNBQW9DO0FBQUEsRUFDcEMsa0JBQXNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFvQjlCLFNBQXVDLFdBQW1DO0FBQ3hGLFFBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsWUFBTSxJQUFJ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