@lhremote/core 0.7.0 → 0.9.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 (546) hide show
  1. package/dist/cdp/app-discovery.d.ts +57 -0
  2. package/dist/cdp/app-discovery.d.ts.map +1 -1
  3. package/dist/cdp/app-discovery.js +90 -7
  4. package/dist/cdp/app-discovery.js.map +1 -1
  5. package/dist/cdp/app-discovery.test.js +180 -9
  6. package/dist/cdp/app-discovery.test.js.map +1 -1
  7. package/dist/cdp/client.d.ts +8 -1
  8. package/dist/cdp/client.d.ts.map +1 -1
  9. package/dist/cdp/client.js +8 -1
  10. package/dist/cdp/client.js.map +1 -1
  11. package/dist/cdp/discovery.d.ts.map +1 -1
  12. package/dist/cdp/discovery.js +5 -1
  13. package/dist/cdp/discovery.js.map +1 -1
  14. package/dist/cdp/discovery.test.js +7 -0
  15. package/dist/cdp/discovery.test.js.map +1 -1
  16. package/dist/cdp/index.d.ts +1 -1
  17. package/dist/cdp/index.d.ts.map +1 -1
  18. package/dist/cdp/index.js +1 -1
  19. package/dist/cdp/index.js.map +1 -1
  20. package/dist/cdp/instance-discovery.d.ts.map +1 -1
  21. package/dist/cdp/instance-discovery.js +25 -10
  22. package/dist/cdp/instance-discovery.js.map +1 -1
  23. package/dist/cdp/instance-discovery.test.js +17 -0
  24. package/dist/cdp/instance-discovery.test.js.map +1 -1
  25. package/dist/cdp/testing/launch-chromium.d.ts +1 -1
  26. package/dist/cdp/testing/launch-chromium.js +2 -2
  27. package/dist/db/client.d.ts.map +1 -1
  28. package/dist/db/client.js +3 -0
  29. package/dist/db/client.js.map +1 -1
  30. package/dist/db/index.d.ts +1 -1
  31. package/dist/db/index.d.ts.map +1 -1
  32. package/dist/db/index.js +1 -1
  33. package/dist/db/index.js.map +1 -1
  34. package/dist/db/repositories/action-budget.d.ts +29 -0
  35. package/dist/db/repositories/action-budget.d.ts.map +1 -0
  36. package/dist/db/repositories/action-budget.js +100 -0
  37. package/dist/db/repositories/action-budget.js.map +1 -0
  38. package/dist/db/repositories/action-budget.test.d.ts +2 -0
  39. package/dist/db/repositories/action-budget.test.d.ts.map +1 -0
  40. package/dist/db/repositories/action-budget.test.js +181 -0
  41. package/dist/db/repositories/action-budget.test.js.map +1 -0
  42. package/dist/db/repositories/campaign-hard-delete.integration.test.d.ts +2 -0
  43. package/dist/db/repositories/campaign-hard-delete.integration.test.d.ts.map +1 -0
  44. package/dist/db/repositories/campaign-hard-delete.integration.test.js +78 -0
  45. package/dist/db/repositories/campaign-hard-delete.integration.test.js.map +1 -0
  46. package/dist/db/repositories/campaign.d.ts +14 -0
  47. package/dist/db/repositories/campaign.d.ts.map +1 -1
  48. package/dist/db/repositories/campaign.js +125 -0
  49. package/dist/db/repositories/campaign.js.map +1 -1
  50. package/dist/db/repositories/collection-list.integration.test.js +6 -4
  51. package/dist/db/repositories/collection-list.integration.test.js.map +1 -1
  52. package/dist/db/repositories/index.d.ts +1 -0
  53. package/dist/db/repositories/index.d.ts.map +1 -1
  54. package/dist/db/repositories/index.js +1 -0
  55. package/dist/db/repositories/index.js.map +1 -1
  56. package/dist/index.d.ts +7 -6
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +27 -7
  59. package/dist/index.js.map +1 -1
  60. package/dist/linkedin/__tests__/dom-automation.integration.test.d.ts +2 -0
  61. package/dist/linkedin/__tests__/dom-automation.integration.test.d.ts.map +1 -0
  62. package/dist/linkedin/__tests__/dom-automation.integration.test.js +160 -0
  63. package/dist/linkedin/__tests__/dom-automation.integration.test.js.map +1 -0
  64. package/dist/linkedin/dom-automation-retry.test.d.ts +2 -0
  65. package/dist/linkedin/dom-automation-retry.test.d.ts.map +1 -0
  66. package/dist/linkedin/dom-automation-retry.test.js +51 -0
  67. package/dist/linkedin/dom-automation-retry.test.js.map +1 -0
  68. package/dist/linkedin/dom-automation.d.ts +224 -0
  69. package/dist/linkedin/dom-automation.d.ts.map +1 -0
  70. package/dist/linkedin/dom-automation.js +614 -0
  71. package/dist/linkedin/dom-automation.js.map +1 -0
  72. package/dist/linkedin/humanized-mouse.d.ts +69 -0
  73. package/dist/linkedin/humanized-mouse.d.ts.map +1 -0
  74. package/dist/linkedin/humanized-mouse.js +109 -0
  75. package/dist/linkedin/humanized-mouse.js.map +1 -0
  76. package/dist/linkedin/index.d.ts +4 -0
  77. package/dist/linkedin/index.d.ts.map +1 -0
  78. package/dist/linkedin/index.js +6 -0
  79. package/dist/linkedin/index.js.map +1 -0
  80. package/dist/linkedin/selectors.d.ts +67 -0
  81. package/dist/linkedin/selectors.d.ts.map +1 -0
  82. package/dist/linkedin/selectors.js +74 -0
  83. package/dist/linkedin/selectors.js.map +1 -0
  84. package/dist/operations/add-people-to-collection.d.ts +1 -1
  85. package/dist/operations/add-people-to-collection.d.ts.map +1 -1
  86. package/dist/operations/add-people-to-collection.js +3 -6
  87. package/dist/operations/add-people-to-collection.js.map +1 -1
  88. package/dist/operations/build-linkedin-url.test.d.ts +2 -0
  89. package/dist/operations/build-linkedin-url.test.d.ts.map +1 -0
  90. package/dist/operations/build-linkedin-url.test.js +158 -0
  91. package/dist/operations/build-linkedin-url.test.js.map +1 -0
  92. package/dist/operations/campaign-add-action.d.ts +1 -1
  93. package/dist/operations/campaign-add-action.d.ts.map +1 -1
  94. package/dist/operations/campaign-add-action.js +3 -6
  95. package/dist/operations/campaign-add-action.js.map +1 -1
  96. package/dist/operations/campaign-create.d.ts +1 -1
  97. package/dist/operations/campaign-create.d.ts.map +1 -1
  98. package/dist/operations/campaign-create.js +3 -6
  99. package/dist/operations/campaign-create.js.map +1 -1
  100. package/dist/operations/campaign-delete.d.ts +7 -3
  101. package/dist/operations/campaign-delete.d.ts.map +1 -1
  102. package/dist/operations/campaign-delete.js +12 -8
  103. package/dist/operations/campaign-delete.js.map +1 -1
  104. package/dist/operations/campaign-delete.test.js +41 -1
  105. package/dist/operations/campaign-delete.test.js.map +1 -1
  106. package/dist/operations/campaign-erase.d.ts +19 -0
  107. package/dist/operations/campaign-erase.d.ts.map +1 -0
  108. package/dist/operations/campaign-erase.js +19 -0
  109. package/dist/operations/campaign-erase.js.map +1 -0
  110. package/dist/operations/campaign-erase.test.d.ts +2 -0
  111. package/dist/operations/campaign-erase.test.d.ts.map +1 -0
  112. package/dist/operations/campaign-erase.test.js +101 -0
  113. package/dist/operations/campaign-erase.test.js.map +1 -0
  114. package/dist/operations/campaign-exclude-add.d.ts +1 -1
  115. package/dist/operations/campaign-exclude-add.d.ts.map +1 -1
  116. package/dist/operations/campaign-exclude-add.js +3 -6
  117. package/dist/operations/campaign-exclude-add.js.map +1 -1
  118. package/dist/operations/campaign-exclude-list.d.ts +1 -1
  119. package/dist/operations/campaign-exclude-list.d.ts.map +1 -1
  120. package/dist/operations/campaign-exclude-list.js +3 -6
  121. package/dist/operations/campaign-exclude-list.js.map +1 -1
  122. package/dist/operations/campaign-exclude-remove.d.ts +1 -1
  123. package/dist/operations/campaign-exclude-remove.d.ts.map +1 -1
  124. package/dist/operations/campaign-exclude-remove.js +3 -6
  125. package/dist/operations/campaign-exclude-remove.js.map +1 -1
  126. package/dist/operations/campaign-export.d.ts +1 -1
  127. package/dist/operations/campaign-export.d.ts.map +1 -1
  128. package/dist/operations/campaign-export.js +3 -6
  129. package/dist/operations/campaign-export.js.map +1 -1
  130. package/dist/operations/campaign-get.d.ts +1 -1
  131. package/dist/operations/campaign-get.d.ts.map +1 -1
  132. package/dist/operations/campaign-get.js +3 -6
  133. package/dist/operations/campaign-get.js.map +1 -1
  134. package/dist/operations/campaign-list-people.d.ts +1 -1
  135. package/dist/operations/campaign-list-people.d.ts.map +1 -1
  136. package/dist/operations/campaign-list-people.js +3 -6
  137. package/dist/operations/campaign-list-people.js.map +1 -1
  138. package/dist/operations/campaign-list.d.ts +1 -1
  139. package/dist/operations/campaign-list.d.ts.map +1 -1
  140. package/dist/operations/campaign-list.js +3 -6
  141. package/dist/operations/campaign-list.js.map +1 -1
  142. package/dist/operations/campaign-move-next.d.ts +1 -1
  143. package/dist/operations/campaign-move-next.d.ts.map +1 -1
  144. package/dist/operations/campaign-move-next.js +3 -6
  145. package/dist/operations/campaign-move-next.js.map +1 -1
  146. package/dist/operations/campaign-remove-action.d.ts +1 -1
  147. package/dist/operations/campaign-remove-action.d.ts.map +1 -1
  148. package/dist/operations/campaign-remove-action.js +3 -6
  149. package/dist/operations/campaign-remove-action.js.map +1 -1
  150. package/dist/operations/campaign-remove-people.d.ts +1 -1
  151. package/dist/operations/campaign-remove-people.d.ts.map +1 -1
  152. package/dist/operations/campaign-remove-people.js +3 -6
  153. package/dist/operations/campaign-remove-people.js.map +1 -1
  154. package/dist/operations/campaign-reorder-actions.d.ts +1 -1
  155. package/dist/operations/campaign-reorder-actions.d.ts.map +1 -1
  156. package/dist/operations/campaign-reorder-actions.js +3 -6
  157. package/dist/operations/campaign-reorder-actions.js.map +1 -1
  158. package/dist/operations/campaign-retry.d.ts +1 -1
  159. package/dist/operations/campaign-retry.d.ts.map +1 -1
  160. package/dist/operations/campaign-retry.js +3 -6
  161. package/dist/operations/campaign-retry.js.map +1 -1
  162. package/dist/operations/campaign-start.d.ts +1 -1
  163. package/dist/operations/campaign-start.d.ts.map +1 -1
  164. package/dist/operations/campaign-start.js +3 -6
  165. package/dist/operations/campaign-start.js.map +1 -1
  166. package/dist/operations/campaign-statistics.d.ts +1 -1
  167. package/dist/operations/campaign-statistics.d.ts.map +1 -1
  168. package/dist/operations/campaign-statistics.js +3 -6
  169. package/dist/operations/campaign-statistics.js.map +1 -1
  170. package/dist/operations/campaign-status.d.ts +1 -1
  171. package/dist/operations/campaign-status.d.ts.map +1 -1
  172. package/dist/operations/campaign-status.js +3 -6
  173. package/dist/operations/campaign-status.js.map +1 -1
  174. package/dist/operations/campaign-stop.d.ts +1 -1
  175. package/dist/operations/campaign-stop.d.ts.map +1 -1
  176. package/dist/operations/campaign-stop.js +3 -6
  177. package/dist/operations/campaign-stop.js.map +1 -1
  178. package/dist/operations/campaign-update-action.d.ts +1 -1
  179. package/dist/operations/campaign-update-action.d.ts.map +1 -1
  180. package/dist/operations/campaign-update-action.js +3 -6
  181. package/dist/operations/campaign-update-action.js.map +1 -1
  182. package/dist/operations/campaign-update.d.ts +1 -1
  183. package/dist/operations/campaign-update.d.ts.map +1 -1
  184. package/dist/operations/campaign-update.js +3 -6
  185. package/dist/operations/campaign-update.js.map +1 -1
  186. package/dist/operations/check-replies.d.ts +3 -1
  187. package/dist/operations/check-replies.d.ts.map +1 -1
  188. package/dist/operations/check-replies.js +132 -17
  189. package/dist/operations/check-replies.js.map +1 -1
  190. package/dist/operations/check-replies.test.js +177 -17
  191. package/dist/operations/check-replies.test.js.map +1 -1
  192. package/dist/operations/collect-people.d.ts +1 -1
  193. package/dist/operations/collect-people.d.ts.map +1 -1
  194. package/dist/operations/collect-people.js +3 -6
  195. package/dist/operations/collect-people.js.map +1 -1
  196. package/dist/operations/comment-on-post.d.ts +37 -0
  197. package/dist/operations/comment-on-post.d.ts.map +1 -0
  198. package/dist/operations/comment-on-post.js +104 -0
  199. package/dist/operations/comment-on-post.js.map +1 -0
  200. package/dist/operations/comment-on-post.test.d.ts +2 -0
  201. package/dist/operations/comment-on-post.test.d.ts.map +1 -0
  202. package/dist/operations/comment-on-post.test.js +242 -0
  203. package/dist/operations/comment-on-post.test.js.map +1 -0
  204. package/dist/operations/create-collection.d.ts +1 -1
  205. package/dist/operations/create-collection.d.ts.map +1 -1
  206. package/dist/operations/create-collection.js +3 -6
  207. package/dist/operations/create-collection.js.map +1 -1
  208. package/dist/operations/delete-collection.d.ts +1 -1
  209. package/dist/operations/delete-collection.d.ts.map +1 -1
  210. package/dist/operations/delete-collection.js +3 -6
  211. package/dist/operations/delete-collection.js.map +1 -1
  212. package/dist/operations/dismiss-errors.d.ts +25 -0
  213. package/dist/operations/dismiss-errors.d.ts.map +1 -0
  214. package/dist/operations/dismiss-errors.js +74 -0
  215. package/dist/operations/dismiss-errors.js.map +1 -0
  216. package/dist/operations/dismiss-errors.test.d.ts +2 -0
  217. package/dist/operations/dismiss-errors.test.d.ts.map +1 -0
  218. package/dist/operations/dismiss-errors.test.js +183 -0
  219. package/dist/operations/dismiss-errors.test.js.map +1 -0
  220. package/dist/operations/endorse-skills.d.ts +10 -0
  221. package/dist/operations/endorse-skills.d.ts.map +1 -0
  222. package/dist/operations/endorse-skills.js +12 -0
  223. package/dist/operations/endorse-skills.js.map +1 -0
  224. package/dist/operations/endorse-skills.test.d.ts +2 -0
  225. package/dist/operations/endorse-skills.test.d.ts.map +1 -0
  226. package/dist/operations/endorse-skills.test.js +70 -0
  227. package/dist/operations/endorse-skills.test.js.map +1 -0
  228. package/dist/operations/enrich-profile.d.ts +18 -0
  229. package/dist/operations/enrich-profile.d.ts.map +1 -0
  230. package/dist/operations/enrich-profile.js +15 -0
  231. package/dist/operations/enrich-profile.js.map +1 -0
  232. package/dist/operations/enrich-profile.test.d.ts +2 -0
  233. package/dist/operations/enrich-profile.test.d.ts.map +1 -0
  234. package/dist/operations/enrich-profile.test.js +73 -0
  235. package/dist/operations/enrich-profile.test.js.map +1 -0
  236. package/dist/operations/ephemeral-action.d.ts +22 -0
  237. package/dist/operations/ephemeral-action.d.ts.map +1 -0
  238. package/dist/operations/ephemeral-action.js +28 -0
  239. package/dist/operations/ephemeral-action.js.map +1 -0
  240. package/dist/operations/ephemeral-action.test.d.ts +2 -0
  241. package/dist/operations/ephemeral-action.test.d.ts.map +1 -0
  242. package/dist/operations/ephemeral-action.test.js +140 -0
  243. package/dist/operations/ephemeral-action.test.js.map +1 -0
  244. package/dist/operations/follow-person.d.ts +9 -0
  245. package/dist/operations/follow-person.d.ts.map +1 -0
  246. package/dist/operations/follow-person.js +11 -0
  247. package/dist/operations/follow-person.js.map +1 -0
  248. package/dist/operations/follow-person.test.d.ts +2 -0
  249. package/dist/operations/follow-person.test.d.ts.map +1 -0
  250. package/dist/operations/follow-person.test.js +57 -0
  251. package/dist/operations/follow-person.test.js.map +1 -0
  252. package/dist/operations/get-action-budget.d.ts +6 -0
  253. package/dist/operations/get-action-budget.d.ts.map +1 -0
  254. package/dist/operations/get-action-budget.js +19 -0
  255. package/dist/operations/get-action-budget.js.map +1 -0
  256. package/dist/operations/get-action-budget.test.d.ts +2 -0
  257. package/dist/operations/get-action-budget.test.d.ts.map +1 -0
  258. package/dist/operations/get-action-budget.test.js +79 -0
  259. package/dist/operations/get-action-budget.test.js.map +1 -0
  260. package/dist/operations/get-errors.d.ts +14 -4
  261. package/dist/operations/get-errors.d.ts.map +1 -1
  262. package/dist/operations/get-errors.js +72 -13
  263. package/dist/operations/get-errors.js.map +1 -1
  264. package/dist/operations/get-errors.test.js +108 -43
  265. package/dist/operations/get-errors.test.js.map +1 -1
  266. package/dist/operations/get-feed.d.ts +112 -0
  267. package/dist/operations/get-feed.d.ts.map +1 -0
  268. package/dist/operations/get-feed.js +467 -0
  269. package/dist/operations/get-feed.js.map +1 -0
  270. package/dist/operations/get-feed.test.d.ts +2 -0
  271. package/dist/operations/get-feed.test.d.ts.map +1 -0
  272. package/dist/operations/get-feed.test.js +502 -0
  273. package/dist/operations/get-feed.test.js.map +1 -0
  274. package/dist/operations/get-post-engagers.d.ts +43 -0
  275. package/dist/operations/get-post-engagers.d.ts.map +1 -0
  276. package/dist/operations/get-post-engagers.js +328 -0
  277. package/dist/operations/get-post-engagers.js.map +1 -0
  278. package/dist/operations/get-post-engagers.test.d.ts +2 -0
  279. package/dist/operations/get-post-engagers.test.d.ts.map +1 -0
  280. package/dist/operations/get-post-engagers.test.js +297 -0
  281. package/dist/operations/get-post-engagers.test.js.map +1 -0
  282. package/dist/operations/get-post-stats.d.ts +43 -0
  283. package/dist/operations/get-post-stats.d.ts.map +1 -0
  284. package/dist/operations/get-post-stats.js +164 -0
  285. package/dist/operations/get-post-stats.js.map +1 -0
  286. package/dist/operations/get-post-stats.test.d.ts +2 -0
  287. package/dist/operations/get-post-stats.test.d.ts.map +1 -0
  288. package/dist/operations/get-post-stats.test.js +169 -0
  289. package/dist/operations/get-post-stats.test.js.map +1 -0
  290. package/dist/operations/get-post.d.ts +42 -0
  291. package/dist/operations/get-post.d.ts.map +1 -0
  292. package/dist/operations/get-post.js +416 -0
  293. package/dist/operations/get-post.js.map +1 -0
  294. package/dist/operations/get-post.test.d.ts +2 -0
  295. package/dist/operations/get-post.test.d.ts.map +1 -0
  296. package/dist/operations/get-post.test.js +272 -0
  297. package/dist/operations/get-post.test.js.map +1 -0
  298. package/dist/operations/get-profile-activity.d.ts +50 -0
  299. package/dist/operations/get-profile-activity.d.ts.map +1 -0
  300. package/dist/operations/get-profile-activity.js +381 -0
  301. package/dist/operations/get-profile-activity.js.map +1 -0
  302. package/dist/operations/get-profile-activity.test.d.ts +2 -0
  303. package/dist/operations/get-profile-activity.test.d.ts.map +1 -0
  304. package/dist/operations/get-profile-activity.test.js +324 -0
  305. package/dist/operations/get-profile-activity.test.js.map +1 -0
  306. package/dist/operations/get-throttle-status.d.ts +6 -0
  307. package/dist/operations/get-throttle-status.d.ts.map +1 -0
  308. package/dist/operations/get-throttle-status.js +24 -0
  309. package/dist/operations/get-throttle-status.js.map +1 -0
  310. package/dist/operations/get-throttle-status.test.d.ts +2 -0
  311. package/dist/operations/get-throttle-status.test.d.ts.map +1 -0
  312. package/dist/operations/get-throttle-status.test.js +62 -0
  313. package/dist/operations/get-throttle-status.test.js.map +1 -0
  314. package/dist/operations/import-people-from-collection.d.ts +1 -1
  315. package/dist/operations/import-people-from-collection.d.ts.map +1 -1
  316. package/dist/operations/import-people-from-collection.js +3 -6
  317. package/dist/operations/import-people-from-collection.js.map +1 -1
  318. package/dist/operations/import-people-from-urls.d.ts +1 -1
  319. package/dist/operations/import-people-from-urls.d.ts.map +1 -1
  320. package/dist/operations/import-people-from-urls.js +3 -6
  321. package/dist/operations/import-people-from-urls.js.map +1 -1
  322. package/dist/operations/index.d.ts +23 -1
  323. package/dist/operations/index.d.ts.map +1 -1
  324. package/dist/operations/index.js +33 -0
  325. package/dist/operations/index.js.map +1 -1
  326. package/dist/operations/like-person-posts.d.ts +14 -0
  327. package/dist/operations/like-person-posts.d.ts.map +1 -0
  328. package/dist/operations/like-person-posts.js +28 -0
  329. package/dist/operations/like-person-posts.js.map +1 -0
  330. package/dist/operations/like-person-posts.test.d.ts +2 -0
  331. package/dist/operations/like-person-posts.test.d.ts.map +1 -0
  332. package/dist/operations/like-person-posts.test.js +103 -0
  333. package/dist/operations/like-person-posts.test.js.map +1 -0
  334. package/dist/operations/list-collections.d.ts +1 -1
  335. package/dist/operations/list-collections.d.ts.map +1 -1
  336. package/dist/operations/list-collections.js +3 -6
  337. package/dist/operations/list-collections.js.map +1 -1
  338. package/dist/operations/message-person.d.ts +11 -0
  339. package/dist/operations/message-person.d.ts.map +1 -0
  340. package/dist/operations/message-person.js +19 -0
  341. package/dist/operations/message-person.js.map +1 -0
  342. package/dist/operations/message-person.test.d.ts +2 -0
  343. package/dist/operations/message-person.test.d.ts.map +1 -0
  344. package/dist/operations/message-person.test.js +108 -0
  345. package/dist/operations/message-person.test.js.map +1 -0
  346. package/dist/operations/navigate-away.d.ts +14 -0
  347. package/dist/operations/navigate-away.d.ts.map +1 -0
  348. package/dist/operations/navigate-away.js +24 -0
  349. package/dist/operations/navigate-away.js.map +1 -0
  350. package/dist/operations/navigate-away.test.d.ts +2 -0
  351. package/dist/operations/navigate-away.test.d.ts.map +1 -0
  352. package/dist/operations/navigate-away.test.js +51 -0
  353. package/dist/operations/navigate-away.test.js.map +1 -0
  354. package/dist/operations/query-messages.d.ts +1 -1
  355. package/dist/operations/query-messages.d.ts.map +1 -1
  356. package/dist/operations/query-messages.js +3 -6
  357. package/dist/operations/query-messages.js.map +1 -1
  358. package/dist/operations/react-to-post.d.ts +41 -0
  359. package/dist/operations/react-to-post.d.ts.map +1 -0
  360. package/dist/operations/react-to-post.js +80 -0
  361. package/dist/operations/react-to-post.js.map +1 -0
  362. package/dist/operations/react-to-post.test.d.ts +2 -0
  363. package/dist/operations/react-to-post.test.d.ts.map +1 -0
  364. package/dist/operations/react-to-post.test.js +157 -0
  365. package/dist/operations/react-to-post.test.js.map +1 -0
  366. package/dist/operations/remove-connection.d.ts +6 -0
  367. package/dist/operations/remove-connection.d.ts.map +1 -0
  368. package/dist/operations/remove-connection.js +7 -0
  369. package/dist/operations/remove-connection.js.map +1 -0
  370. package/dist/operations/remove-connection.test.d.ts +2 -0
  371. package/dist/operations/remove-connection.test.d.ts.map +1 -0
  372. package/dist/operations/remove-connection.test.js +45 -0
  373. package/dist/operations/remove-connection.test.js.map +1 -0
  374. package/dist/operations/remove-people-from-collection.d.ts +1 -1
  375. package/dist/operations/remove-people-from-collection.d.ts.map +1 -1
  376. package/dist/operations/remove-people-from-collection.js +3 -6
  377. package/dist/operations/remove-people-from-collection.js.map +1 -1
  378. package/dist/operations/resolve-linkedin-entity.d.ts.map +1 -1
  379. package/dist/operations/resolve-linkedin-entity.js +2 -2
  380. package/dist/operations/resolve-linkedin-entity.js.map +1 -1
  381. package/dist/operations/resolve-linkedin-entity.test.d.ts +2 -0
  382. package/dist/operations/resolve-linkedin-entity.test.d.ts.map +1 -0
  383. package/dist/operations/resolve-linkedin-entity.test.js +343 -0
  384. package/dist/operations/resolve-linkedin-entity.test.js.map +1 -0
  385. package/dist/operations/scrape-messaging-history.d.ts +2 -1
  386. package/dist/operations/scrape-messaging-history.d.ts.map +1 -1
  387. package/dist/operations/scrape-messaging-history.js +121 -18
  388. package/dist/operations/scrape-messaging-history.js.map +1 -1
  389. package/dist/operations/scrape-messaging-history.test.js +134 -12
  390. package/dist/operations/scrape-messaging-history.test.js.map +1 -1
  391. package/dist/operations/search-posts.d.ts +51 -0
  392. package/dist/operations/search-posts.d.ts.map +1 -0
  393. package/dist/operations/search-posts.js +419 -0
  394. package/dist/operations/search-posts.js.map +1 -0
  395. package/dist/operations/search-posts.test.d.ts +2 -0
  396. package/dist/operations/search-posts.test.d.ts.map +1 -0
  397. package/dist/operations/search-posts.test.js +300 -0
  398. package/dist/operations/search-posts.test.js.map +1 -0
  399. package/dist/operations/send-inmail.d.ts +11 -0
  400. package/dist/operations/send-inmail.d.ts.map +1 -0
  401. package/dist/operations/send-inmail.js +19 -0
  402. package/dist/operations/send-inmail.js.map +1 -0
  403. package/dist/operations/send-inmail.test.d.ts +2 -0
  404. package/dist/operations/send-inmail.test.d.ts.map +1 -0
  405. package/dist/operations/send-inmail.test.js +108 -0
  406. package/dist/operations/send-inmail.test.js.map +1 -0
  407. package/dist/operations/send-invite.d.ts +9 -0
  408. package/dist/operations/send-invite.d.ts.map +1 -0
  409. package/dist/operations/send-invite.js +14 -0
  410. package/dist/operations/send-invite.js.map +1 -0
  411. package/dist/operations/send-invite.test.d.ts +2 -0
  412. package/dist/operations/send-invite.test.d.ts.map +1 -0
  413. package/dist/operations/send-invite.test.js +59 -0
  414. package/dist/operations/send-invite.test.js.map +1 -0
  415. package/dist/operations/types.d.ts +24 -1
  416. package/dist/operations/types.d.ts.map +1 -1
  417. package/dist/operations/types.js +13 -1
  418. package/dist/operations/types.js.map +1 -1
  419. package/dist/operations/visit-profile.d.ts +14 -0
  420. package/dist/operations/visit-profile.d.ts.map +1 -0
  421. package/dist/operations/visit-profile.js +46 -0
  422. package/dist/operations/visit-profile.js.map +1 -0
  423. package/dist/operations/visit-profile.test.d.ts +2 -0
  424. package/dist/operations/visit-profile.test.d.ts.map +1 -0
  425. package/dist/operations/visit-profile.test.js +193 -0
  426. package/dist/operations/visit-profile.test.js.map +1 -0
  427. package/dist/services/account-resolution.d.ts +9 -4
  428. package/dist/services/account-resolution.d.ts.map +1 -1
  429. package/dist/services/account-resolution.js +60 -5
  430. package/dist/services/account-resolution.js.map +1 -1
  431. package/dist/services/app.d.ts +6 -2
  432. package/dist/services/app.d.ts.map +1 -1
  433. package/dist/services/app.js +18 -6
  434. package/dist/services/app.js.map +1 -1
  435. package/dist/services/app.test.js +41 -7
  436. package/dist/services/app.test.js.map +1 -1
  437. package/dist/services/campaign.d.ts +44 -2
  438. package/dist/services/campaign.d.ts.map +1 -1
  439. package/dist/services/campaign.js +124 -1
  440. package/dist/services/campaign.js.map +1 -1
  441. package/dist/services/collection.d.ts +5 -2
  442. package/dist/services/collection.d.ts.map +1 -1
  443. package/dist/services/collection.js +24 -5
  444. package/dist/services/collection.js.map +1 -1
  445. package/dist/services/collection.test.js +51 -9
  446. package/dist/services/collection.test.js.map +1 -1
  447. package/dist/services/ephemeral-campaign.d.ts +64 -0
  448. package/dist/services/ephemeral-campaign.d.ts.map +1 -0
  449. package/dist/services/ephemeral-campaign.js +210 -0
  450. package/dist/services/ephemeral-campaign.js.map +1 -0
  451. package/dist/services/ephemeral-campaign.test.d.ts +2 -0
  452. package/dist/services/ephemeral-campaign.test.d.ts.map +1 -0
  453. package/dist/services/ephemeral-campaign.test.js +333 -0
  454. package/dist/services/ephemeral-campaign.test.js.map +1 -0
  455. package/dist/services/errors.d.ts +12 -1
  456. package/dist/services/errors.d.ts.map +1 -1
  457. package/dist/services/errors.js +26 -3
  458. package/dist/services/errors.js.map +1 -1
  459. package/dist/services/index.d.ts +2 -1
  460. package/dist/services/index.d.ts.map +1 -1
  461. package/dist/services/index.js +2 -1
  462. package/dist/services/index.js.map +1 -1
  463. package/dist/services/instance-context.d.ts +5 -1
  464. package/dist/services/instance-context.d.ts.map +1 -1
  465. package/dist/services/instance-context.js +87 -20
  466. package/dist/services/instance-context.js.map +1 -1
  467. package/dist/services/instance-context.test.js +82 -2
  468. package/dist/services/instance-context.test.js.map +1 -1
  469. package/dist/services/instance-lifecycle.d.ts.map +1 -1
  470. package/dist/services/instance-lifecycle.js +32 -1
  471. package/dist/services/instance-lifecycle.js.map +1 -1
  472. package/dist/services/instance-lifecycle.test.js +52 -1
  473. package/dist/services/instance-lifecycle.test.js.map +1 -1
  474. package/dist/services/instance.d.ts +43 -0
  475. package/dist/services/instance.d.ts.map +1 -1
  476. package/dist/services/instance.js +163 -1
  477. package/dist/services/instance.js.map +1 -1
  478. package/dist/services/instance.test.js +135 -0
  479. package/dist/services/instance.test.js.map +1 -1
  480. package/dist/services/launcher.d.ts +54 -3
  481. package/dist/services/launcher.d.ts.map +1 -1
  482. package/dist/services/launcher.js +223 -34
  483. package/dist/services/launcher.js.map +1 -1
  484. package/dist/services/launcher.test.js +133 -6
  485. package/dist/services/launcher.test.js.map +1 -1
  486. package/dist/services/status.d.ts +6 -2
  487. package/dist/services/status.d.ts.map +1 -1
  488. package/dist/services/status.js +67 -34
  489. package/dist/services/status.js.map +1 -1
  490. package/dist/services/status.test.js +9 -2
  491. package/dist/services/status.test.js.map +1 -1
  492. package/dist/testing/e2e-helpers.d.ts +23 -1
  493. package/dist/testing/e2e-helpers.d.ts.map +1 -1
  494. package/dist/testing/e2e-helpers.js +110 -5
  495. package/dist/testing/e2e-helpers.js.map +1 -1
  496. package/dist/testing/index.d.ts +1 -1
  497. package/dist/testing/index.d.ts.map +1 -1
  498. package/dist/testing/index.js +1 -1
  499. package/dist/testing/index.js.map +1 -1
  500. package/dist/types/account.d.ts +1 -1
  501. package/dist/types/action-budget.d.ts +52 -0
  502. package/dist/types/action-budget.d.ts.map +1 -0
  503. package/dist/types/action-budget.js +4 -0
  504. package/dist/types/action-budget.js.map +1 -0
  505. package/dist/types/campaign.d.ts +24 -0
  506. package/dist/types/campaign.d.ts.map +1 -1
  507. package/dist/types/feed.d.ts +30 -0
  508. package/dist/types/feed.d.ts.map +1 -0
  509. package/dist/types/feed.js +4 -0
  510. package/dist/types/feed.js.map +1 -0
  511. package/dist/types/index.d.ts +6 -2
  512. package/dist/types/index.d.ts.map +1 -1
  513. package/dist/types/post-analytics.d.ts +40 -0
  514. package/dist/types/post-analytics.d.ts.map +1 -0
  515. package/dist/types/post-analytics.js +4 -0
  516. package/dist/types/post-analytics.js.map +1 -0
  517. package/dist/types/post.d.ts +43 -0
  518. package/dist/types/post.d.ts.map +1 -0
  519. package/dist/types/post.js +4 -0
  520. package/dist/types/post.js.map +1 -0
  521. package/dist/types/ui-health.d.ts +16 -0
  522. package/dist/types/ui-health.d.ts.map +1 -1
  523. package/dist/utils/cdp-port.d.ts.map +1 -1
  524. package/dist/utils/cdp-port.js +3 -1
  525. package/dist/utils/cdp-port.js.map +1 -1
  526. package/dist/utils/cdp-port.test.js +1 -1
  527. package/dist/utils/cdp-port.test.js.map +1 -1
  528. package/dist/utils/delay.d.ts +79 -0
  529. package/dist/utils/delay.d.ts.map +1 -1
  530. package/dist/utils/delay.js +118 -0
  531. package/dist/utils/delay.js.map +1 -1
  532. package/dist/utils/delay.test.js +111 -1
  533. package/dist/utils/delay.test.js.map +1 -1
  534. package/dist/utils/index.d.ts +2 -1
  535. package/dist/utils/index.d.ts.map +1 -1
  536. package/dist/utils/index.js +2 -1
  537. package/dist/utils/index.js.map +1 -1
  538. package/dist/utils/session-pacer.d.ts +27 -0
  539. package/dist/utils/session-pacer.d.ts.map +1 -0
  540. package/dist/utils/session-pacer.js +55 -0
  541. package/dist/utils/session-pacer.js.map +1 -0
  542. package/dist/utils/session-pacer.test.d.ts +2 -0
  543. package/dist/utils/session-pacer.test.d.ts.map +1 -0
  544. package/dist/utils/session-pacer.test.js +111 -0
  545. package/dist/utils/session-pacer.test.js.map +1 -0
  546. package/package.json +1 -1
@@ -0,0 +1,614 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { CDPEvaluationError, CDPTimeoutError } from "../cdp/errors.js";
4
+ import { delay, gaussianBetween, gaussianDelay, randomBetween } from "../utils/delay.js";
5
+ /** Default timeout for DOM operations (ms). */
6
+ const DEFAULT_TIMEOUT = 30_000;
7
+ /** Default polling interval for waitForElement (ms). */
8
+ const DEFAULT_POLL_INTERVAL = 100;
9
+ /** Probability of a micro-hesitation between keystrokes. */
10
+ const MICRO_HESITATION_PROBABILITY = 0.05;
11
+ /**
12
+ * Map a character to its physical key code and Windows virtual key code.
13
+ *
14
+ * Covers ASCII letters, digits, common punctuation, and special keys
15
+ * (space, enter, tab, backspace, escape). Returns `undefined` for
16
+ * unmapped characters — the event still fires, just without enrichment.
17
+ */
18
+ function getKeyCodeInfo(char) {
19
+ // Letters a-z / A-Z
20
+ const lower = char.toLowerCase();
21
+ if (lower >= "a" && lower <= "z") {
22
+ const vk = 65 + lower.charCodeAt(0) - "a".charCodeAt(0);
23
+ return { code: `Key${lower.toUpperCase()}`, windowsVirtualKeyCode: vk };
24
+ }
25
+ // Digits 0-9
26
+ if (char >= "0" && char <= "9") {
27
+ const vk = 48 + char.charCodeAt(0) - "0".charCodeAt(0);
28
+ return { code: `Digit${char}`, windowsVirtualKeyCode: vk };
29
+ }
30
+ // Special keys and punctuation
31
+ const special = {
32
+ " ": { code: "Space", windowsVirtualKeyCode: 32 },
33
+ "\n": { code: "Enter", windowsVirtualKeyCode: 13 },
34
+ "\r": { code: "Enter", windowsVirtualKeyCode: 13 },
35
+ "\t": { code: "Tab", windowsVirtualKeyCode: 9 },
36
+ "-": { code: "Minus", windowsVirtualKeyCode: 189 },
37
+ "=": { code: "Equal", windowsVirtualKeyCode: 187 },
38
+ "[": { code: "BracketLeft", windowsVirtualKeyCode: 219 },
39
+ "]": { code: "BracketRight", windowsVirtualKeyCode: 221 },
40
+ "\\": { code: "Backslash", windowsVirtualKeyCode: 220 },
41
+ ";": { code: "Semicolon", windowsVirtualKeyCode: 186 },
42
+ "'": { code: "Quote", windowsVirtualKeyCode: 222 },
43
+ ",": { code: "Comma", windowsVirtualKeyCode: 188 },
44
+ ".": { code: "Period", windowsVirtualKeyCode: 190 },
45
+ "/": { code: "Slash", windowsVirtualKeyCode: 191 },
46
+ "`": { code: "Backquote", windowsVirtualKeyCode: 192 },
47
+ };
48
+ return special[char];
49
+ }
50
+ /**
51
+ * Poll the DOM until an element matching the selector appears.
52
+ *
53
+ * When a {@link HumanizedMouse} is provided, tiny idle mouse movements
54
+ * (1–5 px) are dispatched on ~20% of poll cycles once the wait exceeds
55
+ * 500 ms. This prevents the cursor from remaining perfectly still
56
+ * during long element waits — a detectable automation fingerprint.
57
+ *
58
+ * @param client - Connected CDP client targeting the page.
59
+ * @param selector - CSS selector to query.
60
+ * @param options - Timeout and polling interval.
61
+ * @param mouse - Optional humanized mouse (enables idle drift).
62
+ * @throws {CDPTimeoutError} If the element does not appear within the timeout.
63
+ */
64
+ export async function waitForElement(client, selector, options, mouse) {
65
+ const timeout = options?.timeout ?? DEFAULT_TIMEOUT;
66
+ const pollInterval = options?.pollInterval ?? DEFAULT_POLL_INTERVAL;
67
+ const deadline = Date.now() + timeout;
68
+ const startTime = Date.now();
69
+ // Last known cursor position for idle drift (lazy-initialised)
70
+ let driftX = -1;
71
+ let driftY = -1;
72
+ let viewportW = 0;
73
+ let viewportH = 0;
74
+ while (Date.now() < deadline) {
75
+ const found = await client.evaluate(`document.querySelector(${JSON.stringify(selector)}) !== null`);
76
+ if (found)
77
+ return;
78
+ // Idle mouse drift: after 500 ms of waiting, 20% of poll cycles
79
+ // move the cursor by 1–5 px to avoid a perfectly still cursor.
80
+ // Uses mouse.move() to keep VirtualMouse position in sync.
81
+ if (mouse?.isAvailable && Date.now() - startTime > 500 && Math.random() < 0.2) {
82
+ if (driftX < 0) {
83
+ try {
84
+ const pos = await mouse.position();
85
+ driftX = pos.x;
86
+ driftY = pos.y;
87
+ }
88
+ catch {
89
+ // Ignored — fall through to viewport center default
90
+ }
91
+ const size = await client.evaluate(`({ w: window.innerWidth, h: window.innerHeight })`);
92
+ viewportW = size.w;
93
+ viewportH = size.h;
94
+ if (driftX < 0) {
95
+ driftX = Math.round(viewportW / 2);
96
+ driftY = Math.round(viewportH / 2);
97
+ }
98
+ }
99
+ // Guaranteed non-zero magnitude (1–5 px), random direction
100
+ const magX = Math.round(randomBetween(1, 5));
101
+ const magY = Math.round(randomBetween(1, 5));
102
+ const offsetX = (Math.random() < 0.5 ? -1 : 1) * magX;
103
+ const offsetY = (Math.random() < 0.5 ? -1 : 1) * magY;
104
+ // Clamp to viewport bounds
105
+ driftX = Math.max(0, Math.min(viewportW - 1, driftX + offsetX));
106
+ driftY = Math.max(0, Math.min(viewportH - 1, driftY + offsetY));
107
+ await mouse.move(driftX, driftY);
108
+ }
109
+ await delay(pollInterval);
110
+ }
111
+ throw new CDPTimeoutError(`Timed out waiting for element "${selector}" after ${timeout.toString()}ms`);
112
+ }
113
+ /**
114
+ * Wait until the DOM stops mutating for `quietMs` milliseconds.
115
+ *
116
+ * Installs a `MutationObserver` via `Runtime.evaluate` that tracks
117
+ * the timestamp of the last mutation. Polls until no mutations have
118
+ * occurred for the configured quiet period, then adds a "visual
119
+ * scanning" Gaussian delay to simulate a human pausing to read.
120
+ *
121
+ * @param client - Connected CDP client targeting the page.
122
+ * @param quietMs - Milliseconds of mutation silence required (default: 500).
123
+ */
124
+ export async function waitForDOMStable(client, quietMs = 500) {
125
+ // Install a MutationObserver that stamps window.__lhLastMutation on every DOM change
126
+ await client.evaluate(`(() => {
127
+ window.__lhLastMutation = Date.now();
128
+ const observer = new MutationObserver(() => {
129
+ window.__lhLastMutation = Date.now();
130
+ });
131
+ observer.observe(document.body, {
132
+ childList: true,
133
+ subtree: true,
134
+ attributes: true,
135
+ characterData: true,
136
+ });
137
+ window.__lhDOMObserver = observer;
138
+ })()`);
139
+ // Poll until the DOM has been quiet for quietMs
140
+ const pollInterval = 100;
141
+ const maxWait = 30_000;
142
+ const deadline = Date.now() + maxWait;
143
+ while (Date.now() < deadline) {
144
+ const elapsed = await client.evaluate(`Date.now() - (window.__lhLastMutation || 0)`);
145
+ if (elapsed >= quietMs)
146
+ break;
147
+ await delay(pollInterval);
148
+ }
149
+ // Disconnect the observer
150
+ await client.evaluate(`(() => {
151
+ if (window.__lhDOMObserver) {
152
+ window.__lhDOMObserver.disconnect();
153
+ delete window.__lhDOMObserver;
154
+ delete window.__lhLastMutation;
155
+ }
156
+ })()`);
157
+ // Simulate "visual scanning" — a human pausing to read the page
158
+ await gaussianDelay(1_200, 400, 600, 2_500);
159
+ }
160
+ /**
161
+ * Scroll the page until the target element is visible in the viewport.
162
+ *
163
+ * The element must already exist in the DOM. Use {@link waitForElement}
164
+ * first if it may not be present yet.
165
+ *
166
+ * @param client - Connected CDP client targeting the page.
167
+ * @param selector - CSS selector for the element to scroll to.
168
+ * @throws {CDPEvaluationError} If the element is not found.
169
+ */
170
+ export async function scrollTo(client, selector) {
171
+ const scrolled = await client.evaluate(`(() => {
172
+ const el = document.querySelector(${JSON.stringify(selector)});
173
+ if (!el) return false;
174
+ el.scrollIntoView({ behavior: "instant", block: "center" });
175
+ return true;
176
+ })()`);
177
+ if (!scrolled) {
178
+ throw new CDPEvaluationError(`Element "${selector}" not found for scrollTo`);
179
+ }
180
+ }
181
+ /**
182
+ * Trigger a hover on an element by dispatching `mouseenter` + `mouseover`.
183
+ *
184
+ * This is used to reveal hover-dependent UI such as the LinkedIn
185
+ * reactions menu popup.
186
+ *
187
+ * @param client - Connected CDP client targeting the page.
188
+ * @param selector - CSS selector for the element to hover.
189
+ * @throws {CDPEvaluationError} If the element is not found.
190
+ */
191
+ export async function hover(client, selector) {
192
+ const hovered = await client.evaluate(`(() => {
193
+ const el = document.querySelector(${JSON.stringify(selector)});
194
+ if (!el) return false;
195
+ const r = el.getBoundingClientRect();
196
+ const cx = Math.round(r.x + r.width / 2);
197
+ const cy = Math.round(r.y + r.height / 2);
198
+ const opts = {
199
+ bubbles: true, clientX: cx, clientY: cy,
200
+ screenX: cx + window.screenX, screenY: cy + window.screenY,
201
+ button: 0, buttons: 0,
202
+ };
203
+ el.dispatchEvent(new MouseEvent('mouseenter', opts));
204
+ el.dispatchEvent(new MouseEvent('mouseover', opts));
205
+ return true;
206
+ })()`);
207
+ if (!hovered) {
208
+ throw new CDPEvaluationError(`Element "${selector}" not found for hover`);
209
+ }
210
+ }
211
+ /**
212
+ * Click an element via its JavaScript `.click()` method.
213
+ *
214
+ * Uses JS `.click()` rather than `Input.dispatchMouseEvent` because the
215
+ * latter does not reliably trigger handlers on LinkedIn's React components.
216
+ *
217
+ * @param client - Connected CDP client targeting the page.
218
+ * @param selector - CSS selector for the element to click.
219
+ * @throws {CDPEvaluationError} If the element is not found.
220
+ */
221
+ export async function click(client, selector) {
222
+ const clicked = await client.evaluate(`(() => {
223
+ const el = document.querySelector(${JSON.stringify(selector)});
224
+ if (!el) return false;
225
+ el.click();
226
+ return true;
227
+ })()`);
228
+ if (!clicked) {
229
+ throw new CDPEvaluationError(`Element "${selector}" not found for click`);
230
+ }
231
+ }
232
+ /**
233
+ * Type text into a focused element character-by-character.
234
+ *
235
+ * The element is focused first, then each character is dispatched via
236
+ * CDP `Input.dispatchKeyEvent` with character-context-aware Gaussian
237
+ * delays to approximate human typing cadence:
238
+ *
239
+ * - **Intra-word** (letters, digits): ~65 ms mean — fast, rhythmic typing
240
+ * - **Word boundary** (space): ~180 ms mean — natural pause between words
241
+ * - **Sentence boundary** (space after `.!?`): ~350 ms mean — thinking pause
242
+ * - **Paragraph boundary** (newline): ~700 ms mean — composing the next thought
243
+ * - **Micro-hesitation** (5% per character): ~300 ms extra — brief mid-word thinking
244
+ *
245
+ * @param client - Connected CDP client targeting the page.
246
+ * @param selector - CSS selector for the input element.
247
+ * @param text - The string to type.
248
+ * @param method - Input method (default: `"type"`).
249
+ * @throws {CDPEvaluationError} If the element is not found.
250
+ */
251
+ export async function typeText(client, selector, text, method = "type") {
252
+ const focused = await client.evaluate(`(() => {
253
+ const el = document.querySelector(${JSON.stringify(selector)});
254
+ if (!el) return false;
255
+ el.focus();
256
+ return true;
257
+ })()`);
258
+ if (!focused) {
259
+ throw new CDPEvaluationError(`Element "${selector}" not found for typeText`);
260
+ }
261
+ switch (method) {
262
+ case "type": {
263
+ let previousChar = "";
264
+ for (const char of text) {
265
+ const kc = getKeyCodeInfo(char);
266
+ await client.send("Input.dispatchKeyEvent", {
267
+ type: "keyDown",
268
+ key: char,
269
+ text: char,
270
+ ...(kc && { code: kc.code, windowsVirtualKeyCode: kc.windowsVirtualKeyCode }),
271
+ });
272
+ await client.send("Input.dispatchKeyEvent", {
273
+ type: "keyUp",
274
+ key: char,
275
+ ...(kc && { code: kc.code, windowsVirtualKeyCode: kc.windowsVirtualKeyCode }),
276
+ });
277
+ // Character-aware delay
278
+ if (char === "\n") {
279
+ await gaussianDelay(700, 300, 300, 1_500);
280
+ }
281
+ else if (char === " " && /[.!?]/.test(previousChar)) {
282
+ await gaussianDelay(350, 120, 150, 800);
283
+ }
284
+ else if (char === " ") {
285
+ await gaussianDelay(180, 50, 100, 350);
286
+ }
287
+ else {
288
+ await gaussianDelay(65, 20, 30, 120);
289
+ }
290
+ // Micro-hesitation (5%)
291
+ if (Math.random() < MICRO_HESITATION_PROBABILITY) {
292
+ await gaussianDelay(300, 100, 150, 600);
293
+ }
294
+ previousChar = char;
295
+ }
296
+ break;
297
+ }
298
+ }
299
+ }
300
+ /**
301
+ * Get the bounding rect of a DOM element selected by CSS selector.
302
+ *
303
+ * @returns `null` if the element is not found.
304
+ */
305
+ export async function getElementBounds(client, selector) {
306
+ return client.evaluate(`(() => {
307
+ const el = document.querySelector(${JSON.stringify(selector)});
308
+ if (!el) return null;
309
+ const r = el.getBoundingClientRect();
310
+ return { top: r.top, bottom: r.bottom, height: r.height };
311
+ })()`);
312
+ }
313
+ /**
314
+ * Get the bounding rect of the Nth element matching a CSS selector.
315
+ *
316
+ * Equivalent to `document.querySelectorAll(baseSelector)[index]`.
317
+ *
318
+ * @returns `null` if no element exists at the given index.
319
+ */
320
+ export async function getElementBoundsByIndex(client, baseSelector, index) {
321
+ return client.evaluate(`(() => {
322
+ const els = document.querySelectorAll(${JSON.stringify(baseSelector)});
323
+ const el = els[${String(index)}];
324
+ if (!el) return null;
325
+ const r = el.getBoundingClientRect();
326
+ return { top: r.top, bottom: r.bottom, height: r.height };
327
+ })()`);
328
+ }
329
+ /**
330
+ * Get the viewport height (`window.innerHeight`).
331
+ */
332
+ export async function getViewportHeight(client) {
333
+ return client.evaluate(`window.innerHeight`);
334
+ }
335
+ // ---------------------------------------------------------------------------
336
+ // Humanized scroll-to-element
337
+ // ---------------------------------------------------------------------------
338
+ /**
339
+ * Internal: incremental scroll loop that centers an element in the viewport.
340
+ *
341
+ * @returns `true` if the element was centered within `maxIterations`.
342
+ */
343
+ async function scrollToElementLoop(client, getBounds, mouse) {
344
+ const viewportHeight = await getViewportHeight(client);
345
+ const maxIterations = 10;
346
+ const tolerance = viewportHeight / 4;
347
+ for (let i = 0; i < maxIterations; i++) {
348
+ const bounds = await getBounds();
349
+ if (!bounds)
350
+ return false;
351
+ const elementCenter = bounds.top + bounds.height / 2;
352
+ const viewportCenter = viewportHeight / 2;
353
+ if (Math.abs(elementCenter - viewportCenter) <= tolerance) {
354
+ return true;
355
+ }
356
+ const deltaY = elementCenter - viewportCenter;
357
+ await humanizedScrollY(client, deltaY, 300, 400, mouse);
358
+ await gaussianDelay(300, 50, 200, 400);
359
+ }
360
+ return false;
361
+ }
362
+ /**
363
+ * Scroll the page until the target element is centered in the viewport,
364
+ * using incremental humanized mouse-wheel strokes.
365
+ *
366
+ * When a {@link HumanizedMouse} is available, the cursor scrolls the page
367
+ * in small increments until the element's bounding rect is in the viewport
368
+ * center zone. Falls back to instant `scrollIntoView` otherwise.
369
+ *
370
+ * @param client - Connected CDP client targeting the page.
371
+ * @param selector - CSS selector for the element to scroll to.
372
+ * @param mouse - Optional humanized mouse instance.
373
+ */
374
+ export async function humanizedScrollTo(client, selector, mouse) {
375
+ if (mouse?.isAvailable) {
376
+ const success = await scrollToElementLoop(client, () => getElementBounds(client, selector), mouse);
377
+ if (success)
378
+ return;
379
+ }
380
+ await scrollTo(client, selector);
381
+ }
382
+ /**
383
+ * Scroll the page until the Nth element matching a selector is centered,
384
+ * using incremental humanized mouse-wheel strokes.
385
+ *
386
+ * Falls back to instant `scrollIntoView` when humanized mouse is unavailable.
387
+ *
388
+ * @param client - Connected CDP client targeting the page.
389
+ * @param baseSelector - CSS selector matching multiple elements.
390
+ * @param index - Zero-based index into the matched elements.
391
+ * @param mouse - Optional humanized mouse instance.
392
+ */
393
+ export async function humanizedScrollToByIndex(client, baseSelector, index, mouse) {
394
+ if (mouse?.isAvailable) {
395
+ const success = await scrollToElementLoop(client, () => getElementBoundsByIndex(client, baseSelector, index), mouse);
396
+ if (success)
397
+ return;
398
+ }
399
+ // Fallback to instant scrollIntoView
400
+ await client.evaluate(`(() => {
401
+ const els = document.querySelectorAll(${JSON.stringify(baseSelector)});
402
+ const el = els[${String(index)}];
403
+ if (el) el.scrollIntoView({ behavior: "instant", block: "center" });
404
+ })()`);
405
+ }
406
+ /**
407
+ * Get a jittered viewport-relative point near the center of a DOM element.
408
+ *
409
+ * A Gaussian offset is applied so the click target varies naturally within
410
+ * the element bounds, removing the dead-center automation fingerprint.
411
+ *
412
+ * @returns `null` if the element is not found.
413
+ */
414
+ export async function getElementCenter(client, selector) {
415
+ const rect = await client.evaluate(`(() => {
416
+ const el = document.querySelector(${JSON.stringify(selector)});
417
+ if (!el) return null;
418
+ const r = el.getBoundingClientRect();
419
+ return { x: r.x, y: r.y, width: r.width, height: r.height };
420
+ })()`);
421
+ if (!rect)
422
+ return null;
423
+ const cx = rect.x + rect.width / 2;
424
+ const cy = rect.y + rect.height / 2;
425
+ const jx = cx + gaussianBetween(0, rect.width * 0.15, -rect.width * 0.4, rect.width * 0.4);
426
+ const jy = cy + gaussianBetween(0, rect.height * 0.15, -rect.height * 0.4, rect.height * 0.4);
427
+ const roundedJx = Math.round(jx);
428
+ const roundedJy = Math.round(jy);
429
+ const maxX = rect.width >= 1 ? rect.x + rect.width - 1 : rect.x;
430
+ const maxY = rect.height >= 1 ? rect.y + rect.height - 1 : rect.y;
431
+ return {
432
+ x: Math.max(rect.x, Math.min(maxX, roundedJx)),
433
+ y: Math.max(rect.y, Math.min(maxY, roundedJy)),
434
+ };
435
+ }
436
+ /**
437
+ * Scroll the element toward the viewport center if it sits in the outer
438
+ * 20% of the visible area. This mimics a human scrolling a bit to see
439
+ * the target more comfortably before clicking.
440
+ *
441
+ * @internal
442
+ */
443
+ async function viewportComfortZone(client, selector, mouse) {
444
+ const viewportHeight = await getViewportHeight(client);
445
+ // Use the raw bounding-rect center (not the jittered getElementCenter)
446
+ // so the comfort-zone check is deterministic and not affected by jitter.
447
+ const rect = await client.evaluate(`(() => {
448
+ const el = document.querySelector(${JSON.stringify(selector)});
449
+ if (!el) return null;
450
+ const r = el.getBoundingClientRect();
451
+ return { x: r.x, y: r.y, width: r.width, height: r.height };
452
+ })()`);
453
+ if (!rect)
454
+ return;
455
+ const centerX = rect.x + rect.width / 2;
456
+ const centerY = rect.y + rect.height / 2;
457
+ if (centerY < viewportHeight * 0.2 || centerY > viewportHeight * 0.8) {
458
+ const deltaY = centerY - viewportHeight / 2;
459
+ await humanizedScrollY(client, deltaY * 0.5, centerX, centerY, mouse);
460
+ await gaussianDelay(300, 100, 150, 600);
461
+ }
462
+ }
463
+ /**
464
+ * Click an element with humanized mouse movement when available.
465
+ *
466
+ * When a {@link HumanizedMouse} is provided and available, the cursor
467
+ * follows a Bezier path to the element center before clicking. The
468
+ * VirtualMouse dispatches `mousePressed` / `mouseReleased` via CDP.
469
+ *
470
+ * **Pre-focus hover** (60% probability, HumanizedMouse only): before
471
+ * clicking, the cursor first moves to a point 20–50 px from the target,
472
+ * pauses briefly to simulate visual scanning, then proceeds to the
473
+ * target — a two-phase approach that mimics how a human visually locates
474
+ * a button before moving to click it.
475
+ *
476
+ * **Viewport comfort zone**: if the target sits in the outer 20% of the
477
+ * viewport, a small scroll brings it more central before interacting.
478
+ *
479
+ * Falls back to the standard JS `.click()` when humanized mouse is
480
+ * unavailable (or the element cannot be located by bounding rect).
481
+ *
482
+ * @param client - Connected CDP client targeting the LinkedIn page.
483
+ * @param selector - CSS selector for the element to click.
484
+ * @param mouse - Optional humanized mouse instance.
485
+ */
486
+ export async function humanizedClick(client, selector, mouse) {
487
+ // Viewport comfort zone: scroll element toward center if near edges
488
+ await viewportComfortZone(client, selector, mouse);
489
+ await gaussianDelay(25, 12, 0, 50); // Pre-click approach hesitation
490
+ if (mouse?.isAvailable) {
491
+ const center = await getElementCenter(client, selector);
492
+ if (center) {
493
+ // Pre-focus hover: 60% of the time, approach via a nearby point first
494
+ if (Math.random() < 0.6) {
495
+ const angle = Math.random() * 2 * Math.PI;
496
+ const radius = randomBetween(20, 50);
497
+ const nearX = Math.round(center.x + Math.cos(angle) * radius);
498
+ const nearY = Math.round(center.y + Math.sin(angle) * radius);
499
+ await mouse.move(nearX, nearY);
500
+ await gaussianDelay(180, 60, 80, 400); // Visual scanning pause
501
+ }
502
+ await mouse.click(center.x, center.y);
503
+ await gaussianDelay(100, 25, 50, 150); // Post-click visual confirmation
504
+ return;
505
+ }
506
+ }
507
+ // Fallback: simulate mouse movement path before JS click
508
+ const center = await getElementCenter(client, selector);
509
+ if (center) {
510
+ const viewportSize = await client.evaluate(`({ w: window.innerWidth, h: window.innerHeight })`);
511
+ // Random starting position within the viewport
512
+ const startX = Math.round(Math.random() * viewportSize.w);
513
+ const startY = Math.round(Math.random() * viewportSize.h);
514
+ const steps = Math.round(gaussianBetween(4, 0.7, 3, 5));
515
+ for (let i = 1; i <= steps; i++) {
516
+ const t = i / steps;
517
+ const baseX = startX + (center.x - startX) * t;
518
+ const baseY = startY + (center.y - startY) * t;
519
+ // Add random offset to intermediate points, not the final point
520
+ const offsetX = i < steps ? Math.round(gaussianBetween(0, 10, -20, 20)) : 0;
521
+ const offsetY = i < steps ? Math.round(gaussianBetween(0, 10, -20, 20)) : 0;
522
+ await client.send("Input.dispatchMouseEvent", {
523
+ type: "mouseMoved",
524
+ x: Math.round(baseX) + offsetX,
525
+ y: Math.round(baseY) + offsetY,
526
+ });
527
+ await gaussianDelay(25, 10, 10, 50);
528
+ }
529
+ }
530
+ await click(client, selector);
531
+ await gaussianDelay(100, 25, 50, 150); // Post-click visual confirmation
532
+ }
533
+ /**
534
+ * Hover over an element with humanized mouse movement when available.
535
+ *
536
+ * When a {@link HumanizedMouse} is provided, the cursor physically
537
+ * moves to the element center — which is more realistic than
538
+ * dispatching synthetic `mouseenter` / `mouseover` JS events.
539
+ *
540
+ * Falls back to synthetic JS events when unavailable.
541
+ *
542
+ * @param client - Connected CDP client targeting the LinkedIn page.
543
+ * @param selector - CSS selector for the element to hover.
544
+ * @param mouse - Optional humanized mouse instance.
545
+ */
546
+ export async function humanizedHover(client, selector, mouse) {
547
+ await gaussianDelay(25, 12, 0, 50); // Pre-hover approach hesitation
548
+ if (mouse?.isAvailable) {
549
+ const center = await getElementCenter(client, selector);
550
+ if (center) {
551
+ await mouse.move(center.x, center.y);
552
+ return;
553
+ }
554
+ }
555
+ // Fallback to JS hover
556
+ await hover(client, selector);
557
+ }
558
+ /**
559
+ * Scroll the page vertically with humanized mouse-wheel strokes.
560
+ *
561
+ * When a {@link HumanizedMouse} is provided, scrolling is emulated as
562
+ * incremental wheel strokes (150 px / 25 ms) at the given position,
563
+ * matching the behavior of a physical mouse wheel.
564
+ *
565
+ * Falls back to a single CDP `mouseWheel` event when unavailable.
566
+ *
567
+ * @param client - Connected CDP client targeting the LinkedIn page.
568
+ * @param deltaY - Pixels to scroll (positive = down).
569
+ * @param x - Viewport X coordinate for the scroll position.
570
+ * @param y - Viewport Y coordinate for the scroll position.
571
+ * @param mouse - Optional humanized mouse instance.
572
+ */
573
+ export async function humanizedScrollY(client, deltaY, x, y, mouse) {
574
+ if (mouse?.isAvailable) {
575
+ await mouse.scrollY(deltaY, x, y);
576
+ return;
577
+ }
578
+ // Fallback to a single CDP scroll event
579
+ await client.send("Input.dispatchMouseEvent", {
580
+ type: "mouseWheel",
581
+ x,
582
+ y,
583
+ deltaX: 0,
584
+ deltaY,
585
+ });
586
+ }
587
+ /**
588
+ * Retry an interaction function with escalating Gaussian-distributed
589
+ * delays between attempts.
590
+ *
591
+ * Wraps critical interaction sequences (click after scroll, hover after
592
+ * navigate) where elements may vanish due to React re-renders. Each
593
+ * retry waits progressively longer — `800 * (attempt + 1)` ms mean —
594
+ * giving the page time to stabilise.
595
+ *
596
+ * @param fn - The async interaction to attempt.
597
+ * @param maxAttempts - Maximum number of attempts (default: 2).
598
+ * @returns The result of the first successful attempt.
599
+ */
600
+ export async function retryInteraction(fn, maxAttempts = 2) {
601
+ for (let i = 0; i < maxAttempts; i++) {
602
+ try {
603
+ return await fn();
604
+ }
605
+ catch (e) {
606
+ if (i === maxAttempts - 1)
607
+ throw e;
608
+ await gaussianDelay(800 * (i + 1), 300, 400, 2_000);
609
+ }
610
+ }
611
+ // Unreachable — the loop always returns or throws
612
+ throw new Error("unreachable");
613
+ }
614
+ //# sourceMappingURL=dom-automation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-automation.js","sourceRoot":"","sources":["../../src/linkedin/dom-automation.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAGpC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGzF,+CAA+C;AAC/C,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,wDAAwD;AACxD,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,4DAA4D;AAC5D,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAQ1C;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,oBAAoB;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC;IAC1E,CAAC;IAED,aAAa;IACb,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC;IAC7D,CAAC;IAED,+BAA+B;IAC/B,MAAM,OAAO,GAAgC;QAC3C,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,EAAE;QACjD,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,EAAE;QAClD,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,EAAE;QAClD,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,EAAE;QAC/C,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE;QAClD,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE;QAClD,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE;QACxD,GAAG,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,qBAAqB,EAAE,GAAG,EAAE;QACzD,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,qBAAqB,EAAE,GAAG,EAAE;QACvD,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,qBAAqB,EAAE,GAAG,EAAE;QACtD,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE;QAClD,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE;QAClD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,qBAAqB,EAAE,GAAG,EAAE;QACnD,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE;QAClD,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,qBAAqB,EAAE,GAAG,EAAE;KACvD,CAAC;IAEF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAaD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAiB,EACjB,QAAgB,EAChB,OAA+B,EAC/B,KAA6B;IAE7B,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,eAAe,CAAC;IACpD,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,qBAAqB,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,+DAA+D;IAC/D,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CACjC,0BAA0B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAC/D,CAAC;QACF,IAAI,KAAK;YAAE,OAAO;QAElB,gEAAgE;QAChE,+DAA+D;QAC/D,2DAA2D;QAC3D,IAAI,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;YAC9E,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;oBACf,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;gBACjB,CAAC;gBAAC,MAAM,CAAC;oBACP,oDAAoD;gBACtD,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAChC,mDAAmD,CACpD,CAAC;gBACF,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;gBACnB,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;gBACnB,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;oBACf,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;oBACnC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YACD,2DAA2D;YAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACtD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACtD,2BAA2B;YAC3B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAChE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAChE,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,eAAe,CACvB,kCAAkC,QAAQ,WAAW,OAAO,CAAC,QAAQ,EAAE,IAAI,CAC5E,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAiB,EACjB,OAAO,GAAG,GAAG;IAEb,qFAAqF;IACrF,MAAM,MAAM,CAAC,QAAQ,CACnB;;;;;;;;;;;;SAYK,CACN,CAAC;IAEF,gDAAgD;IAChD,MAAM,YAAY,GAAG,GAAG,CAAC;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IAEtC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CACnC,6CAA6C,CAC9C,CAAC;QACF,IAAI,OAAO,IAAI,OAAO;YAAE,MAAM;QAC9B,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,0BAA0B;IAC1B,MAAM,MAAM,CAAC,QAAQ,CACnB;;;;;;SAMK,CACN,CAAC;IAEF,gEAAgE;IAChE,MAAM,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAiB,EACjB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CACpC;0CACsC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;SAIzD,CACN,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,kBAAkB,CAC1B,YAAY,QAAQ,0BAA0B,CAC/C,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,MAAiB,EACjB,QAAgB;IAEhB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CACnC;0CACsC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;;;;;;;;;;SAazD,CACN,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAC1B,YAAY,QAAQ,uBAAuB,CAC5C,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,MAAiB,EACjB,QAAgB;IAEhB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CACnC;0CACsC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;SAIzD,CACN,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAC1B,YAAY,QAAQ,uBAAuB,CAC5C,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAiB,EACjB,QAAgB,EAChB,IAAY,EACZ,SAAqB,MAAM;IAE3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CACnC;0CACsC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;SAIzD,CACN,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAC1B,YAAY,QAAQ,0BAA0B,CAC/C,CAAC;IACJ,CAAC;IAED,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,YAAY,GAAG,EAAE,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBAC1C,IAAI,EAAE,SAAS;oBACf,GAAG,EAAE,IAAI;oBACT,IAAI,EAAE,IAAI;oBACV,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,qBAAqB,EAAE,EAAE,CAAC,qBAAqB,EAAE,CAAC;iBAC9E,CAAC,CAAC;gBACH,MAAM,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBAC1C,IAAI,EAAE,OAAO;oBACb,GAAG,EAAE,IAAI;oBACT,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,qBAAqB,EAAE,EAAE,CAAC,qBAAqB,EAAE,CAAC;iBAC9E,CAAC,CAAC;gBAEH,wBAAwB;gBACxB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClB,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC5C,CAAC;qBAAM,IAAI,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;oBACtD,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC1C,CAAC;qBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBACxB,MAAM,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,MAAM,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBACvC,CAAC;gBAED,wBAAwB;gBACxB,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,4BAA4B,EAAE,CAAC;oBACjD,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC1C,CAAC;gBAED,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;YACD,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAaD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAiB,EACjB,QAAgB;IAEhB,OAAO,MAAM,CAAC,QAAQ,CACpB;0CACsC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;SAIzD,CACN,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAiB,EACjB,YAAoB,EACpB,KAAa;IAEb,OAAO,MAAM,CAAC,QAAQ,CACpB;8CAC0C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;uBACnD,MAAM,CAAC,KAAK,CAAC;;;;SAI3B,CACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAiB;IAEjB,OAAO,MAAM,CAAC,QAAQ,CAAS,oBAAoB,CAAC,CAAC;AACvD,CAAC;AAED,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E;;;;GAIG;AACH,KAAK,UAAU,mBAAmB,CAChC,MAAiB,EACjB,SAA8C,EAC9C,KAAqB;IAErB,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,cAAc,GAAG,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,cAAc,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC;QAC9C,MAAM,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAiB,EACjB,QAAgB,EAChB,KAA6B;IAE7B,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,mBAAmB,CACvC,MAAM,EACN,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,EACxC,KAAK,CACN,CAAC;QACF,IAAI,OAAO;YAAE,OAAO;IACtB,CAAC;IACD,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAiB,EACjB,YAAoB,EACpB,KAAa,EACb,KAA6B;IAE7B,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,mBAAmB,CACvC,MAAM,EACN,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAC1D,KAAK,CACN,CAAC;QACF,IAAI,OAAO;YAAE,OAAO;IACtB,CAAC;IACD,qCAAqC;IACrC,MAAM,MAAM,CAAC,QAAQ,CACnB;8CAC0C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;uBACnD,MAAM,CAAC,KAAK,CAAC;;SAE3B,CACN,CAAC;AACJ,CAAC;AAoBD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAiB,EACjB,QAAgB;IAEhB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAChC;0CACsC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;SAIzD,CACN,CAAC;IACF,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAEpC,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAC3F,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAE9F,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAElE,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC9C,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,mBAAmB,CAChC,MAAiB,EACjB,QAAgB,EAChB,KAA6B;IAE7B,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACvD,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAChC;0CACsC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;SAIzD,CACN,CAAC;IACF,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzC,IAAI,OAAO,GAAG,cAAc,GAAG,GAAG,IAAI,OAAO,GAAG,cAAc,GAAG,GAAG,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,CAAC,CAAC;QAC5C,MAAM,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACtE,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAiB,EACjB,QAAgB,EAChB,KAA6B;IAE7B,oEAAoE;IACpE,MAAM,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAEnD,MAAM,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gCAAgC;IACpE,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE,CAAC;YACX,sEAAsE;YACtE,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC;gBAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC;gBAC9D,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC/B,MAAM,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,wBAAwB;YACjE,CAAC;YAED,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,iCAAiC;YACxE,OAAO;QACT,CAAC;IACH,CAAC;IACD,yDAAyD;IACzD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,QAAQ,CACxC,mDAAmD,CACpD,CAAC;QACF,+CAA+C;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/C,gEAAgE;YAChE,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;gBAC5C,IAAI,EAAE,YAAY;gBAClB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO;gBAC9B,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO;aAC/B,CAAC,CAAC;YACH,MAAM,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9B,MAAM,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,iCAAiC;AAC1E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAiB,EACjB,QAAgB,EAChB,KAA6B;IAE7B,MAAM,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gCAAgC;IACpE,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;IACH,CAAC;IACD,uBAAuB;IACvB,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAiB,EACjB,MAAc,EACd,CAAS,EACT,CAAS,EACT,KAA6B;IAE7B,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;QACvB,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IACD,wCAAwC;IACxC,MAAM,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;QAC5C,IAAI,EAAE,YAAY;QAClB,CAAC;QACD,CAAC;QACD,MAAM,EAAE,CAAC;QACT,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAoB,EACpB,WAAW,GAAG,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,WAAW,GAAG,CAAC;gBAAE,MAAM,CAAC,CAAC;YACnC,MAAM,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,kDAAkD;IAClD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC"}