From 498aa7d9557140b4639c2e996e23db8cb3941ed0 Mon Sep 17 00:00:00 2001 From: ElEgEv <112943269+ElEgEv@users.noreply.github.com> Date: Sun, 12 Nov 2023 00:39:21 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../8.0/executionHistory/executionHistory.bin | Bin 2596750 -> 2596750 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes compose/.gradle/8.0/fileHashes/fileHashes.bin | Bin 297969 -> 300419 bytes .../.gradle/8.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.0/fileHashes/resourceHashesCache.bin | Bin 90546 -> 108329 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes compose/.gradle/file-system.probe | Bin 8 -> 8 bytes .../ulstu/is/pmu/tank/composeui/TankList.kt | 106 ++++---- .../java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt | 2 +- .../ru/ulstu/is/pmu/tank/dao/NationDao.kt | 2 +- .../java/ru/ulstu/is/pmu/tank/dao/UserDao.kt | 10 +- .../ulstu/is/pmu/tank/database/AppDatabase.kt | 31 ++- .../java/ru/ulstu/is/pmu/tank/model/Tank.kt | 5 +- .../is/pmu/tank/model/UserTankCrossRef.kt | 21 +- .../ru/ulstu/is/pmu/tanks/composeui/Hangar.kt | 239 +++++++++--------- 15 files changed, 221 insertions(+), 195 deletions(-) diff --git a/compose/.gradle/8.0/executionHistory/executionHistory.bin b/compose/.gradle/8.0/executionHistory/executionHistory.bin index 9202903f157685ecd26f37b53f2ab341d1fd9aff..36d4c8b69fbb30b97247fd16602fb35c05ce0979 100644 GIT binary patch delta 22287 zcmeIac|29!`!{ZJ4vy(;oP)E;Oc|16XjIZ%nxuI|(WFSDCK@F&bYfNJs3aNVm_v#r zp)@Bnno2VbJZtSuxzGLiKHt~x_j;b+@1O78Yu~TyT-W;=*4k^Yz4p4UCFoi-2trrd zA$y}erD9;WcZ7%a+T9yAZSmT@+ii!N`=)IhtzEaQ+vU04+f|JI&jL1mW||1nW^*&! z?YT_xbK>y87ENd9Yr?e2jCC02Kxp5s|9+;MBlkgIH+AOllzTALh)@-bkJJ`4#w)>9 zCLESve0(9Xq{wLGa@C_XJKmd{n;dJ1V&ChWO+e;`5$ z_P$qQ!SO<#ub?>ILSTMDmPo8CI$?ZG!uwv{7K`r{f&X-j5G=SVrw=~oqAVe;xUVo~ zij3aymfAAOb(UrSFfW*MktHa&m_dNxYd2&%f9lPM?fCI4*H{l8sF7EOu^n1wnb#6i zfznpxK}}kYdGhz3`|-mMl{^Q9f{*94GGmgArQzD&$enMAieOcyygFZ>Z?@XqdFxgQ z;%ib_*b;}udwv`|d+U0ae=!+FWE)uYE5gv|zp zFzyuF7%Ry^y`{W^(CIXrgdfmPeSHgk6e9lDuWf9UADEHiZfi62MS%I$!LLEN0OXip zWm#Y$xS5%*W6`hFuVS5e@z}gJ*~>>KOmD4fDAuBS3$@GuDb!v~Rk!R1uAHLKJK6hU z!xvWfhhFF{zk7;Zc% zzarzV*+-+bFB%mE=7nx>UldPDaP+`l+$J;CzOFX+XlgsLS#$c>pb?iF9_A%MK95j^ zHD}mE;IL?(RA%?JI0+);U1L*P`SHgs6T7x1gDfT-@5)paq+R6*>aRx-6L)QKkhSJ` z1^l-7;1|E}y}-BZ8sYuiMeP1X-8-v8XBOTABcfsGcBU$vy9CH*ZoT0K2&pG~#m9QH zr*7P(C%wPswFgvO%TzsCevg>4GqzlJF(SbRH*7+z54r9LtEmbK-K z;5B*EX5ltJCoZqoH#|-(oxC9^u*1*Ldj}q9s?f=qAq{7`F|#sn-kB;zX9J~m_tQ>j&LX5?g9MN!=BiH-2sGDaOq{bi#@fQo0}qIif8>%v8wR*(4A=GW z0-?E#f}#d`AT0U^?Qvo6nYD3l&2irG8z;Be-+(&3JY5*;rlbh(%8}uJ6#k5IUV*pS z+q)yL<=kL79_&z<{#Sv4>{>!Xk~~Rik$<1Ml*ylMyf;@ajEmR5yzPS7ID7+XC*t~i zL3-dps4b&lL|j{#;ZSD(vuk%Y3oPw)QiR2AYzn3n?#E?9X;VNofYAH%SpRjQ*WnuY zM*sVhhUQ^z^|_bN!7U5f%Fy!%Pe+EH0r3C(U1{_FG$);yEYa&S+-^$VlKWQ;E?xcO zlK_@5^an2kMw)|mBL9H+#01wTHZLbgv&OaThVbJ@4i%a-bdpt&gdV?mNkT6R&;^Jv zy|A#h$q6%Gs_1U7vfeJh9rRkb${K`e5JRmEd+(c^I?^^@(@9}zNdk0;VGj`o@7HRU zB0PsbvErp^pLd#8;x+nNNi{rhRO=oQ;4D0QYp7SE&*RlrwF%3TAy@|P5lQ(ex@uE) zsO@&RP+_|un84g2(BqiaWn#{t_O6^Otj?b%b+hN(Hkw3>J}d{9iHp5fYx2aT&dv68 z`b6wlvWyme6KI7&!Wqc(tosMWhSe!#&2;X%mp>bfx2L-Y(7?y1`hmmyfz?B{zMT4M z!iHU|O9zSXc6~_$e+Hm9rX@`-Gi63*+Aa7JIj1cCBQ0tOM4~a3wLurj%Ab{hE+7aH9t-8p7CbuEd}m2h zl;X6K7Fel^QmV}RafZNJU{$JDhY3G2AY6)**R$5juYI+bBp8%V#05xh& zVtWFxR8y3$47C{BVP3ss<|3~q@wbmDR3khP2#nFFuy} z9VeFhl0tQHq0(1boW{8Epl-W5D*Rv0xQ&>&HSBGxHE}g-mxcNb|GosNSUZu0h@w= zCJZrBkP_Ys0zv>{1O0)F};c0fJDV zI&ir_x&Ae4Tu$Dr&WZlX8iC8VGs^R^fZ50Imb*9L$~o_k;o^#-aAAUobQj zEMxQ_IqbyLJ50?v3G6vj*4|w=YX|p^<`V;X;gKo+&u~a7CxMGp%m-|(2JRDpX>gSQ zs51PqrQHHBkF%oib-;F=K;iqL2aTmO&OD^AJ(!eUh^W-7B}AR!+2e z`p}}zD?0Lu{Q_3V_oqGi{2Vwg3=CnEy!z1tH-rHb#)H?0I)kYbn5w|kT}*w)R1L-% zh9jy9^A=z#5L1T{wF2v+t{DVQ_Pbs+eUqm4QQ=T4b<$Orv+TL3fxN05< zn(e%8y~pN1fjY{-*%LCdtDYXOiCFl!cA+m7Xa$smz=&}JI~xUoDdQdvWj&%~FfX5< zs0hNK;$=1mWw7*M+#P_~z%G2HFf?e483h15)+q=)G*$;767Bld2C_HdUE?pp14w_8Fkc zG0}6){y3P;+CR=gig`?`_$`iN^cg_>j>eJR&ZvGGHWk^THa+b`{SNgbr*c4L%#D#@lAm`sP5p zlWCT9O*1{FLi9l3f~~Gze+G%|qX&zphN%B?+#EIKmG@Jv%aK97`TQysc>XLfWTc^A z@a|clKK1yghN*`R$G>Ucmyx!?@yU&13fH9zPW73iyO`fMy*)mZEDgJ|cxzdAYndA= zJ2GgvHsnVjvq{+OvItV7Mx|iS?G6*$(qS5lFdGt^%E$mI|orhB4*6}h|a zu3YKXJLgShRvqKcXiGSOCa!$GuK_p<4@3bjY={DqK3y-L@J%;JFSPjTJ3KypWcN`D z^sX3y5IaxLNzU7xU7WYN(l@L7fzwTmu@5UZr@bi8ReqHI0l7jA-~c!P+SkLhM)9aO zW$V|ze!KgL^`*q>P3 zA4LOwMi&Y+JO=17-s1^&a16RFEtpym1I!uGNFDmefKf8{srDoq;SO5KRe{YhfXg_J zr~98VXzD&j`!Ry%Dax8~SuC2mU*pd9hy_}t@ww+8a^AL`SWv(F(SEs+Ut3#n-xOPe zIB55Xtqm(;(Ja-0n6M!h3}cj`*8o(E17jG!a3FKzz(~d~EDekUx{Tx4Y(^Z4`~{|- z#G!fj7p7R}P$Q1ufX&YVgV}!6%{r|D{PB}Tce(PIlJ=;iX*M5TPP`y{>HEshNDtj4 zOAvrD_S5G; zm-oe=Tlq{j{YkswB*b#-4LXp%sU%^>=;_*}49necPdu0|^Nou28G+V6cCWPI`*^^W z>87IS<7vQ<7Pb^LPXJ0X)zq7`kwB{fyH_0OlmK{)V>tMI38;gqW~3#6;f$NOt6LL* z0jrAANK6!m&gap(e*AgBlln@TKLz>ENHu{|8yEVjD=<}iPiLxyr~WEE+wQ*aQq!|5 z_$KA^Pg5w^d7tFM#_5Vo`1Cv)1MT>>eK-#$OXHiG&u`SB&Epjw+;jmUI&oA7E+E85 zs)03XP$v_)^KF-g?=Juq={J=5Kvnp$h-(UKinuJb(PI)e$nC1H-eaw|+|cW|%Pq=w z&L9|2D~;%fyud{;qFsC$|AaA-@JnXN8jjoBOmbEC14J#dr`+PzXX(| zK2p)rs^K?z40z!Za{CZ>GeRO~1LV+Cf{=m}lYo*m?gcbw>%#GY0JUI0Qvn`KLW=jW zVnh;}uWChG`jO+?ke^Yf(2G1r0oEo1L#Qo_ zVlqlb59I5jgFVnT8BCO_C_IP|$KuG6MK70q!!cK2=Lp~e_Oqhs-j2qZSK?<0{Or-o?yUw+SHmOK*45`7n zsc0U_$KeL2qNapk48IF%r-8xYY3QkVRDeW-(ojn(sR)bNP$vyN03m5;Ia`ixcVqx# zn5qgS;nOtq%soL0`TSUAkOm!I@=T#&I%>!@475#0H#miANE)oo1cPCAI^anc&`q<1 zo>}M?)QslHz+R*yok{T%Ct!bua6$$O<{dV(Dgy;`mufN{j3KPS!Xn%V6wG9qHmVU+ z2s(NwIJZm`>wDag1DR-Of5KL(Gm(|+6wud-cHNl?&{pqN^h^~{{4P7%_2H|?I*ta$ zT?Mv`D%@@ESwI(hniKL+ISY-249rXK<1yfzETmC}-5{JDBNgi+sjW;I)rYU-Kr9UX z&eMP@*{E}xaAd=>!8pbltg4`o zwrQx$CBf)PTOaOv@sJwyor?cisqdTT;+SvS4|e-#BrYG_?I{nv^5#IZWonqMp%K21I%$NLWTR3*VhD@)<+Ur#cm`+NP=nA0qQo%~WisVQPl57L+eQ4ylh&odVRx zChU4q0cs=u+JO5D(6R_W8Ze;%3|$_4dcoWU+S{~lJqg@6VXw&)6hcyb($2X@W*#54 zNZowq@G;X6YhmoVRW=zTmu%{g{WSE7aT#Kj?{%@+S+3HYc(Q7Pf7cCJ#2V)Mb^o=a ztG9kU-LN)icHsiy&_ZA&F24IH+)|=x37v|-H}O5`(0PZdx&+vB7y6cIT7|D*O@JZC zbs4ZmO2!uY7K4fOPv0Aw+xvwR|L`T@{tbp`qbfjmgw#EC+w z!B;$0(+(IN9qh)E7z%}+hZzMDoTrvYre41JB_iNk-A}3N?*b4sav0<VU7R->GsQBwm&S6Tf5XIQ7=YQAon8DI{dHK?2Uk@LY zXhgT+vE-N*BTq%YX^RGr@^+R9gO{TiCwOCK&2We^@zj6^1}{jPyOSA)ZSaG$PeX@j zhLH~ClHVbY^qU(wDMt@CPdt71`ab4^)qV^hCT1oM-Sy-L!PE#wsBn4=!^Zc&?NV?M z#%ePs3){7r9^;gL{J3~%{I~h`k1qV4dfO-7m`>RVVv+_4FRf%A0EFe&GY2<#l~VpQ-6|yRl%xr@#3ip@a+5 z4Gs)>2u)m+FNh`i%aBPf8HGtqksLn5VsU*y4(6ovE|T|6>wB@-P!6 z0UpMTuG5;dRPVi_s^^()wpw%&;PX+YlhMC-iMNbl%z~Z`OcJi@RhNPuR*Fi(muXBB zQ=+I|wm$XJr}*8!oP8Q9Bb4av@Xp;@@-Y7h8AHr?X>*(ZTC>LL%j}r*bsB~^pP&wj z2IggAe73x;>FLt&*WINtWBohz;dno?jEGxZQ>3!QJxuplwes}xqf0PX9TvL+IXLDR zd4Xt6U-~t8(iGjEt10WJ22Ps+KOQ5kVR|F;5uy31ZHl}XQ6w~4nD97dxjJkbO^2!BiclJ|Rlx9-{L39V+Oh zAG1%33&*`;Dvf$TF;g_bsef+dQHfEpe`QymQ1IVN0ffc#(AzHt*60ecC8;g0bnP!Y1n6k&zZ%pm`L#1M>7xS7Bwc+459BH5y2ou?<>x)V> zuXBXLpI-*T2JSNTXR^fpmGQ}Vi$6y)@HV2(F)fY;dV`2$f38x98U=)iTMjsAfh3v) z%BBzpl|+16(Rm!Pe`SVpDf};a5qw{QNQ@9o5am;N0g3>%Y3ScA!oEb27$KS{Dx?%b zamclSRHH=mMWqztgE~SuI0Mckv45qFZc>QvYX98b>u-{1CaD6U;m5a3(=l(_@CW}L z0)+o_ug$z)RW!%+g;FTjM`O`8REvx5fM}}eD}^|$i-JYZ5?Ua=V=6J(mz=rgg z`XFMZmdw>YksUa*$8!NY-lOW`3B(i4p9#mdF`a>0z%5_DA6~)4mlbZWj4N*~en|!S zw%#whorx|AuBlqt&{#8#nCm-qBYT#JDPU6^1IR ztHBR4>KbtT799ezw&*y+y|U`(gxA!R6UBwmF4CLo2=}hZK^^NoChm01p077d^#-0( zajAt8Y&b(6CU$Cl8e-_!QC9b0_T}9h?_7k%xoD0?bGS78Y0Wx9Ommnjb-(z7^PI;a z<+m6_gD_+`YdIihmCZ7;DsU5vWo{@cZA;FEO%e1=Ed@14vI2>=)DZi<8j+t>Rw?uC zu0M*yQ$G&|TS-Yml)ID@`b3c<7)objSO3~zeFH8%+_vcC(A`xaUH~4dQ#A|1*<)Eu zaiZnW@t)-0Q*FPSJ~*`CxAQTmm0>SbDfqAmGrBonlK?9X#Jtj)hHoz{!ELq}c}N9nNCJ zYj~Eur#4mG>}8{`yG`0pNLhNY0BS8}aZSZC=THAsqIsRUdib7c_qBH?P|}nj{7JBa zc;jUG6A0I@af*Csbp0`OTFlb(IXu5doG86TRW{IzvdpZ&I+-v$>^PP za&Q|d-s1T5w(kTv#5x&M-g>&w@S*9X7aQ&!+ejjo<2~kx`I^ga2ivV!^QQT^)_cTD zSUWFkr0$1Z&#MkUXVuMh5Ps}Y*As^xi&$g+rw{*M_94_>!qOx{>dS4MtM}+zklWt~ z(r3ShvzM@P{-;m>&-N+NL5_#5%UDN&m|yE$7P@56C5tXObjb@_=PK;FZZs=Y49wj1 z-`8f&go-TL`9gvvYa=c$6o-5rC1dC`lD$9}sme}qAw+8=po1a!TbXH_%8`OeyV=!* zXu-rloC=)X$qvUgmk^arNGVAWqJ2aTfBgc7Ii6e^-dsRt%`BgxZ1ZQmucKSV$0}B^D5zV2=bAaP$dwu`0DyCqal7 zSWtnWGOn0l_6y;VU^a_Eh}KUC?F4KtLrJti0<@sA(D^VVf=9qPkj;cy3)#WAHI{^E z#ROGoCWy@&DtvjG{ZfJuEr`IyO?WlH5rQZ-dasMtJ3#chrB`Y2>)r?HO%LbNL2PmPs4EKO&p6QYFy z1LT)8kX*DpV1WEoCX$O51pJW~5u(}uKO%YPmW5PB)BOYFbFz_KG{HYWK2nI}qAC3W za-AG@Dj}N1hiEOM0z-ndl%RAjJCP7g-wV-N4Q=;{X6xzCY_!sshgb92nS^M1{;ymZ zQ^4+$B1ALlwBOE+Kv7s-#uflVG=nbOa+5s>5TZGASn`ZehQ8|<^3);^)z^~nRXO`E zA(}#mADIdRfVigiF(H~l$F+_F>S*OF*%^dr>KqT>0n1AGqmrFVh-Snnnj2v zkMZgl)#G_ECGpxeg%C{}QyW5p#s(?j$tLzraY8gDOl^k=(W=)XeN&?KuxRWnF*K55K2SgQClLWzc3cn-%@j|XinvCVJs}NCocYh z_f2r3*_6Le=W6&m83(Qr(m!(aTRX zy8@jXIV0d?D>{4vRmh_k2K|q2g=kI%ejKLsuiD$ce$@2)nj@N8!Hz7@e2v~kR73_B zbw&|@5KX5D`J;&*@qcAPaA)YjPJgZ(oZHJ|33rYq&Z{YkZkm_CkJl8PVXv}+wlHNO z(I{>zx*6R`RR^3tA&r*eEza7nhdiv4IIK2nmQhb&I$ZgQ$%k!A2)3!{X7x2n?doj_ zq*h#ASpC9MH>sT6ooA75qzi*X6t+N*Jxc6hqMO;b-%#0>con2J?pD0Rv~iag2L&f3 ztjc}rCw6cYY#J}EGG26Z8*LebnMW9<5uW)khWq|J!!+T{t+{dmZ4;foiTzLSz5M3N zy0%jt#}|!@*t5!MfPc2+t1R+cST``v&dsgd@-8j+HQK$pPx-g0*US9V9|8}SlZHGFG z|7*Kb=n_CqRQSKN5wLi9%8qAg2OTGF+&AIao~L(2Hv(3!xvsry#~OK`!;X2gR_;Tm z2>w6Z2q>0-50c2`M0?Srv6=^bG|1{7j-$jSeh=6U_20OBYlVB+~+{R<5g5f)N~=j?}8Knq4|M zOa@b^&{qzG3x+M@!r*j-rg-op$r%jqVDxQ_Zb~PuXo{CX8c1UvDt*}qL)AHaxHE$! zn3b3XJ)$M8VDaDIO&tnWkd=w#w$R=$WH!#(ZP1?y|3Y9#mf@BI8HJ2w3=L?ZlT5z7zXCO#O@}$csaMc)S?u&BN zcMwa4X0=U6)jQ6PJRQ_G$2Q)}KC2wIr*4eo;GZ@ot7$~DJdDdBN$AstN_S@FpuV|I z8B5~QeBT@tAZEd+9CAdT@Ub&3EUK56g1?axvlJ`A(6>rMxwE$k_pLm# z=F#k6nhkyPQS+{0ov3`IgQ?% z`WzHd0YYFtN~V+6eTZloj6fe!0g~`h0csuvcwc}*F2p9F=T`+Dv@Jv(Qb3u^djg%> zlysptVlglao+w1tXkj1^I=3mQK_5fpuk8<_w~(}y%BR%RVT>UMoqj7q?ZF(lsfZjR zP0LErIRC0ZLSYdyori_Di%5N%`dmc1Nnu_-KN#v{p*GdD$Vql{+d8d*r>?uYDFc>XWIXO&eIJ@HDz zqTvA(jD+x_QOO^$S8)z zJEkuH(UY;MQ~>PryztBD@vtq8{z{s%ZH#-VTS zZ_;)3>7E?mt$%L2vA3B2n!eh4AjH-D27=;pMHR7s9s0e5dtgr$X-SG6_{EZZJ}Qh( z#pV1)=x8re7d`)*h}Grpka`nDPy1p?KL7nU08S35-tTXT=$YS(*v^(aS)tX6;v)lSTZ2|Ghw*Bc z|K1p>fTu`hR}HCZ`s@u}DW5S0C+IQL-(S1gdp_7FN@@FzOe4HpmVL(tVSWv2{W(m% zt|5oglu9jWKvTB0hvn2t=@k!|{KDh?LwLH5w3msd;(Cdej;I9R04m)>-S!V2Rj<#0FSuxL%JCo4 z=>DR82K2j!7MxL(DWN&dAym_n;Ll|FrFp2tJ08H}bd-~nkvQ+5x~EB`Fk3wc1!q^ZU~l=(w)rUVxH zJVdZFn5ssU6sGd|-(l@TawtTV_bj;Z5gN{?DYl;uboi!Z3O{T_{PTz}1u1?P1xMBP zEcgYZX|6ww7Wn>R!HJJWz_|3D0Z%+eof}Ts@YeyC1WjGKu;wwT#=tz-{+JxDDtcc2 z*mJyhBA^bv;^Xc_STH*DD)z5~^Ary9hjWb8M32h*Q6?@aK+vs3)!Q>*Cj*UvqfgNy zJPbzzd%Bd2AW@4NbQdwDPEjE?gm)`hK=K)SmN5gGJtHSe)1nuew6WfMNG0hRx*GzF zD8>j(<@1lK;A0i4aQsLPoBPzhz$-tZi0fEe`AKYq>;eh`oqi~dfIiRBYW5_hlFg$Q zL(pj#R~_DZj*MbHeDR!|)`y7Fq!DwUb5sPr-1n7MzPOpkge(3^iU^Q_OZE9M2{9Q#*hFz7 z8g>-LZbF_;P$o{<;ClGM@K6&P0+B|X?{0$6CaIja%W9RK=>l?=b?fm1-mWg1h!LLa86 z%3lW-Aw?#|ge!k54TFp~Bq4K@GIU%HoPu^esDxh6diwQP8$VXdm`x*{6&AJ8@*fwO zAhN%d{hucQ`sQ)bzZMZdJw7=~|5@$N8c_6aM%dDNnM(ih>_GoZL-emk9H*Rx3djM-u&m5j3JfADk0y#lSu5zP5<|#fU)4{Ew9bk0#KE2>!I=AAc-D8vV5hN(ZLe za116FOSQ?4s|h}GVM>km*mQ)cjy|D8|L6oguSJ|hTL|PZ*#nfBuxx;e z>xTjKH%s0jGYntEg*|UcOKD8y^M9iU>K(~}jp8Jl>fiMv+}|NYZ#_noE6|84211l! z1m?ph??^sPv0F&KbPt8SBoEVjm3Z7M2UV&M5{@}4${x&hcB(y;6arh09z4^6rceAE zUTGl>WPek7F9OBUCx=5GKs8s>(PQE%L!!=TMb9rSe~b5jkXRdzYejF2Uz8Hs6pF>i z2DIRQjHH?Q@~D6K?>QE%3H7xV&3-?zCiDQxsPZb3NSh z!DSgG;%7zSa_xJiWuasCw40XA33t5b^=v0%jhSiQa&NGo>+{bW!0mXQBDB#!nlgUi zhJ>_{7E+i(t4A0ruB-!F+fXCBv8<z8Bz6*PO&EnFEFrbnltw+9&Q#{Wv`HKmZkiZe z`ER?V{MwJg9Lf=giqZ0_&@56}R^8_Hh#!l*LLQY*&seyGaojMI!ld`$A=z(9O5JR$ z81YN0WTVT@huwZx?hgw7c_fs!MnZ>3WfHPJpy)bqbUu;FmSkTvsGV_z_0|vPO;TH; zao=>XuLPQ7W8@9g$i1`u)pMflOCHNUeKC24QY7WoR~sryDXT*5C}mkr;P#{Q=38cT zuG6<``@-GuwH+I`jZ!w|ZW=$_Y0PZpgcbhd9g9Ann-qhU;r=LPO|Gup>f`Uld(Rh` z{~q0S$Y4b*B}$J{)>j)m_(nbSesTS2n!+A*N+*(bc@MylSb38BpnTV%`cpv}OZQpk zez!l|*^0cOeZF&Y7R){yOtubJ(Z0D$($c@XN$YIr`7vTH(Ukd~b8@C!(QsQR1Ge#U z=KqQ}j?z+yQ8rK&jh7Pfr6Guy(}WH2a1IQk%t)WiVua9OMa3r1PO9F z9MQ1f;Z7=!Q69}aM>*+@QP$xO+O$0EYuMgJ%Elx7y}Bg{y1#UUlBPVfRl}riI4^o9 zZh30(wKH?qzr|7WePaRqkRUgd8~dv0ka=@Z{#4nso28eV`X*6E`RC;fc>ZMhx*wyw z%UU^2nHHU1xs-@6jlOk0Cdg^v*zx!KzNN;c#bp;3RB!s?@okS(b366*b50da75y+- z^{Ed^U1n5im37-G;^)oKZgg5k}xz#i3h0wtKC1-8$6M z%VV3z&`r*sX6T^07%?P(wKuA+Ic!$L!N#=*-hH8C@znBuA7Gy1npxgWVC;(CawQJnbM8VHbdsWkWzAw>F*s@@^STo&FUvUukpA{jv zAg95k;)9y@9943(%j(funeVLf)SDN!U0c?Dk9yCeu8s`Pl~jkPzo7L}6LtFz*mDeF z{TK9ZxI_)W0(*`+WPbhgyWO6nqqctZLT&zi<;tzcn)di7W)G>O%pC(zQ3m}*p!FF2 zg0ki?lQYbye=r=U?mvC+vqx8+dHrs9qiLs`lX)a?pr7uVI5fR=B6UUsQV$!iK8%@2 zMKSUlsb@t6gl<&mA3J7r_lglu<>hMc_}V=UIvo=Wn$6AyQTO!C8*!*3%T`r;bLg3j z#1qF`c?a2T@KNjn`oX@?3qxjcR8@T@{MNn@_WPUDyQbf*?>R4NWreV6buGp-9LGoX zA$`5!a8XX3dp`c>0_p3WT<%tb)_3;VN9ouPT$D59$jj)rtqFLTKFDU|td?DK%$_23 zIP*Jc!s`;7cJz8sX_MghIQ}4?!@<;?ff{obmRyuW$1>uTncQ~5ttGUh{9 z`Bn71Qv97XP*3`*RMuE|>e+<2i2+6Dv^UW$=y?awLhz#;TNUjl-Q3%DPjc6qIf_0b z*;&RBUQe)Z(=O7=wBOf>t=nC;d3&PqNIiddI^WxMTYhsBcWXS%F6hvUqPjY;iyXv} zG4C|FyRtpN#c+sQ^ZorTkFl-7E>f4fcO0L;BsaOTBOxYYK;5-Q$xF6XYX9y#T5&t99^A5x#B-#f#885;juo$DfE!z z+lEO~PTDs;eATKxY_2Rl>66(4pZmP%L zZv7yK4()r_pm#K1d3!|uXj$7{@teu-WZUHt>+K4KlP||@|2UB~D){7bt7oue9*4)h z*==>=c(T~TX)1>nzCU%dAep*54nIi_xA)MtAhi&)b+J!IjWG$=4!A;z4qTMif@glB zhvz=_OPp8Mhw_r@1T&Qqn-@!}!5$>;`$GmWxiH=o1d?vY(sYVgBg$&gLv(chmr9-|{LyP&Ma9m$&1 z)$JGOXdU}0;JBnMi;6q^H>tFBUwPs06jQ|PcuB-OYQ9j%iUWnXE< zeJ_kYESy+Ji*%IOns%2j2U|$aunKEU+wnkU=H#`MJ$|Jg2wlHsD0-c^t#^0D;~5Vg z&4fo^?N;~BoBmGHY{z+{Cv>0rDzQyXs7^qmC(zx)W8-$uzDHo`>*p_)R;5fIk)x>c zb^MU)bUW00$U)rE7G4P_7WTM54F)SK4V0S`aM~Tt>LGQwE1#^rmHt9(bg2*Nlw26* zL#^YW&O#1%O1`+_&f8)~_9^DN#e6Y+piD3Eq=8_7+ds3`rrvKqRJP~|0yi$z8|Tcm z48$G6uM3ibsXZi5ebU#<6K;<+R=YTImeII{?<(k<^W{50JF@9Lr1E(5nob&-w#{Mr zu*QIs(sLbUT|Uz$3_#ETf4FB%Uu=J-zxwLVOK0BfO|M;lpKgtBvYZheJs(&4xZSD# zR<>M0M%n^wD9Rp|gIH&l+L~yp-*GCQvnlf&f&MURF#1!c+lIPqU+=!g%w;`#D|TzX zSsZ=u={-U_!86Ko^YSpN5lTq6D7tIb=kA7&0ZW5dr8paTjM139 zKl7R4#otLz-PPe&aSaYuJKOD`ckd+E<;sZXjq7Ukeo|_Wq1q2p$8S4B9bFpe8iX!Q dbZMbW8(mnYi!MEM>7&a4U53K#jKRE!{{>zarYfAtQ#uft46DW-&LL;1UvA1o{abI?XCQ~&SL0c z5FD0{h6-;qSUJ)Qxo9ZIt+lvks{Cs)k|K!OEsKEdb9qa^Vz-QeV0V2R<*}tmVIsMF zu&`au$u1o_6{wmyMRz@s@oDR~ToC3+IvJOD&_CWV#bea6g$ehkT}U3X;WHM=6Ahs# z7#S(54~n2=wNQgqVXg^Y`TB_Di_U*LrfxoU@QR8r1XykK3#f2C#DkH+h%a8y(roj& zulwV5+qU;Q)9>2K_t+h{Do|&3#@Cc1Q{H!3WP6+0aKpFe#Bmac{Dv_~RLG}Gusbb? zQy_KYPw_o{?z}@w&fKn*7OP0dlv7-x5isrbte{GPx)||Ozs*TZ8f!eNebpYHr~$`Y zD5L@c?e*-Gqjw`ELWiKH*}}rqM(#Xy+Hw`ERDR@II_y+sdtC{wjs*> z-ixxS??gRRj35EYdO^W1As^BJiL^gaQ5n-J>H|7^kwp6(1jzGEz; z?n9&4^@49pui9U{Q&U;I{?z1eFRxH5br$F#F=8&`d^O0P?Y!Oo^2>`syMqq!{5NtV zlx&R-Dk_UDVEKL|;Wgqp0ulRB4_-a7Ua=p^gYv1hi+U(*jNkk@!)7g7JajQ7tjmU$n1=EPX24UsFbrC0R&Kg?Tb**Ms-9lA&XwHx0~<8irIhPW1~wJBLkMI&E%$ zzW~lavh@VB?5@3CduI0f`Yp1rZag*cK#X?(#Q6+{;3#CmQ<8AvqL2e`OB1Hb2~|mW z&4k)S!gh?t)OFldFp*G{x1CT|3GNi8CU3&Jx$+7#wCf-H^A^nIf^jS8Kg4*X?BY<7 z+YrUP-C6HwFndR#&=G!%X9djv74?r}!Q*FVCZA}2&^?E@>73n13VZ>cG02|xgE*TX zgB*EfB$QY}kqHdtgeoP}4?@vqILBh@6yg0%sI8=Fp@h0cc=@r2HCn_!W3%7BTd4bXr?<7Y?1kd*oYfp!4Qi?YoA~w(-#=^cPZQ@|*1- z(i2@dc$A0HvD>Tu5Fg9&opOn{Ed2{L{=yhV{N8UIHf!If&YOw{xin9$*)!<#rv4k~ zoC&u^A%8BKw(!>^D1820Gpt1-JV-XVU9YrM zr-OWbkQ_vP#T{zBvW@P}?=oq_z+;}%t}3#Kn>h!OT)ckj&Dx{$@^`J66LvP^`FWem zM3Qz8xwD_*_PmxnF1*V3+8?f+rWYK{b-69t50(d!#GDJ|p^GAEgZWvHwKMA94l8di zYNDasI0N!TBo>=LY+QTs(5qdIvGGL>H>OW}LadKZMCQf<)2DsSq_2Gx?_Nu_Rxen} zrT6ci5SECHjVrT`e0pyCAX>j{bV2d{>4x{I)k1eDNJLhS-51?{6e`o{nUJ0J_OE&I zxfkhlyqG}};j0I`I@ZbVT(5EZo|f#}^(N>hAsb#D@!Kg0S@ZG;H7N;o(Bek3$r9~T z1YVawQW8$c*T|6MC!ub*EeXka%|yfX5bDm$A=3GWkedeA%B|paMqP?&E@$qXdQQt{Hqigd|$glow);_A2!6iNWbG=DnaDS|Z15cKSUT z%q6@MihE#>5+LxAPzJ{iBN6WaiJ<5(vf`2D8=fD=Eh7B|!epFp$s~r}$+&HqB))0M z$aVzxi`#36wvk^PH&O>q9alf6-JEfB*f!5wagke|W4&DY0~fS|V16z#*HR@%#RLAQ_MBdcgh&GBuv8Bd*TTZagwrYVg(hp}?Q?Rj$0r z1STIrw$635fp@I%u#CSp&0^YGdCBI*`yuTJ z8q9k|Y&RdlOCnjs31tO;A4O8$cQPQWj-rmdBqGQ-id?jcsJjw96bIoMQWH==hR2Yk z2Cz7WYz5z_|Kwy<2uwlkq1QX12CP1YM4AOuZ?_r8&p(Ewns+E`Z!3%GEaO4-V0}I? zDTvV|zusJVbgR%S1&8yBc$t@i25545KE#+a=6YJnlhPf~!T#=dtLm4}5y#xKpr@x1I!9cmj887MU8JX~=cgcODd& z>G5G;D%P&2e#)#k?Rr&4!w~N!t_ChnPMC1a3O2ld(8WzbG7;5{JTK+J{Zt&tW}2m2 z^&$u2&T5~AyPj?Yv6sO-GLIoN4fW=&Bdcsh8cryhUYR1~UnhKF^SA0U?~m6+XIZL*%;0g|u?x1IvMw>Y_7(EDbeqp-%X7>cLUj*NDWN&4f0VJfOJ{sIopA4Qwl6JsUVsj)qFv>uT1{YEak-5U(n4_6Z zbqi%g*A5nZ5%C~C19#Ii8dtI<$Ims>6F?ot^T-}A@+9h~^^Uf##2EkFi$shJ=AFc| z^Ago+GK9*L$R5&8;@NhY4BwTLXkhEi2sYz{4J#zA<2^hR+a;3${4&u%KD7Y_#gb0! zSO24ulGGx@72>^Vqs)TNb2H|<5lVzgA+i8A3mIw_(-x#jph$^Z;44Nv@Xx|6Ae%n? zgJw9s$KQCQj}SgtK=9VCl`pHt9n?Vh+vvn76ms~E**NwaBq*oc@#5z|pL$_#P-#enCpl^z7;h+*3@=g))87$W1cJMcT z#$kcucFVzWG*VZsaYW9-VXwe!-Z`R(W9a}wdqx1~a&UH~8SZ`#`a_HSE_3CleZO)sltij!AlJ0(RH=u6pp)`i)`7P^J!9r*T}Lu@fjijrwp|4?{e8CrPZBX9Z?UWSS71i#uy0 z?cOIkC>~H}#sczlk%&(hG6*^+agux+yd(2fa!I7dg*#_`a^0_SqM~yWV{pksOy@!x z)$Zdw6gkLm{tUl`Ll@g{giY%%#=Wam`;(TFrAn_Ox+>Eq#?v4F+B3+#Be(CqsEc;~ zROQwckL6v?w!c)8_Ewg#b5TmC@jvLCj=qRc6x4VyEVP`#A5|Y{H@-+hI9FS)k(of3 zeB5qsZsa2?>1!kDC&|VkQ6F6oSnuIy+P6?EnHdP;(hN-Da6X>iH%Tw$<|B7a?lZPz zI`|bJF;wrszXD+al4x9|?b`^x_ys%)es=lf0wmYuHhU!ur*jkwHOWGjE5FDWfyxx*o43i3x8?TuR=dMCztxd)+S6=b};UATy z7h?(!3h_MQHr3S($Fv5kA|%pM(h#38C>AOe5*Dg1O879j2se*>cS2whlJm)TOD=dW zGHM6qL_(cEE<$!LpJ}(0)sn4FXpvv;_lLZ{98JvTxjDk0n3Z)dZpeqFZ_*c^H~m~2 z^wbkv7aOq>)nQEX3>JskMH;? z?N~}#(~U!KdtjFDPRX)4P1`I@CVx+x;t}-{vwC>xs;Z0bfc{3N9~4wr>q23zjdSE=L0@ovVlzwWyNy}uwB_>~ zgdbJq=QnC8>*32lRhcT%R#si(86)MxK%OVVTv-?*D6q5{r9V8>|KZrao=WHSJU3OQ z2+b-J+&Q_uGtW4GTjk+g<${g8JT-CCiaE6=5nJ;2IhZXR`hLSw6x!7Vl+UG%rS?b;&kOIZD*qDkP%!Z29XUiee(yi{Y)bzISEwAJU~S z!0&lxwwK?tWw?VLjFS!+B(-^TchseMy}N%ZgJUtgozng3BDcD(NoI>?PnbCNYS5II z#D_feRRnm)^6V|COZgjBtbe~Wo4*b* zr`DQUCkd^5vKvOO)!DvapJKr^BSqm^vEuUiDCStE+&muzwb#C10K%G;yMXcI7ch~& z;ojkQZH+qGCLOZ4`sFP|Ea4l$g7HXKG4tYni1Fu_G42Tpx1zoSvp($Dd}~Uk>^$ht zz?kqU{2V60V7j%(-Ta-A`vd*&OgpXxzHZ1+!CaL9Qzp~`kEwih#qjbNaGl0~!<@?; zt{0rJIP%$qo{i&z)p$^}RcNGWxGaDl6+#n5#Z|s?-gN$b4bj+kLqaA_-23RXthwd&ad(K&^0tr;{d=kpZ0 zHBrj9%lKOpG!B{t9$jI?v*&=l{qzg1|WjjH7HUAECvp{Y9z;x{bv_gkpA6)hx zYP#dF7d+yd>;GFOdCY&pYj}k7PxE8G6R(j_&b63&PbeQkeIisip*|C;2vb^3n8F)) zJroHwf8wP<_X%I5^_4Q;7-DAJ8Vd>Z#>~#mlzGDZ_cJkaW;JE5-=ak-Owimc`|!%O zz2i-s_G!JiX0WM>7(Nf1pYR>DPScmuLIfZmj|@#!7}MZ|-Tl({k5<*VoE-6{@pvvp zRO?|xW3YuGs6FM2czKu!(x-f9-Wfs-B~(74))1 z`N@qGzfK?R0n4ox;vf~qZpF}R-iA9DY@hI|`No{fuJ0+LLa&X*jz2ASH(RH(rOIp7 zI!kY@&VdPGA1VGSw)h_rxc|h5PhZ!ur0m_L?o(@5nvJ+$|C!>y>ry;?n1b|&;cxpd z;)1OyzL)zReG}ypGi!7c1u5DF(fOy*_eVDE8zyb%{a9YB<#w&>t1lEEf$>loLYvjK z%c%JhpRL0(Y^JV`z8m%S8%2bgvF0)2^=#dV5f6lkm%C9D4d4<8VaNR5iXzx?5 z8v3a#Bx!wBQT>rJia2105q%;oB)Ej|@=<-br~QYmb7s_+T-n&st%4$|tYOOwetUi) zd4tRsct)P3f+#YO%sjkPYJR~N@r$Wk{F3j$FQH_AOlqB@P|}&;9cdwkoi8!;Je4OB z=tWB2z~tb|6dK9?=Q-HVKI$3t9|pxeL{WvNyQ#*PzSxCbb&r(uk;4YN?$;N8|El*Lv(9Z?yQ4!{Ro}-= zVTX6mJmiL1iXUrg#`b7YKU&=5hF7(5SF*e|Jlo>D?O5FDy>>MtOvbL6hFKG}?sRH2 zaWu%;_MU&xqHvCgE+i^iWH<`8G+^lU@1fS>f9G;8DaE!lN^{HQCl>ojf#(&d(?zEmX>BJ@p+pWvsvEylaqEXL5!q`9tmG*uk;kW*_yOy6)=p6l(JD zLKc2O0N*mf5w^)=PCu$yB5nk z4@e!_mDD?C@bTJ#S3c$NUIKMhCcme<&zkrCMx6(b{<~sctu54yK}Hb&(L_sWp2)sX zReFChapW;+IZJw%+Ag`D-+krr4-vZ+ux>cd8yX&nwEiVh8vG&XgNy?fz7zFz@ZKkU zz~?R5Yp2r^MmqDzN-&=wFzUZ+RyX}ro7wHp1pBG<&(o27pwgEs(XQXKjq_~3rG6^R zc3$2x@qt?&R~qjdH4Pq+w>_MgssQu91cr{=R?ki8aQ8>A>^ogPd&)Md@1w%)QDnb8 zNwFq>xMk_m_esm+q>0HA@cm0*9rR|`l8g0W+ecU2wt8@OVYiwLs_}gxR@gOS&!Ew6 zZ$BpppSWJ}K6M_m8kcG}POUGQ`)t!Sb;HY{iI|nzf4XV?l8Ku`1*0E!ovP}IS!(Nt zgw6l7F4tjY{wCYu%yG;*;2-k#`M4QFs%M}2zAZ%c6=v1HK$8xbTdca{vSLDp_d=^7nn0o8_wN{yt-9uRL~-~V7}xzj2JJ-`M-Vo z|8Adpyk$M$)kMLzEp=W3{Al4v8$UYu(N)%Y=`Af*AGk*a4cr6hf{qm$2KoZ+F-k_D z-BVRHT@~b(q7G2)D*RI!Z6rM5&$O-AgWnQ~k-{TdMho(NQpFl@bfvJIX$Kf-h40R|Wrfw1|LiGHomO{{f)|{?d=FMkgzf1~%HZqW>QnKtOPKh%ii% zw%>-9_bq~j>P*}6zG7X9l_EY_rd$>*EJaM)(mr_V$jFDAv2w?H;TBEk zh|)DynUNq=*JRq(uemQC`W@A9M0kv8TejxDUdb1(^6F8cu_n{D)XaT|F^~8{u+I}l zL2wrS>MTAfe8IG>EQ9l4)Bmf+7Jk2p(!OH<-3XA|e_IPc)elnAc56vT552 z5vNRq9E?_o!i^X{)3!pyA*pdEMUSBq4joY0R+GS+W~Nr1^Rx_VxT8eDwm0RBjwe} z%mL)s_H^{-53(Ol-lB=OlMk0DEk7O!>~)FXJ^Sh1SGn-_JH8yseHfu*+tbqws+M4woPw(N_vSqSt}9TiL{YI?^CVn`KN4pQfSZ9HnS+v za$ijk+I9bF@T$6*2$tox8f5ZX;h}l0@TyXo-WEN720!}v5#h%GKVtky@MDM{Bm5XE z_57uaFR0!!qL&zXhUzM(p(xPOMR~`bJvQ@e4<;mELLP)m@jiE08jCAvttLim5(>LF247P> z{0ZMfUmxQC;;X}(G*-mFPK3bJ>Dhx*I##<&)I8H!7cD~Jn!OH+RJcr(Kv+6P-=pY8 zR@@G*{6g2Hv+g`10ci$nt9hI170!VO6R{kYWv~pNvLGN<-5m=5d9Qh+=MI9CzvL(m zpMn2D-fvMied5$DVGVxgk#~qV$&TeeppvU`>fOLL6L$f9m&f3;`$^UTe9CkM_{=OO zEtR(;D8&Dn&Xbn?m)k9UNF#bluUI$$^AwkZ3o==eCdWTy$SE@oxTl3#*gfS#fVtS2 zefP?D+Y7aqtF{~%3te87n%t+RnpqUDaGhfTJF-|2kMJNNi|wdYN2RwN&>=<5Tw74f zW<^?0DDSl%=B-;`4!yEjsn%15%25lW%DFGoY;;z{`=X&;jgFUOR^-yp3 zt*65jPU*2OB;>Fx1ifbP?8(7h^MZOlD&hFSIXFPVf|wk(ORMm%A1BPesjC6aSc(6V zC_%(?k&|S^V&$5@H;qr~duGq9lczkda3UuwaR&%Kg~zR$+P|m|zWw#hz;&Wj9db|M zz9f98JcZAostBcX8oT4L(N^G{sBQ?ZiRuEFeHzaSidcJ^?Z|&j9iMowXAAd=t`kcWX!p+6g_rUkH$O=|q7Vj0Yw(|_OMkrhakb>W9yhjMK!~S0XLbRM= zJ8IDWm8V0To!AJx@^O2p_Pl(yy(T9+i>LWVJr~xK*)JYgv zX5ltfywp{P)dje#IQDTp2t2Ib5iS*AZTfS3SipAVC~+Y>N#iZm-U`-1Kfs8oI zdT6$KGbJgFyK(R1Al5c|vTgn3Qs?s-cF}oOwM(b3`$*l#!a4_WCu5ELKxObzj~VBf z1mkXlQSm1##5eSQ*=Tty(l%bcs{5YfQqk?;8*6sN4?8sNGliuY{(|98dXi+c6ss;g zvCX{io>*AW(&^Av4tLz(7Y^!+S#9yE^5MH3UOZ;bDQBmbUKvtLV4zpRI*I2t9~E@o zwR>jYIrWxtc zu*Hbgub+RJILLp)rQ2~QJ(e!iX`+Z5BguUT{Ko*(pJjyl2|Y_!e()-Kx+3xUgxfQ% zh$S$)$WG>cCDd9%eIr!WFUsQ*J6tUBL-Vau2CLLs-AlCpQnj685-zb*wZBtOrwvdU zz3ty0;-hfqOuUTSN<UQ?+_yN{|%~Yw>3MJ9Y{fh9j>bMa* z;?(1F)#b_JJuB;M%I_wTkaFdU_9zKo?ze${r8pgPnhm-*9S4`#!bZ%~{6TTwv>~BI z&jQYr;;|y_hssjcIB3$f3Db(>b<#|$axJ!NojuL<%<)^~?D<^jpuGbQhmFhUZ;jly z`ehY&zd!8fz51V>)NW-AVCo~fBRq4JOE zrl;z2-nXdJ*qUH|8EfU$LSJyfG_>{h@lUlpi>Pl`ZM$2#ei}U6`$XE#V6s1v9~0vk zQy0zKzI;)DSImGuZ7M6laO&d(=^%tfk&!1}SB2m<2ESzE1*6#JFb)WT=-#ZX(0=fzgaY_dgB_}(!K(yMs>Q5Bb~Y!4oh z!u+dv->{A1iu&W3hYleF$iK>3Yi_5^n|Q(ep(g`D1>OSgpsW~p>nb*9mng=*cylCc zOy$KIdFhRD)ge?^?T-I-BD-q^D=V zw%$)}ojsenJ=;?HGRJVdS;uSDsa1Cf4rX0r9k_<=y~bMcNW&oi8f$Jm0j1YW+_TE9 zLVZi0sr=j}T=T-r;KMbxoiq1#!48k*pj&INslMLoGJi@((>?{ezhYLub77gM6Wu4Z z9LuN+h^beD!PnWLT6?hVTzM_tyFrnY%od8T<6evW#Z-8{um#?Y-+6egIf{&->kZaO z3n);ji*M1#rc0%;kRUl`iY}gc_#U$iPGBZ)FKI)`4YnPRc!c^J>>$luRQrk)WVhJ% zu+v>8fCV=(RzVPzH(5u(HYPgynh%ugm)h74(ZL zCsY*SncZcFY7h$FD}~BCtP{RgEP$lD*jqH^ZnGrb9Pzbc0erx04UWx$p@6Xa-NQlu zM57}hNBDmC7R=;&E#@BE*?3~l_~Ruf`%TDm<B^DOB; z{<1hh%)yT)kv+L-jIRja$8AofJ|0DW5xGH^2Y4^YG2WX2`XZutjI|;7AAXfN$8Wig z4P1DDJ0gwvfB1kMph>7)`DR0~B$v!Rx{8J1_3)Qp->-OJqwza0i)f@hWCwB7cT8y# zUamaGJn|814-3BGeOd4$teQ>O5dICTmf?3Ed57vpY%g9Wp)9Mg+c>J)q8C}s+5x^f zEP$9QJjU^q{hYAdLsb>tlqL|B5s%ppFwzJKz@-|GE#cu}xiP*fjIYnyL4`4vti%!y z9bU~2<{cz@53BKPA{4&!2J33^coaOvUEouLT^*q8-95RhyKyzFRD<(g1Nu)e(s2e3 zs-7SdDe?sutIPuX>iQV_B5V@b0Iehn*hJ#NSAOllY&KRc!aPV}B&Cx@w%U?F$cSq5vKuqK)uGfzMoVgBph zur^$If^~@y0-lnM-f4vI2!D|BLG%%Twzo41Wto ze3n|m{a@n7r>uw8QEFwo4%!W#KSUDndd4z>ILiEbm=8fc#U_&4FPF>aO4lf=eH62h z`krgYi5OCQifsoJYP{C&T@kkF(7+1WfIHECR3v|{jlzE2Aa2d+-84q{m#*xys&iUc zzms5fhx>(XdxKC6xkGFOEgSfJaC^auv?HkdycC3!CB8^3g8;%M$ud{|ZIc@Qe`(Do zz6t(me_GYJ(s@k(*r~Jem*@Fj7r4fp$bq64tcy1N(aHB@BfRe{>VeF__$BTcI(wa8 zvK=+ksln#<5dV_JH;h$T0c<7+!iVU85Et|~L~0*AX+B_tW(L(P)#L6Nhqs6X;P49n zMhGAJykh08h$Fg?-XfApj;}W?U(bxrF*FF^&-66La#>OGJ;x^zapHtIfq! z6{3ol9(v1oIzwT5HjQ-*kQ)z|_~{DaKZ#T_MoD>j5` zjO6D~pK@ei54Lsq_szWrAOoX59zJEBm2L%ncbuOEf%X0q=}%vt6+>>6etGJAbLZqF z?>jM9Zi?~~n=wnpvyZSayDlKAIO2Ys7IJ~`Iu`%wlC-_Bj&;*GO#{W3WK|6;fqjG9 zmrG>MZ&-Iep>WHQPz5f?~{UiE}@w(&Iv9F$WbmM@zn6>eR&!fy((c5=+B2?t>yO25edQ1z3b_3ISh8x{#J#!|lQjBlO;{Z++>LxG6o%?${=qYYR% z(!erQd2O_TJ4^NC(%-jjZVTW$Sdjw8ZJ!8h<$wb>Fkxe%j*0u1QV& z;pvU^;4oMQ`WgoK{5!@#+d#f&hjqyHg&{og;Xe;W@P9NYw?gk20|x`+OHI9J6b>KL zQB!N{vgLPgZN?F=j=>S%9x7(k$XjZRft?Xpr!9XJuz0F#-uRt@(`#ncQx~%#JYJWT zthq7AaEgADji<(w7v#Tr;k{#>~+!>(%MSt-dZk^X?ll z06z}sI7-^a_LYkI9Mp0BS9II3Ih{Czb~HK-{DwPC6VO2&b9i)6N85PR*DoJmiF;WX zBwso_tY@b#O*G6xZ9s`SmIiI(#EzgK&Y*`HG20x6qvY50J@Sz;I_?^9;#5{I-ruwX)&Xj%=Yh=t*yAh}d5|zri zH_aBFDL%fQi%$kMO*lP`5D2xwrwLC&%7=AB#dfftyob<0Q=3?aRVT`Hf)4T^pc<(7Pn z@l7kZiv@T9Dh}yLdxd`fxYyIC<5Qnwm$E0;z1dG~$nS+96!Ob2>8`;`24{F5)hTRw z=aRCoOv%#F0p+T<<8#)$59^pntgM<0))|xyjYX*&zdA~<{Gbu7JFH^|r(5uEn7qT> zZ}@arSKWjWY^Uwl#C!6h!#ai#chG9e>*2xoC<1;uQ;~E#i9d z+m5DTpDP{D_U*nbKrZa*^^rz-{5xwV4xD!{**!R*;OvWT)A!`%uOcFN^qsYm{CU`- zcYWQ?AjO_r<$F!veZ#*&+=uBx14H=66Eb}6-J_W`?Y(FIp8;;F#dE(lFRZ);?Uuf$ zA>TqM?DsfGuR4TUB^Er>^oaiJul}bJzGzc-`+tA| zd&}t!BjMe#v-HOZ;d(*~$?~WW-EM1-PHntUoPJc2GW#=amv_FpHB95-UfoJV_W8jY zb0Kr@AwO7iIEUrDPo%MTc_!_7L=#^9V4a*OhGxm=JLRKB4b^eUvKr~~^^ez~IC1)T zEL?uR+svvGy_)eeH|oBDqETWgEazieq1YFM@J(#_yQtT7hjlIJ98inEvr?F3U`wX} zZx6v)s+-vJBPlL@wAdWx;W@wyCz5sQChhrH19vquM(o%M@*E=;8%#tW19eW0uZq~7 zbDvkqxM4gv9>S|zI}H;?jlB6D!d`sv8-F*ou&zkm7((zn=QUo##D$CVx(4<_{N+Nh zNa*N5g2E{fh0F~In6qR->$Lgem?#h2J^!-DfE_nNDo>u`jP_JDF_Y{{2;86@Jm0AQ z>?3O?bg{4DMDtZmEG6sj=ca0m7`G*OuAOd|8~xsJ&9odVmWZ9UPgKj$-!(z2Xwdr7 z539D5B()1 zesw4eU$kHB}6zW|EP6+7ncyrauL?m@_z0z$!gH@ ziEBTXUtD{z1NlSCEgL_763-at0o|YPpK81Lgm%$;M?VX*oVeFta)D&D_LOXs(H!0> z^=7M#T^j3r++bE++`=pjhpPz&CR|F(V)RBpZ5PZIW38pg#Vh;5=p@SHK!5D?>UV#@?Ue>K^pS^Nlqh1faWx6{{JMW z9iegj*PM2kibzh|f^!;vOz~reA9MUz;75iZOZ-^jhhS{*V~Za<6i~a3edS diff --git a/compose/.gradle/8.0/executionHistory/executionHistory.lock b/compose/.gradle/8.0/executionHistory/executionHistory.lock index 5622cdc4091aba957898089cc465951db108b771..dbb7003039bf2d23b726c16f788b0888af5ff4ec 100644 GIT binary patch literal 17 VcmZQpd*Q!2?ROVVUkriy!zq|6i& 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 ra=Vef(^b literal 17 UcmZQ(aBaLGm;b_n0Sw9t04T-;H2?qr diff --git a/compose/.gradle/8.0/fileHashes/resourceHashesCache.bin b/compose/.gradle/8.0/fileHashes/resourceHashesCache.bin index 33b4932ba9a4a310a965ee0b403cbbae3913bd3c..5fe73eec6867f22229eee1774ce63249371e1eca 100644 GIT binary patch delta 6154 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 YOsY&MD#fl`X}lh#6{C6c4gb3T12uy`ng9R* delta 708 zcmY+BUr1AN6vsUm3xxvh!QCxQm$mjsubY2jYhn|1ZdPa|mO*X#P&w@-K@Fi=fg}i< z9q4CPf-koDjjC(iFXb;oUY=rSn*q9z-F-iGvw>+Q_&8*qQ01pP4m)7nC*%D~*6@**vyp z+i)p6M&W(e0ne&zG^Ub9_N%Yrh}w(iG(Os+m6k_zP7-nsb2u;9NyxKs*lF;gHUBFf zD`>}+0zdW_x;c3d>(|0l)}#Xm+tNXh#dE;G3UWcuI&!7-qyQeOC{mpQ4x796I}-lb zXuA|j1IkTVKp&GOw_M|)5^=Edlk1MTAm92)oHi3y%=PDqULAWw==FVNbg z5h#Bu3()n_gQ;OZM#DUE(>837d~&)CkIxveZ^nc5vp$qZc(g|hbSH8VFm=vJ19M8i z_w!D4EqF-t$_+I6dKK__)P{=1Hu5hf0nWbphS9f9tXf)5DSuckc8hAyUv`I?9dSVx zyXBG|opXVYbvFUeMw{Rf>u81$tGx^|G%d@qZ`ns@V%0#Qca0z>UI8PBwJmT7XlrE{ z#3!wg1Qb~{CX!-(6G;2%0EdmALu|?o4ty4uQ#?KZTy9rDd7EP!r{ONM)Wcq?`0~IE zyV#lQRa#uCY~?7D1+@SG diff --git a/compose/.gradle/file-system.probe b/compose/.gradle/file-system.probe index 57755a13262e86c7d6b78065b8e3b1ac15efaefd..043d3db5f2c1a6267aa23b3384feb3b122bd7937 100644 GIT binary patch literal 8 PcmZQzVC>%CvHuPL39|!l literal 8 PcmZQzVC>!>cB2sh2=oH` diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/TankList.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/TankList.kt index 128d1f1..874ea08 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/TankList.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/TankList.kt @@ -23,7 +23,12 @@ import androidx.compose.material3.CardDefaults import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.key import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight @@ -32,8 +37,13 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavController +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.withContext import ru.ulstu.`is`.pmu.R import ru.ulstu.`is`.pmu.composeui.navigation.Screen +import ru.ulstu.`is`.pmu.tank.database.AppDatabase +import ru.ulstu.`is`.pmu.tank.model.Tank import ru.ulstu.`is`.pmu.tank.model.getStudents import ru.ulstu.`is`.pmu.ui.theme.CustomDark import ru.ulstu.`is`.pmu.ui.theme.CustomOrange @@ -57,6 +67,17 @@ fun TankList(navController: NavController?) { fun ColumnItem( number: Int ) { + val context = LocalContext.current + val tanks = remember { mutableStateListOf() } + LaunchedEffect(Unit) { + withContext(Dispatchers.IO) { + AppDatabase.getInstance(context).tankDao().getAll().collect() { data -> + tanks.clear() + tanks.addAll(data) + tanks.reverse() + } + } + } Column( modifier = Modifier.padding(0.dp, 10.dp) ) { @@ -85,56 +106,45 @@ fun ColumnItem( modifier = Modifier.horizontalScroll(ScrollState(0)) ) { - getStudents().forEachIndexed() { index, student -> - val studentId = Screen.StudentView.route.replace("{id}", index.toString()) - Card( - colors = CardDefaults.cardColors( - containerColor = CustomDark, - ), - modifier = Modifier - .size(width = 200.dp, height = 250.dp) - .padding(all = 5.dp) - ) { - var imageId = R.drawable.t_34_85 - var textId = R.string.t_34_85 - - if(number == R.string.ussr_list){ - //ничего - } else if (number == R.string.germany_list){ - imageId = R.drawable.tiger_1 - textId = R.string.tiger_1 - } else if (number == R.string.usa_list) { - imageId = R.drawable.sherman - textId = R.string.sherman - } - - Image( - painter = painterResource(id = imageId), - contentDescription = stringResource(id = R.string.tanks_main_title), + tanks.forEach { tank -> + key(tank.tankId) { + //val studentId = Screen.StudentView.route.replace("{id}", index.toString()) + Card( + colors = CardDefaults.cardColors( + containerColor = CustomDark, + ), modifier = Modifier - .height(150.dp) + .size(width = 200.dp, height = 250.dp) .padding(all = 5.dp) - ) - Text( - text = stringResource(id = textId), - fontSize = 30.sp, - fontWeight = FontWeight.Bold, - color = CustomOrange, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) - Button( - modifier = Modifier - .fillMaxWidth() - .padding(10.dp, 0.dp, 10.dp, 10.dp), - colors = ButtonDefaults.buttonColors( - containerColor = CustomRed, - contentColor = CustomDark), - onClick = { }) { - //navController?.navigate(Screen.Hangar.route) - //navController?.navigate(studentId) - //"${student.firstName} ${student.lastName}" - Text(text = stringResource(id = R.string.purchase_button)) + ) { + Image( + painter = painterResource(id = tank.image), + contentDescription = stringResource(id = R.string.tanks_main_title), + modifier = Modifier + .height(150.dp) + .padding(all = 5.dp) + ) + Text( + text = tank.name, + fontSize = 30.sp, + fontWeight = FontWeight.Bold, + color = CustomOrange, + textAlign = TextAlign.Center, + modifier = Modifier.fillMaxWidth() + ) + Button( + modifier = Modifier + .fillMaxWidth() + .padding(10.dp, 0.dp, 10.dp, 10.dp), + colors = ButtonDefaults.buttonColors( + containerColor = CustomRed, + contentColor = CustomDark), + onClick = { }) { + //navController?.navigate(Screen.Hangar.route) + //navController?.navigate(studentId) + //"${student.firstName} ${student.lastName}" + Text(text = stringResource(id = R.string.purchase_button)) + } } } } diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt index f9457d3..d489610 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt @@ -14,7 +14,7 @@ import ru.ulstu.`is`.pmu.tank.model.User @Dao interface LevelDao { - @Query("select * from levels order by level collate nocase asc") + @Query("select * from levels") fun getAll(): Flow> //получить уровни с танками diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt index b85e504..0cdf761 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt @@ -13,7 +13,7 @@ import ru.ulstu.`is`.pmu.tank.model.NationWithTanks @Dao interface NationDao { - @Query("select * from nations order by name collate nocase asc") + @Query("select * from nations") fun getAll(): Flow> //получить нации с танками diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/UserDao.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/UserDao.kt index 1736edf..b60da16 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/UserDao.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/UserDao.kt @@ -11,6 +11,7 @@ import kotlinx.coroutines.flow.Flow import ru.ulstu.`is`.pmu.tank.model.Nation import ru.ulstu.`is`.pmu.tank.model.NationWithTanks import ru.ulstu.`is`.pmu.tank.model.User +import ru.ulstu.`is`.pmu.tank.model.UserTankCrossRef import ru.ulstu.`is`.pmu.tank.model.UserWithTanks @Dao @@ -19,19 +20,16 @@ interface UserDao { fun getAll(): Flow> //получить нации с танками - @Transaction @Query("SELECT * FROM users") fun getUsersWithTanks(): LiveData> - //получить конкретную нацию - @Transaction + //получить конкретного пользователя @Query("select * from users where users.userId = :uid") suspend fun getUserUid(uid: Long): UserWithTanks //добавить танк в ангар пользователя - @Transaction - @Query("INSERT INTO UserTankCrossRef (userId, tankId) VALUES (:uid, :tid)") - suspend fun addTankToClient(uid: Long?, tid: Long?) + @Insert + suspend fun insert(userWithTanks: UserWithTanks) : Long @Insert suspend fun insert(user: User) diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppDatabase.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppDatabase.kt index fb5b896..50bf177 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppDatabase.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppDatabase.kt @@ -8,6 +8,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import ru.ulstu.`is`.pmu.R import ru.ulstu.`is`.pmu.tank.dao.LevelDao import ru.ulstu.`is`.pmu.tank.dao.NationDao import ru.ulstu.`is`.pmu.tank.dao.TankDao @@ -17,6 +18,7 @@ import ru.ulstu.`is`.pmu.tank.model.Nation import ru.ulstu.`is`.pmu.tank.model.Tank import ru.ulstu.`is`.pmu.tank.model.User import ru.ulstu.`is`.pmu.tank.model.UserTankCrossRef +import ru.ulstu.`is`.pmu.tank.model.UserWithTanks //тут, собственно говоря, всё и мутится с БД :))) @Database(entities = [Nation::class, Level::class, Tank::class, User::class, UserTankCrossRef::class], version = 1, exportSchema = false) @@ -84,17 +86,17 @@ abstract class AppDatabase : RoomDatabase() { //Tanks val tankDao = database.tankDao() - val tank1 = Tank("МС-1", 1000, level1, nation1) - val tank2 = Tank("Т-34-85", 960000, level6, nation1) - val tank3 = Tank("ИС-2", 1230000, level7, nation1) - val tank4 = Tank("ИСУ-152", 2350000, level8, nation1) - val tank5 = Tank("Tiger 1", 1430000, level7, nation2) - val tank6 = Tank("Ferdinand", 2500000, level8, nation2) - val tank7 = Tank("Tiger 2", 2500000, level8, nation2) - val tank8 = Tank("Panther", 1350000, level7, nation2) - val tank9 = Tank("M4A2E3", 990000, level6, nation3) - val tank10 = Tank("Pershing", 1260000, level8, nation3) - val tank11 = Tank("Hellcat", 940000, level7, nation3) + val tank1 = Tank("МС-1", 1000, R.drawable.t_34_85, level1, nation1) + val tank2 = Tank("Т-34-85", 960000, R.drawable.t_34_85, level6, nation1) + val tank3 = Tank("ИС-2", 1230000, R.drawable.t_34_85, level7, nation1) + val tank4 = Tank("ИСУ-152", 2350000, R.drawable.t_34_85, level8, nation1) + val tank5 = Tank("Tiger 1", 1430000, R.drawable.tiger_1, level7, nation2) + val tank6 = Tank("Ferdinand", 2500000, R.drawable.tiger_1, level8, nation2) + val tank7 = Tank("Tiger 2", 2500000, R.drawable.tiger_1, level8, nation2) + val tank8 = Tank("Panther", 1350000, R.drawable.tiger_1, level7, nation2) + val tank9 = Tank("M4A2E3", 990000, R.drawable.sherman, level6, nation3) + val tank10 = Tank("Pershing", 1260000, R.drawable.sherman, level8, nation3) + val tank11 = Tank("Hellcat", 940000, R.drawable.sherman, level7, nation3) tankDao.insert(tank1) tankDao.insert(tank2) @@ -111,13 +113,10 @@ abstract class AppDatabase : RoomDatabase() { //Users val userDao = database.userDao() val user = User("3tankista73", "egor@mail.ru", "12032003", 10000000) + val newObj1 = UserWithTanks(user, listOf(tank1, tank3, tank5, tank7, tank9)) userDao.insert(user) - userDao.addTankToClient(user.userId, tank1.tankId) - userDao.addTankToClient(user.userId, tank3.tankId) - userDao.addTankToClient(user.userId, tank5.tankId) - userDao.addTankToClient(user.userId, tank7.tankId) - userDao.addTankToClient(user.userId, tank9.tankId) + userDao.insert(newObj1) } } diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/model/Tank.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/model/Tank.kt index e08b566..4f6a125 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/model/Tank.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/model/Tank.kt @@ -15,6 +15,8 @@ data class Tank( val name: String, @ColumnInfo(name = "price") val price: Int, + @ColumnInfo(name="image") + val image: Int, @ColumnInfo(name = "levelId", index = true) val levelId: Long?, @ColumnInfo(name = "nationId", index = true) @@ -24,9 +26,10 @@ data class Tank( constructor( name: String, price: Int, + image: Int, level: Level, nation: Nation - ) : this(null, name, price, level.uid, nation.uid) + ) : this(null, name, price, image, level.uid, nation.uid) override fun equals(other: Any?): Boolean { if (this === other) return true diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/model/UserTankCrossRef.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/model/UserTankCrossRef.kt index 8724d4b..4df39de 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/model/UserTankCrossRef.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/model/UserTankCrossRef.kt @@ -1,10 +1,29 @@ package ru.ulstu.`is`.pmu.tank.model import androidx.room.Entity +import androidx.room.ForeignKey +import androidx.room.PrimaryKey import org.jetbrains.annotations.NotNull //many to many for user and tank -@Entity(primaryKeys = ["userId", "tankId"]) +@Entity(primaryKeys = ["userId", "tankId"], + foreignKeys = [ + ForeignKey( + entity = User::class, + parentColumns = ["userId"], + childColumns = ["userId"], + onDelete = ForeignKey.RESTRICT, + onUpdate = ForeignKey.RESTRICT + ), + ForeignKey( + entity = Tank::class, + parentColumns = ["tankId"], + childColumns = ["tankId"], + onDelete = ForeignKey.RESTRICT, + onUpdate = ForeignKey.RESTRICT + ) + ] +) data class UserTankCrossRef( val userId: Long, val tankId: Long diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tanks/composeui/Hangar.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tanks/composeui/Hangar.kt index be3d588..8afcf1e 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tanks/composeui/Hangar.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tanks/composeui/Hangar.kt @@ -18,10 +18,15 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight @@ -32,8 +37,15 @@ import androidx.compose.ui.unit.sp import androidx.navigation.NavController import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import ru.ulstu.`is`.pmu.R import ru.ulstu.`is`.pmu.composeui.navigation.Screen +import ru.ulstu.`is`.pmu.tank.database.AppDatabase +import ru.ulstu.`is`.pmu.tank.model.Level +import ru.ulstu.`is`.pmu.tank.model.Nation +import ru.ulstu.`is`.pmu.tank.model.Tank +import ru.ulstu.`is`.pmu.tank.model.UserWithTanks import ru.ulstu.`is`.pmu.ui.theme.CustomDark import ru.ulstu.`is`.pmu.ui.theme.CustomYellow import ru.ulstu.`is`.pmu.ui.theme.PmudemoTheme @@ -45,130 +57,115 @@ fun Hangar(navController: NavController){ val currentDestination = navBackStackEntry?.destination val currentScreen = currentDestination?.route?.let { Screen.getItem(it) } + val context = LocalContext.current + val users = remember { mutableStateListOf() } + val nations = remember { mutableStateListOf() } + val levels = remember { mutableStateListOf() } + LaunchedEffect(Unit) { + withContext(Dispatchers.IO) { + AppDatabase.getInstance(context).userDao().getUsersWithTanks().value?.forEach() { data -> + users.clear() + users.add(data) + } + AppDatabase.getInstance(context).nationDao().getAll().collect { data -> + nations.clear() + nations.addAll(data) + } + AppDatabase.getInstance(context).levelDao().getAll().collect { data -> + levels.clear() + levels.addAll(data) + } + } + } + Column( verticalArrangement = Arrangement.spacedBy(15.dp) ) { - for(n in 1..3){ - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceAround, - modifier = Modifier - .fillMaxWidth() - .padding(10.dp, 0.dp, 10.dp, 0.dp) - ) { - Column( - modifier = Modifier.background(CustomYellow) - ) { - Box( - Modifier - .background(CustomYellow) - .height(260.dp), - ) - { - Card( - colors = CardDefaults.cardColors( - containerColor = CustomYellow, - ), - modifier = Modifier - .size(width = 170.dp, height = 250.dp) - .padding(10.dp, 0.dp, 10.dp, 0.dp) - ) { - Image( - painter = painterResource(id = R.drawable.t_34_85), - contentDescription = stringResource(id = R.string.tanks_main_title), - modifier = Modifier - .height(130.dp) - ) - Text( - text = stringResource(id = R.string.t_34_85), - fontSize = 20.sp, - fontWeight = FontWeight.Bold, - color = Color.Black, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) - Text( - text = "Нация: СССР", - fontSize = 17.sp, - fontWeight = FontWeight.Bold, - color = Color.Black, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) - Text( - text = "Уровень: 6", - fontSize = 17.sp, - fontWeight = FontWeight.Bold, - color = Color.Black, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) - Text( - text = "Стоимость: 965000", - fontSize = 17.sp, - fontWeight = FontWeight.Bold, - color = Color.Black, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) - } - } - } - Column( - modifier = Modifier.background(CustomYellow) - ) { - Box( - Modifier - .background(CustomYellow) - .height(260.dp), - ) - { - Card( - colors = CardDefaults.cardColors( - containerColor = CustomYellow, - ), - modifier = Modifier - .size(width = 170.dp, height = 250.dp) - .padding(10.dp, 0.dp, 10.dp, 0.dp) - ) { - Image( - painter = painterResource(id = R.drawable.tiger_1), - contentDescription = stringResource(id = R.string.tanks_main_title), - modifier = Modifier - .height(130.dp) - ) - Text( - text = stringResource(id = R.string.tiger_1), - fontSize = 20.sp, - fontWeight = FontWeight.Bold, - color = Color.Black, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) - Text( - text = "Нация: Германия", - fontSize = 17.sp, - fontWeight = FontWeight.Bold, - color = Color.Black, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) - Text( - text = "Уровень: 7", - fontSize = 17.sp, - fontWeight = FontWeight.Bold, - color = Color.Black, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) - Text( - text = "Стоимость: 1350000", - fontSize = 17.sp, - fontWeight = FontWeight.Bold, - color = Color.Black, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) + users.forEach { user -> + key(user.user.userId) { + val countRows = user.tanks.size / 2 + + //проверяем на то, что не всё поместилось в ряды по 2 элемента + val oneLastElem = user.tanks.size % 2 + + var index = 0 + + var supportCountRow = countRows + + for(n in 1 .. supportCountRow){ + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceAround, + modifier = Modifier + .fillMaxWidth() + .padding(10.dp, 0.dp, 10.dp, 0.dp) + ) { + //цикл для заполнения строки карточек + for (m in 0 .. 1){ + Column( + modifier = Modifier.background(CustomYellow) + ) { + Box( + Modifier + .background(CustomYellow) + .height(260.dp), + ) + { + Card( + colors = CardDefaults.cardColors( + containerColor = CustomYellow, + ), + modifier = Modifier + .size(width = 170.dp, height = 250.dp) + .padding(10.dp, 0.dp, 10.dp, 0.dp) + ) { + Image( + painter = painterResource(id = user.tanks[index].image), + contentDescription = stringResource(id = R.string.tanks_main_title), + modifier = Modifier + .height(130.dp) + ) + Text( + text = user.tanks[index].name, + fontSize = 20.sp, + fontWeight = FontWeight.Bold, + color = Color.Black, + textAlign = TextAlign.Center, + modifier = Modifier.fillMaxWidth() + ) + Text( + text = "Нация: " + nations.find{ it.uid == user.tanks[index].nationId }.toString(), + fontSize = 17.sp, + fontWeight = FontWeight.Bold, + color = Color.Black, + textAlign = TextAlign.Center, + modifier = Modifier.fillMaxWidth() + ) + Text( + text = "Уровень: " + levels.find{ it.uid == user.tanks[index].levelId }.toString(), + fontSize = 17.sp, + fontWeight = FontWeight.Bold, + color = Color.Black, + textAlign = TextAlign.Center, + modifier = Modifier.fillMaxWidth() + ) + Text( + text = "Стоимость: " + user.tanks[index].price.toString(), + fontSize = 17.sp, + fontWeight = FontWeight.Bold, + color = Color.Black, + textAlign = TextAlign.Center, + modifier = Modifier.fillMaxWidth() + ) + } + } + } + index++ + + //если надо будет допечатать ещё один элемент + if(n == supportCountRow && oneLastElem != 0){ + supportCountRow = oneLastElem + } } } }