@cartanova/qgrid-cli 2.10.10 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/bundle/dist/_virtual/_rolldown/runtime.js +1 -10
  2. package/bundle/dist/application/monit/log-buffer.js +12 -6
  3. package/bundle/dist/application/monit/monit.frame.js +11 -3
  4. package/bundle/dist/application/monit/monit.types.js +1 -1
  5. package/bundle/dist/application/qgrid/conv-routing.js +9 -6
  6. package/bundle/dist/application/qgrid/expired-token-reminder.js +2 -2
  7. package/bundle/dist/application/qgrid/oauth.js +31 -4
  8. package/bundle/dist/application/qgrid/qgrid-image-generation.js +1 -1
  9. package/bundle/dist/application/qgrid/qgrid-response-format.js +21 -19
  10. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +40 -33
  11. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +128 -93
  12. package/bundle/dist/application/qgrid/qgrid.frame.js +930 -49
  13. package/bundle/dist/application/qgrid/qgrid.types.js +212 -5
  14. package/bundle/dist/application/qgrid/schema-prompt.js +75 -48
  15. package/bundle/dist/application/qgrid/slack-user-map.js +1 -1
  16. package/bundle/dist/application/qgrid/token-death.js +1 -1
  17. package/bundle/dist/application/qgrid/token-subscriber.js +83 -30
  18. package/bundle/dist/application/qgrid/token-trigger-setup.js +1 -1
  19. package/bundle/dist/application/qgrid/token-window-keepalive.js +8 -6
  20. package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -13
  21. package/bundle/dist/application/qgrid/tool-emulation.js +19 -15
  22. package/bundle/dist/application/request-log/json-schema-type-text.js +29 -12
  23. package/bundle/dist/application/request-log/request-log.model.js +83 -70
  24. package/bundle/dist/application/request-log/request-log.types.js +1 -1
  25. package/bundle/dist/application/request-log/zod-code-format.js +1 -1
  26. package/bundle/dist/application/request-log-step/request-log-step.model.js +1 -1
  27. package/bundle/dist/application/request-log-step/request-log-step.types.js +1 -1
  28. package/bundle/dist/application/setting/setting.constant.js +1 -1
  29. package/bundle/dist/application/setting/setting.model.js +2 -2
  30. package/bundle/dist/application/setting/setting.store.js +2 -2
  31. package/bundle/dist/application/setting/setting.types.js +1 -1
  32. package/bundle/dist/application/sonamu.generated.js +32 -16
  33. package/bundle/dist/application/sonamu.generated.sso.js +1 -1
  34. package/bundle/dist/application/token/token.model.js +26 -9
  35. package/bundle/dist/application/token/token.types.js +20 -3
  36. package/bundle/dist/i18n/en.js +15 -1
  37. package/bundle/dist/i18n/ko.js +15 -1
  38. package/bundle/dist/i18n/sd.generated.js +1 -1
  39. package/bundle/dist/migrations/20260807133553_manual__backfill_request_log_cost.js +8 -6
  40. package/bundle/dist/server-bootstrap.js +4 -2
  41. package/bundle/dist/server-error-handler.js +1 -1
  42. package/bundle/dist/sonamu.config.js +37 -8
  43. package/bundle/dist/startup-migrations.js +17 -7
  44. package/bundle/dist/testing/global.js +1 -1
  45. package/bundle/dist/testing/schema-bench.js +0 -0
  46. package/bundle/dist/testing/test-database-name.js +1 -1
  47. package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +1 -1
  48. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +11 -5
  49. package/bundle/dist/utils/providers/anthropic/anthropic-quota.js +4 -4
  50. package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +1 -1
  51. package/bundle/dist/utils/providers/anthropic/claude-session.js +20 -19
  52. package/bundle/dist/utils/providers/anthropic/fence-strip.js +1 -1
  53. package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +49 -23
  54. package/bundle/dist/utils/providers/common/credentials.js +5 -1
  55. package/bundle/dist/utils/providers/common/effort.js +3 -3
  56. package/bundle/dist/utils/providers/common/model-cost.js +69 -14
  57. package/bundle/dist/utils/providers/common/provider-types.js +29 -1
  58. package/bundle/dist/utils/providers/common/schema-validation.js +78 -40
  59. package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +1 -1
  60. package/bundle/dist/utils/providers/common/strictifier.js +62 -43
  61. package/bundle/dist/utils/providers/common/thinking.js +3 -2
  62. package/bundle/dist/utils/providers/common/ttft.js +1 -1
  63. package/bundle/dist/utils/providers/grok/grok-backend-protocol.js +427 -0
  64. package/bundle/dist/utils/providers/grok/grok-constants.js +55 -0
  65. package/bundle/dist/utils/providers/grok/grok-direct-client.js +196 -0
  66. package/bundle/dist/utils/providers/grok/grok-dispatcher.js +1313 -0
  67. package/bundle/dist/utils/providers/grok/grok-headers.js +118 -0
  68. package/bundle/dist/utils/providers/grok/grok-media-client.js +420 -0
  69. package/bundle/dist/utils/providers/grok/grok-models.js +114 -0
  70. package/bundle/dist/utils/providers/grok/grok-oauth.js +455 -0
  71. package/bundle/dist/utils/providers/grok/grok-quota.js +119 -0
  72. package/bundle/dist/utils/providers/grok/grok-refresh.js +192 -0
  73. package/bundle/dist/utils/providers/grok/grok-types.js +186 -0
  74. package/bundle/dist/utils/providers/grok/grok-voice-client.js +199 -0
  75. package/bundle/dist/utils/providers/grok/index.js +11 -0
  76. package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +111 -83
  77. package/bundle/dist/utils/providers/openai/openai-callback-relay.js +3 -2
  78. package/bundle/dist/utils/providers/openai/openai-constants.js +1 -1
  79. package/bundle/dist/utils/providers/openai/openai-direct-client.js +23 -7
  80. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +143 -106
  81. package/bundle/dist/utils/providers/openai/openai-image-generation.js +48 -33
  82. package/bundle/dist/utils/providers/openai/openai-oauth.js +28 -13
  83. package/bundle/dist/utils/providers/openai/openai-quota.js +38 -27
  84. package/bundle/dist/utils/providers/openai/openai-refresh.js +17 -9
  85. package/bundle/dist/utils/providers/openai/openai-sse.js +1 -1
  86. package/bundle/dist/utils/providers/openai/openai-transport-config.js +1 -1
  87. package/bundle/dist/utils/quiet-hours.js +1 -1
  88. package/bundle/dist/utils/slack-notify.js +14 -8
  89. package/bundle/dist/utils/subset-loaders.js +4 -5
  90. package/bundle/src/application/monit/log-buffer.ts +23 -9
  91. package/bundle/src/application/monit/monit.frame.ts +22 -5
  92. package/bundle/src/application/monit/monit.types.ts +6 -0
  93. package/bundle/src/application/qgrid/conv-routing.test.ts +76 -4
  94. package/bundle/src/application/qgrid/conv-routing.ts +35 -9
  95. package/bundle/src/application/qgrid/expired-token-reminder.ts +9 -1
  96. package/bundle/src/application/qgrid/oauth.ts +51 -15
  97. package/bundle/src/application/qgrid/qgrid-image-generation.ts +9 -0
  98. package/bundle/src/application/qgrid/qgrid-response-format.ts +50 -25
  99. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +19 -0
  100. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +84 -40
  101. package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +97 -0
  102. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +274 -126
  103. package/bundle/src/application/qgrid/qgrid.frame.test.ts +1013 -3
  104. package/bundle/src/application/qgrid/qgrid.frame.ts +1415 -60
  105. package/bundle/src/application/qgrid/qgrid.types.ts +335 -0
  106. package/bundle/src/application/qgrid/schema-prompt.ts +105 -41
  107. package/bundle/src/application/qgrid/slack-user-map.ts +5 -0
  108. package/bundle/src/application/qgrid/token-death.ts +4 -0
  109. package/bundle/src/application/qgrid/token-subscriber.test.ts +21 -19
  110. package/bundle/src/application/qgrid/token-subscriber.ts +186 -53
  111. package/bundle/src/application/qgrid/token-trigger-setup.ts +2 -0
  112. package/bundle/src/application/qgrid/token-window-keepalive.ts +49 -6
  113. package/bundle/src/application/qgrid/tool-emulation-schema.ts +33 -29
  114. package/bundle/src/application/qgrid/tool-emulation.ts +52 -27
  115. package/bundle/src/application/request-log/json-schema-type-text.test.ts +5 -5
  116. package/bundle/src/application/request-log/json-schema-type-text.ts +81 -26
  117. package/bundle/src/application/request-log/request-log.model.test.ts +111 -4
  118. package/bundle/src/application/request-log/request-log.model.ts +277 -146
  119. package/bundle/src/application/request-log/request-log.types.ts +6 -0
  120. package/bundle/src/application/request-log/zod-code-format.ts +11 -0
  121. package/bundle/src/application/request-log-step/request-log-step.model.ts +1 -0
  122. package/bundle/src/application/request-log-step/request-log-step.types.ts +2 -0
  123. package/bundle/src/application/setting/setting.constant.ts +9 -0
  124. package/bundle/src/application/setting/setting.model.ts +12 -2
  125. package/bundle/src/application/setting/setting.store.ts +5 -1
  126. package/bundle/src/application/setting/setting.types.ts +8 -0
  127. package/bundle/src/application/sonamu.generated.http +133 -0
  128. package/bundle/src/application/sonamu.generated.sso.ts +2 -0
  129. package/bundle/src/application/sonamu.generated.ts +15 -0
  130. package/bundle/src/application/token/token.identity.test.ts +20 -0
  131. package/bundle/src/application/token/token.model.ts +66 -7
  132. package/bundle/src/application/token/token.types.ts +24 -1
  133. package/bundle/src/i18n/en.ts +19 -0
  134. package/bundle/src/i18n/ko.ts +21 -0
  135. package/bundle/src/i18n/sd.generated.ts +23 -2
  136. package/bundle/src/migrations/20260807133553_manual__backfill_request_log_cost.ts +16 -8
  137. package/bundle/src/server-bootstrap.ts +4 -2
  138. package/bundle/src/server-error-handler.ts +1 -0
  139. package/bundle/src/sonamu.config.ts +69 -7
  140. package/bundle/src/startup-migrations.ts +27 -9
  141. package/bundle/src/testing/global.ts +20 -0
  142. package/bundle/src/testing/schema-bench.ts +105 -30
  143. package/bundle/src/testing/test-database-name.ts +2 -0
  144. package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +8 -0
  145. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +41 -6
  146. package/bundle/src/utils/providers/anthropic/anthropic-quota.ts +7 -3
  147. package/bundle/src/utils/providers/anthropic/anthropic-thinking.ts +6 -0
  148. package/bundle/src/utils/providers/anthropic/claude-session.ts +58 -24
  149. package/bundle/src/utils/providers/anthropic/fence-strip.ts +11 -0
  150. package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +110 -45
  151. package/bundle/src/utils/providers/common/credentials.ts +8 -0
  152. package/bundle/src/utils/providers/common/effort.ts +9 -2
  153. package/bundle/src/utils/providers/common/model-cost.test.ts +48 -1
  154. package/bundle/src/utils/providers/common/model-cost.ts +259 -158
  155. package/bundle/src/utils/providers/common/provider-dispatcher.ts +98 -2
  156. package/bundle/src/utils/providers/common/provider-types.ts +46 -3
  157. package/bundle/src/utils/providers/common/schema-validation.test.ts +5 -1
  158. package/bundle/src/utils/providers/common/schema-validation.ts +124 -56
  159. package/bundle/src/utils/providers/common/smooth-weighted-round-robin.ts +4 -0
  160. package/bundle/src/utils/providers/common/strictifier.ts +185 -59
  161. package/bundle/src/utils/providers/common/thinking.ts +2 -2
  162. package/bundle/src/utils/providers/common/ttft.ts +4 -2
  163. package/bundle/src/utils/providers/grok/__fixtures__/golden-responses-1.0.60.json +164 -0
  164. package/bundle/src/utils/providers/grok/grok-backend-protocol.test.ts +325 -0
  165. package/bundle/src/utils/providers/grok/grok-backend-protocol.ts +721 -0
  166. package/bundle/src/utils/providers/grok/grok-constants.ts +105 -0
  167. package/bundle/src/utils/providers/grok/grok-direct-client.test.ts +179 -0
  168. package/bundle/src/utils/providers/grok/grok-direct-client.ts +313 -0
  169. package/bundle/src/utils/providers/grok/grok-dispatcher.test.ts +1395 -0
  170. package/bundle/src/utils/providers/grok/grok-dispatcher.ts +2105 -0
  171. package/bundle/src/utils/providers/grok/grok-headers.test.ts +149 -0
  172. package/bundle/src/utils/providers/grok/grok-headers.ts +199 -0
  173. package/bundle/src/utils/providers/grok/grok-media-client.test.ts +446 -0
  174. package/bundle/src/utils/providers/grok/grok-media-client.ts +703 -0
  175. package/bundle/src/utils/providers/grok/grok-models.test.ts +96 -0
  176. package/bundle/src/utils/providers/grok/grok-models.ts +161 -0
  177. package/bundle/src/utils/providers/grok/grok-oauth.test.ts +406 -0
  178. package/bundle/src/utils/providers/grok/grok-oauth.ts +771 -0
  179. package/bundle/src/utils/providers/grok/grok-quota.test.ts +142 -0
  180. package/bundle/src/utils/providers/grok/grok-quota.ts +198 -0
  181. package/bundle/src/utils/providers/grok/grok-refresh.test.ts +239 -0
  182. package/bundle/src/utils/providers/grok/grok-refresh.ts +325 -0
  183. package/bundle/src/utils/providers/grok/grok-types.test.ts +252 -0
  184. package/bundle/src/utils/providers/grok/grok-types.ts +374 -0
  185. package/bundle/src/utils/providers/grok/grok-voice-client.test.ts +321 -0
  186. package/bundle/src/utils/providers/grok/grok-voice-client.ts +284 -0
  187. package/bundle/src/utils/providers/grok/index.ts +20 -0
  188. package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +221 -137
  189. package/bundle/src/utils/providers/openai/openai-callback-relay.ts +12 -1
  190. package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
  191. package/bundle/src/utils/providers/openai/openai-direct-client.ts +111 -21
  192. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +322 -169
  193. package/bundle/src/utils/providers/openai/openai-image-generation.ts +116 -36
  194. package/bundle/src/utils/providers/openai/openai-oauth.ts +48 -20
  195. package/bundle/src/utils/providers/openai/openai-quota.ts +77 -46
  196. package/bundle/src/utils/providers/openai/openai-refresh.ts +42 -18
  197. package/bundle/src/utils/providers/openai/openai-sse.ts +27 -3
  198. package/bundle/src/utils/providers/openai/openai-transport-config.ts +2 -0
  199. package/bundle/src/utils/quiet-hours.ts +12 -1
  200. package/bundle/src/utils/slack-notify.ts +44 -13
  201. package/bundle/src/utils/subset-loaders.ts +7 -7
  202. package/bundle/web-dist/client/assets/clsx-5XM_pHvN.js +1 -0
  203. package/bundle/web-dist/client/assets/index-BA7uQ-6c.js +31 -0
  204. package/bundle/web-dist/client/assets/index-Be2qCZmI.css +1 -0
  205. package/bundle/web-dist/client/assets/logs-C47OJGEI.js +1 -0
  206. package/bundle/web-dist/client/assets/monit-BS9no0dU.js +4 -0
  207. package/bundle/web-dist/client/assets/plus-sdACTfH0.js +1 -0
  208. package/bundle/web-dist/client/assets/refresh-cw-CY8o_1cT.js +1 -0
  209. package/bundle/web-dist/client/assets/request-model-BRtFuZvj.js +1 -0
  210. package/bundle/web-dist/client/assets/routes-kqgkUxE8.js +5 -0
  211. package/bundle/web-dist/client/assets/{services.generated-NP-ValHd.js → services.generated-CefiDXEv.js} +5 -5
  212. package/bundle/web-dist/client/assets/settings-DNDvFGSw.js +1 -0
  213. package/bundle/web-dist/client/assets/show-u8Np69q3.js +2 -0
  214. package/bundle/web-dist/client/assets/tokens-QvP410NW.js +1 -0
  215. package/bundle/web-dist/client/assets/total-cost-MnfKU8IN.js +1 -0
  216. package/bundle/web-dist/client/assets/use-oauth-login-flow-Bzdh28Ws.js +1 -0
  217. package/bundle/web-dist/client/assets/use-update-token-mutation-CfJKaxmR.js +1 -0
  218. package/bundle/web-dist/client/assets/vendor-react-CUFFrVN9.js +244 -0
  219. package/bundle/web-dist/client/assets/vendor-tanstack-Bf_jag9G.js +1 -0
  220. package/bundle/web-dist/client/index.html +6 -6
  221. package/bundle/web-dist/server/assets/clsx-D_N5PN_2.js +16 -0
  222. package/bundle/web-dist/server/assets/{lazyRouteComponent-CgBdabgd.js → lazyRouteComponent-D8iTIHyn.js} +129 -2
  223. package/bundle/web-dist/server/assets/logs-B3OTd9hy.js +825 -0
  224. package/bundle/web-dist/server/assets/{monit-ZPt66W5M.js → monit-B2hqorPe.js} +385 -126
  225. package/bundle/web-dist/server/assets/plus-DwG7h9kq.js +28 -0
  226. package/bundle/web-dist/server/assets/{react-dom-Ds75e4Jl.js → react-dom-BIYQzBqG.js} +2 -129
  227. package/bundle/web-dist/server/assets/refresh-cw-mMBkwOq0.js +44 -0
  228. package/bundle/web-dist/server/assets/{request-model-DjGldb-h.js → request-model-I6OdODSH.js} +15 -6
  229. package/bundle/web-dist/server/assets/{routes-Ct-k7nBA.js → routes-B95YlUv2.js} +760 -213
  230. package/bundle/web-dist/server/assets/{services.generated-BA4AcAf5.js → services.generated-DQATJ6qf.js} +12820 -12194
  231. package/bundle/web-dist/server/assets/settings-C3gbGk0m.js +830 -0
  232. package/bundle/web-dist/server/assets/{show-LSFIzvO2.js → show-Bxaj3rhH.js} +1350 -418
  233. package/bundle/web-dist/server/assets/tokens-CZjH3cB7.js +1038 -0
  234. package/bundle/web-dist/server/assets/total-cost-fTE9Xy82.js +18 -0
  235. package/bundle/web-dist/server/assets/use-oauth-login-flow-CKDHgc3U.js +2379 -0
  236. package/bundle/web-dist/server/assets/{use-update-token-mutation-pkArIzCP.js → use-update-token-mutation-BEbgOzaa.js} +1 -1
  237. package/bundle/web-dist/server/entry-server.generated.js +4295 -22810
  238. package/dist/cli.js +9 -9
  239. package/package.json +4 -11
  240. package/postinstall.mjs +12 -0
  241. package/skills/qgrid/SKILL.md +1 -0
  242. package/skills/qgrid/references/cli-env-and-server-boot.md +4 -1
  243. package/skills/qgrid/references/decision-rationale.md +23 -0
  244. package/skills/qgrid/references/grok-runtime.md +89 -0
  245. package/skills/qgrid/references/provider-runtime-differences.md +30 -29
  246. package/skills/qgrid/references/repo-map.md +10 -0
  247. package/skills/qgrid/references/token-auth-quota-lifecycle.md +56 -3
  248. package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +0 -406
  249. package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.10/node_modules/@vitest/expect/dist/index.js +0 -1507
  250. package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js +0 -887
  251. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2756
  252. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/index.js +0 -8
  253. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/utils.js +0 -8
  254. package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.10/node_modules/@vitest/snapshot/dist/index.js +0 -922
  255. package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js +0 -386
  256. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -121
  257. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/constants.js +0 -51
  258. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/diff.js +0 -1317
  259. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/display.js +0 -561
  260. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/error.js +0 -40
  261. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/helpers.js +0 -272
  262. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/offset.js +0 -27
  263. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/serialize.js +0 -77
  264. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/source-map.js +0 -381
  265. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/timers.js +0 -51
  266. package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +0 -2986
  267. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +0 -10
  268. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +0 -109
  269. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +0 -10
  270. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +0 -10
  271. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +0 -10
  272. package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +0 -1126
  273. package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +0 -21
  274. package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +0 -432
  275. package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +0 -517
  276. package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +0 -101
  277. package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50/node_modules/vite/dist/node/module-runner.js +0 -1265
  278. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +0 -9
  279. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +0 -41
  280. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +0 -19
  281. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +0 -202
  282. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +0 -46
  283. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +0 -119
  284. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +0 -3044
  285. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +0 -59
  286. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/index.js +0 -28
  287. package/bundle/dist/testing/setup-mocks.js +0 -16
  288. package/bundle/src/testing/setup-mocks.ts +0 -44
  289. package/bundle/web-dist/client/assets/index-Bw2s88Ot.css +0 -1
  290. package/bundle/web-dist/client/assets/index-DZwzUfI-.js +0 -106
  291. package/bundle/web-dist/client/assets/logs-Cog79DU5.js +0 -1
  292. package/bundle/web-dist/client/assets/monit-2auznBys.js +0 -1
  293. package/bundle/web-dist/client/assets/plus-B62CuqT8.js +0 -1
  294. package/bundle/web-dist/client/assets/refresh-cw-NNcU0Cmq.js +0 -1
  295. package/bundle/web-dist/client/assets/request-model-CojtinqK.js +0 -1
  296. package/bundle/web-dist/client/assets/routes-B0lTeLK-.js +0 -5
  297. package/bundle/web-dist/client/assets/settings-D8ZxZGSJ.js +0 -1
  298. package/bundle/web-dist/client/assets/show-CFSERlnM.js +0 -2
  299. package/bundle/web-dist/client/assets/tokens-CZXUyI7O.js +0 -1
  300. package/bundle/web-dist/client/assets/use-oauth-login-flow-hboOs3wG.js +0 -1
  301. package/bundle/web-dist/client/assets/use-update-token-mutation-BQHS0byG.js +0 -1
  302. package/bundle/web-dist/client/assets/vendor-react-DH4kUfK2.js +0 -9
  303. package/bundle/web-dist/client/assets/vendor-tanstack-DJRQAbrY.js +0 -1
  304. package/bundle/web-dist/server/assets/logs-BMyR98rU.js +0 -509
  305. package/bundle/web-dist/server/assets/plus-BZ9I0VgC.js +0 -19
  306. package/bundle/web-dist/server/assets/refresh-cw-CztCFis-.js +0 -23
  307. package/bundle/web-dist/server/assets/settings-CBUZ47Xx.js +0 -461
  308. package/bundle/web-dist/server/assets/tokens-DxrBW512.js +0 -448
  309. package/bundle/web-dist/server/assets/use-oauth-login-flow-Gn8flMK5.js +0 -178
  310. package/dist/cli.d.ts +0 -10
  311. /package/bundle/web-dist/client/assets/{cost-DH2jZbrw.js → cost-DB3HbU7T.js} +0 -0
  312. /package/bundle/web-dist/client/assets/{preload-helper-ca-nBW7U.js → preload-helper-DWTEM3RW.js} +0 -0
  313. /package/bundle/web-dist/server/assets/{cost-eEHeTRT5.js → cost-BC9yzyA9.js} +0 -0
@@ -116,6 +116,16 @@ const QgridToolResultInput = z.object({
116
116
  output: z.string(),
117
117
  isError: z.boolean().optional()
118
118
  });
119
+ const XaiQueryProviderOptions = z.object({
120
+ serviceTier: z.enum(["default", "priority"]).optional(),
121
+ parallelToolCalls: z.boolean().optional()
122
+ });
123
+ const QueryProviderOptions = z.object({ xai: XaiQueryProviderOptions.optional() });
124
+ const XaiProviderMetadata = z.object({
125
+ costInUsdTicks: z.number().optional(),
126
+ contextWindow: z.number().optional()
127
+ });
128
+ const QueryProviderMetadata = z.object({ xai: XaiProviderMetadata.optional() });
119
129
  const QueryInput = z.looseObject({
120
130
  system: z.string().optional(),
121
131
  prompt: z.string(),
@@ -137,7 +147,8 @@ const QueryInput = z.looseObject({
137
147
  runContext: QgridRunContext.optional(),
138
148
  toolResults: z.array(QgridToolResultInput).optional(),
139
149
  imageGeneration: z.union([z.boolean(), z.literal("auto")]).optional(),
140
- imageGenerationOptions: ImageGenerationOptions.optional()
150
+ imageGenerationOptions: ImageGenerationOptions.optional(),
151
+ providerOptions: QueryProviderOptions.optional()
141
152
  });
142
153
  const ModelFallback = z.object({
143
154
  trigger: z.literal("refusal"),
@@ -173,6 +184,7 @@ const QueryOutput = z.object({
173
184
  ttftMs: z.number(),
174
185
  costUsd: z.number(),
175
186
  costSource: CostSource,
187
+ providerMetadata: QueryProviderMetadata.optional(),
176
188
  runContext: QgridRunContext.optional()
177
189
  });
178
190
  const StreamEvents = z.object({
@@ -203,11 +215,183 @@ const StreamEvents = z.object({
203
215
  ttftMs: z.number(),
204
216
  costUsd: z.number(),
205
217
  costSource: CostSource,
218
+ providerMetadata: QueryProviderMetadata.optional(),
206
219
  content: z.array(QgridContent),
207
220
  runContext: QgridRunContext.optional()
208
221
  }),
209
222
  error: z.object({ message: z.string() })
210
223
  });
224
+ const MiB = 1024 * 1024;
225
+ const REQUEST_BODY_LIMIT_BYTES = 10 * MiB;
226
+ const MEDIA_MAX_INLINE_BYTES = 7 * MiB;
227
+ const MEDIA_MAX_INLINE_LABEL = `${MEDIA_MAX_INLINE_BYTES / MiB} MiB`;
228
+ const MEDIA_MAX_REFERENCE_IMAGES = 5;
229
+ const IMAGE_DATA_URL = /^data:(image\/(?:png|jpeg|webp));base64,([A-Za-z0-9+/]*={0,2})$/;
230
+ const BASE64 = /^[A-Za-z0-9+/]*={0,2}$/;
231
+ function base64DecodedBytes(data) {
232
+ const padding = data.endsWith("==") ? 2 : data.endsWith("=") ? 1 : 0;
233
+ return Math.floor(data.length * 3 / 4) - padding;
234
+ }
235
+ /** Decoded bytes of the inline (data URL) images among `refs`; https URLs cost nothing here. */
236
+ function inlineImageBytes(refs) {
237
+ let total = 0;
238
+ for (const ref of refs) {
239
+ const match = ref === void 0 ? null : IMAGE_DATA_URL.exec(ref);
240
+ if (match) total += base64DecodedBytes(match[2]);
241
+ }
242
+ return total;
243
+ }
244
+ const INLINE_IMAGES_TOTAL_MESSAGE = `inline images exceed ${MEDIA_MAX_INLINE_LABEL} in total`;
245
+ function isHttpsUrl(value) {
246
+ try {
247
+ return new URL(value).protocol === "https:";
248
+ } catch {
249
+ return false;
250
+ }
251
+ }
252
+ const MediaImageRef = z.string().min(1).superRefine((value, ctx) => {
253
+ if (value.startsWith("data:")) {
254
+ const match = IMAGE_DATA_URL.exec(value);
255
+ if (!match || match[2].length % 4 !== 0) ctx.addIssue({
256
+ code: "custom",
257
+ message: "image data URLs must be base64 image/png, image/jpeg or image/webp"
258
+ });
259
+ else if (base64DecodedBytes(match[2]) > 7340032) ctx.addIssue({
260
+ code: "custom",
261
+ message: `image data URL exceeds ${MEDIA_MAX_INLINE_LABEL}`
262
+ });
263
+ return;
264
+ }
265
+ if (!isHttpsUrl(value)) ctx.addIssue({
266
+ code: "custom",
267
+ message: "image URLs must use https or a data URL"
268
+ });
269
+ });
270
+ const GrokModelId = z.string().regex(/^grok\/[A-Za-z0-9._-]+$/, "model must be grok/<id>");
271
+ const MediaCallOptions = {
272
+ tokenName: z.string().optional(),
273
+ projectName: z.string().optional(),
274
+ logger: z.boolean().optional()
275
+ };
276
+ const GenerateImagesInput = z.object({
277
+ model: GrokModelId,
278
+ prompt: z.string().min(1),
279
+ n: z.number().int().min(1).max(3).optional(),
280
+ aspectRatio: z.string().min(1).max(16).optional(),
281
+ resolution: z.string().min(1).max(16).optional(),
282
+ quality: z.string().min(1).max(16).optional(),
283
+ outputFormat: z.enum([
284
+ "png",
285
+ "jpeg",
286
+ "webp"
287
+ ]).optional(),
288
+ referenceImages: z.array(MediaImageRef).min(1).max(5).optional(),
289
+ ...MediaCallOptions
290
+ }).refine((input) => inlineImageBytes(input.referenceImages ?? []) <= MEDIA_MAX_INLINE_BYTES, {
291
+ message: INLINE_IMAGES_TOTAL_MESSAGE,
292
+ path: ["referenceImages"]
293
+ });
294
+ const MediaCostSource = z.enum(["provider", "pricing_table"]);
295
+ const GenerateImagesOutput = z.object({
296
+ requestLogId: z.number().optional(),
297
+ model: z.string(),
298
+ tokenName: z.string(),
299
+ images: z.array(z.object({
300
+ b64: z.string(),
301
+ mimeType: z.string(),
302
+ revisedPrompt: z.string().optional()
303
+ })),
304
+ usage: z.object({
305
+ imageCount: z.number(),
306
+ costInUsdTicks: z.number().optional()
307
+ }),
308
+ costUsd: z.number().optional(),
309
+ costSource: MediaCostSource.optional()
310
+ });
311
+ const VideoStartInput = z.object({
312
+ model: GrokModelId,
313
+ prompt: z.string().min(1),
314
+ duration: z.number().int().min(1).max(15).optional(),
315
+ aspectRatio: z.string().min(1).max(16).optional(),
316
+ resolution: z.enum([
317
+ "480p",
318
+ "720p",
319
+ "1080p"
320
+ ]).optional(),
321
+ image: MediaImageRef.optional(),
322
+ lastFrame: MediaImageRef.optional(),
323
+ referenceImages: z.array(MediaImageRef).min(1).max(5).optional(),
324
+ mode: z.enum(["reference-to-video"]).optional(),
325
+ ...MediaCallOptions
326
+ }).refine((input) => input.mode !== "reference-to-video" || input.referenceImages !== void 0, {
327
+ message: "reference-to-video needs at least one referenceImages entry",
328
+ path: ["referenceImages"]
329
+ }).refine((input) => inlineImageBytes([
330
+ input.image,
331
+ input.lastFrame,
332
+ ...input.referenceImages ?? []
333
+ ]) <= MEDIA_MAX_INLINE_BYTES, {
334
+ message: INLINE_IMAGES_TOTAL_MESSAGE,
335
+ path: ["referenceImages"]
336
+ });
337
+ const VideoStartOutput = z.object({
338
+ jobHandle: z.string(),
339
+ model: z.string(),
340
+ requestLogId: z.number().optional()
341
+ });
342
+ const VideoStatusInput = z.object({
343
+ jobHandle: z.string().regex(/^[A-Za-z0-9_-]{22}$/),
344
+ projectName: z.string().optional()
345
+ });
346
+ const VideoStatusOutput = z.object({
347
+ status: z.enum([
348
+ "pending",
349
+ "done",
350
+ "failed"
351
+ ]),
352
+ url: z.string().optional(),
353
+ mimeType: z.literal("video/mp4"),
354
+ durationSec: z.number().optional(),
355
+ costInUsdTicks: z.number().optional(),
356
+ costUsd: z.number().optional(),
357
+ error: z.string().optional(),
358
+ requestLogId: z.number().optional()
359
+ });
360
+ const TranscribeInput = z.object({
361
+ model: GrokModelId.optional(),
362
+ audio: z.string().min(1).refine((value) => value.length % 4 === 0 && BASE64.test(value), "audio must be base64").refine((value) => base64DecodedBytes(value) <= MEDIA_MAX_INLINE_BYTES, `audio exceeds ${MEDIA_MAX_INLINE_LABEL}`),
363
+ mediaType: z.string().regex(/^audio\/[A-Za-z0-9.+-]+$/, "mediaType must be audio/*"),
364
+ language: z.string().min(1).max(16).optional(),
365
+ ...MediaCallOptions
366
+ });
367
+ const TranscribeOutput = z.object({
368
+ text: z.string(),
369
+ language: z.string().optional(),
370
+ durationSec: z.number().optional(),
371
+ model: z.string(),
372
+ tokenName: z.string(),
373
+ requestLogId: z.number().optional()
374
+ });
375
+ const SpeakInput = z.object({
376
+ model: GrokModelId.optional(),
377
+ text: z.string().min(1).max(15e3),
378
+ voice: z.string().min(1).max(64).optional(),
379
+ language: z.string().min(1).max(16).optional(),
380
+ format: z.enum([
381
+ "mp3",
382
+ "wav",
383
+ "pcm",
384
+ "mulaw",
385
+ "alaw"
386
+ ]).optional(),
387
+ ...MediaCallOptions
388
+ });
389
+ const SpeakOutput = z.object({
390
+ audio: z.string(),
391
+ mimeType: z.string(),
392
+ tokenName: z.string(),
393
+ requestLogId: z.number().optional()
394
+ });
211
395
  const CreateRunInput = z.object({
212
396
  userPrompt: z.string(),
213
397
  systemPrompt: z.string().optional(),
@@ -281,6 +465,23 @@ const OAuthStartResult = z.object({
281
465
  authUrl: z.string(),
282
466
  mode: z.enum(["redirect", "code"])
283
467
  });
468
+ const GrokDeviceCodeStart = z.object({
469
+ deviceCode: z.string(),
470
+ userCode: z.string(),
471
+ verificationUri: z.string(),
472
+ verificationUriComplete: z.string().optional(),
473
+ expiresIn: z.number(),
474
+ interval: z.number()
475
+ });
476
+ const GrokDevicePollResult = z.object({
477
+ status: z.enum([
478
+ "pending",
479
+ "slow_down",
480
+ "added"
481
+ ]),
482
+ name: z.string().optional(),
483
+ intervalSec: z.number().optional()
484
+ });
284
485
  const RateWindow = z.object({
285
486
  utilization: z.number().nullable(),
286
487
  resetsAt: z.string().nullable(),
@@ -290,7 +491,12 @@ const UsageResponse = z.object({
290
491
  error: z.string().optional(),
291
492
  provider: z.string().optional(),
292
493
  fiveHour: RateWindow.optional(),
293
- sevenDay: RateWindow.optional()
494
+ sevenDay: RateWindow.optional(),
495
+ periodType: z.string().nullable().optional(),
496
+ tier: z.string().nullable().optional(),
497
+ onDemandExcluded: z.boolean().optional(),
498
+ zdrVideoExcluded: z.boolean().optional(),
499
+ keepaliveApplicable: z.boolean().optional()
294
500
  });
295
501
  const SubscriberStatus = z.object({
296
502
  connected: z.boolean(),
@@ -310,7 +516,8 @@ const HealthResponse = z.object({
310
516
  ready: z.boolean(),
311
517
  providers: z.object({
312
518
  openai: ProviderStartupState,
313
- anthropic: ProviderStartupState
519
+ anthropic: ProviderStartupState,
520
+ grok: ProviderStartupState.optional()
314
521
  })
315
522
  });
316
523
  var QuotaError = class extends Error {
@@ -329,6 +536,6 @@ function maskToken(token) {
329
536
  return token.length > 4 ? `...${token.slice(-4)}` : token;
330
537
  }
331
538
  //#endregion
332
- export { AppendStepInput, CostSource, CreateRunInput, Effort, FinishReason, FinishRunInput, HealthResponse, ImageGenerationMetadata, ImageGenerationOptions, ImageGenerationQuality, ImageGenerationSize, MAX_QUERY_TIMEOUT_MS, ModelFallback, OAuthStartResult, ProcessError, ProviderStartupState, QgridContent, QgridInputPart, QgridRunContext, QgridThreadCoord, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QueryTimeoutMs, QuotaError, QuotaThresholdExceededError, ReasoningSummary, ServiceTier, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, Verbosity, maskToken };
539
+ export { AppendStepInput, CostSource, CreateRunInput, Effort, FinishReason, FinishRunInput, GenerateImagesInput, GenerateImagesOutput, GrokDeviceCodeStart, GrokDevicePollResult, HealthResponse, ImageGenerationMetadata, ImageGenerationOptions, ImageGenerationQuality, ImageGenerationSize, MAX_QUERY_TIMEOUT_MS, MEDIA_MAX_INLINE_BYTES, MEDIA_MAX_REFERENCE_IMAGES, MediaCostSource, MediaImageRef, ModelFallback, OAuthStartResult, ProcessError, ProviderStartupState, QgridContent, QgridInputPart, QgridRunContext, QgridThreadCoord, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QueryProviderMetadata, QueryProviderOptions, QueryTimeoutMs, QuotaError, QuotaThresholdExceededError, REQUEST_BODY_LIMIT_BYTES, ReasoningSummary, ServiceTier, SpeakInput, SpeakOutput, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, TranscribeInput, TranscribeOutput, UsageResponse, Verbosity, VideoStartInput, VideoStartOutput, VideoStatusInput, VideoStatusOutput, XaiProviderMetadata, XaiQueryProviderOptions, maskToken };
333
540
 
334
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuLy8gT2JzZXJ2ZWQgaW1hZ2UgcmVzcG9uc2UgdmFsdWVzLCBkaXN0aW5jdCBmcm9tIHJlcXVlc3RlZCBnZW5lcmF0aW9uIGhpbnRzLlxuZXhwb3J0IGNvbnN0IEltYWdlR2VuZXJhdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICByb3V0ZTogei5lbnVtKFtcImNvZGV4LWltYWdlc1wiLCBcImNvZGV4LXJlc3BvbnNlc1wiXSksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGJhY2tncm91bmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcXVhbGl0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzaXplOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzYWdlOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgIHRvdGFsX3Rva2Vuczogei5udW1iZXIoKS5ub25uZWdhdGl2ZSgpLFxuICAgICAgaW5wdXRfdG9rZW5zX2RldGFpbHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgaW1hZ2VfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICAgICAgdGV4dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgICAgICBjYWNoZWRfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCkub3B0aW9uYWwoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICBvdXRwdXRfdG9rZW5zX2RldGFpbHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgaW1hZ2VfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICAgICAgdGV4dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YT47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZENvbnRlbnQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidGV4dFwiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRvb2wtY2FsbFwiKSxcbiAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgIHRvb2xOYW1lOiB6LnN0cmluZygpLFxuICAgIGlucHV0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcImltYWdlXCIpLFxuICAgIC8vIEJhc2U2NCBpbWFnZSBieXRlczsgb2xkZXIgcmVzcG9uc2VzIHdpdGhvdXQgbWVkaWFUeXBlIGFyZSBQTkcuXG4gICAgZGF0YTogei5zdHJpbmcoKSxcbiAgICBtZWRpYVR5cGU6IHouZW51bShbXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2Uvd2VicFwiXSkub3B0aW9uYWwoKSxcbiAgICByZXZpc2VkUHJvbXB0OiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBnZW5lcmF0aW9uOiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YS5vcHRpb25hbCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG4vLyBTdWJzY3JpcHRpb24tYmFja2VuZCBoaW50cywgbm90IHB1YmxpYyBJbWFnZXMgQVBJIHJlc29sdXRpb24gZ3VhcmFudGVlcy5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25TaXplID0gei51bmlvbihbXG4gIHoubGl0ZXJhbChcImF1dG9cIiksXG4gIHpcbiAgICAuc3RyaW5nKClcbiAgICAucmVnZXgoL15bMS05XVxcZCp4WzEtOV1cXGQqJC8pXG4gICAgLnJlZmluZShcbiAgICAgIChzaXplKSA9PiBzaXplLnNwbGl0KFwieFwiKS5ldmVyeSgoZWRnZSkgPT4gTnVtYmVyLmlzU2FmZUludGVnZXIoTnVtYmVyKGVkZ2UpKSksXG4gICAgICBcIkltYWdlIGRpbWVuc2lvbnMgbXVzdCBiZSBwb3NpdGl2ZSBzYWZlIGludGVnZXJzXCIsXG4gICAgKSxcbl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHpcbiAgLm9iamVjdCh7XG4gICAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICAgIHNpemU6IEltYWdlR2VuZXJhdGlvblNpemUub3B0aW9uYWwoKSxcbiAgICBiYWNrZ3JvdW5kOiB6LmVudW0oW1wiYXV0b1wiLCBcIm9wYXF1ZVwiLCBcInRyYW5zcGFyZW50XCJdKS5vcHRpb25hbCgpLFxuICAgIG91dHB1dEZvcm1hdDogei5lbnVtKFtcInBuZ1wiLCBcImpwZWdcIiwgXCJ3ZWJwXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAucmVmaW5lKFxuICAgIChvcHRpb25zKSA9PlxuICAgICAgb3B0aW9ucy5iYWNrZ3JvdW5kICE9PSBcInRyYW5zcGFyZW50XCIgfHxcbiAgICAgICFvcHRpb25zLm91dHB1dEZvcm1hdCB8fFxuICAgICAgb3B0aW9ucy5vdXRwdXRGb3JtYXQgPT09IFwicG5nXCIsXG4gICAgeyBtZXNzYWdlOiBcIlRyYW5zcGFyZW50IGltYWdlIGdlbmVyYXRpb24gb25seSBzdXBwb3J0cyBQTkcgb3V0cHV0XCIsIHBhdGg6IFtcIm91dHB1dEZvcm1hdFwiXSB9LFxuICApO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvbk9wdGlvbnM+O1xuXG5leHBvcnQgY29uc3QgUWdyaWRJbnB1dFBhcnQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidGV4dFwiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICAgIHRleHRfZWxlbWVudHM6IHouYXJyYXkoei5uZXZlcigpKS5kZWZhdWx0KFtdKSxcbiAgfSksXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJpbWFnZVwiKSxcbiAgICB1cmw6IHouc3RyaW5nKCksXG4gIH0pLFxuXSk7XG5leHBvcnQgdHlwZSBRZ3JpZElucHV0UGFydCA9IHouaW5mZXI8dHlwZW9mIFFncmlkSW5wdXRQYXJ0PjtcblxuZXhwb3J0IGNvbnN0IE1BWF9RVUVSWV9USU1FT1VUX01TID0gMzAgKiA2MF8wMDA7XG5leHBvcnQgY29uc3QgUXVlcnlUaW1lb3V0TXMgPSB6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkubWF4KE1BWF9RVUVSWV9USU1FT1VUX01TKTtcblxuLy8g4pSA4pSA4pSAIFJ1biBMaWZlY3ljbGUgQ29udGV4dCAoU0RLIOKGlCBTZXJ2ZXIgY29udHJhY3QpIOKUgOKUgOKUgFxuXG4vLyBPcGVuQUkgY2FjaGUgYWZmaW5pdHkg7KKM7ZGcKOq1rCBjb2RleCB0aHJlYWQg7KKM7ZGcKS4gcHJvbXB0X2NhY2hlX2tleSDrpbwg6rOg7KCV7ZW0XG4vLyBPcGVuQUkgcHJvbXB0IGNhY2hpbmcg7J2EIOyCtOumrOq4sCDsnITtlZwg7ZW465OkLiDshJzrsoTqsIAg67Cc6riJ7ZWY6rOgIO2BtOudvOqwgCDri6TsnYwg7JqU7LKt7JeQIOq3uOuMgOuhnCDtmozshqHtlZzri6QuXG4vLyDtlbjrk6Qg66+47KCE7IahIOyLnCDquLDsobQgXCLrp6QgdHVybiDsg4ggdGhyZWFkICsgaGlzdG9yeSBpbmplY3RcIiDrj5nsnpHsnLzroZwg7Y+067CxKFFncmlkUnVuQ29udGV4dCDssLjsobApLlxuZXhwb3J0IGNvbnN0IFFncmlkVGhyZWFkQ29vcmQgPSB6Lm9iamVjdCh7XG4gIHdvcmtlcklkOiB6Lm51bWJlcigpLCAvLyDqs6DsoJUg65287Jqw7YyFICh0aHJlYWQg64qUIHdvcmtlciDtlITroZzshLjsiqQg66mU66qo66as7JeQ66eMIOyhtOyerClcbiAgdGhyZWFkSWQ6IHouc3RyaW5nKCksIC8vIG9wYXF1ZSBjYWNoZSBhZmZpbml0eSBrZXkgPSBwcm9tcHRfY2FjaGVfa2V5XG4gIGVwb2NoOiB6Lm51bWJlcigpLCAvLyB3b3JrZXIgc3Bhd24g7Lm07Jq07YSwLiByZXN0YXJ0IOuhnCB0aHJlYWQg7Kad67CcIOqwkOyngFxuICBzeXN0ZW1IYXNoOiB6LnN0cmluZygpLCAvLyBzeXN0ZW1fcHJvbXB0IO2VtOyLnC4g64uk66W4IOuMgO2ZlCDsmKTsoJHsho0g67Cp7KeAXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkVGhyZWFkQ29vcmQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZFRocmVhZENvb3JkPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkUnVuQ29udGV4dCA9IHoub2JqZWN0KHtcbiAgLy8gdG9vbC1jYWxsIHJ1buydhCDqs4Tsho3tlaAg65WM66eMIOuwnOq4iS4g7J2867CYIOuMgO2ZlOuKlCB0aHJlYWRDb29yZCDrp4wg7JmV67O1LlxuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdGhyZWFkQ29vcmQ6IFFncmlkVGhyZWFkQ29vcmQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRSdW5Db250ZXh0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRSdW5Db250ZXh0PjtcblxuZXhwb3J0IGNvbnN0IFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5vYmplY3Qoe1xuICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBvdXRwdXQ6IHouc3RyaW5nKCksXG4gIGlzRXJyb3I6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sUmVzdWx0SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlJbnB1dCA9IHoubG9vc2VPYmplY3Qoe1xuICBzeXN0ZW06IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvbXB0OiB6LnN0cmluZygpLFxuICBpbnB1dDogei5hcnJheShRZ3JpZElucHV0UGFydCkub3B0aW9uYWwoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGltZW91dDogUXVlcnlUaW1lb3V0TXMub3B0aW9uYWwoKSxcbiAganNvblNjaGVtYTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sczogei5hcnJheShRZ3JpZFRvb2wpLm9wdGlvbmFsKCksXG4gIC8vIEJvb2xlYW4gbGl0ZXJhbHMga2VlcCBTb25hbXUncyBIVFRQIGNhc3RlciBmcm9tIGFjY2VwdGluZyBcInRydWVcIi9cImZhbHNlXCIgc3RyaW5ncy5cbiAgdGhpbmtpbmc6IHoudW5pb24oW3oubGl0ZXJhbCh0cnVlKSwgei5saXRlcmFsKGZhbHNlKV0pLm9wdGlvbmFsKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB2ZXJib3NpdHk6IFZlcmJvc2l0eS5vcHRpb25hbCgpLFxuICByZWFzb25pbmdTdW1tYXJ5OiBSZWFzb25pbmdTdW1tYXJ5Lm9wdGlvbmFsKCksXG4gIHNlcnZpY2VUaWVyOiBTZXJ2aWNlVGllci5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8vIHJhdy9kYXNoYm9hcmTsmYAg6rO16rCcIEFJIFNESyBwcm92aWRlck9wdGlvbnMucWdyaWQudG9rZW5OYW1l7J20IOqzteycoO2VmOuKlCDsp4DsoJUg7KO87IaMLlxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLy8gU0RLLWRlcml2ZWQgb3BhcXVlIGFmZmluaXR5LiBJdCBpcyBpbnRlbnRpb25hbGx5IGRpc3RpbmN0IGZyb20gdGhlIGNhbGxlcidzIHNlc3Npb25LZXkuXG4gIGNhY2hlQWZmaW5pdHlLZXk6IHpcbiAgICAuc3RyaW5nKClcbiAgICAucmVnZXgoL15bMC05YS1mXXs2NH0kLylcbiAgICAub3B0aW9uYWwoKSxcbiAgLy8g7IOd65617ZWY66m0IOuhnOq5he2VnOuLpC4gZmFsc2XripQgcmVxdWVzdCBsb2cg7JOw6riw66eMIOuBhOqzoCBkaXNwYXRjaC90aHJlYWTripQg7Jyg7KeA7ZWc64ukLlxuICBsb2dnZXI6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dC5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0czogei5hcnJheShRZ3JpZFRvb2xSZXN1bHRJbnB1dCkub3B0aW9uYWwoKSxcbiAgLy8gT3BlbkFJIG9ubHksIG5vbi1zdHJlYW06IHRydWUgcmVxdWlyZXMgYW4gaW1hZ2U7IGF1dG8gcGVybWl0cyB0ZXh0IG9yIG5hdGl2ZSBpbWFnZSB0b29scy5cbiAgaW1hZ2VHZW5lcmF0aW9uOiB6LnVuaW9uKFt6LmJvb2xlYW4oKSwgei5saXRlcmFsKFwiYXV0b1wiKV0pLm9wdGlvbmFsKCksXG4gIC8vIHFncmlkIOqwgOqyqSDstpTsoJUg67CPIENvZGV4IOydtOuvuOyngCDsmpTssq0g7Z6M7Yq4LiDsnbTrr7jsp4Ag66qo64247J2AIGdwdC1pbWFnZS0yIOuhnCDqs6DsoJUg6rCA7KCV7ZWc64ukLlxuICBpbWFnZUdlbmVyYXRpb25PcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFF1ZXJ5SW5wdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeUlucHV0PjtcblxuZXhwb3J0IGNvbnN0IE1vZGVsRmFsbGJhY2sgPSB6Lm9iamVjdCh7XG4gIHRyaWdnZXI6IHoubGl0ZXJhbChcInJlZnVzYWxcIiksXG4gIGZyb21Nb2RlbDogei5zdHJpbmcoKSxcbiAgdG9Nb2RlbDogei5zdHJpbmcoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXhwbGFuYXRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTW9kZWxGYWxsYmFjayA9IHouaW5mZXI8dHlwZW9mIE1vZGVsRmFsbGJhY2s+O1xuXG5leHBvcnQgY29uc3QgQ29zdFNvdXJjZSA9IHouZW51bShbXCJwcm92aWRlclwiLCBcInByaWNpbmdfdGFibGVcIiwgXCJtaXhlZFwiXSk7XG5leHBvcnQgdHlwZSBDb3N0U291cmNlID0gei5pbmZlcjx0eXBlb2YgQ29zdFNvdXJjZT47XG5cbmV4cG9ydCBjb25zdCBRdWVyeU91dHB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRleHQ6IHouc3RyaW5nKCksXG4gIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24sXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbEZhbGxiYWNrczogei5hcnJheShNb2RlbEZhbGxiYWNrKS5vcHRpb25hbCgpLFxuICB1c2FnZTogei5vYmplY3Qoe1xuICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICB9KSxcbiAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlPdXRwdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeU91dHB1dD47XG5cbi8vIOKUgOKUgOKUgCBTdHJlYW0gRXZlbnRzIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3RyZWFtRXZlbnRzID0gei5vYmplY3Qoe1xuICBkZWx0YTogei5vYmplY3QoeyB0ZXh0OiB6LnN0cmluZygpIH0pLFxuICB0b29sQ2FsbDogei5vYmplY3Qoe1xuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBkb25lOiB6Lm9iamVjdCh7XG4gICAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJlcXVlc3RlZE1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbW9kZWxGYWxsYmFja3M6IHouYXJyYXkoTW9kZWxGYWxsYmFjaykub3B0aW9uYWwoKSxcbiAgICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgICB1c2FnZTogei5vYmplY3Qoe1xuICAgICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgICB0dGZ0TXM6IHoubnVtYmVyKCksXG4gICAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICAgIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgfSksXG4gIGVycm9yOiB6Lm9iamVjdCh7IG1lc3NhZ2U6IHouc3RyaW5nKCkgfSksXG59KTtcbmV4cG9ydCB0eXBlIFN0cmVhbUV2ZW50cyA9IHouaW5mZXI8dHlwZW9mIFN0cmVhbUV2ZW50cz47XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgQ3JlYXRlUnVuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHVzZXJQcm9tcHQ6IHouc3RyaW5nKCksXG4gIHN5c3RlbVByb21wdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaXNTdHJ1Y3R1cmVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBqc29uU2NoZW1hOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ3JlYXRlUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBDcmVhdGVSdW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBBcHBlbmRTdGVwSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbiAgc3RlcEluZGV4OiB6Lm51bWJlcigpLFxuICB0eXBlOiB6LmVudW0oW1wiZ2VuZXJhdGVcIiwgXCJ0b29sX2NhbGxcIl0pLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZhbGxiYWNrQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlQ3JlYXRpb241bVRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uMWhUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEFwcGVuZFN0ZXBJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEFwcGVuZFN0ZXBJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBGaW5pc2hSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pLFxuICByZXNwb25zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmYWxsYmFja0NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsSW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxPdXRwdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjVtVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjFoVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZS5vcHRpb25hbCgpLFxuICB0b3RhbER1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlcnJvck1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVzcG9uc2VKc29uT2s6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEZpbmlzaFJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgRmluaXNoUnVuSW5wdXQ+O1xuXG4vLyDilIDilIDilIAgVG9rZW4gTWFuYWdlbWVudCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFRva2VuU3RhdHMgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcmVxdWVzdHM6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIFRva2VuU3RhdHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN0YXRzPjtcblxuLy8g4pSA4pSA4pSAIE9BdXRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgT0F1dGhTdGFydFJlc3VsdCA9IHoub2JqZWN0KHtcbiAgYXV0aFVybDogei5zdHJpbmcoKSxcbiAgLy8gcmVkaXJlY3Q6IOu4jOudvOyasOyggCDsnpDrj5kg67O16reAKOujqO2UhOuwsSDsoJHsho0pLiBjb2RlOiDsvZjshpQg7L2c67CxICsg7L2U65OcIOu2meyXrOuEo+q4sCjsm5Dqsqkg7KCR7IaNKS5cbiAgLy8gT3BlbkFJIOybkOqyqSDqsr3roZzripQg65Ox66Gd65CcIGxvb3BiYWNrIGNhbGxiYWNrIFVSTCDsoITssrTrpbwg67aZ7Jes64Sj64qUIGNvZGUg66qo65Oc66W8IOyTtOuLpC5cbiAgbW9kZTogei5lbnVtKFtcInJlZGlyZWN0XCIsIFwiY29kZVwiXSksXG59KTtcbmV4cG9ydCB0eXBlIE9BdXRoU3RhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBPQXV0aFN0YXJ0UmVzdWx0PjtcblxuY29uc3QgUmF0ZVdpbmRvdyA9IHpcbiAgLm9iamVjdCh7XG4gICAgdXRpbGl6YXRpb246IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICByZXNldHNBdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIHdpbmRvd0R1cmF0aW9uTWluczogei5udW1iZXIoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5udWxsYWJsZSgpO1xuXG5leHBvcnQgY29uc3QgVXNhZ2VSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZml2ZUhvdXI6IFJhdGVXaW5kb3cub3B0aW9uYWwoKSxcbiAgc2V2ZW5EYXk6IFJhdGVXaW5kb3cub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVXNhZ2VSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFVzYWdlUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgSGVhbHRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3Vic2NyaWJlclN0YXR1cyA9IHoub2JqZWN0KHtcbiAgY29ubmVjdGVkOiB6LmJvb2xlYW4oKSxcbiAgY29ubmVjdGVkQXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG4gIGxhc3RSZWNvbmNpbGVBdDogei5kYXRlKCkubnVsbGFibGUoKSxcbiAgYXR0ZW1wdDogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3Vic2NyaWJlclN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIFN1YnNjcmliZXJTdGF0dXM+O1xuXG5leHBvcnQgY29uc3QgUHJvdmlkZXJTdGFydHVwU3RhdGUgPSB6LmVudW0oW1wic3RhcnRpbmdcIiwgXCJyZWFkeVwiLCBcImZhaWxlZFwiXSk7XG5leHBvcnQgdHlwZSBQcm92aWRlclN0YXJ0dXBTdGF0ZSA9IHouaW5mZXI8dHlwZW9mIFByb3ZpZGVyU3RhcnR1cFN0YXRlPjtcblxuZXhwb3J0IGNvbnN0IEhlYWx0aFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouc3RyaW5nKCksXG4gIGFjdGl2ZVRva2Vuczogei5udW1iZXIoKSxcbiAgc3Vic2NyaWJlcjogU3Vic2NyaWJlclN0YXR1cy5udWxsYWJsZSgpLFxuICAvLyBIVFRQIOumrOyKpOuLneydgCBkaXNwYXRjaGVyIOq4sOuPmeuztOuLpCDrqLzsoIAg7Je066aw64ukLiAyMDAg7J2R64u166eM7Jy866Gc64qUIOyalOyyreydhCDsspjrpqztlaAg7IiYXG4gIC8vIOyeiOuKlOyngCDslYwg7IiYIOyXhuyWtCBwcm92aWRlciDrs4Qg7KSA67mEIOyDge2DnOulvCDtlajqu5gg64W47Lac7ZWc64ukLlxuICByZWFkeTogei5ib29sZWFuKCksXG4gIHByb3ZpZGVyczogei5vYmplY3Qoe1xuICAgIG9wZW5haTogUHJvdmlkZXJTdGFydHVwU3RhdGUsXG4gICAgYW50aHJvcGljOiBQcm92aWRlclN0YXJ0dXBTdGF0ZSxcbiAgfSksXG59KTtcbmV4cG9ydCB0eXBlIEhlYWx0aFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgSGVhbHRoUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgRXJyb3JzIOKUgOKUgOKUgFxuXG5leHBvcnQgY2xhc3MgUXVvdGFFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUVVPVEFfRVhIQVVTVEVEXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9USFJFU0hPTERfRVhDRUVERURcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlRJTUVPVVRcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBQcm9jZXNzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlBST0NFU1NfRVJST1JcIiBhcyBjb25zdDtcbn1cblxuLy8g4pSA4pSA4pSAIFV0aWxzIOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gbWFza1Rva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9rZW4ubGVuZ3RoID4gNCA/IGAuLi4ke3Rva2VuLnNsaWNlKC00KX1gIDogdG9rZW47XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBSUEsTUFBYSxTQUFTLEVBQUUsS0FBSztDQUFDO0NBQU87Q0FBVTtBQUFNLENBQUM7QUFHdEQsTUFBYSxZQUFZLEVBQUUsT0FBTztDQUNoQyxNQUFNLEVBQUUsT0FBTztDQUNmLGFB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
541
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcblxuZXhwb3J0IHR5cGUgRWZmb3J0ID0gei5pbmZlcjx0eXBlb2YgRWZmb3J0PjtcblxuZXhwb3J0IGNvbnN0IFFncmlkVG9vbCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaW5wdXRTY2hlbWE6IHoudW5rbm93bigpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFFncmlkVG9vbCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVG9vbD47XG5cbi8vIE9ic2VydmVkIGltYWdlIHJlc3BvbnNlIHZhbHVlcywgZGlzdGluY3QgZnJvbSByZXF1ZXN0ZWQgZ2VuZXJhdGlvbiBoaW50cy5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgcm91dGU6IHouZW51bShbXCJjb2RleC1pbWFnZXNcIiwgXCJjb2RleC1yZXNwb25zZXNcIl0pLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBiYWNrZ3JvdW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHF1YWxpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc2l6ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2FnZTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICB0b3RhbF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgIGlucHV0X3Rva2Vuc19kZXRhaWxzOiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgIGltYWdlX3Rva2Vuczogei5udW1iZXIoKS5ub25uZWdhdGl2ZSgpLFxuICAgICAgICAgIHRleHRfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICAgICAgY2FjaGVkX3Rva2Vuczogei5udW1iZXIoKS5ub25uZWdhdGl2ZSgpLm9wdGlvbmFsKCksXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpLFxuICAgICAgb3V0cHV0X3Rva2Vuc19kZXRhaWxzOiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgIGltYWdlX3Rva2Vuczogei5udW1iZXIoKS5ub25uZWdhdGl2ZSgpLFxuICAgICAgICAgIHRleHRfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YT47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZENvbnRlbnQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidGV4dFwiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRvb2wtY2FsbFwiKSxcbiAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgIHRvb2xOYW1lOiB6LnN0cmluZygpLFxuICAgIGlucHV0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcImltYWdlXCIpLFxuICAgIC8vIEJhc2U2NCBpbWFnZSBieXRlczsgb2xkZXIgcmVzcG9uc2VzIHdpdGhvdXQgbWVkaWFUeXBlIGFyZSBQTkcuXG4gICAgZGF0YTogei5zdHJpbmcoKSxcbiAgICBtZWRpYVR5cGU6IHouZW51bShbXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2Uvd2VicFwiXSkub3B0aW9uYWwoKSxcbiAgICByZXZpc2VkUHJvbXB0OiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBnZW5lcmF0aW9uOiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YS5vcHRpb25hbCgpLFxuICB9KSxcbl0pO1xuXG5leHBvcnQgdHlwZSBRZ3JpZENvbnRlbnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZENvbnRlbnQ+O1xuXG5leHBvcnQgY29uc3QgRmluaXNoUmVhc29uID0gei5lbnVtKFtcInN0b3BcIiwgXCJ0b29sLWNhbGxzXCJdKTtcblxuZXhwb3J0IHR5cGUgRmluaXNoUmVhc29uID0gei5pbmZlcjx0eXBlb2YgRmluaXNoUmVhc29uPjtcblxuZXhwb3J0IGNvbnN0IFZlcmJvc2l0eSA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcblxuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuXG5leHBvcnQgdHlwZSBSZWFzb25pbmdTdW1tYXJ5ID0gei5pbmZlcjx0eXBlb2YgUmVhc29uaW5nU3VtbWFyeT47XG5cbmV4cG9ydCBjb25zdCBTZXJ2aWNlVGllciA9IHouZW51bShbXCJmYXN0XCIsIFwiZmxleFwiXSk7XG5cbmV4cG9ydCB0eXBlIFNlcnZpY2VUaWVyID0gei5pbmZlcjx0eXBlb2YgU2VydmljZVRpZXI+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcblxuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG4vLyBTdWJzY3JpcHRpb24tYmFja2VuZCBoaW50cywgbm90IHB1YmxpYyBJbWFnZXMgQVBJIHJlc29sdXRpb24gZ3VhcmFudGVlcy5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25TaXplID0gei51bmlvbihbXG4gIHoubGl0ZXJhbChcImF1dG9cIiksXG4gIHpcbiAgICAuc3RyaW5nKClcbiAgICAucmVnZXgoL15bMS05XVxcZCp4WzEtOV1cXGQqJC8pXG4gICAgLnJlZmluZShcbiAgICAgIChzaXplKSA9PiBzaXplLnNwbGl0KFwieFwiKS5ldmVyeSgoZWRnZSkgPT4gTnVtYmVyLmlzU2FmZUludGVnZXIoTnVtYmVyKGVkZ2UpKSksXG4gICAgICBcIkltYWdlIGRpbWVuc2lvbnMgbXVzdCBiZSBwb3NpdGl2ZSBzYWZlIGludGVnZXJzXCIsXG4gICAgKSxcbl0pO1xuXG5leHBvcnQgdHlwZSBJbWFnZUdlbmVyYXRpb25TaXplID0gei5pbmZlcjx0eXBlb2YgSW1hZ2VHZW5lcmF0aW9uU2l6ZT47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25PcHRpb25zID0gelxuICAub2JqZWN0KHtcbiAgICBxdWFsaXR5OiBJbWFnZUdlbmVyYXRpb25RdWFsaXR5Lm9wdGlvbmFsKCksXG4gICAgc2l6ZTogSW1hZ2VHZW5lcmF0aW9uU2l6ZS5vcHRpb25hbCgpLFxuICAgIGJhY2tncm91bmQ6IHouZW51bShbXCJhdXRvXCIsIFwib3BhcXVlXCIsIFwidHJhbnNwYXJlbnRcIl0pLm9wdGlvbmFsKCksXG4gICAgb3V0cHV0Rm9ybWF0OiB6LmVudW0oW1wicG5nXCIsIFwianBlZ1wiLCBcIndlYnBcIl0pLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5yZWZpbmUoXG4gICAgKG9wdGlvbnMpID0+XG4gICAgICBvcHRpb25zLmJhY2tncm91bmQgIT09IFwidHJhbnNwYXJlbnRcIiB8fFxuICAgICAgIW9wdGlvbnMub3V0cHV0Rm9ybWF0IHx8XG4gICAgICBvcHRpb25zLm91dHB1dEZvcm1hdCA9PT0gXCJwbmdcIixcbiAgICB7IG1lc3NhZ2U6IFwiVHJhbnNwYXJlbnQgaW1hZ2UgZ2VuZXJhdGlvbiBvbmx5IHN1cHBvcnRzIFBORyBvdXRwdXRcIiwgcGF0aDogW1wib3V0cHV0Rm9ybWF0XCJdIH0sXG4gICk7XG5cbmV4cG9ydCB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25PcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkSW5wdXRQYXJ0ID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICB0ZXh0X2VsZW1lbnRzOiB6LmFycmF5KHoubmV2ZXIoKSkuZGVmYXVsdChbXSksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICB9KSxcbl0pO1xuXG5leHBvcnQgdHlwZSBRZ3JpZElucHV0UGFydCA9IHouaW5mZXI8dHlwZW9mIFFncmlkSW5wdXRQYXJ0PjtcblxuZXhwb3J0IGNvbnN0IE1BWF9RVUVSWV9USU1FT1VUX01TID0gMzAgKiA2MF8wMDA7XG5leHBvcnQgY29uc3QgUXVlcnlUaW1lb3V0TXMgPSB6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkubWF4KE1BWF9RVUVSWV9USU1FT1VUX01TKTtcblxuLy8g4pSA4pSA4pSAIFJ1biBMaWZlY3ljbGUgQ29udGV4dCAoU0RLIOKGlCBTZXJ2ZXIgY29udHJhY3QpIOKUgOKUgOKUgFxuXG4vLyBPcGVuQUkgY2FjaGUgYWZmaW5pdHkg7KKM7ZGcKOq1rCBjb2RleCB0aHJlYWQg7KKM7ZGcKS4gcHJvbXB0X2NhY2hlX2tleSDrpbwg6rOg7KCV7ZW0XG4vLyBPcGVuQUkgcHJvbXB0IGNhY2hpbmcg7J2EIOyCtOumrOq4sCDsnITtlZwg7ZW465OkLiDshJzrsoTqsIAg67Cc6riJ7ZWY6rOgIO2BtOudvOqwgCDri6TsnYwg7JqU7LKt7JeQIOq3uOuMgOuhnCDtmozshqHtlZzri6QuXG4vLyDtlbjrk6Qg66+47KCE7IahIOyLnCDquLDsobQgXCLrp6QgdHVybiDsg4ggdGhyZWFkICsgaGlzdG9yeSBpbmplY3RcIiDrj5nsnpHsnLzroZwg7Y+067CxKFFncmlkUnVuQ29udGV4dCDssLjsobApLlxuZXhwb3J0IGNvbnN0IFFncmlkVGhyZWFkQ29vcmQgPSB6Lm9iamVjdCh7XG4gIHdvcmtlcklkOiB6Lm51bWJlcigpLCAvLyDqs6DsoJUg65287Jqw7YyFICh0aHJlYWQg64qUIHdvcmtlciDtlITroZzshLjsiqQg66mU66qo66as7JeQ66eMIOyhtOyerClcbiAgdGhyZWFkSWQ6IHouc3RyaW5nKCksIC8vIG9wYXF1ZSBjYWNoZSBhZmZpbml0eSBrZXkgPSBwcm9tcHRfY2FjaGVfa2V5XG4gIGVwb2NoOiB6Lm51bWJlcigpLCAvLyB3b3JrZXIgc3Bhd24g7Lm07Jq07YSwLiByZXN0YXJ0IOuhnCB0aHJlYWQg7Kad67CcIOqwkOyngFxuICBzeXN0ZW1IYXNoOiB6LnN0cmluZygpLCAvLyBzeXN0ZW1fcHJvbXB0IO2VtOyLnC4g64uk66W4IOuMgO2ZlCDsmKTsoJHsho0g67Cp7KeAXG59KTtcblxuZXhwb3J0IHR5cGUgUWdyaWRUaHJlYWRDb29yZCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVGhyZWFkQ29vcmQ+O1xuXG5leHBvcnQgY29uc3QgUWdyaWRSdW5Db250ZXh0ID0gei5vYmplY3Qoe1xuICAvLyB0b29sLWNhbGwgcnVu7J2EIOqzhOyGje2VoCDrlYzrp4wg67Cc6riJLiDsnbzrsJgg64yA7ZmU64qUIHRocmVhZENvb3JkIOunjCDsmZXrs7UuXG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0aHJlYWRDb29yZDogUWdyaWRUaHJlYWRDb29yZC5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFFncmlkUnVuQ29udGV4dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkUnVuQ29udGV4dD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0OiB6LnN0cmluZygpLFxuICBpc0Vycm9yOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sUmVzdWx0SW5wdXQ+O1xuXG4vLyBPcGFxdWUgcGVyLXByb3ZpZGVyIG5hbWVzcGFjZXMgZm9yd2FyZGVkIHRvIHRoZSBkaXNwYXRjaGVyLiBPbmx5IGdyb2svKiBtb2RlbHMgcmVhZCBgeGFpYDtcbi8vIG90aGVyIHByb3ZpZGVycyBpZ25vcmUgaXQgKHRoZSBBSSBTREsgYWxyZWFkeSB3YXJucyBhbmQgZHJvcHMgaXQgZm9yIG5vbi1ncm9rIGlkcykuXG5leHBvcnQgY29uc3QgWGFpUXVlcnlQcm92aWRlck9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gIHNlcnZpY2VUaWVyOiB6LmVudW0oW1wiZGVmYXVsdFwiLCBcInByaW9yaXR5XCJdKS5vcHRpb25hbCgpLFxuICBwYXJhbGxlbFRvb2xDYWxsczogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBYYWlRdWVyeVByb3ZpZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFhhaVF1ZXJ5UHJvdmlkZXJPcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5UHJvdmlkZXJPcHRpb25zID0gei5vYmplY3Qoe1xuICB4YWk6IFhhaVF1ZXJ5UHJvdmlkZXJPcHRpb25zLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgUXVlcnlQcm92aWRlck9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBRdWVyeVByb3ZpZGVyT3B0aW9ucz47XG5cbmV4cG9ydCBjb25zdCBYYWlQcm92aWRlck1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBjb3N0SW5Vc2RUaWNrczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb250ZXh0V2luZG93OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgWGFpUHJvdmlkZXJNZXRhZGF0YSA9IHouaW5mZXI8dHlwZW9mIFhhaVByb3ZpZGVyTWV0YWRhdGE+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlQcm92aWRlck1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB4YWk6IFhhaVByb3ZpZGVyTWV0YWRhdGEub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBRdWVyeVByb3ZpZGVyTWV0YWRhdGEgPSB6LmluZmVyPHR5cGVvZiBRdWVyeVByb3ZpZGVyTWV0YWRhdGE+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlJbnB1dCA9IHoubG9vc2VPYmplY3Qoe1xuICBzeXN0ZW06IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvbXB0OiB6LnN0cmluZygpLFxuICBpbnB1dDogei5hcnJheShRZ3JpZElucHV0UGFydCkub3B0aW9uYWwoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGltZW91dDogUXVlcnlUaW1lb3V0TXMub3B0aW9uYWwoKSxcbiAganNvblNjaGVtYTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sczogei5hcnJheShRZ3JpZFRvb2wpLm9wdGlvbmFsKCksXG4gIC8vIEJvb2xlYW4gbGl0ZXJhbHMga2VlcCBTb25hbXUncyBIVFRQIGNhc3RlciBmcm9tIGFjY2VwdGluZyBcInRydWVcIi9cImZhbHNlXCIgc3RyaW5ncy5cbiAgdGhpbmtpbmc6IHoudW5pb24oW3oubGl0ZXJhbCh0cnVlKSwgei5saXRlcmFsKGZhbHNlKV0pLm9wdGlvbmFsKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB2ZXJib3NpdHk6IFZlcmJvc2l0eS5vcHRpb25hbCgpLFxuICByZWFzb25pbmdTdW1tYXJ5OiBSZWFzb25pbmdTdW1tYXJ5Lm9wdGlvbmFsKCksXG4gIHNlcnZpY2VUaWVyOiBTZXJ2aWNlVGllci5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8vIHJhdy9kYXNoYm9hcmTsmYAg6rO16rCcIEFJIFNESyBwcm92aWRlck9wdGlvbnMucWdyaWQudG9rZW5OYW1l7J20IOqzteycoO2VmOuKlCDsp4DsoJUg7KO87IaMLlxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLy8gU0RLLWRlcml2ZWQgb3BhcXVlIGFmZmluaXR5LiBJdCBpcyBpbnRlbnRpb25hbGx5IGRpc3RpbmN0IGZyb20gdGhlIGNhbGxlcidzIHNlc3Npb25LZXkuXG4gIGNhY2hlQWZmaW5pdHlLZXk6IHpcbiAgICAuc3RyaW5nKClcbiAgICAucmVnZXgoL15bMC05YS1mXXs2NH0kLylcbiAgICAub3B0aW9uYWwoKSxcbiAgLy8g7IOd65617ZWY66m0IOuhnOq5he2VnOuLpC4gZmFsc2XripQgcmVxdWVzdCBsb2cg7JOw6riw66eMIOuBhOqzoCBkaXNwYXRjaC90aHJlYWTripQg7Jyg7KeA7ZWc64ukLlxuICBsb2dnZXI6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dC5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0czogei5hcnJheShRZ3JpZFRvb2xSZXN1bHRJbnB1dCkub3B0aW9uYWwoKSxcbiAgLy8gT3BlbkFJIG9ubHksIG5vbi1zdHJlYW06IHRydWUgcmVxdWlyZXMgYW4gaW1hZ2U7IGF1dG8gcGVybWl0cyB0ZXh0IG9yIG5hdGl2ZSBpbWFnZSB0b29scy5cbiAgaW1hZ2VHZW5lcmF0aW9uOiB6LnVuaW9uKFt6LmJvb2xlYW4oKSwgei5saXRlcmFsKFwiYXV0b1wiKV0pLm9wdGlvbmFsKCksXG4gIC8vIHFncmlkIOqwgOqyqSDstpTsoJUg67CPIENvZGV4IOydtOuvuOyngCDsmpTssq0g7Z6M7Yq4LiDsnbTrr7jsp4Ag66qo64247J2AIGdwdC1pbWFnZS0yIOuhnCDqs6DsoJUg6rCA7KCV7ZWc64ukLlxuICBpbWFnZUdlbmVyYXRpb25PcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zLm9wdGlvbmFsKCksXG4gIHByb3ZpZGVyT3B0aW9uczogUXVlcnlQcm92aWRlck9wdGlvbnMub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBRdWVyeUlucHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBNb2RlbEZhbGxiYWNrID0gei5vYmplY3Qoe1xuICB0cmlnZ2VyOiB6LmxpdGVyYWwoXCJyZWZ1c2FsXCIpLFxuICBmcm9tTW9kZWw6IHouc3RyaW5nKCksXG4gIHRvTW9kZWw6IHouc3RyaW5nKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4cGxhbmF0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgTW9kZWxGYWxsYmFjayA9IHouaW5mZXI8dHlwZW9mIE1vZGVsRmFsbGJhY2s+O1xuXG5leHBvcnQgY29uc3QgQ29zdFNvdXJjZSA9IHouZW51bShbXCJwcm92aWRlclwiLCBcInByaWNpbmdfdGFibGVcIiwgXCJtaXhlZFwiXSk7XG5cbmV4cG9ydCB0eXBlIENvc3RTb3VyY2UgPSB6LmluZmVyPHR5cGVvZiBDb3N0U291cmNlPjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5T3V0cHV0ID0gei5vYmplY3Qoe1xuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdGV4dDogei5zdHJpbmcoKSxcbiAgY29udGVudDogei5hcnJheShRZ3JpZENvbnRlbnQpLFxuICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGVsRmFsbGJhY2tzOiB6LmFycmF5KE1vZGVsRmFsbGJhY2spLm9wdGlvbmFsKCksXG4gIHVzYWdlOiB6Lm9iamVjdCh7XG4gICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgcmVhc29uaW5nX3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25fNW1faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgY2FjaGVfY3JlYXRpb25fMWhfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gIH0pLFxuICBkdXJhdGlvbk1zOiB6Lm51bWJlcigpLFxuICB0dGZ0TXM6IHoubnVtYmVyKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCksXG4gIGNvc3RTb3VyY2U6IENvc3RTb3VyY2UsXG4gIHByb3ZpZGVyTWV0YWRhdGE6IFF1ZXJ5UHJvdmlkZXJNZXRhZGF0YS5vcHRpb25hbCgpLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBRdWVyeU91dHB1dCA9IHouaW5mZXI8dHlwZW9mIFF1ZXJ5T3V0cHV0PjtcblxuLy8g4pSA4pSA4pSAIFN0cmVhbSBFdmVudHMg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBTdHJlYW1FdmVudHMgPSB6Lm9iamVjdCh7XG4gIGRlbHRhOiB6Lm9iamVjdCh7IHRleHQ6IHouc3RyaW5nKCkgfSksXG4gIHRvb2xDYWxsOiB6Lm9iamVjdCh7XG4gICAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgICB0b29sTmFtZTogei5zdHJpbmcoKSxcbiAgICBpbnB1dDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGRvbmU6IHoub2JqZWN0KHtcbiAgICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICAgIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcmVxdWVzdGVkTW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBtb2RlbEZhbGxiYWNrczogei5hcnJheShNb2RlbEZhbGxiYWNrKS5vcHRpb25hbCgpLFxuICAgIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGZpbmlzaFJlYXNvbjogRmluaXNoUmVhc29uLFxuICAgIHVzYWdlOiB6Lm9iamVjdCh7XG4gICAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgcmVhc29uaW5nX3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgICAgY2FjaGVfY3JlYXRpb25fMWhfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICB9KSxcbiAgICBkdXJhdGlvbk1zOiB6Lm51bWJlcigpLFxuICAgIHR0ZnRNczogei5udW1iZXIoKSxcbiAgICBjb3N0VXNkOiB6Lm51bWJlcigpLFxuICAgIGNvc3RTb3VyY2U6IENvc3RTb3VyY2UsXG4gICAgcHJvdmlkZXJNZXRhZGF0YTogUXVlcnlQcm92aWRlck1ldGFkYXRhLm9wdGlvbmFsKCksXG4gICAgY29udGVudDogei5hcnJheShRZ3JpZENvbnRlbnQpLFxuICAgIHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dC5vcHRpb25hbCgpLFxuICB9KSxcbiAgZXJyb3I6IHoub2JqZWN0KHsgbWVzc2FnZTogei5zdHJpbmcoKSB9KSxcbn0pO1xuXG5leHBvcnQgdHlwZSBTdHJlYW1FdmVudHMgPSB6LmluZmVyPHR5cGVvZiBTdHJlYW1FdmVudHM+O1xuXG4vLyAtLS0gR3JvayBtZWRpYSBhbmQgdm9pY2UgLS0tXG5cbmNvbnN0IE1pQiA9IDEwMjQgKiAxMDI0O1xuXG4vLyBGYXN0aWZ5IGJvZHlMaW1pdCBmb3IgZXZlcnkgSlNPTiByZXF1ZXN0OyBzb25hbXUuY29uZmlnLnRzIHJlYWRzIGl0IGZyb20gaGVyZS5cbmV4cG9ydCBjb25zdCBSRVFVRVNUX0JPRFlfTElNSVRfQllURVMgPSAxMCAqIE1pQjtcblxuLy8gTWVkaWEgcmlkZXMgaW5zaWRlIHRoYXQgSlNPTiBib2R5IGFzIGJhc2U2NCAoNCBjaGFycyBwZXIgMyBieXRlcyksIHNvIGEgMTAgTWlCIGJvZHkgY2FycmllcyBhdFxuLy8gbW9zdCAxMCBNaUIgeCAzLzQgPSA3LjUgTWlCIG9mIGRlY29kZWQgYnl0ZXM7IDAuNSBNaUIgaXMgbGVmdCBmb3IgdGhlIHByb21wdCwgb3B0aW9ucyBhbmQgSlNPTlxuLy8gZnJhbWluZy4gVGhlIHNhbWUgYnVkZ2V0IGJvdW5kcyB0aGUgYXVkaW8gY2xpcCwgZWFjaCBpbmxpbmUgaW1hZ2UsIGFuZCB0aGUgc3VtIG9mIGEgcmVxdWVzdCdzXG4vLyBpbmxpbmUgaW1hZ2VzLCBzbyBldmVyeSByZXF1ZXN0IHRoZSBzY2hlbWEgYWNjZXB0cyBhbHNvIGZpdHMgdGhlIHRyYW5zcG9ydC5cbmV4cG9ydCBjb25zdCBNRURJQV9NQVhfSU5MSU5FX0JZVEVTID0gNyAqIE1pQjtcbmNvbnN0IE1FRElBX01BWF9JTkxJTkVfTEFCRUwgPSBgJHtNRURJQV9NQVhfSU5MSU5FX0JZVEVTIC8gTWlCfSBNaUJgO1xuZXhwb3J0IGNvbnN0IE1FRElBX01BWF9SRUZFUkVOQ0VfSU1BR0VTID0gNTtcblxuY29uc3QgSU1BR0VfREFUQV9VUkwgPSAvXmRhdGE6KGltYWdlXFwvKD86cG5nfGpwZWd8d2VicCkpO2Jhc2U2NCwoW0EtWmEtejAtOSsvXSo9ezAsMn0pJC87XG5jb25zdCBCQVNFNjQgPSAvXltBLVphLXowLTkrL10qPXswLDJ9JC87XG5cbmZ1bmN0aW9uIGJhc2U2NERlY29kZWRCeXRlcyhkYXRhOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBwYWRkaW5nID0gZGF0YS5lbmRzV2l0aChcIj09XCIpID8gMiA6IGRhdGEuZW5kc1dpdGgoXCI9XCIpID8gMSA6IDA7XG5cbiAgcmV0dXJuIE1hdGguZmxvb3IoKGRhdGEubGVuZ3RoICogMykgLyA0KSAtIHBhZGRpbmc7XG59XG5cbi8qKiBEZWNvZGVkIGJ5dGVzIG9mIHRoZSBpbmxpbmUgKGRhdGEgVVJMKSBpbWFnZXMgYW1vbmcgYHJlZnNgOyBodHRwcyBVUkxzIGNvc3Qgbm90aGluZyBoZXJlLiAqL1xuZnVuY3Rpb24gaW5saW5lSW1hZ2VCeXRlcyhyZWZzOiBSZWFkb25seUFycmF5PHN0cmluZyB8IHVuZGVmaW5lZD4pOiBudW1iZXIge1xuICBsZXQgdG90YWwgPSAwO1xuXG4gIGZvciAoY29uc3QgcmVmIG9mIHJlZnMpIHtcbiAgICBjb25zdCBtYXRjaCA9IHJlZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IElNQUdFX0RBVEFfVVJMLmV4ZWMocmVmKTtcblxuICAgIGlmIChtYXRjaCkgdG90YWwgKz0gYmFzZTY0RGVjb2RlZEJ5dGVzKG1hdGNoWzJdISk7XG4gIH1cblxuICByZXR1cm4gdG90YWw7XG59XG5cbmNvbnN0IElOTElORV9JTUFHRVNfVE9UQUxfTUVTU0FHRSA9IGBpbmxpbmUgaW1hZ2VzIGV4Y2VlZCAke01FRElBX01BWF9JTkxJTkVfTEFCRUx9IGluIHRvdGFsYDtcblxuZnVuY3Rpb24gaXNIdHRwc1VybCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBVUkwodmFsdWUpLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gQW4gaHR0cHMgVVJMIChmZXRjaGVkIGJ5IHhBSSwgbmV2ZXIgYnkgcWdyaWQpIG9yIGEgYmFzZTY0IGltYWdlIGRhdGEgVVJMIHdpdGhpblxuLy8gTUVESUFfTUFYX0lOTElORV9CWVRFUy5cbmV4cG9ydCBjb25zdCBNZWRpYUltYWdlUmVmID0gelxuICAuc3RyaW5nKClcbiAgLm1pbigxKVxuICAuc3VwZXJSZWZpbmUoKHZhbHVlLCBjdHgpID0+IHtcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcImRhdGE6XCIpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IElNQUdFX0RBVEFfVVJMLmV4ZWModmFsdWUpO1xuXG4gICAgICBpZiAoIW1hdGNoIHx8IG1hdGNoWzJdIS5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgICBtZXNzYWdlOiBcImltYWdlIGRhdGEgVVJMcyBtdXN0IGJlIGJhc2U2NCBpbWFnZS9wbmcsIGltYWdlL2pwZWcgb3IgaW1hZ2Uvd2VicFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYmFzZTY0RGVjb2RlZEJ5dGVzKG1hdGNoWzJdISkgPiBNRURJQV9NQVhfSU5MSU5FX0JZVEVTKSB7XG4gICAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgICBtZXNzYWdlOiBgaW1hZ2UgZGF0YSBVUkwgZXhjZWVkcyAke01FRElBX01BWF9JTkxJTkVfTEFCRUx9YCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWlzSHR0cHNVcmwodmFsdWUpKSB7XG4gICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiBcImN1c3RvbVwiLCBtZXNzYWdlOiBcImltYWdlIFVSTHMgbXVzdCB1c2UgaHR0cHMgb3IgYSBkYXRhIFVSTFwiIH0pO1xuICAgIH1cbiAgfSk7XG5cbmNvbnN0IEdyb2tNb2RlbElkID0gei5zdHJpbmcoKS5yZWdleCgvXmdyb2tcXC9bQS1aYS16MC05Ll8tXSskLywgXCJtb2RlbCBtdXN0IGJlIGdyb2svPGlkPlwiKTtcblxuY29uc3QgTWVkaWFDYWxsT3B0aW9ucyA9IHtcbiAgLy8gRXhhY3QgdG9rZW4gYWRkcmVzcyAoZ3Jvay88bmFtZT4pLCBzYW1lIGNvbnRyYWN0IGFzIFF1ZXJ5SW5wdXQudG9rZW5OYW1lLlxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvamVjdE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLy8gZmFsc2Ugd3JpdGVzIG5vIHJlcXVlc3QgbG9nLCBhcyBmb3IgcXVlcnkuXG4gIGxvZ2dlcjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn07XG5cbmV4cG9ydCBjb25zdCBHZW5lcmF0ZUltYWdlc0lucHV0ID0gelxuICAub2JqZWN0KHtcbiAgICBtb2RlbDogR3Jva01vZGVsSWQsXG4gICAgcHJvbXB0OiB6LnN0cmluZygpLm1pbigxKSxcbiAgICBuOiB6Lm51bWJlcigpLmludCgpLm1pbigxKS5tYXgoMykub3B0aW9uYWwoKSxcbiAgICBhc3BlY3RSYXRpbzogei5zdHJpbmcoKS5taW4oMSkubWF4KDE2KS5vcHRpb25hbCgpLFxuICAgIHJlc29sdXRpb246IHouc3RyaW5nKCkubWluKDEpLm1heCgxNikub3B0aW9uYWwoKSxcbiAgICBxdWFsaXR5OiB6LnN0cmluZygpLm1pbigxKS5tYXgoMTYpLm9wdGlvbmFsKCksXG4gICAgb3V0cHV0Rm9ybWF0OiB6LmVudW0oW1wicG5nXCIsIFwianBlZ1wiLCBcIndlYnBcIl0pLm9wdGlvbmFsKCksXG4gICAgLy8gUHJlc2VudDogL2ltYWdlcy9lZGl0cyB3aXRoIHRoZXNlIHJlZmVyZW5jZXM7IGFic2VudDogL2ltYWdlcy9nZW5lcmF0aW9ucy5cbiAgICByZWZlcmVuY2VJbWFnZXM6IHouYXJyYXkoTWVkaWFJbWFnZVJlZikubWluKDEpLm1heChNRURJQV9NQVhfUkVGRVJFTkNFX0lNQUdFUykub3B0aW9uYWwoKSxcbiAgICAuLi5NZWRpYUNhbGxPcHRpb25zLFxuICB9KVxuICAucmVmaW5lKChpbnB1dCkgPT4gaW5saW5lSW1hZ2VCeXRlcyhpbnB1dC5yZWZlcmVuY2VJbWFnZXMgPz8gW10pIDw9IE1FRElBX01BWF9JTkxJTkVfQllURVMsIHtcbiAgICBtZXNzYWdlOiBJTkxJTkVfSU1BR0VTX1RPVEFMX01FU1NBR0UsXG4gICAgcGF0aDogW1wicmVmZXJlbmNlSW1hZ2VzXCJdLFxuICB9KTtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdGVJbWFnZXNJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEdlbmVyYXRlSW1hZ2VzSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgTWVkaWFDb3N0U291cmNlID0gei5lbnVtKFtcInByb3ZpZGVyXCIsIFwicHJpY2luZ190YWJsZVwiXSk7XG5cbmV4cG9ydCB0eXBlIE1lZGlhQ29zdFNvdXJjZSA9IHouaW5mZXI8dHlwZW9mIE1lZGlhQ29zdFNvdXJjZT47XG5cbmV4cG9ydCBjb25zdCBHZW5lcmF0ZUltYWdlc091dHB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCksXG4gIGltYWdlczogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBiNjQ6IHouc3RyaW5nKCksXG4gICAgICBtaW1lVHlwZTogei5zdHJpbmcoKSxcbiAgICAgIHJldmlzZWRQcm9tcHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgKSxcbiAgdXNhZ2U6IHoub2JqZWN0KHtcbiAgICBpbWFnZUNvdW50OiB6Lm51bWJlcigpLFxuICAgIGNvc3RJblVzZFRpY2tzOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pLFxuICAvLyBBYnNlbnQgd2hlbiB4QUkgcmVwb3J0ZWQgbm8gY29zdCBhbmQgdGhlIG1vZGVsIGhhcyBubyBjYXRhbG9nIHByaWNlLlxuICBjb3N0VXNkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RTb3VyY2U6IE1lZGlhQ29zdFNvdXJjZS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlSW1hZ2VzT3V0cHV0ID0gei5pbmZlcjx0eXBlb2YgR2VuZXJhdGVJbWFnZXNPdXRwdXQ+O1xuXG5leHBvcnQgY29uc3QgVmlkZW9TdGFydElucHV0ID0gelxuICAub2JqZWN0KHtcbiAgICBtb2RlbDogR3Jva01vZGVsSWQsXG4gICAgcHJvbXB0OiB6LnN0cmluZygpLm1pbigxKSxcbiAgICBkdXJhdGlvbjogei5udW1iZXIoKS5pbnQoKS5taW4oMSkubWF4KDE1KS5vcHRpb25hbCgpLFxuICAgIGFzcGVjdFJhdGlvOiB6LnN0cmluZygpLm1pbigxKS5tYXgoMTYpLm9wdGlvbmFsKCksXG4gICAgcmVzb2x1dGlvbjogei5lbnVtKFtcIjQ4MHBcIiwgXCI3MjBwXCIsIFwiMTA4MHBcIl0pLm9wdGlvbmFsKCksXG4gICAgaW1hZ2U6IE1lZGlhSW1hZ2VSZWYub3B0aW9uYWwoKSxcbiAgICBsYXN0RnJhbWU6IE1lZGlhSW1hZ2VSZWYub3B0aW9uYWwoKSxcbiAgICByZWZlcmVuY2VJbWFnZXM6IHouYXJyYXkoTWVkaWFJbWFnZVJlZikubWluKDEpLm1heChNRURJQV9NQVhfUkVGRVJFTkNFX0lNQUdFUykub3B0aW9uYWwoKSxcbiAgICAvLyBlZGl0LXZpZGVvIGFuZCBleHRlbmQtdmlkZW8gbmVlZCBhIHNvdXJjZSB2aWRlbywgd2hpY2ggcWdyaWQgZG9lcyBub3QgYWNjZXB0LlxuICAgIG1vZGU6IHouZW51bShbXCJyZWZlcmVuY2UtdG8tdmlkZW9cIl0pLm9wdGlvbmFsKCksXG4gICAgLi4uTWVkaWFDYWxsT3B0aW9ucyxcbiAgfSlcbiAgLnJlZmluZSgoaW5wdXQpID0+IGlucHV0Lm1vZGUgIT09IFwicmVmZXJlbmNlLXRvLXZpZGVvXCIgfHwgaW5wdXQucmVmZXJlbmNlSW1hZ2VzICE9PSB1bmRlZmluZWQsIHtcbiAgICBtZXNzYWdlOiBcInJlZmVyZW5jZS10by12aWRlbyBuZWVkcyBhdCBsZWFzdCBvbmUgcmVmZXJlbmNlSW1hZ2VzIGVudHJ5XCIsXG4gICAgcGF0aDogW1wicmVmZXJlbmNlSW1hZ2VzXCJdLFxuICB9KVxuICAvLyBFdmVyeSBpbmxpbmUgaW1hZ2Ugc2hhcmVzIHRoZSBvbmUgcmVxdWVzdCBib2R5LlxuICAucmVmaW5lKFxuICAgIChpbnB1dCkgPT5cbiAgICAgIGlubGluZUltYWdlQnl0ZXMoW2lucHV0LmltYWdlLCBpbnB1dC5sYXN0RnJhbWUsIC4uLihpbnB1dC5yZWZlcmVuY2VJbWFnZXMgPz8gW10pXSkgPD1cbiAgICAgIE1FRElBX01BWF9JTkxJTkVfQllURVMsXG4gICAgeyBtZXNzYWdlOiBJTkxJTkVfSU1BR0VTX1RPVEFMX01FU1NBR0UsIHBhdGg6IFtcInJlZmVyZW5jZUltYWdlc1wiXSB9LFxuICApO1xuXG5leHBvcnQgdHlwZSBWaWRlb1N0YXJ0SW5wdXQgPSB6LmluZmVyPHR5cGVvZiBWaWRlb1N0YXJ0SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgVmlkZW9TdGFydE91dHB1dCA9IHoub2JqZWN0KHtcbiAgLy8gVW5ndWVzc2FibGUgc2VydmVyLXNpZGUgaGFuZGxlOyBwb2xsaW5nIG11c3QgcHJlc2VudCB0aGUgc2FtZSBwcm9qZWN0TmFtZSBhcyB0aGUgc3RhcnQuXG4gIGpvYkhhbmRsZTogei5zdHJpbmcoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCksXG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFZpZGVvU3RhcnRPdXRwdXQgPSB6LmluZmVyPHR5cGVvZiBWaWRlb1N0YXJ0T3V0cHV0PjtcblxuZXhwb3J0IGNvbnN0IFZpZGVvU3RhdHVzSW5wdXQgPSB6Lm9iamVjdCh7XG4gIGpvYkhhbmRsZTogei5zdHJpbmcoKS5yZWdleCgvXltBLVphLXowLTlfLV17MjJ9JC8pLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFZpZGVvU3RhdHVzSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBWaWRlb1N0YXR1c0lucHV0PjtcblxuZXhwb3J0IGNvbnN0IFZpZGVvU3RhdHVzT3V0cHV0ID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJwZW5kaW5nXCIsIFwiZG9uZVwiLCBcImZhaWxlZFwiXSksXG4gIC8vIFRoZSB1cHN0cmVhbSBhcGkueC5haSBVUkwsIHJldHVybmVkIHVuY2hhbmdlZDsgcWdyaWQgbmV2ZXIgZmV0Y2hlcyBvciBzdG9yZXMgdGhlIHZpZGVvLlxuICB1cmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbWltZVR5cGU6IHoubGl0ZXJhbChcInZpZGVvL21wNFwiKSxcbiAgZHVyYXRpb25TZWM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdEluVXNkVGlja3M6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBWaWRlb1N0YXR1c091dHB1dCA9IHouaW5mZXI8dHlwZW9mIFZpZGVvU3RhdHVzT3V0cHV0PjtcblxuZXhwb3J0IGNvbnN0IFRyYW5zY3JpYmVJbnB1dCA9IHoub2JqZWN0KHtcbiAgbW9kZWw6IEdyb2tNb2RlbElkLm9wdGlvbmFsKCksXG4gIC8vIEJhc2U2NCBhdWRpbyBieXRlcyAobm8gZGF0YTogcHJlZml4KSwgYXQgbW9zdCBNRURJQV9NQVhfSU5MSU5FX0JZVEVTIGRlY29kZWQuXG4gIGF1ZGlvOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm1pbigxKVxuICAgIC5yZWZpbmUoKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggJSA0ID09PSAwICYmIEJBU0U2NC50ZXN0KHZhbHVlKSwgXCJhdWRpbyBtdXN0IGJlIGJhc2U2NFwiKVxuICAgIC5yZWZpbmUoXG4gICAgICAodmFsdWUpID0+IGJhc2U2NERlY29kZWRCeXRlcyh2YWx1ZSkgPD0gTUVESUFfTUFYX0lOTElORV9CWVRFUyxcbiAgICAgIGBhdWRpbyBleGNlZWRzICR7TUVESUFfTUFYX0lOTElORV9MQUJFTH1gLFxuICAgICksXG4gIG1lZGlhVHlwZTogei5zdHJpbmcoKS5yZWdleCgvXmF1ZGlvXFwvW0EtWmEtejAtOS4rLV0rJC8sIFwibWVkaWFUeXBlIG11c3QgYmUgYXVkaW8vKlwiKSxcbiAgbGFuZ3VhZ2U6IHouc3RyaW5nKCkubWluKDEpLm1heCgxNikub3B0aW9uYWwoKSxcbiAgLi4uTWVkaWFDYWxsT3B0aW9ucyxcbn0pO1xuXG5leHBvcnQgdHlwZSBUcmFuc2NyaWJlSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBUcmFuc2NyaWJlSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgVHJhbnNjcmliZU91dHB1dCA9IHoub2JqZWN0KHtcbiAgdGV4dDogei5zdHJpbmcoKSxcbiAgbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZHVyYXRpb25TZWM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCksXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKSxcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgVHJhbnNjcmliZU91dHB1dCA9IHouaW5mZXI8dHlwZW9mIFRyYW5zY3JpYmVPdXRwdXQ+O1xuXG5leHBvcnQgY29uc3QgU3BlYWtJbnB1dCA9IHoub2JqZWN0KHtcbiAgbW9kZWw6IEdyb2tNb2RlbElkLm9wdGlvbmFsKCksXG4gIHRleHQ6IHouc3RyaW5nKCkubWluKDEpLm1heCgxNV8wMDApLFxuICB2b2ljZTogei5zdHJpbmcoKS5taW4oMSkubWF4KDY0KS5vcHRpb25hbCgpLFxuICBsYW5ndWFnZTogei5zdHJpbmcoKS5taW4oMSkubWF4KDE2KS5vcHRpb25hbCgpLFxuICBmb3JtYXQ6IHouZW51bShbXCJtcDNcIiwgXCJ3YXZcIiwgXCJwY21cIiwgXCJtdWxhd1wiLCBcImFsYXdcIl0pLm9wdGlvbmFsKCksXG4gIC4uLk1lZGlhQ2FsbE9wdGlvbnMsXG59KTtcblxuZXhwb3J0IHR5cGUgU3BlYWtJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFNwZWFrSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgU3BlYWtPdXRwdXQgPSB6Lm9iamVjdCh7XG4gIC8vIEJhc2U2NCBhdWRpbyBieXRlcy5cbiAgYXVkaW86IHouc3RyaW5nKCksXG4gIG1pbWVUeXBlOiB6LnN0cmluZygpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCksXG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFNwZWFrT3V0cHV0ID0gei5pbmZlcjx0eXBlb2YgU3BlYWtPdXRwdXQ+O1xuXG4vLyDilIDilIDilIAgUnVuIExpZmVjeWNsZSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IENyZWF0ZVJ1bklucHV0ID0gei5vYmplY3Qoe1xuICB1c2VyUHJvbXB0OiB6LnN0cmluZygpLFxuICBzeXN0ZW1Qcm9tcHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlzU3RydWN0dXJlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAganNvblNjaGVtYTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBDcmVhdGVSdW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBBcHBlbmRTdGVwSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbiAgc3RlcEluZGV4OiB6Lm51bWJlcigpLFxuICB0eXBlOiB6LmVudW0oW1wiZ2VuZXJhdGVcIiwgXCJ0b29sX2NhbGxcIl0pLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZhbGxiYWNrQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlQ3JlYXRpb241bVRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uMWhUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgQXBwZW5kU3RlcElucHV0ID0gei5pbmZlcjx0eXBlb2YgQXBwZW5kU3RlcElucHV0PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJ1bklucHV0ID0gei5vYmplY3Qoe1xuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCksXG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2NlZWRlZFwiLCBcImVycm9yXCIsIFwiYWJvcnRlZFwiXSksXG4gIHJlc3BvbnNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZhbGxiYWNrQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxJbnB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbE91dHB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlQ3JlYXRpb25Ub2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uNW1Ub2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uMWhUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLm9wdGlvbmFsKCksXG4gIHRvdGFsRHVyYXRpb25Nczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVycm9yTWVzc2FnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXNwb25zZUpzb25Pazogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBGaW5pc2hSdW5JbnB1dCA9IHouaW5mZXI8dHlwZW9mIEZpbmlzaFJ1bklucHV0PjtcblxuLy8g4pSA4pSA4pSAIFRva2VuIE1hbmFnZW1lbnQg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBUb2tlblN0YXRzID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHJlcXVlc3RzOiB6Lm51bWJlcigpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFRva2VuU3RhdHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN0YXRzPjtcblxuLy8g4pSA4pSA4pSAIE9BdXRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgT0F1dGhTdGFydFJlc3VsdCA9IHoub2JqZWN0KHtcbiAgYXV0aFVybDogei5zdHJpbmcoKSxcbiAgLy8gcmVkaXJlY3Q6IOu4jOudvOyasOyggCDsnpDrj5kg67O16reAKOujqO2UhOuwsSDsoJHsho0pLiBjb2RlOiDsvZjshpQg7L2c67CxICsg7L2U65OcIOu2meyXrOuEo+q4sCjsm5Dqsqkg7KCR7IaNKS5cbiAgLy8gT3BlbkFJIOybkOqyqSDqsr3roZzripQg65Ox66Gd65CcIGxvb3BiYWNrIGNhbGxiYWNrIFVSTCDsoITssrTrpbwg67aZ7Jes64Sj64qUIGNvZGUg66qo65Oc66W8IOyTtOuLpC5cbiAgbW9kZTogei5lbnVtKFtcInJlZGlyZWN0XCIsIFwiY29kZVwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgT0F1dGhTdGFydFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIE9BdXRoU3RhcnRSZXN1bHQ+O1xuXG4vLyBHcm9rIGRldmljZS1jb2RlIGxvZ2luIChSRkMgODYyOCkuIFRoZSB3ZWIgc2hvd3MgdXNlckNvZGUvdmVyaWZpY2F0aW9uVXJpIGFuZCBwb2xsc1xuLy8gb2F1dGhQb2xsR3Jva0RldmljZSBldmVyeSBgaW50ZXJ2YWxgIHNlY29uZHMgdW50aWwgYGFkZGVkYCBvciBhbiBlcnJvci5cbmV4cG9ydCBjb25zdCBHcm9rRGV2aWNlQ29kZVN0YXJ0ID0gei5vYmplY3Qoe1xuICBkZXZpY2VDb2RlOiB6LnN0cmluZygpLFxuICB1c2VyQ29kZTogei5zdHJpbmcoKSxcbiAgdmVyaWZpY2F0aW9uVXJpOiB6LnN0cmluZygpLFxuICB2ZXJpZmljYXRpb25VcmlDb21wbGV0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleHBpcmVzSW46IHoubnVtYmVyKCksXG4gIGludGVydmFsOiB6Lm51bWJlcigpLFxufSk7XG5cbmV4cG9ydCB0eXBlIEdyb2tEZXZpY2VDb2RlU3RhcnQgPSB6LmluZmVyPHR5cGVvZiBHcm9rRGV2aWNlQ29kZVN0YXJ0PjtcblxuZXhwb3J0IGNvbnN0IEdyb2tEZXZpY2VQb2xsUmVzdWx0ID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJwZW5kaW5nXCIsIFwic2xvd19kb3duXCIsIFwiYWRkZWRcIl0pLFxuICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8vIFNlY29uZHMgdG8gd2FpdCBiZWZvcmUgdGhlIG5leHQgcG9sbDsgZ3Jvd3Mgb24gc2xvd19kb3duLlxuICBpbnRlcnZhbFNlYzogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCB0eXBlIEdyb2tEZXZpY2VQb2xsUmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgR3Jva0RldmljZVBvbGxSZXN1bHQ+O1xuXG5jb25zdCBSYXRlV2luZG93ID0gelxuICAub2JqZWN0KHtcbiAgICB1dGlsaXphdGlvbjogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgIHJlc2V0c0F0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgd2luZG93RHVyYXRpb25NaW5zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLm51bGxhYmxlKCk7XG5cbmV4cG9ydCBjb25zdCBVc2FnZVJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmaXZlSG91cjogUmF0ZVdpbmRvdy5vcHRpb25hbCgpLFxuICBzZXZlbkRheTogUmF0ZVdpbmRvdy5vcHRpb25hbCgpLFxuICAvLyBHcm9rOiBiaWxsaW5nIHBlcmlvZCBsYWJlbCAoVVNBR0VfUEVSSU9EX1RZUEVfV0VFS0xZfE1PTlRITFkpOyB0aGUgd2luZG93IGl0c2VsZiBpcyBpbiBzZXZlbkRheS5cbiAgcGVyaW9kVHlwZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIHRpZXI6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICAvLyBHcm9rIEQ2OiBvbi1kZW1hbmQgYmlsbGluZyBlbmFibGVkIGF0IHhBSSBleGNsdWRlcyB0aGUgdG9rZW4gZnJvbSByb3V0aW5nLlxuICBvbkRlbWFuZEV4Y2x1ZGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvLyBHcm9rOiBaZXJvIERhdGEgUmV0ZW50aW9uIGF0IHhBSSBleGNsdWRlcyB0aGUgdG9rZW4gZnJvbSB2aWRlbyBvbmx5IChwbGFuIMKnMTEpLlxuICB6ZHJWaWRlb0V4Y2x1ZGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvLyBHcm9rOiB0b2tlbi13aW5kb3cga2VlcGFsaXZlIGRvZXMgbm90IGFwcGx5OyB0aGUgVUkgc2F5cyBzby5cbiAga2VlcGFsaXZlQXBwbGljYWJsZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBVc2FnZVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgVXNhZ2VSZXNwb25zZT47XG5cbi8vIOKUgOKUgOKUgCBIZWFsdGgg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBTdWJzY3JpYmVyU3RhdHVzID0gei5vYmplY3Qoe1xuICBjb25uZWN0ZWQ6IHouYm9vbGVhbigpLFxuICBjb25uZWN0ZWRBdDogei5kYXRlKCkubnVsbGFibGUoKSxcbiAgbGFzdFJlY29uY2lsZUF0OiB6LmRhdGUoKS5udWxsYWJsZSgpLFxuICBhdHRlbXB0OiB6Lm51bWJlcigpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmliZXJTdGF0dXMgPSB6LmluZmVyPHR5cGVvZiBTdWJzY3JpYmVyU3RhdHVzPjtcblxuZXhwb3J0IGNvbnN0IFByb3ZpZGVyU3RhcnR1cFN0YXRlID0gei5lbnVtKFtcInN0YXJ0aW5nXCIsIFwicmVhZHlcIiwgXCJmYWlsZWRcIl0pO1xuXG5leHBvcnQgdHlwZSBQcm92aWRlclN0YXJ0dXBTdGF0ZSA9IHouaW5mZXI8dHlwZW9mIFByb3ZpZGVyU3RhcnR1cFN0YXRlPjtcblxuZXhwb3J0IGNvbnN0IEhlYWx0aFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouc3RyaW5nKCksXG4gIGFjdGl2ZVRva2Vuczogei5udW1iZXIoKSxcbiAgc3Vic2NyaWJlcjogU3Vic2NyaWJlclN0YXR1cy5udWxsYWJsZSgpLFxuICAvLyBIVFRQIOumrOyKpOuLneydgCBkaXNwYXRjaGVyIOq4sOuPmeuztOuLpCDrqLzsoIAg7Je066aw64ukLiAyMDAg7J2R64u166eM7Jy866Gc64qUIOyalOyyreydhCDsspjrpqztlaAg7IiYXG4gIC8vIOyeiOuKlOyngCDslYwg7IiYIOyXhuyWtCBwcm92aWRlciDrs4Qg7KSA67mEIOyDge2DnOulvCDtlajqu5gg64W47Lac7ZWc64ukLlxuICByZWFkeTogei5ib29sZWFuKCksXG4gIHByb3ZpZGVyczogei5vYmplY3Qoe1xuICAgIG9wZW5haTogUHJvdmlkZXJTdGFydHVwU3RhdGUsXG4gICAgYW50aHJvcGljOiBQcm92aWRlclN0YXJ0dXBTdGF0ZSxcbiAgICBncm9rOiBQcm92aWRlclN0YXJ0dXBTdGF0ZS5vcHRpb25hbCgpLFxuICB9KSxcbn0pO1xuXG5leHBvcnQgdHlwZSBIZWFsdGhSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEhlYWx0aFJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEVycm9ycyDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIFF1b3RhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlFVT1RBX0VYSEFVU1RFRFwiIGFzIGNvbnN0O1xufVxuXG5leHBvcnQgY2xhc3MgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9USFJFU0hPTERfRVhDRUVERURcIiBhcyBjb25zdDtcbn1cblxuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiVElNRU9VVFwiIGFzIGNvbnN0O1xufVxuXG5leHBvcnQgY2xhc3MgUHJvY2Vzc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJQUk9DRVNTX0VSUk9SXCIgYXMgY29uc3Q7XG59XG5cbi8vIOKUgOKUgOKUgCBVdGlscyDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIG1hc2tUb2tlbih0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRva2VuLmxlbmd0aCA+IDQgPyBgLi4uJHt0b2tlbi5zbGljZSgtNCl9YCA6IHRva2VuO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUlBLE1BQWEsU0FBUyxFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7QUFBTSxDQUFDO0FBSXRELE1BQWEsWUFBWSxFQUFFLE9BQU87Q0FDaEMsTUFBTSxFQUFFLE9BQU87Q0FDZixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNqQyxhQUFhLEVBQUUsUUFBUTtBQUN6QixDQUFDO0FBS0QsTUFBYSwwQkFBMEIsRUFBRSxPQUFPO0NBQzlDLE9BQU8sRUFBRSxLQUFLLENBQUMsZ0JBQWdCLGlCQUFpQixDQUFDO0NBQ2pELE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzNCLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2hDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzFCLE9BQU8sRUFDSixPQUFPO0VBQ04sY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVk7RUFDckMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVk7RUFDdEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVk7RUFDckMsc0JBQXNCLEVBQ25CLE9BQU87R0FDTixjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWTtHQUNyQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWTtHQUNwQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUztFQUNuRCxDQUFDLENBQUMsQ0FDRCxTQUFTO0VBQ1osdUJBQXVCLEVBQ3BCLE9BQU87R0FDTixj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