From 84827838e2967f910d40b29d8ce783214fd2486f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=93=E6=99=BA=E8=88=AA?= <23373333@buaa.edu.cn> Date: Wed, 10 Dec 2025 17:58:17 +0800 Subject: [PATCH] llvmir some opt --- 2025编译技术实验文法定义及相关说明.pdf | Bin 0 -> 510996 bytes Compiler.java | 42 ++++ error/Error.java | 27 +++ error/ErrorType.java | 17 ++ error/Errors.java | 43 ++++ frontend/.DS_Store | Bin 0 -> 6148 bytes frontend/ast/.DS_Store | Bin 0 -> 8196 bytes frontend/ast/CompUnit.java | 63 +++++ frontend/ast/Node.java | 248 ++++++++++++++++++++ frontend/ast/NodeStack.java | 23 ++ frontend/ast/SyntaxType.java | 66 ++++++ frontend/ast/block/Block.java | 49 ++++ frontend/ast/block/BlockItem.java | 28 +++ frontend/ast/block/ForStmt.java | 57 +++++ frontend/ast/block/Stmt.java | 274 ++++++++++++++++++++++ frontend/ast/decl/ConstDecl.java | 51 ++++ frontend/ast/decl/ConstDef.java | 66 ++++++ frontend/ast/decl/Decl.java | 25 ++ frontend/ast/decl/VarDecl.java | 59 +++++ frontend/ast/decl/VarDef.java | 117 +++++++++ frontend/ast/exp/AddExp.java | 73 ++++++ frontend/ast/exp/Cond.java | 18 ++ frontend/ast/exp/ConstExp.java | 22 ++ frontend/ast/exp/EqExp.java | 49 ++++ frontend/ast/exp/Exp.java | 27 +++ frontend/ast/exp/LAndExp.java | 44 ++++ frontend/ast/exp/LOrExp.java | 44 ++++ frontend/ast/exp/LVal.java | 59 +++++ frontend/ast/exp/MulExp.java | 75 ++++++ frontend/ast/exp/NumberExp.java | 21 ++ frontend/ast/exp/PrimaryExp.java | 58 +++++ frontend/ast/exp/RelExp.java | 50 ++++ frontend/ast/exp/UnaryExp.java | 124 ++++++++++ frontend/ast/exp/UnaryOp.java | 17 ++ frontend/ast/func/FuncDef.java | 108 +++++++++ frontend/ast/func/FuncFParam.java | 49 ++++ frontend/ast/func/FuncFParams.java | 38 +++ frontend/ast/func/FuncRParams.java | 57 +++++ frontend/ast/func/FuncType.java | 27 +++ frontend/ast/func/MainFuncDef.java | 60 +++++ frontend/ast/token/TokenNode.java | 50 ++++ frontend/ast/val/ConstInitVal.java | 58 +++++ frontend/ast/val/InitVal.java | 71 ++++++ frontend/lexer/Lexer.java | 245 +++++++++++++++++++ frontend/lexer/Token.java | 42 ++++ frontend/lexer/TokenStream.java | 42 ++++ frontend/lexer/TokenType.java | 123 ++++++++++ frontend/parser/Parser.java | 38 +++ midend/Midend.java | 31 +++ midend/errorhandle/ErrorHandler.java | 32 +++ midend/llvm/IrBuilder.java | 143 +++++++++++ midend/llvm/IrModule.java | 100 ++++++++ midend/llvm/constant/IrConstant.java | 14 ++ midend/llvm/constant/IrConstantArray.java | 47 ++++ midend/llvm/constant/IrConstantInt.java | 20 ++ midend/llvm/constant/IrConstantStr.java | 53 +++++ midend/llvm/instr/AllocateInstr.java | 21 ++ midend/llvm/instr/AluInstr.java | 24 ++ midend/llvm/instr/AluType.java | 53 +++++ midend/llvm/instr/BranchInstr.java | 33 +++ midend/llvm/instr/CallInstr.java | 48 ++++ midend/llvm/instr/CmpInstr.java | 32 +++ midend/llvm/instr/CmpType.java | 48 ++++ midend/llvm/instr/ExtendInstr.java | 31 +++ midend/llvm/instr/GepInstr.java | 57 +++++ midend/llvm/instr/GetIntInstr.java | 17 ++ midend/llvm/instr/IrInstr.java | 28 +++ midend/llvm/instr/IrInstrType.java | 18 ++ midend/llvm/instr/JumpInstr.java | 20 ++ midend/llvm/instr/LoadInstr.java | 20 ++ midend/llvm/instr/PutChInstr.java | 19 ++ midend/llvm/instr/PutIntInstr.java | 19 ++ midend/llvm/instr/PutStrInstr.java | 26 ++ midend/llvm/instr/ReturnInstr.java | 20 ++ midend/llvm/instr/StoreInstr.java | 25 ++ midend/llvm/instr/TruncInstr.java | 31 +++ midend/llvm/type/IrArrayType.java | 23 ++ midend/llvm/type/IrBasicBlockType.java | 10 + midend/llvm/type/IrFuncType.java | 17 ++ midend/llvm/type/IrInterType.java | 18 ++ midend/llvm/type/IrPointerType.java | 17 ++ midend/llvm/type/IrType.java | 74 ++++++ midend/llvm/use/IrUse.java | 21 ++ midend/llvm/use/IrUser.java | 38 +++ midend/llvm/value/IrBasicBlock.java | 120 ++++++++++ midend/llvm/value/IrFuncValue.java | 71 ++++++ midend/llvm/value/IrGlobalValue.java | 28 +++ midend/llvm/value/IrLoop.java | 32 +++ midend/llvm/value/IrValue.java | 38 +++ midend/optimize/CfgMake.java | 112 +++++++++ midend/optimize/Optimizer.java | 19 ++ midend/symbol/ArraySymbol.java | 20 ++ midend/symbol/FuncSymbol.java | 50 ++++ midend/symbol/Symbol.java | 77 ++++++ midend/symbol/SymbolManager.java | 136 +++++++++++ midend/symbol/SymbolTable.java | 68 ++++++ midend/symbol/SymbolType.java | 22 ++ midend/visit/Visitor.java | 36 +++ midend/visit/VisitorBlock.java | 35 +++ midend/visit/VisitorDecl.java | 167 +++++++++++++ midend/visit/VisitorExp.java | 264 +++++++++++++++++++++ midend/visit/VisitorFuncDef.java | 80 +++++++ midend/visit/VisitorStmt.java | 271 +++++++++++++++++++++ 103 files changed, 5838 insertions(+) create mode 100644 2025编译技术实验文法定义及相关说明.pdf create mode 100644 Compiler.java create mode 100644 error/Error.java create mode 100644 error/ErrorType.java create mode 100644 error/Errors.java create mode 100644 frontend/.DS_Store create mode 100644 frontend/ast/.DS_Store create mode 100644 frontend/ast/CompUnit.java create mode 100644 frontend/ast/Node.java create mode 100644 frontend/ast/NodeStack.java create mode 100644 frontend/ast/SyntaxType.java create mode 100644 frontend/ast/block/Block.java create mode 100644 frontend/ast/block/BlockItem.java create mode 100644 frontend/ast/block/ForStmt.java create mode 100644 frontend/ast/block/Stmt.java create mode 100644 frontend/ast/decl/ConstDecl.java create mode 100644 frontend/ast/decl/ConstDef.java create mode 100644 frontend/ast/decl/Decl.java create mode 100644 frontend/ast/decl/VarDecl.java create mode 100644 frontend/ast/decl/VarDef.java create mode 100644 frontend/ast/exp/AddExp.java create mode 100644 frontend/ast/exp/Cond.java create mode 100644 frontend/ast/exp/ConstExp.java create mode 100644 frontend/ast/exp/EqExp.java create mode 100644 frontend/ast/exp/Exp.java create mode 100644 frontend/ast/exp/LAndExp.java create mode 100644 frontend/ast/exp/LOrExp.java create mode 100644 frontend/ast/exp/LVal.java create mode 100644 frontend/ast/exp/MulExp.java create mode 100644 frontend/ast/exp/NumberExp.java create mode 100644 frontend/ast/exp/PrimaryExp.java create mode 100644 frontend/ast/exp/RelExp.java create mode 100644 frontend/ast/exp/UnaryExp.java create mode 100644 frontend/ast/exp/UnaryOp.java create mode 100644 frontend/ast/func/FuncDef.java create mode 100644 frontend/ast/func/FuncFParam.java create mode 100644 frontend/ast/func/FuncFParams.java create mode 100644 frontend/ast/func/FuncRParams.java create mode 100644 frontend/ast/func/FuncType.java create mode 100644 frontend/ast/func/MainFuncDef.java create mode 100644 frontend/ast/token/TokenNode.java create mode 100644 frontend/ast/val/ConstInitVal.java create mode 100644 frontend/ast/val/InitVal.java create mode 100644 frontend/lexer/Lexer.java create mode 100644 frontend/lexer/Token.java create mode 100644 frontend/lexer/TokenStream.java create mode 100644 frontend/lexer/TokenType.java create mode 100644 frontend/parser/Parser.java create mode 100644 midend/Midend.java create mode 100644 midend/errorhandle/ErrorHandler.java create mode 100644 midend/llvm/IrBuilder.java create mode 100644 midend/llvm/IrModule.java create mode 100644 midend/llvm/constant/IrConstant.java create mode 100644 midend/llvm/constant/IrConstantArray.java create mode 100644 midend/llvm/constant/IrConstantInt.java create mode 100644 midend/llvm/constant/IrConstantStr.java create mode 100644 midend/llvm/instr/AllocateInstr.java create mode 100644 midend/llvm/instr/AluInstr.java create mode 100644 midend/llvm/instr/AluType.java create mode 100644 midend/llvm/instr/BranchInstr.java create mode 100644 midend/llvm/instr/CallInstr.java create mode 100644 midend/llvm/instr/CmpInstr.java create mode 100644 midend/llvm/instr/CmpType.java create mode 100644 midend/llvm/instr/ExtendInstr.java create mode 100644 midend/llvm/instr/GepInstr.java create mode 100644 midend/llvm/instr/GetIntInstr.java create mode 100644 midend/llvm/instr/IrInstr.java create mode 100644 midend/llvm/instr/IrInstrType.java create mode 100644 midend/llvm/instr/JumpInstr.java create mode 100644 midend/llvm/instr/LoadInstr.java create mode 100644 midend/llvm/instr/PutChInstr.java create mode 100644 midend/llvm/instr/PutIntInstr.java create mode 100644 midend/llvm/instr/PutStrInstr.java create mode 100644 midend/llvm/instr/ReturnInstr.java create mode 100644 midend/llvm/instr/StoreInstr.java create mode 100644 midend/llvm/instr/TruncInstr.java create mode 100644 midend/llvm/type/IrArrayType.java create mode 100644 midend/llvm/type/IrBasicBlockType.java create mode 100644 midend/llvm/type/IrFuncType.java create mode 100644 midend/llvm/type/IrInterType.java create mode 100644 midend/llvm/type/IrPointerType.java create mode 100644 midend/llvm/type/IrType.java create mode 100644 midend/llvm/use/IrUse.java create mode 100644 midend/llvm/use/IrUser.java create mode 100644 midend/llvm/value/IrBasicBlock.java create mode 100644 midend/llvm/value/IrFuncValue.java create mode 100644 midend/llvm/value/IrGlobalValue.java create mode 100644 midend/llvm/value/IrLoop.java create mode 100644 midend/llvm/value/IrValue.java create mode 100644 midend/optimize/CfgMake.java create mode 100644 midend/optimize/Optimizer.java create mode 100644 midend/symbol/ArraySymbol.java create mode 100644 midend/symbol/FuncSymbol.java create mode 100644 midend/symbol/Symbol.java create mode 100644 midend/symbol/SymbolManager.java create mode 100644 midend/symbol/SymbolTable.java create mode 100644 midend/symbol/SymbolType.java create mode 100644 midend/visit/Visitor.java create mode 100644 midend/visit/VisitorBlock.java create mode 100644 midend/visit/VisitorDecl.java create mode 100644 midend/visit/VisitorExp.java create mode 100644 midend/visit/VisitorFuncDef.java create mode 100644 midend/visit/VisitorStmt.java diff --git a/2025编译技术实验文法定义及相关说明.pdf b/2025编译技术实验文法定义及相关说明.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b7115a7ab7ceadd2991202071ac36482e7b35859 GIT binary patch literal 510996 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

#8p97^m6xkN?uZjvOds!J%H+E%b#-%2tW)#d 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�Z=`#v&J~I-aihp^N=b{oq7=lGHvB4PQ9%z7C>5@ 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%0A*l;DN$z{kp^507d=1a)J_RxZaW!R#^p$ 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 z zI8txMpCB4fV?N0{Tfyp!xxo5d_OI+Dh%Q~E#2ZmGX<((ByloxdSR()Q2Po(Vxu9Y8 zppEZGQBus#eWZR*yMOQD9gs}^!4S<{(Da%JNyc@ib~p!Ar6(_ z3tXI(Nzod$jh(yFiI{M9u+swaP1pWHXK$-9X#B8<6Q*r}R)8v25rpL8$&? z7FLi&8wpGGyI6`uKa6KbnPO86bs6T*Ep6#?>AkeY9J8M`$|IWoE+#4AF$PHy+cMt{ zWRn|^0!`y+Ps*70`5j;O?X1$fuYSI@u zX@Z4p-5fEM5JSgL$?}=kc244icf*9K{Lx>B@2-FwH}vWYo{K5HI_K5WdL_W!g3{`N z$Xe^o0ce#+sdw=3Q^Z~+wwwU_^;m=KD)+|gk=hI-jm^e#vay`XVYBcRHx@0C9f;L= z`)}ORm4DqaCMr=rY0Alk&!DMd{lMK-S<0hZh3?`|hJWr_KCo0>-kBsm~re362Q zrTpLqsT|q!$jn7M+#>cc^C@w$<}p;eS3$K)Zk~sn;#YQXD@`EKOq4_A^|^fNfKz4@?ksW%`e@#K$3t zdtQS$H|`V)j_{E1jz&`?ucL(BzneL|Vb2ua5%1$|UjsxqQdMp*OcpN@`)Dqi1Blkq zk4QavRzC?_$C~R3k13GRe&gm@^9GEvq{%Jy1AiZVq_tO5+;CWg`N% z=8I4Um>A7!ND5toeW7nCm8L2MS=fHo62BonM~5t>{XAEpf;SRz3-{7T8JOIUiXsYf zZ*P#1Yle-aRtt}?NNrS)=`43V)qoVV5r75glY^Jj1Ym@{V@K)s5 zCW?@c#L78khD}y*Ni2$Y0=IV%bBi}3Y>8L)sA-3H$b}za?kn?sPZ|0K8?s2W2FzO5 z665FOueWvx-Aj*I+lcVj-}3$ijY&f8*eQ-EZ^tBu<+>ey#%&R+xrx4NTunvSyiF!P zVVo3gie$8h@yzMk5vc{f@gyFA^RDLD1)WZPN}!GTD1SZje-`K^>{o3cdLs)4s%icA z_OJin@(XZq^Zhsb)dopZ@gc03gBJnOq<6;Fs5lBpQ6ZGX_eyDZ(3q0x=5)pXV4b>; z(QNAx$#1fsx)dXj>)BZp4!tjJB1&O~YI1FuK3EdCdsv*oXvxtn2D@oUn+iq=jKiay zSu}_NHb7Xp&y%4ntscn@97ZH7+c0*x{!6&_R*wE2lNDU36)(K+;uwQ2y|XDT&K6?# znh6&k7=oh9rS`q8lM~r)njreFL#)=n+NwMg(|njmZi{$f7dxFx{OTRQ2Wjo$5$Sph}<;rk!9I zH;`v6iAfTcfUS5-}305f{^{O zJ>DUZ=W+RXZkuy%n>mVObh<|6_z;6AeMyuOV$(jIUq$5NeBa?1aa8Jl2SsnyA&o}I zAbzNqnqld4%Y)=8|MM*g z)(?R&BF$jxItGLL1o?^o1FH|WF@;pdDb ze!HhMxNEgISuUB=@`9@Tj<-v#6cQhr2sA;8B_+F(dhMI`k4nA=(9%pGmxEI~B`Xec zE^PbNoDsDeGLY3E7uu^X-coZkk<=7(wvYA$QqMJXYiVqki#|hv6jKj6BCo^pKLU<{ zkydo$zWp1ExuMi`&C38SQGC?Pnkjk`o|W3e(tRjB3K6G;I1Vd}w}T4lT9(C;DOgwx zCNx$t3YqC(Xf-mkPmSVae|md=+M^-rX~E@#My*z{Ka03c1F_+J{bybhg>E)IXQ@oW8LA=`2BMu+Zi)I@8^yWvL1#pQ*+|sbVAa@2IktzaA6Y+P&mgR`;Uu%+O0a&K zV}r$J!%^E3r)m7byu#(&#Bl1nm`EzZc@CCrwm+mRgTPmnV{VV679tue1h|M`yMJuE zG0ky19C&|w!}oiw$~HT_;z=7=+NDv7s~g&6r5g0

    ~xwcId|iO**p!6gv^6f*Gx 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

    k=97tfzv7La9T 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%0D&Ll-q~b0z1_ZxnoVId4!rWD-w1@R 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 @9hDG0gYeYhc8aIc_q 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 z zOIu$X)mER@>C$R7NJrC1L8a5mWhR9Zqy5h142%*i;rS4K;4!=p^ZFo0!qIa2jWKYv8HZ?%dgvzkX`XVRs0w<#wzZ^HE39uktD3_BIx$LC?=;#>eT; zp>hg3xNG<}#oe09KReJkJ7!4jZr%yc@Be)N{?GSw9owmHXog1|kAHvvzntrt@Av?2 zzK))NN+1GC?!SmsXEo>n<6tM)jsBd?^!IOHDJugmo5dIV+TerZvSwErn3EluOm}xU z5UXAHjcD@cD_?@aq*i3C#D)($38W>nhAl&QLb!D^L#>Td&z}yDLh!x7VZJ?vOo9!WvSY3i6mZroY7KY zAvwFgLT9tvaN5u0H1?iAD3fUn1eT4AFB>Oo=AmWLR4T$tCaN`Kn3-U3j4B@dt=o=JU&ph(VbdmulR->nj6=xT?==S21k-r zk%AdeB0+Mtmv4Ue66)!`SQDnrFw<=E+4~+6vVIWj;ftJKeLJEtwuEg~g z#*=QnyDU!kL&Fr@FgZDS6>j35#9;6#f?K=<6Wk|I#~py%^Mldm7RjC4AHrRCK9POx z9Ms;1Pg@<_$=lq8|1~sY?RsMUaC`ph+oNTsMBrrqes2x5a(@@8gMTr1>sI#`rD4;< z>D1<~w?(gA#s3j)8-MLJ?)o@48=W0LKYsoC`1$eK@sr~x=HEKF?H@j$f>(D>aJKE- zS?=z?F*-B5Lan23oc&=qyYHnx|6k9(x4FvOk$^V1$@RlOp4>h%`Q9X#&1~vk(Yr2` z+1oY>kHCjdLhA{DK#Kc6k`Ki{1yQb8L##2G%@(WJDpts3k{94+JS$`s zDwWsbs;soqP%{S~nq@7OctyBCC4uc~Tu?!|Tn>eUu{+4zL}Suw^>eW8Tuv<^?%++V zCr1OKS*QgvdlW&0G!w7AON0&SOe4 z9O!{2Ao8W)@Nv=P{GmJOXh$kv`v>mebqJ)NTMKQNz1}RUq&*e*2?c8vi4>I8 zO7y>)&gZmRl}4k&nW!RHUhZ%>oniotM6Sg|@dnu2Oc0oWN%C6_)M%gv8$oHZ%B5J~ zmeN$(1Sw9NO(G!@5wcuF(jw`TP?AzdDB?c($aX;-b`krPubvhO)fGsF#O^80+=vrz z-xzZv%~J`>-1?+b%QzSLIbm3{o<}>aqWbgf%n5oYcjx4jQu8xU9ON4Fmr?ZYj-y96 zZ-4mg-cxk#{I%`$XNSMI&AmrAjwp|chB+lCrFMLAP0}?o`qK7`Kn(VAcO{eLU%p;w zHF}}=Mc~8(ZkRjgu$dSC`#)E1FDJI=gJ;}sBYy>S4pF&IS1xkURYvjzYrvJFq1~4BL@HkHmCqLv)KkH;Zjsk8r)ddIGn;Y za611#uK^*07DN(;78#C5isEZueF-qFlQ&q7-G3Df{8exywIYlyFEkVvUx+F0{qdKi z=4W8&izkmBMH^5QUk-9fu5LfFckeFx@p;#7(cs}PF3;o3aZt2n#~0U72eiUxxDTmy zBQsOmXMhOoAgx; zNwTarm)>72mxOG|Zrga=Zew|DV>}Ga(H`3EBUqO8y1fibI6NM=*XQL}#=$Tw+eh~i z3}X!Kp=TJ!1kuZ~J+!Zb;QBbO+sk##aeWNq>0tV3ETuP|tjs5$=gF+H|8bxoz8|pa zsmv#TZ_h8E%*vPN=?b=W40QF@HVn^H(*0zJG|_uV2kE5;tY@+IU&!@Tvz{uMtYw{8 zH>l+=Nv>xlp*XConfl>CvLR23Z8yM?~#nLV8;?KH^i^1~p zK;enzq2b}a-rn}cu2h$`w-m;;Xjm*ytzMlf*W2T5ZT3arD!n}!ja#E!#1^e*W(KT> zWb|us8n;HS7k|9jBi!&;69@bG@4LcikM>{$g;&CJh4D_Tdt`;D2H2b-h3RYJ{5RXc zS{k<}O&HOw(F6+50fcIG>m6KoUbGAwt9hx>C)wgM<&MoIg%qPsZ2Wsgot(`M3 zm~U>R8VQi&=0Al#3jRmZKyqXg*+$>Zud3L(HT;#DXtb(s-AHC#RaH0~`bu5h=K5G7 zLDtSpt{)p>bIV+qE7RB%XF6G+2VUJ|Y}zz3I8$NWJFCBOjnvb-2qCNK?_KEcU;8>e zNIKcCo6b(MaW1gAXJ)e=3T@k9PRuEDxbvXw>y zTPrHUU#SXPBj8n4bu|`guWMeKav@U32ePJX&Ju*7N zDpoE|j@B7jOzC$*=R|MFj*dp+=PKcrJr zGwV+L=O?$0q#oJ&2Y>jr%@gY$y!VeD+CQ@Vrg?I#Iuk{YJhvnxd&xG7<_^ zmvtD`)ml??bL&7EdyX&~r}0ZSuDueUo=mc7Z=$UiU2V;SpAL*K1mJZHW%edyv_4}9?AOSF9R$nv|-zWBt?wDJotbj=-^IzI8)p2J4d z1KUpYG(ElWkomJGwfzV8JgdL9{E&8v{R>VmHH}<6bL53%Pe1tb0}GpJyEeAGd+MRR zv%BuCoqlp?J2lP6`r_3)b~RKs(7>~Ay-yGQwlB2*l==7OC-2|K?yzakn7^^|=pRF$ z1^+eaB6+frY^Cr2kj&n=MrP^meC14St9#EHBsBv*~4q*%O2L=uC&cWq5dt-Z4`)vBB8DX6BtMJPg>@HgC+c3$F2n zbqnhj=8WpELnSWJ;XvQAH0XFHRN-z4;Jl0QlQBB>|y@tOsaq-#ksN!IG^#w0yHd3o~6 zq#m7Yozx=w(K_~a!HD)N`k8rhVN2Hp{qB3uH@r(<7-}~UU47|8eaQU2*0B8dKihe# zGJfdbgJ$`_*e9DGH5&HsJTZ`Za`P_poHle|^V9nF!xt_eeP=oN`03|{Hb1ZZ!P0@L zvDuBZg+4ZBKK0iAji1oH=F;DuS~_JKf3IykU>v6J>@}YlFsgU#N|jer?bMr;(5~N3 zhqj$E-~I54IeqZupC0~%CKt@lf7Ug0nS`vv|Hr|mzxI_u^^itM~`jqId%k*|_zdiTYtjfq6f>-6`@<{Q^u*}Tu#Hxr?I$X>GN#x=5s z-bEHkH9bJ0WSH*1u%ThgCA#;*R(;cqLBGMy4M~KorUytrx%0*~a;G)h<63&aI!B0h zcK%Le!{X+tucj(`?lSJW#Kt4)-x}Q;*tP2bJ7c&zpUwA7)52x`h(7f@cka4t>y|BF z-FfF-J5#BhcikCi=;^s*^p3*l;HxrhQj_U?_2S-r`$iiU_v{&L$dd-^wU~hZhBd5F z#2RNe!Y(RRR)#i(tVd&O$~PtEWAp53o3=%RP$NL2F&fr0B(NzK+Y}&~vfj~rb!=gj zpC&}BoyT9RtJz6{MtY6jf!=)Y_TJ;YXL_IQz1(}H_iAtWaPP~#mwT`E2729TmF(gF z-HDa7F0!doOxrMJmwiU4^@7|;R(L{8 zZ_r;_dQ3mIbZl_AVfyoD&*et6`*v-lvuBoe9O(IQ;bEicz|P0IQ|BJbo9~^~cI?0R z+;2|Z`@tEbx_tA-q|xz~`OZ7q{$+E1i>7T^ZhU<1fq@+l1j-+H^x>mNmXF( z7W2oC?%jAaoqBBQMeWyRW52iW_m;-{-oMn)_1z1bPk(>Mg%7r!-M!}_Huj9U9J&&G zm1L}WtY^pu`XBSD>UeFqx;EU9YG2#aGdkKlJ~%u)-cZKQ7+%vSrf2m4J3PG7Y&~gs z_p5z1or~9YZPwVUsgGOelHK1FVSz1;$J3SE??iyyD`5+m#2JEt@>oN4f z@wPVWX2@i|eo@!7^73@WK*jco0~LXaivF(kU3YfrU4;p72HkAsgYU zD?HduYwN7XziKo+ZjA$D<-VpnkMOX6+VRhhoLf6czjxP;NB7+SFX(?Ux6o7UO)K*u z`oU7qxt+Tk%liAnvr<0vRWVST~i&5uL*RG4~=xK zzI5Z-Yh%Xhj#Xm=GZl0{SxcJee$q^+H7fF+yg|rhb21Pq*SpHr-;vg>32G|W)=W;$ z*9?t}v|hS#?bV6t+13DiTH`{#W~4Bk-H7#Y_Rvu8>i(QQ-eyhX9A4~bt7)%kPqa-W ztTSL^qJh;;kp^pAm{ck}LuQN_tzKuTI?R5btt0D2J5o~SLK9crVK z6YR{VZXr3*J~1?*lL@MQXZBBL|9n;_v+Tm?#O&-uo4%%X4O7ue)>x-3Yu845X^q~S zuZk`7hBmZrV0R3Xi_J||1rw6D`Y2eRW+1rt9+)^=Z*A#xWxp`ZdF=F4EZ|y5g zC+fTp?L5!Tr+4Hp+gQ)$ic^pYuP79<*t#5FxGQWwh0C(HuJHKnpnb`-FoJ4`KcV1U zoG(18SjcQ@|7;7CIZy0b&jV$saPeOM>BIY{_G;#Gr8B*Xw)FY7Q(yl^I#1i)Iyp9> zjf^bi_5G*xy~}yJpT0QKWv0w$PnqY;_U#GylglXRe|DyLsi`Pv`%K8}y~K51oGK zwDo$}Z$m!|ZXju4#`XPwLkMNJFq`Rq(n13Co{JSm1^WSYARp1!ub-S8n423LTiwq_ z%NS@Ih{x;MgSZVO!scZ!FE5O8*mK7nJ)@(YJvzI&nxZZGKtpX$Pi@11-a-BYc z>#h3X;dMPdL+s$63|B7<4Nc9>O_3>MDm|sw>*G_G=+F-qXJ*FxavAGB)%O=yXZkg2 zXlyK_tJ*cKEUHlwq*sIVJHbBAF8(_mg$MSXaiTF4EW( zMcTK=>D6)CKfZqa+v9&T{*&>tKOd+0aXQZ4|F_=D2y4N0sfp2HHUS_ub7VM6w=w=yx7*v(C}k+58drA-OgC?5BIa z^{v9hXWw$~tO?_Z+3y3nOYHY8W9|($Yb>M&WBJGSLvs9{+?Y{V#IB;UlmA>{u)JKq z{qw-E-t}Q?3XfHcT5m&y0vz5AO_R*HHeuHEa^`xF1 z1v874q_w5LMT@r4h~CmhNL!0u){v}a=V7&lNz|tDsm1kWca~|SEMK<0OlKqOUM`HS zYrjS$UvPAX?dFq+4cc>E^D%I&2QtPA?`pEQ-mLp=BZcheue8xjY_;Y-r_BC+S9^4# zed&$R<4fP_nbrUJ>CaC-9W>Zgw$D$}S@RA0Q~Fc0&-oYlpPo8=?%W^z$>$FoK2nyv z{$Zfy`iHdgxb;8LNZR~wp}!5zkQm95|2H3LOsDJH11-(Xkx=~)=|NH}#{3|Q`2`w^ zSo4(DQY+B0_ITVVBylX=*w|iIRTYcHqw&IQD{(r_UW#aMsjG{Us5MG@B_Yja)@{=k z>$Yilv4vgLZE@lpb>d84F1uEyl?gWr*6>TQ(nzy~kqr5TF+MZ%`1n7#@wJA%cBioy z!)(o2-#$7L8y>7lh5}`w_G~Z|EbE|M+E_!|()UA0mriweXup2$`qAgi&!~C%gXf0m zXY`r-%;RQqH+UPy64R&^P1cQ}qRJ1T_i+ngr2gBh(8VwBBvwTm+^Q}fQX&CWvI2v8Oy1hN! z+g~`_>bEYo_x5(i>y5_7=1X+?)x~tWid0!YP|8UvSz}Ew7G7*5H8rGB?+92k=5&${ z_8Yp@V87Pu7h7BPXlH9@f9H2P0|~t|A2Aj>L-uO}Rf_`wdM!ZL2ks1L0da79>$;HL zeC|N3u|csL5@*6Gv?v>Wm33MThI3PH%(@ZB29GwJ7xSHU?xl9ty!;SiHEy;r+mSWV zWo=y`WX-STwsR+IdwrT788f>AuPtAh)vC`gC(kckdH$sNiT2VB^4*66m1g>*z+30X z=zf~K-~8D8adq``*6^w)o_sj)z0Xgb`uzIG`iZ4S^6hPbjx%SLNLTv)kw^0S{pQ|j)0-dv(NnaGlv(@T&x8NT+V9x?yb1be`FKS?t!->fwzg(6y@5b% zAe3ZHoh3TGx3CYgcc84F0mNVf-9=+Gwx*+_%jmj9fA^Ku)^FFn`HF$n1EZn(RLbfS zjVz7nRaH~tLu_z*YZ@&!{^=;|7aJREYg9F* zLvK$w9~$k@$LJHOTC+Cr?D+c80pK7HbP z3*AP^G4mtysg@x+^zm`?Q}aT)h0gu-*j4j{rK3$NUs~t#~V0Ll0aWFa`#4>_mPw8&L7J z@t#OeWW3FqCUMo*?p$RU^YfcFjaSFn1;tQP*$?R+qLI}%uH|d{$La9a)#Ix|nig6$ zzIy9$sB^}cxx`)w&DYjO^E9mI^LOps*1?3;b>>?L>8z;e%+Jis508)EamV!Z#QY|f zKJ#Rg^*YOZzOH#;o?YUbpZ{tq{Z(uJ)9P5^-Qnu$RAoGrY$_{j(JHE}iG|tdd8<0} z;rK#lHoq-<8ZC?$)U~rPb?QJ*Zx5?Hv`8wcVZExPM=L4WM#;9r+q7`y zwyvGMy*sEqVRPU+UP7SYo!MkZX@nltTUt`d!po&MlC-}twBr%s zDKhzum~i}WA{>TSr}rE4@S!7d?=jH2^ZV@`}eUy ztJxH!){Mc0=kM(+^Uhg#tT5*=d-|ttBr(Y5TaRU&XYXURb@uS-x->hx&yJA{1+2+K z_>SQ`0^M{raxz%G`G}d<&zmo>GnOY_qzAO0*S0MWnLjdT-yOQYYp-_sadY8u{Sa+S zR+~rkkIj*IEj{u0@|DNwp2xfB(Ah)J{wflA#Jt)!O;d*sU4MgKG8YQ}_Wg)HbM){N zJG8dP9((sO^W%{~ZF+WZydgsSKK$Y!dT6Qu`8Eor3pkS6;_@+vlPKHbkIzoL6D^!E?EK@X4~(rJyFGDGkF z!E{$olRn7a$vcp*oUW&}fowcJH^?q24zl-a^4UlwrPf4d6R$2-R~y5l)&u;>l$K)0 z+@{5#mK_`%Ub}vMe}8WvP@kz^)w`;9mDaPidu`z%<*3nWXklYm>+aTujX=xH)Fj*S zCTUckY{?W3++CfWO^uD)TMo2nE!NdR>+uU>|0HNI{?56S?TjX84^?92ko`)OFs2lL ztcjhFec}usm$M(WXJb2jQn=!6kN&{Ng|mktWv9Yr-UsaMUx32X#btI`@90cqg7!3L zg~!tdV& zdU|T^5%b!vL(|$Zt^E88?8*DHkFV0d&z>t@p89!UdUxcI)^zNNBMi0G$AlNM`roHKC04FjQZ|l$){M^xJ2FyoUTTO9mz$Mnq!+(k1A( zOnb7tuqkaMh}CKf108Sc`zdZDJ;p>|uds?1r{wGu5NcjP-h9dBKrOV+O}Y{T`n14o z>Wo@f`+1HM%KqU#TD66Tbj`#N;j>{Y2`=5osiQedG)&yGGKp)D#-$}! z(BptYP_?6@rMK)s8RcltXgfkb>8OJ?<@APZU19ptO zygk17k;Z6r6#yqJtkg1z@bk2Kv?T!@Com%~8# z2oVT*+37XDIncq)V+DNfw`c`s-j(9n;P|OMxw*TAS)NTKl2k$8Q-xdS z#d9rj8u5coZx7$_f*)6WqdBl0i{2jWRQ7;I>TsRkWJoTh2<=& zra<0c&r;6M(hCQh!>SX2Y+FL{&*+RuIeR~th zo_UhNt%MDpyqj4S*PGOpKS;P^$Wb<8%EM)QR}g@k|GpH~_{{z(c{SmTCFA)%Vx;QC z+2ujw3dG&~phPQUmEFdnbJ_K9{kUNv7YKJkjrv@oimK_U^=3IJ_jZ_Tm-$NE>T2}v zmgg&GO#-)P+NuODE?owT76*FrP|AnZWo{v$?|fHcSBK+<$vKuZ`7+$gI<2lXDI^(3 z^q%)uSZ_x@Eu2gNVTvU(CB33Oklh*OOt?^+b~Y-vT7r71vBi^#cg zFK%GM3HyV+bWNF96%O0-;-cGFTFgV^@gmDjOY(A)SwMvWy(0I@vfCPmgH23EI_2!Dl4Ahshh;L&R}5UDOHu*o7E2{leDt5Yc^ne zex3kRe7|Mwsy`!`+H#zrIgQxVdQ;Q#*xKlNyNUC5PV!ov(OUWhcr-zQuadgi98QTr zO%ZBvHDbKN9k4Bh$9Wg%y-i4*s$8WlL@WRm#zJ<2|SZ5ofZ!I zMJBUn@}uH2{n;{-w6}xbls z-#zSc3h1aN2CgHCNewKYUv?_jhnifw#U@AS=OXm#%|zut(=_8XVe$j-7eP&7X!_J?+ZLOYCy$k)a6@B4)afSV->KH>*- z5~=%rfh*ZD=(KrGY!J+#!*##qqSo#m$y?NVV!Z<6`kX9sEh4fndj2W0Rj2fogR8;0 z`>8D8j3EOZGyByn5HaTbOz37-PZOZBB4O&ozC`bHDxiGALZ{gv)MjJU*Mt zwmP%yZ1o1P>Zmo!UjTZsH_SGm(eYp*6BXADUpI7T>4UU_u%^d(4}OcuL4w_5!~x({ zPX<>-Dno|aJb#^;{gA|Nn<`rNUX9kI7L8}25Vz+>O@hss2E`G#mD^d=`_i-L(}UB! zjKzwhGMoHSVChyXqL$mTW1F*8s2hg=WX2{D!om$$uW=UVfp z5Fg|l^R!65(`An8V?5f-=BylNj@j*xjOBfIotI5nYt1x+jik&8{r-fEKYM20=|L^K zqOHv4uc-kgi!lE9{*^`~)n|CVeX$a*$*h3uy#IF9W4$iobx7iM$miA1cpKJo+B9OE z2t0;^;T$#UtNlCFAUK4&a6dsK$GxnHSNy9;>D$kL2wdA4_F;L|i zdnnj2A{)Xk0qmkhZ{`8DhwctWqqdi8&)4CO@CCQE`_ToSyIu6FWx=)e zM*D^uy>0^Ge%1`wfFW>zbrwVzM1&hEReE3a?%Ih;=HU?UT%B7VMX)8UPcogQ`L%31 z>J@pp5xyGC-gFg2zy;cna~&t!kRV%k@eTu%dav+@))(SO^EE?`eruHD( ztw;!lD8U~IQTw)Sm~^WwUAU!50u|Q{ZYB` zpy%Eq5of20#lk_%b*Elh>5T)(7u5xy>~4_S;v>jL5o%fpKJE);79#i9GHgOPIBedgU{N?g~zm|q>6u4j6#Dcu#T=6*vAf(QlF&( zREXXS>XYc)z8Avjtaqw9oXp$Z88l14Fj%Le#f zyiB2kmE3odb%AR@A#=mGH+sZ+lMJ+3JSe42U#lexYhsvU>~PZ{qbI#z3H&!D6PJ4T zDTU%~-`5c-WJTxVgy-`i0L}CLiLLs_-FpdO^YPofhUU@%vyGzuB$F0$- z=cbTiV`}vaXPVDAU!l4ZxHMb9xUSMb>*JY+q74mPLv%8ssmuW;kf+{1R=zzLu+H)y z_x}CT0&|v#aKd;8_49iGEsrcY{;YIjN`Eq+c^0)=VQ0B=rbCZ%2)W0QBeCi0X%td( z%Gv7gQQwM$;Yi|r@sQ0oIO@~fGPSYRCTUb%j(PaGXf#c*n`-yt^96}|Ccf>Lult`6 zNASXnt)j>=5Qzg@62DjA^B(fx$oe;FI19T+v?|Lq<-&~(r>h#B7K|!LE9E*e5SCoS zYmaMo6eRKgIqmX6)A)F^rwHPOd!IVF@+eGeJ=QW$htCzVPqHbd%BN{ zuo*O;D!4F^xlgeBr`W-;a~cg4tUB3!QL4mmRy=P*1{-*{#ZAM%aphV{*cB0H_Z&w zX4Cd_p-OrUE32ZyPKD-87cG!eM|Pj%Ern8cce1);JFU#hHp8C<1Kp#VRhxkS2V;#7jbJ+i*4Z5mm*Y+S>3v-cEmG)~`XaGJ#Iwk^ zz8=aFy*ZSX%h>&nv zT z#JIxZj~i2dl(l`jo%t<5&K&PEeH7|Kf9+%R?5KgC#75w2^1p|DX`}zgs%!UnEwTRN z-oIbgL7PQK31%JsU%3PUD0 z{|o(z{}=Q(HO3u61*)F`=u=o<@H)Yhe-U!2dgE|+3F(@O{&zObb zNsTJZi~Hm|1qS6?h5wUbW=>~`3mHw{oV#THSu_~r-?L;I!UDb{_#>Lry7@Aqh8llD(n}>Yz9o4Dqu`sq`&s;*oN`Hs2T-|8=)n@_Jj%3@AfxeU)%rq#R3_oOD@Cqj{rx9Aqwjp5J|= zsfT23gEG|X!b!}T!?`2>pD-ityr@9K;To(pl>gJ0k^iAg(q+7_rqb;CcG#T3j1-Sz zPy9D`LGX{=tjXdC`JYTWJ33E_uxxf8k6LLaG%^W>0an`|aBE z$Nz;b3kwUPU4#K>ePUuknB0HEzp?&L&kgNG-qvmsP5K8FuVB~pPPz8Si&^UF2vJC^EWv*_02o1kktX}!q_I@^ zv!PW@{NVt?ym^RgZ!xk1W2#hGX1B=S(rWTGGE(ljyx<*GS6g`@MVuo8o+kz`R8AK+ z$1+`J@!|&i_fMD8Ql-Lwj+w$gEP!(MAE+_^{yS|jf_}_17Iwe$04)`Ach!z~GJAM- zk%#eNzs{N2{|ggfYkT>BtQi^cWpa%#Moa#g0MsO*f=HySz$#@fyp_%5@t@{QwCcZ^ z=8=)CE^o}*1kQItM9%7hZ~O88<<2IG*=R%}%f5>vyT$O6xyP);NFrlM8&fS{k%sHG zr^Nkf1I%y!sGF+a(1vyBzqsb2g{eH7i3Ry5wN_Q@_-`jOe`WwFEyS4#am;MaTlT8< zQ!n669{+t!` zACxafvwHmJy?^}5-!Io|b)*=grRO{*901ODNYhA&PTmSflrivgwt-pln>JIY?~5X9 z+v?MEG-N(och>4kN#Ke#{ij(oRXXJFbu%e=u4KcDOjLiIPgwGA(oBgjKM_A3BJTtm z=5ZB;B)Frv5~QF!kyo_Lp$Vm?_Ec8j$biF=%iLH0r%`kAPuQ6JEE_e57BYpJEGOx_ z-zvj&5tbL-ZK9lPRc`fY+V?3lAsUu2_xb#w6M1RMjPP$* z!}yP$|G5lnW(QjEZrvEEz;D2Ea!~cRc3+7$_7XehN@>l+d z0H}UO0ERyzfTK5qruqXlvwuYZ#s96FEfoJF0+9GC0;v4g2%zXMe>VFEX;gm`0gU~( z2;k_C2q5EU1Yq!I1Tg!%2%!IG1d#gs2q5Lx2tetV2w>=c5dqjavU>jPW%*4hkrqFO z8rGl6I9z3Eo76paP}u#5nj8OWW(N-cY22)DQvdr@Gb#0#G>yo8J7AY_ng!mLAHi}h zD_x@t_`ATvh*P$@<)EDE5Li72T3v+LvyxW+$eK@n*Uc>c)4XZ#`bW_?QvL`v8~@a% zu8!z?WhE%7Wiw5Y#X|u_t>6iv__&l?b^(!f-EYI@m6cxx&SR8cs-|)0e~@ZEJWT%I zTyt>YbIs!3TiLuFWjYtb{nuRc@ZaW|)1!Z60pEWy&)oku*R1CM zRW})b%r%d{n`>nL(_G{JCu-b(&NbYBbhL%N-_14O;eX6E%X`0_YqTOdmAUm>Gp{eW%WPzap5@Cb) zXW<%i@U&N0egq2BV@nr$akpL-Nvf6q3W@1-8YLQ>B`RKb@_g}fe{f>+I5$@Yi(6`$ zAR{vtQ8s6(<>~5PugR^+!^5>kb+mJFu<<$ig~zSIv!UVhSp@7_TZ=|pv**kA>)q2+ zn}#1pV@=i7&7CD=3~tRu%w^wX+zSy)BZ-SWNv~p{2%WhwEwU<$9OKyuj4W_{`$86KAn$Xk|44 z8$%YJI>lHc6I*v%cN{Az6Nn-!%$f3|LqKGu@;+P-{^DIcqVI5MT8aR6A%RF&F9z1o zjgSHfeihoZ5OuIF683(G@%|Mi2FD`d6)2&+mx{n-bA|pl{ySomRTZE9?Wzj=sp{4W z!l~^bc-BB?cy)7LCpucVkCn4@P_Vm1gDUY8>oMh13)!LmgPbC}9jtTVVc})Zu?St> z4rN&lpge*fR5f6<5#hOC4ELU*k$&K zTqy5R?Wzc*AcXzSe6yjg*+m-=!tv;+eXZ?|O%4S8{9W}E(8tDNP1MaQOy7h?f%!?w zZk%gSsU!_1nPo6I!hq^B%=j>5{zu-f?|Z!B(XD9Z#lV44ewHDe6@Fj?ho7T{>o3Cs zLyI^oHty@mAy^W|HfcW8)$(I1;OXN)#^N&_gA7Lg{9$%P75dgYd`4YW5m&+8_R7Fv zoyeSHzL!vr9&6bBsfMt}VCn;}?IYvMNokVc)Br(2;ZXq&4x*x|>PF+764fMU!}ZsZ z{-_w;rBvdTTA4#Q%Jm$T)NW2`*J8Ca?7K|*XqB)4GFW{a4sz~iE24d`YNd=O4k%BAc3Y+=nnzM#d5Von-zJ$Vy+{Y(_f+JBQ!({g)3aXFyv^6 zQu>lk7Gf86WdiXJk`!U)vlP5^qa@ammo8TFR_1;lA8m$qZ&F&CuMq66bNAcs=xq=a z+?$v{H5j5tOUfyePe8nw59-U|KzIypC6f6L-IiE<>W?&&I3MQR+dLesfUQgGHYAGA zAAQ6W+K%DoH~)SOKc_w?)DIbX_p>PZaCUHRC7*51EGvS8lCxDk-!P?Ufm+vBanenf zNF(_VxjDSkxrBkcrm(Fe&V3Cx)sjVz4X`G}r7>B|CANLSzT4F%v2M@ zSb0R6<$1C)P|dh-VW6L-S9&S7z%4$M(eVA%=2LHTH}^Lh(xLsM{j2j=#>xU+Qd%Og$JG2XU8$QT8+a#mPygDbtxi7?HCvir`bjq^ii& zHJ!~lGc|<#mjXw@@x_I4FdQeTHJ5}#Q>u!T_H)6N95j%}wibH}<-`@B1~y9rk*W<# z1g@KE89mGb80Z6$rM7xT=%~o>*u?=9SzT8`goq!u8*x>#NYCRe?XpTGEf^g><&RDB zK9ZHE|@(Vy=D$PbM^w;9>d3ui{{y)gW?6ZLWm;_I!LW z4m(CEaa~Qb+%w*oAh9-G{pEl;#=Oc6O^PC{4n{cVGC(x>T;Mx2$@sa z9}D33H%eSlvbtFfzJysjD&qBu;2}3&wEM3 z!59;6XoJ&%yFMXW2MkAvhW6-_d+|`8$3@N4X@s5GAeBvrx(t*Q)sx?oSAhC(#$3NmoFpVBAKH}|najz(m zokN1?pv)~B)+ZlBC0%+J1>B2*Vvgi9hAP6Sk-haHw4q^yR@`Emrm@^G=cpbtKfc#= zZKZsDL3=u1Iy$<(mx>s30pQN?$Ve}1Ym;enb7wb7^L%{=$hp`3TYE$Qi@o_jCqs|N z!br#T?`DUIj)CcKX6HoN)eT88{^hhpT~Xs%R9Sg)#d&h&;B60OID|)yfKgxbvgb4?LVh$WIc(l8VI@`+L^DZ&~K!I9A zQDe+uh1RJIod~)hocC9UOT*v zbY$k4x+nInFc&W>Kstw>;AGROi248k1mMUT-I>L__Z~ZLFmTEM-*e;aC5q}=s-7vm z4mem#3oQ!ss|MHs_5kaZmCFjnK47r{oM!;(OSx-wEp}9>z(m?TyFVu*NF&uc*reCzJ)nL1Ms~2Vd9N1bqJv z8{LbKC%&hK))E+wqDI`S1rq8doz-0;pPHp}>T_$v#kth%Iw~EyE^T`4=l=1tzDEVx zuZou>nFwC@oe;kEQSaNe*B!4s03u*l#8~4e3P6LBfrBnWKY~I%vQOvfYaI!rSyV&h zE`~XM{6<6zVAXQF3R2dPh|GwV{w@-l6%DxF8d@0N3s0O5*&s2bC-5uEwMqyH(-x^Q zHrDi3XcU?sfn>9!CAyN{h)_!h>`T-q?`z!J4*B+Vk@j`5^eskJ@S@F#OCbJI*+OPh z)+`{6z)dgNpuP87VLZXynX!`SPhX&KHzu6U&_*wWjJvAX0`t#5>$MaR*JJO}l7Jt;tWbXqD{%;P|$spcN_1x@KxG;~n`5b?heA zfKJJGn%JpZb{KMfhJg-t^A351aSA{2<{-6WUU?_A!V8qSELBbA{&jm*#Ace1g(C*^ zD-Gd}&CR5-o(Z=EeXvHbOO33^Gc}hh0yBNZha~iR0lU_k^IH&dh{l3p8^F9wFn#$SDe<$$0d`+ zP(KN+w(z%p)v_A36k~Qwq>p#xQ>p-J?hkQ8f2Ddohy)9xKR|ZrA%87?$J3qE;K<&;4HD0RUdU_uspyFkpr86Aaj1}O?c2N|XkthVfJDk+4mlnrRF5`>|U z32HX(wK)F`6EIX5u=f*7mwOKu>+V<3p^3n_Z@n0jzL@fnVP+e`%t~1}l(J#`z@_6& zi^&i2T(f%6rWII}X|swH|$d&7$%?TbT* z++JP21s^H8_bnS-xQ@YYZCZ|aZXTWum|3^f;+8AL+Gi%&Z|s~+Mnue2(i}&WX>>PQ zMcV63A-hCLJQ!`>770GTF2zwRWh<1amWIs9pb@NBIGb}vj0o^HP0!ecKVU^z!Wm)$ z@;5egDInW);B%#VG3f5*eUv1wj-_j`1^cqM-y{uz%nao zQ$3eJ!kI2&b7K|)5X`~LbJY$8Nzs*!qH0maq<&gQ2Z=ZwEC_~%#+WS0oCi8Zg2-qM z+L72ljD-bW`EpOKUUx2dsoo*5=hJeT3C53~@-Y=x!RIowKk;3}2qKsI zw*KB*AN zhUg*|LxjTY2{oMnwV1jBXI|keYR;t;hm)U!V7+u!04~IkFLF9Wj6l00G$#>l92j8Y zOi;LaJXAh_!;5~o;jv`JNKe1CTzcD#8U2y!Hgjq0$@LL$bMZsDoW;l#AIY*{8Cb50&ij~m%GOGKF6T+;Qo+in6&XHpa= z77bj$3Dp>8MqH=6F7!|@8(WjW3`nKk-3pA_Bzn+JJ|b^7{!{41*v-tw3i6&FJqS*O z3JG6kPuuAGY4ZneMdMA)&rK*THU^z!cMV|Hw&avXA@e20e)PSF1eXetGQc~lluFXE zqPzr(!?z=153R`~ZiikE7n+sP#gj7kL!dGhP4|-X^xT{TVG{5KLiB+_5X6!+F?$24 zVsp`-o4c&(m4RBKZtxM`B=075T5)M{g-E+Gx6Df?_S|4|xQ*JYsjEh*j1PS{*&rNy z(ZnQ5%2$Wkl_a$%O4yFc1AlE)IeNY_DLGSvdv5A9b%r64gvh@N)=38RB^QiD;$4?q zCw7Jfiyon;6}P7)FqJ+1e1`4cNTWrI;aRNUUy5T<;KGPqhLfAdi8_;E|#6N{JH4=`}>og}SU~O8!Kv*-#CZZ~AA=N_t+1=E3aV+#Uw>C#LEV^Sj zKaX7`bUn?`@Y*U^MDkp;|Aq=hvSB4MoB+Fj1j@=lNfrEP=ARESBzE|J$P~WaD2&OK+H@Y>| zg3mlb9i#UAo*u6CQqvUXem4wFJED@vbC{emc6^ln(%a~Ncv%<(!suXW{^;l~)0%fp zmk|jGkFG;0|4mhvPU7p;9j11@XzJUFbGmFZs};o^PIWg-lr`!_nN7K{iI|7M>lA$r zG?d1#y2GT4K!mc}j`A8sOBGlV(wq|aTc%yg;xE-4k@IRHi|q^#J~sxdTt_+d z3wxI#h>VF^Nd^k}O-#C2vRU37UX{SyA*s@h>o#1%2KRWn3fDx0EXUv5lx|cuT_s1? zo=hJOI}pZe8|$^$eu=jBR82$ELmIk^6qe504RC zSGagi=-NsAH0FsoH_YWt=y6@z&63>@w!b!B*R4 z%j`9*-H_3=E;r*aoeeh}4<_u4M4`==JvpC{BC0s>m#DjfCK~f)F9n8#*W=l#+$cZvUyLm5b9II(- zY!^RFv=U;wyJL$yd>1{N!_e~}#zWuPSQfO%^Wz|SJGEgR2{FJI-TyMj&tFJvSi4Aq zK&;$KNp-ePcF;g|&M{K6q^l&`byib2t=2T1JEqHa;f>rdJ@9*d|om zNZTWT!N7QQe=3HsnD!%;uOb$pH`0%l2+2u~?Ttk-u??mtW?#{X1dbWN&tX*N&x*#g z4h~r&h}>YU{f+<_jv!yTN3a4_eOq|aWrux_@Fo>^%utQt!b`+KR5%0az}zDspdCCP?Wo;K~P zk|r&{j=VQnK`i|ciFNAY8dSI;=?#&QtMK)ajv;ms+EWZv5$?CQLxN7AdbvXz6RZut zgRc%B^M>L)JES4SU`YqOgp~%?x;>=ckXPW~=QAZRHrdHvxkNACkTZ*nr3MxD5l(%) zn&kWb8aq#-^bRrH&v8+;FzPauXrY0LTc|R{?Gue>7}7e)WzR=+)|d?Zku8)f$XsKt}8O;>4YT zgxPeWB(h)jzI{PU>L)_%OCd7!!oytle+Oh#F3SqRs}nCHxOiDU*a5hm9=o?W<*+B~lJMxv4(HjcUM(`kpwkTrKtR%yGh((jOoL5zslaSl1 z+Iy&cs?Z+rv951kW8+G^^(7n8hf9+T#x;7soK!VP8UpcpRYWo zY?u897PPcoLTr+J>#p!4CHoh0eEDOo=6bDRNxU|An`}lDXOdN(&);1)2F~{4YJs^z z3l!bSXQ_zVl+^_6SxR$kOzKTsv=#z8fMhAJTN)s=bkJ=E>cChh8 zl?`5P508nDQAR$NhLg}+S!0G`-tc??)kaf?T7=VHm{P2ee?K*$6b*{ z-(K)wWTO9D1fUT;WZ^>xCv^J)L7O6^4+QuT93LKm2*v#y6E5#CFEz3rx>3iP^6)mk zJ>X5)=1IeyU5sh_m1fFl2d75bJC84Xm?*x@Q-f<@Yo_MZhz9QF@e5rl zDIU72y$yHXd}FKBPr3VfkmiYZR@iKxL0@cWQlJq>W)|P}vUZ|TO}~P1AsMWjZLK4; z`l7eg2((qBRl8T|Owo!8$teiaAC}CK__?UP#t;(=M4JPVkMd7yk5@ABhbE8w1qN=jTz(GubtU4~ypQCpb&k!Nzq4wKSWkQ)AnXe;t2Leuy5B4`6#*dX zq?^l7K%6g?Nq$t8gIk$mS45h z1z-oz7BDhWuX>hKf{euTqP25?g>v@jIRSV@!%Nd>p&l{GSa<=Go$@GbawZdg;Zp)w z23S8eIkixCC!quH*YWz^n=VfXxz|+IVz~K#}L!TszOsc)QY} zbnR;(2yJo4j`vK&%n0r`K5Mu}k8$f-I&~z_WknHtNp=qSry!x_`mDCzTeZldHn4f& zgt0kFvR2gu!J1IobWs4&AIGG~t?#v*`nbU|@W;M%QDDbB0cbXe4PY%EC>4b*8ek@{ zfG~ua59ayxw#t7u@89Y{Ery zZu^8#wt?CVu&|9x)gFLcxFv+pg=m~vHc7nYj)iX~#yoR@sIaamIZn394^L7)me|c& z0n~DbLUMskwPD027%{-Cf^T-u=8mv*@IDkjMIoj}r31cM*np5K;NpYe#XEogC7VgL z>pX1DmchfBIJ>ge!Ht;{6JnR-X7L24FQdjm7FD43-UurM3H#I$%;ZrmA%ochA%o+q zD}&OXKRNS$kXp_h5tn@oscg`dTgY9>=OL)P#-K0#&TbUj*9~aUrlN2Y2qf;KqTmoB zl>3p20(q0#AX`Pj&4W=>?rF1p6DefST~|)7#{>bQM2YDFNXR(3bi3C^&zaEqQ-bRb z?%=QpiP*c@_l_s*V$#vsVKO{=m4wb=&(Asg7VTViLI4>Jk5|t;%fQ?|0=MH*%L0zU zV|XsG&l^Z3z}kE<><#tM?Rc8f7r+g74#D}NeX_wu^PpP6dv*7sR`{enL;dt;xLAUa zS;j()wOOcK`y#ZBI!Jb_INdsk`LBFa}Ue{N<;I)Eb9tmh|R`&*~XNVz-$~3v1||Hua`>* zJr%}$*yvRr_d!AG3Ny9KggjkRI+793%SbxITO1G81(@bsG8cY_M&%`P{S5?XMu697 zldGEh#ozY`>;m3vQ+5*qwqHmz0CFai)*$ASa#&ge7#56T)dDXgt~QkhTvHLtRuMXr zfFG4Ug;9t^lnlXDhc=etMPZ>+T>agVsA>Tzp6itfud#<#{GqaHCaabMM4KgH2p6lX z%W3cTpuYS(;S7$aW0Af#o@aQ~t2Zz15I(VQWLxZHe(-r~AY?b41R$OqmCqa64?q9y zFOX(71c_r^AmSU5AeW*N%-gE6PCN@wh;vbpY0s|oS`%YMe{bTXV;!% zw*>^oD2myiy6Faz>V>iOl*__RDui{{j)fyejDN$e(~tO%6Y{3tk6IVeGJRj6d) zAUiWi9UZ7Hm@259uCiGN&yz_F zSpNQUhKAgbX*V9y%Hz+sZZP2|>EMA8Pw}F-kK1v#?@LiI35Tj~pM`KpWkULOIXjKT z&7PDnF9NwcRvnLbeGRjzA1;ak;|gDlq-p7bNKA$Q=w|kFNM8YSmt-M?m&f`y z)H4<~&Vq(M!c0r)%qc_Pu9nkqUx%WaHMY!)cCfv#R(RDO@HdK*U`&hBCHz}8Ytpxk zkMeF7DEJX<5>x%E8@hgiq{D$Zx}o$iic?I`q{h=ct)itKky@P~_SPG+^bRymg7*A# zfrH%|2+Ep>9DU0o{5L6eJX(fwO1tC-_nFdeXk=6tmXykS<9GEd^K^DoptrE)RnVnY z9spV2d=GxRr0l;e=^yrkiH_<2$9^!dGBN(mezYjUDkvyoysq4yx-xdrHS^FhLh)bu z!|Mv{jM0&?v1fZ@U_@dBvy%`&fG`BXnWh*oA{eM;s-Ie@#hdth7E%vzH5tw~3VXu5 z3}_6LAJ5O)Fvw8nUyd9*cioX*9UmMotemCao;tQYt~`3&KCYfM;Q>e*1BOgSo1iZ+ zx9ITz_QwDWQXEmd8%Ej%;2i}@)L5t%ME5+NW$^;>vP1z!nGLHy31ry^iL5SnIPmVf z3qu81(cvvCD=kcX6`NEC^cn_e_Ll@JJk=AA5x;cFFlHYLl;?o z0FTgK>zYk;!v)nf$nm3gZ2m|nv9P!-&WFRD-uN&g_f{vsiwi>&p_sB@Fi?Uj_YsIV<4vH zd0c%6?46q$MGFGw?);wLwckZ{zdt8!|Zo)DuEbO{CZ@-c$DS^{LqKva1egn zEsYwaI9~TgweL7@+suiA1)~T)3bMqsF$zh-Pr;dxstoPiNZjD%^6o>yalH4Hwx&vu z>>Fn|rJEbezXIv#T{p+#hh3Z)NYHg8BUsi+-G%J0A0I>F^fe+_gom&AfX0@D))eC4p!+Z%^hgJCU5}e~ zhdioFszjG^_YNwOsnJh0h+x-}3KA1tVv^2F$=v8pn_Mf{QO*b2_(n=JFxfJLxyR)8 zFwFtK*MwE*!%6QqC|4xQN?WF$Q3iAepH)55{_>+cDA%24RqxkuZXIdcjB&RL4Xb638IUJ@q$eFWuZMZBBAHyq zVc*pWpVbz992R|cqOALvUpy9l=1Si-F)#L3`fQh&tB7t2Fz#za$iYW|6S@!e_FkP@QjKpJsa=uj6;-OKL9R{UUzw6Wn4Ri%f@fn z3xe*1fu{A#(#4a>=_%>R-v`}kMtr;JJW}M^d^-pCu8Kj!BA~lLo+zLph7-$NUwokJ z#7^kGa`a5g`2B=aJB-zHIsQ7Ov2Mz~&#_Nz@)i-LfpfGTb-8riXdO*OY3*e~C_)69 zZX6%9P3VLvVQtf$fg9$SID#b+_~t>W=FA%Lfb)5w<_zJ0v$LS9Nd#^JGqh@H!gizW z$Fu$Ao~jUL?R z){7QoVp3RpFFvzx8QfAs+9DW(ZiEYL^fXeko5J8p)~)ph{3++LaJjVN(uVpmRG8+M z(5!<{>Rr@3iGm@*bOWaG93o~LS}stPq}bBv& zPkZ7~b-m;G@{n&|#>Pby7T7K7zr(3De>pwa{pau$lL3WdC85>BILXwQu zA~cH$oTMW!*^tLSb&_XbO%19U&Wx`X%q;e)nL5jR627D*{ zy8_mF3y1?rq5@jeRO9#inymnaNRPr^sLp<{=hU32efaA_&zp`60~ zFuD0LC+bap>yS#yr9%fX>*jDrBE$om!ic0>ZZS^($5yv3h4ZwL6b_Mp$?YiDBRdsP@>mK z_Stuw!iLw{cXFW8`qk|sLHW-shxE)?49p0$LH13YGW8aoG7Iu@@0v+xkP zV+p)aiu+KGzW@e1b$ZIM*(R)>JJ>t7JmbiP#7o#D)jTzTnjFS<=7fE3mcDc>Hg?)1 z(YPjrG;}0_N|T?9vf7e@KCqL#U8pi*HE+5@$5cOk6vrNOLr#1ee^&!1*!01Kf!Zf9 zs5O@O*fbvA?f6spz7)==Hb6Eiw2-!tT=(N00M%wLCDe71hOWG2Gw4K-OOJ01cmS=Q zg84Q=;~Y$l2j6ml_|wUlsi=2E0gK^Ta8pFlJ>EPnhsa4a6vUysUXrnVG*()yf_|dG zw@T*4MJO|Kx!OCykkxj~Fcj{nMLpdeG$6{Q1*P;)$x#S>=jEaFy&p>9zP6b~7Dr8T z_N$n!DiXWoENu>s+VAN{P8W&lgjdC22C|1clAOIB`|Yls@Nk@4-^z=uy5u?RAgQ3pu(#NJLcgq*NH#UDPjqVq}`?h#e1x~T675y79-TU%xyODabXPdECkS44#&QL%S>Lq)EP zlzK)(FRkx?XNVaXelf)VI%BZ?-2rPvjam5O!S$YT_Fy@} zVp`37W~C>=3=Il+5j)}b>NFOkK7lB5AY@=m;C&Mb2IWrSpDoITk<{WRKr$X*Sz?z2yTlfDNF>d`6SY zSY&r%CqNw7X(v~e`)P&$Wk(zS4UHBB;IW{0PiS;kxDlCv$Htje z`tq6=Tr6&6gC>CVImcof2|VTm?HlXDMBVOOIDegC?%w zC0W6%1FM-&5gfjoOwY_MNZm5f0F-T0Xa8oU++t~Yo5ko7b_=Cd%kNh`?$T7t(IvwT z>vM#wbS<2gYxU*wR;eeeQI&W%ndO#k61-VO*sIk_GYr8Nb>F)89cu4~d=7aZDU)Fn z__Gk6>rQOA_kmMQG6V2(HgI5Txxe zp%m}qxW9f%NJAhiM&xKlaODPoLBzkP|H9`X45?1?@tPP=hbcPtI)BbHR_eTHhJlt0 z$;=E9g*+e$wX38MTh!}kmW<#|_TfV2;0a?|Z*rrxXha~49k@#mnL->mPYmFMcyn9l zzD;$_ui5}x+ELTid0xKRy+Lz{jpF?-K)+}=qU8$c7mB7VU)s0r4eJ^geNgO=Vu6sa zk#l!6cfBa~etXsc({hgwJXo)lw&Paes3XIlZ~bId`2U zYZ+^csn2GdRy*2sFVR1SzkdXOvfIAXX1;$q@6;~$YdjL#4vzRaf7X8X{nS^P&2H7I z4{A96YCCq0zS;7Qi2pclO=%|_)leMPaO|-5Wwjk}?nL$T$B}zdGkuS18GFZc^{r}I z->UIU{w}(scE2FM8y8qqe->IntYc;@FqXK|ILR=W~(pQH=T3DaEaS^uY_G=EkNma!e zsTL**aihRQeUL+iFbgI}0Mc=xN*3WPoz7L;bTk&6IH+mMNVgPp^Pn#7aNf!lmNRG} zt%N4>@Lp~U<1wHwQr!zA)|G3vo=!naB6LI4FA8x3mB*{I{OYEK)$DI&ReW$Fj}!QZ z{&@Y=e2ad2e;K_L(-8%~!a59(IlKdtIApcU*q~(8M$0AE;M!VAlV-XUp&VD-tH`iR zNk={z;zDL)YbL|ekq1kIJw+c$kp>qH^Vye{BPl|8>+3x0PG5&(t=w$(91bo*uju`( z0%fi}x7l0mcs#^CHMQzLtlOji_zk}jPj3o1G(ITj5`S{PAC!7n;+G9ta^M6)FcS%t zB09ufDsP_#^Ziu8-w<=*z#$R~vq!SN+a5SMX6%$p6Y5@;T<{%finQU&kh&B#3$RNe zvz@KLUlf%)NJP?W*(hepOBD_Whkqtp1YTtDBzoTmb6V$aerzN!c&DPp_gT*z((`@% z?VX*z8CQ6?sKZZajrZ}J9x-1Djjq+?dx*1cOS$$szj2>o=~qnp@m$*K zuEcB6He{b<_s@tVEfpq+bqQhS=_qPvs+RZbc-qoi>zcFvOPk2=wZ@Vy%N*Ul?`t4d zI*sq1`l*ER$Z6rl_Q3B&dSSMEQzjEWt0=T<$LBG_cN2f-osdEYz#feTh1)^gr`e+J2wNy|4n~U?c zrGKV)?D(WFQMh?!fmJ%q4h4g0PZ%N6nt%@46o*$|24q|GWg3z~J`p=fR+ z&0KiY3^|TWK%l`u`RMr~>bNx{(&7o(ZMs2ycrhc^6ruZ?_WscO&RLgqif8X-H9*M_ zzn28mWV&oinrh|8XOE8q8>R}VL&HG9z(B`;{Uas}>1pJS58wQv{G zuOy$Yf1U0weUFh4c@ffbNDNSijFF9jcteVDFM%0?EusP=U?K+*^^5}1sB;RMCNbRH zTH1QOj1ASOBpRy7dkO1~E57!)#KOh$#Al1Bv7nR7GMTudRR-9*vg56|MUBxYV?YZU zv7`mA`}{g#=d$*^wlbDG%Rh}L2V1zP+}D`P%arksGc>X0k=qlk!9(FJjDTtckf^Lk zBMlGBeG3Pt@ihJ@Cbo`kX*DTjX)8-1&ze$}xxmJ+lc;BbUBRetAU%aHA)Dx%DdTpu z?#%&pYZWLcKygh(#0)UQViI}!wrJNhLbOiwZo#}wTHge}>Ankd8wwO0g?Tqg-Z&i7 znGwtxxd=&wpxC-2#*rQmrjgq;)Dgn_FL9f$ESO0!QI(RaY8bm7liL9RhwqBqLqanu zPry^zQ+WgH!&bjQTMBQP*egUtLZq)F$3*#n_lt#3|DQv=!Epdq5#ACT=TCPu$o@|~U?-LYqah&Ak88hXx)96z^#l>e3d8iJ@zPKpQ zZk3t$!;-#-_3~zS^s=emx;29&D+)#bKa-MdgT=Lri%oI#kt(;aBZ-FG8ut7nCV#3-g2Ts;kCjY2A z75Er!DV@s~Pi9XJB!c-rb{SoVM`yG4p0l4h>%E4Y>$k6QWPz~l-&tS&jKD6O<5uZ_ zQQH8!rrPHGxpA|$k4UofIGM`Mp~-)Uk6=2WQiQ|{n&wc|58~RHuNT^hI6jR^4_slC zM$VER!Auj3W1Z@Z`wrA_G8fN~P}vn>)4Y?j`ppsMA=|T|oJ}}@3ib8~@yao=d^Gu6 zP9s$|05usd8(|r-0aITh6NWzVvQS8&695-%SKX5`M(sSDr|ZUgl}|2nnsU7!2K+Ut z>bt96YS&#|t=OMRV(g}9_68^9+q8D#jgR*&&^7OO;Ibl*_vT$fk z^?tOaP2Je{+|-f|+534~MZXavw(&Olo-Dqw@xMJ4*nU>ktoE^$mhLS`m*#AFTKwv` zhboV%!PDb3Ssu5x)#!o)^p3`1)<&mAFBud*y(=LL38mC4tr6Iuxj}%37zYU>9|)x= z?6SVaIS43#h%N}FgIo1{7OAYjS=&awQC=As^@jGB7XGzc6c=3_WY5CmqtD>^sBgJW z%F(}73LFp++~QX%M=J+XWKcO+GO4r#W2C#4rHmGoP3;tYa%nFXf0B`eIaT@^Kj~uU zX*fAvC^;Fomxri6{77Zrc?CvR{O}P-WRF@Dz zk|2qK8YHRwLs7uM4EIO&XdPXatR8NLYo=I$VTI@K4f4YPLY()Qs>7S6KU)%`&LoHz z?f%AovfG-|__1i{it$<=w;AtjEeqHu+dSuJtpJn9PJkgP@t&4Uv|w~e6jTqX zA-%mUSyH~n=K75PbQR(dfXZliy$r2$0M-OfC7Rg?b6Q30c~Ye?URIVgY?~nkV3E9k za3hytg@E@P3ur-aCsj)&V+khfG@_4y~E`^~T#;*Ua@k$yV%8beA~BCI{9uop0CMY2j}PN^RAoq z*DO`~FTMtcjpVcu-j_g4F5BcHLJ^;#SC>x|1)B?=fwJhgF#)vNNc8U17WNB+l{*?a zonFMCLTtGcFkIsJ>FNagiEdiuKTn<+B*=E9R=1!t;6@c1GScEaH`&vQCr{unIOi6grkaZLUsdWgKj)$1x(9!j$`4P{_|tbYxRYKI zvX9jJ$f@Bq*8Ex@K=5a)_C;B857|tHjTKH7-z|fiy;-kmWWYl;e@H002}oqf!G&L6 z)myVhr{g66$35Os+*hwZZ+E|4ziK67U zG+2nWZ0^F>SuE!d2&?@D2e#RiGqbR7S~3>yQO_QL#|hNQEw|&t*G$I`@w43V>n*&> ze+MyHRj{cvxm%7r=n(Iuyly@gWu=gMig#J-BJV;!sZ$XVHVT_|?RX)imM<>1oN9HR zfmm8JRExotqu@Cx*6slTsjYCehfxIf#+k$iqkES>Acog%Ee%g&RjFDNvW zLPR`$Geti+{iL42+auApn@_FgsahR?zB)wT#DR=-F`QEPM-nzCr3-c)_I!y)HMgr+ zEYdsQn{@)Z+GAyvI5)OM1JSl{oGIkEL4{`C6vj3y2hGObC`0U?{sfU}Z_hnzmA~=& zu0%!ZYYb10j_2F&`zMBOtDbG0arR)x$(ad%%3c7#*HO0HgqRSpLEWun#0wiUicVZ? zEE!YtT(z6Yg*XqR@`?5_5>FPP1ZFaoPz9(ITZn#?=Mtm-@;Rm#PZ;s^ypC}0(Oh!e= z0IE!5n)X`DR}NfT%+r=ZDLAZ+MkO~8g<4bmaX)_C%d?$43&?QafL0{Xg)9|~6K!^5@!50P&O`T6==)Uc@16$2&;j^#uaOGv%K+?f`V zxXr{A(wMdxXVoOAU--g=g}% zElL!{O<8n$k8##Z26PHppjZ?lHMH|aP5D`X%@ZE!N@!vOkI$i8dnQ!JdJQY{P+rwvEAVMJU|8I~Q8EEzsUSwo#l#+ESzOy+d2B1T&M_PhNXJY}u}V z`8P1+rM2Mj`+YXh;_5TX%YLeyOL6ijRgSEq1dd&&8(>Om zDvtzNo+4Jfh?p$S65r{)6#03)UjDK^^9-0^MS`cElo8i zZ9LXan7`8UgdeTcJfXiuj=gfL-3}W`LNiFShyCN+>$=LhyK$^JJ^UA(_LRr^9Ad@C22=yA$&J06NH06sJM2sn7WGhhWMuh(9JX7ZA5>Kus3#Cx} z@!^?{>!@4$&~tj5PZs9Hm6KJ^%?zSvKij-(@w0TY29arOV#^jr7jss(U(MZ6!g2i* zNEOP2XfTS02JGx~k)>-Vp*{-n_{w(s71G^MCqB7YP!^2UUS@epUT?$wdnF_^KVbd7 zz394j2?C*e*)s^-lT|1ky)V0Ss|Qy7X2&=sD|w^;K%l6RYY)QY>3%%wpUeA@9#8r{ zBNK`l$hua7OWwS9O5|+{XVYI^DOg!c_DxliUItppZ2AGTKYqMh8SKmw?+Es#7~{Sd zRp_ao=QZ+j{yX5xeisWli)C>=q-vTi{BJS?C;O{9j<%0sf0x^A zy$dYyY(kN zH=c1UxwRC!hWpc-=EOOoG}XiVVuTir2I{jkUuWRIz3D%r?4(gz@kf~ zNU_Ob6v>z*gq~kL?YmH@ zBygak$eJ-NQm8_t;baS`W#z0|&)TFJGfE~IH$0}+z;5~@hLT7ubbqmQBzrt(UX0WGGw?I;mwK`o%n-wu zeP_NSdroA(!`Jc8>rDBNPv#q0`Gou)k0hNah%3?gFzfp!i9BnpBZ_C0jxsLWWK(W5 z?lf+^dk$l8q9{6r%2X~$rxv&i64Nu~)$t4Noez|K+ol z0&MJRGN!=PGG1njOxaDUcc=Z*wF2_yVNL#~9QPSF8I|l})073fJ+^_|!oYZ8GNPyr zg&WZwqU~fp(8(aG+}OWt)o4wTOiQ%_H=?kYY(Yi!`up`R?(0`aAqoZ$sovB-H8*9- z?M|D6nYr#5WLK%x*4JpU1b$KNpZ~o(#AgcjA7egj|0U-0e~YX!Gjja5+%jFI>9}A5 zjP3^%oK4~2{MOB(bepS8kF~t&P4N2Lv&3qNKX^VLus*F>mx5z3%u`3gYOJRt7V_)i zStiiA&l?or4=&C~|4_kfA<$JU&(u-WIo(q0D>>UHFAZ&E_!A2AlYRf@o8O>yda5m= zwuba@gUV$E+R>?YkyiI;egG3=$RjJIstC$!JZ-GE*?~+H+OASC=zW;FS8VVPuNnnL zMR2wzBn7RzA?cWd5r`&|NJ>U`)?OqADE`biyXbnqZFl6Ks7gkYNXDBA04au1)DTZp zMKA@H!$}kaLi(XFn)ci{^nEFYna>Zsr2l0Em2@1cPZ_Fb5k+EN{M?}vgQiK`CN!x$(QVMhkn&{$#zTsl~a7hyfg`>_UYq*$&dMu z6T$vpCgT4D-#9q`CrAV(%^2?yOD9Pp1OYSq z142R|@`qwi13|EmAVK=bDJ~y1s}QvY`1<`qO^g1i@eoui^gzCv%%;_-fwX_ei2rLFgE<)!DsbN9t_*IfXhy#W@c#`!e-Vq;gU z6_wxzB;R)Zyae|X9F-a1-W-5mW2J+S}b{27sd1ak&(A z?O|T2-;;hXx<;q>F>DvTZyxXuDZogbPKQs$1J|>4zz{%kjZTl>p}jsNFRa8UV5|Rf zrl~abyAVHU$PdWa-gyZ&_dnkwnt%s@pf(!ap6=VHe}Dn@z+)S6tQRZr@uRT-luZ6N z8eQFko2yR5{jGoudN5;YsbKDx7Ir;kC{#9fS{%>6Vz#xGc2qE-XmOwb58M1BVljfu zAPN+>M(hFZk`OQ;Cs}|PaR#Dp&uQ>L5jA4ezZD2!KdKJj)7kMgh=JGLD_^6qyUE7> zp^Ii;x6Pd$Yu$MGOVWTvst!>#06OSu1U$0W;Nh|!8W8{ z)dJjHbCExqg|P72%#%&bWSY!q#*`b5%qvFGoW`%gb@stGU$~#&Cm4SC7<{lWedG)U zA@cjSe-RBOs?oAyU`Ja1iDFUWAZXuxIy@u987SBgrNRE7!~1~qPd)DpX%^sZzoO#| zDZgUUi}QKH1eXtLV)ffC1k!4Vk$2-0gU$ zdXKt+=h@hr2ZEe*l>Th)xiFM;??cP(P?Csmq4Ydv&1?DQWg7V@dtB@j+bCkEEH|M} zNq$T@A?aCokK7^1Nx3RIb!y64xJBumoa9vNq@aO(57KupgYZy~!)^quW=OeWgcQ^cgZc|nrx~VlF(6GXgqyFM`VhCy zbjMu_X|WiM)rfq8IIsj!j22@dGP*MOZp5kj?VT_J3dFJF>CuX2lnaCrxy=A`gfOB) zBUBY4PRlmO)qI9|w+(sH5qLy1-Mi72i%sJS`X2Y51T$Z+GqzV^w`Bvfsi8yPYP&ki zw;xq+vhU4(1Nf&Ll32WiLD*up)!0Zuhlr0DPMW!m?ySLA1^qsOcGx{DU>G`MgGt+S1gN@ z&1$Dw@vE#iuEi6pi%H#?*Ex3T&HvQP%I7V&`|qN~zNL%5sa_iA$f8F~ zSwl+M-S+%P+|;S%qvu3%Z4Y`N2B%X0}I?e%k`0EcmHDgz5CHyM44qkS;Du! zZ`lvu_YV(^e?jSPWAm*)l7@u9uTJ+dA*+bM;ybNN?ss;8vqbthJ*hANFDXtS05=h& zK9F*oWLjiC9AL}_vJ4{f(uKlQI!}-DKI9MOS8^pQ8xbBp)f}{yHH0#8Ws(Rn9@ofj z)~~H>Ep$e1RPw@0gZdZ%aE0HYNrUHJ=z=%LK=(g(IN<2tPvJs7RZK(&BWeZ zKy7!PWyGk9C_8&ZJwh~tlB#!W98D#+_M|RLexH3V!W2$?StudH7=;KaQ9G&P6%Kn- zafy`~qPp2V+Kr4jAjkp9qGhtIxUWD}&B{cP9WA?l(s>Ha_F9 zr!~?>x`8Grd<2_1TpExlDUy4+R#7D@Rd4!1G;MXw-5-c?+KPyk`1mDHUQZ*_?N~7KXB}OMoYc;|q1_xd@NtAV z`W?{RnsK|cPEiAstYkWs#~g|}r|S0?OO(41zvNieYF0w5fiiqY-r7;)$`uT@tAO&% zx_KVPg$&l8%$}&piXkKDq!!i!sfK2d`S&|m^gjsQ9fw6Jh*X}w$H^HEBIj$MHftBO z@jWlnhf{~(=--clxU-l)o!31iyqBJLohc(*{Js}gY1iGp+f~eDEK`~u+zowiV_h}& zTW&w{c-!w?J>;?SH*fk)u^(PscAn875yo%d+m>wh^GS2fmaHcRbjjaepfoMw0fAz|)-i3dOCG)f7(aR1+O#Af7_gl+K8ChL*{WfP% z^T(-XoG7V9FmPv#&{-z7u#~}-`CEh2(f#Du;ISn~iVHT`%-=aE2m}Ad>5*rTly1zXImuw6W>@%;h8)|*fgF?L9plO#f)#x7y!(~L-Dt9 z$iqA?@q!ivIR~!tUFVmXh?qZw(*kzIrrs}RLzfj@`KH%5TlZRiPTOixxLzDt1nkc= zJ;?JgxL>^697A$oxaff88{5KKyhSc@L7F!-B3<1$psl$>5RnUpW{6rs`iM}GWpnBN z={K8ncagjH@Nr+?;LlW16Oo2bM^8(0boJ7`kc_N*zwV_}X*puQ>c8Tkx=8)96uT=^ z%kbPGIF%h}zklpdNVlJmev+>efB>F$DHp5kp<5&pdnRriF)EuBch<0x`CADQwiJPN zAELrFk}eQ;NhD6E1jh#v0+ZbbaARF#(&dj!^FS;*XG{zc${Ftj70VIo4aWYgAzTf7IUOFdL^7Vba>P8(l*I32fr%L3*Ga#Mwk z7*o&QNsMl=C^z3@~Q#)#rvG! zKgIKSrk#t~c|%#-6Y~9=RzK^w#-N@)SRtJW{K2L+(sOMKn)+u^h7dXqWypw(9p=oD z+CXg7JXQ#{qS!umvN_ssl5MN6StfXvL0n9;AwZ%q9a(`bZzS|>Z`ub?f2PfOMi7I9 zh>AQJP}v&2-=ew(ay@cX?lsl<=FX`n=sV1c&D*7!L{7bHk&f1BOznWNbs_ys8mVj&Mpmd%CPUl>UJI4maC5 z5J57(uw$=Z-DI*QsXRxcYGL;uYPSyl0>58kHBpspp9G*!RR5j`%f4~updbOlJeUMj zTOel&;!jJpKs+TdBkr9B8P!<}E8?Q(a)ef8*pdo8EDm3FA3ehtM$MN{neyZ6G%w2U zjhmqoWgIytww9{{bkVYD?NTR%ty4f} zuN#v3pOa&UGc?y3mt(MV(?x4G>^*OLmY?+2_169dUEdIVyZ+4EAJvU^Striz!hRD0 zH%`!m4O_TEjtF7WC?_G#gej1@%TW_qf26xy4|%es%xp}61jJl(ugoR`uOm*J~p2HSQnDnG- zS!kQAJVW^Vwh;MHwvk||Wk;&x1Kp5LvU)`JP2IxZy_fYZ$;k@SHI~mlwlXDRnqBph z`J#HmaRwPw(9FFBF1fcaFtFV#Mernu_*{N`gE%>TPvq9t6T?c(`qWt>Vh>qX_hP~F zG_;0RmJCTXGMjDgtFz-Jd3Jj9ZaE*%HQTdWZ;$ke z7q$BLkJY0;(-z%+VMWXm-6G!h*GLL3@OdYbLsm!q@tl#j@}Ksv@gMSUoQ|I4&~B>E zOzi(;w54~1HVeD6?m@CT$>NU&rcFS1KBE()3f`+w$3+sv6~Gx5DHy+${%KiMj!zu%&p zY;u>5;A8VmpWd^1AV{KgvS#tB7fn^EP&`fOLb`>M zXot%`SfCYDMA{!E5&0)2y+P{GsWxp2_9S6WDn=~sX15W?(P5tuCm z;>BM$9^*2Tg%qlBC^SptM8Y?jC=t2BRv&&Je$Xm-dAo0!20A?oGo2_W3fD@^KhJ)w zwJ%i|kKo>Ec9^$UOjoU6Hi~I>cz1WL_w@I0+Gpu5Ic+;s zbl9ohp2kOM0DH|^P+h`&JZ)r}fYr;i--k3S=mJA#Xd!z}Zq8!)GwhHS?Dp)Ip?i*x zi0dyyS6tNPz^kz*5ICNhbl#yK2DdjjvvDejP~~Fo&!P{Lc`%SO&WMmvxJ7J=5XM_k zMR&1gVJ}r2wVv$IUH$Q(Q;8Sy!~oF@Wy>feGZvRMlYQ<7VJaO>T%Q`7IAo5ZB_p#; zHxaCi`!SuJx!Hc1`#nGMn!uGVcUbSoaLWga^Lqk*Tmnuzuj$Rc7@jM)?% zgLD2cFIK|dCGbY37My|_0$bs7O=pW|dgzw&c&+7bfL{-dSaH^J>!I21 z#qWqCqdvlak|QF6C>ZIa*tpd}1e+;;;~eud?Xr7p2Z=WMI?asZ^Hc~0lBs`@QVh)D zK>bcdK^}AQjzt=q$dh`A{JP2Q8XM{qkx+D%TqG5Y5@jP3AX`{TJgYEWC5GgLM6NDK z#ouGzn)_du0yKPgWJL$d_@&AJiOY=B8!2Whl#l4-qk%wCh?o+1E(IBY0Bl&1Sa#hi zoImg(kO1yj-WhlsnT1Cm$vJUAkwdx}CHdxaBAaG}9JhC??oc{ovfYTRi~sGd;X4P0 zmI0AKV3o*6#a#>gXaJ}0kIQ!=@~kSkO0XaD_ByyLNH;=5M`S%QWWfW0x2D!~_tMp7Vi+74#;9g}BW#Q@n z(Q`Nnju`M^CR~^7)W%CRyW2565i27d0`lhdwm+Tl`4UlV{B9Sw9WZhq36hbSq!Uid zC00diw-yUYuK4IovJG9Vblp%HllaPdtd)sphM7;YQ5cdZ=wUr23dV6dC3C;{+I!0n z%tM%YK0aZU!>Npq=gW?pUS98e$@I0z*pOI#tUOHfSp8Bk_!l_1XFNQX9+SL=fyBw9 zo>UQ6x~$_;GnrrZDHVY^3B|1B+aWM!u?(OJbmqNcQ)S>4 zerjOicPLX^DcV@Gn24p9>lO5!%+BV^74xLhk^9&pc+L&`Rr27yy<1DXJzEGPStBaf zj%ZeON5^R21YghZuut6QtG75G|AbXD^c=Z5jUiyp4z0KxOTZP<#034NLQ0};#-Py5Hg;eemAQ{-RGD!C*LL zWd0N|&(vY|Wa3HVFm9oE5e;~dwBlvr-iv>QLM$aPubRc=ts|Lng9PURV+F_TMU&7~ z_EMaDE;AqDz2SW?;;kync84i4<-hNcP9=QbRQ&TeTWMia+-lIri;Bjr{iWgCF5-Up;8rYL02{LCTPeuDx z{Me!%=UQgoyR8dxeiGcrW8$X8$3r6`5x8pjMCcJjBq4BtkZeS{W95V6fK}C3j29m?j!7gk z&@AIzLKHES_K9wd-=0Nr@|-^m+K$(*2tFo{&JoKH#%6_$COD2MX(`sGrhcz1KQ@H} z$5h1MMB+2cLU!7Us{hU#8$?+r1TO#S8%N=NRB0ws)ah2sOsDH>3-f3$-g(`V)RD`R zk;%$1g;N(ksp;y<7AADYv``Ypb#$?D`_vBh$mJP7)OJ+Ge{+?IaCLaxNmh`A^AM_) znbASXcACGp>yws#o7pVJX;{opshsbuRrjc-d??eat6k-w5(@^*1YP^l!hg^*VgNKfxtt@!AM9^@S3+l3fR|8o~|`o&s4U3I19DD zpws*9qD?TOVSkYUG~h0de*G#k`d>bJlf?q<9WQ-PRQAv&#U`1xNX6aKvOt18kyZvm zp7i-m5KLJmgcKIYq{zfwzV8AOs?`4{mo@YMt84=^^MA+U=qCQJ*a1rD3lHezSs`G> z3L7IyO-*F<+c<|W0JM6ziAa#k{-*qq+lC2Ry3eR{2RL1IwR{U}U?V(#B^c0E%rai- z-3jU(_2WpQh=Q$3yYgpcfon+0Q$>0t#r!C9)SYDF0$wFkW3f(dD-F?a1@v zu@W2g-^?s$eue#|<$zIJ3n%Ylw^lVX|$F@h9{4~YW|%5BjN93oTC zVw4E@vLcuo>Fx4E!7L{;^40I%WSDsqJoX?1ROKLrpMa8XmoP>}{o% zYJKFlO6>nQHU9}Y&CJO5KM({MIsbpi>18#02jo@6pC0!cxl~i1GUub80~a@wMaH#M z6HFMY!~r)OVIvYuP^Hr*?oqy*YF{d0Tcjld;w3}+^y?sd429UdkX-cp4RPUeV>8MI02XdE4gz; z+PhvA&QJ_KaP@&Z1_qNiH8&xE3!wR(ZR{8fwkIn9L%@62JKwg%DXL)~0D`NSu&{36 zy{(O|oB|gB*_ZG!A(Ue{0oDLEz=7We1ClQ!{k4E56g(W=w2HBK0VwAe`vnFZAA=`& z0gF#9tEi5S4YoerJG-Topiiz>(r9&>t7`h{`IT4F0T+27bD@YdBD@|75@REN0H+a9 za3JsF03FE|rW!#hYbg={3WoCccscT)`}!W?>>;A# ziv|*hd55|HaNo{k_(s&aIcCLV17jXylv(~8s-&@OulYu43T3u`Cxh~EK=XYb6{Q9e z|AwLT%5&Kr@HNJFzlOe2-($9X!#i3sP4)pJ`GX*(dBo8hQEO8BXXc?!gmBq*wL+F5 zh=L>q;q%KD2k^&E3gK#|ye0h>p@AXbz>`Gp*Fgb+8wkJg@kK(JXRt%bH=4B5#XXtxL9A2PmYD}-}4M&Rb} ziZJ(#IgSyxm>{0qlIRr#ouGfd0{Eu)N7NDW`$jJ`v})XyqEZ`~H8c_wX)uk9t2^C5Z@n$v^JN% zwH;3oW+;pdHW%x(rVx!FRKIOx%Q1fD_3r6T5J5`;uJQO>I#g)#?8e9GblRqcCTeXJ zw=*B!NAi!&F6L)tW-?#{1nOV5* zwrpS!B8`4Dd_!@N3XmlSTs)Rf4#|gwTX(^_&QScrm2?f}2$wZh=FySU191>-2bX@5yem@RNokf6sUniq zoW0~Un4D}uU|R>c5@lVHY;zm>sG4V8fmC*OW~k)h-CE0k@5#&j(9yTr((+*(+SWad zK~!RL%ml2Yeyo3C+9_7EHo=KUDXwf=(UOoZQB~!jw$hEWiPjymWX8%}RnjrRpo2Q= z6P#1~uBYnedoOY@JP(80$D_KprKQ(z5R8jc-T?im&wpZ@88w5$(TIp?nfKYj!iMJY zcC95xIU%y5LR-{}&Ph3;z7Qm3?ZSG?Y~6TWdm=-si3W5^%dnZ21m>X~3OOw!YtmF} z;F4*SK9yOvp3Av}r_A$Mor**`LDS(MVJBi9^zBHGW8Emts>;6%A~Vi1G5mJH-$8i` zPcTU0$$OU-Dbb=vMeo&C>Ul9E`M9aIbS;U(u5-Fgob5Ysc4Rf|%dz2iKU!Zk;rDKT zH<^#AEu|(bA|E|YTMB8H{#=Pv{1w;* z0e?Fc3ClYiD7Li3+G#Ihnyk?()ZtVmLfkrlg-@HEfS_0v>hXcr;N9#GvWfYnJP!zf zSZZa?7j0+2bmKYw_D_OFY{*@wXY}j=*&|_^=_=u^79CKSg3_3yqu9s>?St7p6#)Zm zZX%IX%Dd1Ej(V4oEId@BrIn$}E(}GC$b=F(^%Bbf)eEXu8`@~LGSE9Sf@#b{2$l=g zIgsJmYl<1UDUqmlHtYe}G-`gBhet%X0FO{nF+Uc^2b5y#|@bJu3I;G z3vTY0XyQzOm}F9lOUPsUzdg~2fnw_giWWg|lly-+y+>XS5bnn`&&9MtlaP^m7=ROl z7)PWi&O2+RgT%g~@slbqj^l3`KQx2}G;&iC^pJZ*CNv7E7AoQ%$BJ&233orQkMoSM zyyZ5OohsX?E*|PNN#-|>JEu3HjxKpK5!CTU^}tua?E4O?wN)?PfcqdK5&xrU{}cI< znS+Dj|4x2nV&P=}Z(BH+?tun_hG_l0WTTn#h*GHi^?MS)nyla8xnE;J20^^mcuB@%v>oNf#fI2-^PaCcG-YD$-eIOFT!p64K=_8M)fLz%97gg39 znPZ$xKzlp@FPWLku7~ho&%pOi0W9pSt<|w<2BZRwGTzG0y2|f&l_>xpNC9_^(mDTJ z-QCp0&^&k!sj1QAGCc;nK~qoUP0Q#$a88;kIsR#pw2yiz6aY*qP5YkfsBR(34 z&V1hp0&p0K0QjMXehAik51Tj&68^Q0KQDcxRu0e`G?Br~TDzNOtr`b2(i@17WZ?iB z{Ez|de;pY*Xq1eS@CW3e*B)`G%{f&G**5+qm81M|Gh@Ct>p&EvU7183LE@nnAJYS< zecAaSvrg481P_0c0Zb@wMx$1U2V*h9T^T)ul*Lsm0JNU7u{ywy%~kIQcKC*$)^>o_ z>(|UCB{i`$+L68{?JJTp(vx>z^lt=!t~U>S4Hxjii1-mTQi7vDTwX9dYtE)u$GC_g z{U^%bS+5^wAkV{DJcyA@Jr?uo&v{FbDH?aFiD0SnIQ;{N8FT{Nc@)V{EoRf)I3gF^ID5#^8!k$~JoG-vQy%N-JTD?cMZwtXG>?&Nr81cv*$um$K`| z5}|8v?n$SlNhg&^+s5Ukx;^sbQi+j-Eka71?gNzx#KUbbcjJy6zR4vYN8%SL<7(>=W{1)e)EEjvDsqeFpUF(yeq` zpMNM@&FO6{3Ey^c+k@!v_rBB%Z+^gUMrV$m2<;lbgSz8ij8`f0bc-IJ(jJS`Uk(9o zM#*;KdnEC>0ie+`%HY%inhz?9W&VWHN@ftD+Dc{^l0_vl;U5zd0v{$e#yA3)8RJ?h z#vhjpa$+@r(OQTApDV<2u@r$mLDpac%7_6%(QEI2uVAsC6u?n8z`>RaGM5g-VvY^c zv?~UKu^6ISDTMU5eSRy;Jk&yB&&7CE4^dTzV$Tl73MCh!d=DYZNb4RP>B6($?~POs zoiCRQLvOtTuH>U7?T@&y7mMF-xmK*oo$ z^}p^lJIGUnldF>t19PAB+2du0zxa4Jb2U<#a+;lE$ioMK1Gb<92${(VbW?KwA7kef zojIVr{dPK?+L+pQ-`btpwr$&(+I(wFZQHhO+qS-*%d^&5>;GLOxk|Fu&QA8uFWJvi zW~J>$w0F;6PaZBugGx;^4D7Hm`;nDfGs$fmeU6iGNuSnxbh%=k0oWwtjeniZV&l?z z*?apI(QjZABSZXSWn^$O2Nbk@@R5U;<3`0lRBp$@0x*zgbZHZ}UN&$3sW@p>mUkX? zz$J~A7^01C8?2|U%{uhcmUJ{z5HTUjOZ^Q9e=zen3Cd^gs9#7%qNWMe5v#=bB+_>D zaFU%t-Gzd*jUF%C^qF~1w@-BAeZF?1q0X%5xp`Z5v-rw=n0bfZC40n3HTSadLIpHV zkiFH3ZNiW#XoL8wSNfqi_9hU*tkANJT+}iLpJKsqIF*6Tlg$#DW7B4$XZ@O>qKg|dCa+Gc36+F&Edeytc5>my~DSw6!-#2T~-XJjsH;^nn-0Q z4cQ*R=T9iuRUb2>CRYz{)Q@-yH6UQHK4Kq|7XVi6|w-!+Pvd1V^J%>DX?$&pN^jV`XX8><_c;$A|8 zD!WXZES=v1kgjdN5FY-+k+FV4QvPyt{*ioZC&RRs(Jx%1OHSDjUHV+!4_yfD2p0b@ zQ8#~t-w7l~?)bi2Sc)4;Dtypl(=Rn%n0TOL%@F45Jk9MPlU_tx2@utZOZk9pxa7ah z@0HT##7057-~vvhQl?_6pQs2ouFM|LTuMmKDWVm&sf9?< zY1EekFi(sdVW$dAI5!+~ZX_qB1}^b6U!w}E^&|*3YZ;Nm1yBqM53K|4$iVzO$Vhv@zJe1KWdiv zt0{TMkHn}3b7{_1S|Z-uLLC=!*D7*QS4tF)bGZngmt7KoS2=k-_~F22}=xEG+FWm{fi$mXb!gQVTr*G-l(4Zem6fqT&d< zzgzQEPvO`_bF7^TP8HL_)2^Ijv%z7aPr?#Tp7- z^3K{-4_w=(4dTo!!Yg^!VolE%G5rL6vBavzd6liqT_s{8=`@zq=95kNf>pdQoFypV zOehp(xBvJSa8F28}g*qD$S;>){+RXPU(%A}sDE$yI|cVY48HolJ%+^^$r+FA5XJA2VQ4b|iS zvQn+fw=Ya{4jOw~98zw}t=Sj}gLd=Puqj?Ml}CHD@21_jR?T3q^_>!>v+PYwwAkWI z|3WOM`C~ZL>}9>7$whEYu{Muo&7i-jWpt-%pM@)cWiK#SEWfv}5!BhhQ!4;TC_(Y9 z*e(&Q^5wY|f4W*ywMf6PQW+=^y3rU}OhiIF8iRE4G;>lp;)9C^S0_j_mL-;+Fvk=Z zKMaORhIBv~M=x|J6hFq>!AAUc03kUW<2FCxSx;C=EK(b&Ps7W4DAH7%bO#2f5nb~? zS&Oe1`z z!{vDkahb8_qthdwW7pf)=hoMk_t%r_ACQz8D69d=WMhxB;G;`W3J{744b_!U)IiW$ z=g|S zo>4Ca6?PutgQS3gm|Iwx>EKTY!|})8KMWSi<$Zhvv4D7k_&t^rjoX!NY}`eRX;qfo z!HiX<+8c_my!V#SslKqZ2DM&{mrA%$tKJ~#DBSQ(n`7d!&WE}NJUd}vpYRscnO0fW(TN3;NyrD`m&l|1B81*k z0h>F%W${^*J?hi|BaNW^_yS%^awESmi2CpzbOUgC3=L)DY%~P_v}}A@cH`me2UFlL zSUvp79DfqM-_d!$*9_xcxDau{a{Fi|3IR)u1?P+|8R?T~7PPApI0J|t4BcpZsmCPM zLw3Q`BzL)dD0cW+Dg82feKy}sYJFx6Ac2`1Ldfqp~nW~cR1~pQfPVU$B{+Bt7MaZ|IBtv)Vl_QWpgIRX;a>$X>03$_p9{_lPB&AFbbrM)Fp>Wgx_ zYr1e~w#N^;BR7Q|q+*#R422}e61gbWuTeZh1gSlN{SFKdT``tD%u(!TH6(4Z0B)&# z*x8Jq2Xh{%exO`9V%l_MD~56qK2u!KIlg$Y>PRugA4nFnKNvu>UYz2T5M~;`aEZW~ zPz|MCm@j3oFH2eP#ZVXK9C()E0gvM2fN-mQLWIs`s86 z8-AWr1{A78qDY2${PRVe^b@bvjta;eEGAGn5863F8vZ_zW|HK6dvUrS78DAyK%rN4 zuNaWI5?vg)8U4a=TnGf1!=He6Eke&CEe*_AMP$s6}D@tNSUOL|IK~!OM%E%?HjMf=ygM*>M*!aXJtL7K=A?Jh( z`Qh9p71J&jG3IDIO4JR!wJft0Pt+fk$NED^AsK#qCP@s;W0;|^!FzkKL<4@c=|VgR zM@>n-48|n7k&*xY5yaEOcXDBjPu{+0BcDBq(XD~3<`!J;NvYz^2@h!%CbqF!{6># zvbFAz>Osh*t@m}5AcTwzv$f7=j1*P#SH#_cFNfD#K*NV5uTRcFrnICi{szKd#~FPS zsyEWY9HQ9d-gLJWBZpS=l?e@Fa@|CQGzad3Y)UC;Q$Q*^Y6+TFOMTK>x3kzr{2yR5 ziFj>a9yN~-6>{Q!yOj7O%%IW|`D<(@%b4wxyR&o=O4n36*V&LnU8IrmddX3ANZaT8 z>s{IHrOgxF28NH()@6t7yYySIR+;zbi(v3)E_s{Fxkop!!$@%Ag6(3;^YX^_s#*H& z`J(FH3+%oU0cD&5e!Q4r%Vbk;)4*gL_BZ_yQm$@OWZ03Q7nASrsq6YUCiN6Itj9oV ze_wLnYlF{Fb_}6E{*~^XS)e`VG|Bt7DB1gUEu_2g#dC3@#jXB%qQpT>ky)GV90`VmQ0T;2u_~ZkIQ$EYsk6;Ss`sfP0)r-j z0zq}kCknfe^sMY`9F#@9;_*BW;lXh|ae7h%U;Rq1Ff|1&ij`FP0WMq%Zx`Hv%6?7ZeZe0sZe-e0NsPXG+h+A^x}UNNm*i6n)LS&^aPp)>EJ^;fJ8L(BSOd!JUL+)y z^qjq1F4o`l$A$T?kAw+C`n&K2y)n6{tVlG8s1gx4<9ad|w^rmf9)nra!|bM}o$LafL7( z-JnJ`CRH&%J+DdN2K$5W#64sa0>}L|@5x`BhKpKk_MIc4AW^`|gSOyBI0i33ZNWHx z?2moyZ<)vrkLzZ1cbhU7pW_RPmFL+>>8_7G)A=%Nft*LSllrWlP883t>ygRp2v^)r zyGH^>AkXU7%k$y%<=dq5xyDL$qn9N%g;fkZ6I) znCZGGN%;CD0wHAizuG(I|8Ff%z<>91+HyVLZ8U7h8?}=a!hnn?oc|8;wZ3KQ5`vu- zDF)UG`y`<+-?=m9IYHRa9Exm=q_grq)3qnGied0ff@E_bi+Ug^xokN{z#VIs+=UBk zoP9~9hbCY$e6V{J-OqP-KRJVyy}gBDJMKo)A%$Do&P~kQNUMsG*Is0lKyAstFV6nO zW;Y}i$qks9C^*V%TNE<3E#ICyj-dxkOgB&$rWG1i(O(+Cmz4hch6uZv%S%5X@ z-O=JC7hJwaRC=0B4>6k8#?@9Bm}rT$Ab+z9_0(+;Dy)2p{rJ;9^ z7m;RUV_;}-(7I&~{1nK~iSy(=aWFk%K>O)f!<=B{od^U4FDJ^Ac5^2Ji;OfV|Y_9c7 zott8Af1gg3s+zFMj+qmJFr4^A&%3XZauzU^o=B(tX;&B&5o8&X{|CFfi`)4iJ)avG z$cHINbM52xsbP;PUh7W+Uoem^`->CuyV;N#au7Qd5MHk>!zH}W<&LgLT95}ukk8*s zD%ozZlf4um0Fdsk$LX`Hw{GpOcSn#OG`~FJrK-x!w=b`~tf?RWd_h4Hma25M2afZb zH_tf!6pX2?h%T!8V(UI_1NGV2?JKMDJRes-`wc3G2XY%z z&g-@COz-V`+w}Cv2fB?N!}HpofUOG-@7MovfbaQ!YFH$znGHdp3)Ve5_kG@6d`@?I zkXL>Cj-tG?kuTKi`>BXC&>v6~X4`(Sb$ZrTe&CSX{Z;?)k!8U_Fsv|wO+l|sUvz~u z#qQy;b${H9L%IlBz05`N1>ya~_N}|wnzkOwcm_@~`VzTVx4Z7ugm0ytxOO7YJRvx9mj4UTGA?*}+E8H1gl05pZ2p5BiTL<|xTu!zaJo&dcw8sgPl zKWLHrP2Q~tiRti8VK8tEyXx*B1`YJ12-~@y$jgXcVFEuA!kag}_PWUKKnYXK0H~2k zz)FqwY7LDbAiiErCHKO$N7)T0%kOPR-tFft!?!)%FK2cz)g3HuaD*NzZg}!-nso$( zK6N)}JpU&_JoIgOH&`8nn7$7?xXQkS*pLW2NSR(Jc1UVFjN58RgdSzJ0P>xik22y$|dbLvQSsybhO3F;d@;?;57 za-01mD(selTaiotsi<{<@5PHUb4|B3&N9hn{}C;{rDGs!U8^Q_O>ud6;*iaOsU>RN z=}E+f3VR=GMZ*Tr7MDKE>bR$k-ICLT-O{rfwa!nQO?$r@bV*mp>JX$y zoXi&Av(XZJ)Y=!N#kxG~49=ZAlE1A0!0axlSA!lq$H0|TP zs$8ai|F#t7rORYf$wxa2cGuyn%q$uL-VF!e9fmjNmUlyQRc4V7-MBl0SMA?WdVw`v z`wjxkS&i=r?`_ysxn6NL*d6N&vRdZ_rW!|02R!fY2a;~BU?z3j>%CBN@O9naVm>g8 zj$#@&yrn{IKRNSdOa~)i=FFWx2yF(owMoAWHunE&Or9 zTh(f|w)d=1k#t$jo7Urr?+ zzGLch7&X;?^W`mhEvW1J_{zoiFm6|;3?fvTN;yTERTO9x$}QLUFlcOP@YGvA?M!SGc)`e2RBd^ph`p>kl%=+W<$}BKWKvfoGyoOO zvNTHMG&)-W>~@Oad3Kkhz1!W=hK^7N2#wbQpB&hi?vud{Fa<|)rYE}&)V>FuK*0bo zHqd0vnXQ#0z1;iO$6KI^4{f$B<-sgZQPL6&ty4kbNqM$99h!z2OPvk{+ATHpl(kpA zB#t%}Ec|*ugKu467LRvbSQd|`{fi(g|L2P1SXVfbPBWm(p$>w_)8j?Z-Or>REuz98 zPi-UujXgX%OZ`*1{Ch-*_r3{zEy}D4)jD)>DN7L1T9K`ZP|Xv*scGc`MmZOT1+;I~ zQNdHz@y-ltF-vi6%|>XAX#FSQTOk?S0+}UN%HFs%3F}Acx)NU`2*zIotkAsi32e6= zsrnZVr#&)DlU31mkl?fnF0aS;$AT$ctLOB-EOX9QJ61s)bY6e~`bPJ1Fz#pd<%)iB~a(6bZD1r7y` zo0S;3oQdbDJ^tvF_&U_I+DM}H`3{m)_%?C3tJ*Kr6`qyz8u=Mb$&1NCD;42+gw0{% zFJ$qfX7uMBVbuop^|K2vNjhm;t91yE4NnvX2(%MTa??rc2Ih>}?Y`a>PO`jP7Fimd zNiDX<4M1H>7RfT&66Wj{${w$r>Ug05u$O^!yIdDNyY1tX^ofK9#pI;BnS`UIC4_xj z)`HQ~)lxM+x#2|UvrO#*FbEZwjG7c(TNc%&N+XG&0pRg=kN>QJk9SRdT36Eo_eT8a z3wj1^n9Wlz`_cNqf%D$xY)3)e7+d#7{3hI}kYd?rp#J3PDb) zpAkvwI&D=!V^aq^S=0rdtJp%=s~s1smvB!Fx2i5S)VN5=5xnyEEk616ZniMV1C|e) z=<4isTEkmyvz7RER2Cako`|dVa-G7XGs#tJb?KJHb&Es?=#*7Wl^d-d-j>ed?UnWU zw{mUY>+oXBv7kk;?~a1Hp+ZnalkIY(>gZxtO1xc|93QocnzqHO+S$-rxfoG+z9UJC zceb@ANwFmnG*U|Z|-)sdY z25e}noRZOk7xj{^!Pvem(##ojT{_T&3ZJu+yQ89ZNonCDjE<} z@@yxXw#OaL<_`&(UlYbEmgY6sGc0;AZ?2EW2aE~5NN1tH!}cuExxoE>RYL3TXuWJ& z6uDGG#-HsndqS zs|-uG$rj9Av*rV#jF3Fw^2~*3nN^P)Rn0TCaMf_np@pe9v=DCxd_O<-=N-!23rKXR zsdsNJoCxhj?ibE3=+So-`X{-(D=Dj5Ujm^ zuEtY45u8T4jk-E%7#D45Pt;dd&0kt)7dSDy@ph3hKdqh&lQq|CQ6xe$C+J%4IQUqz zY;kI8>RR%xajh!w%r3&`s^k_R(=_Z)fJ6QRFAx-K|I-;H5u(xT1ZhnR^g#ntkW}0a z02bO92x(Fvjt(CVzG|3zUyOEKT;9(+z!U;J13~kIz$bERy)}vp9mgC*G{Q=y3LaK9 ziqM<3vMa4Gd@IZnoD}0rmzz2p6r(#Y8!lSqPulsk6|dYDTVFG^r7jXpB81-pSxbwz zJ{9t{`9)U;oPRcTy@+Yb;(RA-!-I3qs*Mh-FboTojAUgqZ3Xv6?!n2VcCEu%R0Dbj zas!CbsIo;O@l-Lh)X|VMwbiv6k1l84;Cv9SHd%EzFk?Zg;Ba@?Mg>dE7t5H zMXqMQ5A()S1M;2jJ4*w9Iry{Ip2e8-`|M}uci8PAlq`+ZL|gfCyRTKhj&D_GzBk1x zZ>Ph>kS0>UpmgQKfus9I-ZaHZ62b!rr-nypBe&N5QtFIxl+^3-iAbVENhY32T2PcQ zN=Swi)?P61y?A#2=I;@iNYnEQL5Jk$?shN~^qx@~R)>bBue)B($wfrSv1fw*66~bA z8MHI1C#OhM??_1eMG0~gHk6t*9)MvKP(zo^-g?fihD^>~Hr!=%GNN8rhJy8dl;!ge zKFh|y#>`YojDOyIUCyUZ>QBJoCnF@=t?jiYax{`qI4&ubB}YzlXAYOE?A7hV<_Fyi zAkc>j4#|8SHp|k7q;MV|-6)29A0F@@5N;`-arzWIW&nlyWH z=->8WowC(ajHhAjx#-Ho7B(xphV^Tb%8^^E7!x@Hx%Fr6chzTD#Nj_sqtb1D3d47a zIActH{7{^(Dz3TMWuh_3#j;96WrWh9o)XW5nG`RCnHdzM$NO$9QY5D+wtP;Yqzj}A z`oo-oIQ3?PMzo!#J~}0@t*e%H&LV86PZ*{<@`BC?Bq;zsgrCoYzqik>G39db$@)L` zMJ*N3)#&N(tXO-Hxh{(?=g$lciSwce|NpsyqnXuv}%jojvn-UcmrWsn6P$;DbzHB?@X=u$E zCUxsd^hsJHIkl1RZ%??jVzGGM<9_s*`DuI;D)L3>NH%`5TFW zhYP{F+ARZ-4f{fFO0*o{5zS^E_`t^GEImZ8S}jYf6jHHP=A_^+3H#G(StH!*cAYf_ z+!_*(*X4;y9cH|x69rlwr9;iySCbM2$jQjDbC8u66~s_3(7JT+E$0IWloA!hQ=d(X z+n)Rci&|r&N+G5djHmO41<;gXVBnWlFeL0VH*`xPGnuS?Z)1V%hh;gI*a0F<;UpyT zsniAi*vz~&W@2h*Svq3J76puPz|skO5m9MnQ}l+gG_vuXzyqjw63K^Hg=*wTGM1^q z#=PG&2@Fsx{QMi=$%y8Kj7rf%5-81TBiPx-b-ZN}pV^8pGF3GFk2Xc3LGgeZXc4Az zCZC6Rwp+KMMNW>V$}{Ob06<2EH+X#WPIdz)&2i{ch>h|o zu$_G}9lhNzwsbA|X(=)Y)yh0VK^D&hrnWHdUmn9GiAm=gRC-%%a;DvhakTP`p&n? zpR_xAg?pOb+H{%6um~1*q9auj&k{9{C=RPnlH&;~J07Cm;KXHG$L!-VnVFIAHEH$2 zfj4#%Zu%0QbpL08)WHs91LjU1JF`)Wm_I~K2{)+z_by2xwvw)m>% zhPAUWm|D&*TKxi%XUsL~VkE@RaH!4gD)NATm;s)G~#T`wNeCIRj|eG$mpqkohB9 z%v!g(o_%1V$~S2zxadgO6c^}B+viPHldo@LukbWmYoMylBAHUs5?KiM?eX-Ehs7Ra zDu_d;+@e*h3<6#sHPzF!J-00YVtyPk~JXq)U3WY6M4!=1cLmP+^NH}-c$AA z(#a^-#P*3)f1W*;z+%i*|xYFyk+ z%Z>JeeHpSy46RP4X-rlIv?Z+)DjzHrntr8>ieL@iuink``!Zmd!apI8a;(KBti~;s zi(Hh-M#=gLkjBW$exY368o^QcNfa~`B8ZHWoWyuW0Gd$j6FxH(@n7S7*Bc}J%3n&n zf9s9-O%9~Uh>Z$Ua)`1W z`~G?idXZ!5hjLN)7`WcyW>|5Q3m|`d_QtMFuc0tP6y|cZwX@i!xiYX-P))m6Di8zF zttIpGe&?ZSSUc74(~hm-XZJsz=b9}p$|@%0%4w&_ONYl>p$DDPKyRroXbq_0GT>Gw zYO6Mu$dn~nPNyoDQhNuRQ=r^c=GDyw1XqChkAGLhsU25+)W>df{R3J2QtBcE+}YGz zniEN`iuXtDh&D5}zr`@N>EyZHO_9}sTdc-h9u=*5(i^#XOE-Vknq=#U?u5CalDZJLWIi3AJB_sHppTfM8?w>Kafmo-P zZZSKPzl#fq@I%n)2~mLT0wy)x&a7K`=0bC^q6>pT<%R3g(hnPr1v9>xdW|%M7vvQr zru9R1ZE$RPCr`R@6a36=z2NP;+5Hq9HcaE@4GI^V*M>Xv9-G5PFeA z16|TjK}XDyN~|w1f^mvZ?AR+bjAi(K-S6r7BlFQBgLj44UR!0qQ!;3#gk~gC_OP0Y zCj&N7D(!GHWe#J=))SjxnynLL%TM-?!17g^V5ZRD6t3}9+H~V&@h9TpKcYd@AqwZA zKsO;%Jh*yKD9wMJm3R%vM7xM9-wE=Q;#j^?83mp#!haw3_tCB6$vwlKai{4NL%i|| zL$IZDv7~~_v-`x1X2-OUckU)*T7S_rmxSg;J?%~Lr<2i&J%6ASmqs%ZEBV9;n{?Wo ztO1ihMLdZy;>t0%Dt<~mVr`6k#B-_XeJQKp;k`VUTUBU+a>Rha4L}|@0c&yU!Cphc zkj0cjTTxqT3aY}8F<{a?JgW{&KMWgNH=HI>d>Ka44*6I5XK&|9@EU1}`H1sa3$LHy zf#LV>meGsza>sX=WW5CDR_XC^NS!4vWA-Fg=>7wNoL!Q3MrhZ=WAo25KCU+BO17J=HWx~K+s-#1>xq~A#aZFJ zXa)RqP6;A4V^&;w+2K*#+s^H@*t)K!vN!buL!IwUy6R9SXN60bIWO8o8dUMxZDjvb zf|4Jq@eGHsx{-Q3E_+4}&_cCQ%I ztkKB7zK(*@8c4c8(e*V?Ip7dxff%&fL%ESOmrAGJi*wZ2lljaYf{E|{WSMK zyRCyj@?f47Rubt`cS%ZWXEuTF|4C;Oe117tbG7?AIhhTcB@T^wdk0T=6;g;3yAQcs z)aQ}y6qa`sIQ1_|K1Zp8>R^mY_5&iSf1 zr4aD~9D^_vh(y%}Sx^r(!aBF*7Y>Jze~HJ)spfgFa~Zz|W)jiN-hY>JVV!#hoWK(k zkH|s~drVI}9(H>@1CKO#OE4_{ti!ITZ%RzjK}zuA>W<~~=1$zvfXVc#&dnY*>ydrR z5axMw|7oK-c}Q9sIWN|rE901X(Zjj40wQ5vxC0OSuLiF?-5hv!P9FZ^Ua)IvQ8l^H zu|D>o2!$DTW8~XKx&lVpTWj3=Zmz0Y1p5?8#?hG3eXA{GRN0E{3+@Y*9o@dmYt}8U zW_Bp?M*aA{(?@<3J#n$Mm3@?xACxNP8|!H8S>kKn26S0Hg->;IYCcxW9Xd-iH^Os< z{mEAzZn4owj-^@Hzu(`_?w$2&2WNcq^O6{ANj(btl(dibc)ct~!v$XeDotDtC-;(B zS45oE>b2j(-h(9DH{&L3V7L8IAe*&R4f&1 zpY&CKU@_17!HZOP9$}Pk{Z9Jbbi;wt^y;(27wve}x$+ip$Pl~%3`=^)M|K8B95|fs z`@`mYh(#5&-_Y+IBP1nFM%Qy@ZR}TV64tEki=;;`R=tj1(ZbYlQU=x-LyF{v0l{1y zQxfmgm369U&JQ}MrG!sd;^f?Wu;8pRs>}H-@gf_f8i$-~$x92I&EVs;K8U@9+FD0_NZr>P*Vm?tNWMcgZBB#Ob7YtjQ)ZM zrQ9mKXC7WB=n0TX%T)Hbk}1D5#OjL>RpJGQugCeZ*=Q#+*B}hnpz{j(GeXU=x;Hcs z9-#WH*ct*;o15Y@rzowQgt#HN9I!sH-XAXko1AaA%EH)_vKoC&a#1|a3$Bb2K)M5} znYCnUk@$F#okDSsX2a;e)}e&TmT}B&S_Fhhhzb-4u~R+~5_cUm>PJZmpJ8G>-F+tF zq130fma@5dybjyK0^*4!h)g8<{Dw%5tjr?*3ckS@5TI3u zGRx8{<(ufa2k1rK5u5s{zer?LaE{4VT{u=d_^d>g4~VCLX}Kf^-9HZNg7<~Qn%6^q zjNqV|=*FCbfT!TZ8GbVHboM^&_Xis(*{6H+740`4+73b#^{lZ@clH2b{D=PFw{T(T z3R6IgEFVXGFC?MJ5Lev5KWqjij_f!zo|^NC`H>IFFRmZ~-0x7?CDy*!TjwxXi$tWs zZSa9A%gRN8`mk+13cS(}rWrIWM-!oCt8gz-(ukWk$YQV^XESTjBgNv3iMFpYw4e&l zQTJ@KQuV6B#PIN&_3K`KCi4R41xMS#J;*ScWd&g7`u*bJfr?*VP<6>2mtWdCd9hWr z(WIhjA<2_do?Pp}X7LH~eES~XnR3Y705Z*2V#zFy<5hmqm+%*@IeGoC7i1pKg*Y0mW2`OeAOXOnw=%a*e>OF}v=A)T}} zZ)a1ZIo-G{RKKP_3G1|8v0ygEDzxGF577YjPn4!;iAC2|A59zRs9kDDacKqPATDzG zzge?dbL6jI(ady=%AfY43(PXidzC2jdrZRuioO2k`@$d}>`W8@7{zfVZ_4MVRzgF# z^!4Erw8=!g4Po<{>bOdZR6G)WX)f%OQr;SI`&}e7>ErU*JVFB9>H5 z0*nAvKjiep6)1_7%qnsVcgSG4)Xr-yDGnwLiN>AB-YDHtmZl6$J|c%4GjX1|eEBAM z*w=6W{(@=8hVaPQ20w(S8ue{}CGdPCFfomUogZJ@nMOJ!PoTj4h>5g8^Kly!;3}j# z?b|P;tY1UE?UVHwznfhie}k7SxMkOL)|!xwY*oWP{}=%X7_WDKkeC;PMd$GLca#ox z_}ssd-JsAhz6M((2eOLKlWFaHs0R(Vbeh8BJez&?zW4y#kjo&dM?1jQ+xEjSC9${s z==<>bk%IN04}-oKmspr)*OamBTU&35UoIM}nIyi6&>y;>*9Q-V6}-0cq{QLBRf~BJ z)@KzJ!N@kWnL^@+Ds>9o>mD;^3c%Cr;+c%esE5RoMV!Q; zFE62;UIUrDyN_ zcb)uKj#;QYf2u^XgJ6EgS2uk%tA`BJtE_sK<8)@DLEUl!=g)c~d z;p~(a1g2SPYMA2cWRTFr z%`eoS;GY9ZDK#<0z-?#)xGBd7!p#~)!_n*rz+L;O+SQ-`JmvTOO+N%r<7M@5LnZKL z^d!`z$j5KKx;-eGmEAyIwRd^KmKg#d>xbgv`iP2KEfnJ-8L#4%h5x7ah{Tc9q^9GXjbpznVl0R?OkWEjT5qWqr%lTb)-dW=$N{aZ#@7L#>Mk&; zaQz(d%yvJVAT`?O-tjet@r)%YEdbNL+G;kbZ$%k!d>@9 zI^JMh+nkpF_$Q8Ki1Xi_!pTEYjYqwq$SC((6XH6Il7j^KwnAPNGEOr{Wd8A2 zM218Dc$&P&x|{`_`(jvHkzGxaGNw`rL&BK9o1=rOs~xWk-bE^G!CG)0QiRKpDVpQn z1J?!%&c|#`nEEM1G%iMh$(S(W)Z1U6TZ)yYkoG&%VbBgnz|;T7z&D)p4e~`mcSG!j zjO=4Rw=@}hu@XqCi|Xn5_C;H%2@5N?SzEcBnTb0erb9SeB%H2UV^MN;eD2W`hJc}4aq8td2nT!*B)fd}dOvcQFd1oA$GY!idksry;T~;rxDxK{uFPcY0B`*8 zD8l#m;T=D+om^uWqvj|z52VDSuvX4XffNo^vLZrBuvVlOKFO%)&G{!#J{kPXuh&P{ zaL=&!VeLN}a+N^-CMG{vrT^S-+;nlI$(^4}TUD@I^A?>K%RTZy=P1rDsRIU>b&?G3 zROQyYbl+dmoj(m5iCnU-8^jdBva4zH$|wDrLQWdNwph5IA|uI9p4_r+?tQeheCPX1 zN6`yA-e;d;;R1Yp{gu$!#lSUiiwOgPM#`0fJ5CjnPW0l`tm9f#6cX|si}FsOH6rE9 zq?(GTJDW@6Nioe-eXy)NR*jQ7GGmoz-#lEN*@^$q949ENR`? zRSyT(%tJGZ-Ko88OrAz5jiGg<80#%}NMdU|dII}XYf$1UrjjotcuIsxX_tuEA`DYI z#3fIs$NT+BR$h!w*XG?eam@WV-!*@XNm=97(>O~hG0K9*#bs8TD@2zIDcyOfZ`dQY z4b`mX{86LXyWJY{TKR*feU&!eB5eS5I_Rwo{pzGns1pFd#9kC6bs;J)&9>etmmGxK zJ7Xy~?A3=WXfh*2Y0v-f+g=QztT22Wxz})=D>oUSRq`6|jffUrPoa>;@Qr;ONR+*l zW!dmD2T%W%%=q+4pJ>H7ZLn6F`Yzc!pJG&2j*7=%k*P@QDz1|=@rdsPFE|fuvp!{@ zCRN+ONi*i6BL|viwIT+u7y-h?e84+5N3JpgNZDzfj=HCBZhPE)ZPoKV3xiidO9|ty zIerSZq3|}%iG2FBWGkbD_zVqZVq8V0*bZ>Hc#R^J0$D%Cdwfy<_^qJcxcfz{q5FLH(X zqv2Fc(mACh`ukeaYrKZ*TSLy`jLdVEF*9N8UtM4*0>>f3NJ}G+k5m(JEpa#Y#?6h@ z|HO!}XSQ(XPea9oYHe@U)_mmF*0)k2lxfk*xLVIBxEWSbmJ?SEAyY+*h2z}IsYm3# zV6$jecozhPdyyBFbQ)*g9v#}IrY|hOC(cCl>@(3wDwj4yd5}W2>Q1n?9I6Vl*0JNy zeWdf4aEt|X`pIs6ChVS0CjU|%NXg2>LqjzbLneuE{=4FlHo0#TNKT^|oRP<-1xZ9@FS%1d{9h!%^k=1SrTcZUv zzj-9kw`1qLu*pibgA(i5VmWd0$oI4y8der!pF$|i$NARHm@yx|K0w71Hr#vv-T9uwlPi%;9 zpi^F6=uNs92VJ)2Dw>o!>KeBIYjP!pC)xH?_pv*TzQ?OQ22vF=(jNW zOQ;it94yYNhrVzu8~Il-=Di;mH8mx1aYnWpilWWQO0ZOzX$4yext>M8B;8yPkh+d~ ziMTGF{P{uQyXAMj;Myp%U4J9sy9|{sytuRdwDV4Pbgl049n4&*V0I}8wOMQ%(M$-G zfZiyPCZ+C8hRC{KiyeMxLQ-5|ksf%>H&o2#&WYD+;%yXK^ zGqb3qHcFKmdjl@8R-vG5flrHWD$NCYuK4`6BQ4>xR<402UdBh&5){4kGwN?%3m6OM z_L}lYB0}=W;|`%$x~7eE?(h$(yp@{HmBj|L(Yf5gG^k{DWL551rmN10|NM96S+p;y zihFlqxnU?#QKEcCW34AlU?rtgI9O;BNJe>|n32&16&;w<%~Q2 zWu&T8KRl_HSrY$0#@+$Qk|tUg-EG_MY1?*B+qR}XZJX1Wwr$(CZQIkfHM?>9|Ic~% zymRBkyRRa4#mdael?zq1BQmqTZ!2(X=uf%~m0pMUPAGz1f?KV~whpGyaRra7gL70D$f3yZhL!yK@Ywv5_TwL%9>@^R^Y+t(toY1< z2TIIGpYX6tk$bY##p&=D5@JDVTIGJ5V_*!lZ`|K-1+6|3 zMqJZ{?ThyBHI&wBzR*yv@Qc?VpK=Hs#)$05nii|HI^V^qrgY9$P*Pe{W;G}+n&$XP zCFvB_b*u2W2sO;yIiF==J z^dS}rCGF?$TPu$brKbY5jA1bGE>@^(qXbtHhXPL8@cV||DX02w!!+5t*sAQt-sq2! z=WzW^LsXB<{aohhYkCE;DnQ3yB8%wH=p&1@mDuX31+do$5s-EFgoczDYYz!q@j+Zf zH{}pXwco>-7FhCcGa37_c3GK7j|4+Idr9Yws;Q@rf(Ys^r)_^r4VP!kbiFEtQ?RL_ zr^Jtocs z&T^evWZP;(WvyuAP8T8@4-9-OmQ-)-1FKG##;~7t`<||#oFP4!Ijnl87@J&rQIJU~ z#j?Uzh>XxtEz8vsH}0t>Mg=>;Y_rkAKV^Tv_~@N*g9?bye$XgL3%Pt7VuSCUlk6e1 z#YDPp<8z%7@G*)U^LG3l6Selc-5}n2amD-?1oGn77T7y)NDzsg<;41F>aY^#KH?|M zc+-xfD#kkWI!t{=%^3G4^JY+ZQ~+n=+=&So1&?Xn8kB&`ZIB&VU{Cnz%SqwoTx=?fBQ>|~Ku8i{rd0jCBtE#kyF5Vutk!JV-(DH6kVp{m-)b=eOAE3LSjg zRcg}3xeUDP^Mi@!4tuBo(~BRxkyUMr+boIlxB8`mAKQm3*3pEvV)y;c1MV_BuZTGv zz9Ar`RHRu~nO+jtgd1-Orngun=s%UF#vLVO zfUb5eat$sU4~oP^^g1l%-QU)_sQc@KOrh_squPse_Vkyf3j=4}VyC*m<7)F_B0ZJp zs`x1{k%;}_We0q@DDzRKSQ}b3XO{2~HhEPEaq$N3&8K&fy?fx?F6s7pj{rN=4Goe7 zH?L17og3u)AxqP(I$rTh%ReKy++S&&8Vl11nk5zTSb`usz!+F(WPzRG?FdnimEGy0P7B@OJ3)Rcw{z!AP?USl4fDJS znTm>jJuINPsY9auE=fbL9>J!tX(q}_MORlKrn`vxz@x&(EW#VJs|y>a8C;#~yj1X3 z+8O7DU>nmgH?s0s&P?|y(qgCYR|S|&tzFgU)~Sw_4TNKJk0?CJ!pksmA)cAqJ#zR2 zaDJ(hutgNKN;*?$8+oiz!#W5pxfbR244McP5c4V(Rq&AEQy5+peQY0e%PtAb_c=1_ zEQamE8p?x@P1E=^dtvasbQgj5wV)}67}FdTa4Gta<@3Q2STbOa(q@&;f2;Q;q7#qI z%%qpR>2s!%#h)+gWS+8omNrB^&aG#~jjZagHA$tXtTxlvrSV#LTQ4hJXpY9L5l`80 z_nOz1Q&&U0gDuqSTClWACE1sAijt4;cxcb4`b@ZsHWK_ra!p3Yg0I&Q^Iwo zGxfSslqO+&6G5lbEG(HF31e3#^}Gu8muqYWfp&c*xd3)9GH2Hs^?sk)_|ow-Jb zPA`3JN~p$m{^=%D1sCmxQUzXAV8^Xlvu2T_%r^8pOyu|Q+0?!4e(C&v6Iqk>OZNo# zocRG4^`YoMs^l>1($^!=b#jrf=`RhwC|-d>o{E#?r|I^J2Gw}4>&{Dg)(QUY?p!Cd-mHY8`5$78sImvJYGFt;YeU+j1^4PCjK4OKW)a z*YOqF%^lzAaBcVYgCC7EgcXT<-ha9N0*yh zx)t4(P7d@q84H&-ReLq9Ov7B7bhBdUi!VG`ooCN1q*w`(<${1&jOy{X6WiAgob`7i zSviZfiY)mZg~OJ5b*kXzhF20z#7UP7Adiz~k2<>A^UsQ&L6j47D}Umh8uI<1LEn~g z6kO*;AxA8Teaw$t`^}1tJIz(E$cWR2VeORlXf)GL6CY}F*48FYGbpm)F`;aozzc$g zA;-C3%^}e=;etJfF0aB?|Y@{hTf=|Mh{hK|3l-Drz ziM!u9A$$kl49_6gu8)%E$sBoYUqiIh;`1S!Ifh6!N!r-0rZSS5?0I5g!ML0a)ZY4H zwfV)>olQw^BmB>GE!U|lQ+FLVo7z^S4Tr0FVQ@>RGMo4zV!Su;REPTtF3cA|ZQMfS zbXoMW8zce!bchx{riE7NJCv%-&~m`L>z}))!j>Ry-Lek%pUo!N+EiM;-$zwt`(CU1 zpjX0*jmLg?XO^YY)31>=an^<|Se4ZqJc=onk7HyJ4Y!Y_*?vYI8EVBN6k`95PAE71 zc`SM&{Wjk4l@tZrwdZ{%2(MkL%wJ7M_QjeP2;;&$K0yuO6-&{hqeA7LqPP%Tju(q% zq^$S%5)>sRG5G1JqXcXG>=w65K3A7|drO=s?mOrYwcBze%DbaicHY z*OV2yN?-$W;V3U;hQCPeK2_CvF1Yf}DaL>2GY=6iQ7s@jGU5tLy7=1k{xVDrfN;l< zWlIPIno)@Vojv}m**A&Nzx*>toG|NppRPuYBd>Dkh~j3RG*8;J5pZOY`eFL@KMAc2JW93Rloc3EnBC;7PST5jAtV5FBz~Ar|cQV(yNJBky zv92HM^4ucINZ~fGh`!iX$rp!Qo>EWQFpO2npi)b4%T-SM1}wraeRX72)qMQIzcyR~ zHN7I427Gip>vS&X#qhPz1R0r*Th9WY36v;-?QHQUX{Fm3_7qN*LD4UI4^$I>Rg{`d zadDZDC`BJ$Zu(75l4X}^2M&Z7IJwt045*WiJdbT}QFt8oFHanb^aRT@;P%W$^GM^v zdO{@C3DQr``d)FJ&}XjuPCGA44eR|oXfT2%g{FV6&xvY4XQJTbrlVRGF0eOyx;Ls$G}=p9*pO2|7G$IpfBu8xKFg~^+e*_n-0ea2*%y&-EQ9B4QRe|@IBbP66u$bIqkT8C{OB8 zU&g$W+PtT_D*@b>|tEGuMzq``)6Z|jBI$6E83I8$K4{JhM zi>3z)ARLL!Y%~~(0tS+(f8iC1LOLu122K17Iy2#SeN7?$PpdU3NGjtE-?^6`=gw_Y z1miA#G$0boo&V$e^m%4Q*Q}FqCzlZ5EW!tAhaMT=Rd@YuSOyPT$nQ%KkMxrqe0TWL zautMiM%1Z#^WCQnn-QL|q}#-t4+F$R|G?|D8%R-S1H9{H~r&PMXP`1I*3Hl zZD9KJ{Xu8bZRpFae=Yg4a~}$Y@tE(ohPE{vNGszL|Dd~}d(qO+mzkZd9EBXu5Vho z{FuIiFcabaq4%FT`&YfbY-i%155^)d5AJWtI+56n1cP^*nJ~Mwhk=;%OxCO06;GfjR$8d|Fy%H%(NLjQ_wZ6W^lhn+jcrfVG~&dHaigg z=>_;YQY+#a8;k*fCylYw&dRkuKrblGs{k+L4}>IdtIaE`&z}IUii0|b4htvarUMv3 z8eW`&fuNqI@k4`q|Ns`4@>!j z&~_AFf()x8oS-$&XVdbCh8&qKM(t^cVaIU1CaRf1X#03FRi@4t^ z*fm*KYX<=Ma^AoHC7lz5P1##ND~XS3Fy7T7fBrhVzp?`Coh3^1AOV2d_!OVQyEE*( zcqF(%`*Z>@rfHNBaN4#sf-m6Zb04?! z(fa`$7ZpMNM>vcBzjWgqoc{;-$Kpiz1`|5uZdXqK#I#Z96&4eSOfqqV{!bpH*s!F< zS+2fYy1S>txAe5{STNp_cicSj(-c>~xA>|qk47B%uO`;Bi#>G5-~Tq_%K){f7dGwZ zq8A)|us&i^2CCKuw`%=1R~*--N~{)KY&u@GrWbtl2rpB7JG+xh%N3;i-aK1=@giDnobKJA8UMyeV?kJvNz zUFe=S_B4|Rycy(1u#GpGC%BJoRE}L&xfcPRnn-DOCrT$6Q6%O{B}%ynOm7xDy5B0g;zRLXw5p7+G@i)Mdnzi9^V?T zXkc35_?u*zdrqXS2DdymO(k|$ZCD6(ZmTz!5O|-QQ1~ZyAy#}@0FEl(jNfV2|NXIZ zS~ivYXQbAzx;`yQ9V+lq2<39EjdT~x(IM0E;QMxl9|XrJtbx}R${1N-8u+}p@xS2n zDW&Gxl1r7%aPC$`I6(W$P9jzI#8vnP!2fWI?XU&xXXKSkMmASUt5GWtW-&p!1xRFl z`{f>3yuhX|I_fm4=mN2z$Vfa!ZH0zrO7ETTt_~Sa33_J1enxGSd$P$9yZq?6xAGoDvuGJSLA78u8@}^q{7%rJU>DH-s2%_Z|M>|@VNv5U7(GE2?R z_@Ana`NeJCPjefO;uR;)SW^eG1^?sy{y(w0b8~V1U$6{0nb_F=8+J>S2iy-dwe=@p zw$o9z34=v^F}>XUYyjpZIYJS#WGv=^B}5r!RDfn-fO4BEgRehTsF>J_`<6?e+HE+e zF2tjXhPLRS4n(pZ?VoU>j-ObMKy=2*haD+UdhhekPu8?FR&%pyj~OqI?B`4Xs6U!I zXz<_r;zTu$9^N}5fIAU@ZL-r-9F9NXg8O2pfENZizR8%jSD0=F;?< zr?{^L_&h@e6b~3t1@Y|q`$OutLIDJZkrjn%B_IL(D5*(4z(oX*7tabpe;@eSdybN~ z8n@ySE3W!&r@4>;1{LF-K$2o2zC6ZDbAxAmrU8IDf62|`=X~A13EU{pE#ePiM`Tc3m*BR6&y=@iU^_tp?7Z~qU@?6nc z(Q4jG^djtSoa4jXGqDX(vWvbPN|mp9PYZ;+#Vga*rtu*L9v0nM-K9uNYE{3ChIC&HsRJ>7VABoPUX^Dz;dY=|D;_4L`0kA{ zgL?l-UNC%GL`7xH*g;J|9v$(G>94euuP;fkh*TN%ycPAlZz0Y^jSF}-SHt@Tnb^&| z3lQ-<6|;<5!H%sygsPgAvaU~68CQxcQY@gBA{tLE16>ungm_D%XA#Rqny{8EFLSkV z>UuPmLYt)@e?qCXxGF9+Ri#QERQ!JOQe%zu*Pd0LowqX;#N0i;#dFsV+o**ayj5ZF zM9dl3z|+_zcRrG*dr$Pwjl@MFkxx`;F$E64$Xer{;ZM%RzoEBdjI@Q zYsf(tM9c>wT!^j4#oIOM)LNAY3UXV-ibq5essu7mTYq^3cWveGE4HpivE&fxWhky@ci z*_od7*(PAKaV>w@MF~RO{9!=}B_s@hKK<6kRTzRSS>l0^W-Tz##~AyA79`XL$1!vR z2450c>IId_vB(|~N%Y7cm0FlxK)AEsY-IandDy2dWKyJENd@fI-7Py!Ln&G{<^)!p zlu$W!WAB>lHxe2elr~V#k{k&iFfFdLJmvxhfpKRD5Zz4|EpvQY&36DB!DOZgK#Vl)KN zcWzBZrlLYkt;Az*S1NclN@rZwRJ!VeZjX@8R|_Of(pNwf%yqPHEGN?)^m6Qcp?$Re z0@iBW@mokx*lzqgMyavF&bGKDmnGetrLHuIC-|Na?Lq4Dd|tDYA%d@?JbyGr(0^XhNb{%OEM z)E2A+j)0#(JtbRh4*|yIbgoYe6H07w*&qMJNeNjuJ~ixlQ*#*#k#HJ}IwZrsXH9aW zP(Y)3gs5OMS}hh4oNySQqEOI|*9o5BqI;$K?5*0Lt64$X_VS!#o%b*yaa;NM{TU>0 zP2~dCL}{~D(l29Ld7>jLFZ;H0ZE0xb*WxlsjJiExNiS@12Zg-_{Xz#mrSi?0&S#y{ zrJwQy7u-HC!=I}iFwO8-zfYz-aei*JuW4I-xP3M$ZTctJgW5)d+TTE@4NS{Rq{Gv= z=K{i{`~R_wepX$8ria0bsc{0PxhQ&oZA ziB74llj+YfTyI*5jb1A24sJObWZygV3nt!(2~=N#NXhu<3VU$B*?4$TQ_MpWNle63 z6v^W|4|U`3-RTa8c2B*Ru-PjIJ z3(XURXp*jwh_{G>g}zJek^y*NI;~ChJ&6l0ex)L}#LfIx+l&CSscrDWvAZ<4dR5Nd zRp9yo>M(o%Yv3M+7e)u;5cPLl6~6#b$&<+7@4lHKEOP3~Jxs=!OCYE%b}|?1_{v?7 z(`fogTnPs6^x`s??VM-`NT%6Mcwq;;Ucq7FEWV9Fea8gfX_{`_Wqh18kdL_3DlfM> z?r1=rvmJ>@yk*H}HFI8F>yV*hprnV?nDUvchyUHs=$0r+HZMsJGkE-!ki#5F@BmcE9^Q z2Sk=dH+&}MqvEB=8&AO{OM^*)cXr#9V#B3?qAEla^OglAE+~Oqr@qf&(mxe>iljTd z6Zwv>`=MjFs->xVr|z-MEoREVt8ZsQ((!&}hpqc<+~wR{ko9yykipY$$OFjB0oEUv zt)MCJtZ;&~fXW^mUWr|Qfuuq@d5G<6>TD>o#~b`fWfI&;H^CQ)D8G;QSn*=|rrafm z6~JSVd#+E_9DKEHOwoXx1%d?}7Envnkm!nI!$>k>Q|4~{tD47Md|Yck7w2|V?O_6p zSg^9yRrc7vYkL;>xH0AxXy_jKwya_BF79sjP+)cSI&hg6E;UizdG$8MuEX)>{*HgX z@Z8<-j?kO^><=$rssNvU^tGwwNcY%8ewY^?1_hgmf>!zqWnZg^DLB0I!VD2sU!!Jk zC#K7TZ@H)|?E>NFRC5o(0`?qfc5U>xtP9R-@~I6Tp2-Y*-s%m}YkptDacxmhlL7*( z>TCt0VohUZRDomcj}Cs&UhS zVVdB3m9hm>5pn+vPzRpiS_f;~j_@YtVJ^{Mq@7zoRxIk<$RnjwZIj-X=nRLO(6j;s=@2!a9jZWeb8}aRJi#eYY%( z#KPGy#AsxpK`@b^F8)Sf6;s~_CfXer3~^+RNi48XxTerAcCuZ8LcDa$0fxBwSI92A zGXyX95;Bu1$z4HS-G5GID54v;d%Ft9#EZ4~a~km4NN###MGXZW;RY>212%|98+mNX z#W8^Na>t$9`hKTZ(#_`R%1Y5=MgsVad(5h*_lZFf)(T;&>J4~qd{$j{O?%(*9}aYQ zvwb(t`tn6=Y7p_i)=JSQ>~CiU^{rjrFJoPHb%|?X{i}|sB!Be23~IGljH1mV^iM$g z=Nz_8|1fV&*OSrZTj&dB(4q}=EQNyAce5kRy10@~r<5~=!Nm-8L-?q{`o~<^S^zs7x!!?Y$8NF%K;e6EY)a z!~yWB`6o0Y_{V1C{aJTDHj_QKyyltnvPvV6#37l+2cF8_JF*OJO1V0*nbON>ky^Vp z9?M$WcwS(@Aeo1f1Z-gd6fS&;ClGMbtykLTH)F+{yDy0f+|t!dieGcLo=y^9aftCH z3s4~t17M);76Ct019iJK&aN7JT}50~pm;_xqdy$YwX0=7Rzat;4JV}|Go`VV{uHvP zDJlWD55&Cm6pHo#lnhC$YRTHUgvy7IppC=i(};>T-65_*&-8`#_EuyWk+WtfH;rtt zx?jpPgxT`iiXxpG!W(P$G~(Sudq(q%R?cu}LBUAG5an&>$Z_1h=s5Q>cKEN}k2dbC z^7+Z*V3zp%gPb92jgRfL7 zy^=belnUZ77u7jY=FqWC`ASj}hC7c8A2)$(ZRA*zuuU4b#-OrA8t#yNUha-zjCw3R zpUZtLtbETt+JVF!;Q#{=LZY-r4)o}njIveK!*zG^lCy}RurTxQSGQS)GqzZ*S0ed6 zW(9J0$#7}&IRMk?(Wa^ftq8v8u76{{qxZ0R zEvE}ZWMJIU&>Vfmmqkz_B|E^T$*v619)X?;5wI1_yMlZ6oFwF}*4c1UFd<}LBfekC ztgK65e@F}p%*MC#XNr+K9#Tri(ZR`%I`zPQzhYF-+%a&tzZ*Jf=;mr4`wR0r)#GtA z9%6ge`dQJHv6iBsck^d;xL(*?*Y_Z}%ec9PA(gq>Q1f*aO5N6Xi}3ON>$$~^4gfKQ z+4))hixl-HGcP|sOmqRBO4254}S42#-r)U2+@0HHI^Azg& zXiEsU=NoW~vF8otP;RGXDkm=#5?OO&Vaj&~mlyz+_f1L8sWJ1HC6jrmc6P$3R(W&T zb45K@b!jNJ{6OrR_#Pl|*31@00=6?9yzirZJc?VyN>1f1%@T=+zBuWDf;js*Kws9FUcXrXQS_r%^Cf>baIFXfqoq>6>0@H#%JF9DC{<(` zOHgx1i?Psl_-!%edVd_r=3HRYDK%>Zw-+oM+ zgc&;T+MS1Z$DXi=v2PeH&e0%RtiR5b-5k*<_w!=*i zh2PK*2gJzAapI(P1li~lFv}{7>D?~Y($%FUBsSzMiY`7-;rxWK>p@$jPa2M)c?a)C&@B3|s%CsByJ-|9=yEEvMAJb?GEW|I2P@X_G!*vku{1wD&( zPtfAL(=x>$y(!vPTOpOaa)KVdLz!JiiaHS)Af+jcay7-tWPJU|-M_I_!TXWoxT02v zQ<}iWwvMvdQa1WhwIK4IK+ll9`n`9teOMkRbaa>Mj9nwBX{A!`i*f_-NW%KfksrTZ z;m*a1TDGd%=W`5J{UipB@s8eV+;UZaZ+_ZJJ5_2=z!%UpsaY&0Y<2UPFDK{hd{5b^ z`$%;;E-298lUpf?b~+M#5!`quxq$c)b5le-a27Ne_JZLjO8mB*U4zD)y$><&E}WP; z?9f>X(<$T;#u8^t!UK*1y)Q;H`iSq?RIW&Y3_?a@6QX<4;U^stiLc-2>7B1TxF1~G_|neMoK3KK?UVB zvYlPbNQZHH+AT{AL0uetR+fF!WD?fH!4U@B6^}})&v~T`$MIv&!`YMv*tD+VxcG&D z^U3U1Mzo*QR#aHQ5tU=3=^K5+WII}1FRoAnso}S-FjRKo5+^Di<4lC3OXAh|2Lv$CueYTZs}%skJ61B2T`RRRw$!*(=@{FbY|LaB50a4^J~tkb zrab#0K%IX}5@$+|(UM%D+H$XKLfc3EMCxAYoC^1oFTCC5;p7sJbK4g<9OX+V0wYG( zAW-ky7_CKAgm`hnWuI$20>YcztQj%yxK_!|pmbKepEYRajBXGzhqyb-i89w9rDY>SJl1YUG{l|h)0hqsP_`x_p_`8- zM!mG9>$=A))wFbv%~KmC@e|1aXG=xryxV!sMdC@T7>SkBLP=I}VycL{-16hIbtpRK zKj)pZZgLctM;`6j_7^pm9AehoZ7dZ(t#YK-2@hIacW5~oIYYquE4~8i&n|>~L@tgR z(vY)vvSOFXCTDrac-JCT@m??3(n~AdneYAzifP}5kRlod(3{u~qx9^9ChR0l+*Hhg zG4cAn-4GF2LU}Z{UDU!tcPdhloe99qANf6_(c^7>8(8D(ebKP>e7*iLyNP%8*W%J; zxmyFOi^*xYb;8Kyu|wI9YJT8- z8gp)Ti9m(2+Ohz$A{PWsdq@1r`ZVS_7<_3+fj8I5$Yf!jwmAfWRZqREn{4}{_-}*l z^>^~-*nuMt+T#mS-g@Yc@F)O;EBV!JEnk|wYCIoX&bPV_Dhz0g?Ib(~~Rk z#I(eg8550-8FPSa^@hsu2rHQ>jQTv?msz89xY7M zuw(pAl0@3l%!)uJZJC+03l)|Q<-G{gYJ(#iJmG34pe?KEPgU~2)195RH!9itZz??Um zeMKpMB{mtP-tC*c2u6k7#{EyLd+bcaOvH9Zmau$$|KIe$tSlV=Z8=X*`ClI9&U*~} z1QGCI3OTX~Wf_yP5CK(AqTSwgv2y1AgWaB*$>Oj@uv{EhGdHbNOZljVxcV5TQ%sV} zDpruAQ(U%LIQZo_Sw&-)&b-F+y8EEAqeTX%pgMv^?h02KO|QofC~^BZM`g7|A%#@W%QqcPP*bU9EBMx*`}MpPPbjxd?ztp;@D+0j zzt-GvzaK*qlOJblG=6PjuZHHjzwQ=VDq7jm(<~5Env1_DsZdWmhLMUs@t33^I}gfM zz3bw}|9m4noeL3uFcv4Y+;`U_!!dJbP12$Z-@Fi<=H3sF{H zRQo?Bg!%uK5Lr`ObLXGT#4Ida>}>xR{$^$_RyNlEmZHT@4|mcr7s?kB(wNZ6$WEk9 zNdUMIDzPvsxNv>A7`m2;o}QZ;mX-w8T4niF@?TXV9=ay!`e+XJX0n`m`Wk-Tjt{yG z*6&hJt%p`76L&9`GW0X<&p`3@rY>VWLW6p`>nl#UI)wXMr7L380F3>=Ta2(0Uu zE-V;m03A3nXlC1NYWsZ{XAczM9R^@+&0qKWP$yy813~PAC-j1(!^npf))T1@g3JTB znP|!JJqVlGc?-S<#O{Fn@OvCRYET$}NCg+-0l3HTeLQV&E+3o&`X&Ha)%>1T_eY

    zi?tQriFbLop*XY_7F?tTz4zB*n{Fa_m4$8`A#)s#8?HHUKfKoeX7 zYF^WZZu^x86IgsG2ok)1ia;Q>6*fildS z!bBi2(3>Fo3%J(T{)izU;AAS1FEJVvz-&)bA5$D2w9=HT9>E(i{LU4p8!351p&Oa5 zPc#9T@11;Df-Y{S@7G;~n*_56z2I;rv3;Q{j@~99AaL-CLLgvNtGPm`=s$$|0Fd7l zZ-fE32Ijxu`mWSGbxFWL`1PM_-1Z6C_B%?6!5|d0}mCQ)`-iMpP581X)XIIM|K0AQ&TL5O{06N;J4Y;oV@t)KRxM(fBLf^uTt2-PYWK3_t4Zf&7M06hx7lMQ#L9_@s z?G4vv0KGfnHtNnh^D3?`HzJB`AGmBU*&-Csdu=1%^-Atca|)JR`;)#ft+Z zOwU&^B}T!V>%(Kmt~YCr(Uyj$H`(SCJ5%1*Q&~nq0ar>v^^Sy^m3(jRwF#s+=R57N z!uXZ&G5v1jhr76J=;}j}Nj+_saB9f?#Ib6#5mb>Vg%2C_Rb6t#O4Y7k{__}T<79<_I!9) zJ>4&{%M6?LKDp>~iplo+Y%}0{_R9g<9UtDW!OaJoGroPnk39D07`&XrecH$AE;6b! zEHivWObn#N=y!X+idgwIOfRc^Ve@~iiZpOe;vw02f9!oao}cRYIiB;jL~TTECw3{)^aXC+Uv~lL3mD%wpF5Ae1a9(r-mqQ< z1aI~XJ|)jc4L(QxfG4y>@BJ~oF?+c*tB#OSu(-rQd2t`krXsjlBl zdZm}wr^@1UGo{yF+YVKTUQ*ESJTCR~b$#CaQA0~-pnG1uJRjWOyGd8)SZ&GwWe9gGJVdH;n^|0z*$S~L`fhQ#{8#gx0i?^`!PukHS7T>Q zWNxmy7Qf57Z-7y!)}`%%1@}Tv>s%bKWhEwR={i91YWNdN|F`<7&HHYu_%FTw=KKh90-{E8b?bb_ifjC$K?eES;#r&EfS$-NGes#4l-{>=P za)zp?hynI*q7HSHXxK<|i!_piQj3%8W!%H%)HvUe{Pt6B6b!1IHnKd@0 zMK>=mY@F*b|B8uRn$sj0KAX>m#|cIL6*GCad|9pN%N-EHDUI|D_k!Kta}fuGvvn(o zdN(aXdvmzO9NM@-GyCcRsFo&b2jXvRafV1cH^?G+{U2oP&gCN>Nrj= zDve;M#%TYZ##!QZY~5H#Xk#s^=WJW0C@G~1 zY2TYvtzBV7I-{k14$@D*(Sx?zm3{q6C1i)bOPQw9Zu<=OFg4kT+*8Xx8@nroZNzr+tAsji`Df?vP$r8UqFwO7wlfBbf1{ubB1`Mu#%@ zM~!n%=~h>D;@x{wb1KPsZB_)m4R*sYGm%saO^AGYNkBn&jYnslEhia=H234Qk?;+#2J%pbN zjwy*93d`+AT)bRWH%AxDeQ4|-^Y2#nZ|(1pyDWaHY+PuZCdT%}$#z3FXS7wJG85lh z8nph%{5{+@pQ(1?#Ut;othpaacoBXJe_7sm$8&NVdpkIfGrB4K=o$X}T6$bHs2u*3 zew%*N?U9=A3L;XxX6>5!p5qwY7jqA9cL)Vl;K+1k`*jyouh>4-#6zL-g*UezZ1Z4k zfNQM41}h6oN$BY1;oI1VZ^1QPR{3rStd^XGbvy6shN;Wct|z&=68keGMt|!LD2fxmbXMvOjvIQoteSsX9-ivv;qO=uUV9L>?HzTHSZK8~ z*v&uvlb(pVVw_y&yrYe0@8I|T-RAjC=QUN;l}hTR?Q$zY*}J3V$)kWpvqzD%#%qb= z_4A2|YR17r_1ouLfqhS){6oii&}`3rSa&AZ90sk<#)fX=R+sG!O1Z{GwW>qA zrAKu|;xVM1)WnwCa=U%9VEQ2W?cNakHnPpEjcHXyauoypr+7|NQ?+t)yW=b8{JXYZ z)mxfAl78vs;uYFnRZ}YBo1eX>y-N=7j<(Kq`Jr03wX>8*5@TRoA%b|BZ_XmoX7^6X z!*)W^R)&L^!Fm^|V0*;F-4Hu7eU;miw26y@hd{Bp*f~wo=z4ZfMB;dEz#uL3;p?T1 zjl_r3?I(^u;vfZarQMFftdE9GWp|g{>Uqw$=al+Z_t^<+w+T3?0b#u>%ZW|jz4kCi zNbGCrLpL8^VkaXfBO=2;Bm(HqDHL3nNd$2>sy4^#1npbVArHIjKxxM6t_s>@?jnI1 zb}6hR!JQ-;i0(q}(?2B+gns25OzJyBUe8^(m)klK`6C=1e^_X2Tsb*jd>e6Y*9%eM z+Ac4rPU@znG!ciU#f>U`@Az8m8FjU2wNQAVp@0lB7P|11K%UO3{+h5_AS4O({gDyCKrfY?GY%`yDQrzy&(7_+4!CX?(m zRl3Hr2e0;r;{NI4m;i!jwcVG7xV>BJ#iZIt!S%g74o$ix+oy zFHqdwSsWHE&f@Ow?kF$FU5XahBE^gL@%#VZKY1^Cc_*7}a&zv?WX{fJ?zv~a zA8eEo`JzC?G`1D$@fDcRMA_O1B&Rfd#jQ|>egRRqw?%R!N=`y|7n6o9+lbO4lh+13 z-<5@5AXt3X^6r4ptG?PmWMn~E4^D}BPH4$_3}Q>poObEOJe!X$zoESlmG+Lm%|iYm z>ZfemJd@2eKRbNyCp%f6%@!86e*O#nju3zH(1W-gtVIq@gCM{Ocxo|@{K4B6z|qrr z6*i$zMe}tT40f+52R?lU(I9W+u;#Qgl1XwCULu6SK5{Oe)MmeE&`C_Uswn}IW7w0iqe~?-R&;35Xf9gSCM;0qI4Ww7=R4M2%qp@-}G<|B= z_yq=Qt~xLqGK3dQ0XO=W6godrfJgA)7cu>8Q3{Mai%Ya!yhsVyy^Rn0hpdzX4KCP( z#ouCL<$&FVh@a}PyZ7BU99n1&DXA;ZoqfUXHWDRxdeyS0V2vrs0JEdm?fB9UcYmYiuiT&SS67w%VPUkr26 zf39A^3g?1C_LoLms5m;B=9SDd2NOoxj6Iw7O4Ci*2Iv!|YW2%%sb|DU1p^@74YS=c3Su*0XuCqvEWgK0i z6EMJNYkNIO=qc=^ABvofox74(@;T-L)xW4>#dVU>{=iE)DY-Srl2~V=g#s|8n6jwg zFr@OWnwX||WnS8r2X%>Lr19qn`;9&Hx?MQ7V%A1!A2E&gn#9%t|$^5V%f`{If9 z5RgW;=)7bkwK>DWLMrmXLLkfEw(vTSU419h`r;gr!zjkO zh>Fsm@fF7&JOkuw4Xby)IjrMrq|4f6?5eV?2#Dsr8M_YT&BFT19=mE@8B&d^_DiLoE z>P=myQrALIF)@Quu&0LZm)Z0=t>v?b&jzRHQpW?y&)#5P8M;0#s+?s4X!kqrccptM zCf&Ds0_IT8`!&ZMF7aUjF)-P3q5zx$BL_>a)Oh6jr`2r47P(wsp5C{_8J zqOqKGKiy%>(SFXGTxtnec6BxLSD!z?*qS?BNj9~)+sw4L3Z&S2;eX}xMWx*(&)MhR z->irDUaqpmP25zrbZncS_i_cqko?w&F9jL$pUZ6uVKHBpoaG&%8P--@iCXVlLFNQFMsXm#gd+!(lAmBv>M|JvDq|)#5|-b z^jJw!ldvF67)LNJwDVDsuvUx<3g;w4;XyPS^ZDJx)SS*+50MgJ=V2x5iSO-P!zOv} zpU@o(XZ*sNVC=`MmKp8MwnY!9*jgxf(JsNx*V?Iv{=Y5OI~6Jg4^(}qG1Ue$BDvGp z4#hRvZ*Z5%gAaE>3)Fi}f=k#VH@wOLv#CW4crPwyR&6ZCVlJqt+nOj(3S#xxs*?Q` z>p`N(crl*>4A)=ae80RSsHp_2Ctk5?@p&J}u7`r0g@t+zR}@iRv)`^-i&@gn;@61b zb`>^jUVLtw4Pq$2I(VgKrDnF|urQ{!Bxy#5Dr8Zn)PPtt;W)ywVuR zzji{W*mxm)<$FanQYnC&WL>$20Mu$U#f!AFPFw-7fu#!zes&uvET6fyT7NuF6|V05 z!T`S&;$MW9ealmgpMiL6slKR{^+4=gL%;@ftmHDk(0&`y*nH3MprJt}Y zW+xyaQSoNONHf;ysQ?RVRTUlDvKUQaCWHf~p2Yi{S5^5bx_Yi62(lb?RvH|#?p4*F z=}bbF*z5WPpxe|Z{4Z6@uiEd;ruo@8pSLz-@Yju-XL$kW@}usoSRsgANu%-jV}b*@ z+ceAC1(HvJ6WAr5sEozY%JUJJW)#_U39Y(&i8X+!~8^SMQ~{_{jYMbpG!5<%M~it3eQ8)YODXW zHh3FG^ahE*d?wBe)Ey;>q0}V%0nDV4Q{b3R412_IIlj20p~Vw0W)j~JYeb{E@G{Do z%9lD)RGMeD?%IdQpbTO*&`(pR=oNQ}5Ay;1L-?+ER=94pMtG?iyi7?|-Rjp~cbZBg zAuO2fipcY9Faw(u(+3R_F%{2@tBHZgOT7BUzS2DKZn_;e_Xs%Q1@RR zZD(`M{W8yLoYa5(Om+1^(AanwP(1pzz}aC;?h?{^OtJho=ODof-zG}V29z50YwCpg zXz%R2niF?|J0)cwv51gdyy6k%FWf8X;{iEr%G}A{xOqmz;L0EL8tB7kj@UR=!#{DZ zUg`kCfseOA>>MO;VpVPlX6Nt|u5MN-?L1sr+Pqf8K!xB~*w4AQgZT|Gp!X6Jj8vv~ zbeHS7p-?fPJ_85s8U&m0Cd_y!i2dLDTg~j$RCFT~AZ_ z0HSVgV?9BXm-p~#lry5M@CCf~D@pKk=U%hpNgsX%Fzx5=bw(m{s5)P2_Cp3R&VS*~ zp?nn>52lP@3U5H8{2=RqVRRh)Zxc{{cMub(Ldv5wg=UikHHxTlPLi|O|G9aGqXE69 zT+`Ko8{r>4@zTqpW})3YJvCg-s*jG(SX^DDiDj?%ix%I7SvGeM z%GF}oKSR?~=~(ae^u2k8~6g+Hv`@T8$lcu(`5|E`MH0Fy2UF zn5=+QmkuH23>fy2^&w0Rh+R_5 z@(>n+%};%WZKtPq(XTvK&i$x-ANT2rhu6WSwHY z>hIF)087nAN|#9$ez-d~#?M=6`jb=G^Juh?Umfl^TwsJKK~BqtDhhG_3y zaP@fvz^|&jGW^dE4=2tVhc5w$H>_V$a*bS_oqhEjGRh{Ys5+#C7$*^huHm$Gw<&!| z%BQyL{Wb(VPi<77OV%}Wt?pvOC2$tG76axV6|ud=FWIn@kz777Cs#D~H?&~sW1c#e zXD@}tcoy~1JDK3J$YIhyZaG;h#2N&~mpX%kcTA9a;Ky%(%NHY=6~@#tbTTUJU~Dys z{&2>_TtFtCy8gGd+(nN;3`TvM{^x0KRx67Kg>^sAYQeb^fbEOROXB0TeayeKO8T;L zF_<&f`b1^M0i98tEm2X5Vqy*tRKC+#Yr?n%A8YYa7O>SHYa4BA5a}{= zHQ_lhJQ-*oV%kE`a<5Dj_1ftjSZPVcbP8!=jnb@|MqHgWJdg-oY|7L1CC9WDdMHEb zGfZsg#fZW^?8lM()2!~2Fd*}XbCJ3_Ir)9AK=KZbiOsQM<=A)wgx|QTxMZqnGJ2I? zF{Phj9|j@CjOn{^+RzZH>qxeJj9bP~)=#Fa<4>ikRc4KzU4s14T%&A?$PM4BtVxdz z(Y|b@AWr{uFxqB~Tr(p-a9 zB*f!6ras;n{#dU^YT+y)DX7TIg&c7VUaD?EtxYGP!WS=2x1|6H4ed(Xyuo8e>9O+> z;WNF8NdQr5Pj(94bLds&k!w^WJ91{^ijrJIViRIC6oRvqff6fUI+#9(7d*QCpdY_b$#^g)XTdP<)}|3ihK;p;6aak`QfehXf}}KKXQ|& zl3T*epCzc9|99`^PE{VL?zR$B_cZaw<@F!}4{4Qr%}UJT2@b-oiR7fm=v|cm(!UL90u&A9LV4BIq7F)7 z_p&<586f%p5(|`(sLjT8g35mwRbj$k;vrY2tRA1(v@$C6Gq$cO{v=@oN)hmFTH{C~ zJz6&R&@2QUc;uJuJxo+%3cC^YeJPt>!ZqMWOR^%*=y_70E$@%Ow z*f~{<4hHw(mSuZMhln}~!P0!{*I>ZJ5bpQKWMg8K#2LY!9giT zOnDy}dRxL{YkB#R`gzsCl_rq$Nah;FV0ZjamgpWlgEYRx%d6;`RTvad`$C>ot4EWs zA+95yallk-`?e(!)S|%dLs;lUy`y=)SdX)&8#0>BKe!5o63J)b>~hAz%J&_sVYAyY z$wt~o0jl__{GyKF*a0T4NIJOQ+SB9$B)G*}-7r-zSr-+6EFatgh))QF09>xSB$)*L zqNXh6KbDJn3Q5*-OQXh^&XFr;Df5&~B6MD+hTCoV$ZUBN!#7f(z_&FUpvBB|O#|I} zaeSI@(a`U_<`Gg{pDeyMpyZ|&4XYNR4<7C6s1t2;Xc8VTBtALkP{3<}_v$RYyv zc}0e%nu4_%jBo0S6Pallx|!yUgvWR*ACGE8{&)zhi9rac&Lnfy_=xLc%NF6%7DvZe zHRqsWw#cUKvQrOd26ujuE($xwP*qE@_j?Id zx#^&YigY6`@x*Wkhtpvl)mM-V>)td?` znep{j+mflS-v#uGujPlkbbLhh5;_<9@He)~`pos%v9Iqo&7-e?Py# zbC*?h_Ro=MWz*qK0blkjf-slpWHDLOfglR3m}q(cCWZ*0s-rP^@%)Kl>j`S{#3{wf zm2#5P8{tqXU)XQjQ?wo%yCC(nU=i*)^wrCO#=itE47ju+}Yg z9-1Ls6W<-%EsluK6XbIO?d4OPF8Q6z26BGBs%w+!&J_0xVsFGFw!T7lDhPY$0p;z+ z8vzf}jTmv5Dz`AbMW3;a74+DDBQbJ_TNQv zkiIBIPpUSs9+u-sEC_9M(-0 zD+v0^=kP75LT$@M@w-p>^Bq*emg=9!!WLhbWcsPXyAt`m16sQ+iUt#74^DEqY5TA& zas*5^Hwj9w;S$DrPJ?NB#e(b9<7obU1%_y~4(e3>2&=n3zVYTEYuQNdG69{nFSjg! zwJ;}R!3)ae;V9Sdb0`%5``BBP`%a7WBMJ=ev`atPE>+y{SL5!wQ9oR!(r!v2;I^^jh4-F0QLi8Z;-41=* zBcuQfMpmR-;@(+B>XSc1p{&3fq{0KaR3whlWR{cKVbcdG(?{ae?yj~XwXNe#E%?1t zVNUfY*i@k65%(wT(l{%K>Nlx&j&C}2GSbq>pm;|i0}9+HS+3z!wj=*O8bKvG%c}v- zEBvA%*U@|-PsfVIYg**JC+d!UXKiponaRhKX#VbFKMbCDW}sDO$goliv6-LTM9b(% zL(8#QnQl$Bxz5_=!GWav9*S?K(9~@Y?K!6+U+Cj*PRN01dw$J;{<}<)>i*GKxk>Vx zZVfK&4ZpZ_wl)k+wA>>U>0~ZAUj}|fUBO9^=20bG=5Ba=+`aMX<0Q!8SzG1VO|Kho zAPa??ak=s9sOE1`{`rH(2cH1w0Qdj|-kD)=M4A#8R_UM)$dkOCjC-zgcaZ#*>rOP% z9K}(e)tpMMBHk&d_cYW6<-PNL>Yk*qKBKsG7GK>Qvj1?-;T=L!oPqYpYe}>*oWZi) z!lD*KdD{>bJ1O!`u-MBry%{spaD@O*d)x6H_e__3vM5(%ripC!5K=yosuRP?NJn>X z>%MpwGewewo-V1+inUT6@?}y1$d#Wv@Ja+PV1V?f;PtLbpt;ML^E*}+If`Y978j3< zo>WlHfjfc4Y@mgKl6Iiq{e?VIft^TWI#k-F_Ih@8`Y67?!KU>*!Q|J^Tc^=0@ZSru zzt*!q*UBo}$6HMAbG9}&BPz1AqIv4f$~VV&LKDZO@O*|qii17{R?oe&oZjvB$;AWV z%82z+FOI^7@kIkg75JfTxrvn{aY{0Hobs4l%e--J`pIcbrosKlwSy_X{GaOC73MgJ zXiV?YEMy)|xyMx}!iTg`qfG4a$+Z-;7NSDI9EQJlx<@kd2}NID#HxJMU!N=8-`1OL zXg1o-ixi+Oq&GjdkvJ%H8d4pgh^v)5crO6cL{~SEkO6zfL^rGWfrAeXK8`{mC7ptB z2~`Mnr`rf4_pTAOhp<&V%t||iBlpI7T*bQlKyf|g<2cyz;Pa3qL#26Dv#!;X=kebP z^~TaQp5UVghG}6y>#WCbANt1)y~q1T5quhs7mfYjmOsnFx)c&4OEEx&t9?5UFW6ev z5hQC`LRrhXg9KY(GV@D)5QV@Hfx0mvi8O_Ame3wya-fvdKYd#cv4!&MJs>$+oC$xl z6~Us(L?XL_#{`=-4xz+Nki;NEVNbACL&;aFtXxP3)7cV;JXmOK$E6S%t8So?ho7T~ z1xSw-ni%e*v>o5uP@D)?b1c&dC4(Lc2;0x}xzN}4`m_-W0_T?#Fa2=`FD>Y*KC4@HJF(jQXKbejl(?Rd^06h%Pc;yCL^T8m*1f{x&th z{ts8K%+cg^%*4i?J&PcVfQ)D168J06x;fU!d7&>_jjQrehV0Q8?BncWfpAW~?q>m6 z`;}3yy*~aPcMD20&(2?$Y4a0w2^m}XuJ|v&h{4b?0^3jy3<7YI(s1Ks?sCI!dwmh!1q*iSwO|qQbWy*wN)=`HaVsP&A=7d$%&5fsiTXY#XoyT&0 zZ!3r=FfA??SIEeCix9R$=iQtQD9!?V0gQXj3w}v|W@w_MiqJ1wi3b;s+bYqk9DFp@1V7K=tfu(6Z@+ z;{8hNwGNwCvb(DjCzEAwvX00JSAG3Cc;CM6H%3~#8yYjSyRfjYXI$%aH^}Vw|5qW>AL6` zPy@T%U5u*=y552_1qq3xM1egq)N6FGXB4v}Kl_O)cjoNO`uK@rZ==M?F9(-IpRwYI zDJ7g!-AlMu9yh6EZ&61%5)v=aGSRW58(qgB&)P^(k`<{YVP~#eqV}&PA1Osq6%McBSlMf zE8Zn{eUhFixylQ5dIveznd_Rar+WD zyi-s6Du6p;M!<|p*}i0Ha>$KW8FRG8vAqgvi)z@#8!OR-EJy*CZ9R4t_fN^T9bV#fX zKLG<^1W|%zw*Gd%YLJ1HWV9)q@2`R#bi%2UEYMz`^&t|6O3*Ow)|kF&mt6)WVa#fX zWr|EdAm9Z3%f?Dmno>T9?uv}$g*l!CWSiL5IXiUsh&?RS4!!y0TTI;*bg_c_34VMt zF-wwR8ih-FQ7t9>7BU4jUlp|;M z&7!Q#sjOTI@6$XhFFt?a|9%3Q>cz^SWq4vkHW^}hP|1G8C2TCut9EKs5I3N0EO>e zhXwA6W`w44jT7^p8DA81sD4fHZnY**SdQa@i;R}8?6Oem#bU!2AxPHg><-@AM}}f+pY?7W+d_<3Ge`38CJgwlTJ1AWoZgs92AT+b8EQX?V?Mq9MW2ld!o;PG`j}Xz`{Tkty^d|J1r^WA~ zf6gcGz-UDsAMX*(w{|Tj%W4=)^*IH`YnV)`N6)=0Wu$4IoKPsrmoJD38x*Rbx<84jLVpWBU1 zXY2zJKx;=~%ySoN8X8Q?kD`G?Kwi*YJL>i6YuzeCtiVhv7@y#J)LBB}bQdk5P&xjs zldYeah?JD0UOV!bdbDlw-ol+yvh$a^?W4w(;$tt*I>s+D^e7ADp}>13>1<~^-Ex7B z)QX})#ADXQlVT0Xys6-?j(BnBRYx*=_TyK%MIQiH9ds_i1X9(E+dBIbQ% zS*gDl<9`kBGic8TXjQjPx+}0p505z&u{EsmiD3`g zLq95|h91)4Xk+_6&I!Tur@7RuoVKe<(=hNHP?f|CH5NRt5fe@)S*IOHOIbKAufYcx zknQ-tWY&A3L9K4G4L*Jrew54=*IAoZx-vE5Gv1Dk=tiH&j`#_%%}jfr{-*t_qDS!| zIVe%1ykcE743KD;efD=1w|(@P34FuI-r3n*_r9gtjq znJpIh_+WZ(pXGW8f5Sm3rWg7*BT#ikb-6yAK3UQArO8>%Fk$qKwE6MR3d!fAX6SC{ z`KrhJk(nvPe+J;S-hPo3ea_6bRuR4ki+9w4(9Ur{KQ39NxCV9Dh9PlWGov~dBfq@Dl2ef!ISgLxKjTjY?+CbwkoqKHUpNzB2TPwoE6i^ zKo4R7+3d}(rz95c4svU2_%RkUL0tR<7F2`ko!@AZR(d)pi=_k$5gggBr~jijzPp(t z=<(h5cmG_wN1nZp2MJ?s6uJ{rdH%E@0^@MT$igK_S-#goow7VtbVcUW`U>Z|N@l@4 z#r#SWq8Ve{)FLrRq%^ZP-cE6+M+DbQip^54UN)5ZJJ_LhyGj67gNAA|y9Ti&Fv7a| zzFxE?({}m=X!Z>;%Us3!wW<7vapmcRH>N-y;Xd!HJYFw6w%Q*ky)Yuj26e`wyZf(N zbL}=i=g#-``a|d)^_v#-tXnoLDf#_<@lkpy#vj(M{bnub{45JFJm}G96t1$Fo3UJc z-Zpnm8S|Uwdw6QXE$X#kHZ&7MY4Sp3U6Zn<&6ZW}1=(v=L+C4$rx(*}EGzjy)+^%3 z;v8|f^L4!LP!#D@9l_ed|E}2Bm{m>5W_OIu#||i1O4Bl|m66R5xehvkX$o?fu%+@K z!)A73wK1bJFy1U$#+GpcralWHyXoyRBUDuV+tpB`l_#hSPJJ$@YzMY&uHqN>49@ZQ z`;ps)lkyZ@+#0ZaQ=Z$x`(&AR>BI}aQj0kYE)SnQzV-TQjj)D!FKa(Av@DN6 zKrpPLU|Zqsk3pgJkW@yFMx(z!np7)WnWR{Z%&tnXNS;fRRfHurZ)uROCzsCA!FTMy zso_FNvkfRMa(%wIfbvn7)6Xi|w0t9QnA9q#6)^|!<6;n4nLa9h$o`IsJ<9TDj}wu4yN(yEDZm0Jx4QJz1Fza}+g6b;C!=&oVzBM4EOSGbo@lqnvEanYBV z#&0OElolgW-kVTW5XjVplzb=C5`so7DyQlPA-`~&9`Pw~sUK~dCNTVo=)@fp(+-Px z@<2}?mbl+fr2$|4Op>J5uN85Q2_tIJTM#yKsU~em(+i3w& zh1=)p6r>2IN{Gn&eS)d!n*8{fG#QsCy1gtWOx;#In`Q`;%(%3-M8|$0_85I{H-niXBr7CKmWdv5FbQ9phFf3w@u`Fpe2V zcrkz&bwJKDQRa4bT1aI!k5^SVXFT;gJlf23T10WV!MB(SAUNRm$Y9so@N(d?T0QSK zC7O{rsitMdt95{Z39;rXIH~#g(IxiO0Ia*Uy9&5Bq%@5so7~t#}D@YpUur5uxlQO^5 zW(>g3`<#te2C@H*I}A~Dg>Rk2P0{XiTir;(k|ULOSO=W^Q=XbL3)9v6PVjk_8s&JG zT`vTMcfLZHv)AA6M)x8Jo^W&)56OZhvLe6ZS2xR)VXynEIHTL{-{#-9&X?q(rj_-k zJ^I^MKQ5q@I-7P3MWRnvH>nQdLx~HNedc#b%z8x(J+)lIh|hipg!MVJyvu~fc34+F z1zQrT8BGvU*sJu$`G%E;Qwm^G7>GBT13g0Vfvg*FCeSwuB?8Yd^Cx1$1SU#sO>6EU zP3r1bwkpf1xbhl?+#tlN2K>_a*O}T)2CR2xta9J* z2k!Uw=6VXYjMn~5;{C=WXVW@8IbFqIMr76rVq>1x+=#AT5iHd&lsc>YgsMkR?gZuZ znHi5dv?*r}Agk8~y}r?~-W@nJV68P7^cho}n76?)r^Jnz?%GE1wzW6^s#Njq?_}KQ z?cdo|hxq5E#BC(nw3{cFc_2478%rEPl9LT+LYT^A!XX~sy^>7!Nl$4gb#C-u@;^<( ziZ_}g>wCev*)jd6iIs)FQwnS@!YPw!%p7(GJ$j^?7&yr35dg}=@13289|uJa@2974 z8f|PA51-X-5)_r}U!Rv*H;cY{ILKgK!3`QJlr5fK0~yl@nYDwAXp@PX zA4B3lHu8OW9>mDuU!x?s!3z1cq;|0x;^73p>ZM;F*q!e71IBs}Nf;)&1hux5b(1n$ zRtAUnfc7KAJ-i}@?Y*rYkH2Q_e|MHD+ih##X^>8r%Lw0>7n%E}`IHjz03I28z1RApUqUd=C08ljI2Csu#mlg-yBXIszNp1_cAcEiyt)f#nLr;oUJgKTc2c#+Q$ z7b%XHslmp#@GE1Nb{rUyI`3l^4&Rv0nOS<;y1KZ`XPx7-&4=1>iCV(LQ|s%^&TWbE zd(284wEL@|1B^@>8mql#aU`uwJr*Mqt z-0s_VHH&wAe2cL-MQ2+7YFn6C`!;698Njq*#1hr*t6+wf;IMqL`5ersV|;7x_G8TK ztL-l}0ttOpr&9J2XI>{83gV5mx;<08kqeurOnLuB#?ZK*G1(c_MyD3V6s9c6dPsDD zB#>KP=G)874{DGq_aVVc+rUb5*qVa5vGICdt+1axd&c)%1EG#EH6M4YH{bj7eu|A} z!|<~W(4Z{IWqD;g<=k}9RYmGI%)AC=DWCOdLtRbAED|*=%~fBntW_jQz{67g$)z-_ zlkrSzDu?g2yweNyv=O7*G9h7WxO&fAl|M)FtHC9>Vn=fIUF6Fep2;(alEC+{)Yki=j3ON+ozeIcjC>4 zO=~jK$GrfSM{^Nw*L>njs-jDtSKvnXk!?_y#dCUYVSMvXwJUWIoXyjH|Et5PD zJ=eU@{6NQ0o$Qu*PGz#0CyR7-ILMZi)ISZ7lnl{7b9mGDZVvNb(*Pll(YjUM%Sz;re~@y!#6^~Wdv>{<_Rolnj6BPJ$)S3a znw|L<*|i=P2Jy-7(%UuOHD;5S{II3vUkj}<@{-Jt;gOh7P;l9pU`HQhsGL&CAFYlX zr>J>!+n0XOP-W_r^R)I@mAwg=QGA?ve{@V$C^?h_9~n#=h`se>3?xMH0MsWB_;WeW zv(TbEuc)8r!iXln(m2=uoLy4{Q13n9cR}0@D=`Ti_8#JGZ%GAPPM1tSpCJDp^H!rw zu}=`wQmWx-x;5apBJ&K{$mKVu!F0H9pCydJ1Yg{-W&8dDh2+=kIqNj`W`9svLc?=~Hej)OP{MK?! zNICuv4V5*>hx*|m|7@qk_tBQ_VDshO(T-aLvCuZ;=g%DxV`K||53ybo12*rleF`Yo zK?~{+w;iDiJ!J$(A{Qs9CDVZa-1tA%hn2I93e{aG3E3i*5Sg<=-61!W`9Rh{@qRge z`{-X3zPj}j6clmU%VV7jQ!m@f$9#TV4d9<{{-DqNmx(?++GX1(^ncA9gmpD6-nSrD z|7hS3YFSH2+Y0x8TnY&INvf8ts^0=lTSb58w2@-`MEJDs!OIgo%lY4JKp8+JrME~2 z$@lP)0}bjjxF#;dK8DRsbJMY53bn&Tqh`6=B679kMcV9R2-SC*I+l^$Hr?LQJDSr0 z3B#1j`{UAhG%J)#cD}^5(Z+%RM{))2_a^{$%jr!6s>5+#Pj+jz7f5OPF-)6tyN4{1 z{HJGLCx72*Q)q5lzH$|j{RpJvIW|<+V4Rt=!0foi$IRekzqOzh=ua{H zXAZyBZDTmXUDaHwQc~F`KtsWiyx2lR1!mMufAD}&*g zvt|2nxo><``Xg+CsM-!6H}fh*Y1=0hV)0K4oY4GF1UnoW{}bo`7#!MddY+Lz(VQQE zdS&N-#}9!f+4-Z0K}nG1KQ0Bm^cag5Y@9JyT_?;mm~KAEf%ZAPsFQ+71%44%a!0cN zar&@7><`8rAwNk(zpc9HzoVf-(ZBpZHGnw(4-Ft`D_d7HXYy~-w#Kezl4hn3ATy+I z|1Ate&hsG(BrJ^N;_7T>Y=`8Tqn|o%O(lmOesz!SbuP>~;TI&X(jJ7`$a>}vr33JR z*-xgQgztSr4`}l-LdEoz97zt4e(Q8DkGOwE?-Xg>c;Y49d+IP~xpw#2o{qe&xT2zj}NT*>|f(qbPeb&>OjJ`r4a&*_&?=u}X2VvCIA;xORPgA;b6XvG+3S zhk&9fIQ`^K;PANUWm|S{rqGzGb~(K1bM<0Xo$+tD_^_$$_;$O@E~}K${F^yd>AG^` zQaj~S3IN1dKq$(Hr6XZyo081HMw8e`ZU@GNgjIZK?CuCodew*M(K(}%bV$QzaL^ZZ zKAL?qr$eFr5_RM{A*146a3UJV5K?3y>StW3kV!+RTv7_JGt?x`L;z&N)L1YP?GNmL z!%=LKoibrG*TFvK8eIZA_DaF4ppl0Ne&w6RrrmUK%AB&EO$8SWB|m|N#?Mq}EP)l! zB*9VZIXwlZchAolCjB%PsN75?PK?N`4TY7;JqGdLwDQIl2p6>qSEd zCh#l|sMeFhVt~6KMI+_$r{jbDV_=DU^=Y~&+QeF6J){F3EPY`1xgB-kL<@6N&;;k@ z^z(x{monh5r7U7i4&{Vy5P#)?xCW9b?UYw-VimQcZ(s$|KBH%XWNDU=W^ltKbFh?NM>Jl5iGiawX@EN&hGH@AW2|Mz=|w#S#*dmhTzh#S4>$ zmSPgquQoi`ut?EFYkx8GgiH~TPKX87e<{(2#jr1ZMTN=Xbq&VLkJ*!gFN*a3c!~d< zS5hkB=SzCkeYJ6X@D|YZ@9N*boM0&WL3~e8hqv|b+PD6Dr$A!3#M4f8fhqk_BIp|n zD1qmPc)*Ihkm08`e<(Ctq7QZX-wjyYeWK8V#Tgbd;i{-l-@1;WA~UZ34z+N<6f*R! zqh->;!#BJg(Y=I2CqviyIy#bnfA;f35!HoaBJ6U$+s|Gh=tV}@h9BFB*Y{hCkHE5k zGXG5bW6Iw*vuhL#tp`PZF=fEF^EPrr2K@{dsK?P|19J67*nnyXoR9E8Lmnj)xuXdb zK}5$w@WeNkWPZ4sCEu_c1V&m%QZ3Oms} zUdF+js3ZjfMKMrAT7M6fO^KdzllB33-Uf7zIVyGgAsVd^I#gI=y_(0v+`qBcxGc;; zzCrV$s9P{Gu}1{+zA#MaeK)(I2&A8^RTJQ<`^Z~N@r&EMy$MC}-3VLIHtMlD3EZFK z_TCe~Z(8p*@>iimWb=xBaY7x4TVL?h!%%sh;932YV(!m5u0YCLFvNJ5S^fe6i+8oR zXo~qEbpMvNr-nuJ!rJzs?E7XN@mqH_H{;&gg0zzs>3ag|i0TkK>%K%d;aWs_%ozL& z=t4{W*^b^C0^gfuI2};gM)y|)@pq`(!2N(#uHwdbs6+ddUI~C)3FYDM9rYe0lbT2k zLA8Fvb)CcSKMAhgXg~KI=bQ^cRSDjoDG@EA zu;Hz!xE!*Gc8}d9##<#pn$4*9J-)v@SAU)U1{B}^^SSNh!v-jE^x&oB@zRfU45J~>GJigT3 zl|8V`AX9H3fD><)-?K?)XvSL>s)IEa`dkvNVKoXPv>y6%8?jH_XPxsAT4W<0Y1UBv zRYXKL?Pz|c>~6a0U#Y^bF5xaTXLWEwk*0?tOYUrUKl#^LLnqlnRgrfIkqgK$pOc2^ z8xrRt^zldN>b~z24$)H!!XVyjLv%1%^3KqML*4CK^x{eI14DV;jd{YGEi_YRU-gmb zFS31>U9C-L!|%8B$=Y4@k7;ZK)>EQdJbx3?w0LVwPT(|D!i z_R36#wM8M|GhhR>e1#T4JBr#WgPCS#3|z~{*rI`owLUyQwD zkZnQMEm}Nf+qP}nwoci$t4`UrZQHhO+tw-F>U&?m*ZoCD-?xA4wK5}D?u@Zw&zL!K zjyc&uG-=>s63&-|x$Kt0P!6yoi==6efWxf#u5@!`8{I#BSg1aeN*E(#hZ|m!)D5Q!VCSjKO3r*7-Q5JNOqe zrxtnn-TS9r+CKlaZs6YXje)iZRpN=L-I?jP`>oiwY&R-5vRndH8(6iCBySNwdBhm$ z;1H~sZID=pF@E_Jc?lQ7={e6q39|e=5k^psJvv`kr95t98Wty_`7BnWH@#-9*r>YX zMluez{0t|dtS0hwxx5LbTxy`^kpC<3v+nkxnN2K+GD9bPT(L2EOky-l`p)(yHze9R zsh?mSff~7gm|11L5JaVZD3WA2Wr_4qm{mx^q*O+Vv??j2Ovxr|ik69rVKHI38o5Tn zG?Q>aty9DjNmEZEOuM-1H&6mejU1o<=;O=?7V*srk(uB6aH`H7^HBw2o6|Sz`Gnhh zS>hULQI}77X`+z|2TyK&eS%2);fZb)yKOGrC=e1E2qGRLQArml zgECs~u%CjYqpog|Ab(-IUt*ykzm0XCpdTiXs0DbavR-d}zqNJT{9puz&ChI3VTtHw zRQC+8gn68*vUkxK<{rNkDK2(<{=#-^|KW zC*!I!QRoaF2@3h&Y{_ZOr%XPJ}Gw=8{ z^9KiyuqKN@ilbn2Ey1w=D4$=Rwl?`sQtiCegGGZMOJnBbcsw}?6igPD8uIdF097iy zyS1Q8dmw(plGa|*wc07?b#wjn4Q z;#QwNDWo2wevj(UMkyuT%jQ+(Y-1wx1iG6lkaCDcdcKM6g)Q# zx~FiaPf^fl=o4uJI06bpbY~$atHCA9+!ma==cl5H)572#zO4h&ow@zhmV}7*Hu1zT zKGZ>>k5bEVl_Ekp#dkCnX4@cL)@Mgf_QePt?VSQ?vIXLXF8|fqd%^C{2GI1>grJC3 z7PUy@_-g${+B5YH-Sgak5U@#B{Cr0G^&T&yv({byjoHa6qVGqJZI@f1+1EbK;6hIa5z-o`m z`9MWJ)pDaK(cRUZFkv?-hT%5~C*ZZplO!b%NUCn>p1Z(#vUt6GfJZ1A>w|XZ@;?E zJu&n9vw%OJ!*lmVBd!Vf;P1z%K zy2G4KD9*YAzSn|C4yQJ7rv{6k|4D^#(IbZrB*ZW>3^Hc4m7STTT0AB8+v zT81wAk}r7jaj@-t^jvR@%*)a3Uk#X3Pq6H{O-8sh0SC%fk9jE*T7YR^7 zB3DPLk;}3JT(4VwXqC^ScoV&ds5M9mcAip0s40@jrSpNXFiPk9vEi!c{&}t#VCSUw z)g5xveX=*R<#;$<6H948qKfE|d!cwg_08$}ghV%P%kw@g#phLIR;05E1a@p#wEvL0 zMZ#^%^Z?a)9bb6vB2?pQ;ZNB?E+6V)VY-i!hQ;_UxL<=$t!*4wvxxNpqq6yQbL1=H zRMYi(tz32;W_X|{v-AEov#B*)#d%7+G{`Sq$no9bi|29dnX;*JbmHs&aoeS*-_;Jk zJMqZNj-Z0dNrMVDg5idvcg?7kP>vyNI!mGw(l?$$gt}1PpiT{%K=^F7#kk)x#@bd_ zrtrAZ0Yj|_6_(RM_q{xK;}v4W*G`sd-cgy-`esTe{AS9fr5e|9nBlc@ybkyiLMNLi zyZQ%{Ss%uQvLfIi9T;_oQYR~b-AP;K2uSaDb{k7~@4A__bop@7Re9UIx*>~ZRCPLL zwN6!?>d5+%#avUPj80`FI(G>-Hj;P2dAFCn~qtt42N+w7CqmEbsQ+Lxb4>aXLLT* z-;NJBTTwJ!EcbOdF+LmaxaY~1HS$PYugP&;CtprD;P1YgWS;w`S%KOW(VF#&Dw0Nnj^MU^UgQ5wgbRFsc5*(@G2VHM*J;%djk0t1PWHpXNHbaxCVh z)MlqU&SCtJYP5HEbW~c1-04SUS157YHHzkvsdk8vKn^OT3^%#haeOzZ*>d#e{TeEG z?;IXIRN48&eRvyFE6zsXgsoD``Px%9tkY_N)MECnKq&z(`h|Wx!_*O9u5maNF)Xg2 zv&Bd#SY5e~so`nRtf?MmHTC_K#pQcPVc>ouW6*UQWeCUnIxD2-b4!jk`c3fd5N)SN zf{HlVlgjr!u%hez_Nc*1XSPjoIoJ72R4o1=2@=qE+JJSHR4)%y(ZpS*DUz^sI`jwb zm#CFV<&;DhD^oe@L^X#%?S^nPOw>IFQCp1;!?r;k_SOk2CEU%&*+!4&$tuD1=s?T1 zZ%>1zkcpB{Qum&`t?O6Phv(bQ$;_=S_nX(Q+D!M`CR7dT{Qw>dMT zkd2a=JEDG6>V5}ffuI2(Hz!yEdE>HO9a>vO=P-|L=8TkeI3R`x12WA7w)(U&Zr#pA zsz&ENXj4#oHF%#xG`g?H^y(4TZ8y7>PuCsz_cOK;Jk7VGnd?ut*6(H89qB)=crw^! zy6XvwtToZaE>1qr+0owCDU}daHa1p0I3V3;j++cRh_uY)x^rjDNvW5eyY?A4`2{*O zO2QR@5=-*Z%O7aRoo7vKa-R;YQ^w}Faae}Liq~{68=17zxa+%juuF$M&Np3S&>C6a z%f_CPFe@qR;%Kh5Tz3~AFiJU>8`Gq1ShEv?V5s@wRyC^l*u6m*G@!*4DLD56zT ztG%?HS0=pQA6`oa8n(N}h-q@_wCUIgArUy(2!xB-4$SBkRJxpLd=E`m9g)NFobP2~ zJqwr2koOBC4<&7KHQb-0BgNHdocG>u*VCtlQJdLiz#}izoP%91K8WAIK_Gh`|B<|5 z{}=M+zj2+69RH)7dfbdfAU*u>je9u9HEy!7nkz*pzGk1$w|oa&?wA=cOE5ZIw>Lw> zmLQzOE6Ia5Q`(-f5{szk?u|_{jR$(80&I%AGh*I|0v75}ZsVgXWJf0Fgxi|(RkK?r zCetMK1i&j;w8x!IfKc8sZcJnkN04j=0&Gh?594!mt`TE6&rirM@>1Wq$>HoNZ#F zt2vAWGZVPwMU+7#$NACnA1P*^FuiVI&uVsvyom+Xkwb{8N7?cw5-*AB$s{4i9g3-m z2aA(8}?<)%ZDH`j8v91%udG~`x_tn^43lL4Bjz0c zg84rQGe!=^|4W8>Mg|7fM1P~vpR!hl zFTO_jD$mLY^WzJw?#T^Crkj=dqgM!IjSUW)ed-e~O3P51#OHktg-YNUL?VS2u_$4| zU^JPGqQ6+5R1NOPk}Wu%YesO!;hq)qM-f~ z+qCE7*90_5OiDsd&)$OpxC21fXwGjYFvq9>Vc+t#7Ew{i^ADQ&HL3xSjS>Xoa}S6C zVh85eRc|LU7HW8w1;7InYvHRRV@(fS1Q52g^0`Ffb8)gD1^C4baD}6SebLCqCO4&X zXcw89p7lMrit&IdGljcncgP0_;Bjeh#?M_W2ml75Y6W(SVebd#kBi}#i!~9_h(`)k zt4)KJn*-Pv1F~SqX-`1IOB@3*WCj3@41&!VivbNJJ~y&^w0q>a{FmG=qsW%knUBh& zJ7f$Vv1Kf(oiDQo*$zmv`nN$FLC=e8(??}92u-V~NnF(-(2G&2HCP_cp=&NZcny>d zfai7ep(FK4F?v4-5>yG$5&K^=Qqq`olMuC-KgO0)wK+%eLI8_&-Lq=uGY97HzG2U~ z;m^4V&$|FueM=pVh!UQ)?|@m>{I@s!w~+9cC~gG)ydn>Q3;h6625XvG%^+lR0jf^* z+8+$;!u{sj25UwRx2A}?!&*X{7|@XBW+MWfF~IDSNcu#cb`Z4C4wTJEe5wVZ8zbIT zI)kE&>C*ekmqQ?zLR@Om1LA^Q$!1w@fJ_QOET@CEcP!h(n%Bl%sv5L_;jhPL6@7A&Wlgl5}Ica)Ux87BO~}1O^Qj#sc5^?J?5O8!ThYqT8mQ#348I(SoxjzK+2vCu6pg-7z0p)jPsLvNCaoND!D zYxA^q>+?jk3CZCzlArs8=4Gj5PZ3asK6eyldYSk*s3TIJ`4d$e5&1t!954H6gW z#^(|CpQ7PW&R+5h$;;6%VxC5-A_^!g3~U*aGeidf7Y$$F<=`WV39^NVF@xQ3IqYEW9szLx2k5;*P0?Y0lb*{5 zIv^LoE6E2*F6Kg_kPF~S%12=)h7`IK8e%KP{*4X#M8M)Y&I2hb6#|7+hzhGUWE9oM zyd)O}{U8@2&=&UyG zOeOyZbM=myQX$a3))0|W9`GG_+d_~@M=quXmxO$n9U#-EL#Bh|-aj0cFRGBSm2pXL0BC~-7IQOCsPu#Tj`rDp6p zDwEAf5mAq8vCTTue2tVokCnt=o#9k%wQp;TrdPhMo<8{SblTb~4WHF+mc83urhf{i z;kRO577+#B&?ACwPr4<{6{1J6lGU&WnGKnYhs{KMvwvl{Va`N~5(!0j`5jHn)Gbvi z*dz~JGDajBQz1If0-pf$YK%!ICrRspxAV?*EGFKaskTUor3=q*RY%^z1)!E<%Va^Q z@l~7s9k?5iVp^$jn9@+HJLt{+Ecq(-mdjqO*4e;Zj%#Q!f4^44DQi$msm|QUek)<~ zb=z~ls*tlefBJP=!y8FYw8GWg`_bv%)HWnNl_)~K7wGp#v0zNupq!!0D4%q@H&TK5 zPYBEXSD)|sS^L3RLc7=K_JQD&C)r0(gr9zBF1HrG&>9xshc58_$w7tjXFpJNk4lQ3jK8DsI>C$#^KGKmqC8L z-9R`E*LomD@10tH3(5U0D~aep`Zay~Q5W_6J!$+n>j^AZiw2~vO;7)ez&PZq4M*qT z<}tiZQ4{&=RRQa)=Yb=pbsD=>oOb`6J|HkukA+BX{krfzcpP&TLQvf>R+tz}q@=uQ z57D(uw83cW_`G?{4_PoM~k_sJci8Qagv>jiSI=`+AU& z2-hthO_Q)@#iOkImznBs%MqC?mzOB~yV%-cS1PUMDvQng;9K1d>ME&=Px<$kx{37^ zBb+jPmBZ01w3z1ZCxwyZfUVtHnpG(@NZ>s5W4DC0E_62%&05MhQjT#17J)44qBx#L+xovv#=O zPVtaa_;&e14616qyrox3S-Lz3QL(YSbIoY*>GkHDIQAy6buhTmMSBH-5j!mFpu z(ZlNZD*cb}G5rgC|F3(;^n(@Me*=?&o{jO}(7a0Au>BD&4*R}ut~2)X;#dK9xlKzK znJb#N?vG0LtqE`P@W^{mNj?R`bvCTNih-)oVB3!6#?wmG@;| ze0RJ;vxkrNvG?_5KU^;(6=(#6dxC>48Q)e|&nrYm=EA&yILkQ=5x@f8!-X!|mkdY+ z`U1MloBiGT_hA{rj+qc4h9u-6BFxY3eCjculoqZn7 z|MKB}!RqV`QqGfo{RSX=b5Q6O3+sd|P00bI4Uek~B5TUu9n_uwR~DT9PaD1&8vb|F zb-Ngou6!Bjw-d9K4Qt5pYBO6-Pm}4u5WDG0l8_1&AyJ3X241Tq)V0!)+!E)>PzBpL zKH8#=Xl?9Gj)hu=*vOst-(rY=$Z zmaLb^Ty_}s6gsqOloCJAvK?%4l3j|I#F?i=PmuA$C<5b!C^+Y@K|MF>Ioi(i3JV~# zq%X#RdIpu!7+E&4o{X*o$SE~cTKMh1%OVk4UP&l$=;QpH2@)kt7<)9>XHLhc3&(9ncpF^)X#8Sj}^Gx)3Up$_T;5Da5KCgym3Pn$m_8gh}Q zskChG01D~d@b6_t%sh|F3fq76$8rWKoYG*qs|^^8r{5u3Zb zqp%x9=528(u=`HZ3HU`z&|sb(&L*2E!S_KayNR zxwG~uosuE*JBODCFdR6~~0T?>u zwti_vk?ML(y*SGjb0-remBU{uy&j^c`hL2Cm4w6a5(dH$3lgay62BmIGgQ;nd;7Tv zFFOpZSP@A3!4(9F)uX2*&ou&MLdos_LhKbh(Qf%3IaRWIO3?EM`UKZ;1WgGh*C!?m zf}W5{C!)(4D8)>r3qIoO$FFh^!}BofFUTg6KU=TGgHFtGd`2S{r;yH)-h6J~9PnbB zCFFnF)~*j6x#M#g~GYS_b>bo(Brdxmy+WJ{ub}En56e`fJmt&jiBE>49mi@+dlR# z-(XCUuiLIa6INLtw8(Kj{NaxJ)-CEtX3mZ0IWF|-u1kdAl(OIDgKK$Bp zwLrfbD9rcqR=~%aV^-<9fl~YOOs}_;6mJWbk3xpZzD-ktu9GkF0T3~^mH3Z{vHc5T z|Fqo<%uE~{tpDA5voJINJ3n%@oe=xo*;`R`QkL1uoRmw8#7pstQD8VYC~(Y1x}q#>PtMTC*z-ggNm_k?#XyB_GeH8 zXb~K~(052+;Ui8A7>pvG)yCf?L*u@%VgE;pd%XGl{${Vo)X>4y&>)0swK^C&Y9b6d zw^kG|(DStR!Ywh_Eg>AW+;kje`?<8^l__2hKR2~pl~H}q=$Rz`lQz4{>umVQvPS!3 zk`IxjTiob#*Wuv|t5G;4ELB4IY(lQ{d!CN=Yfdh7kxF>@JgMn;$oKDEkS%;2AAWuv zmD+MTBG$zBqYn(>y5rIMl&Rq$EW#GAzz;W`-MVd2Eyw*mA`F~E;PE0>!;;fw{|FYg zLux>a&?d)PQO1N*^(dz6E(B<|};ZCA1lXPEn|k7>}HHkO&SW2~UK{Gsa7-DI$!x<`ip#B(YQL z17AG4m;R@RXwF3R1&N{tv}O)hw6EtEpFW?G$)i!tH7#?xXCAr!$K3ObIa2mM>z|BDI=~NAtOXy|~4TAm*_>`*dWBK&=cT#p%Ks z=}dRyy_}t-9xkF}Q5ncBHNtVi?s{v#8&?+&S3HUa*u z?FK^0SQ*MPWVjUzH=_hu)*%U^sC^^(c;RA~F^Ca0h4Nf7lGTDa1d1f8~%f-ZC6r*KPOKeQpu{M!p37NfJQvf2Eer08TCSAa?GK~Z;Saahz3yhNL+-Wk>?2#fX?8#-tHAz_PWTs* zaEY09{=FDDrR-uZpws?&&Zeb}*NIZq2RGoEJRUwH2ie_@BL^L>AhHBl?A2>I-kW0@ z)4*-L7^AQdJ1nLV9Y;`9ZApH!5nl9a}JbtRUr+ErN8 z2!8~>l~hlI9$qA>QPpND&OvL9h&5st7Fp+_Dtd7h^WnNF=he(~RZ`l2i;?4~lE6C# zcqJ!_+F)qZGY|fLa7^1c`btz%K~-pXO_>`%X;%%bik;Ja4BO839%6r=Dqe}Cnft+(iDs1Q}j)j{1K3pq7`j_9jEhnCnT{75r@N2DcGJt%ot{H@ilnflq#Q-iQ++R z=hiHoj1{Kb#A0+RgprkEUdSo1m}DqN*?{nQQLJr{mReYW@KrvJl$Nhzlv8@(sh}vR zBLo@8z5Na@ug@+nw|Y@fK}~b$kx-GCkymlBE+5ubFw(^ik1$iNE0e6Nm$o8$-IT&8 z55LMGDH~@_g6;m>q+!P9ZlCwgif#OmurFpqzTzwNl=N+22auczMut?660*fS=RE^J- zic9U|-xW!{j~9<}Q)!y$m?)HpfT21o)hgI};Z246JCKK$S~pt62wX3>9CJ|@>}=#7 zf&9Lhvyn&RdJ37(#)xMX#dFz-@#|HB5=M+Pk^}_~NiewLXdG;b=j6S^(b2qtgSNQ4 z%w!CV8TXE+zPLG}gS0q>s+P=JOHD~RVn@AZgWKpw5sj6!{C`igg2&uiF;*=oTe6M4z z+{l<9SP-MuxFkq)#REuO-Pqcn)ue+QfFn~5*dalJ=5wW=bP}RZK0@4Zl!&N)fb8#9QijU=8S2@ z>2T$`3*W`{EGFRXfTmj?^fB@KgQjjh8De-{IBSJZp#Gmjn*s9(zZ%p_Sdj@;%I zKb0vBEE%ln;~1O5icytb((ILRvZP52hx=pAN5qS>`d&^u9#Q5;i-njq&sw;>eFqCZ zxg6U*uX}sH@(ku47~k1Ol;khI9CAhaz|0WT;FQSEpAgh~Dax>Q%VrO4j0p`xC2pO3FVun&enT zjSbaVgMV2qq(%=(5HS6`AtLXv{ltP#W|kbf2FiTzcCxr`%$Q50)X6g%9YyRH?~!R9#L1cARI;6NDstn)MD?k0k-P7Y zM1L8_lyi}o#gtG^euuZ&Sa`UwvT(DrbEJ(U6wNmq7X?4xvY@l;;m^%%+$KU z^>dW7CB-}@_jx{)KG!xHyOou*X5(PtJTa~xGd{;Ie!7TPXxiJ!Pdcr?y16o9%{bu= zY@J+4R_%D#`JGn9fFKUXYf|?rc@Y(w~ zI8nW5a^-EV?`)*^eU^U0aV#;F%gS84SXC&P+~2N($1{x2a?GCe$Nee9-k*Yu%TNC~~jcTAwV1OA518(nd*1)w(}MRkgf!>Oe4o zO*%>5aax?>^I)rK87V3|!pxyKf(oJ;Asaa82r0Rq$ljWK)|P#^dLDuu`*Mg+y8+e2MXNv}og`c?jto}K zp3A}7qVB0MKXCuXg_8e7uLgnCf3W-t+Hi3_w%y$2MRe#^6eYg2DbLA~GNTB^ z!uoWp@rj;hkznp6$*eG6Ei#-!L$P~6cs?R7{ELx@5xvWZG2)2pVt&yewX<)TOO#}X zrcU-(g_EV5=h1eRnyMvTno*rsYxT-SLchFwJ5d&e`^)fwV3gFCQ%DvCOFsj}`@;2* zON3goMZOV{Ug?S)bkb0$o#nRXc7^Nw*>jY+PxGO3x<#FWg)3MvI&3x%gYt1b-^RTO zW9Xu*Ua!LA&b zq^&d9EQ&02${89bN>iza6APPFhn6kgJr_#Jx;2aN1Eio%HM5ucP9(B(t?5*kjm~*1 zmU~_Oc3f0kO3wuw&vnaoGTt(oHB0M-R=B?>MP$^>nm0?k07rR7He6$0+xp zajG@0o_dQ4Z{}BKWy2IZHlEhg=h}Csn^H0uhFgDKY|Df3m_E>XSG>QB!l>E`x~ycFPqy(}RS}b}vx!2Mu2}h> zhpIMpWmjWGZ}{(4`dOWO8nqd;P~D2o!bo}$yllFMsbJ)&pW0iyaJR)X5p>(Px@u2p zRgAh-)E=)FKL-a*S*`k)56xcZ`Z*&yZ4wA=uU~aP z?>{8Foa#K2*E9NbT1ZT;mjz!lcD1YIZy`0et?kELwPaH0lGdwiHh4F$mKL_w1R^C_ z59Xj_tghvg+1*Q0)#E18T*IZdDO_AZ^|p*(%Rsye&?W?l1EFDSl@mvlS~npY!h zT{Wk!bDkXR!>~k1;8GO3E%FVse5=<`v+Nv~f4_OPAjiD9{_(R(VwG~`+DlVhh1*}4xX#+b$(l(#=RThaE$Vaj6{YTC zqgeKontC_++&=1D(-hmR< zwL-u-WT>?N67g!oI0(SrOZ4Sf^LU(jdoq|D4UsTd(aO@K_t@3UL847(o!zl!o6@h= z?t1NAHqms_x*w74A>x%_cihuYH1tRPKL4V>BaFePYw^AAZ>C%OOh}4n_hGwQhIX2P zZUP&o!H#u%exoilS({78nXWbKfIInzVS#TccMG}C9&Ob!_l7ate83i;M(4I3FiQ%R z&sE8^*XzqBYGmVz z^UuERYxKCfE$4qW|M%6eh3@XgxZ$cAAV{DhO?Bl*=!EeYIb1kn7E}kv@!%t%h*tX#e=2pRYUM-12RZar2M-&Q4z?W z>HG0`-5K-I6%W2dMFnEA0=Pmr|B6S)w9M60;(MF|J(7-|fyzoGE7< zE&Wu!UKqw0=&ruHIShHjgs)}n^7_E0BX$g&#wcrR;aJssX@QX9R!s6QHc)G7O?-kx znmSm_z}s3$^`j3UT}m9{e?*_*U(o+2LC(m;#QJ|Z-DG29X8HHiO>Iv%C6T{ArpJeZ zbj*oTP!v-VLiw@Df(TI7MQ2eFDCSaqAQ8lkL8$(ynjoDBn<50d{K>|kYW7>sXwFFs zsB6g1`o>)Z;1+1gAdr9jp#HS#^8fakBvw{`db!lwD0#mnaqmgH@iaZo;Bf5DBrO31 z{7vWw6p4|M{yh5n*#+Q$?dR(CW#&3}Z>|SC-Nc`Qa>V4-RM_i*j_(7olC+~x(_L%+ zO~l`bH9M23$mKj7YwE%7Uu_E*x2~+GL*vm88B5MEzIgUfqRhi;kHc>ZbbC@Bj`5Ja zTDJnT84F5`SwZQIQgR~qg^7OwsI8}>au$JuoCi<{&7V__@$|qM5D6H$0C@EJnC_6n zGN%bQdqdlOJas!&!2%u00TT-Xa4x+QIX>Bd^!4l10??zmxwty}WkAx;2*UU3a(sP< z1@{xXb`m&WQK0v?Fi1Q92!{bbK)i&WAZl|z03?!jE8gsoNRc2I03ek8Q1W~mooRRQml~KBG_zc(oA#;8G~|S* zra7y`;}X8E;+$Dete)2I%k~E)8G2OU(?wQF!-z4))8C6#%P>Hp9EEG1se*=4oS0>5 zrSL~PWQv@eazPXAo9)^!eL)6{qx6x??fk8w()Opis1;$?xd!++P6oWc4y#KJW4GZ8 zE3|d;lwcWz(G!J0c%nSE2*!2ufak(02|p2Tn7tF6c`r;Bdg?`UW&~Z9->4VbDjzg} z!PGm{J65Z7DnTHp%d8$aQebz4R9GWe&;!VzF*9K6DtSBxomVbknlBcr0;*s~SpHT= z=wj)0+wYxj6lc5Z0ZTo3_tG zj%nC_- zbGdOxnu9l!@w?<$=^(Upa)l0o0*shbScRl#)+W|csWn$P-=xs%#hwsLaRKZn;Ac4=g^q51{28P}wll zYT(K!#h@WhdL6DU0qol=&Gj%OHvkXmE)BH+gk-J|uWD?z7mwl{7ySq9211CI9UW^v zSlG!(EkML7m>WO@d=&9vE;x%@>gM1{F7$hn9zG76KB>izp5u+ki{l$OTY$+kB1eqa zBMmzvR9Fji}auwppmp%!(|d z42eyrQCd%z`NIp^!<|~}7E@5?a$1I9gGNst@ z?D~-AG}s?KMC+EUa>Vpd%Y&{fh4!~C`G7kury&9^N=4L)z275YnGrOG-1|J{U*ZfH zqId>)UOMm^r1#JSt6T*qu=lR}&ik(Jmmt+`3=j5O_Uzsrapo{G$}*ytIGsbK zbTP8Iku!m2L3dU6on0Xyn*nI<$dfyoFcKkghPEW-xQ;R4LxuWqD>AMzg>)gQv#Uqq z3WJ8#3d!pDib$37M7`7N6`oQ)k3R3c8?^0?TN=58mjZNGLjv5Pnmgj<0t~KO1m1oh zY+_DC3C@IRVG>ow=uMGp!k74vu>~U<_vFf-nPnYfv588?Rt`NOAJcWX}qqUoiAHU9MkF-m`XG0nt$P)ZO#$`aOIAw&sw!VgaD)<)QJsQiI*q!%S;o z@nXpl zPpuo{r}HOH9on<6^G(zIMe5O)vz`ozR)tl^&eyz}&PX- zh3qMb5+%m5k0g#l9fZ|>wnDDzczHQ_J$iVHzUHml^po;NKpx3ueXnLx2vQS^4ej zU2hpS^SmMtR)APyrBju9^awlBA8QUdYYI(1UR$f?pc?s_N!(okmzSI!LMsmeT{j?D|aZLow)` zsBV)f^^Ll%CaG5TZc)qB8GxexW*v_WhY1}K1&JFFHDuk_?~^gY#0XJQk6Lnrj*_Q` zTRIKaqDQ(h=;}`V#h|j1ro0cH+v%7Gg7k`47cMs>-HlDr2?}@HfiS3vJ*-$s5<$Be zq)EI_bVr~8%TF3q94m31t@W9b48VwM7p)1m_9?LLp3UB|L-&H$; zxU%19GgK(mpUw`QXw3w=-Hyq6cR+*Y_~N-B^*c;U9Hji!DYB2sZ8$ezW_J)mgy_Z) z_*#&JX78!;UXVrgH^um&sjOoyh*YA+I9(!>8+eQX3GRrJ+pih@Ebf=Rc4r0etxJt2 z7A8~a9&b(OrA3OQ1hRHp48Cfo$tjNNOMNyYV-skcc;44`0drum!e==Nm*)%5D;8K! zJgs<@CgNvV`j>MIyp;mamg+hkX@;zV0zx8A3>c5BesTc^f9qDYC2U<8`&H3sX$0pC zxh3rG320rJr?T~1DvtE?B<3f{;)xOqrLUjF^b9)I(gunRu}SfjsH@7>p4~Dq@eo5c z8Ra~gwhyK25E{5N6B9-poIA&Lno2*vjo(eFw-l;IGaJ04fI@zITtb`>JQ~WarE4rK z$%siv_+aH8M=>_LZ`A}tY=a&Lim4Vm$FCnLD?vN!v33vDnBDA!;6Ho`+6`G%x~dav z+pNh$F@`xt)grU}dt%8TGyV@ZM`ZEL0<;5qljh_vxN?}W3}84=nbb>XQI%CnFJqgi zH*SMST3MRucP zpv=lM?yRp?q*SD}Z=ysvvhj zl{d+{Z~IXQt%`Wcn6j-c_O8r^uDI;KCZX!B=C@>Y2a|_;&o?hI?{_FKXUbOT@zsey zyQk|;{!Xogla=Tu61Q&FOu#HOc#}U|4xLGe!_0}dY6=Jb_&pmmMlq&3rFRLtq$17A z)}M6#Xtqejok8c`9)pDYO(Lh|STmI#->LgGw5h|yxt`5XjH?4x&d5A}@NKUa{1Iem z9W;crX(7;yrMuBTPh~;y9m}fMTIf9G$ixJbQko`FgPNhXEQ*TanpnKbGE|+C(N1Va zkJ=%Gnh(1oy&XsJD6C%ftzUr8N1`e5B-CJ+su}z+?s1IrMAaVwS=+BDV?WzJ58=;0 zh|=93f9qG!KVD)%?yR-M4Rf%G*hb3GBbe>g?8wbqm_&TQ9@11~m1^@>esrx!2SD0OV~LY-;^BggbpqON3D| z-nt(NT$$N#O=>HBVw2y9fagXahIRO?&O9NDwPH%=OhUqDls~a)F(V~@lRs|bH&H|c zmbTH|D#W!3QZ6m6Gn=B|LuXrdFt3q)U55s!_Pk_}3c8303JP+3KcXuUi{wv)Cg^LC zTHG%UIygk}jJx=#TyAk8RwXn15bROV@cUfE`&QaIl*FI%G#Pw@-K>+W`P^oR*-`hF zAZO4Lz-GE-8z^zt<95dF!E;s?Hu(LEsn_GH;(pS9iuH*zQn5amYlPDS26tl57}+MW zCHtlM7{hAcHmn371v)B;V#t{1h7NpE`&uEci}goIO~P-k z=tX7D^XlXZ>=%hg;x?%edywlMWFd32N>M359mVw$_)3io9AztU zka?0tIEkl>-~9Q{ZbZR6nv^UGpZ7*J|ACBJADU3hgPEqX*II&%`MowMLB#qs6F+K9 zd?!lC1((W5wJz`Au{Rq#5P30yvw zOdxv;z2+9^=FXDk9e7OlV!l{?c2zKLoj&bTa7?GRl^{e#{=e9J3#dAlZEci<;O>^- z1a}th?gR-I++7#$!QCZjaCi6M4#6Q@=Kx)nV^_$ zE5s5PG!PpDbLJsnO+bbzXH2m9{QXPtf*EG%`|yN-6;{DRvEaNdDJYt$u-<_O`W3Je z$^it&s)n62Y1Ot3G2c~gL46P?x@Yz(;UemR4N&Panu zuJ)Qe6x`RphbX>B7e2I$6f-cF2GLyg^+gOh4FIbVPW3fwC3|WNK31r?25&!xfo(XF zXxj%6SPw^!oj18 zbYQ^4FF)k!{k5GW09o|}eIGI00m|^MqNhhM<&J$~#zGGkIy>z1OU$-U(Y-r#rW`17 zld(bm{+1R+J6hN_!a`dx_tXB zJ}B1*mahCk^cj!!jiF1Znw0WVJ@mBtl^#ZLsIQ&i>B2Jk> zM<1h)ER@m`2$#lp`fE2XJ|9o8p+Lbc$*#n>;&}+|IqmE#w99CV5z_#vJ+c|cKca>s8~JBb$IoffNpV{W5bV8id5u$yxuybl8`^go`Vs{8 zT=MpMI~wqx?N_tx<%PEeGwpl8jnPpS*25p~)II`hhvw@udfKCJw245dYhKAW)WJ_$ zYue%uYTaIVr(D5&J~wE=DuNMd?V2Dr0k;rnISvKjas!Pkl*Al0wS9+^=R0OM6uIq&lC5Nh~OywXq8fSf# zka?^Ux&+~v0yx+vXjS>^btsoUJ_6y;b0(f!k9JO=-kT`EO5jRlg|rDGWfwEGrGFa; zcQGdy%U_|S2QMQ?B_qfx(@C1_2f+eEZi;%rlo~q)86vhH1U?T~w!Fe~zFF0sR; zp>Au*Eja?>nbUB=nAa-#1zZ{f?9L>$WbDX*kR}tpMue zj(D8~X_`neLIN{PAWa|Y$2g0M*D}uYRUZ(ja>mah{RllgeRIilgEtSSK1Z{tYuUbn zF|DysBCF-l4chcCjcNLdLRySRdktILVJFuKJ#+{&A&+CXsEnl)MBS^fmZXF8siHe3 zgJFKH2o84uQp&N@GNA<7yuzfqgNbm}FqB#8Adz8tf=vL?ObVXLpw;lC!FE?bVN;T| zgrxyNAAS~Z0)7CpxI=Hpk^!#?M?d_nzOjBBW2XtrUU*0}uI>TmMk!r>LwJ6Q)-qNu zR=tZrv>_UXxR4X4yk1TNin@xjI9%UWjG(1G2P}E6eBubnOi5YtXVGK&Fkk!PZ3-*SBOL?MLPOEk=rd_HYOjr!@OW$F>2*&e&j}XVL@za6Z@szsIr@Yr|%LS2hYPC z6~_m+8wfGHx0En25Vr`yFfoFzL;?z^;`9&= z<5Tu0#lm3+P6@@l{1$2Vu+3TwC09!bt-}tkqO~53#&7SAV7%HkPh{!JQNO7ax>&^D zsyEVVTlUl3!#I7iG5&Uj_fGlUo)v}t`z&NRA3l5W*qy%Hef4D>8C2j+${y&W5N^!@-f-0oXk9F&yptK`!3Mf|*P zx^_s$>g&e>hKPexe17^ni0L{~DBlQuyfo~N<21CnI3XyY(A;H!H#ge=7UMeQ zl9ZsTDp@<%IdKvwh*v4vrZVO7y`-E(R>7$-(q>MUT+ktiL)&$F3?{MDT%KSiGeMSp zpN>`{C8)=)u2i-4K$$MTdN^(JljfL0G&mgI7lr7Ta8kO3;=ca5l}ailU7aRPxv`8( zs5sHqj63JFiLRIIM8_zG!a)&?f-nLtN6s5Y?#3Goo&EHm(Kt_^{jK>u9I?h^h@ofQ zxCoOZXNVaGGwuwJb@^d?;%g#zjS*pL-f#d#X!ruHb_T~Xxth+7$HA9wu7iY}Ks;;X zX&EAN-KWRna6GqaN#mgzA|Jb#8P2Q4gMc`d%SvW7c%Q{RB;aZ|qo2la&cNXlu8@B}%~kl^Ku9{e~S>E)}$e#?gKjSfP9 zB=+|TXSvwc)<;&joozq_ziDSsUAx5YfAR;yuRV1lYxK2uz6-{|9&Q)R>!#5dYwtu5 z-`3W}4mc@~3eS9C(dhr4AMGpciQCw}mLDBR10p-K1%E?aH`@i>r4RPf0yumDg{Z|0(F8&Ot93C(1T9badZ|=I0=~CL z;Ok;NtyT{O4GZA}BD7RDD8qted>`kN1|vVq>hToa7$^CffpCt#uz+y3^l*52r<`XJ&~nsu=u>ej<%pq2#;2wPLZEiCk#iMP$$rsC*Z0f{tsXY zxtiIGJgSC+tpxU+ z60QWUtP!;#$%(t8MxJ=6`sTV5q<1p4A+>igwPDGv%eP^*_t~{!d3`Cr(c<>SctCqV zY2R{tp3vQJtH5kubvr5P-af%z@!hTrIqt|fWnb~dB5ey=Ipa|cB)`EoagI3_08if_ z$VM^0=`-n6e9$lHn|vT?@mo1ZsuWn$K7j%eeRK}+3Nm_#_6iC|)$UaX5ovW)yR&Ka z*t@fVsBF>Fx0@?*ytbN8*;>9htpi&6o%G>mPBm}1SlZyqvwfbxt;OBZ!XF5n;bdAM zto3=UJCs|xKb#=4o?u#ZX*dA((=J+k}cp9(UB8ryw(h_t_}%oy11 z^NgE}1WC*Con@zj=DngOk!m+D=2bQ>gzr7SSo+5?kYAgf zBCim$yCkhoCq>NMejG6#_)0Y7<>!6`3mc%Hpv2wbn116WTz{y$u{^80iCAeL1W*Erd~&Y8Pp-E%QJ&%4xWOvx2MokYH3ZPA z`Jougm6&$8q(l}vHYfEvms`1NGt-6S{m^zJV7~|CzmZkJ66IzF{m^z}PCaVnWiG3K z)^-yZBvhUC=?Xpt^>nLL6P}ngQv}9&EYn|WJyG&r2YsDsyv?obSj7$RF)$H*>yMlT z&H>-`m67!N*t4N`!1Gggj!AmioBlc%tKz#kEbZIl7l!q5QFaKKAJJdQ-SkrisA@dx zyGdkPtNgOcer3CviGh`ch5f(RcVlDX__OWv!zDPI*Vi5dCo5hnV+*ZpU%+kLR2Sd$ zb0LEvA)#gspz(Xtzkxyh3=|7Si6EqqOc36)98!kmQXXk!DdbTkm(8CX0PfACOZ34N z2MfGsj(@An^=uP#vT4%MLM}}@Um=a%L9frzI9cOyh08m~fNQi%(87~%#qHqy>gnm& z>#5#bI0hS~F-)A8vz4XkIK%U7DH5%+9A$iPPk+Rm?|KC^O&opl6tojRZJcqHlQ_Q} z>__#i@^<@8D6-XaSKBL4946?1&$Hlm3ZR~4OKgN9zm_Ss;&$69dUp03miBFY4M1b#5iBP&@eI%ywRn%e#hTBK zrrItO#(4UQN2Ry^(0MCp~iWLgmNuQmE zaxM)LCrlLG<%~Xge;?UJrgtNGSdLcCoL#>r)iwcwMPM|061i_auv}O?cXdjkKYxE1 zS>HZ*QSYhXgy*t#&Bx2~utESt1mS#2L*TtXop%6%pqQW5>KDAmL9iruuqbMzKqm~- z=SeMt36r#&1gmS0G@7Oqah(u4rU>hjCA;DC@LP_e^sKsNO1{(lDcae|3)AJ!?w#tx z^nHll?GDLHGmr}_(L#}X3S+%~^6ca3@O@EqK3uROKwUq7rp-KrkTq_TKaj`apnsOz^(+Rh|~oGkEqlIJdbP! zapcwxm1g$!MC@~%u*#0<*$(%c>`7oqgo1BGtl0SlMd>&dkBnSE28f~5@p@4T|1g^o zH`|uVDgX9->!Qu<-e<7v;4$9p$~`yD^1$49e|>-czPEVZt?%2sy?*Y&nF&`j%bMZX zQK`|`fu%9l(BZ+Z9i^L@9OZ|F$hoL2 ztNyR9j#ef-T>Hm^%ZKI0#UR(K6CHq?Nky8+?DLjkc652Owwig~@#+gdS93dGeA*Gc zVgB91`~b+zF{?aniK{C84P~kE5E*^Sv88cfjr1{iTV3(BPsg$&>$5#$o?`M#epX9k zsEI=hucEX=srh;7yu_p9U5W9><{PDCIWo8F{HqM7n36PuQ}qLlOVygg^iaTJfM)gR z0AM$DItq8xbt6@cd9)C)`PzP0BS)7d4ia#Y>?m6Tvt1ML^~6s^R}$>IsSp#Wj@%DZnFYM87y+`|wY%hZc$K9Y1gcDuh zRaZ#_ZEw7X7xU~QD!)KDS0T8G(jmWIYhF>VdP4a|5Y#I<<>BamUs)PlFSDFV9q(EM zM*zB~_uRqaz45thzdomLdGZ)*zvda^xgVaCx@tO7A{?fj_4QYHo7ij!GGTA$aXX+bjFH)ZG^KReg;YsLp{^N9Jb!<*p#)i z@U%_gm&7xF_uh48U`!hKho`X5{tL!d?oW7LJQ~#gaGkf)GNP+YmgYFw(=wUW!-ua6 zknsy7UzS=)rU9l)OUcxirZ|UYx(qWB)-1IF8%4^~#R)oapAdSnJVeXP=$VPr#-%W; z)r|BtleqBcmJRmtTmh5wdTBuA!?=^X#*{!_r#4WG29-ktF+(?v%1-fK8{+E;JX@{G?<~v83?3HUNfw=R4#wO{UD|gwVT+7kQXWIpY@BBv zbFUcRy0;o?p3&b*U51<0PG2ae;8@p2n*x-(AbFV-j7SV|DTmnlqK=S>PpFyOT{)1? zQt&l3PU#&nPt12phwxqZKMwiS+wC(wz2eij8ST8Df$;(<5N_O7yHFx;kIvXH=ZfZg zebsYzc={SXM~mm;lZ3?AvbkIf=xefn4tKj#JMUc0Q!iA*Jv5?<-?pZ;p^8H+&+avT zkCr|$$*yUYU{-D4spX!{IK7o>IF|=$z-&B>>v+@-1S0!ixAKo>K+mYO-t|bAp@{qY z$ImE7;!#2==-!KWtmiK9PF%mN(-?ygOjjXS)xJ>1T^ytt7T ziWCu=c1M$5ey+~;LF!V2KU}&j8fI#<$*Hk%YnzFqtz>+shL=A3;&EbJf#%&`R&oEyE zC>&W7Y~Kd>q#_acf3KYAg#dWjOWZW5?^%@iXY4@$>+or;EVBZTI0(4qVf`*Z-lJ!O z)z#bkEvNA|O3)h*rx^4F>80CD?$-3k3HwWvXh&YD$I0`Yx@k+#xovhfw6z*b&yv&5 z91)BBkf_~vZuy6xA`@RywzfB`Z%#MP!{Ae&3OZe(bgem35pLaPwj3o_5K}MVP_|>v z6rSg9o{lqNDW&jw8L=*u)6Mwqg^Xo{L-Ms?;s+h0cmj*hJ6ami+s>c>BG=++fdd46 zT~v!rbI=54szz;Pie$G}0mpUA;aATNofD((r#Cu!?=+q$XUOGwA;i-J3Yon>+DUcIskokN=}*8YpbvDX`H z43f@SmnVz7LxFjlO{ve*u!)qf#^Re=8_w@6Ox+&sACi^o)fLwF)fcEYPuA1-FTw?{ zFXv;fz^~0r`Ib9sj^^PnY~B!r!+wk8jho{TAm_~A_xpOgftF^wCQOK-{DGFY#!@5b zgnEif7`zb~F6_aFe}rHsL17H)m>#00AF0$|s&jsmvpi^?$I^wF;mqpuw)Q^IlKI`a z)#nZEAz&Ts@I$y`N;<8j<&vr2wxllCiI|gv)3NNad)X9p*uzV&vRCS!K77q8G4rjG zrS)NVOOeN^ijPa!sSN)oo0+20#|k}_Zxs&ydEI_y6%<4My3 z*`jVC1wHegzlZ4c;(b^lEK+cW6Az#Hfc1(#PIRy|!RYBb;M<49Z>wuZYIXH1x1C3u zI>QiKuiL#=S7bPk!Q8+(o;vrJ7|C1G8gg|zMIIDd988g{-5kut8`Qsjb1Gh<3rqw$ zt<=*z`xQnOcUe{_KevwY-qc3g5RBksZrSb3KIQeSooZF{@X1(03Lv=dh}q^@gwNsF zV)Kp1;5`KJwACs@Lp3TF@A52K1gyWi=@K0izui#t3~UCr9W~=~i9>PmRoyIQK<;S~ zZtg=dL*c&oFmLg6+$L&VfO;l&Yu~u(V#T6EO-qkiVRWK5*Rtf`*)V+lGWY9J$n5tX zh2oxiI4`8D@vG~dp$lBKi!+3(Z!5*3uZuqMFcy6(69MQ~KaM13Ejb06-5K4dOykFz z#iZmU=kyf5Jq;&otL#_7msXIOLRCUrVxJanQ#hzBcxxh21d}cWm|RbxIa31>QN7nJ zidMr6wye|kpp*cBKq>M?jPEnY$Gi%a?zr(DdlMy}tSnNkKy$94aaAfw$&!U3G2$L- zxWj|s&1$4E^JEgcotdYe^EFq)TP~L8hsP7|?_SSeY_s)Sd7bBCPalk2rL=^wmS;_S z$StSVvo5R@C*1n&zmwT~uk4Ddr0D#JKD$YeQbd{l?3l7>paq8*b2?}B)ii0F#y1PE z(xP*bvUyW-&_Kz(Y|AUF8+`mvH!~g&LCF#Tne`N9+M-=SfB-;%ZXxCH*n?FT@Ij}k zV}V8%;43PX@iehLZ?cQ0P33VESgSM}r;wDMOobleU#KKmi17(+K=M;i*O?GaOoEL5 z#aFAL7`HxS%7-+SSWsL#xqnHbI4UXbn{egc-hApwQ?Ga7Eve$Id&!Xvl+mx4zCDG4 z!a&S8Q)1sl3C4GJ=A2#4?Ci3Vlw*T0YLX>$V?)#_&@n`4Wo2ae`cxx(4S4KTdf!7` zkxrtKDRb%^;5r)Xx7OKF;y#rR9xcUm)6}OD;D<^Kps9hlYCEp*F8Fr&qQ%wDD778z zOA>q5C6%v%S#dF0d3E=&8mG0##o-OvvR-7fSFI%F3Wm4j34o z_2^$$;#&%Y?hSMFW?3xj4u5*uIVe$(PWo11XwICM+kI4dc_ASc`bJ`J@PH;br*`Et zUnYH&Ag_#kQ;}T51_FG}l?9f;N?YaWt`Zdw0Fb5}R}T=*e0MQTOs{I3-tGj;0l3Y< ztUvTyQ_C z^hl<_R(_kj$4qL@Fwd-r$wH!VBnSP;KaBP|7qD5hn(P4+Gho#&;3eKJMch*;2(^o! zTyhn5jdPARxp6#jxO zGO?C$HCb@!nMGH|4aVhAO3{?U@Teb$pPu?}9K{*U?dfz!(XQhRursmaqM_+~e8fCv zMCa0*+tX05t9{WvV_dLZvJ*uyn86YgaFt@Z^j@5_{_(9xtY;!IdNw1~`*o6Z7Tn&$`K*VvnnWr~j}Bl4f5#a?OAYsoF6E?p(b-nRg>3`fb950x+b&l6Ey zN!MT>Y4nF8uDq=Zn}GbYTGjgWqPThI)}j_YUpKqO1(|6I6>d-biX|h+Ob2T)qxDb( zs@H|`x}NZ+W@;%Xuw@j|@`_vGTA`Hk_FGAWTkZRfd9{i!uOcH;TDNE~ceMB)8m(7m z-p4H$$wy}l?+R{P-WwDZ0`1;yO1XH17G6x%;5u&DFl$Yg7Jrq?QyB1DL&AjXL24Vq zOm*UT8Jercaa>>}IV>8JTq3&@fggT|>txVQzij?yisX8y%)Ir>>#e*VUanm8E}BxY z;hppxN@jWGk;lo&i4$*Br?^ET%~(Bu;L5XdO-7x;5-V|4Vn0QU>4n%EnRs)D#k`k_VwE$G@Ogub1k7Ybt zqyur5UTL5p&q!f~!pOIUl1}fLA1Sv#^8ns1IEF|l4C3KQUG}aEcNMOdR=0bsWv4X` zUfphM-qdN0^s#szHCvm_wUTqqa+T-0p0h+sOH0quFrnxUGr}h@WpQ*-=GE-P?e2Uu z6WeH8j-wgwM%81|y*5cEgi+W~DW3NC_upd{QfDd(*P1Iv>ZO@yOMR^4HsIW2R+DlB zsNuKFWFWVA^y$k>0EmOxC35PYqS{2Be1r$bQ8*>+rw>fRT(m4eH>Y!LdbWxX-dew!Y} z+EJ|=h8MFz3wi#igmK{w0BD-HRxmu89@CvuCYz*KSGZEl(S)P;MrIm5Wm8ovzSh1d zo?TzWyzX{tzWNxC6VtwD`O^#e`gPydk5&W5njGJ}D&H~0?Lo-1S=44OoSi1oaRlUq z^fHbtTlNUYP|kqR?iBA{iWEln?t;;tEPK>5$EE=h4Gf23`fc?#EtDg7>sd$JObn@) z@ID&kEA$NJ@D<3eaPRJ#^5x$6`VR!}78dTpu2{UIwepxofL=O;?HPn~JeX^Vb?#xk z91^N)WHY4vNHI7bI@6B+MomF@9(_}8M}qCvn>QKF^<0@uB}!Nz=F-A-K7^J_LS7q_ zFGn@R!lcf=q+AT+)!Tvb0#h>PBGn3Eax9gRB-)_ltZP+L$G+YblC->C-Xf(*u{ikZ zM574W(bt>?`T0vQY_S}s87(e~Zzj@?O9!uFvfayU z+nv^1Lq2?%Ih9MoRA9`5&dQ0X)->X_d@F4~>r8spzltwlP_-+~nAjtFUGZ?#|6*Y( z1KH1wq>_5v!@nUFZyerSFBL&1$-b_z9H!*jLB8H{DF{AJY3Zw@v7)^Ee(ky>iym~9 z9>;D;(OlQAfE2K`p&&zfLp;lvKPJgCalI$??H-5r6iGzS6PNKl!kw~n-=q)+Za%0e zK7=b_S}KNRiVOIGZ@x`aI`8V)f3+sVKpdz1h79ryN7`arR;ODA`KU;iRNbdw3=2iC z!C-v7X2?E$GnOW)psQj;seC_!@u0mrD^S84EIu;TL=m1CXD87J6YVhQQ(+CDleVk0 zoaUZw_l9sJNuLZ)OP34tYb4+vNu=m5JOK(KwVT@M##CkDr%!9$bGws0=>}Eo6;9TS zD=S_(&KtBV`{N%1uj|vEcCEtesEd{znWx^ca*>ESpK)m?cy13da-XiI>n$QHy@ko* zp%8Ttsv}cmzWlgn;*?gvjL9(y72F>Ta$2Y)2@9XE%;wRL;MN-){bcUMrG!BUEjy9NP{=-b%=RWp|h=s3YsG~e(gFG%fMa+dn#%*hJ2)$ zh(f!2B)pucmeI9le_sFkO+3|xWxu{YE*oRFvMC!X5%GO>mP>CsQ@Cziv zI@i2e+6|il8(Xx>Hyhh}_tL;N+pgy0lu`oEWrPGJny!JqlAY&!6$?R;Ku5yR#+$>5 zE37dvT>SB<`MB)}hGPT~YEMrP&?8M+YN{{@qz+JKSn4R)O?Xmk&!&D1_)w*nrGMO}R|iDD2Xx-sl>=lHrtWMQft7eyx0WH-l& zeW=~Ys5;qPixN}p>cFL3Un0bm^HfDc#g=zhb&xMXOe1Ea@+1u*=wJ?OfO$QH@~hgU%2V!3XUyJ zQf7H(veSslaeGRMDm4S%>*FU1^!&%1JGhS{Dd8}i1x7eoCFvS~CAc~@y)4VU_g(WN zkol1eMslVJg9p2nbUWi6B&J=mF15pC+#9u))tvwm z0%>D~GTdk~f#}?h<-PV<&#)(vXV1=_o$30FuWmmLoyZYlb-KU2Ef)TY@=5@CBcHqd zBVqqaqdSxU^7HKHQN%3h39SH+%i3Q-MNmiO(jn4x!K3g7J0#&|$XO))OW$6uwQPd-iGkU=l`A zHEDQb%Rs!Iu-lPFi||0BFZ@k5@rO(3XK&52y+H?Qbk7RaUsfE#`j>W@{)qmcS6|Y$ zXS~Fq|I3UZqi1F5NkcHO1~i7OgFjBUjPtDO{f`rTS)mg}U-%>Zg$v2+n&{W%EK*|2 z8{`lDGtmiC)ZiG1^PjSQH^u`k!FW4ClHktmGJQ!4MY*g>qx*+CH=>>}j_6eNXOZ$`d*>fX z-_rux>yiFbHqVI@VpOlg{CpxUw36a6R za%p!|@+d*V`-npiycIpuT`*hn^wyWFN?@HM9wqW>$4#x9z~^_>3#c@vaCb9VubEim z84-e_=8>_Lwn?)#1#|T~M~A@zrUqPQwjd>X68T#rEj>1M=7#5gQk612#T%V;ka4MPIcdM!tZfIQwfiQ;C8&{q2|C+t z&IpRUf2m|}erO)x;`0pIh-qkL0nO%n*%WL(Q5LUa-Skc>a z;XjSEH=RraqPvn#sMsPuiCs8GcyzmXA(=MhzOo&OBu0W1V-mUXWE*PH!7TF%n~_Wr$Urinf|Ptql)n{ zK6S{j0PLf{5iGK(JZEBCbETjwBbNB`;)GJi@ViWkc7T_qPA zLqd90IXyE&eIP8oqJtjrj~G#FJIm)6=+EmvaxlWu3kq606MlGBo@XEgZ~*8y7&$oD z30YX_7}z*|gfwC4Wpsgdra$uhP_bwD=lVHb!O-5?!A{@Mo{*axmj0ccwZ5Vu@Hrd( zJ7G~mdL=_=AR)bkrLM7|;6JxQ|J+LaC{@H6D5eN}_FewR(PGSmOpHH1lTi49`)2{I zfIs4Yg#URF|J?l%^AGiYLPo})HTP{{Vd#1BMo7VVC7+d{D0XBKO5@( z?I7}V|MNFQ2>(qG`Pt3V?*(e-lKQezs=v+d<@KHynRMzv=4l0FmFBt}_2kSAPeH{LXZh`ER=VJ3!=jrmHM})79SqA}l{M z!ryJ`jOAyd^uKZHjOE9}!2kBwcq~6N!ru-eKNF?DA@XmUU1j;15&m`%`I#vF4UvBr zM1E$3za2z=CQ5%p?PLtbfzh-=P=z zo#`s;-*okNfXMGmS6Tn2tG@$8{wiH%{If+^>Wycwz(-*2zf#{~{h4L{chhnIp-i|R zWtM?y{Hn~q>=>Ah{ZC4t)Ei7n3}AxDrdFn9QK_M%I{Zn+$H^&i$uTj>s8KPPQAz1V z=0+9SEcw-}hk-Vmy`lVby)209JTK^Tf zEG#VaOpJ7NP5vYoBMT$Lv-@L~${%vQ&Z2DkrCfiNK(PJUkMdutFB3geT?1VM9o>ST z>#L5TzJi670pOj42zHZ3`Ag+bwx6lPe_LJuf>?Sw1_oB9y1G_{Ka0i0##YHv!NB$r z7YU5Kl5+c(we?rW(to8DO{@$|O${u}%s&4lRy_j)V;xIX1q;*1=T;%xfSafY8e2v6%4F^fM>bh3Q=zUQm(%`u&}ZIKffCdOwDu* zEcEpBey%UJY6eCC+e=hY2QbxxQFySXcmz0Kgxpf7|)%K9&8iJ|F)pa+&?nOX%sD{4Ccq>RA9x z%zzq(z#r|XPC5Cj`eOh8vaf&cQFTmo^(+j2z8l%9YZw@+8LBH7ezYSIKIQT+<@(Eg z{lCylSQr_Y8kp)?S^RknVq;`wVFNJK{4q8bQ;z*ouK%&K|HtdFX9asj;Il@(EFpm5 zhhcgS<7+x%J(8Ihc9vj~ew!q51hQK7YY|^>QEHjj zH@c`d1ZC?BCx=oz0OHwBHs2hkES#o4X4y`#L8Utx9!t|gKd9JrF9#N#Y=MRKprRha!mn(=zh;5sab4Xy#+wsa` z^_<{zJ11?OynqE8Xugm_9N3q#`c^#X`Mxcnook>Y@nMqzi4WJceZy(+HScP&v0VV} z)3bYdBNtmQ{^8vPKX?XkQlGFWSvj`lmnV0oFMRedj#hj4IDh?P0TGNzYTZ{Jj zZ;Py69u_wtOlfD{pC9h#12tZ9H*m|4#{%uRIpC_#rzoaIC3;AE-d~TfwrHiHM5ut# zBiFiGIG@RLeu{9N$4Vbzcy;J7D|PH*P~3){qG zdHa*Ju?Q54A(E1zZc(~&2`E$=jgcy0HP$iU&sbU>&7jc7p5U zh74=_Yt6;CQqF-7{hOv*sR5x6-ODD?nAU9b)F5sbxA@V3?D;iQ`sSn)jgj7Y15PgE zLFpT;{M*_5a?SzIChYv`0h5HlHeCj-QvUX#<*~d)N(ec&am&Cgl`Qt;i0ye|uAwK~ zR>^#a$~kCE6@novW@7&bHh9Vk-Utw6MC^sT3uE%EPnP~WX%C9~%2`FIph&R7jm(!5 zD{wS)jqY>!k~*Kb}je&P9^8_i07FTfGewdu@>bDFGSfMpu4+Yh~vYr%i5 zX)ByWX9!+&90abf)CZ}wf*}^RJ?FjMycRUB5e(IrsmJ{uX-pAgz0lP;T_G$Vebp3Y z+8T@_b(FXI82a1f&=%U2b1n(;sv3ERyF2tK_MAJE_GbXzhizrd7gpTPuiXjxaAK~> z%ehv;B1MhIVhrBmtJGyfVDB`Q$g3CAfsa=e?}2q(c}G>Oct@dLdW)MO1+&CN+faR` zW|@$eVQCX#=}}TLsWA5)i!Y`IEGzjjKj|ubHKVEs-_%}sF!(YNQM_NW({T5OrfSww z;YBXG#MLcR&P%#<*eFujiPD@X*qyvWu%`Qiwv~!|bD1W~>&@!}kYfl31;+V^jVp)7 z=$?roO~OQ1pF&8F!V+NuYdXxE&@4_=5xk*VfZ-HH+!xmm^fo%e6$H`{o(IWBj_knx z&}4fH6z$1Dwe5JFLBjcDDb6a-_(j!rZ0+`jrMt)4K>O_>IY`}5+e_)X(v{Tx)*M0~ zlUDl~X3CQY9s=_LIAgW&Xm=Uq5`V3D+(K!!I69U0+-m#Ee!`@z;x!3L3#1B%uY8uA zkb%P;`+-g;Z@0e7q#$~-(JJSOV9B+8d^v;8+XRWYfQVSggROSsNIY%W$XZaB78B{> z*`rfdUfztOc)UxT0j$1tIin;PGGG*yE*m5BzaJpQqo320$~l_eC=tm%4A~$b&b%ly z-y6hHz9mXHk$LMO_lzf{I}($<9wK7sGfYQ?+BVe?AP#(HLdSOll8Z>16w zaBy0eHdxr*jy>u9w0dpuz8Va7y%rJY`x^r1G)Hx=eD-Lur5kYT#%-`%y1=K9cj&pc zv*sOP1;sOXdrdRt3wuTNinCjeRd#hfc@;~pl!+`r+9Oyzdg~Hs>dNI18(J$k^L?v1 zk3$ch(o4&u_}I2WwBD)3bWB=Letu&s9r@0g9#jcFPu}r6`8NCgG{g(_&%{~ZDUatS zSR-mgcwfoQJ4-bWJ~`x?TpwB{jkF@5C34wkEIxtCh%w7 zdG#VJPWcrXJWiZCwz2pt>M$hvSM)Tx(a3)9d7)X<5Oj$**wBfpE0kB&;PzdR5Q*JL z2xH)0t>*fLA$yYwu+s?5#n)p?s?N9#VGQpB9N$*z_!S73AOuO}h_KAjqs-Vqdh~~4 zYv^2_93cClXXe51HRjjM5m0I^d{EZ^9$aawpc+cCrY3~Q#2s-T!|XiMV&%Q&b(1;U z-qJoI@?^uAhS3V@S$Z$e`^23N%Ae)K$eZO$9ud3Mcz|&`TZwE11-h$#pHB|5YzzY! zy@v$9*|~+$L|m{(3O%(584!7zMKb1jcGZQz``EgYAs9B>O5nBOrA;3SM>Q#>ma~>)QJ38 zjR)i@8eA{pUcX#%r(4!S_a&wmYo8Vrxnm!K|u{G@<_03<%bex6J-*N z_m}XO@s|?e;E3c5s5&#{kZp|8$`fo%l3W3{QEWMNt+_MMi#e-0+SDRH!eLig=%W|; zEelzc-F!Yi@HL98G}X6Q^;4`OkyUN(o2!}Xgjs(tmTKb`C*n3a5gMT4I2oG%IPkG# z_6!Rm)ZrY9;F=tcNp-7c!%uTSD1fKHVwX^Hj(Ac#C|f%;J)NUl)})}Hle~kDcrx?Q zq#*5z$Yf}y2BF1CLK~g?(B*n6wa{S(7<<7ILkMH)#c8KD-DO=vo>LemRPNwuOBuz zZgK_Psx1+^hELQBk!CQCQ=Ju|#y`MA3?JkGr(1Hm6s0oo1gAWu$2a6G*2>*{fO;?A zDbND*omesjN-u+04P0hDX=7)g@(Fw7bf1OXD)Oo!!-P*}95mE(v$baRjqKZFoyiJu zM{I2Td8tW0a+3%b`+l{}J~;<7VuI4FZHF zuu4&?&2S<_~|qat64f1UWev13 zN6f^xfv!yvs)&Nq+Ku44xO>8m9Ne5Z7`UGRgo|&Z>Bhh%lX{oZDd4u3%!X*I4zZfQ z|8Tl%l$S*?-S+X2lYZA|4G5=biDzE|&xw!jJ8;mHC^~z7<%PHXG_t*Y{-79fY33v? z#JcR0ABI&Q+wnMH;mkqzw$U5m3<1ixU0;xyU^6_+$-|7fmD2i z2oMoQ(Ha(T>bUUnWy^_jrI}un9dp^BGc%#?o`3#?>6&9UK67UQjqk#lz9A|6twtov ztC(v`>RO>u3bVmu9f9UeMw$&@I;v+_{?PnFb*z)`0+|#|3jGn*+{66EWC_b;;Dc)m z#n$!O^s0$teEZSm3UeM~v-|r=c9tO zR3{j(eUHUPC0>V{e8zaY7tI(Ui;k92CHUeQUY}89NZS21O18Gczc$8ogXlk?WSXHDr$Ldz-k(#_^C#Mw5aUI zY}yoJ*8H5enL@1@xdo$H2)7e2R6Y}0OCgRq1qq^5hFd*aN7KWZF0pT8FQ;^mzHuwo7+ z;fxk&6X$YA%&D5V`-(d9Gx!6yVy+otvgs`|`b7Medi4V?`AFn^y9V^G4iA^2jo|rEjSFWWR612Cdy-9V@qcV!A>&Ob7Sj*Jdj(nTF%B~a(>iaZ zQYBZ@ah36Z6?UFMO=#;HmL?k%*dj#{g9Jh^fzSd10#YJKG}H~!4N?a5hD5kc| zn;|@zb6>AP_?f|ABEE^R5zBv$$$-*Wnab$U*yo3FoMvmHd~U=^vIm}KU`l=>Bk@2o z&l*hRR61k&(Y9PPD9D&i;?G$jkRYD%#f_lTs72>{s`^Fw7<@x@Lx`$_sA|@C3aouY>f%`{e(Z9HpO5DLlhvAWdDoFPFEv29 zVd=q+Tl%seVRA;}{40kD@0y-5mQ!tAx|mXtvyEOgk9(>HkSpvBiW=|(Ralm$c)_t_ zw@GOj_6Z3)SsL4c;+g-t%^%?FEjFL$oM=~-u4bNH-T9$mt<40#0d z9rbN|bG&*1^uU;blS@3u?D%NN(OULzPx-td4}(gaoYuuh+%lq<&2*$%EsFHij+y&Q zHn#h-?(Sp;;8dq3Fc#I0B5+;`2vV0kc*b>DJywXZE;-ND3jjK`O@Y5bXR-;#0W7 z&DN>oAo62(wBgZT7Q&K5r}<$I%v<)~`$ zMt9ZLuBMm+?ejOC*_DfWo&P-uBhh%3`-I!M_?^s<}a9ECEanu!>T#cOgop# z0(!d}+$6^&&eT}=nM?JeG2J>KVI_-#{W^(o7H3Ph!G_ilInstX+*6L{T>l@Ai#le= z`}<8R(hbTm%JQIw(CJ%hVPb_W+?q}g;9VBa2 zUL9qhD=N~-C~LLg+uDg_A$)n;x|uAng5!KqpmhkjSUrC4NJsIWu<^k18)}m0oekIQ z#yY!%nEAVp;)sUJ4e#Rh;#W*#s`i0lw3J6XB<*51+p@WWHrdo_o2k&@oT7R;oM;}u zd1IgI@bTKN_UK-KQvNF8^0l;)Pb>?eg9FpEJ-d#?e1iqU9lB=T9XM=CZ*eaVcT2EZ zKKMofT>3`_b69v(6|sKEy?9~(aTNExx#NC70YoT7xBlJ7D?^S?NEbviI4Yk_s3)0P zEqxYNW3!$!V_a0)Z!~hqE$fn9ht}wHqf-T@Va2VHxQEPIEmh3NKD6K)%Z$!xv>w;C zoM+g-@AP!KYw6X_-n1WBryld(4KbF*vh-p0j zZH3QL^jbs*ytvs+6o<$4fyN$c%B1YjW%S7EEQes#+ZpFk0iBCRvy09s2j7HuTybSG zN3Ps`L%gy-CTB&|QJ}%pM7E|k9<75i?AjF99uz~eg3o)V7dA}My?hE~qWb2X-1==1vs%^$)9{T1*lPvQKoy1d zk-MG$Rwc8)yn{tgOe|pSHIF+>-~Y+AjfvN4Q~~0cw$PfOTgTQ|3ZSm zRtFeak~v5C#IyI#TXMDDC{|eko{ZwilSw?<0tjsKOC$Z5%EP(FCd^89+)~C&0(Se6 zB(LF=s{G^4E=kSwTUfm=Lb~d{in0vNqJnUq+?Qdq7d!);A-0V3KcFCsg{T^<6vn#h z9cQfi)TwU!?Dg8>Je9uuM|<96QP-NxismuF9$RR1S)fcUmv;|<>eHpQ=0%FCgcgK8 z2!M_aeW^&Hu@`xrBB!QXVL4UcOT8`u@fMG#rd`p0H^ffIv+1($7QgBYr-~BbVzs>1Xzm3r*W%?5=h}HYzHp zR4CPnyd(ytMx0T%%TM}p{az@RD7oibk0MW^Z)Aua?S59b-qIUT0VisbPOosQp=2v_ zhGMd18I-lHQA`L0lq4bN))o{l_t&38-kKvUMbfvYrJ zkf!qu+YglHV+ecWzv|xq zgol3)82;sPR22V>4oVQ{|B=DTPrcz2;6Hzn!(^$u8v?7P5s>iGh*b32fEC#vv>_Hf z7iXIHRPmmGvrssdKz>h-zVdlBcG((PHH9$mT#S<*6Xy}?jVPi)PX5uv$HF$zMn&s}}_PSx)vGvFC=u8LGjIDvn z6yXS4Oh!W+j)h>U4P2i7=JtKH?_q0-lVuMMIinIq$OCCT;5kRreEFI`ZT5IzQh%h5 zj4CEa9)I;wnv2p^BJ!X27>>c$Tq|Ude+Sr?dVN{yQPw zsO`)EzO4RFW)WQtHw0pg$oqCNuM#K&Pkx)tecedj+{j57bELy-dw)@Ryz^%?Jv(g7Fp?oDu+~6{kHbI9C*K9HX)Ky*|2neX#U` zP&a1*;}uLA6=xc{{HKM6c{*j)_{#9sADKhS`47s4SUY8*m&nSodTI$GYVj^=C{#;g zc{rmuhP}i3gFE)p(#Lj|68$p#)t>y0)QM1Kf{dk8ltM76RRG)2`thd?=~Hm0)5EtS zLQ%?zsT476P7iK6L3XJ-;?fQ2=kSArFM95(fm?k(Q;}Jt(aR9Jr{`Yv1O2M9qV6=_ z(61m98El36TADE=Z`biPvg~T%@x0g9uu=5bD%QQnAi9^;r#Bxf-VX??68Rx4So?J| zd|Mi?EA-(uKHR=Ed@c0r$&LHAjlZe##b`w)@r|Sm0H~%hTG2>6t5qqNVV;%G_*_ZO zpmZRvY@cYp-bQngF!hLaCvgdok3V;Ydk{Ur1;na=tNpK?n zLKWAX|NbGw*99NyRGj(NjvQn|F5H?|wM&*q6JEReybksLqbK@ccj;cri%$C_^w-Wk z+2HxZ;WgihsLAj<LKsf%aJzMMv&Comhw3EcP@pCamlrIZ1x7};Ry#J}~X?R7u(P{^wBW!i6A73=5Z>lfsE(qPI8U@%0P9R$*c8~g*DjE*q? literal 0 HcmV?d00001 diff --git a/Compiler.java b/Compiler.java new file mode 100644 index 0000000..22f7088 --- /dev/null +++ b/Compiler.java @@ -0,0 +1,42 @@ +import java.nio.file.Files; +import java.nio.file.Paths; +import frontend.lexer.Lexer; +import frontend.lexer.TokenStream; +import frontend.parser.Parser; +import midend.Midend; +import midend.errorhandle.ErrorHandler; + +import error.Errors; +import midend.symbol.SymbolManager; + +public class Compiler { + public static void main(String[] args) { + Errors errors = new Errors(); + try { + String content = new String(Files.readAllBytes(Paths.get("testfile.txt"))); + String llvmFile = "llvm_ir.txt"; + String errorFile = "error.txt"; + Lexer lexer = new Lexer(content); + lexer.lex(errors); + TokenStream ts = new TokenStream(lexer.getTokens()); + Parser parser = new Parser(ts); + parser.parse(errors); + ErrorHandler errorHandler = new ErrorHandler(parser.getCompUnit()); + errorHandler.visit(errors); + // for (int i : SymbolManager.getSequence()) { + // System.out.print(i + " "); + // } + // System.out.println(); // TODO:debug + if (errors.size() > 0) { + StringBuilder sb = errors.toStringBuilder(); + Files.write(Paths.get(errorFile), sb.toString().getBytes()); + } else { + Midend midend = new Midend(parser.getCompUnit()); + midend.generateLLvmIr(); + midend.writeToFile(llvmFile); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/error/Error.java b/error/Error.java new file mode 100644 index 0000000..88011da --- /dev/null +++ b/error/Error.java @@ -0,0 +1,27 @@ +package error; + +public class Error { + private int line; + private ErrorType type; + + public Error(int line, ErrorType type) { + this.line = line; + this.type = type; + } + + public void printError() { + System.out.println(this.line + " " + this.type); + } + + public int getLine() { + return this.line; + } + + public ErrorType getType() { + return this.type; + } + + public String toString() { + return this.line + " " + this.type + "\n"; + } +} diff --git a/error/ErrorType.java b/error/ErrorType.java new file mode 100644 index 0000000..c4b2283 --- /dev/null +++ b/error/ErrorType.java @@ -0,0 +1,17 @@ +package error; + +public enum ErrorType { + a, + b, + c, + d, + e, + f, + g, + h, + i, + j, + k, + l, + m +} diff --git a/error/Errors.java b/error/Errors.java new file mode 100644 index 0000000..38ed887 --- /dev/null +++ b/error/Errors.java @@ -0,0 +1,43 @@ +package error; + +import java.util.ArrayList; + +public class Errors { + private ArrayList errors; + + public Errors() { + this.errors = new ArrayList(); + } + + public void addError(Error error) { + int index = 0; + if (this.errors.size() == 0 || + this.errors.get(this.errors.size() - 1).getLine() <= error.getLine()) { + this.errors.add(error); + return; + } + if (this.errors.get(0).getLine() > error.getLine()) { + this.errors.add(index, error); + return; + } + for (int i = this.errors.size() - 1; i >= 0; i--) { + if (this.errors.get(i).getLine() <= error.getLine()) { + index = i + 1; + break; + } + } + this.errors.add(index, error); + } + + public int size() { + return this.errors.size(); + } + + public StringBuilder toStringBuilder() { + StringBuilder sb = new StringBuilder(); + for (Error error : this.errors) { + sb.append(error.toString()); + } + return sb; + } +} diff --git a/frontend/.DS_Store b/frontend/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b6a53e3be28e305110adf4e3c46210fa4c46b6fe GIT binary patch literal 6148 zcmeHK%}*0S6rTqLwji=VtB5h#*oz57`HBfKhPq(1F$O{j76I#SJCqH}OtZVCe1xQD zJ^2Ut2YB^l;>DvEuilLQ2YU6SZ$276sz;5OeaX!4y?GzI^V^-B9YP4$wemP2CLzSY zCNR;B-7iG=MQf2ZJ<^E?q6ROyK6lX)UQO-ZHer@zz{~<+A zLPxpvu&P)28@K9vVKg@O5!%`l9i3f9m(gRa=QnvhA30Giw4Gp8SWBGyZc}&MWsla2 zW@?tR$nh8rWP(?w7_#=rV`W~qd5x7rnVVM*BWWay=Fq{xx!&`A zX8*uof2u#7PG7h~(9&KNV^T*0vfRCZQYP!oZ)}7#Djd^Sie_I}3b^kt@X(7q&Q{h!WH}en z?Ht?Sc*PxLc)luJ;W7f)n#wh$m?WbV+$&N|O(SI9(JxY8Vw}-rCcB_KN!(XP$Q|;KER!v=PhOCh zUr~0mhY&UWhF zh=}eWKA~h6TX5=ye~sSbFMKDd;=%}UX|%+`)l;!(o;}gz89it3*5f;l8HgG9!wiV; zgN03CR%1h<{B&T~hNkc*1PVc2{`@0a+RkchC`1nms8mFi3i^lv`s@HI9sOAy-%zO1 z3CJsB9ericClt^}53po7fvm!~j~R#=ILSb}GEK4n-~Ijh|722Z#SFv@{8tP>VlF>t zAC;_ literal 0 HcmV?d00001 diff --git a/frontend/ast/.DS_Store b/frontend/ast/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b5ccaa02fc0717c423a745fc8225ed591253448b GIT binary patch literal 8196 zcmeHM%}*0S6n|5Sv?8)7C~8bL_F^JY6k=kGu@;RIqYxJnM6J8qp{^`5&F+>D2}#d- z(!1WhdNT3i(Ti7aM*jo7deS!^#ig}J4TNN} zh5^ICf60J2A8af_7qxCEEsqYYWD0;fi_KEd#ymh`Y^{r0H*AF^Ga= zzb)KR7qxCEt>8cu9EhHo=nRF(*%4<;cOXTjO>G!3474*Ka`$fVAOsHnw)|ZLQVGk+ zpHd{W4<^uW8ESAF7zB{ONq7t{tbm)!`~~t&3o;88pg2Rg-H#k=@#{jbHK?_Cz4)`2 zw;I><*M_%VEezshbo3L+bY;7D_2hbTy}A3&Bfjb+Zc>j+ZnPktW;hSMrtNyO0bMOy zgA<%3Zop_H0YQbL%e^}RtMJtlud_-lv5xA<<#YM6HN3Ggc4mCU9y@(*bHv^_cV=|N z9v?fqxtY%m6;7SMRbC308Gni^MO7$p5cSubKtM&-H?yX-F&gE=6>?Kd-wG1 z?Y9Q@?H?E%7#bQnaB%q0;UkC3)_%|Rm#UFi=L8RVR0`{Kp&A7hr{?+rtIj2KEpdV; zv~2BbalJ(=4}Leztk=+I@OOh8?rKCSljBV-F2*#OOWE^ft3UQ59){CA4w8Vg`Fk<4 zJekntNw&yw#ua3EswTSPSsKNt+c0zUZWOt!N=xhaL)W9>6f5y0;mdP@&zV|zzZ@1H zrz0wcEL{Aqcq|mJH;v=Uu%Ms}e77BJT3VCBd-_${GmJBuFBGR$PaZFz6L1M`z$`4m z6L=0U;WfO25AYej!4J|yEOLyTAmii$xk#>&NphF?vLFL;!UNw~Sar8nJf^;b4%uBD6bUWstv0 z1$jR>u#T$|xHXtTyViMT8R%(rH{v+XMuBbLl??T?XO}oO+71K}>M1XC|05qp3N<{zw literal 0 HcmV?d00001 diff --git a/frontend/ast/CompUnit.java b/frontend/ast/CompUnit.java new file mode 100644 index 0000000..25921f7 --- /dev/null +++ b/frontend/ast/CompUnit.java @@ -0,0 +1,63 @@ +package frontend.ast; + +import java.util.ArrayList; + +import error.Errors; +import frontend.ast.decl.Decl; +import frontend.ast.func.FuncDef; +import frontend.ast.func.MainFuncDef; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; + +public class CompUnit extends Node { + public CompUnit(TokenStream ts) { + super(SyntaxType.COMP_UNIT, ts); + } + + public void parse(Errors errors) { + while (getCurrToken() != null) { + if (this.ts.peek(1).getType() == TokenType.MAINTK) { + MainFuncDef mainFuncDef = new MainFuncDef(this.ts); + mainFuncDef.parse(errors); + addChild(mainFuncDef); + } else if (this.ts.peek(2).getType() == TokenType.LPARENT) { + FuncDef funcdef = new FuncDef(this.ts); + funcdef.parse(errors); + addChild(funcdef); + } else { + Decl decl = new Decl(this.ts); + decl.parse(errors); + addChild(decl); + } + } + } + + public ArrayList GetDecls() { + ArrayList decls = new ArrayList(); + for (int i = 0; i < this.getChildren().size(); i++) { + if (this.getChild(i) instanceof Decl) { + decls.add((Decl) this.getChild(i)); + } + } + return decls; + } + + public ArrayList GetFuncDefs() { + ArrayList funcDefs = new ArrayList(); + for (int i = 0; i < this.getChildren().size(); i++) { + if (this.getChild(i) instanceof FuncDef) { + funcDefs.add((FuncDef) this.getChild(i)); + } + } + return funcDefs; + } + + public MainFuncDef GetMainFuncDef() { + for (int i = 0; i < this.getChildren().size(); i++) { + if (this.getChild(i) instanceof MainFuncDef) { + return (MainFuncDef) this.getChild(i); + } + } + return null; + } +} diff --git a/frontend/ast/Node.java b/frontend/ast/Node.java new file mode 100644 index 0000000..744232c --- /dev/null +++ b/frontend/ast/Node.java @@ -0,0 +1,248 @@ +package frontend.ast; + +import frontend.ast.decl.Decl; +import frontend.ast.func.MainFuncDef; +import frontend.lexer.Token; +import frontend.lexer.TokenStream; +import frontend.ast.block.BlockItem; +import frontend.ast.block.ForStmt; +import frontend.ast.block.Block; +import frontend.ast.decl.ConstDecl; +import frontend.ast.decl.ConstDef; +import frontend.ast.decl.VarDef; +import frontend.ast.exp.UnaryExp; +import frontend.ast.func.FuncDef; +import frontend.ast.token.TokenNode; +import frontend.lexer.TokenType; +import frontend.ast.exp.LVal; +import frontend.ast.block.Stmt; +import frontend.ast.exp.Exp; + +import error.Errors; +import error.Error; +import error.ErrorType; + +import midend.symbol.FuncSymbol; +import midend.symbol.SymbolManager; +import midend.symbol.SymbolType; +import midend.symbol.Symbol; + +import java.util.ArrayList; +import java.util.HashMap; + +public class Node { + private SyntaxType type; + private ArrayList children; + protected TokenStream ts; + + public Node(SyntaxType type, TokenStream ts) { + this.type = type; + this.ts = ts; + this.children = new ArrayList<>(); + } + + public void addChild(Node child) { + this.children.add(child); + } + + public String toString() { + return "<" + type.toString() + ">\n"; + } + + public Token getCurrToken() { + return ts.peek(0); + } // not change index in ts + + public Token read() { + return ts.read(); + } // change index in ts + + public String getInfo() { + String info = ""; + for (Node child : children) { + info += child.getInfo(); + } + if (!(this instanceof Decl || this instanceof BlockItem)) { + info += this.toString(); + } + return info; + } + + public ArrayList getChildren() { + return children; + } + + public Node getChild(int index) { + return children.get(index); + } + + public void fillSymbolTable(boolean isInFunc, + boolean isInFor, Errors errors) { + if (this instanceof CompUnit || (this instanceof Block && !isInFunc)) { + SymbolManager.addSymbolTable(); + } + if (this instanceof Decl) { + handleDecl(errors); + } + if (this instanceof FuncDef) { + handleFuncDef(errors); + return; + } + if (this instanceof UnaryExp && children.get(0) instanceof TokenNode) { + handleFuncCall(errors); + return; + } + if (this instanceof Stmt && getChild(0) instanceof TokenNode + && ((TokenNode) getChild(0)).getType() == TokenType.FORTK) { + for (Node child: children) { + child.fillSymbolTable(false, true, errors); + } + return; + } + if (this instanceof Stmt && getChild(0) instanceof TokenNode + && (((TokenNode) getChild(0)).getType() == TokenType.BREAKTK + || ((TokenNode) getChild(0)).getType() == TokenType.CONTINUETK)) { + if (!isInFor) { + errors.addError(new Error(((TokenNode) getChild(0)).getLine(), ErrorType.m)); + } + } + if (this instanceof TokenNode) { + handleTokenNode(errors); + } + if (this instanceof Stmt && getChild(0) instanceof LVal) { // error handle + handleErrorhInStmt(errors); + } + if (this instanceof ForStmt) { + handleErrorhInStmt(errors); + } + if (this instanceof Stmt && getChild(0) instanceof TokenNode + && ((TokenNode) getChild(0)).getType() == TokenType.PRINTFTK) { + handleMatchFormat(errors); + } + if (this instanceof MainFuncDef) { + ((MainFuncDef) this).checkReturnNode(errors); + } + for (Node child : children) { + child.fillSymbolTable(false, isInFor, errors); + } + if (this instanceof CompUnit || this instanceof Block) { + SymbolManager.releaseSymbolTable(); + // System.out.println("release a symbol table"); + } + // !注意哪些是直接return的,这些直接return的是否处理完整,因为他们直接省略了后续的递归,要么在子方法里重新递归了,要么没有递归的必要,仔细检查!!! + } + + public void handleDecl(Errors errors) { + if (this.children.get(0) instanceof ConstDecl) { + Node constdecl = this.children.get(0); + for (int i = 2; i < constdecl.children.size(); i = i + 2) { + SymbolManager.addSymbol(((ConstDef) constdecl.children.get(i)).getSymbol(), errors); + } + } else { + Node vardecl = this.children.get(0); + if (((TokenNode) vardecl.children.get(0)).getType() == TokenType.STATICTK) { + for (int i = 2; i < vardecl.children.size(); i = i + 2) { + SymbolManager.addSymbol( + ((VarDef) vardecl.children.get(i)).getSymbol(1), errors); + // System.out.println(((VarDef) + // vardecl.children.get(i)).getSymbol(1).toString()); + } + } else { + for (int i = 1; i < vardecl.children.size(); i = i + 2) { + SymbolManager.addSymbol( + ((VarDef) vardecl.children.get(i)).getSymbol(0), errors); + // System.out.println(((VarDef) + // vardecl.children.get(i)).getSymbol(0).toString()); + } + } + } + } + + public void handleFuncDef(Errors errors) { + FuncDef funcdef = (FuncDef) this; + Symbol funcSymbol = funcdef.getSymbol(); + // System.out.println(funcSymbol.toString()); + // System.out.println(SymbolManager.getSymbolTableSize()); + SymbolManager.addSymbol(funcSymbol, errors); + SymbolManager.addSymbolTable(); + funcdef.addParamSymbol(funcSymbol, errors); + if (funcSymbol.getType() == SymbolType.VOID_FUNC) { +// int returnStatus = funcdef.getReturnStatus(); +// TokenNode returnNode = funcdef.getReturnNode(); + HashMap returnNodes = new HashMap<>(); + funcdef.getReturnNodes(returnNodes); + for (TokenNode returnNode : returnNodes.keySet()) { + if (returnNodes.get(returnNode) == 2) { + errors.addError(new Error(returnNode.getLine(), ErrorType.f)); + } + } + } else if (funcSymbol.getType() == SymbolType.INT_FUNC) { + funcdef.checkReturnNode(errors); + } + // 填参数和块里定义的参数,一个问题是这时的释放是该如何判断 + for (Node child : children) { + if (child instanceof Block) { + ((Block) child).fillSymbolTable(true, false, errors); + } + } + } + + public void handleTokenNode(Errors errors) { + TokenNode tokenNode = (TokenNode) this; + if (tokenNode.getType() == TokenType.IDENFR && !tokenNode.getName().equals("getint")) { + Symbol symbol = SymbolManager.getSymbol(tokenNode.getName()); + if (symbol == null) { + errors.addError(new Error(tokenNode.getLine(), ErrorType.c)); + } + } + } + + public void handleFuncCall(Errors errors) { + UnaryExp ue = (UnaryExp) this; + ue.handleFuncCall(errors); + } + + public void getReturnNodes(HashMap returnNodess) { // 0: no return, 1: return void, 2: return int + for (int i = 0; i < children.size(); i++) { + if (getChild(i) instanceof TokenNode && + ((TokenNode) getChild(i)).getType() == TokenType.RETURNTK) { + if (i == children.size() - 1) { + returnNodess.put((TokenNode) getChild(i), 1); + }else if (getChild(i+1) instanceof TokenNode) { + returnNodess.put((TokenNode) getChild(i), 1); + }else { + returnNodess.put((TokenNode) getChild(i), 2); + } + } else if (!(getChild(i) instanceof TokenNode)) { + getChild(i).getReturnNodes(returnNodess); + } + } + } + + public void handleErrorhInStmt(Errors errors) { + for (int i = 0; 4 * i < children.size(); i++){ + TokenNode idenfr = (TokenNode) getChild(4 * i).getChild(0); + Symbol symbol = SymbolManager.getSymbol(idenfr.getName()); + if (symbol != null) { + if (symbol.getType() == SymbolType.CONST_INT + || symbol.getType() == SymbolType.CONST_INT_ARRAY) { + errors.addError(new Error(idenfr.getLine(), ErrorType.h)); + } + } + } + } + + public void handleMatchFormat(Errors errors) { + TokenNode strCons = (TokenNode) getChild(2); + int formatNum = strCons.getFormatNum(); + int expNum = 0; + for (Node child : children) { + if (child instanceof Exp) { + expNum++; + } + } + if (formatNum != expNum) { + errors.addError(new Error(((TokenNode) getChild(0)).getLine(), ErrorType.l)); + } + } +} diff --git a/frontend/ast/NodeStack.java b/frontend/ast/NodeStack.java new file mode 100644 index 0000000..f689a03 --- /dev/null +++ b/frontend/ast/NodeStack.java @@ -0,0 +1,23 @@ +package frontend.ast; + +import java.util.ArrayList; + +public class NodeStack { + private ArrayList stack; + + public NodeStack() { + stack = new ArrayList(); + } + + public void push(Node node) { + stack.add(node); + } + + public Node pop() { + return stack.remove(stack.size() - 1); + } + + public int size() { + return stack.size(); + } +} diff --git a/frontend/ast/SyntaxType.java b/frontend/ast/SyntaxType.java new file mode 100644 index 0000000..8524924 --- /dev/null +++ b/frontend/ast/SyntaxType.java @@ -0,0 +1,66 @@ +package frontend.ast; + +public enum SyntaxType { + COMP_UNIT("CompUnit"), + + BTYPE("BType"), + + DECL("Decl"), + CONST_DECL("ConstDecl"), + VAR_DECL("VarDecl"), + + CONST_DEF("ConstDef"), + CONST_INIT_VAL("ConstInitVal"), + VAR_DEF("VarDef"), + INIT_VAL("InitVal"), + + FUNC_DEF("FuncDef"), + MAIN_FUNC_DEF("MainFuncDef"), + FUNC_TYPE("FuncType"), + + FUNC_FORMAL_PARAM("FuncFParam"), + FUNC_FORMAL_PARAM_S("FuncFParams"), + FUNC_REAL_PARAM_S("FuncRParams"), + + BLOCK("Block"), + BLOCK_ITEM("BlockItem"), + + STMT("Stmt"), + FOR_STMT("ForStmt"), + + UNARY_OP("UnaryOp"), + IDENT("Ident"), + + EXP("Exp"), + LVAL_EXP("LVal"), + PRIMARY_EXP("PrimaryExp"), + UNARY_EXP("UnaryExp"), + MUL_EXP("MulExp"), + ADD_EXP("AddExp"), + REL_EXP("RelExp"), + EQ_EXP("EqExp"), + LAND_EXP("LAndExp"), + LOR_EXP("LOrExp"), + CONST_EXP("ConstExp"), + COND_EXP("Cond"), + + NUMBER("Number"), + CHARACTER("Character"), + + INT_CONST("IntConst"), + STRING_CONST("StringConst"), + CHAR_CONST("CharConst"), + + TOKEN("Token"); + + private final String Name; + + SyntaxType(String Name) { + this.Name = Name; + } + + @Override + public String toString() { + return this.Name; + } +} diff --git a/frontend/ast/block/Block.java b/frontend/ast/block/Block.java new file mode 100644 index 0000000..57f5f80 --- /dev/null +++ b/frontend/ast/block/Block.java @@ -0,0 +1,49 @@ +package frontend.ast.block; + +import java.util.ArrayList; + +import error.Errors; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; + +public class Block extends Node { + private boolean isFuncBlock; + + public Block(TokenStream ts) { + super(SyntaxType.BLOCK, ts); + isFuncBlock = false; + } + + public void parse(Errors errors) { + TokenNode lbrace = new TokenNode(this.ts); + addChild(lbrace); + while (getCurrToken().getType() != TokenType.RBRACE) { + BlockItem bit = new BlockItem(this.ts); + bit.parse(errors); + addChild(bit); + } + TokenNode rbrace = new TokenNode(this.ts); + addChild(rbrace); + } + + public ArrayList getBlockItems() { + ArrayList blockItems = new ArrayList<>(); + for (int i = 0; i < getChildren().size(); i++) { + if (getChild(i) instanceof BlockItem) { + blockItems.add((BlockItem) getChild(i)); + } + } + return blockItems; + } + + public boolean isFuncBlock() { + return isFuncBlock; + } + + public void setIsFuncBlock(boolean isFuncBlock) { + this.isFuncBlock = isFuncBlock; + } +} diff --git a/frontend/ast/block/BlockItem.java b/frontend/ast/block/BlockItem.java new file mode 100644 index 0000000..ba18d81 --- /dev/null +++ b/frontend/ast/block/BlockItem.java @@ -0,0 +1,28 @@ +package frontend.ast.block; + +import error.Errors; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.decl.Decl; + +public class BlockItem extends Node { + public BlockItem(TokenStream ts) { + super(SyntaxType.BLOCK_ITEM, ts); + } + + public void parse(Errors errors) { + if (getCurrToken().getType() == TokenType.CONSTTK + || getCurrToken().getType() == TokenType.STATICTK + || getCurrToken().getType() == TokenType.INTTK) { + Decl decl = new Decl(this.ts); + decl.parse(errors); + addChild(decl); + } else { + Stmt stmt = new Stmt(this.ts); + stmt.parse(errors); + addChild(stmt); + } + } +} diff --git a/frontend/ast/block/ForStmt.java b/frontend/ast/block/ForStmt.java new file mode 100644 index 0000000..21c5056 --- /dev/null +++ b/frontend/ast/block/ForStmt.java @@ -0,0 +1,57 @@ +package frontend.ast.block; + +import frontend.ast.SyntaxType; +import frontend.ast.token.TokenNode; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.Node; +import frontend.ast.exp.Exp; +import frontend.ast.exp.LVal; + +import java.util.ArrayList; + +import error.Errors; + +public class ForStmt extends Node { + public ForStmt(TokenStream ts) { + super(SyntaxType.FOR_STMT, ts); + } + + public void parse(Errors errors) { + handleAssign(errors); + while (getCurrToken().getType() == TokenType.COMMA) { + addChild(new TokenNode(ts)); // comma + handleAssign(errors); + } + } + + public void handleAssign(Errors errors) { + LVal lval = new LVal(this.ts); + lval.parse(errors); + addChild(lval); + addChild(new TokenNode(ts)); // assign + Exp exp = new Exp(this.ts); + exp.parse(errors); + addChild(exp); + } + + public ArrayList getLValList() { + ArrayList lvalList = new ArrayList<>(); + for (int i = 0; i < getChildren().size(); i++) { + if (getChild(i) instanceof LVal) { + lvalList.add((LVal) getChild(i)); + } + } + return lvalList; + } + + public ArrayList getExpList() { + ArrayList expList = new ArrayList<>(); + for (int i = 0; i < getChildren().size(); i++) { + if (getChild(i) instanceof Exp) { + expList.add((Exp) getChild(i)); + } + } + return expList; + } +} diff --git a/frontend/ast/block/Stmt.java b/frontend/ast/block/Stmt.java new file mode 100644 index 0000000..cf40506 --- /dev/null +++ b/frontend/ast/block/Stmt.java @@ -0,0 +1,274 @@ +package frontend.ast.block; + +import error.Errors; + +import java.util.ArrayList; + +import error.Error; +import error.ErrorType; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; +import frontend.ast.exp.Exp; +import frontend.ast.exp.Cond; +import frontend.ast.exp.LVal; + +public class Stmt extends Node { + private boolean getint; + + public Stmt(TokenStream ts) { + super(SyntaxType.STMT, ts); + getint = false; + } + + public void parse(Errors errors) { + if (getCurrToken().getType() == TokenType.LBRACE) { + Block block = new Block(this.ts); + block.parse(errors); + addChild(block); + } else if (getCurrToken().getType() == TokenType.IFTK) { + handleIf(errors); + } else if (getCurrToken().getType() == TokenType.FORTK) { + handleFor(errors); + } else if (getCurrToken().getType() == TokenType.BREAKTK) { + TokenNode breakkk = new TokenNode(this.ts); + addChild(breakkk); + if (getCurrToken().getType() == TokenType.SEMICN) { + TokenNode semicolon = new TokenNode(this.ts); + addChild(semicolon); + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.i)); + } + } else if (getCurrToken().getType() == TokenType.CONTINUETK) { + TokenNode continuekk = new TokenNode(this.ts); + addChild(continuekk); + if (getCurrToken().getType() == TokenType.SEMICN) { + TokenNode semicolon = new TokenNode(this.ts); + addChild(semicolon); + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.i)); + } + } else if (getCurrToken().getType() == TokenType.RETURNTK) { + handleReturn(errors); + } else if (getCurrToken().getType() == TokenType.PRINTFTK) { + handlePrintf(errors); + } else { + handleAssign(errors); + } + } + + public void handleIf(Errors errors) { + TokenNode ifkk = new TokenNode(this.ts); + addChild(ifkk); + TokenNode lparent = new TokenNode(this.ts); + addChild(lparent); + Cond cond = new Cond(this.ts); + cond.parse(errors); + addChild(cond); + if (getCurrToken().getType() == TokenType.RPARENT) { + TokenNode rparent = new TokenNode(this.ts); + addChild(rparent); + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.j)); + } + Stmt stmt = new Stmt(this.ts); + stmt.parse(errors); + addChild(stmt); + if (getCurrToken().getType() == TokenType.ELSETK) { + TokenNode elsekk = new TokenNode(this.ts); + addChild(elsekk); + Stmt elseStmt = new Stmt(this.ts); + elseStmt.parse(errors); + addChild(elseStmt); + } + } + + public void handleFor(Errors errors) { + TokenNode forkk = new TokenNode(this.ts); + addChild(forkk); + TokenNode lparent = new TokenNode(this.ts); + addChild(lparent); + if (getCurrToken().getType() == TokenType.SEMICN) { + TokenNode semicolon = new TokenNode(this.ts); + addChild(semicolon); + } else { + ForStmt fst = new ForStmt(this.ts); + fst.parse(errors); + addChild(fst); + TokenNode semicolon = new TokenNode(this.ts); + addChild(semicolon); + } + if (getCurrToken().getType() == TokenType.SEMICN) { + TokenNode semicolon = new TokenNode(this.ts); + addChild(semicolon); + } else { + Cond cond = new Cond(this.ts); + cond.parse(errors); + addChild(cond); + TokenNode semicolon = new TokenNode(this.ts); + addChild(semicolon); + } + if (getCurrToken().getType() == TokenType.RPARENT) { + TokenNode rparent = new TokenNode(this.ts); + addChild(rparent); + } else { + ForStmt fst = new ForStmt(this.ts); + fst.parse(errors); + addChild(fst); + TokenNode rparent = new TokenNode(this.ts); + addChild(rparent); + } + Stmt stmt = new Stmt(this.ts); + stmt.parse(errors); + addChild(stmt); + } + + public void handleReturn(Errors errors) { + TokenNode returnkk = new TokenNode(this.ts); + addChild(returnkk); + if (currentIsExp()) { + Exp exp = new Exp(this.ts); + exp.parse(errors); + addChild(exp); + } + if (getCurrToken().getType() == TokenType.SEMICN) { + TokenNode semicolon = new TokenNode(this.ts); + addChild(semicolon); + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.i)); + } + } + + public void handlePrintf(Errors errors) { + TokenNode printfkk = new TokenNode(this.ts); + addChild(printfkk); + addChild(new TokenNode(this.ts)); // lparent + addChild(new TokenNode(this.ts)); // strconst + while (getCurrToken().getType() == TokenType.COMMA) { + addChild(new TokenNode(this.ts)); // comma + Exp exp = new Exp(this.ts); + exp.parse(errors); + addChild(exp); + } + if (getCurrToken().getType() != TokenType.RPARENT) { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.j)); + } else { + addChild(new TokenNode(this.ts)); // rparent + } + if (getCurrToken().getType() != TokenType.SEMICN) { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.i)); + } else { + addChild(new TokenNode(this.ts)); // semicolon + } + } + + public void handleAssign(Errors errors) { + if (getCurrToken().getType() == TokenType.IDENFR) { + if (this.ts.peek(1).getType() == TokenType.ASSIGN) { + LVal lval = new LVal(this.ts); + lval.parse(errors); + addChild(lval); + addChild(new TokenNode(this.ts)); // assign + if (getCurrToken().getValue().equals("getint")) { + getint = true; + } + Exp exp = new Exp(this.ts); + exp.parse(errors); + addChild(exp); + if (getCurrToken().getType() == TokenType.SEMICN) { + addChild(new TokenNode(this.ts)); // semicolon + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.i)); + } + } else if (this.ts.peek(1).getType() == TokenType.LBRACK) { + int start = this.ts.getCurrentIndex(); + LVal lval = new LVal(this.ts); + lval.parse(errors); + if (getCurrToken().getType() == TokenType.ASSIGN) { + addChild(lval); + addChild(new TokenNode(this.ts)); // assign + if (getCurrToken().getValue().equals("getint")) { + getint = true; + } + handleExpInAssign(errors); + } else { + this.ts.resetIndex(start); + // parse exp ; + handleExpInAssign(errors); + } + } else { + handleExpInAssign(errors); + } + } else { + if (currentIsExp()) { + handleExpInAssign(errors); + } else { + if (getCurrToken().getType() == TokenType.SEMICN) { + addChild(new TokenNode(this.ts)); // semicolon + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.i)); + } + } + } + } + + public void handleExpInAssign(Errors errors) { + Exp exp = new Exp(this.ts); + exp.parse(errors); + addChild(exp); + if (getCurrToken().getType() == TokenType.SEMICN) { + addChild(new TokenNode(this.ts)); // semicolon + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.i)); + } + } + + public boolean currentIsExp() { + TokenType t = getCurrToken().getType(); + return t == TokenType.PLUS || t == TokenType.MINU || t == TokenType.NOT + || t == TokenType.IDENFR || t == TokenType.LPARENT || t == TokenType.INTCON; + } + + public boolean isGetint() { + return getint; + } + + public ArrayList getExpList() { + ArrayList expList = new ArrayList<>(); + for (int i = 0; i < getChildren().size(); i++) { + if (getChild(i) instanceof Exp) { + expList.add((Exp) getChild(i)); + } + } + return expList; + } + + public Cond getCond() { //just for fortype stmt + for (int i = 0; i < getChildren().size(); i++) { + if (getChild(i) instanceof Cond) { + return (Cond) getChild(i); + } + } + return null; + } + + public ForStmt getinitStmt() { + if (getChild(2) instanceof ForStmt) { + return (ForStmt) getChild(2); + } + return null; + } + + public ForStmt getStepStmt() { + if (getChild(getChildren().size() - 3) instanceof ForStmt) { + return (ForStmt) getChild(getChildren().size() - 3); + } + return null; + } + + public Stmt getBodyStmt() { + return (Stmt) getChild(getChildren().size() - 1); + } +} diff --git a/frontend/ast/decl/ConstDecl.java b/frontend/ast/decl/ConstDecl.java new file mode 100644 index 0000000..015f087 --- /dev/null +++ b/frontend/ast/decl/ConstDecl.java @@ -0,0 +1,51 @@ +package frontend.ast.decl; + +import error.Errors; +import error.ErrorType; + +import java.util.ArrayList; + +import error.Error; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.ast.token.TokenNode; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; + +public class ConstDecl extends Node { + public ConstDecl(TokenStream ts) { + super(SyntaxType.CONST_DECL, ts); + } + + public void parse(Errors errors) { + TokenNode constkk = new TokenNode(this.ts); + addChild(constkk); + TokenNode intkk = new TokenNode(this.ts); + addChild(intkk); + while (true) { + ConstDef cdef = new ConstDef(this.ts); + cdef.parse(errors); + addChild(cdef); + if (getCurrToken().getType() != TokenType.COMMA) { + break; + } else { + TokenNode comma = new TokenNode(this.ts); + addChild(comma); + } + } + if (getCurrToken().getType() != TokenType.SEMICN) { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.i)); + } else { + TokenNode semicoln = new TokenNode(this.ts); + addChild(semicoln); + } + } + + public ArrayList GetConstDefs() { + ArrayList constDefs = new ArrayList<>(); + for (int i = 2; i < getChildren().size(); i += 2) { + constDefs.add((ConstDef) getChild(i)); + } + return constDefs; + } +} diff --git a/frontend/ast/decl/ConstDef.java b/frontend/ast/decl/ConstDef.java new file mode 100644 index 0000000..51166b8 --- /dev/null +++ b/frontend/ast/decl/ConstDef.java @@ -0,0 +1,66 @@ +package frontend.ast.decl; + +import error.Error; +import error.ErrorType; +import error.Errors; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.ast.exp.ConstExp; +import frontend.ast.token.TokenNode; +import frontend.ast.val.ConstInitVal; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import midend.symbol.ArraySymbol; +import midend.symbol.Symbol; +import midend.symbol.SymbolType; + +public class ConstDef extends Node { + private boolean isArray; + + public ConstDef(TokenStream ts) { + super(SyntaxType.CONST_DEF, ts); + isArray = false; + } + + public void parse(Errors errors) { + TokenNode ident = new TokenNode(this.ts); + addChild(ident); + if (getCurrToken().getType() == TokenType.LBRACK) { + TokenNode lbrack = new TokenNode(this.ts); + addChild(lbrack); + isArray = true; + ConstExp cep = new ConstExp(this.ts); + cep.parse(errors); + addChild(cep); + if (getCurrToken().getType() == TokenType.RBRACK) { + TokenNode rbrack = new TokenNode(this.ts); + addChild(rbrack); + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.k)); + } + } + TokenNode assign = new TokenNode(this.ts); + addChild(assign); + ConstInitVal civ = new ConstInitVal(this.ts); + civ.parse(errors); + addChild(civ); + } + + public Symbol getSymbol() { + if (isArray) { + TokenNode tn = (TokenNode) getChild(0); + ArraySymbol arraySymbol = new ArraySymbol(tn.getName(), + SymbolType.CONST_INT_ARRAY, tn.getLine(), + ((ConstExp) getChild(2)).getValue()); + arraySymbol.addValue(((ConstInitVal) getChild(getChildren().size() - 1)).getValue()); + arraySymbol.fullValue(); + return arraySymbol; + } else { + TokenNode tn = (TokenNode) getChild(0); + Symbol valueSymbol = new Symbol(tn.getName(), + SymbolType.CONST_INT, tn.getLine()); + valueSymbol.addValue(((ConstInitVal) getChild(getChildren().size() - 1)).getValue()); + return valueSymbol; + } + } +} diff --git a/frontend/ast/decl/Decl.java b/frontend/ast/decl/Decl.java new file mode 100644 index 0000000..6caf222 --- /dev/null +++ b/frontend/ast/decl/Decl.java @@ -0,0 +1,25 @@ +package frontend.ast.decl; + +import error.Errors; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; + +public class Decl extends Node { + public Decl(TokenStream ts) { + super(SyntaxType.DECL, ts); + } + + public void parse(Errors errors) { + if (getCurrToken().getType() == TokenType.CONSTTK) { + ConstDecl cd = new ConstDecl(this.ts); + cd.parse(errors); + addChild(cd); + } else { + VarDecl vd = new VarDecl(this.ts); + vd.parse(errors); + addChild(vd); + } + } +} diff --git a/frontend/ast/decl/VarDecl.java b/frontend/ast/decl/VarDecl.java new file mode 100644 index 0000000..516d18c --- /dev/null +++ b/frontend/ast/decl/VarDecl.java @@ -0,0 +1,59 @@ +package frontend.ast.decl; + +import error.ErrorType; +import error.Errors; + +import java.util.ArrayList; + +import error.Error; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.ast.token.TokenNode; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; + +public class VarDecl extends Node { + public VarDecl(TokenStream ts) { + super(SyntaxType.VAR_DECL, ts); + } + + public void parse(Errors errors) { + if (getCurrToken().getType() == TokenType.STATICTK) { + TokenNode staitckk = new TokenNode(ts); + addChild(staitckk); + } + TokenNode intkk = new TokenNode(ts); + addChild(intkk); + while (true) { + VarDef vdf = new VarDef(ts); + vdf.parse(errors); + addChild(vdf); + if (getCurrToken().getType() == TokenType.COMMA) { + TokenNode comma = new TokenNode(ts); + addChild(comma); + } else { + break; + } + } + if (getCurrToken().getType() == TokenType.SEMICN) { + TokenNode semicn = new TokenNode(ts); + addChild(semicn); + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.i)); + } + } + + public ArrayList GetVarDefs() { + ArrayList varDefs = new ArrayList(); + if (getChild(1) instanceof VarDef) { + for (int i = 1; i < getChildren().size(); i += 2) { + varDefs.add((VarDef) getChild(i)); + } + } else { + for (int i = 2; i < getChildren().size(); i += 2) { + varDefs.add((VarDef) getChild(i)); + } + } + return varDefs; + } +} diff --git a/frontend/ast/decl/VarDef.java b/frontend/ast/decl/VarDef.java new file mode 100644 index 0000000..44056ef --- /dev/null +++ b/frontend/ast/decl/VarDef.java @@ -0,0 +1,117 @@ +package frontend.ast.decl; + +import error.Errors; +import error.Error; +import error.ErrorType; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.ast.exp.ConstExp; +import frontend.ast.token.TokenNode; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.val.InitVal; + +import midend.symbol.Symbol; +import midend.symbol.SymbolManager; +import midend.symbol.SymbolType; +import midend.symbol.ArraySymbol; + +public class VarDef extends Node { + private boolean isArray; + + public VarDef(TokenStream ts) { + super(SyntaxType.VAR_DEF, ts); + isArray = false; + } + + public void parse(Errors errors) { + TokenNode ident = new TokenNode(this.ts); + addChild(ident); + if (getCurrToken().getType() == TokenType.LBRACK) { + TokenNode lbrack = new TokenNode(this.ts); + addChild(lbrack); + isArray = true; + ConstExp cep = new ConstExp(this.ts); + cep.parse(errors); + addChild(cep); + if (getCurrToken().getType() == TokenType.RBRACK) { + TokenNode rbrack = new TokenNode(this.ts); + addChild(rbrack); + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.k)); + } + } + if (getCurrToken().getType() == TokenType.ASSIGN) { + TokenNode assign = new TokenNode(this.ts); + addChild(assign); + InitVal itv = new InitVal(this.ts); + itv.parse(errors); + addChild(itv); + } + } + + public Symbol getSymbol(int isStatic) { + if (isStatic == 1) { //static修饰的变量有初值 + if (isArray) { + TokenNode tn = (TokenNode) getChild(0); + ArraySymbol arraySymbol = new ArraySymbol(tn.getName(), + SymbolType.STATIC_INT_ARRAY, tn.getLine(), + ((ConstExp) getChild(2)).getValue()); + if (HaveInitVal()) { + arraySymbol.addValue(((InitVal) getChild(getChildren().size() - 1)).getValue()); + } + arraySymbol.fullValue(); + return arraySymbol; + } else { + TokenNode tn = (TokenNode) getChild(0); + Symbol valueSymbol = new Symbol(tn.getName(), + SymbolType.STATIC_INT, tn.getLine()); + if (HaveInitVal()) { + valueSymbol.addValue(((InitVal) getChild(getChildren().size() - 1)).getValue()); + } else { + valueSymbol.addValue(0); + } + return valueSymbol; + } + } else { //要判断是否为全局变量,如果为全局变量,也应该赋初值 + if (isArray) { + TokenNode tn = (TokenNode) getChild(0); + ArraySymbol arraySymbol = new ArraySymbol(tn.getName(), + SymbolType.INT_ARRAY, tn.getLine(), + ((ConstExp) getChild(2)).getValue()); + if (SymbolManager.IsGlobal()) { + if (HaveInitVal()) { + arraySymbol.addValue(((InitVal) getChild( + getChildren().size() - 1)).getValue()); + } + arraySymbol.fullValue(); + } + return arraySymbol; + } else { + TokenNode tn = (TokenNode) getChild(0); + Symbol symbol = new Symbol(tn.getName(), + SymbolType.INT, tn.getLine()); + if (SymbolManager.IsGlobal()) { + if (HaveInitVal()) { + symbol.addValue(((InitVal) getChild( + getChildren().size() - 1)).getValue()); + } else { + symbol.addValue(0); + } + } + return symbol; + } + } + } + + public boolean HaveInitVal() { + return getChild(getChildren().size() - 1) instanceof InitVal; + } + + public InitVal getInitVal() { + if (HaveInitVal()) { + return (InitVal) getChild(getChildren().size() - 1); + } + return null; + } +} diff --git a/frontend/ast/exp/AddExp.java b/frontend/ast/exp/AddExp.java new file mode 100644 index 0000000..9a322a6 --- /dev/null +++ b/frontend/ast/exp/AddExp.java @@ -0,0 +1,73 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.NodeStack; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; +import midend.symbol.SymbolManager; +import error.Errors; + +public class AddExp extends Node { + public AddExp(TokenStream ts) { + super(SyntaxType.ADD_EXP, ts); + } + + public void parse(Errors errors) { + NodeStack stack = new NodeStack(); + while (true) { + MulExp mep = new MulExp(this.ts); + mep.parse(errors); + stack.push(mep); + if (isAddOp()) { + stack.push(new TokenNode(ts)); // addop + } else { + break; + } + } + if (stack.size() == 1) { + this.addChild((MulExp) stack.pop()); + } else { + AddExp temp = this; + while (stack.size() > 1) { + AddExp ae = new AddExp(this.ts); + MulExp mep = (MulExp) stack.pop(); + TokenNode op = (TokenNode) stack.pop(); + temp.addChild(ae); + temp.addChild(op); + temp.addChild(mep); + temp = ae; + } + temp.addChild((MulExp) stack.pop()); + } + } + + public boolean isAddOp() { + TokenType t = getCurrToken().getType(); + return t == TokenType.PLUS || t == TokenType.MINU; + } + + public int getType() { + if (getChildren().size() == 1) { + return ((MulExp) getChild(0)).getType(); + } else { + return ((AddExp) getChild(0)).getType() + | ((MulExp) getChild(2)).getType(); + } + } + + public int getValue() { + if (getChild(0) instanceof MulExp) { + return ((MulExp) getChild(0)).getValue(); + } else { + int left = ((AddExp) getChild(0)).getValue(); + int right = ((MulExp) getChild(2)).getValue(); + if (((TokenNode) getChild(1)).getType() == TokenType.PLUS) { + return left + right; + } else { + return left - right; + } + } + } +} diff --git a/frontend/ast/exp/Cond.java b/frontend/ast/exp/Cond.java new file mode 100644 index 0000000..3ddff91 --- /dev/null +++ b/frontend/ast/exp/Cond.java @@ -0,0 +1,18 @@ +package frontend.ast.exp; + +import frontend.ast.SyntaxType; +import error.Errors; +import frontend.lexer.TokenStream; +import frontend.ast.Node; + +public class Cond extends Node { + public Cond(TokenStream ts) { + super(SyntaxType.COND_EXP, ts); + } + + public void parse(Errors errors) { + LOrExp lep = new LOrExp(this.ts); + lep.parse(errors); + addChild(lep); + } +} diff --git a/frontend/ast/exp/ConstExp.java b/frontend/ast/exp/ConstExp.java new file mode 100644 index 0000000..c83a048 --- /dev/null +++ b/frontend/ast/exp/ConstExp.java @@ -0,0 +1,22 @@ +package frontend.ast.exp; + +import error.Errors; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; + +public class ConstExp extends Node { + public ConstExp(TokenStream ts) { + super(SyntaxType.CONST_EXP, ts); + } + + public void parse(Errors errors) { + AddExp ade = new AddExp(ts); + ade.parse(errors); + addChild(ade); + } + + public int getValue() { + return ((AddExp) getChild(0)).getValue(); + } +} diff --git a/frontend/ast/exp/EqExp.java b/frontend/ast/exp/EqExp.java new file mode 100644 index 0000000..2d36914 --- /dev/null +++ b/frontend/ast/exp/EqExp.java @@ -0,0 +1,49 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.NodeStack; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; +import error.Errors; + +public class EqExp extends Node { + public EqExp(TokenStream ts) { + super(SyntaxType.EQ_EXP, ts); + } + + public void parse(Errors errors) { + NodeStack stack = new NodeStack(); + while (true) { + RelExp relexp = new RelExp(this.ts); + relexp.parse(errors); + stack.push(relexp); + if (isEqOp()) { + stack.push(new TokenNode(ts)); // eqop + } else { + break; + } + } + if(stack.size() == 1) { + this.addChild((RelExp)stack.pop()); + } else { + EqExp temp = this; + while (stack.size() > 1) { + EqExp eep = new EqExp(this.ts); + RelExp relexp = (RelExp)stack.pop(); + TokenNode eqop = (TokenNode)stack.pop(); + temp.addChild(eep); + temp.addChild(eqop); + temp.addChild(relexp); + temp = eep; + } + temp.addChild((RelExp)stack.pop()); + } + } + + public boolean isEqOp() { + TokenType t = getCurrToken().getType(); + return t == TokenType.EQL || t == TokenType.NEQ; + } +} diff --git a/frontend/ast/exp/Exp.java b/frontend/ast/exp/Exp.java new file mode 100644 index 0000000..2e58845 --- /dev/null +++ b/frontend/ast/exp/Exp.java @@ -0,0 +1,27 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import midend.symbol.SymbolManager; +import error.Errors; + +public class Exp extends Node { + public Exp(TokenStream ts) { + super(SyntaxType.EXP, ts); + } + + public void parse(Errors errors) { + AddExp addexp = new AddExp(this.ts); + addexp.parse(errors); + addChild(addexp); + } + + public int getType() { + return ((AddExp) getChild(0)).getType(); + } + + public int getValue() { + return ((AddExp) getChild(0)).getValue(); + } +} diff --git a/frontend/ast/exp/LAndExp.java b/frontend/ast/exp/LAndExp.java new file mode 100644 index 0000000..9759ef0 --- /dev/null +++ b/frontend/ast/exp/LAndExp.java @@ -0,0 +1,44 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.NodeStack; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; +import error.Errors; + +public class LAndExp extends Node { + public LAndExp(TokenStream ts) { + super(SyntaxType.LAND_EXP, ts); + } + + public void parse(Errors errors) { + NodeStack stack = new NodeStack(); + while (true) { + EqExp eep = new EqExp(this.ts); + eep.parse(errors); + stack.push(eep); + if (getCurrToken().getType() == TokenType.AND) { + stack.push(new TokenNode(ts)); // landop + } else { + break; + } + } + if (stack.size() == 1) { + this.addChild((EqExp)stack.pop()); + } else { + LAndExp temp = this; + while(stack.size() > 1) { + LAndExp lae = new LAndExp(this.ts); + EqExp eep = (EqExp)stack.pop(); + TokenNode landop = (TokenNode)stack.pop(); + temp.addChild(lae); + temp.addChild(landop); + temp.addChild(eep); + temp = lae; + } + temp.addChild((EqExp)stack.pop()); + } + } +} diff --git a/frontend/ast/exp/LOrExp.java b/frontend/ast/exp/LOrExp.java new file mode 100644 index 0000000..d4e80af --- /dev/null +++ b/frontend/ast/exp/LOrExp.java @@ -0,0 +1,44 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.NodeStack; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; +import error.Errors; + +public class LOrExp extends Node { + public LOrExp(TokenStream ts) { + super(SyntaxType.LOR_EXP, ts); + } + + public void parse(Errors errors) { + NodeStack stack = new NodeStack(); + while (true) { + LAndExp andexp = new LAndExp(this.ts); + andexp.parse(errors); + stack.push(andexp); + if (getCurrToken().getType() == TokenType.OR) { + stack.push(new TokenNode(ts)); // lorop + } else { + break; + } + } + if (stack.size() == 1) { + this.addChild((LAndExp)stack.pop()); + } else { + LOrExp temp = this; + while(stack.size() > 1) { + LOrExp loe = new LOrExp(this.ts); + LAndExp lae = (LAndExp)stack.pop(); + TokenNode lorop = (TokenNode)stack.pop(); + temp.addChild(loe); + temp.addChild(lorop); + temp.addChild(lae); + temp = loe; + } + temp.addChild((LAndExp)stack.pop()); + } + } +} diff --git a/frontend/ast/exp/LVal.java b/frontend/ast/exp/LVal.java new file mode 100644 index 0000000..51fd790 --- /dev/null +++ b/frontend/ast/exp/LVal.java @@ -0,0 +1,59 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.ast.token.TokenNode; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import midend.symbol.SymbolManager; +import midend.symbol.Symbol; +import midend.symbol.ArraySymbol; +import error.Errors; +import error.Error; +import error.ErrorType; + +public class LVal extends Node { + public LVal(TokenStream ts) { + super(SyntaxType.LVAL_EXP, ts); + } + + public void parse(Errors errors) { + addChild(new TokenNode(this.ts)); // idenfr + if (getCurrToken().getType() == TokenType.LBRACK) { + addChild(new TokenNode(this.ts)); // lbrack + Exp exp = new Exp(this.ts); + exp.parse(errors); + addChild(exp); + if (getCurrToken().getType() == TokenType.RBRACK) { + addChild(new TokenNode(this.ts)); // rbrack + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.k)); + } + } + } + + public int getType() { + if (getChildren().size() == 1) { + TokenNode idenfr = (TokenNode) getChild(0); + Symbol symbol = SymbolManager.getSymbol(idenfr.getName()); + if (symbol instanceof ArraySymbol) { + return 1; + } + return 0; + } else { + return 0; + } + } + + public int getValue() { + TokenNode idenfr = (TokenNode) getChild(0); //idenfr一定是个常量,可在符号表找到且有值 + if (getChildren().size() == 1) { + Symbol symbol = SymbolManager.getSymbol(idenfr.getName()); + return symbol.getValue(0); + } else { + int index = ((Exp) getChild(2)).getValue(); + Symbol symbol = SymbolManager.getSymbol(idenfr.getName()); + return symbol.getValue(index); + } + } +} diff --git a/frontend/ast/exp/MulExp.java b/frontend/ast/exp/MulExp.java new file mode 100644 index 0000000..96f0aeb --- /dev/null +++ b/frontend/ast/exp/MulExp.java @@ -0,0 +1,75 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; +import frontend.ast.NodeStack; +import midend.symbol.SymbolManager; +import error.Errors; + +public class MulExp extends Node { + public MulExp(TokenStream ts) { + super(SyntaxType.MUL_EXP, ts); + } + + public void parse(Errors errors) { + NodeStack stack = new NodeStack(); + while (true) { + UnaryExp uep = new UnaryExp(this.ts); + uep.parse(errors); + stack.push(uep); + if (isMulOp()) { + stack.push(new TokenNode(ts)); // mulop + } else { + break; + } + } + if (stack.size() == 1) { + addChild((UnaryExp)stack.pop()); + } else { + MulExp temp = this; + while (stack.size() > 1) { + MulExp mep = new MulExp(this.ts); + UnaryExp uep = (UnaryExp) stack.pop(); + TokenNode mulop = (TokenNode) stack.pop(); + temp.addChild(mep); + temp.addChild(mulop); + temp.addChild(uep); + temp = mep; + } + temp.addChild((UnaryExp)stack.pop()); + } + } + + public boolean isMulOp() { + TokenType t = getCurrToken().getType(); + return t == TokenType.MULT || t == TokenType.DIV || t == TokenType.MOD; + } + + public int getType() { + if (getChildren().size() == 1) { + return ((UnaryExp) getChild(0)).getType(); + } else { + return ((MulExp) getChild(0)).getType() + | ((UnaryExp) getChild(2)).getType(); + } + } + + public int getValue() { + if (getChild(0) instanceof UnaryExp) { + return ((UnaryExp) getChild(0)).getValue(); + } else { + int left = ((MulExp) getChild(0)).getValue(); + int right = ((UnaryExp) getChild(2)).getValue(); + if (((TokenNode) getChild(1)).getType() == TokenType.MULT) { + return left * right; + } else if (((TokenNode) getChild(1)).getType() == TokenType.DIV) { + return left / right; + } else { + return left % right; + } + } + } +} diff --git a/frontend/ast/exp/NumberExp.java b/frontend/ast/exp/NumberExp.java new file mode 100644 index 0000000..12b93af --- /dev/null +++ b/frontend/ast/exp/NumberExp.java @@ -0,0 +1,21 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import error.Errors; +import frontend.ast.token.TokenNode; + +public class NumberExp extends Node { + public NumberExp(TokenStream ts) { + super(SyntaxType.NUMBER, ts); + } + + public void parse(Errors errors) { + addChild(new TokenNode(ts)); //intconst + } + + public int getValue() { + return Integer.parseInt(((TokenNode) getChild(0)).getValue()); + } +} diff --git a/frontend/ast/exp/PrimaryExp.java b/frontend/ast/exp/PrimaryExp.java new file mode 100644 index 0000000..9934797 --- /dev/null +++ b/frontend/ast/exp/PrimaryExp.java @@ -0,0 +1,58 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; +import error.Errors; +import error.Error; +import error.ErrorType; + +public class PrimaryExp extends Node { + public PrimaryExp(TokenStream ts) { + super(SyntaxType.PRIMARY_EXP, ts); + } + + public void parse(Errors errors) { + if (getCurrToken().getType() == TokenType.LPARENT) { + addChild(new TokenNode(ts)); // lparent + Exp exp = new Exp(this.ts); + exp.parse(errors); + addChild(exp); + if (getCurrToken().getType() == TokenType.RPARENT) { + addChild(new TokenNode(ts)); // rparent + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.j)); + } + } else if (getCurrToken().getType() == TokenType.IDENFR) { + LVal lval = new LVal(this.ts); + lval.parse(errors); + addChild(lval); + } else { + NumberExp num = new NumberExp(this.ts); + num.parse(errors); + addChild(num); + } + } + + public int getType() { + if (getChild(0) instanceof TokenNode) { + return ((Exp) getChild(1)).getType(); + } else if (getChild(0) instanceof LVal) { + return ((LVal) getChild(0)).getType(); + } else { + return 0; + } + } + + public int getValue() { + if (getChild(0) instanceof TokenNode) { + return ((Exp) getChild(1)).getValue(); + } else if (getChild(0) instanceof LVal) { + return ((LVal) getChild(0)).getValue(); + } else { + return ((NumberExp) getChild(0)).getValue(); + } + } +} diff --git a/frontend/ast/exp/RelExp.java b/frontend/ast/exp/RelExp.java new file mode 100644 index 0000000..4d244f5 --- /dev/null +++ b/frontend/ast/exp/RelExp.java @@ -0,0 +1,50 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.NodeStack; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; +import error.Errors; + +public class RelExp extends Node { + public RelExp(TokenStream ts) { + super(SyntaxType.REL_EXP, ts); + } + + public void parse(Errors errors) { + NodeStack stack = new NodeStack(); + while (true) { + AddExp addexp = new AddExp(this.ts); + addexp.parse(errors); + stack.push(addexp); + if (isRelOp()) { + stack.push(new TokenNode(ts)); // relop + } else { + break; + } + } + if (stack.size() == 1) { + this.addChild((AddExp)stack.pop()); + } else { + RelExp temp = this; + while(stack.size() > 1) { + RelExp rexp = new RelExp(this.ts); + AddExp addexp = (AddExp)stack.pop(); + TokenNode relop = (TokenNode)stack.pop(); + temp.addChild(rexp); + temp.addChild(relop); + temp.addChild(addexp); + temp = rexp; + } + temp.addChild((AddExp)stack.pop()); + } + } + + public boolean isRelOp() { + TokenType t = getCurrToken().getType(); + return t == TokenType.LSS || t == TokenType.GRE + || t == TokenType.LEQ || t == TokenType.GEQ; + } +} diff --git a/frontend/ast/exp/UnaryExp.java b/frontend/ast/exp/UnaryExp.java new file mode 100644 index 0000000..bd5f3a7 --- /dev/null +++ b/frontend/ast/exp/UnaryExp.java @@ -0,0 +1,124 @@ +package frontend.ast.exp; + +import java.util.ArrayList; + +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; +import frontend.ast.func.FuncRParams; +import midend.symbol.FuncSymbol; +import midend.symbol.SymbolManager; +import error.Errors; + +import error.Error; +import error.ErrorType; + +public class UnaryExp extends Node { + public UnaryExp(TokenStream ts) { + super(SyntaxType.UNARY_EXP, ts); + } + + public void parse(Errors errors) { + if (isUnaryOp()) { + UnaryOp uop = new UnaryOp(ts); + uop.parse(errors); + addChild(uop); + UnaryExp uep = new UnaryExp(ts); + uep.parse(errors); + addChild(uep); + } else if (getCurrToken().getType() == TokenType.IDENFR + && this.ts.peek(1).getType() == TokenType.LPARENT) { + addChild(new TokenNode(ts)); // idenfr + addChild(new TokenNode(ts)); // lparent + if (isExp()) { + FuncRParams frp = new FuncRParams(ts); + frp.parse(errors); + addChild(frp); + } + if (getCurrToken().getType() == TokenType.RPARENT) { + addChild(new TokenNode(ts)); // rparent + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.j)); + } + } else { + PrimaryExp pme = new PrimaryExp(ts); + pme.parse(errors); + addChild(pme); + } + } + + public boolean isUnaryOp() { + return getCurrToken().getType() == TokenType.PLUS + || getCurrToken().getType() == TokenType.MINU + || getCurrToken().getType() == TokenType.NOT; + } + + public boolean isExp() { + TokenType t = getCurrToken().getType(); + return t == TokenType.PLUS || t == TokenType.MINU || t == TokenType.NOT + || t == TokenType.IDENFR || t == TokenType.LPARENT || t == TokenType.INTCON; + } + + public void handleFuncCall(Errors errors) { // 当其为函数调用形式时才会调用 + TokenNode funcIdenfr = (TokenNode) getChild(0); + if (funcIdenfr.getName().equals("getint")) { + if (getChildren().size() == 4) { + errors.addError(new Error(funcIdenfr.getLine(), ErrorType.d)); + } + return; + } + FuncSymbol funcSymbol = (FuncSymbol) SymbolManager.getSymbol(funcIdenfr.getName()); + if (funcSymbol == null) { + errors.addError(new Error(funcIdenfr.getLine(), ErrorType.c)); + return; + } + int fparaNum = funcSymbol.getParamNum(); + int rparaNum = 0; + if (getChildren().size() >= 3 && getChild(2) instanceof FuncRParams) { + FuncRParams frp = (FuncRParams) getChild(2); + rparaNum = frp.getParamNum(); + if (rparaNum == fparaNum) { + frp.checkParamType(funcSymbol, errors, funcIdenfr.getLine()); + } + } + if (fparaNum != rparaNum) { + errors.addError(new Error(funcIdenfr.getLine(), ErrorType.d)); + } + } + + public int getType() { + if (getChild(0) instanceof PrimaryExp) { + return ((PrimaryExp) getChild(0)).getType(); + } else if (getChild(0) instanceof TokenNode) { + return 0; + } else { + return ((UnaryExp) getChild(1)).getType(); + } + } + + public int getValue() { + if (getChild(0) instanceof UnaryOp) { + UnaryOp uop = (UnaryOp) getChild(0); + TokenNode opToken = (TokenNode) uop.getChild(0); + return opToken.getType() == TokenType.PLUS ? ((UnaryExp) getChild(1)).getValue() + : -((UnaryExp) getChild(1)).getValue(); + } else if (getChild(0) instanceof PrimaryExp) { + return ((PrimaryExp) getChild(0)).getValue(); + } else { + return 0; // 0表示这个是函数,getvalue只是对于常量或常量表达式取值,所以正常情况调用getvalue函数时是不会跳转到这个分支的 + } + } + + public ArrayList getParamList() { + if (!(getChild(0) instanceof TokenNode)) { + return null; + } else { + if (getChildren().size() >= 3 && (getChild(2) instanceof FuncRParams)) { + return ((FuncRParams) getChild(2)).getParamList(); + } + return new ArrayList(); + } + } +} diff --git a/frontend/ast/exp/UnaryOp.java b/frontend/ast/exp/UnaryOp.java new file mode 100644 index 0000000..b5931ff --- /dev/null +++ b/frontend/ast/exp/UnaryOp.java @@ -0,0 +1,17 @@ +package frontend.ast.exp; + +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import error.Errors; +import frontend.ast.token.TokenNode; + +public class UnaryOp extends Node { + public UnaryOp(TokenStream ts) { + super(SyntaxType.UNARY_OP, ts); + } + + public void parse(Errors errors) { + addChild(new TokenNode(ts)); // unary op + } +} diff --git a/frontend/ast/func/FuncDef.java b/frontend/ast/func/FuncDef.java new file mode 100644 index 0000000..569ec19 --- /dev/null +++ b/frontend/ast/func/FuncDef.java @@ -0,0 +1,108 @@ +package frontend.ast.func; + +import java.util.ArrayList; + +import error.Error; +import error.ErrorType; +import error.Errors; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.ast.token.TokenNode; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.block.Block; +import frontend.ast.block.BlockItem; +import frontend.ast.decl.Decl; +import midend.symbol.Symbol; +import midend.symbol.SymbolType; +import midend.symbol.FuncSymbol; +import midend.symbol.ArraySymbol; +import midend.symbol.SymbolManager; + +public class FuncDef extends Node { + public FuncDef(TokenStream ts) { + super(SyntaxType.FUNC_DEF, ts); + } + + public void parse(Errors errors) { + FuncType ft = new FuncType(this.ts); + ft.parse(errors); + addChild(ft); + TokenNode ident = new TokenNode(this.ts); + addChild(ident); + TokenNode lparen = new TokenNode(this.ts); + addChild(lparen); + if (getCurrToken().getType() != TokenType.RPARENT && + getCurrToken().getType() != TokenType.LBRACE) { + FuncFParams ffp = new FuncFParams(this.ts); + ffp.parse(errors); + addChild(ffp); + if (getCurrToken().getType() == TokenType.RPARENT) { + TokenNode rparen = new TokenNode(this.ts); + addChild(rparen); + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.j)); + } + } else if (getCurrToken().getType() == TokenType.LBRACE) { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.j)); + } else { + TokenNode rparen = new TokenNode(this.ts); + addChild(rparen); + } + Block block = new Block(this.ts); + block.setIsFuncBlock(true); + block.parse(errors); + addChild(block); + } + + public Symbol getSymbol() { + if (((FuncType) getChild(0)).isVoid()) { + TokenNode tn = (TokenNode) getChild(1); + return new FuncSymbol(tn.getName(), + SymbolType.VOID_FUNC, tn.getLine(), 0); + } else { + TokenNode tn = (TokenNode) getChild(1); + return new FuncSymbol(tn.getName(), + SymbolType.INT_FUNC, tn.getLine(), 1); + } + } + + public void addParamSymbol(Symbol funcSymbol, Errors errors) { + if (getChild(3) instanceof FuncFParams) { + FuncFParams ffp = (FuncFParams) getChild(3); + ArrayList paramList = ffp.getParamList(); + for (FuncFParam param : paramList) { + Symbol paramSymbol = param.getSymbol(); + SymbolManager.addSymbol(paramSymbol, errors); + ((FuncSymbol) funcSymbol).addParamSymbol(paramSymbol); // 将形参存到函数的符号中 + if (paramSymbol instanceof ArraySymbol) { + ((FuncSymbol) funcSymbol).addParam(1); + } else { + ((FuncSymbol) funcSymbol).addParam(0); + } + } + } + } + + public void checkReturnNode(Errors errors) { + Block block = (Block) getChild(getChildren().size() - 1); + TokenNode rbrace = (TokenNode) block.getChild(block.getChildren().size() - 1); + if (block.getChildren().size() == 2) { + errors.addError(new Error(rbrace.getLine(), ErrorType.g)); + } else { + BlockItem bit = (BlockItem) block.getChild(block.getChildren().size() - 2); + if (bit.getChild(0) instanceof Decl) { + errors.addError(new Error(rbrace.getLine(), ErrorType.g)); + } else { + if (!(bit.getChild(0).getChild(0) instanceof TokenNode)) { + errors.addError(new Error(rbrace.getLine(), ErrorType.g)); + } else { + TokenNode returnNode = (TokenNode) bit.getChild(0).getChild(0); + if (returnNode.getType() != TokenType.RETURNTK) { + errors.addError(new Error(rbrace.getLine(), ErrorType.g)); + } + } + } + } + } +} diff --git a/frontend/ast/func/FuncFParam.java b/frontend/ast/func/FuncFParam.java new file mode 100644 index 0000000..18e9929 --- /dev/null +++ b/frontend/ast/func/FuncFParam.java @@ -0,0 +1,49 @@ +package frontend.ast.func; + +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; + +import midend.symbol.Symbol; +import midend.symbol.SymbolType; +import midend.symbol.ArraySymbol; + +import error.Errors; +import frontend.ast.token.TokenNode; +import error.ErrorType; +import error.Error; + +public class FuncFParam extends Node { + public FuncFParam(TokenStream ts) { + super(SyntaxType.FUNC_FORMAL_PARAM, ts); + } + + public void parse(Errors errors) { + TokenNode intkk = new TokenNode(this.ts); + addChild(intkk); + TokenNode ident = new TokenNode(this.ts); + addChild(ident); + if (getCurrToken().getType() == TokenType.LBRACK) { + TokenNode lbrack = new TokenNode(this.ts); + addChild(lbrack); + if (getCurrToken().getType() == TokenType.RBRACK) { + TokenNode rbrack = new TokenNode(this.ts); + addChild(rbrack); + } else { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.k)); + } + } + } + + public Symbol getSymbol() { + if (getChildren().size() == 2) { + TokenNode tn = (TokenNode) getChild(1); + return new Symbol(tn.getName(), SymbolType.INT, tn.getLine()); + } else { + TokenNode tn = (TokenNode) getChild(1); + return new ArraySymbol(tn.getName(), SymbolType.INT_ARRAY, tn.getLine(), -1); + //这里不求维数,因为函数形参为数组只是相当于一个指针 + } + } +} \ No newline at end of file diff --git a/frontend/ast/func/FuncFParams.java b/frontend/ast/func/FuncFParams.java new file mode 100644 index 0000000..39b19fa --- /dev/null +++ b/frontend/ast/func/FuncFParams.java @@ -0,0 +1,38 @@ +package frontend.ast.func; + +import error.Errors; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; + +import java.util.ArrayList; + +public class FuncFParams extends Node { + public FuncFParams(TokenStream ts) { + super(SyntaxType.FUNC_FORMAL_PARAM_S, ts); + } + + public void parse(Errors errors) { + while (true) { + FuncFParam ffp = new FuncFParam(this.ts); + ffp.parse(errors); + addChild(ffp); + if (getCurrToken().getType() == TokenType.COMMA) { + TokenNode comma = new TokenNode(this.ts); + addChild(comma); + } else { + break; + } + } + } + + public ArrayList getParamList() { + ArrayList paramList = new ArrayList<>(); + for (int i = 0; i < getChildren().size(); i += 2) { + paramList.add((FuncFParam) getChild(i)); + } + return paramList; + } +} diff --git a/frontend/ast/func/FuncRParams.java b/frontend/ast/func/FuncRParams.java new file mode 100644 index 0000000..9839bbf --- /dev/null +++ b/frontend/ast/func/FuncRParams.java @@ -0,0 +1,57 @@ +package frontend.ast.func; + +import java.util.ArrayList; + +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import error.Errors; +import error.Error; +import error.ErrorType; +import frontend.ast.token.TokenNode; +import frontend.ast.exp.Exp; +import midend.symbol.FuncSymbol; + +public class FuncRParams extends Node { + public FuncRParams(TokenStream ts) { + super(SyntaxType.FUNC_REAL_PARAM_S, ts); + } + + public void parse(Errors errors) { + while (true) { + Exp ep = new Exp(ts); + ep.parse(errors); + addChild(ep); + if (getCurrToken().getType() == TokenType.COMMA) { + addChild(new TokenNode(ts)); // comma + } else { + break; + } + } + } + + public int getParamNum() { + return (getChildren().size() + 1) / 2; + } + + public void checkParamType(FuncSymbol funcSymbol, Errors errors, int line) { + int fparaNum = funcSymbol.getParamNum(); + int rparaNum = getParamNum(); + int size = rparaNum < fparaNum ? rparaNum : fparaNum; + for (int i = 0; i < size; i++) { + Exp exp = (Exp) getChild(i * 2); + if (exp.getType() != funcSymbol.getParamType(i)) { + errors.addError(new Error(line, ErrorType.e)); + } + } + } + + public ArrayList getParamList() { + ArrayList paramList = new ArrayList(); + for (int i = 0; i < getChildren().size(); i += 2) { + paramList.add((Exp) getChild(i)); + } + return paramList; + } +} diff --git a/frontend/ast/func/FuncType.java b/frontend/ast/func/FuncType.java new file mode 100644 index 0000000..b34a180 --- /dev/null +++ b/frontend/ast/func/FuncType.java @@ -0,0 +1,27 @@ +package frontend.ast.func; + +import error.Errors; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.ast.token.TokenNode; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; + +public class FuncType extends Node { + public FuncType(TokenStream ts) { + super(SyntaxType.FUNC_TYPE, ts); + } + + public void parse(Errors errors) { + TokenNode ident = new TokenNode(this.ts); + addChild(ident); + } + + public boolean isVoid() { + return ((TokenNode) getChild(0)).getType() == TokenType.VOIDTK; + } + + public boolean isInt() { + return ((TokenNode) getChild(0)).getType() == TokenType.INTTK; + } +} diff --git a/frontend/ast/func/MainFuncDef.java b/frontend/ast/func/MainFuncDef.java new file mode 100644 index 0000000..322c0aa --- /dev/null +++ b/frontend/ast/func/MainFuncDef.java @@ -0,0 +1,60 @@ +package frontend.ast.func; + +import error.ErrorType; +import error.Errors; +import error.Error; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.ast.block.BlockItem; +import frontend.ast.decl.Decl; +import frontend.lexer.TokenStream; +import frontend.ast.token.TokenNode; +import frontend.lexer.TokenType; +import frontend.ast.block.Block; + +public class MainFuncDef extends Node { + public MainFuncDef(TokenStream ts) { + super(SyntaxType.MAIN_FUNC_DEF, ts); + } + + public void parse(Errors errors) { + TokenNode intkk = new TokenNode(this.ts); + addChild(intkk); + TokenNode mainkk = new TokenNode(this.ts); + addChild(mainkk); + TokenNode lparent = new TokenNode(this.ts); + addChild(lparent); + if (getCurrToken().getType() != TokenType.RPARENT) { + errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.j)); + } else { + TokenNode rparent = new TokenNode(this.ts); + addChild(rparent); + } + Block block = new Block(this.ts); + block.setIsFuncBlock(true); + block.parse(errors); + addChild(block); + } + + public void checkReturnNode(Errors errors) { + Block block = (Block) getChild(getChildren().size() - 1); + TokenNode rbrace = (TokenNode) block.getChild(block.getChildren().size() - 1); + if (block.getChildren().size() == 2) { + errors.addError(new Error(rbrace.getLine(), ErrorType.g)); + } else { + BlockItem bit = (BlockItem) block.getChild(block.getChildren().size() - 2); + if (bit.getChild(0) instanceof Decl) { + errors.addError(new Error(rbrace.getLine(), ErrorType.g)); + } else { + if (!(bit.getChild(0).getChild(0) instanceof TokenNode)) { + errors.addError(new Error(rbrace.getLine(), ErrorType.g)); + } else { + TokenNode returnNode = (TokenNode) bit.getChild(0).getChild(0); + if (returnNode.getType() != TokenType.RETURNTK) { + errors.addError(new Error(rbrace.getLine(), ErrorType.g)); + } + } + } + } + } +} diff --git a/frontend/ast/token/TokenNode.java b/frontend/ast/token/TokenNode.java new file mode 100644 index 0000000..dd28af3 --- /dev/null +++ b/frontend/ast/token/TokenNode.java @@ -0,0 +1,50 @@ +package frontend.ast.token; + +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.Token; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; + +public class TokenNode extends Node { + private Token token; + + public TokenNode(TokenStream ts) { + super(SyntaxType.TOKEN, ts); + token = ts.read(); + } + + @Override + public String toString() { + return token.toString(); + } + + public String getValue() { + return token.getValue(); + } + + public int getLine() { + return token.getLine(); + } + + public String getName() { + return token.getValue(); + } + + public TokenType getType() { + return token.getType(); + } + + public int getFormatNum() { + int num = 0; + String str = token.getValue(); + for (int i = 0; i < str.length(); i++) { + if (str.charAt(i) == '%' && i + 1 < str.length() + && str.charAt(i + 1) == 'd') { + num++; + i++; + } + } + return num; + } +} diff --git a/frontend/ast/val/ConstInitVal.java b/frontend/ast/val/ConstInitVal.java new file mode 100644 index 0000000..6bb841a --- /dev/null +++ b/frontend/ast/val/ConstInitVal.java @@ -0,0 +1,58 @@ +package frontend.ast.val; + +import java.util.ArrayList; + +import error.Errors; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.ast.exp.ConstExp; +import frontend.ast.token.TokenNode; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; + +public class ConstInitVal extends Node { + public ConstInitVal(TokenStream ts) { + super(SyntaxType.CONST_INIT_VAL, ts); + } + + public void parse(Errors errors) { + if (getCurrToken().getType() != TokenType.LBRACE) { + ConstExp cep = new ConstExp(this.ts); + cep.parse(errors); + addChild(cep); + } else { + TokenNode lbrace = new TokenNode(this.ts); + addChild(lbrace); + if (getCurrToken().getType() != TokenType.RBRACE) { + while (true) { // judge rbrace or not ?? + ConstExp cep = new ConstExp(this.ts); + cep.parse(errors); + addChild(cep); + if (getCurrToken().getType() == TokenType.COMMA) { + TokenNode comma = new TokenNode(this.ts); + addChild(comma); + } else { + break; + } + } + } + TokenNode rbrace = new TokenNode(this.ts); + addChild(rbrace); + } + } + + public ArrayList getValue() { + ArrayList valueList = new ArrayList<>(); + if (getChild(0) instanceof ConstExp) { + valueList.add(((ConstExp) getChild(0)).getValue()); + return valueList; + } else { + for (int i = 1; i < getChildren().size(); i += 2) { + if (getChild(i) instanceof ConstExp) { + valueList.add(((ConstExp) getChild(i)).getValue()); + } + } + return valueList; + } + } +} diff --git a/frontend/ast/val/InitVal.java b/frontend/ast/val/InitVal.java new file mode 100644 index 0000000..d3f39aa --- /dev/null +++ b/frontend/ast/val/InitVal.java @@ -0,0 +1,71 @@ +package frontend.ast.val; + +import java.util.ArrayList; + +import error.Errors; +import frontend.ast.Node; +import frontend.ast.SyntaxType; +import frontend.lexer.TokenStream; +import frontend.lexer.TokenType; +import frontend.ast.token.TokenNode; +import frontend.ast.exp.Exp; + +public class InitVal extends Node { + public InitVal(TokenStream ts) { + super(SyntaxType.INIT_VAL, ts); + } + + public void parse(Errors errors) { + if (getCurrToken().getType() == TokenType.LBRACE) { + TokenNode lbrace = new TokenNode(this.ts); + addChild(lbrace); + if (getCurrToken().getType() != TokenType.RBRACE) { + while (true) { + Exp ep = new Exp(this.ts); + ep.parse(errors); + addChild(ep); + if (getCurrToken().getType() == TokenType.COMMA) { + TokenNode comma = new TokenNode(this.ts); + addChild(comma); + } else { + break; + } + } + } + TokenNode rbrace = new TokenNode(this.ts); + addChild(rbrace); + } else { + Exp ep = new Exp(this.ts); + ep.parse(errors); + addChild(ep); + } + } + + public ArrayList getValue() { + ArrayList values = new ArrayList<>(); + if (getChild(0) instanceof Exp) { + values.add(((Exp) getChild(0)).getValue()); + } else { + for (int i = 1; i < getChildren().size(); i += 2) { + if (getChild(i) instanceof Exp) { + values.add(((Exp) getChild(i)).getValue()); + } + } + } + return values; + } + + public ArrayList getExpList() { + ArrayList expList = new ArrayList<>(); + if (getChild(0) instanceof Exp) { + expList.add((Exp) getChild(0)); + } else { + for (int i = 1; i < getChildren().size(); i += 2) { + if (getChild(i) instanceof Exp) { + expList.add((Exp) getChild(i)); + } + } + } + return expList; + } +} diff --git a/frontend/lexer/Lexer.java b/frontend/lexer/Lexer.java new file mode 100644 index 0000000..ac4b0d7 --- /dev/null +++ b/frontend/lexer/Lexer.java @@ -0,0 +1,245 @@ +package frontend.lexer; + +import java.util.ArrayList; + +import error.Error; +import error.ErrorType; +import error.Errors; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.io.IOException; + +public class Lexer { + private String input; + private ArrayList tokens; + private int position; + private int line; + private char currentChar; + + public Lexer(String input) { + this.input = input; + this.tokens = new ArrayList(); + this.position = 0; + this.line = 1; + } + + public void lex(Errors errors) { + int sigComment = 0; + while (this.position < this.input.length()) { + currentChar = this.input.charAt(this.position); + if (currentChar == ' ' || currentChar == '\t') { + this.position++; + continue; + } + if (currentChar == '\n' || currentChar == '\r') { + if (currentChar == '\r') { + if (this.position + 1 < this.input.length() && + this.input.charAt(this.position + 1) == '\n') { + this.position++; + } + } + this.line++; + this.position++; + if (sigComment == 1) { + sigComment = 0; + } + continue; + } + if (sigComment == 0) { + if (currentChar == '/') { + if (this.position + 1 < this.input.length() && + this.input.charAt(this.position + 1) == '/') { + sigComment = 1; + this.position += 2; + continue; + } + if (this.position + 1 < this.input.length() && + this.input.charAt(this.position + 1) == '*') { + sigComment = 2; + this.position += 2; + continue; + } + } + if (this.isIntCons()) { + lexInt(); + continue; + } + if (this.isStrCons()) { + lexStr(); + continue; + } + if (this.isIdenfr()) { + lexIdenfr(); + continue; + } + lexOp(errors); + } + if (sigComment == 2) { + if (this.position + 1 < this.input.length() && + this.currentChar == '*' && this.input.charAt(this.position + 1) == '/') { + sigComment = 0; + this.position += 2; + continue; + } + } + if (sigComment != 0) { + this.position++; + } + } + } + + public boolean isIntCons() { + return Character.isDigit(this.currentChar); + } + + public boolean isStrCons() { + return this.currentChar == '"'; + } + + public boolean isIdenfr() { + return Character.isLowerCase(this.currentChar) || Character.isUpperCase(this.currentChar) + || this.currentChar == '_'; + } + + public boolean isNotWp() { + return !Character.isWhitespace(this.currentChar); + } + + public boolean isOp() { + return !this.isIntCons() && !this.isStrCons() && !this.isIdenfr(); + } + + public void lexInt() { + StringBuilder sb = new StringBuilder(); + while (this.position < this.input.length() && this.isIntCons()) { + sb.append(this.currentChar); + this.position++; + updateCurrentChar(); + } + this.tokens.add(new Token(sb.toString(), this.line)); + } + + public void lexStr() { + StringBuilder sb = new StringBuilder(); + sb.append(this.currentChar); + this.position++; + updateCurrentChar(); + while (this.position < this.input.length() && this.currentChar != '"') { + sb.append(this.currentChar); + this.position++; + updateCurrentChar(); + } + if (this.position < this.input.length() && this.currentChar == '"') { + sb.append(this.currentChar); + this.position++; + } + this.tokens.add(new Token(sb.toString(), this.line)); + } + + public void lexIdenfr() { + StringBuilder sb = new StringBuilder(); + while (this.position < this.input.length() && (this.isIdenfr() || this.isIntCons())) { + sb.append(this.currentChar); + this.position++; + updateCurrentChar(); + } + this.tokens.add(new Token(sb.toString(), this.line)); + } + + public void lexOp(Errors errors) { + StringBuilder sb = new StringBuilder(); + if (this.currentChar == '/' && this.position + 1 < this.input.length() && + (this.input.charAt(this.position + 1) == '/' || + this.input.charAt(this.position + 1) == '*')) { + return; + } + sb.append(this.currentChar); + switch (this.currentChar) { + case '&': + readAnd(sb); + break; + case '|': + readOr(sb); + break; + case '<': + readEq(sb); + break; + case '>': + readEq(sb); + break; + case '=': + readEq(sb); + break; + case '!': + readEq(sb); + break; + default: + break; + } + this.position++; + if (sb.toString().equals("&") || sb.toString().equals("|")) { + errors.addError(new Error(this.line, ErrorType.a)); + } + this.tokens.add(new Token(sb.toString(), this.line)); + } + + public void readAnd(StringBuilder sb) { + if (this.position + 1 < this.input.length() && + this.input.charAt(this.position + 1) == '&') { + this.position++; + currentChar = this.input.charAt(this.position); + sb.append(currentChar); + } + } + + public void readOr(StringBuilder sb) { + if (this.position + 1 < this.input.length() && + this.input.charAt(this.position + 1) == '|') { + this.position++; + currentChar = this.input.charAt(this.position); + sb.append(currentChar); + } + } + + public void readEq(StringBuilder sb) { + if (this.position + 1 < this.input.length() && + this.input.charAt(this.position + 1) == '=') { + this.position++; + currentChar = this.input.charAt(this.position); + sb.append(currentChar); + } + } + + public void updateCurrentChar() { + if (this.position < this.input.length()) { + currentChar = this.input.charAt(this.position); + } + } + + public void printTokens() { + for (Token token : this.tokens) { + token.adjustType(); + System.out.println(token.getType() + " " + token.getValue() + " " + token.getLine()); + } + } + + public void writeToFile(String fileName) { + try { + StringBuilder sb = new StringBuilder(); + for (Token token : this.tokens) { + token.adjustType(); + sb.append(token.toString()); + } + Files.write(Paths.get(fileName), sb.toString().getBytes()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public ArrayList getTokens() { + for (Token token : this.tokens) { + token.adjustType(); + } + return this.tokens; + } +} diff --git a/frontend/lexer/Token.java b/frontend/lexer/Token.java new file mode 100644 index 0000000..6f2952c --- /dev/null +++ b/frontend/lexer/Token.java @@ -0,0 +1,42 @@ +package frontend.lexer; + +public class Token { + private TokenType type; + private String value; + private int line; + + public Token(String value, int line) { + this.value = value; + this.type = TokenType.isWhatType(value); + this.line = line; + } + + public void adjustType() { + if (this.type == TokenType.IDENFR) { + if (this.value.charAt(0) == '\"' && + this.value.charAt(this.value.length() - 1) == '\"') { + this.type = TokenType.STRCON; + } + String regex = "^\\d+$"; + if (this.value.matches(regex)) { + this.type = TokenType.INTCON; + } + } + } + + public String getValue() { + return this.value; + } + + public TokenType getType() { + return this.type; + } + + public int getLine() { + return this.line; + } + + public String toString() { + return this.type + " " + this.value + "\n"; + } +} diff --git a/frontend/lexer/TokenStream.java b/frontend/lexer/TokenStream.java new file mode 100644 index 0000000..082d39c --- /dev/null +++ b/frontend/lexer/TokenStream.java @@ -0,0 +1,42 @@ +package frontend.lexer; + +import java.util.ArrayList; + +public class TokenStream { + private ArrayList tokens; + private int currentIndex; + + public TokenStream(ArrayList tokens) { + this.tokens = tokens; + } + + public Token read() { + if (currentIndex < tokens.size()) { + return tokens.get(currentIndex++); + } else { + return null; + } + } + + public void recall() { + if (currentIndex > 0) { + currentIndex--; + } + } + + public int getCurrentIndex() { + return currentIndex; + } + + public void resetIndex(int index) { + currentIndex = index; + } + + public Token peek(int step) { + if (currentIndex + step < tokens.size()) { + return tokens.get(currentIndex + step); + } else { + return null; + } + } +} diff --git a/frontend/lexer/TokenType.java b/frontend/lexer/TokenType.java new file mode 100644 index 0000000..8cb8d5a --- /dev/null +++ b/frontend/lexer/TokenType.java @@ -0,0 +1,123 @@ +package frontend.lexer; + +public enum TokenType { + IDENFR, + INTCON, + STRCON, + CONSTTK, + INTTK, + STATICTK, + BREAKTK, + CONTINUETK, + IFTK, + MAINTK, + ELSETK, + NOT, + AND, + OR, + FORTK, + RETURNTK, + VOIDTK, + PLUS, + MINU, + PRINTFTK, + MULT, + DIV, + MOD, + LSS, + LEQ, + GRE, + GEQ, + EQL, + NEQ, + SEMICN, + COMMA, + LPARENT, + RPARENT, + LBRACK, + RBRACK, + LBRACE, + RBRACE, + ASSIGN; + + public static TokenType isWhatType(String str) { + switch (str) { + case "const": + return TokenType.CONSTTK; + case "int": + return TokenType.INTTK; + case "static": + return TokenType.STATICTK; + case "break": + return TokenType.BREAKTK; + case "continue": + return TokenType.CONTINUETK; + case "if": + return TokenType.IFTK; + case "main": + return TokenType.MAINTK; + case "else": + return TokenType.ELSETK; + case "!": + return TokenType.NOT; + case "&&": + return TokenType.AND; + case "&": + return TokenType.AND; + case "||": + return TokenType.OR; + case "|": + return TokenType.OR; + case "for": + return TokenType.FORTK; + case "return": + return TokenType.RETURNTK; + case "void": + return TokenType.VOIDTK; + case "+": + return TokenType.PLUS; + case "-": + return TokenType.MINU; + case "printf": + return TokenType.PRINTFTK; + case "*": + return TokenType.MULT; + case "/": + return TokenType.DIV; + case "%": + return TokenType.MOD; + case "<": + return TokenType.LSS; + case "<=": + return TokenType.LEQ; + case ">": + return TokenType.GRE; + case ">=": + return TokenType.GEQ; + case "==": + return TokenType.EQL; + case "!=": + return TokenType.NEQ; + case ";": + return TokenType.SEMICN; + case ",": + return TokenType.COMMA; + case "(": + return TokenType.LPARENT; + case ")": + return TokenType.RPARENT; + case "[": + return TokenType.LBRACK; + case "]": + return TokenType.RBRACK; + case "{": + return TokenType.LBRACE; + case "}": + return TokenType.RBRACE; + case "=": + return TokenType.ASSIGN; + default: + return TokenType.IDENFR; + } + } +} diff --git a/frontend/parser/Parser.java b/frontend/parser/Parser.java new file mode 100644 index 0000000..8a8cda6 --- /dev/null +++ b/frontend/parser/Parser.java @@ -0,0 +1,38 @@ +package frontend.parser; + +import frontend.ast.CompUnit; +import frontend.lexer.TokenStream; + +import java.nio.file.Files; + +import error.Errors; + +import java.nio.file.Paths; +import java.io.IOException; + +public class Parser { + private TokenStream ts; + private CompUnit compUnit; + + public Parser(TokenStream ts) { + this.ts = ts; + this.compUnit = new CompUnit(this.ts); + } + + public void parse(Errors errors) { + compUnit.parse(errors); + } + + public CompUnit getCompUnit() { + return compUnit; + } + + public void writeToFile(String fileName) { + try { + String info = this.compUnit.getInfo(); + Files.write(Paths.get(fileName), info.getBytes()); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/midend/Midend.java b/midend/Midend.java new file mode 100644 index 0000000..c6d0c15 --- /dev/null +++ b/midend/Midend.java @@ -0,0 +1,31 @@ +package midend; + +import java.nio.file.Files; +import java.nio.file.Paths; +import frontend.ast.CompUnit; +import midend.llvm.IrBuilder; +import midend.llvm.IrModule; +import midend.visit.Visitor; + +public class Midend { + private IrModule module; + private Visitor visitor; + + public Midend(CompUnit compUnit) { + this.module = new IrModule(); + this.visitor = new Visitor(compUnit); + } + + public void generateLLvmIr() { + IrBuilder.setCurrentModule(module); + visitor.visit(); + } + + public void writeToFile(String fileName) { + try { + Files.write(Paths.get(fileName), module.toString().getBytes()); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/midend/errorhandle/ErrorHandler.java b/midend/errorhandle/ErrorHandler.java new file mode 100644 index 0000000..a973d41 --- /dev/null +++ b/midend/errorhandle/ErrorHandler.java @@ -0,0 +1,32 @@ +package midend.errorhandle; + +import frontend.ast.CompUnit; + +import midend.symbol.SymbolManager; + +import error.Errors; + +import java.nio.file.Files; +import java.nio.file.Paths; + +public class ErrorHandler { + private CompUnit compUnit; + + public ErrorHandler(CompUnit compUnit) { + this.compUnit = compUnit; + SymbolManager.init(); + } + + public void visit(Errors errors) { + compUnit.fillSymbolTable(false, false, errors); + } + + public void writeToFile(String fileName) { + try { + String info = SymbolManager.getSymbolTableInfo(); + Files.write(Paths.get(fileName), info.getBytes()); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/midend/llvm/IrBuilder.java b/midend/llvm/IrBuilder.java new file mode 100644 index 0000000..f8f4de8 --- /dev/null +++ b/midend/llvm/IrBuilder.java @@ -0,0 +1,143 @@ +package midend.llvm; + +import java.util.HashMap; +import java.util.Stack; + +import midend.llvm.value.IrFuncValue; +import midend.llvm.value.IrBasicBlock; +import midend.llvm.value.IrLoop; +import midend.llvm.type.IrType; +import midend.llvm.constant.IrConstant; +import midend.llvm.value.IrGlobalValue; +import midend.llvm.constant.IrConstantStr; +import midend.llvm.instr.IrInstr; + +public class IrBuilder { + private static final String prebb = "b_"; + private static final String prestr = "@s_"; + private static final String prefunc = "@f_"; + private static final String preglobal = "@g_"; + private static final String prelocal = "%v_"; + + private static IrModule module = null; + private static IrFuncValue currentFunc = null; + private static IrBasicBlock currentBB = null; + private static int strId = 0; + private static int globalId = 0; + private static int bblockId = 0; + private static HashMap funcIdMap = new HashMap<>(); // func, localId + private static Stack loopStack = new Stack<>(); + + public static void setCurrentModule(IrModule module) { + IrBuilder.module = module; + } + + public static void addNewFunc(String name, IrType retType) { + IrFuncValue func = new IrFuncValue(geFuncName(name), retType); + module.addFunc(func); + funcIdMap.put(func, 0); + currentFunc = func; + IrBasicBlock entryBB = new IrBasicBlock(getBlockName(), func); + func.addBBlock(entryBB); + currentBB = entryBB; + } + + public static void addNewFunc(IrFuncValue func) { + module.addFunc(func); + funcIdMap.put(func, 0); + currentFunc = func; + IrBasicBlock entryBB = new IrBasicBlock(getBlockName(), func); + func.addBBlock(entryBB); + currentBB = entryBB; + } + + public static void addNewBB() { + IrBasicBlock bb = new IrBasicBlock(getBlockName(), currentFunc); + currentFunc.addBBlock(bb); + } + + public static void addNewBB(IrBasicBlock bb) { + currentFunc.addBBlock(bb); + } + + public static void setCurrentBBlock(IrBasicBlock bb) { + currentBB = bb; + } + + public static void addNewGlobal(IrType type, boolean isConstant, IrConstant initVal) { + IrGlobalValue global = new IrGlobalValue(type, getGlobalName(), isConstant, initVal); + module.addGlobalVar(global); + } + + public static void addNewGlobal(IrGlobalValue global) { + module.addGlobalVar(global); + } + + public static void addNewStr(String str) { + if (module.containStr(str)) { + return; + } + module.addStr(new IrConstantStr(str, getStrName())); + } + + public static void addNewStr(IrConstantStr str) { + module.addStr(str); + } + + public static void addInstr(IrInstr instr) { + currentBB.addInstr(instr); + instr.setBBlock(currentBB); + } + + public static String geFuncName(String name) { + return name.equals("main") ? "@main" : prefunc + name; + } + + public static String getBlockName() { + return prebb + bblockId++; + } + + public static String getStrName() { + return prestr + strId++; + } + + public static String getGlobalName() { + return preglobal + globalId++; + } + + public static String getLocalName() { + int id = funcIdMap.get(currentFunc); + funcIdMap.put(currentFunc, id + 1); + return prelocal + id; + } + + public static String getLocalName(IrFuncValue func) { + int id = funcIdMap.get(func); + funcIdMap.put(func, id + 1); + return prelocal + id; + } + + public static IrModule getCurrentModule() { + return module; + } + + public static IrFuncValue getCurrentFunc() { + return currentFunc; + } + + public static IrBasicBlock getCurrentBB() { + return currentBB; + } + + public static void pushLoop(IrLoop loop) { + loopStack.push(loop); + } + + public static IrLoop popLoop() { + return loopStack.pop(); + } + + public static IrLoop getCurrentLoop() { + return loopStack.peek(); + } +} diff --git a/midend/llvm/IrModule.java b/midend/llvm/IrModule.java new file mode 100644 index 0000000..e50f9ad --- /dev/null +++ b/midend/llvm/IrModule.java @@ -0,0 +1,100 @@ +package midend.llvm; + +import java.util.ArrayList; +import java.util.HashMap; + +import midend.llvm.constant.IrConstantStr; +import midend.llvm.value.IrFuncValue; +import midend.llvm.value.IrGlobalValue; +import midend.llvm.instr.GetIntInstr; +import midend.llvm.instr.PutChInstr; +import midend.llvm.instr.PutIntInstr; +import midend.llvm.instr.PutStrInstr; + +public class IrModule { + private ArrayList decls; + private HashMap strs; + private ArrayList globalVars; + private ArrayList funcs; + + public IrModule() { + decls = new ArrayList<>(); + strs = new HashMap<>(); + globalVars = new ArrayList<>(); + funcs = new ArrayList<>(); + decls.add(GetIntInstr.getIntDecl()); + decls.add(PutChInstr.putChDecl()); + decls.add(PutIntInstr.putIntDecl()); + decls.add(PutStrInstr.putStrDecl()); + } + + public ArrayList getDecls() { + return decls; + } + + public HashMap getStrs() { + return strs; + } + + public ArrayList getGlobalVars() { + return globalVars; + } + + public ArrayList getFuncs() { + return funcs; + } + + public void addFunc(IrFuncValue func) { + funcs.add(func); + } + + public void addStr(IrConstantStr str) { + if (strs.containsKey(str.getValue())) { + return; + } + strs.put(str.getValue(), str); + } + + public boolean containStr(String str) { + return strs.containsKey(str); + } + + public IrConstantStr getStr(String str) { + if (containStr(str)) { + return strs.get(str); + } + return null; + } + + public void addGlobalVar(IrGlobalValue globalVar) { + globalVars.add(globalVar); + } + + public IrFuncValue getMainFunc() { + for (IrFuncValue func : funcs) { + if (func.isMain()) { + return func; + } + } + return null; + } + + //TODO: toString()方法编写 + public String toString() { + StringBuilder sb = new StringBuilder(); + for (String decl : decls) { + sb.append(decl).append("\n"); + } + for (IrConstantStr str : strs.values()) { + sb.append(str.toString()).append("\n"); + } + for (IrGlobalValue globalVar : globalVars) { + sb.append(globalVar.toString()).append("\n"); + } + for (IrFuncValue func : funcs) { + sb.append(func.toString()).append("\n"); + } + // System.out.println(funcs.size()); + return sb.toString(); + } +} diff --git a/midend/llvm/constant/IrConstant.java b/midend/llvm/constant/IrConstant.java new file mode 100644 index 0000000..fabfbeb --- /dev/null +++ b/midend/llvm/constant/IrConstant.java @@ -0,0 +1,14 @@ +package midend.llvm.constant; + +import midend.llvm.value.IrValue; +import midend.llvm.type.IrType; + +public class IrConstant extends IrValue { + public IrConstant(IrType type, String name) { + super(type, name); + } + + public String toString() { + return ""; + } +} diff --git a/midend/llvm/constant/IrConstantArray.java b/midend/llvm/constant/IrConstantArray.java new file mode 100644 index 0000000..ca8318d --- /dev/null +++ b/midend/llvm/constant/IrConstantArray.java @@ -0,0 +1,47 @@ +package midend.llvm.constant; + +import java.util.ArrayList; + +import midend.llvm.type.IrInterType; +import midend.llvm.type.IrArrayType; + +public class IrConstantArray extends IrConstant { + private ArrayList elements; + private int size; + + public IrConstantArray(String name, ArrayList elements, int size) { + super(new IrArrayType(IrInterType.INT32, size), name); + this.elements = elements == null ? new ArrayList<>() : new ArrayList<>(elements); + this.size = size; + } + + public ArrayList getElements() { + return elements; + } + + public int getSize() { + return size; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getType().toString() + " "); + if (elements.size() == 0) { + sb.append("zeroinitializer"); + } else { + sb.append("["); + for (IrConstant element : elements) { + sb.append(element.toString()); + if (element != elements.get(elements.size() - 1)) { + sb.append(", "); + } + } + int left = size - elements.size(); + for (int i = 0; i < left; i++) { + sb.append(", i32 0"); + } + sb.append("]"); + } + return sb.toString(); + } +} diff --git a/midend/llvm/constant/IrConstantInt.java b/midend/llvm/constant/IrConstantInt.java new file mode 100644 index 0000000..f7c1c1a --- /dev/null +++ b/midend/llvm/constant/IrConstantInt.java @@ -0,0 +1,20 @@ +package midend.llvm.constant; + +import midend.llvm.type.IrInterType; + +public class IrConstantInt extends IrConstant { + private int value; + + public IrConstantInt(int value) { + super(IrInterType.INT32, value + ""); + this.value = value; + } + + public int getValue() { + return value; + } + + public String toString() { + return "i32 " + value; + } +} diff --git a/midend/llvm/constant/IrConstantStr.java b/midend/llvm/constant/IrConstantStr.java new file mode 100644 index 0000000..1e6e4b6 --- /dev/null +++ b/midend/llvm/constant/IrConstantStr.java @@ -0,0 +1,53 @@ +package midend.llvm.constant; + +import midend.llvm.type.IrArrayType; +import midend.llvm.type.IrPointerType; +import midend.llvm.type.IrInterType; + +public class IrConstantStr extends IrConstant { + private String value; + + public IrConstantStr(String value, String name) { + super(new IrPointerType( + new IrArrayType(IrInterType.INT8, getLen(value) + 1)), name); + this.value = value; + } + + public String getValue() { + return value; + } + + public static int getLen(String value) { + int len = 0; + for (int i = 0; i < value.length(); i++) { + if (value.charAt(i) == '\\') { + i++; + } else if (value.charAt(i) == '"') { + continue; + } + len++; + } + return len; + } + + public static String getRealStr(String str) { + boolean start = str.charAt(0) == '"'; + boolean end = str.charAt(str.length() - 1) == '"'; + if (start && end) { + return str.substring(1, str.length() - 1); + } else if (start) { + return str.substring(1); + } else if (end) { + return str.substring(0, str.length() - 1); + } + return str; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getName() + " = constant " + ((IrPointerType) getType()).getPointeeType()); + sb.append(" c\"" + getRealStr(value).replace("\\n", "\\0A")); + sb.append("\\00\""); + return sb.toString(); + } +} diff --git a/midend/llvm/instr/AllocateInstr.java b/midend/llvm/instr/AllocateInstr.java new file mode 100644 index 0000000..a6e3d25 --- /dev/null +++ b/midend/llvm/instr/AllocateInstr.java @@ -0,0 +1,21 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrPointerType; +import midend.llvm.type.IrType; + +public class AllocateInstr extends IrInstr { + private IrType pointeeType; + + public AllocateInstr(IrType pointeeType, String name) { // name即为局部变量的name,因为要声明一个局部变量 + super(new IrPointerType(pointeeType), name, IrInstrType.ALLOCA); + this.pointeeType = pointeeType; + } + + public IrType getPointeeType() { + return pointeeType; + } + + public String toString() { + return getName() + " = alloca " + this.pointeeType; + } +} diff --git a/midend/llvm/instr/AluInstr.java b/midend/llvm/instr/AluInstr.java new file mode 100644 index 0000000..c214d66 --- /dev/null +++ b/midend/llvm/instr/AluInstr.java @@ -0,0 +1,24 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrInterType; +import midend.llvm.value.IrValue; + +public class AluInstr extends IrInstr { + private AluType alutype; + + public AluInstr(String name, String op, IrValue left, IrValue right) { + super(IrInterType.INT32, name, IrInstrType.ALU); + this.alutype = AluType.getAluType(op); + addUse(left); + addUse(right); + } + + public AluType getAluType() { + return alutype; + } + + public String toString() { + return getName() + " = " + alutype.toString() + " " + getType() + + " " + getUse(0).getName() + ", " + getUse(1).getName(); + } +} diff --git a/midend/llvm/instr/AluType.java b/midend/llvm/instr/AluType.java new file mode 100644 index 0000000..2138ab8 --- /dev/null +++ b/midend/llvm/instr/AluType.java @@ -0,0 +1,53 @@ +package midend.llvm.instr; + +public enum AluType { + ADD, + SUB, + MUL, + SDIV, + SREM, + AND, + OR; + + public static AluType getAluType(String op) { + switch (op) { + case "+": + return ADD; + case "-": + return SUB; + case "*": + return MUL; + case "/": + return SDIV; + case "%": + return SREM; + case "&": + return AND; + case "|": + return OR; + default: + return null; + } + } + + public String toString() { + switch (this) { + case ADD: + return "add"; + case SUB: + return "sub"; + case MUL: + return "mul"; + case SDIV: + return "sdiv"; + case SREM: + return "srem"; + case AND: + return "and"; + case OR: + return "or"; + default: + return null; + } + } +} \ No newline at end of file diff --git a/midend/llvm/instr/BranchInstr.java b/midend/llvm/instr/BranchInstr.java new file mode 100644 index 0000000..9fe2d68 --- /dev/null +++ b/midend/llvm/instr/BranchInstr.java @@ -0,0 +1,33 @@ +package midend.llvm.instr; + +import midend.llvm.value.IrBasicBlock; +import midend.llvm.value.IrValue; +import midend.llvm.type.IrInterType; + +public class BranchInstr extends IrInstr { + public BranchInstr(String name, IrValue cond, IrBasicBlock trueBB, IrBasicBlock falseBB) { + super(IrInterType.VOID, name, IrInstrType.BR); + addUse(cond); + addUse(trueBB); + addUse(falseBB); + } + + public IrValue getCond() { + return getUse(0); + } + + public IrBasicBlock getTrueBB() { + return (IrBasicBlock) getUse(1); + } + + public IrBasicBlock getFalseBB() { + return (IrBasicBlock) getUse(2); + } + + public String toString() { + return "br i1 " + getCond().getName() + + ", label %" + getTrueBB().getName() + + ", label %" + getFalseBB().getName(); + } + +} diff --git a/midend/llvm/instr/CallInstr.java b/midend/llvm/instr/CallInstr.java new file mode 100644 index 0000000..29c1fae --- /dev/null +++ b/midend/llvm/instr/CallInstr.java @@ -0,0 +1,48 @@ +package midend.llvm.instr; + +import java.util.ArrayList; + +import midend.llvm.value.IrFuncValue; +import midend.llvm.value.IrValue; + +public class CallInstr extends IrInstr { + public CallInstr(String name, IrFuncValue func, ArrayList args) { + super(func.getRetType(), name, IrInstrType.CALL); + addUse(func); + for (IrValue arg : args) { + addUse(arg); + } + } + + public boolean callVoid() { + return getType().isVoid(); + } + + public IrFuncValue getCalledFunc() { + return (IrFuncValue) getUse(0); + } + + public ArrayList getArgs() { + ArrayList args = new ArrayList<>(); + for (int i = 1; i < getNumUses(); i++) { + args.add(getUse(i)); + } + return args; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + if (!callVoid()) { + sb.append(getName() + " = "); + } + sb.append("call " + getType() + " " + getCalledFunc().getName() + "("); + for (int i = 1; i < getNumUses(); i++) { + sb.append(getUse(i).getType() + " " + getUse(i).getName()); + if (i < getNumUses() - 1) { + sb.append(", "); + } + } + sb.append(")"); + return sb.toString(); + } +} diff --git a/midend/llvm/instr/CmpInstr.java b/midend/llvm/instr/CmpInstr.java new file mode 100644 index 0000000..99bdcef --- /dev/null +++ b/midend/llvm/instr/CmpInstr.java @@ -0,0 +1,32 @@ +package midend.llvm.instr; + +import midend.llvm.value.IrValue; +import midend.llvm.type.IrInterType; + +public class CmpInstr extends IrInstr { + private CmpType cmpType; + + public CmpInstr(String name, String op, IrValue lhs, IrValue rhs) { + super(IrInterType.BOOL, name, IrInstrType.CMP); + cmpType = CmpType.getCmpType(op); + addUse(lhs); + addUse(rhs); + } + + public CmpType getCmpType() { + return cmpType; + } + + public IrValue getLhs() { + return getUse(0); + } + + public IrValue getRhs() { + return getUse(1); + } + + public String toString() { + return getName() + " = " + "icmp " + cmpType.toString() + + " i32 " + getLhs().getName() + ", " + getRhs().getName(); + } +} diff --git a/midend/llvm/instr/CmpType.java b/midend/llvm/instr/CmpType.java new file mode 100644 index 0000000..921a5ec --- /dev/null +++ b/midend/llvm/instr/CmpType.java @@ -0,0 +1,48 @@ +package midend.llvm.instr; + +public enum CmpType { + EQ, + NE, + SGT, + SGE, + SLT, + SLE; + + public static CmpType getCmpType(String op) { + switch (op) { + case "==": + return EQ; + case "!=": + return NE; + case ">": + return SGT; + case ">=": + return SGE; + case "<": + return SLT; + case "<=": + return SLE; + default: + return null; + } + } + + public String toString() { + switch (this) { + case EQ: + return "eq"; + case NE: + return "ne"; + case SGT: + return "sgt"; + case SGE: + return "sge"; + case SLT: + return "slt"; + case SLE: + return "sle"; + default: + return null; + } + } +} diff --git a/midend/llvm/instr/ExtendInstr.java b/midend/llvm/instr/ExtendInstr.java new file mode 100644 index 0000000..4ce886d --- /dev/null +++ b/midend/llvm/instr/ExtendInstr.java @@ -0,0 +1,31 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrType; +import midend.llvm.value.IrValue; + +public class ExtendInstr extends IrInstr { + private IrType targetType; + + public ExtendInstr(String name, IrType targetType, IrValue src) { + super(targetType, name, IrInstrType.EXTEND); + this.targetType = targetType; + addUse(src); + } + + public IrValue getSrc() { + return getUse(0); + } + + public IrType getTargetType() { + return this.targetType; + } + + public IrType getSrcType() { + return getSrc().getType(); + } + + public String toString() { + return getName() + " = zext " + getSrc().getType() + + " " + getSrc().getName() + " to " + getTargetType(); + } +} diff --git a/midend/llvm/instr/GepInstr.java b/midend/llvm/instr/GepInstr.java new file mode 100644 index 0000000..825463c --- /dev/null +++ b/midend/llvm/instr/GepInstr.java @@ -0,0 +1,57 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrArrayType; +import midend.llvm.type.IrPointerType; +import midend.llvm.type.IrType; +import midend.llvm.value.IrValue; + +public class GepInstr extends IrInstr { + public GepInstr(IrValue pointer, IrValue offset, String name) { + super(new IrPointerType(getTargetType(pointer)), name, IrInstrType.GEP); + addUse(pointer); + addUse(offset); + } + + public IrValue getPointer() { + return getUse(0); + } + + public IrValue getOffset() { + return getUse(1); + } + + public String toString() { + IrValue pointer = this.getPointer(); + IrValue offset = this.getOffset(); + + IrPointerType pointerType = (IrPointerType) pointer.getType(); + IrType targetType = pointerType.getPointeeType(); + + if (targetType instanceof IrArrayType arrayType) { + return getName() + " = getelementptr inbounds " + + arrayType + ", " + + pointerType + " " + + pointer.getName() + ", i32 0, " + + offset.getType() + " " + + offset.getName(); + } else { + return getName() + " = getelementptr inbounds " + + targetType + ", " + + pointerType + " " + + pointer.getName() + ", " + + offset.getType() + " " + + offset.getName(); + } + } + + public static IrType getTargetType(IrValue pointer) { + IrType targetType = ((IrPointerType) pointer.getType()).getPointeeType(); + if (targetType instanceof IrArrayType arrayType) { + return arrayType.getElementType(); + } else if (targetType instanceof IrPointerType pointerType) { + return pointerType.getPointeeType(); + } else { + return targetType; + } + } +} diff --git a/midend/llvm/instr/GetIntInstr.java b/midend/llvm/instr/GetIntInstr.java new file mode 100644 index 0000000..7b860f1 --- /dev/null +++ b/midend/llvm/instr/GetIntInstr.java @@ -0,0 +1,17 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrInterType; + +public class GetIntInstr extends IrInstr { + public GetIntInstr(String name) { + super(IrInterType.INT32, name, IrInstrType.IO); + } + + public String toString() { + return getName() + " = call i32 @getint()"; + } + + public static String getIntDecl() { + return "declare i32 @getint()"; + } +} diff --git a/midend/llvm/instr/IrInstr.java b/midend/llvm/instr/IrInstr.java new file mode 100644 index 0000000..1a701e9 --- /dev/null +++ b/midend/llvm/instr/IrInstr.java @@ -0,0 +1,28 @@ +package midend.llvm.instr; + +import midend.llvm.use.IrUser; +import midend.llvm.value.IrBasicBlock; +import midend.llvm.type.IrType; + +public class IrInstr extends IrUser { + private IrInstrType type; + private IrBasicBlock block; + + public IrInstr(IrType type, String name, IrInstrType instrType) { + super(type, name); + this.type = instrType; + this.block = null; + } + + public IrInstrType getInstrType() { + return type; + } + + public IrBasicBlock getBBlock() { + return block; + } + + public void setBBlock(IrBasicBlock block) { + this.block = block; + } +} diff --git a/midend/llvm/instr/IrInstrType.java b/midend/llvm/instr/IrInstrType.java new file mode 100644 index 0000000..cfcce36 --- /dev/null +++ b/midend/llvm/instr/IrInstrType.java @@ -0,0 +1,18 @@ +package midend.llvm.instr; + +public enum IrInstrType { + ALU, + CMP, + CALL, + ALLOCA, + LOAD, + STORE, + GEP, + PHI, + EXTEND, + TRUNC, + BR, + RET, + JUMP, + IO +} diff --git a/midend/llvm/instr/JumpInstr.java b/midend/llvm/instr/JumpInstr.java new file mode 100644 index 0000000..9c00ea7 --- /dev/null +++ b/midend/llvm/instr/JumpInstr.java @@ -0,0 +1,20 @@ +package midend.llvm.instr; + +import midend.llvm.value.IrBasicBlock; +import midend.llvm.type.IrInterType; + +public class JumpInstr extends IrInstr { + public JumpInstr(IrBasicBlock targetBlock) { + super(IrInterType.VOID, "jump", IrInstrType.JUMP); + addUse(targetBlock); + } + + public IrBasicBlock getTargetBlock() { + return (IrBasicBlock) getUse(0); + } + + public String toString() { + return "br label " + "%" + getTargetBlock().getName(); + } +} +// TODO:所有的指令的基本块设置还需完善 \ No newline at end of file diff --git a/midend/llvm/instr/LoadInstr.java b/midend/llvm/instr/LoadInstr.java new file mode 100644 index 0000000..f9c4c23 --- /dev/null +++ b/midend/llvm/instr/LoadInstr.java @@ -0,0 +1,20 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrPointerType; +import midend.llvm.value.IrValue; + +public class LoadInstr extends IrInstr { + public LoadInstr(IrValue pointer, String name) { + super(((IrPointerType) pointer.getType()).getPointeeType(), name, IrInstrType.LOAD); + addUse(pointer); + } + + public IrValue getPointer() { + return getUse(0); + } + + public String toString() { + return getName() + " = load " + getType() + ", " + + getPointer().getType() + " " + getPointer().getName(); + } +} diff --git a/midend/llvm/instr/PutChInstr.java b/midend/llvm/instr/PutChInstr.java new file mode 100644 index 0000000..db9fff5 --- /dev/null +++ b/midend/llvm/instr/PutChInstr.java @@ -0,0 +1,19 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrInterType; +import midend.llvm.value.IrValue; + +public class PutChInstr extends IrInstr { + public PutChInstr(String name, IrValue putValue) { + super(IrInterType.VOID, name, IrInstrType.IO); + addUse(putValue); + } + + public String toString() { + return "call void @putch(i32 " + getUses().get(0).getName() + ")"; + } + + public static String putChDecl() { + return "declare void @putch(i32)"; + } +} diff --git a/midend/llvm/instr/PutIntInstr.java b/midend/llvm/instr/PutIntInstr.java new file mode 100644 index 0000000..f24d12d --- /dev/null +++ b/midend/llvm/instr/PutIntInstr.java @@ -0,0 +1,19 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrInterType; +import midend.llvm.value.IrValue; + +public class PutIntInstr extends IrInstr { + public PutIntInstr(String name, IrValue putValue) { + super(IrInterType.VOID, name, IrInstrType.IO); + addUse(putValue); + } + + public String toString() { + return "call void @putint(i32 " + getUses().get(0).getName() + ")"; + } + + public static String putIntDecl() { + return "declare void @putint(i32)"; + } +} diff --git a/midend/llvm/instr/PutStrInstr.java b/midend/llvm/instr/PutStrInstr.java new file mode 100644 index 0000000..a913114 --- /dev/null +++ b/midend/llvm/instr/PutStrInstr.java @@ -0,0 +1,26 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrInterType; +import midend.llvm.type.IrPointerType; +import midend.llvm.constant.IrConstantStr; + +public class PutStrInstr extends IrInstr { + private IrConstantStr strVal; + + public PutStrInstr(String name, IrConstantStr putValue) { + super(IrInterType.VOID, name, IrInstrType.IO); + addUse(putValue); + strVal = putValue; + } + + public static String putStrDecl() { + return "declare void @putstr(i8*)"; + } + + public String toString() { + IrPointerType ptrType = (IrPointerType) strVal.getType(); + return "call void @putstr(i8* getelementptr inbounds (" + + ptrType.getPointeeType() + ", " + ptrType + + " " + strVal.getName() + ", i32 0, i32 0))"; + } +} diff --git a/midend/llvm/instr/ReturnInstr.java b/midend/llvm/instr/ReturnInstr.java new file mode 100644 index 0000000..e4b80f5 --- /dev/null +++ b/midend/llvm/instr/ReturnInstr.java @@ -0,0 +1,20 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrInterType; +import midend.llvm.value.IrValue; + +public class ReturnInstr extends IrInstr { + public ReturnInstr(IrValue retValue) { + super(IrInterType.VOID, "ret", IrInstrType.RET); + addUse(retValue); + } + + public IrValue getRetValue() { + return getUse(0); + } + + public String toString() { + return getName() + (getRetValue() == null ? " void" : + " " + getRetValue().getType() + " " + getRetValue().getName()); + } +} diff --git a/midend/llvm/instr/StoreInstr.java b/midend/llvm/instr/StoreInstr.java new file mode 100644 index 0000000..cd8b229 --- /dev/null +++ b/midend/llvm/instr/StoreInstr.java @@ -0,0 +1,25 @@ +package midend.llvm.instr; + +import midend.llvm.value.IrValue; +import midend.llvm.type.IrInterType; + +public class StoreInstr extends IrInstr { + public StoreInstr(IrValue value, IrValue pointer) { + super(IrInterType.VOID, "store", IrInstrType.STORE); + addUse(value); + addUse(pointer); + } + + public IrValue getValue() { + return getUse(0); + } + + public IrValue getPointer() { + return getUse(1); + } + + public String toString() { + return getName() + " " + getValue().getType() + " " + getValue().getName() + + ", " + getPointer().getType() + " " + getPointer().getName(); + } +} diff --git a/midend/llvm/instr/TruncInstr.java b/midend/llvm/instr/TruncInstr.java new file mode 100644 index 0000000..c359a6e --- /dev/null +++ b/midend/llvm/instr/TruncInstr.java @@ -0,0 +1,31 @@ +package midend.llvm.instr; + +import midend.llvm.type.IrType; +import midend.llvm.value.IrValue; + +public class TruncInstr extends IrInstr { + private IrType targetType; + + public TruncInstr(IrType targetType, IrValue value, String name) { + super(targetType, name, IrInstrType.TRUNC); + addUse(value); + this.targetType = targetType; + } + + public IrValue getSrc() { + return getUse(0); + } + + public IrType getTargetType() { + return targetType; + } + + public IrType getSrcType() { + return getSrc().getType(); + } + + public String toString() { + return getName() + " = trunc " + getSrcType() + + " " + getSrc().getName() + " to " + getTargetType(); + } +} diff --git a/midend/llvm/type/IrArrayType.java b/midend/llvm/type/IrArrayType.java new file mode 100644 index 0000000..23f56e0 --- /dev/null +++ b/midend/llvm/type/IrArrayType.java @@ -0,0 +1,23 @@ +package midend.llvm.type; + +public class IrArrayType extends IrType { + private IrType elementType; + private int size; + + public IrArrayType(IrType elementType, int size) { + this.elementType = elementType; + this.size = size; + } + + public IrType getElementType() { + return elementType; + } + + public int getSize() { + return size; + } + + public String toString() { + return "[" + size + " x " + elementType.toString() + "]"; + } +} diff --git a/midend/llvm/type/IrBasicBlockType.java b/midend/llvm/type/IrBasicBlockType.java new file mode 100644 index 0000000..2ec12bb --- /dev/null +++ b/midend/llvm/type/IrBasicBlockType.java @@ -0,0 +1,10 @@ +package midend.llvm.type; + +public class IrBasicBlockType extends IrType { + public IrBasicBlockType() { + } + + public String toString() { + return ""; + } +} \ No newline at end of file diff --git a/midend/llvm/type/IrFuncType.java b/midend/llvm/type/IrFuncType.java new file mode 100644 index 0000000..5d4daf7 --- /dev/null +++ b/midend/llvm/type/IrFuncType.java @@ -0,0 +1,17 @@ +package midend.llvm.type; + +public class IrFuncType extends IrType { + private IrType returnType; + + public IrFuncType(IrType returnType) { + this.returnType = returnType; + } + + public IrType getReturnType() { + return returnType; + } + + public String toString() { + return returnType.toString(); + } +} diff --git a/midend/llvm/type/IrInterType.java b/midend/llvm/type/IrInterType.java new file mode 100644 index 0000000..13a711c --- /dev/null +++ b/midend/llvm/type/IrInterType.java @@ -0,0 +1,18 @@ +package midend.llvm.type; + +public class IrInterType extends IrType { + private int size; + + public IrInterType(int size) { + this.size = size; + } + + public static final IrInterType INT32 = new IrInterType(32); + public static final IrInterType INT8 = new IrInterType(8); + public static final IrInterType BOOL = new IrInterType(1); + public static final IrInterType VOID = new IrInterType(0); + + public String toString() { + return size != 0 ? "i" + size : "void"; + } +} diff --git a/midend/llvm/type/IrPointerType.java b/midend/llvm/type/IrPointerType.java new file mode 100644 index 0000000..052751b --- /dev/null +++ b/midend/llvm/type/IrPointerType.java @@ -0,0 +1,17 @@ +package midend.llvm.type; + +public class IrPointerType extends IrType { + private IrType pointeeType; + + public IrPointerType(IrType pointeeType) { + this.pointeeType = pointeeType; + } + + public IrType getPointeeType() { + return pointeeType; + } + + public String toString() { + return pointeeType.toString() + "*"; + } +} diff --git a/midend/llvm/type/IrType.java b/midend/llvm/type/IrType.java new file mode 100644 index 0000000..037a9e4 --- /dev/null +++ b/midend/llvm/type/IrType.java @@ -0,0 +1,74 @@ +package midend.llvm.type; + +import midend.llvm.IrBuilder; +import midend.llvm.constant.IrConstantInt; +import midend.llvm.instr.CmpInstr; +import midend.llvm.instr.ExtendInstr; +import midend.llvm.instr.TruncInstr; +import midend.llvm.value.IrValue; +import midend.llvm.instr.ExtendInstr; + +public class IrType { + public boolean isInt32() { + return this == IrInterType.INT32; + } + + public boolean isInt8() { + return this == IrInterType.INT8; + } + + public boolean isBool() { + return this == IrInterType.BOOL; + } + + public boolean isVoid() { + return this == IrInterType.VOID; + } + + public boolean isPointer() { + return this instanceof IrPointerType; + } + + public boolean isArray() { + return this instanceof IrArrayType; + } + + public boolean isFunc() { + return this instanceof IrFuncType; + } + + public boolean isBasicBlock() { + return this instanceof IrBasicBlockType; + } + + public String toString() { + return ""; + } + + public static IrValue convertType(IrValue originValue, IrType targetType) { + IrType originType = originValue.getType(); + if (targetType.isInt32()) { + if (originType.isInt32()) { + return originValue; + } else { + ExtendInstr ei = new ExtendInstr( + IrBuilder.getLocalName(), targetType, originValue); + IrBuilder.addInstr(ei); + return ei; + } + } else if (targetType.isBool()) { + if (originType.isBool()) { + return originValue; + } else { + CmpInstr nezero = new CmpInstr(IrBuilder.getLocalName(), "!=", + originValue, new IrConstantInt(0)); + IrBuilder.addInstr(nezero); + return nezero; + } + } else if (targetType.isArray()) { + IrArrayType arrayType = (IrArrayType) targetType; + return convertType(originValue, arrayType.getElementType()); + } + return originValue; + } +} diff --git a/midend/llvm/use/IrUse.java b/midend/llvm/use/IrUse.java new file mode 100644 index 0000000..038fa3f --- /dev/null +++ b/midend/llvm/use/IrUse.java @@ -0,0 +1,21 @@ +package midend.llvm.use; + +import midend.llvm.value.IrValue; + +public class IrUse { + private IrValue value; + private IrUser user; + + public IrUse(IrValue value, IrUser user) { + this.value = value; + this.user = user; + } + + public IrValue getValue() { + return value; + } + + public IrUser getUser() { + return user; + } +} diff --git a/midend/llvm/use/IrUser.java b/midend/llvm/use/IrUser.java new file mode 100644 index 0000000..c699e5b --- /dev/null +++ b/midend/llvm/use/IrUser.java @@ -0,0 +1,38 @@ +package midend.llvm.use; + +import java.util.ArrayList; + +import midend.llvm.value.IrValue; +import midend.llvm.type.IrType; + +public class IrUser extends IrValue { + private ArrayList uses; + + public IrUser(IrType type, String name) { + super(type, name); + this.uses = new ArrayList<>(); + } + + public ArrayList getUses() { + return uses; + } + + public void addUse(IrValue value) { + if (value == null) { + return; + } + uses.add(value); + value.addUser(this); + } + + public IrValue getUse(int index) { + if (index >= uses.size()) { + return null; + } + return uses.get(index); + } + + public int getNumUses() { + return uses.size(); + } +} diff --git a/midend/llvm/value/IrBasicBlock.java b/midend/llvm/value/IrBasicBlock.java new file mode 100644 index 0000000..2bf2100 --- /dev/null +++ b/midend/llvm/value/IrBasicBlock.java @@ -0,0 +1,120 @@ +package midend.llvm.value; + +import java.util.ArrayList; +import java.util.HashSet; + +import midend.llvm.instr.IrInstr; +import midend.llvm.instr.ReturnInstr; +import midend.llvm.type.IrBasicBlockType; + +public class IrBasicBlock extends IrValue { + private ArrayList instrs; + private IrFuncValue func; + private ArrayList preds; //前驱 + private ArrayList succs; //后继 + private HashSet domied; //支配该节点 + private IrBasicBlock directDomi; + private HashSet directDomies; //该节点直接支配 + private HashSet domiFrontier; + + public IrBasicBlock(String name, IrFuncValue func) { + super(new IrBasicBlockType(), name); + this.func = func; + instrs = new ArrayList<>(); + preds = new ArrayList<>(); + succs = new ArrayList<>(); + domied = new HashSet<>(); + directDomi = null; + directDomies = new HashSet<>(); + domiFrontier = new HashSet<>(); + } + + public void addInstr(IrInstr instr) { + instrs.add(instr); + instr.setBBlock(this); + } + + public IrFuncValue getFunc() { + return func; + } + + public boolean isEmpty() { + return instrs.isEmpty(); + } + + public boolean isEntry() { + return this.func.getBBlock(0) == this; + } + + public ArrayList getPreds() { + return preds; + } + + public ArrayList getSuccs() { + return succs; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getName() + ":\n\t"); + for (IrInstr instr : instrs) { + sb.append(instr.toString()); + if (instr != instrs.get(instrs.size() - 1)) { + sb.append("\n\t"); + } + } + return sb.toString(); + } + + public boolean lastIsReturn() { + if (instrs.isEmpty()) { + return false; + } + return instrs.get(instrs.size() - 1) instanceof ReturnInstr; + } + + public void clearCfg() { + this.preds.clear(); + this.succs.clear(); + domied.clear(); + directDomi = null; + directDomies.clear(); + domiFrontier.clear(); + } + + public ArrayList getInstrs() { + return instrs; + } + + public void addPred(IrBasicBlock bb) { + this.preds.add(bb); + } + + public void addSucc(IrBasicBlock bb) { + this.succs.add(bb); + } + + public void addDomied(IrBasicBlock bb) { + this.domied.add(bb); + } + + public void addDirectDomies(IrBasicBlock bb) { + this.directDomies.add(bb); + } + + public void addDomiFrontier(IrBasicBlock bb) { + this.domiFrontier.add(bb); + } + + public void setDirectDomi(IrBasicBlock bb) { + this.directDomi = bb; + } + + public HashSet getDomied() { + return domied; + } + + public IrBasicBlock getDirectDomi() { + return this.directDomi; + } +} diff --git a/midend/llvm/value/IrFuncValue.java b/midend/llvm/value/IrFuncValue.java new file mode 100644 index 0000000..bb570c3 --- /dev/null +++ b/midend/llvm/value/IrFuncValue.java @@ -0,0 +1,71 @@ +package midend.llvm.value; + +import java.util.ArrayList; +import midend.llvm.type.IrType; +import midend.llvm.IrBuilder; +import midend.llvm.instr.ReturnInstr; +import midend.llvm.type.IrFuncType; + +public class IrFuncValue extends IrValue { + private ArrayList params; + private ArrayList bblocks; + + public IrFuncValue(String name, IrType retType) { + super(new IrFuncType(retType), name); + params = new ArrayList<>(); + bblocks = new ArrayList<>(); + } + + public ArrayList getParams() { + return params; + } + + public ArrayList getBBlocks() { + return bblocks; + } + + public IrBasicBlock getBBlock(int index) { + return bblocks.get(index); + } + + public void addParam(IrValue param) { + params.add(param); + } + + public void addBBlock(IrBasicBlock bblock) { + bblocks.add(bblock); + } + + public boolean isMain() { + return getName().equals("@main"); + } + + public IrType getRetType() { + return ((IrFuncType) getType()).getReturnType(); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("define dso_local " + this.getRetType() + " " + this.getName() + "("); + for (int i = 0; i < params.size(); i++) { + sb.append(params.get(i).getType() + " " + params.get(i).getName()); + if (i < params.size() - 1) { + sb.append(", "); + } + } + sb.append(") {\n"); + for (IrBasicBlock bblock : bblocks) { + sb.append(bblock.toString() + "\n"); + } + sb.append("}\n"); + return sb.toString(); + } + + public void checkReturn() { + IrBasicBlock currentBB = IrBuilder.getCurrentBB(); + if (!currentBB.lastIsReturn()) { + ReturnInstr returnInstr = new ReturnInstr(null); // 确保没有return的情况只有void + IrBuilder.addInstr(returnInstr); + } + } +} diff --git a/midend/llvm/value/IrGlobalValue.java b/midend/llvm/value/IrGlobalValue.java new file mode 100644 index 0000000..60fa33c --- /dev/null +++ b/midend/llvm/value/IrGlobalValue.java @@ -0,0 +1,28 @@ +package midend.llvm.value; + +import midend.llvm.type.IrType; +import midend.llvm.constant.IrConstant; + +public class IrGlobalValue extends IrValue { + private boolean isConstant; + private IrConstant initVal; + + public IrGlobalValue(IrType type, String name, boolean isConstant, IrConstant initVal) { + super(type, name); + this.isConstant = isConstant; + this.initVal = initVal; + } + + public boolean isConstant() { + return isConstant; + } + + public IrConstant getInitVal() { + return initVal; + } + + public String toString() { + return isConstant ? getName() + " = dso_local constant " + initVal.toString() : + getName() + " = dso_local global " + initVal.toString(); + } +} diff --git a/midend/llvm/value/IrLoop.java b/midend/llvm/value/IrLoop.java new file mode 100644 index 0000000..9101af4 --- /dev/null +++ b/midend/llvm/value/IrLoop.java @@ -0,0 +1,32 @@ +package midend.llvm.value; + +public class IrLoop { + private IrBasicBlock condBB; + private IrBasicBlock bodyBB; + private IrBasicBlock stepBB; + private IrBasicBlock followBB; + + public IrLoop(IrBasicBlock condBB, IrBasicBlock bodyBB, + IrBasicBlock stepBB, IrBasicBlock followBB) { + this.condBB = condBB; + this.bodyBB = bodyBB; + this.stepBB = stepBB; + this.followBB = followBB; + } + + public IrBasicBlock getCondBB() { + return condBB; + } + + public IrBasicBlock getBodyBB() { + return bodyBB; + } + + public IrBasicBlock getStepBB() { + return stepBB; + } + + public IrBasicBlock getFollowBB() { + return followBB; + } +} diff --git a/midend/llvm/value/IrValue.java b/midend/llvm/value/IrValue.java new file mode 100644 index 0000000..8bb31c4 --- /dev/null +++ b/midend/llvm/value/IrValue.java @@ -0,0 +1,38 @@ +package midend.llvm.value; + +import java.util.ArrayList; + +import midend.llvm.type.IrType; +import midend.llvm.use.IrUser; + +public class IrValue { + private IrType type; + private String name; + private ArrayList users; + + public IrValue(IrType type, String name) { + this.type = type; + this.name = name; + this.users = new ArrayList<>(); + } + + public IrType getType() { + return type; + } + + public String getName() { + return name; + } + + public ArrayList getUsers() { + return users; + } + + public void addUser(IrUser user) { + users.add(user); + } + + public String toString() { + return type.toString() + " " + name; + } +} diff --git a/midend/optimize/CfgMake.java b/midend/optimize/CfgMake.java new file mode 100644 index 0000000..b8cd586 --- /dev/null +++ b/midend/optimize/CfgMake.java @@ -0,0 +1,112 @@ +package midend.optimize; + +import java.util.HashSet; + +import midend.llvm.instr.IrInstr; +import midend.llvm.instr.IrInstrType; +import midend.llvm.instr.JumpInstr; +import midend.llvm.value.IrBasicBlock; +import midend.llvm.value.IrFuncValue; +import midend.llvm.instr.BranchInstr; + +public class CfgMake extends Optimizer { + public void optimize() { + for (IrFuncValue func : getIrModule().getFuncs()) { + for (IrBasicBlock bb : func.getBBlocks()) { + bb.clearCfg(); + } + } + makeCfg(); + } + + public void makeCfg() { + for (IrFuncValue func : getIrModule().getFuncs()) { + for (IrBasicBlock bb : func.getBBlocks()) { + for (IrInstr instr : bb.getInstrs()) { + if (instr.getInstrType() == IrInstrType.BR) { + BranchInstr branchInstr = (BranchInstr) instr; + IrBasicBlock trueBlock = branchInstr.getTrueBB(); + IrBasicBlock falseBlock = branchInstr.getFalseBB(); + bb.addSucc(trueBlock); + bb.addSucc(falseBlock); + trueBlock.addPred(bb); + falseBlock.addPred(bb); + } else if (instr.getInstrType() == IrInstrType.JUMP) { + JumpInstr jumpInstr = (JumpInstr) instr; + IrBasicBlock jumpBlock = jumpInstr.getTargetBlock(); + bb.addSucc(jumpBlock); + jumpBlock.addPred(bb); + } + } + } + } + } + + public void makeDomination() { + for (IrFuncValue func : getIrModule().getFuncs()) { + for (IrBasicBlock bb : func.getBBlocks()) { + HashSet canArrive = new HashSet<>(); + handleArrive(func.getBBlock(0), bb, canArrive); + for (IrBasicBlock block : func.getBBlocks()) { + if (!canArrive.contains(block)) { + block.addDomied(bb); + } + } + } + } + } + + public void handleArrive(IrBasicBlock entryBlock, + IrBasicBlock deleteBlock, HashSet canArrive) { + if (entryBlock == deleteBlock) { + return; + } else { + if (!canArrive.contains(entryBlock)) { + canArrive.add(entryBlock); + } + for (IrBasicBlock succ : entryBlock.getSuccs()) { + if (succ != deleteBlock && !canArrive.contains(succ)) { + handleArrive(succ, deleteBlock, canArrive); + } + } + } + } + + public void makeDirectDomi() { + for (IrFuncValue func : getIrModule().getFuncs()) { + for (IrBasicBlock bb : func.getBBlocks()) { + for (IrBasicBlock domi : bb.getDomied()) { + HashSet bbDomi = bb.getDomied(); + HashSet domiDomi = domi.getDomied(); + for (IrBasicBlock domiDomiBB : domiDomi) { + if (bbDomi.contains(domiDomiBB)) { + bbDomi.remove(domiDomiBB); + } + } + if (bbDomi.size() == 1 && bbDomi.contains(bb)) { + bb.setDirectDomi(domi); + domi.addDirectDomies(bb); + break; + } + } + } + } + } + + public void makeDomiFrontier() { + for (IrFuncValue func : getIrModule().getFuncs()) { + for (IrBasicBlock bb : func.getBBlocks()) { + for (IrBasicBlock succ : bb.getSuccs()) { + IrBasicBlock currentBB = bb; + while (!succ.getDomied().contains(currentBB) || currentBB == succ) { + currentBB.addDomiFrontier(succ); + currentBB = currentBB.getDirectDomi(); + if (currentBB == null) { + break; + } + } + } + } + } + } +} diff --git a/midend/optimize/Optimizer.java b/midend/optimize/Optimizer.java new file mode 100644 index 0000000..8528aef --- /dev/null +++ b/midend/optimize/Optimizer.java @@ -0,0 +1,19 @@ +package midend.optimize; + +import midend.llvm.IrModule; + +public class Optimizer { + private static IrModule irModule; + + public void setIrModule(IrModule irModule) { + Optimizer.irModule = irModule; + } + + public static IrModule getIrModule() { + return irModule; + } + + public void optimize() { + + } +} diff --git a/midend/symbol/ArraySymbol.java b/midend/symbol/ArraySymbol.java new file mode 100644 index 0000000..6eb2a26 --- /dev/null +++ b/midend/symbol/ArraySymbol.java @@ -0,0 +1,20 @@ +package midend.symbol; + +public class ArraySymbol extends Symbol { + private int dim; // -1 means unknown + + public ArraySymbol(String name, SymbolType type, int line, int dim) { + super(name, type, line); + this.dim = dim; + } + + public int getDim() { + return dim; + } + + public void fullValue() { + for (int i = getValueList().size(); i < dim; i++) { + addValue(0); + } + } +} diff --git a/midend/symbol/FuncSymbol.java b/midend/symbol/FuncSymbol.java new file mode 100644 index 0000000..5a80b36 --- /dev/null +++ b/midend/symbol/FuncSymbol.java @@ -0,0 +1,50 @@ +package midend.symbol; + +import java.util.ArrayList; + +public class FuncSymbol extends Symbol { + private int returnType; // 0 for void, 1 for int + private ArrayList paramList; // 0 for var, 1 for array + private ArrayList paramSymbolList; + + public FuncSymbol(String name, SymbolType type, int line, int returnType) { + super(name, type, line); + paramList = new ArrayList<>(); + paramSymbolList = new ArrayList<>(); + this.returnType = returnType; + } + + public void addParam(int param) { + paramList.add(param); + } + + public void addParamSymbol(Symbol paramSymbol) { + paramSymbolList.add(paramSymbol); + } + + public int getParamNum() { + return paramList.size(); + } + + public int getReturnType() { + return returnType; + } + + public int getParamType(int index) { + return paramList.get(index); + } + + public void printParams() { + for (int i = 0; i < paramList.size(); i++) { + System.out.print(paramList.get(i) + " "); + } + } + + public ArrayList getParamList() { + return paramList; + } + + public ArrayList getParamSymbolList() { + return paramSymbolList; + } +} diff --git a/midend/symbol/Symbol.java b/midend/symbol/Symbol.java new file mode 100644 index 0000000..e9ceb3d --- /dev/null +++ b/midend/symbol/Symbol.java @@ -0,0 +1,77 @@ +package midend.symbol; + +import java.util.ArrayList; + +import midend.llvm.value.IrValue; + +public class Symbol { + private String name; + private SymbolType type; + private int line; + private ArrayList valueList; + private IrValue irValue; + + public Symbol(String name, SymbolType type, int line) { + this.name = name; + this.type = type; + this.line = line; + valueList = new ArrayList<>(); + irValue = null; + } + + public void setIrValue(IrValue irValue) { + this.irValue = irValue; + } + + public IrValue getIrValue() { + return irValue; + } + + public void addValue(int value) { + valueList.add(value); + } + + public void addValue(ArrayList valueList) { + this.valueList.addAll(valueList); + } + + public ArrayList getValueList() { + return valueList; + } + + public int getValue(int index) { + return valueList.get(index); + } + + public String getName() { + return name; + } + + public String getTypeStr() { + return type.toString(); + } + + public SymbolType getType() { + return type; + } + + public int getLine() { + return line; + } + + public String toString() { + return name + " " + type.toString() + "\n"; + } + + public boolean isThatType(int type) { // 0 for normal var, 1 for array, 2 for func + if (type == 1) { + return this.type == SymbolType.INT_ARRAY || this.type == SymbolType.CONST_INT_ARRAY + || this.type == SymbolType.STATIC_INT_ARRAY; + } else if (type == 2) { + return this.type == SymbolType.INT_FUNC || this.type == SymbolType.VOID_FUNC; + } else { + return this.type == SymbolType.INT || this.type == SymbolType.CONST_INT + || this.type == SymbolType.STATIC_INT; + } + } +} diff --git a/midend/symbol/SymbolManager.java b/midend/symbol/SymbolManager.java new file mode 100644 index 0000000..f5db4a0 --- /dev/null +++ b/midend/symbol/SymbolManager.java @@ -0,0 +1,136 @@ +package midend.symbol; + +import java.util.ArrayList; + +import error.Errors; + +public class SymbolManager { + public static ArrayList symbolTableList; + public static ArrayList sequence; + public static SymbolTable currentTable; + public static int currentSequence; + + public static void init() { + symbolTableList = new ArrayList<>(); + sequence = new ArrayList<>(); + currentTable = null; + currentSequence = -1; + } + + public static void addSymbolTable() { + SymbolTable symbolTable = new SymbolTable(symbolTableList.size() + 1); + symbolTableList.add(symbolTable); + sequence.add(symbolTable.getTableId()); + currentSequence++; + if (currentTable != null) { + symbolTable.setParentTable(currentTable); + } + currentTable = symbolTable; + } + + public static ArrayList getSymbolTableList() { + return symbolTableList; + } + + public static void releaseSymbolTable(int tableId) { + symbolTableList.get(tableId - 1).release(); + currentTable = null; + for (int i = symbolTableList.size() - 1; i >= 0; i--) { + if (!symbolTableList.get(i).isReleased()) { + currentTable = symbolTableList.get(i); + currentSequence++; + sequence.add(currentTable.getTableId()); + break; + } + } + } + + public static void releaseSymbolTable() { + releaseSymbolTable(currentTable.getTableId()); + } + + public static int getSymbolTableSize() { + return symbolTableList.size(); + } + + public static void addSymbol(Symbol symbol, Errors errors) { + currentTable.addSymbol(symbol, errors); + } + + public static String getSymbolTableInfo() { + String info = ""; + for (SymbolTable symbolTable : symbolTableList) { + info += symbolTable.toString(); + } + return info; + } + + public static Symbol getSymbol(String name) { + SymbolTable stable = currentTable; + Symbol symbol = null; + while (stable != null) { + symbol = stable.getSymbol(name); + if (symbol != null) { + break; + } + stable = stable.getParentTable(); + } + return symbol; + } + + public static Symbol getSymbol(String name, boolean defined) { + SymbolTable stable = currentTable; + Symbol symbol = null; + while (stable != null) { + symbol = stable.getSymbol(name); + if (symbol != null && symbol.getIrValue() != null) { + break; + } + stable = stable.getParentTable(); + } + return symbol; + } + + public static void nextTable() { + currentSequence++; + if (currentSequence >= sequence.size()) { + return; + } + currentTable = symbolTableList.get(sequence.get(currentSequence) - 1); + } + + public static void lastTable() { + currentSequence--; + if (currentSequence < 0) { + currentSequence = 0; + currentTable = symbolTableList.get(0); + return; + } + currentTable = symbolTableList.get(sequence.get(currentSequence) - 1); + } + + public static void reset() { + currentSequence = -1; + currentTable = null; + } + + public static boolean IsGlobal() { + return currentTable.getTableId() == 1; + } + + public static ArrayList getSequence() { + return sequence; + } + + public static int getCurrentSequence() { + return currentSequence; + } + + public static int getCurrentTableId() { + return sequence.get(currentSequence); + } + + public static SymbolTable getCurrentTable() { + return currentTable; + } +} diff --git a/midend/symbol/SymbolTable.java b/midend/symbol/SymbolTable.java new file mode 100644 index 0000000..1b01a61 --- /dev/null +++ b/midend/symbol/SymbolTable.java @@ -0,0 +1,68 @@ +package midend.symbol; + +import java.util.ArrayList; +import java.util.HashMap; + +import error.Error; +import error.ErrorType; +import error.Errors; + +public class SymbolTable { + private ArrayList symbolList; + private HashMap symbolMap; + private int tableId; + private boolean isReleased; + private SymbolTable parentTable; + + public SymbolTable(int tableId) { + this.tableId = tableId; + isReleased = false; + symbolList = new ArrayList<>(); + symbolMap = new HashMap<>(); + parentTable = null; + } + + public int getTableId() { + return tableId; + } + + public boolean isReleased() { + return isReleased; + } + + public void release() { + isReleased = true; + } + + public void addSymbol(Symbol symbol, Errors errors) { + if (symbolMap.containsKey(symbol.getName())) { + errors.addError(new Error(symbol.getLine(), ErrorType.b)); + return; + } + symbolList.add(symbol); + symbolMap.put(symbol.getName(), symbol); + } + + public void setParentTable(SymbolTable parentTable) { + this.parentTable = parentTable; + } + + public SymbolTable getParentTable() { + return parentTable; + } + + public Symbol getSymbol(String name) { + if (symbolMap.containsKey(name)) { + return symbolMap.get(name); + } + return null; + } + + public String toString() { + String info = ""; + for (Symbol symbol : symbolList) { + info += tableId + " " + symbol.toString(); + } + return info; + } +} diff --git a/midend/symbol/SymbolType.java b/midend/symbol/SymbolType.java new file mode 100644 index 0000000..855c010 --- /dev/null +++ b/midend/symbol/SymbolType.java @@ -0,0 +1,22 @@ +package midend.symbol; + +public enum SymbolType { + CONST_INT("ConstInt"), + CONST_INT_ARRAY("ConstIntArray"), + STATIC_INT("StaticInt"), + INT("Int"), + INT_ARRAY("IntArray"), + STATIC_INT_ARRAY("StaticIntArray"), + VOID_FUNC("VoidFunc"), + INT_FUNC("IntFunc"); + + private final String type; + SymbolType(String type) { + this.type = type; + } + + @Override + public String toString() { + return type; + } +} diff --git a/midend/visit/Visitor.java b/midend/visit/Visitor.java new file mode 100644 index 0000000..2b902d5 --- /dev/null +++ b/midend/visit/Visitor.java @@ -0,0 +1,36 @@ +package midend.visit; + +import java.util.ArrayList; + +import frontend.ast.CompUnit; +import frontend.ast.decl.Decl; +import frontend.ast.func.FuncDef; +import frontend.ast.func.MainFuncDef; +import midend.symbol.SymbolManager; + +public class Visitor { + private CompUnit compUnit; + + public Visitor(CompUnit compUnit) { + this.compUnit = compUnit; + SymbolManager.reset(); + SymbolManager.nextTable(); + } + + public void visit() { + ArrayList decls = this.compUnit.GetDecls(); + ArrayList funcDefs = this.compUnit.GetFuncDefs(); + MainFuncDef mainFuncDef = this.compUnit.GetMainFuncDef(); + + for (Decl decl : decls) { + VisitorDecl.visitDecl(decl); + } + + for (FuncDef funcDef : funcDefs) { + VisitorFuncDef.visitFuncDef(funcDef); + } + + VisitorFuncDef.visitMainFuncDef(mainFuncDef); + } + //:TODO:符号表的变换,什么时候往前进一个符号表,这需要人工手工来操作 +} diff --git a/midend/visit/VisitorBlock.java b/midend/visit/VisitorBlock.java new file mode 100644 index 0000000..05c2930 --- /dev/null +++ b/midend/visit/VisitorBlock.java @@ -0,0 +1,35 @@ +package midend.visit; + +import java.util.ArrayList; + +import frontend.ast.block.Block; +import frontend.ast.block.BlockItem; +import frontend.ast.block.Stmt; +import frontend.ast.decl.Decl; +import midend.symbol.SymbolManager; + +public class VisitorBlock { + public static void visitBlock(Block block) { + if (!block.isFuncBlock()) { + SymbolManager.nextTable(); + } + // System.out.println("(block)now table: " + SymbolManager.getCurrentTableId()); + // System.out.println("bsequence: " + SymbolManager.getCurrentSequence());//TODO:debug + ArrayList blockItems = block.getBlockItems(); + for (BlockItem blockItem : blockItems) { + visitBlockItem(blockItem); + } + if (!block.isFuncBlock()) { + SymbolManager.nextTable(); + } + // System.out.println("(block)now table: " + SymbolManager.getCurrentTableId());//TODO:debug + } + + public static void visitBlockItem(BlockItem blockItem) { + if (blockItem.getChild(0) instanceof Decl) { + VisitorDecl.visitDecl((Decl) blockItem.getChild(0)); + } else { + VisitorStmt.visitStmt((Stmt) blockItem.getChild(0)); + } + } +} diff --git a/midend/visit/VisitorDecl.java b/midend/visit/VisitorDecl.java new file mode 100644 index 0000000..601a771 --- /dev/null +++ b/midend/visit/VisitorDecl.java @@ -0,0 +1,167 @@ +package midend.visit; + +import java.util.ArrayList; + +import frontend.ast.decl.ConstDecl; +import frontend.ast.decl.ConstDef; +import frontend.ast.decl.Decl; +import frontend.ast.decl.VarDecl; +import frontend.ast.decl.VarDef; +import frontend.ast.exp.ConstExp; +import frontend.ast.exp.Exp; +import frontend.ast.token.TokenNode; +import frontend.lexer.Token; +import midend.llvm.IrBuilder; +import midend.llvm.constant.IrConstant; +import midend.llvm.constant.IrConstantArray; +import midend.llvm.constant.IrConstantInt; +import midend.llvm.instr.AllocateInstr; +import midend.llvm.instr.StoreInstr; +import midend.llvm.instr.GepInstr; +import midend.llvm.type.IrArrayType; +import midend.llvm.type.IrFuncType; +import midend.llvm.type.IrInterType; +import midend.llvm.type.IrPointerType; +import midend.llvm.type.IrType; +import midend.llvm.value.IrGlobalValue; +import midend.llvm.value.IrValue; +import midend.symbol.SymbolType; +import midend.symbol.ArraySymbol; +import midend.symbol.Symbol; +import midend.symbol.SymbolManager; + +public class VisitorDecl { + public static void visitDecl(Decl decl) { + if (decl.getChild(0) instanceof ConstDecl) { + visitConstDecl((ConstDecl) decl.getChild(0)); + } else { + visitVarDecl((VarDecl) decl.getChild(0)); + } + } + + public static void visitConstDecl(ConstDecl constDecl) { + ArrayList constDefs = constDecl.GetConstDefs(); + for (ConstDef constDef : constDefs) { + visitConstDef(constDef); + } + } + + public static void visitVarDecl(VarDecl varDecl) { + ArrayList varDefs = varDecl.GetVarDefs(); + for (VarDef varDef : varDefs) { + visitVarDef(varDef); + } + } + + public static void visitConstDef(ConstDef constDef) { + Symbol symbol = SymbolManager.getSymbol(((TokenNode) constDef.getChild(0)).getValue()); + if (SymbolManager.IsGlobal()) { // 全局变量下直接声明 + IrGlobalValue irGlobalValue = new IrGlobalValue( + new IrPointerType(getSymbolIrType(symbol)), + IrBuilder.getGlobalName(), true, getSymbolIrConst(symbol)); + IrBuilder.addNewGlobal(irGlobalValue); + symbol.setIrValue(irGlobalValue); + } else { // 局部变量需要分配地址再存值 + AllocateInstr allocateInstr = new AllocateInstr(getSymbolIrType(symbol), + IrBuilder.getLocalName()); + IrBuilder.addInstr(allocateInstr); + symbol.setIrValue(allocateInstr); + ArrayList valueList = symbol.getValueList(); + if (!(symbol instanceof ArraySymbol)) { + StoreInstr storeInstr = new StoreInstr(getSymbolIrConst(symbol), + allocateInstr); + IrBuilder.addInstr(storeInstr); + } else { + for (int i = 0; i < valueList.size(); i++) { + GepInstr gepInstr = new GepInstr(allocateInstr, + new IrConstantInt(i), IrBuilder.getLocalName()); + IrBuilder.addInstr(gepInstr); + IrValue initValue = new IrConstantInt(valueList.get(i)); + StoreInstr storeInstr = new StoreInstr(initValue, gepInstr); + IrBuilder.addInstr(storeInstr); + } + } + } + } + + private static void visitVarDef(VarDef varDef) { + Symbol symbol = SymbolManager.getSymbol(((TokenNode) varDef.getChild(0)).getValue()); + if (SymbolManager.IsGlobal()) { + IrGlobalValue irGlobalValue = new IrGlobalValue( + new IrPointerType(getSymbolIrType(symbol)), + IrBuilder.getGlobalName(), false, getSymbolIrConst(symbol)); + IrBuilder.addNewGlobal(irGlobalValue); + symbol.setIrValue(irGlobalValue); + } else { // Think:static修饰的变量该如何实现 + visitLocalVarDef(varDef, symbol); + } + } + + private static void visitLocalVarDef(VarDef varDef, Symbol symbol) { + if (symbol.getType().equals(SymbolType.STATIC_INT) || + symbol.getType().equals(SymbolType.STATIC_INT_ARRAY)) { + // 当为局部变量且为static修饰的变量的时候,将其作为全局变量处理 + IrGlobalValue irGlobalValue = new IrGlobalValue( + new IrPointerType(getSymbolIrType(symbol)), + IrBuilder.getGlobalName(), false, getSymbolIrConst(symbol)); + IrBuilder.addNewGlobal(irGlobalValue); + symbol.setIrValue(irGlobalValue); + return; + } + AllocateInstr allocateInstr = new AllocateInstr( + getSymbolIrType(symbol), IrBuilder.getLocalName()); + IrBuilder.addInstr(allocateInstr); + if (!(symbol instanceof ArraySymbol)) { // 非数组变量 + if (varDef.HaveInitVal()) { + Exp exp = varDef.getInitVal().getExpList().get(0); + IrValue irExp = VisitorExp.visitExp(exp); + StoreInstr storeInstr = new StoreInstr(irExp, allocateInstr); + IrBuilder.addInstr(storeInstr); + } + } else { // 数组变量 + if (varDef.HaveInitVal()) { + ArrayList expList = varDef.getInitVal().getExpList(); + for (int i = 0; i < expList.size(); i++) { + IrValue irExp = VisitorExp.visitExp(expList.get(i)); + irExp = IrType.convertType(irExp, IrInterType.INT32); + GepInstr gepInstr = new GepInstr(allocateInstr, + new IrConstantInt(i), IrBuilder.getLocalName()); + IrBuilder.addInstr(gepInstr); + StoreInstr storeInstr = new StoreInstr(irExp, gepInstr); + IrBuilder.addInstr(storeInstr); + } + } + } + symbol.setIrValue(allocateInstr); + } + + public static IrType getSymbolIrType(Symbol symbol) { + SymbolType st = symbol.getType(); + if (st.equals(SymbolType.INT) || st.equals(SymbolType.CONST_INT) + || st.equals(SymbolType.STATIC_INT)) { + return IrInterType.INT32; + } else if (st.equals(SymbolType.INT_ARRAY) || st.equals(SymbolType.CONST_INT_ARRAY) + || st.equals(SymbolType.STATIC_INT_ARRAY)) { + return new IrArrayType(IrInterType.INT32, ((ArraySymbol) symbol).getDim()); + } else { + if (st.equals(SymbolType.INT_FUNC)) { + return new IrFuncType(IrInterType.INT32); + } else { + return new IrFuncType(IrInterType.VOID); + } + } + } + + public static IrConstant getSymbolIrConst(Symbol symbol) { + ArrayList valueList = symbol.getValueList(); + if (symbol instanceof ArraySymbol) { + ArrayList elements = new ArrayList<>(); + for (int i = 0; i < valueList.size(); i++) { + elements.add(new IrConstantInt(valueList.get(i))); + } + return new IrConstantArray(symbol.getName(), elements, ((ArraySymbol) symbol).getDim()); + } else { + return valueList.isEmpty() ? new IrConstantInt(0) : new IrConstantInt(valueList.get(0)); + } + } +} diff --git a/midend/visit/VisitorExp.java b/midend/visit/VisitorExp.java new file mode 100644 index 0000000..e91c251 --- /dev/null +++ b/midend/visit/VisitorExp.java @@ -0,0 +1,264 @@ +package midend.visit; + +import frontend.ast.exp.Exp; +import frontend.ast.exp.LAndExp; +import frontend.ast.exp.LOrExp; +import frontend.ast.exp.LVal; + +import java.util.ArrayList; + +import frontend.ast.exp.AddExp; +import frontend.ast.exp.EqExp; +import frontend.ast.exp.MulExp; +import frontend.ast.exp.NumberExp; +import frontend.ast.exp.PrimaryExp; +import frontend.ast.exp.RelExp; +import frontend.ast.exp.UnaryExp; +import frontend.ast.exp.UnaryOp; +import frontend.ast.exp.Cond; +import frontend.ast.token.TokenNode; +import midend.llvm.IrBuilder; +import midend.llvm.constant.IrConstantInt; +import midend.llvm.instr.AluInstr; +import midend.llvm.instr.BranchInstr; +import midend.llvm.instr.CallInstr; +import midend.llvm.instr.CmpInstr; +import midend.llvm.instr.ExtendInstr; +import midend.llvm.instr.GepInstr; +import midend.llvm.instr.GetIntInstr; +import midend.llvm.instr.LoadInstr; +import midend.llvm.type.IrInterType; +import midend.llvm.type.IrType; +import midend.llvm.value.IrBasicBlock; +import midend.llvm.value.IrFuncValue; +import midend.llvm.value.IrValue; +import midend.symbol.*; + +public class VisitorExp { + public static IrValue visitExp(Exp exp) { + return visitAddExp((AddExp) exp.getChild(0)); + } + + public static IrValue visitAddExp(AddExp addExp) { + if (addExp.getChildren().size() == 1) { + return visitMulExp((MulExp) addExp.getChild(0)); + } else { + IrValue left = visitAddExp((AddExp) addExp.getChild(0)); + TokenNode op = (TokenNode) addExp.getChild(1); + IrValue right = visitMulExp((MulExp) addExp.getChild(2)); + left = IrType.convertType(left, IrInterType.INT32); + right = IrType.convertType(right, IrInterType.INT32); + AluInstr aluInstr = new AluInstr(IrBuilder.getLocalName(), op.getValue(), left, right); + IrBuilder.addInstr(aluInstr); + return aluInstr; + } + } + + public static IrValue visitMulExp(MulExp mulExp) { + if (mulExp.getChildren().size() == 1) { + return visitUnaryExp((UnaryExp) mulExp.getChild(0)); + } else { + IrValue left = visitMulExp((MulExp) mulExp.getChild(0)); + TokenNode op = (TokenNode) mulExp.getChild(1); + IrValue right = visitUnaryExp((UnaryExp) mulExp.getChild(2)); + left = IrType.convertType(left, IrInterType.INT32); + right = IrType.convertType(right, IrInterType.INT32); + AluInstr aluInstr = new AluInstr(IrBuilder.getLocalName(), op.getValue(), left, right); + IrBuilder.addInstr(aluInstr); + return aluInstr; + } + } + + public static IrValue visitUnaryExp(UnaryExp unaryExp) { + if (unaryExp.getChild(0) instanceof PrimaryExp) { + return visitPrimaryExp((PrimaryExp) unaryExp.getChild(0)); + } else if (unaryExp.getChild(0) instanceof TokenNode) { + return visitFuncCall((TokenNode) unaryExp.getChild(0), unaryExp.getParamList()); + } else { + return visitOpUnaryExp((UnaryOp) unaryExp.getChild(0), (UnaryExp) unaryExp.getChild(1)); + } + } + + public static IrValue visitOpUnaryExp(UnaryOp uop, UnaryExp unaryExp) { + String op = ((TokenNode) uop.getChild(0)).getValue(); + IrValue operand = visitUnaryExp(unaryExp); + IrConstantInt zero = new IrConstantInt(0); + if (op.equals("+")) { + return operand; + } else if (op.equals("-")) { + AluInstr aluInstr = new AluInstr(IrBuilder.getLocalName(), op, zero, operand); + IrBuilder.addInstr(aluInstr); + return aluInstr; + } else { + operand = IrType.convertType(operand, IrInterType.INT32); + CmpInstr cmpInstr = new CmpInstr(IrBuilder.getLocalName(), "==", zero, operand); + IrBuilder.addInstr(cmpInstr); + ExtendInstr extendInstr = new ExtendInstr( + IrBuilder.getLocalName(), IrInterType.INT32, cmpInstr); + IrBuilder.addInstr(extendInstr); + return extendInstr; + } + } + + public static IrValue visitPrimaryExp(PrimaryExp primaryExp) { + if (primaryExp.getChild(0) instanceof TokenNode) { + return visitExp((Exp) primaryExp.getChild(1)); + } else if (primaryExp.getChild(0) instanceof LVal) { + return visitLVal((LVal) primaryExp.getChild(0), false); + } else { + return new IrConstantInt(((NumberExp) primaryExp.getChild(0)).getValue()); + } + } + + public static IrValue visitFuncCall(TokenNode funcName, ArrayList paramList) { + if (funcName.getValue().equals("getint")) { + GetIntInstr getIntInstr = new GetIntInstr(IrBuilder.getLocalName()); + IrBuilder.addInstr(getIntInstr); + return getIntInstr; + } + FuncSymbol funcSymbol = (FuncSymbol) SymbolManager.getSymbol(funcName.getName(), true); + IrFuncValue irFunction = (IrFuncValue) funcSymbol.getIrValue(); + ArrayList args = new ArrayList<>(); + for (Exp param : paramList) { + args.add(visitExp(param)); + } + CallInstr callInstr = new CallInstr(IrBuilder.getLocalName(), irFunction, args); + IrBuilder.addInstr(callInstr); + return callInstr; + } + + public static IrValue visitLVal(LVal lval, boolean assign) { + if (assign) { + Symbol symbol = SymbolManager.getSymbol(((TokenNode) lval.getChild(0)).getName(), true); + if (!(symbol instanceof ArraySymbol)) { + return symbol.getIrValue(); + } else { + Exp exp = (Exp) lval.getChild(2); + IrValue pointer = symbol.getIrValue(); + GepInstr gepInstr = new GepInstr( + pointer, visitExp(exp), IrBuilder.getLocalName()); + IrBuilder.addInstr(gepInstr); + return gepInstr; + } + } else { + Symbol symbol = SymbolManager.getSymbol(((TokenNode) lval.getChild(0)).getName(), true); + // if (symbol == null) { + // System.out.println(((TokenNode)lval.getChild(0)).getLine() + " " + + // ((TokenNode)lval.getChild(0)).getValue()); + // SymbolTable table = SymbolManager.getCurrentTable(); + // System.out.println(table.toString()); + // // TODO:报错 + // } + if (!(symbol instanceof ArraySymbol)) { + LoadInstr loadInstr = new LoadInstr(symbol.getIrValue(), IrBuilder.getLocalName()); + IrBuilder.addInstr(loadInstr); + return loadInstr; + } else { + if (lval.getChildren().size() == 1) { + GepInstr gepInstr = new GepInstr( + symbol.getIrValue(), new IrConstantInt(0), IrBuilder.getLocalName()); + IrBuilder.addInstr(gepInstr); + return gepInstr; + } else { + Exp exp = (Exp) lval.getChild(2); + GepInstr gepInstr = new GepInstr( + symbol.getIrValue(), visitExp(exp), IrBuilder.getLocalName()); + IrBuilder.addInstr(gepInstr); + LoadInstr loadInstr = new LoadInstr(gepInstr, IrBuilder.getLocalName()); + IrBuilder.addInstr(loadInstr); + return loadInstr; + } + } + } + } + + // TODO:条件表达式的实现 + public static IrValue visitRelExp(RelExp relExp) { + if (relExp.getChildren().size() == 1) { + return visitAddExp((AddExp) relExp.getChild(0)); + } else { + IrValue left = visitRelExp((RelExp) relExp.getChild(0)); + IrValue right = visitAddExp((AddExp) relExp.getChild(2)); + String op = ((TokenNode) relExp.getChild(1)).getValue(); + left = IrType.convertType(left, IrInterType.INT32); + right = IrType.convertType(right, IrInterType.INT32); + CmpInstr cmpInstr = new CmpInstr(IrBuilder.getLocalName(), op, left, right); + IrBuilder.addInstr(cmpInstr); + return cmpInstr; + } + } + + public static IrValue visitEqExp(EqExp eqExp) { + if (eqExp.getChildren().size() == 1) { + return visitRelExp((RelExp) eqExp.getChild(0)); + } else { + IrValue left = visitEqExp((EqExp) eqExp.getChild(0)); + IrValue right = visitRelExp((RelExp) eqExp.getChild(2)); + String op = ((TokenNode) eqExp.getChild(1)).getValue(); + left = IrType.convertType(left, IrInterType.INT32); + right = IrType.convertType(right, IrInterType.INT32); + CmpInstr cmpInstr = new CmpInstr(IrBuilder.getLocalName(), op, left, right); + IrBuilder.addInstr(cmpInstr); + return cmpInstr; + } + } + + public static IrValue visitLAndExp(LAndExp landExp, + IrBasicBlock trueBlock, IrBasicBlock falseBlock) { + if (landExp.getChildren().size() == 1) { + IrValue eqIrValue = visitEqExp((EqExp) landExp.getChild(0)); + eqIrValue = IrType.convertType(eqIrValue, IrInterType.BOOL); + BranchInstr branchInstr = new BranchInstr( + IrBuilder.getLocalName(), eqIrValue, trueBlock, falseBlock); + IrBuilder.addInstr(branchInstr); + return eqIrValue; + } else { + IrBasicBlock nextBB = new IrBasicBlock( + IrBuilder.getBlockName(), IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(nextBB); + IrValue left = visitLAndExp((LAndExp) landExp.getChild(0), nextBB, falseBlock); + IrBuilder.setCurrentBBlock(nextBB); + IrValue right = visitEqExp((EqExp) landExp.getChild(2)); + right = IrType.convertType(right, IrInterType.BOOL); + BranchInstr branchInstr2 = new BranchInstr( + IrBuilder.getLocalName(), right, trueBlock, falseBlock); + IrBuilder.addInstr(branchInstr2); + return right; + } + } + + public static void visitLOrExp(LOrExp lorExp, IrBasicBlock trueBB, IrBasicBlock falseBB) { + if (lorExp.getChildren().size() == 1) { + IrValue landIrValue = visitLAndExp((LAndExp) lorExp.getChild(0), trueBB, falseBB); + } else { + IrBasicBlock nextBB = new IrBasicBlock( + IrBuilder.getBlockName(), IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(nextBB); + visitLOrExp((LOrExp) lorExp.getChild(0), trueBB, nextBB); + IrBuilder.setCurrentBBlock(nextBB); + IrValue right = visitLAndExp((LAndExp) lorExp.getChild(2), trueBB, falseBB); + } + } + + public static void visitCond(Cond cond, IrBasicBlock trueBB, IrBasicBlock falseBB) { + visitLOrExp((LOrExp) cond.getChild(0), trueBB, falseBB); + } +} + + + + + + + + + + + + + + + + + + diff --git a/midend/visit/VisitorFuncDef.java b/midend/visit/VisitorFuncDef.java new file mode 100644 index 0000000..b6584d1 --- /dev/null +++ b/midend/visit/VisitorFuncDef.java @@ -0,0 +1,80 @@ +package midend.visit; + +import java.util.ArrayList; + +import frontend.ast.block.Block; +import frontend.ast.func.FuncDef; +import frontend.ast.func.MainFuncDef; +import frontend.ast.token.TokenNode; +import midend.llvm.IrBuilder; +import midend.llvm.instr.AllocateInstr; +import midend.llvm.instr.StoreInstr; +import midend.llvm.type.IrInterType; +import midend.llvm.type.IrPointerType; +import midend.llvm.value.IrFuncValue; +import midend.llvm.value.IrValue; + +import midend.symbol.Symbol; +import midend.symbol.FuncSymbol; +import midend.symbol.SymbolManager; + +public class VisitorFuncDef { + public static void visitFuncDef(FuncDef funcDef) { + FuncSymbol funcSymbol = (FuncSymbol) SymbolManager.getSymbol( + ((TokenNode) funcDef.getChild(1)).getName()); + IrInterType returnType = funcSymbol.getReturnType() == 1 + ? IrInterType.INT32 + : IrInterType.VOID; + IrFuncValue funcValue = new IrFuncValue( + IrBuilder.geFuncName(funcSymbol.getName()), returnType); + IrBuilder.addNewFunc(funcValue); + funcSymbol.setIrValue(funcValue); + // 进入函数作用域 + SymbolManager.nextTable(); + // System.out.println("(func)now table: " + SymbolManager.getCurrentTableId());//TODO:debug + ArrayList paramList = funcSymbol.getParamList(); + ArrayList paramSymbolList = funcSymbol.getParamSymbolList(); + ArrayList irParamList = new ArrayList<>(); + for (int i = 0; i < paramList.size(); i++) { + if (paramList.get(i) == 0) { + IrValue param = new IrValue(IrInterType.INT32, IrBuilder.getLocalName()); + irParamList.add(param); + funcValue.addParam(param); + } else { + IrValue param = new IrValue( + new IrPointerType(IrInterType.INT32), IrBuilder.getLocalName()); + irParamList.add(param); + funcValue.addParam(param); + paramSymbolList.get(i).setIrValue(param); + } + } + for (int i = 0; i < irParamList.size(); i++) { + if (paramList.get(i) == 1) { + continue; // 数组参数不分配内存 + } + AllocateInstr allocateInstr = new AllocateInstr( + irParamList.get(i).getType(), IrBuilder.getLocalName()); + IrBuilder.addInstr(allocateInstr); + StoreInstr storeInstr = new StoreInstr(irParamList.get(i), allocateInstr); + IrBuilder.addInstr(storeInstr); + paramSymbolList.get(i).setIrValue(allocateInstr); + } //这里貌似可以不用allocate?函数形参似乎可以直接拿来用? + Block block = (Block) funcDef.getChild(funcDef.getChildren().size() - 1); + VisitorBlock.visitBlock(block); + // TODO:check return? + funcValue.checkReturn(); + SymbolManager.nextTable(); + // System.out.println("(func)now table: " + SymbolManager.getCurrentTableId());//TODO:debug + } + + public static void visitMainFuncDef(MainFuncDef mainFuncDef) { + IrFuncValue mainFuncValue = new IrFuncValue( + IrBuilder.geFuncName("main"), IrInterType.INT32); + IrBuilder.addNewFunc(mainFuncValue); + SymbolManager.nextTable(); + // System.out.println("(mainfunc)now table: " + SymbolManager.getCurrentTableId());//TODO:debug + Block block = (Block) mainFuncDef.getChild(mainFuncDef.getChildren().size() - 1); + VisitorBlock.visitBlock(block); + SymbolManager.nextTable(); + } +} \ No newline at end of file diff --git a/midend/visit/VisitorStmt.java b/midend/visit/VisitorStmt.java new file mode 100644 index 0000000..0eb0d15 --- /dev/null +++ b/midend/visit/VisitorStmt.java @@ -0,0 +1,271 @@ +package midend.visit; + +import java.util.ArrayList; + +import frontend.ast.block.Block; +import frontend.ast.block.ForStmt; +import frontend.ast.block.Stmt; +import frontend.ast.exp.Cond; +import frontend.ast.exp.Exp; +import frontend.ast.exp.LVal; +import frontend.ast.token.TokenNode; +import frontend.lexer.Token; +import midend.symbol.SymbolManager; +import midend.llvm.IrBuilder; +import midend.llvm.constant.IrConstantStr; +import midend.llvm.instr.GetIntInstr; +import midend.llvm.instr.JumpInstr; +import midend.llvm.instr.PutIntInstr; +import midend.llvm.instr.PutStrInstr; +import midend.llvm.instr.ReturnInstr; +import midend.llvm.instr.StoreInstr; +import midend.llvm.type.IrInterType; +import midend.llvm.type.IrType; +import midend.llvm.value.IrBasicBlock; +import midend.llvm.value.IrValue; +import midend.llvm.value.IrLoop; + +public class VisitorStmt { + public static void visitStmt(Stmt stmt) { + if (stmt.getChild(0) instanceof LVal) { + visitAssign(stmt); + } else if (stmt.getChild(0) instanceof Exp + || (stmt.getChild(0) instanceof TokenNode + && ((TokenNode) stmt.getChild(0)).getValue().equals(";"))) { + visitExp(stmt); + } else if (stmt.getChild(0) instanceof Block) { + visitBlock(stmt); + } else if (((TokenNode) stmt.getChild(0)).getValue().equals("if")) { + visitIf(stmt); + } else if (((TokenNode) stmt.getChild(0)).getValue().equals("for")) { + visitFor(stmt); + } else if (((TokenNode) stmt.getChild(0)).getValue().equals("break")) { + visitBreak(stmt); + } else if (((TokenNode) stmt.getChild(0)).getValue().equals("continue")) { + visitContinue(stmt); + } else if (((TokenNode) stmt.getChild(0)).getValue().equals("return")) { + visitReturn(stmt); + } else { + visitPrintf(stmt); + } + } + + public static void visitBlock(Stmt stmt) { + Block block = (Block) stmt.getChild(0); + VisitorBlock.visitBlock(block); + } + + public static void visitExp(Stmt stmt) { + if (stmt.getChild(0) instanceof Exp) { + VisitorExp.visitExp((Exp) stmt.getChild(0)); + } + } + + public static void visitAssign(Stmt stmt) { + if (!stmt.isGetint()) { + LVal lval = (LVal) stmt.getChild(0); + Exp exp = (Exp) stmt.getChild(2); + IrValue lvalIr = VisitorExp.visitLVal(lval, true); + IrValue expIr = VisitorExp.visitExp(exp); + expIr = IrType.convertType(expIr, IrInterType.INT32); + StoreInstr storeInstr = new StoreInstr(expIr, lvalIr); + IrBuilder.addInstr(storeInstr); + } else { + LVal lval = (LVal) stmt.getChild(0); + IrValue lvalIr = VisitorExp.visitLVal(lval, true); + GetIntInstr getIntInstr = new GetIntInstr(IrBuilder.getLocalName()); + IrBuilder.addInstr(getIntInstr); + StoreInstr storeInstr = new StoreInstr(getIntInstr, lvalIr); + IrBuilder.addInstr(storeInstr); + } + } + + public static void visitPrintf(Stmt stmt) { + // System.out.println(((TokenNode)stmt.getChild(0)).getValue());//TODO:debug + String strconst = ((TokenNode) stmt.getChild(2)).getValue(); + ArrayList expList = stmt.getExpList(); + ArrayList expIrList = new ArrayList<>(); + for (Exp exp : expList) { + expIrList.add(VisitorExp.visitExp(exp)); + } + StringBuilder sb = new StringBuilder(); + int expnum = 0; + ArrayList printValue = new ArrayList<>(); + for (int i = 0; i < strconst.length(); i++) { + if (strconst.charAt(i) == '%') { + if (!sb.isEmpty() && !sb.toString().equals("\"")) { + IrConstantStr str = IrBuilder.getCurrentModule().getStr(sb.toString()); + // System.out.println(sb.toString());//TODO:debug + if (str == null) { + str = new IrConstantStr(sb.toString(), IrBuilder.getStrName()); + IrBuilder.addNewStr(str); + } + printValue.add(str); // 修改为到最后统一输出,而不是立即输出 + // PutStrInstr putStrInstr = new PutStrInstr(IrBuilder.getLocalName(), str); + // IrBuilder.addInstr(putStrInstr); + sb.setLength(0); + } else if (sb.toString().equals("\"")) { + sb.setLength(0); + } + IrValue expIr = expIrList.get(expnum++); + expIr = IrType.convertType(expIr, IrInterType.INT32); + printValue.add(expIr); // 修改为到最后统一输出,而不是立即输出 + // PutIntInstr putIntInstr = new PutIntInstr(IrBuilder.getLocalName(), expIr); + // IrBuilder.addInstr(putIntInstr); + i++; + } else { + sb.append(strconst.charAt(i)); + } + } + if (!sb.isEmpty() && !sb.toString().equals("\"")) { + IrConstantStr str = IrBuilder.getCurrentModule().getStr(sb.toString()); + // System.out.println(sb.toString());//TODO:debug + if (str == null) { + str = new IrConstantStr(sb.toString(), IrBuilder.getStrName()); + IrBuilder.addNewStr(str); + } + printValue.add(str); // 修改为到最后统一输出,而不是立即输出 + // PutStrInstr putStrInstr = new PutStrInstr(IrBuilder.getLocalName(), str); + // IrBuilder.addInstr(putStrInstr); + sb.setLength(0); + } + for (IrValue irValue : printValue) { + if (irValue instanceof IrConstantStr) { + PutStrInstr putStrInstr = new PutStrInstr( + IrBuilder.getLocalName(), (IrConstantStr) irValue); + IrBuilder.addInstr(putStrInstr); + } else { + PutIntInstr putIntInstr = new PutIntInstr(IrBuilder.getLocalName(), irValue); + IrBuilder.addInstr(putIntInstr); + } + } + } + + public static void visitReturn(Stmt stmt) { + IrValue retValue = null; + if (stmt.getChild(1) instanceof Exp) { + retValue = VisitorExp.visitExp((Exp) stmt.getChild(1)); + retValue = IrType.convertType(retValue, IrInterType.INT32); + } + ReturnInstr returnInstr = new ReturnInstr(retValue); + IrBuilder.addInstr(returnInstr); + } + + public static void visitIf(Stmt stmt) { + Cond cond = (Cond) stmt.getChild(2); + Stmt ifStmt = (Stmt) stmt.getChild(4); + if (stmt.getChildren().size() == 7) { + IrBasicBlock ifBlock = new IrBasicBlock( + IrBuilder.getBlockName(), IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(ifBlock); + IrBasicBlock elseBlock = new IrBasicBlock( + IrBuilder.getBlockName(), IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(elseBlock); + VisitorExp.visitCond(cond, ifBlock, elseBlock); + // ifblock解析 + IrBuilder.setCurrentBBlock(ifBlock); + VisitorStmt.visitStmt(ifStmt); + IrBasicBlock followBlock = new IrBasicBlock( + IrBuilder.getBlockName(), IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(followBlock); + JumpInstr jumpInstr = new JumpInstr(followBlock); + IrBuilder.addInstr(jumpInstr); + //elseblock解析 + IrBuilder.setCurrentBBlock(elseBlock); + Stmt elseStmt = (Stmt) stmt.getChild(6); + VisitorStmt.visitStmt(elseStmt); + jumpInstr = new JumpInstr(followBlock); + IrBuilder.addInstr(jumpInstr); + //跳转至followblock + IrBuilder.setCurrentBBlock(followBlock); + } else { + IrBasicBlock ifBlock = new IrBasicBlock( + IrBuilder.getBlockName(), IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(ifBlock); + IrBasicBlock followBlock = new IrBasicBlock( + IrBuilder.getBlockName(), IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(followBlock); + VisitorExp.visitCond(cond, ifBlock, followBlock); + IrBuilder.setCurrentBBlock(ifBlock); + VisitorStmt.visitStmt(ifStmt); + JumpInstr jumpInstr = new JumpInstr(followBlock); + IrBuilder.addInstr(jumpInstr); + //跳转至followblock + IrBuilder.setCurrentBBlock(followBlock); + } + } + + public static void visitFor(Stmt stmt) { + IrBasicBlock condBB = new IrBasicBlock(IrBuilder.getBlockName(), + IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(condBB); + IrBasicBlock bodyBB = new IrBasicBlock(IrBuilder.getBlockName(), + IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(bodyBB); + IrBasicBlock stepBB = new IrBasicBlock(IrBuilder.getBlockName(), + IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(stepBB); + IrBasicBlock followBB = new IrBasicBlock(IrBuilder.getBlockName(), + IrBuilder.getCurrentFunc()); + IrBuilder.addNewBB(followBB); + IrLoop loop = new IrLoop(condBB, bodyBB, stepBB, followBB); + IrBuilder.pushLoop(loop); + ForStmt initStmt = stmt.getinitStmt(); + if (initStmt != null) { + VisitorStmt.visitForStmt(initStmt); + } + JumpInstr jumpInstr = new JumpInstr(condBB); + IrBuilder.addInstr(jumpInstr); + IrBuilder.setCurrentBBlock(condBB); + Cond cond = stmt.getCond(); + if (cond != null) { + VisitorExp.visitCond(cond, bodyBB, followBB); + } else { + JumpInstr jumpBody = new JumpInstr(bodyBB); + IrBuilder.addInstr(jumpBody); + } + IrBuilder.setCurrentBBlock(bodyBB); + Stmt bodyStmt = stmt.getBodyStmt(); + VisitorStmt.visitStmt(bodyStmt); + jumpInstr = new JumpInstr(stepBB); + IrBuilder.addInstr(jumpInstr); + IrBuilder.setCurrentBBlock(stepBB); + ForStmt stepStmt = stmt.getStepStmt(); + if (stepStmt != null) { + VisitorStmt.visitForStmt(stepStmt); + } + JumpInstr jumpCond = new JumpInstr(condBB); + IrBuilder.addInstr(jumpCond); + IrBuilder.popLoop(); + IrBuilder.setCurrentBBlock(followBB); + } /*TODO:此处可能还有问题,循环体和条件、步长表达式等可能不在一个符号表,应该修改,应该比较好改,判断一下stmt是否为block再决定是否last + 细想应该不用,如果body是一个block,那visit的时候符号表next,visit完之后符号表还会next,相当于再解析step的时候还是原来的符号表*/ + + public static void visitForStmt(ForStmt stmt) { + ArrayList lvalList = stmt.getLValList(); + ArrayList expList = stmt.getExpList(); + for (int i = 0; i < lvalList.size(); i++) { + LVal lval = lvalList.get(i); + Exp exp = expList.get(i); + IrValue lvalIr = VisitorExp.visitLVal(lval, true); + IrValue expIr = VisitorExp.visitExp(exp); + expIr = IrType.convertType(expIr, IrInterType.INT32); + StoreInstr storeInstr = new StoreInstr(expIr, lvalIr); + IrBuilder.addInstr(storeInstr); + } + } + + public static void visitBreak(Stmt stmt) { + IrLoop loop = IrBuilder.getCurrentLoop(); + IrBasicBlock followBB = loop.getFollowBB(); + JumpInstr jumpInstr = new JumpInstr(followBB); + IrBuilder.addInstr(jumpInstr); + } + + public static void visitContinue(Stmt stmt) { + IrLoop loop = IrBuilder.getCurrentLoop(); + IrBasicBlock stepBB = loop.getStepBB(); + JumpInstr jumpInstr = new JumpInstr(stepBB); + IrBuilder.addInstr(jumpInstr); + } +}