@sortedyuan/maybecode 0.3.2 → 0.5.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 (295) hide show
  1. package/README.md +166 -55
  2. package/README.zh-CN.md +267 -0
  3. package/dist/application.d.ts +40 -34
  4. package/dist/application.d.ts.map +1 -1
  5. package/dist/application.js +290 -170
  6. package/dist/application.js.map +1 -1
  7. package/dist/args.d.ts +2 -2
  8. package/dist/args.d.ts.map +1 -1
  9. package/dist/args.js +50 -27
  10. package/dist/args.js.map +1 -1
  11. package/dist/bin.js +82 -71
  12. package/dist/bin.js.map +4 -4
  13. package/dist/cli/chunk-3IORPKBL.js +3572 -0
  14. package/dist/cli/chunk-3IORPKBL.js.map +7 -0
  15. package/dist/cli/{chunk-LVTRXPDS.js → chunk-4B2Z6KW7.js} +1547 -1536
  16. package/dist/cli/chunk-4B2Z6KW7.js.map +7 -0
  17. package/dist/cli/{chunk-JT6VBKOM.js → chunk-4WG6JIJJ.js} +127 -33
  18. package/dist/cli/{chunk-JT6VBKOM.js.map → chunk-4WG6JIJJ.js.map} +3 -3
  19. package/dist/cli/{chunk-K5JWPNSY.js → chunk-5SLWALZK.js} +3521 -16164
  20. package/dist/cli/chunk-5SLWALZK.js.map +7 -0
  21. package/dist/cli/chunk-MNBYXL5Y.js +132 -0
  22. package/dist/cli/chunk-MNBYXL5Y.js.map +7 -0
  23. package/dist/cli/{chunk-F4XRPLUM.js → chunk-SLWLUEHQ.js} +226 -86
  24. package/dist/cli/chunk-SLWLUEHQ.js.map +7 -0
  25. package/dist/cli/chunk-UQDZ55LQ.js +199 -0
  26. package/dist/cli/chunk-UQDZ55LQ.js.map +7 -0
  27. package/dist/cli/{chunk-7ISOHFS7.js → chunk-WMSG5ZTR.js} +717 -388
  28. package/dist/cli/chunk-WMSG5ZTR.js.map +7 -0
  29. package/dist/cli/chunk-WVIRS76R.js +4057 -0
  30. package/dist/cli/chunk-WVIRS76R.js.map +7 -0
  31. package/dist/cli/{chunk-HOU5ITUK.js → chunk-XTEMRAQW.js} +1 -1
  32. package/dist/cli/chunk-XTEMRAQW.js.map +7 -0
  33. package/dist/cli/chunk-Z3BOPBVU.js +91 -0
  34. package/dist/cli/chunk-Z3BOPBVU.js.map +7 -0
  35. package/dist/cli/{configured-WHY3GGAJ.js → configured-ACNM6TRQ.js} +10 -9
  36. package/dist/cli/{file-type-R2T7TBHI.js → file-type-HLHPV7WC.js} +817 -13
  37. package/dist/cli/file-type-HLHPV7WC.js.map +7 -0
  38. package/dist/cli/mcp-auth-XD5U7WCV.js +74 -0
  39. package/dist/cli/mcp-auth-XD5U7WCV.js.map +7 -0
  40. package/dist/cli/onboarding-WQWCPYEO.js +530 -0
  41. package/dist/cli/onboarding-WQWCPYEO.js.map +7 -0
  42. package/dist/cli/onboarding-check-HRRI5OJ7.js +32 -0
  43. package/dist/cli/onboarding-check-HRRI5OJ7.js.map +7 -0
  44. package/dist/cli/{retained-tui-VJ3VX4R3.js → retained-tui-QF5VMYLC.js} +788 -332
  45. package/dist/cli/retained-tui-QF5VMYLC.js.map +7 -0
  46. package/dist/cli/{sixel-LWTCM76G.js → sixel-ISZ4FZ3U.js} +37 -37
  47. package/dist/cli/{sixel-LWTCM76G.js.map → sixel-ISZ4FZ3U.js.map} +1 -1
  48. package/dist/cli/{team-T7G7PPNN.js → team-O2I5BXHM.js} +7 -6
  49. package/dist/cli/{team-v2-JGBBQ7FR.js → team-v2-YYO2G7DJ.js} +816 -390
  50. package/dist/cli/team-v2-YYO2G7DJ.js.map +7 -0
  51. package/dist/cli/{web-server-FOMNPY7Q.js → web-server-SXMH6FGA.js} +55 -19
  52. package/dist/cli/web-server-SXMH6FGA.js.map +7 -0
  53. package/dist/cli/{web-ui-COB6PKC5.js → web-ui-UWQUFE4W.js} +7 -6
  54. package/dist/config-schema.json +337 -0
  55. package/dist/configured.d.ts +18 -11
  56. package/dist/configured.d.ts.map +1 -1
  57. package/dist/configured.js +213 -390
  58. package/dist/configured.js.map +1 -1
  59. package/dist/controller.d.ts +19 -18
  60. package/dist/controller.d.ts.map +1 -1
  61. package/dist/delegation-commands.d.ts +1 -1
  62. package/dist/delegation-commands.d.ts.map +1 -1
  63. package/dist/delegation-commands.js +8 -8
  64. package/dist/delegation-commands.js.map +1 -1
  65. package/dist/errors.d.ts +2 -1
  66. package/dist/errors.d.ts.map +1 -1
  67. package/dist/errors.js +2 -1
  68. package/dist/errors.js.map +1 -1
  69. package/dist/events.d.ts +8 -6
  70. package/dist/events.d.ts.map +1 -1
  71. package/dist/fork-picker.d.ts.map +1 -1
  72. package/dist/fork-picker.js +19 -5
  73. package/dist/fork-picker.js.map +1 -1
  74. package/dist/git-request.d.ts +6 -6
  75. package/dist/git-request.d.ts.map +1 -1
  76. package/dist/git-request.js +28 -15
  77. package/dist/git-request.js.map +1 -1
  78. package/dist/goal-commands.d.ts +1 -1
  79. package/dist/goal-commands.d.ts.map +1 -1
  80. package/dist/goal-commands.js +12 -5
  81. package/dist/goal-commands.js.map +1 -1
  82. package/dist/index.d.ts +5 -37
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +3 -36
  85. package/dist/index.js.map +1 -1
  86. package/dist/instructions.d.ts +2 -7
  87. package/dist/instructions.d.ts.map +1 -1
  88. package/dist/instructions.js +7 -15
  89. package/dist/instructions.js.map +1 -1
  90. package/dist/keymap.d.ts +2 -2
  91. package/dist/keymap.d.ts.map +1 -1
  92. package/dist/keymap.js +2 -2
  93. package/dist/keymap.js.map +1 -1
  94. package/dist/maybecode-config.schema.json +1765 -0
  95. package/dist/mcp-auth.d.ts +1 -1
  96. package/dist/mcp-auth.d.ts.map +1 -1
  97. package/dist/mcp-auth.js +11 -8
  98. package/dist/mcp-auth.js.map +1 -1
  99. package/dist/mcp-commands.d.ts.map +1 -1
  100. package/dist/mcp-commands.js +18 -4
  101. package/dist/mcp-commands.js.map +1 -1
  102. package/dist/mcp-interaction-ui.d.ts.map +1 -1
  103. package/dist/mcp-interaction-ui.js +11 -4
  104. package/dist/mcp-interaction-ui.js.map +1 -1
  105. package/dist/media-history.d.ts +1 -1
  106. package/dist/media-history.d.ts.map +1 -1
  107. package/dist/media-history.js +8 -2
  108. package/dist/media-history.js.map +1 -1
  109. package/dist/model-picker.d.ts.map +1 -1
  110. package/dist/model-picker.js +10 -11
  111. package/dist/model-picker.js.map +1 -1
  112. package/dist/model-transition.d.ts +11 -0
  113. package/dist/model-transition.d.ts.map +1 -0
  114. package/dist/model-transition.js +48 -0
  115. package/dist/model-transition.js.map +1 -0
  116. package/dist/model.d.ts +2 -2
  117. package/dist/model.d.ts.map +1 -1
  118. package/dist/model.js +8 -4
  119. package/dist/model.js.map +1 -1
  120. package/dist/onboarding-check.d.ts +3 -0
  121. package/dist/onboarding-check.d.ts.map +1 -0
  122. package/dist/onboarding-check.js +22 -0
  123. package/dist/onboarding-check.js.map +1 -0
  124. package/dist/onboarding.d.ts +6 -0
  125. package/dist/onboarding.d.ts.map +1 -0
  126. package/dist/onboarding.js +463 -0
  127. package/dist/onboarding.js.map +1 -0
  128. package/dist/plugins/application.d.ts +6 -4
  129. package/dist/plugins/application.d.ts.map +1 -1
  130. package/dist/plugins/application.js +106 -52
  131. package/dist/plugins/application.js.map +1 -1
  132. package/dist/plugins/instructions.d.ts +1 -1
  133. package/dist/plugins/instructions.d.ts.map +1 -1
  134. package/dist/plugins/instructions.js +24 -11
  135. package/dist/plugins/instructions.js.map +1 -1
  136. package/dist/plugins/resources.d.ts +2 -2
  137. package/dist/plugins/resources.d.ts.map +1 -1
  138. package/dist/plugins/resources.js +22 -12
  139. package/dist/plugins/resources.js.map +1 -1
  140. package/dist/policy.d.ts +1 -1
  141. package/dist/policy.d.ts.map +1 -1
  142. package/dist/policy.js +59 -11
  143. package/dist/policy.js.map +1 -1
  144. package/dist/run.d.ts +2 -0
  145. package/dist/run.d.ts.map +1 -1
  146. package/dist/run.js +38 -33
  147. package/dist/run.js.map +1 -1
  148. package/dist/runtime-instructions.d.ts +1 -1
  149. package/dist/runtime-instructions.d.ts.map +1 -1
  150. package/dist/runtime-instructions.js +15 -7
  151. package/dist/runtime-instructions.js.map +1 -1
  152. package/dist/session-navigation.d.ts +6 -0
  153. package/dist/session-navigation.d.ts.map +1 -0
  154. package/dist/session-navigation.js +64 -0
  155. package/dist/session-navigation.js.map +1 -0
  156. package/dist/session-picker.d.ts +1 -1
  157. package/dist/session-picker.d.ts.map +1 -1
  158. package/dist/session-picker.js +23 -32
  159. package/dist/session-picker.js.map +1 -1
  160. package/dist/settings.d.ts +718 -0
  161. package/dist/settings.d.ts.map +1 -0
  162. package/dist/settings.js +14 -0
  163. package/dist/settings.js.map +1 -0
  164. package/dist/skills.d.ts +1 -1
  165. package/dist/skills.d.ts.map +1 -1
  166. package/dist/skills.js +10 -12
  167. package/dist/skills.js.map +1 -1
  168. package/dist/slash-commands.d.ts +2 -2
  169. package/dist/slash-commands.d.ts.map +1 -1
  170. package/dist/slash-commands.js +149 -67
  171. package/dist/slash-commands.js.map +1 -1
  172. package/dist/team-execution.d.ts +10 -0
  173. package/dist/team-execution.d.ts.map +1 -0
  174. package/dist/team-execution.js +29 -0
  175. package/dist/team-execution.js.map +1 -0
  176. package/dist/team-patches.d.ts.map +1 -1
  177. package/dist/team-patches.js +149 -52
  178. package/dist/team-patches.js.map +1 -1
  179. package/dist/team-plan.d.ts +2 -2
  180. package/dist/team-plan.d.ts.map +1 -1
  181. package/dist/team-plan.js +115 -34
  182. package/dist/team-plan.js.map +1 -1
  183. package/dist/team-recovery.d.ts +1 -1
  184. package/dist/team-recovery.d.ts.map +1 -1
  185. package/dist/team-recovery.js +40 -10
  186. package/dist/team-recovery.js.map +1 -1
  187. package/dist/team-v2.d.ts.map +1 -1
  188. package/dist/team-v2.js +335 -104
  189. package/dist/team-v2.js.map +1 -1
  190. package/dist/team-verification.d.ts +4 -2
  191. package/dist/team-verification.d.ts.map +1 -1
  192. package/dist/team-verification.js +300 -97
  193. package/dist/team-verification.js.map +1 -1
  194. package/dist/team.d.ts +2 -2
  195. package/dist/team.d.ts.map +1 -1
  196. package/dist/team.js +172 -62
  197. package/dist/team.js.map +1 -1
  198. package/dist/terminal-web.d.ts +1 -0
  199. package/dist/terminal-web.d.ts.map +1 -1
  200. package/dist/terminal-web.js +28 -10
  201. package/dist/terminal-web.js.map +1 -1
  202. package/dist/ui/actions.d.ts.map +1 -1
  203. package/dist/ui/actions.js.map +1 -1
  204. package/dist/ui/retained-tui.d.ts.map +1 -1
  205. package/dist/ui/retained-tui.js +231 -173
  206. package/dist/ui/retained-tui.js.map +1 -1
  207. package/dist/ui/{prototype-view.d.ts → terminal-view.d.ts} +7 -7
  208. package/dist/ui/terminal-view.d.ts.map +1 -0
  209. package/dist/ui/{prototype-view.js → terminal-view.js} +185 -98
  210. package/dist/ui/terminal-view.js.map +1 -0
  211. package/dist/web-commands.d.ts.map +1 -1
  212. package/dist/web-commands.js +160 -57
  213. package/dist/web-commands.js.map +1 -1
  214. package/dist/web-extension.d.ts.map +1 -1
  215. package/dist/web-extension.js +14 -4
  216. package/dist/web-extension.js.map +1 -1
  217. package/dist/web-server.d.ts.map +1 -1
  218. package/dist/web-server.js +2 -1
  219. package/dist/web-server.js.map +1 -1
  220. package/dist/web-ui.d.ts.map +1 -1
  221. package/dist/web-ui.js +167 -40
  222. package/dist/web-ui.js.map +1 -1
  223. package/dist/workspace-configuration.d.ts +7 -0
  224. package/dist/workspace-configuration.d.ts.map +1 -0
  225. package/dist/workspace-configuration.js +134 -0
  226. package/dist/workspace-configuration.js.map +1 -0
  227. package/dist/workspace-state.d.ts +20 -0
  228. package/dist/workspace-state.d.ts.map +1 -0
  229. package/dist/workspace-state.js +2 -0
  230. package/dist/workspace-state.js.map +1 -0
  231. package/dist/workspace.d.ts +26 -43
  232. package/dist/workspace.d.ts.map +1 -1
  233. package/dist/workspace.js +261 -323
  234. package/dist/workspace.js.map +1 -1
  235. package/package.json +21 -31
  236. package/dist/cli/chunk-7ISOHFS7.js.map +0 -7
  237. package/dist/cli/chunk-F4XRPLUM.js.map +0 -7
  238. package/dist/cli/chunk-H7SNBFO4.js +0 -5522
  239. package/dist/cli/chunk-H7SNBFO4.js.map +0 -7
  240. package/dist/cli/chunk-HOU5ITUK.js.map +0 -7
  241. package/dist/cli/chunk-K5JWPNSY.js.map +0 -7
  242. package/dist/cli/chunk-LVTRXPDS.js.map +0 -7
  243. package/dist/cli/chunk-VAZMCNBB.js +0 -686
  244. package/dist/cli/chunk-VAZMCNBB.js.map +0 -7
  245. package/dist/cli/chunk-WOFEI42C.js +0 -7820
  246. package/dist/cli/chunk-WOFEI42C.js.map +0 -7
  247. package/dist/cli/file-type-R2T7TBHI.js.map +0 -7
  248. package/dist/cli/mcp-auth-UNRHSIKJ.js +0 -63
  249. package/dist/cli/mcp-auth-UNRHSIKJ.js.map +0 -7
  250. package/dist/cli/retained-tui-VJ3VX4R3.js.map +0 -7
  251. package/dist/cli/team-v2-JGBBQ7FR.js.map +0 -7
  252. package/dist/cli/tui-SA74DKMA.js +0 -1705
  253. package/dist/cli/tui-SA74DKMA.js.map +0 -7
  254. package/dist/cli/web-server-FOMNPY7Q.js.map +0 -7
  255. package/dist/delegation.d.ts +0 -2
  256. package/dist/delegation.d.ts.map +0 -1
  257. package/dist/delegation.js +0 -2
  258. package/dist/delegation.js.map +0 -1
  259. package/dist/history-memory.d.ts +0 -2
  260. package/dist/history-memory.d.ts.map +0 -1
  261. package/dist/history-memory.js +0 -2
  262. package/dist/history-memory.js.map +0 -1
  263. package/dist/subagent-budget.d.ts +0 -2
  264. package/dist/subagent-budget.d.ts.map +0 -1
  265. package/dist/subagent-budget.js +0 -2
  266. package/dist/subagent-budget.js.map +0 -1
  267. package/dist/subagent-files.d.ts +0 -2
  268. package/dist/subagent-files.d.ts.map +0 -1
  269. package/dist/subagent-files.js +0 -2
  270. package/dist/subagent-files.js.map +0 -1
  271. package/dist/subagent-host.d.ts +0 -2
  272. package/dist/subagent-host.d.ts.map +0 -1
  273. package/dist/subagent-host.js +0 -2
  274. package/dist/subagent-host.js.map +0 -1
  275. package/dist/subagent-instructions.d.ts +0 -2
  276. package/dist/subagent-instructions.d.ts.map +0 -1
  277. package/dist/subagent-instructions.js +0 -2
  278. package/dist/subagent-instructions.js.map +0 -1
  279. package/dist/subagents.d.ts +0 -2
  280. package/dist/subagents.d.ts.map +0 -1
  281. package/dist/subagents.js +0 -2
  282. package/dist/subagents.js.map +0 -1
  283. package/dist/summarizer.d.ts +0 -2
  284. package/dist/summarizer.d.ts.map +0 -1
  285. package/dist/summarizer.js +0 -2
  286. package/dist/summarizer.js.map +0 -1
  287. package/dist/tui.d.ts +0 -7
  288. package/dist/tui.d.ts.map +0 -1
  289. package/dist/tui.js +0 -1109
  290. package/dist/tui.js.map +0 -1
  291. package/dist/ui/prototype-view.d.ts.map +0 -1
  292. package/dist/ui/prototype-view.js.map +0 -1
  293. /package/dist/cli/{configured-WHY3GGAJ.js.map → configured-ACNM6TRQ.js.map} +0 -0
  294. /package/dist/cli/{team-T7G7PPNN.js.map → team-O2I5BXHM.js.map} +0 -0
  295. /package/dist/cli/{web-ui-COB6PKC5.js.map → web-ui-UWQUFE4W.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../node_modules/.pnpm/@kwsites+file-exists@1.1.1/node_modules/@kwsites/file-exists/src/index.ts", "../../../../node_modules/.pnpm/@kwsites+file-exists@1.1.1/node_modules/@kwsites/file-exists/index.ts", "../../../../node_modules/.pnpm/@kwsites+promise-deferred@1.1.1/node_modules/@kwsites/promise-deferred/src/index.ts", "../../src/policy.ts", "../../../../packages/application/src/git-workspace.ts", "../../../../node_modules/.pnpm/@simple-git+args-pathspec@1.0.4/node_modules/@simple-git/args-pathspec/src/pathspec.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/flags/flags.helpers.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/config/config-operands.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/config/detect-config-action.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/config/analyse-config.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/tokens/flag-specs.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/tokens/token-expander.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/flags/parse-global-flags.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/flags/parse-task-flags.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/vulnerabilities/detect-vulnerable-config-writes.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/vulnerabilities/detect-vulnerable-flags.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/vulnerabilities/vulnerability-analysis.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/args/parse-argv.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/env/parse-env.ts", "../../../../node_modules/.pnpm/@simple-git+argv-parser@2.0.1/node_modules/@simple-git/argv-parser/src/vulnerabilities/vulnerability-check.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/errors/git-error.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/errors/git-construct-error.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/errors/git-plugin-error.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/errors/git-response-error.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/errors/task-configuration-error.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/utils/util.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/utils/argument-filters.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/utils/exit-codes.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/utils/git-output-streams.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/utils/line-parser.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/utils/simple-git-options.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/utils/task-options.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/utils/task-parser.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/check-is-repo.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-clean.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/task.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/clean.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/ConfigList.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/config.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/diff-name-status.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/grep.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/reset.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/git-logger.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/runners/tasks-pending-queue.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/runners/git-executor-chain.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/runners/git-executor.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/task-callback.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/change-working-directory.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/checkout.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/clone.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-commit.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/commit.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/count-objects.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/first-commit.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/hash-object.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/InitSummary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/init.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/interpret-trailers.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/args/log-format.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/DiffSummary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-diff-summary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-list-log-summary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/diff.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/log.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/MergeSummary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/PullSummary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-remote-objects.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-remote-messages.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-pull.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-merge.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/merge.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-push.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/push.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/show.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/FileStatusSummary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/StatusSummary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/status.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/version.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/simple-git-api.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/runners/scheduler.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/apply-patch.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/BranchSummary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-branch.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/BranchDeleteSummary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-branch-delete.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/branch.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/check-ignore.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-fetch.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/fetch.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/parsers/parse-move.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/move.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/pull.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/GetRemoteSummary.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/remote.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/stash-list.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/sub-module.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/responses/TagList.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/tasks/tag.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/git.mjs", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/abort-plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/allow-environment.plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/block-unsafe-operations-plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/command-config-prefixing-plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/completion-detection.plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/custom-binary.plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/errors/git-configuration-error.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/error-detection.plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/input.plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/plugin-store.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/progress-monitor-plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/spawn-options-plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/suffix-paths.plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/plugins/timeout-plugin.ts", "../../../../node_modules/.pnpm/simple-git@4.0.2/node_modules/simple-git/src/lib/git-factory.ts", "../../../../node_modules/.pnpm/diff@9.0.0/node_modules/diff/libesm/diff/base.js", "../../../../node_modules/.pnpm/diff@9.0.0/node_modules/diff/libesm/diff/character.js", "../../../../node_modules/.pnpm/diff@9.0.0/node_modules/diff/libesm/diff/line.js", "../../../../node_modules/.pnpm/diff@9.0.0/node_modules/diff/libesm/patch/create.js"],
4
- "sourcesContent": [null, null, null, "import type {\n PermissionCheck,\n PermissionDecision,\n PermissionPolicy,\n} from \"@sortedyuan/permissions\";\nimport { resolveWritableWorkspacePath } from \"@sortedyuan/coding-tools\";\nimport { realpath } from \"node:fs/promises\";\nimport { relative } from \"node:path\";\n\nexport type MaybeCodePermissionMode = \"default\" | \"yolo\";\n\nexport function parsePermissionMode(value: unknown): MaybeCodePermissionMode {\n if (value === \"default\" || value === \"yolo\") return value;\n throw new TypeError('permissionMode must be \"default\" or \"yolo\"');\n}\n\nexport function createCodingPermissionPolicy(options: {\n readonly mode?: () => MaybeCodePermissionMode;\n readonly readOnly?: boolean;\n readonly policy?: PermissionPolicy;\n readonly persistent?: { readonly workspace: string; readonly scopeId: string };\n} = {}): PermissionPolicy {\n const policy = options.policy ?? defaultCodingPermission;\n return async (check) => {\n if (options.readOnly && ![\"read\", \"skill_read\", \"session_history\", \"session_history_search\", \"session_history_read\", \"get_context_remaining\", \"context_notes\", \"new_context\", \"get_goal\"].includes(check.tool.name)) return \"deny\";\n let decision = await policy(check);\n if (options.persistent && [\"read\", \"edit\", \"write\"].includes(check.tool.name)) {\n const path = stringField(check.input, \"path\");\n if (path !== undefined) {\n const target = await resolveWritableWorkspacePath(options.persistent.workspace, path);\n const root = await realpath(options.persistent.workspace);\n const normalized = relative(root, target.absolute).replace(/\\\\/gu, \"/\");\n const key = process.platform === \"win32\" ? normalized.toLowerCase() : normalized;\n const rules = await resolveWritableWorkspacePath(options.persistent.workspace, \".may/permission-rules.json\");\n const rulesRelative = relative(root, rules.absolute).replace(/\\\\/gu, \"/\");\n const rulesKey = process.platform === \"win32\" ? rulesRelative.toLowerCase() : rulesRelative;\n if (key === rulesKey || key.startsWith(`${rulesKey}.`)) return \"deny\";\n if (options.policy === undefined && check.tool.name !== \"read\" && decision !== \"deny\" && !(typeof decision === \"object\" && decision.decision === \"deny\")) {\n const scoped = typeof decision === \"object\" ? decision : { decision };\n const persistent = typeof decision === \"object\" ? decision.persistent : undefined;\n decision = {\n ...scoped,\n grantKey: persistent && typeof decision === \"object\" ? decision.grantKey : `${check.tool.name}:${key}`,\n persistent: persistent ?? { scopeId: options.persistent.scopeId, description: `${check.tool.name} \u00B7 ${root} \u00B7 ${key}` },\n };\n }\n }\n }\n const asks = decision === \"ask\" || (typeof decision === \"object\" && decision !== null &&\n decision.decision === \"ask\" && typeof decision.grantKey === \"string\" && decision.grantKey.trim() !== \"\");\n if (options.mode?.() === \"yolo\" && asks && !(typeof decision === \"object\" && decision.requireApproval)) {\n return typeof decision === \"object\" ? { ...decision, decision: \"allow\" } : \"allow\";\n }\n return decision;\n };\n}\n\nfunction defaultCodingPermission(check: PermissionCheck): PermissionDecision {\n if ([\"read\", \"skill_read\", \"session_history\", \"session_history_search\", \"session_history_read\",\n \"get_context_remaining\", \"context_notes\", \"new_context\", \"get_goal\", \"update_goal\",\n \"delegate_tasks\"].includes(check.tool.name)) {\n // \u59D4\u6D3E\u662F\u5426\u88AB\u5141\u8BB8\u7531\u5BBF\u4E3B\u7684\u89D2\u8272\u6388\u6743\u51B3\u5B9A\uFF1A\u53EA\u6709\u5DF2\u6CE8\u518C\u4E14\u5BBF\u4E3B\u6388\u6743\u7684\u89D2\u8272\u80FD\u88AB\u521B\u5EFA\uFF0C\n // \u8D85\u51FA\u6388\u6743\u8303\u56F4\u7684\u59D4\u6D3E\u4F1A\u5728\u5DE5\u5177\u6267\u884C\u65F6\u5931\u8D25\u3002\u663E\u5F0F\u63D0\u4F9B deny \u7684\u81EA\u5B9A\u4E49\u7B56\u7565\u4F9D\u7136\u6709\u6548\u3002\n return \"allow\";\n }\n\n if (check.tool.name === \"shell\" || check.tool.name === \"bash\") {\n const command = stringField(check.input, \"command\");\n return command === undefined\n ? \"ask\"\n : { decision: \"ask\", grantKey: `${check.tool.name}:${command}` };\n }\n\n if (check.tool.name === \"edit\" || check.tool.name === \"write\") {\n const path = stringField(check.input, \"path\");\n return path === undefined\n ? \"ask\"\n : {\n decision: \"ask\",\n grantKey: `${check.tool.name}:${path}`,\n };\n }\n\n if (check.tool.name.startsWith(\"mcp__\")) {\n return {\n decision: \"ask\",\n grantKey: `mcp:${check.tool.name}`,\n };\n }\n\n return \"ask\";\n}\n\nfunction stringField(value: unknown, name: string): string | undefined {\n if (typeof value !== \"object\" || value === null || !(name in value)) {\n return undefined;\n }\n const field = value[name as keyof typeof value];\n return typeof field === \"string\" && field !== \"\" ? field : undefined;\n}\n", "import { createHash, randomUUID } from \"node:crypto\";\nimport { hostname, homedir } from \"node:os\";\nimport { access, chmod, lstat, mkdir, open, readFile, readdir, realpath, rename, rm } from \"node:fs/promises\";\nimport type { FileHandle } from \"node:fs/promises\";\nimport { isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport { simpleGit, type SimpleGit, type StatusResult } from \"simple-git\";\nimport { createPatch, diffLines } from \"diff\";\nimport { withFileAccess } from \"@sortedyuan/session/file-access\";\n\nexport interface ProjectGitWorkspaceOptions {\n readonly workspace: string;\n readonly autoCommit?: boolean;\n readonly readOnly?: boolean;\n readonly dataRoot?: string;\n readonly worktreesRoot?: string;\n readonly excludedPaths?: readonly string[];\n readonly authorizeCommit?: (request: GitCommitRequest) => boolean | Promise<boolean>;\n /** \u5EF6\u8FDF\u5230 beginRound \u624D\u521D\u59CB\u5316\u4ED3\u5E93\u548C checkpoint \u5B58\u50A8\u3002 */\n readonly deferInitialization?: boolean;\n}\n\nexport interface GitCommitRequest {\n readonly workspace: string;\n readonly sessionId: string;\n readonly runId?: string;\n readonly runIds?: readonly string[];\n readonly initial: boolean;\n readonly message: string;\n readonly paths: readonly string[];\n}\n\nexport interface GitWorkspaceStatus {\n readonly workspace: string;\n readonly repository?: string;\n readonly projectId: string;\n readonly autoCommit: boolean;\n readonly readOnly: boolean;\n readonly state: \"unmanaged\" | \"unborn\" | \"ready\";\n readonly branch?: string;\n readonly commit?: string;\n readonly detached: boolean;\n readonly dirty: boolean;\n}\n\nexport interface GitCheckpoint {\n readonly id: string;\n readonly sessionId: string;\n readonly runId?: string;\n readonly runIds?: readonly string[];\n readonly historyPosition?: number | string;\n readonly workspace: string;\n readonly repository: string;\n readonly fromCommit?: string;\n readonly commit?: string;\n readonly branch?: string;\n readonly status: \"committed\" | \"unchanged\" | \"uncommitted\" | \"failed\";\n readonly createdAt: number;\n readonly recovered?: boolean;\n readonly error?: string;\n}\n\nexport interface GitRoundOptions {\n readonly sessionId: string;\n readonly runId?: string;\n readonly historyPosition?: number | string;\n}\n\nexport interface GitRoundCompletion {\n readonly outcome: \"completed\" | \"failed\" | \"cancelled\";\n readonly commitMessage?: string;\n readonly runId?: string;\n readonly runIds?: readonly string[];\n readonly historyPosition?: number | string;\n}\n\nexport interface GitRoundLease {\n readonly fromCommit?: string;\n complete(options: GitRoundCompletion): Promise<GitCheckpoint>;\n close(): Promise<void>;\n}\n\nexport interface GitWorkspaceDiff {\n readonly from: string;\n readonly to?: string;\n readonly patch: string;\n readonly files: readonly GitDiffFile[];\n readonly insertions: number;\n readonly deletions: number;\n readonly untracked: readonly string[];\n}\n\nexport interface GitDiffFile {\n readonly path: string;\n readonly previousPath?: string;\n readonly status: \"added\" | \"modified\" | \"deleted\" | \"renamed\" | \"copied\" | \"typechanged\" | \"untracked\" | \"unknown\";\n readonly patch: string;\n readonly binary: boolean;\n readonly insertions: number;\n readonly deletions: number;\n}\n\nexport interface GitRestorePreview {\n readonly checkpointId: string;\n readonly commit: string;\n readonly workspace: string;\n readonly files: readonly GitRestoreFile[];\n}\n\nexport interface GitRestoreFile {\n readonly path: string;\n readonly beforeFingerprint?: string;\n readonly targetMode?: \"100644\" | \"100755\";\n readonly contentBase64?: string;\n readonly binary: boolean;\n readonly patch: string;\n}\n\nexport interface GitRestoreOptions {\n readonly sessionId: string;\n readonly runId?: string;\n readonly historyPosition?: number | string;\n readonly commitMessage?: string;\n}\n\nexport interface ManagedGitWorktree {\n readonly id: string;\n readonly projectId: string;\n readonly repository: string;\n readonly sourceWorkspace: string;\n readonly sourceSessionId: string;\n readonly historyPosition: number | string;\n readonly checkpointId: string;\n readonly commit: string;\n readonly path: string;\n readonly workspace: string;\n readonly branch: string;\n readonly sessions: readonly string[];\n readonly processes: readonly number[];\n readonly status: \"creating\" | \"ready\" | \"failed\" | \"deleted\";\n readonly createdAt: number;\n readonly error?: string;\n}\n\ninterface CommitIntent {\n readonly checkpoint: GitCheckpoint;\n readonly phase: \"planned\" | \"committed\";\n readonly tree: string;\n readonly commit?: string;\n}\n\nexport class GitCheckpointError extends Error {\n constructor(readonly checkpoint: GitCheckpoint, cause: unknown) {\n super(checkpoint.error ?? \"Git checkpoint failed\", { cause });\n this.name = \"GitCheckpointError\";\n }\n}\n\nexport class GitWorkspaceConflictError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"GitWorkspaceConflictError\";\n }\n}\n\n/** \u9879\u76EE\u6587\u4EF6\u7248\u672C\u3001checkpoint \u548C\u767B\u8BB0\u7684 worktree \u4F7F\u7528\u76F8\u540C\u7684 Git \u4ED3\u5E93\u3002 */\nexport class ProjectGitWorkspace {\n readonly workspace: string;\n private repositoryPath: string | undefined;\n private projectIdentity: string;\n get repository(): string | undefined { return this.repositoryPath; }\n get projectId(): string { return this.projectIdentity; }\n readonly autoCommit: boolean;\n readonly readOnly: boolean;\n private git: SimpleGit;\n private reader: SimpleGit;\n private directory: string;\n private readonly worktreesRoot: string;\n private readonly options: ProjectGitWorkspaceOptions;\n private commonDirectory: string;\n private initialization: Promise<void> | undefined;\n\n private constructor(options: ProjectGitWorkspaceOptions, workspace: string, repository: string | undefined, commonDirectory: string) {\n this.options = options;\n this.commonDirectory = commonDirectory;\n this.workspace = workspace;\n this.repositoryPath = repository;\n this.autoCommit = options.autoCommit !== false;\n this.readOnly = options.readOnly === true;\n this.projectIdentity = digest(commonDirectory);\n this.git = simpleGit({ baseDir: repository ?? workspace, maxConcurrentProcesses: 1, trimmed: true,\n config: [\"core.quotepath=false\"], allowEnvironment: [\"GIT_CEILING_DIRECTORIES\"] });\n this.reader = simpleGit({ baseDir: repository ?? workspace, binary: [\"git\", \"--no-optional-locks\"],\n maxConcurrentProcesses: 1, trimmed: true, config: [\"core.quotepath=false\"], allowEnvironment: [\"GIT_CEILING_DIRECTORIES\"] });\n this.directory = join(resolve(options.dataRoot ?? join(homedir(), \".may\", \"git-workspaces\")), this.projectId);\n this.worktreesRoot = resolve(options.worktreesRoot ?? join(homedir(), \".may\", \"worktrees\"));\n if (repository !== undefined && (isWithin(repository, this.directory) || isWithin(repository, this.worktreesRoot))) {\n throw new Error(\"Git checkpoint records and managed worktrees must be stored outside the source repository\");\n }\n }\n\n static async open(options: ProjectGitWorkspaceOptions): Promise<ProjectGitWorkspace> {\n const workspace = await realpath(resolve(options.workspace));\n if (!(await lstat(workspace)).isDirectory()) throw new Error(\"Git workspace must be a directory\");\n const git = simpleGit({ baseDir: workspace, maxConcurrentProcesses: 1, allowEnvironment: [\"GIT_CEILING_DIRECTORIES\"] });\n const version = await git.version();\n if (!version.installed) throw new Error(\"Git is unavailable\");\n if (version.major < 2 || (version.major === 2 && version.minor < 36)) throw new Error(\"Git 2.36 or newer is required\");\n let managed = await git.checkIsRepo();\n if (!managed && options.autoCommit !== false && options.readOnly !== true && !options.deferInitialization) {\n await git.init();\n managed = true;\n }\n const identity = managed ? await repositoryIdentity(git, workspace) : undefined;\n const repository = identity?.repository;\n const commonDirectory = identity?.commonDirectory ?? workspace;\n const value = new ProjectGitWorkspace(options, workspace, repository, commonDirectory);\n if (!value.readOnly && !options.deferInitialization) await mkdir(value.directory, { recursive: true });\n return value;\n }\n\n async status(): Promise<GitWorkspaceStatus> {\n return (await this.inspectStatus()).state;\n }\n\n /** \u53EA\u8BFB\u53D6\u4ED3\u5E93\u8EAB\u4EFD\u4E0E HEAD\uFF0C\u4F9B\u754C\u9762\u5B9A\u65F6\u5237\u65B0\u4F7F\u7528\u3002 */\n async summary(): Promise<Omit<GitWorkspaceStatus, \"dirty\">> {\n const base = { workspace: this.workspace, projectId: this.projectId, autoCommit: this.autoCommit, readOnly: this.readOnly };\n if (!this.repository) {\n if (await this.reader.checkIsRepo()) throw new Error(\"Workspace Git repository identity changed; reopen the workspace\");\n return { ...base, state: \"unmanaged\", detached: false };\n }\n await this.assertIdentity();\n const head = await this.reader.raw([\"rev-parse\", \"--revs-only\", \"HEAD\"]);\n const branch = (await this.reader.raw([\"branch\", \"--show-current\"])).trim();\n return { ...base, repository: this.repository, state: head.trim() ? \"ready\" : \"unborn\", detached: !branch,\n ...(branch ? { branch } : {}), ...(head.trim() ? { commit: head.trim() } : {}) };\n }\n\n private initialize(): Promise<void> {\n if (this.initialization) return this.initialization;\n const operation = (async () => {\n if (!this.options.deferInitialization) return;\n if (this.repository) await this.assertIdentity();\n const initialized = await ProjectGitWorkspace.open({ ...this.options, deferInitialization: false });\n this.repositoryPath = initialized.repository;\n this.projectIdentity = initialized.projectId;\n this.commonDirectory = initialized.commonDirectory;\n this.directory = initialized.directory;\n this.git = initialized.git;\n this.reader = initialized.reader;\n })();\n this.initialization = operation;\n void operation.catch(() => { if (this.initialization === operation) this.initialization = undefined; });\n return operation;\n }\n\n private async inspectStatus(): Promise<{ readonly state: GitWorkspaceStatus; readonly files?: StatusResult }> {\n if (this.repository === undefined) {\n if (await this.reader.checkIsRepo()) throw new Error(\"Workspace Git repository identity changed; reopen the workspace\");\n return { state: { workspace: this.workspace, projectId: this.projectId, autoCommit: this.autoCommit,\n readOnly: this.readOnly, state: \"unmanaged\", detached: false, dirty: false } };\n }\n await this.assertIdentity();\n const status = await this.reader.status([\"--untracked-files=all\"]);\n const commit = await this.head(status);\n return { files: status, state: { workspace: this.workspace, repository: this.repository, projectId: this.projectId,\n autoCommit: this.autoCommit, readOnly: this.readOnly, state: commit === undefined ? \"unborn\" : \"ready\",\n ...(status.detached || !status.current ? {} : { branch: status.current }),\n ...(commit === undefined ? {} : { commit }), detached: status.detached, dirty: !status.isClean() } };\n }\n\n async prepare(sessionId: string): Promise<GitCheckpoint> {\n await this.initialize();\n this.requireRepository();\n const lock = await this.acquireLock();\n try {\n await this.recoverIntent();\n return await this.saveCheckpoint({ sessionId }, undefined, \"Save initial workspace checkpoint\", true, \"completed\");\n } finally { await lock.close(); }\n }\n\n async beginRound(options: GitRoundOptions): Promise<GitRoundLease> {\n await this.initialize();\n this.requireRepository();\n const lock = await this.acquireLock();\n try {\n await this.recoverIntent();\n if (this.autoCommit && !this.readOnly) await this.assertOperational();\n const checkpoints = await this.checkpoints(options.sessionId);\n const hasInitialVersion = checkpoints.some(value => value.workspace === this.workspace &&\n ((value.commit !== undefined && (value.status === \"committed\" || value.status === \"unchanged\")) ||\n (!this.autoCommit && value.status === \"uncommitted\")));\n if (!hasInitialVersion || this.autoCommit) {\n await this.saveCheckpoint({ sessionId: options.sessionId }, undefined, \"Save initial workspace checkpoint\", true, \"completed\");\n }\n const fromCommit = (await this.status()).commit;\n let finished = false;\n return {\n ...(fromCommit === undefined ? {} : { fromCommit }),\n complete: async (completion) => {\n if (finished) throw new Error(\"Git round lease has already completed\");\n finished = true;\n try {\n return await this.saveCheckpoint({ ...options,\n ...(completion.runId === undefined ? {} : { runId: completion.runId }),\n ...(completion.runIds === undefined ? {} : { runIds: completion.runIds }),\n ...(completion.historyPosition === undefined ? {} : { historyPosition: completion.historyPosition }) },\n fromCommit, completion.commitMessage ?? \"Save workspace changes after agent run\", false, completion.outcome);\n } finally { await lock.close(); }\n },\n close: async () => { finished = true; await lock.close(); },\n };\n } catch (error) { await lock.close(); throw error; }\n }\n\n async checkpoints(sessionId?: string): Promise<readonly GitCheckpoint[]> {\n const entries = await this.readRecords<GitCheckpoint>(\"checkpoints\");\n return entries.filter(value => sessionId === undefined || value.sessionId === sessionId)\n .sort((left, right) => left.createdAt - right.createdAt);\n }\n\n async bindCheckpoint(id: string, historyPosition: number | string): Promise<GitCheckpoint> {\n this.assertWritable();\n const checkpoint = await this.checkpoint(id);\n const value = { ...checkpoint, historyPosition };\n await this.writeRecord(\"checkpoints\", id, value);\n return value;\n }\n\n async checkpointByRun(sessionId: string, runId: string): Promise<GitCheckpoint | undefined> {\n return [...await this.checkpoints(sessionId)].reverse().find(value => value.runId === runId || value.runIds?.includes(runId));\n }\n\n async checkpoint(id: string): Promise<GitCheckpoint> {\n validateId(id);\n const value = await readJson<GitCheckpoint>(join(this.directory, \"checkpoints\", `${id}.json`), !this.readOnly);\n if (!value || value.id !== id) throw new Error(\"Git checkpoint does not belong to this project\");\n return value;\n }\n\n async diff(options: { readonly from: string; readonly to?: string; readonly file?: string }): Promise<GitWorkspaceDiff> {\n this.requireRepository();\n await this.assertIdentity();\n const from = await this.resolveCommit(options.from);\n const to = options.to === undefined ? undefined : await this.resolveCommit(options.to);\n const paths = options.file === undefined ? [] : [literalPath(this.relativeFile(options.file))];\n const args = [\"--no-ext-diff\", \"--no-textconv\", \"--find-renames\", from, ...(to === undefined ? [] : [to])];\n const names = await this.reader.diffSummary([\"--name-status\", ...args, \"--\", ...paths]);\n const files: GitDiffFile[] = [];\n for (const entry of names.files) {\n if (this.excluded(entry.file) || (\"from\" in entry && entry.from !== undefined && this.excluded(entry.from))) continue;\n const selection = [literalPath(entry.file), ...(\"from\" in entry && entry.from !== undefined ? [literalPath(entry.from)] : [])];\n const stats = await this.reader.diffSummary([\"--numstat\", ...args, \"--\", ...selection]);\n const patch = await this.reader.diff([...args, \"--\", ...selection]);\n if (patch === \"\") throw new Error(`Git diff file path could not be resolved: ${entry.file}`);\n const status = \"status\" in entry ? diffStatus(entry.status) : \"unknown\";\n files.push({ path: entry.file, ...(\"from\" in entry && entry.from !== undefined ? { previousPath: entry.from } : {}),\n status, patch, binary: stats.files.some(file => file.binary), insertions: stats.insertions, deletions: stats.deletions });\n }\n const untracked = to === undefined ? (await this.reader.status([\"--untracked-files=all\"])).not_added\n .filter(path => !this.excluded(path) && (options.file === undefined || path === this.relativeFile(options.file))) : [];\n for (const path of untracked) {\n await this.assertFileParents(path);\n const current = await regularFile(resolve(this.repository!, path));\n if (current === undefined) throw new Error(\"Untracked file disappeared while reading its changes\");\n const binary = current.content.includes(0);\n const text = binary ? \"\" : current.content.toString(\"utf8\");\n files.push({ path, status: \"untracked\", binary, patch: binary ? \"\" : createPatch(path, \"\", text),\n insertions: binary ? 0 : diffLines(\"\", text).reduce((count, part) => count + (part.added ? part.count ?? 0 : 0), 0), deletions: 0 });\n }\n return { from, ...(to === undefined ? {} : { to }), patch: files.map(file => file.patch).join(\"\\n\"), files,\n insertions: files.reduce((count, file) => count + file.insertions, 0),\n deletions: files.reduce((count, file) => count + file.deletions, 0), untracked };\n }\n\n async previewRestore(options: { readonly checkpointId: string; readonly paths: readonly string[] }): Promise<GitRestorePreview> {\n this.requireRepository();\n await this.assertIdentity();\n const checkpoint = await this.checkpoint(options.checkpointId);\n if (!checkpoint.commit || checkpoint.status === \"failed\" || checkpoint.status === \"uncommitted\") throw new Error(\"Checkpoint has no complete file version\");\n const commit = await this.resolveCommit(checkpoint.commit);\n if (options.paths.length === 0) throw new Error(\"File restoration requires an explicit path selection\");\n const files: GitRestoreFile[] = [];\n for (const input of [...new Set(options.paths)]) {\n const path = this.relativeFile(input);\n if (this.excluded(path)) throw new Error(\"Excluded files cannot be restored through a checkpoint preview\");\n await this.assertFileParents(path);\n const absolute = resolve(this.repository!, path);\n const before = await regularFile(absolute);\n const mode = (await this.reader.raw([\"ls-tree\", \"--format=%(objectmode)\", commit, \"--\", literalPath(path)])).trim();\n if (mode !== \"\" && mode !== \"100644\" && mode !== \"100755\") throw new Error(`Historical file type cannot be restored: ${path}`);\n const after = mode === \"\" ? undefined : await this.reader.showBuffer([`${commit}:${path}`]);\n const binary = (before?.content.includes(0) ?? false) || (after?.includes(0) ?? false);\n const patch = binary ? \"\" : createPatch(path, before?.content.toString(\"utf8\") ?? \"\", after?.toString(\"utf8\") ?? \"\");\n files.push({ path, ...(before === undefined ? {} : { beforeFingerprint: fingerprint(before.content, before.mode) }),\n ...(mode === \"\" ? {} : { targetMode: mode as \"100644\" | \"100755\", contentBase64: after!.toString(\"base64\") }), binary, patch });\n }\n return { checkpointId: checkpoint.id, commit, workspace: this.workspace, files };\n }\n\n async restore(preview: GitRestorePreview): Promise<readonly string[]>;\n async restore(preview: GitRestorePreview, options: GitRestoreOptions): Promise<GitCheckpoint>;\n async restore(preview: GitRestorePreview, options?: GitRestoreOptions): Promise<readonly string[] | GitCheckpoint> {\n this.assertWritable();\n this.requireRepository();\n if (preview.workspace !== this.workspace) throw new Error(\"File restoration preview belongs to another workspace\");\n const lock = await this.acquireLock();\n try {\n await this.recoverIntent();\n await this.assertOperational();\n const fromCommit = (await this.status()).commit;\n const expected = await this.previewRestore({ checkpointId: preview.checkpointId, paths: preview.files.map(file => file.path) });\n if (expected.commit !== preview.commit || expected.files.length !== preview.files.length) throw new GitWorkspaceConflictError(\"File restoration version has changed\");\n for (let index = 0; index < expected.files.length; index += 1) {\n const current = expected.files[index]!;\n const reviewed = preview.files[index]!;\n if (current.path !== reviewed.path || current.beforeFingerprint !== reviewed.beforeFingerprint\n || current.targetMode !== reviewed.targetMode || current.contentBase64 !== reviewed.contentBase64) {\n throw new GitWorkspaceConflictError(`File changed after restoration preview: ${current.path}`);\n }\n }\n const changed: string[] = [];\n for (const file of expected.files) {\n const target = resolve(this.repository!, file.path);\n await this.assertFileParents(file.path);\n const current = await regularFile(target);\n if ((current === undefined ? undefined : fingerprint(current.content, current.mode)) !== file.beforeFingerprint) {\n throw new GitWorkspaceConflictError(`File changed during restoration: ${file.path}`);\n }\n if (file.targetMode === undefined) {\n if (current !== undefined) { await rm(target); changed.push(file.path); }\n continue;\n }\n const content = Buffer.from(file.contentBase64!, \"base64\");\n if (current?.content.equals(content) && (process.platform === \"win32\" || current.mode === file.targetMode)) continue;\n await mkdir(resolve(target, \"..\"), { recursive: true });\n const temporary = `${target}.${randomUUID()}.may-restore`;\n const handle = await open(temporary, \"wx\", file.targetMode === \"100755\" ? 0o755 : 0o644);\n try { await handle.writeFile(content); await handle.sync(); }\n finally { await handle.close(); }\n await rename(temporary, target);\n if (process.platform !== \"win32\") await chmod(target, file.targetMode === \"100755\" ? 0o755 : 0o644);\n changed.push(file.path);\n }\n return options === undefined ? changed : await this.saveCheckpoint(options, fromCommit,\n options.commitMessage ?? \"Restore selected checkpoint files\", false, \"completed\");\n } finally { await lock.close(); }\n }\n\n async createWorktree(options: { readonly sessionId: string; readonly historyPosition: number | string; readonly checkpointId: string }): Promise<ManagedGitWorktree> {\n this.assertWritable();\n this.requireRepository();\n await this.assertIdentity();\n const lock = await this.acquireLock(\"worktrees\");\n try {\n const checkpoint = await this.checkpoint(options.checkpointId);\n if (checkpoint.commit === undefined || checkpoint.status === \"failed\" || checkpoint.status === \"uncommitted\") {\n throw new Error(\"Selected checkpoint has no complete file version\");\n }\n const commit = await this.resolveCommit(checkpoint.commit);\n const id = randomUUID();\n const path = join(this.worktreesRoot, this.projectId, id);\n const branch = `may/session-${id}`;\n const workspace = join(path, relative(this.repository!, this.workspace));\n const record: ManagedGitWorktree = { id, projectId: this.projectId, repository: this.repository!,\n sourceWorkspace: this.workspace, sourceSessionId: options.sessionId, historyPosition: options.historyPosition,\n checkpointId: options.checkpointId, commit, path, workspace, branch, sessions: [], processes: [],\n status: \"creating\", createdAt: Date.now() };\n await mkdir(join(this.worktreesRoot, this.projectId), { recursive: true });\n if (await exists(path)) throw new Error(\"Worktree directory already exists\");\n await this.writeRecord(\"worktrees\", id, record);\n try {\n await this.git.raw([\"worktree\", \"add\", \"--no-guess-remote\", \"-b\", branch, path, commit]);\n const created = simpleGit({ baseDir: path, maxConcurrentProcesses: 1 });\n if ((await created.revparse([\"--verify\", \"HEAD\"])).trim() !== commit || (await created.status()).current !== branch) {\n throw new Error(\"Git worktree did not create the selected branch and file version\");\n }\n if (!await exists(workspace)) throw new Error(\"Selected checkpoint does not contain the project directory\");\n const value = { ...record, status: \"ready\" as const };\n await this.writeRecord(\"worktrees\", id, value);\n return value;\n } catch (error) {\n await this.writeRecord(\"worktrees\", id, { ...record, status: \"failed\", error: errorMessage(error) });\n throw error;\n }\n } finally { await lock.close(); }\n }\n\n async listWorktrees(): Promise<readonly ManagedGitWorktree[]> {\n return (await this.readRecords<ManagedGitWorktree>(\"worktrees\")).filter(value => value.status !== \"deleted\")\n .sort((left, right) => left.createdAt - right.createdAt);\n }\n\n async attachWorktreeSession(id: string, sessionId: string, attached = true): Promise<ManagedGitWorktree> {\n return this.updateWorktree(id, record => ({ ...record,\n sessions: attached ? [...new Set([...record.sessions, sessionId])] : record.sessions.filter(value => value !== sessionId) }));\n }\n\n async trackWorktreeProcess(id: string, pid: number, attached = true): Promise<ManagedGitWorktree> {\n if (!Number.isSafeInteger(pid) || pid <= 0) throw new Error(\"Worktree process PID is invalid\");\n return this.updateWorktree(id, record => ({ ...record,\n processes: attached ? [...new Set([...record.processes, pid])] : record.processes.filter(value => value !== pid) }));\n }\n\n async failWorktree(id: string, error: unknown): Promise<ManagedGitWorktree> {\n return this.updateWorktree(id, record => ({ ...record, status: \"failed\", error: errorMessage(error) }));\n }\n\n async deleteWorktree(id: string): Promise<void> {\n this.assertWritable();\n await this.assertIdentity();\n const lock = await this.acquireLock(\"worktrees\");\n try {\n const record = await this.worktree(id);\n const target = resolve(record.path);\n const expected = resolve(this.worktreesRoot, this.projectId, id);\n if (target !== expected || !isWithin(resolve(this.worktreesRoot, this.projectId), target)) throw new Error(\"Worktree path is outside its managed directory\");\n if (record.status !== \"ready\" && record.status !== \"failed\") throw new Error(\"Only a ready or failed registered worktree can be deleted\");\n if (record.sessions.length > 0) throw new GitWorkspaceConflictError(\"Worktree still has associated sessions\");\n for (const pid of record.processes) if (processAlive(pid)) throw new GitWorkspaceConflictError(\"Worktree still has running processes\");\n if (!await exists(target)) {\n const branches = await this.git.branchLocal();\n if (branches.all.includes(record.branch)) throw new Error(\"Missing worktree still has a Git branch to preserve\");\n await this.writeRecord(\"worktrees\", id, { ...record, status: \"deleted\" });\n return;\n }\n if ((await lstat(target)).isSymbolicLink()) throw new Error(\"Worktree path has been replaced by a symbolic link\");\n const actualTarget = await realpath(target);\n const actualParent = await realpath(resolve(this.worktreesRoot, this.projectId));\n if (!isWithin(actualParent, actualTarget) || actualTarget === actualParent) throw new Error(\"Resolved worktree path is outside its managed directory\");\n const git = simpleGit({ baseDir: target, maxConcurrentProcesses: 1 });\n if (await realpath((await git.revparse([\"--show-toplevel\"])).trim()) !== actualTarget) throw new Error(\"Registered worktree identity has changed\");\n const actualCommon = await realpath(resolve(target, (await git.revparse([\"--git-common-dir\"])).trim()));\n if (actualCommon !== this.commonDirectory) throw new Error(\"Registered worktree repository has changed\");\n if (!(await git.status([\"--untracked-files=all\", \"--ignored\"])).isClean()) throw new GitWorkspaceConflictError(\"Worktree has file changes or ignored files to preserve\");\n const current = (await git.status()).current;\n if (current !== record.branch) throw new Error(\"Registered worktree branch has changed\");\n const sourceWorkspace = await realpath(record.sourceWorkspace);\n if (sourceWorkspace !== record.sourceWorkspace || !isWithin(record.repository, sourceWorkspace)) {\n throw new GitWorkspaceConflictError(\"Registered source workspace identity has changed\");\n }\n const source = simpleGit({ baseDir: sourceWorkspace, maxConcurrentProcesses: 1 });\n const sourceRoot = await realpath((await source.revparse([\"--show-toplevel\"])).trim());\n const sourceCommon = await realpath(resolve(sourceWorkspace, (await source.revparse([\"--git-common-dir\"])).trim()));\n if (sourceRoot !== record.repository || sourceCommon !== this.commonDirectory) {\n throw new GitWorkspaceConflictError(\"Registered source repository identity has changed\");\n }\n const sourceHead = (await source.revparse([\"--verify\", \"HEAD^{commit}\"])).trim();\n const branchHead = await git.revparse([\"--verify\", \"HEAD\"]);\n const base = (await this.git.raw([\"merge-base\", sourceHead, branchHead.trim()])).trim();\n if (base !== branchHead.trim()) throw new GitWorkspaceConflictError(\"Worktree contains commits not included in the source workspace\");\n await this.git.raw([\"worktree\", \"remove\", target]);\n if (await exists(target)) throw new Error(\"Git worktree directory removal did not complete\");\n await this.git.deleteLocalBranch(record.branch, false);\n await this.writeRecord(\"worktrees\", id, { ...record, status: \"deleted\" });\n } finally { await lock.close(); }\n }\n\n private async saveCheckpoint(options: { sessionId: string; runId?: string; runIds?: readonly string[]; historyPosition?: number | string }, fromCommit: string | undefined,\n message: string, initial: boolean, outcome: GitRoundCompletion[\"outcome\"]): Promise<GitCheckpoint> {\n const id = randomUUID();\n const { state, files: status } = await this.inspectStatus();\n if (!status) throw new Error(\"Git checkpoint requires a managed repository\");\n const base: GitCheckpoint = { id, ...options, workspace: this.workspace, repository: this.repository!,\n ...(fromCommit === undefined ? state.commit === undefined ? {} : { fromCommit: state.commit } : { fromCommit }),\n ...(state.branch === undefined ? {} : { branch: state.branch }), createdAt: Date.now(), status: \"unchanged\" };\n let appliedCommit: string | undefined;\n try {\n if (outcome !== \"completed\" || !this.autoCommit || this.readOnly) {\n const value: GitCheckpoint = { ...base, status: state.commit === undefined || !status.isClean() ? \"uncommitted\" : \"unchanged\",\n ...(state.commit === undefined ? {} : { commit: state.commit }) };\n if (!this.readOnly) await this.saveProtectedCheckpoint(value);\n return value;\n }\n await this.assertOperational(status);\n const paths = await this.commitPaths(status);\n const commitNeeded = state.commit === undefined || paths.length > 0;\n if (!commitNeeded) {\n const value: GitCheckpoint = { ...base, commit: state.commit!, status: \"unchanged\" };\n await this.saveProtectedCheckpoint(value);\n return value;\n }\n if (!/^[\\x20-\\x7e\\r\\n]+$/u.test(message) || !/[A-Za-z]/u.test(message)) throw new Error(\"Automatic Git commit message must be English\");\n const request: GitCommitRequest = { workspace: this.workspace, sessionId: options.sessionId,\n ...(options.runId === undefined ? {} : { runId: options.runId }), initial, message, paths };\n if (this.options.authorizeCommit !== undefined && !await this.options.authorizeCommit(request)) throw new Error(\"Git commit authorization was rejected\");\n if (paths.length > 0) await this.git.add([\"--all\", \"--\", ...paths.map(literalPath)]);\n const tree = (await this.git.raw([\"write-tree\"])).trim();\n const intent: CommitIntent = { checkpoint: base, phase: \"planned\", tree };\n await this.writeIntent(intent);\n await this.git.commit(message, [], state.commit === undefined ? { \"--allow-empty\": null } : {});\n const commit = await this.resolveCommit(\"HEAD\");\n if (commit === state.commit) throw new Error(\"Git commit did not create a new version; inspect project Hooks and signing configuration\");\n appliedCommit = commit;\n await this.writeIntent({ ...intent, phase: \"committed\", commit });\n const remaining = await this.commitPaths(await this.git.status([\"--untracked-files=all\"]));\n if (remaining.length > 0) {\n const error = new Error(\"Workspace changed during Git commit; the created commit is partial and working changes remain\");\n await this.writeIntent({ ...intent, checkpoint: { ...base, commit, status: \"failed\", error: error.message }, phase: \"committed\", commit });\n throw error;\n }\n const value: GitCheckpoint = { ...base, commit, status: \"committed\" };\n await this.saveProtectedCheckpoint(value);\n await rm(this.intentPath());\n return value;\n } catch (error) {\n const value: GitCheckpoint = { ...base, ...(appliedCommit === undefined ? {} : { commit: appliedCommit }), status: \"failed\", error: errorMessage(error) };\n if (!this.readOnly) {\n try { await this.saveProtectedCheckpoint(value); }\n catch (persistenceError) { throw new GitCheckpointError(value, new AggregateError([error, persistenceError], \"Checkpoint and failure record could not be persisted\")); }\n }\n throw new GitCheckpointError(value, error);\n }\n }\n\n private async commitPaths(status: StatusResult): Promise<string[]> {\n const paths = new Set<string>();\n for (const path of status.not_added) {\n if (status.staged.includes(path)) throw new Error(`Staged and working content differ for ${path}`);\n }\n for (const file of status.files) {\n if (file.index !== \" \" && file.index !== \"?\" && file.working_dir !== \" \" && file.working_dir !== \"?\") {\n throw new Error(`Staged and working content differ for ${file.path}`);\n }\n for (const path of [file.path, ...(file.from === undefined ? [] : [file.from])]) {\n if (this.excluded(path)) {\n if (file.index !== \" \" && file.index !== \"?\") throw new Error(`Excluded file is staged: ${path}`);\n continue;\n }\n const absolute = resolve(this.repository!, path);\n if (!isWithin(this.repository!, absolute)) throw new Error(\"Git path is outside the repository\");\n if (await exists(absolute) && (await lstat(absolute)).isDirectory()) {\n if (await exists(join(absolute, \".git\"))) throw new Error(`Nested Git repository requires separate management: ${path}`);\n }\n paths.add(path);\n }\n }\n return [...paths];\n }\n\n private excluded(path: string): boolean {\n const normalized = path.replaceAll(\"\\\\\", \"/\");\n const name = normalized.slice(normalized.lastIndexOf(\"/\") + 1).toLowerCase();\n if ((name === \".env\" || name.startsWith(\".env.\")) && name !== \".env.example\") return true;\n if ([\"credentials.json\", \"id_rsa\", \"id_ed25519\", \"id_ecdsa\", \"secrets.json\", \"secrets.yaml\", \"secrets.yml\"].includes(name)) return true;\n if (/\\.(?:pem|p12|pfx|key)$/iu.test(name)) return true;\n return (this.options.excludedPaths ?? []).some(value => {\n const excluded = this.relativeFile(value).replaceAll(\"\\\\\", \"/\").replace(/\\/$/u, \"\");\n return normalized === excluded || normalized.startsWith(`${excluded}/`);\n });\n }\n\n private async assertOperational(knownStatus?: StatusResult): Promise<void> {\n await this.assertIdentity();\n const status = knownStatus ?? await this.git.status();\n if (status.conflicted.length > 0) throw new Error(\"Git repository contains unresolved conflicts\");\n const names = [\"MERGE_HEAD\", \"REBASE_HEAD\", \"CHERRY_PICK_HEAD\", \"REVERT_HEAD\", \"rebase-merge\", \"rebase-apply\", \"sequencer\"];\n const paths = (await this.git.revparse(names.flatMap(name => [\"--git-path\", name]))).trim().split(\"\\n\");\n if (paths.length !== names.length) throw new Error(\"Git returned an invalid operation path list\");\n for (const path of paths) {\n if (await exists(resolve(this.repository!, path))) throw new Error(\"Git history operation is still active\");\n }\n if ((await this.git.subModule([\"status\"])).trim() !== \"\") throw new Error(\"Git submodules require separate checkpoint management\");\n }\n\n private async assertIdentity(): Promise<void> {\n this.requireRepository();\n const identity = await repositoryIdentity(this.reader, this.repository!);\n if (identity.repository !== this.repository || identity.commonDirectory !== this.commonDirectory) throw new Error(\"Workspace Git repository identity changed; reopen the workspace\");\n }\n\n private async recoverIntent(): Promise<void> {\n if (this.readOnly) return;\n const intent = await readJson<CommitIntent>(this.intentPath());\n if (intent === undefined) return;\n const state = await this.status();\n if (state.commit === undefined) {\n if (intent.phase === \"planned\" && intent.checkpoint.fromCommit === undefined) {\n await rm(this.intentPath());\n return;\n }\n throw new Error(\"Pending checkpoint commit cannot be recovered without Git HEAD\");\n }\n let commit = intent.commit;\n if (intent.phase === \"planned\") {\n if (state.commit === intent.checkpoint.fromCommit) {\n await rm(this.intentPath());\n return;\n }\n const tree = (await this.git.revparse([`${state.commit}^{tree}`])).trim();\n const parents = (await this.git.show([\"--no-patch\", \"--format=%P\", state.commit])).trim();\n if (tree !== intent.tree || parents !== (intent.checkpoint.fromCommit ?? \"\")) {\n throw new Error(\"Pending checkpoint requires inspection because Git history changed\");\n }\n commit = state.commit;\n }\n if (commit === undefined) throw new Error(\"Pending checkpoint has no committed version\");\n await this.resolveCommit(commit);\n const remaining = state.commit === commit ? await this.commitPaths(await this.git.status([\"--untracked-files=all\"])) : [];\n const incomplete = intent.checkpoint.status === \"failed\" || remaining.length > 0;\n await this.saveProtectedCheckpoint({ ...intent.checkpoint, commit, status: incomplete ? \"failed\" : \"committed\", recovered: true,\n ...(incomplete ? { error: intent.checkpoint.error ?? \"Workspace has unsaved changes after the recovered Git commit\" } : {}) });\n await rm(this.intentPath());\n }\n\n private async saveProtectedCheckpoint(value: GitCheckpoint): Promise<void> {\n if (value.commit !== undefined) {\n await this.git.raw([\"update-ref\", `refs/may/checkpoints/${value.id}`, value.commit]);\n if (value.fromCommit !== undefined) await this.git.raw([\"update-ref\", `refs/may/checkpoint-starts/${value.id}`, value.fromCommit]);\n }\n await this.writeRecord(\"checkpoints\", value.id, value);\n }\n\n private async head(status: StatusResult): Promise<string | undefined> {\n if (status.current?.startsWith(\"No commits yet on \") || status.current?.startsWith(\"Initial commit on \")) return undefined;\n try { return await this.resolveCommit(\"HEAD\"); }\n catch (error) {\n if (await this.reader.raw([\"rev-parse\", \"--is-inside-work-tree\"]) !== \"true\") throw error;\n const branches = await this.reader.branchLocal();\n if (branches.all.length === 0 && !status.detached) return undefined;\n throw error;\n }\n }\n\n private async resolveCommit(value: string): Promise<string> {\n if (value.startsWith(\"-\") || value.includes(\"\\0\") || value.includes(\"\\n\")) throw new Error(\"Git version is invalid\");\n return (await this.reader.revparse([\"--verify\", `${value}^{commit}`])).trim();\n }\n\n private relativeFile(value: string): string {\n const absolute = isAbsolute(value) ? resolve(value) : resolve(this.repository ?? this.workspace, value);\n const root = this.repository ?? this.workspace;\n if (!isWithin(root, absolute) || absolute === root) throw new Error(\"Git file path must remain inside the repository\");\n return relative(root, absolute).replaceAll(\"\\\\\", \"/\");\n }\n\n private async assertFileParents(path: string): Promise<void> {\n const absolute = resolve(this.repository!, path);\n if (path === \".git\" || path.startsWith(\".git/\") || path.includes(\"/.git/\")) throw new Error(\"Git metadata cannot be restored\");\n let parent = resolve(absolute, \"..\");\n while (parent !== this.repository) {\n if (!isWithin(this.repository!, parent)) throw new Error(\"File parent is outside the repository\");\n if (await exists(parent)) {\n const value = await lstat(parent);\n if (value.isSymbolicLink() || !value.isDirectory()) throw new Error(\"File restoration parent is not a regular directory\");\n }\n parent = resolve(parent, \"..\");\n }\n }\n\n private async acquireLock(scope = digest(this.repository ?? this.workspace)): Promise<{ close(): Promise<void> }> {\n if (this.readOnly) return { close: async () => {} };\n await mkdir(this.directory, { recursive: true });\n const path = join(this.directory, `${scope}.lock`);\n return withFileAccess(path, \"exclusive\", async () => {\n let handle: FileHandle;\n try { handle = await open(path, \"wx\", 0o600); }\n catch (error) {\n if (!isFsError(error, \"EEXIST\")) throw error;\n const owner = await readLockOwner(path);\n if (owner.hostname !== hostname() || processAlive(owner.pid)) throw new GitWorkspaceConflictError(\"Git workspace is already in use by another process\", { cause: error });\n const reclaimPath = `${path}.reclaim`;\n const reclaim = await open(reclaimPath, \"wx\", 0o600);\n try {\n const latest = await readLockOwner(path);\n if (latest.hostname !== hostname() || processAlive(latest.pid)) throw new GitWorkspaceConflictError(\"Git workspace lock changed during recovery\");\n await rm(path);\n handle = await open(path, \"wx\", 0o600);\n } finally { await reclaim.close(); await rm(reclaimPath); }\n }\n await handle.writeFile(JSON.stringify({ pid: process.pid, hostname: hostname() }));\n await handle.sync();\n let closing: Promise<void> | undefined;\n return { close: () => closing ??= (async () => {\n try {\n await withFileAccess(path, \"exclusive\", async () => {\n try { await handle.close(); }\n finally { await rm(path); }\n });\n } finally { await handle.close(); }\n })() };\n });\n }\n\n private async updateWorktree(id: string, update: (record: ManagedGitWorktree) => ManagedGitWorktree): Promise<ManagedGitWorktree> {\n this.assertWritable();\n const lock = await this.acquireLock(\"worktrees\");\n try {\n const record = await this.worktree(id);\n if (record.status !== \"ready\") throw new Error(\"Worktree is unavailable\");\n const value = update(record);\n await this.writeRecord(\"worktrees\", id, value);\n return value;\n } finally { await lock.close(); }\n }\n\n private async worktree(id: string): Promise<ManagedGitWorktree> {\n validateId(id);\n const value = await readJson<ManagedGitWorktree>(join(this.directory, \"worktrees\", `${id}.json`), !this.readOnly);\n if (!value || value.projectId !== this.projectId || value.id !== id) throw new Error(\"Worktree is not registered for this project\");\n return value;\n }\n\n private async readRecords<T>(kind: string): Promise<T[]> {\n const directory = join(this.directory, kind);\n if (!await exists(directory)) return [];\n const values: T[] = [];\n for (const name of await readdir(directory)) {\n if (name.endsWith(\".json\")) {\n const path = join(directory, name);\n values.push(await withFileAccess(path, \"shared\", async () => JSON.parse(await readFile(path, \"utf8\")) as T,\n { initialize: !this.readOnly }));\n }\n }\n return values;\n }\n\n private async writeRecord(kind: string, id: string, value: unknown): Promise<void> {\n validateId(id);\n await writeJson(join(this.directory, kind, `${id}.json`), value);\n }\n\n private intentPath(): string { return join(this.directory, `${digest(this.repository ?? this.workspace)}.intent.json`); }\n private writeIntent(value: CommitIntent): Promise<void> { return writeJson(this.intentPath(), value); }\n private requireRepository(): void { if (this.repository === undefined) throw new Error(\"Workspace has no Git repository\"); }\n private assertWritable(): void { if (this.readOnly) throw new Error(\"Git workspace is read-only\"); }\n}\n\nfunction digest(value: string): string { return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 24); }\nasync function repositoryIdentity(git: SimpleGit, workspace: string): Promise<{ repository: string; commonDirectory: string }> {\n const paths = (await git.revparse([\"--show-toplevel\", \"--git-common-dir\"])).trim().split(\"\\n\");\n if (paths.length !== 2 || !paths[0] || !paths[1]) throw new Error(\"Git returned an invalid repository identity\");\n return { repository: await realpath(paths[0]), commonDirectory: await realpath(resolve(workspace, paths[1])) };\n}\n\nfunction validateId(value: string): void { if (!/^[a-zA-Z0-9_-]+$/u.test(value)) throw new Error(\"Git record ID is invalid\"); }\nfunction literalPath(value: string): string { return `:(literal)${value}`; }\nfunction diffStatus(value: unknown): GitDiffFile[\"status\"] {\n switch (value) {\n case \"A\": return \"added\";\n case \"D\": return \"deleted\";\n case \"M\": return \"modified\";\n case \"R\": return \"renamed\";\n case \"C\": return \"copied\";\n case \"T\": return \"typechanged\";\n default: return \"unknown\";\n }\n}\nfunction isWithin(root: string, path: string): boolean {\n const value = relative(root, path);\n return value === \"\" || (!value.startsWith(`..${sep}`) && value !== \"..\" && !isAbsolute(value));\n}\nfunction isFsError(error: unknown, code: string): boolean { return typeof error === \"object\" && error !== null && \"code\" in error && error.code === code; }\nfunction errorMessage(error: unknown): string { return error instanceof Error ? error.message : String(error); }\nasync function readLockOwner(path: string): Promise<{ pid: number; hostname: string }> {\n let owner: unknown;\n try { owner = JSON.parse(await readFile(path, \"utf8\")); }\n catch (error) {\n if (error instanceof SyntaxError || isFsError(error, \"ENOENT\")) {\n throw new GitWorkspaceConflictError(\"Git workspace lock metadata is incomplete or changed; verify its owner before recovery\", { cause: error });\n }\n throw error;\n }\n if (owner === null || typeof owner !== \"object\" || !(\"pid\" in owner) || !(\"hostname\" in owner) ||\n !Number.isSafeInteger(owner.pid) || (owner.pid as number) <= 0 || typeof owner.hostname !== \"string\") {\n throw new GitWorkspaceConflictError(\"Git workspace lock metadata is incomplete; verify its owner before recovery\");\n }\n return owner as { pid: number; hostname: string };\n}\nfunction processAlive(pid: number): boolean {\n if (!Number.isSafeInteger(pid) || pid <= 0) throw new Error(\"Git lock contains an invalid PID\");\n try { process.kill(pid, 0); return true; }\n catch (error) { if (isFsError(error, \"ESRCH\")) return false; throw error; }\n}\nasync function exists(path: string): Promise<boolean> {\n try { await access(path); return true; }\n catch (error) { if (isFsError(error, \"ENOENT\")) return false; throw error; }\n}\nasync function readJson<T>(path: string, initialize = true): Promise<T | undefined> {\n try {\n if (!initialize) await access(path);\n return await withFileAccess(path, \"shared\", async () => JSON.parse(await readFile(path, \"utf8\")) as T, { initialize });\n }\n catch (error) { if (isFsError(error, \"ENOENT\")) return undefined; throw error; }\n}\nasync function writeJson(path: string, value: unknown): Promise<void> {\n await mkdir(resolve(path, \"..\"), { recursive: true });\n const temporary = `${path}.${randomUUID()}.pending`;\n const file = await open(temporary, \"wx\", 0o600);\n try { await file.writeFile(`${JSON.stringify(value)}\\n`); await file.sync(); }\n finally { await file.close(); }\n await withFileAccess(path, \"exclusive\", () => rename(temporary, path));\n}\nfunction fingerprint(content: Buffer, mode: string): string { return createHash(\"sha256\").update(mode).update(content).digest(\"hex\"); }\nasync function regularFile(path: string): Promise<{ content: Buffer; mode: string } | undefined> {\n let stat;\n try { stat = await lstat(path); }\n catch (error) { if (isFsError(error, \"ENOENT\")) return undefined; throw error; }\n if (!stat.isFile() || stat.isSymbolicLink()) throw new Error(\"File restoration supports regular files only\");\n return { content: await readFile(path), mode: (stat.mode & 0o111) === 0 ? \"100644\" : \"100755\" };\n}\n", "/**\n * Wraps one or more file paths in an object that `parseCli` recognises as\n * explicit pathspecs, routing them to `ParsedCLI.paths` regardless of whether\n * a `--` separator token is present.\n */\n\n// biome-ignore lint/complexity/noBannedTypes: <Uses String object to satisfy WeakMap requiremetn>\nconst cache = new WeakMap<String, string[]>();\n\nexport function pathspec(...paths: string[]): string {\n const key = new String(paths);\n cache.set(key, paths);\n return key as string;\n}\n\nexport function isPathSpec(value: unknown): value is string {\n return value instanceof String && cache.has(value);\n}\n\nexport function toPaths(value: string): string[] {\n return cache.get(value) ?? [];\n}\n", "export interface Flag {\n name: string;\n value?: string;\n /** Value came from the next token rather than being embedded after `=`. */\n absorbedNext: boolean;\n /** Switch appeared before the git sub-command. */\n isGlobal: boolean;\n}\n\nexport function* scopedFlags(flags: Flag[], scope: 'global' | 'task') {\n const findGlobal = scope === 'global';\n for (const flag of flags) {\n if (flag.isGlobal === findGlobal) {\n yield flag;\n }\n }\n}\n", "// Flags that unambiguously signal a write operation on git config.\nexport const CONFIG_WRITE_FLAGS = new Set([\n '--add',\n '--edit',\n '--remove-section',\n '--rename-section',\n '--replace-all',\n '--unset',\n '--unset-all',\n '-e',\n]);\n\n// Flags that unambiguously signal a read operation.\nexport const CONFIG_READ_FLAGS = new Set([\n '--get',\n '--get-all',\n '--get-color',\n '--get-colorbool',\n '--get-regexp',\n '--get-urlmatch',\n '--list',\n '-l',\n]);\n\n// Sub-command verbs accepted as the first positional by newer git versions.\nexport const CONFIG_WRITE_VERBS = new Set([\n 'edit',\n 'remove-section',\n 'rename-section',\n 'set',\n 'unset',\n]);\nexport const CONFIG_READ_VERBS = new Set(['get', 'get-color', 'get-colorbool', 'list']);\n", "import type { ConfigScope } from '../args/parse-argv.types';\nimport { type Flag, scopedFlags } from '../flags/flags.helpers';\nimport type { ConfigOperation } from './config.types';\nimport {\n CONFIG_READ_FLAGS,\n CONFIG_READ_VERBS,\n CONFIG_WRITE_FLAGS,\n CONFIG_WRITE_VERBS,\n} from './config-operands';\n\nexport function detectConfigAction(flags: Flag[], positionals: string[]): ConfigOperation | null {\n for (const { name } of scopedFlags(flags, 'task')) {\n if (CONFIG_WRITE_FLAGS.has(name)) {\n return configOperation(true, positionals);\n }\n if (CONFIG_READ_FLAGS.has(name)) {\n return configOperation(false, positionals);\n }\n }\n\n const verb = positionals.at(0)?.toLowerCase();\n\n if (verb === undefined) {\n return null;\n }\n\n if (CONFIG_WRITE_VERBS.has(verb)) {\n return configOperation(true, positionals.slice(1));\n }\n\n if (CONFIG_READ_VERBS.has(verb)) {\n return configOperation(false, positionals.slice(1));\n }\n\n if (positionals.length === 1) {\n return configOperation(false, positionals);\n }\n\n return configOperation(true, positionals);\n}\n\nfunction configOperation(isWrite = false, positionals: string[] = []): ConfigOperation | null {\n const key = positionals.at(0)?.toLowerCase();\n\n if (key === undefined) {\n return null;\n }\n\n return {\n isWrite,\n isRead: !isWrite,\n key,\n value: positionals.at(1),\n };\n}\n\nexport function toOperation(scope: ConfigScope, operation: ConfigOperation) {\n if (operation.isWrite && operation.value !== undefined) {\n return { key: operation.key, value: operation.value, scope };\n }\n return { key: operation.key, scope };\n}\n", "import type { ConfigScope, ConfigWrite, ParsedConfigActivity } from '../args/parse-argv.types';\nimport { type Flag, scopedFlags } from '../flags/flags.helpers';\nimport type { ConfigOperation } from './config.types';\nimport { detectConfigAction, toOperation } from './detect-config-action';\n\nfunction parseAssignment(raw: string | undefined): { key: string; value: string } | null {\n const eq = raw?.indexOf('=') || -1;\n\n if (!raw || eq < 0) {\n return null;\n }\n\n return {\n key: raw.slice(0, eq).trim().toLowerCase(),\n value: raw.slice(eq + 1),\n };\n}\n\nfunction detectConfigScope(flags: Flag[]): ConfigScope {\n for (const { name } of scopedFlags(flags, 'task')) {\n switch (name) {\n case '--global':\n return 'global';\n case '--system':\n return 'system';\n case '--worktree':\n return 'worktree';\n case '--local':\n return 'local';\n case '--file':\n case '-f':\n return 'file';\n }\n }\n return 'local';\n}\n\nfunction detectConfigOverrideScope({ name }: Flag): ConfigScope | void {\n if (name === '-c' || name === '--config') {\n return 'inline';\n }\n if (name === '--config-env') {\n return 'env';\n }\n}\n\n/**\n * Generates the stream of ConfigWrite settings found in the supplied flags,\n * triggered by `-c` and `--config` for inline configuration and `--config-env`\n * to set a config setting based on environment variable.\n */\nfunction* collectWriteFlags(flags: Flag[]): Generator<ConfigWrite> {\n for (const flag of flags) {\n const scope = detectConfigOverrideScope(flag);\n const assignment = scope && parseAssignment(flag.value);\n\n if (assignment) {\n yield {\n ...assignment,\n scope,\n };\n }\n }\n}\n\nexport function collectConfigAccess(\n task: string | null,\n flags: Flag[],\n positionals: string[]\n): ParsedConfigActivity {\n const parsedConfig: ParsedConfigActivity = {\n read: [],\n write: [...collectWriteFlags(flags)],\n };\n\n if (task === 'config') {\n appendParsedConfigAction(\n parsedConfig,\n detectConfigScope(flags),\n detectConfigAction(flags, positionals)\n );\n }\n\n return parsedConfig;\n}\n\nfunction appendParsedConfigAction(\n parsedConfig: ParsedConfigActivity,\n scope: ConfigScope,\n action: ConfigOperation | null\n) {\n if (action === null) {\n return;\n }\n\n const config = toOperation(scope, action);\n if (action.isWrite) {\n parsedConfig.write.push(config);\n } else {\n parsedConfig.read.push(config);\n }\n}\n", "// ── Option tables ─────────────────────────────────────────────────────────────\n//\n// Each scope has:\n// short – Map<char, consumesNext> (known single-letter switches; true = takes next token)\n// long – Set<stem> (long switch stems, without --, that take the next token)\n//\n// Only switches listed here are \"known\". An unknown char anywhere in a combined\n// cluster causes the entire cluster to be kept as one opaque token.\n\nexport interface FlagSpec {\n readonly short: ReadonlyMap<string, boolean>;\n readonly long: ReadonlySet<string>;\n}\n\nconst UNIVERSAL: FlagSpec = {\n short: new Map([\n ['c', true], // -c <k=v> set config key for this invocation\n ]),\n long: new Set(),\n};\n\nexport const GLOBAL: FlagSpec = {\n short: new Map([\n ['C', true], // -C <path> change working directory\n ['P', false], // -P no pager (alias for --no-pager)\n ['h', false], // -h help\n ['p', false], // -p paginate\n ['v', false], // -v version\n ...UNIVERSAL.short.entries(),\n ]),\n long: new Set([\n 'attr-source',\n 'config-env',\n 'exec-path',\n 'git-dir',\n 'list-cmds',\n 'namespace',\n 'super-prefix',\n 'work-tree',\n ]),\n};\n\nconst COMMANDS: Record<string, FlagSpec> = {\n clone: {\n short: new Map([\n ['b', true], // -b <branch>\n ['j', true], // -j <n> parallel jobs\n ['l', false], // -l local\n ['n', false], // -n no-checkout\n ['o', true], // -o <name> remote name\n ['q', false], // -q quiet\n ['s', false], // -s shared\n ['u', true], // -u <upload-pack>\n ]),\n long: new Set(['branch', 'config', 'jobs', 'origin', 'upload-pack', 'u', 'template']),\n },\n commit: {\n short: new Map([\n ['C', true], // -C <commit> reuse message\n ['F', true], // -F <file> read message from file\n ['c', true], // -c <commit> reedit message\n ['m', true], // -m <msg>\n ['t', true], // -t <template>\n ]),\n long: new Set(['file', 'message', 'reedit-message', 'reuse-message', 'template']),\n },\n config: {\n short: new Map([\n ['e', false], // -e open editor\n ['f', true], // -f <file>\n ['l', false], // -l list\n ]),\n long: new Set(['blob', 'comment', 'default', 'file', 'type', 'value']),\n },\n fetch: {\n short: new Map(),\n long: new Set(['upload-pack']),\n },\n init: {\n short: new Map(),\n long: new Set(['template']),\n },\n pull: {\n short: new Map(),\n long: new Set(['upload-pack']),\n },\n push: {\n short: new Map(),\n long: new Set(['exec', 'receive-pack']),\n },\n rebase: {\n short: new Map([\n ['X', true], // -X <option> strategy option\n ['f', false], // -f force-rebase\n ['i', false], // -i interactive\n ['k', false], // -k keep-base\n ['m', false], // -m merge\n ['n', false], // -n no-stat\n ['q', false], // -q quiet\n ['r', false], // -r rebase-merges\n ['s', true], // -s <strategy>\n ['v', false], // -v verbose\n ['x', true], // -x <cmd> exec\n ]),\n long: new Set(['exec', 'onto', 'strategy', 'strategy-option']),\n },\n};\n\nconst EMPTY: FlagSpec = { short: new Map(), long: new Set() };\n\nexport function getFlagSpecForTask(task?: string | null) {\n const spec = COMMANDS[task ?? ''] ?? EMPTY;\n\n return {\n short: new Map([...UNIVERSAL.short.entries(), ...spec.short.entries()]),\n long: spec.long,\n };\n}\n", "import { GLOBAL } from './flag-specs';\n\n/** Parse a single raw token (e.g. `'-m'`, `'--amend'`, `'-uc'`) into one or\n * more switch descriptors. Values are not yet resolved for needsNext=true. */\nexport function expandToken(\n raw: string,\n spec = GLOBAL\n): Array<{\n name: string;\n value?: string;\n needsNext: boolean;\n}> {\n if (raw.startsWith('--')) {\n const eq = raw.indexOf('=');\n if (eq > 2) {\n return [{ name: raw.slice(0, eq), value: raw.slice(eq + 1), needsNext: false }];\n }\n const stem = raw.slice(2);\n return [{ name: raw, needsNext: spec.long.has(stem) }];\n }\n\n // Single short switch\n if (raw.length === 2) {\n const char = raw.charAt(1);\n const consumes = spec.short.get(char);\n return [{ name: raw, needsNext: consumes === true }];\n }\n\n // Combined short cluster: try to expand char-by-char\n return expandCluster(raw, spec.short);\n}\n\nfunction expandCluster(\n raw: string,\n shortSpec: ReadonlyMap<string, boolean>\n): Array<{ name: string; value?: string; needsNext: boolean }> {\n const chars = raw.slice(1).split('');\n const result: Array<{ name: string; value?: string; needsNext: boolean }> = [];\n\n for (let i = 0; i < chars.length; i++) {\n const char = chars[i];\n const consumes = shortSpec.get(char);\n\n if (consumes === undefined) {\n // Unknown char: keep the whole raw token as opaque\n return [{ name: raw, needsNext: false }];\n }\n\n if (consumes) {\n const remainder = chars.slice(i + 1).join('');\n if (remainder) {\n const remainderAllKnown = [...remainder].every((c) => shortSpec.has(c));\n if (!remainderAllKnown) {\n // Remaining chars are the embedded value, not separate flags\n result.push({ name: `-${char}`, value: remainder, needsNext: false });\n return result;\n }\n }\n }\n\n result.push({ name: `-${char}`, needsNext: consumes });\n }\n\n return result;\n}\n", "import { expandToken } from '../tokens/token-expander';\nimport type { Flag } from './flags.helpers';\n\nexport interface GlobalFlags {\n flags: Flag[];\n taskIndex: number;\n}\n\nexport function parseGlobalFlags(tokens: readonly unknown[], flags: Flag[] = []): GlobalFlags {\n let i = 0;\n\n while (i < tokens.length) {\n const raw = String(tokens[i]);\n if (!raw.startsWith('-') || raw.length < 2) break;\n\n const parsed = expandToken(raw);\n let next = i + 1;\n\n for (const token of parsed) {\n const flag: Flag = {\n name: token.name,\n value: token.value,\n absorbedNext: false,\n isGlobal: true,\n };\n if (token.needsNext && flag.value === undefined && next < tokens.length) {\n flag.value = String(tokens[next]);\n flag.absorbedNext = true;\n next++;\n }\n flags.push(flag);\n }\n\n i = next;\n }\n\n return { flags, taskIndex: i };\n}\n", "import { isPathSpec, toPaths } from '@simple-git/args-pathspec';\n\nimport { getFlagSpecForTask } from '../tokens/flag-specs';\nimport { expandToken } from '../tokens/token-expander';\nimport type { Flag } from './flags.helpers';\n\ntype TaskFlags = {\n flags: Flag[];\n positionals: string[];\n pathspecs: string[];\n};\n\nexport function parseTaskFlags(\n tokens: readonly unknown[],\n task: string | null,\n flags: Flag[] = []\n): TaskFlags {\n const spec = getFlagSpecForTask(task);\n const positionals: string[] = [];\n const pathspecs: string[] = [];\n\n let i = 0;\n while (i < tokens.length) {\n const current = tokens[i];\n\n if (isPathSpec(current)) {\n pathspecs.push(...toPaths(current as string));\n i++;\n continue;\n }\n\n const raw = String(current);\n\n if (raw === '--') {\n for (let j = i + 1; j < tokens.length; j++) {\n const t = tokens[j];\n isPathSpec(t) ? pathspecs.push(...toPaths(t as string)) : pathspecs.push(String(t));\n }\n break;\n }\n\n if (!raw.startsWith('-') || raw.length < 2) {\n positionals.push(raw);\n i++;\n continue;\n }\n\n const parsed = expandToken(raw, spec);\n let next = i + 1;\n\n for (const token of parsed) {\n const flag: Flag = {\n name: token.name,\n value: token.value,\n absorbedNext: false,\n isGlobal: false,\n };\n if (\n token.needsNext &&\n flag.value === undefined &&\n next < tokens.length &&\n !isPathSpec(tokens[next])\n ) {\n flag.value = String(tokens[next]);\n flag.absorbedNext = true;\n next++;\n }\n flags.push(flag);\n }\n\n i = next;\n }\n\n return { flags, positionals, pathspecs };\n}\n", "import type { ParsedConfigActivity } from '../args/parse-argv.types';\nimport type { Vulnerability, VulnerabilityCategory } from './vulnerability.types';\n\nexport function* detectVulnerableConfigWrites({\n write,\n}: ParsedConfigActivity): Generator<Vulnerability> {\n for (const config of write) {\n for (const helper of preventUnsafeConfig) {\n const vulnerability = helper(config.key);\n if (vulnerability) {\n yield vulnerability;\n }\n }\n }\n}\n\nfunction preventConfigBuilder(\n config: string | RegExp,\n category: VulnerabilityCategory,\n message = String(config)\n) {\n const regex = typeof config === 'string' ? new RegExp(`\\\\s*${config.toLowerCase()}`) : config;\n\n return function preventCommand(key: string): Vulnerability | void {\n if (regex.test(key)) {\n return {\n category,\n message: `Configuring ${message} is not permitted without enabling ${category}`,\n };\n }\n };\n}\n\nfunction preventExpandedConfigBuilder(config: string, category: VulnerabilityCategory) {\n const regex = new RegExp(`\\\\s*${config.toLowerCase().replace(/\\./g, '(..+)?.')}`);\n return preventConfigBuilder(regex, category, config);\n}\n\nconst preventUnsafeConfig = [\n preventConfigBuilder('alias', 'allowUnsafeAlias'),\n preventConfigBuilder('core.askPass', 'allowUnsafeAskPass'),\n preventConfigBuilder('core.editor', 'allowUnsafeEditor'),\n preventConfigBuilder('core.fsmonitor', 'allowUnsafeFsMonitor'),\n preventConfigBuilder('core.gitProxy', 'allowUnsafeGitProxy'),\n preventConfigBuilder('core.hooksPath', 'allowUnsafeHooksPath'),\n preventConfigBuilder('core.pager', 'allowUnsafePager'),\n preventConfigBuilder('core.sshCommand', 'allowUnsafeSshCommand'),\n preventExpandedConfigBuilder('credential.helper', 'allowUnsafeCredentialHelper'),\n preventExpandedConfigBuilder('diff.command', 'allowUnsafeDiffExternal'),\n preventConfigBuilder('diff.external', 'allowUnsafeDiffExternal'),\n preventExpandedConfigBuilder('difftool.cmd', 'allowUnsafeDiffExternal'),\n preventExpandedConfigBuilder('diff.textconv', 'allowUnsafeDiffTextConv'),\n preventExpandedConfigBuilder('filter.clean', 'allowUnsafeFilter'),\n preventExpandedConfigBuilder('filter.process', 'allowUnsafeFilter'),\n preventExpandedConfigBuilder('filter.smudge', 'allowUnsafeFilter'),\n preventExpandedConfigBuilder('gpg.program', 'allowUnsafeGpgProgram'),\n preventConfigBuilder('include.path', 'allowUnsafeInclude'),\n preventExpandedConfigBuilder('includeIf', 'allowUnsafeInclude'),\n preventConfigBuilder('init.templateDir', 'allowUnsafeTemplateDir'),\n preventExpandedConfigBuilder('pager.', 'allowUnsafePager'),\n preventExpandedConfigBuilder('merge.driver', 'allowUnsafeMergeDriver'),\n preventExpandedConfigBuilder('mergetool.path', 'allowUnsafeMergeDriver'),\n preventExpandedConfigBuilder('mergetool.cmd', 'allowUnsafeMergeDriver'),\n preventExpandedConfigBuilder('protocol.allow', 'allowUnsafeProtocolOverride'),\n preventExpandedConfigBuilder('remote.receivepack', 'allowUnsafePack'),\n preventExpandedConfigBuilder('remote.uploadpack', 'allowUnsafePack'),\n preventConfigBuilder('uploadpack.packObjectsHook', 'allowUnsafePack'),\n preventConfigBuilder('sequence.editor', 'allowUnsafeEditor'),\n preventExpandedConfigBuilder('submodule.update', 'allowUnsafeSubmodule'),\n preventExpandedConfigBuilder('tar.command', 'allowUnsafeCommandBinaries'),\n preventExpandedConfigBuilder('trailer.cmd', 'allowUnsafeCommandBinaries'),\n preventExpandedConfigBuilder('trailer.command', 'allowUnsafeCommandBinaries'),\n preventExpandedConfigBuilder('url.insteadOf', 'allowUnsafeUrlRewrite'),\n];\n", "import type { Flag } from '../flags/flags.helpers';\nimport type { Vulnerability, VulnerabilityCategory } from './vulnerability.types';\n\nexport function* detectVulnerableFlags(\n task: null | string,\n flags: Flag[]\n): Generator<Vulnerability> {\n for (const flag of flags) {\n for (const helper of preventUnsafeFlags) {\n const vulnerability = helper(task, flag);\n if (vulnerability) {\n yield vulnerability;\n }\n }\n }\n}\n\ninterface PreventFlagOptions {\n /** Label to use in the error message in place of the matcher itself */\n name?: string;\n\n /** Only match when the switch appears before the git sub-command */\n globalOnly?: boolean;\n\n /**\n * Only match when the switch was supplied with a value - without one switches\n * such as `--git-dir` and `--exec-path` are getters rather than setters.\n */\n withValue?: boolean;\n}\n\nfunction preventFlagBuilder(\n task: string | null,\n flag: string | RegExp,\n category: VulnerabilityCategory,\n { name = String(flag), globalOnly = false, withValue = false }: PreventFlagOptions = {}\n) {\n const regex = typeof flag === 'string' ? new RegExp(`\\\\s*${flag.toLowerCase()}`) : flag;\n const message = `Use of ${task ? `${task} with option ` : ''}${name} is not permitted without enabling ${category}`;\n\n return function preventFlag(currentTask: string | null, flag: Flag): Vulnerability | void {\n if (task && currentTask !== task) {\n return;\n }\n\n if (globalOnly && !flag.isGlobal) {\n return;\n }\n\n if (withValue && flag.value === undefined) {\n return;\n }\n\n if (regex.test(flag.name)) {\n return {\n category,\n message,\n };\n }\n };\n}\n\nconst pathTakingGlobal: PreventFlagOptions = { globalOnly: true, withValue: true };\n\nconst preventUnsafeFlags = [\n preventFlagBuilder(null, /--(upload|receive)-pack/, 'allowUnsafePack', {\n name: '--upload-pack or --receive-pack',\n }),\n preventFlagBuilder('clone', /^-\\w*u/, 'allowUnsafePack'),\n preventFlagBuilder('clone', '--u', 'allowUnsafePack'),\n preventFlagBuilder('push', /^--exec$/, 'allowUnsafePack', { name: '--exec' }),\n // `git` accepts unambiguous abbreviations of long options, so `--ex` and `--exe` are `--exec`\n preventFlagBuilder('rebase', /^(-x|--ex(ec?)?)$/, 'allowUnsafeExec', { name: '-x or --exec' }),\n preventFlagBuilder(null, '--template', 'allowUnsafeTemplateDir'),\n preventFlagBuilder(null, '--exec-path', 'allowUnsafeExec', pathTakingGlobal),\n // `git` reads the configuration of whichever repository these name, so the\n // directory alone is enough to deliver config the argv guards never see\n preventFlagBuilder(null, '--git-dir', 'allowUnsafeConfigPaths', pathTakingGlobal),\n preventFlagBuilder(null, '--work-tree', 'allowUnsafeConfigPaths', pathTakingGlobal),\n preventFlagBuilder(null, /^-C$/, 'allowUnsafeConfigPaths', { ...pathTakingGlobal, name: '-C' }),\n];\n", "import type { ParsedConfigActivity } from '../args/parse-argv.types';\nimport type { Flag } from '../flags/flags.helpers';\nimport { detectVulnerableConfigWrites } from './detect-vulnerable-config-writes';\nimport { detectVulnerableFlags } from './detect-vulnerable-flags';\nimport type { Vulnerability } from './vulnerability.types';\n\nexport function vulnerabilityAnalysis(\n task: null | string,\n flags: Flag[],\n config: ParsedConfigActivity\n): Vulnerability[] {\n return [...detectVulnerableFlags(task, flags), ...detectVulnerableConfigWrites(config)];\n}\n", "import { collectConfigAccess } from '../config/analyse-config';\nimport type { Flag } from '../flags/flags.helpers';\nimport { parseGlobalFlags } from '../flags/parse-global-flags';\nimport { parseTaskFlags } from '../flags/parse-task-flags';\nimport type { Vulnerability } from '../vulnerabilities/vulnerability.types';\nimport { vulnerabilityAnalysis } from '../vulnerabilities/vulnerability-analysis';\nimport type { ParsedArgv, ParsedFlag } from './parse-argv.types';\n\n/**\n * Parse the tokens that would be forwarded to a `git` child-process and\n * return a structured summary of what the invocation does.\n */\nexport function parseArgv(...tokens: readonly unknown[]): ParsedArgv {\n const { flags, taskIndex } = parseGlobalFlags(tokens);\n\n const task = taskIndex < tokens.length ? String(tokens[taskIndex]).toLowerCase() : null;\n const taskTokens = task !== null ? tokens.slice(taskIndex + 1) : [];\n\n const { positionals, pathspecs } = parseTaskFlags(taskTokens, task, flags);\n const config = collectConfigAccess(task, flags, positionals);\n\n return {\n task,\n flags: flags.map(toParsedFlag),\n paths: pathspecs,\n config,\n vulnerabilities: vulnerabilityList(vulnerabilityAnalysis(task, flags, config)),\n };\n}\n\nfunction vulnerabilityList(vulnerabilities: Vulnerability[]) {\n return Object.defineProperty(vulnerabilities, 'vulnerabilities', {\n value: vulnerabilities,\n });\n}\n\nfunction toParsedFlag({ value, name }: Flag): ParsedFlag {\n return value !== undefined ? { name, value } : { name };\n}\n", "import type { ConfigWrite, ParsedConfigActivity } from '../args/parse-argv.types';\nimport type { Vulnerability, VulnerabilityCategory } from '../vulnerabilities/vulnerability.types';\nimport { vulnerabilityAnalysis } from '../vulnerabilities/vulnerability-analysis';\n\nconst GitEnvKeys = {\n 'editor': 'allowUnsafeEditor',\n 'git_askpass': 'allowUnsafeAskPass',\n 'git_config_global': 'allowUnsafeConfigPaths',\n 'git_config_system': 'allowUnsafeConfigPaths',\n 'git_config_count': 'allowUnsafeConfigEnvCount',\n 'git_config_parameters': 'allowUnsafeConfigEnvCount',\n 'git_config': 'allowUnsafeConfigPaths',\n 'git_editor': 'allowUnsafeEditor',\n 'git_exec_path': 'allowUnsafeExec',\n 'git_external_diff': 'allowUnsafeDiffExternal',\n 'git_pager': 'allowUnsafePager',\n 'git_proxy_command': 'allowUnsafeGitProxy',\n 'git_template_dir': 'allowUnsafeTemplateDir',\n 'git_sequence_editor': 'allowUnsafeEditor',\n 'git_ssh': 'allowUnsafeSshCommand',\n 'git_ssh_command': 'allowUnsafeSshCommand',\n 'pager': 'allowUnsafePager',\n 'prefix': 'allowUnsafeConfigPaths',\n 'ssh_askpass': 'allowUnsafeAskPass',\n 'visual': 'allowUnsafeEditor',\n} as const satisfies Record<string, VulnerabilityCategory>;\n\ntype GitEnv = Record<string, string> & {\n git_config_count?: string;\n};\n\nfunction* collectConfigByCount(env: GitEnv): Generator<ConfigWrite> {\n const count = parseInt(env.git_config_count ?? '0', 10);\n for (let index = 0; index < count; index++) {\n const key = env[`git_config_key_${index}`];\n const value = env[`git_config_value_${index}`];\n\n if (key !== undefined) {\n yield { key: key.toLowerCase().trim(), value, scope: 'env' };\n }\n }\n}\n\nfunction* collectConfigVulnerabilities(env: GitEnv): Generator<Vulnerability> {\n for (const key of Object.keys(env)) {\n if (isGitEnvKey(key)) {\n const category = GitEnvKeys[key];\n yield {\n category,\n message: `Use of \"${key.toUpperCase()}\" is not permitted without enabling ${category}`,\n };\n }\n }\n}\n\nexport function isGitEnvKey(key: string): key is keyof typeof GitEnvKeys {\n return Object.hasOwn(GitEnvKeys, key);\n}\n\nfunction prepareEnv(env: Record<string, unknown>): GitEnv {\n const gitEnv: GitEnv = {};\n for (const [key, value] of Object.entries(env)) {\n const envKey = key.toLowerCase().trim();\n if (isGitEnvKey(envKey) || envKey.startsWith('git')) {\n gitEnv[envKey] = String(value);\n }\n }\n return gitEnv;\n}\n\nexport function parseEnv(raw: Record<string, unknown>) {\n const env = prepareEnv(raw);\n const config: ParsedConfigActivity = {\n read: [],\n write: [...collectConfigByCount(env)],\n };\n const vulnerabilities = [\n ...collectConfigVulnerabilities(env),\n ...vulnerabilityAnalysis(null, [], config),\n ];\n\n return {\n config,\n vulnerabilities,\n };\n}\n", "import { parseArgv } from '../args/parse-argv';\nimport { parseEnv } from '../env/parse-env';\n\n/**\n * Retrieves just the vulnerabilities identified in the supplied varargs tokens\n * and environment variables.\n */\nexport function vulnerabilityCheck(tokens: readonly string[], env: Record<string, unknown>) {\n return [...parseArgv(...tokens).vulnerabilities, ...parseEnv(env).vulnerabilities];\n}\n", "import type { SimpleGitTask } from '../types';\n\n/**\n * The `GitError` is thrown when the underlying `git` process throws a\n * fatal exception (eg an `ENOENT` exception when attempting to use a\n * non-writable directory as the root for your repo), and acts as the\n * base class for more specific errors thrown by the parsing of the\n * git response or errors in the configuration of the task about to\n * be run.\n *\n * When an exception is thrown, pending tasks in the same instance will\n * not be executed. The recommended way to run a series of tasks that\n * can independently fail without needing to prevent future tasks from\n * running is to catch them individually:\n *\n * ```typescript\n import { simpleGit, SimpleGit, GitError, PullResult } from 'simple-git';\n\n function catchTask (e: GitError) {\n return e.\n }\n\n const git = simpleGit(repoWorkingDir);\n const pulled: PullResult | GitError = await git.pull().catch(catchTask);\n const pushed: string | GitError = await git.pushTags().catch(catchTask);\n ```\n */\nexport class GitError extends Error {\n constructor(\n public task?: SimpleGitTask<any>,\n message?: string\n ) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n", "import type { SimpleGitOptions } from '../types';\nimport { GitError } from './git-error';\n\n/**\n * The `GitConstructError` is thrown when an error occurs in the constructor\n * of the `simple-git` instance itself. Most commonly as a result of using\n * a `baseDir` option that points to a folder that either does not exist,\n * or cannot be read by the user the node script is running as.\n *\n * Check the `.message` property for more detail including the properties\n * passed to the constructor.\n */\nexport class GitConstructError extends GitError {\n constructor(\n public readonly config: SimpleGitOptions,\n message: string\n ) {\n super(undefined, message);\n }\n}\n", "import type { SimpleGitOptions, SimpleGitTask } from '../types';\nimport { GitError } from './git-error';\n\nexport class GitPluginError extends GitError {\n constructor(\n public task?: SimpleGitTask<any>,\n public readonly plugin?: keyof SimpleGitOptions,\n message?: string\n ) {\n super(task, message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n", "import { GitError } from './git-error';\n\n/**\n * The `GitResponseError` is the wrapper for a parsed response that is treated as\n * a fatal error, for example attempting a `merge` can leave the repo in a corrupted\n * state when there are conflicts so the task will reject rather than resolve.\n *\n * For example, catching the merge conflict exception:\n *\n * ```typescript\n import { simpleGit, SimpleGit, GitResponseError, MergeSummary } from 'simple-git';\n\n const git = simpleGit(repoRoot);\n const mergeOptions: string[] = ['--no-ff', 'other-branch'];\n const mergeSummary: MergeSummary = await git.merge(mergeOptions)\n .catch((e: GitResponseError<MergeSummary>) => e.git);\n\n if (mergeSummary.failed) {\n // deal with the error\n }\n ```\n */\nexport class GitResponseError<T = any> extends GitError {\n constructor(\n /**\n * `.git` access the parsed response that is treated as being an error\n */\n public readonly git: T,\n message?: string\n ) {\n super(undefined, message || String(git));\n }\n}\n", "import { GitError } from './git-error';\n\n/**\n * The `TaskConfigurationError` is thrown when a command was incorrectly\n * configured. An error of this kind means that no attempt was made to\n * run your command through the underlying `git` binary.\n *\n * Check the `.message` property for more detail on why your configuration\n * resulted in an error.\n */\nexport class TaskConfigurationError extends GitError {\n constructor(message?: string) {\n super(undefined, message);\n }\n}\n", "import { exists, FOLDER } from '@kwsites/file-exists';\n\nimport type { Maybe } from '../types';\nimport { filterHasLength } from './argument-filters';\n\ntype Callable = (...args: unknown[]) => unknown;\n\nexport const NULL = '\\0';\n\nexport const NOOP: Callable = () => {};\n\n/**\n * Returns either the source argument when it is a `Function`, or the default\n * `NOOP` function constant\n */\nexport function asFunction<T>(source: T | unknown): Callable {\n if (typeof source !== 'function') {\n return NOOP;\n }\n return source as Callable;\n}\n\n/**\n * Determines whether the supplied argument is both a function, and is not\n * the `NOOP` function.\n */\nexport function isUserFunction<T extends Function>(source: T | unknown): source is T {\n return typeof source === 'function' && source !== NOOP;\n}\n\nexport function splitOn(input: string, char: string): [string, string] {\n const index = input.indexOf(char);\n if (index <= 0) {\n return [input, ''];\n }\n\n return [input.substr(0, index), input.substr(index + 1)];\n}\n\nexport function first<T extends unknown[]>(input: T, offset?: number): Maybe<T[number]>;\nexport function first<T extends IArguments>(input: T, offset?: number): Maybe<unknown>;\nexport function first(input: unknown[] | IArguments, offset = 0): Maybe<unknown> {\n return isArrayLike(input) && input.length > offset ? input[offset] : undefined;\n}\n\nexport function last<T extends unknown[]>(input: T, offset?: number): Maybe<T[number]>;\nexport function last<T extends IArguments>(input: T, offset?: number): Maybe<unknown>;\nexport function last<T>(input: T, offset?: number): Maybe<unknown>;\nexport function last(input: unknown, offset = 0) {\n if (isArrayLike(input) && input.length > offset) {\n return input[input.length - 1 - offset];\n }\n}\n\ntype ArrayLike<T> = T[] | IArguments | { [index: number]: T; length: number };\n\nfunction isArrayLike(input: unknown): input is ArrayLike<unknown> {\n return filterHasLength(input);\n}\n\nexport function toLinesWithContent(input = '', trimmed = true, separator = '\\n'): string[] {\n return input.split(separator).reduce((output, line) => {\n const lineContent = trimmed ? line.trim() : line;\n if (lineContent) {\n output.push(lineContent);\n }\n return output;\n }, [] as string[]);\n}\n\ntype LineWithContentCallback<T = void> = (line: string) => T;\n\nexport function forEachLineWithContent<T>(\n input: string,\n callback: LineWithContentCallback<T>\n): T[] {\n return toLinesWithContent(input, true).map((line) => callback(line));\n}\n\nexport function folderExists(path: string): boolean {\n return exists(path, FOLDER);\n}\n\n/**\n * Adds `item` into the `target` `Array` or `Set` when it is not already present and returns the `item`.\n */\nexport function append<T>(target: T[] | Set<T>, item: T): typeof item {\n if (Array.isArray(target)) {\n if (!target.includes(item)) {\n target.push(item);\n }\n } else {\n target.add(item);\n }\n return item;\n}\n\n/**\n * Adds `item` into the `target` `Array` when it is not already present and returns the `target`.\n */\nexport function including<T>(target: T[], item: T): typeof target {\n if (Array.isArray(target) && !target.includes(item)) {\n target.push(item);\n }\n\n return target;\n}\n\nexport function remove<T>(target: Set<T> | T[], item: T): T {\n if (Array.isArray(target)) {\n const index = target.indexOf(item);\n if (index >= 0) {\n target.splice(index, 1);\n }\n } else {\n target.delete(item);\n }\n return item;\n}\n\nexport const objectToString = Object.prototype.toString.call.bind(Object.prototype.toString) as (\n input: unknown\n) => string;\n\nexport function asArray<T>(source: T | T[]): T[] {\n return Array.isArray(source) ? source : [source];\n}\n\nexport function asCamelCase(str: string) {\n return str.replace(/[\\s-]+(.)/g, (_all, chr) => {\n return chr.toUpperCase();\n });\n}\n\nexport function asStringArray<T>(source: T | T[]): string[] {\n return asArray(source).map((item) => {\n return item instanceof String ? (item as string) : String(item);\n });\n}\n\nexport function asNumber(source: string | null | undefined, onNaN = 0) {\n if (source == null) {\n return onNaN;\n }\n\n const num = parseInt(source, 10);\n return Number.isNaN(num) ? onNaN : num;\n}\n\nexport function prefixedArray<T>(input: T[], prefix: T): T[] {\n const output: T[] = [];\n for (let i = 0, max = input.length; i < max; i++) {\n output.push(prefix, input[i]);\n }\n return output;\n}\n\nexport function bufferToString(input: Buffer | Buffer[]): string {\n return (Array.isArray(input) ? Buffer.concat(input) : input).toString('utf-8');\n}\n\nexport function byteLength(input?: string | Buffer) {\n if (!input) {\n return 0;\n }\n\n return Buffer.isBuffer(input) ? input.length : Buffer.byteLength(input);\n}\n\n/**\n * Get a new object from a source object with only the listed properties.\n */\nexport function pick<T, K extends keyof T>(source: T, properties: readonly K[]) {\n const out: Partial<Pick<T, K>> = {};\n\n properties.forEach((key) => {\n if (source[key] !== undefined) {\n out[key] = source[key];\n }\n });\n\n return out;\n}\n\nexport function delay(duration = 0): Promise<void> {\n return new Promise((done) => setTimeout(done, duration));\n}\n\nexport function orVoid<T>(input: T | false) {\n if (input === false) {\n return undefined;\n }\n return input;\n}\n", "import { isPathSpec } from '@simple-git/args-pathspec';\n\nimport type { Maybe, Options, Primitives } from '../types';\nimport { objectToString } from './util';\n\nexport type ArgumentFilterPredicate<T> = (input: T | unknown) => input is T;\n\nexport function filterType<T, K>(\n input: K,\n filter: ArgumentFilterPredicate<T>\n): K extends T ? T : undefined;\nexport function filterType<T, K>(input: K, filter: ArgumentFilterPredicate<T>, def: T): T;\nexport function filterType<T, K>(input: K, filter: ArgumentFilterPredicate<T>, def?: T): Maybe<T> {\n if (filter(input)) {\n return input;\n }\n return arguments.length > 2 ? def : undefined;\n}\n\nexport const filterArray: ArgumentFilterPredicate<Array<unknown>> = (\n input\n): input is Array<unknown> => {\n return Array.isArray(input);\n};\n\nexport function filterPrimitives(\n input: unknown,\n omit?: Array<'boolean' | 'string' | 'number'>\n): input is Primitives {\n const type = isPathSpec(input) ? 'string' : typeof input;\n\n return (\n /number|string|boolean/.test(type) &&\n (!omit || !omit.includes(type as 'boolean' | 'string' | 'number'))\n );\n}\n\nexport const filterNumber: ArgumentFilterPredicate<number> = (input: unknown): input is number => {\n return typeof input === 'number';\n};\n\nexport const filterString: ArgumentFilterPredicate<string> = (input: unknown): input is string => {\n return typeof input === 'string' || isPathSpec(input);\n};\n\nexport const filterStringOrBuffer: ArgumentFilterPredicate<string | Buffer> = (\n input: unknown\n): input is string | Buffer => {\n return filterString(input) || Buffer.isBuffer(input);\n};\n\nexport const filterStringOrStringArray: ArgumentFilterPredicate<string | string[]> = (\n input\n): input is string | string[] => {\n return filterString(input) || (Array.isArray(input) && input.every(filterString));\n};\n\nexport function filterPlainObject<T extends Options>(input: T | unknown): input is T;\nexport function filterPlainObject<T extends Record<string, unknown>>(\n input: T | unknown\n): input is T {\n return !!input && objectToString(input) === '[object Object]';\n}\n\nexport function filterFunction(input: unknown): input is (...args: unknown[]) => unknown {\n return typeof input === 'function';\n}\n\nexport const filterHasLength: ArgumentFilterPredicate<{ length: number }> = (\n input\n): input is { length: number } => {\n if (input == null || 'number|boolean|function'.includes(typeof input)) {\n return false;\n }\n\n return typeof (input as { length?: number }).length === 'number';\n};\n", "/**\n * Known process exit codes used by the task parsers to determine whether an error\n * was one they can automatically handle\n */\nexport enum ExitCodes {\n SUCCESS,\n ERROR,\n NOT_FOUND = -2,\n UNCLEAN = 128,\n}\n", "import type { TaskResponseFormat } from '../types';\n\nexport class GitOutputStreams<T extends TaskResponseFormat = Buffer> {\n constructor(\n public readonly stdOut: T,\n public readonly stdErr: T\n ) {}\n\n asStrings(): GitOutputStreams<string> {\n return new GitOutputStreams(this.stdOut.toString('utf8'), this.stdErr.toString('utf8'));\n }\n}\n", "function useMatchesDefault() {\n throw new Error(`LineParser:useMatches not implemented`);\n}\n\nexport class LineParser<T> {\n protected matches: string[] = [];\n protected useMatches: (target: T, match: string[]) => boolean | void = useMatchesDefault;\n\n private _regExp: RegExp[];\n\n constructor(\n regExp: RegExp | RegExp[],\n useMatches?: (target: T, match: string[]) => boolean | void\n ) {\n this._regExp = Array.isArray(regExp) ? regExp : [regExp];\n if (useMatches) {\n this.useMatches = useMatches;\n }\n }\n\n parse = (line: (offset: number) => string | undefined, target: T): boolean => {\n this.resetMatches();\n\n if (!this._regExp.every((reg, index) => this.addMatch(reg, index, line(index)))) {\n return false;\n }\n\n return this.useMatches(target, this.prepareMatches()) !== false;\n };\n\n protected resetMatches() {\n this.matches.length = 0;\n }\n\n protected prepareMatches() {\n return this.matches;\n }\n\n protected addMatch(reg: RegExp, index: number, line?: string) {\n const matched = line && reg.exec(line);\n if (matched) {\n this.pushMatch(index, matched);\n }\n\n return !!matched;\n }\n\n protected pushMatch(_index: number, matched: string[]) {\n this.matches.push(...matched.slice(1));\n }\n}\n\nexport class RemoteLineParser<T> extends LineParser<T> {\n protected addMatch(reg: RegExp, index: number, line?: string): boolean {\n return /^remote:\\s/.test(String(line)) && super.addMatch(reg, index, line);\n }\n\n protected pushMatch(index: number, matched: string[]) {\n if (index > 0 || matched.length > 1) {\n super.pushMatch(index, matched);\n }\n }\n}\n", "import type { SimpleGitOptions } from '../types';\n\nconst defaultOptions: Omit<SimpleGitOptions, 'baseDir'> = {\n binary: 'git',\n maxConcurrentProcesses: 5,\n config: [],\n trimmed: false,\n};\n\nexport function createInstanceConfig(\n ...options: Array<Partial<SimpleGitOptions> | undefined>\n): SimpleGitOptions {\n const baseDir = process.cwd();\n const config: SimpleGitOptions = Object.assign(\n { baseDir, ...defaultOptions },\n ...options.filter((o) => typeof o === 'object' && o)\n );\n\n config.baseDir = config.baseDir || baseDir;\n config.trimmed = config.trimmed === true;\n\n return config;\n}\n", "import { isPathSpec } from '@simple-git/args-pathspec';\n\nimport type { Maybe, Options } from '../types';\nimport {\n filterArray,\n filterFunction,\n filterPlainObject,\n filterPrimitives,\n filterType,\n} from './argument-filters';\nimport { asFunction, asStringArray, isUserFunction, last } from './util';\n\nexport function appendTaskOptions<T extends Options = Options>(\n options: Maybe<T>,\n commands: string[] = []\n): string[] {\n if (!filterPlainObject<Options>(options)) {\n return commands;\n }\n\n return Object.keys(options).reduce((commands: string[], key: string) => {\n const value = options[key];\n\n if (isPathSpec(value)) {\n commands.push(value);\n } else if (filterPrimitives(value, ['boolean'])) {\n commands.push(key + '=' + value);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n if (!filterPrimitives(v, ['string', 'number'])) {\n commands.push(key + '=' + v);\n }\n }\n } else {\n commands.push(key);\n }\n\n return commands;\n }, commands);\n}\n\nexport function getTrailingOptions(\n args: IArguments,\n initialPrimitive = 0,\n objectOnly = false\n): string[] {\n const command: string[] = [];\n\n for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) {\n if ('string|number'.includes(typeof args[i])) {\n command.push(String(args[i]));\n }\n }\n\n appendTaskOptions(trailingOptionsArgument(args), command);\n if (!objectOnly) {\n command.push(...trailingArrayArgument(args));\n }\n\n return command;\n}\n\nfunction trailingArrayArgument(args: IArguments) {\n const hasTrailingCallback = typeof last(args) === 'function';\n return asStringArray(filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []));\n}\n\n/**\n * Given any number of arguments, returns the trailing options argument, ignoring a trailing function argument\n * if there is one. When not found, the return value is null.\n */\nexport function trailingOptionsArgument(args: IArguments): Maybe<Options> {\n const hasTrailingCallback = filterFunction(last(args));\n return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject);\n}\n\n/**\n * Returns either the source argument when it is a `Function`, or the default\n * `NOOP` function constant\n */\nexport function trailingFunctionArgument(\n args: unknown[] | IArguments | unknown,\n includeNoop = true\n): Maybe<(...args: unknown[]) => unknown> {\n const callback = asFunction(last(args));\n return includeNoop || isUserFunction(callback) ? callback : undefined;\n}\n", "import type { MaybeArray, TaskParser, TaskResponseFormat } from '../types';\nimport type { GitOutputStreams } from './git-output-streams';\nimport type { LineParser } from './line-parser';\nimport { asArray, toLinesWithContent } from './util';\n\nexport function callTaskParser<INPUT extends TaskResponseFormat, RESPONSE>(\n parser: TaskParser<INPUT, RESPONSE>,\n streams: GitOutputStreams<INPUT>\n) {\n return parser(streams.stdOut, streams.stdErr);\n}\n\nexport function parseStringResponse<T>(\n result: T,\n parsers: LineParser<T>[],\n texts: MaybeArray<string>,\n trim = true\n): T {\n asArray(texts).forEach((text) => {\n for (let lines = toLinesWithContent(text, trim), i = 0, max = lines.length; i < max; i++) {\n const line = (offset = 0) => {\n if (i + offset >= max) {\n return;\n }\n return lines[i + offset];\n };\n\n parsers.some(({ parse }) => parse(line, result));\n }\n });\n\n return result;\n}\n", "import type { Maybe, StringTask } from '../types';\nimport { ExitCodes } from '../utils';\n\nexport enum CheckRepoActions {\n BARE = 'bare',\n IN_TREE = 'tree',\n IS_REPO_ROOT = 'root',\n}\n\nconst onError: StringTask<boolean>['onError'] = ({ exitCode }, error, done, fail) => {\n if (exitCode === ExitCodes.UNCLEAN && isNotRepoMessage(error)) {\n return done(Buffer.from('false'));\n }\n\n fail(error);\n};\n\nconst parser: StringTask<boolean>['parser'] = (text) => {\n return text.trim() === 'true';\n};\n\nexport function checkIsRepoTask(action: Maybe<CheckRepoActions>): StringTask<boolean> {\n switch (action) {\n case CheckRepoActions.BARE:\n return checkIsBareRepoTask();\n case CheckRepoActions.IS_REPO_ROOT:\n return checkIsRepoRootTask();\n }\n\n const commands = ['rev-parse', '--is-inside-work-tree'];\n\n return {\n commands,\n format: 'utf-8',\n onError,\n parser,\n };\n}\n\nexport function checkIsRepoRootTask(): StringTask<boolean> {\n const commands = ['rev-parse', '--git-dir'];\n\n return {\n commands,\n format: 'utf-8',\n onError,\n parser(path) {\n return /^\\.(git)?$/.test(path.trim());\n },\n };\n}\n\nexport function checkIsBareRepoTask(): StringTask<boolean> {\n const commands = ['rev-parse', '--is-bare-repository'];\n\n return {\n commands,\n format: 'utf-8',\n onError,\n parser,\n };\n}\n\nfunction isNotRepoMessage(error: Error): boolean {\n return /(Not a git repository|Kein Git-Repository)/i.test(String(error));\n}\n", "import type { CleanSummary } from '../../typings';\nimport { toLinesWithContent } from '../utils';\n\nexport class CleanResponse implements CleanSummary {\n public readonly paths: string[];\n public readonly files: string[];\n public readonly folders: string[];\n public readonly dryRun: boolean;\n\n constructor(dryRun: boolean) {\n this.paths = [];\n this.files = [];\n this.folders = [];\n this.dryRun = dryRun;\n }\n}\n\nconst removalRegexp = /^[a-z]+\\s*/i;\nconst dryRunRemovalRegexp = /^[a-z]+\\s+[a-z]+\\s*/i;\nconst isFolderRegexp = /\\/$/;\n\nexport function cleanSummaryParser(dryRun: boolean, text: string): CleanSummary {\n const summary = new CleanResponse(dryRun);\n const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp;\n\n toLinesWithContent(text).forEach((line) => {\n const removed = line.replace(regexp, '');\n\n summary.paths.push(removed);\n (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed);\n });\n\n return summary;\n}\n", "import { TaskConfigurationError } from '../errors/task-configuration-error';\nimport type { BufferTask, EmptyTaskParser, SimpleGitTask, StringTask } from '../types';\n\nexport const EMPTY_COMMANDS: [] = [];\n\nexport type EmptyTask = {\n commands: typeof EMPTY_COMMANDS;\n format: 'empty';\n parser: EmptyTaskParser;\n onError?: undefined;\n};\n\nexport function adhocExecTask(parser: EmptyTaskParser): EmptyTask {\n return {\n commands: EMPTY_COMMANDS,\n format: 'empty',\n parser,\n };\n}\n\nexport function configurationErrorTask(error: Error | string): EmptyTask {\n return {\n commands: EMPTY_COMMANDS,\n format: 'empty',\n parser() {\n throw typeof error === 'string' ? new TaskConfigurationError(error) : error;\n },\n };\n}\n\nexport function straightThroughStringTask(commands: string[], trimmed = false): StringTask<string> {\n return {\n commands,\n format: 'utf-8',\n parser(text) {\n return trimmed ? String(text).trim() : text;\n },\n };\n}\n\nexport function straightThroughBufferTask(commands: string[]): BufferTask<Buffer> {\n return {\n commands,\n format: 'buffer',\n parser(buffer) {\n return buffer;\n },\n };\n}\n\nexport function isBufferTask<R>(task: SimpleGitTask<R>): task is BufferTask<R> {\n return task.format === 'buffer';\n}\n\nexport function isEmptyTask<R>(task: SimpleGitTask<R>): task is EmptyTask {\n return task.format === 'empty' || !task.commands.length;\n}\n", "import type { CleanSummary } from '../../typings';\nimport { cleanSummaryParser } from '../parsers/parse-clean';\nimport type { Maybe, StringTask } from '../types';\nimport { asStringArray } from '../utils';\nimport { configurationErrorTask } from './task';\n\nexport const CONFIG_ERROR_INTERACTIVE_MODE = 'Git clean interactive mode is not supported';\nexport const CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter (\"n\" or \"f\") is required';\nexport const CONFIG_ERROR_UNKNOWN_OPTION = 'Git clean unknown option found in: ';\n\n/**\n * All supported option switches available for use in a `git.clean` operation\n */\nexport enum CleanOptions {\n DRY_RUN = 'n',\n FORCE = 'f',\n IGNORED_INCLUDED = 'x',\n IGNORED_ONLY = 'X',\n EXCLUDING = 'e',\n QUIET = 'q',\n RECURSIVE = 'd',\n}\n\n/**\n * The two modes `git.clean` can run in - one of these must be supplied in order\n * for the command to not throw a `TaskConfigurationError`\n */\nexport type CleanMode = CleanOptions.FORCE | CleanOptions.DRY_RUN;\n\nconst CleanOptionValues: Set<string> = new Set([\n 'i',\n ...asStringArray(Object.values(CleanOptions as any)),\n]);\n\nexport function cleanWithOptionsTask(mode: CleanMode | string, customArgs: string[]) {\n const { cleanMode, options, valid } = getCleanOptions(mode);\n\n if (!cleanMode) {\n return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED);\n }\n\n if (!valid.options) {\n return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode));\n }\n\n options.push(...customArgs);\n\n if (options.some(isInteractiveMode)) {\n return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE);\n }\n\n return cleanTask(cleanMode, options);\n}\n\nexport function cleanTask(mode: CleanMode, customArgs: string[]): StringTask<CleanSummary> {\n const commands: string[] = ['clean', `-${mode}`, ...customArgs];\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string): CleanSummary {\n return cleanSummaryParser(mode === CleanOptions.DRY_RUN, text);\n },\n };\n}\n\nexport function isCleanOptionsArray(input: string[]): input is CleanOptions[] {\n return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test));\n}\n\nfunction getCleanOptions(input: string) {\n let cleanMode: Maybe<CleanMode>;\n let options: string[] = [];\n let valid = { cleanMode: false, options: true };\n\n input\n .replace(/[^a-z]i/g, '')\n .split('')\n .forEach((char) => {\n if (isCleanMode(char)) {\n cleanMode = char;\n valid.cleanMode = true;\n } else {\n valid.options = valid.options && isKnownOption((options[options.length] = `-${char}`));\n }\n });\n\n return {\n cleanMode,\n options,\n valid,\n };\n}\n\nfunction isCleanMode(cleanMode?: string): cleanMode is CleanMode {\n return cleanMode === CleanOptions.FORCE || cleanMode === CleanOptions.DRY_RUN;\n}\n\nfunction isKnownOption(option: string): boolean {\n return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1));\n}\n\nfunction isInteractiveMode(option: string): boolean {\n if (/^-[^\\-]/.test(option)) {\n return option.indexOf('i') > 0;\n }\n\n return option === '--interactive';\n}\n", "import type { ConfigGetResult, ConfigListSummary, ConfigValues } from '../../typings';\nimport { last, splitOn } from '../utils';\n\nexport class ConfigList implements ConfigListSummary {\n public files: string[] = [];\n public values: { [fileName: string]: ConfigValues } = Object.create(null);\n\n private _all: ConfigValues | undefined;\n\n public get all(): ConfigValues {\n if (!this._all) {\n this._all = this.files.reduce((all: ConfigValues, file: string) => {\n return Object.assign(all, this.values[file]);\n }, {});\n }\n\n return this._all;\n }\n\n public addFile(file: string): ConfigValues {\n if (!(file in this.values)) {\n const latest = last(this.files);\n this.values[file] = latest ? Object.create(this.values[latest]) : {};\n\n this.files.push(file);\n }\n\n return this.values[file];\n }\n\n public addValue(file: string, key: string, value: string) {\n const values = this.addFile(file);\n\n if (!Object.hasOwn(values, key)) {\n values[key] = value;\n } else if (Array.isArray(values[key])) {\n (values[key] as string[]).push(value);\n } else {\n values[key] = [values[key] as string, value];\n }\n\n this._all = undefined;\n }\n}\n\nexport function configListParser(text: string): ConfigList {\n const config = new ConfigList();\n\n for (const item of configParser(text)) {\n config.addValue(item.file, String(item.key), item.value);\n }\n\n return config;\n}\n\nexport function configGetParser(text: string, key: string): ConfigGetResult {\n let value: string | null = null;\n const values: string[] = [];\n const scopes: Map<string, string[]> = new Map();\n\n for (const item of configParser(text, key)) {\n if (item.key !== key) {\n continue;\n }\n\n values.push((value = item.value));\n\n if (!scopes.has(item.file)) {\n scopes.set(item.file, []);\n }\n\n scopes.get(item.file)!.push(value);\n }\n\n return {\n key,\n paths: Array.from(scopes.keys()),\n scopes,\n value,\n values,\n };\n}\n\nfunction configFilePath(filePath: string): string {\n return filePath.replace(/^(file):/, '');\n}\n\nfunction* configParser(text: string, requestedKey: string | null = null) {\n const lines = text.split('\\0');\n\n for (let i = 0, max = lines.length - 1; i < max; ) {\n const file = configFilePath(lines[i++]);\n\n let value = lines[i++];\n let key = requestedKey;\n\n if (value.includes('\\n')) {\n const line = splitOn(value, '\\n');\n key = line[0];\n value = line[1];\n }\n\n yield { file, key, value };\n }\n}\n", "import type { ConfigGetResult, ConfigListSummary, SimpleGit } from '../../typings';\nimport { configGetParser, configListParser } from '../responses/ConfigList';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport { trailingFunctionArgument } from '../utils';\n\nexport enum GitConfigScope {\n system = 'system',\n global = 'global',\n local = 'local',\n worktree = 'worktree',\n}\n\nfunction asConfigScope<T extends GitConfigScope | undefined>(\n scope: GitConfigScope | unknown,\n fallback: T\n): GitConfigScope | T {\n if (typeof scope === 'string' && Object.hasOwn(GitConfigScope, scope)) {\n return scope as GitConfigScope;\n }\n return fallback;\n}\n\nfunction addConfigTask(\n key: string,\n value: string,\n append: boolean,\n scope: GitConfigScope\n): StringTask<string> {\n const commands: string[] = ['config', `--${scope}`];\n\n if (append) {\n commands.push('--add');\n }\n\n commands.push(key, value);\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string): string {\n return text;\n },\n };\n}\n\nfunction getConfigTask(key: string, scope?: GitConfigScope): StringTask<ConfigGetResult> {\n const commands: string[] = ['config', '--null', '--show-origin', '--get-all', key];\n\n if (scope) {\n commands.splice(1, 0, `--${scope}`);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(text) {\n return configGetParser(text, key);\n },\n };\n}\n\nfunction listConfigTask(scope?: GitConfigScope): StringTask<ConfigListSummary> {\n const commands = ['config', '--list', '--show-origin', '--null'];\n\n if (scope) {\n commands.push(`--${scope}`);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string) {\n return configListParser(text);\n },\n };\n}\n\nexport default function (): Pick<SimpleGit, 'addConfig' | 'getConfig' | 'listConfig'> {\n return {\n addConfig(this: SimpleGitApi, key: string, value: string, ...rest: unknown[]) {\n return this._runTask(\n addConfigTask(\n key,\n value,\n rest[0] === true,\n asConfigScope(rest[1], GitConfigScope.local)\n ),\n trailingFunctionArgument(arguments)\n );\n },\n\n getConfig(this: SimpleGitApi, key: string, scope?: GitConfigScope) {\n return this._runTask(\n getConfigTask(key, asConfigScope(scope, undefined)),\n trailingFunctionArgument(arguments)\n );\n },\n\n listConfig(this: SimpleGitApi, ...rest: unknown[]) {\n return this._runTask(\n listConfigTask(asConfigScope(rest[0], undefined)),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n", "export enum DiffNameStatus {\n ADDED = 'A',\n COPIED = 'C',\n DELETED = 'D',\n MODIFIED = 'M',\n RENAMED = 'R',\n CHANGED = 'T',\n UNMERGED = 'U',\n UNKNOWN = 'X',\n BROKEN = 'B',\n}\n\nconst diffNameStatus = new Set(Object.values(DiffNameStatus));\n\nexport function isDiffNameStatus(input: string): input is DiffNameStatus {\n return diffNameStatus.has(input as DiffNameStatus);\n}\n", "import type { GrepResult, SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport {\n asNumber,\n forEachLineWithContent,\n getTrailingOptions,\n NULL,\n prefixedArray,\n trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask } from './task';\n\nconst disallowedOptions = ['-h'];\n\nconst Query = Symbol('grepQuery');\n\nexport interface GitGrepQuery extends Iterable<string> {\n /** Adds one or more terms to be grouped as an \"and\" to any other terms */\n and(...and: string[]): this;\n\n /** Adds one or more search terms - git.grep will \"or\" this to other terms */\n param(...param: string[]): this;\n}\n\nclass GrepQuery implements GitGrepQuery {\n private [Query]: string[] = [];\n\n *[Symbol.iterator]() {\n for (const query of this[Query]) {\n yield query;\n }\n }\n\n and(...and: string[]) {\n and.length && this[Query].push('--and', '(', ...prefixedArray(and, '-e'), ')');\n return this;\n }\n\n param(...param: string[]) {\n this[Query].push(...prefixedArray(param, '-e'));\n return this;\n }\n}\n\n/**\n * Creates a new builder for a `git.grep` query with optional params\n */\nexport function grepQueryBuilder(...params: string[]): GitGrepQuery {\n return new GrepQuery().param(...params);\n}\n\nfunction parseGrep(grep: string): GrepResult {\n const paths: GrepResult['paths'] = new Set<string>();\n const results: GrepResult['results'] = {};\n\n forEachLineWithContent(grep, (input) => {\n const [path, line, preview] = input.split(NULL);\n paths.add(path);\n (results[path] = results[path] || []).push({\n line: asNumber(line),\n path,\n preview,\n });\n });\n\n return {\n paths,\n results,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'grep'> {\n return {\n grep(this: SimpleGitApi, searchTerm: string | GitGrepQuery) {\n const then = trailingFunctionArgument(arguments);\n const options = getTrailingOptions(arguments);\n\n for (const option of disallowedOptions) {\n if (options.includes(option)) {\n return this._runTask(\n configurationErrorTask(`git.grep: use of \"${option}\" is not supported.`),\n then\n );\n }\n }\n\n if (typeof searchTerm === 'string') {\n searchTerm = grepQueryBuilder().param(searchTerm);\n }\n\n const commands = ['grep', '--null', '-n', '--full-name', ...options, ...searchTerm];\n\n return this._runTask(\n {\n commands,\n format: 'utf-8',\n parser(stdOut) {\n return parseGrep(stdOut);\n },\n },\n then\n );\n },\n };\n}\n", "import type { Maybe, OptionFlags, Options } from '../types';\nimport { asStringArray } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nexport enum ResetMode {\n MIXED = 'mixed',\n SOFT = 'soft',\n HARD = 'hard',\n MERGE = 'merge',\n KEEP = 'keep',\n}\n\nconst validResetModes = asStringArray(Object.values(ResetMode));\n\nexport type ResetOptions = Options &\n OptionFlags<'-q' | '--quiet' | '--no-quiet' | '--pathspec-from-nul'> &\n OptionFlags<'--pathspec-from-file', string>;\n\nexport function resetTask(mode: Maybe<ResetMode>, customArgs: string[]) {\n const commands: string[] = ['reset'];\n if (isValidResetMode(mode)) {\n commands.push(`--${mode}`);\n }\n commands.push(...customArgs);\n\n return straightThroughStringTask(commands);\n}\n\nexport function getResetMode(mode: ResetMode | unknown): Maybe<ResetMode> {\n if (isValidResetMode(mode)) {\n return mode;\n }\n\n switch (typeof mode) {\n case 'string':\n case 'undefined':\n return ResetMode.SOFT;\n }\n\n return;\n}\n\nfunction isValidResetMode(mode: ResetMode | unknown): mode is ResetMode {\n return typeof mode === 'string' && validResetModes.includes(mode);\n}\n", "import debug, { type Debugger } from 'debug';\n\nimport type { Maybe } from './types';\nimport {\n append,\n filterHasLength,\n filterString,\n filterType,\n NOOP,\n objectToString,\n remove,\n} from './utils';\n\ndebug.formatters.L = (value: any) => String(filterHasLength(value) ? value.length : '-');\ndebug.formatters.B = (value: Buffer) => {\n if (Buffer.isBuffer(value)) {\n return value.toString('utf8');\n }\n return objectToString(value);\n};\n\ntype OutputLoggingHandler = (message: string, ...args: any[]) => void;\n\nfunction createLog() {\n return debug('simple-git');\n}\n\nexport interface OutputLogger extends OutputLoggingHandler {\n readonly label: string;\n\n info: OutputLoggingHandler;\n step(nextStep?: string): OutputLogger;\n sibling(name: string): OutputLogger;\n}\n\nfunction prefixedLogger(\n to: Debugger,\n prefix: string,\n forward?: OutputLoggingHandler\n): OutputLoggingHandler {\n if (!prefix || !String(prefix).replace(/\\s*/, '')) {\n return !forward\n ? to\n : (message, ...args) => {\n to(message, ...args);\n forward(message, ...args);\n };\n }\n\n return (message, ...args) => {\n to(`%s ${message}`, prefix, ...args);\n if (forward) {\n forward(message, ...args);\n }\n };\n}\n\nfunction childLoggerName(\n name: Maybe<string>,\n childDebugger: Maybe<Debugger>,\n { namespace: parentNamespace }: Debugger\n): string {\n if (typeof name === 'string') {\n return name;\n }\n const childNamespace = (childDebugger && childDebugger.namespace) || '';\n\n if (childNamespace.startsWith(parentNamespace)) {\n return childNamespace.substr(parentNamespace.length + 1);\n }\n\n return childNamespace || parentNamespace;\n}\n\nexport function createLogger(\n label: string,\n verbose?: string | Debugger,\n initialStep?: string,\n infoDebugger = createLog()\n): OutputLogger {\n const labelPrefix = (label && `[${label}]`) || '';\n\n const spawned: OutputLogger[] = [];\n const debugDebugger: Maybe<Debugger> =\n typeof verbose === 'string' ? infoDebugger.extend(verbose) : verbose;\n const key = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger);\n\n return step(initialStep);\n\n function sibling(name: string, initial?: string) {\n return append(\n spawned,\n createLogger(label, key.replace(/^[^:]+/, name), initial, infoDebugger)\n );\n }\n\n function step(phase?: string) {\n const stepPrefix = (phase && `[${phase}]`) || '';\n const debug = (debugDebugger && prefixedLogger(debugDebugger, stepPrefix)) || NOOP;\n const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug);\n\n return Object.assign(debugDebugger ? debug : info, {\n label,\n sibling,\n info,\n step,\n });\n }\n}\n\n/**\n * The `GitLogger` is used by the main `SimpleGit` runner to handle logging\n * any warnings or errors.\n */\nexport class GitLogger {\n public error: OutputLoggingHandler;\n\n public warn: OutputLoggingHandler;\n\n constructor(private _out: Debugger = createLog()) {\n this.error = prefixedLogger(_out, '[ERROR]');\n this.warn = prefixedLogger(_out, '[WARN]');\n }\n\n silent(silence = false) {\n if (silence !== this._out.enabled) {\n return;\n }\n\n const { namespace } = this._out;\n const env = (process.env.DEBUG || '').split(',').filter((s) => !!s);\n const hasOn = env.includes(namespace);\n const hasOff = env.includes(`-${namespace}`);\n\n // enabling the log\n if (!silence) {\n if (hasOff) {\n remove(env, `-${namespace}`);\n } else {\n env.push(namespace);\n }\n } else {\n if (hasOn) {\n remove(env, namespace);\n } else {\n env.push(`-${namespace}`);\n }\n }\n\n debug.enable(env.join(','));\n }\n}\n", "import { GitError } from '../errors/git-error';\nimport { createLogger, type OutputLogger } from '../git-logger';\nimport type { SimpleGitTask } from '../types';\n\ntype AnySimpleGitTask = SimpleGitTask<any>;\n\ntype TaskInProgress = {\n name: string;\n logger: OutputLogger;\n task: AnySimpleGitTask;\n};\n\nexport class TasksPendingQueue {\n private _queue: Map<AnySimpleGitTask, TaskInProgress> = new Map();\n\n constructor(private logLabel = 'GitExecutor') {}\n\n private withProgress(task: AnySimpleGitTask) {\n return this._queue.get(task);\n }\n\n private createProgress(task: AnySimpleGitTask): TaskInProgress {\n const name = TasksPendingQueue.getName(task.commands[0]);\n const logger = createLogger(this.logLabel, name);\n\n return {\n task,\n logger,\n name,\n };\n }\n\n push(task: AnySimpleGitTask): TaskInProgress {\n const progress = this.createProgress(task);\n progress.logger('Adding task to the queue, commands = %o', task.commands);\n\n this._queue.set(task, progress);\n\n return progress;\n }\n\n fatal(err: GitError) {\n for (const [task, { logger }] of Array.from(this._queue.entries())) {\n if (task === err.task) {\n logger.info(`Failed %o`, err);\n logger(\n `Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`\n );\n } else {\n logger.info(\n `A fatal exception occurred in a previous task, the queue has been purged: %o`,\n err.message\n );\n }\n\n this.complete(task);\n }\n\n if (this._queue.size !== 0) {\n throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`);\n }\n }\n\n complete(task: AnySimpleGitTask) {\n const progress = this.withProgress(task);\n if (progress) {\n this._queue.delete(task);\n }\n }\n\n attempt(task: AnySimpleGitTask): TaskInProgress {\n const progress = this.withProgress(task);\n if (!progress) {\n throw new GitError(undefined, 'TasksPendingQueue: attempt called for an unknown task');\n }\n progress.logger('Starting task');\n\n return progress;\n }\n\n static getName(name = 'empty') {\n return `task:${name}:${++TasksPendingQueue.counter}`;\n }\n\n private static counter = 0;\n}\n", "import { type SpawnOptions, spawn } from 'node:child_process';\n\nimport { GitError } from '../errors/git-error';\nimport type { OutputLogger } from '../git-logger';\nimport type { PluginStore, SimpleGitTaskPluginContext } from '../plugins';\nimport { type EmptyTask, isBufferTask, isEmptyTask } from '../tasks/task';\nimport type {\n GitExecutorResult,\n Maybe,\n outputHandler,\n RunnableTask,\n SimpleGitExecutor,\n SimpleGitTask,\n} from '../types';\nimport { callTaskParser, first, GitOutputStreams, objectToString } from '../utils';\nimport type { Scheduler } from './scheduler';\nimport { TasksPendingQueue } from './tasks-pending-queue';\n\nexport class GitExecutorChain implements SimpleGitExecutor {\n private _chain: Promise<any> = Promise.resolve();\n private _queue = new TasksPendingQueue();\n private _cwd: string | undefined;\n\n public get cwd() {\n return this._cwd || this._executor.cwd;\n }\n\n public set cwd(cwd: string) {\n this._cwd = cwd;\n }\n\n public get env() {\n return this._executor.env;\n }\n\n public get outputHandler() {\n return this._executor.outputHandler;\n }\n\n constructor(\n private _executor: SimpleGitExecutor,\n private _scheduler: Scheduler,\n private _plugins: PluginStore\n ) {}\n\n public chain() {\n return this;\n }\n\n public push<R>(task: SimpleGitTask<R>): Promise<R> {\n this._queue.push(task);\n\n return (this._chain = this._chain.then(() => this.attemptTask(task)));\n }\n\n private async attemptTask<R>(task: SimpleGitTask<R>): Promise<void | R> {\n const onScheduleComplete = await this._scheduler.next();\n const onQueueComplete = () => this._queue.complete(task);\n\n try {\n const { logger } = this._queue.attempt(task);\n return (await (isEmptyTask(task)\n ? this.attemptEmptyTask(task, logger)\n : this.attemptRemoteTask(task, logger))) as R;\n } catch (e) {\n throw this.onFatalException(task, e as Error);\n } finally {\n onQueueComplete();\n onScheduleComplete();\n }\n }\n\n private onFatalException<R>(task: SimpleGitTask<R>, e: Error) {\n const gitError =\n e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e));\n\n this._chain = Promise.resolve();\n this._queue.fatal(gitError);\n\n return gitError;\n }\n\n private async attemptRemoteTask<R>(task: RunnableTask<R>, logger: OutputLogger) {\n const binary = this._plugins.exec('spawn.binary', '', this.taskContext(task, task.commands));\n const args = this._plugins.exec(\n 'spawn.args',\n [...task.commands],\n this.taskContext(task, task.commands)\n );\n\n const raw = await this.gitResponse(\n task,\n binary,\n args,\n this.outputHandler,\n logger.step('SPAWN')\n );\n const outputStreams = await this.handleTaskData(task, args, raw, logger.step('HANDLE'));\n\n logger(`passing response to task's parser as a %s`, task.format);\n\n if (isBufferTask(task)) {\n return callTaskParser(task.parser, outputStreams);\n }\n\n return callTaskParser(task.parser, outputStreams.asStrings());\n }\n\n private async attemptEmptyTask(task: EmptyTask, logger: OutputLogger) {\n logger(`empty task bypassing child process to call to task's parser`);\n return task.parser(this);\n }\n\n private handleTaskData<R>(\n task: SimpleGitTask<R>,\n args: string[],\n result: GitExecutorResult,\n logger: OutputLogger\n ): Promise<GitOutputStreams> {\n const { exitCode, rejection, stdOut, stdErr } = result;\n\n return new Promise((done, fail) => {\n logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode);\n\n const { error } = this._plugins.exec(\n 'task.error',\n { error: rejection },\n {\n ...this.taskContext(task, args),\n ...result,\n }\n );\n\n if (error && task.onError) {\n logger.info(`exitCode=%s handling with custom error handler`);\n\n return task.onError(\n result,\n error,\n (newStdOut) => {\n logger.info(`custom error handler treated as success`);\n logger(`custom error returned a %s`, objectToString(newStdOut));\n\n done(\n new GitOutputStreams(\n Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut,\n Buffer.concat(stdErr)\n )\n );\n },\n fail\n );\n }\n\n if (error) {\n logger.info(\n `handling as error: exitCode=%s stdErr=%s rejection=%o`,\n exitCode,\n stdErr.length,\n rejection\n );\n return fail(error);\n }\n\n logger.info(`retrieving task output complete`);\n done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr)));\n });\n }\n\n private async gitResponse<R>(\n task: SimpleGitTask<R>,\n command: string,\n args: string[],\n outputHandler: Maybe<outputHandler>,\n logger: OutputLogger\n ): Promise<GitExecutorResult> {\n const outputLogger = logger.sibling('output');\n const spawnOptions: SpawnOptions = this._plugins.exec(\n 'spawn.options',\n {\n cwd: this.cwd,\n env: this.env,\n windowsHide: true,\n },\n this.taskContext(task, task.commands)\n );\n\n return new Promise((done) => {\n const stdOut: Buffer[] = [];\n const stdErr: Buffer[] = [];\n\n logger.info(`%s %o`, command, args);\n logger('%O', spawnOptions);\n\n let rejection = this._beforeSpawn(task, args);\n if (rejection) {\n return done({\n stdOut,\n stdErr,\n exitCode: 9901,\n rejection,\n });\n }\n\n this._plugins.exec('spawn.before', undefined, {\n ...this.taskContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n },\n });\n\n const spawned = spawn(command, args, spawnOptions);\n\n spawned.stdout!.on(\n 'data',\n onDataReceived(stdOut, 'stdOut', logger, outputLogger.step('stdOut'))\n );\n spawned.stderr!.on(\n 'data',\n onDataReceived(stdErr, 'stdErr', logger, outputLogger.step('stdErr'))\n );\n\n spawned.on('error', onErrorReceived(stdErr, logger));\n\n if (outputHandler) {\n logger(`Passing child process stdOut/stdErr to custom outputHandler`);\n outputHandler(command, spawned.stdout!, spawned.stderr!, [...args]);\n }\n\n this._plugins.exec('spawn.after', undefined, {\n ...this.taskContext(task, args),\n spawned,\n close(exitCode: number, reason?: Error) {\n done({\n stdOut,\n stdErr,\n exitCode,\n rejection: rejection || reason,\n });\n },\n kill(reason: Error) {\n if (spawned.killed) {\n return;\n }\n\n rejection = reason;\n spawned.kill('SIGINT');\n },\n });\n });\n }\n\n private _beforeSpawn<R>(task: SimpleGitTask<R>, args: string[]) {\n let rejection: Maybe<Error>;\n this._plugins.exec('spawn.before', undefined, {\n ...this.taskContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n },\n });\n\n return rejection;\n }\n\n private taskContext<R>(task: SimpleGitTask<R>, commands: string[]): SimpleGitTaskPluginContext {\n return {\n method: String(first(task.commands) || ''),\n commands,\n env: { ...this.env },\n input: isEmptyTask(task) ? undefined : task.input,\n };\n }\n}\n\nfunction onErrorReceived(target: Buffer[], logger: OutputLogger) {\n return (err: Error) => {\n logger(`[ERROR] child process exception %o`, err);\n target.push(Buffer.from(String(err.stack), 'ascii'));\n };\n}\n\nfunction onDataReceived(\n target: Buffer[],\n name: string,\n logger: OutputLogger,\n output: OutputLogger\n) {\n return (buffer: Buffer) => {\n logger(`%s received %L bytes`, name, buffer);\n output(`%B`, buffer);\n target.push(buffer);\n };\n}\n", "import type { PluginStore } from '../plugins';\nimport type { GitExecutorEnv, outputHandler, SimpleGitExecutor, SimpleGitTask } from '../types';\nimport { GitExecutorChain } from './git-executor-chain';\nimport type { Scheduler } from './scheduler';\n\nexport class GitExecutor implements SimpleGitExecutor {\n private _chain: SimpleGitExecutor;\n\n public env: GitExecutorEnv;\n public outputHandler?: outputHandler;\n\n constructor(\n public cwd: string,\n private _scheduler: Scheduler,\n private _plugins: PluginStore\n ) {\n this._chain = this.chain();\n }\n\n chain(): SimpleGitExecutor {\n return new GitExecutorChain(this, this._scheduler, this._plugins);\n }\n\n push<R>(task: SimpleGitTask<R>): Promise<R> {\n return this._chain.push(task);\n }\n}\n", "import type { GitError } from './errors/git-error';\nimport type { GitResponseError } from './errors/git-response-error';\nimport type { SimpleGitTask, SimpleGitTaskCallback } from './types';\nimport { NOOP } from './utils';\n\nexport function taskCallback<R>(\n task: SimpleGitTask<R>,\n response: Promise<R>,\n callback: SimpleGitTaskCallback<R> = NOOP\n) {\n const onSuccess = (data: R) => {\n callback(null, data);\n };\n\n const onError = (err: GitError | GitResponseError) => {\n if (err?.task === task) {\n callback(err, undefined as any);\n }\n };\n\n response.then(onSuccess, onError);\n}\n", "import type { SimpleGitExecutor } from '../types';\nimport { folderExists } from '../utils';\nimport { adhocExecTask } from './task';\n\nexport function changeWorkingDirectoryTask(directory: string, root?: SimpleGitExecutor) {\n return adhocExecTask((instance: SimpleGitExecutor) => {\n if (!folderExists(directory)) {\n throw new Error(`Git.cwd: cannot change to non-directory \"${directory}\"`);\n }\n\n return ((root || instance).cwd = directory);\n });\n}\n", "import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { getTrailingOptions, remove, trailingFunctionArgument } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nfunction checkoutTask(args: string[]) {\n const commands = ['checkout', ...args];\n if (commands[1] === '-b' && commands.includes('-B')) {\n commands[1] = remove(commands, '-B');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport default function (): Pick<SimpleGit, 'checkout' | 'checkoutBranch' | 'checkoutLocalBranch'> {\n return {\n checkout(this: SimpleGitApi) {\n return this._runTask(\n checkoutTask(getTrailingOptions(arguments, 1)),\n trailingFunctionArgument(arguments)\n );\n },\n\n checkoutBranch(this: SimpleGitApi, branchName, startPoint) {\n return this._runTask(\n checkoutTask(['-b', branchName, startPoint, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n },\n\n checkoutLocalBranch(this: SimpleGitApi, branchName) {\n return this._runTask(\n checkoutTask(['-b', branchName, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n", "import { pathspec } from '@simple-git/args-pathspec';\n\nimport type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { OptionFlags, Options, StringTask } from '../types';\nimport {\n append,\n filterString,\n filterType,\n getTrailingOptions,\n trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask, type EmptyTask, straightThroughStringTask } from './task';\n\nexport type CloneOptions = Options &\n OptionFlags<\n | '--bare'\n | '--dissociate'\n | '--mirror'\n | '--no-checkout'\n | '--no-remote-submodules'\n | '--no-shallow-submodules'\n | '--no-single-branch'\n | '--no-tags'\n | '--remote-submodules'\n | '--single-branch'\n | '--shallow-submodules'\n | '--verbose'\n > &\n OptionFlags<'--depth' | '-j' | '--jobs', number> &\n OptionFlags<\n | '--branch'\n | '--origin'\n | '--recurse-submodules'\n | '--separate-git-dir'\n | '--shallow-exclude'\n | '--shallow-since'\n | '--template',\n string\n >;\n\ntype CloneTaskBuilder = (\n repo: string | undefined,\n directory: string | undefined,\n customArgs: string[]\n) => StringTask<string> | EmptyTask;\n\nexport const cloneTask: CloneTaskBuilder = (repo, directory, customArgs) => {\n const commands = ['clone', ...customArgs];\n\n filterString(repo) && commands.push(pathspec(repo));\n filterString(directory) && commands.push(pathspec(directory));\n\n return straightThroughStringTask(commands);\n};\n\nexport const cloneMirrorTask: CloneTaskBuilder = (repo, directory, customArgs) => {\n append(customArgs, '--mirror');\n\n return cloneTask(repo, directory, customArgs);\n};\n\nfunction createCloneTask(\n api: 'clone' | 'mirror',\n task: CloneTaskBuilder,\n repoPath: string | undefined,\n ...args: unknown[]\n) {\n if (!filterString(repoPath)) {\n return configurationErrorTask(`git.${api}() requires a string 'repoPath'`);\n }\n\n return task(repoPath, filterType(args[0], filterString), getTrailingOptions(arguments));\n}\n\nexport default function (): Pick<SimpleGit, 'clone' | 'mirror'> {\n return {\n clone(this: SimpleGitApi, repo: string | unknown, ...rest: unknown[]) {\n return this._runTask(\n createCloneTask('clone', cloneTask, filterType(repo, filterString), ...rest),\n trailingFunctionArgument(arguments)\n );\n },\n mirror(this: SimpleGitApi, repo: string | unknown, ...rest: unknown[]) {\n return this._runTask(\n createCloneTask('mirror', cloneMirrorTask, filterType(repo, filterString), ...rest),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n", "import type { CommitResult } from '../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<CommitResult>[] = [\n new LineParser(/^\\[([^\\s]+)( \\([^)]+\\))? ([^\\]]+)/, (result, [branch, root, commit]) => {\n result.branch = branch;\n result.commit = commit;\n result.root = !!root;\n }),\n new LineParser(/\\s*Author:\\s(.+)/i, (result, [author]) => {\n const parts = author.split('<');\n const email = parts.pop();\n\n if (!email || !email.includes('@')) {\n return;\n }\n\n result.author = {\n email: email.substr(0, email.length - 1),\n name: parts.join('<').trim(),\n };\n }),\n new LineParser(\n /(\\d+)[^,]*(?:,\\s*(\\d+)[^,]*)(?:,\\s*(\\d+))/g,\n (result, [changes, insertions, deletions]) => {\n result.summary.changes = parseInt(changes, 10) || 0;\n result.summary.insertions = parseInt(insertions, 10) || 0;\n result.summary.deletions = parseInt(deletions, 10) || 0;\n }\n ),\n new LineParser(\n /^(\\d+)[^,]*(?:,\\s*(\\d+)[^(]+\\(([+-]))?/,\n (result, [changes, lines, direction]) => {\n result.summary.changes = parseInt(changes, 10) || 0;\n const count = parseInt(lines, 10) || 0;\n if (direction === '-') {\n result.summary.deletions = count;\n } else if (direction === '+') {\n result.summary.insertions = count;\n }\n }\n ),\n];\n\nexport function parseCommitResult(stdOut: string): CommitResult {\n const result: CommitResult = {\n author: null,\n branch: '',\n commit: '',\n root: false,\n summary: {\n changes: 0,\n insertions: 0,\n deletions: 0,\n },\n };\n return parseStringResponse(result, parsers, stdOut);\n}\n", "import type { CommitResult, SimpleGit } from '../../typings';\nimport { parseCommitResult } from '../parsers/parse-commit';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport {\n asArray,\n asStringArray,\n filterArray,\n filterStringOrStringArray,\n filterType,\n getTrailingOptions,\n prefixedArray,\n trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask } from './task';\n\nexport function commitTask(\n message: string[],\n files: string[],\n customArgs: string[]\n): StringTask<CommitResult> {\n const commands: string[] = [\n '-c',\n 'core.abbrev=40',\n 'commit',\n ...prefixedArray(message, '-m'),\n ...files,\n ...customArgs,\n ];\n\n return {\n commands,\n format: 'utf-8',\n parser: parseCommitResult,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'commit'> {\n return {\n commit(this: SimpleGitApi, message: string | string[], ...rest: unknown[]) {\n const next = trailingFunctionArgument(arguments);\n const task =\n rejectDeprecatedSignatures(message) ||\n commitTask(\n asArray(message),\n asArray(filterType(rest[0], filterStringOrStringArray, [])),\n [\n ...asStringArray(filterType(rest[1], filterArray, [])),\n ...getTrailingOptions(arguments, 0, true),\n ]\n );\n\n return this._runTask(task, next);\n },\n };\n\n function rejectDeprecatedSignatures(message?: unknown) {\n return (\n !filterStringOrStringArray(message) &&\n configurationErrorTask(\n `git.commit: requires the commit message to be supplied as a string/string[]`\n )\n );\n }\n}\n", "import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { asCamelCase, asNumber, LineParser, parseStringResponse } from '../utils';\n\nexport interface CountObjectsResult {\n count: number;\n size: number;\n inPack: number;\n packs: number;\n sizePack: number;\n prunePackable: number;\n garbage: number;\n sizeGarbage: number;\n}\n\nfunction countObjectsResponse(): CountObjectsResult {\n return {\n count: 0,\n garbage: 0,\n inPack: 0,\n packs: 0,\n prunePackable: 0,\n size: 0,\n sizeGarbage: 0,\n sizePack: 0,\n };\n}\n\nconst parser: LineParser<CountObjectsResult> = new LineParser(\n /([a-z-]+): (\\d+)$/,\n (result, [key, value]) => {\n const property = asCamelCase(key);\n if (Object.hasOwn(result, property)) {\n result[property as keyof typeof result] = asNumber(value);\n }\n }\n);\n\nexport default function (): Pick<SimpleGit, 'countObjects'> {\n return {\n countObjects(this: SimpleGitApi) {\n return this._runTask({\n commands: ['count-objects', '--verbose'],\n format: 'utf-8',\n parser(stdOut: string) {\n return parseStringResponse(countObjectsResponse(), [parser], stdOut);\n },\n });\n },\n };\n}\n", "import type { Response, SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { trailingFunctionArgument } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nexport default function (): Pick<SimpleGit, 'firstCommit'> {\n return {\n firstCommit(this: SimpleGitApi): Response<string> {\n return this._runTask(\n straightThroughStringTask(['rev-list', '--max-parents=0', 'HEAD'], true),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n", "import type { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\n/**\n * Task used by `git.hashObject`\n */\nexport function hashObjectTask(filePath: string, write: boolean): StringTask<string> {\n const commands = ['hash-object', filePath];\n if (write) {\n commands.push('-w');\n }\n\n return straightThroughStringTask(commands, true);\n}\n", "import type { InitResult } from '../../typings';\n\nexport class InitSummary implements InitResult {\n constructor(\n public readonly bare: boolean,\n public readonly path: string,\n public readonly existing: boolean,\n public readonly gitDir: string\n ) {}\n}\n\nconst initResponseRegex = /^Init.+ repository in (.+)$/;\nconst reInitResponseRegex = /^Rein.+ in (.+)$/;\n\nexport function parseInit(bare: boolean, path: string, text: string) {\n const response = String(text).trim();\n let result;\n\n if ((result = initResponseRegex.exec(response))) {\n return new InitSummary(bare, path, false, result[1]);\n }\n\n if ((result = reInitResponseRegex.exec(response))) {\n return new InitSummary(bare, path, true, result[1]);\n }\n\n let gitDir = '';\n const tokens = response.split(' ');\n while (tokens.length) {\n const token = tokens.shift();\n if (token === 'in') {\n gitDir = tokens.join(' ');\n break;\n }\n }\n\n return new InitSummary(bare, path, /^re/i.test(response), gitDir);\n}\n", "import type { InitResult } from '../../typings';\nimport { parseInit } from '../responses/InitSummary';\nimport type { StringTask } from '../types';\n\nconst bareCommand = '--bare';\n\nfunction hasBareCommand(command: string[]) {\n return command.includes(bareCommand);\n}\n\nexport function initTask(bare = false, path: string, customArgs: string[]): StringTask<InitResult> {\n const commands = ['init', ...customArgs];\n if (bare && !hasBareCommand(commands)) {\n commands.splice(1, 0, bareCommand);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string): InitResult {\n return parseInit(commands.includes('--bare'), path, text);\n },\n };\n}\n", "import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport {\n asCamelCase,\n filterStringOrBuffer,\n filterType,\n forEachLineWithContent,\n trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nfunction interpretTrailersTask(\n input?: string | Buffer\n): StringTask<Record<string, string>> | EmptyTask {\n if (input === undefined) {\n return configurationErrorTask(`interpretTrailers called without input content`);\n }\n\n return {\n format: 'utf-8',\n parser(stdOut) {\n return Object.fromEntries(\n forEachLineWithContent(stdOut, (line) => {\n const index = line.indexOf(':');\n return [\n asCamelCase(line.substring(0, index).toLowerCase()),\n line.substring(index + 2).trim(),\n ];\n })\n );\n },\n commands: ['interpret-trailers', '--parse'],\n input,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'interpretTrailers'> {\n return {\n interpretTrailers(this: SimpleGitApi, input) {\n return this._runTask(\n interpretTrailersTask(filterType(input, filterStringOrBuffer)),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n", "export enum LogFormat {\n NONE = '',\n STAT = '--stat',\n NUM_STAT = '--numstat',\n NAME_ONLY = '--name-only',\n NAME_STATUS = '--name-status',\n}\n\nconst logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/;\n\nexport function logFormatFromCommand(customArgs: string[]) {\n for (let i = 0; i < customArgs.length; i++) {\n const format = logFormatRegex.exec(customArgs[i]);\n if (format) {\n return `--${format[1]}` as LogFormat;\n }\n }\n\n return LogFormat.NONE;\n}\n\nexport function isLogFormat(customArg: string | unknown) {\n return logFormatRegex.test(customArg as string);\n}\n", "import type { DiffResult, DiffResultBinaryFile, DiffResultTextFile } from '../../typings';\n\n/***\n * The DiffSummary is returned as a response to getting `git().status()`\n */\nexport class DiffSummary implements DiffResult {\n changed = 0;\n deletions = 0;\n insertions = 0;\n\n files: Array<DiffResultTextFile | DiffResultBinaryFile> = [];\n}\n", "import type { DiffResult } from '../../typings';\nimport { LogFormat } from '../args/log-format';\nimport { DiffSummary } from '../responses/DiffSummary';\nimport { isDiffNameStatus } from '../tasks/diff-name-status';\nimport { asNumber, LineParser, orVoid, parseStringResponse } from '../utils';\n\nconst statParser = [\n new LineParser<DiffResult>(\n /^(.+)\\s+\\|\\s+(\\d+)(\\s+[+\\-]+)?$/,\n (result, [file, changes, alterations = '']) => {\n result.files.push({\n file: file.trim(),\n changes: asNumber(changes),\n insertions: alterations.replace(/[^+]/g, '').length,\n deletions: alterations.replace(/[^-]/g, '').length,\n binary: false,\n });\n }\n ),\n new LineParser<DiffResult>(\n /^(.+) \\|\\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,\n (result, [file, before, after]) => {\n result.files.push({\n file: file.trim(),\n before: asNumber(before),\n after: asNumber(after),\n binary: true,\n });\n }\n ),\n new LineParser<DiffResult>(/^(.+)\\s+\\|\\s+Bin\\s*$/, (result, [file]) => {\n result.files.push({\n file: file.trim(),\n before: 0,\n after: 0,\n binary: true,\n });\n }),\n new LineParser<DiffResult>(\n /(\\d+) files? changed\\s*((?:, \\d+ [^,]+){0,2})/,\n (result, [changed, summary]) => {\n const inserted = /(\\d+) i/.exec(summary);\n const deleted = /(\\d+) d/.exec(summary);\n\n result.changed = asNumber(changed);\n result.insertions = asNumber(inserted?.[1]);\n result.deletions = asNumber(deleted?.[1]);\n }\n ),\n];\n\nconst numStatParser = [\n new LineParser<DiffResult>(\n /(\\d+)\\t(\\d+)\\t(.+)$/,\n (result, [changesInsert, changesDelete, file]) => {\n const insertions = asNumber(changesInsert);\n const deletions = asNumber(changesDelete);\n\n result.changed++;\n result.insertions += insertions;\n result.deletions += deletions;\n\n result.files.push({\n file,\n changes: insertions + deletions,\n insertions,\n deletions,\n binary: false,\n });\n }\n ),\n new LineParser<DiffResult>(/-\\t-\\t(.+)$/, (result, [file]) => {\n result.changed++;\n\n result.files.push({\n file,\n after: 0,\n before: 0,\n binary: true,\n });\n }),\n];\n\nconst nameOnlyParser = [\n new LineParser<DiffResult>(/(.+)$/, (result, [file]) => {\n result.changed++;\n result.files.push({\n file,\n changes: 0,\n insertions: 0,\n deletions: 0,\n binary: false,\n });\n }),\n];\n\nconst nameStatusParser = [\n new LineParser<DiffResult>(\n /([ACDMRTUXB])([0-9]{0,3})\\t(.[^\\t]*)(\\t(.[^\\t]*))?$/,\n (result, [status, similarity, from, _to, to]) => {\n result.changed++;\n result.files.push({\n file: to ?? from,\n changes: 0,\n insertions: 0,\n deletions: 0,\n binary: false,\n status: orVoid(isDiffNameStatus(status) && status),\n from: orVoid(!!to && from !== to && from),\n similarity: asNumber(similarity),\n });\n }\n ),\n];\n\nconst diffSummaryParsers: Record<LogFormat, LineParser<DiffResult>[]> = {\n [LogFormat.NONE]: statParser,\n [LogFormat.STAT]: statParser,\n [LogFormat.NUM_STAT]: numStatParser,\n [LogFormat.NAME_STATUS]: nameStatusParser,\n [LogFormat.NAME_ONLY]: nameOnlyParser,\n};\n\nexport function getDiffParser(format = LogFormat.NONE) {\n const parser = diffSummaryParsers[format];\n\n return (stdOut: string) => parseStringResponse(new DiffSummary(), parser, stdOut, false);\n}\n", "import type { ListLogLine, LogResult } from '../../typings';\nimport { LogFormat } from '../args/log-format';\nimport { toLinesWithContent } from '../utils';\nimport { getDiffParser } from './parse-diff-summary';\n\nexport const START_BOUNDARY = 'òòòòòò ';\n\nexport const COMMIT_BOUNDARY = ' òò';\n\nexport const SPLITTER = ' ò ';\n\nconst defaultFieldNames = ['hash', 'date', 'message', 'refs', 'author_name', 'author_email'];\n\nfunction lineBuilder(tokens: string[], fields: string[]): any {\n return fields.reduce(\n (line, field, index) => {\n line[field] = tokens[index] || '';\n return line;\n },\n Object.create({ diff: null }) as any\n );\n}\n\nexport function createListLogSummaryParser<T = any>(\n splitter = SPLITTER,\n fields = defaultFieldNames,\n logFormat = LogFormat.NONE\n) {\n const parseDiffResult = getDiffParser(logFormat);\n\n return function (stdOut: string): LogResult<T> {\n const all: ReadonlyArray<T & ListLogLine> = toLinesWithContent(\n stdOut.trim(),\n false,\n START_BOUNDARY\n ).map(function (item) {\n const lineDetail = item.split(COMMIT_BOUNDARY);\n const listLogLine: T & ListLogLine = lineBuilder(lineDetail[0].split(splitter), fields);\n\n if (lineDetail.length > 1 && lineDetail[1].trim()) {\n listLogLine.diff = parseDiffResult(lineDetail[1]);\n }\n\n return listLogLine;\n });\n\n return {\n all,\n latest: (all.length && all[0]) || null,\n total: all.length,\n };\n };\n}\n", "import type { DiffResult } from '../../typings';\nimport { isLogFormat, LogFormat, logFormatFromCommand } from '../args/log-format';\nimport { getDiffParser } from '../parsers/parse-diff-summary';\nimport type { StringTask } from '../types';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nexport function diffSummaryTask(customArgs: string[]): StringTask<DiffResult> | EmptyTask {\n let logFormat = logFormatFromCommand(customArgs);\n\n const commands = ['diff'];\n\n if (logFormat === LogFormat.NONE) {\n logFormat = LogFormat.STAT;\n commands.push('--stat=4096');\n }\n\n commands.push(...customArgs);\n\n return (\n validateLogFormatConfig(commands) || {\n commands,\n format: 'utf-8',\n parser: getDiffParser(logFormat),\n }\n );\n}\n\nexport function validateLogFormatConfig(customArgs: unknown[]): EmptyTask | void {\n const flags = customArgs.filter(isLogFormat);\n\n if (flags.length > 1) {\n return configurationErrorTask(\n `Summary flags are mutually exclusive - pick one of ${flags.join(',')}`\n );\n }\n\n if (flags.length && customArgs.includes('-z')) {\n return configurationErrorTask(\n `Summary flag ${flags} parsing is not compatible with null termination option '-z'`\n );\n }\n}\n", "import { pathspec } from '@simple-git/args-pathspec';\n\nimport type { LogResult, Options, SimpleGit } from '../../typings';\nimport { logFormatFromCommand } from '../args/log-format';\nimport {\n COMMIT_BOUNDARY,\n createListLogSummaryParser,\n SPLITTER,\n START_BOUNDARY,\n} from '../parsers/parse-list-log-summary';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport {\n appendTaskOptions,\n asStringArray,\n filterArray,\n filterPlainObject,\n filterString,\n filterType,\n trailingFunctionArgument,\n trailingOptionsArgument,\n} from '../utils';\nimport { validateLogFormatConfig } from './diff';\nimport { configurationErrorTask } from './task';\n\nenum excludeOptions {\n '--pretty',\n 'max-count',\n 'maxCount',\n 'n',\n 'file',\n 'format',\n 'from',\n 'to',\n 'splitter',\n 'symmetric',\n 'mailMap',\n 'multiLine',\n 'strictDate',\n}\n\nexport interface DefaultLogFields {\n hash: string;\n date: string;\n message: string;\n refs: string;\n body: string;\n author_name: string;\n author_email: string;\n}\n\nexport type LogOptions<T = DefaultLogFields> = {\n file?: string;\n format?: T;\n from?: string;\n mailMap?: boolean;\n maxCount?: number;\n multiLine?: boolean;\n splitter?: string;\n strictDate?: boolean;\n symmetric?: boolean;\n to?: string;\n};\n\ninterface ParsedLogOptions {\n fields: string[];\n splitter: string;\n commands: string[];\n}\n\nfunction prettyFormat(\n format: Record<string, string | unknown>,\n splitter: string\n): [string[], string] {\n const fields: string[] = [];\n const formatStr: string[] = [];\n\n Object.keys(format).forEach((field) => {\n fields.push(field);\n formatStr.push(String(format[field]));\n });\n\n return [fields, formatStr.join(splitter)];\n}\n\nfunction userOptions<T extends Options>(input: T): Options {\n return Object.keys(input).reduce((out, key) => {\n if (!(key in excludeOptions)) {\n out[key] = input[key];\n }\n return out;\n }, {} as Options);\n}\n\nexport function parseLogOptions<T extends Options>(\n opt: Options | LogOptions<T> = {},\n customArgs: string[] = []\n): ParsedLogOptions {\n const splitter = filterType(opt.splitter, filterString, SPLITTER);\n const format = filterPlainObject(opt.format)\n ? opt.format\n : {\n hash: '%H',\n date: opt.strictDate === false ? '%ai' : '%aI',\n message: '%s',\n refs: '%D',\n body: opt.multiLine ? '%B' : '%b',\n author_name: opt.mailMap !== false ? '%aN' : '%an',\n author_email: opt.mailMap !== false ? '%aE' : '%ae',\n };\n\n const [fields, formatStr] = prettyFormat(format, splitter);\n\n const suffix: string[] = [];\n const command: string[] = [\n `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`,\n ...customArgs,\n ];\n\n const maxCount: number | undefined = (opt as any).n || (opt as any)['max-count'] || opt.maxCount;\n if (maxCount) {\n command.push(`--max-count=${maxCount}`);\n }\n\n if (opt.from || opt.to) {\n const rangeOperator = opt.symmetric !== false ? '...' : '..';\n suffix.push(`${opt.from || ''}${rangeOperator}${opt.to || ''}`);\n }\n\n if (filterString(opt.file)) {\n command.push('--follow', pathspec(opt.file));\n }\n\n appendTaskOptions(userOptions(opt as Options), command);\n\n return {\n fields,\n splitter,\n commands: [...command, ...suffix],\n };\n}\n\nexport function logTask<T>(\n splitter: string,\n fields: string[],\n customArgs: string[]\n): StringTask<LogResult<T>> {\n const parser = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs));\n\n return {\n commands: ['log', ...customArgs],\n format: 'utf-8',\n parser,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'log'> {\n return {\n log<T extends Options>(this: SimpleGitApi, ...rest: unknown[]) {\n const next = trailingFunctionArgument(arguments);\n const options = parseLogOptions<T>(\n trailingOptionsArgument(arguments),\n asStringArray(filterType(arguments[0], filterArray, []))\n );\n const task =\n rejectDeprecatedSignatures(...rest) ||\n validateLogFormatConfig(options.commands) ||\n createLogTask(options);\n\n return this._runTask(task, next);\n },\n };\n\n function createLogTask(options: ParsedLogOptions) {\n return logTask(options.splitter, options.fields, options.commands);\n }\n\n function rejectDeprecatedSignatures(from?: unknown, to?: unknown) {\n return (\n filterString(from) &&\n filterString(to) &&\n configurationErrorTask(\n `git.log(string, string) should be replaced with git.log({ from: string, to: string })`\n )\n );\n }\n}\n", "import type {\n MergeConflict,\n MergeConflictDeletion,\n MergeDetail,\n MergeResultStatus,\n} from '../../typings';\n\nexport class MergeSummaryConflict implements MergeConflict {\n constructor(\n public readonly reason: string,\n public readonly file: string | null = null,\n public readonly meta?: MergeConflictDeletion\n ) {}\n\n toString() {\n return `${this.file}:${this.reason}`;\n }\n}\n\nexport class MergeSummaryDetail implements MergeDetail {\n public conflicts: MergeConflict[] = [];\n public merges: string[] = [];\n public result: MergeResultStatus = 'success';\n\n get failed() {\n return this.conflicts.length > 0;\n }\n\n get reason() {\n return this.result;\n }\n\n toString() {\n if (this.conflicts.length) {\n return `CONFLICTS: ${this.conflicts.join(', ')}`;\n }\n\n return 'OK';\n }\n}\n", "import type {\n PullDetailFileChanges,\n PullDetailSummary,\n PullFailedResult,\n PullResult,\n} from '../../typings';\n\nexport class PullSummary implements PullResult {\n public remoteMessages = {\n all: [],\n };\n public created = [];\n public deleted: string[] = [];\n public files: string[] = [];\n public deletions: PullDetailFileChanges = {};\n public insertions: PullDetailFileChanges = {};\n public summary: PullDetailSummary = {\n changes: 0,\n deletions: 0,\n insertions: 0,\n };\n}\n\nexport class PullFailedSummary implements PullFailedResult {\n remote = '';\n hash = {\n local: '',\n remote: '',\n };\n branch = {\n local: '',\n remote: '',\n };\n message = '';\n\n toString() {\n return this.message;\n }\n}\n", "import type {\n RemoteMessageResult,\n RemoteMessages,\n RemoteMessagesObjectEnumeration,\n} from '../../typings';\nimport { asNumber, RemoteLineParser } from '../utils';\n\nfunction objectEnumerationResult<T extends RemoteMessages = RemoteMessages>(\n remoteMessages: T\n): RemoteMessagesObjectEnumeration {\n return (remoteMessages.objects = remoteMessages.objects || {\n compressing: 0,\n counting: 0,\n enumerating: 0,\n packReused: 0,\n reused: { count: 0, delta: 0 },\n total: { count: 0, delta: 0 },\n });\n}\n\nfunction asObjectCount(source: string) {\n const count = /^\\s*(\\d+)/.exec(source);\n const delta = /delta (\\d+)/i.exec(source);\n\n return {\n count: asNumber((count && count[1]) || '0'),\n delta: asNumber((delta && delta[1]) || '0'),\n };\n}\n\nexport const remoteMessagesObjectParsers: RemoteLineParser<RemoteMessageResult<RemoteMessages>>[] =\n [\n new RemoteLineParser(\n /^remote:\\s*(enumerating|counting|compressing) objects: (\\d+),/i,\n (result, [action, count]) => {\n const key = action.toLowerCase();\n const enumeration = objectEnumerationResult(result.remoteMessages);\n\n Object.assign(enumeration, { [key]: asNumber(count) });\n }\n ),\n new RemoteLineParser(\n /^remote:\\s*(enumerating|counting|compressing) objects: \\d+% \\(\\d+\\/(\\d+)\\),/i,\n (result, [action, count]) => {\n const key = action.toLowerCase();\n const enumeration = objectEnumerationResult(result.remoteMessages);\n\n Object.assign(enumeration, { [key]: asNumber(count) });\n }\n ),\n new RemoteLineParser(\n /total ([^,]+), reused ([^,]+), pack-reused (\\d+)/i,\n (result, [total, reused, packReused]) => {\n const objects = objectEnumerationResult(result.remoteMessages);\n objects.total = asObjectCount(total);\n objects.reused = asObjectCount(reused);\n objects.packReused = asNumber(packReused);\n }\n ),\n ];\n", "import type { PushResultRemoteMessages, RemoteMessageResult, RemoteMessages } from '../../typings';\nimport { asNumber, parseStringResponse, RemoteLineParser } from '../utils';\nimport { remoteMessagesObjectParsers } from './parse-remote-objects';\n\nconst parsers: RemoteLineParser<RemoteMessageResult<PushResultRemoteMessages | RemoteMessages>>[] =\n [\n new RemoteLineParser(/^remote:\\s*(.+)$/, (result, [text]) => {\n result.remoteMessages.all.push(text.trim());\n return false;\n }),\n ...remoteMessagesObjectParsers,\n new RemoteLineParser(\n [/create a (?:pull|merge) request/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [pullRequestUrl]) => {\n (result.remoteMessages as PushResultRemoteMessages).pullRequestUrl = pullRequestUrl;\n }\n ),\n new RemoteLineParser(\n [/found (\\d+) vulnerabilities.+\\(([^)]+)\\)/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [count, summary, url]) => {\n (result.remoteMessages as PushResultRemoteMessages).vulnerabilities = {\n count: asNumber(count),\n summary,\n url,\n };\n }\n ),\n ];\n\nexport function parseRemoteMessages<T extends RemoteMessages = RemoteMessages>(\n _stdOut: string,\n stdErr: string\n): RemoteMessageResult {\n return parseStringResponse({ remoteMessages: new RemoteMessageSummary() as T }, parsers, stdErr);\n}\n\nexport class RemoteMessageSummary implements RemoteMessages {\n public readonly all: string[] = [];\n}\n", "import type { PullDetail, PullFailedResult, PullResult, RemoteMessages } from '../../typings';\nimport { PullFailedSummary, PullSummary } from '../responses/PullSummary';\nimport type { TaskParser } from '../types';\nimport { append, LineParser, parseStringResponse } from '../utils';\nimport { parseRemoteMessages } from './parse-remote-messages';\n\nconst FILE_UPDATE_REGEX = /^\\s*(.+?)\\s+\\|\\s+\\d+\\s*(\\+*)(-*)/;\nconst SUMMARY_REGEX = /(\\d+)\\D+((\\d+)\\D+\\(\\+\\))?(\\D+(\\d+)\\D+\\(-\\))?/;\nconst ACTION_REGEX = /^(create|delete) mode \\d+ (.+)/;\n\nconst parsers: LineParser<PullResult>[] = [\n new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => {\n result.files.push(file);\n\n if (insertions) {\n result.insertions[file] = insertions.length;\n }\n\n if (deletions) {\n result.deletions[file] = deletions.length;\n }\n }),\n new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => {\n if (insertions !== undefined || deletions !== undefined) {\n result.summary.changes = +changes || 0;\n result.summary.insertions = +insertions || 0;\n result.summary.deletions = +deletions || 0;\n return true;\n }\n return false;\n }),\n new LineParser(ACTION_REGEX, (result, [action, file]) => {\n append(result.files, file);\n append(action === 'create' ? result.created : result.deleted, file);\n }),\n];\n\nconst errorParsers: LineParser<PullFailedResult>[] = [\n new LineParser(/^from\\s(.+)$/i, (result, [remote]) => void (result.remote = remote)),\n new LineParser(/^fatal:\\s(.+)$/, (result, [message]) => void (result.message = message)),\n new LineParser(\n /([a-z0-9]+)\\.\\.([a-z0-9]+)\\s+(\\S+)\\s+->\\s+(\\S+)$/,\n (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => {\n result.branch.local = branchLocal;\n result.hash.local = hashLocal;\n result.branch.remote = branchRemote;\n result.hash.remote = hashRemote;\n }\n ),\n];\n\nexport const parsePullDetail: TaskParser<string, PullDetail> = (stdOut, stdErr) => {\n return parseStringResponse(new PullSummary(), parsers, [stdOut, stdErr]);\n};\n\nexport const parsePullResult: TaskParser<string, PullResult> = (stdOut, stdErr) => {\n return Object.assign(\n new PullSummary(),\n parsePullDetail(stdOut, stdErr),\n parseRemoteMessages<RemoteMessages>(stdOut, stdErr)\n );\n};\n\nexport function parsePullErrorResult(stdOut: string, stdErr: string) {\n const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]);\n\n return pullError.message && pullError;\n}\n", "import type { MergeDetail, MergeResult } from '../../typings';\nimport { MergeSummaryConflict, MergeSummaryDetail } from '../responses/MergeSummary';\nimport type { TaskParser } from '../types';\nimport { LineParser, parseStringResponse } from '../utils';\nimport { parsePullResult } from './parse-pull';\n\nconst parsers: LineParser<MergeDetail>[] = [\n new LineParser(/^Auto-merging\\s+(.+)$/, (summary, [autoMerge]) => {\n summary.merges.push(autoMerge);\n }),\n new LineParser(/^CONFLICT\\s+\\((.+)\\): Merge conflict in (.+)$/, (summary, [reason, file]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, file));\n }),\n new LineParser(\n /^CONFLICT\\s+\\((.+\\/delete)\\): (.+) deleted in (.+) and/,\n (summary, [reason, file, deleteRef]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef }));\n }\n ),\n new LineParser(/^CONFLICT\\s+\\((.+)\\):/, (summary, [reason]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, null));\n }),\n new LineParser(/^Automatic merge failed;\\s+(.+)$/, (summary, [result]) => {\n summary.result = result;\n }),\n];\n\n/**\n * Parse the complete response from `git.merge`\n */\nexport const parseMergeResult: TaskParser<string, MergeResult> = (stdOut, stdErr) => {\n return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr));\n};\n\n/**\n * Parse the merge specific detail (ie: not the content also available in the pull detail) from `git.mnerge`\n * @param stdOut\n */\nexport const parseMergeDetail: TaskParser<string, MergeDetail> = (stdOut) => {\n return parseStringResponse(new MergeSummaryDetail(), parsers, stdOut);\n};\n", "import type { MergeResult } from '../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parseMergeResult } from '../parsers/parse-merge';\nimport type { StringTask } from '../types';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nexport function mergeTask(customArgs: string[]): EmptyTask | StringTask<MergeResult> {\n if (!customArgs.length) {\n return configurationErrorTask('Git.merge requires at least one option');\n }\n\n return {\n commands: ['merge', ...customArgs],\n format: 'utf-8',\n parser(stdOut, stdErr): MergeResult {\n const merge = parseMergeResult(stdOut, stdErr);\n if (merge.failed) {\n throw new GitResponseError(merge);\n }\n\n return merge;\n },\n };\n}\n", "import type {\n PushDetail,\n PushResult,\n PushResultPushedItem,\n PushResultRemoteMessages,\n} from '../../typings';\nimport type { TaskParser } from '../types';\nimport { LineParser, parseStringResponse } from '../utils';\nimport { parseRemoteMessages } from './parse-remote-messages';\n\nfunction pushResultPushedItem(local: string, remote: string, status: string): PushResultPushedItem {\n const deleted = status.includes('deleted');\n const tag = status.includes('tag') || /^refs\\/tags/.test(local);\n const alreadyUpdated = !status.includes('new');\n\n return {\n deleted,\n tag,\n branch: !tag,\n new: !alreadyUpdated,\n alreadyUpdated,\n local,\n remote,\n };\n}\n\nconst parsers: LineParser<PushDetail>[] = [\n new LineParser(/^Pushing to (.+)$/, (result, [repo]) => {\n result.repo = repo;\n }),\n new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => {\n result.ref = {\n ...(result.ref || {}),\n local,\n };\n }),\n new LineParser(/^[=*-]\\s+([^:]+):(\\S+)\\s+\\[(.+)]$/, (result, [local, remote, type]) => {\n result.pushed.push(pushResultPushedItem(local, remote, type));\n }),\n new LineParser(\n /^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,\n (result, [local, remote, remoteName]) => {\n result.branch = {\n ...(result.branch || {}),\n local,\n remote,\n remoteName,\n };\n }\n ),\n new LineParser(\n /^([^:]+):(\\S+)\\s+([a-z0-9]+)\\.\\.([a-z0-9]+)$/,\n (result, [local, remote, from, to]) => {\n result.update = {\n head: {\n local,\n remote,\n },\n hash: {\n from,\n to,\n },\n };\n }\n ),\n];\n\nexport const parsePushResult: TaskParser<string, PushResult> = (stdOut, stdErr) => {\n const pushDetail = parsePushDetail(stdOut, stdErr);\n const responseDetail = parseRemoteMessages<PushResultRemoteMessages>(stdOut, stdErr);\n\n return {\n ...pushDetail,\n ...responseDetail,\n };\n};\n\nexport const parsePushDetail: TaskParser<string, PushDetail> = (stdOut, stdErr) => {\n return parseStringResponse({ pushed: [] }, parsers, [stdOut, stdErr]);\n};\n", "import type { PushResult } from '../../typings';\nimport { parsePushResult as parser } from '../parsers/parse-push';\nimport type { StringTask } from '../types';\nimport { append, remove } from '../utils';\n\ntype PushRef = { remote?: string; branch?: string };\n\nexport function pushTagsTask(ref: PushRef = {}, customArgs: string[]): StringTask<PushResult> {\n append(customArgs, '--tags');\n return pushTask(ref, customArgs);\n}\n\nexport function pushTask(ref: PushRef = {}, customArgs: string[]): StringTask<PushResult> {\n const commands = ['push', ...customArgs];\n if (ref.branch) {\n commands.splice(1, 0, ref.branch);\n }\n if (ref.remote) {\n commands.splice(1, 0, ref.remote);\n }\n\n remove(commands, '-v');\n append(commands, '--verbose');\n append(commands, '--porcelain');\n\n return {\n commands,\n format: 'utf-8',\n parser,\n };\n}\n", "import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { getTrailingOptions, trailingFunctionArgument } from '../utils';\nimport { straightThroughBufferTask, straightThroughStringTask } from './task';\n\nexport default function (): Pick<SimpleGit, 'showBuffer' | 'show'> {\n return {\n showBuffer(this: SimpleGitApi) {\n const commands = ['show', ...getTrailingOptions(arguments, 1)];\n if (!commands.includes('--binary')) {\n commands.splice(1, 0, '--binary');\n }\n\n return this._runTask(\n straightThroughBufferTask(commands),\n trailingFunctionArgument(arguments)\n );\n },\n\n show(this: SimpleGitApi) {\n const commands = ['show', ...getTrailingOptions(arguments, 1)];\n return this._runTask(\n straightThroughStringTask(commands),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n", "import type { FileStatusResult } from '../../typings';\n\nexport const fromPathRegex = /^(.+)\\0(.+)$/;\n\nexport class FileStatusSummary implements FileStatusResult {\n public readonly from: string | undefined;\n\n constructor(\n public path: string,\n public index: string,\n public working_dir: string\n ) {\n if (index === 'R' || working_dir === 'R') {\n const detail = fromPathRegex.exec(path) || [null, path, path];\n this.from = detail[2] || '';\n this.path = detail[1] || '';\n }\n }\n}\n", "import type { StatusResult } from '../../typings';\nimport { filterString, filterType, NULL } from '../utils';\nimport { FileStatusSummary } from './FileStatusSummary';\n\ntype StatusLineParser = (result: StatusResult, file: string) => void;\n\nexport class StatusSummary implements StatusResult {\n public not_added = [];\n public conflicted = [];\n public created = [];\n public deleted = [];\n public ignored = undefined;\n public modified = [];\n public renamed = [];\n public files = [];\n public staged = [];\n public ahead = 0;\n public behind = 0;\n public current = null;\n public tracking = null;\n public detached = false;\n\n public isClean = () => {\n return !this.files.length;\n };\n}\n\nenum PorcelainFileStatus {\n ADDED = 'A',\n DELETED = 'D',\n MODIFIED = 'M',\n RENAMED = 'R',\n COPIED = 'C',\n UNMERGED = 'U',\n UNTRACKED = '?',\n IGNORED = '!',\n NONE = ' ',\n}\n\nfunction renamedFile(line: string) {\n const [to, from] = line.split(NULL);\n\n return {\n from: from || to,\n to,\n };\n}\n\nfunction parser(\n indexX: PorcelainFileStatus,\n indexY: PorcelainFileStatus,\n handler: StatusLineParser\n): [string, StatusLineParser] {\n return [`${indexX}${indexY}`, handler];\n}\n\nfunction conflicts(indexX: PorcelainFileStatus, ...indexY: PorcelainFileStatus[]) {\n return indexY.map((y) => parser(indexX, y, (result, file) => result.conflicted.push(file)));\n}\n\nconst parsers: Map<string, StatusLineParser> = new Map([\n parser(PorcelainFileStatus.NONE, PorcelainFileStatus.ADDED, (result, file) =>\n result.created.push(file)\n ),\n parser(PorcelainFileStatus.NONE, PorcelainFileStatus.DELETED, (result, file) =>\n result.deleted.push(file)\n ),\n parser(PorcelainFileStatus.NONE, PorcelainFileStatus.MODIFIED, (result, file) =>\n result.modified.push(file)\n ),\n\n parser(PorcelainFileStatus.ADDED, PorcelainFileStatus.NONE, (result, file) => {\n result.created.push(file);\n result.staged.push(file);\n }),\n parser(PorcelainFileStatus.ADDED, PorcelainFileStatus.MODIFIED, (result, file) => {\n result.created.push(file);\n result.staged.push(file);\n result.modified.push(file);\n }),\n\n parser(PorcelainFileStatus.DELETED, PorcelainFileStatus.NONE, (result, file) => {\n result.deleted.push(file);\n result.staged.push(file);\n }),\n\n parser(PorcelainFileStatus.MODIFIED, PorcelainFileStatus.NONE, (result, file) => {\n result.modified.push(file);\n result.staged.push(file);\n }),\n parser(PorcelainFileStatus.MODIFIED, PorcelainFileStatus.MODIFIED, (result, file) => {\n result.modified.push(file);\n result.staged.push(file);\n }),\n\n parser(PorcelainFileStatus.RENAMED, PorcelainFileStatus.NONE, (result, file) => {\n result.renamed.push(renamedFile(file));\n }),\n parser(PorcelainFileStatus.RENAMED, PorcelainFileStatus.MODIFIED, (result, file) => {\n const renamed = renamedFile(file);\n result.renamed.push(renamed);\n result.modified.push(renamed.to);\n }),\n parser(PorcelainFileStatus.IGNORED, PorcelainFileStatus.IGNORED, (_result, _file) => {\n (_result.ignored = _result.ignored || []).push(_file);\n }),\n\n parser(PorcelainFileStatus.UNTRACKED, PorcelainFileStatus.UNTRACKED, (result, file) =>\n result.not_added.push(file)\n ),\n\n ...conflicts(PorcelainFileStatus.ADDED, PorcelainFileStatus.ADDED, PorcelainFileStatus.UNMERGED),\n ...conflicts(\n PorcelainFileStatus.DELETED,\n PorcelainFileStatus.DELETED,\n PorcelainFileStatus.UNMERGED\n ),\n ...conflicts(\n PorcelainFileStatus.UNMERGED,\n PorcelainFileStatus.ADDED,\n PorcelainFileStatus.DELETED,\n PorcelainFileStatus.UNMERGED\n ),\n\n [\n '##',\n (result, line) => {\n const aheadReg = /ahead (\\d+)/;\n const behindReg = /behind (\\d+)/;\n const currentReg = /^(.+?(?=(?:\\.{3}|\\s|$)))/;\n const trackingReg = /\\.{3}(\\S*)/;\n const onEmptyBranchReg = /\\son\\s(\\S+?)(?=\\.{3}|$)/;\n\n let regexResult = aheadReg.exec(line);\n result.ahead = (regexResult && +regexResult[1]) || 0;\n\n regexResult = behindReg.exec(line);\n result.behind = (regexResult && +regexResult[1]) || 0;\n\n regexResult = currentReg.exec(line);\n result.current = filterType(regexResult?.[1], filterString, null);\n\n regexResult = trackingReg.exec(line);\n result.tracking = filterType(regexResult?.[1], filterString, null);\n\n regexResult = onEmptyBranchReg.exec(line);\n if (regexResult) {\n result.current = filterType(regexResult?.[1], filterString, result.current);\n }\n\n result.detached = /\\(no branch\\)/.test(line);\n },\n ],\n]);\n\nexport const parseStatusSummary = function (text: string): StatusResult {\n const lines = text.split(NULL);\n const status = new StatusSummary();\n\n for (let i = 0, l = lines.length; i < l; ) {\n let line = lines[i++].trim();\n\n if (!line) {\n continue;\n }\n\n if (line.charAt(0) === PorcelainFileStatus.RENAMED) {\n line += NULL + (lines[i++] || '');\n }\n\n splitLine(status, line);\n }\n\n return status;\n};\n\nfunction splitLine(result: StatusResult, lineStr: string) {\n const trimmed = lineStr.trim();\n switch (' ') {\n case trimmed.charAt(2):\n return data(trimmed.charAt(0), trimmed.charAt(1), trimmed.slice(3));\n case trimmed.charAt(1):\n return data(PorcelainFileStatus.NONE, trimmed.charAt(0), trimmed.slice(2));\n default:\n return;\n }\n\n function data(index: string, workingDir: string, path: string) {\n const raw = `${index}${workingDir}`;\n const handler = parsers.get(raw);\n\n if (handler) {\n handler(result, path);\n }\n\n if (raw !== '##' && raw !== '!!') {\n result.files.push(new FileStatusSummary(path, index, workingDir));\n }\n }\n}\n", "import type { StatusResult } from '../../typings';\nimport { parseStatusSummary } from '../responses/StatusSummary';\nimport type { StringTask } from '../types';\n\nconst ignoredOptions = ['--null', '-z'];\n\nexport function statusTask(customArgs: string[]): StringTask<StatusResult> {\n const commands = [\n 'status',\n '--porcelain',\n '-b',\n '-u',\n '--null',\n ...customArgs.filter((arg) => !ignoredOptions.includes(arg)),\n ];\n\n return {\n format: 'utf-8',\n commands,\n parser(text: string) {\n return parseStatusSummary(text);\n },\n };\n}\n", "import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { asNumber, ExitCodes, LineParser, parseStringResponse } from '../utils';\n\nexport interface VersionResult {\n major: number;\n minor: number;\n patch: number | string;\n agent: string;\n installed: boolean;\n}\n\nconst NOT_INSTALLED = 'installed=false';\n\nfunction versionResponse(\n major = 0,\n minor = 0,\n patch: string | number = 0,\n agent = '',\n installed = true\n): VersionResult {\n return Object.defineProperty(\n {\n major,\n minor,\n patch,\n agent,\n installed,\n },\n 'toString',\n {\n value() {\n return `${this.major}.${this.minor}.${this.patch}`;\n },\n configurable: false,\n enumerable: false,\n }\n );\n}\n\nfunction notInstalledResponse() {\n return versionResponse(0, 0, 0, '', false);\n}\n\nexport default function (): Pick<SimpleGit, 'version'> {\n return {\n version(this: SimpleGitApi) {\n return this._runTask({\n commands: ['--version'],\n format: 'utf-8',\n parser: versionParser,\n onError(result, error, done, fail) {\n if (result.exitCode === ExitCodes.NOT_FOUND) {\n return done(Buffer.from(NOT_INSTALLED));\n }\n\n fail(error);\n },\n });\n },\n };\n}\n\nconst parsers: LineParser<VersionResult>[] = [\n new LineParser(\n /version (\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*\\((.+)\\))?/,\n (result, [major, minor, patch, agent = '']) => {\n Object.assign(\n result,\n versionResponse(asNumber(major), asNumber(minor), asNumber(patch), agent)\n );\n }\n ),\n new LineParser(\n /version (\\d+)\\.(\\d+)\\.(\\D+)(.+)?$/,\n (result, [major, minor, patch, agent = '']) => {\n Object.assign(result, versionResponse(asNumber(major), asNumber(minor), patch, agent));\n }\n ),\n];\n\nfunction versionParser(stdOut: string) {\n if (stdOut === NOT_INSTALLED) {\n return notInstalledResponse();\n }\n\n return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers, stdOut);\n}\n", "import type { SimpleGitBase } from '../typings';\nimport { taskCallback } from './task-callback';\nimport { changeWorkingDirectoryTask } from './tasks/change-working-directory';\nimport checkout from './tasks/checkout';\nimport clone from './tasks/clone';\nimport commit from './tasks/commit';\nimport config from './tasks/config';\nimport countObjects from './tasks/count-objects';\nimport firstCommit from './tasks/first-commit';\nimport grep from './tasks/grep';\nimport { hashObjectTask } from './tasks/hash-object';\nimport { initTask } from './tasks/init';\nimport interpretTrailers from './tasks/interpret-trailers';\nimport log from './tasks/log';\nimport { mergeTask } from './tasks/merge';\nimport { pushTask } from './tasks/push';\nimport show from './tasks/show';\nimport { statusTask } from './tasks/status';\nimport { configurationErrorTask, straightThroughStringTask } from './tasks/task';\nimport version from './tasks/version';\nimport type {\n outputHandler,\n SimpleGitExecutor,\n SimpleGitTask,\n SimpleGitTaskCallback,\n} from './types';\nimport {\n asArray,\n filterString,\n filterType,\n getTrailingOptions,\n trailingFunctionArgument,\n} from './utils';\n\nexport class SimpleGitApi implements SimpleGitBase {\n constructor(private _executor: SimpleGitExecutor) {}\n\n protected _runTask<T>(task: SimpleGitTask<T>, then?: SimpleGitTaskCallback<T>) {\n const chain = this._executor.chain();\n const promise = chain.push(task);\n\n if (then) {\n taskCallback(task, promise, then);\n }\n\n return Object.create(this, {\n then: { value: promise.then.bind(promise) },\n catch: { value: promise.catch.bind(promise) },\n _executor: { value: chain },\n });\n }\n\n add(files: string | string[]) {\n return this._runTask(\n straightThroughStringTask(['add', ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n }\n\n cwd(directory: string | { path: string; root?: boolean }) {\n const next = trailingFunctionArgument(arguments);\n\n if (typeof directory === 'string') {\n return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next);\n }\n\n if (typeof directory?.path === 'string') {\n return this._runTask(\n changeWorkingDirectoryTask(\n directory.path,\n (directory.root && this._executor) || undefined\n ),\n next\n );\n }\n\n return this._runTask(\n configurationErrorTask('Git.cwd: workingDirectory must be supplied as a string'),\n next\n );\n }\n\n hashObject(path: string, write: boolean | unknown) {\n return this._runTask(\n hashObjectTask(path, write === true),\n trailingFunctionArgument(arguments)\n );\n }\n\n init(bare?: boolean | unknown) {\n return this._runTask(\n initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n\n merge() {\n return this._runTask(\n mergeTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n\n mergeFromTo(remote: string, branch: string) {\n if (!(filterString(remote) && filterString(branch))) {\n return this._runTask(\n configurationErrorTask(\n `Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`\n )\n );\n }\n\n return this._runTask(\n mergeTask([remote, branch, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments, false)\n );\n }\n\n outputHandler(handler: outputHandler) {\n this._executor.outputHandler = handler;\n return this;\n }\n\n push() {\n const task = pushTask(\n {\n remote: filterType(arguments[0], filterString),\n branch: filterType(arguments[1], filterString),\n },\n getTrailingOptions(arguments)\n );\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n }\n\n stash() {\n return this._runTask(\n straightThroughStringTask(['stash', ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n }\n\n status() {\n return this._runTask(\n statusTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n}\n\nObject.assign(\n SimpleGitApi.prototype,\n checkout(),\n clone(),\n commit(),\n config(),\n countObjects(),\n firstCommit(),\n grep(),\n interpretTrailers(),\n log(),\n show(),\n version()\n);\n", "import { createDeferred, type DeferredPromise } from '@kwsites/promise-deferred';\n\nimport { createLogger } from '../git-logger';\nimport { append, remove } from '../utils';\n\ntype ScheduleCompleteCallback = () => void;\ntype ScheduledTask = Pick<DeferredPromise<ScheduleCompleteCallback>, 'promise' | 'done'> & {\n id: number;\n};\n\nconst createScheduledTask: () => ScheduledTask = (() => {\n let id = 0;\n return () => {\n id++;\n const { promise, done } = createDeferred<ScheduleCompleteCallback>();\n\n return {\n promise,\n done,\n id,\n };\n };\n})();\n\nexport class Scheduler {\n private logger = createLogger('', 'scheduler');\n private pending: ScheduledTask[] = [];\n private running: ScheduledTask[] = [];\n\n constructor(private concurrency = 2) {\n this.logger(`Constructed, concurrency=%s`, concurrency);\n }\n\n private schedule() {\n if (!this.pending.length || this.running.length >= this.concurrency) {\n this.logger(\n `Schedule attempt ignored, pending=%s running=%s concurrency=%s`,\n this.pending.length,\n this.running.length,\n this.concurrency\n );\n return;\n }\n\n const task = append(this.running, this.pending.shift()!);\n this.logger(`Attempting id=%s`, task.id);\n task.done(() => {\n this.logger(`Completing id=`, task.id);\n remove(this.running, task);\n this.schedule();\n });\n }\n\n next(): Promise<ScheduleCompleteCallback> {\n const { promise, id } = append(this.pending, createScheduledTask());\n this.logger(`Scheduling id=%s`, id);\n\n this.schedule();\n\n return promise;\n }\n}\n", "import type { OptionFlags, Options, StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport type ApplyOptions = Options &\n OptionFlags<\n | '--stat'\n | '--numstat'\n | '--summary'\n | '--check'\n | '--index'\n | '--intent-to-add'\n | '--3way'\n | '--apply'\n | '--no-add'\n | '-R'\n | '--reverse'\n | '--allow-binary-replacement'\n | '--binary'\n | '--reject'\n | '-z'\n | '--inaccurate-eof'\n | '--recount'\n | '--cached'\n | '--ignore-space-change'\n | '--ignore-whitespace'\n | '--verbose'\n | '--unsafe-paths'\n > &\n OptionFlags<'--whitespace', 'nowarn' | 'warn' | 'fix' | 'error' | 'error-all'> &\n OptionFlags<'--build-fake-ancestor' | '--exclude' | '--include' | '--directory', string> &\n OptionFlags<'-p' | '-C', number>;\n\nexport function applyPatchTask(patches: string[], customArgs: string[]): StringTask<string> {\n return straightThroughStringTask(['apply', ...customArgs, ...patches]);\n}\n", "import type { BranchSummary, BranchSummaryBranch } from '../../typings';\n\nexport enum BranchStatusIdentifier {\n CURRENT = '*',\n LINKED = '+',\n}\n\nexport class BranchSummaryResult implements BranchSummary {\n public all: string[] = [];\n public branches: { [p: string]: BranchSummaryBranch } = {};\n public current: string = '';\n public detached: boolean = false;\n\n push(\n status: BranchStatusIdentifier | unknown,\n detached: boolean,\n name: string,\n commit: string,\n label: string\n ) {\n if (status === BranchStatusIdentifier.CURRENT) {\n this.detached = detached;\n this.current = name;\n }\n\n this.all.push(name);\n this.branches[name] = {\n current: status === BranchStatusIdentifier.CURRENT,\n linkedWorkTree: status === BranchStatusIdentifier.LINKED,\n name,\n commit,\n label,\n };\n }\n}\n", "import type { BranchSummary } from '../../typings';\nimport { BranchStatusIdentifier, BranchSummaryResult } from '../responses/BranchSummary';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<BranchSummaryResult>[] = [\n new LineParser(\n /^([*+]\\s)?\\((?:HEAD )?detached (?:from|at) (\\S+)\\)\\s+([a-z0-9]+)\\s(.*)$/,\n (result, [current, name, commit, label]) => {\n result.push(branchStatus(current), true, name, commit, label);\n }\n ),\n new LineParser(\n /^([*+]\\s)?(\\S+)\\s+([a-z0-9]+)\\s?(.*)$/s,\n (result, [current, name, commit, label]) => {\n result.push(branchStatus(current), false, name, commit, label);\n }\n ),\n];\n\nconst currentBranchParser = new LineParser<BranchSummaryResult>(/^(\\S+)$/s, (result, [name]) => {\n result.push(BranchStatusIdentifier.CURRENT, false, name, '', '');\n});\n\nfunction branchStatus(input?: string) {\n return input ? input.charAt(0) : '';\n}\n\nexport function parseBranchSummary(stdOut: string, currentOnly = false): BranchSummary {\n return parseStringResponse(\n new BranchSummaryResult(),\n currentOnly ? [currentBranchParser] : parsers,\n stdOut\n );\n}\n", "import type {\n BranchMultiDeleteResult,\n BranchSingleDeleteFailure,\n BranchSingleDeleteResult,\n BranchSingleDeleteSuccess,\n} from '../../typings';\n\nexport class BranchDeletionBatch implements BranchMultiDeleteResult {\n all: BranchSingleDeleteResult[] = [];\n branches: { [branchName: string]: BranchSingleDeleteResult } = {};\n errors: BranchSingleDeleteResult[] = [];\n\n get success(): boolean {\n return !this.errors.length;\n }\n}\n\nexport function branchDeletionSuccess(branch: string, hash: string): BranchSingleDeleteSuccess {\n return {\n branch,\n hash,\n success: true,\n };\n}\n\nexport function branchDeletionFailure(branch: string): BranchSingleDeleteFailure {\n return {\n branch,\n hash: null,\n success: false,\n };\n}\n\nexport function isSingleBranchDeleteFailure(\n test: BranchSingleDeleteResult\n): test is BranchSingleDeleteSuccess {\n return test.success;\n}\n", "import type { BranchMultiDeleteResult } from '../../typings';\nimport {\n BranchDeletionBatch,\n branchDeletionFailure,\n branchDeletionSuccess,\n} from '../responses/BranchDeleteSummary';\nimport type { TaskParser } from '../types';\nimport { ExitCodes, LineParser, parseStringResponse } from '../utils';\n\nconst deleteSuccessRegex = /(\\S+)\\s+\\(\\S+\\s([^)]+)\\)/;\nconst deleteErrorRegex = /^error[^']+'([^']+)'/m;\n\nconst parsers: LineParser<BranchMultiDeleteResult>[] = [\n new LineParser(deleteSuccessRegex, (result, [branch, hash]) => {\n const deletion = branchDeletionSuccess(branch, hash);\n\n result.all.push(deletion);\n result.branches[branch] = deletion;\n }),\n new LineParser(deleteErrorRegex, (result, [branch]) => {\n const deletion = branchDeletionFailure(branch);\n\n result.errors.push(deletion);\n result.all.push(deletion);\n result.branches[branch] = deletion;\n }),\n];\n\nexport const parseBranchDeletions: TaskParser<string, BranchMultiDeleteResult> = (\n stdOut,\n stdErr\n) => {\n return parseStringResponse(new BranchDeletionBatch(), parsers, [stdOut, stdErr]);\n};\n\nexport function hasBranchDeletionError(data: string, processExitCode: ExitCodes): boolean {\n return processExitCode === ExitCodes.ERROR && deleteErrorRegex.test(data);\n}\n", "import type {\n BranchMultiDeleteResult,\n BranchSingleDeleteResult,\n BranchSummary,\n} from '../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parseBranchSummary } from '../parsers/parse-branch';\nimport { hasBranchDeletionError, parseBranchDeletions } from '../parsers/parse-branch-delete';\nimport type { StringTask } from '../types';\nimport { bufferToString } from '../utils';\n\nexport function containsDeleteBranchCommand(commands: string[]) {\n const deleteCommands = ['-d', '-D', '--delete'];\n return commands.some((command) => deleteCommands.includes(command));\n}\n\nexport function branchTask(\n customArgs: string[]\n): StringTask<BranchSummary | BranchSingleDeleteResult> {\n const isDelete = containsDeleteBranchCommand(customArgs);\n const isCurrentOnly = customArgs.includes('--show-current');\n\n const commands = ['branch', ...customArgs];\n\n if (commands.length === 1) {\n commands.push('-a');\n }\n\n if (!commands.includes('-v')) {\n commands.splice(1, 0, '-v');\n }\n\n return {\n format: 'utf-8',\n commands,\n parser(stdOut, stdErr) {\n if (isDelete) {\n return parseBranchDeletions(stdOut, stdErr).all[0];\n }\n\n return parseBranchSummary(stdOut, isCurrentOnly);\n },\n };\n}\n\nexport function branchLocalTask(): StringTask<BranchSummary> {\n return {\n format: 'utf-8',\n commands: ['branch', '-v'],\n parser(stdOut) {\n return parseBranchSummary(stdOut);\n },\n };\n}\n\nexport function deleteBranchesTask(\n branches: string[],\n forceDelete = false\n): StringTask<BranchMultiDeleteResult> {\n return {\n format: 'utf-8',\n commands: ['branch', '-v', forceDelete ? '-D' : '-d', ...branches],\n parser(stdOut, stdErr) {\n return parseBranchDeletions(stdOut, stdErr);\n },\n onError({ exitCode, stdOut }, error, done, fail) {\n if (!hasBranchDeletionError(String(error), exitCode)) {\n return fail(error);\n }\n\n done(stdOut);\n },\n };\n}\n\nexport function deleteBranchTask(\n branch: string,\n forceDelete = false\n): StringTask<BranchSingleDeleteResult> {\n const task: StringTask<BranchSingleDeleteResult> = {\n format: 'utf-8',\n commands: ['branch', '-v', forceDelete ? '-D' : '-d', branch],\n parser(stdOut, stdErr) {\n return parseBranchDeletions(stdOut, stdErr).branches[branch]!;\n },\n onError({ exitCode, stdErr, stdOut }, error, _, fail) {\n if (!hasBranchDeletionError(String(error), exitCode)) {\n return fail(error);\n }\n\n throw new GitResponseError(\n task.parser(bufferToString(stdOut), bufferToString(stdErr)),\n String(error)\n );\n },\n };\n\n return task;\n}\n", "import { normalize } from 'node:path';\n\nimport type { StringTask } from '../types';\n\nexport function checkIgnoreTask(paths: string[]): StringTask<string[]> {\n return {\n commands: ['check-ignore', ...paths],\n format: 'utf-8',\n parser: parseCheckIgnore,\n };\n}\n\n/**\n * Parser for the `check-ignore` command - returns each file as a string array\n */\nfunction parseCheckIgnore(text: string): string[] {\n return text.split(/\\n/g).map(toPath).filter(Boolean);\n}\n\nfunction toPath(input: string) {\n const path = input.trim().replace(/^[\"']|[\"']$/g, '');\n return path && normalize(path);\n}\n", "import type { FetchResult } from '../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<FetchResult>[] = [\n new LineParser(/From (.+)$/, (result, [remote]) => {\n result.remote = remote;\n }),\n new LineParser(/\\* \\[new branch]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n result.branches.push({\n name,\n tracking,\n });\n }),\n new LineParser(/\\* \\[new tag]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n result.tags.push({\n name,\n tracking,\n });\n }),\n new LineParser(/- \\[deleted]\\s+\\S+\\s*-> (.+)$/, (result, [tracking]) => {\n result.deleted.push({\n tracking,\n });\n }),\n new LineParser(\n /\\s*([^.]+)\\.\\.(\\S+)\\s+(\\S+)\\s*-> (.+)$/,\n (result, [from, to, name, tracking]) => {\n result.updated.push({\n name,\n tracking,\n to,\n from,\n });\n }\n ),\n];\n\nexport function parseFetchResult(stdOut: string, stdErr: string): FetchResult {\n const result: FetchResult = {\n raw: stdOut,\n remote: null,\n branches: [],\n tags: [],\n updated: [],\n deleted: [],\n };\n return parseStringResponse(result, parsers, [stdOut, stdErr]);\n}\n", "import type { FetchResult } from '../../typings';\nimport { parseFetchResult } from '../parsers/parse-fetch';\nimport type { StringTask } from '../types';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nfunction disallowedCommand(command: string) {\n return /^--upload-pack(=|$)/.test(command);\n}\n\nexport function fetchTask(\n remote: string,\n branch: string,\n customArgs: string[]\n): StringTask<FetchResult> | EmptyTask {\n const commands = ['fetch', ...customArgs];\n if (remote && branch) {\n commands.push(remote, branch);\n }\n\n const banned = commands.find(disallowedCommand);\n if (banned) {\n return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser: parseFetchResult,\n };\n}\n", "import type { MoveResult } from '../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<MoveResult>[] = [\n new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => {\n result.moves.push({ from, to });\n }),\n];\n\nexport function parseMoveResult(stdOut: string): MoveResult {\n return parseStringResponse({ moves: [] }, parsers, stdOut);\n}\n", "import type { MoveResult } from '../../typings';\nimport { parseMoveResult } from '../parsers/parse-move';\nimport type { StringTask } from '../types';\nimport { asArray } from '../utils';\n\nexport function moveTask(from: string | string[], to: string): StringTask<MoveResult> {\n return {\n commands: ['mv', '-v', ...asArray(from), to],\n format: 'utf-8',\n parser: parseMoveResult,\n };\n}\n", "import type { PullResult } from '../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parsePullErrorResult, parsePullResult } from '../parsers/parse-pull';\nimport type { Maybe, StringTask } from '../types';\nimport { bufferToString } from '../utils';\n\nexport function pullTask(\n remote: Maybe<string>,\n branch: Maybe<string>,\n customArgs: string[]\n): StringTask<PullResult> {\n const commands: string[] = ['pull', ...customArgs];\n if (remote && branch) {\n commands.splice(1, 0, remote, branch);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(stdOut, stdErr): PullResult {\n return parsePullResult(stdOut, stdErr);\n },\n onError(result, _error, _done, fail) {\n const pullError = parsePullErrorResult(\n bufferToString(result.stdOut),\n bufferToString(result.stdErr)\n );\n if (pullError) {\n return fail(new GitResponseError(pullError));\n }\n\n fail(_error);\n },\n };\n}\n", "import { forEachLineWithContent } from '../utils';\n\nexport interface RemoteWithoutRefs {\n name: string;\n}\n\nexport interface RemoteWithRefs extends RemoteWithoutRefs {\n refs: {\n fetch: string;\n push: string;\n };\n}\n\nexport function parseGetRemotes(text: string): RemoteWithoutRefs[] {\n const remotes: { [name: string]: RemoteWithoutRefs } = {};\n\n forEach(text, ([name]) => (remotes[name] = { name }));\n\n return Object.values(remotes);\n}\n\nexport function parseGetRemotesVerbose(text: string): RemoteWithRefs[] {\n const remotes: { [name: string]: RemoteWithRefs } = {};\n\n forEach(text, ([name, url, purpose]) => {\n if (!Object.hasOwn(remotes, name)) {\n remotes[name] = {\n name: name,\n refs: { fetch: '', push: '' },\n };\n }\n\n if (purpose && url) {\n remotes[name].refs[purpose.replace(/[^a-z]/g, '') as keyof RemoteWithRefs['refs']] = url;\n }\n });\n\n return Object.values(remotes);\n}\n\nfunction forEach(text: string, handler: (line: string[]) => void) {\n forEachLineWithContent(text, (line) => handler(line.split(/\\s+/)));\n}\n", "import {\n parseGetRemotes,\n parseGetRemotesVerbose,\n type RemoteWithoutRefs,\n type RemoteWithRefs,\n} from '../responses/GetRemoteSummary';\nimport type { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport function addRemoteTask(\n remoteName: string,\n remoteRepo: string,\n customArgs: string[]\n): StringTask<string> {\n return straightThroughStringTask(['remote', 'add', ...customArgs, remoteName, remoteRepo]);\n}\n\nexport function getRemotesTask(verbose: true): StringTask<RemoteWithRefs[]>;\nexport function getRemotesTask(verbose: false): StringTask<RemoteWithoutRefs[]>;\nexport function getRemotesTask(\n verbose: boolean\n): StringTask<RemoteWithRefs[] | RemoteWithoutRefs[]> {\n const commands = ['remote'];\n if (verbose) {\n commands.push('-v');\n }\n\n return {\n commands,\n format: 'utf-8',\n parser: verbose ? parseGetRemotesVerbose : parseGetRemotes,\n };\n}\n\nexport function listRemotesTask(customArgs: string[]): StringTask<string> {\n const commands = [...customArgs];\n if (commands[0] !== 'ls-remote') {\n commands.unshift('ls-remote');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport function remoteTask(customArgs: string[]): StringTask<string> {\n const commands = [...customArgs];\n if (commands[0] !== 'remote') {\n commands.unshift('remote');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport function removeRemoteTask(remoteName: string) {\n return straightThroughStringTask(['remote', 'remove', remoteName]);\n}\n", "import type { LogOptions, LogResult } from '../../typings';\nimport { logFormatFromCommand } from '../args/log-format';\nimport { createListLogSummaryParser } from '../parsers/parse-list-log-summary';\nimport type { StringTask } from '../types';\nimport { validateLogFormatConfig } from './diff';\nimport { parseLogOptions } from './log';\nimport type { EmptyTask } from './task';\n\nexport function stashListTask(\n opt: LogOptions = {},\n customArgs: string[]\n): EmptyTask | StringTask<LogResult> {\n const options = parseLogOptions<any>(opt);\n const commands = ['stash', 'list', ...options.commands, ...customArgs];\n const parser = createListLogSummaryParser(\n options.splitter,\n options.fields,\n logFormatFromCommand(commands)\n );\n\n return (\n validateLogFormatConfig(commands) || {\n commands,\n format: 'utf-8',\n parser,\n }\n );\n}\n", "import type { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport function addSubModuleTask(repo: string, path: string): StringTask<string> {\n return subModuleTask(['add', repo, path]);\n}\n\nexport function initSubModuleTask(customArgs: string[]): StringTask<string> {\n return subModuleTask(['init', ...customArgs]);\n}\n\nexport function subModuleTask(customArgs: string[]): StringTask<string> {\n const commands = [...customArgs];\n if (commands[0] !== 'submodule') {\n commands.unshift('submodule');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport function updateSubModuleTask(customArgs: string[]): StringTask<string> {\n return subModuleTask(['update', ...customArgs]);\n}\n", "import type { TagResult } from '../../typings';\n\nexport class TagList implements TagResult {\n constructor(\n public readonly all: string[],\n public readonly latest: string | undefined\n ) {}\n}\n\nexport const parseTagList = function (data: string, customSort = false) {\n const tags = data.split('\\n').map(trimmed).filter(Boolean);\n\n if (!customSort) {\n tags.sort(function (tagA, tagB) {\n const partsA = tagA.split('.');\n const partsB = tagB.split('.');\n\n if (partsA.length === 1 || partsB.length === 1) {\n return singleSorted(toNumber(partsA[0]), toNumber(partsB[0]));\n }\n\n for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) {\n const diff = sorted(toNumber(partsA[i]), toNumber(partsB[i]));\n\n if (diff) {\n return diff;\n }\n }\n\n return 0;\n });\n }\n\n const latest = customSort ? tags[0] : [...tags].reverse().find((tag) => tag.indexOf('.') >= 0);\n\n return new TagList(tags, latest);\n};\n\nfunction singleSorted(a: number, b: number): number {\n const aIsNum = Number.isNaN(a);\n const bIsNum = Number.isNaN(b);\n\n if (aIsNum !== bIsNum) {\n return aIsNum ? 1 : -1;\n }\n\n return aIsNum ? sorted(a, b) : 0;\n}\n\nfunction sorted(a: number, b: number) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\n\nfunction trimmed(input: string) {\n return input.trim();\n}\n\nfunction toNumber(input: string | undefined) {\n if (typeof input === 'string') {\n return parseInt(input.replace(/^\\D+/g, ''), 10) || 0;\n }\n\n return 0;\n}\n", "import type { TagResult } from '../../typings';\nimport { parseTagList } from '../responses/TagList';\nimport type { StringTask } from '../types';\n\n/**\n * Task used by `git.tags`\n */\nexport function tagListTask(customArgs: string[] = []): StringTask<TagResult> {\n const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option));\n\n return {\n format: 'utf-8',\n commands: ['tag', '-l', ...customArgs],\n parser(text: string) {\n return parseTagList(text, hasCustomSort);\n },\n };\n}\n\n/**\n * Task used by `git.addTag`\n */\nexport function addTagTask(name: string): StringTask<{ name: string }> {\n return {\n format: 'utf-8',\n commands: ['tag', name],\n parser() {\n return { name };\n },\n };\n}\n\n/**\n * Task used by `git.addTag`\n */\nexport function addAnnotatedTagTask(\n name: string,\n tagMessage: string\n): StringTask<{ name: string }> {\n return {\n format: 'utf-8',\n commands: ['tag', '-a', '-m', tagMessage, name],\n parser() {\n return { name };\n },\n };\n}\n", "import {GitExecutor} from \"./lib/runners/git-executor\";\n\nimport {SimpleGitApi} from \"./lib/simple-git-api\";\n\nimport {Scheduler} from \"./lib/runners/scheduler\";\n\nimport {\n configurationErrorTask,\n straightThroughBufferTask,\n straightThroughStringTask\n} from \"./lib/tasks/task\";\n\nimport {\n asArray,\n filterArray,\n filterPrimitives,\n filterString,\n filterStringOrStringArray,\n filterType,\n getTrailingOptions,\n trailingFunctionArgument,\n trailingOptionsArgument\n} from \"./lib/utils\";\n\nimport {applyPatchTask} from \"./lib/tasks/apply-patch\";\n\nimport {branchLocalTask, branchTask, deleteBranchesTask, deleteBranchTask} from \"./lib/tasks/branch\";\n\nimport {checkIgnoreTask} from \"./lib/tasks/check-ignore\";\n\nimport {checkIsRepoTask} from \"./lib/tasks/check-is-repo\";\n\nimport {cleanWithOptionsTask, isCleanOptionsArray} from \"./lib/tasks/clean\";\n\nimport {diffSummaryTask} from \"./lib/tasks/diff\";\n\nimport {fetchTask} from \"./lib/tasks/fetch\";\n\nimport {moveTask} from \"./lib/tasks/move\";\n\nimport {pullTask} from \"./lib/tasks/pull\";\n\nimport {pushTagsTask} from \"./lib/tasks/push\";\n\nimport {addRemoteTask, getRemotesTask, listRemotesTask, remoteTask, removeRemoteTask} from \"./lib/tasks/remote\";\n\nimport {getResetMode, resetTask} from \"./lib/tasks/reset\";\n\nimport {stashListTask} from \"./lib/tasks/stash-list\";\n\nimport {addSubModuleTask, initSubModuleTask, subModuleTask, updateSubModuleTask} from \"./lib/tasks/sub-module\";\n\nimport {addAnnotatedTagTask, addTagTask, tagListTask} from \"./lib/tasks/tag\";\n\nfunction Git(options, plugins) {\n this._plugins = plugins;\n this._executor = new GitExecutor(\n options.baseDir,\n new Scheduler(options.maxConcurrentProcesses),\n plugins\n );\n\n this._trimmed = options.trimmed;\n}\n\n(Git.prototype = Object.create(SimpleGitApi.prototype)).constructor = Git;\n\n/**\n * Sets the path to a custom git binary, should either be `git` when there is an installation of git available on\n * the system path, or a fully qualified path to the executable.\n */\nGit.prototype.customBinary = function (command) {\n this._plugins.reconfigure('binary', command);\n return this;\n};\n\n/**\n * Sets an environment variable for the spawned child process, either supply both a name and value as strings or\n * a single object to entirely replace the current environment variables.\n *\n * @param {string|Object} name\n * @param {string} [value]\n * @returns {Git}\n */\nGit.prototype.env = function (name, value) {\n if (arguments.length === 1 && typeof name === 'object') {\n this._executor.env = name;\n } else {\n (this._executor.env = this._executor.env || {})[name] = value;\n }\n\n return this;\n};\n\n/**\n * List the stash(s) of the local repo\n */\nGit.prototype.stashList = function (options) {\n return this._runTask(\n stashListTask(\n trailingOptionsArgument(arguments) || {},\n (filterArray(options) && options) || []\n ),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Moves one or more files to a new destination.\n *\n * @see https://git-scm.com/docs/git-mv\n *\n * @param {string|string[]} from\n * @param {string} to\n */\nGit.prototype.mv = function (from, to) {\n return this._runTask(moveTask(from, to), trailingFunctionArgument(arguments));\n};\n\n/**\n * Internally uses pull and tags to get the list of tags then checks out the latest tag.\n *\n * @param {Function} [then]\n */\nGit.prototype.checkoutLatestTag = function (then) {\n var git = this;\n return this.pull(function () {\n git.tags(function (err, tags) {\n git.checkout(tags.latest, then);\n });\n });\n};\n\n/**\n * Pull the updated contents of the current repo\n */\nGit.prototype.pull = function (remote, branch, options, then) {\n return this._runTask(\n pullTask(\n filterType(remote, filterString),\n filterType(branch, filterString),\n getTrailingOptions(arguments)\n ),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Fetch the updated contents of the current repo.\n *\n * @example\n * .fetch('upstream', 'master') // fetches from master on remote named upstream\n * .fetch(function () {}) // runs fetch against default remote and branch and calls function\n *\n * @param {string} [remote]\n * @param {string} [branch]\n */\nGit.prototype.fetch = function (remote, branch) {\n return this._runTask(\n fetchTask(\n filterType(remote, filterString),\n filterType(branch, filterString),\n getTrailingOptions(arguments)\n ),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * List all tags. When using git 2.7.0 or above, include an options object with `\"--sort\": \"property-name\"` to\n * sort the tags by that property instead of using the default semantic versioning sort.\n *\n * Note, supplying this option when it is not supported by your Git version will cause the operation to fail.\n *\n * @param {Object} [options]\n * @param {Function} [then]\n */\nGit.prototype.tags = function (options, then) {\n return this._runTask(\n tagListTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Rebases the current working copy. Options can be supplied either as an array of string parameters\n * to be sent to the `git rebase` command, or a standard options object.\n */\nGit.prototype.rebase = function () {\n return this._runTask(\n straightThroughStringTask(['rebase', ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Reset a repo\n */\nGit.prototype.reset = function (mode) {\n return this._runTask(\n resetTask(getResetMode(mode), getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Revert one or more commits in the local working copy\n */\nGit.prototype.revert = function (commit) {\n const next = trailingFunctionArgument(arguments);\n\n if (typeof commit !== 'string') {\n return this._runTask(configurationErrorTask('Commit must be a string'), next);\n }\n\n return this._runTask(\n straightThroughStringTask(['revert', ...getTrailingOptions(arguments, 0, true), commit]),\n next\n );\n};\n\n/**\n * Add a lightweight tag to the head of the current branch\n */\nGit.prototype.addTag = function (name) {\n const task =\n typeof name === 'string'\n ? addTagTask(name)\n : configurationErrorTask('Git.addTag requires a tag name');\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\n/**\n * Add an annotated tag to the head of the current branch\n */\nGit.prototype.addAnnotatedTag = function (tagName, tagMessage) {\n return this._runTask(\n addAnnotatedTagTask(tagName, tagMessage),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Delete a local branch\n */\nGit.prototype.deleteLocalBranch = function (branchName, forceDelete, then) {\n return this._runTask(\n deleteBranchTask(branchName, typeof forceDelete === 'boolean' ? forceDelete : false),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Delete one or more local branches\n */\nGit.prototype.deleteLocalBranches = function (branchNames, forceDelete, then) {\n return this._runTask(\n deleteBranchesTask(branchNames, typeof forceDelete === 'boolean' ? forceDelete : false),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * List all branches\n *\n * @param {Object | string[]} [options]\n * @param {Function} [then]\n */\nGit.prototype.branch = function (options, then) {\n return this._runTask(\n branchTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Return list of local branches\n *\n * @param {Function} [then]\n */\nGit.prototype.branchLocal = function (then) {\n return this._runTask(branchLocalTask(), trailingFunctionArgument(arguments));\n};\n\n/**\n * Executes any command against the git binary.\n */\nGit.prototype.raw = function (commands) {\n const createRestCommands = !Array.isArray(commands);\n const command = [].slice.call(createRestCommands ? arguments : commands, 0);\n\n for (let i = 0; i < command.length && createRestCommands; i++) {\n if (!filterPrimitives(command[i])) {\n command.splice(i, command.length - i);\n break;\n }\n }\n\n command.push(...getTrailingOptions(arguments, 0, true));\n\n var next = trailingFunctionArgument(arguments);\n\n if (!command.length) {\n return this._runTask(\n configurationErrorTask('Raw: must supply one or more command to execute'),\n next\n );\n }\n\n return this._runTask(straightThroughStringTask(command, this._trimmed), next);\n};\n\nGit.prototype.submoduleAdd = function (repo, path, then) {\n return this._runTask(addSubModuleTask(repo, path), trailingFunctionArgument(arguments));\n};\n\nGit.prototype.submoduleUpdate = function (args, then) {\n return this._runTask(\n updateSubModuleTask(getTrailingOptions(arguments, true)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.submoduleInit = function (args, then) {\n return this._runTask(\n initSubModuleTask(getTrailingOptions(arguments, true)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.subModule = function (options, then) {\n return this._runTask(\n subModuleTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.listRemote = function () {\n return this._runTask(\n listRemotesTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Adds a remote to the list of remotes.\n */\nGit.prototype.addRemote = function (remoteName, remoteRepo, then) {\n return this._runTask(\n addRemoteTask(remoteName, remoteRepo, getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Removes an entry by name from the list of remotes.\n */\nGit.prototype.removeRemote = function (remoteName, then) {\n return this._runTask(removeRemoteTask(remoteName), trailingFunctionArgument(arguments));\n};\n\n/**\n * Gets the currently available remotes, setting the optional verbose argument to true includes additional\n * detail on the remotes themselves.\n */\nGit.prototype.getRemotes = function (verbose, then) {\n return this._runTask(getRemotesTask(verbose === true), trailingFunctionArgument(arguments));\n};\n\n/**\n * Call any `git remote` function with arguments passed as an array of strings.\n *\n * @param {string[]} options\n * @param {Function} [then]\n */\nGit.prototype.remote = function (options, then) {\n return this._runTask(\n remoteTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Call any `git tag` function with arguments passed as an array of strings.\n *\n * @param {string[]} options\n * @param {Function} [then]\n */\nGit.prototype.tag = function (options, then) {\n const command = getTrailingOptions(arguments);\n\n if (command[0] !== 'tag') {\n command.unshift('tag');\n }\n\n return this._runTask(straightThroughStringTask(command), trailingFunctionArgument(arguments));\n};\n\n/**\n * Updates repository server info\n *\n * @param {Function} [then]\n */\nGit.prototype.updateServerInfo = function (then) {\n return this._runTask(\n straightThroughStringTask(['update-server-info']),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Pushes the current tag changes to a remote which can be either a URL or named remote. When not specified uses the\n * default configured remote spec.\n *\n * @param {string} [remote]\n * @param {Function} [then]\n */\nGit.prototype.pushTags = function (remote, then) {\n const task = pushTagsTask(\n { remote: filterType(remote, filterString) },\n getTrailingOptions(arguments)\n );\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\n/**\n * Removes the named files from source control.\n */\nGit.prototype.rm = function (files) {\n return this._runTask(\n straightThroughStringTask(['rm', '-f', ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Removes the named files from source control but keeps them on disk rather than deleting them entirely. To\n * completely remove the files, use `rm`.\n *\n * @param {string|string[]} files\n */\nGit.prototype.rmKeepLocal = function (files) {\n return this._runTask(\n straightThroughStringTask(['rm', '--cached', ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Returns a list of objects in a tree based on commit hash. Passing in an object hash returns the object's content,\n * size, and type.\n *\n * Passing \"-p\" will instruct cat-file to determine the object type, and display its formatted contents.\n *\n * @param {string[]} [options]\n * @param {Function} [then]\n */\nGit.prototype.catFile = function (options, then) {\n return this._catFile('utf-8', arguments);\n};\n\nGit.prototype.binaryCatFile = function () {\n return this._catFile('buffer', arguments);\n};\n\nGit.prototype._catFile = function (format, args) {\n var handler = trailingFunctionArgument(args);\n var command = ['cat-file'];\n var options = args[0];\n\n if (typeof options === 'string') {\n return this._runTask(\n configurationErrorTask('Git.catFile: options must be supplied as an array of strings'),\n handler\n );\n }\n\n if (Array.isArray(options)) {\n command.push.apply(command, options);\n }\n\n const task =\n format === 'buffer' ? straightThroughBufferTask(command) : straightThroughStringTask(command);\n\n return this._runTask(task, handler);\n};\n\nGit.prototype.diff = function (options, then) {\n const task = filterString(options)\n ? configurationErrorTask(\n 'git.diff: supplying options as a single string is no longer supported, switch to an array of strings'\n )\n : straightThroughStringTask(['diff', ...getTrailingOptions(arguments)]);\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\nGit.prototype.diffSummary = function () {\n return this._runTask(\n diffSummaryTask(getTrailingOptions(arguments, 1)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.applyPatch = function (patches) {\n const task = !filterStringOrStringArray(patches)\n ? configurationErrorTask(\n `git.applyPatch requires one or more string patches as the first argument`\n )\n : applyPatchTask(asArray(patches), getTrailingOptions([].slice.call(arguments, 1)));\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\nGit.prototype.revparse = function () {\n const commands = ['rev-parse', ...getTrailingOptions(arguments, true)];\n return this._runTask(\n straightThroughStringTask(commands, true),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n */\nGit.prototype.clean = function (mode, options, then) {\n const usingCleanOptionsArray = isCleanOptionsArray(mode);\n const cleanMode =\n (usingCleanOptionsArray && mode.join('')) || filterType(mode, filterString) || '';\n const customArgs = getTrailingOptions([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0));\n\n return this._runTask(\n cleanWithOptionsTask(cleanMode, customArgs),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.exec = function (then) {\n const task = {\n commands: [],\n format: 'utf-8',\n parser() {\n if (typeof then === 'function') {\n then();\n }\n },\n };\n\n return this._runTask(task);\n};\n\n/**\n * Check if a pathname or pathnames are excluded by .gitignore\n *\n * @param {string|string[]} pathnames\n * @param {Function} [then]\n */\nGit.prototype.checkIgnore = function (pathnames, then) {\n return this._runTask(\n checkIgnoreTask(asArray(filterType(pathnames, filterStringOrStringArray, []))),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.checkIsRepo = function (checkType, then) {\n return this._runTask(\n checkIsRepoTask(filterType(checkType, filterString)),\n trailingFunctionArgument(arguments)\n );\n};\n\nexport default Git;\n", "import { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitOptions } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function abortPlugin(signal: SimpleGitOptions['abort']) {\n if (!signal) {\n return;\n }\n\n const onSpawnAfter: SimpleGitPlugin<'spawn.after'> = {\n type: 'spawn.after',\n action(_data, context) {\n function kill() {\n context.kill(new GitPluginError(undefined, 'abort', 'Abort signal received'));\n }\n\n signal.addEventListener('abort', kill);\n\n context.spawned.on('close', () => signal.removeEventListener('abort', kill));\n },\n };\n\n const onSpawnBefore: SimpleGitPlugin<'spawn.before'> = {\n type: 'spawn.before',\n action(_data, context) {\n if (signal.aborted) {\n context.kill(new GitPluginError(undefined, 'abort', 'Abort already signaled'));\n }\n },\n };\n\n return [onSpawnBefore, onSpawnAfter];\n}\n", "import { isGitEnvKey } from '@simple-git/argv-parser';\n\nimport { GitPluginError } from '../errors/git-plugin-error';\nimport { createLogger } from '../git-logger';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nconst logger = createLogger('', 'plugin:allowEnvironment');\n\nexport function allowEnvironmentPlugin(\n allowEnvironment: readonly string[],\n allowAbbreviatedOptions = false\n): SimpleGitPlugin<'spawn.options'> {\n const allowed = new Set(allowEnvironment.map((key) => key.toLowerCase().trim()));\n\n return {\n type: 'spawn.options',\n action(spawnOptions, context) {\n const env = { ...(spawnOptions.env ?? process.env) };\n const suppliedKeys = new Set(\n Object.keys(context.env).map((key) => key.toLowerCase().trim())\n );\n\n for (const key of Object.keys(env)) {\n const normalised = key.toLowerCase().trim();\n\n // not a GIT_ key, or explicitly permitted\n if (!isGuardedEnvKey(normalised) || allowed.has(normalised)) {\n continue;\n }\n\n // explicitly throw when simpleGit.env() was called with a guarded key\n if (suppliedKeys.has(normalised)) {\n throw new GitPluginError(\n undefined,\n 'allowEnvironment',\n `Use of \"${key}\" is blocked by the environment guard - add it to the allowEnvironment option to permit it`\n );\n }\n\n // log and remove guarded keys inherited from the outer environment\n logger(`removing ambient guarded environment variable %s`, key);\n delete env[key];\n }\n\n return {\n ...spawnOptions,\n env: {\n ...env,\n GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS: String(!allowAbbreviatedOptions),\n },\n };\n },\n };\n}\n\nfunction isGuardedEnvKey(key: string) {\n const normalised = key.toLowerCase().trim();\n return normalised.startsWith('git_') || isGitEnvKey(normalised);\n}\n", "import { vulnerabilityCheck } from '@simple-git/argv-parser';\n\nimport { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitPluginConfig } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function blockUnsafeOperationsPlugin(\n options: SimpleGitPluginConfig['unsafe'] = {}\n): SimpleGitPlugin<'spawn.args'> {\n return {\n type: 'spawn.args',\n action(args, { env }) {\n for (const vulnerability of vulnerabilityCheck(args, env)) {\n if (options[vulnerability.category] !== true) {\n throw new GitPluginError(undefined, 'unsafe', vulnerability.message);\n }\n }\n\n return args;\n },\n };\n}\n", "import { prefixedArray } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function commandConfigPrefixingPlugin(\n configuration: string[]\n): SimpleGitPlugin<'spawn.args'> {\n const prefix = prefixedArray(configuration, '-c');\n\n return {\n type: 'spawn.args',\n action(data) {\n return [...prefix, ...data];\n },\n };\n}\n", "import { type DeferredPromise, deferred } from '@kwsites/promise-deferred';\n\nimport type { SimpleGitPluginConfig } from '../types';\nimport { delay } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nconst never = deferred().promise;\n\nexport function completionDetectionPlugin({\n onClose = true,\n onExit = 50,\n}: SimpleGitPluginConfig['completion'] = {}): SimpleGitPlugin<'spawn.after'> {\n function createEvents() {\n let exitCode = -1;\n const events = {\n close: deferred(),\n closeTimeout: deferred(),\n exit: deferred(),\n exitTimeout: deferred(),\n };\n\n const result = Promise.race([\n onClose === false ? never : events.closeTimeout.promise,\n onExit === false ? never : events.exitTimeout.promise,\n ]);\n\n configureTimeout(onClose, events.close, events.closeTimeout);\n configureTimeout(onExit, events.exit, events.exitTimeout);\n\n return {\n close(code: number) {\n exitCode = code;\n events.close.done();\n },\n exit(code: number) {\n exitCode = code;\n events.exit.done();\n },\n get exitCode() {\n return exitCode;\n },\n result,\n };\n }\n\n function configureTimeout(\n flag: boolean | number,\n event: DeferredPromise<void>,\n timeout: DeferredPromise<void>\n ) {\n if (flag === false) {\n return;\n }\n\n (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done);\n }\n\n return {\n type: 'spawn.after',\n async action(_data, { spawned, close }) {\n const events = createEvents();\n\n let deferClose = true;\n let quickClose = () => void (deferClose = false);\n\n spawned.stdout?.on('data', quickClose);\n spawned.stderr?.on('data', quickClose);\n spawned.on('error', quickClose);\n\n spawned.on('close', (code: number) => events.close(code));\n spawned.on('exit', (code: number) => events.exit(code));\n\n try {\n await events.result;\n if (deferClose) {\n await delay(50);\n }\n close(events.exitCode);\n } catch (err) {\n close(events.exitCode, err as Error);\n }\n },\n };\n}\n", "import { GitPluginError } from '../errors/git-plugin-error';\nimport { createLogger } from '../git-logger';\nimport type { SimpleGitOptions } from '../types';\nimport { asArray } from '../utils';\nimport type { PluginStore } from './plugin-store';\n\nconst logger = createLogger('', 'plugin:binary');\n\nconst WRONG_NUMBER_ERR = `Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings`;\nconst WRONG_CHARS_ERR = `Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option`;\n\nfunction isBadArgument(arg: string) {\n return !arg || !/^([a-z]:)?([a-z0-9/.\\\\_~-]+)$/i.test(arg);\n}\n\nfunction toBinaryConfig(\n input: string[],\n allowUnsafe: boolean\n): { binary: string; prefix?: string } {\n if (input.length < 1 || input.length > 2) {\n throw new GitPluginError(undefined, 'binary', WRONG_NUMBER_ERR);\n }\n\n const isBad = input.some(isBadArgument);\n if (isBad) {\n if (allowUnsafe) {\n logger('permitted unsafe binary %o', input);\n } else {\n throw new GitPluginError(undefined, 'binary', WRONG_CHARS_ERR);\n }\n }\n\n const [binary, prefix] = input;\n return {\n binary,\n prefix,\n };\n}\n\nexport function customBinaryPlugin(\n plugins: PluginStore,\n input: SimpleGitOptions['binary'] = ['git'],\n allowUnsafe = false\n) {\n let config = toBinaryConfig(asArray(input), allowUnsafe);\n\n plugins.on('binary', (input) => {\n config = toBinaryConfig(asArray(input), allowUnsafe);\n logger.info('reconfiguring %o', config);\n });\n\n plugins.append('spawn.binary', () => {\n return config.binary;\n });\n\n plugins.append('spawn.args', (data) => {\n return config.prefix ? [config.prefix, ...data] : data;\n });\n}\n", "import { GitError } from './git-error';\n\nconst REASONS = {\n DISALLOWED_ABBREVIATED: {\n text: 'disallowed abbreviated or ambiguous option',\n solution:\n 'Unambiguous abbreviated options blocked with unsafe.allowAbbreviatedOptions setting: {message}',\n },\n UNKNOWN: {\n text: '~ unknown ~',\n solution: undefined,\n },\n} as const;\n\nexport type GitConfigurationErrorReason = keyof typeof REASONS;\n\nfunction getReason(message?: string): GitConfigurationErrorReason {\n if (!message) {\n return 'UNKNOWN';\n }\n for (const [reason, { text }] of Object.entries(REASONS)) {\n if (message.startsWith(`fatal: ${text}`)) {\n return reason as GitConfigurationErrorReason;\n }\n }\n return 'UNKNOWN';\n}\n\n/**\n * The `GitConfigurationError` is thrown when the `git` process rejects\n * the supplied configuration arguments or environment variables.\n *\n * Check the `.message` property for more detail on why your configuration\n * resulted in an error.\n */\nexport class GitConfigurationError extends GitError {\n public readonly reason: GitConfigurationErrorReason;\n\n constructor(message = '') {\n const reason = getReason(message);\n\n super(undefined, REASONS[reason].solution?.replace('{message}', message) ?? message);\n this.reason = reason;\n }\n}\n", "import { GitConfigurationError } from '../errors/git-configuration-error';\nimport { GitError } from '../errors/git-error';\nimport type { GitExecutorResult, SimpleGitPluginConfig } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\ntype TaskResult = Omit<GitExecutorResult, 'rejection'>;\n\nfunction isTaskError(result: TaskResult) {\n return !!(result.exitCode && result.stdErr.length);\n}\n\nfunction getErrorMessage(result: TaskResult) {\n return Buffer.concat([...result.stdOut, ...result.stdErr]);\n}\n\nexport function errorDetectionHandler(\n overwrite = false,\n isError = isTaskError,\n errorMessage: (result: TaskResult) => Buffer | Error = getErrorMessage\n) {\n return (error: Buffer | Error | undefined, result: TaskResult) => {\n if ((!overwrite && error) || !isError(result)) {\n return error;\n }\n\n return errorMessage(result);\n };\n}\n\nfunction createGitError(exitCode: number, message: string) {\n if (exitCode === 128 && message.startsWith('fatal:')) {\n return new GitConfigurationError(message);\n }\n\n return new GitError(undefined, message);\n}\n\nexport function errorDetectionPlugin(\n config: SimpleGitPluginConfig['errors']\n): SimpleGitPlugin<'task.error'> {\n return {\n type: 'task.error',\n action(data, context) {\n const error = config(data.error, {\n stdErr: context.stdErr,\n stdOut: context.stdOut,\n exitCode: context.exitCode,\n });\n\n if (Buffer.isBuffer(error)) {\n return {\n error: createGitError(context.exitCode, error.toString('utf-8')),\n };\n }\n\n return {\n error,\n };\n },\n };\n}\n", "import { createLogger } from '../git-logger';\nimport type { SimpleGitOptions } from '../types';\nimport { byteLength } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nconst logger = createLogger('', 'plugin:input');\n\nexport function inputPlugin(\n input: SimpleGitOptions['input']\n): SimpleGitPlugin<'spawn.after'> | void {\n return {\n type: 'spawn.after',\n action(_data, { commands, input: taskInput, spawned: { stdin } }) {\n if (!stdin) {\n return;\n }\n\n const content = input?.([...commands]) ?? taskInput;\n if (!content) {\n return logger(`generated zero length content, not writing to stdin`);\n }\n\n logger(`writing %s bytes to stdin`, byteLength(content));\n\n stdin.on('error', (err: NodeJS.ErrnoException) => {\n // EPIPE is expected when git exits before consuming all input\n if (err.code !== 'EPIPE') {\n logger('[ERROR] stdin error %o', err);\n }\n });\n\n stdin.end(content);\n },\n };\n}\n", "import { EventEmitter } from 'node:events';\n\nimport type { SimpleGitPluginConfig } from '../types';\nimport { append, asArray } from '../utils';\nimport type {\n SimpleGitPlugin,\n SimpleGitPluginType,\n SimpleGitPluginTypes,\n} from './simple-git-plugin';\n\nexport class PluginStore {\n private plugins: Set<SimpleGitPlugin<SimpleGitPluginType>> = new Set();\n private events = new EventEmitter();\n\n on<K extends keyof SimpleGitPluginConfig>(\n type: K,\n listener: (data: SimpleGitPluginConfig[K]) => void\n ) {\n this.events.on(type, listener);\n }\n\n reconfigure<K extends keyof SimpleGitPluginConfig>(type: K, data: SimpleGitPluginConfig[K]) {\n this.events.emit(type, data);\n }\n\n public append<T extends SimpleGitPluginType>(type: T, action: SimpleGitPlugin<T>['action']) {\n const plugin = append(this.plugins, { type, action });\n\n return () => this.plugins.delete(plugin);\n }\n\n public add<T extends SimpleGitPluginType>(\n plugin: void | SimpleGitPlugin<T> | SimpleGitPlugin<T>[]\n ) {\n const plugins: SimpleGitPlugin<T>[] = [];\n\n asArray(plugin).forEach(\n (plugin) => void (plugin && this.plugins.add(append(plugins, plugin)))\n );\n\n return () => {\n plugins.forEach((plugin) => void this.plugins.delete(plugin));\n };\n }\n\n public exec<T extends SimpleGitPluginType>(\n type: T,\n data: SimpleGitPluginTypes[T]['data'],\n context: SimpleGitPluginTypes[T]['context']\n ): typeof data {\n let output = data;\n const contextual = Object.freeze(Object.create(context));\n\n for (const plugin of this.plugins) {\n if (plugin.type === type) {\n output = plugin.action(output, contextual);\n }\n }\n\n return output;\n }\n}\n", "import type { SimpleGitOptions } from '../types';\nimport { asNumber, including } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function progressMonitorPlugin(progress: Exclude<SimpleGitOptions['progress'], void>) {\n const progressCommand = '--progress';\n const progressMethods = ['checkout', 'clone', 'fetch', 'pull', 'push'];\n\n const onProgress: SimpleGitPlugin<'spawn.after'> = {\n type: 'spawn.after',\n action(_data, context) {\n if (!context.commands.includes(progressCommand)) {\n return;\n }\n\n context.spawned.stderr?.on('data', (chunk: Buffer) => {\n const message = /^([\\s\\S]+?):\\s*(\\d+)% \\((\\d+)\\/(\\d+)\\)/.exec(chunk.toString('utf8'));\n if (!message) {\n return;\n }\n\n progress({\n method: context.method,\n stage: progressEventStage(message[1]),\n progress: asNumber(message[2]),\n processed: asNumber(message[3]),\n total: asNumber(message[4]),\n });\n });\n },\n };\n\n const onArgs: SimpleGitPlugin<'spawn.args'> = {\n type: 'spawn.args',\n action(args, context) {\n if (!progressMethods.includes(context.method)) {\n return args;\n }\n\n return including(args, progressCommand);\n },\n };\n\n return [onArgs, onProgress];\n}\n\nfunction progressEventStage(input: string) {\n return String(input.toLowerCase().split(' ', 1)) || 'unknown';\n}\n", "import type { SpawnOptions } from 'child_process';\n\nimport { pick } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function spawnOptionsPlugin(\n spawnOptions: Partial<SpawnOptions>\n): SimpleGitPlugin<'spawn.options'> {\n const options = pick(spawnOptions, ['uid', 'gid']);\n\n return {\n type: 'spawn.options',\n action(data) {\n return { ...options, ...data };\n },\n };\n}\n", "import { isPathSpec, toPaths } from '@simple-git/args-pathspec';\n\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function suffixPathsPlugin(): SimpleGitPlugin<'spawn.args'> {\n return {\n type: 'spawn.args',\n action(data) {\n const prefix: string[] = [];\n let suffix: undefined | string[];\n function append(args: string[]) {\n (suffix = suffix || []).push(...args);\n }\n\n for (let i = 0; i < data.length; i++) {\n const param = data[i];\n\n if (isPathSpec(param)) {\n append(toPaths(param));\n continue;\n }\n\n if (param === '--') {\n append(\n data.slice(i + 1).flatMap((item) => (isPathSpec(item) && toPaths(item)) || item)\n );\n break;\n }\n\n prefix.push(param);\n }\n\n return !suffix ? prefix : [...prefix, '--', ...suffix.map(String)];\n },\n };\n}\n", "import { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitOptions } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function timeoutPlugin({\n block,\n stdErr = true,\n stdOut = true,\n}: Exclude<SimpleGitOptions['timeout'], undefined>): SimpleGitPlugin<'spawn.after'> | void {\n if (block > 0) {\n return {\n type: 'spawn.after',\n action(_data, context) {\n let timeout: NodeJS.Timeout;\n\n function wait() {\n timeout && clearTimeout(timeout);\n timeout = setTimeout(kill, block);\n }\n\n function stop() {\n context.spawned.stdout?.off('data', wait);\n context.spawned.stderr?.off('data', wait);\n context.spawned.off('exit', stop);\n context.spawned.off('close', stop);\n timeout && clearTimeout(timeout);\n }\n\n function kill() {\n stop();\n context.kill(new GitPluginError(undefined, 'timeout', `block timeout reached`));\n }\n\n stdOut && context.spawned.stdout?.on('data', wait);\n stdErr && context.spawned.stderr?.on('data', wait);\n context.spawned.on('exit', stop);\n context.spawned.on('close', stop);\n\n wait();\n },\n };\n }\n}\n", "// @ts-expect-error\nimport Git from '../git';\nimport type { SimpleGitFactory } from '../typings';\nimport * as api from './api';\nimport {\n abortPlugin,\n allowEnvironmentPlugin,\n blockUnsafeOperationsPlugin,\n commandConfigPrefixingPlugin,\n completionDetectionPlugin,\n customBinaryPlugin,\n errorDetectionHandler,\n errorDetectionPlugin,\n inputPlugin,\n PluginStore,\n progressMonitorPlugin,\n spawnOptionsPlugin,\n suffixPathsPlugin,\n timeoutPlugin,\n} from './plugins';\nimport type { SimpleGitOptions } from './types';\nimport { createInstanceConfig, folderExists } from './utils';\n\nexport const simpleGit: SimpleGitFactory = (\n baseDir?: string | Partial<SimpleGitOptions>,\n options?: Partial<SimpleGitOptions>\n) => {\n const plugins = new PluginStore();\n const config = createInstanceConfig(\n (baseDir && (typeof baseDir === 'string' ? { baseDir } : baseDir)) || {},\n options\n );\n\n if (!folderExists(config.baseDir)) {\n throw new api.GitConstructError(\n config,\n `Cannot use simple-git on a directory that does not exist`\n );\n }\n\n if (Array.isArray(config.config)) {\n plugins.add(commandConfigPrefixingPlugin(config.config));\n }\n\n plugins.add(blockUnsafeOperationsPlugin(config.unsafe));\n plugins.add(completionDetectionPlugin(config.completion));\n config.abort && plugins.add(abortPlugin(config.abort));\n config.progress && plugins.add(progressMonitorPlugin(config.progress));\n config.timeout && plugins.add(timeoutPlugin(config.timeout));\n config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions));\n plugins.add(suffixPathsPlugin());\n\n plugins.add(inputPlugin(config.input));\n plugins.add(errorDetectionPlugin(errorDetectionHandler(true)));\n config.errors && plugins.add(errorDetectionPlugin(config.errors));\n\n customBinaryPlugin(plugins, config.binary, config.unsafe?.allowUnsafeCustomBinary);\n\n plugins.add(\n allowEnvironmentPlugin(config.allowEnvironment ?? [], config.unsafe?.allowAbbreviatedOptions)\n );\n\n return new Git(config, plugins);\n};\n", "export default class Diff {\n diff(oldStr, newStr, \n // Type below is not accurate/complete - see above for full possibilities - but it compiles\n options = {}) {\n let callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n else if ('callback' in options) {\n callback = options.callback;\n }\n // Allow subclasses to massage the input prior to running\n const oldString = this.castInput(oldStr, options);\n const newString = this.castInput(newStr, options);\n const oldTokens = this.removeEmpty(this.tokenize(oldString, options));\n const newTokens = this.removeEmpty(this.tokenize(newString, options));\n return this.diffWithOptionsObj(oldTokens, newTokens, options, callback);\n }\n diffWithOptionsObj(oldTokens, newTokens, options, callback) {\n var _a;\n const done = (value) => {\n value = this.postProcess(value, options);\n if (callback) {\n setTimeout(function () { callback(value); }, 0);\n return undefined;\n }\n else {\n return value;\n }\n };\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let editLength = 1;\n let maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n const maxExecutionTime = (_a = options.timeout) !== null && _a !== void 0 ? _a : Infinity;\n const abortAfterTimestamp = Date.now() + maxExecutionTime;\n const bestPath = [{ oldPos: -1, lastComponent: undefined }];\n // Seed editLength = 0, i.e. the content starts with the same values\n let newPos = this.extractCommon(bestPath[0], newTokens, oldTokens, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(this.buildValues(bestPath[0].lastComponent, newTokens, oldTokens));\n }\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n let minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity;\n // Main worker method. checks all permutations of a given edit length for acceptance.\n const execEditLength = () => {\n for (let diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n let basePath;\n const removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath - 1] = undefined;\n }\n let canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n const addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n const canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath] = undefined;\n continue;\n }\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || (canAdd && removePath.oldPos < addPath.oldPos)) {\n basePath = this.addToPath(addPath, true, false, 0, options);\n }\n else {\n basePath = this.addToPath(removePath, false, true, 1, options);\n }\n newPos = this.extractCommon(basePath, newTokens, oldTokens, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(this.buildValues(basePath.lastComponent, newTokens, oldTokens)) || true;\n }\n else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n };\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback(undefined);\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n }());\n }\n else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n const ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n }\n addToPath(path, added, removed, oldPosInc, options) {\n const last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: last.count + 1, added: added, removed: removed, previousComponent: last.previousComponent }\n };\n }\n else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: 1, added: added, removed: removed, previousComponent: last }\n };\n }\n }\n extractCommon(basePath, newTokens, oldTokens, diagonalPath, options) {\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldTokens[oldPos + 1], newTokens[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = { count: 1, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = { count: commonCount, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n basePath.oldPos = oldPos;\n return newPos;\n }\n equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n }\n else {\n return left === right\n || (!!options.ignoreCase && left.toLowerCase() === right.toLowerCase());\n }\n }\n removeEmpty(array) {\n const ret = [];\n for (let i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n castInput(value, options) {\n return value;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenize(value, options) {\n return Array.from(value);\n }\n join(chars) {\n // Assumes ValueT is string, which is the case for most subclasses.\n // When it's false, e.g. in diffArrays, this method needs to be overridden (e.g. with a no-op)\n // Yes, the casts are verbose and ugly, because this pattern - of having the base class SORT OF\n // assume tokens and values are strings, but not completely - is weird and janky.\n return chars.join('');\n }\n postProcess(changeObjects, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options) {\n return changeObjects;\n }\n get useLongestToken() {\n return false;\n }\n buildValues(lastComponent, newTokens, oldTokens) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n const components = [];\n let nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n const componentLen = components.length;\n let componentPos = 0, newPos = 0, oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n const component = components[componentPos];\n if (!component.removed) {\n if (!component.added && this.useLongestToken) {\n let value = newTokens.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n const oldValue = oldTokens[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = this.join(value);\n }\n else {\n component.value = this.join(newTokens.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n component.value = this.join(oldTokens.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n }\n}\n", "import Diff from './base.js';\nclass CharacterDiff extends Diff {\n}\nexport const characterDiff = new CharacterDiff();\nexport function diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n", "import Diff from './base.js';\nimport { generateOptions } from '../util/params.js';\nclass LineDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n equals(left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n }\n else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return super.equals(left, right, options);\n }\n}\nexport const lineDiff = new LineDiff();\nexport function diffLines(oldStr, newStr, options) {\n return lineDiff.diff(oldStr, newStr, options);\n}\nexport function diffTrimmedLines(oldStr, newStr, options) {\n options = generateOptions(options, { ignoreWhitespace: true });\n return lineDiff.diff(oldStr, newStr, options);\n}\n// Exported standalone so it can be used from jsonDiff too.\nexport function tokenize(value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n const retLines = [], linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n // Merge the content and line separators into single tokens\n for (let i = 0; i < linesAndNewlines.length; i++) {\n const line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n }\n else {\n retLines.push(line);\n }\n }\n return retLines;\n}\n", "import { diffLines } from '../diff/line.js';\n/**\n * Returns true if the filename contains characters that require C-style\n * quoting (as used by Git and GNU diffutils in diff output).\n */\nfunction needsQuoting(s) {\n for (let i = 0; i < s.length; i++) {\n if (s[i] < '\\x20' || s[i] > '\\x7e' || s[i] === '\"' || s[i] === '\\\\') {\n return true;\n }\n }\n return false;\n}\n/**\n * C-style quotes a filename, encoding special characters as escape sequences\n * and non-ASCII bytes as octal escapes. This is the inverse of\n * `parseQuotedFileName` in parse.ts.\n *\n * Non-ASCII bytes are encoded as UTF-8 before being emitted as octal escapes.\n * This matches the behaviour of both Git and GNU diffutils, which always emit\n * UTF-8 octal escapes regardless of the underlying filesystem encoding (e.g.\n * Git for Windows converts from NTFS's UTF-16 to UTF-8 internally).\n *\n * If the filename doesn't need quoting, returns it as-is.\n */\nfunction quoteFileNameIfNeeded(s) {\n if (!needsQuoting(s)) {\n return s;\n }\n let result = '\"';\n const bytes = new TextEncoder().encode(s);\n let i = 0;\n while (i < bytes.length) {\n const b = bytes[i];\n // See https://en.wikipedia.org/wiki/Escape_sequences_in_C#Escape_sequences\n if (b === 0x07) {\n result += '\\\\a';\n }\n else if (b === 0x08) {\n result += '\\\\b';\n }\n else if (b === 0x09) {\n result += '\\\\t';\n }\n else if (b === 0x0a) {\n result += '\\\\n';\n }\n else if (b === 0x0b) {\n result += '\\\\v';\n }\n else if (b === 0x0c) {\n result += '\\\\f';\n }\n else if (b === 0x0d) {\n result += '\\\\r';\n }\n else if (b === 0x22) {\n result += '\\\\\"';\n }\n else if (b === 0x5c) {\n result += '\\\\\\\\';\n }\n else if (b >= 0x20 && b <= 0x7e) {\n // Just a printable ASCII character that is neither a double quote nor a\n // backslash; no need to escape it.\n result += String.fromCharCode(b);\n }\n else {\n // Either part of a non-ASCII character or a control character without a\n // special escape sequence; needs escaping as a 3-digit octal escape\n result += '\\\\' + b.toString(8).padStart(3, '0');\n }\n i++;\n }\n result += '\"';\n return result;\n}\nexport const INCLUDE_HEADERS = {\n includeIndex: true,\n includeUnderline: true,\n includeFileHeaders: true\n};\nexport const FILE_HEADERS_ONLY = {\n includeIndex: false,\n includeUnderline: false,\n includeFileHeaders: true\n};\nexport const OMIT_HEADERS = {\n includeIndex: false,\n includeUnderline: false,\n includeFileHeaders: false\n};\nexport function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n let optionsObj;\n if (!options) {\n optionsObj = {};\n }\n else if (typeof options === 'function') {\n optionsObj = { callback: options };\n }\n else {\n optionsObj = options;\n }\n if (typeof optionsObj.context === 'undefined') {\n optionsObj.context = 4;\n }\n // We copy this into its own variable to placate TypeScript, which thinks\n // optionsObj.context might be undefined in the callbacks below.\n const context = optionsObj.context;\n // @ts-expect-error (runtime check for something that is correctly a static type error)\n if (optionsObj.newlineIsToken) {\n throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions');\n }\n if (!optionsObj.callback) {\n return diffLinesResultToPatch(diffLines(oldStr, newStr, optionsObj));\n }\n else {\n const { callback } = optionsObj;\n diffLines(oldStr, newStr, Object.assign(Object.assign({}, optionsObj), { callback: (diff) => {\n const patch = diffLinesResultToPatch(diff);\n // TypeScript is unhappy without the cast because it does not understand that `patch` may\n // be undefined here only if `callback` is StructuredPatchCallbackAbortable:\n callback(patch);\n } }));\n }\n function diffLinesResultToPatch(diff) {\n // STEP 1: Build up the patch with no \"\\" lines and with the arrays\n // of lines containing trailing newline characters. We'll tidy up later...\n if (!diff) {\n return;\n }\n diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier\n function contextLines(lines) {\n return lines.map(function (entry) { return ' ' + entry; });\n }\n const hunks = [];\n let oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1;\n for (let i = 0; i < diff.length; i++) {\n const current = diff[i], lines = current.lines || splitLines(current.value);\n current.lines = lines;\n if (current.added || current.removed) {\n // If we have previous context, start with that\n if (!oldRangeStart) {\n const prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n if (prev) {\n curRange = context > 0 ? contextLines(prev.lines.slice(-context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n }\n // Output our changes\n for (const line of lines) {\n curRange.push((current.added ? '+' : '-') + line);\n }\n // Track the updated file position\n if (current.added) {\n newLine += lines.length;\n }\n else {\n oldLine += lines.length;\n }\n }\n else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= context * 2 && i < diff.length - 2) {\n // Overlapping\n for (const line of contextLines(lines)) {\n curRange.push(line);\n }\n }\n else {\n // end the range and output\n const contextSize = Math.min(lines.length, context);\n for (const line of contextLines(lines.slice(0, contextSize))) {\n curRange.push(line);\n }\n const hunk = {\n oldStart: oldRangeStart,\n oldLines: (oldLine - oldRangeStart + contextSize),\n newStart: newRangeStart,\n newLines: (newLine - newRangeStart + contextSize),\n lines: curRange\n };\n hunks.push(hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n }\n // Step 2: eliminate the trailing `\\n` from each line of each hunk, and, where needed, add\n // \"\\".\n for (const hunk of hunks) {\n for (let i = 0; i < hunk.lines.length; i++) {\n if (hunk.lines[i].endsWith('\\n')) {\n hunk.lines[i] = hunk.lines[i].slice(0, -1);\n }\n else {\n hunk.lines.splice(i + 1, 0, '\\\');\n i++; // Skip the line we just added, then continue iterating\n }\n }\n }\n return {\n oldFileName: oldFileName, newFileName: newFileName,\n oldHeader: oldHeader, newHeader: newHeader,\n hunks: hunks\n };\n }\n}\n/**\n * creates a unified diff patch.\n *\n * @param patch either a single structured patch object (as returned by `structuredPatch`) or an\n * array of them (as returned by `parsePatch`).\n * @param headerOptions behaves the same as the `headerOptions` option of `createTwoFilesPatch`.\n * Ignored for patches where `isGit` is `true`.\n *\n * When a patch has `isGit: true`, `formatPatch` output is changed to more closely match Git's\n * output: it emits a `diff --git` header, emits Git extended headers as appropriate based on\n * properties like `isRename`, `isCreate`, `newMode`, etc, and will omit `---`/`+++` file\n * headers for patches with no hunks (e.g. renames without content changes).\n */\nexport function formatPatch(patch, headerOptions) {\n var _a, _b, _c, _d, _e, _f;\n if (!headerOptions) {\n headerOptions = INCLUDE_HEADERS;\n }\n if (Array.isArray(patch)) {\n if (patch.length > 1 && !headerOptions.includeFileHeaders && !patch.every(p => p.isGit)) {\n throw new Error('Cannot omit file headers on a multi-file patch. '\n + '(The result would be unparseable; how would a tool trying to apply '\n + 'the patch know which changes are to which file?)');\n }\n return patch.map(p => formatPatch(p, headerOptions)).join('\\n');\n }\n const ret = [];\n // Git patches have a fixed header format (diff --git, extended headers,\n // and ---/+++ when hunks are present), so headerOptions is ignored.\n if (patch.isGit) {\n headerOptions = INCLUDE_HEADERS;\n // Emit Git-style diff --git header and extended headers.\n // Git never puts /dev/null in the \"diff --git\" line; for file\n // creations/deletions it uses the real filename on both sides.\n if (!patch.oldFileName) {\n throw new Error('oldFileName must be specified for Git patches');\n }\n if (!patch.newFileName) {\n throw new Error('newFileName must be specified for Git patches');\n }\n let gitOldName = patch.oldFileName;\n let gitNewName = patch.newFileName;\n if (patch.isCreate && gitOldName === '/dev/null') {\n gitOldName = gitNewName.replace(/^b\\//, 'a/');\n }\n else if (patch.isDelete && gitNewName === '/dev/null') {\n gitNewName = gitOldName.replace(/^a\\//, 'b/');\n }\n ret.push('diff --git ' + quoteFileNameIfNeeded(gitOldName) + ' ' + quoteFileNameIfNeeded(gitNewName));\n if (patch.isDelete) {\n ret.push('deleted file mode ' + ((_a = patch.oldMode) !== null && _a !== void 0 ? _a : '100644'));\n }\n if (patch.isCreate) {\n ret.push('new file mode ' + ((_b = patch.newMode) !== null && _b !== void 0 ? _b : '100644'));\n }\n if (patch.oldMode && patch.newMode && !patch.isDelete && !patch.isCreate) {\n ret.push('old mode ' + patch.oldMode);\n ret.push('new mode ' + patch.newMode);\n }\n if (patch.isRename) {\n ret.push('rename from ' + quoteFileNameIfNeeded(((_c = patch.oldFileName) !== null && _c !== void 0 ? _c : '').replace(/^a\\//, '')));\n ret.push('rename to ' + quoteFileNameIfNeeded(((_d = patch.newFileName) !== null && _d !== void 0 ? _d : '').replace(/^b\\//, '')));\n }\n if (patch.isCopy) {\n ret.push('copy from ' + quoteFileNameIfNeeded(((_e = patch.oldFileName) !== null && _e !== void 0 ? _e : '').replace(/^a\\//, '')));\n ret.push('copy to ' + quoteFileNameIfNeeded(((_f = patch.newFileName) !== null && _f !== void 0 ? _f : '').replace(/^b\\//, '')));\n }\n }\n else {\n if (headerOptions.includeIndex && patch.oldFileName == patch.newFileName && patch.oldFileName !== undefined) {\n ret.push('Index: ' + patch.oldFileName);\n }\n if (headerOptions.includeUnderline) {\n ret.push('===================================================================');\n }\n }\n // Emit --- / +++ file headers. For Git patches with no hunks (e.g.\n // pure renames, mode-only changes), Git omits these, so we do too.\n const hasHunks = patch.hunks.length > 0;\n if (headerOptions.includeFileHeaders && patch.oldFileName !== undefined && patch.newFileName !== undefined\n && (!patch.isGit || hasHunks)) {\n ret.push('--- ' + quoteFileNameIfNeeded(patch.oldFileName) + (patch.oldHeader ? '\\t' + patch.oldHeader : ''));\n ret.push('+++ ' + quoteFileNameIfNeeded(patch.newFileName) + (patch.newHeader ? '\\t' + patch.newHeader : ''));\n }\n for (let i = 0; i < patch.hunks.length; i++) {\n const hunk = patch.hunks[i];\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n const oldStart = hunk.oldLines === 0 ? hunk.oldStart - 1 : hunk.oldStart;\n const newStart = hunk.newLines === 0 ? hunk.newStart - 1 : hunk.newStart;\n ret.push('@@ -' + oldStart + ',' + hunk.oldLines\n + ' +' + newStart + ',' + hunk.newLines\n + ' @@');\n for (const line of hunk.lines) {\n ret.push(line);\n }\n }\n return ret.join('\\n') + '\\n';\n}\nexport function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (typeof options === 'function') {\n options = { callback: options };\n }\n if (!(options === null || options === void 0 ? void 0 : options.callback)) {\n const patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n if (!patchObj) {\n return;\n }\n return formatPatch(patchObj, options === null || options === void 0 ? void 0 : options.headerOptions);\n }\n else {\n const { callback } = options;\n structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, Object.assign(Object.assign({}, options), { callback: patchObj => {\n if (!patchObj) {\n callback(undefined);\n }\n else {\n callback(formatPatch(patchObj, options.headerOptions));\n }\n } }));\n }\n}\nexport function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n/**\n * Split `text` into an array of lines, including the trailing newline character (where present)\n */\nfunction splitLines(text) {\n const hasTrailingNl = text.endsWith('\\n');\n const result = text.split('\\n').map(line => line + '\\n');\n if (hasTrailingNl) {\n result.pop();\n }\n else {\n result.push(result.pop().slice(0, -1));\n }\n return result;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,QAAA,OAAA,UAAA,IAAA;AACA,QAAA,UAAA,gBAAA,aAAA;AAEA,QAAM,MAAM,QAAA,QAAM,sBAAsB;AAExC,aAAS,MAAM,MAAc,QAAiB,aAAoB;AAC/D,UAAI,eAAe,IAAI;AAEvB,UAAI;AACD,cAAM,OAAO,KAAA,SAAS,IAAI;AAE1B,YAAI,KAAK,OAAM,KAAM,QAAQ;AAC1B,cAAI,6BAA6B;AACjC,iBAAO;;AAGV,YAAI,KAAK,YAAW,KAAM,aAAa;AACpC,cAAI,kCAAkC;AACtC,iBAAO;;AAGV,YAAI,iEAAiE;AACrE,eAAO;eACD,GAAG;AACT,YAAI,EAAE,SAAS,UAAU;AACtB,cAAI,qCAAqC,CAAC;AAC1C,iBAAO;;AAGV,YAAI,cAAc,CAAC;AACnB,cAAM;;IAEZ;AA3BS;AAmCT,aAAgBA,QAAO,MAAc,OAAe,QAAA,UAAQ;AACzD,aAAO,MAAM,OAAO,OAAO,QAAA,QAAQ,IAAI,OAAO,QAAA,UAAU,CAAC;IAC5D;AAFgB,WAAAA,SAAA;AAAhB,YAAA,SAAAA;AAOa,YAAA,OAAO;AAKP,YAAA,SAAS;AAKT,YAAA,WAAW,QAAA,OAAO,QAAA;;;;;;;;;;;;;ACxD/B,aAAA,cAAA;;;;;;;;;;ACgCA,aAAgB,WAAQ;AACrB,UAAI;AACJ,UAAI;AACJ,UAAI,SAAgC;AAEpC,YAAM,UAAsB,IAAI,QAAW,CAAC,OAAO,UAAS;AACzD,eAAO;AACP,eAAO;MACV,CAAC;AAED,aAAO;QACJ;QACA,KAAM,QAAM;AACT,cAAI,WAAW,WAAW;AACvB,qBAAS;AACT,iBAAK,MAAM;;QAEjB;QACA,KAAM,OAAK;AACR,cAAI,WAAW,WAAW;AACvB,qBAAS;AACT,iBAAK,KAAK;;QAEhB;QACA,IAAI,YAAS;AACV,iBAAO,WAAW;QACrB;QACA,IAAI,SAAM;AACP,iBAAO;QACV;;IAEN;AA/BgB;AAAhB,YAAA,WAAA;AAyCa,YAAA,iBAAiB;AAS9B,YAAA,UAAe;;;;;AC7Ef,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAIlB,SAAS,oBAAoB,OAAyC;AAC3E,MAAI,UAAU,aAAa,UAAU,OAAQ,QAAO;AACpD,QAAM,IAAI,UAAU,4CAA4C;AAClE;AAHgB;AAKT,SAAS,6BAA6B,UAKzC,CAAC,GAAqB;AACxB,QAAM,SAAS,QAAQ,UAAU;AACjC,SAAO,OAAO,UAAU;AACtB,QAAI,QAAQ,YAAY,CAAC,CAAC,QAAQ,cAAc,mBAAmB,0BAA0B,wBAAwB,yBAAyB,iBAAiB,eAAe,UAAU,EAAE,SAAS,MAAM,KAAK,IAAI,EAAG,QAAO;AAC5N,QAAI,WAAW,MAAM,OAAO,KAAK;AACjC,QAAI,QAAQ,cAAc,CAAC,QAAQ,QAAQ,OAAO,EAAE,SAAS,MAAM,KAAK,IAAI,GAAG;AAC7E,YAAM,OAAO,YAAY,MAAM,OAAO,MAAM;AAC5C,UAAI,SAAS,QAAW;AACtB,cAAM,SAAS,MAAM,6BAA6B,QAAQ,WAAW,WAAW,IAAI;AACpF,cAAM,OAAO,MAAM,SAAS,QAAQ,WAAW,SAAS;AACxD,cAAM,aAAa,SAAS,MAAM,OAAO,QAAQ,EAAE,QAAQ,QAAQ,GAAG;AACtE,cAAM,MAAM,QAAQ,aAAa,UAAU,WAAW,YAAY,IAAI;AACtE,cAAM,QAAQ,MAAM,6BAA6B,QAAQ,WAAW,WAAW,4BAA4B;AAC3G,cAAM,gBAAgB,SAAS,MAAM,MAAM,QAAQ,EAAE,QAAQ,QAAQ,GAAG;AACxE,cAAM,WAAW,QAAQ,aAAa,UAAU,cAAc,YAAY,IAAI;AAC9E,YAAI,QAAQ,YAAY,IAAI,WAAW,GAAG,QAAQ,GAAG,EAAG,QAAO;AAC/D,YAAI,QAAQ,WAAW,UAAa,MAAM,KAAK,SAAS,UAAU,aAAa,UAAU,EAAE,OAAO,aAAa,YAAY,SAAS,aAAa,SAAS;AACxJ,gBAAM,SAAS,OAAO,aAAa,WAAW,WAAW,EAAE,SAAS;AACpE,gBAAM,aAAa,OAAO,aAAa,WAAW,SAAS,aAAa;AACxE,qBAAW;AAAA,YACT,GAAG;AAAA,YACH,UAAU,cAAc,OAAO,aAAa,WAAW,SAAS,WAAW,GAAG,MAAM,KAAK,IAAI,IAAI,GAAG;AAAA,YACpG,YAAY,cAAc,EAAE,SAAS,QAAQ,WAAW,SAAS,aAAa,GAAG,MAAM,KAAK,IAAI,SAAM,IAAI,SAAM,GAAG,GAAG;AAAA,UACxH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,UAAM,OAAO,aAAa,SAAU,OAAO,aAAa,YAAY,aAAa,QAC/E,SAAS,aAAa,SAAS,OAAO,SAAS,aAAa,YAAY,SAAS,SAAS,KAAK,MAAM;AACvG,QAAI,QAAQ,OAAO,MAAM,UAAU,QAAQ,EAAE,OAAO,aAAa,YAAY,SAAS,kBAAkB;AACtG,aAAO,OAAO,aAAa,WAAW,EAAE,GAAG,UAAU,UAAU,QAAQ,IAAI;AAAA,IAC7E;AACA,WAAO;AAAA,EACT;AACF;AAvCgB;AAyChB,SAAS,wBAAwB,OAA4C;AAC3E,MAAI;AAAA,IAAC;AAAA,IAAQ;AAAA,IAAc;AAAA,IAAmB;AAAA,IAA0B;AAAA,IACtE;AAAA,IAAyB;AAAA,IAAiB;AAAA,IAAe;AAAA,IAAY;AAAA,IACrE;AAAA,EAAgB,EAAE,SAAS,MAAM,KAAK,IAAI,GAAG;AAG7C,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,KAAK,SAAS,WAAW,MAAM,KAAK,SAAS,QAAQ;AAC7D,UAAM,UAAU,YAAY,MAAM,OAAO,SAAS;AAClD,WAAO,YAAY,SACf,QACA,EAAE,UAAU,OAAO,UAAU,GAAG,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,EACnE;AAEA,MAAI,MAAM,KAAK,SAAS,UAAU,MAAM,KAAK,SAAS,SAAS;AAC7D,UAAM,OAAO,YAAY,MAAM,OAAO,MAAM;AAC5C,WAAO,SAAS,SACZ,QACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU,GAAG,MAAM,KAAK,IAAI,IAAI,IAAI;AAAA,IACtC;AAAA,EACN;AAEA,MAAI,MAAM,KAAK,KAAK,WAAW,OAAO,GAAG;AACvC,WAAO;AAAA,MACL,UAAU;AAAA,MACV,UAAU,OAAO,MAAM,KAAK,IAAI;AAAA,IAClC;AAAA,EACF;AAEA,SAAO;AACT;AAlCS;AAoCT,SAAS,YAAY,OAAgB,MAAkC;AACrE,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,EAAE,QAAQ,QAAQ;AACnE,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,MAAM,IAA0B;AAC9C,SAAO,OAAO,UAAU,YAAY,UAAU,KAAK,QAAQ;AAC7D;AANS;;;AC7FT,SAAS,YAAY,kBAAkB;AACvC,SAAS,UAAU,eAAe;AAClC,SAAS,QAAQ,OAAO,OAAO,OAAO,MAAM,UAAU,SAAS,YAAAC,WAAU,QAAQ,UAAU;AAE3F,SAAS,YAAY,MAAM,YAAAC,WAAU,SAAS,WAAW;;;ACGzD,IAAMC,IAAAA,oBAAY,QAAA;AAEX,SAASC,KAAYC,GAAyB;AAClD,QAAMC,IAAM,IAAI,OAAOD,CAAK;AAC5B,SAAAF,EAAM,IAAIG,GAAKD,CAAK,GACbC;AACV;AAJgBF;AAMT,SAASG,EAAWC,GAAiC;AACzD,SAAOA,aAAiB,UAAUL,EAAM,IAAIK,CAAK;AACpD;AAFgBD;AAIT,SAASE,EAAQD,GAAyB;AAC9C,SAAOL,EAAM,IAAIK,CAAK,KAAK,CAAA;AAC9B;AAFgBC;A;;;;;;;;;ACVT,UAAUC,EAAYC,GAAeC,GAA0B;AACnE,QAAMC,KAAaD,MAAU;AAC7B,aAAWE,MAAQH;AACZG,IAAAA,GAAK,aAAaD,OACnB,MAAMC;AAGf;AAPiBJ;ACRV,IAAMK,IAAAA,oBAAyB,IAAI;EACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACH,CAAC;AATM,IAYMC,IAAAA,oBAAwB,IAAI;EACtC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACH,CAAC;AArBM,IAwBMC,IAAAA,oBAAyB,IAAI;EACvC;EACA;EACA;EACA;EACA;AACH,CAAC;AA9BM,IA+BMC,IAAAA,oBAAwB,IAAI,CAAC,OAAO,aAAa,iBAAiB,MAAM,CAAC;ACtB/E,SAASC,EAAmBR,GAAeS,GAA+C;AAC9F,aAAW,EAAE,MAAAC,GAAA,KAAUX,EAAYC,GAAO,MAAM,GAAG;AAChD,QAAII,EAAmB,IAAIM,EAAI;AAC5B,aAAOC,EAAgB,MAAMF,CAAW;AAE3C,QAAIJ,EAAkB,IAAIK,EAAI;AAC3B,aAAOC,EAAgB,OAAOF,CAAW;EAE/C;AAEA,QAAMG,KAAOH,EAAY,GAAG,CAAC,GAAG,YAAA;AAEhC,SAAIG,OAAS,SACH,OAGNN,EAAmB,IAAIM,EAAI,IACrBD,EAAgB,MAAMF,EAAY,MAAM,CAAC,CAAC,IAGhDF,EAAkB,IAAIK,EAAI,IACpBD,EAAgB,OAAOF,EAAY,MAAM,CAAC,CAAC,IAGjDA,EAAY,WAAW,IACjBE,EAAgB,OAAOF,CAAW,IAGrCE,EAAgB,MAAMF,CAAW;AAC3C;AA7BgBD;AA+BhB,SAASG,EAAgBE,IAAU,OAAOJ,IAAwB,CAAA,GAA4B;AAC3F,QAAMK,KAAML,EAAY,GAAG,CAAC,GAAG,YAAA;AAE/B,SAAIK,OAAQ,SACF,OAGH;IACJ,SAAAD;IACA,QAAQ,CAACA;IACT,KAAAC;IACA,OAAOL,EAAY,GAAG,CAAC;EAAA;AAE7B;AAbSE;AAeF,SAASI,EAAYd,GAAoBe,GAA4B;AACzE,SAAIA,EAAU,WAAWA,EAAU,UAAU,SACnC,EAAE,KAAKA,EAAU,KAAK,OAAOA,EAAU,OAAO,OAAAf,EAAA,IAEjD,EAAE,KAAKe,EAAU,KAAK,OAAAf,EAAA;AAChC;AALgBc;ACnDhB,SAASE,EAAgBC,GAAgE;AACtF,QAAMC,IAAKD,GAAK,QAAQ,GAAG,KAAK;AAEhC,SAAI,CAACA,KAAOC,IAAK,IACP,OAGH;IACJ,KAAKD,EAAI,MAAM,GAAGC,CAAE,EAAE,KAAA,EAAO,YAAA;IAC7B,OAAOD,EAAI,MAAMC,IAAK,CAAC;EAAA;AAE7B;AAXSF;AAaT,SAASG,EAAkBpB,GAA4B;AACpD,aAAW,EAAE,MAAAU,EAAA,KAAUX,EAAYC,GAAO,MAAM;AAC7C,YAAQU,GAAA;MACL,KAAK;AACF,eAAO;MACV,KAAK;AACF,eAAO;MACV,KAAK;AACF,eAAO;MACV,KAAK;AACF,eAAO;MACV,KAAK;MACL,KAAK;AACF,eAAO;IAAA;AAGhB,SAAO;AACV;AAjBSU;AAmBT,SAASC,EAA0B,EAAE,MAAAX,EAAAA,GAAkC;AACpE,MAAIA,MAAS,QAAQA,MAAS;AAC3B,WAAO;AAEV,MAAIA,MAAS;AACV,WAAO;AAEb;AAPSW;AAcT,UAAUC,EAAkBtB,GAAuC;AAChE,aAAWG,KAAQH,GAAO;AACvB,UAAMC,KAAQoB,EAA0BlB,CAAI,GACtCoB,KAAatB,MAASgB,EAAgBd,EAAK,KAAK;AAElDoB,IAAAA,OACD,MAAM;MACH,GAAGA;MACH,OAAAtB;IAAA;EAGT;AACH;AAZUqB;AAcH,SAASE,EACbC,GACAzB,GACAS,IACqB;AACrB,QAAMiB,KAAqC;IACxC,MAAM,CAAA;IACN,OAAO,CAAC,GAAGJ,EAAkBtB,CAAK,CAAC;EAAA;AAGtC,SAAIyB,MAAS,YACVE;IACGD;IACAN,EAAkBpB,CAAK;IACvBQ,EAAmBR,GAAOS,EAAW;EAAA,GAIpCiB;AACV;AAnBgBF;AAqBhB,SAASG,EACND,GACAzB,GACA2B,IACD;AACC,MAAIA,OAAW;AACZ;AAGH,QAAMC,KAASd,EAAYd,GAAO2B,EAAM;AACpCA,EAAAA,GAAO,UACRF,EAAa,MAAM,KAAKG,EAAM,IAE9BH,EAAa,KAAK,KAAKG,EAAM;AAEnC;AAfSF;ACxET,IAAMG,IAAsB;EACzB,OAAA,oBAAW,IAAI;IACZ,CAAC,KAAK,IAAI;;EAAA,CACZ;AAEJ;AALA,IAOaC,IAAmB;EAC7B,OAAO,IAAI,IAAI;IACZ,CAAC,KAAK,IAAI;;IACV,CAAC,KAAK,KAAK;;IACX,CAAC,KAAK,KAAK;;IACX,CAAC,KAAK,KAAK;;IACX,CAAC,KAAK,KAAK;;IACX,GAAGD,EAAU,MAAM,QAAA;EAAQ,CAC7B;EACD,MAAA,oBAAU,IAAI;IACX;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EAAA,CACF;AACJ;AA1BA,IA4BME,IAAqC;EACxC,OAAO;IACJ,OAAA,oBAAW,IAAI;MACZ,CAAC,KAAK,IAAI;;MACV,CAAC,KAAK,IAAI;;MACV,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,IAAI;;MACV,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,IAAI;;IAAA,CACZ;IACD,MAAM,oBAAI,IAAI,CAAC,UAAU,UAAU,QAAQ,UAAU,eAAe,KAAK,UAAU,CAAC;EAAA;EAEvF,QAAQ;IACL,OAAA,oBAAW,IAAI;MACZ,CAAC,KAAK,IAAI;;MACV,CAAC,KAAK,IAAI;;MACV,CAAC,KAAK,IAAI;;MACV,CAAC,KAAK,IAAI;;MACV,CAAC,KAAK,IAAI;;IAAA,CACZ;IACD,MAAA,oBAAU,IAAI,CAAC,QAAQ,WAAW,kBAAkB,iBAAiB,UAAU,CAAC;EAAA;EAEnF,QAAQ;IACL,OAAA,oBAAW,IAAI;MACZ,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,IAAI;;MACV,CAAC,KAAK,KAAK;;IAAA,CACb;IACD,MAAM,oBAAI,IAAI,CAAC,QAAQ,WAAW,WAAW,QAAQ,QAAQ,OAAO,CAAC;EAAA;EAExE,OAAO;IACJ,OAAA,oBAAW,IAAA;IACX,MAAM,oBAAI,IAAI,CAAC,aAAa,CAAC;EAAA;EAEhC,MAAM;IACH,OAAA,oBAAW,IAAA;IACX,MAAM,oBAAI,IAAI,CAAC,UAAU,CAAC;EAAA;EAE7B,MAAM;IACH,OAAA,oBAAW,IAAA;IACX,MAAM,oBAAI,IAAI,CAAC,aAAa,CAAC;EAAA;EAEhC,MAAM;IACH,OAAA,oBAAW,IAAA;IACX,MAAM,oBAAI,IAAI,CAAC,QAAQ,cAAc,CAAC;EAAA;EAEzC,QAAQ;IACL,OAAA,oBAAW,IAAI;MACZ,CAAC,KAAK,IAAI;;MACV,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,IAAI;;MACV,CAAC,KAAK,KAAK;;MACX,CAAC,KAAK,IAAI;;IAAA,CACZ;IACD,MAAA,oBAAU,IAAI,CAAC,QAAQ,QAAQ,YAAY,iBAAiB,CAAC;EAAA;AAEnE;AA5FA,IA8FMC,IAAkB,EAAE,OAAO,oBAAI,IAAA,GAAO,MAAM,oBAAI,IAAA,EAAI;AAEnD,SAASC,EAAmBT,GAAsB;AACtD,QAAMU,IAAOH,EAASP,KAAQ,EAAE,KAAKQ;AAErC,SAAO;IACJ,OAAO,IAAI,IAAI,CAAC,GAAGH,EAAU,MAAM,QAAA,GAAW,GAAGK,EAAK,MAAM,QAAA,CAAS,CAAC;IACtE,MAAMA,EAAK;EAAA;AAEjB;AAPgBD;AC1GT,SAASE,EACblB,GACAiB,IAAOJ,GAKP;AACA,MAAIb,EAAI,WAAW,IAAI,GAAG;AACvB,UAAMC,KAAKD,EAAI,QAAQ,GAAG;AAC1B,QAAIC,KAAK;AACN,aAAO,CAAC,EAAE,MAAMD,EAAI,MAAM,GAAGC,EAAE,GAAG,OAAOD,EAAI,MAAMC,KAAK,CAAC,GAAG,WAAW,MAAA,CAAO;AAEjF,UAAMkB,KAAOnB,EAAI,MAAM,CAAC;AACxB,WAAO,CAAC,EAAE,MAAMA,GAAK,WAAWiB,EAAK,KAAK,IAAIE,EAAI,EAAA,CAAG;EACxD;AAGA,MAAInB,EAAI,WAAW,GAAG;AACnB,UAAMoB,KAAOpB,EAAI,OAAO,CAAC,GACnBqB,KAAWJ,EAAK,MAAM,IAAIG,EAAI;AACpC,WAAO,CAAC,EAAE,MAAMpB,GAAK,WAAWqB,OAAa,KAAA,CAAM;EACtD;AAGA,SAAOC,EAActB,GAAKiB,EAAK,KAAK;AACvC;AA1BgBC;AA4BhB,SAASI,EACNtB,GACAuB,GAC4D;AAC5D,QAAMC,KAAQxB,EAAI,MAAM,CAAC,EAAE,MAAM,EAAE,GAC7ByB,KAAsE,CAAA;AAE5E,WAASC,IAAI,GAAGA,IAAIF,GAAM,QAAQE,KAAK;AACpC,UAAMN,IAAOI,GAAME,CAAC,GACdL,KAAWE,EAAU,IAAIH,CAAI;AAEnC,QAAIC,OAAa;AAEd,aAAO,CAAC,EAAE,MAAMrB,GAAK,WAAW,MAAA,CAAO;AAG1C,QAAIqB,IAAU;AACX,YAAMM,IAAYH,GAAM,MAAME,IAAI,CAAC,EAAE,KAAK,EAAE;AAC5C,UAAIC,KAEG,CADsB,CAAC,GAAGA,CAAS,EAAE,MAAM,CAACC,OAAML,EAAU,IAAIK,EAAC,CAAC;AAGnE,eAAAH,GAAO,KAAK,EAAE,MAAM,IAAIL,CAAI,IAAI,OAAOO,GAAW,WAAW,MAAA,CAAO,GAC7DF;IAGhB;AAEAA,IAAAA,GAAO,KAAK,EAAE,MAAM,IAAIL,CAAI,IAAI,WAAWC,GAAAA,CAAU;EACxD;AAEA,SAAOI;AACV;AAhCSH;ACxBF,SAASO,EAAiBC,GAA4BhD,IAAgB,CAAA,GAAiB;AAC3F,MAAI4C,KAAI;AAER,SAAOA,KAAII,EAAO,UAAQ;AACvB,UAAM9B,KAAM,OAAO8B,EAAOJ,EAAC,CAAC;AAC5B,QAAI,CAAC1B,GAAI,WAAW,GAAG,KAAKA,GAAI,SAAS,EAAG;AAE5C,UAAM+B,IAASb,EAAYlB,EAAG;AAC9B,QAAIgC,IAAON,KAAI;AAEf,eAAWO,MAASF,GAAQ;AACzB,YAAM9C,IAAa;QAChB,MAAMgD,GAAM;QACZ,OAAOA,GAAM;QACb,cAAc;QACd,UAAU;MAAA;AAETA,MAAAA,GAAM,aAAahD,EAAK,UAAU,UAAa+C,IAAOF,EAAO,WAC9D7C,EAAK,QAAQ,OAAO6C,EAAOE,CAAI,CAAC,GAChC/C,EAAK,eAAe,MACpB+C,MAEHlD,EAAM,KAAKG,CAAI;IAClB;AAEAyC,IAAAA,KAAIM;EACP;AAEA,SAAO,EAAE,OAAAlD,GAAO,WAAW4C,GAAA;AAC9B;AA7BgBG;ACIT,SAASK,EACbJ,GACAvB,GACAzB,KAAgB,CAAA,GACN;AACV,QAAMmC,KAAOD,EAAmBT,CAAI,GAC9BhB,IAAwB,CAAA,GACxB4C,IAAsB,CAAA;AAE5B,MAAIT,KAAI;AACR,SAAOA,KAAII,EAAO,UAAQ;AACvB,UAAMM,IAAUN,EAAOJ,EAAC;AAExB,QAAIW,EAAWD,CAAO,GAAG;AACtBD,QAAU,KAAK,GAAGG,EAAQF,CAAiB,CAAC,GAC5CV;AACA;IACH;AAEA,UAAM1B,KAAM,OAAOoC,CAAO;AAE1B,QAAIpC,OAAQ,MAAM;AACf,eAASuC,KAAIb,KAAI,GAAGa,KAAIT,EAAO,QAAQS,MAAK;AACzC,cAAMC,KAAIV,EAAOS,EAAC;AAClBF,UAAWG,EAAC,IAAIL,EAAU,KAAK,GAAGG,EAAQE,EAAW,CAAC,IAAIL,EAAU,KAAK,OAAOK,EAAC,CAAC;MACrF;AACA;IACH;AAEA,QAAI,CAACxC,GAAI,WAAW,GAAG,KAAKA,GAAI,SAAS,GAAG;AACzCT,QAAY,KAAKS,EAAG,GACpB0B;AACA;IACH;AAEA,UAAMK,KAASb,EAAYlB,IAAKiB,EAAI;AACpC,QAAIe,KAAON,KAAI;AAEf,eAAWO,MAASF,IAAQ;AACzB,YAAM9C,KAAa;QAChB,MAAMgD,GAAM;QACZ,OAAOA,GAAM;QACb,cAAc;QACd,UAAU;MAAA;AAGVA,MAAAA,GAAM,aACNhD,GAAK,UAAU,UACf+C,KAAOF,EAAO,UACd,CAACO,EAAWP,EAAOE,EAAI,CAAC,MAExB/C,GAAK,QAAQ,OAAO6C,EAAOE,EAAI,CAAC,GAChC/C,GAAK,eAAe,MACpB+C,OAEHlD,GAAM,KAAKG,EAAI;IAClB;AAEAyC,IAAAA,KAAIM;EACP;AAEA,SAAO,EAAE,OAAAlD,IAAO,aAAAS,GAAa,WAAA4C,EAAA;AAChC;AA9DgBD;ACTT,UAAUO,EAA6B;EAC3C,OAAAC;AACH,GAAmD;AAChD,aAAW/B,KAAU+B;AAClB,eAAWC,MAAUC,GAAqB;AACvC,YAAMC,KAAgBF,GAAOhC,EAAO,GAAG;AACnCkC,MAAAA,OACD,MAAMA;IAEZ;AAEN;AAXiBJ;AAajB,SAASK,EACNnC,GACAoC,GACAC,KAAU,OAAOrC,CAAM,GACxB;AACC,QAAMsC,KAAQ,OAAOtC,KAAW,WAAW,IAAI,OAAO,OAAOA,EAAO,YAAA,CAAa,EAAE,IAAIA;AAEvF,SAAO,SAAwBf,GAAmC;AAC/D,QAAIqD,GAAM,KAAKrD,CAAG;AACf,aAAO;QACJ,UAAAmD;QACA,SAAS,eAAeC,EAAO,sCAAsCD,CAAQ;MAAA;EAGtF;AACH;AAfSD;AAiBT,SAASI,EAA6BvC,GAAgBoC,GAAiC;AACpF,QAAME,KAAQ,IAAI,OAAO,OAAOtC,EAAO,YAAA,EAAc,QAAQ,OAAO,SAAS,CAAC,EAAE;AAChF,SAAOmC,EAAqBG,IAAOF,GAAUpC,CAAM;AACtD;AAHSuC;AAKT,IAAMN,IAAsB;EACzBE,EAAqB,SAAS,kBAAkB;EAChDA,EAAqB,gBAAgB,oBAAoB;EACzDA,EAAqB,eAAe,mBAAmB;EACvDA,EAAqB,kBAAkB,sBAAsB;EAC7DA,EAAqB,iBAAiB,qBAAqB;EAC3DA,EAAqB,kBAAkB,sBAAsB;EAC7DA,EAAqB,cAAc,kBAAkB;EACrDA,EAAqB,mBAAmB,uBAAuB;EAC/DI,EAA6B,qBAAqB,6BAA6B;EAC/EA,EAA6B,gBAAgB,yBAAyB;EACtEJ,EAAqB,iBAAiB,yBAAyB;EAC/DI,EAA6B,gBAAgB,yBAAyB;EACtEA,EAA6B,iBAAiB,yBAAyB;EACvEA,EAA6B,gBAAgB,mBAAmB;EAChEA,EAA6B,kBAAkB,mBAAmB;EAClEA,EAA6B,iBAAiB,mBAAmB;EACjEA,EAA6B,eAAe,uBAAuB;EACnEJ,EAAqB,gBAAgB,oBAAoB;EACzDI,EAA6B,aAAa,oBAAoB;EAC9DJ,EAAqB,oBAAoB,wBAAwB;EACjEI,EAA6B,UAAU,kBAAkB;EACzDA,EAA6B,gBAAgB,wBAAwB;EACrEA,EAA6B,kBAAkB,wBAAwB;EACvEA,EAA6B,iBAAiB,wBAAwB;EACtEA,EAA6B,kBAAkB,6BAA6B;EAC5EA,EAA6B,sBAAsB,iBAAiB;EACpEA,EAA6B,qBAAqB,iBAAiB;EACnEJ,EAAqB,8BAA8B,iBAAiB;EACpEA,EAAqB,mBAAmB,mBAAmB;EAC3DI,EAA6B,oBAAoB,sBAAsB;EACvEA,EAA6B,eAAe,4BAA4B;EACxEA,EAA6B,eAAe,4BAA4B;EACxEA,EAA6B,mBAAmB,4BAA4B;EAC5EA,EAA6B,iBAAiB,uBAAuB;AACxE;ACtEO,UAAUC,EACd5C,GACAzB,GACyB;AACzB,aAAWG,MAAQH;AAChB,eAAW6D,MAAUS,GAAoB;AACtC,YAAMP,IAAgBF,GAAOpC,GAAMtB,EAAI;AACnC4D,YACD,MAAMA;IAEZ;AAEN;AAZiBM;AA4BjB,SAASE,GACN9C,GACAtB,GACA8D,IACA,EAAE,MAAAvD,KAAO,OAAOP,CAAI,GAAG,YAAAqE,IAAa,OAAO,WAAAC,IAAY,MAAA,IAA8B,CAAA,GACtF;AACC,QAAMN,KAAQ,OAAOhE,KAAS,WAAW,IAAI,OAAO,OAAOA,EAAK,YAAA,CAAa,EAAE,IAAIA,GAC7E+D,IAAU,UAAUzC,IAAO,GAAGA,CAAI,kBAAkB,EAAE,GAAGf,EAAI,sCAAsCuD,EAAQ;AAEjH,SAAO,SAAqBS,IAA4BvE,IAAkC;AACvF,QAAI,EAAAsB,KAAQiD,OAAgBjD,MAIxB,EAAA+C,KAAc,CAACrE,GAAK,aAIpB,EAAAsE,KAAatE,GAAK,UAAU,WAI5BgE,GAAM,KAAKhE,GAAK,IAAI;AACrB,aAAO;QACJ,UAAA8D;QACA,SAAAC;MAAA;EAGT;AACH;AA7BSK,OAAAA,IAAAA;AA+BT,IAAMI,IAAuC,EAAE,YAAY,MAAM,WAAW,KAAA;AAA5E,IAEML,IAAqB;EACxBC,GAAmB,MAAM,2BAA2B,mBAAmB;IACpE,MAAM;EAAA,CACR;EACDA,GAAmB,SAAS,UAAU,iBAAiB;EACvDA,GAAmB,SAAS,OAAO,iBAAiB;EACpDA,GAAmB,QAAQ,YAAY,mBAAmB,EAAE,MAAM,SAAA,CAAU;;EAE5EA,GAAmB,UAAU,qBAAqB,mBAAmB,EAAE,MAAM,eAAA,CAAgB;EAC7FA,GAAmB,MAAM,cAAc,wBAAwB;EAC/DA,GAAmB,MAAM,eAAe,mBAAmBI,CAAgB;;;EAG3EJ,GAAmB,MAAM,aAAa,0BAA0BI,CAAgB;EAChFJ,GAAmB,MAAM,eAAe,0BAA0BI,CAAgB;EAClFJ,GAAmB,MAAM,QAAQ,0BAA0B,EAAE,GAAGI,GAAkB,MAAM,KAAA,CAAM;AACjG;AC1EO,SAASC,EACbnD,GACAzB,GACA6B,IACgB;AAChB,SAAO,CAAC,GAAGwC,EAAsB5C,GAAMzB,CAAK,GAAG,GAAG2D,EAA6B9B,EAAM,CAAC;AACzF;AANgB+C;ACMT,SAASC,KAAa7B,GAAwC;AAClE,QAAM,EAAE,OAAAhD,GAAO,WAAA8E,GAAAA,IAAc/B,EAAiBC,CAAM,GAE9CvB,KAAOqD,KAAY9B,EAAO,SAAS,OAAOA,EAAO8B,EAAS,CAAC,EAAE,YAAA,IAAgB,MAC7EC,IAAatD,OAAS,OAAOuB,EAAO,MAAM8B,KAAY,CAAC,IAAI,CAAA,GAE3D,EAAE,aAAArE,GAAa,WAAA4C,GAAA,IAAcD,EAAe2B,GAAYtD,IAAMzB,CAAK,GACnE6B,IAASL,EAAoBC,IAAMzB,GAAOS,CAAW;AAE3D,SAAO;IACJ,MAAAgB;IACA,OAAOzB,EAAM,IAAIgF,CAAY;IAC7B,OAAO3B;IACP,QAAAxB;IACA,iBAAiBoD,EAAkBL,EAAsBnD,IAAMzB,GAAO6B,CAAM,CAAC;EAAA;AAEnF;AAhBgBgD;AAkBhB,SAASI,EAAkBC,GAAkC;AAC1D,SAAO,OAAO,eAAeA,GAAiB,mBAAmB;IAC9D,OAAOA;EAAA,CACT;AACJ;AAJSD;AAMT,SAASD,EAAa,EAAE,OAAAG,GAAO,MAAAzE,EAAAA,GAA0B;AACtD,SAAOyE,MAAU,SAAY,EAAE,MAAAzE,GAAM,OAAAyE,EAAA,IAAU,EAAE,MAAAzE,EAAA;AACpD;AAFSsE;AChCT,IAAMI,IAAa;EAChB,QAAU;EACV,aAAe;EACf,mBAAqB;EACrB,mBAAqB;EACrB,kBAAoB;EACpB,uBAAyB;EACzB,YAAc;EACd,YAAc;EACd,eAAiB;EACjB,mBAAqB;EACrB,WAAa;EACb,mBAAqB;EACrB,kBAAoB;EACpB,qBAAuB;EACvB,SAAW;EACX,iBAAmB;EACnB,OAAS;EACT,QAAU;EACV,aAAe;EACf,QAAU;AACb;AAMA,UAAUC,EAAqBC,GAAqC;AACjE,QAAMC,IAAQ,SAASD,EAAI,oBAAoB,KAAK,EAAE;AACtD,WAASE,KAAQ,GAAGA,KAAQD,GAAOC,MAAS;AACzC,UAAM1E,KAAMwE,EAAI,kBAAkBE,EAAK,EAAE,GACnCL,IAAQG,EAAI,oBAAoBE,EAAK,EAAE;AAEzC1E,IAAAA,OAAQ,WACT,MAAM,EAAE,KAAKA,GAAI,YAAA,EAAc,KAAA,GAAQ,OAAAqE,GAAO,OAAO,MAAA;EAE3D;AACH;AAVUE;AAYV,UAAUI,EAA6BH,GAAuC;AAC3E,aAAWxE,KAAO,OAAO,KAAKwE,CAAG;AAC9B,QAAII,EAAY5E,CAAG,GAAG;AACnB,YAAMmD,KAAWmB,EAAWtE,CAAG;AAC/B,YAAM;QACH,UAAAmD;QACA,SAAS,WAAWnD,EAAI,YAAA,CAAa,uCAAuCmD,EAAQ;MAAA;IAE1F;AAEN;AAVUwB;AAYH,SAASC,EAAY5E,GAA6C;AACtE,SAAO,OAAO,OAAOsE,GAAYtE,CAAG;AACvC;AAFgB4E;AAIhB,SAASC,GAAWL,GAAsC;AACvD,QAAMM,IAAiB,CAAA;AACvB,aAAW,CAAC9E,IAAKqE,EAAK,KAAK,OAAO,QAAQG,CAAG,GAAG;AAC7C,UAAMO,IAAS/E,GAAI,YAAA,EAAc,KAAA;AACjC,KAAI4E,EAAYG,CAAM,KAAKA,EAAO,WAAW,KAAK,OAC/CD,EAAOC,CAAM,IAAI,OAAOV,EAAK;EAEnC;AACA,SAAOS;AACV;AATSD;AAWF,SAASG,GAAS5E,GAA8B;AACpD,QAAMoE,IAAMK,GAAWzE,CAAG,GACpBW,KAA+B;IAClC,MAAM,CAAA;IACN,OAAO,CAAC,GAAGwD,EAAqBC,CAAG,CAAC;EAAA,GAEjCJ,KAAkB;IACrB,GAAGO,EAA6BH,CAAG;IACnC,GAAGV,EAAsB,MAAM,CAAA,GAAI/C,EAAM;EAAA;AAG5C,SAAO;IACJ,QAAAA;IACA,iBAAAqD;EAAA;AAEN;AAfgBY;AC/DT,SAASC,GAAmB/C,GAA2BsC,GAA8B;AACzF,SAAO,CAAC,GAAGT,EAAU,GAAG7B,CAAM,EAAE,iBAAiB,GAAG8C,GAASR,CAAG,EAAE,eAAe;AACpF;AAFgBS;A;;;ACoBT,IAAMC,KAAN,cAAuB,MAAM;SAAA;;;EACjC,YACUC,GACPC,GACD;AACC,UAAMA,CAAO,GAHN,KAAA,OAAAD,GAIP,OAAO,eAAe,MAAM,WAAW,SAAS;EACnD;AACH;ACvBO,IAAME,KAAN,cAAgCH,GAAS;SAAA;;;EAC7C,YACmBI,GAChBF,GACD;AACC,UAAM,QAAWA,CAAO,GAHR,KAAA,SAAAE;EAInB;AACH;AChBO,IAAMC,KAAN,cAA6BL,GAAS;SAAA;;;EAC1C,YACUC,GACSK,GAChBJ,IACD;AACC,UAAMD,GAAMC,EAAO,GAJZ,KAAA,OAAAD,GACS,KAAA,SAAAK,GAIhB,OAAO,eAAe,MAAM,WAAW,SAAS;EACnD;AACH;ACUO,IAAMC,KAAN,cAAwCP,GAAS;SAAA;;;EACrD,YAImBQ,GAChBN,GACD;AACC,UAAM,QAAWA,KAAW,OAAOM,CAAG,CAAC,GAHvB,KAAA,MAAAA;EAInB;AACH;ACtBO,IAAMC,KAAN,cAAqCT,GAAS;SAAA;;;EAClD,YAAYE,GAAkB;AAC3B,UAAM,QAAWA,CAAO;EAC3B;AACH;ACPO,IAAMQ,KAAO;AAAb,IAEMC,KAAiB,6BAAM;AAAC,GAAP;AAMvB,SAASC,GAAcC,IAA+B;AAC1D,SAAI,OAAOA,MAAW,aACZF,KAEHE;AACV;AALgBD;AAWT,SAASE,GAAmCD,IAAkC;AAClF,SAAO,OAAOA,MAAW,cAAcA,OAAWF;AACrD;AAFgBG;AAIT,SAASC,GAAQC,IAAeC,GAAgC;AACpE,QAAMC,IAAQF,GAAM,QAAQC,CAAI;AAChC,SAAIC,KAAS,IACH,CAACF,IAAO,EAAE,IAGb,CAACA,GAAM,OAAO,GAAGE,CAAK,GAAGF,GAAM,OAAOE,IAAQ,CAAC,CAAC;AAC1D;AAPgBH;AAWT,SAASI,GAAMH,IAA+BI,IAAS,GAAmB;AAC9E,SAAOC,GAAYL,EAAK,KAAKA,GAAM,SAASI,IAASJ,GAAMI,CAAM,IAAI;AACxE;AAFgBD;AAOT,SAASG,GAAKN,IAAgBI,IAAS,GAAG;AAC9C,MAAIC,GAAYL,EAAK,KAAKA,GAAM,SAASI;AACtC,WAAOJ,GAAMA,GAAM,SAAS,IAAII,CAAM;AAE5C;AAJgBE,OAAAA,IAAAA;AAQhB,SAASD,GAAYL,IAA6C;AAC/D,SAAOO,GAAgBP,EAAK;AAC/B;AAFSK;AAIF,SAASG,GAAmBR,KAAQ,IAAIS,IAAU,MAAMC,IAAY;GAAgB;AACxF,SAAOV,GAAM,MAAMU,CAAS,EAAE,OAAO,CAACC,IAAQC,MAAS;AACpD,UAAMC,KAAcJ,IAAUG,EAAK,KAAA,IAASA;AAC5C,WAAIC,MACDF,GAAO,KAAKE,EAAW,GAEnBF;EACV,GAAG,CAAA,CAAc;AACpB;AARgBH,OAAAA,IAAAA;AAYT,SAASM,GACbd,IACAe,GACI;AACJ,SAAOP,GAAmBR,IAAO,IAAI,EAAE,IAAI,CAACY,MAASG,EAASH,CAAI,CAAC;AACtE;AALgBE;AAOT,SAASE,GAAaC,IAAuB;AACjD,aAAOC,mBAAAA,QAAOD,IAAME,mBAAAA,MAAM;AAC7B;AAFgBH;AAOT,SAASI,GAAUC,IAAsBC,GAAsB;AACnE,SAAI,MAAM,QAAQD,EAAM,IAChBA,GAAO,SAASC,CAAI,KACtBD,GAAO,KAAKC,CAAI,IAGnBD,GAAO,IAAIC,CAAI,GAEXA;AACV;AATgBF,OAAAA,IAAAA;AAcT,SAASG,GAAaF,IAAaC,GAAwB;AAC/D,SAAI,MAAM,QAAQD,EAAM,KAAK,CAACA,GAAO,SAASC,CAAI,KAC/CD,GAAO,KAAKC,CAAI,GAGZD;AACV;AANgBE;AAQT,SAASC,GAAUH,IAAsBC,GAAY;AACzD,MAAI,MAAM,QAAQD,EAAM,GAAG;AACxB,UAAMnB,IAAQmB,GAAO,QAAQC,CAAI;AAC7BpB,SAAS,KACVmB,GAAO,OAAOnB,GAAO,CAAC;EAE5B;AACGmB,IAAAA,GAAO,OAAOC,CAAI;AAErB,SAAOA;AACV;AAVgBE;AAYT,IAAMC,KAAiB,OAAO,UAAU,SAAS,KAAK,KAAK,OAAO,UAAU,QAAQ;AAIpF,SAASC,EAAW7B,IAAsB;AAC9C,SAAO,MAAM,QAAQA,EAAM,IAAIA,KAAS,CAACA,EAAM;AAClD;AAFgB6B;AAIT,SAASC,GAAYC,IAAa;AACtC,SAAOA,GAAI,QAAQ,cAAc,CAACC,GAAMC,MAC9BA,EAAI,YAAA,CACb;AACJ;AAJgBH;AAMT,SAASI,GAAiBlC,IAA2B;AACzD,SAAO6B,EAAQ7B,EAAM,EAAE,IAAI,CAACyB,MAClBA,aAAgB,SAAUA,IAAkB,OAAOA,CAAI,CAChE;AACJ;AAJgBS,OAAAA,IAAAA;AAMT,SAASC,EAASnC,IAAmCoC,IAAQ,GAAG;AACpE,MAAIpC,MAAU;AACX,WAAOoC;AAGV,QAAMC,IAAM,SAASrC,IAAQ,EAAE;AAC/B,SAAO,OAAO,MAAMqC,CAAG,IAAID,IAAQC;AACtC;AAPgBF;AAST,SAASG,EAAiBnC,IAAYoC,GAAgB;AAC1D,QAAMzB,IAAc,CAAA;AACpB,WAAS0B,KAAI,GAAGC,IAAMtC,GAAM,QAAQqC,KAAIC,GAAKD;AAC1C1B,MAAO,KAAKyB,GAAQpC,GAAMqC,EAAC,CAAC;AAE/B,SAAO1B;AACV;AANgBwB;AAQT,SAASI,GAAevC,IAAkC;AAC9D,UAAQ,MAAM,QAAQA,EAAK,IAAI,OAAO,OAAOA,EAAK,IAAIA,IAAO,SAAS,OAAO;AAChF;AAFgBuC,OAAAA,IAAAA;AAIT,SAASC,GAAWxC,IAAyB;AACjD,SAAKA,KAIE,OAAO,SAASA,EAAK,IAAIA,GAAM,SAAS,OAAO,WAAWA,EAAK,IAH5D;AAIb;AANgBwC;AAWT,SAASC,GAA2B5C,IAAW6C,GAA0B;AAC7E,QAAMC,IAA2B,CAAA;AAEjC,SAAAD,EAAW,QAAQ,CAACE,OAAQ;AACrB/C,IAAAA,GAAO+C,EAAG,MAAM,WACjBD,EAAIC,EAAG,IAAI/C,GAAO+C,EAAG;EAE3B,CAAC,GAEMD;AACV;AAVgBF;AAYT,SAASI,GAAMC,KAAW,GAAkB;AAChD,SAAO,IAAI,QAAQ,CAACC,MAAS,WAAWA,GAAMD,EAAQ,CAAC;AAC1D;AAFgBD;AAIT,SAASG,GAAUhD,IAAkB;AACzC,MAAIA,OAAU;AAGd,WAAOA;AACV;AALgBgD;AChLT,SAASC,EAAiBjD,IAAUkD,GAAoCC,GAAmB;AAC/F,SAAID,EAAOlD,EAAK,IACNA,KAEH,UAAU,SAAS,IAAImD,IAAM;AACvC;AALgBF;AAOT,IAAMG,KAAuD,wBACjEpD,OAEO,MAAM,QAAQA,EAAK,GAHuC;AAM7D,SAASqD,GACbrD,IACAsD,GACoB;AACpB,QAAMC,IAAOC,EAAWxD,EAAK,IAAI,WAAW,OAAOA;AAEnD,SACG,wBAAwB,KAAKuD,CAAI,MAChC,CAACD,KAAQ,CAACA,EAAK,SAASC,CAAuC;AAEtE;AAVgBF;AAgBT,IAAMI,IAAgD,wBAACzD,OACpD,OAAOA,MAAU,YAAYwD,EAAWxD,EAAK,GADM;AAAtD,IAIM0D,KAAiE,wBAC3E1D,OAEOyD,EAAazD,EAAK,KAAK,OAAO,SAASA,EAAK,GAHwB;AAJvE,IAUM2D,KAAwE,wBAClF3D,OAEOyD,EAAazD,EAAK,KAAM,MAAM,QAAQA,EAAK,KAAKA,GAAM,MAAMyD,CAAY,GAHG;AAO9E,SAASG,GACb5D,IACW;AACX,SAAO,CAAC,CAACA,MAASyB,GAAezB,EAAK,MAAM;AAC/C;AAJgB4D;AAMT,SAASC,GAAe7D,IAA0D;AACtF,SAAO,OAAOA,MAAU;AAC3B;AAFgB6D;AAIT,IAAMtD,KAA+D,wBACzEP,OAEIA,MAAS,QAAQ,0BAA0B,SAAS,OAAOA,EAAK,IAC1D,QAGH,OAAQA,GAA8B,UAAW,UAPiB;AChErE,IAAK8D,KAAAA,kBAAAA,QACTA,GAAAA,GAAA,UAAA,CAAA,IAAA,WACAA,GAAAA,GAAA,QAAA,CAAA,IAAA,SACAA,GAAAA,GAAA,YAAY,EAAA,IAAZ,aACAA,GAAAA,GAAA,UAAU,GAAA,IAAV,WAJSA,KAAAA,MAAA,CAAA,CAAA;ACFL,IAAMC,KAAN,MAAMA,GAAwD;SAAA;;;EAClE,YACmBC,GACAC,GACjB;AAFiB,SAAA,SAAAD,GACA,KAAA,SAAAC;EAChB;EAEH,YAAsC;AACnC,WAAO,IAAIF,GAAiB,KAAK,OAAO,SAAS,MAAM,GAAG,KAAK,OAAO,SAAS,MAAM,CAAC;EACzF;AACH;ACXA,SAASG,KAAoB;AAC1B,QAAM,IAAI,MAAM,uCAAuC;AAC1D;AAFSA;AAIF,IAAMC,KAAN,MAAoB;SAAA;;;EAMxB,YACGC,GACAC,GACD;AARF,SAAU,UAAoB,CAAA,GAC9B,KAAU,aAA6DH,IAcvE,KAAA,QAAQ,CAACtD,IAA8CS,OACpD,KAAK,aAAA,GAEA,KAAK,QAAQ,MAAM,CAACiD,IAAKpE,MAAU,KAAK,SAASoE,IAAKpE,GAAOU,GAAKV,CAAK,CAAC,CAAC,IAIvE,KAAK,WAAWmB,GAAQ,KAAK,eAAA,CAAgB,MAAM,QAHhD,QAVV,KAAK,UAAU,MAAM,QAAQ+C,CAAM,IAAIA,IAAS,CAACA,CAAM,GACnDC,MACD,KAAK,aAAaA;EAExB;EAYU,eAAe;AACtB,SAAK,QAAQ,SAAS;EACzB;EAEU,iBAAiB;AACxB,WAAO,KAAK;EACf;EAEU,SAASC,GAAapE,GAAeU,IAAe;AAC3D,UAAM2D,IAAU3D,MAAQ0D,EAAI,KAAK1D,EAAI;AACrC,WAAI2D,KACD,KAAK,UAAUrE,GAAOqE,CAAO,GAGzB,CAAC,CAACA;EACZ;EAEU,UAAUC,GAAgBD,GAAmB;AACpD,SAAK,QAAQ,KAAK,GAAGA,EAAQ,MAAM,CAAC,CAAC;EACxC;AACH;AAEO,IAAME,KAAN,cAAkCN,GAAc;SAAA;;;EAC1C,SAASG,GAAapE,GAAeU,IAAwB;AACpE,WAAO,aAAa,KAAK,OAAOA,EAAI,CAAC,KAAK,MAAM,SAAS0D,GAAKpE,GAAOU,EAAI;EAC5E;EAEU,UAAUV,GAAeqE,GAAmB;AACnD,KAAIrE,IAAQ,KAAKqE,EAAQ,SAAS,MAC/B,MAAM,UAAUrE,GAAOqE,CAAO;EAEpC;AACH;AC5DA,IAAMG,KAAoD;EACvD,QAAQ;EACR,wBAAwB;EACxB,QAAQ,CAAA;EACR,SAAS;AACZ;AAEO,SAASC,MACVC,IACc;AACjB,QAAMC,IAAU,QAAQ,IAAA,GAClBzF,IAA2B,OAAO;IACrC,EAAE,SAAAyF,GAAS,GAAGH,GAAA;IACd,GAAGE,GAAQ,OAAO,CAACE,OAAM,OAAOA,MAAM,YAAYA,EAAC;EAAA;AAGtD,SAAA1F,EAAO,UAAUA,EAAO,WAAWyF,GACnCzF,EAAO,UAAUA,EAAO,YAAY,MAE7BA;AACV;AAbgBuF;ACGT,SAASI,GACbH,IACAI,IAAqB,CAAA,GACZ;AACT,SAAKpB,GAA2BgB,EAAO,IAIhC,OAAO,KAAKA,EAAO,EAAE,OAAO,CAACI,GAAoBpC,OAAgB;AACrE,UAAMqC,IAAQL,GAAQhC,EAAG;AAEzB,QAAIY,EAAWyB,CAAK;AACjBD,QAAS,KAAKC,CAAK;aACX5B,GAAiB4B,GAAO,CAAC,SAAS,CAAC;AAC3CD,QAAS,KAAKpC,KAAM,MAAMqC,CAAK;aACvB,MAAM,QAAQA,CAAK;AAC3B,iBAAWC,MAAKD;AACR5B,WAAiB6B,IAAG,CAAC,UAAU,QAAQ,CAAC,KAC1CF,EAAS,KAAKpC,KAAM,MAAMsC,EAAC;;AAIjCF,QAAS,KAAKpC,EAAG;AAGpB,WAAOoC;EACV,GAAGA,CAAQ,IArBDA;AAsBb;AA3BgBD;AA6BT,SAASI,GACbC,IACAC,IAAmB,GACnBC,IAAa,OACJ;AACT,QAAMC,KAAoB,CAAA;AAE1B,WAASlD,IAAI,GAAGC,KAAM+C,IAAmB,IAAID,GAAK,SAASC,GAAkBhD,IAAIC,IAAKD;AAC/E,oBAAgB,SAAS,OAAO+C,GAAK/C,CAAC,CAAC,KACxCkD,GAAQ,KAAK,OAAOH,GAAK/C,CAAC,CAAC,CAAC;AAIlC,SAAA0C,GAAkBS,GAAwBJ,EAAI,GAAGG,EAAO,GACnDD,KACFC,GAAQ,KAAK,GAAGE,GAAsBL,EAAI,CAAC,GAGvCG;AACV;AAnBgBJ,OAAAA,IAAAA;AAqBhB,SAASM,GAAsBL,IAAkB;AAC9C,QAAMM,IAAsB,OAAOpF,GAAK8E,EAAI,KAAM;AAClD,SAAOrD,GAAckB,EAAW3C,GAAK8E,IAAMM,IAAsB,IAAI,CAAC,GAAGtC,IAAa,CAAA,CAAE,CAAC;AAC5F;AAHSqC;AASF,SAASD,GAAwBJ,IAAkC;AACvE,QAAMM,IAAsB7B,GAAevD,GAAK8E,EAAI,CAAC;AACrD,SAAOnC,EAAW3C,GAAK8E,IAAMM,IAAsB,IAAI,CAAC,GAAG9B,EAAiB;AAC/E;AAHgB4B;AAST,SAASG,EACbP,IACAQ,IAAc,MACyB;AACvC,QAAM7E,IAAWnB,GAAWU,GAAK8E,EAAI,CAAC;AACtC,SAAOQ,KAAe9F,GAAeiB,CAAQ,IAAIA,IAAW;AAC/D;AANgB4E;AC3ET,SAASE,GACbC,IACAC,GACD;AACC,SAAOD,GAAOC,EAAQ,QAAQA,EAAQ,MAAM;AAC/C;AALgBF;AAOT,SAASG,GACbC,IACAC,GACAC,GACAC,KAAO,MACL;AACF,SAAA1E,EAAQyE,CAAK,EAAE,QAAQ,CAACE,MAAS;AAC9B,aAASC,KAAQ9F,GAAmB6F,GAAMD,EAAI,GAAG,IAAI,GAAG9D,IAAMgE,GAAM,QAAQ,IAAIhE,GAAK,KAAK;AACvF,YAAM1B,KAAO,wBAACR,KAAS,MAAM;AAC1B,YAAI,EAAA,IAAIA,MAAUkC;AAGlB,iBAAOgE,GAAM,IAAIlG,EAAM;MAC1B,GALa;AAOb8F,QAAQ,KAAK,CAAC,EAAE,OAAAK,GAAA,MAAYA,GAAM3F,IAAMqF,EAAM,CAAC;IAClD;EACH,CAAC,GAEMA;AACV;AApBgBD,OAAAA,IAAAA;ACHhB,IAAMQ,KAA0C,wBAAC,EAAE,UAAAC,GAAAA,GAAYC,GAAOC,GAAMC,OAAS;AAClF,MAAIH,OAAaI,GAAU,WAAWC,GAAiBJ,CAAK;AACzD,WAAOC,EAAK,OAAO,KAAK,OAAO,CAAC;AAGnCC,EAAAA,GAAKF,CAAK;AACb,GANgD;AAAhD,IAQMK,KAAwC,wBAACC,OACrCA,GAAK,KAAA,MAAW,QADoB;AAIvC,SAASC,GAAgBC,IAAsD;AACnF,UAAQA,IAAA;IACL,KAAK;AACF,aAAOC,GAAA;IACV,KAAK;AACF,aAAOC,GAAA;EAAoB;AAKjC,SAAO;IACJ,UAHc,CAAC,aAAa,uBAAuB;IAInD,QAAQ;IACR,SAAAZ;IAAA,QACAO;EAAA;AAEN;AAhBgBE;AAkBT,SAASG,KAA2C;AAGxD,SAAO;IACJ,UAHc,CAAC,aAAa,WAAW;IAIvC,QAAQ;IACR,SAAAZ;IACA,OAAOa,GAAM;AACV,aAAO,aAAa,KAAKA,EAAK,KAAA,CAAM;IACvC;EAAA;AAEN;AAXgBD;AAaT,SAASD,KAA2C;AAGxD,SAAO;IACJ,UAHc,CAAC,aAAa,sBAAsB;IAIlD,QAAQ;IACR,SAAAX;IAAA,QACAO;EAAA;AAEN;AATgBI;AAWhB,SAASL,GAAiBJ,IAAuB;AAC9C,SAAO,8CAA8C,KAAK,OAAOA,EAAK,CAAC;AAC1E;AAFSI;AC5DF,IAAMQ,KAAN,MAA4C;SAAA;;;EAMhD,YAAYC,GAAiB;AAC1B,SAAK,QAAQ,CAAA,GACb,KAAK,QAAQ,CAAA,GACb,KAAK,UAAU,CAAA,GACf,KAAK,SAASA;EACjB;AACH;AAEA,IAAMC,KAAgB;AAAtB,IACMC,KAAsB;AAD5B,IAEMC,KAAiB;AAEhB,SAASC,GAAmBJ,IAAiBP,GAA4B;AAC7E,QAAMY,IAAU,IAAIN,GAAcC,EAAM,GAClCM,KAASN,KAASE,KAAsBD;AAE9C,SAAAM,GAAmBd,CAAI,EAAE,QAAQ,CAACe,MAAS;AACxC,UAAMC,KAAUD,EAAK,QAAQF,IAAQ,EAAE;AAEvCD,MAAQ,MAAM,KAAKI,EAAO,IACzBN,GAAe,KAAKM,EAAO,IAAIJ,EAAQ,UAAUA,EAAQ,OAAO,KAAKI,EAAO;EAChF,CAAC,GAEMJ;AACV;AAZgBD;AClBT,IAAMM,KAAqB,CAAA;AAS3B,SAASC,GAAcnB,IAAoC;AAC/D,SAAO;IACJ,UAAUkB;IACV,QAAQ;IACR,QAAAlB;EAAA;AAEN;AANgBmB;AAQT,SAASC,GAAuBzB,IAAkC;AACtE,SAAO;IACJ,UAAUuB;IACV,QAAQ;IACR,SAAS;AACN,YAAM,OAAOvB,MAAU,WAAW,IAAI0B,GAAuB1B,EAAK,IAAIA;IACzE;EAAA;AAEN;AARgByB,OAAAA,IAAAA;AAUT,SAASE,EAA0BC,IAAoBC,IAAU,OAA2B;AAChG,SAAO;IACJ,UAAAD;IACA,QAAQ;IACR,OAAOtB,GAAM;AACV,aAAOuB,IAAU,OAAOvB,CAAI,EAAE,KAAA,IAASA;IAC1C;EAAA;AAEN;AARgBqB;AAUT,SAASG,GAA0BF,IAAwC;AAC/E,SAAO;IACJ,UAAAA;IACA,QAAQ;IACR,OAAOG,GAAQ;AACZ,aAAOA;IACV;EAAA;AAEN;AARgBD;AAUT,SAASE,GAAgBC,IAA+C;AAC5E,SAAOA,GAAK,WAAW;AAC1B;AAFgBD;AAIT,SAASE,GAAeD,IAA2C;AACvE,SAAOA,GAAK,WAAW,WAAW,CAACA,GAAK,SAAS;AACpD;AAFgBC;AChDT,IAAMC,KAAgC;AAAtC,IACMC,KAA6B;AADnC,IAEMC,KAA8B;AAKpC,IAAKC,KAAAA,kBAAAA,QACTA,GAAA,UAAU,KACVA,GAAA,QAAQ,KACRA,GAAA,mBAAmB,KACnBA,GAAA,eAAe,KACfA,GAAA,YAAY,KACZA,GAAA,QAAQ,KACRA,GAAA,YAAY,KAPHA,KAAAA,MAAA,CAAA,CAAA;AAgBZ,IAAMC,KAAAA,oBAAqC,IAAI;EAC5C;EACA,GAAGC,GAAc,OAAO,OAAOF,EAAmB,CAAC;AACtD,CAAC;AAEM,SAASG,GAAqBC,IAA0BC,GAAsB;AAClF,QAAM,EAAE,WAAAC,GAAW,SAAAC,IAAS,OAAAC,EAAA,IAAUC,GAAgBL,EAAI;AAE1D,SAAKE,IAIAE,EAAM,WAIXD,GAAQ,KAAK,GAAGF,CAAU,GAEtBE,GAAQ,KAAKG,EAAiB,IACxBvB,GAAuBU,EAA6B,IAGvDc,GAAUL,GAAWC,EAAO,KATzBpB,GAAuBY,KAA8B,KAAK,UAAUK,EAAI,CAAC,IAJzEjB,GAAuBW,EAA0B;AAc9D;AAlBgBK;AAoBT,SAASQ,GAAUP,IAAiBC,GAAgD;AAGxF,SAAO;IACJ,UAHwB,CAAC,SAAS,IAAID,EAAI,IAAI,GAAGC,CAAU;IAI3D,QAAQ;IACR,OAAOrC,IAA4B;AAChC,aAAOW,GAAmByB,OAAS,KAAsBpC,EAAI;IAChE;EAAA;AAEN;AAVgB2C;AAYT,SAASC,GAAoBC,IAA0C;AAC3E,SAAO,MAAM,QAAQA,EAAK,KAAKA,GAAM,MAAM,CAACC,MAASb,GAAkB,IAAIa,CAAI,CAAC;AACnF;AAFgBF;AAIhB,SAASH,GAAgBI,IAAe;AACrC,MAAIP,GACAC,IAAoB,CAAA,GACpBC,KAAQ,EAAE,WAAW,OAAO,SAAS,KAAA;AAEzC,SAAAK,GACI,QAAQ,YAAY,EAAE,EACtB,MAAM,EAAE,EACR,QAAQ,CAACE,MAAS;AACZC,OAAYD,CAAI,KACjBT,IAAYS,GACZP,GAAM,YAAY,QAElBA,GAAM,UAAUA,GAAM,WAAWS,GAAeV,EAAQA,EAAQ,MAAM,IAAI,IAAIQ,CAAI,EAAG;EAE3F,CAAC,GAEG;IACJ,WAAAT;IACA,SAAAC;IACA,OAAAC;EAAA;AAEN;AAtBSC;AAwBT,SAASO,GAAYV,IAA4C;AAC9D,SAAOA,OAAc,OAAsBA,OAAc;AAC5D;AAFSU;AAIT,SAASC,GAAcC,IAAyB;AAC7C,SAAO,YAAY,KAAKA,EAAM,KAAKjB,GAAkB,IAAIiB,GAAO,OAAO,CAAC,CAAC;AAC5E;AAFSD;AAIT,SAASP,GAAkBQ,IAAyB;AACjD,SAAI,UAAU,KAAKA,EAAM,IACfA,GAAO,QAAQ,GAAG,IAAI,IAGzBA,OAAW;AACrB;AANSR;ACnGF,IAAMS,KAAN,MAA8C;SAAA;;;EAA9C,cAAA;AACJ,SAAO,QAAkB,CAAA,GACzB,KAAO,SAA+C,uBAAO,OAAO,IAAI;EAAA;EAIxE,IAAW,MAAoB;AAC5B,WAAK,KAAK,SACP,KAAK,OAAO,KAAK,MAAM,OAAO,CAACC,GAAmBC,MACxC,OAAO,OAAOD,GAAK,KAAK,OAAOC,CAAI,CAAC,GAC3C,CAAA,CAAE,IAGD,KAAK;EACf;EAEO,QAAQA,GAA4B;AACxC,QAAI,EAAEA,KAAQ,KAAK,SAAS;AACzB,YAAMC,IAASC,GAAK,KAAK,KAAK;AAC9B,WAAK,OAAOF,CAAI,IAAIC,IAAS,OAAO,OAAO,KAAK,OAAOA,CAAM,CAAC,IAAI,CAAA,GAElE,KAAK,MAAM,KAAKD,CAAI;IACvB;AAEA,WAAO,KAAK,OAAOA,CAAI;EAC1B;EAEO,SAASA,GAAcG,GAAaC,IAAe;AACvD,UAAMC,IAAS,KAAK,QAAQL,CAAI;AAE3B,WAAO,OAAOK,GAAQF,CAAG,IAEnB,MAAM,QAAQE,EAAOF,CAAG,CAAC,IAChCE,EAAOF,CAAG,EAAe,KAAKC,EAAK,IAEpCC,EAAOF,CAAG,IAAI,CAACE,EAAOF,CAAG,GAAaC,EAAK,IAJ3CC,EAAOF,CAAG,IAAIC,IAOjB,KAAK,OAAO;EACf;AACH;AAEO,SAASE,GAAiB3D,IAA0B;AACxD,QAAM4D,IAAS,IAAIT,GAAA;AAEnB,aAAWU,KAAQC,GAAa9D,EAAI;AACjC4D,MAAO,SAASC,EAAK,MAAM,OAAOA,EAAK,GAAG,GAAGA,EAAK,KAAK;AAG1D,SAAOD;AACV;AARgBD;AAUT,SAASI,GAAgB/D,IAAcwD,GAA8B;AACzE,MAAIC,IAAuB;AAC3B,QAAMC,KAAmB,CAAA,GACnBM,IAAAA,oBAAoC,IAAA;AAE1C,aAAWH,MAAQC,GAAa9D,IAAMwD,CAAG;AAClCK,IAAAA,GAAK,QAAQL,MAIjBE,GAAO,KAAMD,IAAQI,GAAK,KAAM,GAE3BG,EAAO,IAAIH,GAAK,IAAI,KACtBG,EAAO,IAAIH,GAAK,MAAM,CAAA,CAAE,GAG3BG,EAAO,IAAIH,GAAK,IAAI,EAAG,KAAKJ,CAAK;AAGpC,SAAO;IACJ,KAAAD;IACA,OAAO,MAAM,KAAKQ,EAAO,KAAA,CAAM;IAC/B,QAAAA;IACA,OAAAP;IACA,QAAAC;EAAA;AAEN;AA1BgBK;AA4BhB,SAASE,GAAeC,IAA0B;AAC/C,SAAOA,GAAS,QAAQ,YAAY,EAAE;AACzC;AAFSD;AAIT,UAAUH,GAAa9D,IAAcmE,IAA8B,MAAM;AACtE,QAAMC,IAAQpE,GAAK,MAAM,IAAI;AAE7B,WAASqE,KAAI,GAAGC,IAAMF,EAAM,SAAS,GAAGC,KAAIC,KAAO;AAChD,UAAMjB,KAAOY,GAAeG,EAAMC,IAAG,CAAC;AAEtC,QAAIZ,IAAQW,EAAMC,IAAG,GACjBb,IAAMW;AAEV,QAAIV,EAAM,SAAS;CAAI,GAAG;AACvB,YAAM1C,KAAOwD,GAAQd,GAAO;CAAI;AAChCD,UAAMzC,GAAK,CAAC,GACZ0C,IAAQ1C,GAAK,CAAC;IACjB;AAEA,UAAM,EAAE,MAAAsC,IAAM,KAAAG,GAAK,OAAAC,EAAA;EACtB;AACH;AAjBUK;ACjFH,IAAKU,KAAAA,kBAAAA,QACTA,GAAA,SAAS,UACTA,GAAA,SAAS,UACTA,GAAA,QAAQ,SACRA,GAAA,WAAW,YAJFA,KAAAA,MAAA,CAAA,CAAA;AAOZ,SAASC,GACNC,IACAC,GACmB;AACnB,SAAI,OAAOD,MAAU,YAAY,OAAO,OAAOF,IAAgBE,EAAK,IAC1DA,KAEHC;AACV;AARSF,OAAAA,IAAAA;AAUT,SAASG,GACNpB,IACAC,GACAoB,GACAH,IACmB;AACnB,QAAMpD,IAAqB,CAAC,UAAU,KAAKoD,EAAK,EAAE;AAElD,SAAIG,KACDvD,EAAS,KAAK,OAAO,GAGxBA,EAAS,KAAKkC,IAAKC,CAAK,GAEjB;IACJ,UAAAnC;IACA,QAAQ;IACR,OAAOtB,IAAsB;AAC1B,aAAOA;IACV;EAAA;AAEN;AArBS4E;AAuBT,SAASE,GAActB,IAAakB,GAAqD;AACtF,QAAMpD,IAAqB,CAAC,UAAU,UAAU,iBAAiB,aAAakC,EAAG;AAEjF,SAAIkB,KACDpD,EAAS,OAAO,GAAG,GAAG,KAAKoD,CAAK,EAAE,GAG9B;IACJ,UAAApD;IACA,QAAQ;IACR,OAAOtB,IAAM;AACV,aAAO+D,GAAgB/D,IAAMwD,EAAG;IACnC;EAAA;AAEN;AAdSsB;AAgBT,SAASC,GAAeL,IAAuD;AAC5E,QAAMpD,IAAW,CAAC,UAAU,UAAU,iBAAiB,QAAQ;AAE/D,SAAIoD,MACDpD,EAAS,KAAK,KAAKoD,EAAK,EAAE,GAGtB;IACJ,UAAApD;IACA,QAAQ;IACR,OAAOtB,GAAc;AAClB,aAAO2D,GAAiB3D,CAAI;IAC/B;EAAA;AAEN;AAdS+E;AAgBT,SAAAnB,KAAsF;AACnF,SAAO;IACJ,UAA8BJ,IAAaC,MAAkBuB,GAAiB;AAC3E,aAAO,KAAK;QACTJ;UACGpB;UACAC;UACAuB,EAAK,CAAC,MAAM;UACZP;YAAcO,EAAK,CAAC;YAAG;;UAAA;QAAoB;QAE9CC,EAAyB,SAAS;MAAA;IAExC;IAEA,UAA8BzB,IAAakB,GAAwB;AAChE,aAAO,KAAK;QACTI,GAActB,IAAKiB,GAAcC,GAAO,MAAS,CAAC;QAClDO,EAAyB,SAAS;MAAA;IAExC;IAEA,cAAkCD,IAAiB;AAChD,aAAO,KAAK;QACTD,GAAeN,GAAcO,GAAK,CAAC,GAAG,MAAS,CAAC;QAChDC,EAAyB,SAAS;MAAA;IAExC;EAAA;AAEN;AA5BArB;AC9EO,IAAKsB,KAAAA,kBAAAA,QACTA,GAAA,QAAQ,KACRA,GAAA,SAAS,KACTA,GAAA,UAAU,KACVA,GAAA,WAAW,KACXA,GAAA,UAAU,KACVA,GAAA,UAAU,KACVA,GAAA,WAAW,KACXA,GAAA,UAAU,KACVA,GAAA,SAAS,KATAA,KAAAA,MAAA,CAAA,CAAA;AAYZ,IAAMC,KAAiB,IAAI,IAAI,OAAO,OAAOD,EAAc,CAAC;AAErD,SAASE,GAAiBvC,IAAwC;AACtE,SAAOsC,GAAe,IAAItC,EAAuB;AACpD;AAFgBuC;ACdhB,IAAAC;AAYA,IAAMC,KAAoB,CAAC,IAAI;AAA/B,IAEMC,KAAAA,uBAAe,WAAW;AAUhC,IAAMC,KAAN,MAAwC;SAAA;;;EAAxC,cAAA;AACG,SAASH,EAAAA,IAAmB,CAAA;EAAC;EAE7B,GAFSA,KAAAE,IAEP,OAAO,SAAA,IAAY;AAClB,eAAWE,KAAS,KAAKF,EAAK;AAC3B,YAAME;EAEZ;EAEA,OAAOC,GAAe;AACnB,WAAAA,EAAI,UAAU,KAAKH,EAAK,EAAE,KAAK,SAAS,KAAK,GAAGI,EAAcD,GAAK,IAAI,GAAG,GAAG,GACtE;EACV;EAEA,SAASE,GAAiB;AACvB,WAAA,KAAKL,EAAK,EAAE,KAAK,GAAGI,EAAcC,GAAO,IAAI,CAAC,GACvC;EACV;AACH;AAKO,SAASC,MAAoBC,IAAgC;AACjE,SAAO,IAAIN,GAAA,EAAY,MAAM,GAAGM,EAAM;AACzC;AAFgBD;AAIhB,SAASE,GAAUC,IAA0B;AAC1C,QAAMC,IAAAA,oBAAiC,IAAA,GACjCC,IAAiC,CAAA;AAEvC,SAAAC,GAAuBH,IAAM,CAACnD,OAAU;AACrC,UAAM,CAACxC,GAAMU,IAAMqF,CAAO,IAAIvD,GAAM,MAAMwD,EAAI;AAC9CJ,MAAM,IAAI5F,CAAI,IACb6F,EAAQ7F,CAAI,IAAI6F,EAAQ7F,CAAI,KAAK,CAAA,GAAI,KAAK;MACxC,MAAMiG,EAASvF,EAAI;MACnB,MAAAV;MACA,SAAA+F;IAAA,CACF;EACJ,CAAC,GAEM;IACJ,OAAAH;IACA,SAAAC;EAAA;AAEN;AAlBSH;AAoBT,SAAAC,KAAoD;AACjD,SAAO;IACJ,KAAyBO,IAAmC;AACzD,YAAMC,IAAOvB,EAAyB,SAAS,GACzC1C,IAAUkE,GAAmB,SAAS;AAE5C,iBAAWvD,KAAUoC;AAClB,YAAI/C,EAAQ,SAASW,CAAM;AACxB,iBAAO,KAAK;YACT/B,GAAuB,qBAAqB+B,CAAM,qBAAqB;YACvEsD;UAAA;AAKL,aAAOD,MAAe,aACvBA,KAAaV,GAAA,EAAmB,MAAMU,EAAU;AAGnD,YAAMjF,KAAW,CAAC,QAAQ,UAAU,MAAM,eAAe,GAAGiB,GAAS,GAAGgE,EAAU;AAElF,aAAO,KAAK;QACT;UACG,UAAAjF;UACA,QAAQ;UACR,OAAOoF,GAAQ;AACZ,mBAAOX,GAAUW,CAAM;UAC1B;QAAA;QAEHF;MAAA;IAEN;EAAA;AAEN;AAjCAR;ACnEO,IAAKW,KAAAA,kBAAAA,QACTA,GAAA,QAAQ,SACRA,GAAA,OAAO,QACPA,GAAA,OAAO,QACPA,GAAA,QAAQ,SACRA,GAAA,OAAO,QALEA,KAAAA,MAAA,CAAA,CAAA;AAQZ,IAAMC,KAAkB1E,GAAc,OAAO,OAAOyE,EAAS,CAAC;AAMvD,SAASE,GAAUzE,IAAwBC,GAAsB;AACrE,QAAMf,IAAqB,CAAC,OAAO;AACnC,SAAIwF,GAAiB1E,EAAI,KACtBd,EAAS,KAAK,KAAKc,EAAI,EAAE,GAE5Bd,EAAS,KAAK,GAAGe,CAAU,GAEpBhB,EAA0BC,CAAQ;AAC5C;AARgBuF;AAUT,SAASE,GAAa3E,IAA6C;AACvE,MAAI0E,GAAiB1E,EAAI;AACtB,WAAOA;AAGV,UAAQ,OAAOA,IAAA;IACZ,KAAK;IACL,KAAK;AACF,aAAO;EAAA;AAIhB;AAZgB2E;AAchB,SAASD,GAAiB1E,IAA8C;AACrE,SAAO,OAAOA,MAAS,YAAYwE,GAAgB,SAASxE,EAAI;AACnE;AAFS0E;AC7BTE,aAAAA,QAAM,WAAW,IAAI,CAACvD,OAAe,OAAOwD,GAAgBxD,EAAK,IAAIA,GAAM,SAAS,GAAG;AACvFuD,aAAAA,QAAM,WAAW,IAAI,CAACvD,OACf,OAAO,SAASA,EAAK,IACfA,GAAM,SAAS,MAAM,IAExByD,GAAezD,EAAK;AAK9B,SAAS0D,KAAY;AAClB,aAAOH,aAAAA,SAAM,YAAY;AAC5B;AAFSG;AAYT,SAASC,GACNC,IACAC,GACAC,GACqB;AACrB,SAAI,CAACD,KAAU,CAAC,OAAOA,CAAM,EAAE,QAAQ,OAAO,EAAE,IACrCC,IAEH,CAACC,OAAYC,MAAS;AACnBJ,IAAAA,GAAGG,IAAS,GAAGC,CAAI,GACnBF,EAAQC,IAAS,GAAGC,CAAI;EAC3B,IAJAJ,KAOD,CAACG,OAAYC,MAAS;AAC1BJ,IAAAA,GAAG,MAAMG,EAAO,IAAIF,GAAQ,GAAGG,CAAI,GAC/BF,KACDA,EAAQC,IAAS,GAAGC,CAAI;EAE9B;AACH;AApBSL;AAsBT,SAASM,GACNC,IACAC,GACA,EAAE,WAAWC,EAAAA,GACN;AACP,MAAI,OAAOF,MAAS;AACjB,WAAOA;AAEV,QAAMG,KAAkBF,KAAiBA,EAAc,aAAc;AAErE,SAAIE,GAAe,WAAWD,CAAe,IACnCC,GAAe,OAAOD,EAAgB,SAAS,CAAC,IAGnDC,MAAkBD;AAC5B;AAfSH;AAiBF,SAASK,GACbC,IACAC,GACAC,GACAC,KAAehB,GAAAA,GACF;AACb,QAAMiB,IAAeJ,MAAS,IAAIA,EAAK,OAAQ,IAEzCK,KAA0B,CAAA,GAC1BC,IACH,OAAOL,KAAY,WAAWE,GAAa,OAAOF,CAAO,IAAIA,GAC1DzE,IAAMkE,GAAgBa,EAAWN,GAASO,CAAY,GAAGF,GAAeH,EAAY;AAE1F,SAAOM,GAAKP,CAAW;AAEvB,WAASQ,GAAQf,IAAcgB,IAAkB;AAC9C,WAAO9D;MACJwD;MACAN,GAAaC,IAAOxE,EAAI,QAAQ,UAAUmE,EAAI,GAAGgB,IAASR,EAAY;IAAA;EAE5E;AALSO,SAAAA,IAAAA;AAOT,WAASD,GAAKG,IAAgB;AAC3B,UAAMC,KAAcD,MAAS,IAAIA,EAAK,OAAQ,IACxC5B,KAASsB,KAAiBlB,GAAekB,GAAeO,EAAU,KAAMC,IACxEC,KAAO3B,GAAee,IAAc,GAAGC,CAAW,IAAIS,EAAU,IAAI7B,EAAK;AAE/E,WAAO,OAAO,OAAOsB,IAAgBtB,KAAQ+B,IAAM;MAChD,OAAAf;MACA,SAAAU;MACA,MAAAK;MACA,MAAAN;IAAA,CACF;EACJ;AAXSA,SAAAA,IAAAA;AAYZ;AAlCgBV,OAAAA,IAAAA;AC9DT,IAAMiB,KAAN,MAAMA,GAAkB;SAAA;;;EAG5B,YAAoBC,IAAW,eAAe;AAA1B,SAAA,WAAAA,GAFpB,KAAQ,SAAA,oBAAoD,IAAA;EAEb;EAEvC,aAAatH,GAAwB;AAC1C,WAAO,KAAK,OAAO,IAAIA,CAAI;EAC9B;EAEQ,eAAeA,GAAwC;AAC5D,UAAMgG,IAAOqB,GAAkB,QAAQrH,EAAK,SAAS,CAAC,CAAC,GACjDuH,KAASnB,GAAa,KAAK,UAAUJ,CAAI;AAE/C,WAAO;MACJ,MAAAhG;MACA,QAAAuH;MACA,MAAAvB;IAAA;EAEN;EAEA,KAAKhG,GAAwC;AAC1C,UAAMwH,IAAW,KAAK,eAAexH,CAAI;AACzC,WAAAwH,EAAS,OAAO,2CAA2CxH,EAAK,QAAQ,GAExE,KAAK,OAAO,IAAIA,GAAMwH,CAAQ,GAEvBA;EACV;EAEA,MAAMC,GAAe;AAClB,eAAW,CAACzH,GAAM,EAAE,QAAAuH,GAAAA,CAAQ,KAAK,MAAM,KAAK,KAAK,OAAO,QAAA,CAAS;AAC1DvH,YAASyH,EAAI,QACdF,GAAO,KAAK,aAAaE,CAAG,GAC5BF;QACG;MAAA,KAGHA,GAAO;QACJ;QACAE,EAAI;MAAA,GAIV,KAAK,SAASzH,CAAI;AAGrB,QAAI,KAAK,OAAO,SAAS;AACtB,YAAM,IAAI,MAAM,0CAA0C,KAAK,OAAO,IAAI,EAAE;EAElF;EAEA,SAASA,GAAwB;AACb,SAAK,aAAaA,CAAI,KAEpC,KAAK,OAAO,OAAOA,CAAI;EAE7B;EAEA,QAAQA,GAAwC;AAC7C,UAAMwH,IAAW,KAAK,aAAaxH,CAAI;AACvC,QAAI,CAACwH;AACF,YAAM,IAAIE,GAAS,QAAW,uDAAuD;AAExF,WAAAF,EAAS,OAAO,eAAe,GAExBA;EACV;EAEA,OAAO,QAAQxB,IAAO,SAAS;AAC5B,WAAO,QAAQA,CAAI,IAAI,EAAEqB,GAAkB,OAAO;EACrD;AAGH;AADGA,GAAe,UAAU;AAxErB,IAAMM,KAANN;ACMA,IAAMO,KAAN,MAAoD;SAAA;;;EAqBxD,YACWC,GACAC,GACAC,IACT;AAHS,SAAA,YAAAF,GACA,KAAA,aAAAC,GACA,KAAA,WAAAC,IAvBX,KAAQ,SAAuB,QAAQ,QAAA,GACvC,KAAQ,SAAS,IAAIJ,GAAA;EAuBlB;EApBH,IAAW,MAAM;AACd,WAAO,KAAK,QAAQ,KAAK,UAAU;EACtC;EAEA,IAAW,IAAIK,GAAa;AACzB,SAAK,OAAOA;EACf;EAEA,IAAW,MAAM;AACd,WAAO,KAAK,UAAU;EACzB;EAEA,IAAW,gBAAgB;AACxB,WAAO,KAAK,UAAU;EACzB;EAQO,QAAQ;AACZ,WAAO;EACV;EAEO,KAAQhI,GAAoC;AAChD,WAAA,KAAK,OAAO,KAAKA,CAAI,GAEb,KAAK,SAAS,KAAK,OAAO,KAAK,MAAM,KAAK,YAAYA,CAAI,CAAC;EACtE;EAEA,MAAc,YAAeA,GAA2C;AACrE,UAAMiI,IAAqB,MAAM,KAAK,WAAW,KAAA,GAC3CC,KAAkB,6BAAM,KAAK,OAAO,SAASlI,CAAI,GAA/B;AAExB,QAAI;AACD,YAAM,EAAE,QAAAuH,EAAA,IAAW,KAAK,OAAO,QAAQvH,CAAI;AAC3C,aAAQ,OAAOC,GAAYD,CAAI,IAC1B,KAAK,iBAAiBA,GAAMuH,CAAM,IAClC,KAAK,kBAAkBvH,GAAMuH,CAAM;IAC3C,SAASY,GAAG;AACT,YAAM,KAAK,iBAAiBnI,GAAMmI,CAAU;IAC/C,UAAA;AACGD,MAAAA,GAAA,GACAD,EAAA;IACH;EACH;EAEQ,iBAAoBjI,GAAwBmI,GAAU;AAC3D,UAAMC,KACHD,aAAaT,KAAW,OAAO,OAAOS,GAAG,EAAE,MAAAnI,EAAA,CAAM,IAAI,IAAI0H,GAAS1H,GAAMmI,KAAK,OAAOA,CAAC,CAAC;AAEzF,WAAA,KAAK,SAAS,QAAQ,QAAA,GACtB,KAAK,OAAO,MAAMC,EAAQ,GAEnBA;EACV;EAEA,MAAc,kBAAqBpI,GAAuBuH,GAAsB;AAC7E,UAAMc,KAAS,KAAK,SAAS,KAAK,gBAAgB,IAAI,KAAK,YAAYrI,GAAMA,EAAK,QAAQ,CAAC,GACrF8F,IAAO,KAAK,SAAS;MACxB;MACA,CAAC,GAAG9F,EAAK,QAAQ;MACjB,KAAK,YAAYA,GAAMA,EAAK,QAAQ;IAAA,GAGjCsI,KAAM,MAAM,KAAK;MACpBtI;MACAqI;MACAvC;MACA,KAAK;MACLyB,EAAO,KAAK,OAAO;IAAA,GAEhBgB,IAAgB,MAAM,KAAK,eAAevI,GAAM8F,GAAMwC,IAAKf,EAAO,KAAK,QAAQ,CAAC;AAItF,WAFAA,EAAO,6CAA6CvH,EAAK,MAAM,GAE3DD,GAAaC,CAAI,IACXwI,GAAexI,EAAK,QAAQuI,CAAa,IAG5CC,GAAexI,EAAK,QAAQuI,EAAc,UAAA,CAAW;EAC/D;EAEA,MAAc,iBAAiBvI,GAAiBuH,GAAsB;AACnE,WAAAA,EAAO,6DAA6D,GAC7DvH,EAAK,OAAO,IAAI;EAC1B;EAEQ,eACLA,GACA8F,GACA2C,IACAlB,GAC0B;AAC1B,UAAM,EAAE,UAAAzJ,IAAU,WAAA4K,GAAW,QAAA3D,GAAQ,QAAA4D,GAAAA,IAAWF;AAEhD,WAAO,IAAI,QAAQ,CAACzK,IAAMC,OAAS;AAChCsJ,QAAO,4DAA4DzJ,EAAQ;AAE3E,YAAM,EAAE,OAAAC,GAAA,IAAU,KAAK,SAAS;QAC7B;QACA,EAAE,OAAO2K,EAAA;QACT;UACG,GAAG,KAAK,YAAY1I,GAAM8F,CAAI;UAC9B,GAAG2C;QAAA;MACN;AAGH,UAAI1K,MAASiC,EAAK;AACf,eAAAuH,EAAO,KAAK,gDAAgD,GAErDvH,EAAK;UACTyI;UACA1K;UACA,CAAC6K,OAAc;AACZrB,cAAO,KAAK,yCAAyC,GACrDA,EAAO,8BAA8BhC,GAAeqD,EAAS,CAAC,GAE9D5K;cACG,IAAI6K;gBACD,MAAM,QAAQD,EAAS,IAAI,OAAO,OAAOA,EAAS,IAAIA;gBACtD,OAAO,OAAOD,EAAM;cAAA;YACvB;UAEN;UACA1K;QAAA;AAIN,UAAIF;AACD,eAAAwJ,EAAO;UACJ;UACAzJ;UACA6K,GAAO;UACPD;QAAA,GAEIzK,GAAKF,EAAK;AAGpBwJ,QAAO,KAAK,iCAAiC,GAC7CvJ,GAAK,IAAI6K,GAAiB,OAAO,OAAO9D,CAAM,GAAG,OAAO,OAAO4D,EAAM,CAAC,CAAC;IAC1E,CAAC;EACJ;EAEA,MAAc,YACX3I,GACA8I,GACAhD,IACAiD,GACAxB,IAC2B;AAC3B,UAAMyB,IAAezB,GAAO,QAAQ,QAAQ,GACtC0B,IAA6B,KAAK,SAAS;MAC9C;MACA;QACG,KAAK,KAAK;QACV,KAAK,KAAK;QACV,aAAa;MAAA;MAEhB,KAAK,YAAYjJ,GAAMA,EAAK,QAAQ;IAAA;AAGvC,WAAO,IAAI,QAAQ,CAAChC,OAAS;AAC1B,YAAM+G,KAAmB,CAAA,GACnB4D,KAAmB,CAAA;AAEzBpB,MAAAA,GAAO,KAAK,SAASuB,GAAShD,EAAI,GAClCyB,GAAO,MAAM0B,CAAY;AAEzB,UAAIP,KAAY,KAAK,aAAa1I,GAAM8F,EAAI;AAC5C,UAAI4C;AACD,eAAO1K,GAAK;UACT,QAAA+G;UACA,QAAA4D;UACA,UAAU;UACV,WAAAD;QAAA,CACF;AAGJ,WAAK,SAAS,KAAK,gBAAgB,QAAW;QAC3C,GAAG,KAAK,YAAY1I,GAAM8F,EAAI;QAC9B,KAAKoD,IAAQ;AACVR,UAAAA,KAAYQ,MAAUR;QACzB;MAAA,CACF;AAED,YAAMhC,KAAUyC,GAAML,GAAShD,IAAMmD,CAAY;AAEjDvC,MAAAA,GAAQ,OAAQ;QACb;QACA0C,GAAerE,IAAQ,UAAUwC,IAAQyB,EAAa,KAAK,QAAQ,CAAC;MAAA,GAEvEtC,GAAQ,OAAQ;QACb;QACA0C,GAAeT,IAAQ,UAAUpB,IAAQyB,EAAa,KAAK,QAAQ,CAAC;MAAA,GAGvEtC,GAAQ,GAAG,SAAS2C,GAAgBV,IAAQpB,EAAM,CAAC,GAE/CwB,MACDxB,GAAO,6DAA6D,GACpEwB,EAAcD,GAASpC,GAAQ,QAASA,GAAQ,QAAS,CAAC,GAAGZ,EAAI,CAAC,IAGrE,KAAK,SAAS,KAAK,eAAe,QAAW;QAC1C,GAAG,KAAK,YAAY9F,GAAM8F,EAAI;QAC9B,SAAAY;QACA,MAAM5I,IAAkBoL,IAAgB;AACrClL,UAAAA,GAAK;YACF,QAAA+G;YACA,QAAA4D;YACA,UAAA7K;YACA,WAAW4K,MAAaQ;UAAA,CAC1B;QACJ;QACA,KAAKA,IAAe;AACbxC,UAAAA,GAAQ,WAIZgC,KAAYQ,IACZxC,GAAQ,KAAK,QAAQ;QACxB;MAAA,CACF;IACJ,CAAC;EACJ;EAEQ,aAAgB1G,GAAwB8F,GAAgB;AAC7D,QAAI4C;AACJ,WAAA,KAAK,SAAS,KAAK,gBAAgB,QAAW;MAC3C,GAAG,KAAK,YAAY1I,GAAM8F,CAAI;MAC9B,KAAKoD,GAAQ;AACVR,QAAAA,KAAYQ,KAAUR;MACzB;IAAA,CACF,GAEMA;EACV;EAEQ,YAAe1I,GAAwBL,GAAgD;AAC5F,WAAO;MACJ,QAAQ,OAAO2J,GAAMtJ,EAAK,QAAQ,KAAK,EAAE;MACzC,UAAAL;MACA,KAAK,EAAE,GAAG,KAAK,IAAA;MACf,OAAOM,GAAYD,CAAI,IAAI,SAAYA,EAAK;IAAA;EAElD;AACH;AAEA,SAASqJ,GAAgBE,IAAkBhC,GAAsB;AAC9D,SAAO,CAACE,MAAe;AACpBF,MAAO,sCAAsCE,CAAG,GAChD8B,GAAO,KAAK,OAAO,KAAK,OAAO9B,EAAI,KAAK,GAAG,OAAO,CAAC;EACtD;AACH;AALS4B;AAOT,SAASD,GACNG,IACAvD,GACAuB,GACAiC,IACD;AACC,SAAO,CAAC1J,MAAmB;AACxByH,MAAO,wBAAwBvB,GAAMlG,CAAM,GAC3C0J,GAAO,MAAM1J,CAAM,GACnByJ,GAAO,KAAKzJ,CAAM;EACrB;AACH;AAXSsJ;ACpRF,IAAMK,KAAN,MAA+C;SAAA;;;EAMnD,YACUzB,GACCF,GACAC,IACT;AAHQ,SAAA,MAAAC,GACC,KAAA,aAAAF,GACA,KAAA,WAAAC,IAER,KAAK,SAAS,KAAK,MAAA;EACtB;EAEA,QAA2B;AACxB,WAAO,IAAIH,GAAiB,MAAM,KAAK,YAAY,KAAK,QAAQ;EACnE;EAEA,KAAQ5H,GAAoC;AACzC,WAAO,KAAK,OAAO,KAAKA,CAAI;EAC/B;AACH;ACrBO,SAAS0J,GACb1J,IACA2J,GACAC,IAAqCzC,IACtC;AACC,QAAM0C,KAAY,wBAACC,OAAY;AAC5BF,MAAS,MAAME,EAAI;EACtB,GAFkB,MAIZjM,IAAU,wBAAC4J,OAAqC;AAC/CA,IAAAA,IAAK,SAASzH,MACf4J,EAASnC,IAAK,MAAgB;EAEpC,GAJgB;AAMhBkC,IAAS,KAAKE,IAAWhM,CAAO;AACnC;AAhBgB6L;ACDT,SAASK,GAA2BC,IAAmBC,GAA0B;AACrF,SAAO1K,GAAc,CAAC2K,MAAgC;AACnD,QAAI,CAACC,GAAaH,EAAS;AACxB,YAAM,IAAI,MAAM,4CAA4CA,EAAS,GAAG;AAG3E,YAASC,KAAQC,GAAU,MAAMF;EACpC,CAAC;AACJ;AARgBD;ACChB,SAASK,GAAatE,IAAgB;AACnC,QAAMnG,IAAW,CAAC,YAAY,GAAGmG,EAAI;AACrC,SAAInG,EAAS,CAAC,MAAM,QAAQA,EAAS,SAAS,IAAI,MAC/CA,EAAS,CAAC,IAAI0K,GAAO1K,GAAU,IAAI,IAG/BD,EAA0BC,CAAQ;AAC5C;AAPSyK,OAAAA,IAAAA;AAST,SAAAE,KAAmG;AAChG,SAAO;IACJ,WAA6B;AAC1B,aAAO,KAAK;QACTF,GAAatF,GAAmB,WAAW,CAAC,CAAC;QAC7CxB,EAAyB,SAAS;MAAA;IAExC;IAEA,eAAmCiH,IAAYC,GAAY;AACxD,aAAO,KAAK;QACTJ,GAAa,CAAC,MAAMG,IAAYC,GAAY,GAAG1F,GAAmB,SAAS,CAAC,CAAC;QAC7ExB,EAAyB,SAAS;MAAA;IAExC;IAEA,oBAAwCiH,IAAY;AACjD,aAAO,KAAK;QACTH,GAAa,CAAC,MAAMG,IAAY,GAAGzF,GAAmB,SAAS,CAAC,CAAC;QACjExB,EAAyB,SAAS;MAAA;IAExC;EAAA;AAEN;AAvBAgH;ACiCO,IAAMG,KAA8B,wBAACC,IAAMV,GAAWtJ,MAAe;AACzE,QAAMf,KAAW,CAAC,SAAS,GAAGe,CAAU;AAExC,SAAAmG,EAAa6D,EAAI,KAAK/K,GAAS,KAAKgL,EAASD,EAAI,CAAC,GAClD7D,EAAamD,CAAS,KAAKrK,GAAS,KAAKgL,EAASX,CAAS,CAAC,GAErDtK,EAA0BC,EAAQ;AAC5C,GAP2C;AAApC,IASMiL,KAAoC,wBAACF,IAAMV,GAAWtJ,OAChEwC,GAAOxC,GAAY,UAAU,GAEtB+J,GAAUC,IAAMV,GAAWtJ,CAAU,IAHE;AAMjD,SAASmK,GACNC,IACA9K,GACA+K,MACGjF,IACJ;AACC,SAAKe,EAAakE,CAAQ,IAInB/K,EAAK+K,GAAUnE,EAAWd,GAAK,CAAC,GAAGe,CAAY,GAAG/B,GAAmB,SAAS,CAAC,IAH5EtF,GAAuB,OAAOsL,EAAG,iCAAiC;AAI/E;AAXSD;AAaT,SAAAG,KAAgE;AAC7D,SAAO;IACJ,MAA0BN,OAA2BrH,GAAiB;AACnE,aAAO,KAAK;QACTwH,GAAgB,SAASJ,IAAW7D,EAAW8D,IAAM7D,CAAY,GAAG,GAAGxD,CAAI;QAC3EC,EAAyB,SAAS;MAAA;IAExC;IACA,OAA2BoH,OAA2BrH,GAAiB;AACpE,aAAO,KAAK;QACTwH,GAAgB,UAAUD,IAAiBhE,EAAW8D,IAAM7D,CAAY,GAAG,GAAGxD,CAAI;QAClFC,EAAyB,SAAS;MAAA;IAExC;EAAA;AAEN;AAfA0H;ACxEA,IAAMC,KAAsC;EACzC,IAAIC,GAAW,qCAAqC,CAACzC,IAAQ,CAAC0C,GAAQlB,GAAMmB,EAAM,MAAM;AACrF3C,IAAAA,GAAO,SAAS0C,GAChB1C,GAAO,SAAS2C,IAChB3C,GAAO,OAAO,CAAC,CAACwB;EACnB,CAAC;EACD,IAAIiB,GAAW,qBAAqB,CAACzC,IAAQ,CAAC4C,CAAM,MAAM;AACvD,UAAMC,IAAQD,EAAO,MAAM,GAAG,GACxBE,KAAQD,EAAM,IAAA;AAEhB,KAACC,MAAS,CAACA,GAAM,SAAS,GAAG,MAIjC9C,GAAO,SAAS;MACb,OAAO8C,GAAM,OAAO,GAAGA,GAAM,SAAS,CAAC;MACvC,MAAMD,EAAM,KAAK,GAAG,EAAE,KAAA;IAAK;EAEjC,CAAC;EACD,IAAIJ;IACD;IACA,CAACzC,IAAQ,CAAC+C,GAASC,GAAYC,EAAS,MAAM;AAC3CjD,MAAAA,GAAO,QAAQ,UAAU,SAAS+C,GAAS,EAAE,KAAK,GAClD/C,GAAO,QAAQ,aAAa,SAASgD,GAAY,EAAE,KAAK,GACxDhD,GAAO,QAAQ,YAAY,SAASiD,IAAW,EAAE,KAAK;IACzD;EAAA;EAEH,IAAIR;IACD;IACA,CAACzC,IAAQ,CAAC+C,GAAS/I,GAAOkJ,EAAS,MAAM;AACtClD,MAAAA,GAAO,QAAQ,UAAU,SAAS+C,GAAS,EAAE,KAAK;AAClD,YAAMI,IAAQ,SAASnJ,GAAO,EAAE,KAAK;AACjCkJ,MAAAA,OAAc,MACflD,GAAO,QAAQ,YAAYmD,IACnBD,OAAc,QACtBlD,GAAO,QAAQ,aAAamD;IAElC;EAAA;AAEN;AAEO,SAASC,GAAkB9G,IAA8B;AAY7D,SAAO+G,GAXsB;IAC1B,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;MACN,SAAS;MACT,YAAY;MACZ,WAAW;IAAA;EACd,GAEgCb,IAASlG,EAAM;AACrD;AAbgB8G;AC5BT,SAASE,GACblG,IACAmG,GACAtL,GACyB;AAUzB,SAAO;IACJ,UAVwB;MACxB;MACA;MACA;MACA,GAAGsD,EAAc6B,IAAS,IAAI;MAC9B,GAAGmG;MACH,GAAGtL;IAAA;IAKH,QAAQ;IACR,QAAQmL;EAAA;AAEd;AAnBgBE;AAqBhB,SAAAX,KAAsD;AACnD,SAAO;IACJ,OAA2BvF,MAA+BxC,GAAiB;AACxE,YAAM4I,KAAO3I,EAAyB,SAAS,GACzCtD,IACHkM,GAA2BrG,CAAO,KAClCkG;QACGI,EAAQtG,CAAO;QACfsG,EAAQvF,EAAWvD,EAAK,CAAC,GAAG+I,IAA2B,CAAA,CAAE,CAAC;QAC1D;UACG,GAAG7L,GAAcqG,EAAWvD,EAAK,CAAC,GAAGgJ,IAAa,CAAA,CAAE,CAAC;UACrD,GAAGvH,GAAmB,WAAW,GAAG,IAAI;QAAA;MAC3C;AAGN,aAAO,KAAK,SAAS9E,GAAMiM,EAAI;IAClC;EAAA;AAGH,WAASC,GAA2BrG,GAAmB;AACpD,WACG,CAACuG,GAA0BvG,CAAO,KAClCrG;MACG;IAAA;EAGT;AAPS0M,SAAAA,IAAAA;AAQZ;AA3BAd;ACtBA,SAASkB,KAA2C;AACjD,SAAO;IACJ,OAAO;IACP,SAAS;IACT,QAAQ;IACR,OAAO;IACP,eAAe;IACf,MAAM;IACN,aAAa;IACb,UAAU;EAAA;AAEhB;AAXSA;AAaT,IAAMlO,KAAyC,IAAI8M;EAChD;EACA,CAACzC,IAAQ,CAAC5G,GAAKC,CAAK,MAAM;AACvB,UAAMyK,KAAWC,GAAY3K,CAAG;AAC5B,WAAO,OAAO4G,IAAQ8D,EAAQ,MAC/B9D,GAAO8D,EAA+B,IAAI5H,EAAS7C,CAAK;EAE9D;AACH;AAEA,SAAA2K,KAA4D;AACzD,SAAO;IACJ,eAAiC;AAC9B,aAAO,KAAK,SAAS;QAClB,UAAU,CAAC,iBAAiB,WAAW;QACvC,QAAQ;QACR,OAAO1H,IAAgB;AACpB,iBAAO+G,GAAoBQ,GAAA,GAAwB,CAAClO,EAAM,GAAG2G,EAAM;QACtE;MAAA,CACF;IACJ;EAAA;AAEN;AAZA0H;ACjCA,SAAAC,KAA2D;AACxD,SAAO;IACJ,cAAkD;AAC/C,aAAO,KAAK;QACThN,EAA0B,CAAC,YAAY,mBAAmB,MAAM,GAAG,IAAI;QACvE4D,EAAyB,SAAS;MAAA;IAExC;EAAA;AAEN;AATAoJ;ACCO,SAASC,GAAepK,IAAkBqK,GAAoC;AAClF,QAAMjN,IAAW,CAAC,eAAe4C,EAAQ;AACzC,SAAIqK,KACDjN,EAAS,KAAK,IAAI,GAGdD,EAA0BC,GAAU,IAAI;AAClD;AAPgBgN;ACJT,IAAME,KAAN,MAAwC;SAAA;;;EAC5C,YACmBC,GACApO,GACAqO,IACAC,GACjB;AAJiB,SAAA,OAAAF,GACA,KAAA,OAAApO,GACA,KAAA,WAAAqO,IACA,KAAA,SAAAC;EAChB;AACN;AAEA,IAAMC,KAAoB;AAA1B,IACMC,KAAsB;AAErB,SAASC,GAAUL,IAAepO,GAAcL,GAAc;AAClE,QAAMsL,KAAW,OAAOtL,CAAI,EAAE,KAAA;AAC9B,MAAIoK;AAEJ,MAAKA,IAASwE,GAAkB,KAAKtD,EAAQ;AAC1C,WAAO,IAAIkD,GAAYC,IAAMpO,GAAM,OAAO+J,EAAO,CAAC,CAAC;AAGtD,MAAKA,IAASyE,GAAoB,KAAKvD,EAAQ;AAC5C,WAAO,IAAIkD,GAAYC,IAAMpO,GAAM,MAAM+J,EAAO,CAAC,CAAC;AAGrD,MAAIuE,KAAS;AACb,QAAMI,IAASzD,GAAS,MAAM,GAAG;AACjC,SAAOyD,EAAO;AAEX,QADcA,EAAO,MAAA,MACP,MAAM;AACjBJ,MAAAA,KAASI,EAAO,KAAK,GAAG;AACxB;IACH;AAGH,SAAO,IAAIP,GAAYC,IAAMpO,GAAM,OAAO,KAAKiL,EAAQ,GAAGqD,EAAM;AACnE;AAvBgBG;ACVhB,IAAME,KAAc;AAEpB,SAASC,GAAexE,IAAmB;AACxC,SAAOA,GAAQ,SAASuE,EAAW;AACtC;AAFSC;AAIF,SAASC,GAAST,KAAO,OAAOpO,GAAcgC,GAA8C;AAChG,QAAMf,KAAW,CAAC,QAAQ,GAAGe,CAAU;AACvC,SAAIoM,MAAQ,CAACQ,GAAe3N,EAAQ,KACjCA,GAAS,OAAO,GAAG,GAAG0N,EAAW,GAG7B;IACJ,UAAA1N;IACA,QAAQ;IACR,OAAOtB,GAA0B;AAC9B,aAAO8O,GAAUxN,GAAS,SAAS,QAAQ,GAAGjB,GAAML,CAAI;IAC3D;EAAA;AAEN;AAbgBkP;ACEhB,SAASC,GACNtM,IAC+C;AAC/C,SAAIA,OAAU,SACJ1B,GAAuB,gDAAgD,IAG1E;IACJ,QAAQ;IACR,OAAOuF,GAAQ;AACZ,aAAO,OAAO;QACXP,GAAuBO,GAAQ,CAAC3F,MAAS;AACtC,gBAAMqO,KAAQrO,EAAK,QAAQ,GAAG;AAC9B,iBAAO;YACJoN,GAAYpN,EAAK,UAAU,GAAGqO,EAAK,EAAE,YAAA,CAAa;YAClDrO,EAAK,UAAUqO,KAAQ,CAAC,EAAE,KAAA;UAAK;QAErC,CAAC;MAAA;IAEP;IACA,UAAU,CAAC,sBAAsB,SAAS;IAC1C,OAAAvM;EAAA;AAEN;AAvBSsM;AAyBT,SAAAE,KAAiE;AAC9D,SAAO;IACJ,kBAAsCxM,IAAO;AAC1C,aAAO,KAAK;QACTsM,GAAsB5G,EAAW1F,IAAOyM,EAAoB,CAAC;QAC7DrK,EAAyB,SAAS;MAAA;IAExC;EAAA;AAEN;AATAoK;ACrCO,IAAKE,KAAAA,kBAAAA,QACTA,GAAA,OAAO,IACPA,GAAA,OAAO,UACPA,GAAA,WAAW,aACXA,GAAA,YAAY,eACZA,GAAA,cAAc,iBALLA,KAAAA,MAAA,CAAA,CAAA;AAQZ,IAAMC,KAAiB;AAEhB,SAASC,GAAqBpN,IAAsB;AACxD,WAASgC,IAAI,GAAGA,IAAIhC,GAAW,QAAQgC,KAAK;AACzC,UAAMqL,IAASF,GAAe,KAAKnN,GAAWgC,CAAC,CAAC;AAChD,QAAIqL;AACD,aAAO,KAAKA,EAAO,CAAC,CAAC;EAE3B;AAEA,SAAO;AACV;AATgBD;AAWT,SAASE,GAAYC,IAA6B;AACtD,SAAOJ,GAAe,KAAKI,EAAmB;AACjD;AAFgBD;AChBT,IAAME,KAAN,MAAwC;SAAA;;;EAAxC,cAAA;AACJ,SAAA,UAAU,GACV,KAAA,YAAY,GACZ,KAAA,aAAa,GAEb,KAAA,QAA0D,CAAA;EAAC;AAC9D;ACLA,IAAMC,KAAa;EAChB,IAAIjD;IACD;IACA,CAACzC,IAAQ,CAAC/G,GAAM8J,GAAS4C,KAAc,EAAE,MAAM;AAC5C3F,MAAAA,GAAO,MAAM,KAAK;QACf,MAAM/G,EAAK,KAAA;QACX,SAASiD,EAAS6G,CAAO;QACzB,YAAY4C,GAAY,QAAQ,SAAS,EAAE,EAAE;QAC7C,WAAWA,GAAY,QAAQ,SAAS,EAAE,EAAE;QAC5C,QAAQ;MAAA,CACV;IACJ;EAAA;EAEH,IAAIlD;IACD;IACA,CAACzC,IAAQ,CAAC/G,GAAM2M,GAAQC,EAAK,MAAM;AAChC7F,MAAAA,GAAO,MAAM,KAAK;QACf,MAAM/G,EAAK,KAAA;QACX,QAAQiD,EAAS0J,CAAM;QACvB,OAAO1J,EAAS2J,EAAK;QACrB,QAAQ;MAAA,CACV;IACJ;EAAA;EAEH,IAAIpD,GAAuB,wBAAwB,CAACzC,IAAQ,CAAC/G,CAAI,MAAM;AACpE+G,IAAAA,GAAO,MAAM,KAAK;MACf,MAAM/G,EAAK,KAAA;MACX,QAAQ;MACR,OAAO;MACP,QAAQ;IAAA,CACV;EACJ,CAAC;EACD,IAAIwJ;IACD;IACA,CAACzC,IAAQ,CAAC8F,GAAStP,CAAO,MAAM;AAC7B,YAAMuP,KAAW,UAAU,KAAKvP,CAAO,GACjCwP,IAAU,UAAU,KAAKxP,CAAO;AAEtCwJ,MAAAA,GAAO,UAAU9D,EAAS4J,CAAO,GACjC9F,GAAO,aAAa9D,EAAS6J,KAAW,CAAC,CAAC,GAC1C/F,GAAO,YAAY9D,EAAS8J,IAAU,CAAC,CAAC;IAC3C;EAAA;AAEN;AA3CA,IA6CMC,KAAgB;EACnB,IAAIxD;IACD;IACA,CAACzC,IAAQ,CAACkG,GAAeC,GAAelN,EAAI,MAAM;AAC/C,YAAM+J,IAAa9G,EAASgK,CAAa,GACnCjD,KAAY/G,EAASiK,CAAa;AAExCnG,MAAAA,GAAO,WACPA,GAAO,cAAcgD,GACrBhD,GAAO,aAAaiD,IAEpBjD,GAAO,MAAM,KAAK;QACf,MAAA/G;QACA,SAAS+J,IAAaC;QACtB,YAAAD;QACA,WAAAC;QACA,QAAQ;MAAA,CACV;IACJ;EAAA;EAEH,IAAIR,GAAuB,eAAe,CAACzC,IAAQ,CAAC/G,CAAI,MAAM;AAC3D+G,IAAAA,GAAO,WAEPA,GAAO,MAAM,KAAK;MACf,MAAA/G;MACA,OAAO;MACP,QAAQ;MACR,QAAQ;IAAA,CACV;EACJ,CAAC;AACJ;AA3EA,IA6EMmN,KAAiB;EACpB,IAAI3D,GAAuB,SAAS,CAACzC,IAAQ,CAAC/G,CAAI,MAAM;AACrD+G,IAAAA,GAAO,WACPA,GAAO,MAAM,KAAK;MACf,MAAA/G;MACA,SAAS;MACT,YAAY;MACZ,WAAW;MACX,QAAQ;IAAA,CACV;EACJ,CAAC;AACJ;AAxFA,IA0FMoN,KAAmB;EACtB,IAAI5D;IACD;IACA,CAACzC,IAAQ,CAACsG,GAAQC,GAAYC,IAAMC,GAAKxJ,EAAE,MAAM;AAC9C+C,MAAAA,GAAO,WACPA,GAAO,MAAM,KAAK;QACf,MAAM/C,MAAMuJ;QACZ,SAAS;QACT,YAAY;QACZ,WAAW;QACX,QAAQ;QACR,QAAQE,GAAO1L,GAAiBsL,CAAM,KAAKA,CAAM;QACjD,MAAMI,GAAO,CAAC,CAACzJ,MAAMuJ,OAASvJ,MAAMuJ,EAAI;QACxC,YAAYtK,EAASqK,CAAU;MAAA,CACjC;IACJ;EAAA;AAEN;AA3GA,IA6GMI,KAAkE;EACrE,CAACxB,GAAU,IAAI,GAAGO;EAClB,CAACP,GAAU,IAAI,GAAGO;EAClB,CAACP,GAAU,QAAQ,GAAGc;EACtB,CAACd,GAAU,WAAW,GAAGkB;EACzB,CAAClB,GAAU,SAAS,GAAGiB;AAC1B;AAEO,SAASQ,GAActB,KAASH,GAAU,MAAM;AACpD,QAAMxP,IAASgR,GAAmBrB,EAAM;AAExC,SAAO,CAAChJ,MAAmB+G,GAAoB,IAAIoC,GAAAA,GAAe9P,GAAQ2G,GAAQ,KAAK;AAC1F;AAJgBsK;ACtHT,IAAMC,KAAiB;AAAvB,IAEMC,MAAkB;AAFxB,IAIMC,MAAW;AAJjB,IAMDC,KAAoB,CAAC,QAAQ,QAAQ,WAAW,QAAQ,eAAe,cAAc;AAE3F,SAASC,GAAYtC,IAAkBuC,GAAuB;AAC3D,SAAOA,EAAO;IACX,CAACvQ,GAAMwQ,IAAOnC,OACXrO,EAAKwQ,EAAK,IAAIxC,GAAOK,CAAK,KAAK,IACxBrO;IAEV,uBAAO,OAAO,EAAE,MAAM,KAAA,CAAM;EAAA;AAElC;AARSsQ;AAUF,SAASG,GACbC,KAAWN,KACXG,IAASF,IACTM,IAAYnC,GAAU,MACvB;AACC,QAAMoC,KAAkBX,GAAcU,CAAS;AAE/C,SAAO,SAAUhL,GAA8B;AAC5C,UAAMtD,KAAsCtC;MACzC4F,EAAO,KAAA;MACP;MACAuK;IAAA,EACD,IAAI,SAAUpN,GAAM;AACnB,YAAM+N,IAAa/N,EAAK,MAAMqN,GAAe,GACvCW,KAA+BR,GAAYO,EAAW,CAAC,EAAE,MAAMH,EAAQ,GAAGH,CAAM;AAEtF,aAAIM,EAAW,SAAS,KAAKA,EAAW,CAAC,EAAE,KAAA,MACxCC,GAAY,OAAOF,GAAgBC,EAAW,CAAC,CAAC,IAG5CC;IACV,CAAC;AAED,WAAO;MACJ,KAAAzO;MACA,QAASA,GAAI,UAAUA,GAAI,CAAC,KAAM;MAClC,OAAOA,GAAI;IAAA;EAEjB;AACH;AA7BgBoO;ACjBT,SAASM,GAAgBzP,IAA0D;AACvF,MAAIqP,IAAYjC,GAAqBpN,EAAU;AAE/C,QAAMf,IAAW,CAAC,MAAM;AAExB,SAAIoQ,MAAcnC,GAAU,SACzBmC,IAAYnC,GAAU,MACtBjO,EAAS,KAAK,aAAa,IAG9BA,EAAS,KAAK,GAAGe,EAAU,GAGxB0P,GAAwBzQ,CAAQ,KAAK;IAClC,UAAAA;IACA,QAAQ;IACR,QAAQ0P,GAAcU,CAAS;EAAA;AAGxC;AAnBgBI;AAqBT,SAASC,GAAwB1P,IAAyC;AAC9E,QAAM2P,IAAQ3P,GAAW,OAAOsN,EAAW;AAE3C,MAAIqC,EAAM,SAAS;AAChB,WAAO7Q;MACJ,sDAAsD6Q,EAAM,KAAK,GAAG,CAAC;IAAA;AAI3E,MAAIA,EAAM,UAAU3P,GAAW,SAAS,IAAI;AACzC,WAAOlB;MACJ,gBAAgB6Q,CAAK;IAAA;AAG9B;AAdgBD;ACFhB,IAAKE,KAAAA,kBAAAA,QACFA,GAAAA,GAAA,UAAA,IAAA,CAAA,IAAA,YACAA,GAAAA,GAAA,WAAA,IAAA,CAAA,IAAA,aACAA,GAAAA,GAAA,WAAA,CAAA,IAAA,YACAA,GAAAA,GAAA,IAAA,CAAA,IAAA,KACAA,GAAAA,GAAA,OAAA,CAAA,IAAA,QACAA,GAAAA,GAAA,SAAA,CAAA,IAAA,UACAA,GAAAA,GAAA,OAAA,CAAA,IAAA,QACAA,GAAAA,GAAA,KAAA,CAAA,IAAA,MACAA,GAAAA,GAAA,WAAA,CAAA,IAAA,YACAA,GAAAA,GAAA,YAAA,CAAA,IAAA,aACAA,GAAAA,GAAA,UAAA,EAAA,IAAA,WACAA,GAAAA,GAAA,YAAA,EAAA,IAAA,aACAA,GAAAA,GAAA,aAAA,EAAA,IAAA,cAbEA,KAAAA,MAAA,CAAA,CAAA;AA6CL,SAASC,GACNxC,IACA+B,GACmB;AACnB,QAAMH,IAAmB,CAAA,GACnBa,KAAsB,CAAA;AAE5B,SAAA,OAAO,KAAKzC,EAAM,EAAE,QAAQ,CAAC6B,MAAU;AACpCD,MAAO,KAAKC,CAAK,GACjBY,GAAU,KAAK,OAAOzC,GAAO6B,CAAK,CAAC,CAAC;EACvC,CAAC,GAEM,CAACD,GAAQa,GAAU,KAAKV,CAAQ,CAAC;AAC3C;AAbSS;AAeT,SAASE,GAA+BvP,IAAmB;AACxD,SAAO,OAAO,KAAKA,EAAK,EAAE,OAAO,CAACwP,GAAK7O,OAC9BA,KAAOyO,OACVI,EAAI7O,CAAG,IAAIX,GAAMW,CAAG,IAEhB6O,IACP,CAAA,CAAa;AACnB;AAPSD;AASF,SAASE,IACbC,KAA+B,CAAA,GAC/BlQ,IAAuB,CAAA,GACN;AACjB,QAAMoP,IAAWlJ,EAAWgK,GAAI,UAAU/J,GAAc2I,GAAQ,GAC1DzB,KAAS8C,GAAkBD,GAAI,MAAM,IACtCA,GAAI,SACJ;IACG,MAAM;IACN,MAAMA,GAAI,eAAe,QAAQ,QAAQ;IACzC,SAAS;IACT,MAAM;IACN,MAAMA,GAAI,YAAY,OAAO;IAC7B,aAAaA,GAAI,YAAY,QAAQ,QAAQ;IAC7C,cAAcA,GAAI,YAAY,QAAQ,QAAQ;EAAA,GAGhD,CAACjB,GAAQa,EAAS,IAAID,GAAaxC,IAAQ+B,CAAQ,GAEnDgB,IAAmB,CAAA,GACnBhI,IAAoB;IACvB,mBAAmBwG,EAAc,GAAGkB,EAAS,GAAGjB,GAAe;IAC/D,GAAG7O;EAAA,GAGAqQ,KAAgCH,GAAY,KAAMA,GAAY,WAAW,KAAKA,GAAI;AAKxF,MAJIG,MACDjI,EAAQ,KAAK,eAAeiI,EAAQ,EAAE,GAGrCH,GAAI,QAAQA,GAAI,IAAI;AACrB,UAAMI,KAAgBJ,GAAI,cAAc,QAAQ,QAAQ;AACxDE,MAAO,KAAK,GAAGF,GAAI,QAAQ,EAAE,GAAGI,EAAa,GAAGJ,GAAI,MAAM,EAAE,EAAE;EACjE;AAEA,SAAI/J,EAAa+J,GAAI,IAAI,KACtB9H,EAAQ,KAAK,YAAY6B,EAASiG,GAAI,IAAI,CAAC,GAG9CK,GAAkBR,GAAYG,EAAc,GAAG9H,CAAO,GAE/C;IACJ,QAAA6G;IACA,UAAAG;IACA,UAAU,CAAC,GAAGhH,GAAS,GAAGgI,CAAM;EAAA;AAEtC;AA9CgBH,OAAAA,KAAAA;AAgDT,SAASO,GACbpB,IACAH,GACAjP,GACyB;AACzB,QAAMtC,KAASyR,GAA2BC,IAAUH,GAAQ7B,GAAqBpN,CAAU,CAAC;AAE5F,SAAO;IACJ,UAAU,CAAC,OAAO,GAAGA,CAAU;IAC/B,QAAQ;IACR,QAAAtC;EAAA;AAEN;AAZgB8S;AAchB,SAAAC,KAAmD;AAChD,SAAO;IACJ,OAA8C9N,GAAiB;AAC5D,YAAM4I,KAAO3I,EAAyB,SAAS,GACzC1C,IAAU+P;QACbS,GAAwB,SAAS;QACjC7Q,GAAcqG,EAAW,UAAU,CAAC,GAAGyF,IAAa,CAAA,CAAE,CAAC;MAAA,GAEpDrM,KACHkM,EAA2B,GAAG7I,CAAI,KAClC+M,GAAwBxP,EAAQ,QAAQ,KACxCyQ,GAAczQ,CAAO;AAExB,aAAO,KAAK,SAASZ,IAAMiM,EAAI;IAClC;EAAA;AAGH,WAASoF,GAAczQ,GAA2B;AAC/C,WAAOsQ,GAAQtQ,EAAQ,UAAUA,EAAQ,QAAQA,EAAQ,QAAQ;EACpE;AAFSyQ,SAAAA,IAAAA;AAIT,WAASnF,EAA2B+C,GAAgBvJ,IAAc;AAC/D,WACGmB,EAAaoI,CAAI,KACjBpI,EAAanB,EAAE,KACflG;MACG;IAAA;EAGT;AARS0M;AASZ;AA9BAiF;ACrJO,IAAMG,KAAN,MAAoD;SAAA;;;EACxD,YACmBpI,GACAxH,IAAsB,MACtB6P,IACjB;AAHiB,SAAA,SAAArI,GACA,KAAA,OAAAxH,GACA,KAAA,OAAA6P;EAChB;EAEH,WAAW;AACR,WAAO,GAAG,KAAK,IAAI,IAAI,KAAK,MAAM;EACrC;AACH;AAEO,IAAMC,KAAN,MAAgD;SAAA;;;EAAhD,cAAA;AACJ,SAAO,YAA6B,CAAA,GACpC,KAAO,SAAmB,CAAA,GAC1B,KAAO,SAA4B;EAAA;EAEnC,IAAI,SAAS;AACV,WAAO,KAAK,UAAU,SAAS;EAClC;EAEA,IAAI,SAAS;AACV,WAAO,KAAK;EACf;EAEA,WAAW;AACR,WAAI,KAAK,UAAU,SACT,cAAc,KAAK,UAAU,KAAK,IAAI,CAAC,KAG1C;EACV;AACH;AChCO,IAAMC,KAAN,MAAwC;SAAA;;;EAAxC,cAAA;AACJ,SAAO,iBAAiB;MACrB,KAAK,CAAA;IAAC,GAET,KAAO,UAAU,CAAA,GACjB,KAAO,UAAoB,CAAA,GAC3B,KAAO,QAAkB,CAAA,GACzB,KAAO,YAAmC,CAAA,GAC1C,KAAO,aAAoC,CAAA,GAC3C,KAAO,UAA6B;MACjC,SAAS;MACT,WAAW;MACX,YAAY;IAAA;EACf;AACH;AAEO,IAAMC,KAAN,MAAoD;SAAA;;;EAApD,cAAA;AACJ,SAAA,SAAS,IACT,KAAA,OAAO;MACJ,OAAO;MACP,QAAQ;IAAA,GAEX,KAAA,SAAS;MACN,OAAO;MACP,QAAQ;IAAA,GAEX,KAAA,UAAU;EAAA;EAEV,WAAW;AACR,WAAO,KAAK;EACf;AACH;AC/BA,SAASC,GACNC,IACgC;AAChC,SAAQA,GAAe,UAAUA,GAAe,WAAW;IACxD,aAAa;IACb,UAAU;IACV,aAAa;IACb,YAAY;IACZ,QAAQ,EAAE,OAAO,GAAG,OAAO,EAAA;IAC3B,OAAO,EAAE,OAAO,GAAG,OAAO,EAAA;EAAE;AAElC;AAXSD;AAaT,SAASE,GAAcC,IAAgB;AACpC,QAAMlG,IAAQ,YAAY,KAAKkG,EAAM,GAC/BC,IAAQ,eAAe,KAAKD,EAAM;AAExC,SAAO;IACJ,OAAOnN,EAAUiH,KAASA,EAAM,CAAC,KAAM,GAAG;IAC1C,OAAOjH,EAAUoN,KAASA,EAAM,CAAC,KAAM,GAAG;EAAA;AAEhD;AARSF;AAUF,IAAMG,KACV;EACG,IAAIC;IACD;IACA,CAACxJ,IAAQ,CAAClK,GAAQqN,CAAK,MAAM;AAC1B,YAAM/J,KAAMtD,EAAO,YAAA,GACb2T,IAAcP,GAAwBlJ,GAAO,cAAc;AAEjE,aAAO,OAAOyJ,GAAa,EAAE,CAACrQ,EAAG,GAAG8C,EAASiH,CAAK,EAAA,CAAG;IACxD;EAAA;EAEH,IAAIqG;IACD;IACA,CAACxJ,IAAQ,CAAClK,GAAQqN,CAAK,MAAM;AAC1B,YAAM/J,KAAMtD,EAAO,YAAA,GACb2T,IAAcP,GAAwBlJ,GAAO,cAAc;AAEjE,aAAO,OAAOyJ,GAAa,EAAE,CAACrQ,EAAG,GAAG8C,EAASiH,CAAK,EAAA,CAAG;IACxD;EAAA;EAEH,IAAIqG;IACD;IACA,CAACxJ,IAAQ,CAAC0J,GAAOC,GAAQC,EAAU,MAAM;AACtC,YAAMC,IAAUX,GAAwBlJ,GAAO,cAAc;AAC7D6J,QAAQ,QAAQT,GAAcM,CAAK,GACnCG,EAAQ,SAAST,GAAcO,CAAM,GACrCE,EAAQ,aAAa3N,EAAS0N,EAAU;IAC3C;EAAA;AAEN;AA7BI,IC1BDpH,KACH;EACG,IAAIgH,GAAiB,oBAAoB,CAACxJ,IAAQ,CAACpK,CAAI,OACpDoK,GAAO,eAAe,IAAI,KAAKpK,EAAK,KAAA,CAAM,GACnC,MACT;EACD,GAAG2T;EACH,IAAIC;IACD,CAAC,oCAAoC,qBAAqB;IAC1D,CAACxJ,IAAQ,CAAC8J,CAAc,MAAM;AAC1B9J,MAAAA,GAAO,eAA4C,iBAAiB8J;IACxE;EAAA;EAEH,IAAIN;IACD,CAAC,6CAA6C,qBAAqB;IACnE,CAACxJ,IAAQ,CAACmD,GAAO3M,GAASuT,EAAG,MAAM;AAC/B/J,MAAAA,GAAO,eAA4C,kBAAkB;QACnE,OAAO9D,EAASiH,CAAK;QACrB,SAAA3M;QACA,KAAAuT;MAAA;IAEN;EAAA;AAEN;AAEI,SAASC,GACbC,IACA/J,GACoB;AACpB,SAAOmD,GAAoB,EAAE,gBAAgB,IAAI6G,GAAAA,EAAqB,GAAU1H,IAAStC,CAAM;AAClG;AALgB8J;AAOT,IAAME,KAAN,MAAqD;SAAA;;;EAArD,cAAA;AACJ,SAAgB,MAAgB,CAAA;EAAC;AACpC;AChCA,IAAMC,KAAoB;AAA1B,IACMC,KAAgB;AADtB,IAEMC,KAAe;AAFrB,IAIM7H,KAAoC;EACvC,IAAIC,GAAW0H,IAAmB,CAACnK,IAAQ,CAAC/G,GAAM+J,GAAYC,EAAS,MAAM;AAC1EjD,IAAAA,GAAO,MAAM,KAAK/G,CAAI,GAElB+J,MACDhD,GAAO,WAAW/G,CAAI,IAAI+J,EAAW,SAGpCC,OACDjD,GAAO,UAAU/G,CAAI,IAAIgK,GAAU;EAEzC,CAAC;EACD,IAAIR,GAAW2H,IAAe,CAACpK,IAAQ,CAAC+C,GAAA,EAAWC,GAAA,EAAcC,EAAS,MACnED,MAAe,UAAaC,OAAc,UAC3CjD,GAAO,QAAQ,UAAU,CAAC+C,KAAW,GACrC/C,GAAO,QAAQ,aAAa,CAACgD,KAAc,GAC3ChD,GAAO,QAAQ,YAAY,CAACiD,MAAa,GAClC,QAEH,KACT;EACD,IAAIR,GAAW4H,IAAc,CAACrK,IAAQ,CAAClK,GAAQmD,CAAI,MAAM;AACtDwB,IAAAA,GAAOuF,GAAO,OAAO/G,CAAI,GACzBwB,GAAO3E,MAAW,WAAWkK,GAAO,UAAUA,GAAO,SAAS/G,CAAI;EACrE,CAAC;AACJ;AA7BA,IA+BMqR,KAA+C;EAClD,IAAI7H,GAAW,iBAAiB,CAACzC,IAAQ,CAACuK,CAAM,MAAA;AAAYvK,IAAAA,GAAO,SAASuK;EAAA,CAAO;EACnF,IAAI9H,GAAW,kBAAkB,CAACzC,IAAQ,CAAC5C,CAAO,MAAA;AAAY4C,IAAAA,GAAO,UAAU5C;EAAA,CAAQ;EACvF,IAAIqF;IACD;IACA,CAACzC,IAAQ,CAACwK,GAAWC,GAAYC,IAAaC,CAAY,MAAM;AAC7D3K,MAAAA,GAAO,OAAO,QAAQ0K,IACtB1K,GAAO,KAAK,QAAQwK,GACpBxK,GAAO,OAAO,SAAS2K,GACvB3K,GAAO,KAAK,SAASyK;IACxB;EAAA;AAEN;AA3CA,IA6CaG,KAAkD,wBAACtO,IAAQ4D,MAC9DmD,GAAoB,IAAI2F,GAAA,GAAexG,IAAS,CAAClG,IAAQ4D,CAAM,CAAC,GADX;AA7C/D,IAiDa2K,KAAkD,wBAACvO,IAAQ4D,MAC9D,OAAO;EACX,IAAI8I,GAAA;EACJ4B,GAAgBtO,IAAQ4D,CAAM;EAC9B8J,GAAoC1N,IAAQ4D,CAAM;AAAA,GAJO;AAQxD,SAAS4K,GAAqBxO,IAAgB4D,GAAgB;AAClE,QAAM6K,IAAY1H,GAAoB,IAAI4F,GAAA,GAAqBqB,IAAc,CAAChO,IAAQ4D,CAAM,CAAC;AAE7F,SAAO6K,EAAU,WAAWA;AAC/B;AAJgBD;ACzDhB,IAAMtI,KAAqC;EACxC,IAAIC,GAAW,yBAAyB,CAACjM,IAAS,CAACwU,CAAS,MAAM;AAC/DxU,IAAAA,GAAQ,OAAO,KAAKwU,CAAS;EAChC,CAAC;EACD,IAAIvI,GAAW,iDAAiD,CAACjM,IAAS,CAACiK,GAAQxH,CAAI,MAAM;AAC1FzC,IAAAA,GAAQ,UAAU,KAAK,IAAIqS,GAAqBpI,GAAQxH,CAAI,CAAC;EAChE,CAAC;EACD,IAAIwJ;IACD;IACA,CAACjM,IAAS,CAACiK,GAAQxH,GAAMgS,EAAS,MAAM;AACrCzU,MAAAA,GAAQ,UAAU,KAAK,IAAIqS,GAAqBpI,GAAQxH,GAAM,EAAE,WAAAgS,GAAA,CAAW,CAAC;IAC/E;EAAA;EAEH,IAAIxI,GAAW,yBAAyB,CAACjM,IAAS,CAACiK,CAAM,MAAM;AAC5DjK,IAAAA,GAAQ,UAAU,KAAK,IAAIqS,GAAqBpI,GAAQ,IAAI,CAAC;EAChE,CAAC;EACD,IAAIgC,GAAW,oCAAoC,CAACjM,IAAS,CAACwJ,CAAM,MAAM;AACvExJ,IAAAA,GAAQ,SAASwJ;EACpB,CAAC;AACJ;AAnBA,IAwBakL,KAAoD,wBAAC5O,IAAQ4D,MAChE,OAAO,OAAOiL,GAAiB7O,EAAc,GAAGuO,GAAgBvO,IAAQ4D,CAAM,CAAC,GADxB;AAxBjE,IAgCaiL,KAAoD,wBAAC7O,OACxD+G,GAAoB,IAAI0F,GAAAA,GAAsBvG,IAASlG,EAAM,GADN;AChC1D,SAAS8O,GAAUnT,IAA2D;AAClF,SAAKA,GAAW,SAIT;IACJ,UAAU,CAAC,SAAS,GAAGA,EAAU;IACjC,QAAQ;IACR,OAAOqE,GAAQ4D,GAAqB;AACjC,YAAMmL,KAAQH,GAAiB5O,GAAQ4D,CAAM;AAC7C,UAAImL,GAAM;AACP,cAAM,IAAIC,GAAiBD,EAAK;AAGnC,aAAOA;IACV;EAAA,IAbOtU,GAAuB,wCAAwC;AAe5E;AAjBgBqU;ACIhB,SAASG,GAAqBC,IAAejB,GAAgBjE,GAAsC;AAChG,QAAMN,KAAUM,EAAO,SAAS,SAAS,GACnCmF,IAAMnF,EAAO,SAAS,KAAK,KAAK,cAAc,KAAKkF,EAAK,GACxDE,KAAiB,CAACpF,EAAO,SAAS,KAAK;AAE7C,SAAO;IACJ,SAAAN;IACA,KAAAyF;IACA,QAAQ,CAACA;IACT,KAAK,CAACC;IACN,gBAAAA;IACA,OAAAF;IACA,QAAAjB;EAAA;AAEN;AAdSgB;AAgBT,IAAM/I,KAAoC;EACvC,IAAIC,GAAW,qBAAqB,CAACzC,IAAQ,CAACiC,CAAI,MAAM;AACrDjC,IAAAA,GAAO,OAAOiC;EACjB,CAAC;EACD,IAAIQ,GAAW,uCAAuC,CAACzC,IAAQ,CAACwL,CAAK,MAAM;AACxExL,IAAAA,GAAO,MAAM;MACV,GAAIA,GAAO,OAAO,CAAA;MAClB,OAAAwL;IAAA;EAEN,CAAC;EACD,IAAI/I,GAAW,qCAAqC,CAACzC,IAAQ,CAACwL,GAAOjB,GAAQoB,EAAI,MAAM;AACpF3L,IAAAA,GAAO,OAAO,KAAKuL,GAAqBC,GAAOjB,GAAQoB,EAAI,CAAC;EAC/D,CAAC;EACD,IAAIlJ;IACD;IACA,CAACzC,IAAQ,CAACwL,GAAOjB,GAAQqB,EAAU,MAAM;AACtC5L,MAAAA,GAAO,SAAS;QACb,GAAIA,GAAO,UAAU,CAAA;QACrB,OAAAwL;QACA,QAAAjB;QACA,YAAAqB;MAAA;IAEN;EAAA;EAEH,IAAInJ;IACD;IACA,CAACzC,IAAQ,CAACwL,GAAOjB,GAAQ/D,IAAMvJ,CAAE,MAAM;AACpC+C,MAAAA,GAAO,SAAS;QACb,MAAM;UACH,OAAAwL;UACA,QAAAjB;QAAA;QAEH,MAAM;UACH,MAAA/D;UACA,IAAAvJ;QAAA;MACH;IAEN;EAAA;AAEN;AAvCA,IAyCa4O,KAAkD,wBAACvP,IAAQ4D,MAAW;AAChF,QAAM4L,IAAaC,GAAgBzP,IAAQ4D,CAAM,GAC3C8L,KAAiBhC,GAA8C1N,IAAQ4D,CAAM;AAEnF,SAAO;IACJ,GAAG4L;IACH,GAAGE;EAAA;AAET,GAR+D;AAzC/D,IAmDaD,KAAkD,wBAACzP,IAAQ4D,MAC9DmD,GAAoB,EAAE,QAAQ,CAAA,EAAC,GAAKb,IAAS,CAAClG,IAAQ4D,CAAM,CAAC,GADR;ACtExD,SAAS+L,GAAaC,KAAe,CAAA,GAAIjU,GAA8C;AAC3F,SAAAwC,GAAOxC,GAAY,QAAQ,GACpBkU,GAASD,IAAKjU,CAAU;AAClC;AAHgBgU;AAKT,SAASE,GAASD,KAAe,CAAA,GAAIjU,GAA8C;AACvF,QAAMf,IAAW,CAAC,QAAQ,GAAGe,CAAU;AACvC,SAAIiU,GAAI,UACLhV,EAAS,OAAO,GAAG,GAAGgV,GAAI,MAAM,GAE/BA,GAAI,UACLhV,EAAS,OAAO,GAAG,GAAGgV,GAAI,MAAM,GAGnCtK,GAAO1K,GAAU,IAAI,GACrBuD,GAAOvD,GAAU,WAAW,GAC5BuD,GAAOvD,GAAU,aAAa,GAEvB;IACJ,UAAAA;IACA,QAAQ;IAAA,QACRvB;EAAA;AAEN;AAlBgBwW;ACPhB,SAAAC,KAAmE;AAChE,SAAO;IACJ,aAA+B;AAC5B,YAAMlV,KAAW,CAAC,QAAQ,GAAGmF,GAAmB,WAAW,CAAC,CAAC;AAC7D,aAAKnF,GAAS,SAAS,UAAU,KAC9BA,GAAS,OAAO,GAAG,GAAG,UAAU,GAG5B,KAAK;QACTE,GAA0BF,EAAQ;QAClC2D,EAAyB,SAAS;MAAA;IAExC;IAEA,OAAyB;AACtB,YAAM3D,KAAW,CAAC,QAAQ,GAAGmF,GAAmB,WAAW,CAAC,CAAC;AAC7D,aAAO,KAAK;QACTpF,EAA0BC,EAAQ;QAClC2D,EAAyB,SAAS;MAAA;IAExC;EAAA;AAEN;AAtBAuR;ACHO,IAAMC,KAAgB;AAEtB,IAAMC,KAAN,MAAoD;SAAA;;;EAGxD,YACUrW,GACA+O,GACAuH,IACR;AACC,QAJO,KAAA,OAAAtW,GACA,KAAA,QAAA+O,GACA,KAAA,cAAAuH,IAEHvH,MAAU,OAAOuH,OAAgB,KAAK;AACvC,YAAMC,IAASH,GAAc,KAAKpW,CAAI,KAAK,CAAC,MAAMA,GAAMA,CAAI;AAC5D,WAAK,OAAOuW,EAAO,CAAC,KAAK,IACzB,KAAK,OAAOA,EAAO,CAAC,KAAK;IAC5B;EACH;AACH;ACZO,IAAMC,KAAN,MAA4C;SAAA;;;EAA5C,cAAA;AACJ,SAAO,YAAY,CAAA,GACnB,KAAO,aAAa,CAAA,GACpB,KAAO,UAAU,CAAA,GACjB,KAAO,UAAU,CAAA,GACjB,KAAO,UAAU,QACjB,KAAO,WAAW,CAAA,GAClB,KAAO,UAAU,CAAA,GACjB,KAAO,QAAQ,CAAA,GACf,KAAO,SAAS,CAAA,GAChB,KAAO,QAAQ,GACf,KAAO,SAAS,GAChB,KAAO,UAAU,MACjB,KAAO,WAAW,MAClB,KAAO,WAAW,OAElB,KAAO,UAAU,MACP,CAAC,KAAK,MAAM;EACtB;AACH;AAcA,SAASC,GAAY/V,IAAc;AAChC,QAAM,CAACsG,GAAIuJ,CAAI,IAAI7P,GAAK,MAAMsF,EAAI;AAElC,SAAO;IACJ,MAAMuK,KAAQvJ;IACd,IAAAA;EAAA;AAEN;AAPSyP;AAST,SAAS/W,GACNgX,IACAC,GACAC,GAC2B;AAC3B,SAAO,CAAC,GAAGF,EAAM,GAAGC,CAAM,IAAIC,CAAO;AACxC;AANSlX,OAAAA,IAAAA;AAQT,SAASmX,GAAUH,OAAgCC,GAA+B;AAC/E,SAAOA,EAAO,IAAI,CAACG,MAAMpX,GAAOgX,IAAQI,GAAG,CAAC/M,IAAQ/G,MAAS+G,GAAO,WAAW,KAAK/G,CAAI,CAAC,CAAC;AAC7F;AAFS6T;AAIT,IAAMtK,KAAyC,IAAI,IAAI;EACpD7M;IAAO;IAA0B;IAA2B,CAACqK,IAAQ/G,MAClE+G,GAAO,QAAQ,KAAK/G,CAAI;EAAA;EAE3BtD;IAAO;IAA0B;IAA6B,CAACqK,IAAQ/G,MACpE+G,GAAO,QAAQ,KAAK/G,CAAI;EAAA;EAE3BtD;IAAO;IAA0B;IAA8B,CAACqK,IAAQ/G,MACrE+G,GAAO,SAAS,KAAK/G,CAAI;EAAA;EAG5BtD,GAAO,KAA2B,KAA0B,CAACqK,IAAQ/G,MAAS;AAC3E+G,IAAAA,GAAO,QAAQ,KAAK/G,CAAI,GACxB+G,GAAO,OAAO,KAAK/G,CAAI;EAC1B,CAAC;EACDtD,GAAO,KAA2B,KAA8B,CAACqK,IAAQ/G,MAAS;AAC/E+G,IAAAA,GAAO,QAAQ,KAAK/G,CAAI,GACxB+G,GAAO,OAAO,KAAK/G,CAAI,GACvB+G,GAAO,SAAS,KAAK/G,CAAI;EAC5B,CAAC;EAEDtD,GAAO,KAA6B,KAA0B,CAACqK,IAAQ/G,MAAS;AAC7E+G,IAAAA,GAAO,QAAQ,KAAK/G,CAAI,GACxB+G,GAAO,OAAO,KAAK/G,CAAI;EAC1B,CAAC;EAEDtD,GAAO,KAA8B,KAA0B,CAACqK,IAAQ/G,MAAS;AAC9E+G,IAAAA,GAAO,SAAS,KAAK/G,CAAI,GACzB+G,GAAO,OAAO,KAAK/G,CAAI;EAC1B,CAAC;EACDtD,GAAO,KAA8B,KAA8B,CAACqK,IAAQ/G,MAAS;AAClF+G,IAAAA,GAAO,SAAS,KAAK/G,CAAI,GACzB+G,GAAO,OAAO,KAAK/G,CAAI;EAC1B,CAAC;EAEDtD,GAAO,KAA6B,KAA0B,CAACqK,IAAQ/G,MAAS;AAC7E+G,IAAAA,GAAO,QAAQ,KAAK0M,GAAYzT,CAAI,CAAC;EACxC,CAAC;EACDtD,GAAO,KAA6B,KAA8B,CAACqK,IAAQ/G,MAAS;AACjF,UAAM+T,IAAUN,GAAYzT,CAAI;AAChC+G,IAAAA,GAAO,QAAQ,KAAKgN,CAAO,GAC3BhN,GAAO,SAAS,KAAKgN,EAAQ,EAAE;EAClC,CAAC;EACDrX,GAAO,KAA6B,KAA6B,CAACsX,IAASC,MAAU;AAClF,KAACD,GAAQ,UAAUA,GAAQ,WAAW,CAAA,GAAI,KAAKC,CAAK;EACvD,CAAC;EAEDvX;IAAO;IAA+B;IAA+B,CAACqK,IAAQ/G,MAC3E+G,GAAO,UAAU,KAAK/G,CAAI;EAAA;EAG7B,GAAG6T;IAAU;IAA2B;IAA2B;;EAAA;EACnE,GAAGA;IACA;IACA;IACA;;EAAA;EAEH,GAAGA;IACA;IACA;IACA;IACA;;EAAA;EAGH;IACG;IACA,CAAC9M,IAAQrJ,MAAS;AACf,YAAMwW,IAAW,eACXC,KAAY,gBACZC,IAAa,4BACbC,KAAc,cACdC,IAAmB;AAEzB,UAAIC,IAAcL,EAAS,KAAKxW,CAAI;AACpCqJ,MAAAA,GAAO,QAASwN,KAAe,CAACA,EAAY,CAAC,KAAM,GAEnDA,IAAcJ,GAAU,KAAKzW,CAAI,GACjCqJ,GAAO,SAAUwN,KAAe,CAACA,EAAY,CAAC,KAAM,GAEpDA,IAAcH,EAAW,KAAK1W,CAAI,GAClCqJ,GAAO,UAAU7B,EAAWqP,IAAc,CAAC,GAAGpP,GAAc,IAAI,GAEhEoP,IAAcF,GAAY,KAAK3W,CAAI,GACnCqJ,GAAO,WAAW7B,EAAWqP,IAAc,CAAC,GAAGpP,GAAc,IAAI,GAEjEoP,IAAcD,EAAiB,KAAK5W,CAAI,GACpC6W,MACDxN,GAAO,UAAU7B,EAAWqP,IAAc,CAAC,GAAGpP,GAAc4B,GAAO,OAAO,IAG7EA,GAAO,WAAW,gBAAgB,KAAKrJ,CAAI;IAC9C;EAAA;AAEN,CAAC;AA7FD,IA+Fa8W,KAAqB,gCAAU7X,IAA4B;AACrE,QAAMoE,IAAQpE,GAAK,MAAMqG,EAAI,GACvBqK,IAAS,IAAImG,GAAA;AAEnB,WAASxS,KAAI,GAAGyT,IAAI1T,EAAM,QAAQC,KAAIyT,KAAK;AACxC,QAAI/W,KAAOqD,EAAMC,IAAG,EAAE,KAAA;AAEjBtD,IAAAA,OAIDA,GAAK,OAAO,CAAC,MAAM,QACpBA,MAAQsF,MAAQjC,EAAMC,IAAG,KAAK,MAGjC0T,GAAUrH,GAAQ3P,EAAI;EACzB;AAEA,SAAO2P;AACV,GAnBkC;AAqBlC,SAASqH,GAAU3N,IAAsB4N,GAAiB;AACvD,QAAMzW,IAAUyW,EAAQ,KAAA;AACxB,UAAQ,KAAA;IACL,KAAKzW,EAAQ,OAAO,CAAC;AAClB,aAAOkK,GAAKlK,EAAQ,OAAO,CAAC,GAAGA,EAAQ,OAAO,CAAC,GAAGA,EAAQ,MAAM,CAAC,CAAC;IACrE,KAAKA,EAAQ,OAAO,CAAC;AAClB,aAAOkK,GAAK,KAA0BlK,EAAQ,OAAO,CAAC,GAAGA,EAAQ,MAAM,CAAC,CAAC;IAC5E;AACG;EAAA;AAGN,WAASkK,GAAK2D,GAAe6I,IAAoB5X,GAAc;AAC5D,UAAM4J,IAAM,GAAGmF,CAAK,GAAG6I,EAAU,IAC3BhB,KAAUrK,GAAQ,IAAI3C,CAAG;AAE3BgN,IAAAA,MACDA,GAAQ7M,IAAQ/J,CAAI,GAGnB4J,MAAQ,QAAQA,MAAQ,QACzBG,GAAO,MAAM,KAAK,IAAIsM,GAAkBrW,GAAM+O,GAAO6I,EAAU,CAAC;EAEtE;AAXSxM,SAAAA,IAAAA;AAYZ;AAvBSsM;AC5KT,IAAMG,KAAiB,CAAC,UAAU,IAAI;AAE/B,SAASC,GAAW9V,IAAgD;AAUxE,SAAO;IACJ,QAAQ;IACR,UAXc;MACd;MACA;MACA;MACA;MACA;MACA,GAAGA,GAAW,OAAO,CAAC+V,MAAQ,CAACF,GAAe,SAASE,CAAG,CAAC;IAAA;IAM3D,OAAOpY,GAAc;AAClB,aAAO6X,GAAmB7X,CAAI;IACjC;EAAA;AAEN;AAjBgBmY;ACMhB,IAAME,KAAgB;AAEtB,SAASC,GACNC,KAAQ,GACRC,IAAQ,GACRC,IAAyB,GACzBC,KAAQ,IACRC,IAAY,MACE;AACd,SAAO,OAAO;IACX;MACG,OAAAJ;MACA,OAAAC;MACA,OAAAC;MACA,OAAAC;MACA,WAAAC;IAAA;IAEH;IACA;MACG,QAAQ;AACL,eAAO,GAAG,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK;MACnD;MACA,cAAc;MACd,YAAY;IAAA;EACf;AAEN;AAxBSL,OAAAA,IAAAA;AA0BT,SAASM,KAAuB;AAC7B,SAAON,GAAgB,GAAG,GAAG,GAAG,IAAI,KAAK;AAC5C;AAFSM;AAIT,SAAAC,KAAuD;AACpD,SAAO;IACJ,UAA4B;AACzB,aAAO,KAAK,SAAS;QAClB,UAAU,CAAC,WAAW;QACtB,QAAQ;QACR,QAAQC;QACR,QAAQ1O,IAAQ1K,GAAOC,GAAMC,IAAM;AAChC,cAAIwK,GAAO,aAAavK,GAAU;AAC/B,mBAAOF,EAAK,OAAO,KAAK0Y,EAAa,CAAC;AAGzCzY,UAAAA,GAAKF,CAAK;QACb;MAAA,CACF;IACJ;EAAA;AAEN;AAjBAmZ;AAmBA,IAAMjM,KAAuC;EAC1C,IAAIC;IACD;IACA,CAACzC,IAAQ,CAACmO,GAAOC,GAAOC,IAAOC,IAAQ,EAAE,MAAM;AAC5C,aAAO;QACJtO;QACAkO,GAAgBhS,EAASiS,CAAK,GAAGjS,EAASkS,CAAK,GAAGlS,EAASmS,EAAK,GAAGC,CAAK;MAAA;IAE9E;EAAA;EAEH,IAAI7L;IACD;IACA,CAACzC,IAAQ,CAACmO,GAAOC,GAAOC,IAAOC,IAAQ,EAAE,MAAM;AAC5C,aAAO,OAAOtO,IAAQkO,GAAgBhS,EAASiS,CAAK,GAAGjS,EAASkS,CAAK,GAAGC,IAAOC,CAAK,CAAC;IACxF;EAAA;AAEN;AAEA,SAASI,GAAcpS,IAAgB;AACpC,SAAIA,OAAW2R,KACLO,GAAA,IAGHnL,GAAoB6K,GAAgB,GAAG,GAAG,GAAG5R,EAAM,GAAGkG,IAASlG,EAAM;AAC/E;AANSoS;AC/CF,IAAMC,KAAN,MAA4C;SAAA;;;EAChD,YAAoBvP,GAA8B;AAA9B,SAAA,YAAAA;EAA+B;EAEzC,SAAY7H,GAAwB6E,GAAiC;AAC5E,UAAMwS,KAAQ,KAAK,UAAU,MAAA,GACvBC,IAAUD,GAAM,KAAKrX,CAAI;AAE/B,WAAI6E,KACD6E,GAAa1J,GAAMsX,GAASzS,CAAI,GAG5B,OAAO,OAAO,MAAM;MACxB,MAAM,EAAE,OAAOyS,EAAQ,KAAK,KAAKA,CAAO,EAAA;MACxC,OAAO,EAAE,OAAOA,EAAQ,MAAM,KAAKA,CAAO,EAAA;MAC1C,WAAW,EAAE,OAAOD,GAAA;IAAM,CAC5B;EACJ;EAEA,IAAIrL,GAA0B;AAC3B,WAAO,KAAK;MACTtM,EAA0B,CAAC,OAAO,GAAGyM,EAAQH,CAAK,CAAC,CAAC;MACpD1I,EAAyB,SAAS;IAAA;EAExC;EAEA,IAAI0G,GAAsD;AACvD,UAAMiC,IAAO3I,EAAyB,SAAS;AAE/C,WAAI,OAAO0G,KAAc,WACf,KAAK,SAASD,GAA2BC,GAAW,KAAK,SAAS,GAAGiC,CAAI,IAG/E,OAAOjC,GAAW,QAAS,WACrB,KAAK;MACTD;QACGC,EAAU;QACTA,EAAU,QAAQ,KAAK,aAAc;MAAA;MAEzCiC;IAAA,IAIC,KAAK;MACTzM,GAAuB,wDAAwD;MAC/EyM;IAAA;EAEN;EAEA,WAAWvN,GAAckO,GAA0B;AAChD,WAAO,KAAK;MACTD,GAAejO,GAAMkO,MAAU,IAAI;MACnCtJ,EAAyB,SAAS;IAAA;EAExC;EAEA,KAAKwJ,GAA0B;AAC5B,WAAO,KAAK;MACTS,GAAST,MAAS,MAAM,KAAK,UAAU,KAAKhI,GAAmB,SAAS,CAAC;MACzExB,EAAyB,SAAS;IAAA;EAExC;EAEA,QAAQ;AACL,WAAO,KAAK;MACTuQ,GAAU/O,GAAmB,SAAS,CAAC;MACvCxB,EAAyB,SAAS;IAAA;EAExC;EAEA,YAAY0P,GAAgB7H,GAAgB;AACzC,WAAMtE,EAAamM,CAAM,KAAKnM,EAAasE,CAAM,IAQ1C,KAAK;MACT0I,GAAU,CAACb,GAAQ7H,GAAQ,GAAGrG,GAAmB,SAAS,CAAC,CAAC;MAC5DxB,EAAyB,WAAW,KAAK;IAAA,IATlC,KAAK;MACT9D;QACG;MAAA;IACH;EAQT;EAEA,cAAc8V,GAAwB;AACnC,WAAA,KAAK,UAAU,gBAAgBA,GACxB;EACV;EAEA,OAAO;AACJ,UAAMtV,IAAO4U;MACV;QACG,QAAQhO,EAAW,UAAU,CAAC,GAAGC,CAAY;QAC7C,QAAQD,EAAW,UAAU,CAAC,GAAGC,CAAY;MAAA;MAEhD/B,GAAmB,SAAS;IAAA;AAG/B,WAAO,KAAK,SAAS9E,GAAMsD,EAAyB,SAAS,CAAC;EACjE;EAEA,QAAQ;AACL,WAAO,KAAK;MACT5D,EAA0B,CAAC,SAAS,GAAGoF,GAAmB,SAAS,CAAC,CAAC;MACrExB,EAAyB,SAAS;IAAA;EAExC;EAEA,SAAS;AACN,WAAO,KAAK;MACTkT,GAAW1R,GAAmB,SAAS,CAAC;MACxCxB,EAAyB,SAAS;IAAA;EAExC;AACH;AAEA,OAAO;EACJ8T,GAAa;EACb9M,GAAA;EACAU,GAAA;EACAI,GAAA;EACAnJ,GAAA;EACAwK,GAAA;EACAC,GAAA;EACArI,GAAA;EACAqJ,GAAA;EACAyD,GAAA;EACA0D,GAAA;EACAqC,GAAA;AACH;ACzJA,IAAMK,KAA4C,uBAAM;AACrD,MAAIC,KAAK;AACT,SAAO,MAAM;AACVA,IAAAA;AACA,UAAM,EAAE,SAAAF,GAAS,MAAAtZ,EAAA,QAASyZ,wBAAAA,gBAAA;AAE1B,WAAO;MACJ,SAAAH;MACA,MAAAtZ;MACA,IAAAwZ;IAAA;EAEN;AACH,GAAA;AAEO,IAAME,KAAN,MAAgB;SAAA;;;EAKpB,YAAoBC,IAAc,GAAG;AAAjB,SAAA,cAAAA,GAJpB,KAAQ,SAASvR,GAAa,IAAI,WAAW,GAC7C,KAAQ,UAA2B,CAAA,GACnC,KAAQ,UAA2B,CAAA,GAGhC,KAAK,OAAO,+BAA+BuR,CAAW;EACzD;EAEQ,WAAW;AAChB,QAAI,CAAC,KAAK,QAAQ,UAAU,KAAK,QAAQ,UAAU,KAAK,aAAa;AAClE,WAAK;QACF;QACA,KAAK,QAAQ;QACb,KAAK,QAAQ;QACb,KAAK;MAAA;AAER;IACH;AAEA,UAAM3X,IAAOkD,GAAO,KAAK,SAAS,KAAK,QAAQ,MAAA,CAAQ;AACvD,SAAK,OAAO,oBAAoBlD,EAAK,EAAE,GACvCA,EAAK,KAAK,MAAM;AACb,WAAK,OAAO,kBAAkBA,EAAK,EAAE,GACrCqK,GAAO,KAAK,SAASrK,CAAI,GACzB,KAAK,SAAA;IACR,CAAC;EACJ;EAEA,OAA0C;AACvC,UAAM,EAAE,SAAAsX,GAAS,IAAAE,EAAA,IAAOtU,GAAO,KAAK,SAASqU,GAAAA,CAAqB;AAClE,WAAA,KAAK,OAAO,oBAAoBC,CAAE,GAElC,KAAK,SAAA,GAEEF;EACV;AACH;AC7BO,SAASM,GAAeC,IAAmBnX,GAA0C;AACzF,SAAOhB,EAA0B,CAAC,SAAS,GAAGgB,GAAY,GAAGmX,EAAO,CAAC;AACxE;AAFgBD;AC9BT,IAAKE,KAAAA,kBAAAA,QACTA,GAAA,UAAU,KACVA,GAAA,SAAS,KAFAA,KAAAA,MAAA,CAAA,CAAA;AAKL,IAAMC,KAAN,MAAmD;SAAA;;;EAAnD,cAAA;AACJ,SAAO,MAAgB,CAAA,GACvB,KAAO,WAAiD,CAAA,GACxD,KAAO,UAAkB,IACzB,KAAO,WAAoB;EAAA;EAE3B,KACGhJ,GACAiJ,GACAhS,IACAoF,GACA/E,IACD;AACK0I,UAAW,QACZ,KAAK,WAAWiJ,GAChB,KAAK,UAAUhS,KAGlB,KAAK,IAAI,KAAKA,EAAI,GAClB,KAAK,SAASA,EAAI,IAAI;MACnB,SAAS+I,MAAW;MACpB,gBAAgBA,MAAW;MAC3B,MAAA/I;MACA,QAAAoF;MACA,OAAA/E;IAAA;EAEN;AACH;AC9BA,IAAM4E,KAA6C;EAChD,IAAIC;IACD;IACA,CAACzC,IAAQ,CAACwP,GAASjS,GAAMoF,IAAQ/E,CAAK,MAAM;AACzCoC,MAAAA,GAAO,KAAKyP,GAAaD,CAAO,GAAG,MAAMjS,GAAMoF,IAAQ/E,CAAK;IAC/D;EAAA;EAEH,IAAI6E;IACD;IACA,CAACzC,IAAQ,CAACwP,GAASjS,GAAMoF,IAAQ/E,CAAK,MAAM;AACzCoC,MAAAA,GAAO,KAAKyP,GAAaD,CAAO,GAAG,OAAOjS,GAAMoF,IAAQ/E,CAAK;IAChE;EAAA;AAEN;AAbA,IAeM8R,KAAsB,IAAIjN,GAAgC,YAAY,CAACzC,IAAQ,CAACzC,CAAI,MAAM;AAC7FyC,EAAAA,GAAO,KAAKqP,GAAuB,SAAS,OAAO9R,GAAM,IAAI,EAAE;AAClE,CAAC;AAED,SAASkS,GAAahX,IAAgB;AACnC,SAAOA,KAAQA,GAAM,OAAO,CAAC,IAAI;AACpC;AAFSgX;AAIF,SAASE,GAAmBrT,IAAgBsT,IAAc,OAAsB;AACpF,SAAOvM;IACJ,IAAIiM,GAAA;IACJM,IAAc,CAACF,EAAmB,IAAIlN;IACtClG;EAAA;AAEN;AANgBqT;ACpBT,IAAME,KAAN,MAA6D;SAAA;;;EAA7D,cAAA;AACJ,SAAA,MAAkC,CAAA,GAClC,KAAA,WAA+D,CAAA,GAC/D,KAAA,SAAqC,CAAA;EAAC;EAEtC,IAAI,UAAmB;AACpB,WAAO,CAAC,KAAK,OAAO;EACvB;AACH;AAEO,SAASC,GAAsBpN,IAAgBqN,GAAyC;AAC5F,SAAO;IACJ,QAAArN;IACA,MAAAqN;IACA,SAAS;EAAA;AAEf;AANgBD;AAQT,SAASE,GAAsBtN,IAA2C;AAC9E,SAAO;IACJ,QAAAA;IACA,MAAM;IACN,SAAS;EAAA;AAEf;AANgBsN;AChBhB,IAAMC,KAAqB;AAA3B,IACMC,KAAmB;AADzB,IAGM1N,KAAiD;EACpD,IAAIC,GAAWwN,IAAoB,CAACjQ,IAAQ,CAAC0C,GAAQqN,CAAI,MAAM;AAC5D,UAAMI,KAAWL,GAAsBpN,GAAQqN,CAAI;AAEnD/P,IAAAA,GAAO,IAAI,KAAKmQ,EAAQ,GACxBnQ,GAAO,SAAS0C,CAAM,IAAIyN;EAC7B,CAAC;EACD,IAAI1N,GAAWyN,IAAkB,CAAClQ,IAAQ,CAAC0C,CAAM,MAAM;AACpD,UAAMyN,IAAWH,GAAsBtN,CAAM;AAE7C1C,IAAAA,GAAO,OAAO,KAAKmQ,CAAQ,GAC3BnQ,GAAO,IAAI,KAAKmQ,CAAQ,GACxBnQ,GAAO,SAAS0C,CAAM,IAAIyN;EAC7B,CAAC;AACJ;AAjBA,IAmBaC,KAAoE,wBAC9E9T,IACA4D,MAEOmD,GAAoB,IAAIwM,GAAA,GAAuBrN,IAAS,CAAClG,IAAQ4D,CAAM,CAAC,GAJD;AAO1E,SAASmQ,GAAuBhP,IAAciP,GAAqC;AACvF,SAAOA,MAAoB7a,GAAU,SAASya,GAAiB,KAAK7O,EAAI;AAC3E;AAFgBgP;ACxBT,SAASE,GAA4BrZ,IAAoB;AAC7D,QAAMsZ,IAAiB,CAAC,MAAM,MAAM,UAAU;AAC9C,SAAOtZ,GAAS,KAAK,CAACmJ,MAAYmQ,EAAe,SAASnQ,CAAO,CAAC;AACrE;AAHgBkQ;AAKT,SAASE,GACbxY,IACqD;AACrD,QAAMyY,IAAWH,GAA4BtY,EAAU,GACjD0Y,IAAgB1Y,GAAW,SAAS,gBAAgB,GAEpDf,KAAW,CAAC,UAAU,GAAGe,EAAU;AAEzC,SAAIf,GAAS,WAAW,KACrBA,GAAS,KAAK,IAAI,GAGhBA,GAAS,SAAS,IAAI,KACxBA,GAAS,OAAO,GAAG,GAAG,IAAI,GAGtB;IACJ,QAAQ;IACR,UAAAA;IACA,OAAOoF,GAAQ4D,IAAQ;AACpB,aAAIwQ,IACMN,GAAqB9T,GAAQ4D,EAAM,EAAE,IAAI,CAAC,IAG7CyP,GAAmBrT,GAAQqU,CAAa;IAClD;EAAA;AAEN;AA3BgBF;AA6BT,SAASG,KAA6C;AAC1D,SAAO;IACJ,QAAQ;IACR,UAAU,CAAC,UAAU,IAAI;IACzB,OAAOtU,IAAQ;AACZ,aAAOqT,GAAmBrT,EAAM;IACnC;EAAA;AAEN;AARgBsU;AAUT,SAASC,GACbC,IACAC,IAAc,OACsB;AACpC,SAAO;IACJ,QAAQ;IACR,UAAU,CAAC,UAAU,MAAMA,IAAc,OAAO,MAAM,GAAGD,EAAQ;IACjE,OAAOxU,GAAQ4D,IAAQ;AACpB,aAAOkQ,GAAqB9T,GAAQ4D,EAAM;IAC7C;IACA,QAAQ,EAAE,UAAA7K,GAAU,QAAAiH,GAAAA,GAAUhH,GAAOC,IAAMC,GAAM;AAC9C,UAAI,CAAC6a,GAAuB,OAAO/a,CAAK,GAAGD,CAAQ;AAChD,eAAOG,EAAKF,CAAK;AAGpBC,MAAAA,GAAK+G,EAAM;IACd;EAAA;AAEN;AAlBgBuU;AAoBT,SAASG,GACbtO,IACAqO,IAAc,OACuB;AACrC,QAAMxZ,IAA6C;IAChD,QAAQ;IACR,UAAU,CAAC,UAAU,MAAMwZ,IAAc,OAAO,MAAMrO,EAAM;IAC5D,OAAOpG,IAAQ4D,GAAQ;AACpB,aAAOkQ,GAAqB9T,IAAQ4D,CAAM,EAAE,SAASwC,EAAM;IAC9D;IACA,QAAQ,EAAE,UAAArN,IAAU,QAAA6K,GAAQ,QAAA5D,GAAAA,GAAUhH,GAAO2b,GAAGzb,IAAM;AACnD,UAAI,CAAC6a,GAAuB,OAAO/a,CAAK,GAAGD,EAAQ;AAChD,eAAOG,GAAKF,CAAK;AAGpB,YAAM,IAAIgW;QACP/T,EAAK,OAAO2Z,GAAe5U,EAAM,GAAG4U,GAAehR,CAAM,CAAC;QAC1D,OAAO5K,CAAK;MAAA;IAElB;EAAA;AAGH,SAAOiC;AACV;AAvBgByZ;ACvET,SAASG,GAAgBtV,IAAuC;AACpE,SAAO;IACJ,UAAU,CAAC,gBAAgB,GAAGA,EAAK;IACnC,QAAQ;IACR,QAAQuV;EAAA;AAEd;AANgBD;AAWhB,SAASC,GAAiBxb,IAAwB;AAC/C,SAAOA,GAAK,MAAM,KAAK,EAAE,IAAIyb,EAAM,EAAE,OAAO,OAAO;AACtD;AAFSD;AAIT,SAASC,GAAO5Y,IAAe;AAC5B,QAAMxC,IAAOwC,GAAM,KAAA,EAAO,QAAQ,gBAAgB,EAAE;AACpD,SAAOxC,KAAQqb,GAAUrb,CAAI;AAChC;AAHSob;AChBT,IAAM7O,KAAqC;EACxC,IAAIC,GAAW,cAAc,CAACzC,IAAQ,CAACuK,CAAM,MAAM;AAChDvK,IAAAA,GAAO,SAASuK;EACnB,CAAC;EACD,IAAI9H,GAAW,uCAAuC,CAACzC,IAAQ,CAACzC,GAAMgU,CAAQ,MAAM;AACjFvR,IAAAA,GAAO,SAAS,KAAK;MAClB,MAAAzC;MACA,UAAAgU;IAAA,CACF;EACJ,CAAC;EACD,IAAI9O,GAAW,oCAAoC,CAACzC,IAAQ,CAACzC,GAAMgU,CAAQ,MAAM;AAC9EvR,IAAAA,GAAO,KAAK,KAAK;MACd,MAAAzC;MACA,UAAAgU;IAAA,CACF;EACJ,CAAC;EACD,IAAI9O,GAAW,iCAAiC,CAACzC,IAAQ,CAACuR,CAAQ,MAAM;AACrEvR,IAAAA,GAAO,QAAQ,KAAK;MACjB,UAAAuR;IAAA,CACF;EACJ,CAAC;EACD,IAAI9O;IACD;IACA,CAACzC,IAAQ,CAACwG,GAAMvJ,GAAIM,IAAMgU,CAAQ,MAAM;AACrCvR,MAAAA,GAAO,QAAQ,KAAK;QACjB,MAAAzC;QACA,UAAAgU;QACA,IAAAtU;QACA,MAAAuJ;MAAA,CACF;IACJ;EAAA;AAEN;AAEO,SAASgL,GAAiBlV,IAAgB4D,GAA6B;AAS3E,SAAOmD,GARqB;IACzB,KAAK/G;IACL,QAAQ;IACR,UAAU,CAAA;IACV,MAAM,CAAA;IACN,SAAS,CAAA;IACT,SAAS,CAAA;EAAC,GAEsBkG,IAAS,CAAClG,IAAQ4D,CAAM,CAAC;AAC/D;AAVgBsR;AChChB,SAASC,GAAkBpR,IAAiB;AACzC,SAAO,sBAAsB,KAAKA,EAAO;AAC5C;AAFSoR;AAIF,SAASC,GACbnH,IACA7H,GACAzK,GACoC;AACpC,QAAMf,KAAW,CAAC,SAAS,GAAGe,CAAU;AAMxC,SALIsS,MAAU7H,KACXxL,GAAS,KAAKqT,IAAQ7H,CAAM,GAGhBxL,GAAS,KAAKua,EAAiB,IAEpC1a,GAAuB,gDAAgD,IAG1E;IACJ,UAAAG;IACA,QAAQ;IACR,QAAQsa;EAAA;AAEd;AApBgBE;ACNhB,IAAMlP,KAAoC;EACvC,IAAIC,GAAW,2BAA2B,CAACzC,IAAQ,CAACwG,GAAMvJ,CAAE,MAAM;AAC/D+C,IAAAA,GAAO,MAAM,KAAK,EAAE,MAAAwG,GAAM,IAAAvJ,EAAAA,CAAI;EACjC,CAAC;AACJ;AAEO,SAAS0U,GAAgBrV,IAA4B;AACzD,SAAO+G,GAAoB,EAAE,OAAO,CAAA,EAAC,GAAKb,IAASlG,EAAM;AAC5D;AAFgBqV;ACJT,SAASC,GAASpL,IAAyBvJ,GAAoC;AACnF,SAAO;IACJ,UAAU,CAAC,MAAM,MAAM,GAAGyG,EAAQ8C,EAAI,GAAGvJ,CAAE;IAC3C,QAAQ;IACR,QAAQ0U;EAAA;AAEd;AANgBC;ACCT,SAASC,GACbtH,IACA7H,GACAzK,GACuB;AACvB,QAAMf,KAAqB,CAAC,QAAQ,GAAGe,CAAU;AACjD,SAAIsS,MAAU7H,KACXxL,GAAS,OAAO,GAAG,GAAGqT,IAAQ7H,CAAM,GAGhC;IACJ,UAAAxL;IACA,QAAQ;IACR,OAAOoF,GAAQ4D,IAAoB;AAChC,aAAO2K,GAAgBvO,GAAQ4D,EAAM;IACxC;IACA,QAAQF,GAAQ8R,IAAQC,GAAOvc,GAAM;AAClC,YAAMuV,KAAYD;QACfoG,GAAelR,EAAO,MAAM;QAC5BkR,GAAelR,EAAO,MAAM;MAAA;AAE/B,UAAI+K;AACD,eAAOvV,EAAK,IAAI8V,GAAiBP,EAAS,CAAC;AAG9CvV,QAAKsc,EAAM;IACd;EAAA;AAEN;AA5BgBD;ACOT,SAASG,GAAgBpc,IAAmC;AAChE,QAAMqc,IAAiD,CAAA;AAEvD,SAAAC,GAAQtc,IAAM,CAAC,CAAC2H,CAAI,MAAO0U,EAAQ1U,CAAI,IAAI,EAAE,MAAAA,EAAAA,CAAO,GAE7C,OAAO,OAAO0U,CAAO;AAC/B;AANgBD;AAQT,SAASG,GAAuBvc,IAAgC;AACpE,QAAMqc,IAA8C,CAAA;AAEpD,SAAAC,GAAQtc,IAAM,CAAC,CAAC2H,GAAMwM,IAAKqI,CAAO,MAAM;AAChC,WAAO,OAAOH,GAAS1U,CAAI,MAC7B0U,EAAQ1U,CAAI,IAAI;MACb,MAAAA;MACA,MAAM,EAAE,OAAO,IAAI,MAAM,GAAA;IAAG,IAI9B6U,KAAWrI,OACZkI,EAAQ1U,CAAI,EAAE,KAAK6U,EAAQ,QAAQ,WAAW,EAAE,CAAiC,IAAIrI;EAE3F,CAAC,GAEM,OAAO,OAAOkI,CAAO;AAC/B;AAjBgBE;AAmBhB,SAASD,GAAQtc,IAAciX,GAAmC;AAC/D9Q,KAAuBnG,IAAM,CAACe,MAASkW,EAAQlW,EAAK,MAAM,KAAK,CAAC,CAAC;AACpE;AAFSub;AC/BF,SAASG,GACbzG,IACA0G,GACAra,GACmB;AACnB,SAAOhB,EAA0B,CAAC,UAAU,OAAO,GAAGgB,GAAY2T,IAAY0G,CAAU,CAAC;AAC5F;AANgBD;AAUT,SAASE,GACb1U,IACmD;AACnD,QAAM3G,IAAW,CAAC,QAAQ;AAC1B,SAAI2G,MACD3G,EAAS,KAAK,IAAI,GAGd;IACJ,UAAAA;IACA,QAAQ;IACR,QAAQ2G,KAAUsU,KAAyBH;EAAA;AAEjD;AAbgBO;AAeT,SAASC,GAAgBva,IAA0C;AACvE,QAAMf,IAAW,CAAC,GAAGe,EAAU;AAC/B,SAAIf,EAAS,CAAC,MAAM,eACjBA,EAAS,QAAQ,WAAW,GAGxBD,EAA0BC,CAAQ;AAC5C;AAPgBsb;AAST,SAASC,GAAWxa,IAA0C;AAClE,QAAMf,IAAW,CAAC,GAAGe,EAAU;AAC/B,SAAIf,EAAS,CAAC,MAAM,YACjBA,EAAS,QAAQ,QAAQ,GAGrBD,EAA0BC,CAAQ;AAC5C;AAPgBub;AAST,SAASC,GAAiB9G,IAAoB;AAClD,SAAO3U,EAA0B,CAAC,UAAU,UAAU2U,EAAU,CAAC;AACpE;AAFgB8G;AC5CT,SAASC,GACbxK,KAAkB,CAAA,GAClBlQ,GACkC;AAClC,QAAME,IAAU+P,IAAqBC,EAAG,GAClCjR,KAAW,CAAC,SAAS,QAAQ,GAAGiB,EAAQ,UAAU,GAAGF,CAAU,GAC/DtC,IAASyR;IACZjP,EAAQ;IACRA,EAAQ;IACRkN,GAAqBnO,EAAQ;EAAA;AAGhC,SACGyQ,GAAwBzQ,EAAQ,KAAK;IAClC,UAAAA;IACA,QAAQ;IACR,QAAAvB;EAAA;AAGT;AAnBgBgd;ACLT,SAASC,GAAiB3Q,IAAchM,GAAkC;AAC9E,SAAO4c,GAAc,CAAC,OAAO5Q,IAAMhM,CAAI,CAAC;AAC3C;AAFgB2c;AAIT,SAASE,GAAkB7a,IAA0C;AACzE,SAAO4a,GAAc,CAAC,QAAQ,GAAG5a,EAAU,CAAC;AAC/C;AAFgB6a;AAIT,SAASD,GAAc5a,IAA0C;AACrE,QAAMf,IAAW,CAAC,GAAGe,EAAU;AAC/B,SAAIf,EAAS,CAAC,MAAM,eACjBA,EAAS,QAAQ,WAAW,GAGxBD,EAA0BC,CAAQ;AAC5C;AAPgB2b,OAAAA,IAAAA;AAST,SAASE,GAAoB9a,IAA0C;AAC3E,SAAO4a,GAAc,CAAC,UAAU,GAAG5a,EAAU,CAAC;AACjD;AAFgB8a;AClBT,IAAMC,KAAN,MAAmC;SAAA;;;EACvC,YACmBha,GACAE,GACjB;AAFiB,SAAA,MAAAF,GACA,KAAA,SAAAE;EAChB;AACN;AAEO,IAAM+Z,KAAe,gCAAU5R,IAAc6R,IAAa,OAAO;AACrE,QAAMC,IAAO9R,GAAK,MAAM;CAAI,EAAE,IAAIlK,EAAO,EAAE,OAAO,OAAO;AAEpD+b,OACFC,EAAK,KAAK,SAAUC,GAAMC,IAAM;AAC7B,UAAMC,IAASF,EAAK,MAAM,GAAG,GACvBG,IAASF,GAAK,MAAM,GAAG;AAE7B,QAAIC,EAAO,WAAW,KAAKC,EAAO,WAAW;AAC1C,aAAOC,GAAaC,GAASH,EAAO,CAAC,CAAC,GAAGG,GAASF,EAAO,CAAC,CAAC,CAAC;AAG/D,aAAStZ,KAAI,GAAGyT,KAAI,KAAK,IAAI4F,EAAO,QAAQC,EAAO,MAAM,GAAGtZ,KAAIyT,IAAGzT,MAAK;AACrE,YAAMyZ,KAAOC,GAAOF,GAASH,EAAOrZ,EAAC,CAAC,GAAGwZ,GAASF,EAAOtZ,EAAC,CAAC,CAAC;AAE5D,UAAIyZ;AACD,eAAOA;IAEb;AAEA,WAAO;EACV,CAAC;AAGJ,QAAMxa,KAASga,IAAaC,EAAK,CAAC,IAAI,CAAC,GAAGA,CAAI,EAAE,QAAA,EAAU,KAAK,CAAC1H,MAAQA,EAAI,QAAQ,GAAG,KAAK,CAAC;AAE7F,SAAO,IAAIuH,GAAQG,GAAMja,EAAM;AAClC,GA3B4B;AA6B5B,SAASsa,GAAaI,IAAWC,GAAmB;AACjD,QAAMC,IAAS,OAAO,MAAMF,EAAC,GACvBG,KAAS,OAAO,MAAMF,CAAC;AAE7B,SAAIC,MAAWC,KACLD,IAAS,IAAI,KAGhBA,IAASH,GAAOC,IAAGC,CAAC,IAAI;AAClC;AATSL;AAWT,SAASG,GAAOC,IAAWC,GAAW;AACnC,SAAOD,OAAMC,IAAI,IAAID,KAAIC,IAAI,IAAI;AACpC;AAFSF;AAIT,SAASxc,GAAQsB,IAAe;AAC7B,SAAOA,GAAM,KAAA;AAChB;AAFStB;AAIT,SAASsc,GAAShb,IAA2B;AAC1C,SAAI,OAAOA,MAAU,YACX,SAASA,GAAM,QAAQ,SAAS,EAAE,GAAG,EAAE,KAAK;AAIzD;AANSgb,OAAAA,IAAAA;AClDF,SAASO,GAAY/b,KAAuB,CAAA,GAA2B;AAC3E,QAAMgc,IAAgBhc,GAAW,KAAK,CAACa,MAAW,WAAW,KAAKA,CAAM,CAAC;AAEzE,SAAO;IACJ,QAAQ;IACR,UAAU,CAAC,OAAO,MAAM,GAAGb,EAAU;IACrC,OAAOrC,GAAc;AAClB,aAAOqd,GAAard,GAAMqe,CAAa;IAC1C;EAAA;AAEN;AAVgBD;AAeT,SAASE,GAAW3W,IAA4C;AACpE,SAAO;IACJ,QAAQ;IACR,UAAU,CAAC,OAAOA,EAAI;IACtB,SAAS;AACN,aAAO,EAAE,MAAAA,GAAA;IACZ;EAAA;AAEN;AARgB2W;AAaT,SAASC,GACb5W,IACA6W,GAC6B;AAC7B,SAAO;IACJ,QAAQ;IACR,UAAU,CAAC,OAAO,MAAM,MAAMA,GAAY7W,EAAI;IAC9C,SAAS;AACN,aAAO,EAAE,MAAAA,GAAA;IACZ;EAAA;AAEN;AAXgB4W;ACmBhB,SAASE,GAAIlc,IAASmc,GAAS;AAC5B,OAAK,WAAWA,GAChB,KAAK,YAAY,IAAItT;IAClB7I,GAAQ;IACR,IAAI8W,GAAU9W,GAAQ,sBAAsB;IAC5Cmc;EACN,GAEG,KAAK,WAAWnc,GAAQ;AAC3B;AATSkc,OAAAA,IAAAA;CAWRA,GAAI,YAAY,OAAO,OAAO1F,GAAa,SAAS,GAAG,cAAc0F;AAMtEA,GAAI,UAAU,eAAe,SAAUhU,IAAS;AAC7C,SAAA,KAAK,SAAS,YAAY,UAAUA,EAAO,GACpC;AACV;AAUAgU,GAAI,UAAU,MAAM,SAAU9W,IAAMlE,GAAO;AACxC,SAAI,UAAU,WAAW,KAAK,OAAOkE,MAAS,WAC3C,KAAK,UAAU,MAAMA,MAEpB,KAAK,UAAU,MAAM,KAAK,UAAU,OAAO,CAAA,GAAIA,EAAI,IAAIlE,GAGpD;AACV;AAKAgb,GAAI,UAAU,YAAY,SAAUlc,IAAS;AAC1C,SAAO,KAAK;IACTwa;MACGhK,GAAwB,SAAS,KAAK,CAAA;MACrC/E,GAAYzL,EAAO,KAAKA,MAAY,CAAA;IAC9C;IACM0C,EAAyB,SAAS;EACxC;AACA;AAUAwZ,GAAI,UAAU,KAAK,SAAU7N,IAAMvJ,GAAI;AACpC,SAAO,KAAK,SAAS2U,GAASpL,IAAMvJ,CAAE,GAAGpC,EAAyB,SAAS,CAAC;AAC/E;AAOAwZ,GAAI,UAAU,oBAAoB,SAAUjY,IAAM;AAC/C,MAAImY,IAAM;AACV,SAAO,KAAK,KAAK,WAAY;AAC1BA,MAAI,KAAK,SAAUvV,GAAKmU,IAAM;AAC3BoB,QAAI,SAASpB,GAAK,QAAQ/W,EAAI;IACjC,CAAC;EACJ,CAAC;AACJ;AAKAiY,GAAI,UAAU,OAAO,SAAU9J,IAAQ7H,GAAQvK,GAASiE,IAAM;AAC3D,SAAO,KAAK;IACTyV;MACG1T,EAAWoM,IAAQnM,CAAY;MAC/BD,EAAWuE,GAAQtE,CAAY;MAC/B/B,GAAmB,SAAS;IACrC;IACMxB,EAAyB,SAAS;EACxC;AACA;AAYAwZ,GAAI,UAAU,QAAQ,SAAU9J,IAAQ7H,GAAQ;AAC7C,SAAO,KAAK;IACTgP;MACGvT,EAAWoM,IAAQnM,CAAY;MAC/BD,EAAWuE,GAAQtE,CAAY;MAC/B/B,GAAmB,SAAS;IACrC;IACMxB,EAAyB,SAAS;EACxC;AACA;AAWAwZ,GAAI,UAAU,OAAO,SAAUlc,IAASiE,GAAM;AAC3C,SAAO,KAAK;IACT4X,GAAY3X,GAAmB,SAAS,CAAC;IACzCxB,EAAyB,SAAS;EACxC;AACA;AAMAwZ,GAAI,UAAU,SAAS,WAAY;AAChC,SAAO,KAAK;IACTpd,EAA0B,CAAC,UAAU,GAAGoF,GAAmB,SAAS,CAAC,CAAC;IACtExB,EAAyB,SAAS;EACxC;AACA;AAKAwZ,GAAI,UAAU,QAAQ,SAAUrc,IAAM;AACnC,SAAO,KAAK;IACTyE,GAAUE,GAAa3E,EAAI,GAAGqE,GAAmB,SAAS,CAAC;IAC3DxB,EAAyB,SAAS;EACxC;AACA;AAKAwZ,GAAI,UAAU,SAAS,SAAU1R,IAAQ;AACtC,QAAMa,IAAO3I,EAAyB,SAAS;AAE/C,SAAI,OAAO8H,MAAW,WACZ,KAAK,SAAS5L,GAAuB,yBAAyB,GAAGyM,CAAI,IAGxE,KAAK;IACTvM,EAA0B,CAAC,UAAU,GAAGoF,GAAmB,WAAW,GAAG,IAAI,GAAGsG,EAAM,CAAC;IACvFa;EACN;AACA;AAKA6Q,GAAI,UAAU,SAAS,SAAU9W,IAAM;AACpC,QAAMhG,IACH,OAAOgG,MAAS,WACX2W,GAAW3W,EAAI,IACfxG,GAAuB,gCAAgC;AAE/D,SAAO,KAAK,SAASQ,GAAMsD,EAAyB,SAAS,CAAC;AACjE;AAKAwZ,GAAI,UAAU,kBAAkB,SAAUG,IAASJ,GAAY;AAC5D,SAAO,KAAK;IACTD,GAAoBK,IAASJ,CAAU;IACvCvZ,EAAyB,SAAS;EACxC;AACA;AAKAwZ,GAAI,UAAU,oBAAoB,SAAUvS,IAAYiP,GAAa3U,GAAM;AACxE,SAAO,KAAK;IACT4U,GAAiBlP,IAAY,OAAOiP,KAAgB,YAAYA,IAAc,KAAK;IACnFlW,EAAyB,SAAS;EACxC;AACA;AAKAwZ,GAAI,UAAU,sBAAsB,SAAUI,IAAa1D,GAAa3U,GAAM;AAC3E,SAAO,KAAK;IACTyU,GAAmB4D,IAAa,OAAO1D,KAAgB,YAAYA,IAAc,KAAK;IACtFlW,EAAyB,SAAS;EACxC;AACA;AAQAwZ,GAAI,UAAU,SAAS,SAAUlc,IAASiE,GAAM;AAC7C,SAAO,KAAK;IACTqU,GAAWpU,GAAmB,SAAS,CAAC;IACxCxB,EAAyB,SAAS;EACxC;AACA;AAOAwZ,GAAI,UAAU,cAAc,SAAUjY,IAAM;AACzC,SAAO,KAAK,SAASwU,GAAe,GAAI/V,EAAyB,SAAS,CAAC;AAC9E;AAKAwZ,GAAI,UAAU,MAAM,SAAUnd,IAAU;AACrC,QAAMwd,IAAqB,CAAC,MAAM,QAAQxd,EAAQ,GAC5CmJ,IAAU,CAAA,EAAG,MAAM,KAAKqU,IAAqB,YAAYxd,IAAU,CAAC;AAE1E,WAAS+C,IAAI,GAAGA,IAAIoG,EAAQ,UAAUqU,GAAoBza;AACvD,QAAI,CAAC0a,GAAiBtU,EAAQpG,CAAC,CAAC,GAAG;AAChCoG,QAAQ,OAAOpG,GAAGoG,EAAQ,SAASpG,CAAC;AACpC;IACH;AAGHoG,IAAQ,KAAK,GAAGhE,GAAmB,WAAW,GAAG,IAAI,CAAC;AAEtD,MAAImH,KAAO3I,EAAyB,SAAS;AAE7C,SAAKwF,EAAQ,SAON,KAAK,SAASpJ,EAA0BoJ,GAAS,KAAK,QAAQ,GAAGmD,EAAI,IANlE,KAAK;IACTzM,GAAuB,iDAAiD;IACxEyM;EACT;AAIA;AAEA6Q,GAAI,UAAU,eAAe,SAAUpS,IAAMhM,GAAMmG,GAAM;AACtD,SAAO,KAAK,SAASwW,GAAiB3Q,IAAMhM,CAAI,GAAG4E,EAAyB,SAAS,CAAC;AACzF;AAEAwZ,GAAI,UAAU,kBAAkB,SAAUhX,IAAMjB,GAAM;AACnD,SAAO,KAAK;IACT2W,GAAoB1W,GAAmB,WAAW,IAAI,CAAC;IACvDxB,EAAyB,SAAS;EACxC;AACA;AAEAwZ,GAAI,UAAU,gBAAgB,SAAUhX,IAAMjB,GAAM;AACjD,SAAO,KAAK;IACT0W,GAAkBzW,GAAmB,WAAW,IAAI,CAAC;IACrDxB,EAAyB,SAAS;EACxC;AACA;AAEAwZ,GAAI,UAAU,YAAY,SAAUlc,IAASiE,GAAM;AAChD,SAAO,KAAK;IACTyW,GAAcxW,GAAmB,SAAS,CAAC;IAC3CxB,EAAyB,SAAS;EACxC;AACA;AAEAwZ,GAAI,UAAU,aAAa,WAAY;AACpC,SAAO,KAAK;IACT7B,GAAgBnW,GAAmB,SAAS,CAAC;IAC7CxB,EAAyB,SAAS;EACxC;AACA;AAKAwZ,GAAI,UAAU,YAAY,SAAUzI,IAAY0G,GAAYlW,GAAM;AAC/D,SAAO,KAAK;IACTiW,GAAczG,IAAY0G,GAAYjW,GAAmB,SAAS,CAAC;IACnExB,EAAyB,SAAS;EACxC;AACA;AAKAwZ,GAAI,UAAU,eAAe,SAAUzI,IAAYxP,GAAM;AACtD,SAAO,KAAK,SAASsW,GAAiB9G,EAAU,GAAG/Q,EAAyB,SAAS,CAAC;AACzF;AAMAwZ,GAAI,UAAU,aAAa,SAAUxW,IAASzB,GAAM;AACjD,SAAO,KAAK,SAASmW,GAAe1U,OAAY,IAAI,GAAGhD,EAAyB,SAAS,CAAC;AAC7F;AAQAwZ,GAAI,UAAU,SAAS,SAAUlc,IAASiE,GAAM;AAC7C,SAAO,KAAK;IACTqW,GAAWpW,GAAmB,SAAS,CAAC;IACxCxB,EAAyB,SAAS;EACxC;AACA;AAQAwZ,GAAI,UAAU,MAAM,SAAUlc,IAASiE,GAAM;AAC1C,QAAMiE,IAAUhE,GAAmB,SAAS;AAE5C,SAAIgE,EAAQ,CAAC,MAAM,SAChBA,EAAQ,QAAQ,KAAK,GAGjB,KAAK,SAASpJ,EAA0BoJ,CAAO,GAAGxF,EAAyB,SAAS,CAAC;AAC/F;AAOAwZ,GAAI,UAAU,mBAAmB,SAAUjY,IAAM;AAC9C,SAAO,KAAK;IACTnF,EAA0B,CAAC,oBAAoB,CAAC;IAChD4D,EAAyB,SAAS;EACxC;AACA;AASAwZ,GAAI,UAAU,WAAW,SAAU9J,IAAQnO,GAAM;AAC9C,QAAM7E,IAAO0U;IACV,EAAE,QAAQ9N,EAAWoM,IAAQnM,CAAY,EAAC;IAC1C/B,GAAmB,SAAS;EAClC;AAEG,SAAO,KAAK,SAAS9E,GAAMsD,EAAyB,SAAS,CAAC;AACjE;AAKAwZ,GAAI,UAAU,KAAK,SAAU9Q,IAAO;AACjC,SAAO,KAAK;IACTtM,EAA0B,CAAC,MAAM,MAAM,GAAGyM,EAAQH,EAAK,CAAC,CAAC;IACzD1I,EAAyB,SAAS;EACxC;AACA;AAQAwZ,GAAI,UAAU,cAAc,SAAU9Q,IAAO;AAC1C,SAAO,KAAK;IACTtM,EAA0B,CAAC,MAAM,YAAY,GAAGyM,EAAQH,EAAK,CAAC,CAAC;IAC/D1I,EAAyB,SAAS;EACxC;AACA;AAWAwZ,GAAI,UAAU,UAAU,SAAUlc,IAASiE,GAAM;AAC9C,SAAO,KAAK,SAAS,SAAS,SAAS;AAC1C;AAEAiY,GAAI,UAAU,gBAAgB,WAAY;AACvC,SAAO,KAAK,SAAS,UAAU,SAAS;AAC3C;AAEAA,GAAI,UAAU,WAAW,SAAU/O,IAAQjI,GAAM;AAC9C,MAAIwP,IAAUhS,EAAyBwC,CAAI,GACvCgD,KAAU,CAAC,UAAU,GACrBlI,IAAUkF,EAAK,CAAC;AAEpB,MAAI,OAAOlF,KAAY;AACpB,WAAO,KAAK;MACTpB,GAAuB,8DAA8D;MACrF8V;IACT;AAGO,QAAM,QAAQ1U,CAAO,KACtBkI,GAAQ,KAAK,MAAMA,IAASlI,CAAO;AAGtC,QAAMZ,KACH+N,OAAW,WAAWlO,GAA0BiJ,EAAO,IAAIpJ,EAA0BoJ,EAAO;AAE/F,SAAO,KAAK,SAAS9I,IAAMsV,CAAO;AACrC;AAEAwH,GAAI,UAAU,OAAO,SAAUlc,IAASiE,GAAM;AAC3C,QAAM7E,IAAO6G,EAAajG,EAAO,IAC5BpB;IACG;EACX,IACQE,EAA0B,CAAC,QAAQ,GAAGoF,GAAmB,SAAS,CAAC,CAAC;AAEzE,SAAO,KAAK,SAAS9E,GAAMsD,EAAyB,SAAS,CAAC;AACjE;AAEAwZ,GAAI,UAAU,cAAc,WAAY;AACrC,SAAO,KAAK;IACT3M,GAAgBrL,GAAmB,WAAW,CAAC,CAAC;IAChDxB,EAAyB,SAAS;EACxC;AACA;AAEAwZ,GAAI,UAAU,aAAa,SAAUjF,IAAS;AAC3C,QAAM7X,IAAQoM,GAA0ByL,EAAO,IAI1CD,GAAezL,EAAQ0L,EAAO,GAAG/S,GAAmB,CAAA,EAAG,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAHhFtF;IACG;EACX;AAGG,SAAO,KAAK,SAASQ,GAAMsD,EAAyB,SAAS,CAAC;AACjE;AAEAwZ,GAAI,UAAU,WAAW,WAAY;AAClC,QAAMnd,KAAW,CAAC,aAAa,GAAGmF,GAAmB,WAAW,IAAI,CAAC;AACrE,SAAO,KAAK;IACTpF,EAA0BC,IAAU,IAAI;IACxC2D,EAAyB,SAAS;EACxC;AACA;AAIAwZ,GAAI,UAAU,QAAQ,SAAUrc,IAAMG,GAASiE,GAAM;AAClD,QAAMwY,KAAyBpc,GAAoBR,EAAI,GACjDE,IACF0c,MAA0B5c,GAAK,KAAK,EAAE,KAAMmG,EAAWnG,IAAMoG,CAAY,KAAK,IAC5EnG,KAAaoE,GAAmB,CAAA,EAAG,MAAM,KAAK,WAAWuY,KAAyB,IAAI,CAAC,CAAC;AAE9F,SAAO,KAAK;IACT7c,GAAqBG,GAAWD,EAAU;IAC1C4C,EAAyB,SAAS;EACxC;AACA;AAEAwZ,GAAI,UAAU,OAAO,SAAUjY,IAAM;AAClC,QAAM7E,IAAO;IACV,UAAU,CAAA;IACV,QAAQ;IACR,SAAS;AACF,aAAO6E,MAAS,cACjBA,GAAI;IAEV;EACN;AAEG,SAAO,KAAK,SAAS7E,CAAI;AAC5B;AAQA8c,GAAI,UAAU,cAAc,SAAUQ,IAAWzY,GAAM;AACpD,SAAO,KAAK;IACT+U,GAAgBzN,EAAQvF,EAAW0W,IAAWlR,IAA2B,CAAA,CAAE,CAAC,CAAC;IAC7E9I,EAAyB,SAAS;EACxC;AACA;AAEAwZ,GAAI,UAAU,cAAc,SAAUS,IAAW1Y,GAAM;AACpD,SAAO,KAAK;IACTvG,GAAgBsI,EAAW2W,IAAW1W,CAAY,CAAC;IACnDvD,EAAyB,SAAS;EACxC;AACA;ACtjBO,SAASka,GAAYC,IAAmC;AAC5D,SAAKA,KA0BE,CATgD;IACpD,MAAM;IACN,OAAOC,IAAOC,GAAS;AAChBF,MAAAA,GAAO,WACRE,EAAQ,KAAK,IAAIC,GAAe,QAAW,SAAS,wBAAwB,CAAC;IAEnF;EAAA,GAnBkD;IAClD,MAAM;IACN,OAAOF,IAAOC,GAAS;AACpB,eAASE,KAAO;AACbF,UAAQ,KAAK,IAAIC,GAAe,QAAW,SAAS,uBAAuB,CAAC;MAC/E;AAFSC,aAAAA,IAAAA;AAITJ,MAAAA,GAAO,iBAAiB,SAASI,EAAI,GAErCF,EAAQ,QAAQ,GAAG,SAAS,MAAMF,GAAO,oBAAoB,SAASI,EAAI,CAAC;IAC9E;EAAA,CAYgC,IAzBhC;AA0BN;AA5BgBL;ACEhB,IAAMjW,KAASnB,GAAa,IAAI,yBAAyB;AAElD,SAAS0X,GACbC,IACAC,IAA0B,OACO;AACjC,QAAMC,IAAU,IAAI,IAAIF,GAAiB,IAAI,CAAClc,OAAQA,GAAI,YAAA,EAAc,KAAA,CAAM,CAAC;AAE/E,SAAO;IACJ,MAAM;IACN,OAAOoH,IAAc0U,GAAS;AAC3B,YAAMO,KAAM,EAAE,GAAIjV,GAAa,OAAO,QAAQ,IAAA,GACxCkV,IAAe,IAAI;QACtB,OAAO,KAAKR,EAAQ,GAAG,EAAE,IAAI,CAAC9b,MAAQA,EAAI,YAAA,EAAc,KAAA,CAAM;MAAA;AAGjE,iBAAWA,KAAO,OAAO,KAAKqc,EAAG,GAAG;AACjC,cAAME,KAAavc,EAAI,YAAA,EAAc,KAAA;AAGrC,YAAI,EAAA,CAACwc,GAAgBD,EAAU,KAAKH,EAAQ,IAAIG,EAAU,IAK1D;AAAA,cAAID,EAAa,IAAIC,EAAU;AAC5B,kBAAM,IAAIR;cACP;cACA;cACA,WAAW/b,CAAG;YAAA;AAKpB0F,aAAO,oDAAoD1F,CAAG,GAC9D,OAAOqc,GAAIrc,CAAG;QAAA;MACjB;AAEA,aAAO;QACJ,GAAGoH;QACH,KAAK;UACF,GAAGiV;UACH,uCAAuC,OAAO,CAACF,CAAuB;QAAA;MACzE;IAEN;EAAA;AAEN;AA7CgBF;AA+ChB,SAASO,GAAgBxc,IAAa;AACnC,QAAMuc,IAAavc,GAAI,YAAA,EAAc,KAAA;AACrC,SAAOuc,EAAW,WAAW,MAAM,KAAKE,EAAYF,CAAU;AACjE;AAHSC;ACjDF,SAASE,GACb3d,KAA2C,CAAA,GACb;AAC9B,SAAO;IACJ,MAAM;IACN,OAAOkF,GAAM,EAAE,KAAAoY,EAAAA,GAAO;AACnB,iBAAWM,MAAiBC,GAAmB3Y,GAAMoY,CAAG;AACrD,YAAItd,GAAQ4d,GAAc,QAAQ,MAAM;AACrC,gBAAM,IAAIZ,GAAe,QAAW,UAAUY,GAAc,OAAO;AAIzE,aAAO1Y;IACV;EAAA;AAEN;AAfgByY;ACHT,SAASG,GACbC,IAC8B;AAC9B,QAAMhZ,IAAS3B,EAAc2a,IAAe,IAAI;AAEhD,SAAO;IACJ,MAAM;IACN,OAAO7U,GAAM;AACV,aAAO,CAAC,GAAGnE,GAAQ,GAAGmE,CAAI;IAC7B;EAAA;AAEN;AAXgB4U;ACGhB,IAAME,SAAQC,wBAAAA,UAAAA,EAAW;AAElB,SAASC,GAA0B;EACvC,SAAAC,KAAU;EACV,QAAAC,IAAS;AACZ,IAAyC,CAAA,GAAoC;AAC1E,WAASC,IAAe;AACrB,QAAInhB,IAAW;AACf,UAAMohB,KAAS;MACZ,WAAOL,wBAAAA,UAAA;MACP,kBAAcA,wBAAAA,UAAA;MACd,UAAMA,wBAAAA,UAAA;MACN,iBAAaA,wBAAAA,UAAA;IAAS,GAGnBpW,IAAS,QAAQ,KAAK;MACzBsW,OAAY,QAAQH,KAAQM,GAAO,aAAa;MAChDF,MAAW,QAAQJ,KAAQM,GAAO,YAAY;IAAA,CAChD;AAED,WAAAC,GAAiBJ,IAASG,GAAO,OAAOA,GAAO,YAAY,GAC3DC,GAAiBH,GAAQE,GAAO,MAAMA,GAAO,WAAW,GAEjD;MACJ,MAAME,GAAc;AACjBthB,YAAWshB,GACXF,GAAO,MAAM,KAAA;MAChB;MACA,KAAKE,GAAc;AAChBthB,YAAWshB,GACXF,GAAO,KAAK,KAAA;MACf;MACA,IAAI,WAAW;AACZ,eAAOphB;MACV;MACA,QAAA2K;IAAA;EAEN;AA/BSwW;AAiCT,WAASE,GACNE,GACAC,IACAC,GACD;AACKF,UAAS,UAIZA,MAAS,OAAOC,GAAM,UAAUA,GAAM,QAAQ,KAAK,MAAME,GAAMH,CAAI,CAAC,GAAG,KAAKE,EAAQ,IAAI;EAC5F;AAVSJ,SAAAA,IAAAA;AAYT,SAAO;IACJ,MAAM;IACN,MAAM,OAAOzB,GAAO,EAAE,SAAAhX,IAAS,OAAA+Y,EAAAA,GAAS;AACrC,YAAMP,IAASD,EAAA;AAEf,UAAIS,KAAa,MACbC,KAAa,6BAAA;AAAYD,QAAAA,KAAa;MAAA,GAAzB;AAEjBhZ,MAAAA,GAAQ,QAAQ,GAAG,QAAQiZ,EAAU,GACrCjZ,GAAQ,QAAQ,GAAG,QAAQiZ,EAAU,GACrCjZ,GAAQ,GAAG,SAASiZ,EAAU,GAE9BjZ,GAAQ,GAAG,SAAS,CAAC0Y,OAAiBF,EAAO,MAAME,EAAI,CAAC,GACxD1Y,GAAQ,GAAG,QAAQ,CAAC0Y,OAAiBF,EAAO,KAAKE,EAAI,CAAC;AAEtD,UAAI;AACD,cAAMF,EAAO,QACTQ,MACD,MAAMF,GAAM,EAAE,GAEjBC,EAAMP,EAAO,QAAQ;MACxB,SAASzX,IAAK;AACXgY,UAAMP,EAAO,UAAUzX,EAAY;MACtC;IACH;EAAA;AAEN;AA3EgBqX;ACFhB,IAAMvX,KAASnB,GAAa,IAAI,eAAe;AAA/C,IAEMwZ,KAAmB;AAFzB,IAGMC,KAAkB;AAExB,SAASC,GAAcrJ,IAAa;AACjC,SAAO,CAACA,MAAO,CAAC,iCAAiC,KAAKA,EAAG;AAC5D;AAFSqJ;AAIT,SAASC,GACN7e,IACA8e,GACoC;AACpC,MAAI9e,GAAM,SAAS,KAAKA,GAAM,SAAS;AACpC,UAAM,IAAI0c,GAAe,QAAW,UAAUgC,EAAgB;AAIjE,MADc1e,GAAM,KAAK4e,EAAa;AAEnC,QAAIE;AACDzY,SAAO,8BAA8BrG,EAAK;;AAE1C,YAAM,IAAI0c,GAAe,QAAW,UAAUiC,EAAe;AAInE,QAAM,CAACxX,IAAQ1C,CAAM,IAAIzE;AACzB,SAAO;IACJ,QAAAmH;IACA,QAAA1C;EAAA;AAEN;AAtBSoa;AAwBF,SAASE,GACblD,IACA7b,IAAoC,CAAC,KAAK,GAC1C8e,IAAc,OACf;AACC,MAAI/d,KAAS8d,GAAe5T,EAAQjL,CAAK,GAAG8e,CAAW;AAEvDjD,EAAAA,GAAQ,GAAG,UAAU,CAAC7b,MAAU;AAC7Be,IAAAA,KAAS8d,GAAe5T,EAAQjL,CAAK,GAAG8e,CAAW,GACnDzY,GAAO,KAAK,oBAAoBtF,EAAM;EACzC,CAAC,GAED8a,GAAQ,OAAO,gBAAgB,MACrB9a,GAAO,MAChB,GAED8a,GAAQ,OAAO,cAAc,CAACjT,MACpB7H,GAAO,SAAS,CAACA,GAAO,QAAQ,GAAG6H,CAAI,IAAIA,CACpD;AACJ;AAnBgBmW;ACrChB,IAAMC,KAAU;EACb,wBAAwB;IACrB,MAAM;IACN,UACG;EAAA;EAEN,SAAS;IACN,MAAM;IACN,UAAU;EAAA;AAEhB;AAIA,SAASC,GAAUta,IAA+C;AAC/D,MAAI,CAACA;AACF,WAAO;AAEV,aAAW,CAACqD,GAAQ,EAAE,MAAA7K,EAAA,CAAM,KAAK,OAAO,QAAQ6hB,EAAO;AACpD,QAAIra,GAAQ,WAAW,UAAUxH,CAAI,EAAE;AACpC,aAAO6K;AAGb,SAAO;AACV;AAVSiX;AAmBF,IAAMC,KAAN,cAAoC1Y,GAAS;SAAA;;;EAGjD,YAAY7B,IAAU,IAAI;AACvB,UAAMqD,IAASiX,GAAUta,CAAO;AAEhC,UAAM,QAAWqa,GAAQhX,CAAM,EAAE,UAAU,QAAQ,aAAarD,CAAO,KAAKA,CAAO,GACnF,KAAK,SAASqD;EACjB;AACH;ACrCA,SAASmX,GAAY5X,IAAoB;AACtC,SAAO,CAAC,EAAEA,GAAO,YAAYA,GAAO,OAAO;AAC9C;AAFS4X;AAIT,SAASC,GAAgB7X,IAAoB;AAC1C,SAAO,OAAO,OAAO,CAAC,GAAGA,GAAO,QAAQ,GAAGA,GAAO,MAAM,CAAC;AAC5D;AAFS6X;AAIF,SAASC,GACbC,KAAY,OACZC,IAAUJ,IACVK,IAAuDJ,IACxD;AACC,SAAO,CAACviB,IAAmC0K,MACnC,CAAC+X,MAAaziB,MAAU,CAAC0iB,EAAQhY,CAAM,IAClC1K,KAGH2iB,EAAajY,CAAM;AAEhC;AAZgB8X;AAchB,SAASI,GAAe7iB,IAAkB+H,GAAiB;AACxD,SAAI/H,OAAa,OAAO+H,EAAQ,WAAW,QAAQ,IACzC,IAAIua,GAAsBva,CAAO,IAGpC,IAAI6B,GAAS,QAAW7B,CAAO;AACzC;AANS8a;AAQF,SAASC,GACb3e,IAC8B;AAC9B,SAAO;IACJ,MAAM;IACN,OAAO6H,GAAM6T,GAAS;AACnB,YAAM5f,KAAQkE,GAAO6H,EAAK,OAAO;QAC9B,QAAQ6T,EAAQ;QAChB,QAAQA,EAAQ;QAChB,UAAUA,EAAQ;MAAA,CACpB;AAED,aAAI,OAAO,SAAS5f,EAAK,IACf;QACJ,OAAO4iB,GAAehD,EAAQ,UAAU5f,GAAM,SAAS,OAAO,CAAC;MAAA,IAI9D;QACJ,OAAAA;MAAA;IAEN;EAAA;AAEN;AAvBgB6iB;AChChB,IAAMrZ,KAASnB,GAAa,IAAI,cAAc;AAEvC,SAASya,GACb3f,IACsC;AACtC,SAAO;IACJ,MAAM;IACN,OAAOwc,GAAO,EAAE,UAAA/d,GAAU,OAAOmhB,IAAW,SAAS,EAAE,OAAAC,EAAA,EAAA,GAAW;AAC/D,UAAI,CAACA;AACF;AAGH,YAAMC,KAAU9f,KAAQ,CAAC,GAAGvB,CAAQ,CAAC,KAAKmhB;AAC1C,UAAI,CAACE;AACF,eAAOzZ,GAAO,qDAAqD;AAGtEA,SAAO,6BAA6B0Z,GAAWD,EAAO,CAAC,GAEvDD,EAAM,GAAG,SAAS,CAACtZ,MAA+B;AAE3CA,UAAI,SAAS,WACdF,GAAO,0BAA0BE,CAAG;MAE1C,CAAC,GAEDsZ,EAAM,IAAIC,EAAO;IACpB;EAAA;AAEN;AA3BgBH;ACGT,IAAMK,KAAN,MAAkB;SAAA;;;EAAlB,cAAA;AACJ,SAAQ,UAAA,oBAAyD,IAAA,GACjE,KAAQ,SAAS,IAAIC,GAAA;EAAa;EAElC,GACG/M,GACAgN,GACD;AACC,SAAK,OAAO,GAAGhN,GAAMgN,CAAQ;EAChC;EAEA,YAAmDhN,GAAStK,GAAgC;AACzF,SAAK,OAAO,KAAKsK,GAAMtK,CAAI;EAC9B;EAEO,OAAsCsK,GAAS7V,GAAsC;AACzF,UAAM8iB,KAASne,GAAO,KAAK,SAAS,EAAE,MAAAkR,GAAM,QAAA7V,EAAAA,CAAQ;AAEpD,WAAO,MAAM,KAAK,QAAQ,OAAO8iB,EAAM;EAC1C;EAEO,IACJA,GACD;AACC,UAAMtE,IAAgC,CAAA;AAEtC,WAAA5Q,EAAQkV,CAAM,EAAE;MACb,CAACA,OAAAA;AAAiBA,QAAAA,MAAU,KAAK,QAAQ,IAAIne,GAAO6Z,GAASsE,EAAM,CAAC;MAAA;IAAA,GAGhE,MAAM;AACVtE,QAAQ,QAAQ,CAACsE,OAAAA;AAAgB,aAAK,QAAQ,OAAOA,EAAM;MAAA,CAAC;IAC/D;EACH;EAEO,KACJjN,GACAtK,GACA6T,IACY;AACZ,QAAInU,IAASM;AACb,UAAMwX,KAAa,OAAO,OAAO,OAAO,OAAO3D,EAAO,CAAC;AAEvD,eAAW0D,KAAU,KAAK;AACnBA,QAAO,SAASjN,MACjB5K,IAAS6X,EAAO,OAAO7X,GAAQ8X,EAAU;AAI/C,WAAO9X;EACV;AACH;ACzDO,SAAS+X,GAAsB/Z,IAAuD;AAC1F,QAAMga,IAAkB,cAClBC,IAAkB,CAAC,YAAY,SAAS,SAAS,QAAQ,MAAM;AAqCrE,SAAO,CAXuC;IAC3C,MAAM;IACN,OAAO3b,IAAM6X,GAAS;AACnB,aAAK8D,EAAgB,SAAS9D,EAAQ,MAAM,IAIrC+D,GAAU5b,IAAM0b,CAAe,IAH5B1b;IAIb;EAAA,GAhCgD;IAChD,MAAM;IACN,OAAO4X,IAAOC,GAAS;AACfA,QAAQ,SAAS,SAAS6D,CAAe,KAI9C7D,EAAQ,QAAQ,QAAQ,GAAG,QAAQ,CAACgE,MAAkB;AACnD,cAAM9b,KAAU,yCAAyC,KAAK8b,EAAM,SAAS,MAAM,CAAC;AAC/E9b,QAAAA,MAIL2B,GAAS;UACN,QAAQmW,EAAQ;UAChB,OAAOiE,GAAmB/b,GAAQ,CAAC,CAAC;UACpC,UAAUlB,EAASkB,GAAQ,CAAC,CAAC;UAC7B,WAAWlB,EAASkB,GAAQ,CAAC,CAAC;UAC9B,OAAOlB,EAASkB,GAAQ,CAAC,CAAC;QAAA,CAC5B;MACJ,CAAC;IACJ;EAAA,CAcuB;AAC7B;AAxCgB0b;AA0ChB,SAASK,GAAmB1gB,IAAe;AACxC,SAAO,OAAOA,GAAM,YAAA,EAAc,MAAM,KAAK,CAAC,CAAC,KAAK;AACvD;AAFS0gB;ACzCF,SAASC,GACb5Y,IACiC;AACjC,QAAMrI,IAAUkhB,GAAK7Y,IAAc,CAAC,OAAO,KAAK,CAAC;AAEjD,SAAO;IACJ,MAAM;IACN,OAAOa,GAAM;AACV,aAAO,EAAE,GAAGlJ,GAAS,GAAGkJ,EAAA;IAC3B;EAAA;AAEN;AAXgB+X;ACDT,SAASE,KAAmD;AAChE,SAAO;IACJ,MAAM;IACN,OAAOjY,IAAM;AACV,YAAMnE,IAAmB,CAAA;AACzB,UAAImL;AACJ,eAAS5N,GAAO4C,GAAgB;AAC7B,SAACgL,IAASA,KAAU,CAAA,GAAI,KAAK,GAAGhL,CAAI;MACvC;AAFS5C,aAAAA,IAAAA;AAIT,eAASR,IAAI,GAAGA,IAAIoH,GAAK,QAAQpH,KAAK;AACnC,cAAMuB,KAAQ6F,GAAKpH,CAAC;AAEpB,YAAIsf,EAAW/d,EAAK,GAAG;AACpBf,UAAAA,GAAO+e,EAAQhe,EAAK,CAAC;AACrB;QACH;AAEA,YAAIA,OAAU,MAAM;AACjBf,UAAAA;YACG4G,GAAK,MAAMpH,IAAI,CAAC,EAAE,QAAQ,CAACR,MAAU8f,EAAW9f,CAAI,KAAK+f,EAAQ/f,CAAI,KAAMA,CAAI;UAAA;AAElF;QACH;AAEAyD,UAAO,KAAK1B,EAAK;MACpB;AAEA,aAAQ6M,IAAkB,CAAC,GAAGnL,GAAQ,MAAM,GAAGmL,EAAO,IAAI,MAAM,CAAC,IAAhDnL;IACpB;EAAA;AAEN;AA/BgBoc;ACAT,SAASG,GAAc;EAC3B,OAAAC;EACA,QAAAxZ,IAAS;EACT,QAAA5D,IAAS;AACZ,GAA2F;AACxF,MAAIod,KAAQ;AACT,WAAO;MACJ,MAAM;MACN,OAAOzE,IAAOC,GAAS;AACpB,YAAI4B;AAEJ,iBAAS6C,IAAO;AACb7C,UAAAA,MAAW,aAAaA,EAAO,GAC/BA,KAAU,WAAW1B,IAAMsE,EAAK;QACnC;AAHSC;AAKT,iBAASC,IAAO;AACb1E,YAAQ,QAAQ,QAAQ,IAAI,QAAQyE,CAAI,GACxCzE,EAAQ,QAAQ,QAAQ,IAAI,QAAQyE,CAAI,GACxCzE,EAAQ,QAAQ,IAAI,QAAQ0E,CAAI,GAChC1E,EAAQ,QAAQ,IAAI,SAAS0E,CAAI,GACjC9C,MAAW,aAAaA,EAAO;QAClC;AANS8C;AAQT,iBAASxE,KAAO;AACbwE,YAAA,GACA1E,EAAQ,KAAK,IAAIC,GAAe,QAAW,WAAW,uBAAuB,CAAC;QACjF;AAHSC,eAAAA,IAAAA;AAKT9Y,aAAU4Y,EAAQ,QAAQ,QAAQ,GAAG,QAAQyE,CAAI,GACjDzZ,KAAUgV,EAAQ,QAAQ,QAAQ,GAAG,QAAQyE,CAAI,GACjDzE,EAAQ,QAAQ,GAAG,QAAQ0E,CAAI,GAC/B1E,EAAQ,QAAQ,GAAG,SAAS0E,CAAI,GAEhCD,EAAA;MACH;IAAA;AAGT;AAtCgBF;ACmBT,IAAMI,KAA8B,wBACxCC,IACA3hB,MACE;AACF,QAAMmc,IAAU,IAAImE,GAAA,GACdjf,KAASugB;IACXD,OAAY,OAAOA,MAAY,WAAW,EAAE,SAAAA,GAAA,IAAYA,OAAa,CAAA;IACtE3hB;EAAA;AAGH,MAAI,CAACuJ,GAAalI,GAAO,OAAO;AAC7B,UAAM,IAAIwgB;MACPxgB;MACA;IAAA;AAIN,SAAI,MAAM,QAAQA,GAAO,MAAM,KAC5B8a,EAAQ,IAAI2B,GAA6Bzc,GAAO,MAAM,CAAC,GAG1D8a,EAAQ,IAAIwB,GAA4Btc,GAAO,MAAM,CAAC,GACtD8a,EAAQ,IAAI+B,GAA0B7c,GAAO,UAAU,CAAC,GACxDA,GAAO,SAAS8a,EAAQ,IAAIS,GAAYvb,GAAO,KAAK,CAAC,GACrDA,GAAO,YAAY8a,EAAQ,IAAIwE,GAAsBtf,GAAO,QAAQ,CAAC,GACrEA,GAAO,WAAW8a,EAAQ,IAAImF,GAAcjgB,GAAO,OAAO,CAAC,GAC3DA,GAAO,gBAAgB8a,EAAQ,IAAI8E,GAAmB5f,GAAO,YAAY,CAAC,GAC1E8a,EAAQ,IAAIgF,GAAAA,CAAmB,GAE/BhF,EAAQ,IAAI8D,GAAY5e,GAAO,KAAK,CAAC,GACrC8a,EAAQ,IAAI6D,GAAqBL,GAAsB,IAAI,CAAC,CAAC,GAC7Dte,GAAO,UAAU8a,EAAQ,IAAI6D,GAAqB3e,GAAO,MAAM,CAAC,GAEhEge,GAAmBlD,GAAS9a,GAAO,QAAQA,GAAO,QAAQ,uBAAuB,GAEjF8a,EAAQ;IACLe,GAAuB7b,GAAO,oBAAoB,CAAA,GAAIA,GAAO,QAAQ,uBAAuB;EAAA,GAGxF,IAAI6a,GAAI7a,IAAQ8a,CAAO;AACjC,GAxC2C;;;ACvB3C,IAAqB,OAArB,MAA0B;AAAA,EAA1B,OAA0B;AAAA;AAAA;AAAA,EACtB,KAAK,QAAQ,QAEb,UAAU,CAAC,GAAG;AACV,QAAI;AACJ,QAAI,OAAO,YAAY,YAAY;AAC/B,iBAAW;AACX,gBAAU,CAAC;AAAA,IACf,WACS,cAAc,SAAS;AAC5B,iBAAW,QAAQ;AAAA,IACvB;AAEA,UAAM,YAAY,KAAK,UAAU,QAAQ,OAAO;AAChD,UAAM,YAAY,KAAK,UAAU,QAAQ,OAAO;AAChD,UAAM,YAAY,KAAK,YAAY,KAAK,SAAS,WAAW,OAAO,CAAC;AACpE,UAAM,YAAY,KAAK,YAAY,KAAK,SAAS,WAAW,OAAO,CAAC;AACpE,WAAO,KAAK,mBAAmB,WAAW,WAAW,SAAS,QAAQ;AAAA,EAC1E;AAAA,EACA,mBAAmB,WAAW,WAAW,SAAS,UAAU;AACxD,QAAI;AACJ,UAAM,OAAO,wBAAC,UAAU;AACpB,cAAQ,KAAK,YAAY,OAAO,OAAO;AACvC,UAAI,UAAU;AACV,mBAAW,WAAY;AAAE,mBAAS,KAAK;AAAA,QAAG,GAAG,CAAC;AAC9C,eAAO;AAAA,MACX,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ,GATa;AAUb,UAAM,SAAS,UAAU,QAAQ,SAAS,UAAU;AACpD,QAAI,aAAa;AACjB,QAAI,gBAAgB,SAAS;AAC7B,QAAI,QAAQ,iBAAiB,MAAM;AAC/B,sBAAgB,KAAK,IAAI,eAAe,QAAQ,aAAa;AAAA,IACjE;AACA,UAAM,oBAAoB,KAAK,QAAQ,aAAa,QAAQ,OAAO,SAAS,KAAK;AACjF,UAAM,sBAAsB,KAAK,IAAI,IAAI;AACzC,UAAM,WAAW,CAAC,EAAE,QAAQ,IAAI,eAAe,OAAU,CAAC;AAE1D,QAAI,SAAS,KAAK,cAAc,SAAS,CAAC,GAAG,WAAW,WAAW,GAAG,OAAO;AAC7E,QAAI,SAAS,CAAC,EAAE,SAAS,KAAK,UAAU,SAAS,KAAK,QAAQ;AAE1D,aAAO,KAAK,KAAK,YAAY,SAAS,CAAC,EAAE,eAAe,WAAW,SAAS,CAAC;AAAA,IACjF;AAkBA,QAAI,wBAAwB,WAAW,wBAAwB;AAE/D,UAAM,iBAAiB,6BAAM;AACzB,eAAS,eAAe,KAAK,IAAI,uBAAuB,CAAC,UAAU,GAAG,gBAAgB,KAAK,IAAI,uBAAuB,UAAU,GAAG,gBAAgB,GAAG;AAClJ,YAAI;AACJ,cAAM,aAAa,SAAS,eAAe,CAAC,GAAG,UAAU,SAAS,eAAe,CAAC;AAClF,YAAI,YAAY;AAGZ,mBAAS,eAAe,CAAC,IAAI;AAAA,QACjC;AACA,YAAI,SAAS;AACb,YAAI,SAAS;AAET,gBAAM,gBAAgB,QAAQ,SAAS;AACvC,mBAAS,WAAW,KAAK,iBAAiB,gBAAgB;AAAA,QAC9D;AACA,cAAM,YAAY,cAAc,WAAW,SAAS,IAAI;AACxD,YAAI,CAAC,UAAU,CAAC,WAAW;AAGvB,mBAAS,YAAY,IAAI;AACzB;AAAA,QACJ;AAIA,YAAI,CAAC,aAAc,UAAU,WAAW,SAAS,QAAQ,QAAS;AAC9D,qBAAW,KAAK,UAAU,SAAS,MAAM,OAAO,GAAG,OAAO;AAAA,QAC9D,OACK;AACD,qBAAW,KAAK,UAAU,YAAY,OAAO,MAAM,GAAG,OAAO;AAAA,QACjE;AACA,iBAAS,KAAK,cAAc,UAAU,WAAW,WAAW,cAAc,OAAO;AACjF,YAAI,SAAS,SAAS,KAAK,UAAU,SAAS,KAAK,QAAQ;AAEvD,iBAAO,KAAK,KAAK,YAAY,SAAS,eAAe,WAAW,SAAS,CAAC,KAAK;AAAA,QACnF,OACK;AACD,mBAAS,YAAY,IAAI;AACzB,cAAI,SAAS,SAAS,KAAK,QAAQ;AAC/B,oCAAwB,KAAK,IAAI,uBAAuB,eAAe,CAAC;AAAA,UAC5E;AACA,cAAI,SAAS,KAAK,QAAQ;AACtB,oCAAwB,KAAK,IAAI,uBAAuB,eAAe,CAAC;AAAA,UAC5E;AAAA,QACJ;AAAA,MACJ;AACA;AAAA,IACJ,GA/CuB;AAoDvB,QAAI,UAAU;AACV,OAAC,gCAAS,OAAO;AACb,mBAAW,WAAY;AACnB,cAAI,aAAa,iBAAiB,KAAK,IAAI,IAAI,qBAAqB;AAChE,mBAAO,SAAS,MAAS;AAAA,UAC7B;AACA,cAAI,CAAC,eAAe,GAAG;AACnB,iBAAK;AAAA,UACT;AAAA,QACJ,GAAG,CAAC;AAAA,MACR,GATC,SASC;AAAA,IACN,OACK;AACD,aAAO,cAAc,iBAAiB,KAAK,IAAI,KAAK,qBAAqB;AACrE,cAAM,MAAM,eAAe;AAC3B,YAAI,KAAK;AACL,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,UAAU,MAAM,OAAO,SAAS,WAAW,SAAS;AAChD,UAAM,OAAO,KAAK;AAClB,QAAI,QAAQ,CAAC,QAAQ,qBAAqB,KAAK,UAAU,SAAS,KAAK,YAAY,SAAS;AACxF,aAAO;AAAA,QACH,QAAQ,KAAK,SAAS;AAAA,QACtB,eAAe,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAc,SAAkB,mBAAmB,KAAK,kBAAkB;AAAA,MACtH;AAAA,IACJ,OACK;AACD,aAAO;AAAA,QACH,QAAQ,KAAK,SAAS;AAAA,QACtB,eAAe,EAAE,OAAO,GAAG,OAAc,SAAkB,mBAAmB,KAAK;AAAA,MACvF;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,cAAc,UAAU,WAAW,WAAW,cAAc,SAAS;AACjE,UAAM,SAAS,UAAU,QAAQ,SAAS,UAAU;AACpD,QAAI,SAAS,SAAS,QAAQ,SAAS,SAAS,cAAc,cAAc;AAC5E,WAAO,SAAS,IAAI,UAAU,SAAS,IAAI,UAAU,KAAK,OAAO,UAAU,SAAS,CAAC,GAAG,UAAU,SAAS,CAAC,GAAG,OAAO,GAAG;AACrH;AACA;AACA;AACA,UAAI,QAAQ,mBAAmB;AAC3B,iBAAS,gBAAgB,EAAE,OAAO,GAAG,mBAAmB,SAAS,eAAe,OAAO,OAAO,SAAS,MAAM;AAAA,MACjH;AAAA,IACJ;AACA,QAAI,eAAe,CAAC,QAAQ,mBAAmB;AAC3C,eAAS,gBAAgB,EAAE,OAAO,aAAa,mBAAmB,SAAS,eAAe,OAAO,OAAO,SAAS,MAAM;AAAA,IAC3H;AACA,aAAS,SAAS;AAClB,WAAO;AAAA,EACX;AAAA,EACA,OAAO,MAAM,OAAO,SAAS;AACzB,QAAI,QAAQ,YAAY;AACpB,aAAO,QAAQ,WAAW,MAAM,KAAK;AAAA,IACzC,OACK;AACD,aAAO,SAAS,SACR,CAAC,CAAC,QAAQ,cAAc,KAAK,YAAY,MAAM,MAAM,YAAY;AAAA,IAC7E;AAAA,EACJ;AAAA,EACA,YAAY,OAAO;AACf,UAAM,MAAM,CAAC;AACb,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,UAAI,MAAM,CAAC,GAAG;AACV,YAAI,KAAK,MAAM,CAAC,CAAC;AAAA,MACrB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,UAAU,OAAO,SAAS;AACtB,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,SAAS,OAAO,SAAS;AACrB,WAAO,MAAM,KAAK,KAAK;AAAA,EAC3B;AAAA,EACA,KAAK,OAAO;AAKR,WAAO,MAAM,KAAK,EAAE;AAAA,EACxB;AAAA,EACA,YAAY,eAEZ,SAAS;AACL,WAAO;AAAA,EACX;AAAA,EACA,IAAI,kBAAkB;AAClB,WAAO;AAAA,EACX;AAAA,EACA,YAAY,eAAe,WAAW,WAAW;AAG7C,UAAM,aAAa,CAAC;AACpB,QAAI;AACJ,WAAO,eAAe;AAClB,iBAAW,KAAK,aAAa;AAC7B,sBAAgB,cAAc;AAC9B,aAAO,cAAc;AACrB,sBAAgB;AAAA,IACpB;AACA,eAAW,QAAQ;AACnB,UAAM,eAAe,WAAW;AAChC,QAAI,eAAe,GAAG,SAAS,GAAG,SAAS;AAC3C,WAAO,eAAe,cAAc,gBAAgB;AAChD,YAAM,YAAY,WAAW,YAAY;AACzC,UAAI,CAAC,UAAU,SAAS;AACpB,YAAI,CAAC,UAAU,SAAS,KAAK,iBAAiB;AAC1C,cAAI,QAAQ,UAAU,MAAM,QAAQ,SAAS,UAAU,KAAK;AAC5D,kBAAQ,MAAM,IAAI,SAAU2F,QAAO,GAAG;AAClC,kBAAM,WAAW,UAAU,SAAS,CAAC;AACrC,mBAAO,SAAS,SAASA,OAAM,SAAS,WAAWA;AAAA,UACvD,CAAC;AACD,oBAAU,QAAQ,KAAK,KAAK,KAAK;AAAA,QACrC,OACK;AACD,oBAAU,QAAQ,KAAK,KAAK,UAAU,MAAM,QAAQ,SAAS,UAAU,KAAK,CAAC;AAAA,QACjF;AACA,kBAAU,UAAU;AAEpB,YAAI,CAAC,UAAU,OAAO;AAClB,oBAAU,UAAU;AAAA,QACxB;AAAA,MACJ,OACK;AACD,kBAAU,QAAQ,KAAK,KAAK,UAAU,MAAM,QAAQ,SAAS,UAAU,KAAK,CAAC;AAC7E,kBAAU,UAAU;AAAA,MACxB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;;;AC3PA,IAAM,gBAAN,cAA4B,KAAK;AAAA,EADjC,OACiC;AAAA;AAAA;AACjC;AACO,IAAM,gBAAgB,IAAI,cAAc;AACxC,SAAS,UAAU,QAAQ,QAAQ,SAAS;AAC/C,SAAO,cAAc,KAAK,QAAQ,QAAQ,OAAO;AACrD;AAFgB;;;ACFhB,IAAM,WAAN,cAAuB,KAAK;AAAA,EAF5B,OAE4B;AAAA;AAAA;AAAA,EACxB,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,WAAW;AAAA,EACpB;AAAA,EACA,OAAO,MAAM,OAAO,SAAS;AAQzB,QAAI,QAAQ,kBAAkB;AAC1B,UAAI,CAAC,QAAQ,kBAAkB,CAAC,KAAK,SAAS,IAAI,GAAG;AACjD,eAAO,KAAK,KAAK;AAAA,MACrB;AACA,UAAI,CAAC,QAAQ,kBAAkB,CAAC,MAAM,SAAS,IAAI,GAAG;AAClD,gBAAQ,MAAM,KAAK;AAAA,MACvB;AAAA,IACJ,WACS,QAAQ,sBAAsB,CAAC,QAAQ,gBAAgB;AAC5D,UAAI,KAAK,SAAS,IAAI,GAAG;AACrB,eAAO,KAAK,MAAM,GAAG,EAAE;AAAA,MAC3B;AACA,UAAI,MAAM,SAAS,IAAI,GAAG;AACtB,gBAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO,MAAM,OAAO,MAAM,OAAO,OAAO;AAAA,EAC5C;AACJ;AACO,IAAM,WAAW,IAAI,SAAS;AAC9B,SAAS,UAAU,QAAQ,QAAQ,SAAS;AAC/C,SAAO,SAAS,KAAK,QAAQ,QAAQ,OAAO;AAChD;AAFgB;AAQT,SAAS,SAAS,OAAO,SAAS;AACrC,MAAI,QAAQ,iBAAiB;AAEzB,YAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,EACvC;AACA,QAAM,WAAW,CAAC,GAAG,mBAAmB,MAAM,MAAM,WAAW;AAE/D,MAAI,CAAC,iBAAiB,iBAAiB,SAAS,CAAC,GAAG;AAChD,qBAAiB,IAAI;AAAA,EACzB;AAEA,WAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC9C,UAAM,OAAO,iBAAiB,CAAC;AAC/B,QAAI,IAAI,KAAK,CAAC,QAAQ,gBAAgB;AAClC,eAAS,SAAS,SAAS,CAAC,KAAK;AAAA,IACrC,OACK;AACD,eAAS,KAAK,IAAI;AAAA,IACtB;AAAA,EACJ;AACA,SAAO;AACX;AArBgB;;;ACtChB,SAAS,aAAa,GAAG;AACrB,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AAC/B,QAAI,EAAE,CAAC,IAAI,OAAU,EAAE,CAAC,IAAI,OAAU,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,MAAM;AACjE,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX;AAPS;AAoBT,SAAS,sBAAsB,GAAG;AAC9B,MAAI,CAAC,aAAa,CAAC,GAAG;AAClB,WAAO;AAAA,EACX;AACA,MAAI,SAAS;AACb,QAAM,QAAQ,IAAI,YAAY,EAAE,OAAO,CAAC;AACxC,MAAI,IAAI;AACR,SAAO,IAAI,MAAM,QAAQ;AACrB,UAAMC,KAAI,MAAM,CAAC;AAEjB,QAAIA,OAAM,GAAM;AACZ,gBAAU;AAAA,IACd,WACSA,OAAM,GAAM;AACjB,gBAAU;AAAA,IACd,WACSA,OAAM,GAAM;AACjB,gBAAU;AAAA,IACd,WACSA,OAAM,IAAM;AACjB,gBAAU;AAAA,IACd,WACSA,OAAM,IAAM;AACjB,gBAAU;AAAA,IACd,WACSA,OAAM,IAAM;AACjB,gBAAU;AAAA,IACd,WACSA,OAAM,IAAM;AACjB,gBAAU;AAAA,IACd,WACSA,OAAM,IAAM;AACjB,gBAAU;AAAA,IACd,WACSA,OAAM,IAAM;AACjB,gBAAU;AAAA,IACd,WACSA,MAAK,MAAQA,MAAK,KAAM;AAG7B,gBAAU,OAAO,aAAaA,EAAC;AAAA,IACnC,OACK;AAGD,gBAAU,OAAOA,GAAE,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AAAA,IAClD;AACA;AAAA,EACJ;AACA,YAAU;AACV,SAAO;AACX;AAnDS;AAoDF,IAAM,kBAAkB;AAAA,EAC3B,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,oBAAoB;AACxB;AAWO,SAAS,gBAAgB,aAAa,aAAa,QAAQ,QAAQ,WAAW,WAAW,SAAS;AACrG,MAAI;AACJ,MAAI,CAAC,SAAS;AACV,iBAAa,CAAC;AAAA,EAClB,WACS,OAAO,YAAY,YAAY;AACpC,iBAAa,EAAE,UAAU,QAAQ;AAAA,EACrC,OACK;AACD,iBAAa;AAAA,EACjB;AACA,MAAI,OAAO,WAAW,YAAY,aAAa;AAC3C,eAAW,UAAU;AAAA,EACzB;AAGA,QAAM,UAAU,WAAW;AAE3B,MAAI,WAAW,gBAAgB;AAC3B,UAAM,IAAI,MAAM,6FAA6F;AAAA,EACjH;AACA,MAAI,CAAC,WAAW,UAAU;AACtB,WAAO,uBAAuB,UAAU,QAAQ,QAAQ,UAAU,CAAC;AAAA,EACvE,OACK;AACD,UAAM,EAAE,SAAS,IAAI;AACrB,cAAU,QAAQ,QAAQ,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,UAAU,GAAG,EAAE,UAAU,wBAAC,SAAS;AACrF,YAAM,QAAQ,uBAAuB,IAAI;AAGzC,eAAS,KAAK;AAAA,IAClB,GAL+E,YAK7E,CAAC,CAAC;AAAA,EACZ;AACA,WAAS,uBAAuB,MAAM;AAGlC,QAAI,CAAC,MAAM;AACP;AAAA,IACJ;AACA,SAAK,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC;AAClC,aAAS,aAAa,OAAO;AACzB,aAAO,MAAM,IAAI,SAAU,OAAO;AAAE,eAAO,MAAM;AAAA,MAAO,CAAC;AAAA,IAC7D;AAFS;AAGT,UAAM,QAAQ,CAAC;AACf,QAAI,gBAAgB,GAAG,gBAAgB,GAAG,WAAW,CAAC,GAAG,UAAU,GAAG,UAAU;AAChF,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,YAAM,UAAU,KAAK,CAAC,GAAG,QAAQ,QAAQ,SAAS,WAAW,QAAQ,KAAK;AAC1E,cAAQ,QAAQ;AAChB,UAAI,QAAQ,SAAS,QAAQ,SAAS;AAElC,YAAI,CAAC,eAAe;AAChB,gBAAM,OAAO,KAAK,IAAI,CAAC;AACvB,0BAAgB;AAChB,0BAAgB;AAChB,cAAI,MAAM;AACN,uBAAW,UAAU,IAAI,aAAa,KAAK,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AACrE,6BAAiB,SAAS;AAC1B,6BAAiB,SAAS;AAAA,UAC9B;AAAA,QACJ;AAEA,mBAAW,QAAQ,OAAO;AACtB,mBAAS,MAAM,QAAQ,QAAQ,MAAM,OAAO,IAAI;AAAA,QACpD;AAEA,YAAI,QAAQ,OAAO;AACf,qBAAW,MAAM;AAAA,QACrB,OACK;AACD,qBAAW,MAAM;AAAA,QACrB;AAAA,MACJ,OACK;AAED,YAAI,eAAe;AAEf,cAAI,MAAM,UAAU,UAAU,KAAK,IAAI,KAAK,SAAS,GAAG;AAEpD,uBAAW,QAAQ,aAAa,KAAK,GAAG;AACpC,uBAAS,KAAK,IAAI;AAAA,YACtB;AAAA,UACJ,OACK;AAED,kBAAM,cAAc,KAAK,IAAI,MAAM,QAAQ,OAAO;AAClD,uBAAW,QAAQ,aAAa,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG;AAC1D,uBAAS,KAAK,IAAI;AAAA,YACtB;AACA,kBAAM,OAAO;AAAA,cACT,UAAU;AAAA,cACV,UAAW,UAAU,gBAAgB;AAAA,cACrC,UAAU;AAAA,cACV,UAAW,UAAU,gBAAgB;AAAA,cACrC,OAAO;AAAA,YACX;AACA,kBAAM,KAAK,IAAI;AACf,4BAAgB;AAChB,4BAAgB;AAChB,uBAAW,CAAC;AAAA,UAChB;AAAA,QACJ;AACA,mBAAW,MAAM;AACjB,mBAAW,MAAM;AAAA,MACrB;AAAA,IACJ;AAGA,eAAW,QAAQ,OAAO;AACtB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,YAAI,KAAK,MAAM,CAAC,EAAE,SAAS,IAAI,GAAG;AAC9B,eAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE;AAAA,QAC7C,OACK;AACD,eAAK,MAAM,OAAO,IAAI,GAAG,GAAG,8BAA8B;AAC1D;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,MACH;AAAA,MAA0B;AAAA,MAC1B;AAAA,MAAsB;AAAA,MACtB;AAAA,IACJ;AAAA,EACJ;AA1FS;AA2Fb;AA5HgB;AA0IT,SAAS,YAAY,OAAO,eAAe;AAC9C,MAAI,IAAI,IAAI,IAAI,IAAIC,KAAI;AACxB,MAAI,CAAC,eAAe;AAChB,oBAAgB;AAAA,EACpB;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,QAAI,MAAM,SAAS,KAAK,CAAC,cAAc,sBAAsB,CAAC,MAAM,MAAM,CAAAC,OAAKA,GAAE,KAAK,GAAG;AACrF,YAAM,IAAI,MAAM,qKAEwC;AAAA,IAC5D;AACA,WAAO,MAAM,IAAI,CAAAA,OAAK,YAAYA,IAAG,aAAa,CAAC,EAAE,KAAK,IAAI;AAAA,EAClE;AACA,QAAM,MAAM,CAAC;AAGb,MAAI,MAAM,OAAO;AACb,oBAAgB;AAIhB,QAAI,CAAC,MAAM,aAAa;AACpB,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACnE;AACA,QAAI,CAAC,MAAM,aAAa;AACpB,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACnE;AACA,QAAI,aAAa,MAAM;AACvB,QAAI,aAAa,MAAM;AACvB,QAAI,MAAM,YAAY,eAAe,aAAa;AAC9C,mBAAa,WAAW,QAAQ,QAAQ,IAAI;AAAA,IAChD,WACS,MAAM,YAAY,eAAe,aAAa;AACnD,mBAAa,WAAW,QAAQ,QAAQ,IAAI;AAAA,IAChD;AACA,QAAI,KAAK,gBAAgB,sBAAsB,UAAU,IAAI,MAAM,sBAAsB,UAAU,CAAC;AACpG,QAAI,MAAM,UAAU;AAChB,UAAI,KAAK,yBAAyB,KAAK,MAAM,aAAa,QAAQ,OAAO,SAAS,KAAK,SAAS;AAAA,IACpG;AACA,QAAI,MAAM,UAAU;AAChB,UAAI,KAAK,qBAAqB,KAAK,MAAM,aAAa,QAAQ,OAAO,SAAS,KAAK,SAAS;AAAA,IAChG;AACA,QAAI,MAAM,WAAW,MAAM,WAAW,CAAC,MAAM,YAAY,CAAC,MAAM,UAAU;AACtE,UAAI,KAAK,cAAc,MAAM,OAAO;AACpC,UAAI,KAAK,cAAc,MAAM,OAAO;AAAA,IACxC;AACA,QAAI,MAAM,UAAU;AAChB,UAAI,KAAK,iBAAiB,wBAAwB,KAAK,MAAM,iBAAiB,QAAQ,OAAO,SAAS,KAAK,IAAI,QAAQ,QAAQ,EAAE,CAAC,CAAC;AACnI,UAAI,KAAK,eAAe,wBAAwB,KAAK,MAAM,iBAAiB,QAAQ,OAAO,SAAS,KAAK,IAAI,QAAQ,QAAQ,EAAE,CAAC,CAAC;AAAA,IACrI;AACA,QAAI,MAAM,QAAQ;AACd,UAAI,KAAK,eAAe,wBAAwBD,MAAK,MAAM,iBAAiB,QAAQA,QAAO,SAASA,MAAK,IAAI,QAAQ,QAAQ,EAAE,CAAC,CAAC;AACjI,UAAI,KAAK,aAAa,wBAAwB,KAAK,MAAM,iBAAiB,QAAQ,OAAO,SAAS,KAAK,IAAI,QAAQ,QAAQ,EAAE,CAAC,CAAC;AAAA,IACnI;AAAA,EACJ,OACK;AACD,QAAI,cAAc,gBAAgB,MAAM,eAAe,MAAM,eAAe,MAAM,gBAAgB,QAAW;AACzG,UAAI,KAAK,YAAY,MAAM,WAAW;AAAA,IAC1C;AACA,QAAI,cAAc,kBAAkB;AAChC,UAAI,KAAK,qEAAqE;AAAA,IAClF;AAAA,EACJ;AAGA,QAAM,WAAW,MAAM,MAAM,SAAS;AACtC,MAAI,cAAc,sBAAsB,MAAM,gBAAgB,UAAa,MAAM,gBAAgB,WACzF,CAAC,MAAM,SAAS,WAAW;AAC/B,QAAI,KAAK,SAAS,sBAAsB,MAAM,WAAW,KAAK,MAAM,YAAY,MAAO,MAAM,YAAY,GAAG;AAC5G,QAAI,KAAK,SAAS,sBAAsB,MAAM,WAAW,KAAK,MAAM,YAAY,MAAO,MAAM,YAAY,GAAG;AAAA,EAChH;AACA,WAAS,IAAI,GAAG,IAAI,MAAM,MAAM,QAAQ,KAAK;AACzC,UAAM,OAAO,MAAM,MAAM,CAAC;AAI1B,UAAM,WAAW,KAAK,aAAa,IAAI,KAAK,WAAW,IAAI,KAAK;AAChE,UAAM,WAAW,KAAK,aAAa,IAAI,KAAK,WAAW,IAAI,KAAK;AAChE,QAAI,KAAK,SAAS,WAAW,MAAM,KAAK,WAClC,OAAO,WAAW,MAAM,KAAK,WAC7B,KAAK;AACX,eAAW,QAAQ,KAAK,OAAO;AAC3B,UAAI,KAAK,IAAI;AAAA,IACjB;AAAA,EACJ;AACA,SAAO,IAAI,KAAK,IAAI,IAAI;AAC5B;AAtFgB;AAuFT,SAAS,oBAAoB,aAAa,aAAa,QAAQ,QAAQ,WAAW,WAAW,SAAS;AACzG,MAAI,OAAO,YAAY,YAAY;AAC/B,cAAU,EAAE,UAAU,QAAQ;AAAA,EAClC;AACA,MAAI,EAAE,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,WAAW;AACvE,UAAM,WAAW,gBAAgB,aAAa,aAAa,QAAQ,QAAQ,WAAW,WAAW,OAAO;AACxG,QAAI,CAAC,UAAU;AACX;AAAA,IACJ;AACA,WAAO,YAAY,UAAU,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,aAAa;AAAA,EACxG,OACK;AACD,UAAM,EAAE,SAAS,IAAI;AACrB,oBAAgB,aAAa,aAAa,QAAQ,QAAQ,WAAW,WAAW,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,UAAU,qCAAY;AAC1I,UAAI,CAAC,UAAU;AACX,iBAAS,MAAS;AAAA,MACtB,OACK;AACD,iBAAS,YAAY,UAAU,QAAQ,aAAa,CAAC;AAAA,MACzD;AAAA,IACJ,GAPkI,YAOhI,CAAC,CAAC;AAAA,EACZ;AACJ;AAtBgB;AAuBT,SAAS,YAAY,UAAU,QAAQ,QAAQ,WAAW,WAAW,SAAS;AACjF,SAAO,oBAAoB,UAAU,UAAU,QAAQ,QAAQ,WAAW,WAAW,OAAO;AAChG;AAFgB;AAMhB,SAAS,WAAW,MAAM;AACtB,QAAM,gBAAgB,KAAK,SAAS,IAAI;AACxC,QAAM,SAAS,KAAK,MAAM,IAAI,EAAE,IAAI,UAAQ,OAAO,IAAI;AACvD,MAAI,eAAe;AACf,WAAO,IAAI;AAAA,EACf,OACK;AACD,WAAO,KAAK,OAAO,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,EACzC;AACA,SAAO;AACX;AAVS;;;AjHnVT,SAAS,sBAAsB;AA+IzB,IAAO,qBAAP,cAAkC,MAAK;EAtJ7C,OAsJ6C;;;EACtB;EAArB,YAAqB,YAA2B,OAAc;AAC5D,UAAM,WAAW,SAAS,yBAAyB,EAAE,MAAK,CAAE;sBADzC;AAEnB,SAAK,OAAO;EACd;;AAGI,IAAO,4BAAP,cAAyC,MAAK;EA7JpD,OA6JoD;;;EAClD,YAAY,SAAiB,SAAsB;AACjD,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;EACd;;AAII,IAAO,sBAAP,MAAO,qBAAmB;EArKhC,OAqKgC;;;EACrB;EACD;EACA;EACR,IAAI,aAAU;AAAyB,WAAO,KAAK;EAAgB;EACnE,IAAI,YAAS;AAAa,WAAO,KAAK;EAAiB;EAC9C;EACA;EACD;EACA;EACA;EACS;EACA;EACT;EACA;EAER,YAAoB,SAAqC,WAAmB,YAAgC,iBAAuB;AACjI,SAAK,UAAU;AACf,SAAK,kBAAkB;AACvB,SAAK,YAAY;AACjB,SAAK,iBAAiB;AACtB,SAAK,aAAa,QAAQ,eAAe;AACzC,SAAK,WAAW,QAAQ,aAAa;AACrC,SAAK,kBAAkB,OAAO,eAAe;AAC7C,SAAK,MAAM,GAAU;MAAE,SAAS,cAAc;MAAW,wBAAwB;MAAG,SAAS;MAC3F,QAAQ,CAAC,sBAAsB;MAAG,kBAAkB,CAAC,yBAAyB;IAAC,CAAE;AACnF,SAAK,SAAS,GAAU;MAAE,SAAS,cAAc;MAAW,QAAQ,CAAC,OAAO,qBAAqB;MAC/F,wBAAwB;MAAG,SAAS;MAAM,QAAQ,CAAC,sBAAsB;MAAG,kBAAkB,CAAC,yBAAyB;IAAC,CAAE;AAC7H,SAAK,YAAY,KAAK,QAAQ,QAAQ,YAAY,KAAK,QAAO,GAAI,QAAQ,gBAAgB,CAAC,GAAG,KAAK,SAAS;AAC5G,SAAK,gBAAgB,QAAQ,QAAQ,iBAAiB,KAAK,QAAO,GAAI,QAAQ,WAAW,CAAC;AAC1F,QAAI,eAAe,WAAc,SAAS,YAAY,KAAK,SAAS,KAAK,SAAS,YAAY,KAAK,aAAa,IAAI;AAClH,YAAM,IAAI,MAAM,2FAA2F;IAC7G;EACF;EAEA,aAAa,KAAK,SAAmC;AACnD,UAAM,YAAY,MAAME,UAAS,QAAQ,QAAQ,SAAS,CAAC;AAC3D,QAAI,EAAE,MAAM,MAAM,SAAS,GAAG,YAAW;AAAI,YAAM,IAAI,MAAM,mCAAmC;AAChG,UAAM,MAAM,GAAU,EAAE,SAAS,WAAW,wBAAwB,GAAG,kBAAkB,CAAC,yBAAyB,EAAC,CAAE;AACtH,UAAM,UAAU,MAAM,IAAI,QAAO;AACjC,QAAI,CAAC,QAAQ;AAAW,YAAM,IAAI,MAAM,oBAAoB;AAC5D,QAAI,QAAQ,QAAQ,KAAM,QAAQ,UAAU,KAAK,QAAQ,QAAQ;AAAK,YAAM,IAAI,MAAM,+BAA+B;AACrH,QAAI,UAAU,MAAM,IAAI,YAAW;AACnC,QAAI,CAAC,WAAW,QAAQ,eAAe,SAAS,QAAQ,aAAa,QAAQ,CAAC,QAAQ,qBAAqB;AACzG,YAAM,IAAI,KAAI;AACd,gBAAU;IACZ;AACA,UAAM,WAAW,UAAU,MAAM,mBAAmB,KAAK,SAAS,IAAI;AACtE,UAAM,aAAa,UAAU;AAC7B,UAAM,kBAAkB,UAAU,mBAAmB;AACrD,UAAM,QAAQ,IAAI,qBAAoB,SAAS,WAAW,YAAY,eAAe;AACrF,QAAI,CAAC,MAAM,YAAY,CAAC,QAAQ;AAAqB,YAAM,MAAM,MAAM,WAAW,EAAE,WAAW,KAAI,CAAE;AACrG,WAAO;EACT;EAEA,MAAM,SAAM;AACV,YAAQ,MAAM,KAAK,cAAa,GAAI;EACtC;;EAGA,MAAM,UAAO;AACX,UAAM,OAAO,EAAE,WAAW,KAAK,WAAW,WAAW,KAAK,WAAW,YAAY,KAAK,YAAY,UAAU,KAAK,SAAQ;AACzH,QAAI,CAAC,KAAK,YAAY;AACpB,UAAI,MAAM,KAAK,OAAO,YAAW;AAAI,cAAM,IAAI,MAAM,iEAAiE;AACtH,aAAO,EAAE,GAAG,MAAM,OAAO,aAAa,UAAU,MAAK;IACvD;AACA,UAAM,KAAK,eAAc;AACzB,UAAM,OAAO,MAAM,KAAK,OAAO,IAAI,CAAC,aAAa,eAAe,MAAM,CAAC;AACvE,UAAM,UAAU,MAAM,KAAK,OAAO,IAAI,CAAC,UAAU,gBAAgB,CAAC,GAAG,KAAI;AACzE,WAAO;MAAE,GAAG;MAAM,YAAY,KAAK;MAAY,OAAO,KAAK,KAAI,IAAK,UAAU;MAAU,UAAU,CAAC;MACjG,GAAI,SAAS,EAAE,OAAM,IAAK,CAAA;MAAK,GAAI,KAAK,KAAI,IAAK,EAAE,QAAQ,KAAK,KAAI,EAAE,IAAK,CAAA;IAAG;EAClF;EAEQ,aAAU;AAChB,QAAI,KAAK;AAAgB,aAAO,KAAK;AACrC,UAAM,aAAa,YAAW;AAC5B,UAAI,CAAC,KAAK,QAAQ;AAAqB;AACvC,UAAI,KAAK;AAAY,cAAM,KAAK,eAAc;AAC9C,YAAM,cAAc,MAAM,qBAAoB,KAAK,EAAE,GAAG,KAAK,SAAS,qBAAqB,MAAK,CAAE;AAClG,WAAK,iBAAiB,YAAY;AAClC,WAAK,kBAAkB,YAAY;AACnC,WAAK,kBAAkB,YAAY;AACnC,WAAK,YAAY,YAAY;AAC7B,WAAK,MAAM,YAAY;AACvB,WAAK,SAAS,YAAY;IAC5B,GAAE;AACF,SAAK,iBAAiB;AACtB,SAAK,UAAU,MAAM,MAAK;AAAG,UAAI,KAAK,mBAAmB;AAAW,aAAK,iBAAiB;IAAW,CAAC;AACtG,WAAO;EACT;EAEQ,MAAM,gBAAa;AACzB,QAAI,KAAK,eAAe,QAAW;AACjC,UAAI,MAAM,KAAK,OAAO,YAAW;AAAI,cAAM,IAAI,MAAM,iEAAiE;AACtH,aAAO,EAAE,OAAO;QAAE,WAAW,KAAK;QAAW,WAAW,KAAK;QAAW,YAAY,KAAK;QACvF,UAAU,KAAK;QAAU,OAAO;QAAa,UAAU;QAAO,OAAO;MAAK,EAAE;IAChF;AACA,UAAM,KAAK,eAAc;AACzB,UAAM,SAAS,MAAM,KAAK,OAAO,OAAO,CAAC,uBAAuB,CAAC;AACjE,UAAM,SAAS,MAAM,KAAK,KAAK,MAAM;AACrC,WAAO,EAAE,OAAO,QAAQ,OAAO;MAAE,WAAW,KAAK;MAAW,YAAY,KAAK;MAAY,WAAW,KAAK;MACvG,YAAY,KAAK;MAAY,UAAU,KAAK;MAAU,OAAO,WAAW,SAAY,WAAW;MAC/F,GAAI,OAAO,YAAY,CAAC,OAAO,UAAU,CAAA,IAAK,EAAE,QAAQ,OAAO,QAAO;MACtE,GAAI,WAAW,SAAY,CAAA,IAAK,EAAE,OAAM;MAAK,UAAU,OAAO;MAAU,OAAO,CAAC,OAAO,QAAO;IAAE,EAAE;EACtG;EAEA,MAAM,QAAQ,WAAiB;AAC7B,UAAM,KAAK,WAAU;AACrB,SAAK,kBAAiB;AACtB,UAAM,OAAO,MAAM,KAAK,YAAW;AACnC,QAAI;AACF,YAAM,KAAK,cAAa;AACxB,aAAO,MAAM,KAAK,eAAe,EAAE,UAAS,GAAI,QAAW,qCAAqC,MAAM,WAAW;IACnH;AAAY,YAAM,KAAK,MAAK;IAAI;EAClC;EAEA,MAAM,WAAW,SAAwB;AACvC,UAAM,KAAK,WAAU;AACrB,SAAK,kBAAiB;AACtB,UAAM,OAAO,MAAM,KAAK,YAAW;AACnC,QAAI;AACF,YAAM,KAAK,cAAa;AACxB,UAAI,KAAK,cAAc,CAAC,KAAK;AAAU,cAAM,KAAK,kBAAiB;AACnE,YAAM,cAAc,MAAM,KAAK,YAAY,QAAQ,SAAS;AAC5D,YAAM,oBAAoB,YAAY,KAAK,WAAS,MAAM,cAAc,KAAK,cACzE,MAAM,WAAW,WAAc,MAAM,WAAW,eAAe,MAAM,WAAW,gBAC/E,CAAC,KAAK,cAAc,MAAM,WAAW,cAAe;AACzD,UAAI,CAAC,qBAAqB,KAAK,YAAY;AACzC,cAAM,KAAK,eAAe,EAAE,WAAW,QAAQ,UAAS,GAAI,QAAW,qCAAqC,MAAM,WAAW;MAC/H;AACA,YAAM,cAAc,MAAM,KAAK,OAAM,GAAI;AACzC,UAAI,WAAW;AACf,aAAO;QACL,GAAI,eAAe,SAAY,CAAA,IAAK,EAAE,WAAU;QAChD,UAAU,8BAAO,eAAc;AAC7B,cAAI;AAAU,kBAAM,IAAI,MAAM,uCAAuC;AACrE,qBAAW;AACX,cAAI;AACF,mBAAO,MAAM,KAAK,eAAe;cAAE,GAAG;cACpC,GAAI,WAAW,UAAU,SAAY,CAAA,IAAK,EAAE,OAAO,WAAW,MAAK;cACnE,GAAI,WAAW,WAAW,SAAY,CAAA,IAAK,EAAE,QAAQ,WAAW,OAAM;cACtE,GAAI,WAAW,oBAAoB,SAAY,CAAA,IAAK,EAAE,iBAAiB,WAAW,gBAAe;YAAG,GACtG,YAAY,WAAW,iBAAiB,0CAA0C,OAAO,WAAW,OAAO;UAC7G;AAAY,kBAAM,KAAK,MAAK;UAAI;QAClC,GAVU;QAWV,OAAO,mCAAW;AAAG,qBAAW;AAAM,gBAAM,KAAK,MAAK;QAAI,GAAnD;;IAEX,SAAS,OAAO;AAAE,YAAM,KAAK,MAAK;AAAI,YAAM;IAAO;EACrD;EAEA,MAAM,YAAY,WAAkB;AAClC,UAAM,UAAU,MAAM,KAAK,YAA2B,aAAa;AACnE,WAAO,QAAQ,OAAO,WAAS,cAAc,UAAa,MAAM,cAAc,SAAS,EACpF,KAAK,CAAC,MAAM,UAAU,KAAK,YAAY,MAAM,SAAS;EAC3D;EAEA,MAAM,eAAe,IAAY,iBAAgC;AAC/D,SAAK,eAAc;AACnB,UAAM,aAAa,MAAM,KAAK,WAAW,EAAE;AAC3C,UAAM,QAAQ,EAAE,GAAG,YAAY,gBAAe;AAC9C,UAAM,KAAK,YAAY,eAAe,IAAI,KAAK;AAC/C,WAAO;EACT;EAEA,MAAM,gBAAgB,WAAmB,OAAa;AACpD,WAAO,CAAC,GAAG,MAAM,KAAK,YAAY,SAAS,CAAC,EAAE,QAAO,EAAG,KAAK,WAAS,MAAM,UAAU,SAAS,MAAM,QAAQ,SAAS,KAAK,CAAC;EAC9H;EAEA,MAAM,WAAW,IAAU;AACzB,eAAW,EAAE;AACb,UAAM,QAAQ,MAAM,SAAwB,KAAK,KAAK,WAAW,eAAe,GAAG,EAAE,OAAO,GAAG,CAAC,KAAK,QAAQ;AAC7G,QAAI,CAAC,SAAS,MAAM,OAAO;AAAI,YAAM,IAAI,MAAM,gDAAgD;AAC/F,WAAO;EACT;EAEA,MAAM,KAAK,SAAgF;AACzF,SAAK,kBAAiB;AACtB,UAAM,KAAK,eAAc;AACzB,UAAM,OAAO,MAAM,KAAK,cAAc,QAAQ,IAAI;AAClD,UAAMC,MAAK,QAAQ,OAAO,SAAY,SAAY,MAAM,KAAK,cAAc,QAAQ,EAAE;AACrF,UAAM,QAAQ,QAAQ,SAAS,SAAY,CAAA,IAAK,CAAC,YAAY,KAAK,aAAa,QAAQ,IAAI,CAAC,CAAC;AAC7F,UAAM,OAAO,CAAC,iBAAiB,iBAAiB,kBAAkB,MAAM,GAAIA,QAAO,SAAY,CAAA,IAAK,CAACA,GAAE,CAAE;AACzG,UAAM,QAAQ,MAAM,KAAK,OAAO,YAAY,CAAC,iBAAiB,GAAG,MAAM,MAAM,GAAG,KAAK,CAAC;AACtF,UAAM,QAAuB,CAAA;AAC7B,eAAW,SAAS,MAAM,OAAO;AAC/B,UAAI,KAAK,SAAS,MAAM,IAAI,KAAM,UAAU,SAAS,MAAM,SAAS,UAAa,KAAK,SAAS,MAAM,IAAI;AAAI;AAC7G,YAAM,YAAY,CAAC,YAAY,MAAM,IAAI,GAAG,GAAI,UAAU,SAAS,MAAM,SAAS,SAAY,CAAC,YAAY,MAAM,IAAI,CAAC,IAAI,CAAA,CAAG;AAC7H,YAAM,QAAQ,MAAM,KAAK,OAAO,YAAY,CAAC,aAAa,GAAG,MAAM,MAAM,GAAG,SAAS,CAAC;AACtF,YAAM,QAAQ,MAAM,KAAK,OAAO,KAAK,CAAC,GAAG,MAAM,MAAM,GAAG,SAAS,CAAC;AAClE,UAAI,UAAU;AAAI,cAAM,IAAI,MAAM,6CAA6C,MAAM,IAAI,EAAE;AAC3F,YAAM,SAAS,YAAY,QAAQ,WAAW,MAAM,MAAM,IAAI;AAC9D,YAAM,KAAK;QAAE,MAAM,MAAM;QAAM,GAAI,UAAU,SAAS,MAAM,SAAS,SAAY,EAAE,cAAc,MAAM,KAAI,IAAK,CAAA;QAC9G;QAAQ;QAAO,QAAQ,MAAM,MAAM,KAAK,UAAQ,KAAK,MAAM;QAAG,YAAY,MAAM;QAAY,WAAW,MAAM;MAAS,CAAE;IAC5H;AACA,UAAM,YAAYA,QAAO,UAAa,MAAM,KAAK,OAAO,OAAO,CAAC,uBAAuB,CAAC,GAAG,UACxF,OAAO,UAAQ,CAAC,KAAK,SAAS,IAAI,MAAM,QAAQ,SAAS,UAAa,SAAS,KAAK,aAAa,QAAQ,IAAI,EAAE,IAAI,CAAA;AACtH,eAAW,QAAQ,WAAW;AAC5B,YAAM,KAAK,kBAAkB,IAAI;AACjC,YAAM,UAAU,MAAM,YAAY,QAAQ,KAAK,YAAa,IAAI,CAAC;AACjE,UAAI,YAAY;AAAW,cAAM,IAAI,MAAM,sDAAsD;AACjG,YAAM,SAAS,QAAQ,QAAQ,SAAS,CAAC;AACzC,YAAM,OAAO,SAAS,KAAK,QAAQ,QAAQ,SAAS,MAAM;AAC1D,YAAM,KAAK;QAAE;QAAM,QAAQ;QAAa;QAAQ,OAAO,SAAS,KAAK,YAAY,MAAM,IAAI,IAAI;QAC7F,YAAY,SAAS,IAAI,UAAU,IAAI,IAAI,EAAE,OAAO,CAAC,OAAO,SAAS,SAAS,KAAK,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC;QAAG,WAAW;MAAC,CAAE;IACvI;AACA,WAAO;MAAE;MAAM,GAAIA,QAAO,SAAY,CAAA,IAAK,EAAE,IAAAA,IAAE;MAAK,OAAO,MAAM,IAAI,UAAQ,KAAK,KAAK,EAAE,KAAK,IAAI;MAAG;MACnG,YAAY,MAAM,OAAO,CAAC,OAAO,SAAS,QAAQ,KAAK,YAAY,CAAC;MACpE,WAAW,MAAM,OAAO,CAAC,OAAO,SAAS,QAAQ,KAAK,WAAW,CAAC;MAAG;IAAS;EAClF;EAEA,MAAM,eAAe,SAA6E;AAChG,SAAK,kBAAiB;AACtB,UAAM,KAAK,eAAc;AACzB,UAAM,aAAa,MAAM,KAAK,WAAW,QAAQ,YAAY;AAC7D,QAAI,CAAC,WAAW,UAAU,WAAW,WAAW,YAAY,WAAW,WAAW;AAAe,YAAM,IAAI,MAAM,yCAAyC;AAC1J,UAAM,SAAS,MAAM,KAAK,cAAc,WAAW,MAAM;AACzD,QAAI,QAAQ,MAAM,WAAW;AAAG,YAAM,IAAI,MAAM,sDAAsD;AACtG,UAAM,QAA0B,CAAA;AAChC,eAAW,SAAS,CAAC,GAAG,IAAI,IAAI,QAAQ,KAAK,CAAC,GAAG;AAC/C,YAAM,OAAO,KAAK,aAAa,KAAK;AACpC,UAAI,KAAK,SAAS,IAAI;AAAG,cAAM,IAAI,MAAM,gEAAgE;AACzG,YAAM,KAAK,kBAAkB,IAAI;AACjC,YAAM,WAAW,QAAQ,KAAK,YAAa,IAAI;AAC/C,YAAM,SAAS,MAAM,YAAY,QAAQ;AACzC,YAAM,QAAQ,MAAM,KAAK,OAAO,IAAI,CAAC,WAAW,0BAA0B,QAAQ,MAAM,YAAY,IAAI,CAAC,CAAC,GAAG,KAAI;AACjH,UAAI,SAAS,MAAM,SAAS,YAAY,SAAS;AAAU,cAAM,IAAI,MAAM,4CAA4C,IAAI,EAAE;AAC7H,YAAM,QAAQ,SAAS,KAAK,SAAY,MAAM,KAAK,OAAO,WAAW,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;AAC1F,YAAM,UAAU,QAAQ,QAAQ,SAAS,CAAC,KAAK,WAAW,OAAO,SAAS,CAAC,KAAK;AAChF,YAAM,QAAQ,SAAS,KAAK,YAAY,MAAM,QAAQ,QAAQ,SAAS,MAAM,KAAK,IAAI,OAAO,SAAS,MAAM,KAAK,EAAE;AACnH,YAAM,KAAK;QAAE;QAAM,GAAI,WAAW,SAAY,CAAA,IAAK,EAAE,mBAAmB,YAAY,OAAO,SAAS,OAAO,IAAI,EAAC;QAC9G,GAAI,SAAS,KAAK,CAAA,IAAK,EAAE,YAAY,MAA6B,eAAe,MAAO,SAAS,QAAQ,EAAC;QAAK;QAAQ;MAAK,CAAE;IAClI;AACA,WAAO,EAAE,cAAc,WAAW,IAAI,QAAQ,WAAW,KAAK,WAAW,MAAK;EAChF;EAIA,MAAM,QAAQ,SAA4B,SAA2B;AACnE,SAAK,eAAc;AACnB,SAAK,kBAAiB;AACtB,QAAI,QAAQ,cAAc,KAAK;AAAW,YAAM,IAAI,MAAM,uDAAuD;AACjH,UAAM,OAAO,MAAM,KAAK,YAAW;AACnC,QAAI;AACF,YAAM,KAAK,cAAa;AACxB,YAAM,KAAK,kBAAiB;AAC5B,YAAM,cAAc,MAAM,KAAK,OAAM,GAAI;AACzC,YAAM,WAAW,MAAM,KAAK,eAAe,EAAE,cAAc,QAAQ,cAAc,OAAO,QAAQ,MAAM,IAAI,UAAQ,KAAK,IAAI,EAAC,CAAE;AAC9H,UAAI,SAAS,WAAW,QAAQ,UAAU,SAAS,MAAM,WAAW,QAAQ,MAAM;AAAQ,cAAM,IAAI,0BAA0B,sCAAsC;AACpK,eAAS,QAAQ,GAAG,QAAQ,SAAS,MAAM,QAAQ,SAAS,GAAG;AAC7D,cAAM,UAAU,SAAS,MAAM,KAAK;AACpC,cAAM,WAAW,QAAQ,MAAM,KAAK;AACpC,YAAI,QAAQ,SAAS,SAAS,QAAQ,QAAQ,sBAAsB,SAAS,qBACxE,QAAQ,eAAe,SAAS,cAAc,QAAQ,kBAAkB,SAAS,eAAe;AACnG,gBAAM,IAAI,0BAA0B,2CAA2C,QAAQ,IAAI,EAAE;QAC/F;MACF;AACA,YAAM,UAAoB,CAAA;AAC1B,iBAAW,QAAQ,SAAS,OAAO;AACjC,cAAM,SAAS,QAAQ,KAAK,YAAa,KAAK,IAAI;AAClD,cAAM,KAAK,kBAAkB,KAAK,IAAI;AACtC,cAAM,UAAU,MAAM,YAAY,MAAM;AACxC,aAAK,YAAY,SAAY,SAAY,YAAY,QAAQ,SAAS,QAAQ,IAAI,OAAO,KAAK,mBAAmB;AAC/G,gBAAM,IAAI,0BAA0B,oCAAoC,KAAK,IAAI,EAAE;QACrF;AACA,YAAI,KAAK,eAAe,QAAW;AACjC,cAAI,YAAY,QAAW;AAAE,kBAAM,GAAG,MAAM;AAAG,oBAAQ,KAAK,KAAK,IAAI;UAAG;AACxE;QACF;AACA,cAAM,UAAU,OAAO,KAAK,KAAK,eAAgB,QAAQ;AACzD,YAAI,SAAS,QAAQ,OAAO,OAAO,MAAM,QAAQ,aAAa,WAAW,QAAQ,SAAS,KAAK;AAAa;AAC5G,cAAM,MAAM,QAAQ,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAI,CAAE;AACtD,cAAM,YAAY,GAAG,MAAM,IAAI,WAAU,CAAE;AAC3C,cAAM,SAAS,MAAM,KAAK,WAAW,MAAM,KAAK,eAAe,WAAW,MAAQ,GAAK;AACvF,YAAI;AAAE,gBAAM,OAAO,UAAU,OAAO;AAAG,gBAAM,OAAO,KAAI;QAAI;AAClD,gBAAM,OAAO,MAAK;QAAI;AAChC,cAAM,OAAO,WAAW,MAAM;AAC9B,YAAI,QAAQ,aAAa;AAAS,gBAAM,MAAM,QAAQ,KAAK,eAAe,WAAW,MAAQ,GAAK;AAClG,gBAAQ,KAAK,KAAK,IAAI;MACxB;AACA,aAAO,YAAY,SAAY,UAAU,MAAM,KAAK,eAAe,SAAS,YAC1E,QAAQ,iBAAiB,qCAAqC,OAAO,WAAW;IACpF;AAAY,YAAM,KAAK,MAAK;IAAI;EAClC;EAEA,MAAM,eAAe,SAAiH;AACpI,SAAK,eAAc;AACnB,SAAK,kBAAiB;AACtB,UAAM,KAAK,eAAc;AACzB,UAAM,OAAO,MAAM,KAAK,YAAY,WAAW;AAC/C,QAAI;AACF,YAAM,aAAa,MAAM,KAAK,WAAW,QAAQ,YAAY;AAC7D,UAAI,WAAW,WAAW,UAAa,WAAW,WAAW,YAAY,WAAW,WAAW,eAAe;AAC5G,cAAM,IAAI,MAAM,kDAAkD;MACpE;AACA,YAAM,SAAS,MAAM,KAAK,cAAc,WAAW,MAAM;AACzD,YAAM,KAAK,WAAU;AACrB,YAAM,OAAO,KAAK,KAAK,eAAe,KAAK,WAAW,EAAE;AACxD,YAAM,SAAS,eAAe,EAAE;AAChC,YAAM,YAAY,KAAK,MAAMC,UAAS,KAAK,YAAa,KAAK,SAAS,CAAC;AACvE,YAAM,SAA6B;QAAE;QAAI,WAAW,KAAK;QAAW,YAAY,KAAK;QACnF,iBAAiB,KAAK;QAAW,iBAAiB,QAAQ;QAAW,iBAAiB,QAAQ;QAC9F,cAAc,QAAQ;QAAc;QAAQ;QAAM;QAAW;QAAQ,UAAU,CAAA;QAAI,WAAW,CAAA;QAC9F,QAAQ;QAAY,WAAW,KAAK,IAAG;MAAE;AAC3C,YAAM,MAAM,KAAK,KAAK,eAAe,KAAK,SAAS,GAAG,EAAE,WAAW,KAAI,CAAE;AACzE,UAAI,MAAM,OAAO,IAAI;AAAG,cAAM,IAAI,MAAM,mCAAmC;AAC3E,YAAM,KAAK,YAAY,aAAa,IAAI,MAAM;AAC9C,UAAI;AACF,cAAM,KAAK,IAAI,IAAI,CAAC,YAAY,OAAO,qBAAqB,MAAM,QAAQ,MAAM,MAAM,CAAC;AACvF,cAAM,UAAU,GAAU,EAAE,SAAS,MAAM,wBAAwB,EAAC,CAAE;AACtE,aAAK,MAAM,QAAQ,SAAS,CAAC,YAAY,MAAM,CAAC,GAAG,KAAI,MAAO,WAAW,MAAM,QAAQ,OAAM,GAAI,YAAY,QAAQ;AACnH,gBAAM,IAAI,MAAM,kEAAkE;QACpF;AACA,YAAI,CAAC,MAAM,OAAO,SAAS;AAAG,gBAAM,IAAI,MAAM,4DAA4D;AAC1G,cAAM,QAAQ,EAAE,GAAG,QAAQ,QAAQ,QAAgB;AACnD,cAAM,KAAK,YAAY,aAAa,IAAI,KAAK;AAC7C,eAAO;MACT,SAAS,OAAO;AACd,cAAM,KAAK,YAAY,aAAa,IAAI,EAAE,GAAG,QAAQ,QAAQ,UAAU,OAAO,aAAa,KAAK,EAAC,CAAE;AACnG,cAAM;MACR;IACF;AAAY,YAAM,KAAK,MAAK;IAAI;EAClC;EAEA,MAAM,gBAAa;AACjB,YAAQ,MAAM,KAAK,YAAgC,WAAW,GAAG,OAAO,WAAS,MAAM,WAAW,SAAS,EACxG,KAAK,CAAC,MAAM,UAAU,KAAK,YAAY,MAAM,SAAS;EAC3D;EAEA,MAAM,sBAAsB,IAAY,WAAmB,WAAW,MAAI;AACxE,WAAO,KAAK,eAAe,IAAI,aAAW;MAAE,GAAG;MAC7C,UAAU,WAAW,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,OAAO,UAAU,SAAS,CAAC,CAAC,IAAI,OAAO,SAAS,OAAO,WAAS,UAAU,SAAS;IAAC,EAAG;EAChI;EAEA,MAAM,qBAAqB,IAAY,KAAa,WAAW,MAAI;AACjE,QAAI,CAAC,OAAO,cAAc,GAAG,KAAK,OAAO;AAAG,YAAM,IAAI,MAAM,iCAAiC;AAC7F,WAAO,KAAK,eAAe,IAAI,aAAW;MAAE,GAAG;MAC7C,WAAW,WAAW,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,OAAO,WAAW,GAAG,CAAC,CAAC,IAAI,OAAO,UAAU,OAAO,WAAS,UAAU,GAAG;IAAC,EAAG;EACvH;EAEA,MAAM,aAAa,IAAY,OAAc;AAC3C,WAAO,KAAK,eAAe,IAAI,aAAW,EAAE,GAAG,QAAQ,QAAQ,UAAU,OAAO,aAAa,KAAK,EAAC,EAAG;EACxG;EAEA,MAAM,eAAe,IAAU;AAC7B,SAAK,eAAc;AACnB,UAAM,KAAK,eAAc;AACzB,UAAM,OAAO,MAAM,KAAK,YAAY,WAAW;AAC/C,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,SAAS,EAAE;AACrC,YAAM,SAAS,QAAQ,OAAO,IAAI;AAClC,YAAM,WAAW,QAAQ,KAAK,eAAe,KAAK,WAAW,EAAE;AAC/D,UAAI,WAAW,YAAY,CAAC,SAAS,QAAQ,KAAK,eAAe,KAAK,SAAS,GAAG,MAAM;AAAG,cAAM,IAAI,MAAM,gDAAgD;AAC3J,UAAI,OAAO,WAAW,WAAW,OAAO,WAAW;AAAU,cAAM,IAAI,MAAM,2DAA2D;AACxI,UAAI,OAAO,SAAS,SAAS;AAAG,cAAM,IAAI,0BAA0B,wCAAwC;AAC5G,iBAAW,OAAO,OAAO;AAAW,YAAI,aAAa,GAAG;AAAG,gBAAM,IAAI,0BAA0B,sCAAsC;AACrI,UAAI,CAAC,MAAM,OAAO,MAAM,GAAG;AACzB,cAAM,WAAW,MAAM,KAAK,IAAI,YAAW;AAC3C,YAAI,SAAS,IAAI,SAAS,OAAO,MAAM;AAAG,gBAAM,IAAI,MAAM,qDAAqD;AAC/G,cAAM,KAAK,YAAY,aAAa,IAAI,EAAE,GAAG,QAAQ,QAAQ,UAAS,CAAE;AACxE;MACF;AACA,WAAK,MAAM,MAAM,MAAM,GAAG,eAAc;AAAI,cAAM,IAAI,MAAM,oDAAoD;AAChH,YAAM,eAAe,MAAMF,UAAS,MAAM;AAC1C,YAAM,eAAe,MAAMA,UAAS,QAAQ,KAAK,eAAe,KAAK,SAAS,CAAC;AAC/E,UAAI,CAAC,SAAS,cAAc,YAAY,KAAK,iBAAiB;AAAc,cAAM,IAAI,MAAM,yDAAyD;AACrJ,YAAM,MAAM,GAAU,EAAE,SAAS,QAAQ,wBAAwB,EAAC,CAAE;AACpE,UAAI,MAAMA,WAAU,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,GAAG,KAAI,CAAE,MAAM;AAAc,cAAM,IAAI,MAAM,0CAA0C;AACjJ,YAAM,eAAe,MAAMA,UAAS,QAAQ,SAAS,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC,GAAG,KAAI,CAAE,CAAC;AACtG,UAAI,iBAAiB,KAAK;AAAiB,cAAM,IAAI,MAAM,4CAA4C;AACvG,UAAI,EAAE,MAAM,IAAI,OAAO,CAAC,yBAAyB,WAAW,CAAC,GAAG,QAAO;AAAI,cAAM,IAAI,0BAA0B,wDAAwD;AACvK,YAAM,WAAW,MAAM,IAAI,OAAM,GAAI;AACrC,UAAI,YAAY,OAAO;AAAQ,cAAM,IAAI,MAAM,wCAAwC;AACvF,YAAM,kBAAkB,MAAMA,UAAS,OAAO,eAAe;AAC7D,UAAI,oBAAoB,OAAO,mBAAmB,CAAC,SAAS,OAAO,YAAY,eAAe,GAAG;AAC/F,cAAM,IAAI,0BAA0B,kDAAkD;MACxF;AACA,YAAM,SAAS,GAAU,EAAE,SAAS,iBAAiB,wBAAwB,EAAC,CAAE;AAChF,YAAM,aAAa,MAAMA,WAAU,MAAM,OAAO,SAAS,CAAC,iBAAiB,CAAC,GAAG,KAAI,CAAE;AACrF,YAAM,eAAe,MAAMA,UAAS,QAAQ,kBAAkB,MAAM,OAAO,SAAS,CAAC,kBAAkB,CAAC,GAAG,KAAI,CAAE,CAAC;AAClH,UAAI,eAAe,OAAO,cAAc,iBAAiB,KAAK,iBAAiB;AAC7E,cAAM,IAAI,0BAA0B,mDAAmD;MACzF;AACA,YAAM,cAAc,MAAM,OAAO,SAAS,CAAC,YAAY,eAAe,CAAC,GAAG,KAAI;AAC9E,YAAM,aAAa,MAAM,IAAI,SAAS,CAAC,YAAY,MAAM,CAAC;AAC1D,YAAM,QAAQ,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,YAAY,WAAW,KAAI,CAAE,CAAC,GAAG,KAAI;AACrF,UAAI,SAAS,WAAW,KAAI;AAAI,cAAM,IAAI,0BAA0B,gEAAgE;AACpI,YAAM,KAAK,IAAI,IAAI,CAAC,YAAY,UAAU,MAAM,CAAC;AACjD,UAAI,MAAM,OAAO,MAAM;AAAG,cAAM,IAAI,MAAM,iDAAiD;AAC3F,YAAM,KAAK,IAAI,kBAAkB,OAAO,QAAQ,KAAK;AACrD,YAAM,KAAK,YAAY,aAAa,IAAI,EAAE,GAAG,QAAQ,QAAQ,UAAS,CAAE;IAC1E;AAAY,YAAM,KAAK,MAAK;IAAI;EAClC;EAEQ,MAAM,eAAe,SAA+G,YAC1I,SAAiB,SAAkB,SAAsC;AACzE,UAAM,KAAK,WAAU;AACrB,UAAM,EAAE,OAAO,OAAO,OAAM,IAAK,MAAM,KAAK,cAAa;AACzD,QAAI,CAAC;AAAQ,YAAM,IAAI,MAAM,8CAA8C;AAC3E,UAAM,OAAsB;MAAE;MAAI,GAAG;MAAS,WAAW,KAAK;MAAW,YAAY,KAAK;MACxF,GAAI,eAAe,SAAY,MAAM,WAAW,SAAY,CAAA,IAAK,EAAE,YAAY,MAAM,OAAM,IAAK,EAAE,WAAU;MAC5G,GAAI,MAAM,WAAW,SAAY,CAAA,IAAK,EAAE,QAAQ,MAAM,OAAM;MAAK,WAAW,KAAK,IAAG;MAAI,QAAQ;IAAW;AAC7G,QAAI;AACJ,QAAI;AACF,UAAI,YAAY,eAAe,CAAC,KAAK,cAAc,KAAK,UAAU;AAChE,cAAMG,SAAuB;UAAE,GAAG;UAAM,QAAQ,MAAM,WAAW,UAAa,CAAC,OAAO,QAAO,IAAK,gBAAgB;UAChH,GAAI,MAAM,WAAW,SAAY,CAAA,IAAK,EAAE,QAAQ,MAAM,OAAM;QAAG;AACjE,YAAI,CAAC,KAAK;AAAU,gBAAM,KAAK,wBAAwBA,MAAK;AAC5D,eAAOA;MACT;AACA,YAAM,KAAK,kBAAkB,MAAM;AACnC,YAAM,QAAQ,MAAM,KAAK,YAAY,MAAM;AAC3C,YAAM,eAAe,MAAM,WAAW,UAAa,MAAM,SAAS;AAClE,UAAI,CAAC,cAAc;AACjB,cAAMA,SAAuB,EAAE,GAAG,MAAM,QAAQ,MAAM,QAAS,QAAQ,YAAW;AAClF,cAAM,KAAK,wBAAwBA,MAAK;AACxC,eAAOA;MACT;AACA,UAAI,CAAC,sBAAsB,KAAK,OAAO,KAAK,CAAC,YAAY,KAAK,OAAO;AAAG,cAAM,IAAI,MAAM,8CAA8C;AACtI,YAAM,UAA4B;QAAE,WAAW,KAAK;QAAW,WAAW,QAAQ;QAChF,GAAI,QAAQ,UAAU,SAAY,CAAA,IAAK,EAAE,OAAO,QAAQ,MAAK;QAAK;QAAS;QAAS;MAAK;AAC3F,UAAI,KAAK,QAAQ,oBAAoB,UAAa,CAAC,MAAM,KAAK,QAAQ,gBAAgB,OAAO;AAAG,cAAM,IAAI,MAAM,uCAAuC;AACvJ,UAAI,MAAM,SAAS;AAAG,cAAM,KAAK,IAAI,IAAI,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC,CAAC;AACnF,YAAM,QAAQ,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,KAAI;AACtD,YAAM,SAAuB,EAAE,YAAY,MAAM,OAAO,WAAW,KAAI;AACvE,YAAM,KAAK,YAAY,MAAM;AAC7B,YAAM,KAAK,IAAI,OAAO,SAAS,CAAA,GAAI,MAAM,WAAW,SAAY,EAAE,iBAAiB,KAAI,IAAK,CAAA,CAAE;AAC9F,YAAM,SAAS,MAAM,KAAK,cAAc,MAAM;AAC9C,UAAI,WAAW,MAAM;AAAQ,cAAM,IAAI,MAAM,0FAA0F;AACvI,sBAAgB;AAChB,YAAM,KAAK,YAAY,EAAE,GAAG,QAAQ,OAAO,aAAa,OAAM,CAAE;AAChE,YAAM,YAAY,MAAM,KAAK,YAAY,MAAM,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC;AACzF,UAAI,UAAU,SAAS,GAAG;AACxB,cAAM,QAAQ,IAAI,MAAM,+FAA+F;AACvH,cAAM,KAAK,YAAY,EAAE,GAAG,QAAQ,YAAY,EAAE,GAAG,MAAM,QAAQ,QAAQ,UAAU,OAAO,MAAM,QAAO,GAAI,OAAO,aAAa,OAAM,CAAE;AACzI,cAAM;MACR;AACA,YAAM,QAAuB,EAAE,GAAG,MAAM,QAAQ,QAAQ,YAAW;AACnE,YAAM,KAAK,wBAAwB,KAAK;AACxC,YAAM,GAAG,KAAK,WAAU,CAAE;AAC1B,aAAO;IACT,SAAS,OAAO;AACd,YAAM,QAAuB,EAAE,GAAG,MAAM,GAAI,kBAAkB,SAAY,CAAA,IAAK,EAAE,QAAQ,cAAa,GAAK,QAAQ,UAAU,OAAO,aAAa,KAAK,EAAC;AACvJ,UAAI,CAAC,KAAK,UAAU;AAClB,YAAI;AAAE,gBAAM,KAAK,wBAAwB,KAAK;QAAG,SAC1C,kBAAkB;AAAE,gBAAM,IAAI,mBAAmB,OAAO,IAAI,eAAe,CAAC,OAAO,gBAAgB,GAAG,sDAAsD,CAAC;QAAG;MACzK;AACA,YAAM,IAAI,mBAAmB,OAAO,KAAK;IAC3C;EACF;EAEQ,MAAM,YAAY,QAAoB;AAC5C,UAAM,QAAQ,oBAAI,IAAG;AACrB,eAAW,QAAQ,OAAO,WAAW;AACnC,UAAI,OAAO,OAAO,SAAS,IAAI;AAAG,cAAM,IAAI,MAAM,yCAAyC,IAAI,EAAE;IACnG;AACA,eAAW,QAAQ,OAAO,OAAO;AAC/B,UAAI,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,gBAAgB,OAAO,KAAK,gBAAgB,KAAK;AACpG,cAAM,IAAI,MAAM,yCAAyC,KAAK,IAAI,EAAE;MACtE;AACA,iBAAW,QAAQ,CAAC,KAAK,MAAM,GAAI,KAAK,SAAS,SAAY,CAAA,IAAK,CAAC,KAAK,IAAI,CAAE,GAAG;AAC/E,YAAI,KAAK,SAAS,IAAI,GAAG;AACvB,cAAI,KAAK,UAAU,OAAO,KAAK,UAAU;AAAK,kBAAM,IAAI,MAAM,4BAA4B,IAAI,EAAE;AAChG;QACF;AACA,cAAM,WAAW,QAAQ,KAAK,YAAa,IAAI;AAC/C,YAAI,CAAC,SAAS,KAAK,YAAa,QAAQ;AAAG,gBAAM,IAAI,MAAM,oCAAoC;AAC/F,YAAI,MAAM,OAAO,QAAQ,MAAM,MAAM,MAAM,QAAQ,GAAG,YAAW,GAAI;AACnE,cAAI,MAAM,OAAO,KAAK,UAAU,MAAM,CAAC;AAAG,kBAAM,IAAI,MAAM,uDAAuD,IAAI,EAAE;QACzH;AACA,cAAM,IAAI,IAAI;MAChB;IACF;AACA,WAAO,CAAC,GAAG,KAAK;EAClB;EAEQ,SAAS,MAAY;AAC3B,UAAM,aAAa,KAAK,WAAW,MAAM,GAAG;AAC5C,UAAM,OAAO,WAAW,MAAM,WAAW,YAAY,GAAG,IAAI,CAAC,EAAE,YAAW;AAC1E,SAAK,SAAS,UAAU,KAAK,WAAW,OAAO,MAAM,SAAS;AAAgB,aAAO;AACrF,QAAI,CAAC,oBAAoB,UAAU,cAAc,YAAY,gBAAgB,gBAAgB,aAAa,EAAE,SAAS,IAAI;AAAG,aAAO;AACnI,QAAI,2BAA2B,KAAK,IAAI;AAAG,aAAO;AAClD,YAAQ,KAAK,QAAQ,iBAAiB,CAAA,GAAI,KAAK,WAAQ;AACrD,YAAM,WAAW,KAAK,aAAa,KAAK,EAAE,WAAW,MAAM,GAAG,EAAE,QAAQ,QAAQ,EAAE;AAClF,aAAO,eAAe,YAAY,WAAW,WAAW,GAAG,QAAQ,GAAG;IACxE,CAAC;EACH;EAEQ,MAAM,kBAAkB,aAA0B;AACxD,UAAM,KAAK,eAAc;AACzB,UAAM,SAAS,eAAe,MAAM,KAAK,IAAI,OAAM;AACnD,QAAI,OAAO,WAAW,SAAS;AAAG,YAAM,IAAI,MAAM,8CAA8C;AAChG,UAAM,QAAQ,CAAC,cAAc,eAAe,oBAAoB,eAAe,gBAAgB,gBAAgB,WAAW;AAC1H,UAAM,SAAS,MAAM,KAAK,IAAI,SAAS,MAAM,QAAQ,UAAQ,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,KAAI,EAAG,MAAM,IAAI;AACtG,QAAI,MAAM,WAAW,MAAM;AAAQ,YAAM,IAAI,MAAM,6CAA6C;AAChG,eAAW,QAAQ,OAAO;AACxB,UAAI,MAAM,OAAO,QAAQ,KAAK,YAAa,IAAI,CAAC;AAAG,cAAM,IAAI,MAAM,uCAAuC;IAC5G;AACA,SAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,KAAI,MAAO;AAAI,YAAM,IAAI,MAAM,uDAAuD;EACnI;EAEQ,MAAM,iBAAc;AAC1B,SAAK,kBAAiB;AACtB,UAAM,WAAW,MAAM,mBAAmB,KAAK,QAAQ,KAAK,UAAW;AACvE,QAAI,SAAS,eAAe,KAAK,cAAc,SAAS,oBAAoB,KAAK;AAAiB,YAAM,IAAI,MAAM,iEAAiE;EACrL;EAEQ,MAAM,gBAAa;AACzB,QAAI,KAAK;AAAU;AACnB,UAAM,SAAS,MAAM,SAAuB,KAAK,WAAU,CAAE;AAC7D,QAAI,WAAW;AAAW;AAC1B,UAAM,QAAQ,MAAM,KAAK,OAAM;AAC/B,QAAI,MAAM,WAAW,QAAW;AAC9B,UAAI,OAAO,UAAU,aAAa,OAAO,WAAW,eAAe,QAAW;AAC5E,cAAM,GAAG,KAAK,WAAU,CAAE;AAC1B;MACF;AACA,YAAM,IAAI,MAAM,gEAAgE;IAClF;AACA,QAAI,SAAS,OAAO;AACpB,QAAI,OAAO,UAAU,WAAW;AAC9B,UAAI,MAAM,WAAW,OAAO,WAAW,YAAY;AACjD,cAAM,GAAG,KAAK,WAAU,CAAE;AAC1B;MACF;AACA,YAAM,QAAQ,MAAM,KAAK,IAAI,SAAS,CAAC,GAAG,MAAM,MAAM,SAAS,CAAC,GAAG,KAAI;AACvE,YAAM,WAAW,MAAM,KAAK,IAAI,KAAK,CAAC,cAAc,eAAe,MAAM,MAAM,CAAC,GAAG,KAAI;AACvF,UAAI,SAAS,OAAO,QAAQ,aAAa,OAAO,WAAW,cAAc,KAAK;AAC5E,cAAM,IAAI,MAAM,oEAAoE;MACtF;AACA,eAAS,MAAM;IACjB;AACA,QAAI,WAAW;AAAW,YAAM,IAAI,MAAM,6CAA6C;AACvF,UAAM,KAAK,cAAc,MAAM;AAC/B,UAAM,YAAY,MAAM,WAAW,SAAS,MAAM,KAAK,YAAY,MAAM,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAA;AACvH,UAAM,aAAa,OAAO,WAAW,WAAW,YAAY,UAAU,SAAS;AAC/E,UAAM,KAAK,wBAAwB;MAAE,GAAG,OAAO;MAAY;MAAQ,QAAQ,aAAa,WAAW;MAAa,WAAW;MACzH,GAAI,aAAa,EAAE,OAAO,OAAO,WAAW,SAAS,+DAA8D,IAAK,CAAA;IAAG,CAAE;AAC/H,UAAM,GAAG,KAAK,WAAU,CAAE;EAC5B;EAEQ,MAAM,wBAAwB,OAAoB;AACxD,QAAI,MAAM,WAAW,QAAW;AAC9B,YAAM,KAAK,IAAI,IAAI,CAAC,cAAc,wBAAwB,MAAM,EAAE,IAAI,MAAM,MAAM,CAAC;AACnF,UAAI,MAAM,eAAe;AAAW,cAAM,KAAK,IAAI,IAAI,CAAC,cAAc,8BAA8B,MAAM,EAAE,IAAI,MAAM,UAAU,CAAC;IACnI;AACA,UAAM,KAAK,YAAY,eAAe,MAAM,IAAI,KAAK;EACvD;EAEQ,MAAM,KAAK,QAAoB;AACrC,QAAI,OAAO,SAAS,WAAW,oBAAoB,KAAK,OAAO,SAAS,WAAW,oBAAoB;AAAG,aAAO;AACjH,QAAI;AAAE,aAAO,MAAM,KAAK,cAAc,MAAM;IAAG,SACxC,OAAO;AACZ,UAAI,MAAM,KAAK,OAAO,IAAI,CAAC,aAAa,uBAAuB,CAAC,MAAM;AAAQ,cAAM;AACpF,YAAM,WAAW,MAAM,KAAK,OAAO,YAAW;AAC9C,UAAI,SAAS,IAAI,WAAW,KAAK,CAAC,OAAO;AAAU,eAAO;AAC1D,YAAM;IACR;EACF;EAEQ,MAAM,cAAc,OAAa;AACvC,QAAI,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,IAAI,KAAK,MAAM,SAAS,IAAI;AAAG,YAAM,IAAI,MAAM,wBAAwB;AACnH,YAAQ,MAAM,KAAK,OAAO,SAAS,CAAC,YAAY,GAAG,KAAK,WAAW,CAAC,GAAG,KAAI;EAC7E;EAEQ,aAAa,OAAa;AAChC,UAAM,WAAW,WAAW,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,cAAc,KAAK,WAAW,KAAK;AACtG,UAAM,OAAO,KAAK,cAAc,KAAK;AACrC,QAAI,CAAC,SAAS,MAAM,QAAQ,KAAK,aAAa;AAAM,YAAM,IAAI,MAAM,iDAAiD;AACrH,WAAOD,UAAS,MAAM,QAAQ,EAAE,WAAW,MAAM,GAAG;EACtD;EAEQ,MAAM,kBAAkB,MAAY;AAC1C,UAAM,WAAW,QAAQ,KAAK,YAAa,IAAI;AAC/C,QAAI,SAAS,UAAU,KAAK,WAAW,OAAO,KAAK,KAAK,SAAS,QAAQ;AAAG,YAAM,IAAI,MAAM,iCAAiC;AAC7H,QAAI,SAAS,QAAQ,UAAU,IAAI;AACnC,WAAO,WAAW,KAAK,YAAY;AACjC,UAAI,CAAC,SAAS,KAAK,YAAa,MAAM;AAAG,cAAM,IAAI,MAAM,uCAAuC;AAChG,UAAI,MAAM,OAAO,MAAM,GAAG;AACxB,cAAM,QAAQ,MAAM,MAAM,MAAM;AAChC,YAAI,MAAM,eAAc,KAAM,CAAC,MAAM,YAAW;AAAI,gBAAM,IAAI,MAAM,oDAAoD;MAC1H;AACA,eAAS,QAAQ,QAAQ,IAAI;IAC/B;EACF;EAEQ,MAAM,YAAY,QAAQ,OAAO,KAAK,cAAc,KAAK,SAAS,GAAC;AACzE,QAAI,KAAK;AAAU,aAAO,EAAE,OAAO,mCAAW;MAAE,GAAb,SAAc;AACjD,UAAM,MAAM,KAAK,WAAW,EAAE,WAAW,KAAI,CAAE;AAC/C,UAAM,OAAO,KAAK,KAAK,WAAW,GAAG,KAAK,OAAO;AACjD,WAAO,eAAe,MAAM,aAAa,YAAW;AAClD,UAAI;AACJ,UAAI;AAAE,iBAAS,MAAM,KAAK,MAAM,MAAM,GAAK;MAAG,SACvC,OAAO;AACZ,YAAI,CAAC,UAAU,OAAO,QAAQ;AAAG,gBAAM;AACvC,cAAM,QAAQ,MAAM,cAAc,IAAI;AACtC,YAAI,MAAM,aAAa,SAAQ,KAAM,aAAa,MAAM,GAAG;AAAG,gBAAM,IAAI,0BAA0B,sDAAsD,EAAE,OAAO,MAAK,CAAE;AACxK,cAAM,cAAc,GAAG,IAAI;AAC3B,cAAM,UAAU,MAAM,KAAK,aAAa,MAAM,GAAK;AACnD,YAAI;AACF,gBAAM,SAAS,MAAM,cAAc,IAAI;AACvC,cAAI,OAAO,aAAa,SAAQ,KAAM,aAAa,OAAO,GAAG;AAAG,kBAAM,IAAI,0BAA0B,4CAA4C;AAChJ,gBAAM,GAAG,IAAI;AACb,mBAAS,MAAM,KAAK,MAAM,MAAM,GAAK;QACvC;AAAY,gBAAM,QAAQ,MAAK;AAAI,gBAAM,GAAG,WAAW;QAAG;MAC5D;AACA,YAAM,OAAO,UAAU,KAAK,UAAU,EAAE,KAAK,QAAQ,KAAK,UAAU,SAAQ,EAAE,CAAE,CAAC;AACjF,YAAM,OAAO,KAAI;AACjB,UAAI;AACJ,aAAO,EAAE,OAAO,6BAAM,aAAa,YAAW;AAC5C,YAAI;AACF,gBAAM,eAAe,MAAM,aAAa,YAAW;AACjD,gBAAI;AAAE,oBAAM,OAAO,MAAK;YAAI;AAClB,oBAAM,GAAG,IAAI;YAAG;UAC5B,CAAC;QACH;AAAY,gBAAM,OAAO,MAAK;QAAI;MACpC,GAAE,GAPc,SAOZ;IACN,CAAC;EACH;EAEQ,MAAM,eAAe,IAAY,QAA0D;AACjG,SAAK,eAAc;AACnB,UAAM,OAAO,MAAM,KAAK,YAAY,WAAW;AAC/C,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,SAAS,EAAE;AACrC,UAAI,OAAO,WAAW;AAAS,cAAM,IAAI,MAAM,yBAAyB;AACxE,YAAM,QAAQ,OAAO,MAAM;AAC3B,YAAM,KAAK,YAAY,aAAa,IAAI,KAAK;AAC7C,aAAO;IACT;AAAY,YAAM,KAAK,MAAK;IAAI;EAClC;EAEQ,MAAM,SAAS,IAAU;AAC/B,eAAW,EAAE;AACb,UAAM,QAAQ,MAAM,SAA6B,KAAK,KAAK,WAAW,aAAa,GAAG,EAAE,OAAO,GAAG,CAAC,KAAK,QAAQ;AAChH,QAAI,CAAC,SAAS,MAAM,cAAc,KAAK,aAAa,MAAM,OAAO;AAAI,YAAM,IAAI,MAAM,6CAA6C;AAClI,WAAO;EACT;EAEQ,MAAM,YAAe,MAAY;AACvC,UAAM,YAAY,KAAK,KAAK,WAAW,IAAI;AAC3C,QAAI,CAAC,MAAM,OAAO,SAAS;AAAG,aAAO,CAAA;AACrC,UAAM,SAAc,CAAA;AACpB,eAAW,QAAQ,MAAM,QAAQ,SAAS,GAAG;AAC3C,UAAI,KAAK,SAAS,OAAO,GAAG;AAC1B,cAAM,OAAO,KAAK,WAAW,IAAI;AACjC,eAAO,KAAK,MAAM,eAAe,MAAM,UAAU,YAAY,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM,CAAC,GAClG,EAAE,YAAY,CAAC,KAAK,SAAQ,CAAE,CAAC;MACnC;IACF;AACA,WAAO;EACT;EAEQ,MAAM,YAAY,MAAc,IAAY,OAAc;AAChE,eAAW,EAAE;AACb,UAAM,UAAU,KAAK,KAAK,WAAW,MAAM,GAAG,EAAE,OAAO,GAAG,KAAK;EACjE;EAEQ,aAAU;AAAa,WAAO,KAAK,KAAK,WAAW,GAAG,OAAO,KAAK,cAAc,KAAK,SAAS,CAAC,cAAc;EAAG;EAChH,YAAY,OAAmB;AAAmB,WAAO,UAAU,KAAK,WAAU,GAAI,KAAK;EAAG;EAC9F,oBAAiB;AAAW,QAAI,KAAK,eAAe;AAAW,YAAM,IAAI,MAAM,iCAAiC;EAAG;EACnH,iBAAc;AAAW,QAAI,KAAK;AAAU,YAAM,IAAI,MAAM,4BAA4B;EAAG;;AAGrG,SAAS,OAAO,OAAa;AAAY,SAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AAAG;AAAtG;AACT,eAAe,mBAAmB,KAAgB,WAAiB;AACjE,QAAM,SAAS,MAAM,IAAI,SAAS,CAAC,mBAAmB,kBAAkB,CAAC,GAAG,KAAI,EAAG,MAAM,IAAI;AAC7F,MAAI,MAAM,WAAW,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AAAG,UAAM,IAAI,MAAM,6CAA6C;AAC/G,SAAO,EAAE,YAAY,MAAMF,UAAS,MAAM,CAAC,CAAC,GAAG,iBAAiB,MAAMA,UAAS,QAAQ,WAAW,MAAM,CAAC,CAAC,CAAC,EAAC;AAC9G;AAJe;AAMf,SAAS,WAAW,OAAa;AAAU,MAAI,CAAC,oBAAoB,KAAK,KAAK;AAAG,UAAM,IAAI,MAAM,0BAA0B;AAAG;AAArH;AACT,SAAS,YAAY,OAAa;AAAY,SAAO,aAAa,KAAK;AAAI;AAAlE;AACT,SAAS,WAAW,OAAc;AAChC,UAAQ,OAAO;IACb,KAAK;AAAK,aAAO;IACjB,KAAK;AAAK,aAAO;IACjB,KAAK;AAAK,aAAO;IACjB,KAAK;AAAK,aAAO;IACjB,KAAK;AAAK,aAAO;IACjB,KAAK;AAAK,aAAO;IACjB;AAAS,aAAO;EAClB;AACF;AAVS;AAWT,SAAS,SAAS,MAAc,MAAY;AAC1C,QAAM,QAAQE,UAAS,MAAM,IAAI;AACjC,SAAO,UAAU,MAAO,CAAC,MAAM,WAAW,KAAK,GAAG,EAAE,KAAK,UAAU,QAAQ,CAAC,WAAW,KAAK;AAC9F;AAHS;AAIT,SAAS,UAAU,OAAgB,MAAY;AAAa,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAS,MAAM,SAAS;AAAM;AAAjJ;AACT,SAAS,aAAa,OAAc;AAAY,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAG;AAAtG;AACT,eAAe,cAAc,MAAY;AACvC,MAAI;AACJ,MAAI;AAAE,YAAQ,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM,CAAC;EAAG,SACjD,OAAO;AACZ,QAAI,iBAAiB,eAAe,UAAU,OAAO,QAAQ,GAAG;AAC9D,YAAM,IAAI,0BAA0B,0FAA0F,EAAE,OAAO,MAAK,CAAE;IAChJ;AACA,UAAM;EACR;AACA,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,EAAE,SAAS,UAAU,EAAE,cAAc,UACpF,CAAC,OAAO,cAAc,MAAM,GAAG,KAAM,MAAM,OAAkB,KAAK,OAAO,MAAM,aAAa,UAAU;AACxG,UAAM,IAAI,0BAA0B,6EAA6E;EACnH;AACA,SAAO;AACT;AAde;AAef,SAAS,aAAa,KAAW;AAC/B,MAAI,CAAC,OAAO,cAAc,GAAG,KAAK,OAAO;AAAG,UAAM,IAAI,MAAM,kCAAkC;AAC9F,MAAI;AAAE,YAAQ,KAAK,KAAK,CAAC;AAAG,WAAO;EAAM,SAClC,OAAO;AAAE,QAAI,UAAU,OAAO,OAAO;AAAG,aAAO;AAAO,UAAM;EAAO;AAC5E;AAJS;AAKT,eAAe,OAAO,MAAY;AAChC,MAAI;AAAE,UAAM,OAAO,IAAI;AAAG,WAAO;EAAM,SAChC,OAAO;AAAE,QAAI,UAAU,OAAO,QAAQ;AAAG,aAAO;AAAO,UAAM;EAAO;AAC7E;AAHe;AAIf,eAAe,SAAY,MAAc,aAAa,MAAI;AACxD,MAAI;AACF,QAAI,CAAC;AAAY,YAAM,OAAO,IAAI;AAClC,WAAO,MAAM,eAAe,MAAM,UAAU,YAAY,KAAK,MAAM,MAAM,SAAS,MAAM,MAAM,CAAC,GAAQ,EAAE,WAAU,CAAE;EACvH,SACO,OAAO;AAAE,QAAI,UAAU,OAAO,QAAQ;AAAG,aAAO;AAAW,UAAM;EAAO;AACjF;AANe;AAOf,eAAe,UAAU,MAAc,OAAc;AACnD,QAAM,MAAM,QAAQ,MAAM,IAAI,GAAG,EAAE,WAAW,KAAI,CAAE;AACpD,QAAM,YAAY,GAAG,IAAI,IAAI,WAAU,CAAE;AACzC,QAAM,OAAO,MAAM,KAAK,WAAW,MAAM,GAAK;AAC9C,MAAI;AAAE,UAAM,KAAK,UAAU,GAAG,KAAK,UAAU,KAAK,CAAC;CAAI;AAAG,UAAM,KAAK,KAAI;EAAI;AACnE,UAAM,KAAK,MAAK;EAAI;AAC9B,QAAM,eAAe,MAAM,aAAa,MAAM,OAAO,WAAW,IAAI,CAAC;AACvE;AAPe;AAQf,SAAS,YAAY,SAAiB,MAAY;AAAY,SAAO,WAAW,QAAQ,EAAE,OAAO,IAAI,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AAAG;AAA7H;AACT,eAAe,YAAY,MAAY;AACrC,MAAI;AACJ,MAAI;AAAE,WAAO,MAAM,MAAM,IAAI;EAAG,SACzB,OAAO;AAAE,QAAI,UAAU,OAAO,QAAQ;AAAG,aAAO;AAAW,UAAM;EAAO;AAC/E,MAAI,CAAC,KAAK,OAAM,KAAM,KAAK,eAAc;AAAI,UAAM,IAAI,MAAM,8CAA8C;AAC3G,SAAO,EAAE,SAAS,MAAM,SAAS,IAAI,GAAG,OAAO,KAAK,OAAO,QAAW,IAAI,WAAW,SAAQ;AAC/F;AANe;",
6
- "names": ["exists", "realpath", "relative", "cache", "pathspec", "paths", "key", "isPathSpec", "value", "toPaths", "scopedFlags", "flags", "scope", "findGlobal", "flag", "CONFIG_WRITE_FLAGS", "CONFIG_READ_FLAGS", "CONFIG_WRITE_VERBS", "CONFIG_READ_VERBS", "detectConfigAction", "positionals", "name", "configOperation", "verb", "isWrite", "key", "toOperation", "operation", "parseAssignment", "raw", "eq", "detectConfigScope", "detectConfigOverrideScope", "collectWriteFlags", "assignment", "collectConfigAccess", "task", "parsedConfig", "appendParsedConfigAction", "action", "config", "UNIVERSAL", "GLOBAL", "COMMANDS", "EMPTY", "getFlagSpecForTask", "spec", "expandToken", "stem", "char", "consumes", "expandCluster", "shortSpec", "chars", "result", "i", "remainder", "c", "parseGlobalFlags", "tokens", "parsed", "next", "token", "parseTaskFlags", "pathspecs", "current", "isPathSpec", "toPaths", "j", "t", "detectVulnerableConfigWrites", "write", "helper", "preventUnsafeConfig", "vulnerability", "preventConfigBuilder", "category", "message", "regex", "preventExpandedConfigBuilder", "detectVulnerableFlags", "preventUnsafeFlags", "preventFlagBuilder", "globalOnly", "withValue", "currentTask", "pathTakingGlobal", "vulnerabilityAnalysis", "parseArgv", "taskIndex", "taskTokens", "toParsedFlag", "vulnerabilityList", "vulnerabilities", "value", "GitEnvKeys", "collectConfigByCount", "env", "count", "index", "collectConfigVulnerabilities", "isGitEnvKey", "prepareEnv", "gitEnv", "envKey", "parseEnv", "vulnerabilityCheck", "GitError", "task", "message", "GitConstructError", "config", "GitPluginError", "plugin", "GitResponseError", "git", "TaskConfigurationError", "NULL", "NOOP", "asFunction", "source", "isUserFunction", "splitOn", "input", "char", "index", "first", "offset", "isArrayLike", "last", "filterHasLength", "toLinesWithContent", "trimmed", "separator", "output", "line", "lineContent", "forEachLineWithContent", "callback", "folderExists", "path", "exists", "FOLDER", "append", "target", "item", "including", "remove", "objectToString", "asArray", "asCamelCase", "str", "_all", "chr", "asStringArray", "asNumber", "onNaN", "num", "prefixedArray", "prefix", "i", "max", "bufferToString", "byteLength", "pick", "properties", "out", "key", "delay", "duration", "done", "orVoid", "filterType", "filter", "def", "filterArray", "filterPrimitives", "omit", "type", "isPathSpec", "filterString", "filterStringOrBuffer", "filterStringOrStringArray", "filterPlainObject", "filterFunction", "ExitCodes", "GitOutputStreams", "stdOut", "stdErr", "useMatchesDefault", "LineParser", "regExp", "useMatches", "reg", "matched", "_index", "RemoteLineParser", "defaultOptions", "createInstanceConfig", "options", "baseDir", "o", "appendTaskOptions", "commands", "value", "v", "getTrailingOptions", "args", "initialPrimitive", "objectOnly", "command", "trailingOptionsArgument", "trailingArrayArgument", "hasTrailingCallback", "trailingFunctionArgument", "includeNoop", "callTaskParser", "parser", "streams", "parseStringResponse", "result", "parsers", "texts", "trim", "text", "lines", "parse", "onError", "exitCode", "error", "done", "fail", "ExitCodes", "isNotRepoMessage", "parser", "text", "checkIsRepoTask", "action", "checkIsBareRepoTask", "checkIsRepoRootTask", "path", "CleanResponse", "dryRun", "removalRegexp", "dryRunRemovalRegexp", "isFolderRegexp", "cleanSummaryParser", "summary", "regexp", "toLinesWithContent", "line", "removed", "EMPTY_COMMANDS", "adhocExecTask", "configurationErrorTask", "TaskConfigurationError", "straightThroughStringTask", "commands", "trimmed", "straightThroughBufferTask", "buffer", "isBufferTask", "task", "isEmptyTask", "CONFIG_ERROR_INTERACTIVE_MODE", "CONFIG_ERROR_MODE_REQUIRED", "CONFIG_ERROR_UNKNOWN_OPTION", "CleanOptions", "CleanOptionValues", "asStringArray", "cleanWithOptionsTask", "mode", "customArgs", "cleanMode", "options", "valid", "getCleanOptions", "isInteractiveMode", "cleanTask", "isCleanOptionsArray", "input", "test", "char", "isCleanMode", "isKnownOption", "option", "ConfigList", "all", "file", "latest", "last", "key", "value", "values", "configListParser", "config", "item", "configParser", "configGetParser", "scopes", "configFilePath", "filePath", "requestedKey", "lines", "i", "max", "splitOn", "GitConfigScope", "asConfigScope", "scope", "fallback", "addConfigTask", "append", "getConfigTask", "listConfigTask", "rest", "trailingFunctionArgument", "DiffNameStatus", "diffNameStatus", "isDiffNameStatus", "_a", "disallowedOptions", "Query", "GrepQuery", "query", "and", "prefixedArray", "param", "grepQueryBuilder", "params", "parseGrep", "grep", "paths", "results", "forEachLineWithContent", "preview", "NULL", "asNumber", "searchTerm", "then", "getTrailingOptions", "stdOut", "ResetMode", "validResetModes", "resetTask", "isValidResetMode", "getResetMode", "debug", "filterHasLength", "objectToString", "createLog", "prefixedLogger", "to", "prefix", "forward", "message", "args", "childLoggerName", "name", "childDebugger", "parentNamespace", "childNamespace", "createLogger", "label", "verbose", "initialStep", "infoDebugger", "labelPrefix", "spawned", "debugDebugger", "filterType", "filterString", "step", "sibling", "initial", "phase", "stepPrefix", "NOOP", "info", "_TasksPendingQueue", "logLabel", "logger", "progress", "err", "GitError", "TasksPendingQueue", "GitExecutorChain", "_executor", "_scheduler", "_plugins", "cwd", "onScheduleComplete", "onQueueComplete", "e", "gitError", "binary", "raw", "outputStreams", "callTaskParser", "result", "rejection", "stdErr", "newStdOut", "GitOutputStreams", "command", "outputHandler", "outputLogger", "spawnOptions", "reason", "spawn", "onDataReceived", "onErrorReceived", "first", "target", "output", "GitExecutor", "taskCallback", "response", "callback", "onSuccess", "data", "changeWorkingDirectoryTask", "directory", "root", "instance", "folderExists", "checkoutTask", "remove", "checkout", "branchName", "startPoint", "cloneTask", "repo", "pathspec", "cloneMirrorTask", "createCloneTask", "api", "repoPath", "clone", "parsers", "LineParser", "branch", "commit", "author", "parts", "email", "changes", "insertions", "deletions", "direction", "count", "parseCommitResult", "parseStringResponse", "commitTask", "files", "next", "rejectDeprecatedSignatures", "asArray", "filterStringOrStringArray", "filterArray", "countObjectsResponse", "property", "asCamelCase", "countObjects", "firstCommit", "hashObjectTask", "write", "InitSummary", "bare", "existing", "gitDir", "initResponseRegex", "reInitResponseRegex", "parseInit", "tokens", "bareCommand", "hasBareCommand", "initTask", "interpretTrailersTask", "index", "interpretTrailers", "filterStringOrBuffer", "LogFormat", "logFormatRegex", "logFormatFromCommand", "format", "isLogFormat", "customArg", "DiffSummary", "statParser", "alterations", "before", "after", "changed", "inserted", "deleted", "numStatParser", "changesInsert", "changesDelete", "nameOnlyParser", "nameStatusParser", "status", "similarity", "from", "_to", "orVoid", "diffSummaryParsers", "getDiffParser", "START_BOUNDARY", "COMMIT_BOUNDARY", "SPLITTER", "defaultFieldNames", "lineBuilder", "fields", "field", "createListLogSummaryParser", "splitter", "logFormat", "parseDiffResult", "lineDetail", "listLogLine", "diffSummaryTask", "validateLogFormatConfig", "flags", "excludeOptions", "prettyFormat", "formatStr", "userOptions", "out", "parseLogOptions", "opt", "filterPlainObject", "suffix", "maxCount", "rangeOperator", "appendTaskOptions", "logTask", "log", "trailingOptionsArgument", "createLogTask", "MergeSummaryConflict", "meta", "MergeSummaryDetail", "PullSummary", "PullFailedSummary", "objectEnumerationResult", "remoteMessages", "asObjectCount", "source", "delta", "remoteMessagesObjectParsers", "RemoteLineParser", "enumeration", "total", "reused", "packReused", "objects", "pullRequestUrl", "url", "parseRemoteMessages", "_stdOut", "RemoteMessageSummary", "FILE_UPDATE_REGEX", "SUMMARY_REGEX", "ACTION_REGEX", "errorParsers", "remote", "hashLocal", "hashRemote", "branchLocal", "branchRemote", "parsePullDetail", "parsePullResult", "parsePullErrorResult", "pullError", "autoMerge", "deleteRef", "parseMergeResult", "parseMergeDetail", "mergeTask", "merge", "GitResponseError", "pushResultPushedItem", "local", "tag", "alreadyUpdated", "type", "remoteName", "parsePushResult", "pushDetail", "parsePushDetail", "responseDetail", "pushTagsTask", "ref", "pushTask", "show", "fromPathRegex", "FileStatusSummary", "working_dir", "detail", "StatusSummary", "renamedFile", "indexX", "indexY", "handler", "conflicts", "y", "renamed", "_result", "_file", "aheadReg", "behindReg", "currentReg", "trackingReg", "onEmptyBranchReg", "regexResult", "parseStatusSummary", "l", "splitLine", "lineStr", "workingDir", "ignoredOptions", "statusTask", "arg", "NOT_INSTALLED", "versionResponse", "major", "minor", "patch", "agent", "installed", "notInstalledResponse", "version", "versionParser", "SimpleGitApi", "chain", "promise", "createScheduledTask", "id", "createDeferred", "Scheduler", "concurrency", "applyPatchTask", "patches", "BranchStatusIdentifier", "BranchSummaryResult", "detached", "current", "branchStatus", "currentBranchParser", "parseBranchSummary", "currentOnly", "BranchDeletionBatch", "branchDeletionSuccess", "hash", "branchDeletionFailure", "deleteSuccessRegex", "deleteErrorRegex", "deletion", "parseBranchDeletions", "hasBranchDeletionError", "processExitCode", "containsDeleteBranchCommand", "deleteCommands", "branchTask", "isDelete", "isCurrentOnly", "branchLocalTask", "deleteBranchesTask", "branches", "forceDelete", "deleteBranchTask", "_", "bufferToString", "checkIgnoreTask", "parseCheckIgnore", "toPath", "normalize", "tracking", "parseFetchResult", "disallowedCommand", "fetchTask", "parseMoveResult", "moveTask", "pullTask", "_error", "_done", "parseGetRemotes", "remotes", "forEach", "parseGetRemotesVerbose", "purpose", "addRemoteTask", "remoteRepo", "getRemotesTask", "listRemotesTask", "remoteTask", "removeRemoteTask", "stashListTask", "addSubModuleTask", "subModuleTask", "initSubModuleTask", "updateSubModuleTask", "TagList", "parseTagList", "customSort", "tags", "tagA", "tagB", "partsA", "partsB", "singleSorted", "toNumber", "diff", "sorted", "a", "b", "aIsNum", "bIsNum", "tagListTask", "hasCustomSort", "addTagTask", "addAnnotatedTagTask", "tagMessage", "Git", "plugins", "git", "tagName", "branchNames", "createRestCommands", "filterPrimitives", "usingCleanOptionsArray", "pathnames", "checkType", "abortPlugin", "signal", "_data", "context", "GitPluginError", "kill", "allowEnvironmentPlugin", "allowEnvironment", "allowAbbreviatedOptions", "allowed", "env", "suppliedKeys", "normalised", "isGuardedEnvKey", "isGitEnvKey", "blockUnsafeOperationsPlugin", "vulnerability", "vulnerabilityCheck", "commandConfigPrefixingPlugin", "configuration", "never", "deferred", "completionDetectionPlugin", "onClose", "onExit", "createEvents", "events", "configureTimeout", "code", "flag", "event", "timeout", "delay", "close", "deferClose", "quickClose", "WRONG_NUMBER_ERR", "WRONG_CHARS_ERR", "isBadArgument", "toBinaryConfig", "allowUnsafe", "customBinaryPlugin", "REASONS", "getReason", "GitConfigurationError", "isTaskError", "getErrorMessage", "errorDetectionHandler", "overwrite", "isError", "errorMessage", "createGitError", "errorDetectionPlugin", "inputPlugin", "taskInput", "stdin", "content", "byteLength", "PluginStore", "EventEmitter", "listener", "plugin", "contextual", "progressMonitorPlugin", "progressCommand", "progressMethods", "including", "chunk", "progressEventStage", "spawnOptionsPlugin", "pick", "suffixPathsPlugin", "isPathSpec", "toPaths", "timeoutPlugin", "block", "wait", "stop", "simpleGit", "baseDir", "createInstanceConfig", "api.GitConstructError", "value", "b", "_e", "p", "realpath", "to", "relative", "value"]
7
- }