From 377534e6e91e35fb5e17b7fc77c4d3d840e1caf5 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Thu, 16 Jul 2026 20:20:42 +0200 Subject: [PATCH] Room list: fix *Chat moved* toast appearing when room list is loaded (#34305) * Fix Chat moved toast appearing when room list is loaded * Update e2e tests --- .../room-list-unread-toast.spec.ts | 9 --------- .../room-list-sections-collapsed-linux.png | Bin 10103 -> 6855 bytes .../room-list-sections-linux.png | Bin 17944 -> 14664 bytes .../stores/room-list-v3/RoomListStoreV3.ts | 8 ++++++++ .../room-list-v3/RoomListStoreV3-test.ts | 14 ++++++++++++++ 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-unread-toast.spec.ts b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-unread-toast.spec.ts index c288e3a206..d469bae40e 100644 --- a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-unread-toast.spec.ts +++ b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-unread-toast.spec.ts @@ -181,15 +181,6 @@ test.describe("Room list unread activity toast", () => { // Wait until the collapsed Chats header has been pushed offscreen (all favourites synced). await expect(chatsHeader).not.toBeInViewport(); - // Tagging rooms into the Favourites section raises a transient "Chat moved" toast, which - // shares the single toast slot with — and takes precedence over — the unread-activity toast - // (see RoomListView). Dismiss it via its close button so the unread toast can surface; by now - // all favourites have synced, so it will not re-appear. - const chatMovedToast = page.getByText("Chat moved"); - await expect(chatMovedToast).toBeVisible(); - await page.getByRole("button", { name: "Close" }).click(); - await expect(chatMovedToast).not.toBeVisible(); - // The collapsed Chats header is offscreen, but its hidden notification raises the toast. await expect(getToast(page)).toBeVisible(); diff --git a/apps/web/playwright/snapshots/left-panel/room-list-panel/room-list-sections.spec.ts/room-list-sections-collapsed-linux.png b/apps/web/playwright/snapshots/left-panel/room-list-panel/room-list-sections.spec.ts/room-list-sections-collapsed-linux.png index e227652042cfa018049ee44f70cd1982b81e4649..5896c11bee6097c891cec26fed09d76fb7dada62 100644 GIT binary patch literal 6855 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 Vs-pQp<_`ieGr412ZTR5H{{VtUvV{Nu literal 10103 zcmeHtXE>Z)+wPEvha@Cw5Tpr15WS2NLmvF=poT?!CW%`_KFB{qy~IAJ@IseXq5S^El7*y4Dq~tF3mEmYo&=0Nhl6`CK0W zpzs6$C?Ebqc^L`RY)b|JZUNMvD;fA_p%-aP4Ax0M4_G00MA+O!9ca?SV>FuWoDNx` zCA(=wR?z;4f%;=RGc(`monk?|ISB!zg^IhC@^uLbk>Lmwqtr97#}$bvhF&Ei_p|<6 zkz!r+ukfKQgvHalT zS978e)Qu|0V45eog)SZ}S|Pd11EbV+y0ds=J?U>Saws3DO~>rM;&T? zuQ&t=|1q(dj1g6$(BO4_na})ebD$-&U^u^K@Jgzk8Abh%EmN>DxL)0qD$l#lYGRtg zvM)qvcb737ls-bYAK4Z|LxTjtL#S!ktJR$rXkUVS5Kdt_>}S?oot(V-{E8uWk#y*F3pBbY*|d-csKlb;_hqt0%s3QYL(?gR1sL@|t%#ZT#c*c(uN>bCHV zqgf6Wrtkg3kVE}>B6^lI4KGE`ytMQqR`47w03QayUFQG%bsKHFT?-1L+D!@|E+{g3 zc4xL%K^8a`WfSJp%bsxb`J$y?uU*%vci7**p430{P{4k~{A(6FX!~Ffe41r~GmH9T zRYzw6|J6MLdzxn(OU+&%@@8$wrytqyBWUS2@4RHly(Y&&Qnk?BaQe01iEDQ;mVS#8 zK{FMZ5>CB+eYowT)Fac{$7(wGr)EB9IOFANtK(7r1%;uqm}XC8uUk-oEwmuHP4F<> z{HQ8^xYT)>Q*!SlO!UqhMrwt)%ugl1vn?)2!BBF;5a_8km!ZVc< zJIew%K`w*Az}KYTwH)&2+LjI5t%*_TNQ8)&S%s=8{gVK{P^VSTSj6(hwE2BU&5deM z0RZ*=UKPzQ-4x1M1T^!O%65T9L& z1pX&YxhV4Hbx+W(c0m~d*;XXy@ju)8gXwJ|4`vECq4L~^A{oIu5yU#{O2(w5(+$-) zQsplKoR-g@wa@Eye`DIl-@lcVLyw`AMj=5n8u6BX-EZJ_Aw{OCuzuc07pr8%^0YNY zlX`7i!b}g(E|njvu+V{POk5zpqr=3nLwYd3tUjaXtpF8U~Lc^nCw6x%5=*>n6%=1GY z`Y_?f3aOGGRzIwkX=6OmL4Wrf)w=G<&NS z6gI7#`t0QhU z`NVOiVq7<|YGXD-3<=R1G@*MQhn{l&)nXv%%9yhyao^0`!TV_66Dk(i1O!OkcGd_C z3_Qy#!S!M2%b3O8mr$+Ps_$8l8(U8ww9PcIa?#L*){uu74R?$@39ALYHWa*XCY>VW zyxa&f1oK6}^jHV=2-qctxBORt#dWPu>ajyTXOUBpgx1RfD05|%1n^jTBfI}Cf zD_zgHia4DV6#)G@=4$w(|3lFKy~F|_;L$h}AlZQype|1J@4P-XJ_}becS6mqJ2zlK zffEJ%DDcB39~0P^6W9DZMz)TFLvsr2UB#?d4@H<_OT_`g7Ki^3!(0s0>a1qbeo0Y zwLU=O+1$ZuUwJ_(moDZ{{>Q?; zoXbQ`@v;2YxKc=$a=FFqnO241clE7@^n~2_*y@Wjj_Qw8hE2&$PNbC-iuS1ET{is_ zT)QG#pCZ0|sR+QN_%4LI5VjDj(p7$r&yo%ZoS>czZGSzESjv&ZbeB#VhLm4Gf8TSB zcwgmQ2YJgbC%1S#>k81i(lIL1aM;R_BP!zRtTvbI*Q!^YSF8dYUv9oubbYxN>KEWc zI%}3|wageubJWz)Y-|oRqT4w|?ccxug(;ljzL=V`cuV{7#UwWLxK#3K0Io|%*cwqW zoPUNl3fPXYua8ArjQ}stX5C+p=8nb7{8zl z)TEdpzAg6;nrp1VcB@%Jz+T(3cmO}`HkGfHa!JLqVeUXSi;OWOqNMib!xZYh_6{=Zb6JB$r7DNF_FM2)JU)FfpNL-qJ5FC+ z5oBa#WDTyF@;cHe&U4eD_L)4lm1%P6U11xPTMBE*q13&2WS#3}j6ZxBC2!uGJhyuZyrQX|vus@LZEHuUW%k^`s!ZMO%D{AHfrddzS3F0-QoBBjoG9G zi!KlMm(@vo&JWVmwBw_v+!BpXUU25@ahYksp46@fQ9&2!vQLGrp8h>yE6c)O>7-zW zCWtpvf2=R%u00$!ZfIbW{03e~i+W&`5ad|v`_A}eY{^D~Ih^6I*U63{6+qeFRpH;I zg@5thzfUU3`}Q@@y%D~b_dR0MgLd@s_zwbI%GKGU8g24%UatFCqv7!?d z8DE81Tf9sgf2?b*TYd8X;j|dU9KMk20cMFm--rqTRatquz=R+cX2)SQNRSQfPgm_9 zz|~A`5OfVaEigbM1eubTXzOzg)~0C6j+R)r)*?Y4A7t@o4otT{cHt@mpc>vL@Cb+E z7sS+J*qMg6Kh{|%Bp3nQ%qg{GJnyN(RP-KnWtTg3p>nl370LmqoU56Kown8veQ{qt z3w*8C4nSY0`g3Y9g=`aKYu#DFA5#jo?RJjl-VCew6(8$T0!}1n)e{CQIUeY+dc&7T zEHAK4*qrn+BO=vo@=OQ$U?wPsT{17Bl~OnTK|Hw1qWQdwbpf6fK`Ot)54&Q940GuP z{~a|D`fmT#)i^Yr02XP#L;tLne?ppP{kKeruqxga2`iW69uYSXMYc_sepofFw9Epx8yamVg(-Ncmn7j!e6(#23im6DBvdVfQaSRq#HJX6u%5*X=q5?XU)D-WagXLl(z-|S#3;&R(+aW}UpQ``D| z+lFEtgKDGY#Z{P+EK!IxCfN2;-n^Dn$mARS{wg7gj6WwTr0 zG}4@mwRX!%(2U2qnVf;X?%;S!u?rriN+3r9UlgR+97>}6J^gwrv<3b%-d%2DrSyfy z*Enzxm;qZ5gUPht`-OO+7juI6rTWcArr7CYzCv6agC=-}q7No|vT0_IYB8-Kk{m2q+{$h*Yp$DAD-I4*$SFo~gzmqnI*dMEcauO2# zhXxG;(i+2#9+ZqMZdx@$8q@qZCK7t85-<3G(6yRdiXZs*FZc8a6W!Wjk3)7%yeUi* z!uyvQpKQqgiXs$oTQqp|9DZNy9Cai=qe6M9It}!90qH8Myi;INn0QFy9(REp`!Sp3K|#4a9=+)%fm1QJ$AW^F(vH4r?1ff>q-e@q z_|O~KiF5U%My->Y?Hn0(GnK|2nVI4t&O_rbLdqa${;dbO==do*jINaPL)TyIJ$uWc zI)k6DA-Luh3&AjXLIHiYMhWmtlTRN!!quARt_t0)wss_z@MJ{iRuZ@Eg9uuseW8Yd z%`GrgwS4{rm@bEeF}TRmTX3_;{{__C=sC765tV;mz8FF*-TaGtW{4xQ4cum3ZLF3L zK2)B^uSU`H6rB+3Z~k{J09ehQ(cmoA*)_SCx4Mxn?Qa$UKR#+hxZz_Yh>MNfih)Z; z_~3V}_=|vt1B)Oa$NWY?uLCkD(}cj*glcMx2YUBWF^W?f3GwW_hXolJ+U63#x1%FwqFNbj1^ z^|}SAS;XT+##oz6V9rRk+cNeys;;TnweS$%jPNwngYCs!!h}9!EZ(5?e8LjnsRTyC z9htm4+^N27?^lBN4BzvY*F_~-Hz5vUH|aRlar=`mbbN*Mf4UaF)M{=lZbUHGB@&*y zSsyIvl>8Vma*(S~e^#Vi1ujY(i6>{|YdCB^-XoB4{qO%Jmzwfzkdfn2#pqf8ivm#t zIycJ&;>)QODh@`S9Qj%>Y#Vj3aN-PO>4n8B!~=7G}5J?!p{2OrbcxZ0`zBY92jc@tqX_uOQzx?lE96s zc3Q4R?xK12QF#?K`ia-tspX74hX*9;`ULyM7fU!xE1QG0Mzr=F#+rkops_|m))#es z?I*C0^;OwFo{SJ5aGEM$Lzh%(gK?LKN#4G$H(oV|GrFaH?NqubCxBz>-p>gqro}=i6Le>|& z?7_Qu7!v@f8lqENWNTarYsTzA`a6a_fvXc6&31{2?uFmxMz}2Mf`{ih`|A9h2k;70 zHqRQ1L)V!BKuYY9WZ5afv6S`8-4vW9wzvHo02O(4NfB~3fe`Y_ohZDiZ)Gu~L(wEp zBi@4}4Ga?`4IY?!>IvpJc~?W#k|-{yez$SE=Js=9OKpr)jf#wltgs6IlIBN>v9`fS zI@*0DvP9FnmoRNd*wj#ZfEYPGU)%D+J8>%|64icKVbU5f@!VH zgU}RsQpO)*VPV1K#x1^H{oT8v@E+A7NBu^1bnykxt=qh7&66*OtgmV{L$*Fupa>~V zC^PYO7LS(4LnT{E7H)#9q{b&Abc@q+LZ>oQ*H`qD9W>O(pu9)Vm?CnVbkmZRz%kjx zAd^kvXxF#8e@=}b3h;y%Gd%?1DqlKi$dnu@nZ__{0fnd*YZHW!9ltm$#%P)9-xm(* zd5f#&s7!mviWFt3)aE_mi7x(Ua`_*5&0`A#4e5H}Li=dqx(B;f(l_X%Wcz3p&++D8 zoIj(9*>alRX%Q8_3xIEqulD5El})vMEBYiXS(}@ztWx+phA;C$;aJ{mf0T>q-fOz) z=VVo1mR~gDs^Kb1<506vNlkir8a_U@KHVD`-u}IkP2P zC1-zB8A+-bW4bL~^xgYf4@nvGTv>Ug1&ef_ug4E%q+Vwgx;WphW-}^R4jo{N4ycQ#jyr9LPC zjtFSzRv7KV+_fy~rInTDQ`!R)xTR*MC3f52{nqF&yd3Zy=zHz4jQwaf2siX+(+@pc zsw>A8+O$1I&ud&^BC=Vb(#4_*j)^RmE*(?SKq&QR#Bx5}%2-=tr0wbND;dZ#&D|VX zT)MCnF#vJ}BNA(Z%~J@Ac6IRq80)J=R~`HgJC;M$TDz_f%fB6Gvfo28?~9`dwl<)ly)Johi~+rDuEeE$03k<4?~CCJC&pVsOge*BDoHqp612VzxNGo?9>?&biv-3#c*buC9)<@|M9 zcK@xpPvea}dE>@0`8elwC@YOCl>XFeDtK54w3Li#P04K?mE%iLHKNataE1WZzS6>8$H;1LoN zr`Q06cF&$7+~#64Z)CQ494&qPW=nIhtH3@r<>DkOxwG5Zx&A8g)rFh&TAdGROXKvl zJ@zoVa5?@QC=@#RD_Td~k&HSvRP5p5od4nERV`bLhQEThCc+R-V2ic}kEPj)&V*7@ z`c{*_D;R0?TLx72PCbKiA)%k$kmnI5-c+_ZObm-&a6ERzqtx_Z^~1eSrr&S*&qgXJ z26siqhlSO5p)+!u?IyK9`Z!bz29qMfc9yj@oSa5zMD|T6R-Zk9yDrT?PccI@*O#)J?v2c%`}4EwEz)5(*(B;q zC3dF!R9fR=^j-VnIBwm+8Ep#X?hV!iD;B$YAV*gY+qh%xUyEV083{K@_wLtVsiD16 zD2dwT@bU7>&c!JDnE6hsUzGrl;#X;|C>k_l58WIZ(|%rUQ6xAeG|`d0_HB)0bUxtsC+*wK{Qvah zbl>~V^z`ubkF&0F#OJ&y=iw>(DFqpL8I!qxewJm^3HD)jWOt1E(n@}Co1^}p;{?!){(5^}NNd;njztDKI9(|V^ zifY}iIbEW;e%>x8BJkeq4dtev6LO4uCsUuHA^~9woA&A~3vS1t1x%i> zIPW#Y%Rn13RyoI~;dWo9B35ZwY-hSPZ3^F`79j05Ndu-1$8^V%W{G{)WDy|H{z>o7 zw3g6ysV8%9GVaWa_-{v!PfJ(R$UZ~) z4}0a=?npH(65n+Wb92|q-dACcmf*SH<5a;ETaduW=&Gppv{Oq&uyY)C3O}O6s+Q2#%L5?%&?B^6+5Dm79 z<$~UP0!wyv%F%g1o=!AoU)Wn?2o`dV!27)4PEruoxue(w&Es)e30Gj0Wby|9eFp2* zt$8H;13GaW1-gR%CWBG+Y!dW?zGPe&X}u_|f%`dj{_w;cGacy&HtIH=kkkpl z_n3mTFjnNZ^Si_Ph?p3^Gs{-{;j?Fz zRVM^M{)C6_M0Rj^@3m*@@@1~v+00B%_kT`ySB&XOF5lvxYPD$LWIUxD^cYyW8cQo{xO+I&xn4uI`x!9H|pa8^L{ryTWD` zbGM3h-;>7cf*fMWtpUy1QE`{vsW0TNEg6HnE(=H%Gwa7cNl+kOJ9M<+DGVhB#WLiga zpWI^N9b;0bYUd!t+Yj48yI1h^iYSBpS#jt2M=OJPD=Q>vh<~~7!EzLhsv0=v+gSEK z${K~rk2!6B(-Tu?7d$Y&{-!|7Y&hq{bR>#rlkMAVSUOX5($Cq%vASh*wR@S2>JZ=K_`cKQ8`Y&ewt{Bnl0tbtwxM3s>9`STg^Jbf6}m?M+o zb>BR4`ftaIAkU?d%$eiA^pKZz{D*=nSFT(+j91N9(z~Jm?O&6pn2JCGRIY-{bwwIV zqo;Db$JDChsc%%kS!>UY+~l&|jSMK1YRPvN)f4lwOKJ;En-Bhod`M01CXCY##`g@{ zyUU%Yz?i@OTJpj>Q3zKwdDiVDtd3D+!o+M8`65V6OjN5(o7;EG_*z?)1Fk)ha>s8_ ze?OLcE2X%J87*nKz^8{GOfOdx!=~k#lZ~f~I#0HDP|0=H&-wmKRvCPCJoQ1+ zKun8cNpvRax3;O5^>lF-XZkIsOQgL-D;`}R)O6UHa?Ws*^tAjBYbL>>E7#Ksy-mwRIh~*JZ1+CTh;6;wA2a$SZs-TmB-XFJn?Y3q$OMZmYUB0Hu-FH5LFoyMy|rU5eZMc zN7@)t->8DSx7bXjy^Ul{QWkLe-dlLIt|_g&v;F-n74V~NlnpRYLt{EPhQv%eOsxc@ z5LY!(!jpIQ4-l-yy%Z~6++BjZ6n7{DcXxsW zl1bll&%JBp-nnPZ8Tl~Zp0%^Hv-01`^V1!oq9lX+`1xZ10Dvp|K}rn(xaR->V9;S> zppSUSH+=^Ho&sd0#5LSf_7|QQXt;EsPN;cg5~In#-V1E(d{u5B<@icXXC>t1k)FMu zp^KsdtBbbW?Bw_sv-U)7FYs_TKE5t=gWj1;k>!}P*4LB(599Fz!k2#YLDBNOzsZ+< z05z|%zFbE~dM)kk)eOG1!u!3)NA0r(#@jmffIuDr0Q6?q0D#D+$AD4)TmV4vA6f`I zfgCnS()CgG9Q)Cs+SIh+XPdB864^jM z%>;{V%M>=XnmzV;KQq#9C0AR{d1REck?pOTkI540E(NDM3q90sCE$H?$)tcV5ACGn zhu^v3c0y0q<%v4>>)(Hp#{&s=4eMTKYqMVl^k|N&x>iV%CYS$upP1GcEb`-=^3E*h z4kVmF-T<`7mK3^NsH&7_g}Fs~i--RBU@QaVJm4emlNp!agN5XT`REwf1}jJbmPv^> z)h$It)frrh3Q8bOdx+Gf&se0c&dx0tm-ux*g||gl1PE5lb$;hI#VViuT9>vl^7gXu zzcRham}k&pOXiQ(*wCuI0FA2|=CAhU$_KFb)4|kt7qSwNOE!}_pAqT&NW z@|=C}XtYHpB`oRj!j$tAIIU>`$3(d@t0a?%D`X(FLGX}I~L%SFPqmZ#ythEn`*$U}D? z#FK$3(Jz_9r)7KBi&Yk$ibhKGV%r5O)DR$M4+|5|&Fygb{LM}k8;+MiPYe$L%6E*(yc08V6oJ8>v|rsyi3XD_>?47hX@BW_;Uu$+kn`ft|8( zufxxZMbIn9!aXAX%UCH!ZHu@}@v9D-BMY`JeqloyEO|B@A0f+Qa-x#btdatA7;8T@ z=_B^J^V=ZH_W`w**++Bn5^M&|8w8;*Ik`8D06^)3Cj4|zg-5p<&~1G5_h7SgIaL4p z))YuXE?TQqf25N-)4}KDRaX!b=_Ct_!YO|G2D889>~w&|g&vnbX6r*;RQ2c=<^JdO z!RL%22WrsWYxoRdXXTBJ&}5Y)>JTG(wBM-ZQ}=!lFqH#6gjJG(gOX-8`jd~Qp~naG zF^>TA;hPuCYY#CF+hj~ZHdd_OCnG+qM&F}N>QK1mzIM$03Y=30${1_Q2S-1L6-7!M za8GMC`rCC7m;=uBJ644*^F0^RpLc4eC;VPK3?FR|So)Uio~xIonUFeIU`x@&f)h1j zR&y|~R5zwF`r6yVL(fD+fG@jbK+e-@t!0&;!wyjkoY&SFf!ncKy5XRJ>48{vjH<|w z!T#~dM!JgOogdaKcv*?ScP<5K!3k~>mM)SE`zwmBsFvEx(8G2h^>sOfbJF%I; zim;{x)BM2p3fXxi(9T4YjlP{dZOV0iGG&}p>K$3YGUMPe8y?^%_RQw}e{duGhjz{X z;N;l!cBGkzNb`_p$&$IYgU@qTy~#p;V8-vM{`Su4y_v(sjKf;BWNx!TY{0zC`#th~ zW(sA?gWaw4x;N1E4FNCGuIz`ph8QtYmi%h9mV=#+yd%IlI+fS=li z<`krV7;?|oDrw0H9(p0BDEaRJ|g8tt>?Vq=5 z`ZV!J0DSv0M`Ig6N%e1uB`oSDb%&}Hec)^N5brp*M1!)Qt-%9HEk>cve?L`t{K8wuc;0~U*nfqJchu4LM|4)s5*TyAEn!H(E0(&O%M>Tv6nClAuzdu1nq1Q}r)RxlQ5W;kT!S(;OXD z$%3qw!1C|{rG=)fQ47@$HJ_C><;m}ev0P%quG5@oj_ejDx(g}UlMPF)_3aHxVoK%& z2Rb}E#nbo&3*^Y{2pbfs<&q*lmo!OL>#7@UXSNAL{i=BkpWI{}fKhH0y9@rjSySwF zb6}O|cirDdxkn<83YA5+ia%giFdoF|eonLsWw8-*TYZ$qYso^4gbVaW!Oq~XYOM0> z7+714j*lnyR+~PQ@bDcJeSI94q|>N;t}4ZXVOWaWUJW(oD%$|R5b*uCAoAxzLVCZJm=r)glbjCw=KD!eeYNv29YqHqu0tgDH!eHr zASgY_*j1R0N3ruBo4juqcA1>^VWdAbFxaAU897 zW1=lu0-(OC^cN+^E+pp%iY}`~Jnvh~Rm0QsL7G3IbhD0JtgUbDa}6b1GBi7osaI0M z`x{IzBOgmUAP-HWzU@%KF-*&XW48{NSZt;qh932M65W1%Hbv~B2zv@OXHZN{e{&Hu zV@Cp^``%joY`?A`XY(;Rvt7XHdiPB&Uc|1cyB!t*WLvl6x6=0krR+53sRw~N0_&_4 zSCyaeZ8BLoY+kK$X&3FuJj9?-2DhkbmYAesp;%9@J;Q|VUKTerlx9dyfels2rXe8Z$bcI&G3@OhO-?;g&uoTC67OFmv-?IVo)=ghwQD z+2Le?h>y}ui=!8G14;&d*9hh4Z3}cyIH}n$cgCElMaEv1nRKP`3cJbHZ{Q+)D>9WYnvA8;5(~2>WvK0kRM<;Nei771wsm5}1$OwqT{9{zBv+@OLbM{Y@Mt zxo9BBu6vJd;H_8t27v=)BjIh{6TOSCdo~Z%+u%CP)q1GvIE;8T0Ri+)?^Gph_PpPuQcF<1?VN zZ6+Bb0y8jDPD%$3eLK~7o6cY{*|*u-i#1Cz{CMqoHuf)(AF<{H6r0Snsoja6-G!H~ zkX8JF+AdFhA-<}LCphseV$3vIoxEMC;l96|hUb^FV^i#WhG;!|3!=rpMC@z`Oh0~+ zr(7YFsCQI!-0W~pbF9+E`AQZMb@*$==;TFiSJw#nk1`U`*EX(Fdtc5c{mA?y?}^i_ zEDkY)MYUET0n8XIcpwPhj5t9nFdlY({p3UciWdZ$cUj_`@*FWZ-~N^77|ne3d4%5X zd>AinNe>aD`P5gL|3!ATUF+Wb{qTkvarGRJweZUeZCs_A#X5eUx?a(yip@Qz)q`xh zx3~9v8-L~7oZ02@Z#JpcpNWD}>VF^H!vN&=4AHsHt0$1)s`g2;Z1QK;Gb#geI| z(E>guF}?2YRwiuv_&DP`2``UX#=L`+RrI}Oqjy$;e21w_Sor#;uk(y&M<8bo7yyQ_ z&8j#24?v*ePvj?6Z&I4}XDm=50AJ>;+rjdvnOuv5w?g|?fr*I$?06{%j|cYvL^7z^ z+=SsNyW~bxV@vWR91j`hI}hGu0QbU`_?;T=gUEsj|Y{nh&QuZtxAs6@k zNK2`_P)jiF#FptFXM=8L?i1-aSDlu^4QU*cOgn+tarttq(5HBz3AXBv(Hx>*F=Nee;>?*2gL8wi5|Ky|u!&RdHQr`ow zvSwnZ)Z%kkjB@OV&T40~rHhMuU;qB?DXA&h)3=-)gR<{_*M`+I_d1?(d_EU$ET}kJ zmGJKlIeL}0l?fjUldinBNyFQiv3f-<%XvU?Rd*HC-5vN#>H)wTbCZJK_GM2ZQ%roE zkG`S0zQ*m)By&t}oF3_lyxbAk5>_=^}(?sRtDsG;y4%-MG2P z-GCLzMNWoZYn$vxXxm^5*@PU1xZp+rIh1@Ned1wlqY&L%`4Q}rE6lBT55{F^bL(b9 z7cl4~&27Ehiz0(P(~YWFyyMGQ1zxS{KM8(6e(+v3p)4IDiY zQs>Q2y%7|RyVvv}pjSG@kEZL(%f`k=G$+<3%hMc4a4f=fr|X1nR=L=D#3N4O6vu7~ zsONz@h_4&`=Ecdeu4K$bGJ zChQJ`h>yQjj*&muYHd2F;UJpp_tM9MqMYfXwf70jbV|hzESN*Eh}8W-oQVp6kLP1e zq83f>%00TN>EX4mwX0;PTgJnU)FnE5Tzn_BoP$~9Q5nZ;*J{3Ld$VtMIq?&8UbeWn zY<1CLX%wmU?b}QPeSwa6z;nyb?G@-uh=ZZFtB&@4hR)KMhd1b~f-}GtHo(YPL#{k+!I*Ost1OPzg ztIgRxUxwEY0iPt)0sm(g{UaYy6=`XUn}yS$%Az{42oiQ{O$w;WzV*hk$=-zx_(%n; zUoiB8+wuY6knYbu8XLh_<+^p@d|7UI0|U0{91kXPn~aFwb`3nctzGm9?VaD0~F?!SGmdmar;8$V!1} zXXo%vf6xdGd40ca7V(-L4T{Fdb>4dK4vTR_R@|P@)>cTnWYiw7&F^PL1TId`7T(R= z5ViWaFw~P(uuH#XW^@eW1alFNybGY!JACyLU>~8n7K@&vIwWrXm+3ahB}!Kb8`fIUSg_Ki6>kWa6|sDD)1Y}#cXH?uXa5+USmkGXZT0eZSCO@YHK1X8 z)SZsVJ>R`>K{)e3DQ#!&j3MRK)6*Xgek3LP=cC}oDfUaDP5P8L$m5UA4w1(43 zvw#b)WbRrHVCm|f^yjic!Lo|eW0$s<50?eea{7WSIjBa2Tww7IKSMPNJ~HR(QmA3* zXA4uAmIw@GOmp@sjh*_tn7O1*`_^|)tuOcA;?~fYllYDlPuu=Zo7`_z& z_Aza5`_uh^_Q+&C>(Xx-t0&U8HtAqPLtQ$8pn5$+)a?^n;e~5C&6>ctPdKHHE$)o| zBV6+iLv21U0(XQu#`b)Ki3T2891TlOxpEI=QV|jW>P-H~2Niw!_Sz9VPx}I|8_ahI&B`-0 z+)>HZC{4XAuqJ~rh^@Y3yRZEqRqzbepNt8Knkd`9c_Ni440s79pzJ6Lu)yi`<( zFCq0A(HM9-5M)24QpPo=nfB(#4^0r_nCMW0* zdMu6?0{&v-WaN%i6e!E^P)bC#&dzG>WuA$Mg_#O(ST@8+2F#ju)7W~7cd(i{cFNk;xa)XQ-s!)lI`$+T-9aRM21zNsw zUmNTO;y(p&@%1dm>>RW9w*J0w0SOE(4RKSLrVLSTG?U9n(D7h@=w=!vS0Z z1TV89AdG06F8oY#Uf(HaO(A<~FhQ@YaNv>hoiJ6cYPt%2%#`P#fJs}CJgD^JX)51Y~sscPkYV7Sko zq`l>3*q;qbce_@_09-z~Q7jPEzC3KYZ%C@XnFgvT*#E9-bU1walJsITkMcmuS zec^UerB1zxkC@Fh8?WX~-|3O&WDz~F24?$G*3$f*L7}ZP~ ze*i37zK>8x&rkV4(~&MLqctGceDY^IE~WVUe<>&teChz2exAV1LgVxQ)ATlNN7{ zTc1~+)c<(#y!)ic)T<2YWVu}UCHGA z<|*Rb6VAP#5Up;+Ur3V|Fv^8;3RKa`a31~K{!p**`rAD?yyyn3wwZA}!CV!Z6w<{g zs6}HlC^yVhYCRQ}B0{%0to0$4I4s@dS;urd`oG(j?;xk^NDI zSG?+~rmrE9J7@&86!%x$$nde1AB2YMq#WOzGASFn?^bkp#B)7M1I&k@NyJUqQ0H7) zIK>e%Xf$62VP)4Ss99JlUTeo>LnGNuq^u@2koq9|2%DZY@5e=?5uY&-mf-uJL8%o> zlZ}5vsZWpFQvc?Vjq+FHqRbVq6y?w3s8fU?Cgp3n@ky-a`EH&BsJSgeZSCm~T_&Yk zGh(QJb-(DJ`xT{t79XuRNfK_(NwIZu&69bE$OD!m4|}e|YU97!rBhxlt09(?SB6;t z48Q&kI{RWrRqIvzRd>A1TBNo^BnMMMO})UceB}39ViNrGISc1X@mZ@&HZ%n@iYAlD z%}MS71jDV-0JAX4kAAO{#`TWA6~&E_9%d=__t~Wt5vA7WtHYok9W0iwQX~Z-%*Ls# z%#A+>73BIY7z3q0T>F(^0OZhDuqt@zj0u@_-;rmuvArw1WQm1#V$ zvsj}7>-3(gsh6*XjNllicTm{0h%zoJ31)Uu1L`1XLibzFZqU6G=6Cq@^eP%jBnb45 zVt3|po@}SE;&6rd0(=X&;b{s%#&40`rDc%D&q!e8>@(i(%FnH^pDzI)t;3sV+V^Lu zs;YB^dzp!!JS7GYNv|N8|1w${Q1E#i2ued zSR_~RSl!LuIEvg)=s93sd+@LsHgVtgQI-=2Ip8B82?OvtgBkFS=%2NS3Qzi<3LxA= z2VDDf@)C$ao~>|VjZj%$W6;6)lI#7RuU5n1k09_BMkDW7K-=9{Z}q~Fsb-<0ciO$0 zcb5y``QM(!_3z9pgs)`T?$H%|V<^DRk z5*dA&R5(fJjoIiIv~V*qfOgh+tQD{2M;jI6O1j>B4_Vc2^^E)j?oJ%n%kt?0n&cG3 zN^8(vv_VDy;L;^dQoB^-6$p~Z#{qlDx{lAHXN#6OArk7fUHcouooDp~eo#@ZQED>A*|EGo>5&8I2Y&Q{ehpZ)fY0OC_t2Gph28dZbrIxzJGj=gk=^j4QX6sWq0YqF7FwqpCj*vK-uYWbGCW2*;pjsP|}+A_r5 zVtr^bV(ZCn5(%}?9~-lit;aQW-@kQtFyT@2aJDfm4LyJXziG}ZS%=B}ik;n?W(zJa z5I&Ex3%QOb2qQ8wrrIcARTk0G86nh~87qaByVSODGnibt;z@Wx%*gKfdZP!u%gK*# z1K|NSA*dy?s1DL=4t6yPFcD1ru{CHh62i!wxuJw{D6bV0r#|Q*Q`!7{X8DF>eRgqx|0j&$_(ekU8?4&G$(%Ho# zLh8k)$C^QSThBylnTDo~PDsx(%T_X2;tHp8!*p2;?{9dMK-BVZLSXbpRb0nQ2x2A= zsAIh}x3*#aU5&bfa@63r%r=9qNCH9Zo8TIQ>GGL`@`lYoJlaEwVZfiC2d!(>^SQuz z_jI2lol{--EYfGCgza|{>s%4oEo$L`4G)GVBj+PkV~rX^)Vz)UK#{YAb^#ynuR@wb zgXQ%tTh-)reOLA%LCxVE9@DKoTiL(9p~HDK#a!UsmRBT;nAe`IlnQj;jg>`AoXYhNTTsdN z+t#LLVt0j@qqTDq_VHi&1Nja7;BEg}I)dGE{=35CV2@0D*l>^dCjWn^flPxMoO#R!Neo+{`WuunPONB0`k<4AMPO2EvKfDmLWS+z-_nEUW+U_?-UrSzz`@0w3IIHkkjmlNsE;YJZYDS}!#eKB&V4ele?S4yeN# zt&jYNknaCBx;Y&!i~#`QA6-FC^6vYBgK1wr2j*U5Sc>`yNwoh ztV!O#+Hcq*^T4I~#0A0Qjt-N|t=H1o9b1e`68bTfYabJPoBVZwUuh2DJ@CjmLW?g( zq`M&HvtCRtFXE)}!g@8gmi6eMykmAYpl;6I?hTIsDxM(D}QBIg;S?V7BM?Nc8J4LmD znbPq1N55|dQ;(P|9I~d=5*w4{rGutDwufzDiR|`k0`Wy|r~Vu5g@fT3 z^=xecBTrN15~Gt;-7-``tQWXZ;n){X32T|x_+j$rpCOkiN3`o%WMSrK+R_!M#Z-28 z#{&ah*Gr6xXYQE4u019u)gI%W82J;a&MqJ+&v zXh5Ei7T-81gUa8T@AYXer(VrP+_N(32xYxkncBR`Mj6h#))_)lMU#mbJj=;S%vx$O zm%bztd{{^xo14wRxQbPy@5@6h*5Z9sQB}!?dqjutOBsygFf^6?m$DtOblBx0A{p8Q z&M8SnoZSc=P4T^MsDE?!7O4yLGdcKHt)0e3-x6(tUyuEeHm~hNKwc?RQRYB@XRo-i z?r5P+5&P%zL}9~1&a&xGFq=?{0Ha0Mz?hEOSWC;vQ?I-?aDny?kvFyt=bQB;TIwn4 zefXi+7ZuRe9zOBtF^(kO`U^ct*ph!mDpSJFz*(VC9VH(ziKCeQPu_IEE$vuh7Nr1i zzi=zTek~Rq>VS}UcZY|-p*a4(=NiAbDg+fNE@ep#(^FUUVUKk+8zbEYFl;Lyvm}X3 zDTcr1QOT@V$+lij;5(l0@VOzM29qB7tkvJ$=PbUz$rgOEOcam!O%!`vnLg}$}?l_gkdm{&yxzT5s}_eE2ie=_z{F$;h3##*tu7JNbDt?Ws|{*&YRk)Y&yG;dcJWp zp*v0CR4sWEFM%b>Y_m=~-YNpi0ZyGA1W0oDsldy_WtrJZ%Q?2opQM^cWVdmW4(+M; zJb6&0eXIIkRqY7+EZt&Ot0ycD=AC7G1Bl2sJW-<|^UM@I?XUzNUEQBmmvP7B6ava> zX`0#K6Y%pLa6@DT95;T)abiScuP$?vEGK71PZ{6wg*g;QV0+Bv)2t0=Nw%YME>c0M zUWw(BgpT=mK>GTI_+L_!i}+-GHEfW?WCIC}cg4t{vb>`E+7wIk=z`FvvDIay6N`UE z^!1}Y@{qiuV2H&5JxOlu+(Ws5u1~e6Kis}Yf4^1gZ*xzVK9ewf*71BUh4YE(gI9SV zy_g~$0%}%^;5LT_fun=)Qr~W#6vIGco~p$~BaGM8%=orSYa_~M!oib-0TkacTJ7J!(R;4_{{4Tly7>21%EY#4 z&@qHvzo3}?I#a@>r2;Nt#<}B?yuQ84c;bF84z53Y)2@Ryo)X49@K&yg$ix)hxYnE@ zj$HQb1U|C4#jl<1I49g%I3V9TE)MrcAF7vvvt8*d7|u<6v}^# zUC4x5MVk)Y{vNv^VXcpJxdH&bAz8DrV3hsOE3qX!0j3%6NN!8-6{2(@uBboZ`*dt8 z3Yi6}EDUz=r1r9RKSj5x|4Lqnj#8P0G!?_OzUwAdtg-$%DxoeoHJ4T9#a$_xrf)AK z>weJ%eopx}eVR;-u!6P({nfX#T&Magd&y;rimRSBA~*NLwOU;QAqO_kIKR=T7rnkN z$dO#o(~r5G3ykQs)^SXzCOdLJsA=721)|d+XLWeGtrCT~|3QQ7q0+en{m#Rw)C@wKaU=El z{H^=D>q7tl_UxZ$1S(v}IKU2yCi<*T^w`ZGGZv-qD`-c@^<#E(7_AKFD~QZwQCEP$;^$SAG?Dh2z+2aIE9q5ia$QDU-)}$OqysP?{JVZ zz}x6OpR}fqj7>1%h3ThB`S(=s%5kra0S?gF{ylK^<7V6 zg4A4*BSGNUOCqOmbzHEdRYBiyvCT>C13Rcntc6XG!&*?Fng;Gf77b@F(B0y@XX2Hv zmUg%PDWGhx4JXtUTdYkXPd}>zjGIofJ_U8kZ2l3w@CwJ69|T-_6a3%?^0xelev26D zHsFE@{xs7{)Jq=iNKVF9LCe$Xro3k^{f$C^zak=>O%!Ef5fJ#3`M8SLID?j?251clFd>*n2JiC8;o=vR$$;FQBPeCo>Xw$~& z?rcP-0iqMrBd3W-b-n6T!j7WBi2~oHV^ej~d1#@>>Iz1sDa2TM+*)4X@H9Mwg{0v% zBz@g&_-dWnDJ26OmY6hB*V1=dsa!PqUNmL5Md>C+-hJnpuBPDcTfkGutmY$Qn&Pn5 z%W(xcx6}5DzSG>?DeD{MjxQxDneFKhgzw4E)yon!yJgZP;JjZY|G1=@R#ZGWi*VfX zqUYgE9$r1`)+|={4Z5%sYro0uKb^L@k5g-?xtLETiz#9vyp7NG3)ZE^$ZDwQuy;`u zG&@`vrYJ@0L=s^e1OUgVo-qUO4R@moUcGlSk8J(5cv_405o=A-R7?&0i0{>7#e8Qo z?G%>Iu6o1E9<@b5Jt>yZ{@dMM2OUmv6VcvSazEPx;D;3t60W{ju`ye|kA6;p5go*M zc1fw*(>A|5;XLSn#2+t-^RH+ZG~mB9hZ(vV}B7Rf&`6@=2@?hv7A1llRXa}|T4 zH(W|#Tc3tou@GZM6zGOx%edU}=^{KLNbK!!gu1ub9=9Wz^S`xt=^}Xmft_e07szj3 z{E>}&b^P{(UqDf1Qh?vd2eSov@SVh9W@O?UibQ3I#cZT2kyYI z+#8Vy;NoxU(gYD>wNf@VZ|g%)DkZ%D>GU+8_m5lI(OB7)j0tqL92PE;z=kS`itG9w zuAwj48)Y0g@?&#z_1xsNqQ~;0jS%?zbS%TH@)3s#jrjT&o#&@9R(IZr$n~LFTV>$e$GJ0Z9}N$JvEa%dyv8&C4;^L({MOaQ3tTh!L?LwazEph zc{}lwfr=bm%}&9_d9@On=4K-rH8c`NA*&RHrsklT@Yh=QjKDe(eE!?z7G442KmGRe zS>83fWBqHurQetbCd9;JR)*7aZnltq;eM}#fyfQA6MLYcemid2?Y1x?i2)fhY;Ke8r+N`tlV3c;f&7z)-$}fiCfsZI1&0 z-UFn+d{%W&KVC!BO)%R;I73L$z%vduY-TmW(nQ0c7VXF89t>0m<wB)06=#j2>|SWE(8GNhp+(Ih$%1tPI48%cN$Y9z*L~z8$fC-JwODL z{Vl*k^#8dLiAOcTg_~a^SIurT7fokGvYay;nP5zXj9@i+FdXZzZA$Ag>4{ig_s69R zM1Y0AXyM$P{^+MI{=^>^1?=2EOCkwoo- zaPK9_#g=Bu^Qq{!AZDYd*F|s6q;g{E2S3C`zjz89T&0NHO>lg?yF7g&MMXX8T%loR zX;Ig}WhW1{_)#$t77@*#M4w21Mf^-NfrM{NJ-T$&rKvBq@2&WGm1MpN*JDQ2794rG zgQS9R%l6s-MFFNqz0YPT6(T6i)SW&W8hi{}c3T&Z+j0DLOt842u6VLVl@$#!%`A?9 za56Og*V6cjOMzfkC&p=)v2tudMR2RH7sys@~g z@CXTOSSx?2DRb(mdtGQ((CKa9KD>-5 z;=sLQB|;HS2a7B{-38RJpVt?h`gJzznHQd|5N8=m$E(c(Tg7J68Fm>EiPg5)~6plo_^%dc7ci{)WpTo;=B## zV+M|5b3h|HvMp%uD$M!FrN@#fu&@?g7W{4v=K1SlA25+i6GQ#?$k7hd^$( z6q(^6qU=g32|V|@{tqA8%gQ$X?feA72e?)I>H;%IV^i{G52id;_CLc%M_Rd6PpfRD zUUCH6*Dl!0gh@p&Ei%~#MH}eE{OesbEUv4;bh&nWhs1Q}E*LqdZ#VSk27K#bodRuR zrbDL4kOUmf3uy&jT#A#QecbAcba%Tvl)+}$JjklmhkkCbIo(4buZ13IvC|V42gH=U z4?T%AqhUy3ToUR#{}+R zbL-)712glpwS2q}Un(-H+US#sB5T^RG&703YLzBVbW`y$b*u$u7Dv8gXs%q0#%(F$ zEO4vt5y_5Jsbnyq#7vqHn(C74+6=kD2@7-6S=P1ZdU1<}TVwFzBU$8eunzPPn} z&LzxZnhmweX;=;w3xlJL>R|I^dC5zojnNhcr?2UGr{Gbo2?7fK)`_up1-mL9M^?>x zi*i~|TyP*u3RMbE7%x%Np8%hE$IOBdaS6tMKESzmQz=jZC zGcE!^DX``KKOTGkTeI=MvQfh6Z{MP%q=k_msS#msK^h+VY7O<#I`p+1wa)A=_hory zU3nz|(p|oMZ~zi=K^OF!V)Pj5V<}5ZTO&g33`qC>rE`k!8>dX)muKKRfB?fjQ0C8a zTvZ{&rrho;$O7UBTzhGS7kzG`FlfB3rvOadDo-SIoW3|erPVLsjE~G66mfVisHg~| zLe~vWk0m7b@~C5}HZ{iDP8~=xWsIq3YKj1|S@V+UUvHjEDY}9!290C)161tZ1NQ6o zBdJeyE}X>u8~uCeyL6w|YVlwIJ~%;g^evjh*E#PQ<}=je@Ei({zjD3#-WeuZSf17# zLC8UqP|w-q%jGq>^~JrCiw&n$U(e1HilW3!vKBPwy=RM#&7j>TQgc=Y}E!C&gv3DEnw)izO2 zM>lD2X|5A3nXcS*`HNX0Dsp%am85HU&k#tz4O1XQ{ghXYT2!V9 zbA~rln)y{rX|{*UbMBY^WF~)|U$2?gY?jsb%qINKBM+l?DU#JVk$fnDrdB~Z8zJTf z|JCn#j7ZRrUeG&$MIwC*EmB$<)|a9qB_qa4^TBOZ9tlaq9mW~JQC73F_@>Q@}YlBilvH{xfs?kvjQ!dIjAYvYq4 zxm$Q5)A^c;kL$z9fAo!-vEI?)8WrsV$B8RCICsc}-%$YA#q+yUu;|FR;7;z zoakDWdmpXFo2R$^S6UH!4*1ljOFcIY-se|pr)_~%VCLj<&5xi2FFtE&xx459t{am9 z1(XlfGfu-b7-03u4B<6-dqs~6My;OJFqvW$qJWvo zs~<_Il~wx&k7Q!Ig)?^tTrE2A{5+$UGV)DUO9A@;?f29Hvasa_K7ReHwClzm&FN69 z>Zqr-hsWyRK>n_JTZ$vl+ygRPCXhVLqMpx9P9NcdsxL6!#tbv`o)w|i+{sZi=hm4} z4IE7VK=NT&3SsMpT7B8chE7gM%|!TK9b6Gpq^a3Ke{-8_$m5pRcDtQ|j+oTEieH~d zBk0K&a-PX!l^arR6CYECt<}UzUNHkK*V0O@mH%-g3WCXUtzjoq{~)ct63tYkOqnr; z8rniN#Bb(gt`G&1yb^gx+hEI8D^!)PDruqRxGS;zqxjsSo7}|s@j^AT6dhk3yF};i znc(7Uj2=TpSyiI`2y-PZ1?^i|yxHIDn|af;taA^M>@2df%v%uw8IfTEj7908FvpR$ z4M-?*>BRRXGd$BK8{OfrDr7dbifJKh)2sOxd6aRv}bnBSQ8cd`%7 zTFbhI4aP`K$u)r`QPwsKFIkJ%s2iPMuKTlu{+g1K<4ejsX#JgSnn));>#LLi%_Q2j z?P+!FPX3d}Gmii0ECjxd{VO};tW{)3p=Lt^$K3)84%I_k{lsMZmVjOHFmo(&I&ma^ zVUiJ+V@f(<);Fu7>T9$4D1w&)U?9$dL^zT$`Ast~4Rx|PE=Epgsgx1Q2|RwC^t~Co z-E8zjX!-V&TF}ts$dJfAO|TSVcR-O^p(byd-gqUMVDAH~`4=Y?@KUIoAnie)$Lb#n zt(TH~%mXf@0397vqV^6sc7*}8TJAUuVh$}l6Vfodp2qz%I&S-FHcD3cNCk5Qc@*aj zOo=}hl%dbhQzQ}H)7<&Tx`!o5Z`n>S=+ExFgFCdfY07qHe$T0W5U{W^?Gy4)>b5}0 zy3O>Y$cOpmFfy=pC{+bgeyn zw2up%pu+G%vr*Vga!=}|308pYS7D=Me59{7x3j+Lyo6z71uL8AGUm0~GM?+fQ0aRh zaC^sE((R(SwR6)3ERzJ{s$+I&Gq#Wi%Oj zOBR)v$^+2fR8+bsIkcEJyy7%U=U9iVI$d(vJf1xqRmvf8IqfT4A^=FpDt33%_y}%i z=g9@_KkH;>Rt~*LLqRl3-6qTT*;!&7@8+lxtdqt+i7ozZ#_u>TG}!s!;ORQC$X?p# zd#BW@6|vldMS2d~j-@Kh&)>*pRB(U?GNeUCME;LrA^M3w%JSQZuaW)@ewREo@5b>Y zfM=2+k(mcJ^A*ab0C&8p7Lt>zhArj{xv+)uS7V{;y1jRRD=p5`{+bax6(}WXI_)<) zG47-|cY&T5{*G6$PZJZ3(H?%(DSlxd=Ep_g$e=&;sGlBgxjP&iO?wjr{p$7d8zUmh z?7=BVAfKK<(ni15=l7shtPSNUm0Lq_6DN)3>9Toai`ulZ<@CWX!o`&&b{nm{(b+%O zdr{uYM+IEX1@zr{c}46&^%`PO$gN86NOigxNxYf~AGKLzW+%1a>mD8HpZsl9+yK2} z#B$cK?)6uOg@A68&!U;`(Mil8B2G?K(`29wPEvrF{GfV4 zgR%8_xh3qeq8i;rW&2tdJLep<#7{wV{dX?_Jey7qIO|p_E`rMDN9ObV_L}n-dC-Uf zrow`LnTju`PNJv9NnSL!9sb`X z^9ES|RZ^_CwW?7%Lbh^#K1lA};gg}3ud_4!77zdN+nUd-wGpP_4L^-lwx>bUm!M`d zb^W*xDXG7bbi~Kne-tX9S96nDuN7<;_e#@ie8U!~D-tbKAf+BcG9dJgMsBbJk7Ft7 zJd_G|ak5+(9tSms$5a5juVR&r$=`g}&u;rR&ybt(**GK}G#Vt{pQ44EMZlf!_u4oh z>GOQe%5B}D{gr#lp_`Glt9y3-?~sYj6ad*8|5L4IRe*cc{!X~Z$tdQdMCSxy&`-K+~=-u)Iulkm#4>yMR z)BqE=%|;Asy2FpX`zX`p0V&l+J3qTLi|Qu+9@hw;Jg|DNF+anN4i`Hc!i1QzMJBrSG7jrNoF^ z2f{A_PepHeF#-G7d=(WHaDeY0#>Nr;xfS+*a;)Tfqu=m1)Yq%y%<0N8ZFG)YmX;Q{ zfMkAV{49ts88sl*dnT5L&im_G=(u=yP~ufB>Eq61Bq<~7guGh3?~EXkRWy2q{Oj`S z@>Ez1u%Y}}SOsY^$(zf?&cr8vQ^F~k|LA6s>-}LD_I+(f5jGSRVjK&PeQt}k!1)c0 z7V3ox!Wq+bnW+z!@85hEiZ(ASC+e)p&2DW7at=@sHa;+Iyy%1Z3j`YE?wd|Eu1GJed4=bRsV7E%+(X#x# z2#!u!1p(E{?0w*%;a+oGlmy@BH1OG;qkd~*d-yaKi!qtP{srulljSvrjz2T8*U$BLVK^if zR3R_?bF@_79Ei@>4g@*f02QvoO4K+>y+R zo0b;KQ_;;rPNQ+Su;abPtH@-dDAnh6dfczfuo9>Z*!IlnhSKKha<(bn&Dc(Zx7KuF zt4<%GPAhJpD|&YpRDm%Za9z7{5?}Vtu(?$zZ~OTik9nw(vX?V_t+PjqVciA`fOn{Q zcfMd50-cYZcs@F~ZWqZQTWLjT7o=H3SOU-RgRK^w+drYqF7znVL5{@w|ESz0FchvBr_REmbdPAev{;2g#ITZ|F}_-xM(C^gO<6 zyHsEf%J=gLn{)905s$YfZ1}^tmJdO}^mv)}`GZ(cs3?5eUp8d2%d?TzISBN_7$$bztv&%aE-?uPhO%>1*}-OR0M>Na+N(d zRm+dW{kZ`>m72UR`DWYrBK`3auG^oYfX;IC+fZrv<;QiKnH{jGiQ z>ea|{9IDFAQ_dAd!>#8(Ce@1C5xE88!*hwyD;E%4A1cvjt@zC>|AvH^Ptc9tvU0n$ zXT?d9b%z=^QLnVpwu>YjN}gqDf6j)!A^AWHap>|zKfy)?Wb-?djEv60iWop=IzAv9 z_CLsl{wrW8Fk_;vt<8x1jfDos-T-s-i1jq6^Vzng_VLDGQ4# z9f+_0)C3aKGmkS{=jF~41{Xb%a;cfV?XF@^PZMHOXW@g6Idocwk2!5Pophs0;z{>b;tmTq9VMmK&)lpzm4qbj=_J_dU z{)C^MbduH*qKDw8SG;V+Sq2pba#cK~OZvaY7T8=a#{mgPe6$quz)vFRLOy#z=q zhfSnVO|`SzrkNCfmQ~r`aIAZ5I?%Z!ht6>=nhC*R@M1235h*6cC}%ymAjM%?vaYUD zy;hVFR|C93W>-^93BNSK(|{YdMRguqL}RM{0l8`8eOR*qIXg>Pwgh>-16n$}^rj(m z3V)i>JDqfSfCys6A^rcvuPneOn`h|<=Dja(lr>D2Tf76lFO&LWaWBtTvs_LEhiou%TNVhHx_$Zz4nE`T?QSt5?c!S3$|Usp zl$St_Qc4TZn}&MCt|c;cG1y0ff9~R5@1T>~hOkPuAgUB;vV`JrGYnq#M@I#!lnyfW z-(9)YdS;klcivd8w0KOUjv{`}LdI3oS^dy5ziglmc^uhk0&+>xo4nu^$Bydt-*IE* zzd-Ew_Kc=TA{zf4DAmG%=u}6UWP}It7yS(#C^G?gUBzWG;IrBFs;VK?(_qFjz}08% z>!M#Pf+g$GCtE_7zA^%{>+#07U|rM1tBWpq@4T2C?LCP z`bHZeUWfo_A=eV4LdGtV4Y*Rqs?7S}Y8Z^x(L$w5y>n8m@fXF#V((w*?Xes9$fq*r zJhY#(u72TxC-rwPV2w~5{(A@@<7isJfPZ~vIKg84fpu3!*em)khJC3|RQAN3xTogw zs86)Ovdj3vfEF;7tlSA)avL@N;F>vomubYu_r}Sm(3?mKkR6lfXE)0Tl;xINz6_a( zm|H(W#PnTyIk*wCw^R8p`B`x-zz00@D__u(IXnr6T1DgG;PC9qowCTYqaMDA^R2t{ z{uQVoza_2=$!e0gBOzH=)wQIx_1Tk-;*pj)BSXb zDr6d879Ozw{a^J8{uB5SbM@w%K1$grq8`p^Z+xD+K)Nu<-asmcSg z?Q&!3k7yv91CfZ-%;OaX3LtUl!Wq|z)t4Pff^R!A+(PGb3yZr7ob687I{MUt2I=Q| zj+;4-W+8f2mUmr=k_JzPOdfPxSimomgBk5g!>LR6aBx9)VNuY8jug(%Cz%GU2 zIiKr7YCdAeoTuUmIYGRU%{&&y8i`^)&5FgJ*Z1LML5mbVv}Wor@mc7uX0^Gl<$pB? z02?&Wahv#-i&;0X=;+{jaaMzr*G2mGuQWbk4%0rTLX>GYgZ({{OR?bkOAm+f@TAfn zZ4ODy3;Pnqn6Sw`uMn1B+vM9gA?X52daa9pszb8DN)K*D-Uc|TT@W&jk)0#wC&0f<|#5Ut!226u!}q7-HRIgYp2X8VYS#wCIwWPczhed4jLS* zR$Iyv~jY(4`zIo7Rf_p zkoLQKWM=7?QC?+{xp_@j7BHFNO$cd_yen7vs6ahAMT^`vF}uy-6@ab9-onSdHo<09 zv7e?gc5}>{-FhaxfCEPU;`Y@}%stg;15_OYCOBo9j1o#$9{HfI&#JPYwt@$)jQ{A( zA?q)yz7G8*XFvrlG%ZT?Dc3wj987*16rNqTT6NcBP;+5O+EK-DIsXzs{d;`@9wgTI z?@`cd{mC5Z=8njMwSofORVHNWSEY5lycc=pi+`p~kkpTM6_$K$_(+0pjAVWMnsF)E z@j5i5wjKTPZ(l21Rys&;kTvt=Q+)3aZxY zb}kv&=i3CmHPnsn1}J<@=I6C<76{b!wbT{A*v#VtEb`O}{|%);&6Brjd(R2(h0m<* zKZSIhD{@LAOvd2x;%zr{+B9PiWoKG-_I$+TZT)o(_YB91m-5a3z%P(+KlED;^YUyd zvB>lN6dMECpdbS3p`55ZeSEG=p+4r3Nap$clEcgALntl7Nr+2`f+B?&>-|vF3Utpb{u)Z(>jb!r73E}HCzkI5FwPSTd#Qx*q~M#y z%c24QR43)y&HhuJr0IeTw3ZC&qz;XaUhSaHu^~ALT(-HiKm>sD=Nr%%SQg7~z&+gb zvcb@hp)C5@HYm2CBiC#^ReK-c)jYv;l{y1`0@O4`J3+{p^b~CeAQ1wRja;sHih@gL>az(ac?R0 zHL1w~Q;Qb-NdgCX4#5M5w+^M^e}}%^|2HxT_}?Ev&~-?ibYy<~6LOMeD-3tb{nj1p zYEE$JmN`m#C4M2-!cv*tr68*kO)-YYv2;<^%3c-Wk$YN&Vb_#6`)op^n{DExZ5sGE)A zOmueJ&Gv=kBE6W{iv7B?np+WCF!{R_9bekTZXbja>?dN~!8;OL)Rh5g2zNqGpX36|-o|M9ATM0|+$eM3nMf#?`n z)x}-hcly8B?n>x(4Diq`HQtyyS_afUpZ5HMHdPoMq2Wx+j}dl`=Dl5$URpp5HJ?wt zr{^lo`F_H4}JbyUpr_mJ+>$d`uJvf7C2)G|WEQCWj{}qs z<80n0l$HJDTYO9_it-*dYJ!wl7x)t3{`oUa^KVG9eVFA;K@$?Rj$bDdKZKmS-rm-( zL-N#)bdZ?tsfyB(f8IPV4;&J_1?y(JvcKz7j7TYtEEm|i^5l5^JrIiJZatlzbrIhi~=O2|`L$$_Jj z8?umz@u{36COdXx=EB;uLes|qh_A7SOU`~v5xByrSH^_rx!e!qF`mk_=e!{>uqJ&A4MI` zX|YvpOcB!Hmiq*IN=eHCQAIm8n71T$=$^JOlsPQWz7TUsr*O zKK@ym`9C2#{>coUtGgv{pYGl*!U4Xf(h6$mdv~@c)~}#9)?QcJdzokFHAQ89_JaY$ zBxSau|7pof?nLAVIX@4e@~$4BMG8$SUG+i3_q9P3D!^HBb{2hYxNzsYbuAU$qULGP z&V+zqW?02p#=b_7xgu0tJkkM2s&xE>t2d>rBFxPWuVzzj`oWUWQ2#HjmqKsQQO|SK zG@1%OGQKyhIA}7K&2ytb{g*-s@|v@(TY+mff-R3|&k1~pl$*<9A*Ha9WlZOJkr0o}ehgfB@Amw7QS9sE#2 z^nD?v_VHvN=j{$YOE_WpT7(~!&s(sjwbjYKp|uD=q^;#%-Vf9~J@kQCG!0F|Q3bXP z*c}@}YH}iM)hPVtZ)!o=yd<|oOEN^e7)or=h))k+#>fcWoFo*JEh=+9aq;asduGe<^Q%kJi{f+~+Wmgt$Zd4_AgFNyWKLoG+Q*#KSH9{zW_%c~1(EQ> zQSsw8RtX&A=*zj#{A!C|W_PsBf`~+P(B0Kiva)QTnh>l0?d++EvNJmk3pq!Z=0u&d{S8tqoL4Hxh+pn% z5L`6ZM7ZL3B4WA^Y|-8M*P>z?-oJYR#+wTIbct*O6TL9NAQZL}|{!-UT?u5(7K4Suwlnh+t&{fX8k=LlrSAZ4{EGL2P@cFf)v{N|xx5bn4 zRrtbI(_b)R@Ytvk)7*}$nn*cZjbpzjX38ooHP+eM?w4i4?7Vfwit{VAe=2Xn;RrhC zzdhE;Fz2Fh->iL~$@yaV<*W6v;ogC*H_TKUG(oVGK&)UGxpR9SWSy>k^E;^^W5TF? zZ#;FM+*;?xp@HJ)hB{yE0WQ?XTFTj6IirfLB~@p@?b0pQT#wH342uVAH|e~b8Z9^@ zVGtKVkyJRYY~}qWeO;)vo^wx&cGdUBx&)vQmFA}H;&i}F_5dcHm5*KV*~x(1nTsW3 zI;U>9Z29|0t&c7;I)b5h?yZ`&gp~2MrMewEGRT}(tbN~{W1D^U}$>$dSmOiT$IQc9{WDYx?#E35ye>UdBIMACU7vEAoI0DC?o@X(a8L19FVTUIdaSVDDhzW^|QS6Ilc2 zEW2P&JGFIBGYa;vT<-SI~!n?H|EcVTw)B4gLn*6OywsUV*t7B!V zTNEbBITRj&0*zfq+l6>|xeRO}6H$-ap?Y$az>HA_!-|gdNPfWpZ0!3ME*?g_a=BEU z%Jggw3bC{IP!}OAK(DSyDI*R4-E~e5%H#wQT5(E+o+hb_J-#dsE?Z?9Nt@nMw zTcK)tUqGp4BE792=IfJLZZrX=s(U0PmMocnQB|*`BUO*>PK#Fb=akPwyYx>C1jr;Dx=nXU`E&mD2v7oZ%-pY4RsX`)b9}{ys4MMz|SymNQj_?vZ<@VsD73# z##B|kNt^j$C0W|p$HiBi7q9IuV`0JD#-9b*v#{t-_JL(Z?VpT@JOKYo9T=$s1t4!R zpVf06e8sb`SpO^aHE>vu7>n8ryI_Z>$P2W5R#H;YrcO%I=LyeYv^^_q2Q#xb#%pVjrz9^a`2HOiIw2TC* zCzic=2}%1IM1D}&TKm9{oAsQQ)lqTX^oX9Uq3#BUq+#<1rytfDR^mQxof41F>i!|f z;tpUD+0#H-m8j=8>7;iXo^t6Dsu(($VU?PugZA{Eu|xYI|7Ue#y?$9)Q&UaqRg8$9 z9%vmU8$H`TSIE-xldtr5g)WHPtT3tDK_-{3t39HzjoI&crIC@cztTJ81}ohvFJBGY z8SGqgiLBc{2RuDtIiecS4g0q; zljv|Ue(x3Pqk$CNl!Y@?C??f6wnjRVL96xCT}=nqhryGBP%Ed5#%4OV^x?M;u+r0* zO{#voXj$>shRQu4=0|2Lf|rE#M3ddCdq<%^r(1nc^OeP;pOwx?y_vkQp0UM>EBXz& zKMS<-k1d!;Pn=3%tE-TtFQ88*sKFwrkt^nGEx>dFuhV*uPPA{eniX?E3W!O~9LEB< zgA9M+{KFTx{(CvkzkFZp|3BRS-g|Zb!F>{d@sWh`V2`K${r&g*{IT@td4nAM3CcI$ z$gD^dh7v+xMDqzD9@FpH&=E~XU;~J9j&6>^>^-WXTZ%Nz!adU;iZlyo^4(c2TXA}p zoOc!%D(jQ!dSbE{@DyKCY(-54^Og9U9uN;DkQ6;&t6yFZuI8Il6tAP!%pk|o3rh7{ z$x>U8IITsaQ^`V|fh#OC*7CxmdGH^M1v4bN)z7on*@C7>J_H34O_aNAMar6FTF{*b zv0rnDW^f%^d&*hNB`E`=4zH(dhOkoS%ELf)5_$H@P9c&aJS+US<;omd?-`xRRf?5q zl{mGjV#X72m}%3BqvKctg2~j2MGL2<&9aL_(OZWv-p$g<&w=xeshwfjgJ7ay#4`pD z6YlSnXkik>gZX0As^H|wRp^xT>h`Z3k{S7#Z*EwhP3E(5H(i>6HM4U{!s@Z~s$?ql z1?Jhs`on_F-n_4i;LZ3r1vORGh532CHrI-pk}whA)%8`T_k}biC8d)Shj16hu zhRFFdd9HFFoepfOXrYDptjNLD@6OX3J5;c~Di!sV-p!3`)p*w9OoB8++}oNN=#$b` zF4|LDhJ_eZs$ZO{k>cR!lZyms9ydQdo4w?{uKYw^i@-JwPl}~qE0WLVRA~Z z&(stvHv~biEI{s{kcE*x171eb;JD0b*PugNG@EvLN%IucdF={5d4Bz%s^$p~ITh0? z(sFt9Z7iz1tfpURpcK14YOUD`Q0T{>-LO^&w7 zWxKU};(vXbC7;ns9uZt)%r7fp%to72;ViU7ay#}r+dzMpfIvaZ!}Bnh^=^7&hP!kz z;M)+^NP=43^r6Rh3X0B-XS|c_%wV}`ndFRG;-k@#ky#FQL;*5Tgn_oY#9VP4nOS{^ zT#ocIxZ7mVmpT=*HK-ivwM%8MHX@>S)_1MW_Qpa-(AMSEf7aD>N1}^IHCut)voUXv z$;&OylmC_}=d{$IZno!j{Y9mi5wbsN)pe(;p>aEr2--}x65ir2F_@?t^lf`?o`rnO zew&h;V*7;T7?Kanq$K!&=4a!zz322CLR1gb+W`MIU<5(@43}?!d~Ui*-nU``Mu(ir}J=#|#3K}2X4nG;xAcjsVYJMRN$ zA%kj8tn~RIpOrQ~+3uv-J*zxBGL)6_L7QWq1ndQms+>KiS}HC_xZ3ib=9QH2hthsw zpS&Aic1sIODI=Z{P%|4JFQOX7pZ&KoxjNb(>l9sqM^WzgQHCrma*~0aj{|3gy|13X zUrA3%XiUI5_lMobF*Hvmvg&!qO}7KB!mlnjf{P|>1fP12k7=vgJ0Ta{_(!gl1W7N$ zj8!a;1;ajHmk3|Db&2He+(&6yS9Zny8o!O-dYH3%U(8El26_k+P0-kG!NNCk6$aXx zz`}E92tJuKuJ7OWEGm*}dTfvGFy5M`y{*!0axAaNH0-NoUR}SWE?Q)LG_=b+xpQzO z2niR>aW`8?r|cpk=Ge94Z}cOs;Yjy-kLeYtGi>vEwx=0KW zlp7tbP*WIxeti{rm1>%pD8o83r|EqcfL->XH1s3b_HF{Px6j=3;GDGm(=jYW^S203 zUAu8gXWEj&lEM6$i;2UNKdGYG;+~CSI-9riivQ_WU0LAj?S%V{ixWpq_kvY$*Yb{_ z(P@QrGKS+_`54Q^HU8wvxWe6w^?tZtBw_R8vDvMI3Bt%krA%xps==p;;|qvJlJ^YG z58XbLC+@ptqv*xpdvt5Q>*dwg@Mh4Ls}JGhXf}8foC9WqPmAjtEBw0GfjZkTJJ)aR zxOjN1RNvj=*xP*>Ty^l;5sVOd3&kQ%OV9pB8ZAA{8ZMP-_1Ixk`KHl@qy07?*WuI{ z17ahE!~A43Pa9%Zy?G>C;i^J@^`Fs+p60OQSE>0PO`Y;)Wx_wKCX$&o)mZbtNpIT-X+w zky5@6hwDuGXfoPn;9a0|1r!}bT*;>&EK@5XWtt5F_JUV?gDDc|f zOIzp^lDpaRvSSg}1!YD5?ng<~XwNhfCSO4n9-IVeEe5YAUM^&bn&QgZ ziw&ZqDp39P{U_glljtu(IK97}=w~*tdo(^thU3I_yV^@n2L%~LoE|64&(E*jb-jl7 zM^C~>Yt*Itbu>BOlvTy@3-K&(I*@#2OUQm>C zGE3OpRV*fefaxyMjN3)2l#NTK;yEJdcU9QQnbHl*Znc1t`xL$)g3DfzEb#gShYJM4 zbWAKSTRwraRBB);f>}(FxNZ$N%S~$XWP=FrP>{U>M5=TyAi2>zJ1;FZQt_GJ{W|84-nrg+CuViFqAA`IB%MH`{Hyfy2M>2%FCzcugOy z!mWrES`>^*+?^PJR@JZ}2AG)fCx3K4wt~c(70QTLyCBV47lMgc^LCh@`=-9XU`3Tc zzLGQ0&aKypiEf@NE_i2V8Hjv`r!D&Ys@>Q(X%|>ac zhlAmT{Jk~=W^gbCJme~#;e|&2H_=FI76>kOf)=N*ZvcST*HM8o=%5C`|23##0W%-W V$+cB#h@ndW(&7qVDn$){{14Tl#VY^+ diff --git a/apps/web/src/stores/room-list-v3/RoomListStoreV3.ts b/apps/web/src/stores/room-list-v3/RoomListStoreV3.ts index 00c14be075..7ebf0d6ad7 100644 --- a/apps/web/src/stores/room-list-v3/RoomListStoreV3.ts +++ b/apps/web/src/stores/room-list-v3/RoomListStoreV3.ts @@ -272,8 +272,16 @@ export class RoomListStoreV3Class extends AsyncStoreWithClient { } case "MatrixActions.Room.tags": { + // Re-sort on any tag change, but don't emit ROOM_TAGGED_EVENT here: the js-sdk + // re-emits RoomEvent.Tags for every m.tag on every sync, which would show a spurious + // "chat moved" toast on load. It is emitted from tagRoom.success below instead. const room = payload.room; this.addRoomAndEmit(room); + break; + } + + case "RoomListActions.tagRoom.success": { + // Tag change initiated by the local user, so surface the "chat moved" toast. this.emit(ROOM_TAGGED_EVENT); break; } diff --git a/apps/web/test/unit-tests/stores/room-list-v3/RoomListStoreV3-test.ts b/apps/web/test/unit-tests/stores/room-list-v3/RoomListStoreV3-test.ts index 9878a4bb40..2ca3200812 100644 --- a/apps/web/test/unit-tests/stores/room-list-v3/RoomListStoreV3-test.ts +++ b/apps/web/test/unit-tests/stores/room-list-v3/RoomListStoreV3-test.ts @@ -13,6 +13,7 @@ import type { MatrixClient } from "matrix-js-sdk/src/matrix"; import type { RoomNotificationState } from "../../../../src/stores/notifications/RoomNotificationState"; import { LISTS_UPDATE_EVENT, + ROOM_TAGGED_EVENT, SECTION_CREATED_EVENT, RoomListStoreV3Class, type Section, @@ -346,6 +347,19 @@ describe("RoomListStoreV3", () => { expect(fn).toHaveBeenCalled(); }); + it("emits ROOM_TAGGED_EVENT on a local user tag action", async () => { + const { store, dispatcher } = await getRoomListStore(); + const fn = jest.fn(); + store.on(ROOM_TAGGED_EVENT, fn); + dispatcher.dispatch( + { + action: "RoomListActions.tagRoom.success", + }, + true, + ); + expect(fn).toHaveBeenCalled(); + }); + it("Room is re-inserted on decryption", async () => { const { store, rooms, client, dispatcher } = await getRoomListStore(); jest.spyOn(client, "getRoom").mockImplementation(() => rooms[10]);