@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 initEsm() {
@@ -396,4 +388,4 @@ export {
396
388
  renderExternalLink,
397
389
  renderInternalLink
398
390
  };
399
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21hcmtkb3duLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHByb2Nlc3NpbmcgTWFya2Rvd24gY29udGVudCBpbiBPYnNpZGlhbi5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVlcGx5IGNvdXBsZWQgdG8gT2JzaWRpYW4gcnVudGltZTsgcmVxdWlyZXMgcnVubmluZyB2YXVsdCBmb3IgbWVhbmluZ2Z1bCB0ZXN0aW5nLiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIERvbUV2ZW50c0hhbmRsZXJzLFxuICBEb21FdmVudHNIYW5kbGVyc0luZm8sXG4gIEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QnO1xuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgaW52b2tlQXN5bmNTYWZlbHksXG4gIHNsZWVwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBnZXRaSW5kZXgsXG4gIHdhaXRVbnRpbENvbm5lY3RlZFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvaHRtbC1lbGVtZW50JztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdXJsJztcbmltcG9ydCB7IEludGVybmFsUGx1Z2luTmFtZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7IHQgfSBmcm9tICdpMThuZXh0JztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG92ZXJQb3BvdmVyLFxuICBLZXltYXAsXG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLFxuICBNYXJrZG93blJlbmRlcmVyLFxuICBNZW51LFxuICBOb3RpY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBGb2xkZXJOb3RlTG9jYXRpb24gfSBmcm9tICcuL2ZvbGRlci1ub3RlLnRzJztcblxuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IHJldmVhbEluRmlsZUV4cGxvcmVyIH0gZnJvbSAnLi9maWxlLWV4cGxvcmVyLnRzJztcbmltcG9ydCB7XG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0UGF0aCxcbiAgaXNGaWxlLFxuICBpc0ZvbGRlclxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHJlc29sdmVGb2xkZXJOb3RlLFxuICByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1xufSBmcm9tICcuL2ZvbGRlci1ub3RlLnRzJztcblxuLyoqXG4gKiBIb3cgbG9uZyB0byBsZXQgT2JzaWRpYW4gc2V0dGxlIGJlZm9yZSBvcGVuaW5nIGEgZm9sZGVyIG5vdGUuIFRoZSBjbGljayBjYW4gbGFuZCByaWdodCBhZnRlciBhblxuICogb3BlcmF0aW9uIHRoYXQgY3JlYXRlZCwgcmV3cm90ZSBhbmQgdHJhc2hlZCBub3RlcywgYW5kIG9wZW5pbmcgaW50byB0aGUgbWlkZGxlIG9mIE9ic2lkaWFuJ3Mgb3duXG4gKiByZWFjdGlvbiB0byB0aGF0IHNob3dzIHRoZSBub3RlIGJlZm9yZSBpdHMgbWV0YWRhdGEgaGFzIGNhdWdodCB1cC5cbiAqL1xuY29uc3QgREVMQVlfQkVGT1JFX09QRU5fSU5fTUlMTElTRUNPTkRTID0gMjAwO1xuXG4vKipcbiAqIFRoZSBzZWN0aW9ucyBhbiBleHRlcm5hbCBsaW5rJ3MgY29udGV4dCBtZW51IGRlY2xhcmVzLCBpbiBPYnNpZGlhbidzIG93biBvcmRlci4gVGhlIG9yZGVyIGlzIHdoYXRcbiAqIHtAbGluayBNZW51LnNvcnR9IGdyb3VwcyB0aGUgaXRlbXMgYnksIHNvIGl0IGhhcyB0byBtYXRjaCB3aGF0XG4gKiB7QGxpbmsgV29ya3NwYWNlLmhhbmRsZUV4dGVybmFsTGlua0NvbnRleHRNZW51fSBhbmQgZXZlcnkgYHVybC1tZW51YCBsaXN0ZW5lciBleHBlY3QgdG8gZmlsbC5cbiAqL1xuY29uc3QgRVhURVJOQUxfTElOS19NRU5VX1NFQ1RJT05TID0gW1xuICAndGl0bGUnLFxuICAnb3BlbicsXG4gICdzZWxlY3Rpb24nLFxuICAnY2xpcGJvYXJkJyxcbiAgJ2luZm8nLFxuICAnYWN0aW9uJyxcbiAgJ3ZpZXcnLFxuICAnJyxcbiAgJ2Rhbmdlcidcbl07XG5cbi8qKlxuICogVGhlIHNlY3Rpb25zIGFuIGludGVybmFsIGxpbmsncyBjb250ZXh0IG1lbnUgZGVjbGFyZXMsIGluIE9ic2lkaWFuJ3Mgb3duIG9yZGVyLiBTZWVcbiAqIHtAbGluayBFWFRFUk5BTF9MSU5LX01FTlVfU0VDVElPTlN9IFx1MjAxNCB0aGUgY291bnRlcnBhcnQgZm9yIGBmaWxlLW1lbnVgIGxpc3RlbmVycy5cbiAqL1xuY29uc3QgSU5URVJOQUxfTElOS19NRU5VX1NFQ1RJT05TID0gW1xuICAndGl0bGUnLFxuICAnb3BlbicsXG4gICdhY3Rpb24nLFxuICAnY2xpcGJvYXJkJyxcbiAgJ3ZpZXcnLFxuICAnaW5mbycsXG4gICcnLFxuICAnZGFuZ2VyJ1xuXTtcblxuLyoqXG4gKiBUaGUgcGFyYW1zIGZvciB0aGUgZnVsbCByZW5kZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVsbFJlbmRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBDb21wb25lbnQgaW5zdGFuY2UgdG8gdXNlIGZvciB0aGUgcmVuZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50PzogQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgSFRNTEVsZW1lbnQgdG8gcmVuZGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgTWFya2Rvd24gc3RyaW5nIHRvIHJlbmRlci5cbiAgICovXG4gIHJlYWRvbmx5IG1hcmtkb3duOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVnaXN0ZXIgbGluayBoYW5kbGVycyBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlZ2lzdGVyTGlua0hhbmRsZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBwYXRoIHRvIHJlc29sdmUgcmVsYXRpdmUgbGlua3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnLydgXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBtYXJrZG93blRvSHRtbH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFya2Rvd25Ub0h0bWxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgTWFya2Rvd24gc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqL1xuICByZWFkb25seSBtYXJrZG93bjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJMaW5rSGFuZGxlcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyTGlua0hhbmRsZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIEhUTUxFbGVtZW50IHRvIHJlZ2lzdGVyIGxpbmsgaGFuZGxlcnMgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcyBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZW5kZXJFeHRlcm5hbExpbmt9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlckV4dGVybmFsTGlua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBleHRlcm5hbCBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheVRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgdG8gcmVuZGVyIHRoZSBleHRlcm5hbCBsaW5rIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXItbm90ZSBzZXR1cCB7QGxpbmsgcmVuZGVySW50ZXJuYWxMaW5rfSByZXNvbHZlcyBhIGZvbGRlciBsaW5rJ3Mgbm90ZSB3aXRoIFx1MjAxNCBldmVyeXRoaW5nXG4gKiB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGVDb25maWd9IHRha2VzIGV4Y2VwdCB0aGUgYXBwLCB3aGljaCB0aGUgbGluayBhbHJlYWR5IGNhcnJpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySW50ZXJuYWxMaW5rRm9sZGVyTm90ZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnkuIFNlZSB7QGxpbmsgUmVzb2x2ZUZvbGRlck5vdGVDb25maWdQYXJhbXMuZXh0ZW5zaW9uc30uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ21kJ11gXG4gICAqL1xuICByZWFkb25seSBleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci4gU2VlXG4gICAqIHtAbGluayBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcy5pc0hpZGRlbn0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzSGlkZGVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlcmUgdGhlIG5vdGUgc2l0cyByZWxhdGl2ZSB0byBpdHMgZm9sZGVyLiBTZWUge0BsaW5rIFJlc29sdmVGb2xkZXJOb3RlQ29uZmlnUGFyYW1zLmxvY2F0aW9ufS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBGb2xkZXJOb3RlTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBmb2xkZXIgbm90ZSBvZiBhIGZvbGRlci4gU2VlIHtAbGluayBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcy5yZXNvbHZlTmFtZX0uXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZS5cbiAgICogQGRlZmF1bHQgYChmb2xkZXIpID0+IGZvbGRlci5uYW1lYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZU5hbWU/OiAoZm9sZGVyOiBURm9sZGVyKSA9PiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlbmRlckludGVybmFsTGlua30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySW50ZXJuYWxMaW5rUGFyYW1zIHtcbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBhIGNsaWNrIGhhcyByZXZlYWxlZCB0aGUgbGluaydzIGRlc3RpbmF0aW9uIGluIHRoZSBmaWxlIGV4cGxvcmVyLCBvbmNlIHRoZSBleHBsb3JlciBoYXNcbiAgICogZmluaXNoZWQgdGFraW5nIHRoZSBmb2N1cyBmb3IgaXQgXHUyMDE0IHNvIHRoaXMgaXMgd2hlcmUgYSBjYWxsZXIgbW92ZXMgdGhlIGZvY3VzIHNvbWV3aGVyZSBlbHNlLlxuICAgKlxuICAgKiBBd2FpdGVkLCBhbmQgY2FsbGVkIG9ubHkgZm9yIGEgY2xpY2sgdGhhdCByZXZlYWxzOiBhbHdheXMgZm9yIGEgZm9sZGVyIGxpbmssIGFuZCBmb3IgYSBmaWxlIGxpbmsgb25seVxuICAgKiB3aXRoIHtAbGluayBSZW5kZXJJbnRlcm5hbExpbmtQYXJhbXMuc2hvdWxkUmV2ZWFsRmlsZX0gYW5kIGEgZGVzdGluYXRpb24gdGhhdCBleGlzdHMuIFdpdGggdGhlIGZpbGVcbiAgICogZXhwbG9yZXIgZGlzYWJsZWQgaXQgaXMgc3RpbGwgY2FsbGVkLCByaWdodCBhd2F5LCBzaW5jZSB0aGVyZSBpcyB0aGVuIG5vdGhpbmcgdG8gd2FpdCBmb3IuXG4gICAqL1xuICByZWFkb25seSBhZnRlclJldmVhbD86ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBpbnRlcm5hbCBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheVRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyB0byBhbnN3ZXIgd2hpY2ggbm90ZSBpcyBhIGZvbGRlcidzIGZvbGRlciBub3RlLCB3aGVuIHRoZSBsaW5rIG5hbWVzIGEgRk9MREVSLlxuICAgKlxuICAgKiBPbWl0dGVkIG1lYW5zIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b306IHRoZSBpbnN0YWxsZWQgYGZvbGRlci1ub3Rlc2AgcGx1Z2luJ3MgbGl2ZVxuICAgKiBjb25maWd1cmF0aW9uLCBvciBhIG5vdGUgbmFtZWQgYWZ0ZXIgaXRzIGZvbGRlciwgaW5zaWRlIGl0LCB3aGVuIHRoYXQgcGx1Z2luIGlzIGFic2VudC4gUGFzc1xuICAgKiBgeyBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUgfWAgZm9yIGEgZm9sZGVyIGxpbmsgdGhhdCBtdXN0IG9ubHkgZXZlciByZXZlYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB7fWBcbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlck5vdGU/OiBSZW5kZXJJbnRlcm5hbExpbmtGb2xkZXJOb3RlT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZW5kZXIgdGhlIGludGVybmFsIGxpbmsgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yQWJzdHJhY3RGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY2xpY2tpbmcgYSBGSUxFIGxpbmsgYWxzbyBoaWdobGlnaHRzIHRoYXQgZmlsZSBpbiB0aGUgZmlsZSBleHBsb3Jlciwgb24gdG9wIG9mIHRoZSBvcGVuXG4gICAqIE9ic2lkaWFuJ3Mgb3duIGxpbmsgaGFuZGxlciBwZXJmb3Jtcy5cbiAgICpcbiAgICogT3B0LWluLCB1bmxpa2UgdGhlIGZvbGRlciBicmFuY2g6IGEgZm9sZGVyIGxpbmsgaGFzIGFsd2F5cyByZXZlYWxlZCAocmV2ZWFsaW5nIHdhcyBhbGwgaXRzIGNsaWNrXG4gICAqIGNvdWxkIG1lYW4pLCB3aGVyZWFzIGEgZmlsZSBsaW5rIGhhcyBhbHdheXMgb25seSBvcGVuZWQgXHUyMDE0IHNvIHR1cm5pbmcgdGhpcyBvbiBieSBkZWZhdWx0IHdvdWxkIGNoYW5nZVxuICAgKiB3aGF0IGV2ZXJ5IGV4aXN0aW5nIGNhbGxlcidzIGxpbmsgZG9lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmV2ZWFsRmlsZT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mb0NvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5jbGFzcyBFbWJlZEJ5RXh0ZW5zaW9uTWRQYXRjaENvbXBvbmVudCBleHRlbmRzIE1vbmtleUFyb3VuZENvbXBvbmVudCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVtYmVkQnlFeHRlbnNpb246IEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgICRvYmplY3Q6IHRoaXMuZW1iZWRCeUV4dGVuc2lvbixcbiAgICAgIG1ldGhvZE5hbWU6ICdtZCcsXG4gICAgICBwYXRjaEhhbmRsZXI6ICh7XG4gICAgICAgIGZhbGxiYWNrLFxuICAgICAgICBvcmlnaW5hbEFyZ3VtZW50czogW2NvbnRleHRdXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnRleHQuZGlzcGxheU1vZGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm8gaW1wbGVtZW50cyBEb21FdmVudHNIYW5kbGVyc0luZm8ge1xuICBwdWJsaWMgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgaG92ZXJQb3BvdmVyKCk6IEhvdmVyUG9wb3ZlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9ob3ZlclBvcG92ZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IGhvdmVyUG9wb3Zlcihob3ZlclBvcG92ZXI6IEhvdmVyUG9wb3ZlciB8IG51bGwpIHtcbiAgICB0aGlzLl9ob3ZlclBvcG92ZXIgPSBob3ZlclBvcG92ZXI7XG4gICAgaWYgKGhvdmVyUG9wb3ZlciAmJiB0aGlzLnpJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBob3ZlclBvcG92ZXIuaG92ZXJFbC5zZXRDc3NTdHlsZXMoe1xuICAgICAgICB6SW5kZXg6IFN0cmluZyh0aGlzLnpJbmRleClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hvdmVyUG9wb3ZlcjogSG92ZXJQb3BvdmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSB6SW5kZXg/OiBudW1iZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm9Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBhdGggPSBwYXJhbXMucGF0aDtcbiAgICB0aGlzLmVsID0gcGFyYW1zLmVsO1xuXG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2FpdFVudGlsQ29ubmVjdGVkKHRoaXMuZWwpO1xuICAgICAgdGhpcy51cGRhdGVaSW5kZXgodGhpcy5lbCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVpJbmRleChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuekluZGV4ID0gZ2V0WkluZGV4KGVsZW1lbnQpICsgMTtcbiAgfVxufVxuXG4vKipcbiAqIFdoYXQgYSByZW5kZXJlZCBsaW5rIERPRVMgd2hlbiBpdCBpcyBjbGlja2VkLCBob3ZlcmVkLCBkcmFnZ2VkIG9yIHJpZ2h0LWNsaWNrZWQuXG4gKlxuICoge0BsaW5rIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzfSBvbmx5IHBlcmZvcm1zIHRoZSBERUxFR0FUSU9OIGhhbGYgXHUyMDE0IHdoaWNoIGVsZW1lbnQgYW5cbiAqIGV2ZW50IGxhbmRlZCBvbiwgd2hpY2ggbGluayB0ZXh0IGl0IGNhcnJpZXMsIGFuZCB3aGljaCBvZiB0aGVzZSBtZXRob2RzIHRvIGNhbGwuIFRoZSBoYWxmIGl0IGRvZXMgbm90XG4gKiBwcm92aWRlIGlzIHRoaXMgb25lLCBhbmQgT2JzaWRpYW4ga2VlcHMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBwcml2YXRlOiB0aGUgb25seSBoYW5kbGUgb24gaXQgaXMgdGhlXG4gKiBpbnN0YW5jZSBhIGxpdmUgcHJldmlldyB2aWV3IHBhc3NlcyBpbi4ge0BsaW5rIGdldERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3J9IHVzZWQgdG8gb2J0YWluIGl0IGJ5XG4gKiBvcGVuaW5nIGEgcmVhbCBsZWFmIG9uIGFuIGFyYml0cmFyeSBub3RlIGFuZCBpbnRlcmNlcHRpbmcgdGhhdCBjYWxsIFx1MjAxNCB3aGljaCBtdXRhdGVkIHRoZSB1c2VyJ3NcbiAqIHdvcmtzcGFjZSBvbiBFVkVSWSBjb25zdW1lcidzIGxvYWQgKGEgdGFiIG9wZW5pbmcgYW5kIGNsb3NpbmcsIHR3byBgZmlsZS1vcGVuYCBhbmQgdHdvXG4gKiBgYWN0aXZlLWxlYWYtY2hhbmdlYCBldmVudHMsIGFuIHVucmVsYXRlZCBub3RlIHJlbmRlcmVkIGluIHByZXZpZXcpLlxuICpcbiAqIFRoZXNlIGJvZGllcyBhcmUgYSBwb3J0IG9mIHRoYXQgY2xhc3MsIHNvIG5vdGhpbmcgaGFzIHRvIGJlIG9wZW5lZC4gS2VlcGluZ1xuICoge0BsaW5rIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzfSBmb3IgdGhlIGRlbGVnYXRpb24gaXMgd2hhdCBrZWVwcyBmb290bm90ZSBsaW5rcyxcbiAqIHRhZ3MsIGV4dGVybmFsIGxpbmtzLCBtb2QtY2xpY2sgYW5kIGRyYWcgYmVoYXZpbmcgZXhhY3RseSBhcyB0aGV5IGRvIGluc2lkZSBhIHJlYWwgcHJldmlldy5cbiAqL1xuY2xhc3MgTGlua0RvbUV2ZW50c0hhbmRsZXJzIGltcGxlbWVudHMgRG9tRXZlbnRzSGFuZGxlcnMge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbmZvOiBEb21FdmVudHNIYW5kbGVyc0luZm8pIHt9XG5cbiAgcHVibGljIG9uRXh0ZXJuYWxMaW5rQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50LCB0YXJnZXRFbDogSFRNTEVsZW1lbnQsIGxpbmtUZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIWlzVXJsKGxpbmtUZXh0KSkge1xuICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubm90aWNlcy5mYWlsZWRUb09wZW5VcmwsIHsgdXJsOiBsaW5rVGV4dCB9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbW9kaWZpZXJQYW5lVHlwZSA9IEtleW1hcC5pc01vZEV2ZW50KCRldmVudCk7XG4gICAgdGFyZ2V0RWwud2luLm9wZW4obGlua1RleHQsIHR5cGVvZiBtb2RpZmllclBhbmVUeXBlID09PSAnYm9vbGVhbicgPyAnJyA6IG1vZGlmaWVyUGFuZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIG9uRXh0ZXJuYWxMaW5rUmlnaHRDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1lbnUgPSBNZW51LmZvckV2ZW50KCRldmVudCk7XG4gICAgbWVudS5hZGRTZWN0aW9ucyhFWFRFUk5BTF9MSU5LX01FTlVfU0VDVElPTlMpO1xuICAgIGFkZENvcHlNZW51SXRlbShtZW51LCB0YXJnZXRFbCk7XG4gICAgdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2UuaGFuZGxlRXh0ZXJuYWxMaW5rQ29udGV4dE1lbnUobWVudSwgbGlua1RleHQpO1xuICB9XG5cbiAgcHVibGljIG9uSW50ZXJuYWxMaW5rQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50LCBfdGFyZ2V0RWw6IEhUTUxFbGVtZW50LCBsaW5rVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGxpbmtUZXh0LCB0aGlzLmluZm8ucGF0aCwgS2V5bWFwLmlzTW9kRXZlbnQoJGV2ZW50KSkpO1xuICB9XG5cbiAgcHVibGljIG9uSW50ZXJuYWxMaW5rRHJhZygkZXZlbnQ6IERyYWdFdmVudCwgX3RhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkcmFnTWFuYWdlciA9IHRoaXMuaW5mby5hcHAuZHJhZ01hbmFnZXI7XG4gICAgZHJhZ01hbmFnZXIub25EcmFnU3RhcnQoJGV2ZW50LCBkcmFnTWFuYWdlci5kcmFnTGluaygkZXZlbnQsIGxpbmtUZXh0LCB0aGlzLmluZm8ucGF0aCwgdGl0bGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkludGVybmFsTGlua01vdXNlb3ZlcigkZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIGBob3ZlclBhcmVudGAgaXMgdGhlIGluZm8gb2JqZWN0IGl0c2VsZiwgZXhhY3RseSBhcyBPYnNpZGlhbiBwYXNzZXMgaXRzIG93biBcdTIwMTQgd2hpY2ggaXMgd2hhdCBrZWVwc1xuICAgIC8vIGBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mb2AncyBwb3BvdmVyIHotaW5kZXggZml4IGluIHBsYXkuXG4gICAgdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2UudHJpZ2dlcignaG92ZXItbGluaycsIHtcbiAgICAgIGV2ZW50OiAkZXZlbnQsXG4gICAgICBob3ZlclBhcmVudDogdGhpcy5pbmZvLFxuICAgICAgbGlua3RleHQ6IGxpbmtUZXh0LFxuICAgICAgc291cmNlOiAncHJldmlldycsXG4gICAgICBzb3VyY2VQYXRoOiB0aGlzLmluZm8ucGF0aCxcbiAgICAgIHRhcmdldEVsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25JbnRlcm5hbExpbmtSaWdodENsaWNrKCRldmVudDogTW91c2VFdmVudCwgdGFyZ2V0RWw6IEhUTUxFbGVtZW50LCBsaW5rVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWVudSA9IE1lbnUuZm9yRXZlbnQoJGV2ZW50KTtcbiAgICBtZW51LnNldFBhcmVudEVsZW1lbnQodGFyZ2V0RWwpO1xuICAgIG1lbnUuYWRkU2VjdGlvbnMoSU5URVJOQUxfTElOS19NRU5VX1NFQ1RJT05TKTtcbiAgICBhZGRDb3B5TWVudUl0ZW0obWVudSwgdGFyZ2V0RWwpO1xuICAgIHRoaXMuaW5mby5hcHAud29ya3NwYWNlLmhhbmRsZUxpbmtDb250ZXh0TWVudShtZW51LCBsaW5rVGV4dCwgdGhpcy5pbmZvLnBhdGgpO1xuICB9XG5cbiAgcHVibGljIG9uVGFnQ2xpY2soXyRldmVudDogTW91c2VFdmVudCwgX3RhcmdldEVsOiBIVE1MRWxlbWVudCwgdGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBgcmVnaXN0ZXJEb21FdmVudHNgIGhhcyBhbHJlYWR5IGNhbGxlZCBgcHJldmVudERlZmF1bHQoKWAgZm9yIGEgdGFnIGNsaWNrLlxuICAgIHRoaXMuaW5mby5hcHAuaW50ZXJuYWxQbHVnaW5zLmdldEVuYWJsZWRQbHVnaW5CeUlkKEludGVybmFsUGx1Z2luTmFtZS5HbG9iYWxTZWFyY2gpPy5vcGVuR2xvYmFsU2VhcmNoKGB0YWc6JHt0YWd9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5kZXIgdGhlIG1hcmtkb3duIGFuZCBlbWJlZHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVsbCByZW5kZXIuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZnVsbCByZW5kZXIgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmdWxsUmVuZGVyKHBhcmFtczogRnVsbFJlbmRlclBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzb3VyY2VQYXRoID0gcGFyYW1zLnNvdXJjZVBhdGggPz8gJy8nO1xuICBsZXQgc2hvdWxkVW5sb2FkQ29tcG9uZW50ID0gZmFsc2U7XG4gIGxldCBjb21wb25lbnQ6IENvbXBvbmVudDtcbiAgaWYgKHBhcmFtcy5jb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBwYXJhbXMuY29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnQoKTtcbiAgICBjb21wb25lbnQubG9hZCgpO1xuICAgIHNob3VsZFVubG9hZENvbXBvbmVudCA9IHRydWU7XG4gIH1cblxuICB1c2luZyBfID0gY29tcG9uZW50LmFkZENoaWxkKG5ldyBFbWJlZEJ5RXh0ZW5zaW9uTWRQYXRjaENvbXBvbmVudChwYXJhbXMuYXBwLmVtYmVkUmVnaXN0cnkuZW1iZWRCeUV4dGVuc2lvbikpO1xuXG4gIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKHBhcmFtcy5hcHAsIHBhcmFtcy5tYXJrZG93biwgcGFyYW1zLmVsLCBzb3VyY2VQYXRoLCBjb21wb25lbnQpO1xuXG4gIGlmIChzaG91bGRVbmxvYWRDb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQudW5sb2FkKCk7XG4gIH1cblxuICBpZiAocGFyYW1zLnNob3VsZFJlZ2lzdGVyTGlua0hhbmRsZXJzKSB7XG4gICAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFJlZ2lzdGVyTGlua0hhbmRsZXJzUGFyYW1zPih7XG4gICAgICBhcHA6IHBhcmFtcy5hcHAsXG4gICAgICBlbDogcGFyYW1zLmVsLFxuICAgICAgc291cmNlUGF0aDogcGFyYW1zLnNvdXJjZVBhdGhcbiAgICB9KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBNYXJrZG93biB0byBIVE1MLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNvbnZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgSFRNTCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXJrZG93blRvSHRtbChwYXJhbXM6IE1hcmtkb3duVG9IdG1sUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBtYXJrZG93bixcbiAgICBzb3VyY2VQYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnQoKTtcbiAgY29tcG9uZW50LmxvYWQoKTtcbiAgY29uc3QgcmVuZGVyRGl2ID0gY3JlYXRlRGl2KCk7XG4gIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKGFwcCwgbWFya2Rvd24sIHJlbmRlckRpdiwgc291cmNlUGF0aCA/PyAnJywgY29tcG9uZW50KTtcbiAgY29uc3QgaHRtbCA9IHJlbmRlckRpdi5pbm5lckhUTUw7XG4gIGNvbXBvbmVudC51bmxvYWQoKTtcbiAgcmV0dXJuIGh0bWw7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGxpbmsgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVnaXN0ZXJpbmcgbGluayBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTGlua0hhbmRsZXJzKHBhcmFtczogUmVnaXN0ZXJMaW5rSGFuZGxlcnNQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBlbCxcbiAgICBzb3VyY2VQYXRoXG4gIH0gPSBwYXJhbXM7XG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzKFxuICAgIGVsLFxuICAgIG5ldyBMaW5rRG9tRXZlbnRzSGFuZGxlcnMoXG4gICAgICBuZXcgRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm8oe1xuICAgICAgICBhcHAsXG4gICAgICAgIGVsLFxuICAgICAgICBwYXRoOiBzb3VyY2VQYXRoID8/ICcnXG4gICAgICB9KVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGFuIGV4dGVybmFsIGxpbmsuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIGV4dGVybmFsIGxpbmsuXG4gKiBAcmV0dXJucyBUaGUgSFRNTEFuY2hvckVsZW1lbnQgY29udGFpbmluZyB0aGUgcmVuZGVyZWQgZXh0ZXJuYWwgbGluay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckV4dGVybmFsTGluayhwYXJhbXM6IFJlbmRlckV4dGVybmFsTGlua1BhcmFtcyk6IFByb21pc2U8SFRNTEFuY2hvckVsZW1lbnQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICB1cmxcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZGlzcGxheVRleHQgPSBwYXJhbXMuZGlzcGxheVRleHQgPz8gdXJsO1xuICBjb25zdCB3cmFwcGVyRWwgPSBjcmVhdGVTcGFuKCk7XG4gIGF3YWl0IGZ1bGxSZW5kZXIoe1xuICAgIGFwcCxcbiAgICBlbDogd3JhcHBlckVsLFxuICAgIG1hcmtkb3duOiBgWyR7ZGlzcGxheVRleHR9XSgke3VybH0pYFxuICB9KTtcbiAgY29uc3QgYUVsID0gd3JhcHBlckVsLmZpbmQoJ2EnKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMoe1xuICAgIGFwcCxcbiAgICBlbDogYUVsXG4gIH0pO1xuICByZXR1cm4gYUVsO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYW4gaW50ZXJuYWwgbGluay5cbiAqXG4gKiBXaGF0IGNsaWNraW5nIHRoZSByZW5kZXJlZCBsaW5rIGRvZXMgZGVwZW5kcyBvbiB3aGF0IGl0IG5hbWVzOlxuICpcbiAqIC0gQSBGSUxFIGlzIG9wZW5lZCBieSBPYnNpZGlhbidzIG93biBsaW5rIGhhbmRsZXIgXHUyMDE0IGFuZCwgd2l0aFxuICogICB7QGxpbmsgUmVuZGVySW50ZXJuYWxMaW5rUGFyYW1zLnNob3VsZFJldmVhbEZpbGV9LCBhZGRpdGlvbmFsbHkgcmV2ZWFsZWQgaW4gdGhlIGZpbGUgZXhwbG9yZXIuXG4gKiAtIEEgRk9MREVSIGNhbm5vdCBiZSBvcGVuZWQsIHNvIGl0cyBGT0xERVIgTk9URSBpcyBcdTIwMTQgdGhlIG5vdGUgd2hvc2UgcHJvcGVydGllcyBkZXNjcmliZSB0aGUgZm9sZGVyXG4gKiAgIGl0c2VsZiwgcmVzb2x2ZWQgdGhyb3VnaCB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGV9IChieSBkZWZhdWx0IGZyb20gdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYFxuICogICBwbHVnaW4ncyBsaXZlIGNvbmZpZ3VyYXRpb24pLiBUaGUgcmV2ZWFsIGxhbmRzIG9uIHRoYXQgbm90ZSwgdW5sZXNzIHRoZSBub3RlIGlzIGhpZGRlbiBpbiB0aGVcbiAqICAgZXhwbG9yZXIsIGluIHdoaWNoIGNhc2UgaXQgbGFuZHMgb24gdGhlIGZvbGRlciBcdTIwMTQgcmV2ZWFsaW5nIGEgaGlkZGVuIG5vdGUgd291bGQgaGlnaGxpZ2h0IG5vdGhpbmcuXG4gKiAgIEEgZm9sZGVyIHdpdGggTk8gZm9sZGVyIG5vdGUgcmV2ZWFscyB0aGUgZm9sZGVyIGFuZCBvcGVucyBub3RoaW5nOiBub3RoaW5nIGhlcmUgZXZlciBjcmVhdGVzIGEgbm90ZS5cbiAqXG4gKiBFdmVyeXRoaW5nIGlzIHJlc29sdmVkIGF0IENMSUNLIHRpbWUgcmF0aGVyIHRoYW4gYXQgcmVuZGVyIHRpbWUsIGRlbGliZXJhdGVseTogYSByZW5kZXJlZCBsaW5rIG91dGxpdmVzXG4gKiB0aGUgb3BlcmF0aW9uIHRoYXQgcHJvZHVjZWQgaXQsIHNvIGEgZGVzdGluYXRpb24gcmVuYW1lZCBpbiBiZXR3ZWVuIHN0aWxsIHJldmVhbHMgdGhlIHJpZ2h0IGl0ZW0sIGFuZCBhXG4gKiBmb2xkZXIgbm90ZSB3cml0dGVuIGFmdGVyIHRoZSBsaW5rIGFwcGVhcmVkIGlzIHN0aWxsIGZvdW5kLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBpbnRlcm5hbCBsaW5rLlxuICogQHJldHVybnMgVGhlIEhUTUxBbmNob3JFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHJlbmRlcmVkIGludGVybmFsIGxpbmsuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJJbnRlcm5hbExpbmsocGFyYW1zOiBSZW5kZXJJbnRlcm5hbExpbmtQYXJhbXMpOiBQcm9taXNlPEhUTUxBbmNob3JFbGVtZW50PiB7XG4gIGNvbnN0IHtcbiAgICBhZnRlclJldmVhbCxcbiAgICBhcHAsXG4gICAgZm9sZGVyTm90ZSxcbiAgICBwYXRoT3JBYnN0cmFjdEZpbGUsXG4gICAgc2hvdWxkUmV2ZWFsRmlsZVxuICB9ID0gcGFyYW1zO1xuXG4gIC8vIEEgRE9NIGxpc3RlbmVyIGNhbm5vdCBhd2FpdCwgc28gdGhlIHJldmVhbCwgYW5kIHRoZSBob29rIG9yZGVyZWQgYWZ0ZXIgaXQsIHJ1biBkZXRhY2hlZC5cbiAgZnVuY3Rpb24gcmV2ZWFsKGFic3RyYWN0RmlsZVRvUmV2ZWFsOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmV2ZWFsSW5GaWxlRXhwbG9yZXIoeyBhYnN0cmFjdEZpbGU6IGFic3RyYWN0RmlsZVRvUmV2ZWFsLCBhcHAgfSk7XG4gICAgICBhd2FpdCBhZnRlclJldmVhbD8uKCk7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgYWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yQWJzdHJhY3RGaWxlKTtcbiAgY29uc3QgZGlzcGxheVRleHQgPSBwYXJhbXMuZGlzcGxheVRleHQgPz8gcGF0aDtcbiAgaWYgKGlzRm9sZGVyKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gY3JlYXRlRWwoJ2EnLCB7IHRleHQ6IGRpc3BsYXlUZXh0IH0sIChhRWwpID0+IHtcbiAgICAgIGFFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHsgYXBwLCAuLi5mb2xkZXJOb3RlIH0pO1xuICAgICAgICBjb25zdCBmb2xkZXJOb3RlRmlsZSA9IHJlc29sdmVGb2xkZXJOb3RlKHsgYXBwLCBjb25maWcsIGZvbGRlcjogYWJzdHJhY3RGaWxlIH0pO1xuICAgICAgICByZXZlYWwoZm9sZGVyTm90ZUZpbGUgJiYgIWNvbmZpZy5pc0hpZGRlbiA/IGZvbGRlck5vdGVGaWxlIDogYWJzdHJhY3RGaWxlKTtcbiAgICAgICAgaWYgKGZvbGRlck5vdGVGaWxlKSB7XG4gICAgICAgICAgLy8gQSBET00gbGlzdGVuZXIgY2Fubm90IGF3YWl0LCBhbmQgdGhlIG9wZW4gaGFzIHRvIG91dGxpdmUgdGhpcyBoYW5kbGVyOiBpdCBzZXR0bGVzIGZpcnN0LCBmb3JcbiAgICAgICAgICAvLyB0aGUgY2xpY2sgdGhhdCBsYW5kcyByaWdodCBhcyBhbiBvcGVyYXRpb24gZmluaXNoZXMgd3JpdGluZy5cbiAgICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBvcGVuQWZ0ZXJTZXR0bGluZyhhcHAsIGZvbGRlck5vdGVGaWxlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgd3JhcHBlckVsID0gY3JlYXRlU3BhbigpO1xuICBhd2FpdCBmdWxsUmVuZGVyKHtcbiAgICBhcHAsXG4gICAgZWw6IHdyYXBwZXJFbCxcbiAgICBtYXJrZG93bjogYFtbJHtwYXRofXwke2Rpc3BsYXlUZXh0fV1dYFxuICB9KTtcbiAgY29uc3QgYUVsID0gd3JhcHBlckVsLmZpbmQoJ2EnKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMoe1xuICAgIGFwcCxcbiAgICBlbDogYUVsXG4gIH0pO1xuICBpZiAoc2hvdWxkUmV2ZWFsRmlsZSA/PyBmYWxzZSkge1xuICAgIGFFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIC8vIExheWVyZWQgT04gVE9QIG9mIE9ic2lkaWFuJ3Mgb3duIGhhbmRsZXIgXHUyMDE0IG5vIGBwcmV2ZW50RGVmYXVsdGAsIHNvIHRoZSBvcGVuIGlzIHVudG91Y2hlZC4gQSBwYXRoXG4gICAgICAvLyB0aGF0IHJlc29sdmVzIHRvIG5vdGhpbmcgZ2V0cyBubyByZXZlYWw6IGFuIHVucmVzb2x2ZWQgbGluayBoYXMgbm90aGluZyB0byByZXZlYWwsIGFuZCBjbGlja2luZ1xuICAgICAgLy8gb25lIENSRUFURVMgdGhlIG5vdGUgaXQgbmFtZXMuXG4gICAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG4gICAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICAgIHJldmVhbChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYUVsO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIGBjbGlwYm9hcmRgLXNlY3Rpb24gQ29weSBpdGVtIGV2ZXJ5IGxpbmsgY29udGV4dCBtZW51IGNhcnJpZXMsIGNvcHlpbmcgdGhlIGxpbmsncyBESVNQTEFZXG4gKiB0ZXh0IFx1MjAxNCB3aGljaCBpcyB3aGF0IE9ic2lkaWFuJ3Mgb3duIG1lbnUgY29waWVzLCBub3QgdGhlIHRhcmdldCBwYXRoLlxuICpcbiAqIEBwYXJhbSBtZW51IC0gVGhlIG1lbnUgdG8gYWRkIHRoZSBpdGVtIHRvLlxuICogQHBhcmFtIHRhcmdldEVsIC0gVGhlIGxpbmsgZWxlbWVudCB0aGUgbWVudSB3YXMgb3BlbmVkIG9uLlxuICovXG5mdW5jdGlvbiBhZGRDb3B5TWVudUl0ZW0obWVudTogTWVudSwgdGFyZ2V0RWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgIGl0ZW1cbiAgICAgIC5zZXRTZWN0aW9uKCdjbGlwYm9hcmQnKVxuICAgICAgLnNldFRpdGxlKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5tZW51LmNvcHkpKVxuICAgICAgLnNldEljb24oJ2x1Y2lkZS1jb3B5JylcbiAgICAgIC5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGFyZ2V0RWwud2luLm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRhcmdldEVsLmdldFRleHQoKSkpO1xuICAgICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGEgZmlsZSBpbiB0aGUgYWN0aXZlIGxlYWYsIG9uY2UgdGhlIHZhdWx0IGhhcyBzZXR0bGVkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBmaWxlIGlzIG9wZW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW5BZnRlclNldHRsaW5nKGFwcDogQXBwLCBmaWxlOiBURmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcCh7IG1pbGxpc2Vjb25kczogREVMQVlfQkVGT1JFX09QRU5fSU5fTUlMTElTRUNPTkRTIH0pO1xuICBhd2FpdCBhcHAud29ya3NwYWNlLmdldExlYWYoKS5vcGVuRmlsZShmaWxlLCB7IGFjdGl2ZTogdHJ1ZSB9KTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsYUFBYTtBQUN0QixTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLFNBQVM7QUFD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
391
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21hcmtkb3duLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHByb2Nlc3NpbmcgTWFya2Rvd24gY29udGVudCBpbiBPYnNpZGlhbi5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVlcGx5IGNvdXBsZWQgdG8gT2JzaWRpYW4gcnVudGltZTsgcmVxdWlyZXMgcnVubmluZyB2YXVsdCBmb3IgbWVhbmluZ2Z1bCB0ZXN0aW5nLiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIERvbUV2ZW50c0hhbmRsZXJzLFxuICBEb21FdmVudHNIYW5kbGVyc0luZm8sXG4gIEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QnO1xuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgaW52b2tlQXN5bmNTYWZlbHksXG4gIHNsZWVwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBnZXRaSW5kZXgsXG4gIHdhaXRVbnRpbENvbm5lY3RlZFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvaHRtbC1lbGVtZW50JztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdXJsJztcbmltcG9ydCB7IEludGVybmFsUGx1Z2luTmFtZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7IHQgfSBmcm9tICdpMThuZXh0JztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG92ZXJQb3BvdmVyLFxuICBLZXltYXAsXG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLFxuICBNYXJrZG93blJlbmRlcmVyLFxuICBNZW51LFxuICBOb3RpY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBGb2xkZXJOb3RlTG9jYXRpb24gfSBmcm9tICcuL2ZvbGRlci1ub3RlLnRzJztcblxuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IHJldmVhbEluRmlsZUV4cGxvcmVyIH0gZnJvbSAnLi9maWxlLWV4cGxvcmVyLnRzJztcbmltcG9ydCB7XG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0UGF0aCxcbiAgaXNGaWxlLFxuICBpc0ZvbGRlclxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHJlc29sdmVGb2xkZXJOb3RlLFxuICByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1xufSBmcm9tICcuL2ZvbGRlci1ub3RlLnRzJztcblxuLyoqXG4gKiBIb3cgbG9uZyB0byBsZXQgT2JzaWRpYW4gc2V0dGxlIGJlZm9yZSBvcGVuaW5nIGEgZm9sZGVyIG5vdGUuIFRoZSBjbGljayBjYW4gbGFuZCByaWdodCBhZnRlciBhblxuICogb3BlcmF0aW9uIHRoYXQgY3JlYXRlZCwgcmV3cm90ZSBhbmQgdHJhc2hlZCBub3RlcywgYW5kIG9wZW5pbmcgaW50byB0aGUgbWlkZGxlIG9mIE9ic2lkaWFuJ3Mgb3duXG4gKiByZWFjdGlvbiB0byB0aGF0IHNob3dzIHRoZSBub3RlIGJlZm9yZSBpdHMgbWV0YWRhdGEgaGFzIGNhdWdodCB1cC5cbiAqL1xuY29uc3QgREVMQVlfQkVGT1JFX09QRU5fSU5fTUlMTElTRUNPTkRTID0gMjAwO1xuXG4vKipcbiAqIFRoZSBzZWN0aW9ucyBhbiBleHRlcm5hbCBsaW5rJ3MgY29udGV4dCBtZW51IGRlY2xhcmVzLCBpbiBPYnNpZGlhbidzIG93biBvcmRlci4gVGhlIG9yZGVyIGlzIHdoYXRcbiAqIHtAbGluayBNZW51LnNvcnR9IGdyb3VwcyB0aGUgaXRlbXMgYnksIHNvIGl0IGhhcyB0byBtYXRjaCB3aGF0XG4gKiB7QGxpbmsgV29ya3NwYWNlLmhhbmRsZUV4dGVybmFsTGlua0NvbnRleHRNZW51fSBhbmQgZXZlcnkgYHVybC1tZW51YCBsaXN0ZW5lciBleHBlY3QgdG8gZmlsbC5cbiAqL1xuY29uc3QgRVhURVJOQUxfTElOS19NRU5VX1NFQ1RJT05TID0gW1xuICAndGl0bGUnLFxuICAnb3BlbicsXG4gICdzZWxlY3Rpb24nLFxuICAnY2xpcGJvYXJkJyxcbiAgJ2luZm8nLFxuICAnYWN0aW9uJyxcbiAgJ3ZpZXcnLFxuICAnJyxcbiAgJ2Rhbmdlcidcbl07XG5cbi8qKlxuICogVGhlIHNlY3Rpb25zIGFuIGludGVybmFsIGxpbmsncyBjb250ZXh0IG1lbnUgZGVjbGFyZXMsIGluIE9ic2lkaWFuJ3Mgb3duIG9yZGVyLiBTZWVcbiAqIHtAbGluayBFWFRFUk5BTF9MSU5LX01FTlVfU0VDVElPTlN9IFx1MjAxNCB0aGUgY291bnRlcnBhcnQgZm9yIGBmaWxlLW1lbnVgIGxpc3RlbmVycy5cbiAqL1xuY29uc3QgSU5URVJOQUxfTElOS19NRU5VX1NFQ1RJT05TID0gW1xuICAndGl0bGUnLFxuICAnb3BlbicsXG4gICdhY3Rpb24nLFxuICAnY2xpcGJvYXJkJyxcbiAgJ3ZpZXcnLFxuICAnaW5mbycsXG4gICcnLFxuICAnZGFuZ2VyJ1xuXTtcblxuLyoqXG4gKiBUaGUgcGFyYW1zIGZvciB0aGUgZnVsbCByZW5kZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVsbFJlbmRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBDb21wb25lbnQgaW5zdGFuY2UgdG8gdXNlIGZvciB0aGUgcmVuZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50PzogQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgSFRNTEVsZW1lbnQgdG8gcmVuZGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgTWFya2Rvd24gc3RyaW5nIHRvIHJlbmRlci5cbiAgICovXG4gIHJlYWRvbmx5IG1hcmtkb3duOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVnaXN0ZXIgbGluayBoYW5kbGVycyBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlZ2lzdGVyTGlua0hhbmRsZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBwYXRoIHRvIHJlc29sdmUgcmVsYXRpdmUgbGlua3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnLydgXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBtYXJrZG93blRvSHRtbH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFya2Rvd25Ub0h0bWxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgTWFya2Rvd24gc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqL1xuICByZWFkb25seSBtYXJrZG93bjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJMaW5rSGFuZGxlcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyTGlua0hhbmRsZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIEhUTUxFbGVtZW50IHRvIHJlZ2lzdGVyIGxpbmsgaGFuZGxlcnMgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcyBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZW5kZXJFeHRlcm5hbExpbmt9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlckV4dGVybmFsTGlua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBleHRlcm5hbCBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheVRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgdG8gcmVuZGVyIHRoZSBleHRlcm5hbCBsaW5rIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXItbm90ZSBzZXR1cCB7QGxpbmsgcmVuZGVySW50ZXJuYWxMaW5rfSByZXNvbHZlcyBhIGZvbGRlciBsaW5rJ3Mgbm90ZSB3aXRoIFx1MjAxNCBldmVyeXRoaW5nXG4gKiB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGVDb25maWd9IHRha2VzIGV4Y2VwdCB0aGUgYXBwLCB3aGljaCB0aGUgbGluayBhbHJlYWR5IGNhcnJpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySW50ZXJuYWxMaW5rRm9sZGVyTm90ZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnkuIFNlZSB7QGxpbmsgUmVzb2x2ZUZvbGRlck5vdGVDb25maWdQYXJhbXMuZXh0ZW5zaW9uc30uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ21kJ11gXG4gICAqL1xuICByZWFkb25seSBleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci4gU2VlXG4gICAqIHtAbGluayBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcy5pc0hpZGRlbn0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzSGlkZGVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlcmUgdGhlIG5vdGUgc2l0cyByZWxhdGl2ZSB0byBpdHMgZm9sZGVyLiBTZWUge0BsaW5rIFJlc29sdmVGb2xkZXJOb3RlQ29uZmlnUGFyYW1zLmxvY2F0aW9ufS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBGb2xkZXJOb3RlTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBmb2xkZXIgbm90ZSBvZiBhIGZvbGRlci4gU2VlIHtAbGluayBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcy5yZXNvbHZlTmFtZX0uXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZS5cbiAgICogQGRlZmF1bHQgYChmb2xkZXIpID0+IGZvbGRlci5uYW1lYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZU5hbWU/OiAoZm9sZGVyOiBURm9sZGVyKSA9PiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlbmRlckludGVybmFsTGlua30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySW50ZXJuYWxMaW5rUGFyYW1zIHtcbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBhIGNsaWNrIGhhcyByZXZlYWxlZCB0aGUgbGluaydzIGRlc3RpbmF0aW9uIGluIHRoZSBmaWxlIGV4cGxvcmVyLCBvbmNlIHRoZSBleHBsb3JlciBoYXNcbiAgICogZmluaXNoZWQgdGFraW5nIHRoZSBmb2N1cyBmb3IgaXQgXHUyMDE0IHNvIHRoaXMgaXMgd2hlcmUgYSBjYWxsZXIgbW92ZXMgdGhlIGZvY3VzIHNvbWV3aGVyZSBlbHNlLlxuICAgKlxuICAgKiBBd2FpdGVkLCBhbmQgY2FsbGVkIG9ubHkgZm9yIGEgY2xpY2sgdGhhdCByZXZlYWxzOiBhbHdheXMgZm9yIGEgZm9sZGVyIGxpbmssIGFuZCBmb3IgYSBmaWxlIGxpbmsgb25seVxuICAgKiB3aXRoIHtAbGluayBSZW5kZXJJbnRlcm5hbExpbmtQYXJhbXMuc2hvdWxkUmV2ZWFsRmlsZX0gYW5kIGEgZGVzdGluYXRpb24gdGhhdCBleGlzdHMuIFdpdGggdGhlIGZpbGVcbiAgICogZXhwbG9yZXIgZGlzYWJsZWQgaXQgaXMgc3RpbGwgY2FsbGVkLCByaWdodCBhd2F5LCBzaW5jZSB0aGVyZSBpcyB0aGVuIG5vdGhpbmcgdG8gd2FpdCBmb3IuXG4gICAqL1xuICByZWFkb25seSBhZnRlclJldmVhbD86ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBpbnRlcm5hbCBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheVRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyB0byBhbnN3ZXIgd2hpY2ggbm90ZSBpcyBhIGZvbGRlcidzIGZvbGRlciBub3RlLCB3aGVuIHRoZSBsaW5rIG5hbWVzIGEgRk9MREVSLlxuICAgKlxuICAgKiBPbWl0dGVkIG1lYW5zIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b306IHRoZSBpbnN0YWxsZWQgYGZvbGRlci1ub3Rlc2AgcGx1Z2luJ3MgbGl2ZVxuICAgKiBjb25maWd1cmF0aW9uLCBvciBhIG5vdGUgbmFtZWQgYWZ0ZXIgaXRzIGZvbGRlciwgaW5zaWRlIGl0LCB3aGVuIHRoYXQgcGx1Z2luIGlzIGFic2VudC4gUGFzc1xuICAgKiBgeyBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUgfWAgZm9yIGEgZm9sZGVyIGxpbmsgdGhhdCBtdXN0IG9ubHkgZXZlciByZXZlYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB7fWBcbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlck5vdGU/OiBSZW5kZXJJbnRlcm5hbExpbmtGb2xkZXJOb3RlT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZW5kZXIgdGhlIGludGVybmFsIGxpbmsgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yQWJzdHJhY3RGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY2xpY2tpbmcgYSBGSUxFIGxpbmsgYWxzbyBoaWdobGlnaHRzIHRoYXQgZmlsZSBpbiB0aGUgZmlsZSBleHBsb3Jlciwgb24gdG9wIG9mIHRoZSBvcGVuXG4gICAqIE9ic2lkaWFuJ3Mgb3duIGxpbmsgaGFuZGxlciBwZXJmb3Jtcy5cbiAgICpcbiAgICogT3B0LWluLCB1bmxpa2UgdGhlIGZvbGRlciBicmFuY2g6IGEgZm9sZGVyIGxpbmsgaGFzIGFsd2F5cyByZXZlYWxlZCAocmV2ZWFsaW5nIHdhcyBhbGwgaXRzIGNsaWNrXG4gICAqIGNvdWxkIG1lYW4pLCB3aGVyZWFzIGEgZmlsZSBsaW5rIGhhcyBhbHdheXMgb25seSBvcGVuZWQgXHUyMDE0IHNvIHR1cm5pbmcgdGhpcyBvbiBieSBkZWZhdWx0IHdvdWxkIGNoYW5nZVxuICAgKiB3aGF0IGV2ZXJ5IGV4aXN0aW5nIGNhbGxlcidzIGxpbmsgZG9lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmV2ZWFsRmlsZT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mb0NvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5jbGFzcyBFbWJlZEJ5RXh0ZW5zaW9uTWRQYXRjaENvbXBvbmVudCBleHRlbmRzIE1vbmtleUFyb3VuZENvbXBvbmVudCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVtYmVkQnlFeHRlbnNpb246IEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgICRvYmplY3Q6IHRoaXMuZW1iZWRCeUV4dGVuc2lvbixcbiAgICAgIG1ldGhvZE5hbWU6ICdtZCcsXG4gICAgICBwYXRjaEhhbmRsZXI6ICh7XG4gICAgICAgIGZhbGxiYWNrLFxuICAgICAgICBvcmlnaW5hbEFyZ3VtZW50czogW2NvbnRleHRdXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnRleHQuZGlzcGxheU1vZGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm8gaW1wbGVtZW50cyBEb21FdmVudHNIYW5kbGVyc0luZm8ge1xuICBwdWJsaWMgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgaG92ZXJQb3BvdmVyKCk6IEhvdmVyUG9wb3ZlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9ob3ZlclBvcG92ZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IGhvdmVyUG9wb3Zlcihob3ZlclBvcG92ZXI6IEhvdmVyUG9wb3ZlciB8IG51bGwpIHtcbiAgICB0aGlzLl9ob3ZlclBvcG92ZXIgPSBob3ZlclBvcG92ZXI7XG4gICAgaWYgKGhvdmVyUG9wb3ZlciAmJiB0aGlzLnpJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBob3ZlclBvcG92ZXIuaG92ZXJFbC5zZXRDc3NTdHlsZXMoe1xuICAgICAgICB6SW5kZXg6IFN0cmluZyh0aGlzLnpJbmRleClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hvdmVyUG9wb3ZlcjogSG92ZXJQb3BvdmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSB6SW5kZXg/OiBudW1iZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm9Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBhdGggPSBwYXJhbXMucGF0aDtcbiAgICB0aGlzLmVsID0gcGFyYW1zLmVsO1xuXG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2FpdFVudGlsQ29ubmVjdGVkKHRoaXMuZWwpO1xuICAgICAgdGhpcy51cGRhdGVaSW5kZXgodGhpcy5lbCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVpJbmRleChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuekluZGV4ID0gZ2V0WkluZGV4KGVsZW1lbnQpICsgMTtcbiAgfVxufVxuXG4vKipcbiAqIFdoYXQgYSByZW5kZXJlZCBsaW5rIERPRVMgd2hlbiBpdCBpcyBjbGlja2VkLCBob3ZlcmVkLCBkcmFnZ2VkIG9yIHJpZ2h0LWNsaWNrZWQuXG4gKlxuICoge0BsaW5rIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzfSBvbmx5IHBlcmZvcm1zIHRoZSBERUxFR0FUSU9OIGhhbGYgXHUyMDE0IHdoaWNoIGVsZW1lbnQgYW5cbiAqIGV2ZW50IGxhbmRlZCBvbiwgd2hpY2ggbGluayB0ZXh0IGl0IGNhcnJpZXMsIGFuZCB3aGljaCBvZiB0aGVzZSBtZXRob2RzIHRvIGNhbGwuIFRoZSBoYWxmIGl0IGRvZXMgbm90XG4gKiBwcm92aWRlIGlzIHRoaXMgb25lLCBhbmQgT2JzaWRpYW4ga2VlcHMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBwcml2YXRlOiB0aGUgb25seSBoYW5kbGUgb24gaXQgaXMgdGhlXG4gKiBpbnN0YW5jZSBhIGxpdmUgcHJldmlldyB2aWV3IHBhc3NlcyBpbi4ge0BsaW5rIGdldERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3J9IHVzZWQgdG8gb2J0YWluIGl0IGJ5XG4gKiBvcGVuaW5nIGEgcmVhbCBsZWFmIG9uIGFuIGFyYml0cmFyeSBub3RlIGFuZCBpbnRlcmNlcHRpbmcgdGhhdCBjYWxsIFx1MjAxNCB3aGljaCBtdXRhdGVkIHRoZSB1c2VyJ3NcbiAqIHdvcmtzcGFjZSBvbiBFVkVSWSBjb25zdW1lcidzIGxvYWQgKGEgdGFiIG9wZW5pbmcgYW5kIGNsb3NpbmcsIHR3byBgZmlsZS1vcGVuYCBhbmQgdHdvXG4gKiBgYWN0aXZlLWxlYWYtY2hhbmdlYCBldmVudHMsIGFuIHVucmVsYXRlZCBub3RlIHJlbmRlcmVkIGluIHByZXZpZXcpLlxuICpcbiAqIFRoZXNlIGJvZGllcyBhcmUgYSBwb3J0IG9mIHRoYXQgY2xhc3MsIHNvIG5vdGhpbmcgaGFzIHRvIGJlIG9wZW5lZC4gS2VlcGluZ1xuICoge0BsaW5rIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzfSBmb3IgdGhlIGRlbGVnYXRpb24gaXMgd2hhdCBrZWVwcyBmb290bm90ZSBsaW5rcyxcbiAqIHRhZ3MsIGV4dGVybmFsIGxpbmtzLCBtb2QtY2xpY2sgYW5kIGRyYWcgYmVoYXZpbmcgZXhhY3RseSBhcyB0aGV5IGRvIGluc2lkZSBhIHJlYWwgcHJldmlldy5cbiAqL1xuY2xhc3MgTGlua0RvbUV2ZW50c0hhbmRsZXJzIGltcGxlbWVudHMgRG9tRXZlbnRzSGFuZGxlcnMge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbmZvOiBEb21FdmVudHNIYW5kbGVyc0luZm8pIHt9XG5cbiAgcHVibGljIG9uRXh0ZXJuYWxMaW5rQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50LCB0YXJnZXRFbDogSFRNTEVsZW1lbnQsIGxpbmtUZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIWlzVXJsKGxpbmtUZXh0KSkge1xuICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubm90aWNlcy5mYWlsZWRUb09wZW5VcmwsIHsgdXJsOiBsaW5rVGV4dCB9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbW9kaWZpZXJQYW5lVHlwZSA9IEtleW1hcC5pc01vZEV2ZW50KCRldmVudCk7XG4gICAgdGFyZ2V0RWwud2luLm9wZW4obGlua1RleHQsIHR5cGVvZiBtb2RpZmllclBhbmVUeXBlID09PSAnYm9vbGVhbicgPyAnJyA6IG1vZGlmaWVyUGFuZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIG9uRXh0ZXJuYWxMaW5rUmlnaHRDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1lbnUgPSBNZW51LmZvckV2ZW50KCRldmVudCk7XG4gICAgbWVudS5hZGRTZWN0aW9ucyhFWFRFUk5BTF9MSU5LX01FTlVfU0VDVElPTlMpO1xuICAgIGFkZENvcHlNZW51SXRlbShtZW51LCB0YXJnZXRFbCk7XG4gICAgdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2UuaGFuZGxlRXh0ZXJuYWxMaW5rQ29udGV4dE1lbnUobWVudSwgbGlua1RleHQpO1xuICB9XG5cbiAgcHVibGljIG9uSW50ZXJuYWxMaW5rQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50LCBfdGFyZ2V0RWw6IEhUTUxFbGVtZW50LCBsaW5rVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGxpbmtUZXh0LCB0aGlzLmluZm8ucGF0aCwgS2V5bWFwLmlzTW9kRXZlbnQoJGV2ZW50KSkpO1xuICB9XG5cbiAgcHVibGljIG9uSW50ZXJuYWxMaW5rRHJhZygkZXZlbnQ6IERyYWdFdmVudCwgX3RhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkcmFnTWFuYWdlciA9IHRoaXMuaW5mby5hcHAuZHJhZ01hbmFnZXI7XG4gICAgZHJhZ01hbmFnZXIub25EcmFnU3RhcnQoJGV2ZW50LCBkcmFnTWFuYWdlci5kcmFnTGluaygkZXZlbnQsIGxpbmtUZXh0LCB0aGlzLmluZm8ucGF0aCwgdGl0bGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkludGVybmFsTGlua01vdXNlb3ZlcigkZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIGBob3ZlclBhcmVudGAgaXMgdGhlIGluZm8gb2JqZWN0IGl0c2VsZiwgZXhhY3RseSBhcyBPYnNpZGlhbiBwYXNzZXMgaXRzIG93biBcdTIwMTQgd2hpY2ggaXMgd2hhdCBrZWVwc1xuICAgIC8vIGBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mb2AncyBwb3BvdmVyIHotaW5kZXggZml4IGluIHBsYXkuXG4gICAgdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2UudHJpZ2dlcignaG92ZXItbGluaycsIHtcbiAgICAgIGV2ZW50OiAkZXZlbnQsXG4gICAgICBob3ZlclBhcmVudDogdGhpcy5pbmZvLFxuICAgICAgbGlua3RleHQ6IGxpbmtUZXh0LFxuICAgICAgc291cmNlOiAncHJldmlldycsXG4gICAgICBzb3VyY2VQYXRoOiB0aGlzLmluZm8ucGF0aCxcbiAgICAgIHRhcmdldEVsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25JbnRlcm5hbExpbmtSaWdodENsaWNrKCRldmVudDogTW91c2VFdmVudCwgdGFyZ2V0RWw6IEhUTUxFbGVtZW50LCBsaW5rVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWVudSA9IE1lbnUuZm9yRXZlbnQoJGV2ZW50KTtcbiAgICBtZW51LnNldFBhcmVudEVsZW1lbnQodGFyZ2V0RWwpO1xuICAgIG1lbnUuYWRkU2VjdGlvbnMoSU5URVJOQUxfTElOS19NRU5VX1NFQ1RJT05TKTtcbiAgICBhZGRDb3B5TWVudUl0ZW0obWVudSwgdGFyZ2V0RWwpO1xuICAgIHRoaXMuaW5mby5hcHAud29ya3NwYWNlLmhhbmRsZUxpbmtDb250ZXh0TWVudShtZW51LCBsaW5rVGV4dCwgdGhpcy5pbmZvLnBhdGgpO1xuICB9XG5cbiAgcHVibGljIG9uVGFnQ2xpY2soXyRldmVudDogTW91c2VFdmVudCwgX3RhcmdldEVsOiBIVE1MRWxlbWVudCwgdGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBgcmVnaXN0ZXJEb21FdmVudHNgIGhhcyBhbHJlYWR5IGNhbGxlZCBgcHJldmVudERlZmF1bHQoKWAgZm9yIGEgdGFnIGNsaWNrLlxuICAgIHRoaXMuaW5mby5hcHAuaW50ZXJuYWxQbHVnaW5zLmdldEVuYWJsZWRQbHVnaW5CeUlkKEludGVybmFsUGx1Z2luTmFtZS5HbG9iYWxTZWFyY2gpPy5vcGVuR2xvYmFsU2VhcmNoKGB0YWc6JHt0YWd9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5kZXIgdGhlIG1hcmtkb3duIGFuZCBlbWJlZHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVsbCByZW5kZXIuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZnVsbCByZW5kZXIgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmdWxsUmVuZGVyKHBhcmFtczogRnVsbFJlbmRlclBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzb3VyY2VQYXRoID0gcGFyYW1zLnNvdXJjZVBhdGggPz8gJy8nO1xuICBsZXQgc2hvdWxkVW5sb2FkQ29tcG9uZW50ID0gZmFsc2U7XG4gIGxldCBjb21wb25lbnQ6IENvbXBvbmVudDtcbiAgaWYgKHBhcmFtcy5jb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBwYXJhbXMuY29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnQoKTtcbiAgICBjb21wb25lbnQubG9hZCgpO1xuICAgIHNob3VsZFVubG9hZENvbXBvbmVudCA9IHRydWU7XG4gIH1cblxuICB1c2luZyBfID0gY29tcG9uZW50LmFkZENoaWxkKG5ldyBFbWJlZEJ5RXh0ZW5zaW9uTWRQYXRjaENvbXBvbmVudChwYXJhbXMuYXBwLmVtYmVkUmVnaXN0cnkuZW1iZWRCeUV4dGVuc2lvbikpO1xuXG4gIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKHBhcmFtcy5hcHAsIHBhcmFtcy5tYXJrZG93biwgcGFyYW1zLmVsLCBzb3VyY2VQYXRoLCBjb21wb25lbnQpO1xuXG4gIGlmIChzaG91bGRVbmxvYWRDb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQudW5sb2FkKCk7XG4gIH1cblxuICBpZiAocGFyYW1zLnNob3VsZFJlZ2lzdGVyTGlua0hhbmRsZXJzKSB7XG4gICAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFJlZ2lzdGVyTGlua0hhbmRsZXJzUGFyYW1zPih7XG4gICAgICBhcHA6IHBhcmFtcy5hcHAsXG4gICAgICBlbDogcGFyYW1zLmVsLFxuICAgICAgc291cmNlUGF0aDogcGFyYW1zLnNvdXJjZVBhdGhcbiAgICB9KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBNYXJrZG93biB0byBIVE1MLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNvbnZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgSFRNTCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXJrZG93blRvSHRtbChwYXJhbXM6IE1hcmtkb3duVG9IdG1sUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBtYXJrZG93bixcbiAgICBzb3VyY2VQYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnQoKTtcbiAgY29tcG9uZW50LmxvYWQoKTtcbiAgY29uc3QgcmVuZGVyRGl2ID0gY3JlYXRlRGl2KCk7XG4gIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKGFwcCwgbWFya2Rvd24sIHJlbmRlckRpdiwgc291cmNlUGF0aCA/PyAnJywgY29tcG9uZW50KTtcbiAgY29uc3QgaHRtbCA9IHJlbmRlckRpdi5pbm5lckhUTUw7XG4gIGNvbXBvbmVudC51bmxvYWQoKTtcbiAgcmV0dXJuIGh0bWw7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGxpbmsgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVnaXN0ZXJpbmcgbGluayBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTGlua0hhbmRsZXJzKHBhcmFtczogUmVnaXN0ZXJMaW5rSGFuZGxlcnNQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBlbCxcbiAgICBzb3VyY2VQYXRoXG4gIH0gPSBwYXJhbXM7XG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzKFxuICAgIGVsLFxuICAgIG5ldyBMaW5rRG9tRXZlbnRzSGFuZGxlcnMoXG4gICAgICBuZXcgRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm8oe1xuICAgICAgICBhcHAsXG4gICAgICAgIGVsLFxuICAgICAgICBwYXRoOiBzb3VyY2VQYXRoID8/ICcnXG4gICAgICB9KVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGFuIGV4dGVybmFsIGxpbmsuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIGV4dGVybmFsIGxpbmsuXG4gKiBAcmV0dXJucyBUaGUgSFRNTEFuY2hvckVsZW1lbnQgY29udGFpbmluZyB0aGUgcmVuZGVyZWQgZXh0ZXJuYWwgbGluay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckV4dGVybmFsTGluayhwYXJhbXM6IFJlbmRlckV4dGVybmFsTGlua1BhcmFtcyk6IFByb21pc2U8SFRNTEFuY2hvckVsZW1lbnQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICB1cmxcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZGlzcGxheVRleHQgPSBwYXJhbXMuZGlzcGxheVRleHQgPz8gdXJsO1xuICBjb25zdCB3cmFwcGVyRWwgPSBjcmVhdGVTcGFuKCk7XG4gIGF3YWl0IGZ1bGxSZW5kZXIoe1xuICAgIGFwcCxcbiAgICBlbDogd3JhcHBlckVsLFxuICAgIG1hcmtkb3duOiBgWyR7ZGlzcGxheVRleHR9XSgke3VybH0pYFxuICB9KTtcbiAgY29uc3QgYUVsID0gd3JhcHBlckVsLmZpbmQoJ2EnKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMoe1xuICAgIGFwcCxcbiAgICBlbDogYUVsXG4gIH0pO1xuICByZXR1cm4gYUVsO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYW4gaW50ZXJuYWwgbGluay5cbiAqXG4gKiBXaGF0IGNsaWNraW5nIHRoZSByZW5kZXJlZCBsaW5rIGRvZXMgZGVwZW5kcyBvbiB3aGF0IGl0IG5hbWVzOlxuICpcbiAqIC0gQSBGSUxFIGlzIG9wZW5lZCBieSBPYnNpZGlhbidzIG93biBsaW5rIGhhbmRsZXIgXHUyMDE0IGFuZCwgd2l0aFxuICogICB7QGxpbmsgUmVuZGVySW50ZXJuYWxMaW5rUGFyYW1zLnNob3VsZFJldmVhbEZpbGV9LCBhZGRpdGlvbmFsbHkgcmV2ZWFsZWQgaW4gdGhlIGZpbGUgZXhwbG9yZXIuXG4gKiAtIEEgRk9MREVSIGNhbm5vdCBiZSBvcGVuZWQsIHNvIGl0cyBGT0xERVIgTk9URSBpcyBcdTIwMTQgdGhlIG5vdGUgd2hvc2UgcHJvcGVydGllcyBkZXNjcmliZSB0aGUgZm9sZGVyXG4gKiAgIGl0c2VsZiwgcmVzb2x2ZWQgdGhyb3VnaCB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGV9IChieSBkZWZhdWx0IGZyb20gdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYFxuICogICBwbHVnaW4ncyBsaXZlIGNvbmZpZ3VyYXRpb24pLiBUaGUgcmV2ZWFsIGxhbmRzIG9uIHRoYXQgbm90ZSwgdW5sZXNzIHRoZSBub3RlIGlzIGhpZGRlbiBpbiB0aGVcbiAqICAgZXhwbG9yZXIsIGluIHdoaWNoIGNhc2UgaXQgbGFuZHMgb24gdGhlIGZvbGRlciBcdTIwMTQgcmV2ZWFsaW5nIGEgaGlkZGVuIG5vdGUgd291bGQgaGlnaGxpZ2h0IG5vdGhpbmcuXG4gKiAgIEEgZm9sZGVyIHdpdGggTk8gZm9sZGVyIG5vdGUgcmV2ZWFscyB0aGUgZm9sZGVyIGFuZCBvcGVucyBub3RoaW5nOiBub3RoaW5nIGhlcmUgZXZlciBjcmVhdGVzIGEgbm90ZS5cbiAqXG4gKiBFdmVyeXRoaW5nIGlzIHJlc29sdmVkIGF0IENMSUNLIHRpbWUgcmF0aGVyIHRoYW4gYXQgcmVuZGVyIHRpbWUsIGRlbGliZXJhdGVseTogYSByZW5kZXJlZCBsaW5rIG91dGxpdmVzXG4gKiB0aGUgb3BlcmF0aW9uIHRoYXQgcHJvZHVjZWQgaXQsIHNvIGEgZGVzdGluYXRpb24gcmVuYW1lZCBpbiBiZXR3ZWVuIHN0aWxsIHJldmVhbHMgdGhlIHJpZ2h0IGl0ZW0sIGFuZCBhXG4gKiBmb2xkZXIgbm90ZSB3cml0dGVuIGFmdGVyIHRoZSBsaW5rIGFwcGVhcmVkIGlzIHN0aWxsIGZvdW5kLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBpbnRlcm5hbCBsaW5rLlxuICogQHJldHVybnMgVGhlIEhUTUxBbmNob3JFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHJlbmRlcmVkIGludGVybmFsIGxpbmsuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJJbnRlcm5hbExpbmsocGFyYW1zOiBSZW5kZXJJbnRlcm5hbExpbmtQYXJhbXMpOiBQcm9taXNlPEhUTUxBbmNob3JFbGVtZW50PiB7XG4gIGNvbnN0IHtcbiAgICBhZnRlclJldmVhbCxcbiAgICBhcHAsXG4gICAgZm9sZGVyTm90ZSxcbiAgICBwYXRoT3JBYnN0cmFjdEZpbGUsXG4gICAgc2hvdWxkUmV2ZWFsRmlsZVxuICB9ID0gcGFyYW1zO1xuXG4gIC8vIEEgRE9NIGxpc3RlbmVyIGNhbm5vdCBhd2FpdCwgc28gdGhlIHJldmVhbCwgYW5kIHRoZSBob29rIG9yZGVyZWQgYWZ0ZXIgaXQsIHJ1biBkZXRhY2hlZC5cbiAgZnVuY3Rpb24gcmV2ZWFsKGFic3RyYWN0RmlsZVRvUmV2ZWFsOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmV2ZWFsSW5GaWxlRXhwbG9yZXIoeyBhYnN0cmFjdEZpbGU6IGFic3RyYWN0RmlsZVRvUmV2ZWFsLCBhcHAgfSk7XG4gICAgICBhd2FpdCBhZnRlclJldmVhbD8uKCk7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgYWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yQWJzdHJhY3RGaWxlKTtcbiAgY29uc3QgZGlzcGxheVRleHQgPSBwYXJhbXMuZGlzcGxheVRleHQgPz8gcGF0aDtcbiAgaWYgKGlzRm9sZGVyKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gY3JlYXRlRWwoJ2EnLCB7IHRleHQ6IGRpc3BsYXlUZXh0IH0sIChhRWwpID0+IHtcbiAgICAgIGFFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHsgYXBwLCAuLi5mb2xkZXJOb3RlIH0pO1xuICAgICAgICBjb25zdCBmb2xkZXJOb3RlRmlsZSA9IHJlc29sdmVGb2xkZXJOb3RlKHsgYXBwLCBjb25maWcsIGZvbGRlcjogYWJzdHJhY3RGaWxlIH0pO1xuICAgICAgICByZXZlYWwoZm9sZGVyTm90ZUZpbGUgJiYgIWNvbmZpZy5pc0hpZGRlbiA/IGZvbGRlck5vdGVGaWxlIDogYWJzdHJhY3RGaWxlKTtcbiAgICAgICAgaWYgKGZvbGRlck5vdGVGaWxlKSB7XG4gICAgICAgICAgLy8gQSBET00gbGlzdGVuZXIgY2Fubm90IGF3YWl0LCBhbmQgdGhlIG9wZW4gaGFzIHRvIG91dGxpdmUgdGhpcyBoYW5kbGVyOiBpdCBzZXR0bGVzIGZpcnN0LCBmb3JcbiAgICAgICAgICAvLyB0aGUgY2xpY2sgdGhhdCBsYW5kcyByaWdodCBhcyBhbiBvcGVyYXRpb24gZmluaXNoZXMgd3JpdGluZy5cbiAgICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBvcGVuQWZ0ZXJTZXR0bGluZyhhcHAsIGZvbGRlck5vdGVGaWxlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgd3JhcHBlckVsID0gY3JlYXRlU3BhbigpO1xuICBhd2FpdCBmdWxsUmVuZGVyKHtcbiAgICBhcHAsXG4gICAgZWw6IHdyYXBwZXJFbCxcbiAgICBtYXJrZG93bjogYFtbJHtwYXRofXwke2Rpc3BsYXlUZXh0fV1dYFxuICB9KTtcbiAgY29uc3QgYUVsID0gd3JhcHBlckVsLmZpbmQoJ2EnKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMoe1xuICAgIGFwcCxcbiAgICBlbDogYUVsXG4gIH0pO1xuICBpZiAoc2hvdWxkUmV2ZWFsRmlsZSA/PyBmYWxzZSkge1xuICAgIGFFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIC8vIExheWVyZWQgT04gVE9QIG9mIE9ic2lkaWFuJ3Mgb3duIGhhbmRsZXIgXHUyMDE0IG5vIGBwcmV2ZW50RGVmYXVsdGAsIHNvIHRoZSBvcGVuIGlzIHVudG91Y2hlZC4gQSBwYXRoXG4gICAgICAvLyB0aGF0IHJlc29sdmVzIHRvIG5vdGhpbmcgZ2V0cyBubyByZXZlYWw6IGFuIHVucmVzb2x2ZWQgbGluayBoYXMgbm90aGluZyB0byByZXZlYWwsIGFuZCBjbGlja2luZ1xuICAgICAgLy8gb25lIENSRUFURVMgdGhlIG5vdGUgaXQgbmFtZXMuXG4gICAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG4gICAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICAgIHJldmVhbChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYUVsO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIGBjbGlwYm9hcmRgLXNlY3Rpb24gQ29weSBpdGVtIGV2ZXJ5IGxpbmsgY29udGV4dCBtZW51IGNhcnJpZXMsIGNvcHlpbmcgdGhlIGxpbmsncyBESVNQTEFZXG4gKiB0ZXh0IFx1MjAxNCB3aGljaCBpcyB3aGF0IE9ic2lkaWFuJ3Mgb3duIG1lbnUgY29waWVzLCBub3QgdGhlIHRhcmdldCBwYXRoLlxuICpcbiAqIEBwYXJhbSBtZW51IC0gVGhlIG1lbnUgdG8gYWRkIHRoZSBpdGVtIHRvLlxuICogQHBhcmFtIHRhcmdldEVsIC0gVGhlIGxpbmsgZWxlbWVudCB0aGUgbWVudSB3YXMgb3BlbmVkIG9uLlxuICovXG5mdW5jdGlvbiBhZGRDb3B5TWVudUl0ZW0obWVudTogTWVudSwgdGFyZ2V0RWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgIGl0ZW1cbiAgICAgIC5zZXRTZWN0aW9uKCdjbGlwYm9hcmQnKVxuICAgICAgLnNldFRpdGxlKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5tZW51LmNvcHkpKVxuICAgICAgLnNldEljb24oJ2x1Y2lkZS1jb3B5JylcbiAgICAgIC5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGFyZ2V0RWwud2luLm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRhcmdldEVsLmdldFRleHQoKSkpO1xuICAgICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGEgZmlsZSBpbiB0aGUgYWN0aXZlIGxlYWYsIG9uY2UgdGhlIHZhdWx0IGhhcyBzZXR0bGVkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBmaWxlIGlzIG9wZW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW5BZnRlclNldHRsaW5nKGFwcDogQXBwLCBmaWxlOiBURmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcCh7IG1pbGxpc2Vjb25kczogREVMQVlfQkVGT1JFX09QRU5fSU5fTUlMTElTRUNPTkRTIH0pO1xuICBhd2FpdCBhcHAud29ya3NwYWNlLmdldExlYWYoKS5vcGVuRmlsZShmaWxlLCB7IGFjdGl2ZTogdHJ1ZSB9KTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1DQUFtQztBQUM1QyxTQUFTLGFBQWE7QUFDdEIsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxTQUFTO0FBQ2xCO0FBQUEs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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 initEsm() {
@@ -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 initEsm() {
@@ -459,4 +451,4 @@ export {
459
451
  unregisterFileCacheForNonExistingFile,
460
452
  unregisterFiles
461
453
  };
462
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21ldGFkYXRhLWNhY2hlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbWV0YWRhdGEgY2FjaGUgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZXRyeU9wdGlvbnMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BcnJheURpY3QgfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0JztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDYWNoZWRNZXRhZGF0YSxcbiAgUmVmZXJlbmNlLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ2FsbGJhY2tEaXNwb3NhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHsgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHtcbiAgQ3VzdG9tQXJyYXlEaWN0SW1wbCxcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZSxcbiAgcGFyZW50Rm9sZGVyUGF0aFxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBDb21iaW5lZEZyb250bWF0dGVyIH0gZnJvbSAnLi9mcm9udG1hdHRlci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlLFxuICBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzLFxuICBQYXJzZUxpbmtSZWZlcmVuY2Vcbn0gZnJvbSAnLi9wYXJzZS1saW5rLnRzJztcblxuaW1wb3J0IHsgcmV0cnlXaXRoVGltZW91dE5vdGljZSB9IGZyb20gJy4vYXN5bmMtd2l0aC1ub3RpY2UudHMnO1xuaW1wb3J0IHsgZ2V0SW5kZXhlZEJhY2tsaW5rc0ZvckZpbGUgfSBmcm9tICcuL2JhY2tsaW5rLWluZGV4LnRzJztcbmltcG9ydCB7XG4gIGdldEZpbGUsXG4gIGdldEZpbGVPck51bGwsXG4gIGdldEZvbGRlcixcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlLFxuICBpc0ZpbGVcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMsXG4gIHRvRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0c1xufSBmcm9tICcuL2Zyb250bWF0dGVyLWxpbmstY2FjaGUtd2l0aC1vZmZzZXRzLnRzJztcbmltcG9ydCB7IHBhcnNlRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1zdGF0ZS50cyc7XG5pbXBvcnQge1xuICBwYXJzZUZyb250bWF0dGVyTGlua3MsXG4gIHBhcnNlTGlua3MsXG4gIHRvUGFyc2VMaW5rUmVmZXJlbmNlXG59IGZyb20gJy4vcGFyc2UtbGluay50cyc7XG5pbXBvcnQgeyBzb3J0UmVmZXJlbmNlcyB9IGZyb20gJy4vcmVmZXJlbmNlLnRzJztcbmltcG9ydCB7XG4gIHJlYWRTYWZlLFxuICBzYXZlTm90ZVxufSBmcm9tICcuL3ZhdWx0LnRzJztcblxuLyoqXG4gKiBBIHBhcnNpbmcgZmVhdHVyZSB0aGF0IHdhcyBhcHBsaWVkIHdoZW4gY29tcHV0aW5nIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICovXG5leHBvcnQgZW51bSBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZSB7XG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gdGhlIG5vdGUgY29udGVudCBib2R5LlxuICAgKi9cbiAgRXh0ZXJuYWxMaW5rcyA9ICdFeHRlcm5hbExpbmtzJyxcblxuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIHNpbmdsZS1saW5rIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKi9cbiAgRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gJ0Zyb250bWF0dGVyRXh0ZXJuYWxMaW5rcycsXG5cbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKi9cbiAgTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyA9ICdNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzJyxcblxuICAvKipcbiAgICogVGhlIGludGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMsIHdoaWNoIE9ic2lkaWFuIGRvZXMgbm90IG5hdGl2ZWx5IGNhY2hlLlxuICAgKi9cbiAgTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MgPSAnTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MnLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIG5hdGl2ZSBtZXRhZGF0YSBwYXJzaW5nIChpbnRlcm5hbCBsaW5rcywgZW1iZWRzLCBmcm9udG1hdHRlciBsaW5rcykuXG4gICAqL1xuICBOYXRpdmUgPSAnTmF0aXZlJ1xufVxuXG4vKipcbiAqIEFuIGV4dGVuZGVkIHtAbGluayBDYWNoZWRNZXRhZGF0YX0gdGhhdCByZWNvcmRzIHdoaWNoIHBhcnNpbmcge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlfXMgd2VyZVxuICogYXBwbGllZCAodmlhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4LmZlYXR1cmVzfSkgYW5kIGNhcnJpZXMgdGhlIHJlc3VsdGluZyBleHRlcm5hbCBsaW5rcy4gRWFjaCBsaW5rc1xuICogYXJyYXkgaXMgcG9wdWxhdGVkIG9ubHkgd2hlbiBpdHMgY29ycmVzcG9uZGluZyBmZWF0dXJlIGlzIHByZXNlbnQgaW4ge0BsaW5rIENhY2hlZE1ldGFkYXRhRXguZmVhdHVyZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZE1ldGFkYXRhRXggZXh0ZW5kcyBDYWNoZWRNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gdGhlIG5vdGUgY29udGVudCBib2R5LiBQb3B1bGF0ZWQgb25seSB3aGVuXG4gICAqIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5FeHRlcm5hbExpbmtzfSBpcyBhcHBsaWVkLlxuICAgKi9cbiAgZXh0ZXJuYWxMaW5rcz86IFBhcnNlTGlua1JlZmVyZW5jZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2luZyBmZWF0dXJlcyB0aGF0IHdlcmUgYXBwbGllZCB3aGVuIGNvbXB1dGluZyB0aGlzIGNhY2hlLlxuICAgKi9cbiAgcmVhZG9ubHkgZmVhdHVyZXM6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlW107XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBzaW5nbGUtbGluayAoc2luZ2xlLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy4gUG9wdWxhdGVkIG9ubHlcbiAgICogd2hlbiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzfSBpcyBhcHBsaWVkLlxuICAgKi9cbiAgZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy4gUG9wdWxhdGVkIG9ubHkgd2hlblxuICAgKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIG11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzW107XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuIFBvcHVsYXRlZCBvbmx5IHdoZW5cbiAgICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLk11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzfSBpcyBhcHBsaWVkLlxuICAgKi9cbiAgbXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3M/OiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZU9wdGlvbnMgZXh0ZW5kcyBSZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IGEgdGltZW91dCBub3RpY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd1RpbWVvdXROb3RpY2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVQYXJhbXMgZXh0ZW5kcyBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZvciB0aGUgZ2V0QmFja2xpbmtzRm9yRmlsZSBtZXRob2QgdGhhdCBwcm92aWRlcyBhIHNhZmUgb3ZlcmxvYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVXcmFwcGVyIHtcbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgc2FmZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IGRpY3Rpb25hcnkgb2YgYmFja2xpbmtzLlxuICAgKi9cbiAgc2FmZTogKHBhdGhPckZpbGU6IFBhdGhPckZpbGUpID0+IFByb21pc2U8Q3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRDYWNoZVNhZmV9LlxuICovXG5leHBvcnQgdHlwZSBHZXRDYWNoZVNhZmVPcHRpb25zID0gUGFyc2VDYWNoZU9wdGlvbnM7XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZ2V0TGlua3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldExpbmtzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWNoZWQgbWV0YWRhdGEgdG8gcmV0cmlldmUgdGhlIGxpbmtzIGZyb20uXG4gICAqL1xuICByZWFkb25seSBjYWNoZTogQ2FjaGVkTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZW1iZWRzIChgY2FjaGUuZW1iZWRzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZUVtYmVkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gdGhlIG5vdGUgYm9keS4gUmVxdWlyZXMgdGhlIGNhY2hlIHRvIGJlIGFcbiAgICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRXh0ZXJuYWxMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgKHNpbmdsZS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlclxuICAgKiB2YWx1ZXMuIFJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZnJvbnRtYXR0ZXIgbGlua3MgKGBjYWNoZS5mcm9udG1hdHRlckxpbmtzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcyxcbiAgICogaS5lLiB0aGUgb2Zmc2V0LWNhcnJ5aW5nIGZyb250bWF0dGVyIGV4dGVybmFsIGxpbmtzIChuYXJyb3dlZCB2aWFcbiAgICoge0BsaW5rIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0c30pLiBSZXF1aXJlcyB0aGUgY2FjaGUgdG8gYmUgYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBpbnRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqIFJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSByZWZlcmVuY2UgbGlua3MgKGBjYWNoZS5saW5rc2ApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVSZWZlcmVuY2VzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgcGFyc2luZyBwZXJmb3JtZWQgYnkge0BsaW5rIGdldENhY2hlU2FmZX0gYW5kIHtAbGluayBwYXJzZU1ldGFkYXRhfSBiZXlvbmQgT2JzaWRpYW4nc1xuICogbmF0aXZlIG1ldGFkYXRhIHBhcnNpbmcuIEVhY2ggb3B0aW9uIGlzIG9wdC1pbjsgZW5hYmxpbmcgaXQgYWRkcyB0aGUgY29ycmVzcG9uZGluZ1xuICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlfSBhbmQgcG9wdWxhdGVzIHRoZSBtYXRjaGluZyBsaW5rcyBhcnJheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZUNhY2hlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBleHRlcm5hbCBsaW5rcyBmcm9tIHRoZSBub3RlIGNvbnRlbnQgYm9keS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwYXJzZSB0aGUgZXh0ZXJuYWwgbGlua3MgZnJvbSBzaW5nbGUtbGluayAoc2luZ2xlLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBleHRlcm5hbCBsaW5rcyBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwYXJzZSB0aGUgaW50ZXJuYWwgbGlua3MgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFBhcnNlTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBwYXJzZU1ldGFkYXRhfS5cbiAqL1xuZXhwb3J0IHR5cGUgUGFyc2VNZXRhZGF0YU9wdGlvbnMgPSBQYXJzZUNhY2hlT3B0aW9ucztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGZpbGUgY2FjaGUgdG8gcmVnaXN0ZXIuXG4gICAqL1xuICByZWFkb25seSBjYWNoZTogQ2FjaGVkTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gcmVnaXN0ZXIgdGhlIGZpbGUgY2FjaGUgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBBIHNlbGVjdG9yIGZvciBhIGZlYXR1cmUtZ2F0ZWQgbGluayBjYXRlZ29yeSBpbiB7QGxpbmsgZ2V0TGlua3N9LlxuICovXG5pbnRlcmZhY2UgRmVhdHVyZUxpbmtTZWxlY3RvciB7XG4gIC8qKlxuICAgKiBBIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5rIGNhdGVnb3J5LCB1c2VkIGluIGVycm9yIG1lc3NhZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZlYXR1cmUgdGhhdCBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIGNhY2hlIGZvciB0aGlzIGNhdGVnb3J5IHRvIGJlIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlO1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBsaW5rcyBmb3IgdGhpcyBjYXRlZ29yeSBmcm9tIHRoZSBjYWNoZS5cbiAgICovXG4gIHNlbGVjdDogKGNhY2hlOiBDYWNoZWRNZXRhZGF0YUV4KSA9PiBSZWZlcmVuY2VbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoaXMgY2F0ZWdvcnkuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeH0uXG4gKi9cbmludGVyZmFjZSBUb1BhcnNlZENhY2hlZE1ldGFkYXRhRXhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBsYWluIGNhY2hlZCBtZXRhZGF0YSB0byB3cmFwLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGU6IENhY2hlZE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90ZSBjb250ZW50IHRoZSBvZmZzZXRzIGluZGV4IGludG8sIHVzZWQgZm9yIGJvZHkgZXh0ZXJuYWwtbGluayBwYXJzaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2Ugb3B0aW9ucyBjb250cm9sbGluZyB3aGljaCBsaW5rcyB0byBwYXJzZS5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IFBhcnNlQ2FjaGVPcHRpb25zO1xufVxuXG4vKipcbiAqIFRoZSBwbHVnaW4gaWQgb2YgdGhlIEFkdmFuY2VkIE1ldGFkYXRhIENhY2hlIHBsdWdpbiwgdGhlIHN1Y2Nlc3NvciB0byBCYWNrbGluayBDYWNoZS5cbiAqXG4gKiBVc2VkIGJ5IHtAbGluayBoYXNCYWNrbGlua0NhY2hlUGx1Z2lufS4gTm90ZSB0aGF0IHtAbGluayBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZX0gZG9lcyBOT1QgbmVlZCB0aGlzIGlkOiBpdCBkZXRlY3RzIHRoZSBjYWNoZSBieSB0aGUge0BsaW5rIEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlV3JhcHBlci5zYWZlfSBvdmVybG9hZCBncmFmdGVkIG9udG8gYE1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZWAsIHdoaWNoIGJvdGggcGx1Z2lucyBpbnN0YWxsIGFuZCB3aGljaCBuYW1lcyBubyBwbHVnaW4uXG4gKi9cbmV4cG9ydCBjb25zdCBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9QTFVHSU5fSUQgPSAnYWR2YW5jZWQtbWV0YWRhdGEtY2FjaGUnO1xuXG4vKipcbiAqIFRoZSBwbHVnaW4gaWQgb2YgdGhlIHJldGlyZWQgQmFja2xpbmsgQ2FjaGUgcGx1Z2luLCBzdXBlcnNlZGVkIGJ5IHtAbGluayBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9QTFVHSU5fSUR9LlxuICpcbiAqIFN0aWxsIHJlY29nbml6ZWQgYnkge0BsaW5rIGhhc0JhY2tsaW5rQ2FjaGVQbHVnaW59LCBkZWxpYmVyYXRlbHkuIFJlbW92aW5nIGEgcGx1Z2luIGZyb20gdGhlIGNvbW11bml0eSByZWdpc3RyeSBibG9ja3MgbmV3IGluc3RhbGxzOyBpdCB1bmluc3RhbGxzIG5vdGhpbmcsIHNvIGV2ZXJ5IGV4aXN0aW5nIHVzZXIga2VlcHMgaXQgdW50aWwgdGhleSBtaWdyYXRlIGJ5IGhhbmQuXG4gKlxuICogSXQgbWF5IGJlIGRyb3BwZWQgd2hlbiBhbGwgdGhyZWUgb2YgdGhlIGZvbGxvd2luZyBob2xkLCBhbmQgbm90IGJlZm9yZTogQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGUgaXMgbGlzdGVkIGluIHRoZSBjb21tdW5pdHkgcmVnaXN0cnksIHNvIG1pZ3JhdGluZyBpcyBwb3NzaWJsZSBhdCBhbGw7IHRoZSBmaW5hbCBCYWNrbGluayBDYWNoZSBoYW5kb3ZlciByZWxlYXNlIGhhcyBiZWVuIG91dCBmb3IgYXQgbGVhc3QgdHdlbHZlIG1vbnRoczsgYW5kIHRoaXMgbGlicmFyeSBpcyBjdXR0aW5nIGEgbWFqb3IgcmVsZWFzZSBhbnl3YXksIGJlY2F1c2UgZHJvcHBpbmcgdGhlIGlkIHNpbGVudGx5IHVuLWdhdGVzIGNhbnZhcyBsaW5rIGhhbmRsaW5nIGZvciBhbnlvbmUgd2hvIGhhcyBub3QgbWlncmF0ZWQuIFRoZXJlIGlzIG5vIGNvc3QgcHJlc3N1cmUgdG8gZHJvcCBpdCBlYXJsaWVyIC0gcmVjb2duaXppbmcgYSBkZWFkIGlkIGlzIG9uZSBzdHJpbmcgY29tcGFyaXNvbiBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IHJlYWRzIGEgcGx1Z2luIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgY29uc3QgQkFDS0xJTktfQ0FDSEVfUExVR0lOX0lEID0gJ2JhY2tsaW5rLWNhY2hlJztcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgdGhlIG1ldGFkYXRhIGNhY2hlIGlzIHJlYWR5IGZvciBhbGwgZmlsZXMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1ldGFkYXRhIGNhY2hlIGlzIHJlYWR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTWV0YWRhdGFDYWNoZVJlYWR5KGFwcDogQXBwKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgYXBwLm1ldGFkYXRhQ2FjaGUub25DbGVhbkNhY2hlKHJlc29sdmUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIG9yIHBhdGguXG4gKiBOT1RFOiBUaGUgZmlsZSBtYXkgYmUgbm9uLWV4aXN0ZW50LlxuICpcbiAqIFdoZW4gYSBiYWNrbGluay1jYWNoZSBwbHVnaW4gaGFzIGdyYWZ0ZWQgaXRzIHtAbGluayBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZVdyYXBwZXIuc2FmZX0gb3ZlcmxvYWQgb250b1xuICogYE1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZWAsIHRoYXQgcGF0Y2hlZCBtZXRob2QgYW5zd2Vycy4gT3RoZXJ3aXNlIHRoZSBhbnN3ZXIgY29tZXMgZnJvbSBhIGJhY2tsaW5rXG4gKiBpbmRleCB3aG9zZSBjb3N0IGlzIHByb3BvcnRpb25hbCB0byB0aGUgY2FuZGlkYXRlIG5vdGVzIHJhdGhlciB0aGFuIHRvIGV2ZXJ5IHJlZmVyZW5jZSBpbiB0aGUgdmF1bHQsIGFuZCB3aGljaFxuICogZ2l2ZXMgdGhlIHNhbWUgcmVmZXJlbmNlcyBPYnNpZGlhbidzIG93biBgZ2V0QmFja2xpbmtzRm9yRmlsZWAgZ2l2ZXMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvYmplY3QuXG4gKiBAcmV0dXJucyBUaGUgYmFja2xpbmtzIGZvciB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlLCBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWUgfSk7XG4gIHVzaW5nIF9yZWdpc3RyYXRpb24gPSByZWdpc3RlckZpbGVzKGFwcCwgW2ZpbGVdKTtcbiAgcmV0dXJuIGhhc0JhY2tsaW5rQ2FjaGVTYWZlT3ZlcmxvYWQoYXBwKSA/IGFwcC5tZXRhZGF0YUNhY2hlLmdldEJhY2tsaW5rc0ZvckZpbGUoZmlsZSkgOiBnZXRJbmRleGVkQmFja2xpbmtzRm9yRmlsZShhcHAsIGZpbGUpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgc2FmZWx5LlxuICpcbiAqIFRoaXMgaXMgTk9UIGEgcHVyZSByZWFkLiBXaGVuIG5vIGJhY2tsaW5rLWNhY2hlIHBsdWdpbiBzdXBwbGllcyB0aGUgYHNhZmVgIG92ZXJsb2FkLCBpdCB2ZXJpZmllc1xuICogZWFjaCBiYWNrbGluayBhZ2FpbnN0IHRoZSBub3RlJ3MgY3VycmVudCB0ZXh0LCBhbmQgdG8gZG8gdGhhdCBpdCBjYWxscyB7QGxpbmsgc2F2ZU5vdGV9IG9uIGV2ZXJ5XG4gKiBub3RlIHRoYXQgbGlua3MgdG8gdGhlIGZpbGUsIHdoaWNoIHNhdmVzIGFueSBvcGVuIGVkaXRvciB2aWV3IG9mIHRob3NlIG5vdGVzIHRoYXQgaGFzIHVuc2F2ZWRcbiAqIGNoYW5nZXMuIENhbGwgaXQgZnJvbSBhbiBleHBsaWNpdCB1c2VyIGFjdGlvbi4gRG8gbm90IGNhbGwgaXQgZnJvbSBhbiBhdXRvbWF0aWMgdHJpZ2dlciAoYSB2YXVsdCBvclxuICogbWV0YWRhdGEgZXZlbnQsIGEgc2F2ZSBvciByZW5kZXIgcGF0Y2gpIHRoYXQgb25seSBkZWNpZGVzIHdoZXRoZXIgdG8gYWN0LiBUaGVyZSwgYSBmb3JjZWQgc2F2ZSBjYW5cbiAqIHJhY2UgYW5vdGhlciBwbHVnaW4ncyBpbi1mbGlnaHQgZWRpdG9yIGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJldHJpZXZpbmcgdGhlIGJhY2tsaW5rcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgZGljdGlvbmFyeSBvZiBiYWNrbGlua3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShwYXJhbXM6IEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlUGFyYW1zKTogUHJvbWlzZTxDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPj4ge1xuICBjb25zdCB7IGFwcCwgcGF0aE9yRmlsZSwgLi4ub3B0aW9ucyB9ID0gcGFyYW1zO1xuICBjb25zdCBzYWZlT3ZlcmxvYWQgPSAoYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZSBhcyBQYXJ0aWFsPEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlV3JhcHBlcj4pLnNhZmU7XG4gIGlmIChzYWZlT3ZlcmxvYWQpIHtcbiAgICByZXR1cm4gc2FmZU92ZXJsb2FkKHBhdGhPckZpbGUpO1xuICB9XG4gIGxldCBiYWNrbGlua3M6IEN1c3RvbUFycmF5RGljdDxSZWZlcmVuY2U+ID0gbmV3IEN1c3RvbUFycmF5RGljdEltcGw8UmVmZXJlbmNlPigpO1xuICBhd2FpdCByZXRyeVdpdGhUaW1lb3V0Tm90aWNlKHtcbiAgICBhc3luYyBvcGVyYXRpb25GdW5jdGlvbihhYm9ydFNpZ25hbCkge1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlIH0pO1xuICAgICAgYXdhaXQgZW5zdXJlTWV0YWRhdGFDYWNoZVJlYWR5KGFwcCk7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgYmFja2xpbmtzID0gZ2V0QmFja2xpbmtzRm9yRmlsZU9yUGF0aChhcHAsIGZpbGUpO1xuICAgICAgZm9yIChjb25zdCBub3RlUGF0aCBvZiBiYWNrbGlua3Mua2V5cygpKSB7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGNvbnN0IG5vdGUgPSBnZXRGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBub3RlUGF0aCB9KTtcbiAgICAgICAgaWYgKCFub3RlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQSBjYW52YXMgaG9sZGVyIGNhbm5vdCBiZSBjaGVja2VkIGFnYWluc3QgaXRzIHRleHQuIEl0cyBmaWxlLW5vZGUgcmVmZXJlbmNlcyBjYXJyeSBubyBwb3NpdGlvbiwgYW5kXG4gICAgICAgIC8vIE9ic2lkaWFuIHJlcG9ydHMgYSB0ZXh0LW5vZGUgZW1iZWQgd2l0aCBhIHBvc2l0aW9uIGludG8gdGhhdCBub2RlJ3Mgb3duIHRleHQsIG5vdCBpbnRvIHRoZSBjYW52YXMgSlNPTixcbiAgICAgICAgLy8gc28gc2xpY2luZyB0aGUgZmlsZSBhdCBpdCBuZXZlciBnaXZlcyB0aGUgbGluayBiYWNrIGFuZCB0aGUgcmV0cnkgd291bGQgbmV2ZXIgZW5kLlxuICAgICAgICBpZiAoaXNDYW52YXNGaWxlKG5vdGUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBzYXZlTm90ZShhcHAsIG5vdGUpO1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkU2FmZShhcHAsIG5vdGUpO1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuICAgICAgICBjb25zdCBsaW5rcyA9IGJhY2tsaW5rcy5nZXQobm90ZVBhdGgpO1xuICAgICAgICBpZiAoIWxpbmtzKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgICAgbGV0IGFjdHVhbExpbms6IHN0cmluZztcbiAgICAgICAgICBpZiAoaXNSZWZlcmVuY2VDYWNoZShsaW5rKSkge1xuICAgICAgICAgICAgYWN0dWFsTGluayA9IGNvbnRlbnQuc2xpY2UobGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQsIGxpbmsucG9zaXRpb24uZW5kLm9mZnNldCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyTGlua0NhY2hlKGxpbmspKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgbGluay5rZXkpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmtXaXRoT2Zmc2V0cyA9IHRvRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhsaW5rKTtcbiAgICAgICAgICAgIGFjdHVhbExpbmsgPSBwcm9wZXJ0eVZhbHVlLnNsaWNlKGxpbmtXaXRoT2Zmc2V0cy5zdGFydE9mZnNldCwgbGlua1dpdGhPZmZzZXRzLmVuZE9mZnNldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYWN0dWFsTGluayAhPT0gbGluay5vcmlnaW5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIG9wZXJhdGlvbk5hbWU6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5tZXRhZGF0YUNhY2hlLmdldEJhY2tsaW5rc0ZvckZpbGVQYXRoLCB7IGZpbGVQYXRoOiBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSkgfSksXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBudWxsLFxuICAgIHJldHJ5T3B0aW9uczogb3B0aW9ucyxcbiAgICBzaG91bGRTaG93VGltZW91dE5vdGljZTogb3B0aW9ucy5zaG91bGRTaG93VGltZW91dE5vdGljZSA/PyB0cnVlXG4gIH0pO1xuXG4gIHJldHVybiBiYWNrbGlua3M7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjYWNoZWQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gZmlsZSBvciBwYXRoLlxuICpcbiAqIFRoaXMgaXMgTk9UIGEgcHVyZSByZWFkOiBiZWZvcmUgaXQgcmVhZHMgdGhlIGNhY2hlLCBpdCBjYWxscyB7QGxpbmsgc2F2ZU5vdGV9LCB3aGljaCBzYXZlcyBhbnlcbiAqIG9wZW4gZWRpdG9yIHZpZXcgb2YgdGhlIG5vdGUgdGhhdCBoYXMgdW5zYXZlZCBjaGFuZ2VzLiBUaGF0IHNhdmUgaXMgd2h5IHRoZSBjYWNoZSBtYXRjaGVzIHdoYXQgdGhlXG4gKiB1c2VyIHNlZXMsIGFuZCB3aHkgYSBjb21tYW5kIHRoYXQgcmV3cml0ZXMgdGhlIG5vdGUgY2FuIHVzZSB0aGlzIHNhZmVseSB3aXRob3V0IGl0cyByZXdyaXRlIGJlaW5nXG4gKiBjbG9iYmVyZWQuIEl0IGlzIGFsc28gYSB3cml0ZSBvbiB0aGUgbm90ZS4gU28gZG8gbm90IGNhbGwgdGhpcyBmcm9tIGFuIGF1dG9tYXRpYyB0cmlnZ2VyIChhIHZhdWx0XG4gKiBvciBtZXRhZGF0YSBldmVudCwgYSBzYXZlIG9yIHJlbmRlciBwYXRjaCwgYSBsYXlvdXQgaG9vaykgdGhhdCBvbmx5IGRlY2lkZXMgd2hldGhlciB0byBhY3Q6IGFcbiAqIGZvcmNlZCBzYXZlIG9uZSB0aWNrIGFmdGVyIGFub3RoZXIgcGx1Z2luIGhhcyBkaXNwYXRjaGVkIGEgY2hhbmdlIGludG8gdGhlIGVkaXRvciBjYW4gbGVhdmVcbiAqIE9ic2lkaWFuJ3MgZWRpdG9yIHJlbmRlcmluZyBzdGFsZSBzdGF0ZS4gQSByZWFkLW9ubHkgcHJvYmUgb24gdGhlIG5vdGUncyBjdXJyZW50IHRleHQgc2hvdWxkIHVzZVxuICoge0BsaW5rIHBhcnNlTWV0YWRhdGF9IG9uIHRoYXQgdGV4dCBpbnN0ZWFkLiBJdCBuZWVkcyBubyB2aWV3LCBubyBjYWNoZSBhbmQgbm8gc2F2ZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlT3JQYXRoIC0gVGhlIGZpbGUgb3IgcGF0aCB0byByZXRyaWV2ZSB0aGUgbWV0YWRhdGEgZm9yLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyc2Ugb3B0aW9ucyBjb250cm9sbGluZyB3aGljaCBhZGRpdGlvbmFsIGxpbmtzIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIGNhY2hlZCBtZXRhZGF0YSBmb3IgdGhlIGZpbGUsIG9yIGBudWxsYCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVTYWZlKGFwcDogQXBwLCBmaWxlT3JQYXRoOiBQYXRoT3JGaWxlLCBvcHRpb25zOiBHZXRDYWNoZVNhZmVPcHRpb25zID0ge30pOiBQcm9taXNlPENhY2hlZE1ldGFkYXRhRXggfCBudWxsPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBmaWxlT3JQYXRoIH0pO1xuXG4gIHRyeSB7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgY2FjaGU6IENhY2hlZE1ldGFkYXRhIHwgbnVsbDtcbiAgICBpZiAoZmlsZS5kZWxldGVkKSB7XG4gICAgICBjYWNoZSA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgc2F2ZU5vdGUoYXBwLCBmaWxlKTtcblxuICAgICAgY29uc3QgZmlsZUNhY2hlRW50cnkgPSBhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGVbZmlsZS5wYXRoXTtcbiAgICAgIGNvbnN0IGlzVXBUb0RhdGUgPSBmaWxlQ2FjaGVFbnRyeT8ubXRpbWUgPT09IGZpbGUuc3RhdC5tdGltZVxuICAgICAgICAmJiBmaWxlQ2FjaGVFbnRyeS5zaXplID09PSBmaWxlLnN0YXQuc2l6ZVxuICAgICAgICAmJiBPYmplY3QuaGFzT3duKGFwcC5tZXRhZGF0YUNhY2hlLm1ldGFkYXRhQ2FjaGUsIGZpbGVDYWNoZUVudHJ5Lmhhc2gpO1xuICAgICAgaWYgKCFpc1VwVG9EYXRlKSB7XG4gICAgICAgIGF3YWl0IGFwcC5tZXRhZGF0YUNhY2hlLmNvbXB1dGVGaWxlTWV0YWRhdGFBc3luYyhmaWxlKTtcbiAgICAgICAgYXdhaXQgZW5zdXJlTWV0YWRhdGFDYWNoZVJlYWR5KGFwcCk7XG4gICAgICB9XG4gICAgICBjYWNoZSA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoY2FjaGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdGhlIGJvZHktZXh0ZXJuYWwgcGFyc2UgbmVlZHMgdGhlIGZpbGUgY29udGVudDsgZnJvbnRtYXR0ZXIgcGFyc2luZyB1c2VzIHRoZSBjYWNoZWRcbiAgICAvLyBmcm9udG1hdHRlciwgc28gYXZvaWQgcmVhZGluZyB0aGUgY29udGVudCB1bmxlc3MgaXQgaXMgYWN0dWFsbHkgbmVlZGVkLlxuICAgIGNvbnN0IGNvbnRlbnQgPSBvcHRpb25zLnNob3VsZFBhcnNlRXh0ZXJuYWxMaW5rcyA/IGF3YWl0IGFwcC52YXVsdC5jYWNoZWRSZWFkKGZpbGUpIDogJyc7XG4gICAgcmV0dXJuIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeCh7IGNhY2hlLCBjb250ZW50LCBvcHRpb25zIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghZmlsZSB8fCBmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmcm9udCBtYXR0ZXIgZnJvbSB0aGUgbWV0YWRhdGEgY2FjaGUgc2FmZWx5LlxuICpcbiAqIEl0IHJlYWRzIHRocm91Z2gge0BsaW5rIGdldENhY2hlU2FmZX0sIHNvIGl0IHNhdmVzIGFueSBvcGVuIGVkaXRvciB2aWV3IG9mIHRoZSBub3RlIHRoYXQgaGFzXG4gKiB1bnNhdmVkIGNoYW5nZXMuIFNlZSB7QGxpbmsgZ2V0Q2FjaGVTYWZlfSBmb3Igd2hlbiB0aGF0IHNhdmUgbWF0dGVycyBhbmQgd2hhdCB0byB1c2UgaW5zdGVhZC5cbiAqXG4gKiBAdHlwZVBhcmFtIEN1c3RvbUZyb250bWF0dGVyIC0gVGhlIHR5cGUgb2YgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHJldHJpZXZlIHRoZSBmcm9udCBtYXR0ZXIgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBjb21iaW5lZCBmcm9udCBtYXR0ZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRGcm9udG1hdHRlclNhZmU8Q3VzdG9tRnJvbnRtYXR0ZXIgPSB1bmtub3duPihhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IFByb21pc2U8Q29tYmluZWRGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlcj4+IHtcbiAgY29uc3QgY2FjaGUgPSBhd2FpdCBnZXRDYWNoZVNhZmUoYXBwLCBwYXRoT3JGaWxlKTtcbiAgcmV0dXJuIChjYWNoZT8uZnJvbnRtYXR0ZXIgPz8ge30pIGFzIENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgc2VsZWN0ZWQgbGlua3MgZnJvbSB0aGUgcHJvdmlkZWQgY2FjaGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHRoZSBsaW5rcy5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHJlZmVyZW5jZXMgcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RlZCBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpbmtzKHBhcmFtczogR2V0TGlua3NQYXJhbXMpOiBSZWZlcmVuY2VbXSB7XG4gIGNvbnN0IHtcbiAgICBjYWNoZSxcbiAgICBzaG91bGRJbmNsdWRlRW1iZWRzID0gdHJ1ZSxcbiAgICBzaG91bGRJbmNsdWRlRXh0ZXJuYWxMaW5rcyA9IGZhbHNlLFxuICAgIHNob3VsZEluY2x1ZGVGcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJMaW5rcyA9IHRydWUsXG4gICAgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlUmVmZXJlbmNlcyA9IHRydWVcbiAgfSA9IHBhcmFtcztcblxuICBsZXQgbGlua3M6IFJlZmVyZW5jZVtdID0gW1xuICAgIC4uLihzaG91bGRJbmNsdWRlUmVmZXJlbmNlcyA/IGNhY2hlLmxpbmtzID8/IFtdIDogW10pLFxuICAgIC4uLihzaG91bGRJbmNsdWRlRW1iZWRzID8gY2FjaGUuZW1iZWRzID8/IFtdIDogW10pLFxuICAgIC4uLihzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJMaW5rcyA/IGNhY2hlLmZyb250bWF0dGVyTGlua3MgPz8gW10gOiBbXSlcbiAgXTtcblxuICBjb25zdCBmZWF0dXJlTGlua1NlbGVjdG9yczogRmVhdHVyZUxpbmtTZWxlY3RvcltdID0gW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnYm9keSBleHRlcm5hbCBsaW5rcycsXG4gICAgICBmZWF0dXJlOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5FeHRlcm5hbExpbmtzLFxuICAgICAgc2VsZWN0OiAoY2FjaGVFeCkgPT4gY2FjaGVFeC5leHRlcm5hbExpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZUV4dGVybmFsTGlua3NcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnZnJvbnRtYXR0ZXIgZXh0ZXJuYWwgbGlua3MnLFxuICAgICAgZmVhdHVyZTogQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2VsZWN0OiAoY2FjaGVFeCkgPT4gY2FjaGVFeC5mcm9udG1hdHRlckV4dGVybmFsTGlua3MsXG4gICAgICBzaG91bGRJbmNsdWRlOiBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogJ211bHRpLXZhbHVlIGZyb250bWF0dGVyIGV4dGVybmFsIGxpbmtzJyxcbiAgICAgIGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLk11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MsXG4gICAgICBzZWxlY3Q6IChjYWNoZUV4KSA9PiBjYWNoZUV4Lm11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MsXG4gICAgICBzaG91bGRJbmNsdWRlOiBzaG91bGRJbmNsdWRlTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246ICdtdWx0aS12YWx1ZSBmcm9udG1hdHRlciBsaW5rcycsXG4gICAgICBmZWF0dXJlOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcyxcbiAgICAgIHNlbGVjdDogKGNhY2hlRXgpID0+IGNhY2hlRXgubXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MsXG4gICAgICBzaG91bGRJbmNsdWRlOiBzaG91bGRJbmNsdWRlTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3NcbiAgICB9XG4gIF07XG5cbiAgZm9yIChjb25zdCBmZWF0dXJlTGlua1NlbGVjdG9yIG9mIGZlYXR1cmVMaW5rU2VsZWN0b3JzKSB7XG4gICAgaWYgKCFmZWF0dXJlTGlua1NlbGVjdG9yLnNob3VsZEluY2x1ZGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghaXNDYWNoZWRNZXRhZGF0YUV4KGNhY2hlKSB8fCAhY2FjaGUuZmVhdHVyZXMuaW5jbHVkZXMoZmVhdHVyZUxpbmtTZWxlY3Rvci5mZWF0dXJlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5jbHVkZSAke2ZlYXR1cmVMaW5rU2VsZWN0b3IuZGVzY3JpcHRpb259OiB0aGUgY2FjaGUgd2FzIG5vdCBjb21wdXRlZCB3aXRoIHRoZSAke2ZlYXR1cmVMaW5rU2VsZWN0b3IuZmVhdHVyZX0gZmVhdHVyZS5gKTtcbiAgICB9XG5cbiAgICBsaW5rcy5wdXNoKC4uLmVuc3VyZU5vbk51bGxhYmxlKGZlYXR1cmVMaW5rU2VsZWN0b3Iuc2VsZWN0KGNhY2hlKSkpO1xuICB9XG5cbiAgc29ydFJlZmVyZW5jZXMobGlua3MpO1xuXG4gIC8vIEJVRzogaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC90L2J1Zy1kdXBsaWNhdGVkLWxpbmtzLWluLW1ldGFkYXRhY2FjaGUtaW5zaWRlLWZvb3Rub3Rlcy84NTU1MVxuICBsaW5rcyA9IGxpbmtzLmZpbHRlcigobGluaywgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzTGluayA9IGVuc3VyZU5vbk51bGxhYmxlKGxpbmtzW2luZGV4IC0gMV0pO1xuXG4gICAgaWYgKGlzUmVmZXJlbmNlQ2FjaGUobGluaykgJiYgaXNSZWZlcmVuY2VDYWNoZShwcmV2aW91c0xpbmspKSB7XG4gICAgICByZXR1cm4gbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQgIT09IHByZXZpb3VzTGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUobGluaykgJiYgaXNGcm9udG1hdHRlckxpbmtDYWNoZShwcmV2aW91c0xpbmspKSB7XG4gICAgICBjb25zdCBsaW5rU3RhcnRPZmZzZXQgPSBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMobGluaykgPyBsaW5rLnN0YXJ0T2Zmc2V0IDogMDtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGlua1N0YXJ0T2Zmc2V0ID0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHByZXZpb3VzTGluaykgPyBwcmV2aW91c0xpbmsuc3RhcnRPZmZzZXQgOiAwO1xuICAgICAgcmV0dXJuIGxpbmsua2V5ICE9PSBwcmV2aW91c0xpbmsua2V5IHx8IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhsaW5rKSAhPT0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHByZXZpb3VzTGluaylcbiAgICAgICAgfHwgbGlua1N0YXJ0T2Zmc2V0ICE9PSBwcmV2aW91c0xpbmtTdGFydE9mZnNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGxpbmtzO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGJhY2tsaW5rIGNhY2hlIHBsdWdpbiBpcyBjdXJyZW50bHkgbG9hZGVkIC0gZWl0aGVyIEFkdmFuY2VkIE1ldGFkYXRhIENhY2hlICh7QGxpbmsgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEfSkgb3IgaXRzIHJldGlyZWQgcHJlZGVjZXNzb3IgQmFja2xpbmsgQ2FjaGUgKHtAbGluayBCQUNLTElOS19DQUNIRV9QTFVHSU5fSUR9KS5cbiAqXG4gKiBTdWNoIGEgcGx1Z2luIGdyYWZ0cyBhIGRyYWluLW9uLXJlYWQgYmFja2xpbmsgaW5kZXggb250byB0aGUgbWV0YWRhdGEgY2FjaGUgYW5kIGluZGV4ZXMgY2FudmFzIG1ldGFkYXRhLCBzbyBhIGNhbGxlciB0aGF0IGNvbXBlbnNhdGVzIGZvciBPYnNpZGlhbidzIG93biBnYXBzIGNhbiBzdGFuZCBkb3duIHdoaWxlIG9uZSBpcyBwcmVzZW50LiBCb3RoIGlkcyBhcmUgcmVjb2duaXplZDsge0BsaW5rIEJBQ0tMSU5LX0NBQ0hFX1BMVUdJTl9JRH0gcmVjb3JkcyB3aGVuIHRoZSByZXRpcmVkIG9uZSBtYXkgYmUgZHJvcHBlZC5cbiAqXG4gKiBUaGlzIHJlYWRzIHRoZSBMT0FERUQgcGx1Z2luIGluc3RhbmNlIHJhdGhlciB0aGFuIGBhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2luc2AsIGRlbGliZXJhdGVseTogdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIHBsdWdpbidzIHBhdGNoZXMgYXJlIGluIHBsYWNlIHJpZ2h0IG5vdywgYW5kIHRoZXkgYXJlIG5vdCB1bnRpbCBpdCBoYXMgbG9hZGVkLiBQbHVnaW5zIGxvYWQgaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIsIHNvIGNhbGwgdGhpcyBmcm9tIGEgdXNlci1kcml2ZW4gcGF0aCByYXRoZXIgdGhhbiBmcm9tIHBsdWdpbiBsb2FkIC0gc2VlIHJ1bGUgTDI1IGluIGBBR0VOVFMubWRgLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgYHRydWVgIGlmIGEgYmFja2xpbmsgY2FjaGUgcGx1Z2luIGlzIGxvYWRlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNCYWNrbGlua0NhY2hlUGx1Z2luKGFwcDogQXBwKTogYm9vbGVhbiB7XG4gIHJldHVybiBhcHAucGx1Z2lucy5nZXRQbHVnaW4oQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEKSAhPT0gbnVsbCB8fCBhcHAucGx1Z2lucy5nZXRQbHVnaW4oQkFDS0xJTktfQ0FDSEVfUExVR0lOX0lEKSAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBjYWNoZSBpcyBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fSAoaS5lLiBpdCB3YXMgY29tcHV0ZWQgd2l0aCBleHRlcm5hbC1saW5rXG4gKiBwYXJzaW5nIGVuYWJsZWQpLlxuICpcbiAqIEBwYXJhbSBjYWNoZSAtIFRoZSBjYWNoZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY2FjaGUgaXMgYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0sIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDYWNoZWRNZXRhZGF0YUV4KGNhY2hlOiBDYWNoZWRNZXRhZGF0YSk6IGNhY2hlIGlzIENhY2hlZE1ldGFkYXRhRXgge1xuICByZXR1cm4gJ2ZlYXR1cmVzJyBpbiBjYWNoZTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIG1ldGFkYXRhIGZvciBhIGdpdmVuIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSAkc3RyaW5nIC0gVGhlIHN0cmluZyB0byBwYXJzZSB0aGUgbWV0YWRhdGEgZm9yLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyc2Ugb3B0aW9ucyBjb250cm9sbGluZyB3aGljaCBhZGRpdGlvbmFsIGxpbmtzIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhcnNlTWV0YWRhdGEoYXBwOiBBcHAsICRzdHJpbmc6IHN0cmluZywgb3B0aW9uczogUGFyc2VNZXRhZGF0YU9wdGlvbnMgPSB7fSk6IFByb21pc2U8Q2FjaGVkTWV0YWRhdGFFeD4ge1xuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGNvbnN0IGJ1ZmZlciA9IGVuY29kZXIuZW5jb2RlKCRzdHJpbmcpLmJ1ZmZlcjtcbiAgY29uc3QgY2FjaGUgPSBhd2FpdCBhcHAubWV0YWRhdGFDYWNoZS5jb21wdXRlTWV0YWRhdGFBc3luYyhidWZmZXIpID8/IHt9O1xuICByZXR1cm4gdG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4KHsgY2FjaGUsIGNvbnRlbnQ6ICRzdHJpbmcsIG9wdGlvbnMgfSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBmaWxlIGNhY2hlIGZvciBhIG5vbi1leGlzdGluZyBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVnaXN0ZXJpbmcgdGhlIGZpbGUgY2FjaGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBmaWxlIGNhY2hlIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGUocGFyYW1zOiBSZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZVBhcmFtcyk6IERpc3Bvc2FibGUge1xuICBjb25zdCB7IGFwcCwgY2FjaGUsIHBhdGhPckZpbGUgfSA9IHBhcmFtcztcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcbiAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgaXMgZXhpc3RpbmcnKTtcbiAgfVxuXG4gIGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVDYWNoZVtmaWxlLnBhdGhdID0ge1xuICAgIGhhc2g6IGZpbGUucGF0aCxcbiAgICBtdGltZTogMCxcbiAgICBzaXplOiAwXG4gIH07XG5cbiAgYXBwLm1ldGFkYXRhQ2FjaGUubWV0YWRhdGFDYWNoZVtmaWxlLnBhdGhdID0gY2FjaGU7XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICB1bnJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlKGFwcCwgZmlsZSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgZmlsZXMgaW4gdGhlIE9ic2lkaWFuIGFwcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlcyAtIFRoZSBmaWxlcyB0byByZWdpc3Rlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgdW5yZWdpc3RlcnMgdGhlIGZpbGVzIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJGaWxlcyhhcHA6IEFwcCwgZmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IERpc3Bvc2FibGUge1xuICBjb25zdCByZWdpc3RlcmVkRmlsZXNDb3VudHMgPSBnZXRSZWdpc3RlcmVkRmlsZXNDb3VudHMoKTtcblxuICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgd2hpbGUgKGZpbGUuZGVsZXRlZCkge1xuICAgICAgbGV0IGNvdW50ID0gcmVnaXN0ZXJlZEZpbGVzQ291bnRzLmdldChmaWxlLnBhdGgpID8/IDA7XG4gICAgICBjb3VudCsrO1xuICAgICAgcmVnaXN0ZXJlZEZpbGVzQ291bnRzLnNldChmaWxlLnBhdGgsIGNvdW50KTtcblxuICAgICAgYXBwLnZhdWx0LmZpbGVNYXBbZmlsZS5wYXRoXSA9IGZpbGU7XG5cbiAgICAgIGlmIChpc0ZpbGUoZmlsZSkpIHtcbiAgICAgICAgYXBwLm1ldGFkYXRhQ2FjaGUudW5pcXVlRmlsZUxvb2t1cC5hZGQoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCksIGZpbGUpO1xuICAgICAgfVxuXG4gICAgICBmaWxlID0gZ2V0Rm9sZGVyKHtcbiAgICAgICAgYXBwLFxuICAgICAgICBwYXRoT3JGb2xkZXI6IHBhcmVudEZvbGRlclBhdGgoZmlsZS5wYXRoKSxcbiAgICAgICAgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIHVucmVnaXN0ZXJGaWxlcyhhcHAsIGZpbGVzKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFVucmVnaXN0ZXJzIHRoZSBmaWxlIGNhY2hlIGZvciBhIG5vbi1leGlzdGluZyBmaWxlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHVucmVnaXN0ZXIgdGhlIGZpbGUgY2FjaGUgZm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IHZvaWQge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSwgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlIH0pO1xuICBpZiAoIWZpbGUuZGVsZXRlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmlsZSBpcyBleGlzdGluZycpO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgZGVsZXRlIGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVDYWNoZVtmaWxlLnBhdGhdO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gIGRlbGV0ZSBhcHAubWV0YWRhdGFDYWNoZS5tZXRhZGF0YUNhY2hlW2ZpbGUucGF0aF07XG59XG5cbi8qKlxuICogVW5yZWdpc3RlcnMgZmlsZXMgZnJvbSB0aGUgT2JzaWRpYW4gYXBwLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGVzIC0gVGhlIGZpbGVzIHRvIHVucmVnaXN0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyRmlsZXMoYXBwOiBBcHAsIGZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiB2b2lkIHtcbiAgY29uc3QgcmVnaXN0ZXJlZEZpbGVzQ291bnRzID0gZ2V0UmVnaXN0ZXJlZEZpbGVzQ291bnRzKCk7XG5cbiAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgIHdoaWxlIChmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGxldCBjb3VudCA9IHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5nZXQoZmlsZS5wYXRoKSA/PyAxO1xuICAgICAgY291bnQtLTtcbiAgICAgIHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5zZXQoZmlsZS5wYXRoLCBjb3VudCk7XG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgcmVnaXN0ZXJlZEZpbGVzQ291bnRzLmRlbGV0ZShmaWxlLnBhdGgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gICAgICAgIGRlbGV0ZSBhcHAudmF1bHQuZmlsZU1hcFtmaWxlLnBhdGhdO1xuXG4gICAgICAgIGlmIChpc0ZpbGUoZmlsZSkpIHtcbiAgICAgICAgICBhcHAubWV0YWRhdGFDYWNoZS51bmlxdWVGaWxlTG9va3VwLnJlbW92ZShmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZmlsZSA9IGdldEZvbGRlcih7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcGF0aE9yRm9sZGVyOiBwYXJlbnRGb2xkZXJQYXRoKGZpbGUucGF0aCksXG4gICAgICAgIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRGaWxlc0NvdW50cygpOiBNYXA8c3RyaW5nLCBudW1iZXI+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSgncmVnaXN0ZXJlZEZpbGVzQ291bnRzJywgbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSkudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGhhc0JhY2tsaW5rQ2FjaGVTYWZlT3ZlcmxvYWQoYXBwOiBBcHApOiBib29sZWFuIHtcbiAgcmV0dXJuICEhKGFwcC5tZXRhZGF0YUNhY2hlLmdldEJhY2tsaW5rc0ZvckZpbGUgYXMgUGFydGlhbDxHZXRCYWNrbGlua3NGb3JGaWxlU2FmZVdyYXBwZXI+KS5zYWZlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4dGVybmFsQm9keUxpbmtzKGNvbnRlbnQ6IHN0cmluZywgY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogUGFyc2VMaW5rUmVmZXJlbmNlW10ge1xuICBjb25zdCBmcm9udG1hdHRlckVuZE9mZnNldCA9IGNhY2hlLmZyb250bWF0dGVyUG9zaXRpb24/LmVuZC5vZmZzZXQgPz8gMDtcbiAgcmV0dXJuIHBhcnNlTGlua3MoY29udGVudClcbiAgICAuZmlsdGVyKChwYXJzZUxpbmtSZXN1bHQpID0+IHBhcnNlTGlua1Jlc3VsdC5pc0V4dGVybmFsICYmIHBhcnNlTGlua1Jlc3VsdC5zdGFydE9mZnNldCA+PSBmcm9udG1hdHRlckVuZE9mZnNldClcbiAgICAubWFwKChwYXJzZUxpbmtSZXN1bHQpID0+IHRvUGFyc2VMaW5rUmVmZXJlbmNlKHsgY29udGVudCwgcGFyc2VMaW5rUmVzdWx0IH0pKTtcbn1cblxuZnVuY3Rpb24gdG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4KHBhcmFtczogVG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4UGFyYW1zKTogQ2FjaGVkTWV0YWRhdGFFeCB7XG4gIGNvbnN0IHsgY2FjaGUsIGNvbnRlbnQsIG9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgZmVhdHVyZXM6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlW10gPSBbQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTmF0aXZlXTtcbiAgY29uc3QgcmVzdWx0OiBDYWNoZWRNZXRhZGF0YUV4ID0geyAuLi5jYWNoZSwgZmVhdHVyZXMgfTtcblxuICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZUV4dGVybmFsTGlua3MpIHtcbiAgICByZXN1bHQuZXh0ZXJuYWxMaW5rcyA9IHBhcnNlRXh0ZXJuYWxCb2R5TGlua3MoY29udGVudCwgY2FjaGUpO1xuICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rcyk7XG4gIH1cblxuICBpZiAoXG4gICAgb3B0aW9ucy5zaG91bGRQYXJzZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIHx8IG9wdGlvbnMuc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzXG4gICAgfHwgb3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICkge1xuICAgIGNvbnN0IGZyb250bWF0dGVyTGlua3MgPSBwYXJzZUZyb250bWF0dGVyTGlua3MoY2FjaGUuZnJvbnRtYXR0ZXIpO1xuXG4gICAgaWYgKG9wdGlvbnMuc2hvdWxkUGFyc2VGcm9udG1hdHRlckV4dGVybmFsTGlua3MpIHtcbiAgICAgIHJlc3VsdC5mcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSBmcm9udG1hdHRlckxpbmtzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcztcbiAgICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MpIHtcbiAgICAgIHJlc3VsdC5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZnJvbnRtYXR0ZXJMaW5rcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzO1xuICAgICAgZmVhdHVyZXMucHVzaChDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzKSB7XG4gICAgICByZXN1bHQubXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MgPSBmcm9udG1hdHRlckxpbmtzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzO1xuICAgICAgZmVhdHVyZXMucHVzaChDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLHlCQUF5QjtBQUNsQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBVVAsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyxrQ0FBa0M7QUFD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LE9BQU8sS0FBSyxJQUFJO0FBRXRDLGVBQU8sSUFBSSxNQUFNLFFBQVEsS0FBSyxJQUFJO0FBRWxDLFlBQUksT0FBTyxJQUFJLEdBQUc7QUFDaEIsY0FBSSxjQUFjLGlCQUFpQixPQUFPLEtBQUssS0FBSyxZQUFZLEdBQUcsSUFBSTtBQUFBLFFBQ3pFO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxRQUNBLGNBQWMsaUJBQWlCLEtBQUssSUFBSTtBQUFBLFFBQ3hDLDBCQUEwQjtBQUFBLE1BQzVCLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNGO0FBRUEsU0FBUywyQkFBZ0Q7QUFDdkQsU0FBTyx5QkFBeUIseUJBQXlCLG9CQUFJLElBQW9CLENBQUMsRUFBRTtBQUN0RjtBQUVBLFNBQVMsNkJBQTZCLEtBQW1CO0FBQ3ZELFNBQU8sQ0FBQyxDQUFFLElBQUksY0FBYyxvQkFBZ0U7QUFDOUY7QUFFQSxTQUFTLHVCQUF1QixTQUFpQixPQUE2QztBQUM1RixRQUFNLHVCQUF1QixNQUFNLHFCQUFxQixJQUFJLFVBQVU7QUFDdEUsU0FBTyxXQUFXLE9BQU8sRUFDdEIsT0FBTyxDQUFDLG9CQUFvQixnQkFBZ0IsY0FBYyxnQkFBZ0IsZUFBZSxvQkFBb0IsRUFDN0csSUFBSSxDQUFDLG9CQUFvQixxQkFBcUIsRUFBRSxTQUFTLGdCQUFnQixDQUFDLENBQUM7QUFDaEY7QUFFQSxTQUFTLHlCQUF5QixRQUEwRDtBQUMxRixRQUFNLEVBQUUsT0FBTyxTQUFTLFFBQVEsSUFBSTtBQUNwQyxRQUFNLFdBQXNDLENBQUMscUJBQThCO0FBQzNFLFFBQU0sU0FBMkIsRUFBRSxHQUFHLE9BQU8sU0FBUztBQUV0RCxNQUFJLFFBQVEsMEJBQTBCO0FBQ3BDLFdBQU8sZ0JBQWdCLHVCQUF1QixTQUFTLEtBQUs7QUFDNUQsYUFBUyxLQUFLLG1DQUFxQztBQUFBLEVBQ3JEO0FBRUEsTUFDRSxRQUFRLHVDQUNMLFFBQVEsaURBQ1IsUUFBUSx1Q0FDWDtBQUNBLFVBQU0sbUJBQW1CLHNCQUFzQixNQUFNLFdBQVc7QUFFaEUsUUFBSSxRQUFRLHFDQUFxQztBQUMvQyxhQUFPLDJCQUEyQixpQkFBaUI7QUFDbkQsZUFBUyxLQUFLLHlEQUFnRDtBQUFBLElBQ2hFO0FBRUEsUUFBSSxRQUFRLCtDQUErQztBQUN6RCxhQUFPLHFDQUFxQyxpQkFBaUI7QUFDN0QsZUFBUyxLQUFLLDZFQUEwRDtBQUFBLElBQzFFO0FBRUEsUUFBSSxRQUFRLHVDQUF1QztBQUNqRCxhQUFPLDZCQUE2QixpQkFBaUI7QUFDckQsZUFBUyxLQUFLLDZEQUFrRDtBQUFBLElBQ2xFO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsiQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUiXQp9Cg==
454
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21ldGFkYXRhLWNhY2hlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbWV0YWRhdGEgY2FjaGUgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZXRyeU9wdGlvbnMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BcnJheURpY3QgfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0JztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDYWNoZWRNZXRhZGF0YSxcbiAgUmVmZXJlbmNlLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ2FsbGJhY2tEaXNwb3NhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHsgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHtcbiAgQ3VzdG9tQXJyYXlEaWN0SW1wbCxcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZSxcbiAgcGFyZW50Rm9sZGVyUGF0aFxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBDb21iaW5lZEZyb250bWF0dGVyIH0gZnJvbSAnLi9mcm9udG1hdHRlci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlLFxuICBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzLFxuICBQYXJzZUxpbmtSZWZlcmVuY2Vcbn0gZnJvbSAnLi9wYXJzZS1saW5rLnRzJztcblxuaW1wb3J0IHsgcmV0cnlXaXRoVGltZW91dE5vdGljZSB9IGZyb20gJy4vYXN5bmMtd2l0aC1ub3RpY2UudHMnO1xuaW1wb3J0IHsgZ2V0SW5kZXhlZEJhY2tsaW5rc0ZvckZpbGUgfSBmcm9tICcuL2JhY2tsaW5rLWluZGV4LnRzJztcbmltcG9ydCB7XG4gIGdldEZpbGUsXG4gIGdldEZpbGVPck51bGwsXG4gIGdldEZvbGRlcixcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlLFxuICBpc0ZpbGVcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMsXG4gIHRvRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0c1xufSBmcm9tICcuL2Zyb250bWF0dGVyLWxpbmstY2FjaGUtd2l0aC1vZmZzZXRzLnRzJztcbmltcG9ydCB7IHBhcnNlRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1zdGF0ZS50cyc7XG5pbXBvcnQge1xuICBwYXJzZUZyb250bWF0dGVyTGlua3MsXG4gIHBhcnNlTGlua3MsXG4gIHRvUGFyc2VMaW5rUmVmZXJlbmNlXG59IGZyb20gJy4vcGFyc2UtbGluay50cyc7XG5pbXBvcnQgeyBzb3J0UmVmZXJlbmNlcyB9IGZyb20gJy4vcmVmZXJlbmNlLnRzJztcbmltcG9ydCB7XG4gIHJlYWRTYWZlLFxuICBzYXZlTm90ZVxufSBmcm9tICcuL3ZhdWx0LnRzJztcblxuLyoqXG4gKiBBIHBhcnNpbmcgZmVhdHVyZSB0aGF0IHdhcyBhcHBsaWVkIHdoZW4gY29tcHV0aW5nIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICovXG5leHBvcnQgZW51bSBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZSB7XG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gdGhlIG5vdGUgY29udGVudCBib2R5LlxuICAgKi9cbiAgRXh0ZXJuYWxMaW5rcyA9ICdFeHRlcm5hbExpbmtzJyxcblxuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIHNpbmdsZS1saW5rIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKi9cbiAgRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gJ0Zyb250bWF0dGVyRXh0ZXJuYWxMaW5rcycsXG5cbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKi9cbiAgTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyA9ICdNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzJyxcblxuICAvKipcbiAgICogVGhlIGludGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMsIHdoaWNoIE9ic2lkaWFuIGRvZXMgbm90IG5hdGl2ZWx5IGNhY2hlLlxuICAgKi9cbiAgTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MgPSAnTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MnLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIG5hdGl2ZSBtZXRhZGF0YSBwYXJzaW5nIChpbnRlcm5hbCBsaW5rcywgZW1iZWRzLCBmcm9udG1hdHRlciBsaW5rcykuXG4gICAqL1xuICBOYXRpdmUgPSAnTmF0aXZlJ1xufVxuXG4vKipcbiAqIEFuIGV4dGVuZGVkIHtAbGluayBDYWNoZWRNZXRhZGF0YX0gdGhhdCByZWNvcmRzIHdoaWNoIHBhcnNpbmcge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlfXMgd2VyZVxuICogYXBwbGllZCAodmlhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4LmZlYXR1cmVzfSkgYW5kIGNhcnJpZXMgdGhlIHJlc3VsdGluZyBleHRlcm5hbCBsaW5rcy4gRWFjaCBsaW5rc1xuICogYXJyYXkgaXMgcG9wdWxhdGVkIG9ubHkgd2hlbiBpdHMgY29ycmVzcG9uZGluZyBmZWF0dXJlIGlzIHByZXNlbnQgaW4ge0BsaW5rIENhY2hlZE1ldGFkYXRhRXguZmVhdHVyZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZE1ldGFkYXRhRXggZXh0ZW5kcyBDYWNoZWRNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gdGhlIG5vdGUgY29udGVudCBib2R5LiBQb3B1bGF0ZWQgb25seSB3aGVuXG4gICAqIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5FeHRlcm5hbExpbmtzfSBpcyBhcHBsaWVkLlxuICAgKi9cbiAgZXh0ZXJuYWxMaW5rcz86IFBhcnNlTGlua1JlZmVyZW5jZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2luZyBmZWF0dXJlcyB0aGF0IHdlcmUgYXBwbGllZCB3aGVuIGNvbXB1dGluZyB0aGlzIGNhY2hlLlxuICAgKi9cbiAgcmVhZG9ubHkgZmVhdHVyZXM6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlW107XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBzaW5nbGUtbGluayAoc2luZ2xlLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy4gUG9wdWxhdGVkIG9ubHlcbiAgICogd2hlbiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzfSBpcyBhcHBsaWVkLlxuICAgKi9cbiAgZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy4gUG9wdWxhdGVkIG9ubHkgd2hlblxuICAgKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIG11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzW107XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuIFBvcHVsYXRlZCBvbmx5IHdoZW5cbiAgICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLk11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzfSBpcyBhcHBsaWVkLlxuICAgKi9cbiAgbXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3M/OiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZU9wdGlvbnMgZXh0ZW5kcyBSZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IGEgdGltZW91dCBub3RpY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd1RpbWVvdXROb3RpY2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVQYXJhbXMgZXh0ZW5kcyBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZvciB0aGUgZ2V0QmFja2xpbmtzRm9yRmlsZSBtZXRob2QgdGhhdCBwcm92aWRlcyBhIHNhZmUgb3ZlcmxvYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVXcmFwcGVyIHtcbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgc2FmZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IGRpY3Rpb25hcnkgb2YgYmFja2xpbmtzLlxuICAgKi9cbiAgc2FmZTogKHBhdGhPckZpbGU6IFBhdGhPckZpbGUpID0+IFByb21pc2U8Q3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRDYWNoZVNhZmV9LlxuICovXG5leHBvcnQgdHlwZSBHZXRDYWNoZVNhZmVPcHRpb25zID0gUGFyc2VDYWNoZU9wdGlvbnM7XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZ2V0TGlua3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldExpbmtzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWNoZWQgbWV0YWRhdGEgdG8gcmV0cmlldmUgdGhlIGxpbmtzIGZyb20uXG4gICAqL1xuICByZWFkb25seSBjYWNoZTogQ2FjaGVkTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZW1iZWRzIChgY2FjaGUuZW1iZWRzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZUVtYmVkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gdGhlIG5vdGUgYm9keS4gUmVxdWlyZXMgdGhlIGNhY2hlIHRvIGJlIGFcbiAgICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRXh0ZXJuYWxMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgKHNpbmdsZS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlclxuICAgKiB2YWx1ZXMuIFJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZnJvbnRtYXR0ZXIgbGlua3MgKGBjYWNoZS5mcm9udG1hdHRlckxpbmtzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcyxcbiAgICogaS5lLiB0aGUgb2Zmc2V0LWNhcnJ5aW5nIGZyb250bWF0dGVyIGV4dGVybmFsIGxpbmtzIChuYXJyb3dlZCB2aWFcbiAgICoge0BsaW5rIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0c30pLiBSZXF1aXJlcyB0aGUgY2FjaGUgdG8gYmUgYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBpbnRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqIFJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSByZWZlcmVuY2UgbGlua3MgKGBjYWNoZS5saW5rc2ApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVSZWZlcmVuY2VzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgcGFyc2luZyBwZXJmb3JtZWQgYnkge0BsaW5rIGdldENhY2hlU2FmZX0gYW5kIHtAbGluayBwYXJzZU1ldGFkYXRhfSBiZXlvbmQgT2JzaWRpYW4nc1xuICogbmF0aXZlIG1ldGFkYXRhIHBhcnNpbmcuIEVhY2ggb3B0aW9uIGlzIG9wdC1pbjsgZW5hYmxpbmcgaXQgYWRkcyB0aGUgY29ycmVzcG9uZGluZ1xuICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlfSBhbmQgcG9wdWxhdGVzIHRoZSBtYXRjaGluZyBsaW5rcyBhcnJheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZUNhY2hlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBleHRlcm5hbCBsaW5rcyBmcm9tIHRoZSBub3RlIGNvbnRlbnQgYm9keS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwYXJzZSB0aGUgZXh0ZXJuYWwgbGlua3MgZnJvbSBzaW5nbGUtbGluayAoc2luZ2xlLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBleHRlcm5hbCBsaW5rcyBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwYXJzZSB0aGUgaW50ZXJuYWwgbGlua3MgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFBhcnNlTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBwYXJzZU1ldGFkYXRhfS5cbiAqL1xuZXhwb3J0IHR5cGUgUGFyc2VNZXRhZGF0YU9wdGlvbnMgPSBQYXJzZUNhY2hlT3B0aW9ucztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGZpbGUgY2FjaGUgdG8gcmVnaXN0ZXIuXG4gICAqL1xuICByZWFkb25seSBjYWNoZTogQ2FjaGVkTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gcmVnaXN0ZXIgdGhlIGZpbGUgY2FjaGUgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBBIHNlbGVjdG9yIGZvciBhIGZlYXR1cmUtZ2F0ZWQgbGluayBjYXRlZ29yeSBpbiB7QGxpbmsgZ2V0TGlua3N9LlxuICovXG5pbnRlcmZhY2UgRmVhdHVyZUxpbmtTZWxlY3RvciB7XG4gIC8qKlxuICAgKiBBIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5rIGNhdGVnb3J5LCB1c2VkIGluIGVycm9yIG1lc3NhZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZlYXR1cmUgdGhhdCBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIGNhY2hlIGZvciB0aGlzIGNhdGVnb3J5IHRvIGJlIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlO1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBsaW5rcyBmb3IgdGhpcyBjYXRlZ29yeSBmcm9tIHRoZSBjYWNoZS5cbiAgICovXG4gIHNlbGVjdDogKGNhY2hlOiBDYWNoZWRNZXRhZGF0YUV4KSA9PiBSZWZlcmVuY2VbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoaXMgY2F0ZWdvcnkuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeH0uXG4gKi9cbmludGVyZmFjZSBUb1BhcnNlZENhY2hlZE1ldGFkYXRhRXhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBsYWluIGNhY2hlZCBtZXRhZGF0YSB0byB3cmFwLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGU6IENhY2hlZE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90ZSBjb250ZW50IHRoZSBvZmZzZXRzIGluZGV4IGludG8sIHVzZWQgZm9yIGJvZHkgZXh0ZXJuYWwtbGluayBwYXJzaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2Ugb3B0aW9ucyBjb250cm9sbGluZyB3aGljaCBsaW5rcyB0byBwYXJzZS5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IFBhcnNlQ2FjaGVPcHRpb25zO1xufVxuXG4vKipcbiAqIFRoZSBwbHVnaW4gaWQgb2YgdGhlIEFkdmFuY2VkIE1ldGFkYXRhIENhY2hlIHBsdWdpbiwgdGhlIHN1Y2Nlc3NvciB0byBCYWNrbGluayBDYWNoZS5cbiAqXG4gKiBVc2VkIGJ5IHtAbGluayBoYXNCYWNrbGlua0NhY2hlUGx1Z2lufS4gTm90ZSB0aGF0IHtAbGluayBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZX0gZG9lcyBOT1QgbmVlZCB0aGlzIGlkOiBpdCBkZXRlY3RzIHRoZSBjYWNoZSBieSB0aGUge0BsaW5rIEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlV3JhcHBlci5zYWZlfSBvdmVybG9hZCBncmFmdGVkIG9udG8gYE1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZWAsIHdoaWNoIGJvdGggcGx1Z2lucyBpbnN0YWxsIGFuZCB3aGljaCBuYW1lcyBubyBwbHVnaW4uXG4gKi9cbmV4cG9ydCBjb25zdCBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9QTFVHSU5fSUQgPSAnYWR2YW5jZWQtbWV0YWRhdGEtY2FjaGUnO1xuXG4vKipcbiAqIFRoZSBwbHVnaW4gaWQgb2YgdGhlIHJldGlyZWQgQmFja2xpbmsgQ2FjaGUgcGx1Z2luLCBzdXBlcnNlZGVkIGJ5IHtAbGluayBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9QTFVHSU5fSUR9LlxuICpcbiAqIFN0aWxsIHJlY29nbml6ZWQgYnkge0BsaW5rIGhhc0JhY2tsaW5rQ2FjaGVQbHVnaW59LCBkZWxpYmVyYXRlbHkuIFJlbW92aW5nIGEgcGx1Z2luIGZyb20gdGhlIGNvbW11bml0eSByZWdpc3RyeSBibG9ja3MgbmV3IGluc3RhbGxzOyBpdCB1bmluc3RhbGxzIG5vdGhpbmcsIHNvIGV2ZXJ5IGV4aXN0aW5nIHVzZXIga2VlcHMgaXQgdW50aWwgdGhleSBtaWdyYXRlIGJ5IGhhbmQuXG4gKlxuICogSXQgbWF5IGJlIGRyb3BwZWQgd2hlbiBhbGwgdGhyZWUgb2YgdGhlIGZvbGxvd2luZyBob2xkLCBhbmQgbm90IGJlZm9yZTogQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGUgaXMgbGlzdGVkIGluIHRoZSBjb21tdW5pdHkgcmVnaXN0cnksIHNvIG1pZ3JhdGluZyBpcyBwb3NzaWJsZSBhdCBhbGw7IHRoZSBmaW5hbCBCYWNrbGluayBDYWNoZSBoYW5kb3ZlciByZWxlYXNlIGhhcyBiZWVuIG91dCBmb3IgYXQgbGVhc3QgdHdlbHZlIG1vbnRoczsgYW5kIHRoaXMgbGlicmFyeSBpcyBjdXR0aW5nIGEgbWFqb3IgcmVsZWFzZSBhbnl3YXksIGJlY2F1c2UgZHJvcHBpbmcgdGhlIGlkIHNpbGVudGx5IHVuLWdhdGVzIGNhbnZhcyBsaW5rIGhhbmRsaW5nIGZvciBhbnlvbmUgd2hvIGhhcyBub3QgbWlncmF0ZWQuIFRoZXJlIGlzIG5vIGNvc3QgcHJlc3N1cmUgdG8gZHJvcCBpdCBlYXJsaWVyIC0gcmVjb2duaXppbmcgYSBkZWFkIGlkIGlzIG9uZSBzdHJpbmcgY29tcGFyaXNvbiBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IHJlYWRzIGEgcGx1Z2luIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgY29uc3QgQkFDS0xJTktfQ0FDSEVfUExVR0lOX0lEID0gJ2JhY2tsaW5rLWNhY2hlJztcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgdGhlIG1ldGFkYXRhIGNhY2hlIGlzIHJlYWR5IGZvciBhbGwgZmlsZXMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1ldGFkYXRhIGNhY2hlIGlzIHJlYWR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTWV0YWRhdGFDYWNoZVJlYWR5KGFwcDogQXBwKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgYXBwLm1ldGFkYXRhQ2FjaGUub25DbGVhbkNhY2hlKHJlc29sdmUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIG9yIHBhdGguXG4gKiBOT1RFOiBUaGUgZmlsZSBtYXkgYmUgbm9uLWV4aXN0ZW50LlxuICpcbiAqIFdoZW4gYSBiYWNrbGluay1jYWNoZSBwbHVnaW4gaGFzIGdyYWZ0ZWQgaXRzIHtAbGluayBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZVdyYXBwZXIuc2FmZX0gb3ZlcmxvYWQgb250b1xuICogYE1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZWAsIHRoYXQgcGF0Y2hlZCBtZXRob2QgYW5zd2Vycy4gT3RoZXJ3aXNlIHRoZSBhbnN3ZXIgY29tZXMgZnJvbSBhIGJhY2tsaW5rXG4gKiBpbmRleCB3aG9zZSBjb3N0IGlzIHByb3BvcnRpb25hbCB0byB0aGUgY2FuZGlkYXRlIG5vdGVzIHJhdGhlciB0aGFuIHRvIGV2ZXJ5IHJlZmVyZW5jZSBpbiB0aGUgdmF1bHQsIGFuZCB3aGljaFxuICogZ2l2ZXMgdGhlIHNhbWUgcmVmZXJlbmNlcyBPYnNpZGlhbidzIG93biBgZ2V0QmFja2xpbmtzRm9yRmlsZWAgZ2l2ZXMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvYmplY3QuXG4gKiBAcmV0dXJucyBUaGUgYmFja2xpbmtzIGZvciB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlLCBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWUgfSk7XG4gIHVzaW5nIF9yZWdpc3RyYXRpb24gPSByZWdpc3RlckZpbGVzKGFwcCwgW2ZpbGVdKTtcbiAgcmV0dXJuIGhhc0JhY2tsaW5rQ2FjaGVTYWZlT3ZlcmxvYWQoYXBwKSA/IGFwcC5tZXRhZGF0YUNhY2hlLmdldEJhY2tsaW5rc0ZvckZpbGUoZmlsZSkgOiBnZXRJbmRleGVkQmFja2xpbmtzRm9yRmlsZShhcHAsIGZpbGUpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgc2FmZWx5LlxuICpcbiAqIFRoaXMgaXMgTk9UIGEgcHVyZSByZWFkLiBXaGVuIG5vIGJhY2tsaW5rLWNhY2hlIHBsdWdpbiBzdXBwbGllcyB0aGUgYHNhZmVgIG92ZXJsb2FkLCBpdCB2ZXJpZmllc1xuICogZWFjaCBiYWNrbGluayBhZ2FpbnN0IHRoZSBub3RlJ3MgY3VycmVudCB0ZXh0LCBhbmQgdG8gZG8gdGhhdCBpdCBjYWxscyB7QGxpbmsgc2F2ZU5vdGV9IG9uIGV2ZXJ5XG4gKiBub3RlIHRoYXQgbGlua3MgdG8gdGhlIGZpbGUsIHdoaWNoIHNhdmVzIGFueSBvcGVuIGVkaXRvciB2aWV3IG9mIHRob3NlIG5vdGVzIHRoYXQgaGFzIHVuc2F2ZWRcbiAqIGNoYW5nZXMuIENhbGwgaXQgZnJvbSBhbiBleHBsaWNpdCB1c2VyIGFjdGlvbi4gRG8gbm90IGNhbGwgaXQgZnJvbSBhbiBhdXRvbWF0aWMgdHJpZ2dlciAoYSB2YXVsdCBvclxuICogbWV0YWRhdGEgZXZlbnQsIGEgc2F2ZSBvciByZW5kZXIgcGF0Y2gpIHRoYXQgb25seSBkZWNpZGVzIHdoZXRoZXIgdG8gYWN0LiBUaGVyZSwgYSBmb3JjZWQgc2F2ZSBjYW5cbiAqIHJhY2UgYW5vdGhlciBwbHVnaW4ncyBpbi1mbGlnaHQgZWRpdG9yIGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJldHJpZXZpbmcgdGhlIGJhY2tsaW5rcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgZGljdGlvbmFyeSBvZiBiYWNrbGlua3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShwYXJhbXM6IEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlUGFyYW1zKTogUHJvbWlzZTxDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPj4ge1xuICBjb25zdCB7IGFwcCwgcGF0aE9yRmlsZSwgLi4ub3B0aW9ucyB9ID0gcGFyYW1zO1xuICBjb25zdCBzYWZlT3ZlcmxvYWQgPSAoYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZSBhcyBQYXJ0aWFsPEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlV3JhcHBlcj4pLnNhZmU7XG4gIGlmIChzYWZlT3ZlcmxvYWQpIHtcbiAgICByZXR1cm4gc2FmZU92ZXJsb2FkKHBhdGhPckZpbGUpO1xuICB9XG4gIGxldCBiYWNrbGlua3M6IEN1c3RvbUFycmF5RGljdDxSZWZlcmVuY2U+ID0gbmV3IEN1c3RvbUFycmF5RGljdEltcGw8UmVmZXJlbmNlPigpO1xuICBhd2FpdCByZXRyeVdpdGhUaW1lb3V0Tm90aWNlKHtcbiAgICBhc3luYyBvcGVyYXRpb25GdW5jdGlvbihhYm9ydFNpZ25hbCkge1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlIH0pO1xuICAgICAgYXdhaXQgZW5zdXJlTWV0YWRhdGFDYWNoZVJlYWR5KGFwcCk7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgYmFja2xpbmtzID0gZ2V0QmFja2xpbmtzRm9yRmlsZU9yUGF0aChhcHAsIGZpbGUpO1xuICAgICAgZm9yIChjb25zdCBub3RlUGF0aCBvZiBiYWNrbGlua3Mua2V5cygpKSB7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGNvbnN0IG5vdGUgPSBnZXRGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBub3RlUGF0aCB9KTtcbiAgICAgICAgaWYgKCFub3RlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQSBjYW52YXMgaG9sZGVyIGNhbm5vdCBiZSBjaGVja2VkIGFnYWluc3QgaXRzIHRleHQuIEl0cyBmaWxlLW5vZGUgcmVmZXJlbmNlcyBjYXJyeSBubyBwb3NpdGlvbiwgYW5kXG4gICAgICAgIC8vIE9ic2lkaWFuIHJlcG9ydHMgYSB0ZXh0LW5vZGUgZW1iZWQgd2l0aCBhIHBvc2l0aW9uIGludG8gdGhhdCBub2RlJ3Mgb3duIHRleHQsIG5vdCBpbnRvIHRoZSBjYW52YXMgSlNPTixcbiAgICAgICAgLy8gc28gc2xpY2luZyB0aGUgZmlsZSBhdCBpdCBuZXZlciBnaXZlcyB0aGUgbGluayBiYWNrIGFuZCB0aGUgcmV0cnkgd291bGQgbmV2ZXIgZW5kLlxuICAgICAgICBpZiAoaXNDYW52YXNGaWxlKG5vdGUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBzYXZlTm90ZShhcHAsIG5vdGUpO1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkU2FmZShhcHAsIG5vdGUpO1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuICAgICAgICBjb25zdCBsaW5rcyA9IGJhY2tsaW5rcy5nZXQobm90ZVBhdGgpO1xuICAgICAgICBpZiAoIWxpbmtzKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgICAgbGV0IGFjdHVhbExpbms6IHN0cmluZztcbiAgICAgICAgICBpZiAoaXNSZWZlcmVuY2VDYWNoZShsaW5rKSkge1xuICAgICAgICAgICAgYWN0dWFsTGluayA9IGNvbnRlbnQuc2xpY2UobGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQsIGxpbmsucG9zaXRpb24uZW5kLm9mZnNldCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyTGlua0NhY2hlKGxpbmspKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgbGluay5rZXkpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmtXaXRoT2Zmc2V0cyA9IHRvRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhsaW5rKTtcbiAgICAgICAgICAgIGFjdHVhbExpbmsgPSBwcm9wZXJ0eVZhbHVlLnNsaWNlKGxpbmtXaXRoT2Zmc2V0cy5zdGFydE9mZnNldCwgbGlua1dpdGhPZmZzZXRzLmVuZE9mZnNldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYWN0dWFsTGluayAhPT0gbGluay5vcmlnaW5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIG9wZXJhdGlvbk5hbWU6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5tZXRhZGF0YUNhY2hlLmdldEJhY2tsaW5rc0ZvckZpbGVQYXRoLCB7IGZpbGVQYXRoOiBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSkgfSksXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBudWxsLFxuICAgIHJldHJ5T3B0aW9uczogb3B0aW9ucyxcbiAgICBzaG91bGRTaG93VGltZW91dE5vdGljZTogb3B0aW9ucy5zaG91bGRTaG93VGltZW91dE5vdGljZSA/PyB0cnVlXG4gIH0pO1xuXG4gIHJldHVybiBiYWNrbGlua3M7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjYWNoZWQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gZmlsZSBvciBwYXRoLlxuICpcbiAqIFRoaXMgaXMgTk9UIGEgcHVyZSByZWFkOiBiZWZvcmUgaXQgcmVhZHMgdGhlIGNhY2hlLCBpdCBjYWxscyB7QGxpbmsgc2F2ZU5vdGV9LCB3aGljaCBzYXZlcyBhbnlcbiAqIG9wZW4gZWRpdG9yIHZpZXcgb2YgdGhlIG5vdGUgdGhhdCBoYXMgdW5zYXZlZCBjaGFuZ2VzLiBUaGF0IHNhdmUgaXMgd2h5IHRoZSBjYWNoZSBtYXRjaGVzIHdoYXQgdGhlXG4gKiB1c2VyIHNlZXMsIGFuZCB3aHkgYSBjb21tYW5kIHRoYXQgcmV3cml0ZXMgdGhlIG5vdGUgY2FuIHVzZSB0aGlzIHNhZmVseSB3aXRob3V0IGl0cyByZXdyaXRlIGJlaW5nXG4gKiBjbG9iYmVyZWQuIEl0IGlzIGFsc28gYSB3cml0ZSBvbiB0aGUgbm90ZS4gU28gZG8gbm90IGNhbGwgdGhpcyBmcm9tIGFuIGF1dG9tYXRpYyB0cmlnZ2VyIChhIHZhdWx0XG4gKiBvciBtZXRhZGF0YSBldmVudCwgYSBzYXZlIG9yIHJlbmRlciBwYXRjaCwgYSBsYXlvdXQgaG9vaykgdGhhdCBvbmx5IGRlY2lkZXMgd2hldGhlciB0byBhY3Q6IGFcbiAqIGZvcmNlZCBzYXZlIG9uZSB0aWNrIGFmdGVyIGFub3RoZXIgcGx1Z2luIGhhcyBkaXNwYXRjaGVkIGEgY2hhbmdlIGludG8gdGhlIGVkaXRvciBjYW4gbGVhdmVcbiAqIE9ic2lkaWFuJ3MgZWRpdG9yIHJlbmRlcmluZyBzdGFsZSBzdGF0ZS4gQSByZWFkLW9ubHkgcHJvYmUgb24gdGhlIG5vdGUncyBjdXJyZW50IHRleHQgc2hvdWxkIHVzZVxuICoge0BsaW5rIHBhcnNlTWV0YWRhdGF9IG9uIHRoYXQgdGV4dCBpbnN0ZWFkLiBJdCBuZWVkcyBubyB2aWV3LCBubyBjYWNoZSBhbmQgbm8gc2F2ZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlT3JQYXRoIC0gVGhlIGZpbGUgb3IgcGF0aCB0byByZXRyaWV2ZSB0aGUgbWV0YWRhdGEgZm9yLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyc2Ugb3B0aW9ucyBjb250cm9sbGluZyB3aGljaCBhZGRpdGlvbmFsIGxpbmtzIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIGNhY2hlZCBtZXRhZGF0YSBmb3IgdGhlIGZpbGUsIG9yIGBudWxsYCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVTYWZlKGFwcDogQXBwLCBmaWxlT3JQYXRoOiBQYXRoT3JGaWxlLCBvcHRpb25zOiBHZXRDYWNoZVNhZmVPcHRpb25zID0ge30pOiBQcm9taXNlPENhY2hlZE1ldGFkYXRhRXggfCBudWxsPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBmaWxlT3JQYXRoIH0pO1xuXG4gIHRyeSB7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgY2FjaGU6IENhY2hlZE1ldGFkYXRhIHwgbnVsbDtcbiAgICBpZiAoZmlsZS5kZWxldGVkKSB7XG4gICAgICBjYWNoZSA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgc2F2ZU5vdGUoYXBwLCBmaWxlKTtcblxuICAgICAgY29uc3QgZmlsZUNhY2hlRW50cnkgPSBhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGVbZmlsZS5wYXRoXTtcbiAgICAgIGNvbnN0IGlzVXBUb0RhdGUgPSBmaWxlQ2FjaGVFbnRyeT8ubXRpbWUgPT09IGZpbGUuc3RhdC5tdGltZVxuICAgICAgICAmJiBmaWxlQ2FjaGVFbnRyeS5zaXplID09PSBmaWxlLnN0YXQuc2l6ZVxuICAgICAgICAmJiBPYmplY3QuaGFzT3duKGFwcC5tZXRhZGF0YUNhY2hlLm1ldGFkYXRhQ2FjaGUsIGZpbGVDYWNoZUVudHJ5Lmhhc2gpO1xuICAgICAgaWYgKCFpc1VwVG9EYXRlKSB7XG4gICAgICAgIGF3YWl0IGFwcC5tZXRhZGF0YUNhY2hlLmNvbXB1dGVGaWxlTWV0YWRhdGFBc3luYyhmaWxlKTtcbiAgICAgICAgYXdhaXQgZW5zdXJlTWV0YWRhdGFDYWNoZVJlYWR5KGFwcCk7XG4gICAgICB9XG4gICAgICBjYWNoZSA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoY2FjaGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdGhlIGJvZHktZXh0ZXJuYWwgcGFyc2UgbmVlZHMgdGhlIGZpbGUgY29udGVudDsgZnJvbnRtYXR0ZXIgcGFyc2luZyB1c2VzIHRoZSBjYWNoZWRcbiAgICAvLyBmcm9udG1hdHRlciwgc28gYXZvaWQgcmVhZGluZyB0aGUgY29udGVudCB1bmxlc3MgaXQgaXMgYWN0dWFsbHkgbmVlZGVkLlxuICAgIGNvbnN0IGNvbnRlbnQgPSBvcHRpb25zLnNob3VsZFBhcnNlRXh0ZXJuYWxMaW5rcyA/IGF3YWl0IGFwcC52YXVsdC5jYWNoZWRSZWFkKGZpbGUpIDogJyc7XG4gICAgcmV0dXJuIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeCh7IGNhY2hlLCBjb250ZW50LCBvcHRpb25zIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghZmlsZSB8fCBmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmcm9udCBtYXR0ZXIgZnJvbSB0aGUgbWV0YWRhdGEgY2FjaGUgc2FmZWx5LlxuICpcbiAqIEl0IHJlYWRzIHRocm91Z2gge0BsaW5rIGdldENhY2hlU2FmZX0sIHNvIGl0IHNhdmVzIGFueSBvcGVuIGVkaXRvciB2aWV3IG9mIHRoZSBub3RlIHRoYXQgaGFzXG4gKiB1bnNhdmVkIGNoYW5nZXMuIFNlZSB7QGxpbmsgZ2V0Q2FjaGVTYWZlfSBmb3Igd2hlbiB0aGF0IHNhdmUgbWF0dGVycyBhbmQgd2hhdCB0byB1c2UgaW5zdGVhZC5cbiAqXG4gKiBAdHlwZVBhcmFtIEN1c3RvbUZyb250bWF0dGVyIC0gVGhlIHR5cGUgb2YgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHJldHJpZXZlIHRoZSBmcm9udCBtYXR0ZXIgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBjb21iaW5lZCBmcm9udCBtYXR0ZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRGcm9udG1hdHRlclNhZmU8Q3VzdG9tRnJvbnRtYXR0ZXIgPSB1bmtub3duPihhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IFByb21pc2U8Q29tYmluZWRGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlcj4+IHtcbiAgY29uc3QgY2FjaGUgPSBhd2FpdCBnZXRDYWNoZVNhZmUoYXBwLCBwYXRoT3JGaWxlKTtcbiAgcmV0dXJuIChjYWNoZT8uZnJvbnRtYXR0ZXIgPz8ge30pIGFzIENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgc2VsZWN0ZWQgbGlua3MgZnJvbSB0aGUgcHJvdmlkZWQgY2FjaGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHRoZSBsaW5rcy5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHJlZmVyZW5jZXMgcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RlZCBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpbmtzKHBhcmFtczogR2V0TGlua3NQYXJhbXMpOiBSZWZlcmVuY2VbXSB7XG4gIGNvbnN0IHtcbiAgICBjYWNoZSxcbiAgICBzaG91bGRJbmNsdWRlRW1iZWRzID0gdHJ1ZSxcbiAgICBzaG91bGRJbmNsdWRlRXh0ZXJuYWxMaW5rcyA9IGZhbHNlLFxuICAgIHNob3VsZEluY2x1ZGVGcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJMaW5rcyA9IHRydWUsXG4gICAgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlUmVmZXJlbmNlcyA9IHRydWVcbiAgfSA9IHBhcmFtcztcblxuICBsZXQgbGlua3M6IFJlZmVyZW5jZVtdID0gW1xuICAgIC4uLihzaG91bGRJbmNsdWRlUmVmZXJlbmNlcyA/IGNhY2hlLmxpbmtzID8/IFtdIDogW10pLFxuICAgIC4uLihzaG91bGRJbmNsdWRlRW1iZWRzID8gY2FjaGUuZW1iZWRzID8/IFtdIDogW10pLFxuICAgIC4uLihzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJMaW5rcyA/IGNhY2hlLmZyb250bWF0dGVyTGlua3MgPz8gW10gOiBbXSlcbiAgXTtcblxuICBjb25zdCBmZWF0dXJlTGlua1NlbGVjdG9yczogRmVhdHVyZUxpbmtTZWxlY3RvcltdID0gW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnYm9keSBleHRlcm5hbCBsaW5rcycsXG4gICAgICBmZWF0dXJlOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5FeHRlcm5hbExpbmtzLFxuICAgICAgc2VsZWN0OiAoY2FjaGVFeCkgPT4gY2FjaGVFeC5leHRlcm5hbExpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZUV4dGVybmFsTGlua3NcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnZnJvbnRtYXR0ZXIgZXh0ZXJuYWwgbGlua3MnLFxuICAgICAgZmVhdHVyZTogQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2VsZWN0OiAoY2FjaGVFeCkgPT4gY2FjaGVFeC5mcm9udG1hdHRlckV4dGVybmFsTGlua3MsXG4gICAgICBzaG91bGRJbmNsdWRlOiBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogJ211bHRpLXZhbHVlIGZyb250bWF0dGVyIGV4dGVybmFsIGxpbmtzJyxcbiAgICAgIGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLk11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MsXG4gICAgICBzZWxlY3Q6IChjYWNoZUV4KSA9PiBjYWNoZUV4Lm11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MsXG4gICAgICBzaG91bGRJbmNsdWRlOiBzaG91bGRJbmNsdWRlTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246ICdtdWx0aS12YWx1ZSBmcm9udG1hdHRlciBsaW5rcycsXG4gICAgICBmZWF0dXJlOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcyxcbiAgICAgIHNlbGVjdDogKGNhY2hlRXgpID0+IGNhY2hlRXgubXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MsXG4gICAgICBzaG91bGRJbmNsdWRlOiBzaG91bGRJbmNsdWRlTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3NcbiAgICB9XG4gIF07XG5cbiAgZm9yIChjb25zdCBmZWF0dXJlTGlua1NlbGVjdG9yIG9mIGZlYXR1cmVMaW5rU2VsZWN0b3JzKSB7XG4gICAgaWYgKCFmZWF0dXJlTGlua1NlbGVjdG9yLnNob3VsZEluY2x1ZGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghaXNDYWNoZWRNZXRhZGF0YUV4KGNhY2hlKSB8fCAhY2FjaGUuZmVhdHVyZXMuaW5jbHVkZXMoZmVhdHVyZUxpbmtTZWxlY3Rvci5mZWF0dXJlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5jbHVkZSAke2ZlYXR1cmVMaW5rU2VsZWN0b3IuZGVzY3JpcHRpb259OiB0aGUgY2FjaGUgd2FzIG5vdCBjb21wdXRlZCB3aXRoIHRoZSAke2ZlYXR1cmVMaW5rU2VsZWN0b3IuZmVhdHVyZX0gZmVhdHVyZS5gKTtcbiAgICB9XG5cbiAgICBsaW5rcy5wdXNoKC4uLmVuc3VyZU5vbk51bGxhYmxlKGZlYXR1cmVMaW5rU2VsZWN0b3Iuc2VsZWN0KGNhY2hlKSkpO1xuICB9XG5cbiAgc29ydFJlZmVyZW5jZXMobGlua3MpO1xuXG4gIC8vIEJVRzogaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC90L2J1Zy1kdXBsaWNhdGVkLWxpbmtzLWluLW1ldGFkYXRhY2FjaGUtaW5zaWRlLWZvb3Rub3Rlcy84NTU1MVxuICBsaW5rcyA9IGxpbmtzLmZpbHRlcigobGluaywgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzTGluayA9IGVuc3VyZU5vbk51bGxhYmxlKGxpbmtzW2luZGV4IC0gMV0pO1xuXG4gICAgaWYgKGlzUmVmZXJlbmNlQ2FjaGUobGluaykgJiYgaXNSZWZlcmVuY2VDYWNoZShwcmV2aW91c0xpbmspKSB7XG4gICAgICByZXR1cm4gbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQgIT09IHByZXZpb3VzTGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUobGluaykgJiYgaXNGcm9udG1hdHRlckxpbmtDYWNoZShwcmV2aW91c0xpbmspKSB7XG4gICAgICBjb25zdCBsaW5rU3RhcnRPZmZzZXQgPSBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMobGluaykgPyBsaW5rLnN0YXJ0T2Zmc2V0IDogMDtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGlua1N0YXJ0T2Zmc2V0ID0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHByZXZpb3VzTGluaykgPyBwcmV2aW91c0xpbmsuc3RhcnRPZmZzZXQgOiAwO1xuICAgICAgcmV0dXJuIGxpbmsua2V5ICE9PSBwcmV2aW91c0xpbmsua2V5IHx8IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhsaW5rKSAhPT0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHByZXZpb3VzTGluaylcbiAgICAgICAgfHwgbGlua1N0YXJ0T2Zmc2V0ICE9PSBwcmV2aW91c0xpbmtTdGFydE9mZnNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGxpbmtzO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGJhY2tsaW5rIGNhY2hlIHBsdWdpbiBpcyBjdXJyZW50bHkgbG9hZGVkIC0gZWl0aGVyIEFkdmFuY2VkIE1ldGFkYXRhIENhY2hlICh7QGxpbmsgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEfSkgb3IgaXRzIHJldGlyZWQgcHJlZGVjZXNzb3IgQmFja2xpbmsgQ2FjaGUgKHtAbGluayBCQUNLTElOS19DQUNIRV9QTFVHSU5fSUR9KS5cbiAqXG4gKiBTdWNoIGEgcGx1Z2luIGdyYWZ0cyBhIGRyYWluLW9uLXJlYWQgYmFja2xpbmsgaW5kZXggb250byB0aGUgbWV0YWRhdGEgY2FjaGUgYW5kIGluZGV4ZXMgY2FudmFzIG1ldGFkYXRhLCBzbyBhIGNhbGxlciB0aGF0IGNvbXBlbnNhdGVzIGZvciBPYnNpZGlhbidzIG93biBnYXBzIGNhbiBzdGFuZCBkb3duIHdoaWxlIG9uZSBpcyBwcmVzZW50LiBCb3RoIGlkcyBhcmUgcmVjb2duaXplZDsge0BsaW5rIEJBQ0tMSU5LX0NBQ0hFX1BMVUdJTl9JRH0gcmVjb3JkcyB3aGVuIHRoZSByZXRpcmVkIG9uZSBtYXkgYmUgZHJvcHBlZC5cbiAqXG4gKiBUaGlzIHJlYWRzIHRoZSBMT0FERUQgcGx1Z2luIGluc3RhbmNlIHJhdGhlciB0aGFuIGBhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2luc2AsIGRlbGliZXJhdGVseTogdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIHBsdWdpbidzIHBhdGNoZXMgYXJlIGluIHBsYWNlIHJpZ2h0IG5vdywgYW5kIHRoZXkgYXJlIG5vdCB1bnRpbCBpdCBoYXMgbG9hZGVkLiBQbHVnaW5zIGxvYWQgaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIsIHNvIGNhbGwgdGhpcyBmcm9tIGEgdXNlci1kcml2ZW4gcGF0aCByYXRoZXIgdGhhbiBmcm9tIHBsdWdpbiBsb2FkIC0gc2VlIHJ1bGUgTDI1IGluIGBBR0VOVFMubWRgLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgYHRydWVgIGlmIGEgYmFja2xpbmsgY2FjaGUgcGx1Z2luIGlzIGxvYWRlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNCYWNrbGlua0NhY2hlUGx1Z2luKGFwcDogQXBwKTogYm9vbGVhbiB7XG4gIHJldHVybiBhcHAucGx1Z2lucy5nZXRQbHVnaW4oQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEKSAhPT0gbnVsbCB8fCBhcHAucGx1Z2lucy5nZXRQbHVnaW4oQkFDS0xJTktfQ0FDSEVfUExVR0lOX0lEKSAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBjYWNoZSBpcyBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fSAoaS5lLiBpdCB3YXMgY29tcHV0ZWQgd2l0aCBleHRlcm5hbC1saW5rXG4gKiBwYXJzaW5nIGVuYWJsZWQpLlxuICpcbiAqIEBwYXJhbSBjYWNoZSAtIFRoZSBjYWNoZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY2FjaGUgaXMgYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0sIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDYWNoZWRNZXRhZGF0YUV4KGNhY2hlOiBDYWNoZWRNZXRhZGF0YSk6IGNhY2hlIGlzIENhY2hlZE1ldGFkYXRhRXgge1xuICByZXR1cm4gJ2ZlYXR1cmVzJyBpbiBjYWNoZTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIG1ldGFkYXRhIGZvciBhIGdpdmVuIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSAkc3RyaW5nIC0gVGhlIHN0cmluZyB0byBwYXJzZSB0aGUgbWV0YWRhdGEgZm9yLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyc2Ugb3B0aW9ucyBjb250cm9sbGluZyB3aGljaCBhZGRpdGlvbmFsIGxpbmtzIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhcnNlTWV0YWRhdGEoYXBwOiBBcHAsICRzdHJpbmc6IHN0cmluZywgb3B0aW9uczogUGFyc2VNZXRhZGF0YU9wdGlvbnMgPSB7fSk6IFByb21pc2U8Q2FjaGVkTWV0YWRhdGFFeD4ge1xuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGNvbnN0IGJ1ZmZlciA9IGVuY29kZXIuZW5jb2RlKCRzdHJpbmcpLmJ1ZmZlcjtcbiAgY29uc3QgY2FjaGUgPSBhd2FpdCBhcHAubWV0YWRhdGFDYWNoZS5jb21wdXRlTWV0YWRhdGFBc3luYyhidWZmZXIpID8/IHt9O1xuICByZXR1cm4gdG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4KHsgY2FjaGUsIGNvbnRlbnQ6ICRzdHJpbmcsIG9wdGlvbnMgfSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBmaWxlIGNhY2hlIGZvciBhIG5vbi1leGlzdGluZyBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVnaXN0ZXJpbmcgdGhlIGZpbGUgY2FjaGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBmaWxlIGNhY2hlIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGUocGFyYW1zOiBSZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZVBhcmFtcyk6IERpc3Bvc2FibGUge1xuICBjb25zdCB7IGFwcCwgY2FjaGUsIHBhdGhPckZpbGUgfSA9IHBhcmFtcztcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcbiAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgaXMgZXhpc3RpbmcnKTtcbiAgfVxuXG4gIGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVDYWNoZVtmaWxlLnBhdGhdID0ge1xuICAgIGhhc2g6IGZpbGUucGF0aCxcbiAgICBtdGltZTogMCxcbiAgICBzaXplOiAwXG4gIH07XG5cbiAgYXBwLm1ldGFkYXRhQ2FjaGUubWV0YWRhdGFDYWNoZVtmaWxlLnBhdGhdID0gY2FjaGU7XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICB1bnJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlKGFwcCwgZmlsZSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgZmlsZXMgaW4gdGhlIE9ic2lkaWFuIGFwcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlcyAtIFRoZSBmaWxlcyB0byByZWdpc3Rlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgdW5yZWdpc3RlcnMgdGhlIGZpbGVzIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJGaWxlcyhhcHA6IEFwcCwgZmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IERpc3Bvc2FibGUge1xuICBjb25zdCByZWdpc3RlcmVkRmlsZXNDb3VudHMgPSBnZXRSZWdpc3RlcmVkRmlsZXNDb3VudHMoKTtcblxuICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgd2hpbGUgKGZpbGUuZGVsZXRlZCkge1xuICAgICAgbGV0IGNvdW50ID0gcmVnaXN0ZXJlZEZpbGVzQ291bnRzLmdldChmaWxlLnBhdGgpID8/IDA7XG4gICAgICBjb3VudCsrO1xuICAgICAgcmVnaXN0ZXJlZEZpbGVzQ291bnRzLnNldChmaWxlLnBhdGgsIGNvdW50KTtcblxuICAgICAgYXBwLnZhdWx0LmZpbGVNYXBbZmlsZS5wYXRoXSA9IGZpbGU7XG5cbiAgICAgIGlmIChpc0ZpbGUoZmlsZSkpIHtcbiAgICAgICAgYXBwLm1ldGFkYXRhQ2FjaGUudW5pcXVlRmlsZUxvb2t1cC5hZGQoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCksIGZpbGUpO1xuICAgICAgfVxuXG4gICAgICBmaWxlID0gZ2V0Rm9sZGVyKHtcbiAgICAgICAgYXBwLFxuICAgICAgICBwYXRoT3JGb2xkZXI6IHBhcmVudEZvbGRlclBhdGgoZmlsZS5wYXRoKSxcbiAgICAgICAgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIHVucmVnaXN0ZXJGaWxlcyhhcHAsIGZpbGVzKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFVucmVnaXN0ZXJzIHRoZSBmaWxlIGNhY2hlIGZvciBhIG5vbi1leGlzdGluZyBmaWxlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHVucmVnaXN0ZXIgdGhlIGZpbGUgY2FjaGUgZm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IHZvaWQge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSwgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlIH0pO1xuICBpZiAoIWZpbGUuZGVsZXRlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmlsZSBpcyBleGlzdGluZycpO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgZGVsZXRlIGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVDYWNoZVtmaWxlLnBhdGhdO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gIGRlbGV0ZSBhcHAubWV0YWRhdGFDYWNoZS5tZXRhZGF0YUNhY2hlW2ZpbGUucGF0aF07XG59XG5cbi8qKlxuICogVW5yZWdpc3RlcnMgZmlsZXMgZnJvbSB0aGUgT2JzaWRpYW4gYXBwLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGVzIC0gVGhlIGZpbGVzIHRvIHVucmVnaXN0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyRmlsZXMoYXBwOiBBcHAsIGZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiB2b2lkIHtcbiAgY29uc3QgcmVnaXN0ZXJlZEZpbGVzQ291bnRzID0gZ2V0UmVnaXN0ZXJlZEZpbGVzQ291bnRzKCk7XG5cbiAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgIHdoaWxlIChmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGxldCBjb3VudCA9IHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5nZXQoZmlsZS5wYXRoKSA/PyAxO1xuICAgICAgY291bnQtLTtcbiAgICAgIHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5zZXQoZmlsZS5wYXRoLCBjb3VudCk7XG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgcmVnaXN0ZXJlZEZpbGVzQ291bnRzLmRlbGV0ZShmaWxlLnBhdGgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gICAgICAgIGRlbGV0ZSBhcHAudmF1bHQuZmlsZU1hcFtmaWxlLnBhdGhdO1xuXG4gICAgICAgIGlmIChpc0ZpbGUoZmlsZSkpIHtcbiAgICAgICAgICBhcHAubWV0YWRhdGFDYWNoZS51bmlxdWVGaWxlTG9va3VwLnJlbW92ZShmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZmlsZSA9IGdldEZvbGRlcih7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcGF0aE9yRm9sZGVyOiBwYXJlbnRGb2xkZXJQYXRoKGZpbGUucGF0aCksXG4gICAgICAgIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRGaWxlc0NvdW50cygpOiBNYXA8c3RyaW5nLCBudW1iZXI+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSgncmVnaXN0ZXJlZEZpbGVzQ291bnRzJywgbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSkudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGhhc0JhY2tsaW5rQ2FjaGVTYWZlT3ZlcmxvYWQoYXBwOiBBcHApOiBib29sZWFuIHtcbiAgcmV0dXJuICEhKGFwcC5tZXRhZGF0YUNhY2hlLmdldEJhY2tsaW5rc0ZvckZpbGUgYXMgUGFydGlhbDxHZXRCYWNrbGlua3NGb3JGaWxlU2FmZVdyYXBwZXI+KS5zYWZlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4dGVybmFsQm9keUxpbmtzKGNvbnRlbnQ6IHN0cmluZywgY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogUGFyc2VMaW5rUmVmZXJlbmNlW10ge1xuICBjb25zdCBmcm9udG1hdHRlckVuZE9mZnNldCA9IGNhY2hlLmZyb250bWF0dGVyUG9zaXRpb24/LmVuZC5vZmZzZXQgPz8gMDtcbiAgcmV0dXJuIHBhcnNlTGlua3MoY29udGVudClcbiAgICAuZmlsdGVyKChwYXJzZUxpbmtSZXN1bHQpID0+IHBhcnNlTGlua1Jlc3VsdC5pc0V4dGVybmFsICYmIHBhcnNlTGlua1Jlc3VsdC5zdGFydE9mZnNldCA+PSBmcm9udG1hdHRlckVuZE9mZnNldClcbiAgICAubWFwKChwYXJzZUxpbmtSZXN1bHQpID0+IHRvUGFyc2VMaW5rUmVmZXJlbmNlKHsgY29udGVudCwgcGFyc2VMaW5rUmVzdWx0IH0pKTtcbn1cblxuZnVuY3Rpb24gdG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4KHBhcmFtczogVG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4UGFyYW1zKTogQ2FjaGVkTWV0YWRhdGFFeCB7XG4gIGNvbnN0IHsgY2FjaGUsIGNvbnRlbnQsIG9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgZmVhdHVyZXM6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlW10gPSBbQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTmF0aXZlXTtcbiAgY29uc3QgcmVzdWx0OiBDYWNoZWRNZXRhZGF0YUV4ID0geyAuLi5jYWNoZSwgZmVhdHVyZXMgfTtcblxuICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZUV4dGVybmFsTGlua3MpIHtcbiAgICByZXN1bHQuZXh0ZXJuYWxMaW5rcyA9IHBhcnNlRXh0ZXJuYWxCb2R5TGlua3MoY29udGVudCwgY2FjaGUpO1xuICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rcyk7XG4gIH1cblxuICBpZiAoXG4gICAgb3B0aW9ucy5zaG91bGRQYXJzZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIHx8IG9wdGlvbnMuc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzXG4gICAgfHwgb3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICkge1xuICAgIGNvbnN0IGZyb250bWF0dGVyTGlua3MgPSBwYXJzZUZyb250bWF0dGVyTGlua3MoY2FjaGUuZnJvbnRtYXR0ZXIpO1xuXG4gICAgaWYgKG9wdGlvbnMuc2hvdWxkUGFyc2VGcm9udG1hdHRlckV4dGVybmFsTGlua3MpIHtcbiAgICAgIHJlc3VsdC5mcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSBmcm9udG1hdHRlckxpbmtzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcztcbiAgICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MpIHtcbiAgICAgIHJlc3VsdC5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZnJvbnRtYXR0ZXJMaW5rcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzO1xuICAgICAgZmVhdHVyZXMucHVzaChDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzKSB7XG4gICAgICByZXN1bHQubXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MgPSBmcm9udG1hdHRlckxpbmtzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzO1xuICAgICAgZmVhdHVyZXMucHVzaChDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyx5QkFBeUI7QUFDbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQVVQLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsa0NBQWtDO0FBQzNDO0FBQUEs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QUssSUFBSTtBQUV0QyxlQUFPLElBQUksTUFBTSxRQUFRLEtBQUssSUFBSTtBQUVsQyxZQUFJLE9BQU8sSUFBSSxHQUFHO0FBQ2hCLGNBQUksY0FBYyxpQkFBaUIsT0FBTyxLQUFLLEtBQUssWUFBWSxHQUFHLElBQUk7QUFBQSxRQUN6RTtBQUFBLE1BQ0Y7QUFFQSxhQUFPLFVBQVU7QUFBQSxRQUNmO0FBQUEsUUFDQSxjQUFjLGlCQUFpQixLQUFLLElBQUk7QUFBQSxRQUN4QywwQkFBMEI7QUFBQSxNQUM1QixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsMkJBQWdEO0FBQ3ZELFNBQU8seUJBQXlCLHlCQUF5QixvQkFBSSxJQUFvQixDQUFDLEVBQUU7QUFDdEY7QUFFQSxTQUFTLDZCQUE2QixLQUFtQjtBQUN2RCxTQUFPLENBQUMsQ0FBRSxJQUFJLGNBQWMsb0JBQWdFO0FBQzlGO0FBRUEsU0FBUyx1QkFBdUIsU0FBaUIsT0FBNkM7QUFDNUYsUUFBTSx1QkFBdUIsTUFBTSxxQkFBcUIsSUFBSSxVQUFVO0FBQ3RFLFNBQU8sV0FBVyxPQUFPLEVBQ3RCLE9BQU8sQ0FBQyxvQkFBb0IsZ0JBQWdCLGNBQWMsZ0JBQWdCLGVBQWUsb0JBQW9CLEVBQzdHLElBQUksQ0FBQyxvQkFBb0IscUJBQXFCLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2hGO0FBRUEsU0FBUyx5QkFBeUIsUUFBMEQ7QUFDMUYsUUFBTSxFQUFFLE9BQU8sU0FBUyxRQUFRLElBQUk7QUFDcEMsUUFBTSxXQUFzQyxDQUFDLHFCQUE4QjtBQUMzRSxRQUFNLFNBQTJCLEVBQUUsR0FBRyxPQUFPLFNBQVM7QUFFdEQsTUFBSSxRQUFRLDBCQUEwQjtBQUNwQyxXQUFPLGdCQUFnQix1QkFBdUIsU0FBUyxLQUFLO0FBQzVELGFBQVMsS0FBSyxtQ0FBcUM7QUFBQSxFQUNyRDtBQUVBLE1BQ0UsUUFBUSx1Q0FDTCxRQUFRLGlEQUNSLFFBQVEsdUNBQ1g7QUFDQSxVQUFNLG1CQUFtQixzQkFBc0IsTUFBTSxXQUFXO0FBRWhFLFFBQUksUUFBUSxxQ0FBcUM7QUFDL0MsYUFBTywyQkFBMkIsaUJBQWlCO0FBQ25ELGVBQVMsS0FBSyx5REFBZ0Q7QUFBQSxJQUNoRTtBQUVBLFFBQUksUUFBUSwrQ0FBK0M7QUFDekQsYUFBTyxxQ0FBcUMsaUJBQWlCO0FBQzdELGVBQVMsS0FBSyw2RUFBMEQ7QUFBQSxJQUMxRTtBQUVBLFFBQUksUUFBUSx1Q0FBdUM7QUFDakQsYUFBTyw2QkFBNkIsaUJBQWlCO0FBQ3JELGVBQVMsS0FBSyw2REFBa0Q7QUFBQSxJQUNsRTtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbIkNhY2hlZE1ldGFkYXRhRXhGZWF0dXJlIl0KfQo=