@mnaoumov/obsidian-dev-toolkit 3.2.0 → 3.3.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 (96) hide show
  1. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +1 -75
  2. package/dist/lib/cjs/bundlers/esbuild-impl/dependency.cjs +3 -77
  3. package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.cjs +1 -75
  4. package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +1 -75
  5. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +1 -75
  6. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +1 -75
  7. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +3 -76
  8. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -1
  9. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.cjs +1 -75
  10. package/dist/lib/cjs/bundlers/esbuild.cjs +1 -75
  11. package/dist/lib/cjs/bundlers/index.cjs +1 -75
  12. package/dist/lib/cjs/bundlers/obsidian-cli-reload.cjs +1 -75
  13. package/dist/lib/cjs/bundlers/obsidian-plugin-build.cjs +1 -75
  14. package/dist/lib/cjs/bundlers/obsidian-plugin-features.cjs +1 -75
  15. package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.cjs +1 -75
  16. package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.cjs +1 -75
  17. package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.cjs +32 -85
  18. package/dist/lib/cjs/bundlers/parcel.cjs +112 -81
  19. package/dist/lib/cjs/bundlers/parcel.d.cts +13 -6
  20. package/dist/lib/cjs/bundlers/rollup-compatible-features.cjs +1 -75
  21. package/dist/lib/cjs/bundlers/rollup-compatible.cjs +1 -75
  22. package/dist/lib/cjs/bundlers/rollup.cjs +1 -75
  23. package/dist/lib/cjs/bundlers/vite.cjs +1 -75
  24. package/dist/lib/cjs/bundlers/webpack.cjs +3 -77
  25. package/dist/lib/cjs/demo-vault-app-json.cjs +1 -75
  26. package/dist/lib/cjs/demo-vault-buttons.cjs +1 -75
  27. package/dist/lib/cjs/demo-vault-cli.cjs +1 -75
  28. package/dist/lib/cjs/demo-vault-coverage.cjs +139 -118
  29. package/dist/lib/cjs/demo-vault-coverage.d.cts +100 -5
  30. package/dist/lib/cjs/demo-vault.cjs +3 -77
  31. package/dist/lib/cjs/docs-site/index.cjs +1 -75
  32. package/dist/lib/cjs/docs-site/obsidian-external-type-links.cjs +1 -75
  33. package/dist/lib/cjs/formatters/dprint.cjs +1 -75
  34. package/dist/lib/cjs/formatters/index.cjs +1 -75
  35. package/dist/lib/cjs/index.cjs +1 -81
  36. package/dist/lib/cjs/index.d.cts +0 -2
  37. package/dist/lib/cjs/integration-test-setup.cjs +1 -75
  38. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +1 -75
  39. package/dist/lib/cjs/jest-setup.cjs +1 -75
  40. package/dist/lib/cjs/linters/eslint-config.cjs +1 -75
  41. package/dist/lib/cjs/linters/eslint-rules/index.cjs +1 -75
  42. package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +1 -75
  43. package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.cjs +1 -75
  44. package/dist/lib/cjs/linters/eslint-rules/manifest-id.cjs +1 -75
  45. package/dist/lib/cjs/linters/eslint-rules/manifest-name.cjs +1 -75
  46. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.cjs +1 -75
  47. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.cjs +1 -75
  48. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +2 -77
  49. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +1 -75
  50. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-toolkit-plugin.cjs +1 -75
  51. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.cjs +1 -75
  52. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.cjs +1 -75
  53. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.cjs +1 -75
  54. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.cjs +1 -75
  55. package/dist/lib/cjs/linters/eslint.cjs +1 -75
  56. package/dist/lib/cjs/linters/index.cjs +1 -75
  57. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +1 -75
  58. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +1 -75
  59. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.cjs +1 -75
  60. package/dist/lib/cjs/linters/markdownlint.cjs +1 -75
  61. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +1 -75
  62. package/dist/lib/cjs/linters/plugin-names.cjs +1 -75
  63. package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +1 -75
  64. package/dist/lib/cjs/setup.cjs +1 -75
  65. package/dist/lib/cjs/templates.cjs +3 -77
  66. package/dist/lib/cjs/test-runners/coverage-badge-cli.cjs +1 -75
  67. package/dist/lib/cjs/test-runners/coverage-badge.cjs +1 -75
  68. package/dist/lib/cjs/test-runners/e2e-runner-support.cjs +1 -75
  69. package/dist/lib/cjs/test-runners/index.cjs +1 -78
  70. package/dist/lib/cjs/test-runners/index.d.cts +0 -1
  71. package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +3 -77
  72. package/dist/lib/cjs/test-runners/jest-config.cjs +1 -75
  73. package/dist/lib/cjs/test-runners/obsidian-test-runner.cjs +1 -75
  74. package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +4 -75
  75. package/dist/lib/cjs/test-runners/performance-eval-cap.d.cts +12 -3
  76. package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +1 -75
  77. package/dist/lib/cjs/test-runners/vitest-config.cjs +4 -80
  78. package/dist/lib/cjs/test-runners/wdio-obsidian.cjs +1 -75
  79. package/dist/lib/cjs/version.cjs +1 -75
  80. package/dist/lib/cjs/vitest-setup.cjs +1 -75
  81. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +1 -1
  82. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +3 -2
  83. package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.mjs +32 -15
  84. package/dist/lib/esm/bundlers/parcel.d.mts +13 -6
  85. package/dist/lib/esm/bundlers/parcel.mjs +110 -5
  86. package/dist/lib/esm/demo-vault-coverage.d.mts +100 -5
  87. package/dist/lib/esm/demo-vault-coverage.mjs +139 -44
  88. package/dist/lib/esm/index.d.mts +0 -2
  89. package/dist/lib/esm/index.mjs +1 -5
  90. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +2 -2
  91. package/dist/lib/esm/test-runners/index.d.mts +0 -1
  92. package/dist/lib/esm/test-runners/index.mjs +1 -3
  93. package/dist/lib/esm/test-runners/performance-eval-cap.d.mts +12 -3
  94. package/dist/lib/esm/test-runners/performance-eval-cap.mjs +3 -1
  95. package/dist/lib/esm/test-runners/vitest-config.mjs +4 -5
  96. package/package.json +3 -2
@@ -29,80 +29,6 @@ function ensureBrowserProcess() {
29
29
 
30
30
  ensureBrowserProcess();
31
31
  })();
32
- (function patchObsidianRequire() {
33
- const originalRequire = require;
34
- if (!originalRequire || originalRequire.__isPatched) {
35
- return;
36
- }
37
-
38
- require = Object.assign(
39
- (id) => requirePatched(id),
40
- originalRequire,
41
- {
42
- __isPatched: true
43
- }
44
- );
45
-
46
- function extractDefault(module) {
47
- return module && module.__esModule && 'default' in module ? module.default : module;
48
- }
49
-
50
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
51
- '@codemirror/autocomplete',
52
- '@codemirror/collab',
53
- '@codemirror/commands',
54
- '@codemirror/language',
55
- '@codemirror/lint',
56
- '@codemirror/search',
57
- '@codemirror/state',
58
- '@codemirror/text',
59
- '@codemirror/view',
60
- '@lezer/common',
61
- '@lezer/highlight',
62
- '@lezer/lr',
63
- 'obsidian']
64
- );
65
-
66
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
67
- '@codemirror/closebrackets',
68
- '@codemirror/comment',
69
- '@codemirror/fold',
70
- '@codemirror/gutter',
71
- '@codemirror/highlight',
72
- '@codemirror/history',
73
- '@codemirror/matchbrackets',
74
- '@codemirror/panel',
75
- '@codemirror/rangeset',
76
- '@codemirror/rectangular-selection',
77
- '@codemirror/stream-parser',
78
- '@codemirror/tooltip']
79
- );
80
-
81
- function requirePatched(id) {
82
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
83
- return originalRequire?.(id);
84
- }
85
-
86
- // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
87
- if (globalThis.app.isMobile) {
88
- if (id === 'process' || id === 'node:process') {
89
- // eslint-disable-next-line no-console -- Valid usage.
90
- console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
91
-
92
- return process;
93
- }
94
- } else {
95
- const module = originalRequire?.(id);
96
- if (module) {
97
- return extractDefault(module);
98
- }
99
- }
100
-
101
- // eslint-disable-next-line no-console -- Valid usage.
102
- console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
103
- return {};
104
- }
105
- })();
106
32
 
107
33
  "use strict";
108
34
  var __defProp = Object.defineProperty;
@@ -137,7 +63,7 @@ var import_obsidian_plugin_repo_paths = require('../obsidian-plugin-repo-paths.c
137
63
  var import_obsidian_plugin_build = require('./obsidian-plugin-build.cjs');
138
64
  var import_obsidian_plugin_features = require('./obsidian-plugin-features.cjs');
139
65
  var import_obsidian_plugins_folder_deployment = require('./obsidian-plugins-folder-deployment.cjs');
140
- var __import_meta_url = globalThis["import.meta.url"] ?? (function getObsidianCjsImportMetaUrl() {
66
+ var __import_meta_url = globalThis["import.meta.url"] ?? (function getCjsImportMetaUrl() {
141
67
  if (typeof __filename === "string") {
142
68
  const localRequire = require;
143
69
  const url = localRequire("node:url");
@@ -145,7 +71,7 @@ var __import_meta_url = globalThis["import.meta.url"] ?? (function getObsidianCj
145
71
  return url.pathToFileURL(__filename).href;
146
72
  }
147
73
  }
148
- return typeof window === "undefined" ? "" : activeWindow.location.href;
74
+ return globalThis.location?.href ?? "";
149
75
  })();
150
76
  const PLUGIN_NAME = "ObsidianPluginWebpackPlugin";
151
77
  const MINI_CSS_EXTRACT_PLUGIN = "mini-css-extract-plugin";
@@ -351,4 +277,4 @@ function renameWebpackCssAssets(compilation, compiler) {
351
277
  getWebpackFeatureRules,
352
278
  obsidianPluginWebpackExternals
353
279
  });
354
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy93ZWJwYWNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/IChmdW5jdGlvbiBnZXRPYnNpZGlhbkNqc0ltcG9ydE1ldGFVcmwoKSB7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZSgnbm9kZTp1cmwnKTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGVudmlyb25tZW50IGlzIHVua25vd25cbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gJycgOiBhY3RpdmVXaW5kb3cubG9jYXRpb24uaHJlZjtcbn0pKCk7XG4vKipcbiAqIEBmaWxlXG4gKlxuICogQnVpbGRzIGFuIE9ic2lkaWFuIHBsdWdpbiB3aXRoIHdlYnBhY2s6IGEgd2VicGFjayBwbHVnaW4gdGhhdCBnaXZlcyBhIGJ1aWxkIHRoZSBzYW1lIGBtYWluLmpzYCArXG4gKiBgc3R5bGVzLmNzc2AgKyBgbWFuaWZlc3QuanNvbmAgbGF5b3V0IHRoZSBlc2J1aWxkIGJ1aWxkZXIgcHJvZHVjZXMsIGRlcGxveXMgYSB3YXRjaCBidWlsZCBpbnRvIHRoZSB2YXVsdCxcbiAqIGFuZCBmaWxscyBpbiBvbmx5IHRoZSBvcHRpb25zIHRoZSBjb25zdW1lcidzIG93biBgd2VicGFjay5jb25maWdgIGxlYXZlcyB1bnNldC5cbiAqXG4gKiBgd2VicGFja2AgaXMgYW4gb3B0aW9uYWwgcGVlciBkZXBlbmRlbmN5LiBUaGlzIG1vZHVsZSBvbmx5IGltcG9ydHMgaXRzIHR5cGVzIGFuZCByZWFjaGVzIHdlYnBhY2snc1xuICogY2xhc3NlcyB0aHJvdWdoIGBjb21waWxlci53ZWJwYWNrYCwgc28gYSBwbHVnaW4gYnVpbHQgd2l0aCBlc2J1aWxkIGluc3RhbGxzIG5vdGhpbmcgZXh0cmEuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21waWxhdGlvbixcbiAgQ29tcGlsZXIsXG4gIFJ1bGVTZXRSdWxlLFxuICBSdWxlU2V0VXNlSXRlbSxcbiAgV2VicGFja09wdGlvbnNOb3JtYWxpemVkLFxuICBXZWJwYWNrUGx1Z2luSW5zdGFuY2Vcbn0gZnJvbSAnd2VicGFjayc7XG5cbmltcG9ydCB7IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgZXh0bmFtZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9wYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5QbHVnaW5EZXBsb3ltZW50T3B0aW9ucyB9IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWJ1aWxkLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5QbHVnaW5GZWF0dXJlT3B0aW9ucyxcbiAgT2JzaWRpYW5QbHVnaW5TdHlsZXNPcHRpb25zXG59IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWZlYXR1cmVzLnRzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5QbHVnaW5XZWJwYWNrTG9hZGVyT3B0aW9ucyB9IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLXdlYnBhY2stbG9hZGVyLnRzJztcblxuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBCdWlsZE1vZGUsXG4gIGNsZWFuT2JzaWRpYW5QbHVnaW5EaXN0Rm9sZGVyLFxuICBjb21wbGV0ZU9ic2lkaWFuUGx1Z2luRGlzdEZvbGRlcixcbiAgZ2V0T2JzaWRpYW5QbHVnaW5CYW5uZXIsXG4gIGdldE9ic2lkaWFuUGx1Z2luRGlzdEZvbGRlcixcbiAgZ2V0T2JzaWRpYW5QbHVnaW5FbnRyeVBvaW50LFxuICBpc0Nzc0ZpbGVOYW1lLFxuICBpc09ic2lkaWFuUGx1Z2luRXh0ZXJuYWwsXG4gIG1lcmdlQ3NzQXNzZXRzLFxuICByZXNvbHZlT2JzaWRpYW5QbHVnaW5CdWlsZENvbnRleHRcbn0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tYnVpbGQudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RnJhbWV3b3JrRGVmaW5lcyxcbiAgaXNQb3N0Y3NzTmVlZGVkLFxuICByZXF1aXJlT3B0aW9uYWxQZWVyLFxuICByZXNvbHZlT3B0aW9uYWxQZWVyXG59IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWZlYXR1cmVzLnRzJztcbmltcG9ydCB7IGRlcGxveVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyIH0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1kZXBsb3ltZW50LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0V2VicGFja0ZlYXR1cmVSdWxlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0V2VicGFja0ZlYXR1cmVSdWxlc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiBgY3NzLWxvYWRlcmAsIGZvciB0aGUgc3R5bGVzaGVldCBydWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgY3NzTG9hZGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVpbGQgZmVhdHVyZXMuXG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlczogT2JzaWRpYW5QbHVnaW5GZWF0dXJlT3B0aW9ucztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGlzIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgdG9vbGtpdCdzIG93biBsb2FkZXIuXG4gICAqL1xuICByZWFkb25seSBsb2FkZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9mIGBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbmAncyBsb2FkZXIsIGZvciB0aGUgc3R5bGVzaGVldCBydWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWluaUNzc0V4dHJhY3RMb2FkZXJQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIE9ic2lkaWFuUGx1Z2luV2VicGFja1BsdWdpbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5QbHVnaW5XZWJwYWNrUGx1Z2luT3B0aW9ucyBleHRlbmRzIE9ic2lkaWFuUGx1Z2luRGVwbG95bWVudE9wdGlvbnMsIE9ic2lkaWFuUGx1Z2luRmVhdHVyZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJ1aWxkIG1vZGUuIERlZmF1bHRzIHRvIHtAbGluayBCdWlsZE1vZGUuRGV2ZWxvcG1lbnR9IHdoZW4gd2VicGFjayB3YXRjaGVzIChgd2VicGFjayAtLXdhdGNoYCkgb3JcbiAgICogaXRzIGBtb2RlYCBpcyBgZGV2ZWxvcG1lbnRgLCBhbmQge0BsaW5rIEJ1aWxkTW9kZS5Qcm9kdWN0aW9ufSBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBtb2RlPzogQnVpbGRNb2RlO1xufVxuXG4vKipcbiAqIFRoZSBjYWxsYmFjayB3ZWJwYWNrJ3MgZnVuY3Rpb24gZm9ybSBvZiBgZXh0ZXJuYWxzYCB0YWtlcy5cbiAqL1xudHlwZSBFeHRlcm5hbHNDYWxsYmFjayA9IChlcnJvcj86IEVycm9yIHwgbnVsbCwgcmVzdWx0Pzogc3RyaW5nKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBhcmd1bWVudCB3ZWJwYWNrJ3MgZnVuY3Rpb24gZm9ybSBvZiBgZXh0ZXJuYWxzYCByZWNlaXZlcy5cbiAqL1xuaW50ZXJmYWNlIEV4dGVybmFsc0RhdGEge1xuICByZWFkb25seSByZXF1ZXN0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5gIGNsYXNzLlxuICovXG5pbnRlcmZhY2UgTWluaUNzc0V4dHJhY3RQbHVnaW5DbGFzcyB7XG4gIHJlYWRvbmx5IGxvYWRlcjogc3RyaW5nO1xuICBuZXcgKCk6IFdlYnBhY2tQbHVnaW5JbnN0YW5jZTtcbn1cblxuLyoqXG4gKiBUaGUgcGFydCBvZiBgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5gIHRoZSBhZGFwdGVyIHVzZXMuXG4gKi9cbmludGVyZmFjZSBNaW5pQ3NzRXh0cmFjdFBsdWdpbk1vZHVsZSB7XG4gIHJlYWRvbmx5IGRlZmF1bHQ6IE1pbmlDc3NFeHRyYWN0UGx1Z2luQ2xhc3M7XG59XG5cbi8qKlxuICogVGhlIHBhcnQgb2YgYHVucGx1Z2luLXZ1ZS93ZWJwYWNrYCB0aGUgYWRhcHRlciB1c2VzLlxuICovXG5pbnRlcmZhY2UgVW5wbHVnaW5WdWVXZWJwYWNrTW9kdWxlIHtcbiAgcmVhZG9ubHkgZGVmYXVsdDogKCkgPT4gV2VicGFja1BsdWdpbkluc3RhbmNlO1xufVxuXG5jb25zdCBQTFVHSU5fTkFNRSA9ICdPYnNpZGlhblBsdWdpbldlYnBhY2tQbHVnaW4nO1xuY29uc3QgTUlOSV9DU1NfRVhUUkFDVF9QTFVHSU4gPSAnbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4nO1xuXG4vKipcbiAqIEEgd2VicGFjayBwbHVnaW4gdGhhdCBidWlsZHMgYW4gT2JzaWRpYW4gcGx1Z2luLlxuICpcbiAqIFdoYXQgaXQgZG9lcywgZWFjaCBvbmx5IHdoZW4gdGhlIGNvbnN1bWVyJ3MgY29uZmlnIGhhcyBub3Qgc2FpZCBvdGhlcndpc2U6XG4gKlxuICogLSBgZW50cnlgIGlzIGBzcmMvbWFpbi50c2AsIGFuZCBgbW9kZWAgZm9sbG93cyB0aGUgYnVpbGQgbW9kZS5cbiAqIC0gVGhlIG91dHB1dCBpcyBvbmUgQ29tbW9uSlMgKGBjb21tb25qczJgKSBgbWFpbi5qc2AgaW4gYGRpc3QvYnVpbGRgIChgZGlzdC9kZXZgIGluIGRldmVsb3BtZW50KSwgd2l0aCBub1xuICogICBhc3luYyBjaHVua3MsIHNvIGEgZHluYW1pYyBpbXBvcnQgY2Fubm90IGJlY29tZSBhIHNpYmxpbmcgZmlsZS5cbiAqIC0gYHRhcmdldGAgaXMgYG5vZGVgLCB3aGljaCBpcyB3aGF0IE9ic2lkaWFuJ3MgcmVuZGVyZXIgcnVucywgc28gTm9kZSBidWlsdGlucyByZXNvbHZlLCB3aGlsZSB0aGUgZXhwb3J0XG4gKiAgIGNvbmRpdGlvbnMgYXJlIHRoZSBicm93c2VyJ3MgKGBicm93c2VyYCwgYHdlYnBhY2tgLCB0aGUgbW9kZSwgYG1vZHVsZWAsIGBpbXBvcnRgLCBgcmVxdWlyZWAsIGFuZCBuZXZlciBgbm9kZWApLFxuICogICBzbyBwYWNrYWdlcyBoYW5kIG92ZXIgdGhlaXIgYnJvd3NlciBidWlsZHMsIGFzIG9uIG1vYmlsZSB0aGV5IG11c3QuXG4gKiAtIGBkZXZ0b29sYCBpcyBhbiBpbmxpbmUgc291cmNlIG1hcCBpbiBkZXZlbG9wbWVudCBvbmx5LlxuICpcbiAqIEFuZCBhbHdheXM6IE9ic2lkaWFuJ3Mgb3duIG1vZHVsZXMgKGBvYnNpZGlhbmAsIGBlbGVjdHJvbmAsIENvZGVNaXJyb3IsIExlemVyKSBhbmQgdGhlIE5vZGUgYnVpbHRpbnMgYXJlXG4gKiBleHRlcm5hbCBiZXNpZGUgdGhlIGNvbnN1bWVyJ3Mgb3duIGBleHRlcm5hbHNgLCB0aGUgZ2VuZXJhdGVkLWZpbGUgYmFubmVyIGhlYWRzIGBtYWluLmpzYCwgbGljZW5zZVxuICogY29tbWVudHMgYSBtaW5pbWl6ZXIgZXh0cmFjdGVkIGludG8gYG1haW4uanMuTElDRU5TRS50eHRgICh3aGljaCBubyBPYnNpZGlhbiByZWxlYXNlIHNoaXBzKSBhcmUgcHV0IGJhY2tcbiAqIGludG8gYG1haW4uanNgLCB0aGUgb3V0cHV0IGZvbGRlciBpcyBlbXB0aWVkIGJlZm9yZSB0aGUgZmlyc3QgYnVpbGQsIGV2ZXJ5IGVtaXR0ZWQgQ1NTIGZpbGUgZW5kcyB1cCBpblxuICogYHN0eWxlcy5jc3NgLCBgbWFuaWZlc3QuanNvbmAgKGFuZCBpbiBkZXZlbG9wbWVudCBgLmhvdHJlbG9hZGApIGlzIGNvcGllZCBiZXNpZGUgaXQsIGFuZCBhIGRldmVsb3BtZW50XG4gKiBidWlsZCBpcyBkZXBsb3llZCBpbnRvIHRoZSB2YXVsdCBuYW1lZCBieSBgT0JTSURJQU5fQ09ORklHX0ZPTERFUmAuXG4gKlxuICogVHlwZVNjcmlwdCBzdGF5cyB0aGUgY29uc3VtZXIncyBjaG9pY2Ugb2YgbG9hZGVyLCBhcyBpdCB3b3VsZCBiZSB3aXRob3V0IHRoaXMgcGx1Z2luLiBUaGUgYnVpbGQgZmVhdHVyZXNcbiAqICh7QGxpbmsgT2JzaWRpYW5QbHVnaW5GZWF0dXJlT3B0aW9uc30pIGFyZSB0aGUgcGx1Z2luJ3M6XG4gKlxuICogLSBgZnJhbWV3b3JrOiAncmVhY3QnIHwgJ3ByZWFjdCdgIG5lZWRzIG5vdGhpbmcgaGVyZTogdGhlIFR5cGVTY3JpcHQgbG9hZGVyIHJlYWRzIHRoZSBhdXRvbWF0aWMgSlNYIHJ1bnRpbWUgZnJvbSB0aGVcbiAqICAgdG9vbGtpdCdzIHRzY29uZmlnIHByZXNldCwgYW5kIHdlYnBhY2sncyBgbW9kZWAgZGVmaW5lcyBgcHJvY2Vzcy5lbnYuTk9ERV9FTlZgLlxuICogLSBgZnJhbWV3b3JrOiAnc29saWQnIHwgJ3N2ZWx0ZSdgIGFkZHMgcnVsZXMgdGhhdCBjb21waWxlIHRoZSBjb21wb25lbnRzIHdpdGggdGhlIHRvb2xraXQncyBzaGFyZWQgdHJhbnNmb3JtcywgYW5kXG4gKiAgIGAndnVlJ2AgYXBwbGllcyBgdW5wbHVnaW4tdnVlYCBhbmQgZGVmaW5lcyBWdWUncyBmZWF0dXJlIGZsYWdzLlxuICogLSBgc3R5bGVzYCBhZGRzIHRoZSBvbmUgcnVsZSBldmVyeSBzdHlsZXNoZWV0IGdvZXMgdGhyb3VnaCAoUG9zdENTUyBhbmQgVGFpbHdpbmQsIHRoZW4gYGNzcy1sb2FkZXJgLCBzY29waW5nXG4gKiAgIGAqLm1vZHVsZS5jc3NgIG9ubHkgd2l0aCBgY3NzTW9kdWxlc2AsIHRoZW4gYG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luYCksIGFuZCBhcHBsaWVzIGBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbmBcbiAqICAgdW5sZXNzIHRoZSBjb25maWcgYWxyZWFkeSBkb2VzOyBsZWF2ZSB5b3VyIG93biBgLmNzc2AgcnVsZSBvdXQuIGBzdHlsZXM6IHt9YCBjb21waWxlcyBwbGFpbiBDU1MuXG4gKiAtIGB3YXNtYCBpbXBvcnRzIGEgYC53YXNtYCBtb2R1bGUgYXMgaXRzIGJ5dGVzLlxuICovXG5leHBvcnQgY2xhc3MgT2JzaWRpYW5QbHVnaW5XZWJwYWNrUGx1Z2luIGltcGxlbWVudHMgV2VicGFja1BsdWdpbkluc3RhbmNlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHBsdWdpbi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIE9ic2lkaWFuUGx1Z2luV2VicGFja1BsdWdpbk9wdGlvbnN9LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogT2JzaWRpYW5QbHVnaW5XZWJwYWNrUGx1Z2luT3B0aW9ucyA9IHt9KSB7fVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBXZWJwYWNrIGhvb2tzOyBleGVyY2lzZWQgYnkgdGhlIGJ1bmRsZXIgaW50ZWdyYXRpb24gdGVzdCBhZ2FpbnN0IGEgcmVhbCB3ZWJwYWNrIGJ1aWxkLiAqL1xuICAvKipcbiAgICogQXBwbGllcyB0aGUgcGx1Z2luIHRvIGEgd2VicGFjayBjb21waWxlci5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBpbGVyIC0gVGhlIHdlYnBhY2sgY29tcGlsZXIuXG4gICAqL1xuICBwdWJsaWMgYXBwbHkoY29tcGlsZXI6IENvbXBpbGVyKTogdm9pZCB7XG4gICAgY29uc3QgbW9kZSA9IHRoaXMub3B0aW9ucy5tb2RlID8/IGdldFdlYnBhY2tCdWlsZE1vZGUoY29tcGlsZXIub3B0aW9ucyk7XG4gICAgYXBwbHlXZWJwYWNrT3B0aW9uRGVmYXVsdHMoY29tcGlsZXIub3B0aW9ucywgbW9kZSk7XG4gICAgYXBwbHlXZWJwYWNrRmVhdHVyZXMoY29tcGlsZXIsIHRoaXMub3B0aW9ucywgbW9kZSA9PT0gQnVpbGRNb2RlLlByb2R1Y3Rpb24pO1xuICAgIC8vIEFkZGVkIGF0IHRoZSByZXBvcnQgc3RhZ2UsIGFmdGVyIG1pbmlmaWNhdGlvbiwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHN0cmlwIGl0IGFzIGFuIG9yZGluYXJ5IGNvbW1lbnQuXG4gICAgbmV3IGNvbXBpbGVyLndlYnBhY2suQmFubmVyUGx1Z2luKHtcbiAgICAgIGJhbm5lcjogZ2V0T2JzaWRpYW5QbHVnaW5CYW5uZXIoJ3dlYnBhY2snKSxcbiAgICAgIHJhdzogdHJ1ZSxcbiAgICAgIHN0YWdlOiBjb21waWxlci53ZWJwYWNrLkNvbXBpbGF0aW9uLlBST0NFU1NfQVNTRVRTX1NUQUdFX1JFUE9SVCxcbiAgICAgIHRlc3Q6IC9cXC5qcyQvdVxuICAgIH0pLmFwcGx5KGNvbXBpbGVyKTtcblxuICAgIGNvbnN0IGJ1aWxkQ29udGV4dFByb21pc2UgPSByZXNvbHZlT2JzaWRpYW5QbHVnaW5CdWlsZENvbnRleHQoe1xuICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgLi4uKGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0LnBhdGggIT09IHVuZGVmaW5lZCAmJiB7IGRpc3RGb2xkZXI6IGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0LnBhdGggfSksXG4gICAgICBtb2RlXG4gICAgfSk7XG4gICAgbGV0IGlzRGlzdEZvbGRlckNsZWFuZWQgPSBmYWxzZTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByZXBhcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBidWlsZENvbnRleHQgPSBhd2FpdCBidWlsZENvbnRleHRQcm9taXNlO1xuICAgICAgaWYgKGlzRGlzdEZvbGRlckNsZWFuZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXNEaXN0Rm9sZGVyQ2xlYW5lZCA9IHRydWU7XG4gICAgICBhd2FpdCBjbGVhbk9ic2lkaWFuUGx1Z2luRGlzdEZvbGRlcihidWlsZENvbnRleHQuZGlzdEZvbGRlcik7XG4gICAgfVxuICAgIGNvbXBpbGVyLmhvb2tzLmJlZm9yZVJ1bi50YXBQcm9taXNlKFBMVUdJTl9OQU1FLCBwcmVwYXJlKTtcbiAgICBjb21waWxlci5ob29rcy53YXRjaFJ1bi50YXBQcm9taXNlKFBMVUdJTl9OQU1FLCBwcmVwYXJlKTtcblxuICAgIGNvbXBpbGVyLmhvb2tzLnRoaXNDb21waWxhdGlvbi50YXAoUExVR0lOX05BTUUsIChjb21waWxhdGlvbikgPT4ge1xuICAgICAgY29tcGlsYXRpb24uaG9va3MucHJvY2Vzc0Fzc2V0cy50YXAoXG4gICAgICAgIHsgbmFtZTogUExVR0lOX05BTUUsIHN0YWdlOiBjb21waWxlci53ZWJwYWNrLkNvbXBpbGF0aW9uLlBST0NFU1NfQVNTRVRTX1NUQUdFX1NVTU1BUklaRSB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgcmVuYW1lV2VicGFja0Nzc0Fzc2V0cyhjb21waWxhdGlvbiwgY29tcGlsZXIpO1xuICAgICAgICAgIGlubGluZUV4dHJhY3RlZExpY2Vuc2VzKGNvbXBpbGF0aW9uLCBjb21waWxlcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjb21waWxlci5ob29rcy5hZnRlckVtaXQudGFwUHJvbWlzZShQTFVHSU5fTkFNRSwgYXN5bmMgKGNvbXBpbGF0aW9uKSA9PiB7XG4gICAgICBpZiAoY29tcGlsYXRpb24uZ2V0U3RhdHMoKS5oYXNFcnJvcnMoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBidWlsZENvbnRleHQgPSBhd2FpdCBidWlsZENvbnRleHRQcm9taXNlO1xuICAgICAgYXdhaXQgY29tcGxldGVPYnNpZGlhblBsdWdpbkRpc3RGb2xkZXIoYnVpbGRDb250ZXh0KTtcbiAgICAgIGF3YWl0IGRlcGxveVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyKGJ1aWxkQ29udGV4dCk7XG4gICAgfSk7XG4gIH1cbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbn1cblxuLyoqXG4gKiBEZWNpZGVzIHRoZSBidWlsZCBtb2RlIG9mIGEgd2VicGFjayBidWlsZCBmcm9tIHRoZSBjb25zdW1lcidzIGNvbmZpZzogZGV2ZWxvcG1lbnQgd2hlbiB3ZWJwYWNrIHdhdGNoZXNcbiAqIG9yIGl0cyBgbW9kZWAgaXMgYGRldmVsb3BtZW50YCwgcHJvZHVjdGlvbiBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgbm9ybWFsaXplZCB3ZWJwYWNrIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgYnVpbGQgbW9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYnBhY2tCdWlsZE1vZGUob3B0aW9uczogUGljazxXZWJwYWNrT3B0aW9uc05vcm1hbGl6ZWQsICdtb2RlJyB8ICd3YXRjaCc+KTogQnVpbGRNb2RlIHtcbiAgcmV0dXJuIG9wdGlvbnMud2F0Y2ggfHwgb3B0aW9ucy5tb2RlID09PSAnZGV2ZWxvcG1lbnQnID8gQnVpbGRNb2RlLkRldmVsb3BtZW50IDogQnVpbGRNb2RlLlByb2R1Y3Rpb247XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBtb2R1bGUgcnVsZXMgdGhlIGJ1aWxkIGZlYXR1cmVzIGFkZCwgZWFjaCBydW5uaW5nIHRoZSB0b29sa2l0J3Mgb3duIGxvYWRlcjogU29saWQncyBKU1ggYmVmb3JlIHRoZVxuICogcHJvamVjdCdzIFR5cGVTY3JpcHQgbG9hZGVyLCBTdmVsdGUgY29tcG9uZW50cyBhbmQgbW9kdWxlcywgYC53YXNtYCBtb2R1bGVzIGFzIEphdmFTY3JpcHQsIGFuZCB3aXRoIGBzdHlsZXNgIHRoZVxuICogc3R5bGVzaGVldCBydWxlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEdldFdlYnBhY2tGZWF0dXJlUnVsZXNQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIHJ1bGVzLCBlbXB0eSB3aGVuIG5vIGZlYXR1cmUgbmVlZHMgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2VicGFja0ZlYXR1cmVSdWxlcyhwYXJhbXM6IEdldFdlYnBhY2tGZWF0dXJlUnVsZXNQYXJhbXMpOiBSdWxlU2V0UnVsZVtdIHtcbiAgY29uc3QgeyBjc3NMb2FkZXJQYXRoLCBmZWF0dXJlcywgaXNQcm9kdWN0aW9uQnVpbGQsIGxvYWRlclBhdGgsIG1pbmlDc3NFeHRyYWN0TG9hZGVyUGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBydWxlczogUnVsZVNldFJ1bGVbXSA9IFtdO1xuXG4gIGZ1bmN0aW9uIGZlYXR1cmVMb2FkZXIoa2luZDogT2JzaWRpYW5QbHVnaW5XZWJwYWNrTG9hZGVyT3B0aW9uc1sna2luZCddLCBzdHlsZXM/OiBPYnNpZGlhblBsdWdpblN0eWxlc09wdGlvbnMpOiBSdWxlU2V0VXNlSXRlbVtdIHtcbiAgICBjb25zdCBvcHRpb25zOiBPYnNpZGlhblBsdWdpbldlYnBhY2tMb2FkZXJPcHRpb25zID0geyBpc1Byb2R1Y3Rpb25CdWlsZCwga2luZCwgLi4uKHN0eWxlcyAmJiB7IHN0eWxlcyB9KSB9O1xuICAgIHJldHVybiBbeyBsb2FkZXI6IGxvYWRlclBhdGgsIG9wdGlvbnMgfV07XG4gIH1cblxuICBzd2l0Y2ggKGZlYXR1cmVzLmZyYW1ld29yaykge1xuICAgIGNhc2UgJ3NvbGlkJzoge1xuICAgICAgcnVsZXMucHVzaCh7IGVuZm9yY2U6ICdwcmUnLCB0ZXN0OiAvXFwuW2p0XXN4JC9pdSwgdXNlOiBmZWF0dXJlTG9hZGVyKCdqc3gnKSB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdzdmVsdGUnOiB7XG4gICAgICBydWxlcy5wdXNoKFxuICAgICAgICB7IHRlc3Q6IC9cXC5zdmVsdGUkL2l1LCB1c2U6IGZlYXR1cmVMb2FkZXIoJ3N2ZWx0ZScpIH0sXG4gICAgICAgIHsgZW5mb3JjZTogJ3ByZScsIHRlc3Q6IC9cXC5zdmVsdGVcXC5bY21dP1tqdF1zJC9pdSwgdXNlOiBmZWF0dXJlTG9hZGVyKCdzdmVsdGUnKSB9XG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ3Z1ZSc6IHtcbiAgICAgIC8vIGB1bnBsdWdpbi12dWVgIGhhbmRzIGEgYDxzY3JpcHQgbGFuZz1cInRzXCI+YCBibG9jayBvbiBhcyBhIG1vZHVsZSBvZiBpdHMgb3duIGFmdGVyIHRoZSBwcm9qZWN0J3MgVHlwZVNjcmlwdFxuICAgICAgLy8gTG9hZGVyIHJhbiwgc28gYSBwb3N0IGxvYWRlciBzdHJpcHMgaXRzIHR5cGVzLiBJdHMgaWQgbmFtZXMgdGhlIGNvbXBvbmVudCBhbmQgdGhlIGJsb2NrJ3MgbGFuZ3VhZ2UuXG4gICAgICBydWxlcy5wdXNoKHsgZW5mb3JjZTogJ3Bvc3QnLCB0ZXN0OiAvXFwudnVlKD86XFw/fCUzRikuKmxhbmdcXC50cyQvaXUsIHVzZTogZmVhdHVyZUxvYWRlcigndHlwZXNjcmlwdCcpIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoZmVhdHVyZXMud2FzbSkge1xuICAgIHJ1bGVzLnB1c2goeyB0ZXN0OiAvXFwud2FzbSQvaXUsIHR5cGU6ICdqYXZhc2NyaXB0L2F1dG8nLCB1c2U6IGZlYXR1cmVMb2FkZXIoJ3dhc20nKSB9KTtcbiAgfVxuICBpZiAoZmVhdHVyZXMuc3R5bGVzKSB7XG4gICAgcnVsZXMucHVzaCh7XG4gICAgICB0ZXN0OiAvXFwucD9jc3MkL2l1LFxuICAgICAgdXNlOiBbXG4gICAgICAgIG1pbmlDc3NFeHRyYWN0TG9hZGVyUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIGxvYWRlcjogY3NzTG9hZGVyUGF0aCxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBpbXBvcnRMb2FkZXJzOiAxLFxuICAgICAgICAgICAgbW9kdWxlczogZmVhdHVyZXMuc3R5bGVzLmNzc01vZHVsZXMgPyB7IGF1dG86IHRydWUsIG5hbWVkRXhwb3J0OiBmYWxzZSB9IDogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmlzUG9zdGNzc05lZWRlZChmZWF0dXJlcy5zdHlsZXMpID8gZmVhdHVyZUxvYWRlcignc3R5bGVzaGVldCcsIGZlYXR1cmVzLnN0eWxlcykgOiBbXVxuICAgICAgXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBydWxlcztcbn1cblxuLyoqXG4gKiBUZWxscyB3ZWJwYWNrJ3MgZnVuY3Rpb24gZm9ybSBvZiBgZXh0ZXJuYWxzYCB0byBsZWF2ZSBPYnNpZGlhbidzIG1vZHVsZXMgYW5kIHRoZSBOb2RlIGJ1aWx0aW5zIHRvXG4gKiBgcmVxdWlyZSgpYC5cbiAqXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSByZXF1ZXN0IHdlYnBhY2sgaXMgcmVzb2x2aW5nLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGFuc3dlciB0aHJvdWdoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JzaWRpYW5QbHVnaW5XZWJwYWNrRXh0ZXJuYWxzKGRhdGE6IEV4dGVybmFsc0RhdGEsIGNhbGxiYWNrOiBFeHRlcm5hbHNDYWxsYmFjayk6IHZvaWQge1xuICBpZiAoZGF0YS5yZXF1ZXN0ICE9PSB1bmRlZmluZWQgJiYgaXNPYnNpZGlhblBsdWdpbkV4dGVybmFsKGRhdGEucmVxdWVzdCkpIHtcbiAgICBjYWxsYmFjayhudWxsLCBgY29tbW9uanMyICR7ZGF0YS5yZXF1ZXN0fWApO1xuICAgIHJldHVybjtcbiAgfVxuICBjYWxsYmFjaygpO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gUGFydCBvZiB0aGUgd2VicGFjayBob29rcyBhYm92ZS4gKi9cbi8qKlxuICogQXBwbGllcyB0aGUgYnVpbGQgZmVhdHVyZXMgdG8gYSBjb21waWxlcjogdGhlIHJ1bGVzIG9mIHtAbGluayBnZXRXZWJwYWNrRmVhdHVyZVJ1bGVzfSwgYG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luYFxuICogZm9yIGBzdHlsZXNgIHVubGVzcyB0aGUgY29uZmlnIGFscmVhZHkgYXBwbGllcyBpdCwgYW5kIGB1bnBsdWdpbi12dWVgIHdpdGggVnVlJ3MgZmVhdHVyZSBmbGFncyBmb3IgVnVlLlxuICpcbiAqIEBwYXJhbSBjb21waWxlciAtIFRoZSB3ZWJwYWNrIGNvbXBpbGVyLlxuICogQHBhcmFtIGZlYXR1cmVzIC0gVGhlIGJ1aWxkIGZlYXR1cmVzLlxuICogQHBhcmFtIGlzUHJvZHVjdGlvbkJ1aWxkIC0gV2hldGhlciB0aGlzIGlzIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAqL1xuZnVuY3Rpb24gYXBwbHlXZWJwYWNrRmVhdHVyZXMoY29tcGlsZXI6IENvbXBpbGVyLCBmZWF0dXJlczogT2JzaWRpYW5QbHVnaW5GZWF0dXJlT3B0aW9ucywgaXNQcm9kdWN0aW9uQnVpbGQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgbGV0IG1pbmlDc3NFeHRyYWN0TG9hZGVyUGF0aCA9ICcnO1xuICBsZXQgY3NzTG9hZGVyUGF0aCA9ICcnO1xuICBpZiAoZmVhdHVyZXMuc3R5bGVzKSB7XG4gICAgY29uc3Qgc3R5bGVzRmVhdHVyZSA9ICdzdHlsZXMnO1xuICAgIGNzc0xvYWRlclBhdGggPSByZXNvbHZlT3B0aW9uYWxQZWVyKHsgZmVhdHVyZTogc3R5bGVzRmVhdHVyZSwgcGFja2FnZU5hbWU6ICdjc3MtbG9hZGVyJyB9KTtcbiAgICBjb25zdCBNaW5pQ3NzRXh0cmFjdFBsdWdpbiA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChcbiAgICAgIHJlcXVpcmVPcHRpb25hbFBlZXIoeyBmZWF0dXJlOiBzdHlsZXNGZWF0dXJlLCBwYWNrYWdlTmFtZTogTUlOSV9DU1NfRVhUUkFDVF9QTFVHSU4gfSkgYXMgTWluaUNzc0V4dHJhY3RQbHVnaW5Nb2R1bGVcbiAgICApO1xuICAgIG1pbmlDc3NFeHRyYWN0TG9hZGVyUGF0aCA9IE1pbmlDc3NFeHRyYWN0UGx1Z2luLmxvYWRlcjtcbiAgICBjb25zdCBoYXNNaW5pQ3NzRXh0cmFjdFBsdWdpbiA9IGNvbXBpbGVyLm9wdGlvbnMucGx1Z2lucy5zb21lKChwbHVnaW4pID0+IHBsdWdpbi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnTWluaUNzc0V4dHJhY3RQbHVnaW4nKTtcbiAgICBpZiAoIWhhc01pbmlDc3NFeHRyYWN0UGx1Z2luKSB7XG4gICAgICBuZXcgTWluaUNzc0V4dHJhY3RQbHVnaW4oKS5hcHBseShjb21waWxlcik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbG9hZGVyUGF0aCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTChgb2JzaWRpYW4tcGx1Z2luLXdlYnBhY2stbG9hZGVyJHtleHRuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSl9YCwgaW1wb3J0Lm1ldGEudXJsKSk7XG4gIGNvbXBpbGVyLm9wdGlvbnMubW9kdWxlLnJ1bGVzLnB1c2goLi4uZ2V0V2VicGFja0ZlYXR1cmVSdWxlcyh7IGNzc0xvYWRlclBhdGgsIGZlYXR1cmVzLCBpc1Byb2R1Y3Rpb25CdWlsZCwgbG9hZGVyUGF0aCwgbWluaUNzc0V4dHJhY3RMb2FkZXJQYXRoIH0pKTtcblxuICBpZiAoZmVhdHVyZXMuZnJhbWV3b3JrICE9PSAndnVlJykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB1bnBsdWdpblZ1ZSA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChcbiAgICByZXF1aXJlT3B0aW9uYWxQZWVyKHsgZmVhdHVyZTogJ2ZyYW1ld29yazogXFwndnVlXFwnJywgcGFja2FnZU5hbWU6ICd1bnBsdWdpbi12dWUnLCBzcGVjaWZpZXI6ICd1bnBsdWdpbi12dWUvd2VicGFjaycgfSkgYXMgVW5wbHVnaW5WdWVXZWJwYWNrTW9kdWxlXG4gICk7XG4gIHVucGx1Z2luVnVlKCkuYXBwbHkoY29tcGlsZXIpO1xuICAvLyBgcHJvY2Vzcy5lbnYuTk9ERV9FTlZgIGlzIGxlZnQgb3V0OiB3ZWJwYWNrJ3MgYG1vZGVgIGRlZmluZXMgaXQsIGFuZCBhIHNlY29uZCBkZWZpbml0aW9uIGNvbmZsaWN0cy5cbiAgY29uc3QgeyAncHJvY2Vzcy5lbnYuTk9ERV9FTlYnOiBfbm9kZUVudiwgLi4udnVlRmxhZ3MgfSA9IGdldEZyYW1ld29ya0RlZmluZXMoeyBmcmFtZXdvcms6IGZlYXR1cmVzLmZyYW1ld29yaywgaXNQcm9kdWN0aW9uQnVpbGQgfSk7XG4gIG5ldyBjb21waWxlci53ZWJwYWNrLkRlZmluZVBsdWdpbih2dWVGbGFncykuYXBwbHkoY29tcGlsZXIpO1xufVxuXG4vKipcbiAqIEZpbGxzIGluIHRoZSBub3JtYWxpemVkIHdlYnBhY2sgb3B0aW9ucyB0aGUgY29uc3VtZXIgbGVmdCB1bnNldC5cbiAqXG4gKiBSdW5zIHdoaWxlIHRoZSBwbHVnaW4gaXMgYXBwbGllZCwgd2hpY2ggd2VicGFjayBkb2VzIGFmdGVyIG5vcm1hbGl6aW5nIHRoZSBjb25zdW1lcidzIGNvbmZpZyBhbmQgYmVmb3JlXG4gKiBhcHBseWluZyBpdHMgb3duIGRlZmF1bHRzLCBzbyBhbiB1bnNldCBvcHRpb24gc3RpbGwgcmVhZHMgYHVuZGVmaW5lZGAgaGVyZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBub3JtYWxpemVkIHdlYnBhY2sgb3B0aW9ucywgY2hhbmdlZCBpbiBwbGFjZS5cbiAqIEBwYXJhbSBtb2RlIC0gVGhlIGJ1aWxkIG1vZGUuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5V2VicGFja09wdGlvbkRlZmF1bHRzKG9wdGlvbnM6IFdlYnBhY2tPcHRpb25zTm9ybWFsaXplZCwgbW9kZTogQnVpbGRNb2RlKTogdm9pZCB7XG4gIGNvbnN0IGlzUHJvZHVjdGlvbkJ1aWxkID0gbW9kZSA9PT0gQnVpbGRNb2RlLlByb2R1Y3Rpb247XG4gIG9wdGlvbnMubW9kZSA/Pz0gaXNQcm9kdWN0aW9uQnVpbGQgPyAncHJvZHVjdGlvbicgOiAnZGV2ZWxvcG1lbnQnO1xuICBvcHRpb25zLnRhcmdldCA/Pz0gJ25vZGUnO1xuICBvcHRpb25zLmRldnRvb2wgPz89ICFpc1Byb2R1Y3Rpb25CdWlsZCAmJiAnaW5saW5lLXNvdXJjZS1tYXAnO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5lbnRyeSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5lbnRyeSkubGVuZ3RoID09PSAxICYmIG9wdGlvbnMuZW50cnlbJ21haW4nXT8uaW1wb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICBvcHRpb25zLmVudHJ5ID0geyBtYWluOiB7IGltcG9ydDogW2dldE9ic2lkaWFuUGx1Z2luRW50cnlQb2ludCgpXSB9IH07XG4gIH1cblxuICBvcHRpb25zLm91dHB1dC5wYXRoID8/PSBnZXRPYnNpZGlhblBsdWdpbkRpc3RGb2xkZXIobW9kZSk7XG4gIG9wdGlvbnMub3V0cHV0LmZpbGVuYW1lID8/PSBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYWluSnM7XG4gIG9wdGlvbnMub3V0cHV0LmxpYnJhcnkgPz89IHsgdHlwZTogJ2NvbW1vbmpzMicgfTtcbiAgb3B0aW9ucy5vdXRwdXQuYXN5bmNDaHVua3MgPz89IGZhbHNlO1xuXG4gIC8vIExpc3RlZCBpbiBmdWxsIHJhdGhlciB0aGFuIHdpdGggYCcuLi4nYCwgd2hpY2ggd291bGQgYnJpbmcgaW4gdGhlIGBub2RlYCBjb25kaXRpb24gb2YgYHRhcmdldDogJ25vZGUnYDogZXhwb3J0XG4gIC8vIE1hcHMgYXJlIG1hdGNoZWQgaW4gdGhlIHBhY2thZ2UncyBrZXkgb3JkZXIsIG5vdCB0aGlzIG9uZSdzLCBzbyBhIHBhY2thZ2UgbGlzdGluZyBgbm9kZWAgYmVmb3JlIGBicm93c2VyYCAoVnVlLFxuICAvLyBgZmZsYXRlYCkgd291bGQgaGFuZCBvdmVyIGl0cyBOb2RlIGJ1aWxkLCB3aGljaCBkb2VzIG5vdCBsb2FkIG9uIG1vYmlsZS5cbiAgb3B0aW9ucy5yZXNvbHZlLmNvbmRpdGlvbk5hbWVzID8/PSBbJ2Jyb3dzZXInLCAnd2VicGFjaycsIGlzUHJvZHVjdGlvbkJ1aWxkID8gJ3Byb2R1Y3Rpb24nIDogJ2RldmVsb3BtZW50JywgJ21vZHVsZScsICdpbXBvcnQnLCAncmVxdWlyZSddO1xuXG4gIGNvbnN0IHVzZXJFeHRlcm5hbHMgPSBvcHRpb25zLmV4dGVybmFscztcbiAgb3B0aW9ucy5leHRlcm5hbHMgPSBbb2JzaWRpYW5QbHVnaW5XZWJwYWNrRXh0ZXJuYWxzLCAuLi4oQXJyYXkuaXNBcnJheSh1c2VyRXh0ZXJuYWxzKSA/IHVzZXJFeHRlcm5hbHMgOiBbdXNlckV4dGVybmFsc10pXTtcbn1cblxuLyoqXG4gKiBQdXRzIGxpY2Vuc2UgY29tbWVudHMgYSBtaW5pbWl6ZXIgZXh0cmFjdGVkIGludG8gYSBgPGZpbGU+LkxJQ0VOU0UudHh0YCBiYWNrIGludG8gdGhlIGZpbGUgdGhleSBjYW1lIGZyb20uXG4gKlxuICogV2VicGFjaydzIGRlZmF1bHQgbWluaW1pemVyIG1vdmVzIGV2ZXJ5IGJ1bmRsZWQgZGVwZW5kZW5jeSdzIGxpY2Vuc2UgY29tbWVudCBpbnRvIGFcbiAqIGBtYWluLmpzLkxJQ0VOU0UudHh0YCBiZXNpZGUgYG1haW4uanNgLCB3aGljaCBubyBPYnNpZGlhbiByZWxlYXNlIHNoaXBzLCBzbyB0aGUgaW5zdGFsbGVkIHBsdWdpbiB3b3VsZFxuICogY2FycnkgY29kZSB3aXRob3V0IHRoZSBub3RpY2VzIGl0IGlzIGxpY2Vuc2VkIHVuZGVyLiBEb25lIGFmdGVyIG1pbmlmaWNhdGlvbiByYXRoZXIgdGhhbiBieSByZXBsYWNpbmdcbiAqIHRoZSBtaW5pbWl6ZXIsIHNvIGl0IGhvbGRzIHdoaWNoZXZlciBtaW5pbWl6ZXIgdGhlIGNvbnN1bWVyIG9yIHdlYnBhY2sgcGlja2VkLlxuICpcbiAqIEBwYXJhbSBjb21waWxhdGlvbiAtIFRoZSBjb21waWxhdGlvbi5cbiAqIEBwYXJhbSBjb21waWxlciAtIFRoZSBjb21waWxlciwgZm9yIHdlYnBhY2sncyBgc291cmNlc2AgY2xhc3Nlcy5cbiAqL1xuZnVuY3Rpb24gaW5saW5lRXh0cmFjdGVkTGljZW5zZXMoY29tcGlsYXRpb246IENvbXBpbGF0aW9uLCBjb21waWxlcjogQ29tcGlsZXIpOiB2b2lkIHtcbiAgY29uc3QgTElDRU5TRV9TVUZGSVggPSAnLkxJQ0VOU0UudHh0JztcbiAgZm9yIChjb25zdCBsaWNlbnNlQXNzZXQgb2YgY29tcGlsYXRpb24uZ2V0QXNzZXRzKCkpIHtcbiAgICBpZiAoIWxpY2Vuc2VBc3NldC5uYW1lLmVuZHNXaXRoKExJQ0VOU0VfU1VGRklYKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZUZpbGVOYW1lID0gbGljZW5zZUFzc2V0Lm5hbWUuc2xpY2UoMCwgLUxJQ0VOU0VfU1VGRklYLmxlbmd0aCk7XG4gICAgY29uc3Qgc291cmNlQXNzZXQgPSBjb21waWxhdGlvbi5nZXRBc3NldChzb3VyY2VGaWxlTmFtZSk7XG4gICAgaWYgKCFzb3VyY2VBc3NldCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGxpY2Vuc2VGaWxlTmFtZSA9IGxpY2Vuc2VBc3NldC5uYW1lLnNwbGl0KCcvJykuYXQoLTEpID8/IGxpY2Vuc2VBc3NldC5uYW1lO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IGAvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSAke2xpY2Vuc2VGaWxlTmFtZX0gKi9gO1xuICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUFzc2V0LnNvdXJjZS5zb3VyY2UoKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGxpY2Vuc2VzID0gbGljZW5zZUFzc2V0LnNvdXJjZS5zb3VyY2UoKS50b1N0cmluZygpLnRyaW1FbmQoKTtcbiAgICBjb25zdCB1cGRhdGVkU291cmNlID0gc291cmNlLmluY2x1ZGVzKHJlZmVyZW5jZSkgPyBzb3VyY2UucmVwbGFjZShyZWZlcmVuY2UsICgpID0+IGxpY2Vuc2VzKSA6IGAke2xpY2Vuc2VzfVxcbiR7c291cmNlfWA7XG4gICAgY29tcGlsYXRpb24udXBkYXRlQXNzZXQoc291cmNlRmlsZU5hbWUsIG5ldyBjb21waWxlci53ZWJwYWNrLnNvdXJjZXMuUmF3U291cmNlKHVwZGF0ZWRTb3VyY2UpKTtcbiAgICBjb21waWxhdGlvbi5kZWxldGVBc3NldChsaWNlbnNlQXNzZXQubmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNb3ZlcyBldmVyeSBDU1MgYXNzZXQgb2YgYSBjb21waWxhdGlvbiBpbnRvIGBzdHlsZXMuY3NzYC5cbiAqXG4gKiBAcGFyYW0gY29tcGlsYXRpb24gLSBUaGUgY29tcGlsYXRpb24uXG4gKiBAcGFyYW0gY29tcGlsZXIgLSBUaGUgY29tcGlsZXIsIGZvciB3ZWJwYWNrJ3MgYHNvdXJjZXNgIGNsYXNzZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmFtZVdlYnBhY2tDc3NBc3NldHMoY29tcGlsYXRpb246IENvbXBpbGF0aW9uLCBjb21waWxlcjogQ29tcGlsZXIpOiB2b2lkIHtcbiAgY29uc3QgY3NzQXNzZXRzID0gY29tcGlsYXRpb24uZ2V0QXNzZXRzKClcbiAgICAuZmlsdGVyKChhc3NldCkgPT4gaXNDc3NGaWxlTmFtZShhc3NldC5uYW1lKSlcbiAgICAubWFwKChhc3NldCkgPT4gKHsgZmlsZU5hbWU6IGFzc2V0Lm5hbWUsIHNvdXJjZTogYXNzZXQuc291cmNlLnNvdXJjZSgpLnRvU3RyaW5nKCkgfSkpO1xuICBjb25zdCB7IGZpbGVOYW1lc1RvUmVtb3ZlLCBzdHlsZXNDc3MgfSA9IG1lcmdlQ3NzQXNzZXRzKGNzc0Fzc2V0cyk7XG4gIGlmIChzdHlsZXNDc3MgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVOYW1lc1RvUmVtb3ZlKSB7XG4gICAgY29tcGlsYXRpb24uZGVsZXRlQXNzZXQoZmlsZU5hbWUpO1xuICB9XG4gIGNvbXBpbGF0aW9uLmVtaXRBc3NldChPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TdHlsZXNDc3MsIG5ldyBjb21waWxlci53ZWJwYWNrLnNvdXJjZXMuUmF3U291cmNlKHN0eWxlc0NzcykpO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQ0EsMEJBQTRDO0FBQzVDLGtCQUF3QjtBQUN4QixzQkFBOEI7QUFTOUIsd0NBQXdDO0FBQ3hDLG1DQVdPO0FBQ1Asc0NBS087QUFDUCxnREFBOEM7QUE5RDlDLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sU0FBUyw4QkFBOEI7QUFDL0YsTUFBSSxPQUFPLGVBQWUsVUFBVTtBQUNsQyxVQUFNLGVBQWU7QUFDckIsVUFBTSxNQUFNLGFBQWEsVUFBVTtBQUNuQyxRQUFJLE9BQU8sSUFBSSxrQkFBa0IsWUFBWTtBQUMzQyxhQUFPLElBQUksY0FBYyxVQUFVLEVBQUU7QUFBQSxJQUN2QztBQUFBLEVBQ0Y7QUFHQSxTQUFPLE9BQU8sV0FBVyxjQUFjLEtBQUssYUFBYSxTQUFTO0FBQ3BFLEdBQUc7QUFnSUgsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sMEJBQTBCO0FBa0N6QixNQUFNLDRCQUE2RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1qRSxZQUE2QixVQUE4QyxDQUFDLEdBQUc7QUFBbEQ7QUFBQSxFQUFtRDtBQUFBLEVBQW5EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRN0IsTUFBTSxVQUEwQjtBQUNyQyxVQUFNLE9BQU8sS0FBSyxRQUFRLFFBQVEsb0JBQW9CLFNBQVMsT0FBTztBQUN0RSwrQkFBMkIsU0FBUyxTQUFTLElBQUk7QUFDakQseUJBQXFCLFVBQVUsS0FBSyxTQUFT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
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy93ZWJwYWNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/IChmdW5jdGlvbiBnZXRDanNJbXBvcnRNZXRhVXJsKCkge1xuICBpZiAodHlwZW9mIF9fZmlsZW5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZShcIm5vZGU6dXJsXCIpO1xuICAgIGlmICh0eXBlb2YgdXJsLnBhdGhUb0ZpbGVVUkwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgfVxuICB9XG4gIHJldHVybiBnbG9iYWxUaGlzLmxvY2F0aW9uPy5ocmVmID8/IFwiXCI7XG59KSgpO1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIEJ1aWxkcyBhbiBPYnNpZGlhbiBwbHVnaW4gd2l0aCB3ZWJwYWNrOiBhIHdlYnBhY2sgcGx1Z2luIHRoYXQgZ2l2ZXMgYSBidWlsZCB0aGUgc2FtZSBgbWFpbi5qc2AgK1xuICogYHN0eWxlcy5jc3NgICsgYG1hbmlmZXN0Lmpzb25gIGxheW91dCB0aGUgZXNidWlsZCBidWlsZGVyIHByb2R1Y2VzLCBkZXBsb3lzIGEgd2F0Y2ggYnVpbGQgaW50byB0aGUgdmF1bHQsXG4gKiBhbmQgZmlsbHMgaW4gb25seSB0aGUgb3B0aW9ucyB0aGUgY29uc3VtZXIncyBvd24gYHdlYnBhY2suY29uZmlnYCBsZWF2ZXMgdW5zZXQuXG4gKlxuICogYHdlYnBhY2tgIGlzIGFuIG9wdGlvbmFsIHBlZXIgZGVwZW5kZW5jeS4gVGhpcyBtb2R1bGUgb25seSBpbXBvcnRzIGl0cyB0eXBlcyBhbmQgcmVhY2hlcyB3ZWJwYWNrJ3NcbiAqIGNsYXNzZXMgdGhyb3VnaCBgY29tcGlsZXIud2VicGFja2AsIHNvIGEgcGx1Z2luIGJ1aWx0IHdpdGggZXNidWlsZCBpbnN0YWxscyBub3RoaW5nIGV4dHJhLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcGlsYXRpb24sXG4gIENvbXBpbGVyLFxuICBSdWxlU2V0UnVsZSxcbiAgUnVsZVNldFVzZUl0ZW0sXG4gIFdlYnBhY2tPcHRpb25zTm9ybWFsaXplZCxcbiAgV2VicGFja1BsdWdpbkluc3RhbmNlXG59IGZyb20gJ3dlYnBhY2snO1xuXG5pbXBvcnQgeyBleHRyYWN0RGVmYXVsdEV4cG9ydEludGVyb3AgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGV4dG5hbWUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuXG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuUGx1Z2luRGVwbG95bWVudE9wdGlvbnMgfSBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1idWlsZC50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuUGx1Z2luRmVhdHVyZU9wdGlvbnMsXG4gIE9ic2lkaWFuUGx1Z2luU3R5bGVzT3B0aW9uc1xufSBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1mZWF0dXJlcy50cyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuUGx1Z2luV2VicGFja0xvYWRlck9wdGlvbnMgfSBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi13ZWJwYWNrLWxvYWRlci50cyc7XG5cbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgQnVpbGRNb2RlLFxuICBjbGVhbk9ic2lkaWFuUGx1Z2luRGlzdEZvbGRlcixcbiAgY29tcGxldGVPYnNpZGlhblBsdWdpbkRpc3RGb2xkZXIsXG4gIGdldE9ic2lkaWFuUGx1Z2luQmFubmVyLFxuICBnZXRPYnNpZGlhblBsdWdpbkRpc3RGb2xkZXIsXG4gIGdldE9ic2lkaWFuUGx1Z2luRW50cnlQb2ludCxcbiAgaXNDc3NGaWxlTmFtZSxcbiAgaXNPYnNpZGlhblBsdWdpbkV4dGVybmFsLFxuICBtZXJnZUNzc0Fzc2V0cyxcbiAgcmVzb2x2ZU9ic2lkaWFuUGx1Z2luQnVpbGRDb250ZXh0XG59IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWJ1aWxkLnRzJztcbmltcG9ydCB7XG4gIGdldEZyYW1ld29ya0RlZmluZXMsXG4gIGlzUG9zdGNzc05lZWRlZCxcbiAgcmVxdWlyZU9wdGlvbmFsUGVlcixcbiAgcmVzb2x2ZU9wdGlvbmFsUGVlclxufSBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1mZWF0dXJlcy50cyc7XG5pbXBvcnQgeyBkZXBsb3lUb09ic2lkaWFuUGx1Z2luc0ZvbGRlciB9IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2lucy1mb2xkZXItZGVwbG95bWVudC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldFdlYnBhY2tGZWF0dXJlUnVsZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldFdlYnBhY2tGZWF0dXJlUnVsZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBhdGggb2YgYGNzcy1sb2FkZXJgLCBmb3IgdGhlIHN0eWxlc2hlZXQgcnVsZS5cbiAgICovXG4gIHJlYWRvbmx5IGNzc0xvYWRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJ1aWxkIGZlYXR1cmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZmVhdHVyZXM6IE9ic2lkaWFuUGx1Z2luRmVhdHVyZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIHRvb2xraXQncyBvd24gbG9hZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiBgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5gJ3MgbG9hZGVyLCBmb3IgdGhlIHN0eWxlc2hlZXQgcnVsZS5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmlDc3NFeHRyYWN0TG9hZGVyUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBPYnNpZGlhblBsdWdpbldlYnBhY2tQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuUGx1Z2luV2VicGFja1BsdWdpbk9wdGlvbnMgZXh0ZW5kcyBPYnNpZGlhblBsdWdpbkRlcGxveW1lbnRPcHRpb25zLCBPYnNpZGlhblBsdWdpbkZlYXR1cmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBidWlsZCBtb2RlLiBEZWZhdWx0cyB0byB7QGxpbmsgQnVpbGRNb2RlLkRldmVsb3BtZW50fSB3aGVuIHdlYnBhY2sgd2F0Y2hlcyAoYHdlYnBhY2sgLS13YXRjaGApIG9yXG4gICAqIGl0cyBgbW9kZWAgaXMgYGRldmVsb3BtZW50YCwgYW5kIHtAbGluayBCdWlsZE1vZGUuUHJvZHVjdGlvbn0gb3RoZXJ3aXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IEJ1aWxkTW9kZTtcbn1cblxuLyoqXG4gKiBUaGUgY2FsbGJhY2sgd2VicGFjaydzIGZ1bmN0aW9uIGZvcm0gb2YgYGV4dGVybmFsc2AgdGFrZXMuXG4gKi9cbnR5cGUgRXh0ZXJuYWxzQ2FsbGJhY2sgPSAoZXJyb3I/OiBFcnJvciB8IG51bGwsIHJlc3VsdD86IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgYXJndW1lbnQgd2VicGFjaydzIGZ1bmN0aW9uIGZvcm0gb2YgYGV4dGVybmFsc2AgcmVjZWl2ZXMuXG4gKi9cbmludGVyZmFjZSBFeHRlcm5hbHNEYXRhIHtcbiAgcmVhZG9ubHkgcmVxdWVzdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgYG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luYCBjbGFzcy5cbiAqL1xuaW50ZXJmYWNlIE1pbmlDc3NFeHRyYWN0UGx1Z2luQ2xhc3Mge1xuICByZWFkb25seSBsb2FkZXI6IHN0cmluZztcbiAgbmV3ICgpOiBXZWJwYWNrUGx1Z2luSW5zdGFuY2U7XG59XG5cbi8qKlxuICogVGhlIHBhcnQgb2YgYG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luYCB0aGUgYWRhcHRlciB1c2VzLlxuICovXG5pbnRlcmZhY2UgTWluaUNzc0V4dHJhY3RQbHVnaW5Nb2R1bGUge1xuICByZWFkb25seSBkZWZhdWx0OiBNaW5pQ3NzRXh0cmFjdFBsdWdpbkNsYXNzO1xufVxuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIGB1bnBsdWdpbi12dWUvd2VicGFja2AgdGhlIGFkYXB0ZXIgdXNlcy5cbiAqL1xuaW50ZXJmYWNlIFVucGx1Z2luVnVlV2VicGFja01vZHVsZSB7XG4gIHJlYWRvbmx5IGRlZmF1bHQ6ICgpID0+IFdlYnBhY2tQbHVnaW5JbnN0YW5jZTtcbn1cblxuY29uc3QgUExVR0lOX05BTUUgPSAnT2JzaWRpYW5QbHVnaW5XZWJwYWNrUGx1Z2luJztcbmNvbnN0IE1JTklfQ1NTX0VYVFJBQ1RfUExVR0lOID0gJ21pbmktY3NzLWV4dHJhY3QtcGx1Z2luJztcblxuLyoqXG4gKiBBIHdlYnBhY2sgcGx1Z2luIHRoYXQgYnVpbGRzIGFuIE9ic2lkaWFuIHBsdWdpbi5cbiAqXG4gKiBXaGF0IGl0IGRvZXMsIGVhY2ggb25seSB3aGVuIHRoZSBjb25zdW1lcidzIGNvbmZpZyBoYXMgbm90IHNhaWQgb3RoZXJ3aXNlOlxuICpcbiAqIC0gYGVudHJ5YCBpcyBgc3JjL21haW4udHNgLCBhbmQgYG1vZGVgIGZvbGxvd3MgdGhlIGJ1aWxkIG1vZGUuXG4gKiAtIFRoZSBvdXRwdXQgaXMgb25lIENvbW1vbkpTIChgY29tbW9uanMyYCkgYG1haW4uanNgIGluIGBkaXN0L2J1aWxkYCAoYGRpc3QvZGV2YCBpbiBkZXZlbG9wbWVudCksIHdpdGggbm9cbiAqICAgYXN5bmMgY2h1bmtzLCBzbyBhIGR5bmFtaWMgaW1wb3J0IGNhbm5vdCBiZWNvbWUgYSBzaWJsaW5nIGZpbGUuXG4gKiAtIGB0YXJnZXRgIGlzIGBub2RlYCwgd2hpY2ggaXMgd2hhdCBPYnNpZGlhbidzIHJlbmRlcmVyIHJ1bnMsIHNvIE5vZGUgYnVpbHRpbnMgcmVzb2x2ZSwgd2hpbGUgdGhlIGV4cG9ydFxuICogICBjb25kaXRpb25zIGFyZSB0aGUgYnJvd3NlcidzIChgYnJvd3NlcmAsIGB3ZWJwYWNrYCwgdGhlIG1vZGUsIGBtb2R1bGVgLCBgaW1wb3J0YCwgYHJlcXVpcmVgLCBhbmQgbmV2ZXIgYG5vZGVgKSxcbiAqICAgc28gcGFja2FnZXMgaGFuZCBvdmVyIHRoZWlyIGJyb3dzZXIgYnVpbGRzLCBhcyBvbiBtb2JpbGUgdGhleSBtdXN0LlxuICogLSBgZGV2dG9vbGAgaXMgYW4gaW5saW5lIHNvdXJjZSBtYXAgaW4gZGV2ZWxvcG1lbnQgb25seS5cbiAqXG4gKiBBbmQgYWx3YXlzOiBPYnNpZGlhbidzIG93biBtb2R1bGVzIChgb2JzaWRpYW5gLCBgZWxlY3Ryb25gLCBDb2RlTWlycm9yLCBMZXplcikgYW5kIHRoZSBOb2RlIGJ1aWx0aW5zIGFyZVxuICogZXh0ZXJuYWwgYmVzaWRlIHRoZSBjb25zdW1lcidzIG93biBgZXh0ZXJuYWxzYCwgdGhlIGdlbmVyYXRlZC1maWxlIGJhbm5lciBoZWFkcyBgbWFpbi5qc2AsIGxpY2Vuc2VcbiAqIGNvbW1lbnRzIGEgbWluaW1pemVyIGV4dHJhY3RlZCBpbnRvIGBtYWluLmpzLkxJQ0VOU0UudHh0YCAod2hpY2ggbm8gT2JzaWRpYW4gcmVsZWFzZSBzaGlwcykgYXJlIHB1dCBiYWNrXG4gKiBpbnRvIGBtYWluLmpzYCwgdGhlIG91dHB1dCBmb2xkZXIgaXMgZW1wdGllZCBiZWZvcmUgdGhlIGZpcnN0IGJ1aWxkLCBldmVyeSBlbWl0dGVkIENTUyBmaWxlIGVuZHMgdXAgaW5cbiAqIGBzdHlsZXMuY3NzYCwgYG1hbmlmZXN0Lmpzb25gIChhbmQgaW4gZGV2ZWxvcG1lbnQgYC5ob3RyZWxvYWRgKSBpcyBjb3BpZWQgYmVzaWRlIGl0LCBhbmQgYSBkZXZlbG9wbWVudFxuICogYnVpbGQgaXMgZGVwbG95ZWQgaW50byB0aGUgdmF1bHQgbmFtZWQgYnkgYE9CU0lESUFOX0NPTkZJR19GT0xERVJgLlxuICpcbiAqIFR5cGVTY3JpcHQgc3RheXMgdGhlIGNvbnN1bWVyJ3MgY2hvaWNlIG9mIGxvYWRlciwgYXMgaXQgd291bGQgYmUgd2l0aG91dCB0aGlzIHBsdWdpbi4gVGhlIGJ1aWxkIGZlYXR1cmVzXG4gKiAoe0BsaW5rIE9ic2lkaWFuUGx1Z2luRmVhdHVyZU9wdGlvbnN9KSBhcmUgdGhlIHBsdWdpbidzOlxuICpcbiAqIC0gYGZyYW1ld29yazogJ3JlYWN0JyB8ICdwcmVhY3QnYCBuZWVkcyBub3RoaW5nIGhlcmU6IHRoZSBUeXBlU2NyaXB0IGxvYWRlciByZWFkcyB0aGUgYXV0b21hdGljIEpTWCBydW50aW1lIGZyb20gdGhlXG4gKiAgIHRvb2xraXQncyB0c2NvbmZpZyBwcmVzZXQsIGFuZCB3ZWJwYWNrJ3MgYG1vZGVgIGRlZmluZXMgYHByb2Nlc3MuZW52Lk5PREVfRU5WYC5cbiAqIC0gYGZyYW1ld29yazogJ3NvbGlkJyB8ICdzdmVsdGUnYCBhZGRzIHJ1bGVzIHRoYXQgY29tcGlsZSB0aGUgY29tcG9uZW50cyB3aXRoIHRoZSB0b29sa2l0J3Mgc2hhcmVkIHRyYW5zZm9ybXMsIGFuZFxuICogICBgJ3Z1ZSdgIGFwcGxpZXMgYHVucGx1Z2luLXZ1ZWAgYW5kIGRlZmluZXMgVnVlJ3MgZmVhdHVyZSBmbGFncy5cbiAqIC0gYHN0eWxlc2AgYWRkcyB0aGUgb25lIHJ1bGUgZXZlcnkgc3R5bGVzaGVldCBnb2VzIHRocm91Z2ggKFBvc3RDU1MgYW5kIFRhaWx3aW5kLCB0aGVuIGBjc3MtbG9hZGVyYCwgc2NvcGluZ1xuICogICBgKi5tb2R1bGUuY3NzYCBvbmx5IHdpdGggYGNzc01vZHVsZXNgLCB0aGVuIGBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbmApLCBhbmQgYXBwbGllcyBgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5gXG4gKiAgIHVubGVzcyB0aGUgY29uZmlnIGFscmVhZHkgZG9lczsgbGVhdmUgeW91ciBvd24gYC5jc3NgIHJ1bGUgb3V0LiBgc3R5bGVzOiB7fWAgY29tcGlsZXMgcGxhaW4gQ1NTLlxuICogLSBgd2FzbWAgaW1wb3J0cyBhIGAud2FzbWAgbW9kdWxlIGFzIGl0cyBieXRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2lkaWFuUGx1Z2luV2VicGFja1BsdWdpbiBpbXBsZW1lbnRzIFdlYnBhY2tQbHVnaW5JbnN0YW5jZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBwbHVnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBPYnNpZGlhblBsdWdpbldlYnBhY2tQbHVnaW5PcHRpb25zfS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE9ic2lkaWFuUGx1Z2luV2VicGFja1BsdWdpbk9wdGlvbnMgPSB7fSkge31cblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gV2VicGFjayBob29rczsgZXhlcmNpc2VkIGJ5IHRoZSBidW5kbGVyIGludGVncmF0aW9uIHRlc3QgYWdhaW5zdCBhIHJlYWwgd2VicGFjayBidWlsZC4gKi9cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHBsdWdpbiB0byBhIHdlYnBhY2sgY29tcGlsZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb21waWxlciAtIFRoZSB3ZWJwYWNrIGNvbXBpbGVyLlxuICAgKi9cbiAgcHVibGljIGFwcGx5KGNvbXBpbGVyOiBDb21waWxlcik6IHZvaWQge1xuICAgIGNvbnN0IG1vZGUgPSB0aGlzLm9wdGlvbnMubW9kZSA/PyBnZXRXZWJwYWNrQnVpbGRNb2RlKGNvbXBpbGVyLm9wdGlvbnMpO1xuICAgIGFwcGx5V2VicGFja09wdGlvbkRlZmF1bHRzKGNvbXBpbGVyLm9wdGlvbnMsIG1vZGUpO1xuICAgIGFwcGx5V2VicGFja0ZlYXR1cmVzKGNvbXBpbGVyLCB0aGlzLm9wdGlvbnMsIG1vZGUgPT09IEJ1aWxkTW9kZS5Qcm9kdWN0aW9uKTtcbiAgICAvLyBBZGRlZCBhdCB0aGUgcmVwb3J0IHN0YWdlLCBhZnRlciBtaW5pZmljYXRpb24sIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBzdHJpcCBpdCBhcyBhbiBvcmRpbmFyeSBjb21tZW50LlxuICAgIG5ldyBjb21waWxlci53ZWJwYWNrLkJhbm5lclBsdWdpbih7XG4gICAgICBiYW5uZXI6IGdldE9ic2lkaWFuUGx1Z2luQmFubmVyKCd3ZWJwYWNrJyksXG4gICAgICByYXc6IHRydWUsXG4gICAgICBzdGFnZTogY29tcGlsZXIud2VicGFjay5Db21waWxhdGlvbi5QUk9DRVNTX0FTU0VUU19TVEFHRV9SRVBPUlQsXG4gICAgICB0ZXN0OiAvXFwuanMkL3VcbiAgICB9KS5hcHBseShjb21waWxlcik7XG5cbiAgICBjb25zdCBidWlsZENvbnRleHRQcm9taXNlID0gcmVzb2x2ZU9ic2lkaWFuUGx1Z2luQnVpbGRDb250ZXh0KHtcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIC4uLihjb21waWxlci5vcHRpb25zLm91dHB1dC5wYXRoICE9PSB1bmRlZmluZWQgJiYgeyBkaXN0Rm9sZGVyOiBjb21waWxlci5vcHRpb25zLm91dHB1dC5wYXRoIH0pLFxuICAgICAgbW9kZVxuICAgIH0pO1xuICAgIGxldCBpc0Rpc3RGb2xkZXJDbGVhbmVkID0gZmFsc2U7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcmVwYXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgYnVpbGRDb250ZXh0ID0gYXdhaXQgYnVpbGRDb250ZXh0UHJvbWlzZTtcbiAgICAgIGlmIChpc0Rpc3RGb2xkZXJDbGVhbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlzRGlzdEZvbGRlckNsZWFuZWQgPSB0cnVlO1xuICAgICAgYXdhaXQgY2xlYW5PYnNpZGlhblBsdWdpbkRpc3RGb2xkZXIoYnVpbGRDb250ZXh0LmRpc3RGb2xkZXIpO1xuICAgIH1cbiAgICBjb21waWxlci5ob29rcy5iZWZvcmVSdW4udGFwUHJvbWlzZShQTFVHSU5fTkFNRSwgcHJlcGFyZSk7XG4gICAgY29tcGlsZXIuaG9va3Mud2F0Y2hSdW4udGFwUHJvbWlzZShQTFVHSU5fTkFNRSwgcHJlcGFyZSk7XG5cbiAgICBjb21waWxlci5ob29rcy50aGlzQ29tcGlsYXRpb24udGFwKFBMVUdJTl9OQU1FLCAoY29tcGlsYXRpb24pID0+IHtcbiAgICAgIGNvbXBpbGF0aW9uLmhvb2tzLnByb2Nlc3NBc3NldHMudGFwKFxuICAgICAgICB7IG5hbWU6IFBMVUdJTl9OQU1FLCBzdGFnZTogY29tcGlsZXIud2VicGFjay5Db21waWxhdGlvbi5QUk9DRVNTX0FTU0VUU19TVEFHRV9TVU1NQVJJWkUgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHJlbmFtZVdlYnBhY2tDc3NBc3NldHMoY29tcGlsYXRpb24sIGNvbXBpbGVyKTtcbiAgICAgICAgICBpbmxpbmVFeHRyYWN0ZWRMaWNlbnNlcyhjb21waWxhdGlvbiwgY29tcGlsZXIpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29tcGlsZXIuaG9va3MuYWZ0ZXJFbWl0LnRhcFByb21pc2UoUExVR0lOX05BTUUsIGFzeW5jIChjb21waWxhdGlvbikgPT4ge1xuICAgICAgaWYgKGNvbXBpbGF0aW9uLmdldFN0YXRzKCkuaGFzRXJyb3JzKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYnVpbGRDb250ZXh0ID0gYXdhaXQgYnVpbGRDb250ZXh0UHJvbWlzZTtcbiAgICAgIGF3YWl0IGNvbXBsZXRlT2JzaWRpYW5QbHVnaW5EaXN0Rm9sZGVyKGJ1aWxkQ29udGV4dCk7XG4gICAgICBhd2FpdCBkZXBsb3lUb09ic2lkaWFuUGx1Z2luc0ZvbGRlcihidWlsZENvbnRleHQpO1xuICAgIH0pO1xuICB9XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG59XG5cbi8qKlxuICogRGVjaWRlcyB0aGUgYnVpbGQgbW9kZSBvZiBhIHdlYnBhY2sgYnVpbGQgZnJvbSB0aGUgY29uc3VtZXIncyBjb25maWc6IGRldmVsb3BtZW50IHdoZW4gd2VicGFjayB3YXRjaGVzXG4gKiBvciBpdHMgYG1vZGVgIGlzIGBkZXZlbG9wbWVudGAsIHByb2R1Y3Rpb24gb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG5vcm1hbGl6ZWQgd2VicGFjayBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGJ1aWxkIG1vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWJwYWNrQnVpbGRNb2RlKG9wdGlvbnM6IFBpY2s8V2VicGFja09wdGlvbnNOb3JtYWxpemVkLCAnbW9kZScgfCAnd2F0Y2gnPik6IEJ1aWxkTW9kZSB7XG4gIHJldHVybiBvcHRpb25zLndhdGNoIHx8IG9wdGlvbnMubW9kZSA9PT0gJ2RldmVsb3BtZW50JyA/IEJ1aWxkTW9kZS5EZXZlbG9wbWVudCA6IEJ1aWxkTW9kZS5Qcm9kdWN0aW9uO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbW9kdWxlIHJ1bGVzIHRoZSBidWlsZCBmZWF0dXJlcyBhZGQsIGVhY2ggcnVubmluZyB0aGUgdG9vbGtpdCdzIG93biBsb2FkZXI6IFNvbGlkJ3MgSlNYIGJlZm9yZSB0aGVcbiAqIHByb2plY3QncyBUeXBlU2NyaXB0IGxvYWRlciwgU3ZlbHRlIGNvbXBvbmVudHMgYW5kIG1vZHVsZXMsIGAud2FzbWAgbW9kdWxlcyBhcyBKYXZhU2NyaXB0LCBhbmQgd2l0aCBgc3R5bGVzYCB0aGVcbiAqIHN0eWxlc2hlZXQgcnVsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBHZXRXZWJwYWNrRmVhdHVyZVJ1bGVzUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBydWxlcywgZW1wdHkgd2hlbiBubyBmZWF0dXJlIG5lZWRzIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYnBhY2tGZWF0dXJlUnVsZXMocGFyYW1zOiBHZXRXZWJwYWNrRmVhdHVyZVJ1bGVzUGFyYW1zKTogUnVsZVNldFJ1bGVbXSB7XG4gIGNvbnN0IHsgY3NzTG9hZGVyUGF0aCwgZmVhdHVyZXMsIGlzUHJvZHVjdGlvbkJ1aWxkLCBsb2FkZXJQYXRoLCBtaW5pQ3NzRXh0cmFjdExvYWRlclBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgcnVsZXM6IFJ1bGVTZXRSdWxlW10gPSBbXTtcblxuICBmdW5jdGlvbiBmZWF0dXJlTG9hZGVyKGtpbmQ6IE9ic2lkaWFuUGx1Z2luV2VicGFja0xvYWRlck9wdGlvbnNbJ2tpbmQnXSwgc3R5bGVzPzogT2JzaWRpYW5QbHVnaW5TdHlsZXNPcHRpb25zKTogUnVsZVNldFVzZUl0ZW1bXSB7XG4gICAgY29uc3Qgb3B0aW9uczogT2JzaWRpYW5QbHVnaW5XZWJwYWNrTG9hZGVyT3B0aW9ucyA9IHsgaXNQcm9kdWN0aW9uQnVpbGQsIGtpbmQsIC4uLihzdHlsZXMgJiYgeyBzdHlsZXMgfSkgfTtcbiAgICByZXR1cm4gW3sgbG9hZGVyOiBsb2FkZXJQYXRoLCBvcHRpb25zIH1dO1xuICB9XG5cbiAgc3dpdGNoIChmZWF0dXJlcy5mcmFtZXdvcmspIHtcbiAgICBjYXNlICdzb2xpZCc6IHtcbiAgICAgIHJ1bGVzLnB1c2goeyBlbmZvcmNlOiAncHJlJywgdGVzdDogL1xcLltqdF1zeCQvaXUsIHVzZTogZmVhdHVyZUxvYWRlcignanN4JykgfSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnc3ZlbHRlJzoge1xuICAgICAgcnVsZXMucHVzaChcbiAgICAgICAgeyB0ZXN0OiAvXFwuc3ZlbHRlJC9pdSwgdXNlOiBmZWF0dXJlTG9hZGVyKCdzdmVsdGUnKSB9LFxuICAgICAgICB7IGVuZm9yY2U6ICdwcmUnLCB0ZXN0OiAvXFwuc3ZlbHRlXFwuW2NtXT9banRdcyQvaXUsIHVzZTogZmVhdHVyZUxvYWRlcignc3ZlbHRlJykgfVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd2dWUnOiB7XG4gICAgICAvLyBgdW5wbHVnaW4tdnVlYCBoYW5kcyBhIGA8c2NyaXB0IGxhbmc9XCJ0c1wiPmAgYmxvY2sgb24gYXMgYSBtb2R1bGUgb2YgaXRzIG93biBhZnRlciB0aGUgcHJvamVjdCdzIFR5cGVTY3JpcHRcbiAgICAgIC8vIExvYWRlciByYW4sIHNvIGEgcG9zdCBsb2FkZXIgc3RyaXBzIGl0cyB0eXBlcy4gSXRzIGlkIG5hbWVzIHRoZSBjb21wb25lbnQgYW5kIHRoZSBibG9jaydzIGxhbmd1YWdlLlxuICAgICAgcnVsZXMucHVzaCh7IGVuZm9yY2U6ICdwb3N0JywgdGVzdDogL1xcLnZ1ZSg/OlxcP3wlM0YpLipsYW5nXFwudHMkL2l1LCB1c2U6IGZlYXR1cmVMb2FkZXIoJ3R5cGVzY3JpcHQnKSB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGZlYXR1cmVzLndhc20pIHtcbiAgICBydWxlcy5wdXNoKHsgdGVzdDogL1xcLndhc20kL2l1LCB0eXBlOiAnamF2YXNjcmlwdC9hdXRvJywgdXNlOiBmZWF0dXJlTG9hZGVyKCd3YXNtJykgfSk7XG4gIH1cbiAgaWYgKGZlYXR1cmVzLnN0eWxlcykge1xuICAgIHJ1bGVzLnB1c2goe1xuICAgICAgdGVzdDogL1xcLnA/Y3NzJC9pdSxcbiAgICAgIHVzZTogW1xuICAgICAgICBtaW5pQ3NzRXh0cmFjdExvYWRlclBhdGgsXG4gICAgICAgIHtcbiAgICAgICAgICBsb2FkZXI6IGNzc0xvYWRlclBhdGgsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgaW1wb3J0TG9hZGVyczogMSxcbiAgICAgICAgICAgIG1vZHVsZXM6IGZlYXR1cmVzLnN0eWxlcy5jc3NNb2R1bGVzID8geyBhdXRvOiB0cnVlLCBuYW1lZEV4cG9ydDogZmFsc2UgfSA6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAuLi5pc1Bvc3Rjc3NOZWVkZWQoZmVhdHVyZXMuc3R5bGVzKSA/IGZlYXR1cmVMb2FkZXIoJ3N0eWxlc2hlZXQnLCBmZWF0dXJlcy5zdHlsZXMpIDogW11cbiAgICAgIF1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcnVsZXM7XG59XG5cbi8qKlxuICogVGVsbHMgd2VicGFjaydzIGZ1bmN0aW9uIGZvcm0gb2YgYGV4dGVybmFsc2AgdG8gbGVhdmUgT2JzaWRpYW4ncyBtb2R1bGVzIGFuZCB0aGUgTm9kZSBidWlsdGlucyB0b1xuICogYHJlcXVpcmUoKWAuXG4gKlxuICogQHBhcmFtIGRhdGEgLSBUaGUgcmVxdWVzdCB3ZWJwYWNrIGlzIHJlc29sdmluZy5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBhbnN3ZXIgdGhyb3VnaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2lkaWFuUGx1Z2luV2VicGFja0V4dGVybmFscyhkYXRhOiBFeHRlcm5hbHNEYXRhLCBjYWxsYmFjazogRXh0ZXJuYWxzQ2FsbGJhY2spOiB2b2lkIHtcbiAgaWYgKGRhdGEucmVxdWVzdCAhPT0gdW5kZWZpbmVkICYmIGlzT2JzaWRpYW5QbHVnaW5FeHRlcm5hbChkYXRhLnJlcXVlc3QpKSB7XG4gICAgY2FsbGJhY2sobnVsbCwgYGNvbW1vbmpzMiAke2RhdGEucmVxdWVzdH1gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY2FsbGJhY2soKTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFBhcnQgb2YgdGhlIHdlYnBhY2sgaG9va3MgYWJvdmUuICovXG4vKipcbiAqIEFwcGxpZXMgdGhlIGJ1aWxkIGZlYXR1cmVzIHRvIGEgY29tcGlsZXI6IHRoZSBydWxlcyBvZiB7QGxpbmsgZ2V0V2VicGFja0ZlYXR1cmVSdWxlc30sIGBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbmBcbiAqIGZvciBgc3R5bGVzYCB1bmxlc3MgdGhlIGNvbmZpZyBhbHJlYWR5IGFwcGxpZXMgaXQsIGFuZCBgdW5wbHVnaW4tdnVlYCB3aXRoIFZ1ZSdzIGZlYXR1cmUgZmxhZ3MgZm9yIFZ1ZS5cbiAqXG4gKiBAcGFyYW0gY29tcGlsZXIgLSBUaGUgd2VicGFjayBjb21waWxlci5cbiAqIEBwYXJhbSBmZWF0dXJlcyAtIFRoZSBidWlsZCBmZWF0dXJlcy5cbiAqIEBwYXJhbSBpc1Byb2R1Y3Rpb25CdWlsZCAtIFdoZXRoZXIgdGhpcyBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5V2VicGFja0ZlYXR1cmVzKGNvbXBpbGVyOiBDb21waWxlciwgZmVhdHVyZXM6IE9ic2lkaWFuUGx1Z2luRmVhdHVyZU9wdGlvbnMsIGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuKTogdm9pZCB7XG4gIGxldCBtaW5pQ3NzRXh0cmFjdExvYWRlclBhdGggPSAnJztcbiAgbGV0IGNzc0xvYWRlclBhdGggPSAnJztcbiAgaWYgKGZlYXR1cmVzLnN0eWxlcykge1xuICAgIGNvbnN0IHN0eWxlc0ZlYXR1cmUgPSAnc3R5bGVzJztcbiAgICBjc3NMb2FkZXJQYXRoID0gcmVzb2x2ZU9wdGlvbmFsUGVlcih7IGZlYXR1cmU6IHN0eWxlc0ZlYXR1cmUsIHBhY2thZ2VOYW1lOiAnY3NzLWxvYWRlcicgfSk7XG4gICAgY29uc3QgTWluaUNzc0V4dHJhY3RQbHVnaW4gPSBleHRyYWN0RGVmYXVsdEV4cG9ydEludGVyb3AoXG4gICAgICByZXF1aXJlT3B0aW9uYWxQZWVyKHsgZmVhdHVyZTogc3R5bGVzRmVhdHVyZSwgcGFja2FnZU5hbWU6IE1JTklfQ1NTX0VYVFJBQ1RfUExVR0lOIH0pIGFzIE1pbmlDc3NFeHRyYWN0UGx1Z2luTW9kdWxlXG4gICAgKTtcbiAgICBtaW5pQ3NzRXh0cmFjdExvYWRlclBhdGggPSBNaW5pQ3NzRXh0cmFjdFBsdWdpbi5sb2FkZXI7XG4gICAgY29uc3QgaGFzTWluaUNzc0V4dHJhY3RQbHVnaW4gPSBjb21waWxlci5vcHRpb25zLnBsdWdpbnMuc29tZSgocGx1Z2luKSA9PiBwbHVnaW4uY29uc3RydWN0b3IubmFtZSA9PT0gJ01pbmlDc3NFeHRyYWN0UGx1Z2luJyk7XG4gICAgaWYgKCFoYXNNaW5pQ3NzRXh0cmFjdFBsdWdpbikge1xuICAgICAgbmV3IE1pbmlDc3NFeHRyYWN0UGx1Z2luKCkuYXBwbHkoY29tcGlsZXIpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxvYWRlclBhdGggPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoYG9ic2lkaWFuLXBsdWdpbi13ZWJwYWNrLWxvYWRlciR7ZXh0bmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpfWAsIGltcG9ydC5tZXRhLnVybCkpO1xuICBjb21waWxlci5vcHRpb25zLm1vZHVsZS5ydWxlcy5wdXNoKC4uLmdldFdlYnBhY2tGZWF0dXJlUnVsZXMoeyBjc3NMb2FkZXJQYXRoLCBmZWF0dXJlcywgaXNQcm9kdWN0aW9uQnVpbGQsIGxvYWRlclBhdGgsIG1pbmlDc3NFeHRyYWN0TG9hZGVyUGF0aCB9KSk7XG5cbiAgaWYgKGZlYXR1cmVzLmZyYW1ld29yayAhPT0gJ3Z1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdW5wbHVnaW5WdWUgPSBleHRyYWN0RGVmYXVsdEV4cG9ydEludGVyb3AoXG4gICAgcmVxdWlyZU9wdGlvbmFsUGVlcih7IGZlYXR1cmU6ICdmcmFtZXdvcms6IFxcJ3Z1ZVxcJycsIHBhY2thZ2VOYW1lOiAndW5wbHVnaW4tdnVlJywgc3BlY2lmaWVyOiAndW5wbHVnaW4tdnVlL3dlYnBhY2snIH0pIGFzIFVucGx1Z2luVnVlV2VicGFja01vZHVsZVxuICApO1xuICB1bnBsdWdpblZ1ZSgpLmFwcGx5KGNvbXBpbGVyKTtcbiAgLy8gYHByb2Nlc3MuZW52Lk5PREVfRU5WYCBpcyBsZWZ0IG91dDogd2VicGFjaydzIGBtb2RlYCBkZWZpbmVzIGl0LCBhbmQgYSBzZWNvbmQgZGVmaW5pdGlvbiBjb25mbGljdHMuXG4gIGNvbnN0IHsgJ3Byb2Nlc3MuZW52Lk5PREVfRU5WJzogX25vZGVFbnYsIC4uLnZ1ZUZsYWdzIH0gPSBnZXRGcmFtZXdvcmtEZWZpbmVzKHsgZnJhbWV3b3JrOiBmZWF0dXJlcy5mcmFtZXdvcmssIGlzUHJvZHVjdGlvbkJ1aWxkIH0pO1xuICBuZXcgY29tcGlsZXIud2VicGFjay5EZWZpbmVQbHVnaW4odnVlRmxhZ3MpLmFwcGx5KGNvbXBpbGVyKTtcbn1cblxuLyoqXG4gKiBGaWxscyBpbiB0aGUgbm9ybWFsaXplZCB3ZWJwYWNrIG9wdGlvbnMgdGhlIGNvbnN1bWVyIGxlZnQgdW5zZXQuXG4gKlxuICogUnVucyB3aGlsZSB0aGUgcGx1Z2luIGlzIGFwcGxpZWQsIHdoaWNoIHdlYnBhY2sgZG9lcyBhZnRlciBub3JtYWxpemluZyB0aGUgY29uc3VtZXIncyBjb25maWcgYW5kIGJlZm9yZVxuICogYXBwbHlpbmcgaXRzIG93biBkZWZhdWx0cywgc28gYW4gdW5zZXQgb3B0aW9uIHN0aWxsIHJlYWRzIGB1bmRlZmluZWRgIGhlcmUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgbm9ybWFsaXplZCB3ZWJwYWNrIG9wdGlvbnMsIGNoYW5nZWQgaW4gcGxhY2UuXG4gKiBAcGFyYW0gbW9kZSAtIFRoZSBidWlsZCBtb2RlLlxuICovXG5mdW5jdGlvbiBhcHBseVdlYnBhY2tPcHRpb25EZWZhdWx0cyhvcHRpb25zOiBXZWJwYWNrT3B0aW9uc05vcm1hbGl6ZWQsIG1vZGU6IEJ1aWxkTW9kZSk6IHZvaWQge1xuICBjb25zdCBpc1Byb2R1Y3Rpb25CdWlsZCA9IG1vZGUgPT09IEJ1aWxkTW9kZS5Qcm9kdWN0aW9uO1xuICBvcHRpb25zLm1vZGUgPz89IGlzUHJvZHVjdGlvbkJ1aWxkID8gJ3Byb2R1Y3Rpb24nIDogJ2RldmVsb3BtZW50JztcbiAgb3B0aW9ucy50YXJnZXQgPz89ICdub2RlJztcbiAgb3B0aW9ucy5kZXZ0b29sID8/PSAhaXNQcm9kdWN0aW9uQnVpbGQgJiYgJ2lubGluZS1zb3VyY2UtbWFwJztcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuZW50cnkgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZW50cnkpLmxlbmd0aCA9PT0gMSAmJiBvcHRpb25zLmVudHJ5WydtYWluJ10/LmltcG9ydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5lbnRyeSA9IHsgbWFpbjogeyBpbXBvcnQ6IFtnZXRPYnNpZGlhblBsdWdpbkVudHJ5UG9pbnQoKV0gfSB9O1xuICB9XG5cbiAgb3B0aW9ucy5vdXRwdXQucGF0aCA/Pz0gZ2V0T2JzaWRpYW5QbHVnaW5EaXN0Rm9sZGVyKG1vZGUpO1xuICBvcHRpb25zLm91dHB1dC5maWxlbmFtZSA/Pz0gT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFpbkpzO1xuICBvcHRpb25zLm91dHB1dC5saWJyYXJ5ID8/PSB7IHR5cGU6ICdjb21tb25qczInIH07XG4gIG9wdGlvbnMub3V0cHV0LmFzeW5jQ2h1bmtzID8/PSBmYWxzZTtcblxuICAvLyBMaXN0ZWQgaW4gZnVsbCByYXRoZXIgdGhhbiB3aXRoIGAnLi4uJ2AsIHdoaWNoIHdvdWxkIGJyaW5nIGluIHRoZSBgbm9kZWAgY29uZGl0aW9uIG9mIGB0YXJnZXQ6ICdub2RlJ2A6IGV4cG9ydFxuICAvLyBNYXBzIGFyZSBtYXRjaGVkIGluIHRoZSBwYWNrYWdlJ3Mga2V5IG9yZGVyLCBub3QgdGhpcyBvbmUncywgc28gYSBwYWNrYWdlIGxpc3RpbmcgYG5vZGVgIGJlZm9yZSBgYnJvd3NlcmAgKFZ1ZSxcbiAgLy8gYGZmbGF0ZWApIHdvdWxkIGhhbmQgb3ZlciBpdHMgTm9kZSBidWlsZCwgd2hpY2ggZG9lcyBub3QgbG9hZCBvbiBtb2JpbGUuXG4gIG9wdGlvbnMucmVzb2x2ZS5jb25kaXRpb25OYW1lcyA/Pz0gWydicm93c2VyJywgJ3dlYnBhY2snLCBpc1Byb2R1Y3Rpb25CdWlsZCA/ICdwcm9kdWN0aW9uJyA6ICdkZXZlbG9wbWVudCcsICdtb2R1bGUnLCAnaW1wb3J0JywgJ3JlcXVpcmUnXTtcblxuICBjb25zdCB1c2VyRXh0ZXJuYWxzID0gb3B0aW9ucy5leHRlcm5hbHM7XG4gIG9wdGlvbnMuZXh0ZXJuYWxzID0gW29ic2lkaWFuUGx1Z2luV2VicGFja0V4dGVybmFscywgLi4uKEFycmF5LmlzQXJyYXkodXNlckV4dGVybmFscykgPyB1c2VyRXh0ZXJuYWxzIDogW3VzZXJFeHRlcm5hbHNdKV07XG59XG5cbi8qKlxuICogUHV0cyBsaWNlbnNlIGNvbW1lbnRzIGEgbWluaW1pemVyIGV4dHJhY3RlZCBpbnRvIGEgYDxmaWxlPi5MSUNFTlNFLnR4dGAgYmFjayBpbnRvIHRoZSBmaWxlIHRoZXkgY2FtZSBmcm9tLlxuICpcbiAqIFdlYnBhY2sncyBkZWZhdWx0IG1pbmltaXplciBtb3ZlcyBldmVyeSBidW5kbGVkIGRlcGVuZGVuY3kncyBsaWNlbnNlIGNvbW1lbnQgaW50byBhXG4gKiBgbWFpbi5qcy5MSUNFTlNFLnR4dGAgYmVzaWRlIGBtYWluLmpzYCwgd2hpY2ggbm8gT2JzaWRpYW4gcmVsZWFzZSBzaGlwcywgc28gdGhlIGluc3RhbGxlZCBwbHVnaW4gd291bGRcbiAqIGNhcnJ5IGNvZGUgd2l0aG91dCB0aGUgbm90aWNlcyBpdCBpcyBsaWNlbnNlZCB1bmRlci4gRG9uZSBhZnRlciBtaW5pZmljYXRpb24gcmF0aGVyIHRoYW4gYnkgcmVwbGFjaW5nXG4gKiB0aGUgbWluaW1pemVyLCBzbyBpdCBob2xkcyB3aGljaGV2ZXIgbWluaW1pemVyIHRoZSBjb25zdW1lciBvciB3ZWJwYWNrIHBpY2tlZC5cbiAqXG4gKiBAcGFyYW0gY29tcGlsYXRpb24gLSBUaGUgY29tcGlsYXRpb24uXG4gKiBAcGFyYW0gY29tcGlsZXIgLSBUaGUgY29tcGlsZXIsIGZvciB3ZWJwYWNrJ3MgYHNvdXJjZXNgIGNsYXNzZXMuXG4gKi9cbmZ1bmN0aW9uIGlubGluZUV4dHJhY3RlZExpY2Vuc2VzKGNvbXBpbGF0aW9uOiBDb21waWxhdGlvbiwgY29tcGlsZXI6IENvbXBpbGVyKTogdm9pZCB7XG4gIGNvbnN0IExJQ0VOU0VfU1VGRklYID0gJy5MSUNFTlNFLnR4dCc7XG4gIGZvciAoY29uc3QgbGljZW5zZUFzc2V0IG9mIGNvbXBpbGF0aW9uLmdldEFzc2V0cygpKSB7XG4gICAgaWYgKCFsaWNlbnNlQXNzZXQubmFtZS5lbmRzV2l0aChMSUNFTlNFX1NVRkZJWCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2VGaWxlTmFtZSA9IGxpY2Vuc2VBc3NldC5uYW1lLnNsaWNlKDAsIC1MSUNFTlNFX1NVRkZJWC5sZW5ndGgpO1xuICAgIGNvbnN0IHNvdXJjZUFzc2V0ID0gY29tcGlsYXRpb24uZ2V0QXNzZXQoc291cmNlRmlsZU5hbWUpO1xuICAgIGlmICghc291cmNlQXNzZXQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBsaWNlbnNlRmlsZU5hbWUgPSBsaWNlbnNlQXNzZXQubmFtZS5zcGxpdCgnLycpLmF0KC0xKSA/PyBsaWNlbnNlQXNzZXQubmFtZTtcbiAgICBjb25zdCByZWZlcmVuY2UgPSBgLyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgJHtsaWNlbnNlRmlsZU5hbWV9ICovYDtcbiAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VBc3NldC5zb3VyY2Uuc291cmNlKCkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBsaWNlbnNlcyA9IGxpY2Vuc2VBc3NldC5zb3VyY2Uuc291cmNlKCkudG9TdHJpbmcoKS50cmltRW5kKCk7XG4gICAgY29uc3QgdXBkYXRlZFNvdXJjZSA9IHNvdXJjZS5pbmNsdWRlcyhyZWZlcmVuY2UpID8gc291cmNlLnJlcGxhY2UocmVmZXJlbmNlLCAoKSA9PiBsaWNlbnNlcykgOiBgJHtsaWNlbnNlc31cXG4ke3NvdXJjZX1gO1xuICAgIGNvbXBpbGF0aW9uLnVwZGF0ZUFzc2V0KHNvdXJjZUZpbGVOYW1lLCBuZXcgY29tcGlsZXIud2VicGFjay5zb3VyY2VzLlJhd1NvdXJjZSh1cGRhdGVkU291cmNlKSk7XG4gICAgY29tcGlsYXRpb24uZGVsZXRlQXNzZXQobGljZW5zZUFzc2V0Lm5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogTW92ZXMgZXZlcnkgQ1NTIGFzc2V0IG9mIGEgY29tcGlsYXRpb24gaW50byBgc3R5bGVzLmNzc2AuXG4gKlxuICogQHBhcmFtIGNvbXBpbGF0aW9uIC0gVGhlIGNvbXBpbGF0aW9uLlxuICogQHBhcmFtIGNvbXBpbGVyIC0gVGhlIGNvbXBpbGVyLCBmb3Igd2VicGFjaydzIGBzb3VyY2VzYCBjbGFzc2VzLlxuICovXG5mdW5jdGlvbiByZW5hbWVXZWJwYWNrQ3NzQXNzZXRzKGNvbXBpbGF0aW9uOiBDb21waWxhdGlvbiwgY29tcGlsZXI6IENvbXBpbGVyKTogdm9pZCB7XG4gIGNvbnN0IGNzc0Fzc2V0cyA9IGNvbXBpbGF0aW9uLmdldEFzc2V0cygpXG4gICAgLmZpbHRlcigoYXNzZXQpID0+IGlzQ3NzRmlsZU5hbWUoYXNzZXQubmFtZSkpXG4gICAgLm1hcCgoYXNzZXQpID0+ICh7IGZpbGVOYW1lOiBhc3NldC5uYW1lLCBzb3VyY2U6IGFzc2V0LnNvdXJjZS5zb3VyY2UoKS50b1N0cmluZygpIH0pKTtcbiAgY29uc3QgeyBmaWxlTmFtZXNUb1JlbW92ZSwgc3R5bGVzQ3NzIH0gPSBtZXJnZUNzc0Fzc2V0cyhjc3NBc3NldHMpO1xuICBpZiAoc3R5bGVzQ3NzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlTmFtZXNUb1JlbW92ZSkge1xuICAgIGNvbXBpbGF0aW9uLmRlbGV0ZUFzc2V0KGZpbGVOYW1lKTtcbiAgfVxuICBjb21waWxhdGlvbi5lbWl0QXNzZXQoT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3R5bGVzQ3NzLCBuZXcgY29tcGlsZXIud2VicGFjay5zb3VyY2VzLlJhd1NvdXJjZShzdHlsZXNDc3MpKTtcbn1cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQThCQSwwQkFBNEM7QUFDNUMsa0JBQXdCO0FBQ3hCLHNCQUE4QjtBQVM5Qix3Q0FBd0M7QUFDeEMsbUNBV087QUFDUCxzQ0FLTztBQUNQLGdEQUE4QztBQTVEOUMsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxTQUFTLHNCQUFzQjtBQUN2RixNQUFJLE9BQU8sZUFBZSxVQUFVO0FBQ2xDLFVBQU0sZUFBZTtBQUNyQixVQUFNLE1BQU0sYUFBYSxVQUFVO0FBQ25DLFFBQUksT0FBTyxJQUFJLGtCQUFrQixZQUFZO0FBQzNDLGFBQU8sSUFBSSxjQUFjLFVBQVUsRUFBRTtBQUFBLElBQ3ZDO0FBQUEsRUFDRjtBQUNBLFNBQU8sV0FBVyxVQUFVLFFBQVE7QUFDdEMsR0FBRztBQWdJSCxNQUFNLGNBQWM7QUFDcEIsTUFBTSwwQkFBMEI7QUFrQ3pCLE1BQU0sNEJBQTZEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTWpFLFlBQTZCLFVBQThDLENBQUMsR0FBRztBQUFsRDtBQUFBLEVBQW1EO0FBQUEsRUFBbkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVE3QixNQUFNLFVBQTBCO0FBQ3JDLFVBQU0sT0FBTyxLQUFLLFFBQVEsUUFBUSxvQkFBb0IsU0FBUyxPQUFPO0FBQ3RFLCtCQUEyQixTQUFTLFNBQVMsSUFBSTtBQUNqRCx5QkFBcUIsVUFBVSxLQUFLLFNBQVMsU0FBUyx1Q0FBVSxVQUFVO0FBRTFFLFFBQUksU0FBUyxRQUFRLGFBQWE7QUFBQSxNQUNoQyxZQUFRLHNEQUF3QixTQUFTO0FBQUEsTUFDekMsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLFFBQVEsWUFBWTtBQUFBLE1BQ3BDLE1BQU07QUFBQSxJQUNSLENBQUMsRUFBRSxNQUFNLFFBQVE7QUFFakIsVUFBTSwwQkFBc0IsZ0VBQWtDO0FBQUEsTUFDNUQsR0FBRyxLQUFLO0FBQUEsTUFDUixHQUFJLFNBQVMsUUFBUSxPQUFPLFNBQVMsVUFBYSxFQUFFLFlBQVksU0FBUyxRQUFRLE9BQU8sS0FBSztBQUFBLE1BQzdGO0FBQUEsSUFDRixDQUFDO0FBQ0QsUUFBSSxzQkFBc0I7QUFFMUIsbUJBQWUsVUFBeUI7QUFDdEMsWUFBTSxlQUFlLE1BQU07QUFDM0IsVUFBSSxxQkFBcUI7QUFDdkI7QUFBQSxNQUNGO0FBQ0EsNEJBQXNCO0FBQ3RCLGdCQUFNLDREQUE4QixhQUFhLFVBQVU7QUFBQSxJQUM3RDtBQUNBLGFBQVMsTUFBTSxVQUFVLFdBQVcsYUFBYSxPQUFPO0FBQ3hELGFBQVMsTUFBTSxTQUFTLFdBQVcsYUFBYSxPQUFPO0FBRXZELGFBQVMsTUFBTSxnQkFBZ0IsSUFBSSxhQUFhLENBQUMsZ0JBQWdCO0FBQy9ELGtCQUFZLE1BQU0sY0FBYztBQUFBLFFBQzlCLEVBQUUsTUFBTSxhQUFhLE9BQU8sU0FBUyxRQUFRLFlBQVksK0JBQStCO0FBQUEsUUFDeEYsTUFBTTtBQUNKLGlDQUF1QixhQUFhLFFBQVE7QUFDNUMsa0NBQXdCLGFBQWEsUUFBUTtBQUFBLFFBQy9DO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUVELGFBQVMsTUFBTSxVQUFVLFdBQVcsYUFBYSxPQUFPLGdCQUFnQjtBQUN0RSxVQUFJLFlBQVksU0FBUyxFQUFFLFVBQVUsR0FBRztBQUN0QztBQUFBLE1BQ0Y7QUFDQSxZQUFNLGVBQWUsTUFBTTtBQUMzQixnQkFBTSwrREFBaUMsWUFBWTtBQUNuRCxnQkFBTSx5RUFBOEIsWUFBWTtBQUFBLElBQ2xELENBQUM7QUFBQSxFQUNIO0FBQUE7QUFFRjtBQVNPLFNBQVMsb0JBQW9CLFNBQXNFO0FBQ3hHLFNBQU8sUUFBUSxTQUFTLFFBQVEsU0FBUyxnQkFBZ0IsdUNBQVUsY0FBYyx1Q0FBVTtBQUM3RjtBQVVPLFNBQVMsdUJBQXVCLFFBQXFEO0FBQzFGLFFBQU0sRUFBRSxlQUFlLFVBQVUsbUJBQW1CLFlBQVkseUJBQXlCLElBQUk7QUFDN0YsUUFBTSxRQUF1QixDQUFDO0FBRTlCLFdBQVMsY0FBYyxNQUFrRCxRQUF3RDtBQUMvSCxVQUFNLFVBQThDLEVBQUUsbUJBQW1CLE1BQU0sR0FBSSxVQUFVLEVBQUUsT0FBTyxFQUFHO0FBQ3pHLFdBQU8sQ0FBQyxFQUFFLFFBQVEsWUFBWSxRQUFRLENBQUM7QUFBQSxFQUN6QztBQUVBLFVBQVEsU0FBUyxXQUFXO0FBQUEsSUFDMUIsS0FBSyxTQUFTO0FBQ1osWUFBTSxLQUFLLEVBQUUsU0FBUyxPQUFPLE1BQU0sZUFBZSxLQUFLLGNBQWMsS0FBSyxFQUFFLENBQUM7QUFDN0U7QUFBQSxJQUNGO0FBQUEsSUFDQSxLQUFLLFVBQVU7QUFDYixZQUFNO0FBQUEsUUFDSixFQUFFLE1BQU0sZUFBZSxLQUFLLGNBQWMsUUFBUSxFQUFFO0FBQUEsUUFDcEQsRUFBRSxTQUFTLE9BQU8sTUFBTSwyQkFBMkIsS0FBSyxjQUFjLFFBQVEsRUFBRTtBQUFBLE1BQ2xGO0FBQ0E7QUFBQSxJQUNGO0FBQUEsSUFDQSxLQUFLLE9BQU87QUFHVixZQUFNLEtBQUssRUFBRSxTQUFTLFFBQVEsTUFBTSxnQ0FBZ0MsS0FBSyxjQUFjLFlBQVksRUFBRSxDQUFDO0FBQ3RHO0FBQUEsSUFDRjtBQUFBLElBQ0EsU0FBUztBQUNQO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxNQUFJLFNBQVMsTUFBTTtBQUNqQixVQUFNLEtBQUssRUFBRSxNQUFNLGFBQWEsTUFBTSxtQkFBbUIsS0FBSyxjQUFjLE1BQU0sRUFBRSxDQUFDO0FBQUEsRUFDdkY7QUFDQSxNQUFJLFNBQVMsUUFBUTtBQUNuQixVQUFNLEtBQUs7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxRQUNIO0FBQUEsUUFDQTtBQUFBLFVBQ0UsUUFBUTtBQUFBLFVBQ1IsU0FBUztBQUFBLFlBQ1AsZUFBZTtBQUFBLFlBQ2YsU0FBUyxTQUFTLE9BQU8sYUFBYSxFQUFFLE1BQU0sTUFBTSxhQUFhLE1BQU0sSUFBSTtBQUFBLFVBQzdFO0FBQUEsUUFDRjtBQUFBLFFBQ0EsT0FBRyxpREFBZ0IsU0FBUyxNQUFNLElBQUksY0FBYyxjQUFjLFNBQVMsTUFBTSxJQUFJLENBQUM7QUFBQSxNQUN4RjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDQSxTQUFPO0FBQ1Q7QUFTTyxTQUFTLCtCQUErQixNQUFxQixVQUFtQztBQUNyRyxNQUFJLEtBQUssWUFBWSxjQUFhLHVEQUF5QixLQUFLLE9BQU8sR0FBRztBQUN4RSxhQUFTLE1BQU0sYUFBYSxLQUFLLE9BQU8sRUFBRTtBQUMxQztBQUFBLEVBQ0Y7QUFDQSxXQUFTO0FBQ1g7QUFXQSxTQUFTLHFCQUFxQixVQUFvQixVQUF3QyxtQkFBa0M7QUFDMUgsTUFBSSwyQkFBMkI7QUFDL0IsTUFBSSxnQkFBZ0I7QUFDcEIsTUFBSSxTQUFTLFFBQVE7QUFDbkIsVUFBTSxnQkFBZ0I7QUFDdEIsd0JBQWdCLHFEQUFvQixFQUFFLFNBQVMsZUFBZSxhQUFhLGFBQWEsQ0FBQztBQUN6RixVQUFNLDJCQUF1QjtBQUFBLFVBQzNCLHFEQUFvQixFQUFFLFNBQVMsZUFBZSxhQUFhLHdCQUF3QixDQUFDO0FBQUEsSUFDdEY7QUFDQSwrQkFBMkIscUJBQXFCO0FBQ2hELFVBQU0sMEJBQTBCLFNBQVMsUUFBUSxRQUFRLEtBQUssQ0FBQyxXQUFXLE9BQU8sWUFBWSxTQUFTLHNCQUFzQjtBQUM1SCxRQUFJLENBQUMseUJBQXlCO0FBQzVCLFVBQUkscUJBQXFCLEVBQUUsTUFBTSxRQUFRO0FBQUEsSUFDM0M7QUFBQSxFQUNGO0FBRUEsUUFBTSxpQkFBYSwrQkFBYyxJQUFJLElBQUkscUNBQWlDLHlCQUFRLCtCQUFjLGlCQUFlLENBQUMsQ0FBQyxJQUFJLGlCQUFlLENBQUM7QUFDckksV0FBUyxRQUFRLE9BQU8sTUFBTSxLQUFLLEdBQUcsdUJBQXVCLEVBQUUsZUFBZSxVQUFVLG1CQUFtQixZQUFZLHlCQUF5QixDQUFDLENBQUM7QUFFbEosTUFBSSxTQUFTLGNBQWMsT0FBTztBQUNoQztBQUFBLEVBQ0Y7QUFDQSxRQUFNLGtCQUFjO0FBQUEsUUFDbEIscURBQW9CLEVBQUUsU0FBUyxvQkFBc0IsYUFBYSxnQkFBZ0IsV0FBVyx1QkFBdUIsQ0FBQztBQUFBLEVBQ3ZIO0FBQ0EsY0FBWSxFQUFFLE1BQU0sUUFBUTtBQUU1QixRQUFNLEVBQUUsd0JBQXdCLFVBQVUsR0FBRyxTQUFTLFFBQUkscURBQW9CLEVBQUUsV0FBVyxTQUFTLFdBQVcsa0JBQWtCLENBQUM7QUFDbEksTUFBSSxTQUFTLFFBQVEsYUFBYSxRQUFRLEVBQUUsTUFBTSxRQUFRO0FBQzVEO0FBV0EsU0FBUywyQkFBMkIsU0FBbUMsTUFBdUI7QUFDNUYsUUFBTSxvQkFBb0IsU0FBUyx1Q0FBVTtBQUM3QyxVQUFRLFNBQVMsb0JBQW9CLGVBQWU7QUFDcEQsVUFBUSxXQUFXO0FBQ25CLFVBQVEsWUFBWSxDQUFDLHFCQUFxQjtBQUUxQyxNQUFJLE9BQU8sUUFBUSxVQUFVLFlBQVksT0FBTyxLQUFLLFFBQVEsS0FBSyxFQUFFLFdBQVcsS0FBSyxRQUFRLE1BQU0sTUFBTSxHQUFHLFdBQVcsUUFBVztBQUMvSCxZQUFRLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxLQUFDLDBEQUE0QixDQUFDLEVBQUUsRUFBRTtBQUFBLEVBQ3RFO0FBRUEsVUFBUSxPQUFPLGFBQVMsMERBQTRCLElBQUk7QUFDeEQsVUFBUSxPQUFPLGFBQWEsMERBQXdCO0FBQ3BELFVBQVEsT0FBTyxZQUFZLEVBQUUsTUFBTSxZQUFZO0FBQy9DLFVBQVEsT0FBTyxnQkFBZ0I7QUFLL0IsVUFBUSxRQUFRLG1CQUFtQixDQUFDLFdBQVcsV0FBVyxvQkFBb0IsZUFBZSxlQUFlLFVBQVUsVUFBVSxTQUFTO0FBRXpJLFFBQU0sZ0JBQWdCLFFBQVE7QUFDOUIsVUFBUSxZQUFZLENBQUMsZ0NBQWdDLEdBQUksTUFBTSxRQUFRLGFBQWEsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUU7QUFDMUg7QUFhQSxTQUFTLHdCQUF3QixhQUEwQixVQUEwQjtBQUNuRixRQUFNLGlCQUFpQjtBQUN2QixhQUFXLGdCQUFnQixZQUFZLFVBQVUsR0FBRztBQUNsRCxRQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsY0FBYyxHQUFHO0FBQy9DO0FBQUEsSUFDRjtBQUNBLFVBQU0saUJBQWlCLGFBQWEsS0FBSyxNQUFNLEdBQUcsQ0FBQyxlQUFlLE1BQU07QUFDeEUsVUFBTSxjQUFjLFlBQVksU0FBUyxjQUFjO0FBQ3ZELFFBQUksQ0FBQyxhQUFhO0FBQ2hCO0FBQUEsSUFDRjtBQUNBLFVBQU0sa0JBQWtCLGFBQWEsS0FBSyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxhQUFhO0FBQzVFLFVBQU0sWUFBWSwwQ0FBMEMsZUFBZTtBQUMzRSxVQUFNLFNBQVMsWUFBWSxPQUFPLE9BQU8sRUFBRSxTQUFTO0FBQ3BELFVBQU0sV0FBVyxhQUFhLE9BQU8sT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRO0FBQ2pFLFVBQU0sZ0JBQWdCLE9BQU8sU0FBUyxTQUFTLElBQUksT0FBTyxRQUFRLFdBQVcsTUFBTSxRQUFRLElBQUksR0FBRyxRQUFRO0FBQUEsRUFBSyxNQUFNO0FBQ3JILGdCQUFZLFlBQVksZ0JBQWdCLElBQUksU0FBUyxRQUFRLFFBQVEsVUFBVSxhQUFhLENBQUM7QUFDN0YsZ0JBQVksWUFBWSxhQUFhLElBQUk7QUFBQSxFQUMzQztBQUNGO0FBUUEsU0FBUyx1QkFBdUIsYUFBMEIsVUFBMEI7QUFDbEYsUUFBTSxZQUFZLFlBQVksVUFBVSxFQUNyQyxPQUFPLENBQUMsY0FBVSw0Q0FBYyxNQUFNLElBQUksQ0FBQyxFQUMzQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsTUFBTSxNQUFNLFFBQVEsTUFBTSxPQUFPLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRTtBQUN0RixRQUFNLEVBQUUsbUJBQW1CLFVBQVUsUUFBSSw2Q0FBZSxTQUFTO0FBQ2pFLE1BQUksY0FBYyxRQUFXO0FBQzNCO0FBQUEsRUFDRjtBQUNBLGFBQVcsWUFBWSxtQkFBbUI7QUFDeEMsZ0JBQVksWUFBWSxRQUFRO0FBQUEsRUFDbEM7QUFDQSxjQUFZLFVBQVUsMERBQXdCLFdBQVcsSUFBSSxTQUFTLFFBQVEsUUFBUSxVQUFVLFNBQVMsQ0FBQztBQUM1RzsiLCJuYW1lcyI6W119
@@ -29,80 +29,6 @@ function ensureBrowserProcess() {
29
29
 
30
30
  ensureBrowserProcess();
31
31
  })();
32
- (function patchObsidianRequire() {
33
- const originalRequire = require;
34
- if (!originalRequire || originalRequire.__isPatched) {
35
- return;
36
- }
37
-
38
- require = Object.assign(
39
- (id) => requirePatched(id),
40
- originalRequire,
41
- {
42
- __isPatched: true
43
- }
44
- );
45
-
46
- function extractDefault(module) {
47
- return module && module.__esModule && 'default' in module ? module.default : module;
48
- }
49
-
50
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
51
- '@codemirror/autocomplete',
52
- '@codemirror/collab',
53
- '@codemirror/commands',
54
- '@codemirror/language',
55
- '@codemirror/lint',
56
- '@codemirror/search',
57
- '@codemirror/state',
58
- '@codemirror/text',
59
- '@codemirror/view',
60
- '@lezer/common',
61
- '@lezer/highlight',
62
- '@lezer/lr',
63
- 'obsidian']
64
- );
65
-
66
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
67
- '@codemirror/closebrackets',
68
- '@codemirror/comment',
69
- '@codemirror/fold',
70
- '@codemirror/gutter',
71
- '@codemirror/highlight',
72
- '@codemirror/history',
73
- '@codemirror/matchbrackets',
74
- '@codemirror/panel',
75
- '@codemirror/rangeset',
76
- '@codemirror/rectangular-selection',
77
- '@codemirror/stream-parser',
78
- '@codemirror/tooltip']
79
- );
80
-
81
- function requirePatched(id) {
82
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
83
- return originalRequire?.(id);
84
- }
85
-
86
- // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
87
- if (globalThis.app.isMobile) {
88
- if (id === 'process' || id === 'node:process') {
89
- // eslint-disable-next-line no-console -- Valid usage.
90
- console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
91
-
92
- return process;
93
- }
94
- } else {
95
- const module = originalRequire?.(id);
96
- if (module) {
97
- return extractDefault(module);
98
- }
99
- }
100
-
101
- // eslint-disable-next-line no-console -- Valid usage.
102
- console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
103
- return {};
104
- }
105
- })();
106
32
 
107
33
  "use strict";
108
34
  var __defProp = Object.defineProperty;
@@ -164,4 +90,4 @@ function parseDemoVaultAppJson(params) {
164
90
  findOwnedDemoVaultAppJsonSettings,
165
91
  parseDemoVaultAppJson
166
92
  });
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZW1vLXZhdWx0LWFwcC1qc29uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgYC5vYnNpZGlhbi9hcHAuanNvbmAgc2V0dGluZ3MgYG9ic2lkaWFuLWRldi11dGlsc2Agb3ducyBpbiBldmVyeSBkZW1vIHZhdWx0LlxuICpcbiAqIEEgZGVtbyB2YXVsdCBpcyBkb2N1bWVudGF0aW9uIGZpcnN0IGFuZCBhbiBlZGl0aW5nIHN1cmZhY2Ugc2Vjb25kLCBzbyBmb3VyIE9ic2lkaWFuIHNldHRpbmdzIGhhdmUgdG8gYmVcbiAqIHRoZSBzYW1lIGluIGV2ZXJ5IG9uZSBvZiB0aGVtLiBUaGV5IGFyZSAqKm5vdCoqIGNvbW1pdHRlZDogYSB2YXVsdCB0aGF0IHdyb3RlIHRoZW0gaXRzZWxmIHdvdWxkIGRyaWZ0XG4gKiAobWVhc3VyZWQgMjAyNi0wOC0xMywgb25seSAzIG9mIDIzIHZhdWx0cyBoYWQgdGhlIGZpcnN0IHBhaXIgYW5kIDEgb2YgMjMgdGhlIHNlY29uZCksIHNvIHRoaXMgcGFja2FnZVxuICogb3ducyB0aGVtIGluc3RlYWQg4oCUIHtAbGluayBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0fSBtZXJnZXMgdGhlbSBpbnRvIHRoZSBgYXBwLmpzb25gIG9mIHRoZSBhcmNoaXZlZCBjb3B5XG4gKiBhdCByZWxlYXNlIHRpbWUsIGFuZCB0aGUgZGVtby12YXVsdCBjb3ZlcmFnZSBzdWl0ZSBmYWlscyBhIHZhdWx0IHRoYXQgY29tbWl0cyBhbnkgb2YgdGhlbS5cbiAqXG4gKiAtIGBkZWZhdWx0Vmlld01vZGU6ICdwcmV2aWV3J2AgKyBgbGl2ZVByZXZpZXc6IGZhbHNlYCDigJQgYSBub3RlIG9wZW5zIGFzIGEgcmVhZGVyIHNlZXMgaXQgcmF0aGVyIHRoYW4gYXNcbiAqICAgcmF3IG1hcmt1cC4gT2JzaWRpYW4tb25seTogR2l0SHViIG5ldmVyIHJlYWRzIGBhcHAuanNvbmAgYW5kIHJlbmRlcnMgZXZlcnkgbm90ZSBhcyBIVE1MIHJlZ2FyZGxlc3MuXG4gKiAtIGB1c2VNYXJrZG93bkxpbmtzOiB0cnVlYCArIGBuZXdMaW5rRm9ybWF0OiAncmVsYXRpdmUnYCDigJQgd2hhdCBPYnNpZGlhbiB3cml0ZXMgd2hlbiBhIGxpbmsgaXMgY3JlYXRlZFxuICogICBpbnNpZGUgdGhlIHZhdWx0LiBMZWZ0IGF0IE9ic2lkaWFuJ3MgZGVmYXVsdHMgKGBmYWxzZWAgLyBgJ3Nob3J0ZXN0J2ApIGV2ZXJ5IG5ldyBsaW5rIGNvbWVzIG91dCBhcyBhXG4gKiAgIHNob3J0ZXN0LXBhdGggYFtbd2lraWxpbmtdXWAsIHRoZSBmb3JtIHRoZSBjb3ZlcmFnZSBzdWl0ZSByZWplY3RzIGFuZCBHaXRIdWIgcmVuZGVycyBhcyBsaXRlcmFsXG4gKiAgIGJyYWNrZXRzLiBgcmVsYXRpdmVgIHJhdGhlciB0aGFuIGBhYnNvbHV0ZWAgc28gbm90ZXMga2VlcCByZXNvbHZpbmcgb25jZSB0aGUgdmF1bHQgaXMgZXh0cmFjdGVkIHRvIGFuXG4gKiAgIGFyYml0cmFyeSBmb2xkZXIuXG4gKlxuICogQWxsIGZvdXIgYXJlIHdyaXR0ZW4gZXhwbGljaXRseSwgbmV2ZXIgbGVmdCB0byBhbiBPYnNpZGlhbiBkZWZhdWx0OiBhIHZhdWx0IGxlYW5pbmcgb24gYSBkZWZhdWx0IGNoYW5nZXNcbiAqIGJlaGF2aW9yIHdoZW4gdGhhdCBkZWZhdWx0IGRvZXMuXG4gKlxuICogS2VwdCBmcmVlIG9mIGJvdGggYHZpdGVzdGAgYW5kIGBmZmxhdGVgIG9uIHB1cnBvc2Ug4oCUIHRoZSBjb3ZlcmFnZSBzdWl0ZSBwdWxscyBpbiB0aGUgZm9ybWVyIGFuZCB0aGVcbiAqIGFyY2hpdmVyIHRoZSBsYXR0ZXIsIGFuZCBuZWl0aGVyIG1heSByZWFjaCB0aGUgb3RoZXIncyBlbnZpcm9ubWVudC5cbiAqL1xuXG5pbXBvcnQgeyB0b0pzb24gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYnVpbGRBcmNoaXZlZERlbW9WYXVsdEFwcEpzb25Db250ZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEFyY2hpdmVkRGVtb1ZhdWx0QXBwSnNvbkNvbnRlbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRlbW8gdmF1bHQncyBjb21taXR0ZWQgYGFwcC5qc29uYCwgcGFyc2VkIGJ5IHtAbGluayBwYXJzZURlbW9WYXVsdEFwcEpzb259LlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSnNvbjogRGVtb1ZhdWx0QXBwSnNvbjtcbn1cblxuLyoqXG4gKiBBIHBhcnNlZCBgLm9ic2lkaWFuL2FwcC5qc29uYC4gT25seSB0aGUgc2V0dGluZ3MgaW4ge0BsaW5rIERFTU9fVkFVTFRfQVBQX0pTT05fU0VUVElOR1N9IGFyZSBpbnRlcnByZXRlZDtcbiAqIGV2ZXJ5IG90aGVyIHNldHRpbmcgaXMgY2FycmllZCB0aHJvdWdoIHVudG91Y2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVtb1ZhdWx0QXBwSnNvbiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kT3duZWREZW1vVmF1bHRBcHBKc29uU2V0dGluZ3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbmRPd25lZERlbW9WYXVsdEFwcEpzb25TZXR0aW5nc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZGVtbyB2YXVsdCdzIGNvbW1pdHRlZCBgYXBwLmpzb25gLCBwYXJzZWQgYnkge0BsaW5rIHBhcnNlRGVtb1ZhdWx0QXBwSnNvbn0uXG4gICAqL1xuICByZWFkb25seSBhcHBKc29uOiBEZW1vVmF1bHRBcHBKc29uO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBwYXJzZURlbW9WYXVsdEFwcEpzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlRGVtb1ZhdWx0QXBwSnNvblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcmF3IGZpbGUgY29udGVudCwgb3IgYG51bGxgIHdoZW4gdGhlIHZhdWx0IGNvbW1pdHMgbm8gYGFwcC5qc29uYCBhdCBhbGwg4oCUIHdoaWNoIGlzIHRoZSBleHBlY3RlZFxuICAgKiBzdGF0ZSBmb3IgYSB2YXVsdCB0aGF0IGhhcyBub3RoaW5nIGVsc2UgdG8gY29uZmlndXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogbnVsbCB8IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdGhlIGNvbnRlbnQgd2FzIHJlYWQgZnJvbSwgbmFtZWQgaW4gdGhlIGVycm9yIHdoZW4gaXQgZG9lcyBub3QgcGFyc2UuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGAub2JzaWRpYW4vYXBwLmpzb25gIHNldHRpbmdzIHRoaXMgcGFja2FnZSB3cml0ZXMgaW50byBldmVyeSBhcmNoaXZlZCBkZW1vIHZhdWx0LCBhbmQgdGhhdCBhIGRlbW9cbiAqIHZhdWx0IG11c3QgdGhlcmVmb3JlIG5ldmVyIGNvbW1pdC4gU2VlIHRoZSBmaWxlIG92ZXJ2aWV3IGZvciB3aGF0IGVhY2ggb25lIGJ1eXMuXG4gKi9cbmV4cG9ydCBjb25zdCBERU1PX1ZBVUxUX0FQUF9KU09OX1NFVFRJTkdTOiBEZW1vVmF1bHRBcHBKc29uID0ge1xuICBkZWZhdWx0Vmlld01vZGU6ICdwcmV2aWV3JyxcbiAgbGl2ZVByZXZpZXc6IGZhbHNlLFxuICBuZXdMaW5rRm9ybWF0OiAncmVsYXRpdmUnLFxuICB1c2VNYXJrZG93bkxpbmtzOiB0cnVlXG59O1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYGFwcC5qc29uYCBjb250ZW50IGZvciB0aGUgYXJjaGl2ZWQgY29weSBvZiBhIGRlbW8gdmF1bHQ6IHRoZSBjb21taXR0ZWQgc2V0dGluZ3Mgd2l0aCB0aGVcbiAqIG93bmVkIG9uZXMgbWVyZ2VkIG92ZXIgdGhlbS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZC5cbiAqIEByZXR1cm5zIFRoZSBKU09OIHRleHQgdG8gc3RvcmUgYXMgdGhlIGFyY2hpdmUncyBgLm9ic2lkaWFuL2FwcC5qc29uYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQXJjaGl2ZWREZW1vVmF1bHRBcHBKc29uQ29udGVudChwYXJhbXM6IEJ1aWxkQXJjaGl2ZWREZW1vVmF1bHRBcHBKc29uQ29udGVudFBhcmFtcyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtcbiAgICB0b0pzb24oe1xuICAgICAgLi4ucGFyYW1zLmFwcEpzb24sXG4gICAgICAuLi5ERU1PX1ZBVUxUX0FQUF9KU09OX1NFVFRJTkdTXG4gICAgfSlcbiAgfVxcbmA7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG93bmVkIHNldHRpbmdzIGEgZGVtbyB2YXVsdCBoYXMgY29tbWl0dGVkLiBUaGV5IGJlbG9uZyB0byB0aGlzIHBhY2thZ2UsIHdoaWNoIGluamVjdHMgdGhlbSBhdFxuICogcmVsZWFzZSB0aW1lLCBzbyBhIGNvbW1pdHRlZCBvbmUgaXMgZHJpZnQgd2FpdGluZyB0byBoYXBwZW4gcmF0aGVyIHRoYW4gYSBsb2NhbCBwcmVmZXJlbmNlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAqIEByZXR1cm5zIFRoZSBuYW1lcyBvZiB0aGUgb3duZWQgc2V0dGluZ3MgcHJlc2VudCBpbiB0aGUgY29tbWl0dGVkIGBhcHAuanNvbmAsIGluIHRoZSBvcmRlciB0aGV5IGFyZVxuICogZGVjbGFyZWQgaW4ge0BsaW5rIERFTU9fVkFVTFRfQVBQX0pTT05fU0VUVElOR1N9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE93bmVkRGVtb1ZhdWx0QXBwSnNvblNldHRpbmdzKHBhcmFtczogRmluZE93bmVkRGVtb1ZhdWx0QXBwSnNvblNldHRpbmdzUGFyYW1zKTogc3RyaW5nW10ge1xuICByZXR1cm4gT2JqZWN0LmtleXMoREVNT19WQVVMVF9BUFBfSlNPTl9TRVRUSU5HUykuZmlsdGVyKChzZXR0aW5nKSA9PiBPYmplY3QuaGFzT3duKHBhcmFtcy5hcHBKc29uLCBzZXR0aW5nKSk7XG59XG5cbi8qKlxuICogUGFyc2VzIGEgZGVtbyB2YXVsdCdzIGNvbW1pdHRlZCBgYXBwLmpzb25gLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBzZXR0aW5ncywgb3IgYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIHZhdWx0IGNvbW1pdHMgbm8gYGFwcC5qc29uYC5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgY29udGVudCBpcyBub3QgdmFsaWQgSlNPTiwgbmFtaW5nIHRoZSBmaWxlIGl0IGNhbWUgZnJvbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVtb1ZhdWx0QXBwSnNvbihwYXJhbXM6IFBhcnNlRGVtb1ZhdWx0QXBwSnNvblBhcmFtcyk6IERlbW9WYXVsdEFwcEpzb24ge1xuICBpZiAocGFyYW1zLmNvbnRlbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHBhcmFtcy5jb250ZW50KSBhcyBEZW1vVmF1bHRBcHBKc29uO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlICR7cGFyYW1zLnBhdGh9LmAsIHsgY2F1c2U6IGVycm9yIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMEJBLDBCQUF1QjtBQWdEaEIsTUFBTSwrQkFBaUQ7QUFBQSxFQUM1RCxpQkFBaUI7QUFBQSxFQUNqQixhQUFhO0FBQUEsRUFDYixlQUFlO0FBQUEsRUFDZixrQkFBa0I7QUFDcEI7QUFTTyxTQUFTLHFDQUFxQyxRQUE0RDtBQUMvRyxTQUFPLE9BQ0wsNEJBQU87QUFBQSxJQUNMLEdBQUcsT0FBTztBQUFBLElBQ1YsR0FBRztBQUFBLEVBQ0wsQ0FBQyxDQUNIO0FBQUE7QUFDRjtBQVVPLFNBQVMsa0NBQWtDLFFBQTJEO0FBQzNHLFNBQU8sT0FBTyxLQUFLLDRCQUE0QixFQUFFLE9BQU8sQ0FBQyxZQUFZLE9BQU8sT0FBTyxPQUFPLFNBQVMsT0FBTyxDQUFDO0FBQzdHO0FBU08sU0FBUyxzQkFBc0IsUUFBdUQ7QUFDM0YsTUFBSSxPQUFPLFlBQVksTUFBTTtBQUMzQixXQUFPLENBQUM7QUFBQSxFQUNWO0FBRUEsTUFBSTtBQUNGLFdBQU8sS0FBSyxNQUFNLE9BQU8sT0FBTztBQUFBLEVBQ2xDLFNBQVMsT0FBTztBQUNkLFVBQU0sSUFBSSxNQUFNLG1CQUFtQixPQUFPLElBQUksS0FBSyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQUEsRUFDckU7QUFDRjsiLCJuYW1lcyI6W119
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZW1vLXZhdWx0LWFwcC1qc29uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgYC5vYnNpZGlhbi9hcHAuanNvbmAgc2V0dGluZ3MgYG9ic2lkaWFuLWRldi11dGlsc2Agb3ducyBpbiBldmVyeSBkZW1vIHZhdWx0LlxuICpcbiAqIEEgZGVtbyB2YXVsdCBpcyBkb2N1bWVudGF0aW9uIGZpcnN0IGFuZCBhbiBlZGl0aW5nIHN1cmZhY2Ugc2Vjb25kLCBzbyBmb3VyIE9ic2lkaWFuIHNldHRpbmdzIGhhdmUgdG8gYmVcbiAqIHRoZSBzYW1lIGluIGV2ZXJ5IG9uZSBvZiB0aGVtLiBUaGV5IGFyZSAqKm5vdCoqIGNvbW1pdHRlZDogYSB2YXVsdCB0aGF0IHdyb3RlIHRoZW0gaXRzZWxmIHdvdWxkIGRyaWZ0XG4gKiAobWVhc3VyZWQgMjAyNi0wOC0xMywgb25seSAzIG9mIDIzIHZhdWx0cyBoYWQgdGhlIGZpcnN0IHBhaXIgYW5kIDEgb2YgMjMgdGhlIHNlY29uZCksIHNvIHRoaXMgcGFja2FnZVxuICogb3ducyB0aGVtIGluc3RlYWQg4oCUIHtAbGluayBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0fSBtZXJnZXMgdGhlbSBpbnRvIHRoZSBgYXBwLmpzb25gIG9mIHRoZSBhcmNoaXZlZCBjb3B5XG4gKiBhdCByZWxlYXNlIHRpbWUsIGFuZCB0aGUgZGVtby12YXVsdCBjb3ZlcmFnZSBzdWl0ZSBmYWlscyBhIHZhdWx0IHRoYXQgY29tbWl0cyBhbnkgb2YgdGhlbS5cbiAqXG4gKiAtIGBkZWZhdWx0Vmlld01vZGU6ICdwcmV2aWV3J2AgKyBgbGl2ZVByZXZpZXc6IGZhbHNlYCDigJQgYSBub3RlIG9wZW5zIGFzIGEgcmVhZGVyIHNlZXMgaXQgcmF0aGVyIHRoYW4gYXNcbiAqICAgcmF3IG1hcmt1cC4gT2JzaWRpYW4tb25seTogR2l0SHViIG5ldmVyIHJlYWRzIGBhcHAuanNvbmAgYW5kIHJlbmRlcnMgZXZlcnkgbm90ZSBhcyBIVE1MIHJlZ2FyZGxlc3MuXG4gKiAtIGB1c2VNYXJrZG93bkxpbmtzOiB0cnVlYCArIGBuZXdMaW5rRm9ybWF0OiAncmVsYXRpdmUnYCDigJQgd2hhdCBPYnNpZGlhbiB3cml0ZXMgd2hlbiBhIGxpbmsgaXMgY3JlYXRlZFxuICogICBpbnNpZGUgdGhlIHZhdWx0LiBMZWZ0IGF0IE9ic2lkaWFuJ3MgZGVmYXVsdHMgKGBmYWxzZWAgLyBgJ3Nob3J0ZXN0J2ApIGV2ZXJ5IG5ldyBsaW5rIGNvbWVzIG91dCBhcyBhXG4gKiAgIHNob3J0ZXN0LXBhdGggYFtbd2lraWxpbmtdXWAsIHRoZSBmb3JtIHRoZSBjb3ZlcmFnZSBzdWl0ZSByZWplY3RzIGFuZCBHaXRIdWIgcmVuZGVycyBhcyBsaXRlcmFsXG4gKiAgIGJyYWNrZXRzLiBgcmVsYXRpdmVgIHJhdGhlciB0aGFuIGBhYnNvbHV0ZWAgc28gbm90ZXMga2VlcCByZXNvbHZpbmcgb25jZSB0aGUgdmF1bHQgaXMgZXh0cmFjdGVkIHRvIGFuXG4gKiAgIGFyYml0cmFyeSBmb2xkZXIuXG4gKlxuICogQWxsIGZvdXIgYXJlIHdyaXR0ZW4gZXhwbGljaXRseSwgbmV2ZXIgbGVmdCB0byBhbiBPYnNpZGlhbiBkZWZhdWx0OiBhIHZhdWx0IGxlYW5pbmcgb24gYSBkZWZhdWx0IGNoYW5nZXNcbiAqIGJlaGF2aW9yIHdoZW4gdGhhdCBkZWZhdWx0IGRvZXMuXG4gKlxuICogS2VwdCBmcmVlIG9mIGJvdGggYHZpdGVzdGAgYW5kIGBmZmxhdGVgIG9uIHB1cnBvc2Ug4oCUIHRoZSBjb3ZlcmFnZSBzdWl0ZSBwdWxscyBpbiB0aGUgZm9ybWVyIGFuZCB0aGVcbiAqIGFyY2hpdmVyIHRoZSBsYXR0ZXIsIGFuZCBuZWl0aGVyIG1heSByZWFjaCB0aGUgb3RoZXIncyBlbnZpcm9ubWVudC5cbiAqL1xuXG5pbXBvcnQgeyB0b0pzb24gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYnVpbGRBcmNoaXZlZERlbW9WYXVsdEFwcEpzb25Db250ZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEFyY2hpdmVkRGVtb1ZhdWx0QXBwSnNvbkNvbnRlbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRlbW8gdmF1bHQncyBjb21taXR0ZWQgYGFwcC5qc29uYCwgcGFyc2VkIGJ5IHtAbGluayBwYXJzZURlbW9WYXVsdEFwcEpzb259LlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSnNvbjogRGVtb1ZhdWx0QXBwSnNvbjtcbn1cblxuLyoqXG4gKiBBIHBhcnNlZCBgLm9ic2lkaWFuL2FwcC5qc29uYC4gT25seSB0aGUgc2V0dGluZ3MgaW4ge0BsaW5rIERFTU9fVkFVTFRfQVBQX0pTT05fU0VUVElOR1N9IGFyZSBpbnRlcnByZXRlZDtcbiAqIGV2ZXJ5IG90aGVyIHNldHRpbmcgaXMgY2FycmllZCB0aHJvdWdoIHVudG91Y2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVtb1ZhdWx0QXBwSnNvbiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kT3duZWREZW1vVmF1bHRBcHBKc29uU2V0dGluZ3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbmRPd25lZERlbW9WYXVsdEFwcEpzb25TZXR0aW5nc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZGVtbyB2YXVsdCdzIGNvbW1pdHRlZCBgYXBwLmpzb25gLCBwYXJzZWQgYnkge0BsaW5rIHBhcnNlRGVtb1ZhdWx0QXBwSnNvbn0uXG4gICAqL1xuICByZWFkb25seSBhcHBKc29uOiBEZW1vVmF1bHRBcHBKc29uO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBwYXJzZURlbW9WYXVsdEFwcEpzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlRGVtb1ZhdWx0QXBwSnNvblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcmF3IGZpbGUgY29udGVudCwgb3IgYG51bGxgIHdoZW4gdGhlIHZhdWx0IGNvbW1pdHMgbm8gYGFwcC5qc29uYCBhdCBhbGwg4oCUIHdoaWNoIGlzIHRoZSBleHBlY3RlZFxuICAgKiBzdGF0ZSBmb3IgYSB2YXVsdCB0aGF0IGhhcyBub3RoaW5nIGVsc2UgdG8gY29uZmlndXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogbnVsbCB8IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdGhlIGNvbnRlbnQgd2FzIHJlYWQgZnJvbSwgbmFtZWQgaW4gdGhlIGVycm9yIHdoZW4gaXQgZG9lcyBub3QgcGFyc2UuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGAub2JzaWRpYW4vYXBwLmpzb25gIHNldHRpbmdzIHRoaXMgcGFja2FnZSB3cml0ZXMgaW50byBldmVyeSBhcmNoaXZlZCBkZW1vIHZhdWx0LCBhbmQgdGhhdCBhIGRlbW9cbiAqIHZhdWx0IG11c3QgdGhlcmVmb3JlIG5ldmVyIGNvbW1pdC4gU2VlIHRoZSBmaWxlIG92ZXJ2aWV3IGZvciB3aGF0IGVhY2ggb25lIGJ1eXMuXG4gKi9cbmV4cG9ydCBjb25zdCBERU1PX1ZBVUxUX0FQUF9KU09OX1NFVFRJTkdTOiBEZW1vVmF1bHRBcHBKc29uID0ge1xuICBkZWZhdWx0Vmlld01vZGU6ICdwcmV2aWV3JyxcbiAgbGl2ZVByZXZpZXc6IGZhbHNlLFxuICBuZXdMaW5rRm9ybWF0OiAncmVsYXRpdmUnLFxuICB1c2VNYXJrZG93bkxpbmtzOiB0cnVlXG59O1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYGFwcC5qc29uYCBjb250ZW50IGZvciB0aGUgYXJjaGl2ZWQgY29weSBvZiBhIGRlbW8gdmF1bHQ6IHRoZSBjb21taXR0ZWQgc2V0dGluZ3Mgd2l0aCB0aGVcbiAqIG93bmVkIG9uZXMgbWVyZ2VkIG92ZXIgdGhlbS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZC5cbiAqIEByZXR1cm5zIFRoZSBKU09OIHRleHQgdG8gc3RvcmUgYXMgdGhlIGFyY2hpdmUncyBgLm9ic2lkaWFuL2FwcC5qc29uYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQXJjaGl2ZWREZW1vVmF1bHRBcHBKc29uQ29udGVudChwYXJhbXM6IEJ1aWxkQXJjaGl2ZWREZW1vVmF1bHRBcHBKc29uQ29udGVudFBhcmFtcyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtcbiAgICB0b0pzb24oe1xuICAgICAgLi4ucGFyYW1zLmFwcEpzb24sXG4gICAgICAuLi5ERU1PX1ZBVUxUX0FQUF9KU09OX1NFVFRJTkdTXG4gICAgfSlcbiAgfVxcbmA7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG93bmVkIHNldHRpbmdzIGEgZGVtbyB2YXVsdCBoYXMgY29tbWl0dGVkLiBUaGV5IGJlbG9uZyB0byB0aGlzIHBhY2thZ2UsIHdoaWNoIGluamVjdHMgdGhlbSBhdFxuICogcmVsZWFzZSB0aW1lLCBzbyBhIGNvbW1pdHRlZCBvbmUgaXMgZHJpZnQgd2FpdGluZyB0byBoYXBwZW4gcmF0aGVyIHRoYW4gYSBsb2NhbCBwcmVmZXJlbmNlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAqIEByZXR1cm5zIFRoZSBuYW1lcyBvZiB0aGUgb3duZWQgc2V0dGluZ3MgcHJlc2VudCBpbiB0aGUgY29tbWl0dGVkIGBhcHAuanNvbmAsIGluIHRoZSBvcmRlciB0aGV5IGFyZVxuICogZGVjbGFyZWQgaW4ge0BsaW5rIERFTU9fVkFVTFRfQVBQX0pTT05fU0VUVElOR1N9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE93bmVkRGVtb1ZhdWx0QXBwSnNvblNldHRpbmdzKHBhcmFtczogRmluZE93bmVkRGVtb1ZhdWx0QXBwSnNvblNldHRpbmdzUGFyYW1zKTogc3RyaW5nW10ge1xuICByZXR1cm4gT2JqZWN0LmtleXMoREVNT19WQVVMVF9BUFBfSlNPTl9TRVRUSU5HUykuZmlsdGVyKChzZXR0aW5nKSA9PiBPYmplY3QuaGFzT3duKHBhcmFtcy5hcHBKc29uLCBzZXR0aW5nKSk7XG59XG5cbi8qKlxuICogUGFyc2VzIGEgZGVtbyB2YXVsdCdzIGNvbW1pdHRlZCBgYXBwLmpzb25gLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBzZXR0aW5ncywgb3IgYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIHZhdWx0IGNvbW1pdHMgbm8gYGFwcC5qc29uYC5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgY29udGVudCBpcyBub3QgdmFsaWQgSlNPTiwgbmFtaW5nIHRoZSBmaWxlIGl0IGNhbWUgZnJvbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVtb1ZhdWx0QXBwSnNvbihwYXJhbXM6IFBhcnNlRGVtb1ZhdWx0QXBwSnNvblBhcmFtcyk6IERlbW9WYXVsdEFwcEpzb24ge1xuICBpZiAocGFyYW1zLmNvbnRlbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHBhcmFtcy5jb250ZW50KSBhcyBEZW1vVmF1bHRBcHBKc29uO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlICR7cGFyYW1zLnBhdGh9LmAsIHsgY2F1c2U6IGVycm9yIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTBCQSwwQkFBdUI7QUFnRGhCLE1BQU0sK0JBQWlEO0FBQUEsRUFDNUQsaUJBQWlCO0FBQUEsRUFDakIsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysa0JBQWtCO0FBQ3BCO0FBU08sU0FBUyxxQ0FBcUMsUUFBNEQ7QUFDL0csU0FBTyxPQUNMLDRCQUFPO0FBQUEsSUFDTCxHQUFHLE9BQU87QUFBQSxJQUNWLEdBQUc7QUFBQSxFQUNMLENBQUMsQ0FDSDtBQUFBO0FBQ0Y7QUFVTyxTQUFTLGtDQUFrQyxRQUEyRDtBQUMzRyxTQUFPLE9BQU8sS0FBSyw0QkFBNEIsRUFBRSxPQUFPLENBQUMsWUFBWSxPQUFPLE9BQU8sT0FBTyxTQUFTLE9BQU8sQ0FBQztBQUM3RztBQVNPLFNBQVMsc0JBQXNCLFFBQXVEO0FBQzNGLE1BQUksT0FBTyxZQUFZLE1BQU07QUFDM0IsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUVBLE1BQUk7QUFDRixXQUFPLEtBQUssTUFBTSxPQUFPLE9BQU87QUFBQSxFQUNsQyxTQUFTLE9BQU87QUFDZCxVQUFNLElBQUksTUFBTSxtQkFBbUIsT0FBTyxJQUFJLEtBQUssRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUFBLEVBQ3JFO0FBQ0Y7IiwibmFtZXMiOltdfQ==