projen 0.98.32 → 0.98.34

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 (557) hide show
  1. package/.jsii +1906 -626
  2. package/lib/ai-instructions.js +2 -2
  3. package/lib/awscdk/auto-discover.js +5 -5
  4. package/lib/awscdk/awscdk-app-java.js +1 -1
  5. package/lib/awscdk/awscdk-app-py.js +1 -1
  6. package/lib/awscdk/awscdk-app-ts.js +1 -1
  7. package/lib/awscdk/awscdk-construct.js +2 -2
  8. package/lib/awscdk/awscdk-deps-java.js +1 -1
  9. package/lib/awscdk/awscdk-deps-js.js +1 -1
  10. package/lib/awscdk/awscdk-deps-py.js +1 -1
  11. package/lib/awscdk/awscdk-deps.js +1 -1
  12. package/lib/awscdk/cdk-config.js +4 -4
  13. package/lib/awscdk/cdk-tasks.js +1 -1
  14. package/lib/awscdk/integration-test.js +1 -1
  15. package/lib/awscdk/internal.d.ts +1 -2
  16. package/lib/awscdk/lambda-extension.js +1 -1
  17. package/lib/awscdk/lambda-function.js +2 -2
  18. package/lib/awscdk/private/feature-flags-v2.const.d.ts +2 -3
  19. package/lib/awscdk/private/feature-flags-v2.const.js +4 -5
  20. package/lib/build/build-workflow.js +6 -7
  21. package/lib/cdk/auto-discover-base.js +2 -2
  22. package/lib/cdk/construct-lib.js +1 -1
  23. package/lib/cdk/integration-test-base.js +1 -1
  24. package/lib/cdk/jsii-docgen.js +1 -1
  25. package/lib/cdk/jsii-project.js +1 -1
  26. package/lib/cdk8s/auto-discover.js +2 -2
  27. package/lib/cdk8s/cdk8s-app-py.js +1 -1
  28. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  29. package/lib/cdk8s/cdk8s-construct.js +1 -1
  30. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  31. package/lib/cdk8s/cdk8s-deps.js +1 -1
  32. package/lib/cdk8s/integration-test.js +1 -1
  33. package/lib/cdktf/cdktf-construct.js +1 -1
  34. package/lib/circleci/circleci.js +1 -1
  35. package/lib/cli/index.js +6 -3
  36. package/lib/component.js +1 -1
  37. package/lib/dependencies.js +1 -1
  38. package/lib/dev-env.js +1 -1
  39. package/lib/docker-compose/docker-compose-service.js +1 -1
  40. package/lib/docker-compose/docker-compose.js +1 -1
  41. package/lib/file.js +1 -1
  42. package/lib/gitattributes.js +1 -1
  43. package/lib/github/actions-provider.js +1 -1
  44. package/lib/github/auto-approve.js +1 -1
  45. package/lib/github/auto-merge.js +1 -1
  46. package/lib/github/auto-queue.js +1 -1
  47. package/lib/github/dependabot.js +1 -1
  48. package/lib/github/github-credentials.js +1 -1
  49. package/lib/github/github-project.js +1 -1
  50. package/lib/github/github.js +1 -1
  51. package/lib/github/merge-queue.js +1 -1
  52. package/lib/github/mergify.js +1 -1
  53. package/lib/github/pr-template.js +1 -1
  54. package/lib/github/private/util.d.ts +14 -0
  55. package/lib/github/private/util.js +20 -1
  56. package/lib/github/pull-request-backport.js +1 -1
  57. package/lib/github/pull-request-lint.js +1 -1
  58. package/lib/github/stale.js +1 -1
  59. package/lib/github/task-workflow-job.js +1 -1
  60. package/lib/github/task-workflow.js +1 -1
  61. package/lib/github/workflow-actions.js +1 -1
  62. package/lib/github/workflow-jobs.js +1 -1
  63. package/lib/github/workflow-steps.js +1 -1
  64. package/lib/github/workflows.js +1 -1
  65. package/lib/gitlab/configuration.js +1 -1
  66. package/lib/gitlab/gitlab-configuration.js +1 -1
  67. package/lib/gitlab/nested-configuration.js +1 -1
  68. package/lib/gitpod.js +1 -1
  69. package/lib/ignore-file.js +1 -1
  70. package/lib/ini.js +1 -1
  71. package/lib/java/java-project.js +1 -1
  72. package/lib/java/junit.js +1 -1
  73. package/lib/java/maven-compile.js +1 -1
  74. package/lib/java/maven-packaging.js +1 -1
  75. package/lib/java/maven-sample.js +1 -1
  76. package/lib/java/pom.js +2 -2
  77. package/lib/java/projenrc.js +1 -1
  78. package/lib/javascript/biome/biome-config.d.ts +126 -50
  79. package/lib/javascript/biome/biome-config.js +74 -39
  80. package/lib/javascript/biome/biome.js +1 -1
  81. package/lib/javascript/bundler.js +1 -1
  82. package/lib/javascript/eslint.js +1 -1
  83. package/lib/javascript/jest.js +4 -4
  84. package/lib/javascript/license-checker.js +1 -1
  85. package/lib/javascript/node-package.js +1 -1
  86. package/lib/javascript/node-project.d.ts +2 -2
  87. package/lib/javascript/node-project.js +3 -3
  88. package/lib/javascript/npm-config.js +1 -1
  89. package/lib/javascript/prettier.js +1 -1
  90. package/lib/javascript/projenrc.js +1 -1
  91. package/lib/javascript/typescript-config.js +2 -2
  92. package/lib/javascript/upgrade-dependencies.js +17 -9
  93. package/lib/javascript/yarnrc.js +1 -1
  94. package/lib/json-patch.js +1 -1
  95. package/lib/json.js +1 -1
  96. package/lib/license.js +1 -1
  97. package/lib/logger.js +1 -1
  98. package/lib/makefile.js +1 -1
  99. package/lib/object-file.js +1 -1
  100. package/lib/project-build.js +1 -1
  101. package/lib/project-tree.js +1 -1
  102. package/lib/project.js +1 -1
  103. package/lib/projects.js +1 -1
  104. package/lib/projenrc-json.js +2 -2
  105. package/lib/projenrc.js +1 -1
  106. package/lib/python/pip.js +1 -1
  107. package/lib/python/poetry.js +2 -2
  108. package/lib/python/projenrc.js +1 -1
  109. package/lib/python/pyproject-toml-file.js +1 -1
  110. package/lib/python/pytest-sample.js +1 -1
  111. package/lib/python/pytest.js +1 -1
  112. package/lib/python/python-project.js +1 -1
  113. package/lib/python/python-sample.js +1 -1
  114. package/lib/python/requirements-file.js +1 -1
  115. package/lib/python/setuppy.js +1 -1
  116. package/lib/python/setuptools.js +1 -1
  117. package/lib/python/uv-config.d.ts +437 -21
  118. package/lib/python/uv-config.js +437 -2
  119. package/lib/python/uv.js +1 -1
  120. package/lib/python/venv.js +1 -1
  121. package/lib/readme.js +1 -1
  122. package/lib/release/publisher.js +1 -1
  123. package/lib/release/release-trigger.js +1 -1
  124. package/lib/release/release.js +15 -18
  125. package/lib/renovatebot.js +1 -1
  126. package/lib/sample-file.js +2 -2
  127. package/lib/semver.js +1 -1
  128. package/lib/source-code.js +1 -1
  129. package/lib/task-runtime.js +1 -1
  130. package/lib/task.js +1 -1
  131. package/lib/tasks.js +1 -1
  132. package/lib/testing.js +1 -1
  133. package/lib/textfile.js +1 -1
  134. package/lib/toml.js +1 -1
  135. package/lib/typescript/projenrc-ts.js +1 -1
  136. package/lib/typescript/projenrc.js +1 -1
  137. package/lib/typescript/typescript-typedoc.js +1 -1
  138. package/lib/typescript/typescript.js +6 -6
  139. package/lib/version.js +2 -2
  140. package/lib/vscode/devcontainer.js +1 -1
  141. package/lib/vscode/extensions.js +1 -1
  142. package/lib/vscode/launch-config.js +1 -1
  143. package/lib/vscode/settings.js +1 -1
  144. package/lib/vscode/vscode.js +1 -1
  145. package/lib/web/next.js +3 -3
  146. package/lib/web/postcss.js +1 -1
  147. package/lib/web/react.js +4 -4
  148. package/lib/web/tailwind.js +1 -1
  149. package/lib/xmlfile.js +1 -1
  150. package/lib/yaml.js +1 -1
  151. package/node_modules/@oozcitak/dom/README.md +2 -4
  152. package/node_modules/@oozcitak/dom/lib/algorithm/AbortAlgorithm.js +7 -29
  153. package/node_modules/@oozcitak/dom/lib/algorithm/AbortAlgorithm.js.map +1 -1
  154. package/node_modules/@oozcitak/dom/lib/algorithm/AttrAlgorithm.js +3 -3
  155. package/node_modules/@oozcitak/dom/lib/algorithm/AttrAlgorithm.js.map +1 -1
  156. package/node_modules/@oozcitak/dom/lib/algorithm/BoundaryPointAlgorithm.js +14 -14
  157. package/node_modules/@oozcitak/dom/lib/algorithm/BoundaryPointAlgorithm.js.map +1 -1
  158. package/node_modules/@oozcitak/dom/lib/algorithm/CharacterDataAlgorithm.js +40 -62
  159. package/node_modules/@oozcitak/dom/lib/algorithm/CharacterDataAlgorithm.js.map +1 -1
  160. package/node_modules/@oozcitak/dom/lib/algorithm/CreateAlgorithm.js +53 -54
  161. package/node_modules/@oozcitak/dom/lib/algorithm/CreateAlgorithm.js.map +1 -1
  162. package/node_modules/@oozcitak/dom/lib/algorithm/CustomElementAlgorithm.js +14 -14
  163. package/node_modules/@oozcitak/dom/lib/algorithm/CustomElementAlgorithm.js.map +1 -1
  164. package/node_modules/@oozcitak/dom/lib/algorithm/DOMAlgorithm.js +29 -51
  165. package/node_modules/@oozcitak/dom/lib/algorithm/DOMAlgorithm.js.map +1 -1
  166. package/node_modules/@oozcitak/dom/lib/algorithm/DOMTokenListAlgorithm.js +11 -11
  167. package/node_modules/@oozcitak/dom/lib/algorithm/DOMTokenListAlgorithm.js.map +1 -1
  168. package/node_modules/@oozcitak/dom/lib/algorithm/DocumentAlgorithm.js +25 -63
  169. package/node_modules/@oozcitak/dom/lib/algorithm/DocumentAlgorithm.js.map +1 -1
  170. package/node_modules/@oozcitak/dom/lib/algorithm/ElementAlgorithm.js +79 -85
  171. package/node_modules/@oozcitak/dom/lib/algorithm/ElementAlgorithm.js.map +1 -1
  172. package/node_modules/@oozcitak/dom/lib/algorithm/EventAlgorithm.d.ts +1 -1
  173. package/node_modules/@oozcitak/dom/lib/algorithm/EventAlgorithm.js +96 -153
  174. package/node_modules/@oozcitak/dom/lib/algorithm/EventAlgorithm.js.map +1 -1
  175. package/node_modules/@oozcitak/dom/lib/algorithm/EventTargetAlgorithm.js +15 -37
  176. package/node_modules/@oozcitak/dom/lib/algorithm/EventTargetAlgorithm.js.map +1 -1
  177. package/node_modules/@oozcitak/dom/lib/algorithm/MutationAlgorithm.js +229 -404
  178. package/node_modules/@oozcitak/dom/lib/algorithm/MutationAlgorithm.js.map +1 -1
  179. package/node_modules/@oozcitak/dom/lib/algorithm/MutationObserverAlgorithm.js +47 -109
  180. package/node_modules/@oozcitak/dom/lib/algorithm/MutationObserverAlgorithm.js.map +1 -1
  181. package/node_modules/@oozcitak/dom/lib/algorithm/NamespaceAlgorithm.d.ts +5 -1
  182. package/node_modules/@oozcitak/dom/lib/algorithm/NamespaceAlgorithm.js +19 -19
  183. package/node_modules/@oozcitak/dom/lib/algorithm/NamespaceAlgorithm.js.map +1 -1
  184. package/node_modules/@oozcitak/dom/lib/algorithm/NodeAlgorithm.js +69 -124
  185. package/node_modules/@oozcitak/dom/lib/algorithm/NodeAlgorithm.js.map +1 -1
  186. package/node_modules/@oozcitak/dom/lib/algorithm/NodeIteratorAlgorithm.js +11 -11
  187. package/node_modules/@oozcitak/dom/lib/algorithm/NodeIteratorAlgorithm.js.map +1 -1
  188. package/node_modules/@oozcitak/dom/lib/algorithm/OrderedSetAlgorithm.js +20 -72
  189. package/node_modules/@oozcitak/dom/lib/algorithm/OrderedSetAlgorithm.js.map +1 -1
  190. package/node_modules/@oozcitak/dom/lib/algorithm/ParentNodeAlgorithm.js +12 -34
  191. package/node_modules/@oozcitak/dom/lib/algorithm/ParentNodeAlgorithm.js.map +1 -1
  192. package/node_modules/@oozcitak/dom/lib/algorithm/RangeAlgorithm.js +183 -289
  193. package/node_modules/@oozcitak/dom/lib/algorithm/RangeAlgorithm.js.map +1 -1
  194. package/node_modules/@oozcitak/dom/lib/algorithm/SelectorsAlgorithm.js +2 -2
  195. package/node_modules/@oozcitak/dom/lib/algorithm/SelectorsAlgorithm.js.map +1 -1
  196. package/node_modules/@oozcitak/dom/lib/algorithm/ShadowTreeAlgorithm.js +65 -140
  197. package/node_modules/@oozcitak/dom/lib/algorithm/ShadowTreeAlgorithm.js.map +1 -1
  198. package/node_modules/@oozcitak/dom/lib/algorithm/TextAlgorithm.js +63 -89
  199. package/node_modules/@oozcitak/dom/lib/algorithm/TextAlgorithm.js.map +1 -1
  200. package/node_modules/@oozcitak/dom/lib/algorithm/TraversalAlgorithm.js +6 -6
  201. package/node_modules/@oozcitak/dom/lib/algorithm/TraversalAlgorithm.js.map +1 -1
  202. package/node_modules/@oozcitak/dom/lib/algorithm/TreeAlgorithm.js +141 -208
  203. package/node_modules/@oozcitak/dom/lib/algorithm/TreeAlgorithm.js.map +1 -1
  204. package/node_modules/@oozcitak/dom/lib/algorithm/TreeWalkerAlgorithm.js +13 -13
  205. package/node_modules/@oozcitak/dom/lib/algorithm/TreeWalkerAlgorithm.js.map +1 -1
  206. package/node_modules/@oozcitak/dom/lib/algorithm/WebIDLAlgorithm.js +1 -1
  207. package/node_modules/@oozcitak/dom/lib/algorithm/WebIDLAlgorithm.js.map +1 -1
  208. package/node_modules/@oozcitak/dom/lib/algorithm/XMLAlgorithm.js +16 -16
  209. package/node_modules/@oozcitak/dom/lib/algorithm/XMLAlgorithm.js.map +1 -1
  210. package/node_modules/@oozcitak/dom/lib/algorithm/index.js +42 -31
  211. package/node_modules/@oozcitak/dom/lib/algorithm/index.js.map +1 -1
  212. package/node_modules/@oozcitak/dom/lib/dom/AbortControllerImpl.js +12 -15
  213. package/node_modules/@oozcitak/dom/lib/dom/AbortControllerImpl.js.map +1 -1
  214. package/node_modules/@oozcitak/dom/lib/dom/AbortSignalImpl.js +20 -43
  215. package/node_modules/@oozcitak/dom/lib/dom/AbortSignalImpl.js.map +1 -1
  216. package/node_modules/@oozcitak/dom/lib/dom/AbstractRangeImpl.js +20 -62
  217. package/node_modules/@oozcitak/dom/lib/dom/AbstractRangeImpl.js.map +1 -1
  218. package/node_modules/@oozcitak/dom/lib/dom/AttrImpl.js +53 -92
  219. package/node_modules/@oozcitak/dom/lib/dom/AttrImpl.js.map +1 -1
  220. package/node_modules/@oozcitak/dom/lib/dom/CDATASectionImpl.js +13 -27
  221. package/node_modules/@oozcitak/dom/lib/dom/CDATASectionImpl.js.map +1 -1
  222. package/node_modules/@oozcitak/dom/lib/dom/CharacterDataImpl.js +40 -88
  223. package/node_modules/@oozcitak/dom/lib/dom/CharacterDataImpl.js.map +1 -1
  224. package/node_modules/@oozcitak/dom/lib/dom/ChildNodeImpl.js +41 -55
  225. package/node_modules/@oozcitak/dom/lib/dom/ChildNodeImpl.js.map +1 -1
  226. package/node_modules/@oozcitak/dom/lib/dom/CommentImpl.js +13 -28
  227. package/node_modules/@oozcitak/dom/lib/dom/CommentImpl.js.map +1 -1
  228. package/node_modules/@oozcitak/dom/lib/dom/CustomEventImpl.js +14 -36
  229. package/node_modules/@oozcitak/dom/lib/dom/CustomEventImpl.js.map +1 -1
  230. package/node_modules/@oozcitak/dom/lib/dom/DOMException.js +114 -204
  231. package/node_modules/@oozcitak/dom/lib/dom/DOMException.js.map +1 -1
  232. package/node_modules/@oozcitak/dom/lib/dom/DOMImpl.js +51 -68
  233. package/node_modules/@oozcitak/dom/lib/dom/DOMImpl.js.map +1 -1
  234. package/node_modules/@oozcitak/dom/lib/dom/DOMImplementationImpl.js +32 -31
  235. package/node_modules/@oozcitak/dom/lib/dom/DOMImplementationImpl.js.map +1 -1
  236. package/node_modules/@oozcitak/dom/lib/dom/DOMTokenListImpl.js +105 -163
  237. package/node_modules/@oozcitak/dom/lib/dom/DOMTokenListImpl.js.map +1 -1
  238. package/node_modules/@oozcitak/dom/lib/dom/DocumentFragmentImpl.d.ts +1 -1
  239. package/node_modules/@oozcitak/dom/lib/dom/DocumentFragmentImpl.js +30 -73
  240. package/node_modules/@oozcitak/dom/lib/dom/DocumentFragmentImpl.js.map +1 -1
  241. package/node_modules/@oozcitak/dom/lib/dom/DocumentImpl.d.ts +1 -1
  242. package/node_modules/@oozcitak/dom/lib/dom/DocumentImpl.js +198 -330
  243. package/node_modules/@oozcitak/dom/lib/dom/DocumentImpl.js.map +1 -1
  244. package/node_modules/@oozcitak/dom/lib/dom/DocumentOrShadowRootImpl.js +3 -5
  245. package/node_modules/@oozcitak/dom/lib/dom/DocumentOrShadowRootImpl.js.map +1 -1
  246. package/node_modules/@oozcitak/dom/lib/dom/DocumentTypeImpl.js +29 -75
  247. package/node_modules/@oozcitak/dom/lib/dom/DocumentTypeImpl.js.map +1 -1
  248. package/node_modules/@oozcitak/dom/lib/dom/ElementImpl.d.ts +1 -1
  249. package/node_modules/@oozcitak/dom/lib/dom/ElementImpl.js +234 -393
  250. package/node_modules/@oozcitak/dom/lib/dom/ElementImpl.js.map +1 -1
  251. package/node_modules/@oozcitak/dom/lib/dom/EventImpl.js +89 -137
  252. package/node_modules/@oozcitak/dom/lib/dom/EventImpl.js.map +1 -1
  253. package/node_modules/@oozcitak/dom/lib/dom/EventTargetImpl.js +32 -57
  254. package/node_modules/@oozcitak/dom/lib/dom/EventTargetImpl.js.map +1 -1
  255. package/node_modules/@oozcitak/dom/lib/dom/HTMLCollectionImpl.js +58 -64
  256. package/node_modules/@oozcitak/dom/lib/dom/HTMLCollectionImpl.js.map +1 -1
  257. package/node_modules/@oozcitak/dom/lib/dom/MutationObserverImpl.js +36 -88
  258. package/node_modules/@oozcitak/dom/lib/dom/MutationObserverImpl.js.map +1 -1
  259. package/node_modules/@oozcitak/dom/lib/dom/MutationRecordImpl.js +33 -60
  260. package/node_modules/@oozcitak/dom/lib/dom/MutationRecordImpl.js.map +1 -1
  261. package/node_modules/@oozcitak/dom/lib/dom/NamedNodeMapImpl.js +33 -47
  262. package/node_modules/@oozcitak/dom/lib/dom/NamedNodeMapImpl.js.map +1 -1
  263. package/node_modules/@oozcitak/dom/lib/dom/NodeFilterImpl.js +58 -42
  264. package/node_modules/@oozcitak/dom/lib/dom/NodeFilterImpl.js.map +1 -1
  265. package/node_modules/@oozcitak/dom/lib/dom/NodeImpl.d.ts +1 -1
  266. package/node_modules/@oozcitak/dom/lib/dom/NodeImpl.js +375 -471
  267. package/node_modules/@oozcitak/dom/lib/dom/NodeImpl.js.map +1 -1
  268. package/node_modules/@oozcitak/dom/lib/dom/NodeIteratorImpl.js +29 -49
  269. package/node_modules/@oozcitak/dom/lib/dom/NodeIteratorImpl.js.map +1 -1
  270. package/node_modules/@oozcitak/dom/lib/dom/NodeListImpl.js +69 -97
  271. package/node_modules/@oozcitak/dom/lib/dom/NodeListImpl.js.map +1 -1
  272. package/node_modules/@oozcitak/dom/lib/dom/NodeListStaticImpl.js +66 -93
  273. package/node_modules/@oozcitak/dom/lib/dom/NodeListStaticImpl.js.map +1 -1
  274. package/node_modules/@oozcitak/dom/lib/dom/NonDocumentTypeChildNodeImpl.js +33 -43
  275. package/node_modules/@oozcitak/dom/lib/dom/NonDocumentTypeChildNodeImpl.js.map +1 -1
  276. package/node_modules/@oozcitak/dom/lib/dom/NonElementParentNodeImpl.js +9 -11
  277. package/node_modules/@oozcitak/dom/lib/dom/NonElementParentNodeImpl.js.map +1 -1
  278. package/node_modules/@oozcitak/dom/lib/dom/ParentNodeImpl.js +73 -121
  279. package/node_modules/@oozcitak/dom/lib/dom/ParentNodeImpl.js.map +1 -1
  280. package/node_modules/@oozcitak/dom/lib/dom/ProcessingInstructionImpl.js +19 -36
  281. package/node_modules/@oozcitak/dom/lib/dom/ProcessingInstructionImpl.js.map +1 -1
  282. package/node_modules/@oozcitak/dom/lib/dom/RangeImpl.js +174 -241
  283. package/node_modules/@oozcitak/dom/lib/dom/RangeImpl.js.map +1 -1
  284. package/node_modules/@oozcitak/dom/lib/dom/ShadowRootImpl.js +22 -43
  285. package/node_modules/@oozcitak/dom/lib/dom/ShadowRootImpl.js.map +1 -1
  286. package/node_modules/@oozcitak/dom/lib/dom/SlotableImpl.js +13 -25
  287. package/node_modules/@oozcitak/dom/lib/dom/SlotableImpl.js.map +1 -1
  288. package/node_modules/@oozcitak/dom/lib/dom/StaticRangeImpl.js +12 -25
  289. package/node_modules/@oozcitak/dom/lib/dom/StaticRangeImpl.js.map +1 -1
  290. package/node_modules/@oozcitak/dom/lib/dom/TextImpl.js +34 -80
  291. package/node_modules/@oozcitak/dom/lib/dom/TextImpl.js.map +1 -1
  292. package/node_modules/@oozcitak/dom/lib/dom/TraverserImpl.js +15 -23
  293. package/node_modules/@oozcitak/dom/lib/dom/TraverserImpl.js.map +1 -1
  294. package/node_modules/@oozcitak/dom/lib/dom/TreeWalkerImpl.js +46 -64
  295. package/node_modules/@oozcitak/dom/lib/dom/TreeWalkerImpl.js.map +1 -1
  296. package/node_modules/@oozcitak/dom/lib/dom/WindowImpl.js +21 -42
  297. package/node_modules/@oozcitak/dom/lib/dom/WindowImpl.js.map +1 -1
  298. package/node_modules/@oozcitak/dom/lib/dom/XMLDocumentImpl.js +6 -20
  299. package/node_modules/@oozcitak/dom/lib/dom/XMLDocumentImpl.js.map +1 -1
  300. package/node_modules/@oozcitak/dom/lib/dom/index.js +92 -91
  301. package/node_modules/@oozcitak/dom/lib/dom/index.js.map +1 -1
  302. package/node_modules/@oozcitak/dom/lib/dom/interfaces.d.ts +28 -25
  303. package/node_modules/@oozcitak/dom/lib/dom/interfaces.js +9 -7
  304. package/node_modules/@oozcitak/dom/lib/dom/interfaces.js.map +1 -1
  305. package/node_modules/@oozcitak/dom/lib/index.js +5 -4
  306. package/node_modules/@oozcitak/dom/lib/index.js.map +1 -1
  307. package/node_modules/@oozcitak/dom/lib/parser/DOMParserImpl.js +13 -15
  308. package/node_modules/@oozcitak/dom/lib/parser/DOMParserImpl.js.map +1 -1
  309. package/node_modules/@oozcitak/dom/lib/parser/XMLParserImpl.js +78 -128
  310. package/node_modules/@oozcitak/dom/lib/parser/XMLParserImpl.js.map +1 -1
  311. package/node_modules/@oozcitak/dom/lib/parser/XMLStringLexer.js +107 -123
  312. package/node_modules/@oozcitak/dom/lib/parser/XMLStringLexer.js.map +1 -1
  313. package/node_modules/@oozcitak/dom/lib/parser/index.js +2 -1
  314. package/node_modules/@oozcitak/dom/lib/parser/index.js.map +1 -1
  315. package/node_modules/@oozcitak/dom/lib/parser/interfaces.d.ts +2 -2
  316. package/node_modules/@oozcitak/dom/lib/parser/interfaces.js +2 -1
  317. package/node_modules/@oozcitak/dom/lib/parser/interfaces.js.map +1 -1
  318. package/node_modules/@oozcitak/dom/lib/serializer/LocalNameSet.js +10 -12
  319. package/node_modules/@oozcitak/dom/lib/serializer/LocalNameSet.js.map +1 -1
  320. package/node_modules/@oozcitak/dom/lib/serializer/NamespacePrefixMap.js +23 -25
  321. package/node_modules/@oozcitak/dom/lib/serializer/NamespacePrefixMap.js.map +1 -1
  322. package/node_modules/@oozcitak/dom/lib/serializer/XMLSerializerImpl.js +405 -517
  323. package/node_modules/@oozcitak/dom/lib/serializer/XMLSerializerImpl.js.map +1 -1
  324. package/node_modules/@oozcitak/dom/lib/serializer/index.js +2 -1
  325. package/node_modules/@oozcitak/dom/lib/serializer/index.js.map +1 -1
  326. package/node_modules/@oozcitak/dom/lib/util/Cast.js +6 -8
  327. package/node_modules/@oozcitak/dom/lib/util/Cast.js.map +1 -1
  328. package/node_modules/@oozcitak/dom/lib/util/EmptySet.d.ts +13 -5
  329. package/node_modules/@oozcitak/dom/lib/util/EmptySet.js +33 -46
  330. package/node_modules/@oozcitak/dom/lib/util/EmptySet.js.map +1 -1
  331. package/node_modules/@oozcitak/dom/lib/util/Guard.js +47 -49
  332. package/node_modules/@oozcitak/dom/lib/util/Guard.js.map +1 -1
  333. package/node_modules/@oozcitak/dom/lib/util/index.js +4 -3
  334. package/node_modules/@oozcitak/dom/lib/util/index.js.map +1 -1
  335. package/node_modules/@oozcitak/dom/package.json +14 -41
  336. package/node_modules/@oozcitak/infra/LICENSE +21 -21
  337. package/node_modules/@oozcitak/infra/README.md +11 -13
  338. package/node_modules/@oozcitak/infra/lib/Base64.js +3 -3
  339. package/node_modules/@oozcitak/infra/lib/Base64.js.map +1 -1
  340. package/node_modules/@oozcitak/infra/lib/Byte.js +1 -1
  341. package/node_modules/@oozcitak/infra/lib/Byte.js.map +1 -1
  342. package/node_modules/@oozcitak/infra/lib/ByteSequence.js +19 -39
  343. package/node_modules/@oozcitak/infra/lib/ByteSequence.js.map +1 -1
  344. package/node_modules/@oozcitak/infra/lib/CodePoints.js +1 -0
  345. package/node_modules/@oozcitak/infra/lib/CodePoints.js.map +1 -1
  346. package/node_modules/@oozcitak/infra/lib/JSON.d.ts +1 -1
  347. package/node_modules/@oozcitak/infra/lib/JSON.js +18 -40
  348. package/node_modules/@oozcitak/infra/lib/JSON.js.map +1 -1
  349. package/node_modules/@oozcitak/infra/lib/List.d.ts +4 -4
  350. package/node_modules/@oozcitak/infra/lib/List.js +49 -173
  351. package/node_modules/@oozcitak/infra/lib/List.js.map +1 -1
  352. package/node_modules/@oozcitak/infra/lib/Map.d.ts +1 -1
  353. package/node_modules/@oozcitak/infra/lib/Map.js +43 -177
  354. package/node_modules/@oozcitak/infra/lib/Map.js.map +1 -1
  355. package/node_modules/@oozcitak/infra/lib/Namespace.js +1 -0
  356. package/node_modules/@oozcitak/infra/lib/Namespace.js.map +1 -1
  357. package/node_modules/@oozcitak/infra/lib/Queue.d.ts +1 -1
  358. package/node_modules/@oozcitak/infra/lib/Queue.js +2 -2
  359. package/node_modules/@oozcitak/infra/lib/Queue.js.map +1 -1
  360. package/node_modules/@oozcitak/infra/lib/Set.d.ts +1 -1
  361. package/node_modules/@oozcitak/infra/lib/Set.js +76 -254
  362. package/node_modules/@oozcitak/infra/lib/Set.js.map +1 -1
  363. package/node_modules/@oozcitak/infra/lib/Stack.d.ts +1 -1
  364. package/node_modules/@oozcitak/infra/lib/Stack.js +2 -2
  365. package/node_modules/@oozcitak/infra/lib/Stack.js.map +1 -1
  366. package/node_modules/@oozcitak/infra/lib/String.d.ts +2 -2
  367. package/node_modules/@oozcitak/infra/lib/String.js +75 -131
  368. package/node_modules/@oozcitak/infra/lib/String.js.map +1 -1
  369. package/node_modules/@oozcitak/infra/lib/index.js +46 -19
  370. package/node_modules/@oozcitak/infra/lib/index.js.map +1 -1
  371. package/node_modules/@oozcitak/infra/package.json +41 -54
  372. package/node_modules/@oozcitak/url/LICENSE +21 -21
  373. package/node_modules/@oozcitak/url/README.md +25 -27
  374. package/node_modules/@oozcitak/url/lib/URLAlgorithm.d.ts +3 -3
  375. package/node_modules/@oozcitak/url/lib/URLAlgorithm.js +287 -460
  376. package/node_modules/@oozcitak/url/lib/URLAlgorithm.js.map +1 -1
  377. package/node_modules/@oozcitak/url/lib/URLImpl.js +285 -331
  378. package/node_modules/@oozcitak/url/lib/URLImpl.js.map +1 -1
  379. package/node_modules/@oozcitak/url/lib/URLSearchParamsImpl.d.ts +1 -1
  380. package/node_modules/@oozcitak/url/lib/URLSearchParamsImpl.js +71 -190
  381. package/node_modules/@oozcitak/url/lib/URLSearchParamsImpl.js.map +1 -1
  382. package/node_modules/@oozcitak/url/lib/index.js +3 -2
  383. package/node_modules/@oozcitak/url/lib/index.js.map +1 -1
  384. package/node_modules/@oozcitak/url/lib/interfaces.d.ts +2 -2
  385. package/node_modules/@oozcitak/url/lib/interfaces.js +2 -1
  386. package/node_modules/@oozcitak/url/lib/interfaces.js.map +1 -1
  387. package/node_modules/@oozcitak/url/package.json +42 -55
  388. package/node_modules/@oozcitak/util/LICENSE +21 -21
  389. package/node_modules/@oozcitak/util/README.md +8 -10
  390. package/node_modules/@oozcitak/util/lib/CompareCache.js +12 -12
  391. package/node_modules/@oozcitak/util/lib/CompareCache.js.map +1 -1
  392. package/node_modules/@oozcitak/util/lib/FixedSizeSet.d.ts +6 -6
  393. package/node_modules/@oozcitak/util/lib/FixedSizeSet.js +42 -117
  394. package/node_modules/@oozcitak/util/lib/FixedSizeSet.js.map +1 -1
  395. package/node_modules/@oozcitak/util/lib/Lazy.js +17 -19
  396. package/node_modules/@oozcitak/util/lib/Lazy.js.map +1 -1
  397. package/node_modules/@oozcitak/util/lib/ObjectCache.d.ts +4 -4
  398. package/node_modules/@oozcitak/util/lib/ObjectCache.js +44 -118
  399. package/node_modules/@oozcitak/util/lib/ObjectCache.js.map +1 -1
  400. package/node_modules/@oozcitak/util/lib/StringWalker.js +41 -47
  401. package/node_modules/@oozcitak/util/lib/StringWalker.js.map +1 -1
  402. package/node_modules/@oozcitak/util/lib/index.d.ts +23 -25
  403. package/node_modules/@oozcitak/util/lib/index.js +62 -88
  404. package/node_modules/@oozcitak/util/lib/index.js.map +1 -1
  405. package/node_modules/@oozcitak/util/package.json +37 -50
  406. package/node_modules/argparse/LICENSE +254 -0
  407. package/node_modules/argparse/README.md +84 -0
  408. package/node_modules/argparse/argparse.js +3707 -0
  409. package/node_modules/argparse/lib/sub.js +67 -0
  410. package/node_modules/argparse/lib/textwrap.js +440 -0
  411. package/node_modules/argparse/package.json +31 -0
  412. package/node_modules/{xmlbuilder2/node_modules/js-yaml → js-yaml}/README.md +36 -88
  413. package/node_modules/{xmlbuilder2/node_modules/js-yaml → js-yaml}/bin/js-yaml.js +17 -23
  414. package/node_modules/js-yaml/dist/js-yaml.js +3880 -0
  415. package/node_modules/js-yaml/dist/js-yaml.min.js +2 -0
  416. package/node_modules/{xmlbuilder2/node_modules/js-yaml/dist/js-yaml.js → js-yaml/dist/js-yaml.mjs} +2926 -3075
  417. package/node_modules/js-yaml/index.js +47 -0
  418. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/dumper.js +205 -90
  419. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/exception.js +22 -10
  420. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/loader.js +149 -76
  421. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/schema/core.js +1 -8
  422. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js → js-yaml/lib/schema/default.js} +1 -7
  423. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/schema/json.js +1 -7
  424. package/node_modules/js-yaml/lib/schema.js +121 -0
  425. package/node_modules/js-yaml/lib/snippet.js +101 -0
  426. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/binary.js +4 -17
  427. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/float.js +2 -21
  428. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/int.js +18 -35
  429. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/null.js +2 -1
  430. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type.js +14 -9
  431. package/node_modules/js-yaml/package.json +66 -0
  432. package/node_modules/xmlbuilder2/README.md +8 -7
  433. package/node_modules/xmlbuilder2/lib/builder/BuilderFunctions.js +36 -37
  434. package/node_modules/xmlbuilder2/lib/builder/BuilderFunctions.js.map +1 -1
  435. package/node_modules/xmlbuilder2/lib/builder/BuilderFunctionsCB.js +3 -3
  436. package/node_modules/xmlbuilder2/lib/builder/BuilderFunctionsCB.js.map +1 -1
  437. package/node_modules/xmlbuilder2/lib/builder/XMLBuilderCBImpl.d.ts +0 -1
  438. package/node_modules/xmlbuilder2/lib/builder/XMLBuilderCBImpl.js +235 -333
  439. package/node_modules/xmlbuilder2/lib/builder/XMLBuilderCBImpl.js.map +1 -1
  440. package/node_modules/xmlbuilder2/lib/builder/XMLBuilderImpl.js +271 -371
  441. package/node_modules/xmlbuilder2/lib/builder/XMLBuilderImpl.js.map +1 -1
  442. package/node_modules/xmlbuilder2/lib/builder/dom.js +13 -13
  443. package/node_modules/xmlbuilder2/lib/builder/dom.js.map +1 -1
  444. package/node_modules/xmlbuilder2/lib/builder/index.js +9 -8
  445. package/node_modules/xmlbuilder2/lib/builder/index.js.map +1 -1
  446. package/node_modules/xmlbuilder2/lib/constants.js +1 -0
  447. package/node_modules/xmlbuilder2/lib/constants.js.map +1 -1
  448. package/node_modules/xmlbuilder2/lib/index.js +7 -6
  449. package/node_modules/xmlbuilder2/lib/index.js.map +1 -1
  450. package/node_modules/xmlbuilder2/lib/interfaces.d.ts +25 -24
  451. package/node_modules/xmlbuilder2/lib/interfaces.js +1 -0
  452. package/node_modules/xmlbuilder2/lib/interfaces.js.map +1 -1
  453. package/node_modules/xmlbuilder2/lib/readers/BaseReader.js +53 -56
  454. package/node_modules/xmlbuilder2/lib/readers/BaseReader.js.map +1 -1
  455. package/node_modules/xmlbuilder2/lib/readers/JSONReader.js +7 -24
  456. package/node_modules/xmlbuilder2/lib/readers/JSONReader.js.map +1 -1
  457. package/node_modules/xmlbuilder2/lib/readers/ObjectReader.js +59 -77
  458. package/node_modules/xmlbuilder2/lib/readers/ObjectReader.js.map +1 -1
  459. package/node_modules/xmlbuilder2/lib/readers/XMLReader.js +61 -126
  460. package/node_modules/xmlbuilder2/lib/readers/XMLReader.js.map +1 -1
  461. package/node_modules/xmlbuilder2/lib/readers/YAMLReader.js +9 -26
  462. package/node_modules/xmlbuilder2/lib/readers/YAMLReader.js.map +1 -1
  463. package/node_modules/xmlbuilder2/lib/readers/index.js +5 -4
  464. package/node_modules/xmlbuilder2/lib/readers/index.js.map +1 -1
  465. package/node_modules/xmlbuilder2/lib/writers/BaseCBWriter.d.ts +1 -0
  466. package/node_modules/xmlbuilder2/lib/writers/BaseCBWriter.js +14 -8
  467. package/node_modules/xmlbuilder2/lib/writers/BaseCBWriter.js.map +1 -1
  468. package/node_modules/xmlbuilder2/lib/writers/BaseWriter.js +474 -609
  469. package/node_modules/xmlbuilder2/lib/writers/BaseWriter.js.map +1 -1
  470. package/node_modules/xmlbuilder2/lib/writers/JSONCBWriter.js +48 -64
  471. package/node_modules/xmlbuilder2/lib/writers/JSONCBWriter.js.map +1 -1
  472. package/node_modules/xmlbuilder2/lib/writers/JSONWriter.js +54 -95
  473. package/node_modules/xmlbuilder2/lib/writers/JSONWriter.js.map +1 -1
  474. package/node_modules/xmlbuilder2/lib/writers/MapWriter.js +21 -36
  475. package/node_modules/xmlbuilder2/lib/writers/MapWriter.js.map +1 -1
  476. package/node_modules/xmlbuilder2/lib/writers/ObjectWriter.js +131 -166
  477. package/node_modules/xmlbuilder2/lib/writers/ObjectWriter.js.map +1 -1
  478. package/node_modules/xmlbuilder2/lib/writers/XMLCBWriter.d.ts +1 -1
  479. package/node_modules/xmlbuilder2/lib/writers/XMLCBWriter.js +42 -56
  480. package/node_modules/xmlbuilder2/lib/writers/XMLCBWriter.js.map +1 -1
  481. package/node_modules/xmlbuilder2/lib/writers/XMLWriter.js +48 -62
  482. package/node_modules/xmlbuilder2/lib/writers/XMLWriter.js.map +1 -1
  483. package/node_modules/xmlbuilder2/lib/writers/YAMLCBWriter.js +43 -59
  484. package/node_modules/xmlbuilder2/lib/writers/YAMLCBWriter.js.map +1 -1
  485. package/node_modules/xmlbuilder2/lib/writers/YAMLWriter.js +49 -89
  486. package/node_modules/xmlbuilder2/lib/writers/YAMLWriter.js.map +1 -1
  487. package/node_modules/xmlbuilder2/lib/writers/index.js +6 -5
  488. package/node_modules/xmlbuilder2/lib/writers/index.js.map +1 -1
  489. package/node_modules/xmlbuilder2/lib/xmlbuilder2.min.js +2 -8
  490. package/node_modules/xmlbuilder2/lib/xmlbuilder2.min.js.LICENSE.txt +10 -0
  491. package/node_modules/xmlbuilder2/package.json +34 -52
  492. package/package.json +8 -13
  493. package/node_modules/sprintf-js/.npmignore +0 -1
  494. package/node_modules/sprintf-js/LICENSE +0 -24
  495. package/node_modules/sprintf-js/README.md +0 -88
  496. package/node_modules/sprintf-js/bower.json +0 -14
  497. package/node_modules/sprintf-js/demo/angular.html +0 -20
  498. package/node_modules/sprintf-js/dist/angular-sprintf.min.js +0 -4
  499. package/node_modules/sprintf-js/dist/angular-sprintf.min.js.map +0 -1
  500. package/node_modules/sprintf-js/dist/angular-sprintf.min.map +0 -1
  501. package/node_modules/sprintf-js/dist/sprintf.min.js +0 -4
  502. package/node_modules/sprintf-js/dist/sprintf.min.js.map +0 -1
  503. package/node_modules/sprintf-js/dist/sprintf.min.map +0 -1
  504. package/node_modules/sprintf-js/gruntfile.js +0 -36
  505. package/node_modules/sprintf-js/package.json +0 -22
  506. package/node_modules/sprintf-js/src/angular-sprintf.js +0 -18
  507. package/node_modules/sprintf-js/src/sprintf.js +0 -208
  508. package/node_modules/sprintf-js/test/test.js +0 -82
  509. package/node_modules/xmlbuilder2/node_modules/argparse/LICENSE +0 -21
  510. package/node_modules/xmlbuilder2/node_modules/argparse/README.md +0 -257
  511. package/node_modules/xmlbuilder2/node_modules/argparse/index.js +0 -3
  512. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/append/constant.js +0 -47
  513. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/append.js +0 -53
  514. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/count.js +0 -40
  515. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/help.js +0 -47
  516. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/store/constant.js +0 -43
  517. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/store/false.js +0 -27
  518. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/store/true.js +0 -26
  519. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/store.js +0 -50
  520. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/subparsers.js +0 -149
  521. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/version.js +0 -47
  522. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action.js +0 -146
  523. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action_container.js +0 -482
  524. package/node_modules/xmlbuilder2/node_modules/argparse/lib/argparse.js +0 -14
  525. package/node_modules/xmlbuilder2/node_modules/argparse/lib/argument/error.js +0 -50
  526. package/node_modules/xmlbuilder2/node_modules/argparse/lib/argument/exclusive.js +0 -54
  527. package/node_modules/xmlbuilder2/node_modules/argparse/lib/argument/group.js +0 -75
  528. package/node_modules/xmlbuilder2/node_modules/argparse/lib/argument_parser.js +0 -1161
  529. package/node_modules/xmlbuilder2/node_modules/argparse/lib/const.js +0 -21
  530. package/node_modules/xmlbuilder2/node_modules/argparse/lib/help/added_formatters.js +0 -87
  531. package/node_modules/xmlbuilder2/node_modules/argparse/lib/help/formatter.js +0 -795
  532. package/node_modules/xmlbuilder2/node_modules/argparse/lib/namespace.js +0 -76
  533. package/node_modules/xmlbuilder2/node_modules/argparse/lib/utils.js +0 -57
  534. package/node_modules/xmlbuilder2/node_modules/argparse/package.json +0 -34
  535. package/node_modules/xmlbuilder2/node_modules/js-yaml/dist/js-yaml.min.js +0 -1
  536. package/node_modules/xmlbuilder2/node_modules/js-yaml/index.js +0 -7
  537. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/mark.js +0 -76
  538. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +0 -25
  539. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/schema.js +0 -108
  540. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/type/js/function.js +0 -93
  541. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +0 -60
  542. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +0 -28
  543. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml.js +0 -39
  544. package/node_modules/xmlbuilder2/node_modules/js-yaml/package.json +0 -49
  545. /package/node_modules/{xmlbuilder2/node_modules/js-yaml → js-yaml}/LICENSE +0 -0
  546. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/common.js +0 -0
  547. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/schema/failsafe.js +0 -0
  548. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/bool.js +0 -0
  549. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/map.js +0 -0
  550. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/merge.js +0 -0
  551. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/omap.js +0 -0
  552. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/pairs.js +0 -0
  553. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/seq.js +0 -0
  554. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/set.js +0 -0
  555. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/str.js +0 -0
  556. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/timestamp.js +0 -0
  557. /package/node_modules/xmlbuilder2/{LICENSE → LICENSE.txt} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TrustedPublishing = void 0;
3
+ exports.TorchMode = exports.TargetTriple = exports.AnnotationStyle = exports.IndexFormat = exports.AuthPolicy = exports.TrustedPublishing = exports.ResolutionMode = exports.PythonPreference = exports.PythonDownloads = exports.PrereleaseMode = exports.LinkMode = exports.KeyringProviderType = exports.IndexStrategy = exports.ForkStrategy = exports.AddBoundsKind = void 0;
4
4
  exports.toJson_UvConfiguration = toJson_UvConfiguration;
5
5
  exports.toJson_BuildBackendSettings = toJson_BuildBackendSettings;
6
6
  exports.toJson_SchemaConflictItem = toJson_SchemaConflictItem;
@@ -92,6 +92,29 @@ function toJson_UvConfiguration(obj) {
92
92
  // filter undefined values
93
93
  return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
94
94
  }
95
+ /* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
96
+ /**
97
+ * The default version specifier when adding a dependency.
98
+ *
99
+ * @schema AddBoundsKind
100
+ */
101
+ var AddBoundsKind;
102
+ (function (AddBoundsKind) {
103
+ /** Only a lower bound, e.g., `>=1.2.3`. (lower) */
104
+ AddBoundsKind["LOWER"] = "lower";
105
+ /** Allow the same major version, similar to the semver caret, e.g., `>=1.2.3, <2.0.0`.
106
+
107
+ Leading zeroes are skipped, e.g. `>=0.1.2, <0.2.0`. (major) */
108
+ AddBoundsKind["MAJOR"] = "major";
109
+ /** Allow the same minor version, similar to the semver tilde, e.g., `>=1.2.3, <1.3.0`.
110
+
111
+ Leading zeroes are skipped, e.g. `>=0.1.2, <0.1.3`. (minor) */
112
+ AddBoundsKind["MINOR"] = "minor";
113
+ /** Pin the exact version, e.g., `==1.2.3`.
114
+
115
+ This option is not recommended, as versions are already pinned in the uv lockfile. (exact) */
116
+ AddBoundsKind["EXACT"] = "exact";
117
+ })(AddBoundsKind || (exports.AddBoundsKind = AddBoundsKind = {}));
95
118
  /**
96
119
  * Converts an object of type 'BuildBackendSettings' to JSON representation.
97
120
  * @internal
@@ -165,6 +188,20 @@ function toJson_StaticMetadata(obj) {
165
188
  // filter undefined values
166
189
  return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
167
190
  }
191
+ /* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
192
+ /**
193
+ * @schema ForkStrategy
194
+ */
195
+ var ForkStrategy;
196
+ (function (ForkStrategy) {
197
+ /** Optimize for selecting the fewest number of versions for each package. Older versions may
198
+ be preferred if they are compatible with a wider range of supported Python versions or
199
+ platforms. (fewest) */
200
+ ForkStrategy["FEWEST"] = "fewest";
201
+ /** Optimize for selecting latest supported version of each package, for each supported Python
202
+ version. (requires-python) */
203
+ ForkStrategy["REQUIRES_HYPHEN_PYTHON"] = "requires-python";
204
+ })(ForkStrategy || (exports.ForkStrategy = ForkStrategy = {}));
168
205
  /**
169
206
  * Converts an object of type 'Index' to JSON representation.
170
207
  * @internal
@@ -188,6 +225,70 @@ function toJson_Index(obj) {
188
225
  // filter undefined values
189
226
  return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
190
227
  }
228
+ /* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
229
+ /**
230
+ * @schema IndexStrategy
231
+ */
232
+ var IndexStrategy;
233
+ (function (IndexStrategy) {
234
+ /** Only use results from the first index that returns a match for a given package name.
235
+
236
+ While this differs from pip's behavior, it's the default index strategy as it's the most
237
+ secure. (first-index) */
238
+ IndexStrategy["FIRST_HYPHEN_INDEX"] = "first-index";
239
+ /** Search for every package name across all indexes, exhausting the versions from the first
240
+ index before moving on to the next.
241
+
242
+ In this strategy, we look for every package across all indexes. When resolving, we attempt
243
+ to use versions from the indexes in order, such that we exhaust all available versions from
244
+ the first index before moving on to the next. Further, if a version is found to be
245
+ incompatible in the first index, we do not reconsider that version in subsequent indexes,
246
+ even if the secondary index might contain compatible versions (e.g., variants of the same
247
+ versions with different ABI tags or Python version constraints).
248
+
249
+ See: <https://peps.python.org/pep-0708/> (unsafe-first-match) */
250
+ IndexStrategy["UNSAFE_HYPHEN_FIRST_HYPHEN_MATCH"] = "unsafe-first-match";
251
+ /** Search for every package name across all indexes, preferring the "best" version found. If a
252
+ package version is in multiple indexes, only look at the entry for the first index.
253
+
254
+ In this strategy, we look for every package across all indexes. When resolving, we consider
255
+ all versions from all indexes, choosing the "best" version found (typically, the highest
256
+ compatible version).
257
+
258
+ This most closely matches pip's behavior, but exposes the resolver to "dependency confusion"
259
+ attacks whereby malicious actors can publish packages to public indexes with the same name
260
+ as internal packages, causing the resolver to install the malicious package in lieu of
261
+ the intended internal package.
262
+
263
+ See: <https://peps.python.org/pep-0708/> (unsafe-best-match) */
264
+ IndexStrategy["UNSAFE_HYPHEN_BEST_HYPHEN_MATCH"] = "unsafe-best-match";
265
+ })(IndexStrategy || (exports.IndexStrategy = IndexStrategy = {}));
266
+ /**
267
+ * Keyring provider type to use for credential lookup.
268
+ *
269
+ * @schema KeyringProviderType
270
+ */
271
+ var KeyringProviderType;
272
+ (function (KeyringProviderType) {
273
+ /** Do not use keyring for credential lookup. (disabled) */
274
+ KeyringProviderType["DISABLED"] = "disabled";
275
+ /** Use the `keyring` command for credential lookup. (subprocess) */
276
+ KeyringProviderType["SUBPROCESS"] = "subprocess";
277
+ })(KeyringProviderType || (exports.KeyringProviderType = KeyringProviderType = {}));
278
+ /**
279
+ * @schema LinkMode
280
+ */
281
+ var LinkMode;
282
+ (function (LinkMode) {
283
+ /** Clone (i.e., copy-on-write) packages from the wheel into the `site-packages` directory. (clone) */
284
+ LinkMode["CLONE"] = "clone";
285
+ /** Copy packages from the wheel into the `site-packages` directory. (copy) */
286
+ LinkMode["COPY"] = "copy";
287
+ /** Hard link packages from the wheel into the `site-packages` directory. (hardlink) */
288
+ LinkMode["HARDLINK"] = "hardlink";
289
+ /** Symbolically link packages from the wheel into the `site-packages` directory. (symlink) */
290
+ LinkMode["SYMLINK"] = "symlink";
291
+ })(LinkMode || (exports.LinkMode = LinkMode = {}));
191
292
  /**
192
293
  * Converts an object of type 'PipOptions' to JSON representation.
193
294
  * @internal
@@ -263,6 +364,68 @@ function toJson_PipOptions(obj) {
263
364
  return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
264
365
  }
265
366
  /* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
367
+ /**
368
+ * @schema PrereleaseMode
369
+ */
370
+ var PrereleaseMode;
371
+ (function (PrereleaseMode) {
372
+ /** Disallow all pre-release versions. (disallow) */
373
+ PrereleaseMode["DISALLOW"] = "disallow";
374
+ /** Allow all pre-release versions. (allow) */
375
+ PrereleaseMode["ALLOW"] = "allow";
376
+ /** Allow pre-release versions if all versions of a package are pre-release. (if-necessary) */
377
+ PrereleaseMode["IF_HYPHEN_NECESSARY"] = "if-necessary";
378
+ /** Allow pre-release versions for first-party packages with explicit pre-release markers in
379
+ their version requirements. (explicit) */
380
+ PrereleaseMode["EXPLICIT"] = "explicit";
381
+ /** Allow pre-release versions if all versions of a package are pre-release, or if the package
382
+ has an explicit pre-release marker in its version requirements. (if-necessary-or-explicit) */
383
+ PrereleaseMode["IF_HYPHEN_NECESSARY_HYPHEN_OR_HYPHEN_EXPLICIT"] = "if-necessary-or-explicit";
384
+ })(PrereleaseMode || (exports.PrereleaseMode = PrereleaseMode = {}));
385
+ /**
386
+ * @schema PythonDownloads
387
+ */
388
+ var PythonDownloads;
389
+ (function (PythonDownloads) {
390
+ /** Automatically download managed Python installations when needed. (automatic) */
391
+ PythonDownloads["AUTOMATIC"] = "automatic";
392
+ /** Do not automatically download managed Python installations; require explicit installation. (manual) */
393
+ PythonDownloads["MANUAL"] = "manual";
394
+ /** Do not ever allow Python downloads. (never) */
395
+ PythonDownloads["NEVER"] = "never";
396
+ })(PythonDownloads || (exports.PythonDownloads = PythonDownloads = {}));
397
+ /**
398
+ * @schema PythonPreference
399
+ */
400
+ var PythonPreference;
401
+ (function (PythonPreference) {
402
+ /** Only use managed Python installations; never use system Python installations. (only-managed) */
403
+ PythonPreference["ONLY_HYPHEN_MANAGED"] = "only-managed";
404
+ /** Prefer managed Python installations over system Python installations.
405
+
406
+ System Python installations are still preferred over downloading managed Python versions.
407
+ Use `only-managed` to always fetch a managed Python version. (managed) */
408
+ PythonPreference["MANAGED"] = "managed";
409
+ /** Prefer system Python installations over managed Python installations.
410
+
411
+ If a system Python installation cannot be found, a managed Python installation can be used. (system) */
412
+ PythonPreference["SYSTEM"] = "system";
413
+ /** Only use system Python installations; never use managed Python installations. (only-system) */
414
+ PythonPreference["ONLY_HYPHEN_SYSTEM"] = "only-system";
415
+ })(PythonPreference || (exports.PythonPreference = PythonPreference = {}));
416
+ /**
417
+ * @schema ResolutionMode
418
+ */
419
+ var ResolutionMode;
420
+ (function (ResolutionMode) {
421
+ /** Resolve the highest compatible version of each package. (highest) */
422
+ ResolutionMode["HIGHEST"] = "highest";
423
+ /** Resolve the lowest compatible version of each package. (lowest) */
424
+ ResolutionMode["LOWEST"] = "lowest";
425
+ /** Resolve the lowest compatible version of any direct dependencies, and the highest
426
+ compatible version of any transitive dependencies. (lowest-direct) */
427
+ ResolutionMode["LOWEST_HYPHEN_DIRECT"] = "lowest-direct";
428
+ })(ResolutionMode || (exports.ResolutionMode = ResolutionMode = {}));
266
429
  /**
267
430
  * @schema TrustedPublishing
268
431
  */
@@ -272,6 +435,10 @@ var TrustedPublishing;
272
435
  TrustedPublishing["ALWAYS"] = "always";
273
436
  /** never */
274
437
  TrustedPublishing["NEVER"] = "never";
438
+ /** Attempt trusted publishing when we're in a supported environment, continue if that fails.
439
+
440
+ Supported environments include GitHub Actions and GitLab CI/CD. (automatic) */
441
+ TrustedPublishing["AUTOMATIC"] = "automatic";
275
442
  })(TrustedPublishing || (exports.TrustedPublishing = TrustedPublishing = {}));
276
443
  /**
277
444
  * Converts an object of type 'ToolUvWorkspace' to JSON representation.
@@ -308,6 +475,30 @@ function toJson_WheelDataIncludes(obj) {
308
475
  // filter undefined values
309
476
  return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
310
477
  }
478
+ /* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
479
+ /**
480
+ * When to use authentication.
481
+ *
482
+ * @schema AuthPolicy
483
+ */
484
+ var AuthPolicy;
485
+ (function (AuthPolicy) {
486
+ /** Authenticate when necessary.
487
+
488
+ If credentials are provided, they will be used. Otherwise, an unauthenticated request will
489
+ be attempted first. If the request fails, uv will search for credentials. If credentials are
490
+ found, an authenticated request will be attempted. (auto) */
491
+ AuthPolicy["AUTO"] = "auto";
492
+ /** Always authenticate.
493
+
494
+ If credentials are not provided, uv will eagerly search for credentials. If credentials
495
+ cannot be found, uv will error instead of attempting an unauthenticated request. (always) */
496
+ AuthPolicy["ALWAYS"] = "always";
497
+ /** Never authenticate.
498
+
499
+ If credentials are provided, uv will error. uv will not search for credentials. (never) */
500
+ AuthPolicy["NEVER"] = "never";
501
+ })(AuthPolicy || (exports.AuthPolicy = AuthPolicy = {}));
311
502
  /**
312
503
  * Converts an object of type 'IndexCacheControl' to JSON representation.
313
504
  * @internal
@@ -324,6 +515,30 @@ function toJson_IndexCacheControl(obj) {
324
515
  // filter undefined values
325
516
  return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
326
517
  }
518
+ /* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
519
+ /**
520
+ * @schema IndexFormat
521
+ */
522
+ var IndexFormat;
523
+ (function (IndexFormat) {
524
+ /** A PyPI-style index implementing the Simple Repository API. (simple) */
525
+ IndexFormat["SIMPLE"] = "simple";
526
+ /** A `--find-links`-style index containing a flat list of wheels and source distributions. (flat) */
527
+ IndexFormat["FLAT"] = "flat";
528
+ })(IndexFormat || (exports.IndexFormat = IndexFormat = {}));
529
+ /**
530
+ * Indicate the style of annotation comments, used to indicate the dependencies that requested each
531
+ * package.
532
+ *
533
+ * @schema AnnotationStyle
534
+ */
535
+ var AnnotationStyle;
536
+ (function (AnnotationStyle) {
537
+ /** Render the annotations on a single, comma-separated line. (line) */
538
+ AnnotationStyle["LINE"] = "line";
539
+ /** Render each annotation on its own line. (split) */
540
+ AnnotationStyle["SPLIT"] = "split";
541
+ })(AnnotationStyle || (exports.AnnotationStyle = AnnotationStyle = {}));
327
542
  /**
328
543
  * Converts an object of type 'PipGroupName' to JSON representation.
329
544
  * @internal
@@ -341,4 +556,224 @@ function toJson_PipGroupName(obj) {
341
556
  return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
342
557
  }
343
558
  /* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXYtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B5dGhvbi91di1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK3VCQSx3REF3RUM7QUFtS0Qsa0VBY0M7QUFpQ0QsOERBU0M7QUFvQkQsd0VBT0M7QUE2Q0Qsc0RBV0M7QUF1SkQsb0NBZUM7QUFtcEJELDhDQWtFQztBQThDRCx3REFRQztBQTBDRCw0REFXQztBQTZCRCw0REFRQztBQTRCRCxrREFRQztBQTE2Q0Q7OztHQUdHO0FBQ0gscUZBQXFGO0FBQ3JGLFNBQWdCLHNCQUFzQixDQUFDLEdBQWdDO0lBQ3JFLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsWUFBWSxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQzNCLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekQsZUFBZSxFQUFFLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFDOUQsK0JBQStCLEVBQUUsR0FBRyxDQUFDLDJCQUEyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RSxXQUFXLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDekIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUTtRQUN6QixrQkFBa0IsRUFBRSxHQUFHLENBQUMsZUFBZTtRQUN2QyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsZ0JBQWdCO1FBQ3pDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxtQkFBbUI7UUFDL0MscUJBQXFCLEVBQUUsR0FB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RUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxTix1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BMLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNVLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxvQkFBb0I7UUFDbEQscUJBQXFCLEVBQUUsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxnQkFBZ0I7UUFDMUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGFBQWE7UUFDcEMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLG1CQUFtQjtRQUNoRCxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsWUFBWTtRQUNsQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsb0JBQW9CO1FBQ2xELGVBQWUsRUFBRSxHQUFHLENBQUMsWUFBWTtRQUNqQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcE0sT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxTix1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMs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LENBQUMsSUFBSTtLQUNqQixDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFHLENBQUM7QUFDRCxvRkFBb0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB+fiBHZW5lcmF0ZWQgYnkgcHJvamVuLiBUbyBtb2RpZnksIGVkaXQgLnByb2plbnJjLnRzIGFuZCBydW4gXCJub2RlIC4vcHJvamVuLmpzXCIuXG4vKipcbiAqIE1ldGFkYXRhIGFuZCBjb25maWd1cmF0aW9uIGZvciB1di5cbiAqXG4gKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFV2Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2ZXJzaW9uIHNwZWNpZmllciB3aGVuIGFkZGluZyBhIGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIFdoZW4gYWRkaW5nIGEgZGVwZW5kZW5jeSB0byB0aGUgcHJvamVjdCwgaWYgbm8gY29uc3RyYWludCBvciBVUkwgaXMgcHJvdmlkZWQsIGEgY29uc3RyYWludFxuICAgKiBpcyBhZGRlZCBiYXNlZCBvbiB0aGUgbGF0ZXN0IGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgcGFja2FnZS4gQnkgZGVmYXVsdCwgYSBsb3dlciBib3VuZFxuICAgKiBjb25zdHJhaW50IGlzIHVzZWQsIGUuZy4sIGA+PTEuMi4zYC5cbiAgICpcbiAgICogV2hlbiBgLS1mcm96ZW5gIGlzIHByb3ZpZGVkLCBubyByZXNvbHV0aW9uIGlzIHBlcmZvcm1lZCwgYW5kIGRlcGVuZGVuY2llcyBhcmUgYWx3YXlzIGFkZGVkXG4gICAqIHdpdGhvdXQgY29uc3RyYWludHMuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIGluIHByZXZpZXcgYW5kIG1heSBjaGFuZ2UgaW4gYW55IGZ1dHVyZSByZWxlYXNlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNhZGQtYm91bmRzXG4gICAqL1xuICByZWFkb25seSBhZGRCb3VuZHM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93IGluc2VjdXJlIGNvbm5lY3Rpb25zIHRvIGhvc3QuXG4gICAqXG4gICAqIEV4cGVjdHMgdG8gcmVjZWl2ZSBlaXRoZXIgYSBob3N0bmFtZSAoZS5nLiwgYGxvY2FsaG9zdGApLCBhIGhvc3QtcG9ydCBwYWlyIChlLmcuLFxuICAgKiBgbG9jYWxob3N0OjgwODBgKSwgb3IgYSBVUkwgKGUuZy4sIGBodHRwczovL2xvY2FsaG9zdGApLlxuICAgKlxuICAgKiBXQVJOSU5HOiBIb3N0cyBpbmNsdWRlZCBpbiB0aGlzIGxpc3Qgd2lsbCBub3QgYmUgdmVyaWZpZWQgYWdhaW5zdCB0aGUgc3lzdGVtJ3MgY2VydGlmaWNhdGVcbiAgICogc3RvcmUuIE9ubHkgdXNlIGAtLWFsbG93LWluc2VjdXJlLWhvc3RgIGluIGEgc2VjdXJlIG5ldHdvcmsgd2l0aCB2ZXJpZmllZCBzb3VyY2VzLCBhcyBpdFxuICAgKiBieXBhc3NlcyBTU0wgdmVyaWZpY2F0aW9uIGFuZCBjb3VsZCBleHBvc2UgeW91IHRvIE1JVE0gYXR0YWNrcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jYWxsb3ctaW5zZWN1cmUtaG9zdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dJbnNlY3VyZUhvc3Q/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHV2IGJ1aWxkIGJhY2tlbmQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aG9zZSBzZXR0aW5ncyBvbmx5IGFwcGx5IHdoZW4gdXNpbmcgdGhlIGB1dl9idWlsZGAgYmFja2VuZCwgb3RoZXIgYnVpbGQgYmFja2VuZHNcbiAgICogKHN1Y2ggYXMgaGF0Y2hsaW5nKSBoYXZlIHRoZWlyIG93biBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNidWlsZC1iYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBidWlsZEJhY2tlbmQ/OiBCdWlsZEJhY2tlbmRTZXR0aW5ncztcblxuICAvKipcbiAgICogUEVQIDUwOC1zdHlsZSByZXF1aXJlbWVudHMsIGUuZy4sIGBydWZmPT0wLjUuMGAsIG9yIGBydWZmIEAgaHR0cHM6Ly8uLi5gLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNidWlsZC1jb25zdHJhaW50LWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb25zdHJhaW50RGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGNhY2hlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY2FjaGUtZGlyXG4gICAqL1xuICByZWFkb25seSBjYWNoZURpcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtleXMgdG8gY29uc2lkZXIgd2hlbiBjYWNoaW5nIGJ1aWxkcyBmb3IgdGhlIHByb2plY3QuXG4gICAqXG4gICAqIENhY2hlIGtleXMgZW5hYmxlIHlvdSB0byBzcGVjaWZ5IHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGEgcmVidWlsZCB3aGVuXG4gICAqIG1vZGlmaWVkLiBCeSBkZWZhdWx0LCB1diB3aWxsIHJlYnVpbGQgYSBwcm9qZWN0IHdoZW5ldmVyIHRoZSBgcHlwcm9qZWN0LnRvbWxgLCBgc2V0dXAucHlgLFxuICAgKiBvciBgc2V0dXAuY2ZnYCBmaWxlcyBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnkgYXJlIG1vZGlmaWVkLCBvciBpZiBhIGBzcmNgIGRpcmVjdG9yeSBpc1xuICAgKiBhZGRlZCBvciByZW1vdmVkLCBpLmUuOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIGNhY2hlLWtleXMgPSBbeyBmaWxlID0gXCJweXByb2plY3QudG9tbFwiIH0sIHsgZmlsZSA9IFwic2V0dXAucHlcIiB9LCB7IGZpbGUgPSBcInNldHVwLmNmZ1wiIH0sIHsgZGlyID0gXCJzcmNcIiB9XVxuICAgKiBgYGBcbiAgICpcbiAgICogQXMgYW4gZXhhbXBsZTogaWYgYSBwcm9qZWN0IHVzZXMgZHluYW1pYyBtZXRhZGF0YSB0byByZWFkIGl0cyBkZXBlbmRlbmNpZXMgZnJvbSBhXG4gICAqIGByZXF1aXJlbWVudHMudHh0YCBmaWxlLCB5b3UgY2FuIHNwZWNpZnkgYGNhY2hlLWtleXMgPSBbeyBmaWxlID0gXCJyZXF1aXJlbWVudHMudHh0XCIgfSwgeyBmaWxlID0gXCJweXByb2plY3QudG9tbFwiIH1dYFxuICAgKiB0byBlbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBpcyByZWJ1aWx0IHdoZW5ldmVyIHRoZSBgcmVxdWlyZW1lbnRzLnR4dGAgZmlsZSBpcyBtb2RpZmllZCAoaW5cbiAgICogYWRkaXRpb24gdG8gd2F0Y2hpbmcgdGhlIGBweXByb2plY3QudG9tbGApLlxuICAgKlxuICAgKiBHbG9icyBhcmUgc3VwcG9ydGVkLCBmb2xsb3dpbmcgdGhlIHN5bnRheCBvZiB0aGUgW2BnbG9iYF0oaHR0cHM6Ly9kb2NzLnJzL2dsb2IvMC4zLjEvZ2xvYi9zdHJ1Y3QuUGF0dGVybi5odG1sKVxuICAgKiBjcmF0ZS4gRm9yIGV4YW1wbGUsIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlIHdoZW5ldmVyIGEgYC50b21sYCBmaWxlIGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeVxuICAgKiBvciBhbnkgb2YgaXRzIHN1YmRpcmVjdG9yaWVzIGlzIG1vZGlmaWVkLCB5b3UgY2FuIHNwZWNpZnkgYGNhY2hlLWtleXMgPSBbeyBmaWxlID0gXCIqXy8qLnRvbWxcIiB9XWAuXG4gICAqIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGdsb2JzIGNhbiBiZSBleHBlbnNpdmUsIGFzIHV2IG1heSBuZWVkIHRvIHdhbGsgdGhlIGZpbGVzeXN0ZW0gdG9cbiAgICogZGV0ZXJtaW5lIHdoZXRoZXIgYW55IGZpbGVzIGhhdmUgY2hhbmdlZC5cbiAgICpcbiAgICogQ2FjaGUga2V5cyBjYW4gYWxzbyBpbmNsdWRlIHZlcnNpb24gY29udHJvbCBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGlmIGEgcHJvamVjdCB1c2VzXG4gICAqIGBzZXR1cHRvb2xzX3NjbWAgdG8gcmVhZCBpdHMgdmVyc2lvbiBmcm9tIGEgR2l0IGNvbW1pdCwgeW91IGNhbiBzcGVjaWZ5IGBjYWNoZS1rZXlzID0gW3sgZ2l0ID0geyBjb21taXQgPSB0cnVlIH0sIHsgZmlsZSA9IFwicHlwcm9qZWN0LnRvbWxcIiB9XWBcbiAgICogdG8gaW5jbHVkZSB0aGUgY3VycmVudCBHaXQgY29tbWl0IGhhc2ggaW4gdGhlIGNhY2hlIGtleSAoaW4gYWRkaXRpb24gdG8gdGhlXG4gICAqIGBweXByb2plY3QudG9tbGApLiBHaXQgdGFncyBhcmUgYWxzbyBzdXBwb3J0ZWQgdmlhIGBjYWNoZS1rZXlzID0gW3sgZ2l0ID0geyBjb21taXQgPSB0cnVlLCB0YWdzID0gdHJ1ZSB9IH1dYC5cbiAgICpcbiAgICogQ2FjaGUga2V5cyBjYW4gYWxzbyBpbmNsdWRlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gRm9yIGV4YW1wbGUsIGlmIGEgcHJvamVjdCByZWxpZXMgb25cbiAgICogYE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVGAgb3Igb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGRldGVybWluZSBpdHMgYmVoYXZpb3IsIHlvdSBjYW5cbiAgICogc3BlY2lmeSBgY2FjaGUta2V5cyA9IFt7IGVudiA9IFwiTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXCIgfV1gIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlXG4gICAqIHdoZW5ldmVyIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBDYWNoZSBrZXlzIG9ubHkgYWZmZWN0IHRoZSBwcm9qZWN0IGRlZmluZWQgYnkgdGhlIGBweXByb2plY3QudG9tbGAgaW4gd2hpY2ggdGhleSdyZVxuICAgKiBzcGVjaWZpZWQgKGFzIG9wcG9zZWQgdG8sIGUuZy4sIGFmZmVjdGluZyBhbGwgbWVtYmVycyBpbiBhIHdvcmtzcGFjZSksIGFuZCBhbGwgcGF0aHMgYW5kXG4gICAqIGdsb2JzIGFyZSBpbnRlcnByZXRlZCBhcyByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NhY2hlLWtleXNcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlS2V5cz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBDaGVjayBhbiBpbmRleCBVUkwgZm9yIGV4aXN0aW5nIGZpbGVzIHRvIHNraXAgZHVwbGljYXRlIHVwbG9hZHMuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyByZXRyeWluZyBwdWJsaXNoaW5nIHRoYXQgZmFpbGVkIGFmdGVyIG9ubHkgc29tZSwgYnV0IG5vdCBhbGwgZmlsZXMgaGF2ZVxuICAgKiBiZWVuIHVwbG9hZGVkLCBhbmQgaGFuZGxlcyBlcnJvciBkdWUgdG8gcGFyYWxsZWwgdXBsb2FkcyBvZiB0aGUgc2FtZSBmaWxlLlxuICAgKlxuICAgKiBCZWZvcmUgdXBsb2FkaW5nLCB0aGUgaW5kZXggaXMgY2hlY2tlZC4gSWYgdGhlIGV4YWN0IHNhbWUgZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgsXG4gICAqIHRoZSBmaWxlIHdpbGwgbm90IGJlIHVwbG9hZGVkLiBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIHVwbG9hZCwgdGhlIGluZGV4IGlzIGNoZWNrZWRcbiAgICogYWdhaW4sIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgaWRlbnRpY2FsIGZpbGUgd2FzIHVwbG9hZGVkIHR3aWNlIGluIHBhcmFsbGVsLlxuICAgKlxuICAgKiBUaGUgZXhhY3QgYmVoYXZpb3Igd2lsbCB2YXJ5IGJhc2VkIG9uIHRoZSBpbmRleC4gV2hlbiB1cGxvYWRpbmcgdG8gUHlQSSwgdXBsb2FkaW5nIHRoZSBzYW1lXG4gICAqIGZpbGUgc3VjY2VlZHMgZXZlbiB3aXRob3V0IGAtLWNoZWNrLXVybGAsIHdoaWxlIG1vc3Qgb3RoZXIgaW5kZXhlcyBlcnJvci5cbiAgICpcbiAgICogVGhlIGluZGV4IG11c3QgcHJvdmlkZSBvbmUgb2YgdGhlIHN1cHBvcnRlZCBoYXNoZXMgKFNIQS0yNTYsIFNIQS0zODQsIG9yIFNIQS01MTIpLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjaGVjay11cmxcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb21waWxlIFB5dGhvbiBmaWxlcyB0byBieXRlY29kZSBhZnRlciBpbnN0YWxsYXRpb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGRvZXMgbm90IGNvbXBpbGUgUHl0aG9uIChgLnB5YCkgZmlsZXMgdG8gYnl0ZWNvZGUgKGBfX3B5Y2FjaGVfXy8qLnB5Y2ApO1xuICAgKiBpbnN0ZWFkLCBjb21waWxhdGlvbiBpcyBwZXJmb3JtZWQgbGF6aWx5IHRoZSBmaXJzdCB0aW1lIGEgbW9kdWxlIGlzIGltcG9ydGVkLiBGb3IgdXNlLWNhc2VzXG4gICAqIGluIHdoaWNoIHN0YXJ0IHRpbWUgaXMgY3JpdGljYWwsIHN1Y2ggYXMgQ0xJIGFwcGxpY2F0aW9ucyBhbmQgRG9ja2VyIGNvbnRhaW5lcnMsIHRoaXMgb3B0aW9uXG4gICAqIGNhbiBiZSBlbmFibGVkIHRvIHRyYWRlIGxvbmdlciBpbnN0YWxsYXRpb24gdGltZXMgZm9yIGZhc3RlciBzdGFydCB0aW1lcy5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCB1diB3aWxsIHByb2Nlc3MgdGhlIGVudGlyZSBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSAoaW5jbHVkaW5nIHBhY2thZ2VzIHRoYXRcbiAgICogYXJlIG5vdCBiZWluZyBtb2RpZmllZCBieSB0aGUgY3VycmVudCBvcGVyYXRpb24pIGZvciBjb25zaXN0ZW5jeS4gTGlrZSBwaXAsIGl0IHdpbGwgYWxzb1xuICAgKiBpZ25vcmUgZXJyb3JzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb21waWxlLWJ5dGVjb2RlXG4gICAqL1xuICByZWFkb25seSBjb21waWxlQnl0ZWNvZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlIGRpc3RyaWJ1dGlvbnMgdGhhdCB1diB3aWxsIGJ1aWxkIGNvbmN1cnJlbnRseSBhdCBhbnkgZ2l2ZW5cbiAgICogdGltZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgQ1BVIGNvcmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBDUFUgY29yZXMuXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbmN1cnJlbnQtYnVpbGRzXG4gICAqL1xuICByZWFkb25seSBjb25jdXJyZW50QnVpbGRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IGNvbmN1cnJlbnQgZG93bmxvYWRzIHRoYXQgdXYgd2lsbCBwZXJmb3JtIGF0IGFueSBnaXZlblxuICAgKiB0aW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb25jdXJyZW50LWRvd25sb2Fkc1xuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVudERvd25sb2Fkcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB0aHJlYWRzIHVzZWQgd2hlbiBpbnN0YWxsaW5nIGFuZCB1bnppcHBpbmcgcGFja2FnZXMuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIENQVSBjb3Jlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgQ1BVIGNvcmVzLlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb25jdXJyZW50LWluc3RhbGxzXG4gICAqL1xuICByZWFkb25seSBjb25jdXJyZW50SW5zdGFsbHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIHRvIHBhc3MgdG8gdGhlIFtQRVAgNTE3XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxNy8pIGJ1aWxkIGJhY2tlbmQsXG4gICAqIHNwZWNpZmllZCBhcyBgS0VZPVZBTFVFYCBwYWlycy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY29uZmlnLXNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBjb25maWdTZXR0aW5ncz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIHRvIHBhc3MgdG8gdGhlIFtQRVAgNTE3XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxNy8pIGJ1aWxkIGJhY2tlbmQgZm9yIHNwZWNpZmljIHBhY2thZ2VzLFxuICAgKiBzcGVjaWZpZWQgYXMgYEtFWT1WQUxVRWAgcGFpcnMuXG4gICAqXG4gICAqIEFjY2VwdHMgYSBtYXAgZnJvbSBwYWNrYWdlIG5hbWVzIHRvIHN0cmluZyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbmZpZy1zZXR0aW5ncy1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBjb25maWdTZXR0aW5nc1BhY2thZ2U/OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogYW55IH0gfTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHNldHMgb2YgY29uZmxpY3RpbmcgZ3JvdXBzIG9yIGV4dHJhcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY29uZmxpY3RzXG4gICAqL1xuICByZWFkb25seSBjb25mbGljdHM/OiBTY2hlbWFDb25mbGljdEl0ZW1bXVtdO1xuXG4gIC8qKlxuICAgKiBQRVAgNTA4LXN0eWxlIHJlcXVpcmVtZW50cywgZS5nLiwgYHJ1ZmY9PTAuNS4wYCwgb3IgYHJ1ZmYgQCBodHRwczovLy4uLmAuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbnN0cmFpbnQtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBjb25zdHJhaW50RGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGBkZXBlbmRlbmN5LWdyb3Vwc2AgdG8gaW5zdGFsbCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBDYW4gYWxzbyBiZSB0aGUgbGl0ZXJhbCBgXCJhbGxcImAgdG8gZGVmYXVsdCBlbmFibGUgYWxsIGdyb3Vwcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZGVmYXVsdC1ncm91cHNcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRHcm91cHM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgc2V0dGluZ3MgZm9yIGBkZXBlbmRlbmN5LWdyb3Vwc2AuXG4gICAqXG4gICAqIEN1cnJlbnRseSB0aGlzIGNhbiBvbmx5IGJlIHVzZWQgdG8gYWRkIGByZXF1aXJlcy1weXRob25gIGNvbnN0cmFpbnRzXG4gICAqIHRvIGRlcGVuZGVuY3kgZ3JvdXBzICh0eXBpY2FsbHkgdG8gaW5mb3JtIHV2IHRoYXQgeW91ciBkZXYgdG9vbGluZ1xuICAgKiBoYXMgYSBoaWdoZXIgcHl0aG9uIHJlcXVpcmVtZW50IHRoYW4geW91ciBhY3R1YWwgcHJvamVjdCkuXG4gICAqXG4gICAqIFRoaXMgY2Fubm90IGJlIHVzZWQgdG8gZGVmaW5lIGRlcGVuZGVuY3kgZ3JvdXBzLCB1c2UgdGhlIHRvcC1sZXZlbFxuICAgKiBgW2RlcGVuZGVuY3ktZ3JvdXBzXWAgdGFibGUgZm9yIHRoYXQuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2RlcGVuZGVuY3ktZ3JvdXBzXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmN5R3JvdXBzPzogeyBba2V5OiBzdHJpbmddOiBEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncyB9O1xuXG4gIC8qKlxuICAgKiBQcmUtZGVmaW5lZCBzdGF0aWMgbWV0YWRhdGEgZm9yIGRlcGVuZGVuY2llcyBvZiB0aGUgcHJvamVjdCAoZGlyZWN0IG9yIHRyYW5zaXRpdmUpLiBXaGVuXG4gICAqIHByb3ZpZGVkLCBlbmFibGVzIHRoZSByZXNvbHZlciB0byB1c2UgdGhlIHNwZWNpZmllZCBtZXRhZGF0YSBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZVxuICAgKiByZWdpc3RyeSBvciBidWlsZGluZyB0aGUgcmVsZXZhbnQgcGFja2FnZSBmcm9tIHNvdXJjZS5cbiAgICpcbiAgICogTWV0YWRhdGEgc2hvdWxkIGJlIHByb3ZpZGVkIGluIGFkaGVyZW5jZSB3aXRoIHRoZSBbTWV0YWRhdGEgMi4zXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9jb3JlLW1ldGFkYXRhLylcbiAgICogc3RhbmRhcmQsIHRob3VnaCBvbmx5IHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSByZXNwZWN0ZWQ6XG4gICAqXG4gICAqIC0gYG5hbWVgOiBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZS5cbiAgICogLSAoT3B0aW9uYWwpIGB2ZXJzaW9uYDogVGhlIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuIElmIG9taXR0ZWQsIHRoZSBtZXRhZGF0YSB3aWxsIGJlIGFwcGxpZWRcbiAgICogdG8gYWxsIHZlcnNpb25zIG9mIHRoZSBwYWNrYWdlLlxuICAgKiAtIChPcHRpb25hbCkgYHJlcXVpcmVzLWRpc3RgOiBUaGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYWNrYWdlIChlLmcuLCBgd2Vya3pldWc+PTAuMTRgKS5cbiAgICogLSAoT3B0aW9uYWwpIGByZXF1aXJlcy1weXRob25gOiBUaGUgUHl0aG9uIHZlcnNpb24gcmVxdWlyZWQgYnkgdGhlIHBhY2thZ2UgKGUuZy4sIGA+PTMuMTBgKS5cbiAgICogLSAoT3B0aW9uYWwpIGBwcm92aWRlcy1leHRyYWA6IFRoZSBleHRyYXMgcHJvdmlkZWQgYnkgdGhlIHBhY2thZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2RlcGVuZGVuY3ktbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lNZXRhZGF0YT86IFN0YXRpY01ldGFkYXRhW107XG5cbiAgLyoqXG4gICAqIFBFUCA1MDgtc3R5bGUgcmVxdWlyZW1lbnRzLCBlLmcuLCBgcnVmZj09MC41LjBgLCBvciBgcnVmZiBAIGh0dHBzOi8vLi4uYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZGV2LWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZGV2RGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCBtYXJrZXJzLCBlLmcuLCBgcHl0aG9uX3ZlcnNpb24gPj0gJzMuNidgLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNlbnZpcm9ubWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlIG5hbWVzIHRvIGV4Y2x1ZGUsIGUuZy4sIGB3ZXJremV1Z2AsIGBudW1weWAuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2V4Y2x1ZGUtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlRGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpbWl0IGNhbmRpZGF0ZSBwYWNrYWdlcyB0byB0aG9zZSB0aGF0IHdlcmUgdXBsb2FkZWQgcHJpb3IgdG8gYSBnaXZlbiBwb2ludCBpbiB0aW1lLlxuICAgKlxuICAgKiBBY2NlcHRzIGEgc3VwZXJzZXQgb2YgW1JGQyAzMzM5XShodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzMzOS5odG1sKSAoZS5nLixcbiAgICogYDIwMDYtMTItMDJUMDI6MDc6NDNaYCkuIEEgZnVsbCB0aW1lc3RhbXAgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlc29sdmVyIHdpbGxcbiAgICogYmVoYXZlIGNvbnNpc3RlbnRseSBhY3Jvc3MgdGltZXpvbmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNleGNsdWRlLW5ld2VyXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlTmV3ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpbWl0IGNhbmRpZGF0ZSBwYWNrYWdlcyBmb3Igc3BlY2lmaWMgcGFja2FnZXMgdG8gdGhvc2UgdGhhdCB3ZXJlIHVwbG9hZGVkIHByaW9yIHRvIHRoZSBnaXZlbiBkYXRlLlxuICAgKlxuICAgKiBBY2NlcHRzIHBhY2thZ2UtZGF0ZSBwYWlycyBpbiBhIGRpY3Rpb25hcnkgZm9ybWF0LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNleGNsdWRlLW5ld2VyLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVOZXdlclBhY2thZ2U/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGJ1aWxkIGRlcGVuZGVuY2llcyBmb3IgcGFja2FnZXMuXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIGV4dGVuZGluZyB0aGUgUEVQIDUxNyBidWlsZCBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMgd2l0aFxuICAgKiBhZGRpdGlvbmFsIHBhY2thZ2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcGFja2FnZXMgdGhhdCBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIHBhY2thZ2VzIGxpa2VcbiAgICogYHBpcGAsIGFuZCBkbyBub3QgZGVjbGFyZSB0aGVtIGFzIGJ1aWxkIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZXh0cmEtYnVpbGQtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBleHRyYUJ1aWxkRGVwZW5kZW5jaWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IHdoZW4gYnVpbGRpbmcgY2VydGFpbiBwYWNrYWdlcy5cbiAgICpcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVudmlyb25tZW50IHdoZW4gYnVpbGRpbmcgdGhlXG4gICAqIHNwZWNpZmllZCBwYWNrYWdlcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZXh0cmEtYnVpbGQtdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBleHRyYUJ1aWxkVmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqXG4gICAqIEV4dHJhIFVSTHMgb2YgcGFja2FnZSBpbmRleGVzIHRvIHVzZSwgaW4gYWRkaXRpb24gdG8gYC0taW5kZXgtdXJsYC5cbiAgICpcbiAgICogQWNjZXB0cyBlaXRoZXIgYSByZXBvc2l0b3J5IGNvbXBsaWFudCB3aXRoIFtQRVAgNTAzXShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUwMy8pXG4gICAqICh0aGUgc2ltcGxlIHJlcG9zaXRvcnkgQVBJKSwgb3IgYSBsb2NhbCBkaXJlY3RvcnkgbGFpZCBvdXQgaW4gdGhlIHNhbWUgZm9ybWF0LlxuICAgKlxuICAgKiBBbGwgaW5kZXhlcyBwcm92aWRlZCB2aWEgdGhpcyBmbGFnIHRha2UgcHJpb3JpdHkgb3ZlciB0aGUgaW5kZXggc3BlY2lmaWVkIGJ5XG4gICAqIFtgaW5kZXhfdXJsYF0oI2luZGV4LXVybCkgb3IgW2BpbmRleGBdKCNpbmRleCkgd2l0aCBgZGVmYXVsdCA9IHRydWVgLiBXaGVuIG11bHRpcGxlIGluZGV4ZXNcbiAgICogYXJlIHByb3ZpZGVkLCBlYXJsaWVyIHZhbHVlcyB0YWtlIHByaW9yaXR5LlxuICAgKlxuICAgKiBUbyBjb250cm9sIHV2J3MgcmVzb2x1dGlvbiBzdHJhdGVneSB3aGVuIG11bHRpcGxlIGluZGV4ZXMgYXJlIHByZXNlbnQsIHNlZVxuICAgKiBbYGluZGV4X3N0cmF0ZWd5YF0oI2luZGV4LXN0cmF0ZWd5KS5cbiAgICpcbiAgICogKERlcHJlY2F0ZWQ6IHVzZSBgaW5kZXhgIGluc3RlYWQuKVxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNleHRyYS1pbmRleC11cmxcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhSW5kZXhVcmw/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTG9jYXRpb25zIHRvIHNlYXJjaCBmb3IgY2FuZGlkYXRlIGRpc3RyaWJ1dGlvbnMsIGluIGFkZGl0aW9uIHRvIHRob3NlIGZvdW5kIGluIHRoZSByZWdpc3RyeVxuICAgKiBpbmRleGVzLlxuICAgKlxuICAgKiBJZiBhIHBhdGgsIHRoZSB0YXJnZXQgbXVzdCBiZSBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHBhY2thZ2VzIGFzIHdoZWVsIGZpbGVzIChgLndobGApIG9yXG4gICAqIHNvdXJjZSBkaXN0cmlidXRpb25zIChlLmcuLCBgLnRhci5nemAgb3IgYC56aXBgKSBhdCB0aGUgdG9wIGxldmVsLlxuICAgKlxuICAgKiBJZiBhIFVSTCwgdGhlIHBhZ2UgbXVzdCBjb250YWluIGEgZmxhdCBsaXN0IG9mIGxpbmtzIHRvIHBhY2thZ2UgZmlsZXMgYWRoZXJpbmcgdG8gdGhlXG4gICAqIGZvcm1hdHMgZGVzY3JpYmVkIGFib3ZlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNmaW5kLWxpbmtzXG4gICAqL1xuICByZWFkb25seSBmaW5kTGlua3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHNlbGVjdGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhIGdpdmVuIHBhY2thZ2UgYWNyb3NzIFB5dGhvblxuICAgKiB2ZXJzaW9ucyBhbmQgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIG9wdGltaXplIGZvciBzZWxlY3RpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggcGFja2FnZSBmb3IgZWFjaFxuICAgKiBzdXBwb3J0ZWQgUHl0aG9uIHZlcnNpb24gKGByZXF1aXJlcy1weXRob25gKSwgd2hpbGUgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkXG4gICAqIHZlcnNpb25zIGFjcm9zcyBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIFVuZGVyIGBmZXdlc3RgLCB1diB3aWxsIG1pbmltaXplIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgdmVyc2lvbnMgZm9yIGVhY2ggcGFja2FnZSxcbiAgICogcHJlZmVycmluZyBvbGRlciB2ZXJzaW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggYSB3aWRlciByYW5nZSBvZiBzdXBwb3J0ZWQgUHl0aG9uXG4gICAqIHZlcnNpb25zIG9yIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZm9yay1zdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgZm9ya1N0cmF0ZWd5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXhlcyB0byB1c2Ugd2hlbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBBY2NlcHRzIGVpdGhlciBhIHJlcG9zaXRvcnkgY29tcGxpYW50IHdpdGggW1BFUCA1MDNdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTAzLylcbiAgICogKHRoZSBzaW1wbGUgcmVwb3NpdG9yeSBBUEkpLCBvciBhIGxvY2FsIGRpcmVjdG9yeSBsYWlkIG91dCBpbiB0aGUgc2FtZSBmb3JtYXQuXG4gICAqXG4gICAqIEluZGV4ZXMgYXJlIGNvbnNpZGVyZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkncmUgZGVmaW5lZCwgc3VjaCB0aGF0IHRoZSBmaXJzdC1kZWZpbmVkXG4gICAqIGluZGV4IGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eS4gRnVydGhlciwgdGhlIGluZGV4ZXMgcHJvdmlkZWQgYnkgdGhpcyBzZXR0aW5nIGFyZSBnaXZlblxuICAgKiBoaWdoZXIgcHJpb3JpdHkgdGhhbiBhbnkgaW5kZXhlcyBzcGVjaWZpZWQgdmlhIFtgaW5kZXhfdXJsYF0oI2luZGV4LXVybCkgb3JcbiAgICogW2BleHRyYV9pbmRleF91cmxgXSgjZXh0cmEtaW5kZXgtdXJsKS4gdXYgd2lsbCBvbmx5IGNvbnNpZGVyIHRoZSBmaXJzdCBpbmRleCB0aGF0IGNvbnRhaW5zXG4gICAqIGEgZ2l2ZW4gcGFja2FnZSwgdW5sZXNzIGFuIGFsdGVybmF0aXZlIFtpbmRleCBzdHJhdGVneV0oI2luZGV4LXN0cmF0ZWd5KSBpcyBzcGVjaWZpZWQuXG4gICAqXG4gICAqIElmIGFuIGluZGV4IGlzIG1hcmtlZCBhcyBgZXhwbGljaXQgPSB0cnVlYCwgaXQgd2lsbCBiZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciB0aGVcbiAgICogZGVwZW5kZW5jaWVzIHRoYXQgc2VsZWN0IGl0IGV4cGxpY2l0bHkgdmlhIGBbdG9vbC51di5zb3VyY2VzXWAsIGFzIGluOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcInB5dG9yY2hcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vZG93bmxvYWQucHl0b3JjaC5vcmcvd2hsL2N1MTIxXCJcbiAgICogZXhwbGljaXQgPSB0cnVlXG4gICAqXG4gICAqIFt0b29sLnV2LnNvdXJjZXNdXG4gICAqIHRvcmNoID0geyBpbmRleCA9IFwicHl0b3JjaFwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIElmIGFuIGluZGV4IGlzIG1hcmtlZCBhcyBgZGVmYXVsdCA9IHRydWVgLCBpdCB3aWxsIGJlIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhlIHByaW9yaXRpemVkIGxpc3QsIHN1Y2ggdGhhdCBpdCBpc1xuICAgKiBnaXZlbiB0aGUgbG93ZXN0IHByaW9yaXR5IHdoZW4gcmVzb2x2aW5nIHBhY2thZ2VzLiBBZGRpdGlvbmFsbHksIG1hcmtpbmcgYW4gaW5kZXggYXMgZGVmYXVsdCB3aWxsIGRpc2FibGUgdGhlXG4gICAqIFB5UEkgZGVmYXVsdCBpbmRleC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jaW5kZXhcbiAgICovXG4gIHJlYWRvbmx5IGluZGV4PzogSW5kZXhbXTtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHJlc29sdmluZyBhZ2FpbnN0IG11bHRpcGxlIGluZGV4IFVSTHMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHdpbGwgc3RvcCBhdCB0aGUgZmlyc3QgaW5kZXggb24gd2hpY2ggYSBnaXZlbiBwYWNrYWdlIGlzIGF2YWlsYWJsZSwgYW5kXG4gICAqIGxpbWl0IHJlc29sdXRpb25zIHRvIHRob3NlIHByZXNlbnQgb24gdGhhdCBmaXJzdCBpbmRleCAoYGZpcnN0LWluZGV4YCkuIFRoaXMgcHJldmVudHNcbiAgICogXCJkZXBlbmRlbmN5IGNvbmZ1c2lvblwiIGF0dGFja3MsIHdoZXJlYnkgYW4gYXR0YWNrZXIgY2FuIHVwbG9hZCBhIG1hbGljaW91cyBwYWNrYWdlIHVuZGVyIHRoZVxuICAgKiBzYW1lIG5hbWUgdG8gYW4gYWx0ZXJuYXRlIGluZGV4LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNpbmRleC1zdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhTdHJhdGVneT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgUHl0aG9uIHBhY2thZ2UgaW5kZXggKGJ5IGRlZmF1bHQ6IDxodHRwczovL3B5cGkub3JnL3NpbXBsZT4pLlxuICAgKlxuICAgKiBBY2NlcHRzIGVpdGhlciBhIHJlcG9zaXRvcnkgY29tcGxpYW50IHdpdGggW1BFUCA1MDNdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTAzLylcbiAgICogKHRoZSBzaW1wbGUgcmVwb3NpdG9yeSBBUEkpLCBvciBhIGxvY2FsIGRpcmVjdG9yeSBsYWlkIG91dCBpbiB0aGUgc2FtZSBmb3JtYXQuXG4gICAqXG4gICAqIFRoZSBpbmRleCBwcm92aWRlZCBieSB0aGlzIHNldHRpbmcgaXMgZ2l2ZW4gbG93ZXIgcHJpb3JpdHkgdGhhbiBhbnkgaW5kZXhlcyBzcGVjaWZpZWQgdmlhXG4gICAqIFtgZXh0cmFfaW5kZXhfdXJsYF0oI2V4dHJhLWluZGV4LXVybCkgb3IgW2BpbmRleGBdKCNpbmRleCkuXG4gICAqXG4gICAqIChEZXByZWNhdGVkOiB1c2UgYGluZGV4YCBpbnN0ZWFkLilcbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jaW5kZXgtdXJsXG4gICAqL1xuICByZWFkb25seSBpbmRleFVybD86IHN0cmluZztcblxuICAvKipcbiAgICogQXR0ZW1wdCB0byB1c2UgYGtleXJpbmdgIGZvciBhdXRoZW50aWNhdGlvbiBmb3IgaW5kZXggVVJMcy5cbiAgICpcbiAgICogQXQgcHJlc2VudCwgb25seSBgLS1rZXlyaW5nLXByb3ZpZGVyIHN1YnByb2Nlc3NgIGlzIHN1cHBvcnRlZCwgd2hpY2ggY29uZmlndXJlcyB1diB0b1xuICAgKiB1c2UgdGhlIGBrZXlyaW5nYCBDTEkgdG8gaGFuZGxlIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNrZXlyaW5nLXByb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBrZXlyaW5nUHJvdmlkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdG8gdXNlIHdoZW4gaW5zdGFsbGluZyBwYWNrYWdlcyBmcm9tIHRoZSBnbG9iYWwgY2FjaGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGBjbG9uZWAgKGFsc28ga25vd24gYXMgQ29weS1vbi1Xcml0ZSkgb24gbWFjT1MsIGFuZCBgaGFyZGxpbmtgIG9uIExpbnV4IGFuZFxuICAgKiBXaW5kb3dzLlxuICAgKlxuICAgKiBXQVJOSU5HOiBUaGUgdXNlIG9mIHN5bWxpbmsgbGluayBtb2RlIGlzIGRpc2NvdXJhZ2VkLCBhcyB0aGV5IGNyZWF0ZSB0aWdodCBjb3VwbGluZyBiZXR3ZWVuXG4gICAqIHRoZSBjYWNoZSBhbmQgdGhlIHRhcmdldCBlbnZpcm9ubWVudC4gRm9yIGV4YW1wbGUsIGNsZWFyaW5nIHRoZSBjYWNoZSAoYHV2IGNhY2hlIGNsZWFuYClcbiAgICogd2lsbCBicmVhayBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGJ5IHdheSBvZiByZW1vdmluZyB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmlsZXMuIFVzZVxuICAgKiBzeW1saW5rcyB3aXRoIGNhdXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGNsb25lYCAoYWxzbyBrbm93biBhcyBDb3B5LW9uLVdyaXRlKSBvbiBtYWNPUywgYW5kIGBoYXJkbGlua2Agb24gTGludXggYW5kXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2xpbmstbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbGlua01vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb2plY3QgaXMgbWFuYWdlZCBieSB1di4gSWYgYGZhbHNlYCwgdXYgd2lsbCBpZ25vcmUgdGhlIHByb2plY3Qgd2hlblxuICAgKiBgdXYgcnVuYCBpcyBpbnZva2VkLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNtYW5hZ2VkXG4gICAqL1xuICByZWFkb25seSBtYW5hZ2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBsb2FkIFRMUyBjZXJ0aWZpY2F0ZXMgZnJvbSB0aGUgcGxhdGZvcm0ncyBuYXRpdmUgY2VydGlmaWNhdGUgc3RvcmUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGxvYWRzIGNlcnRpZmljYXRlcyBmcm9tIHRoZSBidW5kbGVkIGB3ZWJwa2ktcm9vdHNgIGNyYXRlLiBUaGVcbiAgICogYHdlYnBraS1yb290c2AgYXJlIGEgcmVsaWFibGUgc2V0IG9mIHRydXN0IHJvb3RzIGZyb20gTW96aWxsYSwgYW5kIGluY2x1ZGluZyB0aGVtIGluIHV2XG4gICAqIGltcHJvdmVzIHBvcnRhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSAoZXNwZWNpYWxseSBvbiBtYWNPUykuXG4gICAqXG4gICAqIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMsIHlvdSBtYXkgd2FudCB0byB1c2UgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIGNlcnRpZmljYXRlIHN0b3JlLFxuICAgKiBlc3BlY2lhbGx5IGlmIHlvdSdyZSByZWx5aW5nIG9uIGEgY29ycG9yYXRlIHRydXN0IHJvb3QgKGUuZy4sIGZvciBhIG1hbmRhdG9yeSBwcm94eSkgdGhhdCdzXG4gICAqIGluY2x1ZGVkIGluIHlvdXIgc3lzdGVtJ3MgY2VydGlmaWNhdGUgc3RvcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25hdGl2ZS10bHNcbiAgICovXG4gIHJlYWRvbmx5IG5hdGl2ZVRscz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERvbid0IGluc3RhbGwgcHJlLWJ1aWx0IHdoZWVscy5cbiAgICpcbiAgICogVGhlIGdpdmVuIHBhY2thZ2VzIHdpbGwgYmUgYnVpbHQgYW5kIGluc3RhbGxlZCBmcm9tIHNvdXJjZS4gVGhlIHJlc29sdmVyIHdpbGwgc3RpbGwgdXNlXG4gICAqIHByZS1idWlsdCB3aGVlbHMgdG8gZXh0cmFjdCBwYWNrYWdlIG1ldGFkYXRhLCBpZiBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWJpbmFyeVxuICAgKi9cbiAgcmVhZG9ubHkgbm9CaW5hcnk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb24ndCBpbnN0YWxsIHByZS1idWlsdCB3aGVlbHMgZm9yIGEgc3BlY2lmaWMgcGFja2FnZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tYmluYXJ5LXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IG5vQmluYXJ5UGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEb24ndCBidWlsZCBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCByZXNvbHZpbmcgd2lsbCBub3QgcnVuIGFyYml0cmFyeSBQeXRob24gY29kZS4gVGhlIGNhY2hlZCB3aGVlbHMgb2ZcbiAgICogYWxyZWFkeS1idWlsdCBzb3VyY2UgZGlzdHJpYnV0aW9ucyB3aWxsIGJlIHJldXNlZCwgYnV0IG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlIGJ1aWxkaW5nXG4gICAqIGRpc3RyaWJ1dGlvbnMgd2lsbCBleGl0IHdpdGggYW4gZXJyb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWJ1aWxkXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogQXNzdW1lcyB0aGF0IGJ1aWxkIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkgW1BFUCA1MThdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE4LylcbiAgICogYXJlIGFscmVhZHkgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1idWlsZC1pc29sYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG5vQnVpbGRJc29sYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGlzb2xhdGlvbiB3aGVuIGJ1aWxkaW5nIHNvdXJjZSBkaXN0cmlidXRpb25zIGZvciBhIHNwZWNpZmljIHBhY2thZ2UuXG4gICAqXG4gICAqIEFzc3VtZXMgdGhhdCB0aGUgcGFja2FnZXMnIGJ1aWxkIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkgW1BFUCA1MThdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE4LylcbiAgICogYXJlIGFscmVhZHkgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1idWlsZC1pc29sYXRpb24tcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9CdWlsZElzb2xhdGlvblBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRG9uJ3QgYnVpbGQgc291cmNlIGRpc3RyaWJ1dGlvbnMgZm9yIGEgc3BlY2lmaWMgcGFja2FnZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tYnVpbGQtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9CdWlsZFBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXZvaWQgcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gdGhlIGNhY2hlLCBpbnN0ZWFkIHVzaW5nIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgdGhlXG4gICAqIGR1cmF0aW9uIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWNhY2hlXG4gICAqL1xuICByZWFkb25seSBub0NhY2hlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWdub3JlIGFsbCByZWdpc3RyeSBpbmRleGVzIChlLmcuLCBQeVBJKSwgaW5zdGVhZCByZWx5aW5nIG9uIGRpcmVjdCBVUkwgZGVwZW5kZW5jaWVzIGFuZFxuICAgKiB0aG9zZSBwcm92aWRlZCB2aWEgYC0tZmluZC1saW5rc2AuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWluZGV4XG4gICAqL1xuICByZWFkb25seSBub0luZGV4PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWdub3JlIHRoZSBgdG9vbC51di5zb3VyY2VzYCB0YWJsZSB3aGVuIHJlc29sdmluZyBkZXBlbmRlbmNpZXMuIFVzZWQgdG8gbG9jayBhZ2FpbnN0IHRoZVxuICAgKiBzdGFuZGFyZHMtY29tcGxpYW50LCBwdWJsaXNoYWJsZSBwYWNrYWdlIG1ldGFkYXRhLCBhcyBvcHBvc2VkIHRvIHVzaW5nIGFueSBsb2NhbCBvciBHaXRcbiAgICogc291cmNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9Tb3VyY2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBuZXR3b3JrIGFjY2VzcywgcmVseWluZyBvbmx5IG9uIGxvY2FsbHkgY2FjaGVkIGRhdGEgYW5kIGxvY2FsbHkgYXZhaWxhYmxlIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNvZmZsaW5lXG4gICAqL1xuICByZWFkb25seSBvZmZsaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUEVQIDUwOC1zdHlsZSByZXF1aXJlbWVudHMsIGUuZy4sIGBydWZmPT0wLjUuMGAsIG9yIGBydWZmIEAgaHR0cHM6Ly8uLi5gLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNvdmVycmlkZS1kZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlRGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb2plY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBQeXRob24gcGFja2FnZSwgb3IgYSBub24tcGFja2FnZSAoXCJ2aXJ0dWFsXCIpXG4gICAqIHByb2plY3QuXG4gICAqXG4gICAqIFBhY2thZ2VzIGFyZSBidWlsdCBhbmQgaW5zdGFsbGVkIGludG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaW4gZWRpdGFibGUgbW9kZSBhbmQgdGh1c1xuICAgKiByZXF1aXJlIGEgYnVpbGQgYmFja2VuZCwgd2hpbGUgdmlydHVhbCBwcm9qZWN0cyBhcmUgX25vdF8gYnVpbHQgb3IgaW5zdGFsbGVkOyBpbnN0ZWFkLCBvbmx5XG4gICAqIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIENyZWF0aW5nIGEgcGFja2FnZSByZXF1aXJlcyB0aGF0IGEgYGJ1aWxkLXN5c3RlbWAgaXMgcHJlc2VudCBpbiB0aGUgYHB5cHJvamVjdC50b21sYCwgYW5kXG4gICAqIHRoYXQgdGhlIHByb2plY3QgYWRoZXJlcyB0byBhIHN0cnVjdHVyZSB0aGF0IGFkaGVyZXMgdG8gdGhlIGJ1aWxkIGJhY2tlbmQncyBleHBlY3RhdGlvbnNcbiAgICogKGUuZy4sIGEgYHNyY2AgbGF5b3V0KS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3BpcFxuICAgKi9cbiAgcmVhZG9ubHkgcGlwPzogUGlwT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIGNvbnNpZGVyaW5nIHByZS1yZWxlYXNlIHZlcnNpb25zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIGFjY2VwdCBwcmUtcmVsZWFzZXMgZm9yIHBhY2thZ2VzIHRoYXQgX29ubHlfIHB1Ymxpc2ggcHJlLXJlbGVhc2VzLFxuICAgKiBhbG9uZyB3aXRoIGZpcnN0LXBhcnR5IHJlcXVpcmVtZW50cyB0aGF0IGNvbnRhaW4gYW4gZXhwbGljaXQgcHJlLXJlbGVhc2UgbWFya2VyIGluIHRoZVxuICAgKiBkZWNsYXJlZCBzcGVjaWZpZXJzIChgaWYtbmVjZXNzYXJ5LW9yLWV4cGxpY2l0YCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3ByZXJlbGVhc2VcbiAgICovXG4gIHJlYWRvbmx5IHByZXJlbGVhc2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGV4cGVyaW1lbnRhbCwgcHJldmlldyBmZWF0dXJlcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcHJldmlld1xuICAgKi9cbiAgcmVhZG9ubHkgcHJldmlldz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgZm9yIHB1Ymxpc2hpbmcgcGFja2FnZXMgdG8gdGhlIFB5dGhvbiBwYWNrYWdlIGluZGV4IChieSBkZWZhdWx0OlxuICAgKiA8aHR0cHM6Ly91cGxvYWQucHlwaS5vcmcvbGVnYWN5Lz4pLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNwdWJsaXNoLXVybFxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaFVybD86IHN0cmluZztcblxuICAvKipcbiAgICogTWlycm9yIFVSTCB0byB1c2UgZm9yIGRvd25sb2FkaW5nIG1hbmFnZWQgUHlQeSBpbnN0YWxsYXRpb25zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtYW5hZ2VkIFB5UHkgaW5zdGFsbGF0aW9ucyBhcmUgZG93bmxvYWRlZCBmcm9tIFtkb3dubG9hZHMucHl0aG9uLm9yZ10oaHR0cHM6Ly9kb3dubG9hZHMucHl0aG9uLm9yZy8pLlxuICAgKiBUaGlzIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBtaXJyb3IgVVJMIHRvIHVzZSBhIGRpZmZlcmVudCBzb3VyY2UgZm9yIFB5UHkgaW5zdGFsbGF0aW9ucy5cbiAgICogVGhlIHByb3ZpZGVkIFVSTCB3aWxsIHJlcGxhY2UgYGh0dHBzOi8vZG93bmxvYWRzLnB5dGhvbi5vcmcvcHlweWAgaW4sIGUuZy4sIGBodHRwczovL2Rvd25sb2Fkcy5weXRob24ub3JnL3B5cHkvcHlweTMuOC12Ny4zLjctb3N4NjQudGFyLmJ6MmAuXG4gICAqXG4gICAqIERpc3RyaWJ1dGlvbnMgY2FuIGJlIHJlYWQgZnJvbSBhXG4gICAqIGxvY2FsIGRpcmVjdG9yeSBieSB1c2luZyB0aGUgYGZpbGU6Ly9gIFVSTCBzY2hlbWUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B5cHktaW5zdGFsbC1taXJyb3JcbiAgICovXG4gIHJlYWRvbmx5IHB5cHlJbnN0YWxsTWlycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IFB5dGhvbiBkb3dubG9hZHMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B5dGhvbi1kb3dubG9hZHNcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbkRvd25sb2Fkcz86IHN0cmluZztcblxuICAvKipcbiAgICogVVJMIHBvaW50aW5nIHRvIEpTT04gb2YgY3VzdG9tIFB5dGhvbiBpbnN0YWxsYXRpb25zLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgY3VycmVudGx5LCBvbmx5IGxvY2FsIHBhdGhzIGFyZSBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B5dGhvbi1kb3dubG9hZHMtanNvbi11cmxcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbkRvd25sb2Fkc0pzb25Vcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pcnJvciBVUkwgZm9yIGRvd25sb2FkaW5nIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnMgYXJlIGRvd25sb2FkZWQgZnJvbSBbYHB5dGhvbi1idWlsZC1zdGFuZGFsb25lYF0oaHR0cHM6Ly9naXRodWIuY29tL2FzdHJhbC1zaC9weXRob24tYnVpbGQtc3RhbmRhbG9uZSkuXG4gICAqIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBhIG1pcnJvciBVUkwgdG8gdXNlIGEgZGlmZmVyZW50IHNvdXJjZSBmb3IgUHl0aG9uIGluc3RhbGxhdGlvbnMuXG4gICAqIFRoZSBwcm92aWRlZCBVUkwgd2lsbCByZXBsYWNlIGBodHRwczovL2dpdGh1Yi5jb20vYXN0cmFsLXNoL3B5dGhvbi1idWlsZC1zdGFuZGFsb25lL3JlbGVhc2VzL2Rvd25sb2FkYCBpbiwgZS5nLiwgYGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvcHl0aG9uLWJ1aWxkLXN0YW5kYWxvbmUvcmVsZWFzZXMvZG93bmxvYWQvMjAyNDA3MTMvY3B5dGhvbi0zLjEyLjQlMkIyMDI0MDcxMy1hYXJjaDY0LWFwcGxlLWRhcndpbi1pbnN0YWxsX29ubHkudGFyLmd6YC5cbiAgICpcbiAgICogRGlzdHJpYnV0aW9ucyBjYW4gYmUgcmVhZCBmcm9tIGEgbG9jYWwgZGlyZWN0b3J5IGJ5IHVzaW5nIHRoZSBgZmlsZTovL2AgVVJMIHNjaGVtZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcHl0aG9uLWluc3RhbGwtbWlycm9yXG4gICAqL1xuICByZWFkb25seSBweXRob25JbnN0YWxsTWlycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZWZlciB1c2luZyBQeXRob24gaW5zdGFsbGF0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHN5c3RlbSwgb3JcbiAgICogdGhvc2UgdGhhdCBhcmUgZG93bmxvYWRlZCBhbmQgaW5zdGFsbGVkIGJ5IHV2LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNweXRob24tcHJlZmVyZW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgcHl0aG9uUHJlZmVyZW5jZT86IHN0cmluZztcblxuICAvKipcbiAgICogUmVpbnN0YWxsIGFsbCBwYWNrYWdlcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkncmUgYWxyZWFkeSBpbnN0YWxsZWQuIEltcGxpZXMgYHJlZnJlc2hgLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNyZWluc3RhbGxcbiAgICovXG4gIHJlYWRvbmx5IHJlaW5zdGFsbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlaW5zdGFsbCBhIHNwZWNpZmljIHBhY2thZ2UsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCdzIGFscmVhZHkgaW5zdGFsbGVkLiBJbXBsaWVzXG4gICAqIGByZWZyZXNoLXBhY2thZ2VgLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNyZWluc3RhbGwtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVpbnN0YWxsUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgbWFya2VycywgZS5nLiwgYHN5c19wbGF0Zm9ybSA9PSAnZGFyd2luJy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcmVxdWlyZWQtZW52aXJvbm1lbnRzXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZEVudmlyb25tZW50cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFbmZvcmNlIGEgcmVxdWlyZW1lbnQgb24gdGhlIHZlcnNpb24gb2YgdXYuXG4gICAqXG4gICAqIElmIHRoZSB2ZXJzaW9uIG9mIHV2IGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVtZW50IGF0IHJ1bnRpbWUsIHV2IHdpbGwgZXhpdFxuICAgKiB3aXRoIGFuIGVycm9yLlxuICAgKlxuICAgKiBBY2NlcHRzIGEgW1BFUCA0NDBdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNDQwLykgc3BlY2lmaWVyLCBsaWtlIGA9PTAuNS4wYCBvciBgPj0wLjUuMGAuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3JlcXVpcmVkLXZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHNlbGVjdGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tcGF0aWJsZSB2ZXJzaW9ucyBmb3IgYSBnaXZlblxuICAgKiBwYWNrYWdlIHJlcXVpcmVtZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIHVzZSB0aGUgbGF0ZXN0IGNvbXBhdGlibGUgdmVyc2lvbiBvZiBlYWNoIHBhY2thZ2UgKGBoaWdoZXN0YCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3Jlc29sdXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2VzIHRvIHVzZSB3aGVuIHJlc29sdmluZyBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIGB0b29sLnV2LnNvdXJjZXNgIGVucmljaGVzIHRoZSBkZXBlbmRlbmN5IG1ldGFkYXRhIHdpdGggYWRkaXRpb25hbCBzb3VyY2VzLCBpbmNvcnBvcmF0ZWRcbiAgICogZHVyaW5nIGRldmVsb3BtZW50LiBBIGRlcGVuZGVuY3kgc291cmNlIGNhbiBiZSBhIEdpdCByZXBvc2l0b3J5LCBhIFVSTCwgYSBsb2NhbCBwYXRoLCBvciBhblxuICAgKiBhbHRlcm5hdGl2ZSByZWdpc3RyeS5cbiAgICpcbiAgICogU2VlIFtEZXBlbmRlbmNpZXNdKGh0dHBzOi8vZG9jcy5hc3RyYWwuc2gvdXYvY29uY2VwdHMvcHJvamVjdHMvZGVwZW5kZW5jaWVzLykgZm9yIG1vcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3NvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueVtdIH07XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB0cnVzdGVkIHB1Ymxpc2hpbmcuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGNoZWNrcyBmb3IgdHJ1c3RlZCBwdWJsaXNoaW5nIHdoZW4gcnVubmluZyBpbiBhIHN1cHBvcnRlZCBlbnZpcm9ubWVudCwgYnV0XG4gICAqIGlnbm9yZXMgaXQgaWYgaXQgaXNuJ3QgY29uZmlndXJlZC5cbiAgICpcbiAgICogdXYncyBzdXBwb3J0ZWQgZW52aXJvbm1lbnRzIGZvciB0cnVzdGVkIHB1Ymxpc2hpbmcgaW5jbHVkZSBHaXRIdWIgQWN0aW9ucyBhbmQgR2l0TGFiIENJL0NELlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiN0cnVzdGVkLXB1Ymxpc2hpbmdcbiAgICovXG4gIHJlYWRvbmx5IHRydXN0ZWRQdWJsaXNoaW5nPzogVHJ1c3RlZFB1Ymxpc2hpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93IHBhY2thZ2UgdXBncmFkZXMsIGlnbm9yaW5nIHBpbm5lZCB2ZXJzaW9ucyBpbiBhbnkgZXhpc3Rpbmcgb3V0cHV0IGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3VwZ3JhZGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvdyB1cGdyYWRlcyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLCBpZ25vcmluZyBwaW5uZWQgdmVyc2lvbnMgaW4gYW55IGV4aXN0aW5nIG91dHB1dFxuICAgKiBmaWxlLlxuICAgKlxuICAgKiBBY2NlcHRzIGJvdGggc3RhbmRhbG9uZSBwYWNrYWdlIG5hbWVzIChgcnVmZmApIGFuZCB2ZXJzaW9uIHNwZWNpZmllcnMgKGBydWZmPDAuNS4wYCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3VwZ3JhZGUtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZVBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBkZWZpbml0aW9uIGZvciB0aGUgcHJvamVjdCwgaWYgYW55LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiN3b3Jrc3BhY2VcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtzcGFjZT86IFRvb2xVdldvcmtzcGFjZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVXZDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVXZDb25maWd1cmF0aW9uKG9iajogVXZDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWRkLWJvdW5kcyc6IG9iai5hZGRCb3VuZHMsXG4gICAgJ2FsbG93LWluc2VjdXJlLWhvc3QnOiBvYmouYWxsb3dJbnNlY3VyZUhvc3Q/Lm1hcCh5ID0+IHkpLFxuICAgICdidWlsZC1iYWNrZW5kJzogdG9Kc29uX0J1aWxkQmFja2VuZFNldHRpbmdzKG9iai5idWlsZEJhY2tlbmQpLFxuICAgICdidWlsZC1jb25zdHJhaW50LWRlcGVuZGVuY2llcyc6IG9iai5idWlsZENvbnN0cmFpbnREZXBlbmRlbmNpZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdjYWNoZS1kaXInOiBvYmouY2FjaGVEaXIsXG4gICAgJ2NhY2hlLWtleXMnOiBvYmouY2FjaGVLZXlzPy5tYXAoeSA9PiB5KSxcbiAgICAnY2hlY2stdXJsJzogb2JqLmNoZWNrVXJsLFxuICAgICdjb21waWxlLWJ5dGVjb2RlJzogb2JqLmNvbXBpbGVCeXRlY29kZSxcbiAgICAnY29uY3VycmVudC1idWlsZHMnOiBvYmouY29uY3VycmVudEJ1aWxkcyxcbiAgICAnY29uY3VycmVudC1kb3dubG9hZHMnOiBvYmouY29uY3VycmVudERvd25sb2FkcyxcbiAgICAnY29uY3VycmVudC1pbnN0YWxscyc6IG9iai5jb25jdXJyZW50SW5zdGFsbHMsXG4gICAgJ2NvbmZpZy1zZXR0aW5ncyc6ICgob2JqLmNvbmZpZ1NldHRpbmdzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouY29uZmlnU2V0dGluZ3MpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdjb25maWctc2V0dGluZ3MtcGFja2FnZSc6ICgob2JqLmNvbmZpZ1NldHRpbmdzUGFja2FnZSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmNvbmZpZ1NldHRpbmdzUGFja2FnZSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06ICgoaVsxXSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMoaVsxXSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSkgfSksIHt9KSksXG4gICAgJ2NvbmZsaWN0cyc6IG9iai5jb25mbGljdHM/Lm1hcCh5ID0+IHk/Lm1hcCh5ID0+IHRvSnNvbl9TY2hlbWFDb25mbGljdEl0ZW0oeSkpKSxcbiAgICAnY29uc3RyYWludC1kZXBlbmRlbmNpZXMnOiBvYmouY29uc3RyYWludERlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ2RlZmF1bHQtZ3JvdXBzJzogb2JqLmRlZmF1bHRHcm91cHMsXG4gICAgJ2RlcGVuZGVuY3ktZ3JvdXBzJzogKChvYmouZGVwZW5kZW5jeUdyb3VwcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmRlcGVuZGVuY3lHcm91cHMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiB0b0pzb25fRGVwZW5kZW5jeUdyb3VwU2V0dGluZ3MoaVsxXSkgfSksIHt9KSksXG4gICAgJ2RlcGVuZGVuY3ktbWV0YWRhdGEnOiBvYmouZGVwZW5kZW5jeU1ldGFkYXRhPy5tYXAoeSA9PiB0b0pzb25fU3RhdGljTWV0YWRhdGEoeSkpLFxuICAgICdkZXYtZGVwZW5kZW5jaWVzJzogb2JqLmRldkRlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ2Vudmlyb25tZW50cyc6IG9iai5lbnZpcm9ubWVudHM/Lm1hcCh5ID0+IHkpLFxuICAgICdleGNsdWRlLWRlcGVuZGVuY2llcyc6IG9iai5leGNsdWRlRGVwZW5kZW5jaWVzPy5tYXAoeSA9PiB5KSxcbiAgICAnZXhjbHVkZS1uZXdlcic6IG9iai5leGNsdWRlTmV3ZXIsXG4gICAgJ2V4Y2x1ZGUtbmV3ZXItcGFja2FnZSc6ICgob2JqLmV4Y2x1ZGVOZXdlclBhY2thZ2UpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5leGNsdWRlTmV3ZXJQYWNrYWdlKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSxcbiAgICAnZXh0cmEtYnVpbGQtZGVwZW5kZW5jaWVzJzogKChvYmouZXh0cmFCdWlsZERlcGVuZGVuY2llcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmV4dHJhQnVpbGREZXBlbmRlbmNpZXMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdPy5tYXAoeSA9PiB5KSB9KSwge30pKSxcbiAgICAnZXh0cmEtYnVpbGQtdmFyaWFibGVzJzogKChvYmouZXh0cmFCdWlsZFZhcmlhYmxlcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmV4dHJhQnVpbGRWYXJpYWJsZXMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiAoKGlbMV0pID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKGlbMV0pLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpIH0pLCB7fSkpLFxuICAgICdleHRyYS1pbmRleC11cmwnOiBvYmouZXh0cmFJbmRleFVybD8ubWFwKHkgPT4geSksXG4gICAgJ2ZpbmQtbGlua3MnOiBvYmouZmluZExpbmtzPy5tYXAoeSA9PiB5KSxcbiAgICAnZm9yay1zdHJhdGVneSc6IG9iai5mb3JrU3RyYXRlZ3ksXG4gICAgJ2luZGV4Jzogb2JqLmluZGV4Py5tYXAoeSA9PiB0b0pzb25fSW5kZXgoeSkpLFxuICAgICdpbmRleC1zdHJhdGVneSc6IG9iai5pbmRleFN0cmF0ZWd5LFxuICAgICdpbmRleC11cmwnOiBvYmouaW5kZXhVcmwsXG4gICAgJ2tleXJpbmctcHJvdmlkZXInOiBvYmoua2V5cmluZ1Byb3ZpZGVyLFxuICAgICdsaW5rLW1vZGUnOiBvYmoubGlua01vZGUsXG4gICAgJ21hbmFnZWQnOiBvYmoubWFuYWdlZCxcbiAgICAnbmF0aXZlLXRscyc6IG9iai5uYXRpdmVUbHMsXG4gICAgJ25vLWJpbmFyeSc6IG9iai5ub0JpbmFyeSxcbiAgICAnbm8tYmluYXJ5LXBhY2thZ2UnOiBvYmoubm9CaW5hcnlQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tYnVpbGQnOiBvYmoubm9CdWlsZCxcbiAgICAnbm8tYnVpbGQtaXNvbGF0aW9uJzogb2JqLm5vQnVpbGRJc29sYXRpb24sXG4gICAgJ25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlJzogb2JqLm5vQnVpbGRJc29sYXRpb25QYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tYnVpbGQtcGFja2FnZSc6IG9iai5ub0J1aWxkUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ25vLWNhY2hlJzogb2JqLm5vQ2FjaGUsXG4gICAgJ25vLWluZGV4Jzogb2JqLm5vSW5kZXgsXG4gICAgJ25vLXNvdXJjZXMnOiBvYmoubm9Tb3VyY2VzLFxuICAgICdvZmZsaW5lJzogb2JqLm9mZmxpbmUsXG4gICAgJ292ZXJyaWRlLWRlcGVuZGVuY2llcyc6IG9iai5vdmVycmlkZURlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ3BhY2thZ2UnOiBvYmoucGFja2FnZSxcbiAgICAncGlwJzogdG9Kc29uX1BpcE9wdGlvbnMob2JqLnBpcCksXG4gICAgJ3ByZXJlbGVhc2UnOiBvYmoucHJlcmVsZWFzZSxcbiAgICAncHJldmlldyc6IG9iai5wcmV2aWV3LFxuICAgICdwdWJsaXNoLXVybCc6IG9iai5wdWJsaXNoVXJsLFxuICAgICdweXB5LWluc3RhbGwtbWlycm9yJzogb2JqLnB5cHlJbnN0YWxsTWlycm9yLFxuICAgICdweXRob24tZG93bmxvYWRzJzogb2JqLnB5dGhvbkRvd25sb2FkcyxcbiAgICAncHl0aG9uLWRvd25sb2Fkcy1qc29uLXVybCc6IG9iai5weXRob25Eb3dubG9hZHNKc29uVXJsLFxuICAgICdweXRob24taW5zdGFsbC1taXJyb3InOiBvYmoucHl0aG9uSW5zdGFsbE1pcnJvcixcbiAgICAncHl0aG9uLXByZWZlcmVuY2UnOiBvYmoucHl0aG9uUHJlZmVyZW5jZSxcbiAgICAncmVpbnN0YWxsJzogb2JqLnJlaW5zdGFsbCxcbiAgICAncmVpbnN0YWxsLXBhY2thZ2UnOiBvYmoucmVpbnN0YWxsUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVkLWVudmlyb25tZW50cyc6IG9iai5yZXF1aXJlZEVudmlyb25tZW50cz8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVkLXZlcnNpb24nOiBvYmoucmVxdWlyZWRWZXJzaW9uLFxuICAgICdyZXNvbHV0aW9uJzogb2JqLnJlc29sdXRpb24sXG4gICAgJ3NvdXJjZXMnOiAoKG9iai5zb3VyY2VzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouc291cmNlcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0/Lm1hcCh5ID0+IHkpIH0pLCB7fSkpLFxuICAgICd0cnVzdGVkLXB1Ymxpc2hpbmcnOiBvYmoudHJ1c3RlZFB1Ymxpc2hpbmcsXG4gICAgJ3VwZ3JhZGUnOiBvYmoudXBncmFkZSxcbiAgICAndXBncmFkZS1wYWNrYWdlJzogb2JqLnVwZ3JhZGVQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnd29ya3NwYWNlJzogdG9Kc29uX1Rvb2xVdldvcmtzcGFjZShvYmoud29ya3NwYWNlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNldHRpbmdzIGZvciB0aGUgdXYgYnVpbGQgYmFja2VuZCAoYHV2X2J1aWxkYCkuXG4gKlxuICogTm90ZSB0aGF0IHRob3NlIHNldHRpbmdzIG9ubHkgYXBwbHkgd2hlbiB1c2luZyB0aGUgYHV2X2J1aWxkYCBiYWNrZW5kLCBvdGhlciBidWlsZCBiYWNrZW5kc1xuICogKHN1Y2ggYXMgaGF0Y2hsaW5nKSBoYXZlIHRoZWlyIG93biBjb25maWd1cmF0aW9uLlxuICpcbiAqIEFsbCBvcHRpb25zIHRoYXQgYWNjZXB0IGdsb2JzIHVzZSB0aGUgcG9ydGFibGUgZ2xvYiBwYXR0ZXJucyBmcm9tXG4gKiBbUEVQIDYzOV0oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvZ2xvYi1wYXR0ZXJucy8pLlxuICpcbiAqIEBzY2hlbWEgQnVpbGRCYWNrZW5kU2V0dGluZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEJhY2tlbmRTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBEYXRhIGluY2x1ZGVzIGZvciB3aGVlbHMuXG4gICAqXG4gICAqIEVhY2ggZW50cnkgaXMgYSBkaXJlY3RvcnksIHdob3NlIGNvbnRlbnRzIGFyZSBjb3BpZWQgdG8gdGhlIG1hdGNoaW5nIGRpcmVjdG9yeSBpbiB0aGUgd2hlZWxcbiAgICogaW4gYDxuYW1lPi08dmVyc2lvbj4uZGF0YS8ocHVyZWxpYnxwbGF0bGlifGhlYWRlcnN8c2NyaXB0c3xkYXRhKWAuIFVwb24gaW5zdGFsbGF0aW9uLCB0aGlzXG4gICAqIGRhdGEgaXMgbW92ZWQgdG8gaXRzIHRhcmdldCBsb2NhdGlvbiwgYXMgZGVmaW5lZCBieVxuICAgKiA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy4xMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI2luc3RhbGxhdGlvbi1wYXRocz4uIFVzdWFsbHksIHNtYWxsXG4gICAqIGRhdGEgZmlsZXMgYXJlIGluY2x1ZGVkIGJ5IHBsYWNpbmcgdGhlbSBpbiB0aGUgUHl0aG9uIG1vZHVsZSBpbnN0ZWFkIG9mIHVzaW5nIGRhdGEgaW5jbHVkZXMuXG4gICAqXG4gICAqIC0gYHNjcmlwdHNgOiBJbnN0YWxsZWQgdG8gdGhlIGRpcmVjdG9yeSBmb3IgZXhlY3V0YWJsZXMsIGA8dmVudj4vYmluYCBvbiBVbml4IG9yXG4gICAqIGA8dmVudj5cXFNjcmlwdHNgIG9uIFdpbmRvd3MuIFRoaXMgZGlyZWN0b3J5IGlzIGFkZGVkIHRvIGBQQVRIYCB3aGVuIHRoZSB2aXJ0dWFsXG4gICAqIGVudmlyb25tZW50ICBpcyBhY3RpdmF0ZWQgb3Igd2hlbiB1c2luZyBgdXYgcnVuYCwgc28gdGhpcyBkYXRhIHR5cGUgY2FuIGJlIHVzZWQgdG8gaW5zdGFsbFxuICAgKiBhZGRpdGlvbmFsIGJpbmFyaWVzLiBDb25zaWRlciB1c2luZyBgcHJvamVjdC5zY3JpcHRzYCBpbnN0ZWFkIGZvciBQeXRob24gZW50cnlwb2ludHMuXG4gICAqIC0gYGRhdGFgOiBJbnN0YWxsZWQgb3ZlciB0aGUgdmlydHVhbGVudiBlbnZpcm9ubWVudCByb290LlxuICAgKlxuICAgKiBXYXJuaW5nOiBUaGlzIG1heSBvdmVycmlkZSBleGlzdGluZyBmaWxlcyFcbiAgICpcbiAgICogLSBgaGVhZGVyc2A6IEluc3RhbGxlZCB0byB0aGUgaW5jbHVkZSBkaXJlY3RvcnkuIENvbXBpbGVycyBidWlsZGluZyBQeXRob24gcGFja2FnZXNcbiAgICogd2l0aCB0aGlzIHBhY2thZ2UgYXMgYnVpbGQgcmVxdWlyZW1lbnQgdXNlIHRoZSBpbmNsdWRlIGRpcmVjdG9yeSB0byBmaW5kIGFkZGl0aW9uYWwgaGVhZGVyXG4gICAqIGZpbGVzLlxuICAgKiAtIGBwdXJlbGliYCBhbmQgYHBsYXRsaWJgOiBJbnN0YWxsZWQgdG8gdGhlIGBzaXRlLXBhY2thZ2VzYCBkaXJlY3RvcnkuIEl0IGlzIG5vdCByZWNvbW1lbmRlZFxuICAgKiB0byB1c2UgdGhlc2UgdHdvIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVpbGRCYWNrZW5kU2V0dGluZ3MjZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IFdoZWVsRGF0YUluY2x1ZGVzO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gYGZhbHNlYCwgdGhlIGRlZmF1bHQgZXhjbHVkZXMgYXJlbid0IGFwcGxpZWQuXG4gICAqXG4gICAqIERlZmF1bHQgZXhjbHVkZXM6IGBfX3B5Y2FjaGVfX2AsIGAqLnB5Y2AsIGFuZCBgKi5weW9gLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI2RlZmF1bHQtZXhjbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRFeGNsdWRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgZGlyZWN0b3J5IGluc2lkZSBgbW9kdWxlLXJvb3RgLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBtb2R1bGUgbmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIHdpdGggZG90cyBhbmQgZGFzaGVzIHJlcGxhY2VkIGJ5IHVuZGVyc2NvcmVzLlxuICAgKlxuICAgKiBQYWNrYWdlIG5hbWVzIG5lZWQgdG8gYmUgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXJzLCBhbmQgdGhlIGRpcmVjdG9yeSBuZWVkcyB0byBjb250YWluIGFcbiAgICogYF9faW5pdF9fLnB5YC4gQW4gZXhjZXB0aW9uIGFyZSBzdHVicyBwYWNrYWdlcywgd2hvc2UgbmFtZSBlbmRzIHdpdGggYC1zdHVic2AsIHdpdGggdGhlIHN0ZW1cbiAgICogYmVpbmcgdGhlIG1vZHVsZSBuYW1lLCBhbmQgd2hpY2ggY29udGFpbiBhIGBfX2luaXRfXy5weWlgIGZpbGUuXG4gICAqXG4gICAqIEZvciBuYW1lc3BhY2UgcGFja2FnZXMgd2l0aCBhIHNpbmdsZSBtb2R1bGUsIHRoZSBwYXRoIGNhbiBiZSBkb3R0ZWQsIGUuZy4sIGBmb28uYmFyYCBvclxuICAgKiBgZm9vLXN0dWJzLmJhcmAuXG4gICAqXG4gICAqIEZvciBuYW1lc3BhY2UgcGFja2FnZXMgd2l0aCBtdWx0aXBsZSBtb2R1bGVzLCB0aGUgcGF0aCBjYW4gYmUgYSBsaXN0LCBlLmcuLFxuICAgKiBgW1wiZm9vXCIsIFwiYmFyXCJdYC4gV2UgcmVjb21tZW5kIHVzaW5nIGEgc2luZ2xlIG1vZHVsZSBwZXIgcGFja2FnZSwgc3BsaXR0aW5nIG11bHRpcGxlXG4gICAqIHBhY2thZ2VzIGludG8gYSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB1c2luZyB0aGlzIG9wdGlvbiBydW5zIHRoZSByaXNrIG9mIGNyZWF0aW5nIHR3byBwYWNrYWdlcyB3aXRoIGRpZmZlcmVudCBuYW1lcyBidXRcbiAgICogdGhlIHNhbWUgbW9kdWxlIG5hbWVzLiBJbnN0YWxsaW5nIHN1Y2ggcGFja2FnZXMgdG9nZXRoZXIgbGVhZHMgdG8gdW5zcGVjaWZpZWQgYmVoYXZpb3IsXG4gICAqIG9mdGVuIHdpdGggY29ycnVwdGVkIGZpbGVzIG9yIGRpcmVjdG9yeSB0cmVlcy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNtb2R1bGUtbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlTmFtZT86IGFueTtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBtb2R1bGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBDb21tb24gdmFsdWVzIGFyZSBgc3JjYCAoc3JjIGxheW91dCwgdGhlIGRlZmF1bHQpIG9yIGFuIGVtcHR5IHBhdGggKGZsYXQgbGF5b3V0KS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNtb2R1bGUtcm9vdFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlUm9vdD86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgYSBuYW1lc3BhY2UgcGFja2FnZS5cbiAgICpcbiAgICogQnVpbGQgYSBQRVAgNDIwIGltcGxpY2l0IG5hbWVzcGFjZSBwYWNrYWdlLCBhbGxvd2luZyBtb3JlIHRoYW4gb25lIHJvb3QgYF9faW5pdF9fLnB5YC5cbiAgICpcbiAgICogVXNlIHRoaXMgb3B0aW9uIHdoZW4gdGhlIG5hbWVzcGFjZSBwYWNrYWdlIGNvbnRhaW5zIG11bHRpcGxlIHJvb3QgYF9faW5pdF9fLnB5YCwgZm9yXG4gICAqIG5hbWVzcGFjZSBwYWNrYWdlcyB3aXRoIGEgc2luZ2xlIHJvb3QgYF9faW5pdF9fLnB5YCB1c2UgYSBkb3R0ZWQgYG1vZHVsZS1uYW1lYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBUbyBjb21wYXJlIGRvdHRlZCBgbW9kdWxlLW5hbWVgIGFuZCBgbmFtZXNwYWNlID0gdHJ1ZWAsIHRoZSBmaXJzdCBleGFtcGxlIGJlbG93IGNhbiBiZVxuICAgKiBleHByZXNzZWQgd2l0aCBgbW9kdWxlLW5hbWUgPSBcImNsb3VkLmRhdGFiYXNlXCJgOiBUaGVyZSBpcyBvbmUgcm9vdCBgX19pbml0X18ucHlgIGBkYXRhYmFzZWAuXG4gICAqIEluIHRoZSBzZWNvbmQgZXhhbXBsZSwgd2UgaGF2ZSB0aHJlZSByb290cyAoYGNsb3VkLmRhdGFiYXNlYCwgYGNsb3VkLmRhdGFiYXNlX3Byb2AsXG4gICAqIGBiaWxsaW5nLm1vZHVsZXMuZGF0YWJhc2VfcHJvYCksIHNvIGBuYW1lc3BhY2UgPSB0cnVlYCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiBzcmNcbiAgICog4pSU4pSA4pSAIGNsb3VkXG4gICAqIOKUlOKUgOKUgCBkYXRhYmFzZVxuICAgKiDilJzilIDilIAgX19pbml0X18ucHlcbiAgICog4pSc4pSA4pSAIHF1ZXJ5X2J1aWxkZXJcbiAgICog4pSCICAg4pSU4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUlOKUgOKUgCBzcWxcbiAgICog4pSc4pSA4pSAIHBhcnNlci5weVxuICAgKiDilJTilIDilIAgX19pbml0X18ucHlcbiAgICogYGBgXG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogc3JjXG4gICAqIOKUnOKUgOKUgCBjbG91ZFxuICAgKiDilIIgICDilJzilIDilIAgZGF0YWJhc2VcbiAgICog4pSCICAg4pSCICAg4pSc4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUgiAgIOKUgiAgIOKUnOKUgOKUgCBxdWVyeV9idWlsZGVyXG4gICAqIOKUgiAgIOKUgiAgIOKUgiAgIOKUlOKUgOKUgCBfX2luaXRfXy5weVxuICAgKiDilIIgICDilIIgICDilJTilIDilIAgc3FsXG4gICAqIOKUgiAgIOKUgiAgICAgICDilJzilIDilIAgX19pbml0X18ucHlcbiAgICog4pSCICAg4pSCICAgICAgIOKUlOKUgOKUgCBwYXJzZXIucHlcbiAgICog4pSCICAg4pSU4pSA4pSAIGRhdGFiYXNlX3Byb1xuICAgKiDilIIgICAgICAg4pSc4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUgiAgICAgICDilJTilIDilIAgcXVlcnlfYnVpbGRlci5weVxuICAgKiDilJTilIDilIAgYmlsbGluZ1xuICAgKiDilJTilIDilIAgbW9kdWxlc1xuICAgKiDilJTilIDilIAgZGF0YWJhc2VfcHJvXG4gICAqIOKUnOKUgOKUgCBfX2luaXRfXy5weVxuICAgKiDilJTilIDilIAgc3FsLnB5XG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI25hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2xvYiBleHByZXNzaW9ucyB3aGljaCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI3NvdXJjZS1leGNsdWRlXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VFeGNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdsb2IgZXhwcmVzc2lvbnMgd2hpY2ggZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGFkZGl0aW9uYWxseSBpbmNsdWRlIGluIHRoZSBzb3VyY2VcbiAgICogZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBgcHlwcm9qZWN0LnRvbWxgIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIG1vZHVsZSBkaXJlY3RvcnkgYXJlIGFsd2F5cyBpbmNsdWRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNzb3VyY2UtaW5jbHVkZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlSW5jbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHbG9iIGV4cHJlc3Npb25zIHdoaWNoIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBleGNsdWRlIGZyb20gdGhlIHdoZWVsLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI3doZWVsLWV4Y2x1ZGVcbiAgICovXG4gIHJlYWRvbmx5IHdoZWVsRXhjbHVkZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWlsZEJhY2tlbmRTZXR0aW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1aWxkQmFja2VuZFNldHRpbmdzKG9iajogQnVpbGRCYWNrZW5kU2V0dGluZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXRhJzogdG9Kc29uX1doZWVsRGF0YUluY2x1ZGVzKG9iai5kYXRhKSxcbiAgICAnZGVmYXVsdC1leGNsdWRlcyc6IG9iai5kZWZhdWx0RXhjbHVkZXMsXG4gICAgJ21vZHVsZS1uYW1lJzogb2JqLm1vZHVsZU5hbWUsXG4gICAgJ21vZHVsZS1yb290Jzogb2JqLm1vZHVsZVJvb3QsXG4gICAgJ25hbWVzcGFjZSc6IG9iai5uYW1lc3BhY2UsXG4gICAgJ3NvdXJjZS1leGNsdWRlJzogb2JqLnNvdXJjZUV4Y2x1ZGU/Lm1hcCh5ID0+IHkpLFxuICAgICdzb3VyY2UtaW5jbHVkZSc6IG9iai5zb3VyY2VJbmNsdWRlPy5tYXAoeSA9PiB5KSxcbiAgICAnd2hlZWwtZXhjbHVkZSc6IG9iai53aGVlbEV4Y2x1ZGU/Lm1hcCh5ID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBzaW5nbGUgaXRlbSBpbiBhIGNvbmZsaWN0aW5nIHNldC5cbiAqXG4gKiBFYWNoIGl0ZW0gaXMgYSBwYWlyIG9mIGFuIChvcHRpb25hbCkgcGFja2FnZSBhbmQgYSBjb3JyZXNwb25kaW5nIGV4dHJhIG9yIGdyb3VwIG5hbWUgZm9yIHRoYXRcbiAqIHBhY2thZ2UuXG4gKlxuICogQHNjaGVtYSBTY2hlbWFDb25mbGljdEl0ZW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFDb25mbGljdEl0ZW0ge1xuICAvKipcbiAgICogQHNjaGVtYSBTY2hlbWFDb25mbGljdEl0ZW0jZXh0cmFcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFNjaGVtYUNvbmZsaWN0SXRlbSNncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgU2NoZW1hQ29uZmxpY3RJdGVtI3BhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1NjaGVtYUNvbmZsaWN0SXRlbScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1NjaGVtYUNvbmZsaWN0SXRlbShvYmo6IFNjaGVtYUNvbmZsaWN0SXRlbSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V4dHJhJzogb2JqLmV4dHJhLFxuICAgICdncm91cCc6IG9iai5ncm91cCxcbiAgICAncGFja2FnZSc6IG9iai5wYWNrYWdlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBEZXBlbmRlbmN5R3JvdXBTZXR0aW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGVuZGVuY3lHcm91cFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgcHl0aG9uIHRvIHJlcXVpcmUgd2hlbiBpbnN0YWxsaW5nIHRoaXMgZ3JvdXBcbiAgICpcbiAgICogQHNjaGVtYSBEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncyNyZXF1aXJlcy1weXRob25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzUHl0aG9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RlcGVuZGVuY3lHcm91cFNldHRpbmdzKG9iajogRGVwZW5kZW5jeUdyb3VwU2V0dGluZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZXF1aXJlcy1weXRob24nOiBvYmoucmVxdWlyZXNQeXRob24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIHN1YnNldCBvZiB0aGUgUHl0aG9uIFBhY2thZ2UgTWV0YWRhdGEgMi4zIHN0YW5kYXJkIGFzIHNwZWNpZmllZCBpblxuICogPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvc3BlY2lmaWNhdGlvbnMvY29yZS1tZXRhZGF0YS8+LlxuICpcbiAqIEBzY2hlbWEgU3RhdGljTWV0YWRhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBTdGF0aWNNZXRhZGF0YSNwcm92aWRlcy1leHRyYVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXNFeHRyYT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI3JlcXVpcmVzLWRpc3RcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzRGlzdD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQRVAgNTA4LXN0eWxlIFB5dGhvbiByZXF1aXJlbWVudCwgZS5nLiwgYD49My4xMGBcbiAgICpcbiAgICogQHNjaGVtYSBTdGF0aWNNZXRhZGF0YSNyZXF1aXJlcy1weXRob25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzUHl0aG9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQRVAgNDQwLXN0eWxlIHBhY2thZ2UgdmVyc2lvbiwgZS5nLiwgYDEuMi4zYFxuICAgKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI3ZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0YXRpY01ldGFkYXRhJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RhdGljTWV0YWRhdGEob2JqOiBTdGF0aWNNZXRhZGF0YSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAncHJvdmlkZXMtZXh0cmEnOiBvYmoucHJvdmlkZXNFeHRyYT8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVzLWRpc3QnOiBvYmoucmVxdWlyZXNEaXN0Py5tYXAoeSA9PiB5KSxcbiAgICAncmVxdWlyZXMtcHl0aG9uJzogb2JqLnJlcXVpcmVzUHl0aG9uLFxuICAgICd2ZXJzaW9uJzogb2JqLnZlcnNpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEluZGV4XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXgge1xuICAvKipcbiAgICogV2hlbiB1diBzaG91bGQgdXNlIGF1dGhlbnRpY2F0aW9uIGZvciByZXF1ZXN0cyB0byB0aGUgaW5kZXguXG4gICAqXG4gICAqIGBgYHRvbWxcbiAgICogW1t0b29sLnV2LmluZGV4XV1cbiAgICogbmFtZSA9IFwibXktaW5kZXhcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vPG9taXR0ZWQ+L3NpbXBsZVwiXG4gICAqIGF1dGhlbnRpY2F0ZSA9IFwiYWx3YXlzXCJcbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjYXV0aGVudGljYXRlXG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhY2hlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBpbmRleC5cbiAgICpcbiAgICogV2hlbiBzZXQsIHRoZXNlIGhlYWRlcnMgd2lsbCBvdmVycmlkZSB0aGUgc2VydmVyJ3MgY2FjaGUgY29udHJvbCBoZWFkZXJzXG4gICAqIGZvciBib3RoIHBhY2thZ2UgbWV0YWRhdGEgcmVxdWVzdHMgYW5kIGFydGlmYWN0IGRvd25sb2Fkcy5cbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJteS1pbmRleFwiXG4gICAqIHVybCA9IFwiaHR0cHM6Ly88b21pdHRlZD4vc2ltcGxlXCJcbiAgICogY2FjaGUtY29udHJvbCA9IHsgYXBpID0gXCJtYXgtYWdlPTYwMFwiLCBmaWxlcyA9IFwibWF4LWFnZT0zNjAwXCIgfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNjYWNoZS1jb250cm9sXG4gICAqL1xuICByZWFkb25seSBjYWNoZUNvbnRyb2w/OiBJbmRleENhY2hlQ29udHJvbDtcblxuICAvKipcbiAgICogTWFyayB0aGUgaW5kZXggYXMgdGhlIGRlZmF1bHQgaW5kZXguXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHVzZXMgUHlQSSBhcyB0aGUgZGVmYXVsdCBpbmRleCwgc3VjaCB0aGF0IGV2ZW4gaWYgYWRkaXRpb25hbCBpbmRleGVzIGFyZVxuICAgKiBkZWZpbmVkIHZpYSBgW1t0b29sLnV2LmluZGV4XV1gLCBQeVBJIHdpbGwgc3RpbGwgYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBwYWNrYWdlcyB0aGF0XG4gICAqIGFyZW4ndCBmb3VuZCBlbHNld2hlcmUuIFRvIGRpc2FibGUgdGhlIFB5UEkgZGVmYXVsdCwgc2V0IGBkZWZhdWx0ID0gdHJ1ZWAgb24gYXQgbGVhc3Qgb25lXG4gICAqIG90aGVyIGluZGV4LlxuICAgKlxuICAgKiBNYXJraW5nIGFuIGluZGV4IGFzIGRlZmF1bHQgd2lsbCBtb3ZlIGl0IHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdCBvZiBpbmRleGVzLCBzdWNoIHRoYXQgaXRcbiAgICogaXMgZ2l2ZW4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgd2hlbiByZXNvbHZpbmcgcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIGluZGV4IGFzIGV4cGxpY2l0LlxuICAgKlxuICAgKiBFeHBsaWNpdCBpbmRleGVzIHdpbGwgX29ubHlfIGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZCB2aWEgYSBgW3Rvb2wudXYuc291cmNlc11gXG4gICAqIGRlZmluaXRpb24sIGFzIGluOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcInB5dG9yY2hcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vZG93bmxvYWQucHl0b3JjaC5vcmcvd2hsL2N1MTIxXCJcbiAgICogZXhwbGljaXQgPSB0cnVlXG4gICAqXG4gICAqIFt0b29sLnV2LnNvdXJjZXNdXG4gICAqIHRvcmNoID0geyBpbmRleCA9IFwicHl0b3JjaFwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjZXhwbGljaXRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGxpY2l0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCB1c2VkIGJ5IHRoZSBpbmRleC5cbiAgICpcbiAgICogSW5kZXhlcyBjYW4gZWl0aGVyIGJlIFBFUCA1MDMtY29tcGxpYW50IChpLmUuLCBhIFB5UEktc3R5bGUgcmVnaXN0cnkgaW1wbGVtZW50aW5nIHRoZSBTaW1wbGVcbiAgICogQVBJKSBvciBzdHJ1Y3R1cmVkIGFzIGEgZmxhdCBsaXN0IG9mIGRpc3RyaWJ1dGlvbnMgKGUuZy4sIGAtLWZpbmQtbGlua3NgKS4gSW4gYm90aCBjYXNlcyxcbiAgICogaW5kZXhlcyBjYW4gcG9pbnQgdG8gZWl0aGVyIGxvY2FsIG9yIHJlbW90ZSByZXNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjZm9ybWF0XG4gICAqL1xuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0YXR1cyBjb2RlcyB0aGF0IHV2IHNob3VsZCBpZ25vcmUgd2hlbiBkZWNpZGluZyB3aGV0aGVyXG4gICAqIHRvIGNvbnRpbnVlIHNlYXJjaGluZyBpbiB0aGUgbmV4dCBpbmRleCBhZnRlciBhIGZhaWx1cmUuXG4gICAqXG4gICAqIGBgYHRvbWxcbiAgICogW1t0b29sLnV2LmluZGV4XV1cbiAgICogbmFtZSA9IFwibXktaW5kZXhcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vPG9taXR0ZWQ+L3NpbXBsZVwiXG4gICAqIGlnbm9yZS1lcnJvci1jb2RlcyA9IFs0MDEsIDQwM11cbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjaWdub3JlLWVycm9yLWNvZGVzXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVFcnJvckNvZGVzPzogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBpbmRleC5cbiAgICpcbiAgICogSW5kZXggbmFtZXMgY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlIGluZGV4ZXMgZWxzZXdoZXJlIGluIHRoZSBjb25maWd1cmF0aW9uLiBGb3IgZXhhbXBsZSxcbiAgICogeW91IGNhbiBwaW4gYSBwYWNrYWdlIHRvIGEgc3BlY2lmaWMgaW5kZXggYnkgbmFtZTpcbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJweXRvcmNoXCJcbiAgICogdXJsID0gXCJodHRwczovL2Rvd25sb2FkLnB5dG9yY2gub3JnL3dobC9jdTEyMVwiXG4gICAqXG4gICAqIFt0b29sLnV2LnNvdXJjZXNdXG4gICAqIHRvcmNoID0geyBpbmRleCA9IFwicHl0b3JjaFwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgdXBsb2FkIGVuZHBvaW50LlxuICAgKlxuICAgKiBXaGVuIHVzaW5nIGB1diBwdWJsaXNoIC0taW5kZXggPG5hbWU+YCwgdGhpcyBVUkwgaXMgdXNlZCBmb3IgcHVibGlzaGluZy5cbiAgICpcbiAgICogQSBjb25maWd1cmF0aW9uIGZvciB0aGUgZGVmYXVsdCBpbmRleCBQeVBJIHdvdWxkIGxvb2sgYXMgZm9sbG93czpcbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJweXBpXCJcbiAgICogdXJsID0gXCJodHRwczovL3B5cGkub3JnL3NpbXBsZVwiXG4gICAqIHB1Ymxpc2gtdXJsID0gXCJodHRwczovL3VwbG9hZC5weXBpLm9yZy9sZWdhY3kvXCJcbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjcHVibGlzaC11cmxcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIGluZGV4LlxuICAgKlxuICAgKiBFeHBlY3RzIHRvIHJlY2VpdmUgYSBVUkwgKGUuZy4sIGBodHRwczovL3B5cGkub3JnL3NpbXBsZWApIG9yIGEgbG9jYWwgcGF0aC5cbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCN1cmxcbiAgICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdJbmRleCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0luZGV4KG9iajogSW5kZXggfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhdXRoZW50aWNhdGUnOiBvYmouYXV0aGVudGljYXRlLFxuICAgICdjYWNoZS1jb250cm9sJzogdG9Kc29uX0luZGV4Q2FjaGVDb250cm9sKG9iai5jYWNoZUNvbnRyb2wpLFxuICAgICdkZWZhdWx0Jzogb2JqLmRlZmF1bHQsXG4gICAgJ2V4cGxpY2l0Jzogb2JqLmV4cGxpY2l0LFxuICAgICdmb3JtYXQnOiBvYmouZm9ybWF0LFxuICAgICdpZ25vcmUtZXJyb3ItY29kZXMnOiBvYmouaWdub3JlRXJyb3JDb2Rlcz8ubWFwKHkgPT4geSksXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAncHVibGlzaC11cmwnOiBvYmoucHVibGlzaFVybCxcbiAgICAndXJsJzogb2JqLnVybCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNldHRpbmdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBgdXYgcGlwYCBjb21tYW5kLWxpbmUgaW50ZXJmYWNlLlxuICpcbiAqIFRoZXNlIHZhbHVlcyB3aWxsIGJlIGlnbm9yZWQgd2hlbiBydW5uaW5nIGNvbW1hbmRzIG91dHNpZGUgdGhlIGB1diBwaXBgIG5hbWVzcGFjZSAoZS5nLixcbiAqIGB1diBsb2NrYCwgYHV2eGApLlxuICpcbiAqIEBzY2hlbWEgUGlwT3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcE9wdGlvbnMge1xuICAvKipcbiAgICogSW5jbHVkZSBhbGwgb3B0aW9uYWwgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBPbmx5IGFwcGxpZXMgdG8gYHB5cHJvamVjdC50b21sYCwgYHNldHVwLnB5YCwgYW5kIGBzZXR1cC5jZmdgIHNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNhbGwtZXh0cmFzXG4gICAqL1xuICByZWFkb25seSBhbGxFeHRyYXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvdyBgdXYgcGlwIHN5bmNgIHdpdGggZW1wdHkgcmVxdWlyZW1lbnRzLCB3aGljaCB3aWxsIGNsZWFyIHRoZSBlbnZpcm9ubWVudCBvZiBhbGxcbiAgICogcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNhbGxvdy1lbXB0eS1yZXF1aXJlbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93RW1wdHlSZXF1aXJlbWVudHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGUgb2YgdGhlIGFubm90YXRpb24gY29tbWVudHMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBmaWxlLCB1c2VkIHRvIGluZGljYXRlIHRoZVxuICAgKiBzb3VyY2Ugb2YgZWFjaCBwYWNrYWdlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjYW5ub3RhdGlvbi1zdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgYW5ub3RhdGlvblN0eWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGxvdyB1diB0byBtb2RpZnkgYW4gYEVYVEVSTkFMTFktTUFOQUdFRGAgUHl0aG9uIGluc3RhbGxhdGlvbi5cbiAgICpcbiAgICogV0FSTklORzogYC0tYnJlYWstc3lzdGVtLXBhY2thZ2VzYCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gKENJKVxuICAgKiBlbnZpcm9ubWVudHMsIHdoZW4gaW5zdGFsbGluZyBpbnRvIFB5dGhvbiBpbnN0YWxsYXRpb25zIHRoYXQgYXJlIG1hbmFnZWQgYnkgYW4gZXh0ZXJuYWxcbiAgICogcGFja2FnZSBtYW5hZ2VyLCBsaWtlIGBhcHRgLiBJdCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24sIGFzIHN1Y2ggUHl0aG9uIGluc3RhbGxhdGlvbnNcbiAgICogZXhwbGljaXRseSByZWNvbW1lbmQgYWdhaW5zdCBtb2RpZmljYXRpb25zIGJ5IG90aGVyIHBhY2thZ2UgbWFuYWdlcnMgKGxpa2UgdXYgb3IgcGlwKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2JyZWFrLXN5c3RlbS1wYWNrYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgYnJlYWtTeXN0ZW1QYWNrYWdlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbXBpbGUgUHl0aG9uIGZpbGVzIHRvIGJ5dGVjb2RlIGFmdGVyIGluc3RhbGxhdGlvbi5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgZG9lcyBub3QgY29tcGlsZSBQeXRob24gKGAucHlgKSBmaWxlcyB0byBieXRlY29kZSAoYF9fcHljYWNoZV9fLyoucHljYCk7XG4gICAqIGluc3RlYWQsIGNvbXBpbGF0aW9uIGlzIHBlcmZvcm1lZCBsYXppbHkgdGhlIGZpcnN0IHRpbWUgYSBtb2R1bGUgaXMgaW1wb3J0ZWQuIEZvciB1c2UtY2FzZXNcbiAgICogaW4gd2hpY2ggc3RhcnQgdGltZSBpcyBjcml0aWNhbCwgc3VjaCBhcyBDTEkgYXBwbGljYXRpb25zIGFuZCBEb2NrZXIgY29udGFpbmVycywgdGhpcyBvcHRpb25cbiAgICogY2FuIGJlIGVuYWJsZWQgdG8gdHJhZGUgbG9uZ2VyIGluc3RhbGxhdGlvbiB0aW1lcyBmb3IgZmFzdGVyIHN0YXJ0IHRpbWVzLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHV2IHdpbGwgcHJvY2VzcyB0aGUgZW50aXJlIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5IChpbmNsdWRpbmcgcGFja2FnZXMgdGhhdFxuICAgKiBhcmUgbm90IGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBjdXJyZW50IG9wZXJhdGlvbikgZm9yIGNvbnNpc3RlbmN5LiBMaWtlIHBpcCwgaXQgd2lsbCBhbHNvXG4gICAqIGlnbm9yZSBlcnJvcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNjb21waWxlLWJ5dGVjb2RlXG4gICAqL1xuICByZWFkb25seSBjb21waWxlQnl0ZWNvZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0byBwYXNzIHRvIHRoZSBbUEVQIDUxN10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MTcvKSBidWlsZCBiYWNrZW5kLFxuICAgKiBzcGVjaWZpZWQgYXMgYEtFWT1WQUxVRWAgcGFpcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNjb25maWctc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ1NldHRpbmdzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogU2V0dGluZ3MgdG8gcGFzcyB0byB0aGUgW1BFUCA1MTddKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE3LykgYnVpbGQgYmFja2VuZCBmb3Igc3BlY2lmaWMgcGFja2FnZXMsXG4gICAqIHNwZWNpZmllZCBhcyBgS0VZPVZBTFVFYCBwYWlycy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2NvbmZpZy1zZXR0aW5ncy1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBjb25maWdTZXR0aW5nc1BhY2thZ2U/OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogYW55IH0gfTtcblxuICAvKipcbiAgICogVGhlIGhlYWRlciBjb21tZW50IHRvIGluY2x1ZGUgYXQgdGhlIHRvcCBvZiB0aGUgb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIFVzZWQgdG8gcmVmbGVjdCBjdXN0b20gYnVpbGQgc2NyaXB0cyBhbmQgY29tbWFuZHMgdGhhdCB3cmFwIGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNjdXN0b20tY29tcGlsZS1jb21tYW5kXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Db21waWxlQ29tbWFuZD86IHN0cmluZztcblxuICAvKipcbiAgICogUHJlLWRlZmluZWQgc3RhdGljIG1ldGFkYXRhIGZvciBkZXBlbmRlbmNpZXMgb2YgdGhlIHByb2plY3QgKGRpcmVjdCBvciB0cmFuc2l0aXZlKS4gV2hlblxuICAgKiBwcm92aWRlZCwgZW5hYmxlcyB0aGUgcmVzb2x2ZXIgdG8gdXNlIHRoZSBzcGVjaWZpZWQgbWV0YWRhdGEgaW5zdGVhZCBvZiBxdWVyeWluZyB0aGVcbiAgICogcmVnaXN0cnkgb3IgYnVpbGRpbmcgdGhlIHJlbGV2YW50IHBhY2thZ2UgZnJvbSBzb3VyY2UuXG4gICAqXG4gICAqIE1ldGFkYXRhIHNob3VsZCBiZSBwcm92aWRlZCBpbiBhZGhlcmVuY2Ugd2l0aCB0aGUgW01ldGFkYXRhIDIuM10oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvY29yZS1tZXRhZGF0YS8pXG4gICAqIHN0YW5kYXJkLCB0aG91Z2ggb25seSB0aGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgcmVzcGVjdGVkOlxuICAgKlxuICAgKiAtIGBuYW1lYDogVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UuXG4gICAqIC0gKE9wdGlvbmFsKSBgdmVyc2lvbmA6IFRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLiBJZiBvbWl0dGVkLCB0aGUgbWV0YWRhdGEgd2lsbCBiZSBhcHBsaWVkXG4gICAqIHRvIGFsbCB2ZXJzaW9ucyBvZiB0aGUgcGFja2FnZS5cbiAgICogLSAoT3B0aW9uYWwpIGByZXF1aXJlcy1kaXN0YDogVGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgcGFja2FnZSAoZS5nLiwgYHdlcmt6ZXVnPj0wLjE0YCkuXG4gICAqIC0gKE9wdGlvbmFsKSBgcmVxdWlyZXMtcHl0aG9uYDogVGhlIFB5dGhvbiB2ZXJzaW9uIHJlcXVpcmVkIGJ5IHRoZSBwYWNrYWdlIChlLmcuLCBgPj0zLjEwYCkuXG4gICAqIC0gKE9wdGlvbmFsKSBgcHJvdmlkZXMtZXh0cmFgOiBUaGUgZXh0cmFzIHByb3ZpZGVkIGJ5IHRoZSBwYWNrYWdlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZGVwZW5kZW5jeS1tZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeU1ldGFkYXRhPzogU3RhdGljTWV0YWRhdGFbXTtcblxuICAvKipcbiAgICogSW5jbHVkZSBgLS1uby1iaW5hcnlgIGFuZCBgLS1vbmx5LWJpbmFyeWAgZW50cmllcyBpbiB0aGUgb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNlbWl0LWJ1aWxkLW9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGVtaXRCdWlsZE9wdGlvbnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGAtLWZpbmQtbGlua3NgIGVudHJpZXMgaW4gdGhlIG91dHB1dCBmaWxlIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZW1pdC1maW5kLWxpbmtzXG4gICAqL1xuICByZWFkb25seSBlbWl0RmluZExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5jbHVkZSBjb21tZW50IGFubm90YXRpb25zIGluZGljYXRpbmcgdGhlIGluZGV4IHVzZWQgdG8gcmVzb2x2ZSBlYWNoIHBhY2thZ2UgKGUuZy4sXG4gICAqIGAjIGZyb20gaHR0cHM6Ly9weXBpLm9yZy9zaW1wbGVgKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2VtaXQtaW5kZXgtYW5ub3RhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZW1pdEluZGV4QW5ub3RhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgYC0taW5kZXgtdXJsYCBhbmQgYC0tZXh0cmEtaW5kZXgtdXJsYCBlbnRyaWVzIGluIHRoZSBvdXRwdXQgZmlsZSBnZW5lcmF0ZWQgYnkgYHV2IHBpcCBjb21waWxlYC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2VtaXQtaW5kZXgtdXJsXG4gICAqL1xuICByZWFkb25seSBlbWl0SW5kZXhVcmw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVtaXQgYSBtYXJrZXIgc3RyaW5nIGluZGljYXRpbmcgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIHNldCBvZiBwaW5uZWRcbiAgICogZGVwZW5kZW5jaWVzIGlzIHZhbGlkLlxuICAgKlxuICAgKiBUaGUgcGlubmVkIGRlcGVuZGVuY2llcyBtYXkgYmUgdmFsaWQgZXZlbiB3aGVuIHRoZSBtYXJrZXIgZXhwcmVzc2lvbiBpc1xuICAgKiBmYWxzZSwgYnV0IHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgdHJ1ZSwgdGhlIHJlcXVpcmVtZW50cyBhcmUga25vd24gdG9cbiAgICogYmUgY29ycmVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2VtaXQtbWFya2VyLWV4cHJlc3Npb25cbiAgICovXG4gIHJlYWRvbmx5IGVtaXRNYXJrZXJFeHByZXNzaW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTGltaXQgY2FuZGlkYXRlIHBhY2thZ2VzIHRvIHRob3NlIHRoYXQgd2VyZSB1cGxvYWRlZCBwcmlvciB0byBhIGdpdmVuIHBvaW50IGluIHRpbWUuXG4gICAqXG4gICAqIEFjY2VwdHMgYSBzdXBlcnNldCBvZiBbUkZDIDMzMzldKGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzMzM5Lmh0bWwpIChlLmcuLFxuICAgKiBgMjAwNi0xMi0wMlQwMjowNzo0M1pgKS4gQSBmdWxsIHRpbWVzdGFtcCBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmVzb2x2ZXIgd2lsbFxuICAgKiBiZWhhdmUgY29uc2lzdGVudGx5IGFjcm9zcyB0aW1lem9uZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNleGNsdWRlLW5ld2VyXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlTmV3ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpbWl0IGNhbmRpZGF0ZSBwYWNrYWdlcyBmb3Igc3BlY2lmaWMgcGFja2FnZXMgdG8gdGhvc2UgdGhhdCB3ZXJlIHVwbG9hZGVkIHByaW9yIHRvIHRoZSBnaXZlbiBkYXRlLlxuICAgKlxuICAgKiBBY2NlcHRzIHBhY2thZ2UtZGF0ZSBwYWlycyBpbiBhIGRpY3Rpb25hcnkgZm9ybWF0LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZXhjbHVkZS1uZXdlci1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlTmV3ZXJQYWNrYWdlPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogSW5jbHVkZSBvcHRpb25hbCBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGV4dHJhOyBtYXkgYmUgcHJvdmlkZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIE9ubHkgYXBwbGllcyB0byBgcHlwcm9qZWN0LnRvbWxgLCBgc2V0dXAucHlgLCBhbmQgYHNldHVwLmNmZ2Agc291cmNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2V4dHJhXG4gICAqL1xuICByZWFkb25seSBleHRyYT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGJ1aWxkIGRlcGVuZGVuY2llcyBmb3IgcGFja2FnZXMuXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIGV4dGVuZGluZyB0aGUgUEVQIDUxNyBidWlsZCBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMgd2l0aFxuICAgKiBhZGRpdGlvbmFsIHBhY2thZ2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcGFja2FnZXMgdGhhdCBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIHBhY2thZ2VzIGxpa2VcbiAgICogYHBpcGAsIGFuZCBkbyBub3QgZGVjbGFyZSB0aGVtIGFzIGJ1aWxkIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2V4dHJhLWJ1aWxkLWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFCdWlsZERlcGVuZGVuY2llcz86IHsgW2tleTogc3RyaW5nXTogYW55W10gfTtcblxuICAvKipcbiAgICogRXh0cmEgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIGJ1aWxkaW5nIGNlcnRhaW4gcGFja2FnZXMuXG4gICAqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbnZpcm9ubWVudCB3aGVuIGJ1aWxkaW5nIHRoZVxuICAgKiBzcGVjaWZpZWQgcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNleHRyYS1idWlsZC12YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhQnVpbGRWYXJpYWJsZXM/OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfTtcblxuICAvKipcbiAgICogRXh0cmEgVVJMcyBvZiBwYWNrYWdlIGluZGV4ZXMgdG8gdXNlLCBpbiBhZGRpdGlvbiB0byBgLS1pbmRleC11cmxgLlxuICAgKlxuICAgKiBBY2NlcHRzIGVpdGhlciBhIHJlcG9zaXRvcnkgY29tcGxpYW50IHdpdGggW1BFUCA1MDNdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTAzLylcbiAgICogKHRoZSBzaW1wbGUgcmVwb3NpdG9yeSBBUEkpLCBvciBhIGxvY2FsIGRpcmVjdG9yeSBsYWlkIG91dCBpbiB0aGUgc2FtZSBmb3JtYXQuXG4gICAqXG4gICAqIEFsbCBpbmRleGVzIHByb3ZpZGVkIHZpYSB0aGlzIGZsYWcgdGFrZSBwcmlvcml0eSBvdmVyIHRoZSBpbmRleCBzcGVjaWZpZWQgYnlcbiAgICogW2BpbmRleF91cmxgXSgjaW5kZXgtdXJsKS4gV2hlbiBtdWx0aXBsZSBpbmRleGVzIGFyZSBwcm92aWRlZCwgZWFybGllciB2YWx1ZXMgdGFrZSBwcmlvcml0eS5cbiAgICpcbiAgICogVG8gY29udHJvbCB1didzIHJlc29sdXRpb24gc3RyYXRlZ3kgd2hlbiBtdWx0aXBsZSBpbmRleGVzIGFyZSBwcmVzZW50LCBzZWVcbiAgICogW2BpbmRleF9zdHJhdGVneWBdKCNpbmRleC1zdHJhdGVneSkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNleHRyYS1pbmRleC11cmxcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhSW5kZXhVcmw/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTG9jYXRpb25zIHRvIHNlYXJjaCBmb3IgY2FuZGlkYXRlIGRpc3RyaWJ1dGlvbnMsIGluIGFkZGl0aW9uIHRvIHRob3NlIGZvdW5kIGluIHRoZSByZWdpc3RyeVxuICAgKiBpbmRleGVzLlxuICAgKlxuICAgKiBJZiBhIHBhdGgsIHRoZSB0YXJnZXQgbXVzdCBiZSBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHBhY2thZ2VzIGFzIHdoZWVsIGZpbGVzIChgLndobGApIG9yXG4gICAqIHNvdXJjZSBkaXN0cmlidXRpb25zIChlLmcuLCBgLnRhci5nemAgb3IgYC56aXBgKSBhdCB0aGUgdG9wIGxldmVsLlxuICAgKlxuICAgKiBJZiBhIFVSTCwgdGhlIHBhZ2UgbXVzdCBjb250YWluIGEgZmxhdCBsaXN0IG9mIGxpbmtzIHRvIHBhY2thZ2UgZmlsZXMgYWRoZXJpbmcgdG8gdGhlXG4gICAqIGZvcm1hdHMgZGVzY3JpYmVkIGFib3ZlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZmluZC1saW5rc1xuICAgKi9cbiAgcmVhZG9ubHkgZmluZExpbmtzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBzZWxlY3RpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYSBnaXZlbiBwYWNrYWdlIGFjcm9zcyBQeXRob25cbiAgICogdmVyc2lvbnMgYW5kIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgd2lsbCBvcHRpbWl6ZSBmb3Igc2VsZWN0aW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlYWNoIHBhY2thZ2UgZm9yIGVhY2hcbiAgICogc3VwcG9ydGVkIFB5dGhvbiB2ZXJzaW9uIChgcmVxdWlyZXMtcHl0aG9uYCksIHdoaWxlIG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBzZWxlY3RlZFxuICAgKiB2ZXJzaW9ucyBhY3Jvc3MgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBVbmRlciBgZmV3ZXN0YCwgdXYgd2lsbCBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIHZlcnNpb25zIGZvciBlYWNoIHBhY2thZ2UsXG4gICAqIHByZWZlcnJpbmcgb2xkZXIgdmVyc2lvbnMgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIGEgd2lkZXIgcmFuZ2Ugb2Ygc3VwcG9ydGVkIFB5dGhvblxuICAgKiB2ZXJzaW9ucyBvciBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNmb3JrLXN0cmF0ZWd5XG4gICAqL1xuICByZWFkb25seSBmb3JrU3RyYXRlZ3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgZGlzdHJpYnV0aW9uIGhhc2hlcyBpbiB0aGUgb3V0cHV0IGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNnZW5lcmF0ZS1oYXNoZXNcbiAgICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlSGFzaGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5jbHVkZSB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY3kgZ3JvdXBzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwPzogUGlwR3JvdXBOYW1lW107XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiByZXNvbHZpbmcgYWdhaW5zdCBtdWx0aXBsZSBpbmRleCBVUkxzLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIHN0b3AgYXQgdGhlIGZpcnN0IGluZGV4IG9uIHdoaWNoIGEgZ2l2ZW4gcGFja2FnZSBpcyBhdmFpbGFibGUsIGFuZFxuICAgKiBsaW1pdCByZXNvbHV0aW9ucyB0byB0aG9zZSBwcmVzZW50IG9uIHRoYXQgZmlyc3QgaW5kZXggKGBmaXJzdC1pbmRleGApLiBUaGlzIHByZXZlbnRzXG4gICAqIFwiZGVwZW5kZW5jeSBjb25mdXNpb25cIiBhdHRhY2tzLCB3aGVyZWJ5IGFuIGF0dGFja2VyIGNhbiB1cGxvYWQgYSBtYWxpY2lvdXMgcGFja2FnZSB1bmRlciB0aGVcbiAgICogc2FtZSBuYW1lIHRvIGFuIGFsdGVybmF0ZSBpbmRleC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2luZGV4LXN0cmF0ZWd5XG4gICAqL1xuICByZWFkb25seSBpbmRleFN0cmF0ZWd5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBQeXRob24gcGFja2FnZSBpbmRleCAoYnkgZGVmYXVsdDogPGh0dHBzOi8vcHlwaS5vcmcvc2ltcGxlPikuXG4gICAqXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgcmVwb3NpdG9yeSBjb21wbGlhbnQgd2l0aCBbUEVQIDUwM10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MDMvKVxuICAgKiAodGhlIHNpbXBsZSByZXBvc2l0b3J5IEFQSSksIG9yIGEgbG9jYWwgZGlyZWN0b3J5IGxhaWQgb3V0IGluIHRoZSBzYW1lIGZvcm1hdC5cbiAgICpcbiAgICogVGhlIGluZGV4IHByb3ZpZGVkIGJ5IHRoaXMgc2V0dGluZyBpcyBnaXZlbiBsb3dlciBwcmlvcml0eSB0aGFuIGFueSBpbmRleGVzIHNwZWNpZmllZCB2aWFcbiAgICogW2BleHRyYV9pbmRleF91cmxgXSgjZXh0cmEtaW5kZXgtdXJsKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2luZGV4LXVybFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gdXNlIGBrZXlyaW5nYCBmb3IgYXV0aGVudGljYXRpb24gZm9yIGluZGV4IFVSTHMuXG4gICAqXG4gICAqIEF0IHByZXNlbnQsIG9ubHkgYC0ta2V5cmluZy1wcm92aWRlciBzdWJwcm9jZXNzYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGNvbmZpZ3VyZXMgdXYgdG9cbiAgICogdXNlIHRoZSBga2V5cmluZ2AgQ0xJIHRvIGhhbmRsZSBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2tleXJpbmctcHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGtleXJpbmdQcm92aWRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1ldGhvZCB0byB1c2Ugd2hlbiBpbnN0YWxsaW5nIHBhY2thZ2VzIGZyb20gdGhlIGdsb2JhbCBjYWNoZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYGNsb25lYCAoYWxzbyBrbm93biBhcyBDb3B5LW9uLVdyaXRlKSBvbiBtYWNPUywgYW5kIGBoYXJkbGlua2Agb24gTGludXggYW5kXG4gICAqIFdpbmRvd3MuXG4gICAqXG4gICAqIFdBUk5JTkc6IFRoZSB1c2Ugb2Ygc3ltbGluayBsaW5rIG1vZGUgaXMgZGlzY291cmFnZWQsIGFzIHRoZXkgY3JlYXRlIHRpZ2h0IGNvdXBsaW5nIGJldHdlZW5cbiAgICogdGhlIGNhY2hlIGFuZCB0aGUgdGFyZ2V0IGVudmlyb25tZW50LiBGb3IgZXhhbXBsZSwgY2xlYXJpbmcgdGhlIGNhY2hlIChgdXYgY2FjaGUgY2xlYW5gKVxuICAgKiB3aWxsIGJyZWFrIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgYnkgd2F5IG9mIHJlbW92aW5nIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmaWxlcy4gVXNlXG4gICAqIHN5bWxpbmtzIHdpdGggY2F1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgY2xvbmVgIChhbHNvIGtub3duIGFzIENvcHktb24tV3JpdGUpIG9uIG1hY09TLCBhbmQgYGhhcmRsaW5rYCBvbiBMaW51eCBhbmRcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2xpbmstbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbGlua01vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4Y2x1ZGUgY29tbWVudCBhbm5vdGF0aW9ucyBpbmRpY2F0aW5nIHRoZSBzb3VyY2Ugb2YgZWFjaCBwYWNrYWdlIGZyb20gdGhlIG91dHB1dCBmaWxlXG4gICAqIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tYW5ub3RhdGVcbiAgICovXG4gIHJlYWRvbmx5IG5vQW5ub3RhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb24ndCBpbnN0YWxsIHByZS1idWlsdCB3aGVlbHMuXG4gICAqXG4gICAqIFRoZSBnaXZlbiBwYWNrYWdlcyB3aWxsIGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgZnJvbSBzb3VyY2UuIFRoZSByZXNvbHZlciB3aWxsIHN0aWxsIHVzZVxuICAgKiBwcmUtYnVpbHQgd2hlZWxzIHRvIGV4dHJhY3QgcGFja2FnZSBtZXRhZGF0YSwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBNdWx0aXBsZSBwYWNrYWdlcyBtYXkgYmUgcHJvdmlkZWQuIERpc2FibGUgYmluYXJpZXMgZm9yIGFsbCBwYWNrYWdlcyB3aXRoIGA6YWxsOmAuXG4gICAqIENsZWFyIHByZXZpb3VzbHkgc3BlY2lmaWVkIHBhY2thZ2VzIHdpdGggYDpub25lOmAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1iaW5hcnlcbiAgICovXG4gIHJlYWRvbmx5IG5vQmluYXJ5Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERvbid0IGJ1aWxkIHNvdXJjZSBkaXN0cmlidXRpb25zLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHJlc29sdmluZyB3aWxsIG5vdCBydW4gYXJiaXRyYXJ5IFB5dGhvbiBjb2RlLiBUaGUgY2FjaGVkIHdoZWVscyBvZlxuICAgKiBhbHJlYWR5LWJ1aWx0IHNvdXJjZSBkaXN0cmlidXRpb25zIHdpbGwgYmUgcmV1c2VkLCBidXQgb3BlcmF0aW9ucyB0aGF0IHJlcXVpcmUgYnVpbGRpbmdcbiAgICogZGlzdHJpYnV0aW9ucyB3aWxsIGV4aXQgd2l0aCBhbiBlcnJvci5cbiAgICpcbiAgICogQWxpYXMgZm9yIGAtLW9ubHktYmluYXJ5IDphbGw6YC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWJ1aWxkXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogQXNzdW1lcyB0aGF0IGJ1aWxkIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkgW1BFUCA1MThdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE4LylcbiAgICogYXJlIGFscmVhZHkgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tYnVpbGQtaXNvbGF0aW9uXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkSXNvbGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLlxuICAgKlxuICAgKiBBc3N1bWVzIHRoYXQgdGhlIHBhY2thZ2VzJyBidWlsZCBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkIGJ5IFtQRVAgNTE4XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxOC8pXG4gICAqIGFyZSBhbHJlYWR5IGluc3RhbGxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkSXNvbGF0aW9uUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJZ25vcmUgcGFja2FnZSBkZXBlbmRlbmNpZXMsIGluc3RlYWQgb25seSBhZGQgdGhvc2UgcGFja2FnZXMgZXhwbGljaXRseSBsaXN0ZWRcbiAgICogb24gdGhlIGNvbW1hbmQgbGluZSB0byB0aGUgcmVzdWx0aW5nIHJlcXVpcmVtZW50cyBmaWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tZGVwc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9EZXBzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmeSBhIHBhY2thZ2UgdG8gb21pdCBmcm9tIHRoZSBvdXRwdXQgcmVzb2x1dGlvbi4gSXRzIGRlcGVuZGVuY2llcyB3aWxsIHN0aWxsIGJlXG4gICAqIGluY2x1ZGVkIGluIHRoZSByZXNvbHV0aW9uLiBFcXVpdmFsZW50IHRvIHBpcC1jb21waWxlJ3MgYC0tdW5zYWZlLXBhY2thZ2VgIG9wdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWVtaXQtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9FbWl0UGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFeGNsdWRlIHRoZSBzcGVjaWZpZWQgb3B0aW9uYWwgZGVwZW5kZW5jaWVzIGlmIGBhbGwtZXh0cmFzYCBpcyBzdXBwbGllZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWV4dHJhXG4gICAqL1xuICByZWFkb25seSBub0V4dHJhPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEV4Y2x1ZGUgdGhlIGNvbW1lbnQgaGVhZGVyIGF0IHRoZSB0b3Agb2Ygb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1oZWFkZXJcbiAgICovXG4gIHJlYWRvbmx5IG5vSGVhZGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWdub3JlIGFsbCByZWdpc3RyeSBpbmRleGVzIChlLmcuLCBQeVBJKSwgaW5zdGVhZCByZWx5aW5nIG9uIGRpcmVjdCBVUkwgZGVwZW5kZW5jaWVzIGFuZFxuICAgKiB0aG9zZSBwcm92aWRlZCB2aWEgYC0tZmluZC1saW5rc2AuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1pbmRleFxuICAgKi9cbiAgcmVhZG9ubHkgbm9JbmRleD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElnbm9yZSB0aGUgYHRvb2wudXYuc291cmNlc2AgdGFibGUgd2hlbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzLiBVc2VkIHRvIGxvY2sgYWdhaW5zdCB0aGVcbiAgICogc3RhbmRhcmRzLWNvbXBsaWFudCwgcHVibGlzaGFibGUgcGFja2FnZSBtZXRhZGF0YSwgYXMgb3Bwb3NlZCB0byB1c2luZyBhbnkgbG9jYWwgb3IgR2l0XG4gICAqIHNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1zb3VyY2VzXG4gICAqL1xuICByZWFkb25seSBub1NvdXJjZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGV4dHJhcyBpbiB0aGUgb3V0cHV0IGZpbGUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHN0cmlwcyBleHRyYXMsIGFzIGFueSBwYWNrYWdlcyBwdWxsZWQgaW4gYnkgdGhlIGV4dHJhcyBhcmUgYWxyZWFkeSBpbmNsdWRlZFxuICAgKiBhcyBkZXBlbmRlbmNpZXMgaW4gdGhlIG91dHB1dCBmaWxlIGRpcmVjdGx5LiBGdXJ0aGVyLCBvdXRwdXQgZmlsZXMgZ2VuZXJhdGVkIHdpdGhcbiAgICogYC0tbm8tc3RyaXAtZXh0cmFzYCBjYW5ub3QgYmUgdXNlZCBhcyBjb25zdHJhaW50cyBmaWxlcyBpbiBgaW5zdGFsbGAgYW5kIGBzeW5jYCBpbnZvY2F0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLXN0cmlwLWV4dHJhc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9TdHJpcEV4dHJhcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgZW52aXJvbm1lbnQgbWFya2VycyBpbiB0aGUgb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHN0cmlwcyBlbnZpcm9ubWVudCBtYXJrZXJzLCBhcyB0aGUgcmVzb2x1dGlvbiBnZW5lcmF0ZWQgYnkgYGNvbXBpbGVgIGlzXG4gICAqIG9ubHkgZ3VhcmFudGVlZCB0byBiZSBjb3JyZWN0IGZvciB0aGUgdGFyZ2V0IGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tc3RyaXAtbWFya2Vyc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9TdHJpcE1hcmtlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPbmx5IHVzZSBwcmUtYnVpbHQgd2hlZWxzOyBkb24ndCBidWlsZCBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCByZXNvbHZpbmcgd2lsbCBub3QgcnVuIGNvZGUgZnJvbSB0aGUgZ2l2ZW4gcGFja2FnZXMuIFRoZSBjYWNoZWQgd2hlZWxzIG9mIGFscmVhZHktYnVpbHRcbiAgICogc291cmNlIGRpc3RyaWJ1dGlvbnMgd2lsbCBiZSByZXVzZWQsIGJ1dCBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSBidWlsZGluZyBkaXN0cmlidXRpb25zIHdpbGxcbiAgICogZXhpdCB3aXRoIGFuIGVycm9yLlxuICAgKlxuICAgKiBNdWx0aXBsZSBwYWNrYWdlcyBtYXkgYmUgcHJvdmlkZWQuIERpc2FibGUgYmluYXJpZXMgZm9yIGFsbCBwYWNrYWdlcyB3aXRoIGA6YWxsOmAuXG4gICAqIENsZWFyIHByZXZpb3VzbHkgc3BlY2lmaWVkIHBhY2thZ2VzIHdpdGggYDpub25lOmAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNvbmx5LWJpbmFyeVxuICAgKi9cbiAgcmVhZG9ubHkgb25seUJpbmFyeT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgcmVxdWlyZW1lbnRzIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgIHRvIHRoZSBnaXZlbiBgcmVxdWlyZW1lbnRzLnR4dGAgZmlsZS5cbiAgICpcbiAgICogSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoZSBleGlzdGluZyB2ZXJzaW9ucyB3aWxsIGJlIHByZWZlcnJlZCB3aGVuIHJlc29sdmluZ1xuICAgKiBkZXBlbmRlbmNpZXMsIHVubGVzcyBgLS11cGdyYWRlYCBpcyBhbHNvIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI291dHB1dC1maWxlXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRGaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnN0YWxsIHBhY2thZ2VzIGludG8gYGxpYmAsIGBiaW5gLCBhbmQgb3RoZXIgdG9wLWxldmVsIGZvbGRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZFxuICAgKiBkaXJlY3RvcnksIGFzIGlmIGEgdmlydHVhbCBlbnZpcm9ubWVudCB3ZXJlIHByZXNlbnQgYXQgdGhhdCBsb2NhdGlvbi5cbiAgICpcbiAgICogSW4gZ2VuZXJhbCwgcHJlZmVyIHRoZSB1c2Ugb2YgYC0tcHl0aG9uYCB0byBpbnN0YWxsIGludG8gYW4gYWx0ZXJuYXRlIGVudmlyb25tZW50LCBhc1xuICAgKiBzY3JpcHRzIGFuZCBvdGhlciBhcnRpZmFjdHMgaW5zdGFsbGVkIHZpYSBgLS1wcmVmaXhgIHdpbGwgcmVmZXJlbmNlIHRoZSBpbnN0YWxsaW5nXG4gICAqIGludGVycHJldGVyLCByYXRoZXIgdGhhbiBhbnkgaW50ZXJwcmV0ZXIgYWRkZWQgdG8gdGhlIGAtLXByZWZpeGAgZGlyZWN0b3J5LCByZW5kZXJpbmcgdGhlbVxuICAgKiBub24tcG9ydGFibGUuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIGNvbnNpZGVyaW5nIHByZS1yZWxlYXNlIHZlcnNpb25zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIGFjY2VwdCBwcmUtcmVsZWFzZXMgZm9yIHBhY2thZ2VzIHRoYXQgX29ubHlfIHB1Ymxpc2ggcHJlLXJlbGVhc2VzLFxuICAgKiBhbG9uZyB3aXRoIGZpcnN0LXBhcnR5IHJlcXVpcmVtZW50cyB0aGF0IGNvbnRhaW4gYW4gZXhwbGljaXQgcHJlLXJlbGVhc2UgbWFya2VyIGluIHRoZVxuICAgKiBkZWNsYXJlZCBzcGVjaWZpZXJzIChgaWYtbmVjZXNzYXJ5LW9yLWV4cGxpY2l0YCkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNwcmVyZWxlYXNlXG4gICAqL1xuICByZWFkb25seSBwcmVyZWxlYXNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIGludGVycHJldGVyIGludG8gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGluc3RhbGxlZC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgaW5zdGFsbHMgaW50byB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvclxuICAgKiBhbnkgcGFyZW50IGRpcmVjdG9yeS4gVGhlIGAtLXB5dGhvbmAgb3B0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBpbnRlcnByZXRlcixcbiAgICogd2hpY2ggaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjb250aW51b3VzIGludGVncmF0aW9uIChDSSkgZW52aXJvbm1lbnRzIG9yIG90aGVyIGF1dG9tYXRlZFxuICAgKiB3b3JrZmxvd3MuXG4gICAqXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAtIGAzLjEwYCBsb29rcyBmb3IgYW4gaW5zdGFsbGVkIFB5dGhvbiAzLjEwIGluIHRoZSByZWdpc3RyeSBvbiBXaW5kb3dzIChzZWVcbiAgICogYHB5IC0tbGlzdC1wYXRoc2ApLCBvciBgcHl0aG9uMy4xMGAgb24gTGludXggYW5kIG1hY09TLlxuICAgKiAtIGBweXRob24zLjEwYCBvciBgcHl0aG9uLmV4ZWAgbG9va3MgZm9yIGEgYmluYXJ5IHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gYFBBVEhgLlxuICAgKiAtIGAvaG9tZS9mZXJyaXMvLmxvY2FsL2Jpbi9weXRob24zLjEwYCB1c2VzIHRoZSBleGFjdCBQeXRob24gYXQgdGhlIGdpdmVuIHBhdGguXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNweXRob25cbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsYXRmb3JtIGZvciB3aGljaCByZXF1aXJlbWVudHMgc2hvdWxkIGJlIHJlc29sdmVkLlxuICAgKlxuICAgKiBSZXByZXNlbnRlZCBhcyBhIFwidGFyZ2V0IHRyaXBsZVwiLCBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUgdGFyZ2V0IHBsYXRmb3JtIGluIHRlcm1zIG9mXG4gICAqIGl0cyBDUFUsIHZlbmRvciwgYW5kIG9wZXJhdGluZyBzeXN0ZW0gbmFtZSwgbGlrZSBgeDg2XzY0LXVua25vd24tbGludXgtZ251YCBvclxuICAgKiBgYWFyY2g2NC1hcHBsZS1kYXJ3aW5gLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjcHl0aG9uLXBsYXRmb3JtXG4gICAqL1xuICByZWFkb25seSBweXRob25QbGF0Zm9ybT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gUHl0aG9uIHZlcnNpb24gdGhhdCBzaG91bGQgYmUgc3VwcG9ydGVkIGJ5IHRoZSByZXNvbHZlZCByZXF1aXJlbWVudHMgKGUuZy4sXG4gICAqIGAzLjhgIG9yIGAzLjguMTdgKS5cbiAgICpcbiAgICogSWYgYSBwYXRjaCB2ZXJzaW9uIGlzIG9taXR0ZWQsIHRoZSBtaW5pbXVtIHBhdGNoIHZlcnNpb24gaXMgYXNzdW1lZC4gRm9yIGV4YW1wbGUsIGAzLjhgIGlzXG4gICAqIG1hcHBlZCB0byBgMy44LjBgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjcHl0aG9uLXZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlaW5zdGFsbCBhbGwgcGFja2FnZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5J3JlIGFscmVhZHkgaW5zdGFsbGVkLiBJbXBsaWVzIGByZWZyZXNoYC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3JlaW5zdGFsbFxuICAgKi9cbiAgcmVhZG9ubHkgcmVpbnN0YWxsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVpbnN0YWxsIGEgc3BlY2lmaWMgcGFja2FnZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0J3MgYWxyZWFkeSBpbnN0YWxsZWQuIEltcGxpZXNcbiAgICogYHJlZnJlc2gtcGFja2FnZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNyZWluc3RhbGwtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVpbnN0YWxsUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlIGEgbWF0Y2hpbmcgaGFzaCBmb3IgZWFjaCByZXF1aXJlbWVudC5cbiAgICpcbiAgICogSGFzaC1jaGVja2luZyBtb2RlIGlzIGFsbCBvciBub3RoaW5nLiBJZiBlbmFibGVkLCBfYWxsXyByZXF1aXJlbWVudHMgbXVzdCBiZSBwcm92aWRlZFxuICAgKiB3aXRoIGEgY29ycmVzcG9uZGluZyBoYXNoIG9yIHNldCBvZiBoYXNoZXMuIEFkZGl0aW9uYWxseSwgaWYgZW5hYmxlZCwgX2FsbF8gcmVxdWlyZW1lbnRzXG4gICAqIG11c3QgZWl0aGVyIGJlIHBpbm5lZCB0byBleGFjdCB2ZXJzaW9ucyAoZS5nLiwgYD09MS4wLjBgKSwgb3IgYmUgc3BlY2lmaWVkIHZpYSBkaXJlY3QgVVJMLlxuICAgKlxuICAgKiBIYXNoLWNoZWNraW5nIG1vZGUgaW50cm9kdWNlcyBhIG51bWJlciBvZiBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzOlxuICAgKlxuICAgKiAtIEdpdCBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAqIC0gRWRpdGFibGUgaW5zdGFsbGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICogLSBMb2NhbCBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQsIHVubGVzcyB0aGV5IHBvaW50IHRvIGEgc3BlY2lmaWMgd2hlZWwgKGAud2hsYCkgb3JcbiAgICogc291cmNlIGFyY2hpdmUgKGAuemlwYCwgYC50YXIuZ3pgKSwgYXMgb3Bwb3NlZCB0byBhIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3JlcXVpcmUtaGFzaGVzXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlSGFzaGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHNlbGVjdGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tcGF0aWJsZSB2ZXJzaW9ucyBmb3IgYSBnaXZlblxuICAgKiBwYWNrYWdlIHJlcXVpcmVtZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIHVzZSB0aGUgbGF0ZXN0IGNvbXBhdGlibGUgdmVyc2lvbiBvZiBlYWNoIHBhY2thZ2UgKGBoaWdoZXN0YCkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNyZXNvbHV0aW9uXG4gICAqL1xuICByZWFkb25seSByZXNvbHV0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgUHl0aG9uIGVudmlyb25tZW50LCB0byBkZXRlY3QgcGFja2FnZXMgd2l0aCBtaXNzaW5nIGRlcGVuZGVuY2llcyBhbmQgb3RoZXJcbiAgICogaXNzdWVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjc3RyaWN0XG4gICAqL1xuICByZWFkb25seSBzdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbnN0YWxsIHBhY2thZ2VzIGludG8gdGhlIHN5c3RlbSBQeXRob24gZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGluc3RhbGxzIGludG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3JcbiAgICogYW55IHBhcmVudCBkaXJlY3RvcnkuIFRoZSBgLS1zeXN0ZW1gIG9wdGlvbiBpbnN0cnVjdHMgdXYgdG8gaW5zdGVhZCB1c2UgdGhlIGZpcnN0IFB5dGhvblxuICAgKiBmb3VuZCBpbiB0aGUgc3lzdGVtIGBQQVRIYC5cbiAgICpcbiAgICogV0FSTklORzogYC0tc3lzdGVtYCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gKENJKSBlbnZpcm9ubWVudHMgYW5kXG4gICAqIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbiwgYXMgaXQgY2FuIG1vZGlmeSB0aGUgc3lzdGVtIFB5dGhvbiBpbnN0YWxsYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNzeXN0ZW1cbiAgICovXG4gIHJlYWRvbmx5IHN5c3RlbT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluc3RhbGwgcGFja2FnZXMgaW50byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwgcmF0aGVyIHRoYW4gaW50byB0aGUgdmlydHVhbCBvciBzeXN0ZW0gUHl0aG9uXG4gICAqIGVudmlyb25tZW50LiBUaGUgcGFja2FnZXMgd2lsbCBiZSBpbnN0YWxsZWQgYXQgdGhlIHRvcC1sZXZlbCBvZiB0aGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYWNrZW5kIHRvIHVzZSB3aGVuIGZldGNoaW5nIHBhY2thZ2VzIGluIHRoZSBQeVRvcmNoIGVjb3N5c3RlbS5cbiAgICpcbiAgICogV2hlbiBzZXQsIHV2IHdpbGwgaWdub3JlIHRoZSBjb25maWd1cmVkIGluZGV4IFVSTHMgZm9yIHBhY2thZ2VzIGluIHRoZSBQeVRvcmNoIGVjb3N5c3RlbSxcbiAgICogYW5kIHdpbGwgaW5zdGVhZCB1c2UgdGhlIGRlZmluZWQgYmFja2VuZC5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIHdoZW4gc2V0IHRvIGBjcHVgLCB1diB3aWxsIHVzZSB0aGUgQ1BVLW9ubHkgUHlUb3JjaCBpbmRleDsgd2hlbiBzZXQgdG8gYGN1MTI2YCxcbiAgICogdXYgd2lsbCB1c2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTIuNi5cbiAgICpcbiAgICogVGhlIGBhdXRvYCBtb2RlIHdpbGwgYXR0ZW1wdCB0byBkZXRlY3QgdGhlIGFwcHJvcHJpYXRlIFB5VG9yY2ggaW5kZXggYmFzZWQgb24gdGhlIGN1cnJlbnRseVxuICAgKiBpbnN0YWxsZWQgQ1VEQSBkcml2ZXJzLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbiBwcmV2aWV3IGFuZCBtYXkgY2hhbmdlIGluIGFueSBmdXR1cmUgcmVsZWFzZS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3RvcmNoLWJhY2tlbmRcbiAgICovXG4gIHJlYWRvbmx5IHRvcmNoQmFja2VuZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGVyZm9ybSBhIHVuaXZlcnNhbCByZXNvbHV0aW9uLCBhdHRlbXB0aW5nIHRvIGdlbmVyYXRlIGEgc2luZ2xlIGByZXF1aXJlbWVudHMudHh0YCBvdXRwdXRcbiAgICogZmlsZSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgb3BlcmF0aW5nIHN5c3RlbXMsIGFyY2hpdGVjdHVyZXMsIGFuZCBQeXRob25cbiAgICogaW1wbGVtZW50YXRpb25zLlxuICAgKlxuICAgKiBJbiB1bml2ZXJzYWwgbW9kZSwgdGhlIGN1cnJlbnQgUHl0aG9uIHZlcnNpb24gKG9yIHVzZXItcHJvdmlkZWQgYC0tcHl0aG9uLXZlcnNpb25gKSB3aWxsIGJlXG4gICAqIHRyZWF0ZWQgYXMgYSBsb3dlciBib3VuZC4gRm9yIGV4YW1wbGUsIGAtLXVuaXZlcnNhbCAtLXB5dGhvbi12ZXJzaW9uIDMuN2Agd291bGQgcHJvZHVjZSBhXG4gICAqIHVuaXZlcnNhbCByZXNvbHV0aW9uIGZvciBQeXRob24gMy43IGFuZCBsYXRlci5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3VuaXZlcnNhbFxuICAgKi9cbiAgcmVhZG9ubHkgdW5pdmVyc2FsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgcGFja2FnZSB1cGdyYWRlcywgaWdub3JpbmcgcGlubmVkIHZlcnNpb25zIGluIGFueSBleGlzdGluZyBvdXRwdXQgZmlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3VwZ3JhZGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvdyB1cGdyYWRlcyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLCBpZ25vcmluZyBwaW5uZWQgdmVyc2lvbnMgaW4gYW55IGV4aXN0aW5nIG91dHB1dFxuICAgKiBmaWxlLlxuICAgKlxuICAgKiBBY2NlcHRzIGJvdGggc3RhbmRhbG9uZSBwYWNrYWdlIG5hbWVzIChgcnVmZmApIGFuZCB2ZXJzaW9uIHNwZWNpZmllcnMgKGBydWZmPDAuNS4wYCkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyN1cGdyYWRlLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGVQYWNrYWdlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFueSBoYXNoZXMgcHJvdmlkZWQgaW4gdGhlIHJlcXVpcmVtZW50cyBmaWxlLlxuICAgKlxuICAgKiBVbmxpa2UgYC0tcmVxdWlyZS1oYXNoZXNgLCBgLS12ZXJpZnktaGFzaGVzYCBkb2VzIG5vdCByZXF1aXJlIHRoYXQgYWxsIHJlcXVpcmVtZW50cyBoYXZlXG4gICAqIGhhc2hlczsgaW5zdGVhZCwgaXQgd2lsbCBsaW1pdCBpdHNlbGYgdG8gdmVyaWZ5aW5nIHRoZSBoYXNoZXMgb2YgdGhvc2UgcmVxdWlyZW1lbnRzIHRoYXQgZG9cbiAgICogaW5jbHVkZSB0aGVtLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjdmVyaWZ5LWhhc2hlc1xuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5SGFzaGVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUGlwT3B0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1BpcE9wdGlvbnMob2JqOiBQaXBPcHRpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWxsLWV4dHJhcyc6IG9iai5hbGxFeHRyYXMsXG4gICAgJ2FsbG93LWVtcHR5LXJlcXVpcmVtZW50cyc6IG9iai5hbGxvd0VtcHR5UmVxdWlyZW1lbnRzLFxuICAgICdhbm5vdGF0aW9uLXN0eWxlJzogb2JqLmFubm90YXRpb25TdHlsZSxcbiAgICAnYnJlYWstc3lzdGVtLXBhY2thZ2VzJzogb2JqLmJyZWFrU3lzdGVtUGFja2FnZXMsXG4gICAgJ2NvbXBpbGUtYnl0ZWNvZGUnOiBvYmouY29tcGlsZUJ5dGVjb2RlLFxuICAgICdjb25maWctc2V0dGluZ3MnOiAoKG9iai5jb25maWdTZXR0aW5ncykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmNvbmZpZ1NldHRpbmdzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSxcbiAgICAnY29uZmlnLXNldHRpbmdzLXBhY2thZ2UnOiAoKG9iai5jb25maWdTZXR0aW5nc1BhY2thZ2UpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5jb25maWdTZXR0aW5nc1BhY2thZ2UpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiAoKGlbMV0pID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKGlbMV0pLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpIH0pLCB7fSkpLFxuICAgICdjdXN0b20tY29tcGlsZS1jb21tYW5kJzogb2JqLmN1c3RvbUNvbXBpbGVDb21tYW5kLFxuICAgICdkZXBlbmRlbmN5LW1ldGFkYXRhJzogb2JqLmRlcGVuZGVuY3lNZXRhZGF0YT8ubWFwKHkgPT4gdG9Kc29uX1N0YXRpY01ldGFkYXRhKHkpKSxcbiAgICAnZW1pdC1idWlsZC1vcHRpb25zJzogb2JqLmVtaXRCdWlsZE9wdGlvbnMsXG4gICAgJ2VtaXQtZmluZC1saW5rcyc6IG9iai5lbWl0RmluZExpbmtzLFxuICAgICdlbWl0LWluZGV4LWFubm90YXRpb24nOiBvYmouZW1pdEluZGV4QW5ub3RhdGlvbixcbiAgICAnZW1pdC1pbmRleC11cmwnOiBvYmouZW1pdEluZGV4VXJsLFxuICAgICdlbWl0LW1hcmtlci1leHByZXNzaW9uJzogb2JqLmVtaXRNYXJrZXJFeHByZXNzaW9uLFxuICAgICdleGNsdWRlLW5ld2VyJzogb2JqLmV4Y2x1ZGVOZXdlcixcbiAgICAnZXhjbHVkZS1uZXdlci1wYWNrYWdlJzogKChvYmouZXhjbHVkZU5ld2VyUGFja2FnZSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmV4Y2x1ZGVOZXdlclBhY2thZ2UpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdleHRyYSc6IG9iai5leHRyYT8ubWFwKHkgPT4geSksXG4gICAgJ2V4dHJhLWJ1aWxkLWRlcGVuZGVuY2llcyc6ICgob2JqLmV4dHJhQnVpbGREZXBlbmRlbmNpZXMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5leHRyYUJ1aWxkRGVwZW5kZW5jaWVzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXT8ubWFwKHkgPT4geSkgfSksIHt9KSksXG4gICAgJ2V4dHJhLWJ1aWxkLXZhcmlhYmxlcyc6ICgob2JqLmV4dHJhQnVpbGRWYXJpYWJsZXMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5leHRyYUJ1aWxkVmFyaWFibGVzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogKChpWzFdKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhpWzFdKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSB9KSwge30pKSxcbiAgICAnZXh0cmEtaW5kZXgtdXJsJzogb2JqLmV4dHJhSW5kZXhVcmw/Lm1hcCh5ID0+IHkpLFxuICAgICdmaW5kLWxpbmtzJzogb2JqLmZpbmRMaW5rcz8ubWFwKHkgPT4geSksXG4gICAgJ2Zvcmstc3RyYXRlZ3knOiBvYmouZm9ya1N0cmF0ZWd5LFxuICAgICdnZW5lcmF0ZS1oYXNoZXMnOiBvYmouZ2VuZXJhdGVIYXNoZXMsXG4gICAgJ2dyb3VwJzogb2JqLmdyb3VwPy5tYXAoeSA9PiB0b0pzb25fUGlwR3JvdXBOYW1lKHkpKSxcbiAgICAnaW5kZXgtc3RyYXRlZ3knOiBvYmouaW5kZXhTdHJhdGVneSxcbiAgICAnaW5kZXgtdXJsJzogb2JqLmluZGV4VXJsLFxuICAgICdrZXlyaW5nLXByb3ZpZGVyJzogb2JqLmtleXJpbmdQcm92aWRlcixcbiAgICAnbGluay1tb2RlJzogb2JqLmxpbmtNb2RlLFxuICAgICduby1hbm5vdGF0ZSc6IG9iai5ub0Fubm90YXRlLFxuICAgICduby1iaW5hcnknOiBvYmoubm9CaW5hcnk/Lm1hcCh5ID0+IHkpLFxuICAgICduby1idWlsZCc6IG9iai5ub0J1aWxkLFxuICAgICduby1idWlsZC1pc29sYXRpb24nOiBvYmoubm9CdWlsZElzb2xhdGlvbixcbiAgICAnbm8tYnVpbGQtaXNvbGF0aW9uLXBhY2thZ2UnOiBvYmoubm9CdWlsZElzb2xhdGlvblBhY2thZ2U/Lm1hcCh5ID0+IHkpLFxuICAgICduby1kZXBzJzogb2JqLm5vRGVwcyxcbiAgICAnbm8tZW1pdC1wYWNrYWdlJzogb2JqLm5vRW1pdFBhY2thZ2U/Lm1hcCh5ID0+IHkpLFxuICAgICduby1leHRyYSc6IG9iai5ub0V4dHJhPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8taGVhZGVyJzogb2JqLm5vSGVhZGVyLFxuICAgICduby1pbmRleCc6IG9iai5ub0luZGV4LFxuICAgICduby1zb3VyY2VzJzogb2JqLm5vU291cmNlcyxcbiAgICAnbm8tc3RyaXAtZXh0cmFzJzogb2JqLm5vU3RyaXBFeHRyYXMsXG4gICAgJ25vLXN0cmlwLW1hcmtlcnMnOiBvYmoubm9TdHJpcE1hcmtlcnMsXG4gICAgJ29ubHktYmluYXJ5Jzogb2JqLm9ubHlCaW5hcnk/Lm1hcCh5ID0+IHkpLFxuICAgICdvdXRwdXQtZmlsZSc6IG9iai5vdXRwdXRGaWxlLFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICdwcmVyZWxlYXNlJzogb2JqLnByZXJlbGVhc2UsXG4gICAgJ3B5dGhvbic6IG9iai5weXRob24sXG4gICAgJ3B5dGhvbi1wbGF0Zm9ybSc6IG9iai5weXRob25QbGF0Zm9ybSxcbiAgICAncHl0aG9uLXZlcnNpb24nOiBvYmoucHl0aG9uVmVyc2lvbixcbiAgICAncmVpbnN0YWxsJzogb2JqLnJlaW5zdGFsbCxcbiAgICAncmVpbnN0YWxsLXBhY2thZ2UnOiBvYmoucmVpbnN0YWxsUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmUtaGFzaGVzJzogb2JqLnJlcXVpcmVIYXNoZXMsXG4gICAgJ3Jlc29sdXRpb24nOiBvYmoucmVzb2x1dGlvbixcbiAgICAnc3RyaWN0Jzogb2JqLnN0cmljdCxcbiAgICAnc3lzdGVtJzogb2JqLnN5c3RlbSxcbiAgICAndGFyZ2V0Jzogb2JqLnRhcmdldCxcbiAgICAndG9yY2gtYmFja2VuZCc6IG9iai50b3JjaEJhY2tlbmQsXG4gICAgJ3VuaXZlcnNhbCc6IG9iai51bml2ZXJzYWwsXG4gICAgJ3VwZ3JhZGUnOiBvYmoudXBncmFkZSxcbiAgICAndXBncmFkZS1wYWNrYWdlJzogb2JqLnVwZ3JhZGVQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAndmVyaWZ5LWhhc2hlcyc6IG9iai52ZXJpZnlIYXNoZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFRydXN0ZWRQdWJsaXNoaW5nXG4gKi9cbmV4cG9ydCBlbnVtIFRydXN0ZWRQdWJsaXNoaW5nIHtcbiAgLyoqIGFsd2F5cyAqL1xuICBBTFdBWVMgPSBcImFsd2F5c1wiLFxuICAvKiogbmV2ZXIgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBUb29sVXZXb3Jrc3BhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sVXZXb3Jrc3BhY2Uge1xuICAvKipcbiAgICogUGFja2FnZXMgdG8gZXhjbHVkZSBhcyB3b3Jrc3BhY2UgbWVtYmVycy4gSWYgYSBwYWNrYWdlIG1hdGNoZXMgYm90aCBgbWVtYmVyc2AgYW5kXG4gICAqIGBleGNsdWRlYCwgaXQgd2lsbCBiZSBleGNsdWRlZC5cbiAgICpcbiAgICogU3VwcG9ydHMgYm90aCBnbG9icyBhbmQgZXhwbGljaXQgcGF0aHMuXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBnbG9iIHN5bnRheCwgcmVmZXIgdG8gdGhlIFtgZ2xvYmAgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnJzL2dsb2IvbGF0ZXN0L2dsb2Ivc3RydWN0LlBhdHRlcm4uaHRtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVG9vbFV2V29ya3NwYWNlI2V4Y2x1ZGVcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGFja2FnZXMgdG8gaW5jbHVkZSBhcyB3b3Jrc3BhY2UgbWVtYmVycy5cbiAgICpcbiAgICogU3VwcG9ydHMgYm90aCBnbG9icyBhbmQgZXhwbGljaXQgcGF0aHMuXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBnbG9iIHN5bnRheCwgcmVmZXIgdG8gdGhlIFtgZ2xvYmAgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnJzL2dsb2IvbGF0ZXN0L2dsb2Ivc3RydWN0LlBhdHRlcm4uaHRtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVG9vbFV2V29ya3NwYWNlI21lbWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IG1lbWJlcnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVG9vbFV2V29ya3NwYWNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVG9vbFV2V29ya3NwYWNlKG9iajogVG9vbFV2V29ya3NwYWNlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZXhjbHVkZSc6IG9iai5leGNsdWRlPy5tYXAoeSA9PiB5KSxcbiAgICAnbWVtYmVycyc6IG9iai5tZW1iZXJzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIERhdGEgaW5jbHVkZXMgZm9yIHdoZWVscy5cbiAqXG4gKiBTZWUgYEJ1aWxkQmFja2VuZFNldHRpbmdzOjpkYXRhYC5cbiAqXG4gKiBAc2NoZW1hIFdoZWVsRGF0YUluY2x1ZGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2hlZWxEYXRhSW5jbHVkZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBXaGVlbERhdGFJbmNsdWRlcyNkYXRhXG4gICAqL1xuICByZWFkb25seSBkYXRhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFdoZWVsRGF0YUluY2x1ZGVzI2hlYWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlcnM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgV2hlZWxEYXRhSW5jbHVkZXMjcGxhdGxpYlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGxpYj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBXaGVlbERhdGFJbmNsdWRlcyNwdXJlbGliXG4gICAqL1xuICByZWFkb25seSBwdXJlbGliPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFdoZWVsRGF0YUluY2x1ZGVzI3NjcmlwdHNcbiAgICovXG4gIHJlYWRvbmx5IHNjcmlwdHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1doZWVsRGF0YUluY2x1ZGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fV2hlZWxEYXRhSW5jbHVkZXMob2JqOiBXaGVlbERhdGFJbmNsdWRlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2RhdGEnOiBvYmouZGF0YSxcbiAgICAnaGVhZGVycyc6IG9iai5oZWFkZXJzLFxuICAgICdwbGF0bGliJzogb2JqLnBsYXRsaWIsXG4gICAgJ3B1cmVsaWInOiBvYmoucHVyZWxpYixcbiAgICAnc2NyaXB0cyc6IG9iai5zY3JpcHRzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ2FjaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciBhbiBpbmRleC5cbiAqXG4gKiBAc2NoZW1hIEluZGV4Q2FjaGVDb250cm9sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDYWNoZUNvbnRyb2wge1xuICAvKipcbiAgICogQ2FjaGUgY29udHJvbCBoZWFkZXIgZm9yIFNpbXBsZSBBUEkgcmVxdWVzdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXhDYWNoZUNvbnRyb2wjYXBpXG4gICAqL1xuICByZWFkb25seSBhcGk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhY2hlIGNvbnRyb2wgaGVhZGVyIGZvciBmaWxlIGRvd25sb2Fkcy5cbiAgICpcbiAgICogQHNjaGVtYSBJbmRleENhY2hlQ29udHJvbCNmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0luZGV4Q2FjaGVDb250cm9sJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSW5kZXhDYWNoZUNvbnRyb2wob2JqOiBJbmRleENhY2hlQ29udHJvbCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FwaSc6IG9iai5hcGksXG4gICAgJ2ZpbGVzJzogb2JqLmZpbGVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIHBpcC1jb21wYXRpYmxlIHZhcmlhbnQgb2YgYSBbYEdyb3VwTmFtZWBdLlxuICpcbiAqIEVpdGhlciA8Z3JvdXBuYW1lPiBvciA8cGF0aD46PGdyb3VwbmFtZT4uXG4gKiBJZiA8cGF0aD4gaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0byBcInB5cHJvamVjdC50b21sXCIuXG4gKlxuICogQHNjaGVtYSBQaXBHcm91cE5hbWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBHcm91cE5hbWUge1xuICAvKipcbiAgICogQHNjaGVtYSBQaXBHcm91cE5hbWUjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFBpcEdyb3VwTmFtZSNwYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQaXBHcm91cE5hbWUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QaXBHcm91cE5hbWUob2JqOiBQaXBHcm91cE5hbWUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ3BhdGgnOiBvYmoucGF0aCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuIl19
559
+ /**
560
+ * The supported target triples. Each triple consists of an architecture, vendor, and operating
561
+ * system.
562
+ *
563
+ * See: <https://doc.rust-lang.org/nightly/rustc/platform-support.html>
564
+ *
565
+ * @schema TargetTriple
566
+ */
567
+ var TargetTriple;
568
+ (function (TargetTriple) {
569
+ /** An alias for `x86_64-pc-windows-msvc`, the default target for Windows. (windows) */
570
+ TargetTriple["WINDOWS"] = "windows";
571
+ /** An alias for `x86_64-unknown-linux-gnu`, the default target for Linux. (linux) */
572
+ TargetTriple["LINUX"] = "linux";
573
+ /** An alias for `aarch64-apple-darwin`, the default target for macOS. (macos) */
574
+ TargetTriple["MACOS"] = "macos";
575
+ /** A 64-bit x86 Windows target. (x86_64-pc-windows-msvc) */
576
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_PC_HYPHEN_WINDOWS_HYPHEN_MSVC"] = "x86_64-pc-windows-msvc";
577
+ /** An ARM64 Windows target. (aarch64-pc-windows-msvc) */
578
+ TargetTriple["AARCH64_HYPHEN_PC_HYPHEN_WINDOWS_HYPHEN_MSVC"] = "aarch64-pc-windows-msvc";
579
+ /** A 32-bit x86 Windows target. (i686-pc-windows-msvc) */
580
+ TargetTriple["I686_HYPHEN_PC_HYPHEN_WINDOWS_HYPHEN_MSVC"] = "i686-pc-windows-msvc";
581
+ /** An x86 Linux target. Equivalent to `x86_64-manylinux_2_28`. (x86_64-unknown-linux-gnu) */
582
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_UNKNOWN_HYPHEN_LINUX_HYPHEN_GNU"] = "x86_64-unknown-linux-gnu";
583
+ /** An ARM-based macOS target, as seen on Apple Silicon devices
584
+
585
+ By default, assumes the least-recent, non-EOL macOS version (13.0), but respects
586
+ the `MACOSX_DEPLOYMENT_TARGET` environment variable if set. (aarch64-apple-darwin) */
587
+ TargetTriple["AARCH64_HYPHEN_APPLE_HYPHEN_DARWIN"] = "aarch64-apple-darwin";
588
+ /** An x86 macOS target.
589
+
590
+ By default, assumes the least-recent, non-EOL macOS version (13.0), but respects
591
+ the `MACOSX_DEPLOYMENT_TARGET` environment variable if set. (x86_64-apple-darwin) */
592
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_APPLE_HYPHEN_DARWIN"] = "x86_64-apple-darwin";
593
+ /** An ARM64 Linux target. Equivalent to `aarch64-manylinux_2_28`. (aarch64-unknown-linux-gnu) */
594
+ TargetTriple["AARCH64_HYPHEN_UNKNOWN_HYPHEN_LINUX_HYPHEN_GNU"] = "aarch64-unknown-linux-gnu";
595
+ /** An ARM64 Linux target. (aarch64-unknown-linux-musl) */
596
+ TargetTriple["AARCH64_HYPHEN_UNKNOWN_HYPHEN_LINUX_HYPHEN_MUSL"] = "aarch64-unknown-linux-musl";
597
+ /** An `x86_64` Linux target. (x86_64-unknown-linux-musl) */
598
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_UNKNOWN_HYPHEN_LINUX_HYPHEN_MUSL"] = "x86_64-unknown-linux-musl";
599
+ /** A RISCV64 Linux target. (riscv64-unknown-linux) */
600
+ TargetTriple["RISCV64_HYPHEN_UNKNOWN_HYPHEN_LINUX"] = "riscv64-unknown-linux";
601
+ /** An `x86_64` target for the `manylinux2014` platform. Equivalent to `x86_64-manylinux_2_17`. (x86_64-manylinux2014) */
602
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX2014"] = "x86_64-manylinux2014";
603
+ /** An `x86_64` target for the `manylinux_2_17` platform. (x86_64-manylinux_2_17) */
604
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_17"] = "x86_64-manylinux_2_17";
605
+ /** An `x86_64` target for the `manylinux_2_28` platform. (x86_64-manylinux_2_28) */
606
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_28"] = "x86_64-manylinux_2_28";
607
+ /** An `x86_64` target for the `manylinux_2_31` platform. (x86_64-manylinux_2_31) */
608
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_31"] = "x86_64-manylinux_2_31";
609
+ /** An `x86_64` target for the `manylinux_2_32` platform. (x86_64-manylinux_2_32) */
610
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_32"] = "x86_64-manylinux_2_32";
611
+ /** An `x86_64` target for the `manylinux_2_33` platform. (x86_64-manylinux_2_33) */
612
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_33"] = "x86_64-manylinux_2_33";
613
+ /** An `x86_64` target for the `manylinux_2_34` platform. (x86_64-manylinux_2_34) */
614
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_34"] = "x86_64-manylinux_2_34";
615
+ /** An `x86_64` target for the `manylinux_2_35` platform. (x86_64-manylinux_2_35) */
616
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_35"] = "x86_64-manylinux_2_35";
617
+ /** An `x86_64` target for the `manylinux_2_36` platform. (x86_64-manylinux_2_36) */
618
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_36"] = "x86_64-manylinux_2_36";
619
+ /** An `x86_64` target for the `manylinux_2_37` platform. (x86_64-manylinux_2_37) */
620
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_37"] = "x86_64-manylinux_2_37";
621
+ /** An `x86_64` target for the `manylinux_2_38` platform. (x86_64-manylinux_2_38) */
622
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_38"] = "x86_64-manylinux_2_38";
623
+ /** An `x86_64` target for the `manylinux_2_39` platform. (x86_64-manylinux_2_39) */
624
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_39"] = "x86_64-manylinux_2_39";
625
+ /** An `x86_64` target for the `manylinux_2_40` platform. (x86_64-manylinux_2_40) */
626
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_40"] = "x86_64-manylinux_2_40";
627
+ /** An ARM64 target for the `manylinux2014` platform. Equivalent to `aarch64-manylinux_2_17`. (aarch64-manylinux2014) */
628
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX2014"] = "aarch64-manylinux2014";
629
+ /** An ARM64 target for the `manylinux_2_17` platform. (aarch64-manylinux_2_17) */
630
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_17"] = "aarch64-manylinux_2_17";
631
+ /** An ARM64 target for the `manylinux_2_28` platform. (aarch64-manylinux_2_28) */
632
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_28"] = "aarch64-manylinux_2_28";
633
+ /** An ARM64 target for the `manylinux_2_31` platform. (aarch64-manylinux_2_31) */
634
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_31"] = "aarch64-manylinux_2_31";
635
+ /** An ARM64 target for the `manylinux_2_32` platform. (aarch64-manylinux_2_32) */
636
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_32"] = "aarch64-manylinux_2_32";
637
+ /** An ARM64 target for the `manylinux_2_33` platform. (aarch64-manylinux_2_33) */
638
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_33"] = "aarch64-manylinux_2_33";
639
+ /** An ARM64 target for the `manylinux_2_34` platform. (aarch64-manylinux_2_34) */
640
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_34"] = "aarch64-manylinux_2_34";
641
+ /** An ARM64 target for the `manylinux_2_35` platform. (aarch64-manylinux_2_35) */
642
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_35"] = "aarch64-manylinux_2_35";
643
+ /** An ARM64 target for the `manylinux_2_36` platform. (aarch64-manylinux_2_36) */
644
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_36"] = "aarch64-manylinux_2_36";
645
+ /** An ARM64 target for the `manylinux_2_37` platform. (aarch64-manylinux_2_37) */
646
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_37"] = "aarch64-manylinux_2_37";
647
+ /** An ARM64 target for the `manylinux_2_38` platform. (aarch64-manylinux_2_38) */
648
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_38"] = "aarch64-manylinux_2_38";
649
+ /** An ARM64 target for the `manylinux_2_39` platform. (aarch64-manylinux_2_39) */
650
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_39"] = "aarch64-manylinux_2_39";
651
+ /** An ARM64 target for the `manylinux_2_40` platform. (aarch64-manylinux_2_40) */
652
+ TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_40"] = "aarch64-manylinux_2_40";
653
+ /** An ARM64 Android target.
654
+
655
+ By default uses Android API level 24, but respects
656
+ the `ANDROID_API_LEVEL` environment variable if set. (aarch64-linux-android) */
657
+ TargetTriple["AARCH64_HYPHEN_LINUX_HYPHEN_ANDROID"] = "aarch64-linux-android";
658
+ /** An `x86_64` Android target.
659
+
660
+ By default uses Android API level 24, but respects
661
+ the `ANDROID_API_LEVEL` environment variable if set. (x86_64-linux-android) */
662
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_LINUX_HYPHEN_ANDROID"] = "x86_64-linux-android";
663
+ /** A wasm32 target using the Pyodide 2024 platform. Meant for use with Python 3.12. (wasm32-pyodide2024) */
664
+ TargetTriple["WASM32_HYPHEN_PYODIDE2024"] = "wasm32-pyodide2024";
665
+ /** An ARM64 target for iOS device
666
+
667
+ By default, iOS 13.0 is used, but respects the `IPHONEOS_DEPLOYMENT_TARGET`
668
+ environment variable if set. (arm64-apple-ios) */
669
+ TargetTriple["ARM64_HYPHEN_APPLE_HYPHEN_IOS"] = "arm64-apple-ios";
670
+ /** An ARM64 target for iOS simulator
671
+
672
+ By default, iOS 13.0 is used, but respects the `IPHONEOS_DEPLOYMENT_TARGET`
673
+ environment variable if set. (arm64-apple-ios-simulator) */
674
+ TargetTriple["ARM64_HYPHEN_APPLE_HYPHEN_IOS_HYPHEN_SIMULATOR"] = "arm64-apple-ios-simulator";
675
+ /** An `x86_64` target for iOS simulator
676
+
677
+ By default, iOS 13.0 is used, but respects the `IPHONEOS_DEPLOYMENT_TARGET`
678
+ environment variable if set. (x86_64-apple-ios-simulator) */
679
+ TargetTriple["X86_UNDERSCORE_64_HYPHEN_APPLE_HYPHEN_IOS_HYPHEN_SIMULATOR"] = "x86_64-apple-ios-simulator";
680
+ })(TargetTriple || (exports.TargetTriple = TargetTriple = {}));
681
+ /**
682
+ * The strategy to use when determining the appropriate PyTorch index.
683
+ *
684
+ * @schema TorchMode
685
+ */
686
+ var TorchMode;
687
+ (function (TorchMode) {
688
+ /** Select the appropriate PyTorch index based on the operating system and CUDA driver version. (auto) */
689
+ TorchMode["AUTO"] = "auto";
690
+ /** Use the CPU-only PyTorch index. (cpu) */
691
+ TorchMode["CPU"] = "cpu";
692
+ /** Use the PyTorch index for CUDA 13.0. (cu130) */
693
+ TorchMode["CU130"] = "cu130";
694
+ /** Use the PyTorch index for CUDA 12.9. (cu129) */
695
+ TorchMode["CU129"] = "cu129";
696
+ /** Use the PyTorch index for CUDA 12.8. (cu128) */
697
+ TorchMode["CU128"] = "cu128";
698
+ /** Use the PyTorch index for CUDA 12.6. (cu126) */
699
+ TorchMode["CU126"] = "cu126";
700
+ /** Use the PyTorch index for CUDA 12.5. (cu125) */
701
+ TorchMode["CU125"] = "cu125";
702
+ /** Use the PyTorch index for CUDA 12.4. (cu124) */
703
+ TorchMode["CU124"] = "cu124";
704
+ /** Use the PyTorch index for CUDA 12.3. (cu123) */
705
+ TorchMode["CU123"] = "cu123";
706
+ /** Use the PyTorch index for CUDA 12.2. (cu122) */
707
+ TorchMode["CU122"] = "cu122";
708
+ /** Use the PyTorch index for CUDA 12.1. (cu121) */
709
+ TorchMode["CU121"] = "cu121";
710
+ /** Use the PyTorch index for CUDA 12.0. (cu120) */
711
+ TorchMode["CU120"] = "cu120";
712
+ /** Use the PyTorch index for CUDA 11.8. (cu118) */
713
+ TorchMode["CU118"] = "cu118";
714
+ /** Use the PyTorch index for CUDA 11.7. (cu117) */
715
+ TorchMode["CU117"] = "cu117";
716
+ /** Use the PyTorch index for CUDA 11.6. (cu116) */
717
+ TorchMode["CU116"] = "cu116";
718
+ /** Use the PyTorch index for CUDA 11.5. (cu115) */
719
+ TorchMode["CU115"] = "cu115";
720
+ /** Use the PyTorch index for CUDA 11.4. (cu114) */
721
+ TorchMode["CU114"] = "cu114";
722
+ /** Use the PyTorch index for CUDA 11.3. (cu113) */
723
+ TorchMode["CU113"] = "cu113";
724
+ /** Use the PyTorch index for CUDA 11.2. (cu112) */
725
+ TorchMode["CU112"] = "cu112";
726
+ /** Use the PyTorch index for CUDA 11.1. (cu111) */
727
+ TorchMode["CU111"] = "cu111";
728
+ /** Use the PyTorch index for CUDA 11.0. (cu110) */
729
+ TorchMode["CU110"] = "cu110";
730
+ /** Use the PyTorch index for CUDA 10.2. (cu102) */
731
+ TorchMode["CU102"] = "cu102";
732
+ /** Use the PyTorch index for CUDA 10.1. (cu101) */
733
+ TorchMode["CU101"] = "cu101";
734
+ /** Use the PyTorch index for CUDA 10.0. (cu100) */
735
+ TorchMode["CU100"] = "cu100";
736
+ /** Use the PyTorch index for CUDA 9.2. (cu92) */
737
+ TorchMode["CU92"] = "cu92";
738
+ /** Use the PyTorch index for CUDA 9.1. (cu91) */
739
+ TorchMode["CU91"] = "cu91";
740
+ /** Use the PyTorch index for CUDA 9.0. (cu90) */
741
+ TorchMode["CU90"] = "cu90";
742
+ /** Use the PyTorch index for CUDA 8.0. (cu80) */
743
+ TorchMode["CU80"] = "cu80";
744
+ /** Use the PyTorch index for ROCm 6.3. (rocm6.3) */
745
+ TorchMode["ROCM6_3"] = "rocm6.3";
746
+ /** Use the PyTorch index for ROCm 6.2.4. (rocm6.2.4) */
747
+ TorchMode["ROCM6_2_4"] = "rocm6.2.4";
748
+ /** Use the PyTorch index for ROCm 6.2. (rocm6.2) */
749
+ TorchMode["ROCM6_2"] = "rocm6.2";
750
+ /** Use the PyTorch index for ROCm 6.1. (rocm6.1) */
751
+ TorchMode["ROCM6_1"] = "rocm6.1";
752
+ /** Use the PyTorch index for ROCm 6.0. (rocm6.0) */
753
+ TorchMode["ROCM6_0"] = "rocm6.0";
754
+ /** Use the PyTorch index for ROCm 5.7. (rocm5.7) */
755
+ TorchMode["ROCM5_7"] = "rocm5.7";
756
+ /** Use the PyTorch index for ROCm 5.6. (rocm5.6) */
757
+ TorchMode["ROCM5_6"] = "rocm5.6";
758
+ /** Use the PyTorch index for ROCm 5.5. (rocm5.5) */
759
+ TorchMode["ROCM5_5"] = "rocm5.5";
760
+ /** Use the PyTorch index for ROCm 5.4.2. (rocm5.4.2) */
761
+ TorchMode["ROCM5_4_2"] = "rocm5.4.2";
762
+ /** Use the PyTorch index for ROCm 5.4. (rocm5.4) */
763
+ TorchMode["ROCM5_4"] = "rocm5.4";
764
+ /** Use the PyTorch index for ROCm 5.3. (rocm5.3) */
765
+ TorchMode["ROCM5_3"] = "rocm5.3";
766
+ /** Use the PyTorch index for ROCm 5.2. (rocm5.2) */
767
+ TorchMode["ROCM5_2"] = "rocm5.2";
768
+ /** Use the PyTorch index for ROCm 5.1.1. (rocm5.1.1) */
769
+ TorchMode["ROCM5_1_1"] = "rocm5.1.1";
770
+ /** Use the PyTorch index for ROCm 4.2. (rocm4.2) */
771
+ TorchMode["ROCM4_2"] = "rocm4.2";
772
+ /** Use the PyTorch index for ROCm 4.1. (rocm4.1) */
773
+ TorchMode["ROCM4_1"] = "rocm4.1";
774
+ /** Use the PyTorch index for ROCm 4.0.1. (rocm4.0.1) */
775
+ TorchMode["ROCM4_0_1"] = "rocm4.0.1";
776
+ /** Use the PyTorch index for Intel XPU. (xpu) */
777
+ TorchMode["XPU"] = "xpu";
778
+ })(TorchMode || (exports.TorchMode = TorchMode = {}));
779
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXYtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B5dGhvbi91di1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK3VCQSx3REF3RUM7QUF5TEQsa0VBY0M7QUFpQ0QsOERBU0M7QUFvQkQsd0VBT0M7QUE2Q0Qsc0RBV0M7QUFvS0Qsb0NBZUM7QUFrdEJELDhDQWtFQztBQWdIRCx3REFRQztBQTBDRCw0REFXQztBQW9ERCw0REFRQztBQW1ERCxrREFRQztBQTVuREQ7OztHQUdHO0FBQ0gscUZBQXFGO0FBQ3JGLFNBQWdCLHNCQUFzQixDQUFDLEdBQWdDO0lBQ3JFLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsWUFBWSxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQzNCLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekQsZUFBZSxFQUFFLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFDOUQsK0JBQStCLEVBQUUsR0FBRyxDQUFDLDJCQUEyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RSxXQUFXLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDekIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUTtRQUN6QixrQkFBa0IsRUFBRSxHQUFHLENBQUMsZUFBZTtRQUN2QyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsZ0JBQWdCO1FBQ3pDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxtQkFBbUI7UUFDL0MscUJBQXFCLEVBQUUsR0FB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RUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxTix1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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QUFFLEdBQUcsQ0FBQyxlQUFlO1FBQ3ZDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BMLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNVLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxvQkFBb0I7UUFDbEQscUJBQXFCLEVBQUUsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxnQkFBZ0I7UUFDMUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGFBQWE7UUFDcEMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLG1CQUFtQjtRQUNoRCxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsWUFBWTtRQUNsQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsb0JBQW9CO1FBQ2xELGVBQWUsRUFBRSxHQUFHLENBQUMsWUFBWTtRQUNqQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcE0sT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxTix1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMs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QUN4RCxvQ0FBdUIsQ0FBQTtJQUN2QixpREFBaUQ7SUFDakQsd0JBQVcsQ0FBQTtBQUNiLENBQUMsRUEzRlcsU0FBUyx5QkFBVCxTQUFTLFFBMkZwQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5vZGUgLi9wcm9qZW4uanNcIi5cbi8qKlxuICogTWV0YWRhdGEgYW5kIGNvbmZpZ3VyYXRpb24gZm9yIHV2LlxuICpcbiAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXZDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZlcnNpb24gc3BlY2lmaWVyIHdoZW4gYWRkaW5nIGEgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogV2hlbiBhZGRpbmcgYSBkZXBlbmRlbmN5IHRvIHRoZSBwcm9qZWN0LCBpZiBubyBjb25zdHJhaW50IG9yIFVSTCBpcyBwcm92aWRlZCwgYSBjb25zdHJhaW50XG4gICAqIGlzIGFkZGVkIGJhc2VkIG9uIHRoZSBsYXRlc3QgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLiBCeSBkZWZhdWx0LCBhIGxvd2VyIGJvdW5kXG4gICAqIGNvbnN0cmFpbnQgaXMgdXNlZCwgZS5nLiwgYD49MS4yLjNgLlxuICAgKlxuICAgKiBXaGVuIGAtLWZyb3plbmAgaXMgcHJvdmlkZWQsIG5vIHJlc29sdXRpb24gaXMgcGVyZm9ybWVkLCBhbmQgZGVwZW5kZW5jaWVzIGFyZSBhbHdheXMgYWRkZWRcbiAgICogd2l0aG91dCBjb25zdHJhaW50cy5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgaW4gcHJldmlldyBhbmQgbWF5IGNoYW5nZSBpbiBhbnkgZnV0dXJlIHJlbGVhc2UuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2FkZC1ib3VuZHNcbiAgICovXG4gIHJlYWRvbmx5IGFkZEJvdW5kcz86IEFkZEJvdW5kc0tpbmQ7XG5cbiAgLyoqXG4gICAqIEFsbG93IGluc2VjdXJlIGNvbm5lY3Rpb25zIHRvIGhvc3QuXG4gICAqXG4gICAqIEV4cGVjdHMgdG8gcmVjZWl2ZSBlaXRoZXIgYSBob3N0bmFtZSAoZS5nLiwgYGxvY2FsaG9zdGApLCBhIGhvc3QtcG9ydCBwYWlyIChlLmcuLFxuICAgKiBgbG9jYWxob3N0OjgwODBgKSwgb3IgYSBVUkwgKGUuZy4sIGBodHRwczovL2xvY2FsaG9zdGApLlxuICAgKlxuICAgKiBXQVJOSU5HOiBIb3N0cyBpbmNsdWRlZCBpbiB0aGlzIGxpc3Qgd2lsbCBub3QgYmUgdmVyaWZpZWQgYWdhaW5zdCB0aGUgc3lzdGVtJ3MgY2VydGlmaWNhdGVcbiAgICogc3RvcmUuIE9ubHkgdXNlIGAtLWFsbG93LWluc2VjdXJlLWhvc3RgIGluIGEgc2VjdXJlIG5ldHdvcmsgd2l0aCB2ZXJpZmllZCBzb3VyY2VzLCBhcyBpdFxuICAgKiBieXBhc3NlcyBTU0wgdmVyaWZpY2F0aW9uIGFuZCBjb3VsZCBleHBvc2UgeW91IHRvIE1JVE0gYXR0YWNrcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jYWxsb3ctaW5zZWN1cmUtaG9zdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dJbnNlY3VyZUhvc3Q/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHV2IGJ1aWxkIGJhY2tlbmQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aG9zZSBzZXR0aW5ncyBvbmx5IGFwcGx5IHdoZW4gdXNpbmcgdGhlIGB1dl9idWlsZGAgYmFja2VuZCwgb3RoZXIgYnVpbGQgYmFja2VuZHNcbiAgICogKHN1Y2ggYXMgaGF0Y2hsaW5nKSBoYXZlIHRoZWlyIG93biBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNidWlsZC1iYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBidWlsZEJhY2tlbmQ/OiBCdWlsZEJhY2tlbmRTZXR0aW5ncztcblxuICAvKipcbiAgICogUEVQIDUwOC1zdHlsZSByZXF1aXJlbWVudHMsIGUuZy4sIGBydWZmPT0wLjUuMGAsIG9yIGBydWZmIEAgaHR0cHM6Ly8uLi5gLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNidWlsZC1jb25zdHJhaW50LWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb25zdHJhaW50RGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGNhY2hlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY2FjaGUtZGlyXG4gICAqL1xuICByZWFkb25seSBjYWNoZURpcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtleXMgdG8gY29uc2lkZXIgd2hlbiBjYWNoaW5nIGJ1aWxkcyBmb3IgdGhlIHByb2plY3QuXG4gICAqXG4gICAqIENhY2hlIGtleXMgZW5hYmxlIHlvdSB0byBzcGVjaWZ5IHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGEgcmVidWlsZCB3aGVuXG4gICAqIG1vZGlmaWVkLiBCeSBkZWZhdWx0LCB1diB3aWxsIHJlYnVpbGQgYSBwcm9qZWN0IHdoZW5ldmVyIHRoZSBgcHlwcm9qZWN0LnRvbWxgLCBgc2V0dXAucHlgLFxuICAgKiBvciBgc2V0dXAuY2ZnYCBmaWxlcyBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnkgYXJlIG1vZGlmaWVkLCBvciBpZiBhIGBzcmNgIGRpcmVjdG9yeSBpc1xuICAgKiBhZGRlZCBvciByZW1vdmVkLCBpLmUuOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIGNhY2hlLWtleXMgPSBbeyBmaWxlID0gXCJweXByb2plY3QudG9tbFwiIH0sIHsgZmlsZSA9IFwic2V0dXAucHlcIiB9LCB7IGZpbGUgPSBcInNldHVwLmNmZ1wiIH0sIHsgZGlyID0gXCJzcmNcIiB9XVxuICAgKiBgYGBcbiAgICpcbiAgICogQXMgYW4gZXhhbXBsZTogaWYgYSBwcm9qZWN0IHVzZXMgZHluYW1pYyBtZXRhZGF0YSB0byByZWFkIGl0cyBkZXBlbmRlbmNpZXMgZnJvbSBhXG4gICAqIGByZXF1aXJlbWVudHMudHh0YCBmaWxlLCB5b3UgY2FuIHNwZWNpZnkgYGNhY2hlLWtleXMgPSBbeyBmaWxlID0gXCJyZXF1aXJlbWVudHMudHh0XCIgfSwgeyBmaWxlID0gXCJweXByb2plY3QudG9tbFwiIH1dYFxuICAgKiB0byBlbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBpcyByZWJ1aWx0IHdoZW5ldmVyIHRoZSBgcmVxdWlyZW1lbnRzLnR4dGAgZmlsZSBpcyBtb2RpZmllZCAoaW5cbiAgICogYWRkaXRpb24gdG8gd2F0Y2hpbmcgdGhlIGBweXByb2plY3QudG9tbGApLlxuICAgKlxuICAgKiBHbG9icyBhcmUgc3VwcG9ydGVkLCBmb2xsb3dpbmcgdGhlIHN5bnRheCBvZiB0aGUgW2BnbG9iYF0oaHR0cHM6Ly9kb2NzLnJzL2dsb2IvMC4zLjEvZ2xvYi9zdHJ1Y3QuUGF0dGVybi5odG1sKVxuICAgKiBjcmF0ZS4gRm9yIGV4YW1wbGUsIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlIHdoZW5ldmVyIGEgYC50b21sYCBmaWxlIGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeVxuICAgKiBvciBhbnkgb2YgaXRzIHN1YmRpcmVjdG9yaWVzIGlzIG1vZGlmaWVkLCB5b3UgY2FuIHNwZWNpZnkgYGNhY2hlLWtleXMgPSBbeyBmaWxlID0gXCIqXy8qLnRvbWxcIiB9XWAuXG4gICAqIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGdsb2JzIGNhbiBiZSBleHBlbnNpdmUsIGFzIHV2IG1heSBuZWVkIHRvIHdhbGsgdGhlIGZpbGVzeXN0ZW0gdG9cbiAgICogZGV0ZXJtaW5lIHdoZXRoZXIgYW55IGZpbGVzIGhhdmUgY2hhbmdlZC5cbiAgICpcbiAgICogQ2FjaGUga2V5cyBjYW4gYWxzbyBpbmNsdWRlIHZlcnNpb24gY29udHJvbCBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGlmIGEgcHJvamVjdCB1c2VzXG4gICAqIGBzZXR1cHRvb2xzX3NjbWAgdG8gcmVhZCBpdHMgdmVyc2lvbiBmcm9tIGEgR2l0IGNvbW1pdCwgeW91IGNhbiBzcGVjaWZ5IGBjYWNoZS1rZXlzID0gW3sgZ2l0ID0geyBjb21taXQgPSB0cnVlIH0sIHsgZmlsZSA9IFwicHlwcm9qZWN0LnRvbWxcIiB9XWBcbiAgICogdG8gaW5jbHVkZSB0aGUgY3VycmVudCBHaXQgY29tbWl0IGhhc2ggaW4gdGhlIGNhY2hlIGtleSAoaW4gYWRkaXRpb24gdG8gdGhlXG4gICAqIGBweXByb2plY3QudG9tbGApLiBHaXQgdGFncyBhcmUgYWxzbyBzdXBwb3J0ZWQgdmlhIGBjYWNoZS1rZXlzID0gW3sgZ2l0ID0geyBjb21taXQgPSB0cnVlLCB0YWdzID0gdHJ1ZSB9IH1dYC5cbiAgICpcbiAgICogQ2FjaGUga2V5cyBjYW4gYWxzbyBpbmNsdWRlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gRm9yIGV4YW1wbGUsIGlmIGEgcHJvamVjdCByZWxpZXMgb25cbiAgICogYE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVGAgb3Igb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGRldGVybWluZSBpdHMgYmVoYXZpb3IsIHlvdSBjYW5cbiAgICogc3BlY2lmeSBgY2FjaGUta2V5cyA9IFt7IGVudiA9IFwiTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXCIgfV1gIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlXG4gICAqIHdoZW5ldmVyIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBDYWNoZSBrZXlzIG9ubHkgYWZmZWN0IHRoZSBwcm9qZWN0IGRlZmluZWQgYnkgdGhlIGBweXByb2plY3QudG9tbGAgaW4gd2hpY2ggdGhleSdyZVxuICAgKiBzcGVjaWZpZWQgKGFzIG9wcG9zZWQgdG8sIGUuZy4sIGFmZmVjdGluZyBhbGwgbWVtYmVycyBpbiBhIHdvcmtzcGFjZSksIGFuZCBhbGwgcGF0aHMgYW5kXG4gICAqIGdsb2JzIGFyZSBpbnRlcnByZXRlZCBhcyByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NhY2hlLWtleXNcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlS2V5cz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBDaGVjayBhbiBpbmRleCBVUkwgZm9yIGV4aXN0aW5nIGZpbGVzIHRvIHNraXAgZHVwbGljYXRlIHVwbG9hZHMuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyByZXRyeWluZyBwdWJsaXNoaW5nIHRoYXQgZmFpbGVkIGFmdGVyIG9ubHkgc29tZSwgYnV0IG5vdCBhbGwgZmlsZXMgaGF2ZVxuICAgKiBiZWVuIHVwbG9hZGVkLCBhbmQgaGFuZGxlcyBlcnJvciBkdWUgdG8gcGFyYWxsZWwgdXBsb2FkcyBvZiB0aGUgc2FtZSBmaWxlLlxuICAgKlxuICAgKiBCZWZvcmUgdXBsb2FkaW5nLCB0aGUgaW5kZXggaXMgY2hlY2tlZC4gSWYgdGhlIGV4YWN0IHNhbWUgZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgsXG4gICAqIHRoZSBmaWxlIHdpbGwgbm90IGJlIHVwbG9hZGVkLiBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIHVwbG9hZCwgdGhlIGluZGV4IGlzIGNoZWNrZWRcbiAgICogYWdhaW4sIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgaWRlbnRpY2FsIGZpbGUgd2FzIHVwbG9hZGVkIHR3aWNlIGluIHBhcmFsbGVsLlxuICAgKlxuICAgKiBUaGUgZXhhY3QgYmVoYXZpb3Igd2lsbCB2YXJ5IGJhc2VkIG9uIHRoZSBpbmRleC4gV2hlbiB1cGxvYWRpbmcgdG8gUHlQSSwgdXBsb2FkaW5nIHRoZSBzYW1lXG4gICAqIGZpbGUgc3VjY2VlZHMgZXZlbiB3aXRob3V0IGAtLWNoZWNrLXVybGAsIHdoaWxlIG1vc3Qgb3RoZXIgaW5kZXhlcyBlcnJvci5cbiAgICpcbiAgICogVGhlIGluZGV4IG11c3QgcHJvdmlkZSBvbmUgb2YgdGhlIHN1cHBvcnRlZCBoYXNoZXMgKFNIQS0yNTYsIFNIQS0zODQsIG9yIFNIQS01MTIpLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjaGVjay11cmxcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb21waWxlIFB5dGhvbiBmaWxlcyB0byBieXRlY29kZSBhZnRlciBpbnN0YWxsYXRpb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGRvZXMgbm90IGNvbXBpbGUgUHl0aG9uIChgLnB5YCkgZmlsZXMgdG8gYnl0ZWNvZGUgKGBfX3B5Y2FjaGVfXy8qLnB5Y2ApO1xuICAgKiBpbnN0ZWFkLCBjb21waWxhdGlvbiBpcyBwZXJmb3JtZWQgbGF6aWx5IHRoZSBmaXJzdCB0aW1lIGEgbW9kdWxlIGlzIGltcG9ydGVkLiBGb3IgdXNlLWNhc2VzXG4gICAqIGluIHdoaWNoIHN0YXJ0IHRpbWUgaXMgY3JpdGljYWwsIHN1Y2ggYXMgQ0xJIGFwcGxpY2F0aW9ucyBhbmQgRG9ja2VyIGNvbnRhaW5lcnMsIHRoaXMgb3B0aW9uXG4gICAqIGNhbiBiZSBlbmFibGVkIHRvIHRyYWRlIGxvbmdlciBpbnN0YWxsYXRpb24gdGltZXMgZm9yIGZhc3RlciBzdGFydCB0aW1lcy5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCB1diB3aWxsIHByb2Nlc3MgdGhlIGVudGlyZSBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSAoaW5jbHVkaW5nIHBhY2thZ2VzIHRoYXRcbiAgICogYXJlIG5vdCBiZWluZyBtb2RpZmllZCBieSB0aGUgY3VycmVudCBvcGVyYXRpb24pIGZvciBjb25zaXN0ZW5jeS4gTGlrZSBwaXAsIGl0IHdpbGwgYWxzb1xuICAgKiBpZ25vcmUgZXJyb3JzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb21waWxlLWJ5dGVjb2RlXG4gICAqL1xuICByZWFkb25seSBjb21waWxlQnl0ZWNvZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlIGRpc3RyaWJ1dGlvbnMgdGhhdCB1diB3aWxsIGJ1aWxkIGNvbmN1cnJlbnRseSBhdCBhbnkgZ2l2ZW5cbiAgICogdGltZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgQ1BVIGNvcmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBDUFUgY29yZXMuXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbmN1cnJlbnQtYnVpbGRzXG4gICAqL1xuICByZWFkb25seSBjb25jdXJyZW50QnVpbGRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IGNvbmN1cnJlbnQgZG93bmxvYWRzIHRoYXQgdXYgd2lsbCBwZXJmb3JtIGF0IGFueSBnaXZlblxuICAgKiB0aW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb25jdXJyZW50LWRvd25sb2Fkc1xuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVudERvd25sb2Fkcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB0aHJlYWRzIHVzZWQgd2hlbiBpbnN0YWxsaW5nIGFuZCB1bnppcHBpbmcgcGFja2FnZXMuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIENQVSBjb3Jlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgQ1BVIGNvcmVzLlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb25jdXJyZW50LWluc3RhbGxzXG4gICAqL1xuICByZWFkb25seSBjb25jdXJyZW50SW5zdGFsbHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIHRvIHBhc3MgdG8gdGhlIFtQRVAgNTE3XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxNy8pIGJ1aWxkIGJhY2tlbmQsXG4gICAqIHNwZWNpZmllZCBhcyBgS0VZPVZBTFVFYCBwYWlycy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY29uZmlnLXNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBjb25maWdTZXR0aW5ncz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIHRvIHBhc3MgdG8gdGhlIFtQRVAgNTE3XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxNy8pIGJ1aWxkIGJhY2tlbmQgZm9yIHNwZWNpZmljIHBhY2thZ2VzLFxuICAgKiBzcGVjaWZpZWQgYXMgYEtFWT1WQUxVRWAgcGFpcnMuXG4gICAqXG4gICAqIEFjY2VwdHMgYSBtYXAgZnJvbSBwYWNrYWdlIG5hbWVzIHRvIHN0cmluZyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbmZpZy1zZXR0aW5ncy1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBjb25maWdTZXR0aW5nc1BhY2thZ2U/OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogYW55IH0gfTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHNldHMgb2YgY29uZmxpY3RpbmcgZ3JvdXBzIG9yIGV4dHJhcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY29uZmxpY3RzXG4gICAqL1xuICByZWFkb25seSBjb25mbGljdHM/OiBTY2hlbWFDb25mbGljdEl0ZW1bXVtdO1xuXG4gIC8qKlxuICAgKiBQRVAgNTA4LXN0eWxlIHJlcXVpcmVtZW50cywgZS5nLiwgYHJ1ZmY9PTAuNS4wYCwgb3IgYHJ1ZmYgQCBodHRwczovLy4uLmAuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbnN0cmFpbnQtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBjb25zdHJhaW50RGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGBkZXBlbmRlbmN5LWdyb3Vwc2AgdG8gaW5zdGFsbCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBDYW4gYWxzbyBiZSB0aGUgbGl0ZXJhbCBgXCJhbGxcImAgdG8gZGVmYXVsdCBlbmFibGUgYWxsIGdyb3Vwcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZGVmYXVsdC1ncm91cHNcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRHcm91cHM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgc2V0dGluZ3MgZm9yIGBkZXBlbmRlbmN5LWdyb3Vwc2AuXG4gICAqXG4gICAqIEN1cnJlbnRseSB0aGlzIGNhbiBvbmx5IGJlIHVzZWQgdG8gYWRkIGByZXF1aXJlcy1weXRob25gIGNvbnN0cmFpbnRzXG4gICAqIHRvIGRlcGVuZGVuY3kgZ3JvdXBzICh0eXBpY2FsbHkgdG8gaW5mb3JtIHV2IHRoYXQgeW91ciBkZXYgdG9vbGluZ1xuICAgKiBoYXMgYSBoaWdoZXIgcHl0aG9uIHJlcXVpcmVtZW50IHRoYW4geW91ciBhY3R1YWwgcHJvamVjdCkuXG4gICAqXG4gICAqIFRoaXMgY2Fubm90IGJlIHVzZWQgdG8gZGVmaW5lIGRlcGVuZGVuY3kgZ3JvdXBzLCB1c2UgdGhlIHRvcC1sZXZlbFxuICAgKiBgW2RlcGVuZGVuY3ktZ3JvdXBzXWAgdGFibGUgZm9yIHRoYXQuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2RlcGVuZGVuY3ktZ3JvdXBzXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmN5R3JvdXBzPzogeyBba2V5OiBzdHJpbmddOiBEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncyB9O1xuXG4gIC8qKlxuICAgKiBQcmUtZGVmaW5lZCBzdGF0aWMgbWV0YWRhdGEgZm9yIGRlcGVuZGVuY2llcyBvZiB0aGUgcHJvamVjdCAoZGlyZWN0IG9yIHRyYW5zaXRpdmUpLiBXaGVuXG4gICAqIHByb3ZpZGVkLCBlbmFibGVzIHRoZSByZXNvbHZlciB0byB1c2UgdGhlIHNwZWNpZmllZCBtZXRhZGF0YSBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZVxuICAgKiByZWdpc3RyeSBvciBidWlsZGluZyB0aGUgcmVsZXZhbnQgcGFja2FnZSBmcm9tIHNvdXJjZS5cbiAgICpcbiAgICogTWV0YWRhdGEgc2hvdWxkIGJlIHByb3ZpZGVkIGluIGFkaGVyZW5jZSB3aXRoIHRoZSBbTWV0YWRhdGEgMi4zXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9jb3JlLW1ldGFkYXRhLylcbiAgICogc3RhbmRhcmQsIHRob3VnaCBvbmx5IHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSByZXNwZWN0ZWQ6XG4gICAqXG4gICAqIC0gYG5hbWVgOiBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZS5cbiAgICogLSAoT3B0aW9uYWwpIGB2ZXJzaW9uYDogVGhlIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuIElmIG9taXR0ZWQsIHRoZSBtZXRhZGF0YSB3aWxsIGJlIGFwcGxpZWRcbiAgICogdG8gYWxsIHZlcnNpb25zIG9mIHRoZSBwYWNrYWdlLlxuICAgKiAtIChPcHRpb25hbCkgYHJlcXVpcmVzLWRpc3RgOiBUaGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYWNrYWdlIChlLmcuLCBgd2Vya3pldWc+PTAuMTRgKS5cbiAgICogLSAoT3B0aW9uYWwpIGByZXF1aXJlcy1weXRob25gOiBUaGUgUHl0aG9uIHZlcnNpb24gcmVxdWlyZWQgYnkgdGhlIHBhY2thZ2UgKGUuZy4sIGA+PTMuMTBgKS5cbiAgICogLSAoT3B0aW9uYWwpIGBwcm92aWRlcy1leHRyYWA6IFRoZSBleHRyYXMgcHJvdmlkZWQgYnkgdGhlIHBhY2thZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2RlcGVuZGVuY3ktbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lNZXRhZGF0YT86IFN0YXRpY01ldGFkYXRhW107XG5cbiAgLyoqXG4gICAqIFBFUCA1MDgtc3R5bGUgcmVxdWlyZW1lbnRzLCBlLmcuLCBgcnVmZj09MC41LjBgLCBvciBgcnVmZiBAIGh0dHBzOi8vLi4uYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZGV2LWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZGV2RGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCBtYXJrZXJzLCBlLmcuLCBgcHl0aG9uX3ZlcnNpb24gPj0gJzMuNidgLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNlbnZpcm9ubWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlIG5hbWVzIHRvIGV4Y2x1ZGUsIGUuZy4sIGB3ZXJremV1Z2AsIGBudW1weWAuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2V4Y2x1ZGUtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlRGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpbWl0IGNhbmRpZGF0ZSBwYWNrYWdlcyB0byB0aG9zZSB0aGF0IHdlcmUgdXBsb2FkZWQgcHJpb3IgdG8gYSBnaXZlbiBwb2ludCBpbiB0aW1lLlxuICAgKlxuICAgKiBBY2NlcHRzIGEgc3VwZXJzZXQgb2YgW1JGQyAzMzM5XShodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzMzOS5odG1sKSAoZS5nLixcbiAgICogYDIwMDYtMTItMDJUMDI6MDc6NDNaYCkuIEEgZnVsbCB0aW1lc3RhbXAgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlc29sdmVyIHdpbGxcbiAgICogYmVoYXZlIGNvbnNpc3RlbnRseSBhY3Jvc3MgdGltZXpvbmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNleGNsdWRlLW5ld2VyXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlTmV3ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpbWl0IGNhbmRpZGF0ZSBwYWNrYWdlcyBmb3Igc3BlY2lmaWMgcGFja2FnZXMgdG8gdGhvc2UgdGhhdCB3ZXJlIHVwbG9hZGVkIHByaW9yIHRvIHRoZSBnaXZlbiBkYXRlLlxuICAgKlxuICAgKiBBY2NlcHRzIHBhY2thZ2UtZGF0ZSBwYWlycyBpbiBhIGRpY3Rpb25hcnkgZm9ybWF0LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNleGNsdWRlLW5ld2VyLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVOZXdlclBhY2thZ2U/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGJ1aWxkIGRlcGVuZGVuY2llcyBmb3IgcGFja2FnZXMuXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIGV4dGVuZGluZyB0aGUgUEVQIDUxNyBidWlsZCBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMgd2l0aFxuICAgKiBhZGRpdGlvbmFsIHBhY2thZ2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcGFja2FnZXMgdGhhdCBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIHBhY2thZ2VzIGxpa2VcbiAgICogYHBpcGAsIGFuZCBkbyBub3QgZGVjbGFyZSB0aGVtIGFzIGJ1aWxkIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZXh0cmEtYnVpbGQtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBleHRyYUJ1aWxkRGVwZW5kZW5jaWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IHdoZW4gYnVpbGRpbmcgY2VydGFpbiBwYWNrYWdlcy5cbiAgICpcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVudmlyb25tZW50IHdoZW4gYnVpbGRpbmcgdGhlXG4gICAqIHNwZWNpZmllZCBwYWNrYWdlcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZXh0cmEtYnVpbGQtdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBleHRyYUJ1aWxkVmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqXG4gICAqIEV4dHJhIFVSTHMgb2YgcGFja2FnZSBpbmRleGVzIHRvIHVzZSwgaW4gYWRkaXRpb24gdG8gYC0taW5kZXgtdXJsYC5cbiAgICpcbiAgICogQWNjZXB0cyBlaXRoZXIgYSByZXBvc2l0b3J5IGNvbXBsaWFudCB3aXRoIFtQRVAgNTAzXShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUwMy8pXG4gICAqICh0aGUgc2ltcGxlIHJlcG9zaXRvcnkgQVBJKSwgb3IgYSBsb2NhbCBkaXJlY3RvcnkgbGFpZCBvdXQgaW4gdGhlIHNhbWUgZm9ybWF0LlxuICAgKlxuICAgKiBBbGwgaW5kZXhlcyBwcm92aWRlZCB2aWEgdGhpcyBmbGFnIHRha2UgcHJpb3JpdHkgb3ZlciB0aGUgaW5kZXggc3BlY2lmaWVkIGJ5XG4gICAqIFtgaW5kZXhfdXJsYF0oI2luZGV4LXVybCkgb3IgW2BpbmRleGBdKCNpbmRleCkgd2l0aCBgZGVmYXVsdCA9IHRydWVgLiBXaGVuIG11bHRpcGxlIGluZGV4ZXNcbiAgICogYXJlIHByb3ZpZGVkLCBlYXJsaWVyIHZhbHVlcyB0YWtlIHByaW9yaXR5LlxuICAgKlxuICAgKiBUbyBjb250cm9sIHV2J3MgcmVzb2x1dGlvbiBzdHJhdGVneSB3aGVuIG11bHRpcGxlIGluZGV4ZXMgYXJlIHByZXNlbnQsIHNlZVxuICAgKiBbYGluZGV4X3N0cmF0ZWd5YF0oI2luZGV4LXN0cmF0ZWd5KS5cbiAgICpcbiAgICogKERlcHJlY2F0ZWQ6IHVzZSBgaW5kZXhgIGluc3RlYWQuKVxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNleHRyYS1pbmRleC11cmxcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhSW5kZXhVcmw/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTG9jYXRpb25zIHRvIHNlYXJjaCBmb3IgY2FuZGlkYXRlIGRpc3RyaWJ1dGlvbnMsIGluIGFkZGl0aW9uIHRvIHRob3NlIGZvdW5kIGluIHRoZSByZWdpc3RyeVxuICAgKiBpbmRleGVzLlxuICAgKlxuICAgKiBJZiBhIHBhdGgsIHRoZSB0YXJnZXQgbXVzdCBiZSBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHBhY2thZ2VzIGFzIHdoZWVsIGZpbGVzIChgLndobGApIG9yXG4gICAqIHNvdXJjZSBkaXN0cmlidXRpb25zIChlLmcuLCBgLnRhci5nemAgb3IgYC56aXBgKSBhdCB0aGUgdG9wIGxldmVsLlxuICAgKlxuICAgKiBJZiBhIFVSTCwgdGhlIHBhZ2UgbXVzdCBjb250YWluIGEgZmxhdCBsaXN0IG9mIGxpbmtzIHRvIHBhY2thZ2UgZmlsZXMgYWRoZXJpbmcgdG8gdGhlXG4gICAqIGZvcm1hdHMgZGVzY3JpYmVkIGFib3ZlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNmaW5kLWxpbmtzXG4gICAqL1xuICByZWFkb25seSBmaW5kTGlua3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHNlbGVjdGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhIGdpdmVuIHBhY2thZ2UgYWNyb3NzIFB5dGhvblxuICAgKiB2ZXJzaW9ucyBhbmQgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIG9wdGltaXplIGZvciBzZWxlY3RpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggcGFja2FnZSBmb3IgZWFjaFxuICAgKiBzdXBwb3J0ZWQgUHl0aG9uIHZlcnNpb24gKGByZXF1aXJlcy1weXRob25gKSwgd2hpbGUgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkXG4gICAqIHZlcnNpb25zIGFjcm9zcyBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIFVuZGVyIGBmZXdlc3RgLCB1diB3aWxsIG1pbmltaXplIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgdmVyc2lvbnMgZm9yIGVhY2ggcGFja2FnZSxcbiAgICogcHJlZmVycmluZyBvbGRlciB2ZXJzaW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggYSB3aWRlciByYW5nZSBvZiBzdXBwb3J0ZWQgUHl0aG9uXG4gICAqIHZlcnNpb25zIG9yIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZm9yay1zdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgZm9ya1N0cmF0ZWd5PzogRm9ya1N0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXhlcyB0byB1c2Ugd2hlbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBBY2NlcHRzIGVpdGhlciBhIHJlcG9zaXRvcnkgY29tcGxpYW50IHdpdGggW1BFUCA1MDNdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTAzLylcbiAgICogKHRoZSBzaW1wbGUgcmVwb3NpdG9yeSBBUEkpLCBvciBhIGxvY2FsIGRpcmVjdG9yeSBsYWlkIG91dCBpbiB0aGUgc2FtZSBmb3JtYXQuXG4gICAqXG4gICAqIEluZGV4ZXMgYXJlIGNvbnNpZGVyZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkncmUgZGVmaW5lZCwgc3VjaCB0aGF0IHRoZSBmaXJzdC1kZWZpbmVkXG4gICAqIGluZGV4IGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eS4gRnVydGhlciwgdGhlIGluZGV4ZXMgcHJvdmlkZWQgYnkgdGhpcyBzZXR0aW5nIGFyZSBnaXZlblxuICAgKiBoaWdoZXIgcHJpb3JpdHkgdGhhbiBhbnkgaW5kZXhlcyBzcGVjaWZpZWQgdmlhIFtgaW5kZXhfdXJsYF0oI2luZGV4LXVybCkgb3JcbiAgICogW2BleHRyYV9pbmRleF91cmxgXSgjZXh0cmEtaW5kZXgtdXJsKS4gdXYgd2lsbCBvbmx5IGNvbnNpZGVyIHRoZSBmaXJzdCBpbmRleCB0aGF0IGNvbnRhaW5zXG4gICAqIGEgZ2l2ZW4gcGFja2FnZSwgdW5sZXNzIGFuIGFsdGVybmF0aXZlIFtpbmRleCBzdHJhdGVneV0oI2luZGV4LXN0cmF0ZWd5KSBpcyBzcGVjaWZpZWQuXG4gICAqXG4gICAqIElmIGFuIGluZGV4IGlzIG1hcmtlZCBhcyBgZXhwbGljaXQgPSB0cnVlYCwgaXQgd2lsbCBiZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciB0aGVcbiAgICogZGVwZW5kZW5jaWVzIHRoYXQgc2VsZWN0IGl0IGV4cGxpY2l0bHkgdmlhIGBbdG9vbC51di5zb3VyY2VzXWAsIGFzIGluOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcInB5dG9yY2hcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vZG93bmxvYWQucHl0b3JjaC5vcmcvd2hsL2N1MTIxXCJcbiAgICogZXhwbGljaXQgPSB0cnVlXG4gICAqXG4gICAqIFt0b29sLnV2LnNvdXJjZXNdXG4gICAqIHRvcmNoID0geyBpbmRleCA9IFwicHl0b3JjaFwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIElmIGFuIGluZGV4IGlzIG1hcmtlZCBhcyBgZGVmYXVsdCA9IHRydWVgLCBpdCB3aWxsIGJlIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhlIHByaW9yaXRpemVkIGxpc3QsIHN1Y2ggdGhhdCBpdCBpc1xuICAgKiBnaXZlbiB0aGUgbG93ZXN0IHByaW9yaXR5IHdoZW4gcmVzb2x2aW5nIHBhY2thZ2VzLiBBZGRpdGlvbmFsbHksIG1hcmtpbmcgYW4gaW5kZXggYXMgZGVmYXVsdCB3aWxsIGRpc2FibGUgdGhlXG4gICAqIFB5UEkgZGVmYXVsdCBpbmRleC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jaW5kZXhcbiAgICovXG4gIHJlYWRvbmx5IGluZGV4PzogSW5kZXhbXTtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHJlc29sdmluZyBhZ2FpbnN0IG11bHRpcGxlIGluZGV4IFVSTHMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHdpbGwgc3RvcCBhdCB0aGUgZmlyc3QgaW5kZXggb24gd2hpY2ggYSBnaXZlbiBwYWNrYWdlIGlzIGF2YWlsYWJsZSwgYW5kXG4gICAqIGxpbWl0IHJlc29sdXRpb25zIHRvIHRob3NlIHByZXNlbnQgb24gdGhhdCBmaXJzdCBpbmRleCAoYGZpcnN0LWluZGV4YCkuIFRoaXMgcHJldmVudHNcbiAgICogXCJkZXBlbmRlbmN5IGNvbmZ1c2lvblwiIGF0dGFja3MsIHdoZXJlYnkgYW4gYXR0YWNrZXIgY2FuIHVwbG9hZCBhIG1hbGljaW91cyBwYWNrYWdlIHVuZGVyIHRoZVxuICAgKiBzYW1lIG5hbWUgdG8gYW4gYWx0ZXJuYXRlIGluZGV4LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNpbmRleC1zdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhTdHJhdGVneT86IEluZGV4U3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIFB5dGhvbiBwYWNrYWdlIGluZGV4IChieSBkZWZhdWx0OiA8aHR0cHM6Ly9weXBpLm9yZy9zaW1wbGU+KS5cbiAgICpcbiAgICogQWNjZXB0cyBlaXRoZXIgYSByZXBvc2l0b3J5IGNvbXBsaWFudCB3aXRoIFtQRVAgNTAzXShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUwMy8pXG4gICAqICh0aGUgc2ltcGxlIHJlcG9zaXRvcnkgQVBJKSwgb3IgYSBsb2NhbCBkaXJlY3RvcnkgbGFpZCBvdXQgaW4gdGhlIHNhbWUgZm9ybWF0LlxuICAgKlxuICAgKiBUaGUgaW5kZXggcHJvdmlkZWQgYnkgdGhpcyBzZXR0aW5nIGlzIGdpdmVuIGxvd2VyIHByaW9yaXR5IHRoYW4gYW55IGluZGV4ZXMgc3BlY2lmaWVkIHZpYVxuICAgKiBbYGV4dHJhX2luZGV4X3VybGBdKCNleHRyYS1pbmRleC11cmwpIG9yIFtgaW5kZXhgXSgjaW5kZXgpLlxuICAgKlxuICAgKiAoRGVwcmVjYXRlZDogdXNlIGBpbmRleGAgaW5zdGVhZC4pXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2luZGV4LXVybFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gdXNlIGBrZXlyaW5nYCBmb3IgYXV0aGVudGljYXRpb24gZm9yIGluZGV4IFVSTHMuXG4gICAqXG4gICAqIEF0IHByZXNlbnQsIG9ubHkgYC0ta2V5cmluZy1wcm92aWRlciBzdWJwcm9jZXNzYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGNvbmZpZ3VyZXMgdXYgdG9cbiAgICogdXNlIHRoZSBga2V5cmluZ2AgQ0xJIHRvIGhhbmRsZSBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24ja2V5cmluZy1wcm92aWRlclxuICAgKi9cbiAgcmVhZG9ubHkga2V5cmluZ1Byb3ZpZGVyPzogS2V5cmluZ1Byb3ZpZGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIG1ldGhvZCB0byB1c2Ugd2hlbiBpbnN0YWxsaW5nIHBhY2thZ2VzIGZyb20gdGhlIGdsb2JhbCBjYWNoZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYGNsb25lYCAoYWxzbyBrbm93biBhcyBDb3B5LW9uLVdyaXRlKSBvbiBtYWNPUywgYW5kIGBoYXJkbGlua2Agb24gTGludXggYW5kXG4gICAqIFdpbmRvd3MuXG4gICAqXG4gICAqIFdBUk5JTkc6IFRoZSB1c2Ugb2Ygc3ltbGluayBsaW5rIG1vZGUgaXMgZGlzY291cmFnZWQsIGFzIHRoZXkgY3JlYXRlIHRpZ2h0IGNvdXBsaW5nIGJldHdlZW5cbiAgICogdGhlIGNhY2hlIGFuZCB0aGUgdGFyZ2V0IGVudmlyb25tZW50LiBGb3IgZXhhbXBsZSwgY2xlYXJpbmcgdGhlIGNhY2hlIChgdXYgY2FjaGUgY2xlYW5gKVxuICAgKiB3aWxsIGJyZWFrIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgYnkgd2F5IG9mIHJlbW92aW5nIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmaWxlcy4gVXNlXG4gICAqIHN5bWxpbmtzIHdpdGggY2F1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgY2xvbmVgIChhbHNvIGtub3duIGFzIENvcHktb24tV3JpdGUpIG9uIG1hY09TLCBhbmQgYGhhcmRsaW5rYCBvbiBMaW51eCBhbmRcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbGluay1tb2RlXG4gICAqL1xuICByZWFkb25seSBsaW5rTW9kZT86IExpbmtNb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm9qZWN0IGlzIG1hbmFnZWQgYnkgdXYuIElmIGBmYWxzZWAsIHV2IHdpbGwgaWdub3JlIHRoZSBwcm9qZWN0IHdoZW5cbiAgICogYHV2IHJ1bmAgaXMgaW52b2tlZC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbWFuYWdlZFxuICAgKi9cbiAgcmVhZG9ubHkgbWFuYWdlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbG9hZCBUTFMgY2VydGlmaWNhdGVzIGZyb20gdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIGNlcnRpZmljYXRlIHN0b3JlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diBsb2FkcyBjZXJ0aWZpY2F0ZXMgZnJvbSB0aGUgYnVuZGxlZCBgd2VicGtpLXJvb3RzYCBjcmF0ZS4gVGhlXG4gICAqIGB3ZWJwa2ktcm9vdHNgIGFyZSBhIHJlbGlhYmxlIHNldCBvZiB0cnVzdCByb290cyBmcm9tIE1vemlsbGEsIGFuZCBpbmNsdWRpbmcgdGhlbSBpbiB1dlxuICAgKiBpbXByb3ZlcyBwb3J0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UgKGVzcGVjaWFsbHkgb24gbWFjT1MpLlxuICAgKlxuICAgKiBIb3dldmVyLCBpbiBzb21lIGNhc2VzLCB5b3UgbWF5IHdhbnQgdG8gdXNlIHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZSBjZXJ0aWZpY2F0ZSBzdG9yZSxcbiAgICogZXNwZWNpYWxseSBpZiB5b3UncmUgcmVseWluZyBvbiBhIGNvcnBvcmF0ZSB0cnVzdCByb290IChlLmcuLCBmb3IgYSBtYW5kYXRvcnkgcHJveHkpIHRoYXQnc1xuICAgKiBpbmNsdWRlZCBpbiB5b3VyIHN5c3RlbSdzIGNlcnRpZmljYXRlIHN0b3JlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuYXRpdmUtdGxzXG4gICAqL1xuICByZWFkb25seSBuYXRpdmVUbHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb24ndCBpbnN0YWxsIHByZS1idWlsdCB3aGVlbHMuXG4gICAqXG4gICAqIFRoZSBnaXZlbiBwYWNrYWdlcyB3aWxsIGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgZnJvbSBzb3VyY2UuIFRoZSByZXNvbHZlciB3aWxsIHN0aWxsIHVzZVxuICAgKiBwcmUtYnVpbHQgd2hlZWxzIHRvIGV4dHJhY3QgcGFja2FnZSBtZXRhZGF0YSwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1iaW5hcnlcbiAgICovXG4gIHJlYWRvbmx5IG5vQmluYXJ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG9uJ3QgaW5zdGFsbCBwcmUtYnVpbHQgd2hlZWxzIGZvciBhIHNwZWNpZmljIHBhY2thZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWJpbmFyeS1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBub0JpbmFyeVBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRG9uJ3QgYnVpbGQgc291cmNlIGRpc3RyaWJ1dGlvbnMuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgcmVzb2x2aW5nIHdpbGwgbm90IHJ1biBhcmJpdHJhcnkgUHl0aG9uIGNvZGUuIFRoZSBjYWNoZWQgd2hlZWxzIG9mXG4gICAqIGFscmVhZHktYnVpbHQgc291cmNlIGRpc3RyaWJ1dGlvbnMgd2lsbCBiZSByZXVzZWQsIGJ1dCBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSBidWlsZGluZ1xuICAgKiBkaXN0cmlidXRpb25zIHdpbGwgZXhpdCB3aXRoIGFuIGVycm9yLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1idWlsZFxuICAgKi9cbiAgcmVhZG9ubHkgbm9CdWlsZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpc2FibGUgaXNvbGF0aW9uIHdoZW4gYnVpbGRpbmcgc291cmNlIGRpc3RyaWJ1dGlvbnMuXG4gICAqXG4gICAqIEFzc3VtZXMgdGhhdCBidWlsZCBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkIGJ5IFtQRVAgNTE4XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxOC8pXG4gICAqIGFyZSBhbHJlYWR5IGluc3RhbGxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tYnVpbGQtaXNvbGF0aW9uXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkSXNvbGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLlxuICAgKlxuICAgKiBBc3N1bWVzIHRoYXQgdGhlIHBhY2thZ2VzJyBidWlsZCBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkIGJ5IFtQRVAgNTE4XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxOC8pXG4gICAqIGFyZSBhbHJlYWR5IGluc3RhbGxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tYnVpbGQtaXNvbGF0aW9uLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IG5vQnVpbGRJc29sYXRpb25QYWNrYWdlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERvbid0IGJ1aWxkIHNvdXJjZSBkaXN0cmlidXRpb25zIGZvciBhIHNwZWNpZmljIHBhY2thZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWJ1aWxkLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IG5vQnVpbGRQYWNrYWdlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEF2b2lkIHJlYWRpbmcgZnJvbSBvciB3cml0aW5nIHRvIHRoZSBjYWNoZSwgaW5zdGVhZCB1c2luZyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIHRoZVxuICAgKiBkdXJhdGlvbiBvZiB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1jYWNoZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9DYWNoZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElnbm9yZSBhbGwgcmVnaXN0cnkgaW5kZXhlcyAoZS5nLiwgUHlQSSksIGluc3RlYWQgcmVseWluZyBvbiBkaXJlY3QgVVJMIGRlcGVuZGVuY2llcyBhbmRcbiAgICogdGhvc2UgcHJvdmlkZWQgdmlhIGAtLWZpbmQtbGlua3NgLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1pbmRleFxuICAgKi9cbiAgcmVhZG9ubHkgbm9JbmRleD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElnbm9yZSB0aGUgYHRvb2wudXYuc291cmNlc2AgdGFibGUgd2hlbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzLiBVc2VkIHRvIGxvY2sgYWdhaW5zdCB0aGVcbiAgICogc3RhbmRhcmRzLWNvbXBsaWFudCwgcHVibGlzaGFibGUgcGFja2FnZSBtZXRhZGF0YSwgYXMgb3Bwb3NlZCB0byB1c2luZyBhbnkgbG9jYWwgb3IgR2l0XG4gICAqIHNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLXNvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IG5vU291cmNlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpc2FibGUgbmV0d29yayBhY2Nlc3MsIHJlbHlpbmcgb25seSBvbiBsb2NhbGx5IGNhY2hlZCBkYXRhIGFuZCBsb2NhbGx5IGF2YWlsYWJsZSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jb2ZmbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgb2ZmbGluZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBFUCA1MDgtc3R5bGUgcmVxdWlyZW1lbnRzLCBlLmcuLCBgcnVmZj09MC41LjBgLCBvciBgcnVmZiBAIGh0dHBzOi8vLi4uYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jb3ZlcnJpZGUtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZURlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm9qZWN0IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgUHl0aG9uIHBhY2thZ2UsIG9yIGEgbm9uLXBhY2thZ2UgKFwidmlydHVhbFwiKVxuICAgKiBwcm9qZWN0LlxuICAgKlxuICAgKiBQYWNrYWdlcyBhcmUgYnVpbHQgYW5kIGluc3RhbGxlZCBpbnRvIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGluIGVkaXRhYmxlIG1vZGUgYW5kIHRodXNcbiAgICogcmVxdWlyZSBhIGJ1aWxkIGJhY2tlbmQsIHdoaWxlIHZpcnR1YWwgcHJvamVjdHMgYXJlIF9ub3RfIGJ1aWx0IG9yIGluc3RhbGxlZDsgaW5zdGVhZCwgb25seVxuICAgKiB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGluY2x1ZGVkIGluIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBDcmVhdGluZyBhIHBhY2thZ2UgcmVxdWlyZXMgdGhhdCBhIGBidWlsZC1zeXN0ZW1gIGlzIHByZXNlbnQgaW4gdGhlIGBweXByb2plY3QudG9tbGAsIGFuZFxuICAgKiB0aGF0IHRoZSBwcm9qZWN0IGFkaGVyZXMgdG8gYSBzdHJ1Y3R1cmUgdGhhdCBhZGhlcmVzIHRvIHRoZSBidWlsZCBiYWNrZW5kJ3MgZXhwZWN0YXRpb25zXG4gICAqIChlLmcuLCBhIGBzcmNgIGxheW91dCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3BhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNwaXBcbiAgICovXG4gIHJlYWRvbmx5IHBpcD86IFBpcE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBjb25zaWRlcmluZyBwcmUtcmVsZWFzZSB2ZXJzaW9ucy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgd2lsbCBhY2NlcHQgcHJlLXJlbGVhc2VzIGZvciBwYWNrYWdlcyB0aGF0IF9vbmx5XyBwdWJsaXNoIHByZS1yZWxlYXNlcyxcbiAgICogYWxvbmcgd2l0aCBmaXJzdC1wYXJ0eSByZXF1aXJlbWVudHMgdGhhdCBjb250YWluIGFuIGV4cGxpY2l0IHByZS1yZWxlYXNlIG1hcmtlciBpbiB0aGVcbiAgICogZGVjbGFyZWQgc3BlY2lmaWVycyAoYGlmLW5lY2Vzc2FyeS1vci1leHBsaWNpdGApLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNwcmVyZWxlYXNlXG4gICAqL1xuICByZWFkb25seSBwcmVyZWxlYXNlPzogUHJlcmVsZWFzZU1vZGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGV4cGVyaW1lbnRhbCwgcHJldmlldyBmZWF0dXJlcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcHJldmlld1xuICAgKi9cbiAgcmVhZG9ubHkgcHJldmlldz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgZm9yIHB1Ymxpc2hpbmcgcGFja2FnZXMgdG8gdGhlIFB5dGhvbiBwYWNrYWdlIGluZGV4IChieSBkZWZhdWx0OlxuICAgKiA8aHR0cHM6Ly91cGxvYWQucHlwaS5vcmcvbGVnYWN5Lz4pLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNwdWJsaXNoLXVybFxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaFVybD86IHN0cmluZztcblxuICAvKipcbiAgICogTWlycm9yIFVSTCB0byB1c2UgZm9yIGRvd25sb2FkaW5nIG1hbmFnZWQgUHlQeSBpbnN0YWxsYXRpb25zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtYW5hZ2VkIFB5UHkgaW5zdGFsbGF0aW9ucyBhcmUgZG93bmxvYWRlZCBmcm9tIFtkb3dubG9hZHMucHl0aG9uLm9yZ10oaHR0cHM6Ly9kb3dubG9hZHMucHl0aG9uLm9yZy8pLlxuICAgKiBUaGlzIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBtaXJyb3IgVVJMIHRvIHVzZSBhIGRpZmZlcmVudCBzb3VyY2UgZm9yIFB5UHkgaW5zdGFsbGF0aW9ucy5cbiAgICogVGhlIHByb3ZpZGVkIFVSTCB3aWxsIHJlcGxhY2UgYGh0dHBzOi8vZG93bmxvYWRzLnB5dGhvbi5vcmcvcHlweWAgaW4sIGUuZy4sIGBodHRwczovL2Rvd25sb2Fkcy5weXRob24ub3JnL3B5cHkvcHlweTMuOC12Ny4zLjctb3N4NjQudGFyLmJ6MmAuXG4gICAqXG4gICAqIERpc3RyaWJ1dGlvbnMgY2FuIGJlIHJlYWQgZnJvbSBhXG4gICAqIGxvY2FsIGRpcmVjdG9yeSBieSB1c2luZyB0aGUgYGZpbGU6Ly9gIFVSTCBzY2hlbWUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B5cHktaW5zdGFsbC1taXJyb3JcbiAgICovXG4gIHJlYWRvbmx5IHB5cHlJbnN0YWxsTWlycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IFB5dGhvbiBkb3dubG9hZHMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B5dGhvbi1kb3dubG9hZHNcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbkRvd25sb2Fkcz86IFB5dGhvbkRvd25sb2FkcztcblxuICAvKipcbiAgICogVVJMIHBvaW50aW5nIHRvIEpTT04gb2YgY3VzdG9tIFB5dGhvbiBpbnN0YWxsYXRpb25zLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgY3VycmVudGx5LCBvbmx5IGxvY2FsIHBhdGhzIGFyZSBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B5dGhvbi1kb3dubG9hZHMtanNvbi11cmxcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbkRvd25sb2Fkc0pzb25Vcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pcnJvciBVUkwgZm9yIGRvd25sb2FkaW5nIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnMgYXJlIGRvd25sb2FkZWQgZnJvbSBbYHB5dGhvbi1idWlsZC1zdGFuZGFsb25lYF0oaHR0cHM6Ly9naXRodWIuY29tL2FzdHJhbC1zaC9weXRob24tYnVpbGQtc3RhbmRhbG9uZSkuXG4gICAqIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBhIG1pcnJvciBVUkwgdG8gdXNlIGEgZGlmZmVyZW50IHNvdXJjZSBmb3IgUHl0aG9uIGluc3RhbGxhdGlvbnMuXG4gICAqIFRoZSBwcm92aWRlZCBVUkwgd2lsbCByZXBsYWNlIGBodHRwczovL2dpdGh1Yi5jb20vYXN0cmFsLXNoL3B5dGhvbi1idWlsZC1zdGFuZGFsb25lL3JlbGVhc2VzL2Rvd25sb2FkYCBpbiwgZS5nLiwgYGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvcHl0aG9uLWJ1aWxkLXN0YW5kYWxvbmUvcmVsZWFzZXMvZG93bmxvYWQvMjAyNDA3MTMvY3B5dGhvbi0zLjEyLjQlMkIyMDI0MDcxMy1hYXJjaDY0LWFwcGxlLWRhcndpbi1pbnN0YWxsX29ubHkudGFyLmd6YC5cbiAgICpcbiAgICogRGlzdHJpYnV0aW9ucyBjYW4gYmUgcmVhZCBmcm9tIGEgbG9jYWwgZGlyZWN0b3J5IGJ5IHVzaW5nIHRoZSBgZmlsZTovL2AgVVJMIHNjaGVtZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcHl0aG9uLWluc3RhbGwtbWlycm9yXG4gICAqL1xuICByZWFkb25seSBweXRob25JbnN0YWxsTWlycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZWZlciB1c2luZyBQeXRob24gaW5zdGFsbGF0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHN5c3RlbSwgb3JcbiAgICogdGhvc2UgdGhhdCBhcmUgZG93bmxvYWRlZCBhbmQgaW5zdGFsbGVkIGJ5IHV2LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNweXRob24tcHJlZmVyZW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgcHl0aG9uUHJlZmVyZW5jZT86IFB5dGhvblByZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFJlaW5zdGFsbCBhbGwgcGFja2FnZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5J3JlIGFscmVhZHkgaW5zdGFsbGVkLiBJbXBsaWVzIGByZWZyZXNoYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcmVpbnN0YWxsXG4gICAqL1xuICByZWFkb25seSByZWluc3RhbGw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZWluc3RhbGwgYSBzcGVjaWZpYyBwYWNrYWdlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQncyBhbHJlYWR5IGluc3RhbGxlZC4gSW1wbGllc1xuICAgKiBgcmVmcmVzaC1wYWNrYWdlYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcmVpbnN0YWxsLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IHJlaW5zdGFsbFBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IG1hcmtlcnMsIGUuZy4sIGBzeXNfcGxhdGZvcm0gPT0gJ2RhcndpbicuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3JlcXVpcmVkLWVudmlyb25tZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWRFbnZpcm9ubWVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRW5mb3JjZSBhIHJlcXVpcmVtZW50IG9uIHRoZSB2ZXJzaW9uIG9mIHV2LlxuICAgKlxuICAgKiBJZiB0aGUgdmVyc2lvbiBvZiB1diBkb2VzIG5vdCBtZWV0IHRoZSByZXF1aXJlbWVudCBhdCBydW50aW1lLCB1diB3aWxsIGV4aXRcbiAgICogd2l0aCBhbiBlcnJvci5cbiAgICpcbiAgICogQWNjZXB0cyBhIFtQRVAgNDQwXShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDQ0MC8pIHNwZWNpZmllciwgbGlrZSBgPT0wLjUuMGAgb3IgYD49MC41LjBgLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNyZXF1aXJlZC12ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBzZWxlY3RpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGNvbXBhdGlibGUgdmVyc2lvbnMgZm9yIGEgZ2l2ZW5cbiAgICogcGFja2FnZSByZXF1aXJlbWVudC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgd2lsbCB1c2UgdGhlIGxhdGVzdCBjb21wYXRpYmxlIHZlcnNpb24gb2YgZWFjaCBwYWNrYWdlIChgaGlnaGVzdGApLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNyZXNvbHV0aW9uXG4gICAqL1xuICByZWFkb25seSByZXNvbHV0aW9uPzogUmVzb2x1dGlvbk1vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2VzIHRvIHVzZSB3aGVuIHJlc29sdmluZyBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIGB0b29sLnV2LnNvdXJjZXNgIGVucmljaGVzIHRoZSBkZXBlbmRlbmN5IG1ldGFkYXRhIHdpdGggYWRkaXRpb25hbCBzb3VyY2VzLCBpbmNvcnBvcmF0ZWRcbiAgICogZHVyaW5nIGRldmVsb3BtZW50LiBBIGRlcGVuZGVuY3kgc291cmNlIGNhbiBiZSBhIEdpdCByZXBvc2l0b3J5LCBhIFVSTCwgYSBsb2NhbCBwYXRoLCBvciBhblxuICAgKiBhbHRlcm5hdGl2ZSByZWdpc3RyeS5cbiAgICpcbiAgICogU2VlIFtEZXBlbmRlbmNpZXNdKGh0dHBzOi8vZG9jcy5hc3RyYWwuc2gvdXYvY29uY2VwdHMvcHJvamVjdHMvZGVwZW5kZW5jaWVzLykgZm9yIG1vcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3NvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueVtdIH07XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB0cnVzdGVkIHB1Ymxpc2hpbmcuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGNoZWNrcyBmb3IgdHJ1c3RlZCBwdWJsaXNoaW5nIHdoZW4gcnVubmluZyBpbiBhIHN1cHBvcnRlZCBlbnZpcm9ubWVudCwgYnV0XG4gICAqIGlnbm9yZXMgaXQgaWYgaXQgaXNuJ3QgY29uZmlndXJlZC5cbiAgICpcbiAgICogdXYncyBzdXBwb3J0ZWQgZW52aXJvbm1lbnRzIGZvciB0cnVzdGVkIHB1Ymxpc2hpbmcgaW5jbHVkZSBHaXRIdWIgQWN0aW9ucyBhbmQgR2l0TGFiIENJL0NELlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiN0cnVzdGVkLXB1Ymxpc2hpbmdcbiAgICovXG4gIHJlYWRvbmx5IHRydXN0ZWRQdWJsaXNoaW5nPzogVHJ1c3RlZFB1Ymxpc2hpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93IHBhY2thZ2UgdXBncmFkZXMsIGlnbm9yaW5nIHBpbm5lZCB2ZXJzaW9ucyBpbiBhbnkgZXhpc3Rpbmcgb3V0cHV0IGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3VwZ3JhZGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvdyB1cGdyYWRlcyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLCBpZ25vcmluZyBwaW5uZWQgdmVyc2lvbnMgaW4gYW55IGV4aXN0aW5nIG91dHB1dFxuICAgKiBmaWxlLlxuICAgKlxuICAgKiBBY2NlcHRzIGJvdGggc3RhbmRhbG9uZSBwYWNrYWdlIG5hbWVzIChgcnVmZmApIGFuZCB2ZXJzaW9uIHNwZWNpZmllcnMgKGBydWZmPDAuNS4wYCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3VwZ3JhZGUtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZVBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBkZWZpbml0aW9uIGZvciB0aGUgcHJvamVjdCwgaWYgYW55LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiN3b3Jrc3BhY2VcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtzcGFjZT86IFRvb2xVdldvcmtzcGFjZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVXZDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVXZDb25maWd1cmF0aW9uKG9iajogVXZDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWRkLWJvdW5kcyc6IG9iai5hZGRCb3VuZHMsXG4gICAgJ2FsbG93LWluc2VjdXJlLWhvc3QnOiBvYmouYWxsb3dJbnNlY3VyZUhvc3Q/Lm1hcCh5ID0+IHkpLFxuICAgICdidWlsZC1iYWNrZW5kJzogdG9Kc29uX0J1aWxkQmFja2VuZFNldHRpbmdzKG9iai5idWlsZEJhY2tlbmQpLFxuICAgICdidWlsZC1jb25zdHJhaW50LWRlcGVuZGVuY2llcyc6IG9iai5idWlsZENvbnN0cmFpbnREZXBlbmRlbmNpZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdjYWNoZS1kaXInOiBvYmouY2FjaGVEaXIsXG4gICAgJ2NhY2hlLWtleXMnOiBvYmouY2FjaGVLZXlzPy5tYXAoeSA9PiB5KSxcbiAgICAnY2hlY2stdXJsJzogb2JqLmNoZWNrVXJsLFxuICAgICdjb21waWxlLWJ5dGVjb2RlJzogb2JqLmNvbXBpbGVCeXRlY29kZSxcbiAgICAnY29uY3VycmVudC1idWlsZHMnOiBvYmouY29uY3VycmVudEJ1aWxkcyxcbiAgICAnY29uY3VycmVudC1kb3dubG9hZHMnOiBvYmouY29uY3VycmVudERvd25sb2FkcyxcbiAgICAnY29uY3VycmVudC1pbnN0YWxscyc6IG9iai5jb25jdXJyZW50SW5zdGFsbHMsXG4gICAgJ2NvbmZpZy1zZXR0aW5ncyc6ICgob2JqLmNvbmZpZ1NldHRpbmdzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouY29uZmlnU2V0dGluZ3MpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdjb25maWctc2V0dGluZ3MtcGFja2FnZSc6ICgob2JqLmNvbmZpZ1NldHRpbmdzUGFja2FnZSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmNvbmZpZ1NldHRpbmdzUGFja2FnZSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06ICgoaVsxXSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMoaVsxXSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSkgfSksIHt9KSksXG4gICAgJ2NvbmZsaWN0cyc6IG9iai5jb25mbGljdHM/Lm1hcCh5ID0+IHk/Lm1hcCh5ID0+IHRvSnNvbl9TY2hlbWFDb25mbGljdEl0ZW0oeSkpKSxcbiAgICAnY29uc3RyYWludC1kZXBlbmRlbmNpZXMnOiBvYmouY29uc3RyYWludERlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ2RlZmF1bHQtZ3JvdXBzJzogb2JqLmRlZmF1bHRHcm91cHMsXG4gICAgJ2RlcGVuZGVuY3ktZ3JvdXBzJzogKChvYmouZGVwZW5kZW5jeUdyb3VwcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmRlcGVuZGVuY3lHcm91cHMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiB0b0pzb25fRGVwZW5kZW5jeUdyb3VwU2V0dGluZ3MoaVsxXSkgfSksIHt9KSksXG4gICAgJ2RlcGVuZGVuY3ktbWV0YWRhdGEnOiBvYmouZGVwZW5kZW5jeU1ldGFkYXRhPy5tYXAoeSA9PiB0b0pzb25fU3RhdGljTWV0YWRhdGEoeSkpLFxuICAgICdkZXYtZGVwZW5kZW5jaWVzJzogb2JqLmRldkRlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ2Vudmlyb25tZW50cyc6IG9iai5lbnZpcm9ubWVudHM/Lm1hcCh5ID0+IHkpLFxuICAgICdleGNsdWRlLWRlcGVuZGVuY2llcyc6IG9iai5leGNsdWRlRGVwZW5kZW5jaWVzPy5tYXAoeSA9PiB5KSxcbiAgICAnZXhjbHVkZS1uZXdlcic6IG9iai5leGNsdWRlTmV3ZXIsXG4gICAgJ2V4Y2x1ZGUtbmV3ZXItcGFja2FnZSc6ICgob2JqLmV4Y2x1ZGVOZXdlclBhY2thZ2UpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5leGNsdWRlTmV3ZXJQYWNrYWdlKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSxcbiAgICAnZXh0cmEtYnVpbGQtZGVwZW5kZW5jaWVzJzogKChvYmouZXh0cmFCdWlsZERlcGVuZGVuY2llcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmV4dHJhQnVpbGREZXBlbmRlbmNpZXMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdPy5tYXAoeSA9PiB5KSB9KSwge30pKSxcbiAgICAnZXh0cmEtYnVpbGQtdmFyaWFibGVzJzogKChvYmouZXh0cmFCdWlsZFZhcmlhYmxlcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmV4dHJhQnVpbGRWYXJpYWJsZXMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiAoKGlbMV0pID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKGlbMV0pLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpIH0pLCB7fSkpLFxuICAgICdleHRyYS1pbmRleC11cmwnOiBvYmouZXh0cmFJbmRleFVybD8ubWFwKHkgPT4geSksXG4gICAgJ2ZpbmQtbGlua3MnOiBvYmouZmluZExpbmtzPy5tYXAoeSA9PiB5KSxcbiAgICAnZm9yay1zdHJhdGVneSc6IG9iai5mb3JrU3RyYXRlZ3ksXG4gICAgJ2luZGV4Jzogb2JqLmluZGV4Py5tYXAoeSA9PiB0b0pzb25fSW5kZXgoeSkpLFxuICAgICdpbmRleC1zdHJhdGVneSc6IG9iai5pbmRleFN0cmF0ZWd5LFxuICAgICdpbmRleC11cmwnOiBvYmouaW5kZXhVcmwsXG4gICAgJ2tleXJpbmctcHJvdmlkZXInOiBvYmoua2V5cmluZ1Byb3ZpZGVyLFxuICAgICdsaW5rLW1vZGUnOiBvYmoubGlua01vZGUsXG4gICAgJ21hbmFnZWQnOiBvYmoubWFuYWdlZCxcbiAgICAnbmF0aXZlLXRscyc6IG9iai5uYXRpdmVUbHMsXG4gICAgJ25vLWJpbmFyeSc6IG9iai5ub0JpbmFyeSxcbiAgICAnbm8tYmluYXJ5LXBhY2thZ2UnOiBvYmoubm9CaW5hcnlQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tYnVpbGQnOiBvYmoubm9CdWlsZCxcbiAgICAnbm8tYnVpbGQtaXNvbGF0aW9uJzogb2JqLm5vQnVpbGRJc29sYXRpb24sXG4gICAgJ25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlJzogb2JqLm5vQnVpbGRJc29sYXRpb25QYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tYnVpbGQtcGFja2FnZSc6IG9iai5ub0J1aWxkUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ25vLWNhY2hlJzogb2JqLm5vQ2FjaGUsXG4gICAgJ25vLWluZGV4Jzogb2JqLm5vSW5kZXgsXG4gICAgJ25vLXNvdXJjZXMnOiBvYmoubm9Tb3VyY2VzLFxuICAgICdvZmZsaW5lJzogb2JqLm9mZmxpbmUsXG4gICAgJ292ZXJyaWRlLWRlcGVuZGVuY2llcyc6IG9iai5vdmVycmlkZURlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ3BhY2thZ2UnOiBvYmoucGFja2FnZSxcbiAgICAncGlwJzogdG9Kc29uX1BpcE9wdGlvbnMob2JqLnBpcCksXG4gICAgJ3ByZXJlbGVhc2UnOiBvYmoucHJlcmVsZWFzZSxcbiAgICAncHJldmlldyc6IG9iai5wcmV2aWV3LFxuICAgICdwdWJsaXNoLXVybCc6IG9iai5wdWJsaXNoVXJsLFxuICAgICdweXB5LWluc3RhbGwtbWlycm9yJzogb2JqLnB5cHlJbnN0YWxsTWlycm9yLFxuICAgICdweXRob24tZG93bmxvYWRzJzogb2JqLnB5dGhvbkRvd25sb2FkcyxcbiAgICAncHl0aG9uLWRvd25sb2Fkcy1qc29uLXVybCc6IG9iai5weXRob25Eb3dubG9hZHNKc29uVXJsLFxuICAgICdweXRob24taW5zdGFsbC1taXJyb3InOiBvYmoucHl0aG9uSW5zdGFsbE1pcnJvcixcbiAgICAncHl0aG9uLXByZWZlcmVuY2UnOiBvYmoucHl0aG9uUHJlZmVyZW5jZSxcbiAgICAncmVpbnN0YWxsJzogb2JqLnJlaW5zdGFsbCxcbiAgICAncmVpbnN0YWxsLXBhY2thZ2UnOiBvYmoucmVpbnN0YWxsUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVkLWVudmlyb25tZW50cyc6IG9iai5yZXF1aXJlZEVudmlyb25tZW50cz8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVkLXZlcnNpb24nOiBvYmoucmVxdWlyZWRWZXJzaW9uLFxuICAgICdyZXNvbHV0aW9uJzogb2JqLnJlc29sdXRpb24sXG4gICAgJ3NvdXJjZXMnOiAoKG9iai5zb3VyY2VzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouc291cmNlcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0/Lm1hcCh5ID0+IHkpIH0pLCB7fSkpLFxuICAgICd0cnVzdGVkLXB1Ymxpc2hpbmcnOiBvYmoudHJ1c3RlZFB1Ymxpc2hpbmcsXG4gICAgJ3VwZ3JhZGUnOiBvYmoudXBncmFkZSxcbiAgICAndXBncmFkZS1wYWNrYWdlJzogb2JqLnVwZ3JhZGVQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnd29ya3NwYWNlJzogdG9Kc29uX1Rvb2xVdldvcmtzcGFjZShvYmoud29ya3NwYWNlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnNpb24gc3BlY2lmaWVyIHdoZW4gYWRkaW5nIGEgZGVwZW5kZW5jeS5cbiAqXG4gKiBAc2NoZW1hIEFkZEJvdW5kc0tpbmRcbiAqL1xuZXhwb3J0IGVudW0gQWRkQm91bmRzS2luZCB7XG4gIC8qKiBPbmx5IGEgbG93ZXIgYm91bmQsIGUuZy4sIGA+PTEuMi4zYC4gKGxvd2VyKSAqL1xuICBMT1dFUiA9IFwibG93ZXJcIixcbiAgLyoqIEFsbG93IHRoZSBzYW1lIG1ham9yIHZlcnNpb24sIHNpbWlsYXIgdG8gdGhlIHNlbXZlciBjYXJldCwgZS5nLiwgYD49MS4yLjMsIDwyLjAuMGAuXG5cbkxlYWRpbmcgemVyb2VzIGFyZSBza2lwcGVkLCBlLmcuIGA+PTAuMS4yLCA8MC4yLjBgLiAobWFqb3IpICovXG4gIE1BSk9SID0gXCJtYWpvclwiLFxuICAvKiogQWxsb3cgdGhlIHNhbWUgbWlub3IgdmVyc2lvbiwgc2ltaWxhciB0byB0aGUgc2VtdmVyIHRpbGRlLCBlLmcuLCBgPj0xLjIuMywgPDEuMy4wYC5cblxuTGVhZGluZyB6ZXJvZXMgYXJlIHNraXBwZWQsIGUuZy4gYD49MC4xLjIsIDwwLjEuM2AuIChtaW5vcikgKi9cbiAgTUlOT1IgPSBcIm1pbm9yXCIsXG4gIC8qKiBQaW4gdGhlIGV4YWN0IHZlcnNpb24sIGUuZy4sIGA9PTEuMi4zYC5cblxuVGhpcyBvcHRpb24gaXMgbm90IHJlY29tbWVuZGVkLCBhcyB2ZXJzaW9ucyBhcmUgYWxyZWFkeSBwaW5uZWQgaW4gdGhlIHV2IGxvY2tmaWxlLiAoZXhhY3QpICovXG4gIEVYQUNUID0gXCJleGFjdFwiLFxufVxuXG4vKipcbiAqIFNldHRpbmdzIGZvciB0aGUgdXYgYnVpbGQgYmFja2VuZCAoYHV2X2J1aWxkYCkuXG4gKlxuICogTm90ZSB0aGF0IHRob3NlIHNldHRpbmdzIG9ubHkgYXBwbHkgd2hlbiB1c2luZyB0aGUgYHV2X2J1aWxkYCBiYWNrZW5kLCBvdGhlciBidWlsZCBiYWNrZW5kc1xuICogKHN1Y2ggYXMgaGF0Y2hsaW5nKSBoYXZlIHRoZWlyIG93biBjb25maWd1cmF0aW9uLlxuICpcbiAqIEFsbCBvcHRpb25zIHRoYXQgYWNjZXB0IGdsb2JzIHVzZSB0aGUgcG9ydGFibGUgZ2xvYiBwYXR0ZXJucyBmcm9tXG4gKiBbUEVQIDYzOV0oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvZ2xvYi1wYXR0ZXJucy8pLlxuICpcbiAqIEBzY2hlbWEgQnVpbGRCYWNrZW5kU2V0dGluZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEJhY2tlbmRTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBEYXRhIGluY2x1ZGVzIGZvciB3aGVlbHMuXG4gICAqXG4gICAqIEVhY2ggZW50cnkgaXMgYSBkaXJlY3RvcnksIHdob3NlIGNvbnRlbnRzIGFyZSBjb3BpZWQgdG8gdGhlIG1hdGNoaW5nIGRpcmVjdG9yeSBpbiB0aGUgd2hlZWxcbiAgICogaW4gYDxuYW1lPi08dmVyc2lvbj4uZGF0YS8ocHVyZWxpYnxwbGF0bGlifGhlYWRlcnN8c2NyaXB0c3xkYXRhKWAuIFVwb24gaW5zdGFsbGF0aW9uLCB0aGlzXG4gICAqIGRhdGEgaXMgbW92ZWQgdG8gaXRzIHRhcmdldCBsb2NhdGlvbiwgYXMgZGVmaW5lZCBieVxuICAgKiA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy4xMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI2luc3RhbGxhdGlvbi1wYXRocz4uIFVzdWFsbHksIHNtYWxsXG4gICAqIGRhdGEgZmlsZXMgYXJlIGluY2x1ZGVkIGJ5IHBsYWNpbmcgdGhlbSBpbiB0aGUgUHl0aG9uIG1vZHVsZSBpbnN0ZWFkIG9mIHVzaW5nIGRhdGEgaW5jbHVkZXMuXG4gICAqXG4gICAqIC0gYHNjcmlwdHNgOiBJbnN0YWxsZWQgdG8gdGhlIGRpcmVjdG9yeSBmb3IgZXhlY3V0YWJsZXMsIGA8dmVudj4vYmluYCBvbiBVbml4IG9yXG4gICAqIGA8dmVudj5cXFNjcmlwdHNgIG9uIFdpbmRvd3MuIFRoaXMgZGlyZWN0b3J5IGlzIGFkZGVkIHRvIGBQQVRIYCB3aGVuIHRoZSB2aXJ0dWFsXG4gICAqIGVudmlyb25tZW50ICBpcyBhY3RpdmF0ZWQgb3Igd2hlbiB1c2luZyBgdXYgcnVuYCwgc28gdGhpcyBkYXRhIHR5cGUgY2FuIGJlIHVzZWQgdG8gaW5zdGFsbFxuICAgKiBhZGRpdGlvbmFsIGJpbmFyaWVzLiBDb25zaWRlciB1c2luZyBgcHJvamVjdC5zY3JpcHRzYCBpbnN0ZWFkIGZvciBQeXRob24gZW50cnlwb2ludHMuXG4gICAqIC0gYGRhdGFgOiBJbnN0YWxsZWQgb3ZlciB0aGUgdmlydHVhbGVudiBlbnZpcm9ubWVudCByb290LlxuICAgKlxuICAgKiBXYXJuaW5nOiBUaGlzIG1heSBvdmVycmlkZSBleGlzdGluZyBmaWxlcyFcbiAgICpcbiAgICogLSBgaGVhZGVyc2A6IEluc3RhbGxlZCB0byB0aGUgaW5jbHVkZSBkaXJlY3RvcnkuIENvbXBpbGVycyBidWlsZGluZyBQeXRob24gcGFja2FnZXNcbiAgICogd2l0aCB0aGlzIHBhY2thZ2UgYXMgYnVpbGQgcmVxdWlyZW1lbnQgdXNlIHRoZSBpbmNsdWRlIGRpcmVjdG9yeSB0byBmaW5kIGFkZGl0aW9uYWwgaGVhZGVyXG4gICAqIGZpbGVzLlxuICAgKiAtIGBwdXJlbGliYCBhbmQgYHBsYXRsaWJgOiBJbnN0YWxsZWQgdG8gdGhlIGBzaXRlLXBhY2thZ2VzYCBkaXJlY3RvcnkuIEl0IGlzIG5vdCByZWNvbW1lbmRlZFxuICAgKiB0byB1c2UgdGhlc2UgdHdvIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVpbGRCYWNrZW5kU2V0dGluZ3MjZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IFdoZWVsRGF0YUluY2x1ZGVzO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gYGZhbHNlYCwgdGhlIGRlZmF1bHQgZXhjbHVkZXMgYXJlbid0IGFwcGxpZWQuXG4gICAqXG4gICAqIERlZmF1bHQgZXhjbHVkZXM6IGBfX3B5Y2FjaGVfX2AsIGAqLnB5Y2AsIGFuZCBgKi5weW9gLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI2RlZmF1bHQtZXhjbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRFeGNsdWRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgZGlyZWN0b3J5IGluc2lkZSBgbW9kdWxlLXJvb3RgLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBtb2R1bGUgbmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIHdpdGggZG90cyBhbmQgZGFzaGVzIHJlcGxhY2VkIGJ5IHVuZGVyc2NvcmVzLlxuICAgKlxuICAgKiBQYWNrYWdlIG5hbWVzIG5lZWQgdG8gYmUgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXJzLCBhbmQgdGhlIGRpcmVjdG9yeSBuZWVkcyB0byBjb250YWluIGFcbiAgICogYF9faW5pdF9fLnB5YC4gQW4gZXhjZXB0aW9uIGFyZSBzdHVicyBwYWNrYWdlcywgd2hvc2UgbmFtZSBlbmRzIHdpdGggYC1zdHVic2AsIHdpdGggdGhlIHN0ZW1cbiAgICogYmVpbmcgdGhlIG1vZHVsZSBuYW1lLCBhbmQgd2hpY2ggY29udGFpbiBhIGBfX2luaXRfXy5weWlgIGZpbGUuXG4gICAqXG4gICAqIEZvciBuYW1lc3BhY2UgcGFja2FnZXMgd2l0aCBhIHNpbmdsZSBtb2R1bGUsIHRoZSBwYXRoIGNhbiBiZSBkb3R0ZWQsIGUuZy4sIGBmb28uYmFyYCBvclxuICAgKiBgZm9vLXN0dWJzLmJhcmAuXG4gICAqXG4gICAqIEZvciBuYW1lc3BhY2UgcGFja2FnZXMgd2l0aCBtdWx0aXBsZSBtb2R1bGVzLCB0aGUgcGF0aCBjYW4gYmUgYSBsaXN0LCBlLmcuLFxuICAgKiBgW1wiZm9vXCIsIFwiYmFyXCJdYC4gV2UgcmVjb21tZW5kIHVzaW5nIGEgc2luZ2xlIG1vZHVsZSBwZXIgcGFja2FnZSwgc3BsaXR0aW5nIG11bHRpcGxlXG4gICAqIHBhY2thZ2VzIGludG8gYSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB1c2luZyB0aGlzIG9wdGlvbiBydW5zIHRoZSByaXNrIG9mIGNyZWF0aW5nIHR3byBwYWNrYWdlcyB3aXRoIGRpZmZlcmVudCBuYW1lcyBidXRcbiAgICogdGhlIHNhbWUgbW9kdWxlIG5hbWVzLiBJbnN0YWxsaW5nIHN1Y2ggcGFja2FnZXMgdG9nZXRoZXIgbGVhZHMgdG8gdW5zcGVjaWZpZWQgYmVoYXZpb3IsXG4gICAqIG9mdGVuIHdpdGggY29ycnVwdGVkIGZpbGVzIG9yIGRpcmVjdG9yeSB0cmVlcy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNtb2R1bGUtbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlTmFtZT86IGFueTtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBtb2R1bGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBDb21tb24gdmFsdWVzIGFyZSBgc3JjYCAoc3JjIGxheW91dCwgdGhlIGRlZmF1bHQpIG9yIGFuIGVtcHR5IHBhdGggKGZsYXQgbGF5b3V0KS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNtb2R1bGUtcm9vdFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlUm9vdD86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgYSBuYW1lc3BhY2UgcGFja2FnZS5cbiAgICpcbiAgICogQnVpbGQgYSBQRVAgNDIwIGltcGxpY2l0IG5hbWVzcGFjZSBwYWNrYWdlLCBhbGxvd2luZyBtb3JlIHRoYW4gb25lIHJvb3QgYF9faW5pdF9fLnB5YC5cbiAgICpcbiAgICogVXNlIHRoaXMgb3B0aW9uIHdoZW4gdGhlIG5hbWVzcGFjZSBwYWNrYWdlIGNvbnRhaW5zIG11bHRpcGxlIHJvb3QgYF9faW5pdF9fLnB5YCwgZm9yXG4gICAqIG5hbWVzcGFjZSBwYWNrYWdlcyB3aXRoIGEgc2luZ2xlIHJvb3QgYF9faW5pdF9fLnB5YCB1c2UgYSBkb3R0ZWQgYG1vZHVsZS1uYW1lYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBUbyBjb21wYXJlIGRvdHRlZCBgbW9kdWxlLW5hbWVgIGFuZCBgbmFtZXNwYWNlID0gdHJ1ZWAsIHRoZSBmaXJzdCBleGFtcGxlIGJlbG93IGNhbiBiZVxuICAgKiBleHByZXNzZWQgd2l0aCBgbW9kdWxlLW5hbWUgPSBcImNsb3VkLmRhdGFiYXNlXCJgOiBUaGVyZSBpcyBvbmUgcm9vdCBgX19pbml0X18ucHlgIGBkYXRhYmFzZWAuXG4gICAqIEluIHRoZSBzZWNvbmQgZXhhbXBsZSwgd2UgaGF2ZSB0aHJlZSByb290cyAoYGNsb3VkLmRhdGFiYXNlYCwgYGNsb3VkLmRhdGFiYXNlX3Byb2AsXG4gICAqIGBiaWxsaW5nLm1vZHVsZXMuZGF0YWJhc2VfcHJvYCksIHNvIGBuYW1lc3BhY2UgPSB0cnVlYCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiBzcmNcbiAgICog4pSU4pSA4pSAIGNsb3VkXG4gICAqIOKUlOKUgOKUgCBkYXRhYmFzZVxuICAgKiDilJzilIDilIAgX19pbml0X18ucHlcbiAgICog4pSc4pSA4pSAIHF1ZXJ5X2J1aWxkZXJcbiAgICog4pSCICAg4pSU4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUlOKUgOKUgCBzcWxcbiAgICog4pSc4pSA4pSAIHBhcnNlci5weVxuICAgKiDilJTilIDilIAgX19pbml0X18ucHlcbiAgICogYGBgXG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogc3JjXG4gICAqIOKUnOKUgOKUgCBjbG91ZFxuICAgKiDilIIgICDilJzilIDilIAgZGF0YWJhc2VcbiAgICog4pSCICAg4pSCICAg4pSc4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUgiAgIOKUgiAgIOKUnOKUgOKUgCBxdWVyeV9idWlsZGVyXG4gICAqIOKUgiAgIOKUgiAgIOKUgiAgIOKUlOKUgOKUgCBfX2luaXRfXy5weVxuICAgKiDilIIgICDilIIgICDilJTilIDilIAgc3FsXG4gICAqIOKUgiAgIOKUgiAgICAgICDilJzilIDilIAgX19pbml0X18ucHlcbiAgICog4pSCICAg4pSCICAgICAgIOKUlOKUgOKUgCBwYXJzZXIucHlcbiAgICog4pSCICAg4pSU4pSA4pSAIGRhdGFiYXNlX3Byb1xuICAgKiDilIIgICAgICAg4pSc4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUgiAgICAgICDilJTilIDilIAgcXVlcnlfYnVpbGRlci5weVxuICAgKiDilJTilIDilIAgYmlsbGluZ1xuICAgKiDilJTilIDilIAgbW9kdWxlc1xuICAgKiDilJTilIDilIAgZGF0YWJhc2VfcHJvXG4gICAqIOKUnOKUgOKUgCBfX2luaXRfXy5weVxuICAgKiDilJTilIDilIAgc3FsLnB5XG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI25hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2xvYiBleHByZXNzaW9ucyB3aGljaCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI3NvdXJjZS1leGNsdWRlXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VFeGNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdsb2IgZXhwcmVzc2lvbnMgd2hpY2ggZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGFkZGl0aW9uYWxseSBpbmNsdWRlIGluIHRoZSBzb3VyY2VcbiAgICogZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBgcHlwcm9qZWN0LnRvbWxgIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIG1vZHVsZSBkaXJlY3RvcnkgYXJlIGFsd2F5cyBpbmNsdWRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNzb3VyY2UtaW5jbHVkZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlSW5jbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHbG9iIGV4cHJlc3Npb25zIHdoaWNoIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBleGNsdWRlIGZyb20gdGhlIHdoZWVsLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI3doZWVsLWV4Y2x1ZGVcbiAgICovXG4gIHJlYWRvbmx5IHdoZWVsRXhjbHVkZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWlsZEJhY2tlbmRTZXR0aW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1aWxkQmFja2VuZFNldHRpbmdzKG9iajogQnVpbGRCYWNrZW5kU2V0dGluZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXRhJzogdG9Kc29uX1doZWVsRGF0YUluY2x1ZGVzKG9iai5kYXRhKSxcbiAgICAnZGVmYXVsdC1leGNsdWRlcyc6IG9iai5kZWZhdWx0RXhjbHVkZXMsXG4gICAgJ21vZHVsZS1uYW1lJzogb2JqLm1vZHVsZU5hbWUsXG4gICAgJ21vZHVsZS1yb290Jzogb2JqLm1vZHVsZVJvb3QsXG4gICAgJ25hbWVzcGFjZSc6IG9iai5uYW1lc3BhY2UsXG4gICAgJ3NvdXJjZS1leGNsdWRlJzogb2JqLnNvdXJjZUV4Y2x1ZGU/Lm1hcCh5ID0+IHkpLFxuICAgICdzb3VyY2UtaW5jbHVkZSc6IG9iai5zb3VyY2VJbmNsdWRlPy5tYXAoeSA9PiB5KSxcbiAgICAnd2hlZWwtZXhjbHVkZSc6IG9iai53aGVlbEV4Y2x1ZGU/Lm1hcCh5ID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBzaW5nbGUgaXRlbSBpbiBhIGNvbmZsaWN0aW5nIHNldC5cbiAqXG4gKiBFYWNoIGl0ZW0gaXMgYSBwYWlyIG9mIGFuIChvcHRpb25hbCkgcGFja2FnZSBhbmQgYSBjb3JyZXNwb25kaW5nIGV4dHJhIG9yIGdyb3VwIG5hbWUgZm9yIHRoYXRcbiAqIHBhY2thZ2UuXG4gKlxuICogQHNjaGVtYSBTY2hlbWFDb25mbGljdEl0ZW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFDb25mbGljdEl0ZW0ge1xuICAvKipcbiAgICogQHNjaGVtYSBTY2hlbWFDb25mbGljdEl0ZW0jZXh0cmFcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFNjaGVtYUNvbmZsaWN0SXRlbSNncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgU2NoZW1hQ29uZmxpY3RJdGVtI3BhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1NjaGVtYUNvbmZsaWN0SXRlbScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1NjaGVtYUNvbmZsaWN0SXRlbShvYmo6IFNjaGVtYUNvbmZsaWN0SXRlbSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V4dHJhJzogb2JqLmV4dHJhLFxuICAgICdncm91cCc6IG9iai5ncm91cCxcbiAgICAncGFja2FnZSc6IG9iai5wYWNrYWdlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBEZXBlbmRlbmN5R3JvdXBTZXR0aW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGVuZGVuY3lHcm91cFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgcHl0aG9uIHRvIHJlcXVpcmUgd2hlbiBpbnN0YWxsaW5nIHRoaXMgZ3JvdXBcbiAgICpcbiAgICogQHNjaGVtYSBEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncyNyZXF1aXJlcy1weXRob25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzUHl0aG9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RlcGVuZGVuY3lHcm91cFNldHRpbmdzKG9iajogRGVwZW5kZW5jeUdyb3VwU2V0dGluZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZXF1aXJlcy1weXRob24nOiBvYmoucmVxdWlyZXNQeXRob24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIHN1YnNldCBvZiB0aGUgUHl0aG9uIFBhY2thZ2UgTWV0YWRhdGEgMi4zIHN0YW5kYXJkIGFzIHNwZWNpZmllZCBpblxuICogPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvc3BlY2lmaWNhdGlvbnMvY29yZS1tZXRhZGF0YS8+LlxuICpcbiAqIEBzY2hlbWEgU3RhdGljTWV0YWRhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBTdGF0aWNNZXRhZGF0YSNwcm92aWRlcy1leHRyYVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXNFeHRyYT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI3JlcXVpcmVzLWRpc3RcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzRGlzdD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQRVAgNTA4LXN0eWxlIFB5dGhvbiByZXF1aXJlbWVudCwgZS5nLiwgYD49My4xMGBcbiAgICpcbiAgICogQHNjaGVtYSBTdGF0aWNNZXRhZGF0YSNyZXF1aXJlcy1weXRob25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzUHl0aG9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQRVAgNDQwLXN0eWxlIHBhY2thZ2UgdmVyc2lvbiwgZS5nLiwgYDEuMi4zYFxuICAgKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI3ZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0YXRpY01ldGFkYXRhJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RhdGljTWV0YWRhdGEob2JqOiBTdGF0aWNNZXRhZGF0YSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAncHJvdmlkZXMtZXh0cmEnOiBvYmoucHJvdmlkZXNFeHRyYT8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVzLWRpc3QnOiBvYmoucmVxdWlyZXNEaXN0Py5tYXAoeSA9PiB5KSxcbiAgICAncmVxdWlyZXMtcHl0aG9uJzogb2JqLnJlcXVpcmVzUHl0aG9uLFxuICAgICd2ZXJzaW9uJzogb2JqLnZlcnNpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZvcmtTdHJhdGVneVxuICovXG5leHBvcnQgZW51bSBGb3JrU3RyYXRlZ3kge1xuICAvKiogT3B0aW1pemUgZm9yIHNlbGVjdGluZyB0aGUgZmV3ZXN0IG51bWJlciBvZiB2ZXJzaW9ucyBmb3IgZWFjaCBwYWNrYWdlLiBPbGRlciB2ZXJzaW9ucyBtYXlcbmJlIHByZWZlcnJlZCBpZiB0aGV5IGFyZSBjb21wYXRpYmxlIHdpdGggYSB3aWRlciByYW5nZSBvZiBzdXBwb3J0ZWQgUHl0aG9uIHZlcnNpb25zIG9yXG5wbGF0Zm9ybXMuIChmZXdlc3QpICovXG4gIEZFV0VTVCA9IFwiZmV3ZXN0XCIsXG4gIC8qKiBPcHRpbWl6ZSBmb3Igc2VsZWN0aW5nIGxhdGVzdCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiBlYWNoIHBhY2thZ2UsIGZvciBlYWNoIHN1cHBvcnRlZCBQeXRob25cbnZlcnNpb24uIChyZXF1aXJlcy1weXRob24pICovXG4gIFJFUVVJUkVTX0hZUEhFTl9QWVRIT04gPSBcInJlcXVpcmVzLXB5dGhvblwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgSW5kZXhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleCB7XG4gIC8qKlxuICAgKiBXaGVuIHV2IHNob3VsZCB1c2UgYXV0aGVudGljYXRpb24gZm9yIHJlcXVlc3RzIHRvIHRoZSBpbmRleC5cbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJteS1pbmRleFwiXG4gICAqIHVybCA9IFwiaHR0cHM6Ly88b21pdHRlZD4vc2ltcGxlXCJcbiAgICogYXV0aGVudGljYXRlID0gXCJhbHdheXNcIlxuICAgKiBgYGBcbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNhdXRoZW50aWNhdGVcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0ZT86IEF1dGhQb2xpY3k7XG5cbiAgLyoqXG4gICAqIENhY2hlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBpbmRleC5cbiAgICpcbiAgICogV2hlbiBzZXQsIHRoZXNlIGhlYWRlcnMgd2lsbCBvdmVycmlkZSB0aGUgc2VydmVyJ3MgY2FjaGUgY29udHJvbCBoZWFkZXJzXG4gICAqIGZvciBib3RoIHBhY2thZ2UgbWV0YWRhdGEgcmVxdWVzdHMgYW5kIGFydGlmYWN0IGRvd25sb2Fkcy5cbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJteS1pbmRleFwiXG4gICAqIHVybCA9IFwiaHR0cHM6Ly88b21pdHRlZD4vc2ltcGxlXCJcbiAgICogY2FjaGUtY29udHJvbCA9IHsgYXBpID0gXCJtYXgtYWdlPTYwMFwiLCBmaWxlcyA9IFwibWF4LWFnZT0zNjAwXCIgfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNjYWNoZS1jb250cm9sXG4gICAqL1xuICByZWFkb25seSBjYWNoZUNvbnRyb2w/OiBJbmRleENhY2hlQ29udHJvbDtcblxuICAvKipcbiAgICogTWFyayB0aGUgaW5kZXggYXMgdGhlIGRlZmF1bHQgaW5kZXguXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHVzZXMgUHlQSSBhcyB0aGUgZGVmYXVsdCBpbmRleCwgc3VjaCB0aGF0IGV2ZW4gaWYgYWRkaXRpb25hbCBpbmRleGVzIGFyZVxuICAgKiBkZWZpbmVkIHZpYSBgW1t0b29sLnV2LmluZGV4XV1gLCBQeVBJIHdpbGwgc3RpbGwgYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBwYWNrYWdlcyB0aGF0XG4gICAqIGFyZW4ndCBmb3VuZCBlbHNld2hlcmUuIFRvIGRpc2FibGUgdGhlIFB5UEkgZGVmYXVsdCwgc2V0IGBkZWZhdWx0ID0gdHJ1ZWAgb24gYXQgbGVhc3Qgb25lXG4gICAqIG90aGVyIGluZGV4LlxuICAgKlxuICAgKiBNYXJraW5nIGFuIGluZGV4IGFzIGRlZmF1bHQgd2lsbCBtb3ZlIGl0IHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdCBvZiBpbmRleGVzLCBzdWNoIHRoYXQgaXRcbiAgICogaXMgZ2l2ZW4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgd2hlbiByZXNvbHZpbmcgcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIGluZGV4IGFzIGV4cGxpY2l0LlxuICAgKlxuICAgKiBFeHBsaWNpdCBpbmRleGVzIHdpbGwgX29ubHlfIGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZCB2aWEgYSBgW3Rvb2wudXYuc291cmNlc11gXG4gICAqIGRlZmluaXRpb24sIGFzIGluOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcInB5dG9yY2hcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vZG93bmxvYWQucHl0b3JjaC5vcmcvd2hsL2N1MTIxXCJcbiAgICogZXhwbGljaXQgPSB0cnVlXG4gICAqXG4gICAqIFt0b29sLnV2LnNvdXJjZXNdXG4gICAqIHRvcmNoID0geyBpbmRleCA9IFwicHl0b3JjaFwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjZXhwbGljaXRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGxpY2l0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCB1c2VkIGJ5IHRoZSBpbmRleC5cbiAgICpcbiAgICogSW5kZXhlcyBjYW4gZWl0aGVyIGJlIFBFUCA1MDMtY29tcGxpYW50IChpLmUuLCBhIFB5UEktc3R5bGUgcmVnaXN0cnkgaW1wbGVtZW50aW5nIHRoZSBTaW1wbGVcbiAgICogQVBJKSBvciBzdHJ1Y3R1cmVkIGFzIGEgZmxhdCBsaXN0IG9mIGRpc3RyaWJ1dGlvbnMgKGUuZy4sIGAtLWZpbmQtbGlua3NgKS4gSW4gYm90aCBjYXNlcyxcbiAgICogaW5kZXhlcyBjYW4gcG9pbnQgdG8gZWl0aGVyIGxvY2FsIG9yIHJlbW90ZSByZXNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjZm9ybWF0XG4gICAqL1xuICByZWFkb25seSBmb3JtYXQ/OiBJbmRleEZvcm1hdDtcblxuICAvKipcbiAgICogU3RhdHVzIGNvZGVzIHRoYXQgdXYgc2hvdWxkIGlnbm9yZSB3aGVuIGRlY2lkaW5nIHdoZXRoZXJcbiAgICogdG8gY29udGludWUgc2VhcmNoaW5nIGluIHRoZSBuZXh0IGluZGV4IGFmdGVyIGEgZmFpbHVyZS5cbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJteS1pbmRleFwiXG4gICAqIHVybCA9IFwiaHR0cHM6Ly88b21pdHRlZD4vc2ltcGxlXCJcbiAgICogaWdub3JlLWVycm9yLWNvZGVzID0gWzQwMSwgNDAzXVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNpZ25vcmUtZXJyb3ItY29kZXNcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUVycm9yQ29kZXM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGluZGV4LlxuICAgKlxuICAgKiBJbmRleCBuYW1lcyBjYW4gYmUgdXNlZCB0byByZWZlcmVuY2UgaW5kZXhlcyBlbHNld2hlcmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEZvciBleGFtcGxlLFxuICAgKiB5b3UgY2FuIHBpbiBhIHBhY2thZ2UgdG8gYSBzcGVjaWZpYyBpbmRleCBieSBuYW1lOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcInB5dG9yY2hcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vZG93bmxvYWQucHl0b3JjaC5vcmcvd2hsL2N1MTIxXCJcbiAgICpcbiAgICogW3Rvb2wudXYuc291cmNlc11cbiAgICogdG9yY2ggPSB7IGluZGV4ID0gXCJweXRvcmNoXCIgfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSB1cGxvYWQgZW5kcG9pbnQuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgYHV2IHB1Ymxpc2ggLS1pbmRleCA8bmFtZT5gLCB0aGlzIFVSTCBpcyB1c2VkIGZvciBwdWJsaXNoaW5nLlxuICAgKlxuICAgKiBBIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkZWZhdWx0IGluZGV4IFB5UEkgd291bGQgbG9vayBhcyBmb2xsb3dzOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcInB5cGlcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vcHlwaS5vcmcvc2ltcGxlXCJcbiAgICogcHVibGlzaC11cmwgPSBcImh0dHBzOi8vdXBsb2FkLnB5cGkub3JnL2xlZ2FjeS9cIlxuICAgKiBgYGBcbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNwdWJsaXNoLXVybFxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaFVybD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgaW5kZXguXG4gICAqXG4gICAqIEV4cGVjdHMgdG8gcmVjZWl2ZSBhIFVSTCAoZS5nLiwgYGh0dHBzOi8vcHlwaS5vcmcvc2ltcGxlYCkgb3IgYSBsb2NhbCBwYXRoLlxuICAgKlxuICAgKiBAc2NoZW1hIEluZGV4I3VybFxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0luZGV4JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSW5kZXgob2JqOiBJbmRleCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F1dGhlbnRpY2F0ZSc6IG9iai5hdXRoZW50aWNhdGUsXG4gICAgJ2NhY2hlLWNvbnRyb2wnOiB0b0pzb25fSW5kZXhDYWNoZUNvbnRyb2wob2JqLmNhY2hlQ29udHJvbCksXG4gICAgJ2RlZmF1bHQnOiBvYmouZGVmYXVsdCxcbiAgICAnZXhwbGljaXQnOiBvYmouZXhwbGljaXQsXG4gICAgJ2Zvcm1hdCc6IG9iai5mb3JtYXQsXG4gICAgJ2lnbm9yZS1lcnJvci1jb2Rlcyc6IG9iai5pZ25vcmVFcnJvckNvZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdwdWJsaXNoLXVybCc6IG9iai5wdWJsaXNoVXJsLFxuICAgICd1cmwnOiBvYmoudXJsLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBJbmRleFN0cmF0ZWd5XG4gKi9cbmV4cG9ydCBlbnVtIEluZGV4U3RyYXRlZ3kge1xuICAvKiogT25seSB1c2UgcmVzdWx0cyBmcm9tIHRoZSBmaXJzdCBpbmRleCB0aGF0IHJldHVybnMgYSBtYXRjaCBmb3IgYSBnaXZlbiBwYWNrYWdlIG5hbWUuXG5cbldoaWxlIHRoaXMgZGlmZmVycyBmcm9tIHBpcCdzIGJlaGF2aW9yLCBpdCdzIHRoZSBkZWZhdWx0IGluZGV4IHN0cmF0ZWd5IGFzIGl0J3MgdGhlIG1vc3RcbnNlY3VyZS4gKGZpcnN0LWluZGV4KSAqL1xuICBGSVJTVF9IWVBIRU5fSU5ERVggPSBcImZpcnN0LWluZGV4XCIsXG4gIC8qKiBTZWFyY2ggZm9yIGV2ZXJ5IHBhY2thZ2UgbmFtZSBhY3Jvc3MgYWxsIGluZGV4ZXMsIGV4aGF1c3RpbmcgdGhlIHZlcnNpb25zIGZyb20gdGhlIGZpcnN0XG5pbmRleCBiZWZvcmUgbW92aW5nIG9uIHRvIHRoZSBuZXh0LlxuXG5JbiB0aGlzIHN0cmF0ZWd5LCB3ZSBsb29rIGZvciBldmVyeSBwYWNrYWdlIGFjcm9zcyBhbGwgaW5kZXhlcy4gV2hlbiByZXNvbHZpbmcsIHdlIGF0dGVtcHRcbnRvIHVzZSB2ZXJzaW9ucyBmcm9tIHRoZSBpbmRleGVzIGluIG9yZGVyLCBzdWNoIHRoYXQgd2UgZXhoYXVzdCBhbGwgYXZhaWxhYmxlIHZlcnNpb25zIGZyb21cbnRoZSBmaXJzdCBpbmRleCBiZWZvcmUgbW92aW5nIG9uIHRvIHRoZSBuZXh0LiBGdXJ0aGVyLCBpZiBhIHZlcnNpb24gaXMgZm91bmQgdG8gYmVcbmluY29tcGF0aWJsZSBpbiB0aGUgZmlyc3QgaW5kZXgsIHdlIGRvIG5vdCByZWNvbnNpZGVyIHRoYXQgdmVyc2lvbiBpbiBzdWJzZXF1ZW50IGluZGV4ZXMsXG5ldmVuIGlmIHRoZSBzZWNvbmRhcnkgaW5kZXggbWlnaHQgY29udGFpbiBjb21wYXRpYmxlIHZlcnNpb25zIChlLmcuLCB2YXJpYW50cyBvZiB0aGUgc2FtZVxudmVyc2lvbnMgd2l0aCBkaWZmZXJlbnQgQUJJIHRhZ3Mgb3IgUHl0aG9uIHZlcnNpb24gY29uc3RyYWludHMpLlxuXG5TZWU6IDxodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDcwOC8+ICh1bnNhZmUtZmlyc3QtbWF0Y2gpICovXG4gIFVOU0FGRV9IWVBIRU5fRklSU1RfSFlQSEVOX01BVENIID0gXCJ1bnNhZmUtZmlyc3QtbWF0Y2hcIixcbiAgLyoqIFNlYXJjaCBmb3IgZXZlcnkgcGFja2FnZSBuYW1lIGFjcm9zcyBhbGwgaW5kZXhlcywgcHJlZmVycmluZyB0aGUgXCJiZXN0XCIgdmVyc2lvbiBmb3VuZC4gSWYgYVxucGFja2FnZSB2ZXJzaW9uIGlzIGluIG11bHRpcGxlIGluZGV4ZXMsIG9ubHkgbG9vayBhdCB0aGUgZW50cnkgZm9yIHRoZSBmaXJzdCBpbmRleC5cblxuSW4gdGhpcyBzdHJhdGVneSwgd2UgbG9vayBmb3IgZXZlcnkgcGFja2FnZSBhY3Jvc3MgYWxsIGluZGV4ZXMuIFdoZW4gcmVzb2x2aW5nLCB3ZSBjb25zaWRlclxuYWxsIHZlcnNpb25zIGZyb20gYWxsIGluZGV4ZXMsIGNob29zaW5nIHRoZSBcImJlc3RcIiB2ZXJzaW9uIGZvdW5kICh0eXBpY2FsbHksIHRoZSBoaWdoZXN0XG5jb21wYXRpYmxlIHZlcnNpb24pLlxuXG5UaGlzIG1vc3QgY2xvc2VseSBtYXRjaGVzIHBpcCdzIGJlaGF2aW9yLCBidXQgZXhwb3NlcyB0aGUgcmVzb2x2ZXIgdG8gXCJkZXBlbmRlbmN5IGNvbmZ1c2lvblwiXG5hdHRhY2tzIHdoZXJlYnkgbWFsaWNpb3VzIGFjdG9ycyBjYW4gcHVibGlzaCBwYWNrYWdlcyB0byBwdWJsaWMgaW5kZXhlcyB3aXRoIHRoZSBzYW1lIG5hbWVcbmFzIGludGVybmFsIHBhY2thZ2VzLCBjYXVzaW5nIHRoZSByZXNvbHZlciB0byBpbnN0YWxsIHRoZSBtYWxpY2lvdXMgcGFja2FnZSBpbiBsaWV1IG9mXG50aGUgaW50ZW5kZWQgaW50ZXJuYWwgcGFja2FnZS5cblxuU2VlOiA8aHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA3MDgvPiAodW5zYWZlLWJlc3QtbWF0Y2gpICovXG4gIFVOU0FGRV9IWVBIRU5fQkVTVF9IWVBIRU5fTUFUQ0ggPSBcInVuc2FmZS1iZXN0LW1hdGNoXCIsXG59XG5cbi8qKlxuICogS2V5cmluZyBwcm92aWRlciB0eXBlIHRvIHVzZSBmb3IgY3JlZGVudGlhbCBsb29rdXAuXG4gKlxuICogQHNjaGVtYSBLZXlyaW5nUHJvdmlkZXJUeXBlXG4gKi9cbmV4cG9ydCBlbnVtIEtleXJpbmdQcm92aWRlclR5cGUge1xuICAvKiogRG8gbm90IHVzZSBrZXlyaW5nIGZvciBjcmVkZW50aWFsIGxvb2t1cC4gKGRpc2FibGVkKSAqL1xuICBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIixcbiAgLyoqIFVzZSB0aGUgYGtleXJpbmdgIGNvbW1hbmQgZm9yIGNyZWRlbnRpYWwgbG9va3VwLiAoc3VicHJvY2VzcykgKi9cbiAgU1VCUFJPQ0VTUyA9IFwic3VicHJvY2Vzc1wiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgTGlua01vZGVcbiAqL1xuZXhwb3J0IGVudW0gTGlua01vZGUge1xuICAvKiogQ2xvbmUgKGkuZS4sIGNvcHktb24td3JpdGUpIHBhY2thZ2VzIGZyb20gdGhlIHdoZWVsIGludG8gdGhlIGBzaXRlLXBhY2thZ2VzYCBkaXJlY3RvcnkuIChjbG9uZSkgKi9cbiAgQ0xPTkUgPSBcImNsb25lXCIsXG4gIC8qKiBDb3B5IHBhY2thZ2VzIGZyb20gdGhlIHdoZWVsIGludG8gdGhlIGBzaXRlLXBhY2thZ2VzYCBkaXJlY3RvcnkuIChjb3B5KSAqL1xuICBDT1BZID0gXCJjb3B5XCIsXG4gIC8qKiBIYXJkIGxpbmsgcGFja2FnZXMgZnJvbSB0aGUgd2hlZWwgaW50byB0aGUgYHNpdGUtcGFja2FnZXNgIGRpcmVjdG9yeS4gKGhhcmRsaW5rKSAqL1xuICBIQVJETElOSyA9IFwiaGFyZGxpbmtcIixcbiAgLyoqIFN5bWJvbGljYWxseSBsaW5rIHBhY2thZ2VzIGZyb20gdGhlIHdoZWVsIGludG8gdGhlIGBzaXRlLXBhY2thZ2VzYCBkaXJlY3RvcnkuIChzeW1saW5rKSAqL1xuICBTWU1MSU5LID0gXCJzeW1saW5rXCIsXG59XG5cbi8qKlxuICogU2V0dGluZ3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIGB1diBwaXBgIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UuXG4gKlxuICogVGhlc2UgdmFsdWVzIHdpbGwgYmUgaWdub3JlZCB3aGVuIHJ1bm5pbmcgY29tbWFuZHMgb3V0c2lkZSB0aGUgYHV2IHBpcGAgbmFtZXNwYWNlIChlLmcuLFxuICogYHV2IGxvY2tgLCBgdXZ4YCkuXG4gKlxuICogQHNjaGVtYSBQaXBPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJbmNsdWRlIGFsbCBvcHRpb25hbCBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIE9ubHkgYXBwbGllcyB0byBgcHlwcm9qZWN0LnRvbWxgLCBgc2V0dXAucHlgLCBhbmQgYHNldHVwLmNmZ2Agc291cmNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2FsbC1leHRyYXNcbiAgICovXG4gIHJlYWRvbmx5IGFsbEV4dHJhcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93IGB1diBwaXAgc3luY2Agd2l0aCBlbXB0eSByZXF1aXJlbWVudHMsIHdoaWNoIHdpbGwgY2xlYXIgdGhlIGVudmlyb25tZW50IG9mIGFsbFxuICAgKiBwYWNrYWdlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2FsbG93LWVtcHR5LXJlcXVpcmVtZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dFbXB0eVJlcXVpcmVtZW50cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzdHlsZSBvZiB0aGUgYW5ub3RhdGlvbiBjb21tZW50cyBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IGZpbGUsIHVzZWQgdG8gaW5kaWNhdGUgdGhlXG4gICAqIHNvdXJjZSBvZiBlYWNoIHBhY2thZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNhbm5vdGF0aW9uLXN0eWxlXG4gICAqL1xuICByZWFkb25seSBhbm5vdGF0aW9uU3R5bGU/OiBBbm5vdGF0aW9uU3R5bGU7XG5cbiAgLyoqXG4gICAqIEFsbG93IHV2IHRvIG1vZGlmeSBhbiBgRVhURVJOQUxMWS1NQU5BR0VEYCBQeXRob24gaW5zdGFsbGF0aW9uLlxuICAgKlxuICAgKiBXQVJOSU5HOiBgLS1icmVhay1zeXN0ZW0tcGFja2FnZXNgIGlzIGludGVuZGVkIGZvciB1c2UgaW4gY29udGludW91cyBpbnRlZ3JhdGlvbiAoQ0kpXG4gICAqIGVudmlyb25tZW50cywgd2hlbiBpbnN0YWxsaW5nIGludG8gUHl0aG9uIGluc3RhbGxhdGlvbnMgdGhhdCBhcmUgbWFuYWdlZCBieSBhbiBleHRlcm5hbFxuICAgKiBwYWNrYWdlIG1hbmFnZXIsIGxpa2UgYGFwdGAuIEl0IHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbiwgYXMgc3VjaCBQeXRob24gaW5zdGFsbGF0aW9uc1xuICAgKiBleHBsaWNpdGx5IHJlY29tbWVuZCBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgYnkgb3RoZXIgcGFja2FnZSBtYW5hZ2VycyAobGlrZSB1diBvciBwaXApLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjYnJlYWstc3lzdGVtLXBhY2thZ2VzXG4gICAqL1xuICByZWFkb25seSBicmVha1N5c3RlbVBhY2thZ2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29tcGlsZSBQeXRob24gZmlsZXMgdG8gYnl0ZWNvZGUgYWZ0ZXIgaW5zdGFsbGF0aW9uLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diBkb2VzIG5vdCBjb21waWxlIFB5dGhvbiAoYC5weWApIGZpbGVzIHRvIGJ5dGVjb2RlIChgX19weWNhY2hlX18vKi5weWNgKTtcbiAgICogaW5zdGVhZCwgY29tcGlsYXRpb24gaXMgcGVyZm9ybWVkIGxhemlseSB0aGUgZmlyc3QgdGltZSBhIG1vZHVsZSBpcyBpbXBvcnRlZC4gRm9yIHVzZS1jYXNlc1xuICAgKiBpbiB3aGljaCBzdGFydCB0aW1lIGlzIGNyaXRpY2FsLCBzdWNoIGFzIENMSSBhcHBsaWNhdGlvbnMgYW5kIERvY2tlciBjb250YWluZXJzLCB0aGlzIG9wdGlvblxuICAgKiBjYW4gYmUgZW5hYmxlZCB0byB0cmFkZSBsb25nZXIgaW5zdGFsbGF0aW9uIHRpbWVzIGZvciBmYXN0ZXIgc3RhcnQgdGltZXMuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgdXYgd2lsbCBwcm9jZXNzIHRoZSBlbnRpcmUgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkgKGluY2x1ZGluZyBwYWNrYWdlcyB0aGF0XG4gICAqIGFyZSBub3QgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIGN1cnJlbnQgb3BlcmF0aW9uKSBmb3IgY29uc2lzdGVuY3kuIExpa2UgcGlwLCBpdCB3aWxsIGFsc29cbiAgICogaWdub3JlIGVycm9ycy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2NvbXBpbGUtYnl0ZWNvZGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBpbGVCeXRlY29kZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIHRvIHBhc3MgdG8gdGhlIFtQRVAgNTE3XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxNy8pIGJ1aWxkIGJhY2tlbmQsXG4gICAqIHNwZWNpZmllZCBhcyBgS0VZPVZBTFVFYCBwYWlycy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2NvbmZpZy1zZXR0aW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnU2V0dGluZ3M/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0byBwYXNzIHRvIHRoZSBbUEVQIDUxN10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MTcvKSBidWlsZCBiYWNrZW5kIGZvciBzcGVjaWZpYyBwYWNrYWdlcyxcbiAgICogc3BlY2lmaWVkIGFzIGBLRVk9VkFMVUVgIHBhaXJzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjY29uZmlnLXNldHRpbmdzLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ1NldHRpbmdzUGFja2FnZT86IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB9O1xuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyIGNvbW1lbnQgdG8gaW5jbHVkZSBhdCB0aGUgdG9wIG9mIHRoZSBvdXRwdXQgZmlsZSBnZW5lcmF0ZWQgYnkgYHV2IHBpcCBjb21waWxlYC5cbiAgICpcbiAgICogVXNlZCB0byByZWZsZWN0IGN1c3RvbSBidWlsZCBzY3JpcHRzIGFuZCBjb21tYW5kcyB0aGF0IHdyYXAgYHV2IHBpcCBjb21waWxlYC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2N1c3RvbS1jb21waWxlLWNvbW1hbmRcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUNvbXBpbGVDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmUtZGVmaW5lZCBzdGF0aWMgbWV0YWRhdGEgZm9yIGRlcGVuZGVuY2llcyBvZiB0aGUgcHJvamVjdCAoZGlyZWN0IG9yIHRyYW5zaXRpdmUpLiBXaGVuXG4gICAqIHByb3ZpZGVkLCBlbmFibGVzIHRoZSByZXNvbHZlciB0byB1c2UgdGhlIHNwZWNpZmllZCBtZXRhZGF0YSBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZVxuICAgKiByZWdpc3RyeSBvciBidWlsZGluZyB0aGUgcmVsZXZhbnQgcGFja2FnZSBmcm9tIHNvdXJjZS5cbiAgICpcbiAgICogTWV0YWRhdGEgc2hvdWxkIGJlIHByb3ZpZGVkIGluIGFkaGVyZW5jZSB3aXRoIHRoZSBbTWV0YWRhdGEgMi4zXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9jb3JlLW1ldGFkYXRhLylcbiAgICogc3RhbmRhcmQsIHRob3VnaCBvbmx5IHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSByZXNwZWN0ZWQ6XG4gICAqXG4gICAqIC0gYG5hbWVgOiBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZS5cbiAgICogLSAoT3B0aW9uYWwpIGB2ZXJzaW9uYDogVGhlIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuIElmIG9taXR0ZWQsIHRoZSBtZXRhZGF0YSB3aWxsIGJlIGFwcGxpZWRcbiAgICogdG8gYWxsIHZlcnNpb25zIG9mIHRoZSBwYWNrYWdlLlxuICAgKiAtIChPcHRpb25hbCkgYHJlcXVpcmVzLWRpc3RgOiBUaGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYWNrYWdlIChlLmcuLCBgd2Vya3pldWc+PTAuMTRgKS5cbiAgICogLSAoT3B0aW9uYWwpIGByZXF1aXJlcy1weXRob25gOiBUaGUgUHl0aG9uIHZlcnNpb24gcmVxdWlyZWQgYnkgdGhlIHBhY2thZ2UgKGUuZy4sIGA+PTMuMTBgKS5cbiAgICogLSAoT3B0aW9uYWwpIGBwcm92aWRlcy1leHRyYWA6IFRoZSBleHRyYXMgcHJvdmlkZWQgYnkgdGhlIHBhY2thZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNkZXBlbmRlbmN5LW1ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmN5TWV0YWRhdGE/OiBTdGF0aWNNZXRhZGF0YVtdO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGAtLW5vLWJpbmFyeWAgYW5kIGAtLW9ubHktYmluYXJ5YCBlbnRyaWVzIGluIHRoZSBvdXRwdXQgZmlsZSBnZW5lcmF0ZWQgYnkgYHV2IHBpcCBjb21waWxlYC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2VtaXQtYnVpbGQtb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZW1pdEJ1aWxkT3B0aW9ucz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgYC0tZmluZC1saW5rc2AgZW50cmllcyBpbiB0aGUgb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNlbWl0LWZpbmQtbGlua3NcbiAgICovXG4gIHJlYWRvbmx5IGVtaXRGaW5kTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGNvbW1lbnQgYW5ub3RhdGlvbnMgaW5kaWNhdGluZyB0aGUgaW5kZXggdXNlZCB0byByZXNvbHZlIGVhY2ggcGFja2FnZSAoZS5nLixcbiAgICogYCMgZnJvbSBodHRwczovL3B5cGkub3JnL3NpbXBsZWApLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZW1pdC1pbmRleC1hbm5vdGF0aW9uXG4gICAqL1xuICByZWFkb25seSBlbWl0SW5kZXhBbm5vdGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5jbHVkZSBgLS1pbmRleC11cmxgIGFuZCBgLS1leHRyYS1pbmRleC11cmxgIGVudHJpZXMgaW4gdGhlIG91dHB1dCBmaWxlIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZW1pdC1pbmRleC11cmxcbiAgICovXG4gIHJlYWRvbmx5IGVtaXRJbmRleFVybD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW1pdCBhIG1hcmtlciBzdHJpbmcgaW5kaWNhdGluZyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgc2V0IG9mIHBpbm5lZFxuICAgKiBkZXBlbmRlbmNpZXMgaXMgdmFsaWQuXG4gICAqXG4gICAqIFRoZSBwaW5uZWQgZGVwZW5kZW5jaWVzIG1heSBiZSB2YWxpZCBldmVuIHdoZW4gdGhlIG1hcmtlciBleHByZXNzaW9uIGlzXG4gICAqIGZhbHNlLCBidXQgd2hlbiB0aGUgZXhwcmVzc2lvbiBpcyB0cnVlLCB0aGUgcmVxdWlyZW1lbnRzIGFyZSBrbm93biB0b1xuICAgKiBiZSBjb3JyZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZW1pdC1tYXJrZXItZXhwcmVzc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgZW1pdE1hcmtlckV4cHJlc3Npb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaW1pdCBjYW5kaWRhdGUgcGFja2FnZXMgdG8gdGhvc2UgdGhhdCB3ZXJlIHVwbG9hZGVkIHByaW9yIHRvIGEgZ2l2ZW4gcG9pbnQgaW4gdGltZS5cbiAgICpcbiAgICogQWNjZXB0cyBhIHN1cGVyc2V0IG9mIFtSRkMgMzMzOV0oaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzMzMzkuaHRtbCkgKGUuZy4sXG4gICAqIGAyMDA2LTEyLTAyVDAyOjA3OjQzWmApLiBBIGZ1bGwgdGltZXN0YW1wIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGF0IHRoZSByZXNvbHZlciB3aWxsXG4gICAqIGJlaGF2ZSBjb25zaXN0ZW50bHkgYWNyb3NzIHRpbWV6b25lcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2V4Y2x1ZGUtbmV3ZXJcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVOZXdlcj86IHN0cmluZztcblxuICAvKipcbiAgICogTGltaXQgY2FuZGlkYXRlIHBhY2thZ2VzIGZvciBzcGVjaWZpYyBwYWNrYWdlcyB0byB0aG9zZSB0aGF0IHdlcmUgdXBsb2FkZWQgcHJpb3IgdG8gdGhlIGdpdmVuIGRhdGUuXG4gICAqXG4gICAqIEFjY2VwdHMgcGFja2FnZS1kYXRlIHBhaXJzIGluIGEgZGljdGlvbmFyeSBmb3JtYXQuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNleGNsdWRlLW5ld2VyLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVOZXdlclBhY2thZ2U/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIG9wdGlvbmFsIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBzcGVjaWZpZWQgZXh0cmE7IG1heSBiZSBwcm92aWRlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogT25seSBhcHBsaWVzIHRvIGBweXByb2plY3QudG9tbGAsIGBzZXR1cC5weWAsIGFuZCBgc2V0dXAuY2ZnYCBzb3VyY2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZXh0cmFcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYnVpbGQgZGVwZW5kZW5jaWVzIGZvciBwYWNrYWdlcy5cbiAgICpcbiAgICogVGhpcyBhbGxvd3MgZXh0ZW5kaW5nIHRoZSBQRVAgNTE3IGJ1aWxkIGVudmlyb25tZW50IGZvciB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY2llcyB3aXRoXG4gICAqIGFkZGl0aW9uYWwgcGFja2FnZXMuIFRoaXMgaXMgdXNlZnVsIGZvciBwYWNrYWdlcyB0aGF0IGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2YgcGFja2FnZXMgbGlrZVxuICAgKiBgcGlwYCwgYW5kIGRvIG5vdCBkZWNsYXJlIHRoZW0gYXMgYnVpbGQgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZXh0cmEtYnVpbGQtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBleHRyYUJ1aWxkRGVwZW5kZW5jaWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IHdoZW4gYnVpbGRpbmcgY2VydGFpbiBwYWNrYWdlcy5cbiAgICpcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVudmlyb25tZW50IHdoZW4gYnVpbGRpbmcgdGhlXG4gICAqIHNwZWNpZmllZCBwYWNrYWdlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2V4dHJhLWJ1aWxkLXZhcmlhYmxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFCdWlsZFZhcmlhYmxlcz86IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYSBVUkxzIG9mIHBhY2thZ2UgaW5kZXhlcyB0byB1c2UsIGluIGFkZGl0aW9uIHRvIGAtLWluZGV4LXVybGAuXG4gICAqXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgcmVwb3NpdG9yeSBjb21wbGlhbnQgd2l0aCBbUEVQIDUwM10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MDMvKVxuICAgKiAodGhlIHNpbXBsZSByZXBvc2l0b3J5IEFQSSksIG9yIGEgbG9jYWwgZGlyZWN0b3J5IGxhaWQgb3V0IGluIHRoZSBzYW1lIGZvcm1hdC5cbiAgICpcbiAgICogQWxsIGluZGV4ZXMgcHJvdmlkZWQgdmlhIHRoaXMgZmxhZyB0YWtlIHByaW9yaXR5IG92ZXIgdGhlIGluZGV4IHNwZWNpZmllZCBieVxuICAgKiBbYGluZGV4X3VybGBdKCNpbmRleC11cmwpLiBXaGVuIG11bHRpcGxlIGluZGV4ZXMgYXJlIHByb3ZpZGVkLCBlYXJsaWVyIHZhbHVlcyB0YWtlIHByaW9yaXR5LlxuICAgKlxuICAgKiBUbyBjb250cm9sIHV2J3MgcmVzb2x1dGlvbiBzdHJhdGVneSB3aGVuIG11bHRpcGxlIGluZGV4ZXMgYXJlIHByZXNlbnQsIHNlZVxuICAgKiBbYGluZGV4X3N0cmF0ZWd5YF0oI2luZGV4LXN0cmF0ZWd5KS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2V4dHJhLWluZGV4LXVybFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFJbmRleFVybD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMb2NhdGlvbnMgdG8gc2VhcmNoIGZvciBjYW5kaWRhdGUgZGlzdHJpYnV0aW9ucywgaW4gYWRkaXRpb24gdG8gdGhvc2UgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5XG4gICAqIGluZGV4ZXMuXG4gICAqXG4gICAqIElmIGEgcGF0aCwgdGhlIHRhcmdldCBtdXN0IGJlIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgcGFja2FnZXMgYXMgd2hlZWwgZmlsZXMgKGAud2hsYCkgb3JcbiAgICogc291cmNlIGRpc3RyaWJ1dGlvbnMgKGUuZy4sIGAudGFyLmd6YCBvciBgLnppcGApIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqXG4gICAqIElmIGEgVVJMLCB0aGUgcGFnZSBtdXN0IGNvbnRhaW4gYSBmbGF0IGxpc3Qgb2YgbGlua3MgdG8gcGFja2FnZSBmaWxlcyBhZGhlcmluZyB0byB0aGVcbiAgICogZm9ybWF0cyBkZXNjcmliZWQgYWJvdmUuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNmaW5kLWxpbmtzXG4gICAqL1xuICByZWFkb25seSBmaW5kTGlua3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHNlbGVjdGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhIGdpdmVuIHBhY2thZ2UgYWNyb3NzIFB5dGhvblxuICAgKiB2ZXJzaW9ucyBhbmQgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIG9wdGltaXplIGZvciBzZWxlY3RpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggcGFja2FnZSBmb3IgZWFjaFxuICAgKiBzdXBwb3J0ZWQgUHl0aG9uIHZlcnNpb24gKGByZXF1aXJlcy1weXRob25gKSwgd2hpbGUgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkXG4gICAqIHZlcnNpb25zIGFjcm9zcyBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIFVuZGVyIGBmZXdlc3RgLCB1diB3aWxsIG1pbmltaXplIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgdmVyc2lvbnMgZm9yIGVhY2ggcGFja2FnZSxcbiAgICogcHJlZmVycmluZyBvbGRlciB2ZXJzaW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggYSB3aWRlciByYW5nZSBvZiBzdXBwb3J0ZWQgUHl0aG9uXG4gICAqIHZlcnNpb25zIG9yIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2Zvcmstc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IGZvcmtTdHJhdGVneT86IEZvcmtTdHJhdGVneTtcblxuICAvKipcbiAgICogSW5jbHVkZSBkaXN0cmlidXRpb24gaGFzaGVzIGluIHRoZSBvdXRwdXQgZmlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2dlbmVyYXRlLWhhc2hlc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2VuZXJhdGVIYXNoZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jeSBncm91cHMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXA/OiBQaXBHcm91cE5hbWVbXTtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHJlc29sdmluZyBhZ2FpbnN0IG11bHRpcGxlIGluZGV4IFVSTHMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHdpbGwgc3RvcCBhdCB0aGUgZmlyc3QgaW5kZXggb24gd2hpY2ggYSBnaXZlbiBwYWNrYWdlIGlzIGF2YWlsYWJsZSwgYW5kXG4gICAqIGxpbWl0IHJlc29sdXRpb25zIHRvIHRob3NlIHByZXNlbnQgb24gdGhhdCBmaXJzdCBpbmRleCAoYGZpcnN0LWluZGV4YCkuIFRoaXMgcHJldmVudHNcbiAgICogXCJkZXBlbmRlbmN5IGNvbmZ1c2lvblwiIGF0dGFja3MsIHdoZXJlYnkgYW4gYXR0YWNrZXIgY2FuIHVwbG9hZCBhIG1hbGljaW91cyBwYWNrYWdlIHVuZGVyIHRoZVxuICAgKiBzYW1lIG5hbWUgdG8gYW4gYWx0ZXJuYXRlIGluZGV4LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjaW5kZXgtc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IGluZGV4U3RyYXRlZ3k/OiBJbmRleFN0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBQeXRob24gcGFja2FnZSBpbmRleCAoYnkgZGVmYXVsdDogPGh0dHBzOi8vcHlwaS5vcmcvc2ltcGxlPikuXG4gICAqXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgcmVwb3NpdG9yeSBjb21wbGlhbnQgd2l0aCBbUEVQIDUwM10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MDMvKVxuICAgKiAodGhlIHNpbXBsZSByZXBvc2l0b3J5IEFQSSksIG9yIGEgbG9jYWwgZGlyZWN0b3J5IGxhaWQgb3V0IGluIHRoZSBzYW1lIGZvcm1hdC5cbiAgICpcbiAgICogVGhlIGluZGV4IHByb3ZpZGVkIGJ5IHRoaXMgc2V0dGluZyBpcyBnaXZlbiBsb3dlciBwcmlvcml0eSB0aGFuIGFueSBpbmRleGVzIHNwZWNpZmllZCB2aWFcbiAgICogW2BleHRyYV9pbmRleF91cmxgXSgjZXh0cmEtaW5kZXgtdXJsKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2luZGV4LXVybFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gdXNlIGBrZXlyaW5nYCBmb3IgYXV0aGVudGljYXRpb24gZm9yIGluZGV4IFVSTHMuXG4gICAqXG4gICAqIEF0IHByZXNlbnQsIG9ubHkgYC0ta2V5cmluZy1wcm92aWRlciBzdWJwcm9jZXNzYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGNvbmZpZ3VyZXMgdXYgdG9cbiAgICogdXNlIHRoZSBga2V5cmluZ2AgQ0xJIHRvIGhhbmRsZSBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2tleXJpbmctcHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGtleXJpbmdQcm92aWRlcj86IEtleXJpbmdQcm92aWRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdG8gdXNlIHdoZW4gaW5zdGFsbGluZyBwYWNrYWdlcyBmcm9tIHRoZSBnbG9iYWwgY2FjaGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGBjbG9uZWAgKGFsc28ga25vd24gYXMgQ29weS1vbi1Xcml0ZSkgb24gbWFjT1MsIGFuZCBgaGFyZGxpbmtgIG9uIExpbnV4IGFuZFxuICAgKiBXaW5kb3dzLlxuICAgKlxuICAgKiBXQVJOSU5HOiBUaGUgdXNlIG9mIHN5bWxpbmsgbGluayBtb2RlIGlzIGRpc2NvdXJhZ2VkLCBhcyB0aGV5IGNyZWF0ZSB0aWdodCBjb3VwbGluZyBiZXR3ZWVuXG4gICAqIHRoZSBjYWNoZSBhbmQgdGhlIHRhcmdldCBlbnZpcm9ubWVudC4gRm9yIGV4YW1wbGUsIGNsZWFyaW5nIHRoZSBjYWNoZSAoYHV2IGNhY2hlIGNsZWFuYClcbiAgICogd2lsbCBicmVhayBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGJ5IHdheSBvZiByZW1vdmluZyB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmlsZXMuIFVzZVxuICAgKiBzeW1saW5rcyB3aXRoIGNhdXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGNsb25lYCAoYWxzbyBrbm93biBhcyBDb3B5LW9uLVdyaXRlKSBvbiBtYWNPUywgYW5kIGBoYXJkbGlua2Agb24gTGludXggYW5kXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNsaW5rLW1vZGVcbiAgICovXG4gIHJlYWRvbmx5IGxpbmtNb2RlPzogTGlua01vZGU7XG5cbiAgLyoqXG4gICAqIEV4Y2x1ZGUgY29tbWVudCBhbm5vdGF0aW9ucyBpbmRpY2F0aW5nIHRoZSBzb3VyY2Ugb2YgZWFjaCBwYWNrYWdlIGZyb20gdGhlIG91dHB1dCBmaWxlXG4gICAqIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tYW5ub3RhdGVcbiAgICovXG4gIHJlYWRvbmx5IG5vQW5ub3RhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb24ndCBpbnN0YWxsIHByZS1idWlsdCB3aGVlbHMuXG4gICAqXG4gICAqIFRoZSBnaXZlbiBwYWNrYWdlcyB3aWxsIGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgZnJvbSBzb3VyY2UuIFRoZSByZXNvbHZlciB3aWxsIHN0aWxsIHVzZVxuICAgKiBwcmUtYnVpbHQgd2hlZWxzIHRvIGV4dHJhY3QgcGFja2FnZSBtZXRhZGF0YSwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBNdWx0aXBsZSBwYWNrYWdlcyBtYXkgYmUgcHJvdmlkZWQuIERpc2FibGUgYmluYXJpZXMgZm9yIGFsbCBwYWNrYWdlcyB3aXRoIGA6YWxsOmAuXG4gICAqIENsZWFyIHByZXZpb3VzbHkgc3BlY2lmaWVkIHBhY2thZ2VzIHdpdGggYDpub25lOmAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1iaW5hcnlcbiAgICovXG4gIHJlYWRvbmx5IG5vQmluYXJ5Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERvbid0IGJ1aWxkIHNvdXJjZSBkaXN0cmlidXRpb25zLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHJlc29sdmluZyB3aWxsIG5vdCBydW4gYXJiaXRyYXJ5IFB5dGhvbiBjb2RlLiBUaGUgY2FjaGVkIHdoZWVscyBvZlxuICAgKiBhbHJlYWR5LWJ1aWx0IHNvdXJjZSBkaXN0cmlidXRpb25zIHdpbGwgYmUgcmV1c2VkLCBidXQgb3BlcmF0aW9ucyB0aGF0IHJlcXVpcmUgYnVpbGRpbmdcbiAgICogZGlzdHJpYnV0aW9ucyB3aWxsIGV4aXQgd2l0aCBhbiBlcnJvci5cbiAgICpcbiAgICogQWxpYXMgZm9yIGAtLW9ubHktYmluYXJ5IDphbGw6YC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWJ1aWxkXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogQXNzdW1lcyB0aGF0IGJ1aWxkIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkgW1BFUCA1MThdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE4LylcbiAgICogYXJlIGFscmVhZHkgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tYnVpbGQtaXNvbGF0aW9uXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkSXNvbGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLlxuICAgKlxuICAgKiBBc3N1bWVzIHRoYXQgdGhlIHBhY2thZ2VzJyBidWlsZCBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkIGJ5IFtQRVAgNTE4XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxOC8pXG4gICAqIGFyZSBhbHJlYWR5IGluc3RhbGxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkSXNvbGF0aW9uUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJZ25vcmUgcGFja2FnZSBkZXBlbmRlbmNpZXMsIGluc3RlYWQgb25seSBhZGQgdGhvc2UgcGFja2FnZXMgZXhwbGljaXRseSBsaXN0ZWRcbiAgICogb24gdGhlIGNvbW1hbmQgbGluZSB0byB0aGUgcmVzdWx0aW5nIHJlcXVpcmVtZW50cyBmaWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tZGVwc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9EZXBzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmeSBhIHBhY2thZ2UgdG8gb21pdCBmcm9tIHRoZSBvdXRwdXQgcmVzb2x1dGlvbi4gSXRzIGRlcGVuZGVuY2llcyB3aWxsIHN0aWxsIGJlXG4gICAqIGluY2x1ZGVkIGluIHRoZSByZXNvbHV0aW9uLiBFcXVpdmFsZW50IHRvIHBpcC1jb21waWxlJ3MgYC0tdW5zYWZlLXBhY2thZ2VgIG9wdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWVtaXQtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9FbWl0UGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFeGNsdWRlIHRoZSBzcGVjaWZpZWQgb3B0aW9uYWwgZGVwZW5kZW5jaWVzIGlmIGBhbGwtZXh0cmFzYCBpcyBzdXBwbGllZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWV4dHJhXG4gICAqL1xuICByZWFkb25seSBub0V4dHJhPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEV4Y2x1ZGUgdGhlIGNvbW1lbnQgaGVhZGVyIGF0IHRoZSB0b3Agb2Ygb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1oZWFkZXJcbiAgICovXG4gIHJlYWRvbmx5IG5vSGVhZGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWdub3JlIGFsbCByZWdpc3RyeSBpbmRleGVzIChlLmcuLCBQeVBJKSwgaW5zdGVhZCByZWx5aW5nIG9uIGRpcmVjdCBVUkwgZGVwZW5kZW5jaWVzIGFuZFxuICAgKiB0aG9zZSBwcm92aWRlZCB2aWEgYC0tZmluZC1saW5rc2AuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1pbmRleFxuICAgKi9cbiAgcmVhZG9ubHkgbm9JbmRleD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElnbm9yZSB0aGUgYHRvb2wudXYuc291cmNlc2AgdGFibGUgd2hlbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzLiBVc2VkIHRvIGxvY2sgYWdhaW5zdCB0aGVcbiAgICogc3RhbmRhcmRzLWNvbXBsaWFudCwgcHVibGlzaGFibGUgcGFja2FnZSBtZXRhZGF0YSwgYXMgb3Bwb3NlZCB0byB1c2luZyBhbnkgbG9jYWwgb3IgR2l0XG4gICAqIHNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1zb3VyY2VzXG4gICAqL1xuICByZWFkb25seSBub1NvdXJjZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGV4dHJhcyBpbiB0aGUgb3V0cHV0IGZpbGUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHN0cmlwcyBleHRyYXMsIGFzIGFueSBwYWNrYWdlcyBwdWxsZWQgaW4gYnkgdGhlIGV4dHJhcyBhcmUgYWxyZWFkeSBpbmNsdWRlZFxuICAgKiBhcyBkZXBlbmRlbmNpZXMgaW4gdGhlIG91dHB1dCBmaWxlIGRpcmVjdGx5LiBGdXJ0aGVyLCBvdXRwdXQgZmlsZXMgZ2VuZXJhdGVkIHdpdGhcbiAgICogYC0tbm8tc3RyaXAtZXh0cmFzYCBjYW5ub3QgYmUgdXNlZCBhcyBjb25zdHJhaW50cyBmaWxlcyBpbiBgaW5zdGFsbGAgYW5kIGBzeW5jYCBpbnZvY2F0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLXN0cmlwLWV4dHJhc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9TdHJpcEV4dHJhcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgZW52aXJvbm1lbnQgbWFya2VycyBpbiB0aGUgb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHN0cmlwcyBlbnZpcm9ubWVudCBtYXJrZXJzLCBhcyB0aGUgcmVzb2x1dGlvbiBnZW5lcmF0ZWQgYnkgYGNvbXBpbGVgIGlzXG4gICAqIG9ubHkgZ3VhcmFudGVlZCB0byBiZSBjb3JyZWN0IGZvciB0aGUgdGFyZ2V0IGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tc3RyaXAtbWFya2Vyc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9TdHJpcE1hcmtlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPbmx5IHVzZSBwcmUtYnVpbHQgd2hlZWxzOyBkb24ndCBidWlsZCBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCByZXNvbHZpbmcgd2lsbCBub3QgcnVuIGNvZGUgZnJvbSB0aGUgZ2l2ZW4gcGFja2FnZXMuIFRoZSBjYWNoZWQgd2hlZWxzIG9mIGFscmVhZHktYnVpbHRcbiAgICogc291cmNlIGRpc3RyaWJ1dGlvbnMgd2lsbCBiZSByZXVzZWQsIGJ1dCBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSBidWlsZGluZyBkaXN0cmlidXRpb25zIHdpbGxcbiAgICogZXhpdCB3aXRoIGFuIGVycm9yLlxuICAgKlxuICAgKiBNdWx0aXBsZSBwYWNrYWdlcyBtYXkgYmUgcHJvdmlkZWQuIERpc2FibGUgYmluYXJpZXMgZm9yIGFsbCBwYWNrYWdlcyB3aXRoIGA6YWxsOmAuXG4gICAqIENsZWFyIHByZXZpb3VzbHkgc3BlY2lmaWVkIHBhY2thZ2VzIHdpdGggYDpub25lOmAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNvbmx5LWJpbmFyeVxuICAgKi9cbiAgcmVhZG9ubHkgb25seUJpbmFyeT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgcmVxdWlyZW1lbnRzIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgIHRvIHRoZSBnaXZlbiBgcmVxdWlyZW1lbnRzLnR4dGAgZmlsZS5cbiAgICpcbiAgICogSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoZSBleGlzdGluZyB2ZXJzaW9ucyB3aWxsIGJlIHByZWZlcnJlZCB3aGVuIHJlc29sdmluZ1xuICAgKiBkZXBlbmRlbmNpZXMsIHVubGVzcyBgLS11cGdyYWRlYCBpcyBhbHNvIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI291dHB1dC1maWxlXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRGaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnN0YWxsIHBhY2thZ2VzIGludG8gYGxpYmAsIGBiaW5gLCBhbmQgb3RoZXIgdG9wLWxldmVsIGZvbGRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZFxuICAgKiBkaXJlY3RvcnksIGFzIGlmIGEgdmlydHVhbCBlbnZpcm9ubWVudCB3ZXJlIHByZXNlbnQgYXQgdGhhdCBsb2NhdGlvbi5cbiAgICpcbiAgICogSW4gZ2VuZXJhbCwgcHJlZmVyIHRoZSB1c2Ugb2YgYC0tcHl0aG9uYCB0byBpbnN0YWxsIGludG8gYW4gYWx0ZXJuYXRlIGVudmlyb25tZW50LCBhc1xuICAgKiBzY3JpcHRzIGFuZCBvdGhlciBhcnRpZmFjdHMgaW5zdGFsbGVkIHZpYSBgLS1wcmVmaXhgIHdpbGwgcmVmZXJlbmNlIHRoZSBpbnN0YWxsaW5nXG4gICAqIGludGVycHJldGVyLCByYXRoZXIgdGhhbiBhbnkgaW50ZXJwcmV0ZXIgYWRkZWQgdG8gdGhlIGAtLXByZWZpeGAgZGlyZWN0b3J5LCByZW5kZXJpbmcgdGhlbVxuICAgKiBub24tcG9ydGFibGUuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIGNvbnNpZGVyaW5nIHByZS1yZWxlYXNlIHZlcnNpb25zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIGFjY2VwdCBwcmUtcmVsZWFzZXMgZm9yIHBhY2thZ2VzIHRoYXQgX29ubHlfIHB1Ymxpc2ggcHJlLXJlbGVhc2VzLFxuICAgKiBhbG9uZyB3aXRoIGZpcnN0LXBhcnR5IHJlcXVpcmVtZW50cyB0aGF0IGNvbnRhaW4gYW4gZXhwbGljaXQgcHJlLXJlbGVhc2UgbWFya2VyIGluIHRoZVxuICAgKiBkZWNsYXJlZCBzcGVjaWZpZXJzIChgaWYtbmVjZXNzYXJ5LW9yLWV4cGxpY2l0YCkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNwcmVyZWxlYXNlXG4gICAqL1xuICByZWFkb25seSBwcmVyZWxlYXNlPzogUHJlcmVsZWFzZU1vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaW50byB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diBpbnN0YWxscyBpbnRvIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9yXG4gICAqIGFueSBwYXJlbnQgZGlyZWN0b3J5LiBUaGUgYC0tcHl0aG9uYCBvcHRpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IGludGVycHJldGVyLFxuICAgKiB3aGljaCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gKENJKSBlbnZpcm9ubWVudHMgb3Igb3RoZXIgYXV0b21hdGVkXG4gICAqIHdvcmtmbG93cy5cbiAgICpcbiAgICogU3VwcG9ydGVkIGZvcm1hdHM6XG4gICAqIC0gYDMuMTBgIGxvb2tzIGZvciBhbiBpbnN0YWxsZWQgUHl0aG9uIDMuMTAgaW4gdGhlIHJlZ2lzdHJ5IG9uIFdpbmRvd3MgKHNlZVxuICAgKiBgcHkgLS1saXN0LXBhdGhzYCksIG9yIGBweXRob24zLjEwYCBvbiBMaW51eCBhbmQgbWFjT1MuXG4gICAqIC0gYHB5dGhvbjMuMTBgIG9yIGBweXRob24uZXhlYCBsb29rcyBmb3IgYSBiaW5hcnkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiBgUEFUSGAuXG4gICAqIC0gYC9ob21lL2ZlcnJpcy8ubG9jYWwvYmluL3B5dGhvbjMuMTBgIHVzZXMgdGhlIGV4YWN0IFB5dGhvbiBhdCB0aGUgZ2l2ZW4gcGF0aC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3B5dGhvblxuICAgKi9cbiAgcmVhZG9ubHkgcHl0aG9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGxhdGZvcm0gZm9yIHdoaWNoIHJlcXVpcmVtZW50cyBzaG91bGQgYmUgcmVzb2x2ZWQuXG4gICAqXG4gICAqIFJlcHJlc2VudGVkIGFzIGEgXCJ0YXJnZXQgdHJpcGxlXCIsIGEgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSB0YXJnZXQgcGxhdGZvcm0gaW4gdGVybXMgb2ZcbiAgICogaXRzIENQVSwgdmVuZG9yLCBhbmQgb3BlcmF0aW5nIHN5c3RlbSBuYW1lLCBsaWtlIGB4ODZfNjQtdW5rbm93bi1saW51eC1nbnVgIG9yXG4gICAqIGBhYXJjaDY0LWFwcGxlLWRhcndpbmAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNweXRob24tcGxhdGZvcm1cbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvblBsYXRmb3JtPzogVGFyZ2V0VHJpcGxlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBQeXRob24gdmVyc2lvbiB0aGF0IHNob3VsZCBiZSBzdXBwb3J0ZWQgYnkgdGhlIHJlc29sdmVkIHJlcXVpcmVtZW50cyAoZS5nLixcbiAgICogYDMuOGAgb3IgYDMuOC4xN2ApLlxuICAgKlxuICAgKiBJZiBhIHBhdGNoIHZlcnNpb24gaXMgb21pdHRlZCwgdGhlIG1pbmltdW0gcGF0Y2ggdmVyc2lvbiBpcyBhc3N1bWVkLiBGb3IgZXhhbXBsZSwgYDMuOGAgaXNcbiAgICogbWFwcGVkIHRvIGAzLjguMGAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNweXRob24tdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcHl0aG9uVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUmVpbnN0YWxsIGFsbCBwYWNrYWdlcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkncmUgYWxyZWFkeSBpbnN0YWxsZWQuIEltcGxpZXMgYHJlZnJlc2hgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjcmVpbnN0YWxsXG4gICAqL1xuICByZWFkb25seSByZWluc3RhbGw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZWluc3RhbGwgYSBzcGVjaWZpYyBwYWNrYWdlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQncyBhbHJlYWR5IGluc3RhbGxlZC4gSW1wbGllc1xuICAgKiBgcmVmcmVzaC1wYWNrYWdlYC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3JlaW5zdGFsbC1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSByZWluc3RhbGxQYWNrYWdlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlcXVpcmUgYSBtYXRjaGluZyBoYXNoIGZvciBlYWNoIHJlcXVpcmVtZW50LlxuICAgKlxuICAgKiBIYXNoLWNoZWNraW5nIG1vZGUgaXMgYWxsIG9yIG5vdGhpbmcuIElmIGVuYWJsZWQsIF9hbGxfIHJlcXVpcmVtZW50cyBtdXN0IGJlIHByb3ZpZGVkXG4gICAqIHdpdGggYSBjb3JyZXNwb25kaW5nIGhhc2ggb3Igc2V0IG9mIGhhc2hlcy4gQWRkaXRpb25hbGx5LCBpZiBlbmFibGVkLCBfYWxsXyByZXF1aXJlbWVudHNcbiAgICogbXVzdCBlaXRoZXIgYmUgcGlubmVkIHRvIGV4YWN0IHZlcnNpb25zIChlLmcuLCBgPT0xLjAuMGApLCBvciBiZSBzcGVjaWZpZWQgdmlhIGRpcmVjdCBVUkwuXG4gICAqXG4gICAqIEhhc2gtY2hlY2tpbmcgbW9kZSBpbnRyb2R1Y2VzIGEgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY29uc3RyYWludHM6XG4gICAqXG4gICAqIC0gR2l0IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICogLSBFZGl0YWJsZSBpbnN0YWxsYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAgKiAtIExvY2FsIGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCwgdW5sZXNzIHRoZXkgcG9pbnQgdG8gYSBzcGVjaWZpYyB3aGVlbCAoYC53aGxgKSBvclxuICAgKiBzb3VyY2UgYXJjaGl2ZSAoYC56aXBgLCBgLnRhci5nemApLCBhcyBvcHBvc2VkIHRvIGEgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjcmVxdWlyZS1oYXNoZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVIYXNoZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyYXRlZ3kgdG8gdXNlIHdoZW4gc2VsZWN0aW5nIGJldHdlZW4gdGhlIGRpZmZlcmVudCBjb21wYXRpYmxlIHZlcnNpb25zIGZvciBhIGdpdmVuXG4gICAqIHBhY2thZ2UgcmVxdWlyZW1lbnQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHdpbGwgdXNlIHRoZSBsYXRlc3QgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIGVhY2ggcGFja2FnZSAoYGhpZ2hlc3RgKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3Jlc29sdXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdXRpb24/OiBSZXNvbHV0aW9uTW9kZTtcblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIFB5dGhvbiBlbnZpcm9ubWVudCwgdG8gZGV0ZWN0IHBhY2thZ2VzIHdpdGggbWlzc2luZyBkZXBlbmRlbmNpZXMgYW5kIG90aGVyXG4gICAqIGlzc3Vlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3N0cmljdFxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaWN0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5zdGFsbCBwYWNrYWdlcyBpbnRvIHRoZSBzeXN0ZW0gUHl0aG9uIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diBpbnN0YWxscyBpbnRvIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9yXG4gICAqIGFueSBwYXJlbnQgZGlyZWN0b3J5LiBUaGUgYC0tc3lzdGVtYCBvcHRpb24gaW5zdHJ1Y3RzIHV2IHRvIGluc3RlYWQgdXNlIHRoZSBmaXJzdCBQeXRob25cbiAgICogZm91bmQgaW4gdGhlIHN5c3RlbSBgUEFUSGAuXG4gICAqXG4gICAqIFdBUk5JTkc6IGAtLXN5c3RlbWAgaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjb250aW51b3VzIGludGVncmF0aW9uIChDSSkgZW52aXJvbm1lbnRzIGFuZFxuICAgKiBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24sIGFzIGl0IGNhbiBtb2RpZnkgdGhlIHN5c3RlbSBQeXRob24gaW5zdGFsbGF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjc3lzdGVtXG4gICAqL1xuICByZWFkb25seSBzeXN0ZW0/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbnN0YWxsIHBhY2thZ2VzIGludG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksIHJhdGhlciB0aGFuIGludG8gdGhlIHZpcnR1YWwgb3Igc3lzdGVtIFB5dGhvblxuICAgKiBlbnZpcm9ubWVudC4gVGhlIHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkIGF0IHRoZSB0b3AtbGV2ZWwgb2YgdGhlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3RhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYmFja2VuZCB0byB1c2Ugd2hlbiBmZXRjaGluZyBwYWNrYWdlcyBpbiB0aGUgUHlUb3JjaCBlY29zeXN0ZW0uXG4gICAqXG4gICAqIFdoZW4gc2V0LCB1diB3aWxsIGlnbm9yZSB0aGUgY29uZmlndXJlZCBpbmRleCBVUkxzIGZvciBwYWNrYWdlcyBpbiB0aGUgUHlUb3JjaCBlY29zeXN0ZW0sXG4gICAqIGFuZCB3aWxsIGluc3RlYWQgdXNlIHRoZSBkZWZpbmVkIGJhY2tlbmQuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB3aGVuIHNldCB0byBgY3B1YCwgdXYgd2lsbCB1c2UgdGhlIENQVS1vbmx5IFB5VG9yY2ggaW5kZXg7IHdoZW4gc2V0IHRvIGBjdTEyNmAsXG4gICAqIHV2IHdpbGwgdXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDEyLjYuXG4gICAqXG4gICAqIFRoZSBgYXV0b2AgbW9kZSB3aWxsIGF0dGVtcHQgdG8gZGV0ZWN0IHRoZSBhcHByb3ByaWF0ZSBQeVRvcmNoIGluZGV4IGJhc2VkIG9uIHRoZSBjdXJyZW50bHlcbiAgICogaW5zdGFsbGVkIENVREEgZHJpdmVycy5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgaW4gcHJldmlldyBhbmQgbWF5IGNoYW5nZSBpbiBhbnkgZnV0dXJlIHJlbGVhc2UuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyN0b3JjaC1iYWNrZW5kXG4gICAqL1xuICByZWFkb25seSB0b3JjaEJhY2tlbmQ/OiBUb3JjaE1vZGU7XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSB1bml2ZXJzYWwgcmVzb2x1dGlvbiwgYXR0ZW1wdGluZyB0byBnZW5lcmF0ZSBhIHNpbmdsZSBgcmVxdWlyZW1lbnRzLnR4dGAgb3V0cHV0XG4gICAqIGZpbGUgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIG9wZXJhdGluZyBzeXN0ZW1zLCBhcmNoaXRlY3R1cmVzLCBhbmQgUHl0aG9uXG4gICAqIGltcGxlbWVudGF0aW9ucy5cbiAgICpcbiAgICogSW4gdW5pdmVyc2FsIG1vZGUsIHRoZSBjdXJyZW50IFB5dGhvbiB2ZXJzaW9uIChvciB1c2VyLXByb3ZpZGVkIGAtLXB5dGhvbi12ZXJzaW9uYCkgd2lsbCBiZVxuICAgKiB0cmVhdGVkIGFzIGEgbG93ZXIgYm91bmQuIEZvciBleGFtcGxlLCBgLS11bml2ZXJzYWwgLS1weXRob24tdmVyc2lvbiAzLjdgIHdvdWxkIHByb2R1Y2UgYVxuICAgKiB1bml2ZXJzYWwgcmVzb2x1dGlvbiBmb3IgUHl0aG9uIDMuNyBhbmQgbGF0ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyN1bml2ZXJzYWxcbiAgICovXG4gIHJlYWRvbmx5IHVuaXZlcnNhbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93IHBhY2thZ2UgdXBncmFkZXMsIGlnbm9yaW5nIHBpbm5lZCB2ZXJzaW9ucyBpbiBhbnkgZXhpc3Rpbmcgb3V0cHV0IGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyN1cGdyYWRlXG4gICAqL1xuICByZWFkb25seSB1cGdyYWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgdXBncmFkZXMgZm9yIGEgc3BlY2lmaWMgcGFja2FnZSwgaWdub3JpbmcgcGlubmVkIHZlcnNpb25zIGluIGFueSBleGlzdGluZyBvdXRwdXRcbiAgICogZmlsZS5cbiAgICpcbiAgICogQWNjZXB0cyBib3RoIHN0YW5kYWxvbmUgcGFja2FnZSBuYW1lcyAoYHJ1ZmZgKSBhbmQgdmVyc2lvbiBzcGVjaWZpZXJzIChgcnVmZjwwLjUuMGApLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjdXBncmFkZS1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSB1cGdyYWRlUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbnkgaGFzaGVzIHByb3ZpZGVkIGluIHRoZSByZXF1aXJlbWVudHMgZmlsZS5cbiAgICpcbiAgICogVW5saWtlIGAtLXJlcXVpcmUtaGFzaGVzYCwgYC0tdmVyaWZ5LWhhc2hlc2AgZG9lcyBub3QgcmVxdWlyZSB0aGF0IGFsbCByZXF1aXJlbWVudHMgaGF2ZVxuICAgKiBoYXNoZXM7IGluc3RlYWQsIGl0IHdpbGwgbGltaXQgaXRzZWxmIHRvIHZlcmlmeWluZyB0aGUgaGFzaGVzIG9mIHRob3NlIHJlcXVpcmVtZW50cyB0aGF0IGRvXG4gICAqIGluY2x1ZGUgdGhlbS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3ZlcmlmeS1oYXNoZXNcbiAgICovXG4gIHJlYWRvbmx5IHZlcmlmeUhhc2hlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1BpcE9wdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QaXBPcHRpb25zKG9iajogUGlwT3B0aW9ucyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FsbC1leHRyYXMnOiBvYmouYWxsRXh0cmFzLFxuICAgICdhbGxvdy1lbXB0eS1yZXF1aXJlbWVudHMnOiBvYmouYWxsb3dFbXB0eVJlcXVpcmVtZW50cyxcbiAgICAnYW5ub3RhdGlvbi1zdHlsZSc6IG9iai5hbm5vdGF0aW9uU3R5bGUsXG4gICAgJ2JyZWFrLXN5c3RlbS1wYWNrYWdlcyc6IG9iai5icmVha1N5c3RlbVBhY2thZ2VzLFxuICAgICdjb21waWxlLWJ5dGVjb2RlJzogb2JqLmNvbXBpbGVCeXRlY29kZSxcbiAgICAnY29uZmlnLXNldHRpbmdzJzogKChvYmouY29uZmlnU2V0dGluZ3MpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5jb25maWdTZXR0aW5ncykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSksXG4gICAgJ2NvbmZpZy1zZXR0aW5ncy1wYWNrYWdlJzogKChvYmouY29uZmlnU2V0dGluZ3NQYWNrYWdlKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouY29uZmlnU2V0dGluZ3NQYWNrYWdlKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogKChpWzFdKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhpWzFdKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSB9KSwge30pKSxcbiAgICAnY3VzdG9tLWNvbXBpbGUtY29tbWFuZCc6IG9iai5jdXN0b21Db21waWxlQ29tbWFuZCxcbiAgICAnZGVwZW5kZW5jeS1tZXRhZGF0YSc6IG9iai5kZXBlbmRlbmN5TWV0YWRhdGE/Lm1hcCh5ID0+IHRvSnNvbl9TdGF0aWNNZXRhZGF0YSh5KSksXG4gICAgJ2VtaXQtYnVpbGQtb3B0aW9ucyc6IG9iai5lbWl0QnVpbGRPcHRpb25zLFxuICAgICdlbWl0LWZpbmQtbGlua3MnOiBvYmouZW1pdEZpbmRMaW5rcyxcbiAgICAnZW1pdC1pbmRleC1hbm5vdGF0aW9uJzogb2JqLmVtaXRJbmRleEFubm90YXRpb24sXG4gICAgJ2VtaXQtaW5kZXgtdXJsJzogb2JqLmVtaXRJbmRleFVybCxcbiAgICAnZW1pdC1tYXJrZXItZXhwcmVzc2lvbic6IG9iai5lbWl0TWFya2VyRXhwcmVzc2lvbixcbiAgICAnZXhjbHVkZS1uZXdlcic6IG9iai5leGNsdWRlTmV3ZXIsXG4gICAgJ2V4Y2x1ZGUtbmV3ZXItcGFja2FnZSc6ICgob2JqLmV4Y2x1ZGVOZXdlclBhY2thZ2UpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5leGNsdWRlTmV3ZXJQYWNrYWdlKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSxcbiAgICAnZXh0cmEnOiBvYmouZXh0cmE/Lm1hcCh5ID0+IHkpLFxuICAgICdleHRyYS1idWlsZC1kZXBlbmRlbmNpZXMnOiAoKG9iai5leHRyYUJ1aWxkRGVwZW5kZW5jaWVzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouZXh0cmFCdWlsZERlcGVuZGVuY2llcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0/Lm1hcCh5ID0+IHkpIH0pLCB7fSkpLFxuICAgICdleHRyYS1idWlsZC12YXJpYWJsZXMnOiAoKG9iai5leHRyYUJ1aWxkVmFyaWFibGVzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouZXh0cmFCdWlsZFZhcmlhYmxlcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06ICgoaVsxXSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMoaVsxXSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSkgfSksIHt9KSksXG4gICAgJ2V4dHJhLWluZGV4LXVybCc6IG9iai5leHRyYUluZGV4VXJsPy5tYXAoeSA9PiB5KSxcbiAgICAnZmluZC1saW5rcyc6IG9iai5maW5kTGlua3M/Lm1hcCh5ID0+IHkpLFxuICAgICdmb3JrLXN0cmF0ZWd5Jzogb2JqLmZvcmtTdHJhdGVneSxcbiAgICAnZ2VuZXJhdGUtaGFzaGVzJzogb2JqLmdlbmVyYXRlSGFzaGVzLFxuICAgICdncm91cCc6IG9iai5ncm91cD8ubWFwKHkgPT4gdG9Kc29uX1BpcEdyb3VwTmFtZSh5KSksXG4gICAgJ2luZGV4LXN0cmF0ZWd5Jzogb2JqLmluZGV4U3RyYXRlZ3ksXG4gICAgJ2luZGV4LXVybCc6IG9iai5pbmRleFVybCxcbiAgICAna2V5cmluZy1wcm92aWRlcic6IG9iai5rZXlyaW5nUHJvdmlkZXIsXG4gICAgJ2xpbmstbW9kZSc6IG9iai5saW5rTW9kZSxcbiAgICAnbm8tYW5ub3RhdGUnOiBvYmoubm9Bbm5vdGF0ZSxcbiAgICAnbm8tYmluYXJ5Jzogb2JqLm5vQmluYXJ5Py5tYXAoeSA9PiB5KSxcbiAgICAnbm8tYnVpbGQnOiBvYmoubm9CdWlsZCxcbiAgICAnbm8tYnVpbGQtaXNvbGF0aW9uJzogb2JqLm5vQnVpbGRJc29sYXRpb24sXG4gICAgJ25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlJzogb2JqLm5vQnVpbGRJc29sYXRpb25QYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tZGVwcyc6IG9iai5ub0RlcHMsXG4gICAgJ25vLWVtaXQtcGFja2FnZSc6IG9iai5ub0VtaXRQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tZXh0cmEnOiBvYmoubm9FeHRyYT8ubWFwKHkgPT4geSksXG4gICAgJ25vLWhlYWRlcic6IG9iai5ub0hlYWRlcixcbiAgICAnbm8taW5kZXgnOiBvYmoubm9JbmRleCxcbiAgICAnbm8tc291cmNlcyc6IG9iai5ub1NvdXJjZXMsXG4gICAgJ25vLXN0cmlwLWV4dHJhcyc6IG9iai5ub1N0cmlwRXh0cmFzLFxuICAgICduby1zdHJpcC1tYXJrZXJzJzogb2JqLm5vU3RyaXBNYXJrZXJzLFxuICAgICdvbmx5LWJpbmFyeSc6IG9iai5vbmx5QmluYXJ5Py5tYXAoeSA9PiB5KSxcbiAgICAnb3V0cHV0LWZpbGUnOiBvYmoub3V0cHV0RmlsZSxcbiAgICAncHJlZml4Jzogb2JqLnByZWZpeCxcbiAgICAncHJlcmVsZWFzZSc6IG9iai5wcmVyZWxlYXNlLFxuICAgICdweXRob24nOiBvYmoucHl0aG9uLFxuICAgICdweXRob24tcGxhdGZvcm0nOiBvYmoucHl0aG9uUGxhdGZvcm0sXG4gICAgJ3B5dGhvbi12ZXJzaW9uJzogb2JqLnB5dGhvblZlcnNpb24sXG4gICAgJ3JlaW5zdGFsbCc6IG9iai5yZWluc3RhbGwsXG4gICAgJ3JlaW5zdGFsbC1wYWNrYWdlJzogb2JqLnJlaW5zdGFsbFBhY2thZ2U/Lm1hcCh5ID0+IHkpLFxuICAgICdyZXF1aXJlLWhhc2hlcyc6IG9iai5yZXF1aXJlSGFzaGVzLFxuICAgICdyZXNvbHV0aW9uJzogb2JqLnJlc29sdXRpb24sXG4gICAgJ3N0cmljdCc6IG9iai5zdHJpY3QsXG4gICAgJ3N5c3RlbSc6IG9iai5zeXN0ZW0sXG4gICAgJ3RhcmdldCc6IG9iai50YXJnZXQsXG4gICAgJ3RvcmNoLWJhY2tlbmQnOiBvYmoudG9yY2hCYWNrZW5kLFxuICAgICd1bml2ZXJzYWwnOiBvYmoudW5pdmVyc2FsLFxuICAgICd1cGdyYWRlJzogb2JqLnVwZ3JhZGUsXG4gICAgJ3VwZ3JhZGUtcGFja2FnZSc6IG9iai51cGdyYWRlUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ3ZlcmlmeS1oYXNoZXMnOiBvYmoudmVyaWZ5SGFzaGVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBQcmVyZWxlYXNlTW9kZVxuICovXG5leHBvcnQgZW51bSBQcmVyZWxlYXNlTW9kZSB7XG4gIC8qKiBEaXNhbGxvdyBhbGwgcHJlLXJlbGVhc2UgdmVyc2lvbnMuIChkaXNhbGxvdykgKi9cbiAgRElTQUxMT1cgPSBcImRpc2FsbG93XCIsXG4gIC8qKiBBbGxvdyBhbGwgcHJlLXJlbGVhc2UgdmVyc2lvbnMuIChhbGxvdykgKi9cbiAgQUxMT1cgPSBcImFsbG93XCIsXG4gIC8qKiBBbGxvdyBwcmUtcmVsZWFzZSB2ZXJzaW9ucyBpZiBhbGwgdmVyc2lvbnMgb2YgYSBwYWNrYWdlIGFyZSBwcmUtcmVsZWFzZS4gKGlmLW5lY2Vzc2FyeSkgKi9cbiAgSUZfSFlQSEVOX05FQ0VTU0FSWSA9IFwiaWYtbmVjZXNzYXJ5XCIsXG4gIC8qKiBBbGxvdyBwcmUtcmVsZWFzZSB2ZXJzaW9ucyBmb3IgZmlyc3QtcGFydHkgcGFja2FnZXMgd2l0aCBleHBsaWNpdCBwcmUtcmVsZWFzZSBtYXJrZXJzIGluXG50aGVpciB2ZXJzaW9uIHJlcXVpcmVtZW50cy4gKGV4cGxpY2l0KSAqL1xuICBFWFBMSUNJVCA9IFwiZXhwbGljaXRcIixcbiAgLyoqIEFsbG93IHByZS1yZWxlYXNlIHZlcnNpb25zIGlmIGFsbCB2ZXJzaW9ucyBvZiBhIHBhY2thZ2UgYXJlIHByZS1yZWxlYXNlLCBvciBpZiB0aGUgcGFja2FnZVxuaGFzIGFuIGV4cGxpY2l0IHByZS1yZWxlYXNlIG1hcmtlciBpbiBpdHMgdmVyc2lvbiByZXF1aXJlbWVudHMuIChpZi1uZWNlc3Nhcnktb3ItZXhwbGljaXQpICovXG4gIElGX0hZUEhFTl9ORUNFU1NBUllfSFlQSEVOX09SX0hZUEhFTl9FWFBMSUNJVCA9IFwiaWYtbmVjZXNzYXJ5LW9yLWV4cGxpY2l0XCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBQeXRob25Eb3dubG9hZHNcbiAqL1xuZXhwb3J0IGVudW0gUHl0aG9uRG93bmxvYWRzIHtcbiAgLyoqIEF1dG9tYXRpY2FsbHkgZG93bmxvYWQgbWFuYWdlZCBQeXRob24gaW5zdGFsbGF0aW9ucyB3aGVuIG5lZWRlZC4gKGF1dG9tYXRpYykgKi9cbiAgQVVUT01BVElDID0gXCJhdXRvbWF0aWNcIixcbiAgLyoqIERvIG5vdCBhdXRvbWF0aWNhbGx5IGRvd25sb2FkIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnM7IHJlcXVpcmUgZXhwbGljaXQgaW5zdGFsbGF0aW9uLiAobWFudWFsKSAqL1xuICBNQU5VQUwgPSBcIm1hbnVhbFwiLFxuICAvKiogRG8gbm90IGV2ZXIgYWxsb3cgUHl0aG9uIGRvd25sb2Fkcy4gKG5ldmVyKSAqL1xuICBORVZFUiA9IFwibmV2ZXJcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIFB5dGhvblByZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGVudW0gUHl0aG9uUHJlZmVyZW5jZSB7XG4gIC8qKiBPbmx5IHVzZSBtYW5hZ2VkIFB5dGhvbiBpbnN0YWxsYXRpb25zOyBuZXZlciB1c2Ugc3lzdGVtIFB5dGhvbiBpbnN0YWxsYXRpb25zLiAob25seS1tYW5hZ2VkKSAqL1xuICBPTkxZX0hZUEhFTl9NQU5BR0VEID0gXCJvbmx5LW1hbmFnZWRcIixcbiAgLyoqIFByZWZlciBtYW5hZ2VkIFB5dGhvbiBpbnN0YWxsYXRpb25zIG92ZXIgc3lzdGVtIFB5dGhvbiBpbnN0YWxsYXRpb25zLlxuXG5TeXN0ZW0gUHl0aG9uIGluc3RhbGxhdGlvbnMgYXJlIHN0aWxsIHByZWZlcnJlZCBvdmVyIGRvd25sb2FkaW5nIG1hbmFnZWQgUHl0aG9uIHZlcnNpb25zLlxuVXNlIGBvbmx5LW1hbmFnZWRgIHRvIGFsd2F5cyBmZXRjaCBhIG1hbmFnZWQgUHl0aG9uIHZlcnNpb24uIChtYW5hZ2VkKSAqL1xuICBNQU5BR0VEID0gXCJtYW5hZ2VkXCIsXG4gIC8qKiBQcmVmZXIgc3lzdGVtIFB5dGhvbiBpbnN0YWxsYXRpb25zIG92ZXIgbWFuYWdlZCBQeXRob24gaW5zdGFsbGF0aW9ucy5cblxuSWYgYSBzeXN0ZW0gUHl0aG9uIGluc3RhbGxhdGlvbiBjYW5ub3QgYmUgZm91bmQsIGEgbWFuYWdlZCBQeXRob24gaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkLiAoc3lzdGVtKSAqL1xuICBTWVNURU0gPSBcInN5c3RlbVwiLFxuICAvKiogT25seSB1c2Ugc3lzdGVtIFB5dGhvbiBpbnN0YWxsYXRpb25zOyBuZXZlciB1c2UgbWFuYWdlZCBQeXRob24gaW5zdGFsbGF0aW9ucy4gKG9ubHktc3lzdGVtKSAqL1xuICBPTkxZX0hZUEhFTl9TWVNURU0gPSBcIm9ubHktc3lzdGVtXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBSZXNvbHV0aW9uTW9kZVxuICovXG5leHBvcnQgZW51bSBSZXNvbHV0aW9uTW9kZSB7XG4gIC8qKiBSZXNvbHZlIHRoZSBoaWdoZXN0IGNvbXBhdGlibGUgdmVyc2lvbiBvZiBlYWNoIHBhY2thZ2UuIChoaWdoZXN0KSAqL1xuICBISUdIRVNUID0gXCJoaWdoZXN0XCIsXG4gIC8qKiBSZXNvbHZlIHRoZSBsb3dlc3QgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIGVhY2ggcGFja2FnZS4gKGxvd2VzdCkgKi9cbiAgTE9XRVNUID0gXCJsb3dlc3RcIixcbiAgLyoqIFJlc29sdmUgdGhlIGxvd2VzdCBjb21wYXRpYmxlIHZlcnNpb24gb2YgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgaGlnaGVzdFxuY29tcGF0aWJsZSB2ZXJzaW9uIG9mIGFueSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcy4gKGxvd2VzdC1kaXJlY3QpICovXG4gIExPV0VTVF9IWVBIRU5fRElSRUNUID0gXCJsb3dlc3QtZGlyZWN0XCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBUcnVzdGVkUHVibGlzaGluZ1xuICovXG5leHBvcnQgZW51bSBUcnVzdGVkUHVibGlzaGluZyB7XG4gIC8qKiBhbHdheXMgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbiAgLyoqIG5ldmVyICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxuICAvKiogQXR0ZW1wdCB0cnVzdGVkIHB1Ymxpc2hpbmcgd2hlbiB3ZSdyZSBpbiBhIHN1cHBvcnRlZCBlbnZpcm9ubWVudCwgY29udGludWUgaWYgdGhhdCBmYWlscy5cblxuU3VwcG9ydGVkIGVudmlyb25tZW50cyBpbmNsdWRlIEdpdEh1YiBBY3Rpb25zIGFuZCBHaXRMYWIgQ0kvQ0QuIChhdXRvbWF0aWMpICovXG4gIEFVVE9NQVRJQyA9IFwiYXV0b21hdGljXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBUb29sVXZXb3Jrc3BhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sVXZXb3Jrc3BhY2Uge1xuICAvKipcbiAgICogUGFja2FnZXMgdG8gZXhjbHVkZSBhcyB3b3Jrc3BhY2UgbWVtYmVycy4gSWYgYSBwYWNrYWdlIG1hdGNoZXMgYm90aCBgbWVtYmVyc2AgYW5kXG4gICAqIGBleGNsdWRlYCwgaXQgd2lsbCBiZSBleGNsdWRlZC5cbiAgICpcbiAgICogU3VwcG9ydHMgYm90aCBnbG9icyBhbmQgZXhwbGljaXQgcGF0aHMuXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBnbG9iIHN5bnRheCwgcmVmZXIgdG8gdGhlIFtgZ2xvYmAgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnJzL2dsb2IvbGF0ZXN0L2dsb2Ivc3RydWN0LlBhdHRlcm4uaHRtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVG9vbFV2V29ya3NwYWNlI2V4Y2x1ZGVcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGFja2FnZXMgdG8gaW5jbHVkZSBhcyB3b3Jrc3BhY2UgbWVtYmVycy5cbiAgICpcbiAgICogU3VwcG9ydHMgYm90aCBnbG9icyBhbmQgZXhwbGljaXQgcGF0aHMuXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBnbG9iIHN5bnRheCwgcmVmZXIgdG8gdGhlIFtgZ2xvYmAgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnJzL2dsb2IvbGF0ZXN0L2dsb2Ivc3RydWN0LlBhdHRlcm4uaHRtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVG9vbFV2V29ya3NwYWNlI21lbWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IG1lbWJlcnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVG9vbFV2V29ya3NwYWNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVG9vbFV2V29ya3NwYWNlKG9iajogVG9vbFV2V29ya3NwYWNlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZXhjbHVkZSc6IG9iai5leGNsdWRlPy5tYXAoeSA9PiB5KSxcbiAgICAnbWVtYmVycyc6IG9iai5tZW1iZXJzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIERhdGEgaW5jbHVkZXMgZm9yIHdoZWVscy5cbiAqXG4gKiBTZWUgYEJ1aWxkQmFja2VuZFNldHRpbmdzOjpkYXRhYC5cbiAqXG4gKiBAc2NoZW1hIFdoZWVsRGF0YUluY2x1ZGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2hlZWxEYXRhSW5jbHVkZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBXaGVlbERhdGFJbmNsdWRlcyNkYXRhXG4gICAqL1xuICByZWFkb25seSBkYXRhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFdoZWVsRGF0YUluY2x1ZGVzI2hlYWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlcnM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgV2hlZWxEYXRhSW5jbHVkZXMjcGxhdGxpYlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGxpYj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBXaGVlbERhdGFJbmNsdWRlcyNwdXJlbGliXG4gICAqL1xuICByZWFkb25seSBwdXJlbGliPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFdoZWVsRGF0YUluY2x1ZGVzI3NjcmlwdHNcbiAgICovXG4gIHJlYWRvbmx5IHNjcmlwdHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1doZWVsRGF0YUluY2x1ZGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fV2hlZWxEYXRhSW5jbHVkZXMob2JqOiBXaGVlbERhdGFJbmNsdWRlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2RhdGEnOiBvYmouZGF0YSxcbiAgICAnaGVhZGVycyc6IG9iai5oZWFkZXJzLFxuICAgICdwbGF0bGliJzogb2JqLnBsYXRsaWIsXG4gICAgJ3B1cmVsaWInOiBvYmoucHVyZWxpYixcbiAgICAnc2NyaXB0cyc6IG9iai5zY3JpcHRzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogV2hlbiB0byB1c2UgYXV0aGVudGljYXRpb24uXG4gKlxuICogQHNjaGVtYSBBdXRoUG9saWN5XG4gKi9cbmV4cG9ydCBlbnVtIEF1dGhQb2xpY3kge1xuICAvKiogQXV0aGVudGljYXRlIHdoZW4gbmVjZXNzYXJ5LlxuXG5JZiBjcmVkZW50aWFscyBhcmUgcHJvdmlkZWQsIHRoZXkgd2lsbCBiZSB1c2VkLiBPdGhlcndpc2UsIGFuIHVuYXV0aGVudGljYXRlZCByZXF1ZXN0IHdpbGxcbmJlIGF0dGVtcHRlZCBmaXJzdC4gSWYgdGhlIHJlcXVlc3QgZmFpbHMsIHV2IHdpbGwgc2VhcmNoIGZvciBjcmVkZW50aWFscy4gSWYgY3JlZGVudGlhbHMgYXJlXG5mb3VuZCwgYW4gYXV0aGVudGljYXRlZCByZXF1ZXN0IHdpbGwgYmUgYXR0ZW1wdGVkLiAoYXV0bykgKi9cbiAgQVVUTyA9IFwiYXV0b1wiLFxuICAvKiogQWx3YXlzIGF1dGhlbnRpY2F0ZS5cblxuSWYgY3JlZGVudGlhbHMgYXJlIG5vdCBwcm92aWRlZCwgdXYgd2lsbCBlYWdlcmx5IHNlYXJjaCBmb3IgY3JlZGVudGlhbHMuIElmIGNyZWRlbnRpYWxzXG5jYW5ub3QgYmUgZm91bmQsIHV2IHdpbGwgZXJyb3IgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGFuIHVuYXV0aGVudGljYXRlZCByZXF1ZXN0LiAoYWx3YXlzKSAqL1xuICBBTFdBWVMgPSBcImFsd2F5c1wiLFxuICAvKiogTmV2ZXIgYXV0aGVudGljYXRlLlxuXG5JZiBjcmVkZW50aWFscyBhcmUgcHJvdmlkZWQsIHV2IHdpbGwgZXJyb3IuIHV2IHdpbGwgbm90IHNlYXJjaCBmb3IgY3JlZGVudGlhbHMuIChuZXZlcikgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG59XG5cbi8qKlxuICogQ2FjaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciBhbiBpbmRleC5cbiAqXG4gKiBAc2NoZW1hIEluZGV4Q2FjaGVDb250cm9sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDYWNoZUNvbnRyb2wge1xuICAvKipcbiAgICogQ2FjaGUgY29udHJvbCBoZWFkZXIgZm9yIFNpbXBsZSBBUEkgcmVxdWVzdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXhDYWNoZUNvbnRyb2wjYXBpXG4gICAqL1xuICByZWFkb25seSBhcGk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhY2hlIGNvbnRyb2wgaGVhZGVyIGZvciBmaWxlIGRvd25sb2Fkcy5cbiAgICpcbiAgICogQHNjaGVtYSBJbmRleENhY2hlQ29udHJvbCNmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0luZGV4Q2FjaGVDb250cm9sJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSW5kZXhDYWNoZUNvbnRyb2wob2JqOiBJbmRleENhY2hlQ29udHJvbCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FwaSc6IG9iai5hcGksXG4gICAgJ2ZpbGVzJzogb2JqLmZpbGVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBJbmRleEZvcm1hdFxuICovXG5leHBvcnQgZW51bSBJbmRleEZvcm1hdCB7XG4gIC8qKiBBIFB5UEktc3R5bGUgaW5kZXggaW1wbGVtZW50aW5nIHRoZSBTaW1wbGUgUmVwb3NpdG9yeSBBUEkuIChzaW1wbGUpICovXG4gIFNJTVBMRSA9IFwic2ltcGxlXCIsXG4gIC8qKiBBIGAtLWZpbmQtbGlua3NgLXN0eWxlIGluZGV4IGNvbnRhaW5pbmcgYSBmbGF0IGxpc3Qgb2Ygd2hlZWxzIGFuZCBzb3VyY2UgZGlzdHJpYnV0aW9ucy4gKGZsYXQpICovXG4gIEZMQVQgPSBcImZsYXRcIixcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZSB0aGUgc3R5bGUgb2YgYW5ub3RhdGlvbiBjb21tZW50cywgdXNlZCB0byBpbmRpY2F0ZSB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgcmVxdWVzdGVkIGVhY2hcbiAqIHBhY2thZ2UuXG4gKlxuICogQHNjaGVtYSBBbm5vdGF0aW9uU3R5bGVcbiAqL1xuZXhwb3J0IGVudW0gQW5ub3RhdGlvblN0eWxlIHtcbiAgLyoqIFJlbmRlciB0aGUgYW5ub3RhdGlvbnMgb24gYSBzaW5nbGUsIGNvbW1hLXNlcGFyYXRlZCBsaW5lLiAobGluZSkgKi9cbiAgTElORSA9IFwibGluZVwiLFxuICAvKiogUmVuZGVyIGVhY2ggYW5ub3RhdGlvbiBvbiBpdHMgb3duIGxpbmUuIChzcGxpdCkgKi9cbiAgU1BMSVQgPSBcInNwbGl0XCIsXG59XG5cbi8qKlxuICogVGhlIHBpcC1jb21wYXRpYmxlIHZhcmlhbnQgb2YgYSBbYEdyb3VwTmFtZWBdLlxuICpcbiAqIEVpdGhlciA8Z3JvdXBuYW1lPiBvciA8cGF0aD46PGdyb3VwbmFtZT4uXG4gKiBJZiA8cGF0aD4gaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0byBcInB5cHJvamVjdC50b21sXCIuXG4gKlxuICogQHNjaGVtYSBQaXBHcm91cE5hbWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBHcm91cE5hbWUge1xuICAvKipcbiAgICogQHNjaGVtYSBQaXBHcm91cE5hbWUjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFBpcEdyb3VwTmFtZSNwYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQaXBHcm91cE5hbWUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QaXBHcm91cE5hbWUob2JqOiBQaXBHcm91cE5hbWUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ3BhdGgnOiBvYmoucGF0aCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBzdXBwb3J0ZWQgdGFyZ2V0IHRyaXBsZXMuIEVhY2ggdHJpcGxlIGNvbnNpc3RzIG9mIGFuIGFyY2hpdGVjdHVyZSwgdmVuZG9yLCBhbmQgb3BlcmF0aW5nXG4gKiBzeXN0ZW0uXG4gKlxuICogU2VlOiA8aHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9uaWdodGx5L3J1c3RjL3BsYXRmb3JtLXN1cHBvcnQuaHRtbD5cbiAqXG4gKiBAc2NoZW1hIFRhcmdldFRyaXBsZVxuICovXG5leHBvcnQgZW51bSBUYXJnZXRUcmlwbGUge1xuICAvKiogQW4gYWxpYXMgZm9yIGB4ODZfNjQtcGMtd2luZG93cy1tc3ZjYCwgdGhlIGRlZmF1bHQgdGFyZ2V0IGZvciBXaW5kb3dzLiAod2luZG93cykgKi9cbiAgV0lORE9XUyA9IFwid2luZG93c1wiLFxuICAvKiogQW4gYWxpYXMgZm9yIGB4ODZfNjQtdW5rbm93bi1saW51eC1nbnVgLCB0aGUgZGVmYXVsdCB0YXJnZXQgZm9yIExpbnV4LiAobGludXgpICovXG4gIExJTlVYID0gXCJsaW51eFwiLFxuICAvKiogQW4gYWxpYXMgZm9yIGBhYXJjaDY0LWFwcGxlLWRhcndpbmAsIHRoZSBkZWZhdWx0IHRhcmdldCBmb3IgbWFjT1MuIChtYWNvcykgKi9cbiAgTUFDT1MgPSBcIm1hY29zXCIsXG4gIC8qKiBBIDY0LWJpdCB4ODYgV2luZG93cyB0YXJnZXQuICh4ODZfNjQtcGMtd2luZG93cy1tc3ZjKSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fUENfSFlQSEVOX1dJTkRPV1NfSFlQSEVOX01TVkMgPSBcIng4Nl82NC1wYy13aW5kb3dzLW1zdmNcIixcbiAgLyoqIEFuIEFSTTY0IFdpbmRvd3MgdGFyZ2V0LiAoYWFyY2g2NC1wYy13aW5kb3dzLW1zdmMpICovXG4gIEFBUkNINjRfSFlQSEVOX1BDX0hZUEhFTl9XSU5ET1dTX0hZUEhFTl9NU1ZDID0gXCJhYXJjaDY0LXBjLXdpbmRvd3MtbXN2Y1wiLFxuICAvKiogQSAzMi1iaXQgeDg2IFdpbmRvd3MgdGFyZ2V0LiAoaTY4Ni1wYy13aW5kb3dzLW1zdmMpICovXG4gIEk2ODZfSFlQSEVOX1BDX0hZUEhFTl9XSU5ET1dTX0hZUEhFTl9NU1ZDID0gXCJpNjg2LXBjLXdpbmRvd3MtbXN2Y1wiLFxuICAvKiogQW4geDg2IExpbnV4IHRhcmdldC4gRXF1aXZhbGVudCB0byBgeDg2XzY0LW1hbnlsaW51eF8yXzI4YC4gKHg4Nl82NC11bmtub3duLWxpbnV4LWdudSkgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX1VOS05PV05fSFlQSEVOX0xJTlVYX0hZUEhFTl9HTlUgPSBcIng4Nl82NC11bmtub3duLWxpbnV4LWdudVwiLFxuICAvKiogQW4gQVJNLWJhc2VkIG1hY09TIHRhcmdldCwgYXMgc2VlbiBvbiBBcHBsZSBTaWxpY29uIGRldmljZXNcblxuQnkgZGVmYXVsdCwgYXNzdW1lcyB0aGUgbGVhc3QtcmVjZW50LCBub24tRU9MIG1hY09TIHZlcnNpb24gKDEzLjApLCBidXQgcmVzcGVjdHNcbnRoZSBgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzZXQuIChhYXJjaDY0LWFwcGxlLWRhcndpbikgKi9cbiAgQUFSQ0g2NF9IWVBIRU5fQVBQTEVfSFlQSEVOX0RBUldJTiA9IFwiYWFyY2g2NC1hcHBsZS1kYXJ3aW5cIixcbiAgLyoqIEFuIHg4NiBtYWNPUyB0YXJnZXQuXG5cbkJ5IGRlZmF1bHQsIGFzc3VtZXMgdGhlIGxlYXN0LXJlY2VudCwgbm9uLUVPTCBtYWNPUyB2ZXJzaW9uICgxMy4wKSwgYnV0IHJlc3BlY3RzXG50aGUgYE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc2V0LiAoeDg2XzY0LWFwcGxlLWRhcndpbikgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX0FQUExFX0hZUEhFTl9EQVJXSU4gPSBcIng4Nl82NC1hcHBsZS1kYXJ3aW5cIixcbiAgLyoqIEFuIEFSTTY0IExpbnV4IHRhcmdldC4gRXF1aXZhbGVudCB0byBgYWFyY2g2NC1tYW55bGludXhfMl8yOGAuIChhYXJjaDY0LXVua25vd24tbGludXgtZ251KSAqL1xuICBBQVJDSDY0X0hZUEhFTl9VTktOT1dOX0hZUEhFTl9MSU5VWF9IWVBIRU5fR05VID0gXCJhYXJjaDY0LXVua25vd24tbGludXgtZ251XCIsXG4gIC8qKiBBbiBBUk02NCBMaW51eCB0YXJnZXQuIChhYXJjaDY0LXVua25vd24tbGludXgtbXVzbCkgKi9cbiAgQUFSQ0g2NF9IWVBIRU5fVU5LTk9XTl9IWVBIRU5fTElOVVhfSFlQSEVOX01VU0wgPSBcImFhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsXCIsXG4gIC8qKiBBbiBgeDg2XzY0YCBMaW51eCB0YXJnZXQuICh4ODZfNjQtdW5rbm93bi1saW51eC1tdXNsKSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fVU5LTk9XTl9IWVBIRU5fTElOVVhfSFlQSEVOX01VU0wgPSBcIng4Nl82NC11bmtub3duLWxpbnV4LW11c2xcIixcbiAgLyoqIEEgUklTQ1Y2NCBMaW51eCB0YXJnZXQuIChyaXNjdjY0LXVua25vd24tbGludXgpICovXG4gIFJJU0NWNjRfSFlQSEVOX1VOS05PV05fSFlQSEVOX0xJTlVYID0gXCJyaXNjdjY0LXVua25vd24tbGludXhcIixcbiAgLyoqIEFuIGB4ODZfNjRgIHRhcmdldCBmb3IgdGhlIGBtYW55bGludXgyMDE0YCBwbGF0Zm9ybS4gRXF1aXZhbGVudCB0byBgeDg2XzY0LW1hbnlsaW51eF8yXzE3YC4gKHg4Nl82NC1tYW55bGludXgyMDE0KSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fTUFOWUxJTlVYMjAxNCA9IFwieDg2XzY0LW1hbnlsaW51eDIwMTRcIixcbiAgLyoqIEFuIGB4ODZfNjRgIHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8xN2AgcGxhdGZvcm0uICh4ODZfNjQtbWFueWxpbnV4XzJfMTcpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMTcgPSBcIng4Nl82NC1tYW55bGludXhfMl8xN1wiLFxuICAvKiogQW4gYHg4Nl82NGAgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzI4YCBwbGF0Zm9ybS4gKHg4Nl82NC1tYW55bGludXhfMl8yOCkgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8yOCA9IFwieDg2XzY0LW1hbnlsaW51eF8yXzI4XCIsXG4gIC8qKiBBbiBgeDg2XzY0YCB0YXJnZXQgZm9yIHRoZSBgbWFueWxpbnV4XzJfMzFgIHBsYXRmb3JtLiAoeDg2XzY0LW1hbnlsaW51eF8yXzMxKSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fTUFOWUxJTlVYX1VOREVSU0NPUkVfMl9VTkRFUlNDT1JFXzMxID0gXCJ4ODZfNjQtbWFueWxpbnV4XzJfMzFcIixcbiAgLyoqIEFuIGB4ODZfNjRgIHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zMmAgcGxhdGZvcm0uICh4ODZfNjQtbWFueWxpbnV4XzJfMzIpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzIgPSBcIng4Nl82NC1tYW55bGludXhfMl8zMlwiLFxuICAvKiogQW4gYHg4Nl82NGAgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzMzYCBwbGF0Zm9ybS4gKHg4Nl82NC1tYW55bGludXhfMl8zMykgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zMyA9IFwieDg2XzY0LW1hbnlsaW51eF8yXzMzXCIsXG4gIC8qKiBBbiBgeDg2XzY0YCB0YXJnZXQgZm9yIHRoZSBgbWFueWxpbnV4XzJfMzRgIHBsYXRmb3JtLiAoeDg2XzY0LW1hbnlsaW51eF8yXzM0KSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fTUFOWUxJTlVYX1VOREVSU0NPUkVfMl9VTkRFUlNDT1JFXzM0ID0gXCJ4ODZfNjQtbWFueWxpbnV4XzJfMzRcIixcbiAgLyoqIEFuIGB4ODZfNjRgIHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zNWAgcGxhdGZvcm0uICh4ODZfNjQtbWFueWxpbnV4XzJfMzUpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzUgPSBcIng4Nl82NC1tYW55bGludXhfMl8zNVwiLFxuICAvKiogQW4gYHg4Nl82NGAgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzM2YCBwbGF0Zm9ybS4gKHg4Nl82NC1tYW55bGludXhfMl8zNikgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zNiA9IFwieDg2XzY0LW1hbnlsaW51eF8yXzM2XCIsXG4gIC8qKiBBbiBgeDg2XzY0YCB0YXJnZXQgZm9yIHRoZSBgbWFueWxpbnV4XzJfMzdgIHBsYXRmb3JtLiAoeDg2XzY0LW1hbnlsaW51eF8yXzM3KSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fTUFOWUxJTlVYX1VOREVSU0NPUkVfMl9VTkRFUlNDT1JFXzM3ID0gXCJ4ODZfNjQtbWFueWxpbnV4XzJfMzdcIixcbiAgLyoqIEFuIGB4ODZfNjRgIHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zOGAgcGxhdGZvcm0uICh4ODZfNjQtbWFueWxpbnV4XzJfMzgpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzggPSBcIng4Nl82NC1tYW55bGludXhfMl8zOFwiLFxuICAvKiogQW4gYHg4Nl82NGAgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzM5YCBwbGF0Zm9ybS4gKHg4Nl82NC1tYW55bGludXhfMl8zOSkgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zOSA9IFwieDg2XzY0LW1hbnlsaW51eF8yXzM5XCIsXG4gIC8qKiBBbiBgeDg2XzY0YCB0YXJnZXQgZm9yIHRoZSBgbWFueWxpbnV4XzJfNDBgIHBsYXRmb3JtLiAoeDg2XzY0LW1hbnlsaW51eF8yXzQwKSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fTUFOWUxJTlVYX1VOREVSU0NPUkVfMl9VTkRFUlNDT1JFXzQwID0gXCJ4ODZfNjQtbWFueWxpbnV4XzJfNDBcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXgyMDE0YCBwbGF0Zm9ybS4gRXF1aXZhbGVudCB0byBgYWFyY2g2NC1tYW55bGludXhfMl8xN2AuIChhYXJjaDY0LW1hbnlsaW51eDIwMTQpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWDIwMTQgPSBcImFhcmNoNjQtbWFueWxpbnV4MjAxNFwiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzE3YCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMTcpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8xNyA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8xN1wiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzI4YCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMjgpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8yOCA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8yOFwiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzMxYCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMzEpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zMSA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8zMVwiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzMyYCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMzIpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zMiA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8zMlwiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzMzYCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMzMpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zMyA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8zM1wiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzM0YCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMzQpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zNCA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8zNFwiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzM1YCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMzUpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zNSA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8zNVwiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzM2YCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMzYpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zNiA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8zNlwiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzM3YCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMzcpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zNyA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8zN1wiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzM4YCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMzgpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zOCA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8zOFwiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzM5YCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfMzkpICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zOSA9IFwiYWFyY2g2NC1tYW55bGludXhfMl8zOVwiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzQwYCBwbGF0Zm9ybS4gKGFhcmNoNjQtbWFueWxpbnV4XzJfNDApICovXG4gIEFBUkNINjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV80MCA9IFwiYWFyY2g2NC1tYW55bGludXhfMl80MFwiLFxuICAvKiogQW4gQVJNNjQgQW5kcm9pZCB0YXJnZXQuXG5cbkJ5IGRlZmF1bHQgdXNlcyBBbmRyb2lkIEFQSSBsZXZlbCAyNCwgYnV0IHJlc3BlY3RzXG50aGUgYEFORFJPSURfQVBJX0xFVkVMYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzZXQuIChhYXJjaDY0LWxpbnV4LWFuZHJvaWQpICovXG4gIEFBUkNINjRfSFlQSEVOX0xJTlVYX0hZUEhFTl9BTkRST0lEID0gXCJhYXJjaDY0LWxpbnV4LWFuZHJvaWRcIixcbiAgLyoqIEFuIGB4ODZfNjRgIEFuZHJvaWQgdGFyZ2V0LlxuXG5CeSBkZWZhdWx0IHVzZXMgQW5kcm9pZCBBUEkgbGV2ZWwgMjQsIGJ1dCByZXNwZWN0c1xudGhlIGBBTkRST0lEX0FQSV9MRVZFTGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc2V0LiAoeDg2XzY0LWxpbnV4LWFuZHJvaWQpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9MSU5VWF9IWVBIRU5fQU5EUk9JRCA9IFwieDg2XzY0LWxpbnV4LWFuZHJvaWRcIixcbiAgLyoqIEEgd2FzbTMyIHRhcmdldCB1c2luZyB0aGUgUHlvZGlkZSAyMDI0IHBsYXRmb3JtLiBNZWFudCBmb3IgdXNlIHdpdGggUHl0aG9uIDMuMTIuICh3YXNtMzItcHlvZGlkZTIwMjQpICovXG4gIFdBU00zMl9IWVBIRU5fUFlPRElERTIwMjQgPSBcIndhc20zMi1weW9kaWRlMjAyNFwiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciBpT1MgZGV2aWNlXG5cbkJ5IGRlZmF1bHQsIGlPUyAxMy4wIGlzIHVzZWQsIGJ1dCByZXNwZWN0cyB0aGUgYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUYFxuZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc2V0LiAoYXJtNjQtYXBwbGUtaW9zKSAqL1xuICBBUk02NF9IWVBIRU5fQVBQTEVfSFlQSEVOX0lPUyA9IFwiYXJtNjQtYXBwbGUtaW9zXCIsXG4gIC8qKiBBbiBBUk02NCB0YXJnZXQgZm9yIGlPUyBzaW11bGF0b3JcblxuQnkgZGVmYXVsdCwgaU9TIDEzLjAgaXMgdXNlZCwgYnV0IHJlc3BlY3RzIHRoZSBgSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVRgXG5lbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzZXQuIChhcm02NC1hcHBsZS1pb3Mtc2ltdWxhdG9yKSAqL1xuICBBUk02NF9IWVBIRU5fQVBQTEVfSFlQSEVOX0lPU19IWVBIRU5fU0lNVUxBVE9SID0gXCJhcm02NC1hcHBsZS1pb3Mtc2ltdWxhdG9yXCIsXG4gIC8qKiBBbiBgeDg2XzY0YCB0YXJnZXQgZm9yIGlPUyBzaW11bGF0b3JcblxuQnkgZGVmYXVsdCwgaU9TIDEzLjAgaXMgdXNlZCwgYnV0IHJlc3BlY3RzIHRoZSBgSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVRgXG5lbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzZXQuICh4ODZfNjQtYXBwbGUtaW9zLXNpbXVsYXRvcikgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX0FQUExFX0hZUEhFTl9JT1NfSFlQSEVOX1NJTVVMQVRPUiA9IFwieDg2XzY0LWFwcGxlLWlvcy1zaW11bGF0b3JcIixcbn1cblxuLyoqXG4gKiBUaGUgc3RyYXRlZ3kgdG8gdXNlIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIFB5VG9yY2ggaW5kZXguXG4gKlxuICogQHNjaGVtYSBUb3JjaE1vZGVcbiAqL1xuZXhwb3J0IGVudW0gVG9yY2hNb2RlIHtcbiAgLyoqIFNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgUHlUb3JjaCBpbmRleCBiYXNlZCBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgQ1VEQSBkcml2ZXIgdmVyc2lvbi4gKGF1dG8pICovXG4gIEFVVE8gPSBcImF1dG9cIixcbiAgLyoqIFVzZSB0aGUgQ1BVLW9ubHkgUHlUb3JjaCBpbmRleC4gKGNwdSkgKi9cbiAgQ1BVID0gXCJjcHVcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMy4wLiAoY3UxMzApICovXG4gIENVMTMwID0gXCJjdTEzMFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDEyLjkuIChjdTEyOSkgKi9cbiAgQ1UxMjkgPSBcImN1MTI5XCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTIuOC4gKGN1MTI4KSAqL1xuICBDVTEyOCA9IFwiY3UxMjhcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMi42LiAoY3UxMjYpICovXG4gIENVMTI2ID0gXCJjdTEyNlwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDEyLjUuIChjdTEyNSkgKi9cbiAgQ1UxMjUgPSBcImN1MTI1XCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTIuNC4gKGN1MTI0KSAqL1xuICBDVTEyNCA9IFwiY3UxMjRcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMi4zLiAoY3UxMjMpICovXG4gIENVMTIzID0gXCJjdTEyM1wiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDEyLjIuIChjdTEyMikgKi9cbiAgQ1UxMjIgPSBcImN1MTIyXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTIuMS4gKGN1MTIxKSAqL1xuICBDVTEyMSA9IFwiY3UxMjFcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMi4wLiAoY3UxMjApICovXG4gIENVMTIwID0gXCJjdTEyMFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDExLjguIChjdTExOCkgKi9cbiAgQ1UxMTggPSBcImN1MTE4XCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTEuNy4gKGN1MTE3KSAqL1xuICBDVTExNyA9IFwiY3UxMTdcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMS42LiAoY3UxMTYpICovXG4gIENVMTE2ID0gXCJjdTExNlwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDExLjUuIChjdTExNSkgKi9cbiAgQ1UxMTUgPSBcImN1MTE1XCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTEuNC4gKGN1MTE0KSAqL1xuICBDVTExNCA9IFwiY3UxMTRcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMS4zLiAoY3UxMTMpICovXG4gIENVMTEzID0gXCJjdTExM1wiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDExLjIuIChjdTExMikgKi9cbiAgQ1UxMTIgPSBcImN1MTEyXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTEuMS4gKGN1MTExKSAqL1xuICBDVTExMSA9IFwiY3UxMTFcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMS4wLiAoY3UxMTApICovXG4gIENVMTEwID0gXCJjdTExMFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDEwLjIuIChjdTEwMikgKi9cbiAgQ1UxMDIgPSBcImN1MTAyXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTAuMS4gKGN1MTAxKSAqL1xuICBDVTEwMSA9IFwiY3UxMDFcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMC4wLiAoY3UxMDApICovXG4gIENVMTAwID0gXCJjdTEwMFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDkuMi4gKGN1OTIpICovXG4gIENVOTIgPSBcImN1OTJcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSA5LjEuIChjdTkxKSAqL1xuICBDVTkxID0gXCJjdTkxXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgOS4wLiAoY3U5MCkgKi9cbiAgQ1U5MCA9IFwiY3U5MFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDguMC4gKGN1ODApICovXG4gIENVODAgPSBcImN1ODBcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA2LjMuIChyb2NtNi4zKSAqL1xuICBST0NNNl8zID0gXCJyb2NtNi4zXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNi4yLjQuIChyb2NtNi4yLjQpICovXG4gIFJPQ002XzJfNCA9IFwicm9jbTYuMi40XCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNi4yLiAocm9jbTYuMikgKi9cbiAgUk9DTTZfMiA9IFwicm9jbTYuMlwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBST0NtIDYuMS4gKHJvY202LjEpICovXG4gIFJPQ002XzEgPSBcInJvY202LjFcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA2LjAuIChyb2NtNi4wKSAqL1xuICBST0NNNl8wID0gXCJyb2NtNi4wXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNS43LiAocm9jbTUuNykgKi9cbiAgUk9DTTVfNyA9IFwicm9jbTUuN1wiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBST0NtIDUuNi4gKHJvY201LjYpICovXG4gIFJPQ001XzYgPSBcInJvY201LjZcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA1LjUuIChyb2NtNS41KSAqL1xuICBST0NNNV81ID0gXCJyb2NtNS41XCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNS40LjIuIChyb2NtNS40LjIpICovXG4gIFJPQ001XzRfMiA9IFwicm9jbTUuNC4yXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNS40LiAocm9jbTUuNCkgKi9cbiAgUk9DTTVfNCA9IFwicm9jbTUuNFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBST0NtIDUuMy4gKHJvY201LjMpICovXG4gIFJPQ001XzMgPSBcInJvY201LjNcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA1LjIuIChyb2NtNS4yKSAqL1xuICBST0NNNV8yID0gXCJyb2NtNS4yXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNS4xLjEuIChyb2NtNS4xLjEpICovXG4gIFJPQ001XzFfMSA9IFwicm9jbTUuMS4xXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNC4yLiAocm9jbTQuMikgKi9cbiAgUk9DTTRfMiA9IFwicm9jbTQuMlwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBST0NtIDQuMS4gKHJvY200LjEpICovXG4gIFJPQ000XzEgPSBcInJvY200LjFcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA0LjAuMS4gKHJvY200LjAuMSkgKi9cbiAgUk9DTTRfMF8xID0gXCJyb2NtNC4wLjFcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgSW50ZWwgWFBVLiAoeHB1KSAqL1xuICBYUFUgPSBcInhwdVwiLFxufVxuIl19