From ccb8f174aa1997cc486ec4b0e3f70f78c06846a8 Mon Sep 17 00:00:00 2001 From: aksworns22 Date: Thu, 12 Feb 2026 23:17:35 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=EC=9E=84=EC=8B=9C=20=EC=99=95?= =?UTF-8?q?=EA=B4=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_crown.png | Bin 0 -> 576 bytes .../res/layout/fragment_ego_room_statistics.xml | 14 +++++++++++++- .../res/layout/item_square_question_reply.xml | 3 ++- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/ic_crown.png diff --git a/app/src/main/res/drawable/ic_crown.png b/app/src/main/res/drawable/ic_crown.png new file mode 100644 index 0000000000000000000000000000000000000000..aa2ba03fbf4131eeab228e42c5513d9827bcc7e3 GIT binary patch literal 576 zcmV-G0>AxML8#4vyyvNdH)2$6u#0Ht|! zy%)us{V1{wp8=vVkiS^M(;1(&?ny?&7^?GNN8U5vlVz`v2 z*qdfV7E)&Ql` zZ6dus=$7lO?A9>#(pYAnLVCmEFxSjqB4;Z&AfJ$&|7)l0uY&5fHA_BUY=9>{BKx0? zU692rT*h1Iow4@+cjf8M_Xb71?`_6X#ud?%O| zYNMynIhH*Xl<^;-R+nVvj^Xxj99}~1WZLp^pamPbce* + + + + + - \ No newline at end of file + diff --git a/app/src/main/res/layout/item_square_question_reply.xml b/app/src/main/res/layout/item_square_question_reply.xml index 26d5e912..17dc9e5b 100644 --- a/app/src/main/res/layout/item_square_question_reply.xml +++ b/app/src/main/res/layout/item_square_question_reply.xml @@ -49,6 +49,7 @@ app:layout_constraintStart_toEndOf="@id/civ_item_square_question_reply_user_image"/> - \ No newline at end of file + From 887ddec143fd1b2941604dd24314da3a72d5954a Mon Sep 17 00:00:00 2001 From: aksworns22 Date: Thu, 12 Feb 2026 23:17:49 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=EC=A0=84=EC=86=A1=20=EC=9E=84?= =?UTF-8?q?=EC=8B=9C=20=EC=B0=A8=EB=8B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/egobook/app/ui/square/view/LetterSendDialog.kt | 8 ++++++-- .../egobook/app/ui/square/viewmodel/LetterViewModel.kt | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/egobook/app/ui/square/view/LetterSendDialog.kt b/app/src/main/java/com/egobook/app/ui/square/view/LetterSendDialog.kt index df383395..4de761be 100644 --- a/app/src/main/java/com/egobook/app/ui/square/view/LetterSendDialog.kt +++ b/app/src/main/java/com/egobook/app/ui/square/view/LetterSendDialog.kt @@ -4,6 +4,7 @@ import android.app.Dialog import android.graphics.Color import android.os.Bundle import android.view.View +import android.widget.Toast import androidx.core.graphics.drawable.toDrawable import androidx.fragment.app.DialogFragment import androidx.fragment.app.activityViewModels @@ -64,7 +65,10 @@ class LetterSendDialog(private val mode: LetterMode, private val friendInfo: Fri dismiss() } btnLetterSendApply.setOnClickListener { - viewModel.detectAbusiveContent(text = letterContent) +// viewModel.detectAbusiveContent(text = letterContent) + Toast.makeText(context, "서버 점검중입니다.", Toast.LENGTH_SHORT).show() + removeScreenBlur() + dismiss() } } @@ -141,4 +145,4 @@ class LetterSendDialog(private val mode: LetterMode, private val friendInfo: Fri companion object { const val TAG = "LetterSendDialog" } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/egobook/app/ui/square/viewmodel/LetterViewModel.kt b/app/src/main/java/com/egobook/app/ui/square/viewmodel/LetterViewModel.kt index 88c9c14b..e2b244ad 100644 --- a/app/src/main/java/com/egobook/app/ui/square/viewmodel/LetterViewModel.kt +++ b/app/src/main/java/com/egobook/app/ui/square/viewmodel/LetterViewModel.kt @@ -219,4 +219,4 @@ class LetterViewModel @Inject constructor( } } } -} \ No newline at end of file +} From 05d66b80cba5a0abfe5ef5f3d3df994411ec8550 Mon Sep 17 00:00:00 2001 From: aksworns22 Date: Thu, 19 Feb 2026 14:40:56 +0900 Subject: [PATCH 3/5] =?UTF-8?q?chore:=20=EB=B9=9B=EB=82=98=EB=8A=94=20?= =?UTF-8?q?=EC=9C=A0=EB=A6=AC=EB=B3=91=20=EB=A6=AC=EC=86=8C=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_shine_bottle.png | Bin 0 -> 40782 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/main/res/drawable/ic_shine_bottle.png diff --git a/app/src/main/res/drawable/ic_shine_bottle.png b/app/src/main/res/drawable/ic_shine_bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..af2d0745c1f031e38954bd682006d7775c13172c GIT binary patch literal 40782 zcmb?hV{;`8&n~yx;?&0JZf)DP?e?@=+qSK(ZJpZf*0$|-Ya9FC&wqGlf=NDQ=9*-Z zxe}?QAc>5Kj|c$)fh;X0rt+V^{7*mOzx`*GvTiW{a|jMn+RhLVNErW9NQlgA-2al0 z&MJ~35Vg~Ur~d^o7Q*tv5D@k8NFTWs(qh7D9*~#ax;7yBblj%1)vcb+&d=tu z1y+Uq49ns{sr=C(IVgB%X(3WTWJVl1S+O)5`uKtwR0z%=+uLtcdsuy<#ZqKGx!(~P z#aNY(^Q9)md!fpsmWRRB|JO~0VNaawrRo)9o$34HQ&w(({`}`I zH~%JTdMD(w;T}o=ke-}|JVsn6v~P6z;vQkdC4d=Y9xN0S3gvmdCp*ADZ-5~KQ-AsM zk>Hr{L)r)AOX{O?vZnxdn-bIYxTkUevHr9(@K^x->;RG)JI6zU&`l7KiOH&Ja~7h^$B~jV736n8KX7#hVSiti5ozNC8NGKmis<|esBua z&DRyzcK8xi62$2vMK2MQ#e9}O@_$Etwg*FTKdL@CFgdZ1f^=%g6a+(5iZ6tS*51hW zm{#hg1pn$m_`cll?TAjm#w68z>M6Ya{7JAW8sc4i3C-6QM#KovzD86_R83W&Pa)8G zLp_AqjlvXI36Kn#R$D4B2_{Hg>D{^^l3ZuwIIFg+h>3i+hHfbgCHg+ZF6cVTSzeuu zDggQB1i|$2+4R^ARb}9R{fwEu$6FO)@)J>Y{tI)&Vgxg`mXGo~v(VITV-%r@v2E)e z)34rku0*Q-+Ipz5G4!|WDw5C#rcK`mXr6H2V=qqcylNN>MB3{m;fj~H+J5&pSRed% zUd*Pkbm(}?f_+V>=<=#6*R*btJ;<|^7MorM@hfN_d{ONxjJ+aVPV6c3IY|zBMyS2C_Sv8}_qbY460x zImn;ZehVaiFA99s_H#pkiBcA5HvMU>t?hE)N!G#Y^-~qTKqoWvfd44 zpCha44EAi`9N0bEVk=K_-mEIJWO}cYy55PBELRZQt*Aoi;k4T6-g$xppv~G`3=xza z+XcSQw?CZ+>l)VO4K%q=HprW^&$J=lw)dZ{S7|C_Gg!ru%<}cjZATel?O3jKwen2t zOe=2<5W(%dc!YhraK2a@(;H?O1`n~*RX)9X75C#mzqgaUH4$+F&&gM~Bu~!kdWrG& zzt*?s^4+yeyW#vg3wx_#LrJh-3cT|l62se)OuZ17_ zY`)Z8vG(W?unl`x#^c)Fu-z2($s17mS9QV3Pb3wy*P8j}7mcMn^*lYAMT=!ExgM{< z#m3fgd_MkGn=XT{p75PVa*gxKS0hXQ@}6q`#-&6_N_$$%#(B84@kWw7`I>W;wZDzQ|` zGOD?6xM};@)1;qFx|45lzZ+ubyX)9-T!cy4M~11NtJ=B*?Wcs_qo$`IgKKv~Z;O4C zpT2XRp}&5^A*}a@>l-_k+Calh>hoJ=YOJ`AzN=K=OuNEGdROOU(`pm zK5_lMp`E3X{K!+AyM@ni?5gL&d0H{(;)@|mhfM-~LeI(e*}-&IS8GQzZ=AyQPN0q_ul$JJrU2y6+TtFO2d=>D#9!N; z%O+apu-86x>b`y7e(rhx10F0IAWq*2*8Zpd3Zi>lano+N3B~@fMu+~k>Jk2;&FgL| z=kgX4tWd)r2et?7`&rwi7@lFZRTCn*(J#QPC~RK`HO#1>6!Ura^h25E5jUx{*IMQx zTu$UUk>t%w7NioPV&a*bn{VFTDgSNkf5!e=p!q_0Kd-*aKQCyoL})&QkWbTIfr~(} zZqTD&-ECggfHC-eo}R$)&lc&kbK#;sM_lzhvvH@$W6m~H#?mmlER3fU;nMb;{Ygb= zZ3inFoHhjGOxJp_E4jMr5YtF|S2XPRd_3>R4aewv#KUk+5`XQmA<@pbdk|wY!?iG) zZWN-P*5g64mF6Bl6Mt=&ipBvRNfXD`;PRII`Mbp?h`qt;ZimBkNHoWmqf+H z)*bum0eO2D$>kz2q{}Lq)(8mS?*3;9|9g#Bw zK4lLLmdP($PB{T-7DKL4Eyw~qdMgu;-3jZEYGCVS%?Ojahk{Wm)BCUT$%al{v%efL zddWv;OoTFX=E10Xa(Le9d(%MrMp|l|8?Br%KNanDZD;Px4QB@(NqVND9XBD&)uXeaP}=gn zwR>V#XgRzOUgrIT#RV$@)}<4bpWC-S6pipgd62FvYlpm}#FQfG7r$0DRtV3KuqhD+ z+)g7eMr@Y!ut~-m>=|Pvl~z!2XM$%NqV%OksH@S2^vGiL9bf%S6hRsCbX{V_eOt0k z!lRw-k>`+mXo5vW=uB^j`Yy$|ui>@ohm|Ob;wQBL28W`8{=~3lTbQsvoPA%S^YY59K zyftHnJa*>=q~)RE=DHQ9=2l4If<9CuwszlOw!f>nQ4@@=QlxNf$!42T5MIf=V_4^z z?eip&HQ*_zC;h zhDG|JNl#~=gnwRCSPN38b+mE=qk`z2k8Q+u{-4A6PjC5-@SoiZ9h!Kw9{(b16lQcF zS}fkp`@J&&aiYRIrpU(=(v7IQAw6mtW^hC+5T|v?e2iE4``Z~=%Bj5F`Glz#8m8Uo zx$1li__#DV(@_d_vd5ym)il4q@5Ycc50>()$njun%M8m_QR&oX+b@t-g?`sQdv0t# z+8shtoIoY{&=4BLVZ8Xd@iy+fXWe-BojvfT=DfdX<#z{k&@GBU!h+ZeRxO8S7gE zyQYyUa>7WYK31vcrJZSs38ckIyPtxT1XrJwenuwHuvoxboBt~r=O>5VJd-rWe{Z3r zQ+S96qqho}7=hFO_aGZFtzcH4-QyxJfn(p1C<7mhbqs05~dr%54X5vyv zEa`>IQEuc}8iv=Wz9SXj0Z;RCk;{l4)@S@p-=V*aSBe(DoHpou;TY~B*%j1{W;|Cl zrm~#6?=S%sCfwn8oH1ywCKZsVy4**VTD+4+9wKfP5g`#U8nviEeP|LqKpLX2ces3M zt8;-H)#2a>xQ2dKQM`!veJ8JFEa%_(DNobk1GvrsycWp9$I8$d;2)(00Bs_xA(l02 zj+vj1ewk*F&$p0gZHU38G!YgAB$J%-|T8AdJWz7oX}Lu)FgwK^;-kv387 zcAPcGEtlwHhx}%XEy$3KPwc^6;tGHJ;H!yxCsLLh@Uad*F=6|eM!18EOXJm<$f`#h zbZejeHFb4~JZ}5++#{u@=h127(5f4#b|6H4gotlMM3lfc{mK>nb~&wZQDIF^PJZ=z z1bX`DP)t}3KX}P*%iR&{X~#(Lg-mp$NrG@=ZA5n9q|2AB}< z&$njp+E^)VEaM7gs>}1l4T6he zd9K7cn6hidDJgT6m^!_oBnB-SIUCm6!#g`w7cIl<^qn)E#XDJ*4c@>eQMEYQ^@ao< zi1$7fmWJVaaW}Y8wm!7(G=Q61-N;{?exRbv3KGb%vp z@uR`R59kT0jDao?4h7zG1&vsj58R&+1M)O)y?9hF4nHrNspeomoj?23zMH6$nX zsl{Q1{QPqSgilp}MF%#+befrogj~Ati0LCR-YTw^<^d}i+(ijo(2te`S_D_+!4F$#et1>P;Uf$uEYzLBmQU*bPw$~$Wk$Mi##T4Xqg9dc8F?m?vfqr;}RpJ@JkZljCxV?IgLZPrC^yuduImuk%@| zNU-HaU)Il}EaS9={B^Nk*D@WKk{Q)D_61Vy zrNCdbpFd`gtaWyf7w=!4?L?zwrEmfDrnQ#K0AoO|YlHXt#=&Jb_)f0&`2uerQ6QK%cY(IypiK}y(*FcVk*FE$#iyuE z*(bEsCS_tjCn#_D(K&A#D$d?`?lu~Lk03Y9Invdw$!EEw#SIqHQ&FZG4>4PQ$8tKQ z#X#h|kZ~VNDoFSl8i7jtPL+hJK{m2z#2SrM~T;QpQ2@k^uxj=ei z&K;jz3Pi^oxp@+A;Vd8NF~vtr)Z9ny`p!Jdy>(4v(*>V5(v;st$w>%ZTM$ItHEg-h zMVEbhSL&U0k5;03#qGL1s*Opn)ixY!p7iz}r*YnxnDo~c8d(>TA=s162oNABX-3sl zgJs-kcpAjspo$Cgozetg3nq0e7vGBjJfXEOED0Gia+D9*o{+Z{?kY2UC8w%ug55`& zD}quh$sTPZWJy=IKZH)URJmU= z9$H7l8m`b(-PO(GQnaTet@K22UB{)a%L{D*5v&E=C>0EjQ!J2$F`Yl}>_jyooW4Mf zx%6bGlp2}v4|kybmfz~Nq;&M4%^LOToe;*KD}HWIs|>JBQ`^zTk*S3oa-2skGpi;a zQuij)ktr=%TPSQskyzwnAk*JjqE;Q6FDHm7Xj>>^l&LGeZ4Xf!ONcZF#qG3Uh!@scEJ#X8fD2*x)pTB96BK$iA)S z=d+6HsTq4Zk5=`tDi*cXxR6!~#{@b}s^^x%ZJ`Q0oc|04R*t=e?G8+_*V`fwsI#DF z?dwbTjFa=ZZKf0HWD7OLok8zkEL&(a`v5)h2PfBI0*T2T$%_mTBq%1*?Z2 zYlx5&W z+yp?Q!YUFhQsV|nz|ql5!7Gf>R+$K(%bC`-s5r{v++h+yR54#!Yh45Y+!%n2*R3N) zd5O~k7xx{R!Tof77p?8-OqNv5dGRBNlQZG&PkObH)%Ug54J&VUZZy}qT)1|WcEbv3 zqnG8sgC-Dy$?*E|$E9=Ci3*$Ou&GO67gn~z*9?L~z}66-k(o{mj*re`EuvHFE0BV1 zY?51t17EoyLj<@+JoExFy>f!Xi2#@4+GXKFv#~{SRQ7_lhEWByi-zK3Q~?X~QsMEt zb#`hCam$A=0I(<*l6vn{vw{`~R1wk1T)4a@*BIy7b`%<=R17FT2_!wiC}?Q2T}E}# zTor&nSIoss!JR2dNndp+xU)Yb&f^fRSIY>cD6$yC2EF6KqPA<{m84Qt{!ob&3c_RK zGIn-eU=-K1BXCK`*%87ijLFJo`bM}AfPGZ1ZVogdm(78HI}zHP32U-z>z{-|j;G`a zy||aAR;S9-v8`vPXYMy=xsy!DFbE#Sxka@S8F8*PgRFqFk`Il#&=FUOU82X7#B)O2 zx5`ox6CV!-Uq=dK3-g6g-VA0x3CA+nQuouv-=a9NqQjgUG2mWBg|KKE?UBMCxJ~L~QvjR$i1yMX(&3V*#?_ zvVP%_D7uR|O_5k;9g_#)1_FRTHdI z5abp$r;d2&DXL8TOv8}*W10lAYH&qF`67kymS!ZsFAyFJ?eubE;182~zx72M<(_1O zjGzUYM)|%jAGTIx=tS%FAwh^~J(=7$z-c7U`-exjV2+s5m-rdMn#G0S{2uv>{$$pO znZ|2|;*4S(Fm7kVnQ=ProLQ~uM_B*K6#=Mk1CviOlHV!T zaBw51LfGo??doaCt71?HPkpsum#p0;BQSP>-jVgtQJ$QH1F{_Y`%x)pPW`-dR2%LY zajifVyQ*+LkoDC*Uv!yaIq1C$ivcK_@2~JxzC>5^Cv6CAH?i%w@m2nLAwgJQfo?aW^yePOYWo(GV7~DEYwN0Fo#IIJ z%MM;%%e&%yZ#FFDvzTz$AnhZ}9ibk>*3K^CU{;R;uP0TF+C!-I^GMtnG=7z9A|*C z^8JQta_lF<1c9G(zRspW3XV49AoRzjZYfxiu32=j|ERO*KlF%|=ywT#gjc8&?rqmZ zJK=PwsPQjadcdGFKc0Bf>L=kp&c<0!)QQjaM&7H--exj%n3;d5Mi*i4k=N6p$B^k* z8>d2lgRP-(SPU(eyBHr3A zrGvs_dGmRMVTLBMIPEQ=e5}}e;os-;zO_u`?b)gjlCk?%OBDu0grNZ@B+rPLFpb=> ze{sVY)oE}2Imicp_IPKt_O0){u<3YSfF3<0 z&rR8%&QVX>!fp;M<&8%G*ZJ()`08Shyk*76}(t8ugna_DG8 z`;o{RN%^HQa}QVBOx_VTOe$)nl_s3xX6*3Z4n~XZTrZK8+`-^63fYwFIn#kNwNND}T$e@zEoBPw($j^UKlvOAS zZid3s9nfSK#0}H<#!X1D7g7{N;#z3QXnt8Yq9H>cnxoY8j$tt+zw=}#3jelh!Wbli zRt%)BEPY8K@mSd9$xgOWHWBBaD!}@7-f4I@t%qk=mp7qqyvze3v5N)jiKeO&-eo1U z9=;2Dyknvlf|G(tc@gx>Eh}R=OvB|@mBAqstNdzRd`C6h_tD7ae}L@bQ0AtF&!YaZ^J(wDr|wQGfIYQCIuCjpx z1-DO!y7+p1N}K^6PA>Q=`s*(GT=L6}bDx9Eg3yaEJnciGPXP+nqr!{ii-c^FI=S+) zj_*l)JA}!qUucRW%Yvtl0%V2ZO9g~Nn(kuyoR-u^-Lh6 z_mIV<4y!tJQM#-fZs6U+IDf@REGY8Q%h*5G2^Tz>)=oH{E-Y_V2Cf=aW}pZ z^kO^re2q9#77JU$%d78(iYSjTlXRNGBk*Nq&DlPhbKDNwU|qPIL|m18)@{L0F~3&}`MIT^r7rxpUom$tr4NuNG|QjU0kS z$}y{i(d16tMPD8-zABk;sp|PCMU{mih7-j@j_G7xdSYRY>lqI*$N0c4a5_jrPBmyN zU|}`j?qs%%plmTP!>3rhN(yhy1!1z_=^3Ghd%Xd)hcx>a`vZ=B^3_jGsh|N7@H7Q~ z4vl}?hs5HDxTYSupe;9i}A z{+DuwgKKQVDA_)F-r$H>hsx2Wbt28V9C_LAPfd2EU2xm@UbtZhrU<1|wHIgTQSL9X zoDEd-ENoBZ-?sOJ99#>7HIb^(zP#1o6bL<_7l zsT9?Bh1UR|HC`^1%LV$i?R#Gzdf^j?4+i(G3orST#V+MjMMLdhZuEE4BmPDw*^n<1qW5w?_$z_Ma{PF1!4`EfK}QrwM8RKeFcbH;X!;iT*Jw_giV0F%%berIc*R`b#xe;%o?+8ZMSL4Rn@;YR0oZ z_#L?4b53ZC9XI}xlps1s*BfY0^^tH@WV&Np#+*R4XkQ?AERfmboSp6X9ar$~sD({L zU%&pKG7Nm`RW5EYK}hX2Bz-9mplDPQ9%^l@g={wOLf6%Mx8%)%s(+j!A8;|&1&Zzi zkF^xhHhg5E8Xc}&7V>=y1XkaYv>3qwJm1>VgnwREDvQ%Zn`6um3j|3BqE)*7z|1;Q z3jg~v)rp`yLs`bS8c?f1T$mo z2Js>+s(N<8J?A2#*F?oTa62@6>Lpxl@k-}|lqJ9skn3fNpQ#C#nnI4`iv0KRj?cVm zQS6K(HnyNmMLl6TU9E?n+7{>ScOVUz!Vzj<1-4@$h2y8SXtCa7&5XXk5v!7V?w_tf z?@wYbqDD*KsLSeTnqj0~1;Jml@I%U%w=gI7r#POnfw*2c1-Z-BXgfqVoZFIF>r`2e zXDi7Aq!oj8rT#7db*8Pj)*WrCV<0fj>XW+9>1+p{O(-F=&r^R3@<7?hwx&s@WBe^v zbs1e^FD!71zfO;NkIkGUh;O1(9g%GFF}`9M4uu2%>La#e>enim zsfdi?lIceX@-e(x3Kcovg6k`cxgvDl0DKzYpwznuGx4Zn$(1)95<)Q2Q$<- zMPB9QK|#tgl+x0VMKzCYuwS7RZUR=tUrgHdw zu;&M@;6PlEz+drQdr##iYXL^7GvuJZ4hO2>6~rcy@q(!nE2q%l!!6x8V%|36zv8T72;uJy7{!aG@D)(~CIiw|!PN_t{n9!io_+VP z7`(DlF|^|p_xvn`6N^E%<$p2(gTOSrcflm-!G@8pxbe!x`Fq7KVVUSQFMV{`6m<>o zXr~fs94NK9a0jUh`ly!_MUb`<_>wp-EsW`nG6R%teo^~Ho#Nikk9z}v?2#n!3dpzQuIHZn(DzV zhI4+If}hk8^8Gns@ocB39U_()L98qb^rYzWtoTJA6VI_H@^?(RNb;(Zl4`C>W?OiE z*v;2bw8j0V(M=t3qtPo19~|&B2j=RSCLow#sSO5oj)eIi+WJOD%4c$Bo7E5SP*J87 zd!G|VMf$pch@cQ=ScT@H}j*){yN?)V9oD$=JvfDFmY(wlG=#yc=(*N!aJd6}-hGi7UjABr2vmIN!W znPqJTDtfF)irQxtiz^uWUZyCSfN`loO@LMc`T#C5b}LkMC-_1Ozk&UBE!qDvAlw`oZdRhmLsN?aVxrQA%z^`}t+x}% zkPL_O!&$?_B7E;zYPpY2^~TU+=kGub3hnkY-d|j-AMnx9MAC7&KjU{Q0TkS2@+G=x zaNmEIHFc>o%f}fO9k91*Q@kNCxpuFyv7y*OWH!p`Q;~xM063$f^Bs+&DRCiVnYAlOb)VL}u z)XFGiPzdVHS{P{5q*Q1@Chr-}B$6a_F)?x#*3wwH>L91_&N!^CQ+av#OF9uHQ zpN?p*MNgTd4^2x|=1&25+$2?r-P5nGq7 zpk*r8D5znfL~rREL0YAlCmnzppzJENKkS&lx^Px+Mgd_u&PAr_x5s>t3;M0~L1ks@nS--E!mecRAW-Xi$CEjtf2qH|*G@IQ|F2;*Ks9}}LC z_8H5@5xYNq%eDS0>L)G~8yZ5!I@Bgw$5!@Oc+sQbp3viEL??xNw@#CFs9VgjHgiKL zNZY~EdPoQS#I3#QnZRu|AMeLDM4ZcMkpdak?Y;T8dN9SlDsL6YOVl~Ion4F3 zi+{h0G!jlO#cpxDD$a!YhM(eBD z77PDsj>;?l(eGSnaQgjUp7OxpAdD^Cmpk?88u-0E!mvKx+FtN%Kwyn!Vy!Hq~@~Fr@f5%bj7? zB8Bh`<~^QQ>ST(%?#hI50oJ~IJpyU%!};$p_`PtR!sox2=9G3ge%M4q$*ef~vNpF7 zh^|}H7CNy%(Hd3|S)g1IYYtlz4zz-=~Ntn z?t(ZrnQWXnr)C&UI)4_o@w7Jr{V1~oq+Cl4v{gfT%9Tu26F*9q9zy!i?igsk_Z;`B zn2A?bVWF!?p!vnmL`CGE#CC|lZ&>oD;Whi6;uV&j$lSIxUpn!P+%5|m9ZTG#?uKpR zvS#c&p3Y{MjADn;Y9F~teGTJ7OJ|xUJ+FAk410?>Er z*S)K~Vx}rMf)VZxNC)W>_W#6>R<=x)yYeH$`;4ELm02*5S|AQMpEx=wCWvt-ev|r> zdw>7jcD>Ud*1hvpLm;XJE2bBy{Wtc&6)Kb@-97l3B6%cZ^F+HMG8b6G(eQrwj}A4> zN8n~?caRs^(L{`Mlsvs@J*b*mSAC?!%;^Z`+?W10X?XQGbUeA7yl5dk(5C6=Uf^Ld z(k@p27fq=HokoNIGWQtdvzu=lpqPGPyv-c8tF6w_L8VG^xoD!oY|@c7>cZdnJ6&K0*%XTRnXbsP8j#kSg8k3WlTXyVHgwVo*Kc8K0Ue9G)LcCPw|SS~|#keZ7< zI=lVZrB`n0HxUI5Z=dE5J%owdxe>0%S+!fQdy+r$1Gn4Otbmst61zZ(C~!Ur+11*+ z!jq51^cy_u2%5os@yVD1AYD9I^{FZi9OiOFc#ASbSPW2EO#=nm_!PB7wN#8XglhL(%W*F2iQGAf-EaTdLW^SR%!j*>u9|S5As(Bg%S>Vj?vCfIt*~9@ZC)?2_bsf+=*qh0dzL|okr!%g zn-OhR^FXCr2>uEwpIt4XV}<`d&zzNB0>MM^R0Lr;-^J%z89iGs%w#Qfu$oi~c=XGC z1!!+VGZuj^z+ zO%XG@VRR)O6qnEMsD#zhgOPEO7nDLgC{zp2L@{|q{vcYUq8qrdq4uGc&3;qCMByfp zoAUq#PkWxI30D5LS7I3KtBv68ivYaEoYOix_!0Xb7{Bkcf_1TnEgKTN$qr$aDx>uJ z+7EEGeZGlr8#S0@X!`Ho{UU0TzIPMRqc!-;9x~n&y~Y$Jt*+mjD2pD?{^+#1wUyjM zvuQPLRouon>1lxbu#`E7!PnyvvFC9r#n8}FuOHaF&efZ0?+zVR{tan2`llMY0B1fy zvXuLlTs5Xq<#vTHc6Z(?bfu}elJnQ)_?jxP54UR~(XoXnBCoL%RvuYu?0wL|h~UYI$oF=_cWMu=Ps)Lw zJjC~i!5xnaGeL(OK~&Rw!2tr|)Fa+qMt{$bfiK2NcHFh&KOzfRc+aM}0Bq29eQstI z1;tvAx7WDaFE&W|9Iy$>=kM2?b)#E{QhqI5AIIBJ|639AK(>ScEz@8neS>Nt!GtfZ9ts_~#S78urXv>n zaRS7>Ve{LsrQ4MGT9KnSSlO*mb92NCQ`@Fewh;OGu)B*0YTmVSgbhb^5IlBE{{vHs zrO2~mkMT5s&aWx#h!+KFqbW=J#Cfb3BM%NFR48`B-D#1^g?Mo9&+K#83-7y20^^Lz zqqfQRA?yFe7+oYzd-3NeTo4+^UVMU8As96=9WA}DQF4ikk#ZOVi$~f`H*Nvs9{D%G zxVzNko0RZh_v>GX>a4Q|BaQqIaAl`%SIUfJJvEEzEc(S4neg~Z0XIMzfyb|VP^$+l zEn)35i*o~b1o}Jpd{bOTb~dgn0&J~BS_?S7gif}144nLRJZEOhqbif;sk#)mA&;mg z9mCJ4o|xQ?ol3x>6_j>&yWxI%7oPJ=a_|=sqWHb1gx?8`IovrXAppC%KQLBIj0hDv zTaIhbb9g`?MgNwVSl}}>04x|E{>ap;o3BN}n6>lVcm0o?>HZhM4u9JZH+ZgyZwYXA zZ4UM5|EJCoQiAwv$_V|eA5hxm``6EjDCnkhW4AL8>SP*({3!}fZlbTssdth!C` zx;?+RDG@g&uoId0N2DL(hga7>r*4%3R5s34wyagxgDTIwxTDo;7j&{D*KL&oI&zdt zo_>Un1kGpx0U<~1}Fug?H+myd`b8}uCffUuRcrmPUR>+_ANe#?w@x) zjvO;DhCjLQheNuC4Y^g;8ymq72f0DSXr5zLG)mfcXsiaRhtFKWmWjYY;Nr^{p z;vF+D3-B=QI57B|YMHRE9WKFO(%$TmK24bLE{dSd}5uV2Vs8;4x80XCFn13FWMqwYPY}hdm zJ)Df6Vm?6BhvCu39UOu}wGYDkwXM;_&|S*Z_sUUgBirCLPbQm3pRQ+;szg_no`Qqi zuoypId<=7hQ#ICMpqcUK6<5eXy^Ur5iTN?bmYt*B) zDNsG%V4+_`PL2yt4T0{r7J}v9{g*d5-(UGi<4mCJCeubioanMK@Lnd}!FpCJ&Jx!Y zM);UiijsUWzm)RI_GfbL_xWS~Y=tFqp?cBO!ySK(OerSdEFwU2qwEVMymP5rU<{y> zw*`SHaOOmxj1iz?$6fY|qZIz*G(^v2Upr(%jg&ivbTF9o>@AvDz7pgm24l&*E$Ncn zbA=Ynb%UzZR-A|K)^n9PGoQ8cZLuwdH;1F8E)W6{hN5ffHY(&Tm--{fHN`)L($q!1 zA~$!AN2THgY93C-({gguhf`Fu*LR6J$kh49(pnV5`U)OYE6&Au;PoLtJzR7LFN*_- zM*_VZ8!$4dJ$`xZ>+IZW7&}eo2ljqQUdO7?rz^jn&XAWe12#szWe!{}9r2gSA_&$% zV>K6Yh$OlYS!Zt@A0^#@bBGKFd1@6kDdi=c$i}73m3pT_ou4Kme|)|(!i6p(mU~#& zokF}dbd>S^Z^uuwr-hb`CaE{=2d#Laz8mQ4>i>-*`=yUd^Ua#6nVrzGo6ca|S z+cr0RZnREy4oYkHHkv!eB)4JT&3|Q+22O?+r&!?`5fFR|M8sLLrmcjXdF#t~*96m6 zC|~lVb(MuJd7Yv<+i-H&!QW+O4@*2L31P&WQ!2TQ{Pub>OKUFSLm50JOw>36PHDzm z)T5MU#I>yj7Q4&T7Z755%QU`bJSaj!oP;gOqWnAHW;dECdsaYOX|JCi(Dq=uZylH@ zCJU9xb1xGZO}G*N?|b%xjQj%nXzTOH{~O89=luKX1V(;exSV#MfV17x9*Ij2SM)ll z=_JnCYf(CaA`e44ciK{C4Q6nSk*Tf$8xkph>1^mj^t@c|2M2fR+>faDhxuPKHfQQG zojRlh?E}Xe@yG|~J%sXt9le-1ksu*tW;CVhg3{U%wX@4 zekc{RLf8RCHN((~Eyt37Cq2bM8-PDlR-Pi#_y^-7;S{9v3T0TD!iDohiW*S7p!<#p+!@>=Q;Jq^w4?mLg!okgraCpK4WgdIU#Z86(I={z9_(=XU zfrIB0!R))ksJ)1s_8e~{F=tb(vK9WA!hvVdJzsrjBm#wRyeJN{E3!p-HqSBb9%Vk_ zH#y7K6g4~5q?z5pXpT)vioREZ9)@)rOK-)bnFGK~^P7SEz&lWqbUGxD+zy4_lsFOt zc$L{$8_Rh)?Li-34&{g>RUM?HbEyhGq;<3<2b05gWZq{+5C;wY!M^_e$rUUhbu#Qy z{sK6;qsrTVNE|mAS5$aLP`=AwGpL|*9&LgHHR`eQFiii0Aj}zP(HeLI^!t5qJ^k$) zU7U%Fjs39k@ErT0H-^4`-j@@cult5G0Q}$)L@Hv1v|#Y3)=KlIRx*?cEvmldt|=lQ z_f|Nv;6C9vR^v(W&iF`549v9-Cn z=^C`Cwf}9EM}(=&FZE6+)Ibu9c7nRcneoNSp>~2rl(O57i>^>CLQY&Wm3PG-#)hlo z#W)Ibm=?YaTz5fVB11ehHoE}C$bI^(J~loT%zqNTMhoZ{>zwBX{*=g>-L7zENgYe@jH+-Ltxw~aQ*B%7MeR0H9e4n z$1ocvC1Xf@(I`n7*dYn>x8hbCBL-3LC^~XK4Bi>eGbLB^n zr1Rd;(Ek?qj|5Knq34oDsI`PkZE65mTya53fF13bXYpycY2Ut1D$mHrpnnp>2;;9MezC zh6nbW$em`aQjV~5aOh{FJ?&}wGbok(+X7ykdZYHf%cHjV)k#i}beVELam6IZ<6J6W z=Y*R&5X^eMfY;-m1D~UwL#yAW{ZRe9Tj4gmY1~H$^x-LA2@XsRKUWTlk_FQy1+N?b zI2LDH+-7B$p$Qa;e500Uq5sJrU$ajmR~?>Ne(q@S&mD!*Y&WIqc%F`=XDq2y#U z8i%=QVL&B|0B0&gs-%eQ8<=ay(QTR3u>eu7yJH$y22w!)n8_& zPn1IZXIT=f%&l!X@MVQ0JhhnTq8iyCVAso)Ki9scm~F?3I? z|2*?w^3OMV@|*METw#Of1ty+HP9qnmK+rnGe(l&A7iI#lF?NP*mJ3%X9a;6Ndx;OC ziZ0Fa3Yxw7!Nvfh54@Vdf=5rHX)lz*1^GU^WJITF8^>*2zj)I}Ir5d%NI4?id@e|D z4m2jC*?XfuN31#B`7P{c8k|a=X?1*~3QZ|#JL5i5vepPa>w5)xD8rINk8TCFkP|Y~ zzJw~O(07#lu1=taNwf2=hjzyrX%~RA8pKpg^xw^%(T`9<^!!(-&pDeVWl8op#f|Pzr@SGua#bu>*wd)(p}UK?|)=5Gxf@yX7S;$YI+4w$Wt0n z;k%4qv@Z@f(OswAe-DE=*1X3NWg8e8$GHFv{td-?`~{*fAbHvsc>gz2 zTqvdEVqbHUplEpD%1yN?-Q@|Wev1D(_eZ4gH{8de9Ff@D`wJhY`F{XiK%&3UYwoyD8y-)l z!rb}DAicl%PYH3y89{?`j^tX|$>twk<-tEG2#XZ=Sj;~Nq!HAZS{w0of+a$oZoMzv>IXd7dTpe~K?q(6yj1(mJ(9GCKKL~x5E*JX|EO?)y`5Vh@r zT+4c`k1WetvtYvT1YVDIc*ZnYDiq#`P4+1&pg?j9xfFsI+2h%Wv|QcIk&TwKQ>e!d z=X=7{Kn;Qni^ZGY zI3kaaV84xZ14_GXq_$HMwkHU9;5R{wo=-qCYxLLL9TtUyGdygKEVgMZ0DJX;uKfR?v@M{1lDiVrj-G9s8G%EzA4jz z2zy{CEh?cj2a#5D3&(JgXMjkJ5hVYUA}z8NoD&HZEb8%dF3%Dy=nud8FFUUD=dfWI zghk{$4pj90$ID1b?=qnO@$~oum>BDCDJ&3o2Ro7Aa7Q_M7| zEEu;%KJFMeClnWTPO>YSC6LO-wljG~4n^bjhjSRr{@>yTDx6SJ(*}s3r@_v1eEt!> zjey8IH!~KN?UeUXn0KE)iJ3}&8QvfNM?juaXJo@Y3;)#obB3()1m%@t7TLRJh8=Si2Pp3%)tww~r@B89e5K=j8C|aMOuVNZJ$}H36LRQ z%muenB5ted6RgO_gYgl8P zJ=Nd1-!v3H@GNREGzSz0x?|F8)IPa-%xuj2goA5h!jnvk+gMSK5I1Z+oWSf8EXN-D zz6iU2bUu{KdKEbSy?+Yd{LViL%YOnNPEv`wks!NHJo$>2)6aekW}f{hOw2un>i}{K zhi4yXIX&^9+6Tph$CD#8b&hl%{5$|6ttg*RiN~&>{)__&(78gY)_dQqHi&-6$3UKI zGt-`i%puy_b>5`UPseC>k~z%Wi07gJ0!%%$%N#k{_g}wumzS5Y5WS<+<4$uVXF&ux z!scMdJ^ob7Ol`*RxJJ~j1lMAZ3(awj*LTH|4h>W`@l_d>E$>Z{mU5*!cBNl8pT zLQP3SNQas8C~J&SJ(M_1u6xAoM^YIGYSxg zPl?(BBo-M138vILN~z{_kZH-KaVE0IEZfdR#TI32oO_(J$aMYWfU_f>Q3+`?4RJ}4 z)gRd#N(=C5Y;uOQUxd;cgslndu^TjBfQzg}9#mXXXGo6RSf^*vC&UFY_XMLGvc~GZ z7`4Xctm?K%h>H!Pd^$3fJuFCp=t(UU9i58Lm^h@lg;yTT{$VgwwhfRazAc1B_~y6& zQKRks`Fr?gcMmQ;UI0>+k&zJ?eJ~1RIah-Xlhmd&W}>I z#{GTwrg!O|KAmG9WOceh^WbYjRyw2HrX@Bt*_DBGFW|*pz9#Eh@RjWwp|&^b##lB% zUB*oan`w=!RA1T_<$*`j@qxXGX=QryQ4m=bVfQ5u6xr_r#GoFs?~zc%sb!{9;5ApQ zU@A;$Kf$C$oq!3GG6sPndEDq9)9s`4`u8|{e{t(F?D6hDX|zoQne*)Q3_gDRh!xXm ziQ8}Y58wy?beG!b{tmu@-~B)S9{f)C?*xi{2%ieXDxZF+?+ceWQa4`L`IDO9F7*(T z8J0{rJ9n7ioZ6^nChZP_i)8$u++CRbjVE3-`=m70GBFFFr7w9$2^aPZ%ZJFAdHuT7 z$LO*-4x@XmHmsCAO5!sN<-Ic8Sh|_qg)svM`ODxXA#4|nkkB?`nf(jAe`kmMjdyiV zM_FUE&3(fNi@wHB5{vXMrj?P;jGAMVjgTci78k}7cBZgJk~!=yAuGBqj*pK~3@N!T zy3U`#_I_@Ox2+|<{O~>??LTd_|Lo8G`|z*)YyU#^n9&ChU~DY6)4u!u@4)~2D}Os6 z@f-M5_;Asq$*BgXAL5Hy81IbDlCuTofX0Gj^ovEvsFVs;oj;|xWl;#KG75h)GU=kZ z4!`FkE!YKUru9$I_3glMv`-1UqOU}1`}}#0pv3h}O(Y1_@VtKGl*T&dijsU$%?@|K z_t-vwZ`ogAox8GJVYXvq!xiUoP-U6X32MXzD#1R-WuSo0t_MPC`A~-+mRPCqp{Z&B z#c3Xb7CcsBi@wG&=NQ(K1p}7Qk}oZ>Yov@mzi6kjx5*aMHTJ)0wEgIh&IhD?0DtPI z{{;MnpZ^cwC;yp0nC%}MuLlXBZ2UXj|BWVsPri>2El6wKH%BHHxNebaj+s-Cg7Z`K zBbc(g#jK2I#qOR?2H(}4Ptg(-{YIAFwiz@mC7k;53Dfe5mvXXFs5?DHU- zQDo1vmdfs&aWTELw{NM+IHpNGj3*^uxRl~VfKsE9sfR55fb#5_)Q?3kD9$t}fb6kn z|Kf|5Y>I6I`6l7*_nW0czIvL1{1IXQ!q5M~Am+V;zyJ4s6MlQ^cj2Os-v=Ttvdq&# z%ls*T)E0fDOZ)9*uF?3z=WxCW=UyBvL|Ys<7<3bLv8>K(lrM)FSN-Xr zDGx0J-1kY3Vs3*58Rnp*wo-XO6o1Zsca?5 z+l|0YD57fM`)qrW2^_tIjTsjcRV*#3y1b;g2~gV?5ce6BAP9_{U59Vb=7V~K9~S*p z57}k$=m<>*tmV*%l6b09jqJfRppz2KBl)1l(TDbZM>10c%`x|E6InlpJ+{Ug|HM!H zSfg!j?h*W{pCN8OJpT#2*?R|X-WM<7W*M_Zv|g`%6?HyZIP6 z0I4D-X7OBD;PX*Yw--QJKaqF{rA-J+fdjdsYF(mzmX<6cx3bRz@Mb8uR=Sx1T?Xv$ zGKY-XAQBrkH1NH4j$CPglcTNdZqsH`kU;o7L4!LYE`CtV355g6*k>c)hY)Hz#ZLw& zlMp?tn99xy$+mST>W8cbJPQa|Cj#qpMb{N66l(sx@K^s+O_~i zAqSvBXh(&H8(mXlA!-4nw82(8$7Y|ZOw5%qN0VHOp-r3=AGRJ^zxN5l`7JkPS*-Ds zWZJmDO%ZinxXB6w0}p{rL)_(7^oY`IcP!8P&CSi`!!ld!Vr9H%HmyuA+V*H2McO$< zK4qVRh7s9g@i&h7poq#&LpmNH*=G?ZqLpZ1I!jt2OZV+tD8AqbqDa4M@Pk|2D=!SH1Wa!g(Y;F(R+S)qOQ-4!EMX5C6YGyeirZ8B*^S)w1Rml%L0&3W z!_nJ&#is|&v@_R1ScIdCt5aEo(MqYDaV1*5_iOad#`CnQv0&K*c}1zCazM{XuO(Sd zBy_TIa%GRT`oO`yuQTb0u=p`>smT+x^1wxZ#7dbN?Kl=i6#iMy*kojjUlt~y;`nR9 zweudE&2m<;`-%tX%05I`rL;3{3uOuH8<6)!(`kd(RS88hiGBzMq&dm$xTKsG5m_GA zoKTdlLYypU_bItB`jjnDWUNd;5h{Ec*uBx|Fw3~5vC4RV5N_|R?%{WBsL8X}RYL7w zTs`9>QrR*^OD1%R*E#m!_Uhr){Ee?mX-_Y&e!ma;v&M(;@o1AWSE4tWWm?YiV>lObE`y%9 zGJ2~3)gIfzTf9Q}g-rCx-6t;baQV$DZk6F6wxFrcW2{&3Q9*>XBMywuP4uzl?PA<7v+3^`75}{v;u;wi6v&>)IJFKF`PRoC&@Th84f81 z4FpQ7KIi*Vb%Gc%Q*D5d*C?Wp%5KXkv63F@K&_oNX^*wVJm|VvuDh3_i~^>x)!F*a z)Tb?i;oEMi9houwN$j+c*yO}ksB?F%tR-e7u!*VVV{&TE$Egk7-mJ+7D%xYDw3DTa zfTT!iPy{(9$hBT5Nv&MvZ78GOeg7Xf+7^HO$KX0}czJdEEIwnYDbEyhy^k`n#T>{9 z&e;E$Q_m24OiNTkok+4MRzyLXND*-lxfgX-G00YmSI8uWPJ{L4w8zj6EZ4e*V+Db* z$LnD7m&Zz0eyxJMUyRZg7cOsXuxwhwvgxywWy51=7EMaf3A3deal{RovJj6S&-OA| z6|?wJMFI9dMquqR-7@zxg|>1yuPCAta)+_hYOk%ajn{>m>*CX=SEsZWVa`3ghUOUa zC6_QW7764g70?!7YO6Jn!aJP+N=d8n%AA!^A-P0NTN^q~zR~v>SOJAp7Js&q9>rSQ zyRynCVGTyb?6W9}D9au%wK`Vtm|tI4vyTrd7<7owXOFrKLw1(*w zFr&t6+s8HftDW|B#mjeIrcw&a`>J^fkXaaITE|{f=*md-PYI^db!>L~{MLQ5ossyQ z_FfRu5=&T6Ta;;UlG>s}#ZAkzrl1~oWOdQzme}TjurSj>o?)^J4cxoO+Lq} zXNc)<4ZJ(*WRy0m?Nsx0(PCV{_F0r?sX~Z8)I*mPQ5%(e3)@I&=jXZ4dKNTLBDjaU zpgryrv0xD|c8AQ)wZad8?;_4-t@S{gfZF5N@==gACjU}FDs*APV1a{@VqzSvBA?cx zogQ!@Rc)3gALlHky|_5~jnG64+w?^9EDvu`u05(m^;}nLd>z+CRJN7nM7X-1Z1{`6 zD=VV(L#5ssEBcViPGm8)^o}PdCq4c!BPRZ+$N;eKaW-9{o`RB=&vJG~QbIbel8CHV z=dIBkw?M5BA&O}DqrlpTxRuF8wa4pPb*~K{K=<7lnbttR8<(5!0^4fQeGwQ}(cid< zv*|pGi+rrjI6!rLAW>TUSgJA1s3OX>YhdL~+t^mi=0&~V^ z;l(UxEV5nlu@Xz00jICNvCP3oMjNy!M0;ZHRMwZu{VECTc-E!>=Th&+?Jq%w7zEE0%mtlxtfRQt~lqcJ1X3;|P=^ ziu)WL6>M{6^8ux(9&;OWNlS(^y$=Ii{QcaG;W54U|4>*K`?g_~F!gg^o+Qk8gp_ZD@fIy}C^Q+uX_xP-9fcS4w*P3sY1 zQzX!SXN3LItxWsc9FGbpRUK;(JVKCX$)z?cd#RLm1&~whcDrt6Z;#s6O|ZbKP+U<$ zU5gd2!AlR^M*}6H4ZNX24R&yR)-7xiOGj+ z)yg-0^9>c5eq#ekVojd~7PXKFsFIVjR^ZZyUyms5Mi`qLQRk8=lvY+&JQ3NTIga*O zxwBQnDx3B@C({y=R{W6_bk^}aQ{fDS?u%V(?(r?l98|8w4}dc5uE}dl0R#K?vgsT_ z{y{Q0L$+F6n@%1!NQ^!YQ2XWw*`bsS$c^!CH z$p`i0KYqRVS&ZztDvUjB4xvXWX8boE^f*ZXRqze(NGUE(bji_zazy!4?*~ubSY_bI z_*bA3$^^had15Q)eFYc*&q44qRuo=SVmDq#VxX+?i)in`5K$J{CNfGZL}#Vny*iO; z%a4umtp2XpY3YWbrV?)jRFfYi4RVraYoj`E)10-t1zMnw>D*&aC>z;h79>dx73819 zOko<%V>w<@b%uYKyc4ySbz3dk6LG-^I&O~Tz20{&Km1)~ksnXqJheTpYL0&dt_tsa zBiEB>E39$yg6jQ}*+tw5Nw5K7QKUd>n?w&xGhnzKE6|eaL4C)WOG09Mg#Am?v|0^t z@_ssC5=f#}MkO0<$O+;YrHrAO1{vKI%j0QVC~f2V1H{Uq;HL5(x2@}T-nPE(X{Oph zO1mQE7P4c@WttFhc8rwvnJj^WoS$;uV=4);FVyxe-z}dd^dYQ0gqV9qo<{XhQ&TCS z7(1?m@Nc$b2+L_1hp}LEo#~iu5G84Wi6>y`|PF0XhhbHjRp$=^#|sDIy)-j zssUZuW6gVv9}QV088np8`cczkNF^oow$bn}%$R`e@gz)CU%b_X;%{8rbcgSepY2Vv z$TffC=hqCyyN*0Nh&6tHd8(>@dXMAgeW^GRtHB#FW^xj@c=9BX#pm8CwG%W1c4$2OPENJ4mJceOcC*u@V;asCVV@FMDdaQljSWz&35MD_oc7P6?=hbw z%4M=-mJf*admsKm=QOf~H_0N`?6b90shiN+`KGXo4jWK8bK$Y3jDIz((O(-FI!c zX+=~&XzoW!o0kkM`r7)m+m6FAG`j%$jpB^?42uP$0bST*%z2BY%I(>Ng(fZIBeDJ9 zOg)=lJ9mtV?2}d);3a7~L4MKvL&sq9@^IXH>eahZEporoA6JFz1PBabjYls(?1Y=k zzUz7P)jpRxgaG_@1Hu;Jd7K$)lB?!PCPtNGXHW~}*o_oJF7Zd~FN}`d z+jF}9b2atAP9LQw8GOt=Va2>?r}d&e9u_$>4)Ke|)Am8!!Gd^RNxNVvR0;56z{3&6 zP1i-)g*3?OAtmrc9O;pbLK8ujHaBRHr3e=R=7`c?2Ep`06oPF&=c0nbq9G>dQ9Pz| zdHT0>{U%uCTIr83qK9Gb9Ym!1)JsraVLo`?)8PxBJ3 zHR!9Sxyuy>s)vC^&_rb|>)hcNrihCJYqaHB8u7F1_QGNF$Og@;Q@Q}oyl>x0m3X0f z?62xL>2-&mhGy>R;#iK|1Sxjx=pS&V1z81gVRW4Ph!U9tdq**g9QyrHWRbB>s|7^b z)Az&I`Kh`tUc=ObaC$}iY%Qq2p*8*(-o@BhkJ({li&1k-1wx2L#<#(fAiiVdP$1gH zGrh#I1ZIS9Go$udQK-xkYm5b@)sUw_99XMZn)al2@vbU9b_`)bYP&6)5pi7_e@i(v zT~SZI2El1#uWy7MF5#w~D-yH@Vg*{4v!Z}?`k&&9xpCz?ZrrNf8Aa+i@Q#ZWFo zbyaC`sN@#qT3Lmp4SrD|G;&J|j_;*tOOz^;)pdYh%Ixx}Ohf0PR?x)u6V%=Z?eUbF;6xFH3d5t0JF*!o z)Ef$27`3th0?u!5i~zZ$(x8|PCLS|prvpOBw5@n5L*3;CM+vTZ)GHSO-A0n}}lI9hZOohUL@03q(lNljB1D6N;YLGRwCV`8?7BB2`s zvd2VdcU{U0btwp|9GnEdLs`FPLJ3JmHCI+v+SuXRdfw?vx-nK}3?nP7wH$>`)${ha z9yBO!5j^n1Anqcqc-B7!q{QE|BDfhdGX})P!b_}>sAVkRHnjDTCK9XYq3k3{h^D40 z?r*0;2`0=wKi24X9;pg2;`+j;t-SB0Da3{H%I+}LuF8DHGl``_S;pVVI z;b3ecw?t(*;og)-#}^nT`o}_?<1l@yOz1d1$U3+nMcj}z4n$y4azkaH)K*icF1K6= zkrjV0OKO`Ts__!k?JvU~S1w*W_-d1FAmX~zi1d$u?s%ga_(GF+plPd5$)k z^nP?~&I3m4Zvd50c&<4UQ%!*E@kKA6(09bCZdACu7ZAhpHUoQ%;@GCGbdkl-X2{53 ziO(7oRuac|ezTSHu570@!2+~wnGB7bE9>2PW|7&AQC@8px3v%^y7$E)R$rCx|kyGP54HZ&G1(}J;UZTww*qu>bUnyJ< z9OmT35HeJtL>M3Iji0+tLR_^MBBK~I${!DZ9mbyGXq&~PZ>L3VACwb6T+|Expuh3- zvmXt=AA_-JwoUzkAD@8hz*RhbRyBpYN}yN6igfV6W(q3{R=2Zjhs`jJK0-rf$2#XMsL!qSG3 zX%VvO?;dihBja*S#6qaB&o>JK*o@$-bdql7(1a{)SBkZt}Ew;i8!@PUq9r;{ZzKf%=5n9-u+ zXt1FyhUFP2oDwN~nps zqz)bH^x%(7H(eTs1w`1*(@*zTel+#4p@e$=xWnwRb31Up_ph>+7@a4QzcFvKUE3lP zc|k?3yzEn9R{Lrw9t8<_D(S+GF}Xi8ud7a@SG36zSz}_0Dcij_8On2xP%AcK3@wg9 z&Rtfry&keLj?{G(5|v$T5~~6)uEQeVRyM{O=uMXhF3^P-{e!Sn8n@9?MS};nA=!V5 zJjl=Nop?Xjd+g^V;v;1>@G(6Jv(7jW-g!L+-zfUK=H)^#RBsAwxL)!_j+Z0ZWnA`V zGrqqdO4P<8x0MdD2#YXwc>>pgt48(ISa{>Mh`|97K^4a3FEYYx+g1+2`)HSyZAh!U zu6Fa8O6pUxwR@l0X0yrxDM5L3grdlv1&+t2$$rtYya;?ABosRK8flQa1rn;?!78*s zL3In7b49o|(hlI)<)Jcpz`Up~h}JkiW_h{Nx6Kb3XHOfkVLr03$$8D%f}ClMA7oxh zJ2}mYk7G95Chr_)*|U^@%*4hc+dS@lVa5`L6|%^3qfaX#nZr6-%uQVHgI^_8YQ5x# zVU2qqDHJg&;k*V>cwp~r0-fY0ESr0REOF@prTZn17rC2y(i&4CHEZS}~(9|L$wcXcD7Em$TYwp~l&JPk=l&{!sD+40c`SG!ElxUJM z6T^9mAI;cA8qmH+3Mn*^Ts89N^@oWoyB}V)^vA?lMFBM-LkC&okB7ge2s;i%@I-hg z6B#?J1hyAVJkc&b)$2vJ7*LEoCT}&?6COG7Gxn6Ij~pt*R;_^os!J$!8el99QKUjj zYyFM&o;M)_A|PGeDnC#$zE^EONu=jBsJ{7K#3#t~;gZCdzJ(Qq5QdXj?P4+T|VRX16Dx!Or|BUG6kyP zU+525iLfa9)b=I{2L+R(8s*w2ZcjegRox@)aevhD)p{Tvt~M%G+4K5x6m#wm?$fBI`CKam`?n zJ7N12JOIKSKXg!g0c`g1tQCCjIbQM^PXzyo4%1rj1cwk=JTDgJO!E z0`dc0KA#qECs*xza0UBp&27;{^!z$b zMCVe1j3+|+k*NobV-vybLmp7J^hZD}&Ad3}dp*_CbA}4}e(9r_xsAvTO ztYSv?G-7F_-!=%v9%hiZ6tLw+ky?r@%ekNo)z;W_sm$&-Ed!iZQeEYfEF#y-nq)(jL-L@g1yNrmBNZY)y8|Ra9(RNFzY0e!hU}VB^?nuq`4~j5l%q+q_F83*X7OMz6RS&ofX+NfyXq+m*B9vAX$g)*LE-y#M=n$mi zHAB)KoHUkvn{UwTUTgewVQ(H`qhp;gr%CqMT#L}k0lZe0mZ0Az7O*_o)C7khOiV%n~Q8K zD>4b-vgQ?)ZO7wp5@8XpS4kMax-qtmu4CXi^0shdzy%H{I6*=i1AruI#lyrI zWkYtTPo7|QSuPQlAJ2ac#(t#Ltr0c0vy)dZJ$YM@+h#9*89tsF#S!rkKH~1Fr*}be z|0!1tAcUPFDvJ{zWcmdLpSPh_|B(xter_Wjgdl7%;gQqK8=Q;3fv0PD`>BxhDD>U?sUWJ`0WEJhRFKeta^lL*Lxico8iW{T;(!$2rYK5`A zy?oY-fQY;7q46RJVO^xQSw;(h7;@F?rKlfdlWd~uV6%;hzr;fd({G{~;hma(G{Aa> zpAO4Vq^j{y1Qht>_ztluf!8b-@@Pp(6Q8z6Bj9nccYYy)`pFP&vtjt3e?0i*xPz$b zS(0JdMG+x7p)kU7Vu9mhV^^Jy$}7)K6bQENtbCL3eGVdL#MS^>3Ff@S8UwqrYDCZT z%Y6JSXig|K^C(-4potfj#neN;LPmMXc)PCAJqWs7>#MuDsZ=uvH)f~h8=@Q6gylM5 zf!kM8XRI(*jr3U&D!UR-o6cjiS!}sz7r&7DqPTqizDJQi_^}XiwfaC$f}xSxlFhc~ zEj#6X#Z`_>4Ab<{j(9Nn%qMm_rxGU-AtyMipajg562_(n)dA`+XwV~zJTvj_z}l3d z!vFesus;LaqAN}M<#bd!`BVTcOpHgM?Ffjh$QlcK9KKONNsIyvMyw9i`KgF(o$MouC^iMAWrm?;RdzG`h0|- ze#q-t6?w<32iWN3X+8vLw?qhh5&wkAGbp1LQCgV=6Ve3-Gcx*d(>)r-g zHoDQ1<3(9&Q4RkmoosuW*VWY#VG`^UI_ZzvWYol-ky(f;ppQTLpF_hR`xtal|M&-& z(7Ta&_;vtYFQ3jt1=Jr85Ac1~kO#yGlM+YoOxS7xQN};Tcj9|YwW4qFWbZg=~Y z3lHiKW=v23LO|TN@>XakeJ-uiAEXargul3HMSlH@o@LB2Opcthgyb?#L!Y~nalEpP+GOyE;{~bBkr|$#dO5c0+$F+B?J#B-gYig!Y8HI ze%cONf8F&ie&Ot5 ze}{7xiy({0dkR`V%L_+L-z^KY&}CHOF&qhX49dP<*3T|A{}UN`!nf)L1tzk_gtY2F zp>nKYixCzSadr8k$?l@IIK|F#n*y`QYJ*M32w?GOE=9YVA6J1pqln72V)$HZ4SwE$ zorMfUgmwJuR#=SXwsS(X*COI>^L5bA6cHBdw%AG#^Wh^u4H%o;l2wx&2E~)o#!9Es zXLID8LmoQ4$o_#h)I+tRC;72Huzr(%yhjQeY05-7#fi5qC^Z5d&HxMHNkfclN!& zOt^@wBEQnQ4QN*iJHsxDxPByZ6>9Gvkq)74!bFgG**7x$=gUYQfN16+e?`r-Xl2nN9j({FYHu*X0C}pV=kJArUP0cvW{!s<#D;*8MP-Zt^N=>v2VZ*Jq{5c z6Rn-80%k(IwPMB%o(Ndklp!qtj0}r%JXHh`yR}vbU^zd%4|-QesrsEh3nJ{>w+F?$ zx8KBk7eZLO4?*m)YL``(criPXC)OA}pyFJQp`V*+!jI6E<+>cVZqCsFC%2``j@_mX zPC2fdp|rOh1YfYq4Ffc96ScLo*oygW)F1T43m%*=BxG+(6jIyRxG0^po-KY%)h3s& z3}r&F8ZxKBhlqN9HQ#8XdRO{eMJzz$lCDaMKE zgcGt+yfIa{19J7$bUjBAQF)TXw|5v{2N%(L{J6|pWxs`i%kq;F%@qyUr* zbo7t^o+phs6aArWIufy#qU*A%aVg>qWP2es1pHs zY7sjQOhIu{m=HTF0ohrTm)EHthwSiVy62M<_HLruJ9-uI%_cJA zV|=UX{~JeInQiEye8lO8sN~;r3(J?+D5F;lp&>Klovy@6L zq>yIG_ESbom|%pTP!?K`J7pFfuZ1Qm4WYw(NQvx(nnJR@M)_6l@mTK%vwm2&Poc0! zu`5UJ%+5~t(0vqx+Sx_X`{uX7Hl0-GvvZ2#DNgnm7vdSW2;!|M6qXjXbVZaD-{$nf zvDHfvJYB&Ll4lEqC8vt)oHajum2YoKo~7%+4T2vk;zud%YCH_$ec(&l^SL&;E2}Gz zY-r3fZ%Ul)(o#bq#emx6QIkD>K@ILEWl;hlas@=^-I9+P*O_vjM~#SX$DCHD`4h@{sHToO_?ui< zaALIK5+ji-ndlh-l+y?k7s%4bQXY_W0hUWazi)LTeWKn@axJ|o)>ND4l9kf-I$MzI zDsjf*TO9tggd`M~B&Uk0Cl%KM9#b0JydwL-E{kKUo`0@9<|dJ~yvU8g5ZdGcpmM`Y z?e9&1ydZdvv=1LXbT86JVa1e|dRPShh>E-mBKK&pJo`Hq8e|J26)&oadn0C7nAPIO zs9BzsAo?)ajz=mSjUcUNa8MpotHn*3uBXl-Yz`b;p4~IrgN3anq(+36^@OzfWFV~Y z2~beKZny1gFkLH;uSA${r86!Keh$?naO= z5XH(75n+KHEEJYe+e+t32)haK{EHOutZILgYeZ6MVjkSr;y#n5rkVFm*SMODt6Q(Dloff{6?UCfRsEb+0qS9%76Y)49QL;I0%79=XX%McS~S1thE zhOkXhMG+RM?EHNAF3*J0;i!t)xu|6hgBn>!B&UcGv<&RB%^indITBsD z_Ea3)VS6gE;5JvV9;56vnU@?UpW`!Ok4bSaBnN(3PbV$WvP1V4ULR9jkq_Aw2UjP;vRUPuBbR>+oAB1GOVxdr=Yer zsV+ySs$EdwU(na+D%&$u@^J)SY0)nzv!y9U5d!ebIq{ zGS>i(V`ZNUSr=CY5vR=+P6UB9-kv~^HYQNl=1iV0WotPGEHLs!C;k(5TA*us(f(=( zoye=u1b-ydb;d^NAk6j{VR14eyv09O^KF$*31QRzp2u&{3rLFJgNwOK^iBo~O$5Sk zt{UW+|49Q)0^-^TyyYX`OhOJm#(YOpWMiz_F-hw(e|5|@z$YO0uyDidv1*Jx`efoA z>%b|O)E(9~eWd`kJR~A+w7hNBDAPL$^qyv~py|t=vcA)ll~7nuVWqw7 zBT6^Lnp&HUUp2T>G3-q=%4$*)S3*0qQ zb4m>(2zw}Db%eI>9ge=W%}p~Q#NYq`XqYEytP7VJ&+Gk-<14|9Qd;5Rhr8J|qb_HU zYXg}w%7C)UG1e9ukwB5^Lh_nIKt)t^X~T~!6qi`!ORrRSH&9%3cT58Yp^s+yKm!dp z0|vPWWR3zxQI(p~x=>$YonzZ{LJ&iGF`2hk;-tJv;Z7SbTl+_a7Alrbs~?4tQz__i zwut-nIA!nc#D$a<-8sqGKT&zA1Yi>jc&r8>>%^UuR91nhE53WJ!Go06`i>_`8z*0L zJbqV-WxU($u_CS6hL&skh_nra z&H5GFU9-7j*5k{UV=@*QjI1l$_;D9`_4VtHMOuX2j+Ji_RK^`ia_oM`VJ^TqN(A>< zVm+Tgam#$pcfvY{zT{Yd>#AvvF}lXfXJ#52ph&D>yBrs7$K~XL)LSQl{G%}9>Qs;r zm?nsbuy}8I$rKJ&pEc`j#$mhbV@eN$>DV44!n${^5yWoqO@L%slv(B7Cze>@Ia9u! z9hWr42!%66ZsIXZ(t#8RZ8gRWD8@2Z{IXzyBa2+LH`c)tubW2N8;Pg2U~W{KS|7|n zTYH5KS&{Xq?Qh^1MAy_dc13N_K$FE=k)z_yt*;He{7ArW~5?j{k4lYD|+dV9m>9`+LL)B#h6I#JW zGfUfld*6SG`F%gYKtM@y@9bOF{+^H+4c#XGJ-Mp@`1@k$OPxRWHjC6qVB1#dcAY)? z*07|G0M_X&!EUmfd^P36pxBI3z;?0hgv7I*+8jA=%&;U2a%vuVAUnslWl7b^RiJ-4 z>=5u>GLMFV9+kwEbbnuNr!&7a==xXqs1gh9#f;+dSPP#LZ8?#o_d6lHt#<#vaRtS> z=;E_&|3INaCXSk-a^M!h1Og>&YAV+m^${UffH|}`vh$bQLIwZb{(MZpKOfo zDMj^z_A8@rQ4g|iUjJcnh*UK5h5{=ST^`z>9qQb-91~8b81zgiq~m}<;)KqaZ;E+R zZW2-!4c3y4Yinj&syr36SCbI76dR%?ESvY58d$zN#UiqW8N5Hm!5ZB)tPogajG63Z)7LgVJc9;^D~@5qUZw3jB0RZi z2C~H(y5BV@I5>R+ti}8cXY*RXfT4`ia|IJY6)dZ^H!Ok*qK-ZxkQ2hawZ946FPe= zZhv|rJ!kM;z#Dh9WJ}b~iT$;>O!BCG?Ic)!Mw$|Y@Li|I2-zjE@W0AfNRf@XP&Nt< zAkR{LKj06tmWh!Bp5)?i_)NvwVc8=AM$9XNe2CLq?ai=1U`x{TyYC*TD%h-0_UJMpJYwoAN_b$cRD$L92qdHw3THF$@cw%a1~p1Ts_K(*!D| z($Gi-Cn^4flZ+*_TH?^>68fH~=q2bUj+M(;HA3Uz|9Od3e%BKka-{pOG0b-pVPlcv zb%oZ*a^WrM^;i+{7_~Mrw*1MP8pG*(-Ev9F0btAK#6kOjp%j*khaBL@+`y%2CNjpD zraFs{3D9wa@w~e+@M_upl52wQf~iEty{%%W_FN=QLD+1P0vXwtg6V#? z$2w;371+Oy$)FF4;yl}0Moo|4QK*rijneuI%MQ3ALvJ+?BfnFZJQeFO{fBc5i%d0+NMZ zUbBnX49WZ;^Q%&$&6C8qhL^oL^4zcb6|)h{PF;R^ST7{^!J}WlYO^&B>Sv3#5x(Q916jNGEipzCi~Cfh z(VjUguA$rhU_s!%mrJ@=6$)I`4lz<+>)T_%aYMBjy6huR`QV}Q4%u6nXq1J_#TXF|X{SQ;l{TO99*6-_26b-rCY6eG7*cT83c6OT zB2k_XMSo}2C$Rl$P3b0^5MuPXXwTFzHm#J_(IiNoHg`>8cY#NkDQm-ZDzHS%y{!FF z4ZqP6R07t$&P0;$x^V`rq zoYXwTsV4HPYAaj3-Q$eA;y}(uPOs8vWa;=;QRVk&jfZFF82ub~d4NmQm+UyP=HF{b z@-D_4zEjR)4bnS#*C95f`ia_gmYcjumA=MNt~K=4!4fG9Rqy71X%5R%d8W>WXsG|Z zB)AEVXxRFfiZSN9k#88TAI8uNH@P2USr=pl+s6xAq#;tr^@jJeIZs*gKY8bzb@nN} zasGN5&1TATTYgIVh!k!abMBOBpdVZdVT^%VafreOG=viyndA_GP~e5B-^tt5hT;W^T~3CnLRlkzp2w6@vwcPPI3t_h3H1 zR_4O6&G*8^3gwClmGB|?;bKI1x7IWg+v&)xWjNUQA0P9pS2|l?iA#RY>L@tm!Mvm3ClLlB&3anO%-&ur5AAoRy%F z5+^~%m<=~{W$-C3AoVI+M@=Ys zW&0>JYE;ZurW4fX=&g;1=wajQeva1tr@Kvvgi&a=>$ZB_XC}euhtnYnaVDN=ivnl@ z6-X&xLCfe#o~Y0pJdX7f#E^*6DOaP;t+srn3gM}9a)r2 zxcf>_sPORixqY|ekH0m=(D;*66^uA%_t;T&ED--&;BOxRTvI8swlXJ|3(cAQ&y|jP zdhh5HmpAi0M0G}C12ZA=4;}bJt$R{;Va=sSHI5*174m})?yA8Q{Kx^07 zstOA~L~^-=%!IYJ#5duL9?v0BKz}g)RV#QNBr|2G^-*D;Y_&qwnAFwQSQK-^J224X zGD#s}h%6~~q1On{Gut<%!)n;`l%tW|_kW>4Xa1t>@z$(V8J9Q;M+V4@$C%?|MBh)~ zvG8X6O1F2X<=bSg#i?=S94V@X?4xcIFe{bp+OP>({%vQ3C==6dOqxES=bk$oAhu=( z_}uU!et+b6Hlh!mk!1P3@kmpBU}67!KPGkZVMsc9-}toUnZJ;^D5w4QC{`d5LJ98~k|{SNf1P`9XeoLBN3&o>Z+_4jE<} zC-XEvWp@rwrYGajuvX%(D@W67nf z0O*iMb79J!F#p0+-YX|Uc#OEWc&1sTpP4l8we#0~8{bfq`=B-@h%qU8c4i!|7!3?& z+YXWFfg5wt&BNIMh4m;;wbt_+BDXn2+3OU4Ny7@?D2?OvT-*zNfFoN)U4OQC&shsbhanBYjCtZsBZDoapQqBq ze_^|N^x8Q4{Xb$I7X$ol)I%u_xDJe8BPoM!xIa(v^@mQpfSjf7w0gI>l3K=fgy`<& zkxM$US!jr7Y!$VPz0cn#vD5O?s*^Lgmg?8T@x>}t6=7__7V?VKYfJ7W-KuPrq6l0F z&(g!xX1WqVbUWh=g`OfH*Plpm=jz|qWgFYk9XLw;%8o<&?uMJkNR`*8R}g|G_+h&q zMb0XE#U;{Sx3+GU^M?yo^%bg>p>@)=xKJ*aop9#btnFPO*n6)=3$j9|Wz2Z=>oYh> zLI}AXhKS-vQ+*ug80l9v?*&=*jDvY8=`M{>*a((4V#1u|D!{$*V7Y%V8dwcPE^mCZ zKC~UL&*aB4*6B)~sCp4)p=YgO(L*h|ZT%58X0gdZaN9Ytw0G_w1u{I^XJiMAq>~BGBt={gCa6WNM|C`U)O7 z%aAc>7xJUO8nAA$%c5@(FD`RdIE}69S=D##k35>ro$;0ybwBSNXa5rLslVB}6!$%c zN-Cy4j)nF-6qVhmh}s#RHZk5fd?oFR50um;1(CKax==v}tc9ajR~AaY|7immN5U1DF{AFs8q(p=RG)25Z$w=BbhubDRTT;4M$BCs{# z^Mzs)7#doeSacphkd=lAiFa3EDmUj-4MvQhwi->o?QMU7AU&jx4l3HxugxNDfvsH9katm9*n}ouRe^e_B7M*v#x=mdn4b~r9d@W+RsE%V>{dW~jigtIz zd&+K;{=+mJ9zdv+6O1t`We!S_=IQ&bDaV>sGUJ*KXIKP~ee2j{s6>7vWOtloHyNR{ z{8^lqi5&NBV`Bv|xAr@r=~BK+IkVhC$wDcxiF&PB**AXf387yS zXG0O@ywV!sJjOaz0z3GaO7W06Sebd2Ix%;aedDjO@Pl~L1JD|jQWGsIMt_-givzSj z{$oft(S*+TMa7rWKT;#MQBpCZ?$N`HRLKkS3H%`o$L7&c-#^TiNXG8mZKhMKq-RR*_$i<8BbbUEj$~o^a zY2uLy09$#7oo}kmgsU+}!Gy!I@9vAqQp8)vYaE2uKR7j{yNTYgSBHl2$=D{$Ol>Q& z*9Yhy-$HXmqHW{WW$BHG*i9s3Mr^})eh}sJfo}bqO8DL>oM}C~tQ?83Rs!FHyPZB_ zHd%?YJz1Sm?Vs_ta;CBNCo|m0+P-;b$Ie&qAl746rDCnZc^X5o&`nyuIgjT&W5*I_ z;imDKkY7|MRq5C;y1rHAb-mlWi}Op$Kj@v*Q{LeCRt2{_%KYcDS8pqa*biwe%1h*n zH*~vh(uCXTNVP~YBEW4sWk=ht(@~=~y%iD+BV=WgXk8mi5?~S*cj!&*l zDmFb%IyO3a?(A8pC$k;|3(^qO))h5@5F-lbP)>neYa8q`W~Q94d*CzCLbtp#AMXx$ z_MH#yC!)XggFV5CIr~IT+H>P5#Ll(0k4zMe7Rh_j+pCekmvy%)k1*%8Rx%FTmP`Fh zGnxiZ4^X~Lr@_`0YjXck1hRiA7J>k_YU>^lMh!jQ69tTjh5D}} ziRq^4n$`GGB`EhH|72jmSqU9?TvA5zZ^u$MXN#=$nK<|~IeF^~!3v(w84~cgxBx;|XW(5dF51AWr!_+9oQBxJsoH+xtWKkT5cbMl$M{i)Wk@1X z&7UmsZaVl-k>+NFJstKk@VEQbhv~KR5I4_8QT1XSDO_iT@=ariE57-hVY9Z=CmA{-t>2(O+=q_S_%u-NyJq z51-G6U8M*St)|j~fQaAX4%^O5{(tr7@2jZro%aUrPHjgRH|Sd_`OeMQtO-nb4umrh zAV9jOe0UMA2;y9MfFa}g*7D|_`-9{AG)@z+L1|1aEeMyL1Gz#VhKwhBeH?+z;})>s9ZKke&HW)?@9TbZoS9T?^-z`7B$sK_9Cl zOiR^^n7nhemYnP>d8t{60ma7T2hUpwIO5uM8^Csl;2fHK1}RZZS0BBCcd@XrC@SrI z!dDUcIaH|PJv$PeZj4I0Jwlh7Kki?i+&cEw*=v*+?{r7-%c}lK=*kP%RvBKn7yGL0 z4-&`r(X*98*4R?j_lZ{dT4hkByru*a+F6w~IETBtZ*ojtCF{ajc`p_uJhp}2a8*TM z>z_NS*^Qau=sa;wx;jeg2QOnUJAcIa7B+w}L#lV`6DT32B&lH{(_^W8GS(~j^J&v7 zZFl)b-2UT+>w{kX2#n6kd#C#<_XKf0DIsI=VS{x|8}VMLFy8O)XLMipJZ)FeY_we9n&s!usK=$O*f^_PQ0wH7viamjrV0AO>@ zzv|T8!_X*icU}~}n^DC$hy~lR5~_%pmGn0u+w>q;yIus(NtBni>rJP+U1K$Uw|=xa z(fF4@3897_Iry@g#b1-7sxBQWos?ew6i6C-yw1AkSg|Mm!X01TN3nlVRgLu07HAP{ zS6+M2-J#}uDKMWtt3F&|OYw^zqxGq?POtC_Pe+#eyHg;Y3{{J)wa#eYlWg6h802B+ zQmR=u2nadv|q&}9Z-wq4p>yLY|0A&(E=lR z*2`WuF(WNtce3uKRK4`6i57bW!>uv#+?JPnDVheVXg+fGFNr`gN8K7Nlm{}s0I zMZ-D37yMf~Wzk`14|L%rQ7>t(ehUQtPiyP!V^Au_+3u~C(w+QM0f26u z0w)pF_*{X~h#%UqpZ-vJRb!rj{ziMuTr#&B(xG6lzZW>h-q&8n2Xbex%=P%mGo2wd z4O<(owK?}i1|^Mq@P`7W&ZMlW>5cbt6K%cgN0s!G&b>3zahtoWx?+5BQD%C^TN2AovZ~)YIqN?_J|e|bHeVlRH5L-s@)!nWiMuCAg1a)pR67A z*X$D(t?)PSD(I5AxC$1}KyNv-kdEjtJ`c44PvhVNERGIW29QTv5gSVYtsYqJ-=~F~ zV$E%d zzG8f-d#=JYf8L6q+5^MfS!)!8R3s$_y~1c^9(FY41b;TM(RFfAh6hPgsH~T3lnD?U zzMXbX0hVfd|A6Mjn>fQe;{5V18d7-xqoirE z9-!2NT_s=#ty0_F$A0ebDcn}SE)7mM>?nVtR8CQWXh+5hs4dZ&4S*Rg`ZN_wC`(u{ z35RxGEI|~V`pUA8HG5oWRZ%nR2$`1+)H=UhpL)TBH~vH0BnR_eZ|q&^B9qsgPLb^Y zGXU5i$aMteYUrIhOUD~JOZuXwDqU~}9K0do(-+mSmUBl@i5vk5RKnb4s#hvVB~a_7 z?20<@5~CDo7r*z^>#%#K%l>(9^3fYD>81H)fC^os{C*&iO5Fyc-lpdK!^$WIA$%qd z;=>ZUk!Lj*zw{aly_Mx$NS_^SGn6@j8_4kE*VVwr4F`;gNq9ZodtF}$nzsdC0?%*! zV0$kF#ClJH)B4d^u(5`N4M%dAPSw=suYzu52_EnxiN--MLU>cgTDN{S>f734j|-jV zI)|-a#;&I4AoR`C4@ajst@5-}UtYn_0YsJ=e{1`_o^~RF1f)2HzjM`93juYF3d|8p z`%BF)G$+|M_-~273Nv%09xW~TR*AmvmOZ-`q*qRylUs$G@q0w)vdbG+6YWP^!dIu^ zytM|1A;EFS$8mpw`<636g>g`a<5c}v@FsO{`}RVjZ!79mT9R(@r=*$`L*Up8VYnIj zb7P}_e3zy=!*)g*x`p#tF3U_A#4)54wW2+{%(iW0Sv}}E!$Vm^*2*ZM#ftySP_wAn zUk`&#ovKB Date: Thu, 19 Feb 2026 14:41:10 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=EB=B9=9B=EB=82=98=EB=8A=94=20?= =?UTF-8?q?=EC=9C=A0=EB=A6=AC=EB=B3=91=EC=9D=84=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=EC=97=90=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/fragment_home.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 10b92e7e..b35032c9 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -150,10 +150,11 @@ From f0432f7fac877a19172fb8cd7f9c58781c62c47b Mon Sep 17 00:00:00 2001 From: aksworns22 Date: Thu, 19 Feb 2026 17:38:13 +0900 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=EA=B1=B0=EB=8C=80=ED=95=9C=20?= =?UTF-8?q?=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/egobook/app/MainActivity.kt | 7 +- .../app/ui/home/PsychologyViewModel.kt | 37 ++++- .../app/ui/home/repository/UserRepository.kt | 63 +++++++- .../egobook/app/ui/home/ui/HomeFragment.kt | 12 +- .../app/ui/home/ui/PsychologyDialog.kt | 21 ++- .../app/ui/home/ui/PsychologyFragment.kt | 78 ++++++++++ .../app/ui/home/ui/SavedPsychologyAdapter.kt | 57 ++++++++ .../main/res/drawable/ic_bookmark_clicked.xml | 15 ++ app/src/main/res/layout/dialog_psychology.xml | 3 +- .../main/res/layout/fragment_psychology.xml | 136 ++++++++++++++++++ .../res/layout/view_holder_psychology.xml | 68 +++++++++ .../main/res/navigation/bottom_navigation.xml | 15 ++ app/src/main/res/values/colors.xml | 1 + 13 files changed, 485 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/com/egobook/app/ui/home/ui/PsychologyFragment.kt create mode 100644 app/src/main/java/com/egobook/app/ui/home/ui/SavedPsychologyAdapter.kt create mode 100644 app/src/main/res/drawable/ic_bookmark_clicked.xml create mode 100644 app/src/main/res/layout/fragment_psychology.xml create mode 100644 app/src/main/res/layout/view_holder_psychology.xml diff --git a/app/src/main/java/com/egobook/app/MainActivity.kt b/app/src/main/java/com/egobook/app/MainActivity.kt index 30f81503..107187d0 100644 --- a/app/src/main/java/com/egobook/app/MainActivity.kt +++ b/app/src/main/java/com/egobook/app/MainActivity.kt @@ -3,6 +3,7 @@ package com.egobook.app import android.os.Bundle import android.util.Log import android.view.View +import android.widget.Toast import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat @@ -51,7 +52,8 @@ class MainActivity : AppCompatActivity(), BlurController, NotificationController R.id.diaryWriteFragment, // 일기 작성 화면 R.id.calenderFragment, // 달력 화면 R.id.storeFragment, - R.id.accountFragment //계정 화면 + R.id.accountFragment, //계정 화면 + R.id.psychologyFragment -> { binding.bottomNavigation.visibility = View.GONE } @@ -95,7 +97,8 @@ class MainActivity : AppCompatActivity(), BlurController, NotificationController RewardedAd.load(this, adUnitId, adRequest, object : RewardedAdLoadCallback() { override fun onAdFailedToLoad(adError: LoadAdError) { rewardedAd = null - Log.d("AdMob", "광고 로드 실패") + Toast.makeText(this@MainActivity, "광고를 불러오는데 실패했습니다", Toast.LENGTH_SHORT).show() + Log.d("AdMob", "광고 로드 실패, $adError") } override fun onAdLoaded(ad: RewardedAd) { diff --git a/app/src/main/java/com/egobook/app/ui/home/PsychologyViewModel.kt b/app/src/main/java/com/egobook/app/ui/home/PsychologyViewModel.kt index af18932a..4f79dc3b 100644 --- a/app/src/main/java/com/egobook/app/ui/home/PsychologyViewModel.kt +++ b/app/src/main/java/com/egobook/app/ui/home/PsychologyViewModel.kt @@ -1,18 +1,12 @@ package com.egobook.app.ui.home -import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.egobook.app.ui.home.repository.DailyPsychologyDto import com.egobook.app.ui.home.repository.PsychologyKnowledge import com.egobook.app.ui.home.repository.PsychologyReward +import com.egobook.app.ui.home.repository.SavedPsychologyDto import com.egobook.app.ui.home.repository.UserPsychologyRepository -import com.egobook.app.ui.home.repository.UserRepository -import com.egobook.app.ui.home.user.Ink -import com.egobook.app.ui.home.user.Level -import com.egobook.app.ui.home.user.User -import com.egobook.app.ui.shop.CustomItem -import com.egobook.app.ui.shop.StoreRepository import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -25,6 +19,14 @@ class PsychologyViewModel @Inject constructor( private val psychologyRepository: UserPsychologyRepository ) : ViewModel() { + init { + loadDailyPsychology() + loadSavedPsychology() + } + + private val _savedPsychologies = MutableStateFlow(emptyList()) + val savedPsychologies: StateFlow> = _savedPsychologies.asStateFlow() + private val _dailyPhycologyDto = MutableStateFlow( DailyPsychologyDto( date = "0000-00-00", @@ -50,6 +52,27 @@ class PsychologyViewModel @Inject constructor( viewModelScope.launch { _dailyPhycologyDto.value = psychologyRepository.loadDailyPsychology() } + } + + fun savePsychology(knowledgeId: Int) { + viewModelScope.launch { + psychologyRepository.saveDailyPsychology(knowledgeId) + loadDailyPsychology() + loadSavedPsychology() + } + } + fun deletePsychology(knowledgeId: Int) { + viewModelScope.launch { + psychologyRepository.deletePsychology(knowledgeId) + loadDailyPsychology() + loadSavedPsychology() + } + } + + fun loadSavedPsychology() { + viewModelScope.launch { + _savedPsychologies.value = psychologyRepository.loadSavedPsychology() + } } } diff --git a/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt b/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt index 145705e1..638f3e6c 100644 --- a/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt +++ b/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt @@ -6,8 +6,10 @@ import com.egobook.app.ui.home.user.Tendency import com.egobook.app.ui.home.user.User import retrofit2.Retrofit import retrofit2.http.Body +import retrofit2.http.DELETE import retrofit2.http.GET import retrofit2.http.POST +import retrofit2.http.Path import javax.inject.Inject import javax.inject.Singleton @@ -28,6 +30,11 @@ interface UserTendencyRepository { interface UserPsychologyRepository { suspend fun isReadDailyPsychology(): Boolean suspend fun loadDailyPsychology(): DailyPsychologyDto + suspend fun saveDailyPsychology(knowledgeId: Int): SavingPsychologyLogDto + + suspend fun deletePsychology(knowledgeId: Int): DeletingPsychologyLogDto + + suspend fun loadSavedPsychology(): List } interface NetworkUserService { @@ -95,12 +102,48 @@ data class DailyPsychologyDto( ) +data class SavingPsychologyLogDto( + val knowledgeId: Long, + val saved: Boolean, + val toastMessage: String +) + +data class DeletingPsychologyLogDto( + val saved: Boolean, + val knowledgeId: Long, + val toastMessage: String +) + +data class SavedPsychologyDto( + val knowledgeId: Int, + val preview: String, + val savedAt: String, + val source: String, + val title: String +) + +data class SavedPsychologyGroupDto( + val values: List, + val hasNext: Boolean, + val nextCursor: Int +) + interface NetworkPsychologyService { @GET("/psychology/daily/status") suspend fun isReadDailyPsychology(): BaseResponse @GET("/psychology/daily") suspend fun loadDailyPsychology(): BaseResponse + + @POST("/psychology/{knowledgeId}/save") + suspend fun savePsychology(@Path("knowledgeId") knowledgeId: Int): BaseResponse + + @DELETE("/psychology/{knowledgeId}/save") + suspend fun deletePsychology(@Path("knowledgeId") knowledgeId: Int): BaseResponse + + @GET("/psychology/saved") + suspend fun loadSavedPsychology(): BaseResponse + } @Singleton @@ -145,7 +188,7 @@ class NetworkUserRepository @Inject constructor( ) return watchingAdResponse.message } - + override suspend fun isReadDailyPsychology(): Boolean { val psychologyResponse: BaseResponse = psychologyService.isReadDailyPsychology() @@ -159,4 +202,22 @@ class NetworkUserRepository @Inject constructor( return psychologyResponse.data } + override suspend fun saveDailyPsychology(knowledgeId: Int): SavingPsychologyLogDto { + val psychologyResponse: BaseResponse = + psychologyService.savePsychology(knowledgeId) + return psychologyResponse.data + } + + override suspend fun deletePsychology(knowledgeId: Int): DeletingPsychologyLogDto { + val psychologyResponse: BaseResponse = + psychologyService.deletePsychology(knowledgeId) + return psychologyResponse.data + } + + override suspend fun loadSavedPsychology(): List { + val psychologyResponse: BaseResponse = + psychologyService.loadSavedPsychology() + return psychologyResponse.data.values + } + } diff --git a/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt b/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt index cb0ec097..ac1f2211 100644 --- a/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt +++ b/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt @@ -92,17 +92,7 @@ class HomeFragment(): Fragment() { } binding.ivBottle.setOnClickListener { - applyScreenBlur(BlurLevel.BASE) - val dialog = PsychologyDialog() - dialog.isCancelable = false - dialog.show(parentFragmentManager, "DailyPsychologyDialog") - binding.ivDailyBottle.visibility = View.INVISIBLE - - parentFragmentManager.setFragmentResultListener("psychology_key", viewLifecycleOwner) { _, _ -> - Log.d("jang", "다이얼로그 닫힘 감지 - 데이터 갱신") - viewModel.fetchUser() - viewModel.fetchDailyPhycologyReadState() - } + findNavController().navigate(R.id.action_homeFragment_to_psychologyFragment) } binding.ivAd.setOnClickListener { diff --git a/app/src/main/java/com/egobook/app/ui/home/ui/PsychologyDialog.kt b/app/src/main/java/com/egobook/app/ui/home/ui/PsychologyDialog.kt index 21626819..dd502887 100644 --- a/app/src/main/java/com/egobook/app/ui/home/ui/PsychologyDialog.kt +++ b/app/src/main/java/com/egobook/app/ui/home/ui/PsychologyDialog.kt @@ -11,18 +11,22 @@ import androidx.fragment.app.DialogFragment import androidx.fragment.app.activityViewModels import androidx.fragment.app.setFragmentResult import androidx.lifecycle.lifecycleScope +import com.egobook.app.R import com.egobook.app.databinding.DialogAdBinding import com.egobook.app.databinding.DialogPsychologyBinding import com.egobook.app.removeScreenBlur import com.egobook.app.ui.home.HomeViewModel import com.egobook.app.ui.home.PsychologyViewModel import kotlinx.coroutines.launch +import kotlin.math.max class PsychologyDialog() : DialogFragment() { private var _binding: DialogPsychologyBinding? = null private val binding get() = checkNotNull(_binding) { "Fragment가 제거되었습니다." } + private var ink: Int = 0 + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -38,19 +42,26 @@ class PsychologyDialog() : DialogFragment() { val viewModel: PsychologyViewModel by activityViewModels() - viewModel.loadDailyPsychology() - viewLifecycleOwner.lifecycleScope.launch { viewModel.dailyPhycologyDto.collect { dailyPhycologyDto -> binding.tvPsychologyContent.text = dailyPhycologyDto.knowledge.content binding.tvPsychologySource.text = dailyPhycologyDto.knowledge.source binding.tvPsychologyDate.text = dailyPhycologyDto.date - if(dailyPhycologyDto.reward == null) { - binding.btnReward.text = "메인으로 돌아가기" + ink = max(ink, dailyPhycologyDto.reward?.inkGranted ?: 0) + binding.btnReward.text = "잉크 ${ink}개 획득!" + if (dailyPhycologyDto.isBookmarked) { + binding.ivBookmark.setImageResource(R.drawable.ic_bookmark_clicked) } else { - binding.btnReward.text = "잉크 ${dailyPhycologyDto.reward.inkGranted}개 획득!" + binding.ivBookmark.setImageResource(R.drawable.ic_bookmark_unclicked) } + } + } + binding.ivBookmark.setOnClickListener { + if (viewModel.dailyPhycologyDto.value.isBookmarked) { + viewModel.deletePsychology(viewModel.dailyPhycologyDto.value.knowledge.knowledgeId) + } else { + viewModel.savePsychology(viewModel.dailyPhycologyDto.value.knowledge.knowledgeId) } } diff --git a/app/src/main/java/com/egobook/app/ui/home/ui/PsychologyFragment.kt b/app/src/main/java/com/egobook/app/ui/home/ui/PsychologyFragment.kt new file mode 100644 index 00000000..b59f7983 --- /dev/null +++ b/app/src/main/java/com/egobook/app/ui/home/ui/PsychologyFragment.kt @@ -0,0 +1,78 @@ +package com.egobook.app.ui.home.ui + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.egobook.app.R +import com.egobook.app.databinding.FragmentPsychologyBinding +import com.egobook.app.ui.home.PsychologyViewModel +import com.egobook.app.ui.home.repository.SavedPsychologyDto +import com.egobook.app.ui.shop.ItemAdapter +import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.launch + +@AndroidEntryPoint +class PsychologyFragment(): Fragment() { + private lateinit var binding: FragmentPsychologyBinding + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentPsychologyBinding.inflate(inflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val viewModel: PsychologyViewModel by activityViewModels() + viewLifecycleOwner.lifecycleScope.launch { + viewModel.dailyPhycologyDto.collect { dailyPhycologyDto -> + binding.tvPsychologyContent.text = dailyPhycologyDto.knowledge.content + binding.tvPsychologySource.text = dailyPhycologyDto.knowledge.source + binding.tvPsychologyDate.text = dailyPhycologyDto.date + if (dailyPhycologyDto.isBookmarked) { + binding.ivBookmark.setImageResource(R.drawable.ic_bookmark_clicked) + } else { + binding.ivBookmark.setImageResource(R.drawable.ic_bookmark_unclicked) + } + } + } + binding.ivBookmark.setOnClickListener { + if (viewModel.dailyPhycologyDto.value.isBookmarked) { + viewModel.deletePsychology(viewModel.dailyPhycologyDto.value.knowledge.knowledgeId) + } else { + viewModel.savePsychology(viewModel.dailyPhycologyDto.value.knowledge.knowledgeId) + } + } + binding.ivBackButton.setOnClickListener { + findNavController().navigate(R.id.action_psychologyFragment_to_homeFragment) + } + + val itemAdapter = SavedPsychologyAdapter { savedPsychologyDto -> + viewModel.deletePsychology(savedPsychologyDto.knowledgeId) + } + + binding.rvSavedPsychologies.apply { + adapter = itemAdapter + layoutManager = LinearLayoutManager(context) + } + + viewLifecycleOwner.lifecycleScope.launch { + viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.savedPsychologies.collect { psychologies -> + itemAdapter.submitList(psychologies) + } + } + } + } +} diff --git a/app/src/main/java/com/egobook/app/ui/home/ui/SavedPsychologyAdapter.kt b/app/src/main/java/com/egobook/app/ui/home/ui/SavedPsychologyAdapter.kt new file mode 100644 index 00000000..900b838f --- /dev/null +++ b/app/src/main/java/com/egobook/app/ui/home/ui/SavedPsychologyAdapter.kt @@ -0,0 +1,57 @@ +package com.egobook.app.ui.home.ui + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import com.egobook.app.R +import com.egobook.app.ui.home.repository.SavedPsychologyDto +import com.egobook.app.ui.shop.CustomItem + +class SavedPsychologyAdapter( + private val onItemClick: (SavedPsychologyDto) -> Unit +) : ListAdapter(ItemDiffCallback) { + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ItemViewHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.view_holder_psychology, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val item = getItem(position) + holder.bind(item, onItemClick) + } + + class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + val dateTextView: TextView = view.findViewById(R.id.tv_psychology_date) + val contentTextView: TextView = view.findViewById(R.id.tv_psychology_content) + val sourceTextView: TextView = view.findViewById(R.id.tv_psychology_source) + fun bind(item: SavedPsychologyDto, onItemClick: (SavedPsychologyDto) -> Unit) { + dateTextView.text = item.savedAt + contentTextView.text = item.title + sourceTextView.text = item.source + contentTextView.text = item.preview + itemView.setOnClickListener { + onItemClick(item) + } + } + } + + companion object { + private val ItemDiffCallback = object : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: SavedPsychologyDto, newItem: SavedPsychologyDto): Boolean { + return oldItem.knowledgeId == newItem.knowledgeId + } + + override fun areContentsTheSame(oldItem: SavedPsychologyDto, newItem: SavedPsychologyDto): Boolean { + return oldItem == newItem // 전체 객체 내용 비교 + } + } + } +} diff --git a/app/src/main/res/drawable/ic_bookmark_clicked.xml b/app/src/main/res/drawable/ic_bookmark_clicked.xml new file mode 100644 index 00000000..57a7994c --- /dev/null +++ b/app/src/main/res/drawable/ic_bookmark_clicked.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/app/src/main/res/layout/dialog_psychology.xml b/app/src/main/res/layout/dialog_psychology.xml index 4c3b017b..849c7c36 100644 --- a/app/src/main/res/layout/dialog_psychology.xml +++ b/app/src/main/res/layout/dialog_psychology.xml @@ -38,7 +38,7 @@ android:layout_weight="1" /> @@ -84,7 +84,6 @@ android:textAlignment="center" android:text="잉크 획득" /> - diff --git a/app/src/main/res/layout/fragment_psychology.xml b/app/src/main/res/layout/fragment_psychology.xml new file mode 100644 index 00000000..bd9b0df3 --- /dev/null +++ b/app/src/main/res/layout/fragment_psychology.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/view_holder_psychology.xml b/app/src/main/res/layout/view_holder_psychology.xml new file mode 100644 index 00000000..ecf9d740 --- /dev/null +++ b/app/src/main/res/layout/view_holder_psychology.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/navigation/bottom_navigation.xml b/app/src/main/res/navigation/bottom_navigation.xml index 731dc5b5..2d345c1f 100644 --- a/app/src/main/res/navigation/bottom_navigation.xml +++ b/app/src/main/res/navigation/bottom_navigation.xml @@ -14,12 +14,27 @@ android:id="@+id/action_homeFragment_to_storeFragment" app:destination="@id/storeFragment" /> + + + + + + + + #D2EAA2 + #ECF2F9