From e73dbf5f6562d196fff20d2683923569b610c210 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 20 Jan 2023 20:44:08 +0400 Subject: [PATCH] Implement emoji search / categories. --- .../icons/emoji/emoji_activities.png | Bin 0 -> 777 bytes .../icons/emoji/emoji_activities@2x.png | Bin 0 -> 1558 bytes .../icons/emoji/emoji_activities@3x.png | Bin 0 -> 2370 bytes .../Resources/icons/emoji/emoji_activity.png | Bin 731 -> 0 bytes .../icons/emoji/emoji_activity@2x.png | Bin 1163 -> 0 bytes .../icons/emoji/emoji_activity@3x.png | Bin 2069 -> 0 bytes Telegram/Resources/icons/emoji/emoji_back.png | Bin 0 -> 340 bytes .../Resources/icons/emoji/emoji_back@2x.png | Bin 0 -> 520 bytes .../Resources/icons/emoji/emoji_back@3x.png | Bin 0 -> 787 bytes .../Resources/icons/emoji/emoji_faved.png | Bin 739 -> 0 bytes .../Resources/icons/emoji/emoji_faved@2x.png | Bin 1468 -> 0 bytes .../Resources/icons/emoji/emoji_faved@3x.png | Bin 2249 -> 0 bytes Telegram/Resources/icons/emoji/emoji_food.png | Bin 859 -> 738 bytes .../Resources/icons/emoji/emoji_food@2x.png | Bin 1700 -> 1415 bytes .../Resources/icons/emoji/emoji_food@3x.png | Bin 2485 -> 2099 bytes Telegram/Resources/icons/emoji/emoji_love.png | Bin 0 -> 575 bytes .../Resources/icons/emoji/emoji_love@2x.png | Bin 0 -> 1108 bytes .../Resources/icons/emoji/emoji_love@3x.png | Bin 0 -> 1669 bytes .../Resources/icons/emoji/emoji_nature.png | Bin 968 -> 836 bytes .../Resources/icons/emoji/emoji_nature@2x.png | Bin 1848 -> 1626 bytes .../Resources/icons/emoji/emoji_nature@3x.png | Bin 2729 -> 2356 bytes .../Resources/icons/emoji/emoji_objects.png | Bin 785 -> 652 bytes .../icons/emoji/emoji_objects@2x.png | Bin 1546 -> 1286 bytes .../icons/emoji/emoji_objects@3x.png | Bin 2242 -> 1924 bytes .../Resources/icons/emoji/emoji_people.png | Bin 710 -> 0 bytes .../Resources/icons/emoji/emoji_people@2x.png | Bin 1310 -> 0 bytes .../Resources/icons/emoji/emoji_people@3x.png | Bin 2155 -> 0 bytes .../Resources/icons/emoji/emoji_recent.png | Bin 647 -> 484 bytes .../Resources/icons/emoji/emoji_recent@2x.png | Bin 1152 -> 906 bytes .../Resources/icons/emoji/emoji_recent@3x.png | Bin 1740 -> 1420 bytes .../icons/emoji/emoji_search_input.png | Bin 0 -> 471 bytes .../icons/emoji/emoji_search_input@2x.png | Bin 0 -> 844 bytes .../icons/emoji/emoji_search_input@3x.png | Bin 0 -> 1185 bytes .../Resources/icons/emoji/emoji_settings.png | Bin 700 -> 632 bytes .../icons/emoji/emoji_settings@2x.png | Bin 1477 -> 1287 bytes .../icons/emoji/emoji_settings@3x.png | Bin 2167 -> 1822 bytes .../Resources/icons/emoji/emoji_smile.png | Bin 0 -> 541 bytes .../Resources/icons/emoji/emoji_smile@2x.png | Bin 0 -> 1104 bytes .../Resources/icons/emoji/emoji_smile@3x.png | Bin 0 -> 1684 bytes .../Resources/icons/emoji/emoji_switch.png | Bin 270 -> 0 bytes .../Resources/icons/emoji/emoji_switch@2x.png | Bin 384 -> 0 bytes .../Resources/icons/emoji/emoji_switch@3x.png | Bin 520 -> 0 bytes .../Resources/icons/emoji/emoji_symbols.png | Bin 697 -> 0 bytes .../icons/emoji/emoji_symbols@2x.png | Bin 1395 -> 0 bytes .../icons/emoji/emoji_symbols@3x.png | Bin 2092 -> 0 bytes .../Resources/icons/emoji/emoji_travel.png | Bin 774 -> 663 bytes .../Resources/icons/emoji/emoji_travel@2x.png | Bin 1430 -> 1241 bytes .../Resources/icons/emoji/emoji_travel@3x.png | Bin 2136 -> 1789 bytes .../Resources/icons/emoji/stickers_add.png | Bin 547 -> 470 bytes .../Resources/icons/emoji/stickers_add@2x.png | Bin 1156 -> 899 bytes .../Resources/icons/emoji/stickers_add@3x.png | Bin 1724 -> 1345 bytes .../icons/emoji/stickers_add_dot.png | Bin 247 -> 255 bytes .../icons/emoji/stickers_add_dot@2x.png | Bin 335 -> 312 bytes .../icons/emoji/stickers_add_dot@3x.png | Bin 491 -> 494 bytes .../icons/emoji/stickers_add_unread.png | Bin 589 -> 527 bytes .../icons/emoji/stickers_add_unread@2x.png | Bin 1199 -> 1007 bytes .../icons/emoji/stickers_add_unread@3x.png | Bin 1848 -> 1430 bytes .../Resources/icons/emoji/stickers_recent.png | Bin 575 -> 0 bytes .../icons/emoji/stickers_recent@2x.png | Bin 1167 -> 0 bytes .../icons/emoji/stickers_recent@3x.png | Bin 1724 -> 0 bytes .../Resources/icons/emoji/stickers_search.png | Bin 643 -> 0 bytes .../icons/emoji/stickers_search@2x.png | Bin 983 -> 0 bytes .../icons/emoji/stickers_search@3x.png | Bin 1830 -> 0 bytes .../chat_helpers/chat_helpers.style | 79 +++- .../chat_helpers/emoji_keywords.cpp | 48 ++ .../SourceFiles/chat_helpers/emoji_keywords.h | 8 + .../chat_helpers/emoji_list_widget.cpp | 219 ++++++++- .../chat_helpers/emoji_list_widget.h | 20 +- .../chat_helpers/emoji_suggestions_widget.cpp | 40 +- .../chat_helpers/message_field.cpp | 8 +- .../chat_helpers/stickers_list_footer.cpp | 39 +- .../chat_helpers/stickers_list_footer.h | 5 +- .../chat_helpers/stickers_list_widget.cpp | 1 - .../chat_helpers/tabbed_selector.cpp | 2 +- .../SourceFiles/data/data_emoji_statuses.cpp | 65 +++ .../SourceFiles/data/data_emoji_statuses.h | 22 + .../data/stickers/data_custom_emoji.cpp | 8 + .../data/stickers/data_custom_emoji.h | 4 + .../SourceFiles/ui/controls/tabbed_search.cpp | 419 ++++++++++++++++++ .../SourceFiles/ui/controls/tabbed_search.h | 105 +++++ Telegram/cmake/td_ui.cmake | 2 + 81 files changed, 978 insertions(+), 116 deletions(-) create mode 100644 Telegram/Resources/icons/emoji/emoji_activities.png create mode 100644 Telegram/Resources/icons/emoji/emoji_activities@2x.png create mode 100644 Telegram/Resources/icons/emoji/emoji_activities@3x.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_activity.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_activity@2x.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_activity@3x.png create mode 100644 Telegram/Resources/icons/emoji/emoji_back.png create mode 100644 Telegram/Resources/icons/emoji/emoji_back@2x.png create mode 100644 Telegram/Resources/icons/emoji/emoji_back@3x.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_faved.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_faved@2x.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_faved@3x.png create mode 100644 Telegram/Resources/icons/emoji/emoji_love.png create mode 100644 Telegram/Resources/icons/emoji/emoji_love@2x.png create mode 100644 Telegram/Resources/icons/emoji/emoji_love@3x.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_people.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_people@2x.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_people@3x.png create mode 100644 Telegram/Resources/icons/emoji/emoji_search_input.png create mode 100644 Telegram/Resources/icons/emoji/emoji_search_input@2x.png create mode 100644 Telegram/Resources/icons/emoji/emoji_search_input@3x.png create mode 100644 Telegram/Resources/icons/emoji/emoji_smile.png create mode 100644 Telegram/Resources/icons/emoji/emoji_smile@2x.png create mode 100644 Telegram/Resources/icons/emoji/emoji_smile@3x.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_switch.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_switch@2x.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_switch@3x.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_symbols.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_symbols@2x.png delete mode 100644 Telegram/Resources/icons/emoji/emoji_symbols@3x.png delete mode 100644 Telegram/Resources/icons/emoji/stickers_recent.png delete mode 100644 Telegram/Resources/icons/emoji/stickers_recent@2x.png delete mode 100644 Telegram/Resources/icons/emoji/stickers_recent@3x.png delete mode 100644 Telegram/Resources/icons/emoji/stickers_search.png delete mode 100644 Telegram/Resources/icons/emoji/stickers_search@2x.png delete mode 100644 Telegram/Resources/icons/emoji/stickers_search@3x.png create mode 100644 Telegram/SourceFiles/ui/controls/tabbed_search.cpp create mode 100644 Telegram/SourceFiles/ui/controls/tabbed_search.h diff --git a/Telegram/Resources/icons/emoji/emoji_activities.png b/Telegram/Resources/icons/emoji/emoji_activities.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ac15d3d3e268de5e2cdeb798cd7f1f441c72d0 GIT binary patch literal 777 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDq2jfvMQj#WBP} z@M(x`#v(_7UU3c$v$h)@O`1A6K1U86^4ch@ebkLPQ`aOaLpdx;;*YbVOSYxU76Ivv z24#+p0WA(mmof#M0{*xzuIRs=-0ODcYI$_cnKS!l&aE{5EGzqWb9>=}P2JtxOM^~6 z|J?Yp#Hzf!{A}81hPv}p-4C>jDwYT1yt@~zCV=5~z-+uVv z&zipXH*ZQZFf|@{TV^iRdoyQS+Py(YVN6&O+`C8JDN&-b+YA=d5M z>EcxA!S3nETFbC_?UyX&8*j@>zW@0%=V;R2y?c4vo!bvD3|qbV=9>HOpBGqYO?~z7 zq2f#*A$gN4X`6HZtQ6s3xsb8wSdyWEZ;FY>^2?1yvzA@V5b1PT8pNr0rM6o+E7d^a z1z(_{-HPwV!3PsAJT3ZIVbj&Vf%D4SvOw{j)|Qr$I%4w+|JKc4C9(ST>+C%(h0Bli zGCVsVui>tHHA~c)r>Q_!tb4AX`U_>|&cLRR0ylTKZFW>|%dn9XcAGbEp3%&nlPOlV zwyv{Ivu%2a;Qp2pXX(`uVf6dFw z)9_e*)opR$n+xXJOzfMs+-Qhe+r|>;XCt?N@7`91xC{CQts3|Bbt`2Q<>cj0=Bv#0 zQ`R`q#1&T-)}!`&yS*7tmEC;z_bZgTe~DWM4fnXo}z literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/emoji/emoji_activities@2x.png b/Telegram/Resources/icons/emoji/emoji_activities@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..21f705376224d3e0ee962ab5a8d9cd24864ce122 GIT binary patch literal 1558 zcmV+x2I={UP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NHfJsC_R9Fe^m`zAlYY@ltBR^6x z$rc*4RBWlBp_@=MD{@moB1u~fR21<8L?KDBO>m(_C5VZT8$%&AO31KKBg)Y7i%PS! zl0?(e((doxf#Ko2=k@jIjl1z(9OlfK`OiG_%*->-yKC3ZZzlpf5%{wa@Y+6naBy&B zWF$BrK79E0?c4SN9V2*oc^y7{xTdD&#fujU3k$!EAFnX^gaBfWp`9xD`ugVN!jz>(o$bv-(Ua!T3T9OzI=%# z5~!e{ATTh{bQJo)fdlN|`uaLs%ujp*&?4sGl`IyNuC6YUG&VMNZEa0B^8ESpXMTRZ zt1D`wp`qc^r%$}14v1(0s{#%P;xRHZ0>t?E_};yH2{i>}dIL?sHb!i1Z546II;|lGT$!69Xe848*n1TA@8AFR>(?zf zgg5wPnv`S$++82H?+pnF38W-Iy}i9;Fm*)0OL2>{7eV9}}Nw$0UZWH&^sZ&(t;NYOiguZ?IHY%8~ z@HcvuMHCeknL-s672;5LcXwP|oPJ78O_c(qL1$%Uv5(2g$TtPMYADj z@B);XnQ4AbN=kxXQc_|vl|Fs?^s85|2#K5_f*?#C#)i%r~ZjM~4vp^5u)EV$##o)7P$Dd-LWEfw^?)5}(wN zDQ4pkr!>P?NJxlG$|}7Xhvw$yRNf@$9mkFxd;R(~OsN%2*bd0;o#H5hYvUJ zPN<|D#ET$W~t@nWfX7RxFO5f){u_@GDELHEK$ZZ zg2Z^lE%x5Md*8o*=P)^Q=8UU1aO&#nNHUGhe{c-~lx5)bz6+cz*U zz@%oGRpe`Rbv4JT#0HSf9`B;O!IL=Y-U)hMUY_<$4w<`m@51Mf5gr~64xhMdn-ze% zZ5eK0)bl5DTrNi96YYoDkH9eBFsN{YCQdLrJ3FN_i5MyIrx9bo!_MD|NNJpJI{9bI}zB4fL#Rs25(tT|AWQ_TmS$707*qo IM6N<$f>*lX7XSbN literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/emoji/emoji_activities@3x.png b/Telegram/Resources/icons/emoji/emoji_activities@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..530cabe633ab4a1ff55efe89f4e1e5094a0f051d GIT binary patch literal 2370 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 HB{Ts5#D_d5 diff --git a/Telegram/Resources/icons/emoji/emoji_activity@2x.png b/Telegram/Resources/icons/emoji/emoji_activity@2x.png deleted file mode 100644 index 8ba2f956fd81fa013da2adde59e7bdcfd8d5f68a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1163 zcmV;61a$j}P)00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAu9^+`lQRA>e5nK4czF%U&zB@zON z*#r_KGLFCr5P}3DaR@}h2?)r@xd18ATmeo10Z5Q683+UfAlQ9UEnhY6@$}g40U^1A zk?pQuzv{Q!uJ%k!)T=5`6{reS1*!s7fvP~Z0+ZRu7;tK8YGGmF_veM#pU><1`ugqd zEe8DN@!8qgt*x!&CyV==;-zJH4^rKVT^$Q^nUW%MN?>I zW@c}1Z)ay`dV1Q^-`w0VTWsPmZnKGbH9tS^&0bz!4i66x4h|k4AN}|jwU?Kd3DnDb zdU{GeOG`_!2)Km-W*&tTT*V;c8sFI1czSwL9A{@|D=RCblVJ=*a9rVVba<)d?(Xi# z$A{71-Q8_&ZsvIe2;BVO5Vv`L(ojgH=+Dp37Z(@P@cq`naiSc?{v4RBnmMGgy}jKZ zPfiafQUvE?d>>eIg15Gu&nsfj0Sbt6lxW55@9!JO{r&yrS zTK@d}Yy`Y~%w4^I*?dw2S2)D2`G=^JJ+3cFHcs=-@@F>+`2t1Er`A^J`sfQglrE|i z{CZ!)*HnZcac(j}*JZs#`DK3DM7gtP=G1Oi8Sd@)6E4ux?+ z8gONHsqa-GH|v}{z9EW0VF^GAb!N~W#`<6$DKP!GwKMpJD}q~yj1lT4V=(e7=r_As z(FP`PadE-c1BykRg1HHAj$me66+qxk0}+Y3X`_*Z1gP%?^Nl1vfC@`M?~S&IWEmLv zZU+e@@xiUI1oQ#X*0?MK1K({=faz#}$;rW=Z%KT(Qdk1|fM|Dfz%?$$=Hae^Q!t313r@!cV-G1i0Pp zCv2byOH=trc1sSOA0kK*&Lgg_uB?O}gsAc zCT;;7Cl)>Db7MbRv`BvT;jZO?R5~O@Kb9kZ+!9y({~e6Af&s_X7isS!<9*;uZ!v$S@R6N)B`ff1`+Uc!Rf)fPU&(7>drmiZ##vDk$T-z9c&3^8KGI?!_+tO`^GssdGksz6ns dD$un8{{Z_v8G(mM8z2Ax002ovPDHLkV1o7p18)ET diff --git a/Telegram/Resources/icons/emoji/emoji_activity@3x.png b/Telegram/Resources/icons/emoji/emoji_activity@3x.png deleted file mode 100644 index e017b83ffe91728427d8e3eb9e246c97a69320d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2069 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 GgeCx0@N7f? literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/emoji/emoji_back@2x.png b/Telegram/Resources/icons/emoji/emoji_back@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0e0f5562dc82ab97d8c39ad6cce65a04718cf7 GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1SD@HJtYyS^PYDfeYDg>p8x;87(LnJlD%%zPaoZud;YVW+0M{|-~WF8S+n}f z%|8kp2hR2{vFNkx+kOAz^S_V2PycsFliBlq%$4)!PJZ1sJ@x0!H2t;g?8z=b4UHt0cthQ_3h7%=!Pl&TH8gtga6gA`6MbbHUhz*Ot$;uw;_ z`gWH0>C8ZhDVIE5b(#9EV zGc=SZdfdq~&k0?9RYiz1P^tIP#f&didy`gI?bVy=mD$i~q%`rw)1rf6y>8BGlLb{T zX~^-lpMP$=Ez4|n(at#_14Ovy`l;t!&Dtu$#R@XuV8VwAo21o#%NK`efec`3Jn*pK zK-k_m|D{171KxfA{r$J?HYpyqtgW+v1{{9<^<9~Dj;RcvsT42BfV}P1yYD8gzL>G( zY8J?VIeyR6HXjU|e9~q4Wsm`R+izcgZMtoi-}0)x^FRh*}~ z(&hk-2idM~7ldeiv<<&!oZ;7||9JnG_W6&z--vZT&HZ2?)vG`M{}bogXOBH7=wH`y z_+i2aw%$82dg9IfAt%m0{%G(+pyy7FoqY3Uu_xcmF24ExTgS&_;_cg)9Jb$1P0VE2 zxmWkumfN{vV#O1rXP?eL(R-FP_{p(nLgq!?N0WH+ycEpMwoe2~N!Op~y}hdT?v*oX zn_tvk(tR&!a$i_$`stZIZ2DasEPIx3tLY5+z4>Q3$0|W49-#&n1x61BB&tz<(t&*8 WtrK#~#4LP43DVQm&t;ucLK6Uh{6nk& literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/emoji/emoji_faved.png b/Telegram/Resources/icons/emoji/emoji_faved.png deleted file mode 100644 index 6443a6309853471285abeb4c7e625033b858bb65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 739 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 diff --git a/Telegram/Resources/icons/emoji/emoji_food@2x.png b/Telegram/Resources/icons/emoji/emoji_food@2x.png index 4b55ed1fccaf5859006d998f5099bb47cc4bec37..d65918c909748a9bb88add7172425194749255a4 100644 GIT binary patch delta 1362 zcmV-Y1+Ds|4TlRMiBL{Q4GJ0x0000DNk~Le0000m0000m2m$~A0N7w|(2*fXe=wi} z00aO40096105AXm007%JYzzPZ1o25kK~z`??N~=hBwY|*e*=g)D;Q8Q;K76_iU$Me zK@=4a;z1DpkFZ%@ygc6w%Z z;pevxGw)USs$O-!s(SC+x3A|ve-;7lzvHioiHW15qn@7L-QC^au$Y~lU0YkLtu3=W z7Z;bx%F2A)fN^O9B5u%9_SAb4;+O#&_IOvxb^k*Ha0eRgR!x({r&xX zmXD7Qrh9vPeBvJ&a}g>kDxy%8m6ZuBX=!P}6>u9G8U!rOPdSH%hK6AB25V(y1>dxQD|u>eZjR)! zy1GhB#P9CzZewF(XlN*21mHM_NFX{ons39+&23>}0W2h;n3xzoOOi+>(+KRXpJ9q@|@{Sp?V9f74S~SQr-GbrpnVFdYO{wYN;2@x3kMf5i9eiOqIXT#0*VotN3W@{PFfcGsRaF%n9PH`oiO(oC zHFaWQf&`Y9mh9~8e-r_->8`G>q+D8B%9fC$V*5BaI3P6(N-STHOH`;QeER3(^73*D z4+8MHv=j+!0$Qs4XCMYMIywrq-rim@A(eQ>#>TX5TUuI}0E{$+?BeI=2WeDkrj9zq zo12@~)>a?{1_m;57!IL2VjYmi*T>XRlZbo`1ZQVw9UVq#e`h#kXlO_#udc4tw9Qms zUtb3u$rCA5UVz~cm%ET;2rnDOy(Xs)fTQClck zpQV74B&{QmCntehjAfcnB73SvV zD(!`=AT$XgGc!|`BYB2yX?b}WXq%gxs)UCO0tMLue<;Y^l6yQ^pR=;EXl=>K$+8@Y zGj!HSsle*)?v|+fTO8-4i;D|@%+1Yd;O*Dc)X?H8Dk^>(kuqv-ZUzDl{Qmy_QuGwa z;()>R=PCp|JUpD%Q&(4~z=Cu#E_=4Nwt$Pvl#q}RJ?d`k19;0+oeP2MqZ zzDGnvh#ae7SkWV?{>WTYa<-WR1RrO0cXxN(W^$Vax2iY`bai#%sD<}}V4xmzTx=^; z31~3^nZ%#h7g8S_2$2qOFM~?AxVVVCz(>FhC@{{MI3}Qu;tGJz`Wk;l;C~r`A07p6 U6pF delta 1649 zcmV-%29EiM3#1JpiBL{Q4GJ0x0000DNk~Le0000$0000$2m$~A03{3NiIE{le?XuE z00aO40096106+i$002f&La+b;1`bI?K~!i3?O9t$6GR~Qxg>tF}%Il zML`iIQhG=bBtcML>_NQXp=@k)7DBrlkF1IbHbSZSKs|Mf4} zP2)K;bI#1MmpKoIJ$tS7t+n>-f4$b)YmAK4pSl9-3aBffu7HdcFqR=JE^20G2By=~ zQ;n?l_V(f7;WuvFaBy(Icy)EPwzl@*;6NkuKbQ;%2>A5>4+E}x*qWQ0yRfkE>)dZ* zVuF0;^8d4OK|ujohyfX4Y;2s9lXG-*bk6cW6Sr>N(#hiAuh>ApOP4MYe=-fs&COrE zdKDWR%hbUWEcx{G^w!o^Mn;C4n;S?>im?d~4Cnw)absg6vmQoQR#vvPwH+TH6Wim* zk7@An<42yL@Z$wJkd~H~l9EEEJbn7KsHlj0vMnquTwGj;ink$bF^_r?4w#ynmX?;1 z;<~!J{QP{L5fKp)moHz&f8^ZU9QGBDD*R|7Ojd*%6clv*`gK5UZf-t#^5i^bQc@C4 z_V)IkrwY$pgadwleq=;>dHMJ6-+2bXH*7GP?Ck91QAHp1-$ICqK0ZDk9v&tpCJ6Vl zv$O0(^0a~nGiPUKFJHdok+5@GTU%-W3=R$s3=HrX4D#sg>|9e*e}i!GCwl+-b$EE# z)z$Ur(IYD>E7Dq0Qo?0;_wF6f8sPNw^bpU_pFeRDcnk)4%*@P$tz64^<1b&nG&MEd zxpRl-0DLBcaHf&1op7& zSyF?wzk2nmC=eDBuLx4(AQm??G%z3H;^O|M%X>;lNFeByl@)nNBGSkSq-b(-QiN3} zG7COsWo0@E>dNfx?Tv&$KCt{P3?iwN2o4S=l;PoFVK|x84P{e6ni*-FbSz1~mDQqVx;^GcmxpIYokO!n7 z%H%DR7ZGgO}E_>HCuJ)uPBOluvA zJAm2?*&YD606022YDH3r;Ogp1NQyZCIP}a26qiGVf9%u>!!rHM%#2nh4nh14fO%+W zh(w~IqBye357C~uefu`yc6WCxrU3mM%8sba6a&=+^x(k*QiQTx6J6gq8yg!W0YKv) zM_FGOaXH+H$${eHVsUPrI8e9~w8p-OPEgvIallB$$;pY6lan?!J?B$XQwbf32Dw>J z6hSfEf22u8OG}F&qh3UGK2S%Hg5>06y)cA?e0_asmqJBoXs8gY-Zbn>asWpe_Yb{s zGzzx2w-dOM!H1^_-%(g=AI%jWRnB8rSQuH4q-oexQ&?C?noy`vyHk$cOcp&kg2j!D zO&Vl?!tVY1_oVFg>(`3tK---F5qvy7Jr%(ee*(d0Id<#AXB8n<2{dGt?d@%H08JqY z5=yYJ7R!$xKknYWD+jW^zMiZ{(}fk%asVaCqGA~x9VNvmwr}3NDM{=c6V5JcGbSb` zo}(Lb0-17SV}pFaO`H|+(sd%HL68vGMP9nN0-T6<=+u%0=og_3#)Sd6XbeV2M^{x< zfA#hC!Nld|Wi)w^Wz*Bs-QC^6U}%jFy#^g=&vVNSsSl^TI$eUpss+r0_qB=D`4~=t?iMW%V}+K00000NkvXXu0mjfGEE3b diff --git a/Telegram/Resources/icons/emoji/emoji_food@3x.png b/Telegram/Resources/icons/emoji/emoji_food@3x.png index b38deb2bd328855ce5983836d5fdacd1a3af5bee..6072c340eb68e5ca574d65522c33bfd84c61c2f3 100644 GIT binary patch delta 2051 zcmV+e2>kc86SEK@iBL{Q4GJ0x0000DNk~Le0000;0000;2m$~A0NRfv5RoBBe@LJM z00aO40096107w7;0059NM(+Rs2c1boK~!i3?V4GrPF)zs4abmq9x_FS%yVD3K#?dq z32{LYE(pnuB#F#rC~<*IAw%JujFBlKLnyOkp2y7N_x-Z?TlU`X-tW8jKJPj8z31jU z?^@5ehG##+DpV-*msx?#3S?Fwf5ZwD4ndP1k_r_nRIgsWTD5BB%a?!m?%mdI*;lfj=PJR0H>0j&b`Sa&3TC_++n4jZg$Bs36 z9yxNvtw*zF&6X`&_V(>t%N8ei@!~}{Vg8S-S+mAy`r*R|Tbts=i!WHPf8fWDA5J^G ze%Gl}$ENj%v;3#ynk`)T*Jb8Rif7%rb#rrbTeWJX5d%DU@ZjXhlQ(bPeERfh*REar z_3LNG#l(T{`7=$1xn<)L_UzfiA=K2ZTenuMSg~QlhI{w!X|R6%`hp)nek{140BhH- zHHQnYfKFLiSqBdu)N$i{e@>V%!E-~lY}sPaUc7iwP>iwla2Pgb%othq`t@t~X%y{^ z8#fGQ0d*d>VWmoydi3a#QTOZDuRVJ7kQokuODOx7FJJDM_5b0QH0|yQyV&1!VZ%ysrzh7_x0_+{TeEG832dKUJbc3Bfj>T)A?^4jORfhYlT@GG$7G1`QnYWZ3ub z-;H7K-@h+evZMpefBeL%`}gn5{*^0NdZNWVSg&3^zM-}~(!d6e9XmF9^k^btI=hLT8|MKOFSY5bqp={Z*G27r~*Q-~rmoHyRY9PQKZr!?-m}uR)bq-`qEmNip z9s>W-rcIk6LxvEDu#Gkv`&O$~Ew>uUjHHl{4IVt0y|RP7explMq#C;LMpb@}+Sa#?dE2m0ElE?$zZzmGH2(AM-Mix821t-`Hgo6BCA{L}!L1{D9653%x6Ve!@AvK7H%S|U z?--Hz!-o&q0XT9Rn>1;HmPv9K8sB9I|M~fcKOpdZ_39Pr*7@`2PoF;h?AbG6I)Dxx zI;>v3T6KYsA3t)FFI~FiKnwGe�D-Y&Q&xXfy=Pe;j`4;8|P}$j;6V%jq{A=aABu;dt)cx!=S2@V|5C&ic6L}Q@Tl6-(Pfq zVfa}?Pu%U#C_S@;3Pw<1Oc!97l48P{^r-GHMfMP6`(p+ereMc}RQ|luFk88DWg~^) z&R<-BVR9H%s#GB<^yih=v!v2AF^rTuckcL$e+w{7RU}fc!29YiDf(>l=FP=~mW5zX zAiywtVFJI2o&sVVw5wW2j~1v{Azhn5t9y!7caK7iw4pW7GISgqOnYkS_*K@0>j@FSW_^P zVQH$QTiVfIm-Jn`c3Cr#LC!RFCBq#jndb0H+l2x>d-jZM&EE`W&YY=b1O9t54}bOV z-(PZLt54bb;^;}qv}x&SSn(CUdiAOdf9uq#ldV#0@QfKVB!jw&zACW^a4{M+YLp~y z-@e^7AJYJZOS@8y)R-81vmurztu%%aC*(;}LXzpEXbGuN6Xs|tc7X4dWUX4YDt7)( zhC6obkUZK&d2}GDj)hpFa~Eq(tt6OeIsn0Ik}NS5j|qlgy$A?G!YfBn*gqUxeWi`utu&kF*oT0HThn!uX^883h{Mj?Lw z{P{#oR3GTj^6Z7ekr3#o#2*&^Q9KEVwAyx((ku#qXCeVhLUgt9Nb(_Mh11vNs}gVh1{>Gh{Es(JPP2YFK3n8MF35El1Dy{LL~_iSqS002ovPDHLkV1iJE^~L}I delta 2440 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/emoji/emoji_love@2x.png b/Telegram/Resources/icons/emoji/emoji_love@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf0d31ca3e4448493d31ae8c8e2a76ca722c033 GIT binary patch literal 1108 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 diff --git a/Telegram/Resources/icons/emoji/emoji_nature@2x.png b/Telegram/Resources/icons/emoji/emoji_nature@2x.png index ff40de6450179bb7f22b74137d5c2565e338fd8c..e2927607bf18467324d3865993b3cf81f5b5961a 100644 GIT binary patch delta 1574 zcmV+>2HE+z4%!SMiBL{Q4GJ0x0000DNk~Le0000m0000m2m$~A0N7w|(2*fXe=wi} z00aO40096105AXm007%JYzzPZ1;j~2K~z`??O0hzm0J`(sX35}vms~>IG|=Ak^@?Z z56&n!D{7#TNgY=*v8qNdwP@oS=s7MxuV=1UzG1Cx4OhY9n9Mb#MqV4uS z|2ZDdy>RctIS;>Uul=oWuYdh(f3Ll^5{c@kihwEtstE8A(9+Vfv$NCD(czWrcB5?J3GO$x3?D=8JU@x+0f8H(SmYqe{Id*-(S8@ zSFT(^M42lG2M6u#?WLuq zDth(m)!^XZ=;&xiM@Ly%S$KH3ySw|;)D$s%`}Xb8qemttCdAX&*hqR87Z=8SzEDw7 z0kh4`O>J#$0ou>c@B8=fe?)rjv$?t1z`%fK(9_e~+S-EQ^XJcb{WA6d>-<*RNlJ zR zDF97OOeAJUM@Lb(e|Us+b#)1CZ*MPZrnC}uAGRnK3kwSuAo=j&1K#7)r%&qY>K8Cm z0GgDPL=no#$x#6Q8)9y5PBs}C8PYa5K%AVM&UF+e128o;kuT8K*9U$a{-SkAdPRw^ zuP-@t{rYvmw3U?=)y$ER5jiI|TBxO^C6EjZ3{chKd7`4Ce~2F*^Lm+bTwEL(7#bQ1 zK$Vr1G==BAd-nvhY)FR#AyZOPn4Sbwd76rkj~7f~C=yaupwSNr4A3MojkUEklLZ1l z#mfXkl_zG=!Yks?<;$1J64hO>5??&fatLPGke}jZ2H4)-hK!S+X~YHOAUdy?FJDqf zain9T-Mo2|f1!~#=qQjzvJNsrqH46YwE!ZpK$%G1uxEC5Hc$FbWKc0$CSXx4eWq)`0K0}EW@l$fMyR5rqoubA?-N>8G=%7P z(F~#I!Zze*1v02WSX*05{HTp=Q8;kw6S5dthW@v;f3?-s)fFu7-@gYGU8#UkdWgoE zkwTc5n2^Q@H0X4Jgg2-|SPqL~X*j?((=R;s0)K3!rKQm_fq{WxVPUDMsb|pK3PC|Z z)MXRCprC-8JQeZw$;ru{o}TC+s1thf~(B_>%aDy8+ zZj_gof7jI1gocK4>N6tRS@IbB3&QU1uBD~r8HD^ndU`s0Z}>DeHl}D*mBEWcdS+&Z ze8O{OWyQ_SO$Jsv5qioCo$Vxy?zN<;a|05S!tL+I!%EG*u= zdq*s|d>I=X%e0X@fwELxT}?c=uf@c~AcZmPf9>s+YxidoUne&=*T~2S3hZj!#)%78 zoP>k~@jCX$R{C#na4;HTVwjwqG&MB^26qy4I7(JH^c%R3(nka@%J;*E56_JjwgnOq z9*`?|*4NkT>+4HdH?_b07*qoM6N<$f;5`zDgXcg delta 1798 zcmV+h2l@Eg47d&jDm&{8AOye1}v zr1jtpDm4pwk;t?lMeso%gu*Aw2(%vTW;Y3n5-CbZ!cxMtqRjhUNlLq5ns)R5a&TCl zv(Gte@6P}9@BMJj>{&D4tTk)af2_4;+t}!j?g8Bcx(9R*=pN8LpnKr|>w)=dhrV^| z*0{JhZ*T8kzkYrE_;GrAS}lU2JOH&zw1<4a%}sW@aXvF(4j2dgS5ZVHrY@aCdh_b?erl$nA2ANMPf}jbhVZ z(ed%|1lro#st5%CJ%0R{dnQ9*0odEy8>3yme3{gXii(U|jX8G4e=K7TN94VG_l#S? z!Ti9Nu$_{Uf>-nafq~pIFff3CUcGuXTpJk~iE*M8;f^(M?bCg=U(lhUp#=Np%^Mkfbpya!lmY!48LV|u zfA;Lz-{8#AwX?IsGNA0n3wn-(m0qyMkhRE=mzS57P-kF}e>VshXGUw{&c)&lr@6U# zZi~q`sSv`Mk=K^mLz_vQ?wwM*R^E{#N67s+GVno2E0{SwOfRx6*}`ec zoT#d{2M-<)D9&f96g3E+J9mz3-M)QWgSxT`4q*hUxUdjlIAG#9jbG5p5VKs1!bo&v z3nxO})Mm9cfBhq7a83p&evyuhG0Muy$RvJ28w-dW8DXqo0^~hGL{LpTJ3ABH$jFGI z^85Gic>tglWtb@=eB;Iq0;E$N>nakKvk=cC=2Q{F>P+^6%${R;0DNIb2(4PRYR#H8 z20gB!YN{Mv1`nASo$H#;(oz z^XFL^fA{YE{QR3YZxRPil7g_Yxp?s+gMdH{FEB7rMmH)diWG6DL;Q$WZN98oz`-64 zW!wSw?b}By7`6!%b*LpvmRQiAY3}as76$-YCMQA_cV$v6E-ofR;o;#=o;*Pyp*$mF z`i~4sG`PZw(p+__tE+qX@F7;V`4q8b%N8-^e_y$BW&V6~b=ctG;G;*6CMPFzNygvb zU+jSS+pH+5OlN0jtMw@2e*gac$BrG_ym_-S=qz`|iWO8RW)mn2%r;u%A4N56!;B6B zvE=9HXASH>7%NwSXMxYQeOnp!Mk zf9s*Rgx68}WLI@{bp-_lX+fN;gRFow&%Lj&ugAfbUJDBg=gMk*J9Ov}s!8B7sPzR|Z9q zxT>m(yAA?hPdN20UAolG&5ebvPhexOf3B_;&0|QVrKR{pVCLw8xk7r)%gaN}N7O~Q zCnO|j>!rp|LokMwm!6(pP*7k{u0zkTek07*qoM6N<$g1FOZCjbBd diff --git a/Telegram/Resources/icons/emoji/emoji_nature@3x.png b/Telegram/Resources/icons/emoji/emoji_nature@3x.png index 39ce2c8634253d90979a51b7741660e440570c21..f72fbe8fec91f44da136a59741d7126ed5f08b95 100644 GIT binary patch delta 2310 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 delta 2686 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 diff --git a/Telegram/Resources/icons/emoji/emoji_objects.png b/Telegram/Resources/icons/emoji/emoji_objects.png index 4b15d24dae6578e2bdeeb672f0ea538c98329464..733db2699b8060e9d62b6504deec155d76963380 100644 GIT binary patch delta 593 zcmV-X02&e|q%cte!1vi&E|-tT<65mIlgVBQm?!}N_F8>#;_>)qv(fAI4=yi3 z2>>vj$C87=AdyIL6{S*1h(scxrvLzqN(>>DN^zogyPd1m>-B22ihi|Pf8FVHGMNnL z0{{k?F@m$uaJ^pXEX`)~WHM>BTHS89-|uU+S`M?>Y`_5jaS#g29Zr4rHDQLop_=kw&Sg-)m2?RLpzlFGktL1{Xj zUMv;@`{HPy&v!nb!{IQOe}3G8)2USIcs#n@Zkj6~qS5H-bn4}?vCArDhPxl00000NkvXXu0mjfJQxkZ delta 727 zcmV;|0x12A1(60JiBL{Q4GJ0x0000DNk~Le0000W0000W2m$~A0Q?y3qmdy+c!(?`xSnlRk z=bdxzeV;q;&dJHw_~&mxz~_W=f4SW2^}5||y(y#?yj7U%Q1Mx$ZTXcP>vf5A-SctD9n zvRbXO*(~M7r8}KY5(oA2@{&w*x!iKO1WA~~z-%_-a<8wiDJ#-Z^%M$)QmGUl=ytnR zC=`?m8&rg_<`uKDN~ID!&Q7WAb~~9&CK3tor>CbLk0%m|yuH0qDrGx6J7Z17PO4NY zZ0h#*mM%x5(O>()`21tBe;CXbi-m4JjQjn5tyW|Be(nc@e0+Qy4u_w94R?2U*jFGB zpr`x3A9RK)01ihdd0`Z@)9IiqTwGj`fM&DVXf(+5>go!W07)J>k$3@v!GMPI{QRs| ztEqr*`$1v5-TwOeiiYvI@-kL-I2?EotyT*MqDxw>7HgwUI-QQre;Z^KIz>Iu{mGb2CZ$q|Pe%5K#)!mbQSD47L-=4Yh#p6#9DvsX1TXuF42B9JiBL{Q4GJ0x0000DNk~Le0000m0000m2m$~A0N7w|(2*fXe=wi} z00aO40096105AXm007%JYzzPZ1aL`2K~z`??U+d@yXTx2K~L@6sn zY{Y_OSSf@oNGT$h+uJKrf5E>W8X7XN zD7XN8W)Y%@&-gT^Bl`OKL^L})J5fFLo-)*(Pge*~$}&`=$-_HI*C6GAU9FCHEq+Sz{@&=EnZv9a;5)r{Wq z@-iy(^Ybz{GBQ%{VdhB^5D*~a5kU$;*`>kq@bG|2LqmgtQ(s??or}@a(^J=#oSb}d zaq;^4DsMPMpdhG=m-`?0sakV)cel5<$9r&apuk*TUt>v0Nm*K2e+mi;65h15G}7Sa z=0-sB#6ko?WEEGcq!W5(}Z^=H|+HL@~^4 zi4YRm+1YvtJk{Uc-oUU-x3{-+czCISb8>QoT1ZHUUNz%JCnqN%QCV53hAu8HetLQm zFk;Hg%v3{GS62&|e}jXA8pgPNYikRYsi`Rg(3+YWqj5u@o}LD_v9V!5%DAhms|yvb z5c$-6l9Q5>L_l;tjfzfUVxm~wwzf8fOWTkNi*3Ptv$M07mimh)qXF63*{!dyBXWLz z&KcAefsAf%Zx;z@ZEcmkSd0cVIyx#8SX{jd+KkrL){Bdae<+gkl9CdcY&amX=+Gx7 zCS@>x#4XnAjS>$GAW#vnUOED$G=;&xJ8`Q6^uHxe2 z6o5bfHHGo>oNsP!e#6#Ls59g)7LPWvMb2b^uBEWBP#mkhy*+PlZ(Y}S_KS*:Mb zYc@7EYSIY_e+lAj9v>eE2M4RczQ-;qB-XB?qC!oPZ~<^}$H&L3VbtuZ|5A-W?N?r2 z9vd55P*A{yDZ?nDDMGNfw6w5$WWe`ZCMPFJ0Goqf15Iy@U^E&-^^h8w{ejEY)>aMh z6}veB@k+{+mzS4ZEpp?65CMtePHS+Q_Yf0s?D^#re+(}-2Ie#G(~LP8+TGnH4sI7$ zS64Zp&-q{rz5EUS`YcF9J2m uQB{f;CT$8r0@B3&1^;H?Hv|8F2L1&z(+u_Q#y$^|zv z#*Gr!ZcL>Nks((^E+l14;l_n1B^gSQlB7tI=r>Pgp8o&oTYanJobw*)GqD-C2AF>k0|qcmG>NXk5GpGx zYi@3~x3_0PPft%PD=UYGhcsp|kU%#kCdSUrjxi4p4>dJ4ZEbBV`GE!qe+>)_2-7<; zF_Dv#7_t*MG|h=AR+y3Z_xBVVi8RH<9~=G-aH!R~ z^vAd1zgPr`{qpj%s*xjge+hG*4{$35XfHt-;`QFhS*uI}PADC4YmOR+QcCf#ASyF6 zUdwAMoEvXtB9eCsSkz5)Au)q1N(!7yl$r`qQz;VasI*!^QdwD9SXgLjX(+362Q5z1)79pfs1&K_m6wsU=>~o|r-Yw_m=3-boIyw>t?C0j@f`WqZdUtnsb8{oL zWrrL>ijkF=*a7A$bUHFJ(%#-ql9ZH`nVA`PcXuIsjFY^)yxZGbp%t~+q1q0psQ-w> zgZuscT}lFDptQ8~fAaFOp`iiVxVSj%b6i|pDEDBWnVC5~JuNka1hyo%uu!)_R@Z^k z(^CrL>FFuU1H#6}M)aYxvlCPzBO?i>%pMpoFE2u#oSabOTYi(1lWD4LZf+_E$j{Hm zd?oPn^K)uysxlr2P6Df)#L8~PTAW%i3n@}aNQhYd@qKuBf0&R%Lqi`m; z+t}EM)r#-xCNV|=rY1S8uC7+}{0m7X!0zs@GP0?ui2#$6lP@nX%HXeRg($XiG~6!D=Uj&*bDKTQNW8->b?MsmzI{0Cp4_Atgvpnxw(lvs(K9%5AW~q zCzHOuzKx9ye^urtg8lvdFD@=9ZCDl!joMGY09GEJyJ)z&x|%>p^%p>lgM)*jq9O{0 zg4NU0BO4e)g5=x~!ax_Dr273 zxVT8)5VJNtJzWGa(<^dMB=F1ML>T+;-;Yp&HYN`re*jR?3knKE0Q0@#KsYruMSVcE zGO`ABcXxBQOG--2M^`oyw(@IhYeeY${5&8aKo-Wr;^JavkNZ59|6~LEd+a5N*68S{ z0+rz4V3a~a4h{|~AkD4f>IQzoOHvUJ%ynXqqoY>0aq4!XB0~I%>bAeXkF7sw9UmXd zZngn-e{ymnla7uKtWIqHm4-GQ00Zzw2hcF49$j5seTB5p)|5gfwC6Sk54S&UU?u$& zV>ZfF7aN*=f$i;WqCzKN zSz5exJvus)1(+bzz5^K<8L~XEK=F28!w$&Ce=kv!>TIQ>&szkTecx`EEAuW#W z8ct$$cNoe&!-)j07*qoM6N<$f_Jr~?f?J) diff --git a/Telegram/Resources/icons/emoji/emoji_objects@3x.png b/Telegram/Resources/icons/emoji/emoji_objects@3x.png index 4c914be728169cb64c7ba48009e1d9d16b79e923..12525379e02d360692872119e6286a690d3252e3 100644 GIT binary patch delta 1875 zcmV-Z2dwzQ5rhvRiBL{Q4GJ0x0000DNk~Le0000;0000;2m$~A0NRfv5RoBBe@LJM z00aO40096107w7;0059NM(+Rs2JT5jK~!i3?OIz%7F!h7(lk@^lF~^jD=(;#f<8zp zl$V0&AtA&lpG3TXh=Ph36zNljBnf8tpbrrdBBUUq6-tzf7u190*7vQofB$`1d+#wbGajP_j219jz-WR0K?|7c7o&}hO=M)G zkB`q^E6<@rhrl&5GV*!ldHeS5)2C18=H~QsKrr%w0|ycl6KiT}=I7`C<~~q>8kAuo z*a@+4_V)HSZ{D1lnc;@BK_yIJ2y?Oi2teDtdv``g#>B+L241fe{rK?%e|--R1SOsE z@o|6vN`ON`Ae@|>8X6j8?k+4WUFH_mX>oD!_U+rw&dyr- zU;;y!6BJ+pt`$d&zK4g$f7sXFGIo z^r$I7Yi$4mD1rsWc2AX6RaHda-{0@z;x-#1H#hI-=%BzZUc4vU9*fHYB$;nZI#u31m zFJDL#>1486Rc>DsgjjBUwq9nwpA^j;^h(U9WKG&K>6Q`YKt8 zbX^`D9hKFJdBriyw{PEA`?a>Vssy#Lu&Ai0pjL-)>((umwovQt?q;@_?$!Lm>XFxI zK6>5nacA`t%2cK?*04sM0EM`WpY3-0WF92Bg*{zd^Jp(0>hF` zDI$nof4+RFhC+Z&cz8IS0iw5Dx^!t%P)&hhiKB)?CVBk$@lElCDdgtn5;q3h>C>nA z(CPz|=3Ll8pF4Msk1V(rv*ME{PbfC5Z^%nH9JG;xz)?fOMVJuOPrMvV%~iP9YiVgA zKQN&q6;wjO5gHN~Je;$%q@*N5gHTvlsD!3_e>u+F-@JK4-t_hLAwN`N#h;8vsWvVy zj*e~sc<`sEz(O9T@h}EEMD5=$;rtoDfaK*FI|Y6o13M(K9wN)swE^OP+!6%iR4QS ze_u&S30Yyds=O{#gDg^~w6v7GRI_ShG}65xHgB9GEfc&H*_*L_q)v!g4p}VUA$$cv zhm*)QaG=1~-?3T@ddkP8BZvM*j&SA56|sJ6+mG?NkwDUyHY&4z0>s=yvJgRJU~q^| zue1inIp{VmPLX2_9^ktT=0|UD@1{4Me>fz5{`@)9-@A9OX#pr%2@Z_9A{@nsL`tlz z9P2VE2>-_fcSX87P;=cb?XL7!Q>a@M1P3-WG{hXjP12^Bk*ljKd5;B+WFdm!z`DA+ zm|Mt<@UbG_Mcj{(0`8nh{u2cx#I#u9wx4sfgloaU!9k{s!DhmqV7ud&p4WGFe|BED za6vZXA=>lj&r83+xqtuuc6(_8UqCYT(ot4I>Bx4`2;g#nOIIWTr$L{nogHlwu2@vvW*@iAD9ztxWt+f!BK)9#HB_L*Y z_8lWS9*%Tgy?TWYZ$5qcq!rN6DK}ccXaS=Ij219jz-R%Z1^&bq_y=H`bbG^N#&-Y! N002ovPDHLkV1l$DdmsP+ delta 2195 zcmV;E2yFL+55f^4iBL{Q4GJ0x0000DNk~Le0001B0001B2m$~A0B!oHLe_)^k z00aO4009610AK(B005~oUrqo32rNlNK~#7F?VM@IOq9{}5DO2Wop2zq7)veWX&b|BYbMLwP-sfpQpVrxX zt@U5~fA-nK+WS7GO8Gy}fM>unf8ZJL40r}S1D*lTfM>un;2H1?cm_NJC5nO4h0vNZ zWy&;Z(xg_cTGgvpC!SBAKD~ec{^`@FfB*h1gz)kcLxlzbP_E1ICt*c#fujik`sTZHE!IP zF`K{6ojZ5!+BKEo{Q2{jEnDV>rd**^s#Iymjve7%@#oK z%O*I?!^1p4z-8mswQbq5W%(!q?CjpXyK2>{*@uD?Tm_s12Wa-r9eG&2dbMr<3*tqK z79|~PGYbe;IK-_+0W>pjuC2z8AFty^o<4ngE`q>q00`(@0LAIEe@2ZOuU@^Nst+*yC)#*Gpv!h!`0(zPz0dVn-8VZ`G%UN2RuRQdY#s|5P&*|S(C zb(iH5-eL9XlG_0xE71CQX`TP`0m%rw6rd+g3w9eE3j52IMwv+DHi$96frp zcJ10yA_7%(3Q6~{|7zX3wbX`%0B9hju)fn0ofYHI#*9sNQNLVv-P^JbA)6k}*4go;r0(d=ipP7>;yy?b;=g zUAuP85_R_M*2v;R7 zVJg(K;foh9lB(sWaLkx7^6C&qj2ICqj)4OQ2EHuLnr%j9jWTZBI2}V#QIW3AvrMni zTcORHe>X=BXxg-Cx_J{PPK@e7XYzmi_+j6RqXK29&*UX7WIa;9e*H*}`t<1|<_J7S zGG`6>^XE_Tz+yd;xj{LeF$jRYd-n=VwQAMo&6_8W4uq8}SL)pEo;`aUfJTF$OY03i zojlTFKbs!JeGln72&_5N?t!DVEiUa@vu5c)e=l9SBs;0J5E&E1`kS?q#^oAOTDbfu zRIXh4(W6H?R{Jxb%m@OJb$~{+T*v2!AW-}E?HgG5S*9H_Ac&M0V~u9#-Me?KTD8hs z<1K*~FJ7#JX8Ip8WJp@u3<%n^X_E#bVPpf8HjY8y0YK$289fQ5g{mMsk-a%9X0k}yFqpCHefGeh;E--ZHP|MKC6SDQywxdUnwzMrye`*~% zbkNr>?Q_O#J~caJHe5D4$LJg{86kX_R2My{0U6nO5U&4XtafzlWB z34|1;6`1B7#~oWn(I#$wM<{CL%9Rt@USKe?SB^!~DM7kVOX zu1gD9N!P4dQyvXMpv$nEHz>zm<&+>&`nmz_+O^YU zBZeJ)s}93aqef{32eQ+>813O#%HwvdDw z-&&Z9aLM)S*SUgLVu>&`X^ag$7ZkT{-O6+p=7srg+qP{eWVY`&;6|!)JxHetj)A#u z-MWci#IWGz&{6M8Qd#+O&wyvZGvFEU40r}S1D*lTfM>un;2H1?cm_NJo`I+g{13sL VGT*VHhf)9l002ovPDHLkV1lv4C{q9c diff --git a/Telegram/Resources/icons/emoji/emoji_people.png b/Telegram/Resources/icons/emoji/emoji_people.png deleted file mode 100644 index 57b4bed914ca1fcd5ba3554ff213fad639b75ad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={W7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42G$TlC0TWzSVF5FO4N|zKE$K4@1CxQLi(`lf z@7t;S*Chsu9P2kUX>oaaUz;Pp;f2Q(tyXr2hngZn3om)B=x}pYUpTF&g59y%Wzk3V zXXcwH)t?E2TguUS>E-TM97mi6!VuWxvIQZ`CQZ2k4u-+w>UpMLsl zRqfum`B&@~v^p(xTkII1w5nfKVI6ytukr21!w*+nf4wv2U4aEp`{9ojdm?l?BzV}8 zH%1uEY`KuNwd<%-OZ&_omPKctf4=-OL~r`tyzLj)W;X0laA>aaHgNu7nzH+@-b9ZX zA5D0fOip;5nfZRt*|f>=)e^BL7Zj8$#Sf)8zSf)0ecSw@M9hSVHkUugI~_~je}DC^ z+i$;>Sjlp*d~u9qdL$%ZB-B!Mu6A~1I*aw(z9QvhE5@~9s~aSYw*Kn4ng3X z*$vN3e%95v({(5bv1VObNxIkZRA)Fb{v0v zF=NZ!Jnfwx6V``mvnELhzo<>h-+nu5Yu17KKmWcw$SpjQts_`^WTCx{rb+|cgp4bOzoXDc0W&sSQ=Q!udn*@ gHFMva`b|vsjLK?}`ZooBfKnZUr>mdKI;Vst09fxT-v9sr diff --git a/Telegram/Resources/icons/emoji/emoji_people@2x.png b/Telegram/Resources/icons/emoji/emoji_people@2x.png deleted file mode 100644 index 39cd6d9a00f6b9632a3ac9d5c19bcd98b4581fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1310 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 Rn9cwI002ovPDHLkV1j`XuYCXj delta 588 zcmV-S0<-<(1BV46iBL{Q4GJ0x0000DNk~Le0000W0000W2m$~A0Q?y3qmdy=0Y)P3x6?SxbUQucvIe`@f!5>yyQaFUs)cy1e}4j2 z#0)LVN~KbnOa}aFwc2bp*XuPRe>Vh{&*!_{E}OEWyHGLW3Ly(&${-etbvm7Ty?#2K zCX>l*Hd`*2?3l~tN~KbzQUTEK_Zy7{fY3-PfL#`g#rb@0wOWZpLUjv)5f=bpfOUY$ z!lyyo?RMpI*@P1U05HH%%t)WN*X!|V`tI+}@M9Q$Bo3DQ&*Ir`(7fTVvI6AO&Pc`A`mF>XFdAfFfaK} ap1>FKLN6BkLo9><0000-Sv}6#3I(EyDQKS5PWAi!SS;r3*KG#k zU@(xF5OjmO&yjFZVTm_KBQBt;JQ;2JB|=`;)oMjRJOrLQ_4Ds_A?rqn$n%7(X)XAp zM+uSicrK_^DhZN-E|QB)f2ADpi`CDFA}iI8SJx9?E|(=B2A*K41&Eu~aSFfqpqzO6 zFbW7kQO1Q`i{IYfw6vRz2qFtzT-bH=0X3UVpqvcHn*v?qxsAnCSne=KKs@CdFHl&o@O z1!w}YPWu_3&u4+n=W`wr>$TtSJDrXn5rxqNq;`t_M&VorbUZ?#{{HxWrBbPSy?(`2 zvdWPaplRpmi+MBIV{J;UWEme0hf1ZwTa!#CuVzoD6V1YvQDkvp(16nyQ@)17;g!}u zxkVOnTo|a)rNg0Pe|KpM4dg6P1m(K`7Z$VE(CFy!68kpK&bl8R-_YvD=x|jmKZ6?& zSET*7AAaHx%K9JwyvDi+-#opO_x*Gl-ZT>qAjCjy$Qoql)nA z-tSZT|NOH-^29H-fckXTzhjgyg8_A%v*k{ISQ%`YQ^-8^C(=>S-xzchPI93=%s`ld bJ7?fG3m?6c8KARk00000NkvXXu0mjf9j%Fh delta 1097 zcmV-P1h)H%2Y?A7iBL{Q4GJ0x0000DNk~Le0000$0000$2m$~A03{3NiIE{le?XuE z00aO40096106+i$002f&La+b;1L{dcK~!i3?U_96h!GZL?V$$sMKm2 ziGuhOHzyi}0);}S_Xns%MJ3UpQ}`%}dMN>-Q8WX{G0N_f5XExH0j>` z{eAi~FfdT71ylh5mb8Kds#+%XDxaL3yuZKKb{rfWjE;`l#Q+9+1>3obBVlF%oLYt2#%nDa&>rYQl`}_OD>_4M1heZ2O_ide{Q-7RG| zgaj(-1LSpF59~R*YH^#TfAzoK(`Tn=d_kq-fCNGrpyEZ#%gZ|NEi-3mXz1qVhFMO= zs}7;A2ZX%%U;umh!^4Agz_@DX=jR1a#-azU;1RN)aX&27V3wAa^ z5}0P(R?tEY1|j6!;ILZesNNLp`~BkLqIi^yQ4ex4LC&(qpf!!afB5*gc#+d*Z*R}o znjA35k-!i+L@f-a4opl;2-oK3riHW!MkQ3#&F1d_&KMgT6PB&5EjL~9T9rW5vUvO* z;1($xGduLz*;(->x*3o_2n?b~yTR1@JD@unH)JneDF78xX$NgU2e{umh)S$dAxj5- zdWDrmdA%knKv!2+e_vl;s*q1Eg_oC?udlDEDiu=c6d?KO?*JRK7*r~iq@_1c`vmjn zJ!RsLkB>)2MxLIYlC>(N(#hIX-amz|uCBzUySqDO?EXADI&uT39UL6|Iyfq%(heT~ z2m}piQi%<5VPRovYO1ZREm^L4hG=JJ=j7x>OC+N+N2ODMf3Q#PiE_N_<`8Bdjz&ln zEq7i&J*SC=dK?dSKamZAgtQ*fat<h4F}`iC2h-WXqOU zszDb-OJmJMaTu3`rvGBp-)O5Wx77!lQPZX_zr#4 zJE*=^)%{VAe`JoZ%GZWwmaxXSMavYeV^{_4<_>I$^O`%fD1B(|;I58?21%K_Y=8D} z3k-mD$He@*!|T!q)&mPpR-XJeUiljmAALI<>lp;mX=@u7-EhS?Gp%qf;kLg)!yFD zG_4tIZ*O;WbOiDB*#;-Lf6|@-0`9X`JiiE`ZWUu@Zf-7GC>-Keng?9${l=izBk=Y0 zb$on0+Ey8FxW&1&4bXVsH$7VbJTNd2N2`oaoa?p$9Tyf;u!NAI5>sDk_CUy(M2KY# zVA0g;Re<;EXSQhGJ~BWOO$bE4c9ReY027xFC#^F*J^d$J5Olqdf2`+8X!w};>X5=o z#>7$+U}ir$Ix=xNJUsM8{m=tW);DN)=985l=7s*x&d#>Bwi=DKwYBT(>q6SLXEil7 zrnHXE!Rd!HpTpyY&hH*9KZO1!X8ikz^pxw$Ebnvzr&C$Phpy)avh;*6Dc z$f0OF$sPwv5L50gqT?}pist5KW4E)jV{wpRl@NfEb7$mkm@wbp-xs+gf+i5QVQh7! z4J`a3mqgG6G%+g~M~`)Oc8b~U?XAcq5i|i!%u2@5Fq!B{f3!J=vARgC5(3aLa6&8} zx}#xo4s&yJlg~wx^+H34AadS~w!Kq4Vxr&vHi9-$`VO)8B5 z0caRmh<(wKf1f`@vI=^JZEI`eDA%gytYirq92_JSYHDgKpv;zScX#*f?98eI0jbx- zq*4oxhUu0t!|I>fi;w&(TYNP0>F6om$;2@fx#2(OKe4PiGie=#9)!h(j@l!DWU-E8B}d+E$)dwPrw;=jFO-8~vtpNLJ5s_#DEtjrWbY zMCM78e;IHmvaqmFRIZFNAF#-Uj`4$AoXbgxK}_^7YXF;B$#+Cxi(x)F>hA9Ta;Csf zD!=b1M-o5QZt@bzxuk7c;1GsAFGWsc^iz>>f~)8+nuTisfqb&uKI_v_V2|@nKE#ac z^D@p9m=!489&iXlf0{Rqp~%VE<>e*Al5dG9EzA=-G^w0MAdNs8fiwbX1kwnk5%~Wi Z@DFP42uC;x%k=;N002ovPDHLkV1i+Vdkp{p delta 1689 zcmV;K24?w;3(O56iBL{Q4GJ0x0000DNk~Le0001B0001B2m$~A0B!oHLe_)^k z00aO4009610AK(B005~oUrqo31~y4VK~#7F?VQUmHAxu8k1;Nhj7VG}*dR+0(M{5Xn=ivIXGpz-g=adUI?&&RR1w|9SkA3VL(L`+LdYi(_vn3&ku z*m!$;`_ILJ8_rarBGpsFJAkMqB_+ed!>6aGE;RYl<>cf95TF7e99)R98Fg z9p~rgUrBRxbVM)c>FKGdsmaXDbh6TK2R?d{~` zWJ5zkq79%56{+sTBoN^ee+5jLe?~?I*WB5Rhlhuekr5u{UYJoG5TKm+1SPZ=@F42u z=jX4jt!eDJ!muwcF7}H7Pyjl6D4`+XR}}woAm!GwJE+$x|naOb7yLf1x3h?6`^H^AOP} z4h#$=2I0+{a2kOSJ=d6qXyfJd^t8A3n$*_%5tQ27+f9J{t;0lCn+-B3nB7@rWo3VT z92f>9395}p5KH|$o5{ZH+dNjxM&<16?6b48C=>=o1C0o+J=dUTfa6;gmWy(oMXxq~ zqBl1;OQ9*6v4nuUf8U|!aZUT18INeKp`jtUjGCXH-{0Ri1Jv#Xt>_*T0?<(Y(1WBZ z25PV=BX=;E{(G4#x3#s&9z@Z&G0>1}5lDL3KQiw@eSLjdSy`$XQ&Usd*Vn3;LIWC* zQ3N0fRaFegVCz%v4YJ7gxC-^L2O$AurC{R~dmkhJGxG0NZur*2=VfPFT1(KV1$H&JzJ3H<}2IC1Oh^bhT zusZ3+FcFCNSxrq%3Vn5TRoS63Brym>+kl>lK)mgfiwU+D3<3vGMG}KBv<-rq2*j&U z8EJQSR~Ex#e`~}v+Aeu|73lr_orkE)U;(>940Uh5QCng zBx$RYaSf9mBo11e3%X*@-vvYHE(~Yy4kI60O{jxZ@f8O2QIZwttQ&?CyIyxG|P4*f| zJ4O}lC$9pT&Av1e6b}v#*hqAqk9$ULNI9J)z2F2Q_e)VJEiH{rQF+ETcpi6mcVAv! z#&*+weSCZz8ynM3sv^Xor;3ucIvLk68G{%a6)rQ>%F4>a!$Wn(*x1_IVr*_~Y~;pq z1H#tofA;ovjAlbj&iEy5H~3K>uL6NmUtjNwKtQpDyuQBfo_%ajh)D-CflS6A5}f1= zH59L(q!K@DNesf!{_#ul|B_XywvfpeNPa+*2r`ob!X^-rh)EA3lH5tCs;V+bh%%$= zz7~`qru-#gb<&MtDA4lqvPAFg?Ulta*cv5`e{j+n`o3xJFJtD1Dc-ba0Fs-&1qB6z zgM7?w^mj3?_n^{W-TI<&80@lZ~jF;>Q&c}H7%V*CRHnG%nYCalv$)I);BhI zhiCt>K>X{+UhVh#*A%JzR~WoFxBuKEexI@)RspMkRlq7>6|f3e1*`&A0jq#jz$#!B junJfOtO8bn5Gn9KAonc8U^q_F00000NkvXXu0mjfI(rpU diff --git a/Telegram/Resources/icons/emoji/emoji_search_input.png b/Telegram/Resources/icons/emoji/emoji_search_input.png new file mode 100644 index 0000000000000000000000000000000000000000..8ee7bdce94690bc648ded0b4340c4af1f430ac62 GIT binary patch literal 471 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgf%+b@uF~maf zZP4CzE(ro(i~pKPt=_15mTjr~g*VJO-itqI{pR!Py(b;u^-a{oWx0@2(tA%8>7N@W z&AziX?CV)eZ>6yj5j}34BFkxjnKGr7vAw=B{K4ZZvRyK2RUV|x=W-w?dhs=xd) z=UxX^Hde=i0G|sx#B-#qoeb5Ey1Zc3dTjA)pTCNH`wf$_mgb6|OjGT%*8Vrk-nq^@ qz}}@sqAjswqN%U-nLlcOW;5>>kZG&ZYgU{D3RF*5KbLh*2~7ali?P`N literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/emoji/emoji_search_input@2x.png b/Telegram/Resources/icons/emoji/emoji_search_input@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9b7798f00898ff845406e208ce55e5f651d78b6a GIT binary patch literal 844 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1SD@HI{_Xl$A| z^Ff}P#-bnJs> z-L+P8nd&WMYV77~#F;UqcWsiW?^?)fpQj*TG5`F7C8zqmmtR)l|J1f$yEp9=1jOxjl2^rnvRyvw0bwoO9svdDL=2^1Waq-}U=a&7Gfp`}+<*G?*)1!q&O* z!~V9zihG`Ywmc@ZcgZ0EL0g%N7nfg^Ef%z5o-M2;z{PSh z*=+XBgr{M5G&+QTiC7&z>u}-I-@kKj#OO`WF{>8-Hplf&{)HJ}Ip!%FZsv6G$>nXA z4$;VOV3gid_~7x!AI01Di?det%K2@1(aWR};i%*+z2T?#oPxy-AundtM49~i_m3_4 zlyt`8p2>%dJLUR(#A81F{%bd*@Ksar-Z=NYZ7skUy_iw3tllhO&E&40|K)xM69SH| zpDs7+vgY*Dp5KGSIdc!VZMm@8+o^k<<^nMMu!E_dVd9rJch(3@?gXV|Pgg&ebxsLQ E0HoG#F8}}l literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/emoji/emoji_search_input@3x.png b/Telegram/Resources/icons/emoji/emoji_search_input@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..af792f172bcf0a82008f790a536d4544454870b1 GIT binary patch literal 1185 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1SD_us|Wxo#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz1|Sip>6gA`6MbbHUhz{2h6;uw;_ z`gZ0{?-WOYW3v1#?uMUbn3-7(!(4h;T!kHbM1q+`|8w)6v2_qQ%X>CNfZ5R|h<6WD zsjUEi$P~%c@5lEo&6snu@ZRfpGb6XFXZ-%lVZGjc09AZ-Ro-HOS z8X6uR9vT`N60&E{op7bLY-2Tei%~%Iedn zPis~uWi@ZwWHhDEZE<0Vkk6a<@4tWfGUL`QrE@1voVa{Bn2F7ExtW>ShYhM*OWsE~ zIv)J;<;#T&7u5gu_4i-DeqCQrZ%6pUf*Gf;0R`{fi;IX@vF=HBe*XJw*QQy`{Asu* z4CtWs1tJe`-ncO%VCSPpkN*9uJGW5l)3mix)3mB-uQ3=FC5T{#^N6JxA&Ln-Q=V# zd%}5wc7}U~#KgpiNS{4-PAxL?ukg;+6;3=??(pk-D(u|3^W@pHS6O)U{En#{`6qU> zcA>tmE@wh?^lbgeYT}-kdQf_Lx=kq)9@blKCBvUO)K7_syqILEnt0?p$RtQ>Cn~?p@*H zeL~*cw;7nX&boK^E^kAEn~Sf=%Jn9W&I>ObJlOcXPtf($>C>i+&E1!KCw`x@DsZ#0 zv4Md?#_ZX%4_>`Ay`?jXHQ1Exm`cB;t*vO%uYde&PRcvxwPrYTd0&-anCQGBt+Tqi z`V7kfLmj7n&m9w+0!)A1V&LQE=59LB5b%Wi;I*VlZch6%+;n}e&UlnI$Kh&t!b-C*x^zZs^YzKqWOj7uJ9={zke?mO5OVQbEc%aK>W#+Yd?F>N!qHd z{NQ>~g*j<~xbBCPu;Rxrigv#^c4526q4w$%+Gnblx|K=aIkR87BsnTNdiU<#D_d7e zJ^gR!^a7abf$9D0*U~?%ZMRRI>iXidbNi7SZ{NQCG4=nw9^U<_-J&wvb3V4%+x}DD zfA{X)nOUEHY~I*=b^f1g*RQ81Pd}4zh&TSD)}=YW?c_e^aLU(wy&IAGY|f6@xvXb^g1^5IZiBL{Q4GJ0x0000DNk~Le0000O0000O2m$~A0B;qluaO~0e;A+x z00aO40096102lxO0081Ob*%sZ0pdwSK~y*q&6K~60Z|mj$08!4mDmnJ{4XU6v|0^` zNKov)fr3saLgHyWg@S_UB%+}qAwk0KFEcwc*JjOZvYXA`X1;U2@7%fP+;grZ{kLT? zK9JRF^>{pJHk-}$dNme5WQ)b(e}2DzlhqM(P$*@O|hv98Lgcx#-#4>G$&a{?56-bARW4 zeSMx!2j1;~NMHf0)tX2oj7B5)f5~K$N~H#afe@{r1(ZtVa5$7orM+GcMI8>ue!sU^ zEQ`fL$Qq9szu$j8pWSXZL1Dl}@Uij^;c~fJtyaI^FBXg2?RK?VX|-Cy!&okt>-D-& zC;$Kk_)aN~l)+#?iP31(Y&H*vLoS!QRwuMhr^CX>;}HNbz>shh;tQ2ZeK{1A|Ech6F+;&h6UmcAQ}(5~0)Oav8zj z%L4;0osCAL2-<8mI>>8_M51oDiw`lA$q*hf09V0Qo-m!LIYP@e6<(@)e#Yk9{^w^5(y4~k>7KlZBZ;1 zd#*(u0x>^gK@foX78OJ&Nt_>OmMT=V6fF{H5u1VrxOl`F})1-aX%gS brw;r9ez9SRh@DV000000NkvXXu0mjfA4C|& diff --git a/Telegram/Resources/icons/emoji/emoji_settings@2x.png b/Telegram/Resources/icons/emoji/emoji_settings@2x.png index 591d1164a3c1af55c55be8a35bf117e4ad707f13..eb081d4c661fa3e63c932ec8ac04350dc0037682 100644 GIT binary patch delta 1233 zcmV;?1TOo<3x^6JiBL{Q4GJ0x0000DNk~Le0000m0000m2m$~A0N7w|(2*fXe=wi} z00aO40096105AXm007%JYzzPZ1aV13K~z`??U+j_Ze1A1T|Nfn9#hI?;F^vk%3T>S zl@Y~6krE{_I1DKxx6BQhxRZ%eNVyw`5~7e?a>?zS-|>9*+3()_-S4)~QTjf6@V;w3 z&;S2l>wVUG*Ym9H=Jxe`Mc_Xce*yPD{5^hteo;|T9v&X(yu7^Z?Ce}$U;m+|O?q5h z+}zw8llY-}=wifWQ`9ysCMM?Q=0-IWhbArnw#DrbCnhGC!qwGPRaI3=O3Js_hX!4Y zxW>oF?daO$czSwDcp4iU^$Hl75CC9$uS?6X&G_CYH#gVE#|PHt=BA#zf3>xR5kOW} zmfq{q@{c(pFfg#DrY0>d&CAP+WtyFxt*@^yEiDz+^YgQw{_yZ1#_8$l{{H@+o}T>t z{KCS*$H&L{`T4G{u8WHcJvHv$L}|tiv~g z$XXg+1M>FvWe*h znVA`D467&vkwu&#ta8A0cXvZ0!twF(@1R+LCL|=t!ZCye_$!1zf7JQ;ITPyb?KS6+ z$XZ)lS5{WYUp&jp%XBfCvyercAsEOU`LCCShrpAaoozzkG}_zS6QueRBQ6tSPEL;C z$;u|M->#655Fu1oSO2y;wir^A2!UdpTJERaq763!2i7wh~y_1s@`5hb^WKA`pt*s3g!O+Y` zFc>9Hz|<_-BO@cCi8w=Oye_(tk&#q3!sqx=qgPi~v5$_9s*UP4E&#yPM%vrk+t}CE z))3dYl&;g{y1ToZk&!`ofNFv-atjL!ii)NoF8!#!zP=!be};w-*HDzM(+LSe(x-kK z;dPeCOk9#Nl+UiZc zzP_#*+xDiWAdyY^?oIu<{`OW5#=N{dgY`$ojS-!vTzKfAKk!WJGqi& zKP0&_$B!#Nf2e2PU4Ag3PgkHZC&LnUaB#4)veNLJG+28#w}60vrlzLE#6b91O){tGf+2@lam)07X_yI zJUTkEc@2^QxbC#Hv`{uoPEOX<)p5Du;NRchmtl&Ee~Q%ekal`{x-xI-1#XEDp(BEn z%lngF(6xo1XfmPV;$rdE*4CONU}wWPO|H%e*bfd4Zf|dC7`_LJjg7?xK+X;m9YdFk zyS*WYnuJR}*Y)P+W^PzZOG|_VB=MlO#7G-}lrDw}f8Y4&URd!HIdebam7ekI3+o~E v_xGpTCsJN|Qk3xq%{u)H`4xfxK?HsRsNf%zXWidk00000NkvXXu0mjfJQG~I delta 1424 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 diff --git a/Telegram/Resources/icons/emoji/emoji_smile.png b/Telegram/Resources/icons/emoji/emoji_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..3b868e80bcd9e8a24fa92cf541149b224a8575f3 GIT binary patch literal 541 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgftliVaF~maf z?iAhpLjfXfH?7)_Iy!m0%4}Zcl5AihvO>y9b>F`K3_C*<4TYzAI0b0%=ssk35Kws& znQt-W;$2^Zjj@c+YtI+&Keu;#>!JO*{3UbL7g91hd(`BCg#>oen==61DbP z(N3GWew%N;G0kQ1@CmY%eW!caph>|(hHu~d>0V298jh&2GEDP*dc?tVl8IFBoS3YM zOboxdetd{D6V7rAoXdEiq8A=dRrOvZTsxzU=WpK1QKnh6fJ|G(Nd5D%!axZoO;JxwmE3^UqIpHjwK- zY#_oA5o`D~hF!>sH9u4MbA`>f-?bCJAKV;KD04l_bmHE)^V@PK0!=S$*!fOrJ>%5V zV$~*6g~yr?E{IyYiS>Hv_usb5UM2dxk)rvFk zn4Enx`^P^gqif0YIGAnUTwJBK!Tpu%+xmZ!KcDi?j=C=Yzm|RB+E3yNVXR7^sPT05 Kb6Mw<&;$UM-pz;r literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/emoji/emoji_smile@2x.png b/Telegram/Resources/icons/emoji/emoji_smile@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d6edb73478ec3dad98be6e76607110cd0517633d GIT binary patch literal 1104 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 diff --git a/Telegram/Resources/icons/emoji/emoji_switch@2x.png b/Telegram/Resources/icons/emoji/emoji_switch@2x.png deleted file mode 100644 index d52a9cdade67823643ed981693b2479bf3a4c594..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRm!2~304!w#7QjEnx?oJHr&dIz4a$Hg)JkxxA z8MJ_G4hF{dOa>N^5+IfWVg?501&j>LK$;OGwtxvPE3kkW&XxcvWKp#;22!s)T^vI! z1gBm(%jN1I!v5j)v{rUO&7~b2-2QJIr<5zmpG<#q_y5}|tw-m~jP&iDfA091pD%XB ziL@q4$e#?I_O$lC@8ucGG+kG%Vmk2Z_q}bo_fjIuV#Q|`%E%s{X!N{t(#&NiOJnaH zDXfuUpIJH2_WWaCiMHF@CPrSr`n~qvgT<+lC*J&)a}~@N;BiuFR+y~vkav>XtCRqq zDHF{#-Wl+u1bi{^txS##yIz{|YFFKX?>9NkW-a6N`|r-d89SZ#<F%=e`@{drwzCmvv4F FO#pp&h>!pP diff --git a/Telegram/Resources/icons/emoji/emoji_switch@3x.png b/Telegram/Resources/icons/emoji/emoji_switch@3x.png deleted file mode 100644 index 4debce918e368ed3b552a9c9e39adcfa381594a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^5EamT z!Mpa_##K!L66_x`R=f0cD7XkHW_)t2VqkA?laVUQxOniWW4oCAVs=3mR!4!J6-y?Z zXg7FUmCy2AuKmU9Iga}s>t9&@vX5W=)%@1mZ<`zBT?6mDEprXb*?v22J$t*&`RYAw zuXl;KGOqpn^G{LT`K{iUO^#eDm2G`x#lh5;s4(rZ#SGE5#Qpc%BW9mv+q_6aiib_$ z^d_A%U5_g)WSn#^n;2?)PP&-EvXSTTfi-{Y?B)6ur!C8zQEDL*F|9S?^;fCQmrR~o z@FlGc(>}8+M$hKF^O~nck)fieQX|zkn2tp0h^0m@y7skdu8*2Pw%z>XuzAlfzZ6M2 zxv6IV{fp17=K9U`V^8v&6p}8MbvDgdC1;G5jLHCrElyz#c|{=FaXo1UfI&)eRw z9vvu>b5h~7|Fhk44ofy`glX(f`xTHpSruq6Z zXaU(A42G$TlC0TWzSVF5FO4N|zKE$K4@1Cz3+i(`lf z@7u|{*JnD495a6;$R+hvcb(JXz=<7E3qv$LF02rV5^VkNsHEi7@7;M+*Jo>5?f(3;XJ$#ZRrZFn|NG6?@uN&*`srA`=~uJ% z#;u=yR&DlKGpSzd9HW_Y{Fb{d7VJKHHOq9apFCgtZZG~XReuXC_T0_8{Bq0v_wUQB zk8F*4d;R!|>#t|zZNDA2-h8Hy0CQVw+;r6~QEzMP;@4j<+bt{Y60|VjN6o&YNsV9A zHcK-3Ol)CckVuF~sLATBu<84}$dYC4<(C_Rd01LlepJ{T@_1so?8f!F{ryLiWTX!N z`6n?)NXKB)@kcCnli8XXZA&d=oCKz`arbNxepKDPpTCT|!t(y)^GB9n=A7Z8q?l0D z__2bAX|96Bt0`L_1O|F8yPG%tbgI>N50lwv!&ZNt@p$IXzjY;_pKCulc>l85Y+f-5 z)*1SqYLiQ?<{nIF=>IkKY5$e1uNfw<%61!k3hwW^m~mujsFvu;kY6h%7~jcS8FEP7 zVD{N1YBt|1Y%EIkrYGAQtMh11^KQx~N`rHKpzoh}-!EKf2_ zx`bx>v{gKaFq-M(#H5f=@0D~uP($Qhc}Mrj=bu-|@wLy_a%^R4WcX)h*Y346NNeiR zB*ClA2NkaVU~jnn)^7g!)mO82#>DAO-@hmHA?rthk1H<7bRSjn*>?pPiMj0e7+B7* Uq-cNp?F33Tp00i_>zopr0720m!vFvP diff --git a/Telegram/Resources/icons/emoji/emoji_symbols@2x.png b/Telegram/Resources/icons/emoji/emoji_symbols@2x.png deleted file mode 100644 index 2ecae9bd89ed91dc625fd11d8c3bcd202458bc4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1395 zcmV-(1&sQMP)00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuA-AP12RA>e5S=lRoT@>b*nM@%= z#$?I`7c!L;apOi&xRI2Z8zo61W%#&pqYR0E0GVzOWu_FR5Tb}O&t&+0Pv8Dpz0T{r z=WOTT=A4VSJv{4KYp;FI+H0@Z$VhuM4`?3HJfL|%^MK|7%>$YTG!Oii2aLb0*woZC zCML$u&(FcZ;pypVZ*OmHZSDB@Sd!4g!y_y#41yLG7MGWoySuxyv$HQRFOq_)0ldAv zdwYAYudn}peBR&R=jP@L3k%K6%=DF+o0}IG7cVR<0QOPt@6F9kUtgb(kB`2T`XklV z)$q5#0zr3we?KE5LsxfJR@TA6fdD4xf)?buQgYfHuaJp}NoQwgPEHQ-;u ztgM2AgCip&@m|p^b_p&=x4peRJ3E`k@wUv*&u?ySK0G`)Iy%P2#`^pF(`-*qPkw&> z>+36xsMf$Plh0;mW}>5`1=O&ntgP(hDYJfOXUBjS1zbf%MNA3}!IW4RyN9UCq@Yv` z#y!5izRpN>zhF5m|NQsJK@tWkm@X)#K}8LOXU2%Yk7&cig*O`ymk4$k#{$!c14mL; znmsTukg=?+tRV17GU@{G_T$kVk!;`J-!CsOGgweikR)Du0RaI4jAd(UOOj3%04XBX z256-hKzRXtV}MA-spscs#wI6VNG|{Zl+igkIjLx+0V-sBZ1(Z-(EyB1aV)^g%S)0@ z6#y*&Ih6{8Zf}MN?ihP(YpcF`dMvCRXL%M zAulhFDL_z4NJtP)E9>JA<7-wXJ?L9m^WX!n4@#cRb z#(p;J;^KnB3DdN(v0-a#`x%OF41u4*G*10*uT5aDDI!fzPg`1A^4a?ljd(CVKF&OX z$diObyLIi?D zQdLzYQ&2TnZEY>79~c`j+rY6JqpO~$yt0RLD#q|qsWQ3ia9nwJpBS)mE zUv5-XRFGLnmOf1coSmI1-UD1&S^3LG3)G|b_V)J1mVx@0;GFjK^rS=$nTVQ2D}fzK zx~QS!Fk)*sIywps4P|U7%usC|WoO+=wGwsTBAb$ug4z*V0~#o#c64-58jDNm58UaL zE-WrCPXEsvED6gW~$;~yF>^~T1=5fKsL;o)fD z&p(7$tb~g}18W}8JfL|%^MK|7%>$YTG!IC6;9tV(!Z`&h*KPm+002ovPDHLkV1h+v Bc}D;M diff --git a/Telegram/Resources/icons/emoji/emoji_symbols@3x.png b/Telegram/Resources/icons/emoji/emoji_symbols@3x.png deleted file mode 100644 index 9d90174240c547dfede3e7d3bb0459f4b3bbcff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2092 zcma)7c{tSl79aaMmZGd#LLNh2Stf;7Mi|Rr5Tg=vLplmTi_t!u7{&k<{{&BwNobNf$_k7Rud_L!7yCLks;!5Hm5C{x+ zutfse|CfmJ183yHToj=A;*j<>pvDoE6~M6#_JLzuTtIq&Eehhx3n`d113*Z!4QZ+rs*0*U++ZhOh|4j+f$9V+i4N6T-*2HNM#_ZRHI z@~hB!p;b8ykky}QG1 z4WIbaqYiPs{r3L;)^et_+Jf|hk`iW9Ak8ZIpe1yieCu=j?7g20nP92M37k*W_Jv>C zVgeHr&B;7S%EoL@PtyMP_0Ju&JViVKhp4Zw52O_s=<9c;93IrUk^~nGx0p3fS6|%x zma}5jP9maEsIiF)b3RGCYf}e1s|0A&sf!l9LGNl^4E;Kz1;_Q=?=hdioA^o-TI~x@ z(F)Z*D0riQ5?|R96lIf88G1)RZ$`vqL*fqGt4zIIz@#0!aZ2praQS0crq#WpYp2=W zcQ~I~yOX(tQroK^3hU^WX-i^?x^U~ji~Vgi;RAv3ivz_vF6B?l9a&$xaI^x|z>ht+ zz4fi-(aMWhpp(6)?$yGQ3RQ_n-j8pr=fOj}8?%L7{%_K{aC>Iq?{%4+h5lS^ZS9x0 zKHvSZsR3&UdsmAW2A7|YL5~tGO+&t5jWNTisaMo)7l#~8zl{0>4l0sXHq%#<7am$- z5N5lRDXruIN+lE#bO^L>cJpIu_xNv_l8R|3e0%@8(G$BxHWeciUC(d$!gJr8i)VX6 zo2FaBnnOm34l&wFW>Osqobb=>t;)_e#?e~*+v+Q|kv2(EYF7GFo78NhXcfiH$drTa zdcoq|(lf5-&Ye?Hwxgt{?$Yr=Cd+-3%S%gxBb##D?1>@uAmFJxREMXI+_kCZ$mtiR zpmgCNt+|<3ap35M$XM3jV0apoVuWtSFh)qf8;RJY$Cp9YOFHWjt;p_ z88T+QMq&MP4}f{?WCkuN87n7<`|!(v8Z3 z6Nk@$HE}*j$o711CPbOFNH2Y^aEklB-lHVX?y6r-073M9YlQdxftx#T@FIUI=&^uG zV;+CB$FJ7j+{?(e9=_(8+JW6T`tc1W4-2-=+o>XJg;56ez{mgbQP`uc`{pq{liB>7 z9P#_8I)rL)2h>>*ecWEiVad_HIP2CxrA~L}xN5bZk!+TW{{7`x#d@BA8I#HMwC&y= zOo-}($Xq;^uMAC4Gjwomqnp;)Sd1EBHV!Q zmX(#294o&fqDQTB@x0F}9gXHNnMhN3GVezW8vlsgY)o&n~m zi$&}T^EjPQ;XW3~zC;%SDJA7;$sE&|YAl<%Mm#MFA~|!O1b-bYv*M!(m6Aw?6Z8IO z!?3pix|E35;R`a;V&XppvZPcmgw{(XO=XKUcc>Cmb8hTmHj#W96qmie0aLK&oL z!V0Y8@cZhKGr`QoX(k9ss2U%!t27I=tACQD)|o&2b?Cv+)tuyoJ~7&Dqo}rfxN50q zzExh7D~BBUNhSa&6Sm6PgYyNc3vO-_m&Ts4=ldd7C#k+72$B_}fl2>xRaL!V#B`H0 z{SpTg!$ZYbzR-u_MN7w|p-gm;qm8ze`Q2~+I?V>}P4fp1jgEHX`fks^6#_>CarxIKlkKN$_UYt5M1Y(xmZ?Fp|avp8d;F%*OOwvEo96u1Bk;g%HucZ zE^&^zYM!YvMHLTpH;Fhnw&7Gw9bWKV0#hNpl%G-4A}F1wfUe$O>Tu_wG3yPWCf zG4I$=;fR;p+uQ6<(4IS6Y7AgVhZJjvz$^YTKs`^V-s&MMuy~}@V99xJ*d)13@#8Sz kk;;KkM9lxQ0{z8#B5SeQLKei(x4$+u{4&C}(Z)aR->9bK9{>OV diff --git a/Telegram/Resources/icons/emoji/emoji_travel.png b/Telegram/Resources/icons/emoji/emoji_travel.png index 315acc6f190f8f4aef78b5ef51a21720cd91c41f..824d92d0f303b2b98f0e3a8fcbd382c58d8e4585 100644 GIT binary patch delta 604 zcmV-i0;Bzg2A2gPiBL{Q4GJ0x0000DNk~Le0000O0000O2m$~A0B;qluaO~0e;A+x z00aO40096102lxO0081Ob*%sZ0s%=xK~y*q-BeAh0Z|yf!%!5-!dDba`B*Di$il)# zu~Et&ps=@67Ru7n&dSo#o+2MnHcB@irIdw~5^Q$Kx@be@>gt=IL}IShA48VCeOF=ks|q8WB>248w#%p~K-2 zi9{}!3oQ_lN~JQHOjIhB2uW8uoo=()6pKYEERA62cswQ&2`NlQnM?+zASMYRE|p62 z`5gWQM0TN2DA1{DwJO6F3WdR7fYzkbX&IV=qS5H}dL56)NaRR<^WAP|f3a9FlybQY z1(iqwEX%?^tRc~6vw`Ld+3ogjw|l$Y7K;U$^d@#V94?p3@Aog4OHl$8cJM1gzpY>j ztq2B#oKV62Ih{_Rm@C3qESAsb-_-#H0a(~ytyV~sDC6%=k z{d{OChxGe>S&A=&&S^9n+-bDHYPHtub)U~iUvZphHk+Z}+wB(RUIl!i;c$pTjYb1^ zKby^Be7J8YN^Fiyd|^7BPBNK<-sACbBa+DQeQ3Aa7(}gBQ>)byGVUeNYPBeYJ>ag@ qYAKb<7xMF^(P-4`^`Gbc$&4SBq2<8C-Nh^b0000e*}Q^L zF06I2SQrcjgj22))oQgamrG0spU2}l@m*ESX7ktA7orf3LD=j`LQFxSP{0j35D46U zbbLM^Ap(H_;TWXVYLOiDH4O%Xg+c-AU9DCGx$+-^4@=9da%R0`Pd_c&*Yq!X~+@9*zWnP0Y@ z$iD)FJPN3 y;Pv$t9UFW5@$r$(B4%+}xzW4zz61Zd1AhRU0}Av&`0#rG0000e zP?AT&KvFVbawN$}k%0^_5krL;1Bnb6c#DXHkXOhvZ})!PUHj~_{?|UoQTNt4gVWk; zee2t6ul-v4cXM<7Tp4g>;Ab;nf0Cy+nM}dK!9hVm5G1`mKR-`SPOh%5B=L5@YHMqc zj*fmi^jlb1$jHdBqccNjPfw3SkyxERK0b1K zFv1$yb8~Z9-YY9Bjj(!lq!v6_<8g6udN@Pd+}s?94i68Jd_%Af0NK5}y8{)QeI2Bp z30s4u2U|=JCueJFYGQ1enVE7P3e?op6evzlPdz<76-K)iUS3{U(I8x2UY0+}tlgxf zq_6=sG&ESX-;=7Usu*W!e`%=}lg+kA;Dv>Sd3kvl&9A>d9I|0yVNXv_TK;zF&1N&s z4y@~&o15wBY0!?3kB^LuAWC(f&dyFY0{-9J+^i0DREyDaawectO|t9jYl6nHripgQ zfb@_q(5c8|vzcdSXA24nxEY=^Gc&yDECICQqDH5h%--JK9UUF#f9L095I@v>d3iy1 z=u`~IW>GW4>gsBIeEjzIc3)qg2z8>ImX?Oy147K;=H{jzb4*MO%SU;6xgPF&HeX-g z_xE>nR9|0Dn9QV&3z=yqCnt%?iOt*FTXyXyBqR`88c=9xC=jo&uNM~=A{2L7U|^uA zk(c49yb4i1fFU9xe}eF+2Slot^z?MB^vlaj9AZjp!YDQYh6^0w4ieFX3mZ+$ov2ii z2L}f+we$1y+=eZ>zrW8nT6J|bHyH{5b4QSfyPX}vySuxDgl35Oe0_a!940Y5Je)Vl zK)GI35Wye`2?HKe-5E;Z*S*EoC5+L?y`lTwH9iSRkLBo#D#? z-^rv8WfNBi9t*h3>gwvYwzhhEdpRaDG7>Vmqqx;7czAfMudlNl-~vKb#P1Erc%oaO za*~ga58gc>#M{2CtSm7xF*!LIuYHUP%C@#PV;Y<{c*ql(7lb8q@T;<;q)}Gu;0Gru z7vZi_F+z(}XJ=>QBY~fvAHJmESi{0Z5u@6lj1raM=;&y4bTk8l6AvIfh_MEUyLvzb z delta 1377 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 delta 2088 zcmah~c{tPy7aqnkvW>1~vP`y5GmKq~=vv0U6>=L(5*lK%#f&6BiR}BDu|$ZFF(tCp zAWMTGGM7nNvXwy#n#&!1`u}^L?~nJK=RM~<=lpY?_vHxBKowHYJ6Q`KlRgFlfrM>s zEL@JV&u>7ukK*^>;wYw_t{#QU5Mt|^m4Z;aulcA z>D_3?S5aJ^QO45p$Oz{gJ*f*8r?lpRgBw6qjk32w7L4P{$eTE_J|M*@*MnKA}!t6|O1`IjF| z(2pA%^T+QwC03dMb+xquYc^r0E_r#yF1;3zTuBm?%91nMW6kR7#ZPw?U@#ad6qX#v z*?;@cI=``4^RiR<83~TTHNGM(|6ynbiZ$|~Gpg}Iiq9IeEg1irLeXguyJV<|L|$oS zFc_T?0WA@D0MA+*uS9B`VQKpf&NP1UR2wC3&Aq^w0-XKRxA!CGO%a-!k2;_taN~7S z2fccEb(MlRSAJ%t>80RCN=iz5=)B9$Nt3wOLqlC(Pd)mwGEyv{nE20+wUN|^+fhGO z$MBJtU&3#jmg%28TRuSCW4Y5!3EBt*1pJ?L1w%u3fN-AwaJt)Z~ZX_o>6#J|JEK}a%y+u@2i%Swf5%b%z>wbO^;i}fR0!P zDc`jbK*Dr-`9`KQ{og=Ai zzaStxE`Bo=U5{W^Hq6TLuF=bbKUOqeY$=ste@7mVQ65(jQzv1fHn;SiwYR&CKyXJ>0Mi}N zOHujD@aX+EiSMF80XUq8evU5rJ->6?QLWWJDf^^}m4?+h{!*=o<>ARm7xTi>QYMpW zXNly_6WIH4Wv$6&=>;L}njY5{ixs&!PBXK#@9*pSioO?1nQi+f4j_U6uLKE;wU z zs_sFfLrS%-a37?8>>`fqn7)!Rj@f}6$nt<4m}X?RU)E&l&d3= zem?#K_;}R0%0Dx~+MPw-YKzbiBu`&!zu{Vu+;G-O6Z%;R_fa}s#R0lHMtZcH z-ks-q&pHY&9xzc&G(fuqZ7#3 z+H|T-OECV4Uc}WJgP*v=3&v(v7!q|lLg}Ja)fiF>P_2+BtlG7PGo}M!Dl!M$UcFU} zLt3GlN3H$Q0>UP9z-iQ&O*TqAt5}R}=nUveO@jkmX2k7}W60Z=p6RA>O+9vNj5QH8 zKd*FVF2k3Oo3w(UIY;Uee!K)XiT#nJNLJ`;MaC%4Iv5NNcPx0xyKIpPq^5ejDzVMa9OpsFe1WHP8&PewG9;&;HGd5( z+cmR+1P28%nmyMVWZ`fTtecyg4Js$rEVTmmDE~%81OlG3n07oQFs&!vC}a-J!+d^S zMlQJj+t`t&Z@q8NHoui9ETa!Pg$&Qh^G9+&cMS8(^iHXj-=)F!dUL~|e0ZQtv1+IX z!ctjC_TT)v*x$spd~K@Eb}=a`O_Ya3=NYj;6Sv9=^3g)2G@9KXpgE;7A>YR|@$fp% z7|FmZ`bmnKI_&e+YW61?1-wWxHuQCp-)!{Z{*Z`louQnZoUG>hBQm8OHzrMBu{|9V z5|O+_iGsU{igg8OI7*=-PPllzM0-NfIIizke?lf3aF`JOv_7-(cT3y5g@4&a>Ym+y zy5R`o?^HVO_}vo|4h{U5{jK5~e1oCs-Ax4oU}%WM@&9X|3-h=IlRH0_b9=ofDt?>1 Nt)-L26LX)0{{r?h+nfLZ diff --git a/Telegram/Resources/icons/emoji/stickers_add.png b/Telegram/Resources/icons/emoji/stickers_add.png index 7e24cc25ef9e45c2e7ce3edd985f6fa7374914f7..d4c77a202c4fe31fcf48f38f030c8f0df0d2be25 100644 GIT binary patch delta 409 zcmV;K0cQTA1l9u~iBL{Q4GJ0x0000DNk~Le0000O0000O2m$~A0B;qluaO~0e;A+x z00aO40096102lxO0081Ob*%sZ0YFJaK~y*q-IOtEg+LI7Ut*46r;R625UYS-?FGDq zx3IU!9fGION(8OM1K6mQwUx#D;)YdxMo2J4vc)p<&$qL)v#z(>za38}Co@gc^E_SG zVY;r%vaGJ_6aFCN`+n0j^E?+tfAPKy3|vG)2MZo0MN#57o~9{^B2`tl04^dS0I+T7 zzy=zI!M5##*dh@E0Q(B~&?%b@PqK)`0AOclqy-ee+v;^0I}r?cCw{t?Wzo)EUx>Xe zW48tjm}`~#v$VMBs;b6ul*)+#2Fw!4yhuyaw6<-f%YlL*z;#`hnX;IZZzRd{Trj}m z6BF)Qk??;!uNC!uPZcr|JB!UlEnyhSkT49xD9cicYei|AI*#+$Y>93SFkl|dR$T3C zuAh9DeURk3=82H#vPUZ##u@3?w|*nP{9_Y!{qgw@iQ>l!d9JtK00000NkvXXu0mjf Dd6loh delta 487 zcmV1`&kY?3M`7EN3YiX$Pk0*&apYm zO5uFknCLc!7-a5#uyri%-Idu6 za7dEmDh5%o39;FOMsnk=J%Su&n;i*^w`-MyI!s+SBv6C>V9)7djNe_Ev#vUWm;P5J d&*xuWfe*W99>EfxDct}7002ovPDHLkV1mdE*FXRO diff --git a/Telegram/Resources/icons/emoji/stickers_add@2x.png b/Telegram/Resources/icons/emoji/stickers_add@2x.png index 13501cc408c3ad9dd03ae0b3f826cbd0af8062a1..f188f440d5c88257b522c9abcd0c829c02f5d77b 100644 GIT binary patch delta 842 zcmV-Q1GW5w34;eAiBL{Q4GJ0x0000DNk~Le0000m0000m2m$~A0N7w|(2*fXe=wi} z00aO40096105AXm007%JYzzPZ0_{meK~z`??U=ucB0&(w)m_#^!Bi79SRX+Q1qIPS zpTh_685H&n^eI&EPhezbW~eNz2aD!vWODbrE4Ej*d&X&Jy_*9kkhbQlufD13uI`yo z=ziTZaL>SPGZ6MqAB)9OsT4fhf9>{oJo+cJW(bGFg+ig-ZZDV1{eJ)R?BXv*ZUF#h zO>OJ&`1sgtHs9ah&onp=fdR(FDvHHJ)a&(^mzP{FCjkzJ!+1PiEEZI1x7%S%CX>`I zpU+pT)p$HEu=RS~YPAM~ft9Qa;7BCW>2y>o=JPorpPrta+_(h*m~z1#e-bCWot-&5 z91ey0_4SoJdG`m5i}*qUm3Ln=lE+eNrqgL6kuc+&t+?Q*H2KYws#LezeRz0qj_Y;@ z$6l`|njmz8y5A$=!onk7twuuNuJUA6^iPE>*VSr;ASS^TmHH(57(pWQ30m7;@SB4c zBI)t+K+$N_Wzl^|3aOMsf3A$41~ggeek|RK4oLa&=klUSdI98ieVoQG>7kum6hx~O zuRUqZUz#xdavNEZ$oRrVeGDZ`}F5Qj-qx}m~XbEAQK<1LYy}iN0 z+3yS2xBL}a38533e+7+3BcSfbLY>Qtg=sF`Uqa|EW8ter`LRLr#4o*o{&dsNF)EhDfIfb^4^|c>bCS%g|Hq&7Ae@xl?e`4aGhoWVFQ;kA Uq{{IxxBvhE07*qoM6N<$f`QG7F#rGn delta 1101 zcmV-T1hV^s2ZRYBiBL{Q4GJ0x0000DNk~Le0000$0000$2m$~A03{3NiIE{le?XuE z00aO40096106+i$002f&La+b;1MW#gK~!i3?U}hwBS8>`4KhcLgv1I6AlclG;SC_< z0U!j6jDQ#kGE!t50~rz#5&@9#3M3E!S|nb;AdcN{sddRVea*PNXr%7IG~HGIUsY4n zM@^}eT8co5K#D+$K#D+$!1qO9e;_*b=;-Lw)YOkw1OHd6-QV9oKR-uji~~46KEAxX zd~$NqY&L&e8dC@$hHxC#C@7Um<@EIQ{r%lywqY1yR8Z{QfSyulW@ctM= zgm~?G%zGOXu=-9zXA{da&Xy@l9>3vh&dA8f#%H4w$O^a;McJqS@v`kp_*uLIO+gIf zMT<_j78IfdX}Fe4l7p9=bJ#vJ?N)nxdtwS57eVJ76tYi48gk|vf9zB@{I{^MFgW;E z?Be2rLykcr>JStV0SPJ8UTnVui;Ihba(sO3g^MDfL`t0>mfMM*?;WQ!BSF3t0tzC@ zJ*Y9j2(E*kC&1lGAb7HOcXz7R*A7IIt8%$>b9o%#C@=b)@7+LgXO&J3u;G_&6Ed#) z+)iwgEb|-$zV4lKe{*x9Lg(v3#3g2Tcb84q2&;5zfKiOW2o7NV_V%`ofbpN7%_y+5 zvtt|&cfgZEyi7vSb!jxRMjTW+HNXb$c><4*kD@s-F=2xs6PPll5TR%4`udt%M3=gx zP}iXTt8{9BPG#%N&(F(>c7A@IO|w+Wy^KNxo$z9So7a;jnX>~ksP`x<6(eX-s1oeR6ztH!p82lr8TQWPDq? zD79POGh6uM^wZOmWKp?XrjY1yw{2PrhT3VHw05C@h-pZnw#sFiDEyTYZ;O4Y$AQ9^ zRq&zMg)Mn!e~MjN#D}ipE+x7ii(IG!BF7$nIrH_mxQh?PF0V@>5hTqe!bUBvNFO-F z2Yz{{wcLvv@`-76b=7g^V+sLwsED7KIzG;+ae*Dy)&hUzQzzM{zwtAxn$c^AGvCU} zO2~(9#6pUmfd=)ILPid$Mo|uth77kVX?i^}DyG2{BY_lw6oC|h6oC|h;zi&O_QnE9 T{cnK*00000NkvXXu0mjfi2?rX diff --git a/Telegram/Resources/icons/emoji/stickers_add@3x.png b/Telegram/Resources/icons/emoji/stickers_add@3x.png index 464456ff1f69560a9b97cf8d4a260d36e1b1234a..48de8115e323951613e07414864f0ccc3f964d3f 100644 GIT binary patch delta 1291 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 T2;+>J00000NkvXXu0mjfr;i=- diff --git a/Telegram/Resources/icons/emoji/stickers_add_dot.png b/Telegram/Resources/icons/emoji/stickers_add_dot.png index a8253390800d903983b8769ca1a233e8f98a90d0..1bb4078f4ef84939c06077e904c5366a51d5576d 100644 GIT binary patch delta 193 zcmey)_@7a+Gr-TCmrII^fq{Y7)59eQNK1e)2NRIY7hSb}qM}E=!~$jp79gJyD$DT5 zv~(?yo$2Y~7-AuqoFK8SVP?qulP6EAs;GE)dEMJl*c`H#6t)^ea#Pnb!;z}(0H-WY?c)I$ztaD0e0sz9~LGAzm delta 185 zcmey*_?=O)Gr-TCmrII^fq{Y7)59eQNGpIa2NRI|Bk^|eL`9E!g$2wEEI>XZNCt=* z*0d#k22zQhE{-7{yvYd?tcw*L6j+`-c~bWN-rt{}(-k;VgadrrOfKB{Z@`c;IgyD` z*J1nNGynNhl2@f25>fJea->tZ;OmK;9STc%W*ui-$|rNxUW#e4q5*=4abjTLxo$97 Tj{n!X7Lcu;u6{1-oD!M2+A#^MS23P%gt)J6DO>w>X8WZ3Rg;e2Ia9v0CNa7(_-oIZwkhoE zHU)US@4Y#pC}91mw|6;CR=-b^)xZ8^FYnZ#Gi`hB%#o3l`#v?Z_|?k={{xnoZ541} fU}Qlf$~g9HVW03Xt#+Oh(76nru6{1-oD!M7EGr-TCmrII^fq{Y7)59eQNIQTq2NRG~<$l&VQPHE`VF5D(3y{wUk^y1{ zw?L;2Kx(I_i(^Oz>)Wdbc^edXS`#0|>99o`vKQ}QebHT|AjM;z^T*QhpvQhCD|crG zMiv1FhQ|5a74L(+USGU&@q&;C$HHs7OxI3Xw4hg}W$jzD+52~K-CEJicc%Dzx=S!y z*Mj8x-VVXaoas8s-TU^W6){;ppLgzb$oq+$g`ed&o=NK2-tFOReEmga$<>1&`g0B) ld^(jwp@D&k5b+_pQFh0o4fZMrUKW9Tvd$@?2>?qFTt)x@ diff --git a/Telegram/Resources/icons/emoji/stickers_add_dot@3x.png b/Telegram/Resources/icons/emoji/stickers_add_dot@3x.png index 6f0658b5adf9df4e6654e3689df16e7bcdc65957..ce7f1aa76eb4ee42144092d0b2aaa463c795be08 100644 GIT binary patch delta 434 zcmaFO{Ek_%Gr-TCmrII^fq{Y7)59eQNPB=V2NRII)vqEjQPHE`V*xV*3y{wUm1US< z==L7Sjqr4F49Q@9d(AMb#X;oQN8cP4+r|p^Y}WiutHON{$S@ICM*)jIV;<+& z>yIt$%v=t%l*A^=d{$5o6c;@W!`;t+mvN1kKAaf;+ehdqm94y#K6)|YrX~5 zKG*I#w4yEa?1}QPk9lis)|`D&wRhDr)gtTwgHtVP?th=v_cY@26iE>uyLqLt{Il1sdbQ!$4kpX`)^hXS_0pG3e(uYU zx!=xva)0ZbL-i@%lb#d^Idea`zewlw{hLoB_ZFG_Rd8fpG@&wFM4I3>lx+do-?bSR=wQ#a%G*x50C9=`)WXDmXMS zFfy@l2*4RT<~an4_+BoFHSc@8N#~>V^FZOR*S)`e>3OwFuI=H^cOAbnY;6~7-!(X9 z?|a#LPI&B=f9nF*EZDnqvugJY`Pl4_Q*JuR%yEA*_1WLZoku4BU`V|!GBI7Xbm{LS zx3g9k6v$1yuln!%-Bj_NTK8V0Mm|&7ye>O5)N-QdnZ4UNKijB3zN!7pUCs86^osYt zQ*5e_{yDLvy_$Jz?(ClQ^)uvmUO%k+`fan_|J<@mk#5z$Gw&zq?~BOZ_srg3RS?-5 faQ{%kkYxIQJg6i?=-juBpn&#t^>bP0l+XkKn7g8| diff --git a/Telegram/Resources/icons/emoji/stickers_add_unread.png b/Telegram/Resources/icons/emoji/stickers_add_unread.png index 8d603947dae7d724d9e74ad6e544e667868235f4..d8172e22b3195555a73c7c591972c1e2013eb6b9 100644 GIT binary patch delta 467 zcmV;^0WAK_1djwEiBL{Q4GJ0x0000DNk~Le0000O0000O2m$~A0B;qluaO~0e;A+x z00aO40096102lxO0081Ob*%sZ0eMM8K~y*q-BhuPgFq0?UG5XCGzeBH4Fs!$h_-1Z z_!Itxy~X`Q@GG>EKtc)$sTGV?NgE-E+`BBS#$6NPx=gXmynQn}GdsJZ(c8+$lgd<8 zHBD2Jq`I!NEL*SFm&>J(|H<80e=e7Y!(qSQuU0Ej6lGbqENeQQa>;yfJRWLQ^`FseumxGFs%YUOFJovJIkKP|IGG$ya&a7oZV^RMl0 z1vHSuFl>X3KK%MIB_KDR9c|!1;?^;@Aa~p!%$H9DQSgR9dvIfoCyy3=K}E;~Q9xsT zISBbiFzB1j2Hy|_3QY8+DX*dz9~;JE%ch5`ra&3K9gOhIhcC zFnx|oz@sn-f&$-SP$d|i;T#^(qy=7pfGPKdO&T(A?UtbKShX|z|1-0Hccz8Hd;NI@ z44oTVmeuKWY}>BYYNlyUCX?lIf2l(R^O=rowOYgBu-$G0+wb>b7@kh2a=Dz&(mFK^ zV=x%RaeO!&dc9t~Ue}^&f{5;U-sN(c&1SEuS0tu(qWAlK;eU;Z?kGd;uL*Y_WxZab z`$J{EuIrwX!^4Y29KPy9&i8daJi=Kl7VnQfgp2o%XR%lazmB84u{vOA8WJk4g44LT`vKA(?9qXc|DpXu|&R2z8%ah%I6 zl}g9sF@rLlPItTAZ=m##3=z8E${TDpn`*WC#9)8|5qd@f-}gauyIq0HG!;eBGr&(Y z8eK_mLd*!Qj-MD6%oU~!XGE<8fN~8xW+KfGMK?M)&2fz~)J}BQb)n=)pmL=AaCkG! zD|AO0V7a3wwIC~>jv84!bJYiIl!v2C-L>v@`_m_P6h*vuUStpiNh$BmKUUxeiiP4k TKDtu*00000NkvXXu0mjfwWR4* diff --git a/Telegram/Resources/icons/emoji/stickers_add_unread@2x.png b/Telegram/Resources/icons/emoji/stickers_add_unread@2x.png index b56e63d3e39592d22270ed9b54ad64491bfad12d..c48562529e6a2a6b2ec9a4de5c4217d7da2cb14c 100644 GIT binary patch delta 951 zcmV;o14#U@3GW9XiBL{Q4GJ0x0000DNk~Le0000m0000m2m$~A0N7w|(2*fXe=wi} z00aO40096105AXm007%JYzzPZ16fH#K~z`??U+4FGeHo?HHM@yqUj9yl0vbvu#hx@ zB!aK#=g0@}Gbs2Cw6|A5O&}no3u#hD1QmP%A&rR^B0kTL3~WwsFWI|INRunV?(EEe z|C!mDox7o-!87o{zyrPYz=%Ekf9UAw?Ck8s#Kh<4=lA!wJ)m!d;o;#_Ds^yhP^nbj z-{1c^p0~HRa=E;-v*Q~ym_axk&StYuPfrdGnqfYl4~CCb*xYh=clYS%XnuZPOzQRe z)zww0RC;-Nd3}AwZPU}!Q&Ur8V`HbMr{=IhG((}#;o+fjMX^}i+}w;re}@!+ z7Z(@8=I-teKiOjjN5D6VO)i%kA0H2n)fGz>spI40k&!Oc2rE`ZM!L&z{hyy7H>@UPDpHe^lWqf|FgG{nj1D2YzP?6teSMuUDHE@d zDOk0UGGU-0)MzwFc#csbk#MT2F`RC1Z`D){V4#&N1sMn|Td>ieC8qk2-QVA{w!FOT zHn5intZd;%(-XS9f4oGs7i}TOT&llpVM^%i>>`XS_Y+uz?mKR@?^wUU#rCZA)( zD^x#}17^4{niN^D4_17?;wu*4vQY3{i<=~Tgv^UHM^!os`WtOW;bl0G4?HmNKwmuY ZA3cg{{DrrL4T}H(002ovPDHLkV1kEl$Ls(A delta 1144 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 diff --git a/Telegram/Resources/icons/emoji/stickers_recent.png b/Telegram/Resources/icons/emoji/stickers_recent.png deleted file mode 100644 index 51041d0c542d2f09a593ed20eb14b3bad1cf9f1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 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 Fe**(R9lZbm diff --git a/Telegram/Resources/icons/emoji/stickers_search.png b/Telegram/Resources/icons/emoji/stickers_search.png deleted file mode 100644 index 9645d1c9b5eac28dd33ee73b60f9f3a1e75a986b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={W7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42G$TlC0TWzSVF5FO4N|zKE$K5**;`K+#}E(R zw;{f#83RS;ebn!enc6F+C!c>Fe)yrrZu{-G878y*mS2A@nzsIWa%5OICvU*kDA%2^Ky@cVDm3Hy)C zIR89){q-Xg?(B?Oo8YvsX!#?byaF4!xqi!;R+-(G&}p|)sXW2E!MD+Yp=(OP5oaB- z-7$KnpH7mvTI8lAIDva_c7u)F`Mm9~%XUjitQ9B|z0I<>o@r~;+T)J}d)@3AHR|@T z+z8DP{<5wi>6_p3X6;9TK`r}?KMEy;2Xa)kD@{I`Vl{VNh*kpIW__{l-+#}2{!{KM zngP*tYtR1AKY8vQ?75pK&%^d&;@LFONH?DxVH07l)+e8~-pu)1C%^sV(;~O7S0^3$ zPcYhYwKmD^5$w5|#hUp-k)vs1jjiR2i#cY}y=`(EIt?X%l=JLixa)F%rMg?rE>HsS MboFyt=akR{00sFDQ2+n{ diff --git a/Telegram/Resources/icons/emoji/stickers_search@2x.png b/Telegram/Resources/icons/emoji/stickers_search@2x.png deleted file mode 100644 index fedddd5a50d3571053533e1c27015ff667c5ef1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 983 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz0dSip>6gA}?2I&AKA^Ogu3T?8CTr|!<9M|#C~$OT+98#|5m6c#`A^0!I7!6&2(=`FKN|q z>|V0=*7M(X1^4)xjUUZTyE1Vd_uhGx=Zeo4Kf7~&tLe{)k`s{NkG+yVlGlB?d-raF z!Hcrp=4NJbadGqJ&8ylQxB9BlcJa?Ql_s9}`Sa)F$B*OJ^1rFz>iH=voqp%$&6QWP zq7t)jG_c&OSnkEl6VE@V zr>Eyc`W=2)Fy(Zr->2u#)3-+T9!)ZvovWk}k#IaXL4rTtz(+y+SGeTguU}1%y*u-+ zkuhjx;%*?F@c&&AN`VAjj3KL3xZbqaQj{8tL$8{ z;TY$x84QoNiWx6(}rx-VmQ4T*hVp!t?DRn=@;Uo!Rn2pkXiX#l-o> zlfzjK*qqUMWZHO9@xYXSQ|=buIkTol>&7)8&wL$Ew|4u?ss3m4ql?8ZEx+9Kx}i^~ z>DuYj-a$1bB}@Ewah>Hkv$E;T!403P6`!PREnh6K;nQ=*41*%2!)DXI+5d<;*V*GX z?W3__U-HL_IX9+#Si5hkL)OuJ)fcKf?T1~I5)G;re|K8GeEI9wuVq?J?7eXEq^I8W z&p&HENcFn?{{8!G+GI(wy9Z`GtL*Hqj$-z(I@<2Eux`JtKPe9 z-@d)@y|>h{$Awx`XFU-4lf9zlN^Qb^l{#x#4wiN6*1a(K{Oi}OvuV=3ZL=<465D_O z{@b#bwhqo#bGMc3m~}AG#NNhcLz|DgTe~DWM4fB{8@| diff --git a/Telegram/Resources/icons/emoji/stickers_search@3x.png b/Telegram/Resources/icons/emoji/stickers_search@3x.png deleted file mode 100644 index f3d5cef32e5870f16976ec2cedd1c25916422bc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1830 zcmah~X*e6`7EWS|Eksj$2%*y=wWRh|34++y8ano^)l#*MeXliWO)XbDk{E=fq@^Yp zsz}sSDKWM(EopU7)E4X1#Gko;?(^Iq=X=jN-}!OQ^StLh`A!a2qC&Dl002PL#@fP# zi+-mD265lphaV!j0E~9A!T_2_dCuwq*`WluWcTY;G+nD^S8 z?z(V*#FI9f%ga8@otGm%G?&tJxdObUkZ=WtCN9X&_wc-=8m>1*X&qa8asXTH$Zlt3pQ8i5hn4fN8s*He^f~|Q~K>ssT2VL}%d9$$1;XuU1 z#6(47V`IBJJ3G6&&{idXTZ;+_H9dI(S5$mIJx%ZF`L?(5eqmu@aWTNk%F4k3f@oFz zRmA&n=}mQgef`YL%nP7%l97ptg1o#P4yQw%Yv-fW=@SzZw<04c8N|c&)u|RJ6xzO4 z=d*e@I{KQ2hui$r&K8H$-rCAyv0Ph}4v!3%HxAuK4-XI9+x3bNs_dbmp@D&c*;!ev zWU7>u6c7kJIXKea+B@z{9UX>s+1=e&5ajVGh!61b(2&i@uUFH)?dq=RWH1=BpQhy-?tanG)O?Y4;!{JE4o9I-dwYAZdTy`tpxr7Zs?;QWMewit_o14a znpr}$okx!!I}fd{u9}#b@H4!+j5!*1sw@2M3ZbE)N^urg?E1!r>q6zL%6ph>Z*y>* zdW6;BG&E-P9f5^wQybb2;(U07LA zKD2VVGHeM&GB-E3gMz7vdIGuQh=K1X!oK{4Q*cK4`}@a`lzMi*eic`p(=faw#JKU6 zv|S9To_+Ujd5^Xm=zQmnmabH2Fx<_^-MaeBcX-nGMQY>V_oNtoeSLHtV%Szr(16jMv{&4LmxebAa>5j}jf`+P zu5w{rQC!AJ459!(uCCg$e_S`#PAWQs1!nSj zdwUNT!Sedj=g*;hbw=)l;*nc?83lL;v;TA{ zZ5bID_~9Dr>o3KpK(KQ2K#zijk(6Isy+dNS#b3le*EOfTw4ftzn-#mi*LkxPNrS`lw(2 znM@`(7|k$~=A6t(S^n8x=bKUj?9JWmwu9d4YH1-nayrJH&IJK7Oi{2uOfuAtj*c3W zRbH55FucF({{T~F9vmdB@Z2PlIWpIZp7s-YP#ibiAn^}ni}!>W;Cwl^Bk3#%XceO0 zig-VHW>+m$8BBBd0c8B>*B5 zf3`HgbM|5S605;+E+O|!-hp}?-u0=~v3j!4oYTVfKBQjAu+)S~uW9siF-Zh=@XuU> zLac-vI6jH@R$S{Fb#3O~@K5gO6;#+SxYXl)Z8W;IqoeUrq0*}7&h@}fp6^#xROE^l2V{pIbG6Frum`5_G1=MTqZZEIKIOu<@J+O_adkh~ zDxrCcXjzQh4hjkRxu%8{m7QEzdOed(;5VQPAEav_k^NDZFRj}oCU#2HQmGp32XHG; zdFaIoz^kum{l#ozl%tD_3vGtAOC}Ou(mit@q~l-^yh!c%xJ&L`$2>H6ldDq2zj=j+ mQ^Ye|^8TOh|9cfi^Lo?NnIJKD<8xW3H_FD+!J--Cm-!DIH8;!v diff --git a/Telegram/SourceFiles/chat_helpers/chat_helpers.style b/Telegram/SourceFiles/chat_helpers/chat_helpers.style index 29d4b0f47b..d90463c281 100644 --- a/Telegram/SourceFiles/chat_helpers/chat_helpers.style +++ b/Telegram/SourceFiles/chat_helpers/chat_helpers.style @@ -10,6 +10,22 @@ using "ui/basic.style"; using "boxes/boxes.style"; using "ui/widgets/widgets.style"; +TabbedSearch { + outer: color; + bg: color; + fg: color; + fgActive: color; + fadeLeft: icon; + fadeRight: icon; + field: InputField; + search: IconButton; + back: IconButton; + cancel: CrossButton; + defaultFieldWidth: pixels; + groupWidth: pixels; + height: pixels; +} + EmojiPan { margin: margins; padding: margins; @@ -28,6 +44,8 @@ EmojiPan { overBg: color; fadeLeft: icon; fadeRight: icon; + search: TabbedSearch; + searchMargin: margins; } switchPmButton: RoundButton(defaultBoxButton) { @@ -132,8 +150,7 @@ stickersTrendingUnread: icon { { "emoji/stickers_add_dot", dialogsUnreadBg } }; stickersRecent: icon {{ "emoji/emoji_recent", emojiIconFg }}; -stickersSearch: icon {{ "emoji/stickers_search", emojiIconFg }}; -stickersPremium: icon {{ "emoji/stickers_premium", emojiIconFg }}; +emojiStatusDefault: icon {{ "emoji/stickers_premium", emojiIconFg }}; stickersSettingsUnreadSize: 6px; stickersSettingsUnreadPosition: point(6px, 10px); @@ -145,27 +162,27 @@ filtersRemove: IconButton(stickersRemove) { emojiPanMargins: margins(10px, 10px, 10px, 10px); emojiTabs: SettingsSlider(defaultTabsSlider) { - height: 55px; - barTop: 52px; - labelTop: 19px; + height: 45px; + barTop: 42px; + labelTop: 13px; } emojiScroll: defaultSolidScroll; emojiRecent: icon {{ "emoji/emoji_recent", emojiIconFg }}; emojiRecentActive: icon {{ "emoji/emoji_recent", emojiSubIconFgActive }}; -emojiPeople: icon {{ "emoji/emoji_people", emojiIconFg }}; -emojiPeopleActive: icon {{ "emoji/emoji_people", emojiSubIconFgActive }}; +emojiPeople: icon {{ "emoji/emoji_smile", emojiIconFg }}; +emojiPeopleActive: icon {{ "emoji/emoji_smile", emojiSubIconFgActive }}; emojiNature: icon {{ "emoji/emoji_nature", emojiIconFg }}; emojiNatureActive: icon {{ "emoji/emoji_nature", emojiSubIconFgActive }}; emojiFood: icon {{ "emoji/emoji_food", emojiIconFg }}; emojiFoodActive: icon {{ "emoji/emoji_food", emojiSubIconFgActive }}; -emojiActivity: icon {{ "emoji/emoji_activity", emojiIconFg }}; -emojiActivityActive: icon {{ "emoji/emoji_activity", emojiSubIconFgActive }}; +emojiActivity: icon {{ "emoji/emoji_activities", emojiIconFg }}; +emojiActivityActive: icon {{ "emoji/emoji_activities", emojiSubIconFgActive }}; emojiTravel: icon {{ "emoji/emoji_travel", emojiIconFg }}; emojiTravelActive: icon {{ "emoji/emoji_travel", emojiSubIconFgActive }}; emojiObjects: icon {{ "emoji/emoji_objects", emojiIconFg }}; emojiObjectsActive: icon {{ "emoji/emoji_objects", emojiSubIconFgActive }}; -emojiSymbols: icon {{ "emoji/emoji_symbols", emojiIconFg }}; -emojiSymbolsActive: icon {{ "emoji/emoji_symbols", emojiSubIconFgActive }}; +emojiSymbols: icon {{ "emoji/emoji_love", emojiIconFg }}; +emojiSymbolsActive: icon {{ "emoji/emoji_love", emojiSubIconFgActive }}; emojiCategoryIconTop: 6px; emojiPanAnimation: PanelAnimation(defaultPanelAnimation) { @@ -185,6 +202,37 @@ emojiPanLeft: 13px; emojiPanRight: 17px; emojiPanRadius: 8px; +defaultTabbedSearch: TabbedSearch { + outer: emojiPanBg; + bg: emojiPanCategories; + fg: emojiIconFg; + fgActive: emojiSubIconFgActive; + fadeLeft: icon {{ "fade_horizontal-flip_horizontal", emojiPanCategories }}; + fadeRight: icon {{ "fade_horizontal", emojiPanCategories }}; + field: InputField(defaultMultiSelectSearchField) { + textMargins: margins(2px, 7px, 2px, 0px); + } + search: IconButton(defaultIconButton) { + width: 33px; + height: 33px; + icon: icon{{ "emoji/emoji_search_input", emojiIconFg }}; + iconOver: icon{{ "emoji/emoji_search_input", emojiIconFg }}; + iconPosition: point(12px, -1px); + ripple: emptyRippleAnimation; + } + back: IconButton(defaultIconButton) { + width: 33px; + height: 33px; + icon: icon{{ "emoji/emoji_back", menuIconFg }}; + iconOver: icon{{ "emoji/emoji_back", menuIconFg }}; + iconPosition: point(12px, -1px); + ripple: emptyRippleAnimation; + } + cancel: defaultMultiSelectSearchCancel; + defaultFieldWidth: 95px; + groupWidth: 30px; + height: 33px; +} defaultEmojiPan: EmojiPan { margin: margins(roundRadiusSmall, 0px, 14px, 0px); padding: margins(13px, 12px, 17px, 12px); @@ -203,6 +251,8 @@ defaultEmojiPan: EmojiPan { overBg: emojiPanHover; fadeLeft: icon {{ "fade_horizontal-flip_horizontal", emojiPanCategories }}; fadeRight: icon {{ "fade_horizontal", emojiPanCategories }}; + search: defaultTabbedSearch; + searchMargin: margins(6px, 10px, 6px, 10px); } inlineResultsMinHeight: 278px; @@ -215,13 +265,6 @@ emojiColorsPadding: 5px; emojiColorsSep: 1px; emojiColorsSepColor: shadowFg; -emojiSwitchSkip: 27px; -emojiSwitchImgSkip: 21px; -emojiSwitchColor: windowActiveTextFg; -emojiSwitchStickers: icon {{ "emoji/emoji_switch", emojiSwitchColor }}; -emojiSwitchEmoji: icon {{ "emoji/emoji_switch-flip_horizontal", emojiSwitchColor }}; - -emojiIconPadding: 7px; emojiIconSelectSkip: 3px; emojiPremiumRequired: icon{{ "emoji/premium_lock", windowSubTextFg }}; diff --git a/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp b/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp index fcb8bd8f7d..6840276246 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp @@ -17,6 +17,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_domain.h" #include "main/main_session.h" #include "apiwrap.h" +#include "core/application.h" +#include "core/core_settings.h" #include @@ -639,6 +641,52 @@ std::vector EmojiKeywords::query( return result; } +std::vector EmojiKeywords::queryMine( + const QString &query, + bool exact) const { + return ApplyVariants(PrioritizeRecent(this->query(query, exact))); +} + +std::vector EmojiKeywords::PrioritizeRecent( + std::vector list) { + using Entry = Result; + auto lastRecent = begin(list); + const auto &recent = Core::App().settings().recentEmoji(); + for (const auto &item : recent) { + const auto emoji = std::get_if(&item.id.data); + if (!emoji) { + continue; + } + const auto original = (*emoji)->original() + ? (*emoji)->original() + : (*emoji); + const auto it = ranges::find(list, original, [](const Entry &entry) { + return entry.emoji; + }); + if (it > lastRecent && it != end(list)) { + std::rotate(lastRecent, it, it + 1); + ++lastRecent; + } + } + return list; +} + +std::vector EmojiKeywords::ApplyVariants(std::vector list) { + for (auto &item : list) { + item.emoji = [&] { + const auto result = item.emoji; + const auto &variants = Core::App().settings().emojiVariants(); + const auto i = result->hasVariants() + ? variants.find(result->nonColoredId()) + : end(variants); + return (i != end(variants)) + ? result->variant(i->second) + : result; + }(); + } + return list; +} + int EmojiKeywords::maxQueryLength() const { if (_data.empty()) { return 0; diff --git a/Telegram/SourceFiles/chat_helpers/emoji_keywords.h b/Telegram/SourceFiles/chat_helpers/emoji_keywords.h index 7c9509b86c..3df6c497db 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_keywords.h +++ b/Telegram/SourceFiles/chat_helpers/emoji_keywords.h @@ -43,6 +43,9 @@ public: [[nodiscard]] std::vector query( const QString &query, bool exact = false) const; + [[nodiscard]] std::vector queryMine( + const QString &query, + bool exact = false) const; [[nodiscard]] int maxQueryLength() const; private: @@ -52,6 +55,11 @@ private: ApiWrap *api() override; void langPackRefreshed() override; + [[nodiscard]] static std::vector PrioritizeRecent( + std::vector list); + [[nodiscard]] static std::vector ApplyVariants( + std::vector list); + void handleSessionChanges(); void apiChanged(ApiWrap *api); void refreshInputLanguages(); diff --git a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp index f2fa2d760a..3a59f4fbff 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "chat_helpers/emoji_list_widget.h" #include "base/unixtime.h" +#include "ui/controls/tabbed_search.h" #include "ui/text/format_values.h" #include "ui/effects/animations.h" #include "ui/widgets/buttons.h" @@ -23,11 +24,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/sticker_set_box.h" #include "lang/lang_keys.h" #include "layout/layout_position.h" +#include "data/data_emoji_statuses.h" #include "data/data_session.h" #include "data/data_document.h" #include "data/data_peer_values.h" #include "data/stickers/data_stickers.h" #include "data/stickers/data_custom_emoji.h" +#include "chat_helpers/emoji_keywords.h" #include "chat_helpers/stickers_list_widget.h" #include "chat_helpers/stickers_list_footer.h" #include "emoji_suggestions_data.h" @@ -44,6 +47,8 @@ namespace { constexpr auto kCollapsedRows = 3; constexpr auto kAppearDuration = 0.3; +constexpr auto kPlainSearchLimit = 32; +constexpr auto kCustomSearchLimit = 256; using Core::RecentEmojiId; using Core::RecentEmojiDocument; @@ -402,6 +407,10 @@ EmojiListWidget::EmojiListWidget( setAttribute(Qt::WA_OpaquePaintEvent); } + if (_mode != Mode::RecentReactions) { + setupSearch(); + } + _customSingleSize = Data::FrameSizeFromTag( Data::CustomEmojiManager::SizeTag::Large ) / style::DevicePixelRatio(); @@ -457,6 +466,142 @@ EmojiListWidget::~EmojiListWidget() { base::take(_customEmoji); } +void EmojiListWidget::setupSearch() { + using Descriptor = Ui::SearchDescriptor; + _search = std::make_unique(this, st(), Descriptor{ + .st = st().search, + .groups = (_mode == Mode::EmojiStatus + ? session().data().emojiStatuses().statusGroupsValue() + : session().data().emojiStatuses().emojiGroupsValue()), + .customEmojiFactory = session().data().customEmojiManager().factory() + }); + _search->queryValue( + ) | rpl::start_with_next([=](std::vector &&query) { + _nextSearchQuery = std::move(query); + InvokeQueued(this, [=] { + applyNextSearchQuery(); + }); + }, lifetime()); +} + +void EmojiListWidget::applyNextSearchQuery() { + if (_searchQuery == _nextSearchQuery) { + return; + } + _searchQuery = _nextSearchQuery; + std::swap(_searchEmoji, _searchEmojiPrevious); + _searchEmoji.clear(); + const auto finish = [&](bool searching = true) { + if (!_searchMode && !searching) { + return; + } + _searchMode = searching; + if (!searching) { + _searchResults.clear(); + _searchCustomIds.clear(); + } + clearSelection(); + resizeToWidth(width()); + update(); + }; + if (_searchQuery.empty()) { + finish(false); + return; + } + const auto guard = gsl::finally([&] { finish(); }); + auto plain = collectPlainSearchResults(); + if (_searchEmoji == _searchEmojiPrevious) { + return; + } + _searchResults.clear(); + _searchCustomIds.clear(); + if (_mode == Mode::EmojiStatus || session().premium()) { + appendPremiumSearchResults(); + } + if (_mode != Mode::EmojiStatus) { + for (const auto emoji : plain) { + _searchResults.push_back({ + .id = { emoji }, + }); + } + } +} + +std::vector EmojiListWidget::collectPlainSearchResults() { + auto result = std::vector(); + const auto pushPlain = [&](EmojiPtr emoji) { + if (result.size() < kPlainSearchLimit + && _searchEmoji.emplace(emoji).second) { + result.push_back(emoji); + } + if (const auto original = emoji->original(); original != emoji) { + _searchEmoji.emplace(original); + } + }; + auto refreshed = false; + auto &keywords = Core::App().emojiKeywords(); + for (const auto &entry : _searchQuery) { + if (const auto emoji = Ui::Emoji::Find(entry)) { + pushPlain(emoji); + if (result.size() >= kPlainSearchLimit) { + return result; + } + } else if (!entry.isEmpty()) { + if (!refreshed) { + refreshed = true; + keywords.refresh(); + } + const auto list = keywords.queryMine(entry); + for (const auto &entry : list) { + pushPlain(entry.emoji); + if (result.size() >= kPlainSearchLimit) { + return result; + } + } + } + } + return result; +} + +void EmojiListWidget::appendPremiumSearchResults() { + const auto test = session().isTestMode(); + auto &owner = session().data(); + const auto checkCustom = [&](EmojiPtr emoji, DocumentId id) { + return emoji + && _searchEmoji.contains(emoji) + && (_searchResults.size() < kCustomSearchLimit) + && _searchCustomIds.emplace(id).second; + }; + for (const auto &recent : _recent) { + if (!recent.custom) { + continue; + } + const auto &idData = recent.id.data; + const auto id = std::get_if(&idData); + if (!id || id->test != test) { + continue; + } + const auto sticker = owner.document(id->id)->sticker(); + const auto emoji = sticker + ? Ui::Emoji::Find(sticker->alt) + : nullptr; + if (checkCustom(emoji, id->id)) { + _searchResults.push_back(recent); + } + } + for (const auto &set : _custom) { + for (const auto &one : set.list) { + const auto id = one.document->id; + if (checkCustom(one.emoji, id)) { + _searchResults.push_back({ + .custom = one.custom, + .id = { RecentEmojiDocument{ .id = id, .test = test } }, + }); + } + } + } +} + void EmojiListWidget::provideRecent( const std::vector &customRecentList) { clearSelection(); @@ -468,6 +613,13 @@ void EmojiListWidget::repaintCustom(uint64 setId) { if (!_repaintsScheduled.emplace(setId).second) { return; } + const auto repaintSearch = (setId == SearchEmojiSectionSetId()); + if (_searchMode) { + if (repaintSearch) { + update(); + } + return; + } const auto repaintRecent = (setId == RecentEmojiSectionSetId()); enumerateSections([&](const SectionInfo &info) { const auto repaint1 = repaintRecent @@ -600,7 +752,7 @@ bool EmojiListWidget::enumerateSections(Callback callback) const { ? kCollapsedRows : (info.count + _columnCount - 1) / _columnCount; info.rowsTop = info.top - + (i == 0 ? st().padding.top() : st().header); + + (i == 0 ? _rowsTop : st().header); info.rowsBottom = info.rowsTop + (info.rowsCount * _singleSize.height()) + st::roundRadiusSmall; @@ -610,6 +762,11 @@ bool EmojiListWidget::enumerateSections(Callback callback) const { info.top = info.rowsBottom; return true; }; + if (_searchMode) { + info.section = i; + info.count = _searchResults.size(); + return next(); + } for (; i != _staticCount; ++i) { info.section = i; info.count = i ? _counts[i] : _recent.size(); @@ -660,7 +817,7 @@ EmojiListWidget::SectionInfo EmojiListWidget::sectionInfoByOffset( } int EmojiListWidget::sectionsCount() const { - return _staticCount + int(_custom.size()); + return _searchMode ? 1 : (_staticCount + int(_custom.size())); } void EmojiListWidget::setSingleSize(QSize size) { @@ -686,6 +843,7 @@ int EmojiListWidget::countDesiredHeight(int newWidth) { const auto innerWidth = fullWidth - padding.left() - padding.right(); _columnCount = std::max(innerWidth / st().desiredSize, 1); const auto singleWidth = innerWidth / _columnCount; + _rowsTop = _search ? _search->height() : padding.top(); _rowsLeft = padding.left() + (innerWidth - _columnCount * singleWidth) / 2 - st().margin.left(); @@ -698,9 +856,12 @@ int EmojiListWidget::countDesiredHeight(int newWidth) { return info.top + qMax(info.rowsBottom - info.top, minimalLastHeight); }; - const auto minimalLastHeight = minimalHeight; - return qMax(minimalHeight, countResult(minimalLastHeight)) - + padding.bottom(); + const auto minimalLastHeight = std::max( + minimalHeight - padding.bottom(), + 0); + return qMax( + minimalHeight, + countResult(minimalLastHeight) + padding.bottom()); } int EmojiListWidget::defaultMinimalHeight() const { @@ -953,7 +1114,7 @@ void EmojiListWidget::paint( ); const auto w = position + _areaPosition; if (context.expanding) { - const auto y = (position.y() - st().padding.top()); + const auto y = (position.y() - _rowsTop); const auto x = (position.x() - _rowsLeft); const auto sum = y + std::max(std::min(y, width()) - x, 0); @@ -981,8 +1142,10 @@ void EmojiListWidget::paint( } _overBg.paint(p, QRect(tl, st::emojiPanArea)); } - if (info.section == int(Section::Recent)) { - drawRecent(p, context, w, index); + if (_searchMode) { + drawRecent(p, context, w, _searchResults[index]); + } else if (info.section == int(Section::Recent)) { + drawRecent(p, context, w, _recent[index]); } else if (info.section < _staticCount) { drawEmoji(p, context, w, _emoji[info.section][index]); } else { @@ -1020,9 +1183,8 @@ void EmojiListWidget::drawRecent( QPainter &p, const ExpandingContext &context, QPoint position, - int index) { + const RecentOne &recent) { _recentPainted = true; - auto &recent = _recent[index]; if (const auto custom = recent.custom) { _emojiPaintContext->scale = context.progress; _emojiPaintContext->position = position @@ -1032,8 +1194,8 @@ void EmojiListWidget::drawRecent( } else if (const auto emoji = std::get_if(&recent.id.data)) { if (_mode == Mode::EmojiStatus) { position += QPoint( - (_singleSize.width() - st::stickersPremium.width()) / 2, - (_singleSize.height() - st::stickersPremium.height()) / 2 + (_singleSize.width() - st::emojiStatusDefault.width()) / 2, + (_singleSize.height() - st::emojiStatusDefault.height()) / 2 ) - _areaPosition; p.drawImage(position, _premiumIcon->image()); } else { @@ -1087,7 +1249,16 @@ bool EmojiListWidget::checkPickerHide() { DocumentData *EmojiListWidget::lookupCustomEmoji( int index, int section) const { - if (section == int(Section::Recent) && index < _recent.size()) { + if (_searchMode) { + if (index < _searchResults.size()) { + const auto document = std::get_if( + &_searchResults[index].id.data); + if (document) { + return session().data().document(document->id); + } + } + return nullptr; + } else if (section == int(Section::Recent) && index < _recent.size()) { const auto document = std::get_if( &_recent[index].id.data); if (document) { @@ -1104,9 +1275,14 @@ DocumentData *EmojiListWidget::lookupCustomEmoji( EmojiPtr EmojiListWidget::lookupOverEmoji(const OverEmoji *over) const { const auto section = over ? over->section : -1; const auto index = over ? over->index : -1; - return (section == int(Section::Recent) - && index < _recent.size() - && v::is(_recent[index].id.data)) + return _searchMode + ? ((index < _searchResults.size() + && v::is(_searchResults[index].id.data)) + ? v::get(_searchResults[index].id.data) + : nullptr) + : (section == int(Section::Recent) + && index < _recent.size() + && v::is(_recent[index].id.data)) ? v::get(_recent[index].id.data) : (section > int(Section::Recent) && section < _staticCount @@ -1119,9 +1295,10 @@ EmojiChosen EmojiListWidget::lookupChosen( EmojiPtr emoji, not_null over) { const auto rect = emojiRect(over->section, over->index); + const auto size = st::emojiStatusDefault.size(); const auto icon = QRect( - rect.x() + (_singleSize.width() - st::stickersPremium.width()) / 2, - rect.y() + (_singleSize.height() - st::stickersPremium.height()) / 2, + rect.x() + (_singleSize.width() - size.width()) / 2, + rect.y() + (_singleSize.height() - size.height()) / 2, rect.width(), rect.height()); return { @@ -1622,10 +1799,11 @@ void EmojiListWidget::refreshCustom() { auto set = std::vector(); set.reserve(list.size()); for (const auto document : list) { - if (document->sticker()) { + if (const auto sticker = document->sticker()) { set.push_back({ .custom = resolveCustomEmoji(document, setId), .document = document, + .emoji = Ui::Emoji::Find(sticker->alt), }); if (!premium && document->isPremiumEmoji()) { premium = true; @@ -1668,6 +1846,9 @@ Fn EmojiListWidget::repaintCallback( if (_recentCustomIds.contains(documentId)) { repaintCustom(RecentEmojiSectionSetId()); } + if (_searchCustomIds.contains(documentId)) { + repaintCustom(SearchEmojiSectionSetId()); + } }; } diff --git a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h index 83a4eaa5bc..f33eda32d3 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h +++ b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h @@ -31,6 +31,7 @@ struct phrase; namespace Ui { class RippleAnimation; +class TabbedSearch; } // namespace Ui namespace Ui::Emoji { @@ -162,6 +163,7 @@ private: struct CustomOne { not_null custom; not_null document; + EmojiPtr emoji = nullptr; }; struct CustomSet { uint64 id = 0; @@ -243,6 +245,9 @@ private: void unloadAllCustom(); void unloadCustomIn(const SectionInfo &info); + void setupSearch(); + [[nodiscard]] std::vector collectPlainSearchResults(); + void appendPremiumSearchResults(); void ensureLoaded(int section); void updateSelected(); void setSelected(OverState newSelected); @@ -267,7 +272,7 @@ private: QPainter &p, const ExpandingContext &context, QPoint position, - int index); + const RecentOne &recent); void drawEmoji( QPainter &p, const ExpandingContext &context, @@ -307,7 +312,6 @@ private: void displaySet(uint64 setId); void removeSet(uint64 setId); - void refreshColoredStatuses(); void initButton(RightButton &button, const QString &text, bool gradient); [[nodiscard]] std::unique_ptr createButtonRipple( int section); @@ -328,8 +332,11 @@ private: DocumentId documentId, uint64 setId); + void applyNextSearchQuery(); + Window::SessionController *_controller = nullptr; Mode _mode = Mode::Full; + std::unique_ptr _search; const int _staticCount = 0; StickersListFooter *_footer = nullptr; std::unique_ptr _premiumIcon; @@ -355,6 +362,15 @@ private: bool _allowWithoutPremium = false; Ui::RoundRect _overBg; + std::vector _nextSearchQuery; + std::vector _searchQuery; + base::flat_set _searchEmoji; + base::flat_set _searchEmojiPrevious; + base::flat_set _searchCustomIds; + std::vector _searchResults; + bool _searchMode = false; + + int _rowsTop = 0; int _rowsLeft = 0; int _columnCount = 1; QSize _singleSize; diff --git a/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp b/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp index 26e40142e1..b74e377087 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp @@ -213,49 +213,13 @@ auto SuggestionsWidget::getRowsByQuery(const QString &text) const return ranges::none_of(text, [](QChar ch) { return ch.isLower(); }); }(); const auto exact = !middle || simple; - const auto list = Core::App().emojiKeywords().query(real, exact); - if (list.empty()) { - return {}; - } + const auto list = Core::App().emojiKeywords().queryMine(real, exact); using Entry = ChatHelpers::EmojiKeywords::Result; - auto result = ranges::views::all( + return ranges::views::all( list ) | ranges::views::transform([](const Entry &result) { return Row(result.emoji, result.replacement); }) | ranges::to_vector; - - auto lastRecent = begin(result); - const auto &recent = Core::App().settings().recentEmoji(); - for (const auto &item : recent) { - const auto emoji = std::get_if(&item.id.data); - if (!emoji) { - continue; - } - const auto original = (*emoji)->original() - ? (*emoji)->original() - : (*emoji); - const auto it = ranges::find(result, original, [](const Row &row) { - return row.emoji.get(); - }); - if (it > lastRecent && it != end(result)) { - std::rotate(lastRecent, it, it + 1); - ++lastRecent; - } - } - - for (auto &item : result) { - item.emoji = [&] { - const auto result = item.emoji; - const auto &variants = Core::App().settings().emojiVariants(); - const auto i = result->hasVariants() - ? variants.find(result->nonColoredId()) - : end(variants); - return (i != end(variants)) - ? result->variant(i->second) - : result.get(); - }(); - } - return result; } void SuggestionsWidget::resizeToRows() { diff --git a/Telegram/SourceFiles/chat_helpers/message_field.cpp b/Telegram/SourceFiles/chat_helpers/message_field.cpp index 5d5a3b7f31..3546573236 100644 --- a/Telegram/SourceFiles/chat_helpers/message_field.cpp +++ b/Telegram/SourceFiles/chat_helpers/message_field.cpp @@ -322,11 +322,9 @@ void InitMessageFieldHandlers( const style::InputField *fieldStyle) { field->setTagMimeProcessor( FieldTagMimeProcessor(session, allowPremiumEmoji)); - field->setCustomEmojiFactory([=](QStringView data, Fn update) { - return session->data().customEmojiManager().create( - data, - std::move(update)); - }, std::move(customEmojiPaused)); + field->setCustomEmojiFactory( + session->data().customEmojiManager().factory(), + std::move(customEmojiPaused)); field->setInstantReplaces(Ui::InstantReplaces::Default()); field->setInstantReplacesEnabled( Core::App().settings().replaceEmojiValue()); diff --git a/Telegram/SourceFiles/chat_helpers/stickers_list_footer.cpp b/Telegram/SourceFiles/chat_helpers/stickers_list_footer.cpp index 7f810ac3b3..24e610c2f9 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_footer.cpp +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_footer.cpp @@ -71,6 +71,12 @@ uint64 AllEmojiSectionSetId() { return kEmojiSectionSetIdBase; } +uint64 SearchEmojiSectionSetId() { + return kEmojiSectionSetIdBase + + static_cast(EmojiSection::Symbols) + + 2; +} + std::optional SetIdEmojiSection(uint64 id) { const auto base = RecentEmojiSectionSetId(); if (id < base) { @@ -161,8 +167,8 @@ QImage GradientPremiumStar::image() const { } void GradientPremiumStar::renderOnDemand() const { - const auto size = st::stickersPremium.size(); - const auto mask = st::stickersPremium.instance(Qt::white); + const auto size = st::emojiStatusDefault.size(); + const auto mask = st::emojiStatusDefault.instance(Qt::white); const auto factor = style::DevicePixelRatio(); _image = QImage( size * factor, @@ -188,7 +194,6 @@ StickersListFooter::StickersListFooter(Descriptor &&descriptor) descriptor.st ? *descriptor.st : st::defaultEmojiPan) , _session(descriptor.session) , _paused(descriptor.paused) -, _searchButtonVisible(descriptor.searchButtonVisible) , _settingsButtonVisible(descriptor.settingsButtonVisible) , _iconState([=] { update(); }) , _subiconState([=] { update(); }) @@ -197,9 +202,7 @@ StickersListFooter::StickersListFooter(Descriptor &&descriptor) , _barSelection(descriptor.barSelection) { setMouseTracking(true); - _iconsLeft = st().iconSkip + (_searchButtonVisible - ? st::stickerIconWidth - : 0); + _iconsLeft = st().iconSkip; _iconsRight = st().iconSkip + (_settingsButtonVisible ? st::stickerIconWidth : 0); @@ -568,9 +571,6 @@ void StickersListFooter::paintEvent(QPaintEvent *e) { void StickersListFooter::paint( Painter &p, const ExpandingContext &context) const { - if (_searchButtonVisible) { - paintSearchIcon(p); - } if (_icons.empty() || _searchShown) { return; } @@ -751,8 +751,6 @@ void StickersListFooter::mousePressEvent(QMouseEvent *e) { if (_selected == SpecialOver::Settings) { _openSettingsRequests.fire({}); - } else if (_selected == SpecialOver::Search) { - toggleSearch(true); } else { _pressed = _selected; _iconsMouseDown = _iconsMousePos; @@ -940,13 +938,7 @@ void StickersListFooter::updateSelected() { const auto settingsLeft = width() - _iconsRight; const auto searchLeft = _iconsLeft - _singleWidth; auto newOver = OverState(SpecialOver::None); - if (_searchButtonVisible - && x >= searchLeft - && x < searchLeft + _singleWidth - && y >= _iconsTop - && y < _iconsTop + st().footer) { - newOver = SpecialOver::Search; - } else if (_settingsButtonVisible + if (_settingsButtonVisible && x >= settingsLeft && x < settingsLeft + _singleWidth && y >= _iconsTop @@ -1115,15 +1107,6 @@ void StickersListFooter::paintStickerSettingsIcon(QPainter &p) const { width()); } -void StickersListFooter::paintSearchIcon(QPainter &p) const { - const auto searchLeft = _iconsLeft - _singleWidth; - st::stickersSearch.paint( - p, - searchLeft + (_singleWidth - st::stickersSearch.width()) / 2, - _iconsTop + st::emojiCategoryIconTop, - width()); -} - void StickersListFooter::customEmojiRepaint() { if (!_repaintScheduled) { _repaintScheduled = true; @@ -1309,7 +1292,7 @@ void StickersListFooter::paintSetIcon( width(), st::stickerGroupCategorySize); } else if (icon.setId == Data::Stickers::PremiumSetId) { - const auto size = st::stickersPremium.size(); + const auto size = st::emojiStatusDefault.size(); p.drawImage( info.adjustedLeft + (_singleWidth - size.width()) / 2, _iconsTop + (st().footer - size.height()) / 2, diff --git a/Telegram/SourceFiles/chat_helpers/stickers_list_footer.h b/Telegram/SourceFiles/chat_helpers/stickers_list_footer.h index 78448a9cdb..29248b9938 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_footer.h +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_footer.h @@ -48,6 +48,7 @@ enum class ValidateIconAnimations { [[nodiscard]] uint64 EmojiSectionSetId(Ui::Emoji::Section section); [[nodiscard]] uint64 RecentEmojiSectionSetId(); [[nodiscard]] uint64 AllEmojiSectionSetId(); +[[nodiscard]] uint64 SearchEmojiSectionSetId(); [[nodiscard]] std::optional SetIdEmojiSection(uint64 id); struct StickerIcon { @@ -99,7 +100,6 @@ public: not_null session; Fn paused; not_null parent; - bool searchButtonVisible = false; bool settingsButtonVisible = false; bool barSelection = false; const style::EmojiPan *st = nullptr; @@ -153,7 +153,6 @@ protected: private: enum class SpecialOver { None, - Search, Settings, }; struct IconId { @@ -227,7 +226,6 @@ private: void paint(Painter &p, const ExpandingContext &context) const; void paintStickerSettingsIcon(QPainter &p) const; - void paintSearchIcon(QPainter &p) const; void paintSetIcon( Painter &p, const ExpandingContext &context, @@ -254,7 +252,6 @@ private: const not_null _session; const Fn _paused; - const bool _searchButtonVisible = false; const bool _settingsButtonVisible = false; static constexpr auto kVisibleIconsCount = 8; diff --git a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp index 9f059c9a9b..900a6a95df 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp @@ -264,7 +264,6 @@ object_ptr StickersListWidget::createFooter() { .session = &session(), .paused = pausedMethod(), .parent = this, - .searchButtonVisible = !_isMasks, .settingsButtonVisible = true, .barSelection = true, }); diff --git a/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp b/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp index 8da279f6cd..09817f9acd 100644 --- a/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp +++ b/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp @@ -1020,7 +1020,7 @@ void TabbedSelector::fillTabsSliderSections() { return tr::lng_switch_masks; } Unexpected("SelectorTab value in fillTabsSliderSections."); - }()(tr::now).toUpper(); + }()(tr::now); }) | ranges::to_vector; _tabsSlider->setSections(sections); } diff --git a/Telegram/SourceFiles/data/data_emoji_statuses.cpp b/Telegram/SourceFiles/data/data_emoji_statuses.cpp index 6000145d06..cf0ac3040e 100644 --- a/Telegram/SourceFiles/data/data_emoji_statuses.cpp +++ b/Telegram/SourceFiles/data/data_emoji_statuses.cpp @@ -16,6 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/timer_rpl.h" #include "base/call_delayed.h" #include "apiwrap.h" +#include "ui/controls/tabbed_search.h" namespace Data { namespace { @@ -126,6 +127,70 @@ void EmojiStatuses::registerAutomaticClear( } } +auto EmojiStatuses::emojiGroupsValue() const -> rpl::producer { + const_cast(this)->requestEmojiGroups(); + return _emojiGroups.data.value(); +} + +auto EmojiStatuses::statusGroupsValue() const -> rpl::producer { + const_cast(this)->requestStatusGroups(); + return _statusGroups.data.value(); +} + +void EmojiStatuses::requestEmojiGroups() { + requestGroups( + &_emojiGroups, + MTPmessages_GetEmojiGroups(MTP_int(_emojiGroups.hash))); + +} + +void EmojiStatuses::requestStatusGroups() { + requestGroups( + &_statusGroups, + MTPmessages_GetEmojiStatusGroups(MTP_int(_statusGroups.hash))); +} + +[[nodiscard]] std::vector GroupsFromTL( + const MTPDmessages_emojiGroups &data) { + const auto &list = data.vgroups().v; + auto result = std::vector(); + result.reserve(list.size()); + for (const auto &group : list) { + const auto &data = group.data(); + auto emoticons = ranges::views::all( + data.vemoticons().v + ) | ranges::view::transform([](const MTPstring &emoticon) { + return qs(emoticon); + }) | ranges::to_vector; + result.push_back({ + .iconId = QString::number(data.vicon_emoji_id().v), + .emoticons = std::move(emoticons), + }); + } + return result; +} + +template +void EmojiStatuses::requestGroups( + not_null type, + Request &&request) { + if (type->requestId) { + return; + } + type->requestId = _owner->session().api().request( + std::forward(request) + ).done([=](const MTPmessages_EmojiGroups &result) { + type->requestId = 0; + result.match([&](const MTPDmessages_emojiGroups &data) { + type->hash = data.vhash().v; + type->data = GroupsFromTL(data); + }, [](const MTPDmessages_emojiGroupsNotModified&) { + }); + }).fail([=] { + type->requestId = 0; + }).send(); +} + void EmojiStatuses::processClearing() { auto minWait = TimeId(0); const auto now = base::unixtime::now(); diff --git a/Telegram/SourceFiles/data/data_emoji_statuses.h b/Telegram/SourceFiles/data/data_emoji_statuses.h index 26f9f716d1..c44678785b 100644 --- a/Telegram/SourceFiles/data/data_emoji_statuses.h +++ b/Telegram/SourceFiles/data/data_emoji_statuses.h @@ -13,6 +13,10 @@ namespace Main { class Session; } // namespace Main +namespace Ui { +struct EmojiGroup; +} // namespace Ui + namespace Data { class DocumentMedia; @@ -49,7 +53,19 @@ public: void registerAutomaticClear(not_null user, TimeId until); + using Groups = std::vector; + [[nodiscard]] rpl::producer emojiGroupsValue() const; + [[nodiscard]] rpl::producer statusGroupsValue() const; + void requestEmojiGroups(); + void requestStatusGroups(); + private: + struct GroupsType { + rpl::variable data; + mtpRequestId requestId = 0; + int32 hash = 0; + }; + void requestRecent(); void requestDefault(); void requestColored(); @@ -61,6 +77,9 @@ private: void processClearingIn(TimeId wait); void processClearing(); + template + void requestGroups(not_null type, Request &&request); + const not_null _owner; std::vector _recent; @@ -84,6 +103,9 @@ private: base::flat_map, TimeId> _clearing; base::Timer _clearingTimer; + GroupsType _emojiGroups; + GroupsType _statusGroups; + rpl::lifetime _lifetime; }; diff --git a/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp b/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp index f115937efd..30cd36fbfe 100644 --- a/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp +++ b/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp @@ -474,6 +474,14 @@ std::unique_ptr CustomEmojiManager::create( std::move(update)); } +Ui::Text::CustomEmojiFactory CustomEmojiManager::factory( + SizeTag tag, + int sizeOverride) { + return [=](QStringView data, Fn update) { + return create(data, std::move(update), tag, sizeOverride); + }; +} + Ui::CustomEmoji::Preview CustomEmojiManager::prepareNonExactPreview( DocumentId documentId, SizeTag tag, diff --git a/Telegram/SourceFiles/data/stickers/data_custom_emoji.h b/Telegram/SourceFiles/data/stickers/data_custom_emoji.h index 15d5166719..4618340dab 100644 --- a/Telegram/SourceFiles/data/stickers/data_custom_emoji.h +++ b/Telegram/SourceFiles/data/stickers/data_custom_emoji.h @@ -52,6 +52,10 @@ public: SizeTag tag = SizeTag::Normal, int sizeOverride = 0); + [[nodiscard]] Ui::Text::CustomEmojiFactory factory( + SizeTag tag = SizeTag::Normal, + int sizeOverride = 0); + class Listener { public: virtual void customEmojiResolveDone( diff --git a/Telegram/SourceFiles/ui/controls/tabbed_search.cpp b/Telegram/SourceFiles/ui/controls/tabbed_search.cpp new file mode 100644 index 0000000000..fccc891f46 --- /dev/null +++ b/Telegram/SourceFiles/ui/controls/tabbed_search.cpp @@ -0,0 +1,419 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#include "ui/controls/tabbed_search.h" + +#include "lang/lang_keys.h" +#include "ui/widgets/input_fields.h" +#include "ui/wrap/fade_wrap.h" +#include "ui/widgets/buttons.h" +#include "ui/painter.h" +#include "ui/rect.h" +#include "styles/style_chat_helpers.h" + +namespace Ui { +namespace { + +constexpr auto kDebounceTimeout = crl::time(400); + +class GroupsStrip final : public RpWidget { +public: + GroupsStrip( + QWidget *parent, + const style::TabbedSearch &st, + rpl::producer> groups, + Text::CustomEmojiFactory factory); + + [[nodiscard]] rpl::producer chosen() const; + void clearChosen(); + +private: + struct Button { + EmojiGroup group; + QString iconId; + std::unique_ptr icon; + }; + + void init(rpl::producer> groups); + void set(std::vector list); + + void paintEvent(QPaintEvent *e) override; + void mousePressEvent(QMouseEvent *e) override; + void mouseReleaseEvent(QMouseEvent *e) override; + + static inline auto FindById(auto &&buttons, QStringView id) { + return ranges::find(buttons, id, &Button::iconId); + } + + const style::TabbedSearch &_st; + const Text::CustomEmojiFactory _factory; + + std::vector