swipium 1.5.0 → 2.0.1

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 (498) hide show
  1. package/CHANGELOG.md +183 -0
  2. package/README.md +173 -280
  3. package/THREAT_MODEL.md +223 -47
  4. package/dist/appMap/automationLink.js +30 -27
  5. package/dist/appMap/automationLink.js.map +1 -1
  6. package/dist/appMap/build.js +47 -21
  7. package/dist/appMap/build.js.map +1 -1
  8. package/dist/appMap/codeIndex.js +2 -2
  9. package/dist/appMap/codeIndex.js.map +1 -1
  10. package/dist/appMap/featureIndex.js +3 -3
  11. package/dist/appMap/featureIndex.js.map +1 -1
  12. package/dist/appMap/featureModel.js +2 -2
  13. package/dist/appMap/featureModel.js.map +1 -1
  14. package/dist/appMap/firstRunApply.js +2 -2
  15. package/dist/appMap/firstRunApply.js.map +1 -1
  16. package/dist/appMap/issues.js +10 -10
  17. package/dist/appMap/issues.js.map +1 -1
  18. package/dist/appMap/migrations.js +5 -5
  19. package/dist/appMap/migrations.js.map +1 -1
  20. package/dist/appMap/prelaunch.js +2 -2
  21. package/dist/appMap/prelaunch.js.map +1 -1
  22. package/dist/appMap/projectRegistry.js +77 -11
  23. package/dist/appMap/projectRegistry.js.map +1 -1
  24. package/dist/appMap/provenance.js +2 -2
  25. package/dist/appMap/provenance.js.map +1 -1
  26. package/dist/appMap/query.js +2 -2
  27. package/dist/appMap/query.js.map +1 -1
  28. package/dist/appMap/runtimeMerge.js +3 -3
  29. package/dist/appMap/runtimeMerge.js.map +1 -1
  30. package/dist/appMap/schema.js +1 -1
  31. package/dist/appMap/schema.js.map +1 -1
  32. package/dist/appMap/screenMatch.js +1 -1
  33. package/dist/appMap/screenMatch.js.map +1 -1
  34. package/dist/appMap/staticScan.js +17 -17
  35. package/dist/appMap/staticScan.js.map +1 -1
  36. package/dist/appMap/store.js +55 -7
  37. package/dist/appMap/store.js.map +1 -1
  38. package/dist/appMap/tsAstScan.js +3 -3
  39. package/dist/appMap/tsAstScan.js.map +1 -1
  40. package/dist/artifacts/bundletool.js +5 -5
  41. package/dist/artifacts/bundletool.js.map +1 -1
  42. package/dist/artifacts/resolve.js +10 -10
  43. package/dist/artifacts/resolve.js.map +1 -1
  44. package/dist/automation/capabilities.js +3 -3
  45. package/dist/automation/capabilities.js.map +1 -1
  46. package/dist/automation/gestures.js +1 -1
  47. package/dist/automation/gestures.js.map +1 -1
  48. package/dist/automation/plan.js +7 -7
  49. package/dist/automation/plan.js.map +1 -1
  50. package/dist/automation/report.js +3 -3
  51. package/dist/automation/report.js.map +1 -1
  52. package/dist/automation/selectors.js +14 -25
  53. package/dist/automation/selectors.js.map +1 -1
  54. package/dist/automation/types.js +1 -1
  55. package/dist/automation/types.js.map +1 -1
  56. package/dist/automation/waits.js +5 -5
  57. package/dist/automation/waits.js.map +1 -1
  58. package/dist/automation/webview.js +2 -2
  59. package/dist/automation/webview.js.map +1 -1
  60. package/dist/automationGen/appiumModel.js +13 -7
  61. package/dist/automationGen/appiumModel.js.map +1 -1
  62. package/dist/automationGen/ciEmitter.js +5 -5
  63. package/dist/automationGen/ciEmitter.js.map +1 -1
  64. package/dist/automationGen/identifiers.js +224 -0
  65. package/dist/automationGen/identifiers.js.map +1 -0
  66. package/dist/automationGen/jsEmitter.js +265 -106
  67. package/dist/automationGen/jsEmitter.js.map +1 -1
  68. package/dist/automationGen/packagePatch.js +2 -2
  69. package/dist/automationGen/packagePatch.js.map +1 -1
  70. package/dist/automationGen/platformResolve.js +36 -0
  71. package/dist/automationGen/platformResolve.js.map +1 -0
  72. package/dist/automationGen/projectProfile.js +71 -26
  73. package/dist/automationGen/projectProfile.js.map +1 -1
  74. package/dist/automationGen/pythonEmitter.js +276 -105
  75. package/dist/automationGen/pythonEmitter.js.map +1 -1
  76. package/dist/automationGen/readmeEmitter.js +7 -6
  77. package/dist/automationGen/readmeEmitter.js.map +1 -1
  78. package/dist/{tools/automationGenerate.js → automationGen/run.js} +72 -113
  79. package/dist/automationGen/run.js.map +1 -0
  80. package/dist/automationGen/suitePlan.js +6 -4
  81. package/dist/automationGen/suitePlan.js.map +1 -1
  82. package/dist/automationGen/validation.js +20 -8
  83. package/dist/automationGen/validation.js.map +1 -1
  84. package/dist/build/parseBuildLog.js +2 -2
  85. package/dist/build/parseBuildLog.js.map +1 -1
  86. package/dist/build/plan.js +7 -7
  87. package/dist/build/plan.js.map +1 -1
  88. package/dist/ci/preflight.js +13 -4
  89. package/dist/ci/preflight.js.map +1 -1
  90. package/dist/cli/gc.js +74 -0
  91. package/dist/cli/gc.js.map +1 -0
  92. package/dist/cli/init.js +217 -26
  93. package/dist/cli/init.js.map +1 -1
  94. package/dist/cli/main.js +50 -0
  95. package/dist/cli/main.js.map +1 -0
  96. package/dist/cli/report.js +218 -0
  97. package/dist/cli/report.js.map +1 -0
  98. package/dist/cli/scan.js +35 -14
  99. package/dist/cli/scan.js.map +1 -1
  100. package/dist/cli/suite.js +6 -6
  101. package/dist/cli/suite.js.map +1 -1
  102. package/dist/cli/verify.js +7 -7
  103. package/dist/cli/verify.js.map +1 -1
  104. package/dist/consent/consent.js +162 -5
  105. package/dist/consent/consent.js.map +1 -1
  106. package/dist/context/detect.js +45 -14
  107. package/dist/context/detect.js.map +1 -1
  108. package/dist/context/findApps.js +6 -6
  109. package/dist/context/findApps.js.map +1 -1
  110. package/dist/context/projectRoot.js +174 -19
  111. package/dist/context/projectRoot.js.map +1 -1
  112. package/dist/context/scan.js +1 -1
  113. package/dist/context/scan.js.map +1 -1
  114. package/dist/core/capabilityGroups.js +90 -0
  115. package/dist/core/capabilityGroups.js.map +1 -0
  116. package/dist/core/target.js +3 -3
  117. package/dist/core/target.js.map +1 -1
  118. package/dist/core/targetPlan.js +65 -62
  119. package/dist/core/targetPlan.js.map +1 -1
  120. package/dist/drivers/DirectDriver.js +300 -36
  121. package/dist/drivers/DirectDriver.js.map +1 -1
  122. package/dist/drivers/SimctlDriver.js +120 -7
  123. package/dist/drivers/SimctlDriver.js.map +1 -1
  124. package/dist/drivers/WdaDriver.js +350 -50
  125. package/dist/drivers/WdaDriver.js.map +1 -1
  126. package/dist/explore/candidates.js +2 -2
  127. package/dist/explore/candidates.js.map +1 -1
  128. package/dist/explore/graph.js +5 -5
  129. package/dist/explore/graph.js.map +1 -1
  130. package/dist/explore/policy.js +5 -5
  131. package/dist/explore/policy.js.map +1 -1
  132. package/dist/explore/runner.js +301 -284
  133. package/dist/explore/runner.js.map +1 -1
  134. package/dist/explore/signatures.js +1 -1
  135. package/dist/featureTesting/executionBootstrap.js +29 -30
  136. package/dist/featureTesting/executionBootstrap.js.map +1 -1
  137. package/dist/featureTesting/featureMap.js +2 -2
  138. package/dist/featureTesting/featureMap.js.map +1 -1
  139. package/dist/featureTesting/featureScope.js +12 -12
  140. package/dist/featureTesting/featureScope.js.map +1 -1
  141. package/dist/featureTesting/mapFeatureScope.js +7 -7
  142. package/dist/featureTesting/mapFeatureScope.js.map +1 -1
  143. package/dist/featureTesting/objectiveModel.js +10 -10
  144. package/dist/featureTesting/objectiveModel.js.map +1 -1
  145. package/dist/featureTesting/resultMerge.js +6 -6
  146. package/dist/featureTesting/resultMerge.js.map +1 -1
  147. package/dist/featureTesting/sources.js +4 -4
  148. package/dist/featureTesting/sources.js.map +1 -1
  149. package/dist/featureTesting/suiteBridge.js +1 -1
  150. package/dist/featureTesting/suiteBridge.js.map +1 -1
  151. package/dist/featureTesting/synonyms.js +1 -1
  152. package/dist/featureTesting/synonyms.js.map +1 -1
  153. package/dist/featureTesting/testCaseFactory.js +11 -11
  154. package/dist/featureTesting/testCaseFactory.js.map +1 -1
  155. package/dist/featureTesting/testPlan.js +3 -3
  156. package/dist/featureTesting/testPlan.js.map +1 -1
  157. package/dist/firstRun/authStateMachine.js +1 -1
  158. package/dist/firstRun/authStateMachine.js.map +1 -1
  159. package/dist/firstRun/classifyScreen.js +5 -5
  160. package/dist/firstRun/classifyScreen.js.map +1 -1
  161. package/dist/firstRun/firstRunPlanner.js +11 -11
  162. package/dist/firstRun/firstRunPlanner.js.map +1 -1
  163. package/dist/firstRun/firstRunRunner.js +8 -8
  164. package/dist/firstRun/firstRunRunner.js.map +1 -1
  165. package/dist/firstRun/generatedDataPolicy.js +9 -9
  166. package/dist/firstRun/generatedDataPolicy.js.map +1 -1
  167. package/dist/firstRun/inputPlanner.js +5 -5
  168. package/dist/firstRun/inputPlanner.js.map +1 -1
  169. package/dist/firstRun/onboardingStateMachine.js +1 -1
  170. package/dist/firstRun/onboardingStateMachine.js.map +1 -1
  171. package/dist/firstRun/paywallPolicy.js +3 -3
  172. package/dist/firstRun/paywallPolicy.js.map +1 -1
  173. package/dist/firstRun/types.js +1 -1
  174. package/dist/firstRun/types.js.map +1 -1
  175. package/dist/fixtures/catalog.js +33 -3
  176. package/dist/fixtures/catalog.js.map +1 -1
  177. package/dist/fixtures/load.js +50 -0
  178. package/dist/fixtures/load.js.map +1 -0
  179. package/dist/flows/discover.js +2 -2
  180. package/dist/flows/discover.js.map +1 -1
  181. package/dist/flows/generate.js +20 -10
  182. package/dist/flows/generate.js.map +1 -1
  183. package/dist/flows/pack.js +3 -3
  184. package/dist/flows/pack.js.map +1 -1
  185. package/dist/flows/paths.js +57 -0
  186. package/dist/flows/paths.js.map +1 -0
  187. package/dist/flows/repair.js +111 -23
  188. package/dist/flows/repair.js.map +1 -1
  189. package/dist/flows/run.js +153 -57
  190. package/dist/flows/run.js.map +1 -1
  191. package/dist/flows/schema.js +50 -5
  192. package/dist/flows/schema.js.map +1 -1
  193. package/dist/flows/seedExec.js +4 -4
  194. package/dist/flows/seedExec.js.map +1 -1
  195. package/dist/flows/templates.js +5 -5
  196. package/dist/index.js +50 -8
  197. package/dist/index.js.map +1 -1
  198. package/dist/issues/classify.js +16 -16
  199. package/dist/issues/classify.js.map +1 -1
  200. package/dist/issues/fingerprint.js +24 -4
  201. package/dist/issues/fingerprint.js.map +1 -1
  202. package/dist/issues/index.js +94 -31
  203. package/dist/issues/index.js.map +1 -1
  204. package/dist/issues/metrics.js +4 -4
  205. package/dist/issues/metrics.js.map +1 -1
  206. package/dist/issues/recurrence.js +35 -8
  207. package/dist/issues/recurrence.js.map +1 -1
  208. package/dist/issues/report.js +4 -4
  209. package/dist/issues/report.js.map +1 -1
  210. package/dist/issues/reportBridge.js +4 -4
  211. package/dist/issues/reportBridge.js.map +1 -1
  212. package/dist/issues/schema.js +2 -2
  213. package/dist/issues/schema.js.map +1 -1
  214. package/dist/issues/sourceRevision.js +2 -2
  215. package/dist/issues/sourceRevision.js.map +1 -1
  216. package/dist/issues/store.js +110 -32
  217. package/dist/issues/store.js.map +1 -1
  218. package/dist/lib/abortScope.js +48 -0
  219. package/dist/lib/abortScope.js.map +1 -0
  220. package/dist/lib/android.js +75 -7
  221. package/dist/lib/android.js.map +1 -1
  222. package/dist/lib/coordSpace.js +1 -1
  223. package/dist/lib/coordSpace.js.map +1 -1
  224. package/dist/lib/device.js +32 -7
  225. package/dist/lib/device.js.map +1 -1
  226. package/dist/lib/gestures.js +141 -0
  227. package/dist/lib/gestures.js.map +1 -0
  228. package/dist/lib/gitignore.js +4 -3
  229. package/dist/lib/gitignore.js.map +1 -1
  230. package/dist/lib/image.js +1 -1
  231. package/dist/lib/image.js.map +1 -1
  232. package/dist/lib/lockfile.js +370 -31
  233. package/dist/lib/lockfile.js.map +1 -1
  234. package/dist/lib/needsInput.js +3 -3
  235. package/dist/lib/needsInput.js.map +1 -1
  236. package/dist/lib/png.js +2 -2
  237. package/dist/lib/png.js.map +1 -1
  238. package/dist/lib/redact.js +170 -9
  239. package/dist/lib/redact.js.map +1 -1
  240. package/dist/lib/result.js +79 -10
  241. package/dist/lib/result.js.map +1 -1
  242. package/dist/lib/schemaHash.js +3 -3
  243. package/dist/lib/schemaHash.js.map +1 -1
  244. package/dist/lib/sensitive.js +3 -2
  245. package/dist/lib/sensitive.js.map +1 -1
  246. package/dist/lib/simctl.js +3 -3
  247. package/dist/lib/simctl.js.map +1 -1
  248. package/dist/lib/spawn.js +52 -10
  249. package/dist/lib/spawn.js.map +1 -1
  250. package/dist/lib/toolAnnotations.js +114 -0
  251. package/dist/lib/toolAnnotations.js.map +1 -0
  252. package/dist/lib/wda.js +294 -15
  253. package/dist/lib/wda.js.map +1 -1
  254. package/dist/mobileAudit/checks.js +12 -12
  255. package/dist/mobileAudit/checks.js.map +1 -1
  256. package/dist/mobileAudit/evidence.js +4 -4
  257. package/dist/mobileAudit/evidence.js.map +1 -1
  258. package/dist/mobileAudit/profiles.js +1 -1
  259. package/dist/mobileAudit/profiles.js.map +1 -1
  260. package/dist/mobileAudit/results.js +3 -3
  261. package/dist/mobileAudit/results.js.map +1 -1
  262. package/dist/mobileAudit/runner.js +72 -18
  263. package/dist/mobileAudit/runner.js.map +1 -1
  264. package/dist/oracle/auth.js +1 -1
  265. package/dist/oracle/auth.js.map +1 -1
  266. package/dist/oracle/failures.js +219 -36
  267. package/dist/oracle/failures.js.map +1 -1
  268. package/dist/oracle/health.js +63 -17
  269. package/dist/oracle/health.js.map +1 -1
  270. package/dist/oracle/locator.js +13 -13
  271. package/dist/oracle/locator.js.map +1 -1
  272. package/dist/oracle/record.js +3 -3
  273. package/dist/oracle/record.js.map +1 -1
  274. package/dist/orchestration/envelope.js +2 -2
  275. package/dist/orchestration/envelope.js.map +1 -1
  276. package/dist/orchestration/goal.js +4 -4
  277. package/dist/orchestration/goal.js.map +1 -1
  278. package/dist/orchestration/testThis/execute.js +62 -21
  279. package/dist/orchestration/testThis/execute.js.map +1 -1
  280. package/dist/orchestration/testThis/pipeline.js +119 -30
  281. package/dist/orchestration/testThis/pipeline.js.map +1 -1
  282. package/dist/orchestration/testThis/plan.js +162 -73
  283. package/dist/orchestration/testThis/plan.js.map +1 -1
  284. package/dist/orchestration/testThis/sessionIntent.js +72 -0
  285. package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
  286. package/dist/orchestration/testThis/terminal.js +34 -16
  287. package/dist/orchestration/testThis/terminal.js.map +1 -1
  288. package/dist/orchestration/testThis/types.js +1 -1
  289. package/dist/orchestration/testThis/types.js.map +1 -1
  290. package/dist/plan/plan.js +9 -9
  291. package/dist/plan/plan.js.map +1 -1
  292. package/dist/prompts/index.js +22 -22
  293. package/dist/prompts/index.js.map +1 -1
  294. package/dist/report/export.js +392 -37
  295. package/dist/report/export.js.map +1 -1
  296. package/dist/report/findingsDedupe.js +41 -0
  297. package/dist/report/findingsDedupe.js.map +1 -0
  298. package/dist/report/policy.js +7 -4
  299. package/dist/report/policy.js.map +1 -1
  300. package/dist/report/qaLevel.js +8 -8
  301. package/dist/report/qaLevel.js.map +1 -1
  302. package/dist/report/sarifSources.js +160 -0
  303. package/dist/report/sarifSources.js.map +1 -0
  304. package/dist/report/summary.js +2 -2
  305. package/dist/report/summary.js.map +1 -1
  306. package/dist/report/testCatalog.js +4 -4
  307. package/dist/report/testCatalog.js.map +1 -1
  308. package/dist/report/toolHealth.js +124 -0
  309. package/dist/report/toolHealth.js.map +1 -0
  310. package/dist/server.js +472 -45
  311. package/dist/server.js.map +1 -1
  312. package/dist/services/automationGenerate.js +8 -2
  313. package/dist/services/automationGenerate.js.map +1 -1
  314. package/dist/services/build.js +2 -2
  315. package/dist/services/build.js.map +1 -1
  316. package/dist/{tools → services}/flowGenerate.js +29 -13
  317. package/dist/services/flowGenerate.js.map +1 -0
  318. package/dist/services/preflight.js +4 -4
  319. package/dist/services/preflight.js.map +1 -1
  320. package/dist/services/prepareAndroid.js +46 -8
  321. package/dist/services/prepareAndroid.js.map +1 -1
  322. package/dist/services/prepareIos.js +24 -9
  323. package/dist/services/prepareIos.js.map +1 -1
  324. package/dist/services/report.js +100 -45
  325. package/dist/services/report.js.map +1 -1
  326. package/dist/services/smoke.js +32 -16
  327. package/dist/services/smoke.js.map +1 -1
  328. package/dist/services/suiteGenerate.js +28 -3
  329. package/dist/services/suiteGenerate.js.map +1 -1
  330. package/dist/services/testSuiteKnowledge.js +40 -27
  331. package/dist/services/testSuiteKnowledge.js.map +1 -1
  332. package/dist/session/attach.js +270 -6
  333. package/dist/session/attach.js.map +1 -1
  334. package/dist/session/processRegistry.js +317 -48
  335. package/dist/session/processRegistry.js.map +1 -1
  336. package/dist/session/progress.js +1 -1
  337. package/dist/session/retention.js +201 -0
  338. package/dist/session/retention.js.map +1 -0
  339. package/dist/session/store.js +275 -48
  340. package/dist/session/store.js.map +1 -1
  341. package/dist/snapshot/overlays.js +53 -8
  342. package/dist/snapshot/overlays.js.map +1 -1
  343. package/dist/snapshot/parse.js +28 -4
  344. package/dist/snapshot/parse.js.map +1 -1
  345. package/dist/snapshot/present.js +11 -5
  346. package/dist/snapshot/present.js.map +1 -1
  347. package/dist/snapshot/settle.js +39 -9
  348. package/dist/snapshot/settle.js.map +1 -1
  349. package/dist/state/consent.js +99 -0
  350. package/dist/state/consent.js.map +1 -0
  351. package/dist/state/profile.js +46 -2
  352. package/dist/state/profile.js.map +1 -1
  353. package/dist/suite/compile.js +9 -5
  354. package/dist/suite/compile.js.map +1 -1
  355. package/dist/suite/lint.js +4 -4
  356. package/dist/suite/lint.js.map +1 -1
  357. package/dist/suite/pom.js +50 -41
  358. package/dist/suite/pom.js.map +1 -1
  359. package/dist/suite/secretGuard.js +266 -0
  360. package/dist/suite/secretGuard.js.map +1 -0
  361. package/dist/suite/testcase.js +9 -7
  362. package/dist/suite/testcase.js.map +1 -1
  363. package/dist/testSuite/exporter.js +4 -4
  364. package/dist/testSuite/exporter.js.map +1 -1
  365. package/dist/testSuite/generator.js +13 -9
  366. package/dist/testSuite/generator.js.map +1 -1
  367. package/dist/testSuite/history.js +1 -1
  368. package/dist/testSuite/history.js.map +1 -1
  369. package/dist/testSuite/issueLinks.js +3 -3
  370. package/dist/testSuite/issueLinks.js.map +1 -1
  371. package/dist/testSuite/lint.js +4 -4
  372. package/dist/testSuite/lint.js.map +1 -1
  373. package/dist/testSuite/merge.js +5 -5
  374. package/dist/testSuite/merge.js.map +1 -1
  375. package/dist/testSuite/schema.js +5 -5
  376. package/dist/testSuite/schema.js.map +1 -1
  377. package/dist/testSuite/store.js +3 -3
  378. package/dist/testSuite/store.js.map +1 -1
  379. package/dist/testSuite/traceability.js +2 -2
  380. package/dist/testSuite/traceability.js.map +1 -1
  381. package/dist/tools/act.js +794 -164
  382. package/dist/tools/act.js.map +1 -1
  383. package/dist/tools/agent.js +451 -128
  384. package/dist/tools/agent.js.map +1 -1
  385. package/dist/tools/appControl.js +69 -19
  386. package/dist/tools/appControl.js.map +1 -1
  387. package/dist/tools/appMap.js +188 -130
  388. package/dist/tools/appMap.js.map +1 -1
  389. package/dist/tools/build.js +32 -42
  390. package/dist/tools/build.js.map +1 -1
  391. package/dist/tools/bundletool.js +21 -31
  392. package/dist/tools/bundletool.js.map +1 -1
  393. package/dist/tools/clearOverlay.js +55 -12
  394. package/dist/tools/clearOverlay.js.map +1 -1
  395. package/dist/tools/device.js +76 -24
  396. package/dist/tools/device.js.map +1 -1
  397. package/dist/tools/doctor.js +68 -28
  398. package/dist/tools/doctor.js.map +1 -1
  399. package/dist/tools/explore.js +41 -47
  400. package/dist/tools/explore.js.map +1 -1
  401. package/dist/tools/featureTesting.js +31 -48
  402. package/dist/tools/featureTesting.js.map +1 -1
  403. package/dist/tools/firstRun.js +34 -41
  404. package/dist/tools/firstRun.js.map +1 -1
  405. package/dist/tools/flow.js +183 -103
  406. package/dist/tools/flow.js.map +1 -1
  407. package/dist/tools/flowRepair.js +25 -13
  408. package/dist/tools/flowRepair.js.map +1 -1
  409. package/dist/tools/generate.js +52 -89
  410. package/dist/tools/generate.js.map +1 -1
  411. package/dist/tools/getArtifact.js +16 -5
  412. package/dist/tools/getArtifact.js.map +1 -1
  413. package/dist/tools/health.js +15 -12
  414. package/dist/tools/health.js.map +1 -1
  415. package/dist/tools/ios.js +45 -223
  416. package/dist/tools/ios.js.map +1 -1
  417. package/dist/tools/issues.js +251 -35
  418. package/dist/tools/issues.js.map +1 -1
  419. package/dist/tools/jobs.js +41 -16
  420. package/dist/tools/jobs.js.map +1 -1
  421. package/dist/tools/metro.js +36 -35
  422. package/dist/tools/metro.js.map +1 -1
  423. package/dist/tools/mobileAudit.js +50 -45
  424. package/dist/tools/mobileAudit.js.map +1 -1
  425. package/dist/tools/network.js +31 -14
  426. package/dist/tools/network.js.map +1 -1
  427. package/dist/tools/note.js +26 -26
  428. package/dist/tools/note.js.map +1 -1
  429. package/dist/tools/prepareIosTarget.js +10 -16
  430. package/dist/tools/prepareIosTarget.js.map +1 -1
  431. package/dist/tools/prepareTarget.js +117 -50
  432. package/dist/tools/prepareTarget.js.map +1 -1
  433. package/dist/tools/report.js +11 -22
  434. package/dist/tools/report.js.map +1 -1
  435. package/dist/tools/resolveArtifact.js +11 -15
  436. package/dist/tools/resolveArtifact.js.map +1 -1
  437. package/dist/tools/resolveTarget.js +78 -24
  438. package/dist/tools/resolveTarget.js.map +1 -1
  439. package/dist/tools/screenRecord.js +23 -21
  440. package/dist/tools/screenRecord.js.map +1 -1
  441. package/dist/tools/screenshot.js +23 -16
  442. package/dist/tools/screenshot.js.map +1 -1
  443. package/dist/tools/smoke.js +20 -16
  444. package/dist/tools/smoke.js.map +1 -1
  445. package/dist/tools/snapshot.js +155 -118
  446. package/dist/tools/snapshot.js.map +1 -1
  447. package/dist/tools/startSession.js +104 -116
  448. package/dist/tools/startSession.js.map +1 -1
  449. package/dist/tools/suite.js +72 -43
  450. package/dist/tools/suite.js.map +1 -1
  451. package/dist/tools/testSuite.js +30 -20
  452. package/dist/tools/testSuite.js.map +1 -1
  453. package/dist/tools/testThis.js +24 -28
  454. package/dist/tools/testThis.js.map +1 -1
  455. package/dist/tools/visual.js +686 -210
  456. package/dist/tools/visual.js.map +1 -1
  457. package/dist/tools/wait.js +9 -38
  458. package/dist/tools/wait.js.map +1 -1
  459. package/dist/tools/wda.js +187 -57
  460. package/dist/tools/wda.js.map +1 -1
  461. package/dist/version.js +31 -22
  462. package/dist/version.js.map +1 -1
  463. package/dist/visual/ocr.js +53 -6
  464. package/dist/visual/ocr.js.map +1 -1
  465. package/dist/visual/provider.js +80 -12
  466. package/dist/visual/provider.js.map +1 -1
  467. package/docs/README.md +24 -10
  468. package/docs/ci-reports.md +328 -0
  469. package/docs/concepts.md +227 -0
  470. package/docs/flows.md +153 -0
  471. package/docs/mcp-server.md +194 -128
  472. package/docs/physical-devices.md +84 -0
  473. package/docs/tools.md +812 -152
  474. package/package.json +3 -2
  475. package/dist/tools/assertVisual.js +0 -84
  476. package/dist/tools/assertVisual.js.map +0 -1
  477. package/dist/tools/automationGenerate.js.map +0 -1
  478. package/dist/tools/capabilities.js +0 -179
  479. package/dist/tools/capabilities.js.map +0 -1
  480. package/dist/tools/detectContext.js +0 -41
  481. package/dist/tools/detectContext.js.map +0 -1
  482. package/dist/tools/flowGenerate.js.map +0 -1
  483. package/dist/tools/history.js +0 -86
  484. package/dist/tools/history.js.map +0 -1
  485. package/dist/tools/locator.js +0 -85
  486. package/dist/tools/locator.js.map +0 -1
  487. package/dist/tools/permissions.js +0 -174
  488. package/dist/tools/permissions.js.map +0 -1
  489. package/dist/tools/plan.js +0 -52
  490. package/dist/tools/plan.js.map +0 -1
  491. package/dist/tools/screenInfo.js +0 -76
  492. package/dist/tools/screenInfo.js.map +0 -1
  493. package/dist/tools/seed.js +0 -133
  494. package/dist/tools/seed.js.map +0 -1
  495. package/dist/tools/state.js +0 -217
  496. package/dist/tools/state.js.map +0 -1
  497. package/dist/tools/visualText.js +0 -106
  498. package/dist/tools/visualText.js.map +0 -1
@@ -1,35 +1,177 @@
1
- // DirectDriver — the v1 Android backend. Reads the accessibility tree via
2
- // the platform UI-dump tool and acts via `adb shell input` (DESIGN §11). No external
1
+ // DirectDriver: the v1 Android backend. Reads the accessibility tree via
2
+ // the platform UI-dump tool and acts via `adb shell input`. No external
3
3
  // automation server.
4
4
  //
5
5
  // The shell-tap / `input text` approach is the same one proven in the Inn suite for
6
6
  // React Native custom inputs that don't respond to programmatic clicks.
7
7
  import { run, runBinary } from '../lib/spawn.js';
8
+ import { currentSignal } from '../lib/abortScope.js';
8
9
  import { adbDevices } from '../lib/android.js';
10
+ /** Characters the device-side /system/bin/sh (mksh) treats specially; each gets a backslash.
11
+ * Includes brace/glob expansion (`{a,b}` > `a b`, `[s]dcard` > `sdcard`). Backslash itself is
12
+ * escaped first (see escapeAdbInputText) so later escapes aren't doubled. */
13
+ const DEVICE_SHELL_META = /([&|;()<>"'$`*?!#~^{}[\]])/g;
14
+ /** PURE: can adb `input text` deliver `text` verbatim? It cannot deliver characters outside
15
+ * printable ASCII (Unicode, newline, tab). The device-side shell/IME drops or mangles them.
16
+ * qa_act checks this BEFORE focusing/clearing a field so a refusal changes nothing on device. */
17
+ export function adbTextDeliverability(text) {
18
+ const unsupported = [...new Set(text.match(/[^\x20-\x7E]/g) ?? [])];
19
+ if (!unsupported.length)
20
+ return { ok: true };
21
+ return {
22
+ ok: false,
23
+ reason: `TEXT_INPUT_UNSUPPORTED: adb \`input text\` cannot deliver non-ASCII/control characters ${unsupported
24
+ .map((c) => JSON.stringify(c))
25
+ .join(', ')}; nothing was typed. Use ASCII-safe text for this field.`,
26
+ };
27
+ }
28
+ /** PURE: escape one `input text` chunk for the device shell. Spaces become `%s` because
29
+ * `input text` takes ONE arg and maps `%s` back to a space (InputShellCommand.sendText). */
30
+ export function escapeAdbInputText(text) {
31
+ return text.replace(/\\/g, '\\\\').replace(DEVICE_SHELL_META, '\\$1').replace(/ /g, '%s');
32
+ }
33
+ /** PURE: split raw text so no single `input text` call contains the literal two-char sequence
34
+ * `%s`. AOSP InputShellCommand.sendText rewrites EVERY `%s` to a space with no escape for it,
35
+ * so "ab%scd" must go out as "ab%" then "scd" (the rewrite never spans two calls). */
36
+ export function adbInputTextChunks(text) {
37
+ const chunks = [];
38
+ let start = 0;
39
+ for (let i = 0; i < text.length - 1; i++) {
40
+ if (text[i] === '%' && text[i + 1] === 's') {
41
+ chunks.push(text.slice(start, i + 1));
42
+ start = i + 1;
43
+ }
44
+ }
45
+ chunks.push(text.slice(start));
46
+ return chunks.filter((c) => c.length > 0);
47
+ }
48
+ /** PURE: POSIX single-quote a value for the device shell (`'` > `'\''`), so deep links and
49
+ * launch extras with `&`, `;`, spaces or quotes reach `am` as ONE literal argument. */
50
+ export function deviceShellQuote(value) {
51
+ return `'${value.replace(/'/g, `'\\''`)}'`;
52
+ }
53
+ /** PURE: display rotation (0-3) from `dumpsys input`, i.e. `SurfaceOrientation: N` (per touch
54
+ * device) or the viewport `orientation=N` line on newer builds. null when absent. */
55
+ export function parseInputRotation(dumpsysInput) {
56
+ const m = dumpsysInput.match(/SurfaceOrientation:\s*(\d)/) ??
57
+ dumpsysInput.match(/Viewport (?:INTERNAL|DISPLAY)[^\n]*?orientation=(\d)/) ??
58
+ dumpsysInput.match(/mCurrentRotation=ROTATION_(\d+)/);
59
+ if (!m)
60
+ return null;
61
+ const n = Number(m[1]);
62
+ return n >= 90 ? (n / 90) % 4 : n % 4;
63
+ }
64
+ /** PURE: the soft keyboard's on-screen rect from `dumpsys window InputMethod`, or null.
65
+ * Prefers the touchable region; else the window frame shrunk by its given visible/content
66
+ * insets (older builds size the IME window near full-screen and inset the keyboard). The caller
67
+ * (qa_act keyboardArea) additionally treats a frame taller than ~55% of the screen as unknown. */
68
+ export function parseImeFrame(dumpsysWindow) {
69
+ const touch = dumpsysWindow.match(/touchable region=SkRegion\(\((\d+),(\d+),(\d+),(\d+)\)\)/);
70
+ if (touch) {
71
+ const r = touch.slice(1, 5).map(Number);
72
+ if (r[3] > r[1] && r[2] > r[0])
73
+ return r;
74
+ }
75
+ const frame = dumpsysWindow.match(/(?:\bframe|mFrame)=\[(-?\d+),(-?\d+)\]\[(-?\d+),(-?\d+)\]/);
76
+ if (!frame)
77
+ return null;
78
+ const [x1, y1, x2, y2] = frame.slice(1, 5).map(Number);
79
+ const insets = dumpsysWindow.match(/mGivenVisibleInsets=\[(\d+),(\d+)\]\[(\d+),(\d+)\]/) ??
80
+ dumpsysWindow.match(/mGivenContentInsets=\[(\d+),(\d+)\]\[(\d+),(\d+)\]/);
81
+ const top = y1 + (insets ? Number(insets[2]) : 0);
82
+ if (y2 <= top || x2 <= x1)
83
+ return null;
84
+ return [x1, top, x2, y2];
85
+ }
86
+ /** A valid Android application id (package name): dot-separated Java identifiers, >= 2 segments. */
87
+ export const ANDROID_APP_ID_RE = /^[A-Za-z][\w]*(\.[A-Za-z][\w]*)+$/;
88
+ /** Throw a typed INVALID_ARGUMENT error unless `pkg` is a well-formed Android application id.
89
+ * App ids reach `adb shell` (a device-side sh re-parses the joined argv), so a value like
90
+ * `com.x; rm -rf /sdcard` must never get there (M1). Callers also shell-quote it. */
91
+ export function assertAndroidAppId(pkg) {
92
+ if (typeof pkg !== 'string' || !ANDROID_APP_ID_RE.test(pkg)) {
93
+ const err = new Error(`INVALID_ARGUMENT: ${JSON.stringify(String(pkg).slice(0, 80))} is not a valid Android application id (expected e.g. com.example.app).`);
94
+ err.code = 'INVALID_ARGUMENT';
95
+ throw err;
96
+ }
97
+ return pkg;
98
+ }
99
+ /** Validated + device-shell-quoted app id for an `adb shell` argv. */
100
+ export function shellAppId(pkg) {
101
+ return deviceShellQuote(assertAndroidAppId(pkg));
102
+ }
103
+ /** PURE: `<hierarchy rotation="N">` from a uiautomator dump, or null. */
104
+ export function dumpRotation(xml) {
105
+ const m = xml.slice(0, 400).match(/<hierarchy\b[^>]*\brotation="(\d)"/);
106
+ return m ? Number(m[1]) % 4 : null;
107
+ }
108
+ /** PURE: current-axes screen size from a uiautomator dump's ROOT node, only when the root is
109
+ * anchored at [0,0] and its aspect agrees with the dump's rotation (a dialog/split-screen window
110
+ * root is not the screen). null otherwise. */
111
+ export function dumpRootScreen(xml) {
112
+ const rotation = dumpRotation(xml);
113
+ if (rotation === null)
114
+ return null;
115
+ const m = xml.match(/<node\b[^>]*?\bbounds="\[(-?\d+),(-?\d+)\]\[(-?\d+),(-?\d+)\]"/);
116
+ if (!m)
117
+ return null;
118
+ const [x1, y1, x2, y2] = m.slice(1, 5).map(Number);
119
+ if (x1 !== 0 || y1 !== 0 || x2 <= 0 || y2 <= 0)
120
+ return null;
121
+ if ((rotation % 2 === 1) !== x2 > y2)
122
+ return null;
123
+ return { width: x2, height: y2 };
124
+ }
125
+ /** Separator between the two dumpsys outputs of DirectDriver.imeState(). */
126
+ const IME_STATE_SEP = '__SWIPIUM_IME_SEP__';
9
127
  const KEYCODE = {
10
128
  back: '4',
11
129
  home: '3',
12
130
  enter: '66',
13
131
  };
132
+ /** How long a DirectDriver reuses its last screen size + rotation (review round 2: swipes used
133
+ * to run `wm size` + a full `dumpsys input` (a few hundred ms) on EVERY gesture). A device-side
134
+ * rotation is picked up sooner than the TTL: every UI dump carries `<hierarchy rotation=N>`, and a
135
+ * rotation different from the cached one drops the cache (plus invalidateScreenSizeCache for
136
+ * Swipium's own orientation changes). */
137
+ export const SCREEN_SIZE_TTL_MS = 30_000;
138
+ /** A dump younger than this may answer screenSize() from its root bounds (no adb round trip). */
139
+ export const DUMP_SCREEN_FRESH_MS = 5_000;
140
+ /** Serials whose cached screen size must be dropped (Swipium changed the orientation). Global so
141
+ * the orientation tool can invalidate every DirectDriver bound to that device. */
142
+ const screenSizeEpoch = new Map();
143
+ /** Invalidate cached screen sizes (call after Swipium changes the orientation of `serial`, or
144
+ * of every device when omitted). */
145
+ export function invalidateScreenSizeCache(serial) {
146
+ if (serial)
147
+ screenSizeEpoch.set(serial, (screenSizeEpoch.get(serial) ?? 0) + 1);
148
+ else
149
+ screenSizeEpoch.set('*', (screenSizeEpoch.get('*') ?? 0) + 1);
150
+ }
151
+ function epochOf(serial) {
152
+ return (screenSizeEpoch.get(serial ?? '') ?? 0) + (screenSizeEpoch.get('*') ?? 0);
153
+ }
154
+ /** Current invalidation epoch for `serial` (shared with the WDA driver's size cache). */
155
+ export function currentScreenSizeEpoch(serial) {
156
+ return epochOf(serial);
157
+ }
14
158
  export class DirectDriver {
15
159
  kind = 'direct';
16
160
  serial;
17
- signal;
18
161
  constructor(serial) {
19
162
  this.serial = serial;
20
163
  }
21
- /** Bind an AbortSignal so a cancelled job actually kills in-flight adb children. */
22
- setSignal(signal) {
23
- this.signal = signal;
24
- }
25
164
  base() {
26
165
  return this.serial ? ['-s', this.serial] : [];
27
166
  }
28
167
  async adb(args, opts = {}) {
29
- return run('adb', [...this.base(), ...args], {
168
+ const full = [...this.base(), ...args];
169
+ return run('adb', full, {
30
170
  timeoutMs: opts.timeoutMs ?? 20000,
31
- signal: opts.signal ?? this.signal,
171
+ // Cancellation travels with the call (abortScope), never via a shared slot on the driver.
172
+ signal: opts.signal ?? currentSignal(),
32
173
  rejectOnNonZero: true,
174
+ ...(opts.sensitiveLastArg ? { redactArgs: [full.length - 1] } : {}),
33
175
  });
34
176
  }
35
177
  async listDevices() {
@@ -37,6 +179,8 @@ export class DirectDriver {
37
179
  }
38
180
  useDevice(serial) {
39
181
  this.serial = serial;
182
+ this.sizeCache = undefined;
183
+ this.dumpScreen = undefined;
40
184
  }
41
185
  currentDevice() {
42
186
  return this.serial;
@@ -45,15 +189,16 @@ export class DirectDriver {
45
189
  await this.adb(['install', '-r', '-g', apkPath], { timeoutMs: 180000 });
46
190
  }
47
191
  async uninstallApp(pkg) {
48
- await this.adb(['uninstall', pkg], { timeoutMs: 60000 });
192
+ await this.adb(['uninstall', assertAndroidAppId(pkg)], { timeoutMs: 60000 });
49
193
  }
50
194
  async isInstalled(pkg) {
51
- const r = await this.adb(['shell', 'pm', 'list', 'packages', pkg]);
195
+ const r = await this.adb(['shell', 'pm', 'list', 'packages', shellAppId(pkg)]);
52
196
  return r.stdout.split('\n').some((l) => l.trim() === `package:${pkg}`);
53
197
  }
54
198
  async isRunning(pkg) {
199
+ assertAndroidAppId(pkg); // a malformed id is an argument error, not "not running"
55
200
  try {
56
- const r = await this.adb(['shell', 'pidof', pkg]);
201
+ const r = await this.adb(['shell', 'pidof', shellAppId(pkg)]);
57
202
  return r.stdout.trim().length > 0;
58
203
  }
59
204
  catch {
@@ -61,7 +206,7 @@ export class DirectDriver {
61
206
  }
62
207
  }
63
208
  async clearData(pkg) {
64
- await this.adb(['shell', 'pm', 'clear', pkg]);
209
+ await this.adb(['shell', 'pm', 'clear', shellAppId(pkg)]);
65
210
  }
66
211
  async imeShown() {
67
212
  try {
@@ -72,6 +217,23 @@ export class DirectDriver {
72
217
  return false;
73
218
  }
74
219
  }
220
+ /** Keyboard shown + frame in ONE `adb shell` (both dumpsys, separated). The keyboard guard
221
+ * used to pay two adb round trips on every tap/type. */
222
+ async imeState() {
223
+ try {
224
+ const r = await this.adb(['shell', `dumpsys input_method; echo ${IME_STATE_SEP}; dumpsys window InputMethod`], {
225
+ timeoutMs: 8000,
226
+ });
227
+ const i = r.stdout.indexOf(IME_STATE_SEP);
228
+ const ime = i >= 0 ? r.stdout.slice(0, i) : r.stdout;
229
+ const win = i >= 0 ? r.stdout.slice(i + IME_STATE_SEP.length) : '';
230
+ const shown = /mInputShown=true/.test(ime);
231
+ return { shown, frame: shown ? parseImeFrame(win) : null };
232
+ }
233
+ catch {
234
+ return { shown: false, frame: null };
235
+ }
236
+ }
75
237
  async logcat(lines, grep) {
76
238
  try {
77
239
  const r = await this.adb(['logcat', '-d', '-t', String(lines)], { timeoutMs: 8000 });
@@ -103,10 +265,10 @@ export class DirectDriver {
103
265
  }
104
266
  async launchApp(pkg) {
105
267
  // monkey is the simplest reliable launcher when we don't know the main activity.
106
- await this.adb(['shell', 'monkey', '-p', pkg, '-c', 'android.intent.category.LAUNCHER', '1']);
268
+ await this.adb(['shell', 'monkey', '-p', shellAppId(pkg), '-c', 'android.intent.category.LAUNCHER', '1']);
107
269
  }
108
270
  async launchAppWithArgs(pkg, args) {
109
- const resolved = await this.adb(['shell', 'cmd', 'package', 'resolve-activity', '--brief', pkg], { timeoutMs: 8000 });
271
+ const resolved = await this.adb(['shell', 'cmd', 'package', 'resolve-activity', '--brief', shellAppId(pkg)], { timeoutMs: 8000 });
110
272
  const component = resolved.stdout
111
273
  .split(/\r?\n/)
112
274
  .map((l) => l.trim())
@@ -116,19 +278,21 @@ export class DirectDriver {
116
278
  throw new Error(`Could not resolve launch activity for ${pkg}`);
117
279
  const extras = [];
118
280
  for (const [key, value] of Object.entries(args)) {
281
+ // `adb shell` space-joins argv into ONE string the device sh re-parses: every
282
+ // user-supplied token is single-quoted so `&`, `;`, spaces and quotes survive intact.
119
283
  if (typeof value === 'boolean')
120
- extras.push('--ez', key, String(value));
284
+ extras.push('--ez', deviceShellQuote(key), String(value));
121
285
  else if (Number.isInteger(value))
122
- extras.push('--ei', key, String(value));
286
+ extras.push('--ei', deviceShellQuote(key), String(value));
123
287
  else if (typeof value === 'number')
124
- extras.push('--ef', key, String(value));
288
+ extras.push('--ef', deviceShellQuote(key), String(value));
125
289
  else
126
- extras.push('--es', key, String(value));
290
+ extras.push('--es', deviceShellQuote(key), deviceShellQuote(String(value)));
127
291
  }
128
- await this.adb(['shell', 'am', 'start', '-W', '-S', '-n', component, ...extras], { timeoutMs: 30000 });
292
+ await this.adb(['shell', 'am', 'start', '-W', '-S', '-n', deviceShellQuote(component), ...extras], { timeoutMs: 30000 });
129
293
  }
130
294
  async terminateApp(pkg) {
131
- await this.adb(['shell', 'am', 'force-stop', pkg]);
295
+ await this.adb(['shell', 'am', 'force-stop', shellAppId(pkg)]);
132
296
  }
133
297
  async foregroundOwner() {
134
298
  // Parse the currently focused window/activity. Works across recent Android versions.
@@ -137,50 +301,99 @@ export class DirectDriver {
137
301
  return m?.[1] ?? 'unknown';
138
302
  }
139
303
  async screenshot() {
140
- // exec-out returns raw PNG bytes on stdout — must be collected as binary.
304
+ // exec-out returns raw PNG bytes on stdout, so it must be collected as binary.
141
305
  const r = await runBinary('adb', [...this.base(), 'exec-out', 'screencap', '-p'], {
142
306
  timeoutMs: 15000,
143
- signal: this.signal,
307
+ signal: currentSignal(),
144
308
  rejectOnNonZero: true,
145
309
  });
146
310
  return r.stdout;
147
311
  }
148
- async dumpXml() {
312
+ async dumpXml(opts = {}) {
149
313
  // mobile-mcp's proven recipe: exec-out to stdout, retry on the transient
150
314
  // "could not get hierarchy" / null-root, strip warning lines before <?xml.
151
315
  // Kept modest (5) so a PERSISTENT idle failure (looping animation) surfaces fast and the
152
- // tool layer can switch to visual-fallback rather than burning ~30 attempts.
153
- const ATTEMPTS = 5;
316
+ // tool layer can switch to visual-fallback rather than burning ~30 attempts. Callers with a
317
+ // deadline (settle) pass opts.timeoutMs (TOTAL budget, retries included) + fewer attempts.
318
+ const ATTEMPTS = Math.max(1, opts.attempts ?? 5);
319
+ const deadline = opts.timeoutMs ? Date.now() + opts.timeoutMs : undefined;
154
320
  let lastErr = '';
155
- for (let attempt = 0; attempt < ATTEMPTS; attempt++) {
321
+ let attempt = 0;
322
+ for (; attempt < ATTEMPTS; attempt++) {
323
+ const remaining = deadline === undefined ? 20000 : Math.min(20000, deadline - Date.now());
324
+ if (remaining <= 0)
325
+ break;
156
326
  try {
157
- const r = await this.adb(['exec-out', 'uiautomator', 'dump', '/dev/tty']);
327
+ const r = await this.adb(['exec-out', 'uiautomator', 'dump', '/dev/tty'], { timeoutMs: remaining });
158
328
  const idx = r.stdout.indexOf('<?xml');
159
329
  if (idx >= 0 && r.stdout.includes('</hierarchy>')) {
160
- return r.stdout.slice(idx);
330
+ const xml = r.stdout.slice(idx);
331
+ this.noteDump(xml);
332
+ return xml;
161
333
  }
162
334
  lastErr = r.stdout.trim() || r.stderr.trim();
163
335
  }
164
336
  catch (e) {
165
337
  lastErr = String(e);
166
338
  }
339
+ if (attempt + 1 >= ATTEMPTS || (deadline !== undefined && deadline - Date.now() <= 400)) {
340
+ attempt++;
341
+ break;
342
+ }
167
343
  await new Promise((res) => setTimeout(res, 400));
168
344
  }
169
- throw new Error(`uiautomator dump failed after ${ATTEMPTS} attempts: ${lastErr}`);
345
+ throw new Error(`uiautomator dump failed after ${attempt} attempt(s): ${lastErr}`);
346
+ }
347
+ /** Last dump's root-derived screen size (see dumpRootScreen), for screenSize(). */
348
+ dumpScreen;
349
+ /** Keep the screen-size cache honest from every dump: a rotation change drops it, and a
350
+ * [0,0]-anchored root gives a free current-axes size. */
351
+ noteDump(xml) {
352
+ const rotation = dumpRotation(xml);
353
+ if (rotation !== null && this.sizeCache && this.sizeCache.rotation !== rotation)
354
+ this.sizeCache = undefined;
355
+ const size = dumpRootScreen(xml);
356
+ this.dumpScreen = size ? { at: Date.now(), serial: this.serial, size } : undefined;
170
357
  }
171
358
  async tapXY(x, y) {
172
359
  await this.adb(['shell', 'input', 'tap', String(Math.round(x)), String(Math.round(y))]);
173
360
  }
174
361
  async pressXY(x, y, ms) {
175
- // Same-point swipe with a duration — registers on RN views that ignore instant taps.
362
+ // Same-point swipe with a duration. It registers on RN views that ignore instant taps.
176
363
  const sx = String(Math.round(x));
177
364
  const sy = String(Math.round(y));
178
365
  await this.adb(['shell', 'input', 'swipe', sx, sy, sx, sy, String(Math.round(ms))]);
179
366
  }
367
+ canDeliverText(text) {
368
+ return adbTextDeliverability(text);
369
+ }
180
370
  async inputText(text) {
181
- // `input text` uses %s for space; avoid characters the shell would interpret.
182
- const escaped = text.replace(/ /g, '%s');
183
- await this.adb(['shell', 'input', 'text', escaped]);
371
+ // `input text` cannot deliver characters outside printable ASCII (Unicode, newline, tab):
372
+ // the device-side shell/IME drops or mangles them, so refuse loudly instead of mistyping.
373
+ const verdict = adbTextDeliverability(text);
374
+ if (!verdict.ok)
375
+ throw new Error(verdict.reason);
376
+ // Empty text: nothing to type, and `input text` with no argument is a usage error.
377
+ if (!text)
378
+ return;
379
+ // `adb shell` space-joins its args into one string the DEVICE-side sh re-parses, so every
380
+ // shell-significant character needs a backslash escape (escapeAdbInputText). A literal
381
+ // "%s" can't be escaped for `input text`, so it is split across calls (adbInputTextChunks).
382
+ for (const chunk of adbInputTextChunks(text)) {
383
+ const escaped = escapeAdbInputText(chunk);
384
+ try {
385
+ // H2: the argv IS the (possibly secret) text, so never let it into the error message.
386
+ await this.adb(['shell', 'input', 'text', escaped], { sensitiveLastArg: true });
387
+ }
388
+ catch (e) {
389
+ let msg = String(e?.message ?? e);
390
+ for (const v of [escaped, chunk, text])
391
+ if (v.length >= 3 && msg.includes(v))
392
+ msg = msg.split(v).join('«redacted»');
393
+ // cause: the spawn error is already argv-redacted (redactArgs), so it's safe to chain.
394
+ throw new Error(`adb input text failed (${text.length} chars, value withheld): ${msg}`, { cause: e });
395
+ }
396
+ }
184
397
  }
185
398
  async clearFocusedText(approxLen = 40) {
186
399
  const n = Math.min(Math.max(approxLen + 2, 1), 120);
@@ -202,17 +415,67 @@ export class DirectDriver {
202
415
  String(ms),
203
416
  ]);
204
417
  }
418
+ sizeCache;
419
+ /** Current-axes screen size, cached for SCREEN_SIZE_TTL_MS (and until invalidateScreenSizeCache
420
+ * for this device, e.g. after a Swipium orientation change, or until a dump reports a different
421
+ * rotation). Without a cache, a fresh dump's [0,0]-anchored root answers for free. Failures are
422
+ * never cached. */
205
423
  async screenSize() {
424
+ const c = this.sizeCache;
425
+ if (c && c.serial === this.serial && c.epoch === epochOf(this.serial) && Date.now() - c.at < SCREEN_SIZE_TTL_MS)
426
+ return { ...c.size };
427
+ const ds = this.dumpScreen;
428
+ if (ds && ds.serial === this.serial && Date.now() - ds.at < DUMP_SCREEN_FRESH_MS)
429
+ return { ...ds.size };
430
+ const epoch = epochOf(this.serial);
431
+ const read = await this.readScreenSize();
432
+ this.sizeCache = read ? { at: Date.now(), epoch, serial: this.serial, rotation: read.rotation, size: read.size } : undefined;
433
+ return read ? { ...read.size } : null;
434
+ }
435
+ async readScreenSize() {
206
436
  try {
207
437
  const r = await this.adb(['shell', 'wm', 'size']);
208
438
  // prefer "Override size:" if present, else "Physical size:"
209
439
  const m = r.stdout.match(/Override size:\s*(\d+)x(\d+)/) ?? r.stdout.match(/Physical size:\s*(\d+)x(\d+)/);
210
- return m ? { width: Number(m[1]), height: Number(m[2]) } : null;
440
+ if (!m)
441
+ return null;
442
+ const size = { width: Number(m[1]), height: Number(m[2]) };
443
+ // `wm size` reports the NATURAL orientation; swap for a 90°/270° rotation so gestures
444
+ // and keyboard/obstruction geometry use the current screen axes.
445
+ const rotation = await this.rotation();
446
+ return { rotation, size: rotation % 2 === 1 ? { width: size.height, height: size.width } : size };
447
+ }
448
+ catch {
449
+ return null;
450
+ }
451
+ }
452
+ /** Current display rotation 0-3 (0 when unknown). */
453
+ async rotation() {
454
+ try {
455
+ const r = await this.adb(['shell', 'dumpsys', 'input'], { timeoutMs: 8000 });
456
+ return parseInputRotation(r.stdout) ?? 0;
457
+ }
458
+ catch {
459
+ return 0;
460
+ }
461
+ }
462
+ /** On-screen soft-keyboard rect (dumpsys window InputMethod), or null when unknown/hidden. */
463
+ async imeFrame() {
464
+ try {
465
+ const r = await this.adb(['shell', 'dumpsys', 'window', 'InputMethod'], { timeoutMs: 8000 });
466
+ return parseImeFrame(r.stdout);
211
467
  }
212
468
  catch {
213
469
  return null;
214
470
  }
215
471
  }
472
+ /** Hide the soft keyboard: BACK only while the IME is actually shown (BACK otherwise navigates). */
473
+ async hideKeyboard() {
474
+ if (!(await this.imeShown()))
475
+ return false;
476
+ await this.pressKey('back');
477
+ return true;
478
+ }
216
479
  async screenDensity() {
217
480
  try {
218
481
  const r = await this.adb(['shell', 'wm', 'density']);
@@ -227,7 +490,8 @@ export class DirectDriver {
227
490
  await this.adb(['reverse', `tcp:${port}`, `tcp:${port}`]);
228
491
  }
229
492
  async openUrl(url) {
230
- await this.adb(['shell', 'am', 'start', '-a', 'android.intent.action.VIEW', '-d', url]);
493
+ // Single-quoted for the device shell: `a=1&b=2` or spaces would otherwise split/background.
494
+ await this.adb(['shell', 'am', 'start', '-a', 'android.intent.action.VIEW', '-d', deviceShellQuote(url)]);
231
495
  }
232
496
  async disableAnimations() {
233
497
  for (const k of ['window_animation_scale', 'transition_animation_scale', 'animator_duration_scale']) {
@@ -1 +1 @@
1
- {"version":3,"file":"DirectDriver.js","sourceRoot":"","sources":["../../src/drivers/DirectDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DirectDriver.js","sourceRoot":"","sources":["../../src/drivers/DirectDriver.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AACxE,qBAAqB;AACrB,EAAE;AACF,oFAAoF;AACpF,wEAAwE;AAExE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C;;6EAE6E;AAC7E,MAAM,iBAAiB,GAAG,6BAA6B,CAAC;AAExD;;iGAEiG;AACjG,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,WAAW,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAC7C,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,0FAA0F,WAAW;aAC1G,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC7B,IAAI,CAAC,IAAI,CAAC,0DAA0D;KACxE,CAAC;AACJ,CAAC;AAED;4FAC4F;AAC5F,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5F,CAAC;AAED;;sFAEsF;AACtF,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;uFACuF;AACvF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED;qFACqF;AACrF,MAAM,UAAU,kBAAkB,CAAC,YAAoB;IACrD,MAAM,CAAC,GACL,YAAY,CAAC,KAAK,CAAC,4BAA4B,CAAC;QAChD,YAAY,CAAC,KAAK,CAAC,sDAAsD,CAAC;QAC1E,YAAY,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED;;;kGAGkG;AAClG,MAAM,UAAU,aAAa,CAAC,aAAqB;IACjD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9F,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAqC,CAAC;QAC5E,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/F,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,MAAM,GACV,aAAa,CAAC,KAAK,CAAC,oDAAoD,CAAC;QACzE,aAAa,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,MAAM,iBAAiB,GAAG,mCAAmC,CAAC;AAErE;;qFAEqF;AACrF,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,qBAAqB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,yEAAyE,CACvI,CAAC;QACD,GAAiC,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC7D,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC;AAED;;8CAE8C;AAC9C,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACtF,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACnC,CAAC;AAED,4EAA4E;AAC5E,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAE5C,MAAM,OAAO,GAA8C;IACzD,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF;;;;yCAIyC;AACzC,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,iGAAiG;AACjG,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C;kFACkF;AAClF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;AAElD;oCACoC;AACpC,MAAM,UAAU,yBAAyB,CAAC,MAAe;IACvD,IAAI,MAAM;QAAE,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;;QAC3E,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,OAAO,CAAC,MAA0B;IACzC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,sBAAsB,CAAC,MAA0B;IAC/D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,QAAiB,CAAC;IAC1B,MAAM,CAAU;IAExB,YAAY,MAAe;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,IAAI;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,OAAiF,EAAE;QACnH,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QACvC,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE;YACtB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK;YAClC,0FAA0F;YAC1F,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,aAAa,EAAE;YACtC,eAAe,EAAE,IAAI;YACrB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAW;QAC3B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,WAAW,GAAG,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,yDAAyD;QAClF,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC,CAAC,uCAAuC;QACvD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YAC/D,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;4DACwD;IACxD,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,8BAA8B,aAAa,8BAA8B,CAAC,EAAE;gBAC7G,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACrD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAAa;QACvC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrF,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,IAAI;gBAAE,OAAO,GAAG,CAAC;YACtB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACjC,OAAO,GAAG;iBACP,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACzB,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAW;QAC3B,kFAAkF;QAClF,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,iFAAiF;QACjF,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,kCAAkC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5G,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAW,EAAE,IAA6B;QAChE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClI,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM;aAC9B,KAAK,CAAC,OAAO,CAAC;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC;aACf,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACV,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;QAC5G,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,8EAA8E;YAC9E,sFAAsF;YACtF,IAAI,OAAO,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;iBACrF,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;iBACvF,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;;gBACzF,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3H,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,qFAAqF;QACrF,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACrI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,+EAA+E;QAC/E,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;YAChF,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,aAAa,EAAE;YACvB,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAoB,EAAE;QAClC,yEAAyE;QACzE,2EAA2E;QAC3E,yFAAyF;QACzF,4FAA4F;QAC5F,2FAA2F;QAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,OAAO,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1F,IAAI,SAAS,IAAI,CAAC;gBAAE,MAAM;YAC1B,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;gBACpG,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBAClD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACb,CAAC;gBACD,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,OAAO,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;gBACxF,OAAO,EAAE,CAAC;gBACV,MAAM;YACR,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,OAAO,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,mFAAmF;IAC3E,UAAU,CAA4E;IAE9F;6DACyD;IACjD,QAAQ,CAAC,GAAW;QAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,QAAQ;YAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5G,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,CAAS,EAAE,CAAS;QAC9B,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU;QAC5C,uFAAuF;QACvF,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,0FAA0F;QAC1F,0FAA0F;QAC1F,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,mFAAmF;QACnF,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,0FAA0F;QAC1F,uFAAuF;QACvF,4FAA4F;QAC5F,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACH,sFAAsF;gBACtF,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;YAClF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,GAAG,GAAG,MAAM,CAAE,CAAW,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;gBAC7C,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;oBAAE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACpH,uFAAuF;gBACvF,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,MAAM,4BAA4B,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACxG,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,SAAS,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,qEAAqE;QACrE,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAA8B;QAC3C,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAE,GAAG,GAAG;QAClE,MAAM,IAAI,CAAC,GAAG,CAAC;YACb,OAAO;YACP,OAAO;YACP,OAAO;YACP,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,CAAC,EAAE,CAAC;SACX,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAA6G;IAE9H;;;uBAGmB;IACnB,KAAK,CAAC,UAAU;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,kBAAkB;YAAE,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACtI,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3B,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,oBAAoB;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QACxG,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7H,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAClD,4DAA4D;YAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC3G,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpB,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,sFAAsF;YACtF,iEAAiE;YACjE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpG,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,OAAO,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,8FAA8F;IAC9F,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7F,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,oGAAoG;IACpG,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3C,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACrG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI;QAC/B,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,IAAI,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,4FAA4F;QAC5F,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5G,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,KAAK,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,4BAA4B,EAAE,yBAAyB,CAAC,EAAE,CAAC;YACpG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;CACF"}