From 4ec425f617d94db13c20e0d3f86c5998ffee5a13 Mon Sep 17 00:00:00 2001 From: wyf <18818870625@163.com> Date: Wed, 13 Dec 2023 09:23:00 +0800 Subject: [PATCH 01/11] notes --- doc/Notes.java | 287 +++++++++++++++++++++++++++++++++++++++++++++++++ doc/init.docx | Bin 14260 -> 0 bytes 2 files changed, 287 insertions(+) create mode 100644 doc/Notes.java delete mode 100644 doc/init.docx diff --git a/doc/Notes.java b/doc/Notes.java new file mode 100644 index 0000000..74a9884 --- /dev/null +++ b/doc/Notes.java @@ -0,0 +1,287 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.net.Uri; +//Notes中定义的常量,大多为int或string +public class Notes { + //static关键词可将变量限制在当前文件,其他文件无法调用该变量,即变为静态 + //final 关键字用于防止类被继承或虚函数被重写 + public static final String AUTHORITY = "micode_notes"; + public static final String TAG = "Notes"; + //以下三个常量对NoteColumns.TYPE的值进行设置时会用到 + public static final int TYPE_NOTE = 0; + public static final int TYPE_FOLDER = 1; + public static final int TYPE_SYSTEM = 2; + + /** + * Following IDs are system folders' identifiers + * {@link Notes#ID_ROOT_FOLDER } is default folder + * {@link Notes#ID_TEMPARAY_FOLDER } is for notes belonging no folder + * {@link Notes#ID_CALL_RECORD_FOLDER} is to store call records + */ + public static final int ID_ROOT_FOLDER = 0; + public static final int ID_TEMPARAY_FOLDER = -1; + public static final int ID_CALL_RECORD_FOLDER = -2; + public static final int ID_TRASH_FOLER = -3; + + public static final String INTENT_EXTRA_ALERT_DATE = "net.micode.notes.alert_date"; + public static final String INTENT_EXTRA_BACKGROUND_ID = "net.micode.notes.background_color_id"; + public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id"; + public static final String INTENT_EXTRA_WIDGET_TYPE = "net.micode.notes.widget_type"; + public static final String INTENT_EXTRA_FOLDER_ID = "net.micode.notes.folder_id"; + public static final String INTENT_EXTRA_CALL_DATE = "net.micode.notes.call_date"; + + public static final int TYPE_WIDGET_INVALIDE = -1; + public static final int TYPE_WIDGET_2X = 0; + public static final int TYPE_WIDGET_4X = 1; + + public static class DataConstants { + public static final String NOTE = TextNote.CONTENT_ITEM_TYPE; + public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE; + } + + /** + * Uri to query all notes and folders + */ + //定义查询便签和文件夹的指针 + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); + + /** + * Uri to query data + */ + //定义查找数据的指针。 + public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); + // 定义NoteColumns的常量,用于后面创建数据库的表头 + public interface NoteColumns { + /** + * The unique ID for a row + *
Type: INTEGER (long)
+ */ + public static final String ID = "_id"; + + /** + * The parent's id for note or folder + *Type: INTEGER (long)
+ */ + public static final String PARENT_ID = "parent_id"; + + /** + * Created data for note or folder + *Type: INTEGER (long)
+ */ + public static final String CREATED_DATE = "created_date"; + + /** + * Latest modified date + *Type: INTEGER (long)
+ */ + public static final String MODIFIED_DATE = "modified_date"; + + + /** + * Alert date + *Type: INTEGER (long)
+ */ + public static final String ALERTED_DATE = "alert_date"; + + /** + * Folder's name or text content of note + *Type: TEXT
+ */ + public static final String SNIPPET = "snippet"; + + /** + * Note's widget id + *Type: INTEGER (long)
+ */ + public static final String WIDGET_ID = "widget_id"; + + /** + * Note's widget type + *Type: INTEGER (long)
+ */ + public static final String WIDGET_TYPE = "widget_type"; + + /** + * Note's background color's id + *Type: INTEGER (long)
+ */ + public static final String BG_COLOR_ID = "bg_color_id"; + + /** + * For text note, it doesn't has attachment, for multi-media + * note, it has at least one attachment + *Type: INTEGER
+ */ + public static final String HAS_ATTACHMENT = "has_attachment"; + + /** + * Folder's count of notes + *Type: INTEGER (long)
+ */ + public static final String NOTES_COUNT = "notes_count"; + + /** + * The file type: folder or note + *Type: INTEGER
+ */ + public static final String TYPE = "type"; + + /** + * The last sync id + *Type: INTEGER (long)
+ */ + public static final String SYNC_ID = "sync_id"; + + /** + * Sign to indicate local modified or not + *Type: INTEGER
+ */ + public static final String LOCAL_MODIFIED = "local_modified"; + + /** + * Original parent id before moving into temporary folder + *Type : INTEGER
+ */ + public static final String ORIGIN_PARENT_ID = "origin_parent_id"; + + /** + * The gtask id + *Type : TEXT
+ */ + public static final String GTASK_ID = "gtask_id"; + + /** + * The version code + *Type : INTEGER (long)
+ */ + public static final String VERSION = "version"; + }//这些常量主要是定义便签的属性的。 + + // 定义DataColumns的常量,用于后面创建数据库的表头 + public interface DataColumns { + /** + * The unique ID for a row + *Type: INTEGER (long)
+ */ + public static final String ID = "_id"; + + /** + * The MIME type of the item represented by this row. + *Type: Text
+ */ + public static final String MIME_TYPE = "mime_type"; + + /** + * The reference id to note that this data belongs to + *Type: INTEGER (long)
+ */ + public static final String NOTE_ID = "note_id"; + + /** + * Created data for note or folder + *Type: INTEGER (long)
+ */ + public static final String CREATED_DATE = "created_date"; + + /** + * Latest modified date + *Type: INTEGER (long)
+ */ + public static final String MODIFIED_DATE = "modified_date"; + + /** + * Data's content + *Type: TEXT
+ */ + public static final String CONTENT = "content"; + + + /** + * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * integer data type + *Type: INTEGER
+ */ + public static final String DATA1 = "data1"; + + /** + * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * integer data type + *Type: INTEGER
+ */ + public static final String DATA2 = "data2"; + + /** + * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * TEXT data type + *Type: TEXT
+ */ + public static final String DATA3 = "data3"; + + /** + * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * TEXT data type + *Type: TEXT
+ */ + public static final String DATA4 = "data4"; + + /** + * Generic data column, the meaning is {@link #MIMETYPE} specific, used for + * TEXT data type + *Type: TEXT
+ */ + public static final String DATA5 = "data5"; + }//主要是定义存储便签内容数据的 + + public static final class TextNote implements DataColumns { + /** + * Mode to indicate the text in check list mode or not + *Type: Integer 1:check list mode 0: normal mode
+ */ + public static final String MODE = DATA1; + + public static final int MODE_CHECK_LIST = 1; + + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note"; + + public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note"; + + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note"); + }//定义文本内容的数据结构 + + public static final class CallNote implements DataColumns { + /** + * Call date for this record + *Type: INTEGER (long)
+ */ + public static final String CALL_DATE = DATA1; + + /** + * Phone number for this record + *Type: TEXT
+ */ + public static final String PHONE_NUMBER = DATA3; + + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note"; + + public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note"; + + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note"); + }//定义电话内容的数据结构 + +} diff --git a/doc/init.docx b/doc/init.docx deleted file mode 100644 index d372bd0def4c30857c07a21b93ff621b2a366ee0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14260 zcmeHu1y^0k*6qRF-JL*i4Fq?0cPF@8fZ*=#?(QzZ-CcvbCP9O~lkVHMyVL!C!FLa1 zufg6`bM4|VSJkSjS@Kd~;OGEI05kvqAOT2rfZAJw002~w000^Q8dOWj*2c-i#z{~4 zqn(MP4!xVT6>%OoC{+#s6j=X%pZ~+(KtsZqMIR%w$X(!z|4h@eWE)js|43f637**l zNEoZEu!)3t{L-c?K37o!IlW9L(=yB528&V3jImalF#?Ij2S@gCNLmn@%vqP%`sfuY z_o=v$-nRxBff?t-btCr=7OZO@Ltsj+$5&8i`0NPxQ6*7W4to>}?Q+q@s||WOW3mlF zo?IAPc4sxf!>LsXt+?I&1S{Yvr?eil2sCJ%vgGidWKp=wpdT^qe zY_$zzfxIUr{pE358>y8%$`Ss19+1bcUkI!C(0wo*MTA37zCGiYv>%tnWi=0Zc;&0` zp`J@vQkS84+C!z1c+TzMtr#T)yibDvXW$FDZ~!Anu!nLkg{cTp<&;1dY8#a+d6ECD zWrow5Td)14^UOB&VNt9^T4dsqaiHr%+}iq4yW;!OU7Z6PIJz*atG?-Pi!`aRq87T~ zVvdvBNt?y2SL$>px1j~ivYF&HeaJ43hSy8&%1zc#VLRVMVjiA;h84_P&>ra_RCA^U zHQ>80oeo50c)j629GAD7 zeC=j`ad+nCxB{-QaF$+VC{l$SwSIAp6z!NUopraK;lUqMIfNgs+Hj*~n1vNmm3u3{ z{9x;Osab^Gk{+|0Zo)-!9~MsOFk#jfgy*$q{M~cIYOq)vE$2JN6qC1ClsW`Len37E zuM21B?YmVRsA9UUlBpIugi10I0&u#^1An8>R=V=)i8mGE^>UfI36#69RQbK=EQ+lm zp_aWuE`0C;cIgO}_!8)2=nd@Ruzqt%3gRqjlL%1_SM~af$Wq4czS@s#c(mD_oa2=5>2Po+ar;?4$DZeQ<49KWN9! zE@&bBF=A&dpV9EuUiW6heUtW%aCxs?AU`6nWFwxuWPz%S$EykQ;p!g!Vm;yQ22`?G z_=%J~&XoQ_H6 4ybD%`rbc(M zZ(b>djX|T{Zf7E1!Tn@v509aJygR;ryeVjJhk#-bGSIMkAO5TbmXMkD)_c61-^L`t zK+LWw8;xRHdL_rUJoaR`dNc?$RLDBV%r<%QT;_815Q&;KOMRc8yU BwyW~VSKO^tt80{ zm63by6`07nu<=F+1@NC19H~rVrN+3+J=opOfOqcdVgs&|Gy0Y&C@8}j0R*0eOHkFd z%sBccMFKYADJS+=rD Kjhmz%pk*^AhH((U$(Fb#Vd>C6mTMZQ0=xytzi1o z(37^eE7l;IKIuVEfb(K{IhNxqMf^QXCu)uM>5q0F_AukGt-ljZrLC4D&aNN#N$ATG z)eBS~_Zs!XkVguX>bj76(JAHtREb$8->4zyyf@=UtPS{xuopuW6mt{t1n2mzS{Dw8 zQTWwM;OFA0@%j0Ihj-NScuT`kT(yXG0{-KVdQTWr9Cj^JNsy3e1}PJasjj*_s@5jF z7=n_W#^(OXebf@Lw|s9cTmq??+EaQT-Ugv*+YEgTAp|uJE my1+m@qybXELT|;$ZoxLg-1HuJA6! MUy=R)W>VD1oH}@zDGPt?ru~`>&tyGhWYh2`Q{1u_caE8EJ76_muj`El{Xt5W2Y| z9SX&4_%pI#8xpHxl(@@sbSTGv@ML%r&k}F-A}a3n*N>GlY-Kp@NOfWgX%o4G`OHM? zg))z*Pd~=Hg^4vIN{BsPE i} o>*4U4S>v_&1 zj(wPUe@vvmB8K~d$_NWJ_AVvEqceqjY-isH?45F+Q(iS*hM@xT+5d`^9Y{=O5h$rG zWn36>?~0NYsxtDek?6?}6(lliX4u7d@x>q*>InAT_V)ZtBxH*p${wNvS@Gc(2S?a% zJQS4kZ6y=pq~;WC8iO%NIMqmfzD}PJiWSTF+wYHF-*wHzNui+M5 z9y*4ua}dy6eJNQAEM4)A$11*Y-1Z`=O~R-wpECSe%|%#fl7Ym}tH8Pp=;q_iN9e3) zW9n*^TN&HvknzA6Sy3aS;%U#=ousU{Xqy~W9H~$o!4Mjx-U%prEwQ6u&wu47=WI{& zv9J=hb4lsrRTUeQQ`vkrSdgx~5y;K39gi)wIU&JdS?ij_9_BCEWE6RKRcW8C1u{NA zkv!iQ#5NXHk+v4*2YkIx|GMBh<4&1H_9El@lf1E`S2iUdT&EZ9`*?P*uavekCXMo< zBin Z7jZ2UhtQl6l=zRTrlCzM7qM6V`m-khWT5`FOU{@=CXx^(Wo2H qh za`bR8wQvRR!u?eozOB0)SIC9gSu^Dom2gvllVtoH&DAjM#5rA2v9J%t8b)aiNkKYv zLSVmYvub0M56jQ$?I3^wD#K67Ob7z)x(ShxY=V4V*4;8<6jfCEc`|LRKid`3BA#=N z-LM~@K8(he#tzdDHj0KcSeFDu%O3Y0gM>STl^V?M(XhsyU*qcV3hu7U^Q&tJWy=qr zp%shrDsI+xQ>|!hqLpH_FZP*m@NSy&zjZH4a`Fl8En|eV!ZR<;n__mRi;uXZ4ej)7 zmJY2T+%y%I3Eh}{+XZ Y22wZMQwFWgdES@DCk^cdPj2J&nv7S`XX5tI~?%>9~op|6F?&l9{NaE*k zgFWzrbE<_L`2tg$4?GpZ 25l=oFw?O^5XqX2xC$A>E+n#&(%$p#B&vfK5EM-WOY^AL2GF7E_{cDH$e z%pQ5{J_)?RQt^@tw8*7i4@fvY;;-tmKXF#L>9vKoVhAK_podML4!D1RY+W4V$mSRt z_C^FLin2`#jCgW=>=VnJ>fe7`z7hX}PWGg0OJ%a8T1ZC1ane#FgJx75o0NAN)wFpk zyJr?*M_B#=qgjSO(p5)2_HBW;G6T1bpBq8A3qIu)I_a`h?xNM{cyq^#-ds23kLrS^ zOW_ZEaR}PY`T(voiUHPiYPN%$q!KEBvQ+1Al%Y_Rc%_LC-n!fom5Vu29jf^$khs)U zFj9xEo%*9VGx`8cY~%DV8H81pDJNu;^R$!0uaJ^7bpzYJdK}{u44gSw=;{QSOxU{3 zw|Wv88Pyny+2Me1;3KT!bJZ$wtoZx-v{H}!8k`l=V*S_dFyOC!39AOrJGPgM82 &{*=0@FOEF;sIYvk?zLO2! (;o%K* z5kaMuj2YI0Q~UQ9VHbS!s?3;&66tQbji+D@=hkP6UKO}*btDmbVIA^Q-n(d*m2=Fj zCd};jY<@?T4Fe))e9B5eIpySvBo9=O(h~#d$Uy=DNP0rEeURPgLx+`V)q{RE_qd(I zTOL^8n*!P^CkHq*s9CZq>FShTB^1T8;6wP_r=MI>vlji($au@rtHUsI9`IfUvDEuV zitRaLH-V1Fiyc$W?0Ob2+NN$NTMc7(N_%1wj4SbySHB9e7r(TZD{;~~!V1UDx38BE zO*N uiZQsc*QRBlM0UcD9deq_#WL+`X6*c`JNqnuO-#*~mN>Kd%;NH#8l>)* zR4tzG5#%Vj*P{Fy^n9mKUe_~8>OXJx@G@qwg6azSUFwL?dGk=BkM>5w#^W$Eh}lnA zpoq9FJl*NgJR_wGuCAmi^T*?Wi^S}F^Wm0Jgmt%bKg_WgI2j6} mjEXE2GL#RV z6g `5q4zEbNvt8klcJQr=BGqKiwHQ5uzT zP4AXdn(5EO$+AhNT1%(0$wy9^+=IFo|K~;>6Sn+EDJTetTjW2Sv89uvySj;~{a@!x zZfnXpF0!I6 a(2A7uMZlz3cg=4uFBMd-YwxhsC`yJ@*T2TRK3>4SXCLhq`@8zhi)xK5f$syCAc zJ=8_($z trb#p$Z=niQQ2|;sSSm>7AU?`WcTKMlbH01 zczbSBA~0izCVGvRZZ4?!bGo097?am0$&;jaF_Mh=H4<#w91K8Tr3p;75Aq7y)v5EA z59XQhyuf1VGF4~GoCW`^TKg0j*kXw+DplII^or}OIm@3))p}fGfJ90Lku=A%oAT0Z z(vWR h%q+o7^84i6l5qH=^QA zbjkeEj1kqFL1Fwihi*=R(tanLWT|uNZ%mUUA213K1r!)m&Qwr;qTvQxfBNb1ty_b( z3{P#ib1oiD3nKWv#T}9?B*Le4%BHL{x)8*torjUTc)eUfzmAHZyTxz+%-$_U;W{ zcazS7RrdNuR*r%|!kf(#Gu$(by#kh!M3r);h6oI@pS=K+P_B_RQbp&tMQr>qbRoq~ zpTC~JF7g)Mg;HUPqn<)Qf-uH>_151T;kboZD^~VnStWkkvZ~q~-#2zYiQFQ4QXOOp zQ#GzwVF+$pgMxa0;*&R|r}c6_MZNRn_UPM>-|*!PFsJc^=n%uh%vs|_?6QqOlVow* z3((o> }vTE zpJH>OCUzD~w8IGyQPTeydO~a8Q1z*-zvlxQ-&~dE!#K(%f|gBD_%L#KSA%DehRFJ= z{g>crm`$ciZFlU04U+#4d#)WU%xz5m$DZql8~d_4N=S$T@ZW#;T>pKcjf07m#am`) zM=J=3pqKa2%8F9R2>8EF(?ph$mQaO&fZ~UMcvTJuKJEk}^M-8_{14JiRZ0w^dW>)% z{Nc5gsDda2L|r`Mqsgz+HsPJ6b=<&S!2Q=B v5bVMy0_uclUEZV_rfv! zO8gW_{^^xF=*ev6v*Bg6&xj0_(!A;r7F7zZ9u-SPh524bQvr9R;?)Y_X~*pfi7M!O zzf2Tq*kH^RI^aR-1PdLGRLN43`V~K RdZ&t>V0lzlv!7#x{7dLt?v zJj$qIl!=8T99b9|!T;iC>A>b`PqxN1pR+mGk-+5q@*HhhU-ww9{u?&X)nk~x{SprU z1#AsnCMXo`g4Uh{?G0f@Hd^m+Ou|wqj8LcFNZjLlHcM%FW8$-)tO8u+>7Qd~SF}K1 z3m#k w?Iwb{21hgKJw{ACcX 8(3=w?rR3q@CyPkIBfEoK6~qlz z4}Poda_&(oIu7$qXqHF0Vj?X!fZ3S^o*0T6%EH*wSk`mpSyj-BDV@G3(+2G#pD?F1 zSEk1Y7w@vgboJ=CXSL6*`;uE!=#fZFddK7;C}C~ p2GiLpJJE zMl_a5jZgx2cg}tNR)n}sz!1^T4Q`0}r_dX*5YYw O8|D? zK$7+3&%?j{3(cd!fER|v7Y>WV00hrekJeAD%tg^-?!0fYP1_mQs)p8GV zsqUu}3DDrOq^b0n6-vQ&@X{hC?XmIG9?H^$nWM~lWuR?DSkip2Wuu^M+gsOfTo=h$ z&MZWhZuenkmDs}yChIm^3=s{&>)9L_i5v*l@BQu^GthI{vzfko&S$)&tcVyN>Tii3 z#<6&`_I3U}Na97|X=SZt;S__6@?p(S8V(-j??obgBhqU~07cLs>hvl!giTajJaexr zav )rz`IWjrtPT_!{Fz-qY9#UY(*aQgzO#kZr^c#aWWp}WzyBd0AJr{t)_7&R<_ zSqV59;(xWrpZ5t>ZEcozzzYOAvc80Xc9`l#A{BnFUWt?m{uH#1fbiVN#T{q~8-W0l zLwv6$tfh8;_cM4P+$A_VSf%%2J@MrHhoIsDl4<2g{{w$m!d8!04B8u{{}>W5G(re} zgB3Awtt~R5oum~93i(cA?R1Zr$T)*2Xh5V!roI`7lEeOt{Tz{cBEvRGnhk C9r~X+YsmY7Z1$ 4n*lTo0sf<9UHi~2az`aqhzqAsV{uw2!b$EP|-W5 z{EE=#%>QUMXxCO)>FV|R9gXiQ9NB*FpT^4A`1Xt 6TI8ReknE@y~E^r;9Is ziLQ;bp?VeZssw_XBBw>#+!F!_6@!rT(Mae?V072903?3H`o%oBCD>--Jt7Ex2SyLB z1Q?jZbK~b2mT=X5oAJ-&E*am1h@8uZk+8lN9bR) v9y~^myn*fz#|dA0cgEvl`PC0`;Vw0?I_wygzV0-(h$zY&-!{lZ#0ez zV{W6)#Quy=pBiS@I0U@dI@l~(uwxPekpzgxiYdC*{lgNbdc4y9c%r0gc$u&h4H+B( zr6+AxsyXUOz1J8auJeH%U?=kDynut2>HjaE;mtjt2VQ=X$i6(hJa-MKzI$$ZIeu@} zD#bOa13(7{*YExIBwK|6uhKiE)hAv~e_h5& m7W&95sv`}hRtnZ% z_?P;7m56uJ*`$Hun}!D>^~~pksdZXwR18 fYUzC2;xF~80@N|o9 zZ>~}_TvlOmI&w^C>S(9E{G@d=X;yVHJ;Vh*x~t9ih=|*FTl+3g-w8iyA%_kxJzWa~ z-OboTDmq6q)bq#cCkvYct{QP5uyWiAy0No;%>#ZP8Ya_uU#^$xx3m2eI(mTvN)YG_ z{81Jr6JJxQDtXY6o3S;5;ZP4gJBWrJrntmUw%-cd2*WpBvJ}U(CVlQ-uTSU58Y7>H zj~mpwLPvKlKYD;@aM6=*>0_xDJE<(81M;oehXQ?G=Om^hNFE-O!Mlu!zr`-Q4f)jw z+kcP;nyUU@3&-4yU;oZ{2PEfrq}~Dj{=D?pX1C$DhDUA7EKE@BY&d>3AO4N`!cnQO z%r1oS&tL`JLJg6%%yRFmgaoD-{RA&3c?Bw0#DQA$Fn=PGFih%Jse*btRoRM&tvjZ# zWBmeH`fw#@n=OjhIU!;v*MGtxG*uqbT8N!Bjw^+cg^vaoOP2Uq_WLcPob@|mX$MRU z->seg0D5R*1*ki#L6xzE^s*V1E{YaP-XPEnlAL`@UP#a%zFkb(T~rCBpe(zZSkrE@ z8Gl3l Bs!pSaJ}O$@3W8goeP`x)>h)(DJ69vD%AuwQJ0j4$&F$w zwRG;{NL)$ef8Pe#I}=fgZNA@mbh9IJKE8X*rpr~$fzj4JMnXB78f(PII$|N` T#??4!qus1FPWVw=hR*u+~MimQap{85c}woS8-o2W8r0n9{;ij zGtM{8LxNnj_x$w#epwjY)|>NnY%4Rq%vU=zit#krG;r0fqPLqwhgFCA%-2JoQl+7p zjsJkFXm0{*Jr!lP6B^L7nfiK9+YjF!aqurM%?@;XtT?SI@x`y~=ru>Ex&6>iiu~6M z{Opl^8bRUUB^bYZ<9z%8emv&FCee`=^W3KR%lzARJLv{->Gl8MMltE1K4&8=7h4gw zR#1F6ug)ic0qhE!d{(6ZHW2JQcd^WkK698IZc4uWzs;cs 2ux56aXf@ z79l5xX2vINwU;}p%@HbphJ0`@JsZjCYbUlMyJDn<87)qw`&EZoxxmYF){$mRN+srN z)Kh#(i+q)TP1rgtBmy&c3?ISxJf^e5=5gl4zNm9bL;N*Y&XGWLoLl+jSBe8&NyvZS zwA 9`fzdJhThVr0?pxZo3q3%Qjn@O(JsehhftG zhrxtNL{9JOZdDy)T{H<^k4buzSeTXoeDrOqHznroMqPJ!*@=D@(|lu0Q|NeKt8?GK zYkm^w9)t4lX;) &S&Xpo%^3^Hm(#uD6y}Ycm5OUejpr4RAbKH9julUo-w3 zTt4q!ry#Uo#3bjXKB!jd#9;DrSa=;TarVu*aS|(_0@7fGmrU-KlaF9Q{rRfVOX1|J z(%_Un2YF4)zj{w3x*xDCu5gnd(?T7r^An6u$4e)`Af!OOFk592cpFhCO5OEH?pp6E zZMc~7&>}EZ=kyTEN{h5G|q|U^S>t9xq2y6MBgT0ZrXS^YeJLP$S9jeeQ1E4PA zgyQS*C;~-*>;Ob};rw2HWHTRZ*`mx%e%tYpRS?G^sqkN}DiIeqlSGM|?(!8zVR#OH zQK_wQBIKnzS_%`onxR>nhqL62(Lt&e_cRZ|uKK;NuUV{bJb#4Mv>$QGwOh!yKcht- z0uq9+@i=?Kt?w>{C5#{|^ @p08A5V2M}2?)I>BVSed(`{#Qmh(YYUzBDy9K9aU%W%vBKV`>Ft z7fv^t*ymh}PeUE ^Ooi^G@Mu6rv%OAeXJ zHAI(=)B>COF+2T#nwe@kqfVf5oMB}wQJ>XQH2=leLgJi?V{Ig0UXX<+-VjfVvO$c% z6kBurr&KRV2LY@2^m3BxXMg1x!=uC+rN$vY*o>`|V~>kDzNY-aCc_0yn$r`f#9xS^ ze`MLU(O28nuf!ba$K tbWmyS<>OO8vF z<(3Vi O&2WnBUo1DQb8FoJeH)dNCDYYoVNT)d+H|{)E#sGgQfcupPUMY#XeI zTN#hSJyI&Aw+#jl7sutE(+mxpk~M6`vl;!#pZ4*xlZNK9@CBNp0q?{^j|mkNRR0VC z1<*kFn2*ufFqZ`iD8Amtfe8aA`**gpR33%|M9JcK{6^#lV2;iXM0()DHSEs;Y?v&t z6Ex4j#RcW$yMUanlU}bABEd(*<(EQ}LO{e>;SiTy+a{}=hZ*7m*}s`tUxqL}!}wX& z{~5F>@w h=8;mj+j!2+^9ao6^I+j5VfI#t*4RWE=S7JZm0NyY z4E^WD{>Ec+e0F`!@<<~1V>VxG-dbc39kuz!TD!v0`Tv7`beyqG(L+jhh|Azax+I}5 zI5?YVC9pFtFN|G;B(Pptx|1cp6Owo{@gvIJCyS;J8VMQu+mc_$ }7*ygQMP^gUwI@|(KH z NI@v)y+}-wM`3d9`5W-IHBSL#QwQ z;SrKN;|u`enzB<4?GU*2+fAjLmIG^1LZ3C1YhVml`Kd}PBQ2JT9luI1`w25u!#sP# zX+gdB5BU1n*LL0oj&Z4eu@ToRZbGVDv>FCU2Vd7Xd*DoR%}M-Ijb-g?SxZh*g2&aM z*r6Jr*u^o#3qlO6;^diV* 5 zgQ3q1AUb~@%;CY|w*-xW9VxmSd7&+>9QtTnJcQut7g7)QatriSi@n^zwGiCwC_zQx ztelN9;;n3>dEb%0*+E(!+)pfz;A?nw@WT4m_xk {2icmpe2DCJr3#^2Vl zs{^blmTF&`;co#Dw@~epkIw4zyyYi2%}%vr`eBxle<_UVVr9UqX6L0^mn0!~Cy`E` z72O2xJ@fE&Qe3|JQ^l??C}U-}QJYI7H^4lae( i-$%?e!9s(09$gTstrlHiG$ 4v+BpVx`NY2Q z%Km2?9k+bBoK4n`pZ9q|0@WRJRHIOnKJofRewIKJaJ*~u5fu`=%l!m|^U<~ 6Vcb@U1^=G1S`Eve8gDM8$J9|rMivjV zxKrfenkO)Rk&jloE`h*(6SSGuZeP4+>hh2k+%6N#y%e&rqPS{ybV-s`t=U^1tyk6V zX(3z4i33z!u7Udi%oDw+XMkch9=5gT-{L*InngtTnk+x{R+S*~Sf(^J7N!<2Ka*i= zDoNn((M8F|`fx7%lY>*?l3i}XkhZiYxR)qv%g{?gOG)V+(d_8cZM~J-$?J~MWO@Ao zOCh(_@4!;fqD^DS2EA2jpByN{nWXoL5qwhjD9YdJtw|Yh=Y%CfWZA!Xz-MwWLL`Ah zk1KG$TcGsz*sLpnef0a-Zc{Fk2}-w?)ImTbpa+O1R{ybroy6N?XL@N0K)RwiB5)(TSaY%8MAXdcAstW zmgRIxc(S)G_o|8j vFz-%3ZAh9K0_UzKaezn^?_KB0q zXLg(a4BC*F1sChvzqnSrsJR>|;K_Rc48N_2X+G*03P-e@M(R*!f{7MU=Eo KdVUy zY@ch7Thbpd`xBUKfSVEzffGJgGfL58i>}+;lOadDVk9JvD&jWMKmT9x2hH93FUsMi zCuu76aqS`EH2d%&T_M=KG5TUIeRot~$E6@ZcwfLbQ)xXAr??v$%o+Zom0Oi;z2GzLNDJscd-Y zce|V;EjOFRfPLS}+oy3K{d&;iz@2jPf&A~~bD;q+nclwzb3`YYd2DIR)nw{ Z2V@vdxhL~|--TX$A^1kBIkp3mJ0>C`Zmu=@)~))eNOY;S2J2UtNZ z6VjgJ5xbt3&MSw&JiV?b@4a?UK;FYWZu$fBQF{w!wTXH}{g40nvLw*(QS|jXD}P|R zg+4;!fO`F%!d=R>94N&Z89f9)_HA12O&sziP40Wp^_Y>LnSAKFEEFq$V}7ux3xH7T zG!8Mj=_QV#3T^d$mH#ftD;v+9z)9FJgYK_^Vul_{l3T}@g#L3}^S{2|;^7I#b|yLm z|0 m!+x1NH&D-SpEzmH%ISpo|^OmrJBCKp8wq*mL4*of>Yy2Nu z=D8)EG8SO=B7%D$-&K|BV}H^%0em7I2($@gySzW%6<4YFXK7klL?FBebLU-TvdmZ2 zX0bkFR9eJZ8C9gs!+mP>7Hm}dZQ$3Vfn&Hi<46Oz0La^{BDY|X^!N>a;PC63*Nq*y z2a+^Ufyh>Azt@ z-4eH_{a)-O@{7t4Jor~eZ88M;!nSbyQ7_*jrOPTd*Q`Hd_x*D{tA=GWUb2_`;Nk;* zHa9Z;d))(rB)?;fi=IwfA0M@H|9~%sTn6?@X1BgYV5SWw+-6#z&=MKcv*&s9J9Dc~ znNoz;g(CReY?)hs(EoOd@Mabf*E7E)SG%@@Y;JUVFW&&I(5xzA%`Wmo6FXKe?#u{_ z(`!Ww?^>=XE)gy!C^ZhTFmpVAVI|FiG2ro|)Irm?fWsIqs|_LS>-^5&mJ`;();s)Y zWfx&F4;iNb`pVk>=)WA*3Nz_ezFKP%WE_U3BTG>5i+vYLU`R+?ivD8lW4l8g&bh5? z(*Q7GPXGrz>fZq`TFioLdznWU*2=th+tCM1#V;kri)+B#eDGdwc|r)RTVBe)(3ks# zffWYYhEOtRF6qbw*xpUB& l?Y_#9cDpAfhX_m{t zM`JM>&g^4iS9J*^0X++*>eGJFx0qXg{w-W$xcE)(QhgMHVmwlC@NwX%^KeoDTekKs zfJWZKlIu5Kq^?Mrp96;An}!=r#U-N*a#J1Go3lG@MPFsz5;NVdR2Eu S&k438JL5^=*7&E0k%tfVuBEikbkIY$63d2`$T z#pR*DO2+YWpp?MwzzT|aDxo2vQ4FBh!v(UcdX#9f5VDY{U%&Pnshs)+5tDLSdY+2F z7(MSdfKw|=ncw4ZRO}k;{@$MKAwQV!2lY#%&uG?*GMmdiH^eX`m|5o0=OZmX#$el6 z&ckUZxDJ~gWa%gPiYy-&M`(o-KPe~{hRI&Wu406wFjh&XTPCHPn`bEcv{B(zz_4x_EBw+2)HK9Zmj&r4R_t{A6>c?7p`9jrL|Ecc@?(j~_(@-Vvvgx3 zQw64bPy^8pGR?L_E1pFK!|vg(-yG0rb)-1u3rTgv-4k7dcY77CNIil0*x&vh_*ym$ z0N_38Ci_S3j`=zI*|}4KOf~L)u&X?P=>qfjd#tlXwd0HJXs){}>q>w3W}W4;x}YV3 zHiE5bqU(!|89pCyx AF!qX ztVm^%wWwzS`_~8ZQ+jYcF}_IGcn6$QPG!5wtNAP9Pm#W8*JKCprsB(JRE!E%{$` !@uaL_5*ew&?v!i{{uPF{>f_yOs%A{0`$U&yrE!wLG zBqd*>O|k)ke>{S#ze}?s%Iba`5&8u!tC(f?>t%|tG8gM~fc0cD)Bh8kLlgUTJKkS8 zsfM-W A}U#O&ZWzN$g+g3*UkpqV$YMlaD81rD0{J_QVH% ziLM}e1|gQ)p!8t|x%dao2 zbeRA21R!8ky&W!5ZJA_yBS%K5`;VfMO-k4{`ydT>>@IGFA$EcK zkHF*Bu ^`Jsi%Qvwb?1iad-WJbEDoMzsLr8|s;Q&6`5@%pQ-H6H4Q3*JhWJ0#y# z!8HIIx^i$IuL`6FPvA4MI%;Cj8p9GE|4{P-NAwm)wr!u3k7)URXG5>DXh3DLpe3!? zK6oWHw{a+owH@rhPvNj#QMX3HOmUy$E(aqYX(KP@2C(Bl4$x38=FvzKkik9dVND2% zQR46M!F#|Rpiaq@X}M9VYv*tcDt4Gf>V*t^bkl5FEZ?IKJqmdzn7Ggmipt-tX Vx^xCmKEIt;Vb!77dxzSOov zUxIzh3Fi81$#wAUTpJ)?fOB~|^~IVwrU96I|4jY7 zxNU3yHh|O1oCEb!F&Y{qxA~*3Ikti~ ZXa{(Og1gV;5;@fAH$#@G>~+bp4kMp;Cqvw(h=1PM U6mmS!;-(x;D|A->9O7WNMNu<+^+!$tLRQcB6HJcuW C5#Ezt(->)hVQEg#+~bcdOq zpig+bL4v?mtv<<76=bg*^C~|*Vu#kIsS}b#`p1y<%wI;Cbpk(=c_!;zu@qTLyT<{C z0S6|WpEtJ?ZYQ>6y-Cgj*R-^dLVF&}xfS7uI9R!G@nJWi8Vdcwa&!Y8xO0WKm?$Z( zq_a5$7)mQ6wv9>`x5KNxj-6V+jlTXN{?A|oq}^VUANL3JCenKPks<=UZ>4RBvQ)Yf z0@Ws%<+vKi&?UTc&jN|)h!U7Vgr*y8G~`MCuh`8|W7++}3Lp+Bze8A)WN5fOruwbc z?P}9dslT0-`o}}bZzVx-x)yxq_DtrxhlwI11!qIfwI-0@PbpTEfH)8wLX^3C#AHNb z1pNar`^sE1Z$j2>4>Dtj`Ua|#a#p|b(HUT=1$_UVbLle#5OvH_ cV{dx`J$ z%==bp<*aC@UpjmvZ|@>t_Np|}#xsZx!@?y@Cj!TLaMSzy&aDMXEAtw7{P#?_1zc8B zGU0r%tVr}%_ffxLxoI`9RmyVfc6Bwmv8T^yFA)+3)~p5H)B~JK+Ko*Zu0HF`t-{ls z4Njm9A|?wPYSd{h+~Br@??X(lz1RPk2!B9{RM)!1T0yq~h ziVRU!PU485p}I0Q3?oRPYK|+sR<07UoQnsNDq|R!K82*7kL;%9$gT4k8zvhjCnV6m zax<%@DuSZ6Z=J&)IY+~#W( sr$62RVb51?VAi_NwqUaYSJ0S1_%`!vQBKc?j%V~GVw{MP2) zYFdh8xK-pUud<`d$sh$5E_$~N_^6G9fphUx>@}-_%2f1bx!mzjH=`UF{JE=vt-1mE zat1772v|raz3tiWb8S5WVcDpXymx~Fgg%8NyMXhe^Y!O)u$C?Mw8MYAmp0&O*Szqk zbq1aP18C_9mW_iqx9;s(`I;}%FWpGKpq `-4n z(#MZdPjag5WU%X6Ogkg>8%AP+g}k~GP)!%Z_HoZlhlqQj#%@~{ceOlRQDSvd P4T}_}#4ZT6swv{%(vYZM4Ijw4vha~^7+3}eTEb-{{ln@jm zQ=!)KNR<04pFVP$m0cZwT(xp5zUwk1 f{1_9w#>GtO4G48`+_MW#r9Oo8vawW5y*5kPnKKT$O2Bit28!>sGvm zPTRAIPk9DA=@jaBUGr(D{}~@~i->nChSxD;OrSH$UW~)aZ0<^V#PmgpiMtTvR2ggo zE@>b38m6vGuuh6yO+gkeQhh+FhTn0@XJwk}bxh+&X#O8bh&%0r>K{g`ZmFH@bUiPn zMWFN=X(EZhb+#4)EW18l+!qh1jkAefwrpw5un10m^I$B}7?p7ec}MT2Lt|s3zkeQQ zV6#)#lDo$PmKwo2?ND)n`akBfmx339-d_7`IDyzU$}EuZmmH=Ez-DcV-bw?pEGzMK zt@Nv*>2H(9ww!)rPNQ4rGZobqD?mCZvf!;q`tnP#>ppEyB{{!<<(*mduD_(@8~YzU z%ui%vxwbg6dSVjF!w6{#?fp6C2KAQ<1C6S@HFc9;H?l{HWa%RX8sr+pe+_z}#e7YY zK3HC+UE$T^t66CsyCZri{!7)#MSWK;RPa0Rk-*T9J o-S{%7|{Z?^wnX$h9<6p(9 zfCs+RTSL=L7T# |t%KDTn@vHVz$b&RPuA~akD4dQG_uVmgt-XXD#9dikRna9F$34} z*Pq|w^pF_-cd2|C{_J5a`+U}`uulw#E;dJDJn$;@&|g`YTx%~^xx=a+iQTC)!Z`{p z?=h_>VEHoa=U1_{&*`-V)`0Vo#{Vjs$my8nPXP-Y<7l4-Sp{E29KXhltlre8(b(4? z7SjGVIg$_F&qDlJ19{#)