From d7796fcda4344fea0afc49083b4a11f19a345e40 Mon Sep 17 00:00:00 2001 From: Johnpaul Chiwetelu <49923152+Myestery@users.noreply.github.com> Date: Fri, 10 Oct 2025 05:29:06 +0100 Subject: [PATCH] Vuenodes/audio widgets (#5627) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This pull request introduces a new audio playback widget for node UIs and integrates it into the node widget system. The main changes include the implementation of the `WidgetAudioUI` component, its registration in the widget registry, and updates to pass node data to the new widget. Additionally, some logging was added for debugging purposes. **Audio Widget Implementation and Integration:** * Added a new `WidgetAudioUI.vue` component that provides audio playback controls (play/pause, progress slider, volume, options) and loads audio files from the server based on node data. * Registered the new `WidgetAudioUI` component in the widget registry by importing it and adding an entry for the `audioUI` type. [[1]](diffhunk://#diff-c2a60954f7fdf638716fa1f83e437774d5250e9c99f3aa83c84a1c0e9cc5769bR21) [[2]](diffhunk://#diff-c2a60954f7fdf638716fa1f83e437774d5250e9c99f3aa83c84a1c0e9cc5769bR112-R115) * Updated `NodeWidgets.vue` to pass `nodeInfo` as the `node-data` prop to widgets of type `audioUI`, enabling the widget to access node-specific audio file information. **Debugging and Logging:** * Added logging of `nodeData` in `LGraphNode.vue` and `WidgetAudioUI.vue` to help with debugging and understanding the data structure. [[1]](diffhunk://#diff-a7744614cf842e54416047326db79ad81f7c7ab7bfb66ae2b46f5c73ac7d47f2R188-R189) [[2]](diffhunk://#diff-71cce190d74c6b5359288857ab9917caededb8cdf1a7e6377578b78aa32be2fcR1-R284) ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-5627-Vuenodes-audio-widgets-2716d73d365081fbbc06c1e6cf4ebf4d) by [Unito](https://www.unito.io) --------- Co-authored-by: GitHub Action Co-authored-by: Arjan Singh <1598641+arjansingh@users.noreply.github.com> Co-authored-by: filtered <176114999+webfiltered@users.noreply.github.com> Co-authored-by: Christian Byrne Co-authored-by: Claude Co-authored-by: Alexander Brown Co-authored-by: Jin Yi Co-authored-by: DrJKL Co-authored-by: Robin Huang Co-authored-by: github-actions --- ...ue-nodes-upload-widgets-chromium-linux.png | Bin 69508 -> 69309 bytes src/extensions/core/uploadAudio.ts | 35 +- src/lib/litegraph/src/types/widgets.ts | 6 + src/locales/en/main.json | 12 +- .../vueNodes/components/NodeWidgets.vue | 7 +- .../widgets/components/WidgetAudioUI.vue | 60 +++ .../widgets/components/WidgetRecordAudio.vue | 320 ++++++++++++++ .../components/audio/AudioPreviewPlayer.vue | 393 ++++++++++++++++++ .../composables/audio/useAudioPlayback.ts | 80 ++++ .../composables/audio/useAudioRecorder.ts | 107 +++++ .../composables/audio/useAudioWaveform.ts | 145 +++++++ .../composables/useAudioRecordWidget.ts | 24 ++ .../widgets/registry/widgetRegistry.ts | 31 +- .../vueNodes/widgets/utils/audioUtils.ts | 54 +++ src/schemas/nodeDef/nodeDefSchemaV2.ts | 9 + src/scripts/widgets.ts | 4 +- .../composables/useWidgetRenderer.test.ts | 75 ++-- vitest.setup.ts | 10 + 18 files changed, 1305 insertions(+), 67 deletions(-) create mode 100644 src/renderer/extensions/vueNodes/widgets/components/WidgetAudioUI.vue create mode 100644 src/renderer/extensions/vueNodes/widgets/components/WidgetRecordAudio.vue create mode 100644 src/renderer/extensions/vueNodes/widgets/components/audio/AudioPreviewPlayer.vue create mode 100644 src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioPlayback.ts create mode 100644 src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioRecorder.ts create mode 100644 src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioWaveform.ts create mode 100644 src/renderer/extensions/vueNodes/widgets/composables/useAudioRecordWidget.ts create mode 100644 src/renderer/extensions/vueNodes/widgets/utils/audioUtils.ts diff --git a/browser_tests/tests/vueNodes/widgets/load/uploadWidgets.spec.ts-snapshots/vue-nodes-upload-widgets-chromium-linux.png b/browser_tests/tests/vueNodes/widgets/load/uploadWidgets.spec.ts-snapshots/vue-nodes-upload-widgets-chromium-linux.png index 6e960b8bb8b1639a802c03fdea8c433d659d494d..fe1f041f8d35fd8907384440b5ffaf584cf2e955 100644 GIT binary patch literal 69309 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�zB%@X^lWI(-h6qvCYd3)J`RmfZVVj-z?`Xpb5lJ7y zK}XjoC+!tO@KVhxE|$e;_Xfv<>S?|Ohk8s3=4-WkjJ%ZkNHq$eM2Ja9Yyl|5-kt*| zL0+B-UgvKsNSq<(dN9*_6tHL~&4K!mP5mq(VRB<*;}9~~sUbRLFR@^)vGI7&ohRDf zZ!f%d7L3`Xk6mXBm{(T}097)H*V*hM6AGgDo#h_$gsju^S10GMDk>^oJnZS}Vv3gn zax4VN=L(915{3FQ0gFkpY6}oZIm)^Q6hqtLG!cYH4@eD5P@>6AH?9W{_W8i`P?#*CLKS9UYyxcz{bI|5WMUPxMw$3q?jo0z(ZR$vvflj8P;cr1R*=CY|sZ z_{6(5p=K0J;UTk1fS$R3-y=5fT| z{8|xN`)dRD*GLPpdA+4h2yDFw$4iKpX+MW5E8tK~dH=nEcTtGYWSNcK-S!_E5HF_M z*%T6dzk8}gFUi;R1_M>1JOt4wpH|rr${w5Vb6-=(Sfx?y=#@Rcvjg;bx+$K%)JR3z zC>}3B2CutG2tIpg&c3u2-Sgjwyy{W}qqD1qkLkT%_O zh)&kV_O|F0V3c^Nk|b!G2tf&OaQyYaO|t||Y>#c)4Tau+105Jl)t|YeVUCHC^8w^1 zinRQp$i2H{R%oRumt~0WXOub*#+-`L+2(q%TC`d zFe5C;fdr!a?lpJx%c`yGz5KFKtJ~I|N@Q7sYxc=*38b^SE3tF@z^(>{`#*c;wRzG$ z7G@MZi@W;{(!$QksvKh|3|)b`Wj~BxnA~iT3;*S?9ptAjOYBifIgL`QC0#Y!6KkNH4$Rw*Xj|Cmfj^h> zFgWPnqcs-d2P=VzsY3`FMgHbvXtI(s8<(-F+GZbkXgWzot%EZeD=&@Dai!%utsOL8 z#+2ptboZE#6S->cR$1`urj&O|DrqPwnv#JR#w~aTVpI|2#SQHhGyBS$tEe(2q7l?r zktjq+N%h6;Yb`#wH+Jf%LXQ_hs(hvKw|W)XXbR4f)vGLLP0y1Eu@a?)M7QyFWainB zCdYtKin#qWUT?IaZ(ZT(+SV3YXB85D6`RvdhiQr8ytSykp&>h}q4M1MA1f=n$i}l= zq(podg!w3?m{_AocTaGGyGVSC^Rb=K`bCb)#BL%wbxpG>E7z@XQ8QQnmy=_!zF|_K zqQ;v?k0~lrO!i+{oGPelF3p^c%B#z|JZygsrVJxKg$lMX&ttE{#6zDP8LAkD`mFqX z`w3-r5#>bO_$Td|u>|}zvvUmsg4nFld!MU@JY?{wp~YfRuxtL)sXR>lX0%~ z!NLBFy=;N%bz(AKOkQf^#SZuU;ZyfioaGl^_do0sj}99~Q;e-nGE8uMudG-L<>}5f zV>2|qzPjqF(k{51lRrh6-s0ISz$HNclud_U#qRX`yQY0-9Z$Jw@_xyFokHYp!;)wv zg}^bo@mKqH!fi7wG}Q1?JA3IjsFm^6jSaQGbm|wY2X0LdFi>mHt!l3KM5`vHb?0N7 z)sZ;*llii`!A&iFU2R(4M%Z`R_ALzEfm&;opM~d0#ovQJ;~tiF)q)LC=f>z}K}As! zdFPJ$%^Ubl;MkWR_#WNLJ`VPkRY}}9xjne%V*<`4!%}C`uZmTjPs6nMx7cIm&m-|A zUs9^C3Yz7(Uy8w3jRt1T{i*m>f6 z@|9mEo^9SPxc1l}(t9{b;>YLj<-B2n%Fad#09xrjTrbF7LAHNN+igDpZfP?Czq<7- zw2zonN=aT4=uer_)=E;US?fv{vODQwdt$n2YAV@OJ@!5(@2RI&`S+wsS&#j#{CyAD zxG8PpDHTUlTuXED&ldlY@0#w~(zW4J{1>MQhBOoW&~<{HR_!FVX#KwSzvEGxHTg}^ ztEBfr5NLwQ5a!OG>&nTwOqPA}H5(eOxStw!j;WKUV_1qIe`+)$3-d;$_Ue#i8yXsQ z*Vm|0rZy?{#SH^0*IPx$HR{i>6LXHdQ)iWvEl5bq#|#(^V;NY{cjr&qvUZVpsx2lr zakgI|s2keHhwoIXZ#h`zS4P&l*vpR>5&t`8T+g7@RyCZ%P*ap5%ast0%j~MZ4ITRqsL~~DANneGECmroMTFD zSSOgTW-7tb6K_j&>%pDIO#M3I`K6sSnW>5%@E^I1vMZQ4VS8lCCdyx;zrMnJl8vX? ztw*nq&#G&6cGlRz<5J1M*blGI=uvp5GDmplC zDkHA{3}0vpil0ATnfo?|s?wdMK80#|Ku$s3Oj-Ng@1+Cf-^q@f=?s@aEFU>3Bjf#p z5gD#s25G`43tpW!kz%ed*voPcG#1@)A{pK9F%Yj!;}{HB>!+cfq6R;I$}~{D46E;( z`w*3EQI7L_k4eR1k`k6u#a`-kx+O=p>v?p>)?9GXZzY!F$2q=8Y=?*i@~k1lZwe{|AMpF2`%^_`%_e0 zDXg!ZL;5*4iYn)rxtvcu1qux(Df5WWu-HE)g@^n%dZcbYuB-1Km=e}y zi5sg` zJ72JGxITMOrAP+dd5La5`kcu!}gTc2)!L5El|ksY39J#4?)Ty{fUU zpWQ8*zwwLR)^awJ>|4(NM08hfI_>dPRWdKHY}>=-_?-XQc9Z|hnC^sYOX})q^#JPn zttL@VbTxsuwr-9|`8&y;3+kh^8SSm1N#xt2G;lAs-4R5<#nVq=No$k_sg3TYe zSFF8xf}j-$L+PDr)8m7dNk;hwW@ zWt|73&HSpj7j;JoPbCAA&e%C{r6<|*b+^a0XYNWC4@IpSb~=1ks-}~p2rpLCUe}k^ z^@4?1uHJIOIy%n&(b@EpBM|xVMX>2bUTueuA{%0t3^BaC<4!gV zYdp=ym$q+ia_A%8@?*C>#isg6n>MnEMH>hB8>~i>(j)%VG&K2*jjgLT(&BddC6nfp zlPW!UkeiEws`2f3EKlq8wKdM<{@dHzcSy|4%vrKpns%!LwlQ}kQ&33o$O1l8Ji_-y z|Ds_wZ4U_e-U_)JKeFdrQ+*%z>(iMF0n%yuT=ga229N%Ht^3LC+aWYg8B!RLt9#@8 zz=bNFqs@MgY?5!mR%eQP!_?qM?Rou@=xDXBrp>NCq?EF{67%oC3$jkH z`L`5I$lrC#T6t1{o4-GPUMz+jZ{x*BYC~`uUzxafKepZs4neG40dq29}Zt3E$jgUT>sUnuGP0m#D9cd zA+Mj*WC2BQ@I5iN(2aleNQ#eb%r>$vB!5(1QwbzwWBil;G5eF?Y)cyw7EG&nqFR_? z-K|ZektmGn_jqFy-$29oue-U<6$_X7@i$!`K;qCra&li)>j$_nkf3k| z)Yo!vl4oB?9$ymiOptfT=^|uOCEJ#a2tSpPbKU29`a~qimQ3E~%7A<*0kLaR)U`Tio2*0N-lY# zjhu)_+rDON4Hy;}btt_MfUp=sF&@EXse8)E#l7o@jth#fo1&fI|J*L6Oyvro{S@#M~zcY6E*r3o9A`L|`w9UMB-IIX> zI4_8U{=)(|6D#A_j7zzV_87;I_)ErpU&B}b6biqR5;9||C{-HMa9{-&PQnZ}w5`r~;5 zQ4t|kUw>{2B9H%xltx}8J?=o?H_HBZm!_{PSv%z>ACd~vaYO$VM|D0Hco(S&D$`Le z=d>F=3K)`?G6~^2H<3tQgYyi%d)9|ZN;Q!r)Yj-A?Qyqbo&JMI_WRp-Mut%oG6@Db zVg5~Fms|9$pIi0I{}V!j=_J?wg)wh%(7MR1+p_QaZ8*Vg_H5hi2LY3ATnsO_a`FB1h2fL%4yfn|gbVYqnFiZXe5?#HRa5($}E{{{_sS~fQ z#j-ubD?mRu07iYkVuBjDSoL%=zC3DEmuOQ0YrC`@68E%lfS3=eOQ0 zGE??nt{UYr7Ye@q6K6n3-hx@2j?VEs*DQaWrOy8xE)pZvkW53Iw|AHBGQXylJud<$ zx+)8INR2z%Fhc#e*D(6qPFY9Y-afHE7p^hxAWyb4{l=3_`}R;q+C$y?PV3Zid4}yK zX<9Os0H$0W>1$y~1+o24PGf-}m55YaR5?i$3w={K@Xu}Tm-vAEnj`CPb%|~b@{!sj zQL>LsqrqAlm!hv$aE;TNMcw^r)bvYG0pyb5&Z6d{JU62zWwcK>`7TtYM;<>YHh2JO zVTn=$i9FIJf-p1i+fOcKjP_Vf_}U+?XyxiL`Nm}WH(8m^7*-i=VmmcmDql#Ha=K%M z9-(enb|0|!U2}wtu{&yBdARTK*NYG18YmL)mKarmOGad*q1ic20(KoR%P*kwlkYUc zoUuSs_$TMZ{f4!D=p-Vb0`kQRIQlSZi3kkp&i=}VsqqiRdp~56<%)ciFg}j+mc>y{ zQR!p7Z%~ovCr>clzB!1QX~W)EDY~9fvxbqaZ^YkJX$2|&LdaPDmiC`m3Cf@;RkFjd za;M3qAh$pmbL5*hDS92(+~1!+|5A~3>`=6q>Rd@3o+HnocH!K9liW$@Y%eW&p8D3| zL=8qb8jR5=XeSe50fG2GBbNa`Unr&zAdeI+8%U;WAVwRExFOk#F3mZn9(D4Safs*=(_857AqjtDWbjD-C0+LkoH_Y8zb3&jU^*pw zlzeN{TBxP#2Q$8Lu8_#xr|UA#{w0MJ+5_^A-G{X|74bOvxwB?w0}^JF4i`(Zp&A&6 zx5oJ<ArSNoQ&f+8VGu@sqIiPEFsEp{ih2H%$oOOC^f+Tli;Moi*w)>^ zNG(J5e&&ED9(3ESdTia4>|vie?MBfY24DYQb*q5MiQ_A5)8#XNSTmk=PxC-%2_9r$m@U^bJBc8!I;CLl6@kG_k|^jlEkc(%GYm$v7_2%Bi{G=Ya1t12=(BkzT(F!X-I{^n!L|97$S?mU7#!~Q=>eX4Z}H%7w17;rFlrEJ z2lLH`X-%^5mu*4kGA>*PKnlM6-`&D_Zss^-5D`impkluARYyFD;*A^svSu*BLn|^l z|Ayu1bBg{!&(=$;_5SiZ_w~xce%6rfC8WkLpZm*S7Q-BSI)2aoWYr6`HX^UmYT8K8 zUx2Boyb)Ljpb1e*S30 zX?%u3*2SBoMuaYwn;lc*E$E{= z!&oeLyj^NvT^DU(iH4v8LJB1v>HFc#l>y`S%So0>X3!XK(bkshZWzI;@JVfdNx)w+h# zN>NHtTar-G!QR^5;jIW5ODTpxN)PJ>J@GRSNx@DPi`lm1wqAMkKU{I|Si|Hay5(^8 zv7E}^>5Jf_$xH2XNbnDCui#c}N`5JI6u!l7$MqZT%U*Byt0toX!x*POBc0lKvrWcS z8nb$?u+C~ed(ou-V}58@mPtrRPQ=;UK0lp;UB7FI9IvXqGET09m7{|kdp%>+{!&81 z_VDyvTi4?9VBqf5ImqMvSatrV+c#^Q+Ex~?@>OSBhe+Lz%nPl2(;w zJ}7Q{<||6cxD;<3r}h;)L;fhz^(AV+m8JVQ)BC~x-~t*`ZVh?Yq>V(kidoS7$Q~&g z9VRyY_fQMf=E|mI|E)QXxrpP>*1~&!#g6D*k2H}wk*~EfLy7fie!aywgdQ4rg23A}XCA*EtP|D#6jodH??%C_9n%5XD3S>+8zP-)%e>;4f#N(UxoWIR z0-q(@v*c%Sv+I~Ym=Ha|o~-KJm{rE|L^0mrNU4AJS!HdhKMzQyaVFwVM@rCOVHEv_ z;)PZq6_PMetTI%e>^bj`e2s#JM*^?Cg1-AZfoMYiZQ-)zpQ~&8yGm+T8k28eEhRuf7J+`FczZIlrj(ZoC@gg&cwCYYmui&^I`;LO; zP$7dmI0_j3=BCXdD>~2BwWGe{rFu#^9}l?5|JTDJFlRSAC=Y~v4mD(l=-^p%>}}RL zjbYO0uV#hxJ+IwtN{2bW7w>p?+_Bd2XN{&=K0=@W<9?K$p18x=+uO1vYE_!OJMGIR z`LgW;ZEZLAee%Z2QC2#!EaA{6kY|X04ZqfDqGq^q_Pb_|y{}(m+wiaG)laO!*w%zj z2b|#1kzkE=mIb3yycLYkac`%7=)S%e zpMV9ozB#=0GYOg2dHq&=_~Uc#h8-ZI6_N1{lpW1~6oHT-Q13e$HiYDb%Q?|rp;q$r z?Pd&RrrAMUTuIKKDbJk|O66FEc|ql<6};{9;fef}ctETmu8!?Mh3?-{5qYKs_^%XY z>4(g|Kz(ClC0U*NCgt^azA_nXa{&;YXS*mi$B!=`278o%a_z5wWv#(;m6fsF#iO?7 z+H?H3*z|8MXfNItaLm1x=p1TcumabA8oGalw+o9RaAg7-=u>eQIB^49?I|jzSFlvx*bL!3E{--)=Cu zx^QtP?#v#9N9l;;sf0(CRM%E(r$ymFNp1GvJ#~!+^ta>1MaQcO!h2?Ob@nZ-c3kVT zbTax8L%W9~kv|`cf4{1~g1dwAsE*M#E~C|~qYv~%gR!}vmb#Y)s=eB2%70!D>u{I046C zW9=9edv?b)WBQMZiu{f*8TETHtZW?X6d7WAL8fG~i|c!h^Eq4DTTO#$)CMff9NC4Z zigIj$S4YADfgiI*kXg2jSesCx>(u?6y*Tp~+X?8qwRu>jQ_?zHm$mg1QH`iAGF+&w z;@QwVO4=i&%nm(akka@#vs)OdTZ|iN-i~XxL%hvl;da&+GGIA%F_UdkiYQ?dqG_Kx zc8;y#KH!53WLqd#u?*sbo8?8QepDBpUtm-9K41G*^SCjCiWExKfukSM*R@CQxZO1V zTMMY7=%{V($-24DEA}O;Ca|CVFd-Cxjhvx|9Vm2^lnN=Tt| zB)_e5z2J9R7DvKB)0u)=*jTj&6l%#t#Cvv@Iu~4fH$^O9kB$n}KHiJfc5y8Zk`oIq zFS@vFF2LDpb=|4-)M`$*cN-8+F6?i#+ACklZp$Vor=qa+Ip=oSEp$-!qxsG21`N<- zTD^dEXQ^Slcwy;PX=gq2)|e?$-rkot&*{Vn5Tr{`C!WvrQ$Ku_3xbI~9@Ux2Sd8#k z*zppNW&MKH@e-NpWN1L7IQklT5HWWPz+~d;BYf4}!lnVbgFq9GN`_T>Aru0ENlA5! z%YLs{Q`1Dn@nQig9~V(kQ9#~<$+p0%6t=Tt?w3Bhnt+8LGG$)1v$JC&`T#OAWL#MZ zAcq`_B&4v01`VJa!pMk1-KkbMz8R^Et$BHzv?}25fFb|-*B|+E^W~$PVnNg1H%h26 zBFDlWl=Ef)r@iJq&O*m>gLdPpQ}gTr?N{zQ!rZY<#t130FMD8 zQk>Fe@j!vY8_V<0D~=KxsM+#ZW~0Hx>P}2Ir+?;h>RM?YLJR z%Knr%uC@`orM|zEyRjJxl64q$7Y#nD(i`WJ#juI|%PNc{q)!~3P&wWnU3tDrE2RDG zCo!V`5}Cz}HMQpLVD9sA7?Vqw%%GqZasIwK@W@2);!=kVm?}FruZ3n89{N4+XbKQQ z!;;|+DM-o;o6~suFOe(dc-CL=>Q!Mw#m2}&AC5IC)ky#6*8tIr7>LW3_MMgTBTG8t z+pa;1b_dK1HgX(IA-ix3*Wfv6p@$>E5q{xW*sCRP|A++*eKVhDt|j{~`y>6BkcrIh zzwD3y`hqd0@M2OJCO1&a3;7oTXfMBc4%iDI*-I0+^e@?K*VuHu#RU9r(j(@%K2sMA zm{1$JG&QL-Rt_6!rOErPA-C;A9Md0+g|GPzS;>mf6*_9H90z}9PAe>DD60}dVe{o6 z{IFs_!(dP%|IgS%07mvw?h|zo=IhS;0OTG>0^)g~c4B5%%WLgU>;zOKWlAeN6#%2r}%ai~0=Zz3l$B6m#d2EapT-*Y<1mX>=^}d1+d$ws*#&e&fhyWi2 zeb~Q~$7hr?Tt<@7$W*L9w(1Z=y%6u1&Yp(MPWs6gbR2Q^A(p-n{x@A&WF;N1Zsmin zc=ekwcCl-cpD_qi#dgppsrqjU-ralp_eY$rfud(gWlkoKdv8o|-Q!(Ggbf)YnZqPG z|0gqZGsVAr!VFc3rcxb2<>3DX9w}n@*b*t#fHg+2?)EpI*wi79hS3WJjqpI5A%Gqs ziTFRrBksbaEs4900|{HHu(4613|unBA6UZ%($(fK(i1>?H;o;?!;z@qnIYK;r{`-fR`j8St4`SsGb5`@*O;8ILl z01!+5rBicr)DsvK1YlyWE-s-&e04xz7yJ|Ep^vLqDlU={6C;6TO2z_ZFF^62m_mK< zlOWS(wj+7Mm^=kJ4U2-13#JvsJomb{MbM7-9uKagMng}3J63$V3cw0IJw0TkkzJr< zUIzO9nSdr#Fn_-Q6ha`IxG@2`3RKTGvF9y9ekP3%CqpOfnncI_hE+)Xe(aI&Q5H#i zn52JJ97GmbtQ$eQe|V&%5_K1QqS{V7-rKaKs8F{>xBxs1+oR4X-1?xxK=l$ZQrcTr zTdPg5MtYi0uRZU=uy5f4De%b;0!3O8^l0Hj4!d_AN2x{Cmu5mt=`OSB1Gk_1mM*NH zL<2n;%UO5OtFD!5>{9|jn<*-e31e%r{z^o^N%g#0o*f?_`5=IWg$2WU;zjLJxaW&b zsBgZy)aq|H`qqpGR+5dVj4MF*o#k7W?Zf++vRE8<^@&oz@1#-i z)-v6bAJ)EX-)(k0p|j$(o*y8Fui|&=^?dShkq@{`+C#%qoL7sSD?1#kKCkP*9N4Wc z9@{=mSX<96qy^ZJ;!x1}(g%_8wPp470B9x_&tmKwih+gYv8`S$%0>-|8(|+U+O_ZW z`4b0C4J9_1VT!J#UQXur(CMb3Tp(0qgi5`o7q_WO zieQPELZA`Q--~F$=v2lRu-a30Njz_Y&-l@mKEVuXDne|JYM+?*)a{*XZf>X?<4gJc z_&q?yKo##iMQ!?pp(h~|PvTrGt6kw&#(onpz_rT}en6tuf0A*VetVSS{S9TB#pZc~ zuGuGOft@|_y@~pe)EBZVo{5S0LV1N6Np$LJfG9TNC|2F&yy1NFeRt09LpWhJr&^tX zFv&|?b}lZp8lrGU}+E31edI?4EHdyu5W0hg}=3TBJ_d^G_}oJdg7(J7fBYa zO~8QI$d{gy>&B2*+V-ZVTgn>~8#vgTv#vGOF7}q!+3E>VdB61aT3~vg?n-47H8kbi z5jCL^p9nU!!pFo>H{@2widz9S>e&T$xBG#{T@e;4pYY#+ZXdrpBne=81u$6(L(*Vmr0rAj4i}`~A&?O-p}=J^_YsLwU0F$O z1f*MwsPE0BR9s}sSK4$W5oomHk7#Vr&WJWCNJ%r{zd?+-+ZTr zYK73m?XoKt|3%a3K_;MMt!#31aEL05Q~c*uH0#eYW3}+O^~xu|D5MD)l&=b0EIb1GD`%h;1Jm=vhu^;07EuQ> z6kqif{mvgDDt9!poN_<4TYbn??7Rx$NxIzd4m6AQW3i| z5hwO=p_3=2*6xJQA1u=^^?&xP>5&Hc_vWcshjR@qCuZY zs}dn;;kt$Yiolfjv(ue-QJio)ZYgYaNqx_Kp(Xg2-kAN)GGPe(`FJo+xc|yr41%a~ z>w0nXVo6bLZnx1(x5fo6_fsp&YIT$wsr2vUraduqd3gxkrRl`94~0Ggq0t|2N3(Ns z4nldFSWcD?7VF<@*!GP9QD*P{wbfP70-&wkr;d^GT@8+YQ*oPj(|vu+vn)^GkKBbJ z=OeoS|M0hiZ=lz5A05&6<102uL-57xzg0{JFi>`rb(2X@O5D@|{81oT)0YZ$F&YZ~ zH^pwa_Ahud$OQ;|*B(NWK3G>**9Ekd!><%&1(Yh?RRjzn^?7h?^+elx}R$T zMgP3Kdn__>#X0|Ue^3|n^G z+O8J*01iE5f-|HJXoR4H(_q+ymTMnq0K@{5wzTXAEnkdFRs1)=P6mWan|J4%J%{&R zL5$dAss76!Tq|LIJH)0SlUYH{5gx2lQ2ObkGcc9)#FE5=|F9dyjGGUNd?>ZFj?VMG zg(@8BTX=^Pk2MXG{6^}%tR#w*TYn&dnM?ZRP6J!!sfv3KCgv*E;pKpqN~+yD+>y5- z(BJ<`t;y|n%<;Ugi+yJVezrT{sd99H`KgHKtTT3Z84pz+D8_;wdhM9X7?_ygF`k~B z5OCQTfUZ>cjj3FYpEI@}9b>upnU=R$Y~pAB)qwhIlsT1JKcy0I6qcYO13bz_&ZkedZQT9BVba6Qn5;`(glD zZI_ya*|K&uW_TEFzWBcD-=~SaMdRhArKamySHFR0d^Rh;fjz`&7`Wco=BRMn15-f1 zdO9Gdtn8?)C-3GK>IsNgpbrcwn&YFPb5)DNiRAzX3?U(B=UV#MPdYjzA44nE3P-4l z>FbWxxq3WNcB!)}k7hLI3;tkS84RHUCzv*s1u)ydh_{*!19*$41L~FX~h88`w_oi2d9tr0U00l9wnRN zaTOmLTHJhziGlGlm0>Hk=k%0$2;r;8?aigY&EnVjiw;F^q8fjgWy9j5pBlisx>cs? zKmVQ9l#c)Y2T}Mw+QkDH(bCj6!Ns@BeM0EBRX_CuvLnv=o-3v`c~E+X5@TOHhlP7G zT>OV7AT1~^-j6pPe^o4ee0ffNw7NC1523hOca^D=6RyJ9;iveaNr7rmA=o^iGp>K7Rz6 zxv!t~>EUPJ2^*io5pIufP^aaA>zOMT*Ny{EHSWGVC5#r)ubUf&rw*Ep?$++*eG|Kz zMT|-~FMQs?xh)t*WYAu*`xD;RXdv&L1ZTuci;Jy*|I!TRMr4Fr{WKJGiv<1N3fEIT zU!U*`Tx~4N@?W-9)1x|ke(YtFIGy{u8d{Zon1 z@CP>hgM~QIw<%y1ZF|u{p;~e_zs-2CeA2Mf;lbiUkfpCv^Z_dnWV}Vms~nl%Y?|ysuhB$A`uH zipy$k^u58_Oh&1~9nH24!?MLgEB(=S>R|ihuqXJhL6(6KGHcTpC^7wEYPn1L<+xSM7$lj?A$rO!J`Qe{1j{_ldiupu858 zI&U-3z0MM;Mm2{|*8f|0rad?0a74%h`-2?rsV@&f^zQfeuv9{XI%|35!ik&%g{ys+YmIb;4t4 zcTW%#=V+g<_J`qQw1Mp45ZFLR@w(6GewQ*z2Nwxjuul)(!uaj&d4!?8eSNc_mtm1+ z{mt1|JP0Mez7&S=yiCAJX8q$0{3gZdgxV_%hQQY|MJCYmLWHXXp-RNL#?UYy?`U;EYAqdUI*Ykzz z>zn6#8-M65-p}DQ;#tdcQDS${>A==I@8c*a3cm-*n7iX&?o>SRm(Iz^_ZOOeH7)q5 zN59kVD-xPpX?n1t>-@xTb$WVyc zM+jpzr;B{b?Mi>7=139NY}s)`dSNc!t4i+WHoSpn_{})_l^JA(b&h9Z##BDO86%i? zp4C$0YxJ#uTcda#1iOASmz5m=UE%o}uqr3bK?I@mqBK%7zIpa&aNbc1e^;!()LK+H zk)?sph|}0lW|P0*)rH*X+-vh&=7zVU>(z-_OC0~@n!Xv6k{P(Vx!E15q8u%%Yvc6`^lip+*cUJW2LwX$RvJXz_mMb*!MJ}vX)oZ(JW+gsR zSqquef3pX1a`)lPmdv?|BO8N5j|X-`GJQ?fZ%x;0w2c$f3vQ2DB1KwzJK;@78JPxfbJmT`Bu2tYH=Qg?U`h>P6APKn(m ztc7*Z6-c*u4(^axd1pOO0NB5tTcDxKb}iE1j^{ru4U!jbl_tjP6Nx=QVH>pCM!04|ol@1oXM)KNDb z2>xQ)-r1d;o$(*{UM*IdK%tAEg9iEqdXCTok_f!1BaZ#LwS!Hcz`P&_T90SG4NH2SP7qxC zx2!Dvzj?c@osq$qyNa*`T390chqMhhTngA4~eix<)(p`gpqyg z6{jTpab1nLg7>NR-~K7#uVK_|Tx#%YO<$up=oyHdpQcK-_T@NmnvI^0Sh{Y#`u%U- z9uV+4Z5;KuN>QSt;)Zlc(yQ8cQRI_)L<-AumkB^T>=LSf7BM3*c@77h-l6~4@ApCT| zUv*}6jOOyeoH%`5nf`3fE$uG6`U5TH?N_Us;^KpEe=MwHjymlJ@F^(T&d|L%U z4hr%%(YyiBE3x@>d|Jp3?6#m2@&z&$W{4ZZ3kajLM#{zA<-y#(GGB6}n^_=(yY8>U z?B=^(>1J1x-WYCgZSBR&Q;SFXRTwy{s+E3LpLwo*!jQ#&;bUje+#Sz0%|v0qsut+T z9{Nzfl#l>nW7l@{tYtM!s$Cw%Ycq_=h!JPT^1Q7c?eTjIVJHUJ5P5j&4V;5T;~*p2 zK#{=n?%b0>O(7~e+M+Zg*cBDKdU|BoCa?7H4`{37E;?T9d6we3N0cXwh=};f%+mdG zRr&v+>@A?GYP+@JZDAl?0us_CDP1ZXX^`$vx}`e|x}+PVrDYSF?oR1u)7>fk-Kfv| zp7)&peB=N2U@&mF_Py4+W6o>VHOcUJ0XcWC`=F1H(lCQd52@6V_K5yzkB7&v6Er?I z5eIFvkZ-s=A-I@R+8h?q6oN~Z%kJ=N_kJ7Hd2PgRM*7lor6lW6rOrDbqls;g8S()DVs z9ngd3WOJNw+ydZRSC`7i!>PbW=m=(2zA2aBcuc}NY)dwlK`jb#F{gWdoaKXP9W>EVtBHzT7Z8+Y;$>VpoeunbBNQy|7DO z!K%T}o_q+V`0e}mVWS%@4(~m)Q*ulU4Ogn24%F0TLR=zcJyi?q>O7#&)l^h`fzZzM zwjnJl08P!diRC4~hjWmNGUcFY9n4GwI1CY&Vf0aGiDQdED{%9<&)oh*Z0<%+E$BakKEn7uFf8vo;`9B+y0XCli3JQvOyThvV~J8kfoKIgr%)% zVefA25k|G=LwBVpeb?#Z#VC+p)$iv?=$kB3%|$R;Ce^@>gz$Z2xaN)T zrq`_6s`3pfB_T1r&;gyNw}L_}$G_ntMD|-woEFKkjS_HMhazg)U}-;hUha-f zAqNK+KI1H*@cGkt_sKo3x4}X7w#*rKGaoW+j>m*H*frbuMq{-=7xw+qm!ytwZswo5 zdhX74Xi1_PB`o_`f#s%t_m=W4;sdjDk_RB z+IYt1f^`D`9vn^L+~IXzIXStoPQ;p+DNgv+%(!6CK;>a{H`1!fh zEgjesXy1I^C5}_or8DqAir{f!hhf%US4~j_V>Yu z(4pbsqZt?V^Rpi)nDyx&s-|x+JLoP8dScar_JF89Htq+9TEZO^Ff z9bg5eotUTzpRP2hc6%a9Pd+{J z@D1xkK(fa{vG-D^!gB~;MxfWp^=hxM&-H#^JgUe7e(O`pxPvY_Gu+U2yR-W3%eM1R z-5Vp6j1^lxoD=VTeKlOJ&f4mTlO_~hP_p%LoVJCuiB^3F7HwkKt*!S72!d;O8=Vm$ zVqzU9i0j#ty6d0y_1qqrlatpT$J_kX`Rl!SSC*!Q&&^fCo{xuF7U{QHJ#DjM)DgOE zC9W2RIq~x$Iw{KAFm%S6?#DJx%jSrt>OtTK?@fqx>SarO-9?G6b{hqqG0~gj&0(sZlT3^ed9 zX!}eI>S1+IMfm9MUvKxL9lP#mrLpKY8eGkJTy4}{uV6Wi zXhe$JogACXKk}khdo7M+H68w)k2diVU!>21&*{oJIWIQ(+}D|RM)2%>R7Shmp|%_Y zZ~EeAh`m{NKXPEKIDB)aGy{tFPLaE=csax4tj*)1!{cd=jf_hMMNew{cE!r1gsp6~ z*V=RLSSk)Q%f^@0fF4h{!dkFtZk6|gPF)j=^PSa;3qYf}6X;@l10HZvXNxnn{7+PI zaPCFDolW|%BzU>vak+=M9$e0MDAO=IaBdq{H!>1kuXC*^&A+sCzc{(RN|yQXG;7!- z+*WMRmp1Y?BB6D%aFvj`_Vje*`ry1RnBDAwL5i|cPa@vkuJz}p2i?uSe2I+tFSY!9 zp&Qn6NXU5{$)b~t$`$jDf7zuVeHeVigPBp@y-+pvm)a6JA>kTcqaGM?ci9Qf zk6(}XaG8;SLM6lBv#^E~k8(Ez`!qF`Q=;r4k4WGut7e=q6Yu8bOm1&i0PUO4nw=GIpJeY9Gx^;uBX1bRuMPkncK(+5&3AU0vC&sxMg^P%rV zlv&vZhE42x@JfYq3tWynt{Irr!!1}$h4U%IYEaueUA|>kEG=gDC7mDLg1dP7!irf* z%1@H=;nMu!5f_Vx-@~E#(hITHU_2i0LXJ{>A|WP2lp-80M`@(jPcZE+MkC6=gVIJ|~%yC-oQ~6B>`-L0Dg%8oD3V zqEyh_gNHx4DqgJmb=7dku$>kQBUugx*o5~b_d7q)z?F!nuCIhGzbG}1j6T<@vQrnX z{m7EPYA)cs+Jc2w~;sQK44k2C1Z9EjBL+T^^=9a zVhWpF!#qM-HW#p-ZIPeW0(-v9vaaGSQQWb8eXV`D5M7r7F~<2qnvXjA z6gNdG$PuYj;^fvC4o9ip{-S!%GQLJALOU=BepS_7Asb#VEku$y*q!hlHnj!Pc1&8F z+q)-~!uvq7S6gqA>4RZO38|jW?y;)#D-ynH!_K{9mvX^Ue`+QbOPcECO#Q)2q{uwG z3_>$W%8rlpRb(jCXkipywX#8HChRaH1~LDVRI5cf)hOMwQnMeYXxGQu9;8ujlT9J+ zTRB)q3Peszp1D&OyC_l~j!QVF-X2rMJbk1bs(E5%ozzrT|sh|G+M)~=1G zn>jT-p@Z4!w%f8i;5Of2s&HW{#lYBW9eA#eJiW7d9)cBJ-HJ0wJX2|GzJ=UY*+lLC zZkP=UbVms(;bFMB^edNT{rCD`( zB^56or^U@yZ6h+4ZId2gjQa?hxlemsCuv_hBQhkm z0{1}YH?7!T?rQ2$08jxjtY3F-KI5L&sapiM;vP&}KHdk-SQ&nlsagKc79g9v%nnO=t&j{MH zuP;om91&5Va+R;nA#BFP5FK4LMn7c#J!E8K=;CdGZvW5(J|*>0Sc}fiX5S+sd}-)s z-eV-J-cV!14{V4JenyL1L(~lVfh{ibvvXH^zP_Sm$xaK1USHLFx$wp1SgB02R$pVk z#p>JPLuaz`y9QqHom2@eX{a6zLkAY0;wSwMI%JF@cb|l?L_>p~d}Mb?h3$Oq^1_X? z=jtPt<5l`q@T0{P#8dvA!wqC{8>nHaM7Kue7g39y-DNzzbs5_epVRurVQN!j0aHP_ z!7XYsL;0mpw185U%WnO!X)V>L8ki)E!DX72<^AFg-({``w^X`Vhnn7tcCFZ0Dd!}l zLshRgmVsIOx0macpzE%Sz*iY0y;LnX7k=fN5_a>^4C6w2W@;7zLmsK66;+SJ)tN|oamEr2zR{nKXEN*!3r-_bFjFO_UO1I; z_=uK6K8?S;={3y9bW=8YLt)h3$oak_8Nq(;#o42Y9E-~L zL%OrFEBeJdFMAizESV=wWH_t5UyI<&BY#>v4kljFlg!fR>GIz()8uf49@~!bJsh96 z=h(ONIGfaV6R*}E2mQaxJVs9&ixu_y1Jrcader@WHXOIit$ztxRdcz!B|Ro{s!V9I z(YUboZ^(VFbAtcdG39 z0W->D{S=JaV51jtE<4kS@$n+i>1oaTsC?H|h#D3w;I@X;n;AG{C7Cb^&it79&OYUo z@8TyspH-u@DMe^eZQK-e=kw=MyOmEOxcY`m44p~R@pl9YQq(m^QwnzECZ}9qR_vo> zjV3zJlsTUH8HG(0^JJA3Q1b?h8tduQD6Z%g2O=jjBI?v*6D5y ztzZ9adnkjdeI?(WB*Cj>JediWMt00(tIIN}k+UYt;iIlaIC}zLzg#6dBCl}W+OdYe z)F;{PyxIk`2fgFndRBQg#p;pvrRwk#w(d_=^d;h7`Q$xGBs)IMTLH%hdz~)+G zv}-C{r1}yX9Z_;z30s3N;LrEk=UfkEa$91ZAvt;I97-K`X$dKNv>wVpp~A6J;Kv@W zx{rKda~@^%zc1^*U z0q7cm4wIifN(EeakjeV6+~M)8%H|UaVU1WA5?$JnO&a!DqX?H{y@0o%zx?bBovV1q z#8K`*qvZx>nY)LnIWmq#HLZ*g^sGAQWM{&;W-oV0-oC0@ult3x!z5zwL7>V9i#vtt z8fs=3v7*pLivn}Q7Q#`c0d!-Szl6;eL24`b!THlxG18YSE@L~U;a3ND7EF^javA+OI0@suFhd3F z8OILP&fo8*f2aA?d2p?VuGtWMU<`esKYZsJRy_2?_1)!FF%Gm~J(=i9v1}W&x8gk7Ws%Oe?X%ot#84n#o{PM{PnYnBq5%f5=CmYQO*xx;zylOqs;)}dYOY}Ht z1aA>H`K4`VY=I0J1E*Di$=uGf>nx&%FKBnwoKl#y#dEHLYuzeN- ztIVL!{oD)XLM@4s1xsbDiX5~H1R}{HL_0abPDE?aa=LP>zfRXVeAVJ&H(xipc7mYA zQt;@VTmP}+rhKd5P9I&9ma^`WPtYX%a&}J&x*d$06%7s7O5eU^ zxD^U#g_}>FF9bo83K(O(ecGE^NGJ%91N@NzVM!L_>6_qe5tpY1fD*aDZi6n0L3RBE z?K&9Si&3lk=kT!8%nuV#=E(JJ^|j?RZ$=lbYK^^M&83mN+Jt-^Mlrd`aEns zBrLVQJPLj_!_t1ed1sKlVkSs9$xQeCNC}^%?oQG$`|$%I)|GH-;uy0{y1W_%%HYO^8;qPhye$w*IMwXKYb3K*w}uNR-L$O^ zKH|-sn%GV4j`CW_%X6XbWel6}C+)%e1~yO-r@cfH(YPVNY5CJ~eZALpfe@ilb4Jj5 zS2YSMd%jsL6RcURjDELOMO%Ak@iWVlLxbW9;4%#hz*$;eo-jLpa!Hh2(Ad~GH8lkV zIlaaGej$Ry`#t_!a1i~RvVgZOJREJy%*yIZa<@BOZp+_rk6EQzrVhT{1*>(PZH<2J z-En1kwj@6(Xi_bEW@^5Q*K~jbVJlvJ+}n?J@+HroWV$RpZ9k-qcS+H-&hB&e zj-#fGkt|t`)KKf!cQy_*oTiIe^Flt2QmciypnKh>xo#WLiYOe9)n4BP zoTK8YLO?)yeow4*M8R-#ISRG?tl8wMOYJA_&cT)LR=7>rMre81A+Ir(mZE+sW0{q& zwpe36{Ias4aIo3EaDu7I>$9SFfZIE2IjPpUxaVT)4T{`$)h3lfP>Y-7qV z+TEF~|6TJd(%F@)I`6~A1(Na)>s!cH6HugOrbuy|2eVX2Kp$_~oz1g9uNkqsmmIlt zO{;2aH5JJqyN|4Gk3-DwFxcYT=OsN5D=`m#CS3cT(<23`dB8ZL*1osQa&BCjqv8(R zPRW`vcI75dr@RyDVy#OsU^J03t%IqAQi!G8e3{bZf&ut3)H-g zGOcVrP~IlxMGBPSmw4||Apd*<{MZHX>nkP4(T>x?#PB{-iw22(9OkZ#(i-7q&VMHw z-?cwa&0AK$1EYhFkfKVm<;=bPB%|BrR7BRQ@&y}j-gAMgP8-lge|&jC9ERjc8Z3Y6 zDodUEwC!HiNC$(`7Xe%dDc#dHme#wk9*nl7YHR*5V+`og_v@>W*7})L{cYIvHbO&S zH$SpyJUxw~>qM-Ws|Whx7x$*1)pZjmzsKc#U)DHwraq%>G?TWpc%#L4$X@Fci~Sj74tun_hMj{JCc7DS4nxynZ@LpqDLjkp6z`|y-gsQAZY zBsa@KH!3x-dXOhwCSk(3@v2`@G$s1%8R8AdMWG*^U0jAuN@@K4Q19xz0-X@p*@q2^ z7haKr>wV+9^;CP_A5Sj?_0_R0o!B2`kz;thS(LN5Hh|fBnSqS3PQq6l%Klj1tMXC}#l8tQS zBTia~?*dn;8j;2?Lmq75y>orBFiOCJUU{{{j|MzJg6>Yl`Wf2u<=V#&PW(shuV z=B(?YZU5o35=H6}eW6gktaKLf zV6u2!z82eI!`^Lamn?hvvLd$0G5%Ay+t^#Haov|>f9N;9GPjuN7|J;iBePwabf2B& zHDH~oVw8IdlM<1*;{Pxa4P424v;B$xdX!{mN`CLX^L~1ij_bieesY2~{pqkM$h*Ax zV0y~x)Kq%Jk0f=w~xR-Rz z{x3h84i^ZpOG0-LhgaG`ZlW@Ce+5GqE+Q* zR0`<~`kx(4T?PzDk%_JY-C!Ur^;}goitqc}8-xtY-afpHH4YF=70@Dlacqxvoo1qPewHjoRss zUVf2dV?yL?$=iHHICo!)kHt@8yf|VoURP!9=={Bs%X|iODpee#R%gws>Unh|%<`|s z&q{Oi*VL?so;sz$#)+o!oAY2n8+l|Hp_@ir_?lnX95vIV=zBlRKM{m<<3FXXs6OE- zrSJb3xMR?ty&S=b)Z->Tw2&&>pcM+9>0ujeMDSv;jYP}zbRCJMIAZIRMDTJ>N_Bqs zmRpAd$@R+hN&)8Oubol6$U=2^BU!LIPf+=xFnnvqX7bVJ{LKBP&N$Q%K3M@AMrnf| z1zJ@Wv9y&Bs9iKuDdFEqB}hI`Zpa6)nVGU3y4>=tkQ5fjAbgS2sy%ARG4^c@@og=6 ztyl*ND%42l^we!Wo7=Ro=FXM$Ji}rU8u2$X$Tcf-E3GPq9}T&P#GB{uO>e1|MB(6@ zMfP2viB3|;@KH%yuB?$;CQ-3CNZ2>5$37aAvv2DiCMpy-olrednDiA%02%qsSkLv7 z#1tgcQR1#-yu(~>$Kjg@@(RDcIdfkfVQCe;Wme|01u6?4x+n~ucfAjeJK#87r%hvg z-XEzDux1mW#84EM9&FI2n9t&7(eHmd*Y9b5Pf(CK>S=D1>bAy5=92%Fxj7Tw74|d`$8SSJNXx!AxSMu>80ux7x^DE~QM3sL(TXy=<`W0u*n!Lrwg@_hoIfMPk zkBE#lp*8QhXtmN$H*>CoyF1aF>|mx*(@mGey)k0Q)HTdQKxnS@-dV^#s;=EeZzTV;2A~v~Qm1Mk}nj71sz^&|Xc|u&?Bc9(wR8l!V($iDtvb}_r zsAWJ~W!krudrw^`S3+IOY9qg?Ee%DXTg~OXw@1m+)Fwo)#(Z$gyH}9!a;k_U*2|C0 zRcLPhv5lsz|L~EwDRuV>dhxGYI_uD9Z;e7(!}aCE>S%;meQ#xweN^TO4jaOrDo2yt zPfMhz-1^Hz>>0_)-mB`vEhH`7whWuv-~#2vsf}s}Y9jV6t(ZBdN8y%9c8^C3$I3T1 zElnB&$DMd(NStz8OH8uZCGxIzd$1Ccc4{Z*z37U(=FnZXz3mqfyJ4>+m4H0ZXy9 zmeHsxgL+yS-?`>}9dU%KR#4kQy)pU&H}ShTA6v5!ze~h;DzZ#*ojCetuUe=inFAA4 zeR!%iO!kj$s;K{9n4YDjV=j*)7l7B`gwOw)qXFN66TOTh{ z#aDF0+Nt^QcKD3E4tsgLsrN>edf$smB|My%W&#mg-7m1ML({&Y)nfln3z$LtV_ali z7!7mkYG#dhfV^#>hh{&fR8hsu?$(QtbM7zaHIRBqdSs z^IVv}#D?N?{=0$^KGPRrjMP_^HCU9s1F3h-pb`Im@y-XZ@Cyf+gOZ|{82}$g&LpbHFJ{>54f9Y+(kiFfSxMqalyhd&=Q8vlH{Wd zQTWSi5v0Ax2vh{?Bne7T)*PxT`j@wlcv!b0D8$ge0H@@S7aD_DQLL?G>7dAo8Mn=< z;YKZP9Gte!sC-fFn;iVPNvkfKg2&%OVh>G1Te3THYS&?9t~7Z_JicM?#1Fhb%cno} z)X2cLLuJZm#xH?tk&*T5^oPUQ&-QrSj@NI0-U?w7a7!PTpujaRR?F`%!=RN8*Pq(( zj~c~^-$0p^F7JERy>oB*(SLCO_HsyOU>l;kSxzsFCwn#06kld?f{zyJc2vmOmyZ`^~Uh?yZ(yKPE;;uy;60!KNMIO|SY)CKZ>_q;pPO-y0#? zs$@1%GSTR}Cc$B;YW_j;#X13!ZmL+JKJ>kXYKy;ZYvT-tAG$|5SChu*-Fzo=M%CmR z3Qdy7A+mV|oN~MiZm9ABB#=xq;j*1=R^=RvZAr&Oq1(`b$L>EIZ%CeXMm{(UvGXd) zn`*8oJJGO3Ze0XaDL*!38%GnU4Q^Mw+z&5I%sy|5S9L(tu7$Q)Qih#5S2w7BfmQ9T zhQ=j2Oz(}!?2wY}+bR%cZ|;V{^Y@jR28bptt|vWa#3+u~6>2X=`j=M^-Z~uki1g|q zN)Osh?ZXz0%YLE2y7$|b{ z#KrxkvrLUExVCa35Eb;tNHw6r;o4g4;t;TuHR5}=?L~?fr@Ltx7(k+PqyrtE!4Zo;0|ZkKkw*!$WSy-MTjyZ^tN-8DM!&?JbH!Mf0!zepL9W);?``LBOjrJ;AQ9lfQ$5pLk)8Jl5p(4!&8iH8CzNX6ug zjHhHx7lRoHB*Mt@#fd8v0B3isU0q;H0P?^fpl=rg_6G#BW8(+~74-#&``X@PDxRoZ z8h^}nHS&|9hEA)S8rP(^*dTXFXNSjvB)}afGfDN*Lfmubrud`q z02{AwzH>N8j2<7b6=SE)bVR~#lnTu4@k6L5U^A!&GGIgAyyv55)GCN0ybb^a=PEB5 zT~2Kh*JnO*?_aNWxp#LF=?7md&y&&9^Y%Z3)aRwi<_>m8-FR9ckTiCCWGRlL$J@5} zyi=aZ7oyO@Pf*(!((j5frnevq{U+>wpiKb;^2X-$mkg7Unscn+*VVVA&Z2;eZk-77 zB@Op0sEdYlztOh!wN%^)4d@kS_-!G9??}qJ!I$$*Dzn?=lU5{jo=EY3QYJ{!UJETh zD9gpI>O9CP2xn)#T!pI2()q==c7Xe!TaPJER(fqfn=pFlu$ z&RrEx;?&IYeZS+c8Kk52qawDaXM$)mjmlgrC&D6T1oMqRY}FWbpk!*oXF6`?_u&$P zn#cR^X82Ky#pU`M=H6y8J5DL^rhgIp<|Z}-bM6cx|GO7Y>$eT;IT2&|%Zh`YXV_$7 z%NOF^QLH^HHEI^y{H^OUMJS3-QPuOl8;Mr$!w`~*UW*b0S(*INJpONp2&JK*6m_eQ z*CcHwR9IIm4Exz(dj^bwzH_RI1%S|({;6LoN7~)YepqXKx($h;#ug6M2Yh?MlfZya zL@s|O80ukf?$cn?nK1QD2!}L?TJE0JY-it@K&ODJpcLcR^QRpNiMH<2kQ?|5KFi1rLa{yA3GYldpILbZPN(Bjkabpn{r*j3 z{##z0ZeO(X_*)yblmGGs*c8veV>z|^8TRN*@~}i--)PYdvUi{O;R|V;9h7^rX6CGf zce(U^lN)5v{QmI1cC)7jFyu${zm5usm=LA|FV;5RYGZH2K3-#{l-?Xp-MM~I`?zX` zU1$r98q_X(9j_3T%I>tM7E#a++$Z=gs$^3iKY{4HlEiJS={299b z8rCMCtlT@V!eG7fN>~~8m`oVq;Mv$GJ(wspD=N8ZEp5<53& zdn(yI4s+N+!6i%W4LRQ8oe)UncDt(df9j&IAMSEkb=WfLV7^a0<51qhTP9|}pdsHL zm$Q+`is8qdVcOk0VN#`{rj=x=2iq)xzZmAUtI#JiU|?V}kWxH4=H|dd#RN?hTVqHc z%$)&`nqTP1n*ah@coHm5bctHglk0j@MnI%UHQ?PeQ>qCz%Dz8pRC_R#n_4SK2?UaZIq?553ODzg^B@@|9 z42UBA+=F)H`#Dps^ZRzG#bq-BRHJ~ch^#6UmwjNMul>bmiREUWVdMTz8wLy<{f6}) z=!x+u$DucZk->4MU_DJFC&)CAd!v#rNJ7|cDix<~1!|qo| zW!5bN8y%lfK+NYCTEYPDwsA^Pr85EOIZ5$I5E}PNyll{4ywf6mu@-tCo6z-ThTQUu zN+nHhzI4|=+qX51X{tmwpnrTu-yzIOQ`qS;1uxhZUjlB%rcA`8uoWTJojq387{e&#VHkwkl{{ChadykxkEP!8%Q7cWs@p~X- z4}Z#UTizmZHosNH5oO^2d~0~Pmng%lb%Kt!3v8N+kTNd6?ryD1C4I$kd4pv;aJx8N zy)DfJshY?{De90HEV`$`2|rym4Hyb&42JKY5LsA<7umKI1if2$cv9-+*P77yz9vRq zt+sW{J$;5YTmW|z4Z4LScd?6(|0J<4 zqi^@DKSo|9#+b1;YyFOoX(DS+Q48%YTnckR{gSVx!Tti2QoryoZM4_FJrjFP#zXL1 zGWvch&Zu;oZXI|HXBpHySBj4IJF*Z%L4m z6ZD2BKBo?OYCP(&RbE)lRSa{hrgXTabBsQ%m!Fp43>yjEwoXlpwK@&9O;ZLy&wxlV z^`^x6>bnPIFt?}X%-6$*|w`;X!fSS1tbl*x%jOp9)y^-mxM_GNHi z<35`EmIeI2D!YNE+b*_~a?dgP2YlSCKPDt^d8~gJlhRl$SXWz#dt`XDtCR+-DT7to zo^O*xOHi~+ghGtK9EC6DKp!IGwK3JXMrk0pxDEPfsco zA-;H#l9Z7OXBZiF6g=3Xe2nDepBK15qybP=Y`&>sE3qq-&XSOpu5~Q3qap~2dP6?r zxPamZde9i8m6aW5W-?(B-NOiN_$DJEv9TKS>l*R#rKc~b@!mYvg1abfrm3i?#KgzP zuhQrsvDA!<_J)#2$YKO>$G)+)FXg3FH-{nn3jOuNmG%<( zFbd$(q)crX_#h>t()lDl1se~dQ~Qta(@g-;J^kkHljzN|$*ev5!r~gr%_p0ySfwwd zRumxbKwc+ckbkBDaIT&IfZAFaHBi-$4={C}WP+Mw@Tm{XcJu-pdFy5Bg6H_Xe^gyy zX_-W0DcyHoBVPqwLOojg+`gh&vOn{D0NN|w>p{WCFgvF zJOrXKd0m-9x7?B$qtNdBgOD*40P-8Cq$&L@PDh*d(a|GS_Y+iYr1<+c&cSSclD92p zb4Gus|0NVkC%E=B!s;Vyyzw5s__mboOJ@3*>a(TkfVl3&-t>uIb9edi%9%-VXf9@JHz?(hKKADs>g~ z-%Q1<9;d!BAMFKBa+f(e%fGIYE~nT!`1hwt*kTu@M6&CfOKetlvEXAXwvbWWtTiO2 zt26kk^CxNnok#vI*82&-M8sf27adBgKBG@7*yk_>gz~g2@a@ zU}wv%k^kkAvh6xC98p{JgP)i#239iCscF7N`A4HI>3{Sn2#u=rs;Ujetdi<5R^*W6K*HJAwnN6(wT8<#;eQ+nbT=F$)~Pp}g` z98oje@6V+r1)IQ zFZg|C-nI%~53V;>|7>tg!xtO93H+&UPJp7Fc#j@R;OibZ$?E|6ruu)QXs6me9!UM; z*?%m3`=rBMV{_Xr-UyfAFApt@8f_`g!&o&BI4}|gBzu0-KdCTFCYBsKL}&{&zD*U1 zT?wn1$m`0!x%&^#oRTJ-g*z*J z&8NZ2DY{#1$x)EqW07c${MS}1NTu;t%g4R@s^uVXMW~HZjFmt>ur=b#8_sS!3yXz~vyWb(gL;ss(kJz^ zKYxCG`rs}m5k@_Bwn9z-QDP*@@O^2LQy=wXcNbyd$AmJ+CZna;iQSe7@6A{q|9)GY z0{Lu}bIQqj&$bOB032-8NYQtleWomABuv``Nt~{flZk`hEvTt#{*32dg8x1Gz>{}= zdCP0F<`Ot>NRNBrrPuqvQXG2SFmsWFRW%0^b+_1LwzmGhFAbNg9-JK6%PF^_X5pH5 zzhpCHe7VRu*t&4ZoIEr&f^*+WzP9ZZ?m>jd?W zGs$B{mhkA0GwJ!|)BlTw=K4)3SJT2WH4PG@iVEK-9w|mcIEv&EXbdHnEf35uNc6rr zZ~cE(5fARZ;(xIyee;y2Mxqw0v1iN4y7)DfiixL&Y!jPjt5n$kgdAB~b%QiwPHum! z|F-C79xq`&PB}edgz)++TOpb4tHb&0-E39iY0h|m)h#5ZQn>epM1&tre38!YJq8+0 z8EQ}NmVWwlJHF>wcFD@8DHKH6F=?C3H4M~k`}GKieo>v`2HqG#Al_!!#?Q-PHl_og z%pa+)y9lToFlvU1+&$2+KTb_Zm?~NQhGAj!D>@1*&M3v$jlVdB|BeHKJC#imIaPkOmgUhu;jG`I zo;!TjPA>TC*FtA7oEMXT2t(GQt|FZmK0UU9MKz|y_~0+x=$Fj~@qQubC!S4dH3-Y0 z4|$!XrKy|IP7^+UYy&y?g|_8ZUXy>+9x6z|Q~AybHGoFu*z)e1KcV$h&~>tIZCMHs zya-D~S85b!U(7#D?u%djrXz50etDkca(o|gJ(m{Zdc7iZ5iQ=rf7X7oWq)3~l5}(q z&Xh&WurUUuU7h_0)<_>L(Awtpc~Zy(#O;rGnq{}nX6W)ym822}=8@cgn){y))=dlP z{NJ<2IXjzOUm`4@A$xIsrC3`tOuCvwb3eQk@u;^-=-P5#U(2GpU`3a~w^&HMQmDFu zX|wM|RX6#4Cw-8DZL2pyD;5S!Ys`Kff z7O}oqbXi-v0|Wu?)56h%4Lm>+R#f*aH7ogaiJ|%qtiq}%I!ZcvHTDP9UyrTtt?-UR zK*ze-!0%#NX-wX?@Q}-wUv|iS=SovZ0P(fY0pW($-MADd;cU&mpMJIb_bA6O$_`zD zgw>vj(v2|rK=nGeNqz@J_^Pi?EymrsP#+S|pjXgizAovar7s)>G^uiW(RlbBsyb3^ z#5(*T_a?gpY@FGHX)h){3xxK#g<H)ykVqK)a zxfd1i9E`G1LmsN+z>xF<_3wMUpWPgQ0B)a!aAAdQ-mvVW9`aAkX z2uOsY&Jp2Pq&t<%c=G#Kjh@~;T@9!|)Xv3&qx z>y3-Y@F|Y4RYz!9@w~qGS7$;zRn(?9Use8<i2?Hy%)^;s2xW41CAn z;lCcQ{CCE|%?lQ#%awO`wTj}*Kl!7@A>AIXFH5U=sbAmw_w)VZRV6L>i-`abfA(in zfp?w9Q4Ah@nsWPJZ$=r}7-_q*%q7>PsMByQ`k!ysxJDk`3Cp7q{{jks%bY;DqN$RD zgG1dxZxzUz@S$;fn>|gAYp(%4MEE$ zcFqA*d~}?X`j_hJE~#lTf>2d+JGI70*e|3z=xF5kKbEL%6=6{VElbbfO|5@cmbOg~ zdt_wfPK|?YT>kHsZ&^9uPKd_QBE=!uu{oz?B&C-W(wK@)diaa``YV}{?m$f3o^gkm zfA6ApC5yEbRp4{5_y>c4+Q)gPhBv_9{}YoU-Ehsx%z2l# z!0_Opja`e1z$;}y6k(6%y5B*~Vul6YixhTt=3RG|e2vpy5%qX&Pr#uKzqYDDyV|cL z(=ka&7Q5GcAwJ|>*)l}zvnj6nl}(>ivuXQRj0yu%(metpN$E;-JuMFN?7CylQR0(F zX?SJzITg&7HHQOTjM4Omav5@4iyK7+T zPi5>O3zuzXl;sr(Kf&-i?baz@caK!coh~*!Iq2IV;buIWx#7o|aT(;6c=f7bBp)Fy zA%R?QuBcFQSlpMBIY|0@oC_UdNv-i%M8XLFx4j^~U<}z9I1JWWafI0|ED{tTEf4rI z6^GZ_SNgD+tXFdjE`)P+pNMjb=zh@Kbf2U2F&buxKV)qEWcn|oG~sU;&Aq}%h!P4Fsb`1 z1aH^oqwIa~c0je~76MuKQ$iNoVavJxeG$cr-_Zk4r}n;kl_-}SZr9%zM4|5*-UY@= zW`>H`@(_(M{vO7+qLxBg>iC}F!0ewZ#AHYeciCuZjYkXa|GibSf8M?}^U(_x#-N*R zh%8;M54GbVT3-D7TIMzg9jBJLTxN{WnKEdM8GVIAmoh+QX)e2u>K(YDG^$ zNqKK&)w@fW({iT7peJs7d)r~g30_s@;=ORM{NG8xzr6zx=IFbUt~!27EW5JRJ}Yku znO>yd-Nalu#*$@2%yh%C`l(Nk_|L9x1z9#81A890-_ER?*VvB0(;Hj zoKqi!UNy`oBqY?<)`HISiPFjn3fOtyMmL(4QoXz+=;-J^*&T0=UtS!XV_Dt%@zUzQ z30A=7y04uq$tQJks+CDo5jQKfqb9X78HWX>$i4`FO3^l?p;8W-&bwa#=8ZNH;%ZPD zubi)jf5EN6$YcFg47-Kj#lG%jrl0E`3Yc)_k)Nba&VF7suegP{WCZWE#wI*0CJJcD zHwi{wO1PyJ>gZwnteNz-r_BptG6Nal1hS5E9xgHhjL1 z7ThiTJ6@?12J~j2eILI=p^7Z)`ZujYkKG1-U7LPyZ*N)l;dMvBq~F(lec9o!m1UIX zjEpG@DntQ6VTzBS2tFqssI@}`65tWB`{98{fath)JyMaoLn~VY9G>+!4%2qZ#%umR zB|_Q`0<o?l~2VPw= z-L;V*a|YEaT*2xU`<+RQXaeOc6)QS|L>c!xo3>Q z7E!wb^0P%oxNTSM$ovxmZa3fho5DnxKo$(r7XZAWmhAEJvS3v;`k5kB=&{#=mlD0u z+y6)OK75AZb#Duhq{Zmr5`5A49dy;nGhLjQ^uUf6A;s|W+5rElQfi{OnlZT*oZyA@ z?2pinp`u9r@lxtJGRkYl--*%8L_qk>gz0l1+BjG0>-Cqbes7wKaa{n5=|emb@ONm| zuRu`@13tpDaibSX3JSidqEKLQjJ7k_>gddZISHXdM&YqtJqkS!prWL_JWaj^%}MET zi~h{I;Y~(E_cy?Mxxc?Z+ZWGiIZ^F2IL5=1xXpCE&-C7!CsOwi!`{4s~k|FlpcPHDL`1tsHe6;lm%v|WBb%79O z<#rg~zA*trh16RF>f`PGNj;g~pVj1!ZE_#pJBh>Dq&0c^ND498h*e#r7>2@8m)+S0 z-tF=xqZh4P=>WR`LP_W4*c-OOd3!k(uK$YK*lF#n+`z4AX=(dEf^rG#l%@AK&-FxQ zvyX+=n-L}hy8?=Ao&Ms1Zb%^A5*MR}S4YH~cFSAum*!hWlCLlP&;)+XHhLj95Hhli z4h|liu7LC;3sjE4BzW-YefEGzl_QE~3k^V*(AdX-+9}z6x&jW!|xbff4$D0s7IHq4PV=mOPnd_E* zvBlI=#M%DMwP5!7K#X^tCB$MZP8p3p-OQ~vE>aise@c7nu&BPbeH057X%P@9k&>2f z6b5OKZiYr$V(75wk{X(k?(Rl9q@-KvMq+4~v+(2R`@ZMA?{&`ay3YPjoSD7X-fOS* zJoo+F_j6KTN=Hkl`}1$w(L8b|LN+~qODpF^+KK9|hQwWaS(3%{8&nH7OM4dmr9QDe z{hPF~!9IM%5H|~0U8D>YP24Tb<>ziq`GWf=ky#-yorptJv6mZEvmZ{jAJ}4^EIK+p zMS2&_7f-*09E!J=Y=`t;sKf4Hc z?ROik3=#Oegg96gsFI$OQs6p1R9hhsIrZbEVY@tFG5+U-_=;>ZiDtS}^Ik2H{<|-g z<`sl5wiQ%rXH9r^f??CbO-n&CqGVMMZ!~{jxWnggXIW3+5`Hs?8Iqp9(hc>tT9~>_ z@;I=Y8{@n@=oj(1(y3?>j3g$P_*3vUej8nZ6LBszKbqzw%QXHV#_vQa$Tgz_Iy!fD z^ws;~6N7D6{5k4-`wQ5<_?G<;-t%cE6z5T)9;f4GGqRH5fu z9K_0=$)cLqHH`96Cn3*RYPbJ1$U&*ur@7qn^E_!5D*0@#5UCEEKEE@>vt~tV`&)?s zYnfy{$jkP3`Z~W69+nE$?R+BzPA^GFn|8?KdG1Xv^3L5l>sEEnE0ddO&Bci?O(Rmb z>5e~h{h@Wf-+f-2h$v((Wq?GCKSv%rSA}}Nq4B75xr|g(EtoCnhF)pdY&T@Fs&p?l zd6srqb5PDH+FvRR`!cxSjf|N;Tzom)kVTSb{A*#PBd@Jm)v+7y+a|2*gu5k~SEE_0a};MA+q0g_u6f++4d)78oI9La zA+g9su8wgLp$6|k1<{S;@%)lX51r-Z&Sd|$^gDIS4Y>ZyLv~Zw!E%aHa$e`lTMopL$%TYZn_w-1na1m^>k{%u#VMS6GTW!A(lj2H!C&vkeP_9Lf2D9p_ zN%nq)a^MulO=~-LgP(uF{4yY$KJbI*z+LP2!o_dt6)};V-fMtWGk)w2%yuC!;ma?_ zNovE82-4`UlpECJg&Sg@vR3e2+X}_zvE`rLB^#kx!&K^gRV4}e*l9N?msc)0PIcSe zmG|SwB&=BMSYaiBhlXDAn^`-O)L62Y&ZIk3q~-q2G`5^%lw(qNtLi^6e`3BI8>wc}bMXJIi6jbC{Y${pNodW44fq#G}X_OZ5!%Q0^MuSyj|myfCd= zGKfJ4302N;j;y@uN#h0{DTJ@~F`u1E>zAyoG+%c0bee5}ad8jPTxo-#^rs585)B@E z%XarQ8QQyX&5mJPWkbE=dW?>qmyFJXJ~6&n-7AgnBztsHGphP^-bSe2c`ilm`bn4n zJu&|6l$>s9NV;*rvWa+k=TY#|Q>ibD_|G@wK-w(GV#pUqR+bRQZMLhSdgs|6yo_x! z+tJdt(bF2mYIr(-wg1k+IhOU2o0hj~%-QrN+{*yJ+C_D^rpRmdQFn6Ots}gQ^4;V( z896MdN0C!3{~Zeu8b4+wnrj@Bsjuqnc%zmmx@Libd3Np+&g{33&gy!S@1K1fbzQCb z^^s`G+j`x*=A|8f<*sqId&FE?0kd40TqWEI#Zmt1BLz#k@Hr|+_+ZzS=gJvANX^jg zc|}whnx^iuj@I$YWI6of6O4c^0i(*@_}#AV4*I)ad7U*}cZy@743-?JLR?i<%CM8F zANfyAhMhrQ?%=1iTwKux#G#9+B3$ZO!!)$C+}z1c3(halc|%#5bVxVp(e$ZGwGx=& zXBrZ(An8Ndz>?dFTRT?SA>?)1?A(r1Sp8>ySsuZn8qHRBx7tvrAS0yzVliyvq>Tw* z9wTP<%LoniBkC^|d6opzh~N22PqMlVeE4m9dU?L{yKQw9B^njeto?pk5^zVWf6*y% zt8S#tMTb9@lAWW-qEycxMv(Ry!kJ5ZDx9j>G17|IeKJl>NEd+&&c!lW=-J#yeOTvTPpPPlVp^Rfs_mqFfJG89;#qF=yI^In z+7TFzyA2(CC-NSC@q04D_F}2OF-Sy;@+C6pxf*)2) z*HiOM1PICLSW?HOskc|LeI01QdEY} z?N~x{5}w$Z=bY2O;3(uvTD{<>9U7wrAfB8_cfx%P-;nnonB&)*}%D5c2JsAPLx=!(?mWjo6x60 za7U8$;TULI3sE6xZ{}D3L|9Lv!5KyGt5q%Nm_scU%K@-+JWcp5UCT94MF8BJG10|T z7C=t@UTTpjtUeq5(3duqC9|_r=jit(9yDVphJ?-!rhNEuVcJQ2{42@Fbp^*$1RHiIHSwcd#hO&! zPXUG(xKC2)?MYV$WUd2i+I!TgxZJ|$bBKJX<0O;F_>gm@mq!m-U97(btY6nseKjvW z7n|Jbom4}^56ROgx2v8`b(17l)aa}5vUnzkejR>g7&wuD;V9poAi{FakV6JN+wVUl zndJ)bOuJjld2@L`jS-q&u$d!|jyl?N{=}`#pFy!f3vD^+#Zn)Kpsj}Ecxf zj{$#YiV9WL>Dl_dl~K!` zp43cVLak!s(_<3h%k6VNt!Is^Jz4XdI(7JY-I4=6@}`<02EMrcBV&|%I)P2y(I)+D zBnz|5X|;}L7w29syEmgRWg{6I^}F|%(>$8KZQQpf>tOPV<AVuQy)DK9+;F$+& zofOer)d8ccMIK8m2V7@jYVK}VKS))#JDXgadRR)jAMEIQL%H$r5|W!da#Ge83wG5f zX_QuHPSaFn;Gj>I4iU93fmU9RlR6!=iGeXm#Or6ISOL+l8m$@Tbm6G(@wzq)QeScs zPT}*Sf=feCuKU&k9ZbIaS>B3o_G^0{k5hB8iW1&u0*%XER|+?k9Y!Z*;Gou&tjNng zx2!3dMrJkn>??nZd(^j$9237L>=<2C_@ZA90CD@`qmjt*EF-deXw9D^qtYWyG;wc( zka-AXxE&D?g4heGh=z^D@x0M>zSH@>9?7vaBopHv1ANrj_-#7;lUx!$o>U=rf_4ur z6*pgR;79OH>yDA8aG!lCw6V3Uml~B+jQ|XJ-GXl>Ap z2On`aO*+78h4$%H(eS#K*6+_4FEI~s+<@|rxC7{n6|`lc9Xza>PDa6w}}~?*53P;@Ik85XxirU$M#m* zO}`KkrH^^aln$k|$&!>*3tVno_vP^B5tv#EpT{X^AN*bJo!0KB(mOdjo0;k@+t;w_ zRI?=;fLQV^Xr-vB`MPS_6Lh7}=)B1$_xu8tt-=5|Q58E0`dHJV1UC^&uV#Bx%!J4f zH4AVty23B}V4@0%=yl6|)uW|UPp#coy1`V&CzR|jxgqGV6wGKe^y9)Y*(L0jdKiy}g@q zW@6Sd={&ijqa6E493HP&USi+-WnpATw|zv1rlxw>q9Qr`R$YBW@iuvGqv5K8F?4rJ zsY8Y8Dk?^o?XkA`Zcy?Awxp%QZ2mkF8H9NS#SFVJ#0%eC6DT6ZbZV^o^>Q*G_+0I> zw?&oOiJPlNCtdM?Nh+yg8Ica$%}XVc_2ic+{`4JsHVSRgWN$24;y~ z?AM7gcWh(i`k~0C9iC$|-NzzsZs5mH&WpSZ`x?Eg7by_L!sJrfvnVOh&U7z`jQeTu zX;Z}I_Ya@2^58|@ruXq+=wWM0BNsx=kz91tbYiMZ5$?g>G`CG>RLop=8u^MWeATc;^LWe zZbU^9B=m6`Qf%(I_;<}$;c)$~kj{u$1nq9X!K+CdjRAdgvpI??FqNs7JS?lIXkeZP zJrrj{JTfveA>YNyfb-18O>)c>a*!vh36GnTAN@5iT?Pu-=R>sWE=db|e47}y;cu%1 zUY7>vY>pSvrS9(!T%C5 ztcarAT(_+ftXm2v{mwR%wMdcU?ddAp`Nq24#!cTRHrd(P#M8teVa1e8g57l*A@he3 zUxSZm!-E|mPv*VOtx*s8flE_?c9qS+idlcM(7B(;*8c9En!39Bn>W9A>UKe|E^2D( zL;+`;??%mT0e`-YHrxeFx`nS!jv-M=Nqq-1O;?)(@d*jL;Iv^PS6$vMpjC+Xv~?Ak z$W>Kf;DGmW-8>gJcc?4ozf}sE;W#1}gH80|uhZ5yH|sVF>*hTU3b-uEYmcTZLD!>z zwK%in!W=%=dCz0psY6y88XAX{?~f0_SpLwEXtK}1ZSY0it(%pHfOiG5^p2MlTS8hI z1Ft}%WC0-2nouYT@PkRbcKg6=9enc)f%i!KMe)!5uhB7g39)DbQz|Jjbs3~0n0oQh zG11rxx=Tsdw8V}}QWUBq=G-@;7qon!ftHWFo)@Z~WIR03x*=1U#-_8zUlD zi(ybtWD^Dk20lK%d?N2F2&kfwiSasK>W&26697v!JJ;aeDd>9z8ELA7MIGarXc7u! z-9m$WHX!yMC+T;(_f0-FR-3oYY4e^=-n;+IA4fwy#`o)s%Q4V7V2=#S*=~J$ilh@c z4e%~W1*rQf=oQtnzg)G6JQMT7zWjybO?==~^4B$_nNwBoO4Ie!448d$C-fPX+{Ol4 z1UWz!w$?bTvVdKIe4FZTRY>gEg?k|O64EVxs+^rB>guL}!52Tv zd-DR3>!-%HPt1Ay@pY;b_|yXDe}8C$78Rg*@l<{rC+9h$@4s{>6)T1Yk)5s0=sDUJQDkTN~IEUo6}} z^S{^1c2&sbNU@1<;oiE>lqW66rBkhMX>M*pjDE?6Cd-4_Dj9JIVkD%Sr>SXXpJ{6W z-ut!I>qgSU_d4y+KV5B2`W6?iU*+Hm&imu2avtzx5l**==Rw|aTE`)dRuT65sVgn-(0RefY_M3 zO0C$4Ei5d;fe!TcNnM+-FM4G6$m}fH<~v%(4mX`|=$=}}iCuaD#&PSL;dRq#Gn~&H zBSwgpUuThDKjdLi3ya)#dqPcmwB|PvOV*Z_!*4lDu#HQVjvxY$4kH5$_~WAtZOfk! zy2tH=zUARxzLrqNp5Z@y2$=3Wul`&GK`WcCt~_;WB(_*-X;zY96ng8Umg`%fOxnr@ zOu_5lrC@;*ykuLWypalOYd}sJ6BRY`;|B>qEWp76k|8v<_7bM)+1Zfk6z~@|yF-y@ zpm+0&_OfU0j;si9?WzT!oYl|IU@sdK z;se(y%Ls<&54%V7P!XtsBwyXdR{ICi^JTsIp|2XI0SxoeU*p~oHkqsEtXg(-7}pq~ z<&0_Aw>7a+`gRM4nN*9R#;1z|!fmei>IQ5yaVNrGL)hBjRbji*a5P+-Ei4pHv8$AT zK~CRTmbbNi99kQ>@`!1n&O*KlryF)d)R4GizQT9MNQgYF$yS}7z|+%n%?f1El$2mX z{Vp5dq@l`C;@gT7Mku7*;}1HLmIe!jEV}6Q-hSz#)PqQNq6#u5Mq5IEkXviTPtESg zvoD+OZ^KDs>VAsQmRBI>nU|H>m9raabSVuZO$QQUatNoGvY5A9XZp4}=}b&Be?xTp ztaWeo8;+W1x@Hns*gja~XvIF2!mo{I&U)fA3_gn^9BU~J$_OwD(O**YhC1+? zIzNW&%+DXAV#Y~3vD{Z4&ADMJ20{pEnJdgEZ?#K-pWW7tDt{~WZGFB;cMKk-trKB? z*f3AA8{t2o1NsTrFE!xQO}Mt>%<)ZIn>!xV$OOfZd+s(|89TAT6}mb5WE8VvWj*@b ziB>oF%VLC1^l!|MP0%tYdRFM2FsNv3EsJ2D`Inq@y@~=oF8E0MHU4Pd-#rcvG+>XM z30ZEMpQiufHg`;+6`#<-!%ZPFhkRN1JZI&tKtknU8+Qzk6JAE~cBeCipv8K`M3guf zXF^;XcNG>7Qf;G@^m$pa)EyjS^p(w0sRQ_TqcHE24!xj+2zv^bx8{Q`A3c*bgr5&{ zD)gDH5HiVHun5f3gu5}#i8OabNoR})NrZ#vsBZ|~jmUUv$p{qmm7!}gP0p-+eZg0K zJ?Xx^bf35g6Wg)`|0(8>IGJ6Kx0?6^r5+Je)&Wa62svqGneEQ$nI)*9C8wAhIFYfm zOdL-_Xj4^HrVN!AK{Q%0KHLXH74HMkr>mM(hDTlM_R;d)N$>sJ?ztq<_{ z&pT&b>J@u*D>)1DI-2+}dhf9}}Jw9#ht$uCU$E4@l-DAASH=4B0`S%_4M_}HYe zX0c-kvWLt)h{bT~3_(hP=gTq13WTts!74L5jREbSZC}=s7`N5K7xVmjaCC?fyi_-L7e4&p_ZRoKr7emE3sbKQ?Wd%x!GD3R89xrE9a8K%kC&awJ zbznv`3EFU}Ra5S`_N@Va>+Upp?ZK~3BG`S=-*=n?vNsRsX3ghOSFH+6(f%;R-1+&f zke24GSF<4!VYL(*Dqoz=DDe^;XM5-h>oi8rR>$XfdAA&Z9S1m+vHk?*!QM4<^t;b; zhu6Vc`Q*s}bgz#17HKCDAxkKXfGt!5CXElP2s6}U2}eC2D5u`Au-w6j3p{($BMTm! zK_W)v=g}#vl95h+3@WOS*GUl(pigScj6~F8^_jgW+1;)u|~h)=TIj0?{)Zs*9P{7PmWpHl-|H-@ZZIYb>vQ62v;CH9gh8?fyM~ zl*slnx1yi``Mr=Lma2Xuk)_Fac7tm(D5UnO3Awgh^cU2KrM66;(Mb~x(4r#@Ix!c+ z_k8HL5%HS}s%ah)fKt)t0tP_E#J+pZ1;1wSRC81??u^|eZd0stKL_qGUVHmGNpG6G z6*4L+saAOQd6l~#D$GbfQV_1WoT#=s?@7QokcH2*{Cs@&=-t@P%!SfWV}XL8s#1+p z7R?wDD7$>k{_Y+gF$bpm%E>HVI|tZQ*-8mK)#@6|9W%lg4_(EpR#xLMT=xpZeP~P7RN<fMYDwcS< zYnJ&*T59R2#3C%IE#*{A+6{UoYcj@k>T4ynn;fQhdP}SIw)NJjWfqn%kp^JuCSI4U8lZ%B29cD8IE%o@`NEoX9py;ce#4<;iO&*?Pw%bnl zDkE7s$MO^9kL8w3dg}25k=qBWYBR;g%asfg-ehN~SPC)yPbHQ&!{)rsr>vu~g^#c3 zcJ5#PP9KZ4T)Lw@`d%>VV?Ff8YJn!y_??QC4!ir#%o8=6ylgvSi~|Xm!7-zPf{HzU zyYBfWlkK$U#6tO&h$(AQ8U<_JG?^B^_J}&DV|LLsFt|*hu>+~#F_0GT+rVg*Q_%dP6IvZ zEgr~>S-I?e`ZP+{6t( z+yQs*b(x~f)5=#*xMu6WY?JH<$E?03PZ)g-8B1a;k^!Q21(}2-huN7L=X(5&5~;Ax zUx&En6;m?bHXZzIV}|4R}9y~$?Z^&!%U7B^T<7`I))Jk z{rBvJK8+Tw7iD=JI}GerMU)u#KKR6K`HS}xoG!~q)){dF@Nf^V^&gZs=|W>x^}H>$ z&bYpfu>=P9>zs`|a3yjeS}h@)7M@4BUT$#JZ0dQ8H8ymVyNL-aRF+<<&etB?reY_A z+qmRQYHK8RKI9AN()2!wguW{n7H-fb*zVxu^H~*m8#U{FvIvM7KT*1G}2_ znV*E%w#7pEn1&C2YvK)_$3m~BXvF4f3$$Y_Eu9+6J)5EhZ{mgj4B$Q8e4=|hYFm2N&GHjQKgN)e ze!zOQz^1Z2aXGY7VF^Z(&oWzD5p~;gSs;N&q$z8%+uHjIc~P)=Aj7kS&zH~r!KGlx z_-9W~vg?wR%_clTTV~~peg*&A&pz&sD-keDjLQS%Q@&oA)q7n1v);M)?41Sz^tZ`f zu7*M`#+WmFXfm!AulS0{d;3H3x+<3gek^C4LZ~%F<{Q)4N8)QBk3-_Tya*(w0WdX-PwtvL_o{4=Vk6C}1e&(lg!K8JQut5bC>tt8G!Y z_d+{jtnk9sC&^#ZlBI{|3(UFQ-+dIsR=9Zo#8#pyz*_({*iONc#JSWJD=8~GVo|X= z5cX@#A+6KS!{FD#bu9ld{J)1#LI6L4!{K-Xho>Hp^f&Z}Zl3P$b)CaR(P*9cSvaN_pTRdAYXQvC(Q%-D!P0U4O5ZaTrAY;d33q~ZoAB7;-U&r);tM0+KGTHYfHg>` z$y^z1e9W+4Nqcii*0tvKT%^T4cU*AEWdQ)&7WA`FfmC z=*;qIqz#`|ze+vre5J#1W>OabGAMQaapL1lte~*gLJm!gu9ob$UW8&Whm61GTwkr*&eZ$1 zH#eVA`5G8&ni8A-d`uo@HW>aY;}2|f4LgT-0<6#TU##!yVZEO1ABG&w|D`uo?i>1x zfVV$U=Y9fLP(L|{iRO`6fw~g^nC)FO{Xiq)*EuTq;RCA=#yUak1e6Lx^qTo~mUa^W zNt$r7c>gn7tx~2ZR;17Vph;>-e{f!OwDm$s?)?{q9jOPS_pFiI=`c-QNrN`^is`2b3 z4~q0J?`RiqKdnIrVdzc~uPF}G_g(WV4+$UGsnDkM!I6mf1fNs*U%xC$#jT(q<@?Ev z8h3B9g)S^iY;9Sd%q(ZrK#Ye~w`PonRtns=x6OhuA=n=rpR9>*UeQswc}Q4$kFA%h zjR{CUcyJIh^J@yvDKrS}uO-MED3qet&^Vop_I&6rE-B@ilIez< zTm1%K6)xU@Zf#Asx!fsjqtkTm=J*trYx`#MTxnymaqC7>9S_+WiuhgPtKP`rU&M8H zAtgX8**vo92;@!!Ag4ro-~ANu7cBB7-#HzfYN?B=iWFK#n4w!hJ%LRm1$m`{A6rj= zA+AH3XBgexJ(YZ9d*@Z9<`#Cm5z}mGw20NC&r?E0Tb0WN)3vagO4C)D>0|BgXSjIx zlVzmnvN%W_sVA7mUi3l!dV=V5*i_|>T4Y2hmof>wC4bhu6plMUN0Tvkb}UZAfpax0 z;wc7!U$R;=&Yc|=IM^^Ji9xvfh3XLV2TNj!2kp!m3bxENRQ4lVbM>y%CC&M01vT{Z zFUMvd!CxfN|1}oSXA7fS>qET4kuWwjP3BW3DyZ)GpDR1rzbiX$r=zcFwi92&WPX`u zce4Pg>%b21Y^dC*5m2wUw<9Byw`G4KNEpPG=+AplTXpq&Br!0Ak$m2$A=Q};c$$iH zX+?Io@iBdxFMaNftqxTcu-ev2o9vprkaNg{QAF83ciiz>3zbt%{7|Kt-*2#ylP7XM z4^_R|efiUE0>eq&WM9_3}O==9C2XLnhax3u1V=eI3pqxM=StW!_hRbO&B zvE(F6fxu08zTUNy*ygG9=WXpj%Za||{{LM6du&YIEJUUbzmrSs?0d9o*ofhCkZWI- z#K)85DHB)G@+$AedrbGsB{+q`NTl1+Gc(yS7optGd-7KP*~spfen#)y^YIBXBD;eo z3sJKyYgeM!1O}s=Brsrd+GqN}VN@q{(e!)l5Kx^C4LzO(O;u>~4i6nQk6@0DpGA6- z>XjX`=;ZTgR;$0WBu8}Y+8g}kL1c-@>5f(cnoo3D{-dbP-e~#*Dqn4X4XC~qF++$!51V@{OMQ%!V zc9$``iLtSxqoaztI%=8K8wlP*VLE8a*EA3~VjH8Rm*;^a!K_^;*_DYO*nfe1R8djU zz~C1h!b3?_^^rV{!|F;~dwYm?F`Dw-f4)ZS-CdP`nI%zXO>wnqiI}2M8t`1A!}0dR z7O8@bkAp~Bx@jrLn`vY6yeCLCi3r+~xf)|rYnzgsJ%H>B$PL8l&C{ltb6oYMbLg)> zL3o!-Labiz;ZQIyhoKNW&PngW7z#IwnhMj?+nPEO5F%s%D#8)`4Ft#2pdS;5Aq^JR z>T8{DQZ)3IYmf&7qcpj}7o?v8C1Xl{o-KX2Vdl%S z6KYsqMQ~FufvXwMugmA}t7t!t$*kHsJ5fmcE~?7lG@7dlaC@9Kx7b${zwL3dcOS=#Hx+sZlq*k z=0k6{!U(lIGT0>=t}Kcp zHI*K{a)GRzZnrr#MRdUTn#xlu-bH|bNaGK`f`^a*ujL`y12oE>&t;=YRUT%O5x4g) z3TgZD9Z`yEG1mQS)>EU7+$rnsB5Y>s@}vBc7MJ@twi`0u)f))e2caHny2`raBMg#P zMA-{vJ6aWQ8&%HtKX8QZg=$8mr(A9~KO-Kz87vBdJ*AwR&)1sEl?lWFd&7i>{FnLz z^)LY30JPRW+#eJsmZ9{VAolbo+QWd&w#Vvw`=D^p-6;x(w zY&>%rWJMMI8ZlGHE8~#bFAjkyxzC0t!6ck=%XYPpZ`OOJ2TETs3zBGasMpL|r_FPm5v6;n9)aH*NIyzkVgyUr%p;k|D2?XddsX zUbp8pGTnM?K~|#`W(uQ8La@vg6|;+q0}gzROXlOtwUPw(vq)9vR%lq__7E}qf+iKd zE;FHf)^e|imjzFLbyZhe7&l4Lc%8#)KcLQ1oVgzRD$)~B08M@NJOkS2zuR}J1pbuv z_AT0B+JqIeH?1glhvUMkqa8QP<3eYgDg4sDvWfnK%9G9AdX(Q)d*DRy$BX>iF@1B4 zx^6jxhm%>4R*^vz_0Jg%M)pQVMnD0B18HZem41AobjAX2VSPOyrlH*lci!v&%_>yF^13kg{*I?)Zj5xV%`0nv3d7VG~%t7r&U48=)1`(j_D)z#IdrE%1T z-$V<36s;xF`}JweW&JGInYC6+OmZ?yFHrx6{+6hTi;MfOC5r5ywYC^iHM`JpsPX>! z-GRS_6E9W%YnRzT#4`pO{(Lp~O5rouQ5X)bP6jg~sIlry0I+@gS+D(9OR_yzYDEH1 zVd!;|6w41*Ye1<9;gAw3J3q${N|5r;T<8P66iNna1XGMvVd@B z6C@w|N=|%B>%C(0zbViEc{=z1zBjg?q3}Qe|7iECkn8^~fbX^ceB&0HtmR+MHXn5x z=q01UTb+pwObdqSiLNha?GO7;d50|4DKIq~n6uHO{>$3_?}0hn!5uV8_W$2wn$Wll z-Y+)YuF}NV>=jq}>%~Pn-yHKNG!fY8oI1JB0?jz(^{l{}?L1TX4O&SBJPO@s3q=;;ss9#%{9a`ElOG@5IQnx! zOFs%AMG$3Buxpq~GJoTStSpAdHP6ZBwXm>IuP6Hj-5<->K!ecI;ifF4`Wd*ZY@r~9 zqn0WOy{R7$Y+YDbSjIrBcDA#Jikfgc%WL7n_ZPu8WnSNC3mjNgre|xr6YGDr%0T(x zI)Q&5K>OUhBZP;gr>i>9-$S^jq~uqT_od+2s~gS4Z~py^`DAHR-7nwvD@3%kiQ>>P zoS88c_6Cg&UBlO)I2M#-eGWsMcXe=$C%djfoe}E+FebL-D5(eJCs3M97b+@eq+gMz zOQyis({G27(J+{+>tqa+d>`dD3wxlRPv7@FQQXnIqmD`0^D?fdr>TQQ7R{e{v*{U0 z_4B~GG%#`E2lq8k5%QD$&mJUg)a#BmO)JSoz4iJ%WKx2Sp2_I5P@0vmkSy3=nm_3w x)XQ+|?qgq@##4b(CJNyT@!*!*@BJ^m3*PEHB=aN$P1(`Vq{QVRg`)Z&|1UdfxkUf~ literal 69508 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 diff --git a/src/extensions/core/uploadAudio.ts b/src/extensions/core/uploadAudio.ts index 80e648d4a..bde5af6c1 100644 --- a/src/extensions/core/uploadAudio.ts +++ b/src/extensions/core/uploadAudio.ts @@ -11,7 +11,10 @@ import type { IStringWidget } from '@/lib/litegraph/src/types/widgets' import { useToastStore } from '@/platform/updates/common/toastStore' -import type { ResultItemType } from '@/schemas/apiSchema' +import { + getResourceURL, + splitFilePath +} from '@/renderer/extensions/vueNodes/widgets/utils/audioUtils' import type { ComfyNodeDef } from '@/schemas/nodeDefSchema' import type { DOMWidget } from '@/scripts/domWidget' import { useAudioService } from '@/services/audioService' @@ -21,32 +24,6 @@ import { getNodeByLocatorId } from '@/utils/graphTraversalUtil' import { api } from '../../scripts/api' import { app } from '../../scripts/app' -function splitFilePath(path: string): [string, string] { - const folder_separator = path.lastIndexOf('/') - if (folder_separator === -1) { - return ['', path] - } - return [ - path.substring(0, folder_separator), - path.substring(folder_separator + 1) - ] -} - -function getResourceURL( - subfolder: string, - filename: string, - type: ResultItemType = 'input' -): string { - const params = [ - 'filename=' + encodeURIComponent(filename), - 'type=' + type, - 'subfolder=' + subfolder, - app.getRandParam().substring(1) - ].join('&') - - return `/view?${params}` -} - async function uploadFile( audioWidget: IStringWidget, audioUIWidget: DOMWidget, @@ -123,7 +100,6 @@ app.registerExtension({ const audioUIWidget: DOMWidget = node.addDOMWidget(inputName, /* name=*/ 'audioUI', audio) audioUIWidget.serialize = false - const { nodeData } = node.constructor if (nodeData == null) throw new TypeError('nodeData is null') @@ -199,6 +175,7 @@ app.registerExtension({ const audioUIWidget = node.widgets.find( (w) => w.name === 'audioUI' ) as unknown as DOMWidget + audioUIWidget.options.canvasOnly = true const onAudioWidgetUpdate = () => { audioUIWidget.element.src = api.apiURL( @@ -273,9 +250,9 @@ app.registerExtension({ audio.controls = true audio.classList.add('comfy-audio') audio.setAttribute('name', 'media') - const audioUIWidget: DOMWidget = node.addDOMWidget(inputName, /* name=*/ 'audioUI', audio) + audioUIWidget.options.canvasOnly = true let mediaRecorder: MediaRecorder | null = null let isRecording = false diff --git a/src/lib/litegraph/src/types/widgets.ts b/src/lib/litegraph/src/types/widgets.ts index 8d77c79e9..02111acef 100644 --- a/src/lib/litegraph/src/types/widgets.ts +++ b/src/lib/litegraph/src/types/widgets.ts @@ -79,6 +79,7 @@ export type IWidget = | ISelectButtonWidget | ITextareaWidget | IAssetWidget + | IAudioRecordWidget export interface IBooleanWidget extends IBaseWidget { type: 'toggle' @@ -227,6 +228,11 @@ export interface ITextareaWidget extends IBaseWidget { value: string } +export interface IAudioRecordWidget extends IBaseWidget { + type: 'audiorecord' + value: string +} + export interface IAssetWidget extends IBaseWidget> { type: 'asset' diff --git a/src/locales/en/main.json b/src/locales/en/main.json index 4701db3f4..371ff3e09 100644 --- a/src/locales/en/main.json +++ b/src/locales/en/main.json @@ -182,7 +182,17 @@ "nodeHeaderError": "Node Header Error", "nodeSlotsError": "Node Slots Error", "nodeWidgetsError": "Node Widgets Error", - "frameNodes": "Frame Nodes" + "frameNodes": "Frame Nodes", + "listening": "Listening...", + "ready": "Ready", + "playRecording": "Play Recording", + "playing": "Playing", + "stopPlayback": "Stop Playback", + "playbackSpeed": "Playback Speed", + "volume": "Volume", + "halfSpeed": "0.5x", + "1x": "1x", + "2x": "2x" }, "manager": { "title": "Custom Nodes Manager", diff --git a/src/renderer/extensions/vueNodes/components/NodeWidgets.vue b/src/renderer/extensions/vueNodes/components/NodeWidgets.vue index cbf746ff4..0d6764e89 100644 --- a/src/renderer/extensions/vueNodes/components/NodeWidgets.vue +++ b/src/renderer/extensions/vueNodes/components/NodeWidgets.vue @@ -120,12 +120,14 @@ const processedWidgets = computed((): ProcessedWidget[] => { const result: ProcessedWidget[] = [] for (const widget of widgets) { + // Skip if widget is in the hidden list for this node type if (widget.options?.hidden) continue if (widget.options?.canvasOnly) continue if (!widget.type) continue if (!shouldRenderAsVue(widget)) continue - const vueComponent = getComponent(widget.type) || WidgetInputText + const vueComponent = + getComponent(widget.type, widget.name) || WidgetInputText const slotMetadata = widget.slotMetadata @@ -150,6 +152,9 @@ const processedWidgets = computed((): ProcessedWidget[] => { } const updateHandler = (value: unknown) => { + // Update the widget value directly + widget.value = value as WidgetValue + if (widget.callback) { widget.callback(value) } diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetAudioUI.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetAudioUI.vue new file mode 100644 index 000000000..9c472cdec --- /dev/null +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetAudioUI.vue @@ -0,0 +1,60 @@ + + + diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetRecordAudio.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetRecordAudio.vue new file mode 100644 index 000000000..666f88fa9 --- /dev/null +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetRecordAudio.vue @@ -0,0 +1,320 @@ + + + diff --git a/src/renderer/extensions/vueNodes/widgets/components/audio/AudioPreviewPlayer.vue b/src/renderer/extensions/vueNodes/widgets/components/audio/AudioPreviewPlayer.vue new file mode 100644 index 000000000..f520b4b0f --- /dev/null +++ b/src/renderer/extensions/vueNodes/widgets/components/audio/AudioPreviewPlayer.vue @@ -0,0 +1,393 @@ + + + + + diff --git a/src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioPlayback.ts b/src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioPlayback.ts new file mode 100644 index 000000000..95ac717c6 --- /dev/null +++ b/src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioPlayback.ts @@ -0,0 +1,80 @@ +import { nextTick, ref } from 'vue' +import type { Ref } from 'vue' + +interface AudioPlaybackOptions { + onPlaybackEnded?: () => void + onMetadataLoaded?: (duration: number) => void +} + +export function useAudioPlayback( + audioRef: Ref, + options: AudioPlaybackOptions = {} +) { + const isPlaying = ref(false) + const audioElementKey = ref(0) + const playbackTimerInterval = ref | null>(null) + + async function play() { + if (!audioRef.value) return false + + try { + await audioRef.value.play() + isPlaying.value = true + return true + } catch (error) { + console.warn('Audio playback failed:', error) + isPlaying.value = false + return false + } + } + + function stop() { + if (audioRef.value) { + audioRef.value.pause() + audioRef.value.currentTime = 0 + } + isPlaying.value = false + if (options.onPlaybackEnded) { + options.onPlaybackEnded() + } + } + + function onPlaybackEnded() { + isPlaying.value = false + if (options.onPlaybackEnded) { + options.onPlaybackEnded() + } + } + + function onMetadataLoaded() { + if (audioRef.value?.duration && options.onMetadataLoaded) { + options.onMetadataLoaded(audioRef.value.duration) + } + } + + async function resetAudioElement() { + audioElementKey.value += 1 + await nextTick() + } + + function getCurrentTime() { + return audioRef.value?.currentTime || 0 + } + + function getDuration() { + return audioRef.value?.duration || 0 + } + + return { + isPlaying, + audioElementKey, + play, + stop, + onPlaybackEnded, + onMetadataLoaded, + resetAudioElement, + getCurrentTime, + getDuration, + playbackTimerInterval + } +} diff --git a/src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioRecorder.ts b/src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioRecorder.ts new file mode 100644 index 000000000..276c2de0a --- /dev/null +++ b/src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioRecorder.ts @@ -0,0 +1,107 @@ +import { MediaRecorder as ExtendableMediaRecorder } from 'extendable-media-recorder' +import { onUnmounted, ref } from 'vue' + +import { useAudioService } from '@/services/audioService' + +interface AudioRecorderOptions { + onRecordingComplete?: (audioBlob: Blob) => Promise + onError?: (error: Error) => void +} + +export function useAudioRecorder(options: AudioRecorderOptions = {}) { + const isRecording = ref(false) + const mediaRecorder = ref(null) + const audioChunks = ref([]) + const stream = ref(null) + const recordedURL = ref(null) + + async function startRecording() { + try { + // Clean up previous recording + if (recordedURL.value?.startsWith('blob:')) { + URL.revokeObjectURL(recordedURL.value) + } + + // Initialize + audioChunks.value = [] + recordedURL.value = null + + // Register wav encoder and get media stream + await useAudioService().registerWavEncoder() + stream.value = await navigator.mediaDevices.getUserMedia({ audio: true }) + + // Create media recorder + mediaRecorder.value = new ExtendableMediaRecorder(stream.value, { + mimeType: 'audio/wav' + }) as unknown as MediaRecorder + + mediaRecorder.value.ondataavailable = (e) => { + audioChunks.value.push(e.data) + } + + mediaRecorder.value.onstop = async () => { + const blob = new Blob(audioChunks.value, { type: 'audio/wav' }) + + // Create blob URL for preview + if (recordedURL.value?.startsWith('blob:')) { + URL.revokeObjectURL(recordedURL.value) + } + recordedURL.value = URL.createObjectURL(blob) + + // Notify completion + if (options.onRecordingComplete) { + await options.onRecordingComplete(blob) + } + + cleanup() + } + + // Start recording + mediaRecorder.value.start(100) + isRecording.value = true + } catch (err) { + if (options.onError) { + options.onError(err as Error) + } + throw err + } + } + + function stopRecording() { + if (mediaRecorder.value && mediaRecorder.value.state !== 'inactive') { + mediaRecorder.value.stop() + } else { + cleanup() + } + } + + function cleanup() { + isRecording.value = false + + if (stream.value) { + stream.value.getTracks().forEach((track) => track.stop()) + stream.value = null + } + } + + function dispose() { + stopRecording() + if (recordedURL.value) { + URL.revokeObjectURL(recordedURL.value) + recordedURL.value = null + } + } + + onUnmounted(() => { + dispose() + }) + + return { + isRecording, + recordedURL, + mediaRecorder, + startRecording, + stopRecording, + dispose + } +} diff --git a/src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioWaveform.ts b/src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioWaveform.ts new file mode 100644 index 000000000..37d541f85 --- /dev/null +++ b/src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioWaveform.ts @@ -0,0 +1,145 @@ +import { onUnmounted, ref } from 'vue' +import type { Ref } from 'vue' + +interface WaveformBar { + height: number +} + +interface AudioWaveformOptions { + barCount?: number + minHeight?: number + maxHeight?: number +} + +export function useAudioWaveform(options: AudioWaveformOptions = {}) { + const { barCount = 18, minHeight = 4, maxHeight = 32 } = options + + const waveformBars = ref( + Array.from({ length: barCount }, () => ({ height: 16 })) + ) + const audioContext = ref(null) + const analyser = ref(null) + const dataArray = ref(null) + const animationId = ref(null) + const mediaElementSource = ref(null) + + function initWaveform() { + waveformBars.value = Array.from({ length: barCount }, () => ({ + height: Math.random() * (maxHeight - minHeight) + minHeight + })) + } + + function updateWaveform(isActive: Ref) { + if (!isActive.value) return + + if (analyser.value && dataArray.value) { + updateWaveformFromAudio() + } else { + updateWaveformRandom() + } + + animationId.value = requestAnimationFrame(() => updateWaveform(isActive)) + } + + function updateWaveformFromAudio() { + if (!analyser.value || !dataArray.value) return + + analyser.value.getByteFrequencyData( + dataArray.value as Uint8Array + ) + const samplesPerBar = Math.floor(dataArray.value.length / barCount) + + waveformBars.value = waveformBars.value.map((_, i) => { + let sum = 0 + for (let j = 0; j < samplesPerBar; j++) { + sum += dataArray.value![i * samplesPerBar + j] || 0 + } + const average = sum / samplesPerBar + const normalizedHeight = + (average / 255) * (maxHeight - minHeight) + minHeight + return { height: normalizedHeight } + }) + } + + function updateWaveformRandom() { + waveformBars.value = waveformBars.value.map((bar) => ({ + height: Math.max( + minHeight, + Math.min(maxHeight, bar.height + (Math.random() - 0.5) * 4) + ) + })) + } + + async function setupAudioContext() { + if (audioContext.value && audioContext.value.state !== 'closed') { + await audioContext.value.close() + } + audioContext.value = null + mediaElementSource.value = null + } + + async function setupRecordingVisualization(stream: MediaStream) { + audioContext.value = new window.AudioContext() + analyser.value = audioContext.value.createAnalyser() + const source = audioContext.value.createMediaStreamSource(stream) + source.connect(analyser.value) + + analyser.value.fftSize = 256 + dataArray.value = new Uint8Array(analyser.value.frequencyBinCount) + } + + async function setupPlaybackVisualization(audioElement: HTMLAudioElement) { + if (audioContext.value && audioContext.value.state !== 'closed') { + await audioContext.value.close() + } + + mediaElementSource.value = null + + if (!audioElement) return false + + audioContext.value = new window.AudioContext() + analyser.value = audioContext.value.createAnalyser() + + mediaElementSource.value = + audioContext.value.createMediaElementSource(audioElement) + + mediaElementSource.value.connect(analyser.value) + analyser.value.connect(audioContext.value.destination) + + analyser.value.fftSize = 256 + dataArray.value = new Uint8Array(analyser.value.frequencyBinCount) + + return true + } + + function stopWaveform() { + if (animationId.value) { + cancelAnimationFrame(animationId.value) + animationId.value = null + } + } + + function dispose() { + stopWaveform() + if (audioContext.value && audioContext.value.state !== 'closed') { + void audioContext.value.close() + } + audioContext.value = null + mediaElementSource.value = null + } + + onUnmounted(() => { + dispose() + }) + + return { + waveformBars, + initWaveform, + updateWaveform, + setupAudioContext, + setupRecordingVisualization, + setupPlaybackVisualization, + stopWaveform, + dispose + } +} diff --git a/src/renderer/extensions/vueNodes/widgets/composables/useAudioRecordWidget.ts b/src/renderer/extensions/vueNodes/widgets/composables/useAudioRecordWidget.ts new file mode 100644 index 000000000..efa11a43b --- /dev/null +++ b/src/renderer/extensions/vueNodes/widgets/composables/useAudioRecordWidget.ts @@ -0,0 +1,24 @@ +import type { LGraphNode } from '@/lib/litegraph/src/litegraph' +import type { IAudioRecordWidget } from '@/lib/litegraph/src/types/widgets' +import type { + AudioRecordInputSpec, + InputSpec as InputSpecV2 +} from '@/schemas/nodeDef/nodeDefSchemaV2' +import type { ComfyWidgetConstructorV2 } from '@/scripts/widgets' + +export const useAudioRecordWidget = (): ComfyWidgetConstructorV2 => { + return (node: LGraphNode, inputSpec: InputSpecV2): IAudioRecordWidget => { + const { + name, + default: defaultValue = '', + options = {} + } = inputSpec as AudioRecordInputSpec + + const widget = node.addWidget('audiorecord', name, defaultValue, () => {}, { + serialize: true, + ...options + }) as IAudioRecordWidget + + return widget + } +} diff --git a/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts b/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts index b07c89e5b..8bda86865 100644 --- a/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts +++ b/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts @@ -3,6 +3,7 @@ */ import type { Component } from 'vue' +import WidgetAudioUI from '../components/WidgetAudioUI.vue' import WidgetButton from '../components/WidgetButton.vue' import WidgetChart from '../components/WidgetChart.vue' import WidgetColorPicker from '../components/WidgetColorPicker.vue' @@ -13,11 +14,13 @@ import WidgetInputNumber from '../components/WidgetInputNumber.vue' import WidgetInputText from '../components/WidgetInputText.vue' import WidgetMarkdown from '../components/WidgetMarkdown.vue' import WidgetMultiSelect from '../components/WidgetMultiSelect.vue' +import WidgetRecordAudio from '../components/WidgetRecordAudio.vue' import WidgetSelect from '../components/WidgetSelect.vue' import WidgetSelectButton from '../components/WidgetSelectButton.vue' import WidgetTextarea from '../components/WidgetTextarea.vue' import WidgetToggleSwitch from '../components/WidgetToggleSwitch.vue' import WidgetTreeSelect from '../components/WidgetTreeSelect.vue' +import AudioPreviewPlayer from '../components/audio/AudioPreviewPlayer.vue' interface WidgetDefinition { component: Component @@ -108,9 +111,29 @@ const coreWidgetDefinitions: Array<[string, WidgetDefinition]> = [ [ 'markdown', { component: WidgetMarkdown, aliases: ['MARKDOWN'], essential: false } + ], + [ + 'audiorecord', + { + component: WidgetRecordAudio, + aliases: ['AUDIO_RECORD', 'AUDIORECORD'], + essential: false + } + ], + [ + 'audioUI', + { + component: AudioPreviewPlayer, + aliases: ['AUDIOUI', 'AUDIO_UI'], + essential: false + } ] ] +const getComboWidgetAdditions = (): Map => { + return new Map([['audio', WidgetAudioUI]]) +} + // Build lookup maps const widgets = new Map() const aliasMap = new Map() @@ -125,7 +148,13 @@ for (const [type, def] of coreWidgetDefinitions) { // Utility functions const getCanonicalType = (type: string): string => aliasMap.get(type) || type -export const getComponent = (type: string): Component | null => { +export const getComponent = (type: string, name: string): Component | null => { + if (type == 'combo') { + const comboAdditions = getComboWidgetAdditions() + if (comboAdditions.has(name)) { + return comboAdditions.get(name) || null + } + } const canonicalType = getCanonicalType(type) return widgets.get(canonicalType)?.component || null } diff --git a/src/renderer/extensions/vueNodes/widgets/utils/audioUtils.ts b/src/renderer/extensions/vueNodes/widgets/utils/audioUtils.ts new file mode 100644 index 000000000..35e0c4482 --- /dev/null +++ b/src/renderer/extensions/vueNodes/widgets/utils/audioUtils.ts @@ -0,0 +1,54 @@ +import type { ResultItemType } from '@/schemas/apiSchema' +import { api } from '@/scripts/api' + +/** + * Format time in MM:SS format + */ +export function formatTime(seconds: number): string { + if (isNaN(seconds) || seconds === 0) return '0:00' + + const mins = Math.floor(seconds / 60) + const secs = Math.floor(seconds % 60) + return `${mins}:${secs.toString().padStart(2, '0')}` +} + +/** + * Get full audio URL from path + */ +export function getAudioUrlFromPath( + path: string, + type: ResultItemType = 'input' +): string { + const [subfolder, filename] = splitFilePath(path) + return api.apiURL(getResourceURL(subfolder, filename, type)) +} + +function getRandParam() { + return '&rand=' + Math.random() +} + +export function getResourceURL( + subfolder: string, + filename: string, + type: ResultItemType = 'input' +): string { + const params = [ + 'filename=' + encodeURIComponent(filename), + 'type=' + type, + 'subfolder=' + subfolder, + getRandParam().substring(1) + ].join('&') + + return `/view?${params}` +} + +export function splitFilePath(path: string): [string, string] { + const folder_separator = path.lastIndexOf('/') + if (folder_separator === -1) { + return ['', path] + } + return [ + path.substring(0, folder_separator), + path.substring(folder_separator + 1) + ] +} diff --git a/src/schemas/nodeDef/nodeDefSchemaV2.ts b/src/schemas/nodeDef/nodeDefSchemaV2.ts index 09983d115..f77c59a80 100644 --- a/src/schemas/nodeDef/nodeDefSchemaV2.ts +++ b/src/schemas/nodeDef/nodeDefSchemaV2.ts @@ -152,6 +152,13 @@ const zTextareaInputSpec = zBaseInputOptions.extend({ .optional() }) +const zAudioRecordInputSpec = zBaseInputOptions.extend({ + type: z.literal('AUDIORECORD'), + name: z.string(), + isOptional: z.boolean().optional(), + options: z.record(z.unknown()).optional() +}) + const zCustomInputSpec = zBaseInputOptions.extend({ type: z.string(), name: z.string(), @@ -167,6 +174,7 @@ const zInputSpec = z.union([ zColorInputSpec, zFileUploadInputSpec, zImageInputSpec, + zAudioRecordInputSpec, zImageCompareInputSpec, zMarkdownInputSpec, zTreeSelectInputSpec, @@ -222,6 +230,7 @@ export type GalleriaInputSpec = z.infer export type SelectButtonInputSpec = z.infer export type TextareaInputSpec = z.infer export type CustomInputSpec = z.infer +export type AudioRecordInputSpec = z.infer export type InputSpec = z.infer export type OutputSpec = z.infer diff --git a/src/scripts/widgets.ts b/src/scripts/widgets.ts index dd75081af..97fd3f829 100644 --- a/src/scripts/widgets.ts +++ b/src/scripts/widgets.ts @@ -6,6 +6,7 @@ import type { IStringWidget } from '@/lib/litegraph/src/types/widgets' import { useSettingStore } from '@/platform/settings/settingStore' +import { useAudioRecordWidget } from '@/renderer/extensions/vueNodes/widgets/composables/useAudioRecordWidget' import { useBooleanWidget } from '@/renderer/extensions/vueNodes/widgets/composables/useBooleanWidget' import { useChartWidget } from '@/renderer/extensions/vueNodes/widgets/composables/useChartWidget' import { useColorWidget } from '@/renderer/extensions/vueNodes/widgets/composables/useColorWidget' @@ -304,5 +305,6 @@ export const ComfyWidgets: Record = { CHART: transformWidgetConstructorV2ToV1(useChartWidget()), GALLERIA: transformWidgetConstructorV2ToV1(useGalleriaWidget()), SELECTBUTTON: transformWidgetConstructorV2ToV1(useSelectButtonWidget()), - TEXTAREA: transformWidgetConstructorV2ToV1(useTextareaWidget()) + TEXTAREA: transformWidgetConstructorV2ToV1(useTextareaWidget()), + AUDIO_RECORD: transformWidgetConstructorV2ToV1(useAudioRecordWidget()) } diff --git a/tests-ui/tests/renderer/extensions/vueNodes/widgets/composables/useWidgetRenderer.test.ts b/tests-ui/tests/renderer/extensions/vueNodes/widgets/composables/useWidgetRenderer.test.ts index fe6708a40..773ed8364 100644 --- a/tests-ui/tests/renderer/extensions/vueNodes/widgets/composables/useWidgetRenderer.test.ts +++ b/tests-ui/tests/renderer/extensions/vueNodes/widgets/composables/useWidgetRenderer.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it, vi } from 'vitest' +import WidgetAudioUI from '@/renderer/extensions/vueNodes/widgets/components/WidgetAudioUI.vue' import WidgetButton from '@/renderer/extensions/vueNodes/widgets/components/WidgetButton.vue' import WidgetColorPicker from '@/renderer/extensions/vueNodes/widgets/components/WidgetColorPicker.vue' import WidgetFileUpload from '@/renderer/extensions/vueNodes/widgets/components/WidgetFileUpload.vue' @@ -26,81 +27,81 @@ describe('widgetRegistry', () => { // Test number type mappings describe('number types', () => { it('should map int types to slider widget', () => { - expect(getComponent('int')).toBe(WidgetInputNumber) - expect(getComponent('INT')).toBe(WidgetInputNumber) + expect(getComponent('int', 'bar')).toBe(WidgetInputNumber) + expect(getComponent('INT', 'bar')).toBe(WidgetInputNumber) }) it('should map float types to slider widget', () => { - expect(getComponent('float')).toBe(WidgetInputNumber) - expect(getComponent('FLOAT')).toBe(WidgetInputNumber) - expect(getComponent('number')).toBe(WidgetInputNumber) - expect(getComponent('slider')).toBe(WidgetInputNumber) + expect(getComponent('float', 'cfg')).toBe(WidgetInputNumber) + expect(getComponent('FLOAT', 'cfg')).toBe(WidgetInputNumber) + expect(getComponent('number', 'cfg')).toBe(WidgetInputNumber) + expect(getComponent('slider', 'cfg')).toBe(WidgetInputNumber) }) }) // Test text type mappings describe('text types', () => { it('should map text variations to input text widget', () => { - expect(getComponent('text')).toBe(WidgetInputText) - expect(getComponent('string')).toBe(WidgetInputText) - expect(getComponent('STRING')).toBe(WidgetInputText) + expect(getComponent('text', 'text')).toBe(WidgetInputText) + expect(getComponent('string', 'text')).toBe(WidgetInputText) + expect(getComponent('STRING', 'text')).toBe(WidgetInputText) }) it('should map multiline text types to textarea widget', () => { - expect(getComponent('multiline')).toBe(WidgetTextarea) - expect(getComponent('textarea')).toBe(WidgetTextarea) - expect(getComponent('TEXTAREA')).toBe(WidgetTextarea) - expect(getComponent('customtext')).toBe(WidgetTextarea) + expect(getComponent('multiline', 'text')).toBe(WidgetTextarea) + expect(getComponent('textarea', 'text')).toBe(WidgetTextarea) + expect(getComponent('TEXTAREA', 'text')).toBe(WidgetTextarea) + expect(getComponent('customtext', 'text')).toBe(WidgetTextarea) }) it('should map markdown to markdown widget', () => { - expect(getComponent('MARKDOWN')).toBe(WidgetMarkdown) - expect(getComponent('markdown')).toBe(WidgetMarkdown) + expect(getComponent('MARKDOWN', 'text')).toBe(WidgetMarkdown) + expect(getComponent('markdown', 'text')).toBe(WidgetMarkdown) }) }) // Test selection type mappings describe('selection types', () => { it('should map combo types to select widget', () => { - expect(getComponent('combo')).toBe(WidgetSelect) - expect(getComponent('COMBO')).toBe(WidgetSelect) + expect(getComponent('combo', 'image')).toBe(WidgetSelect) + expect(getComponent('COMBO', 'video')).toBe(WidgetSelect) }) }) // Test boolean type mappings describe('boolean types', () => { it('should map boolean types to toggle switch widget', () => { - expect(getComponent('toggle')).toBe(WidgetToggleSwitch) - expect(getComponent('boolean')).toBe(WidgetToggleSwitch) - expect(getComponent('BOOLEAN')).toBe(WidgetToggleSwitch) + expect(getComponent('toggle', 'image')).toBe(WidgetToggleSwitch) + expect(getComponent('boolean', 'image')).toBe(WidgetToggleSwitch) + expect(getComponent('BOOLEAN', 'image')).toBe(WidgetToggleSwitch) }) }) // Test advanced widget mappings describe('advanced widgets', () => { it('should map color types to color picker widget', () => { - expect(getComponent('color')).toBe(WidgetColorPicker) - expect(getComponent('COLOR')).toBe(WidgetColorPicker) + expect(getComponent('color', 'color')).toBe(WidgetColorPicker) + expect(getComponent('COLOR', 'color')).toBe(WidgetColorPicker) }) it('should map file types to file upload widget', () => { - expect(getComponent('file')).toBe(WidgetFileUpload) - expect(getComponent('fileupload')).toBe(WidgetFileUpload) - expect(getComponent('FILEUPLOAD')).toBe(WidgetFileUpload) + expect(getComponent('file', 'file')).toBe(WidgetFileUpload) + expect(getComponent('fileupload', 'file')).toBe(WidgetFileUpload) + expect(getComponent('FILEUPLOAD', 'file')).toBe(WidgetFileUpload) }) it('should map button types to button widget', () => { - expect(getComponent('button')).toBe(WidgetButton) - expect(getComponent('BUTTON')).toBe(WidgetButton) + expect(getComponent('button', '')).toBe(WidgetButton) + expect(getComponent('BUTTON', '')).toBe(WidgetButton) }) }) // Test fallback behavior describe('fallback behavior', () => { it('should return null for unknown types', () => { - expect(getComponent('unknown')).toBe(null) - expect(getComponent('custom_widget')).toBe(null) - expect(getComponent('')).toBe(null) + expect(getComponent('unknown', 'unknown')).toBe(null) + expect(getComponent('custom_widget', 'custom_widget')).toBe(null) + expect(getComponent('', '')).toBe(null) }) }) }) @@ -165,10 +166,16 @@ describe('widgetRegistry', () => { it('should handle case sensitivity correctly through aliases', () => { // Test that both lowercase and uppercase work - expect(getComponent('string')).toBe(WidgetInputText) - expect(getComponent('STRING')).toBe(WidgetInputText) - expect(getComponent('combo')).toBe(WidgetSelect) - expect(getComponent('COMBO')).toBe(WidgetSelect) + expect(getComponent('string', '')).toBe(WidgetInputText) + expect(getComponent('STRING', '')).toBe(WidgetInputText) + expect(getComponent('combo', '')).toBe(WidgetSelect) + expect(getComponent('COMBO', '')).toBe(WidgetSelect) + }) + + it('should handle combo additional widgets', () => { + // Test that both lowercase and uppercase work + expect(getComponent('combo', 'audio')).toBe(WidgetAudioUI) + expect(getComponent('combo', 'image')).toBe(WidgetSelect) }) }) }) diff --git a/vitest.setup.ts b/vitest.setup.ts index 042efb8cd..56b24693e 100644 --- a/vitest.setup.ts +++ b/vitest.setup.ts @@ -1,3 +1,4 @@ +import { vi } from 'vitest' import 'vue' // Define global variables for tests @@ -7,3 +8,12 @@ globalThis.__SENTRY_DSN__ = '' globalThis.__ALGOLIA_APP_ID__ = '' globalThis.__ALGOLIA_API_KEY__ = '' globalThis.__USE_PROD_CONFIG__ = false + +// Mock Worker for extendable-media-recorder +globalThis.Worker = vi.fn().mockImplementation(() => ({ + postMessage: vi.fn(), + terminate: vi.fn(), + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + dispatchEvent: vi.fn() +}))