From ac971dafe748911d3735884adb89df8c38424bfc Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 20 Sep 2015 11:55:41 +0300 Subject: [PATCH] messages and comments almost done in channels, sending broadcast toggle done, short poll + updates handle --- Telegram/Resources/lang.strings | 4 +- Telegram/Resources/style.txt | 24 +- Telegram/SourceFiles/apiwrap.cpp | 8 +- Telegram/SourceFiles/app.cpp | 6 +- Telegram/SourceFiles/app.h | 2 +- Telegram/SourceFiles/art/sprite.png | Bin 176128 -> 176586 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 234946 -> 235828 bytes Telegram/SourceFiles/boxes/contactsbox.cpp | 26 +- Telegram/SourceFiles/config.h | 1 + Telegram/SourceFiles/dialogswidget.cpp | 10 +- Telegram/SourceFiles/gui/flatcheckbox.cpp | 18 +- Telegram/SourceFiles/history.cpp | 336 ++++++++++++++------- Telegram/SourceFiles/history.h | 48 ++- Telegram/SourceFiles/historywidget.cpp | 136 ++++++--- Telegram/SourceFiles/historywidget.h | 6 +- Telegram/SourceFiles/mainwidget.cpp | 111 ++++--- Telegram/SourceFiles/mainwidget.h | 9 +- Telegram/SourceFiles/mtproto/mtpScheme.cpp | 36 +-- Telegram/SourceFiles/mtproto/mtpScheme.h | 130 ++------ Telegram/SourceFiles/mtproto/scheme.tl | 4 +- Telegram/SourceFiles/overviewwidget.cpp | 31 +- Telegram/SourceFiles/pspecific_mac.cpp | 2 +- Telegram/SourceFiles/structs.cpp | 24 +- Telegram/SourceFiles/structs.h | 34 ++- Telegram/SourceFiles/window.cpp | 8 +- Telegram/SourceFiles/window.h | 4 +- 26 files changed, 616 insertions(+), 402 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index a2540285b..dfc9bb12c 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -450,8 +450,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_action_user_registered" = "{from} just joined Telegram"; "lng_action_removed_photo" = "{from} removed group photo"; "lng_action_removed_photo_channel" = "Channel photo was removed"; -"lng_action_changed_photo" = "{from} changed group photo"; -"lng_action_changed_photo_channel" = "Channel photo was changed"; +"lng_action_changed_photo" = "{from} updated group photo"; +"lng_action_changed_photo_channel" = "Channel photo was updated"; "lng_action_changed_title" = "{from} changed group name to «{title}»"; "lng_action_changed_title_channel" = "Channel name was changed to «{title}»"; "lng_action_created_chat" = "{from} created group «{title}»"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index b7bfd8d1a..27a96bb31 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1088,8 +1088,28 @@ btnBotKbHide: iconedButton(btnAttachEmoji) { downIcon: sprite(373px, 95px, 23px, 14px); downIconPos: point(5px, 17px); } -broadcastToggle: sprite(40px, 104px, 22px, 21px); -broadcastToggleOn: sprite(40px, 125px, 22px, 21px); +broadcastToggle: flatCheckbox { + textColor: black; + bgColor: white; + disColor: black; + + width: 36px; + height: 46px; + duration: 200; + bgFunc: transition(easeOutCirc); + cursor: cursor(pointer); + + font: normalFont; + + imageRect: sprite(18px, 125px, 22px, 21px); + chkImageRect: sprite(40px, 125px, 22px, 21px); + overImageRect: sprite(40px, 104px, 22px, 21px); + chkOverImageRect: sprite(40px, 125px, 22px, 21px); + disImageRect: sprite(18px, 125px, 22px, 21px); + chkDisImageRect: sprite(18px, 125px, 22px, 21px); + + imagePos: point(7px, 12px); +} btnRecordAudio: sprite(379px, 390px, 16px, 24px); btnRecordAudioActive: sprite(379px, 366px, 16px, 24px); recordSignalColor: #f17077; diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index f6d5e124d..2f3b5110f 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -153,14 +153,14 @@ void ApiWrap::gotReplyTo(ChannelData *channel, const MTPmessages_Messages &msgs, const MTPDmessages_messages &d(msgs.c_messages_messages()); App::feedUsers(d.vusers); App::feedChats(d.vchats); - App::feedMsgs(d.vmessages, -1); + App::feedMsgs(d.vmessages, NewMessageExisting); } break; case mtpc_messages_messagesSlice: { const MTPDmessages_messagesSlice &d(msgs.c_messages_messagesSlice()); App::feedUsers(d.vusers); App::feedChats(d.vchats); - App::feedMsgs(d.vmessages, -1); + App::feedMsgs(d.vmessages, NewMessageExisting); } break; case mtpc_messages_channelMessages: { @@ -176,7 +176,7 @@ void ApiWrap::gotReplyTo(ChannelData *channel, const MTPmessages_Messages &msgs, App::feedUsers(d.vusers); App::feedChats(d.vchats); - App::feedMsgs(d.vmessages, -1); + App::feedMsgs(d.vmessages, NewMessageExisting); } break; } ReplyToRequests *requests(replyToRequests(channel, true)); @@ -647,7 +647,7 @@ void ApiWrap::gotWebPages(ChannelData *channel, const MTPmessages_Messages &msgs MainWidget *m = App::main(); for (QMap::const_iterator i = msgsIds.cbegin(), e = msgsIds.cend(); i != e; ++i) { - HistoryItem *item = App::histories().addNewMessage(v->at(i.value()), -1); + HistoryItem *item = App::histories().addNewMessage(v->at(i.value()), NewMessageExisting); if (item) { item->initDimensions(); if (m) m->itemResized(item); diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index b0826de09..186edc6b7 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -766,7 +766,7 @@ namespace App { } } - void feedMsgs(const MTPVector &msgs, int msgsState) { + void feedMsgs(const MTPVector &msgs, NewMessageType type) { const QVector &v(msgs.c_vector().v); QMap msgsIds; for (int32 i = 0, l = v.size(); i < l; ++i) { @@ -775,7 +775,7 @@ namespace App { case mtpc_message: { const MTPDmessage &d(msg.c_message()); msgsIds.insert((uint64(uint32(d.vid.v)) << 32) | uint64(i), i); - if (msgsState == 1) { // new message, index my forwarded messages to links overview + if (type == NewMessageUnread) { // new message, index my forwarded messages to links overview checkEntitiesAndViewsUpdate(d); } } break; @@ -784,7 +784,7 @@ namespace App { } } for (QMap::const_iterator i = msgsIds.cbegin(), e = msgsIds.cend(); i != e; ++i) { - histories().addNewMessage(v.at(i.value()), msgsState); + histories().addNewMessage(v.at(i.value()), type); } } diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index ab3a01c33..afbb0e053 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -103,7 +103,7 @@ namespace App { void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated = true); void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated = true); void checkEntitiesAndViewsUpdate(const MTPDmessage &m); - void feedMsgs(const MTPVector &msgs, int msgsState = 0); // 2 - new read message, 1 - new unread message, 0 - not new message, -1 - searched message + void feedMsgs(const MTPVector &msgs, NewMessageType type); void feedInboxRead(const PeerId &peer, MsgId upTo); void feedOutboxRead(const PeerId &peer, MsgId upTo); void feedWereDeleted(ChannelId channelId, const QVector &msgsIds); diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 281795e889675e2e51709889e296e2467d4c976e..bfb9e56f0c4b550a9753074f97e4a6f16429e8f1 100644 GIT binary patch delta 55192 zcma%iWmHsc*zTr>?gmL|C8fLJB?J|uq>=8D+CziVDGh>zC|ybqC?E|Y4MQjmgVac# z?f3mS=jUN97JD z?^m+e172iaudGJi3JU`y0M9~uz>)4cH96aQ112#mWsemQ3Y1~S;gDe{K5P=kbi{c~ zT8ybE4Br3&Z9wRj4*1i>xA%ZnK)p><3upk!08OBn>S3;`<4fEL_7LYN!T=1#2XJp- zv~$glaI5U<%Wyj&0@#sZvvs`y4qv%^T6Ivhl=b6gJ74w*#goC5{CkLH^%^yVOU5N#`BB3MFo=$`1UM;%LeCr7t7n3C!i#r8 z)?9A&6>hLo#Z=?A{mXzh(w@W!9WesRWj$Vb!~kcAGO$F1bOsavG?Ajc2S*Q#|0sx3(Be`Wd6e@@)g zOK)oz4@37;+TFU&Tm5=VW2N^R>+uJzxDvQw_sj= zpDd%O16V(ugGZ-*Uat*$FJSgAWN^8q=5z~h5Rk<{J_KB8#RxpCWz?DA5&#kA5!NFd zMr&09qD#p@4L>1}!xAk^igW{52zRXmY*Z@>KX?9^6AJpUmko1R#^`E|0P{_gMMvd7KNuS`#M2CnqumAeihkH1APUVLUH zLpYxQG;5hOboPcRFBDR~T>LUs#8QlnB7pBj&nqk@wk`^Qj*KT!Lw``xnu-dRvx`gnQmg3N zn9#^M%TZUr>uR@xgXFfW7u}-^k(pv4^iPD;Xtm1HB<@cCd{+;rT1btNGijSv{Gv^h zF#jcVbmlG(Tz57zzC6KV$Da4j6xuk7e>q<6rh~)s^pq1lu|&e!?xZM+k&lCN5ac8b z<|H)zW&q6kP75F5c#f?WsB380{-`w2)Y4MY)Pz0HQgd|`xV$(@W>blQbKaadV&@8A zTCeZ8t>w$9>8!Z4{~7~B89CY=)SSThQ@pe7?Q3G@HrT6uC943+kYQf%Z6r%>qzcy(!vBY&%I0*r; zN7>q_miV0pqTESak9km=hlpzZx8SoTImc<#+q|!uMfUB zT<#7yT5&>_j_`FH2#ShQQp97w94~a^AOz~33rN2D!`Wo|!0^cvw(Q^+e?)$rT%1&d z{{1TsrbY|i#BW>F&5A)90MR>NuIE8BkNMw%4XF1D3f9tah42d#>}l0#%5SIK)(OkX zbSx2;bQE4V9e6`P7&gjVf_eP6tHS}zUNms4&6v>ZDIfKSL*o-moZ*Jb%1S_q>@iH2OeXVVBNCna_L~vjLugdL}95>9lHNj4V{C^UHrMx ztv7%1wGc#wY8TRNozZUQglly)W2;WT%mb&Z z;#T!|#iwjtu)$MI-%ow|xes`DS3ZaRMR#zK@It2b#+ts@OQnMvU3htN^6OdwwI|S| z6f!)Dpt~dOc@sV%#05xtMW;m*OAyQ!gTUyMmyj-k3#VFg^ ziq|Tt5%^LwQrN6@8uD402K3qQSx$;S!j?E))wkCnQh$10HcVW7wyZ)ObDtuf<6W8c zwUNkw`(^oU5R-)Gno}KVNtrUV9JxJz4`n1`sPsjL0WlqbTr%j`#4(Qn_5(qyu0iCR)-5(Vp;a=ItHn!aa3pJGvCCN2#kzO zslBmYHxAwKY7M9aX5=&# z%faSt*njeKhrD&B22YYE07qlxI1+X9I(Zu_z!*=$rDX2|B_8 z>GCSW-)2?sKFcW$S9;ZQ_R$6gBbc*N+FR>QvnEG{e3RuHQ!JAil4AW9F13U;-wGqo z=Ka$%yN(~V9LJ%R_MYc82aKJ}8J9mnE*U8~HcRm-8u?`HHHz76&6eZ?LTaadGJZ1> z2M0$2o88vUcq;D=nU_>wq?V&F+M9$yfhFt5j&IEV{{9)@d3*ggr=+BW4a8tA_XI4_ z(i=C~nlu)O8RRtG-Dqs+Ax<5JeC~Vf@Y{4W#gzwwI>B$MQ%a$}EBG-hHO7ZcUbIk8 zgDdONBP`Y#TEtu8F7|@BnzdJe88US9hZYK_{5mTHrHzQVzjs~rt~HqPW=E(iO?2}G zTO1aP7Zn+z7}|@LNJSL@w`J+V6 zuIekpPFCDuAYLJ%W)RLvL<65PLy!$2x*ubpo6@iRHRWMF6`PU0NoRYrTc0euZ)c&4 z0dFR}fTDjF(0{`AF3uLE6I!jOG0-lC@c z{uZ|Ut@e;e!TBSrl}7Y5DnqVpg=tM3J!O?v?s>^bEB87|@Uz;Esao)s>7Vwt6L z$8qCZ;(Yh*<=$(z#g=D>bM=vnU;Or>p_0sR9xBWVCUPi0eE6XKC`U(-A@Li_h{K6e zWN+Q1qZlavYWGK#BTIV_OGo$1z1Gz*#=Q@d|Nh{G-M^s%SkP;Q9i1V^AFqH63_5~h z-@of7ggq7J$2dm>SD6Gi8TdC{%Xutw5-pu?Z`Mizj6y;-JHLbX?%-G3gYC5PvZsd) zwB42&$ng!j#BXlS%?pB<1zCpaDx7Q{?Tf!_!7eP`$~7*1Dy_79)Uhgq#hAn|UhUVo zmLCLFGmbEnsL=^2?goYD0XV=k8c-IB*TV9^q|)ISm=apR7c~;IezrTl3MDz#zd{bQ#`^t|?9379P~;C8C(#okvJFCp9QMDTY!DV#g5 z%(xivrFz?e+o~rOhaDFy!2xChG@|(x^xiIKm=o)V*zABT|Mye)hMWf z;nkPM0aT{IwS`x0W9SuJ8cnl}2{7qSv$2GrdLLIk)z&MLzuE2zy^>Ce8C^T*XHo-- z{h_MQ<68nfIKcb*-R*HQNCd6G8(o;6g86tWN$AB6HevjB{}l|0FSzK;>~6(~OL|XM zWkP;eJ(1y;Q^_ikVDgq*d;ANE6;;cJ36bT(kAKCug~CV zOnWmvigo=7W2dY1qli`N3+d_B!OQ`}gi=RjZRh!da0Jadzx4#bXHlRi2G>wCS#b-*>6p$s zW(7S<_wNew@)(1EkI;XzQorPYbcg5@#p}8EGPL7lOomNNS7t_Mf7DRMe;+BCbh15i zjf^C8j5Z0<~MCnw2KDn ztcJcEBd0&>ob{55EdRXt^R=>I?9?YHy8wY*;nD^>szyYo6WIIn%Ak7YulMI`Hx1?OkM!RmNrmjR zr)U3>m2UM+#z}V+0A)41B9cCo}idH{SfaX85z{VM8xuD-8IcY82 zQLH2W-Jiu+WdCla(%IhfwK|w!Mj8}uD%86gJoH)0*Hk-Cy1sUX{1@z$ho4>_3e-f94xzAdJE|)A9rR8PT)#J34gT{acfPD>1J9I?{ycPn0?W>BQ@Z5yW39K2FNSx zP2n8(CxB20-Aq=veXDOk<=(ayqXHGQu{^KeNhNV;rg1vvmM60)ggHVvDHaxi6!%z> zbv@mlEX8iv{^*zvv+YJE2;Bm#yV|TUOh5^cj!|){#-TM8sQh92c)?kzISE6}x05%%*(ysy9fv-p4yYAaz^2W(Vo z%cBkZ7q`;o>a&*(^Ui)(9YRLsn?F`M-HT|0r%-q%bAr@={q&zq`Qx!fMW@);^bNHKdLF-h9=$B~y}`xqMk z?xnEaH+mW6wVJ6&fg7WuRgF`TJ5t=UHrBOS7}=vSg0s9b)5gvY!}zwRq^a zRQ!~Whw?`hvDA zfSULh?`F%abL)#5ZR6@0!A1c_amWZgUVt}e{#!Sfd$j|4dEy6*S)hI259hPtTZY9( z%DWf+IS&F%M~y1R-+Xm-6WLA-xY;Q2kd+q{pF+`^oQhl%$s@yezn5ad>7{)g|G`vZ z6o8ETQrnY(B<4OSLA4!k3>2+PCM|coI)U{LOg?KUjuO5j;y!QkL=h%DRCvb<#Nd2y zCVI^3p=GHN877I% z%}rUQ=~Fo}JI5sI-kG8M=Q zvOYKcDm0?Okm!JFa+*Fzi=dz%H)3L9AIYReRWjAa3DA;xxWUr+>C+{8YHGiZYCG$z zFnEHgwwY6XW+A0F?Nx9C|g(#%pMAhGNC3LF1oy{Lk z|r%wV^flm_BNj?!ik>1JpG+w%lA&+S8HVV!vv@7s9#G<%O2Ud z-+x_?K)o0~nmNlvSlg)NfOn}2gu~HutKy;P@HxjQTlQ#a9Ws{L0 zE-}Mz?gmzj?P%dXdg~=Gsg$Tp9EJoVG5SxBwY7*6Q`Z)r;*^*3rm$?uedgz3&HtU4 zYVhG=Z@)TCBVf`x`o_N?2Ltb;M{vVi z1+Z&0;4Fa$loJv?vbw9*elNZ04#ffR9CM%-uV6&^%I{eLS0V-$F45m#*_L)dNJBv6baVX{DVY`MQWV*bbSM#VPR8{F?B;Z+c^eugz-UNi^=jU&t z!K-SAHmVSkW^loyi911f`-|JBMXh&VN8agq;AjD#`S1@1jn+v`tlRi_%Z3||-Kb54 zu<_poW4UeM_~@i=kW$2NGJ`VdKNuHV+^+1tXYiUDh?%cg(fwuy^k3VpwJWv;)Lijr z%#z+b#d?m5)b(8!!%?8bi4sml&{bQIe~YpLVXo_z_u|iJV=?%f+k+@#`N%mjgq+^{xR$=a1p~F7Bcl z_?(mOp*nZBH@4BS#2}U04b**b!4L?0=M;WosMz1l*gRE72IZwK8B{J_EYIX_bW!vX zvVbRs9$!E~1>g4RncD@$$O};XLix#_r69jVw>fusuJM9 zuTNo0_$G>sV74L#nfnx{M)wJ;8U0+&oxXigN)z^WSOWmUtsm-8S{hLKNdRw0f0sfb z{hXJ5!L>wS_%-iNB;7ls3BS1t1}_bw0`fmA=Le+rupS?zsGL3#<`fK%Mfr-!T=ma9 ztj`Gben2b2Ivh8WdX$U*-7iiqt|2d70+ux~R_&h;HXMKE)V-gAmw8IH6;4v&;p^1; zu_g%Gi_C+|n7kpsS))kS4BZk-TMh=2S+?eYloy(sR+7Bj+_93u=K{2qU6IjDstwyB z);jh0US?r@!Qt-WdD-;>GG(I5D^FI#-Tkk+^n6Qi$zQVxH@Jf=(|2R7$d9?bNL5UMMUE&ooD>3N zhFf1eCHFhWT=)Nom8VZB&(6-wY;A4F0r-pBRS5q32u#e)wN2_R0*j)iX_Z=YsnMFS z@cYC-9lme+&}ptJ`>T;K$h%1AC7!PgicpY9z8 zCz8iommnufqf&{1&!0c*YrZ$kwl{~`L8f?BkpXM7E>-rwGf;6T=eG-H@H{h5!O@-m z>+Xk1 zk)r&4OM#M0LD+FXxV_KiGEClP2o`ozr=S>aDPMxs&2uCgF4o~dUuNh|d8m1Fqviy5|BkZ$}-Dxh`Hj#SFv<5t-7(w2lf7NJ>XNhzG^l_Bkjog$P1d_?b$l zvcu=a63~Zj1g4^d1U;=1TsF^Lg=)w*Q7TpU$O(9#*9_pR-~fAFtK!Q;L~GK(Eao=9 zEZIxonqb9g#+^$s3-Hx1{BE zXm8d12j-0(>1E}gQkU6bm^=Qk)&E2uPhJ89T}S&E(fE+S0|3b^L_P^p3us0%zjWyj z_~cRsm0_No_`$@89IiD@x|VZ+;g)H>{YW|l0vy*M2_y^ce^jby zXmu53d&3X@zWU5j9Txtdy}2&ZIBp@%ng*VUnHqu<_8#47!3;56y~RqAo=~&9eRf&g zrUBM4&58SdGdR>_IH3EIZnrkHZ>P^N2J3s#ZbgUd(D=FFyr)6H#>Ph4kq!dcA)f4A z9I>H*#TQpPcsoV{P6}?wq*wzj=a1@X$QCj3#wJ4W=j1gN2Ah)eEK1 z30?f!x|~#3u;8zNYq!j_kZXB48Xed=(A-Q-o}rqG zV}%dT(F@a~khcY7yL@*V&Hx%g(A0VG)x*uo36PZ)EQ9<=O_I`M zi+B=CnySddn0p_8+8BSr$A4Ws4R^;v#VvO$&fi%CL41IE4)LuWYz@N0Z zI6^JvHqCSEq``0~My$~QaeFVtiB)EqCDMKYnHh>r%C9y2AFYwDW+G<^N9FF|^+wl* zB^u_HR7zBac4na04!SM@o8_!-(S6a~deJeqMUO=+S~=XhFGh(yHO_8Lk*4wGIM;sZ z`~8B|6&OwMnn$fQw1}n4QP(^I}EeuS(AHKwV{vhS+7PP*OVSJOOzISSb zdo&MB18L#o(KkkfH*GU^%#j>S3jUj(-L$zePoVt&@KfKmI3sxNBDB=%J67|zPx9s@EFCJTza*u7*bFqo&%bLJSz_6vj7P>UcLdMO4m3*2eZSP;ac zGB=1|Jjvkq$#DCfotwLR+ey|8>+V@4T#}hyg_frdwB75$u{NBgmxXodO`buP%~XMirevl;qll;y5yzeuF1>8Mujj_s+hGE$O%*i8U?E;LvQ2j}zLZV-M)nw8wIJaAi5Xw)DF>9!k(3-*S!}{(GNYdo2QGJAcE#x9>xiL*n zPL|jRm!&>r+6JG@T-ZxLrf|}y*8ZbO2Np_wii{zW|Da3QLnB;F-Qq_U2Eha;nhYi; zCT*T;20aCIyVl&i8fMXL|HW0y^Fnkv=+CEDP+NH(EwF#}{OY7@ z97~OA<@%6seQ5P2+%f|XMfj&f*xHL^A^Ou3v(zSmmjnL3{uLE?;tyDNger^Sx*LN; z6)B9AuWcD9d|Jh=))xrpUM#G)ZZvJ{&KbC=8U{|}lzs#~-MKobuY=y)!5k{85L;o^ zi)`q&b0}&dp~P*>WP;5w<`CXV-n}n(oGAB-N5!sW#S#Ce@kx3HTf<{U6Up5Fp4 z%Quv_KVN<6zc*qiKJD97Z5yyg@8jzkY+hkKEu!K6BpR( z(-41>Zf;!|vWL?s4f0P;vN-9(p2#`g6MyH}#0?S~)8l+mq`4qmT&|g}8}DRkil%fe z|6op?m_o*T+cK`;A|amb#FnWYk@TRamY{i{+TX61z_dRAxFwP|b>={;1+{QHkifIm z$X9%FqvgU+jSzLI>MGTGHycM9ZY{n#?atdw#-20W@%~dc8h*(r*~3<7*|t7@SMhi8&M7en>j*gWDZh2DQRA8qMTG zYix4QS{Ir3nMozq4e#;7^+f`yu6HNB5G^~%Y5Z%#knIOi-R)R%kM)Ou$mXNNDeQl+xEH~fPvB$)SjqN6Fgm!9JL8$F6K+dXOGhNRA-!VJo9KdW4kh_F`4Q(Dc2I&NaHA~&Wp zrXDZkmR-8iQjbKFxU|0WJN)Rs=C-OQrns>z-KOl_W(yf-6^efhYB~Xb=y*U0L)mM?EH6flypA-NR54eii2mv&DUanYd+9|B*#acNI;BeO*sR5?0KiXi+#%9WVoFdPIR+ z9rgC9c(O3DJGVMBOF$?z%)Z7MBp8mpsELB2llU)2brP5NQmqV6GG$dzgDi zEFNxwKnLe*3G!t%26hw48IduJw*TsumY~-(fPxlZ1jeuo`X4}b!zxl#MhG~hxZL5p zN7aPwF@#8k_+ktcYp)j*G^N;hLxvA&P(1f$T$!7V|Ija+5p5v4aLKP3=!}}B+u&}cWKHxs2B3CNq zm!dd{>m+M8KQZ36J5C~sbNgj3`5Ag>H*%I3n-UUW_+dQLwr1~1o)~tV@E5dIe(eep zrN~e+Xk8>{M0SY}-St#p=D@mkU$oTSFrj%~uQKUtk9!K41UGk|z5bf}$c1b8*Pj7c z#9JNEAmg?5+fsqy+uDwfkok>dg&GoE-M-(`0ASGQS>+V+Pl}~&PrZ)F*COBlmo2q; zpN#qfQ<)AZiVgMlXd|b>7<9z^k5nR9mrfzWv807elQ`+i@>or%jO?je?BH`uMHrA- zoJfYaAd}Q0R#wMt={kX=b2BwQQOp0O89cHYfb#uny7qfQj2`Fa5A-oo+S8|x0TodZ zk=u@-vt6^JFMBnmy^0LIVGk13H^fUP(Z-qDeuK;68c&}+d;hJ!|2lf3ZIV;#8^m5Y zN3i;5WMq8YU+o4v|Z#h%!S%vS?;;-VaCpn(?P@Y3FX`N!NGTGQ9}bV$#UQDZ{*x^uRN-dYIg0#J?~ zk{D?~nHUr=C4xBAMj4_>s$F6qwyvGUQf*==ho3}VC7=^%!RM?}y zik!HW3X_q4i$mVQd$^));dk7^ z!h!&!$y|%p`zdmV#=oop88&&zW1f{ch?6UT=E5f0C0lM1G8(U3uIdm2eAo8-@-(O& z(3PbWB|H~8yBO+=u>7>#-K;E=$SUZ29y<8TyRjRFg>-Z4j1YQGG6>5?UKz@r&oBr{ zv-O`12X=wf(pi{ay?WoeqFC+?_N&tf1m1nc07&7<372#|uTYOVwNTX^e#jHu_-!>i zC=D4u|76sxSCRJzy^&lEf%2&(5Ik_+Z}8&9?ZwE*$SY2*TN6&AJE&z-Rad|LS}2eo z{;skNBF@KrPFBA6%znZrzl|YSL_~wJ_={8sFd%xl+l}S33JV`#*q*GKverV1FaJ7? zNx1y}=>8LVxQ^+0?etXL50UJ3Y zYAp$6Iv>C^aqYWrIemb*AjOd7at$U50V3mGXwvxk`MqC-Xex0CgOTFm!etb9eg0|> z{M0(u>cjxupp(jXUae=I2%5m&ZjXBLyw2TzEfhuHL9bXX5lT%(HP^L5g!Dq?Fol?8 zex&9~ID%O9&Ym~&Qi4~qR;v~5ZBrFN!&nG!#Vo^!BW+*wdH%^&W2bo}r87VKdnH$*uQu~zLOQ&<(-e8Lm6fNZU-||NCX=*Pm7h?zDqwz(|L1 z4VKU!5Mzed9R<$2$~)d+07)CUH-XyI7_u)VOp-l?cwb$r0)eJ;cb_97BJ!{%D=In+ z-t^Rx5nY-~3E=fdKdzj@0+&L_lS!s*%sZI2@)FUgw+yr+6n0gP&p#@u(Ip~F3zw|1 z(5AHFPo_DL#@_lghs1bc)W0AiJ2DFQb|PA2b03 z{`_dN>NZzr9jQpOIQ+q|9WN5Bdn4-XRPxc{~oc_c4K9zz~t-#Q-L zr(y?MOL6k@G?{8%-_+rjL^0sM#?l3%9)z#lx=t5Ch~|~$<8vkmtZ3kGs9b5VAJ$&%zDY@#Ho`=w zKRiFtS87|#raCt(T5%*9?v;@b!lBEGjKI9C+>A4bVdIb{s`qB68?wQIvxGQ;wTeWK zkQ`h;k%n0K}R1_h^z?z`eDw%u! zmvdctrs>8_{_y(jo7SzzTBpLMD!*g%-ndCo_u^3EDzksUWnO5}O1Vfkv!c^cP=@3L zlJ%O__dA(1ZFma}c#Zg81=QfA@VhDyBaNYXKeaB(JbjztQ7yMJ)-<&XrRO2py+R}3 zb3|W0H0ut#2_73n#DD%?`1JQ1<3AKmfsLcwJIwdGK7IKTqz9!B*)&dWPbS)-23KbI zL1tzqe`90gUeLC$t!LFzuYz>_9X9Q%+zoEe)dHt#mL{s`>%U>kx? zD6C}tI6N$9C2ym8NsJn+YH8aOKi)@^@)_8~EP(xpc$uNIkr%n05+eAMwwOB1UCP}vc@<<=;7_Qa#E#mDZA-DGDV zG^R7-Z#U^)QfO6UYVA>D3d!R?c9S@=&9fWC1+{0V|1h)vLg?zRJ`Z^(I`Jh;`7MKn zz$5ACQWVnCQ-y}vF!CcqcNnn}SsV211H;IrPVhuLxk|~kY;tkr@vXMz+_a~8uopA} zz)bC})*StV;P;1DhE=C()iWP{?wy^eHMG4GCJtfnB`FZqzzE5T8@vA97=wX2KaO7y z-J|mLOx+%#{C$`^&-Q5W!|~qi$nv9;@b-X}^ND|V;jK~&*R+Jt=buN+bW1De1)OQX zWunjKxAy=#q8PJ+)UTgfSEN@Bu<&E{o7jV>NC`j?w}_x}aWdy}nYO1^euZa6p-70l zV|kLB=s)nCigU`djainr?Jf>x&MBYU9ag%WuP=vu0!Cf48SD;gau)yIXFAlf9m{&N zzPxits~_jvVE;~6Uw?Ii*={nAfFj-zj1>SRV5U*&P6fxLd3W*<8FHjb|H@vj z5t=;vgnaUfXU(2C(H{|T>1(F2hPX9Fb-}vNcl6g@09G*cc9py_xb5Qu^sr#}9t4C) ztt~bO9CeJkIj2Bx8-88uaRf&Ww>|5iUm7OCKIP_2mSnc-CTa%_8l#Di@DVo;%=t`;&y-Z~vAXp(9<<*= zNeIhe3jtfv0#DG?-ld7aZ=5s%*SGcl?+1RcivFz0f6x`ou6io%iiyfah2o>leey|J z5(}(Ax69L=Jj}_LtT)8NJ+bLs{BIvW)c8mn<<~Q8KlZ%60dk4NfH5z@xF4JI`6 z%a!AjuQB~2iT1@L$T7dI+y)M&ut^z|{E5SU&GiljrlmiL>L1JgmMW&jHFx{fGoOUX z^x=*BjH#57ZS%Wc8*%X+Q?cD&wSrW}2`vLB$XUY&*g^y$#7rI~l;@%PtZ(3_JNgx^ zGO_|f7X9|#w$(kx^_ThqOakdk=NJz^y|Ttgm=E0Qz=Adv0sxG(z$Y}^vuPo!<-E?5yqyoF4X`aik=xj#0l%0WQ{YQu)SX?h&I?75h1r2X}DNuOSt zwDdYR8|CVJc}-e)+wFavb8zVi6ql4>2n!2a9FBAq9kLSvaX6OUUnKHA5CJQ=C|v1m z-Ud-Sue{=+In>%WnJqbK+k@{dKUe{O*A5?WWs}~;_+j7sGX}tOuYCTbo6=G~RY-R2 zSR(7?f67!j6uG6Z^i`JMh1ucrz5z)pC8EGsAM*`7FdCltm9Zu0+BjpRm>! z8xSwXbhV?0sAFRcQTl_^xg81>5p+F<*gTluiLF1XUfKK?5T2~+f_P7n<^W70r{g|? zEiUce)BArrYbKI3>6Rm7Ew6>N$mugRrqg=Gl%jAq=tha2xIU_nUah^ZsjS>)^btxt zfKKfl{0O_sMa*K+$w+IbZ>%sqR#*sezrg@HXX4&HW#1E}wv64CI;j9-#D zRu*-Yd3j>cobY$mA0|_EsnMYdcBJOu)(P@p@22NUVmAU^z=wz8L-$)I2S}K}wo@4F zHVRIp%W%nC;-P5O_Vs|Yi|+hKLoJu=$>c1l>eu^A+}WA~xcnvnJfr+7DoXnf6^rL? zd3xI5Ct4JEvnthjwy+A3zHLWcSAdlOTs53*DOK&=gb}7EMJ{{ZjA`i4dGODddL-+b zq~=)GY~qtWA`>yS79bxR4)OQ65UAs^w+GERJ32aUixSMxH!h~wmVgGETOm^JqbS-XDtY%3Bd1N5ct$phFfH>IrV?!@!Yu>Q;9Es2(cal{lGkdUj7Ryc zWZB+>j{$$kmH&)Ei@q9wOj3bd*$HfIFDi1&mAk_?(0TnFwcmiQ$o`arOpi*f|9_OQA8V=bXLGUoBsze7u9=`#vya~7G1a{Hmk#%#io3-}wff#fB9yj9 z45LKWpqN?Q$IZ8yp=q|Loo~x0dfBs`x(0S;J6mHZF)|In1cyA4M=Fe!C4{=N7r{N0 zTwcBbBw@^9AjtxY6dxn97&d=D;_uKVZh$;{FX#l(sdy!{ul!ObdIh=KcJ#H?_T9Vm z+Ehc|yWs+=PXe>hfIt}da&kHLi%;5CB55C}PE!sig4Ug0(~?f~s5L?(c;(W)DB1JAvEJ-5S%2y~$BOU53N=-8ygHIT;=h;-jY? zzCDqjfi>P@w%0pE3Xx zrT_}Mi$7Q);Rl$!$IWR&HXDe1-cRO?ujWnC1a$911DF&^8_rT$%g!R(-IoWJg4FR} zqTtsdL(^c;A3j6v#BQc0{8}-Rv^dzaL64yGKEJ=aSusa<$JZ)yxxeS=h1*2+=TmW+ zhA;uX-8>dC69GGa?R^ig52&J1B9PLd<+)q>JwADn^{xDjxq@G`c{Lv@J-QS`g}*Ed zyXM9u66LGuzxt1_$qko~mFE%h;v6=Gq#HLARs`!z%l?zlI*(f)zj{8AeLaR#&s=qp zKA}iDMNMmv~78OCQ$27t3yrDGwV`3lo0@9U=F3#WQrKn}C3(tQ(#%9dO0 zc-h7@wr7*hrJ%~Crk(Fhh)2e$6k{&eadZXXrEw}tDrPfPTuP~Ob?(|UI%IHI2eK1G zkfSM|PbXAf7Bma; z@N7?gZ5eKpqzZYFdH1jDXMa1?%Peo&d25tgZanNHU3S1V<;z7Zo0ZEDe9@4(SNqC@CeoLbtX1=BQ~b^>PSN}weP4A&=-1tg_Rz(O@q>;j5c`)!atB@NLO_qM z;p-9VX99}qS|=4c45C(u!5M`I7E5wCl_8US`)ebd&9%H83onKr55CtWvW@Pwi^m!u z2L_hK+GhZMq& zTjh*jdzzzvez+~M{$qyOOwm5;%!o~|91Df&Q#=>%fNQV|v=wq@9AjE)aXT+dEhKB! z_GnlNu6cKRXmB%q?>@faxc5g)CdIU}R94uzx!TQgP&&>IzCksT>p_a>6e>#qVEYim z34eI0IsVX6_6V3HhmmMSj}UwWdtYHAH(`Y! zf$mH2g`C&ibm#H)x4U0|&6Slu9d=|Cm;HSF_pW@zGT(FlzkbNkp0IrEl42LI%hIH& zVSB%QYpl<7)l=#bmP-TsgfPK=`f>=<^Pb#$qRgXwF|qazlybB4N!Jq@lO$WG*UrUG zAHsi0{;mkE@W0pn_z*3ff-mD=Iy%szE zKh}q(!$9u8iE4!o_$?~y2D@wy5-GG2^6@BV96inu`^X>8U?xa+6M)}uq_4Kh-Zy;u^dj%O^k$X5yj+H$ElZ=qy>z3wcyc( zQ`f46@8#99T7~g-o&L#iN#lkn#k*5cE+PhNdy{AhTZksHG>V{P8t}61{uCAc%gVYS zuWSh|v@nPXKy#h}xQZm6L$PbG1>pa!rL#bde5|Ksp?6A=#mpF58uwEt!&hY>gu z?RDSlTB+U(nUSkaA|NDP-g4`9!Z&COQU!IG9|6^2bBRUgg|1hl(0DE5%$W(Eap#T? zd%IOY(CXbT_mIJdN`*;mdUnI`qq@5NNr`(o&E#RQ?t^bXSWh(5gfKv)KNIh*+hVFu zDT8SfC(zH+H^)E%2-Tv}g*&2nYTTTVEMgRo8WW zKvKFxKtQ@hIt59kyF);_I}hC*(jZ;Z-KBtZgLH^=cls{w=ll728CYlUz4nSZ#~gEv zXfltToZ9Cntthu9@Fvz=J7;dUYCJ4odHM#u-_;J@uOKT*nsQ2cBf`^McG-UTAo^$0 zJ!^rkSJdt@^eKhC?RAZ^yO6OadI)r^ZW}&4mrhk|n(3suljW7bQ{UM^Y*nZxhlrHe z#44|pl*3N#>k7rTj=?<1_?Pe;>sv)#j2=)Rru*+NiV$5esi z)fXvS;;m@yhd+?wQ~oUd5HlS9#-zh<0g<>Ef=D-H-w@!d=XNx29u^>-?TumvGyicJ z&EOSr_RezK9-?q)c0xeg2-ncYk{YMVJRfc=`fD?`aIR{L+TOk`yNaKMO=S+RZ*`~- zS!skRU7(Tgpb|1UQNneVCx= z;&<;w(Yxv`(j94F zXC;8Sp1W3yK}#62ZCAqIaE>Vy$(Kvz_{-WTd|7z*l1F#Z@tgnxZ6#pRyj}u*ojt7q zY;BY%!kcnBrKfhu-)x%i6xP&zh2ecvU6W%kM>{e)808$_+CFCB;`(nswT4GVp31%H z<;lb&A}W-&WLud*`Cvgmo;dB(`y;10g^LR#$02nna~L0iKZY-x$$l-DC4}4i^uDZ! zE`M@g9P2eiHh|m+dS7V#v{fOgcc2=yEFo!*q%VZt+V4Ns)$Z6G@9YW}&*nvmA}PC` z7bA2g#Wb3++Jw7xK?~7$-|4Y6e_ONiJNbk7sZm(ur?NBk&hql|%)9xM6Ww>*X6g04 zk*KwkX2yH&<*=#}!M9Sns{(H8ZJO=&X#RMS^_hP!vPV2mpwp87eg-kj9i=>qQ;!qL zvf!fTmNcT&i61|jwq<;k!xr}>A5qR{XLeoFom+mK8)rP2Mtq^s2qxHTFml`r`}=ss z69Nw>y{5u{AQ`AyY`s`I2GHg|_hOQm)2N&Bf)yEP~0MKt+TI!4;>DqvGXfWZX|L zEG+aB6vv00^pIwvIB#p%gp{rNEO=tGvaU|sq)XWT=vJ;!ZmnXfu5Wx<)xUB_sZK@- zO{WPzv!Ox@m+^5~(YKYvEc%E+p1+p-`arMBc=-)z4okQVV1pGUCL4flQgPr|tM3ZP zWMa{4O98Ewdhp{e9{{a1v>_EvMC`woO6!IEor<@BH3kuAc91N(d#gQcGZJMwXt~JS z1m$5e3f(EeqWMGye{d*&hNhRjQXcj-}?(w@t819~@b*I-Z z#2E70_u6*p0Hf!G(cDc0JY1M8zF(!uBdS}`RXzG)pRay#vKR0Fr`)qoU!$-uleuSk zZ#s7Tr>n^%ot5h-@OO_JhomA&W5v6OD-U8LTPRdO3=fAtg65|)z984k*I0L`x9#OT z;{$snq{<#FfmIfb8XGfpgrC%J~R=ZGO??^bfZwDJLM}7-RpME?U)y!}`9tIEOoWd$!w?V*_7h3GV0< zm^;Z3rw!uyf6lQH@Q3c-%Ji**ch#a}5zsP0a;s^<{r<(7P__O58ob69QP@~2>?9QOt&bqc~kK=&#hA_NeQ z()eAEkf6wZMPDCHb7d%7wQ%RUVHk%jFb;%IevRpOl%E%RyH@P({pf)TLP;91yV7-| z;s-Usj3WY#>dj!*Z7%7)_a`6C6=cQoN0>Bx?N451uAE+*@S;lkMgi6^64Btbtt~uI zTxokxQVFVKRDSXT^CVUn1yM|pZ&g*8Mtza?CH4Ym18+c6^>Zt86x)epA}lLdG5c)uZ)9lt?@>72Z=6y= zD-hB>QAOPAKT@T}OZ_dBY4vQ zbVf)g(OTK$-Bn2jEb48J51OnL<&KBb;Z%#iYyavA))#j72#_lxGBimU(L3y7(>J%& z4t~7){f-~jx%1#x&sZ38$xf)5J)SG3=*PI`h?RQ>x2nkPEbh6R$*<=H?XN)j1I^$E z=>8PCQm2xLhIW0{)xwg!QA_Nlk+Fe{%iq{!)8<0nGq@GqzJN8)N9rW?!Zq@ctEQ^ob|`xh<6Hm7QG|G=Blm}8Iv}_b`kB{F1jl&bN1239 z>-Hnm^~|FJvH|DT=qDAFLX4*f6Sy;E&6;6hkCQm}V!@2q zJ)$3SRSd&5!o)-y_fVPnGD|uNt4plrCLASSrExBQWt9a9-fQpkDWlf{k5K4V^6ge7 z!fU^~-(XH;bo}9f95gc*3`y2F%AH@469mPOEdEAzS@iLS`9pweHhC_P$ zV)|B=FpHm@pW5ZUhM5$uG-hCuNvc};dai`26|btA_tS7tTG|nzq)Z*Vmxi2{+!rOM z)q#^Lz~Vice!#&Z&W%JuQ>5uDsX@G!ZM}2S9LYLvc)jxFEi#HDEHtu8VI~S96!7|d z#(A7)IVGmU&7+}~E07=!em&@`A;Jm#%`~~m5hn{l^b174Ddx9E09wb`oLmU+2d{Dk zKGdpwLd*ZtI#5zunZDRbOV1O!2;vYx4(sU=g?K4m0%+9n%6MEA%&zzi zL8A;6RudDKB7YqGnIBj(Qw;!sJaDhX%d7l#W=)=eH=1ovixDr(KGvkg>rqDBBMN_fIKM$8 zfk@@6;6g>{XN7J~4+CIs#7)%qW!!G}+tnkbsn(2P)+(VMpW(!@m$Q`k1q3*Zuh5LP z#RG%gzQbUV;S-aQ;iqM1eocXnr1%v^pfUd}8Y)A<$YN+WU{4uYAyY0uRnGrWl8bFb zxtU<3YHqKH^*bjVvopUUEJCSZIFoBV=HJ6HYZQ5gyW@q zB=?4ungcd@GVh-?SO=BQQ-R0#Y2|=5C8rIWSg9nDP{@nNRGt{fUS!Cg?=XP<$*mZA z#_KuKvx`=+GyG)KCxGU|93D#kCIaS#P4Y+TcrtsZRi~M?Un{ZVh$8e!1C#Ne5%Q^j zqBeQ_fLPW_sMBgtd@tAP71!nur=m8@Ih$`t)}m2vW`BE&5@ug|fc)VOeaZb`>6fo1 z5geAsRC{A2lgC3kI*OS$((G>Cm4PHW^dF2}Bf+u{atBkO;2umH%GxG))?1x04nph< z>X)LA7LZi{Ie7;O^NoB$9)TP$b&z(^TG~W=aE{Yb#!4W*OA-cYxKwoJdJ@?n_B-<2 zDdTl>Mg8Q!D{!@Z`Y3Hz031w`<`X8U5htS+mxaY)0A$P6clM z5BP%C@gEWF1bsb839HM*;;2&^^cof))Lb(Y^9t8lYY1;n^z-OS&XdNjF?{OELHGJk znl*MHrqu|;(`&yZP0)z}g^L}sUut~f`$7)zN$P@vJkJfSzt^9J3eE3oA_u}1gA3?I zw`y!oO)$lFHd?a?8~%*z`k-C9m}oh?(4S6~g{%PVWcG?B8w#n|9r1TB$xi3`9^i70 z=gSIkhYHsZaMws_QXLqN9WU07!MIJr-HABZY2W~Ge;eem(14{S9f0g(W*!uw(F%LC z{^C2fE`MV_|3GkL!K!vDm|$ROCtd#b|a_oy)wTLF_VQv%3AcNbGxIbN@0Qk7}Vp5sau$ z(`X636)u2R15tJ}#@y}s30X}=XbPmD z=8a^mGJL3HANkxOJXdr!Ei!|KZs`{)Ywb`LDJ{4)`#l5MKnTX_PL6U@Joq~|X4*id0{zlU5dD;kR>6g2zMK*@4dC^?_GUbeJgl-urrK5vh`q-@_p8ZS}Z)@ z!4`V*6X4sYuAPCEiwVJv5@=3ScTMlHg3G_wbz0IdW(58VLK5KeI1O%W=wO%0Q4x@> zT9U1kA-1g7D$|&4$tftf9oepQADN@_!s7Z&$Z4UHA}GT1+eI^lv+Y#<=C?6a8XGrr zE@4|oc~M2MSbopsUJo~UZpLZ*l+K@g>i+K^Kh~vLYD_BRXp=?pPtDUR@XR9P#GywW zqfb<*oW2?mhLh@!C(#!-p{0Z;J~51B^16?W?;wBqC-6^5=9+ibC-Nk-t7(xS&)1%R zdc3cX){=DX4GUN-c_W~4dINnmRBPscFcDd_UAD(qq*r+SAwr_8!djux>Dr#U&e&HN zsrL)}Ss%$v5{b7@>g`Q+Wp-ev>z#XKgK9=hgbJ2MB$?pd@bd@fNkqLwk*Il|Z||}1 z;U@{_UsaR|FnKA+$K*7KEKe5Ol(&;)FV>pW3&vM`5XCNe24bK!jNbD&T?F!DM>1~K zl{0J|@SO_A=)N3~pfzi&BAEHraS=$c@3o^_UYHkb2l-@zJADo>Y+fw{9Zzk~rQqcXDpRKKq=SimG?b>Hb8-<#M%K?b}UD%K$a5Kk$3IYp11j<*X=3gDJR@R#n1Mm}rf`El&$t6v~ zhE0D8evBpJ*xWG@%@ZXe<{fIUuH4wc3Jw9+ef;7ebT#(ZZilXi&;w@kv^Me!hz}wg zx>rr7YEvEHIg6N}T-BwfehH}DyD-JbuT~`7M?KjUvSMts#!^WL>iiVcDG#9o2ZOg- zKFsQ`&p;c*^k76;P@I^g-+N!q6H`WI72(`DDmr5S6_b&<*{m6(#j9|ZWYa4v>8vq@~W^2V}N-I3cXoo-Yg`ZA2EdZpxFwLDm5iLOp#i*R=RInmWIITl)o& zbUW_+ZZOzf;71nxNk)~sm)=LS#1EYx`8V9GuL=uezSvrX(cxp5t`lMc$dH45g8k7^rqbyBrzfTDK)2%KncP6Rdfhi&%hw%Gn za?arI(nBR7!9f0z z(-IjJzZiq)Wh;*vEzD{}Zp?d22?n%%rZ)Vy|P_!(fXs8|r<1 zhS3`H-Gp$}!kVK*`_;em-mHH&wGxu*n8c+r=j!_171mCY4O-f7gWf`{eBkd(GpOyn5Y6)vlK(Po6y$F6A5nP&)YVTGM*WDR3XW>#ypSxy1QK3VzKe=KC%ffdk-axuy(5?5n?gbzQG`|0kSC@Ym zSzA9veiDjRMPHDhW|=wm!F(Td@)(Zm#ZrfX;@j9=l>B;q!?Aw64;D*k7%HGDLKLT> zqo}Q}yn3M8GcGX$$u$xYm`(00t&|Gg&tI&0pRUAt|N!}G@J_iS+A z*Kb<&a@a`o-bbaWgR8_+uKC<^uqljY7*VjuPASVW0RH$aBGTjN8Tuwm1O zqMB#}=>r*i|Pg^kNgrJBJ``u+R>T5MiPVN7GmG4NuX- zVTZF_GB79We2E^5#}TmhUdU^zg z7B3Hj?mAI?R-rdt-^-Ga72|~X&&pW1GVBQ^RP?44Hp1A5wKxliqgd!heqlZK^}*2f zo1nYWl&Hh4FQnt&Q6U-mhznqx3cz}iW$ClThrgV~DYcyDaJQJ6&$YJCkUkRf@Cm8x z|4bOXSkt+q?rP1V!l~xAw=JrvJ01)-G*CsS17jyi=nB2wIB(JZf1hL{f(a*$serH_ zmZ&nz?G`QB-EL7r)#=LMAAI{gPN&3-pFI^yNd%ii`vD-rsnaH2d zX;q)MSc(9H-{Uvx`0vQ^->#|4)TMwH!BUc#cj#0pldx8x?j_PtNe99Gjup}d zSXgV7b~?iL<-6SH5&;p!cEKN4-x`bZ0fU|b1NrK$8h2e2GapsLM`N6jzjcfc`AA7a zqIeY59VE2OynMZR5{0PBbhx9Hnq{No4u3^uWn=Y64O&;PVdtYi-CpVVo#vE-ETvkhZzk zc(xGyjWtm`7O4+eRKOSN%S!!r>9w_Z4<-dA6W5cHv_hwb@}1{b`cgvN+FKK}P!TP8S+TvcU+Xbc z;hgiQLZXtSHdL8qlQK82Yp0&G&|&D zK~F5jhuFkK+(aYW*^<-4?qkE6A%^8*>%Q9slqTyxPGW(9*Wt8H1qJY(4`(RDE+&~X z7Mz2FgKW-wDuF?l!yXLLhC~u0t9iX?3D9;s#;S{*zIs6b7e>YA3PJLh1<;* z9cfB3O|K2dnqL_3qQ9vL-YCqOgRb{c%;iFr(246uZcgV}={hv9FVr6a1B%Dvf==V> zPte%RW$H1f}Z$5`GfG? z7a8!c930puCnu{Mx8*6s+poicp5W^{4afxJ>is9Os|~OpQcNcp9QNaDJj`( zmUxPcL8FB4!-E%4!vOcpRXiGCNYqreYw%^beS^AQtK4R+7y5aZS2%y-+Z5s^=g`PU znKt{L*a_Dawl7*%GGcHL4H^8xv(KBU2E^N8D0m?rabbu|-@CsXTEXZi9v$n&1}!!$ zbLH_Uy1(=sC4FyP{E{1^72WVmL4`v#M{~{}&V*!x^7F#NmFz$dxOut?#-F}_d_qyt z$e>F=4#n4#;c2?`?u8$~jf zC>u_q_iDos07B7!Zb_wNk==6(Q~fzXJT@#hRl)mEji6}{LF7x z(}gZQ^47<9H?pC^YC6X3I^lewVQRsqG<|(Bgeh;kXZEb+=hZb9zC`aOXC-<;4|iZ{ zHKL7()19{@N0UjGTsdy)FmQ}4&}%4`x5d+aAX$(TR9^|(1%yO42I8_4uo@x0B>^;V z^oT;*w=veGcI|&K8ojkX;f$3w{wDQuQT|Z0Ok_%ekT?LJJq-1u_!xh?rKM%H zURmYmlv|e^TfDaQ>G-wnoz-#uca-c12Eytu&(}1t*Z}iRdZwOhZ7z2e^sW}7r$r_f zQ$4@m^+}`9mk~dvMG`0y27qwNAn}bu2L-ke>8F4~ECTJlIP9cAHutfY3x$O=KvJE6 zq~Gx2=2S{bs_S>HsUlQG1+G9T%zm>^gdxe_L~|O6-qx7?>Cw!_M#9MG4K_CRHw8NK zjh9nw2JM8Xn+lD@nGz=hCQ3hjhx3`_=&IdsRLsrGM%O0rp)GYDG4E>Zeyr!l$6t0H z{A-l6J>i3_iP<}AchmS&{rb~1fZETMcW0uHCv*LKu=+3Sif1nL6HUoztT^pk5-*7b zD3bBI@}jR9VM9HxM*^8TM$=18`&}MQXJY=b1My-RKl6Y}bCl%A#{<2@>Et)>xJaw9 z-m+=R%-eflXhe&5{^*FkTq`wN)Os1v?F$ZpH$bKx=-Kw?dG~4eAdh$~nS1{pDHaOB#IU*tF1y zA9R|~_!7u)9QwcME9rwLHR>-}j{Wqf$?#-Gf#Jq1=aB$?(|F6AN}R@E&==W&7hgDg zK01QgnJ{soQ&Qa%AVCK!?XM65U~X@32L=a4O-!htXLqVhFftBJU25h_6cjK!-GBW2 zX$S?D4_A0_vEnisN#ndZhW^{1 z^1+WNP`-D@^Tf#h{xW#K&}OFD=}QQ`F>>!+{zbJp(IQ3`-=6fFs+*nIMfV3U#k`i8 z&D@l{q9K?0gsv2rRQJ)EO)a?WPbbCkP#HY`SIS+cS&yv*#_J8`tH?%kzrD?7OWsx- zOQFh<`kwWDw4z@^pl9xm`cNs}#vYv=mrT+NHZ?4w(jK&c%3vMJ-iBP=Vzcj}t2a!M z$NZ&|l_x-0b9{2r9|*co(9$Aua&peMdvXJHPa3(5&=f);)El7W|GdjlQbH-&413@P zjM)zs8!_tZ>!sx7`>PClJs!++kd#u8Pmc+ADb&@g{&wZkedNKIEwjJ6aQ|;JpBd!5 zXnViOQ!aO`GK8cWNQbbM9~r6|6a?!P75UDD({sr=ndBAT{{AUQTb3=TqxNPO$`R!o z%MYT%P%(x+Mw9M+FYg|P!l@4Agc$}Tv2DP3L4-EHw@$NaL8@2kF7ID)vK73R_=46u zejzXoR({duVi!!4%Ni9GlCh$SGs1m1hDb?hSJa0hQI`Nf%uDkPFB8Z^rEec4LKyxq6u~Z7p_hus;W?`oh)ChrcA2Jl!?El+ zE*iqz4A+w_-es~)<|?zXTN3VRy*k;f*6*r9ecloyHCAxl3;zl_mZGlponZ`}zglSwRDaL zH~V86gMLT9;%1>6$UXE@X@izYjNBVm4w7y@z|)3u9afY!H!OE_`_60lIB4sSAr}1E z-fk7ZNOw_JSD&+4JqnEDL=acvNJw&|HwL1j`A`p0A5oorY={Pm(X!9UABp5KB`ag7 z%@>Odd4hL3>wF$tpiW74PbvMuVQTU&{|6dDZXO?YB(>X_lP1s62DhysX=KDz=zAw( z%uHRQ@z3X{<>RRrO$@F~H5)f}2Q|STt%U1Q9KuMr(K5pa6!5MHUiUpmjL0#4V4e8s zU<)KMJM)qH{Cm9S5|;S*@>sc~q5|3nM7qfnem%$7z(N8jvp>6BghobMy_1EhsK}6Vl;|>?W0sK2ZReO#W3n{j>Dbeh_99LWHOxVa%!3nu+r%=J#VE;be z!zNNoj;;1dGd3-67M2ig?ZXL?>9QfO@7t9+G^xbt3dj3zoEC3|OgRt=E?z)XxKuZ{ zd#u;G)?3^w7? z$sYm)>fe{BAW#Fo-$`UQkGggw@ufIPn;kC5WO8jqUth@X1R%)bAo;&{nlFH_Zyh6j zA5e&lJjjD8HHwyYPRM2e0V$J$zJ3h&Bm# z)EtbRFCM77<(6$ajQDqWQ@I$Zw|1^h4T|6-jh4o*wnfF^5*i7 zZI#1p11FKVs_Dt%?y`c^2R7>gPB|Q`D=H3RG(fbAOGyb`($O>E;^O)YMBfcG@t?;L zIF^7Ju~>kD{1@J1)4@%7>Io$TT77#{IiBu5B19ul8pQ-oKP$cm<#d;~6s}I=nIR+7 zDjFK0tI&V#<@nOZ#>THS&FZzR78}ZCTR~~nZ7h}f`&Tl3<1f`(f}?{U@F>C+U)0hT zP)UembG&|AbywuQI>W`u&sp{i#H4V0Ka^vq?lU#MjaxUI>UTyhnc0P+-5tA-XfA`W zZ5_#9Dm+GMna}(ts#?*|`@x=N879~W?O5o3`!k$y1565%ka}VRqxEBjVew@-c&gv0 zsXZemC-Y#xq4HeRsEZa zn8DsR>ClK!w3hSdjXIHDxyp2mOhrvCx21&`q@AJR;jsPoW)>Er%E~yv(Z$V;r!Sf` z0?r8CP^&;q=#P1oDCo5h&6&DS({lER_|@Z8W3!*!sL#E( zAmXjm&)YC2BRk*;aF+a@jnY*YQeoExA=v@WJVf+Y3#>-*Mx4S?YDKrltRYX<+7snK zprqO6!q;*$Pt_Z+4IZ3X{1E!9ihT8yd89FfR9tX;xnX1uWwbkS5Ga;x$`o>xL?;Ln zGGn0l-i!!T+qrGk*un%hL5W`t7Gf;}26Gmk1a5GugX|_bqJRO_H=wi!vVRd-Su~f! z1^6(r|6(~wlG04-C`}`qpSDG=c}*3#^~}!2*1+cJ9rxQ;IQLNjfw=)!0w9F714{E7 zK(im%D!m6$4lxP-Yg1!mgFgdt-=Mo$f-#k=UZq>j7@aId^fmp%N?#&eU7%rsg-SR^ z2$!;9tirl#x--+cQ-F>RI5Zv1oV_!uM(1}jC@89R%6WMzSQ80nZ)`FXS6^#o>RC3h z71F5&DhJz`O{#dG4|UjDyqac)ydS6Hb^g(%Sc3faQJ1%w9}~d{E&SnL0vb?()Q%AX zqk|~4-2Vx(;bp#m%}vk8^b-4{zp|?7gfKlKl?Wv-JJzqbu;Mw6&qHCPRW(e7e`V3N zK%-r(Oj;qZ#ESg>ohg=3qV&Fm` zPds~HKt>xtHK1ot2IU%wHqm?z5Qe@oLwxruTG7E=vd({vTBR`}Y5sA=DA152wLL2- zWUv71_QfP^I@4EX8XV zRyow_d>nAO7k5nvzI>gSkjk;3T?2vC{+`^Vp$|6EUg7Zk(hYy1=S7*4opmB=Z)Umg z+JlrtKh8~o0=Ac`%Rk42S-gbcP~+T-xOu!FOJSnXNlq@4h9!m0&20j~bhh*nLSY{P zV9@1xi1Q&%WpRNJB4X}yhCn6VP#y&{p7)nl{pRUBiq^*aB!*i7?)Mws&l;~~XmQ1{ z;?{GJ6GFCEF!3tp8!L-15+!;o@lBZ{orkh|K4@QM@d$VrWFI634oo+tgeInho^Sxl z5of{Fs|!xFJ!NPo8BhIGhd-Gl=8r_IM}#Qi6!!of2CBI8*|sl+9!pdv)fyOi5xehU z!vMXa`SG!KOz4I0lwHEiRmc5J_K~|I8sHsWnM1DO#nfLfx>A9?FQc5f@AtxIDRcVa zNFv}K@VT?v`YFnwAK-J}Cd?GHw8AGRm87V!0ic5kh4aIDBLVh%vCxyi1lmq6;m7p_ zBV6(510uBkJ>^@Gv_fPPF^#32wuAkWOaBlc+@c`g3M_z{pfokh24TUD@ z<6EnFwhRGxY~m;cl72rbX#hCnf{p-8iXH+LmE@yQncW0=tYzDCqv7xMj>o=YUor7g zdELdNL^~sIYD31<$mlCtG%PvZp$=(iLhoa>7B~3s#oZ3;U7DTT{#^+5Ix6*-Q1-;P z+uQMTN^9~I(jLF*&$YV@f!em~WDNl_w)GF+Py1|0C-fuMi&$(ukQ;>&0R1fQvld!Y ztZYRhRz41y*pmVENA$hZa-YrJzeU0t+ENo2u`4dtcrV?hw3Mv$WQ@f;j4VAc+*NfQ z-DN*~(seA8TP&SQR+52brZ@WVb99AWulwRpAYsokcEG0*<&5hv%n9$}vhvl`#EjUv zWv$@2YA4?0Vi{Oc_^1_w>6GL_@Fi3{`|+_7ty@6CQ#n405b*N7C=om(qbCjYm7Amp zfqxVC)8*Zp%Q5ehOY`v`zDIaYWK$n*L`mQvVTsqmf%?+dl^s_b$KBGXRd0e%Sa1R! zT@`yVDRL1f7E~JFF|Zi=x>55XHmgj&iTm<}(eumgK1yqQc<#H;H-N_~#|cF+64GP+x7RU4_{zXj`#+ zVeds9<}wy{a~F;|@mNg9vhaCp-bTBcsfapRHp(D1{~o1|?fd1p@Y9n*dFOrm_6TPN zv#~09FoE~sW<-%`D-}YgJXGL^x_V&fQ9o43tt82iiT@|#I=`rKe5?&MN;K!g)%{bs zp!Z5eD8)Dx1$HnJmWXd7{*$@7LZaQF2@+bIi{(eNykBkZW8BB^b!G{bG==YR0vMa> zEVImRqxMHIX1YSlkRU*asr^m>WIo6cp5J$^Zo>XMJ~t>a?U$NbP&bV~ZSO;V)BGq- z#8|RF>>2W7^I7rqTCV6dm3Qs09!6Du_-j<#c~Mv%0)_}HhCADuyY7Ft6PLT7K$g9<9K(ubAzy)EMy0D(L7oC{FLPbnAk&9)f>4 zd48w#ze*UC%%?X#$kE69D!{qKPY&8~K3;N6`{%mzSGACMC1u1L(~jecO(Kr8OTUUa z((h?vrbwH%J*%xSR2T8*C3t#!onhM)S(3hEy|%zJrhRj_arRnvq%E6fz?awQIio`Ia7{0Gp9cM%!%*9 z`tH?j`MDJxt$l`d8ZPbE!~W-(6X<~vh#GC|V2-@Y@-kADOHq1TR1_`$(X7q?78jl_YX*ZRP1C z8e!ys?zM|Z;239NVFB`e*t`j(h@Y@wVzA9R=m6CE@k1=zQUftp-V^A9ef$0$6;6a) zP>_^}h-l;0n(6e+OipetECmI{&SE1gA5?L)i#GDN1}oypORsl^^{KJZBOi?*k&tl$ z-=3kzOUNh;&w#y7>sAsJu`JIy(0M(*N%=M>?Z%)=h$mUS#qs277f2javXup0j z3+}0~5CI@Jz=RT{Qc`~``)~3)TuhNCK*R{1;(dXVAwX_3_j--l4d+0`$9c52rY1Hi zX={r29jgAIZ=reRD0H~*u3)Dv!E3i#(|jMsi7WHwZS>}q^Zh5@&w+nZZzHy)kl1l3 zTj15Ajq3SET1+DTIY>a;h$}?+UoHcM=!RrI0Gt5_jM$+q>zTii5^uoxDrjnkwY2bo zNP&Wtb<9L_`2B@>Wp(1$uRRv^d?t4_HSCGW$pN`^AV}w#(Hk5ZQdCn520(cu<%tgHHh6Dg!2pUF z0!OA?=@dzNgLESC#>rB0c@t{@pMdxRJkNs@L8Nwv=?KBD4dwnCe*7@7n^eFoRT%oz z@&k)|G#OK@jjj+DBjDGCa2%7@INRR-zC9@2fRr^b5Dr+2)ZyTd2L5_RK()0|{K?te zpeF`D`Wh;cNkfGWO}@=WI4)^B4f9TIKju(jHV%%0+THrKN+rw!kiA zU~KIAt|wa)%%@Qv;z@R9%wbO8{4J377t*97WiajCz3{C}~b0?ZNoE=Pr-os!rS z#6Td31rX&2mgLqMB>7A}XwcWM_#guZ8od-89Jr^ar=V{`1R!^R9C&MLYTCG@-=YRQ zk8)xn1Ol8;>y_|86PEtdD~-)h;yU+cR7RE|fGzePN(E zNbDbRRs8~feZJiq>HiX8uGKcf25J*>89Xr2o3R-gk$_7D^;`m`2%kY-3LZmMRrMJj zlZYWh3-ag2d0s-`#XFOul&FM*@dKj>OffZ>zPiAc0sF83e1rV}6HO9fpCxK@kixc7 zp`@D+5zL1US=8r(#*CSn88hH7xlhZ>+uSQ;I+|f#v{_uok>Ec$T9f4u`Ku5Fj| z8Dta@L1i!LAvr^T|JJ)~zJocIMI`Va8cTZ`#pE{CaIr)Ml%OS|2(gE#sEm@3b>?&*fO zMtO1;aOnyMCCBIC2QO3Cfy@DNff^ya9lTi(7q=s(P6C;-tZa7y_HN$X$%VV$PNBvX z&+(39k(`g=dQ$}Ex_%8?D%5R%f_KqlV;)5vZxH4?JX=#bh9F^=*7{8cjsz&x5x;tc z1%P!Rt>bL*pGz-r4hDZVv9J*S{$e*2;OkV>x-a47rKHRxk=RqeXL7}5WGn%R``Ea+ ziBXp0a1I%ogvC?7DI^_eX%~$$qHyS&RGwFsVq$P-=jYGUq3DV5tH}hwa>3Mp9uV4^ zDs%0}`|JLcw??txb%f^vL!o8G8=nD8fd;VF!zoU z6u|bCH?h;e3LZB+{AHuDp}fjU1E&^m%6A>lnjHea?ejOMed}MmJZj)Mc4yO!5e%wn zBet_Vk6P6A+_x&g{B|FCHzuGA1=42YGue98pMy>>p`G;$Rwi;`l%3~Q4&R&WOD=^! z{qwjEBcqHkhVVmV_SQeWMeag36j;HL`1C2_6HX{=)yQ8!3edUKR8vC$_i}dTP}#6} zy&Kxs*XJUpq^-Ruhr&i2b?8%BQ6b^zSUXisOGEP+9A%_ZdHMNppewW6n4NbynH&k^ z1Re$AnoRg4LSBSLa+zm4#kLj}XJ)Xq;wDj~{P@7#f+Yaim_4;|LW;CcTSa9$IuQ|_ zBoy!$fKDU{zY8k(Pd%Wz3{I@wM7E67E1jHZs&III(VQn;h16jlMZkqRjh3%J)FSi&j<=Zfb^LHv5poXWPd4N*>*OVMxgI? zDhXjH=P8@AN5s%t@p8K2mWXi25WA_+tkQ9G^zQ8x^70Xp#)uOahO~Ngp>B-|)PEvO zR{v)GPTVzG!IS6iZAJT)7Q`%lml!petG~=B8}v!jL0MTPwY1XI7Z2~9zRcR=+5u;3 z>o-J_MUAwz@z$LQwDSI&Jao7(QON`d@gv|RW5|Le^8A!a#EgxpP!V2$Qv&$sw&`_( zt|~UWwf8!0ZdgEC0-PcCWq9D*^O<63c%=L%#u zs~`fs8!TS|jbA-SEj17ykFzLMYUml#ZMomDptEKid@sK0>s$Lx;5Zd2D28tY!G+jy zhB|am>S!4%BtA#hwxYQ?ImL(0VTd?7c$%JUg&4o)8FBZ?285w(&gel{+=AtT#ND{ z65(XOM>VJx9C3_xp9uf6`1Um2gqhrR1~RH5Y?}S zAkQo*toMth*1?8Adtq%Z6o_nAdgC40fhPs_>;Z+lF3EA)u2!gGZLRAh9 zj&F5!xIp6rfKDmwCgIv={0@JR0Op;W3(W;|iD+<0femQ53~xP4MsRCu%NhlqRi_D3 zuZ0$#`@AZFAV8GFi&PnKiDw8H7Z0y~Y9JWxRWPVVxuks^Df)v3J`KcWe&9$o1o-6h zy*(#4OG}Z!L6H(oPjN>Mqr1JU$Wf?SJtC}j3{|DPraJbNG&zm&kN1 z%UatPN|QWf2)r>w8K$PDmaoj;ITE2F5TZUuYM^TJxyu&@Bs-!mE-u zYS-@U&o39l^drhF85(8&Z1HD08#XeipqQJNEdKP)dd@k3A#DIT5;z2lt-UPji9u{pMF{#O|q%k6|}j7(KJ+$Oiv&roe1t52U$G`=2^|JmQ$0|SOyHuDmE4>tTZV`0di zssJ3u0n_FA$O#P#>kdL805<@5FQ`Bnd7^EONYuVso|z;bU8!Mi?49zozdTj3-5I6F z3vXMj_}9YM2Jj-7+0WgpVrhwydD5c(jF|Y0+6Cs{@1J^;$trxH`_*Kua&=^Fq*fjT z_rD-j&R{`4*o<>@5cC~Bkk<2h3W}FBnK+fzkC0`@#zNG+3kwP;goR&&K%b2e6;S$~ z(;kpIfVgK7E7&NTYd#@FmhcEvW=BRwfWTlEFrj@e(&ZNw<$;*^{`&YBbMtsm(OMp# zA?f7@Xb8IXRBTOcEl5h%UF@^@LH1eCTj1#Eh($nv=<7-&DIw9oTLDzMspA`}TPab} zH3$DXLT*A?)6GZXVi_426m)f?o+C!UY%5>Q$jIP=A$$FL^{Y-CNGV~d>a@zo#^NHp zTa>nrKAmWq@<%wfOKUign0h})h@+}dy_*3mLzGIoa(|P0gj)N}{g|cG+YnYk9a2;y zEiP_(j5Rd~TS?_JcMZ&TOj6P)!(O+4 zvLIj1FlkJ8R>B1qz%vaF+C@`_APkq29@oUzmaHLUHx5f*&(HPMA%zkH%autH!b z)kJV!b+#j-gBjK^bBMSDWXP3;(rO#!1$xmHD@e$#9Nrie4?{+Jvyq429TL>XkR;W< zpt5jU{&E_lVRgjAD?D)0dVIl1`jk(ze{>n{-8bFM;<=sFu{{UpISDW;&j8XnIpc-aN zd)9hfH49}6z4gD^1(Yyk78_OgJmQ)P9gM(kbOn$ACb#Wt(p-V7%R}<>JNdssn$-pN zyj_GCl8dJ=RX_1k-ERrLcv1U4xo5zsqu|;39n>})aQu1V zbb|Ui)ImEwC10|sHiNW(!etbICf90ym;O61ZVb~*+P(jD^+o1UqkhQkOHlb8B+ZB9 zaxArEG#RuHc&1!b#zwA)0pirMUmlq6@D955D&)D zU4A{Z1iUYFZB^GEYym_$TVvUpv}brq*qT zWVh_ttGKtGfz7wVo2p=3j1gJeqeIPbZ3euOH-*R{M~E_#rmYX2+{3-)AIo2;_kCoT zAjufdD13>OkluQG6KdKa19T3Jp%Cq(NwL}mmAyn~Khcr=mk-Wl0LNwMj=ZhD0B}FV z2U;yJ+@Hi5`nr!Q-HH@J*7jat&s4ylc1yd&xWl$0WL^ryooi%fvy>IFBES(t*({*y zFqWKvgBIL0(>I1Qak(&K&2LVR`}4JOC)N@HcQi>AbfBxrub7)VT-ZS5r+n&fZ-D#s zZX135=C7wh;E$iOuakRpac_ssyWHLL(*npoI^5I2?kAIecpRO)h$%Z!47+3JjVG!X zuyc8me(!_|^7m9QMwunNzv5|J`iZc(A*Zx{?sl1ip|I7~4BlYM2MPFyI?RafXo{q$ z!h!ib1IKz@nq0>lvjhmCVgKVAOg;gpE9PcZ@u;u%-{_57w|w6FcSbe`NgEvx8iNN2n52(dkrvgYzb%0N zPWDodv_l6>Rs>zJh=%h(H$bkmOFIEKYyOj%|K__5x#a!g_U`1iOE^4C78p`21kfhA*Pa}A}l}&A|YELPoidgac zU1~gF9wwsn+|{J%7(U;Fu-YshH26t~J1*IN0ZJ4^_MJo*SQ}=Dan&CV`NXd^tS-E? z!t1vuZfIabHy*I%VpW+5f@;5Hx-K_LF)&aDTyhuD1w{|;JT3WqKALNvg_GG8&cq*o zUdwYZHxsZ9z2x2S?}8oi@&=>VCu&uYvQaD)3=9?x+;JoiH^I45E`zJ&fs2KQ%DH?_ z%e>#Zarr~`K`~=a4preW%)p$NRQz|RssQw|hH3I&?^UBh($i^m(?yhaEO$_E-e^Xw z{8+kSd%pj`ouxKo{FF!3j2Xlly0*S_n*f2m?FQlh$k^xW;F#75yO1{ zJ~t5e0=I66b^&IahSvI61=ffgjW)YQ*ef2flhVcu^H&~ZQ=e^e)+=0S^PJ4} z{O@UA(d0xZb+csYY;0^$Az-lA#;c26nIfZE4J79-{3=Sbiithlz)e|;d=dAu-Fk5+ zko4q(!oO1*lmo~)T{b|BiVz3&3V020FM#7R*F_+viMR09_EzcVgdqi14b5zadrMSp;Y<0>KZ50r%s;J=g+7cX5^(E$NQFj z-YE>l{kul|wCIF{Zlhb4!!@K~1i3~%>=thr-oE|zQF7{Wtm$z)VtB<#tYc-@xZm-= z?|GyFp&B|5cVdp#Vx=0U6(fy`1+5!tu5tal{j%%; z!b2KOBdl7MM-ob$>8WG#^ZZJIYSV!s{x2~a%V_@#|Lr0n?Y~MeyRwehhF9L*DPUvLYySL-NV!RV zKKnDw!RmVt|7`>1P6upfomhkIPd&Rw!sjG4Ighxh2nq5HTRTS{qqi*>4J@gIVb}3D z?v{IQB;F@HN|BLT`0`z`(+G|2fA@)^`6Zt&9@$8((1YTxIy(ln>(AnD7GWm!sQq^i zzYDDS`1+pf%ikM8noCoL?l~Feuqu&b=p6lb6I6G^%DFG(S=LvY9d8{6*1YBp$0tdl z1Ykm;^gkOj82gOylx&(of~95JR^I2U>c<5_V0GqBe8ay@6K+#sg2o3S0gG23S{Cnv z3XrTUBREO$I^a;}=IQMB>mmMu82e%U0L0GGv9XP7e=aML&y5MGr0Y`^nNL}nIUg-+ z(4($JM)l5UMD0;4(Ly2u$R5xiE&s&MOI6j>v;85@g+ zY?PgtRz$IBfIXD(4!{RMZ@>&(`}-gvE>6|WO$hp4 zP$)?J=N`}ub`ZBedh!_`W!#aP&48?&iR7uD{!+#=zrm!=m%_TN z5wI&5^0K$GdPkf-vtO}SLg4@i4B;ZSplK6ZvWRP%Fz=TfrOL#X#pa*k642+qFt9KXUz#o8fOu*JC+ zvSX`xB>c%hBCDBZ74wCZ^j(6plH>|DJ1 zbVxiYDG6|M+OKcWRWE=f(4~}yhK4XjJ6c>=*6v#z;)+=3O;|WC}9kRCeL#D>d?&pY>2?m!mwE3xf2MF^Q@tuTGb0IPu3iXk24O z$;#_S#znt+|2bJT8nZp$2)jDcbLBfPj4)#5fYEO{*Q8V*#W8w4-aR(eEI#YpG!$elmJJ7hlHKM`dcE7W7jy?rw=<7tDEy{ zdNRM$rC_EUQSXD5IGiA7x+mD1o8)wnT{RasAN?Lm!F^x(F>a2AA9B9@a0*RgE>W3B z%AQ2ACDg>Z3)pVU^UYc?YwMumnUWF#i<6|>4J6cwPMk`dLY7{AGZeQCo7x8ER-voS zUiFNSeYzEMFs=d0hR(VM9aYiQ)r`W>ry@`ygrP>H^%e;b2k#Xf2LoV58?T-Zjdv*l zpPz~dtw=Z3jiQpN(_bpj51bZQ?eA{fxZ_f0&zcvK)*a5O)b0n%CUf>Wl1a_~xbLf} z6i)%RSzj9Sj1 z_b#hA*xT>WvtgnD{N>=to0N{;49AqMe)Ym)cu_k~s>~A8aR0vwmB&fAlywdWq9j^6tQEkNbml#N4lD zX#7z)u2R6Gn0xStckS&$#PU}Y!b-i!KfOE;5!9G@Z{3>rX#mlm>7t&a?e$wTS110A z6<+>1t`VyB$!9_o=`S`txqi=S8&zzNt;~hJHzMXJ-f)XR*LWt4FcwB@wzqkVnYH^5 z?`d~CWCxc+KFXt38=?f_HP0?f4fWMTWXtT;*Y_cqkvKKa%tbDn&v`aJ$j*B8-owPe z9@lPkr$xz-N}_^?r(&ifk2_!E$@Q<;b5z)`^S_dYx6hh1?-P6EPd&csE%lK{^!;aQ z4O-Cmd{b29MPK72mVu_Afjf(i#s@nP6Z6$`E(B zLC57Oi$)GY6@iTtlN@hcl`c(n#YE|;;yv0Qk3`-v27jZCBgQNK-Bb4$Kd+{S28!+| z)Z3fmsdn1zPeWMo0o?@)@hS(&$q^*5w6L&vp>jiYLlJ1B+S=OVf4m_Gd#25mZ#dQM zR$&5@tPIZ2*D?eAZw?>!wC?vm*W%7tyGp=`p{zN^W+Oo`gX{a2aPC{K+NyFv&5=qm zjS|IUV^7}UqOp4vIgWylLpU*>s{QDE60Z1BedLqOk2|gV`#l1>dwurEi;Sl1rB7Ji z8})bl<(B#nr}kfNw-mm{1@{WS+uPd#gY`Gmh14g zF;SjfR%;w}^?TO9t8Opuy8jw~_C@8R^$(L9jYryavI;i{ImpW6K3xoR!K5UP;t>#l z#R6E%F*yy*h|@a@cI2r^^Ly|hBmQEB|qDu4T(MJgCB&R#6k-6a7{G$LDgY=6m7}R)}T5 z>B;H66C*~~QUJOkCGIfE`%c+^4cIV{n6`_=NnE#gUuOgeeQUl4GWVOeZsnDh_Peh3 zP=>0!{WE=_?aSc)rL0kQTB@)sl12Pu-MwDqq<7i)<=$UC+a!&2bGU)x5tAE=F4 z*xS@OYS=CxFcIAB5g}GqRtBUU!A{Y37=6Jn>H{?sldETERo*r>Y`_edtjx@7Hsw4b zdSZFEv-Pi!iNxST{`q-XrhDIIDNk`mP!A>-r2Eslq;AKk1js+Pg2pbVs$Q4aD z=0DV;;~c~0`|jDcPtCn*zs18AYA;uNT7XNMZBd2zb?XbQY!&J@o5eM42C?)N;9F?M=YN92s|=`ByMI7BpPkGichhx+m~D5m|JfXGXu7!_ zU1aY4KbgFbFlC=}wkrrZ!l#71l;L=dMM^3mWD4wA~K(X`?BM4AXd zpF)ULS(GNH7Y|vc-rX;;9(teT>y{iM`(W*&%AP(AG|YD;+YPb z1hwaT*1vu*8F|stayz~O`X0tbBb#B+di{c+X z4?|2$%y-7>5bU;&OLKDCcaF^8QVWz#E$E()8Xmj#t`M&nPnA2 zlk(J!!mAYPUu>0yvxZVXt%=G%Kn7&<#9iafCc8Uyum$ihj>~zv{<^kJrqVU&HPkZg zNr=JxlIL|>JV}wGpiWWXo16Ql9O|eqQqVqG1j(P*^3rO66 z*fr_g2uVuLt5+x}1@Q1VcA8$~`oh@4JECHzn8w!B%6nx-F$Tkst(?;={G-q!6KN{_ z=CulDcpy7l9WwZvI0Y=cnbzfO3d50r}fq?;NiJ0!S!@@cPG4QxcB|Tl#Mf{gxa6P(%!7y8r#gnCF9l<;V?lZ z;K2z?<%xgL=(Ao<-{W5txcWOFmadb>Bs{RP*^IEp79*W~<#U()?Ye4f6PXLWoc@5z zms-?+b2Zb~*T=@iP58a#atq|SM`Q@5zJ0T0a$70Q3`0Ugp<*O6x58UEHKrx-%NF<3 zqTaD;0fpd|;~Q^CWW846G9wcN0)F@9ZvEyY;Pz#sKO|vn;oo?e;rb%;26w8Sxifan z>ANn!GfXN;&k?cP7YFMZjt_E~FS%g%>U6T|wX++yvyW(mh|0S(ay3}Sbg>j_2kt7e zIHn4iQuZL*vdI}4ruoLjnQmU6T`YDZb@ z%)?nLffaG}V#kvbhQWiJ&tL5VLf3b8_9{gY<^$3Za+EIFihx^t-Jn%@C0 zi$$M@v8=G!Uu$8ikjK=FXiJMY(z6w1R51XG$?Smq@meV0r{`4x+lzM4ysSsfc0)>fWW|DPMJf2@z&0XP>fY}Ed_vyuD^=|Gq@y{Fxaj$|OLOZ^J>emEk2?mZNFP%2L zd(W0?4oT8XQ0Q!#8D(5*Asw(a*OdqCpW)=I_t!oe^QDyZZwd^$kSf(l%UX|G4O>V$ z^&D3Eizxl;W&Ej!FZ|XvB+q88>mR?*cR%z@V0CZBwN zpY4NdaaK?2WwVpZ`lIuza;RU!44y>|OXXF>cH_wW!Vl&;zoxp0=Kco-aW_h%Ay6iq z0vZYv%fo}&Z$OYur0=hk8h%363o?78j6J(`3$HJK@O-(;jDPR$-Q0=}a)a0@@w+w| zJMyN(55F-eUR7GwM#NDwr;JQeQ&e5|cR2~3@5)X|6{=}njxu4PnGeRfUL<{>W2#F; z!&;Mg#*oF1TTIz0RUkg+Q;mVcM>^T{{1-;>lRUNb!m3fOT4fr|M5<7{&5hUwy(NA# zsj8Jjt9=HR*VDv7OPPLpO}iuJ^V0!KnJm-6+h1-#s7Asuj(jMW8n2&wNJSO(`RxAv zu2UWXhx-NhvwjPQXhc1k5e#IGDy8@MU6hk-@-dv4`)FU*$tJ4)6$kU;ynmuE%nouAq{dV4nhLl~?_Er!oXemy)cxatuj7n8C0nNUB4^*T zHg5rU?c=B~zdR1Yw>0Ic4_pSA>zbUDlHz-Amne7TG7ry3?@l6hPtS_oYyC!3GO@9- zS|Uf$U6&i*y!p5=UJw0glX7*Kgal#LLtN?9>}}5!mD0TNW6m&jNvW)jqfrBWPj)_? zTf3!`3->)!?!+w15{YhL z{9qD+s=n89tD@XehW~*imyv8f50ZsRfW53-Yg=EltVLfhurT3U3wyQ8%Q0&2Lc8p=Z2ce8;+xE@vdf+Ay`Rs0 zYILV9t2eNmcymIP0PYEo^Q`AvrKqd6YR&G;X3m`qOI0%%2imma_YU=JAz)zF6?k-ZcFtP(PoqahnXZov3kLf{HS(L(}MTks5HlKZFwi zoExs3<1t>V*Y=C{^>rRJH5D`>q`GJxmxkWtQ-hvepk6G9t;419aB_0i>0a&O8~6Jj z!AH7^d}S@0ihhx+=6@_h*7P6~&n=FIt#&G!MByGX4$HEW7klz?ghS|6z4p17Pm~a_ zGr>}nHM6($3To+YnSFa%n?t_du@d(WlW@2Ad%LL}YmDy0O3m1{Q`0S)%Ok8YB$Lq* z4kjz5b4i8BVx>@v&`ANvg3axyx6;=Gh z5Ge}^KF8XZG$Pl?-A}b*FW%9jSaezu?=_cdI!vY+7dqN~CS)sb+L>ELR8j7s@$T(~ z8WZ|NPA!povQ%}eW(s6rBy|4K)j3toYJy{Md?np0z4Wgg-Dw8CJez~ScYtW;jiW?N zo1mR)W@>*w>4iDX`gR$_v;OIOe)h8W2#{`;&i^!S2wB#+n4SQ`t3|=%aUsL)mU5{j`bJ2PH;v(%zhLxDLe0ZN&7sYOQnLNqnG6`d|lF2|&Mp4#_a@jA3dp44Y#U#uT;;1MjeJh~p35!+#qtJDHQa_47(z%7vy9L0 zmPCcKgPQ#Od<=px#ZV=3x4tj}Tg?Xl3gPRXb=U8z-Y=;b5}`tAMi4V=KB>Cez4e-> z>H!52QR^Bjz3=3KAJ2sU$?i+uTsQ4ES_Qj@EbGNQOJaT^5_)DtI#20+LQg&lgE?Jf^97A13zzbu z5tjXjKi(}8-QpPXm-lo=9F&GqzuK(J1OtQaj%mYbMgFP=*(jOcZZu`w8({Dm* zUyNp@5+;C-{b!`aTt8DTs3r+Jj5S)`lpcA`+Z7?hp=V6*`D4wly`#$KiXNMycJ!;E zmtEJ(rL@8NiU=Yms4doq&ADXCGnaf>DuBfo>NVNm8%4$_x1{itrb+v$I>99uE};wl}U#`KGY+ zi=Ft~vd`9qs>J-2bvF^(IH&;k{it#ps(AU5altwm!6U#`B3BjGEcjM}>UR`>j!2vT z@Xyk?bLUPwR3Q`Z-nm0Vvgr5JnjBkcM}S5ciMf8RFUHCKzeGQlWAXpJ0t zq{hrkxxHZ@g6o9uxF+xiWAlpjE}JZt^;=M|WGEHOl=95=IX&9d0CKR!yFo|d4g*~D zlZ@W8-6BG5Bqhkw;VVFv4gX9cxM7r6NLK|4|>zI+b(lh$Kmj zXOMLJ27E3S#sslG{3PqupD2rqe;(aRIt|h}(?FSRpW9)qbym-E$C|`pKC$88b`>d! zlu;4XLtwXuW6AD*zhQU#;o(A0gmTW9wa9OU!(Yi9DwdJUN|a3!!sLb+SS3$;O8Etw zE&pPL7+uL8LN(cJOLq#;q&^7sMY)YSifg>>Lf=M@5QURjGCN7PpLOHxG{P+hbJJFV z%LPAk1Ujk|38rc&VkLU+dFB@BKf+SL-Msh$8AwF=Q-!dEgx%@If*v|!Sb|vJ=OBz# zl4?uVm#3?B8hSkphQmdies^`WZ2AhL?Nprg~v z0=Fhz6Mff*%0Zz3+1h}?IzvEuI*M0iU;d6KyVZH20y*rxZA=uQOwi*QnPwH}G@%&V z_0AfGI}m+%ZI6^&Mt46$B|88P`%2QB=9HX>2*;5{cJpey`g=F230qio2CWBO!iM>V zZ%tUq@o9uCq!Qqg@C$7gKBp|h&6KtI5bgx+RRLcSWAQBixtK9Q^O|=wF{;KDCbe#p z5s!pA9!m*p;teztKgmU;MtP2W9~)<(dje1_$cepaw7AKyI~U-)4M`k}1HtDIQSBf0Xv*s@he zBVF0&CrdmPR3A7T46%}J9L#z8~F?2}sKzmRh4?{47f z5`f}azEWz__@k7G-0x1#2Kv4m)rk!EHX^bWKdseUa-?HtA7EUe`1= zqYrvm5DREJl^*emo0sZ%eeK26@lf`e&(vV$rtJCDFUwoUJ55?R#8Vk8(N2#jS4HJ| z=HJfyN?FVvB;+YfQh)N{ph0lk+N+)!qh`7ia%~c={r&xYC|`ng;6_^yqAuHtgY5wY zh5O)zACjSfGlQ51Px_8tyF(iZZtOO6&ZT+PTkIUnCkoTVcIBcw3!)nTG^}o-x8m^! zB4Giz*bh<6fsQ@M*>?8h$wt4zFM!g#gYK-6(b3|?f$Z}Q;I^+fZnRw8e*MDjIeS{K z1MnS4;L)Gt=j60E-0BAQ<^yydwyF_Nk5KbH)l@|R3;SmSY=>s(Y7@o@fyg=t*=)y? zOk|dmv4HHT&-LT&mf*vcm(t$%Vf-nrmWZZEG=&iDmE5gHc+_=|$cch*^70&s!%cj+ zXs_7XnA#GdvVFMdPbuOo8}D1z+J8#QAnp)B0mq|^kc{m77@cO_=}koh{hq@Uxyfhr zzP7eDjmtG4p#E>HaEsLbM~*}RDtv5AloWDyvaq?i84?nLx;?S+qZK({hJH*uwBpm} zy#sV#l-J?k1r3z->PX2DbMR*SO&zNmo|Ml=kfk9%k@M51(893D1jZSbt z{1g_$#X&IDu)^!K+I zT3MA=QOIa%Yd`*AECBGJ5zNi|T?p*pv#BJvxy~3nm+ed7|0qc&;n`1_fJf8sFv5+0 z+T))1owYdlde_`poI^#nS%1bka;_NDO(fj(pv$a2O~|t0=(vgYoDicfX`tv)zJ9zCD78gBe0>Wtr zc(<69)Fe1hdiF4hqBcKW$`&XmCgV-{+yFyEx3zEHyjjjQ2@Kv|=;|~-JvsSRW871Q zoUY12ADFhh?zRy3qhUuM@cB~}&}fJ`v2hMVnuw+XS4$$0)cR<^w|7fwr;gTv*mwh) zORf^4pf!*oP55?;0;FNz7aO;sUvn4*!n?m*rTZtItD@Z_Io7~%@vUOP^K40XD+_p3 zb4ROX*@OVndg{yVejl~6vciP8*IlRQ1O~8Kf;^qu=eE*rSMAlo2X{sz)bVKlFb2=K#-aa_gDG&39%H>c_00ljisSl*Ui;flFDl46W9m-Tw{2c6JF(nEgAAhs5g8sRnj%7zj$EiS1 zGYrjxo|1=`QnU+d9GqNTjcyqmUyJT{;3`BkSu9zGGPesmWn#7TZWd-2?^yb}{G3swcj)E7J;Myeg$ z!OwuK3PZ?AiJc5;Xc0Zq?hmCWlrRgZ}} zM8KMDLJ7Wzga9ERC>NL|Atv52FSmYVWFnO?@8#u12nNLlq;~BvSh=~m=Q8eQ#gtbV z`@kJI)7KdAuKX7-r*^mE-VhLwJzjf%j5a_ZEI$DDSyW#BjKlm=9XOpV7iZ@i+p+_- za9&KZ{+m9!x_t@&bZtk#)*W5ljeL6pDLle#TNy4!K!mU*chIq_MtOT7?e z`*&$k94nClSu6(oI^?SRJCbhSH7^i9@1SM-CC-$B8bc-fIY-A*H4?s-%gEN>%qqkQ zSzNr6)s?wbhe(BO*xb~pNS{eA;kLn1~q z+1=mKc=MBW#bIC>!LcYpK^!{3pwb?@L2JU^c;) zC4d4>X1`Ol8EB#bu?ZFptCSQih}%XWP#-p>4L^p7N97M{uhp@9sP>qsPlu-c6R=St zw7P$20IdTGRoG3w2u;pVsP?JnDXFR9lv*{T8`Ge9h>e$*075`C^87svpV+8N1Sp4T z%{uKsvI5^J3)!TjBM&5#colW0R$8D}0l($t<$>6s^bmO{4_qcsXkth6k(HE`IB6f) zKwk}pScVHz$ZB5{X>E0NiFt#Mli+YatIxAnq{*}+wZ64{LFVQR(8ScfEsNH$hIrQM zGG%O+rmk+dBCDdQDIL1ODJcmvqmN24ZEeX-3J7eWy4<~YP4`4o9WL}CiJ$B%Pq6S1 zQqJon(!v70q`fRkQWwC~K<_bJ?rO5hm>B4N0$Z=$QJh^^cw^i>wy4@!m3?qkp!djk zknS)>HFxxFB)AP@bb7WdWI(nJEkTEf77Eu$gw+1-Y{S-jHVQ3^1`2eq4c+BC zK4!L>U*^f?VCPDYQ!z3Vt>16!lzR z;k0U~0=9nRw3CJmRHp))nV}>&z6@f%mI0oAzWwY}sj|2hBLC`J|F^ug3vlXeKuf$0 zZGFeR4$tZ+Ql`guX%`VdKixOdPp|(}c~L`h``m~8!iOH4{;>>l0#%_OG(d7hcb&Po z2yp9X{rnT9My?VuWvv*iPGV$!;n}t7H|`}pB*})yDTT0)U@v~Z=i9h+1eWOQvJZNF zgUUgtttfQEKuH;0V~tj2hhVSJoPy4y9q6hA2(tI%?nRgBmeWFrN?3Xa1}uKmutK(lb@=Qn(Zt{?Ja;Ikzz#naKE@XDB(} zdUwyp>n8i1gbYlK)#pSXf%^$!4UY~E{5iR~lQ@_~QFGSeW`#=04LB0lB;L3cDLL3t ze-HFc93{ZBrnmz(0V+tytDAfj3=GbeW(?HSI8f||QnU8K~OJxnyO3E&&eT`Vf7J(5Z&}g2uO7@Z~=JV|Avcrm_RuMO9Ve5zV6*AP%z< zP2vbPqM!Oa4#eC|(#ug8UJ7Z=i7;3VRA}t>khLG6C(nxCsH!}`c6?8$=*6?^S4MM< zCd335Huv@-TU!-?EBz!bEh^^1C9?sjG*(}T`~xk7VP+-p!`5MKx}?!JfSk@inlZUG z8^t077~meyB{z2hxxWcFroV-pzdT~;r+E>YSj*0ZBI z$U=@~eoPcRwxL}H9%wKsWWFx<&o{Gv({F!e%W|_HSG##s&Jedqol4wvy(aX4<$p_D zL$;+$qO(KrD6<36%A%yp#mapmdxsmd2@|(UKrDk81bu)k3n(obj`Xc}_51B31CkmT z@D98WKOJccYZDPDrUqpih}ZIe-k)&YGOuxwhBll(jCa$gX9CW6Iz)8*v$C;CEH?flL!ot@EJLK7GerJGl#0dE#q z8PLnE1mtTl!S9Z3V2wk3{t7r-pw^E02nC%VE*HmxO|UzZZ{B=1hd`9qvIT_#EwpUR zAPnBS=qyg(;gJGqxg9FCT%eJrtp#G;_1?Zd3k++94w0JFP7Vkn$M4oW9~rl}dh<7m z(~EImthcgOW}8gaU3{i7w#UHYM(B5f?HS&u^}om_twm;lj?W`3-1E-#eS<}Z9yt@i z=HDKka|8S>gdnu6kj$R)tr25GaDQCb&?ycc9=cH0FmDBN3)(t5LAukE2|*oasn3&= z#8y_zT3do3Z?A<3Mi0hh-vF`x%9iZ;<=)C|@FQ80EXUB9e+_h{Uegjs@gwtuA%3Q*&0SvcnbYkey5~o`z>QXiLE{Ja;A%Et zpn?x1h-9>p6qN$23w;W&&ZZGhUS+&k{p0UO1x4k4sz@Pf1Qdp^`a{v)1 zZ2WkSTq3+=BlpVZ5wGLf5&u>CTq$4^T&@;STh>lXyicGj#j;MJ6K|1 zd%pmxCeC;7dh-u#I|pRd2CegUh?Fq)G~Xp4!9>9-Jh=rQe45%A7KOkqQhzD@`J;O+TQ_d4P%k9zOQG?x6YJ*N?73v zQ_P=)+CYOx|2e4dST?x)s5~HHxDt#&yFVKP7N`QB--l4?f`izPE2$0}*0kJoie8O) zkLJ&YMn?9cIn1k}b9^1A+%Kf}C6RT)Q-l|L zRsV?I?Row+cWHv@szGT7k#`dX??%&HuhXq@5#q3&ot-ggx18MH>VZD*XV1j#D=wu9 zS(?4b%6hm2*;bc&o@kfXPe<|B7A?W1FX7!w>#LKOa~@m&lvp)RyBG^R95hbBNfSP? z<*8?WwW7RQM!w(4n~4a?v&4u{Zg1Y7df_v4O|q-$>}XY?Y3G}cN=^7~P89PuEUAo? z6daTZm?EvfzCiUhLJ{x2o4U*rg9SZDrm1R%hLqijEc)Iw;pR!^#kI#Td&4F7x3{Op*s^VidmTRpC44MGt@i=g>#&}`Ms5bL7H ze9p>PAUt~-kcZ07{29+3zv}C%x2q#bOWX}O^PXM<(^E0R$_7||8wkWTJ;lz`=voM{hq@0M zJ@tn|5QSW*-pLha%CN)vBsPkM`2}V9F$Ax-kb=0$isVixjKZk>|0?&t z2RZOR3?m1Byf)4{ERTc!ri%q)Hp$68wY-n9>l#l^#1*}l*craLwYi%__SnQkt#7Qg zDe9&OXl@v+5C`2x7pw3pu7?`Cn%6EBCOpR^i@~;3oA}jkqpQiOj;EpMF0R-{$V!XZ z%90VS^dd{+MHZYCt7ff(Zz8{{_fqhTU?HB`nhsa#FDoY!-ox=zftK;*MyCI} zZ2Y^$y9c))(IyQ=mIsbL@GA62aXgC zr{%iFJ)Ow2;hca(-L^31DC-a5amR3rNrCtiSdc}=C1%xrAX+HhLDvspQmEsA+y(nF z|4O<>p(2AZ$Ic>7x+X4{t2vI}ybgK>T%{}v-dow(wBgL>CCba_f0@g@-YHOod??W( zrked>FFhqc`gq7l=4J7SO_g#qZG;wKsW|=h?~Wl)@sK7i0p{$vm`=sPnSZrO4XK3p z&L0!zOG~D5a#|i;j2|_8uz7Z9d~*G*ic%N`4$1nG#hr-9TQ9V-GHdQ}wbM%9#K8BQ ztsHt#xA|afVwvoz=FRx;{cSp()?a*tX#-xp84Ou!l|0mQPhX86BxJ*$G->3V{$k+!60!3)*@efij%nkL;f_xh z=1La`728j0HrQk>jT*eafNi6rH)JrC(wjXaS0?;-WL<8&J9b4&_~Qq-YaZFsT#b-< z!3^rQdr0zaU#l!(TRS^8%9sXSeL%mkZRm56z|RrAZj#VCf|gX=34G9K2Lx6?b#Z~h zBV(zOJOxPO>-uy-kCK!dMvGz!8y~wM2wv~}FtP&4#3dqlJh}XoO-oJ~vaV+g6rl7o z@gP9}U7e-CAK1R1%>hS5Q|N<`7j_$N-S5BFfRr#j7Dks(Lq%dDkm75BQDe^nG$X$` zYCeVqZ*O}22fC2RdbCrc=fLtQl#Lo+ll)j|w~$};CQ-tBkDm3L$fzL(Smzu*4Q~mE{*EzSk zN`!KBalu9b4&nD=#H&AP#A{vCLQOSS>EBCq4w4;I2vDt1ii(OT=Zjh5H0X4i1m?9e-;D#xc^wQ)#J64QB(_NQ{p)X=T83P?LbW1=Mkgcf>sD95`o?kLABX>6*V`+aiH}hU{;0y{?3<5=4=UP8X7^faIIu+ z-}*910^FGYUfn304UZ(?X+hczmr%n0G?FsX=3NJ3fSQ?~$BJB*|BU}X2a~fx`xq4! z^h9F!y^th>@@IPzmyQQi3T+?)+T7muJ|g69XC3_SMT-rA6$D|4P$rmJeBs^=1)Zm< zsge2loFLe#2x>VDd&}-)q?G^rDSuE?vja>Tbg>B4k$8F>xXsb3xy(^Pk*L>=tpHD4 zh8=b%P+KMRzg4T0E2>Gn_}8RTL{nT-9I8%|lq6YxttHx;|K32qsV)VX{}lXbMi)mo z>HmAFQif#0dxrn#i(!eyPt{?yoq-BI&VN^n!2OB55Zf(M_NuZR)%Nt=yLTS{bND4n z5+E=FH6OA_fKKo78dHYY!6(jN&GOiAtPZQyo>l$xn40&({WU4A-KBEJeC+A<#oeg( z;?{_(Zu-(ybKA)`gGgi5KPTXElbN3aC=Ih;@?iA?)~|AQYHEs@+M)We$;qq*LOhw0 zR51?Z`T3o-0Jr!=!A48mOR8Pi^Fmfk|5vHWQ_4Nfy5o^-MeF*}M_m@kaCWKYBjnY@ z2um-az`jiRaF4g~VEV7!Tau*;xF^=K4`0jMTvrWq2x6%kT-_aml?Gh|QD&UonEteF zt|;~WSxN*&hrreJLOXS>`{WVHKof@SaCTS+i8`!mYjH0X1LQPI3P`;m z&qCY*gvQ0y=_0Ij6aq~axe&&9_GviP$AURv#?xXlm8x)0C)s|YPr`>wF|I#X(~`H zIOLOwF5#%DfzO}6CGIfoqhr9iD3*tc1_nC^cwVL^4893%!Zc_v_7l@7_6Y-Z|%_g@D_y`O|d*P?mR==5EFYS01$QIY%cwinEMFb;8yjzqM~FF+@OG ztIrT7$;Qs^V*zv7-~SM#o(NIG`|y}N`lbt}Q2Lcq+Met)$j%5R5f*MkAB;qeR;uv| z%&IR0Kt>rMSP4R1t1*1I#Q6gj)pa}zjZ8ikrmI0;0RcL+VY5UvpjcT6Qz~LDE&M#0 zn8>xvS_8ps4hP}H4zyWBf{EGL58;GkZDHj(4Z0>9H*BzE*=n)S@(YdXV%kZ zO^SplMWcW8Y6U+0L!uy<3<&fEf-B%Z{<7u;RyP>mR1qqrfjgQ~ef#46_wlP(c^3kb z_}q?*z%kl&phT@|Pfgfvy*p0W13vQ$7nsPd%PMLq0%U}=t{uO2Rz7LSo!Tuq-81Ea z)9f?dhJ9wDCv5B6^)CN9-j%2X+cOOu2`K)UjDbp@LDh>92Tl<+m{pN;<Gr_aId}_1u>(OVS#nwf%-U-D@XBj4+&8mOIV#fAJwYW# zhx_e}c&s1m5+c7uwLK?$6wV;zxrB`VwQ$2X7iw7e*K|-cA|T462_g)+U}f2x=hPT= z^G1B6R%1OW<%t*0EDQ-!o>9RXLHB;*nPq1H5&?>ImxVb+qWSkv(t^24}R8eJi z@5XwfdgC=yjc{{;k!TZc_Y@Yy;Q2OV2wG7qnNDF$^yXcjEAvY9J(Dr-GU)t=b*Qdi zU*Jv<02Ep(6;XH?6Vy;|!;OIPVi5-j%T>J{iH3e3xG}RjtckMEJW9fkL39bW&nD;a zex+^w$}tL@$sAimRExy*7Yi(=r+Oe z9thf9w_Zev|9Qosg4LX*ySNUn{Pq!&dZ4Yk7fJP6)71@9s}QcDxYWz6oz>bRV^qi< zdBX@nO7ew68ULo~;k_dAC0!GqwY9;I)0DdH(mggTwb5FnMqB(@q0W0#Z-*~@_KDiy z{e)geXhYt;oufY#)Rk|PwrEe2YUu6QVzoJ?xLN1M?G@%Vx3%n8ntEQ=?|^S8^q0kU zXXZ?Ci670$c(2-?uzJ+TK9yj<6$?&kzINwoKYN|)AldPf*}A+)I5=EAGj}ZB>2yRG zXeB~sxR>6CNiyL1#EW#hmd?vha95sE)&OkBmujAkd5%@ey9OEEiQ{$UX@R>AL?J;W zmodC8gzLXP%ssVNGs|)^ksjyi<`KyLwHa-K&U9yso6$I;N{3|4EUsZd!IGzRF;Tbx O;N{~L;MugFmiZsWY%qcV delta 54743 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

vWk(Cle}_VH(v z-PQ}Y-$%4r_Jix<=uGxt(rq_4JMFpeTnKFfLKvbn*Fq*=w*u3}?IW0D@7O@`Z^r%V z#>$^R3`@P~e>cFu`CWRWPIRYo!s#tXVwW{YbN57Tdrqsre3>r2+dlc(O%`@xYi~PZ zm>GHF)KyS@larG*{%6N$(jMyq80h{+wGg;;64}zy5_Fv-u5mE*bSUp`QE##+VtX5) z6DU%!gXn$*T3lpkfPmBp2K=-a_Gmr)rY|Q$1K2k`l$gpId4)qY^8{>b5@?L%SGRo59 zTTxP0{)=v?7+Sa0&ggN2>!qMoP%50^He7%PVdUctxJQ1q+<`0On^jya>;aR^-`_=s zqtY^ahgCz8rXSixvyX*nWDRL>QDpC7fTn(tK^{v4;AwW8Ke#y{1k)j%Ti4|(%@KzR zshumIP1bQy&z?Oi1w-ZE)*T6VJ;B6U<7{vXO>)M{lxi1^+?)QrFh9>B^&AHUad(>Q zyfhy-TqPpW^Mx)B=Cgn$FFEKtW(?Qh$Iahdu;U?gECKGz(Ra0^Lv9QvF^@&W9bAT{Mo)NY$^+Wi%mp46Ls{&!X(qMb;n?u9H& zdmd(Bg~D320(!F8uAd_vO2G3UKR#%XJ!Y~MHnQ;CAG4M3`u2@aIQx5N=cQYknv<@- zzQwO3kiM}VtEs68jb@ZU&J!0TBgezrEMfPVe>T!^9&c|N3U|^tde9UZSMZHJ{LCcl zz1xv2YI~mj;X|A5=eva_pUSt+dLKv1&_vGQi-EG)Ww@fFZ}sJ)`E zPaAQoftcLH#h*XRq15awD2Ta#zMXi2K3y5QCDSO(JOf9N?LS?cu9u!UK9N6JEjyK% z@pa4a63i?pxK#nbgfpbBC5!o=9+sfMBs)-S+4ejL_T0}5W>W8IYrn$`0KLD*jw>=f z&cy-OK9J6{@P31t_4(gAuboWj8%qVRx1)!em5lL$(`o>!?t&*&y>F!#J!bq47*N%p zKPOALDuG~V44!$X?D4N}<_Xr9&-TC;-n01YSH(E#n%M)(AXhIUCL^oDS9Ei8 zn*c}py6G3+BVSZ^JpWzf`NG1&%>8n^xCRBb;-6JuR5IE5d$-6;w)6BaVA#~?WrmYw zKxIEtSnJ_m(Y=AwlbT|sb*#-eDr8=dyoW_5P`nU@w9hLvs5 zC3=)`Kb-*VJ^?_qNnTR&?=1Bez3hCTi?VZcyn`+TW(>1AJ7l4-th0OX|Avfi zN%Y+QSRPjcpquh?y*s9+i0R74#)g%gftgvM=FOYOgQsJwv=*v-@i!eD9R9#u`4#3& z5)@$JxG0ct|5@w>+5n)LQprJr5T(d!m;-5HkMQl=w>JR+DApZHGpI|7aENFOgF_Z1 z1*N5H!ASHcTQgaN1qJv;y9^9ftNeWGwebqazXSa{NQwZu?tS}VtEh=+mTwm zelg{4f@yvsYPtXe(b8SLNq6wz+$!osh6DxtkMy1&kW?fUVGEOC(DY1uLm^Pn-R43- zc4~e%hJm$z=z7q)75PTcZ!9q`ac_YrLLP6d)m>G(1v#O;JVyke0=%{{a*3SL<^mx?0}9}H0lXotb` zQ|*5yh2{W2MhNrL;o%|d$AXo~IE3}6TN<&n%=QIwKqrn4vYz!~fi)>f*aEY4e&6RJ zu%8fM;OXfJA{|W7IG~+cAw;yopyNF}I*K#j4FR9d3F!PuP);JuQscwJl@`lCK8Wi{ z2leR$N@*gNhBL!zdSfuSUc|@aq%ENh-H`g7I}!zSyj49wO(OCRb2{h)Pys-pp zt_TPa111Ze-L(PNGNI6$A2^!mxWAYi4NpH&cpPeR?hndiEZ{RnZdtm@w+L@sA?CE8 z<7R0@-VwHEV)bpt^j z+nsXl0$hEqyXOteNACtoI%wnuH_Da2BRuK8KbA-952hzJ%Cnd=wDD85@Br3W-YvKs zQdn1AD`iVV=*EI2NCzcf#JpEp=hv^idbxU14mJCmGBfSMQIk#;bJcIaJfhZMOpLadu)<9^Hzf9DPrVGNhr<&o|9N7=i{x|?L*+oPsp~zhGH^jc8hy334F3-`o zd*~PlQT$H|o>W^ue%!F_?&|tXD?8}s2ZsZbba{jY?7xshf)64KLxIqLN5=*Uv{|nM|J&6&8g4&X}S8oRkW@Z+a zmm^?kLdtyO)YQ~tUntXoCu;$xK3ZW2BNRlAAUgpk{L`bPyJ}wE-lQ?+{~t2T+vJ$6 z3n^WX(Mwa+7d`h`M^P#*2)j*E;TtZQC=7%4aCg^TMNN%UP%wsRD;$Fy4@=Kj{Egn_ z9H&pJ`gg?n82B=NNunZ!v9PcpN0#_sBYM}5aVVl-7JZ$NV0_B2!a)JsAz`?& zJ-wz}WMORqy=KBG?segO0)&)w-*c^E#L29}LBF{@nlTnEKEI7&PcTfuC?P8PYRT)% zm5UdzTdX`mLE?do1D5foOf1oL`HbpCDVlbHfY`|{`wdPW9z2K|NRsur3XUH9X70E? z*RM5cL7%uUzWy$5H&jlnacy#HYHn>U8hpO!9%5Io4nOYc>dHe>h27O)p3vi?{znM# z?M0nxTSv#q##q@>Az(A+%dir4NV)iE{En+ihsGDDOWl86zI>%y?KZN9=sd6*ym<9$ zVemkaSa#^vo}}p}7NO(w&|3oCaOITQ$lpPRJ<#q~P2WN+2u$?&*nv;e=9O(c$^^Qm z{SKy(5_Hq3&598-4I(nK1NY*pF4a(r_iAv(QIM}fSgYYEXRFn<hC*eqSS6i&R5Il!UmSZk4^_m1O>@V0TZJxwJHWhz_itp3 zMxvlm!o<@sgFG}Y39~9;s09K)wk43kCvGVYyjjbu$u!hesHAuN%IK@L(=Ior^t<@3|Cv$^$kr!m(e z2uQkk@uKX<4X2KJ3q<4A&6^A-LwD~ZQ?*cMO#rAO_mD*oRMz)A)BZ+Sk9om5f`~Dn zz@m3OV`L@!_ueu5@X~WoKHf&L$;zI^3Uu`>c%5g%H!ferztiA-E5X_iH1cln@5Zdx z`S+MH>3Op3_m#x8w~?5Gl1zecWdSKwAPNrVn^hkTKinCxy9OPgh1 z0V6G~W||B=Ol7c=gw)nb2Y=iK1QE13&<&Idz75`<$5letN#~ZomkQLvo@NxB!fKCZ zzMKt0X(tFk2-y)zvUjJ!mTpnFtCSH|tZWQVE^+Y+hyKj#@^1#fQgwpm8D>2;@qJ|U zkeL{1*#-F2_s~V%*m!&oPG$y1^iP4V(hX5!&Id-r-{TO4vwG(mvgTwLl`sR)QNuQU z)UUp;$w_tlbf< zWK$-6M!t;~2YRr^S9()bA*y>bK|W=gH8n ziuSqUh-sxsQ5{?fiiJZMr2mH_euxK)*cIYe_-rLpL5;3| z?HwI`2Ga_R@9668V~xr;TK8ZGcTmg}FRFZReLqW}b=E=~p#t4Lev3#lDoXN?yd@d+ z%p|xh^<}E$jeZzZ;c;pZ zj!XiWwpBIt^j@oDQT_gzhEToO0}Vp}yDgXl1^|OYp)YIN$Bukk?0l3c(sAp0^Qd7q z%ZjZL4KP+olCB)zjmSA)rZA*_UrOPw`<$4V=%}I+%p+d5Fu$-E5^{xT_SfR%_xIYo z!ob%;<*A)TseJrWO&W==Il#xZm z~&Tz@rwRC6`# z_`}MccMGJ}mjPt>m_u6n-i_FFt9h8&t$)Y_d*Z+brMkMB?aCDjkX#Pt1W&mzkyU76 z(Fi!)bM(>d3TV1ZOSZ>LgFCGd*q=4O{r_-3ApOSkXCw=6JSB*DfuAZ(iTHw{{p0O) z(h|ef*T1T)Z#$`tHPrGy9D6k}x4*IYEHA#T+VEw_pGAjFzs;ME>>jDQn%)o+dQiwk zH|2^Zi{>`}aIaeFbO%znvH~*qv7Ku*Gz69WndgOR+CY$aKYdB@0qtv?g{4>K?(fm0 zQHm=xS!7%NWo&&T))E6jNonCxj1vV%ssxTvl(}w?cM2BWNOQU1D>HfWpkVaj_qC!R z&DPnodoqu{kfP*_{)q1ef*Pd?bSf$6A6!$38y-R#>=kCNyQ$(?(}{OoK!C&M_x)*QJ~~KzLik*R>xIx9R*)gDV&2Ds ziJdzgTF>BU3Ns&V&k75&Vb7ggy%YV-ZjM7v{A?yxv-RDrj;vc9%G{Q-JXS!I)@ZKq zh$duzr;<{!Ayk#*n!W*rILU39t=18sIwst}m+ebQ6v&p6e9^V)sgK|{AzzuZJbg+F|>g1O+YBUx+=Rob!z*{o8eyz3Fx^ zwmgNu=y#Hhv%&G6mxuaw{FJ9rK3=Cn_pLuaMYOS%L8c)Yvv9CBk$85zQj~rT_HG2S zX03Js%@I+8bw3{qM7>=S`&BQi`}~eI!_VPATSxlT>*0?TbzjikP_(3yp!btknsSz8 z@%PscnKYJFn!>4;g>C_XAoA<0w)y_%%x8bKlcmRn1slZXKI?C}S{4VskGdI!1ma?W z{-09cXw$IBayzE^xk)yibv)@p_?vs6g^w zZd(Z7fWqAI}og#KOwxly|VYU$XR|#1mV|?x_|5GTDd+yLHq9vN`-(6iK*)?5gRSTT1dD` z=Hv3GxFEV)`B>Z3h!sNOeYz!`wXys0^E&=reD>e%;}@4%WPQbyzG)pO9w;_MU??@B z;?g8mL)ClN+X4lm`rBA<{gs#L)`MI-t=ulYF+}){Q_|8A z$>1usqT#D4_Y{xC?T+f+mB_j$KC#1FnchE$O3^2y+LQ9~76hQ9yr24N?KQzcL*!7c#{JS3@w830eS;V+nUUzHsB zmV5I~@?X2&HZR1>Ypu0;{15CTIEm1tFu&#Gl08bs>X?xleE4I&F=%`!TnE2*=W06o z8R0s&!P$o0$St|NZT{J$kp8(4*FW$7Jf!TFH=bdk;jjxs0UhA;_8eFFbkOvukvk%Xe;XaqcZL@bjVA`ZSD)t5iW+a zJbB9Kb9O31n8J3w7uLNIu&Ydc6i*k;26`|{OITg(--qhuw6ru-0C+l43hwUiRrcSP zy6wM@#I)025zVfa zH-t{?1FJr;Ww7OgXF1c_)MbATITwNSLUgv_5pr~d&f$1};}siCFgPbOmT&V@rxmPfsVTbY5VPj4yk9 zF*;&D>->{k#_`JSv&)lDc!uuF|8a)lDW!P^cqY6Wx^3AZXvH>vCElMOEwTCvp{rn! zE3&*o<>}*N1+*^^hpu4XWnmH?O1{YJd&u`lc}49o2(xNoOT{`xY_MfcwyJyvi*%MHNr0Eq*; za9O?z!%e!-5@I!sfUqz;x{oKkod5e=neHx+O7%E`bmr z6|VW>yfS}b_wR!k6SQE^2CNk(kz&s+O99gwD%g00$HsOfU9kdh=mg2huEaw;0^Epy z9&_(AuOR2X05IbKwu0U>0PGptBCCuVn7R)sX|ECz+IL@vVh5@G`>=XJ*Zr&Hfd%^A z$hjC0PIWO)|DTWal>!wr|9xEf*4f?d-rL>1I)tW1`v3Eo$5`#@?tcC9e~$Ep-EO-n ziqyu&hEM%}?i(gUu~09Z_+%VZjJ1so?*E>b?vF<}p&fb|c*> zqg$f?Lb z&Ba6MFjS%2JRu=r-|+C&pEK#n$=665HBtSjcC4g6_8Ytb8zQ2jiID1;&O#m7RJ{7m z-Mg-zb4Rb|Tl@{hSlrmj;|uuR$bnRG(x0L~ui|fP?lYI{b(CW6)RR8k+e*1E#$9{% z1bc)P%U_s9-YQ*~H?ygK4$wBPpbQ%K?eXaYdPPM=S#M}*otvu=g{qme;h)4s(POUM_y9*LG0gK|vq44n zae9LSYlu~Y_LdAG5fKo4)G${ZEWZI{8q64bNx)^0zBg3CJj7KnlrN>g^b`^my(2O1 zG06#%kVpiAM$t3DNri-r}mniCx;ie9Vm89&3YEwZn9i;9ho4uNS2x*&o& zm5nljoQ@8f3F3PKGWPmO3321R*-OM8RgU3;!?w=--2m0g&BL?PsD9r-1H^jx_#v_$ zsc2MPlY3>GsYMu!$I4JF1NMoH*<`L#>6Z~{^_km|{X*jhaI?q9H+G{ogY=DA8t-&= zb{19DIy-p7(M%*sdkB6xKVA{+jiwjH1=YctIAqVjY=>9(FgY1XcEd>GQIbUYVAQ3i zr1;i_b>%1Cw!_H3siieNbb~i{nIMqup>l@y?BZKzRRF30%txVs3qkj7!^FZ0lkV=Q z=O&tyM_q-HwlwPUh$tW(4BM>hKT0z{^1vl#77`MIq}mRONE&=LfTE6)qDS^HM?4CW0d<&-Pt4cPx?{&`#&ycQ{kQoh1+WY|ydz zCZ_Y)MHb5(FCc8~a6Js;^!sZywL_x|$q@$i402mP%iUw&aN)~;SB8I_3Nyhj zeUQMghxtKz*tBE$Yya_I-dWEOarf+PTZR~exye3E7sM}a5aYf#rG2kT*$2+Uy>&y3Zu6_(%w&m`}byHgt#d_Owfiuy!6Q-6NeaSc9AGB!Ekw>PV zDI))?Wxf1?vkX$c_1kCl&5Z1y*WU9>ONv=n%%Jn0Aj8^a_4POBp8@;l5!-g=ip#Hx zw|Xk9+HFxL)Uf{LjoAjjTx;$%XB_Ynu;TOQZHr)V;Or?DX9h0~YMCg)P@OR64O@d5 zgST~r@U^hxK@5@x=Q24M-k5QEw)HM*bQJ1ltZ#2y0*u!N3x@fO0<-P1eXkw+ZX5G? zucyhDW#^NE)CfRxN7sQ>*^D}QyW{9%@0m2h8_~X3UlMjJYQv*PSLHC z+Gez%PGXB!7jTu|87_w7Yu5DKXI!!I@Tmy?2j9cyfA*>Tt|oS^SnRIuPS#!DRo;6X zFIi~7=dH?U!TKOP1-KB`@rJu;&&EYwYx{ER*$U?KR^Dm3eyf=H~qXBR&V$dzMOv1D-s-4>~hmBIBuy~hikmcPYC0`eun9T{g&@{cU+z_eQlEAghhrLNnqa>HuKao ze1CB4$o4ZTQWImB^qR~qHmx-~V3B_D;^}IxobQ`oXh;RGIrmjfO7>{ex5J=i0xJ6$ zHi#Xo)nQnyfAqS6p8MK&1!r!ZPtx7hr~GwBsC#~Q@I1?0riSCzbBw!>{j`e^+aeFl zpGOon9sZ)W@7}3d79G;XQt{;*thUWq_mWGl{#$Db(w?`GopFQxtaFkwf8-##6&IaV5xB-#bN%SX zKt^D0pFVLTlRPK5Gy#<_(PkxI+7SYKff8L zg((jon>i1+B^$4)04JLXC%*uj8K0#IuZfU3H@AsEbv4o^=KrsmiQmu#v4z;U{+~62 z5b)~}@Db?7k!U=#d{bYoA+RIX_19~!A;5Bg$?Hc6t@)FL%~si#wfNP&xDhPu=hiQk zUl+fBYhyFvKeQ8kF;DytnnG=X{Av~R^>;QFyQ)j7m>1=qs$PTSQ%z0n66O?&DR%a@ zqKDH%c=B4ZaB(=*w(o&g=*n%|6;=wLnBzYOZ|mh4c%Va>5FPtL%jqc8^-|ZP@6hrq zP_%^nMi4t^ozz8XV~x*t%D2tq(2!6ENt_VRY~jA!{UBMkZ7!tkHhe$joSB2B3N;7$ zXuTBIenFzm7psCREU+iqTBfH*DxQnTq3Lu60~&tJv}S{ZVvLTl3{jlZ)e~Q8bb))< zt6m+~?%dQZ4H?&|?29mRA7zNW)EJopH1(sR8$a&o;9oQ~HLZ(MjoBhNiBhS4(9>&n zWVEY+zop<6w#99;W%+y@ZGmjUz}~xGxh`~W1w78)3%5GFM6I6g4G!|kQ7PBEnq3Cm zAE^jP{4HjyGU$d))r8mr&^mjT8J*NWEb$eXqdz)d5*jh=d2Yrl2mEGWfQr-u;x*0> zQqK5ch-OOWNJ>3&97w+NpOI2_md%o$y+WxNy%6wf+Qoup;YfwvN~FY=YfRTOPkm|X zccN#(J6#o|%SYBZBe#Dw7ZS&)C zf01hT!#25txw+6#Re73;yUl>RUf9mV>%v7J+f-fMhdOhN*IaeOsGKtaSq zTD>8c?;bL8KULi@53hJm7K_lobo0A+dLQ$>DWg>Hn~XkH#H-X17t~B^xSMvfUi5K& zmWaoXy@ke8lni*5-fT!i|4~5$={hcO)#ZcL#p}5`XY2WRe<_hB@6*T(aKAOsSK3G< zp%OcpU4DdTkBLj9n{$$vaaZm+>QrAFq|H_*5+VDf@MSFXfse3dx-@e9{CT&l+aLGJ zR1H1P5>asznyOkhewgEw5pjLUrl}C7j9{k z@vzs&BQqR!Iul|g`_>CIERAxh3QznF#iqE}2Z`2%II4Jhvq9NKzEC?geR*Q|qvhC* zyhdw~C}S7(8X|ea+Ou zelf@o;`HzByTV+fB1|Tc3dy}c&48BcS+bEqesL#Y3gc(&!mUAU7?~o9K$0;IkE%zw zLxj>%C#LG_{Ir{?SSS&I(10czXs8d-t}DrXzL4Kdj>Hu%S0v@MtD!igU|EoC z#n_Y5Bc;HDgxJ={m)0>)E_+*C6VWbLcrcp^rNlP9}Uhwg9;C@%&==v^W*zz># zoXb-*JJe$KvF&on=McGbG^Ci;jFz5VP9KTc_F#e5EaXnqi4yyj2}vWX?%ColyPjw} zC*WtHo>?*+|E=P7Y384(mz}HObx9QVbSbNrzO~)s-X<>YzJr}c@ZMSm>X8x`nF|7C zZZT87Cwa=?0(&3XADmuLz!V{6h;azU3{Vqo{j|_U8@sMhY(|K{0Vqy=75NngT)%{I zAy-47h{ZH6PS{AHoX#vkiOG0CV*-#8VTgRPwUrnc7|!Y~uZwg1j{jWJ!FeA*86noP@`o9grl#ntuF98`LdreR8u~j(R_e z3}J297tmo1x^klIDsVYTBnF;aSq_-xnim~ce)WCO^4L6=$t&}CKZyVVMT(;9b&4c= zB=Mrh`masQi0ZPGJ{kD!8V|TP*Uh`mW{*4P)4|e1YTt*`JdOSD){61^{J5}Gh_#Os zhT6*Lt(}>W?{i=rLs2a9Qj|C|!14-L;?8Ms+T&nhd-7tB^|!qQaF_u}fux~E+D-^T z9PMW+zLP`v{RBDlF6R8R+}sLWC{fdkds~n8Uu`GqdLw!{StVRwqqg2xjbPitjdbGT z8)RsSZy7{PP4(?o-_;wO7D^WgaXdaG$GU%+JMTrT+&#E5SUQ*n+``+0o~h<5)$So4 zoq<+Q{Gb#CIV$yY#bI!GT1emhU@_czVkT?hzJ z591d>FP}MKLiIpi9IajKZd}fi31~?ujEL4vm-Y7#$zAm@#Q6N3P*f=T`1$<&JS;41 zML|(<@e?bwyXTWOhOBS~Qwt@Gi9=KTc3SOw2TEi=9_ICby2xvLaQE&dOuoxxVWY|# z7%xAZb#l>hxHncCP z)cB7|=vO}fIc>k=ddaU^-90ea)o9!hEgiVcX-Eq$^ssjxz=))nEDaD>>y?u6twAcJ zAUYd)vqsCQQz2B!8vus90FiN82$VjB*05Yn7(qC%U zT1q(=wO+0i_Wi>3^S<)6rJ3LORZu`CP?8N;IOyIn1N)jveVqxJ%DBt^_RER$;!D&D z)6}u3;}%3l9HOo}ABp@TQED1y1ejSzuXD@kIrl1D;G?dPX(8u-0+8Vb*v#1~j8&W2 zN44)Ba^b!Cj;TTMt5Ed~pg!4?adgH;cU5dfp`)y?IBRbVV`w+rZK%l!#Yj&vKtzfjwW^kYL?ChTopscn@wJQ$gwxw6P+6MoC#(Z;JA0pLMmeX17_G z+i@MDg9ewBloWstn3Dr#)zyTMA4FsU&wpdD=s+r$Do!Gk#~ysZEo1Ytp%aiesDG}O z>kq>OH|L<=O2Z)_<{Z*4A;7MiUJD-Ilr%$Q{lyu!fuMioW@LMN>+QcPp+AE78QJO2SAMJtlUj55;vZonH0SI~fP3 z8fY3i{k(ZG*ONxWE;DUuxO%`;*N(6v!rmf{t~fVq)v}MX`5}PIAS)6XlNhPz-y!In zh#|IsUG{@7=&o8J7qduT$2=Jmo-7_3OqpM`z4l(%3l-{NANc!2%Thq!^e>^9XAgrN z6sw{|MMYSUgSDPW_V6f40uoTmeXyZ!OHKH^%npvoZ{ix9A}u0^B4NRO*tHZ>qs`7g zZsRg(SehLQO7@zPvloNbPrX22Tayd{D*dqNQSZ~h2!7LU*7f>CqWyTg<9!oxNK^yl zdY9t&QFwNnju;6Ep@-N49!YsumF=p4mJC&NBasW_u6wKT8ECk!Xe4ia$QTRr?~QNW zPD&s4kh(aJ)XSjG@mxL^c4$aby8)x4D*6ph0hs2_T!XEK4u`#<3`c+4mIpvuv-mug zUgJl0S9hA+fhI{!H?SnIY-7djyd_W>F@UpX${Y)cMYELs$9OF3*t{SMH=?qBi}p1ubz*U~ zj{*|Z);fZqjqz_cGK4e)@T%^#xLn&U-Xd;NcTPv6eDc@_S95==-ivSqKnFkr*2zh| zB)_%>o~Mh4#Hu?wuT^&l0W3?8dQK47eMezM9}Yps!dylI8N1vo`6s|A`j3HM zmp1=vK+mp9k>Ss@3oI;B2SSX%$&Gc2-sik{5P=EVML;79CEF4#i|-Ce{aP!`q|Ysj z0A=N7&bGA1dt74Z9wtN!Zh4P!fdUDC&xwLH?67fNgl}+pb4oTNn-g}ff*&LUG;A`gu)|?>Dx1!uWRSx5MZgoq)Qz4Ru5wZ z=ulIOgTE2cRdSzCmm`5v+qJ7aIQ&!{E|QXggkwUSyuS-c-(&i?{vLCL-f4c${A!Z6 zNZ6L4PeA70-NWvXo3o5nWi!FZ__5b!^8PUcA%&VqlZ2@&Zr&yCgD?xjVU__}W6g$W zbv~Zt3bGRwKdPHTW^jdJQltd%L3Jj=^n9!l^bwE9ppQnMc<#q&B?D3#Kw^-e8so~Bl8lVkjLf)_xY69`QD3(NASqYh7R4cO$X>`M zPJVr0OkFhlXp1rvG^pa^#)CkAAE0mk@B9WzKtkxbG=#Vw4H9)#vcuTLDG$j;c>nJW zk2+*C518h`st#Efl>TWHIU0dQK=Q!ACd|%6Ii|;#`yziF*C7e`6<-#2--aYXbiLcN zs_A){EX&We+7OBV6LH-{WNnR>RRlZ7`?muUt4C1l2qt*u=n&vb0W6|f3h{UF1oC$0 z3&%p7%y7PitrOH3(8}yJSD3##ea;76zWKfMmII7(Fc3t$IES+!Zy#cIT)}8OWO?=U zO37U?+w(Ba5`czEG;Hr^xqsPdJccZ#6S25l^82b2I;?+EHE%iTXJkwo6T&m&Oh8yL zK3$-KNF2S_hsmzdVnXdv3LhcbyWblm8^R;;))5-;j>M4l_){fTh9HL-Ev)Q}5m6Lf z78Ngg%;Or4BrqLrmAwTEeq_lhUP@9MAap1j=y_Pl0Xg4Dg;x20m?59PHF!Tm5GF#p zYfohqyouxR4W)dxsWTJeB*H4bEtOW)coz@@T5Zs#7&x^bEgcG^N*qP-pb9sinpxS~ z3RwP|sWb~wOkpi@`7!c3rWFM?ze>+-=gwW0btFcCw`O|lK32EA?7dqGrA951%A_b; z7U?Sn(wlXr?6yw5l9ZXl`Z#OG;;8xHb<6Zwz`C=vVD#>ysvSuy$cA@qAmL))0C{cO!E#bH_Z>#%aj>9EW@a1JA&J`-=ndyv{2Q?G{hxvr4nRAB(es z?t9v+ptsBuimBGJX?eBK>)WX!1OHip7X>_IxU=6$?u7aj_)5Z3TT`L(o6UYlTamF-b#_pR(?b`)22Q&nkG_TCQSmD>VKD~NzlTObV7BvWR zCkuB4A0p9v)=ZXz=xGhcFUkHpxxY0zqwal_%mwELNC`;@splzKFeXe?1Kl>y0V!>L z39G%){Q4a|ByY`%+~CZT3Zwi_wfj#|_}M;%?->i9+p1GGrDsva!U|60;L-)gPDoJm zN16lU?m1B^3@3`YA8+%UWrIum-^U)vm_r)KU@Q<7<*Qo|L_&D($PO5{Qup-Gr?Bd% zd)!?)Cztl8spwNm`0H<$C~5$&%m`h^d2isZSy-JsSEl}!4fEfcjWkrX-a7r6o6w`c zfe);|saX+O)gh$IJetD^E%vChYenv*0t1*2Hgw$P2<+T9_EIv4;aHskzu$Kze7af= zSQukaO!=$)9IsAc<00_a*d)fGyWTxn%7p#d`BXM zcXGVCGqL))ObvgW4ANx%_no#JigAwJL~1Ff6Ge87moJZjrc}kcH4~^or)z=L##BV) z>>78B`b?nVh%SNb3At4Ul;HVd{i-SL}b%6yIhRdJj z*8AHM%9?0YQH+TPlejp0IQ6F~QVMd$ao}6TAWPL=4s1~15fxSF*6OC25*Eon=JzaR zPiy(RqFpZu^vyBcUNENmR`$wBKd%2sta_d2!vF@M14Q3iSQ>omuZ(8#Qkw%R@U6rc zSG)(%2r#%;lZdXk82f#EogBfALd+xZNTiO7#7s~RWHfR(7GR8bG!RPYxjT`^_bIwA zkrn^yCm&seM9al7(CLCOD1YkUpXN^Ww0hru7?$iX@=;tCoEpiAtnHUr9Dma*PeK@n z@xavvo5QoCuZewSkfW9?cn<0jpKtACjtDS!fD9>*xyYfhl=`1gDq-jmkkE7AVdZd` z|2zo7PL4J(iX%eI!NvX9Mv2pNP8m-`rr1nM&v`dW17%CwW9Lim@2@@0q~nKN{SM%C zMnz_2*XL-W;a1oag@-jmTm|tMkyc%tE6oQIgspbXg9Sf9ygj-@p2dHswoe3{f`sbt z8M9YClcIY=?WtePIr4sWH4levntp&6aCj#4!Wgvc}RUH!JXJ*$|1MF zTsuB&w_+jw4CS(8?cofCRl4qnX=}!QPN;=d5X~JUdoR_O=Kd8y6*2GiE;eTqS@RZw zImT6#cwcekh`H~elr`L_!+}0v@qbdKf0*Bc8tS(X4pGe~v`Zd6V#SW5&Bh2bYD-i5eFQXsdg6 z4lXD}85!b~Vc&<+Km?K|o{Jr)CX*z0OV-xHdVA1?x=1clQnLaW%c%z*+EmJ!j>(O! zYnlR<+p11u$xBC{AJnb5P`Y@nPJV7;mNP~om$jqf==wW3fQxvA0Btw@{6+%OfB~x( z@i-X1Py_5g9K~Eaik1Nz z8|9>VT9SS35Z?zDpUn*_W*sInAb!Em^1nJ1albzRb5n>;S0KB>TLE-%Y07tLEp)3< z8Gl78x_Mh{;kC1n2S;%CihjSB#g&%goqCmbbhO>A3@c9O-a_C4eu7Te2BX0gN(6IQ zU74TjMtjowjY)g6A#GAy488;D%I)EKSCK{6rx`f_@N0a>nu`LGrc|<8i;H`I{Dfqg zN0;L{ACq;7Ug+VTW%o_3;`)C5c-_RAjtOMP z^EwB07klER59nAhg0OoY?S*)|>tbA~(9(>*5wDTrTd`;+E6iculcToOiTyPC8|@HZ zwfJWL8vDSb#oXvv&#KO|yC>A@63mzZG%Jdqd~>7wIaH7LrS0C^mxp`8vqyKpMW+81 zSS9FKdSj7QE}>UAU2ODV{J6fF%{5rr3H^3AAKTxLN6(2Ejal*Wk;;r1YNv#A#jkSt z0&B$sN2-^V12cCDJ$4A;`7>>JFll=KBILl8hI?@P4`XJ)y5KX`?QgBubb6@3N?)Em zVep|pjMYONoypU(?*QJ#XTRUGRW^2bwYZBr$9`1IUWK)`h#N#L-$3>!YhjUEtY>rGo8W3jR0~{tp%=yP!SC!s938T3k>ThL#p_PWA0RLtz$iN|hA-bYRD1lhYsft8aN#Te@AOqY^d}4IfbUOs zb#H%+npAU=w~qOhas?rprzn|D0Fn&N2?Mn5wIP5DbGD+G2U8|^1$Cmy5U{X!IA3w~ zQ)G<+Vk9^}17>lK9sWw8Y-8gLs(4bb@Yup=16EP`*m?a|M=rc?LfL&?|J^M=wE0bU zQBw(Co`vuH5b&#{SYd|m%mWghdj(lJB0hJDhx=l?_Q!5Tt&dm+&Z8#AX=!-6i3Dj) zmQwExG9dnlD=#6D`(cqxi`J*;5H5(O5CPj0%kH>O#C}T*&hYo!L$7w`mz%VvmKD2 zaz*Cw9DmnSgK8J`^7L>QyTfgX>+1H_(;vl$^B%tr@|34pv*D%wlx21$KUhYEt|Tqbqfbj7W*J=D2ndPo7Ne?tbf)Wslfr#n_vuD z&Pq$}prJFIqL#I)(~buhz~@22M`hkeIdAgo0k9UGYIHwokg#ypt??i#kvEWkJHkRO zZpBSz&?aiQ==JYzM2nRZ4aqmw%!ilm=DR9x4&Ye8GU_$_C)iqhCj%eM)&*mpK|W$r zuOKv_!aPihM(~I*P>RUwa6a@K@Y#?&*h2ip-4{5tZcA7`K{P5F#O>Llb%Zuk3ls|0 z5E|eGe4Wa9>-bzZ9z4(t4Q9oT&DB+trkz$!s`2shEt|5uxJ>E*VXDzlT#r68yN6&A z;DayFz$+mdVnUi7-xs?T`#^<1IJWS5cWQr4yU*`&(M5K_0(H&DHngqf^hQxy&t8U<9|b=Xw=8q6~PIFy@>j4a3&;K@nT(__z1M zeek@nQsaA>{r=*9xr-TC4UJZf^?q*lr}!hEPaa3AFj2B=ZKL)3Bd@OBKy=)5_&2yt_7*C*%)s?3oBAexyt(BiDXBV{65~`JIUm5BWw^ap z`FOK-WyNZH5hM;zM@b zxWG@clbYx^$#v&fA-&>FfAqTmte7pgG|Z^Ogjvg|!#|$CJ@I&{-iT5ezUe=!9PqgJAhONyaBp64Xzz2K~A|H>wjFTf&s2FNs<45*RwQjFX;T zq)v`YjvLrZ7uMIsawLt|G_j44jz8wkxiS6+ODksCuWAa8>F^|;XMj^}pH9X{I+UP7 zd&>6Tt`TM2m;FP{fm`mRm{=H{Uxjk5MXg2A$YW`!aLZ|)pV;V&8GA~><8Nd1iIX|- z(6S6AuILPQ;}j-#R6glC=1uHQinNJp$ZCD{=?=f9=j_xr#zT68*B#YS8Aij>5UY?! zaVEEdj+8*5H8$dMaRo#@ZyY0u{#5#11kY}MQoxrVFIc6b(~6e<$wGtwL|XM2rj#;A zzTAHC-is32(!lE&Gl57ae{lMu(7&LUWj1GnOFg#xy_*Y3qpTOLVF+)%{C`UZ=a^uW z5uN_4AEF~~_9n`%<6`02=C+Du8&*;}Iv2vW5gmI#f&ixRk}C&3U=I9n*fwFcjd5!1 z|4vSX^kpDaNfM+S2~(P3)Ah^5yBIA#pFNf5By1zP^-k_{2ZAPwWGmVPe?^T&78wye0 zX2*L2;347jb`M_FK#uXG+tmxlcThy_;Wv|~93EQ@f01;`%Ew-Fu?sJX>~}Y`&aaib zwtUC3Weng#7Jyhc!i(yG=UDp*FdDQ#nn0A-s#0Djtxy@b*Lznr%|Aq5I`R`s$74!S zY^Uef^gS}0o_SeFIv;;DAD+t!FTIx?E~G#MCh#y<94|%BFAjXNy+v5!<{1J&roTbL zwk(Q63MC;`k9GB)3zcF`5dS=XBl1IdYkr!QEhZxAWATIodcdycQaAr2 z?N#sGwa3-EFIZXs*F0@dHiJc*P<@9MOv=(*%@S7bSE06|_*7|+qm2Xubd{10w+J?Il z#jy^AC-+;ewM?O%1_lYSobjszw2BTCaR z(Jy1`|4;(0HV{28LH77h4>gmq*DE3hf#QKio-cE=c!I*1I4)W;9;*Mo3M``7H(3J5 z9ELYNFC_Zq;zcx)Z|gH08!Xl2ml!=HPL&M$5SnsZg1)X=`}=&M;Ou&BZ^IJtBx;>; z*>BwPB+TgV6m?PH6?$Z66hhRsQC75_nizuWV(NZb_=14i*xc&^~n zziAeK*Gz*XtgU5ETy=5c&vlNtF=guZxh>{bD9d(19DnXm)3`5Kbcq>aE8)H zz|6uUlXcZ#nDXC40N_au%PhqO?0v_y_W$6Zya^_wLwT_zc8#Ajw`vo+ugQFLFc9lB z(TN>~C*SWWE?GXkKE%-;tiadmqibYD-FA1PsPDCzj2GEsV#9%NMoaRV<8w__<-s6B zfjJtb#dA%`xRODbE5r32o2zYEEs9cLPu zdT(neZJdi~L1gs;8P7rDgX&c+4d#rdY`eA!dCsCX>H3Knk&$I3u>Jj>(%< z4fpQ0>&q$AiU#L927#jV6ftvT>JsGPBv;rMPZ8z)r2WtWnBcf43S76iM5;&X=Hs(} zAFx+^ZHfM@saNDWy++5TR@c!9pPSQVQR9mL{{1BuHum?rI%0Ww`JX?3(tKZK%nDkx zK5!HJQQcTi1din*6<^YM5{TU7j8vM*zq9`S}&qz}L)jUWj^=XN%VhoL|3O z3KEFS(czrwN=<;j>lM9D=dBZ#t2uIcH7;!5khKQ>vDt)y^NjJ?lEgU|NEka?zdNN5 z?yiDnu3#yY{e$CD5hrPd?KC?`QezFx?b(DXh`SJMY;MNm8|2p&cjR3rz>e5QMn;_s`LS?dkece62hGMxgz`GPz$oE;>-7)Rn14kN;MSx zi0}Avd*}O>GHPt&iBkg?y7!J>U<3_7V>%rEx=!i6Xl}lNKtQyNfIJ!{$M<9)-ykwS zpWfWuJnHa0DHh7B=NP>F{JJlE_GY*sAXG>D0thnTIWg=M7ZVfXIaxCPVGCEh$sJMs z)3YuuE~4w^zSucyj>aUU?qx%*(;;x=DMLWIv?>PiaPYIv`}|`L8#Ca$0NK&NH3w6V zP6>;S#q{}W0WONjldW~|yi|CzD+$O&rR` z`7MgZ+*E_L4Y7_{`r(^>xn&A!>S9L4E0n}|cTUlKq7>uZOUov(Nch2ajP2K}T1Y)> zqsd?cMx|u1wAZQgPyz)FL0E6jvW6P~@g_8Q%m&L8^*fv z`0y~=b+stPyq}{yi~fQcSxx4}@n(Hhqq(D`u((gGOjq~QWsH(XdsS!&k684J`!C9j zbOq|?$uMJO-ulHpc#)NX*9W;nV?hFv)YLN9rs!a6p{cP}%EO$S?kY)sGAE#|76atg zM8O_|bEWIHdf|LnWMtPbjp8REfs${R@tO;w(kyC{*B?__`0=Nbb ze%))X(F$-4F*tL{cjs0WPaa*5|8lPiKK!WxxW&Vqu-kutv>`;Ye3%G!%|svn zT*Bfe;dqzZa=jj~jFO0;904M{?g4qSvAM1H#fKJOl|n&$y%*l{Qn|nRawq>Nt2RNdj!|mPn+|)a; zhbC`=qK2cT`H@qn)8k0Hni$ekuQU?%BOBW`U^S|tLd#l}m;A4oK=EIb`EBRd>-NR2 z%uU0s^z3$+`vwh82yegRZEkLYNB4QgU0wZ;=lp8A+83J6&y|H!)&=<7+`$><0Q~^- zp4cOh^FpNA-|MR;E%9|}!s@`z*8Z0<17V*PUq4h>j6_aqHl-Mo1fALWT_6j0!g}g( z%}BcN?S=Y2CUw`>*BYyTTfUH~h*8ub=KZK%QqT`W%9UU1)PzQvaFRLwJRtoj%%}N$ z?vXt*=8E~p?_^WIRRuG%yyONv3?L-2JERms)@9ARcD6n7+nV?1&x%{Uu%AE6d(E7j z;;>ZkOahap3lQXt8x(7JX;;%XU8=;ze3u5XO^xL&{_T9o9#&S>-`o`k^nd^ah%8G6&Xun5-4g)XR=sN;RNY76%6QTE!bjzy9XJ#_ z?{X~Daa!Mrcw9Zb_Sb87y}-$;C0Srgm5y}K7dd2#arb>_hVKphQnY{PY9aguI`Mh{ z<6#vHL6;C$xFD5np9JW4o=gy-bYSaZv>OA9^CQu6Pg6p&W-Y)z8f_U#+rk2tOObq< z!A5%4jvvYy6`<29)+I5U%>~2FUe1h>E_37zWO8a1D`bvHcmB6TNod>(Pts2eXH&-L?;I)U!ShZ4_E;IfGdx^h`nlWeRYU zFW6wu6bI`TummP(%_c?m_`5^yL59YzSnfg$?0YYGi1Q6HHI0cX_FuJ`u9Zpa>SGub zxxat)TqPXSr!NZG2EMtegKQ@fQJ$u4%<=klc$6xh2~yulXg|gQU2OEIkuVeRhoo@8 zoOinBZ11GU${l3d{d8fU82i6z0l|{T(e?6&O;Z;jb*x$#yNGxHsnk)@I=w}dZzMkH z!;`QM3LGq;cg#lRR#X2DC1sA-_I}*qJ!X{nBt%@u>RzlN*D3tNTIUop^CEi3@1Iwn z1cY=6l(mYngMxx)+LxQC6s4s@{+lpJ*1^fOZ*Oi+j}3VfjE|D{o8kYSuJ^1sW^{PHWU4noi6%2k63UQF;lU zS%=NpC%Jmj`i`mfT8DKg9p@vz=i>RNA)fiioN@C%*PY@Z#Jg4`AYQN6bM<4AXj=Kw zU+1F~t$~FK23BJDR`q3w^d6Wp-fL-p(%ZOcUi|i)bTkYTl(i?12)trvB;HhvRm^f7 zzDBpPmqx_@oLIHJW`0q-$+gJ9d3Z8&X8_?qP8O-4V04Xueg z+)uvAoN*{s9x)f%=K6vZf@WQ>!2*2)V~gAN|rT2-6SP2 zEmY9=8%tJHEU&w~6KPiAKRd(Cy3}0uM%A!y6Fww)Xnt&{H)#5sj^D#G?=idBdbKpI zRZ4<(HSzFIN;<4xdQfNBd+`471wxz~Xu8@lR}4G_!sa*KgP4^|m&{?eh2o(Kml|v- zxqlIh*8tDaJqIPXz0Cra((bMqE<)t~h+GC&qS%N?gJyRfWE1$-mM%IXC__Jl-NCR; zbIoKgEgZ31Ei1~&{IKWU&w~o{MP_-9&h**TkiT$b3MQ3I$#+2vCMy2^;>2va&((7T z*4xobyd+`poPtUufP-xMDRB|a`-A;y_MG+Tw(Y1kXEQ`7 z*n&`MyMOKL?l4!o^vPv;_GX{F)FHuIJ|Z?bX`{e!U5UaJA04Z(sGKffwGnLwk-9M3 zZPV{fbr2ULC{Yb83T&{aJ;i)=@Guj8$?crlMTS6dux4s)-LIg}3i59!Z5!MaKuAmI zA(V+vvpPCsx_q(x{lu%I_x~R8Jc#8BjOUsoTJq?(MRMRBNqhL(&yxF;w_bE~V75Mc z$G7xPFX|)h>1Jbl`(xB}#N0U!*5n-slj6?#*bmj0HN2%ImKB;%F%Q-zew~c=Z!lAa z)McSRp6)Ozj$wfq;;#sZQ6wOCkvVfM9`tsb70z#hYC2=ky1bJH2CDl_Iw5qUVUZxA zcClHXQoD>fSN@IXY4#;0C#&s+6cc8{ACgE;Ld;c61v&&Ut~^~JWlr6m)k%l$3S)Q35{x){}{6sg8V_ayqygLU>2 z8ELFEcJ{!Qytl>tr3yK&;lEhfkz3VYFiBahbgOPD`49dz&RL7!HtWU3bSM6f`~035 zlZ%PX+8uIvf{$C`m4B7h-cDrQj`7X=?61z3HPUjwWpycN9j0%LDyt~M-_{`@EyIM8 z$%|2ZMtn#6TrWJboTI|M+Eqheu$pj9$!9e}n-!>g3fCMAZ2L8wSBF)?c=qungZqVh zUAnFBeKKCFx-{F*{~fNgpZDiC5z~TzS-75b_OaEsl1$|kO4#>@>)N~Nbed2iB*0gmX2LL6!g-4Jw4r|VFntgKNc39G{Ss8A1D%#OyCg`27%FU zRAgj07oKb^Rn}*ZE{&I;S6~PPBTf_v*fiW!os?*s&H878Tn)LT?{y@oL zmp?fuERp2UKXV2Q&;{=IEV>f)|-YBxpH zKP+;OWuLOPeTl;ZkxA>zOLmsmzw9*UrWb7lgw@}A82*4+o7y~tzIwBpzbmIdGjwEr zICJh&?$j*S*=Ah9#J*?YS>>@en9Q>15S!M}uUh8~=ua=AjsB>c{FQ4V7w*<};-z3m zph?75?H#i&_}5K9<$AVzL)zcP{LV`Ajph;rYt813q;0bjFxqAanZ(z8pSpG zdxG!_aS!>adzY$hKb>W-^~d;*(xYQvcA=Paas*za>0{I8ma=$rM*?Za;pi<&(y!1j zkIT)#qubd{O0<^mJ6dA-MH@Y4;(>pIpQE%3=`LR}&4O^zCB(cdVe<9LJhnoBb6M@6 z0+y6wu0H747E0vw8&vJ>OOr{%qM}?ueRrv*bzY^~KKUr6jJBb<`?q06$4YG5OH{wz zSWMwh`yjPJVI*{fzv2 zrNg4|23)nBe{gK9ugPtfF}klnG4#>N^}Whu(F_xAl|<+|^pHat@eaKNh5(SnFiPOVlY1*A+z9AGM@ z?`v!VuL>lgng07#g*(K#u*5ToQ5CFcD%l8@3nY*$$R%xQ>M2~GavQ2IcFd0DIX)o< zT*fR?d+4ZI-56Y7dwYB3lk2t0^lh}TW-#!5Iy;Ce-_8`inw;C*l3FJt)ybQ5L8PL# zwKNLVOId)P3=ag4`Ajg3>spGnyD z!TSOG1D){GO6zgjCqUvAD{Df_Lg;94vIvPt!&&5t$<~?-tmi^7scNGmjjVm zF@}!^p#{t9r`Hbf;FK^adQM6jZkK02{re+0u^FOYTMau;J4@CfBOWy>?2D+D~dh}x;X9O)lMb#L=h&GHg z05op*sWR}``UZ0gW*W|97Jwd)|FV*&(zouPL&(Qg4YaYva}#h8~ylEQN9{^ z3N&~#Y?fq$dy5aA5`t-+_qse@q(J}|`}+w(two=%bgvl0Y zfOo+Of1g=ed3m}|PVu3L*78F@UZ6MRD6+Y|j$MtNRY{tj(=d5u8Z0Ef6g!O-lqa3f-Th%Nq;k+8X~1Dp?`oa&iFcX49|) zWCgNU`zX<1J^E*<{#VfJ*R!Ccd+Yrm!WpG}rxY!dSNYk3nS%p-IyXOG_}|lp-oS;% z{)l?^Odk;9%E?;BPWvU06=83-?- z;!+_EHHlNP4y~6t@Re?<0As6tX^mFmN@3IjQB_?Fr4(Yd9-#R*U1#~EZ*Ku z=ZL5+Zm1O;MwwrCzG!d1EO0cao+-@=6yay(&}*)^GSpg{m=JJX?NdGUoKssshTPqZ zVlO8GVLeol&%(7SH(&8+33j0-)l!QV&?OrXfZP)Masls zYJ++l%mCdrUQ~D=ocu}F?CkhzhQ`$PjVXUVDk@4!ZF~c|+R^a_gbe@gG=c_87ai3q z=H`Kii9Au2*j$UU{eXfaPj0;Zp&C=*)CWS}(wp~m?FGc@>b>ox^} z?D%*SE&aW@T1=UBt&ScLYyc{Sr$7c?#-lN4i}_sB$A6zHI_?San{jtSjp5If>XRh7 znKUBW*ww<#HT#AsOQB*q-|=51rZ`H?Y|Zq1Z!-?9$h*EetjCm9x5hf5|M#a_LEkIR zCE(F7Q^W%Y1hzH#OhZFMe@{#VfgNkB_m|6kt6g78xn-imBc*{z;t=I?2OlTOK5ou0 z^%+UCd*^~l6w{-(1A`HruRnC(uhzz1INV+x9lCnA&Lxfw%B67lo&tx97ySlCdUOeB zS9Rr)AiOj=q`;H&Fi_uizV*1&%qGEejiEK?2=>o-EhjpPEiH+Cb8{WmP*mj69ARl0 z%HUUuiA)HrSOZMq;O&`ZjOfd!`d-lI`O&X5dtmIRmZ`~E+K}dnwMzAN_3WS;WK|`G zs2e?dC!65pG`&pU`ka@RvDT!2&AEpX0eNA@*t+YfSL)nwlxp8*K`{-HbXyKJmc}-1o1^ge>)hp~~x#j2q`isAGzb^iPS8Q9&%#CO9%a?!R zMdnM)x=scuXZf|Ke==#?&!d}kvv0+9oNaJ$`P^a`!<6H7p74iSzcv31bzkhhPuM3J zJKTBvYq+yoL0PYkQhr%2e27}~d}`=Jqx4e&n5w~RKL`)q&VyYl33I4YSju|nIP+2}5ql*8j(1`}cMle8e(x_& z@IJCOI%-gd_$v6L2o(P~6f&X**p8 z;@yKqkGJnU1e@iz&t$SV=At80EP?w?*?LjdRB6@5BXO`_{F7Eh9TCtCBs+9%Yn7_TECsh-@C&TT(_=k|cX(?^Sj}_6o^P_UOG& zzy9z0`lyd|&U2pUJMM8^*L{Co00~M2e7jZ{O731>o}agTva{EVc$~K9wgt;Df0x`1 zbo7yiPXu9y_VhNuk zBkh;Fko%dP9_?PadbNbJ<3@q$3nevm^#E{wS^4=}Z0oLno2b+%Mj|BD+Gm@XpG}TM}BSNY`#}t0N#L%f$V{f<+q4PsbT+@ zRaJGa>_!h6pQolu7*FQa*E0YM6&DxhCLaPz`O0me4bc>b!267_*oa#`XE(WeO^~q4 zr{`UXcVF8TcXEbfqTY69vk3Fh=9XGoejfVdBz2P`UX~-?42p(-Y-}hvI`VpXdlx*v z64m>$txb-NgM)=VnDd>gyyJ|Fg{`fR?zAl3V6tn2y)>(+-`r|r_39w*S*h=5=7%Vo zO~!%gKi~h1}m9|BNN4cOz(5eyx(=pGmU9DPx9O4)g2?m3{MFu`m%#lcM z3wFGtq*NMFpTv_R9Uj@ls*xT8OY`6;U^m|Q82;8x)scm@3;g5jI;4(%b>yD$a=yXG z^MKVuvB2x4)5}^u=TGOZ@)3!dAPV|#?5De9{g$^q<@HpujZc1W9gcV-e~y4e_p;a- z{Cspnb39HegP;dYclYM{pJB8Lvs7??ev`!SIA*N+;pjoBDtTO(4~-%jQQpN*1Q?fu z(x1k{L~1?TpG5N2Q)##>N54))K%!av#^%%8*N)!vEZjW7Q1o_{le2WZUBv4*a0r|n zTGN%6d7eLie%laKK^Jt>EAdl>q$c|efC)d@7X9_@$BFbbvS8xIDE4R4MSL&SbxAV1 zfM7SPzy27*pTy6pdpy{Mur$Gv?K39}+dNHdXUcPqhu)QHt9 zdwPl@5U_Lx-_p>yKtXU02+3!0aTtNkD4>TsIu!Df2!U#PdF{>`8TQ=8y@oB1iSb_5 zp2a4-)|EOf+rU1P4768msCF1^jf`+1k>1%$EXpW&#Nf17pY`TD8*0+$u;t{ieXRZA zcFDQNdX{FuU^FLR2kcIM^I1*dFZE-jZGkgSin1$$wp|!(hEt>QzJUopjzwXr1gQ9CXU_r!faZ2?%VGv#(q8n8xn>{|0 zfhNOFa&a5<)W!zR&f**@K?pkv04w9-#ip##P$iH-f;Osl;ru|?ww=K0L6tOiPG>AU&$ZX z3a)Y#4hGJIQlk6ph!}2dj)a?v_Em@~FFViO0)W@~ba!;2=_wYV{Thr0nwmkSr2^#C z*s=$ycOyEEPNGhHq&oTM9`{8v)VB(5R|C)jU`pBcuF1?{1z}>1l+R+|smX|td+ii8 zNV@hn8Z@F&e0zv$_2IAJ!Y`|M+~@W(apbzz3EXA~Fq@WyX? z-{7jEVhA)6nb8l9Y2Mgoh_<;y0ont8Alf*yDCSyuRpao0;}eA?1LHe5G$h!NMMg^- z4pch@C8gej7c6)ITkL5}4eyPr4`V@9k_>kXdiR(IdKWVKGva34AmFShX0skTLEiMF z7yw$0Jg)k6VPXm&DRWiv`%-UWQvHdkgeqos$HS~K&}{8TevV`I0Of^Ctb84}WADm) z8FCsCW873%Cx`vmh1QET^| zJzdMdlO6pn&DwIr^E?y(P_|%NA6vI151RSk4zxZ+rWtmHZ=W#_h|7%U* zJ)-xvbmQK3Bfy8F4<3lNSLce--ub2XaGT!+pb;BF$tF{5n#slm zl6u%uR2SIz5a74Misygtb&8FiZsp4M1r_6A4$(%*E<^}a*7A$rSRY^2?h97PyLjJL zs8=aEvnbE;{inTyuLs|h!*4@18*4BAI|c$)yYmyXOPPM_@<&tzzWlQPX}-ioqALl^ zS0bE5bh0}>zAW{<14_GC=(zDPylE|UAiT)37qM~?=@VD*ZyuUpT7B#IdVm^k>hC>S z^xMTgF)2CB^-GZL(%IMkpxDL0K1;zvoq!p5<8_@(AQPiGnnwnWT*B`do4oJpD<7Uo z_hV==MZ1}r@gT)Vh4@l%6EDVAXPL>-QmvW_e9q@pv;|^0z{l2}X^9E`zqV zZzfe~;{WOAxJ3ReG2z~$pP>4@{2rhuRxyTkb8J$j3Mu=Do@9(N)2dVYaQpznw|^h* zX@P``@%;uqN<{g`*%>jh-9#2k_Cuj@3<1WUWKX`~5wW^Igoa%=p*KK#@23lBQVMSB z;(4ZNeoU;3UtR`NDm}Rn?K(T~WlWlsYQBZ2wK*&2X5q%U^?yqz?BUpPf5s?=eb@AZ z0*9X;veeGg{~Y%YX_=EahjWWkr=nHHJb?KrTK_2<#6aJftVQ>v>nNN_OlL+pi=L*K z%g%O_5$}-M5vFFU=+B3^Htc_sYM|1veav&-Uhzu0!9AD#V*RXag3lQK+Kw~?o@DKO z^f@bH?auVvU-AFS>Et|Gf2{T;_3{PHS3eLo{^`UOI9op4)XYHs_pwdqp|Q^9LMedclvQqY&?IhVZSy=@g zS+)nLXi#M%EzKu*n(Bpqe2?8!=3i!NUtDNJj^<3}-(>5#viH%O(C2w=kQDir-=OI4 zZF`k+zV4*!D&2!W#Sc2G>F4^+hr9~$?6^PlfA!NCclNE3Fa9}_7j3Zy z#)ptsJgv#uM*Oew+IP%*Qh&~lDE5EB3k|)GIODowD^L>mN2$p#$S%kZcwldPU~_q= zBl%-(C66+NP*BS_IJHQ-WV)C=a$o$ipy^W7RA-lPL|gF3a~*j?a)R*Je=2a&SVdD_ z9FlZV3!DoA!h~)1LyQhR3hVs(^8?`!>Z z#9A-ldhM=N3yw9EO&>Ax-_8BHcC7G7_1_(>dSD9~4xexRVBqH$5FKmKzAVD=4Y%1+ z;ML5O%ZB4lga8#=7t79f{=q{Zso3YW9vErHMX+J%YH_uqqaW4pD(2B$j5V=YBi!Aw z>b2i&*74K3tAoOiTya7U312LTK*7On+${t(GB9u$T#stdpey_0pmyb@lKcWc)&dy= z!y|VI8^3{**V|4K(g9DkW=<{eP1<pc-E0*U0=NXF6kc75jI)xHR~q_J znx>>oQ?B%~vc&uLFl-a|m9F4-9a+m4Da@?#aKwJ__*E}gjJhJOTBK5BG+B{X82!Cb zKGZT-{jUh*=%}^Mx1MnN7i9Ba>(yY$SI@PPI1xeDFlfZUqItz6Bps0Qa{pvo;HiHG z-TA=FqsZD=dsK{KMmMeXmW$<<6{ei^0#{g{N3`mCWkO85tHt5QLOH;A0GztDy7UU&PL z{{GQV2MGSZyxf%WSs`AIY1r%bD*d;cnGp%o5$@PFtB&pwe)?F|5vQK$JnHYC9(;LU zE~lqn$HggnlP%(T#5sXnIW}DXZ|}S4O*;I*I;elBC_oKJ=RaB$NeUTet#2KVGwThL zo%lLEI`vO|>#xxLM45iVZMI!8HjW(+^vw9cT;l~4_qR+ibw?y9QOC2_A-9}WlzP_I zeq(zVMTb*NEZe=Rd3BGY@ALY`ly45*r&kT3Bv;()54IeX?%e&)E8_8%o)pf!jBKB0 zDa9tUB5WfwTFjjaCE298WJk(lBF)Om%6OHiY>X&c0jofp5Te+A4vW=>A$HNu|hY2)8} zdn}@&wD2j$6Iao9uc)dTdkciipfv@y;P&m?TjSOvBO{PdUlJ7^vu=3<`FU?I(mSxa z8?STC$jHXVM&`~P{Ph8kD?Csz7~A&1sK0in{fopYtx$>ge>Zz(8fg5!)Cu78%k@A;v{Tk|+Hp zaaDM->DBdf_T-sQ@Vnt0&w6x(IyY!2{VV6d_*|Lkp^CF1STUM+4%#i>wCt*{h5NKF}i~Avvy- zwko3~CMN#z^Cv(N+1X|z`FhhaWk(xC=MUX6dMq(OetdxjRczhq@-ut%?1w+wHD6&Y z1(1tVI-3cYh@FfVaeg9a6Y$}LIwd20l`B`A#vZZg95|!au!yNMmS9RRdQT~2 zVPy0x0^I>F+-Rc}(B+Oto^vhdiXzZjYeDP2CR08U$#iO7;~+zx{hC^e?$U+PJMQi` zmU@yG66yow4VB*(6_F$-pGB%JZhL6NWJn{Em1u$d$jJ2#j|46?&Px_Aj^kB2qZu969hC*uTD=b#XH$+p%CLepOvRZfj_q-icul5Y1$uC@p zd-W;;5}_PvIZ*2e3SLM~PKHDdM)W4g1cvzw3JPGwUAcD6#cP|9>l7&u{bYGlOKbS; zUb}gThBNDbsDC`w23mA_^{TTMMvi)J{)UjZh9%(ZRct&Rd^AKqR#s&7U%6XoUnb~@ ziz7=FamFmO?sxOj`E1H3!$y8Ct%_!~_M=p{DWCs>2+TbmHfF6jrbWQ0_IoUUP0roB zhVhSxs5+g0tRkyBl}$-^Oir$NNE^JktHGIyyxp(c`#tc>z|TvDBBT5j!8VyJH&2t> zn)l)IJP9LAAK_r;-ny;iB`}=G&M!o{nxlr^_K)-$vk+FJwZ4D zlJ+7(A_HgB>nS-?FV*vgVF2M9tch-=J?&fd+@XxIiHXRwGe0>+#apnU1q8lq&IfcZ z$nqq5pXiCDorl#8Z!p!PQd3h4i-}QibrnKyFY<6^s>se@Llu?tu3`)n1nnLO&PQ+v zkhLC8O2Xg+XX=?*nD zAs7cL8Za+E*2?>osX&%6R%Y!zoW=%|E|5$F162MP|L59TkS3?Rib~&$O_Bt^@vPd~ ziNdNaDiFz`Cs7GeiqIhBSHx_-5C_r4+>5+K*19L1zAQdcOcIQa>NWEtBiipZIbS3u z-nv3z?&0BKs0qtJnVe{BY;4Gns=E|zUvY47^3$mag2SStgOxb~!6YjyM@{f!^hHF9 zx-2pC@boR%eQ0QywpG^Rq}1dbKClRv3xLON>*zpWSg=^)@E$yPu;BK6=Me0qzZ}c< zScUY`V-X=COP%~xFtlI4%D^ZCny#kyG>s^1!Jk&8vK<32I<-a0{7;PZ@50kP3tUoe zBj{LLibuxfWGb%E9-N#{*1&@0uNo9GoS3PeOTXXA#0r;yPm=odnu38L8rmMtBOnB$ zp+EVM&<(qpl$sjtENeFj6a2(lMz}vygH;z}=X>`n-d)Gii9U2`$tw0}GcO?YX6C>~ zi;I&JX=e<>MUx=0ma#OztoZL3M&Z|hKl{DAi&4B*)!x}0Vm(=GNJgE`fo1dP zkvwP#%HOEw49VsUWi}#>OuoLpV1Q%{4O8zrL~NJ~(G3m{2ZPNFZC2u!GUiprF1+g2Ekx>TF zH${%>5~i_XQZM(h@!8=gr>W|1r3LB)uV=vv_Xi(%_MN+rkjSiV_AlKtq|nyUF{sA8 z!$#hdE;*62qStQDucV}uzhOJRdbfDjg){X@ApE-p#tW?sK;xx^)I6?UB};48%I>)C z%9c=pBkt=53u|D-l@azwp`3+sg~#aXuEsbw3row&6u)(me9XdYP0qnDUjlZP`z`*Q zog!$i=);E(^gIct>^xBltnl-F6B9>v9&Ahua|;XbNX>jvMx&)r$D1mRFb)q74^dV9 zrYO*kjHKp$Q&{Mr;&QcfKkJ7JiCo%Sh~G)$R%W^vBLW&U>TU zdb`l5_Igfswmhck!#mf7muF5EOplR)CMmvwIN>lE1xEps@#8P7ms@lV+prGEn||?$ zOf6GTAL#B-S9?&>-V{d{J(JKVvUYZ>Z0;0}zlV$rS8{S9`&(LWf(O)-ys@M`1do4oiw7AKH``FGj+0 z%!njRQwjb2St*Z(0pc|P<-dRb&dkDs36501fC|_*8#}uciXBr}R%2uM;d1k3V)XDI zT3T9e7U8M#NalTTTCd-}ZR4FmOWpFy-X5&K5s@SCoaJv)CE083QLbYBZsEM0w&`O% z=h83f9(tSYc^$N)?a|UP+N~S3VRO%YSXI7&|6qHRX*x0WRq=CN6(v}ADuzFHE9O!o z+`212+oLjC)H|1>`9#+rpw44f;mAZbO1;3<-3UV}%XJYe6_uE7VJ05q^0#s~QhFEu zxFx`rzq3um&CRXtE?qyYs_OJEV~Br>M-DAPf|BgDwY7)TwS60|TOJZQZG%Z&PF9y& zhiaQ4E`ngILG3GJRZA6JB)G%ChzJ6Zf_l6Ve%Mp+Au|&rMVA=B-;IM!?^(tIpoxR^sI^9M*2k7*4E+`C^v0OkDui6&=I^sjCH}J zkSh`jd#+Gy46|Q|Y~PI zSw2oN2_oY~V}ieubzOJ;##8>K2>$87-@j?^EP%r7a<$gIHG|^cE@Ctx&2^qT^bsg) zs?wMk2uzxxoq>^Y5`@X4xt~Axg%PQmn^_7Zj}8s(?e8yuz7rO`OKo&e5O%D*Diq8m za2qVedt7o1Cu}MW)YR9HfcP}4y!>lsE%Hh`PyW`e*7AVI%0wQ5RJZbm-&9mkPP<-O z66q@>eAn34u0^YU^3YS_4Ro2$Qas*Pi^Ng8*|=sDWj|j2P}xuprnuF2e`^18UQvS= zkqkE8sC-Ad1ls8e;Y=Jw2wIr`d2%A>Qbz=Bbmw-!fMl=Ez)j9%Bl*4cSc z&be8?tv!^RPR?7=kjCs2_TpA~<8FbYR^8sX-F`&-JYK>B;{7T2nGqdh&&4a@gt3jW z)vX3hqFC{JT-|({*8W@9d}Q<{{2uNf-uOdPx#49{sWnY9Yl32Pl}DmjX)8XRN>S2O zN*_T>R;gYM>2|H7)eA$5mDU|^K*|MKbBDHPDx8!2Nfz2oivsnofj*6RaBVhi#pAZZ3(W;bV;ZS5@nz!U1FOHsz0$pY-Tv zO1hs*zsAz4tqkrMtut1(NQ0wBf>#D(B=M&ecPr&{Q|ecx>Q+agp^rYnkmu9 zjrPmX(A0SS_Q$*ZNp>$<9l52LAah6(woA~`pM^-*u*MaiAQ%&Z6&iZ_AV3$i^Pb!x zO;P5EjSvxIozD6EVTnsYFqC*K&f~#7a=-ff=P~+!r502j?38-Qftp=0c5fljYO_k7 zpQv>j{K#GDKPNkXJdvH=8;-FN5%UvaQE|{c-}6lR&tboJySa1FnEmxhgz@3)u&bm31MzLw2eEjiA4e=y6)W@BKQLftYU)P$$x^qKpO}Bu zHl{YioM;cf94QfE)URC{VuX!5Nw#IMVyI+%#UnkbR63N(0;u+A*y#E>`K4vIy zba2*O&_^|%qGXvW_QY15eKj29Ub<7+8^C{SX}uhZY!3^=`@XcqA}l;?=b(lIr)!Xr zLI3Nd(#;LD#w96RY8ZO0S4Uj@c`KV6&BA%b)$at+G#N zXD1T7$pT6}Az|TrgCiPCod+Sh8biMwA zcHTWy)QuURow`RLoKCpS_C?Kk8~J&cx860VEtq7~4}Ctt`GWe@*!Fz6`=6IZKKICb z5KFzb#5IUn8{1A5GknCSFSGdwbum@sBm_9%1(YkM&A9>W*NYHO_6mO8&p3XqXN_62 ziSvxel(kOxnW||m-VR%LZ(DHoh0dURck24(d2wN?4ogqyr}i6%kmSe z^-qq0m6|%Klt*t&f|Ah(Q+)#W9`aCqZXEyZMjC5 zRabugeD#GA;S&%budc3!0+Pp%2PP&~ofMla1pr!>%^POn8uptV*fUQKl_tp;5ZbSG3XipKtroHs~oPDY+fCdu}Me51AXK!1IT;uut`E$pDW@tT>XXAlAkDv`a)(8~AMj#!~nU69XY z0`djnDV(+PQx#z*MMtY8B_$YY-}?+Ou~67VftTuOr6nh08;ukEyVcpgJ!1`4P7RtD znbVn{Pa17+KNz+2_O4xem*U_x2X5!|4C<(qifT7%vTNPeBRH>K{S*cJQ7EOigXwH5 zw5V>Yg^-Qsq^D%`&p`i+>0gTx4|b^G`~%HWyt!#4ky3fUMwRibv2(m+H?CMX@E(Sw z>N8ATkt6qgn~5~kH0~CUe?1T_4n%5#JQpdojIVZGE;h3FWX+2fgecX6jSm(yU_uaM zTyKz3RaQ>XmDZ9uc74K(TbtuJ51;i=^)8WT!vA zDk-;O?tS;y=iYyGugq&iClq9iy!ce%L7t!-1UQn=$iItILDO26kW8@Z*G6~InI zxjnjtj3CwS1LSRf$n>bHN~DNqgPj~7lq~n5wY*wSyRv|Y2oeTaq(?y!=SzY_9?#45 z^*QsH{-YXs<3_mz!5Rd|kdAjs2N4Ob@EX!k)8ZaGRduoq5OIZ?FkWo(zGrI^5xJeY zy0-Rp+NqVeKSRQ^)b{uB=zk9!i<~TwhDRnZf4dtyvZ4^O=WL|{K`1O~Nc46lTfJ`^ zY8E0m#Y|_{UMJ$sTBGPH?elybAYBO}6|y^ee@~LLtFz3A!kc^&_J(~Cy`7^@d&=o= zDmdsRigNs}vT}KCl6xhwx5IsyX&&lvmk{s_d9SwtAWgbBsH`oY9;RQ=0VsoEjTMwU z1cOrCY`V_#3OBbr7%GT4Af-n_AZ6>aEPZIvHr8zHhKT> zDD+bQiW~)h>Kcw0#tUu4wNhz6PqZ#xw;LxoNAJkb$C+8KnB(003>8{q<|c@~0Z@UeI*9x_ z14H-M#st^X+`w|6<4lMU04O8H!-hioozHLF#ptW$LFpL|2jN83C_SvuPnGiZ`Z8bp z_ANGGSIB_v<;%(d905cX)4y3N&dSpf@uQ-=+|+5nxq$62T;NOY;{fR^;LzW{TSA=z zRMtQ`rd*l^?$p5GB4|s|igXP1h=HV-l)uL_vdntmEhfZ zmaT7P*0K0a)r%ib%I|Ti>NR1OAeNMvDBX}bWig|vIOMEG%y6iGJS_4UVvbsRs+(Q!bAiP>NXoW zz{hB$UrNf)FbY6IRxz>hpOUcshu$$phlgXtcDm5m@e2q9Ab=JD&uAk=2Pr^OuT{QL z?a1Z%H~INQsQk%iR{GFn+ACGk+f7|*=;Xu)AaU?ZZ>p<3zXUWu&Tco~Vt;+&3I1bw zLo~w!h7?_pr0xMh^P!w6Is$BHU<6J`R8;h~lG06OWgK^H$rq=W%iT zS=JV-s!~f6>$cM3;^K&!jt(xcV)OI!+pa}1_w$A!(hpY1qBRMs8B(2)e=}$Ud_s^? zHeHbq13(@siFmvdt8T|oo5Ed>9NB&`v=2p{vUJnvK;teVM?i+?V zMt=fGg;9x>#GX+)(i3>y+V$5w@^CX>-C<{@d4l8`dv}xQi+U=EV)=>bvDfjXn32*T zL|V1Rf3#SsiJD{l(Ck<(7$HOaNJ3RB)RXn6gPV&Pq0g!(Oh0ihK7M*X-H_*_*BjuR zR=mzP$m9&&`!$u=z37yaVL|u?4UkEAKCYWhl!TMaoaWoYx4nopv^dj0WK@di>t21S z1Wi6LpkgDrd_Y-A=~ZcxfrG;a@>YEK^z>BZ@pn8P!>U=Q%#}NI8rJRdkTip<&zFmD zw1BSb?O?=SYa5KxDc!pVwyXJI;l~e~ysz&eT3wiLy=YkHLDt&Z3T5g*tJpX?Dn5B4 z9K#^K^t_6Om6z91>7z`x`ieSft#%%qpMnD3NK9OOaC|%hB!0-((a|ihaezlvIn4#U z^wxt2ylTLj2Ip}#J!Eb`*_Ee!hxcbTNWC@soM&}VhHJgGg9~CbN%3@zP2age)&V<` zUm`nvdTc~N=S;8DRv(?_xcii@W;E8x&9@YGy~lB)_5X=l9cP8D>_9{&=xu57RE|Z~ z-hS=i4Fc@HtD75ydX5Tx@5;)CY~v^{UKDS*?Ou^_ArCL5*Gf}ME3>+q7QPnDO#$&; zUtf=>%BqYM*Etd;^FDWCPwfe-OxDXwEFvPJ1IvbxfPgvv(*STe+3NU^c;wwyUAx#_ zicVmyt(VIypX~Sf=;%-bSed3GFOKX@Dz8~a`Nlk|y9op=Agmk=89-$Kv5QQ}??6CEsHUg4a$h%B^TR{;pQvsJ)4O*gr)XZ}KD*5pf5bsSpr)yb zU2Pb%w6t^wb991o_%!b6=iq)1%BJVEN52qC8E*f#v_~iU`b!6DHg(9J?u}MHN%YY{ z=<{+Gx0zY;f*9$$_kLdq=^Ls0^OnFPiAbQL%Vwgq;PE+s5>!6kGY5W@@pNgyukWA$ zH6bwHVZ?Tll&FehLvgvgUFIQxaPV1j@=D3wXz|F>aEJRAz9|QeI!AhNTWKoR72m!> zkBNe`BX@oP ze7JeQ9)g5k^#eak{3nj}56WxSE-r$QW2NaQiAUbQA}23@4h&qXo6##JL*+F`h!R`< zHz5+u>C1wteE3`ibiv|)A-LVX}wnVIQ}XK zlC)4~!Zpn2vEP{CM>L4t?mfcrcf{EGvB6AIOwmPW@D(#*_FJw`y{|k>nbx~2akniI zO58bH>2sJE=&n(*)AW{cfvY__!}>^@E)kd&0c=^HvMMOZB&7a%3JuI9drUxpN!(Qad2?6 zU0z({PPRgQ#Qe6}S@gLcCz6`me|(DXU^PHI<8=Of z>SXn56-8qmoU&pGrs79hfwg-LCqJM_)*&*A40Qv;gWbR8$uI(`%nj^JQ4`vV?9Q31 zJzZURH!5u^cVF^wbMJaSnGKH|`@m`Ez7!A;aHj-sV{Zr;+`K%(TeofjZ@Uob0iA*% z!vl>1sJWGE?H25%FF&4d!%xI?vM@Im%W?sdP(P4jHB)Ijx=7=c2M$ z{QOd7|C6PF8PvZ)j>i%I@WgSg1bh@kBR)P7U%q^KR~~;eGwDU@>*8WkJv}|+3)H~H zwKX;Qn>56Ke=KU%pDy`e?YSI_8On4TiMjqi;g2EFi5sRc7e93o<~K1;dyc-#I0*## z@~HV)ui1T98nZFZqI36e&9fAn(u926DxCQ)N5B$6!+7Bi6}}JXTt-CS=T`#`&#u=h z4iMv~rsvx~s2zM7_b~Wk&$dm+g13Z5y)O7aw|3wi6&?GNd}e$q>2HEGmkK(lc2$4< zcJSz^r$-rVp? z%BTDi5>bFig|_3_+1VM9Q(O2Z;X7j-OdEYDD|2~XMH()bbi*-Sqe30_Z^v39pphUd zfnDrf7Z{(Ihyc#KamQT#UtTWS%|`^TnT5zD@xOBZ5NDS3PI&*6BgKq0LWJ?cy##!&9{;hP zR|eRhE61_GW5mnXb=!D-GjSNx9>bcYMU*q953NyW{54qSj?KK-&xE~(Y%cjkm7$J#^Q*@+DC z*oBYCS6g7;TYjd3=XiH-cZ~~8Z{$@a-TtpA({#V01l>(fh-&&wH$j<``;ECT1~ZCQ z(2nm7?Qo9Wd4y?NcEjG!R49Jvy6I<{Y=eyI`V(&IiF=sE_)U*cR3h66I4F5^`n&hV zv-&8(5zE8n13NzSe82ksMjGnzN?^g)G(fi}mY~{7Dp_Qsd*Xq7^JCxx`_aFLcIc6&DY%>!joY!EnpS zXzFdUYpREP%sbW=GbXOvuLs1ggv&Y3%>|>8F`p07RNJv8K z=h+uUQcVsY-ada$4oOK~?Pm-3eq3B!(3bq%oB9NDCt$|L3do?bmip_l85gJn zZ7b+nTl+?pY#%*hFnRH@qN4h@C!{~g!Qj22%Es>lEEOkw7?cmhZ`hYJhh%Ep-z@s8@sx?WFW~^P*9-P_Hhph$C&YvLY^PLE}~^*tQ?p9)Yau=%jJ8=$S6&V1#hBy zE`N(7?EYVkIf{a)b!!P(y>T^;e_r`g>)lHwb96p3x%{-_243U(V$wcpcc~D3-MB#j zd=?)Rud(#(&n>%ReG}jm^23<*&RVs<%7rn%dCp(7uW6oYczu>OLm_K-m&f;l!Wr9xMXDih~2vAXJB(3*r}La%*`}#`4CrFZCD+K980o5;HEig*F%>Xc%nb~wYPmax>?)%|_ z%yQDVu<(SpfYri2~C zDw1`-T_g(G)~trq2iQ6cvr&+O$>wURkY}mqe%%z8z$UXd$3l%v?_NlbVankAz8!xc z;b&eo9z0h?mX*9}Mf`JvRV#zDD*ke`YXvr($Ma}R+moB?>Da~7Ezf0C{uDeA6>7h4 zYo(F+ZsnE0nWa9YO{iih6C@dvlTiRgR2f)@o6(@Lgv*yZbBUBUNV!h2xssnjnGHjY z3(Dm1t15d803YZuQd7pA4>~9XKq3v8I(B$?IN0qNgALmtcgO_6Kn6lE4}QVNSg?~4 z^qLS*b-D}8FD%3*Cf;~-k5K2eP=y?#%T-FvLs58jhSZVb*McW0+txu;>YT^PfP{f| zFDT{6(sEUEHFt+06^SVHA29E(RAS^3CsZ`Lr?J{>-67%PeOMg&sA{Lu5lffgZW>{% z`eMzicO%eh5k!xQpuIafIs(aw*>%+^>;GR1+iqRK8Bmdd(09rL`BPCb?2y`?lowwg zbqlmpu!aCHAxH_XY&LBIVbFbDU6F-`GdYi2n1OgYOOr=7shSkY%oKR$LFVZ_Z2|&P zo#%#q_yPw7^6xz0OAav|Aqn$jIL&I_lJmfeu7Z$@iRjH)%}%8V%2-sf5sxSj-}d^g ztU;MPWEiN7s7@IW$wBwc+u7;>935rrKfdzY1;!LIb5I-vC}cfV$+<|a081auHAO`Q zfy&B|hvdC@$6p*Fo!X-U%x)W*;Q3m7QZAY zi+%Os!-p?~{F%d^`MaU3a{hjA(P0W;ps#_=1LyE!UD5uc)e+G@zVVy1LBw#53cN22Wo5q{fW8VI)qmwIf3KFfc!EipSbKs=kcfSXNtHNpf=Q9c zgZ|0!6n^*p1b%}575cxwqfDeb#Uw{ETL8&`ZmJ{+4?e+X{jE2GC-w#Usl;(c3c~35 zfy`U54=gFrWiEdodQJ?4H{Saj!Nx_nDD*4fz_MA9n5bKDj>&%ym#PSH@czaW)X;19 ze=IMb{hF&`$^8E=Ko1EA`U3h$LFI9cE*A$Y8TQ}uA9%hMGd-%~{mstV+1FE}07Be1 zHdYB?!TYbNv@EHH#q|{DgDo>qw2k|s0Wm@~d-GfIm=#&7tg=<6Ve@&+lJEQ;dEwW4JT9;XuI#QlJ zt`RW!-5ag=iRIsTY+-^GegEM@>9Ibz7m!|IW!}FX!g7VHk_p*mr%Cs_~#pz-N|fpsVHDgqKm8_sM`N=d<7U$b|y zgx7(1^#CFI-@IbaansJrBXSKao7?5c6#nh0l8* zH>3abdyma-zxw+IblZM(%bwzIbCny6A5o9ho#aDQP2^Q)L7krM}ql7K9%j zyIf+*_}}&jeVdbG@##6co5|4XE@1H_;1$p>*Z15ZJ*^ z4>|LxEdtsAC`(+g`gFLZKAt8d>ka9jt}LC)o8qaxmWw|Bra!DW>-~GY?Cfke6OCNW zZ?*14Q{|P|vLXu4;$q4rk6{7tx?T4t`!{w$ln{=0_4j`~9-p0MK2I-#g3Wv%dya+d zZURd|A)N9VF5Mmv1`-SpOFrasmrBdlJKuwHm>!Yx`R1_e7{L54WNwGddxu-?YEHj( zWJC4#m48#;f^Lz^EGap)VaLG004=#`U=}BXm@Y=PUCtO!I%rR~ms8wi{m(SWb+s;R z7yBGOhKl-e-}>zAbCAZd+#(CY4g2-$ncrT^dg*B8IU{|8e|KJm5M}gtLYHDttXl8y z0yd$kt^GU`ujLktPJzOB`_WpL$(fkVFWG;0-@+Yq^AhZzK)_0Bi!^@f2W*{>x{W<% zEa4s;m47o&} z!S?UoZ?nKogVSQ+eJB~A6X2jf%n-9K5$riaGZX!Y-#^D4+Zw8bnHL2AeZ(AuyZq?= z16YaE*n`BUomuQSvIi6)vR^56SaxsTtNeYL#4YaMz<-Agqg!E136Uf%oNHE*6dNWp ziIBjlEh_^h_B=9Q#{ai>E4yiOR#)rZ{v`p5afJTA4B@#=rm2G^7}v$qeJf45pGo2}3AVfi-y z|K2fYp_@%!Pa^%ha{jY0cP1AP>OU8azLAXP60VRx$4nJRak$4AT*RR+9RIwhEUA>~ z_it)MKHe6@{z#aUnB#x9K-R=ZbW4G`mP|Gzw;n5EqTv*Cbi7V#vhCdeoy;wAs|vcn zKbvFyuDp%+iA;T~#^HD=e+xbukj0)JC9CJY*f=2#id`yeHr-mahFt55&-uroK7NS8 zXPJE&O#4Aqs$(nGZvgYP$Yif9CTkOd7J|Yl0ATNad!0t@u>lwq7*8stjc*|KiNv%%~q!ae~!odTHG7w^u|m%wUrBxULdwY6P&jIx|Kjk zijsPl{8vT+2!;Cq{~^sIg05dlO;rw5Al2wu23_XwU1ay%SDz8v3J4THly;Gt{_54M zx9{A^lx4*WaKh41B{`}*`N6(-Fqnt&tP0MB68Zi6_iK>7&8>pQ2*m4~gk&)bYXmXx z-f@&yRzkC6YJ7ZrA%ATCr*L^_QLiGJAegHF) z8Z@-ZfAFhYQ8E2YgVR3`?Xxi>;HZLf=#?c&O-qXp6a>J~VeRv@>of2$VCr8eu|uVR zsX#Ic#nt@=q`06J2i4B&r)+qrM~@ys#!%+P!^vsuBXyVUIlSxJ`4IJ7IRt4O_9@KE zYlVOd$d8B2@bUBrC*k>@MkY6_57Vhoxe$=hU?`fHWW20`Vv7#QIjnrh1mb{=my?rY zmXcxw((lLSrlPg=Ww;Gg6t6m<4fn8=f=+#)GXv;Yo@Hb(-QV%#!ePC12?GwPK)=}A z`}n|T1FC+Yz4^n3SBbC4k_Hin)QJ7|^KC^C(*a&KyJt;!x6yi|fdRfVU7p0O*RPph z3)TZ~0}l@FGz)Yt@P$GF5C8}%6nP9bk(-6XGXZjRuyAnT0cjyluaASB-NnW+NW#=K zGy*|7+^r$*Sy^`Yo{BKqI?*`oXzvgKj2A6`J&1{=xE>7I0JC?YIY zfC|F%g$5G~0l!X^PfvgRY488@@MwOh0(Bb>C&yC;IO^x>Y9|w{z3B8-IB`S|={1;8;1 zgD717TVCf8#TsRi8S4&qcESarL!2N9Q*AD$MSKY^RZ1BStM?hkZ%jJPOhWOwTdm{> zXu0k#W-0gKK8QWsy4w)UAs2>oMvX3<*-ZllA999$Jpk5&>R zEk-~kXR*`Z9$!2!Lp1E#5f`G$BB>LyX9 zpEL#e8`{V$R@}3)vY^lstJ+Y7nu_0Ir~2bZY8X+d+@PVQb@r6%eyv zkAL0sjaT_y{C;h8PF((`VFCwUq@UNiRZ!fm#PPH0pL(x7zeTm-%@DZ9(;m17V&IB% z&pf;~gngjUK#D1Ce}KJ1OdWt7Vlue8i>_3%w$7P&1U!$WwKeW;AJQ(@u`%fe0*8Wv z-j(3wW>bIohO!Gt_&p>T(b}39FXX7{=BT003aY_6E>Km8XF#{kTeecv)YMr(A;D_l z>9>Y@zrsQu&}@LBQ(aAksnxk@PYkQUMtICuQaT}&Jr|Sf?i{PS$Zp!>=(yH62dd5* zWt;o@2=Dw8j`Ie2L^f*4CAs&%ml~)R{~nsa^CSw=_z{XHo!>NFZ`np&@Xq;0dA~t4 z>6X9acfyC5WDTd1nKVSpXzu~liFe(vcY;t90vxnD18h~-|6%H@!>a0oZVxG)(nt%a zNT-wnf{21xgoh51E@{{(DJc?yG^nVQAl)4zEg%gd(%pUM_+ce+%qy0mhN7vJO>FFt2c`UMgmI!?&i9(O~D?0+~ZRImJx zqm3MBK$XeSk`C~WItx)~C8Ph3DTLzFaR)F_5GYoFee^Y}xFtiC2bgu*vanM@K##)E zX_S0Gi-jUW(<=@xS3kP24yKa4doORt|qrQyfR@5Xv)%50_ zZl4i4cxkp*k$N`V*7;(-$!vBJ&%aS@lI+`lCb$#4-Tz^Y{6f$kQ@G@Cqe81=Tkvo8 zEAN7m=vnT+CowhdnEa*wW5^MYzQ;i_SFm2NqDv$4_w*n~dUrDt(9(9JRlR2Jy@*2( zefcxjP=W?f$uMCA{{lP;)VJZyPH6RuN==Ofri5?=-NMSs%?A(q%aSuQGN4GL9GHMV zQg6R;PAl^U^c)U&@$>P$KUg*c69X_=?%%B>DW^8U{;6fM7L`ur06c z*B55=<_?iKBaxB;`W}m!i0w{n_L?}6;>5df0(C6$b*l89Ds6q8L04>0;eU>j`4KW} zr1ude#DUN3+fPJGl*?c&=U4v9tLaFPzFN;lxigJn$B(aTw{WJxoP?4*{%w;=dRXLd zNtV7$875+g%s`0$#-m67`u2?912IW~{eT}i#DrW{tmPL z7tu8Hb&$(v!I7!B_tGojr1=@5?HvIGc*D*r5K9@Oc4 zN+h!@3qjq?mQGf`k(*n5*l(=VQu^Kx1^O}*@dAj_o1X_ak0xBGYmNeFCr3XtPq;+) zuc?I?+GpPVo6aB3U{J*9-KXK|@FBH756hYP)a7v`r=EeCQ3#c=b`*D=UEHnpc@DzU zLSgJ$eZG3JVTIsjf7@qa%w#UQF7jTN_)8uyINYB0v5AV7<%6$PO#!4ju5V&(gxE$n z7-5Bh#@`1auQ2#A2Uk=$IQ8$A(vyBK7gj%p{i0@F3Unf8liBAyyxX-ty(qG{JGb%; zM9a1(I_~3@4Z^tVX!GdU$lB7w1;Q?9@G0UZ8|7#05j1sw@cwoE@AGm#!UkcLYBz7i z>ALVYd8s|-j*as33E4TBR;MP(+3S9e{HmKyKFo(7-%&IN6IJ*1g%bV^?8dAxGX<>c zuF@yL4=`u#iZWyMKrQ}SeiwS)f>^P;HE)#KkyBzc`12uItF6m}bT znG`9LBzyx;PaZnsl?|Jk*wueb6+XnOG2n05>u7EZO|G)O)@RcYmG^mcbqH~g9I@G4 zlyXeE_+)TFf9=xS{%SsOc5JV1z;tzX?tU!;d~7VU?HxK3ej4A4Cl_z@c#-LIx0FNA zv2buAbBPXfeiy}$Tkm>#+5N;Au!FpzS1 zh4;5;e`U5W>-aOE9mb!_kct%3*Sl+y#!F3!Nb}p`PG8=>!emSz-m<|+Z4$Z#fiH%I z_~E|bovFF%lwT?lnMb@zZrx9-_3gw`TmL#hHL7z?Fx{Y4=TYuop}LTwgrfs}I2GsM z6UzMYKQNqRzRE+d%=tzzMPAT;-4x{Y&R;2ydF@kb*ZW{I!&h@i-T6nNVdhh{r1&HY zD+WU{ErlI|yOvvD8DdZP{_=Qab*ZmRX}RoiS93Bi;&<4M6i_TI%s~sg+P&Pa#wW>rX;LA}N*%oivy+XSPY~cOKOi6aV;a`a)xg z_l`=He?0(*26^@>t+`v-_*RZAQ~K0%lfPLPv#PIt?`7i%b;LmyJ@T$z*|8m&rw)ciIp;v~$Jubu5SPthi>Q>BVovWj4J|gC5@%XSS z{PVM4B;ka?w7tiiw+#L9m|HP0B|PP0xmgo}0EJ+sjEys#I!M2O09&M+8yoskJqx%q zIKU8motzvF%tv9t8~g5ZuKz_+(_XZp&5yU-ty!!@->Ghu=jD+lCnsaXK|n=;K~ibH zPgj6T)gHQM(l+g&8C1DB z^m#>ugn-MT7Wp!4@+0|6e!iWTT=sw^(D>K^jr(GMk+N!guLo zzAh+E5=dP7i)jK7Cf`EQuOuGKxmLqaK| zPr6xz9O#9xWOZpJe*8|NqR(M%NYD=10*xqtIjDsLFAK>22ID)y!Pi|}#G#zoztYsy z6sGlS1>#vXwT?11<^M8LA|fK7&$rLxPB$K)p{OX9`r-a1ptZs2pL3RmI2;2iKs=AB zI**OX$fZgn*RG}YTHJg1P-#o5t#>%b?4thhY|RpJ>*u<)_^awyn?52VoyR8UFPDq4O+C#+skb$Tg8r`CIeV z+if`hUie=4!4#-hl$a2LUFY_T0jM=JXh79E^CR-H<-3HmfB-qb{w&3bFkcJO{kXWe zjmxcYyuj%<09>2fr$&W4eF4&be*G#7vDB@tE!mWAaB2_>fO5VF@LXEwoXpHF-d0nC z1W2gFwT2V-)ZxkSV-tH`LF*&Kwbf(i6TXm{Y4Q%vq%NY_#f`4rewxGQ%=n0NgxyO1 z9Xdm!KGPfWkk4%rezr{@JY(bG;yBO#nRyBb)mI##9DffAl^e#UB#`U^fBK3R5nvgR zi@$w&m+)mgOR=uaMSjQ^{*ez3(D&~7CM7XvA6Q?p2%c&f4K>Z0PNI{g!kT$3KTCzL zWlm^s7H6niFx9nz?1JmjRJeZaCX>5R#M?(Qf3xMymm~S@KoM@*?hZFK#ON(__%Hwr z+6ei}m88@xEiZ3wZROG`0O?(n;NMOISLlse%r_u)rvt0RQcglltd|Y<5>+D8?`z~^ zUaRpdUb<x7hu5q!0xH=A0CW0M{SqV)=P|IZ*JI_`^X{ zCn_Nkd1SHWCWBFw5FPRcNgcTP5K>~Hpm`6|EA=vvtsxw8`FZDxjRP47x@&*T1qR}y zu4`y?yOA<;l--IEeoXwhnIK3~V#zS4okG&t(=k9l(Qu)u*U-{#r~irMVpcX{5ysrL zTc91oSC?Tb=N3kPW-FL6`tf&hJBe4Xr2@p15?xdtxt~~W;4;C`=(JA{zigBdpaAVz zS7Xlwc@m)Og~{7mT4Hw;in8HOV?n6+c&i+i!EQ?m8tZQV0e>lX-x?dqQtMnKw?2B! zF^hLseti0tM5xUGz8BJK+&)+Wf&IBFP1^4`P~8#c&mJUf7=K`~8(>Tm>$Qboz>k0e z6uVo_lH=n34pl}#O&4-46slUEJV4{63sW6i`c>AJ=Bmth4S zL?%B;JF9LLtth?-n|mxz?i_D_mO?4xb0_HU^a7r0B{CA0rM|E+X*#zHDTFs6s~-nJ>hF3hHstQHxqEX`q9^YNIjNW zX(UKYo^93R8KYA!`TmMfd6@k@%oSNAb!MkF!fQ6fWutZ_0T82gP41Ao98FfBO#&%|StdfQu`pkg9>C z2rSFGXG$Cy(ban+Sv_%@-+AwuW5>iQ_!>$Z;b9L)h^&yT$(mVBu8|`h5oT(IrX6vn z$VC2IgIDkS#}_bQJeuSJ}7uMrtH{<&r`@;7}q!MHFe@(>7xK zIrhvW#`@P0AxioSa_5)F_uvZty$0R)x9f_qM#-XxwdHkQRNZ2byY@^;Cvl~wqLP#Y zX=Nl~H7U^U85KRyes-TSyNt_y5#t$t@qbN$V02EZY#l9wTFmukbzHTj`QeF9m$yU~JA|th&oSCOdC5IS_$iejJ5>Z{qL#Zw` zg1Rn7k%*Fb&0eD$+39nC#qY4QT~boge@{aE+ms-Vm~%n{70)=_Z})zbD?R;*LYAgN zDdD`ZY7fGA(K*4FKNB}s^=0o^f6~%1?op=l&gEyqndWsp#W48JMq%jIPgk{ltZO)q$?3sKkP8N|ZXHS#ZByzq8%fQ}szLyCiqoiQd5 zg)`hwH@oEMrDNlXbF@mx$sN!UC|m27%~%1lb<$}Mo_l=_hVMtNJPkfx<{LLDNUfgc z*5)T+&_x$}U;ma<#)fs^kn)V>(a^Ojp7xyQF30s%(V}YiMN87ftQ^8aW84M=P$RkA%Lxy<@`2?{UFaeCEUb(-R&E z#Grt{OYKbctEuo>H);f7mApYmng4V%Pj#AuzdL4>q}Stpb6D2yQh`w+_UH7J>S(!f zqk1^uysUzk`(_gyO{EeZG#KpmM~7Uwg9vU{=3uTg^-THFsYU3XhhAh$33Z2h)<%eV zU7AoI;^lF}@HrR!0*)tF`e#2ayg3YX#q-@1C-$jT3$k)Nuf3Q~)*L{?UFH50wdH#| zC}0CiJAt27;%I^Jss~}v6FzY#H@@3M>)QQSP;Sq3C^USG>(Zt-itXqdzzom93EU=P}R(VPqG<{LuJ4F8q_2(JK;TFYo{bCT7JA-nx&lC zyL8l#upX{49k6PmY!kmIeL@<1ZJt`6Jzma}FmbJB(3$4=+lt3F84&fhNSSbQ@ZE+@ zE+LQZibRl39F?zCA&q^OaF@ZZ(|dJS?L*6ZxG1$ZXeJj|(Q5afzLvQsasq_x*m>=b z*A+PM!(MR+3Q~aZ3d%z{Z3BqbHR42MQMG#AyLlJkbqQah(21GXkuSPURx05=3D$Pp z8b!MH83VpUk*Ib{N{1WR3N+X;g(=c@)jA55Hxz8%`iGFU+AKf9!XBJ!JJ-o6G_mVc z22VL~qWnYm4YRMi!^E1?fYCC8_)v=AO<(e)+6J7e5C%buFkHN38xsI*76!ZvwE3Xa zh4Og!U_H>kO|~AXudhmZ_Vel;g6p>aBzDXqQ$g2`Bw}bT&^~l7t6h~U5Jo5F`YK<% z6My2Ym3TuT^!cAJV+0I7GVKzU_&zZgRdf;=c5uwEL=sckyVF_;zQQt5AS5PUIzsI3 z29`oeY-EhLpi{heJs;-pnWvVgC@Ltp$wrDW#`=zCUD2FC%i??D=_6Gx;z1~Fbw{$t;s(4(3%fEyZ0L3Kc#{4Mr9Z9bu4kSvOU;|O^{Vc>=wuFM zFfpyesOWAn8$Jm(#f1ywLrEE5zI?wT!37EJg$uGfKVfXn%E#cgNsz1B*6W5bIdTrN zDk>^lbzx4^x3R#MIXEyH7NNv+i7hL+oawpdbE=W3N5WW^0lr{kHtIS4aO_0~gKx=& zCx^ZjXrNCAl|2Y_O-{pSK0nB^-VNgHq98pZ_QPo8!FK_Eht~rl8*{%mFU+kOX4UVe z4n^bM|H*Ox=a>cuBhxWU-MRk|aVKsF8^-c3wQw5eHHt`$)FbBgRF#mE2JE6d5r z$^W*a4P$?Q@7z&RG6@l*m%9uFKTPhm;0z)^lJ1*a(CMP=T?vUSW-xlEk9`qCMwIHU zTh~G7V{!+ruOIQO|6_Rjju#9zOFWsEzklJbjQr1pjbR2(_2MUNs9VI;1ssnebb5tp z$tZ;k!(3mou_2&ZhGErksm=q5s6Cno3RH5IqdzT+#i!x^^!!cK;$S@8fdX29Vi4Jm z9;QkKu9kja=>Wt`#D| zOq&xgR`B&Cz7YK23zp)bK=>23q;cOZhO5Z+M^80)!^x;9nuIUnlbq2oGGavkVDV8X zNIeV-v@tDM8#d2DsA_*>1|<7X9xd&uqR*hM!zcUZpU+DGdon=Z8WswM0I zrlTw?jLrG$(be8Qy(9C&+u$k7dH%zr`54M*Q4Vt@_f=;1lVGgq2D3~=d?D#3cF5(s z;I%1p59>|FS97o?r1+;=(0Jyp>tn2{Wp2i)HFkY+nyAMgItsX>z02E#cI($2fF=sr z?26|YXfpsa%A<%Bx^P6uE?oQRD#Ag44O#DS%*(b$Q1ruaTbyKBVVLL4&{n{1K|>=^rlgv6v2(ww!T+h+_OC})yZdv`=Hu3n^sZI;G#N^uw--fk zyDj>%cryLSyr1_dnb!K6d0nNMvNPic2iFM_61wX8)ka57aH;y*e<-X3k1+%mQ(*=` z7O=KOy(OLJDWHr9G6y2dJD6${03uM_@a{(7Y~Fb%N(fzKd~O+NniQNPX%VNcDMfV`DtG+P+uoBWhRT9VlbkalXQ8v?F}!3#~V} z`1lzxk>w3ny>USrd;y)8x9-5*QNqQ>MoTAwQGkmpPHl(f3-sMT?a@GB(4JSybd$~c z_z~k8KtIoW2yxQUVYqzdN))i3LDZo%Zw{CQz(FFbNP#rPT~>o_oSRU9S=dmcdWF=e z?7r`CfTu&UPQ#hcaCixp#OhpAo4r#C_6z=!O8I`H8{xawX$zzbR59`L4X=B9u9nmA zdpxJ-@-leZ;7*uQy+Rn5dNsPmmN0U;Z#oc-w>g98jjDrl`P8s?C?ZKrce0lpjAg+1=KiGhi%aQ!+e=C;`+DM8QH-DiN-L1iHAxeC0emZ?}iT0suUiIP~79^sR&D}F8@!MjZ<<&{2!FOTPfh6z~C%#A18AAn+iMzJe zc{|f_D%k1y>YOg(L;J+kqBWk9^z5VFXZ0x_A}&J-njea%$mj4mxZ8?fvt#{wVyCPc z&G0#$gF7HJn4EUHJ^1(SGK7HQMHRuW6+3>I11A?3E^x3_0M>&Yv1xb-$~=`H$%>1L_;%38+jMLvcm|okAjE27+tDv8jh&A@e$jAt^CT75~cxzb|GV#mIT7=?N zF8<&Tz)`_6d=Ev94}@7GL1zr3+bL%)dNgco*KzOQxLA!M4AfoD+Uo}WvG+RgVv6?y ziKrLPZR_o)Px!|^Q*@0VOnkw!x8z_^7mj>IUw<4QY#kn)BgoL#pu`(Ee7j@7-l3J` zqNC_cCDR%JMGv6%4;dQ-8%}|>X7qyG{!lc7Vju`L5yD}_P|2Hrj|k|)RFMDSbReRl zF#)Q7%z#K191@~nV#4_@F%epd7YBEkVGslyNpL8?Rz0@ptsDQ`7ql1WTeepWyt&A* zV9E6-(^;OGgKl|{>Vi$dRO#gIPr+;1H{UTX=t>>md&+p8A9dX-=4)+l*h#oKO1TY} zO*V(e+B9JAr(;L*1>=&4`w zhQL|GsDAR%5@Xc6Kyg+gL2Iovy?W9-(BGd;QZjzhmg-=BhZz*=;M{5R(L&Hs;Vc{E z@BekZZPxsrld-9G%4HQ@i|+B=c5z}kX%pv5X=N4RO@>BoU#Ae;HpxC?yrVq|!Ujq9Ai6&Vo5$zpLD%OrFS zi&IJNn1y2XM|Ttxd*jL0Be$b6$`75Z1KI;Fs-ISbruUP2hqv`QhW>Q&RSpA>urb{}$02tA|qqQx?uoR}qFN`ICTTCJA4`mpIN zDO2g$HwHUa39?F!kU?HdSboIh@$M1na~U4Tvaf{0jNzLY5v3~lbF$eXFv%C)j!iGR zJcB5Cg2nW)^|3~Mlw=rq>b}^M94z2icn6|UClkHedUO=GipP9UDSb8j%&6{M^l^f+ z_6vt+6=NSLzmBDgsJgARO&Pt=qsasGLA+}8>%>Ud*}FU?bk97gQ-{5g0dT+OYrK!d z<#vCWbO1b=+(2bi2Lca_uDDobPJu|nw5iK8{;_3gBHXPRQ-}%sa?|h4a@fz^xoC_X zc8Y+IBq@UtXZ#i8`(?qzGBRh)_1q#p)enLih^PZcMNG|$td-JLP=XSV1B1Fr zn|2(~rVIEUBB6W9p&C^$IiY&+JP2X1f*?hxP1Q@@smhmn@@I2KR21 zQ+kj`@aIsxh<)aGJb7?A=T0=aCqGHrQ&|$a)mI?0>UDOqm+u22WJAy|-y&rAT2Xj- zIJCoB{M+@G;CAQTw-Qe|xb?eFJ1t~JUp(Z0`|Y}NJGfaSqVyUWWoj~m2iYqPb!q*- z_TLyP7Xw|#l|Fe`3Zn@b-iVgfHoF#^SGl!K4T|#wgq9&GM6cL6YdfDw+;ThgWzkp} z8ckmCD*JNn>i!(Ntc>i5!98DJR*g3^k#l&)4)=Y>hns@#=N7MLFn$DUy$+1*vBQO| z)Cs{TD-n7`Flk=Crm9k8v2Pt(<&sZsGMsP1W{(8@4DYkG`FX<^>mDpxf$v(4Av=7M zeCOd_?+52qMPV zr0!c<;Qah)y7%$5#rq*A=og;cVP;|JQef~~ zDlaIA8rq__pH18;jbL)98h9CczdK^xxp4fYhC2BLe$)`ph!a;Iqwwjz9~mh!{$||X z!RPnz=$m9QZUF2Isrdnpc>aY7i^IOCIqY#YZaFU-_pQ3~;Uo~d%3Q#Cqo9P2z54sR zwG;&P>)y!>lS2tTzg7||f{;`}j+<92WHR^czmLzG>st({SK*xd{vJjde5|TvM10D;Ab4r_G0;kTS=<;jf4$`k6xMvwfpR4yJ0>?`EIzrSA-(E>U(=g63^dwNO}w=@D{QBzlUMB?Sc zTek?H^rtQOM-wQj-b3Hivl>A*_{d#0@+E}U%-5XT{(3}&g_*+AAD5x-5V2OvFFfEd zjc1xGPdvI6>zkUI*k#=vmz<65rjn-V3SRigzvPcoC1N`u47zAR0*3>X<}8cf4Q&zR&q0oMW5~(e zoSWDp<`wq(H=Wy6_7>|u`Y11Bb@KlhW+RZL9wA+}65@FrnCM8uvNlRV!^?L0o;WZ1 z7gN+A2Nu#DH;=`8L7iJN?y~e%H^kuw2dew|t7rO?W%{e*^ccnT z7sP_V$zw=xs#5d--VUSYQ3sRbwCHFswtJ8tsm`D|BvzJ&h%_i2 zTjp76E4FxCL*oY5A>H?W_xE!%+q&pCZhX^G)F{ciPij}je}jT$eRfGmKtKTWlKu=9 zj7)%Ntd(u;$!;z*QsvT<*LG|BO>@AMf`$Gpj1Y~Om>Az{OhOj{(qpu^;S~^Z{z#Id zhU-z4qN1v-j1Mi@+6YDF6wggP0t!5(FSt$Th}+2C8tKO5M9kEh@XES^h#0O zU6q`Moz7EQgS_T*&RU%P*WR$1T=R!k7e$x205Uu+Fg0x?mnNbsz54)r@LlM{>*%!e~L^UqDkqhMVwX65tSiX z!_U@bdd;W(Jx#de<>h^b^7JHZC#nwCXCmcKlWT_{s4IgmM>a7r8VHyHEKyKVIR_d% z!xvkX*J*ua8>w+-f~#O?i+f-Ed7fOeN61l7R5g;^l=OYZ(dPLNN)n}a?0%WA8M z_zv>ku!^z&nE90B8mf(mx8nG~6+x z38XSga)p)VPp6Ib4T5YxX!wWOM#H<#Ys#ku{)P~aUv()#$)NHZdaE$r zU1Y6lt1A-9%A?0(7J`N(iiU=4fGB8FD9!xwP*+zszwvr9_~8z2*bNCk8`>mEi@I~O z+&LXlqd&3*d6WZbK1bMbYklZA=l#Gttv75ak`aIW-k!vp_Bk{$-Pb^ZwLpXfXilSY zvX`Z8?8>%gaMov3pFaJhK}thO&9xn?Q>fc?aUmtK{`A9r9QES8WkvVIX4`qEi|B3L z=u54x#oR@b@iXspI!QwPHSI=jmVk)Ze{m+@S>B!R#1hXF1&mF;#IH35)3?dFQQx(; zYgtSyQ=$?HDL-J}$XV6pClS)-yiu8y=@eK2B=I>>)2j)$(J2>8%M(uL*l|uFbP`2x zFL$ila>7wLQEah!5GyWGQO$0mwK6|=O_ytm_1uo+h_R=L{1x56C!6@LKB-JhJ$vr9 z-ydE7o1W;DtJy%lvx+=cnZ`!N2t%40&~Ny>!mpTq;!OgQz~BLrb5B@3mkZ2J#YfI# z!tyBAb~4u$rXztbclI0it`+Sq2?$Cn2O9j)oF4vg!_7sN!beW!6+`dSp&{GX>ur12 zydK#&Iv9-AhTBV^-9$`p%@aPs;oz!?@kvaU`RaW#YVFP z$H=vA({Pg7cUcW9A~C^C8N0W*NiOhv=t=0Te*K8dYF|0}aDWXwjmo(cPg<|db{?&K z-QvrmL;uCgQLL}X&cB{*Dg9NfOUyEv9n`C8D;WQxb#H!!tYGoh3I`-*Na4T0AwFK z7_t5JOv^knV{o)s_9}T?jra%Jsu%pR`lz1F=ss2V;)(ppc0ZF>fw&)*UvO|+_m5E0 z>*&{>)j_3N@9tSXH7>>pH-CGC-o8yht4D@E=_ZK|b7}iEYS^Oo0Y6cv90$kaP`(NG zV8Z@35rh5R2<-2a<|I!q)M$K7h|ze{ZrZRp+wq_l^ih}oMVB?_k^kA^FkaLW_mwf9 zNh_5waS@XzTvN|^#F!#-Qu%_W8mf0CAT|^vnl>&{04!DH)Zw1p17-LHtt8FyKP=?X zMnv^S)I6>o{rW*`GuGU*{V)Cea9F(7>zi49_NQY()g^o{Ag$gPR1yCKeN_H#e5 z?gz^vS}(-Fb+_fHQn&xLVlUal*XO64f2QjnF?G5$HfzY9=Z6HKi#vtsQ(^y0o;@Z* zL2@$1JTHB_N=Y%pCTdpfU1_gxtbqu?ZX|MU>r=TJatD8i{%sdy-1BG}Tk?QI_ke=Q zvvDiNSW52SBg{jV>V=Ir-|vlY7_Fy{W*P4}#hvB+p-Ym8PD43uGxQs-@1Qh05!v zwKwP#!iv3?t*75&2<#mmU_A4r^+n-^CQVX0_(g!K}({t|Swp&v}k)H!Q zaYporV1JhRBHWAC&n`pQimK7WA5-h^2{(8&1XSL&_fS;UNo-z`5(#7ye);FNX}~M~ zfY5)wf+VHD%j_NVTjc%0AY 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 z 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 zsdak)8#xureplaceLayer(new ContactsBox(name, _photoBig)); } else { - _creationRequestId = MTP::send(MTPchannels_CreateChannel(MTP_int(0), MTP_string(name), MTP_string(_description.getLastText().trimmed()), MTP_vector(0)), rpcDone(&GroupInfoBox::creationDone), rpcFail(&GroupInfoBox::creationFail)); + _creationRequestId = MTP::send(MTPchannels_CreateChannel(MTP_int(MTPmessages_CreateChannel_flag_broadcast), MTP_string(name), MTP_string(_description.getLastText().trimmed()), MTP_vector(0)), rpcDone(&GroupInfoBox::creationDone), rpcFail(&GroupInfoBox::creationFail)); } } @@ -1719,7 +1719,7 @@ SetupChannelBox::SetupChannelBox(ChannelData *channel) : AbstractBox(), _channel(channel), _public(this, qsl("channel_privacy"), 0, lang(lng_create_public_channel_title), true), _private(this, qsl("channel_privacy"), 1, lang(lng_create_private_channel_title)), -_comments(this, lang(lng_create_channel_comments), true), +_comments(this, lang(lng_create_channel_comments), false), _aboutPublicWidth(width() - st::newGroupPadding.left() - st::newGroupPadding.right() - st::rbDefFlat.textLeft), _aboutPublic(st::normalFont, lang(lng_create_public_channel_about), _defaultOptions, _aboutPublicWidth), _aboutPrivate(st::normalFont, lang(lng_create_private_channel_about), _defaultOptions, _aboutPublicWidth), @@ -1736,10 +1736,11 @@ a_goodOpacity(0, 0), a_good(animFunc(this, &SetupChannelBox::goodAnimStep)) { _link.setTextMargin(style::margins(st::newGroupLink.textMrg.left() + st::newGroupLink.font->m.width(_linkPlaceholder), st::newGroupLink.textMrg.top(), st::newGroupLink.textMrg.right(), st::newGroupLink.textMrg.bottom())); _aboutPublicHeight = _aboutPublic.countHeight(_aboutPublicWidth); - setMaxHeight(st::newGroupPadding.top() + _public.height() + _aboutPublicHeight + st::newGroupSkip + _private.height() + _aboutPrivate.countHeight(_aboutPublicWidth) + st::newGroupSkip + _comments.height() + _aboutComments.countHeight(_aboutPublicWidth) + st::newGroupPadding.bottom() + st::newGroupLinkPadding.top() + _link.height() + st::newGroupLinkPadding.bottom() + _save.height()); + setMaxHeight(st::newGroupPadding.top() + _public.height() + _aboutPublicHeight + st::newGroupSkip + _private.height() + _aboutPrivate.countHeight(_aboutPublicWidth)/* + st::newGroupSkip + _comments.height() + _aboutComments.countHeight(_aboutPublicWidth)*/ + st::newGroupPadding.bottom() + st::newGroupLinkPadding.top() + _link.height() + st::newGroupLinkPadding.bottom() + _save.height()); connect(&_save, SIGNAL(clicked()), this, SLOT(onSave())); connect(&_skip, SIGNAL(clicked()), this, SLOT(onClose())); + _comments.hide(); connect(&_link, SIGNAL(changed()), this, SLOT(onChange())); @@ -1753,12 +1754,18 @@ a_goodOpacity(0, 0), a_good(animFunc(this, &SetupChannelBox::goodAnimStep)) { } void SetupChannelBox::hideAll() { + _public.hide(); + _private.hide(); + _comments.hide(); _link.hide(); _save.hide(); _skip.hide(); } void SetupChannelBox::showAll() { + _public.show(); + _private.show(); +// _comments.show(); if (_public.checked()) { _link.show(); } else { @@ -1799,8 +1806,8 @@ void SetupChannelBox::paintEvent(QPaintEvent *e) { QRect aboutPrivate = rtlrect(st::newGroupPadding.left() + st::rbDefFlat.textLeft, _private.y() + _private.height(), width() - st::newGroupPadding.left() - st::newGroupPadding.right() - st::rbDefFlat.textLeft, _aboutPublicHeight, width()); _aboutPrivate.draw(p, aboutPrivate.x(), aboutPrivate.y(), aboutPrivate.width()); - QRect aboutComments = rtlrect(st::newGroupPadding.left() + st::rbDefFlat.textLeft, _comments.y() + _comments.height(), width() - st::newGroupPadding.left() - st::newGroupPadding.right() - st::rbDefFlat.textLeft, _aboutPublicHeight, width()); - _aboutComments.draw(p, aboutComments.x(), aboutComments.y(), aboutComments.width()); +// QRect aboutComments = rtlrect(st::newGroupPadding.left() + st::rbDefFlat.textLeft, _comments.y() + _comments.height(), width() - st::newGroupPadding.left() - st::newGroupPadding.right() - st::rbDefFlat.textLeft, _aboutPublicHeight, width()); +// _aboutComments.draw(p, aboutComments.x(), aboutComments.y(), aboutComments.width()); p.setPen(st::black); p.setFont(st::newGroupLinkFont); @@ -1845,9 +1852,10 @@ void SetupChannelBox::paintEvent(QPaintEvent *e) { void SetupChannelBox::resizeEvent(QResizeEvent *e) { _public.moveToLeft(st::newGroupPadding.left(), st::newGroupPadding.top(), width()); _private.moveToLeft(st::newGroupPadding.left(), _public.y() + _public.height() + _aboutPublicHeight + st::newGroupSkip, width()); - _comments.moveToLeft(st::newGroupPadding.left(), _private.y() + _private.height() + _aboutPrivate.countHeight(_aboutPublicWidth) + st::newGroupSkip, width()); +// _comments.moveToLeft(st::newGroupPadding.left(), _private.y() + _private.height() + _aboutPrivate.countHeight(_aboutPublicWidth) + st::newGroupSkip, width()); - _link.setGeometry(st::newGroupLinkPadding.left(), _comments.y() + _comments.height() + _aboutComments.countHeight(_aboutPublicWidth) + st::newGroupPadding.bottom() + st::newGroupLinkPadding.top(), width() - st::newGroupPadding.left() - st::newGroupPadding.right(), _link.height()); +// _link.setGeometry(st::newGroupLinkPadding.left(), _comments.y() + _comments.height() + _aboutComments.countHeight(_aboutPublicWidth) + st::newGroupPadding.bottom() + st::newGroupLinkPadding.top(), width() - st::newGroupPadding.left() - st::newGroupPadding.right(), _link.height()); + _link.setGeometry(st::newGroupLinkPadding.left(), _private.y() + _private.height() + _aboutPrivate.countHeight(_aboutPublicWidth) + st::newGroupPadding.bottom() + st::newGroupLinkPadding.top(), width() - st::newGroupPadding.left() - st::newGroupPadding.right(), _link.height()); _invitationLink = QRect(_link.x(), _link.y() + (_link.height() / 2) - st::newGroupLinkFont->height, _link.width(), 2 * st::newGroupLinkFont->height); int32 buttonTop = _link.y() + _link.height() + st::newGroupLinkPadding.bottom(); @@ -1899,8 +1907,8 @@ void SetupChannelBox::closePressed() { void SetupChannelBox::onSave() { if (!_public.checked()) { - if (!_comments.checked()) { - MTP::send(MTPchannels_ToggleComments(_channel->inputChannel, MTP_bool(false))); + if (_comments.checked()) { + MTP::send(MTPchannels_ToggleComments(_channel->inputChannel, MTP_bool(true))); } onClose(); } diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index e4ea84310..6ae8c5540 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -326,6 +326,7 @@ enum { NoUpdatesTimeout = 60 * 1000, // if nothing is received in 1 min we ping NoUpdatesAfterSleepTimeout = 60 * 1000, // if nothing is received in 1 min when was a sleepmode we ping WaitForSkippedTimeout = 1000, // 1s wait for skipped seq or pts in updates + WaitForChannelGetDifference = 1000, // 1s wait after show channel history before sending getChannelDifference MemoryForImageCache = 64 * 1024 * 1024, // after 64mb of unpacked images we try to clear some memory NotifyWindowsCount = 3, // 3 desktop notifies at the same time diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 0f90816b4..c1b2a9844 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -782,7 +782,9 @@ void DialogsListWidget::dialogsReceived(const QVector &added) { history->asChannelHistory()->unreadCountAll = d.vunread_count.v; history->peer->asChannel()->ptsReceived(d.vpts.v); } - if (d.vtop_message.v > d.vtop_important_message.v) history->setNotLoadedAtBottom(); + if (d.vtop_message.v > d.vtop_important_message.v) { + history->setNotLoadedAtBottom(); + } App::main()->applyNotifySetting(MTP_notifyPeer(d.vpeer), d.vnotify_settings, history); } break; } @@ -823,7 +825,7 @@ void DialogsListWidget::searchReceived(const QVector &messages, bool clearSearchResults(false); } for (QVector::const_iterator i = messages.cbegin(), e = messages.cend(); i != e; ++i) { - HistoryItem *item = App::histories().addNewMessage(*i, -1); + HistoryItem *item = App::histories().addNewMessage(*i, NewMessageExisting); searchResults.push_back(new FakeDialogRow(item)); _lastSearchId = item->id; } @@ -1642,7 +1644,7 @@ void DialogsWidget::dialogsReceived(const MTPmessages_Dialogs &dialogs, mtpReque const MTPDmessages_dialogs &data(dialogs.c_messages_dialogs()); App::feedUsers(data.vusers); App::feedChats(data.vchats); - App::feedMsgs(data.vmessages); + App::feedMsgs(data.vmessages, NewMessageLast); dlgList = &data.vdialogs.c_vector().v; count = dlgList->size(); } break; @@ -1650,7 +1652,7 @@ void DialogsWidget::dialogsReceived(const MTPmessages_Dialogs &dialogs, mtpReque const MTPDmessages_dialogsSlice &data(dialogs.c_messages_dialogsSlice()); App::feedUsers(data.vusers); App::feedChats(data.vchats); - App::feedMsgs(data.vmessages); + App::feedMsgs(data.vmessages, NewMessageLast); dlgList = &data.vdialogs.c_vector().v; count = data.vcount.v; } break; diff --git a/Telegram/SourceFiles/gui/flatcheckbox.cpp b/Telegram/SourceFiles/gui/flatcheckbox.cpp index dee906840..9fbecbea9 100644 --- a/Telegram/SourceFiles/gui/flatcheckbox.cpp +++ b/Telegram/SourceFiles/gui/flatcheckbox.cpp @@ -79,15 +79,17 @@ void FlatCheckbox::paintEvent(QPaintEvent *e) { p.fillRect(rect(), _st.bgColor->b); } - p.setFont(_st.font->f); - p.setRenderHint(QPainter::TextAntialiasing); - p.setPen((_state & StateDisabled ? _st.disColor : _st.textColor)->p); + if (!_text.isEmpty()) { + p.setFont(_st.font->f); + p.setRenderHint(QPainter::TextAntialiasing); + p.setPen((_state & StateDisabled ? _st.disColor : _st.textColor)->p); - QRect tRect(rect()); - tRect.setTop(_st.textTop); - tRect.setLeft(_st.textLeft); -// p.drawText(_st.textLeft, _st.textTop + _st.font->ascent, _text); - p.drawText(tRect, _text, QTextOption(style::al_topleft)); + QRect tRect(rect()); + tRect.setTop(_st.textTop); + tRect.setLeft(_st.textLeft); +// p.drawText(_st.textLeft, _st.textTop + _st.font->ascent, _text); + p.drawText(tRect, _text, QTextOption(style::al_topleft)); + } if (_state & StateDisabled) { QRect sRect(_checked ? _st.chkDisImageRect : _st.disImageRect); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index e87e62260..d9a8be480 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -303,7 +303,6 @@ void FakeDialogRow::paint(Painter &p, int32 w, bool act, bool sel) const { } History::History(const PeerId &peerId) : width(0), height(0) -, msgCount(0) , unreadCount(0) , inboxReadBefore(1) , outboxReadBefore(1) @@ -386,7 +385,7 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { newTypingStr += qsl("..."); } if (typingStr != newTypingStr) { - typingText.setText(st::dlgHistFont, (typingStr = newTypingStr), _textNameOptions); +typingText.setText(st::dlgHistFont, (typingStr = newTypingStr), _textNameOptions); } } if (!typingStr.isEmpty()) { @@ -422,8 +421,7 @@ void History::eraseFromOverview(MediaOverviewType type, MsgId msgId) { ChannelHistory::ChannelHistory(const PeerId &peer) : History(peer), unreadCountAll(0), _onlyImportant(true), -_otherOldLoaded(false), _otherNewLoaded(false), -_otherMsgCount(0), +_otherOldLoaded(false), _otherNewLoaded(true), _collapse(0) { } @@ -453,7 +451,7 @@ bool ChannelHistory::isSwitchReadyFor(MsgId switchId, MsgId &fixInScrollMsgId, i if (itemType == HistoryItemGroup || itemType == HistoryItemCollapse) { if (itemType == HistoryItemGroup && !_onlyImportant) return true; if (itemType == HistoryItemCollapse && _onlyImportant) return true; - bool willNeedCollapse = (itemType == HistoryItemGroup); + bool willNeedCollapse = (itemType == HistoryItemGroup); HistoryItem *prev = findPrevItem(item); if (prev) { @@ -484,18 +482,50 @@ bool ChannelHistory::isSwitchReadyFor(MsgId switchId, MsgId &fixInScrollMsgId, i } return false; } + if (item->history() == this) { + if (_onlyImportant && !item->isImportant()) { + if (_otherList.indexOf(item) >= 0) { + switchMode(); + return true; + } + return false; + } else if (!item->detached()) { + return true; + } + } + } else if (switchId < 0) { + LOG(("App Error: isSwitchReadyFor() switchId not found!")); + switchMode(); + return true; } - LOG(("App Error: isSwitchReadyFor() switchId not found!")); - switchMode(); - return true; + return false; } void ChannelHistory::getSwitchReadyFor(MsgId switchId, MsgId &fixInScrollMsgId, int32 &fixInScrollMsgTop) { if (!isSwitchReadyFor(switchId, fixInScrollMsgId, fixInScrollMsgTop)) { - _otherList.clear(); - _otherNewLoaded = _otherOldLoaded = false; + if (switchId > 0) { + if (HistoryItem *item = App::histItemById(channelId(), switchId)) { + if (_onlyImportant && !item->isImportant()) { + _otherList.clear(); + _otherNewLoaded = _otherOldLoaded = false; - switchMode(); + switchMode(); + } else { + clear(true); + newLoaded = oldLoaded = false; + lastWidth = 0; + } + } else { + clear(true); + newLoaded = oldLoaded = false; + lastWidth = 0; + } + } else { + _otherList.clear(); + _otherNewLoaded = _otherOldLoaded = false; + + switchMode(); + } } } @@ -520,27 +550,94 @@ void ChannelHistory::insertCollapseItem(MsgId wasMinId) { } } +HistoryItem *ChannelHistory::addNewChannelMessage(const MTPMessage &msg, NewMessageType type) { + if (type == NewMessageExisting) return addToHistory(msg); + + HistoryItem *result = addNewToBlocks(msg, type); + if (result) addNewToOther(result, type); + return result; +} + +HistoryItem *ChannelHistory::addNewToBlocks(const MTPMessage &msg, NewMessageType type) { + int32 flags = flagsFromMessage(msg); + bool isImportant = isChannel() ? isImportantChannelMessage(flags) : true; + + if (!loadedAtBottom()) { + HistoryItem *item = addToHistory(msg); + if (item && isImportant) { + setLastMessage(item); + if (type == NewMessageUnread) { + newItemAdded(item); + } + } + return item; + } + + if (!isImportant && onlyImportant()) { + HistoryItem *item = addToHistory(msg), *prev = isEmpty() ? 0 : blocks.back()->items.back(); + HistoryItem *group = addMessageGroupAfterPrev(item, prev); + if (group && group != prev) { + height += group->height(); + } + return item; + } + + if (!isImportant && !onlyImportant() && !isEmpty() && type == NewMessageLast) { + clear(true); + } + + HistoryBlock *to = 0; + bool newBlock = blocks.isEmpty(); + if (newBlock) { + to = new HistoryBlock(this); + } else { + to = blocks.back(); + } + return addNewItem(to, newBlock, createItem(to, msg, (type == NewMessageUnread)), (type == NewMessageUnread)); +} + +void ChannelHistory::addNewToOther(HistoryItem *item, NewMessageType type) { + if (!_otherNewLoaded) return; + + if (!item->isImportant()) { + if (onlyImportant()) { + if (type == NewMessageLast) { + _otherList.clear(); + _otherOldLoaded = false; + } + } else { + if (_otherList.isEmpty() || _otherList.back()->type() != HistoryItemGroup) { + _otherList.push_back(regItem(new HistoryGroup(this, 0, item, _otherList.isEmpty() ? item->date : _otherList.back()->date))); + } else { + static_cast(_otherList.back())->uniteWith(item); + } + return; + } + } + _otherList.push_back(item); +} + void ChannelHistory::switchMode() { OtherList savedList; - savedList.reserve(msgCount); - for (Blocks::const_iterator i = blocks.cbegin(), e = blocks.cend(); i != e; ++i) { - HistoryBlock *block = *i; - for (HistoryBlock::Items::const_iterator j = block->items.cbegin(), end = block->items.cend(); j != end; ++j) { - HistoryItem *item = *j; - HistoryItemType itemType = item->type(); - if (itemType == HistoryItemMsg || itemType == HistoryItemGroup) { - savedList.push_back(item); + if (!blocks.isEmpty()) { + savedList.reserve(((blocks.size() - 2) * MessagesPerPage + blocks.back()->items.size()) * (onlyImportant() ? 2 : 1)); + for (Blocks::const_iterator i = blocks.cbegin(), e = blocks.cend(); i != e; ++i) { + HistoryBlock *block = *i; + for (HistoryBlock::Items::const_iterator j = block->items.cbegin(), end = block->items.cend(); j != end; ++j) { + HistoryItem *item = *j; + HistoryItemType itemType = item->type(); + if (itemType == HistoryItemMsg || itemType == HistoryItemGroup) { + savedList.push_back(item); + } } } } - int32 savedMsgCount = msgCount; bool savedNewLoaded = newLoaded, savedOldLoaded = oldLoaded; clear(true); newLoaded = _otherNewLoaded; oldLoaded = _otherOldLoaded; - msgCount = _otherMsgCount; if (int32 count = _otherList.size()) { blocks.reserve(qCeil(count / float64(MessagesPerPage)) + 1); createInitialDateBlock(_otherList.front()->date); @@ -564,7 +661,6 @@ void ChannelHistory::switchMode() { _otherList = savedList; _otherNewLoaded = savedNewLoaded; _otherOldLoaded = savedOldLoaded; - _otherMsgCount = savedMsgCount; _onlyImportant = !_onlyImportant; @@ -909,30 +1005,15 @@ void Histories::remove(const PeerId &peer) { } } -HistoryItem *Histories::addNewMessage(const MTPmessage &msg, int msgState) { +HistoryItem *Histories::addNewMessage(const MTPmessage &msg, NewMessageType type) { int32 flags = 0; - PeerId peer = peerFromMessage(msg, &flags); + PeerId peer = peerFromMessage(msg); if (!peer) return 0; - History *h = findOrInsert(peer, 0, 0); - bool isImportant = h->isChannel() ? isImportantChannelMessage(flags) : true; - if (msgState < 0 || (!isImportant && h->asChannelHistory()->onlyImportant())) { - return h->addToHistory(msg); - } - if (!h->loadedAtBottom()) { - HistoryItem *item = h->addToHistory(msg); - if (item && isImportant) { - h->setLastMessage(item); - if (msgState > 0) { - h->newItemAdded(item); - } - } - return item; - } - return h->addNewMessage(msg, msgState > 0); + return findOrInsert(peer, 0, 0)->addNewMessage(msg, type); } -HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, bool newMsg, bool returnExisting) { +HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, bool applyServiceAction, bool returnExisting) { HistoryItem *result = 0; MsgId msgId = 0; @@ -1046,7 +1127,7 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo const MTPDmessageService &d(msg.c_messageService()); result = new HistoryServiceMsg(this, block, d); - if (newMsg) { + if (applyServiceAction) { const MTPmessageAction &action(d.vaction); switch (d.vaction.type()) { case mtpc_messageActionChatAddUser: { @@ -1146,7 +1227,21 @@ HistoryItem *History::addNewService(MsgId msgId, QDateTime date, const QString & return addNewItem(to, newBlock, regItem(new HistoryServiceMsg(this, to, msgId, date, text, flags, media)), newMsg); } -HistoryItem *History::addNewMessage(const MTPmessage &msg, bool newMsg) { +HistoryItem *History::addNewMessage(const MTPmessage &msg, NewMessageType type) { + if (isChannel()) return asChannelHistory()->addNewChannelMessage(msg, type); + + if (type == NewMessageExisting) return addToHistory(msg); + if (!loadedAtBottom()) { + HistoryItem *item = addToHistory(msg); + if (item) { + setLastMessage(item); + if (type == NewMessageUnread) { + newItemAdded(item); + } + } + return item; + } + HistoryBlock *to = 0; bool newBlock = blocks.isEmpty(); if (newBlock) { @@ -1154,7 +1249,7 @@ HistoryItem *History::addNewMessage(const MTPmessage &msg, bool newMsg) { } else { to = blocks.back(); } - return addNewItem(to, newBlock, createItem(to, msg, newMsg), newMsg); + return addNewItem(to, newBlock, createItem(to, msg, (type == NewMessageUnread)), (type == NewMessageUnread)); } HistoryItem *History::addToHistory(const MTPmessage &msg) { @@ -1246,7 +1341,6 @@ HistoryItem *History::addNewItem(HistoryBlock *to, bool newBlock, HistoryItem *a to->height += dh; height += dh; } - setMsgCount(msgCount + 1); if (newMsg) { newItemAdded(adding); } @@ -1356,12 +1450,30 @@ HistoryItem *History::addItemAfterPrevToBlock(HistoryItem *item, HistoryItem *pr return item; } -HistoryItem *History::addMessageGroupAfterPrevToBlock(const MTPDmessageGroup &group, const QDateTime &date, HistoryItem *prev, HistoryBlock *block) { +HistoryItem *History::addMessageGroupAfterPrevToBlock(const MTPDmessageGroup &group, HistoryItem *prev, HistoryBlock *block) { if (prev && prev->type() == HistoryItemGroup) { static_cast(prev)->uniteWith(group.vmin_id.v, group.vmax_id.v, group.vcount.v); return prev; } - return addItemAfterPrevToBlock(regItem(new HistoryGroup(this, block, group, date)), prev, block); + return addItemAfterPrevToBlock(regItem(new HistoryGroup(this, block, group, prev ? prev->date : date(group.vdate))), prev, block); +} + +HistoryItem *History::addMessageGroupAfterPrev(HistoryItem *newItem, HistoryItem *prev) { + if (prev && prev->type() == HistoryItemGroup) { + static_cast(prev)->uniteWith(newItem); + return prev; + } + + QDateTime date = prev ? prev->date : newItem->date; + HistoryBlock *block = prev->block(); + if (!block) { + createInitialDateBlock(date); + + block = new HistoryBlock(this); + block->y = height; + blocks.push_back(block); + } + return addItemAfterPrevToBlock(regItem(new HistoryGroup(this, block, newItem, date)), prev, block); } void History::addOlderSlice(const QVector &slice, const QVector *collapsed) { @@ -1393,17 +1505,16 @@ void History::addOlderSlice(const QVector &slice, const QVectorc_messageGroup()); if (group.vmin_id.v >= adding->id) break; - prev = addMessageGroupAfterPrevToBlock(group, (prev ? prev : adding)->date, prev, block); + prev = addMessageGroupAfterPrevToBlock(group, prev, block); } prev = addItemAfterPrevToBlock(adding, prev, block); - setMsgCount(msgCount + 1); } for (; groupsIt != groupsEnd; ++groupsIt) { if (groupsIt->type() != mtpc_messageGroup) continue; const MTPDmessageGroup &group(groupsIt->c_messageGroup()); - prev = addMessageGroupAfterPrevToBlock(group, prev ? prev->date : date(group.vdate), prev, block); + prev = addMessageGroupAfterPrevToBlock(group, prev, block); } while (till && prev && till->type() == HistoryItemGroup && prev->type() == HistoryItemGroup) { @@ -1551,17 +1662,16 @@ void History::addNewerSlice(const QVector &slice, const QVectorc_messageGroup()); if (group.vmin_id.v >= adding->id) break; - prev = addMessageGroupAfterPrevToBlock(group, (prev ? prev : adding)->date, prev, block); + prev = addMessageGroupAfterPrevToBlock(group, prev, block); } prev = addItemAfterPrevToBlock(adding, prev, block); - setMsgCount(msgCount + 1); } for (; groupsIt != groupsEnd; ++groupsIt) { if (groupsIt->type() != mtpc_messageGroup) continue; const MTPDmessageGroup &group(groupsIt->c_messageGroup()); - prev = addMessageGroupAfterPrevToBlock(group, prev ? prev->date : date(group.vdate), prev, block); + prev = addMessageGroupAfterPrevToBlock(group, prev, block); } bool wasLoadedAtBottom = loadedAtBottom(); @@ -1705,10 +1815,25 @@ MsgId History::outboxRead(HistoryItem *wasRead) { return outboxRead(wasRead ? wasRead->id : 0); } +HistoryItem *History::lastImportantMessage() const { + if (isEmpty()) return 0; + bool channel = isChannel(); + for (int32 blockIndex = blocks.size(); blockIndex > 0;) { + HistoryBlock *block = blocks.at(--blockIndex); + for (int32 itemIndex = block->items.size(); itemIndex > 0;) { + HistoryItem *item = block->items.at(--itemIndex); + if (channel ? item->isImportant() : (item->type() == HistoryItemMsg)) { + return item; + } + } + } + return 0; +} + void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { if (unreadCount != newUnreadCount) { if (newUnreadCount == 1) { - if (loadedAtBottom()) showFrom = isEmpty() ? 0 : blocks.back()->items.back(); + if (loadedAtBottom()) showFrom = lastImportantMessage(); inboxReadBefore = qMax(inboxReadBefore, msgIdForRead()); } else if (!newUnreadCount) { showFrom = 0; @@ -1722,12 +1847,6 @@ void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { } } -void History::setMsgCount(int32 newMsgCount) { - if (msgCount != newMsgCount) { - msgCount = newMsgCount; - } -} - void History::setMute(bool newMute) { if (mute != newMute) { App::histories().unreadMuted += newMute ? unreadCount : (-unreadCount); @@ -1813,7 +1932,7 @@ bool History::loadedAtTop() const { } bool History::isReadyFor(MsgId msgId, MsgId &fixInScrollMsgId, int32 &fixInScrollMsgTop) { - if (msgId != ShowAtTheEndMsgId && msgId != ShowAtUnreadMsgId && msgId < 0 && isChannel()) { + if (msgId != ShowAtTheEndMsgId && msgId != ShowAtUnreadMsgId && isChannel()) { return asChannelHistory()->isSwitchReadyFor(msgId, fixInScrollMsgId, fixInScrollMsgTop); } fixInScrollMsgId = 0; @@ -1835,7 +1954,7 @@ bool History::isReadyFor(MsgId msgId, MsgId &fixInScrollMsgId, int32 &fixInScrol } void History::getReadyFor(MsgId msgId, MsgId &fixInScrollMsgId, int32 &fixInScrollMsgTop) { - if (msgId != ShowAtTheEndMsgId && msgId != ShowAtUnreadMsgId && msgId < 0 && isChannel()) { + if (msgId != ShowAtTheEndMsgId && msgId != ShowAtUnreadMsgId && isChannel()) { return asChannelHistory()->getSwitchReadyFor(msgId, fixInScrollMsgId, fixInScrollMsgTop); } if (!isReadyFor(msgId, fixInScrollMsgId, fixInScrollMsgTop)) { @@ -1877,14 +1996,7 @@ void History::setPosInDialogsDate(const QDateTime &date) { } void History::fixLastMessage(bool wasAtBottom) { - if (wasAtBottom && isEmpty()) { - wasAtBottom = false; - } - if (wasAtBottom) { - setLastMessage(blocks.back()->items.back(), false); - } else { - setLastMessage(0); - } + setLastMessage(wasAtBottom ? lastImportantMessage() : 0, false); } MsgId History::minMsgId() const { @@ -1977,7 +2089,6 @@ void History::clear(bool leaveItems) { delete *i; } blocks.clear(); - setMsgCount(0); if (leaveItems) { lastKeyboardInited = false; } else { @@ -2173,9 +2284,7 @@ void HistoryBlock::removeItem(HistoryItem *item) { history->setUnreadCount(history->unreadCount - 1); } int32 itemType = item->type(); - if (itemType == HistoryItemMsg) { - history->setMsgCount(history->msgCount - 1); - } else if (itemType == HistoryItemUnreadBar) { + if (itemType == HistoryItemUnreadBar) { if (history->unreadBar == item) { history->unreadBar = 0; } @@ -5616,7 +5725,7 @@ HistoryItem(history, block, msgId, flags, date, from) } void HistoryMessage::initTime() { - _timeText = date.toString(cTimeFormat()) + qsl(" (%1)").arg(id); + _timeText = date.toString(cTimeFormat());// + qsl(" (%1)").arg(id); _timeWidth = st::msgDateFont->m.width(_timeText); _viewsText = (_views >= 0) ? QString::number(_views ? _views : 1) : QString(); @@ -5928,14 +6037,14 @@ void HistoryMessage::draw(Painter &p, uint32 selection) const { fromNameUpdated(); _fromVersion = _from->nameVersion; } - int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.right()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; + int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.left()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; if (justMedia()) { if (_media->maxWidth() > mwidth) mwidth = _media->maxWidth(); if (_media->currentWidth() < mwidth) mwidth = _media->currentWidth(); } if (width > mwidth) { if (fromChannel()) { - left += (width - mwidth) / 2; +// left += (width - mwidth) / 2; } else if (out()) { left += width - mwidth; } @@ -5951,7 +6060,7 @@ void HistoryMessage::draw(Painter &p, uint32 selection) const { if (width >= _maxw) { if (fromChannel()) { - left += (width - _maxw) / 2; +// left += (width - _maxw) / 2; } else if (out()) { left += width - _maxw; } @@ -6037,14 +6146,14 @@ int32 HistoryMessage::resize(int32 width) { } bool HistoryMessage::hasPoint(int32 x, int32 y) const { - int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.right()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; + int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.left()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; if (justMedia()) { if (_media->maxWidth() > mwidth) mwidth = _media->maxWidth(); if (_media->currentWidth() < mwidth) mwidth = _media->currentWidth(); } if (width > mwidth) { if (fromChannel()) { - left += (width - mwidth) / 2; +// left += (width - mwidth) / 2; } else if (out()) { left += width - mwidth; } @@ -6058,7 +6167,7 @@ bool HistoryMessage::hasPoint(int32 x, int32 y) const { if (width >= _maxw) { if (fromChannel()) { - left += (width - _maxw) / 2; +// left += (width - _maxw) / 2; } else if (out()) { left += width - _maxw; } @@ -6092,14 +6201,14 @@ void HistoryMessage::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 state = HistoryDefaultCursorState; lnk = TextLinkPtr(); - int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.right()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; + int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.left()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; if (justMedia()) { if (_media->maxWidth() > mwidth) mwidth = _media->maxWidth(); if (_media->currentWidth() < mwidth) mwidth = _media->currentWidth(); } if (width > mwidth) { if (fromChannel()) { - left += (width - mwidth) / 2; +// left += (width - mwidth) / 2; } else if (out()) { left += width - mwidth; } @@ -6118,7 +6227,7 @@ void HistoryMessage::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 if (width >= _maxw) { if (fromChannel()) { - left += (width - _maxw) / 2; +// left += (width - _maxw) / 2; } else if (out()) { left += width - _maxw; } @@ -6171,10 +6280,10 @@ void HistoryMessage::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, upon = false; if (justMedia()) return; - int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.right()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; + int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.left()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; if (width > mwidth) { if (fromChannel()) { - left += (width - mwidth) / 2; +// left += (width - mwidth) / 2; } else if (out()) { left += width - mwidth; } @@ -6189,7 +6298,7 @@ void HistoryMessage::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, if (width >= _maxw) { if (fromChannel()) { - left += (width - _maxw) / 2; +// left += (width - _maxw) / 2; } else if (out()) { left += width - _maxw; } @@ -6328,10 +6437,10 @@ int32 HistoryForwarded::resize(int32 width) { bool HistoryForwarded::hasPoint(int32 x, int32 y) const { if (!justMedia()) { - int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.right()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; + int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.left()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; if (width > mwidth) { if (fromChannel()) { - left += (width - mwidth) / 2; +//f left += (width - mwidth) / 2; } else if (out()) { left += width - mwidth; } @@ -6346,7 +6455,7 @@ bool HistoryForwarded::hasPoint(int32 x, int32 y) const { if (width >= _maxw) { if (fromChannel()) { - left += (width - _maxw) / 2; +// left += (width - _maxw) / 2; } else if (out()) { left += width - _maxw; } @@ -6363,10 +6472,10 @@ void HistoryForwarded::getState(TextLinkPtr &lnk, HistoryCursorState &state, int state = HistoryDefaultCursorState; if (!justMedia()) { - int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.right()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; + int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.left()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; if (width > mwidth) { if (fromChannel()) { - left += (width - mwidth) / 2; +// left += (width - mwidth) / 2; } else if (out()) { left += width - mwidth; } @@ -6384,7 +6493,7 @@ void HistoryForwarded::getState(TextLinkPtr &lnk, HistoryCursorState &state, int if (width >= _maxw) { if (fromChannel()) { - left += (width - _maxw) / 2; +// left += (width - _maxw) / 2; } else if (out()) { left += width - _maxw; } @@ -6429,10 +6538,10 @@ void HistoryForwarded::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 upon = false; if (!justMedia()) { - int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.right()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; + int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.left()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; if (width > mwidth) { if (fromChannel()) { - left += (width - mwidth) / 2; +// left += (width - mwidth) / 2; } else if (out()) { left += width - mwidth; } @@ -6447,7 +6556,7 @@ void HistoryForwarded::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 if (width >= _maxw) { if (fromChannel()) { - left += (width - _maxw) / 2; +// left += (width - _maxw) / 2; } else if (out()) { left += width - _maxw; } @@ -6655,10 +6764,10 @@ int32 HistoryReply::resize(int32 width) { bool HistoryReply::hasPoint(int32 x, int32 y) const { if (!justMedia()) { - int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.right()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; + int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.left()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; if (width > mwidth) { if (fromChannel()) { - left += (width - mwidth) / 2; +// left += (width - mwidth) / 2; } else if (out()) { left += width - mwidth; } @@ -6673,7 +6782,7 @@ bool HistoryReply::hasPoint(int32 x, int32 y) const { if (width >= _maxw) { if (fromChannel()) { - left += (width - _maxw) / 2; +// left += (width - _maxw) / 2; } else if (out()) { left += width - _maxw; } @@ -6690,10 +6799,10 @@ void HistoryReply::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x state = HistoryDefaultCursorState; if (!justMedia()) { - int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.right()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; + int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.left()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; if (width > mwidth) { if (fromChannel()) { - left += (width - mwidth) / 2; +// left += (width - mwidth) / 2; } else if (out()) { left += width - mwidth; } @@ -6711,7 +6820,7 @@ void HistoryReply::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x if (width >= _maxw) { if (fromChannel()) { - left += (width - _maxw) / 2; +// left += (width - _maxw) / 2; } else if (out()) { left += width - _maxw; } @@ -6753,10 +6862,10 @@ void HistoryReply::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, i upon = false; if (!justMedia()) { - int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.right()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; + int32 left = fromChannel() ? (st::msgMargin.left() + st::msgMargin.left()) / 2 : (out() ? st::msgMargin.right() : st::msgMargin.left()), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; if (width > mwidth) { if (fromChannel()) { - left += (width - mwidth) / 2; +// left += (width - mwidth) / 2; } else if (out()) { left += width - mwidth; } @@ -6771,7 +6880,7 @@ void HistoryReply::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, i if (width >= _maxw) { if (fromChannel()) { - left += (width - _maxw) / 2; +// left += (width - _maxw) / 2; } else if (out()) { left += width - _maxw; } @@ -7075,10 +7184,15 @@ HistoryItem *createDayServiceMsg(History *history, HistoryBlock *block, QDateTim } HistoryGroup::HistoryGroup(History *history, HistoryBlock *block, const MTPDmessageGroup &group, const QDateTime &date) : -HistoryServiceMsg(history, block, clientMsgId(), date, lng_channel_comments_count(lt_count, group.vcount.v) + qsl(" (%1 .. %2)").arg(group.vmin_id.v).arg(group.vmax_id.v)), +HistoryServiceMsg(history, block, clientMsgId(), date, lng_channel_comments_count(lt_count, group.vcount.v)/* + qsl(" (%1 .. %2)").arg(group.vmin_id.v).arg(group.vmax_id.v)*/), _minId(group.vmin_id.v), _maxId(group.vmax_id.v), _count(group.vcount.v), _lnk(new CommentsLink(this)) { } +HistoryGroup::HistoryGroup(History *history, HistoryBlock *block, HistoryItem *newItem, const QDateTime &date) : +HistoryServiceMsg(history, block, clientMsgId(), date, lng_channel_comments_count(lt_count, 1)/* + qsl(" (%1 .. %2)").arg(newItem->id - 1).arg(newItem->id + 1)*/), +_minId(newItem->id - 1), _maxId(newItem->id + 1), _count(1), _lnk(new CommentsLink(this)) { +} + void HistoryGroup::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); state = HistoryDefaultCursorState; @@ -7100,20 +7214,20 @@ void HistoryGroup::uniteWith(MsgId minId, MsgId maxId, int32 count) { if (minId == _minId && maxId == _maxId && count == _count) return; if (minId < _minId) { - if (maxId <= _minId) { + if (maxId <= _minId + 1) { _count += count; } else if (maxId <= _maxId) { // :( smth not precise - _count += qMax(0, count - (maxId - _minId)); + _count += qMax(0, count - (maxId - _minId - 1)); } else { // :( smth not precise _count = qMax(count, _count); _maxId = maxId; } _minId = minId; } else if (maxId > _maxId) { - if (minId >= _maxId) { + if (minId + 1 >= _maxId) { _count += count; } else if (minId >= _minId) { // :( smth not precise - _count += qMax(0, count - (_maxId - minId)); + _count += qMax(0, count - (_maxId - minId - 1)); } else { // :( smth not precise _count = qMax(count, _count); _minId = minId; @@ -7135,7 +7249,7 @@ bool HistoryGroup::decrementCount() { } void HistoryGroup::updateText() { - setText(lng_channel_comments_count(lt_count, _count) + qsl(" (%1 .. %2)").arg(_minId).arg(_maxId)); + setText(lng_channel_comments_count(lt_count, _count)/* + qsl(" (%1 .. %2)").arg(_minId).arg(_maxId)*/); } HistoryCollapse::HistoryCollapse(History *history, HistoryBlock *block, MsgId wasMinId, const QDateTime &date) : diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 478ee9658..f6f968f63 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -34,6 +34,12 @@ extern TextParseOptions _textNameOptions, _textDlgOptions, _historyTextOptions, #include "structs.h" +enum NewMessageType { + NewMessageUnread, + NewMessageLast, + NewMessageExisting, +}; + class History; class Histories : public Animated { public: @@ -56,7 +62,7 @@ public: unreadFull = unreadMuted = 0; } - HistoryItem *addNewMessage(const MTPmessage &msg, int msgState = 1); // 2 - new read message, 1 - new unread message, 0 - not new message, -1 - searched message + HistoryItem *addNewMessage(const MTPmessage &msg, NewMessageType type); // HistoryItem *addToBack(const MTPgeoChatMessage &msg, bool newMsg = true); typedef QMap TypingHistories; // when typing in this history started @@ -187,12 +193,12 @@ public: clear(); } - HistoryItem *createItem(HistoryBlock *block, const MTPmessage &msg, bool newMsg, bool returnExisting = false); + HistoryItem *createItem(HistoryBlock *block, const MTPmessage &msg, bool applyServiceAction, bool returnExisting = false); HistoryItem *createItemForwarded(HistoryBlock *block, MsgId id, QDateTime date, int32 from, HistoryMessage *msg); HistoryItem *createItemDocument(HistoryBlock *block, MsgId id, int32 flags, MsgId replyTo, QDateTime date, int32 from, DocumentData *doc); HistoryItem *addNewService(MsgId msgId, QDateTime date, const QString &text, int32 flags = 0, HistoryMedia *media = 0, bool newMsg = true); - HistoryItem *addNewMessage(const MTPmessage &msg, bool newMsg = true); + HistoryItem *addNewMessage(const MTPmessage &msg, NewMessageType type); HistoryItem *addToHistory(const MTPmessage &msg); HistoryItem *addNewForwarded(MsgId id, QDateTime date, int32 from, HistoryMessage *item); HistoryItem *addNewDocument(MsgId id, int32 flags, MsgId replyTo, QDateTime date, int32 from, DocumentData *doc); @@ -212,8 +218,9 @@ public: MsgId outboxRead(MsgId upTo); MsgId outboxRead(HistoryItem *wasRead); + HistoryItem *lastImportantMessage() const; + void setUnreadCount(int32 newUnreadCount, bool psUpdate = true); - void setMsgCount(int32 newMsgCount); void setMute(bool newMute); void getNextShowFrom(HistoryBlock *block, int32 i); void addUnreadBar(); @@ -334,16 +341,15 @@ public: private: - HistoryItem *addMessageGroupAfterPrevToBlock(const MTPDmessageGroup &group, const QDateTime &date, HistoryItem *prev, HistoryBlock *block); - HistoryItem *addNewItem(HistoryBlock *to, bool newBlock, HistoryItem *adding, bool newMsg); - -protected: + friend class HistoryBlock; + friend class ChannelHistory; void createInitialDateBlock(const QDateTime &date); HistoryItem *addItemAfterPrevToBlock(HistoryItem *item, HistoryItem *prev, HistoryBlock *block); HistoryItem *addNewInTheMiddle(HistoryItem *newItem, int32 blockIndex, int32 itemIndex); - - friend class HistoryBlock; + HistoryItem *addNewItem(HistoryBlock *to, bool newBlock, HistoryItem *adding, bool newMsg); + HistoryItem *addMessageGroupAfterPrevToBlock(const MTPDmessageGroup &group, HistoryItem *prev, HistoryBlock *block); + HistoryItem *addMessageGroupAfterPrev(HistoryItem *newItem, HistoryItem *prev); }; @@ -372,8 +378,19 @@ public: return _collapse; } + void clearOther() { + _otherNewLoaded = true; + _otherOldLoaded = false; + _otherList.clear(); + } + private: + friend class History; + HistoryItem* addNewChannelMessage(const MTPMessage &msg, NewMessageType type); + HistoryItem *addNewToBlocks(const MTPMessage &msg, NewMessageType type); + void addNewToOther(HistoryItem *item, NewMessageType type); + HistoryGroup *findGroup(MsgId msgId) const; HistoryBlock *findGroupBlock(MsgId msgId) const; HistoryGroup *findGroupInOther(MsgId msgId) const; @@ -383,7 +400,6 @@ private: typedef QList OtherList; OtherList _otherList; bool _otherOldLoaded, _otherNewLoaded; - int32 _otherMsgCount; HistoryCollapse *_collapse; @@ -740,8 +756,8 @@ enum InfoDisplayType { }; inline bool isImportantChannelMessage(int32 flags) { - /*(flags & MTPDmessage_flag_out) || (flags & MTPDmessage_flag_notify_by_from) || */ - return !(flags & MTPDmessage::flag_from_id) && (flags != 0); // always has_from_id || has_views + /**/ + return (flags & MTPDmessage_flag_out) || (flags & MTPDmessage_flag_notify_by_from) || (!(flags & MTPDmessage::flag_from_id) && (flags != 0)); // always has_from_id || has_views } enum HistoryItemType { @@ -1729,6 +1745,7 @@ class HistoryGroup : public HistoryServiceMsg { public: HistoryGroup(History *history, HistoryBlock *block, const MTPDmessageGroup &group, const QDateTime &date); + HistoryGroup(History *history, HistoryBlock *block, HistoryItem *newItem, const QDateTime &date); void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { symbol = 0xFFFF; @@ -1742,7 +1759,10 @@ public: return HistoryItemGroup; } void uniteWith(MsgId minId, MsgId maxId, int32 count); - void uniteWith(const HistoryGroup *other) { + void uniteWith(HistoryItem *item) { + uniteWith(item->id - 1, item->id + 1, 1); + } + void uniteWith(HistoryGroup *other) { uniteWith(other->_minId, other->_maxId, other->_count); } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 346a4b536..8187df46e 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -750,6 +750,10 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { dragActionUpdate(e->globalPos()); } + int32 selectedForForward, selectedForDelete; + getSelectionState(selectedForForward, selectedForDelete); + bool canSendMessages = historyWidget->canSendMessages(hist->peer); + // -2 - has full selected items, but not over, -1 - has selection, but no over, 0 - no selection, 1 - over text, 2 - over full selected items int32 isUponSelected = 0, hasSelected = 0;; if (!_selected.isEmpty()) { @@ -789,7 +793,7 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (isUponSelected > 0) { _menu->addAction(lang(lng_context_copy_selected), this, SLOT(copySelectedText()))->setEnabled(true); } - if (item && item->id > 0 && isUponSelected != 2 && isUponSelected != -2 && (!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) { + if (item && item->id > 0 && isUponSelected != 2 && isUponSelected != -2 && canSendMessages) { _menu->addAction(lang(lng_context_reply_msg), historyWidget, SLOT(onReplyToMessage())); } if (lnkPhoto) { @@ -809,7 +813,7 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { } if (isUponSelected > 1) { _menu->addAction(lang(lng_context_forward_selected), historyWidget, SLOT(onForwardSelected())); - if ((!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) { + if (selectedForDelete == selectedForForward) { _menu->addAction(lang(lng_context_delete_selected), historyWidget, SLOT(onDeleteSelected())); } _menu->addAction(lang(lng_context_clear_selection), historyWidget, SLOT(onClearSelected())); @@ -822,7 +826,7 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_delete_msg), historyWidget, SLOT(deleteMessage()))->setEnabled(true); } } - if (App::hoveredLinkItem()->id > 0 && !App::hoveredLinkItem()->serviceMsg() && (!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) { + if (App::hoveredLinkItem()->id > 0 && !App::hoveredLinkItem()->serviceMsg()) { _menu->addAction(lang(lng_context_select_msg), historyWidget, SLOT(selectMessage()))->setEnabled(true); } App::contextItem(App::hoveredLinkItem()); @@ -837,11 +841,11 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (isUponSelected > 0) { if (!_menu) _menu = new ContextMenu(this); _menu->addAction(lang(lng_context_copy_selected), this, SLOT(copySelectedText()))->setEnabled(true); - if (item && item->id > 0 && isUponSelected != 2 && (!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) { + if (item && item->id > 0 && isUponSelected != 2 && canSendMessages) { _menu->addAction(lang(lng_context_reply_msg), historyWidget, SLOT(onReplyToMessage())); } } else { - if (item && item->id > 0 && isUponSelected != -2 && (!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) { + if (item && item->id > 0 && isUponSelected != -2 && canSendMessages) { if (!_menu) _menu = new ContextMenu(this); _menu->addAction(lang(lng_context_reply_msg), historyWidget, SLOT(onReplyToMessage())); } @@ -882,7 +886,7 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (isUponSelected > 1) { if (!_menu) _menu = new ContextMenu(this); _menu->addAction(lang(lng_context_forward_selected), historyWidget, SLOT(onForwardSelected())); - if ((!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) { + if (selectedForDelete == selectedForForward) { _menu->addAction(lang(lng_context_delete_selected), historyWidget, SLOT(onDeleteSelected())); } _menu->addAction(lang(lng_context_clear_selection), historyWidget, SLOT(onClearSelected())); @@ -897,11 +901,11 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang((msg && msg->uploading()) ? lng_context_cancel_upload : lng_context_delete_msg), historyWidget, SLOT(deleteMessage()))->setEnabled(true); } } - if (item->id > 0 && !item->serviceMsg() && (!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) { + if (item->id > 0 && !item->serviceMsg()) { _menu->addAction(lang(lng_context_select_msg), historyWidget, SLOT(selectMessage()))->setEnabled(true); } } else { - if (App::mousedItem() && !App::mousedItem()->serviceMsg() && App::mousedItem()->id > 0 && (!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) { + if (App::mousedItem() && !App::mousedItem()->serviceMsg() && App::mousedItem()->id > 0) { if (!_menu) _menu = new ContextMenu(this); _menu->addAction(lang(lng_context_select_msg), historyWidget, SLOT(selectMessage()))->setEnabled(true); item = App::mousedItem(); @@ -1065,7 +1069,11 @@ void HistoryList::keyPressEvent(QKeyEvent *e) { } else if (e == QKeySequence::Copy && !_selected.isEmpty()) { copySelectedText(); } else if (e == QKeySequence::Delete) { - historyWidget->onDeleteSelected(); + int32 selectedForForward, selectedForDelete; + getSelectionState(selectedForForward, selectedForDelete); + if (!_selected.isEmpty() && selectedForDelete == selectedForForward) { + historyWidget->onDeleteSelected(); + } } else { e->ignore(); } @@ -1304,17 +1312,22 @@ bool HistoryList::canCopySelected() const { } bool HistoryList::canDeleteSelected() const { - return !_selected.isEmpty() && (_selected.cbegin().value() == FullItemSel) && (!hist->peer->isChannel() || hist->peer->asChannel()->adminned); + if (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel) return false; + int32 selectedForForward, selectedForDelete; + getSelectionState(selectedForForward, selectedForDelete); + return (selectedForForward == selectedForDelete); } void HistoryList::getSelectionState(int32 &selectedForForward, int32 &selectedForDelete) const { selectedForForward = selectedForDelete = 0; for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) { if (i.key()->type() == HistoryItemMsg && i.value() == FullItemSel) { - ++selectedForDelete; - if (!i.key()->serviceMsg() && i.key()->id > 0) { - ++selectedForForward; + if (!hist || !hist->peer || !hist->peer->isChannel() || hist->peer->asChannel()->adminned) { + ++selectedForDelete; + } else if (i.key()->out()) { + ++selectedForDelete; } + ++selectedForForward; } } if (!selectedForDelete && !selectedForForward && !_selected.isEmpty()) { // text selection @@ -2316,6 +2329,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) , _kbShow(this, st::btnBotKbShow) , _kbHide(this, st::btnBotKbHide) , _cmdStart(this, st::btnBotCmdStart) +, _broadcast(this, QString(), true, st::broadcastToggle) , _cmdStartShown(false) , _field(this, st::taMsgField, lang(lng_message_ph)) , _recordAnim(animFunc(this, &HistoryWidget::recordStep)) @@ -2422,7 +2436,6 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _field.setCtrlEnterSubmit(cCtrlEnter()); _field.hide(); - _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width(), _send.height() - 2 * st::sendPadding); _send.hide(); _unblock.hide(); _botStart.hide(); @@ -2435,6 +2448,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _attachEmoji.hide(); _kbShow.hide(); _kbHide.hide(); + _broadcast.hide(); _cmdStart.hide(); _attachDocument.installEventFilter(&_attachType); @@ -2992,8 +3006,8 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { if (_replyToId) { updateReplyTo(); if (!_replyTo) App::api()->requestReplyTo(0, _peer->asChannel(), _replyToId); - resizeEvent(0); } + resizeEvent(0); if (!_previewCancelled) { onPreviewParse(); } @@ -3114,6 +3128,7 @@ void HistoryWidget::updateControlsVisibility() { _attachDocument.hide(); _attachPhoto.hide(); _attachEmoji.hide(); + _broadcast.hide(); _toHistoryEnd.hide(); _collapseComments.hide(); _kbShow.hide(); @@ -3152,6 +3167,7 @@ void HistoryWidget::updateControlsVisibility() { _cmdStart.hide(); _attachDocument.hide(); _attachPhoto.hide(); + _broadcast.hide(); _kbScroll.hide(); _replyForwardPreviewCancel.hide(); } else if (isBotStart()) { @@ -3169,6 +3185,7 @@ void HistoryWidget::updateControlsVisibility() { _cmdStart.hide(); _attachDocument.hide(); _attachPhoto.hide(); + _broadcast.hide(); _kbScroll.hide(); _replyForwardPreviewCancel.hide(); } else { @@ -3193,6 +3210,7 @@ void HistoryWidget::updateControlsVisibility() { _cmdStart.hide(); _attachDocument.hide(); _attachPhoto.hide(); + _broadcast.hide(); if (_kbShown) { _kbScroll.show(); } else { @@ -3235,6 +3253,11 @@ void HistoryWidget::updateControlsVisibility() { _attachDocument.show(); _attachPhoto.hide(); } + if (hasBroadcastToggle()) { + _broadcast.show(); + } else { + _broadcast.hide(); + } } if (_replyToId || readyToForward() || (_previewData && _previewData->pendingTill >= 0) || _kbReplyTo) { if (_replyForwardPreviewCancel.isHidden()) { @@ -3253,6 +3276,7 @@ void HistoryWidget::updateControlsVisibility() { _botStart.hide(); _attachDocument.hide(); _attachPhoto.hide(); + _broadcast.hide(); _kbScroll.hide(); _replyForwardPreviewCancel.hide(); _attachDocument.hide(); @@ -3561,6 +3585,11 @@ void HistoryWidget::delayedShowAt(MsgId showAtMsgId) { } else if (_delayedShowAtMsgId > 0) { offset = -loadCount / 2; from = _delayedShowAtMsgId; + if (HistoryItem *item = App::histItemById(_channel, _delayedShowAtMsgId)) { + if (!item->isImportant()) { + loadImportant = false; + } + } } else if (_delayedShowAtMsgId < 0 && _history->isChannel()) { if (_delayedShowAtMsgId == SwitchAtTopMsgId) { loadImportant = true; @@ -3635,7 +3664,19 @@ void HistoryWidget::onHistoryToEnd() { } void HistoryWidget::onCollapseComments() { - showPeerHistory(_peer->id, SwitchAtTopMsgId); + MsgId switchAt = SwitchAtTopMsgId; + bool collapseCommentsVisible = !_showAnim.animating() && _history && !_firstLoadRequest && _history->isChannel() && !_history->asChannelHistory()->onlyImportant(); + if (collapseCommentsVisible) { + if (HistoryItem *collapse = _history->asChannelHistory()->collapse()) { + if (!collapse->detached()) { + int32 collapseY = (_list->height() - _history->height - st::historyPadding) + collapse->y + collapse->block()->y - _scroll.scrollTop(); + if (collapseY >= 0 && collapseY < _scroll.height()) { + switchAt = collapse->id; + } + } + } + } + showPeerHistory(_peer->id, switchAt); } void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { @@ -3648,7 +3689,7 @@ void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { fastShowAtEnd(_history); WebPageId webPageId = _previewCancelled ? 0xFFFFFFFFFFFFFFFFULL : ((_previewData && _previewData->pendingTill >= 0) ? _previewData->id : 0); - App::main()->sendPreparedText(_history, text, replyTo, webPageId); + App::main()->sendPreparedText(_history, text, replyTo, _broadcast.checked(), webPageId); setFieldText(QString()); _saveDraftText = true; @@ -3756,14 +3797,14 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - bool fromChannelName = p->isChannel(); + bool fromChannelName = p->isChannel() && p->asChannel()->adminned && _broadcast.checked(); if (fromChannelName) { sendFlags |= MTPmessages_SendMessage_flag_broadcast; flags |= MTPDmessage::flag_views; } else { flags |= MTPDmessage::flag_from_id; } - h->addNewMessage(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(peer), MTPPeer(), MTPint(), MTP_int(replyToId()), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup, MTPnullEntities, MTP_int(1))); + h->addNewMessage(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(peer), MTPPeer(), MTPint(), MTP_int(replyToId()), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup, MTPnullEntities, MTP_int(1)), NewMessageUnread); h->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), p->input, MTP_int(replyTo), MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendMessageFail), 0, 0, h->sendRequestId); App::historyRegRandom(randomId, newId); @@ -3811,6 +3852,7 @@ void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTo _attachPhoto.hide(); _attachEmoji.hide(); _attachMention.hide(); + _broadcast.hide(); _kbShow.hide(); _kbHide.hide(); _cmdStart.hide(); @@ -4072,7 +4114,7 @@ void HistoryWidget::sendBotCommand(const QString &cmd, MsgId replyTo) { // reply toSend += '@' + username; } - App::main()->sendPreparedText(_history, toSend, replyTo ? ((!_peer->isUser()/* && (botStatus == 0 || botStatus == 2)*/) ? replyTo : -1) : 0); + App::main()->sendPreparedText(_history, toSend, false, replyTo ? ((!_peer->isUser()/* && (botStatus == 0 || botStatus == 2)*/) ? replyTo : -1) : 0); if (replyTo) { cancelReply(); if (_keyboard.singleUse() && _keyboard.hasMarkup() && lastKeyboardUsed) { @@ -4189,7 +4231,7 @@ void HistoryWidget::updateDragAreas() { resizeEvent(0); } -bool HistoryWidget::canSendMessages(PeerData *peer) { +bool HistoryWidget::canSendMessages(PeerData *peer) const { if (peer) { if (peer->isUser()) { return peer->asUser()->access != UserNoAccess; @@ -4202,10 +4244,14 @@ bool HistoryWidget::canSendMessages(PeerData *peer) { return false; } -bool HistoryWidget::readyToForward() { +bool HistoryWidget::readyToForward() const { return _canSendMessages && App::main()->hasForwardingItems(); } +bool HistoryWidget::hasBroadcastToggle() const { + return _history && _history->peer->isChannel() && _history->peer->asChannel()->adminned && !_history->peer->asChannel()->isBroadcast; +} + bool HistoryWidget::isBotStart() const { if (!_peer || !_peer->isUser() || !_peer->asUser()->botInfo) return false; return !_peer->asUser()->botInfo->startToken.isEmpty() || (_history->isEmpty() && !_history->lastMsg); @@ -4503,7 +4549,8 @@ void HistoryWidget::onFieldResize() { _botStart.setGeometry(0, _attachDocument.y(), width(), _botStart.height()); _unblock.setGeometry(0, _attachDocument.y(), width(), _unblock.height()); _send.move(width() - _send.width(), _attachDocument.y()); - _attachEmoji.move(_send.x() - _attachEmoji.width(), height() - kbh - _attachEmoji.height()); + _broadcast.move(_send.x() - _broadcast.width(), height() - kbh - _broadcast.height()); + _attachEmoji.move((hasBroadcastToggle() ? _broadcast.x() : _send.x()) - _attachEmoji.width(), height() - kbh - _attachEmoji.height()); _kbShow.move(_attachEmoji.x() - _kbShow.width(), height() - kbh - _kbShow.height()); _kbHide.move(_attachEmoji.x(), _attachEmoji.y()); _cmdStart.move(_attachEmoji.x() - _cmdStart.width(), height() - kbh - _cmdStart.height()); @@ -4674,19 +4721,19 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { int32 flags = newMessageFlags(h->peer) | MTPDmessage::flag_media; // unread, out if (img.replyTo) flags |= MTPDmessage::flag_reply_to_msg_id; - bool fromChannelName = h->peer->isChannel(); + bool fromChannelName = h->peer->isChannel() && h->peer->asChannel()->adminned && _broadcast.checked(); if (fromChannelName) { flags |= MTPDmessage::flag_views; } else { flags |= MTPDmessage::flag_from_id; } if (img.type == ToPreparePhoto) { - h->addNewMessage(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo, MTP_string("")), MTPnullMarkup, MTPnullEntities, MTP_int(1))); + h->addNewMessage(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo, MTP_string("")), MTPnullMarkup, MTPnullEntities, MTP_int(1)), NewMessageUnread); } else if (img.type == ToPrepareDocument) { - h->addNewMessage(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup, MTPnullEntities, MTP_int(1))); + h->addNewMessage(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup, MTPnullEntities, MTP_int(1)), NewMessageUnread); } else if (img.type == ToPrepareAudio) { flags |= MTPDmessage_flag_media_unread; - h->addNewMessage(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup, MTPnullEntities, MTP_int(1))); + h->addNewMessage(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup, MTPnullEntities, MTP_int(1)), NewMessageUnread); } if (_peer && img.peer == _peer->id) { @@ -4716,7 +4763,7 @@ void HistoryWidget::onPhotoUploaded(const FullMsgId &newId, const MTPInputFile & sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - bool fromChannelName = hist->peer->isChannel(); + bool fromChannelName = hist->peer->isChannel() && hist->peer->asChannel()->adminned && item->fromChannel(); if (fromChannelName) { sendFlags |= MTPmessages_SendMessage_flag_broadcast; } @@ -4761,7 +4808,7 @@ void HistoryWidget::onDocumentUploaded(const FullMsgId &newId, const MTPInputFil sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - bool fromChannelName = hist->peer->isChannel(); + bool fromChannelName = hist->peer->isChannel() && hist->peer->asChannel()->adminned && item->fromChannel(); if (fromChannelName) { sendFlags |= MTPmessages_SendMessage_flag_broadcast; } @@ -4790,7 +4837,7 @@ void HistoryWidget::onThumbDocumentUploaded(const FullMsgId &newId, const MTPInp sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - bool fromChannelName = hist->peer->isChannel(); + bool fromChannelName = hist->peer->isChannel() && hist->peer->asChannel()->adminned && item->fromChannel(); if (fromChannelName) { sendFlags |= MTPmessages_SendMessage_flag_broadcast; } @@ -4817,7 +4864,7 @@ void HistoryWidget::onAudioUploaded(const FullMsgId &newId, const MTPInputFile & sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - bool fromChannelName = hist->peer->isChannel(); + bool fromChannelName = hist->peer->isChannel() && hist->peer->asChannel()->adminned && item->fromChannel(); if (fromChannelName) { sendFlags |= MTPmessages_SendMessage_flag_broadcast; } @@ -4988,7 +5035,7 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { updateListSize(App::main() ? App::main()->contentScrollAddToY() : 0); bool kbShowShown = _history && !_kbShown && _keyboard.hasMarkup(); - _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - (kbShowShown ? _kbShow.width() : 0) - (_cmdStartShown ? _cmdStart.width() : 0), _field.height()); + _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - (kbShowShown ? _kbShow.width() : 0) - (_cmdStartShown ? _cmdStart.width() : 0) - (hasBroadcastToggle() ? _broadcast.width() : 0), _field.height()); _toHistoryEnd.move((width() - _toHistoryEnd.width()) / 2, _scroll.y() + _scroll.height() - _toHistoryEnd.height() - st::historyToEndSkip); updateCollapseCommentsVisibility(); @@ -4996,7 +5043,8 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { _send.move(width() - _send.width(), _attachDocument.y()); _botStart.setGeometry(0, _attachDocument.y(), width(), _botStart.height()); _unblock.setGeometry(0, _attachDocument.y(), width(), _unblock.height()); - _attachEmoji.move(_send.x() - _attachEmoji.width(), height() - kbh - _attachEmoji.height()); + _broadcast.move(_send.x() - _broadcast.width(), height() - kbh - _broadcast.height()); + _attachEmoji.move((hasBroadcastToggle() ? _broadcast.x() : _send.x()) - _attachEmoji.width(), height() - kbh - _attachEmoji.height()); _kbShow.move(_attachEmoji.x() - _kbShow.width(), height() - kbh - _kbShow.height()); _kbHide.move(_attachEmoji.x(), _attachEmoji.y()); _cmdStart.move(_attachEmoji.x() - _cmdStart.width(), height() - kbh - _cmdStart.height()); @@ -5295,11 +5343,13 @@ void HistoryWidget::updateCollapseCommentsVisibility() { bool collapseCommentsVisible = !_showAnim.animating() && _history && !_firstLoadRequest && _history->isChannel() && !_history->asChannelHistory()->onlyImportant(); if (collapseCommentsVisible) { if (HistoryItem *collapse = _history->asChannelHistory()->collapse()) { - int32 collapseY = (_list->height() - _history->height - st::historyPadding) + collapse->y + collapse->block()->y - _scroll.scrollTop(); - if (collapseY > _scroll.height()) { - collapseCommentsTop += qMin(collapseY - _scroll.height() - collapse->height(), 0); - } else { - collapseCommentsTop += qMax(collapseY, 0); + if (!collapse->detached()) { + int32 collapseY = (_list->height() - _history->height - st::historyPadding) + collapse->y + collapse->block()->y - _scroll.scrollTop(); + if (collapseY > _scroll.height()) { + collapseCommentsTop += qMin(collapseY - _scroll.height() - collapse->height(), 0); + } else { + collapseCommentsTop += qMax(collapseY, 0); + } } } } @@ -5419,7 +5469,7 @@ void HistoryWidget::onStickerSend(DocumentData *sticker) { flags |= MTPDmessage::flag_reply_to_msg_id; sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - bool fromChannelName = _history->peer->isChannel(); + bool fromChannelName = _history->peer->isChannel() && _history->peer->asChannel()->adminned && _broadcast.checked(); if (fromChannelName) { sendFlags |= MTPmessages_SendMessage_flag_broadcast; } else { @@ -5462,7 +5512,7 @@ void HistoryWidget::setFieldText(const QString &text) { void HistoryWidget::onReplyToMessage() { HistoryItem *to = App::contextItem(); - if (!to || to->id <= 0 || (_peer->isChannel() && !_peer->asChannel()->adminned)) return; + if (!to || to->id <= 0 || !_canSendMessages) return; App::main()->cancelForwarding(); @@ -5723,7 +5773,7 @@ void HistoryWidget::onForwardSelected() { } void HistoryWidget::onDeleteSelected() { - if (!_list || (peer()->isChannel() && !peer()->asChannel()->adminned)) return; + if (!_list) return; SelectedItemSet sel; _list->fillSelectedItems(sel); @@ -5830,8 +5880,8 @@ void HistoryWidget::updateTopBarSelection() { int32 selectedForForward, selectedForDelete; _list->getSelectionState(selectedForForward, selectedForDelete); - _selCount = selectedForDelete ? selectedForDelete : selectedForForward; - App::main()->topBar()->showSelected(_selCount > 0 ? _selCount : 0); + _selCount = selectedForForward ? selectedForForward : selectedForDelete; + App::main()->topBar()->showSelected(_selCount > 0 ? _selCount : 0, (selectedForDelete == selectedForForward)); updateControlsVisibility(); updateListSize(); if (!App::wnd()->layerShown() && !App::passcoded()) { diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 7c302a00b..e57dab693 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -531,6 +531,7 @@ public: void ctrlEnterSubmitUpdated(); void setInnerFocus(); + bool canSendMessages(PeerData *peer) const; ~HistoryWidget(); @@ -690,8 +691,8 @@ private: void updateDragAreas(); - bool canSendMessages(PeerData *peer); - bool readyToForward(); + bool readyToForward() const; + bool hasBroadcastToggle() const; PeerData *_peer, *_clearPeer; // cache _peer in _clearPeer when showing clear history box ChannelId _channel; @@ -725,6 +726,7 @@ private: FlatButton _send, _unblock, _botStart; mtpRequestId _unblockRequest, _reportSpamRequest; IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide, _cmdStart; + FlatCheckbox _broadcast; bool _cmdStartShown; MessageField _field; Animation _recordAnim, _recordingAnim; diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index f205353f2..8fde432e2 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -33,7 +33,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "audio.h" TopBarWidget::TopBarWidget(MainWidget *w) : TWidget(w), - a_over(0), _drawShadow(true), _selPeer(0), _selCount(0), _selStrLeft(-st::topBarButton.width / 2), _selStrWidth(0), _animating(false), + a_over(0), _drawShadow(true), _selPeer(0), _selCount(0), _canDelete(false), _selStrLeft(-st::topBarButton.width / 2), _selStrWidth(0), _animating(false), _clearSelection(this, lang(lng_selected_clear), st::topBarButton), _forward(this, lang(lng_selected_forward), st::topBarActionButton), _delete(this, lang(lng_selected_delete), st::topBarActionButton), @@ -321,10 +321,10 @@ void TopBarWidget::showAll() { _deleteContact.hide(); if (!p && _selCount) { _clearSelection.show(); - if ((h && h->isChannel() && !h->asChannel()->adminned) || (o && o->isChannel() && !o->asChannel()->adminned)) { - _delete.hide(); - } else { + if (_canDelete) { _delete.show(); + } else { + _delete.hide(); } _forward.show(); _mediaType.hide(); @@ -347,10 +347,11 @@ void TopBarWidget::showAll() { resizeEvent(0); } -void TopBarWidget::showSelected(uint32 selCount) { +void TopBarWidget::showSelected(uint32 selCount, bool canDelete) { PeerData *p = App::main() ? App::main()->profilePeer() : 0; _selPeer = App::main()->overviewPeer() ? App::main()->overviewPeer() : App::main()->peer(); _selCount = selCount; + _canDelete = canDelete; _selStr = (_selCount > 0) ? lng_selected_count(lt_count, _selCount) : QString(); _selStrWidth = st::btnDefLink.font->m.width(_selStr); setCursor((!p && _selCount) ? style::cur_default : style::cur_pointer); @@ -930,6 +931,7 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu LOG(("API Error: received messages.channelMessages when no channel was passed! (MainWidget::checkedHistory)")); } + // CHANNELS_TODO use collapsed to remove last important messages from not important after History::addNewMessage App::feedUsers(d.vusers); App::feedChats(d.vchats); v = &d.vmessages.c_vector().v; @@ -943,14 +945,14 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu if (history.peer() == peer) { showDialogs(); } - } else { + } else { // CHANNELS_TODO History *h = App::historyLoaded(peer->id); if (h) Local::addSavedPeer(peer, h->lastMsgDate); } } else { History *h = App::historyLoaded(peer->id); if (!h->lastMsg) { - h->addNewMessage((*v)[0], 0); + h->addNewMessage((*v)[0], NewMessageLast); } } } @@ -1135,7 +1137,7 @@ QString cleanMessage(const QString &text) { return result; } -void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId replyTo, WebPageId webPageId) { +void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId replyTo, bool broadcast, WebPageId webPageId) { saveRecentHashtags(text); QString sendingText, leftText = text; if (replyTo < 0) replyTo = history.replyToId(); @@ -1163,7 +1165,7 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl media = MTP_messageMediaWebPage(MTP_webPagePending(MTP_long(page->id), MTP_int(page->pendingTill))); flags |= MTPDmessage::flag_media; } - bool fromChannelName = hist->peer->isChannel(); + bool fromChannelName = hist->peer->isChannel() && hist->peer->asChannel()->adminned && broadcast; if (fromChannelName) { sendFlags |= MTPmessages_SendMessage_flag_broadcast; flags |= MTPDmessage::flag_views; @@ -1171,19 +1173,19 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl flags |= MTPDmessage::flag_from_id; } MTPVector localEntities = linksToMTP(textParseLinks(sendingText, itemTextParseOptions(hist, App::self()).flags)); - hist->addNewMessage(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(hist->peer->id), MTPPeer(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, localEntities, MTP_int(1))); + hist->addNewMessage(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(hist->peer->id), MTPPeer(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, localEntities, MTP_int(1)), NewMessageUnread); hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup, localEntities), rpcDone(&MainWidget::sentUpdatesReceived, randomId), rpcFail(&MainWidget::sendMessageFail), 0, 0, hist->sendRequestId); } finishForwarding(hist); } -void MainWidget::sendMessage(History *hist, const QString &text, MsgId replyTo) { +void MainWidget::sendMessage(History *hist, const QString &text, MsgId replyTo, bool broadcast) { MsgId fixInScrollMsgId = 0; int32 fixInScrollMsgTop = 0; hist->getReadyFor(ShowAtTheEndMsgId, fixInScrollMsgId, fixInScrollMsgTop); readServerHistory(hist, false); - sendPreparedText(hist, history.prepareMessage(text), replyTo); + sendPreparedText(hist, history.prepareMessage(text), replyTo, broadcast); } void MainWidget::saveRecentHashtags(const QString &text) { @@ -1553,7 +1555,7 @@ void MainWidget::overviewLoaded(History *h, const MTPmessages_Messages &msgs, mt } for (QVector::const_iterator i = v->cbegin(), e = v->cend(); i != e; ++i) { - HistoryItem *item = App::histories().addNewMessage(*i, -1); + HistoryItem *item = App::histories().addNewMessage(*i, NewMessageExisting); if (item && h->overviewIds[type].constFind(item->id) == h->overviewIds[type].cend()) { h->overviewIds[type].insert(item->id, NullType()); h->overview[type].push_front(item->id); @@ -1981,13 +1983,13 @@ void MainWidget::dialogsCancelled() { history.activate(); } -void MainWidget::serviceNotification(const QString &msg, const MTPMessageMedia &media, bool unread) { - int32 flags = (unread ? MTPDmessage_flag_unread : 0) | MTPDmessage::flag_entities | MTPDmessage::flag_from_id; +void MainWidget::serviceNotification(const QString &msg, const MTPMessageMedia &media) { + int32 flags = MTPDmessage_flag_unread | MTPDmessage::flag_entities | MTPDmessage::flag_from_id; QString sendingText, leftText = msg; HistoryItem *item = 0; while (textSplit(sendingText, leftText, MaxMessageSize)) { MTPVector localEntities = linksToMTP(textParseLinks(sendingText, _historyTextOptions.flags)); - item = App::histories().addNewMessage(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTPPeer(), MTPint(), MTPint(), MTP_int(unixtime()), MTP_string(sendingText), media, MTPnullMarkup, localEntities, MTPint()), unread ? 1 : 2); + item = App::histories().addNewMessage(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTPPeer(), MTPint(), MTPint(), MTP_int(unixtime()), MTP_string(sendingText), media, MTPnullMarkup, localEntities, MTPint()), NewMessageUnread); } if (item) { history.peerMessagesUpdated(item->history()->peer->id); @@ -2000,14 +2002,14 @@ void MainWidget::serviceHistoryDone(const MTPmessages_Messages &msgs) { const MTPDmessages_messages &d(msgs.c_messages_messages()); App::feedUsers(d.vusers); App::feedChats(d.vchats); - App::feedMsgs(d.vmessages); + App::feedMsgs(d.vmessages, NewMessageLast); } break; case mtpc_messages_messagesSlice: { const MTPDmessages_messagesSlice &d(msgs.c_messages_messagesSlice()); App::feedUsers(d.vusers); App::feedChats(d.vchats); - App::feedMsgs(d.vmessages); + App::feedMsgs(d.vmessages, NewMessageLast); } break; case mtpc_messages_channelMessages: { @@ -2019,7 +2021,7 @@ void MainWidget::serviceHistoryDone(const MTPmessages_Messages &msgs) { App::feedUsers(d.vusers); App::feedChats(d.vchats); - App::feedMsgs(d.vmessages); + App::feedMsgs(d.vmessages, NewMessageLast); } break; } @@ -2193,6 +2195,8 @@ void MainWidget::showPeerHistory(quint64 peerId, qint32 showAtMsgId, bool back) back = true; } + PeerData *wasActivePeer = activePeer(); + App::wnd()->hideLayer(); if (_hider) { _hider->startHide(); @@ -2258,6 +2262,9 @@ void MainWidget::showPeerHistory(quint64 peerId, qint32 showAtMsgId, bool back) if (noPeer) { _topBar.hide(); resizeEvent(0); + } else if (wasActivePeer != activePeer() && activePeer()->isChannel()) { + activePeer()->asChannel()->ptsWaitingForShortPoll(true); + ptsWaiterStartTimerFor(history.peer()->asChannel(), WaitForChannelGetDifference); } if (!cWideMode() && !dialogs.isHidden()) dialogs.hide(); if (!animating()) { @@ -2269,6 +2276,9 @@ void MainWidget::showPeerHistory(quint64 peerId, qint32 showAtMsgId, bool back) } } } + //if (wasActivePeer && wasActivePeer->isChannel() && activePeer() != wasActivePeer) { + // wasActivePeer->asChannel()->ptsStopShortPoll(); + //} if (!dialogs.isHidden()) { dialogs.scrollToPeer(peerId, showAtMsgId); @@ -2874,8 +2884,13 @@ void MainWidget::gotChannelDifference(ChannelData *channel, const MTPupdates_Cha App::feedUsers(d.vusers); App::feedChats(d.vchats); - App::feedMsgs(d.vmessages); - if (History *h = App::historyLoaded(channel->id)) { + History *h = App::historyLoaded(channel->id); + if (h) { + h->setNotLoadedAtBottom(); + h->asChannelHistory()->clearOther(); + } + App::feedMsgs(d.vmessages, NewMessageLast); + if (h) { if (HistoryItem *item = App::histItemById(peerToChannel(channel->id), d.vtop_important_message.v)) { h->setLastMessage(item); } @@ -2883,14 +2898,14 @@ void MainWidget::gotChannelDifference(ChannelData *channel, const MTPupdates_Cha h->setUnreadCount(d.vunread_important_count.v, false); h->inboxReadBefore = d.vread_inbox_max_id.v + 1; } - h->setNotLoadedAtBottom(); + if (d.vunread_count.v >= h->asChannelHistory()->unreadCountAll) { + h->asChannelHistory()->unreadCountAll = d.vunread_count.v; + h->inboxReadBefore = d.vread_inbox_max_id.v + 1; + } if (history.peer() == channel) { history.updateToEndVisibility(); - if (d.vunread_count.v >= h->asChannelHistory()->unreadCountAll) { - h->asChannelHistory()->unreadCountAll = d.vunread_count.v; - h->inboxReadBefore = d.vread_inbox_max_id.v + 1; - } } +// h->asChannelHistory()->getRangeDifference(); } if (d.has_timeout()) timeout = d.vtimeout.v; @@ -2904,7 +2919,7 @@ void MainWidget::gotChannelDifference(ChannelData *channel, const MTPupdates_Cha App::feedUsers(d.vusers); App::feedChats(d.vchats, false); feedMessageIds(d.vother_updates); - App::feedMsgs(d.vnew_messages, 1); + App::feedMsgs(d.vnew_messages, NewMessageUnread); feedUpdates(d.vother_updates, true); if (d.has_timeout()) timeout = d.vtimeout.v; @@ -2918,8 +2933,9 @@ void MainWidget::gotChannelDifference(ChannelData *channel, const MTPupdates_Cha if (!(flags & MTPupdates_ChannelDifference_flag_final)) { MTP_LOG(0, ("getChannelDifference { good - after not final channelDifference was received }%1").arg(cTestMode() ? " TESTMODE" : "")); getChannelDifference(channel); - } else if (timeout) { -// QTimer::singleShot(timeout * 1000, this, SLOT(getDifference())); + } else if (activePeer() == channel) { + channel->ptsWaitingForShortPoll(true); + ptsWaiterStartTimerFor(channel, timeout ? (timeout * 1000) : WaitForChannelGetDifference); } App::emitPeerUpdated(); @@ -3073,7 +3089,7 @@ void MainWidget::feedDifference(const MTPVector &users, const MTPVector App::feedUsers(users, false); App::feedChats(chats, false); feedMessageIds(other); - App::feedMsgs(msgs, 1); + App::feedMsgs(msgs, NewMessageUnread); feedUpdates(other, true); history.peerMessagesUpdated(); } @@ -3182,7 +3198,23 @@ void MainWidget::getChannelDifference(ChannelData *channel, GetChannelDifference LOG(("Getting channel difference for %1").arg(channel->pts())); channel->ptsSetRequesting(true); - MTP::send(MTPupdates_GetChannelDifference(channel->inputChannel, MTP_channelMessagesFilterCollapsed(), MTP_int(channel->pts()), MTP_int(MTPChannelGetDifferenceLimit)), rpcDone(&MainWidget::gotChannelDifference, channel), rpcFail(&MainWidget::failChannelDifference, channel)); + MTPChannelMessagesFilter filter; + if (activePeer() == channel) { + filter = MTP_channelMessagesFilterEmpty(); + } else { + filter = MTP_channelMessagesFilterCollapsed(); + if (History *history = App::historyLoaded(channel->id)) { + if (!history->asChannelHistory()->onlyImportant()) { + MsgId fixInScrollMsgId = 0; + int32 fixInScrollMsgTop = 0; + history->asChannelHistory()->getSwitchReadyFor(SwitchAtTopMsgId, fixInScrollMsgId, fixInScrollMsgTop); + history->getReadyFor(ShowAtTheEndMsgId, fixInScrollMsgId, fixInScrollMsgTop); + history->lastWidth = 0; + history->lastScrollTop = INT_MAX; + } + } + } + MTP::send(MTPupdates_GetChannelDifference(channel->inputChannel, filter, MTP_int(channel->pts()), MTP_int(3/*MTPChannelGetDifferenceLimit*/)), rpcDone(&MainWidget::gotChannelDifference, channel), rpcFail(&MainWidget::failChannelDifference, channel)); } void MainWidget::mtpPing() { @@ -3792,7 +3824,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates, uint64 randomId) { } int32 flags = d.vflags.v | MTPDmessage::flag_from_id; bool out = (flags & MTPDmessage_flag_out); - HistoryItem *item = App::histories().addNewMessage(MTP_message(MTP_int(flags), d.vid, out ? MTP_int(MTP::authedId()) : d.vuser_id, MTP_peerUser(out ? d.vuser_id : MTP_int(MTP::authedId())), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, d.has_entities() ? d.ventities : MTPnullEntities, MTPint())); + HistoryItem *item = App::histories().addNewMessage(MTP_message(MTP_int(flags), d.vid, out ? MTP_int(MTP::authedId()) : d.vuser_id, MTP_peerUser(out ? d.vuser_id : MTP_int(MTP::authedId())), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, d.has_entities() ? d.ventities : MTPnullEntities, MTPint()), NewMessageUnread); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } @@ -3813,7 +3845,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates, uint64 randomId) { } int32 flags = d.vflags.v | MTPDmessage::flag_from_id; bool out = (flags & MTPDmessage_flag_out); - HistoryItem *item = App::histories().addNewMessage(MTP_message(MTP_int(flags), d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, d.has_entities() ? d.ventities : MTPnullEntities, MTPint())); + HistoryItem *item = App::histories().addNewMessage(MTP_message(MTP_int(flags), d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, d.has_entities() ? d.ventities : MTPnullEntities, MTPint()), NewMessageUnread); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } @@ -3876,7 +3908,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { App::checkEntitiesAndViewsUpdate(d.vmessage.c_message()); } - HistoryItem *item = App::histories().addNewMessage(d.vmessage); + HistoryItem *item = App::histories().addNewMessage(d.vmessage, NewMessageUnread); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } @@ -4159,9 +4191,9 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { const MTPDupdateServiceNotification &d(update.c_updateServiceNotification()); if (d.vpopup.v) { App::wnd()->showLayer(new ConfirmBox(qs(d.vmessage), true)); - App::wnd()->serviceNotification(qs(d.vmessage), false, d.vmedia); + App::wnd()->serviceNotification(qs(d.vmessage), d.vmedia); } else { - App::wnd()->serviceNotification(qs(d.vmessage), true, d.vmedia); + App::wnd()->serviceNotification(qs(d.vmessage), d.vmedia); } } break; @@ -4169,6 +4201,11 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { const MTPDupdatePrivacy &d(update.c_updatePrivacy()); } break; + case mtpc_updateChannel: { + const MTPDupdateChannel &d(update.c_updateChannel()); + App::markPeerUpdated(App::channelLoaded(d.vchannel_id.v)); + } break; + case mtpc_updateNewChannelMessage: { const MTPDupdateNewChannelMessage &d(update.c_updateNewChannelMessage()); PeerId peer = peerFromMessage(d.vmessage); @@ -4181,7 +4218,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { App::checkEntitiesAndViewsUpdate(d.vmessage.c_message()); } - HistoryItem *item = App::histories().addNewMessage(d.vmessage); + HistoryItem *item = App::histories().addNewMessage(d.vmessage, NewMessageUnread); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 72e7a31f2..4ee446def 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -50,7 +50,7 @@ public: void startAnim(); void stopAnim(); void showAll(); - void showSelected(uint32 selCount); + void showSelected(uint32 selCount, bool canDelete = false); FlatButton *mediaTypeButton(); @@ -79,6 +79,7 @@ private: PeerData *_selPeer; uint32 _selCount; + bool _canDelete; QString _selStr; int32 _selStrLeft, _selStrWidth; @@ -311,8 +312,8 @@ public: DialogsIndexed &contactsList(); DialogsIndexed &dialogsList(); - void sendMessage(History *history, const QString &text, MsgId replyTo); - void sendPreparedText(History *hist, const QString &text, MsgId replyTo, WebPageId webPageId = 0); + void sendMessage(History *history, const QString &text, MsgId replyTo, bool broadcast); + void sendPreparedText(History *hist, const QString &text, MsgId replyTo, bool broadcast, WebPageId webPageId = 0); void saveRecentHashtags(const QString &text); void readServerHistory(History *history, bool force = true); @@ -338,7 +339,7 @@ public: void showAddContact(); void showNewGroup(); - void serviceNotification(const QString &msg, const MTPMessageMedia &media, bool unread); + void serviceNotification(const QString &msg, const MTPMessageMedia &media); void serviceHistoryDone(const MTPmessages_Messages &msgs); bool serviceHistoryFail(const RPCError &error); diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index 1e0d64be7..7acd65367 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -1302,15 +1302,18 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" participants: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 2: to.add(" about: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" read_inbox_max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" unread_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" unread_important_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 6: to.add(" chat_photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 7: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 8: to.add(" exported_invite: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" participants_count: "); ++stages.back(); if (flag & MTPDchannelFull::flag_participants_count) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 0 IN FIELD flags ]"); } break; + case 4: to.add(" admins_count: "); ++stages.back(); if (flag & MTPDchannelFull::flag_admins_count) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break; + case 5: to.add(" kicked_count: "); ++stages.back(); if (flag & MTPDchannelFull::flag_kicked_count) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; + case 6: to.add(" read_inbox_max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 7: to.add(" unread_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 8: to.add(" unread_important_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 9: to.add(" chat_photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 10: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 11: to.add(" exported_invite: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -4576,23 +4579,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_channelParticipants: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ channelParticipants"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" channel_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" participants_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" self_participant: "); ++stages.back(); if (flag & MTPDchannelParticipants::flag_self_participant) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 0 IN FIELD flags ]"); } break; - case 4: to.add(" participants: "); ++stages.back(); if (flag & MTPDchannelParticipants::flag_participants) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_messageRange: if (stage) { to.add(",\n").addSpaces(lev); diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index 520287354..947a09276 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -138,7 +138,7 @@ enum { mtpc_channel = 0x678e9587, mtpc_channelForbidden = 0x2d85832c, mtpc_chatFull = 0x2e02a614, - mtpc_channelFull = 0x36949a50, + mtpc_channelFull = 0xfab31aa3, mtpc_chatParticipant = 0xc8d7493e, mtpc_chatParticipantsForbidden = 0xfc900c2b, mtpc_chatParticipants = 0x7841b415, @@ -401,7 +401,6 @@ enum { mtpc_inputChannelEmpty = 0xee8c1e86, mtpc_inputChannel = 0xafeb712e, mtpc_contacts_resolvedPeer = 0x7f077ad9, - mtpc_channelParticipants = 0xdee6d213, mtpc_messageRange = 0xae30253, mtpc_messageGroup = 0xe8346f53, mtpc_updates_channelDifferenceEmpty = 0x3e11affb, @@ -1136,9 +1135,6 @@ class MTPDinputChannel; class MTPcontacts_resolvedPeer; class MTPDcontacts_resolvedPeer; -class MTPchannelParticipants; -class MTPDchannelParticipants; - class MTPmessageRange; class MTPDmessageRange; @@ -1317,7 +1313,6 @@ typedef MTPBoxed MTPhelp_AppChangelog; typedef MTPBoxed MTPMessageEntity; typedef MTPBoxed MTPInputChannel; typedef MTPBoxed MTPcontacts_ResolvedPeer; -typedef MTPBoxed MTPChannelParticipants; typedef MTPBoxed MTPMessageRange; typedef MTPBoxed MTPMessageGroup; typedef MTPBoxed MTPupdates_ChannelDifference; @@ -3308,7 +3303,7 @@ private: explicit MTPchatFull(MTPDchannelFull *_data); friend MTPchatFull MTP_chatFull(MTPint _id, const MTPChatParticipants &_participants, const MTPPhoto &_chat_photo, const MTPPeerNotifySettings &_notify_settings, const MTPExportedChatInvite &_exported_invite, const MTPVector &_bot_info); - friend MTPchatFull MTP_channelFull(MTPint _id, const MTPChannelParticipants &_participants, const MTPstring &_about, MTPint _read_inbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPhoto &_chat_photo, const MTPPeerNotifySettings &_notify_settings, const MTPExportedChatInvite &_exported_invite); + friend MTPchatFull MTP_channelFull(MTPint _flags, MTPint _id, const MTPstring &_about, MTPint _participants_count, MTPint _admins_count, MTPint _kicked_count, MTPint _read_inbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPhoto &_chat_photo, const MTPPeerNotifySettings &_notify_settings, const MTPExportedChatInvite &_exported_invite); mtpTypeId _type; }; @@ -8236,37 +8231,6 @@ private: }; typedef MTPBoxed MTPcontacts_ResolvedPeer; -class MTPchannelParticipants : private mtpDataOwner { -public: - MTPchannelParticipants(); - MTPchannelParticipants(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_channelParticipants) : mtpDataOwner(0) { - read(from, end, cons); - } - - MTPDchannelParticipants &_channelParticipants() { - if (!data) throw mtpErrorUninitialized(); - split(); - return *(MTPDchannelParticipants*)data; - } - const MTPDchannelParticipants &c_channelParticipants() const { - if (!data) throw mtpErrorUninitialized(); - return *(const MTPDchannelParticipants*)data; - } - - uint32 innerLength() const; - mtpTypeId type() const; - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_channelParticipants); - void write(mtpBuffer &to) const; - - typedef void ResponseType; - -private: - explicit MTPchannelParticipants(MTPDchannelParticipants *_data); - - friend MTPchannelParticipants MTP_channelParticipants(MTPint _flags, MTPint _channel_id, MTPint _participants_count, const MTPChannelParticipant &_self_participant, const MTPVector &_participants); -}; -typedef MTPBoxed MTPChannelParticipants; - class MTPmessageRange : private mtpDataOwner { public: MTPmessageRange(); @@ -9588,18 +9552,31 @@ class MTPDchannelFull : public mtpDataImpl { public: MTPDchannelFull() { } - MTPDchannelFull(MTPint _id, const MTPChannelParticipants &_participants, const MTPstring &_about, MTPint _read_inbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPhoto &_chat_photo, const MTPPeerNotifySettings &_notify_settings, const MTPExportedChatInvite &_exported_invite) : vid(_id), vparticipants(_participants), vabout(_about), vread_inbox_max_id(_read_inbox_max_id), vunread_count(_unread_count), vunread_important_count(_unread_important_count), vchat_photo(_chat_photo), vnotify_settings(_notify_settings), vexported_invite(_exported_invite) { + MTPDchannelFull(MTPint _flags, MTPint _id, const MTPstring &_about, MTPint _participants_count, MTPint _admins_count, MTPint _kicked_count, MTPint _read_inbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPhoto &_chat_photo, const MTPPeerNotifySettings &_notify_settings, const MTPExportedChatInvite &_exported_invite) : vflags(_flags), vid(_id), vabout(_about), vparticipants_count(_participants_count), vadmins_count(_admins_count), vkicked_count(_kicked_count), vread_inbox_max_id(_read_inbox_max_id), vunread_count(_unread_count), vunread_important_count(_unread_important_count), vchat_photo(_chat_photo), vnotify_settings(_notify_settings), vexported_invite(_exported_invite) { } + MTPint vflags; MTPint vid; - MTPChannelParticipants vparticipants; MTPstring vabout; + MTPint vparticipants_count; + MTPint vadmins_count; + MTPint vkicked_count; MTPint vread_inbox_max_id; MTPint vunread_count; MTPint vunread_important_count; MTPPhoto vchat_photo; MTPPeerNotifySettings vnotify_settings; MTPExportedChatInvite vexported_invite; + + enum { + flag_participants_count = (1 << 0), + flag_admins_count = (1 << 1), + flag_kicked_count = (1 << 2), + }; + + bool has_participants_count() const { return vflags.v & flag_participants_count; } + bool has_admins_count() const { return vflags.v & flag_admins_count; } + bool has_kicked_count() const { return vflags.v & flag_kicked_count; } }; class MTPDchatParticipant : public mtpDataImpl { @@ -12126,28 +12103,6 @@ public: MTPVector vusers; }; -class MTPDchannelParticipants : public mtpDataImpl { -public: - MTPDchannelParticipants() { - } - MTPDchannelParticipants(MTPint _flags, MTPint _channel_id, MTPint _participants_count, const MTPChannelParticipant &_self_participant, const MTPVector &_participants) : vflags(_flags), vchannel_id(_channel_id), vparticipants_count(_participants_count), vself_participant(_self_participant), vparticipants(_participants) { - } - - MTPint vflags; - MTPint vchannel_id; - MTPint vparticipants_count; - MTPChannelParticipant vself_participant; - MTPVector vparticipants; - - enum { - flag_self_participant = (1 << 0), - flag_participants = (1 << 1), - }; - - bool has_self_participant() const { return vflags.v & flag_self_participant; } - bool has_participants() const { return vflags.v & flag_participants; } -}; - class MTPDmessageRange : public mtpDataImpl { public: MTPDmessageRange() { @@ -21270,7 +21225,7 @@ inline uint32 MTPchatFull::innerLength() const { } case mtpc_channelFull: { const MTPDchannelFull &v(c_channelFull()); - return v.vid.innerLength() + v.vparticipants.innerLength() + v.vabout.innerLength() + v.vread_inbox_max_id.innerLength() + v.vunread_count.innerLength() + v.vunread_important_count.innerLength() + v.vchat_photo.innerLength() + v.vnotify_settings.innerLength() + v.vexported_invite.innerLength(); + return v.vflags.innerLength() + v.vid.innerLength() + v.vabout.innerLength() + (v.has_participants_count() ? v.vparticipants_count.innerLength() : 0) + (v.has_admins_count() ? v.vadmins_count.innerLength() : 0) + (v.has_kicked_count() ? v.vkicked_count.innerLength() : 0) + v.vread_inbox_max_id.innerLength() + v.vunread_count.innerLength() + v.vunread_important_count.innerLength() + v.vchat_photo.innerLength() + v.vnotify_settings.innerLength() + v.vexported_invite.innerLength(); } } return 0; @@ -21295,9 +21250,12 @@ inline void MTPchatFull::read(const mtpPrime *&from, const mtpPrime *end, mtpTyp case mtpc_channelFull: _type = cons; { if (!data) setData(new MTPDchannelFull()); MTPDchannelFull &v(_channelFull()); + v.vflags.read(from, end); v.vid.read(from, end); - v.vparticipants.read(from, end); v.vabout.read(from, end); + if (v.has_participants_count()) { v.vparticipants_count.read(from, end); } else { v.vparticipants_count = MTPint(); } + if (v.has_admins_count()) { v.vadmins_count.read(from, end); } else { v.vadmins_count = MTPint(); } + if (v.has_kicked_count()) { v.vkicked_count.read(from, end); } else { v.vkicked_count = MTPint(); } v.vread_inbox_max_id.read(from, end); v.vunread_count.read(from, end); v.vunread_important_count.read(from, end); @@ -21321,9 +21279,12 @@ inline void MTPchatFull::write(mtpBuffer &to) const { } break; case mtpc_channelFull: { const MTPDchannelFull &v(c_channelFull()); + v.vflags.write(to); v.vid.write(to); - v.vparticipants.write(to); v.vabout.write(to); + if (v.has_participants_count()) v.vparticipants_count.write(to); + if (v.has_admins_count()) v.vadmins_count.write(to); + if (v.has_kicked_count()) v.vkicked_count.write(to); v.vread_inbox_max_id.write(to); v.vunread_count.write(to); v.vunread_important_count.write(to); @@ -21347,8 +21308,8 @@ inline MTPchatFull::MTPchatFull(MTPDchannelFull *_data) : mtpDataOwner(_data), _ inline MTPchatFull MTP_chatFull(MTPint _id, const MTPChatParticipants &_participants, const MTPPhoto &_chat_photo, const MTPPeerNotifySettings &_notify_settings, const MTPExportedChatInvite &_exported_invite, const MTPVector &_bot_info) { return MTPchatFull(new MTPDchatFull(_id, _participants, _chat_photo, _notify_settings, _exported_invite, _bot_info)); } -inline MTPchatFull MTP_channelFull(MTPint _id, const MTPChannelParticipants &_participants, const MTPstring &_about, MTPint _read_inbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPhoto &_chat_photo, const MTPPeerNotifySettings &_notify_settings, const MTPExportedChatInvite &_exported_invite) { - return MTPchatFull(new MTPDchannelFull(_id, _participants, _about, _read_inbox_max_id, _unread_count, _unread_important_count, _chat_photo, _notify_settings, _exported_invite)); +inline MTPchatFull MTP_channelFull(MTPint _flags, MTPint _id, const MTPstring &_about, MTPint _participants_count, MTPint _admins_count, MTPint _kicked_count, MTPint _read_inbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPhoto &_chat_photo, const MTPPeerNotifySettings &_notify_settings, const MTPExportedChatInvite &_exported_invite) { + return MTPchatFull(new MTPDchannelFull(_flags, _id, _about, _participants_count, _admins_count, _kicked_count, _read_inbox_max_id, _unread_count, _unread_important_count, _chat_photo, _notify_settings, _exported_invite)); } inline MTPchatParticipant::MTPchatParticipant() : mtpDataOwner(new MTPDchatParticipant()) { @@ -27999,41 +27960,6 @@ inline MTPcontacts_resolvedPeer MTP_contacts_resolvedPeer(const MTPPeer &_peer, return MTPcontacts_resolvedPeer(new MTPDcontacts_resolvedPeer(_peer, _chats, _users)); } -inline MTPchannelParticipants::MTPchannelParticipants() : mtpDataOwner(new MTPDchannelParticipants()) { -} - -inline uint32 MTPchannelParticipants::innerLength() const { - const MTPDchannelParticipants &v(c_channelParticipants()); - return v.vflags.innerLength() + v.vchannel_id.innerLength() + v.vparticipants_count.innerLength() + (v.has_self_participant() ? v.vself_participant.innerLength() : 0) + (v.has_participants() ? v.vparticipants.innerLength() : 0); -} -inline mtpTypeId MTPchannelParticipants::type() const { - return mtpc_channelParticipants; -} -inline void MTPchannelParticipants::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { - if (cons != mtpc_channelParticipants) throw mtpErrorUnexpected(cons, "MTPchannelParticipants"); - - if (!data) setData(new MTPDchannelParticipants()); - MTPDchannelParticipants &v(_channelParticipants()); - v.vflags.read(from, end); - v.vchannel_id.read(from, end); - v.vparticipants_count.read(from, end); - if (v.has_self_participant()) { v.vself_participant.read(from, end); } else { v.vself_participant = MTPChannelParticipant(); } - if (v.has_participants()) { v.vparticipants.read(from, end); } else { v.vparticipants = MTPVector(); } -} -inline void MTPchannelParticipants::write(mtpBuffer &to) const { - const MTPDchannelParticipants &v(c_channelParticipants()); - v.vflags.write(to); - v.vchannel_id.write(to); - v.vparticipants_count.write(to); - if (v.has_self_participant()) v.vself_participant.write(to); - if (v.has_participants()) v.vparticipants.write(to); -} -inline MTPchannelParticipants::MTPchannelParticipants(MTPDchannelParticipants *_data) : mtpDataOwner(_data) { -} -inline MTPchannelParticipants MTP_channelParticipants(MTPint _flags, MTPint _channel_id, MTPint _participants_count, const MTPChannelParticipant &_self_participant, const MTPVector &_participants) { - return MTPchannelParticipants(new MTPDchannelParticipants(_flags, _channel_id, _participants_count, _self_participant, _participants)); -} - inline MTPmessageRange::MTPmessageRange() : mtpDataOwner(new MTPDmessageRange()) { } diff --git a/Telegram/SourceFiles/mtproto/scheme.tl b/Telegram/SourceFiles/mtproto/scheme.tl index 12f2095b7..d5c19b9ac 100644 --- a/Telegram/SourceFiles/mtproto/scheme.tl +++ b/Telegram/SourceFiles/mtproto/scheme.tl @@ -222,7 +222,7 @@ channel#678e9587 flags:# id:int access_hash:long title:string username:flags.6?s channelForbidden#2d85832c id:int access_hash:long title:string = Chat; chatFull#2e02a614 id:int participants:ChatParticipants chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector = ChatFull; -channelFull#36949a50 id:int participants:ChannelParticipants about:string read_inbox_max_id:int unread_count:int unread_important_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite = ChatFull; +channelFull#fab31aa3 flags:# id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int read_inbox_max_id:int unread_count:int unread_important_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite = ChatFull; chatParticipant#c8d7493e user_id:int inviter_id:int date:int = ChatParticipant; @@ -587,8 +587,6 @@ inputChannel#afeb712e channel_id:int access_hash:long = InputChannel; contacts.resolvedPeer#7f077ad9 peer:Peer chats:Vector users:Vector = contacts.ResolvedPeer; -channelParticipants#dee6d213 flags:# channel_id:int participants_count:int self_participant:flags.0?ChannelParticipant participants:flags.1?Vector = ChannelParticipants; - messageRange#ae30253 min_id:int max_id:int = MessageRange; messageGroup#e8346f53 min_id:int max_id:int count:int date:int = MessageGroup; diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 8c46ef23f..0c5ccc968 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -350,7 +350,7 @@ void OverviewInner::searchReceived(bool fromStart, const MTPmessages_Messages &r _itemsToBeLoaded = LinksOverviewPerPage * 2; } for (QVector::const_iterator i = messages->cbegin(), e = messages->cend(); i != e; ++i) { - HistoryItem *item = App::histories().addNewMessage(*i, -1); + HistoryItem *item = App::histories().addNewMessage(*i, NewMessageExisting); _searchResults.push_front(item->id); _lastSearchId = item->id; } @@ -1745,6 +1745,9 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { } } + int32 selectedForForward, selectedForDelete; + getSelectionState(selectedForForward, selectedForDelete); + // -2 - has full selected items, but not over, 0 - no selection, 2 - over full selected items int32 isUponSelected = 0, hasSelected = 0; if (!_selected.isEmpty()) { @@ -1787,7 +1790,7 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { } if (isUponSelected > 1) { _menu->addAction(lang(lng_context_forward_selected), _overview, SLOT(onForwardSelected())); - if (!_peer->isChannel() || _peer->asChannel()->adminned) { + if (selectedForDelete == selectedForForward) { _menu->addAction(lang(lng_context_delete_selected), _overview, SLOT(onDeleteSelected())); } _menu->addAction(lang(lng_context_clear_selection), _overview, SLOT(onClearSelected())); @@ -1796,11 +1799,11 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (App::hoveredLinkItem()->toHistoryMessage()) { _menu->addAction(lang(lng_context_forward_msg), this, SLOT(forwardMessage()))->setEnabled(true); } - if (!_peer->isChannel() || _peer->asChannel()->adminned) { + if (!_peer->isChannel() || _peer->asChannel()->adminned || App::hoveredLinkItem()->out()) { _menu->addAction(lang(lng_context_delete_msg), this, SLOT(deleteMessage()))->setEnabled(true); } } - if (App::hoveredLinkItem()->id > 0 && (!_peer->isChannel() || _peer->asChannel()->adminned)) { + if (App::hoveredLinkItem()->id > 0) { _menu->addAction(lang(lng_context_select_msg), this, SLOT(selectMessage()))->setEnabled(true); } } @@ -1827,7 +1830,7 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_to_msg), this, SLOT(goToMessage()))->setEnabled(true); if (isUponSelected > 1) { _menu->addAction(lang(lng_context_forward_selected), _overview, SLOT(onForwardSelected())); - if (!_peer->isChannel() || _peer->asChannel()->adminned) { + if (selectedForDelete == selectedForForward) { _menu->addAction(lang(lng_context_delete_selected), _overview, SLOT(onDeleteSelected())); } _menu->addAction(lang(lng_context_clear_selection), _overview, SLOT(onClearSelected())); @@ -1836,11 +1839,11 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (App::mousedItem()->toHistoryMessage()) { _menu->addAction(lang(lng_context_forward_msg), this, SLOT(forwardMessage()))->setEnabled(true); } - if (!_peer->isChannel() || _peer->asChannel()->adminned) { + if (!_peer->isChannel() || _peer->asChannel()->adminned || App::mousedItem()->out()) { _menu->addAction(lang(lng_context_delete_msg), this, SLOT(deleteMessage()))->setEnabled(true); } } - if (App::mousedItem()->id > 0 && (!_peer->isChannel() || _peer->asChannel()->adminned)) { + if (App::mousedItem()->id > 0) { _menu->addAction(lang(lng_context_select_msg), this, SLOT(selectMessage()))->setEnabled(true); } } @@ -2097,10 +2100,14 @@ void OverviewInner::getSelectionState(int32 &selectedForForward, int32 &selected selectedForForward = selectedForDelete = 0; for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) { if (i.value() == FullItemSel) { - ++selectedForDelete; - if (i.key() > 0) { - ++selectedForForward; + if (!_peer || !_peer->isChannel() || _peer->asChannel()->adminned) { + ++selectedForDelete; + } else if (HistoryItem *item = App::histItemById(_channel, i.key())) { + if (item->out()) { + ++selectedForDelete; + } } + ++selectedForForward; } } if (!selectedForDelete && !selectedForForward && !_selected.isEmpty()) { // text selection @@ -2719,10 +2726,10 @@ void OverviewWidget::switchType(MediaOverviewType type) { void OverviewWidget::updateTopBarSelection() { int32 selectedForForward, selectedForDelete; _inner.getSelectionState(selectedForForward, selectedForDelete); - _selCount = selectedForDelete ? selectedForDelete : selectedForForward; + _selCount = selectedForForward ? selectedForForward : selectedForDelete; _inner.setSelectMode(_selCount > 0); if (App::main()) { - App::main()->topBar()->showSelected(_selCount > 0 ? _selCount : 0); + App::main()->topBar()->showSelected(_selCount > 0 ? _selCount : 0, (selectedForDelete == selectedForForward)); App::main()->topBar()->update(); } if (App::wnd() && !App::wnd()->layerShown()) { diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index dedd5c33f..9719f72ee 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -84,7 +84,7 @@ void MacPrivate::notifyClicked(unsigned long long peer, int msgid) { void MacPrivate::notifyReplied(unsigned long long peer, int msgid, const char *str) { History *history = App::history(PeerId(peer)); - App::main()->sendMessage(history, QString::fromUtf8(str), (msgid > 0 && history->peer->chat) ? msgid : 0); + App::main()->sendMessage(history, QString::fromUtf8(str), (msgid > 0 && history->peer->chat) ? msgid : 0, false); } PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 9c05915c3..720a64fee 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -382,11 +382,27 @@ uint64 PtsWaiter::ptsKey(PtsSkippedQueue queue) { return _queue.insert(uint64(uint32(_last)) << 32 | uint64(uint32(_count)), queue).key(); } -void PtsWaiter::applySkippedUpdates(ChannelData *channel) { - if (!App::main()) return; - App::main()->ptsWaiterStartTimerFor(channel, -1); +void PtsWaiter::setWaitingForSkipped(ChannelData *channel, bool waiting) { + _waitingForSkipped = waiting; + checkForWaiting(channel); +} + +void PtsWaiter::setWaitingForShortPoll(ChannelData *channel, bool waiting) { + _waitingForShortPoll = waiting; + checkForWaiting(channel); +} + +void PtsWaiter::checkForWaiting(ChannelData *channel) { + if (!_waitingForSkipped && !_waitingForShortPoll && App::main()) { + App::main()->ptsWaiterStartTimerFor(channel, -1); + } +} + +void PtsWaiter::applySkippedUpdates(ChannelData *channel) { + setWaitingForSkipped(channel, false); + + if (!App::main() || _queue.isEmpty()) return; - if (_queue.isEmpty()) return; ++_applySkippedLevel; for (QMap::const_iterator i = _queue.cbegin(), e = _queue.cend(); i != e; ++i) { switch (i.value()) { diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index e679a6098..722a7f248 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -86,22 +86,27 @@ inline MTPpeer peerToMTP(const PeerId &id) { } return MTP_peerUser(MTP_int(0)); } -inline PeerId peerFromMessage(const MTPmessage &msg, int32 *msgFlags = 0) { +inline PeerId peerFromMessage(const MTPmessage &msg) { PeerId from_id = 0, to_id = 0; switch (msg.type()) { case mtpc_message: from_id = msg.c_message().has_from_id() ? peerFromUser(msg.c_message().vfrom_id) : 0; to_id = peerFromMTP(msg.c_message().vto_id); - if (msgFlags) *msgFlags = msg.c_message().vflags.v; break; case mtpc_messageService: from_id = msg.c_messageService().has_from_id() ? peerFromUser(msg.c_messageService().vfrom_id) : 0; to_id = peerFromMTP(msg.c_messageService().vto_id); - if (msgFlags) *msgFlags = msg.c_messageService().vflags.v; break; } return (from_id && peerToUser(to_id) == MTP::authedId()) ? from_id : to_id; } +inline int32 flagsFromMessage(const MTPmessage &msg) { + switch (msg.type()) { + case mtpc_message: return msg.c_message().vflags.v; + case mtpc_messageService: return msg.c_messageService().vflags.v; + } + return 0; +} typedef uint64 PhotoId; typedef uint64 VideoId; @@ -379,7 +384,14 @@ enum PtsSkippedQueue { class PtsWaiter { public: - PtsWaiter() : _good(0), _last(0), _count(0), _applySkippedLevel(0), _requesting(false) { + PtsWaiter() : + _good(0), + _last(0), + _count(0), + _applySkippedLevel(0), + _requesting(false), + _waitingForSkipped(false), + _waitingForShortPoll(false) { } void init(int32 pts) { _good = _last = _count = pts; @@ -394,6 +406,14 @@ public: bool requesting() const { return _requesting; } + bool waitingForSkipped() const { + return _waitingForSkipped; + } + bool waitingForShortPoll() const { + return _waitingForShortPoll; + } + void setWaitingForSkipped(ChannelData *channel, bool waiting); + void setWaitingForShortPoll(ChannelData *channel, bool waiting); int32 current() const{ return _good; } @@ -405,12 +425,13 @@ public: private: uint64 ptsKey(PtsSkippedQueue queue); + void checkForWaiting(ChannelData *channel); QMap _queue; QMap _updateQueue; QMap _updatesQueue; int32 _good, _last, _count; int32 _applySkippedLevel; - bool _requesting; + bool _requesting, _waitingForSkipped, _waitingForShortPoll; }; class ChannelData : public PeerData { @@ -465,6 +486,9 @@ public: void ptsClearSkippedUpdates() { return _ptsWaiter.clearSkippedUpdates(); } + void ptsWaitingForShortPoll(bool waiting) { + return _ptsWaiter.setWaitingForShortPoll(this, waiting); + } private: diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index bfa319ccd..315e8b847 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -586,21 +586,21 @@ void Window::getNotifySetting(const MTPInputNotifyPeer &peer, uint32 msWait) { MTP::send(MTPaccount_GetNotifySettings(peer), main->rpcDone(&MainWidget::gotNotifySetting, peer), main->rpcFail(&MainWidget::failNotifySetting, peer), 0, msWait); } -void Window::serviceNotification(const QString &msg, bool unread, const MTPMessageMedia &media, bool force) { +void Window::serviceNotification(const QString &msg, const MTPMessageMedia &media, bool force) { History *h = (main && App::userLoaded(ServiceUserId)) ? App::history(ServiceUserId) : 0; if (!h || (!force && h->isEmpty())) { - _delayedServiceMsgs.push_back(DelayedServiceMsg(qMakePair(msg, media), unread)); + _delayedServiceMsgs.push_back(DelayedServiceMsg(msg, media)); return sendServiceHistoryRequest(); } - main->serviceNotification(msg, media, unread); + main->serviceNotification(msg, media); } void Window::showDelayedServiceMsgs() { QVector toAdd = _delayedServiceMsgs; _delayedServiceMsgs.clear(); for (QVector::const_iterator i = toAdd.cbegin(), e = toAdd.cend(); i != e; ++i) { - serviceNotification(i->first.first, i->second, i->first.second, true); + serviceNotification(i->first, i->second, true); } } diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index a63c6044c..a25269a6d 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -151,7 +151,7 @@ public: void setupIntro(bool anim); void setupMain(bool anim, const MTPUser *user = 0); void getNotifySetting(const MTPInputNotifyPeer &peer, uint32 msWait = 0); - void serviceNotification(const QString &msg, bool unread = true, const MTPMessageMedia &media = MTP_messageMediaEmpty(), bool force = false); + void serviceNotification(const QString &msg, const MTPMessageMedia &media = MTP_messageMediaEmpty(), bool force = false); void sendServiceHistoryRequest(); void showDelayedServiceMsgs(); @@ -288,7 +288,7 @@ private: QWidget *centralwidget; - typedef QPair, bool> DelayedServiceMsg; + typedef QPair DelayedServiceMsg; QVector _delayedServiceMsgs; mtpRequestId _serviceHistoryRequest;