@webex/plugin-meetings 2.59.8 → 2.60.0-next.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 (528) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +41 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +357 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +215 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +22 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +51 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +44 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1047 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +77 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +64 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/browser-detection.js +2 -3
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +3 -4
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.js +50 -0
  37. package/dist/common/errors/no-meeting-info.js.map +1 -0
  38. package/dist/common/errors/parameter.js +3 -4
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +1 -2
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +1 -2
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  45. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  46. package/dist/common/errors/reconnection-in-progress.js +1 -2
  47. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  48. package/dist/common/errors/reconnection.js +1 -2
  49. package/dist/common/errors/reconnection.js.map +1 -1
  50. package/dist/common/errors/stats.js +1 -2
  51. package/dist/common/errors/stats.js.map +1 -1
  52. package/dist/common/errors/webex-errors.js +48 -28
  53. package/dist/common/errors/webex-errors.js.map +1 -1
  54. package/dist/common/errors/webex-meetings-error.js +1 -2
  55. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  56. package/dist/common/events/events-scope.js +1 -2
  57. package/dist/common/events/events-scope.js.map +1 -1
  58. package/dist/common/events/events.js +1 -2
  59. package/dist/common/events/events.js.map +1 -1
  60. package/dist/common/events/trigger-proxy.js +1 -2
  61. package/dist/common/events/trigger-proxy.js.map +1 -1
  62. package/dist/common/events/util.js +1 -2
  63. package/dist/common/events/util.js.map +1 -1
  64. package/dist/common/logs/logger-config.js +1 -2
  65. package/dist/common/logs/logger-config.js.map +1 -1
  66. package/dist/common/logs/logger-proxy.js +2 -3
  67. package/dist/common/logs/logger-proxy.js.map +1 -1
  68. package/dist/common/logs/request.js +8 -5
  69. package/dist/common/logs/request.js.map +1 -1
  70. package/dist/common/queue.js +22 -9
  71. package/dist/common/queue.js.map +1 -1
  72. package/dist/config.js +8 -11
  73. package/dist/config.js.map +1 -1
  74. package/dist/constants.js +437 -435
  75. package/dist/constants.js.map +1 -1
  76. package/dist/controls-options-manager/constants.js +3 -6
  77. package/dist/controls-options-manager/constants.js.map +1 -1
  78. package/dist/controls-options-manager/enums.js +14 -6
  79. package/dist/controls-options-manager/enums.js.map +1 -1
  80. package/dist/controls-options-manager/index.js +127 -38
  81. package/dist/controls-options-manager/index.js.map +1 -1
  82. package/dist/controls-options-manager/types.js +7 -0
  83. package/dist/controls-options-manager/types.js.map +1 -0
  84. package/dist/controls-options-manager/util.js +309 -19
  85. package/dist/controls-options-manager/util.js.map +1 -1
  86. package/dist/index.js +116 -4
  87. package/dist/index.js.map +1 -1
  88. package/dist/interpretation/collection.js +22 -0
  89. package/dist/interpretation/collection.js.map +1 -0
  90. package/dist/interpretation/index.js +365 -0
  91. package/dist/interpretation/index.js.map +1 -0
  92. package/dist/interpretation/siLanguage.js +24 -0
  93. package/dist/interpretation/siLanguage.js.map +1 -0
  94. package/dist/locus-info/controlsUtils.js +100 -11
  95. package/dist/locus-info/controlsUtils.js.map +1 -1
  96. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  97. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  98. package/dist/locus-info/fullState.js +1 -2
  99. package/dist/locus-info/fullState.js.map +1 -1
  100. package/dist/locus-info/hostUtils.js +1 -2
  101. package/dist/locus-info/hostUtils.js.map +1 -1
  102. package/dist/locus-info/index.js +425 -84
  103. package/dist/locus-info/index.js.map +1 -1
  104. package/dist/locus-info/infoUtils.js +13 -5
  105. package/dist/locus-info/infoUtils.js.map +1 -1
  106. package/dist/locus-info/mediaSharesUtils.js +58 -3
  107. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  108. package/dist/locus-info/parser.js +253 -80
  109. package/dist/locus-info/parser.js.map +1 -1
  110. package/dist/locus-info/selfUtils.js +97 -13
  111. package/dist/locus-info/selfUtils.js.map +1 -1
  112. package/dist/media/index.js +106 -319
  113. package/dist/media/index.js.map +1 -1
  114. package/dist/media/properties.js +96 -153
  115. package/dist/media/properties.js.map +1 -1
  116. package/dist/media/util.js +1 -22
  117. package/dist/media/util.js.map +1 -1
  118. package/dist/mediaQualityMetrics/config.js +498 -493
  119. package/dist/mediaQualityMetrics/config.js.map +1 -1
  120. package/dist/meeting/in-meeting-actions.js +90 -3
  121. package/dist/meeting/in-meeting-actions.js.map +1 -1
  122. package/dist/meeting/index.js +4578 -2973
  123. package/dist/meeting/index.js.map +1 -1
  124. package/dist/meeting/locusMediaRequest.js +291 -0
  125. package/dist/meeting/locusMediaRequest.js.map +1 -0
  126. package/dist/meeting/muteState.js +224 -133
  127. package/dist/meeting/muteState.js.map +1 -1
  128. package/dist/meeting/request.js +297 -199
  129. package/dist/meeting/request.js.map +1 -1
  130. package/dist/meeting/request.type.js +7 -0
  131. package/dist/meeting/request.type.js.map +1 -0
  132. package/dist/meeting/state.js +1 -2
  133. package/dist/meeting/state.js.map +1 -1
  134. package/dist/meeting/util.js +605 -435
  135. package/dist/meeting/util.js.map +1 -1
  136. package/dist/meeting-info/collection.js +3 -4
  137. package/dist/meeting-info/collection.js.map +1 -1
  138. package/dist/meeting-info/index.js +74 -7
  139. package/dist/meeting-info/index.js.map +1 -1
  140. package/dist/meeting-info/meeting-info-v2.js +197 -63
  141. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  142. package/dist/meeting-info/request.js +1 -2
  143. package/dist/meeting-info/request.js.map +1 -1
  144. package/dist/meeting-info/util.js +2 -3
  145. package/dist/meeting-info/util.js.map +1 -1
  146. package/dist/meeting-info/utilv2.js +25 -12
  147. package/dist/meeting-info/utilv2.js.map +1 -1
  148. package/dist/meetings/collection.js +25 -4
  149. package/dist/meetings/collection.js.map +1 -1
  150. package/dist/meetings/index.js +464 -123
  151. package/dist/meetings/index.js.map +1 -1
  152. package/dist/meetings/meetings.types.js +7 -0
  153. package/dist/meetings/meetings.types.js.map +1 -0
  154. package/dist/meetings/request.js +4 -3
  155. package/dist/meetings/request.js.map +1 -1
  156. package/dist/meetings/util.js +107 -6
  157. package/dist/meetings/util.js.map +1 -1
  158. package/dist/member/index.js +54 -2
  159. package/dist/member/index.js.map +1 -1
  160. package/dist/member/member.types.js +3 -4
  161. package/dist/member/member.types.js.map +1 -1
  162. package/dist/member/types.js +23 -0
  163. package/dist/member/types.js.map +1 -0
  164. package/dist/member/util.js +131 -29
  165. package/dist/member/util.js.map +1 -1
  166. package/dist/members/collection.js +11 -2
  167. package/dist/members/collection.js.map +1 -1
  168. package/dist/members/index.js +174 -10
  169. package/dist/members/index.js.map +1 -1
  170. package/dist/members/request.js +108 -41
  171. package/dist/members/request.js.map +1 -1
  172. package/dist/members/types.js +14 -0
  173. package/dist/members/types.js.map +1 -0
  174. package/dist/members/util.js +327 -234
  175. package/dist/members/util.js.map +1 -1
  176. package/dist/metrics/constants.js +14 -9
  177. package/dist/metrics/constants.js.map +1 -1
  178. package/dist/metrics/index.js +4 -452
  179. package/dist/metrics/index.js.map +1 -1
  180. package/dist/multistream/mediaRequestManager.js +344 -0
  181. package/dist/multistream/mediaRequestManager.js.map +1 -0
  182. package/dist/multistream/receiveSlot.js +200 -0
  183. package/dist/multistream/receiveSlot.js.map +1 -0
  184. package/dist/multistream/receiveSlotManager.js +174 -0
  185. package/dist/multistream/receiveSlotManager.js.map +1 -0
  186. package/dist/multistream/remoteMedia.js +268 -0
  187. package/dist/multistream/remoteMedia.js.map +1 -0
  188. package/dist/multistream/remoteMediaGroup.js +267 -0
  189. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  190. package/dist/multistream/remoteMediaManager.js +1211 -0
  191. package/dist/multistream/remoteMediaManager.js.map +1 -0
  192. package/dist/multistream/sendSlotManager.js +236 -0
  193. package/dist/multistream/sendSlotManager.js.map +1 -0
  194. package/dist/networkQualityMonitor/index.js +5 -4
  195. package/dist/networkQualityMonitor/index.js.map +1 -1
  196. package/dist/personal-meeting-room/index.js +2 -3
  197. package/dist/personal-meeting-room/index.js.map +1 -1
  198. package/dist/personal-meeting-room/request.js +2 -3
  199. package/dist/personal-meeting-room/request.js.map +1 -1
  200. package/dist/personal-meeting-room/util.js +1 -2
  201. package/dist/personal-meeting-room/util.js.map +1 -1
  202. package/dist/reachability/index.js +265 -72
  203. package/dist/reachability/index.js.map +1 -1
  204. package/dist/reachability/request.js +18 -10
  205. package/dist/reachability/request.js.map +1 -1
  206. package/dist/reactions/constants.js +12 -0
  207. package/dist/reactions/constants.js.map +1 -0
  208. package/dist/reactions/reactions.js +4 -6
  209. package/dist/reactions/reactions.js.map +1 -1
  210. package/dist/reactions/reactions.type.js +21 -23
  211. package/dist/reactions/reactions.type.js.map +1 -1
  212. package/dist/reconnection-manager/index.js +272 -220
  213. package/dist/reconnection-manager/index.js.map +1 -1
  214. package/dist/recording-controller/enums.js +4 -5
  215. package/dist/recording-controller/enums.js.map +1 -1
  216. package/dist/recording-controller/index.js +57 -46
  217. package/dist/recording-controller/index.js.map +1 -1
  218. package/dist/recording-controller/util.js +10 -10
  219. package/dist/recording-controller/util.js.map +1 -1
  220. package/dist/roap/index.js +101 -235
  221. package/dist/roap/index.js.map +1 -1
  222. package/dist/roap/request.js +126 -180
  223. package/dist/roap/request.js.map +1 -1
  224. package/dist/roap/turnDiscovery.js +115 -105
  225. package/dist/roap/turnDiscovery.js.map +1 -1
  226. package/dist/rtcMetrics/constants.js +11 -0
  227. package/dist/rtcMetrics/constants.js.map +1 -0
  228. package/dist/rtcMetrics/index.js +115 -0
  229. package/dist/rtcMetrics/index.js.map +1 -0
  230. package/dist/statsAnalyzer/global.js +2 -85
  231. package/dist/statsAnalyzer/global.js.map +1 -1
  232. package/dist/statsAnalyzer/index.js +384 -426
  233. package/dist/statsAnalyzer/index.js.map +1 -1
  234. package/dist/statsAnalyzer/mqaUtil.js +114 -80
  235. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  236. package/dist/transcription/index.js +1 -2
  237. package/dist/transcription/index.js.map +1 -1
  238. package/dist/webinar/collection.js +43 -0
  239. package/dist/webinar/collection.js.map +1 -0
  240. package/dist/webinar/index.js +68 -0
  241. package/dist/webinar/index.js.map +1 -0
  242. package/package.json +34 -24
  243. package/src/annotation/annotation.types.ts +50 -0
  244. package/src/annotation/constants.ts +36 -0
  245. package/src/annotation/index.ts +328 -0
  246. package/src/breakouts/README.md +220 -0
  247. package/src/breakouts/breakout.ts +188 -0
  248. package/src/breakouts/collection.ts +19 -0
  249. package/src/breakouts/edit-lock-error.ts +25 -0
  250. package/src/breakouts/events.ts +56 -0
  251. package/src/breakouts/index.ts +925 -0
  252. package/src/breakouts/request.ts +55 -0
  253. package/src/breakouts/utils.ts +57 -0
  254. package/src/common/errors/no-meeting-info.ts +24 -0
  255. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  256. package/src/common/errors/webex-errors.ts +36 -12
  257. package/src/common/logs/logger-proxy.ts +1 -1
  258. package/src/common/logs/request.ts +5 -1
  259. package/src/common/queue.ts +22 -8
  260. package/src/config.ts +5 -7
  261. package/src/constants.ts +263 -91
  262. package/src/controls-options-manager/enums.ts +11 -1
  263. package/src/controls-options-manager/index.ts +116 -21
  264. package/src/controls-options-manager/types.ts +59 -0
  265. package/src/controls-options-manager/util.ts +294 -14
  266. package/src/index.ts +40 -0
  267. package/src/interpretation/README.md +60 -0
  268. package/src/interpretation/collection.ts +19 -0
  269. package/src/interpretation/index.ts +332 -0
  270. package/src/interpretation/siLanguage.ts +18 -0
  271. package/src/locus-info/controlsUtils.ts +110 -0
  272. package/src/locus-info/index.ts +449 -61
  273. package/src/locus-info/infoUtils.ts +14 -2
  274. package/src/locus-info/mediaSharesUtils.ts +64 -0
  275. package/src/locus-info/parser.ts +258 -47
  276. package/src/locus-info/selfUtils.ts +85 -2
  277. package/src/media/index.ts +153 -370
  278. package/src/media/properties.ts +106 -136
  279. package/src/media/util.ts +0 -21
  280. package/src/mediaQualityMetrics/config.ts +379 -377
  281. package/src/meeting/in-meeting-actions.ts +168 -0
  282. package/src/meeting/index.ts +3800 -2491
  283. package/src/meeting/locusMediaRequest.ts +313 -0
  284. package/src/meeting/muteState.ts +224 -138
  285. package/src/meeting/request.ts +207 -127
  286. package/src/meeting/request.type.ts +13 -0
  287. package/src/meeting/util.ts +590 -423
  288. package/src/meeting-info/index.ts +81 -8
  289. package/src/meeting-info/meeting-info-v2.ts +159 -13
  290. package/src/meeting-info/util.ts +1 -1
  291. package/src/meeting-info/utilv2.ts +22 -9
  292. package/src/meetings/collection.ts +20 -0
  293. package/src/meetings/index.ts +466 -124
  294. package/src/meetings/meetings.types.ts +12 -0
  295. package/src/meetings/request.ts +2 -0
  296. package/src/meetings/util.ts +116 -5
  297. package/src/member/index.ts +52 -1
  298. package/src/member/types.ts +38 -0
  299. package/src/member/util.ts +139 -28
  300. package/src/members/collection.ts +8 -0
  301. package/src/members/index.ts +196 -7
  302. package/src/members/request.ts +97 -17
  303. package/src/members/types.ts +29 -0
  304. package/src/members/util.ts +333 -240
  305. package/src/metrics/constants.ts +12 -6
  306. package/src/metrics/index.ts +1 -471
  307. package/src/multistream/mediaRequestManager.ts +440 -0
  308. package/src/multistream/receiveSlot.ts +184 -0
  309. package/src/multistream/receiveSlotManager.ts +166 -0
  310. package/src/multistream/remoteMedia.ts +254 -0
  311. package/src/multistream/remoteMediaGroup.ts +284 -0
  312. package/src/multistream/remoteMediaManager.ts +1145 -0
  313. package/src/multistream/sendSlotManager.ts +170 -0
  314. package/src/networkQualityMonitor/index.ts +6 -6
  315. package/src/reachability/index.ts +238 -45
  316. package/src/reachability/request.ts +17 -8
  317. package/src/reactions/constants.ts +4 -0
  318. package/src/reactions/reactions.ts +4 -4
  319. package/src/reactions/reactions.type.ts +30 -4
  320. package/src/reconnection-manager/index.ts +124 -107
  321. package/src/recording-controller/index.ts +20 -3
  322. package/src/recording-controller/util.ts +26 -9
  323. package/src/roap/index.ts +98 -241
  324. package/src/roap/request.ts +74 -148
  325. package/src/roap/turnDiscovery.ts +62 -56
  326. package/src/rtcMetrics/constants.ts +3 -0
  327. package/src/rtcMetrics/index.ts +100 -0
  328. package/src/statsAnalyzer/global.ts +1 -84
  329. package/src/statsAnalyzer/index.ts +442 -523
  330. package/src/statsAnalyzer/mqaUtil.ts +105 -103
  331. package/src/webinar/collection.ts +31 -0
  332. package/src/webinar/index.ts +62 -0
  333. package/test/integration/spec/converged-space-meetings.js +233 -0
  334. package/test/integration/spec/journey.js +320 -264
  335. package/test/integration/spec/space-meeting.js +77 -4
  336. package/test/unit/spec/annotation/index.ts +418 -0
  337. package/test/unit/spec/breakouts/breakout.ts +237 -0
  338. package/test/unit/spec/breakouts/collection.ts +15 -0
  339. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  340. package/test/unit/spec/breakouts/events.ts +89 -0
  341. package/test/unit/spec/breakouts/index.ts +1790 -0
  342. package/test/unit/spec/breakouts/request.ts +104 -0
  343. package/test/unit/spec/breakouts/utils.js +72 -0
  344. package/test/unit/spec/common/queue.js +31 -2
  345. package/test/unit/spec/controls-options-manager/index.js +163 -0
  346. package/test/unit/spec/controls-options-manager/util.js +576 -60
  347. package/test/unit/spec/fixture/locus.js +1 -0
  348. package/test/unit/spec/interpretation/collection.ts +15 -0
  349. package/test/unit/spec/interpretation/index.ts +589 -0
  350. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  351. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  352. package/test/unit/spec/locus-info/index.js +1390 -16
  353. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  354. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  355. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  356. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  357. package/test/unit/spec/locus-info/parser.js +116 -35
  358. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  359. package/test/unit/spec/media/index.ts +274 -0
  360. package/test/unit/spec/media/properties.ts +75 -84
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +82 -0
  362. package/test/unit/spec/meeting/index.js +7395 -3171
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  364. package/test/unit/spec/meeting/muteState.js +407 -212
  365. package/test/unit/spec/meeting/request.js +512 -42
  366. package/test/unit/spec/meeting/utils.js +741 -24
  367. package/test/unit/spec/meeting-info/index.js +300 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +500 -6
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +14 -0
  371. package/test/unit/spec/meetings/index.js +1012 -209
  372. package/test/unit/spec/meetings/utils.js +202 -2
  373. package/test/unit/spec/member/index.js +38 -8
  374. package/test/unit/spec/member/util.js +528 -27
  375. package/test/unit/spec/members/index.js +597 -3
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +210 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  380. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  382. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  385. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  386. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  387. package/test/unit/spec/reachability/index.ts +598 -24
  388. package/test/unit/spec/reachability/request.js +68 -0
  389. package/test/unit/spec/reconnection-manager/index.js +130 -22
  390. package/test/unit/spec/recording-controller/index.js +293 -218
  391. package/test/unit/spec/recording-controller/util.js +223 -96
  392. package/test/unit/spec/roap/index.ts +200 -76
  393. package/test/unit/spec/roap/request.ts +232 -0
  394. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  395. package/test/unit/spec/rtcMetrics/index.ts +73 -0
  396. package/test/unit/spec/stats-analyzer/index.js +181 -177
  397. package/test/unit/spec/webinar/collection.ts +13 -0
  398. package/test/unit/spec/webinar/index.ts +60 -0
  399. package/test/utils/constants.js +9 -0
  400. package/test/utils/integrationTestUtils.js +46 -0
  401. package/test/utils/testUtils.js +0 -45
  402. package/test/utils/webex-config.js +4 -0
  403. package/test/utils/webex-test-users.js +7 -3
  404. package/dist/common/browser-detection.d.ts +0 -9
  405. package/dist/common/collection.d.ts +0 -48
  406. package/dist/common/config.d.ts +0 -2
  407. package/dist/common/errors/captcha-error.d.ts +0 -15
  408. package/dist/common/errors/intent-to-join.d.ts +0 -16
  409. package/dist/common/errors/join-meeting.d.ts +0 -17
  410. package/dist/common/errors/media.d.ts +0 -15
  411. package/dist/common/errors/parameter.d.ts +0 -15
  412. package/dist/common/errors/password-error.d.ts +0 -15
  413. package/dist/common/errors/permission.d.ts +0 -14
  414. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  415. package/dist/common/errors/reconnection.d.ts +0 -15
  416. package/dist/common/errors/stats.d.ts +0 -15
  417. package/dist/common/errors/webex-errors.d.ts +0 -81
  418. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  419. package/dist/common/events/events-scope.d.ts +0 -17
  420. package/dist/common/events/events.d.ts +0 -12
  421. package/dist/common/events/trigger-proxy.d.ts +0 -2
  422. package/dist/common/events/util.d.ts +0 -2
  423. package/dist/common/logs/logger-config.d.ts +0 -2
  424. package/dist/common/logs/logger-proxy.d.ts +0 -2
  425. package/dist/common/logs/request.d.ts +0 -34
  426. package/dist/common/queue.d.ts +0 -32
  427. package/dist/config.d.ts +0 -73
  428. package/dist/constants.d.ts +0 -926
  429. package/dist/controls-options-manager/constants.d.ts +0 -4
  430. package/dist/controls-options-manager/enums.d.ts +0 -5
  431. package/dist/controls-options-manager/index.d.ts +0 -120
  432. package/dist/controls-options-manager/util.d.ts +0 -7
  433. package/dist/index.d.ts +0 -4
  434. package/dist/locus-info/controlsUtils.d.ts +0 -2
  435. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  436. package/dist/locus-info/fullState.d.ts +0 -2
  437. package/dist/locus-info/hostUtils.d.ts +0 -2
  438. package/dist/locus-info/index.d.ts +0 -269
  439. package/dist/locus-info/infoUtils.d.ts +0 -2
  440. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  441. package/dist/locus-info/parser.d.ts +0 -212
  442. package/dist/locus-info/selfUtils.d.ts +0 -2
  443. package/dist/media/index.d.ts +0 -32
  444. package/dist/media/properties.d.ts +0 -108
  445. package/dist/media/util.d.ts +0 -2
  446. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  447. package/dist/meeting/effectsState.d.ts +0 -42
  448. package/dist/meeting/effectsState.js +0 -260
  449. package/dist/meeting/effectsState.js.map +0 -1
  450. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  451. package/dist/meeting/index.d.ts +0 -1622
  452. package/dist/meeting/muteState.d.ts +0 -116
  453. package/dist/meeting/request.d.ts +0 -255
  454. package/dist/meeting/state.d.ts +0 -9
  455. package/dist/meeting/util.d.ts +0 -2
  456. package/dist/meeting-info/collection.d.ts +0 -20
  457. package/dist/meeting-info/index.d.ts +0 -57
  458. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  459. package/dist/meeting-info/request.d.ts +0 -22
  460. package/dist/meeting-info/util.d.ts +0 -2
  461. package/dist/meeting-info/utilv2.d.ts +0 -2
  462. package/dist/meetings/collection.d.ts +0 -23
  463. package/dist/meetings/index.d.ts +0 -296
  464. package/dist/meetings/request.d.ts +0 -27
  465. package/dist/meetings/util.d.ts +0 -18
  466. package/dist/member/index.d.ts +0 -147
  467. package/dist/member/member.types.d.ts +0 -11
  468. package/dist/member/util.d.ts +0 -2
  469. package/dist/members/collection.d.ts +0 -24
  470. package/dist/members/index.d.ts +0 -298
  471. package/dist/members/request.d.ts +0 -50
  472. package/dist/members/util.d.ts +0 -2
  473. package/dist/metrics/config.d.ts +0 -169
  474. package/dist/metrics/config.js +0 -289
  475. package/dist/metrics/config.js.map +0 -1
  476. package/dist/metrics/constants.d.ts +0 -59
  477. package/dist/metrics/index.d.ts +0 -152
  478. package/dist/networkQualityMonitor/index.d.ts +0 -70
  479. package/dist/peer-connection-manager/index.d.ts +0 -6
  480. package/dist/peer-connection-manager/index.js +0 -671
  481. package/dist/peer-connection-manager/index.js.map +0 -1
  482. package/dist/peer-connection-manager/util.d.ts +0 -6
  483. package/dist/peer-connection-manager/util.js +0 -110
  484. package/dist/peer-connection-manager/util.js.map +0 -1
  485. package/dist/personal-meeting-room/index.d.ts +0 -47
  486. package/dist/personal-meeting-room/request.d.ts +0 -14
  487. package/dist/personal-meeting-room/util.d.ts +0 -2
  488. package/dist/reachability/index.d.ts +0 -139
  489. package/dist/reachability/request.d.ts +0 -35
  490. package/dist/reactions/reactions.d.ts +0 -4
  491. package/dist/reactions/reactions.type.d.ts +0 -32
  492. package/dist/reconnection-manager/index.d.ts +0 -112
  493. package/dist/recording-controller/enums.d.ts +0 -7
  494. package/dist/recording-controller/index.d.ts +0 -193
  495. package/dist/recording-controller/util.d.ts +0 -13
  496. package/dist/roap/collection.d.ts +0 -10
  497. package/dist/roap/collection.js +0 -63
  498. package/dist/roap/collection.js.map +0 -1
  499. package/dist/roap/handler.d.ts +0 -47
  500. package/dist/roap/handler.js +0 -279
  501. package/dist/roap/handler.js.map +0 -1
  502. package/dist/roap/index.d.ts +0 -116
  503. package/dist/roap/request.d.ts +0 -35
  504. package/dist/roap/state.d.ts +0 -9
  505. package/dist/roap/state.js +0 -127
  506. package/dist/roap/state.js.map +0 -1
  507. package/dist/roap/turnDiscovery.d.ts +0 -81
  508. package/dist/roap/util.d.ts +0 -2
  509. package/dist/roap/util.js +0 -76
  510. package/dist/roap/util.js.map +0 -1
  511. package/dist/statsAnalyzer/global.d.ts +0 -118
  512. package/dist/statsAnalyzer/index.d.ts +0 -193
  513. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  514. package/dist/transcription/index.d.ts +0 -64
  515. package/src/index.js +0 -15
  516. package/src/meeting/effectsState.ts +0 -209
  517. package/src/metrics/config.ts +0 -485
  518. package/src/peer-connection-manager/index.ts +0 -847
  519. package/src/peer-connection-manager/util.ts +0 -119
  520. package/src/roap/collection.ts +0 -62
  521. package/src/roap/handler.ts +0 -294
  522. package/src/roap/state.ts +0 -156
  523. package/src/roap/util.ts +0 -100
  524. package/test/unit/spec/meeting/effectsState.js +0 -281
  525. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  526. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  527. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  528. package/test/unit/spec/roap/util.js +0 -30
@@ -1 +1 @@
1
- {"version":3,"names":["_eventsScope","_interopRequireDefault","require","_constants","_config","_loggerProxy","_global","_mqaUtil","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","EVENTS","MEDIA_QUALITY","NO_FRAMES_SENT","NO_VIDEO_ENCODED","LOCAL_MEDIA_STARTED","LOCAL_MEDIA_STOPPED","REMOTE_MEDIA_STARTED","REMOTE_MEDIA_STOPPED","exports","StatsAnalyzer","_EventsScope","_inherits2","_super","config","_this","networkQualityMonitor","length","undefined","statsResults","defaultStats","_classCallCheck2","_defineProperty2","_assertThisInitialized2","mediaType","previousValue","currentValue","isLocal","Error","concat","lastEmittedEvent","lastEmittedStartStopEvent","local","remote","newEvent","emit","file","function","type","isSender","isRemote","id","RemoteCandidateType","RemoteTransport","RemoteIpAddress","RemoteNetworkType","sendRecvType","STATS","SEND_DIRECTION","RECEIVE_DIRECTION","ipType","REMOTE","LOCAL","candidateType","indexOf","push","protocol","toUpperCase","ip","portNumber","networkType","internal","candidates","ipAddress","port","priority","transport","timestamp","time","connectionType","NETWORK_TYPE","VPN","UNKNOWN","totalRoundTripTime","statsStarted","lastStatsResults","correlationId","mqaSentCount","lastMqaDataSent","resolutions","video","send","recv","audio","share","localMQEStats","RX","packetsLost","jitter","latency","bitRate","TX","frameRate","resolutionWidth","resolutionHeight","requestedKeyFrame","receivedKeyFrame","_createClass2","key","value","populateResults","lastMqa","audioReceive","common","mediaHopByHopLost","streams","rtpJitter","roundTripTime","receivedBitrate","audioTransmit","remoteLossRate","remoteJitter","transmittedBitrate","videoReceive","receivedFrameRate","receivedWidth","receivedHeight","videoTransmit","transmittedFrameRate","transmittedWidth","transmittedHeight","requestedKeyFrames","resetStatsResults","meanRemoteJitter","meanRtpJitter","meanRoundTripTime","updateMediaStatus","status","meetingMediaStatus","sendMqaData","_this$peerConnection","_this$peerConnection$","_this$peerConnection$2","_this$peerConnection$3","_this$peerConnection2","_this$peerConnection3","_this$peerConnection4","_this$peerConnection5","audioReceiver","mqaData","intervals","audioSender","videoReceiver","videoSender","shareSender","shareReceiver","getAudioSenderMqa","getAudioReceiverMqa","getVideoReceiverMqa","getVideoSenderMqa","isShareStream","intervalMetadata","peerReflexiveIP","peripherals","information","_UNKNOWN_","name","MEDIA_DEVICES","SPEAKER","peerConnection","audioTransceiver","sender","track","label","MICROPHONE","videoTransceiver","CAMERA","intervalNumber","_cloneDeep2","data","updatePeerconnection","startAnalyzer","_this2","getStatsAndParse","then","statsInterval","setInterval","analyzerInterval","mqaInterval","MQA_INTEVAL","_promise","resolve","stopAnalyzer","_this3","sendOneLastMqa","clearInterval","parseGetStatsResult","getStatsResult","processOutboundRTPResult","processInboundRTPResult","compareSentAndReceived","parseCandidate","parseAudioSource","filterAndParseGetStatsResults","getStatsResults","_this4","types","DEFAULT_GET_STATS_FILTER","forEach","includes","AUDIO_CORRELATE","audioLevel","totalAudioEnergy","compareLastStatsResult","currentStats","previousStats","expected","sendAudio","totalPacketsSent","LoggerProxy","logger","info","emitStartStopEvents","receiveAudio","totalPacketsReceived","totalSamplesReceived","VIDEO_CORRELATE","sendVideo","framesEncoded","framesSent","receiveVideo","framesReceived","framesDecoded","framesDropped","SHARE_CORRELATE","sendShare","_this5","connectionState","CONNECTION_STATE","FAILED","trace","all","getStats","res","receiver","shareTransceiver","direction","currentDirection","JSON","parse","_stringify","sendrecvType","processTrackResult","bytesSent","kilobytes","prevBytesSent","keyFramesEncoded","bytes","availableBandwidth","toFixed","outboundRtpId","packetsSent","totalKeyFramesEncoded","totalNackCount","nackCount","totalPliCount","pliCount","totalFirCount","firCount","encoderImplementation","qualityLimitationReason","qualityLimitationResolutionChanges","retransmittedPacketsSent","totalBytesSent","headerBytesSent","retransmittedBytesSent","bytesReceived","prevBytesReceived","packetsReceived","lastPacketReceivedTimestamp","currentPacketsLost","currentPacketLossRatio","totalPacketsLost","keyFramesDecoded","decoderImplementation","fecPacketsDiscarded","fecPacketsReceived","totalBytesReceived","headerBytesReceived","totalSamplesDecoded","concealedSamples","frameWidth","frameHeight","width","height","hugeFramesSent","trackIdentifier","jitterBufferDelay","jitterBufferEmittedCount","avgJitterDelay","totalPacketsLostOnReceiver","currentPacketLoss","packetsLostOnReceiver","ssrc","reportsReceived","overAllPacketLossRatio","maxPacketLossRatio","determineUplinkNetworkQuality","remoteRtpResults","statsAnalyzerCurrentStats","EventsScope"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable prefer-destructuring */\n\nimport {cloneDeep} from 'lodash';\n\nimport EventsScope from '../common/events/events-scope';\nimport {\n DEFAULT_GET_STATS_FILTER,\n CONNECTION_STATE,\n STATS,\n MQA_INTEVAL,\n NETWORK_TYPE,\n MEDIA_DEVICES,\n _UNKNOWN_,\n} from '../constants';\nimport mqaData from '../mediaQualityMetrics/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport defaultStats from './global';\nimport {\n getAudioSenderMqa,\n getAudioReceiverMqa,\n getVideoSenderMqa,\n getVideoReceiverMqa,\n} from './mqaUtil';\n\nexport const EVENTS = {\n MEDIA_QUALITY: 'MEDIA_QUALITY',\n NO_FRAMES_SENT: 'NO_FRAMES_SENT',\n NO_VIDEO_ENCODED: 'NO_VIDEO_ENCODED',\n LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',\n LOCAL_MEDIA_STOPPED: 'LOCAL_MEDIA_STOPPED',\n REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',\n REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED',\n};\n\n/**\n * Stats Analyzer class that will emit events based on detected quality\n *\n * @export\n * @class StatsAnalyzer\n * @extends {EventsScope}\n */\nexport class StatsAnalyzer extends EventsScope {\n config: any;\n correlationId: any;\n lastEmittedStartStopEvent: any;\n lastMqaDataSent: any;\n lastStatsResults: any;\n localMQEStats: any;\n meetingMediaStatus: any;\n mqaInterval: NodeJS.Timeout;\n mqaSentCount: any;\n networkQualityMonitor: any;\n peerConnection: any;\n statsInterval: NodeJS.Timeout;\n statsResults: any;\n statsStarted: any;\n\n /**\n * Creates a new instance of StatsAnalyzer\n * @constructor\n * @public\n * @param {Object} config SDK Configuration Object\n * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)\n * @param {Object} statsResults Default properties for stats\n */\n constructor(\n config: any,\n networkQualityMonitor: object = {},\n statsResults: object = defaultStats\n ) {\n super();\n this.statsStarted = false;\n this.statsResults = statsResults;\n this.lastStatsResults = null;\n this.config = config;\n this.networkQualityMonitor = networkQualityMonitor;\n this.correlationId = config.correlationId;\n this.mqaSentCount = -1;\n this.lastMqaDataSent = {\n resolutions: {\n video: {send: {}, recv: {}},\n audio: {send: {}, recv: {}},\n share: {send: {}, recv: {}},\n },\n video: {send: {}, recv: {}},\n audio: {send: {}, recv: {}},\n share: {send: {}, recv: {}},\n };\n this.localMQEStats = {\n audio: {\n RX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: [],\n },\n TX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: [],\n },\n },\n video: {\n RX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: [],\n frameRate: [],\n resolutionWidth: [],\n resolutionHeight: [],\n requestedKeyFrame: [],\n receivedKeyFrame: [],\n },\n TX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: [],\n frameRate: [],\n resolutionWidth: [],\n resolutionHeight: [],\n requestedKeyFrame: [],\n receivedKeyFrame: [],\n },\n },\n };\n this.lastEmittedStartStopEvent = {\n audio: {\n local: undefined,\n remote: undefined,\n },\n video: {\n local: undefined,\n remote: undefined,\n },\n share: {\n local: undefined,\n remote: undefined,\n },\n };\n }\n\n populateResults(lastMqa) {\n // Audio\n\n this.localMQEStats.audio.RX.packetsLost.push(lastMqa.audioReceive[0].common.mediaHopByHopLost);\n this.localMQEStats.audio.RX.jitter.push(lastMqa.audioReceive[0].streams[0].common.rtpJitter);\n this.localMQEStats.audio.RX.latency.push(lastMqa.audioReceive[0].common.roundTripTime);\n this.localMQEStats.audio.RX.bitRate.push(\n lastMqa.audioReceive[0].streams[0].common.receivedBitrate\n );\n\n this.localMQEStats.audio.TX.packetsLost.push(lastMqa.audioTransmit[0].common.remoteLossRate);\n this.localMQEStats.audio.TX.jitter.push(lastMqa.audioTransmit[0].common.remoteJitter);\n this.localMQEStats.audio.TX.latency.push(lastMqa.audioTransmit[0].common.roundTripTime);\n this.localMQEStats.audio.TX.bitRate.push(\n lastMqa.audioTransmit[0].streams[0].common.transmittedBitrate\n );\n\n // Video\n\n this.localMQEStats.video.RX.packetsLost.push(lastMqa.videoReceive[0].common.mediaHopByHopLost);\n this.localMQEStats.video.RX.jitter.push(lastMqa.videoReceive[0].streams[0].common.rtpJitter);\n this.localMQEStats.video.RX.latency.push(\n lastMqa.videoReceive[0].streams[0].common.roundTripTime\n );\n this.localMQEStats.video.RX.bitRate.push(\n lastMqa.videoReceive[0].streams[0].common.receivedBitrate\n );\n this.localMQEStats.video.RX.frameRate.push(\n lastMqa.videoReceive[0].streams[0].common.receivedFrameRate\n );\n this.localMQEStats.video.RX.resolutionWidth.push(\n lastMqa.videoReceive[0].streams[0].receivedWidth\n );\n this.localMQEStats.video.RX.resolutionHeight.push(\n lastMqa.videoReceive[0].streams[0].receivedHeight\n );\n this.localMQEStats.video.RX.requestedKeyFrame.push();\n this.localMQEStats.video.RX.receivedKeyFrame.push();\n\n this.localMQEStats.video.TX.packetsLost.push(lastMqa.videoTransmit[0].common.remoteLossRate);\n this.localMQEStats.video.TX.jitter.push(lastMqa.videoTransmit[0].common.remoteJitter);\n this.localMQEStats.video.TX.latency.push(lastMqa.videoTransmit[0].common.roundTripTime);\n this.localMQEStats.video.TX.bitRate.push(\n lastMqa.videoTransmit[0].streams[0].common.transmittedBitrate\n );\n this.localMQEStats.video.TX.frameRate.push(\n lastMqa.videoTransmit[0].streams[0].common.transmittedFrameRate\n );\n this.localMQEStats.video.TX.resolutionWidth.push(\n lastMqa.videoTransmit[0].streams[0].transmittedWidth\n );\n this.localMQEStats.video.TX.resolutionHeight.push(\n lastMqa.videoTransmit[0].streams[0].transmittedHeight\n );\n this.localMQEStats.video.TX.requestedKeyFrame.push(\n lastMqa.videoTransmit[0].streams[0].requestedKeyFrames\n );\n this.localMQEStats.video.TX.receivedKeyFrame.push();\n }\n\n resetStatsResults() {\n this.statsResults.audio.send.meanRemoteJitter = [];\n this.statsResults.video.send.meanRemoteJitter = [];\n this.statsResults.share.send.meanRemoteJitter = [];\n\n this.statsResults.audio.recv.meanRtpJitter = [];\n\n // TODO: currently no values are present\n this.statsResults.video.recv.meanRtpJitter = [];\n this.statsResults.share.recv.meanRtpJitter = [];\n\n // Reset the roundTripTime\n this.statsResults.audio.send.meanRoundTripTime = [];\n this.statsResults.video.send.meanRoundTripTime = [];\n this.statsResults.share.send.meanRoundTripTime = [];\n }\n\n /**\n * sets mediaStatus status for analyzing metrics\n *\n * @public\n * @param {Object} status for the audio and video\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public updateMediaStatus(status: object) {\n this.meetingMediaStatus = status;\n }\n\n /**\n * captures MQA data from peerconnection\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public sendMqaData() {\n const audioReceiver = mqaData.intervals[0].audioReceive[0];\n const audioSender = mqaData.intervals[0].audioTransmit[0];\n const videoReceiver = mqaData.intervals[0].videoReceive[0];\n const videoSender = mqaData.intervals[0].videoTransmit[0];\n const shareSender = mqaData.intervals[0].videoTransmit[1];\n const shareReceiver = mqaData.intervals[0].videoReceive[1];\n\n getAudioSenderMqa({\n audioSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n });\n getAudioReceiverMqa({\n audioReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n });\n\n getVideoReceiverMqa({\n videoReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n });\n getVideoSenderMqa({\n videoSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n });\n\n // Capture mqa for share scenario\n\n getVideoSenderMqa({\n videoSender: shareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n isShareStream: true,\n });\n\n getVideoReceiverMqa({\n videoReceiver: shareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n isShareStream: true,\n });\n mqaData.intervals[0].intervalMetadata.peerReflexiveIP =\n this.statsResults.connectionType.local.ipAddress[0];\n\n // Adding peripheral information\n mqaData.intervals[0].intervalMetadata.peripherals = [];\n mqaData.intervals[0].intervalMetadata.peripherals.push({\n information: _UNKNOWN_,\n name: MEDIA_DEVICES.SPEAKER,\n });\n mqaData.intervals[0].intervalMetadata.peripherals.push({\n information: this.peerConnection?.audioTransceiver?.sender?.track?.label || _UNKNOWN_,\n name: MEDIA_DEVICES.MICROPHONE,\n });\n mqaData.intervals[0].intervalMetadata.peripherals.push({\n information: this.peerConnection?.videoTransceiver?.sender?.track?.label || _UNKNOWN_,\n name: MEDIA_DEVICES.CAMERA,\n });\n\n // @ts-ignore\n mqaData.networkType = this.statsResults.connectionType.local.networkType;\n\n this.mqaSentCount += 1;\n\n mqaData.intervals[0].intervalNumber = this.mqaSentCount;\n\n // DO Deep copy, for some reason it takes the reference all the time rather then old value set\n this.lastMqaDataSent = cloneDeep(this.statsResults);\n\n this.populateResults(mqaData.intervals[0]);\n\n this.resetStatsResults();\n\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'sendMqaData',\n },\n EVENTS.MEDIA_QUALITY,\n {\n data: mqaData.intervals[0],\n // @ts-ignore\n networkType: mqaData.networkType,\n }\n );\n }\n\n /**\n * updated the peerconnection when changed\n *\n * @private\n * @memberof updatePeerconnection\n * @param {PeerConnection} peerConnection\n * @returns {void}\n */\n updatePeerconnection(peerConnection: any) {\n this.peerConnection = peerConnection;\n }\n\n /**\n * Starts the stats analyzer on interval\n *\n * @public\n * @memberof StatsAnalyzer\n * @param {PeerConnection} peerConnection\n * @returns {Promise}\n */\n public startAnalyzer(peerConnection: any) {\n if (!this.statsStarted) {\n this.statsStarted = true;\n this.peerConnection = peerConnection;\n\n return this.getStatsAndParse().then(() => {\n this.statsInterval = setInterval(() => {\n this.getStatsAndParse();\n }, this.config.analyzerInterval);\n // Trigger initial fetch\n this.sendMqaData();\n this.mqaInterval = setInterval(() => {\n this.sendMqaData();\n }, MQA_INTEVAL);\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Cleans up the analyzer when done\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public stopAnalyzer() {\n const sendOneLastMqa = this.mqaInterval && this.statsInterval;\n\n if (this.statsInterval) {\n clearInterval(this.statsInterval);\n this.statsInterval = undefined;\n }\n\n if (this.mqaInterval) {\n clearInterval(this.mqaInterval);\n this.mqaInterval = undefined;\n }\n\n if (sendOneLastMqa) {\n return this.getStatsAndParse().then(() => {\n this.sendMqaData();\n this.peerConnection = null;\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Parse a single result of get stats\n *\n * @private\n * @param {*} getStatsResult\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n private parseGetStatsResult(getStatsResult: any, type: string, isSender: boolean) {\n if (!getStatsResult) {\n return;\n }\n\n switch (getStatsResult.type) {\n case 'outbound-rtp':\n this.processOutboundRTPResult(getStatsResult, type);\n break;\n case 'inbound-rtp':\n this.processInboundRTPResult(getStatsResult, type);\n break;\n case 'remote-inbound-rtp':\n case 'remote-outbound-rtp':\n // @ts-ignore\n this.compareSentAndReceived(getStatsResult, type, isSender);\n break;\n case 'remotecandidate':\n case 'remote-candidate':\n this.parseCandidate(getStatsResult, type, isSender, true);\n break;\n case 'local-candidate':\n this.parseCandidate(getStatsResult, type, isSender, false);\n break;\n case 'media-source':\n // @ts-ignore\n this.parseAudioSource(getStatsResult, type);\n break;\n default:\n break;\n }\n }\n\n /**\n * Filters the get stats results for types\n * @private\n * @param {Array} getStatsResults\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n */\n private filterAndParseGetStatsResults(\n getStatsResults: Array<any>,\n type: string,\n isSender: boolean\n ) {\n const {types} = DEFAULT_GET_STATS_FILTER;\n\n getStatsResults.forEach((result) => {\n if (types.includes(result.type)) {\n this.parseGetStatsResult(result, type, isSender);\n }\n });\n }\n\n /**\n * parse the audio\n * @param {String} result\n * @param {boolean} type\n * @returns {void}\n */\n parseAudioSource(result: any, type: any) {\n if (!result) {\n return;\n }\n\n if (type === STATS.AUDIO_CORRELATE) {\n this.statsResults[type].send.audioLevel = result.audioLevel;\n this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;\n }\n }\n\n /**\n * emits started/stopped events for local/remote media by checking\n * if given values are increasing or not. The previousValue, currentValue\n * params can be any numerical value like number of receive packets or\n * decoded frames, etc.\n *\n * @private\n * @param {string} mediaType\n * @param {number} previousValue - value to compare\n * @param {number} currentValue - value to compare (must be same type of value as previousValue)\n * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n emitStartStopEvents = (\n mediaType: string,\n previousValue: number,\n currentValue: number,\n isLocal: boolean\n ) => {\n if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {\n throw new Error(`Unsupported mediaType: ${mediaType}`);\n }\n\n // eslint-disable-next-line no-param-reassign\n if (previousValue === undefined) previousValue = 0;\n // eslint-disable-next-line no-param-reassign\n if (currentValue === undefined) currentValue = 0;\n\n const lastEmittedEvent = isLocal\n ? this.lastEmittedStartStopEvent[mediaType].local\n : this.lastEmittedStartStopEvent[mediaType].remote;\n\n let newEvent;\n\n if (currentValue - previousValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;\n } else if (currentValue === previousValue && currentValue >= 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;\n }\n\n if (newEvent && lastEmittedEvent !== newEvent) {\n if (isLocal) {\n this.lastEmittedStartStopEvent[mediaType].local = newEvent;\n } else {\n this.lastEmittedStartStopEvent[mediaType].remote = newEvent;\n }\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult',\n },\n newEvent,\n {\n type: mediaType,\n }\n );\n }\n };\n\n /**\n * compares current and previous stats to check if packets are not sent\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n private compareLastStatsResult() {\n if (this.lastStatsResults !== null && this.meetingMediaStatus) {\n // compare audio stats sent\n let mediaType = STATS.AUDIO_CORRELATE;\n let currentStats = null;\n let previousStats = null;\n\n if (this.meetingMediaStatus.expected.sendAudio) {\n currentStats = this.statsResults[mediaType].send;\n previousStats = this.lastStatsResults[mediaType].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`\n );\n } else {\n if (\n currentStats.totalAudioEnergy === previousStats.totalAudioEnergy ||\n currentStats.totalAudioEnergy === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Energy present`\n );\n }\n\n if (currentStats.audioLevel === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} level is 0 for the user`\n );\n }\n }\n\n this.emitStartStopEvents(\n mediaType,\n previousStats.totalPacketsSent,\n currentStats.totalPacketsSent,\n true\n );\n }\n\n if (this.meetingMediaStatus.expected.receiveAudio) {\n // compare audio stats received\n currentStats = this.statsResults[mediaType].recv;\n previousStats = this.lastStatsResults[mediaType].recv;\n\n if (\n currentStats.totalPacketsReceived === previousStats.totalPacketsReceived ||\n currentStats.totalPacketsReceived === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`\n );\n } else if (\n currentStats.totalSamplesReceived === previousStats.totalSamplesReceived ||\n currentStats.totalSamplesReceived === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} samples received`\n );\n }\n\n this.emitStartStopEvents(\n mediaType,\n previousStats.totalPacketsReceived,\n currentStats.totalPacketsReceived,\n false\n );\n }\n\n mediaType = STATS.VIDEO_CORRELATE;\n if (this.meetingMediaStatus.expected.sendVideo) {\n // compare video stats sent\n currentStats = this.statsResults[mediaType].send;\n previousStats = this.lastStatsResults[mediaType].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`\n );\n } else if (this.lastEmittedStartStopEvent[mediaType].local !== EVENTS.LOCAL_MEDIA_STOPPED) {\n if (\n currentStats.framesEncoded === previousStats.framesEncoded ||\n currentStats.framesEncoded === 0\n ) {\n this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_VIDEO_ENCODED;\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames Encoded`\n );\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'compareLastStatsResult',\n },\n EVENTS.NO_VIDEO_ENCODED,\n {\n mediaType,\n }\n );\n }\n\n if (\n this.statsResults.resolutions[mediaType].send.framesSent ===\n this.lastStatsResults.resolutions[mediaType].send.framesSent ||\n this.statsResults.resolutions[mediaType].send.framesSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames sent`\n );\n }\n\n // Video is encoded but frames are not sent\n if (\n currentStats.framesEncoded !== previousStats.framesEncoded &&\n (currentStats.framesSent === previousStats.framesSent || currentStats.framesSent === 0)\n ) {\n this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_FRAMES_SENT;\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames sent even though frames are encoded`\n );\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'compareLastStatsResult',\n },\n EVENTS.NO_FRAMES_SENT,\n {\n mediaType,\n }\n );\n }\n }\n this.emitStartStopEvents(\n mediaType,\n previousStats.framesSent,\n currentStats.framesSent,\n true\n );\n }\n\n if (this.meetingMediaStatus.expected.receiveVideo) {\n // compare video stats reveived\n\n currentStats = this.statsResults[mediaType].recv;\n previousStats = this.lastStatsResults[mediaType].recv;\n\n if (\n currentStats.totalPacketsReceived === previousStats.totalPacketsReceived ||\n currentStats.totalPacketsReceived === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`\n );\n } else {\n if (\n this.statsResults.resolutions[mediaType].recv.framesReceived ===\n this.lastStatsResults.resolutions[mediaType].recv.framesReceived ||\n this.statsResults.resolutions[mediaType].recv.framesReceived === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`\n );\n }\n\n if (\n this.statsResults[mediaType].recv.framesDecoded ===\n this.lastStatsResults[mediaType].recv.framesDecoded ||\n this.statsResults.resolutions[mediaType].send.framesDecoded === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`\n );\n }\n\n if (\n this.statsResults.resolutions[mediaType].recv.framesDropped -\n this.lastStatsResults.resolutions[mediaType].recv.framesDropped >\n 10\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`\n );\n }\n }\n\n this.emitStartStopEvents(\n mediaType,\n previousStats.framesDecoded,\n currentStats.framesDecoded,\n false\n );\n }\n\n mediaType = STATS.SHARE_CORRELATE;\n if (this.meetingMediaStatus.expected.sendShare) {\n // compare share stats sent\n\n currentStats = this.statsResults[mediaType].send;\n previousStats = this.lastStatsResults[mediaType].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`\n );\n } else if (this.lastEmittedStartStopEvent[mediaType].local !== EVENTS.LOCAL_MEDIA_STOPPED) {\n if (\n currentStats.framesEncoded === previousStats.framesEncoded ||\n currentStats.framesEncoded === 0\n ) {\n this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_VIDEO_ENCODED;\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames getting encoded`\n );\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'compareLastStatsResult',\n },\n EVENTS.NO_VIDEO_ENCODED,\n {\n mediaType,\n }\n );\n }\n\n if (\n this.statsResults.resolutions[mediaType].send.framesSent ===\n this.lastStatsResults.resolutions[mediaType].send.framesSent ||\n this.statsResults.resolutions[mediaType].send.framesSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames sent`\n );\n }\n\n // Share video is encoded but frames are not sent\n if (\n currentStats.framesEncoded !== previousStats.framesEncoded &&\n (currentStats.framesSent === previousStats.framesSent || currentStats.framesSent === 0)\n ) {\n this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_FRAMES_SENT;\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames sent even though frames are being encoded`\n );\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'compareLastStatsResult',\n },\n EVENTS.NO_FRAMES_SENT,\n {\n mediaType,\n }\n );\n }\n }\n\n // TODO:need to check receive share value\n // compare share stats reveived\n currentStats = this.statsResults[mediaType].recv;\n previousStats = this.lastStatsResults[mediaType].recv;\n\n if (\n currentStats.totalPacketsReceived === previousStats.totalPacketsReceived ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`\n );\n } else {\n if (\n this.statsResults.resolutions[mediaType].recv.framesReceived ===\n this.lastStatsResults.resolutions[mediaType].recv.framesReceived ||\n this.statsResults.resolutions[mediaType].recv.framesReceived === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`\n );\n }\n\n if (\n this.statsResults[mediaType].recv.framesDecoded ===\n this.lastStatsResults[mediaType].recv.framesDecoded ||\n this.statsResults.resolutions[mediaType].send.framesDecoded === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`\n );\n }\n\n if (\n this.statsResults.resolutions[mediaType].recv.framesDropped -\n this.lastStatsResults.resolutions[mediaType].recv.framesDropped >\n 10\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`\n );\n }\n }\n\n // we are not calling emitStartStopEvents() for sending or receiving share because sharing is often started and stopped\n // in meetings and this.meetingMediaStatus.expected values can be out of sync with the actual packet flow\n // so we would send \"sharing stopped\" events incorrectly\n }\n }\n }\n\n /**\n * Does a `getStats` on all the transceivers and parses the results\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {Promise}\n */\n private getStatsAndParse() {\n if (!this.peerConnection) {\n return Promise.resolve();\n }\n\n if (this.peerConnection && this.peerConnection.connectionState === CONNECTION_STATE.FAILED) {\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> PeerConnection is in failed state'\n );\n\n return Promise.resolve();\n }\n\n LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');\n\n return Promise.all([\n this.peerConnection.videoTransceiver.sender.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.VIDEO_CORRELATE, true);\n }),\n\n this.peerConnection.videoTransceiver.receiver.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.VIDEO_CORRELATE, false);\n }),\n\n this.peerConnection.audioTransceiver.sender.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.AUDIO_CORRELATE, true);\n }),\n\n this.peerConnection.audioTransceiver.receiver.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.AUDIO_CORRELATE, false);\n }),\n\n // TODO: add checks for screen share\n this.peerConnection.shareTransceiver.sender.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.SHARE_CORRELATE, true);\n }),\n\n this.peerConnection.shareTransceiver.receiver.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.SHARE_CORRELATE, false);\n }),\n ]).then(() => {\n this.statsResults[STATS.AUDIO_CORRELATE].direction =\n this.peerConnection.audioTransceiver.currentDirection;\n this.statsResults[STATS.VIDEO_CORRELATE].direction =\n this.peerConnection.videoTransceiver.currentDirection;\n this.statsResults[STATS.SHARE_CORRELATE].direction =\n this.peerConnection.shareTransceiver.currentDirection;\n\n // Process Stats results every 5 seconds\n this.compareLastStatsResult();\n\n // Save the last results to compare with the current\n this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));\n\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats'\n );\n });\n }\n\n /**\n * Processes OutboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n */\n private processOutboundRTPResult(result: any, type: any) {\n const mediaType = type || STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n this.processTrackResult(result, type, sendrecvType);\n if (result.bytesSent) {\n let kilobytes = 0;\n\n if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {\n this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;\n }\n if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {\n this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n }\n if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {\n this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded =\n result.keyFramesEncoded;\n }\n\n const bytes =\n result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;\n\n this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;\n\n kilobytes = bytes / 1024;\n\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n this.statsResults[mediaType].bytesSent = kilobytes;\n this.statsResults[mediaType][sendrecvType].framesEncoded =\n result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;\n this.statsResults[mediaType][sendrecvType].keyFramesEncoded =\n result.keyFramesEncoded -\n this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;\n this.statsResults.internal[mediaType].outboundRtpId = result.id;\n\n if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {\n this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;\n }\n\n this.statsResults[mediaType][sendrecvType].packetsSent =\n result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;\n this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;\n\n // Data saved to send MQA metrics\n\n this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;\n this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].encoderImplementation =\n result.encoderImplementation;\n this.statsResults[mediaType][sendrecvType].qualityLimitationReason =\n result.qualityLimitationReason;\n this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges =\n result.qualityLimitationResolutionChanges;\n this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent =\n result.retransmittedPacketsSent;\n this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;\n this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;\n this.statsResults[mediaType][sendrecvType].retransmittedBytesSent =\n result.retransmittedBytesSent;\n }\n }\n\n /**\n * Processes InboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n */\n private processInboundRTPResult(result: any, type: any) {\n const mediaType = type || STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n this.processTrackResult(result, type, sendrecvType);\n if (result.bytesReceived) {\n let kilobytes = 0;\n\n if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {\n this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived =\n result.bytesReceived;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {\n this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {\n this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {\n this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived =\n result.packetsReceived;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {\n this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp =\n result.lastPacketReceivedTimestamp;\n }\n\n const bytes =\n result.bytesReceived -\n this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;\n\n this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;\n\n kilobytes = bytes / 1024;\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);\n\n this.statsResults[mediaType][sendrecvType].pliCount =\n result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;\n this.statsResults[mediaType][sendrecvType].currentPacketsLost =\n result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;\n if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {\n this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].packetsReceived =\n result.packetsReceived -\n this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;\n this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived =\n result.packetsReceived;\n\n if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> No packets received for ${mediaType} `,\n this.statsResults[mediaType][sendrecvType].packetsReceived\n );\n }\n\n // Check the over all packet Lost ratio\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =\n this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0\n ? this.statsResults[mediaType][sendrecvType].currentPacketsLost /\n (this.statsResults[mediaType][sendrecvType].packetsReceived +\n this.statsResults[mediaType][sendrecvType].currentPacketsLost)\n : 0;\n if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {\n LoggerProxy.logger.info(\n 'StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ',\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio\n );\n }\n\n // TODO: check the packet loss value is negative values here\n\n if (result.packetsLost) {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost =\n result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;\n } else {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp =\n result.lastPacketReceivedTimestamp;\n\n // From Thin\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;\n\n this.statsResults[mediaType][sendrecvType].decoderImplementation =\n result.decoderImplementation;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;\n this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;\n this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;\n\n this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);\n\n // Audio stats\n\n this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;\n this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;\n this.statsResults[mediaType][sendrecvType].totalSamplesReceived =\n result.totalSamplesReceived || 0;\n this.statsResults[mediaType][sendrecvType].totalSamplesDecoded =\n result.totalSamplesDecoded || 0;\n this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;\n }\n }\n\n /**\n * Processes remote and local candidate result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @param {boolean} isSender\n * @param {boolean} isRemote\n *\n * @returns {void}\n */\n parseCandidate = (result: any, type: any, isSender: boolean, isRemote: boolean) => {\n if (!result || !result.id) {\n return;\n }\n const RemoteCandidateType = {};\n const RemoteTransport = {};\n const RemoteIpAddress = {};\n const RemoteNetworkType = {};\n\n if (!result.id) return;\n\n const sendRecvType = isSender ? STATS.SEND_DIRECTION : STATS.RECEIVE_DIRECTION;\n const ipType = isRemote ? STATS.REMOTE : STATS.LOCAL;\n\n if (!RemoteCandidateType[result.id]) {\n RemoteCandidateType[result.id] = [];\n }\n\n if (!RemoteTransport[result.id]) {\n RemoteTransport[result.id] = [];\n }\n\n if (!RemoteIpAddress[result.id]) {\n RemoteIpAddress[result.id] = [];\n }\n if (!RemoteNetworkType[result.id]) {\n RemoteNetworkType[result.id] = [];\n }\n\n if (\n result.candidateType &&\n RemoteCandidateType[result.id].indexOf(result.candidateType) === -1\n ) {\n RemoteCandidateType[result.id].push(result.candidateType);\n }\n\n if (result.protocol && RemoteTransport[result.id].indexOf(result.protocol) === -1) {\n RemoteTransport[result.id].push(result.protocol.toUpperCase());\n }\n\n if (\n result.ip &&\n RemoteIpAddress[result.id].indexOf(`${result.ip}:${result.portNumber}`) === -1\n ) {\n RemoteIpAddress[result.id].push(`${result.ip}`); // TODO: Add ports\n }\n\n if (result.networkType && RemoteNetworkType[result.id].indexOf(result.networkType) === -1) {\n RemoteNetworkType[result.id].push(result.networkType);\n }\n\n this.statsResults.internal.candidates[result.id] = {\n candidateType: RemoteCandidateType[result.id],\n ipAddress: RemoteIpAddress[result.id],\n portNumber: result.port,\n networkType: RemoteNetworkType[result.id],\n priority: result.priority,\n transport: RemoteTransport[result.id],\n timestamp: result.time,\n id: result.id,\n type: result.type,\n };\n\n this.statsResults.connectionType[ipType].candidateType = RemoteCandidateType[result.id];\n this.statsResults.connectionType[ipType].ipAddress = RemoteIpAddress[result.id];\n\n this.statsResults.connectionType[ipType].networkType =\n RemoteNetworkType[result.id][0] === NETWORK_TYPE.VPN\n ? NETWORK_TYPE.UNKNOWN\n : RemoteNetworkType[result.id][0];\n this.statsResults.connectionType[ipType].transport = RemoteTransport[result.id];\n\n this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;\n };\n\n /**\n * Process Track results\n *\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @param {*} sendrecvType\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n private processTrackResult(result: any, mediaType: any, sendrecvType: any) {\n if (!result || mediaType === STATS.AUDIO_CORRELATE) {\n return;\n }\n if (result.type !== 'inbound-rtp' && result.type !== 'outbound-rtp') {\n return;\n }\n if (result.frameWidth && result.frameHeight) {\n this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;\n }\n\n if (sendrecvType === STATS.RECEIVE_DIRECTION) {\n this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;\n this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;\n } else if (sendrecvType === STATS.SEND_DIRECTION) {\n this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;\n }\n\n if (result.trackIdentifier && mediaType !== STATS.AUDIO_CORRELATE) {\n this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier =\n result.trackIdentifier;\n\n const jitterBufferDelay = result && result.jitterBufferDelay;\n const jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;\n\n this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay =\n jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;\n\n // Used to calculate the jitter\n this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay =\n result.jitterBufferDelay;\n this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount =\n result.jitterBufferEmittedCount;\n }\n }\n\n /**\n *\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n private compareSentAndReceived(result: any, type: any) {\n if (!type) {\n return;\n }\n\n const mediaType = type;\n\n if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {\n this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n }\n\n const currentPacketLoss =\n result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;\n\n this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n\n this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);\n this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);\n\n this.statsResults[mediaType].send.timestamp = result.timestamp;\n this.statsResults[mediaType].send.ssrc = result.ssrc;\n this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;\n\n // Total packloss ratio on this video section of the call\n this.statsResults[mediaType].send.overAllPacketLossRatio =\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0\n ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver /\n this.statsResults[mediaType].send.totalPacketsSent\n : 0;\n this.statsResults[mediaType].send.currentPacketLossRatio =\n this.statsResults[mediaType].send.packetsLostOnReceiver > 0\n ? (this.statsResults[mediaType].send.packetsLostOnReceiver * 100) /\n (this.statsResults[mediaType].send.packetsSent +\n this.statsResults[mediaType].send.packetsLostOnReceiver)\n : 0;\n\n if (\n this.statsResults[mediaType].send.maxPacketLossRatio <\n this.statsResults[mediaType].send.currentPacketLossRatio\n ) {\n this.statsResults[mediaType].send.maxPacketLossRatio =\n this.statsResults[mediaType].send.currentPacketLossRatio;\n }\n\n if (result.type === 'remote-inbound-rtp') {\n this.networkQualityMonitor.determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults: result,\n statsAnalyzerCurrentStats: this.statsResults,\n });\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAIA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AASA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,YAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAEA,IAAAI,OAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,QAAA,GAAAL,OAAA;AAKmB,SAAAM,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA;AAEZ,IAAMC,MAAM,GAAG;EACpBC,aAAa,EAAE,eAAe;EAC9BC,cAAc,EAAE,gBAAgB;EAChCC,gBAAgB,EAAE,kBAAkB;EACpCC,mBAAmB,EAAE,qBAAqB;EAC1CC,mBAAmB,EAAE,qBAAqB;EAC1CC,oBAAoB,EAAE,sBAAsB;EAC5CC,oBAAoB,EAAE;AACxB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AANAC,OAAA,CAAAR,MAAA,GAAAA,MAAA;AAAA,IAOaS,aAAa,0BAAAC,YAAA;EAAA,IAAAC,UAAA,CAAA3B,OAAA,EAAAyB,aAAA,EAAAC,YAAA;EAAA,IAAAE,MAAA,GAAAnC,YAAA,CAAAgC,aAAA;EAgBxB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,SAAAA,cACEI,MAAW,EAGX;IAAA,IAAAC,KAAA;IAAA,IAFAC,qBAA6B,GAAA1B,SAAA,CAAA2B,MAAA,QAAA3B,SAAA,QAAA4B,SAAA,GAAA5B,SAAA,MAAG,CAAC,CAAC;IAAA,IAClC6B,YAAoB,GAAA7B,SAAA,CAAA2B,MAAA,QAAA3B,SAAA,QAAA4B,SAAA,GAAA5B,SAAA,MAAG8B,eAAY;IAAA,IAAAC,gBAAA,CAAApC,OAAA,QAAAyB,aAAA;IAEnCK,KAAA,GAAAF,MAAA,CAAAd,IAAA;IAAQ,IAAAuB,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IAAA,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA;IA6ZV;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IAbE,IAAAO,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA,0BAcsB,UACpBS,SAAiB,EACjBC,aAAqB,EACrBC,YAAoB,EACpBC,OAAgB,EACb;MACH,IAAIH,SAAS,KAAK,OAAO,IAAIA,SAAS,KAAK,OAAO,IAAIA,SAAS,KAAK,OAAO,EAAE;QAC3E,MAAM,IAAII,KAAK,2BAAAC,MAAA,CAA2BL,SAAS,EAAG;MACxD;;MAEA;MACA,IAAIC,aAAa,KAAKP,SAAS,EAAEO,aAAa,GAAG,CAAC;MAClD;MACA,IAAIC,YAAY,KAAKR,SAAS,EAAEQ,YAAY,GAAG,CAAC;MAEhD,IAAMI,gBAAgB,GAAGH,OAAO,GAC5BZ,KAAA,CAAKgB,yBAAyB,CAACP,SAAS,CAAC,CAACQ,KAAK,GAC/CjB,KAAA,CAAKgB,yBAAyB,CAACP,SAAS,CAAC,CAACS,MAAM;MAEpD,IAAIC,QAAQ;MAEZ,IAAIR,YAAY,GAAGD,aAAa,GAAG,CAAC,EAAE;QACpCS,QAAQ,GAAGP,OAAO,GAAG1B,MAAM,CAACI,mBAAmB,GAAGJ,MAAM,CAACM,oBAAoB;MAC/E,CAAC,MAAM,IAAImB,YAAY,KAAKD,aAAa,IAAIC,YAAY,IAAI,CAAC,EAAE;QAC9DQ,QAAQ,GAAGP,OAAO,GAAG1B,MAAM,CAACK,mBAAmB,GAAGL,MAAM,CAACO,oBAAoB;MAC/E;MAEA,IAAI0B,QAAQ,IAAIJ,gBAAgB,KAAKI,QAAQ,EAAE;QAC7C,IAAIP,OAAO,EAAE;UACXZ,KAAA,CAAKgB,yBAAyB,CAACP,SAAS,CAAC,CAACQ,KAAK,GAAGE,QAAQ;QAC5D,CAAC,MAAM;UACLnB,KAAA,CAAKgB,yBAAyB,CAACP,SAAS,CAAC,CAACS,MAAM,GAAGC,QAAQ;QAC7D;QACAnB,KAAA,CAAKoB,IAAI,CACP;UACEC,IAAI,EAAE,qBAAqB;UAC3BC,QAAQ,EAAE;QACZ,CAAC,EACDH,QAAQ,EACR;UACEI,IAAI,EAAEd;QACR,CAAC,CACF;MACH;IACF,CAAC;IA8kBD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IATE,IAAAF,gBAAA,CAAArC,OAAA,MAAAsC,uBAAA,CAAAtC,OAAA,EAAA8B,KAAA,qBAUiB,UAAC7B,MAAW,EAAEoD,IAAS,EAAEC,QAAiB,EAAEC,QAAiB,EAAK;MACjF,IAAI,CAACtD,MAAM,IAAI,CAACA,MAAM,CAACuD,EAAE,EAAE;QACzB;MACF;MACA,IAAMC,mBAAmB,GAAG,CAAC,CAAC;MAC9B,IAAMC,eAAe,GAAG,CAAC,CAAC;MAC1B,IAAMC,eAAe,GAAG,CAAC,CAAC;MAC1B,IAAMC,iBAAiB,GAAG,CAAC,CAAC;MAE5B,IAAI,CAAC3D,MAAM,CAACuD,EAAE,EAAE;MAEhB,IAAMK,YAAY,GAAGP,QAAQ,GAAGQ,gBAAK,CAACC,cAAc,GAAGD,gBAAK,CAACE,iBAAiB;MAC9E,IAAMC,MAAM,GAAGV,QAAQ,GAAGO,gBAAK,CAACI,MAAM,GAAGJ,gBAAK,CAACK,KAAK;MAEpD,IAAI,CAACV,mBAAmB,CAACxD,MAAM,CAACuD,EAAE,CAAC,EAAE;QACnCC,mBAAmB,CAACxD,MAAM,CAACuD,EAAE,CAAC,GAAG,EAAE;MACrC;MAEA,IAAI,CAACE,eAAe,CAACzD,MAAM,CAACuD,EAAE,CAAC,EAAE;QAC/BE,eAAe,CAACzD,MAAM,CAACuD,EAAE,CAAC,GAAG,EAAE;MACjC;MAEA,IAAI,CAACG,eAAe,CAAC1D,MAAM,CAACuD,EAAE,CAAC,EAAE;QAC/BG,eAAe,CAAC1D,MAAM,CAACuD,EAAE,CAAC,GAAG,EAAE;MACjC;MACA,IAAI,CAACI,iBAAiB,CAAC3D,MAAM,CAACuD,EAAE,CAAC,EAAE;QACjCI,iBAAiB,CAAC3D,MAAM,CAACuD,EAAE,CAAC,GAAG,EAAE;MACnC;MAEA,IACEvD,MAAM,CAACmE,aAAa,IACpBX,mBAAmB,CAACxD,MAAM,CAACuD,EAAE,CAAC,CAACa,OAAO,CAACpE,MAAM,CAACmE,aAAa,CAAC,KAAK,CAAC,CAAC,EACnE;QACAX,mBAAmB,CAACxD,MAAM,CAACuD,EAAE,CAAC,CAACc,IAAI,CAACrE,MAAM,CAACmE,aAAa,CAAC;MAC3D;MAEA,IAAInE,MAAM,CAACsE,QAAQ,IAAIb,eAAe,CAACzD,MAAM,CAACuD,EAAE,CAAC,CAACa,OAAO,CAACpE,MAAM,CAACsE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;QACjFb,eAAe,CAACzD,MAAM,CAACuD,EAAE,CAAC,CAACc,IAAI,CAACrE,MAAM,CAACsE,QAAQ,CAACC,WAAW,EAAE,CAAC;MAChE;MAEA,IACEvE,MAAM,CAACwE,EAAE,IACTd,eAAe,CAAC1D,MAAM,CAACuD,EAAE,CAAC,CAACa,OAAO,IAAAzB,MAAA,CAAI3C,MAAM,CAACwE,EAAE,OAAA7B,MAAA,CAAI3C,MAAM,CAACyE,UAAU,EAAG,KAAK,CAAC,CAAC,EAC9E;QACAf,eAAe,CAAC1D,MAAM,CAACuD,EAAE,CAAC,CAACc,IAAI,IAAA1B,MAAA,CAAI3C,MAAM,CAACwE,EAAE,EAAG,CAAC,CAAC;MACnD;;MAEA,IAAIxE,MAAM,CAAC0E,WAAW,IAAIf,iBAAiB,CAAC3D,MAAM,CAACuD,EAAE,CAAC,CAACa,OAAO,CAACpE,MAAM,CAAC0E,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;QACzFf,iBAAiB,CAAC3D,MAAM,CAACuD,EAAE,CAAC,CAACc,IAAI,CAACrE,MAAM,CAAC0E,WAAW,CAAC;MACvD;MAEA7C,KAAA,CAAKI,YAAY,CAAC0C,QAAQ,CAACC,UAAU,CAAC5E,MAAM,CAACuD,EAAE,CAAC,GAAG;QACjDY,aAAa,EAAEX,mBAAmB,CAACxD,MAAM,CAACuD,EAAE,CAAC;QAC7CsB,SAAS,EAAEnB,eAAe,CAAC1D,MAAM,CAACuD,EAAE,CAAC;QACrCkB,UAAU,EAAEzE,MAAM,CAAC8E,IAAI;QACvBJ,WAAW,EAAEf,iBAAiB,CAAC3D,MAAM,CAACuD,EAAE,CAAC;QACzCwB,QAAQ,EAAE/E,MAAM,CAAC+E,QAAQ;QACzBC,SAAS,EAAEvB,eAAe,CAACzD,MAAM,CAACuD,EAAE,CAAC;QACrC0B,SAAS,EAAEjF,MAAM,CAACkF,IAAI;QACtB3B,EAAE,EAAEvD,MAAM,CAACuD,EAAE;QACbH,IAAI,EAAEpD,MAAM,CAACoD;MACf,CAAC;MAEDvB,KAAA,CAAKI,YAAY,CAACkD,cAAc,CAACnB,MAAM,CAAC,CAACG,aAAa,GAAGX,mBAAmB,CAACxD,MAAM,CAACuD,EAAE,CAAC;MACvF1B,KAAA,CAAKI,YAAY,CAACkD,cAAc,CAACnB,MAAM,CAAC,CAACa,SAAS,GAAGnB,eAAe,CAAC1D,MAAM,CAACuD,EAAE,CAAC;MAE/E1B,KAAA,CAAKI,YAAY,CAACkD,cAAc,CAACnB,MAAM,CAAC,CAACU,WAAW,GAClDf,iBAAiB,CAAC3D,MAAM,CAACuD,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK6B,uBAAY,CAACC,GAAG,GAChDD,uBAAY,CAACE,OAAO,GACpB3B,iBAAiB,CAAC3D,MAAM,CAACuD,EAAE,CAAC,CAAC,CAAC,CAAC;MACrC1B,KAAA,CAAKI,YAAY,CAACkD,cAAc,CAACnB,MAAM,CAAC,CAACgB,SAAS,GAAGvB,eAAe,CAACzD,MAAM,CAACuD,EAAE,CAAC;MAE/E1B,KAAA,CAAKI,YAAY,CAACmB,IAAI,CAAC,CAACQ,YAAY,CAAC,CAAC2B,kBAAkB,GAAGvF,MAAM,CAACuF,kBAAkB;IACtF,CAAC;IAvnCC1D,KAAA,CAAK2D,YAAY,GAAG,KAAK;IACzB3D,KAAA,CAAKI,YAAY,GAAGA,YAAY;IAChCJ,KAAA,CAAK4D,gBAAgB,GAAG,IAAI;IAC5B5D,KAAA,CAAKD,MAAM,GAAGA,MAAM;IACpBC,KAAA,CAAKC,qBAAqB,GAAGA,qBAAqB;IAClDD,KAAA,CAAK6D,aAAa,GAAG9D,MAAM,CAAC8D,aAAa;IACzC7D,KAAA,CAAK8D,YAAY,GAAG,CAAC,CAAC;IACtB9D,KAAA,CAAK+D,eAAe,GAAG;MACrBC,WAAW,EAAE;QACXC,KAAK,EAAE;UAACC,IAAI,EAAE,CAAC,CAAC;UAAEC,IAAI,EAAE,CAAC;QAAC,CAAC;QAC3BC,KAAK,EAAE;UAACF,IAAI,EAAE,CAAC,CAAC;UAAEC,IAAI,EAAE,CAAC;QAAC,CAAC;QAC3BE,KAAK,EAAE;UAACH,IAAI,EAAE,CAAC,CAAC;UAAEC,IAAI,EAAE,CAAC;QAAC;MAC5B,CAAC;MACDF,KAAK,EAAE;QAACC,IAAI,EAAE,CAAC,CAAC;QAAEC,IAAI,EAAE,CAAC;MAAC,CAAC;MAC3BC,KAAK,EAAE;QAACF,IAAI,EAAE,CAAC,CAAC;QAAEC,IAAI,EAAE,CAAC;MAAC,CAAC;MAC3BE,KAAK,EAAE;QAACH,IAAI,EAAE,CAAC,CAAC;QAAEC,IAAI,EAAE,CAAC;MAAC;IAC5B,CAAC;IACDnE,KAAA,CAAKsE,aAAa,GAAG;MACnBF,KAAK,EAAE;QACLG,EAAE,EAAE;UACFC,WAAW,EAAE,EAAE;UACfC,MAAM,EAAE,EAAE;UACVC,OAAO,EAAE,EAAE;UACXC,OAAO,EAAE;QACX,CAAC;QACDC,EAAE,EAAE;UACFJ,WAAW,EAAE,EAAE;UACfC,MAAM,EAAE,EAAE;UACVC,OAAO,EAAE,EAAE;UACXC,OAAO,EAAE;QACX;MACF,CAAC;MACDV,KAAK,EAAE;QACLM,EAAE,EAAE;UACFC,WAAW,EAAE,EAAE;UACfC,MAAM,EAAE,EAAE;UACVC,OAAO,EAAE,EAAE;UACXC,OAAO,EAAE,EAAE;UACXE,SAAS,EAAE,EAAE;UACbC,eAAe,EAAE,EAAE;UACnBC,gBAAgB,EAAE,EAAE;UACpBC,iBAAiB,EAAE,EAAE;UACrBC,gBAAgB,EAAE;QACpB,CAAC;QACDL,EAAE,EAAE;UACFJ,WAAW,EAAE,EAAE;UACfC,MAAM,EAAE,EAAE;UACVC,OAAO,EAAE,EAAE;UACXC,OAAO,EAAE,EAAE;UACXE,SAAS,EAAE,EAAE;UACbC,eAAe,EAAE,EAAE;UACnBC,gBAAgB,EAAE,EAAE;UACpBC,iBAAiB,EAAE,EAAE;UACrBC,gBAAgB,EAAE;QACpB;MACF;IACF,CAAC;IACDjF,KAAA,CAAKgB,yBAAyB,GAAG;MAC/BoD,KAAK,EAAE;QACLnD,KAAK,EAAEd,SAAS;QAChBe,MAAM,EAAEf;MACV,CAAC;MACD8D,KAAK,EAAE;QACLhD,KAAK,EAAEd,SAAS;QAChBe,MAAM,EAAEf;MACV,CAAC;MACDkE,KAAK,EAAE;QACLpD,KAAK,EAAEd,SAAS;QAChBe,MAAM,EAAEf;MACV;IACF,CAAC;IAAC,OAAAH,KAAA;EACJ;EAAC,IAAAkF,aAAA,CAAAhH,OAAA,EAAAyB,aAAA;IAAAwF,GAAA;IAAAC,KAAA,EAED,SAAAC,gBAAgBC,OAAO,EAAE;MACvB;;MAEA,IAAI,CAAChB,aAAa,CAACF,KAAK,CAACG,EAAE,CAACC,WAAW,CAAChC,IAAI,CAAC8C,OAAO,CAACC,YAAY,CAAC,CAAC,CAAC,CAACC,MAAM,CAACC,iBAAiB,CAAC;MAC9F,IAAI,CAACnB,aAAa,CAACF,KAAK,CAACG,EAAE,CAACE,MAAM,CAACjC,IAAI,CAAC8C,OAAO,CAACC,YAAY,CAAC,CAAC,CAAC,CAACG,OAAO,CAAC,CAAC,CAAC,CAACF,MAAM,CAACG,SAAS,CAAC;MAC5F,IAAI,CAACrB,aAAa,CAACF,KAAK,CAACG,EAAE,CAACG,OAAO,CAAClC,IAAI,CAAC8C,OAAO,CAACC,YAAY,CAAC,CAAC,CAAC,CAACC,MAAM,CAACI,aAAa,CAAC;MACtF,IAAI,CAACtB,aAAa,CAACF,KAAK,CAACG,EAAE,CAACI,OAAO,CAACnC,IAAI,CACtC8C,OAAO,CAACC,YAAY,CAAC,CAAC,CAAC,CAACG,OAAO,CAAC,CAAC,CAAC,CAACF,MAAM,CAACK,eAAe,CAC1D;MAED,IAAI,CAACvB,aAAa,CAACF,KAAK,CAACQ,EAAE,CAACJ,WAAW,CAAChC,IAAI,CAAC8C,OAAO,CAACQ,aAAa,CAAC,CAAC,CAAC,CAACN,MAAM,CAACO,cAAc,CAAC;MAC5F,IAAI,CAACzB,aAAa,CAACF,KAAK,CAACQ,EAAE,CAACH,MAAM,CAACjC,IAAI,CAAC8C,OAAO,CAACQ,aAAa,CAAC,CAAC,CAAC,CAACN,MAAM,CAACQ,YAAY,CAAC;MACrF,IAAI,CAAC1B,aAAa,CAACF,KAAK,CAACQ,EAAE,CAACF,OAAO,CAAClC,IAAI,CAAC8C,OAAO,CAACQ,aAAa,CAAC,CAAC,CAAC,CAACN,MAAM,CAACI,aAAa,CAAC;MACvF,IAAI,CAACtB,aAAa,CAACF,KAAK,CAACQ,EAAE,CAACD,OAAO,CAACnC,IAAI,CACtC8C,OAAO,CAACQ,aAAa,CAAC,CAAC,CAAC,CAACJ,OAAO,CAAC,CAAC,CAAC,CAACF,MAAM,CAACS,kBAAkB,CAC9D;;MAED;;MAEA,IAAI,CAAC3B,aAAa,CAACL,KAAK,CAACM,EAAE,CAACC,WAAW,CAAChC,IAAI,CAAC8C,OAAO,CAACY,YAAY,CAAC,CAAC,CAAC,CAACV,MAAM,CAACC,iBAAiB,CAAC;MAC9F,IAAI,CAACnB,aAAa,CAACL,KAAK,CAACM,EAAE,CAACE,MAAM,CAACjC,IAAI,CAAC8C,OAAO,CAACY,YAAY,CAAC,CAAC,CAAC,CAACR,OAAO,CAAC,CAAC,CAAC,CAACF,MAAM,CAACG,SAAS,CAAC;MAC5F,IAAI,CAACrB,aAAa,CAACL,KAAK,CAACM,EAAE,CAACG,OAAO,CAAClC,IAAI,CACtC8C,OAAO,CAACY,YAAY,CAAC,CAAC,CAAC,CAACR,OAAO,CAAC,CAAC,CAAC,CAACF,MAAM,CAACI,aAAa,CACxD;MACD,IAAI,CAACtB,aAAa,CAACL,KAAK,CAACM,EAAE,CAACI,OAAO,CAACnC,IAAI,CACtC8C,OAAO,CAACY,YAAY,CAAC,CAAC,CAAC,CAACR,OAAO,CAAC,CAAC,CAAC,CAACF,MAAM,CAACK,eAAe,CAC1D;MACD,IAAI,CAACvB,aAAa,CAACL,KAAK,CAACM,EAAE,CAACM,SAAS,CAACrC,IAAI,CACxC8C,OAAO,CAACY,YAAY,CAAC,CAAC,CAAC,CAACR,OAAO,CAAC,CAAC,CAAC,CAACF,MAAM,CAACW,iBAAiB,CAC5D;MACD,IAAI,CAAC7B,aAAa,CAACL,KAAK,CAACM,EAAE,CAACO,eAAe,CAACtC,IAAI,CAC9C8C,OAAO,CAACY,YAAY,CAAC,CAAC,CAAC,CAACR,OAAO,CAAC,CAAC,CAAC,CAACU,aAAa,CACjD;MACD,IAAI,CAAC9B,aAAa,CAACL,KAAK,CAACM,EAAE,CAACQ,gBAAgB,CAACvC,IAAI,CAC/C8C,OAAO,CAACY,YAAY,CAAC,CAAC,CAAC,CAACR,OAAO,CAAC,CAAC,CAAC,CAACW,cAAc,CAClD;MACD,IAAI,CAAC/B,aAAa,CAACL,KAAK,CAACM,EAAE,CAACS,iBAAiB,CAACxC,IAAI,EAAE;MACpD,IAAI,CAAC8B,aAAa,CAACL,KAAK,CAACM,EAAE,CAACU,gBAAgB,CAACzC,IAAI,EAAE;MAEnD,IAAI,CAAC8B,aAAa,CAACL,KAAK,CAACW,EAAE,CAACJ,WAAW,CAAChC,IAAI,CAAC8C,OAAO,CAACgB,aAAa,CAAC,CAAC,CAAC,CAACd,MAAM,CAACO,cAAc,CAAC;MAC5F,IAAI,CAACzB,aAAa,CAACL,KAAK,CAACW,EAAE,CAACH,MAAM,CAACjC,IAAI,CAAC8C,OAAO,CAACgB,aAAa,CAAC,CAAC,CAAC,CAACd,MAAM,CAACQ,YAAY,CAAC;MACrF,IAAI,CAAC1B,aAAa,CAACL,KAAK,CAACW,EAAE,CAACF,OAAO,CAAClC,IAAI,CAAC8C,OAAO,CAACgB,aAAa,CAAC,CAAC,CAAC,CAACd,MAAM,CAACI,aAAa,CAAC;MACvF,IAAI,CAACtB,aAAa,CAACL,KAAK,CAACW,EAAE,CAACD,OAAO,CAACnC,IAAI,CACtC8C,OAAO,CAACgB,aAAa,CAAC,CAAC,CAAC,CAACZ,OAAO,CAAC,CAAC,CAAC,CAACF,MAAM,CAACS,kBAAkB,CAC9D;MACD,IAAI,CAAC3B,aAAa,CAACL,KAAK,CAACW,EAAE,CAACC,SAAS,CAACrC,IAAI,CACxC8C,OAAO,CAACgB,aAAa,CAAC,CAAC,CAAC,CAACZ,OAAO,CAAC,CAAC,CAAC,CAACF,MAAM,CAACe,oBAAoB,CAChE;MACD,IAAI,CAACjC,aAAa,CAACL,KAAK,CAACW,EAAE,CAACE,eAAe,CAACtC,IAAI,CAC9C8C,OAAO,CAACgB,aAAa,CAAC,CAAC,CAAC,CAACZ,OAAO,CAAC,CAAC,CAAC,CAACc,gBAAgB,CACrD;MACD,IAAI,CAAClC,aAAa,CAACL,KAAK,CAACW,EAAE,CAACG,gBAAgB,CAACvC,IAAI,CAC/C8C,OAAO,CAACgB,aAAa,CAAC,CAAC,CAAC,CAACZ,OAAO,CAAC,CAAC,CAAC,CAACe,iBAAiB,CACtD;MACD,IAAI,CAACnC,aAAa,CAACL,KAAK,CAACW,EAAE,CAACI,iBAAiB,CAACxC,IAAI,CAChD8C,OAAO,CAACgB,aAAa,CAAC,CAAC,CAAC,CAACZ,OAAO,CAAC,CAAC,CAAC,CAACgB,kBAAkB,CACvD;MACD,IAAI,CAACpC,aAAa,CAACL,KAAK,CAACW,EAAE,CAACK,gBAAgB,CAACzC,IAAI,EAAE;IACrD;EAAC;IAAA2C,GAAA;IAAAC,KAAA,EAED,SAAAuB,kBAAA,EAAoB;MAClB,IAAI,CAACvG,YAAY,CAACgE,KAAK,CAACF,IAAI,CAAC0C,gBAAgB,GAAG,EAAE;MAClD,IAAI,CAACxG,YAAY,CAAC6D,KAAK,CAACC,IAAI,CAAC0C,gBAAgB,GAAG,EAAE;MAClD,IAAI,CAACxG,YAAY,CAACiE,KAAK,CAACH,IAAI,CAAC0C,gBAAgB,GAAG,EAAE;MAElD,IAAI,CAACxG,YAAY,CAACgE,KAAK,CAACD,IAAI,CAAC0C,aAAa,GAAG,EAAE;;MAE/C;MACA,IAAI,CAACzG,YAAY,CAAC6D,KAAK,CAACE,IAAI,CAAC0C,aAAa,GAAG,EAAE;MAC/C,IAAI,CAACzG,YAAY,CAACiE,KAAK,CAACF,IAAI,CAAC0C,aAAa,GAAG,EAAE;;MAE/C;MACA,IAAI,CAACzG,YAAY,CAACgE,KAAK,CAACF,IAAI,CAAC4C,iBAAiB,GAAG,EAAE;MACnD,IAAI,CAAC1G,YAAY,CAAC6D,KAAK,CAACC,IAAI,CAAC4C,iBAAiB,GAAG,EAAE;MACnD,IAAI,CAAC1G,YAAY,CAACiE,KAAK,CAACH,IAAI,CAAC4C,iBAAiB,GAAG,EAAE;IACrD;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA3B,GAAA;IAAAC,KAAA,EAQA,SAAA2B,kBAAyBC,MAAc,EAAE;MACvC,IAAI,CAACC,kBAAkB,GAAGD,MAAM;IAClC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA7B,GAAA;IAAAC,KAAA,EAOA,SAAA8B,YAAA,EAAqB;MAAA,IAAAC,oBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA;MACnB,IAAMC,aAAa,GAAGC,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAACtC,YAAY,CAAC,CAAC,CAAC;MAC1D,IAAMuC,WAAW,GAAGF,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAAC/B,aAAa,CAAC,CAAC,CAAC;MACzD,IAAMiC,aAAa,GAAGH,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAAC3B,YAAY,CAAC,CAAC,CAAC;MAC1D,IAAM8B,WAAW,GAAGJ,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAACvB,aAAa,CAAC,CAAC,CAAC;MACzD,IAAM2B,WAAW,GAAGL,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAACvB,aAAa,CAAC,CAAC,CAAC;MACzD,IAAM4B,aAAa,GAAGN,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAAC3B,YAAY,CAAC,CAAC,CAAC;MAE1D,IAAAiC,0BAAiB,EAAC;QAChBL,WAAW,EAAXA,WAAW;QACX1H,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/B2D,eAAe,EAAE,IAAI,CAACA;MACxB,CAAC,CAAC;MACF,IAAAqE,4BAAmB,EAAC;QAClBT,aAAa,EAAbA,aAAa;QACbvH,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/B2D,eAAe,EAAE,IAAI,CAACA;MACxB,CAAC,CAAC;MAEF,IAAAsE,4BAAmB,EAAC;QAClBN,aAAa,EAAbA,aAAa;QACb3H,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/B2D,eAAe,EAAE,IAAI,CAACA;MACxB,CAAC,CAAC;MACF,IAAAuE,0BAAiB,EAAC;QAChBN,WAAW,EAAXA,WAAW;QACX5H,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/B2D,eAAe,EAAE,IAAI,CAACA;MACxB,CAAC,CAAC;;MAEF;;MAEA,IAAAuE,0BAAiB,EAAC;QAChBN,WAAW,EAAEC,WAAW;QACxB7H,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/B2D,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCwE,aAAa,EAAE;MACjB,CAAC,CAAC;MAEF,IAAAF,4BAAmB,EAAC;QAClBN,aAAa,EAAEG,aAAa;QAC5B9H,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/B2D,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCwE,aAAa,EAAE;MACjB,CAAC,CAAC;MACFX,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAACW,gBAAgB,CAACC,eAAe,GACnD,IAAI,CAACrI,YAAY,CAACkD,cAAc,CAACrC,KAAK,CAAC+B,SAAS,CAAC,CAAC,CAAC;;MAErD;MACA4E,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAACW,gBAAgB,CAACE,WAAW,GAAG,EAAE;MACtDd,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAACW,gBAAgB,CAACE,WAAW,CAAClG,IAAI,CAAC;QACrDmG,WAAW,EAAEC,oBAAS;QACtBC,IAAI,EAAEC,wBAAa,CAACC;MACtB,CAAC,CAAC;MACFnB,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAACW,gBAAgB,CAACE,WAAW,CAAClG,IAAI,CAAC;QACrDmG,WAAW,EAAE,EAAAxB,oBAAA,OAAI,CAAC6B,cAAc,cAAA7B,oBAAA,wBAAAC,qBAAA,GAAnBD,oBAAA,CAAqB8B,gBAAgB,cAAA7B,qBAAA,wBAAAC,sBAAA,GAArCD,qBAAA,CAAuC8B,MAAM,cAAA7B,sBAAA,wBAAAC,sBAAA,GAA7CD,sBAAA,CAA+C8B,KAAK,cAAA7B,sBAAA,uBAApDA,sBAAA,CAAsD8B,KAAK,KAAIR,oBAAS;QACrFC,IAAI,EAAEC,wBAAa,CAACO;MACtB,CAAC,CAAC;MACFzB,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAACW,gBAAgB,CAACE,WAAW,CAAClG,IAAI,CAAC;QACrDmG,WAAW,EAAE,EAAApB,qBAAA,OAAI,CAACyB,cAAc,cAAAzB,qBAAA,wBAAAC,qBAAA,GAAnBD,qBAAA,CAAqB+B,gBAAgB,cAAA9B,qBAAA,wBAAAC,qBAAA,GAArCD,qBAAA,CAAuC0B,MAAM,cAAAzB,qBAAA,wBAAAC,qBAAA,GAA7CD,qBAAA,CAA+C0B,KAAK,cAAAzB,qBAAA,uBAApDA,qBAAA,CAAsD0B,KAAK,KAAIR,oBAAS;QACrFC,IAAI,EAAEC,wBAAa,CAACS;MACtB,CAAC,CAAC;;MAEF;MACA3B,eAAO,CAAC/E,WAAW,GAAG,IAAI,CAACzC,YAAY,CAACkD,cAAc,CAACrC,KAAK,CAAC4B,WAAW;MAExE,IAAI,CAACiB,YAAY,IAAI,CAAC;MAEtB8D,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAAC2B,cAAc,GAAG,IAAI,CAAC1F,YAAY;;MAEvD;MACA,IAAI,CAACC,eAAe,GAAG,IAAA0F,WAAA,CAAAvL,OAAA,EAAU,IAAI,CAACkC,YAAY,CAAC;MAEnD,IAAI,CAACiF,eAAe,CAACuC,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC,CAAC;MAE1C,IAAI,CAAClB,iBAAiB,EAAE;MAExB,IAAI,CAACvF,IAAI,CACP;QACEC,IAAI,EAAE,eAAe;QACrBC,QAAQ,EAAE;MACZ,CAAC,EACDpC,MAAM,CAACC,aAAa,EACpB;QACEuK,IAAI,EAAE9B,eAAO,CAACC,SAAS,CAAC,CAAC,CAAC;QAC1B;QACAhF,WAAW,EAAE+E,eAAO,CAAC/E;MACvB,CAAC,CACF;IACH;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAsC,GAAA;IAAAC,KAAA,EAQA,SAAAuE,qBAAqBX,cAAmB,EAAE;MACxC,IAAI,CAACA,cAAc,GAAGA,cAAc;IACtC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA7D,GAAA;IAAAC,KAAA,EAQA,SAAAwE,cAAqBZ,cAAmB,EAAE;MAAA,IAAAa,MAAA;MACxC,IAAI,CAAC,IAAI,CAAClG,YAAY,EAAE;QACtB,IAAI,CAACA,YAAY,GAAG,IAAI;QACxB,IAAI,CAACqF,cAAc,GAAGA,cAAc;QAEpC,OAAO,IAAI,CAACc,gBAAgB,EAAE,CAACC,IAAI,CAAC,YAAM;UACxCF,MAAI,CAACG,aAAa,GAAGC,WAAW,CAAC,YAAM;YACrCJ,MAAI,CAACC,gBAAgB,EAAE;UACzB,CAAC,EAAED,MAAI,CAAC9J,MAAM,CAACmK,gBAAgB,CAAC;UAChC;UACAL,MAAI,CAAC3C,WAAW,EAAE;UAClB2C,MAAI,CAACM,WAAW,GAAGF,WAAW,CAAC,YAAM;YACnCJ,MAAI,CAAC3C,WAAW,EAAE;UACpB,CAAC,EAAEkD,sBAAW,CAAC;QACjB,CAAC,CAAC;MACJ;MAEA,OAAOC,QAAA,CAAAnM,OAAA,CAAQoM,OAAO,EAAE;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAnF,GAAA;IAAAC,KAAA,EAOA,SAAAmF,aAAA,EAAsB;MAAA,IAAAC,MAAA;MACpB,IAAMC,cAAc,GAAG,IAAI,CAACN,WAAW,IAAI,IAAI,CAACH,aAAa;MAE7D,IAAI,IAAI,CAACA,aAAa,EAAE;QACtBU,aAAa,CAAC,IAAI,CAACV,aAAa,CAAC;QACjC,IAAI,CAACA,aAAa,GAAG7J,SAAS;MAChC;MAEA,IAAI,IAAI,CAACgK,WAAW,EAAE;QACpBO,aAAa,CAAC,IAAI,CAACP,WAAW,CAAC;QAC/B,IAAI,CAACA,WAAW,GAAGhK,SAAS;MAC9B;MAEA,IAAIsK,cAAc,EAAE;QAClB,OAAO,IAAI,CAACX,gBAAgB,EAAE,CAACC,IAAI,CAAC,YAAM;UACxCS,MAAI,CAACtD,WAAW,EAAE;UAClBsD,MAAI,CAACxB,cAAc,GAAG,IAAI;QAC5B,CAAC,CAAC;MACJ;MAEA,OAAOqB,QAAA,CAAAnM,OAAA,CAAQoM,OAAO,EAAE;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAAnF,GAAA;IAAAC,KAAA,EAUA,SAAAuF,oBAA4BC,cAAmB,EAAErJ,IAAY,EAAEC,QAAiB,EAAE;MAChF,IAAI,CAACoJ,cAAc,EAAE;QACnB;MACF;MAEA,QAAQA,cAAc,CAACrJ,IAAI;QACzB,KAAK,cAAc;UACjB,IAAI,CAACsJ,wBAAwB,CAACD,cAAc,EAAErJ,IAAI,CAAC;UACnD;QACF,KAAK,aAAa;UAChB,IAAI,CAACuJ,uBAAuB,CAACF,cAAc,EAAErJ,IAAI,CAAC;UAClD;QACF,KAAK,oBAAoB;QACzB,KAAK,qBAAqB;UACxB;UACA,IAAI,CAACwJ,sBAAsB,CAACH,cAAc,EAAErJ,IAAI,EAAEC,QAAQ,CAAC;UAC3D;QACF,KAAK,iBAAiB;QACtB,KAAK,kBAAkB;UACrB,IAAI,CAACwJ,cAAc,CAACJ,cAAc,EAAErJ,IAAI,EAAEC,QAAQ,EAAE,IAAI,CAAC;UACzD;QACF,KAAK,iBAAiB;UACpB,IAAI,CAACwJ,cAAc,CAACJ,cAAc,EAAErJ,IAAI,EAAEC,QAAQ,EAAE,KAAK,CAAC;UAC1D;QACF,KAAK,cAAc;UACjB;UACA,IAAI,CAACyJ,gBAAgB,CAACL,cAAc,EAAErJ,IAAI,CAAC;UAC3C;QACF;UACE;MAAM;IAEZ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA4D,GAAA;IAAAC,KAAA,EAQA,SAAA8F,8BACEC,eAA2B,EAC3B5J,IAAY,EACZC,QAAiB,EACjB;MAAA,IAAA4J,MAAA;MACA,IAAOC,KAAK,GAAIC,mCAAwB,CAAjCD,KAAK;MAEZF,eAAe,CAACI,OAAO,CAAC,UAACpN,MAAM,EAAK;QAClC,IAAIkN,KAAK,CAACG,QAAQ,CAACrN,MAAM,CAACoD,IAAI,CAAC,EAAE;UAC/B6J,MAAI,CAACT,mBAAmB,CAACxM,MAAM,EAAEoD,IAAI,EAAEC,QAAQ,CAAC;QAClD;MACF,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA2D,GAAA;IAAAC,KAAA,EAMA,SAAA6F,iBAAiB9M,MAAW,EAAEoD,IAAS,EAAE;MACvC,IAAI,CAACpD,MAAM,EAAE;QACX;MACF;MAEA,IAAIoD,IAAI,KAAKS,gBAAK,CAACyJ,eAAe,EAAE;QAClC,IAAI,CAACrL,YAAY,CAACmB,IAAI,CAAC,CAAC2C,IAAI,CAACwH,UAAU,GAAGvN,MAAM,CAACuN,UAAU;QAC3D,IAAI,CAACtL,YAAY,CAACmB,IAAI,CAAC,CAAC2C,IAAI,CAACyH,gBAAgB,GAAGxN,MAAM,CAACwN,gBAAgB;MACzE;IACF;EAAC;IAAAxG,GAAA;IAAAC,KAAA;IA8DD;AACF;AACA;AACA;AACA;AACA;AACA;IACE,SAAAwG,uBAAA,EAAiC;MAC/B,IAAI,IAAI,CAAChI,gBAAgB,KAAK,IAAI,IAAI,IAAI,CAACqD,kBAAkB,EAAE;QAC7D;QACA,IAAIxG,SAAS,GAAGuB,gBAAK,CAACyJ,eAAe;QACrC,IAAII,YAAY,GAAG,IAAI;QACvB,IAAIC,aAAa,GAAG,IAAI;QAExB,IAAI,IAAI,CAAC7E,kBAAkB,CAAC8E,QAAQ,CAACC,SAAS,EAAE;UAC9CH,YAAY,GAAG,IAAI,CAACzL,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI;UAChD4H,aAAa,GAAG,IAAI,CAAClI,gBAAgB,CAACnD,SAAS,CAAC,CAACyD,IAAI;UAErD,IACE2H,YAAY,CAACI,gBAAgB,KAAKH,aAAa,CAACG,gBAAgB,IAChEJ,YAAY,CAACI,gBAAgB,KAAK,CAAC,EACnC;YACAC,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,uBAC/D;UACH,CAAC,MAAM;YACL,IACEoL,YAAY,CAACF,gBAAgB,KAAKG,aAAa,CAACH,gBAAgB,IAChEE,YAAY,CAACF,gBAAgB,KAAK,CAAC,EACnC;cACAO,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,qBAC/D;YACH;YAEA,IAAIoL,YAAY,CAACH,UAAU,KAAK,CAAC,EAAE;cACjCQ,oBAAW,CAACC,MAAM,CAACC,IAAI,mDAAAtL,MAAA,CAC6BL,SAAS,8BAC5D;YACH;UACF;UAEA,IAAI,CAAC4L,mBAAmB,CACtB5L,SAAS,EACTqL,aAAa,CAACG,gBAAgB,EAC9BJ,YAAY,CAACI,gBAAgB,EAC7B,IAAI,CACL;QACH;QAEA,IAAI,IAAI,CAAChF,kBAAkB,CAAC8E,QAAQ,CAACO,YAAY,EAAE;UACjD;UACAT,YAAY,GAAG,IAAI,CAACzL,YAAY,CAACK,SAAS,CAAC,CAAC0D,IAAI;UAChD2H,aAAa,GAAG,IAAI,CAAClI,gBAAgB,CAACnD,SAAS,CAAC,CAAC0D,IAAI;UAErD,IACE0H,YAAY,CAACU,oBAAoB,KAAKT,aAAa,CAACS,oBAAoB,IACxEV,YAAY,CAACU,oBAAoB,KAAK,CAAC,EACvC;YACAL,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,2BAC/D;UACH,CAAC,MAAM,IACLoL,YAAY,CAACW,oBAAoB,KAAKV,aAAa,CAACU,oBAAoB,IACxEX,YAAY,CAACW,oBAAoB,KAAK,CAAC,EACvC;YACAN,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,uBAC/D;UACH;UAEA,IAAI,CAAC4L,mBAAmB,CACtB5L,SAAS,EACTqL,aAAa,CAACS,oBAAoB,EAClCV,YAAY,CAACU,oBAAoB,EACjC,KAAK,CACN;QACH;QAEA9L,SAAS,GAAGuB,gBAAK,CAACyK,eAAe;QACjC,IAAI,IAAI,CAACxF,kBAAkB,CAAC8E,QAAQ,CAACW,SAAS,EAAE;UAC9C;UACAb,YAAY,GAAG,IAAI,CAACzL,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI;UAChD4H,aAAa,GAAG,IAAI,CAAClI,gBAAgB,CAACnD,SAAS,CAAC,CAACyD,IAAI;UAErD,IACE2H,YAAY,CAACI,gBAAgB,KAAKH,aAAa,CAACG,gBAAgB,IAChEJ,YAAY,CAACI,gBAAgB,KAAK,CAAC,EACnC;YACAC,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,uBAC/D;UACH,CAAC,MAAM,IAAI,IAAI,CAACO,yBAAyB,CAACP,SAAS,CAAC,CAACQ,KAAK,KAAK/B,MAAM,CAACK,mBAAmB,EAAE;YACzF,IACEsM,YAAY,CAACc,aAAa,KAAKb,aAAa,CAACa,aAAa,IAC1Dd,YAAY,CAACc,aAAa,KAAK,CAAC,EAChC;cACA,IAAI,CAAC3L,yBAAyB,CAACP,SAAS,CAAC,CAACQ,KAAK,GAAG/B,MAAM,CAACG,gBAAgB;cACzE6M,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,qBAC/D;cACD,IAAI,CAACW,IAAI,CACP;gBACEC,IAAI,EAAE,eAAe;gBACrBC,QAAQ,EAAE;cACZ,CAAC,EACDpC,MAAM,CAACG,gBAAgB,EACvB;gBACEoB,SAAS,EAATA;cACF,CAAC,CACF;YACH;YAEA,IACE,IAAI,CAACL,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyD,IAAI,CAAC0I,UAAU,KACtD,IAAI,CAAChJ,gBAAgB,CAACI,WAAW,CAACvD,SAAS,CAAC,CAACyD,IAAI,CAAC0I,UAAU,IAC9D,IAAI,CAACxM,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyD,IAAI,CAAC0I,UAAU,KAAK,CAAC,EAC9D;cACAV,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,kBAC/D;YACH;;YAEA;YACA,IACEoL,YAAY,CAACc,aAAa,KAAKb,aAAa,CAACa,aAAa,KACzDd,YAAY,CAACe,UAAU,KAAKd,aAAa,CAACc,UAAU,IAAIf,YAAY,CAACe,UAAU,KAAK,CAAC,CAAC,EACvF;cACA,IAAI,CAAC5L,yBAAyB,CAACP,SAAS,CAAC,CAACQ,KAAK,GAAG/B,MAAM,CAACE,cAAc;cACvE8M,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,iDAC/D;cACD,IAAI,CAACW,IAAI,CACP;gBACEC,IAAI,EAAE,eAAe;gBACrBC,QAAQ,EAAE;cACZ,CAAC,EACDpC,MAAM,CAACE,cAAc,EACrB;gBACEqB,SAAS,EAATA;cACF,CAAC,CACF;YACH;UACF;UACA,IAAI,CAAC4L,mBAAmB,CACtB5L,SAAS,EACTqL,aAAa,CAACc,UAAU,EACxBf,YAAY,CAACe,UAAU,EACvB,IAAI,CACL;QACH;QAEA,IAAI,IAAI,CAAC3F,kBAAkB,CAAC8E,QAAQ,CAACc,YAAY,EAAE;UACjD;;UAEAhB,YAAY,GAAG,IAAI,CAACzL,YAAY,CAACK,SAAS,CAAC,CAAC0D,IAAI;UAChD2H,aAAa,GAAG,IAAI,CAAClI,gBAAgB,CAACnD,SAAS,CAAC,CAAC0D,IAAI;UAErD,IACE0H,YAAY,CAACU,oBAAoB,KAAKT,aAAa,CAACS,oBAAoB,IACxEV,YAAY,CAACU,oBAAoB,KAAK,CAAC,EACvC;YACAL,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,2BAC/D;UACH,CAAC,MAAM;YACL,IACE,IAAI,CAACL,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAAC0D,IAAI,CAAC2I,cAAc,KAC1D,IAAI,CAAClJ,gBAAgB,CAACI,WAAW,CAACvD,SAAS,CAAC,CAAC0D,IAAI,CAAC2I,cAAc,IAClE,IAAI,CAAC1M,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAAC0D,IAAI,CAAC2I,cAAc,KAAK,CAAC,EAClE;cACAZ,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,sBAC/D;YACH;YAEA,IACE,IAAI,CAACL,YAAY,CAACK,SAAS,CAAC,CAAC0D,IAAI,CAAC4I,aAAa,KAC7C,IAAI,CAACnJ,gBAAgB,CAACnD,SAAS,CAAC,CAAC0D,IAAI,CAAC4I,aAAa,IACrD,IAAI,CAAC3M,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyD,IAAI,CAAC6I,aAAa,KAAK,CAAC,EACjE;cACAb,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,qBAC/D;YACH;YAEA,IACE,IAAI,CAACL,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAAC0D,IAAI,CAAC6I,aAAa,GACzD,IAAI,CAACpJ,gBAAgB,CAACI,WAAW,CAACvD,SAAS,CAAC,CAAC0D,IAAI,CAAC6I,aAAa,GACjE,EAAE,EACF;cACAd,oBAAW,CAACC,MAAM,CAACC,IAAI,mDAAAtL,MAAA,CAC6BL,SAAS,iCAC5D;YACH;UACF;UAEA,IAAI,CAAC4L,mBAAmB,CACtB5L,SAAS,EACTqL,aAAa,CAACiB,aAAa,EAC3BlB,YAAY,CAACkB,aAAa,EAC1B,KAAK,CACN;QACH;QAEAtM,SAAS,GAAGuB,gBAAK,CAACiL,eAAe;QACjC,IAAI,IAAI,CAAChG,kBAAkB,CAAC8E,QAAQ,CAACmB,SAAS,EAAE;UAC9C;;UAEArB,YAAY,GAAG,IAAI,CAACzL,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI;UAChD4H,aAAa,GAAG,IAAI,CAAClI,gBAAgB,CAACnD,SAAS,CAAC,CAACyD,IAAI;UAErD,IACE2H,YAAY,CAACI,gBAAgB,KAAKH,aAAa,CAACG,gBAAgB,IAChEJ,YAAY,CAACI,gBAAgB,KAAK,CAAC,EACnC;YACAC,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,uBAC/D;UACH,CAAC,MAAM,IAAI,IAAI,CAACO,yBAAyB,CAACP,SAAS,CAAC,CAACQ,KAAK,KAAK/B,MAAM,CAACK,mBAAmB,EAAE;YACzF,IACEsM,YAAY,CAACc,aAAa,KAAKb,aAAa,CAACa,aAAa,IAC1Dd,YAAY,CAACc,aAAa,KAAK,CAAC,EAChC;cACA,IAAI,CAAC3L,yBAAyB,CAACP,SAAS,CAAC,CAACQ,KAAK,GAAG/B,MAAM,CAACG,gBAAgB;cACzE6M,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,6BAC/D;cACD,IAAI,CAACW,IAAI,CACP;gBACEC,IAAI,EAAE,eAAe;gBACrBC,QAAQ,EAAE;cACZ,CAAC,EACDpC,MAAM,CAACG,gBAAgB,EACvB;gBACEoB,SAAS,EAATA;cACF,CAAC,CACF;YACH;YAEA,IACE,IAAI,CAACL,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyD,IAAI,CAAC0I,UAAU,KACtD,IAAI,CAAChJ,gBAAgB,CAACI,WAAW,CAACvD,SAAS,CAAC,CAACyD,IAAI,CAAC0I,UAAU,IAC9D,IAAI,CAACxM,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyD,IAAI,CAAC0I,UAAU,KAAK,CAAC,EAC9D;cACAV,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,kBAC/D;YACH;;YAEA;YACA,IACEoL,YAAY,CAACc,aAAa,KAAKb,aAAa,CAACa,aAAa,KACzDd,YAAY,CAACe,UAAU,KAAKd,aAAa,CAACc,UAAU,IAAIf,YAAY,CAACe,UAAU,KAAK,CAAC,CAAC,EACvF;cACA,IAAI,CAAC5L,yBAAyB,CAACP,SAAS,CAAC,CAACQ,KAAK,GAAG/B,MAAM,CAACE,cAAc;cACvE8M,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,uDAC/D;cACD,IAAI,CAACW,IAAI,CACP;gBACEC,IAAI,EAAE,eAAe;gBACrBC,QAAQ,EAAE;cACZ,CAAC,EACDpC,MAAM,CAACE,cAAc,EACrB;gBACEqB,SAAS,EAATA;cACF,CAAC,CACF;YACH;UACF;;UAEA;UACA;UACAoL,YAAY,GAAG,IAAI,CAACzL,YAAY,CAACK,SAAS,CAAC,CAAC0D,IAAI;UAChD2H,aAAa,GAAG,IAAI,CAAClI,gBAAgB,CAACnD,SAAS,CAAC,CAAC0D,IAAI;UAErD,IACE0H,YAAY,CAACU,oBAAoB,KAAKT,aAAa,CAACS,oBAAoB,IACxEV,YAAY,CAACI,gBAAgB,KAAK,CAAC,EACnC;YACAC,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,2BAC/D;UACH,CAAC,MAAM;YACL,IACE,IAAI,CAACL,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAAC0D,IAAI,CAAC2I,cAAc,KAC1D,IAAI,CAAClJ,gBAAgB,CAACI,WAAW,CAACvD,SAAS,CAAC,CAAC0D,IAAI,CAAC2I,cAAc,IAClE,IAAI,CAAC1M,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAAC0D,IAAI,CAAC2I,cAAc,KAAK,CAAC,EAClE;cACAZ,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,sBAC/D;YACH;YAEA,IACE,IAAI,CAACL,YAAY,CAACK,SAAS,CAAC,CAAC0D,IAAI,CAAC4I,aAAa,KAC7C,IAAI,CAACnJ,gBAAgB,CAACnD,SAAS,CAAC,CAAC0D,IAAI,CAAC4I,aAAa,IACrD,IAAI,CAAC3M,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyD,IAAI,CAAC6I,aAAa,KAAK,CAAC,EACjE;cACAb,oBAAW,CAACC,MAAM,CAACC,IAAI,sDAAAtL,MAAA,CACgCL,SAAS,qBAC/D;YACH;YAEA,IACE,IAAI,CAACL,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAAC0D,IAAI,CAAC6I,aAAa,GACzD,IAAI,CAACpJ,gBAAgB,CAACI,WAAW,CAACvD,SAAS,CAAC,CAAC0D,IAAI,CAAC6I,aAAa,GACjE,EAAE,EACF;cACAd,oBAAW,CAACC,MAAM,CAACC,IAAI,mDAAAtL,MAAA,CAC6BL,SAAS,iCAC5D;YACH;UACF;;UAEA;UACA;UACA;QACF;MACF;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA0E,GAAA;IAAAC,KAAA,EAOA,SAAA0E,iBAAA,EAA2B;MAAA,IAAAqD,MAAA;MACzB,IAAI,CAAC,IAAI,CAACnE,cAAc,EAAE;QACxB,OAAOqB,QAAA,CAAAnM,OAAA,CAAQoM,OAAO,EAAE;MAC1B;MAEA,IAAI,IAAI,CAACtB,cAAc,IAAI,IAAI,CAACA,cAAc,CAACoE,eAAe,KAAKC,2BAAgB,CAACC,MAAM,EAAE;QAC1FpB,oBAAW,CAACC,MAAM,CAACoB,KAAK,CACtB,4EAA4E,CAC7E;QAED,OAAOlD,QAAA,CAAAnM,OAAA,CAAQoM,OAAO,EAAE;MAC1B;MAEA4B,oBAAW,CAACC,MAAM,CAACoB,KAAK,CAAC,2DAA2D,CAAC;MAErF,OAAOlD,QAAA,CAAAnM,OAAA,CAAQsP,GAAG,CAAC,CACjB,IAAI,CAACxE,cAAc,CAACM,gBAAgB,CAACJ,MAAM,CAACuE,QAAQ,EAAE,CAAC1D,IAAI,CAAC,UAAC2D,GAAG,EAAK;QACnEP,MAAI,CAACjC,6BAA6B,CAACwC,GAAG,EAAE1L,gBAAK,CAACyK,eAAe,EAAE,IAAI,CAAC;MACtE,CAAC,CAAC,EAEF,IAAI,CAACzD,cAAc,CAACM,gBAAgB,CAACqE,QAAQ,CAACF,QAAQ,EAAE,CAAC1D,IAAI,CAAC,UAAC2D,GAAG,EAAK;QACrEP,MAAI,CAACjC,6BAA6B,CAACwC,GAAG,EAAE1L,gBAAK,CAACyK,eAAe,EAAE,KAAK,CAAC;MACvE,CAAC,CAAC,EAEF,IAAI,CAACzD,cAAc,CAACC,gBAAgB,CAACC,MAAM,CAACuE,QAAQ,EAAE,CAAC1D,IAAI,CAAC,UAAC2D,GAAG,EAAK;QACnEP,MAAI,CAACjC,6BAA6B,CAACwC,GAAG,EAAE1L,gBAAK,CAACyJ,eAAe,EAAE,IAAI,CAAC;MACtE,CAAC,CAAC,EAEF,IAAI,CAACzC,cAAc,CAACC,gBAAgB,CAAC0E,QAAQ,CAACF,QAAQ,EAAE,CAAC1D,IAAI,CAAC,UAAC2D,GAAG,EAAK;QACrEP,MAAI,CAACjC,6BAA6B,CAACwC,GAAG,EAAE1L,gBAAK,CAACyJ,eAAe,EAAE,KAAK,CAAC;MACvE,CAAC,CAAC;MAEF;MACA,IAAI,CAACzC,cAAc,CAAC4E,gBAAgB,CAAC1E,MAAM,CAACuE,QAAQ,EAAE,CAAC1D,IAAI,CAAC,UAAC2D,GAAG,EAAK;QACnEP,MAAI,CAACjC,6BAA6B,CAACwC,GAAG,EAAE1L,gBAAK,CAACiL,eAAe,EAAE,IAAI,CAAC;MACtE,CAAC,CAAC,EAEF,IAAI,CAACjE,cAAc,CAAC4E,gBAAgB,CAACD,QAAQ,CAACF,QAAQ,EAAE,CAAC1D,IAAI,CAAC,UAAC2D,GAAG,EAAK;QACrEP,MAAI,CAACjC,6BAA6B,CAACwC,GAAG,EAAE1L,gBAAK,CAACiL,eAAe,EAAE,KAAK,CAAC;MACvE,CAAC,CAAC,CACH,CAAC,CAAClD,IAAI,CAAC,YAAM;QACZoD,MAAI,CAAC/M,YAAY,CAAC4B,gBAAK,CAACyJ,eAAe,CAAC,CAACoC,SAAS,GAChDV,MAAI,CAACnE,cAAc,CAACC,gBAAgB,CAAC6E,gBAAgB;QACvDX,MAAI,CAAC/M,YAAY,CAAC4B,gBAAK,CAACyK,eAAe,CAAC,CAACoB,SAAS,GAChDV,MAAI,CAACnE,cAAc,CAACM,gBAAgB,CAACwE,gBAAgB;QACvDX,MAAI,CAAC/M,YAAY,CAAC4B,gBAAK,CAACiL,eAAe,CAAC,CAACY,SAAS,GAChDV,MAAI,CAACnE,cAAc,CAAC4E,gBAAgB,CAACE,gBAAgB;;QAEvD;QACAX,MAAI,CAACvB,sBAAsB,EAAE;;QAE7B;QACAuB,MAAI,CAACvJ,gBAAgB,GAAGmK,IAAI,CAACC,KAAK,CAAC,IAAAC,UAAA,CAAA/P,OAAA,EAAeiP,MAAI,CAAC/M,YAAY,CAAC,CAAC;QAErE8L,oBAAW,CAACC,MAAM,CAACoB,KAAK,CACtB,oEAAoE,CACrE;MACH,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAApI,GAAA;IAAAC,KAAA,EAOA,SAAAyF,yBAAiC1M,MAAW,EAAEoD,IAAS,EAAE;MACvD,IAAMd,SAAS,GAAGc,IAAI,IAAIS,gBAAK,CAACyJ,eAAe;MAC/C,IAAMyC,YAAY,GAAGlM,gBAAK,CAACC,cAAc;MAEzC,IAAI,CAACkM,kBAAkB,CAAChQ,MAAM,EAAEoD,IAAI,EAAE2M,YAAY,CAAC;MACnD,IAAI/P,MAAM,CAACiQ,SAAS,EAAE;QACpB,IAAIC,SAAS,GAAG,CAAC;QAEjB,IAAI,CAAC,IAAI,CAACjO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACI,aAAa,EAAE;UACtE,IAAI,CAAClO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACI,aAAa,GAAGnQ,MAAM,CAACiQ,SAAS;QACtF;QACA,IAAI,CAAC,IAAI,CAAChO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACvB,aAAa,EAAE;UACtE,IAAI,CAACvM,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACvB,aAAa,GAAGxO,MAAM,CAACwO,aAAa;QAC1F;QACA,IAAI,CAAC,IAAI,CAACvM,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACK,gBAAgB,EAAE;UACzE,IAAI,CAACnO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACK,gBAAgB,GAClEpQ,MAAM,CAACoQ,gBAAgB;QAC3B;QAEA,IAAMC,KAAK,GACTrQ,MAAM,CAACiQ,SAAS,GAAG,IAAI,CAAChO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACI,aAAa;QAEtF,IAAI,CAAClO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACI,aAAa,GAAGnQ,MAAM,CAACiQ,SAAS;QAEpFC,SAAS,GAAGG,KAAK,GAAG,IAAI;QAExB,IAAI,CAACpO,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACO,kBAAkB,GAAGJ,SAAS,CAACK,OAAO,CAAC,CAAC,CAAC;QACpF,IAAI,CAACtO,YAAY,CAACK,SAAS,CAAC,CAAC2N,SAAS,GAAGC,SAAS;QAClD,IAAI,CAACjO,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACvB,aAAa,GACtDxO,MAAM,CAACwO,aAAa,GAAG,IAAI,CAACvM,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACvB,aAAa;QAC1F,IAAI,CAACvM,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACK,gBAAgB,GACzDpQ,MAAM,CAACoQ,gBAAgB,GACvB,IAAI,CAACnO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACK,gBAAgB;QACtE,IAAI,CAACnO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACkO,aAAa,GAAGxQ,MAAM,CAACuD,EAAE;QAE/D,IAAI,CAAC,IAAI,CAACtB,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACU,WAAW,EAAE;UACpE,IAAI,CAACxO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACU,WAAW,GAAGzQ,MAAM,CAACyQ,WAAW;QACtF;QAEA,IAAI,CAACxO,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACU,WAAW,GACpDzQ,MAAM,CAACyQ,WAAW,GAAG,IAAI,CAACxO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACU,WAAW;QACtF,IAAI,CAACxO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACU,WAAW,GAAGzQ,MAAM,CAACyQ,WAAW;;QAEpF;;QAEA,IAAI,CAACxO,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACW,qBAAqB,GAAG1Q,MAAM,CAACoQ,gBAAgB;QAC1F,IAAI,CAACnO,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACY,cAAc,GAAG3Q,MAAM,CAAC4Q,SAAS;QAC5E,IAAI,CAAC3O,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACc,aAAa,GAAG7Q,MAAM,CAAC8Q,QAAQ;QAC1E,IAAI,CAAC7O,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACjC,gBAAgB,GAAG9N,MAAM,CAACyQ,WAAW;QAChF,IAAI,CAACxO,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACgB,aAAa,GAAG/Q,MAAM,CAACgR,QAAQ;QAC1E,IAAI,CAAC/O,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACtB,UAAU,GAAGzO,MAAM,CAACyO,UAAU;QACzE,IAAI,CAACxM,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACvB,aAAa,GAAGxO,MAAM,CAACwO,aAAa;QAC/E,IAAI,CAACvM,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACkB,qBAAqB,GAC9DjR,MAAM,CAACiR,qBAAqB;QAC9B,IAAI,CAAChP,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACmB,uBAAuB,GAChElR,MAAM,CAACkR,uBAAuB;QAChC,IAAI,CAACjP,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACoB,kCAAkC,GAC3EnR,MAAM,CAACmR,kCAAkC;QAC3C,IAAI,CAAClP,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACqB,wBAAwB,GACjEpR,MAAM,CAACoR,wBAAwB;QACjC,IAAI,CAACnP,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACsB,cAAc,GAAGrR,MAAM,CAACiQ,SAAS;QAC5E,IAAI,CAAChO,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACuB,eAAe,GAAGtR,MAAM,CAACsR,eAAe;QACnF,IAAI,CAACrP,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACwB,sBAAsB,GAC/DvR,MAAM,CAACuR,sBAAsB;MACjC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAvK,GAAA;IAAAC,KAAA,EAOA,SAAA0F,wBAAgC3M,MAAW,EAAEoD,IAAS,EAAE;MACtD,IAAMd,SAAS,GAAGc,IAAI,IAAIS,gBAAK,CAACyJ,eAAe;MAC/C,IAAMyC,YAAY,GAAGlM,gBAAK,CAACE,iBAAiB;MAE5C,IAAI,CAACiM,kBAAkB,CAAChQ,MAAM,EAAEoD,IAAI,EAAE2M,YAAY,CAAC;MACnD,IAAI/P,MAAM,CAACwR,aAAa,EAAE;QACxB,IAAItB,SAAS,GAAG,CAAC;QAEjB,IAAI,CAAC,IAAI,CAACjO,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC0B,iBAAiB,EAAE;UAC1E,IAAI,CAACxP,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC0B,iBAAiB,GACnEzR,MAAM,CAACwR,aAAa;QACxB;QAEA,IAAI,CAAC,IAAI,CAACvP,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACe,QAAQ,EAAE;UACjE,IAAI,CAAC7O,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACe,QAAQ,GAAG9Q,MAAM,CAAC8Q,QAAQ;QAChF;QAEA,IAAI,CAAC,IAAI,CAAC7O,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC1J,WAAW,EAAE;UACpE,IAAI,CAACpE,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC1J,WAAW,GAAGrG,MAAM,CAACqG,WAAW;QACtF;QAEA,IAAI,CAAC,IAAI,CAACpE,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC3B,oBAAoB,EAAE;UAC7E,IAAI,CAACnM,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC3B,oBAAoB,GACtEpO,MAAM,CAAC0R,eAAe;QAC1B;QAEA,IAAI,CAAC,IAAI,CAACzP,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC4B,2BAA2B,EAAE;UACpF,IAAI,CAAC1P,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC4B,2BAA2B,GAC7E3R,MAAM,CAAC2R,2BAA2B;QACtC;QAEA,IAAMtB,KAAK,GACTrQ,MAAM,CAACwR,aAAa,GACpB,IAAI,CAACvP,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC0B,iBAAiB;QAEvE,IAAI,CAACxP,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC0B,iBAAiB,GAAGzR,MAAM,CAACwR,aAAa;QAE5FtB,SAAS,GAAGG,KAAK,GAAG,IAAI;QACxB,IAAI,CAACpO,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACO,kBAAkB,GAAGJ,SAAS,CAACK,OAAO,CAAC,CAAC,CAAC;QACpF,IAAI,CAACtO,YAAY,CAACK,SAAS,CAAC,CAACkP,aAAa,GAAGtB,SAAS,CAACK,OAAO,CAAC,CAAC,CAAC;QAEjE,IAAI,CAACtO,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACe,QAAQ,GACjD9Q,MAAM,CAAC8Q,QAAQ,GAAG,IAAI,CAAC7O,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACe,QAAQ;QAChF,IAAI,CAAC7O,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC6B,kBAAkB,GAC3D5R,MAAM,CAACqG,WAAW,GAAG,IAAI,CAACpE,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC1J,WAAW;QACtF,IAAI,IAAI,CAACpE,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC6B,kBAAkB,GAAG,CAAC,EAAE;UACrE,IAAI,CAAC3P,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC6B,kBAAkB,GAAG,CAAC;QACnE;QAEA,IAAI,CAAC3P,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC2B,eAAe,GACxD1R,MAAM,CAAC0R,eAAe,GACtB,IAAI,CAACzP,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC3B,oBAAoB;QAC1E,IAAI,CAACnM,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC3B,oBAAoB,GACtEpO,MAAM,CAAC0R,eAAe;QAExB,IAAI,IAAI,CAACzP,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC2B,eAAe,KAAK,CAAC,EAAE;UACpE3D,oBAAW,CAACC,MAAM,CAACC,IAAI,4EAAAtL,MAAA,CACsDL,SAAS,QACpF,IAAI,CAACL,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC2B,eAAe,CAC3D;QACH;;QAEA;QACA,IAAI,CAACzP,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC8B,sBAAsB,GAC/D,IAAI,CAAC5P,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC6B,kBAAkB,GAAG,CAAC,GAC7D,IAAI,CAAC3P,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC6B,kBAAkB,IAC5D,IAAI,CAAC3P,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC2B,eAAe,GACzD,IAAI,CAACzP,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC6B,kBAAkB,CAAC,GAChE,CAAC;QACP,IAAI,IAAI,CAAC3P,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC8B,sBAAsB,GAAG,CAAC,EAAE;UACzE9D,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,yFAAyF,EACzF,IAAI,CAAChM,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC8B,sBAAsB,CAClE;QACH;;QAEA;;QAEA,IAAI7R,MAAM,CAACqG,WAAW,EAAE;UACtB,IAAI,CAACpE,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC+B,gBAAgB,GACzD9R,MAAM,CAACqG,WAAW,GAAG,CAAC,GAAGrG,MAAM,CAACqG,WAAW,GAAG,CAACrG,MAAM,CAACqG,WAAW;QACrE,CAAC,MAAM;UACL,IAAI,CAACpE,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC+B,gBAAgB,GAAG,CAAC;QACjE;QAEA,IAAI,CAAC7P,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC4B,2BAA2B,GACpE3R,MAAM,CAAC2R,2BAA2B;;QAEpC;QACA,IAAI,CAAC1P,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACY,cAAc,GAAG3Q,MAAM,CAAC4Q,SAAS;QAC5E,IAAI,CAAC3O,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACc,aAAa,GAAG7Q,MAAM,CAAC8Q,QAAQ;QAC1E,IAAI,CAAC7O,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACnB,aAAa,GAAG5O,MAAM,CAAC4O,aAAa;QAC/E,IAAI,CAAC3M,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACgC,gBAAgB,GAAG/R,MAAM,CAAC+R,gBAAgB;QAErF,IAAI,CAAC9P,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACiC,qBAAqB,GAC9DhS,MAAM,CAACgS,qBAAqB;QAC9B,IAAI,CAAC/P,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC3B,oBAAoB,GAAGpO,MAAM,CAAC0R,eAAe;QAExF,IAAI,CAACzP,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACkC,mBAAmB,GAAGjS,MAAM,CAACiS,mBAAmB;QAC3F,IAAI,CAAChQ,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACmC,kBAAkB,GAAGlS,MAAM,CAACkS,kBAAkB;QACzF,IAAI,CAACjQ,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACoC,kBAAkB,GAAGnS,MAAM,CAACwR,aAAa;QACpF,IAAI,CAACvP,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACqC,mBAAmB,GAAGpS,MAAM,CAACoS,mBAAmB;QAE3F,IAAI,CAACnQ,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACrH,aAAa,CAACrE,IAAI,CAACrE,MAAM,CAACsG,MAAM,CAAC;;QAE5E;;QAEA,IAAI,CAACrE,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACxC,UAAU,GAAGvN,MAAM,CAACuN,UAAU;QACzE,IAAI,CAACtL,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACvC,gBAAgB,GAAGxN,MAAM,CAACwN,gBAAgB;QACrF,IAAI,CAACvL,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC1B,oBAAoB,GAC7DrO,MAAM,CAACqO,oBAAoB,IAAI,CAAC;QAClC,IAAI,CAACpM,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACsC,mBAAmB,GAC5DrS,MAAM,CAACqS,mBAAmB,IAAI,CAAC;QACjC,IAAI,CAACpQ,YAAY,CAACK,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACuC,gBAAgB,GAAGtS,MAAM,CAACsS,gBAAgB,IAAI,CAAC;MAC5F;IACF;EAAC;IAAAtL,GAAA;IAAAC,KAAA;IAuFD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACE,SAAA+I,mBAA2BhQ,MAAW,EAAEsC,SAAc,EAAEyN,YAAiB,EAAE;MACzE,IAAI,CAAC/P,MAAM,IAAIsC,SAAS,KAAKuB,gBAAK,CAACyJ,eAAe,EAAE;QAClD;MACF;MACA,IAAItN,MAAM,CAACoD,IAAI,KAAK,aAAa,IAAIpD,MAAM,CAACoD,IAAI,KAAK,cAAc,EAAE;QACnE;MACF;MACA,IAAIpD,MAAM,CAACuS,UAAU,IAAIvS,MAAM,CAACwS,WAAW,EAAE;QAC3C,IAAI,CAACvQ,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC0C,KAAK,GAAGzS,MAAM,CAACuS,UAAU;QAChF,IAAI,CAACtQ,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC2C,MAAM,GAAG1S,MAAM,CAACwS,WAAW;MACpF;MAEA,IAAIzC,YAAY,KAAKlM,gBAAK,CAACE,iBAAiB,EAAE;QAC5C,IAAI,CAAC9B,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACpB,cAAc,GAAG3O,MAAM,CAAC2O,cAAc;QAC7F,IAAI,CAAC1M,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACnB,aAAa,GAAG5O,MAAM,CAAC4O,aAAa;QAC3F,IAAI,CAAC3M,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAClB,aAAa,GAAG7O,MAAM,CAAC6O,aAAa;MAC7F,CAAC,MAAM,IAAIkB,YAAY,KAAKlM,gBAAK,CAACC,cAAc,EAAE;QAChD,IAAI,CAAC7B,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACtB,UAAU,GAAGzO,MAAM,CAACyO,UAAU;QACrF,IAAI,CAACxM,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC4C,cAAc,GAAG3S,MAAM,CAAC2S,cAAc;MAC/F;MAEA,IAAI3S,MAAM,CAAC4S,eAAe,IAAItQ,SAAS,KAAKuB,gBAAK,CAACyJ,eAAe,EAAE;QACjE,IAAI,CAACrL,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC6C,eAAe,GACpE5S,MAAM,CAAC4S,eAAe;QAExB,IAAMC,iBAAiB,GAAG7S,MAAM,IAAIA,MAAM,CAAC6S,iBAAiB;QAC5D,IAAMC,wBAAwB,GAAG9S,MAAM,IAAIA,MAAM,CAAC8S,wBAAwB;QAE1E,IAAI,CAAC7Q,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAACgD,cAAc,GACnED,wBAAwB,IAAI,CAACD,iBAAiB,GAAG,CAACC,wBAAwB;;QAE5E;QACA,IAAI,CAAC7Q,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC8C,iBAAiB,GACtE7S,MAAM,CAAC6S,iBAAiB;QAC1B,IAAI,CAAC5Q,YAAY,CAAC4D,WAAW,CAACvD,SAAS,CAAC,CAACyN,YAAY,CAAC,CAAC+C,wBAAwB,GAC7E9S,MAAM,CAAC8S,wBAAwB;MACnC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA9L,GAAA;IAAAC,KAAA,EAQA,SAAA2F,uBAA+B5M,MAAW,EAAEoD,IAAS,EAAE;MACrD,IAAI,CAACA,IAAI,EAAE;QACT;MACF;MAEA,IAAMd,SAAS,GAAGc,IAAI;MAEtB,IAAI,CAAC,IAAI,CAACnB,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyD,IAAI,CAACiN,0BAA0B,EAAE;QAC1E,IAAI,CAAC/Q,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyD,IAAI,CAACiN,0BAA0B,GAAGhT,MAAM,CAACqG,WAAW;MAC5F;MAEA,IAAM4M,iBAAiB,GACrBjT,MAAM,CAACqG,WAAW,GAAG,IAAI,CAACpE,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyD,IAAI,CAACiN,0BAA0B;MAE5F,IAAI,CAAC/Q,YAAY,CAAC0C,QAAQ,CAACrC,SAAS,CAAC,CAACyD,IAAI,CAACiN,0BAA0B,GAAGhT,MAAM,CAACqG,WAAW;MAC1F,IAAI,CAACpE,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACmN,qBAAqB,GAAGD,iBAAiB;MAC3E,IAAI,CAAChR,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACiN,0BAA0B,GAAGhT,MAAM,CAACqG,WAAW;MAEjF,IAAI,CAACpE,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAAC0C,gBAAgB,CAACpE,IAAI,CAACrE,MAAM,CAACsG,MAAM,CAAC;MACtE,IAAI,CAACrE,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAAC4C,iBAAiB,CAACtE,IAAI,CAACrE,MAAM,CAACyH,aAAa,CAAC;MAE9E,IAAI,CAACxF,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACd,SAAS,GAAGjF,MAAM,CAACiF,SAAS;MAC9D,IAAI,CAAChD,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACoN,IAAI,GAAGnT,MAAM,CAACmT,IAAI;MACpD,IAAI,CAAClR,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACqN,eAAe,GAAGpT,MAAM,CAACoT,eAAe;;MAE1E;MACA,IAAI,CAACnR,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACsN,sBAAsB,GACtD,IAAI,CAACpR,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACiN,0BAA0B,GAAG,CAAC,GAC5D,IAAI,CAAC/Q,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACiN,0BAA0B,GAC5D,IAAI,CAAC/Q,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAAC+H,gBAAgB,GAClD,CAAC;MACP,IAAI,CAAC7L,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAAC8L,sBAAsB,GACtD,IAAI,CAAC5P,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACmN,qBAAqB,GAAG,CAAC,GACtD,IAAI,CAACjR,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACmN,qBAAqB,GAAG,GAAG,IAC7D,IAAI,CAACjR,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAAC0K,WAAW,GAC5C,IAAI,CAACxO,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACmN,qBAAqB,CAAC,GAC1D,CAAC;MAEP,IACE,IAAI,CAACjR,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACuN,kBAAkB,GACpD,IAAI,CAACrR,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAAC8L,sBAAsB,EACxD;QACA,IAAI,CAAC5P,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAACuN,kBAAkB,GAClD,IAAI,CAACrR,YAAY,CAACK,SAAS,CAAC,CAACyD,IAAI,CAAC8L,sBAAsB;MAC5D;MAEA,IAAI7R,MAAM,CAACoD,IAAI,KAAK,oBAAoB,EAAE;QACxC,IAAI,CAACtB,qBAAqB,CAACyR,6BAA6B,CAAC;UACvDjR,SAAS,EAATA,SAAS;UACTkR,gBAAgB,EAAExT,MAAM;UACxByT,yBAAyB,EAAE,IAAI,CAACxR;QAClC,CAAC,CAAC;MACJ;IACF;EAAC;EAAA,OAAAT,aAAA;AAAA,EArwCgCkS,oBAAW;AAAAnS,OAAA,CAAAC,aAAA,GAAAA,aAAA"}
1
+ {"version":3,"names":["_lodash","require","_internalMediaCore","_eventsScope","_interopRequireDefault","_constants","_config","_loggerProxy","_global","_mqaUtil","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","EVENTS","exports","MEDIA_QUALITY","LOCAL_MEDIA_STARTED","LOCAL_MEDIA_STOPPED","REMOTE_MEDIA_STARTED","REMOTE_MEDIA_STOPPED","emptySender","trackLabel","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","emptyReceiver","bytesReceived","meanRtpJitter","StatsAnalyzer","_EventsScope","_inherits2","_super","config","_this","receiveSlotCallback","length","undefined","networkQualityMonitor","statsResults","defaultStats","_classCallCheck2","_defineProperty2","_assertThisInitialized2","mediaType","previousValue","currentValue","isLocal","Error","concat","lastEmittedStartStopEvent","lastEmittedEvent","local","remote","newEvent","emit","file","function","type","isSender","isRemote","_this$successfulCandi","id","successfulCandidatePair","localCandidateId","transport","relayProtocol","toUpperCase","protocol","sendRecvType","STATS","SEND_DIRECTION","RECEIVE_DIRECTION","ipType","REMOTE","LOCAL","internal","candidates","candidateType","ipAddress","ip","portNumber","port","networkType","priority","timestamp","time","connectionType","NETWORK_TYPE","VPN","UNKNOWN","totalRoundTripTime","statsStarted","lastStatsResults","correlationId","mqaSentCount","lastMqaDataSent","_createClass2","key","value","resetStatsResults","_this2","_keys","forEach","includes","recv","send","updateMediaStatus","status","meetingMediaStatus","sendMqaData","_this3","newMqa","cloneDeep","emptyMqaInterval","audioSender","emptyAudioTransmit","getAudioSenderMqa","audioTransmit","push","audioReceiver","emptyAudioReceive","getAudioReceiverMqa","audioReceive","videoSender","emptyVideoTransmit","getVideoSenderMqa","videoTransmit","videoReceiver","emptyVideoReceive","getVideoReceiverMqa","videoReceive","intervalMetadata","peerReflexiveIP","peripherals","information","_UNKNOWN_","name","MEDIA_DEVICES","SPEAKER","MICROPHONE","CAMERA","intervalNumber","data","updateMediaConnection","mediaConnection","startAnalyzer","_this4","getStatsAndParse","then","statsInterval","setInterval","analyzerInterval","mqaInterval","MQA_INTEVAL","_promise","resolve","stopAnalyzer","_this5","sendOneLastMqa","clearInterval","parseGetStatsResult","getStatsResult","resolutions","processOutboundRTPResult","processInboundRTPResult","processTrackResult","compareSentAndReceived","parseCandidate","parseAudioSource","filterAndParseGetStatsResults","statsItem","_this6","types","DEFAULT_GET_STATS_FILTER","report","state","direction","currentDirection","localTrackLabel","csi","audioLevel","totalAudioEnergy","compareLastStatsResult","_this7","getCurrentStatsTotals","keyPrefix","filter","startsWith","reduce","prev","cur","_this7$statsResults$c","getPreviousStatsTotals","_this7$lastStatsResul","getCurrentResolutionsStatsTotals","_this7$statsResults$r","getPreviousResolutionsStatsTotals","_this7$lastStatsResul2","expected","sendAudio","currentStats","previousStats","totalPacketsSent","LoggerProxy","logger","info","emitStartStopEvents","receiveAudio","currentPacketsReceived","previousPacketsReceived","currentSamplesReceived","previousSamplesReceived","sendVideo","framesEncoded","framesSent","receiveVideo","currentFramesReceived","previousFramesReceived","currentFramesDecoded","previousFramesDecoded","currentFramesDropped","previousFramesDropped","sendShare","_this8","getConnectionState","ConnectionState","Failed","trace","getTransceiverStats","transceiverStats","video","receivers","receiver","i","audio","screenShareVideo","screenShareAudio","senders","sender","JSON","parse","_stringify","sendrecvType","kilobytes","frameWidth","frameHeight","width","height","hugeFramesSent","prevBytesSent","keyFramesEncoded","bytes","toFixed","outboundRtpId","packetsSent","totalKeyFramesEncoded","totalNackCount","nackCount","totalPliCount","pliCount","totalFirCount","firCount","encoderImplementation","qualityLimitationReason","qualityLimitationResolutionChanges","retransmittedPacketsSent","totalBytesSent","headerBytesSent","retransmittedBytesSent","receiveSlot","ssrc","idAndCsi","framesReceived","prevBytesReceived","packetsLost","totalPacketsReceived","packetsReceived","lastPacketReceivedTimestamp","currentPacketsLost","currentPacketLossRatio","totalPacketsLost","framesDecoded","keyFramesDecoded","decoderImplementation","fecPacketsDiscarded","fecPacketsReceived","totalBytesReceived","headerBytesReceived","jitter","totalSamplesReceived","totalSamplesDecoded","concealedSamples","remoteSource","framesDropped","trackIdentifier","jitterBufferDelay","jitterBufferEmittedCount","avgJitterDelay","totalPacketsLostOnReceiver","currentPacketLoss","packetsLostOnReceiver","roundTripTime","reportsReceived","overAllPacketLossRatio","determineUplinkNetworkQuality","remoteRtpResults","statsAnalyzerCurrentStats","EventsScope"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable prefer-destructuring */\n\nimport {cloneDeep} from 'lodash';\nimport {ConnectionState} from '@webex/internal-media-core';\n\nimport EventsScope from '../common/events/events-scope';\nimport {\n DEFAULT_GET_STATS_FILTER,\n STATS,\n MQA_INTEVAL,\n NETWORK_TYPE,\n MEDIA_DEVICES,\n _UNKNOWN_,\n} from '../constants';\nimport {\n emptyAudioReceive,\n emptyAudioTransmit,\n emptyMqaInterval,\n emptyVideoReceive,\n emptyVideoTransmit,\n} from '../mediaQualityMetrics/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport defaultStats from './global';\nimport {\n getAudioSenderMqa,\n getAudioReceiverMqa,\n getVideoSenderMqa,\n getVideoReceiverMqa,\n} from './mqaUtil';\nimport {ReceiveSlot} from '../multistream/receiveSlot';\n\nexport const EVENTS = {\n MEDIA_QUALITY: 'MEDIA_QUALITY',\n LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',\n LOCAL_MEDIA_STOPPED: 'LOCAL_MEDIA_STOPPED',\n REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',\n REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED',\n};\n\nconst emptySender = {\n trackLabel: '',\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n};\n\nconst emptyReceiver = {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n};\n\ntype ReceiveSlotCallback = (csi: number) => ReceiveSlot | undefined;\n\n/**\n * Stats Analyzer class that will emit events based on detected quality\n *\n * @export\n * @class StatsAnalyzer\n * @extends {EventsScope}\n */\nexport class StatsAnalyzer extends EventsScope {\n config: any;\n correlationId: any;\n lastEmittedStartStopEvent: any;\n lastMqaDataSent: any;\n lastStatsResults: any;\n meetingMediaStatus: any;\n mqaInterval: NodeJS.Timeout;\n mqaSentCount: any;\n networkQualityMonitor: any;\n mediaConnection: any;\n statsInterval: NodeJS.Timeout;\n statsResults: any;\n statsStarted: any;\n successfulCandidatePair: any;\n receiveSlotCallback: ReceiveSlotCallback;\n\n /**\n * Creates a new instance of StatsAnalyzer\n * @constructor\n * @public\n * @param {Object} config SDK Configuration Object\n * @param {Function} receiveSlotCallback Callback used to access receive slots.\n * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)\n * @param {Object} statsResults Default properties for stats\n */\n constructor(\n config: any,\n receiveSlotCallback: ReceiveSlotCallback = () => undefined,\n networkQualityMonitor: object = {},\n statsResults: object = defaultStats\n ) {\n super();\n this.statsStarted = false;\n this.statsResults = statsResults;\n this.lastStatsResults = null;\n this.config = config;\n this.networkQualityMonitor = networkQualityMonitor;\n this.correlationId = config.correlationId;\n this.mqaSentCount = -1;\n this.lastMqaDataSent = {};\n this.lastEmittedStartStopEvent = {};\n this.receiveSlotCallback = receiveSlotCallback;\n this.successfulCandidatePair = {};\n }\n\n /**\n * Resets cumulative stats arrays.\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n resetStatsResults() {\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (mediaType.includes('recv')) {\n this.statsResults[mediaType].recv.meanRtpJitter = [];\n }\n\n if (mediaType.includes('send')) {\n this.statsResults[mediaType].send.meanRemoteJitter = [];\n this.statsResults[mediaType].send.meanRoundTripTime = [];\n }\n });\n }\n\n /**\n * sets mediaStatus status for analyzing metrics\n *\n * @public\n * @param {Object} status for the audio and video\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public updateMediaStatus(status: object) {\n this.meetingMediaStatus = status;\n }\n\n /**\n * captures MQA data from media connection\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n sendMqaData() {\n const newMqa = cloneDeep(emptyMqaInterval);\n\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (mediaType.includes('audio-send') || mediaType.includes('audio-share-send')) {\n const audioSender = cloneDeep(emptyAudioTransmit);\n\n getAudioSenderMqa({\n audioSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.audioTransmit.push(audioSender);\n } else if (mediaType.includes('audio-recv') || mediaType.includes('audio-share-recv')) {\n const audioReceiver = cloneDeep(emptyAudioReceive);\n\n getAudioReceiverMqa({\n audioReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.audioReceive.push(audioReceiver);\n } else if (mediaType.includes('video-send') || mediaType.includes('video-share-send')) {\n const videoSender = cloneDeep(emptyVideoTransmit);\n\n getVideoSenderMqa({\n videoSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.videoTransmit.push(videoSender);\n } else if (mediaType.includes('video-recv') || mediaType.includes('video-share-recv')) {\n const videoReceiver = cloneDeep(emptyVideoReceive);\n\n getVideoReceiverMqa({\n videoReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.videoReceive.push(videoReceiver);\n }\n });\n\n newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;\n\n // Adding peripheral information\n newMqa.intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});\n if (this.statsResults['audio-send']) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,\n name: MEDIA_DEVICES.MICROPHONE,\n });\n }\n if (this.statsResults['video-send']) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults['video-send'].trackLabel || _UNKNOWN_,\n name: MEDIA_DEVICES.CAMERA,\n });\n }\n\n newMqa.networkType = this.statsResults.connectionType.local.networkType;\n\n this.mqaSentCount += 1;\n\n newMqa.intervalNumber = this.mqaSentCount;\n\n this.resetStatsResults();\n\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'sendMqaData',\n },\n EVENTS.MEDIA_QUALITY,\n {\n data: newMqa,\n // @ts-ignore\n networkType: newMqa.networkType,\n }\n );\n }\n\n /**\n * updated the media connection when changed\n *\n * @private\n * @memberof StatsAnalyzer\n * @param {RoapMediaConnection} mediaConnection\n * @returns {void}\n */\n updateMediaConnection(mediaConnection: any) {\n this.mediaConnection = mediaConnection;\n }\n\n /**\n * Starts the stats analyzer on interval\n *\n * @public\n * @memberof StatsAnalyzer\n * @param {RoapMediaConnection} mediaConnection\n * @returns {Promise}\n */\n public startAnalyzer(mediaConnection: any) {\n if (!this.statsStarted) {\n this.statsStarted = true;\n this.mediaConnection = mediaConnection;\n\n return this.getStatsAndParse().then(() => {\n this.statsInterval = setInterval(() => {\n this.getStatsAndParse();\n }, this.config.analyzerInterval);\n // Trigger initial fetch\n this.sendMqaData();\n this.mqaInterval = setInterval(() => {\n this.sendMqaData();\n }, MQA_INTEVAL);\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Cleans up the analyzer when done\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public stopAnalyzer() {\n const sendOneLastMqa = this.mqaInterval && this.statsInterval;\n\n if (this.statsInterval) {\n clearInterval(this.statsInterval);\n this.statsInterval = undefined;\n }\n\n if (this.mqaInterval) {\n clearInterval(this.mqaInterval);\n this.mqaInterval = undefined;\n }\n\n if (sendOneLastMqa) {\n return this.getStatsAndParse().then(() => {\n this.sendMqaData();\n this.mediaConnection = null;\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Parse a single result of get stats\n *\n * @private\n * @param {*} getStatsResult\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n private parseGetStatsResult(getStatsResult: any, type: string, isSender: boolean) {\n if (!getStatsResult) {\n return;\n }\n\n // Generate empty stats results\n if (!this.statsResults[type]) {\n this.statsResults[type] = {};\n }\n\n if (isSender && !this.statsResults[type].send) {\n this.statsResults[type].send = cloneDeep(emptySender);\n } else if (!isSender && !this.statsResults[type].recv) {\n this.statsResults[type].recv = cloneDeep(emptyReceiver);\n }\n\n if (!this.statsResults.resolutions[type]) {\n this.statsResults.resolutions[type] = {};\n }\n\n if (isSender && !this.statsResults.resolutions[type].send) {\n this.statsResults.resolutions[type].send = cloneDeep(emptySender);\n } else if (!isSender && !this.statsResults.resolutions[type].recv) {\n this.statsResults.resolutions[type].recv = cloneDeep(emptyReceiver);\n }\n\n if (!this.statsResults.internal[type]) {\n this.statsResults.internal[type] = {};\n }\n\n if (isSender && !this.statsResults.internal[type].send) {\n this.statsResults.internal[type].send = cloneDeep(emptySender);\n } else if (!isSender && !this.statsResults.internal[type].recv) {\n this.statsResults.internal[type].recv = cloneDeep(emptyReceiver);\n }\n\n switch (getStatsResult.type) {\n case 'outbound-rtp':\n this.processOutboundRTPResult(getStatsResult, type);\n break;\n case 'inbound-rtp':\n this.processInboundRTPResult(getStatsResult, type);\n break;\n case 'track':\n this.processTrackResult(getStatsResult, type);\n break;\n case 'remote-inbound-rtp':\n case 'remote-outbound-rtp':\n // @ts-ignore\n this.compareSentAndReceived(getStatsResult, type, isSender);\n break;\n case 'remotecandidate':\n case 'remote-candidate':\n this.parseCandidate(getStatsResult, type, isSender, true);\n break;\n case 'local-candidate':\n this.parseCandidate(getStatsResult, type, isSender, false);\n break;\n case 'media-source':\n // @ts-ignore\n this.parseAudioSource(getStatsResult, type);\n break;\n default:\n break;\n }\n }\n\n /**\n * Filters the get stats results for types\n * @private\n * @param {Array} statsItem\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n */\n filterAndParseGetStatsResults(statsItem: any, type: string, isSender: boolean) {\n const {types} = DEFAULT_GET_STATS_FILTER;\n\n // get the successful candidate pair before parsing stats.\n statsItem.report.forEach((report) => {\n if (report.type === 'candidate-pair' && report.state === 'succeeded') {\n this.successfulCandidatePair = report;\n }\n });\n\n statsItem.report.forEach((result) => {\n if (types.includes(result.type)) {\n this.parseGetStatsResult(result, type, isSender);\n }\n });\n\n if (this.statsResults[type]) {\n this.statsResults[type].direction = statsItem.currentDirection;\n this.statsResults[type].trackLabel = statsItem.localTrackLabel;\n this.statsResults[type].csi = statsItem.csi;\n // reset the successful candidate pair.\n this.successfulCandidatePair = {};\n }\n }\n\n /**\n * parse the audio\n * @param {String} result\n * @param {boolean} type\n * @returns {void}\n */\n parseAudioSource(result: any, type: any) {\n if (!result) {\n return;\n }\n\n if (type.includes('audio-send')) {\n this.statsResults[type].send.audioLevel = result.audioLevel;\n this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;\n }\n }\n\n /**\n * emits started/stopped events for local/remote media by checking\n * if given values are increasing or not. The previousValue, currentValue\n * params can be any numerical value like number of receive packets or\n * decoded frames, etc.\n *\n * @private\n * @param {string} mediaType\n * @param {number} previousValue - value to compare\n * @param {number} currentValue - value to compare (must be same type of value as previousValue)\n * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n emitStartStopEvents = (\n mediaType: string,\n previousValue: number,\n currentValue: number,\n isLocal: boolean\n ) => {\n if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {\n throw new Error(`Unsupported mediaType: ${mediaType}`);\n }\n\n // eslint-disable-next-line no-param-reassign\n if (previousValue === undefined) previousValue = 0;\n // eslint-disable-next-line no-param-reassign\n if (currentValue === undefined) currentValue = 0;\n\n if (!this.lastEmittedStartStopEvent[mediaType]) {\n this.lastEmittedStartStopEvent[mediaType] = {};\n }\n\n const lastEmittedEvent = isLocal\n ? this.lastEmittedStartStopEvent[mediaType].local\n : this.lastEmittedStartStopEvent[mediaType].remote;\n\n let newEvent;\n\n if (currentValue - previousValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;\n } else if (currentValue === previousValue && currentValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;\n }\n\n if (newEvent && lastEmittedEvent !== newEvent) {\n if (isLocal) {\n this.lastEmittedStartStopEvent[mediaType].local = newEvent;\n } else {\n this.lastEmittedStartStopEvent[mediaType].remote = newEvent;\n }\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult',\n },\n newEvent,\n {\n type: mediaType,\n }\n );\n }\n };\n\n /**\n * compares current and previous stats to check if packets are not sent\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n private compareLastStatsResult() {\n if (this.lastStatsResults !== null && this.meetingMediaStatus) {\n const getCurrentStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce((prev, cur) => prev + (this.statsResults[cur]?.recv[value] || 0), 0);\n\n const getPreviousStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce((prev, cur) => prev + (this.lastStatsResults[cur]?.recv[value] || 0), 0);\n\n const getCurrentResolutionsStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce((prev, cur) => prev + (this.statsResults.resolutions[cur]?.recv[value] || 0), 0);\n\n const getPreviousResolutionsStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce(\n (prev, cur) => prev + (this.lastStatsResults.resolutions[cur]?.recv[value] || 0),\n 0\n );\n\n if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {\n // compare audio stats sent\n // NOTE: relies on there being only one sender.\n const currentStats = this.statsResults['audio-send'].send;\n const previousStats = this.lastStatsResults['audio-send'].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n currentStats.totalAudioEnergy === previousStats.totalAudioEnergy ||\n currentStats.totalAudioEnergy === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present`,\n currentStats.totalAudioEnergy\n );\n }\n\n if (currentStats.audioLevel === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user`\n );\n }\n }\n\n this.emitStartStopEvents(\n 'audio',\n previousStats.totalPacketsSent,\n currentStats.totalPacketsSent,\n true\n );\n }\n\n if (this.meetingMediaStatus.expected.receiveAudio) {\n // compare audio stats received\n const currentPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');\n const previousPacketsReceived = getPreviousStatsTotals(\n 'audio-recv',\n 'totalPacketsReceived'\n );\n const currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');\n const previousSamplesReceived = getPreviousStatsTotals(\n 'audio-recv',\n 'totalSamplesReceived'\n );\n\n if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received`,\n currentPacketsReceived\n );\n } else if (\n currentSamplesReceived === previousSamplesReceived ||\n currentSamplesReceived === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio samples received`,\n currentSamplesReceived\n );\n }\n\n this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);\n }\n\n if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {\n // compare video stats sent\n const currentStats = this.statsResults['video-send'].send;\n const previousStats = this.lastStatsResults['video-send'].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n currentStats.framesEncoded === previousStats.framesEncoded ||\n currentStats.framesEncoded === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded`,\n currentStats.framesEncoded\n );\n }\n\n if (\n this.statsResults.resolutions['video-send'].send.framesSent ===\n this.lastStatsResults.resolutions['video-send'].send.framesSent ||\n this.statsResults.resolutions['video-send'].send.framesSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent`,\n this.statsResults.resolutions['video-send'].send.framesSent\n );\n }\n }\n\n this.emitStartStopEvents('video', previousStats.framesSent, currentStats.framesSent, true);\n }\n\n if (this.meetingMediaStatus.expected.receiveVideo) {\n // compare video stats received\n const currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');\n const previousPacketsReceived = getPreviousStatsTotals(\n 'video-recv',\n 'totalPacketsReceived'\n );\n const currentFramesReceived = getCurrentResolutionsStatsTotals(\n 'video-recv',\n 'framesReceived'\n );\n const previousFramesReceived = getPreviousResolutionsStatsTotals(\n 'video-recv',\n 'framesReceived'\n );\n const currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');\n const previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');\n const currentFramesDropped = getCurrentResolutionsStatsTotals(\n 'video-recv',\n 'framesDropped'\n );\n const previousFramesDropped = getPreviousResolutionsStatsTotals(\n 'video-recv',\n 'framesDropped'\n );\n\n if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received`,\n currentPacketsReceived\n );\n } else {\n if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video frames received`,\n currentFramesReceived\n );\n }\n\n if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded`,\n currentFramesDecoded\n );\n }\n\n if (currentFramesDropped - previousFramesDropped > 10) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped`,\n currentFramesDropped - previousFramesDropped\n );\n }\n }\n\n this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);\n }\n\n if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {\n // compare share stats sent\n\n const currentStats = this.statsResults['video-share-send'].send;\n const previousStats = this.lastStatsResults['video-share-send'].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n currentStats.framesEncoded === previousStats.framesEncoded ||\n currentStats.framesEncoded === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded`,\n currentStats.framesEncoded\n );\n }\n\n if (\n this.statsResults.resolutions['video-share-send'].send.framesSent ===\n this.lastStatsResults.resolutions['video-share-send'].send.framesSent ||\n this.statsResults.resolutions['video-share-send'].send.framesSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames sent`,\n this.statsResults.resolutions['video-share-send'].send.framesSent\n );\n }\n }\n }\n\n if (this.meetingMediaStatus.expected.sendShare) {\n // TODO:need to check receive share value\n // compare share stats received\n const currentPacketsReceived = getCurrentStatsTotals(\n 'video-share-recv',\n 'totalPacketsReceived'\n );\n const previousPacketsReceived = getPreviousStatsTotals(\n 'video-share-recv',\n 'totalPacketsReceived'\n );\n const currentFramesReceived = getCurrentResolutionsStatsTotals(\n 'video-share-recv',\n 'framesReceived'\n );\n const previousFramesReceived = getPreviousResolutionsStatsTotals(\n 'video-share-recv',\n 'framesReceived'\n );\n const currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');\n const previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');\n const currentFramesDropped = getCurrentResolutionsStatsTotals(\n 'video-share-recv',\n 'framesDropped'\n );\n const previousFramesDropped = getPreviousResolutionsStatsTotals(\n 'video-share-recv',\n 'framesDropped'\n );\n\n if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received`,\n currentPacketsReceived\n );\n } else {\n if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames received`,\n currentFramesReceived\n );\n }\n\n if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded`,\n currentFramesDecoded\n );\n }\n\n if (currentFramesDropped - previousFramesDropped > 10) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped`,\n currentFramesDropped - previousFramesDropped\n );\n }\n }\n\n // we are not calling emitStartStopEvents() for sending or receiving share because sharing is often started and stopped\n // in meetings and this.meetingMediaStatus.expected values can be out of sync with the actual packet flow\n // so we would send \"sharing stopped\" events incorrectly\n }\n }\n }\n\n /**\n * Does a `getStats` on all the transceivers and parses the results\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {Promise}\n */\n private getStatsAndParse() {\n if (!this.mediaConnection) {\n return Promise.resolve();\n }\n\n if (\n this.mediaConnection &&\n this.mediaConnection.getConnectionState() === ConnectionState.Failed\n ) {\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state'\n );\n\n return Promise.resolve();\n }\n\n LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');\n\n return this.mediaConnection.getTransceiverStats().then((transceiverStats) => {\n transceiverStats.video.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `video-recv-${i}`, false)\n );\n transceiverStats.audio.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `audio-recv-${i}`, false)\n );\n transceiverStats.screenShareVideo.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `video-share-recv-${i}`, false)\n );\n transceiverStats.screenShareAudio.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `audio-share-recv-${i}`, false)\n );\n\n transceiverStats.video.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-send', true);\n });\n transceiverStats.audio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-send', true);\n });\n transceiverStats.screenShareVideo.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-share-send', true);\n });\n transceiverStats.screenShareAudio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);\n });\n\n this.compareLastStatsResult();\n\n // Save the last results to compare with the current\n // DO Deep copy, for some reason it takes the reference all the time rather then old value set\n this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));\n\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats'\n );\n });\n }\n\n /**\n * Processes OutboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n */\n private processOutboundRTPResult(result: any, mediaType: any) {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n if (result.bytesSent) {\n let kilobytes = 0;\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent =\n result.hugeFramesSent;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {\n this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;\n }\n if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {\n this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n }\n if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {\n this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded =\n result.keyFramesEncoded;\n }\n\n const bytes =\n result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;\n\n this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;\n\n kilobytes = bytes / 1024;\n\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n this.statsResults[mediaType].bytesSent = kilobytes;\n\n this.statsResults[mediaType][sendrecvType].framesEncoded =\n result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;\n this.statsResults[mediaType][sendrecvType].keyFramesEncoded =\n result.keyFramesEncoded -\n this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;\n this.statsResults.internal[mediaType].outboundRtpId = result.id;\n\n if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {\n this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;\n }\n\n this.statsResults[mediaType][sendrecvType].packetsSent =\n result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;\n this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;\n\n // Data saved to send MQA metrics\n\n this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;\n this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].encoderImplementation =\n result.encoderImplementation;\n this.statsResults[mediaType][sendrecvType].qualityLimitationReason =\n result.qualityLimitationReason;\n this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges =\n result.qualityLimitationResolutionChanges;\n this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent =\n result.retransmittedPacketsSent;\n this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;\n this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;\n this.statsResults[mediaType][sendrecvType].retransmittedBytesSent =\n result.retransmittedBytesSent;\n }\n }\n\n /**\n * Processes InboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n */\n private processInboundRTPResult(result: any, mediaType: any) {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n if (result.bytesReceived) {\n let kilobytes = 0;\n const receiveSlot = this.receiveSlotCallback(result.ssrc);\n const idAndCsi = receiveSlot\n ? `id: \"${receiveSlot.id || ''}\"${receiveSlot.csi ? ` and csi: ${receiveSlot.csi}` : ''}`\n : '';\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults.resolutions[mediaType][sendrecvType].framesReceived =\n result.framesReceived;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {\n this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived =\n result.bytesReceived;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {\n this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {\n this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {\n this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived =\n result.packetsReceived;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {\n this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp =\n result.lastPacketReceivedTimestamp;\n }\n\n const bytes =\n result.bytesReceived -\n this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;\n\n this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;\n\n kilobytes = bytes / 1024;\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);\n\n this.statsResults[mediaType][sendrecvType].pliCount =\n result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;\n this.statsResults[mediaType][sendrecvType].currentPacketsLost =\n result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;\n if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {\n this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].packetsReceived =\n result.packetsReceived -\n this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;\n this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived =\n result.packetsReceived;\n\n if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {\n if (receiveSlot) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ${idAndCsi}`,\n this.statsResults[mediaType][sendrecvType].packetsReceived\n );\n }\n }\n\n // Check the over all packet Lost ratio\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =\n this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0\n ? this.statsResults[mediaType][sendrecvType].currentPacketsLost /\n (this.statsResults[mediaType][sendrecvType].packetsReceived +\n this.statsResults[mediaType][sendrecvType].currentPacketsLost)\n : 0;\n if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ${idAndCsi}`,\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio\n );\n }\n\n // TODO: check the packet loss value is negative values here\n\n if (result.packetsLost) {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost =\n result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;\n } else {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp =\n result.lastPacketReceivedTimestamp;\n\n // From Thin\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;\n\n this.statsResults[mediaType][sendrecvType].decoderImplementation =\n result.decoderImplementation;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;\n this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;\n this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;\n\n this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);\n\n // Audio stats\n\n this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;\n this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;\n this.statsResults[mediaType][sendrecvType].totalSamplesReceived =\n result.totalSamplesReceived || 0;\n this.statsResults[mediaType][sendrecvType].totalSamplesDecoded =\n result.totalSamplesDecoded || 0;\n this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;\n }\n }\n\n /**\n * Processes remote and local candidate result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @param {boolean} isSender\n * @param {boolean} isRemote\n *\n * @returns {void}\n */\n parseCandidate = (result: any, type: any, isSender: boolean, isRemote: boolean) => {\n if (!result || !result.id) {\n return;\n }\n\n // We only care about the successful local candidate\n if (this.successfulCandidatePair?.localCandidateId !== result.id) {\n return;\n }\n\n let transport;\n if (result.relayProtocol) {\n transport = result.relayProtocol.toUpperCase();\n } else if (result.protocol) {\n transport = result.protocol.toUpperCase();\n }\n\n const sendRecvType = isSender ? STATS.SEND_DIRECTION : STATS.RECEIVE_DIRECTION;\n const ipType = isRemote ? STATS.REMOTE : STATS.LOCAL;\n\n this.statsResults.internal.candidates[result.id] = {\n candidateType: result.candidateType,\n ipAddress: result.ip, // TODO: add ports\n portNumber: result.port,\n networkType: result.networkType,\n priority: result.priority,\n transport,\n timestamp: result.time,\n id: result.id,\n type: result.type,\n };\n\n this.statsResults.connectionType[ipType].candidateType = result.candidateType;\n this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;\n\n this.statsResults.connectionType[ipType].networkType =\n result.networkType === NETWORK_TYPE.VPN ? NETWORK_TYPE.UNKNOWN : result.networkType;\n this.statsResults.connectionType[ipType].transport = transport;\n\n this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;\n };\n\n /**\n * Process Track results\n *\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n private processTrackResult(result: any, mediaType: any) {\n if (!result || result.type !== 'track') {\n return;\n }\n\n const sendrecvType =\n result.remoteSource === true ? STATS.RECEIVE_DIRECTION : STATS.SEND_DIRECTION;\n\n if (sendrecvType === STATS.RECEIVE_DIRECTION) {\n this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;\n this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;\n }\n\n if (result.trackIdentifier && !mediaType.includes('audio')) {\n this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier =\n result.trackIdentifier;\n\n const jitterBufferDelay = result && result.jitterBufferDelay;\n const jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;\n\n this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay =\n jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;\n\n // Used to calculate the jitter\n this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay =\n result.jitterBufferDelay;\n this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount =\n result.jitterBufferEmittedCount;\n }\n }\n\n /**\n *\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n compareSentAndReceived(result, type) {\n // Don't compare on transceivers without a sender.\n if (!type || !this.statsResults.internal[type].send) {\n return;\n }\n\n const mediaType = type;\n\n if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {\n this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n }\n\n const currentPacketLoss =\n result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;\n\n this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n\n this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);\n this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);\n\n this.statsResults[mediaType].send.timestamp = result.timestamp;\n this.statsResults[mediaType].send.ssrc = result.ssrc;\n this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;\n\n // Total packloss ratio on this video section of the call\n this.statsResults[mediaType].send.overAllPacketLossRatio =\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0\n ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver /\n this.statsResults[mediaType].send.totalPacketsSent\n : 0;\n this.statsResults[mediaType].send.currentPacketLossRatio =\n this.statsResults[mediaType].send.packetsLostOnReceiver > 0\n ? (this.statsResults[mediaType].send.packetsLostOnReceiver * 100) /\n (this.statsResults[mediaType].send.packetsSent +\n this.statsResults[mediaType].send.packetsLostOnReceiver)\n : 0;\n\n if (\n this.statsResults[mediaType].send.maxPacketLossRatio <\n this.statsResults[mediaType].send.currentPacketLossRatio\n ) {\n this.statsResults[mediaType].send.maxPacketLossRatio =\n this.statsResults[mediaType].send.currentPacketLossRatio;\n }\n\n if (result.type === 'remote-inbound-rtp') {\n this.networkQualityMonitor.determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults: result,\n statsAnalyzerCurrentStats: this.statsResults,\n });\n }\n }\n}\n"],"mappings":"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"}