From 40a061ae73e445e54000094d26771b7c3334d230 Mon Sep 17 00:00:00 2001 From: mvp76 Date: Tue, 28 Feb 2017 15:10:05 +0100 Subject: [PATCH] Fix for old devices They can't use vector drawables in notifications. Also, groups can not be used, see http://stackoverflow.com/a/34953411. --- app/build.gradle | 1 + .../java/org/fdroid/fdroid/FDroidApp.java | 5 +++++ .../org/fdroid/fdroid/NotificationHelper.java | 20 +++++++++++++----- .../ic_cancel.xml} | 0 .../ic_file_download.xml} | 0 .../ic_file_install.xml} | 0 app/src/main/res/drawable-hdpi/ic_cancel.png | Bin 0 -> 579 bytes .../res/drawable-hdpi/ic_file_download.png | Bin 0 -> 367 bytes .../res/drawable-hdpi/ic_file_install.png | Bin 0 -> 690 bytes app/src/main/res/drawable-mdpi/ic_cancel.png | Bin 0 -> 541 bytes .../res/drawable-mdpi/ic_file_download.png | Bin 0 -> 263 bytes .../res/drawable-mdpi/ic_file_install.png | Bin 0 -> 506 bytes app/src/main/res/drawable-xhdpi/ic_cancel.png | Bin 0 -> 846 bytes .../res/drawable-xhdpi/ic_file_download.png | Bin 0 -> 351 bytes .../res/drawable-xhdpi/ic_file_install.png | Bin 0 -> 793 bytes .../main/res/drawable-xxhdpi/ic_cancel.png | Bin 0 -> 1124 bytes .../res/drawable-xxhdpi/ic_file_download.png | Bin 0 -> 450 bytes .../res/drawable-xxhdpi/ic_file_install.png | Bin 0 -> 972 bytes .../main/res/drawable-xxxhdpi/ic_cancel.png | Bin 0 -> 1298 bytes .../res/drawable-xxxhdpi/ic_file_download.png | Bin 0 -> 548 bytes .../res/drawable-xxxhdpi/ic_file_install.png | Bin 0 -> 1216 bytes 21 files changed, 21 insertions(+), 5 deletions(-) rename app/src/main/res/{drawable/ic_notify_cancel_24dp.xml => drawable-anydpi-v21/ic_cancel.xml} (100%) rename app/src/main/res/{drawable/ic_notify_update_24dp.xml => drawable-anydpi-v21/ic_file_download.xml} (100%) rename app/src/main/res/{drawable/ic_notify_install_24dp.xml => drawable-anydpi-v21/ic_file_install.xml} (100%) create mode 100644 app/src/main/res/drawable-hdpi/ic_cancel.png create mode 100644 app/src/main/res/drawable-hdpi/ic_file_download.png create mode 100644 app/src/main/res/drawable-hdpi/ic_file_install.png create mode 100644 app/src/main/res/drawable-mdpi/ic_cancel.png create mode 100644 app/src/main/res/drawable-mdpi/ic_file_download.png create mode 100644 app/src/main/res/drawable-mdpi/ic_file_install.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_cancel.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_file_download.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_file_install.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_cancel.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_file_download.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_file_install.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_cancel.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_file_download.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_file_install.png diff --git a/app/build.gradle b/app/build.gradle index 65913a79c..094e1aea2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -184,6 +184,7 @@ android { versionCode 102050 versionName getVersionName() testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + vectorDrawables.useSupportLibrary = true } testOptions { diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index 0c32ccaa2..67d773a63 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -37,6 +37,7 @@ import android.os.Build; import android.os.Environment; import android.os.StrictMode; import android.preference.PreferenceManager; +import android.support.v7.app.AppCompatDelegate; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; @@ -78,6 +79,10 @@ import sun.net.www.protocol.bluetooth.Handler; ) public class FDroidApp extends Application { + static { + AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); + } + private static final String TAG = "FDroidApp"; public static final String SYSTEM_DIR_NAME = Environment.getRootDirectory().getAbsolutePath(); diff --git a/app/src/main/java/org/fdroid/fdroid/NotificationHelper.java b/app/src/main/java/org/fdroid/fdroid/NotificationHelper.java index 445688ddc..f4acb08e2 100644 --- a/app/src/main/java/org/fdroid/fdroid/NotificationHelper.java +++ b/app/src/main/java/org/fdroid/fdroid/NotificationHelper.java @@ -15,6 +15,7 @@ import android.os.Build; import android.support.graphics.drawable.VectorDrawableCompat; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationManagerCompat; +import android.support.v4.content.ContextCompat; import android.support.v4.content.LocalBroadcastManager; import android.text.SpannableStringBuilder; import android.text.Spanned; @@ -251,14 +252,14 @@ class NotificationHelper { if (entry.intent != null) { switch (entry.status) { case UpdateAvailable: - return new NotificationCompat.Action(R.drawable.ic_notify_update_24dp, context.getString(R.string.notification_action_update), entry.intent); + return new NotificationCompat.Action(R.drawable.ic_file_download, context.getString(R.string.notification_action_update), entry.intent); case Downloading: case Installing: - return new NotificationCompat.Action(R.drawable.ic_notify_cancel_24dp, context.getString(R.string.notification_action_cancel), entry.intent); + return new NotificationCompat.Action(R.drawable.ic_cancel, context.getString(R.string.notification_action_cancel), entry.intent); case ReadyToInstall: - return new NotificationCompat.Action(R.drawable.ic_notify_install_24dp, context.getString(R.string.notification_action_install), entry.intent); + return new NotificationCompat.Action(R.drawable.ic_file_install, context.getString(R.string.notification_action_install), entry.intent); } } return null; @@ -333,9 +334,15 @@ class NotificationHelper { .setLargeIcon(iconLarge) .setLocalOnly(true) .setVisibility(NotificationCompat.VISIBILITY_SECRET) - .setGroup(GROUP_UPDATES) .setContentIntent(entry.intent); + /* If using stacked notifications, use groups. Note that this would not work prior to Lollipop, + because of http://stackoverflow.com/a/34953411, but currently not an issue since stacked + notifications are used only on >= Nougat. + */ + if (useStackedNotifications()) { + builder.setGroup(GROUP_UPDATES); + } // Handle actions // @@ -430,9 +437,12 @@ class NotificationHelper { .setContentText(context.getString(R.string.notification_content_single_installed)) .setLocalOnly(true) .setVisibility(NotificationCompat.VISIBILITY_SECRET) - .setGroup(GROUP_INSTALLED) .setContentIntent(entry.intent); + if (useStackedNotifications()) { + builder.setGroup(GROUP_INSTALLED); + } + Intent intentDeleted = new Intent(BROADCAST_NOTIFICATIONS_INSTALLED_CLEARED); intentDeleted.putExtra(EXTRA_NOTIFICATION_KEY, entry.getUniqueKey()); PendingIntent piDeleted = PendingIntent.getBroadcast(context, 0, intentDeleted, 0); diff --git a/app/src/main/res/drawable/ic_notify_cancel_24dp.xml b/app/src/main/res/drawable-anydpi-v21/ic_cancel.xml similarity index 100% rename from app/src/main/res/drawable/ic_notify_cancel_24dp.xml rename to app/src/main/res/drawable-anydpi-v21/ic_cancel.xml diff --git a/app/src/main/res/drawable/ic_notify_update_24dp.xml b/app/src/main/res/drawable-anydpi-v21/ic_file_download.xml similarity index 100% rename from app/src/main/res/drawable/ic_notify_update_24dp.xml rename to app/src/main/res/drawable-anydpi-v21/ic_file_download.xml diff --git a/app/src/main/res/drawable/ic_notify_install_24dp.xml b/app/src/main/res/drawable-anydpi-v21/ic_file_install.xml similarity index 100% rename from app/src/main/res/drawable/ic_notify_install_24dp.xml rename to app/src/main/res/drawable-anydpi-v21/ic_file_install.xml diff --git a/app/src/main/res/drawable-hdpi/ic_cancel.png b/app/src/main/res/drawable-hdpi/ic_cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..e18c7aef903ff9373323c67727b15776cd8fdbe9 GIT binary patch literal 579 zcmV-J0=)f+P)Om`JHLm>&TgNb5n}P*O^Vn7;r#00>kZ_kG{rQ3fVetxy@5RDp`) zzEENKo`C^?4h!)irF3h6afx}8fdK%g*=W285KRE=a>jOvc{88Qvar{{IK;dL(9QXM z5L!>^$S|A2U&AVknFNLp-g>J)}l(NGQR!+RRvYnM=sE{P}ht-2~^hc zwb?xjWE!A~slEtQG>~pIR27?{5Ksc;67whWPuYF)&HcwjPoC#(i^M4mlt7)!RGy5_ zE+ZgAs8R>1F;GFM(xpa}0jg8?J!Muc>RWC5LTl(!r$<^3nW%>fI?wwm9aa@rtJ)8% z8Z@g~SgV?RtFA#-T@-HtV*(|>JU?NuXQEz}FCd=h1xz%+U#U4(M+-3%t#oe_yLm9T3MGa Rrz`*f002ovPDHLkV1l1o?hOC{ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_file_download.png b/app/src/main/res/drawable-hdpi/ic_file_download.png new file mode 100644 index 0000000000000000000000000000000000000000..52fa71dc43451a4253cf7101335a758acfebf28b GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBSc;uILpXq-h9ji|$mcBZh%9Dc z;GPD;j2yzHwLn4164!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1Uvc)B=- zM6|xWzF)A(K;-zx_$!8YT)Yc7uTS8fyYR8>x`!gmrufPnIu((z)cxO{1CAf}sdDZ- z|8xgKgUZvT7Ur?H%HB`8RViM!&i?9G+tRnZ>`$g>G0b5umSQ-$K$P7im5EDrK>!oi zQ(KA7jNMFq^~~o)f6Q?`Y?;1r%HO?znASzTX6I&Mke$eOq3xM#n$}wB`z@szt+TiO zU8pmk;g7WulNy(akQSFP?VA=bvrwcy4KoeKzopr0DyRji2wiq literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_file_install.png b/app/src/main/res/drawable-hdpi/ic_file_install.png new file mode 100644 index 0000000000000000000000000000000000000000..81ca22780f5cc3d7d835704c2dd3b27fbf3062ec GIT binary patch literal 690 zcmV;j0!{siP)jJbo2gfUwJKiL#lLv%~oWE)9MPC@m2?7w2+ey29*arqYfPgZ_%+I#l zyFGMy0Re378?#`o-IBM+7YJZaN#sGN(<$XC@d*Mr_O9E#o~NLkSo_Q=A+l}IWmOGl z;`mKH4CjUdA#!Ax;D8Z@yGfEP1wruAHSGJy{!E25eH6#>PS;>jAb=eP9!F8M$t6@I z2w?yC*w}qlm8^lHK`2ZnaU5pdFB}9QA~$Zu@kEy0k$?b`!rZL2d;hyQ3XRK*3X~c+ zo8`54Bp_A2dN~Xivg{TP5||IdFwVMPH0agx%E~zr(X4?YK_5~$8AZ`Imr%JNOb=sD zg+cJ%HCRUVxl`iz>&LzU8!B+2KEyvgKsjhMj=BUAYmX!H@0~>q;gPSvyrtuk4+8Y#F+JHbf z&k=?-gb+wh5Slxb7=Fl%azPVFi1-E|6cQ@F6|f7E9USDL;+246m*V}b>{JnB&66K=J+F8uI)*@KjK3mW`@BT^Dg2FWy;rp~n0afXQSsj6|-~m@jR_%dr~J fyG->*k|gt2qhe4nJ zu}eLz9U64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1TAJY5_^ zJUZV_G30Ad;Bj3Y=etMnW!G%qewEebMVIexnc~*Vw`Zf~f5QXp84@L?-aaKBpF1+< zz29s8=@QF*?jzv`TsRoIjkR5m{Irr;a@O>DE>|LZ!$-dzS_NKLJ}g=g6vSiB+IECz zy^zMFRR!igQ)Xz`%KgdS(yw-Hb8E=`_2I6MtNl_QnkBC03EmBK4}+(xpUXO@geCxi C#9h_^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_file_install.png b/app/src/main/res/drawable-mdpi/ic_file_install.png new file mode 100644 index 0000000000000000000000000000000000000000..4cc23747a8e358a7c8f14ae53dfabbc3e617c61d GIT binary patch literal 506 zcmV000d>0sP;YmjD0&8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10e4A6K~zYIwUjYS!$25@-|w1&i{RoQ2vS{Ky6WocQV_8n6uLOL z8j~gsI0vx3|(10D$dtzMQ6jB(U3P zG-lHh0KgE0IN_X+#~sjiYPHEIAe3^1`j^Hsz;O@+bGoj-Dg_Z@^y#&W2^RqJV(~1RNQail^cZ2$lO literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_cancel.png b/app/src/main/res/drawable-xhdpi/ic_cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..3e85c8a971ef2ce782658257da2eb0f316f2d922 GIT binary patch literal 846 zcmV-U1F`&xP)(Fa2c|Nhj#VomAy|kMpiy{- zVs*@DIei7Bss$>!0}=xgv_qc(bwi@GXr3g~&&NNB0*N9zI!J{d{tAGK7)97+&?w=oqgq5(XZ)H`=s3DIqcNles~) zTU9y5z>gzv_c#0bEAC5pg9f&k1%q9{Df5P)(eT);z$0F)!)3LY{DfLjTd z@Q_ge+(@{Fha3V>Ori{U$SDAJ5@o@Ig#hG}0REH(50(OO+wQ9BK4~4}ZD#HxBAZ*j ze_+Gm*&GD0<@*OJ(k7)9CrwbbYYPtr&VWhAa*B(SR-~{1SV=f*2Av2%E(xcdto0a} zjtqy+evDk->*7N)UgsxMpAxcwH>rLQ7l1b@EMYwccEYfYNcwF2Z!(KZ1Cia)8jw}2 z1TwGNsCKhVc16~ma+i=zV^-#!T`qwlU1eDknFU<5#AQfi5^&kiyOu~5DC1_trNm5u zGVi2ZNhAuC32)*;B357?@Fqni{u7udyh#y>I|5a}o7hT>1*(KMv5^p{2fRsM38@pj zNgfFg&wG}(qlj$I^I5U)`-dXZA*~hnybW)u+3X^c1Xp<7#x@z&oubRDtG5ENe>H%L zpVFHolv8v$7`*QFde`Ht(3C_i;7z6^#_%vT4;Tr7uT_-Itn7qgTjA+av)OI6TH~?t Y7p~ax>L0Z7B>(^b07*qoM6N<$f{@j1I{*Lx literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_file_download.png b/app/src/main/res/drawable-xhdpi/ic_file_download.png new file mode 100644 index 0000000000000000000000000000000000000000..2923dd8931588978b70d4a7a5a108c016778e4d3 GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmSQK*5Dp-y;YjHK@;M7UB8wRq z_`#TQ-qjK~}U&Kt*>vT^vI) z8sFY9_;Bt{arng}6iQE?vPd%1A^((m$r0`_x^)(KkU!RzH{V3zoDW`J8OD|-7 z`(R@~UFg%h+9QfHIVa3zxCtdTHK0EkJYD@<);T3K0RZsQg%kh) literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_file_install.png b/app/src/main/res/drawable-xhdpi/ic_file_install.png new file mode 100644 index 0000000000000000000000000000000000000000..1de323ce100864e59df66542e99c38f015545d73 GIT binary patch literal 793 zcmV+!1LpjRP)1Jc-tShye&Q5OqAv9YqTv9OaMf`wR!OA^+dIX1z^!fJ9K zGxL|j-0#fCy!bD{Fzt4G<8r@$r0RJKrmTM@YPA-?d}{S^VG8c`dc?q;D2n!&vUFlB zFiZ(a@;D5`ZI*Z=$Cdy9Y!$#$rBvA>^S`kv006tDCMNDNGg;=Y8QTJ2;6xOLo^9@0 zu`U1rL^OXR3};-hSI3C}0FeOqZwA3mNBrM|9I`hgM2n3^V~fKXP6fcg^twXfky2{C zs~JuOhS@h&D&2MkPeTAqbgmTy=UuQ<5dZ)pYDdlHe%st)6h#M&2yr|)>MRJ+xz%j$ zzF4b$Fq-)nG)Z0<5ooNR?&cLCo&`a$*Z2KzMstTr?GgGTI|@V(I-O3z1}qB!066rq z+r4H3l$8LO*}oo!r%gGT2>^hNB9y5BEEJ)v1pvb$lm`L8pa|tfK)VR#MgY(&Lb(#q zNv;H#`O0O_TO4OiZUhK;C_OJ6cU@it-Y)g~XNic%U6==f&k1l;Db>?iT(o^PV`cy$ zj(Jjk(gkEHK)`HO$~PvA%mj!isLst9Z^>u%4m{sJJ$=;%C<}r2G4shvr4rkK6(Phy zBSIWcg6PSJXMZgw$zfTmS?R+7P?S=>Gyw!buxZ3{yMiRC*xZo-QhbD%`GTy~UfJfR z@)aWHyVCcaY%iv92VO4?22QpW0mlLabbrM0ai!F#00000NkvXXu0mjf9TrTM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_cancel.png b/app/src/main/res/drawable-xxhdpi/ic_cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..155ddbc59a67cd904d2ec3e1dc38776057d0b2cc GIT binary patch literal 1124 zcmV-q1e^PbP)eY@A~z9xh}f8E)6pZA$o-oY%(He3h?4t|_Y zChzw4_PV;aY9H@?`*ydx4?M=Xzkl1^eUSG#clAKT0XnmTAspRmw|{C%Pl`AJez~+H&vcF#+<6J&z3=q8-Gh=i0Bu^W=dIyr^s|Ex724kHbvg%i z9s->AoWFq0(kF*-G#rh#+=UC3?Siul)$!-H=yw{PoILd2pUnP?H3>-y2d<2Rnt&vU z134qw*KqKrkzk|4WrRFdUx$t#s~iJbomJ z0}4Q}U{9(Ng`N|0OZtKUgTY{WZ+(6L>y?#nfx8-Q%%X?`NKZKK%k6dfCI`v zpoCsp-EB98WS5E880cB0ErJA4UyD=)JD}t zNUA{UQw{?pH6XM3m@-mhCaYRV;^Uz6a>qO1eudKyf&YMSN}c80op5&c-S_M3`-8#Y zv_iYZmzKPkL?sY7OT9RGF|{eVUK}CUVFfp)7DfBK=|f$Rk}vyQH@B(-QqqOPc_yBz zk&-PvmzkBPL`t%Gp-Raj6_WY(mqqG1DUeJzP)QWKtdY#N;7L{jEs;z%acY!Ft&r5W z0c+NfEs#_x={7y`TI)9zWyr-pBdl+{X0u^mQx1 zE1=w$4B<#)!=y&M_b0>g_+f>YCrkqTQR(F-b?-TODfx4o1m~Xg`~454UyrklI5Be~ z&2XUP3zn7{C*}sEOE^&C6nayWew&~!-a5UO# q8cvM&zSCP>eG}mKe!rhP6!-*uVF+uv6X%-%00004nJ zi0gtdnvPC8XgN28k_JicHKK8yEga0?FF%$Zk@mVt?Kn*f7{9T z^{4kwzx-0T;+>`XMm?DqEKN%%?kY@R5YXu~VPR)uJQ(D0xFA76K&R0}gq@A~V91h( z784j)f+qwOC~$IkO}tc~Ajsi0A*fJ6k|Sv1rNRXa96=Mj3Knp1v?)z}=%6UT7j>aYBMS$X2=ls8p+`+t0Pn&9Bb#L6k6G6570GiT~vH=nw5Ui89cGwguj O&EV^yL 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 IM6N<$g2DPgGynhq literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_file_download.png b/app/src/main/res/drawable-xxxhdpi/ic_file_download.png new file mode 100644 index 0000000000000000000000000000000000000000..025407ad23d395379f7c1af4383c83657e0803c7 GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEX7WqAsj$Z!;#Vf4nJ z$UO&P#*0pdF+f4d64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq!<_&7kaul zhE&XXd&kg^*-(P@A>%r?9f4bNUu^j1vE->=$pz&WjvICRC;#M2sJy>rH}@nJPaxVQ zTK5v71>P-}9y@G5_}rUUbpbPVlugc$U? zHk|pfA%NjWXv@-L?MImo^b1atmKWn;xbGHG^ylf@wR68+^LttC0Sv-Rs%|yPW?$}~ p&)oap_HFni)bIkS03+USoI2T;A|kW2zX4;E!PC{xWt~$(69Dgr&>jE) literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_file_install.png b/app/src/main/res/drawable-xxxhdpi/ic_file_install.png new file mode 100644 index 0000000000000000000000000000000000000000..c38be03106a0033547504472c3c399b5180b9435 GIT binary patch literal 1216 zcmV;x1V8(UP)B);1gg1XhlE6u09aslPpfsdD2n^Iw}e8JfSN-yQ&S&v zj|hcC0kA|z2W9yh_l^*V6aWB3^x<%2l_m)QfY-H!oTdp-7jhaW0Lns669oW@LQYc!07^nmdtl5b+#`r+2G;tx^xiwM2DOh1OS3VPAmcdp&=(G z0f4}e6Po~7V19Kl=yLDaAvysy%Thv4tOCS@oLB__LPAc=0z`zIs0GxphMXkeI&2{) z38>);IZ40`SVB$`a5KR}P7-h{2UWQ2rV0VH%k&^`MPLPn31l$?# zAtwo7rp-M-INQjw=kiYHH(v)N0lQ-fIJVg7eDCv+^b)i?Wr#mzNdj)qw~y`Le=@{D zNx-dK8d>||!otER#9`?@;AZ}8Rn=Ul-~TJrf$0vo!Bte%{E2@5=a7dc0X5dzH#+_P zccITs0x7TC&qQE2oxcJZ3)|*_1M=gMW&8wr)^F>ko$F(750e@%K&Mhr1{lPgR zRsmH8ynLe9`;mJ{tOAy#d{cXL0ti@N>~;s-J9daozzG0NUL=f0cVgS(f`+ zL_P#u*f%@-j)&_`j3&PcUm98aLa4CfN>kqhf`=7Xns^7WgcVmBCx9!gxY9HMY+=Qf zCJA5-E3Py`fP}E(N)rT#2rI5=7a%6AxT0Eswf1c(VZ{}-0ti^|vmmiy#T88gM28huG`$1`d156rS_E7O^~6eOGzd@;R$P((9-ttBQYI*I5Ixx@x0000