obsidian-dev-utils 80.0.2 → 81.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/dev/main.js +30208 -0
  3. package/dist/dev/manifest.json +9 -0
  4. package/dist/lib/cjs/async-events.cjs +9 -1
  5. package/dist/lib/cjs/async-events.d.cts +8 -0
  6. package/dist/lib/cjs/async.cjs +89 -34
  7. package/dist/lib/cjs/async.d.cts +67 -15
  8. package/dist/lib/cjs/debug.cjs +26 -9
  9. package/dist/lib/cjs/debug.d.cts +23 -5
  10. package/dist/lib/cjs/error.cjs +4 -5
  11. package/dist/lib/cjs/error.d.cts +19 -4
  12. package/dist/lib/cjs/html-element.cjs +1 -1
  13. package/dist/lib/cjs/html-element.d.cts +2 -0
  14. package/dist/lib/cjs/library.cjs +2 -2
  15. package/dist/lib/cjs/object-utils.cjs +233 -128
  16. package/dist/lib/cjs/object-utils.d.cts +19 -4
  17. package/dist/lib/cjs/obsidian/async-with-notice.cjs +9 -6
  18. package/dist/lib/cjs/obsidian/async-with-notice.d.cts +9 -0
  19. package/dist/lib/cjs/obsidian/attachment-path.cjs +45 -13
  20. package/dist/lib/cjs/obsidian/attachment-path.d.cts +38 -8
  21. package/dist/lib/cjs/obsidian/backlink.cjs +6 -6
  22. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +53 -16
  23. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +81 -9
  24. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +25 -5
  25. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +35 -1
  26. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +33 -19
  27. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +43 -17
  28. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +33 -19
  29. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +43 -17
  30. package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +17 -9
  31. package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +48 -8
  32. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +3 -1
  33. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +3 -1
  34. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +24 -8
  35. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +25 -4
  36. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +144 -65
  37. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +3 -0
  38. package/dist/lib/cjs/obsidian/dataview-link.cjs +7 -2
  39. package/dist/lib/cjs/obsidian/dataview-link.d.cts +20 -5
  40. package/dist/lib/cjs/obsidian/dataview.cjs +27 -10
  41. package/dist/lib/cjs/obsidian/dataview.d.cts +19 -4
  42. package/dist/lib/cjs/obsidian/file-change.cjs +103 -27
  43. package/dist/lib/cjs/obsidian/file-change.d.cts +50 -13
  44. package/dist/lib/cjs/obsidian/file-manager.cjs +61 -32
  45. package/dist/lib/cjs/obsidian/file-manager.d.cts +63 -13
  46. package/dist/lib/cjs/obsidian/file-system.cjs +122 -23
  47. package/dist/lib/cjs/obsidian/file-system.d.cts +168 -39
  48. package/dist/lib/cjs/obsidian/frontmatter.cjs +7 -2
  49. package/dist/lib/cjs/obsidian/link.cjs +266 -122
  50. package/dist/lib/cjs/obsidian/link.d.cts +84 -20
  51. package/dist/lib/cjs/obsidian/logger.cjs +48 -22
  52. package/dist/lib/cjs/obsidian/logger.d.cts +26 -5
  53. package/dist/lib/cjs/obsidian/loop.cjs +14 -4
  54. package/dist/lib/cjs/obsidian/loop.d.cts +5 -0
  55. package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +155 -107
  56. package/dist/lib/cjs/obsidian/markdown.cjs +40 -11
  57. package/dist/lib/cjs/obsidian/markdown.d.cts +76 -16
  58. package/dist/lib/cjs/obsidian/metadata-cache.cjs +28 -14
  59. package/dist/lib/cjs/obsidian/metadata-cache.d.cts +76 -16
  60. package/dist/lib/cjs/obsidian/path-settings.cjs +5 -2
  61. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +5 -1
  62. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +4 -0
  63. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +15 -7
  64. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +39 -8
  65. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +3 -2
  66. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +4 -4
  67. package/dist/lib/cjs/obsidian/queue.cjs +9 -7
  68. package/dist/lib/cjs/obsidian/resource-url.cjs +7 -2
  69. package/dist/lib/cjs/obsidian/resource-url.d.cts +19 -4
  70. package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +4 -2
  71. package/dist/lib/cjs/obsidian/status-bar-item-registrar.d.cts +6 -2
  72. package/dist/lib/cjs/obsidian/vault-delete.cjs +19 -15
  73. package/dist/lib/cjs/obsidian/vault-delete.d.cts +11 -6
  74. package/dist/lib/cjs/obsidian/vault.cjs +116 -59
  75. package/dist/lib/cjs/obsidian/vault.d.cts +178 -41
  76. package/dist/lib/cjs/path.cjs +12 -5
  77. package/dist/lib/cjs/path.d.cts +15 -3
  78. package/dist/lib/cjs/reg-exp.cjs +101 -78
  79. package/dist/lib/cjs/script-utils/build.cjs +9 -5
  80. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +34 -14
  81. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +20 -5
  82. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +23 -5
  83. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +11 -4
  84. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +6 -2
  85. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +31 -12
  86. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +19 -4
  87. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +7 -7
  88. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +12 -3
  89. package/dist/lib/cjs/script-utils/cli-utils.cjs +6 -2
  90. package/dist/lib/cjs/script-utils/exec.cjs +47 -12
  91. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -3
  92. package/dist/lib/cjs/script-utils/json.cjs +9 -5
  93. package/dist/lib/cjs/script-utils/json.d.cts +38 -8
  94. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +8 -3
  95. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +27 -7
  96. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +7 -3
  97. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +8 -3
  98. package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -3
  99. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +3 -3
  100. package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +72 -30
  101. package/dist/lib/cjs/script-utils/npm-publish.cjs +2 -2
  102. package/dist/lib/cjs/script-utils/npm.cjs +18 -9
  103. package/dist/lib/cjs/script-utils/root.cjs +20 -5
  104. package/dist/lib/cjs/script-utils/root.d.cts +45 -9
  105. package/dist/lib/cjs/script-utils/validate-declarations.cjs +4 -3
  106. package/dist/lib/cjs/script-utils/version.cjs +36 -19
  107. package/dist/lib/cjs/strict-proxy.cjs +10 -1
  108. package/dist/lib/cjs/string.cjs +63 -22
  109. package/dist/lib/cjs/string.d.cts +188 -40
  110. package/dist/lib/esm/async-events.d.mts +8 -0
  111. package/dist/lib/esm/async-events.mjs +9 -1
  112. package/dist/lib/esm/async.d.mts +67 -15
  113. package/dist/lib/esm/async.mjs +89 -34
  114. package/dist/lib/esm/debug.d.mts +23 -5
  115. package/dist/lib/esm/debug.mjs +26 -9
  116. package/dist/lib/esm/error.d.mts +19 -4
  117. package/dist/lib/esm/error.mjs +4 -5
  118. package/dist/lib/esm/html-element.d.mts +2 -0
  119. package/dist/lib/esm/html-element.mjs +1 -1
  120. package/dist/lib/esm/library.mjs +2 -2
  121. package/dist/lib/esm/object-utils.d.mts +19 -4
  122. package/dist/lib/esm/object-utils.mjs +233 -128
  123. package/dist/lib/esm/obsidian/async-with-notice.d.mts +9 -0
  124. package/dist/lib/esm/obsidian/async-with-notice.mjs +9 -6
  125. package/dist/lib/esm/obsidian/attachment-path.d.mts +38 -8
  126. package/dist/lib/esm/obsidian/attachment-path.mjs +45 -13
  127. package/dist/lib/esm/obsidian/backlink.mjs +6 -6
  128. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +81 -9
  129. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +53 -16
  130. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +35 -1
  131. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +25 -5
  132. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.d.mts +43 -17
  133. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +33 -19
  134. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.d.mts +43 -17
  135. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +33 -19
  136. package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +48 -8
  137. package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +17 -9
  138. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +3 -1
  139. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +3 -1
  140. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +25 -4
  141. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +24 -8
  142. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +3 -0
  143. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +145 -69
  144. package/dist/lib/esm/obsidian/dataview-link.d.mts +20 -5
  145. package/dist/lib/esm/obsidian/dataview-link.mjs +7 -2
  146. package/dist/lib/esm/obsidian/dataview.d.mts +19 -4
  147. package/dist/lib/esm/obsidian/dataview.mjs +27 -10
  148. package/dist/lib/esm/obsidian/file-change.d.mts +50 -13
  149. package/dist/lib/esm/obsidian/file-change.mjs +104 -27
  150. package/dist/lib/esm/obsidian/file-manager.d.mts +63 -13
  151. package/dist/lib/esm/obsidian/file-manager.mjs +65 -33
  152. package/dist/lib/esm/obsidian/file-system.d.mts +168 -39
  153. package/dist/lib/esm/obsidian/file-system.mjs +122 -23
  154. package/dist/lib/esm/obsidian/frontmatter.mjs +7 -2
  155. package/dist/lib/esm/obsidian/link.d.mts +84 -20
  156. package/dist/lib/esm/obsidian/link.mjs +266 -122
  157. package/dist/lib/esm/obsidian/logger.d.mts +26 -5
  158. package/dist/lib/esm/obsidian/logger.mjs +48 -22
  159. package/dist/lib/esm/obsidian/loop.d.mts +5 -0
  160. package/dist/lib/esm/obsidian/loop.mjs +14 -4
  161. package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +155 -107
  162. package/dist/lib/esm/obsidian/markdown.d.mts +76 -16
  163. package/dist/lib/esm/obsidian/markdown.mjs +40 -11
  164. package/dist/lib/esm/obsidian/metadata-cache.d.mts +76 -16
  165. package/dist/lib/esm/obsidian/metadata-cache.mjs +28 -14
  166. package/dist/lib/esm/obsidian/path-settings.mjs +5 -2
  167. package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +4 -0
  168. package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +5 -1
  169. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +39 -8
  170. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +15 -7
  171. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +4 -4
  172. package/dist/lib/esm/obsidian/plugin/plugin.mjs +5 -7
  173. package/dist/lib/esm/obsidian/queue.mjs +9 -7
  174. package/dist/lib/esm/obsidian/resource-url.d.mts +19 -4
  175. package/dist/lib/esm/obsidian/resource-url.mjs +7 -2
  176. package/dist/lib/esm/obsidian/status-bar-item-registrar.d.mts +6 -2
  177. package/dist/lib/esm/obsidian/status-bar-item-registrar.mjs +4 -2
  178. package/dist/lib/esm/obsidian/vault-delete.d.mts +11 -6
  179. package/dist/lib/esm/obsidian/vault-delete.mjs +19 -15
  180. package/dist/lib/esm/obsidian/vault.d.mts +178 -41
  181. package/dist/lib/esm/obsidian/vault.mjs +116 -59
  182. package/dist/lib/esm/path.d.mts +15 -3
  183. package/dist/lib/esm/path.mjs +12 -5
  184. package/dist/lib/esm/reg-exp.mjs +101 -78
  185. package/dist/lib/esm/script-utils/build.mjs +9 -5
  186. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +34 -14
  187. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +23 -5
  188. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +20 -5
  189. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +11 -4
  190. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +6 -2
  191. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +19 -4
  192. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +31 -12
  193. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +7 -7
  194. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +12 -3
  195. package/dist/lib/esm/script-utils/cli-utils.mjs +6 -2
  196. package/dist/lib/esm/script-utils/exec.mjs +47 -12
  197. package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -3
  198. package/dist/lib/esm/script-utils/json.d.mts +38 -8
  199. package/dist/lib/esm/script-utils/json.mjs +9 -5
  200. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +8 -3
  201. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +27 -7
  202. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +7 -3
  203. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +8 -3
  204. package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -3
  205. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +3 -3
  206. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +72 -30
  207. package/dist/lib/esm/script-utils/npm-publish.mjs +2 -2
  208. package/dist/lib/esm/script-utils/npm.mjs +18 -9
  209. package/dist/lib/esm/script-utils/root.d.mts +45 -9
  210. package/dist/lib/esm/script-utils/root.mjs +20 -5
  211. package/dist/lib/esm/script-utils/validate-declarations.mjs +4 -3
  212. package/dist/lib/esm/script-utils/version.mjs +36 -19
  213. package/dist/lib/esm/strict-proxy.mjs +10 -1
  214. package/dist/lib/esm/string.d.mts +188 -40
  215. package/dist/lib/esm/string.mjs +63 -22
  216. package/dist/styles.css +5 -1
  217. package/package.json +9 -9
@@ -78,6 +78,7 @@ import {
78
78
  getZIndex,
79
79
  waitUntilConnected
80
80
  } from "../html-element.mjs";
81
+ import { normalizeOptionalProperties } from "../object-utils.mjs";
81
82
  import { MonkeyAroundComponent } from "./components/monkey-around-component.mjs";
82
83
  import { getDomEventsHandlersConstructor } from "./constructors/getDomEventsHandlersConstructor.mjs";
83
84
  import {
@@ -155,7 +156,11 @@ async function fullRender(params) {
155
156
  component.unload();
156
157
  }
157
158
  if (params.shouldRegisterLinkHandlers) {
158
- await registerLinkHandlers(params.app, params.el, params.sourcePath);
159
+ await registerLinkHandlers(normalizeOptionalProperties({
160
+ app: params.app,
161
+ el: params.el,
162
+ sourcePath: params.sourcePath
163
+ }));
159
164
  }
160
165
  } catch (_2) {
161
166
  var _error = _2, _hasError = true;
@@ -163,7 +168,12 @@ async function fullRender(params) {
163
168
  __callDispose(_stack, _error, _hasError);
164
169
  }
165
170
  }
166
- async function markdownToHtml(app, markdown, sourcePath) {
171
+ async function markdownToHtml(params) {
172
+ const {
173
+ app,
174
+ markdown,
175
+ sourcePath
176
+ } = params;
167
177
  const component = new Component();
168
178
  component.load();
169
179
  const renderDiv = createDiv();
@@ -172,7 +182,12 @@ async function markdownToHtml(app, markdown, sourcePath) {
172
182
  component.unload();
173
183
  return html;
174
184
  }
175
- async function registerLinkHandlers(app, el, sourcePath) {
185
+ async function registerLinkHandlers(params) {
186
+ const {
187
+ app,
188
+ el,
189
+ sourcePath
190
+ } = params;
176
191
  domEventsHandlersConstructor ??= await getDomEventsHandlersConstructor(app);
177
192
  MarkdownPreviewRenderer.registerDomEvents(
178
193
  el,
@@ -185,8 +200,12 @@ async function registerLinkHandlers(app, el, sourcePath) {
185
200
  )
186
201
  );
187
202
  }
188
- async function renderExternalLink(app, url, displayText) {
189
- displayText ??= url;
203
+ async function renderExternalLink(params) {
204
+ const {
205
+ app,
206
+ url
207
+ } = params;
208
+ const displayText = params.displayText ?? url;
190
209
  const wrapperEl = createSpan();
191
210
  await fullRender({
192
211
  app,
@@ -194,13 +213,20 @@ async function renderExternalLink(app, url, displayText) {
194
213
  markdown: `[${displayText}](${url})`
195
214
  });
196
215
  const aEl = wrapperEl.find("a");
197
- await registerLinkHandlers(app, aEl);
216
+ await registerLinkHandlers({
217
+ app,
218
+ el: aEl
219
+ });
198
220
  return aEl;
199
221
  }
200
- async function renderInternalLink(app, pathOrAbstractFile, displayText) {
201
- const abstractFile = getAbstractFileOrNull(app, pathOrAbstractFile);
222
+ async function renderInternalLink(params) {
223
+ const {
224
+ app,
225
+ pathOrAbstractFile
226
+ } = params;
227
+ const abstractFile = getAbstractFileOrNull({ app, pathOrFile: pathOrAbstractFile });
202
228
  const path = getPath(app, pathOrAbstractFile);
203
- displayText ??= path;
229
+ const displayText = params.displayText ?? path;
204
230
  if (isFolder(abstractFile)) {
205
231
  return createEl("a", { text: displayText }, (aEl2) => {
206
232
  aEl2.addEventListener("click", (evt) => {
@@ -216,7 +242,10 @@ async function renderInternalLink(app, pathOrAbstractFile, displayText) {
216
242
  markdown: `[[${path}|${displayText}]]`
217
243
  });
218
244
  const aEl = wrapperEl.find("a");
219
- await registerLinkHandlers(app, aEl);
245
+ await registerLinkHandlers({
246
+ app,
247
+ el: aEl
248
+ });
220
249
  return aEl;
221
250
  }
222
251
  export {
@@ -226,4 +255,4 @@ export {
226
255
  renderExternalLink,
227
256
  renderInternalLink
228
257
  };
229
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21hcmtkb3duLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHByb2Nlc3NpbmcgTWFya2Rvd24gY29udGVudCBpbiBPYnNpZGlhbi5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVlcGx5IGNvdXBsZWQgdG8gT2JzaWRpYW4gcnVudGltZTsgcmVxdWlyZXMgcnVubmluZyB2YXVsdCBmb3IgbWVhbmluZ2Z1bCB0ZXN0aW5nLiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIERvbUV2ZW50c0hhbmRsZXJzLFxuICBEb21FdmVudHNIYW5kbGVyc0luZm8sXG4gIEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QnO1xuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgSW50ZXJuYWxQbHVnaW5OYW1lIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBIb3ZlclBvcG92ZXIsXG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLFxuICBNYXJrZG93blJlbmRlcmVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JBYnN0cmFjdEZpbGUgfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICcuLi9hc3luYy50cyc7XG5pbXBvcnQge1xuICBnZXRaSW5kZXgsXG4gIHdhaXRVbnRpbENvbm5lY3RlZFxufSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IGdldERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9ycy9nZXREb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7XG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0UGF0aCxcbiAgaXNGb2xkZXJcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbnR5cGUgRG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3RvciA9IEV4dHJhY3RDb25zdHJ1Y3RvcjxEb21FdmVudHNIYW5kbGVycz47XG5cbmxldCBkb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yOiBEb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yIHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICogVGhlIHBhcmFtcyBmb3IgdGhlIGZ1bGwgcmVuZGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bGxSZW5kZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29tcG9uZW50IGluc3RhbmNlIHRvIHVzZSBmb3IgdGhlIHJlbmRlci5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudD86IENvbXBvbmVudDtcblxuICAvKipcbiAgICogVGhlIEhUTUxFbGVtZW50IHRvIHJlbmRlciB0by5cbiAgICovXG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogVGhlIE1hcmtkb3duIHN0cmluZyB0byByZW5kZXIuXG4gICAqL1xuICByZWFkb25seSBtYXJrZG93bjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlZ2lzdGVyIGxpbmsgaGFuZGxlcnMgZm9yIHRoZSByZW5kZXJlZCBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVnaXN0ZXJMaW5rSGFuZGxlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcy5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mb0NvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5jbGFzcyBFbWJlZEJ5RXh0ZW5zaW9uTWRQYXRjaENvbXBvbmVudCBleHRlbmRzIE1vbmtleUFyb3VuZENvbXBvbmVudCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVtYmVkQnlFeHRlbnNpb246IEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgIG1ldGhvZE5hbWU6ICdtZCcsXG4gICAgICBvYmo6IHRoaXMuZW1iZWRCeUV4dGVuc2lvbixcbiAgICAgIHBhdGNoSGFuZGxlcjogKHtcbiAgICAgICAgZmFsbGJhY2ssXG4gICAgICAgIG9yaWdpbmFsQXJnczogW2NvbnRleHRdXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnRleHQuZGlzcGxheU1vZGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm8gaW1wbGVtZW50cyBEb21FdmVudHNIYW5kbGVyc0luZm8ge1xuICBwdWJsaWMgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgaG92ZXJQb3BvdmVyKCk6IEhvdmVyUG9wb3ZlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9ob3ZlclBvcG92ZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IGhvdmVyUG9wb3Zlcihob3ZlclBvcG92ZXI6IEhvdmVyUG9wb3ZlciB8IG51bGwpIHtcbiAgICB0aGlzLl9ob3ZlclBvcG92ZXIgPSBob3ZlclBvcG92ZXI7XG4gICAgaWYgKGhvdmVyUG9wb3ZlciAmJiB0aGlzLnpJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBob3ZlclBvcG92ZXIuaG92ZXJFbC5zZXRDc3NTdHlsZXMoe1xuICAgICAgICB6SW5kZXg6IFN0cmluZyh0aGlzLnpJbmRleClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hvdmVyUG9wb3ZlcjogSG92ZXJQb3BvdmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSB6SW5kZXg/OiBudW1iZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm9Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBhdGggPSBwYXJhbXMucGF0aDtcbiAgICB0aGlzLmVsID0gcGFyYW1zLmVsO1xuXG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2FpdFVudGlsQ29ubmVjdGVkKHRoaXMuZWwpO1xuICAgICAgdGhpcy51cGRhdGVaSW5kZXgodGhpcy5lbCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVpJbmRleChlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnpJbmRleCA9IGdldFpJbmRleChlbCkgKyAxO1xuICB9XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBtYXJrZG93biBhbmQgZW1iZWRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bGwgcmVuZGVyLlxuICogQHJldHVybnMgVGhlIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bGwgcmVuZGVyIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZnVsbFJlbmRlcihwYXJhbXM6IEZ1bGxSZW5kZXJQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc291cmNlUGF0aCA9IHBhcmFtcy5zb3VyY2VQYXRoID8/ICcvJztcbiAgbGV0IHNob3VsZFVubG9hZENvbXBvbmVudCA9IGZhbHNlO1xuICBsZXQgY29tcG9uZW50OiBDb21wb25lbnQ7XG4gIGlmIChwYXJhbXMuY29tcG9uZW50KSB7XG4gICAgY29tcG9uZW50ID0gcGFyYW1zLmNvbXBvbmVudDtcbiAgfSBlbHNlIHtcbiAgICBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KCk7XG4gICAgY29tcG9uZW50LmxvYWQoKTtcbiAgICBzaG91bGRVbmxvYWRDb21wb25lbnQgPSB0cnVlO1xuICB9XG5cbiAgdXNpbmcgXyA9IGNvbXBvbmVudC5hZGRDaGlsZChuZXcgRW1iZWRCeUV4dGVuc2lvbk1kUGF0Y2hDb21wb25lbnQocGFyYW1zLmFwcC5lbWJlZFJlZ2lzdHJ5LmVtYmVkQnlFeHRlbnNpb24pKTtcblxuICBhd2FpdCBNYXJrZG93blJlbmRlcmVyLnJlbmRlcihwYXJhbXMuYXBwLCBwYXJhbXMubWFya2Rvd24sIHBhcmFtcy5lbCwgc291cmNlUGF0aCwgY29tcG9uZW50KTtcblxuICBpZiAoc2hvdWxkVW5sb2FkQ29tcG9uZW50KSB7XG4gICAgY29tcG9uZW50LnVubG9hZCgpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zaG91bGRSZWdpc3RlckxpbmtIYW5kbGVycykge1xuICAgIGF3YWl0IHJlZ2lzdGVyTGlua0hhbmRsZXJzKHBhcmFtcy5hcHAsIHBhcmFtcy5lbCwgcGFyYW1zLnNvdXJjZVBhdGgpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgTWFya2Rvd24gdG8gSFRNTC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBtYXJrZG93biAtIFRoZSBNYXJrZG93biBzdHJpbmcgdG8gY29udmVydC5cbiAqIEBwYXJhbSBzb3VyY2VQYXRoIC0gKG9wdGlvbmFsKSBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcy5cbiAqIEByZXR1cm5zIFRoZSBIVE1MIHN0cmluZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcmtkb3duVG9IdG1sKGFwcDogQXBwLCBtYXJrZG93bjogc3RyaW5nLCBzb3VyY2VQYXRoPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudCgpO1xuICBjb21wb25lbnQubG9hZCgpO1xuICBjb25zdCByZW5kZXJEaXYgPSBjcmVhdGVEaXYoKTtcbiAgYXdhaXQgTWFya2Rvd25SZW5kZXJlci5yZW5kZXIoYXBwLCBtYXJrZG93biwgcmVuZGVyRGl2LCBzb3VyY2VQYXRoID8/ICcnLCBjb21wb25lbnQpO1xuICBjb25zdCBodG1sID0gcmVuZGVyRGl2LmlubmVySFRNTDtcbiAgY29tcG9uZW50LnVubG9hZCgpO1xuICByZXR1cm4gaHRtbDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgbGluayBoYW5kbGVycyBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZWwgLSBUaGUgSFRNTEVsZW1lbnQgdG8gcmVnaXN0ZXIgbGluayBoYW5kbGVycyBmb3IuXG4gKiBAcGFyYW0gc291cmNlUGF0aCAtIFRoZSBzb3VyY2UgcGF0aCB0byByZXNvbHZlIHJlbGF0aXZlIGxpbmtzIGZyb20uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWdpc3RlckxpbmtIYW5kbGVycyhhcHA6IEFwcCwgZWw6IEhUTUxFbGVtZW50LCBzb3VyY2VQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIE5vIHJhY2UgY29uZGl0aW9uLlxuICBkb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yID8/PSBhd2FpdCBnZXREb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yKGFwcCk7XG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzKFxuICAgIGVsLFxuICAgIG5ldyBkb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yKFxuICAgICAgbmV3IEZpeGVkWkluZGV4RG9tRXZlbnRzSGFuZGxlcnNJbmZvKHtcbiAgICAgICAgYXBwLFxuICAgICAgICBlbCxcbiAgICAgICAgcGF0aDogc291cmNlUGF0aCA/PyAnJ1xuICAgICAgfSlcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBleHRlcm5hbCBsaW5rLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gcmVuZGVyIHRoZSBleHRlcm5hbCBsaW5rIGZvci5cbiAqIEBwYXJhbSBkaXNwbGF5VGV4dCAtIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBleHRlcm5hbCBsaW5rLlxuICogQHJldHVybnMgVGhlIEhUTUxBbmNob3JFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHJlbmRlcmVkIGV4dGVybmFsIGxpbmsuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJFeHRlcm5hbExpbmsoYXBwOiBBcHAsIHVybDogc3RyaW5nLCBkaXNwbGF5VGV4dD86IHN0cmluZyk6IFByb21pc2U8SFRNTEFuY2hvckVsZW1lbnQ+IHtcbiAgZGlzcGxheVRleHQgPz89IHVybDtcbiAgY29uc3Qgd3JhcHBlckVsID0gY3JlYXRlU3BhbigpO1xuICBhd2FpdCBmdWxsUmVuZGVyKHtcbiAgICBhcHAsXG4gICAgZWw6IHdyYXBwZXJFbCxcbiAgICBtYXJrZG93bjogYFske2Rpc3BsYXlUZXh0fV0oJHt1cmx9KWBcbiAgfSk7XG4gIGNvbnN0IGFFbCA9IHdyYXBwZXJFbC5maW5kKCdhJykgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gIGF3YWl0IHJlZ2lzdGVyTGlua0hhbmRsZXJzKGFwcCwgYUVsKTtcbiAgcmV0dXJuIGFFbDtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGFuIGludGVybmFsIGxpbmsuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yQWJzdHJhY3RGaWxlIC0gVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZW5kZXIgdGhlIGludGVybmFsIGxpbmsgZm9yLlxuICogQHBhcmFtIGRpc3BsYXlUZXh0IC0gVGhlIHRleHQgdG8gZGlzcGxheSBmb3IgdGhlIGludGVybmFsIGxpbmsuXG4gKiBAcmV0dXJucyBUaGUgSFRNTEFuY2hvckVsZW1lbnQgY29udGFpbmluZyB0aGUgcmVuZGVyZWQgaW50ZXJuYWwgbGluay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckludGVybmFsTGluayhhcHA6IEFwcCwgcGF0aE9yQWJzdHJhY3RGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIGRpc3BsYXlUZXh0Pzogc3RyaW5nKTogUHJvbWlzZTxIVE1MQW5jaG9yRWxlbWVudD4ge1xuICBjb25zdCBhYnN0cmFjdEZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoYXBwLCBwYXRoT3JBYnN0cmFjdEZpbGUpO1xuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckFic3RyYWN0RmlsZSk7XG4gIGRpc3BsYXlUZXh0ID8/PSBwYXRoO1xuICBpZiAoaXNGb2xkZXIoYWJzdHJhY3RGaWxlKSkge1xuICAgIHJldHVybiBjcmVhdGVFbCgnYScsIHsgdGV4dDogZGlzcGxheVRleHQgfSwgKGFFbCkgPT4ge1xuICAgICAgYUVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXBwLmludGVybmFsUGx1Z2lucy5nZXRFbmFibGVkUGx1Z2luQnlJZChJbnRlcm5hbFBsdWdpbk5hbWUuRmlsZUV4cGxvcmVyKT8ucmV2ZWFsSW5Gb2xkZXIoYWJzdHJhY3RGaWxlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgd3JhcHBlckVsID0gY3JlYXRlU3BhbigpO1xuICBhd2FpdCBmdWxsUmVuZGVyKHtcbiAgICBhcHAsXG4gICAgZWw6IHdyYXBwZXJFbCxcbiAgICBtYXJrZG93bjogYFtbJHtwYXRofXwke2Rpc3BsYXlUZXh0fV1dYFxuICB9KTtcbiAgY29uc3QgYUVsID0gd3JhcHBlckVsLmZpbmQoJ2EnKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgYXdhaXQgcmVnaXN0ZXJMaW5rSGFuZGxlcnMoYXBwLCBhRWwpO1xuICByZXR1cm4gYUVsO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsU0FBUywwQkFBMEI7QUFDbkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7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
258
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21hcmtkb3duLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHByb2Nlc3NpbmcgTWFya2Rvd24gY29udGVudCBpbiBPYnNpZGlhbi5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVlcGx5IGNvdXBsZWQgdG8gT2JzaWRpYW4gcnVudGltZTsgcmVxdWlyZXMgcnVubmluZyB2YXVsdCBmb3IgbWVhbmluZ2Z1bCB0ZXN0aW5nLiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIERvbUV2ZW50c0hhbmRsZXJzLFxuICBEb21FdmVudHNIYW5kbGVyc0luZm8sXG4gIEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QnO1xuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgSW50ZXJuYWxQbHVnaW5OYW1lIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBIb3ZlclBvcG92ZXIsXG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLFxuICBNYXJrZG93blJlbmRlcmVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JBYnN0cmFjdEZpbGUgfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICcuLi9hc3luYy50cyc7XG5pbXBvcnQge1xuICBnZXRaSW5kZXgsXG4gIHdhaXRVbnRpbENvbm5lY3RlZFxufSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IE1vbmtleUFyb3VuZENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tb25rZXktYXJvdW5kLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBnZXREb21FdmVudHNIYW5kbGVyc0NvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3RvcnMvZ2V0RG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQge1xuICBnZXRBYnN0cmFjdEZpbGVPck51bGwsXG4gIGdldFBhdGgsXG4gIGlzRm9sZGVyXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG50eXBlIERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3IgPSBFeHRyYWN0Q29uc3RydWN0b3I8RG9tRXZlbnRzSGFuZGxlcnM+O1xuXG5sZXQgZG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3RvcjogRG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3RvciB8IG51bGwgPSBudWxsO1xuXG4vKipcbiAqIFRoZSBwYXJhbXMgZm9yIHRoZSBmdWxsIHJlbmRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdWxsUmVuZGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIENvbXBvbmVudCBpbnN0YW5jZSB0byB1c2UgZm9yIHRoZSByZW5kZXIuXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnQ/OiBDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBIVE1MRWxlbWVudCB0byByZW5kZXIgdG8uXG4gICAqL1xuICByZWFkb25seSBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBNYXJrZG93biBzdHJpbmcgdG8gcmVuZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFya2Rvd246IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWdpc3RlciBsaW5rIGhhbmRsZXJzIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlZ2lzdGVyTGlua0hhbmRsZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBwYXRoIHRvIHJlc29sdmUgcmVsYXRpdmUgbGlua3MuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBtYXJrZG93blRvSHRtbH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFya2Rvd25Ub0h0bWxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgTWFya2Rvd24gc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqL1xuICByZWFkb25seSBtYXJrZG93bjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcy5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlZ2lzdGVyTGlua0hhbmRsZXJzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckxpbmtIYW5kbGVyc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBIVE1MRWxlbWVudCB0byByZWdpc3RlciBsaW5rIGhhbmRsZXJzIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBwYXRoIHRvIHJlc29sdmUgcmVsYXRpdmUgbGlua3MgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlbmRlckV4dGVybmFsTGlua30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyRXh0ZXJuYWxMaW5rUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBmb3IgdGhlIGV4dGVybmFsIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5VGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCB0byByZW5kZXIgdGhlIGV4dGVybmFsIGxpbmsgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlbmRlckludGVybmFsTGlua30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySW50ZXJuYWxMaW5rUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBmb3IgdGhlIGludGVybmFsIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5VGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZW5kZXIgdGhlIGludGVybmFsIGxpbmsgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yQWJzdHJhY3RGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbmludGVyZmFjZSBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mb0NvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5jbGFzcyBFbWJlZEJ5RXh0ZW5zaW9uTWRQYXRjaENvbXBvbmVudCBleHRlbmRzIE1vbmtleUFyb3VuZENvbXBvbmVudCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVtYmVkQnlFeHRlbnNpb246IEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgIG1ldGhvZE5hbWU6ICdtZCcsXG4gICAgICBvYmo6IHRoaXMuZW1iZWRCeUV4dGVuc2lvbixcbiAgICAgIHBhdGNoSGFuZGxlcjogKHtcbiAgICAgICAgZmFsbGJhY2ssXG4gICAgICAgIG9yaWdpbmFsQXJnczogW2NvbnRleHRdXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnRleHQuZGlzcGxheU1vZGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm8gaW1wbGVtZW50cyBEb21FdmVudHNIYW5kbGVyc0luZm8ge1xuICBwdWJsaWMgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgaG92ZXJQb3BvdmVyKCk6IEhvdmVyUG9wb3ZlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9ob3ZlclBvcG92ZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IGhvdmVyUG9wb3Zlcihob3ZlclBvcG92ZXI6IEhvdmVyUG9wb3ZlciB8IG51bGwpIHtcbiAgICB0aGlzLl9ob3ZlclBvcG92ZXIgPSBob3ZlclBvcG92ZXI7XG4gICAgaWYgKGhvdmVyUG9wb3ZlciAmJiB0aGlzLnpJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBob3ZlclBvcG92ZXIuaG92ZXJFbC5zZXRDc3NTdHlsZXMoe1xuICAgICAgICB6SW5kZXg6IFN0cmluZyh0aGlzLnpJbmRleClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hvdmVyUG9wb3ZlcjogSG92ZXJQb3BvdmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSB6SW5kZXg/OiBudW1iZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm9Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBhdGggPSBwYXJhbXMucGF0aDtcbiAgICB0aGlzLmVsID0gcGFyYW1zLmVsO1xuXG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2FpdFVudGlsQ29ubmVjdGVkKHRoaXMuZWwpO1xuICAgICAgdGhpcy51cGRhdGVaSW5kZXgodGhpcy5lbCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVpJbmRleChlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnpJbmRleCA9IGdldFpJbmRleChlbCkgKyAxO1xuICB9XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBtYXJrZG93biBhbmQgZW1iZWRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bGwgcmVuZGVyLlxuICogQHJldHVybnMgVGhlIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bGwgcmVuZGVyIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZnVsbFJlbmRlcihwYXJhbXM6IEZ1bGxSZW5kZXJQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc291cmNlUGF0aCA9IHBhcmFtcy5zb3VyY2VQYXRoID8/ICcvJztcbiAgbGV0IHNob3VsZFVubG9hZENvbXBvbmVudCA9IGZhbHNlO1xuICBsZXQgY29tcG9uZW50OiBDb21wb25lbnQ7XG4gIGlmIChwYXJhbXMuY29tcG9uZW50KSB7XG4gICAgY29tcG9uZW50ID0gcGFyYW1zLmNvbXBvbmVudDtcbiAgfSBlbHNlIHtcbiAgICBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KCk7XG4gICAgY29tcG9uZW50LmxvYWQoKTtcbiAgICBzaG91bGRVbmxvYWRDb21wb25lbnQgPSB0cnVlO1xuICB9XG5cbiAgdXNpbmcgXyA9IGNvbXBvbmVudC5hZGRDaGlsZChuZXcgRW1iZWRCeUV4dGVuc2lvbk1kUGF0Y2hDb21wb25lbnQocGFyYW1zLmFwcC5lbWJlZFJlZ2lzdHJ5LmVtYmVkQnlFeHRlbnNpb24pKTtcblxuICBhd2FpdCBNYXJrZG93blJlbmRlcmVyLnJlbmRlcihwYXJhbXMuYXBwLCBwYXJhbXMubWFya2Rvd24sIHBhcmFtcy5lbCwgc291cmNlUGF0aCwgY29tcG9uZW50KTtcblxuICBpZiAoc2hvdWxkVW5sb2FkQ29tcG9uZW50KSB7XG4gICAgY29tcG9uZW50LnVubG9hZCgpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zaG91bGRSZWdpc3RlckxpbmtIYW5kbGVycykge1xuICAgIGF3YWl0IHJlZ2lzdGVyTGlua0hhbmRsZXJzKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxSZWdpc3RlckxpbmtIYW5kbGVyc1BhcmFtcz4oe1xuICAgICAgYXBwOiBwYXJhbXMuYXBwLFxuICAgICAgZWw6IHBhcmFtcy5lbCxcbiAgICAgIHNvdXJjZVBhdGg6IHBhcmFtcy5zb3VyY2VQYXRoXG4gICAgfSkpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgTWFya2Rvd24gdG8gSFRNTC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjb252ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIEhUTUwgc3RyaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFya2Rvd25Ub0h0bWwocGFyYW1zOiBNYXJrZG93blRvSHRtbFBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbWFya2Rvd24sXG4gICAgc291cmNlUGF0aFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KCk7XG4gIGNvbXBvbmVudC5sb2FkKCk7XG4gIGNvbnN0IHJlbmRlckRpdiA9IGNyZWF0ZURpdigpO1xuICBhd2FpdCBNYXJrZG93blJlbmRlcmVyLnJlbmRlcihhcHAsIG1hcmtkb3duLCByZW5kZXJEaXYsIHNvdXJjZVBhdGggPz8gJycsIGNvbXBvbmVudCk7XG4gIGNvbnN0IGh0bWwgPSByZW5kZXJEaXYuaW5uZXJIVE1MO1xuICBjb21wb25lbnQudW5sb2FkKCk7XG4gIHJldHVybiBodG1sO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBsaW5rIGhhbmRsZXJzIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlZ2lzdGVyaW5nIGxpbmsgaGFuZGxlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWdpc3RlckxpbmtIYW5kbGVycyhwYXJhbXM6IFJlZ2lzdGVyTGlua0hhbmRsZXJzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZWwsXG4gICAgc291cmNlUGF0aFxuICB9ID0gcGFyYW1zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBObyByYWNlIGNvbmRpdGlvbi5cbiAgZG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3RvciA/Pz0gYXdhaXQgZ2V0RG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3RvcihhcHApO1xuICBNYXJrZG93blByZXZpZXdSZW5kZXJlci5yZWdpc3RlckRvbUV2ZW50cyhcbiAgICBlbCxcbiAgICBuZXcgZG9tRXZlbnRzSGFuZGxlcnNDb25zdHJ1Y3RvcihcbiAgICAgIG5ldyBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mbyh7XG4gICAgICAgIGFwcCxcbiAgICAgICAgZWwsXG4gICAgICAgIHBhdGg6IHNvdXJjZVBhdGggPz8gJydcbiAgICAgIH0pXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYW4gZXh0ZXJuYWwgbGluay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbmRlcmluZyB0aGUgZXh0ZXJuYWwgbGluay5cbiAqIEByZXR1cm5zIFRoZSBIVE1MQW5jaG9yRWxlbWVudCBjb250YWluaW5nIHRoZSByZW5kZXJlZCBleHRlcm5hbCBsaW5rLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyRXh0ZXJuYWxMaW5rKHBhcmFtczogUmVuZGVyRXh0ZXJuYWxMaW5rUGFyYW1zKTogUHJvbWlzZTxIVE1MQW5jaG9yRWxlbWVudD4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIHVybFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBkaXNwbGF5VGV4dCA9IHBhcmFtcy5kaXNwbGF5VGV4dCA/PyB1cmw7XG4gIGNvbnN0IHdyYXBwZXJFbCA9IGNyZWF0ZVNwYW4oKTtcbiAgYXdhaXQgZnVsbFJlbmRlcih7XG4gICAgYXBwLFxuICAgIGVsOiB3cmFwcGVyRWwsXG4gICAgbWFya2Rvd246IGBbJHtkaXNwbGF5VGV4dH1dKCR7dXJsfSlgXG4gIH0pO1xuICBjb25zdCBhRWwgPSB3cmFwcGVyRWwuZmluZCgnYScpIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICBhd2FpdCByZWdpc3RlckxpbmtIYW5kbGVycyh7XG4gICAgYXBwLFxuICAgIGVsOiBhRWxcbiAgfSk7XG4gIHJldHVybiBhRWw7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBpbnRlcm5hbCBsaW5rLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBpbnRlcm5hbCBsaW5rLlxuICogQHJldHVybnMgVGhlIEhUTUxBbmNob3JFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHJlbmRlcmVkIGludGVybmFsIGxpbmsuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJJbnRlcm5hbExpbmsocGFyYW1zOiBSZW5kZXJJbnRlcm5hbExpbmtQYXJhbXMpOiBQcm9taXNlPEhUTUxBbmNob3JFbGVtZW50PiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgcGF0aE9yQWJzdHJhY3RGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aE9yQWJzdHJhY3RGaWxlIH0pO1xuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckFic3RyYWN0RmlsZSk7XG4gIGNvbnN0IGRpc3BsYXlUZXh0ID0gcGFyYW1zLmRpc3BsYXlUZXh0ID8/IHBhdGg7XG4gIGlmIChpc0ZvbGRlcihhYnN0cmFjdEZpbGUpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsKCdhJywgeyB0ZXh0OiBkaXNwbGF5VGV4dCB9LCAoYUVsKSA9PiB7XG4gICAgICBhRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhcHAuaW50ZXJuYWxQbHVnaW5zLmdldEVuYWJsZWRQbHVnaW5CeUlkKEludGVybmFsUGx1Z2luTmFtZS5GaWxlRXhwbG9yZXIpPy5yZXZlYWxJbkZvbGRlcihhYnN0cmFjdEZpbGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB3cmFwcGVyRWwgPSBjcmVhdGVTcGFuKCk7XG4gIGF3YWl0IGZ1bGxSZW5kZXIoe1xuICAgIGFwcCxcbiAgICBlbDogd3JhcHBlckVsLFxuICAgIG1hcmtkb3duOiBgW1ske3BhdGh9fCR7ZGlzcGxheVRleHR9XV1gXG4gIH0pO1xuICBjb25zdCBhRWwgPSB3cmFwcGVyRWwuZmluZCgnYScpIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICBhd2FpdCByZWdpc3RlckxpbmtIYW5kbGVycyh7XG4gICAgYXBwLFxuICAgIGVsOiBhRWxcbiAgfSk7XG4gIHJldHVybiBhRWw7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQSxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBSVAsU0FBUyx5QkFBeUI7QUFDbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1DQUFtQztBQUM1QyxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLHVDQUF1QztBQUNoRDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFJUCxJQUFJLCtCQUFvRTtBQTJIeEUsTUFBTSx5Q0FBeUMsc0JBQXNCO0FBQUEsRUFDNUQsWUFBNkIsa0JBQXVEO0FBQ3pGLFVBQU07QUFENEI7QUFBQSxFQUVwQztBQUFBLEVBRm9DO0FBQUEsRUFJcEIsU0FBZTtBQUM3QixTQUFLLG9CQUFvQjtBQUFBLE1BQ3ZCLFlBQVk7QUFB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
@@ -18,6 +18,19 @@ export interface GetBacklinksForFileSafeOptions extends RetryOptions {
18
18
  */
19
19
  readonly shouldShowTimeoutNotice?: boolean;
20
20
  }
21
+ /**
22
+ * Parameters for {@link getBacklinksForFileSafe}.
23
+ */
24
+ export interface GetBacklinksForFileSafeParams extends GetBacklinksForFileSafeOptions {
25
+ /**
26
+ * The Obsidian application instance.
27
+ */
28
+ readonly app: App;
29
+ /**
30
+ * The path or file object.
31
+ */
32
+ readonly pathOrFile: PathOrFile;
33
+ }
21
34
  /**
22
35
  * Wrapper for the getBacklinksForFile method that provides a safe overload.
23
36
  */
@@ -30,6 +43,61 @@ export interface GetBacklinksForFileSafeWrapper {
30
43
  */
31
44
  safe(pathOrFile: PathOrFile): Promise<CustomArrayDict<Reference>>;
32
45
  }
46
+ /**
47
+ * Parameters for {@link registerFileCacheForNonExistingFile}.
48
+ */
49
+ export interface RegisterFileCacheForNonExistingFileParams {
50
+ /**
51
+ * The Obsidian app instance.
52
+ */
53
+ readonly app: App;
54
+ /**
55
+ * The file cache to register.
56
+ */
57
+ readonly cache: CachedMetadata;
58
+ /**
59
+ * The path or file to register the file cache for.
60
+ */
61
+ readonly pathOrFile: PathOrFile;
62
+ }
63
+ /**
64
+ * Parameters for {@link tempRegisterFilesAndRunAsync}.
65
+ *
66
+ * @typeParam T - The return type of the function to run.
67
+ */
68
+ export interface TempRegisterFilesAndRunAsyncParams<T> {
69
+ /**
70
+ * The Obsidian app instance.
71
+ */
72
+ readonly app: App;
73
+ /**
74
+ * The files to temporarily register.
75
+ */
76
+ readonly files: TAbstractFile[];
77
+ /**
78
+ * The function to run.
79
+ */
80
+ fn(this: void): Promise<T>;
81
+ }
82
+ /**
83
+ * Parameters for {@link tempRegisterFilesAndRun}.
84
+ *
85
+ * @typeParam T - The return type of the function to run.
86
+ */
87
+ export interface TempRegisterFilesAndRunParams<T> {
88
+ /**
89
+ * The Obsidian app instance.
90
+ */
91
+ readonly app: App;
92
+ /**
93
+ * The files to temporarily register.
94
+ */
95
+ readonly files: TAbstractFile[];
96
+ /**
97
+ * The function to run.
98
+ */
99
+ fn(this: void): T;
100
+ }
33
101
  /**
34
102
  * Ensures that the metadata cache is ready for all files.
35
103
  *
@@ -56,12 +124,10 @@ export declare function getBacklinksForFileOrPath(app: App, pathOrFile: PathOrFi
56
124
  /**
57
125
  * Retrieves the backlinks for a file safely.
58
126
  *
59
- * @param app - The Obsidian application instance.
60
- * @param pathOrFile - The path or file object.
61
- * @param options - Other options.
127
+ * @param params - The parameters for retrieving the backlinks.
62
128
  * @returns A {@link Promise} that resolves to an array dictionary of backlinks.
63
129
  */
64
- export declare function getBacklinksForFileSafe(app: App, pathOrFile: PathOrFile, options?: GetBacklinksForFileSafeOptions): Promise<CustomArrayDict<Reference>>;
130
+ export declare function getBacklinksForFileSafe(params: GetBacklinksForFileSafeParams): Promise<CustomArrayDict<Reference>>;
65
131
  /**
66
132
  * Retrieves the cached metadata for a given file or path.
67
133
  *
@@ -90,11 +156,9 @@ export declare function parseMetadata(app: App, str: string): Promise<CachedMeta
90
156
  /**
91
157
  * Registers the file cache for a non-existing file.
92
158
  *
93
- * @param app - The Obsidian app instance.
94
- * @param pathOrFile - The path or file to register the file cache for.
95
- * @param cache - The file cache to register.
159
+ * @param params - The parameters for registering the file cache.
96
160
  */
97
- export declare function registerFileCacheForNonExistingFile(app: App, pathOrFile: PathOrFile, cache: CachedMetadata): void;
161
+ export declare function registerFileCacheForNonExistingFile(params: RegisterFileCacheForNonExistingFileParams): void;
98
162
  /**
99
163
  * Registers files in the Obsidian app.
100
164
  *
@@ -106,22 +170,18 @@ export declare function registerFiles(app: App, files: TAbstractFile[]): void;
106
170
  * Temporarily registers files and runs a function.
107
171
  *
108
172
  * @typeParam T - The type of the result of the function.
109
- * @param app - The Obsidian app instance.
110
- * @param files - The files to temporarily register.
111
- * @param fn - The function to run.
173
+ * @param params - The parameters for temporarily registering the files and running the function.
112
174
  * @returns The result of the function.
113
175
  */
114
- export declare function tempRegisterFilesAndRun<T>(app: App, files: TAbstractFile[], fn: () => T): T;
176
+ export declare function tempRegisterFilesAndRun<T>(params: TempRegisterFilesAndRunParams<T>): T;
115
177
  /**
116
178
  * Temporarily registers files and runs an async function.
117
179
  *
118
180
  * @typeParam T - The type of the result of the function.
119
- * @param app - The Obsidian app instance.
120
- * @param files - The files to temporarily register.
121
- * @param fn - The function to run.
181
+ * @param params - The parameters for temporarily registering the files and running the async function.
122
182
  * @returns The result of the function.
123
183
  */
124
- export declare function tempRegisterFilesAndRunAsync<T>(app: App, files: TAbstractFile[], fn: () => Promise<T>): Promise<T>;
184
+ export declare function tempRegisterFilesAndRunAsync<T>(params: TempRegisterFilesAndRunAsyncParams<T>): Promise<T>;
125
185
  /**
126
186
  * Unregisters the file cache for a non-existing file.
127
187
  *
@@ -29,6 +29,7 @@ import {
29
29
  } from "@obsidian-typings/obsidian-public-latest/implementations";
30
30
  import { getNestedPropertyValue } from "../object-utils.mjs";
31
31
  import { getObsidianDevUtilsState } from "../obsidian-dev-utils-state.mjs";
32
+ import { strictProxy } from "../strict-proxy.mjs";
32
33
  import { ensureNonNullable } from "../type-guards.mjs";
33
34
  import { retryWithTimeoutNotice } from "./async-with-notice.mjs";
34
35
  import {
@@ -84,10 +85,11 @@ function getAllLinks(cache) {
84
85
  return links;
85
86
  }
86
87
  function getBacklinksForFileOrPath(app, pathOrFile) {
87
- const file = getFile(app, pathOrFile, true);
88
- return tempRegisterFilesAndRun(app, [file], () => app.metadataCache.getBacklinksForFile(file));
88
+ const file = getFile({ app, pathOrFile, shouldIncludeNonExisting: true });
89
+ return tempRegisterFilesAndRun({ app, files: [file], fn: () => app.metadataCache.getBacklinksForFile(file) });
89
90
  }
90
- async function getBacklinksForFileSafe(app, pathOrFile, options = {}) {
91
+ async function getBacklinksForFileSafe(params) {
92
+ const { app, pathOrFile, ...options } = params;
91
93
  const safeOverload = app.metadataCache.getBacklinksForFile.safe;
92
94
  if (safeOverload) {
93
95
  return safeOverload(pathOrFile);
@@ -96,13 +98,13 @@ async function getBacklinksForFileSafe(app, pathOrFile, options = {}) {
96
98
  await retryWithTimeoutNotice({
97
99
  async operationFn(abortSignal) {
98
100
  abortSignal.throwIfAborted();
99
- const file = getFile(app, pathOrFile);
101
+ const file = getFile({ app, pathOrFile });
100
102
  await ensureMetadataCacheReady(app);
101
103
  abortSignal.throwIfAborted();
102
104
  backlinks = getBacklinksForFileOrPath(app, file);
103
105
  for (const notePath of backlinks.keys()) {
104
106
  abortSignal.throwIfAborted();
105
- const note = getFileOrNull(app, notePath);
107
+ const note = getFileOrNull({ app, pathOrFile: notePath });
106
108
  if (!note) {
107
109
  return false;
108
110
  }
@@ -140,13 +142,14 @@ async function getBacklinksForFileSafe(app, pathOrFile, options = {}) {
140
142
  return true;
141
143
  },
142
144
  operationName: t(($) => $.obsidianDevUtils.metadataCache.getBacklinksForFilePath, { filePath: getPath(app, pathOrFile) }),
145
+ pluginNoticeComponent: strictProxy({}),
143
146
  retryOptions: options,
144
147
  shouldShowTimeoutNotice: options.shouldShowTimeoutNotice ?? true
145
148
  });
146
149
  return backlinks;
147
150
  }
148
151
  async function getCacheSafe(app, fileOrPath) {
149
- const file = getFileOrNull(app, fileOrPath);
152
+ const file = getFileOrNull({ app, pathOrFile: fileOrPath });
150
153
  try {
151
154
  if (!file) {
152
155
  return null;
@@ -178,8 +181,9 @@ async function parseMetadata(app, str) {
178
181
  const buffer = encoder.encode(str).buffer;
179
182
  return await app.metadataCache.computeMetadataAsync(buffer) ?? {};
180
183
  }
181
- function registerFileCacheForNonExistingFile(app, pathOrFile, cache) {
182
- const file = getFile(app, pathOrFile, true);
184
+ function registerFileCacheForNonExistingFile(params) {
185
+ const { app, cache, pathOrFile } = params;
186
+ const file = getFile({ app, pathOrFile, shouldIncludeNonExisting: true });
183
187
  if (!file.deleted) {
184
188
  throw new Error("File is existing");
185
189
  }
@@ -201,11 +205,16 @@ function registerFiles(app, files) {
201
205
  if (isFile(file)) {
202
206
  app.metadataCache.uniqueFileLookup.add(file.name.toLowerCase(), file);
203
207
  }
204
- file = getFolder(app, parentFolderPath(file.path), true);
208
+ file = getFolder({
209
+ app,
210
+ pathOrFolder: parentFolderPath(file.path),
211
+ shouldIncludeNonExisting: true
212
+ });
205
213
  }
206
214
  }
207
215
  }
208
- function tempRegisterFilesAndRun(app, files, fn) {
216
+ function tempRegisterFilesAndRun(params) {
217
+ const { app, files, fn } = params;
209
218
  try {
210
219
  registerFiles(app, files);
211
220
  return fn();
@@ -213,7 +222,8 @@ function tempRegisterFilesAndRun(app, files, fn) {
213
222
  unregisterFiles(app, files);
214
223
  }
215
224
  }
216
- async function tempRegisterFilesAndRunAsync(app, files, fn) {
225
+ async function tempRegisterFilesAndRunAsync(params) {
226
+ const { app, files, fn } = params;
217
227
  try {
218
228
  registerFiles(app, files);
219
229
  return await fn();
@@ -222,7 +232,7 @@ async function tempRegisterFilesAndRunAsync(app, files, fn) {
222
232
  }
223
233
  }
224
234
  function unregisterFileCacheForNonExistingFile(app, pathOrFile) {
225
- const file = getFile(app, pathOrFile, true);
235
+ const file = getFile({ app, pathOrFile, shouldIncludeNonExisting: true });
226
236
  if (!file.deleted) {
227
237
  throw new Error("File is existing");
228
238
  }
@@ -243,7 +253,11 @@ function unregisterFiles(app, files) {
243
253
  app.metadataCache.uniqueFileLookup.remove(file.name.toLowerCase(), file);
244
254
  }
245
255
  }
246
- file = getFolder(app, parentFolderPath(file.path), true);
256
+ file = getFolder({
257
+ app,
258
+ pathOrFolder: parentFolderPath(file.path),
259
+ shouldIncludeNonExisting: true
260
+ });
247
261
  }
248
262
  }
249
263
  }
@@ -265,4 +279,4 @@ export {
265
279
  unregisterFileCacheForNonExistingFile,
266
280
  unregisterFiles
267
281
  };
268
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21ldGFkYXRhLWNhY2hlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbWV0YWRhdGEgY2FjaGUgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDdXN0b21BcnJheURpY3QgfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0JztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDYWNoZWRNZXRhZGF0YSxcbiAgUmVmZXJlbmNlLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgQ3VzdG9tQXJyYXlEaWN0SW1wbCxcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZSxcbiAgcGFyZW50Rm9sZGVyUGF0aFxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vYXN5bmMudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcblxuaW1wb3J0IHsgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSB9IGZyb20gJy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyByZXRyeVdpdGhUaW1lb3V0Tm90aWNlIH0gZnJvbSAnLi9hc3luYy13aXRoLW5vdGljZS50cyc7XG5pbXBvcnQge1xuICBnZXRGaWxlLFxuICBnZXRGaWxlT3JOdWxsLFxuICBnZXRGb2xkZXIsXG4gIGdldFBhdGgsXG4gIGlzRmlsZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyxcbiAgdG9Gcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzXG59IGZyb20gJy4vZnJvbnRtYXR0ZXItbGluay1jYWNoZS13aXRoLW9mZnNldHMudHMnO1xuaW1wb3J0IHsgcGFyc2VGcm9udG1hdHRlciB9IGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IHNvcnRSZWZlcmVuY2VzIH0gZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuaW1wb3J0IHtcbiAgcmVhZFNhZmUsXG4gIHNhdmVOb3RlXG59IGZyb20gJy4vdmF1bHQudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVPcHRpb25zIGV4dGVuZHMgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZvciB0aGUgZ2V0QmFja2xpbmtzRm9yRmlsZSBtZXRob2QgdGhhdCBwcm92aWRlcyBhIHNhZmUgb3ZlcmxvYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVXcmFwcGVyIHtcbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgc2FmZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IGRpY3Rpb25hcnkgb2YgYmFja2xpbmtzLlxuICAgKi9cbiAgc2FmZShwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTxDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPj47XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IHRoZSBtZXRhZGF0YSBjYWNoZSBpcyByZWFkeSBmb3IgYWxsIGZpbGVzLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBtZXRhZGF0YSBjYWNoZSBpcyByZWFkeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZU1ldGFkYXRhQ2FjaGVSZWFkeShhcHA6IEFwcCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGFwcC5tZXRhZGF0YUNhY2hlLm9uQ2xlYW5DYWNoZShyZXNvbHZlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaW5rcyBmcm9tIHRoZSBwcm92aWRlZCBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gY2FjaGUgLSBUaGUgY2FjaGVkIG1ldGFkYXRhLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVmZXJlbmNlIGNhY2hlcyByZXByZXNlbnRpbmcgdGhlIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsTGlua3MoY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogUmVmZXJlbmNlW10ge1xuICBsZXQgbGlua3M6IFJlZmVyZW5jZVtdID0gW107XG5cbiAgaWYgKGNhY2hlLmxpbmtzKSB7XG4gICAgbGlua3MucHVzaCguLi5jYWNoZS5saW5rcyk7XG4gIH1cblxuICBpZiAoY2FjaGUuZW1iZWRzKSB7XG4gICAgbGlua3MucHVzaCguLi5jYWNoZS5lbWJlZHMpO1xuICB9XG5cbiAgaWYgKGNhY2hlLmZyb250bWF0dGVyTGlua3MpIHtcbiAgICBsaW5rcy5wdXNoKC4uLmNhY2hlLmZyb250bWF0dGVyTGlua3MpO1xuICB9XG5cbiAgc29ydFJlZmVyZW5jZXMobGlua3MpO1xuXG4gIC8vIEJVRzogaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC90L2J1Zy1kdXBsaWNhdGVkLWxpbmtzLWluLW1ldGFkYXRhY2FjaGUtaW5zaWRlLWZvb3Rub3Rlcy84NTU1MVxuICBsaW5rcyA9IGxpbmtzLmZpbHRlcigobGluaywgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzTGluayA9IGVuc3VyZU5vbk51bGxhYmxlKGxpbmtzW2luZGV4IC0gMV0pO1xuXG4gICAgaWYgKGlzUmVmZXJlbmNlQ2FjaGUobGluaykgJiYgaXNSZWZlcmVuY2VDYWNoZShwcmV2aW91c0xpbmspKSB7XG4gICAgICByZXR1cm4gbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQgIT09IHByZXZpb3VzTGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUobGluaykgJiYgaXNGcm9udG1hdHRlckxpbmtDYWNoZShwcmV2aW91c0xpbmspKSB7XG4gICAgICBjb25zdCBsaW5rU3RhcnRPZmZzZXQgPSBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMobGluaykgPyBsaW5rLnN0YXJ0T2Zmc2V0IDogMDtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGlua1N0YXJ0T2Zmc2V0ID0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHByZXZpb3VzTGluaykgPyBwcmV2aW91c0xpbmsuc3RhcnRPZmZzZXQgOiAwO1xuICAgICAgcmV0dXJuIGxpbmsua2V5ICE9PSBwcmV2aW91c0xpbmsua2V5IHx8IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhsaW5rKSAhPT0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHByZXZpb3VzTGluaylcbiAgICAgICAgfHwgbGlua1N0YXJ0T2Zmc2V0ICE9PSBwcmV2aW91c0xpbmtTdGFydE9mZnNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGxpbmtzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgb3IgcGF0aC5cbiAqIE5PVEU6IFRoZSBmaWxlIG1heSBiZSBub24tZXhpc3RlbnQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvYmplY3QuXG4gKiBAcmV0dXJucyBUaGUgYmFja2xpbmtzIGZvciB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKGFwcCwgcGF0aE9yRmlsZSwgdHJ1ZSk7XG4gIHJldHVybiB0ZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1bihhcHAsIFtmaWxlXSwgKCkgPT4gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZShmaWxlKSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBiYWNrbGlua3MgZm9yIGEgZmlsZSBzYWZlbHkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvYmplY3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE90aGVyIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IGRpY3Rpb25hcnkgb2YgYmFja2xpbmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUoXG4gIGFwcDogQXBwLFxuICBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLFxuICBvcHRpb25zOiBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPj4ge1xuICBjb25zdCBzYWZlT3ZlcmxvYWQgPSAoYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZSBhcyBQYXJ0aWFsPEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlV3JhcHBlcj4pLnNhZmU7XG4gIGlmIChzYWZlT3ZlcmxvYWQpIHtcbiAgICByZXR1cm4gc2FmZU92ZXJsb2FkKHBhdGhPckZpbGUpO1xuICB9XG4gIGxldCBiYWNrbGlua3M6IEN1c3RvbUFycmF5RGljdDxSZWZlcmVuY2U+ID0gbmV3IEN1c3RvbUFycmF5RGljdEltcGw8UmVmZXJlbmNlPigpO1xuICBhd2FpdCByZXRyeVdpdGhUaW1lb3V0Tm90aWNlKHtcbiAgICBhc3luYyBvcGVyYXRpb25GbihhYm9ydFNpZ25hbCkge1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZpbGUgPSBnZXRGaWxlKGFwcCwgcGF0aE9yRmlsZSk7XG4gICAgICBhd2FpdCBlbnN1cmVNZXRhZGF0YUNhY2hlUmVhZHkoYXBwKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBiYWNrbGlua3MgPSBnZXRCYWNrbGlua3NGb3JGaWxlT3JQYXRoKGFwcCwgZmlsZSk7XG4gICAgICBmb3IgKGNvbnN0IG5vdGVQYXRoIG9mIGJhY2tsaW5rcy5rZXlzKCkpIHtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgY29uc3Qgbm90ZSA9IGdldEZpbGVPck51bGwoYXBwLCBub3RlUGF0aCk7XG4gICAgICAgIGlmICghbm90ZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHNhdmVOb3RlKGFwcCwgbm90ZSk7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRTYWZlKGFwcCwgbm90ZSk7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGlmICghY29udGVudCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXIoY29udGVudCk7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gYmFja2xpbmtzLmdldChub3RlUGF0aCk7XG4gICAgICAgIGlmICghbGlua3MpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICBsZXQgYWN0dWFsTGluazogc3RyaW5nO1xuICAgICAgICAgIGlmIChpc1JlZmVyZW5jZUNhY2hlKGxpbmspKSB7XG4gICAgICAgICAgICBhY3R1YWxMaW5rID0gY29udGVudC5zbGljZShsaW5rLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCwgbGluay5wb3NpdGlvbi5lbmQub2Zmc2V0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUobGluaykpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBsaW5rLmtleSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGlua1dpdGhPZmZzZXRzID0gdG9Gcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGxpbmspO1xuICAgICAgICAgICAgYWN0dWFsTGluayA9IHByb3BlcnR5VmFsdWUuc2xpY2UobGlua1dpdGhPZmZzZXRzLnN0YXJ0T2Zmc2V0LCBsaW5rV2l0aE9mZnNldHMuZW5kT2Zmc2V0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhY3R1YWxMaW5rICE9PSBsaW5rLm9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgb3BlcmF0aW9uTmFtZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLm1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZVBhdGgsIHsgZmlsZVBhdGg6IGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSB9KSxcbiAgICByZXRyeU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgc2hvdWxkU2hvd1RpbWVvdXROb3RpY2U6IG9wdGlvbnMuc2hvdWxkU2hvd1RpbWVvdXROb3RpY2UgPz8gdHJ1ZVxuICB9KTtcblxuICByZXR1cm4gYmFja2xpbmtzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY2FjaGVkIG1ldGFkYXRhIGZvciBhIGdpdmVuIGZpbGUgb3IgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlT3JQYXRoIC0gVGhlIGZpbGUgb3IgcGF0aCB0byByZXRyaWV2ZSB0aGUgbWV0YWRhdGEgZm9yLlxuICogQHJldHVybnMgVGhlIGNhY2hlZCBtZXRhZGF0YSBmb3IgdGhlIGZpbGUsIG9yIGBudWxsYCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVTYWZlKGFwcDogQXBwLCBmaWxlT3JQYXRoOiBQYXRoT3JGaWxlKTogUHJvbWlzZTxDYWNoZWRNZXRhZGF0YSB8IG51bGw+IHtcbiAgY29uc3QgZmlsZSA9IGdldEZpbGVPck51bGwoYXBwLCBmaWxlT3JQYXRoKTtcblxuICB0cnkge1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuZGVsZXRlZCkge1xuICAgICAgcmV0dXJuIGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcbiAgICB9XG5cbiAgICBhd2FpdCBzYXZlTm90ZShhcHAsIGZpbGUpO1xuXG4gICAgY29uc3QgZmlsZUNhY2hlRW50cnkgPSBhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGVbZmlsZS5wYXRoXTtcbiAgICBjb25zdCBpc1VwVG9EYXRlID0gZmlsZUNhY2hlRW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWVcbiAgICAgICYmIGZpbGVDYWNoZUVudHJ5LnNpemUgPT09IGZpbGUuc3RhdC5zaXplXG4gICAgICAmJiBhcHAubWV0YWRhdGFDYWNoZS5tZXRhZGF0YUNhY2hlW2ZpbGVDYWNoZUVudHJ5Lmhhc2hdO1xuICAgIGlmICghaXNVcFRvRGF0ZSkge1xuICAgICAgYXdhaXQgYXBwLm1ldGFkYXRhQ2FjaGUuY29tcHV0ZUZpbGVNZXRhZGF0YUFzeW5jKGZpbGUpO1xuICAgICAgYXdhaXQgZW5zdXJlTWV0YWRhdGFDYWNoZVJlYWR5KGFwcCk7XG4gICAgfVxuICAgIHJldHVybiBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFmaWxlIHx8IGZpbGUuZGVsZXRlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZyb250IG1hdHRlciBmcm9tIHRoZSBtZXRhZGF0YSBjYWNoZSBzYWZlbHkuXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byByZXRyaWV2ZSB0aGUgZnJvbnQgbWF0dGVyIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgY29tYmluZWQgZnJvbnQgbWF0dGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RnJvbnRtYXR0ZXJTYWZlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4oYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+PiB7XG4gIGNvbnN0IGNhY2hlID0gYXdhaXQgZ2V0Q2FjaGVTYWZlKGFwcCwgcGF0aE9yRmlsZSk7XG4gIHJldHVybiAoY2FjaGU/LmZyb250bWF0dGVyID8/IHt9KSBhcyBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPjtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIG1ldGFkYXRhIGZvciBhIGdpdmVuIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIHBhcnNlIHRoZSBtZXRhZGF0YSBmb3IuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIG1ldGFkYXRhLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VNZXRhZGF0YShhcHA6IEFwcCwgc3RyOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlZE1ldGFkYXRhPiB7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgY29uc3QgYnVmZmVyID0gZW5jb2Rlci5lbmNvZGUoc3RyKS5idWZmZXI7XG4gIHJldHVybiBhd2FpdCBhcHAubWV0YWRhdGFDYWNoZS5jb21wdXRlTWV0YWRhdGFBc3luYyhidWZmZXIpID8/IHt9O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSBmb3IgYSBub24tZXhpc3RpbmcgZmlsZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byByZWdpc3RlciB0aGUgZmlsZSBjYWNoZSBmb3IuXG4gKiBAcGFyYW0gY2FjaGUgLSBUaGUgZmlsZSBjYWNoZSB0byByZWdpc3Rlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBjYWNoZTogQ2FjaGVkTWV0YWRhdGEpOiB2b2lkIHtcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoYXBwLCBwYXRoT3JGaWxlLCB0cnVlKTtcbiAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgaXMgZXhpc3RpbmcnKTtcbiAgfVxuXG4gIGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVDYWNoZVtmaWxlLnBhdGhdID0ge1xuICAgIGhhc2g6IGZpbGUucGF0aCxcbiAgICBtdGltZTogMCxcbiAgICBzaXplOiAwXG4gIH07XG5cbiAgYXBwLm1ldGFkYXRhQ2FjaGUubWV0YWRhdGFDYWNoZVtmaWxlLnBhdGhdID0gY2FjaGU7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGZpbGVzIGluIHRoZSBPYnNpZGlhbiBhcHAuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMgdG8gcmVnaXN0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckZpbGVzKGFwcDogQXBwLCBmaWxlczogVEFic3RyYWN0RmlsZVtdKTogdm9pZCB7XG4gIGNvbnN0IHJlZ2lzdGVyZWRGaWxlc0NvdW50cyA9IGdldFJlZ2lzdGVyZWRGaWxlc0NvdW50cygpO1xuXG4gIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICB3aGlsZSAoZmlsZS5kZWxldGVkKSB7XG4gICAgICBsZXQgY291bnQgPSByZWdpc3RlcmVkRmlsZXNDb3VudHMuZ2V0KGZpbGUucGF0aCkgPz8gMDtcbiAgICAgIGNvdW50Kys7XG4gICAgICByZWdpc3RlcmVkRmlsZXNDb3VudHMuc2V0KGZpbGUucGF0aCwgY291bnQpO1xuXG4gICAgICBhcHAudmF1bHQuZmlsZU1hcFtmaWxlLnBhdGhdID0gZmlsZTtcblxuICAgICAgaWYgKGlzRmlsZShmaWxlKSkge1xuICAgICAgICBhcHAubWV0YWRhdGFDYWNoZS51bmlxdWVGaWxlTG9va3VwLmFkZChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgZmlsZSk7XG4gICAgICB9XG5cbiAgICAgIGZpbGUgPSBnZXRGb2xkZXIoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKGZpbGUucGF0aCksIHRydWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRlbXBvcmFyaWx5IHJlZ2lzdGVycyBmaWxlcyBhbmQgcnVucyBhIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMgdG8gdGVtcG9yYXJpbHkgcmVnaXN0ZXIuXG4gKiBAcGFyYW0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gcnVuLlxuICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1bjxUPihhcHA6IEFwcCwgZmlsZXM6IFRBYnN0cmFjdEZpbGVbXSwgZm46ICgpID0+IFQpOiBUIHtcbiAgdHJ5IHtcbiAgICByZWdpc3RlckZpbGVzKGFwcCwgZmlsZXMpO1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIHVucmVnaXN0ZXJGaWxlcyhhcHAsIGZpbGVzKTtcbiAgfVxufVxuXG4vKipcbiAqIFRlbXBvcmFyaWx5IHJlZ2lzdGVycyBmaWxlcyBhbmQgcnVucyBhbiBhc3luYyBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGVzIC0gVGhlIGZpbGVzIHRvIHRlbXBvcmFyaWx5IHJlZ2lzdGVyLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIHJ1bi5cbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVtcFJlZ2lzdGVyRmlsZXNBbmRSdW5Bc3luYzxUPihhcHA6IEFwcCwgZmlsZXM6IFRBYnN0cmFjdEZpbGVbXSwgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgdHJ5IHtcbiAgICByZWdpc3RlckZpbGVzKGFwcCwgZmlsZXMpO1xuICAgIHJldHVybiBhd2FpdCBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIHVucmVnaXN0ZXJGaWxlcyhhcHAsIGZpbGVzKTtcbiAgfVxufVxuXG4vKipcbiAqIFVucmVnaXN0ZXJzIHRoZSBmaWxlIGNhY2hlIGZvciBhIG5vbi1leGlzdGluZyBmaWxlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHVucmVnaXN0ZXIgdGhlIGZpbGUgY2FjaGUgZm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IHZvaWQge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZShhcHAsIHBhdGhPckZpbGUsIHRydWUpO1xuICBpZiAoIWZpbGUuZGVsZXRlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmlsZSBpcyBleGlzdGluZycpO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgZGVsZXRlIGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVDYWNoZVtmaWxlLnBhdGhdO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gIGRlbGV0ZSBhcHAubWV0YWRhdGFDYWNoZS5tZXRhZGF0YUNhY2hlW2ZpbGUucGF0aF07XG59XG5cbi8qKlxuICogVW5yZWdpc3RlcnMgZmlsZXMgZnJvbSB0aGUgT2JzaWRpYW4gYXBwLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGVzIC0gVGhlIGZpbGVzIHRvIHVucmVnaXN0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyRmlsZXMoYXBwOiBBcHAsIGZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiB2b2lkIHtcbiAgY29uc3QgcmVnaXN0ZXJlZEZpbGVzQ291bnRzID0gZ2V0UmVnaXN0ZXJlZEZpbGVzQ291bnRzKCk7XG5cbiAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgIHdoaWxlIChmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGxldCBjb3VudCA9IHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5nZXQoZmlsZS5wYXRoKSA/PyAxO1xuICAgICAgY291bnQtLTtcbiAgICAgIHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5zZXQoZmlsZS5wYXRoLCBjb3VudCk7XG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgcmVnaXN0ZXJlZEZpbGVzQ291bnRzLmRlbGV0ZShmaWxlLnBhdGgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gICAgICAgIGRlbGV0ZSBhcHAudmF1bHQuZmlsZU1hcFtmaWxlLnBhdGhdO1xuXG4gICAgICAgIGlmIChpc0ZpbGUoZmlsZSkpIHtcbiAgICAgICAgICBhcHAubWV0YWRhdGFDYWNoZS51bmlxdWVGaWxlTG9va3VwLnJlbW92ZShmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZmlsZSA9IGdldEZvbGRlcihhcHAsIHBhcmVudEZvbGRlclBhdGgoZmlsZS5wYXRoKSwgdHJ1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRGaWxlc0NvdW50cygpOiBNYXA8c3RyaW5nLCBudW1iZXI+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSgncmVnaXN0ZXJlZEZpbGVzQ291bnRzJywgbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSkudmFsdWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFNUCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLGdDQUFnQztBQUN6QyxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLDhCQUE4QjtBQUN2QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyxTQUFTO0FBQ2xCLFNBQVMsc0JBQXNCO0FBQy9CO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBK0JQLGVBQXNCLHlCQUF5QixLQUF5QjtBQUN0RSxRQUFNLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDN0IsUUFBSSxjQUFjLGFBQWEsT0FBTztBQUFBLEVBQ3hDLENBQUM7QUFDSDtBQVFPLFNBQVMsWUFBWSxPQUFvQztBQUM5RCxNQUFJLFFBQXFCLENBQUM7QUFFMUIsTUFBSSxNQUFNLE9BQU87QUFDZixVQUFNLEtBQUssR0FBRyxNQUFNLEtBQUs7QUFBQSxFQUMzQjtBQUVBLE1BQUksTUFBTSxRQUFRO0FBQ2hCLFVBQU0sS0FBSyxHQUFHLE1BQU0sTUFBTTtBQUFBLEVBQzVCO0FBRUEsTUFBSSxNQUFNLGtCQUFrQjtBQUMxQixVQUFNLEtBQUssR0FBRyxNQUFNLGdCQUFnQjtBQUFBLEVBQ3RDO0FBRUEsaUJBQWUsS0FBSztBQUdwQixVQUFRLE1BQU0sT0FBTyxDQUFDLE1BQU0sVUFBVTtBQUNwQyxRQUFJLFVBQVUsR0FBRztBQUNmLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxlQUFlLGtCQUFrQixNQUFN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
282
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21ldGFkYXRhLWNhY2hlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbWV0YWRhdGEgY2FjaGUgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDdXN0b21BcnJheURpY3QgfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0JztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDYWNoZWRNZXRhZGF0YSxcbiAgUmVmZXJlbmNlLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgQ3VzdG9tQXJyYXlEaWN0SW1wbCxcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZSxcbiAgcGFyZW50Rm9sZGVyUGF0aFxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vYXN5bmMudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcblxuaW1wb3J0IHsgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSB9IGZyb20gJy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHsgc3RyaWN0UHJveHkgfSBmcm9tICcuLi9zdHJpY3QtcHJveHkudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyByZXRyeVdpdGhUaW1lb3V0Tm90aWNlIH0gZnJvbSAnLi9hc3luYy13aXRoLW5vdGljZS50cyc7XG5pbXBvcnQge1xuICBnZXRGaWxlLFxuICBnZXRGaWxlT3JOdWxsLFxuICBnZXRGb2xkZXIsXG4gIGdldFBhdGgsXG4gIGlzRmlsZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyxcbiAgdG9Gcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzXG59IGZyb20gJy4vZnJvbnRtYXR0ZXItbGluay1jYWNoZS13aXRoLW9mZnNldHMudHMnO1xuaW1wb3J0IHsgcGFyc2VGcm9udG1hdHRlciB9IGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IHNvcnRSZWZlcmVuY2VzIH0gZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuaW1wb3J0IHtcbiAgcmVhZFNhZmUsXG4gIHNhdmVOb3RlXG59IGZyb20gJy4vdmF1bHQudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVPcHRpb25zIGV4dGVuZHMgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlUGFyYW1zIGV4dGVuZHMgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogV3JhcHBlciBmb3IgdGhlIGdldEJhY2tsaW5rc0ZvckZpbGUgbWV0aG9kIHRoYXQgcHJvdmlkZXMgYSBzYWZlIG92ZXJsb2FkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlV3JhcHBlciB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9iamVjdC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBkaWN0aW9uYXJ5IG9mIGJhY2tsaW5rcy5cbiAgICovXG4gIHNhZmUocGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IFByb21pc2U8Q3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4+O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSBjYWNoZSB0byByZWdpc3Rlci5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlOiBDYWNoZWRNZXRhZGF0YTtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byByZWdpc3RlciB0aGUgZmlsZSBjYWNoZSBmb3IuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0ZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1bkFzeW5jfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRvIHJ1bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1bkFzeW5jUGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGZpbGVzIHRvIHRlbXBvcmFyaWx5IHJlZ2lzdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM6IFRBYnN0cmFjdEZpbGVbXTtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIHJ1bi5cbiAgICovXG4gIGZuKHRoaXM6IHZvaWQpOiBQcm9taXNlPFQ+O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0ZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1bn0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiB0byBydW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcFJlZ2lzdGVyRmlsZXNBbmRSdW5QYXJhbXM8VD4ge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZXMgdG8gdGVtcG9yYXJpbHkgcmVnaXN0ZXIuXG4gICAqL1xuICByZWFkb25seSBmaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gcnVuLlxuICAgKi9cbiAgZm4odGhpczogdm9pZCk6IFQ7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IHRoZSBtZXRhZGF0YSBjYWNoZSBpcyByZWFkeSBmb3IgYWxsIGZpbGVzLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBtZXRhZGF0YSBjYWNoZSBpcyByZWFkeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZU1ldGFkYXRhQ2FjaGVSZWFkeShhcHA6IEFwcCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGFwcC5tZXRhZGF0YUNhY2hlLm9uQ2xlYW5DYWNoZShyZXNvbHZlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaW5rcyBmcm9tIHRoZSBwcm92aWRlZCBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gY2FjaGUgLSBUaGUgY2FjaGVkIG1ldGFkYXRhLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVmZXJlbmNlIGNhY2hlcyByZXByZXNlbnRpbmcgdGhlIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsTGlua3MoY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogUmVmZXJlbmNlW10ge1xuICBsZXQgbGlua3M6IFJlZmVyZW5jZVtdID0gW107XG5cbiAgaWYgKGNhY2hlLmxpbmtzKSB7XG4gICAgbGlua3MucHVzaCguLi5jYWNoZS5saW5rcyk7XG4gIH1cblxuICBpZiAoY2FjaGUuZW1iZWRzKSB7XG4gICAgbGlua3MucHVzaCguLi5jYWNoZS5lbWJlZHMpO1xuICB9XG5cbiAgaWYgKGNhY2hlLmZyb250bWF0dGVyTGlua3MpIHtcbiAgICBsaW5rcy5wdXNoKC4uLmNhY2hlLmZyb250bWF0dGVyTGlua3MpO1xuICB9XG5cbiAgc29ydFJlZmVyZW5jZXMobGlua3MpO1xuXG4gIC8vIEJVRzogaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC90L2J1Zy1kdXBsaWNhdGVkLWxpbmtzLWluLW1ldGFkYXRhY2FjaGUtaW5zaWRlLWZvb3Rub3Rlcy84NTU1MVxuICBsaW5rcyA9IGxpbmtzLmZpbHRlcigobGluaywgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzTGluayA9IGVuc3VyZU5vbk51bGxhYmxlKGxpbmtzW2luZGV4IC0gMV0pO1xuXG4gICAgaWYgKGlzUmVmZXJlbmNlQ2FjaGUobGluaykgJiYgaXNSZWZlcmVuY2VDYWNoZShwcmV2aW91c0xpbmspKSB7XG4gICAgICByZXR1cm4gbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQgIT09IHByZXZpb3VzTGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUobGluaykgJiYgaXNGcm9udG1hdHRlckxpbmtDYWNoZShwcmV2aW91c0xpbmspKSB7XG4gICAgICBjb25zdCBsaW5rU3RhcnRPZmZzZXQgPSBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMobGluaykgPyBsaW5rLnN0YXJ0T2Zmc2V0IDogMDtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGlua1N0YXJ0T2Zmc2V0ID0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHByZXZpb3VzTGluaykgPyBwcmV2aW91c0xpbmsuc3RhcnRPZmZzZXQgOiAwO1xuICAgICAgcmV0dXJuIGxpbmsua2V5ICE9PSBwcmV2aW91c0xpbmsua2V5IHx8IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhsaW5rKSAhPT0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHByZXZpb3VzTGluaylcbiAgICAgICAgfHwgbGlua1N0YXJ0T2Zmc2V0ICE9PSBwcmV2aW91c0xpbmtTdGFydE9mZnNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGxpbmtzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgb3IgcGF0aC5cbiAqIE5PVEU6IFRoZSBmaWxlIG1heSBiZSBub24tZXhpc3RlbnQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvYmplY3QuXG4gKiBAcmV0dXJucyBUaGUgYmFja2xpbmtzIGZvciB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlLCBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWUgfSk7XG4gIHJldHVybiB0ZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1bih7IGFwcCwgZmlsZXM6IFtmaWxlXSwgZm46ICgpID0+IGFwcC5tZXRhZGF0YUNhY2hlLmdldEJhY2tsaW5rc0ZvckZpbGUoZmlsZSkgfSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBiYWNrbGlua3MgZm9yIGEgZmlsZSBzYWZlbHkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHRoZSBiYWNrbGlua3MuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IGRpY3Rpb25hcnkgb2YgYmFja2xpbmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUocGFyYW1zOiBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZVBhcmFtcyk6IFByb21pc2U8Q3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4+IHtcbiAgY29uc3QgeyBhcHAsIHBhdGhPckZpbGUsIC4uLm9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3Qgc2FmZU92ZXJsb2FkID0gKGFwcC5tZXRhZGF0YUNhY2hlLmdldEJhY2tsaW5rc0ZvckZpbGUgYXMgUGFydGlhbDxHZXRCYWNrbGlua3NGb3JGaWxlU2FmZVdyYXBwZXI+KS5zYWZlO1xuICBpZiAoc2FmZU92ZXJsb2FkKSB7XG4gICAgcmV0dXJuIHNhZmVPdmVybG9hZChwYXRoT3JGaWxlKTtcbiAgfVxuICBsZXQgYmFja2xpbmtzOiBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiA9IG5ldyBDdXN0b21BcnJheURpY3RJbXBsPFJlZmVyZW5jZT4oKTtcbiAgYXdhaXQgcmV0cnlXaXRoVGltZW91dE5vdGljZSh7XG4gICAgYXN5bmMgb3BlcmF0aW9uRm4oYWJvcnRTaWduYWwpIHtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICAgIGF3YWl0IGVuc3VyZU1ldGFkYXRhQ2FjaGVSZWFkeShhcHApO1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGJhY2tsaW5rcyA9IGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgoYXBwLCBmaWxlKTtcbiAgICAgIGZvciAoY29uc3Qgbm90ZVBhdGggb2YgYmFja2xpbmtzLmtleXMoKSkge1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBjb25zdCBub3RlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogbm90ZVBhdGggfSk7XG4gICAgICAgIGlmICghbm90ZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHNhdmVOb3RlKGFwcCwgbm90ZSk7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRTYWZlKGFwcCwgbm90ZSk7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGlmICghY29udGVudCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXIoY29udGVudCk7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gYmFja2xpbmtzLmdldChub3RlUGF0aCk7XG4gICAgICAgIGlmICghbGlua3MpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICBsZXQgYWN0dWFsTGluazogc3RyaW5nO1xuICAgICAgICAgIGlmIChpc1JlZmVyZW5jZUNhY2hlKGxpbmspKSB7XG4gICAgICAgICAgICBhY3R1YWxMaW5rID0gY29udGVudC5zbGljZShsaW5rLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCwgbGluay5wb3NpdGlvbi5lbmQub2Zmc2V0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUobGluaykpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBsaW5rLmtleSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGlua1dpdGhPZmZzZXRzID0gdG9Gcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGxpbmspO1xuICAgICAgICAgICAgYWN0dWFsTGluayA9IHByb3BlcnR5VmFsdWUuc2xpY2UobGlua1dpdGhPZmZzZXRzLnN0YXJ0T2Zmc2V0LCBsaW5rV2l0aE9mZnNldHMuZW5kT2Zmc2V0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhY3R1YWxMaW5rICE9PSBsaW5rLm9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgb3BlcmF0aW9uTmFtZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLm1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZVBhdGgsIHsgZmlsZVBhdGg6IGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSB9KSxcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IHN0cmljdFByb3h5PFBsdWdpbk5vdGljZUNvbXBvbmVudD4oe30pLFxuICAgIHJldHJ5T3B0aW9uczogb3B0aW9ucyxcbiAgICBzaG91bGRTaG93VGltZW91dE5vdGljZTogb3B0aW9ucy5zaG91bGRTaG93VGltZW91dE5vdGljZSA/PyB0cnVlXG4gIH0pO1xuXG4gIHJldHVybiBiYWNrbGlua3M7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjYWNoZWQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gZmlsZSBvciBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGVPclBhdGggLSBUaGUgZmlsZSBvciBwYXRoIHRvIHJldHJpZXZlIHRoZSBtZXRhZGF0YSBmb3IuXG4gKiBAcmV0dXJucyBUaGUgY2FjaGVkIG1ldGFkYXRhIGZvciB0aGUgZmlsZSwgb3IgYG51bGxgIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDYWNoZVNhZmUoYXBwOiBBcHAsIGZpbGVPclBhdGg6IFBhdGhPckZpbGUpOiBQcm9taXNlPENhY2hlZE1ldGFkYXRhIHwgbnVsbD4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogZmlsZU9yUGF0aCB9KTtcblxuICB0cnkge1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuZGVsZXRlZCkge1xuICAgICAgcmV0dXJuIGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcbiAgICB9XG5cbiAgICBhd2FpdCBzYXZlTm90ZShhcHAsIGZpbGUpO1xuXG4gICAgY29uc3QgZmlsZUNhY2hlRW50cnkgPSBhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGVbZmlsZS5wYXRoXTtcbiAgICBjb25zdCBpc1VwVG9EYXRlID0gZmlsZUNhY2hlRW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWVcbiAgICAgICYmIGZpbGVDYWNoZUVudHJ5LnNpemUgPT09IGZpbGUuc3RhdC5zaXplXG4gICAgICAmJiBhcHAubWV0YWRhdGFDYWNoZS5tZXRhZGF0YUNhY2hlW2ZpbGVDYWNoZUVudHJ5Lmhhc2hdO1xuICAgIGlmICghaXNVcFRvRGF0ZSkge1xuICAgICAgYXdhaXQgYXBwLm1ldGFkYXRhQ2FjaGUuY29tcHV0ZUZpbGVNZXRhZGF0YUFzeW5jKGZpbGUpO1xuICAgICAgYXdhaXQgZW5zdXJlTWV0YWRhdGFDYWNoZVJlYWR5KGFwcCk7XG4gICAgfVxuICAgIHJldHVybiBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFmaWxlIHx8IGZpbGUuZGVsZXRlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZyb250IG1hdHRlciBmcm9tIHRoZSBtZXRhZGF0YSBjYWNoZSBzYWZlbHkuXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byByZXRyaWV2ZSB0aGUgZnJvbnQgbWF0dGVyIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgY29tYmluZWQgZnJvbnQgbWF0dGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RnJvbnRtYXR0ZXJTYWZlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4oYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+PiB7XG4gIGNvbnN0IGNhY2hlID0gYXdhaXQgZ2V0Q2FjaGVTYWZlKGFwcCwgcGF0aE9yRmlsZSk7XG4gIHJldHVybiAoY2FjaGU/LmZyb250bWF0dGVyID8/IHt9KSBhcyBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPjtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIG1ldGFkYXRhIGZvciBhIGdpdmVuIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIHBhcnNlIHRoZSBtZXRhZGF0YSBmb3IuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIG1ldGFkYXRhLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VNZXRhZGF0YShhcHA6IEFwcCwgc3RyOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlZE1ldGFkYXRhPiB7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgY29uc3QgYnVmZmVyID0gZW5jb2Rlci5lbmNvZGUoc3RyKS5idWZmZXI7XG4gIHJldHVybiBhd2FpdCBhcHAubWV0YWRhdGFDYWNoZS5jb21wdXRlTWV0YWRhdGFBc3luYyhidWZmZXIpID8/IHt9O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSBmb3IgYSBub24tZXhpc3RpbmcgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlZ2lzdGVyaW5nIHRoZSBmaWxlIGNhY2hlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGUocGFyYW1zOiBSZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGFwcCwgY2FjaGUsIHBhdGhPckZpbGUgfSA9IHBhcmFtcztcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcbiAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgaXMgZXhpc3RpbmcnKTtcbiAgfVxuXG4gIGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVDYWNoZVtmaWxlLnBhdGhdID0ge1xuICAgIGhhc2g6IGZpbGUucGF0aCxcbiAgICBtdGltZTogMCxcbiAgICBzaXplOiAwXG4gIH07XG5cbiAgYXBwLm1ldGFkYXRhQ2FjaGUubWV0YWRhdGFDYWNoZVtmaWxlLnBhdGhdID0gY2FjaGU7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGZpbGVzIGluIHRoZSBPYnNpZGlhbiBhcHAuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMgdG8gcmVnaXN0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckZpbGVzKGFwcDogQXBwLCBmaWxlczogVEFic3RyYWN0RmlsZVtdKTogdm9pZCB7XG4gIGNvbnN0IHJlZ2lzdGVyZWRGaWxlc0NvdW50cyA9IGdldFJlZ2lzdGVyZWRGaWxlc0NvdW50cygpO1xuXG4gIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICB3aGlsZSAoZmlsZS5kZWxldGVkKSB7XG4gICAgICBsZXQgY291bnQgPSByZWdpc3RlcmVkRmlsZXNDb3VudHMuZ2V0KGZpbGUucGF0aCkgPz8gMDtcbiAgICAgIGNvdW50Kys7XG4gICAgICByZWdpc3RlcmVkRmlsZXNDb3VudHMuc2V0KGZpbGUucGF0aCwgY291bnQpO1xuXG4gICAgICBhcHAudmF1bHQuZmlsZU1hcFtmaWxlLnBhdGhdID0gZmlsZTtcblxuICAgICAgaWYgKGlzRmlsZShmaWxlKSkge1xuICAgICAgICBhcHAubWV0YWRhdGFDYWNoZS51bmlxdWVGaWxlTG9va3VwLmFkZChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgZmlsZSk7XG4gICAgICB9XG5cbiAgICAgIGZpbGUgPSBnZXRGb2xkZXIoe1xuICAgICAgICBhcHAsXG4gICAgICAgIHBhdGhPckZvbGRlcjogcGFyZW50Rm9sZGVyUGF0aChmaWxlLnBhdGgpLFxuICAgICAgICBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRlbXBvcmFyaWx5IHJlZ2lzdGVycyBmaWxlcyBhbmQgcnVucyBhIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0ZW1wb3JhcmlseSByZWdpc3RlcmluZyB0aGUgZmlsZXMgYW5kIHJ1bm5pbmcgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1bjxUPihwYXJhbXM6IFRlbXBSZWdpc3RlckZpbGVzQW5kUnVuUGFyYW1zPFQ+KTogVCB7XG4gIGNvbnN0IHsgYXBwLCBmaWxlcywgZm4gfSA9IHBhcmFtcztcbiAgdHJ5IHtcbiAgICByZWdpc3RlckZpbGVzKGFwcCwgZmlsZXMpO1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIHVucmVnaXN0ZXJGaWxlcyhhcHAsIGZpbGVzKTtcbiAgfVxufVxuXG4vKipcbiAqIFRlbXBvcmFyaWx5IHJlZ2lzdGVycyBmaWxlcyBhbmQgcnVucyBhbiBhc3luYyBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGVtcG9yYXJpbHkgcmVnaXN0ZXJpbmcgdGhlIGZpbGVzIGFuZCBydW5uaW5nIHRoZSBhc3luYyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVtcFJlZ2lzdGVyRmlsZXNBbmRSdW5Bc3luYzxUPihwYXJhbXM6IFRlbXBSZWdpc3RlckZpbGVzQW5kUnVuQXN5bmNQYXJhbXM8VD4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgeyBhcHAsIGZpbGVzLCBmbiB9ID0gcGFyYW1zO1xuICB0cnkge1xuICAgIHJlZ2lzdGVyRmlsZXMoYXBwLCBmaWxlcyk7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgdW5yZWdpc3RlckZpbGVzKGFwcCwgZmlsZXMpO1xuICB9XG59XG5cbi8qKlxuICogVW5yZWdpc3RlcnMgdGhlIGZpbGUgY2FjaGUgZm9yIGEgbm9uLWV4aXN0aW5nIGZpbGUuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gdW5yZWdpc3RlciB0aGUgZmlsZSBjYWNoZSBmb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlLCBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWUgfSk7XG4gIGlmICghZmlsZS5kZWxldGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlIGlzIGV4aXN0aW5nJyk7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICBkZWxldGUgYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZUNhY2hlW2ZpbGUucGF0aF07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgZGVsZXRlIGFwcC5tZXRhZGF0YUNhY2hlLm1ldGFkYXRhQ2FjaGVbZmlsZS5wYXRoXTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVycyBmaWxlcyBmcm9tIHRoZSBPYnNpZGlhbiBhcHAuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMgdG8gdW5yZWdpc3Rlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWxlcyhhcHA6IEFwcCwgZmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IHZvaWQge1xuICBjb25zdCByZWdpc3RlcmVkRmlsZXNDb3VudHMgPSBnZXRSZWdpc3RlcmVkRmlsZXNDb3VudHMoKTtcblxuICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgd2hpbGUgKGZpbGUuZGVsZXRlZCkge1xuICAgICAgbGV0IGNvdW50ID0gcmVnaXN0ZXJlZEZpbGVzQ291bnRzLmdldChmaWxlLnBhdGgpID8/IDE7XG4gICAgICBjb3VudC0tO1xuICAgICAgcmVnaXN0ZXJlZEZpbGVzQ291bnRzLnNldChmaWxlLnBhdGgsIGNvdW50KTtcbiAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICByZWdpc3RlcmVkRmlsZXNDb3VudHMuZGVsZXRlKGZpbGUucGF0aCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgICAgICAgZGVsZXRlIGFwcC52YXVsdC5maWxlTWFwW2ZpbGUucGF0aF07XG5cbiAgICAgICAgaWYgKGlzRmlsZShmaWxlKSkge1xuICAgICAgICAgIGFwcC5tZXRhZGF0YUNhY2hlLnVuaXF1ZUZpbGVMb29rdXAucmVtb3ZlKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLCBmaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmaWxlID0gZ2V0Rm9sZGVyKHtcbiAgICAgICAgYXBwLFxuICAgICAgICBwYXRoT3JGb2xkZXI6IHBhcmVudEZvbGRlclBhdGgoZmlsZS5wYXRoKSxcbiAgICAgICAgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZEZpbGVzQ291bnRzKCk6IE1hcDxzdHJpbmcsIG51bWJlcj4ge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKCdyZWdpc3RlcmVkRmlsZXNDb3VudHMnLCBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpKS52YWx1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQU9QLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsOEJBQThCO0FBQ3ZDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLFNBQVM7QUFDbEIsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUE4R1AsZUFBc0IseUJBQXlCLEtBQXlCO0FBQ3RFLFFBQU0sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM3QixRQUFJLGNBQWMsYUFBYSxPQUFPO0FBQUEsRUFDeEMsQ0FBQztBQUNIO0FBUU8sU0FBUyxZQUFZLE9BQW9DO0FBQzlELE1BQUksUUFBcUIsQ0FBQztBQUUxQixNQUFJLE1BQU0sT0FBTztBQUNmLFVBQU0sS0FBSyxHQUFHLE1BQU0sS0FBSztBQUFBLEVBQzNCO0FBRUEsTUFBSSxNQUFNLFFBQVE7QUFDaEIsVUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNO0FBQUEsRUFDNUI7QUFFQSxNQUFJLE1BQU0sa0JBQWtCO0FBQzFCLFVBQU0sS0FBSyxHQUFH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QUFTLHdCQUEyQixRQUE2QztBQUN0RixRQUFNLEVBQUUsS0FBSyxPQUFPLEdBQUcsSUFBSTtBQUMzQixNQUFJO0FBQ0Ysa0JBQWMsS0FBSyxLQUFLO0FBQ3hCLFdBQU8sR0FBRztBQUFBLEVBQ1osVUFBRTtBQUNBLG9CQUFnQixLQUFLLEtBQUs7QUFBQSxFQUM1QjtBQUNGO0FBU0EsZUFBc0IsNkJBQWdDLFFBQTJEO0FBQy9HLFFBQU0sRUFBRSxLQUFLLE9BQU8sR0FBRyxJQUFJO0FBQzNCLE1BQUk7QUFDRixrQkFBYyxLQUFLLEtBQUs7QUFDeEIsV0FBTyxNQUFNLEdBQUc7QUFBQSxFQUNsQixVQUFFO0FBQ0Esb0JBQWdCLEtBQUssS0FBSztBQUFBLEVBQzVCO0FBQ0Y7QUFRTyxTQUFTLHNDQUFzQyxLQUFVLFlBQThCO0FBQzVGLFFBQU0sT0FBTyxRQUFRLEVBQUUsS0FBSyxZQUFZLDBCQUEwQixLQUFLLENBQUM7QUFDeEUsTUFBSSxDQUFDLEtBQUssU0FBUztBQUNqQixVQUFNLElBQUksTUFBTSxrQkFBa0I7QUFBQSxFQUNwQztBQUVBLFNBQU8sSUFBSSxjQUFjLFVBQVUsS0FBSyxJQUFJO0FBRTVDLFNBQU8sSUFBSSxjQUFjLGNBQWMsS0FBSyxJQUFJO0FBQ2xEO0FBUU8sU0FBUyxnQkFBZ0IsS0FBVSxPQUE4QjtBQUN0RSxRQUFNLHdCQUF3Qix5QkFBeUI7QUFFdkQsV0FBUyxRQUFRLE9BQU87QUFDdEIsV0FBTyxLQUFLLFNBQVM7QUFDbkIsVUFBSSxRQUFRLHNCQUFzQixJQUFJLEtBQUssSUFBSSxLQUFLO0FBQ3BEO0FBQ0EsNEJBQXNCLElBQUksS0FBSyxNQUFNLEtBQUs7QUFDMUMsVUFBSSxVQUFVLEdBQUc7QUFDZiw4QkFBc0IsT0FBTyxLQUFLLElBQUk7QUFFdEMsZUFBTyxJQUFJLE1BQU0sUUFBUSxLQUFLLElBQUk7QUFFbEMsWUFBSSxPQUFPLElBQUksR0FBRztBQUNoQixjQUFJLGNBQWMsaUJBQWlCLE9BQU8sS0FBSyxLQUFLLFlBQVksR0FBRyxJQUFJO0FBQUEsUUFDekU7QUFBQSxNQUNGO0FBRUEsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0EsY0FBYyxpQkFBaUIsS0FBSyxJQUFJO0FBQUEsUUFDeEMsMEJBQTBCO0FBQUEsTUFDNUIsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLDJCQUFnRDtBQUN2RCxTQUFPLHlCQUF5Qix5QkFBeUIsb0JBQUksSUFBb0IsQ0FBQyxFQUFFO0FBQ3RGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -124,7 +124,10 @@ function makeRegExp(paths, defaultRegExp) {
124
124
  if (path.startsWith("/") && path.endsWith("/")) {
125
125
  return path.slice(1, -1);
126
126
  }
127
- path = trimEnd(path, "/");
127
+ path = trimEnd({
128
+ str: path,
129
+ suffix: "/"
130
+ });
128
131
  return `^${escapeRegExp(path)}(/|$)`;
129
132
  }).map((regExpStr) => `(${regExpStr})`).join("|");
130
133
  return new RegExp(regExpStrCombined);
@@ -132,4 +135,4 @@ function makeRegExp(paths, defaultRegExp) {
132
135
  export {
133
136
  PathSettings
134
137
  };
135
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BhdGgtc2V0dGluZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGZvciBtYW5hZ2luZyBpbmNsdWRlL2V4Y2x1ZGUgcGF0aCBzZXR0aW5ncy5cbiAqL1xuXG5pbXBvcnQge1xuICBBTFdBWVNfTUFUQ0hfUkVHX0VYUCxcbiAgZXNjYXBlUmVnRXhwLFxuICBORVZFUl9NQVRDSF9SRUdfRVhQXG59IGZyb20gJy4uL3JlZy1leHAudHMnO1xuaW1wb3J0IHsgdHJpbUVuZCB9IGZyb20gJy4uL3N0cmluZy50cyc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcblxuZW51bSBQYXRoU2V0dGluZ1R5cGUge1xuICBFeGNsdWRlID0gJ0V4Y2x1ZGUnLFxuICBJbmNsdWRlID0gJ0luY2x1ZGUnXG59XG5cbmNsYXNzIFBhdGhTZXR0aW5nIHtcbiAgcHVibGljIGdldCBhcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FycmF5O1xuICB9XG5cbiAgcHVibGljIHNldCBhcnJheSh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9hcnJheSA9IHZhbHVlLmZpbHRlcihCb29sZWFuKTtcbiAgICB0aGlzLnJlZ0V4cCA9IG1ha2VSZWdFeHAodGhpcy5fYXJyYXksIHRoaXMuZGVmYXVsdFJlZ0V4cCk7XG4gIH1cblxuICBwcml2YXRlIF9hcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UmVnRXhwOiBSZWdFeHA7XG4gIHByaXZhdGUgcmVnRXhwOiBSZWdFeHA7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdHlwZTogUGF0aFNldHRpbmdUeXBlKSB7XG4gICAgdGhpcy5kZWZhdWx0UmVnRXhwID0gZ2V0RGVmYXVsdFJlZ0V4cCh0eXBlKTtcbiAgICB0aGlzLnJlZ0V4cCA9IHRoaXMuZGVmYXVsdFJlZ0V4cDtcbiAgfVxuXG4gIHB1YmxpYyBpc1BhdGhJZ25vcmVkKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgYnJhbmNoZXMgY292ZXJlZCBidXQgdjggcmVwb3J0cyBzd2l0Y2ggYXMgcGFydGlhbC4gKi9cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGU6XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ0V4cC50ZXN0KHBhdGgpO1xuICAgICAgY2FzZSBQYXRoU2V0dGluZ1R5cGUuSW5jbHVkZTpcbiAgICAgICAgcmV0dXJuICF0aGlzLnJlZ0V4cC50ZXN0KHBhdGgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4aGF1c3RpdmUgc3dpdGNoIGd1YXJkLiAqL1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLnR5cGUpO1xuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgY2xhc3MgZm9yIG1hbmFnaW5nIGluY2x1ZGUvZXhjbHVkZSBwYXRoIHNldHRpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBleGNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIGdldCBleGNsdWRlUGF0aHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9leGNsdWRlUGF0aHMuYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXhjbHVkZSBwYXRocy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqL1xuICBwdWJsaWMgc2V0IGV4Y2x1ZGVQYXRocyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9leGNsdWRlUGF0aHMuYXJyYXkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaW5jbHVkZSBwYXRocy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5jbHVkZVBhdGhzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZVBhdGhzLmFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluY2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIHNldCBpbmNsdWRlUGF0aHModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5faW5jbHVkZVBhdGhzLmFycmF5ID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9leGNsdWRlUGF0aHMgPSBuZXcgUGF0aFNldHRpbmcoUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmNsdWRlUGF0aHMgPSBuZXcgUGF0aFNldHRpbmcoUGF0aFNldHRpbmdUeXBlLkluY2x1ZGUpO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBwYXRoIGlzIGlnbm9yZWQgYnkgdGhlIGluY2x1ZGUvZXhjbHVkZSBwYXRoIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhdGggaXMgaWdub3JlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgaXNQYXRoSWdub3JlZChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZVBhdGhzLmlzUGF0aElnbm9yZWQocGF0aCkgfHwgdGhpcy5fZXhjbHVkZVBhdGhzLmlzUGF0aElnbm9yZWQocGF0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFJlZ0V4cCh0eXBlOiBQYXRoU2V0dGluZ1R5cGUpOiBSZWdFeHAge1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGJyYW5jaGVzIGNvdmVyZWQgYnV0IHY4IHJlcG9ydHMgc3dpdGNoIGFzIHBhcnRpYWwuICovXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgY2FzZSBQYXRoU2V0dGluZ1R5cGUuRXhjbHVkZTpcbiAgICAgIHJldHVybiBORVZFUl9NQVRDSF9SRUdfRVhQO1xuICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkluY2x1ZGU6XG4gICAgICByZXR1cm4gQUxXQVlTX01BVENIX1JFR19FWFA7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGhhdXN0aXZlIHN3aXRjaCBndWFyZC4gKi9cbiAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlUmVnRXhwKHBhdGhzOiBzdHJpbmdbXSwgZGVmYXVsdFJlZ0V4cDogUmVnRXhwKTogUmVnRXhwIHtcbiAgaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkZWZhdWx0UmVnRXhwO1xuICB9XG5cbiAgY29uc3QgcmVnRXhwU3RyQ29tYmluZWQgPSBwYXRocy5tYXAoKHBhdGgpID0+IHtcbiAgICBpZiAocGF0aCA9PT0gJy8nKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFJlZ0V4cC5zb3VyY2U7XG4gICAgfVxuXG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnLycpICYmIHBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIHBhdGguc2xpY2UoMSwgLTEpO1xuICAgIH1cblxuICAgIHBhdGggPSB0cmltRW5kKHBhdGgsICcvJyk7XG4gICAgcmV0dXJuIGBeJHtlc2NhcGVSZWdFeHAocGF0aCl9KC98JClgO1xuICB9KVxuICAgIC5tYXAoKHJlZ0V4cFN0cikgPT4gYCgke3JlZ0V4cFN0cn0pYClcbiAgICAuam9pbignfCcpO1xuICByZXR1cm4gbmV3IFJlZ0V4cChyZWdFeHBTdHJDb21iaW5lZCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZUFBZTtBQUN4QixTQUFTLG1CQUFtQjtBQU81QixNQUFNLFlBQVk7QUFBQSxFQWNULFlBQTZCLE1BQXVCO0FBQXZCO0FBQ2xDLFNBQUssZ0JBQWdCLGlCQUFpQixJQUFJO0FBQzFDLFNBQUssU0FBUyxLQUFLO0FBQUEsRUFDckI7QUFBQSxFQUhvQztBQUFBLEVBYnBDLElBQVcsUUFBa0I7QUFDM0IsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRUEsSUFBVyxNQUFNLE9BQWlCO0FBQ2hDLFNBQUssU0FBUyxNQUFNLE9BQU8sT0FBTztBQUNsQyxTQUFLLFNBQVMsV0FBVyxLQUFLLFFBQVEsS0FBSyxhQUFhO0FBQUEsRUFDMUQ7QUFBQSxFQUVRLFNBQW1CLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDVDtBQUFBLEVBT0QsY0FBYyxNQUF1QjtBQUUxQyxZQUFRLEtBQUssTUFBTTtBQUFBO0FBQUEsTUFFakIsS0FBSztBQUNILGVBQU8sS0FBSyxPQUFPLEtBQUssSUFBSTtBQUFBLE1BQzlCLEtBQUs7QUFDSCxlQUFPLENBQUMsS0FBSyxPQUFPLEtBQUssSUFBSTtBQUFBLE1BQy9CO0FBRUUsb0JBQVksS0FBSyxJQUFJO0FBQUEsSUFFekI7QUFBQSxFQUNGO0FBQ0Y7QUFLTyxNQUFNLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNeEIsSUFBVyxlQUF5QjtBQUNsQyxXQUFPLEtBQUssY0FBYztBQUFBLEVBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBVyxhQUFhLE9BQWlCO0FBQ3ZDLFNBQUssY0FBYyxRQUFRO0FBQUEsRUFDN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLGVBQXlCO0FBQ2xDLFdBQU8sS0FBSyxjQUFjO0FBQUEsRUFDNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLGFBQWEsT0FBaUI7QUFDdkMsU0FBSyxjQUFjLFFBQVE7QUFBQSxFQUM3QjtBQUFBLEVBRWlCLGdCQUFnQixJQUFJLFlBQVksdUJBQXVCO0FBQUEsRUFDdkQsZ0JBQWdCLElBQUksWUFBWSx1QkFBdUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFqRSxjQUFjLE1BQXVCO0FBQzFDLFdBQU8sS0FBSyxjQUFjLGNBQWMsSUFBSSxLQUFLLEtBQUssY0FBYyxjQUFjLElBQUk7QUFBQSxFQUN4RjtBQUNGO0FBRUEsU0FBUyxpQkFBaUIsTUFBK0I7QUFFdkQsVUFBUSxNQUFNO0FBQUE7QUFBQSxJQUVaLEtBQUs7QUFDSCxhQUFPO0FBQUEsSUFDVCxLQUFLO0FBQ0gsYUFBTztBQUFBLElBQ1Q7QUFFRSxrQkFBWSxJQUFJO0FBQUEsRUFFcEI7QUFDRjtBQUVBLFNBQVMsV0FBVyxPQUFpQixlQUErQjtBQUNsRSxNQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxvQkFBb0IsTUFBTSxJQUFJLENBQUMsU0FBUztBQUM1QyxRQUFJLFNBQVMsS0FBSztBQUNoQixhQUFPLGNBQWM7QUFBQSxJQUN2QjtBQUVBLFFBQUksS0FBSyxXQUFXLEdBQUcsS0FBSyxLQUFLLFNBQVMsR0FBRyxHQUFHO0FBQzlDLGFBQU8sS0FBSyxNQUFNLEdBQUcsRUFBRTtBQUFBLElBQ3pCO0FBRUEsV0FBTyxRQUFRLE1BQU0sR0FBRztBQUN4QixXQUFPLElBQUksYUFBYSxJQUFJLENBQUM7QUFBQSxFQUMvQixDQUFDLEVBQ0UsSUFBSSxDQUFDLGNBQWMsSUFBSSxTQUFTLEdBQUcsRUFDbkMsS0FBSyxHQUFHO0FBQ1gsU0FBTyxJQUFJLE9BQU8saUJBQWlCO0FBQ3JDOyIsCiAgIm5hbWVzIjogW10KfQo=
138
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BhdGgtc2V0dGluZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGZvciBtYW5hZ2luZyBpbmNsdWRlL2V4Y2x1ZGUgcGF0aCBzZXR0aW5ncy5cbiAqL1xuXG5pbXBvcnQge1xuICBBTFdBWVNfTUFUQ0hfUkVHX0VYUCxcbiAgZXNjYXBlUmVnRXhwLFxuICBORVZFUl9NQVRDSF9SRUdfRVhQXG59IGZyb20gJy4uL3JlZy1leHAudHMnO1xuaW1wb3J0IHsgdHJpbUVuZCB9IGZyb20gJy4uL3N0cmluZy50cyc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcblxuZW51bSBQYXRoU2V0dGluZ1R5cGUge1xuICBFeGNsdWRlID0gJ0V4Y2x1ZGUnLFxuICBJbmNsdWRlID0gJ0luY2x1ZGUnXG59XG5cbmNsYXNzIFBhdGhTZXR0aW5nIHtcbiAgcHVibGljIGdldCBhcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FycmF5O1xuICB9XG5cbiAgcHVibGljIHNldCBhcnJheSh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9hcnJheSA9IHZhbHVlLmZpbHRlcihCb29sZWFuKTtcbiAgICB0aGlzLnJlZ0V4cCA9IG1ha2VSZWdFeHAodGhpcy5fYXJyYXksIHRoaXMuZGVmYXVsdFJlZ0V4cCk7XG4gIH1cblxuICBwcml2YXRlIF9hcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UmVnRXhwOiBSZWdFeHA7XG4gIHByaXZhdGUgcmVnRXhwOiBSZWdFeHA7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdHlwZTogUGF0aFNldHRpbmdUeXBlKSB7XG4gICAgdGhpcy5kZWZhdWx0UmVnRXhwID0gZ2V0RGVmYXVsdFJlZ0V4cCh0eXBlKTtcbiAgICB0aGlzLnJlZ0V4cCA9IHRoaXMuZGVmYXVsdFJlZ0V4cDtcbiAgfVxuXG4gIHB1YmxpYyBpc1BhdGhJZ25vcmVkKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgYnJhbmNoZXMgY292ZXJlZCBidXQgdjggcmVwb3J0cyBzd2l0Y2ggYXMgcGFydGlhbC4gKi9cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGU6XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ0V4cC50ZXN0KHBhdGgpO1xuICAgICAgY2FzZSBQYXRoU2V0dGluZ1R5cGUuSW5jbHVkZTpcbiAgICAgICAgcmV0dXJuICF0aGlzLnJlZ0V4cC50ZXN0KHBhdGgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4aGF1c3RpdmUgc3dpdGNoIGd1YXJkLiAqL1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLnR5cGUpO1xuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgY2xhc3MgZm9yIG1hbmFnaW5nIGluY2x1ZGUvZXhjbHVkZSBwYXRoIHNldHRpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBleGNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIGdldCBleGNsdWRlUGF0aHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9leGNsdWRlUGF0aHMuYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXhjbHVkZSBwYXRocy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqL1xuICBwdWJsaWMgc2V0IGV4Y2x1ZGVQYXRocyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9leGNsdWRlUGF0aHMuYXJyYXkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaW5jbHVkZSBwYXRocy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5jbHVkZVBhdGhzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZVBhdGhzLmFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluY2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIHNldCBpbmNsdWRlUGF0aHModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5faW5jbHVkZVBhdGhzLmFycmF5ID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9leGNsdWRlUGF0aHMgPSBuZXcgUGF0aFNldHRpbmcoUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmNsdWRlUGF0aHMgPSBuZXcgUGF0aFNldHRpbmcoUGF0aFNldHRpbmdUeXBlLkluY2x1ZGUpO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBwYXRoIGlzIGlnbm9yZWQgYnkgdGhlIGluY2x1ZGUvZXhjbHVkZSBwYXRoIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhdGggaXMgaWdub3JlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgaXNQYXRoSWdub3JlZChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZVBhdGhzLmlzUGF0aElnbm9yZWQocGF0aCkgfHwgdGhpcy5fZXhjbHVkZVBhdGhzLmlzUGF0aElnbm9yZWQocGF0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFJlZ0V4cCh0eXBlOiBQYXRoU2V0dGluZ1R5cGUpOiBSZWdFeHAge1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGJyYW5jaGVzIGNvdmVyZWQgYnV0IHY4IHJlcG9ydHMgc3dpdGNoIGFzIHBhcnRpYWwuICovXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgY2FzZSBQYXRoU2V0dGluZ1R5cGUuRXhjbHVkZTpcbiAgICAgIHJldHVybiBORVZFUl9NQVRDSF9SRUdfRVhQO1xuICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkluY2x1ZGU6XG4gICAgICByZXR1cm4gQUxXQVlTX01BVENIX1JFR19FWFA7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGhhdXN0aXZlIHN3aXRjaCBndWFyZC4gKi9cbiAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlUmVnRXhwKHBhdGhzOiBzdHJpbmdbXSwgZGVmYXVsdFJlZ0V4cDogUmVnRXhwKTogUmVnRXhwIHtcbiAgaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkZWZhdWx0UmVnRXhwO1xuICB9XG5cbiAgY29uc3QgcmVnRXhwU3RyQ29tYmluZWQgPSBwYXRocy5tYXAoKHBhdGgpID0+IHtcbiAgICBpZiAocGF0aCA9PT0gJy8nKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFJlZ0V4cC5zb3VyY2U7XG4gICAgfVxuXG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnLycpICYmIHBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIHBhdGguc2xpY2UoMSwgLTEpO1xuICAgIH1cblxuICAgIHBhdGggPSB0cmltRW5kKHtcbiAgICAgIHN0cjogcGF0aCxcbiAgICAgIHN1ZmZpeDogJy8nXG4gICAgfSk7XG4gICAgcmV0dXJuIGBeJHtlc2NhcGVSZWdFeHAocGF0aCl9KC98JClgO1xuICB9KVxuICAgIC5tYXAoKHJlZ0V4cFN0cikgPT4gYCgke3JlZ0V4cFN0cn0pYClcbiAgICAuam9pbignfCcpO1xuICByZXR1cm4gbmV3IFJlZ0V4cChyZWdFeHBTdHJDb21iaW5lZCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZUFBZTtBQUN4QixTQUFTLG1CQUFtQjtBQU81QixNQUFNLFlBQVk7QUFBQSxFQWNULFlBQTZCLE1BQXVCO0FBQXZCO0FBQ2xDLFNBQUssZ0JBQWdCLGlCQUFpQixJQUFJO0FBQzFDLFNBQUssU0FBUyxLQUFLO0FBQUEsRUFDckI7QUFBQSxFQUhvQztBQUFBLEVBYnBDLElBQVcsUUFBa0I7QUFDM0IsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRUEsSUFBVyxNQUFNLE9BQWlCO0FBQ2hDLFNBQUssU0FBUyxNQUFNLE9BQU8sT0FBTztBQUNsQyxTQUFLLFNBQVMsV0FBVyxLQUFLLFFBQVEsS0FBSyxhQUFhO0FBQUEsRUFDMUQ7QUFBQSxFQUVRLFNBQW1CLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDVDtBQUFBLEVBT0QsY0FBYyxNQUF1QjtBQUUxQyxZQUFRLEtBQUssTUFBTTtBQUFBO0FBQUEsTUFFakIsS0FBSztBQUNILGVBQU8sS0FBSyxPQUFPLEtBQUssSUFBSTtBQUFBLE1BQzlCLEtBQUs7QUFDSCxlQUFPLENBQUMsS0FBSyxPQUFPLEtBQUssSUFBSTtBQUFBLE1BQy9CO0FBRUUsb0JBQVksS0FBSyxJQUFJO0FBQUEsSUFFekI7QUFBQSxFQUNGO0FBQ0Y7QUFLTyxNQUFNLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNeEIsSUFBVyxlQUF5QjtBQUNsQyxXQUFPLEtBQUssY0FBYztBQUFBLEVBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBVyxhQUFhLE9BQWlCO0FBQ3ZDLFNBQUssY0FBYyxRQUFRO0FBQUEsRUFDN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLGVBQXlCO0FBQ2xDLFdBQU8sS0FBSyxjQUFjO0FBQUEsRUFDNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLGFBQWEsT0FBaUI7QUFDdkMsU0FBSyxjQUFjLFFBQVE7QUFBQSxFQUM3QjtBQUFBLEVBRWlCLGdCQUFnQixJQUFJLFlBQVksdUJBQXVCO0FBQUEsRUFDdkQsZ0JBQWdCLElBQUksWUFBWSx1QkFBdUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFqRSxjQUFjLE1BQXVCO0FBQzFDLFdBQU8sS0FBSyxjQUFjLGNBQWMsSUFBSSxLQUFLLEtBQUssY0FBYyxjQUFjLElBQUk7QUFBQSxFQUN4RjtBQUNGO0FBRUEsU0FBUyxpQkFBaUIsTUFBK0I7QUFFdkQsVUFBUSxNQUFNO0FBQUE7QUFBQSxJQUVaLEtBQUs7QUFDSCxhQUFPO0FBQUEsSUFDVCxLQUFLO0FBQ0gsYUFBTztBQUFBLElBQ1Q7QUFFRSxrQkFBWSxJQUFJO0FBQUEsRUFFcEI7QUFDRjtBQUVBLFNBQVMsV0FBVyxPQUFpQixlQUErQjtBQUNsRSxNQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxvQkFBb0IsTUFBTSxJQUFJLENBQUMsU0FBUztBQUM1QyxRQUFJLFNBQVMsS0FBSztBQUNoQixhQUFPLGNBQWM7QUFBQSxJQUN2QjtBQUVBLFFBQUksS0FBSyxXQUFXLEdBQUcsS0FBSyxLQUFLLFNBQVMsR0FBRyxHQUFHO0FBQzlDLGFBQU8sS0FBSyxNQUFNLEdBQUcsRUFBRTtBQUFBLElBQ3pCO0FBRUEsV0FBTyxRQUFRO0FBQUEsTUFDYixLQUFLO0FBQUEsTUFDTCxRQUFRO0FBQUEsSUFDVixDQUFDO0FBQ0QsV0FBTyxJQUFJLGFBQWEsSUFBSSxDQUFDO0FBQUEsRUFDL0IsQ0FBQyxFQUNFLElBQUksQ0FBQyxjQUFjLElBQUksU0FBUyxHQUFHLEVBQ25DLEtBQUssR0FBRztBQUNYLFNBQU8sSUFBSSxPQUFPLGlCQUFpQjtBQUNyQzsiLAogICJuYW1lcyI6IFtdCn0K
@@ -60,6 +60,8 @@ export declare class PluginEventSourceImpl implements PluginEventSource {
60
60
  * @param thisArg - The context passed as `this` to the `callback`.
61
61
  * @returns A reference to the event listener.
62
62
  *
63
+ * @remarks Not refactored to parameter-object pattern, to keep the parity with {@link obsidian#Events#on} (or once, correspondingly).
64
+ *
63
65
  * @example
64
66
  * ```ts
65
67
  * events.on('my-event', async (arg1, arg2) => {
@@ -79,6 +81,8 @@ export declare class PluginEventSourceImpl implements PluginEventSource {
79
81
  * @param thisArg - The context passed as `this` to the `callback`.
80
82
  * @returns A reference to the event listener.
81
83
  *
84
+ * @remarks Not refactored to parameter-object pattern, to keep the parity with {@link obsidian#Events#on} (or once, correspondingly).
85
+ *
82
86
  * @example
83
87
  * ```ts
84
88
  * events.once('my-event', async (arg1, arg2) => {