obsidian-dev-utils 97.0.0 → 99.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 (143) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE +1 -1
  3. package/dist/integration-test-plugin/main.js +686 -439
  4. package/dist/lib/cjs/__merged.cjs +22 -9
  5. package/dist/lib/cjs/__merged.d.cts +4 -3
  6. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  7. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +36 -1
  8. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +21 -0
  9. package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.cjs +20 -6
  10. package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.d.cts +26 -4
  11. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +38 -38
  12. package/dist/lib/cjs/obsidian/demo-vault-naming.cjs +167 -0
  13. package/dist/lib/cjs/obsidian/demo-vault-naming.d.cts +54 -0
  14. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +11 -5
  15. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.d.cts +10 -8
  16. package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +9 -9
  17. package/dist/lib/cjs/obsidian/desktop-trusted-input.d.cts +23 -4
  18. package/dist/lib/cjs/obsidian/file-change.cjs +6 -6
  19. package/dist/lib/cjs/obsidian/index.cjs +10 -1
  20. package/dist/lib/cjs/obsidian/index.d.cts +3 -0
  21. package/dist/lib/cjs/obsidian/link.cjs +33 -6
  22. package/dist/lib/cjs/obsidian/link.d.cts +35 -0
  23. package/dist/lib/cjs/obsidian/mobile-trusted-input.cjs +195 -0
  24. package/dist/lib/cjs/obsidian/mobile-trusted-input.d.cts +93 -0
  25. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -1
  26. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +4 -0
  27. package/dist/lib/cjs/obsidian/reference.cjs +9 -1
  28. package/dist/lib/cjs/obsidian/reference.d.cts +33 -0
  29. package/dist/lib/cjs/obsidian/resource-lock.cjs +122 -122
  30. package/dist/lib/cjs/obsidian/trusted-input.cjs +206 -0
  31. package/dist/lib/cjs/obsidian/trusted-input.d.cts +126 -0
  32. package/dist/lib/cjs/obsidian/validation.cjs +22 -3
  33. package/dist/lib/cjs/obsidian/validation.d.cts +37 -0
  34. package/dist/lib/cjs/obsidian/vault.cjs +4 -1
  35. package/dist/lib/cjs/obsidian/vault.d.cts +8 -1
  36. package/dist/lib/cjs/script-utils/build.cjs +30 -6
  37. package/dist/lib/cjs/script-utils/build.d.cts +5 -0
  38. package/dist/lib/cjs/script-utils/demo-vault.cjs +26 -6
  39. package/dist/lib/cjs/script-utils/demo-vault.d.cts +12 -8
  40. package/dist/lib/cjs/script-utils/exec.cjs +1 -1
  41. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -2
  42. package/dist/lib/cjs/script-utils/index.cjs +4 -1
  43. package/dist/lib/cjs/script-utils/index.d.cts +1 -0
  44. package/dist/lib/cjs/script-utils/linters/cspell.cjs +3 -3
  45. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +39 -1
  46. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +16 -1
  47. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +5 -0
  48. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.cjs +254 -0
  49. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.d.cts +54 -0
  50. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.cjs +217 -0
  51. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.d.cts +141 -0
  52. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.cjs +214 -0
  53. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.d.cts +32 -0
  54. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.cjs +215 -0
  55. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.d.cts +30 -0
  56. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.cjs +318 -0
  57. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.d.cts +45 -0
  58. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +9 -1
  59. package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -2
  60. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +4 -4
  61. package/dist/lib/cjs/script-utils/nano-staged-config.cjs +7 -5
  62. package/dist/lib/cjs/script-utils/nano-staged-config.d.cts +5 -2
  63. package/dist/lib/cjs/script-utils/npm-run.cjs +4 -3
  64. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +10 -1
  65. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +37 -1
  66. package/dist/lib/cjs/script-utils/package-manager.cjs +370 -0
  67. package/dist/lib/cjs/script-utils/package-manager.d.cts +93 -0
  68. package/dist/lib/cjs/script-utils/version.cjs +21 -9
  69. package/dist/lib/esm/__merged.d.mts +4 -3
  70. package/dist/lib/esm/__merged.mjs +24 -10
  71. package/dist/lib/esm/generated-during-build.mjs +1 -1
  72. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +21 -0
  73. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +36 -1
  74. package/dist/lib/esm/obsidian/components/plugin-suggestion-component.d.mts +26 -4
  75. package/dist/lib/esm/obsidian/components/plugin-suggestion-component.mjs +20 -6
  76. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +38 -38
  77. package/dist/lib/esm/obsidian/demo-vault-naming.d.mts +54 -0
  78. package/dist/lib/esm/obsidian/demo-vault-naming.mjs +61 -0
  79. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.d.mts +10 -8
  80. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +14 -5
  81. package/dist/lib/esm/obsidian/desktop-trusted-input.d.mts +23 -4
  82. package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +9 -9
  83. package/dist/lib/esm/obsidian/file-change.mjs +6 -6
  84. package/dist/lib/esm/obsidian/index.d.mts +3 -0
  85. package/dist/lib/esm/obsidian/index.mjs +7 -1
  86. package/dist/lib/esm/obsidian/link.d.mts +35 -0
  87. package/dist/lib/esm/obsidian/link.mjs +38 -7
  88. package/dist/lib/esm/obsidian/mobile-trusted-input.d.mts +93 -0
  89. package/dist/lib/esm/obsidian/mobile-trusted-input.mjs +84 -0
  90. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +4 -0
  91. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
  92. package/dist/lib/esm/obsidian/reference.d.mts +33 -0
  93. package/dist/lib/esm/obsidian/reference.mjs +8 -1
  94. package/dist/lib/esm/obsidian/resource-lock.mjs +122 -122
  95. package/dist/lib/esm/obsidian/trusted-input.d.mts +126 -0
  96. package/dist/lib/esm/obsidian/trusted-input.mjs +85 -0
  97. package/dist/lib/esm/obsidian/validation.d.mts +37 -0
  98. package/dist/lib/esm/obsidian/validation.mjs +21 -2
  99. package/dist/lib/esm/obsidian/vault.d.mts +8 -1
  100. package/dist/lib/esm/obsidian/vault.mjs +4 -1
  101. package/dist/lib/esm/script-utils/build.d.mts +5 -0
  102. package/dist/lib/esm/script-utils/build.mjs +30 -6
  103. package/dist/lib/esm/script-utils/demo-vault.d.mts +12 -8
  104. package/dist/lib/esm/script-utils/demo-vault.mjs +29 -6
  105. package/dist/lib/esm/script-utils/exec.mjs +1 -1
  106. package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -2
  107. package/dist/lib/esm/script-utils/index.d.mts +1 -0
  108. package/dist/lib/esm/script-utils/index.mjs +3 -1
  109. package/dist/lib/esm/script-utils/linters/cspell.mjs +3 -3
  110. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +39 -1
  111. package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +5 -0
  112. package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +11 -1
  113. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.d.mts +54 -0
  114. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.mjs +148 -0
  115. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.d.mts +141 -0
  116. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.mjs +92 -0
  117. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.d.mts +32 -0
  118. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.mjs +111 -0
  119. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.d.mts +30 -0
  120. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.mjs +112 -0
  121. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.d.mts +45 -0
  122. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.mjs +217 -0
  123. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +9 -1
  124. package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -2
  125. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +4 -4
  126. package/dist/lib/esm/script-utils/nano-staged-config.d.mts +5 -2
  127. package/dist/lib/esm/script-utils/nano-staged-config.mjs +7 -5
  128. package/dist/lib/esm/script-utils/npm-run.mjs +4 -3
  129. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +37 -1
  130. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +10 -1
  131. package/dist/lib/esm/script-utils/package-manager.d.mts +93 -0
  132. package/dist/lib/esm/script-utils/package-manager.mjs +256 -0
  133. package/dist/lib/esm/script-utils/version.mjs +21 -9
  134. package/obsidian/demo-vault-naming/package.json +6 -0
  135. package/obsidian/mobile-trusted-input/package.json +6 -0
  136. package/obsidian/trusted-input/package.json +6 -0
  137. package/package.json +19 -17
  138. package/script-utils/linters/eslint-rules/manifest-description/package.json +6 -0
  139. package/script-utils/linters/eslint-rules/manifest-helpers/package.json +6 -0
  140. package/script-utils/linters/eslint-rules/manifest-id/package.json +6 -0
  141. package/script-utils/linters/eslint-rules/manifest-name/package.json +6 -0
  142. package/script-utils/linters/eslint-rules/manifest-schema/package.json +6 -0
  143. package/script-utils/package-manager/package.json +6 -0
@@ -63,6 +63,7 @@ import * as npm_publish from "./npm-publish.mjs";
63
63
  import * as npm_run from "./npm-run.mjs";
64
64
  import * as npm from "./npm.mjs";
65
65
  import * as obsidian_dev_utils_repo_paths from "./obsidian-dev-utils-repo-paths.mjs";
66
+ import * as package_manager from "./package-manager.mjs";
66
67
  import * as root from "./root.mjs";
67
68
  import * as test_runners from "./test-runners/index.mjs";
68
69
  import * as validate_declarations from "./validate-declarations.mjs";
@@ -91,10 +92,11 @@ export {
91
92
  npm_publish as "npm-publish",
92
93
  npm_run as "npm-run",
93
94
  obsidian_dev_utils_repo_paths as "obsidian-dev-utils-repo-paths",
95
+ package_manager as "package-manager",
94
96
  root,
95
97
  test_runners as "test-runners",
96
98
  validate_declarations as "validate-declarations",
97
99
  version,
98
100
  warnings_as_errors as "warnings-as-errors"
99
101
  };
100
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdidWlsZCcgZnJvbSAnLi9idWlsZC50cyc7XG5leHBvcnQgKiBhcyAnYnVuZGxlcnMnIGZyb20gJy4vYnVuZGxlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NoZWNrLXByb2plY3QtdHlwZXMnIGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5leHBvcnQgKiBhcyAnY2xpLXV0aWxzJyBmcm9tICcuL2NsaS11dGlscy50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1nZW5lcmF0b3InIGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtY29uZmlnJyBmcm9tICcuL2NvbW1pdGxpbnQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdkZW1vLXZhdWx0LWFwcC1qc29uJyBmcm9tICcuL2RlbW8tdmF1bHQtYXBwLWpzb24udHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQtYnV0dG9ucycgZnJvbSAnLi9kZW1vLXZhdWx0LWJ1dHRvbnMudHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQtY292ZXJhZ2UnIGZyb20gJy4vZGVtby12YXVsdC1jb3ZlcmFnZS50cyc7XG5leHBvcnQgKiBhcyAnZGVtby12YXVsdCcgZnJvbSAnLi9kZW1vLXZhdWx0LnRzJztcbmV4cG9ydCAqIGFzICdlbnYtdG9nZ2xlJyBmcm9tICcuL2Vudi10b2dnbGUudHMnO1xuZXhwb3J0ICogYXMgJ2V4ZWMnIGZyb20gJy4vZXhlYy50cyc7XG5leHBvcnQgKiBhcyAnZm9ybWF0dGVycycgZnJvbSAnLi9mb3JtYXR0ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdmcycgZnJvbSAnLi9mcy50cyc7XG5leHBvcnQgKiBhcyAnZ2l0JyBmcm9tICcuL2dpdC50cyc7XG5leHBvcnQgKiBhcyAnanNvbicgZnJvbSAnLi9qc29uLnRzJztcbmV4cG9ydCAqIGFzICdsaW50ZXJzJyBmcm9tICcuL2xpbnRlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ25hbm8tc3RhZ2VkLWNvbmZpZycgZnJvbSAnLi9uYW5vLXN0YWdlZC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1wdWJsaXNoJyBmcm9tICcuL25wbS1wdWJsaXNoLnRzJztcbmV4cG9ydCAqIGFzICducG0tcnVuJyBmcm9tICcuL25wbS1ydW4udHMnO1xuZXhwb3J0ICogYXMgJ25wbScgZnJvbSAnLi9ucG0udHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzJyBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmV4cG9ydCAqIGFzICdyb290JyBmcm9tICcuL3Jvb3QudHMnO1xuZXhwb3J0ICogYXMgJ3Rlc3QtcnVubmVycycgZnJvbSAnLi90ZXN0LXJ1bm5lcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlY2xhcmF0aW9ucycgZnJvbSAnLi92YWxpZGF0ZS1kZWNsYXJhdGlvbnMudHMnO1xuZXhwb3J0ICogYXMgJ3ZlcnNpb24nIGZyb20gJy4vdmVyc2lvbi50cyc7XG5leHBvcnQgKiBhcyAnd2FybmluZ3MtYXMtZXJyb3JzJyBmcm9tICcuL3dhcm5pbmdzLWFzLWVycm9ycy50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsWUFBWSxXQUFhO0FBQ3pCLFlBQVksY0FBZ0I7QUFDNUIsWUFBWUEseUJBQTJCO0FBQ3ZDLFlBQVlDLGVBQWlCO0FBQzdCLFlBQVlDLG9CQUFzQjtBQUNsQyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMseUJBQTJCO0FBQ3ZDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyx5QkFBMkI7QUFDdkMsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVlDLGdCQUFrQjtBQUM5QixZQUFZLFVBQVk7QUFDeEIsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWSxRQUFVO0FBQ3RCLFlBQVksU0FBVztBQUN2QixZQUFZLFVBQVk7QUFDeEIsWUFBWSxhQUFlO0FBQzNCLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyxpQkFBbUI7QUFDL0IsWUFBWUMsYUFBZTtBQUMzQixZQUFZLFNBQVc7QUFDdkIsWUFBWUMsbUNBQXFDO0FBQ2pELFlBQVksVUFBWTtBQUN4QixZQUFZQyxrQkFBb0I7QUFDaEMsWUFBWUMsMkJBQTZCO0FBQ3pDLFlBQVksYUFBZTtBQUMzQixZQUFZQyx3QkFBMEI7IiwKICAibmFtZXMiOiBbImNoZWNrLXByb2plY3QtdHlwZXMiLCAiY2xpLXV0aWxzIiwgImNvZGUtZ2VuZXJhdG9yIiwgImNvbW1pdGxpbnQtY29uZmlnIiwgImRlbW8tdmF1bHQtYXBwLWpzb24iLCAiZGVtby12YXVsdC1idXR0b25zIiwgImRlbW8tdmF1bHQtY292ZXJhZ2UiLCAiZGVtby12YXVsdCIsICJlbnYtdG9nZ2xlIiwgIm5hbm8tc3RhZ2VkLWNvbmZpZyIsICJucG0tcHVibGlzaCIsICJucG0tcnVuIiwgIm9ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzIiwgInRlc3QtcnVubmVycyIsICJ2YWxpZGF0ZS1kZWNsYXJhdGlvbnMiLCAid2FybmluZ3MtYXMtZXJyb3JzIl0KfQo=
102
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdidWlsZCcgZnJvbSAnLi9idWlsZC50cyc7XG5leHBvcnQgKiBhcyAnYnVuZGxlcnMnIGZyb20gJy4vYnVuZGxlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NoZWNrLXByb2plY3QtdHlwZXMnIGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5leHBvcnQgKiBhcyAnY2xpLXV0aWxzJyBmcm9tICcuL2NsaS11dGlscy50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1nZW5lcmF0b3InIGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtY29uZmlnJyBmcm9tICcuL2NvbW1pdGxpbnQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdkZW1vLXZhdWx0LWFwcC1qc29uJyBmcm9tICcuL2RlbW8tdmF1bHQtYXBwLWpzb24udHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQtYnV0dG9ucycgZnJvbSAnLi9kZW1vLXZhdWx0LWJ1dHRvbnMudHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQtY292ZXJhZ2UnIGZyb20gJy4vZGVtby12YXVsdC1jb3ZlcmFnZS50cyc7XG5leHBvcnQgKiBhcyAnZGVtby12YXVsdCcgZnJvbSAnLi9kZW1vLXZhdWx0LnRzJztcbmV4cG9ydCAqIGFzICdlbnYtdG9nZ2xlJyBmcm9tICcuL2Vudi10b2dnbGUudHMnO1xuZXhwb3J0ICogYXMgJ2V4ZWMnIGZyb20gJy4vZXhlYy50cyc7XG5leHBvcnQgKiBhcyAnZm9ybWF0dGVycycgZnJvbSAnLi9mb3JtYXR0ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdmcycgZnJvbSAnLi9mcy50cyc7XG5leHBvcnQgKiBhcyAnZ2l0JyBmcm9tICcuL2dpdC50cyc7XG5leHBvcnQgKiBhcyAnanNvbicgZnJvbSAnLi9qc29uLnRzJztcbmV4cG9ydCAqIGFzICdsaW50ZXJzJyBmcm9tICcuL2xpbnRlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ25hbm8tc3RhZ2VkLWNvbmZpZycgZnJvbSAnLi9uYW5vLXN0YWdlZC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1wdWJsaXNoJyBmcm9tICcuL25wbS1wdWJsaXNoLnRzJztcbmV4cG9ydCAqIGFzICducG0tcnVuJyBmcm9tICcuL25wbS1ydW4udHMnO1xuZXhwb3J0ICogYXMgJ25wbScgZnJvbSAnLi9ucG0udHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzJyBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmV4cG9ydCAqIGFzICdwYWNrYWdlLW1hbmFnZXInIGZyb20gJy4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmV4cG9ydCAqIGFzICdyb290JyBmcm9tICcuL3Jvb3QudHMnO1xuZXhwb3J0ICogYXMgJ3Rlc3QtcnVubmVycycgZnJvbSAnLi90ZXN0LXJ1bm5lcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlY2xhcmF0aW9ucycgZnJvbSAnLi92YWxpZGF0ZS1kZWNsYXJhdGlvbnMudHMnO1xuZXhwb3J0ICogYXMgJ3ZlcnNpb24nIGZyb20gJy4vdmVyc2lvbi50cyc7XG5leHBvcnQgKiBhcyAnd2FybmluZ3MtYXMtZXJyb3JzJyBmcm9tICcuL3dhcm5pbmdzLWFzLWVycm9ycy50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsWUFBWSxXQUFhO0FBQ3pCLFlBQVksY0FBZ0I7QUFDNUIsWUFBWUEseUJBQTJCO0FBQ3ZDLFlBQVlDLGVBQWlCO0FBQzdCLFlBQVlDLG9CQUFzQjtBQUNsQyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMseUJBQTJCO0FBQ3ZDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyx5QkFBMkI7QUFDdkMsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVlDLGdCQUFrQjtBQUM5QixZQUFZLFVBQVk7QUFDeEIsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWSxRQUFVO0FBQ3RCLFlBQVksU0FBVztBQUN2QixZQUFZLFVBQVk7QUFDeEIsWUFBWSxhQUFlO0FBQzNCLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyxpQkFBbUI7QUFDL0IsWUFBWUMsYUFBZTtBQUMzQixZQUFZLFNBQVc7QUFDdkIsWUFBWUMsbUNBQXFDO0FBQ2pELFlBQVlDLHFCQUF1QjtBQUNuQyxZQUFZLFVBQVk7QUFDeEIsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZLGFBQWU7QUFDM0IsWUFBWUMsd0JBQTBCOyIsCiAgIm5hbWVzIjogWyJjaGVjay1wcm9qZWN0LXR5cGVzIiwgImNsaS11dGlscyIsICJjb2RlLWdlbmVyYXRvciIsICJjb21taXRsaW50LWNvbmZpZyIsICJkZW1vLXZhdWx0LWFwcC1qc29uIiwgImRlbW8tdmF1bHQtYnV0dG9ucyIsICJkZW1vLXZhdWx0LWNvdmVyYWdlIiwgImRlbW8tdmF1bHQiLCAiZW52LXRvZ2dsZSIsICJuYW5vLXN0YWdlZC1jb25maWciLCAibnBtLXB1Ymxpc2giLCAibnBtLXJ1biIsICJvYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocyIsICJwYWNrYWdlLW1hbmFnZXIiLCAidGVzdC1ydW5uZXJzIiwgInZhbGlkYXRlLWRlY2xhcmF0aW9ucyIsICJ3YXJuaW5ncy1hcy1lcnJvcnMiXQp9Cg==
@@ -41,6 +41,7 @@ function ensureBrowserProcess() {
41
41
  })();
42
42
  })();
43
43
 
44
+ import { resolveToolCommand } from "../package-manager.mjs";
44
45
  import {
45
46
  execFromRoot,
46
47
  getRootFolder
@@ -50,8 +51,7 @@ async function spellcheck(options) {
50
51
  const targets = paths?.length ? paths : ["."];
51
52
  const rootFolder = getRootFolder();
52
53
  await execFromRoot([
53
- "npx",
54
- "cspell",
54
+ ...resolveToolCommand({ tool: "cspell" }),
55
55
  "--no-progress",
56
56
  "--no-must-find-files",
57
57
  "--gitignore",
@@ -62,4 +62,4 @@ async function spellcheck(options) {
62
62
  export {
63
63
  spellcheck
64
64
  };
65
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2NzcGVsbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZnVuY3Rpb24gZm9yIHJ1bm5pbmcgYSBzcGVsbGNoZWNrIG9uIHRoZSBjb2RlYmFzZSB1c2luZyB0aGUgYGNzcGVsbGAgbGlicmFyeS5cbiAqIEl0IHJlcG9ydHMgYW55IHNwZWxsaW5nIGlzc3VlcyBmb3VuZCBpbiB0aGUgY29kZSBhbmQgcmV0dXJucyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNwZWxsY2hlY2sgd2FzIHN1Y2Nlc3NmdWwuXG4gKi9cblxuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyXG59IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgc3BlbGxjaGVja30gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BlbGxjaGVja09wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBjaGVjay4gSWYgb21pdHRlZCwgY2hlY2tzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVucyBhIHNwZWxsY2hlY2sgb24gdGhlIGVudGlyZSBjb2RlYmFzZSB1c2luZyBgY3NwZWxsYC5cbiAqXG4gKiBDaGVja3MgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGZvbGRlciBhbmQgaXRzIHN1YmZvbGRlcnMgZm9yIHNwZWxsaW5nIGlzc3Vlcy5cbiAqIElmIGlzc3VlcyBhcmUgZm91bmQsIHRoZXkgYXJlIGxvZ2dlZCB0byB0aGUgY29uc29sZSB3aXRoIHRoZWlyIGZpbGUgcGF0aCwgbGluZSwgYW5kIGNvbHVtbiBudW1iZXIuXG4gKlxuICogVXNlcyBgLS1uby1tdXN0LWZpbmQtZmlsZXNgIHNvIHRoYXQgY3NwZWxsIGRvZXMgbm90IGZhaWwgd2hlbiBhbGwgcHJvdmlkZWQgcGF0aHNcbiAqIGFyZSBleGNsdWRlZCBieSBidWlsdC1pbiBpZ25vcmUgcnVsZXMgKGUuZy4sIGBwYWNrYWdlLWxvY2suanNvbmApLlxuICpcbiAqIFVzZXMgYC0tZ2l0aWdub3JlYCBzbyBhIHBhdGggZ2l0IGlnbm9yZXMgaXMgYSBwYXRoIGNzcGVsbCBza2lwcyBcdTIwMTQgZ2VuZXJhdGVkIG91dHB1dCwgYnVpbGQgZm9sZGVycyBhbmRcbiAqIGV2ZXJ5IGBub2RlX21vZHVsZXNgIGFyZSBjb3ZlcmVkIHdpdGhvdXQgYSBoYW5kLW1haW50YWluZWQgYGlnbm9yZVBhdGhzYCBsaXN0IHRoYXQgZHJpZnRzIGZyb21cbiAqIGAuZ2l0aWdub3JlYC4gSXQgaXMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgcmF0aGVyIHRoYW4gc2V0IGluIGBjc3BlbGwuanNvbmAgc28gdGhhdCBldmVyeSBwcm9qZWN0XG4gKiBjb25zdW1pbmcgdGhpcyBmdW5jdGlvbiBpbmhlcml0cyBpdCwgcmF0aGVyIHRoYW4gZWFjaCBoYXZpbmcgdG8gZWRpdCBpdHMgb3duIGNvbmZpZy4gYC0tZ2l0aWdub3JlLXJvb3RgXG4gKiBzdG9wcyB0aGUgc2VhcmNoIGF0IHRoZSBwcm9qZWN0IHJvb3QsIHNvIGEgYC5naXRpZ25vcmVgIGluIHNvbWUgcGFyZW50IGZvbGRlciBvdXRzaWRlIHRoZSBwcm9qZWN0IGNhbm5vdFxuICogc2lsZW50bHkgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGNoZWNrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBTcGVsbGNoZWNrT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9LCBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHNwZWxsY2hlY2suXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzcGVsbGNoZWNrKG9wdGlvbnM/OiBTcGVsbGNoZWNrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHBhdGhzIH0gPSBvcHRpb25zID8/IHt9O1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbJy4nXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3Qgcm9vdEZvbGRlciA9IGdldFJvb3RGb2xkZXIoKTtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAnbnB4JyxcbiAgICAnY3NwZWxsJyxcbiAgICAnLS1uby1wcm9ncmVzcycsXG4gICAgJy0tbm8tbXVzdC1maW5kLWZpbGVzJyxcbiAgICAnLS1naXRpZ25vcmUnLFxuICAgIC4uLnJvb3RGb2xkZXIgPT09IG51bGwgPyBbXSA6IFsnLS1naXRpZ25vcmUtcm9vdCcsIHJvb3RGb2xkZXJdLFxuICAgIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XG4gIF0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBK0JQLGVBQXNCLFdBQVcsU0FBNEM7QUFDM0UsUUFBTSxFQUFFLE1BQU0sSUFBSSxXQUFXLENBQUM7QUFFOUIsUUFBTSxVQUFVLE9BQU8sU0FBUyxRQUFRLENBQUMsR0FBRztBQUU1QyxRQUFNLGFBQWEsY0FBYztBQUNqQyxRQUFNLGFBQWE7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUcsZUFBZSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixVQUFVO0FBQUEsSUFDN0QsRUFBRSxrQkFBa0IsUUFBUTtBQUFBLEVBQzlCLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFtdCn0K
65
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2NzcGVsbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZnVuY3Rpb24gZm9yIHJ1bm5pbmcgYSBzcGVsbGNoZWNrIG9uIHRoZSBjb2RlYmFzZSB1c2luZyB0aGUgYGNzcGVsbGAgbGlicmFyeS5cbiAqIEl0IHJlcG9ydHMgYW55IHNwZWxsaW5nIGlzc3VlcyBmb3VuZCBpbiB0aGUgY29kZSBhbmQgcmV0dXJucyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNwZWxsY2hlY2sgd2FzIHN1Y2Nlc3NmdWwuXG4gKi9cblxuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlclxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIHNwZWxsY2hlY2t9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwZWxsY2hlY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbGUgcGF0aHMgdG8gY2hlY2suIElmIG9taXR0ZWQsIGNoZWNrcyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJ1bnMgYSBzcGVsbGNoZWNrIG9uIHRoZSBlbnRpcmUgY29kZWJhc2UgdXNpbmcgYGNzcGVsbGAuXG4gKlxuICogQ2hlY2tzIGFsbCBmaWxlcyBpbiB0aGUgY3VycmVudCBmb2xkZXIgYW5kIGl0cyBzdWJmb2xkZXJzIGZvciBzcGVsbGluZyBpc3N1ZXMuXG4gKiBJZiBpc3N1ZXMgYXJlIGZvdW5kLCB0aGV5IGFyZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgd2l0aCB0aGVpciBmaWxlIHBhdGgsIGxpbmUsIGFuZCBjb2x1bW4gbnVtYmVyLlxuICpcbiAqIFVzZXMgYC0tbm8tbXVzdC1maW5kLWZpbGVzYCBzbyB0aGF0IGNzcGVsbCBkb2VzIG5vdCBmYWlsIHdoZW4gYWxsIHByb3ZpZGVkIHBhdGhzXG4gKiBhcmUgZXhjbHVkZWQgYnkgYnVpbHQtaW4gaWdub3JlIHJ1bGVzIChlLmcuLCBgcGFja2FnZS1sb2NrLmpzb25gKS5cbiAqXG4gKiBVc2VzIGAtLWdpdGlnbm9yZWAgc28gYSBwYXRoIGdpdCBpZ25vcmVzIGlzIGEgcGF0aCBjc3BlbGwgc2tpcHMgXHUyMDE0IGdlbmVyYXRlZCBvdXRwdXQsIGJ1aWxkIGZvbGRlcnMgYW5kXG4gKiBldmVyeSBgbm9kZV9tb2R1bGVzYCBhcmUgY292ZXJlZCB3aXRob3V0IGEgaGFuZC1tYWludGFpbmVkIGBpZ25vcmVQYXRoc2AgbGlzdCB0aGF0IGRyaWZ0cyBmcm9tXG4gKiBgLmdpdGlnbm9yZWAuIEl0IGlzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lIHJhdGhlciB0aGFuIHNldCBpbiBgY3NwZWxsLmpzb25gIHNvIHRoYXQgZXZlcnkgcHJvamVjdFxuICogY29uc3VtaW5nIHRoaXMgZnVuY3Rpb24gaW5oZXJpdHMgaXQsIHJhdGhlciB0aGFuIGVhY2ggaGF2aW5nIHRvIGVkaXQgaXRzIG93biBjb25maWcuIGAtLWdpdGlnbm9yZS1yb290YFxuICogc3RvcHMgdGhlIHNlYXJjaCBhdCB0aGUgcHJvamVjdCByb290LCBzbyBhIGAuZ2l0aWdub3JlYCBpbiBzb21lIHBhcmVudCBmb2xkZXIgb3V0c2lkZSB0aGUgcHJvamVjdCBjYW5ub3RcbiAqIHNpbGVudGx5IHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBjaGVjay5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgU3BlbGxjaGVja09wdGlvbnN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSwgaW5kaWNhdGluZyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSBzcGVsbGNoZWNrLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3BlbGxjaGVjayhvcHRpb25zPzogU3BlbGxjaGVja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBwYXRocyB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2ggaXMgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCB0YXJnZXRzID0gcGF0aHM/Lmxlbmd0aCA/IHBhdGhzIDogWycuJ107XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCk7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ2NzcGVsbCcgfSksXG4gICAgJy0tbm8tcHJvZ3Jlc3MnLFxuICAgICctLW5vLW11c3QtZmluZC1maWxlcycsXG4gICAgJy0tZ2l0aWdub3JlJyxcbiAgICAuLi5yb290Rm9sZGVyID09PSBudWxsID8gW10gOiBbJy0tZ2l0aWdub3JlLXJvb3QnLCByb290Rm9sZGVyXSxcbiAgICB7IGJhdGNoZWRBcmd1bWVudHM6IHRhcmdldHMgfVxuICBdKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQStCUCxlQUFzQixXQUFXLFNBQTRDO0FBQzNFLFFBQU0sRUFBRSxNQUFNLElBQUksV0FBVyxDQUFDO0FBRTlCLFFBQU0sVUFBVSxPQUFPLFNBQVMsUUFBUSxDQUFDLEdBQUc7QUFFNUMsUUFBTSxhQUFhLGNBQWM7QUFDakMsUUFBTSxhQUFhO0FBQUEsSUFDakIsR0FBRyxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUFBLElBQ3hDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUcsZUFBZSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixVQUFVO0FBQUEsSUFDN0QsRUFBRSxrQkFBa0IsUUFBUTtBQUFBLEVBQzlCLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -49,6 +49,7 @@ import { createTypeScriptImportResolver } from "eslint-import-resolver-typescrip
49
49
  import { flatConfigs as eslintPluginImportXFlatConfigs } from "eslint-plugin-import-x";
50
50
  import nodePlugin from "eslint-plugin-n";
51
51
  import obsidianmd from "eslint-plugin-obsidianmd";
52
+ import { PlainTextParser } from "eslint-plugin-obsidianmd/dist/lib/plainTextParser.js";
52
53
  import { configs as perfectionistConfigs } from "eslint-plugin-perfectionist";
53
54
  import unicorn from "eslint-plugin-unicorn";
54
55
  import { defineConfig } from "eslint/config";
@@ -58,6 +59,7 @@ import { ObsidianPluginRepoPaths } from "../../obsidian/plugin/obsidian-plugin-r
58
59
  import { join } from "../../path.mjs";
59
60
  import { getRootFolder } from "../root.mjs";
60
61
  import { noRestrictedSyntaxRuleEntries } from "./eslint-no-restricted-syntax.mjs";
62
+ import { jsonPlugin } from "./eslint-rules/manifest-helpers.mjs";
61
63
  import { obsidianDevUtilsPlugin } from "./eslint-rules/obsidian-dev-utils-plugin.mjs";
62
64
  class EslintConfigContext {
63
65
  /**
@@ -122,6 +124,8 @@ function defineEslintConfigs(options = {}) {
122
124
  ...getObsidianDevUtilsPluginConfigs(context),
123
125
  ...getNodeCompatConfigs(context),
124
126
  ...getIntegrationTestConfigs(),
127
+ ...getManifestConfigs(),
128
+ ...getLicenseConfigs(),
125
129
  ...customConfigs
126
130
  );
127
131
  }
@@ -408,6 +412,40 @@ function getIntegrationTestConfigs() {
408
412
  }
409
413
  ]);
410
414
  }
415
+ function getLicenseConfigs() {
416
+ return defineConfig([
417
+ {
418
+ files: [ObsidianPluginRepoPaths.License],
419
+ languageOptions: {
420
+ parser: PlainTextParser
421
+ },
422
+ plugins: {
423
+ obsidianmd
424
+ },
425
+ rules: {
426
+ "obsidianmd/validate-license": "error"
427
+ }
428
+ }
429
+ ]);
430
+ }
431
+ function getManifestConfigs() {
432
+ return defineConfig([
433
+ {
434
+ files: [ObsidianPluginRepoPaths.ManifestJson],
435
+ language: "json/json",
436
+ plugins: {
437
+ "json": jsonPlugin,
438
+ "obsidian-dev-utils": obsidianDevUtilsPlugin
439
+ },
440
+ rules: {
441
+ "obsidian-dev-utils/manifest-description": "error",
442
+ "obsidian-dev-utils/manifest-id": "error",
443
+ "obsidian-dev-utils/manifest-name": "error",
444
+ "obsidian-dev-utils/manifest-schema": "error"
445
+ }
446
+ }
447
+ ]);
448
+ }
411
449
  function getNodeCompatConfigs(context) {
412
450
  const minimumNodeVersion = ">=16.16.0";
413
451
  return defineConfig([
@@ -1002,4 +1040,4 @@ export {
1002
1040
  EslintConfigContext,
1003
1041
  defineEslintConfigs
1004
1042
  };
1005
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgY29uZmlndXJhdGlvbiBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cyB3aXRoIHZhcmlvdXMgcGx1Z2lucy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIEVTTGludCBjb25maWd1cmF0aW9ucyBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cywgaW50ZWdyYXRpbmcgbXVsdGlwbGUgRVNMaW50IHBsdWdpbnNcbiAqIHN1Y2ggYXMgYEB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJgLCBgQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW5gLFxuICogYGVzbGludC1wbHVnaW4tbW9kdWxlcy1uZXdsaW5lc2AsIGBAc3R5bGlzdGljL2VzbGludC1wbHVnaW5gLlxuICogSXQgc2V0cyB1cCBwYXJzZXJzLCBwbHVnaW5zLCBhbmQgcnVsZXMgZm9yIG1haW50YWluaW5nIGNvZGUgcXVhbGl0eSBhbmQgY29uc2lzdGVuY3kuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIEVTTGludCBydWxlL3BsdWdpbiBjb25maWd1cmF0aW9uOyBjb3JyZWN0bmVzcyBpcyB2ZXJpZmllZCBieSBydW5uaW5nIEVTTGludCwgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSAnZXNsaW50JztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tbWFnaWMtbnVtYmVycyAtLSBXZSBkaXNhYmxlZCBtYWdpYyBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhbGwgb3ZlciB0aGUgY29uZmlncy4gKi9cbmltcG9ydCBjb21tZW50c0NvbmZpZ3MgZnJvbSAnQGVzbGludC1jb21tdW5pdHkvZXNsaW50LXBsdWdpbi1lc2xpbnQtY29tbWVudHMvY29uZmlncyc7XG5pbXBvcnQgeyBpbmNsdWRlSWdub3JlRmlsZSB9IGZyb20gJ0Blc2xpbnQvY29uZmlnLWhlbHBlcnMnO1xuaW1wb3J0IGVzbGludCBmcm9tICdAZXNsaW50L2pzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1yZW5hbWUtZGVmYXVsdCAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgcGx1Z2luYCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHN0eWxpc3RpYyBmcm9tICdAc3R5bGlzdGljL2VzbGludC1wbHVnaW4nO1xuaW1wb3J0IHsgY3JlYXRlVHlwZVNjcmlwdEltcG9ydFJlc29sdmVyIH0gZnJvbSAnZXNsaW50LWltcG9ydC1yZXNvbHZlci10eXBlc2NyaXB0JztcbmltcG9ydCB7IGZsYXRDb25maWdzIGFzIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncyB9IGZyb20gJ2VzbGludC1wbHVnaW4taW1wb3J0LXgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBfZGVmYXVsdGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCBub2RlUGx1Z2luIGZyb20gJ2VzbGludC1wbHVnaW4tbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYHBsdWdpbmAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCBvYnNpZGlhbm1kIGZyb20gJ2VzbGludC1wbHVnaW4tb2JzaWRpYW5tZCc7XG5pbXBvcnQgeyBjb25maWdzIGFzIHBlcmZlY3Rpb25pc3RDb25maWdzIH0gZnJvbSAnZXNsaW50LXBsdWdpbi1wZXJmZWN0aW9uaXN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1yZW5hbWUtZGVmYXVsdCAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgaW5kZXhgIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgdW5pY29ybiBmcm9tICdlc2xpbnQtcGx1Z2luLXVuaWNvcm4nO1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAnZXNsaW50L2NvbmZpZyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHRzZXNsaW50IGZyb20gJ3R5cGVzY3JpcHQtZXNsaW50JztcblxuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi9wbHVnaW4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJy4uLy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgZ2V0Um9vdEZvbGRlciB9IGZyb20gJy4uL3Jvb3QudHMnO1xuaW1wb3J0IHsgbm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJpZXMgfSBmcm9tICcuL2VzbGludC1uby1yZXN0cmljdGVkLXN5bnRheC50cyc7XG5pbXBvcnQgeyBvYnNpZGlhbkRldlV0aWxzUGx1Z2luIH0gZnJvbSAnLi9lc2xpbnQtcnVsZXMvb2JzaWRpYW4tZGV2LXV0aWxzLXBsdWdpbi50cyc7XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGRlZmluaW5nIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbmVFc2xpbnRDb25maWdzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgYnVpbGRzIGN1c3RvbSBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIFRoZSBjdXN0b20gRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICAgKi9cbiAgY3VzdG9tQ29uZmlncz8oY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IGVkaXRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgZWRpdENvbnRleHQ/KGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBjb250ZXh0IGZvciBkZWZpbmluZyBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBFc2xpbnRDb25maWdDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSByb290IGNvbmZpZ3VyYXRpb24gZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9vdENvbmZpZ0ZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NyaXB0IGZpbGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjcmlwdEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbGwgZmlsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhbGwgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgYWxsRmlsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy50ZXN0RmlsZXMsIC4uLnRoaXMuc2NyaXB0RmlsZXMsIC4uLnRoaXMucm9vdENvbmZpZ0ZpbGVzLCAuLi50aGlzLnNvdXJjZUZpbGVzXTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyBFU0xpbnQgY29uZmlndXJhdGlvbnMgZm9yIFR5cGVTY3JpcHQgcHJvamVjdHMsIGludGVncmF0aW5nIG11bHRpcGxlIEVTTGludCBwbHVnaW5zXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICogQHJldHVybnMgVGhlIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUVzbGludENvbmZpZ3Mob3B0aW9uczogRGVmaW5lRXNsaW50Q29uZmlnc09wdGlvbnMgPSB7fSk6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgRXNsaW50Q29uZmlnQ29udGV4dCgpO1xuICBjb250ZXh0LnJvb3RDb25maWdGaWxlcy5wdXNoKFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkNvbW1pdGxpbnRDb25maWdUcyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Fc2xpbnRDb25maWdNdHMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuVml0ZXN0Q29uZmlnVHNcbiAgKTtcbiAgY29udGV4dC5zY3JpcHRGaWxlcy5wdXNoKFxuICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU2NyaXB0cywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55VHMpXG4gICk7XG4gIGNvbnRleHQuc291cmNlRmlsZXMucHVzaChcbiAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNyYywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUc3gpXG4gICk7XG4gIGNvbnRleHQudGVzdEZpbGVzLnB1c2goXG4gICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5UZXN0cywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTW9ja3MsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVRzKSxcbiAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNyYywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55VGVzdFRzKVxuICApO1xuXG4gIGlmIChvcHRpb25zLmVkaXRDb250ZXh0KSB7XG4gICAgb3B0aW9ucy5lZGl0Q29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGN1c3RvbUNvbmZpZ3MgPSBvcHRpb25zLmN1c3RvbUNvbmZpZ3M/Lihjb250ZXh0KSA/PyBbXTtcblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIC4uLmdldEdpdElnbm9yZUNvbmZpZ3MoKSxcbiAgICAvLyBPYnNpZGlhbm1kIGNvbmZpZ3MgcnVuIGZpcnN0IHNvIG91ciBzdHJpY3RlciBydWxlcyBvdmVycmlkZSB0aGVpciByZWxheGVkIGRlZmF1bHRzXG4gICAgLi4uZ2V0T2JzaWRpYW5MaW50Q29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRFc2xpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFRzZXNsaW50Q29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRTdHlsaXN0aWNDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldEltcG9ydFhDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFBlcmZlY3Rpb25pc3RDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFVuaWNvcm5Db25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldEVzbGludEltcG9ydFJlc29sdmVyVHlwZXNjcmlwdENvbmZpZ3MoKSxcbiAgICAuLi5nZXRFc2xpbnRDb21tZW50c0NvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0T2JzaWRpYW5EZXZVdGlsc1BsdWdpbkNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0Tm9kZUNvbXBhdENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0SW50ZWdyYXRpb25UZXN0Q29uZmlncygpLFxuICAgIC4uLmN1c3RvbUNvbmZpZ3NcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXNsaW50Q29tbWVudHNDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYHJlY29tbWVuZGVkYCBpcyB0b28gY29uZnVzaW5nLlxuICAgICAgZXh0ZW5kczogW2NvbW1lbnRzQ29uZmlncy5yZWNvbW1lbmRlZF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC1jb21tZW50cy9yZXF1aXJlLWRlc2NyaXB0aW9uJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldEVzbGludENvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtlc2xpbnQuY29uZmlncy5yZWNvbW1lbmRlZF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2FjY2Vzc29yLXBhaXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2FycmF5LWNhbGxiYWNrLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICdjYW1lbGNhc2UnOiAnZXJyb3InLFxuICAgICAgICAnY2FwaXRhbGl6ZWQtY29tbWVudHMnOiBbJ2Vycm9yJywgJ2Fsd2F5cycsIHsgYmxvY2s6IHsgaWdub3JlUGF0dGVybjogJ3Y4JyB9IH1dLFxuICAgICAgICAnY29tcGxleGl0eSc6ICdlcnJvcicsXG4gICAgICAgICdjb25zaXN0ZW50LXRoaXMnOiAnZXJyb3InLFxuICAgICAgICAnY3VybHknOiAnZXJyb3InLFxuICAgICAgICAnZGVmYXVsdC1jYXNlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZS1sYXN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtcGFyYW0tbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdlcWVxZXEnOiAnZXJyb3InLFxuICAgICAgICAnZnVuYy1uYW1lLW1hdGNoaW5nJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZXMnOiAnZXJyb3InLFxuICAgICAgICAnZnVuYy1zdHlsZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdkZWNsYXJhdGlvbicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3dBcnJvd0Z1bmN0aW9uczogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICdncm91cGVkLWFjY2Vzc29yLXBhaXJzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2dldEJlZm9yZVNldCdcbiAgICAgICAgXSxcbiAgICAgICAgJ2d1YXJkLWZvci1pbic6ICdlcnJvcicsXG4gICAgICAgICduby1hbGVydCc6ICdlcnJvcicsXG4gICAgICAgICduby1hcnJheS1jb25zdHJ1Y3Rvcic6ICdlcnJvcicsXG4gICAgICAgICduby1iaXR3aXNlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWNhbGxlcic6ICdlcnJvcicsXG4gICAgICAgICduby1jb25zb2xlJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3c6IFtcbiAgICAgICAgICAgICAgJ3dhcm4nLFxuICAgICAgICAgICAgICAnZXJyb3InXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8tY29uc3RydWN0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWRpdi1yZWdleCc6ICdlcnJvcicsXG4gICAgICAgICduby1lbHNlLXJldHVybic6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93RWxzZUlmOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWVtcHR5LWZ1bmN0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dGVuZC1uYXRpdmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtYmluZCc6ICdlcnJvcicsXG4gICAgICAgICduby1leHRyYS1sYWJlbCc6ICdlcnJvcicsXG4gICAgICAgICduby1pbXBsaWNpdC1jb2VyY2lvbic6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICchISdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1pbXBsaWVkLWV2YWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW5uZXItZGVjbGFyYXRpb25zJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWl0ZXJhdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxhYmVsLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbHMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbG9uZS1ibG9ja3MnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbG9uZWx5LWlmJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvb3AtZnVuYyc6ICdlcnJvcicsXG4gICAgICAgICduby1tYWdpYy1udW1iZXJzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGV0ZWN0T2JqZWN0czogdHJ1ZSxcbiAgICAgICAgICAgIGVuZm9yY2VDb25zdDogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZTogW1xuICAgICAgICAgICAgICAtMSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLW11bHRpLWFzc2lnbic6ICdlcnJvcicsXG4gICAgICAgICduby1tdWx0aS1zdHInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbmVnYXRlZC1jb25kaXRpb24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbmVzdGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tbmV3LWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbmV3LXdyYXBwZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW9iamVjdC1jb25zdHJ1Y3Rvcic6ICdlcnJvcicsXG4gICAgICAgICduby1vY3RhbC1lc2NhcGUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tcHJvbWlzZS1leGVjdXRvci1yZXR1cm4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tcHJvdG8nOiAnZXJyb3InLFxuICAgICAgICAnbm8tcmVzdHJpY3RlZC1zeW50YXgnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAuLi5ub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllc1xuICAgICAgICBdLFxuICAgICAgICAnbm8tcmV0dXJuLWFzc2lnbic6ICdlcnJvcicsXG4gICAgICAgICduby1zY3JpcHQtdXJsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNlbGYtY29tcGFyZSc6ICdlcnJvcicsXG4gICAgICAgICduby1zZXF1ZW5jZXMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2hhZG93JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyc6ICdlcnJvcicsXG4gICAgICAgICduby10aHJvdy1saXRlcmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5uZWVkZWQtdGVybmFyeSc6ICdlcnJvcicsXG4gICAgICAgICduby11bnJlYWNoYWJsZS1sb29wJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVudXNlZC1leHByZXNzaW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWFzc2lnbm1lbnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1jYWxsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY29tcHV0ZWQta2V5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY29uY2F0JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1yZW5hbWUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1yZXR1cm4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tdmFyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZvaWQnOiAnZXJyb3InLFxuICAgICAgICAnb2JqZWN0LXNob3J0aGFuZCc6ICdlcnJvcicsXG4gICAgICAgICdvcGVyYXRvci1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1hcnJvdy1jYWxsYmFjayc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItY29uc3QnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWV4cG9uZW50aWF0aW9uLW9wZXJhdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1uYW1lZC1jYXB0dXJlLWdyb3VwJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1udW1lcmljLWxpdGVyYWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1vYmplY3QtaGFzLW93bic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LXNwcmVhZCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1yZWdleC1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVzdC1wYXJhbXMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXNwcmVhZCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItdGVtcGxhdGUnOiAnZXJyb3InLFxuICAgICAgICAncmFkaXgnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hdG9taWMtdXBkYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdyZXF1aXJlLWF3YWl0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3N5bWJvbC1kZXNjcmlwdGlvbic6ICdlcnJvcicsXG4gICAgICAgICd1bmljb2RlLWJvbSc6ICdlcnJvcicsXG4gICAgICAgICd2YXJzLW9uLXRvcCc6ICdlcnJvcicsXG4gICAgICAgICd5b2RhJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ25vLW1hZ2ljLW51bWJlcnMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldEVzbGludEltcG9ydFJlc29sdmVyVHlwZXNjcmlwdENvbmZpZ3MoKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgJ2ltcG9ydC14L3Jlc29sdmVyLW5leHQnOiBbXG4gICAgICAgICAgY3JlYXRlVHlwZVNjcmlwdEltcG9ydFJlc29sdmVyKHtcbiAgICAgICAgICAgIGFsd2F5c1RyeVR5cGVzOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldEdpdElnbm9yZUNvbmZpZ3MoKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgZ2l0aWdub3JlUGF0aCA9IGpvaW4oZ2V0Um9vdEZvbGRlcigpID8/ICcnLCAnLmdpdGlnbm9yZScpO1xuICBpZiAoIWV4aXN0c1N5bmMoZ2l0aWdub3JlUGF0aCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFtpbmNsdWRlSWdub3JlRmlsZShnaXRpZ25vcmVQYXRoKV07XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydFhDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy5yZWNvbW1lbmRlZCxcbiAgICAgICAgZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzLnR5cGVzY3JpcHQsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy5lcnJvcnMsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy53YXJuaW5nc1xuICAgICAgXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvY29uc2lzdGVudC10eXBlLXNwZWNpZmllci1zdHlsZSc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9leHRlbnNpb25zJzogWydlcnJvcicsICdpZ25vcmVQYWNrYWdlcyddLFxuICAgICAgICAnaW1wb3J0LXgvZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvaW1wb3J0cy1maXJzdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uZXdsaW5lLWFmdGVyLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hYnNvbHV0ZS1wYXRoJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWFtZCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tY29tbW9uanMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tY3ljbGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZGVmYXVsdC1leHBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZGVwcmVjYXRlZCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1kdXBsaWNhdGVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWR5bmFtaWMtcmVxdWlyZSc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1lbXB0eS1uYW1lZC1ibG9ja3MnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8taW1wb3J0LW1vZHVsZS1leHBvcnRzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLW11dGFibGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lZC1kZWZhdWx0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLW5hbWVzcGFjZSc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1yZWxhdGl2ZS1wYWNrYWdlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1yZXN0cmljdGVkLXBhdGhzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLXNlbGYtaW1wb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVuYXNzaWduZWQtaW1wb3J0JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3c6IFtcbiAgICAgICAgICAgICAgJyoqLyouY3NzJyxcbiAgICAgICAgICAgICAgJyoqLyouc2FzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNjc3MnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnaW1wb3J0LXgvbm8tdW51c2VkLW1vZHVsZXMnOiAnb2ZmJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby13ZWJwYWNrLWxvYWRlci1zeW50YXgnOiAnZXJyb3InXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlczogY29udGV4dC5zY3JpcHRGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlczogW1xuICAgICAgICAuLi5jb250ZXh0LnJvb3RDb25maWdGaWxlcyxcbiAgICAgICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1haW5UcylcbiAgICAgIF0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tZGVmYXVsdC1leHBvcnQnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldEludGVncmF0aW9uVGVzdENvbmZpZ3MoKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgLy8gSW50ZWdyYXRpb24gdGVzdHMgcnVuIGluIGEgTm9kZSBlbnZpcm9ubWVudCBhbmQgbGVnaXRpbWF0ZWx5IHJlYWQgZmlsZXMgLyBwYXRocywgc28gdGhlIE5vZGUtYnVpbHRpbnMgYmFucyBkbyBub3QgYXBwbHkgdG8gdGhlbS5cbiAgICAgIGZpbGVzOiBbam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueUludGVncmF0aW9uVGVzdFRzKV0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJyxcbiAgICAgICAgJ29ic2lkaWFubWQvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEFuIGludGVncmF0aW9uIHRlc3QgdGhhdCBkcml2ZXMgdGhlIFVJIHdpdGggYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgIHByb2R1Y2VzIGFuXG4gICAgICAgKiBVTlRSVVNURUQgZXZlbnQsIGFuZCBPYnNpZGlhbiBhbmQgQ29kZU1pcnJvciBnYXRlIG9uIGBpc1RydXN0ZWRgIFx1MjAxNCBzbyB0aGUgdGVzdCBjYW4gZXhlcmNpc2VcbiAgICAgICAqIG5vdGhpbmcgd2hpbGUgc3RpbGwgcGFzc2luZy4gT25seSBpbnRlZ3JhdGlvbiB0ZXN0cyBhcmUgY292ZXJlZDogYSB1bml0IHRlc3QgaGFzIG5vIHJlYWwgaW5wdXRcbiAgICAgICAqIHBpcGVsaW5lIHRvIHJlYWNoLCBzbyBkaXNwYXRjaGluZyBpcyB0aGUgb25seSB0aGluZyBpdCBjYW4gZG8uXG4gICAgICAgKlxuICAgICAgICogQW5kcm9pZCBpcyBleGVtcHQgQlkgRklMRU5BTUUgcmF0aGVyIHRoYW4gYnkgYSBkaXNhYmxlIGNvbW1lbnQsIGJlY2F1c2UgdGhlIGV4ZW1wdGlvbiBpcyBhXG4gICAgICAgKiBwcm9wZXJ0eSBvZiB0aGUgcGxhdGZvcm0gcmF0aGVyIHRoYW4gb2YgYW55IG9uZSBjYWxsIHNpdGU6IHRoZSB0cnVzdGVkIGhlbHBlcnMgYXJlIGJ1aWx0IG9uXG4gICAgICAgKiBgd2luZG93LmVsZWN0cm9uYCwgd2hpY2ggZG9lcyBub3QgZXhpc3QgdGhlcmUsIHNvIGV2ZXJ5IGRpc3BhdGNoIGluIHN1Y2ggYSBmaWxlIGlzIGxlZ2l0aW1hdGUgYW5kXG4gICAgICAgKiBhbHdheXMgd2lsbCBiZS4gQSBgKi5jcm9zcy1wbGF0Zm9ybS4qYCBmaWxlIGlzIGRlbGliZXJhdGVseSBOT1QgZXhlbXB0IFx1MjAxNCBpdCBydW5zIG9uIGRlc2t0b3AgdG9vLFxuICAgICAgICogd2hlcmUgdGhlIHRydXN0ZWQgcGF0aCBpcyBhdmFpbGFibGUsIHNvIGl0IHNob3VsZCBicmFuY2ggb24gYFBsYXRmb3JtLmlzRGVza3RvcEFwcGAgYW5kIGRpc2FibGVcbiAgICAgICAqIHRoZSBydWxlIG9uIHRoZSBtb2JpbGUgYXJtIGFsb25lLlxuICAgICAgICovXG4gICAgICBmaWxlczogW2pvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlJbnRlZ3JhdGlvblRlc3RUcyldLFxuICAgICAgaWdub3JlczogW1xuICAgICAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNyYywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55QW5kcm9pZEludGVncmF0aW9uVGVzdFRzKSxcbiAgICAgICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueUFuZHJvaWRDYXB0dXJlSW50ZWdyYXRpb25UZXN0VHMpXG4gICAgICBdLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9uby11bnRydXN0ZWQtaW5wdXQtZXZlbnRzJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVDb21wYXRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICAvKlxuICAgKiBUaGUgbWluaW11bSBPYnNpZGlhbiBpbnN0YWxsZXIgdGhhdCBzdGlsbCByZWNlaXZlcyBhcHAgdXBkYXRlcyBhbmQgd29ya3MgaXMgMS4xLjksIHdoaWNoIHNoaXBzIEVsZWN0cm9uXG4gICAqIDIxLjMuMyBhbmQgcnVucyBOb2RlIDE2LjE2LjAuIFNoaXBwZWQgc291cmNlIG11c3QgdGhlcmVmb3JlIGF2b2lkIE5vZGUvRVMgcnVudGltZSBidWlsdGlucyB1bmF2YWlsYWJsZSBpblxuICAgKiB0aGF0IHZlcnNpb24uIFRlc3RzIGFuZCBzY3JpcHRzIGFyZSBkZXYtb25seSBhbmQgZXhlbXB0LlxuICAgKlxuICAgKiBTb3VyY2Ugb2YgdHJ1dGg6IGBvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL21ldGFkYXRhLmpzb25gIFx1MjAxNCB0aGUgbmV3ZXN0IHJlbGVhc2UgY2FycnlpbmcgdGhlIGZpZWxkXG4gICAqICgxLjEzLjEpIGRlY2xhcmVzIGBtaW5SdW5uYWJsZUluc3RhbGxlclZlcnNpb246IFwiMS4xLjlcImAsIGFuZCB0aGF0IGluc3RhbGxlcidzIGBydW50aW1lVmVyc2lvbnNgIGdpdmVzIHRoZVxuICAgKiBFbGVjdHJvbiBhbmQgTm9kZSB2ZXJzaW9ucyBhYm92ZS4gUmUtZGVyaXZlIGZyb20gdGhlcmUgcmF0aGVyIHRoYW4gZWRpdGluZyB0aGlzIG51bWJlciBieSBoYW5kLlxuICAgKi9cbiAgY29uc3QgbWluaW11bU5vZGVWZXJzaW9uID0gJz49MTYuMTYuMCc7XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc291cmNlRmlsZXMsXG4gICAgICBpZ25vcmVzOiBbXG4gICAgICAgIC4uLmNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgICAvLyBEZXYtb25seSB0b29saW5nIChidWlsZCwgbGludCwgdmVyc2lvbikgdW5kZXIgYHNyYy9zY3JpcHQtdXRpbHMvKipgIHJ1bnMgdmlhIGBqaXRpYCBpbiB0aGUgY29uc3VtZXIncyBOb2RlIGVudmlyb25tZW50IHdoZW4gYnVpbGRpbmcgYSBwbHVnaW4gYW5kIG5ldmVyIHNoaXBzIGludG8gdGhlIE9ic2lkaWFuIHJ1bnRpbWUsIHNvIHRoZSBOb2RlLTE2IGZsb29yIGRvZXMgbm90IGFwcGx5IHRvIGl0LlxuICAgICAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNjcmlwdFV0aWxzLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcylcbiAgICAgIF0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIG46IG5vZGVQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZlcnNpb246IG1pbmltdW1Ob2RlVmVyc2lvblxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ24vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGBCbG9iYCBhbmQgYEZpbGVgIGFyZSBET00gd2ViIGdsb2JhbHMgYWx3YXlzIHByZXNlbnQgaW4gdGhlIE9ic2lkaWFuL0VsZWN0cm9uIHJlbmRlcmVyIChldmVyeSBzdXBwb3J0ZWQgQ2hyb21pdW0pLCBidXQgdGhlIHJ1bGUgYWxzbyBrbm93cyB0aGVtIGFzIE5vZGUncyBleHBlcmltZW50YWwgYnVpbHRpbnMgYW5kIGNhbm5vdCB0ZWxsIHdoaWNoIGlzIG1lYW50LiBJZ25vcmUgdGhlbSBnbG9iYWxseTsgZ2VudWluZWx5IG5ld2VyIEFQSXMgKGUuZy4gYEFib3J0U2lnbmFsLmFueWApIHN0YXkgZmxhZ2dlZC5cbiAgICAgICAgICAgIGlnbm9yZXM6IFtcbiAgICAgICAgICAgICAgJ0Jsb2InLFxuICAgICAgICAgICAgICAnRmlsZSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB2ZXJzaW9uOiBtaW5pbXVtTm9kZVZlcnNpb25cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRPYnNpZGlhbkRldlV0aWxzUGx1Z2luQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscyc6IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4nOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL25vLXVudXNlZC1wYXJhbXMtbWVtYmVycyc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaCc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvcHJlZmVyLW5vb3AtYXN5bmMnOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL3JlcXVpcmUtbWV0aG9kLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLXN1cGVyLWNhbGwnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE9ic2lkaWFuTGludENvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IG9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzID0gb2JzaWRpYW5tZC5jb25maWdzLnJlY29tbWVuZGVkO1xuXG4gIGNvbnN0IHNjb3BlZE9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzID0gb2JzaWRpYW5SZWNvbW1lbmRlZENvbmZpZ3MubWFwKChjb25maWcpID0+IHtcbiAgICBpZiAoY29uZmlnLmZpbGVzPy5pbmNsdWRlcygncGFja2FnZS5qc29uJykpIHtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGZpbGVzOiBjb250ZXh0LnNvdXJjZUZpbGVzXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW3Njb3BlZE9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzXSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgb2JzaWRpYW5tZFxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFBlcmZlY3Rpb25pc3RDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFt7XG4gICAgZXh0ZW5kczogW3BlcmZlY3Rpb25pc3RDb25maWdzWydyZWNvbW1lbmRlZC1hbHBoYWJldGljYWwnXV0sXG4gICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKVxuICB9XSk7XG59XG5cbmZ1bmN0aW9uIGdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtcbiAgICAgICAgc3R5bGlzdGljLmNvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIHN0eWxpc3RpYy5jb25maWdzLmN1c3RvbWl6ZSh7XG4gICAgICAgICAgYXJyb3dQYXJlbnM6IHRydWUsXG4gICAgICAgICAgYnJhY2VTdHlsZTogJzF0YnMnLFxuICAgICAgICAgIGNvbW1hRGFuZ2xlOiAnbmV2ZXInLFxuICAgICAgICAgIHNlbWk6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0BzdHlsaXN0aWMvZ2VuZXJhdG9yLXN0YXItc3BhY2luZyc6ICdvZmYnLFxuICAgICAgICAnQHN0eWxpc3RpYy9pbmRlbnQnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvaW5kZW50LWJpbmFyeS1vcHMnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvanN4LW9uZS1leHByZXNzaW9uLXBlci1saW5lJzogJ29mZicsXG4gICAgICAgICdAc3R5bGlzdGljL25vLWV4dHJhLXNlbWknOiAnZXJyb3InLFxuICAgICAgICAnQHN0eWxpc3RpYy9vYmplY3QtY3VybHktbmV3bGluZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEV4cG9ydERlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgIG1pblByb3BlcnRpZXM6IDIsXG4gICAgICAgICAgICAgIG11bHRpbGluZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgIG1pblByb3BlcnRpZXM6IDIsXG4gICAgICAgICAgICAgIG11bHRpbGluZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0BzdHlsaXN0aWMvb3BlcmF0b3ItbGluZWJyZWFrJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2JlZm9yZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgICAgICc9JzogJ2FmdGVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0BzdHlsaXN0aWMvcXVvdGVzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3dUZW1wbGF0ZUxpdGVyYWxzOiAnbmV2ZXInXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3RyaWN0VHlwZUNoZWNrZWQsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3R5bGlzdGljVHlwZUNoZWNrZWRcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgICAgICAgIGpzeDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvamVjdFNlcnZpY2U6IHRydWUsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHRzY29uZmlnUm9vdERpcmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHBhcnNlciBvcHRpb24uXG4gICAgICAgICAgdHNjb25maWdSb290RGlyOiBnZXRSb290Rm9sZGVyKCkgPz8gJydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5JzogJ2Vycm9yJyxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9tZXRob2Qtc2lnbmF0dXJlLXN0eWxlJzogWydlcnJvcicsICdtZXRob2QnXSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlcyc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgY2hlY2tUaGVuYWJsZXM6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93QXNUaGlzUGFyYW1ldGVyOiB0cnVlXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93ZWROYW1lczogW1xuICAgICAgICAgICAgJ3RoYXQnXG4gICAgICAgICAgXVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBhcmdzYCBpcyBhbiBFU0xpbnQgcnVsZSBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIGFyZ3M6ICdhbGwnLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYGFyZ3NJZ25vcmVQYXR0ZXJuYCBpcyBhIGB0eXBlc2NyaXB0LWVzbGludGAgcnVsZSBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIGFyZ3NJZ25vcmVQYXR0ZXJuOiAnXl8nLFxuICAgICAgICAgICAgY2F1Z2h0RXJyb3JzOiAnYWxsJyxcbiAgICAgICAgICAgIGNhdWdodEVycm9yc0lnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBkZXN0cnVjdHVyZWRBcnJheUlnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBpZ25vcmVSZXN0U2libGluZ3M6IHRydWUsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgdmFyc0lnbm9yZVBhdHRlcm5gIGlzIGEgYHR5cGVzY3JpcHQtZXNsaW50YCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgdmFyc0lnbm9yZVBhdHRlcm46ICdeXydcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLXJlYWRvbmx5JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9kb3Qtbm90YXRpb24nOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93UHJpdmF0ZUNsYXNzUHJvcGVydHlBY2Nlc3M6IHRydWUsXG4gICAgICAgICAgYWxsb3dQcm90ZWN0ZWRDbGFzc1Byb3BlcnR5QWNjZXNzOiB0cnVlXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgdmVyc2lvbjogJ2RldGVjdCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFVuaWNvcm5Db25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbdW5pY29ybi5jb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAvKlxuICAgICAgICAgKiBUaGVzZSBlbnRyaWVzIGFyZSBub3QgYWJicmV2aWF0aW9ucyB0byBiZSBleHBhbmRlZCBcdTIwMTQgdGhleSBhcmUgZXN0YWJsaXNoZWQgdm9jYWJ1bGFyeSBoZXJlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBCcmFuZDogYGRldmAsIGBsaWJgLCBgdXRpbGAvYHV0aWxzYCBzcGVsbCB0aGUgcHJvZHVjdCdzIG93biBuYW1lLiBMZWZ0IG9uLCB0aGUgcnVsZSByZXdyaXRlc1xuICAgICAgICAgKiBgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRoc2AgdG8gYE9ic2lkaWFuRGV2ZWxvcG1lbnRVdGlsaXRpZXNSZXBvUGF0aHNgIGFuZCBgZ2V0TGliRGVidWdnZXJgIHRvXG4gICAgICAgICAqIGBnZXRMaWJyYXJ5RGVidWdnZXJgLCByZW5hbWluZyBleHBvcnRlZCBBUEkgYWZ0ZXIgdGhlIHBhY2thZ2UgaXQgYmVsb25ncyB0by5cbiAgICAgICAgICpcbiAgICAgICAgICogQ29udmVudGlvbjogYHBhcmFtc2AgaXMgdGhlIHBhcmFtZXRlci1iYWcgY29udmVudGlvbiwgZW5mb3JjZWQgYnlcbiAgICAgICAgICogYG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoYCwgd2hpY2ggcmVxdWlyZXMgYmFnIHR5cGVzIHRvIGJlIG5hbWVkXG4gICAgICAgICAqIGA8T3duZXI+UGFyYW1zYCAvIGA8T3duZXI+T3B0aW9uc2AuIEV4cGFuZGluZyBpdCB0byBgUGFyYW1ldGVyc2Agd291bGQgcHV0IHRoZSB0d28gcnVsZXMgaW4gZGlyZWN0XG4gICAgICAgICAqIGNvbnRyYWRpY3Rpb24gYW5kIGJyZWFrIDMwMCsgZXhwb3J0ZWQgdHlwZSBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVzZXJ2ZWQgd29yZHM6IGEgYmFyZSBgYXJnc2AsIGBmbmAsIGBzdHJgLCBgbW9kYCBvciBgZXZ0YCBleHBhbmRzIHRvIGFuIGlkZW50aWZpZXIgdGhhdCBpcyBhbHJlYWR5XG4gICAgICAgICAqIHRha2VuLCBzbyB0aGUgcnVsZSBzdWdnZXN0cyBgJGFyZ3VtZW50c2AsIGAkZnVuY3Rpb25gLCBhbmQgc28gb24uIFNwZWxsIHRob3NlIGAkYXJndW1lbnRzYCAvXG4gICAgICAgICAqIGAkZnVuY3Rpb25gIGluc3RlYWQgXHUyMDE0IGEgYCRgIHByZWZpeCByZWFkcyBiZXR0ZXIgdGhhbiBhIHRyYWlsaW5nIHVuZGVyc2NvcmUuIFRoaXMgaXMgZGVsaWJlcmF0ZWx5IE5PVFxuICAgICAgICAgKiBjb25maWd1cmVkIGFzIGEgY3VzdG9tIHJlcGxhY2VtZW50OiB1bmljb3JuIHN1YnN0aXR1dGVzIGF0IHRoZSB3b3JkIGxldmVsIGluc2lkZSBjb21wb3VuZCBuYW1lcywgc29cbiAgICAgICAgICogcmVkaXJlY3RpbmcgdGhlIHdob2xlIGVudHJ5IHR1cm5zIGBhc3luY0ZuYCBpbnRvIGBhc3luYyRmdW5jdGlvbmAuIENvbXBvdW5kcyB3YW50IHRoZSBwbGFpbiBleHBhbnNpb25cbiAgICAgICAgICogKGBhc3luY0Z1bmN0aW9uYCk7IG9ubHkgdGhlIGJhcmUsIGdlbnVpbmVseS1jb2xsaWRpbmcgaWRlbnRpZmllcnMgdGFrZSB0aGUgYCRgIGZvcm0uXG4gICAgICAgICAqXG4gICAgICAgICAqIERvbWFpbiB3b3JkczogYGRvY2AvYGRvY3NgLCBgZW52YCwgYGRpc3RgIGFuZCBgc3JjYCBhcmUgdGhlIGNsZWFyZXIgc3BlbGxpbmcgaW4gdGhpcyBjb2RlYmFzZS5cbiAgICAgICAgICogRXhwYW5kaW5nIGBkb2NgIGFsc28gcGlja3MgdGhlIHdyb25nIHdvcmQgXHUyMDE0IHRoZSBgYXBpLWRvYy0qYCBtb2R1bGVzIGdlbmVyYXRlIEFQSSAqZG9jdW1lbnRhdGlvbiosIG5vdFxuICAgICAgICAgKiBkb2N1bWVudHMuIGBzcmNgIGFkZGl0aW9uYWxseSBjb3JydXB0cyBjb2RlOiB0aGUgZml4ZXIgcmVuYW1lcyB0aGUgYFNyY2AgbWVtYmVyIG9mIHRoZSBleHBvcnRlZFxuICAgICAgICAgKiBgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHNgIC8gYE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHNgIGVudW1zIHdoaWxlIGxlYXZpbmcgZXZlcnkgYC5TcmNgIHJlZmVyZW5jZVxuICAgICAgICAgKiBkYW5nbGluZywgYmVjYXVzZSBgY2hlY2tQcm9wZXJ0aWVzYCBleGVtcHRzIHByb3BlcnR5IGFjY2Vzc2VzIGJ1dCBub3QgdGhlIGRlY2xhcmF0aW9ucyB0aGV5IHBvaW50IGF0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEaXNhYmxpbmcgdGhlIHJlcGxhY2VtZW50IGVudHJpZXMgcHJvdGVjdHMgdGhlc2UgcGVybWFuZW50bHk7IGFuIGBhbGxvd0xpc3RgIHdvdWxkIGluc3RlYWQgbmVlZCBldmVyeVxuICAgICAgICAgKiBhZmZlY3RlZCBpZGVudGlmaWVyIGVudW1lcmF0ZWQgYnkgaGFuZCBhbmQgcmUtZW51bWVyYXRlZCBmb3IgZXZlcnkgbmV3IG9uZS5cbiAgICAgICAgICpcbiAgICAgICAgICogTk9URTogdGhpcyBydWxlJ3MgYXV0b2ZpeCBpcyBOT1QgcmVmZXJlbmNlLWF3YXJlIGZvciBkZWNsYXJhdGlvbnMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBhIGNvbnRyYWN0IFx1MjAxNFxuICAgICAgICAgKiBlbnVtIG1lbWJlcnMsIGludGVyZmFjZSBtZW1iZXJzLCBhbmQgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgcHJvcGVydGllcyAoYGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHlcbiAgICAgICAgICogZWw6IEhUTUxFbGVtZW50KWApIGFyZSByZW5hbWVkIHdoaWxlIGB0aGlzLmVsYCBhbmQgYEVudW0uTWVtYmVyYCByZWZlcmVuY2VzIGFyZSBsZWZ0IGRhbmdsaW5nLiBBcHBseVxuICAgICAgICAgKiBpdHMgcmVwb3J0cyBieSBoYW5kOyBuZXZlciBydW4gYC0tZml4YCBvdmVyIGl0LlxuICAgICAgICAgKi9cbiAgICAgICAgLypcbiAgICAgICAgICogQSBnb29kIHJ1bGUsIGJ1dCBpdHMgZGVmYXVsdCBwcmVmaXhlcyBmb3JjZSB1bmdyYW1tYXRpY2FsIG5hbWVzOiBgbWVtYmVyUGFnZUV4aXN0c2Agd291bGQgYmVjb21lXG4gICAgICAgICAqIGBpc01lbWJlclBhZ2VFeGlzdHNgIHJhdGhlciB0aGFuIGBkb2VzTWVtYmVyUGFnZUV4aXN0YC4gVGhlc2UgZW50cmllcyBFWFRFTkQgdGhlIGRlZmF1bHRzIChgaXNgLFxuICAgICAgICAgKiBgaGFzYCwgYGNhbmAsIGBzaG91bGRgLCAuLi4pIHJhdGhlciB0aGFuIHJlcGxhY2luZyB0aGVtLCBzbyBhIGJvb2xlYW4gd2l0aCBubyBib29sZWFuLXJlYWRpbmcgcHJlZml4XG4gICAgICAgICAqIGF0IGFsbCBpcyBzdGlsbCByZWplY3RlZCAtLSB0aGUgcnVsZSBqdXN0IHN0b3BzIGluc2lzdGluZyB0aGUgcHJlZml4IGNvbWUgZnJvbSBhIHNob3J0ZXIgbGlzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGxpc3QgaXMgYmlkaXJlY3Rpb25hbDogYWRkaW5nIGEgcHJlZml4IGFsc28gYXNzZXJ0cyB0aGF0IGV2ZXJ5dGhpbmcgbmFtZWQgd2l0aCBpdCBJUyBhIGJvb2xlYW4uXG4gICAgICAgICAqIGBjaGVja2AgZWFybnMgaXRzIHBsYWNlIG9uIGJvdGggY291bnRzLCBzaW5jZSB0aGUgaGFuZGZ1bCBvZiBub24tYm9vbGVhbiBgY2hlY2sqYCBuYW1lcyBpdCBzdXJmYWNlZFxuICAgICAgICAgKiB3ZXJlIGdlbnVpbmVseSBtaXMtbmFtZWQgKHZvaWQgZnVuY3Rpb25zIHRoYXQgdGhyb3csIGEgcHJvYmUgcmV0dXJuaW5nIGFuIEhUVFAgc3RhdHVzKS4gYHRlc3RgIHdhc1xuICAgICAgICAgKiBtZWFzdXJlZCBhbmQgcmVqZWN0ZWQ6IGl0IHdvdWxkIHZhbGlkYXRlIGZpdmUgYHRlc3QqYCBsaW5rIHByZWRpY2F0ZXMgdGhhdCByZWFkIGJldHRlciBhcyBgaXMqYFxuICAgICAgICAgKiBhbnl3YXksIGF0IHRoZSBjb3N0IG9mIHJlbmFtaW5nIFNDUkVBTUlOR19DQVNFIHRlc3QgZml4dHVyZXMgYW5kIHRoZSBgdGVzdENvdmVyYWdlYC9gdGVzdFdhdGNoYFxuICAgICAgICAgKiBydW5uZXJzIHRoYXQgZGVsaWJlcmF0ZWx5IG1pcnJvciB0aGUgYHRlc3Q6Y292ZXJhZ2VgL2B0ZXN0OndhdGNoYCBucG0gc2NyaXB0cy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2NvbnNpc3RlbnQtYm9vbGVhbi1uYW1lJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlZml4ZXM6IHtcbiAgICAgICAgICAgICAgYWxsb3dzOiB0cnVlLFxuICAgICAgICAgICAgICBjaGVjazogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGFpbnM6IHRydWUsXG4gICAgICAgICAgICAgIGRvZXM6IHRydWUsXG4gICAgICAgICAgICAgIGluY2x1ZGVzOiB0cnVlLFxuICAgICAgICAgICAgICBtdXN0OiB0cnVlLFxuICAgICAgICAgICAgICBuZWVkczogdHJ1ZSxcbiAgICAgICAgICAgICAgc3VwcG9ydHM6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8qXG4gICAgICAgICAqIFVuc2F0aXNmaWFibGUgYWxvbmdzaWRlIGBwZXJmZWN0aW9uaXN0L3NvcnQtY2xhc3Nlc2AsIHdoaWNoIGlzIGNvbmZpZ3VyZWQgaGVyZSBhcyBhIHBsYWluXG4gICAgICAgICAqIGFscGhhYmV0aWNhbCBzb3J0LiBUaGlzIHJ1bGUgd2FudHMgYSBjYXRlZ29yeSBvcmRlciAoYWxsIGZpZWxkcywgdGhlbiB0aGUgY29uc3RydWN0b3IsIHRoZW4gYWxsXG4gICAgICAgICAqIG1ldGhvZHMpLCBzbyB0aGUgZXh0cmVtZWx5IGNvbW1vbiBgcHJpdmF0ZSBfeGAgZmllbGQgcGFpcmVkIHdpdGggYSBgcHVibGljIGdldCB4KClgIGFjY2Vzc29yIGlzXG4gICAgICAgICAqIHJlamVjdGVkIGJ5IHdoaWNoZXZlciBydWxlIGxvc2VzOiBhbHBoYWJldGljYWxseSB0aGUgYWNjZXNzb3IgcHJlY2VkZXMgdGhlIGZpZWxkLCBieSBjYXRlZ29yeSB0aGVcbiAgICAgICAgICogZmllbGQgcHJlY2VkZXMgdGhlIGFjY2Vzc29yLiBVbmxpa2UgYHByZWZlci1nbG9iYWwtdGhpc2AgdGhlIGNsYXNoIHByb2R1Y2VzIG5vXG4gICAgICAgICAqIGBFU0xpbnRDaXJjdWxhckZpeGVzV2FybmluZ2AsIG9ubHkgYmVjYXVzZSB0aGlzIHJ1bGUgc2hpcHMgbm8gZml4ZXIgLS0gYm90aCBydWxlcyBhcmUgYGVycm9yYCwgc28gbm9cbiAgICAgICAgICogYXJyYW5nZW1lbnQgb2YgbWVtYmVycyBzYXRpc2ZpZXMgdGhlbSBib3RoLiBUaGUgYWxwaGFiZXRpY2FsIHNvcnQgaXMgdGhlIG9uZSBhbHJlYWR5IHJvbGxlZCBvdXRcbiAgICAgICAgICogYWNyb3NzIHRoZSBwbHVnaW5zIGNvbnN1bWluZyB0aGlzIGNvbmZpZywgc28gaXQga2VlcHMgcHJlY2VkZW5jZS4gUmUtZW5hYmxpbmcgdGhpcyBydWxlIHdvdWxkIG1lYW5cbiAgICAgICAgICogZ2l2aW5nIGBwZXJmZWN0aW9uaXN0L3NvcnQtY2xhc3Nlc2AgYSBtYXRjaGluZyBgZ3JvdXBzYCBvcHRpb24gYW5kIHJlb3JkZXJpbmcgZXZlcnkgY2xhc3MuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWNsYXNzLW1lbWJlci1vcmRlcic6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSByZXBvcnQgaXMgYG5ldyBFcnJvcigpLnN0YWNrYCwgd2hpY2ggY2FwdHVyZXMgYSBzdGFjayB0cmFjZSBhbmQgbmV2ZXIgc3VyZmFjZXMgaXRzIG1lc3NhZ2UsXG4gICAgICAgICAqIG9yIGBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKWAsIHdob3NlIG1lc3NhZ2UgaXMgb3B0aW9uYWwgcHJlY2lzZWx5IGJlY2F1c2UgdGhlIGNvbGxlY3RlZCBlcnJvcnNcbiAgICAgICAgICogY2FycnkgdGhlIGRldGFpbC4gVGhlIHJ1bGUgY2Fubm90IHRlbGwgZWl0aGVyIGZyb20gYW4gZXJyb3IgdGhhdCBpcyBhY3R1YWxseSB0aHJvd24gYXQgYSB1c2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vZXJyb3ItbWVzc2FnZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBzdHlsZSBmb3IgYG5vZGU6cGF0aGAgaXMgYSBkZWZhdWx0IGltcG9ydCwgYnV0IHRoaXMgY29kZWJhc2UgaW1wb3J0cyBpdHMgbWVtYmVycyBieSBuYW1lXG4gICAgICAgICAqIHRocm91Z2hvdXQsIGNvbnNpc3RlbnRseSB3aXRoIGV2ZXJ5IG90aGVyIGBub2RlOmAgbW9kdWxlIGl0IHVzZXMuIENvbmZpZ3VyZSB0aGUgcnVsZSB0byBlbmZvcmNlIHRoZVxuICAgICAgICAgKiBzdHlsZSBhY3R1YWxseSBpbiB1c2UgcmF0aGVyIHRoYW4gYW5ub3RhdGUgMTcgc2l0ZXMgdGhhdCBhcmUgbm90IGdvaW5nIHRvIGNoYW5nZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2ltcG9ydC1zdHlsZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICAvLyBLZXllZCBieSB0aGUgVU5QUkVGSVhFRCBtb2R1bGUgbmFtZTogdGhlIHJ1bGUncyBvd24gdGFibGUgdXNlcyBgcGF0aGAsIHNvIGEgYG5vZGU6cGF0aGAga2V5IG5ldmVyIG1hdGNoZXMuXG4gICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICBuYW1lZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjb3VudHMgY29uc3RydWN0b3IgY2FsbHMgYW5kIGNvdW50cyB0aHJvdWdoIGFycmF5IGFuZCBvYmplY3QgbGl0ZXJhbHMsIHNvIGl0cyBkZWZhdWx0IG9mIDNcbiAgICAgICAgICogcmVwb3J0cyBvcmRpbmFyeSBjb21wb3NpdGlvbjogYFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignYm9vbScpKWAgaW5zaWRlIGFuIGFzc2VydGlvbiwgYSB0ZXN0IGZpeHR1cmVcbiAgICAgICAgICogYnVpbHQgYXMgYGNyZWF0ZVR5cGVJbmZvKHsgbWV0aG9kczogW2NyZWF0ZU1lbWJlckluZm8oeyAuLi4gfSldIH0pYCwgYHRoaXMuYWRkQ2hpbGQobmV3IEModGhpcy5hcHApKWBcbiAgICAgICAgICogaW5zaWRlIGEgcGFyYW1zIGJhZy4gUmFpc2luZyB0aGUgbGltaXQgYnkgb25lIGNsZWFycyBldmVyeSByZXBvcnQgaGVyZSB3aGlsZSBzdGlsbCBjYXRjaGluZyB0aGVcbiAgICAgICAgICogZ2VudWluZWx5IHVucmVhZGFibGUgbmVzdGluZyB0aGUgcnVsZSBpcyBmb3IuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9tYXgtbmVzdGVkLWNhbGxzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF4OiA0XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAndW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBQcm9wZXJ0eSBhbmQgbWVtYmVyIG5hbWVzIGFyZSBjaGVja2VkIHRvbywgc28gYW4gYWJicmV2aWF0aW9uIGNhbm5vdCBzdXJ2aXZlIGJ5IGxpdmluZyBvbiBhblxuICAgICAgICAgICAgICogb2JqZWN0IHJhdGhlciB0aGFuIGluIGEgdmFyaWFibGUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIHJ1bGUgaXMgcHVyZWx5IHN5bnRhY3RpYzogaXQgY2Fubm90IHRlbGwgYSBtZW1iZXIgd2UgZGVjbGFyZSBmcm9tIG9uZSBiZWxvbmdpbmcgdG8gYVxuICAgICAgICAgICAgICogZGVwZW5kZW5jeSwgYW5kIGl0IG9mZmVycyBubyBhdXRvZml4IGZvciBwcm9wZXJ0aWVzIChtZWFzdXJlZDogNjgxIGhpdHMsIDAgd2l0aCBhIGZpeGVyKS4gU2l0ZXNcbiAgICAgICAgICAgICAqIG5hbWluZyBhIGZvcmVpZ24gbWVtYmVyIC0tIGBEb21FbGVtZW50SW5mby5hdHRyYCwgYEV2YWxJbk9ic2lkaWFuUGFyYW1zLmZuYCwgYW5kIHRoZSBsaWtlIC0tIGFyZVxuICAgICAgICAgICAgICogdGhlcmVmb3JlIGltcG9zc2libGUgdG8gc2F0aXNmeSBhbmQgY2FycnkgYW4gaW5saW5lIGRpc2FibGUsIHNvIGV2ZXJ5dGhpbmcgc3RpbGwgcmVwb3J0ZWQgaXMgb3Vyc1xuICAgICAgICAgICAgICogdG8gcmVuYW1lLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFdoZW4gcmVuYW1pbmcgdGhlIHJlc3QsIG5vdGUgdGhhdCBgdHNjYCBhbG9uZSBpcyBOT1QgYSBzdWZmaWNpZW50IGdhdGU6IG9iamVjdC1saXRlcmFsIGtleXMgaW5cbiAgICAgICAgICAgICAqIGxvb3NlbHkgdHlwZWQgcG9zaXRpb25zIChgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBiYXRjaGVkQXJndW1lbnRzOiAuLi4gfV0pYCkgYXJlIG5vdCBjb250ZXh0dWFsbHlcbiAgICAgICAgICAgICAqIHR5cGVkLCBzbyBhIHJlbmFtZSBsZWF2ZXMgdGhlbSBiZWhpbmQgYW5kIGJyZWFrcyB0aGUgc3VpdGUgd2hlcmUgdGhlIHR5cGUgY2hlY2tlciBzZWVzIG5vdGhpbmcuXG4gICAgICAgICAgICAgKiBSZW5hbWUgaW4gc21hbGwgYmF0Y2hlcyB3aXRoIHRoZSBmdWxsIHRlc3QgcnVuIGluIHRoZSBsb29wLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBkaXNhYmxlZCByZXBsYWNlbWVudHMgYmVsb3cgYXJlIGVzdGFibGlzaGVkIHZvY2FidWxhcnkgcmF0aGVyIHRoYW4gYWJicmV2aWF0aW9ucyB0byBiZVxuICAgICAgICAgICAgICogZXhwYW5kZWQuIGBlbGAgaXMgZXhlbXB0IGJlY2F1c2UgT2JzaWRpYW4gbmFtZXMgZXZlcnkgZWxlbWVudCBtZW1iZXIgdGhhdCB3YXkgLS0gYGNvbnRhaW5lckVsYCxcbiAgICAgICAgICAgICAqIGBjb250ZW50RWxgLCBgaW5wdXRFbGAsIGBzZWxlY3RFbGAgLS0gc28gZXhwYW5kaW5nIG91cnMgdG8gYCpFbGVtZW50YCB3b3VsZCBsZWF2ZSBvdXIgY29tcG9uZW50c1xuICAgICAgICAgICAgICogcmVhZGluZyBpbmNvbnNpc3RlbnRseSBiZXNpZGUgdGhlIE9ic2lkaWFuIG9uZXMgdGhleSBzaXQgbmV4dCB0by4gRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBhbHNvXG4gICAgICAgICAgICAgKiBjb3ZlcnMgY29tcG91bmQgbmFtZXMsIHdoaWNoIGlzIDcyIHNpdGVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGVhY2ggbmVlZCBhbiBpbmxpbmUgZGlzYWJsZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBgcmVmYCBpcyBleGVtcHQgZm9yIHRoZSBzYW1lIHJlYXNvbjogYEFzeW5jRXZlbnRSZWZgIGlzIHRoZSBhc3luYyBjb3VudGVycGFydCBvZiBPYnNpZGlhbidzXG4gICAgICAgICAgICAgKiBgRXZlbnRSZWZgLCBoYW5kZWQgdG8gdGhlIHNhbWUgYG9mZnJlZmAgLyBgcmVnaXN0ZXJFdmVudGAgc2hhcGVzLCBzbyB0aGUgdHdvIG5hbWVzIGhhdmUgdG8gbWF0Y2hcbiAgICAgICAgICAgICAqIHRvIHJlYWQgYXMgYSBwYWlyLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjaGVja1Byb3BlcnRpZXM6IHRydWUsXG4gICAgICAgICAgICByZXBsYWNlbWVudHM6IHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICogYGF0dHJgIC8gYGF0dHJzYCBhcmUgT2JzaWRpYW4ncyBvd246IGBjcmVhdGVFbCgnYScsIHsgYXR0cjogeyAuLi4gfSB9KWAgdGFrZXMgdGhlbSBieSB0aG9zZVxuICAgICAgICAgICAgICAgKiBuYW1lcyBvbiBgRG9tRWxlbWVudEluZm9gLCBzbyBvdXJzIGhhdmUgdG8gbWF0Y2ggdG8gYmUgcGFzc2VkIHRocm91Z2guIGBwcm9wc2AgaXMgdGhlXG4gICAgICAgICAgICAgICAqIHVuaXZlcnNhbCBjb21wb25lbnQgdm9jYWJ1bGFyeSwgZXhlbXB0IGZvciB0aGUgc2FtZSByZWFzb24gYHBhcmFtc2AgaXMuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBhdHRyOiBmYWxzZSxcbiAgICAgICAgICAgICAgYXR0cnM6IGZhbHNlLFxuICAgICAgICAgICAgICBkZXY6IGZhbHNlLFxuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgKiBFdmVyeSBgZGlyYCBoZXJlIGlzIGEgZmlsZXN5c3RlbSBkaXJlY3RvcnksIG5ldmVyIGEgZGlyZWN0aW9uLCBzbyB0aGUgcnVsZSBpcyBuYXJyb3dlZCB0byB0aGVcbiAgICAgICAgICAgICAgICogb25lIGV4cGFuc2lvbiByYXRoZXIgdGhhbiBsZWZ0IG9mZmVyaW5nIGEgY2hvaWNlIGl0IGNhbm5vdCBtYWtlLlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gVGhpcyBpcyB0aGUgcnVsZSdzIG93biByZXBsYWNlbWVudCBrZXksIHdoaWNoIGhhcyB0byBiZSBzcGVsbGVkIHRoZSB3YXkgdGhlIHJ1bGUgcmVhZHMgaXQuXG4gICAgICAgICAgICAgIGRpcjoge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2M6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2NzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZWw6IGZhbHNlLFxuICAgICAgICAgICAgICBlbnY6IGZhbHNlLFxuICAgICAgICAgICAgICBsaWI6IGZhbHNlLFxuICAgICAgICAgICAgICBwYXJhbXM6IGZhbHNlLFxuICAgICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZjogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZnM6IGZhbHNlLFxuICAgICAgICAgICAgICBzcmM6IGZhbHNlLFxuICAgICAgICAgICAgICB1dGlsOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXRpbHM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmV4dCBzaXggcnVsZXMgYWxsIHN1Z2dlc3QgYW4gQVBJIG5ld2VyIHRoYW4gdGhpcyBwcm9qZWN0J3MgYGxpYmAgKGBFUzIwMjJgKSwgc28gZm9sbG93aW5nIGFueSBvZlxuICAgICAgICAgKiB0aGVtIGZhaWxzIHRvIGNvbXBpbGUuIFRoZSB0YXJnZXQgaXMgbm90IGFyYml0cmFyeTogYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcvbWV0YWRhdGEuanNvbmBcbiAgICAgICAgICogcmVjb3JkcyBgZWNtYVNjcmlwdFZlcnNpb246IFwiRVMyMDIyXCJgIGZvciBpbnN0YWxsZXIgMS4xLjksIHRoZSBvbGRlc3Qgb25lIHN0aWxsIGFibGUgdG8gcnVuIGN1cnJlbnRcbiAgICAgICAgICogT2JzaWRpYW4uIEVhY2ggaXMgb2ZmIGF0IHRoZSBjb25maWcgbGV2ZWwgcmF0aGVyIHRoYW4gYW5ub3RhdGVkIHBlciBzaXRlLCBiZWNhdXNlIG5vbmUgY2FuIGV2ZXIgYmVcbiAgICAgICAgICogc2F0aXNmaWVkIHdoaWxlIHRoYXQgZmxvb3IgaG9sZHMuIFJldmlzaXQgdGhlbSB0b2dldGhlciBpZiB0aGUgZmxvb3IgbW92ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBBcnJheSN0b1JldmVyc2VkYCBhbmQgYEFycmF5I3RvU29ydGVkYCBhcmUgRVMyMDIzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tYXJyYXktcmV2ZXJzZSc6ICdvZmYnLFxuICAgICAgICAndW5pY29ybi9uby1hcnJheS1zb3J0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIGBjb250aW51ZWAgaW5zaWRlIGEgbmVzdGVkIGxvb3AgaXMgb3JkaW5hcnksIHJlYWRhYmxlIGNvbnRyb2wgZmxvdyBoZXJlLiBUaGUgcnVsZSdzIHJlbWVkeSBpcyB0b1xuICAgICAgICAgKiBleHRyYWN0IGV2ZXJ5IHN1Y2ggbG9vcCBpbnRvIGl0cyBvd24gZnVuY3Rpb24sIHdoaWNoIHNwcmVhZHMgb25lIGNvaGVyZW50IHRyYXZlcnNhbCBhY3Jvc3MgdHdvXG4gICAgICAgICAqIGRlY2xhcmF0aW9ucyB3aXRob3V0IG1ha2luZyBhbnl0aGluZyBjbGVhcmVyLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tYnJlYWstaW4tbmVzdGVkLWxvb3AnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJ1bGUgY2Fubm90IHNlZSB0aHJvdWdoIGEgaG9pc3RlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgc28gaXQgdHJlYXRzIGEgYmluZGluZyB0aGF0IGEgbmVzdGVkXG4gICAgICAgICAqIGZ1bmN0aW9uIGFscmVhZHkgcmVhZCBhcyB1bnVzZWQgYmVmb3JlIHRoZSBleGl0LiBJbiBgcnVuV2l0aFRpbWVvdXRgIHRoYXQgaXMgYGxldCBpc0NvbXBsZXRlZGAsIHdoaWNoXG4gICAgICAgICAqIGBydW4oKWAgYW5kIGBpbm5lclRpbWVvdXQoKWAgYm90aCB0b3VjaCB3aGlsZSB0aGUgYFByb21pc2UucmFjZWAgYWJvdmUgdGhlIGV4aXQgaXMgc3RpbGwgcnVubmluZyAtLVxuICAgICAgICAgKiBtb3ZpbmcgdGhlIGRlY2xhcmF0aW9uIHBhc3QgdGhlIGV4aXQsIGFzIHRoZSBydWxlIGFza3MsIHdvdWxkIGxlYXZlIHRob3NlIHJlYWRzIGluIHRoZSB0ZW1wb3JhbCBkZWFkXG4gICAgICAgICAqIHpvbmUuIEl0cyBvd24gZml4ZXIgZGVjbGluZXMgYWxsIDE1IHNpdGVzIGZvciB0aGUgc2FtZSByZWFzb24gaXQgY2Fubm90IHByb3ZlIHRoZW0gc2FmZSwgc28gZm9sbG93aW5nXG4gICAgICAgICAqIHRoZSBydWxlIGlzIGVudGlyZWx5IG1hbnVhbC4gV2hhdCBpcyBsZWZ0IGFmdGVyIHRoYXQgaXMgcGxhY2VtZW50IHN0eWxlOiB0aGUgcmVtYWluaW5nIHJlcG9ydHMgYXJlXG4gICAgICAgICAqIG5hbWVkIGNvbnN0YW50cyBhbmQgZGVyaXZlZCBwYXRocyBkZWxpYmVyYXRlbHkgZ3JvdXBlZCBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rpb24sIGFuZCBwdXNoaW5nIGVhY2ggb25lXG4gICAgICAgICAqIGJlbG93IHRoZSBmaXJzdCBndWFyZCBzcGxpdHMgYSBjb2hlc2l2ZSBibG9jayB0byBubyBiZW5lZml0LiBUaGUgdGhyZWUgc2l0ZXMgd2hlcmUgZGVmZXJyaW5nIHNraXBwZWRcbiAgICAgICAgICogcmVhbCB3b3JrIChhIHNlY29uZCBgY29tcHV0ZU5lZWRlZEV4cG9zdXJlYCB3YWxrLCBhIGB0b0pzb25gIHNlcmlhbGl6YXRpb24sIGFuIGBlbnN1cmVMZkVuZGluZ3NgIHBhc3MpXG4gICAgICAgICAqIHdlcmUgYXBwbGllZCBieSBoYW5kIGluc3RlYWQuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1kZWNsYXJhdGlvbnMtYmVmb3JlLWVhcmx5LWV4aXQnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogQXNzaWduaW5nIG9udG8gdGhlIGdsb2JhbCBvYmplY3QgaXMgaG93IHRoaXMgbGlicmFyeSBpbnN0YWxscyBhbmQgcmVzdG9yZXMgdGVzdCBkb3VibGVzLCBhbmQgaG93IGFcbiAgICAgICAgICogZmV3IE9ic2lkaWFuLXJ1bnRpbWUgZ2xvYmFscyBhcmUgcmVhY2hlZCBhdCBhbGwuIFRoZSBydWxlIGNhbm5vdCBzZXBhcmF0ZSB0aGF0IGZyb20gYW4gYWNjaWRlbnRhbFxuICAgICAgICAgKiBnbG9iYWwgd3JpdGUsIGFuZCBpdCBoYXMgbm8gZml4ZXIuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1nbG9iYWwtb2JqZWN0LXByb3BlcnR5LWFzc2lnbm1lbnQnOiAnb2ZmJyxcbiAgICAgICAgLy8gYG51bGxgIGlzIGxvYWQtYmVhcmluZyBoZXJlOiBhbiBvcHRpb25hbCBjb2xsYWJvcmF0b3IgaXMgbW9kZWxsZWQgYXMgYSByZXF1aXJlZCBgbnVsbCB8IFhgIGZpZWxkIHJhdGhlciB0aGFuIGFuIG9wdGlvbmFsIGBYYCwgc28gYG51bGxgIGFuZCBgdW5kZWZpbmVkYCBhcmUgbm90IGludGVyY2hhbmdlYWJsZS5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJ1bGUncyBsaXN0IG9mIHN0YW5kYXJkIGBTeW1ib2xgIHByb3BlcnRpZXMgcHJlZGF0ZXMgZXhwbGljaXQgcmVzb3VyY2UgbWFuYWdlbWVudCwgc28gaXQgcmVwb3J0c1xuICAgICAgICAgKiBgU3ltYm9sLmRpc3Bvc2VgIGFuZCBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgYXMgbm9uLXN0YW5kYXJkLiBCb3RoIGFyZSBwYXJ0IG9mIHRoZSBsYW5ndWFnZSB0aGF0IHRoaXNcbiAgICAgICAgICogbGlicmFyeSBpcyBidWlsdCBvbiAtLSAxMTQgZmlsZXMgaGVyZSB1c2UgYHVzaW5nYCBkZWNsYXJhdGlvbnMsIGFuZCB0aGUgZGlzcG9zYWJsZSB0eXBlcyBhcmUgYVxuICAgICAgICAgKiBwdWJsaWMgcGFydCBvZiBpdHMgc3VyZmFjZSAtLSBzbyBhbGwgNTkgcmVwb3J0cyBhcmUgdGhlIHJ1bGUgYmVpbmcgb3V0IG9mIGRhdGUgcmF0aGVyIHRoYW4gYSBmaW5kaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tbm9uc3RhbmRhcmQtYnVpbHRpbi1wcm9wZXJ0aWVzJzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLW51bGwnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVHlwZVNjcmlwdCdzIGV4cGxpY2l0IGB0aGlzYCBwYXJhbWV0ZXIgKGBmdW5jdGlvbiBnZXQodGhpczogSG9sZGVyKSB7IHJldHVybiB0aGlzLnZhbHVlOyB9YCkgbWFrZXNcbiAgICAgICAgICogYHRoaXNgIG91dHNpZGUgYSBjbGFzcyBib3RoIGxlZ2FsIGFuZCB0eXBlLWNoZWNrZWQsIGJ1dCB0aGUgcnVsZSBpcyBzeW50YWN0aWMgYW5kIGZsYWdzIGl0IGlkZW50aWNhbGx5XG4gICAgICAgICAqIHRvIGEgZ2VudWluZWx5IHVuYm91bmQgYHRoaXNgLiBJdCBoYXMgbm8gb3B0aW9ucyAoYHNjaGVtYTogW11gKSBhbmQgbm8gZml4ZXIsIHNvIHRoZXJlIGlzIG5vIHdheSB0b1xuICAgICAgICAgKiBzZXBhcmF0ZSB0aGUgaWRpb20gZnJvbSB0aGUgYnVnIGl0IHRhcmdldHMuIE1vc3QgaGl0cyBoZXJlIHdlcmUgdHlwZWQgYHRoaXNgIHBhcmFtZXRlcnMgYW5kIHRlc3RzIHRoYXRcbiAgICAgICAgICogZGVsaWJlcmF0ZWx5IGFzc2VydCBgdGhpc2AgYmluZGluZy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXRoaXMtb3V0c2lkZS1vZi1jbGFzcyc6ICdvZmYnLFxuICAgICAgICAvLyBTYW1lIGNhbGwgYXMgaXRzIG9iamVjdCBjb3VudGVycGFydCBhYm92ZTogdGhlIGRlc3RydWN0dXJpbmcgZGVwdGggZmxhZ2dlZCBoZXJlIGlzIGRlbGliZXJhdGUgYW5kIHJlYWRzIHdlbGwuXG4gICAgICAgICd1bmljb3JuL25vLXVucmVhZGFibGUtYXJyYXktZGVzdHJ1Y3R1cmluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcmVwb3J0cyBhcmUgYWxsIGBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KC4uLikpYCwgd2hpY2ggcmVhZHMgZXhhY3RseSBhcyBpbnRlbmRlZC5cbiAgICAgICAgICogSG9pc3RpbmcgdGhlIGF3YWl0ZWQgY2FsbCBpbnRvIGEgdmFyaWFibGUgbmFtZWQgYWZ0ZXIgdGhlIGxvb3AncyBvd24gaXRlcmFibGUgYWRkcyBhIGxpbmUgYW5kIGEgbmFtZVxuICAgICAgICAgKiB3aXRob3V0IGFkZGluZyBpbmZvcm1hdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXVucmVhZGFibGUtZm9yLW9mLWV4cHJlc3Npb24nOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIG5lc3RlZCBkZXN0cnVjdHVyaW5nIHRoaXMgZmxhZ3MgaXMgZGVsaWJlcmF0ZSBoZXJlIGFuZCByZWFkcyB3ZWxsOiBwdWxsaW5nIGEgbWVtYmVyIG91dCBvZiBhXG4gICAgICAgICAqIHBhcmFtcyBiYWcgaW4gb25lIHN0ZXAgc3RhdGVzIHdoZXJlIHRoZSB2YWx1ZSBjb21lcyBmcm9tLCB3aGljaCBhIHNlY29uZCBpbnRlcm1lZGlhdGUgYmluZGluZyBvbmx5XG4gICAgICAgICAqIG9ic2N1cmVzLiBUaGUgcnVsZSB0YWtlcyBubyBvcHRpb25zLCBzbyB0aGVyZSBpcyBubyB3YXkgdG8ga2VlcCB0aGUgZGVwdGggbGltaXQgaXQgaXMgcmVhbGx5IGFmdGVyXG4gICAgICAgICAqIHdoaWxlIGFsbG93aW5nIHRoZSBzaGFwZSBpbiB1c2UuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby11bnJlYWRhYmxlLW9iamVjdC1kZXN0cnVjdHVyaW5nJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIGBjaGVja0FyZ3VtZW50c2Agc3RyaXBzIGB1bmRlZmluZWRgIGFyZ3VtZW50cywgd2hpY2ggc2hpZnRzIHRoZSByZW1haW5pbmcgcG9zaXRpb25hbCBhcmd1bWVudHMgaW50b1xuICAgICAgICAgKiB0aGUgd3Jvbmcgc2xvdHM7IGBjaGVja0Fycm93RnVuY3Rpb25Cb2R5YCByZW1vdmVzIGByZXR1cm4gdW5kZWZpbmVkO2AgZnJvbSBhcnJvdyBib2RpZXMgd2hvc2Ugb3RoZXJcbiAgICAgICAgICogYnJhbmNoZXMgZG8gcmV0dXJuIGEgdmFsdWUsIHdoaWNoIHZpb2xhdGVzIHRoZSBgbm9JbXBsaWNpdFJldHVybnNgIHNldHRpbmcgdGhpcyBwcm9qZWN0IGNvbXBpbGVzIHdpdGguXG4gICAgICAgICAqIFRoZSBydWxlJ3MgcmVtYWluaW5nIGNhc2VzIChhIGJhcmUgYHVuZGVmaW5lZGAgaW5pdGlhbGl6ZXIsIGByZXR1cm4gdW5kZWZpbmVkO2AgaW4gYSB2b2lkIGZ1bmN0aW9uKVxuICAgICAgICAgKiBhcmUgc3RpbGwgd29ydGggaGF2aW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdXNlbGVzcy11bmRlZmluZWQnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjaGVja0FyZ3VtZW50czogZmFsc2UsXG4gICAgICAgICAgICBjaGVja0Fycm93RnVuY3Rpb25Cb2R5OiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gYEFycmF5LmZyb21Bc3luY2AgaXMgRVMyMDI0LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItYXJyYXktZnJvbS1hc3luYyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSBoaXQgaGVyZSBpcyBhIHByb21pc2UgZGVsaWJlcmF0ZWx5IE5PVCBhd2FpdGVkLCBhbmQgYGF3YWl0YCB3b3VsZCBjaGFuZ2Ugd2hhdCB0aGUgY29kZSBkb2VzLlxuICAgICAgICAgKiBgcmVzdWx0LmNhdGNoKHRocm93RGVsYXllZClgIGluIGBhc3luYy1ldmVudHMudHNgIGlzIHRoZSBmaXJlLWFuZC1mb3JnZXQgZXJyb3IgcGF0aCB0aGUgbW9kdWxlIGlzXG4gICAgICAgICAqIGJ1aWx0IG9uOyB0aGUgcmVzdCBob2xkIGFuIHVucmVzb2x2ZWQgcHJvbWlzZSBhbmQgYXNzZXJ0IHRoZSBjYWxsYmFjayBoYXMgbm90IGZpcmVkIHlldCwgc28gYXdhaXRpbmdcbiAgICAgICAgICogd291bGQgaGFuZyB0aGUgdGVzdCBvciBpbnZlcnQgd2hhdCBpdCBwcm92ZXMuIFRoZSBydWxlIGNhbm5vdCB0ZWxsIGEgZm9yZ290dGVuIGBhd2FpdGAgZnJvbSBhblxuICAgICAgICAgKiBpbnRlbnRpb25hbCBvbmUsIGFuZCB0aGlzIGNvZGViYXNlIHNjaGVkdWxlcyBmaXJlLWFuZC1mb3JnZXQgd29yayBhcyBhIGNvcmUgcGF0dGVybi5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1hd2FpdCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBbGwgdGhyZWUgcmVwb3J0cyByZWFkIEhUTUwgb3V0IChgY29uc3QgaHRtbCA9IGVsLmlubmVySFRNTGApLCBuZXZlciB3cml0ZSBpdCwgYW5kIGZvciBhIHJlYWRcbiAgICAgICAgICogYGdldEhUTUwoKWAgcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcuIFdoYXQgaXQgYWRkcyBpcyBzaGFkb3ctcm9vdCBzZXJpYWxpemF0aW9uIG9wdGlvbnMgdGhhdCBub3RoaW5nXG4gICAgICAgICAqIGhlcmUgYXNrcyBmb3IsIGluIGV4Y2hhbmdlIGZvciBhIG11Y2ggbmV3ZXIgcGxhdGZvcm0gZmxvb3IgdGhhbiBgaW5uZXJIVE1MYCAtLSBhIGJhZCB0cmFkZSBmb3IgYVxuICAgICAgICAgKiBsaWJyYXJ5IHRoYXQgaGFzIHRvIHJ1biBvbiB3aGF0ZXZlciBDaHJvbWl1bSB0aGUgaW5zdGFsbGVkIE9ic2lkaWFuIHNoaXBzLiBUaGUgcnVsZSdzIG90aGVyIGhhbGYsXG4gICAgICAgICAqIHJld3JpdGluZyB3cml0ZXMgdG8gdGhlIHNhbml0aXppbmcgYHNldEhUTUwoKWAsIHdvdWxkIGJlIHdvcnRoIGhhdmluZzsgaXQganVzdCBuZXZlciBmaXJlcyBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWh0bWwtbWV0aG9kcyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBPYnNpZGlhbidzIGBDb21wb25lbnRgIGhhcyBpdHMgb3duIGByZW1vdmVDaGlsZChjb21wb25lbnQpYCBmb3IgdGhlIGNvbXBvbmVudCBsaWZlY3ljbGUsIHVucmVsYXRlZFxuICAgICAgICAgKiB0byBgTm9kZSNyZW1vdmVDaGlsZGAuIFRoZSBydWxlIG1hdGNoZXMgb24gdGhlIG1ldGhvZCBuYW1lIGFsb25lLCBzbyBldmVyeSByZXBvcnQgaGVyZSBpcyBhXG4gICAgICAgICAqIGNvbXBvbmVudCBiZWluZyB1bmxvYWRlZCwgYW5kIGZvbGxvd2luZyB0aGUgYWR2aWNlIGNhbGxzIGEgYHJlbW92ZSgpYCB0aGF0IGRvZXMgbm90IGV4aXN0IC0tIHdoaWNoXG4gICAgICAgICAqIGlzIHdoYXQgYHRzY2Agc2FpZCB3aGVuIHRoZSBmaXhlciB3YXMgbGV0IGxvb3NlIG9uIHRoZW0uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZG9tLW5vZGUtcmVtb3ZlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIERpcmVjdGx5IGNvbnRyYWRpY3RzIGBvYnNpZGlhbm1kL25vLWdsb2JhbC10aGlzYDogdGhpcyBydWxlIHJld3JpdGVzIGB3aW5kb3cueGAgdG8gYGdsb2JhbFRoaXMueGAsIGFuZFxuICAgICAgICAgKiB0aGF0IG9uZSBmb3JiaWRzIGBnbG9iYWxUaGlzYCBvdXRyaWdodC4gV2l0aCBib3RoIGVuYWJsZWQsIGAtLWZpeGAgYXBwbGllcyBvbmUgYW5kIHRoZW4gdGhlIG90aGVyXG4gICAgICAgICAqIHJldmVydHMgaXQsIHdoaWNoIEVTTGludCByZXBvcnRzIGFzIGBFU0xpbnRDaXJjdWxhckZpeGVzV2FybmluZ2AgYWNyb3NzIDI5IGZpbGVzLiBPYnNpZGlhbidzIG93blxuICAgICAgICAgKiBndWlkYW5jZSB3aW5zIGluIGFuIE9ic2lkaWFuIGxpYnJhcnksIHNvIHRoaXMgaXMgdGhlIHJ1bGUgdGhhdCBnaXZlcyB3YXkuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZ2xvYmFsLXRoaXMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogSXRlcmF0b3IgaGVscGVycyAoYEl0ZXJhdG9yI3NvbWVgIGFuZCBmcmllbmRzKSBhcmUgRVMyMDI1LCBzbyB0aGlzIGJlbG9uZ3Mgd2l0aCBgbm8tYXJyYXktcmV2ZXJzZWAgYW5kXG4gICAgICAgICAqIGBuby1hcnJheS1zb3J0YCBhYm92ZTogdGhlIHNhbWUgRVMyMDIyIGZsb29yIHJ1bGVzIGl0IG91dCwgYW5kIHRoZSBzYW1lIG5vdGUgYXBwbGllcyAtLSByZXZpc2l0IHRoZW1cbiAgICAgICAgICogdG9nZXRoZXIgaWYgdGhhdCBmbG9vciBtb3Zlcy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1pdGVyYXRvci1oZWxwZXJzJzogJ29mZicsXG4gICAgICAgIC8vIGBJdGVyYXRvciN0b0FycmF5YCBpcyBFUzIwMjUuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1pdGVyYXRvci10by1hcnJheSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgc3VnZ2VzdGVkIHJlcGxhY2VtZW50IGlzIGBNYXRoLnRydW5jKE51bWJlcih4KSlgLCB3aGljaCBpcyBsb25nZXIgdGhhbiBgcGFyc2VJbnQoeCwgMTApYCBhbmQgbm9cbiAgICAgICAgICogY2xlYXJlciwgYW5kIGl0IGlzIG5vdCB0aGUgc2FtZSBmdW5jdGlvbjogYHBhcnNlSW50YCBzdG9wcyBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgY2Fubm90IGJlIHBhcnRcbiAgICAgICAgICogb2YgdGhlIG51bWJlciwgc28gYCcxMmFiYydgIHBhcnNlcyB0byAxMiB3aGVyZSBgTnVtYmVyYCB5aWVsZHMgYE5hTmAuIFR3byBvZiB0aGUgcmVwb3J0cyByZWFkIHVzZXJcbiAgICAgICAgICogaW5wdXQgdGhyb3VnaCB0aGF0IGRpZmZlcmVuY2UgLS0gdGhlIHBhZ2UtanVtcCBib3ggaW4gdGhlIERhdGF2aWV3IGhlbHBlciwgYW5kXG4gICAgICAgICAqIGBOdW1iZXJDb21wb25lbnQudmFsdWVGcm9tU3RyaW5nYCwgd2hvc2UgbGVuaWVudCBwYXJzZSBpcyBwYXJ0IG9mIGEgcHVibGlzaGVkIGNvbXBvbmVudCdzIGJlaGF2aW9yLlxuICAgICAgICAgKiBUaGUgcmVzdCBwYXJzZSBtYWNoaW5lLWdlbmVyYXRlZCBzdHJpbmdzLCB3aGVyZSB0aGUgdHdvIGFncmVlIGJ1dCB0aGUgc2hvcnRlciBzcGVsbGluZyBzdGlsbCB3aW5zLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLW51bWJlci1jb2VyY2lvbic6ICdvZmYnLFxuICAgICAgICAvLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBpcyBFUzIwMjQuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1wcm9taXNlLXdpdGgtcmVzb2x2ZXJzJzogJ29mZicsXG4gICAgICAgIC8vIGBTZXQjdW5pb25gIGFuZCBmcmllbmRzIGFyZSBFUzIwMjUuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1zZXQtbWV0aG9kcyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSByYW5rcyBvcGVyYW5kcyBieSBzeW50YWN0aWMgc2hhcGUsIG5vdCBjb3N0LCBzbyBldmVyeSByZXBvcnQgaGVyZSBzd2FwcyBvbmUgcHJvcGVydHkgcmVhZFxuICAgICAgICAgKiBhaGVhZCBvZiBhbm90aGVyIGFuZCBidXlzIG5vdGhpbmcuIEl0cyBvd24gbWVzc2FnZSBjb25jZWRlcyBpdCBjYW5ub3QgY2hlY2sgdGhlIHBhcnQgdGhhdCBtYXR0ZXJzIC0tXG4gICAgICAgICAqIFwiYWZ0ZXIgdmVyaWZ5aW5nIHNob3J0LWNpcmN1aXQgYmVoYXZpb3JcIiAtLSBhbmQgb25lIHJlcG9ydCBzaXRzIGRpcmVjdGx5IHVuZGVyIGEgY29tbWVudCByZWNvcmRpbmdcbiAgICAgICAgICogdGhhdCB0aGUgb3BlcmFuZHMgY2hhbmdlIGluc2lkZSBhIGByZW5hbWVgIGV2ZW50IGhhbmRsZXIsIHdoaWNoIGlzIHdoZXJlIG9yZGVyIHN0b3BzIGJlaW5nIGZyZWUuXG4gICAgICAgICAqIFRoZSBjdXJyZW50IG9yZGVycyBhbHNvIGNhcnJ5IGludGVudDogYSBudWxsIGd1YXJkIGJlZm9yZSB0aGUgdXNlIGl0IGd1YXJkcywgYW5kIHRoZSBjb25kaXRpb24gYmVpbmdcbiAgICAgICAgICogcmVwb3J0ZWQgYmVmb3JlIHRoZSBzdGF0ZSBpdCBjb250cmFkaWN0cy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1zaW1wbGUtY29uZGl0aW9uLWZpcnN0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIGBVUkwuY2FuUGFyc2VgIHJlcXVpcmVzIE5vZGUgMTguMTcsIHdlbGwgYWJvdmUgdGhlIE5vZGUgMTYuMTYuMCBmbG9vciB0aGF0IHNoaXBwZWQgc291cmNlIHRhcmdldHNcbiAgICAgICAgICogKHNlZSBgbWluaW11bU5vZGVWZXJzaW9uYCBiZWxvdykuIFRoZSBydWxlIGNhbiB0aGVyZWZvcmUgbmV2ZXIgYmUgc2F0aXNmaWVkIGhlcmUsIHNvIGl0IGlzIG9mZiBhdCB0aGVcbiAgICAgICAgICogY29uZmlnIGxldmVsIHJhdGhlciB0aGFuIGFubm90YXRlZCBhdCBlYWNoIGNhbGwgc2l0ZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci11cmwtY2FuLXBhcnNlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEV2ZXJ5IGFycmF5IHJlcG9ydGVkIGhlcmUgaG9sZHMgc3RyaW5ncywgd2hlcmUgdGhlIGRlZmF1bHQgc29ydCBpcyBhbHJlYWR5IHdlbGwgZGVmaW5lZCBhbmQgY29ycmVjdC5cbiAgICAgICAgICogQWRkaW5nIHRoZSBjb21wYXJhdG9yIHRoZSBydWxlIGFza3MgZm9yIHdvdWxkIG1lYW4gY2hvb3NpbmcgYmV0d2VlbiBjb2RlLXVuaXQgYW5kIGxvY2FsZSBvcmRlcmluZyxcbiAgICAgICAgICogc28gZm9sbG93aW5nIGl0IHdvdWxkIENIQU5HRSB0aGUgc29ydCByYXRoZXIgdGhhbiBkb2N1bWVudCBpdC4gVGhlIHJ1bGUgZWFybnMgaXRzIHBsYWNlIG9uIG51bWVyaWNcbiAgICAgICAgICogYXJyYXlzOyBpdCBkb2VzIG5vdCBoYXZlIGFueSBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcmVxdWlyZS1hcnJheS1zb3J0LWNvbXBhcmUnOiAnb2ZmJyxcbiAgICAgICAgLy8gVGhlIGNvZGViYXNlIGFscmVhZHkgc3BlbGxzIGVuY29kaW5ncyB0aGUgd2F5IHRoZSBFbmNvZGluZyBTdGFuZGFyZCBkb2VzIChgdXRmLThgKSwgd2hpY2ggaXMgYWxzbyB3aGF0IGBUZXh0RGVjb2RlcmAgcmVwb3J0cy4gS2VlcCB0aGUgcnVsZSBlbmZvcmNpbmcgY29uc2lzdGVuY3ksIGp1c3QgaW4gdGhlIGRpcmVjdGlvbiBhbHJlYWR5IGluIHVzZS5cbiAgICAgICAgJ3VuaWNvcm4vdGV4dC1lbmNvZGluZy1pZGVudGlmaWVyLWNhc2UnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3aXRoRGFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQnVpbGQvbGludC92ZXJzaW9uIHNjcmlwdHMgYXJlIENMSSBlbnRyeSBwb2ludHMsIHdoZXJlIGV4aXRpbmcgd2l0aCBhIHN0YXR1cyBjb2RlIGlzIHRoZSBpbnRlcmZhY2UuXG4gICAgICBmaWxlczogY29udGV4dC5zY3JpcHRGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICd1bmljb3JuL25vLXByb2Nlc3MtZXhpdCc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAvKlxuICAgICAgICogQSBtb2R1bGUtbGV2ZWwgZml4dHVyZSBhc3NpZ25lZCBmcm9tIGBiZWZvcmVFYWNoYCBpcyB0aGUgc3RhbmRhcmQgdGVzdCBzaGFwZTpcbiAgICAgICAqXG4gICAgICAgKiAgIGxldCBhcHA6IEFwcDtcbiAgICAgICAqICAgYmVmb3JlRWFjaCgoKSA9PiB7IGFwcCA9IEFwcC5jcmVhdGVDb25maWd1cmVkX18oKTsgfSk7XG4gICAgICAgKlxuICAgICAgICogVGhlIHJ1bGUgaXMgcmlnaHQgYWJvdXQgcHJvZHVjdGlvbiBjb2RlIC0tIG1vZHVsZSBzdGF0ZSByZWFzc2lnbmVkIGZyb20gaW5zaWRlIGEgZnVuY3Rpb24gaXMgd29ydGhcbiAgICAgICAqIGZsYWdnaW5nLCBhbmQgdGhlIGZpeCBpcyB0byBob2xkIGl0IGluIGEgYGNvbnN0YCBvYmplY3QgaW5zdGVhZC4gSW4gdGVzdHMgdGhhdCB3b3VsZCByZXBsYWNlIGV2ZXJ5XG4gICAgICAgKiBgYXBwYCB3aXRoIGBTVEFURS5hcHBgIGFuZCBtYWtlIGVhY2ggZmlsZSByZWFkIHdvcnNlIGZvciBubyBnYWluLCBzaW5jZSB0aGUgZml4dHVyZSBpcyByZXNldCBwZXIgdGVzdFxuICAgICAgICogYnkgZGVzaWduLiBTY29wZWQgb2ZmIGhlcmUgcmF0aGVyIHRoYW4gZGlzYWJsZWQgb3V0cmlnaHQsIHNvIHByb2R1Y3Rpb24gY29kZSBrZWVwcyB0aGUgY2hlY2suXG4gICAgICAgKi9cbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFR3byBzaGFwZXMgaGVyZSBjYW5ub3QgZm9sbG93IHRoZSBhZHZpY2UuIEEgaGVscGVyIGRlZmluZWQgaW5zaWRlIGFuIGBldmFsSW5PYnNpZGlhbmAgY2FsbGJhY2tcbiAgICAgICAgICogY2Fubm90IGJlIGhvaXN0ZWQgYXQgYWxsOiB0aGUgY2FsbGJhY2sgaXMgc2VyaWFsaXplZCB3aXRoIGB0b1N0cmluZygpYCBhbmQgcnVucyBpbnNpZGUgT2JzaWRpYW4sIHNvXG4gICAgICAgICAqIGFueXRoaW5nIGxlZnQgYmVoaW5kIGluIHRoZSBtb2R1bGUgc2NvcGUgaXMgc2ltcGx5IG5vdCB0aGVyZS4gQW5kIGEgcGVyLXN1aXRlIGZhY3RvcnlcbiAgICAgICAgICogKGBjcmVhdGVDb21wb25lbnRgLCBgY3JlYXRlTW9ja1BsdWdpbmApIGlzIGRlbGliZXJhdGVseSBsb2NhbCwga2VlcGluZyBlYWNoIHN1aXRlJ3MgZml4dHVyZSBuZXh0IHRvXG4gICAgICAgICAqIHRoZSBhc3NlcnRpb25zIHRoYXQgcmVhZCBpdC4gUHJvZHVjdGlvbiBjb2RlIGtlZXBzIHRoZSBjaGVjay5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBIHRlc3QgYmluZGluZyBpcyBuYW1lZCBhZnRlciB0aGUgdGhpbmcgaXQgY2FwdHVyZXMsIG5vdCBhZnRlciB3aGF0IGl0IGRvZXM6IGBjcmVhdGVFbGVtZW50U3B5YFxuICAgICAgICAgKiBob2xkcyB0aGUgc3B5IG9uIGBjcmVhdGVFbGVtZW50YCwgYW5kIGBjcmVhdGVQcm9ncmFtT3B0aW9uc2AgaG9sZHMgdGhlIG9wdGlvbnMgYGNyZWF0ZVByb2dyYW1gIHdhc1xuICAgICAgICAgKiBjYWxsZWQgd2l0aC4gVGhlIHZlcmIgYmVsb25ncyB0byB0aGUgbmFtZSBiZWluZyByZWZlcmVuY2VkLCBzbyB0aGUgcnVsZSByZWFkcyBpdCBhcyBhIGZ1bmN0aW9uIG5hbWVcbiAgICAgICAgICogdGhhdCBpcyBub3QgYSBmdW5jdGlvbi4gTGVmdCBvbiBmb3IgcHJvZHVjdGlvbiBjb2RlLCB3aGVyZSB0aGUgY29tcGxhaW50IGlzIHRoZSByaWdodCBvbmUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1ub24tZnVuY3Rpb24tdmVyYi1wcmVmaXgnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tdG9wLWxldmVsLWFzc2lnbm1lbnQtaW4tZnVuY3Rpb24nOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbm8tbWFnaWMtbnVtYmVycyAtLSBXZSBkaXNhYmxlZCBtYWdpYyBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhbGwgb3ZlciB0aGUgY29uZmlncy4gKi9cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsT0FBTyxxQkFBcUI7QUFDNUIsU0FBUyx5QkFBeUI7QUFDbEMsT0FBTyxZQUFZO0FBRW5CLE9BQU8sZUFBZTtBQUN0QixTQUFTLHNDQUFzQztBQUMvQyxTQUFTLGVBQWUsc0NBQXNDO0FBRTlELE9BQU8sZ0JBQWdCO0FBRXZCLE9BQU8sZ0JBQWdCO0FBQ3ZCLFNBQVMsV0FB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
1043
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgY29uZmlndXJhdGlvbiBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cyB3aXRoIHZhcmlvdXMgcGx1Z2lucy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIEVTTGludCBjb25maWd1cmF0aW9ucyBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cywgaW50ZWdyYXRpbmcgbXVsdGlwbGUgRVNMaW50IHBsdWdpbnNcbiAqIHN1Y2ggYXMgYEB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJgLCBgQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW5gLFxuICogYGVzbGludC1wbHVnaW4tbW9kdWxlcy1uZXdsaW5lc2AsIGBAc3R5bGlzdGljL2VzbGludC1wbHVnaW5gLlxuICogSXQgc2V0cyB1cCBwYXJzZXJzLCBwbHVnaW5zLCBhbmQgcnVsZXMgZm9yIG1haW50YWluaW5nIGNvZGUgcXVhbGl0eSBhbmQgY29uc2lzdGVuY3kuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIEVTTGludCBydWxlL3BsdWdpbiBjb25maWd1cmF0aW9uOyBjb3JyZWN0bmVzcyBpcyB2ZXJpZmllZCBieSBydW5uaW5nIEVTTGludCwgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSAnZXNsaW50JztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tbWFnaWMtbnVtYmVycyAtLSBXZSBkaXNhYmxlZCBtYWdpYyBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhbGwgb3ZlciB0aGUgY29uZmlncy4gKi9cbmltcG9ydCBjb21tZW50c0NvbmZpZ3MgZnJvbSAnQGVzbGludC1jb21tdW5pdHkvZXNsaW50LXBsdWdpbi1lc2xpbnQtY29tbWVudHMvY29uZmlncyc7XG5pbXBvcnQgeyBpbmNsdWRlSWdub3JlRmlsZSB9IGZyb20gJ0Blc2xpbnQvY29uZmlnLWhlbHBlcnMnO1xuaW1wb3J0IGVzbGludCBmcm9tICdAZXNsaW50L2pzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1yZW5hbWUtZGVmYXVsdCAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgcGx1Z2luYCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHN0eWxpc3RpYyBmcm9tICdAc3R5bGlzdGljL2VzbGludC1wbHVnaW4nO1xuaW1wb3J0IHsgY3JlYXRlVHlwZVNjcmlwdEltcG9ydFJlc29sdmVyIH0gZnJvbSAnZXNsaW50LWltcG9ydC1yZXNvbHZlci10eXBlc2NyaXB0JztcbmltcG9ydCB7IGZsYXRDb25maWdzIGFzIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncyB9IGZyb20gJ2VzbGludC1wbHVnaW4taW1wb3J0LXgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBfZGVmYXVsdGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCBub2RlUGx1Z2luIGZyb20gJ2VzbGludC1wbHVnaW4tbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYHBsdWdpbmAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCBvYnNpZGlhbm1kIGZyb20gJ2VzbGludC1wbHVnaW4tb2JzaWRpYW5tZCc7XG5pbXBvcnQgeyBQbGFpblRleHRQYXJzZXIgfSBmcm9tICdlc2xpbnQtcGx1Z2luLW9ic2lkaWFubWQvZGlzdC9saWIvcGxhaW5UZXh0UGFyc2VyLmpzJztcbmltcG9ydCB7IGNvbmZpZ3MgYXMgcGVyZmVjdGlvbmlzdENvbmZpZ3MgfSBmcm9tICdlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBpbmRleGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCB1bmljb3JuIGZyb20gJ2VzbGludC1wbHVnaW4tdW5pY29ybic7XG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICdlc2xpbnQvY29uZmlnJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1yZW5hbWUtZGVmYXVsdCAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgdHNlc2xpbnQgZnJvbSAndHlwZXNjcmlwdC1lc2xpbnQnO1xuXG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uLy4uL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnLi4vLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBnZXRSb290Rm9sZGVyIH0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQgeyBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllcyB9IGZyb20gJy4vZXNsaW50LW5vLXJlc3RyaWN0ZWQtc3ludGF4LnRzJztcbmltcG9ydCB7IGpzb25QbHVnaW4gfSBmcm9tICcuL2VzbGludC1ydWxlcy9tYW5pZmVzdC1oZWxwZXJzLnRzJztcbmltcG9ydCB7IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW4gfSBmcm9tICcuL2VzbGludC1ydWxlcy9vYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luLnRzJztcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBidWlsZHMgY3VzdG9tIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybnMgVGhlIGN1c3RvbSBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICBjdXN0b21Db25maWdzPyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgZWRpdHMgdGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gICAqL1xuICBlZGl0Q29udGV4dD8oY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIGRlZmluaW5nIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludENvbmZpZ0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIHJvb3QgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290Q29uZmlnRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NyaXB0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXN0IGZpbGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlc3RGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogVGhlIGFsbCBmaWxlcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFsbCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyBhbGxGaWxlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnRlc3RGaWxlcywgLi4udGhpcy5zY3JpcHRGaWxlcywgLi4udGhpcy5yb290Q29uZmlnRmlsZXMsIC4uLnRoaXMuc291cmNlRmlsZXNdO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYnVpbGRzIEVTTGludCBjb25maWd1cmF0aW9ucyBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cywgaW50ZWdyYXRpbmcgbXVsdGlwbGUgRVNMaW50IHBsdWdpbnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXNsaW50Q29uZmlncyhvcHRpb25zOiBEZWZpbmVFc2xpbnRDb25maWdzT3B0aW9ucyA9IHt9KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBFc2xpbnRDb25maWdDb250ZXh0KCk7XG4gIGNvbnRleHQucm9vdENvbmZpZ0ZpbGVzLnB1c2goXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ29tbWl0bGludENvbmZpZ1RzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5WaXRlc3RDb25maWdUc1xuICApO1xuICBjb250ZXh0LnNjcmlwdEZpbGVzLnB1c2goXG4gICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TY3JpcHRzLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcylcbiAgKTtcbiAgY29udGV4dC5zb3VyY2VGaWxlcy5wdXNoKFxuICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVRzeClcbiAgKTtcbiAgY29udGV4dC50ZXN0RmlsZXMucHVzaChcbiAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlRlc3RzLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Nb2NrcywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUZXN0VHMpXG4gICk7XG5cbiAgaWYgKG9wdGlvbnMuZWRpdENvbnRleHQpIHtcbiAgICBvcHRpb25zLmVkaXRDb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgY3VzdG9tQ29uZmlncyA9IG9wdGlvbnMuY3VzdG9tQ29uZmlncz8uKGNvbnRleHQpID8/IFtdO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0R2l0SWdub3JlQ29uZmlncygpLFxuICAgIC8vIE9ic2lkaWFubWQgY29uZmlncyBydW4gZmlyc3Qgc28gb3VyIHN0cmljdGVyIHJ1bGVzIG92ZXJyaWRlIHRoZWlyIHJlbGF4ZWQgZGVmYXVsdHNcbiAgICAuLi5nZXRPYnNpZGlhbkxpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldEVzbGludENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0SW1wb3J0WENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpLFxuICAgIC4uLmdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRPYnNpZGlhbkRldlV0aWxzUGx1Z2luQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXROb2RlQ29tcGF0Q29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRJbnRlZ3JhdGlvblRlc3RDb25maWdzKCksXG4gICAgLi4uZ2V0TWFuaWZlc3RDb25maWdzKCksXG4gICAgLi4uZ2V0TGljZW5zZUNvbmZpZ3MoKSxcbiAgICAuLi5jdXN0b21Db25maWdzXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyIC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGByZWNvbW1lbmRlZGAgaXMgdG9vIGNvbmZ1c2luZy5cbiAgICAgIGV4dGVuZHM6IFtjb21tZW50c0NvbmZpZ3MucmVjb21tZW5kZWRdLFxuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtY29tbWVudHMvcmVxdWlyZS1kZXNjcmlwdGlvbic6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRFc2xpbnRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbZXNsaW50LmNvbmZpZ3MucmVjb21tZW5kZWRdLFxuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdhY2Nlc3Nvci1wYWlycyc6ICdlcnJvcicsXG4gICAgICAgICdhcnJheS1jYWxsYmFjay1yZXR1cm4nOiAnZXJyb3InLFxuICAgICAgICAnY2FtZWxjYXNlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2NhcGl0YWxpemVkLWNvbW1lbnRzJzogWydlcnJvcicsICdhbHdheXMnLCB7IGJsb2NrOiB7IGlnbm9yZVBhdHRlcm46ICd2OCcgfSB9XSxcbiAgICAgICAgJ2NvbXBsZXhpdHknOiAnZXJyb3InLFxuICAgICAgICAnY29uc2lzdGVudC10aGlzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2N1cmx5JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZSc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LXBhcmFtLWxhc3QnOiAnZXJyb3InLFxuICAgICAgICAnZXFlcWVxJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZS1tYXRjaGluZyc6ICdlcnJvcicsXG4gICAgICAgICdmdW5jLW5hbWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtc3R5bGUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnZGVjbGFyYXRpb24nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93QXJyb3dGdW5jdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnZ3JvdXBlZC1hY2Nlc3Nvci1wYWlycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdnZXRCZWZvcmVTZXQnXG4gICAgICAgIF0sXG4gICAgICAgICdndWFyZC1mb3ItaW4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tYWxlcnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tYXJyYXktY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tYml0d2lzZSc6ICdlcnJvcicsXG4gICAgICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tY29uc29sZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICd3YXJuJyxcbiAgICAgICAgICAgICAgJ2Vycm9yJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWNvbnN0cnVjdG9yLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICduby1kaXYtcmVnZXgnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZWxzZS1yZXR1cm4nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd0Vsc2VJZjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1lbXB0eS1mdW5jdGlvbic6ICdlcnJvcicsXG4gICAgICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dHJhLWJpbmQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtbGFiZWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW1wbGljaXQtY29lcmNpb24nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvdzogW1xuICAgICAgICAgICAgICAnISEnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8taW1wbGllZC1ldmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWlubmVyLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbC12YXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbGFiZWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmVseS1pZic6ICdlcnJvcicsXG4gICAgICAgICduby1sb29wLWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbWFnaWMtbnVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldGVjdE9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBlbmZvcmNlQ29uc3Q6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmU6IFtcbiAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1tdWx0aS1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lZ2F0ZWQtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lc3RlZC10ZXJuYXJ5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy1mdW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy13cmFwcGVycyc6ICdlcnJvcicsXG4gICAgICAgICduby1vYmplY3QtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tb2N0YWwtZXNjYXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb21pc2UtZXhlY3V0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXJlc3RyaWN0ZWQtc3ludGF4JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgLi4ubm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJpZXNcbiAgICAgICAgXSxcbiAgICAgICAgJ25vLXJldHVybi1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2NyaXB0LXVybCc6ICdlcnJvcicsXG4gICAgICAgICduby1zZWxmLWNvbXBhcmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2VxdWVuY2VzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNoYWRvdyc6ICdlcnJvcicsXG4gICAgICAgICduby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdGhyb3ctbGl0ZXJhbCc6ICdlcnJvcicsXG4gICAgICAgICduby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubmVlZGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5yZWFjaGFibGUtbG9vcCc6ICdlcnJvcicsXG4gICAgICAgICduby11bnVzZWQtZXhwcmVzc2lvbnMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY2FsbCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbXB1dGVkLWtleSc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbmNhdCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbnN0cnVjdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmVuYW1lJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby12b2lkJzogJ2Vycm9yJyxcbiAgICAgICAgJ29iamVjdC1zaG9ydGhhbmQnOiAnZXJyb3InLFxuICAgICAgICAnb3BlcmF0b3ItYXNzaWdubWVudCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItYXJyb3ctY2FsbGJhY2snOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWNvbnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1leHBvbmVudGlhdGlvbi1vcGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbmFtZWQtY2FwdHVyZS1ncm91cCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbnVtZXJpYy1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LWhhcy1vd24nOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLW9iamVjdC1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVnZXgtbGl0ZXJhbHMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXJlc3QtcGFyYW1zJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ3JhZGl4JzogJ2Vycm9yJyxcbiAgICAgICAgJ3JlcXVpcmUtYXRvbWljLXVwZGF0ZXMnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hd2FpdCc6ICdlcnJvcicsXG4gICAgICAgICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgICAgICAndW5pY29kZS1ib20nOiAnZXJyb3InLFxuICAgICAgICAndmFycy1vbi10b3AnOiAnZXJyb3InLFxuICAgICAgICAneW9kYSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICduby1tYWdpYy1udW1iZXJzJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRFc2xpbnRJbXBvcnRSZXNvbHZlclR5cGVzY3JpcHRDb25maWdzKCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICdpbXBvcnQteC9yZXNvbHZlci1uZXh0JzogW1xuICAgICAgICAgIGNyZWF0ZVR5cGVTY3JpcHRJbXBvcnRSZXNvbHZlcih7XG4gICAgICAgICAgICBhbHdheXNUcnlUeXBlczogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRHaXRJZ25vcmVDb25maWdzKCk6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IGdpdGlnbm9yZVBhdGggPSBqb2luKGdldFJvb3RGb2xkZXIoKSA/PyAnJywgJy5naXRpZ25vcmUnKTtcbiAgaWYgKCFleGlzdHNTeW5jKGdpdGlnbm9yZVBhdGgpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbaW5jbHVkZUlnbm9yZUZpbGUoZ2l0aWdub3JlUGF0aCldO1xufVxuXG5mdW5jdGlvbiBnZXRJbXBvcnRYQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW1xuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy50eXBlc2NyaXB0LFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MuZXJyb3JzLFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3Mud2FybmluZ3NcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvZXh0ZW5zaW9ucyc6IFsnZXJyb3InLCAnaWdub3JlUGFja2FnZXMnXSxcbiAgICAgICAgJ2ltcG9ydC14L2ZpcnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L2ltcG9ydHMtZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbmV3bGluZS1hZnRlci1pbXBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYWJzb2x1dGUtcGF0aCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWNvbW1vbmpzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWN5Y2xlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlcHJlY2F0ZWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZHVwbGljYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1keW5hbWljLXJlcXVpcmUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZW1wdHktbmFtZWQtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWltcG9ydC1tb2R1bGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1tdXRhYmxlLWV4cG9ydHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbmFtZWQtZGVmYXVsdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lc3BhY2UnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVsYXRpdmUtcGFja2FnZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVzdHJpY3RlZC1wYXRocyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1zZWxmLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby11bmFzc2lnbmVkLWltcG9ydCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICcqKi8qLmNzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNhc3MnLFxuICAgICAgICAgICAgICAnKiovKi5zY3NzJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVudXNlZC1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdpbXBvcnQteC9uby11c2VsZXNzLXBhdGgtc2VnbWVudHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IFtcbiAgICAgICAgLi4uY29udGV4dC5yb290Q29uZmlnRmlsZXMsXG4gICAgICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYWluVHMpXG4gICAgICBdLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRJbnRlZ3JhdGlvblRlc3RDb25maWdzKCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIC8vIEludGVncmF0aW9uIHRlc3RzIHJ1biBpbiBhIE5vZGUgZW52aXJvbm1lbnQgYW5kIGxlZ2l0aW1hdGVseSByZWFkIGZpbGVzIC8gcGF0aHMsIHNvIHRoZSBOb2RlLWJ1aWx0aW5zIGJhbnMgZG8gbm90IGFwcGx5IHRvIHRoZW0uXG4gICAgICBmaWxlczogW2pvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlJbnRlZ3JhdGlvblRlc3RUcyldLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdvYnNpZGlhbm1kL25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8qXG4gICAgICAgKiBBbiBpbnRlZ3JhdGlvbiB0ZXN0IHRoYXQgZHJpdmVzIHRoZSBVSSB3aXRoIGBkaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KC4uLikpYCBwcm9kdWNlcyBhblxuICAgICAgICogVU5UUlVTVEVEIGV2ZW50LCBhbmQgT2JzaWRpYW4gYW5kIENvZGVNaXJyb3IgZ2F0ZSBvbiBgaXNUcnVzdGVkYCBcdTIwMTQgc28gdGhlIHRlc3QgY2FuIGV4ZXJjaXNlXG4gICAgICAgKiBub3RoaW5nIHdoaWxlIHN0aWxsIHBhc3NpbmcuIE9ubHkgaW50ZWdyYXRpb24gdGVzdHMgYXJlIGNvdmVyZWQ6IGEgdW5pdCB0ZXN0IGhhcyBubyByZWFsIGlucHV0XG4gICAgICAgKiBwaXBlbGluZSB0byByZWFjaCwgc28gZGlzcGF0Y2hpbmcgaXMgdGhlIG9ubHkgdGhpbmcgaXQgY2FuIGRvLlxuICAgICAgICpcbiAgICAgICAqIEFuZHJvaWQgaXMgZXhlbXB0IEJZIEZJTEVOQU1FIHJhdGhlciB0aGFuIGJ5IGEgZGlzYWJsZSBjb21tZW50LCBiZWNhdXNlIHRoZSBleGVtcHRpb24gaXMgYVxuICAgICAgICogcHJvcGVydHkgb2YgdGhlIHBsYXRmb3JtIHJhdGhlciB0aGFuIG9mIGFueSBvbmUgY2FsbCBzaXRlOiB0aGUgdHJ1c3RlZCBoZWxwZXJzIGFyZSBidWlsdCBvblxuICAgICAgICogYHdpbmRvdy5lbGVjdHJvbmAsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHRoZXJlLCBzbyBldmVyeSBkaXNwYXRjaCBpbiBzdWNoIGEgZmlsZSBpcyBsZWdpdGltYXRlIGFuZFxuICAgICAgICogYWx3YXlzIHdpbGwgYmUuIEEgYCouY3Jvc3MtcGxhdGZvcm0uKmAgZmlsZSBpcyBkZWxpYmVyYXRlbHkgTk9UIGV4ZW1wdCBcdTIwMTQgaXQgcnVucyBvbiBkZXNrdG9wIHRvbyxcbiAgICAgICAqIHdoZXJlIHRoZSB0cnVzdGVkIHBhdGggaXMgYXZhaWxhYmxlLCBzbyBpdCBzaG91bGQgYnJhbmNoIG9uIGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgIGFuZCBkaXNhYmxlXG4gICAgICAgKiB0aGUgcnVsZSBvbiB0aGUgbW9iaWxlIGFybSBhbG9uZS5cbiAgICAgICAqL1xuICAgICAgZmlsZXM6IFtqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNyYywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55SW50ZWdyYXRpb25UZXN0VHMpXSxcbiAgICAgIGlnbm9yZXM6IFtcbiAgICAgICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueUFuZHJvaWRJbnRlZ3JhdGlvblRlc3RUcyksXG4gICAgICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlBbmRyb2lkQ2FwdHVyZUludGVncmF0aW9uVGVzdFRzKVxuICAgICAgXSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cyc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKlxuICogVGhlIENvbW11bml0eSBkaXJlY3RvcnkgcmVxdWlyZXMgYSByb290IGBMSUNFTlNFYCwgYW5kIGBvYnNpZGlhbm1kL3ZhbGlkYXRlLWxpY2Vuc2VgIGlzIHRoZSBvbmx5IGNoZWNrXG4gKiBvbiB3aGF0IGl0IHNheXM6IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG11c3Qgbm90IHN0aWxsIGJlIHRoZSBzYW1wbGUgcGx1Z2luJ3MsIGFuZCB0aGUgeWVhciBtdXN0IGJlXG4gKiBjdXJyZW50LiBCb3RoIG5lZWQgYFBsYWluVGV4dFBhcnNlcmAsIHdoaWNoIHRoZSBwbHVnaW4gZG9lcyBub3QgZXhwb3J0LCBzbyBpdCBpcyByZWFjaGVkIHRocm91Z2ggaXRzXG4gKiBidWlsZCBvdXRwdXQgLS0gdGhlIHBhY2thZ2UgZGVjbGFyZXMgbm8gYGV4cG9ydHNgIG1hcCBhbmQgc2hpcHMgYSBkZWNsYXJhdGlvbiBiZXNpZGUgdGhlIG1vZHVsZSwgc28gdGhlXG4gKiBkZWVwIHBhdGggcmVzb2x2ZXMsIGJ1dCBpdCBpcyB0aGUgb25lIGltcG9ydCBoZXJlIHRoYXQgYSBwYXRjaCByZWxlYXNlIHVwc3RyZWFtIGNvdWxkIGJyZWFrLlxuICpcbiAqIFRoZSBydWxlIGNvbXBhcmVzIHRoZSB5ZWFyIGFnYWluc3QgYG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKWAgYXQgbGludCB0aW1lLCBzbyBhIHJlcG8gZ29lcyByZWQgYXQgdGhlXG4gKiB0dXJuIG9mIHRoZSB5ZWFyIHVudGlsIGl0cyBMSUNFTlNFIGlzIGJ1bXBlZC4gYC5naXRodWIvd29ya2Zsb3dzL3VwZGF0ZS1saWNlbnNlLXllYXIueW1sYCBkb2VzIHRoYXQgb25cbiAqIDEgSmFudWFyeTsgYSByZXBvIGFkb3B0aW5nIHRoaXMgY29uZmlnIG5lZWRzIHRoZSBzYW1lIHdvcmtmbG93LCBvciB0aGUgeWVhciBjaGVjayB3aWxsIGZhaWwgaXRzIENJLlxuICovXG5mdW5jdGlvbiBnZXRMaWNlbnNlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBmaWxlczogW09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkxpY2Vuc2VdLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlcjogUGxhaW5UZXh0UGFyc2VyXG4gICAgICB9LFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICBvYnNpZGlhbm1kXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ29ic2lkaWFubWQvdmFsaWRhdGUtbGljZW5zZSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKlxuICogVGhlIHJvb3QgYG1hbmlmZXN0Lmpzb25gIGlzIHdoYXQgdGhlIENvbW11bml0eSBkaXJlY3RvcnkncyBhdXRvbWF0ZWQgcmV2aWV3IGFjdHVhbGx5IHJlYWRzLCBhbmQgdW50aWxcbiAqIHRoaXMgY29uZmlnIGV4aXN0ZWQgbm8gbGludGVyIHJlYWQgaXQgYXQgYWxsOiBgb2JzaWRpYW5tZC92YWxpZGF0ZS1tYW5pZmVzdGAgcmVnaXN0ZXJzIGEgYFByb2dyYW1gXG4gKiB2aXNpdG9yIGFuZCBleHBlY3RzIGFuIEVTVHJlZSBgT2JqZWN0RXhwcmVzc2lvbmAsIHdoaWxlIGV2ZXJ5IEpTT04gcGFyc2VyIHRoYXQgc2hpcHMgcHJvZHVjZXMgc29tZXRoaW5nXG4gKiBlbHNlIC0tIGBAZXNsaW50L2pzb25gIHByb2R1Y2VzIE1vbW9hIChgRG9jdW1lbnRgKSwgYGpzb25jLWVzbGludC1wYXJzZXJgIHByb2R1Y2VzXG4gKiBgSlNPTk9iamVjdEV4cHJlc3Npb25gIC0tIHNvIHRoZSBydWxlIHNpbGVudGx5IG1hdGNoZXMgbm90aGluZyBubyBtYXR0ZXIgd2hpY2ggZmlsZXMgaXQgaXMgc2NvcGVkIHRvLlxuICogVGhlIGluLWhvdXNlIHJ1bGVzIGJlbG93IHZpc2l0IHRoZSBNb21vYSBBU1QgaW5zdGVhZC5cbiAqXG4gKiBgbWFuaWZlc3QuanNvbmAgaXMgc3RyaWN0IEpTT04sIHNvIGFuIGBlc2xpbnQtZGlzYWJsZWAgY29tbWVudCBpbiBpdCBpcyBhIHBhcnNlIGVycm9yIEFORCB3b3VsZCBzdG9wXG4gKiBPYnNpZGlhbiBsb2FkaW5nIHRoZSBwbHVnaW4uIFRoYXQgbWFrZXMgdGhlIGNvbmZpZyB0aGUgb25seSBwbGFjZSBhIGNoZWNrIGNhbiBiZSB3YWl2ZWQsIHdoaWNoIGlzIHdoeVxuICogdGhlc2UgYXJlIGZvdXIgcnVsZXMgcmF0aGVyIHRoYW4gb25lOiBhIHJlcG8gd2l0aCBhIGdyYW5kZmF0aGVyZWQgYGlkYCBjYW4gdHVybiBvZmYgYG1hbmlmZXN0LWlkYCBhbG9uZVxuICogYW5kIGtlZXAgdGhlIHJlc3QuXG4gKi9cbmZ1bmN0aW9uIGdldE1hbmlmZXN0Q29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBmaWxlczogW09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbl0sXG4gICAgICBsYW5ndWFnZTogJ2pzb24vanNvbicsXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgICdqc29uJzoganNvblBsdWdpbixcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscyc6IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL21hbmlmZXN0LWRlc2NyaXB0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9tYW5pZmVzdC1pZCc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbWFuaWZlc3QtbmFtZSc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbWFuaWZlc3Qtc2NoZW1hJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVDb21wYXRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICAvKlxuICAgKiBUaGUgbWluaW11bSBPYnNpZGlhbiBpbnN0YWxsZXIgdGhhdCBzdGlsbCByZWNlaXZlcyBhcHAgdXBkYXRlcyBhbmQgd29ya3MgaXMgMS4xLjksIHdoaWNoIHNoaXBzIEVsZWN0cm9uXG4gICAqIDIxLjMuMyBhbmQgcnVucyBOb2RlIDE2LjE2LjAuIFNoaXBwZWQgc291cmNlIG11c3QgdGhlcmVmb3JlIGF2b2lkIE5vZGUvRVMgcnVudGltZSBidWlsdGlucyB1bmF2YWlsYWJsZSBpblxuICAgKiB0aGF0IHZlcnNpb24uIFRlc3RzIGFuZCBzY3JpcHRzIGFyZSBkZXYtb25seSBhbmQgZXhlbXB0LlxuICAgKlxuICAgKiBTb3VyY2Ugb2YgdHJ1dGg6IGBvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL21ldGFkYXRhLmpzb25gIFx1MjAxNCB0aGUgbmV3ZXN0IHJlbGVhc2UgY2FycnlpbmcgdGhlIGZpZWxkXG4gICAqICgxLjEzLjEpIGRlY2xhcmVzIGBtaW5SdW5uYWJsZUluc3RhbGxlclZlcnNpb246IFwiMS4xLjlcImAsIGFuZCB0aGF0IGluc3RhbGxlcidzIGBydW50aW1lVmVyc2lvbnNgIGdpdmVzIHRoZVxuICAgKiBFbGVjdHJvbiBhbmQgTm9kZSB2ZXJzaW9ucyBhYm92ZS4gUmUtZGVyaXZlIGZyb20gdGhlcmUgcmF0aGVyIHRoYW4gZWRpdGluZyB0aGlzIG51bWJlciBieSBoYW5kLlxuICAgKi9cbiAgY29uc3QgbWluaW11bU5vZGVWZXJzaW9uID0gJz49MTYuMTYuMCc7XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc291cmNlRmlsZXMsXG4gICAgICBpZ25vcmVzOiBbXG4gICAgICAgIC4uLmNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgICAvLyBEZXYtb25seSB0b29saW5nIChidWlsZCwgbGludCwgdmVyc2lvbikgdW5kZXIgYHNyYy9zY3JpcHQtdXRpbHMvKipgIHJ1bnMgdmlhIGBqaXRpYCBpbiB0aGUgY29uc3VtZXIncyBOb2RlIGVudmlyb25tZW50IHdoZW4gYnVpbGRpbmcgYSBwbHVnaW4gYW5kIG5ldmVyIHNoaXBzIGludG8gdGhlIE9ic2lkaWFuIHJ1bnRpbWUsIHNvIHRoZSBOb2RlLTE2IGZsb29yIGRvZXMgbm90IGFwcGx5IHRvIGl0LlxuICAgICAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNjcmlwdFV0aWxzLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcylcbiAgICAgIF0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIG46IG5vZGVQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZlcnNpb246IG1pbmltdW1Ob2RlVmVyc2lvblxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ24vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGBCbG9iYCBhbmQgYEZpbGVgIGFyZSBET00gd2ViIGdsb2JhbHMgYWx3YXlzIHByZXNlbnQgaW4gdGhlIE9ic2lkaWFuL0VsZWN0cm9uIHJlbmRlcmVyIChldmVyeSBzdXBwb3J0ZWQgQ2hyb21pdW0pLCBidXQgdGhlIHJ1bGUgYWxzbyBrbm93cyB0aGVtIGFzIE5vZGUncyBleHBlcmltZW50YWwgYnVpbHRpbnMgYW5kIGNhbm5vdCB0ZWxsIHdoaWNoIGlzIG1lYW50LiBJZ25vcmUgdGhlbSBnbG9iYWxseTsgZ2VudWluZWx5IG5ld2VyIEFQSXMgKGUuZy4gYEFib3J0U2lnbmFsLmFueWApIHN0YXkgZmxhZ2dlZC5cbiAgICAgICAgICAgIGlnbm9yZXM6IFtcbiAgICAgICAgICAgICAgJ0Jsb2InLFxuICAgICAgICAgICAgICAnRmlsZSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB2ZXJzaW9uOiBtaW5pbXVtTm9kZVZlcnNpb25cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRPYnNpZGlhbkRldlV0aWxzUGx1Z2luQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscyc6IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4nOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL25vLXVudXNlZC1wYXJhbXMtbWVtYmVycyc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaCc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvcHJlZmVyLW5vb3AtYXN5bmMnOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL3JlcXVpcmUtbWV0aG9kLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLXN1cGVyLWNhbGwnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE9ic2lkaWFuTGludENvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IG9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzID0gb2JzaWRpYW5tZC5jb25maWdzLnJlY29tbWVuZGVkO1xuXG4gIGNvbnN0IHNjb3BlZE9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzID0gb2JzaWRpYW5SZWNvbW1lbmRlZENvbmZpZ3MubWFwKChjb25maWcpID0+IHtcbiAgICBpZiAoY29uZmlnLmZpbGVzPy5pbmNsdWRlcygncGFja2FnZS5qc29uJykpIHtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGZpbGVzOiBjb250ZXh0LnNvdXJjZUZpbGVzXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW3Njb3BlZE9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzXSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgb2JzaWRpYW5tZFxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFBlcmZlY3Rpb25pc3RDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFt7XG4gICAgZXh0ZW5kczogW3BlcmZlY3Rpb25pc3RDb25maWdzWydyZWNvbW1lbmRlZC1hbHBoYWJldGljYWwnXV0sXG4gICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKVxuICB9XSk7XG59XG5cbmZ1bmN0aW9uIGdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtcbiAgICAgICAgc3R5bGlzdGljLmNvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIHN0eWxpc3RpYy5jb25maWdzLmN1c3RvbWl6ZSh7XG4gICAgICAgICAgYXJyb3dQYXJlbnM6IHRydWUsXG4gICAgICAgICAgYnJhY2VTdHlsZTogJzF0YnMnLFxuICAgICAgICAgIGNvbW1hRGFuZ2xlOiAnbmV2ZXInLFxuICAgICAgICAgIHNlbWk6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0BzdHlsaXN0aWMvZ2VuZXJhdG9yLXN0YXItc3BhY2luZyc6ICdvZmYnLFxuICAgICAgICAnQHN0eWxpc3RpYy9pbmRlbnQnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvaW5kZW50LWJpbmFyeS1vcHMnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvanN4LW9uZS1leHByZXNzaW9uLXBlci1saW5lJzogJ29mZicsXG4gICAgICAgICdAc3R5bGlzdGljL25vLWV4dHJhLXNlbWknOiAnZXJyb3InLFxuICAgICAgICAnQHN0eWxpc3RpYy9vYmplY3QtY3VybHktbmV3bGluZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEV4cG9ydERlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgIG1pblByb3BlcnRpZXM6IDIsXG4gICAgICAgICAgICAgIG11bHRpbGluZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgIG1pblByb3BlcnRpZXM6IDIsXG4gICAgICAgICAgICAgIG11bHRpbGluZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0BzdHlsaXN0aWMvb3BlcmF0b3ItbGluZWJyZWFrJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2JlZm9yZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgICAgICc9JzogJ2FmdGVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0BzdHlsaXN0aWMvcXVvdGVzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3dUZW1wbGF0ZUxpdGVyYWxzOiAnbmV2ZXInXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3RyaWN0VHlwZUNoZWNrZWQsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3R5bGlzdGljVHlwZUNoZWNrZWRcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgICAgICAgIGpzeDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvamVjdFNlcnZpY2U6IHRydWUsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHRzY29uZmlnUm9vdERpcmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHBhcnNlciBvcHRpb24uXG4gICAgICAgICAgdHNjb25maWdSb290RGlyOiBnZXRSb290Rm9sZGVyKCkgPz8gJydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5JzogJ2Vycm9yJyxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9tZXRob2Qtc2lnbmF0dXJlLXN0eWxlJzogWydlcnJvcicsICdtZXRob2QnXSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlcyc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgY2hlY2tUaGVuYWJsZXM6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93QXNUaGlzUGFyYW1ldGVyOiB0cnVlXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93ZWROYW1lczogW1xuICAgICAgICAgICAgJ3RoYXQnXG4gICAgICAgICAgXVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBhcmdzYCBpcyBhbiBFU0xpbnQgcnVsZSBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIGFyZ3M6ICdhbGwnLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYGFyZ3NJZ25vcmVQYXR0ZXJuYCBpcyBhIGB0eXBlc2NyaXB0LWVzbGludGAgcnVsZSBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIGFyZ3NJZ25vcmVQYXR0ZXJuOiAnXl8nLFxuICAgICAgICAgICAgY2F1Z2h0RXJyb3JzOiAnYWxsJyxcbiAgICAgICAgICAgIGNhdWdodEVycm9yc0lnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBkZXN0cnVjdHVyZWRBcnJheUlnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBpZ25vcmVSZXN0U2libGluZ3M6IHRydWUsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgdmFyc0lnbm9yZVBhdHRlcm5gIGlzIGEgYHR5cGVzY3JpcHQtZXNsaW50YCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgdmFyc0lnbm9yZVBhdHRlcm46ICdeXydcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLXJlYWRvbmx5JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9kb3Qtbm90YXRpb24nOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93UHJpdmF0ZUNsYXNzUHJvcGVydHlBY2Nlc3M6IHRydWUsXG4gICAgICAgICAgYWxsb3dQcm90ZWN0ZWRDbGFzc1Byb3BlcnR5QWNjZXNzOiB0cnVlXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgdmVyc2lvbjogJ2RldGVjdCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFVuaWNvcm5Db25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbdW5pY29ybi5jb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAvKlxuICAgICAgICAgKiBUaGVzZSBlbnRyaWVzIGFyZSBub3QgYWJicmV2aWF0aW9ucyB0byBiZSBleHBhbmRlZCBcdTIwMTQgdGhleSBhcmUgZXN0YWJsaXNoZWQgdm9jYWJ1bGFyeSBoZXJlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBCcmFuZDogYGRldmAsIGBsaWJgLCBgdXRpbGAvYHV0aWxzYCBzcGVsbCB0aGUgcHJvZHVjdCdzIG93biBuYW1lLiBMZWZ0IG9uLCB0aGUgcnVsZSByZXdyaXRlc1xuICAgICAgICAgKiBgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRoc2AgdG8gYE9ic2lkaWFuRGV2ZWxvcG1lbnRVdGlsaXRpZXNSZXBvUGF0aHNgIGFuZCBgZ2V0TGliRGVidWdnZXJgIHRvXG4gICAgICAgICAqIGBnZXRMaWJyYXJ5RGVidWdnZXJgLCByZW5hbWluZyBleHBvcnRlZCBBUEkgYWZ0ZXIgdGhlIHBhY2thZ2UgaXQgYmVsb25ncyB0by5cbiAgICAgICAgICpcbiAgICAgICAgICogQ29udmVudGlvbjogYHBhcmFtc2AgaXMgdGhlIHBhcmFtZXRlci1iYWcgY29udmVudGlvbiwgZW5mb3JjZWQgYnlcbiAgICAgICAgICogYG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoYCwgd2hpY2ggcmVxdWlyZXMgYmFnIHR5cGVzIHRvIGJlIG5hbWVkXG4gICAgICAgICAqIGA8T3duZXI+UGFyYW1zYCAvIGA8T3duZXI+T3B0aW9uc2AuIEV4cGFuZGluZyBpdCB0byBgUGFyYW1ldGVyc2Agd291bGQgcHV0IHRoZSB0d28gcnVsZXMgaW4gZGlyZWN0XG4gICAgICAgICAqIGNvbnRyYWRpY3Rpb24gYW5kIGJyZWFrIDMwMCsgZXhwb3J0ZWQgdHlwZSBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVzZXJ2ZWQgd29yZHM6IGEgYmFyZSBgYXJnc2AsIGBmbmAsIGBzdHJgLCBgbW9kYCBvciBgZXZ0YCBleHBhbmRzIHRvIGFuIGlkZW50aWZpZXIgdGhhdCBpcyBhbHJlYWR5XG4gICAgICAgICAqIHRha2VuLCBzbyB0aGUgcnVsZSBzdWdnZXN0cyBgJGFyZ3VtZW50c2AsIGAkZnVuY3Rpb25gLCBhbmQgc28gb24uIFNwZWxsIHRob3NlIGAkYXJndW1lbnRzYCAvXG4gICAgICAgICAqIGAkZnVuY3Rpb25gIGluc3RlYWQgXHUyMDE0IGEgYCRgIHByZWZpeCByZWFkcyBiZXR0ZXIgdGhhbiBhIHRyYWlsaW5nIHVuZGVyc2NvcmUuIFRoaXMgaXMgZGVsaWJlcmF0ZWx5IE5PVFxuICAgICAgICAgKiBjb25maWd1cmVkIGFzIGEgY3VzdG9tIHJlcGxhY2VtZW50OiB1bmljb3JuIHN1YnN0aXR1dGVzIGF0IHRoZSB3b3JkIGxldmVsIGluc2lkZSBjb21wb3VuZCBuYW1lcywgc29cbiAgICAgICAgICogcmVkaXJlY3RpbmcgdGhlIHdob2xlIGVudHJ5IHR1cm5zIGBhc3luY0ZuYCBpbnRvIGBhc3luYyRmdW5jdGlvbmAuIENvbXBvdW5kcyB3YW50IHRoZSBwbGFpbiBleHBhbnNpb25cbiAgICAgICAgICogKGBhc3luY0Z1bmN0aW9uYCk7IG9ubHkgdGhlIGJhcmUsIGdlbnVpbmVseS1jb2xsaWRpbmcgaWRlbnRpZmllcnMgdGFrZSB0aGUgYCRgIGZvcm0uXG4gICAgICAgICAqXG4gICAgICAgICAqIERvbWFpbiB3b3JkczogYGRvY2AvYGRvY3NgLCBgZW52YCwgYGRpc3RgIGFuZCBgc3JjYCBhcmUgdGhlIGNsZWFyZXIgc3BlbGxpbmcgaW4gdGhpcyBjb2RlYmFzZS5cbiAgICAgICAgICogRXhwYW5kaW5nIGBkb2NgIGFsc28gcGlja3MgdGhlIHdyb25nIHdvcmQgXHUyMDE0IHRoZSBgYXBpLWRvYy0qYCBtb2R1bGVzIGdlbmVyYXRlIEFQSSAqZG9jdW1lbnRhdGlvbiosIG5vdFxuICAgICAgICAgKiBkb2N1bWVudHMuIGBzcmNgIGFkZGl0aW9uYWxseSBjb3JydXB0cyBjb2RlOiB0aGUgZml4ZXIgcmVuYW1lcyB0aGUgYFNyY2AgbWVtYmVyIG9mIHRoZSBleHBvcnRlZFxuICAgICAgICAgKiBgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHNgIC8gYE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHNgIGVudW1zIHdoaWxlIGxlYXZpbmcgZXZlcnkgYC5TcmNgIHJlZmVyZW5jZVxuICAgICAgICAgKiBkYW5nbGluZywgYmVjYXVzZSBgY2hlY2tQcm9wZXJ0aWVzYCBleGVtcHRzIHByb3BlcnR5IGFjY2Vzc2VzIGJ1dCBub3QgdGhlIGRlY2xhcmF0aW9ucyB0aGV5IHBvaW50IGF0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEaXNhYmxpbmcgdGhlIHJlcGxhY2VtZW50IGVudHJpZXMgcHJvdGVjdHMgdGhlc2UgcGVybWFuZW50bHk7IGFuIGBhbGxvd0xpc3RgIHdvdWxkIGluc3RlYWQgbmVlZCBldmVyeVxuICAgICAgICAgKiBhZmZlY3RlZCBpZGVudGlmaWVyIGVudW1lcmF0ZWQgYnkgaGFuZCBhbmQgcmUtZW51bWVyYXRlZCBmb3IgZXZlcnkgbmV3IG9uZS5cbiAgICAgICAgICpcbiAgICAgICAgICogTk9URTogdGhpcyBydWxlJ3MgYXV0b2ZpeCBpcyBOT1QgcmVmZXJlbmNlLWF3YXJlIGZvciBkZWNsYXJhdGlvbnMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBhIGNvbnRyYWN0IFx1MjAxNFxuICAgICAgICAgKiBlbnVtIG1lbWJlcnMsIGludGVyZmFjZSBtZW1iZXJzLCBhbmQgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgcHJvcGVydGllcyAoYGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHlcbiAgICAgICAgICogZWw6IEhUTUxFbGVtZW50KWApIGFyZSByZW5hbWVkIHdoaWxlIGB0aGlzLmVsYCBhbmQgYEVudW0uTWVtYmVyYCByZWZlcmVuY2VzIGFyZSBsZWZ0IGRhbmdsaW5nLiBBcHBseVxuICAgICAgICAgKiBpdHMgcmVwb3J0cyBieSBoYW5kOyBuZXZlciBydW4gYC0tZml4YCBvdmVyIGl0LlxuICAgICAgICAgKi9cbiAgICAgICAgLypcbiAgICAgICAgICogQSBnb29kIHJ1bGUsIGJ1dCBpdHMgZGVmYXVsdCBwcmVmaXhlcyBmb3JjZSB1bmdyYW1tYXRpY2FsIG5hbWVzOiBgbWVtYmVyUGFnZUV4aXN0c2Agd291bGQgYmVjb21lXG4gICAgICAgICAqIGBpc01lbWJlclBhZ2VFeGlzdHNgIHJhdGhlciB0aGFuIGBkb2VzTWVtYmVyUGFnZUV4aXN0YC4gVGhlc2UgZW50cmllcyBFWFRFTkQgdGhlIGRlZmF1bHRzIChgaXNgLFxuICAgICAgICAgKiBgaGFzYCwgYGNhbmAsIGBzaG91bGRgLCAuLi4pIHJhdGhlciB0aGFuIHJlcGxhY2luZyB0aGVtLCBzbyBhIGJvb2xlYW4gd2l0aCBubyBib29sZWFuLXJlYWRpbmcgcHJlZml4XG4gICAgICAgICAqIGF0IGFsbCBpcyBzdGlsbCByZWplY3RlZCAtLSB0aGUgcnVsZSBqdXN0IHN0b3BzIGluc2lzdGluZyB0aGUgcHJlZml4IGNvbWUgZnJvbSBhIHNob3J0ZXIgbGlzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGxpc3QgaXMgYmlkaXJlY3Rpb25hbDogYWRkaW5nIGEgcHJlZml4IGFsc28gYXNzZXJ0cyB0aGF0IGV2ZXJ5dGhpbmcgbmFtZWQgd2l0aCBpdCBJUyBhIGJvb2xlYW4uXG4gICAgICAgICAqIGBjaGVja2AgZWFybnMgaXRzIHBsYWNlIG9uIGJvdGggY291bnRzLCBzaW5jZSB0aGUgaGFuZGZ1bCBvZiBub24tYm9vbGVhbiBgY2hlY2sqYCBuYW1lcyBpdCBzdXJmYWNlZFxuICAgICAgICAgKiB3ZXJlIGdlbnVpbmVseSBtaXMtbmFtZWQgKHZvaWQgZnVuY3Rpb25zIHRoYXQgdGhyb3csIGEgcHJvYmUgcmV0dXJuaW5nIGFuIEhUVFAgc3RhdHVzKS4gYHRlc3RgIHdhc1xuICAgICAgICAgKiBtZWFzdXJlZCBhbmQgcmVqZWN0ZWQ6IGl0IHdvdWxkIHZhbGlkYXRlIGZpdmUgYHRlc3QqYCBsaW5rIHByZWRpY2F0ZXMgdGhhdCByZWFkIGJldHRlciBhcyBgaXMqYFxuICAgICAgICAgKiBhbnl3YXksIGF0IHRoZSBjb3N0IG9mIHJlbmFtaW5nIFNDUkVBTUlOR19DQVNFIHRlc3QgZml4dHVyZXMgYW5kIHRoZSBgdGVzdENvdmVyYWdlYC9gdGVzdFdhdGNoYFxuICAgICAgICAgKiBydW5uZXJzIHRoYXQgZGVsaWJlcmF0ZWx5IG1pcnJvciB0aGUgYHRlc3Q6Y292ZXJhZ2VgL2B0ZXN0OndhdGNoYCBucG0gc2NyaXB0cy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2NvbnNpc3RlbnQtYm9vbGVhbi1uYW1lJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlZml4ZXM6IHtcbiAgICAgICAgICAgICAgYWxsb3dzOiB0cnVlLFxuICAgICAgICAgICAgICBjaGVjazogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGFpbnM6IHRydWUsXG4gICAgICAgICAgICAgIGRvZXM6IHRydWUsXG4gICAgICAgICAgICAgIGluY2x1ZGVzOiB0cnVlLFxuICAgICAgICAgICAgICBtdXN0OiB0cnVlLFxuICAgICAgICAgICAgICBuZWVkczogdHJ1ZSxcbiAgICAgICAgICAgICAgc3VwcG9ydHM6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8qXG4gICAgICAgICAqIFVuc2F0aXNmaWFibGUgYWxvbmdzaWRlIGBwZXJmZWN0aW9uaXN0L3NvcnQtY2xhc3Nlc2AsIHdoaWNoIGlzIGNvbmZpZ3VyZWQgaGVyZSBhcyBhIHBsYWluXG4gICAgICAgICAqIGFscGhhYmV0aWNhbCBzb3J0LiBUaGlzIHJ1bGUgd2FudHMgYSBjYXRlZ29yeSBvcmRlciAoYWxsIGZpZWxkcywgdGhlbiB0aGUgY29uc3RydWN0b3IsIHRoZW4gYWxsXG4gICAgICAgICAqIG1ldGhvZHMpLCBzbyB0aGUgZXh0cmVtZWx5IGNvbW1vbiBgcHJpdmF0ZSBfeGAgZmllbGQgcGFpcmVkIHdpdGggYSBgcHVibGljIGdldCB4KClgIGFjY2Vzc29yIGlzXG4gICAgICAgICAqIHJlamVjdGVkIGJ5IHdoaWNoZXZlciBydWxlIGxvc2VzOiBhbHBoYWJldGljYWxseSB0aGUgYWNjZXNzb3IgcHJlY2VkZXMgdGhlIGZpZWxkLCBieSBjYXRlZ29yeSB0aGVcbiAgICAgICAgICogZmllbGQgcHJlY2VkZXMgdGhlIGFjY2Vzc29yLiBVbmxpa2UgYHByZWZlci1nbG9iYWwtdGhpc2AgdGhlIGNsYXNoIHByb2R1Y2VzIG5vXG4gICAgICAgICAqIGBFU0xpbnRDaXJjdWxhckZpeGVzV2FybmluZ2AsIG9ubHkgYmVjYXVzZSB0aGlzIHJ1bGUgc2hpcHMgbm8gZml4ZXIgLS0gYm90aCBydWxlcyBhcmUgYGVycm9yYCwgc28gbm9cbiAgICAgICAgICogYXJyYW5nZW1lbnQgb2YgbWVtYmVycyBzYXRpc2ZpZXMgdGhlbSBib3RoLiBUaGUgYWxwaGFiZXRpY2FsIHNvcnQgaXMgdGhlIG9uZSBhbHJlYWR5IHJvbGxlZCBvdXRcbiAgICAgICAgICogYWNyb3NzIHRoZSBwbHVnaW5zIGNvbnN1bWluZyB0aGlzIGNvbmZpZywgc28gaXQga2VlcHMgcHJlY2VkZW5jZS4gUmUtZW5hYmxpbmcgdGhpcyBydWxlIHdvdWxkIG1lYW5cbiAgICAgICAgICogZ2l2aW5nIGBwZXJmZWN0aW9uaXN0L3NvcnQtY2xhc3Nlc2AgYSBtYXRjaGluZyBgZ3JvdXBzYCBvcHRpb24gYW5kIHJlb3JkZXJpbmcgZXZlcnkgY2xhc3MuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWNsYXNzLW1lbWJlci1vcmRlcic6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSByZXBvcnQgaXMgYG5ldyBFcnJvcigpLnN0YWNrYCwgd2hpY2ggY2FwdHVyZXMgYSBzdGFjayB0cmFjZSBhbmQgbmV2ZXIgc3VyZmFjZXMgaXRzIG1lc3NhZ2UsXG4gICAgICAgICAqIG9yIGBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKWAsIHdob3NlIG1lc3NhZ2UgaXMgb3B0aW9uYWwgcHJlY2lzZWx5IGJlY2F1c2UgdGhlIGNvbGxlY3RlZCBlcnJvcnNcbiAgICAgICAgICogY2FycnkgdGhlIGRldGFpbC4gVGhlIHJ1bGUgY2Fubm90IHRlbGwgZWl0aGVyIGZyb20gYW4gZXJyb3IgdGhhdCBpcyBhY3R1YWxseSB0aHJvd24gYXQgYSB1c2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vZXJyb3ItbWVzc2FnZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBzdHlsZSBmb3IgYG5vZGU6cGF0aGAgaXMgYSBkZWZhdWx0IGltcG9ydCwgYnV0IHRoaXMgY29kZWJhc2UgaW1wb3J0cyBpdHMgbWVtYmVycyBieSBuYW1lXG4gICAgICAgICAqIHRocm91Z2hvdXQsIGNvbnNpc3RlbnRseSB3aXRoIGV2ZXJ5IG90aGVyIGBub2RlOmAgbW9kdWxlIGl0IHVzZXMuIENvbmZpZ3VyZSB0aGUgcnVsZSB0byBlbmZvcmNlIHRoZVxuICAgICAgICAgKiBzdHlsZSBhY3R1YWxseSBpbiB1c2UgcmF0aGVyIHRoYW4gYW5ub3RhdGUgMTcgc2l0ZXMgdGhhdCBhcmUgbm90IGdvaW5nIHRvIGNoYW5nZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2ltcG9ydC1zdHlsZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICAvLyBLZXllZCBieSB0aGUgVU5QUkVGSVhFRCBtb2R1bGUgbmFtZTogdGhlIHJ1bGUncyBvd24gdGFibGUgdXNlcyBgcGF0aGAsIHNvIGEgYG5vZGU6cGF0aGAga2V5IG5ldmVyIG1hdGNoZXMuXG4gICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICBuYW1lZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjb3VudHMgY29uc3RydWN0b3IgY2FsbHMgYW5kIGNvdW50cyB0aHJvdWdoIGFycmF5IGFuZCBvYmplY3QgbGl0ZXJhbHMsIHNvIGl0cyBkZWZhdWx0IG9mIDNcbiAgICAgICAgICogcmVwb3J0cyBvcmRpbmFyeSBjb21wb3NpdGlvbjogYFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignYm9vbScpKWAgaW5zaWRlIGFuIGFzc2VydGlvbiwgYSB0ZXN0IGZpeHR1cmVcbiAgICAgICAgICogYnVpbHQgYXMgYGNyZWF0ZVR5cGVJbmZvKHsgbWV0aG9kczogW2NyZWF0ZU1lbWJlckluZm8oeyAuLi4gfSldIH0pYCwgYHRoaXMuYWRkQ2hpbGQobmV3IEModGhpcy5hcHApKWBcbiAgICAgICAgICogaW5zaWRlIGEgcGFyYW1zIGJhZy4gUmFpc2luZyB0aGUgbGltaXQgYnkgb25lIGNsZWFycyBldmVyeSByZXBvcnQgaGVyZSB3aGlsZSBzdGlsbCBjYXRjaGluZyB0aGVcbiAgICAgICAgICogZ2VudWluZWx5IHVucmVhZGFibGUgbmVzdGluZyB0aGUgcnVsZSBpcyBmb3IuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9tYXgtbmVzdGVkLWNhbGxzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF4OiA0XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAndW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBQcm9wZXJ0eSBhbmQgbWVtYmVyIG5hbWVzIGFyZSBjaGVja2VkIHRvbywgc28gYW4gYWJicmV2aWF0aW9uIGNhbm5vdCBzdXJ2aXZlIGJ5IGxpdmluZyBvbiBhblxuICAgICAgICAgICAgICogb2JqZWN0IHJhdGhlciB0aGFuIGluIGEgdmFyaWFibGUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIHJ1bGUgaXMgcHVyZWx5IHN5bnRhY3RpYzogaXQgY2Fubm90IHRlbGwgYSBtZW1iZXIgd2UgZGVjbGFyZSBmcm9tIG9uZSBiZWxvbmdpbmcgdG8gYVxuICAgICAgICAgICAgICogZGVwZW5kZW5jeSwgYW5kIGl0IG9mZmVycyBubyBhdXRvZml4IGZvciBwcm9wZXJ0aWVzIChtZWFzdXJlZDogNjgxIGhpdHMsIDAgd2l0aCBhIGZpeGVyKS4gU2l0ZXNcbiAgICAgICAgICAgICAqIG5hbWluZyBhIGZvcmVpZ24gbWVtYmVyIC0tIGBEb21FbGVtZW50SW5mby5hdHRyYCwgYEV2YWxJbk9ic2lkaWFuUGFyYW1zLmZuYCwgYW5kIHRoZSBsaWtlIC0tIGFyZVxuICAgICAgICAgICAgICogdGhlcmVmb3JlIGltcG9zc2libGUgdG8gc2F0aXNmeSBhbmQgY2FycnkgYW4gaW5saW5lIGRpc2FibGUsIHNvIGV2ZXJ5dGhpbmcgc3RpbGwgcmVwb3J0ZWQgaXMgb3Vyc1xuICAgICAgICAgICAgICogdG8gcmVuYW1lLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFdoZW4gcmVuYW1pbmcgdGhlIHJlc3QsIG5vdGUgdGhhdCBgdHNjYCBhbG9uZSBpcyBOT1QgYSBzdWZmaWNpZW50IGdhdGU6IG9iamVjdC1saXRlcmFsIGtleXMgaW5cbiAgICAgICAgICAgICAqIGxvb3NlbHkgdHlwZWQgcG9zaXRpb25zIChgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBiYXRjaGVkQXJndW1lbnRzOiAuLi4gfV0pYCkgYXJlIG5vdCBjb250ZXh0dWFsbHlcbiAgICAgICAgICAgICAqIHR5cGVkLCBzbyBhIHJlbmFtZSBsZWF2ZXMgdGhlbSBiZWhpbmQgYW5kIGJyZWFrcyB0aGUgc3VpdGUgd2hlcmUgdGhlIHR5cGUgY2hlY2tlciBzZWVzIG5vdGhpbmcuXG4gICAgICAgICAgICAgKiBSZW5hbWUgaW4gc21hbGwgYmF0Y2hlcyB3aXRoIHRoZSBmdWxsIHRlc3QgcnVuIGluIHRoZSBsb29wLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBkaXNhYmxlZCByZXBsYWNlbWVudHMgYmVsb3cgYXJlIGVzdGFibGlzaGVkIHZvY2FidWxhcnkgcmF0aGVyIHRoYW4gYWJicmV2aWF0aW9ucyB0byBiZVxuICAgICAgICAgICAgICogZXhwYW5kZWQuIGBlbGAgaXMgZXhlbXB0IGJlY2F1c2UgT2JzaWRpYW4gbmFtZXMgZXZlcnkgZWxlbWVudCBtZW1iZXIgdGhhdCB3YXkgLS0gYGNvbnRhaW5lckVsYCxcbiAgICAgICAgICAgICAqIGBjb250ZW50RWxgLCBgaW5wdXRFbGAsIGBzZWxlY3RFbGAgLS0gc28gZXhwYW5kaW5nIG91cnMgdG8gYCpFbGVtZW50YCB3b3VsZCBsZWF2ZSBvdXIgY29tcG9uZW50c1xuICAgICAgICAgICAgICogcmVhZGluZyBpbmNvbnNpc3RlbnRseSBiZXNpZGUgdGhlIE9ic2lkaWFuIG9uZXMgdGhleSBzaXQgbmV4dCB0by4gRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBhbHNvXG4gICAgICAgICAgICAgKiBjb3ZlcnMgY29tcG91bmQgbmFtZXMsIHdoaWNoIGlzIDcyIHNpdGVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGVhY2ggbmVlZCBhbiBpbmxpbmUgZGlzYWJsZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBgcmVmYCBpcyBleGVtcHQgZm9yIHRoZSBzYW1lIHJlYXNvbjogYEFzeW5jRXZlbnRSZWZgIGlzIHRoZSBhc3luYyBjb3VudGVycGFydCBvZiBPYnNpZGlhbidzXG4gICAgICAgICAgICAgKiBgRXZlbnRSZWZgLCBoYW5kZWQgdG8gdGhlIHNhbWUgYG9mZnJlZmAgLyBgcmVnaXN0ZXJFdmVudGAgc2hhcGVzLCBzbyB0aGUgdHdvIG5hbWVzIGhhdmUgdG8gbWF0Y2hcbiAgICAgICAgICAgICAqIHRvIHJlYWQgYXMgYSBwYWlyLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjaGVja1Byb3BlcnRpZXM6IHRydWUsXG4gICAgICAgICAgICByZXBsYWNlbWVudHM6IHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICogYGF0dHJgIC8gYGF0dHJzYCBhcmUgT2JzaWRpYW4ncyBvd246IGBjcmVhdGVFbCgnYScsIHsgYXR0cjogeyAuLi4gfSB9KWAgdGFrZXMgdGhlbSBieSB0aG9zZVxuICAgICAgICAgICAgICAgKiBuYW1lcyBvbiBgRG9tRWxlbWVudEluZm9gLCBzbyBvdXJzIGhhdmUgdG8gbWF0Y2ggdG8gYmUgcGFzc2VkIHRocm91Z2guIGBwcm9wc2AgaXMgdGhlXG4gICAgICAgICAgICAgICAqIHVuaXZlcnNhbCBjb21wb25lbnQgdm9jYWJ1bGFyeSwgZXhlbXB0IGZvciB0aGUgc2FtZSByZWFzb24gYHBhcmFtc2AgaXMuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBhdHRyOiBmYWxzZSxcbiAgICAgICAgICAgICAgYXR0cnM6IGZhbHNlLFxuICAgICAgICAgICAgICBkZXY6IGZhbHNlLFxuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgKiBFdmVyeSBgZGlyYCBoZXJlIGlzIGEgZmlsZXN5c3RlbSBkaXJlY3RvcnksIG5ldmVyIGEgZGlyZWN0aW9uLCBzbyB0aGUgcnVsZSBpcyBuYXJyb3dlZCB0byB0aGVcbiAgICAgICAgICAgICAgICogb25lIGV4cGFuc2lvbiByYXRoZXIgdGhhbiBsZWZ0IG9mZmVyaW5nIGEgY2hvaWNlIGl0IGNhbm5vdCBtYWtlLlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gVGhpcyBpcyB0aGUgcnVsZSdzIG93biByZXBsYWNlbWVudCBrZXksIHdoaWNoIGhhcyB0byBiZSBzcGVsbGVkIHRoZSB3YXkgdGhlIHJ1bGUgcmVhZHMgaXQuXG4gICAgICAgICAgICAgIGRpcjoge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2M6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2NzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZWw6IGZhbHNlLFxuICAgICAgICAgICAgICBlbnY6IGZhbHNlLFxuICAgICAgICAgICAgICBsaWI6IGZhbHNlLFxuICAgICAgICAgICAgICBwYXJhbXM6IGZhbHNlLFxuICAgICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZjogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZnM6IGZhbHNlLFxuICAgICAgICAgICAgICBzcmM6IGZhbHNlLFxuICAgICAgICAgICAgICB1dGlsOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXRpbHM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmV4dCBzaXggcnVsZXMgYWxsIHN1Z2dlc3QgYW4gQVBJIG5ld2VyIHRoYW4gdGhpcyBwcm9qZWN0J3MgYGxpYmAgKGBFUzIwMjJgKSwgc28gZm9sbG93aW5nIGFueSBvZlxuICAgICAgICAgKiB0aGVtIGZhaWxzIHRvIGNvbXBpbGUuIFRoZSB0YXJnZXQgaXMgbm90IGFyYml0cmFyeTogYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcvbWV0YWRhdGEuanNvbmBcbiAgICAgICAgICogcmVjb3JkcyBgZWNtYVNjcmlwdFZlcnNpb246IFwiRVMyMDIyXCJgIGZvciBpbnN0YWxsZXIgMS4xLjksIHRoZSBvbGRlc3Qgb25lIHN0aWxsIGFibGUgdG8gcnVuIGN1cnJlbnRcbiAgICAgICAgICogT2JzaWRpYW4uIEVhY2ggaXMgb2ZmIGF0IHRoZSBjb25maWcgbGV2ZWwgcmF0aGVyIHRoYW4gYW5ub3RhdGVkIHBlciBzaXRlLCBiZWNhdXNlIG5vbmUgY2FuIGV2ZXIgYmVcbiAgICAgICAgICogc2F0aXNmaWVkIHdoaWxlIHRoYXQgZmxvb3IgaG9sZHMuIFJldmlzaXQgdGhlbSB0b2dldGhlciBpZiB0aGUgZmxvb3IgbW92ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBBcnJheSN0b1JldmVyc2VkYCBhbmQgYEFycmF5I3RvU29ydGVkYCBhcmUgRVMyMDIzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tYXJyYXktcmV2ZXJzZSc6ICdvZmYnLFxuICAgICAgICAndW5pY29ybi9uby1hcnJheS1zb3J0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIGBjb250aW51ZWAgaW5zaWRlIGEgbmVzdGVkIGxvb3AgaXMgb3JkaW5hcnksIHJlYWRhYmxlIGNvbnRyb2wgZmxvdyBoZXJlLiBUaGUgcnVsZSdzIHJlbWVkeSBpcyB0b1xuICAgICAgICAgKiBleHRyYWN0IGV2ZXJ5IHN1Y2ggbG9vcCBpbnRvIGl0cyBvd24gZnVuY3Rpb24sIHdoaWNoIHNwcmVhZHMgb25lIGNvaGVyZW50IHRyYXZlcnNhbCBhY3Jvc3MgdHdvXG4gICAgICAgICAqIGRlY2xhcmF0aW9ucyB3aXRob3V0IG1ha2luZyBhbnl0aGluZyBjbGVhcmVyLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tYnJlYWstaW4tbmVzdGVkLWxvb3AnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJ1bGUgY2Fubm90IHNlZSB0aHJvdWdoIGEgaG9pc3RlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgc28gaXQgdHJlYXRzIGEgYmluZGluZyB0aGF0IGEgbmVzdGVkXG4gICAgICAgICAqIGZ1bmN0aW9uIGFscmVhZHkgcmVhZCBhcyB1bnVzZWQgYmVmb3JlIHRoZSBleGl0LiBJbiBgcnVuV2l0aFRpbWVvdXRgIHRoYXQgaXMgYGxldCBpc0NvbXBsZXRlZGAsIHdoaWNoXG4gICAgICAgICAqIGBydW4oKWAgYW5kIGBpbm5lclRpbWVvdXQoKWAgYm90aCB0b3VjaCB3aGlsZSB0aGUgYFByb21pc2UucmFjZWAgYWJvdmUgdGhlIGV4aXQgaXMgc3RpbGwgcnVubmluZyAtLVxuICAgICAgICAgKiBtb3ZpbmcgdGhlIGRlY2xhcmF0aW9uIHBhc3QgdGhlIGV4aXQsIGFzIHRoZSBydWxlIGFza3MsIHdvdWxkIGxlYXZlIHRob3NlIHJlYWRzIGluIHRoZSB0ZW1wb3JhbCBkZWFkXG4gICAgICAgICAqIHpvbmUuIEl0cyBvd24gZml4ZXIgZGVjbGluZXMgYWxsIDE1IHNpdGVzIGZvciB0aGUgc2FtZSByZWFzb24gaXQgY2Fubm90IHByb3ZlIHRoZW0gc2FmZSwgc28gZm9sbG93aW5nXG4gICAgICAgICAqIHRoZSBydWxlIGlzIGVudGlyZWx5IG1hbnVhbC4gV2hhdCBpcyBsZWZ0IGFmdGVyIHRoYXQgaXMgcGxhY2VtZW50IHN0eWxlOiB0aGUgcmVtYWluaW5nIHJlcG9ydHMgYXJlXG4gICAgICAgICAqIG5hbWVkIGNvbnN0YW50cyBhbmQgZGVyaXZlZCBwYXRocyBkZWxpYmVyYXRlbHkgZ3JvdXBlZCBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rpb24sIGFuZCBwdXNoaW5nIGVhY2ggb25lXG4gICAgICAgICAqIGJlbG93IHRoZSBmaXJzdCBndWFyZCBzcGxpdHMgYSBjb2hlc2l2ZSBibG9jayB0byBubyBiZW5lZml0LiBUaGUgdGhyZWUgc2l0ZXMgd2hlcmUgZGVmZXJyaW5nIHNraXBwZWRcbiAgICAgICAgICogcmVhbCB3b3JrIChhIHNlY29uZCBgY29tcHV0ZU5lZWRlZEV4cG9zdXJlYCB3YWxrLCBhIGB0b0pzb25gIHNlcmlhbGl6YXRpb24sIGFuIGBlbnN1cmVMZkVuZGluZ3NgIHBhc3MpXG4gICAgICAgICAqIHdlcmUgYXBwbGllZCBieSBoYW5kIGluc3RlYWQuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1kZWNsYXJhdGlvbnMtYmVmb3JlLWVhcmx5LWV4aXQnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogQXNzaWduaW5nIG9udG8gdGhlIGdsb2JhbCBvYmplY3QgaXMgaG93IHRoaXMgbGlicmFyeSBpbnN0YWxscyBhbmQgcmVzdG9yZXMgdGVzdCBkb3VibGVzLCBhbmQgaG93IGFcbiAgICAgICAgICogZmV3IE9ic2lkaWFuLXJ1bnRpbWUgZ2xvYmFscyBhcmUgcmVhY2hlZCBhdCBhbGwuIFRoZSBydWxlIGNhbm5vdCBzZXBhcmF0ZSB0aGF0IGZyb20gYW4gYWNjaWRlbnRhbFxuICAgICAgICAgKiBnbG9iYWwgd3JpdGUsIGFuZCBpdCBoYXMgbm8gZml4ZXIuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1nbG9iYWwtb2JqZWN0LXByb3BlcnR5LWFzc2lnbm1lbnQnOiAnb2ZmJyxcbiAgICAgICAgLy8gYG51bGxgIGlzIGxvYWQtYmVhcmluZyBoZXJlOiBhbiBvcHRpb25hbCBjb2xsYWJvcmF0b3IgaXMgbW9kZWxsZWQgYXMgYSByZXF1aXJlZCBgbnVsbCB8IFhgIGZpZWxkIHJhdGhlciB0aGFuIGFuIG9wdGlvbmFsIGBYYCwgc28gYG51bGxgIGFuZCBgdW5kZWZpbmVkYCBhcmUgbm90IGludGVyY2hhbmdlYWJsZS5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJ1bGUncyBsaXN0IG9mIHN0YW5kYXJkIGBTeW1ib2xgIHByb3BlcnRpZXMgcHJlZGF0ZXMgZXhwbGljaXQgcmVzb3VyY2UgbWFuYWdlbWVudCwgc28gaXQgcmVwb3J0c1xuICAgICAgICAgKiBgU3ltYm9sLmRpc3Bvc2VgIGFuZCBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgYXMgbm9uLXN0YW5kYXJkLiBCb3RoIGFyZSBwYXJ0IG9mIHRoZSBsYW5ndWFnZSB0aGF0IHRoaXNcbiAgICAgICAgICogbGlicmFyeSBpcyBidWlsdCBvbiAtLSAxMTQgZmlsZXMgaGVyZSB1c2UgYHVzaW5nYCBkZWNsYXJhdGlvbnMsIGFuZCB0aGUgZGlzcG9zYWJsZSB0eXBlcyBhcmUgYVxuICAgICAgICAgKiBwdWJsaWMgcGFydCBvZiBpdHMgc3VyZmFjZSAtLSBzbyBhbGwgNTkgcmVwb3J0cyBhcmUgdGhlIHJ1bGUgYmVpbmcgb3V0IG9mIGRhdGUgcmF0aGVyIHRoYW4gYSBmaW5kaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tbm9uc3RhbmRhcmQtYnVpbHRpbi1wcm9wZXJ0aWVzJzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLW51bGwnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVHlwZVNjcmlwdCdzIGV4cGxpY2l0IGB0aGlzYCBwYXJhbWV0ZXIgKGBmdW5jdGlvbiBnZXQodGhpczogSG9sZGVyKSB7IHJldHVybiB0aGlzLnZhbHVlOyB9YCkgbWFrZXNcbiAgICAgICAgICogYHRoaXNgIG91dHNpZGUgYSBjbGFzcyBib3RoIGxlZ2FsIGFuZCB0eXBlLWNoZWNrZWQsIGJ1dCB0aGUgcnVsZSBpcyBzeW50YWN0aWMgYW5kIGZsYWdzIGl0IGlkZW50aWNhbGx5XG4gICAgICAgICAqIHRvIGEgZ2VudWluZWx5IHVuYm91bmQgYHRoaXNgLiBJdCBoYXMgbm8gb3B0aW9ucyAoYHNjaGVtYTogW11gKSBhbmQgbm8gZml4ZXIsIHNvIHRoZXJlIGlzIG5vIHdheSB0b1xuICAgICAgICAgKiBzZXBhcmF0ZSB0aGUgaWRpb20gZnJvbSB0aGUgYnVnIGl0IHRhcmdldHMuIE1vc3QgaGl0cyBoZXJlIHdlcmUgdHlwZWQgYHRoaXNgIHBhcmFtZXRlcnMgYW5kIHRlc3RzIHRoYXRcbiAgICAgICAgICogZGVsaWJlcmF0ZWx5IGFzc2VydCBgdGhpc2AgYmluZGluZy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXRoaXMtb3V0c2lkZS1vZi1jbGFzcyc6ICdvZmYnLFxuICAgICAgICAvLyBTYW1lIGNhbGwgYXMgaXRzIG9iamVjdCBjb3VudGVycGFydCBhYm92ZTogdGhlIGRlc3RydWN0dXJpbmcgZGVwdGggZmxhZ2dlZCBoZXJlIGlzIGRlbGliZXJhdGUgYW5kIHJlYWRzIHdlbGwuXG4gICAgICAgICd1bmljb3JuL25vLXVucmVhZGFibGUtYXJyYXktZGVzdHJ1Y3R1cmluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcmVwb3J0cyBhcmUgYWxsIGBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KC4uLikpYCwgd2hpY2ggcmVhZHMgZXhhY3RseSBhcyBpbnRlbmRlZC5cbiAgICAgICAgICogSG9pc3RpbmcgdGhlIGF3YWl0ZWQgY2FsbCBpbnRvIGEgdmFyaWFibGUgbmFtZWQgYWZ0ZXIgdGhlIGxvb3AncyBvd24gaXRlcmFibGUgYWRkcyBhIGxpbmUgYW5kIGEgbmFtZVxuICAgICAgICAgKiB3aXRob3V0IGFkZGluZyBpbmZvcm1hdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXVucmVhZGFibGUtZm9yLW9mLWV4cHJlc3Npb24nOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIG5lc3RlZCBkZXN0cnVjdHVyaW5nIHRoaXMgZmxhZ3MgaXMgZGVsaWJlcmF0ZSBoZXJlIGFuZCByZWFkcyB3ZWxsOiBwdWxsaW5nIGEgbWVtYmVyIG91dCBvZiBhXG4gICAgICAgICAqIHBhcmFtcyBiYWcgaW4gb25lIHN0ZXAgc3RhdGVzIHdoZXJlIHRoZSB2YWx1ZSBjb21lcyBmcm9tLCB3aGljaCBhIHNlY29uZCBpbnRlcm1lZGlhdGUgYmluZGluZyBvbmx5XG4gICAgICAgICAqIG9ic2N1cmVzLiBUaGUgcnVsZSB0YWtlcyBubyBvcHRpb25zLCBzbyB0aGVyZSBpcyBubyB3YXkgdG8ga2VlcCB0aGUgZGVwdGggbGltaXQgaXQgaXMgcmVhbGx5IGFmdGVyXG4gICAgICAgICAqIHdoaWxlIGFsbG93aW5nIHRoZSBzaGFwZSBpbiB1c2UuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby11bnJlYWRhYmxlLW9iamVjdC1kZXN0cnVjdHVyaW5nJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIGBjaGVja0FyZ3VtZW50c2Agc3RyaXBzIGB1bmRlZmluZWRgIGFyZ3VtZW50cywgd2hpY2ggc2hpZnRzIHRoZSByZW1haW5pbmcgcG9zaXRpb25hbCBhcmd1bWVudHMgaW50b1xuICAgICAgICAgKiB0aGUgd3Jvbmcgc2xvdHM7IGBjaGVja0Fycm93RnVuY3Rpb25Cb2R5YCByZW1vdmVzIGByZXR1cm4gdW5kZWZpbmVkO2AgZnJvbSBhcnJvdyBib2RpZXMgd2hvc2Ugb3RoZXJcbiAgICAgICAgICogYnJhbmNoZXMgZG8gcmV0dXJuIGEgdmFsdWUsIHdoaWNoIHZpb2xhdGVzIHRoZSBgbm9JbXBsaWNpdFJldHVybnNgIHNldHRpbmcgdGhpcyBwcm9qZWN0IGNvbXBpbGVzIHdpdGguXG4gICAgICAgICAqIFRoZSBydWxlJ3MgcmVtYWluaW5nIGNhc2VzIChhIGJhcmUgYHVuZGVmaW5lZGAgaW5pdGlhbGl6ZXIsIGByZXR1cm4gdW5kZWZpbmVkO2AgaW4gYSB2b2lkIGZ1bmN0aW9uKVxuICAgICAgICAgKiBhcmUgc3RpbGwgd29ydGggaGF2aW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdXNlbGVzcy11bmRlZmluZWQnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjaGVja0FyZ3VtZW50czogZmFsc2UsXG4gICAgICAgICAgICBjaGVja0Fycm93RnVuY3Rpb25Cb2R5OiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gYEFycmF5LmZyb21Bc3luY2AgaXMgRVMyMDI0LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItYXJyYXktZnJvbS1hc3luYyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSBoaXQgaGVyZSBpcyBhIHByb21pc2UgZGVsaWJlcmF0ZWx5IE5PVCBhd2FpdGVkLCBhbmQgYGF3YWl0YCB3b3VsZCBjaGFuZ2Ugd2hhdCB0aGUgY29kZSBkb2VzLlxuICAgICAgICAgKiBgcmVzdWx0LmNhdGNoKHRocm93RGVsYXllZClgIGluIGBhc3luYy1ldmVudHMudHNgIGlzIHRoZSBmaXJlLWFuZC1mb3JnZXQgZXJyb3IgcGF0aCB0aGUgbW9kdWxlIGlzXG4gICAgICAgICAqIGJ1aWx0IG9uOyB0aGUgcmVzdCBob2xkIGFuIHVucmVzb2x2ZWQgcHJvbWlzZSBhbmQgYXNzZXJ0IHRoZSBjYWxsYmFjayBoYXMgbm90IGZpcmVkIHlldCwgc28gYXdhaXRpbmdcbiAgICAgICAgICogd291bGQgaGFuZyB0aGUgdGVzdCBvciBpbnZlcnQgd2hhdCBpdCBwcm92ZXMuIFRoZSBydWxlIGNhbm5vdCB0ZWxsIGEgZm9yZ290dGVuIGBhd2FpdGAgZnJvbSBhblxuICAgICAgICAgKiBpbnRlbnRpb25hbCBvbmUsIGFuZCB0aGlzIGNvZGViYXNlIHNjaGVkdWxlcyBmaXJlLWFuZC1mb3JnZXQgd29yayBhcyBhIGNvcmUgcGF0dGVybi5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1hd2FpdCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBbGwgdGhyZWUgcmVwb3J0cyByZWFkIEhUTUwgb3V0IChgY29uc3QgaHRtbCA9IGVsLmlubmVySFRNTGApLCBuZXZlciB3cml0ZSBpdCwgYW5kIGZvciBhIHJlYWRcbiAgICAgICAgICogYGdldEhUTUwoKWAgcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcuIFdoYXQgaXQgYWRkcyBpcyBzaGFkb3ctcm9vdCBzZXJpYWxpemF0aW9uIG9wdGlvbnMgdGhhdCBub3RoaW5nXG4gICAgICAgICAqIGhlcmUgYXNrcyBmb3IsIGluIGV4Y2hhbmdlIGZvciBhIG11Y2ggbmV3ZXIgcGxhdGZvcm0gZmxvb3IgdGhhbiBgaW5uZXJIVE1MYCAtLSBhIGJhZCB0cmFkZSBmb3IgYVxuICAgICAgICAgKiBsaWJyYXJ5IHRoYXQgaGFzIHRvIHJ1biBvbiB3aGF0ZXZlciBDaHJvbWl1bSB0aGUgaW5zdGFsbGVkIE9ic2lkaWFuIHNoaXBzLiBUaGUgcnVsZSdzIG90aGVyIGhhbGYsXG4gICAgICAgICAqIHJld3JpdGluZyB3cml0ZXMgdG8gdGhlIHNhbml0aXppbmcgYHNldEhUTUwoKWAsIHdvdWxkIGJlIHdvcnRoIGhhdmluZzsgaXQganVzdCBuZXZlciBmaXJlcyBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWh0bWwtbWV0aG9kcyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBPYnNpZGlhbidzIGBDb21wb25lbnRgIGhhcyBpdHMgb3duIGByZW1vdmVDaGlsZChjb21wb25lbnQpYCBmb3IgdGhlIGNvbXBvbmVudCBsaWZlY3ljbGUsIHVucmVsYXRlZFxuICAgICAgICAgKiB0byBgTm9kZSNyZW1vdmVDaGlsZGAuIFRoZSBydWxlIG1hdGNoZXMgb24gdGhlIG1ldGhvZCBuYW1lIGFsb25lLCBzbyBldmVyeSByZXBvcnQgaGVyZSBpcyBhXG4gICAgICAgICAqIGNvbXBvbmVudCBiZWluZyB1bmxvYWRlZCwgYW5kIGZvbGxvd2luZyB0aGUgYWR2aWNlIGNhbGxzIGEgYHJlbW92ZSgpYCB0aGF0IGRvZXMgbm90IGV4aXN0IC0tIHdoaWNoXG4gICAgICAgICAqIGlzIHdoYXQgYHRzY2Agc2FpZCB3aGVuIHRoZSBmaXhlciB3YXMgbGV0IGxvb3NlIG9uIHRoZW0uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZG9tLW5vZGUtcmVtb3ZlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIERpcmVjdGx5IGNvbnRyYWRpY3RzIGBvYnNpZGlhbm1kL25vLWdsb2JhbC10aGlzYDogdGhpcyBydWxlIHJld3JpdGVzIGB3aW5kb3cueGAgdG8gYGdsb2JhbFRoaXMueGAsIGFuZFxuICAgICAgICAgKiB0aGF0IG9uZSBmb3JiaWRzIGBnbG9iYWxUaGlzYCBvdXRyaWdodC4gV2l0aCBib3RoIGVuYWJsZWQsIGAtLWZpeGAgYXBwbGllcyBvbmUgYW5kIHRoZW4gdGhlIG90aGVyXG4gICAgICAgICAqIHJldmVydHMgaXQsIHdoaWNoIEVTTGludCByZXBvcnRzIGFzIGBFU0xpbnRDaXJjdWxhckZpeGVzV2FybmluZ2AgYWNyb3NzIDI5IGZpbGVzLiBPYnNpZGlhbidzIG93blxuICAgICAgICAgKiBndWlkYW5jZSB3aW5zIGluIGFuIE9ic2lkaWFuIGxpYnJhcnksIHNvIHRoaXMgaXMgdGhlIHJ1bGUgdGhhdCBnaXZlcyB3YXkuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZ2xvYmFsLXRoaXMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogSXRlcmF0b3IgaGVscGVycyAoYEl0ZXJhdG9yI3NvbWVgIGFuZCBmcmllbmRzKSBhcmUgRVMyMDI1LCBzbyB0aGlzIGJlbG9uZ3Mgd2l0aCBgbm8tYXJyYXktcmV2ZXJzZWAgYW5kXG4gICAgICAgICAqIGBuby1hcnJheS1zb3J0YCBhYm92ZTogdGhlIHNhbWUgRVMyMDIyIGZsb29yIHJ1bGVzIGl0IG91dCwgYW5kIHRoZSBzYW1lIG5vdGUgYXBwbGllcyAtLSByZXZpc2l0IHRoZW1cbiAgICAgICAgICogdG9nZXRoZXIgaWYgdGhhdCBmbG9vciBtb3Zlcy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1pdGVyYXRvci1oZWxwZXJzJzogJ29mZicsXG4gICAgICAgIC8vIGBJdGVyYXRvciN0b0FycmF5YCBpcyBFUzIwMjUuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1pdGVyYXRvci10by1hcnJheSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgc3VnZ2VzdGVkIHJlcGxhY2VtZW50IGlzIGBNYXRoLnRydW5jKE51bWJlcih4KSlgLCB3aGljaCBpcyBsb25nZXIgdGhhbiBgcGFyc2VJbnQoeCwgMTApYCBhbmQgbm9cbiAgICAgICAgICogY2xlYXJlciwgYW5kIGl0IGlzIG5vdCB0aGUgc2FtZSBmdW5jdGlvbjogYHBhcnNlSW50YCBzdG9wcyBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgY2Fubm90IGJlIHBhcnRcbiAgICAgICAgICogb2YgdGhlIG51bWJlciwgc28gYCcxMmFiYydgIHBhcnNlcyB0byAxMiB3aGVyZSBgTnVtYmVyYCB5aWVsZHMgYE5hTmAuIFR3byBvZiB0aGUgcmVwb3J0cyByZWFkIHVzZXJcbiAgICAgICAgICogaW5wdXQgdGhyb3VnaCB0aGF0IGRpZmZlcmVuY2UgLS0gdGhlIHBhZ2UtanVtcCBib3ggaW4gdGhlIERhdGF2aWV3IGhlbHBlciwgYW5kXG4gICAgICAgICAqIGBOdW1iZXJDb21wb25lbnQudmFsdWVGcm9tU3RyaW5nYCwgd2hvc2UgbGVuaWVudCBwYXJzZSBpcyBwYXJ0IG9mIGEgcHVibGlzaGVkIGNvbXBvbmVudCdzIGJlaGF2aW9yLlxuICAgICAgICAgKiBUaGUgcmVzdCBwYXJzZSBtYWNoaW5lLWdlbmVyYXRlZCBzdHJpbmdzLCB3aGVyZSB0aGUgdHdvIGFncmVlIGJ1dCB0aGUgc2hvcnRlciBzcGVsbGluZyBzdGlsbCB3aW5zLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLW51bWJlci1jb2VyY2lvbic6ICdvZmYnLFxuICAgICAgICAvLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBpcyBFUzIwMjQuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1wcm9taXNlLXdpdGgtcmVzb2x2ZXJzJzogJ29mZicsXG4gICAgICAgIC8vIGBTZXQjdW5pb25gIGFuZCBmcmllbmRzIGFyZSBFUzIwMjUuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1zZXQtbWV0aG9kcyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSByYW5rcyBvcGVyYW5kcyBieSBzeW50YWN0aWMgc2hhcGUsIG5vdCBjb3N0LCBzbyBldmVyeSByZXBvcnQgaGVyZSBzd2FwcyBvbmUgcHJvcGVydHkgcmVhZFxuICAgICAgICAgKiBhaGVhZCBvZiBhbm90aGVyIGFuZCBidXlzIG5vdGhpbmcuIEl0cyBvd24gbWVzc2FnZSBjb25jZWRlcyBpdCBjYW5ub3QgY2hlY2sgdGhlIHBhcnQgdGhhdCBtYXR0ZXJzIC0tXG4gICAgICAgICAqIFwiYWZ0ZXIgdmVyaWZ5aW5nIHNob3J0LWNpcmN1aXQgYmVoYXZpb3JcIiAtLSBhbmQgb25lIHJlcG9ydCBzaXRzIGRpcmVjdGx5IHVuZGVyIGEgY29tbWVudCByZWNvcmRpbmdcbiAgICAgICAgICogdGhhdCB0aGUgb3BlcmFuZHMgY2hhbmdlIGluc2lkZSBhIGByZW5hbWVgIGV2ZW50IGhhbmRsZXIsIHdoaWNoIGlzIHdoZXJlIG9yZGVyIHN0b3BzIGJlaW5nIGZyZWUuXG4gICAgICAgICAqIFRoZSBjdXJyZW50IG9yZGVycyBhbHNvIGNhcnJ5IGludGVudDogYSBudWxsIGd1YXJkIGJlZm9yZSB0aGUgdXNlIGl0IGd1YXJkcywgYW5kIHRoZSBjb25kaXRpb24gYmVpbmdcbiAgICAgICAgICogcmVwb3J0ZWQgYmVmb3JlIHRoZSBzdGF0ZSBpdCBjb250cmFkaWN0cy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1zaW1wbGUtY29uZGl0aW9uLWZpcnN0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIGBVUkwuY2FuUGFyc2VgIHJlcXVpcmVzIE5vZGUgMTguMTcsIHdlbGwgYWJvdmUgdGhlIE5vZGUgMTYuMTYuMCBmbG9vciB0aGF0IHNoaXBwZWQgc291cmNlIHRhcmdldHNcbiAgICAgICAgICogKHNlZSBgbWluaW11bU5vZGVWZXJzaW9uYCBiZWxvdykuIFRoZSBydWxlIGNhbiB0aGVyZWZvcmUgbmV2ZXIgYmUgc2F0aXNmaWVkIGhlcmUsIHNvIGl0IGlzIG9mZiBhdCB0aGVcbiAgICAgICAgICogY29uZmlnIGxldmVsIHJhdGhlciB0aGFuIGFubm90YXRlZCBhdCBlYWNoIGNhbGwgc2l0ZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci11cmwtY2FuLXBhcnNlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEV2ZXJ5IGFycmF5IHJlcG9ydGVkIGhlcmUgaG9sZHMgc3RyaW5ncywgd2hlcmUgdGhlIGRlZmF1bHQgc29ydCBpcyBhbHJlYWR5IHdlbGwgZGVmaW5lZCBhbmQgY29ycmVjdC5cbiAgICAgICAgICogQWRkaW5nIHRoZSBjb21wYXJhdG9yIHRoZSBydWxlIGFza3MgZm9yIHdvdWxkIG1lYW4gY2hvb3NpbmcgYmV0d2VlbiBjb2RlLXVuaXQgYW5kIGxvY2FsZSBvcmRlcmluZyxcbiAgICAgICAgICogc28gZm9sbG93aW5nIGl0IHdvdWxkIENIQU5HRSB0aGUgc29ydCByYXRoZXIgdGhhbiBkb2N1bWVudCBpdC4gVGhlIHJ1bGUgZWFybnMgaXRzIHBsYWNlIG9uIG51bWVyaWNcbiAgICAgICAgICogYXJyYXlzOyBpdCBkb2VzIG5vdCBoYXZlIGFueSBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcmVxdWlyZS1hcnJheS1zb3J0LWNvbXBhcmUnOiAnb2ZmJyxcbiAgICAgICAgLy8gVGhlIGNvZGViYXNlIGFscmVhZHkgc3BlbGxzIGVuY29kaW5ncyB0aGUgd2F5IHRoZSBFbmNvZGluZyBTdGFuZGFyZCBkb2VzIChgdXRmLThgKSwgd2hpY2ggaXMgYWxzbyB3aGF0IGBUZXh0RGVjb2RlcmAgcmVwb3J0cy4gS2VlcCB0aGUgcnVsZSBlbmZvcmNpbmcgY29uc2lzdGVuY3ksIGp1c3QgaW4gdGhlIGRpcmVjdGlvbiBhbHJlYWR5IGluIHVzZS5cbiAgICAgICAgJ3VuaWNvcm4vdGV4dC1lbmNvZGluZy1pZGVudGlmaWVyLWNhc2UnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3aXRoRGFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQnVpbGQvbGludC92ZXJzaW9uIHNjcmlwdHMgYXJlIENMSSBlbnRyeSBwb2ludHMsIHdoZXJlIGV4aXRpbmcgd2l0aCBhIHN0YXR1cyBjb2RlIGlzIHRoZSBpbnRlcmZhY2UuXG4gICAgICBmaWxlczogY29udGV4dC5zY3JpcHRGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICd1bmljb3JuL25vLXByb2Nlc3MtZXhpdCc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAvKlxuICAgICAgICogQSBtb2R1bGUtbGV2ZWwgZml4dHVyZSBhc3NpZ25lZCBmcm9tIGBiZWZvcmVFYWNoYCBpcyB0aGUgc3RhbmRhcmQgdGVzdCBzaGFwZTpcbiAgICAgICAqXG4gICAgICAgKiAgIGxldCBhcHA6IEFwcDtcbiAgICAgICAqICAgYmVmb3JlRWFjaCgoKSA9PiB7IGFwcCA9IEFwcC5jcmVhdGVDb25maWd1cmVkX18oKTsgfSk7XG4gICAgICAgKlxuICAgICAgICogVGhlIHJ1bGUgaXMgcmlnaHQgYWJvdXQgcHJvZHVjdGlvbiBjb2RlIC0tIG1vZHVsZSBzdGF0ZSByZWFzc2lnbmVkIGZyb20gaW5zaWRlIGEgZnVuY3Rpb24gaXMgd29ydGhcbiAgICAgICAqIGZsYWdnaW5nLCBhbmQgdGhlIGZpeCBpcyB0byBob2xkIGl0IGluIGEgYGNvbnN0YCBvYmplY3QgaW5zdGVhZC4gSW4gdGVzdHMgdGhhdCB3b3VsZCByZXBsYWNlIGV2ZXJ5XG4gICAgICAgKiBgYXBwYCB3aXRoIGBTVEFURS5hcHBgIGFuZCBtYWtlIGVhY2ggZmlsZSByZWFkIHdvcnNlIGZvciBubyBnYWluLCBzaW5jZSB0aGUgZml4dHVyZSBpcyByZXNldCBwZXIgdGVzdFxuICAgICAgICogYnkgZGVzaWduLiBTY29wZWQgb2ZmIGhlcmUgcmF0aGVyIHRoYW4gZGlzYWJsZWQgb3V0cmlnaHQsIHNvIHByb2R1Y3Rpb24gY29kZSBrZWVwcyB0aGUgY2hlY2suXG4gICAgICAgKi9cbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFR3byBzaGFwZXMgaGVyZSBjYW5ub3QgZm9sbG93IHRoZSBhZHZpY2UuIEEgaGVscGVyIGRlZmluZWQgaW5zaWRlIGFuIGBldmFsSW5PYnNpZGlhbmAgY2FsbGJhY2tcbiAgICAgICAgICogY2Fubm90IGJlIGhvaXN0ZWQgYXQgYWxsOiB0aGUgY2FsbGJhY2sgaXMgc2VyaWFsaXplZCB3aXRoIGB0b1N0cmluZygpYCBhbmQgcnVucyBpbnNpZGUgT2JzaWRpYW4sIHNvXG4gICAgICAgICAqIGFueXRoaW5nIGxlZnQgYmVoaW5kIGluIHRoZSBtb2R1bGUgc2NvcGUgaXMgc2ltcGx5IG5vdCB0aGVyZS4gQW5kIGEgcGVyLXN1aXRlIGZhY3RvcnlcbiAgICAgICAgICogKGBjcmVhdGVDb21wb25lbnRgLCBgY3JlYXRlTW9ja1BsdWdpbmApIGlzIGRlbGliZXJhdGVseSBsb2NhbCwga2VlcGluZyBlYWNoIHN1aXRlJ3MgZml4dHVyZSBuZXh0IHRvXG4gICAgICAgICAqIHRoZSBhc3NlcnRpb25zIHRoYXQgcmVhZCBpdC4gUHJvZHVjdGlvbiBjb2RlIGtlZXBzIHRoZSBjaGVjay5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBIHRlc3QgYmluZGluZyBpcyBuYW1lZCBhZnRlciB0aGUgdGhpbmcgaXQgY2FwdHVyZXMsIG5vdCBhZnRlciB3aGF0IGl0IGRvZXM6IGBjcmVhdGVFbGVtZW50U3B5YFxuICAgICAgICAgKiBob2xkcyB0aGUgc3B5IG9uIGBjcmVhdGVFbGVtZW50YCwgYW5kIGBjcmVhdGVQcm9ncmFtT3B0aW9uc2AgaG9sZHMgdGhlIG9wdGlvbnMgYGNyZWF0ZVByb2dyYW1gIHdhc1xuICAgICAgICAgKiBjYWxsZWQgd2l0aC4gVGhlIHZlcmIgYmVsb25ncyB0byB0aGUgbmFtZSBiZWluZyByZWZlcmVuY2VkLCBzbyB0aGUgcnVsZSByZWFkcyBpdCBhcyBhIGZ1bmN0aW9uIG5hbWVcbiAgICAgICAgICogdGhhdCBpcyBub3QgYSBmdW5jdGlvbi4gTGVmdCBvbiBmb3IgcHJvZHVjdGlvbiBjb2RlLCB3aGVyZSB0aGUgY29tcGxhaW50IGlzIHRoZSByaWdodCBvbmUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1ub24tZnVuY3Rpb24tdmVyYi1wcmVmaXgnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tdG9wLWxldmVsLWFzc2lnbm1lbnQtaW4tZnVuY3Rpb24nOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbm8tbWFnaWMtbnVtYmVycyAtLSBXZSBkaXNhYmxlZCBtYWdpYyBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhbGwgb3ZlciB0aGUgY29uZmlncy4gKi9cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -1,4 +1,9 @@
1
1
  /// <reference path="../../../library.d.mts" />
2
+ export * as 'manifest-description' from './manifest-description.mjs';
3
+ export * as 'manifest-helpers' from './manifest-helpers.mjs';
4
+ export * as 'manifest-id' from './manifest-id.mjs';
5
+ export * as 'manifest-name' from './manifest-name.mjs';
6
+ export * as 'manifest-schema' from './manifest-schema.mjs';
2
7
  export * as 'no-async-callback-to-unsafe-return' from './no-async-callback-to-unsafe-return.mjs';
3
8
  export * as 'no-untrusted-input-events' from './no-untrusted-input-events.mjs';
4
9
  export * as 'no-unused-params-members' from './no-unused-params-members.mjs';
@@ -41,6 +41,11 @@ function ensureBrowserProcess() {
41
41
  })();
42
42
  })();
43
43
 
44
+ import * as manifest_description from "./manifest-description.mjs";
45
+ import * as manifest_helpers from "./manifest-helpers.mjs";
46
+ import * as manifest_id from "./manifest-id.mjs";
47
+ import * as manifest_name from "./manifest-name.mjs";
48
+ import * as manifest_schema from "./manifest-schema.mjs";
44
49
  import * as no_async_callback_to_unsafe_return from "./no-async-callback-to-unsafe-return.mjs";
45
50
  import * as no_untrusted_input_events from "./no-untrusted-input-events.mjs";
46
51
  import * as no_unused_params_members from "./no-unused-params-members.mjs";
@@ -54,6 +59,11 @@ import * as require_method_template from "./require-method-template.mjs";
54
59
  import * as require_super_call from "./require-super-call.mjs";
55
60
  import * as rule_tester_helper from "./rule-tester-helper.mjs";
56
61
  export {
62
+ manifest_description as "manifest-description",
63
+ manifest_helpers as "manifest-helpers",
64
+ manifest_id as "manifest-id",
65
+ manifest_name as "manifest-name",
66
+ manifest_schema as "manifest-schema",
57
67
  no_async_callback_to_unsafe_return as "no-async-callback-to-unsafe-return",
58
68
  no_untrusted_input_events as "no-untrusted-input-events",
59
69
  no_unused_params_members as "no-unused-params-members",
@@ -67,4 +77,4 @@ export {
67
77
  require_super_call as "require-super-call",
68
78
  rule_tester_helper as "rule-tester-helper"
69
79
  };
70
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICduby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuJyBmcm9tICcuL25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4udHMnO1xuZXhwb3J0ICogYXMgJ25vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMnIGZyb20gJy4vbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cy50cyc7XG5leHBvcnQgKiBhcyAnbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzJyBmcm9tICcuL25vLXVudXNlZC1wYXJhbXMtbWVtYmVycy50cyc7XG5leHBvcnQgKiBhcyAnbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcycgZnJvbSAnLi9uby11c2VkLXVuZGVyc2NvcmUtdmFyaWFibGVzLnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luJyBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnIGZyb20gJy4vcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaC50cyc7XG5leHBvcnQgKiBhcyAncHJlZmVyLW5vb3AtYXN5bmMnIGZyb20gJy4vcHJlZmVyLW5vb3AtYXN5bmMudHMnO1xuZXhwb3J0ICogYXMgJ3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJyBmcm9tICcuL3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzLnRzJztcbmV4cG9ydCAqIGFzICdyZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnIGZyb20gJy4vcmVxdWlyZS1jb21wb25lbnQtc3VmZml4LnRzJztcbmV4cG9ydCAqIGFzICdyZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZScgZnJvbSAnLi9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZS50cyc7XG5leHBvcnQgKiBhcyAncmVxdWlyZS1zdXBlci1jYWxsJyBmcm9tICcuL3JlcXVpcmUtc3VwZXItY2FsbC50cyc7XG5leHBvcnQgKiBhcyAncnVsZS10ZXN0ZXItaGVscGVyJyBmcm9tICcuL3J1bGUtdGVzdGVyLWhlbHBlci50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsWUFBWUEsd0NBQTBDO0FBQ3RELFlBQVlDLCtCQUFpQztBQUM3QyxZQUFZQyw4QkFBZ0M7QUFDNUMsWUFBWUMsa0NBQW9DO0FBQ2hELFlBQVlDLCtCQUFpQztBQUM3QyxZQUFZQywrQkFBaUM7QUFDN0MsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLDRDQUE4QztBQUMxRCxZQUFZQyw4QkFBZ0M7QUFDNUMsWUFBWUMsNkJBQStCO0FBQzNDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyx3QkFBMEI7IiwKICAibmFtZXMiOiBbIm5vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4iLCAibm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cyIsICJuby11bnVzZWQtcGFyYW1zLW1lbWJlcnMiLCAibm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyIsICJvYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luIiwgInBhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2giLCAicHJlZmVyLW5vb3AtYXN5bmMiLCAicmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMiLCAicmVxdWlyZS1jb21wb25lbnQtc3VmZml4IiwgInJlcXVpcmUtbWV0aG9kLXRlbXBsYXRlIiwgInJlcXVpcmUtc3VwZXItY2FsbCIsICJydWxlLXRlc3Rlci1oZWxwZXIiXQp9Cg==
80
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdtYW5pZmVzdC1kZXNjcmlwdGlvbicgZnJvbSAnLi9tYW5pZmVzdC1kZXNjcmlwdGlvbi50cyc7XG5leHBvcnQgKiBhcyAnbWFuaWZlc3QtaGVscGVycycgZnJvbSAnLi9tYW5pZmVzdC1oZWxwZXJzLnRzJztcbmV4cG9ydCAqIGFzICdtYW5pZmVzdC1pZCcgZnJvbSAnLi9tYW5pZmVzdC1pZC50cyc7XG5leHBvcnQgKiBhcyAnbWFuaWZlc3QtbmFtZScgZnJvbSAnLi9tYW5pZmVzdC1uYW1lLnRzJztcbmV4cG9ydCAqIGFzICdtYW5pZmVzdC1zY2hlbWEnIGZyb20gJy4vbWFuaWZlc3Qtc2NoZW1hLnRzJztcbmV4cG9ydCAqIGFzICduby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuJyBmcm9tICcuL25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4udHMnO1xuZXhwb3J0ICogYXMgJ25vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMnIGZyb20gJy4vbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cy50cyc7XG5leHBvcnQgKiBhcyAnbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzJyBmcm9tICcuL25vLXVudXNlZC1wYXJhbXMtbWVtYmVycy50cyc7XG5leHBvcnQgKiBhcyAnbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcycgZnJvbSAnLi9uby11c2VkLXVuZGVyc2NvcmUtdmFyaWFibGVzLnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luJyBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnIGZyb20gJy4vcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaC50cyc7XG5leHBvcnQgKiBhcyAncHJlZmVyLW5vb3AtYXN5bmMnIGZyb20gJy4vcHJlZmVyLW5vb3AtYXN5bmMudHMnO1xuZXhwb3J0ICogYXMgJ3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJyBmcm9tICcuL3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzLnRzJztcbmV4cG9ydCAqIGFzICdyZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnIGZyb20gJy4vcmVxdWlyZS1jb21wb25lbnQtc3VmZml4LnRzJztcbmV4cG9ydCAqIGFzICdyZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZScgZnJvbSAnLi9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZS50cyc7XG5leHBvcnQgKiBhcyAncmVxdWlyZS1zdXBlci1jYWxsJyBmcm9tICcuL3JlcXVpcmUtc3VwZXItY2FsbC50cyc7XG5leHBvcnQgKiBhcyAncnVsZS10ZXN0ZXItaGVscGVyJyBmcm9tICcuL3J1bGUtdGVzdGVyLWhlbHBlci50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsWUFBWUEsMEJBQTRCO0FBQ3hDLFlBQVlDLHNCQUF3QjtBQUNwQyxZQUFZQyxpQkFBbUI7QUFDL0IsWUFBWUMsbUJBQXFCO0FBQ2pDLFlBQVlDLHFCQUF1QjtBQUNuQyxZQUFZQyx3Q0FBMEM7QUFDdEQsWUFBWUMsK0JBQWlDO0FBQzdDLFlBQVlDLDhCQUFnQztBQUM1QyxZQUFZQyxrQ0FBb0M7QUFDaEQsWUFBWUMsK0JBQWlDO0FBQzdDLFlBQVlDLCtCQUFpQztBQUM3QyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMsNENBQThDO0FBQzFELFlBQVlDLDhCQUFnQztBQUM1QyxZQUFZQyw2QkFBK0I7QUFDM0MsWUFBWUMsd0JBQTBCO0FBQ3RDLFlBQVlDLHdCQUEwQjsiLAogICJuYW1lcyI6IFsibWFuaWZlc3QtZGVzY3JpcHRpb24iLCAibWFuaWZlc3QtaGVscGVycyIsICJtYW5pZmVzdC1pZCIsICJtYW5pZmVzdC1uYW1lIiwgIm1hbmlmZXN0LXNjaGVtYSIsICJuby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuIiwgIm5vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMiLCAibm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzIiwgIm5vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMiLCAib2JzaWRpYW4tZGV2LXV0aWxzLXBsdWdpbiIsICJwYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIiwgInByZWZlci1ub29wLWFzeW5jIiwgInJlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzIiwgInJlcXVpcmUtY29tcG9uZW50LXN1ZmZpeCIsICJyZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZSIsICJyZXF1aXJlLXN1cGVyLWNhbGwiLCAicnVsZS10ZXN0ZXItaGVscGVyIl0KfQo=