@mnaoumov/obsidian-lib 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/README.md +9 -1
  2. package/dist/lib/cjs/__merged.cjs +40 -64
  3. package/dist/lib/cjs/active-file-provider.cjs +40 -64
  4. package/dist/lib/cjs/app.cjs +40 -64
  5. package/dist/lib/cjs/async-with-notice.cjs +40 -64
  6. package/dist/lib/cjs/attachment-path.cjs +40 -64
  7. package/dist/lib/cjs/attachment-unit-folder.cjs +40 -64
  8. package/dist/lib/cjs/backlink-index.cjs +41 -65
  9. package/dist/lib/cjs/backlink.cjs +40 -64
  10. package/dist/lib/cjs/bases-view-registrar.cjs +40 -64
  11. package/dist/lib/cjs/callout.cjs +40 -64
  12. package/dist/lib/cjs/canvas.cjs +40 -64
  13. package/dist/lib/cjs/case-insensitive-file-index.cjs +40 -64
  14. package/dist/lib/cjs/code-block-markdown-information.cjs +40 -64
  15. package/dist/lib/cjs/code-block-reg-exp.cjs +40 -64
  16. package/dist/lib/cjs/codemirror/index.cjs +40 -64
  17. package/dist/lib/cjs/codemirror/state-field-spec.cjs +40 -64
  18. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +40 -64
  19. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +40 -64
  20. package/dist/lib/cjs/command-handlers/command-handler.cjs +40 -64
  21. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +40 -64
  22. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +40 -64
  23. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +40 -64
  24. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +40 -64
  25. package/dist/lib/cjs/command-handlers/index.cjs +40 -64
  26. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +40 -64
  27. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +40 -64
  28. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +40 -64
  29. package/dist/lib/cjs/command-registrar.cjs +40 -64
  30. package/dist/lib/cjs/community-plugins.cjs +40 -64
  31. package/dist/lib/cjs/components/abort-signal-component.cjs +40 -64
  32. package/dist/lib/cjs/components/all-windows-event-component.cjs +40 -64
  33. package/dist/lib/cjs/components/async-error-handler-component.cjs +40 -64
  34. package/dist/lib/cjs/components/async-events-component.cjs +40 -64
  35. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +40 -64
  36. package/dist/lib/cjs/components/component-ex.cjs +41 -65
  37. package/dist/lib/cjs/components/console-debug-component.cjs +40 -64
  38. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +40 -64
  39. package/dist/lib/cjs/components/disposable-component.cjs +40 -64
  40. package/dist/lib/cjs/components/embed-extensions-component.cjs +40 -64
  41. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +40 -64
  42. package/dist/lib/cjs/components/index.cjs +40 -64
  43. package/dist/lib/cjs/components/layout-ready-component.cjs +40 -64
  44. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +40 -64
  45. package/dist/lib/cjs/components/monkey-around-component.cjs +40 -64
  46. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +40 -64
  47. package/dist/lib/cjs/components/plugin-context-component.cjs +40 -64
  48. package/dist/lib/cjs/components/plugin-gate-component.cjs +41 -65
  49. package/dist/lib/cjs/components/plugin-notice-component.cjs +40 -64
  50. package/dist/lib/cjs/components/plugin-settings-component.cjs +41 -65
  51. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +40 -64
  52. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +40 -64
  53. package/dist/lib/cjs/components/pointer-position-component.cjs +40 -64
  54. package/dist/lib/cjs/components/registry-component.cjs +40 -64
  55. package/dist/lib/cjs/components/release-notes-component.cjs +40 -64
  56. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +40 -64
  57. package/dist/lib/cjs/components/rmdir-guard-component.cjs +40 -64
  58. package/dist/lib/cjs/components/settings-migration-component.cjs +40 -64
  59. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +40 -64
  60. package/dist/lib/cjs/components/templates-language-component.cjs +40 -64
  61. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +40 -64
  62. package/dist/lib/cjs/constructors/index.cjs +40 -64
  63. package/dist/lib/cjs/css-class.cjs +40 -64
  64. package/dist/lib/cjs/data-handler.cjs +40 -64
  65. package/dist/lib/cjs/dataview-link.cjs +40 -64
  66. package/dist/lib/cjs/dataview.cjs +40 -64
  67. package/dist/lib/cjs/debug.cjs +40 -64
  68. package/dist/lib/cjs/demo-vault-helper-settings.cjs +40 -64
  69. package/dist/lib/cjs/demo-vault-helper.cjs +40 -64
  70. package/dist/lib/cjs/demo-vault-naming.cjs +40 -64
  71. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +40 -64
  72. package/dist/lib/cjs/desktop-trusted-input.cjs +40 -64
  73. package/dist/lib/cjs/editor-extension-registrar.cjs +40 -64
  74. package/dist/lib/cjs/editor-suggest-registrar.cjs +40 -64
  75. package/dist/lib/cjs/editor.cjs +40 -64
  76. package/dist/lib/cjs/events.cjs +40 -64
  77. package/dist/lib/cjs/extensions-registrar.cjs +40 -64
  78. package/dist/lib/cjs/file-change.cjs +40 -64
  79. package/dist/lib/cjs/file-explorer.cjs +40 -64
  80. package/dist/lib/cjs/file-manager.cjs +40 -64
  81. package/dist/lib/cjs/file-system.cjs +40 -64
  82. package/dist/lib/cjs/folder-note.cjs +40 -64
  83. package/dist/lib/cjs/frontmatter-formatting.cjs +41 -65
  84. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +40 -64
  85. package/dist/lib/cjs/frontmatter.cjs +40 -64
  86. package/dist/lib/cjs/generated-during-build.cjs +41 -65
  87. package/dist/lib/cjs/generated-during-build.d.cts +8 -2
  88. package/dist/lib/cjs/hover-link-source-registrar.cjs +40 -64
  89. package/dist/lib/cjs/html-element.cjs +40 -64
  90. package/dist/lib/cjs/i18n/custom-type-options.cjs +40 -64
  91. package/dist/lib/cjs/i18n/default-translations.cjs +40 -64
  92. package/dist/lib/cjs/i18n/i18n.cjs +40 -64
  93. package/dist/lib/cjs/i18n/index.cjs +40 -64
  94. package/dist/lib/cjs/i18n/locales/en.cjs +40 -64
  95. package/dist/lib/cjs/i18n/locales/index.cjs +40 -64
  96. package/dist/lib/cjs/i18n/locales/translations-map.cjs +40 -64
  97. package/dist/lib/cjs/index.cjs +40 -64
  98. package/dist/lib/cjs/is-in-obsidian.cjs +40 -64
  99. package/dist/lib/cjs/library-styles.cjs +40 -64
  100. package/dist/lib/cjs/library.cjs +40 -64
  101. package/dist/lib/cjs/link-name.cjs +40 -64
  102. package/dist/lib/cjs/link-update-progress.cjs +40 -64
  103. package/dist/lib/cjs/link.cjs +40 -64
  104. package/dist/lib/cjs/logger.cjs +40 -64
  105. package/dist/lib/cjs/loop.cjs +40 -64
  106. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +40 -64
  107. package/dist/lib/cjs/markdown-code-block-processor.cjs +40 -64
  108. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +40 -64
  109. package/dist/lib/cjs/markdown-view.cjs +40 -64
  110. package/dist/lib/cjs/markdown.cjs +40 -64
  111. package/dist/lib/cjs/menu-event-registrar.cjs +40 -64
  112. package/dist/lib/cjs/metadata-cache.cjs +40 -64
  113. package/dist/lib/cjs/mobile-trusted-input.cjs +40 -64
  114. package/dist/lib/cjs/modals/alert.cjs +40 -64
  115. package/dist/lib/cjs/modals/confirm.cjs +40 -64
  116. package/dist/lib/cjs/modals/index.cjs +40 -64
  117. package/dist/lib/cjs/modals/minimizable-modal.cjs +40 -64
  118. package/dist/lib/cjs/modals/modal-command-builder.cjs +40 -64
  119. package/dist/lib/cjs/modals/modal.cjs +40 -64
  120. package/dist/lib/cjs/modals/prompt.cjs +40 -64
  121. package/dist/lib/cjs/modals/select-item.cjs +40 -64
  122. package/dist/lib/cjs/modals/select-option.cjs +40 -64
  123. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +40 -64
  124. package/dist/lib/cjs/note-priority.cjs +41 -65
  125. package/dist/lib/cjs/notebook-navigator.cjs +40 -64
  126. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +40 -64
  127. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +40 -64
  128. package/dist/lib/cjs/obsidian-settings.cjs +40 -64
  129. package/dist/lib/cjs/parse-link.cjs +40 -64
  130. package/dist/lib/cjs/path-settings.cjs +40 -64
  131. package/dist/lib/cjs/pdf.cjs +40 -64
  132. package/dist/lib/cjs/plugin/index.cjs +40 -64
  133. package/dist/lib/cjs/plugin/plugin-api.cjs +40 -64
  134. package/dist/lib/cjs/plugin/plugin-context.cjs +40 -64
  135. package/dist/lib/cjs/plugin/plugin-event-source.cjs +40 -64
  136. package/dist/lib/cjs/plugin/plugin-install-state.cjs +40 -64
  137. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +40 -64
  138. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +41 -65
  139. package/dist/lib/cjs/plugin/plugin.cjs +41 -65
  140. package/dist/lib/cjs/plugin/settings-migration-api.cjs +40 -64
  141. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +40 -64
  142. package/dist/lib/cjs/popovers/field-popover.cjs +40 -64
  143. package/dist/lib/cjs/popovers/index.cjs +40 -64
  144. package/dist/lib/cjs/popovers/popover-anchor.cjs +40 -64
  145. package/dist/lib/cjs/popovers/popover.cjs +40 -64
  146. package/dist/lib/cjs/property-entry.cjs +40 -64
  147. package/dist/lib/cjs/queue.cjs +40 -64
  148. package/dist/lib/cjs/react/app-context.cjs +40 -64
  149. package/dist/lib/cjs/react/index.cjs +40 -64
  150. package/dist/lib/cjs/reference.cjs +40 -64
  151. package/dist/lib/cjs/resource-lock.cjs +40 -64
  152. package/dist/lib/cjs/resource-url.cjs +40 -64
  153. package/dist/lib/cjs/ribbon-icon-registrar.cjs +40 -64
  154. package/dist/lib/cjs/setting-components/checkbox-component.cjs +40 -64
  155. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +40 -64
  156. package/dist/lib/cjs/setting-components/date-component.cjs +40 -64
  157. package/dist/lib/cjs/setting-components/date-time-component.cjs +40 -64
  158. package/dist/lib/cjs/setting-components/email-component.cjs +40 -64
  159. package/dist/lib/cjs/setting-components/file-component.cjs +40 -64
  160. package/dist/lib/cjs/setting-components/index.cjs +40 -64
  161. package/dist/lib/cjs/setting-components/month-component.cjs +40 -64
  162. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +41 -65
  163. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +40 -64
  164. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +40 -64
  165. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +40 -64
  166. package/dist/lib/cjs/setting-components/number-component.cjs +40 -64
  167. package/dist/lib/cjs/setting-components/password-component.cjs +40 -64
  168. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +40 -64
  169. package/dist/lib/cjs/setting-components/telephone-component.cjs +40 -64
  170. package/dist/lib/cjs/setting-components/text-based-component.cjs +40 -64
  171. package/dist/lib/cjs/setting-components/time-component.cjs +40 -64
  172. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +40 -64
  173. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +40 -64
  174. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +40 -64
  175. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +40 -64
  176. package/dist/lib/cjs/setting-components/typed-text-component.cjs +41 -65
  177. package/dist/lib/cjs/setting-components/url-component.cjs +40 -64
  178. package/dist/lib/cjs/setting-components/validator-component.cjs +41 -65
  179. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +40 -64
  180. package/dist/lib/cjs/setting-components/week-component.cjs +40 -64
  181. package/dist/lib/cjs/setting-ex.cjs +40 -64
  182. package/dist/lib/cjs/setting-group-ex.cjs +40 -64
  183. package/dist/lib/cjs/status-bar-item-registrar.cjs +40 -64
  184. package/dist/lib/cjs/templater.cjs +40 -64
  185. package/dist/lib/cjs/transformers/duration-transformer.cjs +40 -64
  186. package/dist/lib/cjs/transformers/index.cjs +40 -64
  187. package/dist/lib/cjs/trusted-input.cjs +40 -64
  188. package/dist/lib/cjs/validation.cjs +40 -64
  189. package/dist/lib/cjs/vault-delete.cjs +40 -64
  190. package/dist/lib/cjs/vault-transaction.cjs +40 -64
  191. package/dist/lib/cjs/vault.cjs +41 -65
  192. package/dist/lib/cjs/view-registrar.cjs +40 -64
  193. package/dist/lib/cjs/workspace.cjs +40 -64
  194. package/dist/lib/esm/__merged.mjs +6 -14
  195. package/dist/lib/esm/active-file-provider.mjs +6 -14
  196. package/dist/lib/esm/app.mjs +6 -14
  197. package/dist/lib/esm/async-with-notice.mjs +6 -14
  198. package/dist/lib/esm/attachment-path.mjs +6 -14
  199. package/dist/lib/esm/attachment-unit-folder.mjs +6 -14
  200. package/dist/lib/esm/backlink-index.mjs +6 -14
  201. package/dist/lib/esm/backlink.mjs +6 -14
  202. package/dist/lib/esm/bases-view-registrar.mjs +6 -14
  203. package/dist/lib/esm/callout.mjs +6 -14
  204. package/dist/lib/esm/canvas.mjs +6 -14
  205. package/dist/lib/esm/case-insensitive-file-index.mjs +6 -14
  206. package/dist/lib/esm/code-block-markdown-information.mjs +5 -13
  207. package/dist/lib/esm/code-block-reg-exp.mjs +6 -14
  208. package/dist/lib/esm/codemirror/index.mjs +6 -14
  209. package/dist/lib/esm/codemirror/state-field-spec.mjs +5 -13
  210. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +6 -14
  211. package/dist/lib/esm/command-handlers/command-handler-component.mjs +6 -14
  212. package/dist/lib/esm/command-handlers/command-handler.mjs +6 -14
  213. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +6 -14
  214. package/dist/lib/esm/command-handlers/file-command-handler.mjs +6 -14
  215. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +6 -14
  216. package/dist/lib/esm/command-handlers/global-command-handler.mjs +6 -14
  217. package/dist/lib/esm/command-handlers/index.mjs +6 -14
  218. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +6 -14
  219. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -14
  220. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +6 -14
  221. package/dist/lib/esm/command-registrar.mjs +6 -14
  222. package/dist/lib/esm/community-plugins.mjs +6 -14
  223. package/dist/lib/esm/components/abort-signal-component.mjs +6 -14
  224. package/dist/lib/esm/components/all-windows-event-component.mjs +6 -14
  225. package/dist/lib/esm/components/async-error-handler-component.mjs +6 -14
  226. package/dist/lib/esm/components/async-events-component.mjs +6 -14
  227. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +6 -14
  228. package/dist/lib/esm/components/component-ex.mjs +6 -14
  229. package/dist/lib/esm/components/console-debug-component.mjs +6 -14
  230. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +6 -14
  231. package/dist/lib/esm/components/disposable-component.mjs +6 -14
  232. package/dist/lib/esm/components/embed-extensions-component.mjs +6 -14
  233. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +6 -14
  234. package/dist/lib/esm/components/index.mjs +6 -14
  235. package/dist/lib/esm/components/layout-ready-component.mjs +6 -14
  236. package/dist/lib/esm/components/menu-event-registrar-component.mjs +6 -14
  237. package/dist/lib/esm/components/monkey-around-component.mjs +6 -14
  238. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +6 -14
  239. package/dist/lib/esm/components/plugin-context-component.mjs +6 -14
  240. package/dist/lib/esm/components/plugin-gate-component.mjs +6 -14
  241. package/dist/lib/esm/components/plugin-notice-component.mjs +6 -14
  242. package/dist/lib/esm/components/plugin-settings-component.mjs +6 -14
  243. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +6 -14
  244. package/dist/lib/esm/components/plugin-suggestion-component.mjs +6 -14
  245. package/dist/lib/esm/components/pointer-position-component.mjs +6 -14
  246. package/dist/lib/esm/components/registry-component.mjs +6 -14
  247. package/dist/lib/esm/components/release-notes-component.mjs +6 -14
  248. package/dist/lib/esm/components/rename-delete-handler-component.mjs +6 -14
  249. package/dist/lib/esm/components/rmdir-guard-component.mjs +6 -14
  250. package/dist/lib/esm/components/settings-migration-component.mjs +6 -14
  251. package/dist/lib/esm/components/syntax-highlighting-component.mjs +6 -14
  252. package/dist/lib/esm/components/templates-language-component.mjs +6 -14
  253. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +6 -14
  254. package/dist/lib/esm/constructors/index.mjs +6 -14
  255. package/dist/lib/esm/css-class.mjs +6 -14
  256. package/dist/lib/esm/data-handler.mjs +6 -14
  257. package/dist/lib/esm/dataview-link.mjs +6 -14
  258. package/dist/lib/esm/dataview.mjs +6 -14
  259. package/dist/lib/esm/debug.mjs +6 -14
  260. package/dist/lib/esm/demo-vault-helper-settings.mjs +5 -13
  261. package/dist/lib/esm/demo-vault-helper.mjs +6 -14
  262. package/dist/lib/esm/demo-vault-naming.mjs +6 -14
  263. package/dist/lib/esm/desktop-demo-vault-opener.mjs +6 -14
  264. package/dist/lib/esm/desktop-trusted-input.mjs +6 -14
  265. package/dist/lib/esm/editor-extension-registrar.mjs +6 -14
  266. package/dist/lib/esm/editor-suggest-registrar.mjs +6 -14
  267. package/dist/lib/esm/editor.mjs +6 -14
  268. package/dist/lib/esm/events.mjs +6 -14
  269. package/dist/lib/esm/extensions-registrar.mjs +6 -14
  270. package/dist/lib/esm/file-change.mjs +6 -14
  271. package/dist/lib/esm/file-explorer.mjs +6 -14
  272. package/dist/lib/esm/file-manager.mjs +6 -14
  273. package/dist/lib/esm/file-system.mjs +6 -14
  274. package/dist/lib/esm/folder-note.mjs +6 -14
  275. package/dist/lib/esm/frontmatter-formatting.mjs +6 -14
  276. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +6 -14
  277. package/dist/lib/esm/frontmatter.mjs +6 -14
  278. package/dist/lib/esm/generated-during-build.d.mts +8 -2
  279. package/dist/lib/esm/generated-during-build.mjs +7 -15
  280. package/dist/lib/esm/hover-link-source-registrar.mjs +6 -14
  281. package/dist/lib/esm/html-element.mjs +6 -14
  282. package/dist/lib/esm/i18n/custom-type-options.mjs +6 -14
  283. package/dist/lib/esm/i18n/default-translations.mjs +6 -14
  284. package/dist/lib/esm/i18n/i18n.mjs +6 -14
  285. package/dist/lib/esm/i18n/index.mjs +6 -14
  286. package/dist/lib/esm/i18n/locales/en.mjs +6 -14
  287. package/dist/lib/esm/i18n/locales/index.mjs +6 -14
  288. package/dist/lib/esm/i18n/locales/translations-map.mjs +6 -14
  289. package/dist/lib/esm/index.mjs +6 -14
  290. package/dist/lib/esm/is-in-obsidian.mjs +6 -14
  291. package/dist/lib/esm/library-styles.mjs +6 -14
  292. package/dist/lib/esm/library.mjs +6 -14
  293. package/dist/lib/esm/link-name.mjs +6 -14
  294. package/dist/lib/esm/link-update-progress.mjs +5 -13
  295. package/dist/lib/esm/link.mjs +6 -14
  296. package/dist/lib/esm/logger.mjs +6 -14
  297. package/dist/lib/esm/loop.mjs +6 -14
  298. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +6 -14
  299. package/dist/lib/esm/markdown-code-block-processor.mjs +6 -14
  300. package/dist/lib/esm/markdown-post-processor-registrar.mjs +6 -14
  301. package/dist/lib/esm/markdown-view.mjs +6 -14
  302. package/dist/lib/esm/markdown.mjs +6 -14
  303. package/dist/lib/esm/menu-event-registrar.mjs +5 -13
  304. package/dist/lib/esm/metadata-cache.mjs +6 -14
  305. package/dist/lib/esm/mobile-trusted-input.mjs +6 -14
  306. package/dist/lib/esm/modals/alert.mjs +6 -14
  307. package/dist/lib/esm/modals/confirm.mjs +6 -14
  308. package/dist/lib/esm/modals/index.mjs +6 -14
  309. package/dist/lib/esm/modals/minimizable-modal.mjs +6 -14
  310. package/dist/lib/esm/modals/modal-command-builder.mjs +6 -14
  311. package/dist/lib/esm/modals/modal.mjs +6 -14
  312. package/dist/lib/esm/modals/prompt.mjs +6 -14
  313. package/dist/lib/esm/modals/select-item.mjs +6 -14
  314. package/dist/lib/esm/modals/select-option.mjs +6 -14
  315. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +6 -14
  316. package/dist/lib/esm/note-priority.mjs +6 -14
  317. package/dist/lib/esm/notebook-navigator.mjs +6 -14
  318. package/dist/lib/esm/obsidian-dev-utils-state.mjs +6 -14
  319. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +6 -14
  320. package/dist/lib/esm/obsidian-settings.mjs +6 -14
  321. package/dist/lib/esm/parse-link.mjs +6 -14
  322. package/dist/lib/esm/path-settings.mjs +6 -14
  323. package/dist/lib/esm/pdf.mjs +6 -14
  324. package/dist/lib/esm/plugin/index.mjs +6 -14
  325. package/dist/lib/esm/plugin/plugin-api.mjs +6 -14
  326. package/dist/lib/esm/plugin/plugin-context.mjs +6 -14
  327. package/dist/lib/esm/plugin/plugin-event-source.mjs +6 -14
  328. package/dist/lib/esm/plugin/plugin-install-state.mjs +6 -14
  329. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +6 -14
  330. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +6 -14
  331. package/dist/lib/esm/plugin/plugin.mjs +6 -14
  332. package/dist/lib/esm/plugin/settings-migration-api.mjs +5 -13
  333. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +6 -14
  334. package/dist/lib/esm/popovers/field-popover.mjs +6 -14
  335. package/dist/lib/esm/popovers/index.mjs +6 -14
  336. package/dist/lib/esm/popovers/popover-anchor.mjs +6 -14
  337. package/dist/lib/esm/popovers/popover.mjs +6 -14
  338. package/dist/lib/esm/property-entry.mjs +6 -14
  339. package/dist/lib/esm/queue.mjs +6 -14
  340. package/dist/lib/esm/react/app-context.mjs +6 -14
  341. package/dist/lib/esm/react/index.mjs +6 -14
  342. package/dist/lib/esm/reference.mjs +6 -14
  343. package/dist/lib/esm/resource-lock.mjs +6 -14
  344. package/dist/lib/esm/resource-url.mjs +6 -14
  345. package/dist/lib/esm/ribbon-icon-registrar.mjs +6 -14
  346. package/dist/lib/esm/setting-components/checkbox-component.mjs +6 -14
  347. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +6 -14
  348. package/dist/lib/esm/setting-components/date-component.mjs +6 -14
  349. package/dist/lib/esm/setting-components/date-time-component.mjs +6 -14
  350. package/dist/lib/esm/setting-components/email-component.mjs +6 -14
  351. package/dist/lib/esm/setting-components/file-component.mjs +6 -14
  352. package/dist/lib/esm/setting-components/index.mjs +6 -14
  353. package/dist/lib/esm/setting-components/month-component.mjs +6 -14
  354. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +6 -14
  355. package/dist/lib/esm/setting-components/multiple-email-component.mjs +6 -14
  356. package/dist/lib/esm/setting-components/multiple-file-component.mjs +6 -14
  357. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -14
  358. package/dist/lib/esm/setting-components/number-component.mjs +6 -14
  359. package/dist/lib/esm/setting-components/password-component.mjs +6 -14
  360. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +6 -14
  361. package/dist/lib/esm/setting-components/telephone-component.mjs +6 -14
  362. package/dist/lib/esm/setting-components/text-based-component.mjs +6 -14
  363. package/dist/lib/esm/setting-components/time-component.mjs +6 -14
  364. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +6 -14
  365. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +6 -14
  366. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +6 -14
  367. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +6 -14
  368. package/dist/lib/esm/setting-components/typed-text-component.mjs +6 -14
  369. package/dist/lib/esm/setting-components/url-component.mjs +6 -14
  370. package/dist/lib/esm/setting-components/validator-component.mjs +6 -14
  371. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +5 -13
  372. package/dist/lib/esm/setting-components/week-component.mjs +6 -14
  373. package/dist/lib/esm/setting-ex.mjs +6 -14
  374. package/dist/lib/esm/setting-group-ex.mjs +6 -14
  375. package/dist/lib/esm/status-bar-item-registrar.mjs +6 -14
  376. package/dist/lib/esm/templater.mjs +6 -14
  377. package/dist/lib/esm/transformers/duration-transformer.mjs +6 -14
  378. package/dist/lib/esm/transformers/index.mjs +6 -14
  379. package/dist/lib/esm/trusted-input.mjs +6 -14
  380. package/dist/lib/esm/validation.mjs +6 -14
  381. package/dist/lib/esm/vault-delete.mjs +6 -14
  382. package/dist/lib/esm/vault-transaction.mjs +6 -14
  383. package/dist/lib/esm/vault.mjs +6 -14
  384. package/dist/lib/esm/view-registrar.mjs +6 -14
  385. package/dist/lib/esm/workspace.mjs +6 -14
  386. package/package.json +69 -24
@@ -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
  }
@@ -479,4 +455,4 @@ function toggleCheckbox(checkboxEl) {
479
455
  ModalCommandBuilder,
480
456
  ModalCommandsRenderMode
481
457
  });
482
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL21vZGFscy9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIGJ1aWxkZXIgZm9yIGEgbW9kYWwncyBjb250cm9sIHN0cmlwLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyfSBhc3NlbWJsZXMgdGhlIHN0cmlwIG9mIGNvbnRyb2xzIHNob3duIGF0IHRoZSBib3R0b20gb2YgYSBtb2RhbDpcbiAqIGtleWJvYXJkLWNvbW1hbmQgaGludHMgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZEtleWJvYXJkQ29tbWFuZH0pLCBpbnRlcmFjdGl2ZSBjaGVja2JveGVzIGJvdW5kIHRvXG4gKiBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCAoe0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXIuYWRkQ2hlY2tib3h9KSwgYW5kIGRyb3Bkb3ducyBib3VuZCB0byBhIG1vZGlmaWVyK2tleVxuICogc2hvcnRjdXQgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZERyb3BEb3dufSkuIENoYWluIHRoZSBgYWRkKmAgY2FsbHMsIHRoZW4gYXBwbHkgZXZlcnl0aGluZyB0byBhXG4gKiBtb2RhbCB3aXRoIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfTpcbiAqXG4gKiBgYGB0c1xuICogbmV3IE1vZGFsQ29tbWFuZEJ1aWxkZXIoKVxuICogICAuYWRkS2V5Ym9hcmRDb21tYW5kKHsga2V5OiAnRW50ZXInLCBtb2RpZmllcnM6IFsnTW9kJ10sIG9uS2V5LCBwdXJwb3NlOiAndG8gY3JlYXRlJyB9KVxuICogICAuYWRkQ2hlY2tib3goeyBrZXk6ICcxJywgbW9kaWZpZXJzOiBbJ0FsdCddLCBvbkNoYW5nZSwgb25Jbml0LCBwdXJwb3NlOiAnRml4IGZvb3Rub3RlcycgfSlcbiAqICAgLmJ1aWxkKG1vZGFsKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBzdHJpcCBpcyBkZXNjcmliZWQgYnkgdHdvIGluZGVwZW5kZW50IGF4ZXM6XG4gKlxuICogLSAqKldoZXJlIGl0IGlzIGhvc3RlZC4qKiBBIHtAbGluayBTdWdnZXN0TW9kYWx9IGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnN9IG1vZGVcbiAqICAga2VlcHMgT2JzaWRpYW4ncyBvd24gaW5zdHJ1Y3Rpb24gYmFyIChgc2V0SW5zdHJ1Y3Rpb25zYCArIGBpbnN0cnVjdGlvbnNFbGApLiBFdmVyeSBvdGhlciB0YXJnZXQgXHUyMDE0IGFcbiAqICAgcGxhaW4ge0BsaW5rIE1vZGFsfSwgb3IgYSBiYXJlIHtAbGluayBNb2RhbENvbW1hbmRzSG9zdH0gb2YgYW4gZWxlbWVudCBwbHVzIGEgYFNjb3BlYCBcdTIwMTQgZ2V0cyBhIHN0cmlwXG4gKiAgIGVsZW1lbnQgdGhlIGJ1aWxkZXIgY3JlYXRlcyBpdHNlbGYuXG4gKiAtICoqSG93IGVhY2ggY29udHJvbCBsb29rcy4qKiB7QGxpbmsgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuSW5zdHJ1Y3Rpb25zfSByZW5kZXJzIHRoZSBwdXJwb3NlIHRleHQgd2l0aFxuICogICBhbiBpbmxpbmUgY2hlY2tib3ggb3IgZHJvcGRvd247IHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSByZW5kZXJzIG9uZSBjbGlja2FibGUgYnV0dG9uXG4gKiAgIHBlciBjb250cm9sLCBjYXJyeWluZyBpdHMgcHJlc3NlZCBhbmQgZGlzYWJsZWQgc3RhdGUuXG4gKlxuICogVGhlIGF4ZXMgYXJlIGluZGVwZW5kZW50IGJlY2F1c2UgYSBidXR0b24gc3RyaXAgaW5zaWRlIGEge0BsaW5rIFN1Z2dlc3RNb2RhbH0gaXMgYSByZWFsIGNvbWJpbmF0aW9uLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSBhbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzLCBidXRcbiAqIG9ubHkgcmVuZGVycyB0aGUgY29udHJvbCBVSSBhbmQgcmVnaXN0ZXJzIHRoZSBvcHRpb24tdG9nZ2xlIHNob3J0Y3V0cyB3aGVuXG4gKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAgKHRoZSBkZWZhdWx0KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEluc3RydWN0aW9uLFxuICBLZXltYXBDb250ZXh0LFxuICBNb2RhbCxcbiAgTW9kaWZpZXIsXG4gIFNjb3BlLFxuICBTdWdnZXN0TW9kYWxcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBEcm9wZG93bkNvbXBvbmVudCxcbiAgUGxhdGZvcm1cbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcblxuY29uc3QgS0VZU19NQVAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gIFsnRW50ZXInLCAnXHUyMUI1J10sXG4gIFsnVXBEb3duJywgJ1x1MjE5MVx1MjE5MyddXG5dKTtcblxuLyoqXG4gKiBUaGUgd2F5IHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSByZW5kZXJzIGVhY2ggY29udHJvbC5cbiAqL1xuZXhwb3J0IGVudW0gTW9kYWxDb21tYW5kc1JlbmRlck1vZGUge1xuICAvKipcbiAgICogT25lIGNsaWNrYWJsZSBidXR0b24gcGVyIGNvbnRyb2wsIGNhcnJ5aW5nIGl0cyBwcmVzc2VkIChgYXJpYS1wcmVzc2VkYCkgYW5kIGRpc2FibGVkIHN0YXRlLlxuICAgKlxuICAgKiBPbmx5IGNvbnRyb2xzIHJlYWNoYWJsZSBieSBwb2ludGVyIGFyZSByZW5kZXJlZCBcdTIwMTQgY2hlY2tib3hlcywgYW5kIGtleWJvYXJkIGNvbW1hbmRzIHRoYXQgc3VwcGx5XG4gICAqIHtAbGluayBLZXlib2FyZENvbW1hbmQub25BY3RpdmF0ZX0uIEEgaGludC1vbmx5IG9yIGtleWJvYXJkLW9ubHkgY29tbWFuZCBzdGlsbCByZWdpc3RlcnMgaXRzIGhhbmRsZXJcbiAgICogYnV0IHJlbmRlcnMgbm8gYnV0dG9uLCBiZWNhdXNlIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXMgd29yc2UgdGhhbiBubyBidXR0b24uIEEgZHJvcGRvd24gdGhyb3dzOlxuICAgKiBhIGNvbnRyb2wgdGhhdCBDWUNMRVMgaGFzIG5vIGJ1dHRvbiBmb3JtLlxuICAgKi9cbiAgQnV0dG9ucyA9ICdidXR0b25zJyxcblxuICAvKipcbiAgICogT2JzaWRpYW4ncyBpbnN0cnVjdGlvbi1iYXIgbG9vazogdGhlIHNob3J0Y3V0LCB0aGVuIHRoZSBwdXJwb3NlIHRleHQgd2l0aCBhbiBpbmxpbmUgY2hlY2tib3ggb3JcbiAgICogZHJvcGRvd24uXG4gICAqL1xuICBJbnN0cnVjdGlvbnMgPSAnaW5zdHJ1Y3Rpb25zJ1xufVxuXG4vKipcbiAqIEEgY2hlY2tib3ggY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCB0b2dnbGVzXG4gKiBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja2JveENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kQmFzZSB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY2hlY2tib3ggdmFsdWUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIGlzQ2hlY2tlZCAtIFRoZSBuZXcgY2hlY2tlZCBzdGF0ZS5cbiAgICovXG4gIG9uQ2hhbmdlOiAoaXNDaGVja2VkOiBib29sZWFuKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgb25jZSB3aXRoIHRoZSBjcmVhdGVkIGNoZWNrYm94IGVsZW1lbnQsIHRvIGluaXRpYWxpemUgaXRzIHN0YXRlLlxuICAgKlxuICAgKiBJbiB7QGxpbmsgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuQnV0dG9uc30gbW9kZSB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGJ1dCBuZXZlciBhcHBlbmRlZCBcdTIwMTQgdGhlXG4gICAqIGJ1dHRvbiBpcyBhIHZpZXcgb2YgaXQgXHUyMDE0IHNvIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIGNvZGUgc2VydmVzIGJvdGggcmVuZGVyIG1vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hlY2tib3hFbCAtIFRoZSBjcmVhdGVkIGNoZWNrYm94IGVsZW1lbnQuXG4gICAqL1xuICBvbkluaXQ6IChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBtZW1iZXJzIGV2ZXJ5IGNvbW1hbmQgc2hhcmVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbnRyb2wgY2FuIGJlIHVzZWQgcmlnaHQgbm93LiBXaGVuIGl0IHJldHVybnMgYGZhbHNlYCB0aGUgY29udHJvbCBpcyByZW5kZXJlZFxuICAgKiAqKmRpc2FibGVkIHJhdGhlciB0aGFuIHJlbW92ZWQqKiwgc28gdGhlIHN0cmlwIGRvZXMgbm90IHJlZmxvdyB1bmRlciB0aGUgcG9pbnRlciBhcyBtb2RlcyBjaGFuZ2UgXHUyMDE0XG4gICAqIHdoaWNoIG9uIGEgcGhvbmUgbWVhbnMgYSBtaXMtdGFwLlxuICAgKlxuICAgKiBSZS1yZWFkIGJ5IHtAbGluayBNb2RhbENvbW1hbmRzLnJlZnJlc2h9LiBXaGVuIG9taXR0ZWQsIHRoZSBidWlsZGVyIG5ldmVyIHRvdWNoZXMgdGhlIGNvbnRyb2wnc1xuICAgKiBkaXNhYmxlZCBzdGF0ZSwgbGVhdmluZyB3aGF0ZXZlciB7QGxpbmsgQ2hlY2tib3hDb21tYW5kLm9uSW5pdH0gLyB7QGxpbmsgRHJvcERvd25Db21tYW5kLm9uSW5pdH0gc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb250cm9sIGNhbiBiZSB1c2VkIHJpZ2h0IG5vdy5cbiAgICovXG4gIGNoZWNrSXNBdmFpbGFibGU/OiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IHRoYXQgYWN0aXZhdGVzIHRoZSBjb21tYW5kLlxuICAgKi9cbiAga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllcnMgY29tYmluZWQgd2l0aCB7QGxpbmsgQ29tbWFuZEJhc2Uua2V5fS4gV2hlbiBvbWl0dGVkLCBubyBtb2RpZmllcnMgYXJlIHJlcXVpcmVkLlxuICAgKi9cbiAgbW9kaWZpZXJzPzogTW9kaWZpZXJbXTtcblxuICAvKipcbiAgICogVGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIHNob3duIG5leHQgdG8gdGhlIGNvbnRyb2wuXG4gICAqL1xuICBwdXJwb3NlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBkcm9wZG93biBjb21tYW5kIHNob3duIGluIGEgbW9kYWwncyBjb250cm9sIHN0cmlwIGFuZCBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCB0aGF0IGN5Y2xlc1xuICogdGhyb3VnaCBpdHMgb3B0aW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgaW4ge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9uc30gbW9kZSBvbmx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyb3BEb3duQ29tbWFuZCBleHRlbmRzIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBkcm9wZG93biB2YWx1ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbmV3bHkgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHdpdGggdGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LCB0byBpbml0aWFsaXplIGl0cyBvcHRpb25zIGFuZCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGRyb3Bkb3duQ29tcG9uZW50IC0gVGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgb25Jbml0OiAoZHJvcGRvd25Db21wb25lbnQ6IERyb3Bkb3duQ29tcG9uZW50KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEga2V5Ym9hcmQgY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgb3B0aW9uYWxseSBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleWJvYXJkQ29tbWFuZCBleHRlbmRzIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbW1hbmQgcmVhZHMgYXMgT04uIFN1cHBseSBpdCBmb3IgYSB0b2dnbGUgd2hvc2Ugc3RhdGUgbGl2ZXMgb3V0c2lkZSB0aGUgc3RyaXA7IG9taXQgaXRcbiAgICogZm9yIGFuIGFjdGlvbiwgd2hpY2ggZG9lcyBzb21ldGhpbmcgYW5kIGlzIGRvbmUuIEEge0BsaW5rIENoZWNrYm94Q29tbWFuZH0gbmVlZHMgbm8gZXF1aXZhbGVudCBcdTIwMTQgaXRzXG4gICAqIGNoZWNrYm94IGVsZW1lbnQgaXMgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBSZS1yZWFkIGJ5IHtAbGluayBNb2RhbENvbW1hbmRzLnJlZnJlc2h9LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIHJlYWRzIGFzIE9OLlxuICAgKi9cbiAgY2hlY2tJc09uPzogKCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBvaW50ZXIgcm91dGUgaW50byB0aGUgc2FtZSBoYW5kbGVyIHRoZSBzaG9ydGN1dCBydW5zLiBSZXF1aXJlZCBmb3IgdGhlIGNvbW1hbmQgdG8gcmVuZGVyIGFcbiAgICogYnV0dG9uIGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSBtb2RlIFx1MjAxNCBvbiBhIHBob25lIHRoZXJlIGlzIG5vIG1vZGlmaWVyIGtleSB0b1xuICAgKiBwcmVzcywgc28gdGhpcyBpcyB0aGUgb25seSB3YXkgaW4uXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUgY2xpY2sgZXZlbnQsIHNvIGEgY29tbWFuZCB0aGF0IHBpY2tzIHNvbWV0aGluZyBoYXMgb25lIHRvIGhhbmQgb24uXG4gICAqL1xuICBvbkFjdGl2YXRlPzogKCRldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIGhhbmRsZXIgaW52b2tlZCB3aGVuIHRoZSBzaG9ydGN1dCBpcyBwcmVzc2VkLiBXaGVuIG9taXR0ZWQsIHRoZSBjb21tYW5kIGlzIGEgaGludCBvbmx5IGFuZCBub1xuICAgKiBzY29wZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUga2V5Ym9hcmQgZXZlbnQuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGtleW1hcCBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBgZmFsc2VgIHRvIHByZXZlbnQgT2JzaWRpYW4ncyBkZWZhdWx0IGhhbmRsaW5nLCBvciBgdm9pZGAvYHRydWVgIG90aGVyd2lzZS5cbiAgICovXG4gIG9uS2V5PzogKCRldmVudDogS2V5Ym9hcmRFdmVudCwgY29udGV4dDogS2V5bWFwQ29udGV4dCkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgd2F5IGVhY2ggY29udHJvbCBpcyByZW5kZXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9uc31cbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlck1vZGU/OiBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW5kZXIgdGhlIGNvbnRyb2wgc3RyaXAgKGNoZWNrYm94ZXMsIGRyb3Bkb3ducywga2V5Ym9hcmQgaGludHMpIGFuZCByZWdpc3RlciB0aGVcbiAgICogb3B0aW9uLXRvZ2dsZSBrZXlib2FyZCBzaG9ydGN1dHMuIFdoZW4gYGZhbHNlYCwgbm8gY29udHJvbCBVSSBpcyBzaG93biBhbmQgdGhlIG9wdGlvbi10b2dnbGVcbiAgICogc2hvcnRjdXRzIGFyZSBub3QgcmVnaXN0ZXJlZDsgb25seSB0aGUgZXNzZW50aWFsIG5hdmlnYXRpb24ga2V5IGhhbmRsZXJzIHJlbWFpbiBhY3RpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0luc3RydWN0aW9ucz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGhhbmRsZSByZXR1cm5lZCBieSB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kcyB7XG4gIC8qKlxuICAgKiBCcmluZ3MgZXZlcnkgcmVuZGVyZWQgY29udHJvbCdzIGRpc2FibGVkIGFuZCBwcmVzc2VkIHN0YXRlIHVwIHRvIGRhdGUsIGJ5IHJlLXJlYWRpbmdcbiAgICoge0BsaW5rIENvbW1hbmRCYXNlLmNoZWNrSXNBdmFpbGFibGV9IGFuZCB7QGxpbmsgS2V5Ym9hcmRDb21tYW5kLmNoZWNrSXNPbn0uXG4gICAqXG4gICAqIFRoZSBzdHJpcCBpcyBidWlsdCBvbmNlIGFuZCBvbmx5IHJlLXN0YXRlZCBhZnRlcndhcmRzLCBiZWNhdXNlIHJlYnVpbGRpbmcgaXQgd291bGQgcmVwbGFjZSBhbiBlbGVtZW50XG4gICAqIHRoZSBwb2ludGVyIG1heSBiZSBhYm91dCB0byBjbGljay5cbiAgICovXG4gIHJlZnJlc2g6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBiYXJlIGhvc3QgZm9yIGEgY29udHJvbCBzdHJpcDogdGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8sIHBsdXMgdGhlIHNjb3BlIHRvIHJlZ2lzdGVyIHNob3J0Y3V0cyB3aXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQ29tbWFuZHNIb3N0IHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoZSBjb250cm9sIHN0cmlwIGlzIGFwcGVuZGVkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgdGhlIHNob3J0Y3V0cyBhcmUgcmVnaXN0ZXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IFNjb3BlO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHRhcmdldCB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0gYWNjZXB0cy5cbiAqL1xuZXhwb3J0IHR5cGUgTW9kYWxDb21tYW5kc1RhcmdldCA9IE1vZGFsIHwgTW9kYWxDb21tYW5kc0hvc3QgfCBTdWdnZXN0TW9kYWw8dW5rbm93bj47XG5cbi8qKlxuICogT25lIGFjY3VtdWxhdGVkIGNvbW1hbmQsIHJlZHVjZWQgdG8gdGhlIGhhbmRmdWwgb2YgdGhpbmdzIGJvdGggcmVuZGVyZXJzIG5lZWQuXG4gKlxuICogT3B0aW9uYWwgY29sbGFib3JhdG9ycyBhcmUgYG51bGwgfCBYYCByZXF1aXJlZCBmaWVsZHMgcmF0aGVyIHRoYW4gYD9gLCBzbyBldmVyeSBjb25zdHJ1Y3Rpb24gc2l0ZSBoYXMgdG9cbiAqIHNheSB3aGljaCBvbmVzIGl0IGhhcy5cbiAqL1xuLyoqXG4gKiBPbmUgY29udHJvbCByZW5kZXJlZCBhcyBhIEJVVFRPTi5cbiAqXG4gKiBJdCByZXBvcnRzIGl0cyBvd24gcHJlc3NlZCBzdGF0ZSwgYmVjYXVzZSBvbmx5IHRoZSBidXR0b24gcmVuZGVyZXIgaGFzIGFueXdoZXJlIHRvIHNob3cgb25lLlxuICovXG5pbnRlcmZhY2UgQnV0dG9uQ29udHJvbCB7XG4gIGNoZWNrSXNPbjogKCkgPT4gYm9vbGVhbjtcbiAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQ29tbWFuZEVudHJ5IHtcbiAgcmVhZG9ubHkgY2hlY2tJc0F2YWlsYWJsZTogKCgpID0+IGJvb2xlYW4pIHwgbnVsbDtcbiAgcmVhZG9ubHkgY29tbWFuZFRleHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgaW5pdEJ1dHRvbjogKChidXR0b25FbDogSFRNTEJ1dHRvbkVsZW1lbnQsIHNjb3BlOiBTY29wZSkgPT4gQnV0dG9uQ29udHJvbCkgfCBudWxsO1xuICByZWFkb25seSBpbml0SW5zdHJ1Y3Rpb246ICgocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSkgPT4gSW5zdHJ1Y3Rpb25Db250cm9sKSB8IG51bGw7XG4gIHJlYWRvbmx5IGlzRHJvcERvd246IGJvb2xlYW47XG4gIHJlYWRvbmx5IHB1cnBvc2U6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaXN0ZXJTY29wZTogKChzY29wZTogU2NvcGUpID0+IHZvaWQpIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBPbmUgY29udHJvbCByZW5kZXJlZCBpbnRvIGFuIElOU1RSVUNUSU9OIGJhci5cbiAqXG4gKiBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gcHJlc3NlZCBzdGF0ZSBoZXJlOiB0aGUgY29udHJvbCBcdTIwMTQgYSBjaGVja2JveCwgYSBkcm9wZG93biBcdTIwMTQgc2hvd3MgaXRzIG93bixcbiAqIHNvIGEgc2Vjb25kIGNvcHkgd291bGQgb25seSBiZSBhIHNlY29uZCB0aGluZyB0byBrZWVwIGluIHN5bmMuXG4gKi9cbmludGVyZmFjZSBJbnN0cnVjdGlvbkNvbnRyb2wge1xuICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBJbnN0cnVjdGlvbkV4IGV4dGVuZHMgSW5zdHJ1Y3Rpb24ge1xuICByZWFkb25seSBlbnRyeTogQ29tbWFuZEVudHJ5O1xufVxuXG4vKipcbiAqIFJlLXN0YXRlcyBvbmUgcmVuZGVyZWQgY29udHJvbCwgYWxyZWFkeSBib3VuZCB0byBpdHMgb3duIGVsZW1lbnRzLlxuICovXG50eXBlIFJlZnJlc2hDb250cm9sID0gKCkgPT4gdm9pZDtcblxuY29uc3QgTk9PUF9NT0RBTF9DT01NQU5EUzogTW9kYWxDb21tYW5kcyA9IHtcbiAgcmVmcmVzaDogKCk6IHZvaWQgPT4ge1xuICAgIC8vIE5vdGhpbmcgd2FzIHJlbmRlcmVkLCBzbyB0aGVyZSBpcyBubyBzdGF0ZSB0byByZS1zdGF0ZS5cbiAgfVxufTtcblxuLyoqXG4gKiBCdWlsZHMgYSBtb2RhbCdzIGNvbnRyb2wgc3RyaXAgZnJvbSBrZXlib2FyZCBjb21tYW5kcywgaW50ZXJhY3RpdmUgY2hlY2tib3hlcywgYW5kIGRyb3Bkb3ducywgdGhlblxuICogYXBwbGllcyB0aGVtIHRvIGEgbW9kYWwgdmlhIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGFsQ29tbWFuZEJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJpZXM6IENvbW1hbmRFbnRyeVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gaW50ZXJhY3RpdmUgY2hlY2tib3ggdG8gdGhlIGNvbnRyb2wgc3RyaXAsIGJvdW5kIHRvIGEgbW9kaWZpZXIra2V5IHNob3J0Y3V0IHRoYXQgdG9nZ2xlcyBpdC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY2hlY2tib3ggY29tbWFuZCB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBhZGRDaGVja2JveChjb21tYW5kOiBDaGVja2JveENvbW1hbmQpOiB0aGlzIHtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICBjaGVja0lzQXZhaWxhYmxlOiBjb21tYW5kLmNoZWNrSXNBdmFpbGFibGUgPz8gbnVsbCxcbiAgICAgIGNvbW1hbmRUZXh0OiB0aGlzLmJ1aWxkQ29tbWFuZFRleHQoY29tbWFuZCksXG4gICAgICBpbml0QnV0dG9uOiAoYnV0dG9uRWw6IEhUTUxCdXR0b25FbGVtZW50LCBzY29wZTogU2NvcGUpOiBCdXR0b25Db250cm9sID0+IHtcbiAgICAgICAgLy8gQ3JlYXRlZCBidXQgbmV2ZXIgYXBwZW5kZWQ6IHRoZSBjaGVja2JveCBob2xkcyB0aGUgc3RhdGUgYW5kIHRoZSBidXR0b24gaXMgYSB2aWV3IG9mIGl0LCBzb1xuICAgICAgICAvLyBgb25Jbml0YCAvIGBvbkNoYW5nZWAgbWVhbiBleGFjdGx5IHRoZSBzYW1lIHRoaW5nIGluIGJvdGggcmVuZGVyIG1vZGVzLlxuICAgICAgICBjb25zdCBjaGVja2JveEVsID0gY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pO1xuICAgICAgICBpbml0Q2hlY2tib3goY2hlY2tib3hFbCwgc2NvcGUpO1xuICAgICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICB0b2dnbGVDaGVja2JveChjaGVja2JveEVsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hlY2tJc09uOiAoKTogYm9vbGVhbiA9PiBjaGVja2JveEVsLmNoZWNrZWQsXG4gICAgICAgICAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjaGVja2JveEVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgICAgIGJ1dHRvbkVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgaW5pdEluc3RydWN0aW9uOiAocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IEluc3RydWN0aW9uQ29udHJvbCA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94RWwgPSBwdXJwb3NlRWwuY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pO1xuICAgICAgICAvLyBUaGUgZ2FwIGdvZXMgb24gdGhlIGNvbnRyb2wsIG5vdCBvbiB0aGUgc3RyaXAsIHNvIGl0IGxhbmRzIG9uIEJPVEggcmVuZGVyIHBhdGhzOiBhXG4gICAgICAgIC8vIGBTdWdnZXN0TW9kYWxgJ3MgbmF0aXZlIGJhciBob3N0cyB0aGUgc2FtZSBjaGVja2JveCwgYW5kIHRoaXMgbGlicmFyeSBuZXZlciB0b3VjaGVzIHRoYXQgYmFyJ3MgZWxlbWVudC5cbiAgICAgICAgYWRkUGx1Z2luQ3NzQ2xhc3NlcyhjaGVja2JveEVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRDb250cm9sKTtcbiAgICAgICAgcmV0dXJuIGluaXRDaGVja2JveChjaGVja2JveEVsLCBzY29wZSk7XG4gICAgICB9LFxuICAgICAgaXNEcm9wRG93bjogZmFsc2UsXG4gICAgICBwdXJwb3NlOiBjb21tYW5kLnB1cnBvc2UsXG4gICAgICByZWdpc3RlclNjb3BlOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgICBmdW5jdGlvbiBpbml0Q2hlY2tib3goY2hlY2tib3hFbDogSFRNTElucHV0RWxlbWVudCwgc2NvcGU6IFNjb3BlKTogSW5zdHJ1Y3Rpb25Db250cm9sIHtcbiAgICAgIGNvbW1hbmQub25Jbml0KGNoZWNrYm94RWwpO1xuICAgICAgY2hlY2tib3hFbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbW1hbmQub25DaGFuZ2UoY2hlY2tib3hFbC5jaGVja2VkKTtcbiAgICAgIH0pO1xuXG4gICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksICgpID0+IHtcbiAgICAgICAgdG9nZ2xlQ2hlY2tib3goY2hlY2tib3hFbCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgY2hlY2tib3hFbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBkcm9wZG93biB0byB0aGUgY29udHJvbCBzdHJpcCwgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCBjeWNsZXMgdGhyb3VnaCBpdHNcbiAgICogb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgZHJvcGRvd24gY29tbWFuZCB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBhZGREcm9wRG93bihjb21tYW5kOiBEcm9wRG93bkNvbW1hbmQpOiB0aGlzIHtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICBjaGVja0lzQXZhaWxhYmxlOiBjb21tYW5kLmNoZWNrSXNBdmFpbGFibGUgPz8gbnVsbCxcbiAgICAgIGNvbW1hbmRUZXh0OiB0aGlzLmJ1aWxkQ29tbWFuZFRleHQoY29tbWFuZCksXG4gICAgICBpbml0QnV0dG9uOiBudWxsLFxuICAgICAgaW5pdEluc3RydWN0aW9uOiAocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IEluc3RydWN0aW9uQ29udHJvbCA9PiB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duQ29tcG9uZW50ID0gbmV3IERyb3Bkb3duQ29tcG9uZW50KHB1cnBvc2VFbCk7XG4gICAgICAgIC8vIFRoZSBzYW1lIGdhcCB0aGUgY2hlY2tib3ggZ2V0cywgc28gdGhlIHR3byBjb250cm9scyBhcmUgc2VwYXJhdGVkIGZyb20gdGhlaXIgbGFiZWwgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IFx1MjAxNCBhIHJlYWwgcnVsZSByYXRoZXIgdGhhbiB0aGUgbGl0ZXJhbCBzcGFjZSB0aGlzIHVzZWQgdG8gYXBwZW5kLlxuICAgICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGRyb3Bkb3duQ29tcG9uZW50LnNlbGVjdEVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRDb250cm9sKTtcbiAgICAgICAgY29tbWFuZC5vbkluaXQoZHJvcGRvd25Db21wb25lbnQpO1xuICAgICAgICBkcm9wZG93bkNvbXBvbmVudC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBjb21tYW5kLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIGRlZmVuc2l2ZSA/PyBvbiBvcHRpb25hbCBtb2RpZmllcnMuICovXG4gICAgICAgIHNjb3BlLnJlZ2lzdGVyKGNvbW1hbmQubW9kaWZpZXJzID8/IFtdLCBjb21tYW5kLmtleSwgKCkgPT4ge1xuICAgICAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgaWYgKGRyb3Bkb3duQ29tcG9uZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNlbGVjdEVsID0gZHJvcGRvd25Db21wb25lbnQuc2VsZWN0RWw7XG4gICAgICAgICAgc2VsZWN0RWwuc2VsZWN0ZWRJbmRleCA9IChzZWxlY3RFbC5zZWxlY3RlZEluZGV4ICsgMSkgJSBzZWxlY3RFbC5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICBzZWxlY3RFbC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGRyb3Bkb3duQ29tcG9uZW50LnNldERpc2FibGVkKGlzRGlzYWJsZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBpc0Ryb3BEb3duOiB0cnVlLFxuICAgICAgcHVycG9zZTogY29tbWFuZC5wdXJwb3NlLFxuICAgICAgcmVnaXN0ZXJTY29wZTogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBrZXlib2FyZCBjb21tYW5kIHRvIHRoZSBjb250cm9sIHN0cmlwLiBXaGVuIHtAbGluayBLZXlib2FyZENvbW1hbmQub25LZXl9IGlzIHByb3ZpZGVkLCBpdHNcbiAgICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIG1vZGFsIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNvbW1hbmQgaXMgYSBoaW50IG9ubHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGtleWJvYXJkIGNvbW1hbmQgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgYWRkS2V5Ym9hcmRDb21tYW5kKGNvbW1hbmQ6IEtleWJvYXJkQ29tbWFuZCk6IHRoaXMge1xuICAgIGNvbnN0IGNoZWNrSXNPbiA9IGNvbW1hbmQuY2hlY2tJc09uID8/ICgoKTogYm9vbGVhbiA9PiBmYWxzZSk7XG4gICAgY29uc3Qgb25BY3RpdmF0ZSA9IGNvbW1hbmQub25BY3RpdmF0ZSA/PyBudWxsO1xuICAgIGNvbnN0IG9uS2V5ID0gY29tbWFuZC5vbktleT8uYmluZChjb21tYW5kKSA/PyBudWxsO1xuXG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgY2hlY2tJc0F2YWlsYWJsZTogY29tbWFuZC5jaGVja0lzQXZhaWxhYmxlID8/IG51bGwsXG4gICAgICBjb21tYW5kVGV4dDogdGhpcy5idWlsZENvbW1hbmRUZXh0KGNvbW1hbmQpLFxuICAgICAgaW5pdEJ1dHRvbjogb25BY3RpdmF0ZVxuICAgICAgICAvLyBObyBkaXNhYmxlZCBndWFyZCBvbiB0aGUgbGlzdGVuZXI6IGEgZGlzYWJsZWQgYnV0dG9uIGZpcmVzIG5vIGNsaWNrIGF0IGFsbCwgc28gYHNldERpc2FibGVkYFxuICAgICAgICAvLyBiZWxvdyBpcyB0aGUgd2hvbGUgZ2F0ZS5cbiAgICAgICAgPyAoYnV0dG9uRWw6IEhUTUxCdXR0b25FbGVtZW50KTogQnV0dG9uQ29udHJvbCA9PiB7XG4gICAgICAgICAgYnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBvbkFjdGl2YXRlKCRldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoZWNrSXNPbixcbiAgICAgICAgICAgIHNldERpc2FibGVkOiAoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBidXR0b25FbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICBpbml0SW5zdHJ1Y3Rpb246IG51bGwsXG4gICAgICBpc0Ryb3BEb3duOiBmYWxzZSxcbiAgICAgIHB1cnBvc2U6IGNvbW1hbmQucHVycG9zZSxcbiAgICAgIHJlZ2lzdGVyU2NvcGU6IG9uS2V5XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBkZWZlbnNpdmUgPz8gb24gb3B0aW9uYWwgbW9kaWZpZXJzLiAqL1xuICAgICAgICA/IChzY29wZTogU2NvcGUpOiB2b2lkID0+IHtcbiAgICAgICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksIG9uS2V5KTtcbiAgICAgICAgfVxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyB0byBhIG1vZGFsLiBBbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5XG4gICAqIGhhbmRsZXJzOyBvbmx5IHJlbmRlcnMgdGhlIGNvbnRyb2wgc3RyaXAgYW5kIHJlZ2lzdGVycyB0aGUgb3B0aW9uLXRvZ2dsZSBzaG9ydGN1dHMgd2hlblxuICAgKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgbW9kYWwsIG9yIHRoZSBiYXJlIGVsZW1lbnQgKyBzY29wZSwgdG8gYXBwbHkgdGhlIGNvbW1hbmRzIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBidWlsZCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBIGhhbmRsZSB3aG9zZSB7QGxpbmsgTW9kYWxDb21tYW5kcy5yZWZyZXNofSByZS1zdGF0ZXMgZXZlcnkgcmVuZGVyZWQgY29udHJvbC5cbiAgICovXG4gIHB1YmxpYyBidWlsZCh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQsIG9wdGlvbnM6IE1vZGFsQ29tbWFuZEJ1aWxkZXJCdWlsZE9wdGlvbnMgPSB7fSk6IE1vZGFsQ29tbWFuZHMge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlbmRlck1vZGUgPSBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnMsXG4gICAgICBzaG91bGRTaG93SW5zdHJ1Y3Rpb25zID0gdHJ1ZVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3Qgc2NvcGUgPSB0YXJnZXQuc2NvcGU7XG5cbiAgICAvLyBFc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzIG11c3Qgc3RheSBhY3RpdmUgZXZlbiB3aGVuIHRoZSBjb250cm9sIHN0cmlwIGlzIGhpZGRlbi5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgZW50cnkucmVnaXN0ZXJTY29wZT8uKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoIXNob3VsZFNob3dJbnN0cnVjdGlvbnMpIHtcbiAgICAgIHJldHVybiBOT09QX01PREFMX0NPTU1BTkRTO1xuICAgIH1cblxuICAgIC8vIEVhY2ggcmVuZGVyZXIgaGFuZHMgYmFjayBvbmUgY2xvc3VyZSBwZXIgY29udHJvbCBpdCBhY3R1YWxseSBkcmV3LCBhbHJlYWR5IGJvdW5kIHRvIHRoYXQgY29udHJvbCdzXG4gICAgLy8gZWxlbWVudHMgXHUyMDE0IHNvIGByZWZyZXNoYCBuZXZlciBoYXMgdG8ga25vdyB3aGljaCBvZiB0aGUgdHdvIHNoYXBlcyBpdCBpcyByZS1zdGF0aW5nLlxuICAgIGNvbnN0IHJlZnJlc2hlcnMgPSByZW5kZXJNb2RlID09PSBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zXG4gICAgICA/IHRoaXMucmVuZGVyQnV0dG9ucyh0YXJnZXQsIHNjb3BlKVxuICAgICAgOiB0aGlzLnJlbmRlckluc3RydWN0aW9ucyh0YXJnZXQsIHNjb3BlKTtcblxuICAgIGNvbnN0IG1vZGFsQ29tbWFuZHM6IE1vZGFsQ29tbWFuZHMgPSB7XG4gICAgICByZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcmVmcmVzaENvbnRyb2wgb2YgcmVmcmVzaGVycykge1xuICAgICAgICAgIHJlZnJlc2hDb250cm9sKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIG1vZGFsQ29tbWFuZHMucmVmcmVzaCgpO1xuICAgIHJldHVybiBtb2RhbENvbW1hbmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbW1hbmRUZXh0KGNvbW1hbmQ6IENvbW1hbmRCYXNlKTogc3RyaW5nIHtcbiAgICBsZXQgY29tbWFuZFRleHQgPSBLRVlTX01BUC5nZXQoY29tbWFuZC5rZXkpID8/IGNvbW1hbmQua2V5O1xuXG4gICAgZm9yIChjb25zdCBtb2RpZmllciBvZiBjb21tYW5kLm1vZGlmaWVycyA/PyBbXSkge1xuICAgICAgY29tbWFuZFRleHQgPSBgJHt0aGlzLmdldE1vZGlmaWVyU3RyaW5nKG1vZGlmaWVyKX0gJHtjb21tYW5kVGV4dH1gO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kVGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kaWZpZXJTdHJpbmcobW9kaWZpZXI6IE1vZGlmaWVyKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICBjYXNlICdBbHQnOiB7XG4gICAgICAgIHJldHVybiAnYWx0JztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0N0cmwnOiB7XG4gICAgICAgIHJldHVybiAnY3RybCc7XG4gICAgICB9XG4gICAgICBjYXNlICdNZXRhJzoge1xuICAgICAgICByZXR1cm4gUGxhdGZvcm0uaXNNYWNPUyA/ICdjbWQnIDogJ3dpbic7XG4gICAgICB9XG4gICAgICBjYXNlICdNb2QnOiB7XG4gICAgICAgIHJldHVybiBQbGF0Zm9ybS5pc01hY09TID8gJ2NtZCcgOiAnY3RybCc7XG4gICAgICB9XG4gICAgICBjYXNlICdTaGlmdCc6IHtcbiAgICAgICAgcmV0dXJuICdzaGlmdCc7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBtb2RpZmllcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIGVsZW1lbnQgYSBzZWxmLWNyZWF0ZWQgc3RyaXAgaXMgYXBwZW5kZWQgdG8uXG4gICAqXG4gICAqIEEge0BsaW5rIE1vZGFsfSBjYXJyaWVzIGJvdGggYG1vZGFsRWxgIGFuZCBhIGBjb250YWluZXJFbGAgdGhhdCBpcyB0aGUgT1VURVIgYC5tb2RhbC1jb250YWluZXJgLCBzb1xuICAgKiBgbW9kYWxFbGAgaGFzIHRvIHdpbiBcdTIwMTQgb3RoZXJ3aXNlIHRoZSBzdHJpcCBsYW5kcyBvdXRzaWRlIHRoZSBtb2RhbCBmcmFtZS4gRGlzY3JpbWluYXRlZCB3aXRoIGBpbmBcbiAgICogcmF0aGVyIHRoYW4gYSBwcm9wZXJ0eSByZWFkLCBiZWNhdXNlIHRlc3RzIGhhbmQgYGJ1aWxkYCBhIGBzdHJpY3RQcm94eWAgbW9jayB3aG9zZSBgZ2V0YCB0cmFwIHRocm93c1xuICAgKiBvbiB1bm1vY2tlZCBtZW1iZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIGJ1aWxkIHRhcmdldC5cbiAgICogQHJldHVybnMgVGhlIGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBzdHJpcCB0by5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RyaXBDb250YWluZXJFbCh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuICdtb2RhbEVsJyBpbiB0YXJnZXQgPyB0YXJnZXQubW9kYWxFbCA6IHRhcmdldC5jb250YWluZXJFbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnV0dG9ucyh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQsIHNjb3BlOiBTY29wZSk6IFJlZnJlc2hDb250cm9sW10ge1xuICAgIGNvbnN0IHN0cmlwRWwgPSB0aGlzLmdldFN0cmlwQ29udGFpbmVyRWwodGFyZ2V0KS5jcmVhdGVEaXYoKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHN0cmlwRWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZHMpO1xuXG4gICAgY29uc3QgcmVmcmVzaGVyczogUmVmcmVzaENvbnRyb2xbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGlmIChlbnRyeS5pc0Ryb3BEb3duKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlbmRlciBkcm9wZG93biBjb21tYW5kIFwiJHtlbnRyeS5wdXJwb3NlfVwiIGFzIGEgYnV0dG9uOiBhIGNvbnRyb2wgdGhhdCBjeWNsZXMgaGFzIG5vIGJ1dHRvbiBmb3JtLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVudHJ5LmluaXRCdXR0b24pIHtcbiAgICAgICAgLy8gSGludC1vbmx5IGFuZCBrZXlib2FyZC1vbmx5IGNvbW1hbmRzIGhhdmUgbm8gcG9pbnRlciByb3V0ZSwgYW5kIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXNcbiAgICAgICAgLy8gd29yc2UgdGhhbiBubyBidXR0b24uIFRoZWlyIHNjb3BlIGhhbmRsZXJzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBidXR0b25FbCA9IHN0cmlwRWwuY3JlYXRlRWwoJ2J1dHRvbicsIHsgdHlwZTogJ2J1dHRvbicgfSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGJ1dHRvbkVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmQpO1xuICAgICAgYnV0dG9uRWwuY3JlYXRlU3Bhbih7IHRleHQ6IGVudHJ5LnB1cnBvc2UgfSk7XG5cbiAgICAgIC8vIFRoZSBob3RrZXkgaXMgc2hvd24gb25seSB3aGVyZSBvbmUgY2FuIGJlIHByZXNzZWQuIE9uIGEgcGhvbmUgdGhlcmUgaXMgbm8gbW9kaWZpZXIga2V5IHRvIG9mZmVyLFxuICAgICAgLy8gYW5kIHRoZSBidXR0b24gSVMgdGhlIG9ubHkgd2F5IGluIFx1MjAxNCB3aGljaCBpcyB3aHkgdGhlIHN0cmlwIGV4aXN0cy5cbiAgICAgIGlmICghUGxhdGZvcm0uaXNNb2JpbGUpIHtcbiAgICAgICAgY29uc3QgaG90a2V5RWwgPSBidXR0b25FbC5jcmVhdGVTcGFuKHsgdGV4dDogZW50cnkuY29tbWFuZFRleHQgfSk7XG4gICAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoaG90a2V5RWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZEhvdGtleSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBpbnB1dCBrZWVwcyBmb2N1czogYSBtb2RhbCB0aGF0IGZpbHRlcnMgYXMgeW91IHR5cGUgd291bGQgZW5kIGl0cyBzZWFyY2ggbWlkLXdvcmQgaWYgYSBjbGlja1xuICAgICAgLy8gc3RvbGUgZm9jdXMuXG4gICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJ1dHRvbkNvbnRyb2wgPSBlbnRyeS5pbml0QnV0dG9uKGJ1dHRvbkVsLCBzY29wZSk7XG4gICAgICBjb25zdCBjaGVja0lzQXZhaWxhYmxlID0gZW50cnkuY2hlY2tJc0F2YWlsYWJsZTtcbiAgICAgIHJlZnJlc2hlcnMucHVzaCgoKSA9PiB7XG4gICAgICAgIGlmIChjaGVja0lzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgYnV0dG9uQ29udHJvbC5zZXREaXNhYmxlZCghY2hlY2tJc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc09uID0gYnV0dG9uQ29udHJvbC5jaGVja0lzT24oKTtcbiAgICAgICAgYnV0dG9uRWwudG9nZ2xlQ2xhc3MoQ3NzQ2xhc3MuSXNBY3RpdmUsIGlzT24pO1xuICAgICAgICBidXR0b25FbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIFN0cmluZyhpc09uKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmcmVzaGVycztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVySW5zdHJ1Y3Rpb25zKHRhcmdldDogTW9kYWxDb21tYW5kc1RhcmdldCwgc2NvcGU6IFNjb3BlKTogUmVmcmVzaENvbnRyb2xbXSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10gPSB0aGlzLmVudHJpZXMubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGNvbW1hbmQ6IGVudHJ5LmNvbW1hbmRUZXh0LFxuICAgICAgZW50cnksXG4gICAgICBwdXJwb3NlOiBlbnRyeS5wdXJwb3NlXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcHVycG9zZUVscyA9ICdzZXRJbnN0cnVjdGlvbnMnIGluIHRhcmdldFxuICAgICAgPyB0aGlzLnJlbmRlck5hdGl2ZUluc3RydWN0aW9ucyh0YXJnZXQsIGluc3RydWN0aW9ucylcbiAgICAgIDogdGhpcy5yZW5kZXJPd25JbnN0cnVjdGlvbnModGhpcy5nZXRTdHJpcENvbnRhaW5lckVsKHRhcmdldCksIGluc3RydWN0aW9ucyk7XG5cbiAgICBjb25zdCByZWZyZXNoZXJzOiBSZWZyZXNoQ29udHJvbFtdID0gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGluc3RydWN0aW9uXSBvZiBpbnN0cnVjdGlvbnMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwdXJwb3NlRWwgPSBwdXJwb3NlRWxzW2luZGV4XTtcbiAgICAgIC8vIEEgaG9zdCBtYXkgcmVuZGVyIGZld2VyIHB1cnBvc2UgZWxlbWVudHMgdGhhbiB0aGVyZSBhcmUgaW5zdHJ1Y3Rpb25zOyBza2lwIHJhdGhlciB0aGFuIHRocm93LlxuICAgICAgaWYgKCFwdXJwb3NlRWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluc3RydWN0aW9uQ29udHJvbCA9IGluc3RydWN0aW9uLmVudHJ5LmluaXRJbnN0cnVjdGlvbj8uKHB1cnBvc2VFbCwgc2NvcGUpO1xuICAgICAgY29uc3QgY2hlY2tJc0F2YWlsYWJsZSA9IGluc3RydWN0aW9uLmVudHJ5LmNoZWNrSXNBdmFpbGFibGU7XG4gICAgICAvLyBBIGNvbnRyb2wgc2hvd3MgaXRzIG93biBwcmVzc2VkIHN0YXRlIGhlcmUsIHNvIGF2YWlsYWJpbGl0eSBpcyB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHJlLXN0YXRlIFx1MjAxNFxuICAgICAgLy8gYW5kIGEgY29tbWFuZCB0aGF0IGRlY2xhcmVzIG5vbmUgbmVlZHMgbm8gcmVmcmVzaGVyIGF0IGFsbC5cbiAgICAgIGlmIChpbnN0cnVjdGlvbkNvbnRyb2wgJiYgY2hlY2tJc0F2YWlsYWJsZSkge1xuICAgICAgICByZWZyZXNoZXJzLnB1c2goKCkgPT4ge1xuICAgICAgICAgIGluc3RydWN0aW9uQ29udHJvbC5zZXREaXNhYmxlZCghY2hlY2tJc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZnJlc2hlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aHJvdWdoIE9ic2lkaWFuJ3Mgb3duIGluc3RydWN0aW9uIGJhciwgdGhlIHdheSBldmVyeSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSBjb25zdW1lciBoYXMgYWx3YXlzXG4gICAqIGhhZCBpdC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGFsIC0gVGhlIHN1Z2dlc3QgbW9kYWwuXG4gICAqIEBwYXJhbSBpbnN0cnVjdGlvbnMgLSBUaGUgaW5zdHJ1Y3Rpb25zIHRvIHJlbmRlci5cbiAgICogQHJldHVybnMgVGhlIHB1cnBvc2UgZWxlbWVudCBvZiBlYWNoIHJlbmRlcmVkIGluc3RydWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJOYXRpdmVJbnN0cnVjdGlvbnMobW9kYWw6IFN1Z2dlc3RNb2RhbDx1bmtub3duPiwgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10pOiBIVE1MU3BhbkVsZW1lbnRbXSB7XG4gICAgbW9kYWwuc2V0SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgcmV0dXJuIFsuLi5tb2RhbC5pbnN0cnVjdGlvbnNFbC5maW5kQWxsKCcucHJvbXB0LWluc3RydWN0aW9uID4gc3BhbjpudGgtY2hpbGQoMiknKV0gYXMgSFRNTFNwYW5FbGVtZW50W107XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhbiBpbnN0cnVjdGlvbiBiYXIgb2YgdGhlIGJ1aWxkZXIncyBvd24sIGZvciBhIGhvc3QgdGhhdCBoYXMgbm9uZS5cbiAgICpcbiAgICogVGhlIG1hcmt1cCBtaXJyb3JzIHdoYXQgYHNldEluc3RydWN0aW9uc2AgcHJvZHVjZXMgXHUyMDE0IGluY2x1ZGluZ1xuICAgKiB7QGxpbmsgQ3NzQ2xhc3MuUHJvbXB0SW5zdHJ1Y3Rpb25Db21tYW5kfSBvbiB0aGUga2V5IGhpbnQsIHdoaWNoIGlzIG5vdCBkZWNvcmF0aW9uOiBPYnNpZGlhbidzIHJ1bGVcbiAgICogZm9yIHRoYXQgY2xhc3MgaXMgd2hhdCBzdXBwbGllcyB0aGUgaGludCdzIGJvbGQgd2VpZ2h0IGFuZCB0aGUgYG1hcmdpbi1pbmxpbmUtZW5kYCBzZXBhcmF0aW5nIGl0XG4gICAqIGZyb20gdGhlIHB1cnBvc2UgdGV4dC4gRXZlcnkgY2xhc3MgaGVyZSBpcyB1bnNjb3BlZCBpbiB0aGUgYXBwJ3Mgc3R5bGVzaGVldCwgc28gYWxsIG9mIGl0IHJlYWNoZXMgYVxuICAgKiBwbGFpbiB7QGxpbmsgTW9kYWx9IGFzIHJlYWRpbHkgYXMgaXQgcmVhY2hlcyB0aGUgcXVpY2sgc3dpdGNoZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIGFwcGVuZCB0aGUgYmFyIHRvLlxuICAgKiBAcGFyYW0gaW5zdHJ1Y3Rpb25zIC0gVGhlIGluc3RydWN0aW9ucyB0byByZW5kZXIuXG4gICAqIEByZXR1cm5zIFRoZSBwdXJwb3NlIGVsZW1lbnQgb2YgZWFjaCByZW5kZXJlZCBpbnN0cnVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyT3duSW5zdHJ1Y3Rpb25zKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10pOiBIVE1MU3BhbkVsZW1lbnRbXSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zRWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoQ3NzQ2xhc3MuUHJvbXB0SW5zdHJ1Y3Rpb25zKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGluc3RydWN0aW9uc0VsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRzKTtcblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnMubWFwKChpbnN0cnVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25FbCA9IGluc3RydWN0aW9uc0VsLmNyZWF0ZURpdihDc3NDbGFzcy5Qcm9tcHRJbnN0cnVjdGlvbik7XG4gICAgICBpbnN0cnVjdGlvbkVsLmNyZWF0ZVNwYW4oeyBjbHM6IENzc0NsYXNzLlByb21wdEluc3RydWN0aW9uQ29tbWFuZCwgdGV4dDogaW5zdHJ1Y3Rpb24uY29tbWFuZCB9KTtcbiAgICAgIHJldHVybiBpbnN0cnVjdGlvbkVsLmNyZWF0ZVNwYW4oeyB0ZXh0OiBpbnN0cnVjdGlvbi5wdXJwb3NlIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRmxpcHMgYSBjaGVja2JveCBhbmQgYW5ub3VuY2VzIGl0LCB1bmxlc3MgaXQgaXMgZGlzYWJsZWQuXG4gKlxuICogU2hhcmVkIGJ5IHRoZSBzaG9ydGN1dCBhbmQgdGhlIGJ1dHRvbiBzbyB0aGUgdHdvIHJvdXRlcyBjYW5ub3QgZHJpZnQgXHUyMDE0IGluY2x1ZGluZyB0aGUgZGlzYWJsZWQgZ3VhcmQsXG4gKiB3aGljaCBpcyB0aGUgaGFsZiBtb3N0IGVhc2lseSBmb3Jnb3R0ZW4gb24gb25lIG9mIHRoZW0uXG4gKlxuICogQHBhcmFtIGNoZWNrYm94RWwgLSBUaGUgY2hlY2tib3ggdG8gdG9nZ2xlLlxuICovXG5mdW5jdGlvbiB0b2dnbGVDaGVja2JveChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gIGlmIChjaGVja2JveEVsLmRpc2FibGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNoZWNrYm94RWwuY2hlY2tlZCA9ICFjaGVja2JveEVsLmNoZWNrZWQ7XG4gIGNoZWNrYm94RWwudHJpZ2dlcignY2hhbmdlJyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
458
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL21vZGFscy9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIGJ1aWxkZXIgZm9yIGEgbW9kYWwncyBjb250cm9sIHN0cmlwLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyfSBhc3NlbWJsZXMgdGhlIHN0cmlwIG9mIGNvbnRyb2xzIHNob3duIGF0IHRoZSBib3R0b20gb2YgYSBtb2RhbDpcbiAqIGtleWJvYXJkLWNvbW1hbmQgaGludHMgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZEtleWJvYXJkQ29tbWFuZH0pLCBpbnRlcmFjdGl2ZSBjaGVja2JveGVzIGJvdW5kIHRvXG4gKiBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCAoe0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXIuYWRkQ2hlY2tib3h9KSwgYW5kIGRyb3Bkb3ducyBib3VuZCB0byBhIG1vZGlmaWVyK2tleVxuICogc2hvcnRjdXQgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZERyb3BEb3dufSkuIENoYWluIHRoZSBgYWRkKmAgY2FsbHMsIHRoZW4gYXBwbHkgZXZlcnl0aGluZyB0byBhXG4gKiBtb2RhbCB3aXRoIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfTpcbiAqXG4gKiBgYGB0c1xuICogbmV3IE1vZGFsQ29tbWFuZEJ1aWxkZXIoKVxuICogICAuYWRkS2V5Ym9hcmRDb21tYW5kKHsga2V5OiAnRW50ZXInLCBtb2RpZmllcnM6IFsnTW9kJ10sIG9uS2V5LCBwdXJwb3NlOiAndG8gY3JlYXRlJyB9KVxuICogICAuYWRkQ2hlY2tib3goeyBrZXk6ICcxJywgbW9kaWZpZXJzOiBbJ0FsdCddLCBvbkNoYW5nZSwgb25Jbml0LCBwdXJwb3NlOiAnRml4IGZvb3Rub3RlcycgfSlcbiAqICAgLmJ1aWxkKG1vZGFsKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBzdHJpcCBpcyBkZXNjcmliZWQgYnkgdHdvIGluZGVwZW5kZW50IGF4ZXM6XG4gKlxuICogLSAqKldoZXJlIGl0IGlzIGhvc3RlZC4qKiBBIHtAbGluayBTdWdnZXN0TW9kYWx9IGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnN9IG1vZGVcbiAqICAga2VlcHMgT2JzaWRpYW4ncyBvd24gaW5zdHJ1Y3Rpb24gYmFyIChgc2V0SW5zdHJ1Y3Rpb25zYCArIGBpbnN0cnVjdGlvbnNFbGApLiBFdmVyeSBvdGhlciB0YXJnZXQgXHUyMDE0IGFcbiAqICAgcGxhaW4ge0BsaW5rIE1vZGFsfSwgb3IgYSBiYXJlIHtAbGluayBNb2RhbENvbW1hbmRzSG9zdH0gb2YgYW4gZWxlbWVudCBwbHVzIGEgYFNjb3BlYCBcdTIwMTQgZ2V0cyBhIHN0cmlwXG4gKiAgIGVsZW1lbnQgdGhlIGJ1aWxkZXIgY3JlYXRlcyBpdHNlbGYuXG4gKiAtICoqSG93IGVhY2ggY29udHJvbCBsb29rcy4qKiB7QGxpbmsgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuSW5zdHJ1Y3Rpb25zfSByZW5kZXJzIHRoZSBwdXJwb3NlIHRleHQgd2l0aFxuICogICBhbiBpbmxpbmUgY2hlY2tib3ggb3IgZHJvcGRvd247IHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSByZW5kZXJzIG9uZSBjbGlja2FibGUgYnV0dG9uXG4gKiAgIHBlciBjb250cm9sLCBjYXJyeWluZyBpdHMgcHJlc3NlZCBhbmQgZGlzYWJsZWQgc3RhdGUuXG4gKlxuICogVGhlIGF4ZXMgYXJlIGluZGVwZW5kZW50IGJlY2F1c2UgYSBidXR0b24gc3RyaXAgaW5zaWRlIGEge0BsaW5rIFN1Z2dlc3RNb2RhbH0gaXMgYSByZWFsIGNvbWJpbmF0aW9uLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSBhbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzLCBidXRcbiAqIG9ubHkgcmVuZGVycyB0aGUgY29udHJvbCBVSSBhbmQgcmVnaXN0ZXJzIHRoZSBvcHRpb24tdG9nZ2xlIHNob3J0Y3V0cyB3aGVuXG4gKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAgKHRoZSBkZWZhdWx0KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEluc3RydWN0aW9uLFxuICBLZXltYXBDb250ZXh0LFxuICBNb2RhbCxcbiAgTW9kaWZpZXIsXG4gIFNjb3BlLFxuICBTdWdnZXN0TW9kYWxcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBEcm9wZG93bkNvbXBvbmVudCxcbiAgUGxhdGZvcm1cbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcblxuY29uc3QgS0VZU19NQVAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gIFsnRW50ZXInLCAnXHUyMUI1J10sXG4gIFsnVXBEb3duJywgJ1x1MjE5MVx1MjE5MyddXG5dKTtcblxuLyoqXG4gKiBUaGUgd2F5IHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSByZW5kZXJzIGVhY2ggY29udHJvbC5cbiAqL1xuZXhwb3J0IGVudW0gTW9kYWxDb21tYW5kc1JlbmRlck1vZGUge1xuICAvKipcbiAgICogT25lIGNsaWNrYWJsZSBidXR0b24gcGVyIGNvbnRyb2wsIGNhcnJ5aW5nIGl0cyBwcmVzc2VkIChgYXJpYS1wcmVzc2VkYCkgYW5kIGRpc2FibGVkIHN0YXRlLlxuICAgKlxuICAgKiBPbmx5IGNvbnRyb2xzIHJlYWNoYWJsZSBieSBwb2ludGVyIGFyZSByZW5kZXJlZCBcdTIwMTQgY2hlY2tib3hlcywgYW5kIGtleWJvYXJkIGNvbW1hbmRzIHRoYXQgc3VwcGx5XG4gICAqIHtAbGluayBLZXlib2FyZENvbW1hbmQub25BY3RpdmF0ZX0uIEEgaGludC1vbmx5IG9yIGtleWJvYXJkLW9ubHkgY29tbWFuZCBzdGlsbCByZWdpc3RlcnMgaXRzIGhhbmRsZXJcbiAgICogYnV0IHJlbmRlcnMgbm8gYnV0dG9uLCBiZWNhdXNlIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXMgd29yc2UgdGhhbiBubyBidXR0b24uIEEgZHJvcGRvd24gdGhyb3dzOlxuICAgKiBhIGNvbnRyb2wgdGhhdCBDWUNMRVMgaGFzIG5vIGJ1dHRvbiBmb3JtLlxuICAgKi9cbiAgQnV0dG9ucyA9ICdidXR0b25zJyxcblxuICAvKipcbiAgICogT2JzaWRpYW4ncyBpbnN0cnVjdGlvbi1iYXIgbG9vazogdGhlIHNob3J0Y3V0LCB0aGVuIHRoZSBwdXJwb3NlIHRleHQgd2l0aCBhbiBpbmxpbmUgY2hlY2tib3ggb3JcbiAgICogZHJvcGRvd24uXG4gICAqL1xuICBJbnN0cnVjdGlvbnMgPSAnaW5zdHJ1Y3Rpb25zJ1xufVxuXG4vKipcbiAqIEEgY2hlY2tib3ggY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCB0b2dnbGVzXG4gKiBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja2JveENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kQmFzZSB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY2hlY2tib3ggdmFsdWUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIGlzQ2hlY2tlZCAtIFRoZSBuZXcgY2hlY2tlZCBzdGF0ZS5cbiAgICovXG4gIG9uQ2hhbmdlOiAoaXNDaGVja2VkOiBib29sZWFuKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgb25jZSB3aXRoIHRoZSBjcmVhdGVkIGNoZWNrYm94IGVsZW1lbnQsIHRvIGluaXRpYWxpemUgaXRzIHN0YXRlLlxuICAgKlxuICAgKiBJbiB7QGxpbmsgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuQnV0dG9uc30gbW9kZSB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGJ1dCBuZXZlciBhcHBlbmRlZCBcdTIwMTQgdGhlXG4gICAqIGJ1dHRvbiBpcyBhIHZpZXcgb2YgaXQgXHUyMDE0IHNvIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIGNvZGUgc2VydmVzIGJvdGggcmVuZGVyIG1vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hlY2tib3hFbCAtIFRoZSBjcmVhdGVkIGNoZWNrYm94IGVsZW1lbnQuXG4gICAqL1xuICBvbkluaXQ6IChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBtZW1iZXJzIGV2ZXJ5IGNvbW1hbmQgc2hhcmVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbnRyb2wgY2FuIGJlIHVzZWQgcmlnaHQgbm93LiBXaGVuIGl0IHJldHVybnMgYGZhbHNlYCB0aGUgY29udHJvbCBpcyByZW5kZXJlZFxuICAgKiAqKmRpc2FibGVkIHJhdGhlciB0aGFuIHJlbW92ZWQqKiwgc28gdGhlIHN0cmlwIGRvZXMgbm90IHJlZmxvdyB1bmRlciB0aGUgcG9pbnRlciBhcyBtb2RlcyBjaGFuZ2UgXHUyMDE0XG4gICAqIHdoaWNoIG9uIGEgcGhvbmUgbWVhbnMgYSBtaXMtdGFwLlxuICAgKlxuICAgKiBSZS1yZWFkIGJ5IHtAbGluayBNb2RhbENvbW1hbmRzLnJlZnJlc2h9LiBXaGVuIG9taXR0ZWQsIHRoZSBidWlsZGVyIG5ldmVyIHRvdWNoZXMgdGhlIGNvbnRyb2wnc1xuICAgKiBkaXNhYmxlZCBzdGF0ZSwgbGVhdmluZyB3aGF0ZXZlciB7QGxpbmsgQ2hlY2tib3hDb21tYW5kLm9uSW5pdH0gLyB7QGxpbmsgRHJvcERvd25Db21tYW5kLm9uSW5pdH0gc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb250cm9sIGNhbiBiZSB1c2VkIHJpZ2h0IG5vdy5cbiAgICovXG4gIGNoZWNrSXNBdmFpbGFibGU/OiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IHRoYXQgYWN0aXZhdGVzIHRoZSBjb21tYW5kLlxuICAgKi9cbiAga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllcnMgY29tYmluZWQgd2l0aCB7QGxpbmsgQ29tbWFuZEJhc2Uua2V5fS4gV2hlbiBvbWl0dGVkLCBubyBtb2RpZmllcnMgYXJlIHJlcXVpcmVkLlxuICAgKi9cbiAgbW9kaWZpZXJzPzogTW9kaWZpZXJbXTtcblxuICAvKipcbiAgICogVGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIHNob3duIG5leHQgdG8gdGhlIGNvbnRyb2wuXG4gICAqL1xuICBwdXJwb3NlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBkcm9wZG93biBjb21tYW5kIHNob3duIGluIGEgbW9kYWwncyBjb250cm9sIHN0cmlwIGFuZCBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCB0aGF0IGN5Y2xlc1xuICogdGhyb3VnaCBpdHMgb3B0aW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgaW4ge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9uc30gbW9kZSBvbmx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyb3BEb3duQ29tbWFuZCBleHRlbmRzIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBkcm9wZG93biB2YWx1ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbmV3bHkgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHdpdGggdGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LCB0byBpbml0aWFsaXplIGl0cyBvcHRpb25zIGFuZCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGRyb3Bkb3duQ29tcG9uZW50IC0gVGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgb25Jbml0OiAoZHJvcGRvd25Db21wb25lbnQ6IERyb3Bkb3duQ29tcG9uZW50KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEga2V5Ym9hcmQgY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgb3B0aW9uYWxseSBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleWJvYXJkQ29tbWFuZCBleHRlbmRzIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbW1hbmQgcmVhZHMgYXMgT04uIFN1cHBseSBpdCBmb3IgYSB0b2dnbGUgd2hvc2Ugc3RhdGUgbGl2ZXMgb3V0c2lkZSB0aGUgc3RyaXA7IG9taXQgaXRcbiAgICogZm9yIGFuIGFjdGlvbiwgd2hpY2ggZG9lcyBzb21ldGhpbmcgYW5kIGlzIGRvbmUuIEEge0BsaW5rIENoZWNrYm94Q29tbWFuZH0gbmVlZHMgbm8gZXF1aXZhbGVudCBcdTIwMTQgaXRzXG4gICAqIGNoZWNrYm94IGVsZW1lbnQgaXMgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBSZS1yZWFkIGJ5IHtAbGluayBNb2RhbENvbW1hbmRzLnJlZnJlc2h9LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIHJlYWRzIGFzIE9OLlxuICAgKi9cbiAgY2hlY2tJc09uPzogKCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBvaW50ZXIgcm91dGUgaW50byB0aGUgc2FtZSBoYW5kbGVyIHRoZSBzaG9ydGN1dCBydW5zLiBSZXF1aXJlZCBmb3IgdGhlIGNvbW1hbmQgdG8gcmVuZGVyIGFcbiAgICogYnV0dG9uIGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSBtb2RlIFx1MjAxNCBvbiBhIHBob25lIHRoZXJlIGlzIG5vIG1vZGlmaWVyIGtleSB0b1xuICAgKiBwcmVzcywgc28gdGhpcyBpcyB0aGUgb25seSB3YXkgaW4uXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUgY2xpY2sgZXZlbnQsIHNvIGEgY29tbWFuZCB0aGF0IHBpY2tzIHNvbWV0aGluZyBoYXMgb25lIHRvIGhhbmQgb24uXG4gICAqL1xuICBvbkFjdGl2YXRlPzogKCRldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIGhhbmRsZXIgaW52b2tlZCB3aGVuIHRoZSBzaG9ydGN1dCBpcyBwcmVzc2VkLiBXaGVuIG9taXR0ZWQsIHRoZSBjb21tYW5kIGlzIGEgaGludCBvbmx5IGFuZCBub1xuICAgKiBzY29wZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUga2V5Ym9hcmQgZXZlbnQuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGtleW1hcCBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBgZmFsc2VgIHRvIHByZXZlbnQgT2JzaWRpYW4ncyBkZWZhdWx0IGhhbmRsaW5nLCBvciBgdm9pZGAvYHRydWVgIG90aGVyd2lzZS5cbiAgICovXG4gIG9uS2V5PzogKCRldmVudDogS2V5Ym9hcmRFdmVudCwgY29udGV4dDogS2V5bWFwQ29udGV4dCkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgd2F5IGVhY2ggY29udHJvbCBpcyByZW5kZXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9uc31cbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlck1vZGU/OiBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW5kZXIgdGhlIGNvbnRyb2wgc3RyaXAgKGNoZWNrYm94ZXMsIGRyb3Bkb3ducywga2V5Ym9hcmQgaGludHMpIGFuZCByZWdpc3RlciB0aGVcbiAgICogb3B0aW9uLXRvZ2dsZSBrZXlib2FyZCBzaG9ydGN1dHMuIFdoZW4gYGZhbHNlYCwgbm8gY29udHJvbCBVSSBpcyBzaG93biBhbmQgdGhlIG9wdGlvbi10b2dnbGVcbiAgICogc2hvcnRjdXRzIGFyZSBub3QgcmVnaXN0ZXJlZDsgb25seSB0aGUgZXNzZW50aWFsIG5hdmlnYXRpb24ga2V5IGhhbmRsZXJzIHJlbWFpbiBhY3RpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0luc3RydWN0aW9ucz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGhhbmRsZSByZXR1cm5lZCBieSB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kcyB7XG4gIC8qKlxuICAgKiBCcmluZ3MgZXZlcnkgcmVuZGVyZWQgY29udHJvbCdzIGRpc2FibGVkIGFuZCBwcmVzc2VkIHN0YXRlIHVwIHRvIGRhdGUsIGJ5IHJlLXJlYWRpbmdcbiAgICoge0BsaW5rIENvbW1hbmRCYXNlLmNoZWNrSXNBdmFpbGFibGV9IGFuZCB7QGxpbmsgS2V5Ym9hcmRDb21tYW5kLmNoZWNrSXNPbn0uXG4gICAqXG4gICAqIFRoZSBzdHJpcCBpcyBidWlsdCBvbmNlIGFuZCBvbmx5IHJlLXN0YXRlZCBhZnRlcndhcmRzLCBiZWNhdXNlIHJlYnVpbGRpbmcgaXQgd291bGQgcmVwbGFjZSBhbiBlbGVtZW50XG4gICAqIHRoZSBwb2ludGVyIG1heSBiZSBhYm91dCB0byBjbGljay5cbiAgICovXG4gIHJlZnJlc2g6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBiYXJlIGhvc3QgZm9yIGEgY29udHJvbCBzdHJpcDogdGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8sIHBsdXMgdGhlIHNjb3BlIHRvIHJlZ2lzdGVyIHNob3J0Y3V0cyB3aXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQ29tbWFuZHNIb3N0IHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoZSBjb250cm9sIHN0cmlwIGlzIGFwcGVuZGVkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgdGhlIHNob3J0Y3V0cyBhcmUgcmVnaXN0ZXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IFNjb3BlO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHRhcmdldCB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0gYWNjZXB0cy5cbiAqL1xuZXhwb3J0IHR5cGUgTW9kYWxDb21tYW5kc1RhcmdldCA9IE1vZGFsIHwgTW9kYWxDb21tYW5kc0hvc3QgfCBTdWdnZXN0TW9kYWw8dW5rbm93bj47XG5cbi8qKlxuICogT25lIGFjY3VtdWxhdGVkIGNvbW1hbmQsIHJlZHVjZWQgdG8gdGhlIGhhbmRmdWwgb2YgdGhpbmdzIGJvdGggcmVuZGVyZXJzIG5lZWQuXG4gKlxuICogT3B0aW9uYWwgY29sbGFib3JhdG9ycyBhcmUgYG51bGwgfCBYYCByZXF1aXJlZCBmaWVsZHMgcmF0aGVyIHRoYW4gYD9gLCBzbyBldmVyeSBjb25zdHJ1Y3Rpb24gc2l0ZSBoYXMgdG9cbiAqIHNheSB3aGljaCBvbmVzIGl0IGhhcy5cbiAqL1xuLyoqXG4gKiBPbmUgY29udHJvbCByZW5kZXJlZCBhcyBhIEJVVFRPTi5cbiAqXG4gKiBJdCByZXBvcnRzIGl0cyBvd24gcHJlc3NlZCBzdGF0ZSwgYmVjYXVzZSBvbmx5IHRoZSBidXR0b24gcmVuZGVyZXIgaGFzIGFueXdoZXJlIHRvIHNob3cgb25lLlxuICovXG5pbnRlcmZhY2UgQnV0dG9uQ29udHJvbCB7XG4gIGNoZWNrSXNPbjogKCkgPT4gYm9vbGVhbjtcbiAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQ29tbWFuZEVudHJ5IHtcbiAgcmVhZG9ubHkgY2hlY2tJc0F2YWlsYWJsZTogKCgpID0+IGJvb2xlYW4pIHwgbnVsbDtcbiAgcmVhZG9ubHkgY29tbWFuZFRleHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgaW5pdEJ1dHRvbjogKChidXR0b25FbDogSFRNTEJ1dHRvbkVsZW1lbnQsIHNjb3BlOiBTY29wZSkgPT4gQnV0dG9uQ29udHJvbCkgfCBudWxsO1xuICByZWFkb25seSBpbml0SW5zdHJ1Y3Rpb246ICgocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSkgPT4gSW5zdHJ1Y3Rpb25Db250cm9sKSB8IG51bGw7XG4gIHJlYWRvbmx5IGlzRHJvcERvd246IGJvb2xlYW47XG4gIHJlYWRvbmx5IHB1cnBvc2U6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaXN0ZXJTY29wZTogKChzY29wZTogU2NvcGUpID0+IHZvaWQpIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBPbmUgY29udHJvbCByZW5kZXJlZCBpbnRvIGFuIElOU1RSVUNUSU9OIGJhci5cbiAqXG4gKiBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gcHJlc3NlZCBzdGF0ZSBoZXJlOiB0aGUgY29udHJvbCBcdTIwMTQgYSBjaGVja2JveCwgYSBkcm9wZG93biBcdTIwMTQgc2hvd3MgaXRzIG93bixcbiAqIHNvIGEgc2Vjb25kIGNvcHkgd291bGQgb25seSBiZSBhIHNlY29uZCB0aGluZyB0byBrZWVwIGluIHN5bmMuXG4gKi9cbmludGVyZmFjZSBJbnN0cnVjdGlvbkNvbnRyb2wge1xuICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBJbnN0cnVjdGlvbkV4IGV4dGVuZHMgSW5zdHJ1Y3Rpb24ge1xuICByZWFkb25seSBlbnRyeTogQ29tbWFuZEVudHJ5O1xufVxuXG4vKipcbiAqIFJlLXN0YXRlcyBvbmUgcmVuZGVyZWQgY29udHJvbCwgYWxyZWFkeSBib3VuZCB0byBpdHMgb3duIGVsZW1lbnRzLlxuICovXG50eXBlIFJlZnJlc2hDb250cm9sID0gKCkgPT4gdm9pZDtcblxuY29uc3QgTk9PUF9NT0RBTF9DT01NQU5EUzogTW9kYWxDb21tYW5kcyA9IHtcbiAgcmVmcmVzaDogKCk6IHZvaWQgPT4ge1xuICAgIC8vIE5vdGhpbmcgd2FzIHJlbmRlcmVkLCBzbyB0aGVyZSBpcyBubyBzdGF0ZSB0byByZS1zdGF0ZS5cbiAgfVxufTtcblxuLyoqXG4gKiBCdWlsZHMgYSBtb2RhbCdzIGNvbnRyb2wgc3RyaXAgZnJvbSBrZXlib2FyZCBjb21tYW5kcywgaW50ZXJhY3RpdmUgY2hlY2tib3hlcywgYW5kIGRyb3Bkb3ducywgdGhlblxuICogYXBwbGllcyB0aGVtIHRvIGEgbW9kYWwgdmlhIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGFsQ29tbWFuZEJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJpZXM6IENvbW1hbmRFbnRyeVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gaW50ZXJhY3RpdmUgY2hlY2tib3ggdG8gdGhlIGNvbnRyb2wgc3RyaXAsIGJvdW5kIHRvIGEgbW9kaWZpZXIra2V5IHNob3J0Y3V0IHRoYXQgdG9nZ2xlcyBpdC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY2hlY2tib3ggY29tbWFuZCB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBhZGRDaGVja2JveChjb21tYW5kOiBDaGVja2JveENvbW1hbmQpOiB0aGlzIHtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICBjaGVja0lzQXZhaWxhYmxlOiBjb21tYW5kLmNoZWNrSXNBdmFpbGFibGUgPz8gbnVsbCxcbiAgICAgIGNvbW1hbmRUZXh0OiB0aGlzLmJ1aWxkQ29tbWFuZFRleHQoY29tbWFuZCksXG4gICAgICBpbml0QnV0dG9uOiAoYnV0dG9uRWw6IEhUTUxCdXR0b25FbGVtZW50LCBzY29wZTogU2NvcGUpOiBCdXR0b25Db250cm9sID0+IHtcbiAgICAgICAgLy8gQ3JlYXRlZCBidXQgbmV2ZXIgYXBwZW5kZWQ6IHRoZSBjaGVja2JveCBob2xkcyB0aGUgc3RhdGUgYW5kIHRoZSBidXR0b24gaXMgYSB2aWV3IG9mIGl0LCBzb1xuICAgICAgICAvLyBgb25Jbml0YCAvIGBvbkNoYW5nZWAgbWVhbiBleGFjdGx5IHRoZSBzYW1lIHRoaW5nIGluIGJvdGggcmVuZGVyIG1vZGVzLlxuICAgICAgICBjb25zdCBjaGVja2JveEVsID0gY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pO1xuICAgICAgICBpbml0Q2hlY2tib3goY2hlY2tib3hFbCwgc2NvcGUpO1xuICAgICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICB0b2dnbGVDaGVja2JveChjaGVja2JveEVsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hlY2tJc09uOiAoKTogYm9vbGVhbiA9PiBjaGVja2JveEVsLmNoZWNrZWQsXG4gICAgICAgICAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjaGVja2JveEVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgICAgIGJ1dHRvbkVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgaW5pdEluc3RydWN0aW9uOiAocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IEluc3RydWN0aW9uQ29udHJvbCA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94RWwgPSBwdXJwb3NlRWwuY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pO1xuICAgICAgICAvLyBUaGUgZ2FwIGdvZXMgb24gdGhlIGNvbnRyb2wsIG5vdCBvbiB0aGUgc3RyaXAsIHNvIGl0IGxhbmRzIG9uIEJPVEggcmVuZGVyIHBhdGhzOiBhXG4gICAgICAgIC8vIGBTdWdnZXN0TW9kYWxgJ3MgbmF0aXZlIGJhciBob3N0cyB0aGUgc2FtZSBjaGVja2JveCwgYW5kIHRoaXMgbGlicmFyeSBuZXZlciB0b3VjaGVzIHRoYXQgYmFyJ3MgZWxlbWVudC5cbiAgICAgICAgYWRkUGx1Z2luQ3NzQ2xhc3NlcyhjaGVja2JveEVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRDb250cm9sKTtcbiAgICAgICAgcmV0dXJuIGluaXRDaGVja2JveChjaGVja2JveEVsLCBzY29wZSk7XG4gICAgICB9LFxuICAgICAgaXNEcm9wRG93bjogZmFsc2UsXG4gICAgICBwdXJwb3NlOiBjb21tYW5kLnB1cnBvc2UsXG4gICAgICByZWdpc3RlclNjb3BlOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgICBmdW5jdGlvbiBpbml0Q2hlY2tib3goY2hlY2tib3hFbDogSFRNTElucHV0RWxlbWVudCwgc2NvcGU6IFNjb3BlKTogSW5zdHJ1Y3Rpb25Db250cm9sIHtcbiAgICAgIGNvbW1hbmQub25Jbml0KGNoZWNrYm94RWwpO1xuICAgICAgY2hlY2tib3hFbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbW1hbmQub25DaGFuZ2UoY2hlY2tib3hFbC5jaGVja2VkKTtcbiAgICAgIH0pO1xuXG4gICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksICgpID0+IHtcbiAgICAgICAgdG9nZ2xlQ2hlY2tib3goY2hlY2tib3hFbCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgY2hlY2tib3hFbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBkcm9wZG93biB0byB0aGUgY29udHJvbCBzdHJpcCwgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCBjeWNsZXMgdGhyb3VnaCBpdHNcbiAgICogb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgZHJvcGRvd24gY29tbWFuZCB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBhZGREcm9wRG93bihjb21tYW5kOiBEcm9wRG93bkNvbW1hbmQpOiB0aGlzIHtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICBjaGVja0lzQXZhaWxhYmxlOiBjb21tYW5kLmNoZWNrSXNBdmFpbGFibGUgPz8gbnVsbCxcbiAgICAgIGNvbW1hbmRUZXh0OiB0aGlzLmJ1aWxkQ29tbWFuZFRleHQoY29tbWFuZCksXG4gICAgICBpbml0QnV0dG9uOiBudWxsLFxuICAgICAgaW5pdEluc3RydWN0aW9uOiAocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IEluc3RydWN0aW9uQ29udHJvbCA9PiB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duQ29tcG9uZW50ID0gbmV3IERyb3Bkb3duQ29tcG9uZW50KHB1cnBvc2VFbCk7XG4gICAgICAgIC8vIFRoZSBzYW1lIGdhcCB0aGUgY2hlY2tib3ggZ2V0cywgc28gdGhlIHR3byBjb250cm9scyBhcmUgc2VwYXJhdGVkIGZyb20gdGhlaXIgbGFiZWwgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IFx1MjAxNCBhIHJlYWwgcnVsZSByYXRoZXIgdGhhbiB0aGUgbGl0ZXJhbCBzcGFjZSB0aGlzIHVzZWQgdG8gYXBwZW5kLlxuICAgICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGRyb3Bkb3duQ29tcG9uZW50LnNlbGVjdEVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRDb250cm9sKTtcbiAgICAgICAgY29tbWFuZC5vbkluaXQoZHJvcGRvd25Db21wb25lbnQpO1xuICAgICAgICBkcm9wZG93bkNvbXBvbmVudC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBjb21tYW5kLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIGRlZmVuc2l2ZSA/PyBvbiBvcHRpb25hbCBtb2RpZmllcnMuICovXG4gICAgICAgIHNjb3BlLnJlZ2lzdGVyKGNvbW1hbmQubW9kaWZpZXJzID8/IFtdLCBjb21tYW5kLmtleSwgKCkgPT4ge1xuICAgICAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgaWYgKGRyb3Bkb3duQ29tcG9uZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNlbGVjdEVsID0gZHJvcGRvd25Db21wb25lbnQuc2VsZWN0RWw7XG4gICAgICAgICAgc2VsZWN0RWwuc2VsZWN0ZWRJbmRleCA9IChzZWxlY3RFbC5zZWxlY3RlZEluZGV4ICsgMSkgJSBzZWxlY3RFbC5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICBzZWxlY3RFbC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGRyb3Bkb3duQ29tcG9uZW50LnNldERpc2FibGVkKGlzRGlzYWJsZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBpc0Ryb3BEb3duOiB0cnVlLFxuICAgICAgcHVycG9zZTogY29tbWFuZC5wdXJwb3NlLFxuICAgICAgcmVnaXN0ZXJTY29wZTogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBrZXlib2FyZCBjb21tYW5kIHRvIHRoZSBjb250cm9sIHN0cmlwLiBXaGVuIHtAbGluayBLZXlib2FyZENvbW1hbmQub25LZXl9IGlzIHByb3ZpZGVkLCBpdHNcbiAgICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIG1vZGFsIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNvbW1hbmQgaXMgYSBoaW50IG9ubHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGtleWJvYXJkIGNvbW1hbmQgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgYWRkS2V5Ym9hcmRDb21tYW5kKGNvbW1hbmQ6IEtleWJvYXJkQ29tbWFuZCk6IHRoaXMge1xuICAgIGNvbnN0IGNoZWNrSXNPbiA9IGNvbW1hbmQuY2hlY2tJc09uID8/ICgoKTogYm9vbGVhbiA9PiBmYWxzZSk7XG4gICAgY29uc3Qgb25BY3RpdmF0ZSA9IGNvbW1hbmQub25BY3RpdmF0ZSA/PyBudWxsO1xuICAgIGNvbnN0IG9uS2V5ID0gY29tbWFuZC5vbktleT8uYmluZChjb21tYW5kKSA/PyBudWxsO1xuXG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgY2hlY2tJc0F2YWlsYWJsZTogY29tbWFuZC5jaGVja0lzQXZhaWxhYmxlID8/IG51bGwsXG4gICAgICBjb21tYW5kVGV4dDogdGhpcy5idWlsZENvbW1hbmRUZXh0KGNvbW1hbmQpLFxuICAgICAgaW5pdEJ1dHRvbjogb25BY3RpdmF0ZVxuICAgICAgICAvLyBObyBkaXNhYmxlZCBndWFyZCBvbiB0aGUgbGlzdGVuZXI6IGEgZGlzYWJsZWQgYnV0dG9uIGZpcmVzIG5vIGNsaWNrIGF0IGFsbCwgc28gYHNldERpc2FibGVkYFxuICAgICAgICAvLyBiZWxvdyBpcyB0aGUgd2hvbGUgZ2F0ZS5cbiAgICAgICAgPyAoYnV0dG9uRWw6IEhUTUxCdXR0b25FbGVtZW50KTogQnV0dG9uQ29udHJvbCA9PiB7XG4gICAgICAgICAgYnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBvbkFjdGl2YXRlKCRldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoZWNrSXNPbixcbiAgICAgICAgICAgIHNldERpc2FibGVkOiAoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBidXR0b25FbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICBpbml0SW5zdHJ1Y3Rpb246IG51bGwsXG4gICAgICBpc0Ryb3BEb3duOiBmYWxzZSxcbiAgICAgIHB1cnBvc2U6IGNvbW1hbmQucHVycG9zZSxcbiAgICAgIHJlZ2lzdGVyU2NvcGU6IG9uS2V5XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBkZWZlbnNpdmUgPz8gb24gb3B0aW9uYWwgbW9kaWZpZXJzLiAqL1xuICAgICAgICA/IChzY29wZTogU2NvcGUpOiB2b2lkID0+IHtcbiAgICAgICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksIG9uS2V5KTtcbiAgICAgICAgfVxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyB0byBhIG1vZGFsLiBBbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5XG4gICAqIGhhbmRsZXJzOyBvbmx5IHJlbmRlcnMgdGhlIGNvbnRyb2wgc3RyaXAgYW5kIHJlZ2lzdGVycyB0aGUgb3B0aW9uLXRvZ2dsZSBzaG9ydGN1dHMgd2hlblxuICAgKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgbW9kYWwsIG9yIHRoZSBiYXJlIGVsZW1lbnQgKyBzY29wZSwgdG8gYXBwbHkgdGhlIGNvbW1hbmRzIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBidWlsZCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBIGhhbmRsZSB3aG9zZSB7QGxpbmsgTW9kYWxDb21tYW5kcy5yZWZyZXNofSByZS1zdGF0ZXMgZXZlcnkgcmVuZGVyZWQgY29udHJvbC5cbiAgICovXG4gIHB1YmxpYyBidWlsZCh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQsIG9wdGlvbnM6IE1vZGFsQ29tbWFuZEJ1aWxkZXJCdWlsZE9wdGlvbnMgPSB7fSk6IE1vZGFsQ29tbWFuZHMge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlbmRlck1vZGUgPSBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnMsXG4gICAgICBzaG91bGRTaG93SW5zdHJ1Y3Rpb25zID0gdHJ1ZVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3Qgc2NvcGUgPSB0YXJnZXQuc2NvcGU7XG5cbiAgICAvLyBFc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzIG11c3Qgc3RheSBhY3RpdmUgZXZlbiB3aGVuIHRoZSBjb250cm9sIHN0cmlwIGlzIGhpZGRlbi5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgZW50cnkucmVnaXN0ZXJTY29wZT8uKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoIXNob3VsZFNob3dJbnN0cnVjdGlvbnMpIHtcbiAgICAgIHJldHVybiBOT09QX01PREFMX0NPTU1BTkRTO1xuICAgIH1cblxuICAgIC8vIEVhY2ggcmVuZGVyZXIgaGFuZHMgYmFjayBvbmUgY2xvc3VyZSBwZXIgY29udHJvbCBpdCBhY3R1YWxseSBkcmV3LCBhbHJlYWR5IGJvdW5kIHRvIHRoYXQgY29udHJvbCdzXG4gICAgLy8gZWxlbWVudHMgXHUyMDE0IHNvIGByZWZyZXNoYCBuZXZlciBoYXMgdG8ga25vdyB3aGljaCBvZiB0aGUgdHdvIHNoYXBlcyBpdCBpcyByZS1zdGF0aW5nLlxuICAgIGNvbnN0IHJlZnJlc2hlcnMgPSByZW5kZXJNb2RlID09PSBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zXG4gICAgICA/IHRoaXMucmVuZGVyQnV0dG9ucyh0YXJnZXQsIHNjb3BlKVxuICAgICAgOiB0aGlzLnJlbmRlckluc3RydWN0aW9ucyh0YXJnZXQsIHNjb3BlKTtcblxuICAgIGNvbnN0IG1vZGFsQ29tbWFuZHM6IE1vZGFsQ29tbWFuZHMgPSB7XG4gICAgICByZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcmVmcmVzaENvbnRyb2wgb2YgcmVmcmVzaGVycykge1xuICAgICAgICAgIHJlZnJlc2hDb250cm9sKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIG1vZGFsQ29tbWFuZHMucmVmcmVzaCgpO1xuICAgIHJldHVybiBtb2RhbENvbW1hbmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbW1hbmRUZXh0KGNvbW1hbmQ6IENvbW1hbmRCYXNlKTogc3RyaW5nIHtcbiAgICBsZXQgY29tbWFuZFRleHQgPSBLRVlTX01BUC5nZXQoY29tbWFuZC5rZXkpID8/IGNvbW1hbmQua2V5O1xuXG4gICAgZm9yIChjb25zdCBtb2RpZmllciBvZiBjb21tYW5kLm1vZGlmaWVycyA/PyBbXSkge1xuICAgICAgY29tbWFuZFRleHQgPSBgJHt0aGlzLmdldE1vZGlmaWVyU3RyaW5nKG1vZGlmaWVyKX0gJHtjb21tYW5kVGV4dH1gO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kVGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kaWZpZXJTdHJpbmcobW9kaWZpZXI6IE1vZGlmaWVyKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICBjYXNlICdBbHQnOiB7XG4gICAgICAgIHJldHVybiAnYWx0JztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0N0cmwnOiB7XG4gICAgICAgIHJldHVybiAnY3RybCc7XG4gICAgICB9XG4gICAgICBjYXNlICdNZXRhJzoge1xuICAgICAgICByZXR1cm4gUGxhdGZvcm0uaXNNYWNPUyA/ICdjbWQnIDogJ3dpbic7XG4gICAgICB9XG4gICAgICBjYXNlICdNb2QnOiB7XG4gICAgICAgIHJldHVybiBQbGF0Zm9ybS5pc01hY09TID8gJ2NtZCcgOiAnY3RybCc7XG4gICAgICB9XG4gICAgICBjYXNlICdTaGlmdCc6IHtcbiAgICAgICAgcmV0dXJuICdzaGlmdCc7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBtb2RpZmllcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIGVsZW1lbnQgYSBzZWxmLWNyZWF0ZWQgc3RyaXAgaXMgYXBwZW5kZWQgdG8uXG4gICAqXG4gICAqIEEge0BsaW5rIE1vZGFsfSBjYXJyaWVzIGJvdGggYG1vZGFsRWxgIGFuZCBhIGBjb250YWluZXJFbGAgdGhhdCBpcyB0aGUgT1VURVIgYC5tb2RhbC1jb250YWluZXJgLCBzb1xuICAgKiBgbW9kYWxFbGAgaGFzIHRvIHdpbiBcdTIwMTQgb3RoZXJ3aXNlIHRoZSBzdHJpcCBsYW5kcyBvdXRzaWRlIHRoZSBtb2RhbCBmcmFtZS4gRGlzY3JpbWluYXRlZCB3aXRoIGBpbmBcbiAgICogcmF0aGVyIHRoYW4gYSBwcm9wZXJ0eSByZWFkLCBiZWNhdXNlIHRlc3RzIGhhbmQgYGJ1aWxkYCBhIGBzdHJpY3RQcm94eWAgbW9jayB3aG9zZSBgZ2V0YCB0cmFwIHRocm93c1xuICAgKiBvbiB1bm1vY2tlZCBtZW1iZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIGJ1aWxkIHRhcmdldC5cbiAgICogQHJldHVybnMgVGhlIGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBzdHJpcCB0by5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RyaXBDb250YWluZXJFbCh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuICdtb2RhbEVsJyBpbiB0YXJnZXQgPyB0YXJnZXQubW9kYWxFbCA6IHRhcmdldC5jb250YWluZXJFbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnV0dG9ucyh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQsIHNjb3BlOiBTY29wZSk6IFJlZnJlc2hDb250cm9sW10ge1xuICAgIGNvbnN0IHN0cmlwRWwgPSB0aGlzLmdldFN0cmlwQ29udGFpbmVyRWwodGFyZ2V0KS5jcmVhdGVEaXYoKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHN0cmlwRWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZHMpO1xuXG4gICAgY29uc3QgcmVmcmVzaGVyczogUmVmcmVzaENvbnRyb2xbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGlmIChlbnRyeS5pc0Ryb3BEb3duKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlbmRlciBkcm9wZG93biBjb21tYW5kIFwiJHtlbnRyeS5wdXJwb3NlfVwiIGFzIGEgYnV0dG9uOiBhIGNvbnRyb2wgdGhhdCBjeWNsZXMgaGFzIG5vIGJ1dHRvbiBmb3JtLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVudHJ5LmluaXRCdXR0b24pIHtcbiAgICAgICAgLy8gSGludC1vbmx5IGFuZCBrZXlib2FyZC1vbmx5IGNvbW1hbmRzIGhhdmUgbm8gcG9pbnRlciByb3V0ZSwgYW5kIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXNcbiAgICAgICAgLy8gd29yc2UgdGhhbiBubyBidXR0b24uIFRoZWlyIHNjb3BlIGhhbmRsZXJzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBidXR0b25FbCA9IHN0cmlwRWwuY3JlYXRlRWwoJ2J1dHRvbicsIHsgdHlwZTogJ2J1dHRvbicgfSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGJ1dHRvbkVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmQpO1xuICAgICAgYnV0dG9uRWwuY3JlYXRlU3Bhbih7IHRleHQ6IGVudHJ5LnB1cnBvc2UgfSk7XG5cbiAgICAgIC8vIFRoZSBob3RrZXkgaXMgc2hvd24gb25seSB3aGVyZSBvbmUgY2FuIGJlIHByZXNzZWQuIE9uIGEgcGhvbmUgdGhlcmUgaXMgbm8gbW9kaWZpZXIga2V5IHRvIG9mZmVyLFxuICAgICAgLy8gYW5kIHRoZSBidXR0b24gSVMgdGhlIG9ubHkgd2F5IGluIFx1MjAxNCB3aGljaCBpcyB3aHkgdGhlIHN0cmlwIGV4aXN0cy5cbiAgICAgIGlmICghUGxhdGZvcm0uaXNNb2JpbGUpIHtcbiAgICAgICAgY29uc3QgaG90a2V5RWwgPSBidXR0b25FbC5jcmVhdGVTcGFuKHsgdGV4dDogZW50cnkuY29tbWFuZFRleHQgfSk7XG4gICAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoaG90a2V5RWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZEhvdGtleSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBpbnB1dCBrZWVwcyBmb2N1czogYSBtb2RhbCB0aGF0IGZpbHRlcnMgYXMgeW91IHR5cGUgd291bGQgZW5kIGl0cyBzZWFyY2ggbWlkLXdvcmQgaWYgYSBjbGlja1xuICAgICAgLy8gc3RvbGUgZm9jdXMuXG4gICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJ1dHRvbkNvbnRyb2wgPSBlbnRyeS5pbml0QnV0dG9uKGJ1dHRvbkVsLCBzY29wZSk7XG4gICAgICBjb25zdCBjaGVja0lzQXZhaWxhYmxlID0gZW50cnkuY2hlY2tJc0F2YWlsYWJsZTtcbiAgICAgIHJlZnJlc2hlcnMucHVzaCgoKSA9PiB7XG4gICAgICAgIGlmIChjaGVja0lzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgYnV0dG9uQ29udHJvbC5zZXREaXNhYmxlZCghY2hlY2tJc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc09uID0gYnV0dG9uQ29udHJvbC5jaGVja0lzT24oKTtcbiAgICAgICAgYnV0dG9uRWwudG9nZ2xlQ2xhc3MoQ3NzQ2xhc3MuSXNBY3RpdmUsIGlzT24pO1xuICAgICAgICBidXR0b25FbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIFN0cmluZyhpc09uKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmcmVzaGVycztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVySW5zdHJ1Y3Rpb25zKHRhcmdldDogTW9kYWxDb21tYW5kc1RhcmdldCwgc2NvcGU6IFNjb3BlKTogUmVmcmVzaENvbnRyb2xbXSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10gPSB0aGlzLmVudHJpZXMubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGNvbW1hbmQ6IGVudHJ5LmNvbW1hbmRUZXh0LFxuICAgICAgZW50cnksXG4gICAgICBwdXJwb3NlOiBlbnRyeS5wdXJwb3NlXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcHVycG9zZUVscyA9ICdzZXRJbnN0cnVjdGlvbnMnIGluIHRhcmdldFxuICAgICAgPyB0aGlzLnJlbmRlck5hdGl2ZUluc3RydWN0aW9ucyh0YXJnZXQsIGluc3RydWN0aW9ucylcbiAgICAgIDogdGhpcy5yZW5kZXJPd25JbnN0cnVjdGlvbnModGhpcy5nZXRTdHJpcENvbnRhaW5lckVsKHRhcmdldCksIGluc3RydWN0aW9ucyk7XG5cbiAgICBjb25zdCByZWZyZXNoZXJzOiBSZWZyZXNoQ29udHJvbFtdID0gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGluc3RydWN0aW9uXSBvZiBpbnN0cnVjdGlvbnMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwdXJwb3NlRWwgPSBwdXJwb3NlRWxzW2luZGV4XTtcbiAgICAgIC8vIEEgaG9zdCBtYXkgcmVuZGVyIGZld2VyIHB1cnBvc2UgZWxlbWVudHMgdGhhbiB0aGVyZSBhcmUgaW5zdHJ1Y3Rpb25zOyBza2lwIHJhdGhlciB0aGFuIHRocm93LlxuICAgICAgaWYgKCFwdXJwb3NlRWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluc3RydWN0aW9uQ29udHJvbCA9IGluc3RydWN0aW9uLmVudHJ5LmluaXRJbnN0cnVjdGlvbj8uKHB1cnBvc2VFbCwgc2NvcGUpO1xuICAgICAgY29uc3QgY2hlY2tJc0F2YWlsYWJsZSA9IGluc3RydWN0aW9uLmVudHJ5LmNoZWNrSXNBdmFpbGFibGU7XG4gICAgICAvLyBBIGNvbnRyb2wgc2hvd3MgaXRzIG93biBwcmVzc2VkIHN0YXRlIGhlcmUsIHNvIGF2YWlsYWJpbGl0eSBpcyB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHJlLXN0YXRlIFx1MjAxNFxuICAgICAgLy8gYW5kIGEgY29tbWFuZCB0aGF0IGRlY2xhcmVzIG5vbmUgbmVlZHMgbm8gcmVmcmVzaGVyIGF0IGFsbC5cbiAgICAgIGlmIChpbnN0cnVjdGlvbkNvbnRyb2wgJiYgY2hlY2tJc0F2YWlsYWJsZSkge1xuICAgICAgICByZWZyZXNoZXJzLnB1c2goKCkgPT4ge1xuICAgICAgICAgIGluc3RydWN0aW9uQ29udHJvbC5zZXREaXNhYmxlZCghY2hlY2tJc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZnJlc2hlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aHJvdWdoIE9ic2lkaWFuJ3Mgb3duIGluc3RydWN0aW9uIGJhciwgdGhlIHdheSBldmVyeSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSBjb25zdW1lciBoYXMgYWx3YXlzXG4gICAqIGhhZCBpdC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGFsIC0gVGhlIHN1Z2dlc3QgbW9kYWwuXG4gICAqIEBwYXJhbSBpbnN0cnVjdGlvbnMgLSBUaGUgaW5zdHJ1Y3Rpb25zIHRvIHJlbmRlci5cbiAgICogQHJldHVybnMgVGhlIHB1cnBvc2UgZWxlbWVudCBvZiBlYWNoIHJlbmRlcmVkIGluc3RydWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJOYXRpdmVJbnN0cnVjdGlvbnMobW9kYWw6IFN1Z2dlc3RNb2RhbDx1bmtub3duPiwgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10pOiBIVE1MU3BhbkVsZW1lbnRbXSB7XG4gICAgbW9kYWwuc2V0SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgcmV0dXJuIFsuLi5tb2RhbC5pbnN0cnVjdGlvbnNFbC5maW5kQWxsKCcucHJvbXB0LWluc3RydWN0aW9uID4gc3BhbjpudGgtY2hpbGQoMiknKV0gYXMgSFRNTFNwYW5FbGVtZW50W107XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhbiBpbnN0cnVjdGlvbiBiYXIgb2YgdGhlIGJ1aWxkZXIncyBvd24sIGZvciBhIGhvc3QgdGhhdCBoYXMgbm9uZS5cbiAgICpcbiAgICogVGhlIG1hcmt1cCBtaXJyb3JzIHdoYXQgYHNldEluc3RydWN0aW9uc2AgcHJvZHVjZXMgXHUyMDE0IGluY2x1ZGluZ1xuICAgKiB7QGxpbmsgQ3NzQ2xhc3MuUHJvbXB0SW5zdHJ1Y3Rpb25Db21tYW5kfSBvbiB0aGUga2V5IGhpbnQsIHdoaWNoIGlzIG5vdCBkZWNvcmF0aW9uOiBPYnNpZGlhbidzIHJ1bGVcbiAgICogZm9yIHRoYXQgY2xhc3MgaXMgd2hhdCBzdXBwbGllcyB0aGUgaGludCdzIGJvbGQgd2VpZ2h0IGFuZCB0aGUgYG1hcmdpbi1pbmxpbmUtZW5kYCBzZXBhcmF0aW5nIGl0XG4gICAqIGZyb20gdGhlIHB1cnBvc2UgdGV4dC4gRXZlcnkgY2xhc3MgaGVyZSBpcyB1bnNjb3BlZCBpbiB0aGUgYXBwJ3Mgc3R5bGVzaGVldCwgc28gYWxsIG9mIGl0IHJlYWNoZXMgYVxuICAgKiBwbGFpbiB7QGxpbmsgTW9kYWx9IGFzIHJlYWRpbHkgYXMgaXQgcmVhY2hlcyB0aGUgcXVpY2sgc3dpdGNoZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIGFwcGVuZCB0aGUgYmFyIHRvLlxuICAgKiBAcGFyYW0gaW5zdHJ1Y3Rpb25zIC0gVGhlIGluc3RydWN0aW9ucyB0byByZW5kZXIuXG4gICAqIEByZXR1cm5zIFRoZSBwdXJwb3NlIGVsZW1lbnQgb2YgZWFjaCByZW5kZXJlZCBpbnN0cnVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyT3duSW5zdHJ1Y3Rpb25zKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10pOiBIVE1MU3BhbkVsZW1lbnRbXSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zRWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoQ3NzQ2xhc3MuUHJvbXB0SW5zdHJ1Y3Rpb25zKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGluc3RydWN0aW9uc0VsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRzKTtcblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnMubWFwKChpbnN0cnVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25FbCA9IGluc3RydWN0aW9uc0VsLmNyZWF0ZURpdihDc3NDbGFzcy5Qcm9tcHRJbnN0cnVjdGlvbik7XG4gICAgICBpbnN0cnVjdGlvbkVsLmNyZWF0ZVNwYW4oeyBjbHM6IENzc0NsYXNzLlByb21wdEluc3RydWN0aW9uQ29tbWFuZCwgdGV4dDogaW5zdHJ1Y3Rpb24uY29tbWFuZCB9KTtcbiAgICAgIHJldHVybiBpbnN0cnVjdGlvbkVsLmNyZWF0ZVNwYW4oeyB0ZXh0OiBpbnN0cnVjdGlvbi5wdXJwb3NlIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRmxpcHMgYSBjaGVja2JveCBhbmQgYW5ub3VuY2VzIGl0LCB1bmxlc3MgaXQgaXMgZGlzYWJsZWQuXG4gKlxuICogU2hhcmVkIGJ5IHRoZSBzaG9ydGN1dCBhbmQgdGhlIGJ1dHRvbiBzbyB0aGUgdHdvIHJvdXRlcyBjYW5ub3QgZHJpZnQgXHUyMDE0IGluY2x1ZGluZyB0aGUgZGlzYWJsZWQgZ3VhcmQsXG4gKiB3aGljaCBpcyB0aGUgaGFsZiBtb3N0IGVhc2lseSBmb3Jnb3R0ZW4gb24gb25lIG9mIHRoZW0uXG4gKlxuICogQHBhcmFtIGNoZWNrYm94RWwgLSBUaGUgY2hlY2tib3ggdG8gdG9nZ2xlLlxuICovXG5mdW5jdGlvbiB0b2dnbGVDaGVja2JveChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gIGlmIChjaGVja2JveEVsLmRpc2FibGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNoZWNrYm94RWwuY2hlY2tlZCA9ICFjaGVja2JveEVsLmNoZWNrZWQ7XG4gIGNoZWNrYm94RWwudHJpZ2dlcignY2hhbmdlJyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -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
  }
@@ -197,4 +173,4 @@ async function showModal(modalCreator) {
197
173
  ModalBase,
198
174
  showModal
199
175
  });
200
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL21vZGFscy9tb2RhbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBiYXNlIGNsYXNzIGZvciBkaXNwbGF5aW5nIG1vZGFscyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2VSZXNvbHZlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tY29udGV4dC50cyc7XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBNb2RhbEJhc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcmVzb2x2ZWQgYnkgdGhlIG1vZGFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zPFZhbHVlPiBleHRlbmRzIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIHZhbHVlIG9mIHRoZSBtb2RhbC5cbiAgICovXG4gIHJlYWRvbmx5IHByb21pc2VSZXNvbHZlOiBQcm9taXNlUmVzb2x2ZTxWYWx1ZT47XG59XG5cbi8qKlxuICogQmFzZSBvcHRpb25zIGZvciBhIG1vZGFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gdGhlIG1vZGFsLlxuICAgKi9cbiAgcmVhZG9ubHkgY3NzQ2xhc3Nlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgZGlzcGxheWluZyBtb2RhbHMgaW4gT2JzaWRpYW4uXG4gKlxuICogQHR5cGVQYXJhbSBWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXNvbHZlZCBieSB0aGUgbW9kYWwuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNb2RhbEJhc2U8VmFsdWU+IGV4dGVuZHMgTW9kYWwge1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSB2YWx1ZSBvZiB0aGUgbW9kYWwuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvbWlzZVJlc29sdmU6IFByb21pc2VSZXNvbHZlPFZhbHVlPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBtb2RhbC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogTW9kYWxCYXNlQ29uc3RydWN0b3JQYXJhbXM8VmFsdWU+KSB7XG4gICAgc3VwZXIocGFyYW1zLmFwcCk7XG4gICAgdGhpcy5wcm9taXNlUmVzb2x2ZSA9IHBhcmFtcy5wcm9taXNlUmVzb2x2ZTtcbiAgICB0aGlzLmFkZENzc0NsYXNzZXMocGFyYW1zLmNzc0NsYXNzZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgQ1NTIGNsYXNzZXMgdG8gdGhlIG1vZGFsJ3MgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjc3NDbGFzc2VzIC0gVGhlIENTUyBjbGFzc2VzIHRvIGFkZC5cbiAgICovXG4gIHByb3RlY3RlZCBhZGRDc3NDbGFzc2VzKGNzc0NsYXNzZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModGhpcy5jb250YWluZXJFbCwgY3NzQ2xhc3Nlcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwbGF5cyBhIG1vZGFsIGluIE9ic2lkaWFuLlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcmVzb2x2ZWQgYnkgdGhlIG1vZGFsLlxuICogQHBhcmFtIG1vZGFsQ3JlYXRvciAtIEEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbW9kYWwuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1vZGFsIGlzIGNsb3NlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob3dNb2RhbDxWYWx1ZT4obW9kYWxDcmVhdG9yOiAocmVzb2x2ZTogUHJvbWlzZVJlc29sdmU8VmFsdWU+KSA9PiBNb2RhbCk6IFByb21pc2U8VmFsdWU+IHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPFZhbHVlPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG1vZGFsID0gbW9kYWxDcmVhdG9yKHJlc29sdmUpO1xuICAgIG1vZGFsLm9wZW4oKTtcbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSxzQkFBc0I7QUFFdEIsNEJBQW9DO0FBa0M3QixNQUFlLGtCQUF5QixzQkFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1osWUFBWSxRQUEyQztBQUM1RCxVQUFNLE9BQU8sR0FBRztBQUNoQixTQUFLLGlCQUFpQixPQUFPO0FBQzdCLFNBQUssY0FBYyxPQUFPLFVBQVU7QUFBQSxFQUN0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9VLGNBQWMsWUFBc0M7QUFDNUQsbURBQW9CLEtBQUssYUFBYSxVQUFVO0FBQUEsRUFDbEQ7QUFDRjtBQVNBLGVBQXNCLFVBQWlCLGNBQXlFO0FBQzlHLFNBQU8sTUFBTSxJQUFJLFFBQWUsQ0FBQyxZQUFZO0FBQzNDLFVBQU0sUUFBUSxhQUFhLE9BQU87QUFDbEMsVUFBTSxLQUFLO0FBQUEsRUFDYixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
176
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL21vZGFscy9tb2RhbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBiYXNlIGNsYXNzIGZvciBkaXNwbGF5aW5nIG1vZGFscyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2VSZXNvbHZlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tY29udGV4dC50cyc7XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBNb2RhbEJhc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcmVzb2x2ZWQgYnkgdGhlIG1vZGFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zPFZhbHVlPiBleHRlbmRzIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIHZhbHVlIG9mIHRoZSBtb2RhbC5cbiAgICovXG4gIHJlYWRvbmx5IHByb21pc2VSZXNvbHZlOiBQcm9taXNlUmVzb2x2ZTxWYWx1ZT47XG59XG5cbi8qKlxuICogQmFzZSBvcHRpb25zIGZvciBhIG1vZGFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gdGhlIG1vZGFsLlxuICAgKi9cbiAgcmVhZG9ubHkgY3NzQ2xhc3Nlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgZGlzcGxheWluZyBtb2RhbHMgaW4gT2JzaWRpYW4uXG4gKlxuICogQHR5cGVQYXJhbSBWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXNvbHZlZCBieSB0aGUgbW9kYWwuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNb2RhbEJhc2U8VmFsdWU+IGV4dGVuZHMgTW9kYWwge1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSB2YWx1ZSBvZiB0aGUgbW9kYWwuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvbWlzZVJlc29sdmU6IFByb21pc2VSZXNvbHZlPFZhbHVlPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBtb2RhbC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogTW9kYWxCYXNlQ29uc3RydWN0b3JQYXJhbXM8VmFsdWU+KSB7XG4gICAgc3VwZXIocGFyYW1zLmFwcCk7XG4gICAgdGhpcy5wcm9taXNlUmVzb2x2ZSA9IHBhcmFtcy5wcm9taXNlUmVzb2x2ZTtcbiAgICB0aGlzLmFkZENzc0NsYXNzZXMocGFyYW1zLmNzc0NsYXNzZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgQ1NTIGNsYXNzZXMgdG8gdGhlIG1vZGFsJ3MgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjc3NDbGFzc2VzIC0gVGhlIENTUyBjbGFzc2VzIHRvIGFkZC5cbiAgICovXG4gIHByb3RlY3RlZCBhZGRDc3NDbGFzc2VzKGNzc0NsYXNzZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModGhpcy5jb250YWluZXJFbCwgY3NzQ2xhc3Nlcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwbGF5cyBhIG1vZGFsIGluIE9ic2lkaWFuLlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcmVzb2x2ZWQgYnkgdGhlIG1vZGFsLlxuICogQHBhcmFtIG1vZGFsQ3JlYXRvciAtIEEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbW9kYWwuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1vZGFsIGlzIGNsb3NlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob3dNb2RhbDxWYWx1ZT4obW9kYWxDcmVhdG9yOiAocmVzb2x2ZTogUHJvbWlzZVJlc29sdmU8VmFsdWU+KSA9PiBNb2RhbCk6IFByb21pc2U8VmFsdWU+IHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPFZhbHVlPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG1vZGFsID0gbW9kYWxDcmVhdG9yKHJlc29sdmUpO1xuICAgIG1vZGFsLm9wZW4oKTtcbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSxzQkFBc0I7QUFFdEIsNEJBQW9DO0FBa0M3QixNQUFlLGtCQUF5QixzQkFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1osWUFBWSxRQUEyQztBQUM1RCxVQUFNLE9BQU8sR0FBRztBQUNoQixTQUFLLGlCQUFpQixPQUFPO0FBQzdCLFNBQUssY0FBYyxPQUFPLFVBQVU7QUFBQSxFQUN0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9VLGNBQWMsWUFBc0M7QUFDNUQsbURBQW9CLEtBQUssYUFBYSxVQUFVO0FBQUEsRUFDbEQ7QUFDRjtBQVNBLGVBQXNCLFVBQWlCLGNBQXlFO0FBQzlHLFNBQU8sTUFBTSxJQUFJLFFBQWUsQ0FBQyxZQUFZO0FBQzNDLFVBQU0sUUFBUSxhQUFhLE9BQU87QUFDbEMsVUFBTSxLQUFLO0FBQUEsRUFDYixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==