From 74b50aae819a384e14cbc61cb6091c69a25e3033 Mon Sep 17 00:00:00 2001 From: Lucas Delanier Date: Thu, 27 Jul 2023 00:31:36 +0200 Subject: [PATCH] page to post capsules is starting --- .../assets/images/background_justMusic.png | Bin 0 -> 32901 bytes .../justMUSIC/assets/images/camera_icon.png | Bin 0 -> 2690 bytes .../justMUSIC/assets/images/cross_icon.png | Bin 0 -> 816 bytes .../justMUSIC/assets/images/history_icon.png | Bin 0 -> 3710 bytes .../assets/images/notification_icon.png | Bin 0 -> 3758 bytes .../justMUSIC/assets/images/profile_icon.png | Bin 0 -> 2283 bytes .../justMUSIC/assets/images/spotify_icon.png | Bin 0 -> 4865 bytes .../justMUSIC/assets/images/theme_icon.png | Bin 0 -> 4189 bytes .../justMUSIC/assets/images/trash_icon.png | Bin 0 -> 3027 bytes Sources/justMUSIC/assets/images/unknown.png | Bin 0 -> 230 bytes .../components/editable_post_component.dart | 105 ++++++++++++++++++ .../lib/components/post_button_component.dart | 32 ++++++ .../lib/components/profile_component.dart | 11 +- .../lib/components/search_bar_component.dart | 32 ++++++ .../components/setting_part_component.dart | 69 ++++++++++++ .../lib/components/statistics_component.dart | 10 +- Sources/justMUSIC/lib/main.dart | 6 +- Sources/justMUSIC/lib/model/User.dart | 24 +++- .../justMUSIC/lib/screens/login_screen.dart | 9 +- .../justMUSIC/lib/screens/post_screen.dart | 60 ++++++++++ .../justMUSIC/lib/screens/profile_screen.dart | 79 +++++++++++-- .../lib/screens/registration_screen.dart | 4 + Sources/justMUSIC/lib/values/constants.dart | 3 +- Sources/justMUSIC/lib/values/icons.dart | 33 ++++++ .../lib/view_model/UserViewModel.dart | 10 +- 25 files changed, 464 insertions(+), 23 deletions(-) create mode 100644 Sources/justMUSIC/assets/images/background_justMusic.png create mode 100644 Sources/justMUSIC/assets/images/camera_icon.png create mode 100644 Sources/justMUSIC/assets/images/cross_icon.png create mode 100644 Sources/justMUSIC/assets/images/history_icon.png create mode 100644 Sources/justMUSIC/assets/images/notification_icon.png create mode 100644 Sources/justMUSIC/assets/images/profile_icon.png create mode 100644 Sources/justMUSIC/assets/images/spotify_icon.png create mode 100644 Sources/justMUSIC/assets/images/theme_icon.png create mode 100644 Sources/justMUSIC/assets/images/trash_icon.png create mode 100644 Sources/justMUSIC/assets/images/unknown.png create mode 100644 Sources/justMUSIC/lib/components/editable_post_component.dart create mode 100644 Sources/justMUSIC/lib/components/post_button_component.dart create mode 100644 Sources/justMUSIC/lib/components/search_bar_component.dart create mode 100644 Sources/justMUSIC/lib/components/setting_part_component.dart create mode 100644 Sources/justMUSIC/lib/screens/post_screen.dart create mode 100644 Sources/justMUSIC/lib/values/icons.dart diff --git a/Sources/justMUSIC/assets/images/background_justMusic.png b/Sources/justMUSIC/assets/images/background_justMusic.png new file mode 100644 index 0000000000000000000000000000000000000000..adf76c5a358129d079a73757dbf6c0e4d45bb255 GIT binary patch literal 32901 zcmV*EKx@B=P)h=``p4ANVHGEfvy*Wi7-)aMAzGWZI^&rC21f1CIcJ1Iw~J{{Hb91Uw#(|CRpi z-|PGr`2766#&>W=_?dkDz1JmxAsJ;Kd;|a-NQar|@cp~UIU7lGXnv#(>&>6QV}Vc@ zoAmrd&+zXW<*XOUUi*0a3jnqGyD5HxY*Re`Zi>>iD%Jc&TAY;h`*4NPPXIF@U85WY zMk;*PeE`7#-iV8D?6g(Fw8~I`v8LBrVwGESp%z(;0A7$ z2X|5MRk7*Tm)8&u3ZYO{Sb=|}wHd#tH)Xqy^7>m{qY4G7dLUZ545%BvO#lwf_W}OTX$qfMB=@Mi#>5Wy0@aTIBL@ zFr}r!=jCm}uNy~`Nur76HA$tt1C{o~kHCVKq?SfXt!MT=fMB=*28R=u(goYCDZTer zp-|`<9yltY1om-Kl8Oa{hl`QB4<^x~*L?kCQJ8AQUQ)_Jik{$9aC@eNgg4+!R>|h6zcg zskcywuv1tabGk>#>VZ%&Chmvi$9GkdIF_?VXMp4eEmGVd7$(Cg;3}aw=)6T)5j~S| zfKV`|;eKEr@`^f@;sVqptS;9V1jBr^c%~8;(w3^Gbc6_p9uHm!1!Ed3Nz&(7)q0Mk zxX0=JK`=~&QA{Bp^4qU7ezXT#dc8=vl$z4yIz?KOBk}i!P%xySP!QEKWIU|rbe&V- zfUKlRP;P|07!RvBNk!ga<0CAdOs$_Es`I*u2|Dkg8YjY!y{I1#pbE9ZEQPHYW;F#H^o{=RVl$h5*4Z z0m9tu)kUN^nBpd>aj<#RHtbx}LqI?vR7P{42BwmWY2vEmZcN>mPz)0tD7V z*KHO&P3ePcYx?Hwap|f9HV6+>m6DW%k@>T2u@Cb4hhP{Sfrd0hr%rE|(!o7YcLB$e zSm+mofe*qp)4P)7Zaqg_r&fU~a9tlmG-QjW@WLBq_JwW*5DeqP(I!UIUgM^a2#5F@bE|0c+2Qc-57u4?1B^X~fcizij@$*+ zNyDvrP^RDI?JFpFI5gP%;&)R{o536gC1D`Is$HC98e}sRz z;@l3bKPlscD`ZwvdVl~U2>%Kvg;`~Hunye<(J-|ekRf&X9D?+L0C$ zHK}a?_1P#%l6}A}^0aQ{vR4g#l({BSkkWNr(zqcQ94QTAij^y zJvGVc2K6{nlB|0EoS{(|HieKO$kwH_B~A5x0Kwn{L!)6y_GJ-|DtxwQAm6Jk2zKv- zG5%0&H3UJEJy4GVC5gKaBx{4a_OyaPeIMjrs#?zw43*hyP*nhDp0Vbz?1kd4luHK{ z(Le`7nenimceVCPtx>Mv?E9+w0D_?+UViaK-m1DMx*41f>L5^(xSDi}akkcQghRC! z^+;E(h{qh)#0-ZWrx?dIryJ-=&-N<5wuM`u)qN#%0i61qYH8fqD3y8m%yE@gM)pS0 zdi2ie1|~@N!3T36%s}ZJ^J*2*5DY$e6lhK1A}O_$6!8L7L^r^(P!ZO186V>R1U5Vz zdYvdYUQciiZB#@LgwsBl#(FMMU~0LmAsGCq?iZhBQ#c#~Kd>5_;SnF2CBdN7wQBCJ zhG1~QD-fMrEZ)K)*F?nM?<;+M2f1IlmemmNCuU>}(^+#iJmNzWS-4^ zW}E9s^PG#`J`_$Ulcwx4({-dg<^k{G>`a=lA8L>zT zvp~ym!2PoUUi=4F+ZG-KR>e)KdA^_yUi+Z14ULu``sdzSQ{0Djv1^f%1i{b%?*grb zH@lc>J0d}Fa1Y$p9a;+s0-<_{3%oT)Z0=IZipzU@WT<5q_pKE-5 z!OzwpUbk9Ii?rrmuLZZ!5Qz6dVEEMY`cG@0+vZ}~d};TH^mi`ephZ1fNrGT#K&v^f z`PyM#*24l;!Wg7|5T6y>YLLv?*eFP}8QxxdYzrZMH>5EoQRaolRM-o13h zR>Lw#^{&8WhQM(HHcFEB*#PT#9|#5yh}-DwclWj$rZuI7`RcG3963^wn62McIJT&7 zir`)$7;3Y18=dgDt0_%VJ}urW_u%J%+5;yFl%(R;?-tbP`O^~u%Xw+F7j7XKl19WW zEV-R2owfVqV-~+}+@u9o*%5FfIlxeoysgqHt!Jr{6dG}h%4eZFV}0qvaZa$HI{5ig zi~HPZEAecFQ8vIt(aT&AwBzsZyo{BxubVm7YT4F3t&Fi$Z zy3c~m_|gU-{reGK4;jsRT7ArLBh|yJd7T!oS?MR&-zt*1StPd&hek>IZdtv5C&4g^ z)!=@gifdW{q2L7eLD99(l%$u2k~`#k)|{=)E$7<^hDZ-4Y6%UR>`AQ@E1GIYcSEth zT%S{m`&3-hiY}C-yQQm+k}K_YpB<$7K`8h$N`Tk(J_T7r)^uYz4=or-x?K^YDu?1w4+wfA40*Hq$F_;woxkX zUGB57<=kD2Z8*V@7XQ`{$UU@SO1ER34UIsv4I3q?_%Ix$;@;yv8@rIYOuQIIFceg2 z7BALOnszDg^HK2Lo|zAM13)MkaiAn&ACQ+87HYOqq`Fm-h7b&eRhkc&(l1(tmd8tgS4UC`tnJw26lzAr|<%GSmc%Iu%7=RwrrA+*!BdY*Wb>M9$r!E zdBBB6Xsv;0#$s(UkX%5#&z@6JL0`D-gW#Lt77t$TK8WXuXrF2d?M7whmKf9JbO*uW zbk3jx#uz-m;ypf4X8=id8}fwMjzgLDQ6{1j^l1_rY?(Q~V9 z2mtg8xAtaA>lu{O<$-3bd2mf>X@IKdcntuvRYXHDROB`@pG$vMk$N}8Kyok~R%;5@ zGbrXR4{-`pS|WH5mjHz60@0ujcarWin9}Tl;sK0~sTDd=i+Wh+73ozl)OhGKn9`CK z6<}ZFF9Z{fIT?Yvos+C*7LyJ$zoU;*p!y^ zNy26rpP{Yi8ZISfTk#d_1s=B(48d>Oo0-)hoG^ur0M2l+o$$m0N!UOSdx6OvEr#{|olNP6MmUhkbzCqH0hHinJ%32tKU>nC zWn0eJ3w-WejN)ZV$IbU2M-auIRkT3PLqPy2!6Oj8UPog&T+Dkv1A9S0ce%iV!8!RL z?0MST^DQ=CTeO2gBABf_34*;K#cSFd>ssl0d77F?N%9;bG!uspI4*!;#?bve2!-0n zgZX<(`_(_M7wQV*9|(o1koeLiT6OVUk@z!z(aZ(OZl!pyyVo?Do)+<(5iu2Shg^Cn zt1mCEfYAS8lNXkBvBuXFX%%Tx#Ow7~bqN;|$N}Qo``|~IDMwi?f#2=)Vm({!EyURr zyl59m>!$9KRY+tXxl@xkQCg;B)~YZ-1b5>9iGnF~#e&6b|e4u?g&8DoM2!qx>h`(zk-j}l(ixV1p^9WYaDW#r8;0O*f($M&npm3T&v!~FuRT* z6pX2zX(0(%TL}`kj*xLqOxy6YT?Kwel5* zg>k@+7J?!3wn+q=;ZkEzw6Re8Es2l_p=@J5g+crW7Jq#d>qC9%aIPS6m71@!^`hA4 zUy^lbs32t^5FBYaw0m7JG+-C_lq?cyAo?RHT|+djHMSfm{CVJuw#|tY?|^mnKs05u z_Njm<6%sFf#jrPgX=yQ7P^8VYv>HJFC|r)#Jgo?>`{(a#{&)2=J?sM#YuOVL&!iCu zg0{qk(rfP@OT<<~X>&0!E=Ik7Ol~FoYfoKc%{8;0Gh{DePj!sh18+g;f&J)jG$H7Z z-u8i}xNZLpojL=6@%d05nk`{z9FEP!z<{KEFn#KyBE6G4?F|gf>cdnVnxo;8(+$RC z;CK@Eu!r>wPN4^$W>X9ySYS$n0;W$kfb|TncnSth8;SJ#T>0x|j*G4XQyQG1w4POa zNP*;ebW)JCz}aRG}9=Rlwz{9q(^ z&UWpJ=4C7Pfq2RoY3z5Vz?ms2%y}rM^CZC7ln4g#l&g|fz@==4-k2ZIC#{#Wl>mV- z2n7?w*w3`(KDZcqV`{w?3P31HlT)MtwHT4vg3YGL0eB1v83^VagD<9V=w+Tk7JTOO zLM{X#l%$(bw1IAvy^}ZDbI>?8!8j00p%ktK&^&vGX7pJLh5Y{E{rAk@gHX5$oJ}-+ z)3IgG#uoh}hrZfN>#EJ)3X+awaFgt7w=0>J8 z7z<6eUDtUAu%1EhNKIRGCI!8r8Lq;6Uw_iq=TURIbjX*kNpWlW%{4LC15AfX zYk?^ZYI4$oBCenR_FhAT!`ZsbMO&7gNkuP(^$dE%!kmRE4a^~(MbCcbXc$fw4!M1M z{;FBD1?w41gNe4%Lvt}O7lmu8t0s-u2VfRnw04DAi$FAJL2qjZ)-#xb=YmXTxwPLr z0@0uaUA1gLAR5d9)l}91+SYHIe7%<-5Dkp^G5Q%c@sO6TNd%(73_K5g5{z5FmvYC~ zG(pCKg((e8C{Q$NkCl8|lMed;3KHmo?c%3aLpE)Tr(D6529~72@;3D}PZ6sbtj+si zt0WbzQCQDlbY3)|O;&|wi1~j(hUxrT&?i~*7R+1@+}BAU<1KURmyf_4Yq=<9L|^WM*-E%`h{f0UtU){O{l6A4P{?qk~ecB*pvv3-$pRl8=pM zlTG*a|AG*uDUEo;+-#q3SFRJHBt4N@&TuJ#QTZTofp0RkDVxt4xIW-)s@DuCg7$Qq zd6Se9swAz}voc!<2^nBG*2T9o=zCqv8m)yHh<*+n4`6n-Yoe!T{-PuW8|zupqFz%M z1b~`DO(+MD|1RwR1qByv0$2e(Fb7EkU*lN4Kl{9XHT!@Wh+g|TVNZaToC$^;BvfTc z9Bhi*@)!fhLD!Idpz3EtgYHK^5}+i3PB=7?iCae%1luvCpKc>;0?<2TAE;s@CxPg# z`wD>OT$#6Px?R-zm5Vl~?P2kQCM1pht)R0ou4TCo=$?by2z1F+zx(V4LR(-kBt#(O z+MHaclh=Mx>+TeDQ@8mh75-3?DnYWy@}F-#;R4*)r(BxH7Qr_FT0s2zZ~l8yuTXSA zlOzgtRkDHQ0SF|SAqxPG+b=5%u-phGf&o?o7!DdV4hEYZ`=CEI)}YB-hF?qK_Rse+ zKYQDC6@Wp={f$gCLBqmNpd{8;<<8H+wqSC#I#S#9TR-R0U;eP*4L#&RZ&a+4*qvDd ze29m25(t)7!XB%e@y;EeIYW5XpU;ATJS1!q&?}}@)mEvifKMe0;fmW1Px@d;#hi`t znKCr8K!Cp$^h%9Q9oPFyle?@W!FslbD4;Dq+uH`DA7pmIWwu3H_}R)p6dyDr9Ttay z!mISsolKVEcmz49^3UeKBL&rvBz#->`qin)BNG>REebxb5Yvo z=4Y~hdaHrvz+*|)(RX;yjYnR*Aq}mB%&pJ4XS^U7^hE-|i<0!wlf&hiyB`0MhU(B^ zRY*x~NC!gU_Rl}Z7q%ub0A|!E=t_rq{Oh6B5M2SpW%R6k-n*Cdy|3hgIDAz^=2nIKj zD^TJ>$^*YtmR)?kRItoU+)Q6Ep+F~O;lSmvm)G-+Pnx1-YbE^?er8`J0{sVvd0kM# z54xeGHsR#8YX$$&+z?XX|C~1-UW1URTy{oS*^C+!2hc(oxRT-syPCbyEtIW>BV{LM zEk%Kl-Br0uCuT0U145xwP{#mTaF)6n5ARr;@WG6G4cr8Tf09NP8xTCLufqUEkjArd@ugoPkJ5Zigb!1 zZUh{GVAwz!Yeh;H@q@hfIRFL+(>a9)e@076#zf56Ms7OV^2@m#!yBTYPS;%!p2>o5~WkvAOPyZv7Vz+6@_)UA)6WE+t2E4 zB3u|$h~DaeOjbgR-x+;g&XHC+0|Sy^=2+04&#Id9^nN zK_M`D4q90>A{};;&s|zT$lV7}78)@9Mohlx)jB*Z>dm*|T5jR9z0i(158o z;-ViiuD*o;7g8y#N@rk-)DQmQ;ZlN&(VuArLkB`30vA#tg^Z@;d93yIIw6gE(av{t=bO5ADF-#;;2^P?`evopQSA zqJ;}d4pLVep$J5CV?&Z_^l(<)rd{|{f`L@WN>B}iPp0@+dJk9&av)IKQaunY6+om} zqC2Fmdod#`hqGA>lHVs=32H4rSr8BkHo#(NfMXz9vQJuClH9Xp=yPBi!9aSvuwE9> zfUQ^XOd8=4h*l_2?pA})69K`{2@?MwghGEHU9}IyE+xj#imuVXrNlm4Mn6}kFxQ2R z@zBnF{F_V{ z{MfwK3TXyWu5d3R{hnV-+Zpa=1$3ieDj0})%sGU)V*$l%)rnyvk$%~MOI7>P2Ntdw{??|pO2HZ3(Q2FXJC6!tq2EldC!;@TcQYuup@ z;u+Br3wR^!Y6^(#p1ZA;Zu-G0TtZ%xnR?RDxeE>gaBu|Hf=VdV#&O!)+jY}f69t|$ zg?5je4fUO7x!=}xTf<_Iw$YUYqPY*w&23cy#23a#($~N1=dKJytKy4PFp-!Yr-*H# zUx?xT!(1>pFBHi@@m}H#umElZIk-w0$&Dd)DFq`%ZQF?N$^!u*a89jsRhNa50$_nj zFDbGR4EJK%zFyve=+b)%Kui^%yH^oReo5fr70b*k7)_w4bDT{LKT= zKu>k^Rx{7FR5MdtV{zEvuNUNZ)O5c`@XJNNuP@G_DQxNR#XXoMg5c^c12b)QahUc7 z>f++}?0hVsTl?HaHl=H-k%6O7u%1|lm_m6uef|{$!4a%|^7p>}3o_Wk5ZLqB_#3xw zj%QV&_F*Xw?xKTH*<`D_a1h=fG$?17{l2^o%V+bv^l$2(^$covH6t3-2olKCkhihkIk2u88NpKtN^>ob2qfe8@^ znyFJ5%F_l94R;oS&)JU>dg)Mb3pR@EA5M(niei6wZQr9Np0W3K;a~9YEeKB*Z{8^C z^gsmP+Tr0BU)oM1v!p1#GEzGE-8hP^SqTPic7{hFdc@7wb^rZ4pj0Xlh(7v31fsj+ zEPdW0$n(^uOYsOqC+lUT1qGqd0ggR?)=`~dY&h;7$!Gc#Q1x$4N&M47Fi8F3)w?k! z;V{C&f>7uP$3V2VaL7tro_?0UzJq+9lD;XZ zq0k{7?oM(oNkx3oTZfbQ*v@@O_6gUGeC1MFg(dcbE!_325ey~=nwRgfQ{k{$G}r`v z;^`Mp8&^Bv{)hf4SyzI6V$~W1d!aI%^-N9QttojmKh>nCiL+)Vt!}j@cdms0v~#?B z{w(FQi)oxrEC>$nf%7}FGlw<@6!wA>oU^v*fZRDyO)~`+$G$2?nwbV@Mg!rwHV>}< zwnuBP9j0qbx(DL{g}vZR>3U{q&go4bHPXi#X=a|*12(~++%46zwqQutcwjHIp=3R? zwB~5;Rb1$K1PmQC`r#BW7d`IKJ#9KV^S?- zhK`lDCuu~bhg5Nk6eGF_M5lf?ChMK_&f$KJh%Gn}*LP_vix60Ylp?$9xl6&IXtMWM z{4-X75o7~!*QMJt?`ZhUsy(K`QsRBgIB>Qg_1b~-Y`H?acs(4gXR)S5w6whn&3v$n zvvM?n=m3|}u#DoWQQW6Gi|4?{{OpTV&=W~p!-M`_PB^vr8+K~QW=;xm^h1Rue-&ARkHZh z`T^>Dv|5O3H&=_`NCBui9hd5}I*f3=PY8v3VX&6Pf#}+T;E3Xk3Pm8gMe77$fF{5j z1_?w5=6&WqWuYCIrZy&`K(tj02nn2YyHPYqutUx^;$-D`Oi{DI@jhEBIX~$2H7=5U z*V^4uba0QNL4tQSH3=p;)&+R4>#Fz3+1M5MhWn@)mM(nGdwuudhc9(04WU7TUzX#6 z<6P6WdpF{w?#?`S8SbMwC|+lAJ@+6O9v&{G09+`k()6+#W~qoK?cqJh);U~9?Xg_H zECsoj1GDHp(n1w!FpbUeTdJxhoI~^HF@>ccV!& zvXrEU#A87qx(X+5qcb?B?d*Z*V#O$}e@g+81saA)^@sU+RjMHO5aSRJJ>7RvFk~T+ zeU@1Wumr&Y+)d2&wQhZ@&#a07Mq;`^bm05_kr)BIIouDQkBU`|$=@0(6YoE6D!7ft z<-u_&g)v%lV=aQ-Iox->6@IZdQ_84-+o&B@nyz~4R0)ptELe{~19x9Z*V{+&HvwpY zW0O6&ZNO}ZW4e1T)~bSGVa}q3);}cHW&0k1Xb-Ca!e?;ef!VN^mBeB&YadhFV&J?# zgu<9uAAqc8U%^mIGKTxPAYq~tNWZUjjA|M#_Q_Rrm9Y1f#>E;o`>xtAnl>Kim&3*Y z5x0uy$}S}@A2BfGq~BNk_n#yn{`BUK%-$BOti39NAzgs`-q;vpQe%U-1foNw+6FQ& z9Sj1a-`6Ak%x42Dq7-%enDsA~zu>}erWQe}DR^PZ*3M9Y>&l(dOIAzKmuRj?vB z@Aa~FEV@vCke)+-Gy)=hFw$Y=a3c*!ZC8v_Alg*pTV%7DvHlydl(&g5fm#vGhc9Wn zP-jW`{ATzS5b>8>rOufqlQyn)ZZxa~aKvS^uZ*;LUBtM_ouCLmnoh>o9GUC+p#S*YYr7Y=_)wRcmDgZ=oGPNZmDg{i%`9<8Krw1VJghx3 z(~1>s1xHOyIbEnQ^*cS|R)Nb;*yo@Imi$S_a!b+ z@w7Jwm(qHzu<;RxS3#4tzx;P8aHBRR#iio&ZKWXR0yS%GNJ4BLR_iAI|GUu5I21#{>b0E4U z#rv-I;em;2hA^r$U;4U)dWd}NUTrLt*Qo*aLcfga+A9`loc&NsFs$>UVI|lhOo`03 zC_Pva+p>L^HWukRtqrCzKVB{$ z4qQ!^f+4-1xMll8ShHZXX`k*?2!wg4p{x)~#7ZF%DMl}EaIo(n7zV&0)^K?XVRQI# zV*^*3jir_*fe4B9EyMBWO8K7+Mh)f?;>xK`;zJBbU+4ma%2BvX z(xCSQ;HU@9?Rea$6KC~`XfQviOTb5}+4)cuce=E1iAqg8BrQL;j>+!H=L`hSdp(@mw`{MO6v3}_?dq2BcHcoT420s)Yz_CGy_)QS zi6C79&ei~XQeP`&<-m%__fg{FSLp}9AatV@(y8rJpA5Cn<2%@|)gLvXNkaS|({${x-jl&Ia zsZlIqSPkG3lF`G3`=|xKe-6K78S+Bc`i!&;o5DbH26%Z4q z$#KvM90a04HMnc!E?ILB3}a&&5ZkdLn)jziAR5#}=;mx1i1q-2VPG_e=2=z-u_CgN z&;+d2E-KVEfD2sLX03hK6A%o8Q#*SnTM^0CB(Wl_Vi(hEX+VY|xk0=(H3=XixHz$C z8k0)*wTs2Y)grVaEX($}@1=1=flesgAKd4hQ@1rt>*7Rkt`W(_v6p5i8n@YEoqFcF3Oq^m=9wmBjQKKmm1yt$gl z^w~QkT`>Onm9nNF6y~9*5nkwvsRGdu3{EH-yGhFSr*9*XtF<8zZcA6seYRQ~2nIhq zH5{~&03+izz3lBx|GHv(pZ4Yf1jB@&jRY8(0`1$P2I27XL3l3CwC^Ao{O~T@M;i$+ zGDjVMP18*euKQ9@m*z$nrKHZX?}q5xF$wNv`{8$yOP=vZK*ca|5L91CUmeFuNCBZ5>?wRSXPjx`t;vIn|dUz^lZQ7ZK4Y2y$KN|HviJ$QEu ztprt)R%QEBBj6p$KM0v5(uRnYK!fYOgGWU>)P{{8U zWFXc6Ea_SiO@b?~`5Y$@-|y&wXb1)!XAf{U1&u72y&zT2w)nDa?SMcu=!E6s-_0O< z^((n@e$w~F>tC_&ntv{EB?+-A+usV0S|;SI&Az}mkRC?sKZ8#&Sxk1pYSuq<-*waP z3xYvNVQ{Ipel7?^15gOrFJH<8kfLtNp`(6Za3$S{*{4ncUq5DjiengaKczBqd)3I_|tXuI!nDmuEWPR5n?U9)Uo>JmaA8r+Jc zM8#M^&Nzx+u^-ZZh3h%*Vbxi=*>~~pmRX19KrjfoNJq;-q*|K5TPj`Bh)NG`G}!~w zlYIN@z^L$>CZ4~J+HJf+x)ocTmFv9p-rPoeV3RA^WLm7>3YD`hNT$PDB}sx?#Z{9C zM1z?jy^VGc;kbuN_vm)Ng&P3DutU1(3t^K2_cTwrrs?Qq`vB}gQpwHy_ZF$E zBLP>^24a4$mO!U|_3dFU^;b?m?G4b^rAIOd>F}TDe}{tEC#20jby-cfCmS44w zyy^cxC&6vLKEglmNs)q;t&CZfBnXC%pe8M6!DS6en@V@kF&0(==#FGH9M;rq>Wip= z_&E_KpJ(rRCmS_5!KQd-RGffl3Ar42a7h8gcPh2>N*KZkv07;n;Qtup+Nb%lC$>G$EZy3Jf3`%C~ zO0C(bBnj$qay7Emn%@SiZwmxNJ962+rG~zCT~!vm0boi@ia1;6X}z*tPDHa;pJPN( zgT)*m7@AP4Y(M-nsqtLFFeqDFt9uxcY&@i7CvbpF#MuU$tuhl#hsZ5d;zCVss!uw- zEzd8ZGaJw`_#ZedDp6Q!U-bDiwV}MhK1s>{n)w756KKgPIA*WHYYz0&>k^Osspdhaz8B)raSKurQ@&9e#Q z!T(D$n5a;Bd+%sff)o==n-d>(9HUMZ1 zS@VaPcvlt8C+~f$K{~a8#ZZs9@N-4;kroreYsK@DUbj0QG-*9+SH}{|App=3Y0W|E;2Ojjf;flzl#)z~xKWa3w0@;(pPFw}MN-`==UMtG9u)GIQ25EsFDcv7g3&z}vLat_rl(v$`o~Q!^ z0|P}W-D&D-;d>Nq6u{?X9){@cLWTJQvr(A3denV5|37VIfzR6zq^t6f7T}zwu11aq znry}t{sc7nGJ`Zuvs94Q_e%#K4y*$TQ&)4L=AZm|hJS(S{M_&vR{$2nhO1ew3ajDD zbk5q*`cLv-Ii`RHUq%>P2$z=&cy_y#OkpEk05Eda5m*fG9JaDZTxC=o5f}1daat5K zX`^i4`#b$VHh=*e0qj9O*dQ3*p{c98`z@{e@4wIOXXpE%5)cgUT)B(l|9>w03d_@e zE)i&z_1Lr^@dmDr9mo{6N6F6y;0DrF-#M*4kQU(3g^e^vUzUG!wOasp$2rzh*nj~L z3>yj${#<|~{rs>AoM_-Wdbxan3+WU^r8B4q9>zYU1vrw=592qTXe<;WuolYDDq6r8 zJcu0%TUlH+1AAd-oF_i}igY3rU@a7&RJ1?^@F0#kZDmn1QgB23xh1_0^#~Q|Kq$b4 z#D}G5fw~|o=>SrIbC^mOh+C+joyK!=6$*0dVI&luGcn>n4iX1mChTor4;K=f%hXli z2L!`8MX9UdWHE1ASwM@d$Uz+lhs&ZV@_*E#%oWrj;5m!nq^^Q<1f3b)i23**SjdN5 z&60i2S5BJh4|xrp+YHx{57KNe@l5R8(UVkD<2lR8H9`+qTzoba{i+eCtG1gS1l$`N zh!%5Nl(zgE(YZaC@_~cHqB2P^OE77zKw?Kg4_eDJ*s)r}q8xFWH&dRm3g6y4mzB=> zP)HBx+3yHij}HnL5`;Dw8q$bxOFYxX3J=w?ut9c6Rzv*jq18ZtHbB#9fh4;QLZLtQ znn;2jma;~W;y`}hPzacvV?Bip7$LM4u-^NGPGSQGkQOgj>;55aHL^a40BhkCLCpg2 zgKI6Ie}8ABF{#g?JOS(y5Bb#gpQ8wgYSr>E5lHB3P=M1Jo0v{1P=Y!lS$x^0{e`pW z6w%ouNz6d1YB?osGJr1<7ZMJhj!5TERJy+LY|c?62eB1e9CC%A3uKqD-ADm+M-&ba z3dKlWZ7er94mlp^9p4umEeJtPFg(e^lB{D^AR2;!L1EWb;D8|318V`yg4Aj#KDThd z@j>cpA8U1)?Ds_~1Zda8RY`z3yNwfa$0ih=yR`gR=bsuBtQ*T}soEDuSVi zfHSHDqOmy{pltt|!scF)%gJ|!ba%LJ4*Wd3BW%8xe-;(NU>7?8|QHBe+wxN8W5YX*WSl98*n*!eZf zfEt+jIxk?mu8i7oh;eY4fl4H;U6OsLx@=&sb22-If3dVbAQ*r-mcGslMDC=u@m8{6103xi5ZVs;TBa9nFlX>wvcsJFs zr9ddON9$F|mh*D(-bZJwmC_P9^eC|dTpww!J2Y0C{EovebeydEqI^{|Z z7zl=j2;01@FAYf`T&yiR4U#GjKUQlpDQE1i1c$%0pwSmxNrS*F-_Orf+QUU-jxR^u zA9t?tUyxIE?F!QySuGKOJ;F5=_lW3V&u*U@&z<|bKrq~dBn~8c+s{w*x5*i8x=@>!@ zoONj}9BP8pRAZ8R4{_2RN|duVR}#wh$D@%@V0V4YXk1G1cP*)H*j%IM1L7O|#}<-m z8rNu19SnIbyM08c0J)Dnw`fk}(73Tq3r`jG#yjZl>Azr0P@H!IJ4 z=vG0}s)6W8y3enrT{E;j#MQB2pA!WsK6kF-%I)t}ydIwy&V&90)rPU?mtL5b_-N zqgLtK(n1m82#2?`vl?alZ80@-OR06ZDO@Y!l*IVEq%|B53+vR@TwxkNa|D?CptueuF@w8L z+%Z68!UvS?HzPgh>KO|ShzGQE+M77$L3%j-kk6KWm9PYx6hcsjc*aL4KfBm73_69= zG2m$^JOm~a@~#^qaJvliyn1tMF7G34pZ`UF4uZg+#b?GxPnm2Q*e)fm)I~-`dw7$W z#(G{J)82~NydMt#jwtQNrrfKcd%(Y2RTJeur*IdE#o$Zo4q39XXH>N9p_wxb}&7}BC)_{^@O zj0Xdkjz@42%t7_Fl3XlNIC!;I`JsQ({iJB|QvCDrygv&*kCM$Y3_BH->|(JNeO$=3 zIc5C$nj*yl^);XruR55DwJ(Q);N)H;zjN_fa3mN|rD@1Xl_tADOK@O{iol39kQbju zQ_5+aoVEnwis*of{M)fOG-M>#(g=uU^Ch;h1!sX+FhC#}Q}FOS`nX(P!&nd;UWTcm zxmQGkF;OTI+Uj{)??V5+?EGn3<0AN-*@6KA!5Gc~&guE1IV?l!lSD5a{@tTzP@B`Y z1}-H~#2wcP(^4wlceyDVVhKj1$x(SIeCcb7rM{+pMEDgbpX4hCvAi>#K9}-V79P{y zz#NFz3S&Lqf)5A;b0k^|x986c&#Xuoru8Wjh8%$l>`6+JTMF^r>R@ULGiX)zpy;NM z(t}%J=40+}Bhs^7EoW!paHl#L*4pM60T2wvI2PT^U^P5SD>4HrqK6=^;T>PU_c?PH z_aoKR>#CTi?CTL;x*5B@$VZ?P4#S|=CoJQ24McarMcT^>rx4!)*5lG z8E9SGu=$+Cz2_94w`dPQFjU5CVJ`gP=p2eClqs5gSq^J|7V|+U)WJ*X(bDohPp*AA z3w+awK(nVs0uF+qGMa@Mn0;Ifn|u`uf|L8;{?6Rr^+@2NirD;?;nD}0q+g8>ETkcA=up=3+|!n2+|$l1GiBF7RTmw8ocjQA&jh0?FR@3CtCVC z&jPPCHz#v5vS(8h;S)a}xQ!Yxkk#OJpABMuZ?_PXN)ob?{AiYH85hXWR~VQiNWRv= zA`l8@a588{sV{N9&tWZv%&i53XA0vTif)w1OkM~CQ<7!-hq>lPsV}L1p9;@_1!nHl zTM7nJrTOV89KwydKaO_4cW0-S1;=WrUeIYl?fXoYR;zWt)-+iuO1BdXJ5`$K{#XZA z9~Wr;Z8&RX;nfb_*>bOWpJK0of@~$2CSKe|Fq~9r&g|=K0;#Deen|lCEZ40pxQF&A zN>7#hOmVv}#rt!~R)SR69WuROAR5tGp$NJ^+QKf`55NuLHY#~e#fSDC0?|c3l#(Js zy>*?FE~=$xPwfY0<`Unc=w|0WKCCnjVVWN1Gdm&-juxj(dlqzRP~4}a-o~=%)FlIN zO2MFL4>5Jo&Cd1d=1|p3D6%oCn8M(l0eW|hP}^WpbQ)n5o_fdNW*&VgIi%tu@zh?w zgKPs?-6y^FN7^XGEhQ9vkupCJ3a*G1!6^7k55)LPg&8`lOX=a%WG~$(cmIh#!)?0y z-|PMq{CqQ}btSc|H0IFiJ_}q~3;B~SQmXZ6)(=`(IJ4+0ayg9-U91x=!q4Pu_H{dR z@EJun2NY%v(Oye`$k#`B6%JBRt?ZBXnQ;QqqZD*v4el_lU_jB$DXpJ7Tu5!u3I=ZW zQ1=C$P)_!lI$c$nJ~vCz%?k^ER;)Fyt~y{&@u59XK_`U6hM@#Qu1Rnzy73OoSKmN_ z!ZT|i6y{*M+6M5-FoGfXHVVJm?sUFRrw!EVc|Xhc189krrRe5T3ZMzyfABlay&}{3 zIuq3a@jnj0Hqg?p!B-Xvh$+kkx5=L9`8&n?rY`iA(5+xNYwneB>HZi7X|i`EC`p;V zmp?TNgy~cJMxcg*!%@x@*5boiIlJTz>$yw8P|(~f{~WjbxqX(iP7OB!r(aVcY-`~zYrdPHj&mQEQMx}$ z`Y0jT3*IQ`jitT>XKyGv3!Bu!)NVgMIy2=7&scPWynkRtZ6(kx-lyGzi=uI5xCuQ8 zhGF`+1Sg>RgTe4n&LSe=KvLkP-HdOuA7>H_k(r8ao|g+eP^<&?;I0b~i&|q5f28&} zm)9c#K`Io)XT_*YH>igbh>kxe$YWk#8W$ThdN48KB#qz@h|X^je)nR$=0d)n|406= z;da?}Gxj1GzUW2?gjJ`c_Ac%go#2{_S37v6OX=mU!t3l1%nea6n=2`U?vJ1wNWZVR z-#$xSAgyt12j6Rw#cjI*&)U6kra&}e27_|a?`zd=W6EX{620w1swh>rsFl6UYO&l^ zC`7tgkd@49mnM5P1JRPt1#yo)U<5nYivMgyv~V@;@LWS)7PX;E$%3`lSGX}#_d6H( zIwjQX{)j#PjA2rQUIatUg+F8|a zTElZKqfPvV*)4|1aMRv|vzc$x;Hx*BK6g#P+Dc%#S=3H*L*jEooA@2>U@=6zroDY? zg@dBOAGDpec)B270@lHn!voU0ZGEM=AtC&;5YTY)fG$!Yg~2-ZWtiO`HTNXSe^zwB zbnW^I_HkOrhnEk(>+bCkWp*+>T}#AmCP91k?=i7wejk>omEz0(9Tbi+-+%C3)?!Vr(TrSY?+|tk=$Yx-B{> ztSQ1Vd&pt|=aHqKJ73z=#=P-CCv;Y*mDe5zjzulu4hb*Avp%F;rCBMMb&90HSNgMh z_E4v#`k9<}4HLOPrq_tQ1JS^jkBv##dk>c<%0qk9QvD2sLdR$h&B17%+70S(=E~@* z`jTMP$Au&GdeQ(P6vkjktAVqwyp%KGPwC-UtA~pOt3EE=?vFjBgF+|_Lg#MCBiQSz zr)~kj4(=gOt%y$}D?-)w!OPd#fpEx0IS>kipmam#4xb}DZv>(zL-SzPLYEc+>m6Kt zokTczZq{dWF9?Mp5wFcCSWYx^mURBkhM1H+9L*5!Zeszv}xUKtq9BY zp?xm|q9>u2kFVCyk*kI4>g!Cx=sVa5h+M1&fiM|0ELvhk8YW)wFkg>jSy81G1(?IH<(T1tuuE0VQtN*Ya?!(GI(gN;b{j*-3l-u4E-2y(j8(I%g=sATXm*bOYFIvdc>GvKmbH zY!(us0z1kX(y<3Yy2x6zqLy9{MK^$pI0jJs!#A;LlhDZ)0tCV!NCm^AV)dmdD7pax zr2B&Py1Q7kNg%*&G!Stiiw{lb>PwCAK_D9R3M^XC9r55(ADSeXl`|e{SP_~AUkF5l zE`dc0dgR0U(9Bi@X)Ya{`hO z*!DbnBmwbeL6BJ+SCszTC9r5gFYGl2Yu1^Rbb{Pgo|<<(E$EGp=3bLf@T?Cziyq9_ zcs8c9ULQTRjR*H-ce5y3ahom7&4%>cfO*5iLYRcY_1w*&x}a@5Xv~odsCkA230PMt zqdzd);WnBKMmlFVX`cv0gVyW{h8r!+ECA8m3-ks8(V!V;i)i|yn$ql;fu?dE715vxr)DR7onQtoQcr)3Y7maD8+q9a z(TXTJxbLEzf&M7*N5a<$h9@1;w13xHWLZln5aP8~t05KGu`>RkoPib;nVThf;0OFT zY&>vNQd;M;wxGwgwv&3wu8+~wHXPMw0B}aBRu5k%=!&$i;(_}ti0pK&(LE+gbU@p9 z;7yTWfUgsDNY@Gn>B|(!u?Dew6>Z~zC&ddDzE02?y=Rlf!+2Gwl8Y<;T^o0kDrXQ3 zfCYD~RQsSH-iLl)K#kO_MIaj7mQ<7QNG&fo*-+UHq}m4u zE+zE)0xGDRQ<@w7liq}@`K*Cx)HZ+-*`&yB|L@X86c6l3un7joJrwsZ+(tkR2@$O8 zNR#`GKs2}wNfFA5R31%BE2&Fce1E5()mjbNr3AMTupqDDbzQy<1SvI*QFH_D0;yhp z`tQ@ckUX9?AJCUB9MUyatsv$52mmPAuFDs9P&%-SvyM=718%}96wdtj%mZ4Tx(YxA z*3|EKHm{odMuX>?rcqmxn8oomNM8kALtH*)?wS;%d-3T4&>DK~XN`qcX|fh7Dx$&U ztd?yBmyJ4g6@Xeq!SG!0ip7sWG?ajdVqs@F+-CZzX>Us+gSPk?5ua)A89tB*^BJ*)(PT3oID<#pIjUb9pI z%Bg-o>HAqhD%wxf%D|ogJ+MtxjsI44sa(#dy`f4IbO$;357$1ihV$Ca!eH5Zjn#ev zpam~!s^Oo1Q`52{zt0v}2|z_Yz^%tslJwET6l#GoW3`_EaOWB1vZ~132}Gm07ciw# z){a#VqZP8&k&X(6W4pm#`ejH-+Es2J0D%BZAXQpc!i{gWmNI^QEnz(+5RfBk1Wk~S;5nkg!>wl9k1osQsiv_4tR{^L+QeLjs zrKBZ%Bp%{_PEuDnti_|)Lv_f)KmGIUSwA+fdyZN~63j8XAE-s@Dgdn@Y12Pk%T>Gf zH?<9LqZ)EH4?_Wajog8wnuBMxCl)ps4W(P?)MDPW;C^P=Z4Ry6cMN;S0Ad}~2;_gH z_lJNW9QkU$kNzJ`zd$csw6YMjwkGa{qaZZR-ixg){!3N{?IHl7U_fdyl1Bm5K6gGA zwC8!U`$15RE0_1D|H==@G>;qrE?2EAl&!4~Q&-c0|CJP^{Dt7AG342K@-T`o4bPzz zKJe$Eav5|3qm>1#`k1;9BsZk?V+pc0B}WL|}BT4t_~RGkrho zk;-%;6d?QwSoC0YP7i*f1#;GUo@|Kmo0aK6D8PlZ1Jbh`xjJBA%JM0!S;(~smu?}F zZSEOB4VN<=Ve!I<|+twIIz=gB}G@**5LxvXSlziSO*=Itshz^q@N-LUkE<39J z>$1EKKavuk_2Ep6be$|9_6p>Xg>(P}Lj_19LW|EADZ&LXQdf5m1GKX6=MVE!IZ z;x0PqyYmzj5DIlsxR4;U9YOF}!BV%m*AcNz$pXt^m&=-kJVc5n0^qQ5MWR4qEU+`M z7=$Q&q^e6JFuISX-8QI?&|1K=Yyj#Qn8d~1P$)#ONe-}@TMnwheJ-dmXaqJ81ETS? z5(+SLTU&E!v&oP1!zwU3Z}3DM+5>I>%B2ZSG`7ixa5H7Qv=$}30}Vy{uNri zy&f(k5vq3Ez!bJ%2%sqt3@0dOz+M(jk?&_g5r2N$SPVizM*Q63Oy)ljtj*!h-G;T$ z7zl;~NWUWqqJo?}H7^N>czsmj3b7c{1I*w&1FZKBfMD1`(GJ+8Y(Ed24?qiQ8U&E_ z-@=Uv!O#H^4Er<_3IMcXrxD~jmm(+-1fH>fIsn?#24Nu%ghHR>PO9L7Zswm&`?xN`!TL(V0374}esx;b1^%5%6Q2tFrJwm%2ab%f_~OsCVM@!wQD@&|(IP#R5WgCb%hLtAV*^B>Sa@mg%?cvo)k( z*i>n@SU?aAV0gR&(L%Rt4}+F&8+RN^FvJSXl&4PbTN)5k-AVvp0vrR;5&_iOYJe-L zXR_NUyf*lvAXZX9`W(@Q8f@_hM0;jIsgcA{W=cruzQC=tN;3+MzYoT%96cVc-7JEg z!+x)bDgO*wdV?2IAy*U*>_fP8-znx}coo*YT{rNUDt*0M!BEiLYl~;IuaV340eB zBC8?2rl!^4<`EE1Zk(>#zDvQNTtFVpzHqpL>TDFG%QZ(d1W{MnWHm_UkvtgtPHHtg zY72)_xAhLwbwTJkXzP_@JwrbiFbOF^;7@XA z5)PpPJK2t?`mWYYzoD5|C=!DMT1ZwDvvX`+Ra@2bz7yIJ7ku{UZy# zU;q)qlFvJSR#Wy&>pIQTx!D)@0e4|Bz;YR%bU6JN>aD2{&S9!Z;3!ImRw{j&kJR}< zbcSteqNJbuv_rZ^$YzoHBtHUg@k!iCUc*byKs%2?Au$9m;m)~E?Lf3Np7HWF;n!`J zXL}#Ib%?;q*VKOIQ@3{?LfcfBdOw_lJ85k!{=UCk8r>d(&*mHBF58n1GjDe!>)Ctk zJH<6l-*)GFme=^{Kq0KkC>6uqHv6g-3}XO`VK9 z5Q4!m5G{G&&Du=dy=;F(6e*Fa%Lc*P_Skpn8lzO=ub;;q_RugrhCBk%3KvT&tAYFc zAQT$XNGL?a{&1&#mxV*m>ob0aUw2WgMr%Ij(d?^ss-6kL>mjz#2-4!ko1ce1rc{03 z5$mMKgZF#(n8KDSE|5Lfij|~Q1nrj6s!2%@I^hzO5`G5L2h4iKsGn6n+-ZT>l^@;A z_2HNRk{dwwptRn`b+pB5`dNOMSMT{O*$)bTx8mR~G6j_xBUKMz#l79e4DJns0;&~v0Re$PD1N|BrX5G47a!cEMQKLGH`)!Mt&BxMTO))TcGu6#W8Ym|d+WMZy=73k zwP&U1z**{4CmzB$xO;agy}VT@)Z7h)FkDCt5xD+_cwU;AiLn(;Jr^aP^FqHM430T{ zxQzlp)!SGkN(0dr86|ITd-8u)pLLZu2PlWRHivp%wfCKbvqDn{0Un13UZY+vl7N}V z)G6sT4&OG^#iDy9P_Xc;;YT~Ts_r`pIQ;F{HNRR3g&;W094n$nIcO1V9+RQsKpy)J zwBt=MG!hCCO-4ZVW?zE{2M7gY1e*Vy@aRMU8t}5{8w&;1q3e}n-S9KI0_k?fkl?Yj zK#SGDu~y)j2)C_}TYo3bn(?k}06uJE4B7*amg`f_>K;tm*g6d|&)13f>^WfN3{jCF zIA$m5BJLAzswMZZHCao{P6YWi>mNa|j?#XRoEvLbVkk0w@?12^w9KFM6)q+yk`TAA4> zr59F$F@-e;ESHinrSo(hRuBY-mtwkD-7BI&J+fesJXF;K&3;d7ZFg~Q_C>DiQW+jl zsc8!Hxp^Iy%jS#TpQ{4WQzru8$79A8&Mi$_66dgVF~Mb2f!YdD$B7CYIKlxgrAd%z zxZRt6Epx2nwbSPl7kd0taxd93i0=`t7^I*YLtHXkIKyXVaP>V(he9d$9a2~u5}z?W z`{D!VJdmY#p+JcDDKTw7f?`!WRnknG*pGY7E~lvw8zg`)M1#h53H-^TfoWO zlkU6t86jro%qF%L_rm&&AIt#RP=TUl5zjAxX?p{_;!%sduTWPwbR|Y0+KH3c+IseJ z56#ia_N9yLv7q90dLIAg3`^ix0aF}y3^!}_P6R+s65K~=+3VSN2fv=j#s`CfURx}R z&I?C@3mC-pT4>Gv=}Is}NwxPC6toOPgJG!N^GC4`yMozUjQjh}B0#$$oufIPT=M)L zT>q+B%Un*O&Y~#UPc#iggT6_D=(w)fic;KgrSYivbBef^gl#x~4Wohe(l6#`CDJqWXVdDcHQKKzQle9qL<`}gwl5@|ZvjPIamLw3?6jVkE zaq-!gwcuG?B%FdHH2WF=Ql;tb?z~fh7S{A2BqeFv(hqAY6?=knaHBG_ zV^Wo7OpJKWAy^y>4)0PJx$wKpB52%*lU5eyE~V!oI!k3{;Fax5hw?x;RAN)5xy8Ge z&K-LGaMv<1=)a`Os!^L>pda|+ZIN1ugFL)B~#zM)$dIX z9QKf|09+u!WzI7)3q*hJz2Gl-xJb1@O{odu^@=V$phj`IjqX;wmbKzaAD zYCe1>e@=l4Hl>G74;cP!sHKmy#y3@j=^K$PZ)eR5JCZDVU}btR4Lu( zw(by=?Qb<#H1~2qQ)wI=dswx+&%(8T^!^rBKdSznS(H=%nEkBYyfP9E=y7pFRW@qv zvVF4g;Wlzc=q_Ae>e<7p#eE80ZI+-SjYoPdgn~1p^sw^0 zPenYy3MfepP+F%H&Rp`B^L5sWM{(IcHbFB+>0#w^pCrE53J8Vq5m!WyBp6V(KM+x~ z=9t6j01^fHJ$qO=7DhrS04?H*=#dUvlKrU0xVW z)fUTV&#j35X1%B-0*w%h+L?pqUJ-74i0&(muZn{%D7nuT>o;2o$Ud43&iR>LO5F$C3rGDo0XN>@%I0qiMW77Tc>ZO|X%q87twGO~1*QEzO4u4QWk#a`0d{H1;xN$8( zF^)f)=RIp68j1-}qp)d!mqMP8;ybj!)T)63IZE9F*bPG88#VmaC;Wz1ke&o zg}^Nk?OEGU2o#&n*!26#srH}FiiP*+)sNzDMoK;mQgl;ukw2Sz!Ah7Cmq2u=?@~fA zd0KGQNLH0<+OR+A0@)OkY?ifH4c0-o)YuGb_7Fn>h#NqX5y!4J zX1+HEC_4>F=ae*oCZBEbK+Wfs)$?R^l74yNBW|O`q+7t%=6VFCW<$+=B8AR`#M1!O#wmtVXYZ z_3k>dn4dnxXisn}yr#XWtM(N$LtsHSLX*8Cy=15tus-}fwDZ$pF@R#6vM{`A8y?bu zQi?%R5!B(dr^PeKNjdB}H44NQH7o{D6LBAx(jQd1l(J8_NDxIKvM2{h!CGjKa?P0B zLin{J{@Yj)riz!wqHfs)56ll8$i#agBM>c|hd}vA8r(Bon!bIo873w6`vQ9u**n&( zlP^=innj_KAqqraX=c!FI%H|r!$ne;;?>5&LIZr7`{XNI2Nn|sv7h>)C%2x(8hd|J zp>+gT(m;?Z&9161PguONhZJVB2N*lsA)4%+4k%vhlC=kmVE{JGy)rF=S<*f(UTrLT z4D9|q(D<=iZuD$ezvtCq0xhR8g~86FV3swS_pLsnvxA`G76^qg81Wf#J5sQevyY26 zgT>H@+!H?V4`XUYG@V00*N@kT&a?q~*y!I73S*#jL$*32CD$!pk7t4b)-@pSd_-Ef6NVzl&oaI$!H6)c;(wl>nhI zFcubVeE!LWn5~E^LPELDE(PGx!2oNa0nRCxwFA~?zen{zbS7=oTBd$(v-|~tFbyUa zZCZCfL`Za#PF>P3YHy<<=ejK|eB(9JUe6kQxdfs&*L+R{47v@PbKk#`K)_y^h#D4c zwjzjvqFpl<0_Jr8?QJqF^oFD%H1Qd`QYCE$^OZYc^ITd&4@Qo#x^%B3>qH_PvU|vs zJ$D*}z&-I?n`9hv>HadSk2y+-r-A{+I31x_m|gI9E&Z?L=Y+Ky5v*76#_~FIe*IPu z_NmgeR+lK)#EQL2RX0=M(>33$qb#AY$vVS15Zw~5CVOCFNc|730eZ>83w&HB1d@RD zRobiBxo{MS{zw;x`>0Pw71o>vUoK7dz`P{u`bxWhqzpVxq2y)u&dEKg*5*#yYrc;f z%HrGpgT~c4gSwO?epa}YfCz3puGGz$-h0>8Qiy39Gp&^f#%#|SwB7EUL6ZR__v}{N z0OmpBBI0QCJz2ELim2jV-ngz8Y^pKPXvEd3FD+?lwu7OOSedMIuSRV{r{uHZ8-if~ zl!53+gX&A^H4umf#b}aV@%G^l*t-Hu&Ne_vKBGK~n>h6qs$-(Zixi#yZLKGt_INw+4{bKrlFQu-MoC z3crhmb(pqVn42bLd+W!vLocHudTs3jfiN~{pPWsWlnMtkp+K%F?SS0#fXaPl!0gnhPp^TUv3{4sYyCo(M?XF{my0k0nEm5&s0;}&~s`v1Vbf= zzf<~J4$~LiB&z|VXXoa}=x5l(Lt1J@E7oMUsnrk+6L6QJ8(0Z*Q{Wo4s6jYGa~@8m zoIxs9{9%B~6f9cQN&rz^QezaLPcL_uTU_olq z7X?+^!+C&}Hd|=;cpn4<6S9c%!ij(WImt;bZDDO$35h^7=!u_;f43&?&#$CZ<$DwF z1x4ZMPcP}Kh%qoID1Sfe;}RFzUL|yu=5Gi@gPtH=0IIZ2u_W(vP3sM2AiBGLUl0t1 zlpeHKi^((FVv+Z8K_MBqE#y#FS@DG(U%PA*57$9CMF;GaDVX{SJ-k-G8OHU!GykN*@mfjqZ}={WVfoU**LI#3?0nxs5Ax!?_EH=q? zU(DKcSaah;sBHjKL*}ZRXy&9I;dXlfKIHJSpq5?(t|ayJImb3I)7)kqLkK`5H^H;4 z!?8+T9gW*-gJjO^8k{P1&oqEmT1(U15Qqj-Le{6LJJ%|8bu{26c-Nr2Isi#e_-C2D z)J#So8UPVF#`m%ZQlGRb6($IV_n>SyL87$i;xk&)+`_>E<)8>e2UrcDB}qxzUHhe) zeM;K+$X}rVvS&V$F!&^%g(>$03fx{Z4>TIJIjKPHrFVTQSj(LtrEH6CuBg(_2>>R! z9^q*1=c2UF9A_ZP%pdX|Pm-W1i66xO&;8D_^*-&MfCe}ir2mSlP=>@-PJb+P*4zu+ zmy$s6MS{i8=Fe=AKLQdgUVva25UcEq<$T)Pcj&OW7Z?YFb`pEW|gFq>+@UT zU@a42BOa+cBM=OYp?-VDJlt$Gs753%``sVmHUesr=5C(;ZMF7mzvt*6#?XKy407!R z{eEeKt-N^G#T(D;=h1Uk46m2Z*jkIRtx>v3J4G;z!kd@@jrfPYunhs>7U?_Md zq$1P8;>*{@3RipK~y;nMK<6*vi@l0Cq_k zb(g8pX-{wy9B68)#oEnX4`4YYASs<7E}NgDE{mMuJ$LTo0>&V%^DAX1yHz>wYqs`D zI~-Wc1RN@UtohHz!MJrXmlo;(&>>Q{klIz1td+HZ6mHa4;7antTq_}gxLh3#z-Wlv zLdjKi`Z`jbOo!#<*F1~mAQaw#rs)9DhHCgQcQr0p5ug`RD~nwvROuFan^UrZb~X4U zUpWi!3qoNZ93F-o9md=ajU2O@EbPzJ|0NIb`BNz)1OP5sJ3m6?7P=b0nK}^X$!+xO z`!UcowHCmYWJG~WXH74Shxb-XABk5AO#ybv4od%NE9EMdsGZz-9nFkyEvg+D=HTk7)|{1HF#S zfGf!eA`H&lNl~-Ug>3mNYxiGy9&P>#|0+8#O>8pL7WvqqM@}>7uG~Te;4CxbmLKL> zUw0*^sdwqn&If)J0{_do-bZx}Aqf)0Do+61xl)`GlC}OEcZ-;s9e0(oMXe{;Z(6AJ zFtvJQO@LXrs#z!z9#4q%k>hDlo{YF_@HsBPKYM{-1FRP)7P~X#;L3mI184~bBUW$B zY4gVvgysyQ%0;8`Wr!~ra!bKL3d2qh-K3FlefB0jj0o#J;t;CGURKxv+gg$Jk1+W( zFDuBwf0ep=xqrz1{m$`q>%9=}P1LI@bIX$sLcYps9vbiJ7=*;gbDm8Njh zOg;#Oia;=&P%>lomMH23x3?* zADa6Lo&1QjwKdJac!Sh4kdbq_I$lAYq^k^%OQ>OF9D|IIu!dUw5^3gZy?MIuHtQAr)d-^8?IS_YNM& zKT0Yxx!TRMGBe<_u8y%#c&0{%P(0THE+jsfTizGzb3pLAPD#xVs0@v?P!;T%LUv+m7KMVa7>*!T!{G;==Qr<}a1aQt zNL-;13jINwav6=a9N7 z_Di*Ha2$H)sM>9VYH*$hf|_7tq_G#t*$#`LgsZNrz#oB-hP42OMN>e@4MbA~3WDJp z3=`=K?z4ck0ER}9VlDA@JUfMgb8_k`J}V(nbNT!AUjP6|k-C()-i}oW;jp`am{+hG zn8W}WE!{V&3t_EU#23H}I0m9&F@QQm^OfXZQ-S({Kt2Fs#DVD2eU}v}2!;#D2MW!z zfPyMb1oBTvLKT^C;0 z@fUa@HTjhE3FGX$1%lxO(#a5&vj-G5_u69C>}xQ#ZQ8HMvpoQymV3* z*c^6fzIKjiCPIus#C8aQ4>x_dr^6M8{N!w`!mSdJd$6gBF3A{T$-XPH8Xy>UARj!M zdtDG0nJ|_2A$0R_f4-+7^H@t0vb>I$Jv*!)0$5GPMw?K=dY4~P#7 zLZKM19P0@8ne-IIML>BXNIG^-wqX1H!|y@;A2*e|b|4yp0jO!&?5hM6Cjv{7K!^pK z($TVeumwcTeTNMLtZ-@eCA8vtS?ApQfW_Jo!ubeXK2oQEQh`%t-$5_{6Fi%J1%W%M zlez%7k_IKMQEv8~l)b?9{tx~eD#qr_YJgw>W;izcl3b^0VVy)UA;#4nQpN8n)VTp^ z^NMH)24GF~K(tT*xx_P0fE#HrQf$gwC`4F$s74?ff&rM~-Rz4=%k_?_a|5xNN$rWK znAUpVK`?+CRB!eb{NfpEB$kT8EeDh|77ChTTC+g(?k3!9&b>fL{2uzafI}3UYbmXW zR``D1s@a8~1FG#C(jca=UN#sM)LQMkPx6L2;$HfJppVPI>kU--kLD!$Cmb;WKXSj{NBWX3+S<*&q{3&tMor-$Y%Ul0%2gsW$_r0c|=r41E-j9rIuO-qDB ze9dY#(B2*K@0?8xb9Vq3?XWN3DhL*EZFi4g-HNWmL1WGb^yg}ZaIK1;Sz5bmFE8t7 zuHAPCK2Hj%(zGhdSvBBPmC0E*RRht=RK0v1vw$@D%tbGUP-uhDT8M|JIMy0pSFtCX zDiBRA2CkL^i=jglE(|Wk&%g6PG)1(giRPzKw6LEVB3M7&KQGO`(`ZW2Y&s(aoxH5T zVjsOzAX*yFpnRnJT-|2jM1$YNY)ssA0W^U;%i@=W0iKs;-_ebP%FKajQMMm=o1^;F zslP~rZf|dw-zUxGIQkhY5Lal+%n1UbeMf}>>%+l9?uVsK-ZkqmtJUmlbB!pdtj+t! z!Iu>f3hm*ZeZyFH(tWoI24*mEeMtaa&`2m~(pM!ES45{xJIcoW9_f&o7_J*>G}!y@ zWAkSz5DXpAszOs5bgMmeid-jNqvr!Rehyy{3bqIo+*=^occ0QUtpJ+RNGL>9t{SI6 zbe=^WH$>BR+dH6E!I(|ghT3P7bXNH(#3DYdj1G!)X70X|Od~?Bbz{gz5WhwEXZ7Wc zM1AK+Yr-n%Ry7cvNt+@5wHM(~QXLBl*-Ooi3R7u{vjWyS++$&OA_)JIA=W>FtXjHw z-#yaoQr4Tp1a5~SH#ze3zn>jW2dS8g<%aX9Z6Me3s_i(ug#atTl#A4CR?(R-&6|4- zt{^CS+rShMrJe?^U|1ZaF*rd{wlC_(LRxBkS1_NsN=ZgkZEDyar1+9S=>h<+6h1@N zIi*li4vXAK(Ia&c)q+!OTGT>@D;QucG(@<7)!J$epK5wvH>+Xix-|s^1cEUFtIzzf zJbL-T_gf@|ly(WY+;<$ofRg>j2&{$fT^LKlnF>a&EGR{;I>19((f{`u{IB$98zysD zV%9>Y^utEUeq)4X`y=?Z&8ALq$xY0{Z>!<>l@Iok&uk$-zrH>J}Zw zhch1c`|6EKEC#rc8Y6JK4D-xdxs*=d_@bZ=hrcf#@u*3xhDg!xd}fK2Xk9-L3SBUB z*}i6wd6kWvHUFcp0KBPQ7^%2MZIsARE1Ows<{eZIleavPlfPPUb52Xj?EG~17 z!nC{Z&IAME3cwAICVOCbs>h>}B0Pgd$Z0(J_WK@IxCRvDm=Yy;nttY?;a2mLrr#rf zeUL8;w@&pYdth8Ny|$S9t_R_uy*_6@ynUv7!DqOSjM)ilu|H!$V9X@=EG*PnwSVC> zwC)1Ypf40b;^IBwTrHoi<+oI4WlA+C@cy#zJ~uaqK(is6=3W$auayGUA>)CGP!Mcc zf9JH=SVGXN$sQOQX|JugAB*-xI#9n9ipm*3^v|=yJ6lP@hLCX&6$ys4@1F0UEe16A zGNe%3@F?5AyoQk=D1oc3iCk`+q9!mdo`sQ0t^KWGrSzN?oB^!gmA-$K7P5DSS*6J_ z^|WRCG{}?%L5l%DrELnDRYZgSQSJw6udQwOVX92!_oIKVf44kene`lEmo)-*MhN@w zaIFSukxx$)E!GwrAB@Ev<55h7NopPavFZ^6WKG#PCG3$IG~uEQB25NL=x;a=sDMXp z!`(;)oL>+Oc6j7i&ypCR%CRnaDK@@8IVC&z(yZ53BU}nyAsCEs&aoaHvu0l>U~M~+ zp6BZ3@D$2-DvT_#w6`w_La=!ZQE2qV#bF99x;Ki}o~BJf1MT&8q~gZyh+yx6!@Cql zvILnX&IZ9?51M@y!suZm{e2&UZTz7~0^ukv+uLfGIvypc?NPa%AsCEtZ1y#UONsHb zlHV6;s}+drG-b%0JwI=k(zNj?VfGaSLx*?;qPV3X+5sylO(?r;$_mLE~s@6Ts>`Hj$SXb`pQe3*9?nN?!(Xz-7ZCxrcO3gs) z``lb#(=+U-olXf~5DXpT(d>&{OFQ6x*?ftDSGAk{oosxxb*aqaFh$LRmiKwG{-50k z_O3xJ=e)M1``D!NA6Xl9sov}>lMdG(($^(~>vSHgcx*dM?HL zK9@ROSh<*4W(Yplr)iFLqj|-gYq0Mp34?D4g(i$raOi!Xt%ZW=V6|Hch9uoxxM|Oy z>SgU?5eRX6a-l+^Of!f`YQ4$gM0mhnsRedn#qs zI}r#9&n#Jo3DvNiZzC9Xsx)tzW9v>PFt2C z5-XH}=#rsQxlK&113L?ZZ?8QwRiIE&{X2Dz_0ILFb}udvQ?}zkx~T)gwZ?7BGIMPM z>mEsgsdlD%cGWd0-kh!SIevhWhY=s7XD3c+MYPp@er*08HOkYHeTqT=XHb~tKsux( z&uGmaVmzbP>$w!keX{P6S|>|+7lI6{H(5=lODz=oy4ROJZqV$ju+iPwg4C{=s@W9a z9|cVZPxv_g1$zBfIze@dtC^e zI}#K#YgW?jbF2?&{k-8q8jIpXd$2$>`(@!~Oeq*fsWkSyPlc&(g{#W|tXMp6PHn>| z75?0Ngkb2AoNni3+6G^$-)G~p{m3_jLK7^W`D4O;2Uq3=T?+;>N-(EHy5v|d^ELZw zS+@TL_tEfh_nqi@d+s}MPPc*~H}?t~tq0A%USE3U15W?nLPN@}v7w!{!^}$LSPcs6 z&@};s!R^*?cY>jyN)ye#UOBx_Vv%@h?KvG4LSZgGCf#>nhpq&}Qr^k}&A!M>OY)Y4U^vi0ozX$|a2~#tC zAX-ule#bT4Trh0P#yOzb7kMe`hyMwP-1v*D;pf+UrS`uN2%S+;p&2~^gnQQ9a$OId z1rQfcX?uuxcnQ-sS1rja-7?)LR~U&7flXhRpPl!kf$L@SI&f12`%a=- zfYH;#W^VSyEnrh^qRne@@PjkBhca{&Y36^K>~2jL*8$Zf0jXRsI|(>41F7<&nHcqj^9 z2_PcjKsqN#&beDBRLmk6A~QDo0ze9TQdtn-)QMnyc}!_fsqL55{^`CnjU#WZn9bCi zgquAyN+22l58^>6Q4}SCXwA7pCk{sP0Z!`^w94k~)30Z;7$P$@`$Bc*;3VyKh&Y~? zi&c{VvVE)cmE#8%bCx4$4<9C+$8hszU!Vgv{l5N`xu_Co>caJ{19LwZ-Y#K8DN+@gjEyhC+3~%oan$Yuej~RyZV~ zAbAfgZfBeXac)Q7GGOi2J|-Q~v0+}#&lb}K3z^ztNO%OIBVys8=;g9N>uH9khD!t1 zC02wXUmEG7UADs#2#TXT1$-TZ7kv<`ir!G z{Q4H*SG$YXT*w#w{}1waDOm80Q4D`FxqL|TNCHC{*`Z_&xwns@F%B|BiVBDvsY5Ft9K!$%i6G!!BA&EvyF64qCF` zV?`zD)iQrEowmmvPWo4NaaecU|?=J_gi7 z+W4zwUzdM3;^$IoAskSpIT*@7bY5fK7hpLifPhA55A~OTb>LyOK)jlL(W=baWGewx zn&Y8akGWtit}_qUl;-^rh@KcLZC_$VSeEU(H2X@|%ROCc9NM|L7p#Oqv2bxFCFGkZ zBHbwn2t?0K4L4AYfc4b^bj`8O8#mYphBrBq(%arcBcn#F& z3v}1l=Rmly(ozN>+sGJrIZn zJ%Ow_Fam3<-@xbe&@{FpEQAXJ(clct3}Y6Al~iP+ zP`&J{R8LWQaHAp`H0SgHXHK;@~0drDELIAGL9O(c600d`2O+f$vv5yPKQa=B7oMPFobgTI|$UizB5^QOD`SDSv3Ij)G2o;bSb0opF3r ztybEKb}W|Zhz~5KwuP3o5hQP3t(r^|N@yEMazocfPN*YNfll??{TUuJW z#ACb^tg^E5!pzLf+c>v*8AukXvdckg~#Ji!~mDk>_@r&Mhtlg<~vXd^6ZY;1f%JRnm%psK2>HY+RZX%EFx z$_N{3YHBVK4{%<>s;jFL2=xcrjA`OAT;D5P=T)vtn$r@7SeFt#>$_MAVigl@qUyd% z9FirDz!LlrZPp_kzD43g9#!{}Ns}hM+||{!LmXgTuzB<5$3xiYqSo%`L-{T|?WNTQKTND^Kmyf8R8`1|JO=Dnv& z_&+Ly6J4`CezW_4Rz+wPP9@n3?`A6kS^56LliP{2KhD780J z-EKJk!3m=SvEGYVf97z41biV6O|B^}E^g`U>}=2vhD#Xzp>qE5B5D>$z()?E&*cpb z4fV%6&c6s^c})?9$PYyO?^K2JQSWI9#DRsGh;^$3Vga?_jVjnh5{Lz8^^QzbtCT=2 zK&vV>I`SkC3n*b(UJPIc%*mGc(@r=@bVg%N;y9HpoZ zgn6#SQt*neC7L^8d3uFcf>9l9V6^*6TUFqj!2`2DFE3B6$SvX#-Uxkl73{L!5| zcODc^sIRZ@K62#9m6WvKi6?j=7-Bt@ot=HtzJ2?;#WT33UQB;ALbi$r_#oKczP`R2 zckI~FBc4K=_C{7#*0pkMDUwrMTZu`kn}uhy4r|e(McEx49XdpGDJ8XC>kd(V1S3IJfAqgPhsLr1!at z@Ed;jXZ-HJB?ZW@uM@2lN4OMh7a4b%sUPrU=-}RoPWhzJkarlgZ?-+S=Os zBpR9I+24s1;sBRz*s7>v;k=!OSR2Xk?@EedDeA!|x{ofz2K`QnhE}y-5=XcyVK36p znH%K|k98Qt+QHcN#>lPEHC-nFC>ov8DWn2ihHcCTJ zsro9>Y)Le96$~ry3DdN+T{Q^2MC@}NKW*G) z;2NJ1i&zzm5@S46fnl;(9Jzq_?Q2cbVyyg4EMmJ#Y%@(uX6|ASH=T(z*WJ1b* z!qI{;y6GnAN=izM?rF5JDp-4a`w^3Ll&*2&7}_zT625u!=6Zw>2thcwNXVOj^|AiV%8g3lcR-g=WnTLLYH#^>3%$DnwAHv zMl51muq#XxVpcyyW*ip#ym9Ezq2ESGzgR3{Td<2w6XFR!#FK7)_yT@P_rvHxS-Ny- z77x{BViDVdO~kY}o(Dl+=!Znc?yOOuoiVO8ripj$+BM(y4ni(QoQ*x`|`+o?;mnBhDY5IdkSYrshh0jJqkLg_CJ+Wd5DHqTe)qU0vN_+OrRG z_^6CBT#HUjeYdHhF+v9Yug{1BT+RF~%gM?4M3fV#t~&Db^OupqI?rQN7N_%Fck>`z zt*cX_oL5y%9>-1<)XTIFiKOGI=P37P#JGA*UoYjECkL@N;LIf+PRW#v>v z*7KaacEsh}`pM(QjWcfKPo}Z4aZ6KElP)h>FtQD~iQli2v=0-%AE7QuMJ&ibEG^;A z-Vx(`7XdQ;=8;9a4?6Coy9Tt1$IPBR`yw8ObWa&SBR(vd)ybP%czTV7URy{f8x+>!LHSah4|oURrJdl^odGNk~qzKDVGCrXxg?W)(? z?~!4xv>l(uf_z*oKwd27H`k23(aB3YL+_jlrWEWo{Vs9A4y1!3T<_=moGWs?MA0a`tl zNrSC>>w3FaVc-~4hx+!5UuI%m>A>FSCEztWH9|L28-8hNS6A2e;^Ja$u-`5LAGr^2 z&+ra%$9;)v7T-oN-lZmBjYp{twR1n*{W{_NWthI7p^cB|Od|e_G>a&Z7PQS;Nk4MA zYIFR<({@r2?gD&k%Q@i&-A7jf)*#RKlIK6?aNX&qO`Ne;SyEDxUsO~y38ll!;nGZh wfB(T$ru_v1fj}S-2m}IwKp+qZ1OgWL4`7|wp`?r;od5s;07*qoM6N<$f_w#0K~#7F?Vasy zBQX#|<*UT4T;(oB>V)S-ycgudUTLk-a3ns!$iD%}2PDoWfK#df!1eyRZC{gUqWgA_ zgBc%WNvWs%cHa&{QtIix-IIfoQbG6a4h~An3%YMtd9eNP0(9T5@nHSo1?axr$%Ds- z7ohugZytPpcmcX^*XiKT!wX=t9X@`G>`BG~QqWh%&dus@#>7(0H-n^9Gi)nJ$|1uy zf}}jfZ5v3+58O9#4?qOX7BoQ|q1%8i&_HOr(*`qyzB7Hmj)dtNCg>Z4>liNZ3f;m6 zpSe@`0yB1*p~ws!rYRIT`*g)3W^N)7 z48f3r3eQ0x8NcH(3?$<hDTIEl;&_6lw0R0;f4hFc)XeWYyfoK=>j=G zvjI&I0^GN74?u|9CXkG$4BrNlamcWZAQ{z|Zw1L{#&k32gxPja u4ogM_X4`!`EEx@$ZTC2QlZ<-geq#mRAng!!qNg7!zL~P zgh;5gKnnt8Qwl9DOG{}>OKA(;U!S*UKB*u5X70Q*bLPyw=a)RWf86`sJ2U6`&VJq( zh(schNF)-8L?V$$Bx0ls9e{{z%$Mz`KGa@RUuqAkKeaox3$;D94YfI?pWlF5NqtN$ zp%zl}sCTJ1skfm#%|ZD|-9WHUH}45W^yj-Up>8D(RXi%|2aSE(t~ zcg+1fO?*qKs^O#rnhOJ)o3`4HVjR&Azu!l zzCnGB+Mn7CVX=amMmTr2c4mJ_9g7Z`SnP%A)JW<<8fO6lA(#T8S$5>hm2jQfO%YL6QGcaI z&@@vK06`drW*G`+mZK3_A2X;?)HoVvC2FKr!z8n_KcFt7wn8Kgt!-|menitOK~2Ja!tt8!iA(N$+%ZGHo;W2x1>t~$?6 z-dhScov-M`pw@!AkhwG53im#6!~Oor>rT|x@cS%v^mH-xC*Q+wuZBrRK|1+1j@kj$ zqlK^A5yn&hr1Zb?H9q8JD1l_#gc?T|Jx`#HgEQ5ZsGj9;P5Bt!&nkGrn_&{Od>yW4 z*$&mA^BB6#;9)b85<~dS6T7z9Bu3yzm#5F^6rCgR! zS5tk_K*TlA`%~8@_fjTmni1j_Zkq)!`b*UNQXVU*ho~daCh%U4Ozvr=l!t!T_oX4V z?pk=Uhf?oJc`T$ZkS15Ry`cA$+}i>v5A83WiYCAd-INY8_iF%6K8KJ_9`wq2AilcoW9Zj^y+(Hh- z&EH%qZm3+8<>Kan!fVQTQG>+wHHxC&ajrCdPN5*Y|I?+M=c%>TnFtA9(6-bBDUQz9 z43j1f3rj}agx|?h&a{M1819P@;Du~TT_MFgYx-bLLgfG8GdWSpG0lVGju6*=Lqnwa zOs-bF!w^|7;%b_r&C_b?Jk*J}IfMtK7}~izLt-=3E8<3<=TP&d7_U-$p)SNt{jU}~ z+9A6Xkxaxj{Xdc7L+)Qwo5MHaCg_T+zG|Q6R;t|(sFenv)mF(fE7D)oDT^cF8*y6} zitw1YBe0Pih?}P=I+Ol;_(a?=dbZfnb(5ipn2_RgUMs|BEyExCso2pr_yPog7(oDt zTd*wBpZT-+*l@-l*+E=y+ltNy1Tj@DMi2nvMyL;p9UXC1zg2`ka-O&~3JXglp#3aj z1c9K>Qi^TD(sicl_RWYJ+C49Ju0=qI5d?&|-G^4*p$^LPdwJWi&r_d)4Lv9}29dJ4 z5iabjggswOky7C^)svey!iENw94=L?F^SvU^P1SuqaeE@ zFvJJ~L)^)UX<|dSa}H_sxAN358X$Q9@}m#<))1p9wF}9!y#qFM-_hBvez+yWh^w+R z4z8s~{SNhaM5^YGaKQ#FoWwHTsg)15TEl3>g2Q0rAJj{TRE#nclwMj(5dhluYn7uXbC)^o!?`mg*ll_!z5oa7`Eo<1?pKueDMriND~Vh zvLrLGQ!6!$Za=UtR86GwKSaa}NhmXGfAMg%5VNNh!)P9%Ly;eCjvhtCH&4Pn`@Cq( zp3HJ?#V~s6&=PM&!+=dh#5bC5$2x^EH0uMc7-leRJnk#%Q`_RUno zh&xR7S>#81?6Enj56#VFiRY{NrczT0Wz{g+YqrepYUk@YMCw9g{8=XP^c?o~X&=Zk zj2?vF4f)Yznr|Rd7rMx6F^u}5Z`KFW(8)T>>hv3RhdA$KlCZKfVIy^8ewJaZE6lNW zsUK?@?3wmvRfd_4NZnY=pkLaXS%%pWHfA7FH`X#p?XzYX#u~lo9YpHJS_Y|Qo@E$o zi1)dO)Qz!Es5TeynAXTIN}Xv7Qi!b1?N|ErZlD zZyVj zoh{r41xd_uAHp@ux_lYob%guF#=B{6W*NpBMxu~m_~7;6oYpJ{qFQu=`!p0sYwE93 zV*@gcHB|h}v^TR1GYdA%aqWH9ENnua=F90Q$27_*2&bm8{?n!|TDDTdtU!MHi6Q0) z|3(i}>G@!9%@9qarv=Y}+tyeHwGX-Z+d2nh{in575^H~WS7Y1}O{S156qdNenNxfF zLR5^Jm3m3aL32jkDK!nb`MU>DizGi9Fgmr|vT7JT=4#o9qYtWO!^kH?=i265SkwHA zFW*HuktXUMa_c#1%T5CwA*J?PQw_t1s7EeeL4I^;;J8*kD6Y?<&Cubf8Q$*`aLvuBd(DV?V)(&OVG&`r z_vvV4YThqGP4K4&Q~wbgngrrX$!MBOyw*O+Gq>=ll$A$`Uv#F}a`b4nwd2?Mp46dp z8mJNeyhb(18v$L-qRFhhZS~M+E%x-qBT*LovH{c_u`!O?K%7~g5hJJ>Ucyn*x@j~Q z!}a3VESiP(HnE}C`$d$6xB|E4cGSE+8g1HIt*-?EAg-p#x(|K$zY&jSNv`cs>MgPH zGSwGl!Y@2q?5X35<|zy*gUG?u^ps20X2{a%EP7od#9ltXld^Ls@eB75dwBA~ARu@- z2T}j-af#i1mg>^U^nN`>LdSn7>-00rzOb95CJ-3nO!G=|dEPs?J+9>nvGasfm8g|p z{1qvd(8&w}MBEgCc7(kRo!4^>`%&+Sohwik;?m%nM><77pom-1_ugk&=l8D_J0DQF zwn60T=p=!IZ=seWvKBs*Imsfecf_Sb{5I^|i=2UnEIs3UU=N2CDG70jR(}Tj`J?x# zn`ri2wRdjA@CS6w;Vwk#<~-^|*qH!dc_75CSrkcho*P8|2Oq~!DW2$j5Db_mYgo%H z;>##Ryu*UlD3?02DYE_ZZkFL>7$`Ekr<cWUh#E$fj@Mh)Ks%{gAPMnGo&?38D^P59RMFljm^-y zpo8G;Zc3di#hW2TJIUw52V&f?T?Ob6c&pn`ms9hl9CUM3^)UyfhM{vB=m5mcppTUj zb|@xH5Fgtvq^6;B8fbHPi-V}iV&7)jlUb58AcFP6gXpvL1Z@g$ZDZ;}DW|{E%`)m# zRE^X;bWQ_p2yg2M>LDqw36kWyE|D7c7Dp(%)UTetzNJy|CcS{QN zT`3=3HW)26ZWoP|fVe||x=~w)%2giIxrVZ)D~i+&3vWwtXPw7U3#2-9R5eOmQu@k? z9itKv*BlI{hEQLi4nehf7c`N?<-K>rtYU%*1#ii_|-dJ z3!+6dX0k@c`W}rk1vL;evNZ>7cJ8E3smm-%tYMmgX1O0p-Q}xu+Z)j^VWZ9B!_-AI z%5(%kG)%Z?^v-Lj+p}Wl`Xm}AJoG5??bL5+l(!KW(J!=rL7HfjmN{NQ4 zAC00gks4(^zUq@`n0nA7#+o%mJG3`a&(SQ6ICdNj;}>maG(7v?s0XN*^2TSWn`oHo z(V9a$ua8i7P|t?iKWT+%m}<~;#F|D&r|~s#&(k!?JhTDPFvZcywfEo>jp~&BcsQeI zXLd=`nw%`6VR}akT8FwiX{Ny-b$&!^3C-*LCR{V4nwh+}sIK6Mkw_#Gi9{liNF)-8 cL>j?=0czHCF{IJ0ng9R*07*qoM6N<$f?%!|#sB~S literal 0 HcmV?d00001 diff --git a/Sources/justMUSIC/assets/images/notification_icon.png b/Sources/justMUSIC/assets/images/notification_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..148459d954e0cac8b8ffc2ce73dfa8cf1af1396f GIT binary patch literal 3758 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 W^jlkzHT?Tt0?e+WjjFD=J^4RY?FL`~ literal 0 HcmV?d00001 diff --git a/Sources/justMUSIC/assets/images/profile_icon.png b/Sources/justMUSIC/assets/images/profile_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bc9701b6967618a146754f3623fe05cfe0fae617 GIT binary patch literal 2283 zcmV?Eleu5veho#nN*qdx;Hnz+d$9iMzoi)u7#Ic5ahqbJ< z62#@bMt7DpM@+##q8nG}VBLVV%5)X*g64#~XcfY!5YeKKZgx<%?8In##{t4?`m&D; z1zVB6BaC?r&fP@{;hK5|;T5W&sS|i{t|<|L=l7MS48rcVpOhFrCS)Xk*8M?gDM?0c z(mP5IA9F3p&!SDYhY5M_Z7>T3?0levX^!hm!A>A!@CyO??0ZRxNZC}DB;x}O&u5ZR z($o;v-fWtkv7UDnOo0}V@fT$RtYt;QbSx>t!dH|TkU1@tlz>#vxD!F%73If2g1nNl z29rv-w}QMklpiZW-q)0XRKiKx{U4McD?#2#-EnOTb8BXmB^HY$xO1voW>3;N$?cBI zPP7JXmt_@{fZm0JY|5jie0gY_5ecSwQX82M@r&}Mri{oojE+zrT^oE#itr3*lE>=Abdau@WH1_JV+0@-<| zMZ*;C5;7_b@UTbNirMK#-GjV$$s}(w5w<$Dpeci}g@ehK>mn>z&h#S=LEcI6^d8X% z;Sr7snga-5Yu(G82it^SA&mLN_kw-+hXxU?5V3~4bCE6`Zc@;kfV_vf%_npVP_sby z;BS{SN6@XNGZkzT*LvWKIHB(!k4*zIbPzVa;N0DhF;=T-6NIg%&E#!CHV_*h>x|;L zh#${32peO>yTJIER}8P`fNi?Q!nA|YNI`fkt(1JHOc?YT*96uk$w_KzWWo5kIxW|_+<*;9*mc~;Vl6RJ2i9!HaiO>i&xwQJJhwPwO~1cTVnvyT z=9oRO9h-s_MNt$*Q4~c{6h%=KMHvIV8JS_7T{*Ec>aG}F92Vow7#38Jn zD;oz*txfszj(Y;@i~rG0l}KC;IPcXMrdJT=zV4@w-e+a>c7<6Y4pnXi#Ab0w*L4n_ zD-2mlVP7k@M1Sx^=^*Q>Va1ABA)hN>L8)+s`hs-$rj%#Bdvh&t0w4aa0u*G+!RajxTc(<JNWjjgTkq3gK$v1y}}{xiczIKj|*V- zHJi^0=Q<)RT0zPX)U>C=vQIdUy_oA-wYjh|!kzB=$BSKGy0Jw}(dwI&EMdhEwHC0Iv`hJxZ4MAZl;ugVB67v4kPm((Pe~m?x5b*}z8_vf zPK6#q+F~<>GQ^$u(;d5{$RK>N=5Kf1QS%4QMjGa*CZUZj1b1#+IZCpVm;5xh+dou6#&ly4Cj#<--TZu9G=Jbsw*QQRYxWG}D{IT< z&e9=3K}r-L54!rbxpO7hQSY|MKo*3q@;gZ_B?T!_fwi)TG~ifXk}=q7*1(zdzJW{vJw~$1Ltx4&dUoG=3vI*_0$WY-%iV8PURJf6%!i^LaZltJiBSnQ9DJtAZ zQQ=0)3qjsTUwE=n#5IC=B(PbJ{??^d9GM+C3QmY~DbE(vKe68P9Y z?v?j6Ugzf5(r}O}X!Ek%W4A3DDHXST$DNxGIlA1fw-Qsk?F0QjKX~uHYfI7i%oXir zYYoMOL&Y zKCOphd6i~!M)B8OE4yjFRq|$Epz)AEqnudCk~ZcY6;y@~7;x*7cs;sExaZgs^w@2^ zsB^_ze7rDG0|rD9ZXejh=;tjPU60+?8(s?Jh;Dmx3~5#TpOIYO$$12 z{fj2NEwO1g+_oV~Y>G|Wr>EZ9dRypy<8w_LBlwyI=08}{?X4P(z}Wx*002ovPDHLk FV1oB!LIVH* literal 0 HcmV?d00001 diff --git a/Sources/justMUSIC/assets/images/spotify_icon.png b/Sources/justMUSIC/assets/images/spotify_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc3427d7b787380eb3dc469483a8d58553e2c85 GIT binary patch literal 4865 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 literal 0 HcmV?d00001 diff --git a/Sources/justMUSIC/assets/images/theme_icon.png b/Sources/justMUSIC/assets/images/theme_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b849765841f1226e28e5e926af37d2e3f631f57b GIT binary patch literal 4189 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 literal 0 HcmV?d00001 diff --git a/Sources/justMUSIC/assets/images/trash_icon.png b/Sources/justMUSIC/assets/images/trash_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f7f8df5529e541cbd1228c016a7566ed43bf894f GIT binary patch literal 3027 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 VG9N~KOd|jQ002ovPDHLkV1nyR!s-A3 literal 0 HcmV?d00001 diff --git a/Sources/justMUSIC/assets/images/unknown.png b/Sources/justMUSIC/assets/images/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..f26069a967ee640a61830994e9dfc44af086188c GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^96-#?!3HFqW}i_7Qk(@Ik;OnUVGw3ym^DWND9BhG z createState() => _EditablePostComponentState(); +} + +class _EditablePostComponentState extends State { + @override + Widget build(BuildContext context) { + return ClipRRect( + borderRadius: BorderRadius.circular(25), + child: Container( + width: double.infinity, + color: warningBttnColor, + child: Column( + children: [ + AspectRatio( + aspectRatio: 1 / 1, + child: Container( + decoration: BoxDecoration( + // add border + border: Border.all(width: 3.0, color: grayColor), + // set border radius + borderRadius: BorderRadius.circular(20), + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(18), + // implement image + child: Image( + image: AssetImage("assets/images/exemple_cover.png"), + fit: BoxFit.cover, + width: double.infinity, + ), + ), + ), + ), + Padding( + padding: EdgeInsets.fromLTRB(15.sp, 25.sp, 15.sp, 25.sp), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("France, Lyon", + style: GoogleFonts.plusJakartaSans( + color: Colors.white, fontSize: 13.sp)), + Image( + image: AssetImage("assets/images/camera_icon.png"), + width: 30, + ), + Text("10 Juil. 2023", + style: GoogleFonts.plusJakartaSans( + color: Colors.white, fontSize: 13.sp)), + ], + ), + ), + Padding( + padding: EdgeInsets.fromLTRB(15.sp, 0, 10.sp, 25.sp), + child: SizedBox( + width: double.infinity, + child: TextFormField( + keyboardAppearance: Brightness.dark, + minLines: 1, + cursorColor: primaryColor, + style: GoogleFonts.plusJakartaSans( + color: Colors.white, + fontSize: 13.sp, + fontWeight: FontWeight.w300), + maxLines: 4, + maxLength: 120, + decoration: InputDecoration( + counterStyle: GoogleFonts.plusJakartaSans( + color: grayText, fontSize: 9.sp), + focusedBorder: const OutlineInputBorder( + borderSide: + BorderSide(width: 0, color: Colors.transparent), + borderRadius: + BorderRadius.all(Radius.circular(10))), + contentPadding: + const EdgeInsets.only(top: 0, bottom: 0, left: 0), + fillColor: Colors.transparent, + filled: true, + focusColor: Colors.transparent, + enabledBorder: const OutlineInputBorder( + borderSide: + BorderSide(width: 0, color: Colors.transparent), + borderRadius: + BorderRadius.all(Radius.circular(10))), + hintText: 'Description...', + hintStyle: GoogleFonts.plusJakartaSans( + color: grayText, + fontSize: 13.sp, + fontWeight: FontWeight.w300), + ), + ), + )), + ], + ), + )); + } +} diff --git a/Sources/justMUSIC/lib/components/post_button_component.dart b/Sources/justMUSIC/lib/components/post_button_component.dart new file mode 100644 index 0000000..96c0d06 --- /dev/null +++ b/Sources/justMUSIC/lib/components/post_button_component.dart @@ -0,0 +1,32 @@ +import 'package:flutter/Material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class PostButtonComponent extends StatelessWidget { + const PostButtonComponent({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + gradient: LinearGradient(colors: [ + Color(0xFF141414), + Color(0xFF272727), + Color(0xFF141414) + ]), + borderRadius: BorderRadius.circular(10000)), + padding: EdgeInsets.symmetric(vertical: 25.sp), + width: double.infinity, + child: Align( + child: Text( + "Publier la capsule", + style: GoogleFonts.plusJakartaSans( + color: Color(0xFF474747), + fontWeight: FontWeight.w800, + fontStyle: FontStyle.italic, + fontSize: 24.sp), + ), + ), + ); + } +} diff --git a/Sources/justMUSIC/lib/components/profile_component.dart b/Sources/justMUSIC/lib/components/profile_component.dart index d5dda14..d70adb5 100644 --- a/Sources/justMUSIC/lib/components/profile_component.dart +++ b/Sources/justMUSIC/lib/components/profile_component.dart @@ -5,8 +5,11 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:justmusic/components/statistics_component.dart'; +import '../model/User.dart'; + class ProfileComponent extends StatelessWidget { - const ProfileComponent({Key? key}) : super(key: key); + final User user; + const ProfileComponent({Key? key, required this.user}) : super(key: key); @override Widget build(BuildContext context) { @@ -26,7 +29,7 @@ class ProfileComponent extends StatelessWidget { height: 10, ), AutoSizeText( - "@MelinaShow", + "@${user.pseudo}", style: GoogleFonts.plusJakartaSans( fontSize: 15.sp, color: Colors.white, @@ -36,7 +39,9 @@ class ProfileComponent extends StatelessWidget { SizedBox( height: 20, ), - StatisticsComponent(), + StatisticsComponent( + user: user, + ), ], ); } diff --git a/Sources/justMUSIC/lib/components/search_bar_component.dart b/Sources/justMUSIC/lib/components/search_bar_component.dart new file mode 100644 index 0000000..0aa0a3e --- /dev/null +++ b/Sources/justMUSIC/lib/components/search_bar_component.dart @@ -0,0 +1,32 @@ +import 'package:flutter/Material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:google_fonts/google_fonts.dart'; + +import '../values/constants.dart'; + +class SearchBarComponent extends StatefulWidget { + final String? text; + const SearchBarComponent({Key? key, this.text}) : super(key: key); + + @override + State createState() => _SearchBarComponentState(); +} + +class _SearchBarComponentState extends State { + @override + Widget build(BuildContext context) { + return ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(20)), + child: Container( + color: searchBarColor, + width: double.infinity, + padding: + EdgeInsets.fromLTRB(defaultPadding, 16.sp, defaultPadding, 16.sp), + child: Text( + widget.text ?? "Chercher une musique...", + style: GoogleFonts.plusJakartaSans(color: Colors.white), + ), + ), + ); + } +} diff --git a/Sources/justMUSIC/lib/components/setting_part_component.dart b/Sources/justMUSIC/lib/components/setting_part_component.dart new file mode 100644 index 0000000..4541391 --- /dev/null +++ b/Sources/justMUSIC/lib/components/setting_part_component.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:justmusic/values/icons.dart'; + +import '../values/constants.dart'; + +class SettingPartComponent extends StatelessWidget { + final JustMusicIcon icon; + final String label; + final bool important; + const SettingPartComponent( + {Key? key, + required this.icon, + required this.label, + this.important = false}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Material( + color: important ? warningBttnColor : settingColor, + borderOnForeground: false, + child: InkWell( + onTap: () { + print('InkWell was tapped!'); + }, + splashColor: Colors.transparent, + highlightColor: Colors.white.withOpacity(0.08), + child: Container( + width: double.infinity, + child: Padding( + padding: const EdgeInsets.fromLTRB( + defaultPadding, 19, defaultPadding, 19), + child: Row( + children: [ + Image( + image: AssetImage(icon.imagePath), + width: 13, + ), + const SizedBox( + width: 15, + ), + Expanded( + flex: 10, + child: Text( + label, + overflow: TextOverflow.ellipsis, + style: GoogleFonts.plusJakartaSans( + color: Colors.white, fontWeight: FontWeight.w700), + ), + ), + Spacer(), + Transform( + alignment: Alignment.center, + transform: Matrix4.rotationY(3.14159265), + child: Image( + image: AssetImage("assets/images/return_icon.png"), + height: 11, + opacity: const AlwaysStoppedAnimation(.5), + ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/Sources/justMUSIC/lib/components/statistics_component.dart b/Sources/justMUSIC/lib/components/statistics_component.dart index 436e37c..6324318 100644 --- a/Sources/justMUSIC/lib/components/statistics_component.dart +++ b/Sources/justMUSIC/lib/components/statistics_component.dart @@ -4,10 +4,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:google_fonts/google_fonts.dart'; +import '../model/User.dart'; import '../values/constants.dart'; class StatisticsComponent extends StatelessWidget { - const StatisticsComponent({Key? key}) : super(key: key); + final User user; + const StatisticsComponent({Key? key, required this.user}) : super(key: key); @override Widget build(BuildContext context) { @@ -18,7 +20,7 @@ class StatisticsComponent extends StatelessWidget { child: Column( children: [ AutoSizeText( - "114", + user.followed.toString(), style: GoogleFonts.plusJakartaSans( color: Colors.white, fontWeight: FontWeight.bold, @@ -38,7 +40,7 @@ class StatisticsComponent extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ AutoSizeText( - "5", + user.followers.toString(), style: GoogleFonts.plusJakartaSans( color: Colors.white, fontWeight: FontWeight.bold, @@ -58,7 +60,7 @@ class StatisticsComponent extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ AutoSizeText( - "34", + user.capsules.toString(), style: GoogleFonts.plusJakartaSans( color: Colors.white, fontWeight: FontWeight.bold, diff --git a/Sources/justMUSIC/lib/main.dart b/Sources/justMUSIC/lib/main.dart index 49cae25..f2a3bb2 100644 --- a/Sources/justMUSIC/lib/main.dart +++ b/Sources/justMUSIC/lib/main.dart @@ -1,13 +1,15 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:justmusic/screens/profile_screen.dart'; +import 'package:justmusic/screens/post_screen.dart'; +import 'package:justmusic/view_model/UserViewModel.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { + static UserViewModel userViewModel = UserViewModel(); const MyApp({super.key}); // This widget is the root of your application. @@ -32,7 +34,7 @@ class MyApp extends StatelessWidget { primarySwatch: Colors.blue, ), home: const SafeArea( - child: ProfileScreen(), + child: PostScreen(), )); }, designSize: Size(390, 844), diff --git a/Sources/justMUSIC/lib/model/User.dart b/Sources/justMUSIC/lib/model/User.dart index f9a7607..f601867 100644 --- a/Sources/justMUSIC/lib/model/User.dart +++ b/Sources/justMUSIC/lib/model/User.dart @@ -4,10 +4,14 @@ class User { String _country; String _mail; String _pp; + int _followers; + int _capsules; + int _followed; List friends = []; // Constructor - User(this._id, this._pseudo, this._country, this._mail, this._pp); + User(this._id, this._pseudo, this._country, this._mail, this._pp, + this._followers, this._capsules, this._followed, this.friends); //Getters and setters int get id => _id; @@ -35,4 +39,22 @@ class User { set pp(String value) { _pp = value; } + + int get capsules => _capsules; + + set capsules(int value) { + _capsules = value; + } + + int get followed => _followed; + + set followed(int value) { + _followed = value; + } + + int get followers => _followers; + + set followers(int value) { + _followers = value; + } } diff --git a/Sources/justMUSIC/lib/screens/login_screen.dart b/Sources/justMUSIC/lib/screens/login_screen.dart index 128ea86..778d76d 100644 --- a/Sources/justMUSIC/lib/screens/login_screen.dart +++ b/Sources/justMUSIC/lib/screens/login_screen.dart @@ -17,7 +17,6 @@ class LoginScreen extends StatefulWidget { class _LoginScreenState extends State { bool passenable = true; - final _focusNode = FocusNode(); final _formKey = GlobalKey(); @override @@ -97,6 +96,8 @@ class _LoginScreenState extends State { CrossAxisAlignment.end, children: [ TextFormField( + keyboardAppearance: + Brightness.dark, validator: (value) { if (value == null || value.isEmpty) { @@ -147,6 +148,8 @@ class _LoginScreenState extends State { height: 18, ), TextFormField( + keyboardAppearance: + Brightness.dark, obscureText: passenable, validator: (value) { if (value == null || @@ -430,6 +433,8 @@ class _LoginScreenState extends State { CrossAxisAlignment.end, children: [ TextFormField( + keyboardAppearance: + Brightness.dark, validator: (value) { if (value == null || value.isEmpty) { @@ -480,6 +485,8 @@ class _LoginScreenState extends State { height: 18, ), TextFormField( + keyboardAppearance: + Brightness.dark, obscureText: passenable, validator: (value) { if (value == null || diff --git a/Sources/justMUSIC/lib/screens/post_screen.dart b/Sources/justMUSIC/lib/screens/post_screen.dart new file mode 100644 index 0000000..641bdfa --- /dev/null +++ b/Sources/justMUSIC/lib/screens/post_screen.dart @@ -0,0 +1,60 @@ +import 'package:flutter/Material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +import '../components/editable_post_component.dart'; +import '../components/post_button_component.dart'; +import '../components/search_bar_component.dart'; +import '../values/constants.dart'; + +class PostScreen extends StatefulWidget { + const PostScreen({Key? key}) : super(key: key); + + @override + State createState() => _PostScreenState(); +} + +class _PostScreenState extends State { + final scrollController = ScrollController(); + @override + Widget build(BuildContext context) { + return Scaffold( + resizeToAvoidBottomInset: true, + backgroundColor: bgColor, + body: Container( + padding: EdgeInsets.only( + left: defaultPadding, top: defaultPadding, right: defaultPadding), + width: double.infinity, + height: double.infinity, + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/background_justMusic.png"), + fit: BoxFit.cover, + ), + ), + child: Stack( + children: [ + SingleChildScrollView( + controller: scrollController, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + SizedBox( + height: 150.h, + ), + EditablePostComponent(), + SizedBox( + height: 40.sp, + ), + PostButtonComponent(), + SizedBox( + height: 40.sp, + ), + ], + ), + ), + SearchBarComponent(), + ], + )), + ); + } +} diff --git a/Sources/justMUSIC/lib/screens/profile_screen.dart b/Sources/justMUSIC/lib/screens/profile_screen.dart index 9c544b5..a98b6e5 100644 --- a/Sources/justMUSIC/lib/screens/profile_screen.dart +++ b/Sources/justMUSIC/lib/screens/profile_screen.dart @@ -2,8 +2,10 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:google_fonts/google_fonts.dart'; - +import 'package:justmusic/values/icons.dart'; import '../components/profile_component.dart'; +import '../components/setting_part_component.dart'; +import '../main.dart'; import '../values/constants.dart'; class ProfileScreen extends StatefulWidget { @@ -57,16 +59,75 @@ class _ProfileScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only(top: 68.h), - child: ProfileComponent(), + padding: EdgeInsets.only(top: 68.h, bottom: 40), + child: + ProfileComponent(user: MyApp.userViewModel.userCurrent), + ), + Padding( + padding: + const EdgeInsets.only(bottom: 12, left: defaultPadding), + child: Text( + "Compte", + style: GoogleFonts.plusJakartaSans( + color: grayText, + fontWeight: FontWeight.w800, + fontSize: 16), + ), + ), + ClipRRect( + borderRadius: BorderRadius.circular(8), + child: Column( + children: const [ + SettingPartComponent( + icon: JustMusicIcon.profile, + label: 'Compte', + ), + SettingPartComponent( + icon: JustMusicIcon.history, + label: 'Historiques des capsules', + ), + SettingPartComponent( + icon: JustMusicIcon.spotify, + label: 'Lier un compte Spotify', + ), + SettingPartComponent( + icon: JustMusicIcon.trash, + label: 'Supprimer mon compte', + ), + SettingPartComponent( + icon: JustMusicIcon.cross, + label: 'Déconnexion', + important: true, + ), + ], + ), ), - Text( - "Compte", - style: GoogleFonts.plusJakartaSans( - color: grayText, - fontWeight: FontWeight.w800, - fontSize: 16), + Padding( + padding: const EdgeInsets.only( + bottom: 12, left: defaultPadding, top: 40), + child: Text( + "Préférences", + style: GoogleFonts.plusJakartaSans( + color: grayText, + fontWeight: FontWeight.w800, + fontSize: 16), + ), ), + ClipRRect( + borderRadius: BorderRadius.circular(8), + child: Column( + children: const [ + SettingPartComponent( + icon: JustMusicIcon.theme, + label: 'Thême de l\'application', + ), + SettingPartComponent( + icon: JustMusicIcon.notification, + label: 'Notifications', + ), + ], + ), + ) ], ), ), diff --git a/Sources/justMUSIC/lib/screens/registration_screen.dart b/Sources/justMUSIC/lib/screens/registration_screen.dart index b686e48..679fd11 100644 --- a/Sources/justMUSIC/lib/screens/registration_screen.dart +++ b/Sources/justMUSIC/lib/screens/registration_screen.dart @@ -83,6 +83,7 @@ class _RegistrationScreenState extends State { left: defaultPadding, right: defaultPadding), child: TextFormField( + keyboardAppearance: Brightness.dark, validator: (value) { if (value == null || value.isEmpty) { return 'TODO'; @@ -120,6 +121,7 @@ class _RegistrationScreenState extends State { left: defaultPadding, right: defaultPadding), child: TextFormField( + keyboardAppearance: Brightness.dark, validator: (value) { if (value == null || value.isEmpty) { return 'TODO'; @@ -157,6 +159,7 @@ class _RegistrationScreenState extends State { left: defaultPadding, right: defaultPadding), child: TextFormField( + keyboardAppearance: Brightness.dark, obscureText: passenable, validator: (value) { if (value == null || value.isEmpty) { @@ -221,6 +224,7 @@ class _RegistrationScreenState extends State { left: defaultPadding, right: defaultPadding), child: TextFormField( + keyboardAppearance: Brightness.dark, obscureText: passenable, validator: (value) { if (value == null || value.isEmpty) { diff --git a/Sources/justMUSIC/lib/values/constants.dart b/Sources/justMUSIC/lib/values/constants.dart index fd0d761..4940a15 100644 --- a/Sources/justMUSIC/lib/values/constants.dart +++ b/Sources/justMUSIC/lib/values/constants.dart @@ -17,7 +17,8 @@ const bgModal = Color(0xFF1E1E1E); const bgComment = Color(0xFF222222); const bgAppBar = Color(0xFF181818); const grayText = Color(0xFF898989); - +const settingColor = Color(0xFF232323); +const searchBarColor = Color(0xFF161616); // All constants important too us const defaultPadding = 30.0; diff --git a/Sources/justMUSIC/lib/values/icons.dart b/Sources/justMUSIC/lib/values/icons.dart new file mode 100644 index 0000000..1cd01d1 --- /dev/null +++ b/Sources/justMUSIC/lib/values/icons.dart @@ -0,0 +1,33 @@ +enum JustMusicIcon { + profile, + spotify, + trash, + cross, + history, + theme, + notification +} + +extension MyIconExtension on JustMusicIcon { + String get imagePath { + switch (this) { + case JustMusicIcon.profile: + return 'assets/images/profile_icon.png'; + case JustMusicIcon.spotify: + return 'assets/images/spotify_icon.png'; + case JustMusicIcon.trash: + return 'assets/images/trash_icon.png'; + case JustMusicIcon.cross: + return 'assets/images/cross_icon.png'; + case JustMusicIcon.history: + return 'assets/images/history_icon.png'; + case JustMusicIcon.theme: + return 'assets/images/theme_icon.png'; + case JustMusicIcon.notification: + return 'assets/images/notification_icon.png'; + + default: + throw 'assets/images/unknown.png'; + } + } +} diff --git a/Sources/justMUSIC/lib/view_model/UserViewModel.dart b/Sources/justMUSIC/lib/view_model/UserViewModel.dart index bea7efd..2aaa1fb 100644 --- a/Sources/justMUSIC/lib/view_model/UserViewModel.dart +++ b/Sources/justMUSIC/lib/view_model/UserViewModel.dart @@ -1,9 +1,15 @@ import '../model/User.dart'; class UserViewModel { - User? _userCurrent; + User _userCurrent = User( + 1, "MelinaShow", "France", "test@gmail.com", "zezrzrzr", 5, 12, 114, []); + + User get userCurrent => _userCurrent; + + set userCurrent(User value) { + _userCurrent = value; + } // Constructor - // Constructor UserViewModel(); // Methods